From 4da198f80da50fb6993f4c11c8261ce2a5659fc6 Mon Sep 17 00:00:00 2001 From: rachelslaybaugh Date: Mon, 27 Apr 2015 14:22:11 -0400 Subject: [PATCH 001/216] fixed typo in z solver. --- tutorial/10-spatial-solver.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tutorial/10-spatial-solver.ipynb b/tutorial/10-spatial-solver.ipynb index a4e254425d..fd9c967bac 100644 --- a/tutorial/10-spatial-solver.ipynb +++ b/tutorial/10-spatial-solver.ipynb @@ -309,8 +309,8 @@ " x[1] = xebc\n", " y[0] = ysbc\n", " y[1] = yebc\n", - " y[0] = zsbc\n", - " y[1] = zebc\n", + " z[0] = zsbc\n", + " z[1] = zebc\n", "\n", "The following are supported boundry conditions:\n", " 1. 0 - vacuum\n", @@ -698,4 +698,4 @@ "metadata": {} } ] -} \ No newline at end of file +} From a01d7faa9e8a3b6f72bdd972080c6345363a88fa Mon Sep 17 00:00:00 2001 From: Brad Richardson Date: Tue, 28 Apr 2015 07:36:32 -0500 Subject: [PATCH 002/216] Get cell number from bit array - Figured out how the MCNP cell number is stored in the bit array in the Surface Source file --- pyne/mcnp.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyne/mcnp.py b/pyne/mcnp.py index 6a1ba0b519..746495c307 100755 --- a/pyne/mcnp.py +++ b/pyne/mcnp.py @@ -457,6 +457,7 @@ def read_tracklist(self): track_data.record = track_info.get_double(abs(self.ncrd)) track_data.nps = track_data.record[0] track_data.bitarray = track_data.record[1] + track_data.cell = int(abs(track_data.bitarray) / 8 % 1e8) track_data.wgt = track_data.record[2] track_data.erg = track_data.record[3] track_data.tme = track_data.record[4] From 24c327ad312fa8bf7177c515755e9c9b9ab1c5c1 Mon Sep 17 00:00:00 2001 From: Brad Richardson Date: Tue, 28 Apr 2015 13:32:04 -0500 Subject: [PATCH 003/216] Use integer divide - as suggested --- pyne/mcnp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyne/mcnp.py b/pyne/mcnp.py index 746495c307..31212e02e0 100755 --- a/pyne/mcnp.py +++ b/pyne/mcnp.py @@ -457,7 +457,7 @@ def read_tracklist(self): track_data.record = track_info.get_double(abs(self.ncrd)) track_data.nps = track_data.record[0] track_data.bitarray = track_data.record[1] - track_data.cell = int(abs(track_data.bitarray) / 8 % 1e8) + track_data.cell = abs(track_data.bitarray) // 8 % 100000000 track_data.wgt = track_data.record[2] track_data.erg = track_data.record[3] track_data.tme = track_data.record[4] From eba1411379be8e230c8168105f79b8e3dfad103d Mon Sep 17 00:00:00 2001 From: Petercue Date: Fri, 1 May 2015 12:38:03 -0700 Subject: [PATCH 004/216] New_dev_guide --- docs/devsguide/index.rst | 1 + docs/devsguide/lhp.png | Bin 0 -> 200034 bytes docs/devsguide/new_dev_guide.rst | 106 +++++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 docs/devsguide/lhp.png create mode 100644 docs/devsguide/new_dev_guide.rst diff --git a/docs/devsguide/index.rst b/docs/devsguide/index.rst index 69ad7f44e6..4696a447d1 100644 --- a/docs/devsguide/index.rst +++ b/docs/devsguide/index.rst @@ -15,6 +15,7 @@ work builds upon past work well. :maxdepth: 1 style_guide + new_devs_guide testing doc release diff --git a/docs/devsguide/lhp.png b/docs/devsguide/lhp.png new file mode 100644 index 0000000000000000000000000000000000000000..c2baed62778fa69c74aac958b3eb56cf2f6a4fe2 GIT binary patch literal 200034 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≫=}v+1NL-4_68$v58k$(xR=JM4-ss4o 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

UKNmdVy4i|rxTc5Y;fJ|nazE&HBXBc^))G~- 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

81N@0FKOn(+!4 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 TY&kqNSiq;LrmI@53=91i{-Ky5 literal 0 HcmV?d00001 diff --git a/docs/devsguide/new_dev_guide.rst b/docs/devsguide/new_dev_guide.rst new file mode 100644 index 0000000000..bebdea459d --- /dev/null +++ b/docs/devsguide/new_dev_guide.rst @@ -0,0 +1,106 @@ +********************* +New Developer's Guide +********************* + +================= +Setting up Github +================= + + +Before you start using GitHub, you have to make Git available on your computer. Even if it’s already installed, it’s probably a good idea to update to the latest version. You can either install it as a package or via another installer, or download the source code and compile it yourself. + +For download of Git visit `here `__ + + +----------------- +Installing on Mac +----------------- + +On Mavericks (10.9) or above you can do this simply by trying to run git from the Terminal the very first time. If you don’t have it installed already, it will prompt you to install it. You might be prompted to install command line developer tools if Xcode isn’t installed on your computer. If you want a more up to date version, you can also install it via a binary installer. An OSX Git installer is maintained and available for download at the `Git website `__. + +--------------------- +Installing on Windows +--------------------- + +There are also a few ways to install Git on Windows. The most official build is available for download on the Git `website `__ and the download will start automatically. Note that this is a project called Git for Windows (also called msysGit), which is separate from Git itself; for more information on it, go to http://msysgit.github.io/. + +------------------- +Installing on Linux +------------------- + +If you want to install Git on Linux via a binary installer, you can generally do so through the basic package-management tool that comes with your distribution. If you’re on Fedora for example, you can use yum: + +$ sudo yum install git + +If you’re on a Debian-based distribution like Ubuntu, try apt-get: + +$ sudo apt-get install git + +For more options, there are instructions for installing on several different Unix flavors on the Git website, at http://git-scm.com/download/linux. + +================================== +Connecting Github account to Git +================================== +More detailed steps go here ‘Github’ + + +#. In your computer's terminal, tell Git your name so your commits will be properly labeled. Type everything after the $ here: + +$ git config --global user.name "YOUR NAME" + +#. Tell Git the email address that will be associated with your Git commits. The email you specify should be the same one found in your email settings on Github. To keep your email address hidden click 'here '_ + +$ git config --global user.email "YOUR EMAIL ADDRESS" + +================================== +Installing from Source +================================== + +NOTE: Might have to install pip, home-brew, and other programs to correctly install. + Also, installing PyNE isn’t the same as cloning the repository. + +PyNE's `website `__ will lead you through the installation. + +To contribute to the project, + +#. Fork PyNE’s `Github repository `__ + (Pull requests can be done on Github by comparing original to your forked repository). + +#. On Github, copy the HTTPS(recommended) link on your the page of your forked version that is located on the right side of the page. + +#. To keep things organized, it would be best to make a directory somewhere that is going to keep these files (Use “cd†to navigate to desired location and use “mkdir DESIRED NAME OF FOLDER†to make the directory and then go inside it). Make that directory your working directory and then enter :: + + $ git clone https://github.com/pyne/pyne.git + +#. The PyNE files are now ready for your manipulations. Everything seen on the PyNE website is given to you. You can easily contribute by editing the contents of the folders, submitting these changes to your repository, and making a pull request to PyNE through Github’s website (click on the Pull Requests tab on the right side of the GitHub page and then submit a New Pull Request). + + +================================== +Signing up for list hosts +================================== + +Writing effective code isn’t easy. Thankfully, the PyNE developers can always be contacted on the listhost at pyne-dev@groups.google.com. Another way to get help is going to https://groups.google.com/forum/#!forum/pyne-users and joining the group to post. + + +================ +Getting Practice +================ + +Novices to open-source projects can get still beneficially contribute to PyNE. +To do so, go to PyNE’s ‘GitHub page ’ and, on the right hand side of the page, click on Issues. Once on this page, click on the “low hanging pinoli†label to display issues beginners can solve. + +.. image:: lhp.png + :width: 700px + :align: center + :height: 340px + :alt: alternate text + +Also, if you were wondering, “low hanging pinoli†is a pine pun for low hanging pine fruit to call newbies. + +================================== +Adding and Updating Documentation +================================== + + + +To contribute, you can edit the text file in any program that allows you to edit text(Vim,textedit, Nano, etc) and doesn’t invisibly add characters to the file(like Word). The only important part is to write the file in a manner that’s considered reStructuredText (check out http://sphinx-doc.org/rest.html). Then, Sphinx will do everything else under the hood as described `here `__. Finally, commit these changes to your forked version and submit a pull request (through GitHub or the command line). From d38c6ee93a7e0d25a4d6a03cdd7ab5aa424857fc Mon Sep 17 00:00:00 2001 From: crivera96 Date: Sat, 2 May 2015 01:22:36 -0700 Subject: [PATCH 005/216] Github Installation and Basic Use --- GithubSetup | 1 + docs/devsguide/index.rst 2 | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 160000 GithubSetup create mode 100644 docs/devsguide/index.rst 2 diff --git a/GithubSetup b/GithubSetup new file mode 160000 index 0000000000..a73c274372 --- /dev/null +++ b/GithubSetup @@ -0,0 +1 @@ +Subproject commit a73c2743725df2e1ec2f2327e330adecdb316e17 diff --git a/docs/devsguide/index.rst 2 b/docs/devsguide/index.rst 2 new file mode 100644 index 0000000000..afb5dafdc8 --- /dev/null +++ b/docs/devsguide/index.rst 2 @@ -0,0 +1,31 @@ +.. Github Setup documentation master file, created by + sphinx-quickstart on Fri May 1 16:50:13 2015. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to Github Setup's documentation! +======================================== +**Installing Github** + +Go to https://help.github.com/articles/set-up-git/ and follow the directions. +The download should include the latest Github visual interface as well as a Bash shell terminal if your computer does not already have one. + +**Pushing Code and Documentation to Github** + +Follow this tutorial: https://help.github.com/articles/pushing-to-a-remote/. +This tutorial covers how to push changes to local and remote repositories as well as how to fork directories and initiate pull requests. + +Contents: + +.. toctree:: + :maxdepth: 2 + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + From ffc92a1a4a37faca059d064af6366ade96d99b9a Mon Sep 17 00:00:00 2001 From: elliottbiondo Date: Wed, 7 Oct 2015 15:50:35 -0500 Subject: [PATCH 006/216] native support, multiple particles --- docs/usersguide/source_sampling.rst | 9 +++++---- share/source.F90 | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/usersguide/source_sampling.rst b/docs/usersguide/source_sampling.rst index f2b6fbf8ff..e6ae67f023 100644 --- a/docs/usersguide/source_sampling.rst +++ b/docs/usersguide/source_sampling.rst @@ -208,17 +208,18 @@ Once MCNP5 is compiled, MCNP5 can be run normally. The file "source.h5m" must be present in the working directory that MCNP5 is run from. This file should contain source densities (on the "source_density" tag) and optionally biased source densities (the "biased_source_density" tag). An "idum" card must be used -in the MCNP5 input file. This card should have two arguments. The first is the +in the MCNP5 input file. This card should have three arguments. The first is the sampling mode (0: analog, 1: uniform, 2: user). The second is the resample limit for void rejection. For a given particle, if a source position is selected in void (MCNP materal 0) the source position is resampled within the selected mesh volume element until either a non-void position is found, or this -user-specified limit is researched. +user-specified limit is researched. The third argument should specify the +particle type: 1 for neutrons, 2 for photons. For example, this "idum" card specifies uniform sampling with a resample limit -of 100: +of 100 with source particles specified as photons: .. code-block:: bash - idum 1 100 + idum 1 100 2 diff --git a/share/source.F90 b/share/source.F90 index d4ea0de66c..5cecd9eebd 100644 --- a/share/source.F90 +++ b/share/source.F90 @@ -27,7 +27,7 @@ function find_cell() result(icl_tmp) icl_tmp = -1 do i = 1, mxa - call chkcel(i, 2, j) + call chkcel(i, 0, j) if (j .eq. 0) then ! valid cel set icl_tmp = i @@ -84,7 +84,7 @@ subroutine source icl = icl_tmp tme = 0.0 - ipt = 2 + ipt = idum(3) jsu = 0 return From 86b49acf1e44633db59871720cefffb82b03eea7 Mon Sep 17 00:00:00 2001 From: Marissa Zweig Date: Tue, 21 Jul 2015 15:11:08 -0700 Subject: [PATCH 007/216] Added CRAM to alara.py --- pyne/alara.py | 151 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 149 insertions(+), 2 deletions(-) diff --git a/pyne/alara.py b/pyne/alara.py index d1cb7d3bbe..ea3a4c23b7 100644 --- a/pyne/alara.py +++ b/pyne/alara.py @@ -25,8 +25,10 @@ from pyne.mesh import Mesh, MeshError from pyne.material import Material, from_atom_frac -from pyne.nucname import serpent, alara, znum, anum -from pyne.data import N_A +from pyne.nucname import serpent, alara, znum, anum, id +from pyne.data import N_A, decay_const, decay_children +from pyne.xs.data_source import SimpleDataSource + def mesh_to_fluxin(flux_mesh, flux_tag, fluxin="fluxin.out", reverse=False): @@ -530,3 +532,148 @@ def irradiation_blocks(material_lib, element_lib, data_library, cooling, s += "dump_file {0}\n".format(dump_file) return s + +""" Chebyshev Rational Approximation Method functions +""" + +def _build_matrix(N): + """ This function builds burnup matrix, A. Decay only. + """ + + A = np.zeros((len(N), len(N))) + + # convert N to id form + N_id = [] + for i in xrange(len(N)): + ID = id(N[i]) + N_id.append(ID) + + sds = SimpleDataSource() + + # Decay + for i in xrange(len(N)): + A[i, i] -= decay_const(N_id[i]) + + # Find decay parents + for k in xrange(len(N)): + if N_id[i] in decay_children(N_id[k]): + A[k, i] += decay_const(N_id[k]) + + return A + +def _rat_apprx_14(A, t, n_0): + """ CRAM of order 14 + + Parameters + --------- + + A : numpy array + Burnup matrix + t : float + Time step + n_0: numpy array + Inital composition vector + """ + + theta = np.array([ complex(-8.8977731864688888199, 16.630982619902085304), + complex(-3.7032750494234480603, 13.656371871483268171), + complex(-.2087586382501301251, 10.991260561901260913), + complex(3.9933697105785685194, 6.0048316422350373178), + complex(5.0893450605806245066, 3.5888240290270065102), + complex(5.6231425727459771248, 1.1940690463439669766), + complex(2.2697838292311127097, 8.4617379730402214019)]) + + alpha = np.array([ complex( -.000071542880635890672853, .00014361043349541300111), + complex(.0094390253107361688779, -.01784791958483017511), + complex(-.37636003878226968717, .33518347029450104214), + complex(-23.498232091082701191, -5.8083591297142074004), + complex(46.933274488831293047, 45.643649768827760791), + complex(-27.875161940145646468, -102.14733999056451434), + complex(4.8071120988325088907, -1.3209793837428723881)]) + + alpha_0 = np.array([1.8321743782540412751*10**(-14)]) + + s = 7 + A = A*t + n = 0*n_0 + + for j in range(7): + n = n + np.dot(alpha[j]*n_0, np.linalg.inv(A - theta[j] * np.identity(np.shape(A)[0]))) + + n = 2*n.real + n = n + alpha_0*n_0 + + return n + +def _rat_apprx_16(A, t, n_0): + """ CRAM of order 16 + + Parameters + --------- + + A : numpy array + Burnup matrix + t : float + Time step + n_0: numpy array + Inital composition vector + """ + theta = np.array([ complex(-10.843917078696988026, 19.277446167181652284), + complex(-5.2649713434426468895, 16.220221473167927305), + complex(5.9481522689511774808, 3.5874573620183222829), + complex(3.5091036084149180974, 8.4361989858843750826), + complex(6.4161776990994341923, 1.1941223933701386874), + complex(1.4193758971856659786, 10.925363484496722585), + complex(4.9931747377179963991, 5.9968817136039422260), + complex(-1.4139284624888862114, 13.497725698892745389)]) + + alpha = np.array([ complex(-.0000005090152186522491565, -.00002422001765285228797), + complex(.00021151742182466030907, .0043892969647380673918), + complex(113.39775178483930527, 101.9472170421585645), + complex(15.059585270023467528, -5.7514052776421819979), + complex(-64.500878025539646595, -224.59440762652096056), + complex(-1.4793007113557999718, 1.7686588323782937906), + complex(-62.518392463207918892, -11.19039109428322848), + complex(.041023136835410021273, -.15743466173455468191)]) + + alpha_0 = np.array([2.1248537104952237488*10**(-16)]) + + + s = 8 + A = A*t + n = 0*n_0 + + for j in range(8): + n = n + np.dot(alpha[j]*n_0, np.linalg.inv(A - theta[j] * np.identity(np.shape(A)[0]))) + + n = 2*n.real + n = n + alpha_0*n_0 + return n + +def CRAM(N, t, n_0, order): + """ This function returns matrix exponential solution n using CRAM14 or CRAM16 + + Parameters + ---------- + + N : list or array + Array of nuclides under consideration + t : float + Time step + n_0 : list or array + Nuclide concentration vector + order : int + Order of method. Only 14 and 16 are supported. + """ + + n_0 = np.array(n_0) + A = build_matrix(N) + + if order == 14: + return rat_apprx_14(A, t, n_0) + + if order == 16: + return rat_apprx_16(A, t, n_0) + + else: + return 'Rational approximation of degree %d is not supported.' % order From 87debeb9dc15c8437eebf3226eae89ad26b12e25 Mon Sep 17 00:00:00 2001 From: Marissa Zweig Date: Fri, 21 Aug 2015 10:20:39 -0700 Subject: [PATCH 008/216] updated cram methods --- pyne/alara.py | 89 +++++++++++++++++++++++++-------------------------- 1 file changed, 43 insertions(+), 46 deletions(-) diff --git a/pyne/alara.py b/pyne/alara.py index ea3a4c23b7..1ba1d7d0a2 100644 --- a/pyne/alara.py +++ b/pyne/alara.py @@ -1,4 +1,4 @@ -"""This module contains functions relevant to the ALARA activation code. +"""This module contains functions relevant to the ALARA activation code and the Chebyshev Rational Approximation Method """ from __future__ import print_function import os @@ -25,7 +25,8 @@ from pyne.mesh import Mesh, MeshError from pyne.material import Material, from_atom_frac -from pyne.nucname import serpent, alara, znum, anum, id +from pyne import nucname +from pyne.nucname import serpent, alara, znum, anum from pyne.data import N_A, decay_const, decay_children from pyne.xs.data_source import SimpleDataSource @@ -533,9 +534,6 @@ def irradiation_blocks(material_lib, element_lib, data_library, cooling, return s -""" Chebyshev Rational Approximation Method functions -""" - def _build_matrix(N): """ This function builds burnup matrix, A. Decay only. """ @@ -545,7 +543,7 @@ def _build_matrix(N): # convert N to id form N_id = [] for i in xrange(len(N)): - ID = id(N[i]) + ID = nucname.id(N[i]) N_id.append(ID) sds = SimpleDataSource() @@ -566,7 +564,6 @@ def _rat_apprx_14(A, t, n_0): Parameters --------- - A : numpy array Burnup matrix t : float @@ -575,23 +572,23 @@ def _rat_apprx_14(A, t, n_0): Inital composition vector """ - theta = np.array([ complex(-8.8977731864688888199, 16.630982619902085304), - complex(-3.7032750494234480603, 13.656371871483268171), - complex(-.2087586382501301251, 10.991260561901260913), - complex(3.9933697105785685194, 6.0048316422350373178), - complex(5.0893450605806245066, 3.5888240290270065102), - complex(5.6231425727459771248, 1.1940690463439669766), - complex(2.2697838292311127097, 8.4617379730402214019)]) + theta = np.array([ -8.8977731864688888199 + 16.630982619902085304j, + -3.7032750494234480603 + 13.656371871483268171j, + -.2087586382501301251 + 10.991260561901260913j, + 3.9933697105785685194 + 6.0048316422350373178j, + 5.0893450605806245066 + 3.5888240290270065102j, + 5.6231425727459771248 + 1.1940690463439669766j, + 2.2697838292311127097 + 8.4617379730402214019j]) - alpha = np.array([ complex( -.000071542880635890672853, .00014361043349541300111), - complex(.0094390253107361688779, -.01784791958483017511), - complex(-.37636003878226968717, .33518347029450104214), - complex(-23.498232091082701191, -5.8083591297142074004), - complex(46.933274488831293047, 45.643649768827760791), - complex(-27.875161940145646468, -102.14733999056451434), - complex(4.8071120988325088907, -1.3209793837428723881)]) + alpha = np.array([-.000071542880635890672853 + .00014361043349541300111j, + .0094390253107361688779 - .01784791958483017511j, + -.37636003878226968717 + .33518347029450104214j, + -23.498232091082701191 - 5.8083591297142074004j, + 46.933274488831293047 + 45.643649768827760791j, + -27.875161940145646468 - 102.14733999056451434j, + 4.8071120988325088907 - 1.3209793837428723881j]) - alpha_0 = np.array([1.8321743782540412751*10**(-14)]) + alpha_0 = np.array([1.8321743782540412751e-14]) s = 7 A = A*t @@ -610,7 +607,6 @@ def _rat_apprx_16(A, t, n_0): Parameters --------- - A : numpy array Burnup matrix t : float @@ -618,25 +614,25 @@ def _rat_apprx_16(A, t, n_0): n_0: numpy array Inital composition vector """ - theta = np.array([ complex(-10.843917078696988026, 19.277446167181652284), - complex(-5.2649713434426468895, 16.220221473167927305), - complex(5.9481522689511774808, 3.5874573620183222829), - complex(3.5091036084149180974, 8.4361989858843750826), - complex(6.4161776990994341923, 1.1941223933701386874), - complex(1.4193758971856659786, 10.925363484496722585), - complex(4.9931747377179963991, 5.9968817136039422260), - complex(-1.4139284624888862114, 13.497725698892745389)]) - - alpha = np.array([ complex(-.0000005090152186522491565, -.00002422001765285228797), - complex(.00021151742182466030907, .0043892969647380673918), - complex(113.39775178483930527, 101.9472170421585645), - complex(15.059585270023467528, -5.7514052776421819979), - complex(-64.500878025539646595, -224.59440762652096056), - complex(-1.4793007113557999718, 1.7686588323782937906), - complex(-62.518392463207918892, -11.19039109428322848), - complex(.041023136835410021273, -.15743466173455468191)]) - - alpha_0 = np.array([2.1248537104952237488*10**(-16)]) + theta = np.array([ -10.843917078696988026 + 19.277446167181652284j, + -5.2649713434426468895 + 16.220221473167927305j, + 5.9481522689511774808 + 3.5874573620183222829j, + 3.5091036084149180974 + 8.4361989858843750826j, + 6.4161776990994341923 + 1.1941223933701386874j, + 1.4193758971856659786 + 10.925363484496722585j, + 4.9931747377179963991 + 5.9968817136039422260j, + -1.4139284624888862114 + 13.497725698892745389j]) + + alpha = np.array([ -.0000005090152186522491565 - .00002422001765285228797j, + .00021151742182466030907 + .0043892969647380673918j, + 113.39775178483930527 + 101.9472170421585645j, + 15.059585270023467528 - 5.7514052776421819979j, + -64.500878025539646595 - 224.59440762652096056j, + -1.4793007113557999718 + 1.7686588323782937906j, + -62.518392463207918892 - 11.19039109428322848j, + .041023136835410021273 - .15743466173455468191j]) + + alpha_0 = np.array([2.1248537104952237488e-16]) s = 8 @@ -650,12 +646,11 @@ def _rat_apprx_16(A, t, n_0): n = n + alpha_0*n_0 return n -def CRAM(N, t, n_0, order): +def cram(N, t, n_0, order): """ This function returns matrix exponential solution n using CRAM14 or CRAM16 Parameters ---------- - N : list or array Array of nuclides under consideration t : float @@ -672,8 +667,10 @@ def CRAM(N, t, n_0, order): if order == 14: return rat_apprx_14(A, t, n_0) - if order == 16: + elif order == 16: return rat_apprx_16(A, t, n_0) else: - return 'Rational approximation of degree %d is not supported.' % order + msg = 'Rational approximation of degree {0} is not supported.'.format(order) + raise ValueError(msg) + From 40a2f55042e6a76edc225b6d1c46801604a33628 Mon Sep 17 00:00:00 2001 From: Marissa Ramirez Zweiger Date: Sat, 10 Oct 2015 14:14:17 -0400 Subject: [PATCH 009/216] Fixed branching ratio bug --- pyne/alara.py | 59 +++++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/pyne/alara.py b/pyne/alara.py index 1ba1d7d0a2..54bbb55019 100644 --- a/pyne/alara.py +++ b/pyne/alara.py @@ -91,7 +91,7 @@ def photon_source_to_hdf5(filename, chunkshape=(10000,)): """Converts a plaintext photon source file to an HDF5 version for quick later use. - This function produces a single HDF5 file named .h5 containing the + This function produces a single HDF5 file named .h5 containing the table headings: idx : int @@ -215,7 +215,7 @@ def photon_source_hdf5_to_mesh(mesh, filename, tags): else: tag_handles[tags[cond]][ve] = [0] * num_e_groups -def record_to_geom(mesh, cell_fracs, cell_mats, geom_file, matlib_file, +def record_to_geom(mesh, cell_fracs, cell_mats, geom_file, matlib_file, sig_figs=6): """This function preforms the same task as alara.mesh_to_geom, except the geometry is on the basis of the stuctured array output of @@ -232,7 +232,7 @@ def record_to_geom(mesh, cell_fracs, cell_mats, geom_file, matlib_file, The output from dagmc.discretize_geom(). A sorted, one dimensional array, each entry containing the following fields: - :idx: int + :idx: int The volume element index. :cell: int The geometry cell number. @@ -254,7 +254,7 @@ def record_to_geom(mesh, cell_fracs, cell_mats, geom_file, matlib_file, """ # Create geometry information header. Note that the shape of the geometry # (rectangular) is actually inconsequential to the ALARA calculation so - # unstructured meshes are not adversely affected. + # unstructured meshes are not adversely affected. geometry = 'geometry rectangular\n\n' # Create three strings in order to create all ALARA input blocks in a @@ -287,7 +287,7 @@ def record_to_geom(mesh, cell_fracs, cell_mats, geom_file, matlib_file, mixture += 'end\n\n' - mat_loading += ' zone_{0} mix_{1}\n'.format(i, + mat_loading += ' zone_{0} mix_{1}\n'.format(i, unique_mixtures.index(ve_mixture)) volume += 'end\n\n' @@ -295,7 +295,7 @@ def record_to_geom(mesh, cell_fracs, cell_mats, geom_file, matlib_file, with open(geom_file, 'w') as f: f.write(geometry + volume + mat_loading + mixture) - + matlib = '' # ALARA material library string printed_mats = [] @@ -310,7 +310,7 @@ def record_to_geom(mesh, cell_fracs, cell_mats, geom_file, matlib_file, matlib += '{0} {1: 1.6E} {2}\n'.format(name, mat.density, len(mat.comp)) for nuc, comp in mat.comp.iteritems(): - matlib += '{0} {1: 1.6E} {2}\n'.format(alara(nuc), + matlib += '{0} {1: 1.6E} {2}\n'.format(alara(nuc), comp*100.0, znum(nuc)) matlib += '\n' @@ -331,7 +331,7 @@ def mesh_to_geom(mesh, geom_file, matlib_file): geometry and materials portion of an ALARA input file, as well as a corresponding matlib file. If the mesh is structured, xyz ordering is used (z changing fastest). If the mesh is unstructured iMesh.iterate order is - used. + used. Parameters ---------- @@ -344,7 +344,7 @@ def mesh_to_geom(mesh, geom_file, matlib_file): """ # Create geometry information header. Note that the shape of the geometry # (rectangular) is actually inconsequential to the ALARA calculation so - # unstructured meshes are not adversely affected. + # unstructured meshes are not adversely affected. geometry = "geometry rectangular\n\n" # Create three strings in order to create all ALARA input blocks in a @@ -357,13 +357,13 @@ def mesh_to_geom(mesh, geom_file, matlib_file): for i, mat, ve in mesh: volume += " {0: 1.6E} zone_{1}\n".format(mesh.elem_volume(ve), i) mat_loading += " zone_{0} mix_{0}\n".format(i) - matlib += "mat_{0} {1: 1.6E} {2}\n".format(i, mesh.density[i], + matlib += "mat_{0} {1: 1.6E} {2}\n".format(i, mesh.density[i], len(mesh.comp[i])) mixture += ("mixture mix_{0}\n" " material mat_{0} 1 1\nend\n\n".format(i)) for nuc, comp in mesh.comp[i].iteritems(): - matlib += "{0} {1: 1.6E} {2}\n".format(alara(nuc), comp*100.0, + matlib += "{0} {1: 1.6E} {2}\n".format(alara(nuc), comp*100.0, znum(nuc)) matlib += "\n" @@ -372,15 +372,15 @@ def mesh_to_geom(mesh, geom_file, matlib_file): with open(geom_file, 'w') as f: f.write(geometry + volume + mat_loading + mixture) - + with open(matlib_file, 'w') as f: f.write(matlib) def num_density_to_mesh(lines, time, m): """num_density_to_mesh(lines, time, m) - This function reads ALARA output containing number density information and - creates material objects which are then added to a supplied PyNE Mesh object. - The volumes within ALARA are assummed to appear in the same order as the + This function reads ALARA output containing number density information and + creates material objects which are then added to a supplied PyNE Mesh object. + The volumes within ALARA are assummed to appear in the same order as the idx on the Mesh object. Parameters @@ -410,7 +410,7 @@ def num_density_to_mesh(lines, time, m): # Get decay time index from next line (the column the decay time answers # appear in. line_strs = lines.pop(0).replace('\t', ' ') - time_index = [s.strip() for s in line_strs.split(' ') + time_index = [s.strip() for s in line_strs.split(' ') if s.strip()].index(time) # Create a dict of mats for the mesh. @@ -442,20 +442,20 @@ def num_density_to_mesh(lines, time, m): m.mats = mats -def irradiation_blocks(material_lib, element_lib, data_library, cooling, +def irradiation_blocks(material_lib, element_lib, data_library, cooling, flux_file, irr_time, output = "number_density", - truncation=1E-12, impurity = (5E-6, 1E-3), + truncation=1E-12, impurity = (5E-6, 1E-3), dump_file = "dump_file"): - """irradiation_blocks(material_lib, element_lib, data_library, cooling, + """irradiation_blocks(material_lib, element_lib, data_library, cooling, flux_file, irr_time, output = "number_density", - truncation=1E-12, impurity = (5E-6, 1E-3), + truncation=1E-12, impurity = (5E-6, 1E-3), dump_file = "dump_file") - This function returns a string of the irradation-related input blocks. This - function is meant to be used with files created by the mesh_to_geom + This function returns a string of the irradation-related input blocks. This + function is meant to be used with files created by the mesh_to_geom function, in order to append the remaining input blocks to form a complete - ALARA input file. Only the simplest irradiation schedule is supported: a - single pulse of time . The notation in this function is consistent + ALARA input file. Only the simplest irradiation schedule is supported: a + single pulse of time . The notation in this function is consistent with the ALARA users' guide, found at: http://alara.engr.wisc.edu/users.guide.html/ @@ -484,7 +484,7 @@ def irradiation_blocks(material_lib, element_lib, data_library, cooling, The impurity parameters (see ALARA users' guide). dump_file: str, optional Path to the dump file. - + Returns ------- s : str @@ -516,7 +516,7 @@ def irradiation_blocks(material_lib, element_lib, data_library, cooling, " {0} flux_1 pulse_once 0 s\nend\n\n".format(irr_time)) s += "pulsehistory pulse_once\n 1 0.0 s\nend\n\n" - + # Output block s += "output zone\n units Ci cm3\n" if isinstance(output, collections.Iterable) and not isinstance(output, basestring): @@ -555,7 +555,10 @@ def _build_matrix(N): # Find decay parents for k in xrange(len(N)): if N_id[i] in decay_children(N_id[k]): - A[k, i] += decay_const(N_id[k]) + A[k, i] += data.branch_ratio(N_id[k], + N_id[i])* :if expand("%") == ""|browse + confirm w|else|confirm w|endif + decay_const(N_id[k]) return A @@ -662,7 +665,7 @@ def cram(N, t, n_0, order): """ n_0 = np.array(n_0) - A = build_matrix(N) + A = _build_matrix(N) if order == 14: return rat_apprx_14(A, t, n_0) From f0eb04f4a300ad86d5b69464febfa1a3d2e77e57 Mon Sep 17 00:00:00 2001 From: Marissa Ramirez Zweiger Date: Sat, 10 Oct 2015 14:15:39 -0400 Subject: [PATCH 010/216] Fixed function name bug --- pyne/alara.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyne/alara.py b/pyne/alara.py index 54bbb55019..3a5011b50d 100644 --- a/pyne/alara.py +++ b/pyne/alara.py @@ -668,10 +668,10 @@ def cram(N, t, n_0, order): A = _build_matrix(N) if order == 14: - return rat_apprx_14(A, t, n_0) + return _rat_apprx_14(A, t, n_0) elif order == 16: - return rat_apprx_16(A, t, n_0) + return _rat_apprx_16(A, t, n_0) else: msg = 'Rational approximation of degree {0} is not supported.'.format(order) From 0cd250e56cf69c87734055f41e8855286241f9af Mon Sep 17 00:00:00 2001 From: Marissa Ramirez Zweiger Date: Mon, 12 Oct 2015 10:34:45 -0400 Subject: [PATCH 011/216] Branch ratio bug fix --- pyne/alara.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/pyne/alara.py b/pyne/alara.py index 3a5011b50d..8a1b8623a4 100644 --- a/pyne/alara.py +++ b/pyne/alara.py @@ -555,11 +555,7 @@ def _build_matrix(N): # Find decay parents for k in xrange(len(N)): if N_id[i] in decay_children(N_id[k]): - A[k, i] += data.branch_ratio(N_id[k], - N_id[i])* :if expand("%") == ""|browse - confirm w|else|confirm w|endif - decay_const(N_id[k]) - + A[i, k] += data.branch_ratio(N_id[k], N_id[i])*decay_const(N_id[k]) return A def _rat_apprx_14(A, t, n_0): @@ -598,7 +594,7 @@ def _rat_apprx_14(A, t, n_0): n = 0*n_0 for j in range(7): - n = n + np.dot(alpha[j]*n_0, np.linalg.inv(A - theta[j] * np.identity(np.shape(A)[0]))) + n += np.linalg.solve(A - theta[j] * np.identity(np.shape(A)[0]), alpha[j]*n_0) n = 2*n.real n = n + alpha_0*n_0 @@ -643,7 +639,7 @@ def _rat_apprx_16(A, t, n_0): n = 0*n_0 for j in range(8): - n = n + np.dot(alpha[j]*n_0, np.linalg.inv(A - theta[j] * np.identity(np.shape(A)[0]))) + n += += np.linalg.solve(A - theta[j] * np.identity(np.shape(A)[0]), alpha[j]*n_0) n = 2*n.real n = n + alpha_0*n_0 From d9cb32ba5397e0b6563ce9cf1770886858b56089 Mon Sep 17 00:00:00 2001 From: Marissa Ramirez Zweiger Date: Mon, 12 Oct 2015 10:39:38 -0400 Subject: [PATCH 012/216] Deleted extra charaters --- pyne/alara.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyne/alara.py b/pyne/alara.py index 8a1b8623a4..0b3b686ae6 100644 --- a/pyne/alara.py +++ b/pyne/alara.py @@ -639,7 +639,7 @@ def _rat_apprx_16(A, t, n_0): n = 0*n_0 for j in range(8): - n += += np.linalg.solve(A - theta[j] * np.identity(np.shape(A)[0]), alpha[j]*n_0) + n += np.linalg.solve(A - theta[j] * np.identity(np.shape(A)[0]), alpha[j]*n_0) n = 2*n.real n = n + alpha_0*n_0 From 9f4ac550d00fb5cf32f3581eeca570bf0f86fa24 Mon Sep 17 00:00:00 2001 From: Anthony Scopatz Date: Mon, 26 Oct 2015 11:51:23 -0400 Subject: [PATCH 013/216] fix numpy version --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 889b8dc308..fef160e692 100755 --- a/setup.py +++ b/setup.py @@ -118,7 +118,7 @@ def cleanpypath(path): def assert_np_version(): low = (1, 8, 0) v = np.version.short_version - cur = tuple(map(int, v.split('.'))) + cur = tuple(map(int, v.split('.')[:2])) if cur < low: msg = "numpy version too low! {0} (have) < 1.8.0 (min)".format(v) raise ValueError(msg) From 2515039a013a84b4400029c6c1204a87379c05ea Mon Sep 17 00:00:00 2001 From: Robert Carlsen Date: Tue, 27 Oct 2015 14:21:18 -0500 Subject: [PATCH 014/216] explicit cast from int to uint (hsize_t) - required for c++11 --- src/material.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/material.cpp b/src/material.cpp index 35130d7632..158a0293f7 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -90,7 +90,7 @@ void pyne::Material::_load_comp_protocol1(hid_t db, std::string datapath, int ro std::string nucpath; hid_t data_set = H5Dopen2(db, datapath.c_str(), H5P_DEFAULT); - hsize_t data_offset[1] = {row}; + hsize_t data_offset[1] = {static_cast(row)}; if (row < 0) { // Handle negative row indices hid_t data_space = H5Dget_space(data_set); @@ -114,7 +114,7 @@ void pyne::Material::_load_comp_protocol1(hid_t db, std::string datapath, int ro // Grab the nuclides std::vector nuclides = h5wrap::h5_array_to_cpp_vector_1d(db, nucpath, H5T_NATIVE_INT); int nuc_size = nuclides.size(); - hsize_t nuc_dims[1] = {nuc_size}; + hsize_t nuc_dims[1] = {static_cast(nuc_size)}; // Get the data hyperslab hid_t data_hyperslab = H5Dget_space(data_set); @@ -366,7 +366,7 @@ void pyne::Material::write_hdf5(std::string filename, std::string datapath, // Make data set properties to enable chunking hid_t data_set_params = H5Pcreate(H5P_DATASET_CREATE); - hsize_t chunk_dims[1] ={chunksize}; + hsize_t chunk_dims[1] = {static_cast(chunksize)}; H5Pset_chunk(data_set_params, 1, chunk_dims); H5Pset_deflate(data_set_params, 1); From ea3c07482f247fe353121510bb7562971720d26e Mon Sep 17 00:00:00 2001 From: Anthony Scopatz Date: Tue, 17 Nov 2015 11:00:23 -0500 Subject: [PATCH 015/216] hotfix for ENSDF alpha handling --- pyne/ensdf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyne/ensdf.py b/pyne/ensdf.py index fb4a439b4f..89af5af24f 100644 --- a/pyne/ensdf.py +++ b/pyne/ensdf.py @@ -677,7 +677,7 @@ def _parse_decay_dataset(lines, decay_s): aparent = parent2 level = 0.0 if level is None else level adaughter = data.id_from_level(_to_id(daughter), level) - alphas.append((aparent, adaughter, dat[0], dat[2])) + alphas.append([aparent, adaughter, dat[0], dat[2]]) ec_rec = _ec.match(line) if ec_rec is not None: dat = _parse_ec_record(ec_rec) From 648e5b3ccd54a9326d64533d44869caabb84e8d0 Mon Sep 17 00:00:00 2001 From: Moritz Kuett Date: Tue, 17 Nov 2015 22:35:39 -0500 Subject: [PATCH 016/216] Small changes in documentation --- pyne/material.pyx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyne/material.pyx b/pyne/material.pyx index a171888f71..69fa000bd6 100644 --- a/pyne/material.pyx +++ b/pyne/material.pyx @@ -686,14 +686,14 @@ cdef class _Material: return newmat def collapse_elements(self, nucset): - """collapse_elements(self) - Collapses the elements in the material, excluding the nucids in - paramater set. This function returns a copy of the material. + """collapse_elements(self, nucset) + Collapses the elements in the material, excluding the nuclids in + the set nucset. This function returns a copy of the material. Returns ------- newmat : Material - A copied and collapseed material. + A copied and collapsed material. """ cdef _Material newmat = Material() From be37f3afae5ece48ab569ad44733ab4e56cc131d Mon Sep 17 00:00:00 2001 From: Moritz Kuett Date: Wed, 18 Nov 2015 08:30:29 -0500 Subject: [PATCH 017/216] nucid not nuclid --- pyne/material.pyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyne/material.pyx b/pyne/material.pyx index 69fa000bd6..8cbf3077eb 100644 --- a/pyne/material.pyx +++ b/pyne/material.pyx @@ -687,7 +687,7 @@ cdef class _Material: def collapse_elements(self, nucset): """collapse_elements(self, nucset) - Collapses the elements in the material, excluding the nuclids in + Collapses the elements in the material, excluding the nucids in the set nucset. This function returns a copy of the material. Returns From 7fac90ec020a2cca1b9a464078bd9fcd882dd632 Mon Sep 17 00:00:00 2001 From: Anthony Scopatz Date: Wed, 18 Nov 2015 12:25:55 -0500 Subject: [PATCH 018/216] removed failing pprints --- .travis.yml | 1 + tests/test_stlcontainers.py | 4 ---- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2f3473cdfc..b412065099 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,7 @@ python: # We don't actually use the Travis Python, but this keeps it organized. - "2.7" - "3.4" + - "3.5" before_install: - sudo apt-get update -qq - sudo apt-get install -y gfortran diff --git a/tests/test_stlcontainers.py b/tests/test_stlcontainers.py index 3118f2f686..e5b3cb46e8 100644 --- a/tests/test_stlcontainers.py +++ b/tests/test_stlcontainers.py @@ -656,8 +656,6 @@ def test_map_str_vector_double(): uismap = isinstance([1.0, -65.5555, 1.0, -65.5555], Mapping) m['Aha'] = [42.42, 18, 42.42, 18] m['Take'] = [1.0, -65.5555, 1.0, -65.5555] - import pprint - pprint.pprint(m) assert_equal(len(m), 2) if uismap: for key, value in m['Take'].items(): @@ -711,8 +709,6 @@ def test_map_int_vector_double(): uismap = isinstance([1.0, -65.5555, 1.0, -65.5555], Mapping) m[1] = [42.42, 18, 42.42, 18] m[42] = [1.0, -65.5555, 1.0, -65.5555] - import pprint - pprint.pprint(m) assert_equal(len(m), 2) if uismap: for key, value in m[42].items(): From 8a7ebdfd89bc6215a42427c8a6a46abe635c2176 Mon Sep 17 00:00:00 2001 From: Anthony Scopatz Date: Wed, 18 Nov 2015 13:51:33 -0500 Subject: [PATCH 019/216] try unicode literalling --- tests/test_ace.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_ace.py b/tests/test_ace.py index 0c6e511998..fc9bd1abb6 100644 --- a/tests/test_ace.py +++ b/tests/test_ace.py @@ -1,5 +1,5 @@ #!/usr/bin/env python - +from __future__ import unicode_literals import os from nose.tools import assert_equal, assert_in, assert_almost_equal From 96386f3081d8bd22d9d007252ce8f47e320622b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20K=C3=BCtt?= Date: Wed, 18 Nov 2015 23:19:54 -0500 Subject: [PATCH 020/216] Fix to numpy version fix #775 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index fef160e692..8730ff339b 100755 --- a/setup.py +++ b/setup.py @@ -116,7 +116,7 @@ def cleanpypath(path): def assert_np_version(): - low = (1, 8, 0) + low = (1, 8) v = np.version.short_version cur = tuple(map(int, v.split('.')[:2])) if cur < low: From c1cd61544be727c42468fb84ebc99ba894581d78 Mon Sep 17 00:00:00 2001 From: Kelly Rowland Date: Mon, 30 Nov 2015 15:00:48 -0800 Subject: [PATCH 021/216] clarify linux source install instructions --- docs/install/linux_source.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/install/linux_source.rst b/docs/install/linux_source.rst index 175f634a68..541ea4225d 100644 --- a/docs/install/linux_source.rst +++ b/docs/install/linux_source.rst @@ -28,13 +28,15 @@ Optional Depenendencies: Most of the dependencies are readily available through package managers. Once all the dependencies are installed, PyNE can be installed. Download and unzip the source (`zip`_, `tar`_) or checkout a verison from the PyNE repository -(`Github`_). Then run the following commands from the unzipped directory:: +(`Github`_). Then run the following commands from the directory above the +unzipped directory:: cd pyne/ python setup.py install --user scripts/nuc_data_make The ``setup.py`` command compiles and installs the PyNE source code. +Note that this command must be done in the top PyNE directory. The ``nuc_data_make`` builds and installs a database of nuclear data. Unfortunately, this must be done as a second step because most nuclear data is under some form of license restriction or export control which From eb89160d76fdda628fb20533d07d8ea8a754b850 Mon Sep 17 00:00:00 2001 From: RachelSlaybaugh Date: Wed, 2 Dec 2015 15:44:39 -0800 Subject: [PATCH 022/216] changed index.rst 2 to conform to less than 80 char lines. --- docs/devsguide/index.rst 2 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/devsguide/index.rst 2 b/docs/devsguide/index.rst 2 index afb5dafdc8..cfbe1b6057 100644 --- a/docs/devsguide/index.rst 2 +++ b/docs/devsguide/index.rst 2 @@ -8,12 +8,14 @@ Welcome to Github Setup's documentation! **Installing Github** Go to https://help.github.com/articles/set-up-git/ and follow the directions. -The download should include the latest Github visual interface as well as a Bash shell terminal if your computer does not already have one. +The download should include the latest Github visual interface as well as a +Bash shell terminal if your computer does not already have one. **Pushing Code and Documentation to Github** Follow this tutorial: https://help.github.com/articles/pushing-to-a-remote/. -This tutorial covers how to push changes to local and remote repositories as well as how to fork directories and initiate pull requests. +This tutorial covers how to push changes to local and remote repositories as +well as how to fork directories and initiate pull requests. Contents: From bdb13148fa5c9fe69e81e5bbce97e242593bcd17 Mon Sep 17 00:00:00 2001 From: RachelSlaybaugh Date: Wed, 2 Dec 2015 15:47:39 -0800 Subject: [PATCH 023/216] made github visual interface optional; I think this addresses scopatz concerns? --- docs/devsguide/index.rst 2 | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/devsguide/index.rst 2 b/docs/devsguide/index.rst 2 index cfbe1b6057..9ef62a94dc 100644 --- a/docs/devsguide/index.rst 2 +++ b/docs/devsguide/index.rst 2 @@ -10,6 +10,7 @@ Welcome to Github Setup's documentation! Go to https://help.github.com/articles/set-up-git/ and follow the directions. The download should include the latest Github visual interface as well as a Bash shell terminal if your computer does not already have one. +Note that the visual interface is not needed and any shell can be used. **Pushing Code and Documentation to Github** From 4a36760b3c98a4a192f539dd06522342a3cf2036 Mon Sep 17 00:00:00 2001 From: RachelSlaybaugh Date: Wed, 2 Dec 2015 16:43:49 -0800 Subject: [PATCH 024/216] fixed spacing and character length. --- docs/devsguide/new_dev_guide.rst | 103 +++++++++++++++++++------------ 1 file changed, 65 insertions(+), 38 deletions(-) diff --git a/docs/devsguide/new_dev_guide.rst b/docs/devsguide/new_dev_guide.rst index bebdea459d..18e8287b3c 100644 --- a/docs/devsguide/new_dev_guide.rst +++ b/docs/devsguide/new_dev_guide.rst @@ -1,34 +1,42 @@ ********************* New Developer's Guide ********************* - ================= Setting up Github ================= - - -Before you start using GitHub, you have to make Git available on your computer. Even if it’s already installed, it’s probably a good idea to update to the latest version. You can either install it as a package or via another installer, or download the source code and compile it yourself. +Before you start using GitHub, you have to make Git available on your computer. +Even if it’s already installed, it’s probably a good idea to update to the +latest version. You can either install it as a package or via another installer, +or download the source code and compile it yourself. For download of Git visit `here `__ - ----------------- Installing on Mac ----------------- - -On Mavericks (10.9) or above you can do this simply by trying to run git from the Terminal the very first time. If you don’t have it installed already, it will prompt you to install it. You might be prompted to install command line developer tools if Xcode isn’t installed on your computer. If you want a more up to date version, you can also install it via a binary installer. An OSX Git installer is maintained and available for download at the `Git website `__. +On Mavericks (10.9) or above you can do this simply by trying to run git from +the Terminal the very first time. If you don’t have it installed already, it +will prompt you to install it. You might be prompted to install command line +developer tools if Xcode isn’t installed on your computer. If you want a more up +to date version, you can also install it via a binary installer. An OSX Git +installer is maintained and available for download at the `Git website +`__. --------------------- Installing on Windows --------------------- - -There are also a few ways to install Git on Windows. The most official build is available for download on the Git `website `__ and the download will start automatically. Note that this is a project called Git for Windows (also called msysGit), which is separate from Git itself; for more information on it, go to http://msysgit.github.io/. +There are also a few ways to install Git on Windows. The most official build is +available for download on the Git `website `__ +and the download will start automatically. Note that this is a project called +Git for Windows (also called msysGit), which is separate from Git itself; for +more information on it, go to http://msysgit.github.io/. ------------------- Installing on Linux ------------------- - -If you want to install Git on Linux via a binary installer, you can generally do so through the basic package-management tool that comes with your distribution. If you’re on Fedora for example, you can use yum: +If you want to install Git on Linux via a binary installer, you can generally do +so through the basic package-management tool that comes with your distribution. +If you’re on Fedora for example, you can use yum: $ sudo yum install git @@ -36,71 +44,90 @@ If you’re on a Debian-based distribution like Ubuntu, try apt-get: $ sudo apt-get install git -For more options, there are instructions for installing on several different Unix flavors on the Git website, at http://git-scm.com/download/linux. +For more options, there are instructions for installing on several different +Unix flavors on the Git website, at http://git-scm.com/download/linux. ================================== Connecting Github account to Git ================================== -More detailed steps go here ‘Github’ - +More detailed steps go here +‘Github’ -#. In your computer's terminal, tell Git your name so your commits will be properly labeled. Type everything after the $ here: +#. In your computer's terminal, tell Git your name so your commits will be +properly labeled. Type everything after the $ here: $ git config --global user.name "YOUR NAME" -#. Tell Git the email address that will be associated with your Git commits. The email you specify should be the same one found in your email settings on Github. To keep your email address hidden click 'here '_ +#. Tell Git the email address that will be associated with your Git commits. The +email you specify should be the same one found in your email settings on Github. +To keep your email address hidden click 'here +'_ $ git config --global user.email "YOUR EMAIL ADDRESS" ================================== Installing from Source ================================== - -NOTE: Might have to install pip, home-brew, and other programs to correctly install. +NOTE: Might have to install pip, home-brew, and other programs to correctly +install. Also, installing PyNE isn’t the same as cloning the repository. -PyNE's `website `__ will lead you through the installation. +PyNE's `website `__ will lead you through the +installation. To contribute to the project, #. Fork PyNE’s `Github repository `__ - (Pull requests can be done on Github by comparing original to your forked repository). + (Pull requests can be done on Github by comparing original to your forked +repository). -#. On Github, copy the HTTPS(recommended) link on your the page of your forked version that is located on the right side of the page. +#. On Github, copy the HTTPS(recommended) link on your the page of your forked +version that is located on the right side of the page. -#. To keep things organized, it would be best to make a directory somewhere that is going to keep these files (Use “cd†to navigate to desired location and use “mkdir DESIRED NAME OF FOLDER†to make the directory and then go inside it). Make that directory your working directory and then enter :: +#. To keep things organized, it would be best to make a directory somewhere that +is going to keep these files (Use “cd†to navigate to desired location and use +“mkdir DESIRED NAME OF FOLDER†to make the directory and then go inside it). +Make that directory your working directory and then enter :: $ git clone https://github.com/pyne/pyne.git -#. The PyNE files are now ready for your manipulations. Everything seen on the PyNE website is given to you. You can easily contribute by editing the contents of the folders, submitting these changes to your repository, and making a pull request to PyNE through Github’s website (click on the Pull Requests tab on the right side of the GitHub page and then submit a New Pull Request). - +#. The PyNE files are now ready for your manipulations. Everything seen on the +PyNE website is given to you. You can easily contribute by editing the contents +of the folders, submitting these changes to your repository, and making a pull +request to PyNE through Github’s website (click on the Pull Requests tab on the +right side of the GitHub page and then submit a New Pull Request). ================================== Signing up for list hosts ================================== - -Writing effective code isn’t easy. Thankfully, the PyNE developers can always be contacted on the listhost at pyne-dev@groups.google.com. Another way to get help is going to https://groups.google.com/forum/#!forum/pyne-users and joining the group to post. - +Writing effective code isn’t easy. Thankfully, the PyNE developers can always be +contacted on the listhost at pyne-dev@groups.google.com. Another way to get help +is going to https://groups.google.com/forum/#!forum/pyne-users and joining the +group to post. ================ Getting Practice ================ +Novices to open-source projects can get still beneficially contribute to PyNE. +To do so, go to PyNE’s ‘GitHub page ’ and, on the +right hand side of the page, click on Issues. Once on this page, click on the +“low hanging pinoli†label to display issues beginners can solve. -Novices to open-source projects can get still beneficially contribute to PyNE. -To do so, go to PyNE’s ‘GitHub page ’ and, on the right hand side of the page, click on Issues. Once on this page, click on the “low hanging pinoli†label to display issues beginners can solve. - -.. image:: lhp.png - :width: 700px +.. figure:: lhp.png :width: 700px :align: center :height: 340px - :alt: alternate text -Also, if you were wondering, “low hanging pinoli†is a pine pun for low hanging pine fruit to call newbies. +Also, if you were wondering, “low hanging pinoli†is a pine pun for low hanging +pine fruit to call newbies. ================================== Adding and Updating Documentation ================================== - - - -To contribute, you can edit the text file in any program that allows you to edit text(Vim,textedit, Nano, etc) and doesn’t invisibly add characters to the file(like Word). The only important part is to write the file in a manner that’s considered reStructuredText (check out http://sphinx-doc.org/rest.html). Then, Sphinx will do everything else under the hood as described `here `__. Finally, commit these changes to your forked version and submit a pull request (through GitHub or the command line). +To contribute, you can edit the text file in any program that allows you to edit +text(Vim,textedit, Nano, etc) and doesn’t invisibly add characters to the +file(like Word). The only important part is to write the file in a manner that’s +considered reStructuredText (check out http://sphinx-doc.org/rest.html). Then, +Sphinx will do everything else under the hood as described `here +`__. Finally, commit these changes to +your forked version and submit a pull request (through GitHub or the command +line). From 4adf96231a9921a327a4e6f49311e9614b8823cb Mon Sep 17 00:00:00 2001 From: RachelSlaybaugh Date: Wed, 2 Dec 2015 20:03:51 -0800 Subject: [PATCH 025/216] removed githubsetup folder. --- GithubSetup | 1 - 1 file changed, 1 deletion(-) delete mode 160000 GithubSetup diff --git a/GithubSetup b/GithubSetup deleted file mode 160000 index a73c274372..0000000000 --- a/GithubSetup +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a73c2743725df2e1ec2f2327e330adecdb316e17 From 87eceb8f5c983396835e577da7e75c103f8fa6da Mon Sep 17 00:00:00 2001 From: Kelly Rowland Date: Fri, 4 Dec 2015 13:13:51 -0800 Subject: [PATCH 026/216] fix typo re: HIPAA --- tutorial/00-intro.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorial/00-intro.ipynb b/tutorial/00-intro.ipynb index ea30c0df01..0b62d3f501 100644 --- a/tutorial/00-intro.ipynb +++ b/tutorial/00-intro.ipynb @@ -187,7 +187,7 @@ "source": [ "# What goes into PyNE?\n", "\n", - "Anything that is not export controllable, proprietary, or under HIPPA restrictions! (If you have questions, ask.)" + "Anything that is not export controllable, proprietary, or under HIPAA restrictions! (If you have questions, ask.)" ] }, { @@ -214,4 +214,4 @@ "metadata": {} } ] -} \ No newline at end of file +} From 4ecdfbfe79972595f36c6d90537f620dfe326a18 Mon Sep 17 00:00:00 2001 From: Anthony Scopatz Date: Mon, 21 Dec 2015 20:06:56 -0800 Subject: [PATCH 027/216] fix EAF data issue --- pyne/dbgen/eaf.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pyne/dbgen/eaf.py b/pyne/dbgen/eaf.py index 4b052672a6..eb2aa3c288 100644 --- a/pyne/dbgen/eaf.py +++ b/pyne/dbgen/eaf.py @@ -48,12 +48,18 @@ def grab_eaf_data(build_dir=""): fpath = os.path.join(build_dir, eaf_gzip) if eaf_gzip not in os.listdir(build_dir): print(" grabbing {0} and placing it in {1}".format(eaf_gzip, fpath)) - urllib.urlretrieve(iaea_url, fpath) + try: + urllib.urlretrieve(iaea_url, fpath) + except (OSError, IOError): + open(fpath, 'a').close() # touch the file if os.path.getsize(fpath) < 3215713: print(" could not get {0} from IAEA; trying S3 mirror".format(eaf_gzip)) os.remove(fpath) - urllib.urlretrieve(s3_base_url + eaf_gzip, fpath) + try: + urllib.urlretrieve(cf_base_url + eaf_gzip, fpath) + except (OSError, IOError): + open(fpath, 'a').close() # touch the file if os.path.getsize(fpath) < 3215713: print(" could not get {0} from S3 mirror".format(eaf_gzip)) return False From e670a3887d228a40c031577f532fdd61b56ce366 Mon Sep 17 00:00:00 2001 From: Anthony Scopatz Date: Tue, 22 Dec 2015 11:05:15 -0800 Subject: [PATCH 028/216] made file downloading more robust --- tests/test_endf.py | 25 ++++--------------------- tests/utils.py | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 21 deletions(-) create mode 100644 tests/utils.py diff --git a/tests/test_endf.py b/tests/test_endf.py index c9289ace95..0d05d121fc 100644 --- a/tests/test_endf.py +++ b/tests/test_endf.py @@ -4,6 +4,9 @@ from math import e from hashlib import md5 +import nose +from nose.tools import assert_equal + import numpy as np from numpy.testing import assert_array_equal, assert_allclose, \ assert_array_almost_equal @@ -17,8 +20,7 @@ from pyne.xs.data_source import ENDFDataSource from pyne import nucname -import nose -from nose.tools import assert_equal +from utils import download_file def ignore_future_warnings(func): """This is a decorator which can be used to ignore FutureWarnings @@ -49,25 +51,6 @@ def array_from_ENDF(fh): 3: endftod, 4: endftod, 5: endftod}) -def download_file(url, localfile, md5_hash): - """Donwload a file and make sure its MD5 hash matches.""" - try: - assert(os.path.isfile(localfile)) - except AssertionError: - try: - import urllib.request as urllib - except ImportError: - import urllib - urllib.urlretrieve(url, localfile) - with open(localfile, "rb") as f: - obs_hash = md5(f.read()).hexdigest() - try: - assert_equal(obs_hash, md5_hash) - except AssertionError: - raise AssertionError("{} hash check failed; please try redownloading " - "the U235 data file.".format(localfile)) - - def test_endftod(): from pyne._utils import endftod obs = [endftod(" 3.28559+12"), diff --git a/tests/utils.py b/tests/utils.py new file mode 100644 index 0000000000..80b48ff596 --- /dev/null +++ b/tests/utils.py @@ -0,0 +1,24 @@ +"""Some PyNE testing utilities.""" +import os +from hashlib import md5 +try: + import urllib.request as urllib +except ImportError: + import urllib2 as urllib + + +def download_file(url, localfile, md5_hash): + """Donwload a file and make sure its MD5 hash matches.""" + if os.path.isfile(localfile): + with open(localfile, "rb") as f: + html = f.read() + else: + req = urllib.Request(url, headers={'User-Agent': 'Mozilla/5.0'}) + with urllib.urlopen(req, timeout=30.0) as f: + html = f.read() + with open(localfile, 'wb') as f: + f.write(html) + obs_hash = md5(html).hexdigest() + if obs_hash != md5_hash: + raise AssertionError("{} hash check failed; please try redownloading " + "the data file.".format(localfile)) From 5392d6346d14b49c7351c1a5b6caa39990d0d0b1 Mon Sep 17 00:00:00 2001 From: Anthony Scopatz Date: Tue, 22 Dec 2015 11:41:46 -0800 Subject: [PATCH 029/216] endl fixes --- tests/test_endl.py | 20 +++----------------- tests/utils.py | 5 ++++- 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/tests/test_endl.py b/tests/test_endl.py index 3bdd93c9f4..fde7db1f38 100644 --- a/tests/test_endl.py +++ b/tests/test_endl.py @@ -19,26 +19,12 @@ else: from StringIO import StringIO -if sys.version_info[0] > 2: - import urllib.request as urllib -else: - import urllib +from utils import download_file def test_loadfile(): - if not os.path.isfile('epdl97_eedl_Pb'): - urllib.urlretrieve( - 'https://www-nds.iaea.org/epdl97/data/endl/eedl/za082000', - 'epdl97_eedl_Pb' - ) - with open('epdl97_eedl_Pb', 'rb') as f: - obs_hash = md5(f.read()).hexdigest() - exp_hash = '502105669e0c0ad917301d219c649aaf' - assert_equal( - obs_hash, exp_hash, - msg='epdl97_eedl_Pb hash check failed; please try redownloading' - ' the epdl97_eedl_Pb data file.' - ) + download_file('https://www-nds.iaea.org/epdl97/data/endl/eedl/za082000', + 'epdl97_eedl_Pb', '502105669e0c0ad917301d219c649aaf') testlib = Library('epdl97_eedl_Pb') # test the nuclides diff --git a/tests/utils.py b/tests/utils.py index 80b48ff596..dc34689aa4 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -14,8 +14,11 @@ def download_file(url, localfile, md5_hash): html = f.read() else: req = urllib.Request(url, headers={'User-Agent': 'Mozilla/5.0'}) - with urllib.urlopen(req, timeout=30.0) as f: + f = urllib.urlopen(req, timeout=30.0) + try: html = f.read() + finally: + f.close() with open(localfile, 'wb') as f: f.write(html) obs_hash = md5(html).hexdigest() From 29977351977d7099741d2153248d3ef23138457d Mon Sep 17 00:00:00 2001 From: Anthony Scopatz Date: Tue, 22 Dec 2015 12:12:02 -0800 Subject: [PATCH 030/216] more fixes --- tests/utils.py | 4 ++++ tests/xs/test_data_source.py | 10 ++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/tests/utils.py b/tests/utils.py index dc34689aa4..c1daceeec5 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -1,5 +1,7 @@ """Some PyNE testing utilities.""" +from __future__ import print_function import os +import sys from hashlib import md5 try: import urllib.request as urllib @@ -13,6 +15,8 @@ def download_file(url, localfile, md5_hash): with open(localfile, "rb") as f: html = f.read() else: + msg = 'Downloading {0!r} to {1!r}'.format(url, localfile) + print(msg, file=sys.stderr) req = urllib.Request(url, headers={'User-Agent': 'Mozilla/5.0'}) f = urllib.urlopen(req, timeout=30.0) try: diff --git a/tests/xs/test_data_source.py b/tests/xs/test_data_source.py index cbc3e2d9ed..59a8f50389 100644 --- a/tests/xs/test_data_source.py +++ b/tests/xs/test_data_source.py @@ -22,10 +22,12 @@ from pyne.xs import data_source from pyne.pyne_config import pyne_conf -if not os.path.isfile('W180.ace'): - u, f = 'https://www-nds.iaea.org/wolfram/w180/beta3/W180.ace', 'W180.ace' - print('Downloading {0} to {1} ...'.format(u, f), file=sys.stderr) - urllib.urlretrieve(u, f) +sys.path.insert(0, os.path.dirname(__file__)) +from utils import download_file +del sys.path[0] + +download_file('https://www-nds.iaea.org/wolfram/w180/beta3/W180.ace', 'W180.ace', + '5349513f196ad594d172bc6ea61dc382') nuc_data = pyne_conf.NUC_DATA_PATH From 17945a7aec75bd49a7ad3473ff76c4630c518c71 Mon Sep 17 00:00:00 2001 From: Daniel Schwen Date: Mon, 21 Dec 2015 12:19:54 -0700 Subject: [PATCH 031/216] User std::abs (#792) --- src/data.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/data.cpp b/src/data.cpp index bc60c4bee7..84a0441e4f 100644 --- a/src/data.cpp +++ b/src/data.cpp @@ -1441,17 +1441,17 @@ int pyne::id_from_level(int nuc, double level, std::string special) { int ret_id = nuc; for (std::map, level_data>::iterator it=nuc_lower; it!=nuc_upper; ++it) { - if ((abs(level - it->second.level) < minv) && + if ((std::abs(level - it->second.level) < minv) && ((char)it->second.special == special.c_str()[0]) && !isnan(it->second.level)) { - minv = abs(level - it->second.level); + minv = std::abs(level - it->second.level); ret_id = it->second.nuc_id; } } // This value was chosen so important transitions in U-235 are not missed if (minv > 3.0) return -nuc; - else + else return ret_id; } From 6b8cf4ee94da60e364a61f7ca3a4571d1b3534a3 Mon Sep 17 00:00:00 2001 From: Daniel Schwen Date: Tue, 22 Dec 2015 15:51:23 -0700 Subject: [PATCH 032/216] Regold tests (#793) --- tests/test_data.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_data.py b/tests/test_data.py index c03a8bb199..c2939f79f1 100644 --- a/tests/test_data.py +++ b/tests/test_data.py @@ -299,7 +299,7 @@ def test_gamma_from_to_byen(): (641500021, 641500006), (390990016, 390990005), (822040062, 822040024), - (902290055, 902290000), + (902290055, 902290001), (400880011, 400880004), (400880011, 400880004), (551310023, 551310009), @@ -377,14 +377,14 @@ def test_alpha_child_byparent(): assert_equal(data.alpha_child_byparent(952410000), [932370047, 932370043, 932370041, 932370038, 932370034, 932370033, 932370032, 932370031, 932370028, 932370027, - 932370026, 932370024, 932370023, 932370022, 932370021, + 932370026, 932370025, 932370023, 932370022, 932370021, 932370020, 932370019, 932370018, 932370017, 932370015, 932370014, 932370013, 932370012, 932370009, 932370008, 932370006, 932370005, 932370004, 932370003, 932370002, 932370001, 932370000]) assert_equal(data.alpha_child_byparent(922350000), - [902310038, -902310000, 902310027, 902310023, 902310020, - 902310018, 902310017, 902310016, 902310014, 902310013, + [902310038, -902310000, 902310028, 902310023, 902310020, + 902310018, -902310000, 902310016, 902310014, 902310013, 902310012, 902310007, 902310005, 902310004, 902310003, 902310002, 902310001, 902310000]) From 424d792e07684a07a8daed4fff67321f75fb7f7c Mon Sep 17 00:00:00 2001 From: jinneykil Date: Sat, 25 Apr 2015 20:10:49 -0700 Subject: [PATCH 033/216] Update 01-nuclide-naming.ipynb --- tutorial/01-nuclide-naming.ipynb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tutorial/01-nuclide-naming.ipynb b/tutorial/01-nuclide-naming.ipynb index 3820778cf4..2588384777 100644 --- a/tutorial/01-nuclide-naming.ipynb +++ b/tutorial/01-nuclide-naming.ipynb @@ -27,8 +27,9 @@ "\n", " * **id (ZAS)**: This type places the charge of the nucleus out front, then has three\n", " digits for the atomic mass number, and ends with four state digits (0 = ground,\n", - " 1 = first metastable state, 2 = second metastable state, etc). Uranium-235 here would\n", - " be expressed as '922350000'. This is the canonical form for nuclides.\n", + " 1 = first metastable state, 2 = second metastable state, etc). Uranium-235 has\n", + " 92 protons and an atomic mass number of 235. It would be expressed as '922350000'\n", + " This is the canonical form for nuclides.\n", " * **name**: This is the more common, human readable notation. The chemical symbol\n", " (one or two characters long) is first, followed by the atomic weight. Lastly if\n", " the nuclide is metastable, the letter *M* is concatenated to the end. For\n", @@ -503,4 +504,4 @@ "metadata": {} } ] -} \ No newline at end of file +} From 512ff0cb6d1758fe74820a63decb397b9a6f8fb9 Mon Sep 17 00:00:00 2001 From: jinneykil Date: Sat, 25 Apr 2015 20:24:43 -0700 Subject: [PATCH 034/216] Update 03-nuclear-data.ipynb --- tutorial/03-nuclear-data.ipynb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tutorial/03-nuclear-data.ipynb b/tutorial/03-nuclear-data.ipynb index 47166af355..aaa4eae8ff 100644 --- a/tutorial/03-nuclear-data.ipynb +++ b/tutorial/03-nuclear-data.ipynb @@ -125,7 +125,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Half Lives (s) & Decay Constants (1/s)" + "## Half Lives (s) & Decay Constants (1/s)\n", + "Finds the amount of time for half of the radionuclide to decay (half life). Decay constant is another measure of the rate of radioactive decay." ] }, { @@ -570,4 +571,4 @@ "metadata": {} } ] -} \ No newline at end of file +} From e0a047a7779817ccb37feec3e1b440a44f3f10e4 Mon Sep 17 00:00:00 2001 From: jinneykil Date: Sat, 25 Apr 2015 20:45:56 -0700 Subject: [PATCH 035/216] Update 01-nuclide-naming.ipynb --- tutorial/01-nuclide-naming.ipynb | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/tutorial/01-nuclide-naming.ipynb b/tutorial/01-nuclide-naming.ipynb index 2588384777..3a824f0c5b 100644 --- a/tutorial/01-nuclide-naming.ipynb +++ b/tutorial/01-nuclide-naming.ipynb @@ -151,7 +151,7 @@ "cell_type": "code", "collapsed": false, "input": [ - "nucname.name(10010000)" + "nucname.name(922350000)" ], "language": "python", "metadata": {}, @@ -161,7 +161,7 @@ "output_type": "pyout", "prompt_number": 4, "text": [ - "u'H1'" + "u'U235'" ] } ], @@ -171,7 +171,7 @@ "cell_type": "code", "collapsed": false, "input": [ - "nucname.name('CM-244m')" + "nucname.name(10010000)" ], "language": "python", "metadata": {}, @@ -181,12 +181,32 @@ "output_type": "pyout", "prompt_number": 5, "text": [ - "u'Cm244M'" + "u'H1'" ] } ], "prompt_number": 5 }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "nucname.name('CM-244m')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 6, + "text": [ + "u'Cm244M'" + ] + } + ], + "prompt_number": 6 + }, { "cell_type": "markdown", "metadata": {}, From 6b9671af2ec49c3bc49fc42deddff43a13b34ee2 Mon Sep 17 00:00:00 2001 From: Daniel Schwen Date: Tue, 22 Dec 2015 16:44:58 -0700 Subject: [PATCH 036/216] Add test to check if tutorial files are valid JSON --- tests/test_tutorial_notebooks.py | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 tests/test_tutorial_notebooks.py diff --git a/tests/test_tutorial_notebooks.py b/tests/test_tutorial_notebooks.py new file mode 100644 index 0000000000..729167186c --- /dev/null +++ b/tests/test_tutorial_notebooks.py @@ -0,0 +1,35 @@ +"""JsonCpp tests""" +import os +try: + import simplejson as json +except ImportError: + import json +try: + from StringIO import StringIO +except ImportError: + from io import StringIO + +import nose +from nose.tools import assert_equal, assert_not_equal, assert_raises, raises, assert_in, \ + assert_true, assert_false + +import glob + +def test_notebooks(): + # add all notbooks with invalid JSON to this list + failed = [] + + # list all notebook files + notebooks = glob.glob('../tutorial/*ipynb') + for notebook in notebooks: + with open(notebook, 'r') as myfile: + try: + # try to parse the JSON + data = json.load(myfile) + except: + failed.append(notebook) + + assert_equal(len(failed), 0, "Not all notbooks contained valid JSON. [%s] failed." % ', '.join(failed)) + +if __name__ == "__main__": + nose.runmodule() From 98b829aca08b2a23b32521a53763225094865720 Mon Sep 17 00:00:00 2001 From: Elliott Biondo Date: Wed, 30 Dec 2015 15:44:17 -0600 Subject: [PATCH 037/216] 14.04 -> 15.04 --- readme.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.rst b/readme.rst index 7baa79444f..292e7c5aa5 100644 --- a/readme.rst +++ b/readme.rst @@ -207,7 +207,7 @@ Ubuntu 14.04 Build script A script for installing PyNE and all its dependencies from scratch on Ubuntu 14.04 is found `here -`_ +`_ .. install-end From 4402a2ae089683761d3380e524eacc4136907e7a Mon Sep 17 00:00:00 2001 From: Elliott Biondo Date: Wed, 30 Dec 2015 15:45:10 -0600 Subject: [PATCH 038/216] 14.04 -> 15.04 description --- readme.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.rst b/readme.rst index 292e7c5aa5..c42361d4ca 100644 --- a/readme.rst +++ b/readme.rst @@ -206,7 +206,7 @@ Ubuntu 14.04 Build script ^^^^^^^^^^^^^^^^^^^^^^^^^ A script for installing PyNE and all its dependencies from scratch on Ubuntu -14.04 is found `here +15.04 is found `here `_ .. install-end From ec48ad6a3bd9477d00c45e3efe44942f42965318 Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 4 Jan 2016 15:40:21 -0800 Subject: [PATCH 039/216] Changed fortran flags, added ensdf-processing executable copying framework and added ensdf-processing files to cmakelists.txt --- cmake/PyneMacros.cmake | 14 +++++++------- setup.py | 6 ++++++ src/CMakeLists.txt | 6 +++++- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/cmake/PyneMacros.cmake b/cmake/PyneMacros.cmake index 1acf16f011..ab52a25740 100644 --- a/cmake/PyneMacros.cmake +++ b/cmake/PyneMacros.cmake @@ -20,22 +20,22 @@ get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME) if (Fortran_COMPILER_NAME MATCHES "gfortran.*") # gfortran - set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-all-loops -fno-f2c -O3 -c -fpic -fdefault-real-8 -fdefault-double-8") - set (CMAKE_Fortran_FLAGS_DEBUG "-fno-f2c -O0 -g -fdefault-real-8 -fdefault-double-8") + set (CMAKE_Fortran_FLAGS_RELEASE "-c -fpic -fdefault-real-8 -fdefault-double-8") + set (CMAKE_Fortran_FLAGS_DEBUG "-c -fpic -fdefault-real-8 -fdefault-double-8") elseif (Fortran_COMPILER_NAME MATCHES "ifort.*") # ifort (untested) - set (CMAKE_Fortran_FLAGS_RELEASE "-f77rtl -O3 -r8") + set (CMAKE_Fortran_FLAGS_RELEASE "-f77rtl -O2 -r8") set (CMAKE_Fortran_FLAGS_DEBUG "-f77rtl -O0 -g -r8") elseif (Fortran_COMPILER_NAME MATCHES "g77") # g77 - set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-all-loops -fno-f2c -O3 -m32") + set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-all-loops -fno-f2c -O2 -m32") set (CMAKE_Fortran_FLAGS_DEBUG "-fno-f2c -O0 -g -m32") else (Fortran_COMPILER_NAME MATCHES "gfortran.*") message ("CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER}) message ("Fortran compiler: " ${Fortran_COMPILER_NAME}) - message ("No optimized Fortran compiler flags are known, we just try -O2...") - set (CMAKE_Fortran_FLAGS_RELEASE "-O2") - set (CMAKE_Fortran_FLAGS_DEBUG "-O0 -g") + message ("No optimized Fortran compiler flags are known, we just try -fpic...") + set (CMAKE_Fortran_FLAGS_RELEASE "-fpic") + set (CMAKE_Fortran_FLAGS_DEBUG "-fpic") endif (Fortran_COMPILER_NAME MATCHES "gfortran.*") macro( add_lib_to_pyne _name _source ) diff --git a/setup.py b/setup.py index 8730ff339b..0448a842cb 100755 --- a/setup.py +++ b/setup.py @@ -175,6 +175,11 @@ def download_decay(): durl.close() return True +ALPHAD_H = os.path.join('build', 'src/alphad') +def copy_ensdf_executables(pynepath): + print('Copying ENSDF Executables to install directory') + ALPHAD_DEST = os.path.join(pynepath, 'alphad') + shutil.copy(ALPHAD_H, ALPHAD_DEST) def generate_decay(): with indir('src'): @@ -431,6 +436,7 @@ def main(): _, pynepath, _ = imp.find_module('pyne', pypath) except ImportError: pynepath = "${HOME}/.local/python2.7/site-packages" + copy_ensdf_executables(pynepath) libpath = abspath(joinpath(pynepath, '..', '..', '..')) binpath = abspath(joinpath(libpath, '..', 'bin')) msg = ("\nNOTE: If you have not done so already, please be sure that your PATH and " diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7df30ec679..4ab6fa0029 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -73,7 +73,8 @@ ELSE() "jsoncustomwriter.cpp" "material.cpp" "nucname.cpp" - "particle.cpp" + "particleadd_executable(alphad ${PROJECT_SOURCE_DIR}/src/ensdf_processing/ALPHAD/alphad.f ++ ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f).cpp" "rxname.cpp" "tally.cpp" "utils.cpp" @@ -102,6 +103,9 @@ endif (MOAB_FOUND) set_source_files_properties(decay.cpp PROPERTIES COMPILE_FLAGS "-O0") +add_executable(alphad ${PROJECT_SOURCE_DIR}/src/ensdf_processing/ALPHAD/alphad.f + ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f) + # Print include dir get_property(inc_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES) message("-- Include paths for ${CMAKE_CURRENT_SOURCE_DIR}: ${inc_dirs}") From e1d0d62b72013786a1d75df05ce86e69cdde1f99 Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 4 Jan 2016 15:43:24 -0800 Subject: [PATCH 040/216] Added ensdf-processing fortran source, and reference files for tests --- src/ensdf_processing/ALPHAD/alphad.f | 1722 ++++++++++ tests/ensdf_processing/alphad/ref_a228.ens | 3007 +++++++++++++++++ .../alphad/ref_a228.ens.alphad.inp | 7 + .../alphad/ref_a228.ens.alphad.rpt | 140 + 4 files changed, 4876 insertions(+) create mode 100755 src/ensdf_processing/ALPHAD/alphad.f create mode 100644 tests/ensdf_processing/alphad/ref_a228.ens create mode 100644 tests/ensdf_processing/alphad/ref_a228.ens.alphad.inp create mode 100644 tests/ensdf_processing/alphad/ref_a228.ens.alphad.rpt diff --git a/src/ensdf_processing/ALPHAD/alphad.f b/src/ensdf_processing/ALPHAD/alphad.f new file mode 100755 index 0000000000..e2b5cc8f8c --- /dev/null +++ b/src/ensdf_processing/ALPHAD/alphad.f @@ -0,0 +1,1722 @@ +! +! PROGRAM ALPHAD +! +! ALPHA DECAY THEORETICAL HALF-LIVES USING PRESTONS SPIN INDEPENDENT +! EQUATIONS. MODIFICATION OF H.V.MICHELS PROGRAM +! FOR THEORY, SEE PAPER IN PHYSICAL REVIEW, VOL71 P865 (1947) +! BY MELVIN A. PRESTON +! +! Version 2.0 : MAY 24, 2004 C.L.Dunford +! Converted to Fortran 95 +! Command line input added +! Version 2.0a: November 6, 2006 T.W.Burrows +! 1. Corrected error which caused erroneous error +! message on second R0 found +! 2. Restored Title and version information to terminal +! dialogue +! 3. Cosmetic cleanup of error messages +! 4. Updated alpha mass and 1 amu to 2003 AME +! +!*********************************************************************** +! +! Version 1 As received from NDP/ORNL +! 1.1 29-Jun-87 Converted from Fortran 63 to Fortran 77 +! (yako) +! (AHF) 1.2 27-May-88 VAX version by Richard C. Ward, C&TD TA +! (AHFYE) Physics, ORNL, 574-5449 +! Date of VAX Version 1.2 is 5/27/88 +! Corrected 5/27/88 to check for presence +! "A" card before doing calculations. +! 1.2 21-Apr-93 Explicitly typed all variables and +! functions +! Delinted using FLINT 2.83 +! Added MDC coding +! (TWB) +! 1.3 1-Apr-94 Merged version 1.2 (21-Apr-93) of ALPHAD +! and version 1.2 (27-May-88) of AHF +! (AHFYE) written by Richard C. Ward +! C&TD TA Physics, ORNL +! Updated masses to data in Audi and +! Wapstra, Nucl. Phys. A565, 1 (1993) +! (Approved by YA) +! Allow for more than 16 characters +! when getting R0 (as per discussion +! with YA) +! Added bounds checks for arrays +! Added check on parent energy for +! even-even parents +! Added checks for non-numeric parent and +! level energies +! Corrected logic for outputing new data +! set +! Implemented "$" formalism for COMMENTs +! Calculated uncertainties on RZERO and +! HF +! Changed most arrays from DOUBLE PRECISION +! to REAL +! Do not output in new file HF if no IA +! (TWB) +! 1.3a 29-Aug-94 Always output two digits in uncertainty +! for R0 +! Output calculated R0 for T+DT, T-DT, +! Q+DQ, and Q-DQ +! Separate data set reports by two lines +! (As per discussions with YA after testing +! version 1.3. TWB) +! 1.4 30-Sep-94 Reworked handling of uncertainties +! 1. Retained information on non-numeric +! uncertainties and output for new HF's +! (See new subroutine CHKNON) +! 2. If DBR is GT or GE and BR>=0.8, +! BR=(1.0+BR)/2., DBR=(1.0-BR)/2. +! 3. If DBR is LT or LE and BR<=0.2, +! BR=DBR=BR/2. +! 4. If no DIA and IA not equal to 1, no +! DHF given +! 5. If no DHF or only one-character DHF +! and HF is E formatted, expand. +! Suppressed output of non A DECAY data +! sets even if echo is on +! Added progress and messages to TTY +! output +! (TWB) +! 1.5 08-Apr-96 Corrected output overflows in T1/2 and +! HF fields of report +! Ignore uncertainty on E(level) if none +! for QP or E(parent) - use E(alpha) if +! given and DE(alpha) nonzero +! Updated alpha atomic mass to 1995 Update +! to the Atomic Mass Evaluation +! DHF truncated in some places - corrected +! (TWB) +! 1.5a 09-Apr-99 Y2K modifications +! Improved ANSI FORTRAN 77 compliance +! Corrected substring range errors in +! outputing HF +! Check for and skip Ionized Atom datasets +! Added coding to get R0 from rich text +! comments +! (TWB) +! 1.6 7-Feb-01 Added UNX MDC code for Linux (RRK) +! +! Please direct any questions or comments to: +! Thomas W. Burrows +! National Nuclear Data Center +! Brookhaven National Laboratory +! Bldg. 197D +! P.O. Box 5000 +! Upton, New York 11973-5000 +! (631) 344-5084 +! nndctb@bnl.gov +! +!*********************************************************************** +! + PROGRAM ALPHAD +! + IMPLICIT NONE +! + INTEGER(KIND=4), PARAMETER :: idefi = 5, idefo = 6 + INTEGER(KIND=4), PARAMETER :: inp = 20, irpt = 21, iout = 22 +! + CHARACTER(LEN=*), PARAMETER :: version = 'ALPHAD Version 2.0a' + CHARACTER(LEN=*), PARAMETER :: verdate = '06-Nov-2006' + CHARACTER(LEN=11) :: xdate +! +!+++MDC+++ +!...VMS +!/ CHARACTER(LEN=*), PARAMETER :: nuldev = 'NL:' +!/ CHARACTER(LEN=*), PARAMETER :: ostat = 'NEW' +!...UNX +!/ CHARACTER(LEN=*), PARAMETER :: nuldev = '/dev/null' +!/ CHARACTER(LEN=*), PARAMETER :: ostat = 'REPLACE' +!...DVF + CHARACTER(LEN=*), PARAMETER :: nuldev = ' ' + CHARACTER(LEN=*), PARAMETER :: ostat = 'REPLACE' +!---MDC--- +! +! CONSTANTS USED IN THE PROGRAM +! +! AMASS = ALPHA MASS IN AMU +! Updated alpha mass to Audi and Wapstra (Nucl. Phys. A729, 337 +! (2003)) + REAL(KIND=8), PARAMETER :: amass = 4.0026032542 +! +! CHARGE UNIT SQUARED = 1.439976 MEV-FM CALLED ESQ +! + REAL(KIND=8), PARAMETER :: esq = 1.439976 +! +! HBAR * C = 197.3286 MEV-FM +! C = 2.998E10 CM/SEC +! + REAL(KIND=8), PARAMETER :: hbarc = 197.3286 +! + INTEGER(KIND=4), PARAMETER :: i500 = 500, i1000 = 10000 + REAL(KIND=8), PARAMETER :: third = 0.3333333333333333333D0 +! +! COMMON /CONST / RMASS, Z +! + REAL(KIND=8) :: rmass, z +! + CHARACTER(LEN=100) :: oname + LOGICAL(KIND=4) :: iecho, ihfac +! + CALL RUN_ALPHAD +! + STOP +! + CONTAINS +! +!*********************************************************************** +! + SUBROUTINE RUN_ALPHAD +! + IMPLICIT NONE +! +! FUNCTIONS USED +! + CHARACTER(LEN=*), INTRINSIC :: TRIM, REPEAT + CHARACTER(LEN=1), INTRINSIC :: CHAR + CHARACTER(LEN=1), EXTERNAL :: LOCASE + INTEGER(KIND=4), INTRINSIC :: INDEX, INT, LEN, MIN0, NINT, & + & LEN_TRIM + INTEGER(KIND=4), EXTERNAL :: INDEXF, IVLSTR, TYPSTR + REAL(KIND=4), INTRINSIC :: ALOG10 + REAL(KIND=4), EXTERNAL :: VALSTR + REAL(KIND=8), INTRINSIC :: DABS, DBLE, DMOD, DSQRT + REAL(KIND=8), EXTERNAL :: DVALST +! +! Local variables +! + CHARACTER(LEN=5) :: ab, sdtime + CHARACTER(LEN=1) :: achk, tunit + CHARACTER(LEN=10) :: atime, estr + CHARACTER(LEN=8) :: blank + CHARACTER(LEN=80) :: card + CHARACTER(LEN=16) :: ctt, rzro + CHARACTER(LEN=2) :: drzro, s1, s2, sdbran, sdenp, sdqp + CHARACTER(LEN=71) :: str + CHARACTER(LEN=20) :: tmpstr + CHARACTER(LEN=3) :: tmstr2 + CHARACTER(LEN=2), DIMENSION(5) :: doutst + CHARACTER(LEN=10), DIMENSION(5) :: outstr + LOGICAL(KIND=4) :: adjust, badcal, badnon, eegd, iend, ierr, & + & isrich, parx, skip, tsta, tstcom + INTEGER(KIND=4) :: ccount, i, ihf, iq, ir, itype, iz, j, jj, & + & k, l, m, n, nerr, sigdig, start, irzro, idrzro + REAL(KIND=4), DIMENSION(500) :: denxit, enxit + REAL(KIND=8) :: a, abrnch, dabr, de, de1, dener, denerx, dfermi, & + & drad, drem, drep, drtm, drtp, dt, dtt, dx, e, e1, & + & ener, enerx, fermi, qs, radius, rem, rep, rtm, & + & rtp, t, temp, tt, unit, x +! + CHARACTER(LEN=2), DIMENSION(i500) :: sdena, sdenl, sdenx, sdinta + LOGICAL(KIND=4), DIMENSION(i500) :: levx + INTEGER(KIND=4), DIMENSION(i500) :: count1 + REAL(KIND=4), DIMENSION(i500) :: abxit + REAL(KIND=4), DIMENSION(i500) :: dabxit, deae, dhf, eae, hf + REAL(KIND=8), DIMENSION(i500) :: dtcal, tcal +! + CHARACTER(LEN=2), DIMENSION(i1000) :: dhfsav + CHARACTER(LEN=8), DIMENSION(i1000) :: hfsav + INTEGER(KIND=4), DIMENSION(i1000) :: cardno +! + CALL OPENFI +! + iend = .FALSE. + ihf = 0 +! IHF counts up the number of HF values calculated + ccount = 0 +! + 10 ierr = .FALSE. + 20 IF(iend) GO TO 70 + achk = ' ' +! +! initialize some parameters +! + t = 0.0 + dt = 0.0 + radius = 0.0 + drad = 0.0 + fermi = 0.0 + dfermi = 0.0 + tt = 0.0 + dtt = 0.0 + tunit = ' ' + blank = ' ' +! + n = 0 + adjust = .FALSE. + abrnch = 1.0 + dabr = 0.0 + j = 0 + k = 0 +! + tsta = .FALSE. + tstcom = .TRUE. + skip = .FALSE. + rzro = ' ' + DO i = 1, i500 + DO WHILE (.TRUE.) +! Change logic so that entire card is read first and then +! converted. This simplifies some logic later on + READ(inp,'(A)',END=50) card +! +! Echo input data if IECHO equals 1 +! + IF(IECho.AND..NOT.skip) WRITE(irpt,'(A)') card +! + ccount = ccount + 1 +! +! FIND BLANK CARD - THIS IS THE ONLY BRANCH OUT OF THIS LOOP +! + IF(card.EQ.' ') THEN + IF(skip.AND.IECho) WRITE(irpt,'(A)') card + skip = .FALSE. + GO TO 30 + END IF +! +! Make sure error flag is reset and check for type of data set +! + IF(card(1:5).NE.' '.AND.card(6:9).EQ.' ') THEN + ierr = .FALSE. + j = INDEX(card(10:39),' A DECAY') + IF(j.EQ.0) THEN + skip = .TRUE. + ELSE + skip = (INDEX(card(10:9+j),'[').GT.0) + END IF + skip = .NOT.(INDEX(card(10:39),' A DECAY').GT.0) + IF(skip) THEN + WRITE(idefo,'(1X,2A)') 'Skipping ===> ', card(1:39) + ELSE + WRITE(idefo,'(1X,2A)') 'Processing ===> ', card(1:39) + END IF + CYCLE + END IF + IF(skip) CYCLE +!------------------------- +! +! INTERPRET PARENT RECORD FOR ENERGY,MASS,Z,T1/2,Q(ALPHA) +! + IF(card(6:9).EQ.' P ') THEN +! +! INTERPRET Q(ALPHA) ..... +! card(65:74)=Q; card(75:76)=DQ +! + tstcom = .FALSE. + CALL DCNVSU(card(65:74),card(75:76),e,de) + sdqp = card(75:76) + CALL LBSUP(sdqp) + IF(TYPSTR(sdqp).NE.1.AND.TYPSTR(sdqp).NE.0) THEN + CALL EMESS(IECho,card,'WARNING: Non-numeric DQ=',sdqp) + END IF + nerr = 80 +! +! INTERPRET PARENT ENERGY LEVEL .... +! card(10:19)=Parent energy; card(20:21)=uncertainty +! + CALL DCNVSU(card(10:19),card(20:21),e1,de1) + e = (e+e1)/1000. + de = DSQRT(de*de+de1*de1)/1000. + sdenp = card(20:21) + CALL LBSUP(sdenp) + IF(TYPSTR(sdenp).NE.1.AND.TYPSTR(sdenp).NE.0) THEN + CALL EMESS(IECho,card, & + & 'WARNING: Non-numeric DE(parent)=',sdenp) + END IF +! + ab = card(1:5) + DO WHILE (.TRUE.) + itype = TYPSTR(ab(3:3)) + IF(itype.NE.1) THEN + CALL ADDSTR(ab,1,' ') + CYCLE + END IF +! +! INTERPRET PARENT MASS .... A +! + a = DVALST(ab(1:3)) +! +! INTERPRET Z OF PARENT .... Z +! + CALL IZEL(ab(4:5),iz) + z = iz +! + IF(e.EQ.0.0) GO TO 60 +! +! determine if even-even case + eegd = .FALSE. + estr = card(10:19) + CALL LBSUP(estr) + IF(TYPSTR(estr).EQ.1.OR.TYPSTR(estr).EQ.-2) THEN + IF((DMOD(z,2.D0)+DMOD(a,2.D0)).EQ.0..AND. & + & VALSTR(estr).EQ.0.) eegd = .TRUE. + parx = .FALSE. + ELSE +! Note if parent energy is non-numeric or missing + CALL EMESS(IECho,card, & + & 'WARNING: Non-numeric or missing E(parent)'& + & ,' ') + parx = .TRUE. + END IF + nerr = 67 + IF(z.EQ.0.0) GO TO 60 +! +! INTERPRET HALF-LIFE OF PARENT .... TT +! INTERPRET HALF-LIFE UNITS .... TUNIT +! card(40:49)=T; card(50:55)=DT +! + atime = card(40:49) + CALL SQZSTR(atime,' ') + ctt = ' ' + n = LEN_TRIM(atime) + IF(n.GT.0) THEN + tunit = atime(n:n) + ELSE + tunit = ' ' + END IF + unit = 1.0 + IF(n.GT.1) THEN + achk = atime(n-1:n-1) + IF(achk.EQ.'P') unit = 1.0E-12 + IF(achk.EQ.'N') unit = 1.0E-9 + IF(achk.EQ.'U') unit = 1.0E-6 + IF(achk.EQ.'M') unit = 1.0E-3 + END IF + IF(unit.EQ.1.0) EXIT + n = n - 1 + EXIT + END DO + sdtime = card(50:55) + CALL LBSUP(sdtime) + IF(TYPSTR(sdtime).NE.1.AND.TYPSTR(sdtime).NE.0) THEN + IF(sdtime(1:1).EQ.'+') THEN + m = INDEX(sdtime,'-') + IF(m.GT.2) THEN + s1 = sdtime(2:m-1) + s2 = sdtime(m+1:) + IF(IVLSTR(s1).GT.IVLSTR(s2)) THEN + sdtime = s1 + ELSE + sdtime = s2 + END IF + CALL EMESS(IECho,card, & + & 'WARNING: Asymetric DT. Using ', & + & sdtime) + ELSE + CALL EMESS(IECho,card, & + & ' WARNING: Non-numeric DT=',sdtime) + END IF + ELSE IF(sdtime(1:1).EQ.'-') THEN + m = INDEX(sdtime,'+') + IF(m.GT.2) THEN + s1 = sdtime(2:m-1) + s2 = sdtime(m+1:) + IF(IVLSTR(s1).GT.IVLSTR(s2)) THEN + sdtime = s1 + ELSE + sdtime = s2 + END IF + CALL EMESS(IECho,card, & + & 'WARNING: Asymetric DT. Using ', & + & sdtime) + ELSE + CALL EMESS(IECho,card, & + & 'WARNING: Non-numeric DT=',sdtime) + END IF + ELSE + CALL EMESS(IECho,card,'WARNING: Non-numeric DT=', & + & sdtime) + END IF + END IF + IF(n.GT.1) THEN + ctt = atime(1:n-1) + CALL DCNVSU(ctt,sdtime,tt,dtt) + ELSE + tt = 0.0 + dtt = 0.0 + END IF + CYCLE + END IF +! +! ACARD not 'P' +! +! INTERPRET NORMALIZATION RECORD FOR TOTAL ALPHA-BRANCHING +! card(32:39)=BR; card(40:41)=DBR +! + IF(card(6:9).EQ.' N ') THEN + tstcom = .FALSE. + CALL DCNVSU(card(32:39),card(40:41),abrnch,dabr) + sdbran = card(40:41) + CALL LBSUP(sdbran) + IF(TYPSTR(sdbran).NE.1.AND.TYPSTR(sdbran).NE.0) THEN + IF(.NOT.IECho) WRITE(irpt,'(/A)') card + IF(sdbran(1:1).EQ.'G'.AND.abrnch.GE.0.8) THEN + dabr = (1.00-abrnch)/2. + abrnch = (1.00+abrnch)/2. + sdbran = ' ' + WRITE(irpt,'(A,F8.5,A,F8.5)') & + & 'WARNING: Assuming BR=', abrnch, '+-', dabr + WRITE(idefo,'(1X,A)') card + WRITE(idefo,'(1X,A,F8.5,A,F8.5)') & + & 'WARNING: Assuming BR=', abrnch, '+-', dabr + ELSE IF(sdbran(1:1).EQ.'L'.AND.abrnch.LE.0.2) THEN + dabr = abrnch/2. + abrnch = dabr + sdbran = ' ' + WRITE(irpt,'(A,F8.5,A,F8.5)') & + & 'WARNING: Assuming BR=', abrnch, '+-', dabr + WRITE(idefo,'(1X,A)') card + WRITE(idefo,'(1X,A,F8.5,A,F8.5)') & + & 'WARNING: Assuming BR=', abrnch, '+-', dabr + ELSE + WRITE(irpt,'(2A)') 'WARNING: Non-numeric DBR=', & + & sdbran + WRITE(idefo,'(1X,A)') card + WRITE(idefo,'(1X,2A)') 'WARNING: Non-numeric DBR=',& + & sdbran + END IF + END IF + IF(abrnch.EQ.0.0) THEN + abrnch = 1.0 + dabr = 0.0 + END IF + CYCLE + END IF +! +! ACARD not 'P' or 'N' + IF(card(6:9).EQ.' CA '.OR.card(6:9).EQ.' cA ') THEN +! +! ACARD equal to 'CA' +! FIND RADIUS (R0) ON CA HF CARD. MUST BE 1ST NO AFTER +! EQUAL MARK ,LOCATED after "$" or COLUMN 20, MAY BE PART +! OF TEXT +! check for presence of 'HF' on card + IF(card(10:11).NE.'HF') CYCLE +! we only read R0 for not even-even so check that first + IF(eegd) CYCLE +! ENSDF format change - comment may start after a "$" or +! in col. 20 + jj = INDEX(card,'$') + IF(jj.EQ.0) THEN + str = card(20:) + ELSE + str = card(jj+1:) + END IF + CALL LBSUP(str) + achk = '=' + iq = INDEX(str,achk) + IF(iq.EQ.0) THEN +! Get rid of offending rich text + CALL REPSTR(str,'|?',' AP ') + iq = INDEX(str,' AP ') + IF(iq.EQ.0) CYCLE + iq = iq + 3 + END IF +! +! CHECK ALSO FOR PRESENCE OF R IN RECORD +! Many different combinations now + isrich = .FALSE. + ir = INDEX(str,'R') +! More offending rich text problems + IF(ir.GT.1) THEN + IF(str(ir-1:ir-1).EQ.'}') ir = 0 + END IF + IF(ir.EQ.0.OR.ir.GT.iq) THEN + ir = INDEX(str,'ro') + IF(ir.EQ.0.OR.ir.GT.iq) THEN + ir = INDEX(str,'r{-0}') + END IF + IF(ir.EQ.0.OR.ir.GT.iq) CYCLE + isrich = .TRUE. + END IF + IF(ir.GT.1) THEN + IF(str(ir-1:ir-1).NE.' ') CYCLE + END IF +! Get rid of offending brackets in rich text format + IF(isrich) THEN + CALL REPSTR(str(iq:),'{ ',CHAR(0)) + CALL REPSTR(str(iq:),'{I',CHAR(0)) + CALL REPSTR(str(iq:),'{',CHAR(0)) + CALL REPSTR(str(iq:),'}',CHAR(0)) + END IF +! + n = LEN_TRIM(str) +! ALPHAD returned only length of string. AHF searched for +! first blank - need both checks + IF(INDEXF(str,iq+1,' ').GT.0) & + & n = MIN0(n,INDEXF(str,iq+1,' ')) + rzro = str(iq+1:n) + IF(rzro.NE.' ' .AND. fermi.NE.0.0) THEN + CALL EMESS(IECho,card,'WARNING: Second R0 found: ', & + & rzro) + END IF +! Get rid of any trailing punctuation + irzro = LEN_TRIM(rzro) + IF(rzro(irzro:irzro).EQ.'.') THEN + IF(INDEX(rzro(1:irzro-1),'.').GT.0) & + & rzro = rzro(1:irzro-1) + ELSE + IF(TYPSTR(rzro(irzro:irzro)).NE.1) & + & rzro = rzro(1:irzro-1) + END IF + DO WHILE (.TRUE.) + irzro = LEN_TRIM(rzro) + IF(TYPSTR(rzro(irzro:irzro)).NE.1) THEN + rzro(irzro:irzro) = ' ' + IF(LEN_TRIM(rzro).GT.0) CYCLE + END IF + IF(rzro.EQ.' ') GO TO 25 + drzro = ' ' + IF(n.LT.LEN_TRIM(str)) THEN + drzro = str(n+1:) + idrzro = LEN_TRIM(drzro) +! Get rid of trailing punctuation + IF(TYPSTR(drzro(idrzro:idrzro)).NE.1) & + & drzro = drzro(1:idrzro-1) + IF(TYPSTR(drzro).NE.1) drzro = ' ' + END IF + achk = ' ' + CALL DCNVSU(rzro,drzro,fermi,dfermi) +! finally WARNING issued if R0 is not between 1. and 2. + IF(fermi.LT.1..OR.fermi.GT.2.) THEN + WRITE(irpt,'(A)') & + & '*** WARNING *** R0 is LT 1. or GT. 2. '& + & //'*** WARNING ***' + WRITE(idefo,'(1X,A)') card + WRITE(idefo,'(1X,A)') & + & 'WARNING: R0 is LT 1. or GT. 2.' + END IF + GO TO 25 + END DO + END IF +! +! ACARD not 'CA' or 'N' or 'P' +! +! INTERPRET LEVEL CARDS FOR ENERGY +! + IF(card(6:9).EQ.' L ') THEN + tstcom = .FALSE. + j = j + 1 + estr = card(10:19) + sdenl(j) = card(20:21) + CALL LBSUP(sdenl(j)) + IF(TYPSTR(sdenl(j)).NE.1.AND.TYPSTR(sdenl(j)).NE.0) THEN + CALL EMESS(IECho,card, & + & 'WARNING: Non-numeric DE(level)=',sdenl(j)) + END IF + CALL CNVS2U(card(10:19),card(20:21),enxit(j),denxit(j)) + IF(TYPSTR(estr).EQ.1.OR.TYPSTR(estr).EQ.-2) THEN + levx(j) = .FALSE. + ELSE +! Note If level energy is non-numeric or missing + CALL EMESS(IECho,card, & + & 'WARNING: Non-numeric or missing E(level)',& + & ' ') + levx(j) = .TRUE. + END IF + CYCLE + END IF +! +! INTERPRET ALPHA CARDS FOR INTENSITY +! + IF(card(6:9).NE.' A ') THEN + CYCLE + END IF +! ACARD equals 'A' +! correction 5/27/88 check for presence of A in column 8 +! before doing calculations + tstcom = .FALSE. + tsta = .TRUE. +! + IF(j.EQ.0) CYCLE + IF(k.GE.i500) THEN + WRITE(idefo,'(1X,A/A,I3,A)') card(1:79), & + & ' ***** MORE THAN', i500, & + & ' alphas. '//'Record ignored.' + CYCLE + END IF + k = k + 1 + sdena(k) = card(20:21) + CALL LBSUP(sdena(k)) + IF(TYPSTR(sdena(k)).NE.1.AND.TYPSTR(sdena(k)).NE.0) THEN + CALL EMESS(IECho,card,'WARNING: Non-numeric DE(alpha)=', & + & sdena(k)) + END IF + CALL CNVS2U(card(10:19),card(20:21),eae(k),deae(k)) + sdinta(k) = card(30:31) + CALL LBSUP(sdinta(k)) + IF(TYPSTR(sdinta(k)).NE.1.AND.TYPSTR(sdinta(k)).NE.0) THEN + CALL EMESS(IECho,card,'WARNING: Non-numeric DIA=', & + & sdinta(k)) + END IF + CALL CNVS2U(card(22:29),card(30:31),abxit(k),dabxit(k)) + enxit(k) = enxit(j) + denxit(k) = denxit(j) + sdenl(k) = sdenl(j) + IF(abxit(k).EQ.0) THEN + abxit(k) = 1.0 + dabxit(k) = 0.0 + ELSE + abxit(k) = abxit(k)/10**2 + dabxit(k) = dabxit(k)/100. + END IF + j = k + count1(k) = ccount + EXIT + 25 END DO +! that exhausts all possibilities for ACARD - read another card +! + END DO +! +!---------- +! Comment data set so get next data set + 30 IF(tstcom) THEN + GO TO 20 + END IF +! correction made 5/27/88 +! check that an A card was read + IF(.NOT.tsta) THEN + GO TO 20 + END IF +! Do calculations + n = k + WRITE(irpt,'(//A)') REPEAT('=',35) + WRITE(irpt,'(A,F4.0,A,F4.0,3A)')' Z: ', z, ' A: ', a, & + & ' DATE RUN ', XDAte, & + & ' '//version//' ['//verdate//']' +! + IF(ierr) THEN + GO TO 10 + END IF + IF(k.EQ.0) GO TO 20 +! IF THIS IS AN EVEN-EVEN NUCLEUS, THEN CALCULATE A +! FIRST APPROXIMATION OF R0 +! +! Redundant +!twb EEGD = (DMOD(Z,2.D0) .EQ. 0.D0) .AND. (DMOD(A,2.D0) .EQ. 0.D0) +! IF THIS IS AN EVEN-EVEN NUCLIDE AND NO ESTIMATE IS GIVEN FOR THE +! RADIUS, THEN CALCULATE ONE. + IF(radius.EQ.0.) THEN + radius = fermi*((a-4.)**third)*1.D-13 + drad = dfermi*((a-4.)**third)*1.D-13 + END IF + IF(eegd.AND.radius.EQ.0.) THEN + radius = 1.51D-13*((a-4.)**third) + drad = 0.0 + END IF +! +! CALCULATE PARTIAL HALF-LIFE .... T +! + IF(tt.NE.0) THEN + dtt = dtt/tt + tt = tt*unit + dtt = dtt*tt + t = tt*DBLE(TCDAY(tunit))/abrnch + dt = dtt*DBLE(TCDAY(tunit))/abrnch + dt = DSQRT(dt*dt+(dabr*t/abrnch)**2) + ELSE + t = 0. + dt = 0. + END IF + RMAss = amass*(a-4.)/(amass+(a-4.)) +! +! CALCULATION OF SCREENING ENERGY +! + qs = z**0.4*(z*65.3-80)*1.D-6 +! +! CALCULATE TOTAL DECAY ENERGY .... ENER +! + ener = e + qs + dener = de +! +! Calculate R0 + fermi = radius/(a-4.)**third*1.D13 + dfermi = drad/(a-4.)**third*1.D13 +!---------------- + nerr = 66 + IF(radius.EQ.0) GO TO 60 + nerr = 65 + IF(t.EQ.0) GO TO 60 +! + DO l = 1, n + sdenx(l) = ' ' + CALL CHKNON(sdenx(l),sdenp,sdenl(l),sdqp,' ',badnon) + IF(badnon) sdenx(l) = '**' + enerx = ener - DBLE(enxit(l))/1000. + denerx = DSQRT(dener*dener+(DBLE(denxit(l)/1000.)**2)) + IF(parx.OR.levx(l)) THEN + IF(eae(l).GT.0) THEN + WRITE(irpt,'(A,F8.2)') & + & 'Non-numeric level or parent energy. '& + & //'Using Ealpha=', eae(l) + enerx = a*DBLE(eae(l))/((a-4.)*1000.) + qs + denerx = a*DBLE(deae(l))/((a-4.)*1000.) + sdenx(l) = sdena(l) + WRITE(idefo,'(1X,A,F8.2)') & + & 'Non-numeric level or parent energy. '// & + & 'Using Ealpha=', eae(l) + ELSE + WRITE(irpt,'(A)') 'Non-numeric level or parent energy. ' + WRITE(idefo,'(1X,A)') & + & 'Non-numeric level or parent energy. ' + END IF + ELSE IF(sdenx(l).EQ.'**'.AND.eae(l).GT.0) THEN + WRITE(irpt,'(A,F8.2)') & + & 'Inconsistent nonnumeric uncertainties. '& + & , 'Using Ealpha=', eae(l) + WRITE(idefo,'(1X,A,F8.2)') & + & 'Inconsistent nonnumeric uncertainties. '& + & , 'Using Ealpha=', eae(l) + enerx = a*DBLE(eae(l))/((a-4.)*1000.) + qs + denerx = a*DBLE(deae(l))/((a-4.)*1000.) + sdenx(l) = sdena(l) + ELSE IF(dener.EQ.0) THEN + IF(eae(l).GT.0.AND.deae(l).GT.0) THEN + WRITE(irpt,'(A,F8.2)') & + & 'No DQP or DE(parent). Using Ealpha='& + & , eae(l) + WRITE(idefo,'(1X,A,F8.2)') & + & 'No DQP or DE(parent). Using Ealpha=', eae(l) + enerx = a*DBLE(eae(l))/((a-4.)*1000.) + qs + denerx = a*DBLE(deae(l))/((a-4.)*1000.) + sdenx(l) = sdena(l) + ELSE + denerx = 0.0D0 + END IF + END IF + IF(eegd) THEN +! SEARCH FOR EVEN-EVEN RADIUS. + tcal(l) = t/DBLE(abxit(1)) + dtcal(l) = tcal(l) & + & *DSQRT((dt/t)**2+(DBLE(dabxit(l))/DBLE(abxit(l)))& + & **2) + IF(dtcal(l).GT.0.) THEN + temp = tcal(l) + dtcal(l) + rtp = radius + CALL GETRAD(enerx,temp,rtp,nerr,badcal,adjust) + IF(badcal) GO TO 60 + temp = tcal(l) - dtcal(l) + rtm = radius + CALL GETRAD(enerx,temp,rtm,nerr,badcal,adjust) + IF(badcal) GO TO 60 + ELSE + rtp = 0. + rtm = 0.0 + END IF + IF(denerx.GT.0.) THEN + temp = enerx + denerx + rep = radius + CALL GETRAD(temp,tcal(l),rep,nerr,badcal,adjust) + IF(badcal) GO TO 60 + temp = enerx - denerx + rem = radius + CALL GETRAD(temp,tcal(l),rem,nerr,badcal,adjust) + IF(badcal) GO TO 60 + ELSE + rep = 0. + rem = 0. + END IF + CALL GETRAD(enerx,tcal(l),radius,nerr,badcal,adjust) + IF(badcal) GO TO 60 + IF(rtp.NE.0.) THEN + drtp = DABS(rtp-radius) + ELSE + rtp = radius + drtp = 0.0 + END IF + IF(rtm.NE.0.) THEN + drtm = DABS(rtm-radius) + ELSE + rtm = radius + drtm = 0.0 + END IF + IF(rep.NE.0.) THEN + drep = DABS(rep-radius) + ELSE + rep = radius + drep = 0.0 + END IF + IF(rem.NE.0.) THEN + drem = DABS(rem-radius) + ELSE + rem = radius + drem = 0.0 + END IF + drad = DSQRT(((drtp+drtm)**2)/4.+((drep+drem)**2)/4.) + fermi = radius/(a-4.)**third*1.D13 + rtp = rtp/(a-4.)**third*1.D13 + rtm = rtm/(a-4.)**third*1.D13 + rep = rep/(a-4.)**third*1.D13 + rem = rem/(a-4.)**third*1.D13 + dfermi = drad/(a-4.)**third*1.D13 +! HF identically equal to one for even-even gs transition + hf(l) = 1.0 + dhf(l) = 0.0 + ELSE + CALL GETHF(hf(l),dhf(l),tcal(l),dtcal(l),radius,drad,enerx, & + & denerx,t,dt,abxit(l),dabxit(l),badcal,nerr) + END IF + IF(l.EQ.1) THEN + WRITE(irpt,'(A)') REPEAT('-',35) + CALL DCNVUS(e,de,outstr(1),10,doutst(1),2) + CALL DCNVUS(enerx,denerx,outstr(2),10,doutst(2),2) + CALL DCNVUS(t,dt,outstr(3),10,doutst(3),2) + CALL DCNVUS(radius*1.D13,drad*1.D13,outstr(4),10,doutst(4), & + & 2) + CALL DCNVUS(fermi,dfermi,outstr(5),10,doutst(5),2) + DO i = 1, 5 + CALL LBSUP(outstr(i)) + CALL LBSUP(doutst(i)) + END DO +! R0 should always be given with 2 digits in uncertainty + IF(LEN_TRIM(doutst(5)).EQ.1) THEN + i = LEN_TRIM(outstr(5)) - INDEX(outstr(5),'.') + 1 + x = fermi*10.D0**i + dx = dfermi*10.D0**i + CALL DCNVUS(x,dx,tmpstr,12,doutst(5),-2) + CALL LBSUP(tmpstr) + outstr(5) = tmpstr(1:INDEX(tmpstr,' ')) + doutst(5) = tmpstr(INDEX(tmpstr,' ')+1:) + CALL LBSUP(doutst(5)) + CALL ADDSTR(outstr(5),LEN_TRIM(outstr(5))-i+1,'.') + END IF + WRITE(irpt,'(A,T13,A,T26,A,T44,A,T63,A)') 'Q ALPHA', & + & 'E TOTAL', 'ALPHA HALF LIFE', 'RADIUS (1E-13 cm)', & + & 'RZERO' + WRITE(irpt,32)(TRIM(outstr(i)),doutst(i),i=1,5) + 32 FORMAT(A,1X,A,T13,A,1X,A,T26,A,' D',1X,A,T44,A,1X,A,T63,A, & + & 2X,A) + IF(eegd) THEN + i = LEN_TRIM(outstr(5)) - 1 + CALL DCNVUS(rtp,0.D0,tmpstr,12,doutst(5),-i) + CALL LBSUP(tmpstr) + CALL NUMSTR(NINT((rtp-fermi)*10.D0**(i-1)),tmstr2) + WRITE(irpt,'(T53,A,1X,A,1X,A)')'R0(T+DT):', TRIM(tmpstr),& + & tmstr2 + CALL DCNVUS(rtm,0.D0,tmpstr,12,doutst(5),-i) + CALL LBSUP(tmpstr) + CALL NUMSTR(NINT((rtm-fermi)*10.D0**(i-1)),tmstr2) + WRITE(irpt,'(T53,A,1X,A,1X,A)')'R0(T-DT):', TRIM(tmpstr),& + & tmstr2 + CALL DCNVUS(rep,0.D0,tmpstr,12,doutst(5),-i) + CALL LBSUP(tmpstr) + CALL NUMSTR(NINT((rep-fermi)*10.D0**(i-1)),tmstr2) + WRITE(irpt,'(T53,A,1X,A,1X,A)')'R0(Q+DQ):', TRIM(tmpstr),& + & tmstr2 + CALL DCNVUS(rem,0.D0,tmpstr,12,doutst(5),-i) + CALL LBSUP(tmpstr) + CALL NUMSTR(NINT((rem-fermi)*10.D0**(i-1)),tmstr2) + WRITE(irpt,'(T53,A,1X,A,1X,A)')'R0(Q-DQ):', TRIM(tmpstr),& + & tmstr2 + eegd = .FALSE. + END IF + END IF + END DO +!--------------- + IF(IHFac) THEN + DO l = 1, n + IF(ihf.GE.i1000) THEN + WRITE(idefo,'(1X,A,I4,A,F8.2,A)') 'More than', i1000, & + & ' alphas. HF for alpha to ', enxit(l), & + & ' not saved.' + ELSE + ihf = ihf + 1 + CALL CNVU2S(hf(l),dhf(l),hfsav(ihf),LEN(hfsav(ihf)), & + & dhfsav(ihf),LEN(dhfsav(ihf))) + CALL CHKNON(dhfsav(ihf),sdtime,sdbran,sdenx(l),sdinta(l),& + & badnon) + IF(badnon) THEN + WRITE(idefo,'(1X,A/1X,A,F8.2,A)') & + & 'Inconsistent nonnumeric uncertainties.', & + & ' HF for alpha to', enxit(l), ' not saved.' + ihf = ihf - 1 + ELSE + sigdig = INT(ALOG10(hf(l))) + IF(sigdig.GT.0) THEN + sigdig = sigdig + 1 + ELSE IF(sigdig.LE.0) THEN + sigdig = 2 - sigdig + END IF + DO WHILE (.TRUE.) + IF(dhfsav(ihf)(1:1).EQ.'G') THEN + CALL CNVU2S(hf(l)-dhf(l),0.0,hfsav(ihf), & + & LEN(hfsav(ihf)),dhfsav(ihf),-sigdig) + IF(dhfsav(ihf)(1:1).EQ.'*'.OR.hfsav(ihf) & + & (LEN_TRIM(hfsav(ihf))-1:).EQ.'.0') THEN + sigdig = sigdig - 1 + CYCLE + END IF + ELSE IF(dhfsav(ihf)(1:1).EQ.'L') THEN + CALL CNVU2S(hf(l)+dhf(l),0.0,hfsav(ihf), & + & LEN(hfsav(ihf)),dhfsav(ihf),-sigdig) + IF(dhfsav(ihf)(1:1).EQ.'*'.OR.hfsav(ihf) & + & (LEN_TRIM(hfsav(ihf))-1:).EQ.'.0') THEN + sigdig = sigdig - 1 + CYCLE + END IF + ELSE IF(dhfsav(ihf)(1:1).EQ.'A'.OR.dhfsav(ihf)(1:1)& + & .EQ.'S'.OR.dhfsav(ihf)(1:1).EQ.'C'.OR. & + & (sdinta(l).EQ.' '.AND.INT(100.*abxit(l)) & + & .NE.100)) THEN + CALL CNVU2S(hf(l),0.0,hfsav(ihf),LEN(hfsav(ihf))& + & ,dhfsav(ihf),-sigdig) + IF(dhfsav(ihf)(1:1).EQ.'*'.OR.hfsav(ihf) & + & (LEN_TRIM(hfsav(ihf))-1:).EQ.'.0') THEN + sigdig = sigdig - 1 + CYCLE + END IF + IF(sdinta(l).EQ.' '.AND.INT(100.*abxit(l)) & + & .NE.100) dhfsav(ihf) = ' ' + ELSE + CALL LBSUP(dhfsav(ihf)) + IF(LEN_TRIM(dhfsav(ihf)).EQ.1.AND. & + & INDEX(hfsav(ihf),'E').GT.0) THEN + tmpstr = ' ' + IF(INDEX(hfsav(ihf),'.').GT.0) THEN + sigdig = INDEX(hfsav(ihf),'E') & + & - INDEX(hfsav(ihf),'.') + 1 + ELSE + sigdig = INDEX(hfsav(ihf),'E') + END IF + DO WHILE (.TRUE.) + CALL CNVU2S(hf(l),dhf(l),tmpstr, & + & LEN(tmpstr),dhfsav(ihf),-sigdig) + CALL LBSUP(tmpstr) + IF(tmpstr(1:1).EQ.'*') THEN + CALL CNVU2S(hf(l),dhf(l),hfsav(ihf), & + & LEN(hfsav(ihf)),dhfsav(ihf), & + & LEN(dhfsav(ihf))) + CALL LBSUP(hfsav(ihf)) + CALL LBSUP(dhfsav(ihf)) + ELSE + hfsav(ihf) & + & = tmpstr(1:INDEX(tmpstr,' ')-1) + tmpstr = tmpstr(INDEX(tmpstr,' ')+1:) + CALL LBSUP(tmpstr) + IF(LEN_TRIM(tmpstr).GT.LEN(doutst(5))) & + & THEN + sigdig = sigdig - 1 + IF(sigdig.LT.0) sigdig = 0 + CYCLE + END IF + dhfsav(ihf) = tmpstr(1:2) + END IF + EXIT + END DO + END IF + END IF + CALL LBSUP(hfsav(ihf)) + j = (LEN(hfsav(ihf))-LEN_TRIM(hfsav(ihf)))/2 + IF(j.GT.0) CALL ADDSTR(hfsav(ihf),1,blank(1:j)) + cardno(ihf) = count1(l) + EXIT + END DO + END IF + END IF + END DO + END IF + WRITE(irpt,'(/4X,A,T23,A)') 'TOTAL HALF LIFE', 'ALPHA BRANCH' + CALL DCNVUS(tt,dtt,outstr(1),10,doutst(1),2) + CALL DCNVUS(abrnch,dabr,outstr(2),10,doutst(2),2) + DO i = 1, 2 + CALL LBSUP(outstr(i)) + CALL LBSUP(doutst(i)) + END DO + WRITE(irpt,'(4X,A,1X,A,1X,A,T23,A,1X,A)') TRIM(outstr(1)), tunit, & + & doutst(1), TRIM(outstr(2)), doutst(2) + IF(adjust) WRITE(irpt,'(A)') 'THIS RADIUS ADJUSTED' + WRITE(irpt,'(''K''/A,T15,A,T30,A,T45,A,T62,A/)') 'ENERGY LEVEL', & + & 'ALPHA ENERGY', 'ABUNDANCE', 'CALC. HALF LIFE', & + & 'HINDRANCE FACTOR' + DO l = 1, n + CALL CNVU2S(enxit(l),denxit(l),outstr(1),10,doutst(1),2) + IF(eae(l).GT.0) THEN + CALL CNVU2S(eae(l),deae(l),outstr(2),10,doutst(2),2) + ELSE + outstr(2) = '-----' + doutst(2) = ' ' + END IF + CALL CNVU2S(abxit(l),dabxit(l),outstr(3),10,doutst(3),2) + CALL DCNVUS(tcal(l),dtcal(l),outstr(4),10,doutst(4),2) + IF(INDEX(outstr(4),'*')+INDEX(doutst(4),'*').GT.0) THEN + CALL DCNVUS(tcal(l),dtcal(l),tmpstr,10,doutst(4),-1) + DO i = LEN_TRIM(tmpstr), 1, -1 + IF(tmpstr(i:i).EQ.' ') THEN + outstr(4) = tmpstr(1:i-1) + doutst(4) = tmpstr(i+1:) + GO TO 35 + END IF + END DO + doutst(4) = ' ' + CALL DCNVUS(tcal(l),0.0D0,outstr(4),10,doutst(4),0) + END IF + 35 CALL CNVU2S(hf(l),dhf(l),outstr(5),10,doutst(5),2) + IF(INDEX(outstr(5),'*')+INDEX(doutst(5),'*').GT.0) THEN + CALL CNVU2S(hf(l),dhf(l),tmpstr,10,doutst(5),-1) + DO i = LEN_TRIM(tmpstr), 1, -1 + IF(tmpstr(i:i).EQ.' ') THEN + outstr(5) = tmpstr(1:i-1) + doutst(5) = tmpstr(i+1:) + GO TO 40 + END IF + END DO + doutst(5) = ' ' + CALL CNVU2S(hf(l),0.0,outstr(5),10,doutst(5),0) + END IF + 40 DO i = 1, 5 + CALL LBSUP(outstr(i)) + CALL LBSUP(doutst(i)) + END DO + IF(LEN_TRIM(doutst(5)).EQ.1.AND.INDEX(outstr(5),'E').GT.0) THEN + tmpstr = ' ' + IF(INDEX(outstr(5),'.').GT.0) THEN + sigdig = INDEX(outstr(5),'E') - INDEX(outstr(5),'.') + 1 + ELSE + sigdig = INDEX(outstr(5),'E') + END IF + DO WHILE (.TRUE.) + CALL CNVU2S(hf(l),dhf(l),tmpstr,LEN(tmpstr),doutst(5), & + & -sigdig) + CALL LBSUP(tmpstr) + IF(tmpstr(1:1).EQ.'*') THEN + CALL CNVU2S(hf(l),dhf(l),outstr(5),LEN(outstr(5)), & + & doutst(5),2) + CALL LBSUP(outstr(5)) + CALL LBSUP(doutst(5)) + ELSE + outstr(5) = tmpstr(1:INDEX(tmpstr,' ')-1) + tmpstr = tmpstr(INDEX(tmpstr,' ')+1:) + CALL LBSUP(tmpstr) + IF(LEN_TRIM(tmpstr).GT.LEN(doutst(5))) THEN + sigdig = sigdig - 1 + IF(sigdig.LT.0) sigdig = 0 + CYCLE + END IF + doutst(5) = tmpstr(1:2) + END IF + EXIT + END DO + END IF + WRITE(irpt,47)(TRIM(outstr(i)),doutst(i),i=1,5) + 47 FORMAT(A,1X,A,T15,A,1X,A,T30,A,1X,A,T45,A,1X,A,T62,A,1X,A) + END DO + GO TO 20 +!---------- +! Come to 88 if end of data found in reading input data + 50 iend = .TRUE. + GO TO 70 +! +! ERROR STATEMENTS + 60 WRITE(irpt,'(A)') REPEAT('-',35) + enerx = ener - DBLE(enxit(1))/1000. + denerx = DSQRT(dener*dener+(DBLE(denxit(1)/1000.)**2)) + CALL DCNVUS(e,de,outstr(1),10,doutst(1),2) + CALL DCNVUS(enerx,denerx,outstr(2),10,doutst(2),2) + CALL DCNVUS(t,dt,outstr(3),10,doutst(3),2) + CALL DCNVUS(1.D13*radius,1.D13*drad,outstr(4),10,doutst(4),2) + CALL DCNVUS(fermi,dfermi,outstr(5),10,doutst(5),2) + DO i = 1, 5 + CALL LBSUP(outstr(i)) + CALL LBSUP(doutst(i)) + END DO + WRITE(irpt,'(A,T13,A,T26,A,T44,A,T63,A)') 'Q ALPHA', 'E TOTAL', & + & 'ALPHA HALF LIFE', 'RADIUS (1E-13 cm)', 'RZERO' + WRITE(irpt,32)(TRIM(outstr(i)),doutst(i),i=1,5) + WRITE(irpt,'(/4X,A,T23,A)') 'TOTAL HALF LIFE', 'ALPHA BRANCH' + CALL DCNVUS(tt,dtt,outstr(1),10,doutst(1),2) + CALL DCNVUS(abrnch,dabr,outstr(2),10,doutst(2),2) + DO i = 1, 2 + CALL LBSUP(outstr(i)) + CALL LBSUP(doutst(i)) + END DO + WRITE(irpt,'(4X,A,1X,A,1X,A,T23,A,1X,A)') TRIM(outstr(1)), tunit, & + & doutst(1), TRIM(outstr(2)), doutst(2) + ierr = .TRUE. +! + SELECT CASE(nerr) + CASE(64) + WRITE(irpt,'(A)') 'RADIUS HAS NOT CONVERGED IN 40 ITERATIONS' + CASE(65) + WRITE(irpt,'(A)') 'HALF LIFE IS ZERO' + CASE(66) + WRITE(irpt,'(A)') 'NO RADIUS HAS BEEN GIVEN' + CASE(67) + WRITE(irpt,'(A)') 'Z WAS NOT FOUND,ZERO RETURNED' + GO TO 20 + CASE(69) + WRITE(irpt,'(A)') 'CALC DIED AFTER NO 19, CONVERGENCE' + CASE(70) + WRITE(irpt,'(A)') 'Zero or negative Energy or partial ', & + & 'T1/2 - RZERO not calculated' + GO TO 20 + CASE(80) + WRITE(irpt,'(A)') 'Q(ALPHA) WAS NOT GIVEN' + GO TO 20 + CASE(90) + WRITE(irpt,'(A)') 'NEGATIVE RADIUS CALCULATED' + CASE DEFAULT + GO TO 70 + END SELECT + GO TO 10 +! this is end of program +! put Hinderance Factors into A card if IHFAC equals 1 +! need to parse through all cards to find A cards + 70 IF(IHFac) THEN + WRITE(idefo,'(/2A)') & + & ' Outputing new data set with computed AHF values to '& + & //'file - ', TRIM(ONAme) + REWIND(UNIT=inp) + start = 1 + ccount = 0 + DO WHILE (.TRUE.) + READ(inp,'(A)',END=80) card + ccount = ccount + 1 + IF(ccount.LT.start) THEN + WRITE(iout,'(A)') card + CYCLE + END IF + IF(card(6:9).EQ.' A ') THEN +! If no intensity is given, the record should not be +! modified + IF(card(22:29).EQ.' ') THEN + WRITE(iout,'(A)') card + WRITE(irpt,'(A/A)')' No IA given.', & + & ' Following record not changed.', & + & card + WRITE(idefo,'(1X,A/1X,A)')' No IA given.', & + & ' Following record not changed.', card +! + DO i = start, ihf + IF(ccount.EQ.cardno(i)) THEN + start = start + 1 + GO TO 5 + END IF + END DO + 5 CYCLE + END IF + DO i = start, ihf + IF(cardno(i).EQ.ccount) THEN + WRITE(iout,'(4A)') card(1:31), hfsav(i), dhfsav(i),& + & card(42:80) + start = start + 1 + GO TO 75 + END IF + END DO + WRITE(iout,'(A)') card + ELSE + WRITE(iout,'(A)') card + END IF + 75 END DO + END IF +! + 80 RETURN + END SUBROUTINE RUN_ALPHAD +! +!*********************************************************************** +! + SUBROUTINE OPENFI +! + IMPLICIT NONE +! +! FUNCTIONS USED +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + CHARACTER(LEN=1), EXTERNAL :: LOCASE +! +! Local variables +! + CHARACTER(LEN=100) :: repnam + CHARACTER(LEN=1) :: yesno +! + INTEGER(KIND=4), PARAMETER :: nf = 5 + CHARACTER(LEN=50), DIMENSION(nf) :: carray + CHARACTER(LEN=50), DIMENSION(nf-1) :: file + CHARACTER(LEN=100) :: line + CHARACTER(LEN=50) :: carrayuc + INTEGER(KIND=4) :: npar, i +! +! DEFINE DEFAULT FILE NAMES +! + file(1) = 'alphad.inp' + file(2) = 'alphad.rpt' + file(3) = 'alphad.out' + file(4) = ' ' +! +! GET CURRENT DATE +! + XDAte = 'DD-MMM-YYYY' + CALL DATE_20(XDAte) +! +! GET COMMAND LINE PARAMETERS IF THERE ARE ANY +! + npar = nf + CALL GET_COMMAND_LINE('%',carray,npar) +! +! Check input for new file names +! + IF(npar.GT.1) THEN + DO i = 2, npar + IF(carray(i).EQ.' '.OR.carray(i).EQ.'#') CYCLE + file(i-1) = carray(i) + carrayuc = carray(i) + CALL UPSTR(carrayuc) + IF(carrayuc.EQ.'NULL') file(i-1) = nuldev + END DO + END IF +! +! Open standard output file if not blank +! + IF(file(4).NE.' ') CALL OPEN_FILE(idefo,file(4),ostat) +! +! OPEN input file +! + IF(npar.EQ.0) THEN + Write(idefo,'(A)') & + & ' Alpha Hinderance Factor Program (AHF,AHFYE,ALPHAD)' + Write(idefo,'(1X,A,1X,''['',A,'']''/)')version,verdate + WRITE(idefo,'(5X,3A,$)')'INPUT DATA FILE (DEF: ', TRIM(file(1))& + & , '): ' + READ(idefi,'(A)') line + IF(line.EQ.' ') line = file(1) + ELSE + line = file(1) + END IF + OPEN(UNIT=inp,FILE=line,STATUS='OLD',ACTION='READ') +! +! OUTPUT REPORT FILE +! + IF(npar.EQ.0) THEN + WRITE(idefo,'(5X,3A,$)') 'OUTPUT REPORT FILE (DEF: ', & + & TRIM(file(2)), '): ' + READ(idefi,'(A)') line + IF(line.EQ.' ') line = file(2) + ELSE + line = file(2) + END IF + repnam = line + CALL OPEN_FILE(irpt,repnam,ostat) +! + yesno = ' ' + IECho = .FALSE. + IF(npar.EQ.0) THEN + WRITE(idefo,'(5X,A,$)') 'Echo input (Y/N) - ' + READ(idefi,'(A)') yesno + ELSE + yesno = carray(1)(1:1) + END IF + IF(yesno.EQ.' ') yesno = 'y' + IF(LOCASE(yesno).EQ.'y') IECho = .TRUE. +! + yesno = ' ' + IHFac = .FALSE. + IF(npar.EQ.0) THEN + WRITE(idefo,'(5X,A,$)') & + & 'Rewrite input with hinderance factor (Y/N): ' + READ(idefi,'(A)') yesno + ELSE + yesno = carray(1)(2:2) + END IF + IF(yesno.EQ.' ') yesno = 'y' + IF(LOCASE(yesno).EQ.'y') IHFac = .TRUE. + IF(IHFac) THEN + IF(npar.EQ.0) THEN + WRITE(idefo,'(5X,3A,$)')'OUTPUT ENSDF DATA SET FILE (DEF: ',& + & TRIM(file(3)), '): ' + READ(idefi,'(A)') line + IF(line.EQ.' ') line = file(3) + ELSE + line = file(3) + END IF + ONAme = line + CALL OPEN_FILE(iout,ONAme,ostat) + END IF +! + WRITE(idefo,'(/A/5X,2A)')' Computations proceeding', & + & ' Report will be written to file: ', & + & TRIM(repnam) +! + RETURN + END SUBROUTINE OPENFI +! +!*********************************************************************** +! + SUBROUTINE OPEN_FILE(I,Ofile,Ostat) +! +! MACHINE DEPENDENT OUTPUT FILE OPEN ROUTINE +! + IMPLICIT NONE +! +! Dummy variables +! + CHARACTER(LEN=*) :: Ofile, Ostat + INTEGER(KIND=4) :: I +! +!+++MDC+++ +!...VMS +!/ OPEN(UNIT=I,FILE=Ofile,ACCESS='SEQUENTIAL',STATUS=Ostat, & +!/ & CARRIAGECONTROL='LIST') +!...UNX, DVF + OPEN(UNIT=I,FILE=Ofile,ACCESS='SEQUENTIAL',STATUS=Ostat) +!---MDC--- +! + RETURN + END SUBROUTINE OPEN_FILE +! +!*********************************************************************** +! + REAL(KIND=4) FUNCTION TCDAY(U) +! +! TCNNN(U) IS A REAL*4 FUNCTION SUBROUTINE WHICH RETURNS THE VALUE +! OF THE FACTOR TO CONVERT THE TIME UNITS OF THE ALPHANUMERIC ARGU- +! MENT (U) TO THE UNITS NNN IN THE ENTRY POINT NAME. +! NNN CAN BE ONE OF THE FOLLOWING: SEC, MIN, HRS, DAY, OR YRS +! U CAN BE ONE OF THE FOLLOWING: S, M, H, D, OR Y +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=1) :: U +! +! Local variables +! + INTEGER(KIND=4) :: n +! + CHARACTER(LEN=1), DIMENSION(5) :: unit + DATA unit/'S', 'M', 'H', 'D', 'Y'/ + REAL(KIND=4), DIMENSION(5) :: tconv + DATA tconv/1., 60., 3600., 86400., 3.15571E7/ +! + DO n = 1, 5 + IF(U.EQ.unit(n)) THEN + TCDAY = tconv(n)/tconv(4) + GO TO 100 + END IF + END DO + WRITE(idefo,'(1X,3A)') 'TIME UNITS NOT RECOGNIZED BY SUBPROGRAM', & + & U, '. ZERO RETURNED.' + TCDAY = 0. +! + 100 RETURN + END FUNCTION TCDAY +! +!*********************************************************************** +! + SUBROUTINE GETRAD(Enerx,T1,Radius,Nerr,Badcal,Adjust) +! +! Split from main routine of ALPHAD on 22-Feb-1993 to allow estimate +! of uncertainty for the radius +! + IMPLICIT NONE +! +! Dummy arguments +! + LOGICAL(KIND=4) :: Adjust, Badcal + REAL(KIND=8) :: Enerx, Radius, T1 + INTEGER(KIND=4) :: Nerr +! +! Local variables +! + REAL(KIND=8) :: akay, alam, alfa, amu, bmu, delr, factor, tcal, & + & test1, test2, y + REAL(KIND=8) :: DABS, DACOS, DCOS, DEXP, DLOG, DSIN, DSQRT, DTAN + INTEGER(KIND=4) :: i, nx +! + IF(Enerx.LE.0..OR.T1.LE.0) THEN + Nerr = 70 + Badcal = .TRUE. + RETURN + END IF + Badcal = .FALSE. + nx = 0 +! +! Corrected 1 amu to value in Audi and Wapstra (Nucl. Phys. A729, 129 +! (2003)) + factor = DSQRT(RMAss/2.*931.4940/Enerx) + akay = DSQRT(2.*Enerx/hbarc**2*RMAss*931.4940) + 10 IF(DSQRT(Radius/2.*1.D13/esq*Enerx/(z-2.)).LE.1.0) THEN + alfa = DACOS(DSQRT(Radius/2.*1.D13/esq*Enerx/(z-2.))) + ELSE + alfa = DACOS(1.0D0) + END IF + bmu = 2.987/(akay*Radius*1.D13) + Nerr = 69 + i = 0 + DO WHILE (.TRUE.) + amu = -DTAN(bmu*akay*Radius*1.D13)*DTAN(alfa) + i = i + 1 + test1 = amu - bmu + test2 = DABS(test1) - 0.00001 + IF(test2.GT.0.) THEN + bmu = bmu + test1/20. + IF(i.EQ.50) THEN + Badcal = .TRUE. + RETURN + END IF + CYCLE + END IF + y = factor/hbarc*(alfa-DSIN(alfa)*DCOS(alfa))*4.*esq*(z-2.) + alam = 2.998D10/Radius/factor*DEXP(-2.*y) & + & /(amu**2+(DTAN(alfa))**2)*amu**2*DTAN(alfa)*2. + tcal = 0.69315/alam/86400. + IF(DABS((tcal-T1)/T1).GT.0.00001) THEN + delr = DLOG(tcal/T1)/(0.21*DSIN(alfa)*DSQRT(z-2.)*2.3026D14) + Radius = Radius + delr*10. + IF(Radius.LT.0) THEN + Nerr = 90 + Badcal = .TRUE. + RETURN + END IF + Adjust = .TRUE. + nx = nx + 1 + IF(nx.LT.40) GO TO 10 + Nerr = 64 + Badcal = .TRUE. + RETURN + END IF + RETURN + END DO +! + RETURN + END SUBROUTINE GETRAD +! +!*********************************************************************** +! + SUBROUTINE GETHF(Hf,Dhf,Tcal,Dtcal,Radius,Drad,Enerx,Denerx,T,Dt, & + & Abxit,Dabxit,Badcal,Nerr) +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=4) :: Abxit, Dabxit, Dhf, Hf + LOGICAL(KIND=4) :: Badcal + REAL(KIND=8) :: Denerx, Drad, Dt, Dtcal, Enerx, Radius, T, Tcal + INTEGER(KIND=4) :: Nerr +! +! Local variables +! + REAL(KIND=8) :: akay, alam, alfa, amu, bmu, dade, dadr, dalam, & + & dbde, dbdr, dfde, dkde, dlde, dldr, dyde, dydr, & + & factor, temp, test1, test2, y + REAL(KIND=8), INTRINSIC :: DABS, DACOS, DBLE, DCOS, DEXP, DMAX1, & + & DSIN, DSQRT, DTAN + INTEGER(KIND=4) :: i +! +! Split from the main program on 22-Feb-1994 to allow calculation +! of uncertainties for the hindrance factors +! + Badcal = .FALSE. +! +! Corrected 1 amu to value in Audi and Wapstra (Nucl. Phys. A729, 129 +! (2003)) + factor = DSQRT(RMAss/2.*931.4940/Enerx) +! Partial derivitive of FACTOR with respect to ENERX + dfde = -0.5*factor/Enerx + akay = DSQRT(2.*Enerx/hbarc**2*RMAss*931.4940) +! Partial derivitive of AKAY with respect to ENERX + dkde = 0.5*akay/Enerx + IF(DSQRT(Radius/2.*1.D13/esq*Enerx/(z-2.)).LE.1.0) THEN + alfa = DACOS(DSQRT(Radius/2.*1.D13/esq*Enerx/(z-2.))) + ELSE + alfa = DACOS(1.0D0) + END IF +! Partial derivitive of ALFA with respect to RADIUS + temp = 2.*1D13*esq*(z-2.) + temp = DSQRT(temp-Radius*Enerx) + dadr = -0.5*DSQRT(Enerx/Radius)/temp +! Partial derivitive of ALFA with respect to ENERX + dade = -0.5*DSQRT(Radius/Enerx)/temp + bmu = 2.987/(akay*Radius*1.D13) +! Partial of BMU with respect to RADIUS + dbdr = -2.987/(1.0D13*akay*Radius*Radius) +! Partial of BMU with respect to ENERX + dbde = -(2.987*dkde)/(1.0D13*akay*akay*Radius) + Nerr = 69 + i = 0 + DO WHILE (.TRUE.) + amu = -DTAN(bmu*akay*Radius*1.D13)*DTAN(alfa) + i = i + 1 + test1 = amu - bmu + test2 = DABS(test1) - 0.00001D0 + IF(test2.GT.0.) THEN + bmu = bmu + test1/20. + IF(i.EQ.50) THEN + Nerr = 63 + Badcal = .TRUE. + RETURN + END IF + CYCLE + END IF + y = factor/hbarc*(alfa-DSIN(alfa)*DCOS(alfa))*4.*esq*(z-2.) + alam = 2.998D10/Radius/factor*DEXP(-2.*y) & + & /(amu**2+(DTAN(alfa))**2)*amu**2*DTAN(alfa)*2. + Tcal = 0.69315/alam/86400. +! Partial derivitive of Y with respect to ENERX + temp = 4.*esq*(z-2.)/hbarc + dyde = temp*((alfa-DSIN(alfa)*DCOS(alfa)) & + & *dfde+2.*factor*dade*DSIN(alfa)*DSIN(alfa)) +! Partial derivitive of Y with respect to RADIUS + dydr = 2.*factor*temp*dadr*DSIN(alfa)*DSIN(alfa) +! Partial derivitive of ALAM with respect to RADIUS + dldr = -amu*amu*DTAN(alfa)*DEXP(-2.D0*y) + dldr = dldr/(Radius*Radius) + dldr = dldr/(amu*amu+DTAN(alfa)*DTAN(alfa)) + dldr = dldr + 4.D0*amu*DEXP(-2.D0*y)*DTAN(alfa) & + & *(DTAN(alfa)*DTAN(alfa)-amu*amu) & + & *dbdr/(Radius*(amu*amu+DTAN(alfa)*DTAN(alfa))**2) + dldr = dldr + amu*amu*DEXP(-2.D0*y) & + & *(1.D0+DTAN(alfa)*DTAN(alfa)) & + & *(amu*amu-DTAN(alfa)*DTAN(alfa)) & + & *dadr/(Radius*(amu*amu+DTAN(alfa)*DTAN(alfa))**2) + dldr = dldr - 2.D0*amu*amu*DTAN(alfa)*DEXP(-2.D0*y) & + & *dydr/(Radius*(amu*amu+DTAN(alfa)*DTAN(alfa))) + dldr = 2.998D+10*2.D0*dldr/factor +! Partial derivitive of ALAM with respect to ENERGX + dlde = (-amu*DTAN(alfa)*dfde/factor) - (2.*amu*DTAN(alfa)*dyde)& + & + (2.*DTAN(alfa)*dbde) & + & *(amu**2+DTAN(alfa)**2-DTAN(alfa)*amu**2) & + & /(amu**2+DTAN(alfa)**2) + ((amu**2-DTAN(alfa)**2)*dade) & + & /(DCOS(alfa)*DCOS(alfa)*(amu**2+DTAN(alfa)**2)) + dlde = (2.*2.998D10*amu*DEXP(-2.*y)*dlde) & + & /(Radius*factor*(amu**2+DTAN(alfa)**2)) + dalam = DSQRT((dldr*Drad)**2+(dlde*Denerx)**2) + Dtcal = dalam*Tcal/alam + Hf = T/DBLE(Abxit)/Tcal + Dhf = DSQRT((Dt/T)**2+(DBLE(Dabxit)/DBLE(Abxit)) & + & **2+(Dtcal/Tcal)**2) + Dhf = Hf*Dhf + RETURN + END DO +! + RETURN + END SUBROUTINE GETHF +! +!*********************************************************************** +! + SUBROUTINE CHKNON(Dhfsav,Sdtime,Sdbran,Sdenx,Sdinta,Badnon) +! + IMPLICIT NONE +! +! Dummy arguments +! + LOGICAL(KIND=4) :: Badnon + CHARACTER(LEN=*) :: Dhfsav, Sdbran, Sdenx, Sdinta, Sdtime +! +! Local variables +! + CHARACTER(LEN=8) :: chkstr + INTEGER(KIND=4) :: i, j + INTEGER(KIND=4) :: INDEX, LEN_TRIM + INTEGER(KIND=4), EXTERNAL :: TYPSTR +! +! Attempts to set a non-numeric uncertainty on the HF uncertainty +! badnon=.TRUE. if this cannot be done +! + IF(Sdenx.EQ.'**') THEN + Badnon = .TRUE. + RETURN + END IF +! + chkstr = ' ' + Badnon = .FALSE. + IF(TYPSTR(Sdtime).NE.1) chkstr = Sdtime + IF(TYPSTR(Sdbran).NE.1) chkstr = TRIM(chkstr)//INVLIM(Sdbran) + IF(TYPSTR(Sdenx).NE.1) chkstr = TRIM(chkstr)//Sdenx + IF(TYPSTR(Sdinta).NE.1) chkstr = TRIM(chkstr)//INVLIM(Sdinta) + CALL SQZSTR(chkstr,' ') + IF(LEN_TRIM(chkstr).EQ.0) RETURN + IF(LEN_TRIM(chkstr).EQ.2) THEN + Dhfsav = chkstr + RETURN + END IF + CALL REPSTR(chkstr(3:),chkstr(1:2),' ') + CALL SQZSTR(chkstr,' ') + IF(LEN_TRIM(chkstr).EQ.2) THEN + Dhfsav = chkstr + RETURN + END IF + IF(LEN_TRIM(chkstr).GT.4) THEN + CALL REPSTR(chkstr(5:),chkstr(3:4),' ') + CALL SQZSTR(chkstr,' ') + END IF + IF(LEN_TRIM(chkstr).GT.6) CALL REPSTR(chkstr(7:),chkstr(5:6),' ') + i = INDEX(chkstr,'G') + j = INDEX(chkstr,'L') + IF(i.NE.0.AND.j.NE.0) GO TO 10 + IF(i.GT.0.OR.j.GT.0) THEN + IF(i.GT.0) Dhfsav = 'GE' + IF(j.GT.0) Dhfsav = 'LE' + IF(INDEX(chkstr,'T').GT.0) Dhfsav(2:2) = 'T' + RETURN + END IF + IF(INDEX(chkstr,'AP').GT.0) THEN + Dhfsav = 'AP' + RETURN + ELSE IF(INDEX(chkstr,'CA').GT.0) THEN + Dhfsav = 'CA' + RETURN + ELSE IF(INDEX(chkstr,'SY').GT.0) THEN + Dhfsav = 'SY' + RETURN + END IF +! + 10 Badnon = .TRUE. +! + RETURN + END SUBROUTINE CHKNON +! +!*********************************************************************** +! + CHARACTER(LEN=2) FUNCTION INVLIM(Str) +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Str +! +! Inverts limits on non-numeric uncertainties +! + INVLIM = Str + IF(Str(1:1).EQ.'G') INVLIM(1:1) = 'L' + IF(Str(1:1).EQ.'L') INVLIM(1:1) = 'G' +! + RETURN + END FUNCTION INVLIM +! +!*********************************************************************** +! + SUBROUTINE EMESS(Iecho,Card,Mess,Val) +! + IMPLICIT NONE +! +! Dummy variables +! + CHARACTER(LEN=*) :: Card, Mess, Val + LOGICAL(KIND=4) :: Iecho +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + Integer(KIND=4), EXTERNAL :: Lenstr +! + IF(.NOT.Iecho) WRITE(irpt,'(/A)') Card + IF(Val.NE.' ') THEN + WRITE(irpt,'(3A)') TRIM(Mess),' ',TRIM(Val) + ELSE + WRITE(irpt,'(A)') TRIM(Mess) + END IF +! + WRITE(idefo,'(1X,A)') Card + IF(Val.NE.' ') THEN + WRITE(idefo,'(1X,3A)') TRIM(Mess),' ',TRIM(Val) + ELSE + WRITE(idefo,'(1X,A)') TRIM(Mess) + END IF +! + RETURN + END SUBROUTINE EMESS +! + END PROGRAM ALPHAD diff --git a/tests/ensdf_processing/alphad/ref_a228.ens b/tests/ensdf_processing/alphad/ref_a228.ens new file mode 100644 index 0000000000..601f11ad4e --- /dev/null +++ b/tests/ensdf_processing/alphad/ref_a228.ens @@ -0,0 +1,3007 @@ +228TH ADOPTED LEVELS, GAMMAS 97NDS 199709 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH Q -2148 5 7109.6 25 6372.0 23 5520.1222 1995AU04 +228TH PN 6 +228TH c +228TH c Calculations, compilations, systematics: +228TH c |a decay widths: 1996De19 +228TH c Biding energies, deformation role: 1986Ch23 +228TH c B(E1) from octupole states: 1989De11, 1986Le05, 1981Le15 +228TH c Cluster model for |a decay; Geiger-Nuttall plot: 1991Bu05, +228TH2c 1986Da03 +228TH c Equilibrium deformation: 1988So08, 1984Na22, 1981Gy03 +228TH c Heavy cluster spontaneous emission: 1996Bu05, 1994Bu07, 1993Go18, +228TH2c 1992Sa30, 1986Po15, 1986Po06 +228TH c Levels, shapes, B(|l): 1996Li18, 1995De13, 1995La01, 1989Hu05, +228TH2c 1989Sh35, 1988Ri07, 1986An10, 1986Go07, 1984Ba59, 1984Ba63 +228TH c Octupole shapes and shape changes: 1987Na10 +228TH c p-n interaction energy: 1990Mo11 +228TH c Rotational bands in even-even nuclei: 1992So10, 1988Ab07 +228TH c Quasi-bands in even-even nuclei: 1984Sa37 +228TH c Super- and hyperdeformed configurations: 1995We02 +228TH c Yrast band parity splitting: 1994Jo02, 1993Jo12 +228TH XA228AC B- DECAY +228TH XB228PA EC DECAY +228TH XC232U A DECAY +228TH XD226RA(A,2NG) +228TH XE230TH(P,T) +228TH XF230TH(A,A'2NG) +228TH cL +228TH cL For a discussion of the level scheme and the rotational +228TH2cL bands see 1995Ba42, 1987Da28 +228TH cL E From least squares fit to E|g +228TH CL BAND(A) GS ROTATIONAL BAND +228TH CL BAND(B) KPI=0- OCTUPOLE-VIBRATIONAL BAND +228TH CL BAND(C) FIRST KPI=0+ BAND +228TH CL BAND(D) SECOND KPI=0+ BAND +228TH CL BAND(F) KPI=1- OCTUPOLE-VIBRATIONAL BAND HEAD +228TH CL BAND(G) FIRST KPI=2+ BAND +228TH CL BAND(H) KPI=2- OCTUPOLE-VIBRATIONAL BAND +228TH CL BAND(I) SECOND KPI=2+ BAND +228TH CL BAND(J) KPI=3- OCTUPOLE-VIBRATIONAL BAND HEAD +228TH cG E,RI Weighted average of measurements in {+228}Ac and {+228}Pa +228TH2cG decays, unless otherwise noted. +228TH cG M,MR From {+228}Ac |b{+-} decay and/or {+228}Pa |e decay +228TH cG E(I),RI(K)$From {+228}Pa |e decay +228TH cG RI(J) From {+232}U |a decay +228TH cG E(L),RI(M)$From {+228}Ac |b{+-} decay +228TH cG E(G),RI(H)$From (|a,2n|g) data set +228TH cG E(B) Energy fit poor. Not included in E(level) calculation. +228TH cG E(N) Doublet, energy not included in E(level) calculation +228TH cG E(P) A |g of this energy was seen in {+228}Pa decay and placed +228TH2cG here in level scheme; however, the |g's deexciting the final level of +228TH3cG this |g were not seen in {+228}Pa decay +228TH cG E(Q) |g's of approximately same energy and intensity seen in both +228TH2cG {+228}Ac and {+228}Pa decays. On the basis of coin with 911|g, it is +228TH3cG suggested in {+228}Ac decay, that the |g feeds the 2+ 968.968 level. In +228TH4cG {+228}Pa decay, the |g is placed feeding the 3- 968.368 level. The +228TH5cG energy fit is much better feeding the 3- level. Possibly the |g seen +228TH6cG is a doublet feeding both the 968 and 969 levels. I|g(doublet)=24 {I6}, +228TH7cG E(doublet)=674.65 {I5}. +228TH cG RI(R) There is a disagreement in the ratio I|g(583|g/I|g(651|g) +228TH2cG between {+228}Ac decay (1.23 {I15}) and {+228}Pa decay (2.26 {I24}). +228TH L 0.0 0+ 1.9116 Y 16 A +228TH2 L %A=100$%{+20}O=1.13E-11 22$ +228THX L XREF=ABCDEF +228TH cL %{+20}O=1.13|*10{+-11} {I22} (1993Bo20) +228TH cL T value (698.2 d {I6}) recommended by 1991BaZS; based on +228TH2cL measurements from 1971Jo14, 1962Ma57, 1956Ki16 (tropical year +228TH3cL (365.24220 days) used in conversion). Other: 1.912 y {I2} (recommended +228TH4cL value, 1990Ho28), 1.906 y (1918Me01). +228TH cL Isotope shift: |D=-0.413 {I5} relative to {+232}Th +228THxcL (1989Ka29) +228TH L 57.759 4 2+ 0.405 NS 7 A +228THX L XREF=ABCDEF +228TH cL J E2 |g to 0+ g.s. +228TH cL T from {+232}U |a decay +228TH G 57.766 5 100 E2 156 L +228TH cG M also from {+232}U |a decay +228THB G BE2W=167 6 +228TH L 186.823 4 4+ 0.164 NS 4 A +228THX L XREF=ABCDEF +228TH cL J E2 |g to 2+ level; member of g.s. rotational band +228TH cL T from {+232}U |a decay +228TH G 129.065 1 100 E2 3.81 L +228TH cG M also from (|a,|a'2n|g) +228THB G BE2W=242 9 +228TH L 328.003 4 1- B +228THX L XREF=ABC +228TH cL J E1 |g to 0+ +228TH G 270.245 2 100.0 16 E1 0.0474 J +228TH3 G FLAG=L +228TH G 328.000 6 89.3 21 E1 0.0308 J +228TH3 G FLAG=L +228TH L 378.179 10 6+ A +228THX L XREF=ABCDF +228TH cL J E2 |g to 2+ level: member of g.s. rotational band +228TH G 191.353 10 100 E2 0.791 L +228TH cG M also from (|a,|a'2n|g) +228TH L 396.078 5 3- B +228THX L XREF=ABC +228TH cL J E1 |g's to 4+ and 2+ levels +228TH G 209.253 6 34.5 6 E1 0.086 L +228TH G 338.320 3 100.0 17 E1 0.0288 L +228TH L 519.192 6 5- B +228THX L XREF=ABCDF +228TH cL J E1 |g's to 4+ and 6+ levels +228TH G 141.01 2 10.1 6 E1 0.220 +228TH G 332.370 4 100 5 E1 0.0299 L +228TH L 622.5 3 8+ A +228THX L XREF=DF +228TH cL J E2 |g to 6+ level; member of g.s. rotational band +228TH G 244.4 3 E2 0.332 G +228TH cG M from (|a,|a'2n|g) +228TH L 695.6 3 7- B +228THX L XREF=DF +228TH cL J |g to 6+ level; member of K|p=0- octupole band +228TH G 317.4 3 [E1] 0.0331 G +228TH L 831.823 10 0+ C +228THX L XREF=ABCDE +228TH cL J L=0 in (p,t) +228TH G 503.823 13 100 7 (E1) 0.0125 L +228TH3 G FLAG=M +228TH G 774.1 2 33 AP L +228TH3 G FLAG=M +228TH G 831 E0 0.04 2 +228TH cG E,M,TI from {+232}U |a decay +228TH L 874.473 18 2+ C +228THX L XREF=ABCE +228TH cL J E1 |g to 3- level, |g to 0+ g.s. +228TH G 478.40 6 100 5 E1 0.0139 +228TH G 546.45 2 91 5 +228TH G 688.11 4 32 3 & +228TH3 G FL=186.823$ FLAG=N +228TH G 816.62 10 12.3 20 +228TH G 874.45 7 23 3 +228TH L 911.8 4 10+ A +228THX L XREF=DF +228TH cL J |g to 8+ level; member of g.s. band +228TH G 289.4 3 G +228TH L 920.8 3 9- B +228THX L XREF=DF +228TH cL J |g to 7- and 8+ levels; member of K|p=0- band +228TH G 225.1 3 24.6 15 G +228TH3 G FLAG=H +228TH G 298.3 3 100 G +228TH3 G FLAG=H +228TH L 938.58 7 0+ D +228THX L XREF=AE +228TH cL J from L(p,t) quoted in 1995Ba42 +228TH G 610.64 10 100 22 L +228TH3 G FLAG=M +228TH G 880.76 10 27 8 L +228TH3 G FLAG=M +228TH L 944.196 13 1,2+ +228THX L XREF=ABE +228TH cL J |g's to 1- level and 0+ g.s. Possibly unnatural parity level +228TH2cL from (p,t); possible band head for a K|p=1+ band. However, log| +228TH3cL {Ift}=9.8 from 3+ {+228}Pa would rule out J|p=1+ +228TH G 616.20 3 91 11 +228TH G 944.196 14 100 8 L +228TH L 968.369 17 3- F +228THX L XREF=AB +228TH cL J |g's to 1- and 5- levels +228TH G 449.21 4 39 5 +228TH G 572.29 4 100 5 +228TH G 640.34 3 28 4 +228TH L 968.968 5 2+ G +228THX L XREF=AB +228TH cL J E2 |g to 0+ g.s. +228TH G 782.142 5 1.89 6 L +228TH G 911.204 4 100.0 16 E2+M1 +24 8 0.0121 L +228TH G 968.971 17 61.1 11 E2 0.0107 L +228TH L 979.499 14 2+ D +228THX L XREF=ABE +228TH cL J |g's to 0+ g.s. and 4+ level +228TH G 583.41 5 123 11 R +228TH2 G FLAG=M +228TH G 651.48 5 100 9 R +228TH2 G FLAG=M +228TH G 792.8 89 AP L +228TH3 G FLAG=M +228TH G 921.98 10 18.6 LE L +228TH3 G FLAG=BM +228TH cG Doubly placed |g with undivided intensity (I|g=16.3 {I23}) +228TH2cG in {+228}Ac decay +228TH G 979.48 10 29 3 L +228TH3 G FLAG=M +228TH L 1016.406 21 2+,3-,4+ +228THX L XREF=AB +228TH cL J |g's to 3- and 2+ levels, |g from 3+ level; natural parity +228TH2cL from (p,t) (quoted in 1995Ba42). Multiply placed +228TH3cL |g to 0+ would limit J|p to 2+; possible 2+ member of K|p=1+ band. +228TH4cL However, |g from 1450-keV 4- level would rule out 2+. +228TH G 620.33 6 28.4 14 +228TH G 688.11 4 24.0 15 & +228TH3 G FL=328.003$ FLAG=N +228TH G 958.61 4 100 12 +228TH G 1016.44 15 6.8 11 & +228TH3 G FLAG=LM +228TH L 1022.527 6 (3)+ G +228THX L XREF=AB +228TH cL J E2 |g's to 4+ and 2+ levels; E1 |g from 4- level; +228TH2cL member of K|p=2+ band +228TH G 835.710 6 32.4 11 E2 0.0143 L +228TH cG M |d|<-9 ({+228}Pa decay) +228TH G 964.766 10 100.0 18 E2+M1 -7.2 10 0.0108 L +228TH L 1059.93 3 4- +228THX L XREF=AB +228TH cL J |g's to 3- and 5- levels; J|p=3-,4+,5- ruled out by +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 540.68 5 58 10 +228TH G 663.88 6 87 7 (M1+E2) 0.06 4 +228TH G 873.11 12 100 10 +228TH L 1091.017 8 4+ G +228THX L XREF=AB +228TH cL J E2 |g to 4+ level, |g to 2+ level; |g to 6+ level +228TH G 694.8 2 2.9 4 I +228TH3 G FLAG=K +228TH G 713.1 3 1.8 4 I +228TH3 G FLAG=K +228TH G 904.19 3 100 4 E2 0.0123 +228TH cG MR |>+3.7 ({+228}Pa decay) +228TH G 1033.248 9 26.5 9 E2 L +228TH L 1122.951 6 2- H +228THX L XREF=AB +228TH cL J E1 |g to 2+ level, E2+M1 |g to 1- level, (E1+M2) |g to (3)+ +228TH2cL level; member of K|p=2- band +228TH G 100.41 3 2.2 3 (E1+M2) 0.23 AP 3.2 AP L +228TH3 G FLAG=M +228TH G 153.977 10 16.7 5 E1 0.178 L +228TH3 G FL=968.968 +228TH G 726.863 15 13.7 13 (E2) 0.0189 L +228TH G 794.947 5 100.0 16 E2+M1 -4.4 10 0.0182 15 L +228TH G 1065.19 4 3.02 12 +228TH L 1153.467 10 2+ 0.29 NS 2 I +228THX L XREF=AB +228TH cL J |g to 2+ has E0 component +228TH cL T from {+228}Ac |b{+-} decay +228TH G 173.964 13 15.5 22 M1+E2 1.2 +11-6 2.3 18 L +228THB G BM1W=4.E-5 +6-4$BE2W=0.6 +7-6 +228TH G 184.54 2 31 4 E0+M1 63 8 M +228TH3 G FL=968.968$ FLAG=L +228THB G BM1W=1.2E-4 3 +228TH cG |a(K)exp, L1/L2, L1/L3 indicate E0+5.4%M1 transition +228TH2cG ({+228}Ac |b{+-} decay) +228TH G 278.70 10 71 9 (M1+E2) 0.7 5 @ +228TH3 G FL=874.473 +228TH G 321.646 8 100 5 [E2] 0.140 L +228THB G BE2W=0.29 5 +228TH G 1095.679 20 55 4 [M1,E2] 0.018 10 L +228TH G 1153.52 4 61 4 [E2] +228THB G BE2W=0.00030 6 +228TH L 1160 5 +228THX L XREF=E +228TH L 1168.375 5 3- H +228THX L XREF=AB +228TH cL J E1 |g's to 2+ levels, |g to 5- level +228TH G 77.34 3 1.7 3 L +228TH3 G FLAG=M +228TH G 145.849 10 10.4 4 E1 0.203 L +228TH G 199.407 10 20.8 8 E1 0.096 L +228TH G 649.03 13 2.7 3 & +228TH G 772.291 5 100.0 20 E2+M1 -3.4 +8-27 0.021 3 L +228TH G 840.377 7 61.9 21 E2 0.0142 L +228TH G 981.5 2 3.0 4 I +228TH3 G FLAG=K +228TH G 1110.610 10 18.7 20 E1 @ +228TH2 G FLAG=L +228TH L 1174.508 18 (5+) G +228THX L XREF=AB +228TH cL J |g to 4+ level; member of K|p=2+ band +228TH G 987.88 9 +228TH L 1175.39 5 2+ +228THX L XREF=A +228TH cL J |g to 0+ g.s., |g to 4+ level +228TH G 231.42 10 32 5 L +228TH3 G FLAG=M +228TH G 988.63 20 100 17 L +228TH3 G FLAG=M +228TH G 1117.63 10 70 10 L +228TH3 G FLAG=M +228TH G 1175.31 10 31 4 L +228TH3 G FLAG=M +228TH L 1189.8 4 11- B +228THX L XREF=DF +228TH cL J |g's to 9- and 10+ levels; band structure +228TH G 268.9 3 67 5 G +228TH3 G FLAG=H +228TH G 278.0 3 100 G +228TH3 G FLAG=H +228TH L 1200.54 4 (3)+ I +228THX L XREF=B +228TH cL J E0 transition to (3)+ level +228TH G 178.14 7 22 LE (E0) I +228TH3 G FLAG=K +228TH G 231.50 5 100 5 I +228TH3 G FL=968.968$ FLAG=K +228TH G 1013.54 13 41 5 & +228TH3 G FLAG=IK +228TH G 1142.78 11 3 I +228TH3 G FLAG=K +228TH L 1226.565 7 (4)- H +228THX L XREF=AB +228TH cL J E1 |g's to 4+ and (3)+ levels; member of K|p=2- band +228TH G 135.51 2 3.66 20 E1 0.242 +228TH G 204.026 10 20.7 10 E1 0.091 L +228TH G 707.41 3 27.5 6 (E2) 0.0200 +228TH G 830.486 8 100 4 E2(+M1) -7.7 9 0.0152 2 L +228TH G 1039.84 8 9.9 6 +228TH L 1239.4 4 12+ A +228THX L XREF=DF +228TH cL J |g to 10+ level; member of g.s. band +228TH G 327.5 3 G +228TH L 1297.423 10 (5)- H +228THX L XREF=AB +228TH cL J E1 |g to 4+ level; band structure +228TH G 601.7 3 11.1 19 & ? +228TH3 G FLAG=IK +228TH G 778.1 2 100 11 I +228TH3 G FLAG=K +228TH cG |g not reported in {+228}Ac decay +228TH G 901.26 13 74 11 K +228TH G 1110.610 10 89 7 E1 @ +228TH3 G FLAG=L +228TH L 1344.078 11 3- J +228THX L XREF=A +228TH cL J |g's to 1- and 5- levels; band structure. Although the |g to +228TH2cL 1- level is multiply placed, this position in level scheme is +228TH3cL supported by coin results +228TH G 168.65 10 9 3 L +228TH3 G FLAG=M +228TH G 824.934 23 47 5 L +228TH3 G FLAG=M +228TH G 947.982 11 100 8 L +228TH3 G FLAG=M +228TH G 1016.44 15 18 3 & +228TH3 G FLAG=LM +228TH G 1157.14 15 6.6 12 L +228TH3 G FLAG=M +228TH G 1286.27 20 47 9 L +228TH3 G FLAG=M +228TH L 1416.11 6 2+,3- +228THX L XREF=A +228TH cL J |g's to 1- and 4+ levels +228TH G 471.76 15 100 10 L +228TH3 G FLAG=M +228TH G 1019.86 10 64 12 L +228TH3 G FLAG=M +228TH G 1088.18 15 18 4 L +228TH3 G FLAG=M +228TH G 1229.40 15 23 7 L +228TH3 G FLAG=M +228TH L 1431.979 6 4+ +228THX L XREF=AB +228TH cL J E1 |g to 3- level, E2+M1 |g to 4+ level; J|=3 from +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 257.49 2 0.64 3 (M1) 1.36 +228TH G 263.62 2 0.95 5 E1 0.0502 +228TH G 278.70 10 0.70 11 @ +228TH3 G FL=1153.467 +228TH G 340.98 2 8.8 4 E2+M1 -5.2 18 0.136 23 +228TH G 409.462 6 43.8 8 E2+M1 -5.4 8 0.082 4 +228TH G 452.51 5 0.45 4 +228TH G 463.004 6 100.0 16 E2 0.0522 L +228TH G 1245.16 6 2.47 12 +228TH G 1374.24 6 0.32 9 M +228TH L 1450.394 10 4- +228THX L XREF=AB +228TH cL J M1+E2 |g's to 3- level, |g to 4+ level; J|=3 from +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 18.4 11.9 16 [E1] 6.6 K +228TH cG E deduced from E(level) +228TH G 153.02 2 3.58 19 M1+E2 +0.60 8 4.8 2 I +228TH3 G FLAG=K +228TH G 223.80 2 43.4 20 M1+E2 -0.18 5 1.97 3 +228TH G 275.85 4 2.65 23 I +228TH3 G FLAG=K +228TH G 282.00 3 60 3 M1+E2 -0.51 12 0.88 7 K +228TH G 327.45 4 100.0 10 I +228TH3 G FLAG=K +228TH G 359.36 3 4.19 23 I +228TH3 G FLAG=K +228TH G 390.45 5 3.58 19 I +228TH3 G FLAG=K +228TH G 427.90 3 4.0 3 I +228TH3 G FLAG=K +228TH G 434.01 3 5.6 3 I +228TH3 G FLAG=K +228TH G 482.03 5 5.9 4 I +228TH3 G FL=968.369$ FLAG=K +228TH G 1054.22 6 10.9 10 +228TH L 1497.1 5 13- B +228THX L XREF=DF +228TH cL J |g's to 11- and 12+ levels; band structure +228TH G 257.7 3 52 4 G +228TH3 G FLAG=H +228TH G 307.3 3 100 G +228TH3 G FLAG=H +228TH L 1531.474 6 3+ +228THX L XREF=AB +228TH cL J E2+M1 |g to 2+ level, M1 |g to 4+ level +228TH G 99.509 6 100 6 M1 4.09 L +228TH G 356.94 10 1.35 14 L +228TH3 G FLAG=M +228TH G 377.99 10 1.98 24 L +228TH3 G FLAG=M +228TH G 440.44 5 9.6 6 M1 0.314 +228TH G 508.959 17 40 10 E2(+M1) 1.1 GT 0.08 4 L +228TH G 562.500 4 71 4 E2+M1 +1.6 6 0.07 3 L +228TH G 1135.24 15 0.78 12 L +228TH3 G FLAG=M +228TH G 1344.59 15 0.71 14 L +228TH3 G FLAG=M +228TH L 1539.21 9 2,3,4 +228THX L XREF=A +228TH cL J |g to 3- level, |g from 3+ level +228TH G 416.30 20 100 16 L +228TH2 G FLAG=M +228TH G 1142.85 15 78 16 L +228TH2 G FLAG=M +228TH L 1580.91 6 (2-) +228THX L XREF=B +228TH cL J (M1+E2) |g's to 3- and 1- levels +228TH G 354.2 2 43 7 & +228TH3 G FLAG=IK +228TH G 601.7 3 44 7 & +228TH3 G FLAG=IK +228TH G 1184.71 9 69 6 (M1+E2) 0.015 8 I +228TH3 G FLAG=K +228TH G 1252.98 10 100 9 (M1+E2) 0.013 7 I +228TH3 G FLAG=K +228TH G 1523.4 2 88 9 & +228TH3 G FLAG=IK +228TH L 1588.335 14 4- +228THX L XREF=B +228TH cL J E1 |g's to 3+ and 4+; J|=3- from |g(|q,H,T) +228TH2cL ({+228}Pa decay) +228TH G 56.86 3 16.1 8 E1 0.533 I +228TH3 G FLAG=K +228TH G 137.95 2 100 3 M1 7.89 I +228TH3 G FLAG=K +228TH G 156.34 2 20.6 11 E1 0.172 I +228TH3 G FLAG=K +228TH G 420.03 8 10.3 8 I +228TH3 G FLAG=K +228TH L 1599.5 5 14+ A +228THX L XREF=DF +228TH cL J |g to 12+; band structure +228TH G 360.1 3 G +228TH L 1617.78 7 2+,3,4+ +228THX L XREF=AB +228TH cL J |g's to 4+ and 2+ levels +228TH G 649.03 13 114 11 & +228TH2 G FL=968.968$ FLAG=M +228TH G 1430.95 10 100 20 L +228TH3 G FLAG=M +228TH G 1559.78 14 57 11 M +228TH L 1638.284 9 2+ +228THX L XREF=AB +228TH cL J |g's to 0+ g.s. and 4+ level +228TH G 470.20 19 2.3 6 +228TH G 515.06 10 8.2 8 L +228TH3 G FLAG=M +228TH G 1309.71 20 3.2 10 L +228TH3 G FLAG=M +228TH G 1451.40 15 1.8 4 L +228TH3 G FLAG=M +228TH G 1580.53 3 100 7 (M1,E2) +228TH G 1638.281 10 85 7 (E2) L +228TH L 1643.125 15 (2-,3-) +228THX L XREF=AB +228TH cL J (M1) |g's to 2- and 3- levels, +228TH G 474.79 11 4.6 7 +228TH G 520.151 16 11.8 10 (M1) 0.201 L +228TH G 627.23 20 2.8 6 L +228TH3 G FLAG=M +228TH G 674.16 30 LE Q +228TH3 G FL=968.968 +228TH cG E from level energies +228TH G 674.76 30 LE Q +228TH3 G FL=968.369 +228TH cG E from level energies +228TH G 699.08 15 7.4 10 L +228TH3 G FLAG=M +228TH G 1247.08 3 100 5 (M1) 0.0201 +228TH G 1315.31 9 2.7 4 +228TH L 1645.954 12 3+ +228THX L XREF=AB +228TH cL J E2 |g's to 2+ and 4+ levels, |g's to 2- and 4- levels +228TH G 114.54 6 0.28 4 +228TH G 419.42 10 0.65 9 L +228TH3 G FLAG=M +228TH G 492.30 8 0.74 5 +228TH G 523.131 16 3.5 3 B +228TH3 G FL=1122.951$ FLAG=L +228TH G 555.07 16 1.40 14 +228TH G 623.27 20 0.34 9 L +228TH3 G FLAG=M +228TH G 629.40 5 1.20 21 +228TH G 666.47 4 1.8 2 @ +228TH G 677.07 9 1.99 16 +228TH3 G FL=968.968 +228TH G 1249.97 14 1.94 14 +228TH G 1459.138 15 23.7 12 E2 L +228TH G 1588.19 3 100.0 25 E2 +228TH L 1682.81 3 2+,3(+),4+ +228THX L XREF=AB +228TH cL J (E2) |g to 4+ level, |g to 2+ level +228TH G 660.1 3 0.6 AP L +228TH3 G FLAG=M +228TH G 1495.93 7 100 5 (E2) +228TH G 1625.06 5 29.1 19 +228TH L 1683.82 5 (4-) +228THX L XREF=AB +228TH cL J (M1+E2) |g's to 3- and 5- levels +228TH G 457.35 7 19.2 19 +228TH G 623.7 2 26 LE I +228TH3 G FLAG=K +228TH cG |g not resolved from the 623.27|g from 1645 level in {+228}Pa +228TH2cG decay, I(doublet)=23 {I3}. Not reported in {+228}Ac decay. +228TH G 1164.55 7 83 4 (M1+E2) 0.016 9 +228TH G 1287.78 12 100 7 (M1+E2) 0.012 7 +228TH L 1688.394 11 2+,3+ +228THX L XREF=AB +228TH cL J |g's to 2+ and 4+ levels; J|p|=3-,4+ from +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 42.46 5 0.60 20 L +228TH3 G FLAG=M +228TH G 672.00 15 1.7 5 L +228TH3 G FLAG=M +228TH G 813.77 15 0.46 11 L +228TH3 G FLAG=M +228TH G 1501.57 5 29.4 15 +228TH G 1630.627 10 100 3 (M1,E2) L +228TH L 1724.283 6 2+ +228THX L XREF=AB +228TH cL J M1 |g to 2+ level, |g to 0+ g.s.; log| {Ift}=7.06 for |b{+-} +228TH2cL decay from 3+ {+228}Ac 7.32 for |e decay from 3+ {+228}Pa +228TH G 548.73 15 2.3 3 L +228TH2 G FLAG=M +228TH G 570.88 4 17.1 9 (M1) 0.156 +228TH G 701.747 14 18.2 10 (M1) 0.091 L +228TH G 755.315 4 100 3 M1 0.0747 L +228TH G 1537.87 9 4.2 5 B +228TH3 G FL=186.823 +228TH G 1666.523 13 17.3 8 M1 L +228TH G 1724.20 4 2.7 3 +228TH L 1735.450 25 (4+) +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels; possible |g to 6+ level would +228TH2cL limit J|p to 4+ +228TH G 1217.03 10 39 6 B ? +228TH3 G FL=519.192$ FLAG=LM +228TH G 1357.78 15 37 7 B ? +228TH3 G FL=378.179$ FLAG=LM +228TH G 1548.65 4 70 7 L +228TH3 G FLAG=M +228TH G 1677.67 3 100 9 L +228TH3 G FLAG=M +228TH L 1743.89 3 4+ +228THX L XREF=AB +228TH cL J (E2) |g to 2+ level; (E2+M1) |g to 4+ level; |g to 6+ level +228TH G 399.62 10 16.3 17 L +228TH3 G FLAG=MP +228TH G 590.65 11 9.3 11 I ? +228TH3 G FLAG=K +228TH cG |g not reported in {+228}Ac decay +228TH G 684.0 3 10.4 23 I ? +228TH3 G FLAG=K +228TH cG |g not reported in {+228}Ac decay +228TH G 1365.71 9 8.8 8 +228TH G 1557.10 4 100 5 (E2+M1) +1.2 2 +228TH G 1686.12 5 53.8 23 (E2) +228TH L 1758.24 12 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 326.04 20 100 15 L +228TH3 G FLAG=M +228TH G 1571.52 20 17 5 L +228TH3 G FLAG=M +228TH G 1700.59 20 31 7 L +228TH3 G FLAG=M +228TH L 1760.218 24 2+,3(+) +228THX L XREF=AB +228TH cL J (E2) |g to 4+ level, |g to 2+ level; J|p|=4+ from +228TH2cL |g(|q,H,T) in {+228}Pa decay +228TH G 584.7 3 12 4 & +228TH3 G FLAG=IK +228TH G 737.72 5 73 7 +228TH G 791.44 9 21 6 @ +228TH3 G FL=968.968 +228TH G 1573.26 5 65 4 (E2) +228TH G 1702.44 5 100 7 +228TH L 1795.90 10 3-,4+ +228THX L XREF=A +228TH cL J |g's to 5- and 2+ levels +228TH G 1276.69 10 78 17 L +228TH3 G FLAG=M +228TH G 1738.22 25 100 22 L +228TH3 G FLAG=M +228TH L 1797.65 8 2+ +228THX L XREF=A +228TH cL J |g's to 0+ g.s. and 3- level; log| {If{+1u}t}=8.14 for +228TH2cL |b{+-} decay from 3+ {+228}Ac +228TH G 1401.49 10 60 15 L +228TH3 G FLAG=M +228TH G 1469.71 15 100 20 L +228TH3 G FLAG=M +228TH G 1740.4 3 55 15 L +228TH3 G FLAG=M +228TH G 1797.5 5 11 4 L +228TH3 G FLAG=M +228TH L 1804.689 23 4+ +228THX L XREF=B +228TH cL J M1+E2 |g to 3+ level, (M1+E2) |g to 4+ level, |g to 6+ level +228TH G 116.26 5 12.8 16 I +228TH3 G FLAG=K +228TH G 121.18 7 15.2 24 I ? +228TH3 G FL=1683.82$ FLAG=KB +228TH G 121.87 3 26.4 24 I +228TH3 G FLAG=K +228TH G 158.74 3 100 6 M1+E2 0.55 15 I +228TH3 G FLAG=K +228TH G 354.2 2 23 4 & +228TH3 G FLAG=IK +228TH G 372.60 3 126 6 I ? +228TH3 G FL=1431.979$ FLAG=KB +228TH G 651.5 2 27 4 I +228TH3 G FLAG=K +228TH G 1426.5 2 38 5 I +228TH3 G FLAG=K +228TH G 1618.0 1 72 5 (M1,E2) I +228TH3 G FLAG=K +228TH L 1817.432 23 4- +228THX L XREF=B +228TH cL J E2+M1 |g to 3- level, D+Q |g to 5- level +228TH G 367.04 2 100 5 M1 0.512 I +228TH3 G FLAG=K +228TH G 1298.3 2 18.4 16 (M1+E2) I +228TH3 G FLAG=K +228TH cG MR +0.27|<|d|<+5 from |g(|q,H,T) in {+228}Pa decay +228TH G 1421.1 2 57 3 E2+M1 +2.0 5 I +228TH3 G FLAG=K +228TH L 1838.3 5 15- B +228THX L XREF=D +228TH cL J |g to 13- level; band structure +228TH G 341.2 3 G +228TH L 1892.996 17 3+ +228THX L XREF=AB +228TH cL J E2+M1 |g to 2+ level, M1+E2 |g to 4+ level +228TH G 477.1 3 4.4 13 I +228TH3 G FLAG=KP +228TH G 666.47 4 11 2 @ +228TH G 692.47 7 12.6 9 (M1+E2+E0) 0.24 3 I +228TH3 G FLAG=K +228TH cG CC from |a(K)exp in {+228}Pa decay +228TH G 724.42 11 4.8 6 & +228TH3 G FLAG=IK +228TH G 739.2 2 3.6 6 I +228TH3 G FLAG=K +228TH G 770.2 2 14.3 9 I +228TH3 G FLAG=K +228TH G 870.45 2 100 5 M1 +228TH cG MR -0.1 {I1} ({+228}Pa decay) +228TH G 924.3 2 17.0 13 I +228TH3 G FLAG=K +228TH G 1706.17 7 18.1 8 M1+E2 +0.42 4 +228TH G 1835.29 5 64 8 E2+M1 +2.9 3 +228TH L 1899.95 4 2+ +228THX L XREF=AB +228TH cL J M1+E2 |g tp 2+ level, |g's to 0+ g.s. and 3- level +228TH G 877.39 7 41 4 +228TH G 883.6 3 6.6 18 I +228TH3 G FLAG=K +228TH G 920.8 3 17 4 I +228TH3 G FLAG=K +228TH G 931.02 7 43 4 I +228TH3 G FLAG=K +228TH G 1503.7 2 31 3 I +228TH3 G FLAG=K +228TH G 1842.14 8 100 5 M1+E2 -0.86 14 +228TH G 1900.14 17 9 3 +228TH L 1901.93 8 3-,4 +228THX L XREF=B +228TH cL J |g's to 3- and 5- levels; multiply placed |g to 6+ would +228TH2cL rule out J|p=3- and 4-. log| {If{+1u}t}=7.10 for decay from 3+ {+228}Pa +228TH3cL rules out 5- +228TH G 1383.2 2 100 9 I +228TH3 G FLAG=K +228TH G 1505.9 2 100 9 I +228TH3 G FLAG=K +228TH G 1523.4 2 109 11 & +228TH3 G FLAG=IK +228TH G 1715.06 10 91 6 I +228TH3 G FLAG=K +228TH L 1906.64 10 (2+) +228THX L XREF=A +228TH cL J |g to 0+ g.s., |g to 2+,3- level; log| {If{+1u}t}=7.5 from +228THxcL 3+ {+228}Ac +228TH G 490.33 15 93 19 L +228TH3 G FLAG=M +228TH G 1074.71 15 84 25 L +228TH3 G FLAG=M +228TH G 1907.18 20 100 8 L +228TH3 G FLAG=M +228TH L 1925.22 4 3+,4+ +228THX L XREF=B +228TH cL J M1+E2 |g to 4+ level, |g's to (5+) and 3- levels +228TH G 724.42 11 7.9 9 & +228TH3 G FLAG=IK +228TH G 750.10 10 7.0 8 I +228TH3 G FLAG=K +228TH G 865.15 13 5.2 7 I +228TH3 G FLAG=K +228TH G 956.8 2 26 5 I +228TH3 G FL=968.369$ FLAG=K +228TH G 1529.02 6 27.2 14 I +228TH3 G FLAG=K +228TH G 1738.48 5 100 5 M1+E2 I +228TH3 G FLAG=K +228TH L 1928.57 6 3+ +228THX L XREF=AB +228TH cL J |g's to 2+ and 4+ levels; J|p|=2+,3-,4+ from +228TH2cL |g(|q,H,T) in {+228}Pa decay +228TH G 168.42 9 12 3 I +228TH3 G FLAG=K +228TH G 389.12 15 42 6 L +228TH3 G FLAG=M +228TH G 584.7 3 30 10 & +228TH3 G FLAG=IKP +228TH G 1741.74 21 43 12 +228TH G 1870.81 9 100 6 (M1+E2) +228TH L 1937.16 9 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 397.94 10 100 11 L +228TH3 G FLAG=M +228TH G 1062.55 15 37 11 L +228TH3 G FLAG=M +228TH G 1750.54 20 30 3 L +228TH3 G FLAG=M +228TH G 1879.6 3 4.8 18 L +228TH3 G FLAG=M +228TH L 1944.895 11 3+ +228THX L XREF=AB +228TH cL J E2+M1 |g's to 2+ and 4+ levels +228TH G 184.61 5 1.7 2 (M1) 3.45 I +228TH3 G FLAG=K +228TH G 220.61 2 5.2 3 (M1) 2.10 I +228TH3 G FLAG=K +228TH G 299.10 10 1.79 21 M1 0.90 I +228TH3 G FLAG=K +228TH G 306.61 2 8.3 4 M1 0.84 I +228TH3 G FLAG=K +228TH G 512.79 11 5.5 6 I +228TH3 G FLAG=K +228TH G 718.31 2 26.2 17 (E1) +228TH G 776.52 3 32 3 +228TH G 791.44 9 15 2 (M1) 0.0661 @ +228TH G 853.97 8 3.4 3 I +228TH3 G FLAG=K +228TH G 922.5 2 9.4 5 I +228TH3 G FLAG=K +228TH G 928.4 2 3.7 3 I +228TH3 G FLAG=K +228TH G 975.98 5 56 3 M1 0.0381 +228TH3 G FL=968.968 +228TH G 1070.40 7 5.0 3 I +228TH3 G FLAG=K +228TH G 1549.3 2 5.0 8 I +228TH3 G FLAG=K +228TH G 1758.11 5 37.7 20 E2+M1 -9 1 +228TH G 1887.12 5 100 5 E2+M1 -9.1 9 +228TH L 1958.72 22 2+ +228THX L XREF=A +228TH cL J |g's to 0+ g.s. and 4+ level +228TH G 1772.2 3 100 28 L +228TH3 G FLAG=M +228TH G 1958.4 3 83 28 L +228TH3 G FLAG=M +228TH L 1964.98 7 2+,3,4+ +228THX L XREF=B +228TH cL J |g to 2+ and 4+ levels; multiple placed |g to 0+ g.s., would +228TH2cL limit J|p to 2+ +228TH G 548.74 11 46 LT I +228TH3 G FLAG=K +228TH cG Multiply placed |g in {+228}Pa decay with I|g(doublet)=41 +228THxcG {I5} +228TH G 1778.0 6 6 2 I +228TH3 G FLAG=K +228TH G 1907.13 11 100 9 I +228TH3 G FLAG=K +228TH G 1965.22 12 43 4 & +228TH3 G FLAG=K +228TH L 1974.20 11 3-,4+ +228THX L XREF=B +228TH cL J |g's to 2+ and 5- levels +228TH G 1455.0 2 87 5 I +228TH3 G FLAG=K +228TH G 1578.2 2 100 10 I +228TH3 G FLAG=K +228TH G 1787.2 2 28 3 I +228TH3 G FLAG=K +228TH G 1916.6 3 11.3 23 I +228TH3 G FLAG=K +228TH L 1981.97 6 2+,3,4+ +228THX L XREF=B +228TH cL J |g's to 2+ and 4+ levels +228TH G 1013.54 13 32 4 & +228TH3 G FLAG=IK +228TH G 1795.15 6 100 6 I +228TH3 G FLAG=K +228TH G 1924.2 2 15.1 17 I +228TH3 G FLAG=K +228TH L 1987.46 10 4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 6+ levels +228TH G 1017.92 20 29 7 L +228TH3 G FL=968.968$ FLAG=M +228TH G 1609.41 15 39 8 L +228TH3 G FLAG=M +228TH G 1800.86 20 22 4 L +228TH3 G FLAG=M +228TH G 1929.78 20 100 11 L +228TH3 G FLAG=M +228TH L 1988.1 6 16+ A +228THX L XREF=D +228TH cL J |g to 14+ level; band structure +228TH G 388.6 3 G +228TH L 2010.11 5 2+,3,(4+) +228THX L XREF=AB +228TH cL J |g's to 2+, 2- and 4+ levels limit J|p to 2+, 3. However, +228TH2cL possible E0 component in the 918|g to (4)+ level ({+228}Ac |b{+-} +228TH3cL decay) would require J|p=(4+), making the 887|g to 2- level an M2 +228THxcL transition +228TH G 214.85 10 49 7 L ? +228TH3 G FL=1795.90$ FLAG=M +228TH cG |g not reported in {+228}Pa decay +228TH G 372.57 20 11 3 L ? +228TH3 G FL=1638.284$ FLAG=MB +228TH G 887.33 10 46 5 L +228TH3 G FLAG=M +228TH G 919.01 13 47 6 +228TH cG M possible E0 component ({+228}Ac |b{+-} decay) +228TH G 1040.92 15 75 15 L +228TH3 G FLAG=M +228TH G 1823.21 10 65 6 +228TH G 1952.37 10 100 7 +228TH L 2013.6 3 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 1826.7 3 100 38 L +228TH3 G FLAG=M +228TH G 1955.9 5 38 14 L +228TH3 G FLAG=M +228TH L 2016.76 10 (2-,3-,4-) +228THX L XREF=B +228TH cL J (M1+E2) |g to 3- level +228TH G 1620.67 10 100 (M1+E2) I +228TH3 G FLAG=K +228TH L 2022.84 8 +228THX L XREF=AB +228TH cL Level is proposed in both {+228}Ac and {+228}Pa decays. +228TH2cL However, there is agreement only on one |g (1148.16|g) from this level +228TH G 1053.09 20 220 68 L ? +228TH3 G FL=968.968$ FLAG=MB +228TH cG Possibly part of a doublet in {+228}Pa decay +228TH G 1148.16 14 100 20 +228TH G 1965.22 12 143 14 & +228TH3 G FLAG=M +228TH cG E,RI a multiply placed |g in {+228}Pa with I|g(doublet)=143 {I13}. +228TH2cG All intensity placed here in {+228}Ac decay with I|g=346 {I31} +228TH L 2029.84 16 1,2+ +228THX L XREF=A +228TH cL J |g to 0+ g.s. +228TH G 939.87 15 200 70 L ? +228TH3 G FL=1091.017$ FLAG=MB +228TH G 1013.58 20 100 28 L +228TH3 G FLAG=M +228TH G 1971.9 3 78 17 L +228TH3 G FLAG=M +228TH G 2029.4 5 39 11 L +228TH3 G FLAG=M +228TH L 2036.99 17 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 1850.13 20 100 18 L +228TH3 G FLAG=M +228TH G 1979.3 3 41 11 L +228TH3 G FLAG=M +228TH L 2123.1 3 (2+) +228THX L XREF=A +228TH cL E the level may be questionable, Q(|b{+-})({+228}Ac)=2127 {I3}. +228TH cL J |g's to 4+ and 1- levels; log| {Ift}=3.5 {I20} indicates an +228TH2cL allowed transition +228TH G 1795.1 5 100 38 L +228TH3 G FLAG=M +228TH G 1936.3 3 100 24 L +228TH3 G FLAG=M +228TH L 2209.7 6 17- B +228THX L XREF=D +228TH cL J |g to 15- level; band structure +228TH G 371.4 3 [E2] G +228TH L 2407.9 7 18+ A +228THX L XREF=D +228TH cL J |g tp 16+ level; band structure +228TH G 419.8 3 [E2] G +228THF G FL=1988.1 + +228TH 228AC B- DECAY 1987DA28 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228AC P 0 3+ 6.15 H 2 2127 3 +228TH N 1.000 1.000 1.0 1.0 +228TH PN 2 +228TH cN NR From absolute I|g, based on measurements by 1992Li05, +228TH2cN 1983Sc13 and 1982Sa36. This normalization leads to I|b(g.s.)=6% {I6}, +228TH4cN although consistent with zero as expected from the spin change |DJ=3, +228TH5cN it may indicate that some g.s. transitions are missing from the level +228THxcN scheme. +228TH cL 1992Li05: measured absolute I|g +228TH cL 1987Da28: measured E|g, I|g, |g|g. Earlier report: 1985Da05 +228TH cL 1983Sc13, 1982Sa36: measured absolute I|g +228TH cL 1982Ma52, 1960Ar06, 1957Bj56: measured ce +228TH cL 1979Bo30: measured E|g; not included in E|g calculation +228TH2cL because five out of twelve E|g disagree with measurements of 1987Da28 +228TH3cL and 1979He10 (deviation>3 x |s) +228TH cL 1979He10: measured E|g +228TH cL 1974De14: measured E|g, I|g, |b|g(|q), |b|g(circ pol)(|q) +228TH cL +228TH cL The decay scheme is that proposed by 1987Da28 +228TH cL E,J From adopted levels +228TH CL BAND(A) GS ROTATIONAL BAND +228TH CL BAND(B) KPI=0- OCTUPOLE BAND +228TH CL BAND(C) KPI=0+ TWO OCTUPOLE PHONON BAND +228TH CL BAND(D) KPI=1- OCTUPOLE BAND +228TH CL BAND(E) KPI=2+ GAMMA-VIBRATIONAL BAND +228TH CL BAND(F) KPI=2- OCTUPOLE BAND +228TH CL BAND(G) KPI=2+ ROTATIONAL BAND ON QUASIPARTICLE STATE +228TH cB J|p({+228}Ac)=3+ +228TH cB Q(|b{+-})=2127 {I3} (1995Au04) +228TH cB IB Deduced from intensity balance in the level scheme. +228TH cG E From 1987Da28, unless otherwise noted +228TH cG RI From 1987Da28, unless otherwise noted. The relative I|g of +228TH2cG 1987Da28 have been normalized to the absolute measurements of 1992Li05, +228TH3cG 1983Sc13 and 1982Sa36 at the three |g's with I|g>10 % (338.324|g +228TH4cG I|g=11.27% {I19}, 911.205|g I|g=25.8% {I4} and 968.987|g I|g=15.8% +228TH5cG {I3}, giving a normalization factor of 0.0258 {I5}). +228TH cG M From adopted I|g and the Ice data of 1960Ar06 and 1971He23 +228TH2cG (as noted with |a(exp)) normalized to theoretical values for: +228TH3cG |a(L)(E2) for 129.065|g, |a(K)(E1) for 209.253|g and |a(K)(E2) for +228THxcG 968.971|g +228TH cG E(A) Weighted average of measurements by 1987Da28, 1979He10. The +228TH2cG measurements of 1979He10 have been corrected by using the calibration +228TH3cG line E|g from 1995HeZZ. +228TH cG E(B) Energy fit poor, E|g not included in the least squares fit +228TH2cG to obtain E(level) +228TH cG E(M) |g unassigned by 1987Da28. Placement suggested by {+228}Pa +228TH2cG decay +228TH cG RI(D) Weighted average of absolute intensity measurements of +228TH2cG 1992Li05, 1983Sc13, 1982Sa36 +228TH cG RI(E) Weighted average of measurements by 1992Li05, 1987Da28, +228TH2cG 1983Sc13, 1982Sa36 +228TH cG RI(F) Weighted average of measurements by 1987Da28, 1983Sc13, +228THxcG 1982Sa36 +228TH cG RI(G) Weighted average of measurements by 1987Da28, 1983Sc13 +228TH cG RI(H) Weighted average of measurements by 1987Da28, 1982Sa36 +228TH cG RI(I) Weighted average of measurements by 1992Li05, 1987Da28, +228THxcG 1983Sc13 +228TH cG RI(N) Intensity of the doublet divided by evaluator by comparison +228TH2cG with branching ratios and the intensities of the doublet as measured +228TH3cG in both {+228}Ac and {+228}Pa decays. +228TH cG M(J),MR(K)$From {+228}Pa |e decay +228TH cG M(L) |a(K)exp(1245|g+1247|g)=0.013 {I3} (1971He23); theory: +228TH2cG |a(K)(M1)=0.0162, |a(K)(E2)=0.00521. I(1245|g)=0.095 {I18}, +228TH3cG I(1247|g)=0.50 {I3}; the 1245|g is [M1,E2]. Therefore: if the 1245|g +228TH4cG is M1, then |a(K)exp(1247|g)=0.013 {I3}; if 1245|g is E2, then +228THxcG |a(K)exp(1247|g)=0.015 {I3}. In each case the |g M1(+E2). +228TH cG E(P) The adopted J|p require that this |g have an unreasonable +228TH2cG multipolarity (M2 or E3). The placement of this transition is +228TH3cG therefore questionable. +228TH cG RI(Q) Total intensity (I|g=0.013 {I3}) placed from 1344.1 level by +228TH2cG 1987Da28. Alternate placement from 1928.6 level suggested by {+228}Pa +228TH3cG decay. +228TH cG E(R) |g's of approximately same energy and intensity are reported +228TH2cG in both {+228}Ac and {+228}Pa decays. On the basis of coin with +228TH3cG 911.2|g, it is suggested in {+228}Ac decay that the |g feeds the 2+ +228TH4cG 968.97 level. In {+228}Pa decay, the |g is placed feeding the 3- +228TH5cG 968.37 level. The energy of the |g (E|g=674.65 {I5}) agrees with decay +228TH6cG to the 968.37 level. Possibly the |g is a doublet feeding both the +228TH7cG 968.97 and 968.37 levels. I|g(doublet)=0.101 {I8} +228TH cG E(T),RI(T)$|g not reported in this decay. Placement suggested by +228TH2cG {+228}Pa decay. I|g deduced from branching ratio in {+228}Pa decay. +228TH cG RI(U) The energy of the 853-keV transition from the 1944.9 level is +228TH2cG expected to be 853.877 {I12} from E(level); the expected intensity +228TH3cG is I|g=0.0031 {I4} from branching ratio in {+228}Pa decay. Therefore, +228TH4cG the the 853.17 {I10} |g with I|g=0.0119 {I18} reported by 1987Da28 +228TH5cG seems to be a doublet with part of the intensity belonging to a |g +228TH6cG unplaced in level scheme +228TH G 56.96 5 0.019 4 +228TH G 137.91 5 0.024 5 M1 7.90 +228TH cG M |a(K)exp=5.5 {I17}, K/L=5.6 {I27} (1971He23) +228TH G 466.40 10 0.029 3 +228TH G 634.18 10 0.0106 21 +228TH G 853.17 10 0.0088 18 U +228TH G 1337.33 20 0.0049 15 +228TH G 1378.23 10 0.0059 18 +228TH G 1385.39 10 0.0106 21 +228TH G 1434.22 15 0.0080 23 +228TH G 1438.01 10 0.0059 15 +228TH G 1480.37 15 0.016 3 +228TH G 1529.05 10 0.057 6 +228TH G 1671.64 15 0.0041 13 +228TH G 1684.01 20 0.015 5 +228TH G 1721.4 3 0.0057 21 +228TH G 1745.28 20 0.0065 8 +228TH G 1784.4 3 0.0059 10 +228TH G 1787.3 5 0.0013 5 +228TH G 1915.9 4 0.0008 3 +228TH G 1919.5 3 0.0021 5 +228TH G 1944.20 20 0.0021 5 +228TH G 2000.9 5 0.0010 3 +228TH L 0.0 0+ A +228TH L 57.759 4 2+ A +228TH B 8 6 8.9 4 +228THS B EAV=744.1 13 +228TH G 57.766 5 0.47 3 E2 156 A +228TH3 G FLAG=H +228THS G LC=114$ MC=31.1$ NC+=11.4 +228TH cG M |a(L)exp=124 {I11} (1971He23); L12/L3=1.42 (1982Ma52), 1.14 +228TH2cG {I8} (1960Ar06), 1.15 {I15} (1957Bj56); theory: |a(K)=114, L12/L3=1.23 +228TH L 186.823 4 4+ A +228TH B 0.8 6 9.8 4 +228THS B EAV=691.5 13 +228TH G 129.065 1 2.42 9 E2 3.81 A +228TH3 G FLAG=E +228THS G KC=0.269$ LC=2.58$ MC=0.707$ NC+=0.263 +228TH cG M L12/L3=1.94 {I14} (1960Ar06), 1.7 {I2} (1957Bj56). K/L=0.10 +228TH2cG {I1} (1971He23), 0.12 {I3} (1957Bj56); theory: L12/L3=1.70, K/L=0.10 +228TH L 328.003 4 1- B +228TH B 0.65 17 10.69 12 1U +228THS B EAV=606.6 12 +228TH G 270.245 2 3.46 6 E1 0.0474 A +228TH3 G FLAG=E +228THS G KC=0.0379$ LC=0.00721$ MC=0.00173$ NC+=0.00061 +228TH cG M |a(K)exp=0.029 {I4} (1971He23); theory: |a(K)=0.0379 +228TH G 328.000 6 2.95 12 E1 0.0308 H +228THS G KC=0.0247$ LC=0.00458$ MC=0.00110$ NC+=0.00039 +228TH cG M |a(K)exp=0.037 {I8} (1971He23); theory |a(K)=0.0247 +228TH L 378.179 10 6+ A +228TH G 191.353 10 0.123 8 E2 0.791 H +228THS G KC=0.174$ LC=0.450$ MC=0.123$ NC+=0.0454 +228TH cG M |a(K)exp=0.24 {I7}, K/L=1.0 {I5}; theory: |a(K)(E2)=0.174, +228TH2cG K/L(E2)=0.39, |a(K)(M1)=2.49, K/L(M1)=5.25 +228TH L 396.078 5 3- B +228TH B 11.66 24 8.428 10 +228THS B EAV=606.9 12 +228TH G 209.253 6 3.89 7 E1 0.086 E +228THS G KC=0.0678$ LC=0.0135$ MC=0.00323$ NC+=0.00114 +228TH cG M from K/L and L subshell ratios in {+228}Pa |e decay. +228TH2cG Other: K/L=2.4 {I4} (1971He23) +228TH G 338.320 3 11.27 19 E1 0.0288 A +228TH3 G FLAG=D +228THS G KC=0.0231$ LC=0.00426$ MC=0.00102$ NC+=0.00036 +228TH cG M |a(K)exp=0.019 {I2} (1960Ar06); theory: |a(K)=0.0231 +228TH L 519.192 6 5- B +228TH B 0.08 LT 11.3 GT 1U +228THS B EAV=534.3 12 +228TH G 141.02 3 0.050 8 E1 0.220 J +228THS G KC=0.171$ LC=0.0366$ MC=0.0088$ NC+=0.00313 +228TH cG M |a(K)exp=0.7 {I5} (1971He23); theory: |a(K)(E1)=0.171, +228TH2cG |a(K)(E2)=0.259, |a(K)(M1)=5.92, |a(K)(M2)=26.1. +228TH G 332.370 4 0.40 4 E1 0.0299 A +228TH3 G FLAG=EJ +228THS G KC=0.0240$ LC=0.00444$ MC=0.00106$ NC+=0.00038 +228TH cG M ce(K) not seen by 1960Ar06. |a(K)exp=0.41 {I8} (1971He23) +228TH2cG does not agree with [E1] required by the level scheme. +228TH L 831.823 10 0+ C +228TH G 503.823 13 0.182 12 (E1) 0.0125 A +228TH3 G FLAG=G +228THS G KC=0.0101$ LC=0.00178 +228TH cG M Ice not seen (1971He23), upper limit in Ice suggests E1 +228TH G 774.1 2 0.06 AP [E2] 0.0167 +228THS G KC=0.0122$ LC=0.00339 +228TH L 874.473 18 2+ C +228TH B 0.23 10 9.62 19 +228THS B EAV=418.5 12 +228TH G 478.33 5 0.209 15 E1 0.0139 +228THS G KC=0.0112$ LC=0.00199$ MC=0.00047$ NC+=0.00017 +228TH G 546.47 5 0.201 13 [E1] 0.0106 +228THS G KC=0.0086$ LC=0.00151 +228TH G 688.10 5 0.067 5 [E2] 0.0212 & +228TH2 G FL=186.823$ FLAG=B +228THS G KC=0.0151$ LC=0.00464 +228TH G 816.71 10 0.030 3 [M1,E2] 0.038 23 +228THS G KC=0.030 19$ LC=0.006 3 +228TH G 874.44 7 0.047 10 [E2] 0.0131 A +228THS G KC=0.0098$ LC=0.00249 +228TH L 938.58 7 0+ D +228TH G 610.64 10 0.023 5 [E1] +228TH G 880.76 10 0.0062 18 [E2] 0.0129 +228THS G KC=0.0096$ LC=0.00244 +228TH L 944.196 13 1,2+ +228TH B 0.07 LT 10.0 GT +228THS B EAV=391.8 12 +228TH G 616.22 3 0.080 5 A +228TH G 944.196 14 0.095 8 A +228TH L 968.369 20 3- D +228TH B 0.21 4 9.54 9 +228THS B EAV=382.6 12 +228TH G 449.15 5 0.048 5 [E2] 0.0563 A +228THS G KC=0.0335$ LC=0.0168$ MC=0.00439$ NC+=0.00162 +228TH G 572.14 8 0.150 16 [M1,E2] 0.09 7 A +228THS G KC=0.07 6$ LC=0.016 8 +228TH G 640.34 3 0.054 5 [E2] 0.0247 A +228THS G KC=0.0172$ LC=0.00567 +228TH L 968.968 5 2+ E +228TH B 29.9 10 7.39 2 +228THS B EAV=382.3 12 +228TH G 782.142 5 0.485 19 [E2] 0.0163 A +228TH3 G FLAG=E +228THS G KC=0.0119$ LC=0.00330 +228TH cG M |a(K)exp=0.024 {I3} (1960Ar06), 0.07 {I3} (1971He23) +228TH2cG inconsistent with with each other and with E2 assignment required by +228THxcG level scheme +228TH G 911.204 4 25.8 4 E2 0.0121 A +228TH3 G FLAG=D +228THS G KC=0.0091$ LC=0.00225 +228TH cG M |a(K)exp=0.0104 {I10}, K/L=4.6 {I5} (1971He23), +228TH2cG |a(K)exp=0.0092 {I9} (1960Ar06); theory: |a(K)=0.0091, K/L=4.04. +228THxcG |d=+24 {I8} from {+228}Pa decay +228TH G 968.971 17 15.8 3 E2 0.0107 A +228TH3 G FLAG=D +228THS G KC=0.00815$ LC=0.00194 +228TH cG M |a(L)exp=0.0016 {I3} (1971He23); theory: |a(K)=0.00815, +228TH2cG |a(L)=0.0194; |a(K)exp used in normalization of the ce spectra. +228TH L 979.499 14 2+ +228TH B 0.13 7 9.73 24 +228THS B EAV=378.3 12 +228TH G 583.41 5 0.111 10 [E1] 0.0094 +228THS G KC=0.00761$ LC=0.00132 +228TH cG RI does not agree with the branching ratio in {+228}Pa decay +228TH G 651.51 3 0.090 8 [E1] 0.0076 A +228THS G KC=0.00617$ LC=0.00106 +228TH G 792.8 0.08 AP [E2] 0.0159 +228THS G KC=0.0116$ LC=0.00319 +228TH G 921.98 10 0.0147 21 [M1,E2] 0.028 17 & +228THS G KC=0.022 14$ LC=0.0044 22 +228TH cG M |a(K)exp=2.0 {I4} (1971He23) may indicate an E0 component +228TH cG Total intensity placed here by 1987Da28 +228TH G 979.48 10 0.026 3 [E2] 0.0105 +228THS G KC=0.00799$ LC=0.00189 +228TH L 1016.406 21 2+,3-,4+ +228TH B 0.31 5 9.31 7 +228THS B EAV=364.3 12 +228TH G 620.38 5 0.080 5 +228TH G 688.10 5 0.067 5 & +228TH2 G FL=328.003 +228TH cG |g not placed here by 1987Da28; this placement of the |g +228TH2cG suggested in {+228}Pa decay +228TH G 958.61 4 0.28 4 A +228TH3 G FLAG=H +228TH G 1016.44 15 0.019 3 & +228TH L 1022.527 6 (3)+ E +228TH B 3.10 15 8.30 2 +228THS B EAV=362.0 12 +228TH G 835.710 6 1.61 6 E2 0.0143 A +228TH3 G FLAG=EJ +228THS G KC=0.0106$ LC=0.00279 +228TH cG M |a(K)exp|<0.015 (1971He23); theory: |a(K)=0.0106 +228TH G 964.766 10 4.99 9 E2+M1 -7.2 10 0.0108 A +228TH3 G FLAG=E +228THS G KC=0.00821$ LC=0.00196 +228TH cG M |a(K)exp=0.0084 {I9} (1971He23); theory: |a(K)=0.00821 +228TH L 1059.93 3 4- +228TH B 0.071 11 9.88 7 +228THS B EAV=347.9 12 +228TH G 540.76 10 0.026 3 [M1,E2] 0.11 8 +228THS G KC=0.08 6$ LC=0.018 9 +228TH G 663.82 10 0.028 6 (M1+E2) 0.06 4 J +228THS G KC=0.05 4$ LC=0.010 6 +228TH G 873.17 15 0.031 6 [E1] 0.00441 +228THS G KC=0.00361$ LC=0.00060 +228TH L 1091.017 8 4+ E +228TH B 0.26 5 9.28 9 +228THS B EAV=336.3 12 +228TH G 904.20 4 0.77 3 E2 0.0123 A +228TH3 G FLAG=FJ +228THS G KC=0.0092$ LC=0.00229 +228TH cG M |a(K)exp=0.027 {I10} (1971He23), ce(K) not seen (1960Ar06); +228TH2cG |a(K)exp does not agree with |a(K)exp measured in {+228}Pa |e decay. +228TH G 1033.248 9 0.201 13 E2 0.0095 A +228TH3 G FLAG=J +228THS G KC=0.00727$ LC=0.00167 +228TH L 1122.951 6 2- F +228TH B 5.92 14 7.871 12 +228THS B EAV=324.4 12 +228TH G 100.41 3 0.093 13 (E1+M2) 0.23 AP 3.2 AP +228THS G LC=2.4$ MC=0.64$ NC+=0.25 +228TH cG M,MR |a(L3)exp|?0.43 (1971He23); theory: |a(L3)(E1)=0.0213, +228TH2cG |a(L3)(M2)=8.66. |a(L3)exp could also fit M1+E2; however, level scheme +228TH3cG requires |D|p=yes +228TH G 153.977 10 0.722 21 E1 0.178 E +228TH3 G FL=968.968 +228THS G KC=0.139$ LC=0.0292$ MC=0.00703$ NC+=0.00250 +228TH cG M |a(K)exp=0.095 {I16} (1971He23); theory: |a(K)=0.129 +228TH G 726.863 15 0.62 8 (E2) 0.0189 +228THS G KC=0.0136$ LC=0.00400 +228TH cG M |a(K)exp|?0.012 (1971He23); theory: |a(K)=0.0136 +228TH G 794.947 5 4.25 7 E2+M1 -4.4 10 0.0182 15 A +228TH3 G FLAG=DK +228THS G KC=0.0136 13$ LC=0.00349 20 +228TH cG M |a(K)exp=0.0118 {I20}, K/L=1.6 {I7} (1971He23), +228TH2cG |a(K)exp=0.0139 {I19} (1960Ar06); theory: |a(K)(E2)=0.0116, +228THxcG |a(K)(M1)=0.0524 +228TH G 1065.18 4 0.132 10 A +228TH L 1153.467 10 2+ 0.29 NS 2 +228TH cL T from 1974De14 +228TH B 5.1 8 7.89 7 +228THS B EAV=313.1 11 +228TH G 173.964 13 0.035 5 M1+E2 1.2 +11-6 2.3 18 A +228THS G KC=1.5 10$ LC=0.66 4$ MC=0.171 22$ NC+=0.063 5 +228TH cG M,MR from |a(K)exp=1.5 {I8} (1971He23); also fits E1+M2 with +228TH2cG |d=0.35 {I12}, level scheme requires |D|p=no. Theory: |a(K)(E1)=0.104, +228TH3cG |a(K)(E2)=0.203, |a(K)(M1)=3.26, |a(K)(M2)=12.9 +228TH G 184.54 2 0.070 8 E0+M1 63 8 4.5 8 +228TH3 G FL=968.968 +228THS G KC=53 7$ LC=10.2 13$ MC=0.126$ NC+=0.0462 +228TH cG M K/L=4.0 {I5}, L1/L2=33 {I6}, L1/L3>>50 (1974De14), +228TH2cG |a(K)exp=53 {I7} (1971He23); measured |a(K)exp yields an E0 transition +228TH3cG with an admixture of: 5.4% M1 with K/L=5.2, L1/L2=30, L1/L3=3300, or +228TH4cG 1.4% E2 with K/L=5.0, L1/L2=16.5, L1/L3=58. Thus the ratios support +228TH5cG E0+M1 transition +228TH cG CC from |a(K)exp +228TH G 278.95 5 0.160 21 (M1,E2) 0.7 5 @ +228TH3 G FL=874.473$ FLAG=N +228THS G KC=0.48 39$ LC=0.130 35$ MC=0.033 7$ NC+=0.0119 24 +228TH cG M |a(K)exp(doublet)=0.18 {I4} (1960Ar06), +228TH2cG |a(L)exp(279|g+282|g)=0.37 {I7} (1971He23); theory: |a(K)(M1)=0.872, +228THxcG |a(K)(E2)=0.0854 +228TH G 321.646 8 0.226 11 [E2] 0.140 A +228TH3 G FLAG=D +228THS G KC=0.0643$ LC=0.0550$ MC=0.0147$ NC+=0.00544 +228TH cG M |a(K)exp=0.49 {I8} (1971He23) indicating mainly M1 transition +228TH2cG (|a(K)(M1)=0.590) which is not in agreement with the level scheme. +228TH3cG 1960Ar06 did not see ce(K) suggesting that the |a(K)exp may be +228THxcG unreliable. +228TH G 1095.679 20 0.129 10 [M1,E2] 0.018 10 A +228TH G 1153.52 4 0.139 10 A +228TH L 1168.375 5 3- F +228TH B 3.08 7 8.084 11 +228THS B EAV=307.6 11 +228TH G 77.34 3 0.026 5 [E1] 0.235 +228THS G LC=0.177$ MC=0.0431$ NC+=0.0150 +228TH G 145.849 10 0.158 8 E1 0.203 H +228TH3 G FLAG=J +228THS G KC=0.158$ LC=0.0336$ MC=0.00809$ NC+=0.00287 +228TH cG M |a(K)exp=1.3 {I4} (1971He23); theory: |a(K)=0.158. ce not +228TH2cG seen by 1960Ar06 or in {+228}Pa decay. +228TH G 199.407 10 0.315 5 E1 0.096 H +228TH3 G FLAG=J +228THS G KC=0.0758$ LC=0.0152$ MC=0.00365$ NC+=0.00129 +228TH cG M ce(K), ce(L) not seen (1971He23,1960Ar06), suggests E1 mult +228TH G 648.84 10 0.040 4 [E2] 0.0240 & +228TH2 G FL=519.192 +228THS G KC=0.0168$ LC=0.00546 +228TH G 772.291 5 1.49 3 E2+M1 -3.4 +8-27 0.021 3 A +228TH3 G FLAG=EK +228THS G KC=0.0157 24$ LC=0.0040 4 +228TH cG M |a(K)exp=0.016 {I7} (1971He23), 0.019 {I3} (1960Ar06); +228TH2cG theory: |a(K)=0.0157 {I24} +228TH G 840.377 7 0.91 4 E2 0.0142 A +228TH3 G FLAG=EJ +228THS G KC=0.0105$ LC=0.00275 +228TH cG M |a(K)exp|<0.026 (1971He23); theory: |a(K)=0.0105 +228TH G 1110.610 10 0.285 23 E1 @ +228TH3 G FLAG=AJN +228TH L 1174.508 18 (5+) E +228TH B 0.005 LT 10.9 GT +228THS B EAV=305.4 11 +228TH G 987.71 20 0.077 13 [M1,E2] 0.024 14 +228THS G KC=0.019 11$ LC=0.0037 18 +228TH L 1175.39 5 2+ +228TH B 0.17 3 9.33 8 +228THS B EAV=305.0 11 +228TH G 231.42 10 0.025 4 [D,E2] 1.0 9 +228TH G 988.63 20 0.077 13 [E2] 0.0103 +228TH G 1117.63 10 0.054 8 +228TH G 1175.31 10 0.024 3 +228TH L 1226.565 7 (4)- F +228TH B 0.66 4 8.66 3 +228THS B EAV=286.3 11 +228TH G 135.54 5 0.018 4 E1 0.242 J +228THS G KC=0.188$ LC=0.0406$ MC=0.0098$ NC+=0.00348 +228TH cG M |a(K)exp|?3 (1971He23); theory: |a(K)=0.188 +228TH G 204.026 10 0.112 15 E1 0.091 H +228THS G KC=0.0719$ LC=0.0143$ MC=0.00344$ NC+=0.00122 +228TH cG M |a(L)exp<0.23 (1971He23); theory: |a(L)(E1)=0.0143, +228THxcG |a(L)(E2)=0.342 +228TH G 707.41 5 0.155 15 (E2) 0.0200 H +228TH3 G FLAG=J +228THS G KC=0.0143$ LC=0.00711 +228TH G 830.486 8 0.540 21 E2(+M1) -7.7 9 0.0152 2 A +228TH3 G FLAG=FJK +228THS G KC=0.0113 2 $ LC=0.00293 3 +228TH cG M |a(K)exp=0.020 {I11} (1971He23); theory: |a(K)=0.0113 {I2} +228TH G 1039.65 15 0.044 9 +228TH L 1297.423 10 (5)- F +228TH B 0.058 13 9.95 10 1U +228THS B EAV=257.9 10 +228TH G 778.23 0.022 6 [M1,E2] 0.04 3 S +228TH3 G FLAG=T +228THS G KC=0.034 22$ LC=0.007 4 +228TH G 901.23 15 0.016 3 [E2] 0.0123 +228THS G KC=0.00926$ LC=0.00231 +228TH G 1110.610 10 0.019 10 E1 @ +228TH3 G FLAG=JN +228TH L 1344.078 11 3- +228TH B 0.208 16 8.95 4 +228THS B EAV=243.9 11 +228TH G 168.65 10 0.010 3 [E1] 0.143 @ +228TH2 G FLAG=Q +228THS G KC=0.112$ LC=0.0232$ MC=0.00557$ NC+=0.00197 +228TH G 824.934 23 0.050 5 [E2] 0.0147 A +228THS G KC=0.0108$ LC=0.00288 +228TH G 947.982 11 0.106 8 [M1,E2] 0.026 15 A +228THS G KC=0.021 12$ LC=0.0041 20 +228TH G 1016.44 15 0.019 3 & +228TH G 1157.14 15 0.0070 13 +228TH G 1286.27 20 0.050 10 +228TH L 1416.11 6 2+,3- +228TH B 0.060 8 9.35 6 +228THS B EAV=218.4 11 +228TH G 471.76 15 0.033 3 [D,E2] 0.14 12 +228TH G 1019.86 10 0.021 4 +228TH G 1088.18 15 0.0059 13 +228TH G 1229.40 15 0.0075 23 +228TH L 1431.979 6 4+ +228TH B 0.8 4 8.19 22 +228THS B EAV=212.9 11 +228TH G 257.52 10 0.030 3 (M1) 1.36 J +228THS G KC=1.09$ LC=0.205$ MC=0.0495$ NC+=0.0180 +228TH G 263.58 10 0.040 4 E1 0.0502 J +228THS G KC=0.0400$ LC=0.00766$ MC=0.00184$ NC+=0.00065 +228TH G 278.95 5 0.031 5 [E2] 0.216 @ +228TH3 G FL=1153.467$ FLAG=N +228THS G KC=0.086$ LC=0.096$ MC=0.0257$ NC+=0.0095 +228TH cG |g not placed here by 1987Da28; this alternate placement is +228TH2cG suggested in {+228}Pa decay +228TH G 340.96 5 0.369 21 E2+M1 -5.2 18 0.136 23 E +228TH3 G FLAG=JK +228THS G KC=0.073 20$ LC=0.046 2$ MC=0.0122 5$ NC+=0.00450 17 +228TH cG M |a(K)exp=0.66 {I7} (1971He23) suggests an M1 transition. +228TH2cG However, ce(K) not seen by 1960Ar06. +228TH G 409.462 6 1.92 4 E2+M1 -5.4 8 0.082 4 A +228TH3 G FLAG=EK +228THS G KC=0.049 4$ LC=0.0242 5$ MC=0.00631 10$ NC+=0.00233 4 +228TH cG M |a(K)exp=0.058 {I9}, K/L=2.0 {I4} (1971He23), |a(K)exp=0049 +228TH2cG {I4} (1960Ar06). Theory: |a(K)=0.49 {I4}, K/L=2.02 +228TH G 452.47 10 0.015 5 [E2] 0.0553 +228THS G KC=0.0330$ LC=0.0164$ MC=0.00429$ NC+=0.00158 +228TH G 463.004 6 4.40 7 E2 0.0522 A +228TH3 G FLAG=E +228THS G KC=0.0316$ LC=0.0152$ MC=0.00397$ NC+=0.00146 +228TH cG M |a(K)exp=0.036 {I4}, K/L=3.0 {I7} (1971He23); |a(K)exp=0.028 +228TH2cG {I3} (1960Ar06); theory: |a(K)=0.0316, K/L=2.1 +228TH G 1103.41 10 0.0150 23 [E3] B ? +228TH2 G FL=328.003$ FLAG=P +228TH G 1245.05 20 0.095 18 [M1,E2] 0.013 7 L +228TH G 1374.19 10 0.014 4 +228TH L 1450.394 10 4- +228TH B 0.59 7 8.28 6 +228THS B EAV=206.5 11 +228TH G 18.4 0.014 4 [E1] 6.6 0.11 3 S +228TH cG TI,RI deduced from branching ratio in Pa decay +228TH G 223.85 10 0.054 5 M1+E2 -0.18 5 1.97 3 J +228TH3 G FLAG=K +228THS G KC=1.56 3$ LC=0.302 1$ MC=0.0729 2$ NC+=0.0266 1 +228TH cG M |a(K)exp=1.7 {I5}, K/L=4.2 {I19} (1971He23); theory: +228THxcG |a(K)=1.56 {I3}, K/L=5.2 +228TH G 282.00 3 0.072 19 M1+E2 -0.51 12 0.88 7 A +228TH3 G FLAG=HJK +228THS G KC=0.69 6$ LC=0.145 6$ MC=0.0355 11$ NC+=0.0129 4 +228TH G 327.44 0.12 4 [E2] 0.132 S +228TH3 G FLAG=T +228THS G KC=0.0621$ LC=0.0515$ MC=0.0137$ NC+=0.00508 +228TH cG |g may be masked by strong 328.000|g. +228TH cG E E|g from E(level) +228TH G 480.94 20 0.023 5 [M2] P +228TH3 G FL=968.968 +228TH cG Not reported in {+228}Pa decay +228TH G 930.93 10 0.0124 18 & +228TH cG Placement of |g in level scheme uncertain. Alternate +228TH2cG placement suggested in {+228}Pa decay +228TH G 1054.11 20 0.018 5 +228TH L 1531.474 6 3+ +228TH B 8.0 4 6.96 2 +228THS B EAV=178.7 11 +228TH G 99.509 6 1.26 7 M1 4.09 A +228TH2 G FLAG=H +228THS G LC=3.07$ MC=0.741$ NC+=0.273 +228TH cG M |a(L12)exp=3.0 {I3} (1971He23), 2.0 {I3} (1960Ar06); L3 not +228TH2cG seen (1960Ar06) theory: |a(L)=3.07 +228TH G 356.94 10 0.0170 18 [E2] 0.103 +228THS G KC=0.0523$ LC=0.0374$ MC=0.0099$ NC+=0.00368 +228TH cG M |a(K)exp=1.9 {I9} (1971He23) does not agree with +228TH2cG multipolarity deduced from level scheme. Theory: |a(K)=0.0523 +228TH G 377.99 10 0.025 3 [M1,E2] 0.28 19 +228THS G KC=0.21 17$ LC=0.051 20$ MC=0.013 5$ NC+=0.0046 16 +228TH G 440.44 5 0.121 8 M1 0.314 +228THS G KC=0.252$ LC=0.0471$ MC=0.0113$ NC+=0.00410 +228TH cG M |a(K)exp=0.26 {I9} (1971He23); theory: |a(K)=0.252. Limit of +228TH2cG E2 admixture |d<0.8 +228TH G 508.959 17 0.45 5 E2(+M1) 1.1 GT 0.08 4 A +228THS G KC=0.06 3$ LC=0.016 5 +228TH cG M,MR |a(K)exp=0.06 {I3} (1971He23); theory: |a(K)(E2)=0.0264, +228THxcG |a(K)(M1)=0.171 +228TH G 562.500 4 0.87 3 E2+M1 +1.6 6 0.07 3 A +228TH3 G FLAG=EK +228THS G KC=0.051 23$ LC=0.013 4 +228TH cG M |a(K)exp=0.048 {I10} (1971He23); E1+M2 mixture requires +228THxcG |d=0.39 +228TH G 1135.24 15 0.0098 15 +228TH G 1344.59 15 0.0090 18 +228TH L 1539.21 9 2,3,4 +228TH G 416.30 20 0.0132 21 [E1] 0.0185 +228THS G KC=0.0149$ LC=0.00268$ MC=0.000640$ NC+=0.000228 +228TH G 1142.85 15 0.0103 21 +228TH L 1617.78 7 2+,3,4+ +228TH B 0.075 13 8.77 8 +228THS B EAV=149.8 10 +228TH G 648.84 10 0.040 4 & +228TH3 G FL=968.968 +228TH cG |g not placed here by 1987Da28. This multiply placement +228TH2cG suggested in {+228}Pa decay +228TH G 1430.95 10 0.035 7 +228TH G 1559.85 20 0.020 4 +228TH L 1638.284 9 2+ G +228TH cL Quasiparticle configuration=((|p 3/2+[651])(|p 1/2+[660])) or +228TH2cL configuration=((|p 3/2+[651])(|p 1/2+[400])) suggested for this level +228TH B 1.15 5 7.52 2 +228THS B EAV=143.0 10 +228TH G 470.25 20 0.013 3 [E1] 0.0144 +228THS G KC=0.0116$ LC=0.00206$ MC=0.00049$ NC+=0.00018 +228TH G 515.06 10 0.049 5 [E1] 0.0120 +228THS G KC=0.0097$ LC=0.00170 +228TH G 1309.71 20 0.019 6 +228TH G 1451.40 15 0.0106 21 +228TH G 1580.53 3 0.60 4 (M1,E2) A +228TH3 G FLAG=I +228TH cG M |a(K)exp=0.012 {I7} (1971He23); theory: |a(K)(M1)=0.0087, +228THxcG |a(K)(E2)=0.00343 +228TH G 1638.281 10 0.47 3 (E2) A +228TH3 G FLAG=IJ +228TH L 1643.125 15 (2-,3-) +228TH B 0.80 6 7.67 4 +228THS B EAV=141.4 10 +228TH G 474.75 10 0.022 3 [M1,E2] 0.15 11 +228THS G KC=0.12 9$ LC=0.026 13$ MC=0.006 3$ NC+=0.0023 10 +228TH G 520.151 16 0.067 5 (M1) 0.201 A +228THS G KC=0.161$ LC=0.0301 +228TH cG M |a(K)exp=0.31 {I12} (1971He23); theory: |a(K)=0.161 +228TH G 627.23 20 0.014 3 +228TH G 674.16 0.109 LE [E1] R +228TH3 G FL=968.968 +228TH cG E deduced from E(level) +228TH G 674.75 0.109 LE [M1,E2] 0.06 4 R +228TH3 G FL=968.369 +228THS G KC=0.048 32$ LC=0.010 5 +228TH cG E deduced from E(level) +228TH G 699.08 15 0.037 5 [D,E2] 0.05 4 +228TH G 1247.08 4 0.50 3 (M1) 0.0201 A +228TH3 G FLAG=IL +228TH G 1315.34 10 0.015 3 [M1,E2] 0.012 6 +228TH L 1645.954 12 3+ +228TH B 4.16 20 6.94 2 +228THS B EAV=140.5 10 +228TH G 114.56 7 0.0098 21 [M1,E2] 10 4 +228THS G KC=5.5 52$ LC=3.2 12$ MC=0.9 4$ NC+=0.32 14 +228TH G 419.42 10 0.021 3 [E1] 0.0182 +228THS G KC=0.0147$ LC=0.00264$ MC=0.00063$ NC+=0.000225 +228TH G 492.37 10 0.0235 23 [M1,E2] 0.14 10 +228THS G KC=0.11 8$ LC=0.024 12$ MC=0.006 3$ NC+=0.0021 10 +228TH G 523.131 16 0.103 8 [E1] 0.0116 A +228TH3 G FL=1122.951$ FLAG=B +228THS G KC=0.00942$ LC=0.000165 +228TH cG M |a(K)exp|<0.08 (1971He23); theory: |a(K)(E1)=0.0094, +228TH2cG |a(K)(E2)=0.0251, |a(K)(E3)=0.0610, |a(K)(M1)=0.158 +228TH G 555.12 10 0.046 5 [M1,E2] 0.10 7 +228THS G KC=0.08 6$ LC=0.017 9 +228TH G 623.27 20 0.011 3 [M1,E2] 0.08 5 +228THS G KC=0.06 4$ LC=0.012 6 +228TH G 629.40 5 0.045 5 [D,E2] 0.06 6 +228TH G 666.45 10 0.057 6 [M1,E2] 0.06 4 @ +228TH3 G FLAG=N +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG I|g(doublet)=0.052 {I5}. All of intensity placed here by +228THxcG 1987Da28, +228TH G 677.11 10 0.062 5 [M1,E2] 0.06 4 +228TH3 G FL=968.968 +228THS G KC=0.05 3$ LC=0.010 5 +228TH G 1250.04 10 0.062 5 A +228TH G 1459.138 15 0.83 8 E2 A +228TH3 G FLAG=IJ +228TH G 1588.20 3 3.22 8 E2 A +228TH3 G FLAG=IJ +228TH cG M |a(K)exp=0.0050 {I16} (1971He23); theory: |a(K)=0.00340 +228TH L 1682.81 3 2+,3(+),4+ +228TH B 1.12 5 7.40 2 +228THS B EAV=128.5 10 +228TH G 660.1 3 0.005 AP [M1,E2] 0.06 4 +228THS G KC=0.05 3$ LC=0.010 5 +228TH G 1495.910 20 0.86 4 (E2) A +228TH3 G FLAG=IJ +228TH G 1625.06 5 0.255 18 A +228TH L 1683.82 5 (4-) +228TH B 0.165 17 8.23 5 +228THS B EAV=128.2 10 +228TH G 457.17 15 0.0150 23 [M1,E2] 0.17 12 +228THS G KC=0.13 10$ LC=0.029 14$ MC=0.007 3$ NC+=0.0026 11 +228TH G 1164.50 8 0.065 5 (M1+E2) 0.016 9 J +228TH G 1287.68 20 0.080 15 (M1+E2) 0.012 7 J +228TH cG |g listed in table I of 1987Da28 as deexciting the 1682.8 +228TH2cG level; however, on level scheme (fig. 4) shown as deexciting the +228TH3cG 1683.8 level. The energy fit is much better from the 1683.8 level. +228TH L 1688.394 11 2+,3+ G +228TH B 2.45 16 7.04 3 +228THS B EAV=126.7 10 +228TH G 42.46 5 0.009 3 [M1] 49 +228TH cG From intensity balance at 1646 level, multipolarity cannot +228TH2cG be pure E2. Some E2 admixture, however, cannot be ruled out +228TH G 672.00 15 0.026 8 +228TH cG |g listed in table I of 1987Da28 as deexciting the 1683.8 +228TH2cG level; however, on level scheme (fig. 4) shown as deexciting the +228TH3cG 1688.4 level. +228TH G 813.77 15 0.0070 16 [M1,E2] 0.038 23 +228THS G KC=0.030 19$ LC=0.006 3 +228TH G 1501.57 5 0.46 3 G +228TH G 1630.627 10 1.51 4 (M1,E2) A +228TH2 G FLAG=I +228TH cG M from |a(K)exp(1625|g+1630|g)=0.0062 {I20} (1971He23); theory: +228TH2cG |a(K)(M1)=0.0090, |a(K)(E2)=0.0034 +228TH L 1724.283 6 2+ +228TH B 1.76 5 7.06 2 +228THS B EAV=115.3 10 +228TH G 497.49 15 0.0059 18 [M2] 0.608 P +228THS G KC=0.457$ LC=0.113$ MC=0.0282$ NC+=0.0104 +228TH G 548.73 15 0.023 3 [M1,E2] 0.10 7 +228THS G KC=0.08 6$ LC=0.017 9 +228TH G 570.91 10 0.182 24 (M1) 0.156 G +228THS G KC=0.125$ LC=0.0234 +228TH cG M |a(K)exp=0.20 {I8} (1971He23); theory: |a(K)=0.125 +228TH cG 1987Da28 assigns this |g to be the 1539.2 to 968.4 transition +228TH2cG on the basis of coin with 911.2|g. However, the E(level) difference is +228TH3cG 570.25 {I9}. In {+228}Pa decay this |g is assigned to the 1724.3 level; +228TH4cG energy, intensity, multipolarity, and coin results agree with this +228TH5cG assignment. +228TH G 701.747 14 0.173 10 (M1) 0.091 A +228TH3 G FLAG=J +228THS G KC=0.0726$ LC=0.0135 +228TH G 755.315 4 1.00 3 M1 0.0747 A +228TH3 G FLAG=DJ +228THS G KC=0.0599$ LC=0.0111 +228TH cG M |a(K)exp=0.055 {I9} (1971He23), 0.057 {I8} (1960Ar06); +228TH2cG theory: |a(K)(M1)=0.0599, |a(K)(E2)=0.0127 +228TH G 1537.89 10 0.047 5 B +228TH2 G FL=186.823 +228TH G 1666.523 13 0.178 13 M1 A +228TH3 G FLAG=J +228TH G 1724.21 4 0.029 3 A +228TH L 1735.450 25 (4+) +228TH B 0.133 9 8.14 4 +228THS B EAV=111.7 10 +228TH G 1217.03 10 0.021 3 B +228TH2 G FL=519.192 +228TH G 1357.78 15 0.020 4 B +228TH2 G FL=378.179 +228TH G 1548.65 4 0.038 4 A +228TH G 1677.67 3 0.054 5 A +228TH L 1743.89 3 4+ +228TH B 0.389 18 7.65 2 +228THS B EAV=109.1 10 +228TH G 399.62 10 0.029 3 [E1] 0.0212 +228THS G KC=0.0162$ LC=0.00293$ MC=0.000701$ NC+=0.000250 +228TH G 590.4 0.017 3 [E2] 0.0295 S +228TH3 G FLAG=T +228THS G KC=0.0200$ LC=0.00716 +228TH G 684.0 0.019 5 [E1] S +228TH3 G FLAG=T +228TH G 1347.50 15 0.015 3 +228TH cG |g not seen in {+228}Pa decay. I|g<0.004 from upper limit in +228TH2cG {+228}Pa decay +228TH G 1365.70 15 0.014 3 M +228TH G 1415.66 10 0.021 4 [E3] P +228TH3 G FL=328.003 +228TH G 1557.11 4 0.178 13 (E2+M1) +1.2 2 A +228TH3 G FLAG=JK +228TH G 1686.09 7 0.095 8 (E2) A +228TH3 G FLAG=J +228TH L 1758.24 12 2+,3,4+ +228TH B 0.062 13 8.39 10 +228THS B EAV=104.6 10 +228TH G 326.04 20 0.033 5 [D,E2] 0.4 3 +228TH G 1571.52 20 0.0057 16 +228TH G 1700.59 20 0.0101 23 +228TH L 1760.218 24 2+,3(+) G +228TH B 0.119 10 8.10 4 +228THS B EAV=104.0 10 +228TH G 737.72 5 0.037 4 [M1,E2] 0.05 3 +228TH cG M |a(K)exp=0.28 {I14} (1971He23); theory: |a(K)(M1)=0.0637, +228TH2cG |a(K)(E2)=0.0133, |a(K)(M2)=0.147. Unconfirmed |a(K)exp seems to +228THxcG indicate E0 admixture +228TH G 791.49 25 0.010 3 [M1,E2] 0.04 3 @ +228TH3 G FL=968.968$ FLAG=N +228THS G KC=0.032 21$ LC=0.007 4 +228TH cG |g placed here with I|g=0.023 {I7} by 1987Da28 +228TH G 1573.26 5 0.033 3 (E2) A +228TH3 G FLAG=J +228TH G 1702.43 5 0.048 5 A +228TH L 1795.90 10 3-,4+ +228TH B 0.01 LT 9.0 GT +228THS B EAV=92.9 10 +228TH G 1276.69 10 0.014 3 +228TH G 1738.22 25 0.018 4 +228TH L 1797.65 8 2+ +228TH B 0.045 6 8.37 6 +228THS B EAV=92.4 10 +228TH G 1401.49 10 0.012 3 +228TH G 1469.71 15 0.020 4 +228TH G 1740.4 3 0.011 3 +228TH G 1797.5 5 0.0021 8 +228TH L 1892.996 17 3+ +228TH B 0.112 7 7.51 4 +228THS B EAV=63.7 9 +228TH G 666.45 10 0.005 2 [E1] @ +228TH3 G FLAG=N +228TH cG This placement of the |g suggested by {+228}Pa decay. +228TH G 692.5 0.0056 7 (M1+E2+E0) 0.24 3 S +228TH3 G FLAG=T +228TH G 770.04 0.0063 8 [E1] S +228TH3 G FLAG=T +228TH G 870.46 4 0.044 4 M1 0.0515 A +228TH3 G FLAG=J +228THS G KC=0.0414$ LC=0.00762 +228TH G 924.03 0.0075 10 [M1,E2] S +228TH3 G FLAG=T +228TH G 1706.19 10 0.0085 10 M1+E2 +0.42 4 J +228TH3 G FLAG=K +228TH G 1835.43 10 0.038 4 E2+M1 +2.9 3 J +228TH3 G FLAG=K +228TH L 1899.95 4 2+ G +228TH cL Quasiparticle configuration=((|p 3/2[651])(|p 1/2[660])) or +228TH2cL configuration=((|p 3/2[651])(|p 1/2[400])) suggested for this level +228TH B 0.071 6 7.66 4 +228THS B EAV=61.7 9 +228TH G 877.46 10 0.014 3 [M1,E2] 0.032 19 +228THS G KC=0.025 15$ LC=0.005 3 +228TH G 930.93 10 0.0124 18 & +228TH cG This placement of |g suggested in {+228}Pa decay +228TH G 1713.47 20 0.0054 10 +228TH cG |g not seen in {+228}Pa decay. I|g<0.002 from upper limit in +228TH2cG {+228}Pa decay +228TH G 1842.13 10 0.042 4 M1+E2 -0.86 14 J +228TH3 G FLAG=K +228TH G 1900.07 20 0.0028 5 +228TH L 1906.64 10 (2+) +228TH B 0.034 5 7.94 7 +228THS B EAV=59.7 9 +228TH G 490.33 15 0.0111 23 [D,E2] 0.12 11 +228TH G 1074.71 15 0.010 3 +228TH G 1907.18 20 0.0119 10 +228TH L 1928.57 6 3+ +228TH B 0.057 7 7.57 6 +228THS B EAV=53.4 9 +228TH G 168.65 10 0.0030 7 [M1,E2] 2.9 16 @ +228TH2 G FLAG=Q +228THS G KC=1.9 17$ LC=0.73 6$ MC=0.19 3$ NC+=0.070 10 +228TH G 389.12 15 0.0103 15 [M1,E2] 0.26 18 +228TH G 1742.0 3 0.0080 23 +228TH G 1870.83 10 0.0243 23 (M1+E2) J +228TH L 1937.16 9 2+,3,4+ +228TH B 0.046 5 7.61 6 +228THS B EAV=50.9 9 +228TH G 397.94 10 0.027 3 +228TH G 1062.55 15 0.010 3 +228TH G 1750.54 20 0.0080 8 +228TH G 1879.6 3 0.0013 5 +228TH L 1944.895 11 3+ G +228TH B 0.244 14 6.83 4 +228THS B EAV=48.7 9 +228TH G 718.48 15 0.019 4 (E1) J +228TH G 776.56 10 0.019 6 +228TH G 791.49 25 0.013 3 (M1) 0.0661 @ +228TH3 G FLAG=N +228THS G KC=0.0530$ LC=0.0098 +228TH cG This placement suggested by {+228}Pa decay +228TH G 853.17 10 0.0031 4 [M1,E2] 0.034 20 B +228TH2 G FL=1091.017$ FLAG=U +228THS G KC=0.027 17$ LC=0.005 3 +228TH cG RI from branching ratio in {+228}Pa decay +228TH G 921.98 10 0.0147 21 & +228TH cG This placement suggested by {+228}Pa decay +228TH G 975.96 5 0.050 5 M1 0.0381 J +228TH3 G FL=968.968 +228THS G KC=0.0306$ LC=0.00563 +228TH G 1000.69 15 0.005 +228TH cG |g not seen in {+228}Pa decay. I|g<0.002 from upper limit in +228TH2cG {+228}Pa decay. +228TH G 1758.11 10 0.035 4 E2+M1 -9 1 J +228TH3 G FLAG=K +228TH G 1887.10 5 0.090 8 E2+M1 -9.1 1 J +228TH3 G FLAG=K +228TH L 1958.72 22 2+ +228TH B 0.0033 7 8.59 10 +228THS B EAV=44.8 9 +228TH G 1772.2 3 0.0018 5 +228TH G 1958.4 3 0.0015 5 +228TH L 1987.46 10 4+ +228TH B 0.038 3 7.27 5 +228THS B EAV=36.8 9 +228TH G 1017.92 20 0.0057 13 +228TH3 G FL=968.968 +228TH G 1609.41 15 0.0077 15 +228TH G 1800.86 20 0.0044 8 +228TH G 1929.78 20 0.0199 21 +228TH L 2010.11 5 2+,3,(4+) +228TH cL 1987Da28 suggests that this is the 4+ level of K|p=2+ +228TH2cL rotational band built on the 1900.00 level. However, the relatively +228TH3cL strong 887.33|g to the 1123-keV level would then have M2 mult. +228TH B 0.27 4 6.19 8 +228THS B EAV=30.5 9 +228TH G 214.85 10 0.029 4 [D,E2] 1.2 11 +228TH G 372.57 20 0.0067 15 [D,E2] 0.26 24 +228TH3 G FL=1638.284 +228TH G 887.33 10 0.027 3 +228TH G 918.97 10 0.027 3 +228TH cG M |a(K)exp=1.1 {I2} (1971He23) indicates E0 component; +228TH2cG however, then the relatively strong |g to 1123 {I2}- level must be M2 +228TH G 1040.92 15 0.044 9 +228TH G 1823.22 10 0.044 4 +228TH G 1952.33 15 0.059 5 +228TH L 2013.6 3 2+,3,4+ +228TH B 0.0029 9 8.11 14 +228THS B EAV=29.6 9 +228TH G 1826.7 3 0.0021 8 +228TH G 1955.9 5 0.0008 3 +228TH L 2022.84 10 +228TH B 0.054 6 6.73 7 +228THS B EAV=27.1 9 +228TH G 384.63 20 0.0067 15 [D,E2] 0.24 22 +228TH cG Not reported in {+228}Pa decay +228TH G 1053.09 20 0.013 4 B +228TH3 G FL=968.968 +228TH G 1148.12 15 0.0059 13 +228TH G 1190.81 20 0.0062 16 +228TH G 1965.24 20 0.0204 18 +228TH cG RI from {+228}Pa decay I|g|<0.0085 {I23} +228TH L 2029.84 16 1,2+ +228TH B 0.019 4 7.09 10 +228THS B EAV=25.2 8 +228TH G 939.87 15 0.009 3 B +228TH3 G FL=1091.017$ +228TH G 1013.58 20 0.0046 13 +228TH G 1971.9 3 0.0036 8 +228TH G 2029.4 5 0.0018 5 +228TH L 2036.99 17 2+,3,4+ +228TH B 0.0062 10 7.48 9 +228THS B EAV=23.3 8 +228TH G 1850.13 20 0.0044 8 +228TH G 1979.3 3 0.0018 5 +228TH L 2123.1 3 (2+) +228TH B 0.0042 10 3.5 20 +228THS B EAV=1.0 8 +228TH G 1795.1 5 0.0021 8 +228TH G 1936.3 3 0.0021 5 + +228TH 228PA EC DECAY 1995BA42 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228PA P 0.0 3+ 22 H 1 2148 5 +228TH N 0.095 5 0.095 5 0.9815 17 1.01885 +228TH PN 2 +228TH cN NR From |SI(|g+ce)(g.s.)=100. No direct |e+|b{++} decay to g.s. +228TH2cN (|DJ=3 transition) +228TH cL 1995Ba42: measured |g, ce, |g|g, |g(|q,H,T) +228TH cL 1993Ac02: measured |g, ce +228TH cL 1973Ku09: measured |g, ce, |g|g, |g(ce) +228TH cL 1971Am05, 1970SpZW, 1960Ar06: measured ce +228TH cL The decay scheme for {+228}Pa and the band assignments in +228TH2cL {+228}Th are those proposed by 1995Ba42. For a discussion of the +228TH3cL structure of the bands, and of the band parameters, see 1995Ba42 +228TH cL E Rounded off values from adopted levels +228TH cL J From adopted levels +228TH CL BAND(A) GS ROTATIONAL BAND +228TH CL BAND(B) KPI=0- BAND +228TH CL BAND(C) FIRST KPI=0+ BAND +228TH CL BAND(D) SECOND KPI=0+ BAND +228TH CL BAND(F) KPI=1- BANDHEAD +228TH CL BAND(G) FIRST KPI=2+ BAND +228TH CL BAND(H) KPI=2- BAND +228TH CL BAND(I) SECOND K=2+ BAND +228TH CL BAND(J) KPI=3- BANDHEAD +228TH cE J|p({+228}Pa)=3+ +228TH cE Q(|e)=2148 {I5} (1995Au04) +228TH cE IE,TI Deduced from intensity balance in level scheme +228TH cG E,RI From 1995Ba42, unless otherwise noted +228TH cG M Based on |g(|q,H,T) of 1995Ba42 and on |a's and Ice +228TH2cG ratios. |a's deduced from I(ce(K)) of 1973Ku09, 1971Am05 and/or +228TH3cG 1960Ar06 as noted and I|g of 1995Ba42. The I(ce(K)) are normalized to +228TH4cG I|g at 911.204|g (|a(K)(E2)=0.0091). +228TH cG MR From |g(|q,H,T) in 1995Ba42, unless otherwise noted +228TH cG CC Values correspond to E|g given in adopted gammas +228TH cG E(G) |g is seen as a part of a multiplet in 1995Ba42 +228TH cG E(J),RI(J)$From 1973Ku09; |g not seen by 1995Ba42 +228TH cG E(N) Energy calculated from E(level), existence of |g suggested +228TH2cG by {+228}Ac decay +228TH cG E(P) This line seems to be a doublet of lines with E|g|?1431 +228TH2cG and 1433 keV, which are both in coin with the 4+ to 2+ transition +228TH cG E(R) |g's of approximately same energy and intensity are reported +228TH2cG in both {+228}Ac and {+228}Pa decays. On the basis of coin with 911.2|g +228TH3cG it is suggested in {+228}Ac decay that this |g feeds the 2+ 968.97 +228TH4cG level. In {+228}Pa decay, the |g is placed feeding the 3- 968.37 +228TH5cG level. The energy of the |g (E|g=674.65 {I5}) agrees with decay to the +228TH6cG 968.37 level. Possibly the |g is a doublet feeding both the 968.97 and +228TH7cG 968.37 levels with I|g(doublet)=2.64 {I18} +228TH cG RI(I) Derived from coin spectrum +228TH cG RI(M) Intensity of doublet divided by evaluator by comparison +228TH2cG with branching ratios and the intensities of the doublet as +228TH3cG measured in both {+228}Ac and {+228}Pa decays +228TH cG RI(Q) The total intensity of this doublet does not agree with +228TH2cG the total intensity of this |g as seen in {+228}Ac decay, considering +228TH3cG the observed branching ratios from the 1646.0 level in both decays and +228TH4cG from the 1682.8 level in {+228}Pa decay. +228TH cG M(K) From |a data of 1995Ba42 (data not given) +228TH cG M(A),MR(E)$From adopted gammas +228TH G 141.9 1 0.21 3 +228TH G 206.30 5 0.50 7 +228TH G 216.1 1 1.1 3 +228TH cG |g dominant in {+224}Ra +228TH cG M possibly E1, no ce seen (1960Ar06) +228TH G 357.3 1 0.37 4 +228TH G 425.4 1 0.41 5 +228TH G 443.8 1 0.62 7 +228TH G 471.7 2 0.37 9 +228TH G 490.7 1 0.82 4 G +228TH G 555.7 1 1.5 2 +228TH G 621.6 3 1.0 2 G +228TH G 796 1 2.0 AP J +228TH cG |g seen coin only (1973Ku09) +228TH G 801.2 1 0.46 5 +228TH cG M |a(K)exp=0.14 {I4} (1973Ku09); theory: |a(K)(E2)=0.0141, +228THxcG |a(K)(M1)=0.0512 +228TH G 895.9 1 1.41 7 +228TH G 1017.2 2 0.82 12 G +228TH G 1018.9 2 1.3 2 +228TH G 1024.4 2 0.43 6 +228TH G 1058.5 1 0.66 7 +228TH G 1062.4 1 0.57 6 +228TH G 1074.7 3 0.42 5 G +228TH G 1077.5 3 0.36 5 G +228TH G 1103.4 1 0.44 4 +228TH G 1175.6 2 0.24 4 G +228TH G 1281.7 2 0.29 3 +228TH G 1286.3 3 0.39 9 G +228TH cG E this |g is placed from the 1682.8 level by 1995Ba42. +228TH2cG A 1286.27 {I20} |g seen in {+228}Ac decay is placed from the 1344.08 +228TH3cG level. However, the ratio I|g/I|g(1496.15|g)=0.14 {I3} here does not +228TH4cG agree with I|g/I|g(1495.91|g)=0.058 {I15} in {+228}Ac decay. The +228TH5cG calculated energy of the transition from the 1682.8 level is 1286.73 +228TH6cG {I3}. From 1344.08 level the ratio I|g/I|g(947.98|g)=0.47 {I10} in +228TH7cG {+228}Ac decay; in this decay, I(948|g)|?0.2 giving the estimated +228THxcG I|g|?0.1 for that placement. +228TH G 1310.8 1 0.48 5 +228TH G 1358.0 2 0.34 5 +228TH G 1432 1 1.3 LE @ +228TH2 G FLAG=P +228TH G 1480.4 3 0.77 10 G +228TH cG M |a(K)exp=0.009 {I3} (1973Ku09); theory: |a(K)(E2)=0.00385, +228THxcG |a(K)(M1)=0.0104 +228TH G 1483.2 3 0.52 7 G +228TH G 1486.3 3 0.27 7 G +228TH G 1542.8 2 0.28 5 +228TH G 1547.2 3 0.54 11 G +228TH G 1609.6 1 0.92 7 (M1) +228TH cG M |a(K)exp=0.014 {I3} (1973Ku09); theory: |a(K)(M1)=0.0092 +228TH G 1677.9 1 0.65 5 +228TH G 1746.2 2 0.34 4 +228TH G 1752.1 2 0.37 4 G +228TH G 1784.4 2 0.62 5 G +228TH G 1807.2 1 0.60 5 +228TH cG M |a(K)exp=0.006 {I3} (1973Ku09); theory: |a(K)(M1)=0.0068, +228THxcG |a(K)(E2)=0.0028 +228TH G 1865.1 1 0.80 4 +228TH G 1919.4 2 0.26 3 +228TH G 1936.0 2 0.20 3 +228TH G 1958.1 2 0.29 3 +228TH L 0.0 0+ A +228TH L 57.76 2+ A +228TH E 0.065 LE 9.9 LE 8.3 GE 10 LE +228THS E EAV=502.6 22 $CK=0.7750 $CL=0.1625 $CM+=0.05599 +228TH G 57.76 2 5.5 3 E2 156 +228THS G LC= 114$ MC= 31.1$ N+= 11.5 +228TH cG M L1/L3=0.036 {I11}, L2/L3=1.187 {I5}, M1/M2=0.0328 {I27}, +228TH2cG M2/M3=1.137 {I19} (1970SpZW); theory: L1/L3=0.0390, L2/L3=1.19, +228TH3cG M1/M2=0.0382, M2/M3=1.14 +228TH L 186.82 4+ A +228TH E 0.009 5 2.1 12 8.94 25 2.1 12 +228THS E EAV=446.7 22 $CK=0.7758 $CL=0.1636 $CM+=0.05644 +228TH G 129.06 2 45.7 23 E2 3.81 +228THS G KC= 0.269 $LC= 2.58$ MC= 0.707$ N+= 0.263 +228TH cG M L12/L3=1.62 {I12} (1960Ar06); theory: L12/L3=1.70 +228TH L 328.00 1- B +228TH E 0.7 LE 10.4 GE 0.7 LE 1U +228THS E CK=0.7572 $CL=0.1793 $CM+=0.06308 +228TH G 270.25 2 33.9 17 E1 0.0474 +228THS G KC= 0.0379 $LC=0.00721$ MC=0.00173 $N+=0.00061 $ +228TH cG M |a(K)exp=0.032 (1960Ar06); theory: |a(K)=0.0379 +228TH G 328.03 4 30 3 E1 0.0308 G +228THS G KC=0.0247$ LC=0.00458$ MC=0.00110 $N+=0.00039 $ +228TH cG M |a(K)exp=0.019 {I2} (1960Ar06); theory: |a(K)=0.0247 +228TH L 378.18 6+ A +228TH G 191.35 2 4.60 23 E2 0.791 A +228THS G KC=0.174$ LC=0.450$ MC=0.123$ NC+=0.0454 +228TH cG M |a(L3)exp=0.16 (1960Ar06); theory: |a(L3)=0.141 +228TH L 396.08 3- B +228TH E 0.001 1 0.8 5 9.3 3 0.8 5 +228THS E EAV=354.3 23 $CK=0.7757 $CL=0.1655 $CM+=0.05720 +228TH G 68.08 0.04 LE [E2] 70.2 N +228THS G LC=51.0$ MC=14.0$ NC+=5.16 +228TH cG RI limit of I|g deduced from the limit of Ice(L2) (1993Ac02) +228TH G 209.26 2 26.3 13 E1 0.086 +228THS G KC=0.0678$ LC=0.0135$ MC=0.00323$ NC+=0.00114 +228TH cG M K/L12=4.4 (1960Ar06); theory: K/L12(E1)=5.9, K/L12(E2)=0.69, +228TH2cG K/L12(M1)=5.3. |a(K)exp=0.075 (1960Ar06); theory: |a(K)(E1)=0.0678, +228THxcG |a(K)(M1)=1.94 +228TH G 338.32 2 82 4 E1 0.0288 +228THS G KC=0.0231$ LC=0.00426$ MC=0.00102$ NC+=0.00036 +228TH cG M |a(K)exp=0.019 (1960Ar06); theory: |a(K)=0.0231 +228TH L 519.19 5- B +228TH E 0.53 13 10.33 11 0.53 13 1U +228THS E CK=0.7523 $CL=0.1830 $CM+=0.06464 +228TH G 141.00 2 2.08 10 E1 0.220 K +228THS G KC=0.171$ LC=0.0366$ MC=0.0088$ NC+=0.00313 +228TH G 332.37 2 21.0 11 E1 0.0299 K +228THS G KC=0.0240$ LC=0.00444$ MC=0.00106$ NC+=0.00038 +228TH cG M ce(K) not seen (1960Ar06) +228TH L 695.6 7- ? +228TH cL Possibly fed by multiply placed 601.7|g from the 1297.4 (5)- +228TH2cL level. The 317.4|g from this level is not seen by 1995Ba42. +228TH L 831.82 0+ C +228TH E 0.03 LE 10.4 GE 0.03 LE +228THS E CK=0.7702 $CL=0.1705 $CM+=0.05928 +228TH G 503.7 2 0.78 8 (E1) 0.0125 A +228THS G KC=0.0101$ LC=0.00178 +228TH G 774.06 0.26 AP [E2] 0.0167 N +228THS G KC=0.0122$ LC=0.00339 +228TH cG E,RI |g is part of a multiplet in 1995Ba42; I|g from branching +228TH2cG ratio in adopted |g's +228TH L 874.47 2+ C +228TH E 0.52 6 9.15 6 0.52 6 +228THS E CK=0.7693 $CL=0.1712 $CM+=0.05955 +228TH G 478.45 4 3.17 17 E1 0.0139 K +228THS G KC=0.0112$ LC=0.00199$ MC=0.00047$ NC+=0.00017 +228TH G 546.45 2 2.80 14 [E1] 0.0107 +228THS G KC=0.00864$ LC=0.00151 +228TH G 688.14 8 1.21 14 [E2] 0.0212 & +228TH3 G FL=186.82 +228THS G KC=0.0151$ LC=0.00464 +228TH G 816.50 12 0.33 4 [M1,E2] 0.038 23 +228THS G KC=0.030 19$ LC=0.006 3 +228TH G 874.5 2 0.77 12 [E2] 0.0131 G +228THS G KC=0.0098$ LC=0.00249 +228TH L 944.20 1,2+ +228TH cL Possibly J|p=1+, K|p=1+ bandhead. (p,t) suggests possible +228TH2cL unnatural parity level; however, log| {Ift}=9.79 for decay from 3+ +228TH3cL {+228}Pa would rule out J|p=1+ +228TH E 0.108 19 9.78 8 0.108 19 +228THS E CK=0.7676 $CL=0.1724 $CM+=0.06005 +228TH G 616.15 5 1.07 8 +228TH G 944.31 6 0.98 8 +228TH L 968.37 3- F +228TH E 0.39 11 9.20 13 0.39 11 +228THS E CK=0.7670 $CL=0.1728 $CM+=0.06024 +228TH G 449.23 3 2.45 13 [E2] 0.0563 +228THS G KC=0.0335$ LC=0.0168$ MC=0.00439$ NC+=0.00162 +228TH G 572.30 2 5.8 3 [M1,E2] 0.09 7 +228THS G KC=0.07 6$ LC=0.016 8 +228TH G 640.33 5 1.53 10 [E2] 0.0247 +228THS G KC=0.0172$ LC=0.00567 +228TH cG M |a(K)exp=0.16 {I3} (1973Ku09), 0.18 (1960Ar06); theory: +228THxcG |a(K)(E2)=0.0172 +228TH L 968.97 2+ G +228TH E 9.2 19 7.83 10 9.2 19 +228THS E CK=0.7669 $CL=0.1728 $CM+=0.06024 +228TH G 782.08 3 4.70 23 [E2] 0.0163 +228THS G KC=0.0119$ LC=0.00330 +228TH cG M |a(K)exp=0.029 (1960Ar06); theory: |a(K)(E2)=0.0119 +228TH G 911.20 2 247 12 E2+M1 +24 8 0.0121 +228THS G KC=0.0091$ LC=0.00225 +228TH cG M |a(K)(E2)=0.0091 used for normalization of I(ce(K)) of +228TH2cG 1973Ku09, 1960Ar06 to the I|g of 1995Ba42 +228TH G 968.98 2 149 8 E2 0.0107 +228THS G KC=0.00815$ LC=0.00194 +228TH cG M |a(K)exp=0.0074 {I30} (1973Ku09), 0.0082 (1960Ar06); +228TH2cG theory: |a(K)(E1)=0.0030, |a(K)(E2)=0.00815 +228TH L 979.50 2+ D +228TH E 0.37 5 9.22 7 0.37 5 +228THS E CK=0.7667 $CL=0.1730 $CM+=0.06033 +228TH G 583.4 1 3.6 3 [E1] 0.0094 I +228THS G KC=0.00761$ LC=0.00132 +228TH cG RI does not agree with the branching ratio in {+228}Ac decay +228TH G 651.40 5 1.59 10 [E1] +228TH3 G FLAG=G +228THS G CC=0.00758$ KC=0.00617$ LC=0.00106 +228TH cG RI indicated as a doublet in 1995Ba42, however, no other +228TH2cG placement of |g given. +228TH G 792.68 1.4 AP [E2] 0.0159 G +228TH3 G FLAG=N +228THS G KC=0.0116$ LC=0.00319 +228TH cG RI deduced from branching ratio in adopted |g's +228TH G 921.74 0.30 LT [M1,E2] 0.028 17 G +228TH3 G FLAG=N +228THS G KC=0.022 14$ LC=0.0044 22 +228TH cG |g seen in {+228}Ac decay; here |g is part of a multiplet +228TH cG RI deduced from branching ratio in adopted |g's +228TH G 979.4 4 0.5 AP [E2] 0.0105 G +228THS G KC=0.00799$ LC=0.00180 +228TH L 1016.41 2+,3-,4+ +228TH cL Possibly 2+ member of K|p=1+ band. +228TH E 0.34 8 9.22 11 0.34 8 +228THS E CK=0.7656 $CL=0.1738 $CM+=0.06064 +228TH G 620.27 5 1.41 10 G +228TH cG M |a(K)exp=0.16 {I3} (1973Ku09); theory: +228TH2cG |a(K)(E1)=0.00677, |a(K)(E2)=0.0183, |a(K)(M1)=0.100 +228TH G 688.14 8 1.21 14 & +228TH3 G FL=328.00 +228TH G 958.69 11 5.0 6 G +228TH G 1016.41 0.34 6 G +228TH3 G FLAG=N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.7 (1995Ba42) +228TH L 1022.53 (3)+ G +228TH E 1.8 8 8.49 20 1.8 8 +228THS E CK=0.7654 $CL=0.1739 $CM+=0.06069 +228TH G 835.65 2 42.7 22 E2 0.0143 +228THS G KC=0.0106$ LC=0.00279 +228TH cG M |a(K)exp=0.0119 {I17} (1973Ku09), 0.0105 {I15} (1960Ar06); +228TH2cG theory: |a(K)=0.0106 +228TH cG MR |<-9 from |g(|q,H,T) (1995Ba42) +228TH G 964.80 2 122 6 E2+M1 -7.2 10 0.0108 +228THS G KC=0.00821$ LC=0.00196 +228TH cG M |a(K)exp=0.012 {I5} (1973Ku09), 0.011 (1960Ar06); theory: +228THxcG |a(K)=0.00821 +228TH L 1059.93 4- +228TH cL J 3-,4+,5- ruled out by |g(|q,H,T) (1995Ba42) +228TH E 0.15 4 9.54 12 0.15 4 +228THS E CK=0.7643 $CL=0.1747 $CM+=0.06103 +228TH G 540.66 5 0.89 6 [M1,E2] 0.11 8 +228THS G KC=0.08 6$ LC=0.018 9$ +228TH G 663.92 8 1.44 11 (M1+E2) 0.06 4 +228THS G KC=0.05 4$ LC=0.010 6 +228TH cG M |a(K)exp=0.10 {I3} (1973Ku09), 0.075 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0842, |a(K)(E2)=0.0161 +228TH G 873.0 2 1.66 17 [E1] 0.00441 G +228THS G KC=0.00361$ LC=0.00060 +228TH L 1091.02 4+ G +228TH E 0.66 18 8.87 12 0.66 18 +228THS E CK=0.7632 $CL=0.1754 $CM+=0.06133 +228TH G 694.8 2 0.76 10 [E1] 0.00671 G +228THS G KC=0.00547$ LC=0.00093 +228TH G 713.1 3 0.48 11 [E2] 0.0197 I +228THS G KC=0.0141$ LC=0.00421 +228TH G 904.19 3 26.5 13 E2 0.0123 +228THS G KC=0.0092$ LC=0.00229 +228TH cG M |a(K)exp=0.012 {I3} (1973Ku09), 0.0092 (1960Ar06) +228TH2cG theory: |a(K)(E2)=0.00921, |a(K)(M1)=0.0374 +228TH cG MR |>+3.7 from |g(|q,H,T) (1995Ba42) +228TH G 1033.27 7 7.6 4 E2 0.0095 +228TH cG M E2 in 1995Ba42; possibly from |g(|q,H,T), although not +228TH2cG listed in table 3 +228TH L 1122.95 2- H +228TH E 0.7 4 8.82 25 0.7 4 +228THS E CK=0.7621 $CL=0.1762 $CM+=0.06167 +228TH G 100.42 0.5 LT (E1+M2) 0.23 AP 3.2 AP A +228TH3 G FLAG=EN +228THS G LC=2.4$ MC=0.64$ NC+=0.25 +228TH cG RI deduced from I(ce(L1)) +228TH G 153.95 2 5.5 3 E1 0.178 K +228THS G KC=0.139$ LC=0.0292$ MC=0.00703$ NC+=0.00250 +228TH cG M no ce(K) observed (1960Ar06) +228TH G 726.90 10 4.4 6 (E2) 0.0189 A +228THS G KC=0.0136$ LC=0.00400 +228TH G 794.97 2 34.4 17 E2+M1 -4.4 10 0.0182 15 +228THS G KC=0.0136 13$ LC=0.00349 20 +228TH cG M |a(K)exp=0.014 {I3} (1973Ku09), 0.014 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0116, |a(K)(M1)=0.0524 +228TH G 1065.21 7 1.03 7 [E1] 0.00311 +228THS G KC=0.00255$ LC=0.00042 +228TH L 1153.47 2+ I +228TH E 0.51 25 8.93 22 0.51 25 +228THS E CK=0.7610 $CL=0.1770 $CM+=0.06201 +228TH G 174.02 4 0.30 3 M1+E2 1.2 +11-6 2.23 18 A +228TH2 G FLAG=E +228THS G KC=1.5 10$ LC=0.66 4$ MC=0.171 22$ NC+=0.063 5 +228TH cG RI not in agreement with branching ratio in {+228}Ac decay +228TH G 184.61 5 0.21 3 E0+M1 63 8 @ +228TH3 G FL=968.97$ FLAG=M +228TH cG M |a(L12)exp=15 (1960Ar06); |a(L12)=10.2 for 5.4% M1 (10.5 for +228TH2cG 1.4%E2) transition deduced from {+228}Ac |b{+-} decay +228TH cG CC from {+228}Ac |b{+-} decay +228TH G 278.66 2 0.44 6 (M1+E2) 0.7 5 @ +228TH3 G FL=874.47$ FLAG=AM +228THS G KC=0.5 4$ LC=0.13 4$ MC=0.033 7$ NC+=0.0120 25 +228TH cG M 1995Ba42 gives M=(E2), data not given. For the doublet: +228TH2cG |a(K)exp=0.26 (1960Ar06); theory: |a(K)(M1)=0.872, |a(K)(E2)=0.0854 +228TH G 321.71 3 0.67 4 [E2] 0.140 +228THS G KC=0.0643$ LC=0.0550$ MC=0.0147$ NC+=0.00544 +228TH G 966.64 0.5 LE [E2] 0.0108 I +228TH3 G FLAG=N +228TH G 1095.74 14 0.32 6 [M1,E2] 0.018 10 +228TH G 1153.6 3 0.37 8 +228TH L 1168.38 3- H +228TH E 0.9 3 8.66 15 0.9 3 +228THS E CK=0.7604 $CL=0.1774 $CM+=0.06219 +228TH G 77.36 0.44 9 [E1] 0.235 N +228THS G LC=0.177$ MC=0.0431$ NC+=0.0150 +228TH cG RI deduced from branching ratio in adopted |g's. I|g|<0.6 +228TH2cG (1995Ba42) +228TH G 145.82 2 2.57 13 E1 0.203 K +228THS G KC=0.158$ LC=0.0336$ MC=0.00809$ NC+=0.00287 +228TH cG M ce not seen (1960Ar06) +228TH G 199.40 2 4.65 23 E1 0.096 K +228THS G KC=0.0758$ LC=0.0152$ MC=0.00365$ NC+=0.00129 +228TH cG M ce not seen (1960Ar06) +228TH G 649.12 7 0.97 9 [E2] 0.0240 & +228THS G KC=0.0168$ LC=0.00546 +228TH G 772.28 2 25.2 13 E2+M1 -3.4 +8-27 0.021 3 +228THS G KC=0.0157 24$ LC=0.0040 4 +228TH cG M |a(K)exp=0.0157 {I22} (1973Ku09), 0.015 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0122, |a(K)(M1)=0.0565 +228TH cG MR from |a(K)exp and -19|<|d|<-3 from |g(|q,H,T) +228TH2cG (1995Ba42) +228TH G 840.36 4 15.9 8 E2 0.0142 +228THS G KC=0.0105$ LC=0.00275 +228TH cG M |a(K)exp=0.0092 {I24} (1973Ku09), 0.0113 (1960Ar06); theory: +228TH2cG |a(K)=0.0105 +228TH G 981.5 2 0.76 10 [E1] I +228THS G CC=0.00358$ KC=0.00294$ LC=0.00049 +228TH G 1110.55 5 4.7 5 E1 @ +228THS G CC=0.00289$ KC=0.00237$ LC=0.00039 +228TH cG RI I|g(doublet)=7.1 {I4} and I|g(|g from 1297.42 level)=2.4 +228TH2cG {I2} (from coin) +228TH cG M for the 1110.55 doublet: |a(K)exp=0.0013 {I3} (1973Ku09), +228TH2cG 0.0019 (1960Ar06); theory: |a(K)=0.00237 +228TH L 1174.51 (5+) G +228TH G 987.92 10 4.31 22 [M1,E2] 0.024 14 +228THS G KC=0.019 11$ LC=0.0037 18 +228TH L 1175.4 2+ ? +228TH cL Possibly fed by multiply placed 584.7|g from the 1760.2 +228TH2cL level, and the 750.10|g from the 1925.2 level. However, the 988.63|g +228TH3cL and the 1117.63|g from this level were not seen by 1995Ba42. +228TH L 1200.5 (3)+ I +228TH E 0.13 LE 9.5 GE 0.13 LE +228THS E CK=0.7590 $CL=0.1784 $CM+=0.06259 7 +228TH G 178.14 7 0.2 LE E0 1.2 +228TH cG E from ce(L1) (1995Ba42) +228TH cG M no |g seen. No ce(L3) seen, |a(L12)exp>6 (1960Ar06) +228TH cG TI I(ce(L12)) (1960Ar06) +228TH G 231.50 5 0.92 5 [M1,E2] 1.1 8 +228THS G KC=0.8 7$ LC=0.24 4$ MC=0.061 6$ NC+=0.0223 20 +228TH G 1013.54 13 0.38 5 [M1,E2] 0.022 13 & +228THS G KC=0.018 11$ LC=0.0034 17 +228TH G 1142.78 0.10 3 [M1,E2] 0.017 9 +228THS G KC=0.013 8$ LC=0.0025 12 +228TH cG E deduced from E(level) +228TH L 1226.57 (4)- H +228TH E 0.3 LE 9.1 GE 0.3 LE +228THS E CK=0.7578 $CL=0.1792 $CM+=0.06294 7 +228TH G 135.51 2 1.04 6 E1 0.242 K +228THS G KC=0.188$ LC=0.0406$ MC=0.0098$ NC+=0.00348 +228TH G 204.05 2 6.0 3 E1 0.091 K +228THS G KC=0.0719$ LC=0.0143$ MC=0.00344$ NC+=0.00122 +228TH cG M ce not seen (1960Ar06) +228TH G 707.40 3 7.9 4 (E2) 0.0200 +228THS G KC=0.0143 $ LC=0.00431 +228TH cG M,MR |a(K)exp=0.020 {I6} (1973Ku09), thus |d|>2; theory: +228TH2cG |a(K)(E2)=0.0143, |a(K)(M1)=0.0711 +228TH G 830.48 3 29.0 15 E2(+M1) -7.7 9 0.0152 2 +228THS G KC=0.0113 2 $ LC=0.00293 3 +228TH cG M |a(K)exp=0.0140 {I18} (1973Ku09); theory: |a(K)(E2)=0.0107, +228THxcG |a(K)(M1)=0.0468 +228TH G 1039.87 6 2.92 15 +228TH L 1297.42 (5)- H +228TH E 0.16 LE 9.6 GE 0.16 LE 1U +228THS E CK=0.7009 8 $CL=0.2188 5 $CM+=0.08035 23 +228TH G 601.7 3 0.30 5 [E2] 0.0283 & ? +228TH cG Feeds the 695.6 level; see comment with the that level +228TH cG M |a(K)exp|>0.24 {I5} (1973Ku09); theory: |a(K)(E1)=0.00716, +228TH2cG |a(K)(E2)=0.0192, |a(K)(M1)=0.108 +228TH G 778.1 2 2.7 3 [M1,E2] 0.04 3 G +228THS G KC=0.034 22$ LC=0.007 4 +228TH G 901.4 3 2.0 3 [E2] 0.0123 G +228THS G KC=0.0093$ LC=0.00231 +228TH G 1110.55 5 2.4 2 E1 @ +228TH3 G FLAG=I +228TH cG M for the 1110.55 doublet: |a(K)exp=0.0013 {I3} (1973Ku09), +228TH2cG 0.0019 (1960Ar06); theory: |a(K)=0.00237 +228TH L 1344.08 3- J ? +228TH cL Possibly fed by the 399.94|g from the 1743.9 level, the +228TH2cL 415.91|g from the 1760.2 level, and the multiply placed 584.7|g from +228TH3cL the 1928.6 level; total feeding I(|g+ce)=0.97 {I13}. 1995Ba42 report an +228TH4cL indication of the strongest line deexciting this level, the 948|g +228TH5cL with I|g|?0.2; the other |g's deexciting this level were not seen +228TH6cL by 1995Ba42. Therefore, there is no intensity balance at this level. +228TH G 948 0.2 AP +228TH L 1416.1 2+,3- ? +228TH cL Possibly fed by the 477.1|g from the 1893.0 level and the +228TH2cL multiply placed 548.74|g from the 1965.0 level. However, although a +228TH3cL 471.7|g was seen (not placed in level scheme), the other |g's placed +228TH4cL from this level in {+228}Ac decay were not seen by 1995Ba42. +228TH L 1431.98 4+ +228TH cL J J|=3 from |g(|q,H,T) (1995Ba42) +228TH E 31.8 21 6.81 4 31.8 21 +228THS E CK=0.7450 $CL=0.1882 3 $CM+=0.06675 13 +228TH G 257.49 2 1.40 7 (M1) 1.36 K +228THS G KC=1.09$ LC=0.205$ MC=0.0495$ NC+=0.0180 +228TH G 263.62 2 2.17 11 E1 0.0502 K +228THS G KC=0.0400$ LC=0.00766$ MC=0.00184$ NC+=0.00065 +228TH G 278.66 2 1.61 21 [E2] 0.216 @ +228TH3 G FL=1153.47$ FLAG=M +228THS G KC=0.086$ LC=0.095$ MC=0.0257$ NC+=0.0095 +228TH cG M for the doublet: |a(K)exp=0.26 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.872, |a(K)(E2)=0.0854 +228TH G 340.98 2 20.5 10 E2+M1 -5.2 18 0.136 23 +228THS G KC=0.073 20$ LC=0.046 2$ MC=0.0122 5$ NC+=0.00450 17 +228TH cG M from K:L12:L3=140:90:30, |a(K)exp=0.061 (1960Ar06); theory: +228TH2cG K:L12:L3=140:74:18, |a(K)=0.073 {I20} +228TH G 409.45 2 100 5 E2+M1 -5.4 8 0.082 4 +228THS G KC= 0.049 4$ LC=0.0242 5$ MC=0.00631 10$ N+=0.00233 4 +228TH cG M |a(K)exp=0.049, K:L12:L3=54 {I3}:21 {I1}:4.6 {I3} +228TH2cG (1960Ar06); theory: |a(K)=0.049 {I4}, K:L12:L3=54:22:4.3 +228TH G 452.52 6 1.02 8 [E2] 0.0553 +228THS G KC=0.0330$ LC=0.0164$ MC=0.00429$ NC+=0.00158 +228TH G 463.02 2 224 11 E2 0.0522 +228THS G KC= 0.0316 $LC=0.0152 $MC=0.00397 $N+=0.00146 $ +228TH cG M |a(K)exp=0.044 {I5} (1973Ku09), |a(K)exp=0.035, K/L12=2.64 +228TH2cG {I21}, K/L3=11.6 {I8} (1960Ar06); theory: |a(K)=0.0316, K/L12=2.44, +228TH3cG K/L3=13.7; K/L3(M1)=1220 +228TH G 1053.80 0.5 AP I +228TH cG E deduced from E(level) +228TH G 1245.17 6 5.6 3 [M1,E2] 0.013 7 G +228THS G KC=0.011 6$ LC=0.0020 10 +228TH G 1374.26 7 1.0 AP +228TH L 1450.39 4- +228TH cL J J|=3 from |g(|q,H,T) (1995Ba42) +228TH E 8.7 8 7.35 5 8.7 8 +228THS E CK=0.7435 $CL=0.1893 4 $CM+=0.06722 14 +228TH G 18.41 3.7 5 [E1] 6.6 28 3 +228THS G L/T=0.59$ M/T=0.31 +228TH cG E deduced from E(level) +228TH cG TI deduced from coin experiment which gives branching=18% {I2} +228TH2cG for decay from 1450 level to 1432 level (1995Ba42). +228TH cG RI from I(|g+ce) and |a +228TH G 153.02 2 1.11 6 M1+E2 0.60 8 4.8 2 +228THS G KC=3.5 2$ LC=0.97 2$ MC=0.245 6$ NC+=0.090 2 +228TH cG M,MR from ce data (data not given) (1995Ba42) +228TH G 223.80 2 13.3 7 M1+E2 -0.18 5 1.97 3 +228THS G KC= 1.56 3$ LC= 0.302 1$ MC= 0.0729 2$ N+= 0.0266 1$ +228TH cG M |a(K)exp=1.32, K/L1=5.1 {I6}, ce(L3) not seen (1960Ar06); +228TH2cG theory: |a(K)=1.56, K/L1=5.93, K/L3=443 +228TH G 275.85 4 0.82 7 [E1] 0.0453 +228THS G KC=0.0362$ LC=0.00687$ MC=0.00165$ NC+=0.00058 +228TH G 282.01 2 18.6 9 M1+E2 -0.51 12 0.88 7 +228THS G KC=0.69 6$ LC= 0.145 6$ MC=0.0355 11$ N+=0.0129 4 +228TH cG M |a(K)exp=0.62, K/L12=4.1 {I5}, K/L3=58 {I6} (1960Ar06); +228TH2cG theory: |a(K)=0.69 {I6}, K/L12=4.9 {I6}, K/L3=133 {I43} +228TH G 327.45 4 31 3 [E2] 0.132 G +228THS G KC=0.0621$ LC=0.0515$ MC=0.0137$ NC+=0.00508 +228TH cG M |a(K)exp=0.055 (1960Ar06) based on the division of I|g and E1 +228TH2cG mult. in alternate placement. Theory: |a(K)(E2)=0.0619, |a(K)(M1)=0.559 +228TH G 359.36 3 1.30 7 [E1] 0.0252 +228THS G KC=0.0203$ LC=0.00372$ MC=0.00089$ NC+=0.00032 +228TH G 390.45 5 1.11 6 [M1,E2] 0.26 18 +228THS G KC=0.20 16$ LC=0.046 19$ MC=0.011 5$ NC+=0.0042 16 +228TH G 427.90 3 1.24 8 [E1] 0.0174 +228THS G KC=0.0141$ LC=0.00252$ MC=0.00060$ NC+=0.00022 +228TH G 434.01 3 1.73 10 [D,E2] 0.14 13 +228TH G 482.03 5 1.84 13 [M1,E2] 0.15 10 +228THS G KC=0.11 9$ LC=0.025 12$ MC=0.006 3$ NC+=0.0022 10 +228TH G 1054.23 6 3.3 3 [M1,E2] 0.020 11 +228THS G KC=0.016 9$ LC=0.0031 15 +228TH L 1531.47 3+ +228TH E 0.89 16 8.21 8 0.89 16 +228THS E CK=0.7351 $CL=0.1952 5 $CM+=0.06971 18 +228TH G 99.47 6 1.8 3 M1 4.09 +228THS G LC=3.07$ MC=0.741$ NC+=0.273 +228TH cG M |a(L12)exp=2.0, no ce(L3), L/M=2.0, L/N=6 (1960Ar06); theory: +228TH2cG |a(L12)=3.06, |a(L3)=0.0165 +228TH cG MR |<0.4 from ce data (data not given) (1995Ba42) +228TH G 356.96 0.024 5 [E2] 0.103 N +228TH cG Part of a multiplet, I|g not measured. +228TH cG RI from branching ratio in adopted |g's +228TH G 378.01 0.036 7 [M1,E2] 0.28 19 N +228THS G KC=0.21 17$ LC=0.051 20$ MC=0.013 5$ NC+=0.0046 16 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.2 (1995Ba42) +228TH G 440.4 4 0.15 7 M1 0.314 A +228THS G KC=0.252$ LC=0.0471$ MC=0.0113$ NC+=0.00410 +228TH G 509.13 8 1.2 2 E2(+M1) 1.1 GT 0.08 4 A +228TH3 G FLAG=EG +228THS G KC=0.06 3$ LC=0.016 5 +228TH G 562.50 4 1.44 9 E2+M1 +1.6 6 0.07 3 +228THS G KC=0.051 24$ LC=0.013 4 +228TH G 1135.39 0.014 4 N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH G 1344.65 0.013 4 N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH L 1539.2 2,3,4 +228TH cL Possibly fed by the 389.36|g from the 1928.6 level. +228TH2cL However, the |g's shown as deexciting this level in {+228}Ac decay +228TH3cL have either not been reported (416.30|g) or placed elsewhere in +228TH4cL level scheme (1142.85|g). 1995Ba42 suggests that the existence of +228TH5cL this level is doubtful. +228TH L 1580.9 (2-) +228TH E 0.166 21 8.86 6 0.166 21 +228THS E CK=0.7286 8 $CL=0.1998 6 $CM+=0.07167 23 +228TH G 354.2 2 0.29 5 [E2] 0.106 & +228THS G KC=0.0531$ LC=0.0385$ MC=0.0102$ NC+=0.00378 +228TH G 601.7 3 0.30 5 [E1] 0.0088 & +228THS G KC=0.00718$ LC=0.00124 +228TH G 1184.71 9 0.47 4 (M1+E2) 0.015 8 +228THS G KC=0.012 7$ LC=0.0023 11 +228TH cG M |a(K)exp=0.0105 {I20} (1973Ku09); theory: |a(K)(E2)=0.00571, +228TH2cG |a(K)(M1)=0.0185 +228TH G 1252.98 10 0.68 6 (M1+E2) 0.013 7 +228THS G KC=0.011 6$ LC=0.0020 10 +228TH cG M |a(K)exp=0.010 {I3} (1971Am05); theory: |a(K)(E2)=0.00517, +228THxcG |a(K)(M1)=0.0160 +228TH G 1523.4 2 0.60 6 & +228THS G CC=0.00139$ KC=0.00139 +228TH L 1588.3 4- +228TH cL J |g(|q,H,T) excludes 3- (1995Ba42) +228TH E 5.8 5 7.30 5 5.8 5 +228THS E CK=0.7275 8 $CL=0.2005 6 $CM+=0.07200 23 +228TH G 56.86 3 1.06 5 E1 0.533 K +228THS G LC=0.400$ MC=0.098$ NC+=0.0339 +228TH G 137.95 2 6.6 3 M1 7.89 +228THS G KC=6.30$ LC=1.20$ MC=0.289$ NC+=0.106 +228TH cG M |a(L12)exp=1.23, ce(L3) not seen (1960Ar06); theory: M1: +228TH2cG |a(L12)=1.20, |a(L3)=0.00622; E2: |a(L12)=1.22, |a(L3)=0.690 +228TH cG MR -0.2|<|d|<1.4 (|g(|q,H,T)), |<0.3 (|a) +228TH2cG (1995Ba42) +228TH G 156.34 2 1.36 7 E1 0.172 K +228THS G KC=0.134$ LC=0.0281$ MC=0.00676$ NC+=0.00240 +228TH G 420.03 8 0.68 5 [M1,E2] 0.21 15 +228THS G KC=0.16 13$ LC=0.037 17$ MC=0.009 4$ NC+=0.0034 14 +228TH L 1617.8 2+,3,4+ +228TH E 0.13 3 8.90 11 0.13 3 +228THS E CK=0.7227 9 $CL=0.2039 7 $CM+=0.0734 3 +228TH G 649.12 7 0.97 9 & +228TH3 G FL=968.97$ FLAG=G +228TH G 1432 1 0.60 14 @ +228TH2 G FLAG=P +228TH cG RI from I|g/I|g(1560|g) in adopted |g's. I|g(doublet)|<1.8 +228TH cG M for the doublet |a(K)exp=0.0032 {I7} (1973Ku09); +228TH2cG |a(K)(E2)=0.00409, |a(K)(M1)=0.0113 +228TH G 1559.7 2 0.34 5 G +228TH L 1638.3 2+ +228TH E 0.08 LE 9.1 GE 0.08 LE +228THS E CK=0.7190 10 $CL=0.2065 7 $CM+=0.0745 3 +228TH G 469.9 5 0.14 8 [E1] 0.0144 +228THS G KC=0.0116$ LC=0.00206$ MC=0.00049$ NC+=0.00018 +228TH G 515.20 11 0.62 9 [E1] 0.0120 ? +228THS G KC=0.0097$ LC=0.00170 +228TH cG RI disagrees with the branching ratio in {+228}Ac decay +228TH G 1310.26 0.07 3 G +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 1451.45 0.039 9 [E2] N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.05 (1995Ba42) +228TH G 1580.5 3 2.18 14 (M1,E2) G +228TH cG M |a(K)exp=0.0046 {I15} (1973Ku09); theory: |a(K)(M1)=0.0087, +228TH2cG |a(K)(E2)=0.00343 +228TH G 1638.30 7 1.98 10 (E2) +228TH cG M |a(K)exp=0.0026 {I8} (1973Ku09); theory: |a(K)(M1)=0.0087, +228THxcG |a(K)(E2)=0.0034 +228TH L 1643.1 (2-,3-) +228TH E 1.33 13 7.83 5 1.33 13 +228THS E CK=0.7181 10 $CL=0.2071 7 $CM+=0.0748 3 +228TH G 475.1 3 0.7 2 [M1,E2] 0.15 11 +228THS G KC=0.12 9$ LC=0.026 13$ MC=0.006 3$ NC+=0.0023 10 +228TH G 520.17 8 0.92 10 (M1) 0.201 A +228THS G KC=0.161$ LC=0.0301 +228TH G 626.72 0.23 5 G +228TH3 G FLAG=N +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 674.16 2.82 LE [E1] G +228TH3 G FLAG=R +228TH cG E from E(level) +228TH G 674.75 2.82 LE [M1,E2] 0.06 4 G +228TH3 G FLAG=R +228TH cG E from E(level) +228TH G 698.93 0.61 9 [D,E2] 0.05 4 G +228TH3 G FLAG=N +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 1247.07 5 8.2 4 (M1) 0.0201 G +228TH2 G FLAG=A +228THS G KC=0.0162 +228TH cG M for the 1245+1246 doublet: |a(K)exp=0.0088 {I11} (1973Ku09), +228TH2cG 0.021 (1960Ar06); theory: |a(K)(M1)=0.0162, |a(K)(E2)=0.00521 +228TH G 1315.2 2 0.20 5 [M1,E2] 0.012 6 +228THS G KC=0.009 5$ LC=0.0018 8 +228TH L 1646.0 3+ +228TH E 4.1 3 7.34 4 4.1 3 +228THS E CK=0.7175 10 $CL=0.2075 7 $CM+=0.0750 3 +228TH G 114.49 10 0.10 2 [M1,E2] 10 4 +228THS G KC=5.5 52$ LC=3.2 12$ MC=0.9 4$ NC+=0.32 14 +228TH G 419.39 0.24 3 [E1] 0.0182 N +228TH3 G FLAG=G +228THS G KC=0.0147$ LC=0.00264$ MC=0.00063$ NC+=0.000225 +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 492.22 10 0.28 3 [M1,E2] 0.14 10 +228THS G KC=0.11 8$ LC=0.024 12$ MC=0.006 3$ NC+=0.0021 10 +228TH G 523.16 11 1.40 10 [E1] 0.0116 +228TH2 G FL=1122.95 +228THS G KC=0.0094$ LC=0.00165 +228TH G 554.6 3 0.48 11 [M1,E2] 0.10 7 G +228THS G KC=0.08 6$ LC=0.017 9 +228TH G 623.7 2 0.36 6 [M1,E2] 0.08 5 & +228TH2 G FLAG=GQ +228THS G KC=0.06 4$ LC=0.012 6 +228TH G 629.4 2 0.37 6 [D,E2] 0.06 6 +228TH G 666.47 4 0.66 7 [M1,E2] 0.06 4 @ +228TH2 G FLAG=M +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG M for the doublet (I|g=2.47 {I13}): |a(K)exp=0.053 {I16} +228TH2cG (1973Ku09), 0.025 (1960Ar06); theory: |a(K)(M1)=0.0831, +228THxcG |a(K)(E2)=0.0160 +228TH G 676.9 2 0.89 15 [M1,E2] 0.06 4 G +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG M |a(K)exp=0.17 {I5} (1973Ku09), 0.10 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0797, |a(K)(E2)=0.0155 +228TH G 1249.7 2 0.73 10 G +228TH G 1459.2 2 8.6 5 E2 G +228TH2 G FLAG=I +228TH cG M |a(K)exp=0.0045 {I9} (1971Am05), 0.0026 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00395, |a(K)(M1)=0.0108 +228TH G 1588.15 5 37.2 19 E2 +228TH cG M |a(K)exp=0.0025 {I4} (1971Am05), 0.0031 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0034, |a(K)(E1)=0.0013, |a(K)(M1)=0.0086 +228TH cG MR |<-6 from nuclear orientation (1995Ba42) +228TH L 1682.8 2+,3(+),4+ +228TH E 0.2 LE 8.6 GE 0.2 LE +228THS E CK=0.7094 13 $CL=0.2131 9 $CM+=0.0774 4 +228TH G 660.28 0.02 AP [M1,E2] 0.06 4 N +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.2 (1995Ba42) +228TH G 1496.15 6 2.74 14 (E2) +228TH cG M |a(K)exp=0.0029 {I9} (1973Ku09); theory: |a(K)(E2)=0.00378, +228TH2cG |a(K)(M1)=0.0101 +228TH G 1625.0 2 0.70 14 +228TH L 1683.8 (4-) +228TH E 0.300 23 8.39 4 0.300 23 +228THS E CK=0.7092 13 $CL=0.2133 9 $CM+=0.0775 4 +228TH G 457.38 6 0.30 3 [M1,E2] 0.17 12 +228THS G KC=0.13 10$ LC=0.029 14$ MC=0.007 3$ NC+=0.0026 11 +228TH G 623.7 2 0.36 6 [M1,E2] 0.07 5 & +228TH2 G FLAG=GQ +228THS G KC=0.06 4$ LC=0.012 7 +228TH G 1164.58 7 1.32 7 (M1+E2) 0.016 9 +228THS G KC=0.013 7$ LC=0.0024 12 +228TH cG M |a(K)exp=0.012 {I2} (1973Ku09), 0.014 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00588, |a(K)(M1)=0.0193 +228TH G 1287.79 8 1.56 11 (M1+E2) 0.012 7 G +228THS G KC=0.010 5$ LC=0.0019 9 +228TH cG M |a(K)exp=0.0104 {I15} (1973Ku09); theory: |a(K)(M1)=0.0149, +228TH2cG |a(K)(E2)=0.00492 +228TH L 1688.4 2+,3+ +228TH cL J J|p=3-,4+ excluded by |g(|q,H,T) (1995Ba42) +228TH E 0.25 8 8.46 14 0.25 8 +228THS E CK=0.7081 13 $CL=0.2141 9 $CM+=0.0778 4 +228TH G 42.44 0.016 6 [M1] 49 N +228THS G LC=37.1$ MC=8.95 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH G 671.99 0.045 14 N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.2 (1995Ba42) +228TH G 813.94 0.012 3 [M1,E2] 0.038 23 N +228THS G KC=0.030 19$ LC=0.006 3 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH G 1501.5 2 0.74 6 G +228TH G 1630.63 6 2.65 13 (M1,E2) A +228TH L 1724.3 2+ +228TH E 2.80 19 7.32 4 2.80 19 +228THS E CK=0.6982 16 $CL=0.2210 11 $CM+=0.0808 5 +228TH G 497.72 0.1 LE [M2] N ? +228TH G 548.74 11 0.41 5 [M1,E2] 0.10 7 & ? +228THS G KC=0.08 6$ LC=0.017 9 +228TH cG |g feeds the 1175.4 level; see comment with that level +228TH G 570.88 4 3.33 17 (M1) 0.156 G +228TH3 G FLAG=A +228THS G KC=0.125$ LC=0.0234 +228TH G 701.72 4 3.76 21 (M1) 0.091 +228THS G KC=0.0726$ LC=0.0135 +228TH cG M |a(K)exp=0.081 {I14} (1973Ku09), 0.057 (1960Ar06); theory: +228TH2cG |a(K)=0.0726 +228TH G 755.32 2 19.6 10 M1 0.0747 +228THS G KC=0.0599$ LC=0.0111 +228TH cG M |a(K)exp=0.063 {I6} (1973Ku09), 0.057 (1960Ar06); theory: +228THxcG |a(K)(M1)=0.0599 +228TH G 1537.8 2 0.73 10 [E2] +228TH cG M |a(K)exp=0.0080 {I25} (1973Ku09); theory: |a(K)(E2)=0.00360 +228TH G 1666.53 6 3.35 17 M1 +228TH cG M |a(K)exp=0.0081 {I21} (1971Am05); theory: |a(K)(M1)=0.0084 +228TH cG MR 0.00 {I5} from |g(|q,H,T) (1995Ba42) +228TH G 1724.0 2 0.50 5 +228TH L 1743.9 4+ +228TH E 0.88 6 7.77 4 0.88 6 +228THS E CK=0.6917 18 $CL=0.2255 13 $CM+=0.0828 6 +228TH G 399.94 7 0.35 4 [E1] 0.0212 ? +228THS G KC=0.0162$ LC=0.00293$ MC=0.00070$ NC+=0.00025 +228TH cG Possibly feeds the 1344.08 level; see comment with that level +228TH G 590.65 11 0.41 5 [E2] 0.0295 +228THS G KC=0.0200$ LC=0.00716 +228TH cG M |a(K)exp=0.088 {I17} (1973Ku09); theory: |a(K)(E2)=0.0200, +228THxcG |a(K)(M1)=0.115 +228TH G 684.0 3 0.46 10 [E1] +228THS G CC=0.00691$ KC=0.00563$ LC=0.00096 +228TH G 1347.84 0.1 LE N ? +228TH G 1365.72 12 0.40 4 +228TH G 1415.42 10 0.97 6 [E3] ? +228TH G 1557.06 6 4.42 22 (E2+M1) +1.2 2 +228TH cG M |a(K)exp=0.0056 {I11} (1973Ku09), 0.0061 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00352, |a(K)(M1)=0.00908 +228TH G 1686.15 7 2.39 12 (E2) +228TH cG M |a(K)exp=0.0031 {I11} (1973Ku09); theory: |a(K)(E2)=0.0032, +228THxcG |a(K)(M1)=0.0082 +228TH L 1760.2 2+,3(+) +228TH cL J |g(|q,H,T) excludes J|p=4+ (1995Ba42) +228TH E 0.12 4 8.59 15 0.12 4 +228THS E CK=0.6857 20 $CL=0.2297 14 $CM+=0.0846 6 +228TH G 415.91 8 0.49 5 [E1] 0.0185 ? +228THS G KC=0.0150$ LC=0.00269$ MC=0.00064$ NC+=0.00023 +228TH cG Possibly feeds the 1344.08 level; see comment with that level +228TH G 584.7 3 0.22 7 [M1,E2] 0.10 7 & ? +228TH3 G FLAG=G +228THS G KC=0.08 6$ LC=0.017 9 +228TH cG Possibly feeds the 1175.4 level; see comment with that level +228TH G 737.8 2 0.74 13 [M1,E2] 0.05 3 G +228THS G KC=0.04 3$ LC=0.008 4 +228TH G 791.43 9 0.24 9 [M1,E2] 0.04 3 @ +228TH3 G FLAG=M +228THS G KC=0.032 21$ LC=0.007 4 +228TH G 1573.3 3 0.70 7 (E2) +228TH cG M |a(K)exp=0.011 {I4} (1973Ku09); theory: |a(K)(M1)=0.00884, +228TH2cG |a(K)(E2)=0.00346 |a(K)(E1)=0.00132 +228TH G 1702.6 3 1.15 11 G +228TH L 1804.7 4+ +228TH E 1.44 18 7.38 6 1.44 18 +228THS E CK=0.665 3 $CL=0.2439 20 $CM+=0.0908 9 +228TH G 116.26 5 0.16 2 [M1,E2] 9 4 +228THS G KC=5 5$ LC=3.1 11$ MC=0.8 4$ NC+=0.30 13 +228TH G 121.18 7 0.19 3 [E1] 0.316 +228TH2 G FL=1683.8 +228THS G KC=0.244$ LC=0.0542$ MC=0.0131$ NC+=0.00465 +228TH G 121.87 3 0.33 3 [M1,E2] 8 4 +228THS G KC=5 5$ LC=2.5 9$ MC=0.7 3$ NC+=0.25 10 +228TH G 158.74 3 1.25 7 M1+E2 0.55 15 4.4 4 +228THS G KC=3.3 4$ LC=0.85 2$ MC=0.213 9$ NC+=0.079 4 +228TH cG M,MR from ce data (data not given) (1995Ba42) +228TH G 354.2 2 0.29 5 [E1] 0.0260 & +228THS G KC=0.0209$ LC=0.00384$ MC=0.00092$ NC+=0.00033 +228TH G 372.60 3 1.57 8 [M1,E2] 0.29 20 +228THS G KC=0.22 18$ LC=0.053 21$ MC=0.013 5$ NC+=0.0048 7 +228TH G 651.5 2 0.34 5 [E2] 0.0238 I +228THS G KC=0.0166$ LC=0.00540 +228TH G 1426.5 2 0.48 6 [E2] +228TH G 1618.0 1 0.90 6 (M1,E2) G +228TH cG M |a(K)exp=0.012 {I4} (1973Ku09); theory: |a(K)(M1)=0.0091, +228THxcG |a(K)(E2)=0.0035 +228TH L 1817.4 4- +228TH cL J |g(|q,H,T) excludes J|p=3-,5- +228TH E 0.52 4 7.77 5 0.52 4 +228THS E CK=0.658 3 $CL=0.2490 22 $CM+=0.0930 10 +228TH G 367.04 2 2.45 12 M1 0.512 +228THS G KC=0.411$ LC=0.0773$ MC=0.0185$ NC+=0.00674 +228TH cG M,MR -0.2|<|d|<1.4 (|g(|q,H,T)), |<0.3 (|a) +228TH2cG (1995Ba42) +228TH G 1298.3 2 0.45 4 (M1+E2) 0.012 6 +228TH cG M |a(K)exp=0.011 {I4} (1973Ku09); theory: |a(K)(M1)=0.0146, +228TH2cG |a(K)(E2)=0.00486, |a(K)(E1)=0.00182, |a(K)(M2)=0.0146 +228TH cG MR +0.27|<|d|<+5 from |g(|q,H,T) (1995Ba42) +228TH G 1421.1 2 1.40 7 E2+M1 +2.0 5 +228TH cG M |a(K)exp=0.0055 {I14} (1973Ku09); theory: |a(K)(E2)=0.00414 +228TH L 1893.0 3+ +228TH E 3.77 23 6.60 5 3.77 23 +228THS E CK=0.591 7 $CL=0.295 5 $CM+=0.1138 21 +228TH G 477.1 3 0.7 2 G ? +228TH cG Possibly feeds the 1416.1 level; see comment with that level +228TH G 666.47 4 1.81 15 [E1] @ +228TH2 G FLAG=M +228TH cG M for the doublet (I|g=2.47 {I13}): |a(K)exp=0.053 {I16} +228TH2cG (1973Ku09), 0.025 (1960Ar06); theory: |a(K)(E1)=0.00591, +228THxcG |a(K)(E2)=0.0160 +228TH G 692.47 7 2.01 15(M1+E2+E0) 0.24 3 +228TH cG M |a(K)exp=0.17 {I3} (1973Ku09), 0.13 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0148, |a(K)(M1)=0.0751. |a(K)exp may indicate E0 presence. +228TH cG CC from |a(K)exp +228TH G 724.42 11 0.76 9 [E1] & +228TH G 739.2 2 0.57 9 [M1,E2] 0.0790 I +228TH cG M |a(K)exp=0.18 {I5} (1973Ku09); theory: |a(K)(M1)=0.0637. +228TH2cG ce(K) may include the ce(K)(737.8|g) +228TH G 770.2 2 2.28 15 [E1] G +228TH G 870.45 2 15.9 8 M1 0.0515 +228THS G KC=0.0414$ LC=0.00762 +228TH cG M |a(K)exp=0.038 {I5} (1973Ku09), 0.046 (1960Ar06): theory: +228TH2cG |a(K)(M1)=0.0414 +228TH cG MR -0.1 {I1} from |g(|q,H,T) (1995Ba42) +228TH G 924.3 2 2.7 2 [M1,E2] 0.028 17 G +228THS G KC=0.022 14$ LC=0.0043 22 +228TH cG M |a(K)exp=0.09 {I3} (1971Am05), 0.083 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0354, |a(K)(E2)=0.00886 +228TH G 1706.16 7 2.84 14 M1+E2 +0.42 4 +228TH cG M |a(K)exp=0.0071 {I16} (1973Ku09), 0.0063 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0079, |a(K)(E2)=0.0031 +228TH G 1835.26 5 9.8 5 E2+M1 +2.9 3 +228TH cG M |a(K)exp=0.0036 {I6} (1971Am05), 0.0055 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00275, |a(K)(M1)=0.0065 +228TH L 1900.0 2+ +228TH E 0.56 4 7.39 5 0.56 4 +228THS E CK=0.581 8 $CL=0.302 5 $CM+=0.1167 23 +228TH G 877.35 7 0.97 8 [M1,E2] 0.032 19 +228THS G KC=0.025 16$ LC=0.005 3 +228TH G 883.6 3 0.15 4 G +228TH G 920.8 3 0.38 10 [M1,E2] 0.028 17 G +228THS G KC=0.022 14$ LC=0.0044 22 +228TH cG |g not reported in {+228}Ac decay +228TH G 931.02 7 0.99 8 [M1,E2] 0.027 17 +228TH G 1503.7 2 0.72 6 [E1] G +228TH cG M |a(K)exp=0.0050 {I23} (1973Ku09); theory: |a(K)(E1)=0.00142, +228TH2cG |a(K)(E2)=0.00374 +228TH cG |g not reported in {+228}Ac decay +228TH G 1713.16 0.1 LE ? +228TH G 1842.15 8 2.29 12 M1+E2 -0.86 14 +228TH cG M |a(K)exp=0.0059 {I20} (1971Am05); theory: |a(K)(M1)=0.0064, +228THxcG |a(K)(E2)=0.0027 +228TH G 1900.3 3 0.34 5 +228TH L 1901.9 3-,4 +228TH E 0.177 19 7.88 6 0.177 19 +228THS E CK=0.579 8 $CL=0.304 6 $CM+=0.1176 24 +228TH G 1383.2 2 0.55 5 +228TH G 1505.9 2 0.55 5 G +228TH G 1523.4 2 0.60 6 & +228TH G 1715.06 10 0.50 3 +228TH L 1925.2 3+,4+ +228TH cL J |g(|q,H,T) excludes J|p=2+,3- +228TH E 1.52 11 6.81 5 1.52 11 +228THS E CK=0.539 11 $CL=0.331 7 $CM+=0.130 4 +228TH G 724.42 11 0.76 9 [M1,E2] 0.05 4 & +228THS G KC=0.04 3$ LC=0.008 5 +228TH G 750.10 10 0.67 8 [M1,E2] 0.05 3 ? +228TH cG Possibly feeds the 1175.4 level; see comment with that level +228TH G 865.15 13 0.50 7 +228TH G 956.8 2 2.5 5 G +228TH G 1529.02 6 2.61 13 [E1] +228TH cG M |a(K)exp=0.0034 {I11} (1973Ku09); theory: |a(K)(E1)=0.00138, +228TH2cG |a(K)(E2)=0.00364, |a(K)(M1)=0.0095; +228TH G 1738.48 5 9.6 5 M1+E2 +228TH cG M |a(K)exp=0.0061 {I8} (1971Am05), 0.0057 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0074, |a(K)(E2)=0.0030 +228TH L 1928.6 3+ +228TH cL J |g(|q,H,T) excludes J|p=2+,3-,4+ +228TH E 0.187 22 7.70 7 0.187 22 +228THS E CK=0.532 11 $CL=0.336 8 $CM+=0.132 4 +228TH G 168.42 9 0.09 2 [M1,E2] 2.9 16 +228THS G KC=1.9 17$ LC=0.73 6$ MC=0.19 3$ NC+=0.070 10 +228TH G 389.36 0.31 5 [M1,E2] 0.26 18 N ? +228TH cG RI from branching ratio in adopted |g's; I|g|<0.4 (1995Ba42) +228TH cG Possibility feeds the 1539.2 level; see comment with that +228TH2cG level +228TH G 584.7 3 0.22 7 [E1] & ? +228TH cG |g feeds the 1344 level; see comment with 1344 level +228TH3 G FLAG=G +228TH G 1741.6 2 0.42 8 G +228TH G 1870.80 9 0.73 4 (M1+E2) +228TH cG M |a(K)exp=0.0028 {I14} (1973Ku09); theory: |a(K)(E2)=0.0026, +228TH2cG |a(K)(M1)=0.0071 |a(K)(E1)=0.00100, |a(K)(M2)=0.0138 +228TH cG MR -0.32 {I9} or -1.7 {I3} from |g(|q,H,T) (1995Ba42) +228TH L 1944.9 3+ +228TH E 7.8 5 5.98 5 7.8 5 +228THS E CK=0.494 14 $CL=0.362 10 $CM+=0.144 5 +228TH G 184.61 5 0.41 5 (M1) 3.45 @ +228TH3 G FLAG=M +228THS G KC=2.76$ LC=0.525$ MC=0.125$ NC+=0.0461 +228TH cG M from ce data (data not given) (1995Ba42) +228TH G 220.61 2 1.24 6 (M1) 2.10 +228THS G KC=1.68$ LC=0.317$ MC=0.0763$ NC+=0.0278 +228TH cG M from ce data (data not given) (1995Ba42) +228TH G 299.10 10 0.43 5 M1 0.90 +228THS G KC=0.719$ LC=0.135$ MC=0.0326$ NC+=0.0118 +228TH cG M from ce data (data not given) (1995Ba42) +228TH G 306.61 2 2.00 10 M1 0.84 +228THS G KC=0.672$ LC=0.126$ MC=0.0304$ NC+=0.0111 +228TH cG M,MR from ce data, |d|<0.3 (data not given) (1995Ba42) +228TH G 512.79 11 1.33 13 [M1,E2] 0.12 9 G +228THS G KC=0.10 7$ LC=0.021 11 +228TH G 718.31 2 6.4 3 (E1) +228THS G CC=0.00631$ KC=0.00514$ LC=0.00087 +228TH cG M |a(K)exp=0.0074 {I36} (1973Ku09); theory: |a(K)(E1)=0.00514, +228TH2cG |a(K)(E2)=0.0140 +228TH G 776.52 3 7.9 4 [E1] +228THS G CC=0.00546$ KC=0.00446$ LC=0.00075 +228TH cG M |a(K)exp=0.009 {I3} (1973Ku09); theory: |a(K)(E1)=0.00446, +228THxcG |a(K)(E2)=0.0121 +228TH G 791.43 9 3.6 4 (M1) 0.0661 @ +228TH2 G FLAG=M +228THS G KC=0.0530$ LC=0.0098 +228TH cG M |a(K)exp(doublet)=0.054 {I11} (1973Ku09), I|g(doublet)=3.8; +228TH2cG theory: |a(K)(M1)=0.0530 +228TH G 853.97 8 0.82 7 [M1,E2] 0.034 21 +228THS G KC=0.027 17$ LC=0.005 3 +228TH cG M |a(K)exp=0.055 {I25} (1973Ku09,1960Ar06); theory: +228THxcG |a(K)(M1)=0.0436 +228TH G 922.5 2 2.25 12 [M1,E2] 0.028 16 G +228THS G KC=0.022 13$ LC=0.0044 22 +228TH G 928.4 2 0.89 8 G +228TH G 976.00 5 13.4 7 M1 0.0381 +228THS G KC=0.0306$ LC=0.00563 +228TH cG M |a(K)exp=0.025 {I6} (1973Ku09), 0.034 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0306, |a(K)(E2)=0.00804 +228TH cG MR 0.00 {I5} from |g(|q,H,T) (1995Ba42) +228TH G 1000.70 0.5 LE N +228TH G 1070.40 7 1.20 8 +228TH G 1549.3 2 1.2 2 G +228TH G 1758.11 5 9.0 5 E2+M1 -9 1 +228TH cG M |a(K)exp=0.0038 {I8} (1971Am05), 0.0015 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0029, |a(K)(M1)=0.0072 +228TH G 1887.13 5 24.0 12 E2+M1 -9.1 9 +228TH cG M |a(K)exp=0.0028 {I5} (1971Am05), 0.0023 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0026, |a(K)(M1)=0.0059 +228TH L 1965.0 2+,3,4+ +228TH E 0.139 17 7.57 7 0.139 17 +228THS E CK=0.430 20 $CL=0.405 14 $CM+=0.165 7 +228TH G 548.74 11 0.41 5 [M1,E2] 0.10 7 & ? +228THS G KC=0.08 6$ LC=0.017 9 +228TH cG Possibly feeds the 1416.1 level; see comment with that level +228TH G 1778.0 6 0.06 2 +228TH G 1907.13 11 0.99 5 +228TH G 1965.22 12 0.43 4 & +228TH L 1974.2 3-,4+ +228TH E 0.281 21 7.19 6 0.281 21 +228THS E CK=0.392 23 $CL=0.431 16 $CM+=0.177 8 +228TH G 1455.0 2 1.16 7 G +228TH G 1578.2 2 1.33 13 G +228TH G 1787.2 2 0.37 4 G +228TH G 1916.6 3 0.15 3 G +228TH L 1982.0 2+,3,4+ +228TH E 0.145 14 7.41 7 0.145 14 +228THS E CK=0.36 3 $CL=0.456 18 $CM+=0.189 9 +228TH G 1013.54 13 0.38 5 & +228TH G 1795.15 6 1.19 7 +228TH G 1924.2 2 0.18 2 +228TH L 2010.1 2+,3,4(+) +228TH E 0.30 4 6.81 9 0.30 4 +228THS E CK=0.17 4 $CL=0.58 3 $CM+=0.250 14 +228TH G 371.83 0.84 23 G +228TH3 G FLAG=N +228TH cG RI from branching ratio in adopted |g's +228TH G 887.16 0.35 5 N +228TH cG RI from branching ration in adopted |g's; I|g|<0.4 (1995Ba42) +228TH G 919.4 3 0.6 2 I +228TH G 1041.14 0.3 LE N +228TH G 1823.19 10 0.47 3 +228TH G 1952.39 10 0.76 5 +228TH L 2016.8 (2-,3-,4-) +228TH E 0.46 4 6.54 8 0.46 4 +228THS E CK=0.12 4 $CL=0.61 3 $CM+=0.268 15 +228TH G 1620.67 10 4.9 3 (M1+E2) +228TH cG M |a(K)exp=0.0060 {I15} (1973Ku09); theory: |a(K)(M1)=0.0090, +228TH2cG |a(K)(E2)=0.0034 +228TH L 2022.8 +228TH E 0.059 22 7.37 18 0.059 22 +228THS E CK=0.07 4 $CL=0.641 25 $CM+=0.285 15 +228TH G 384.53 0.1 LE [M1,E2] 0.27 18 N ? +228TH G 1148.20 14 0.30 4 +228TH G 1190.98 0.1 LE N +228TH G 1965.22 12 0.43 4 & + +228TH 232U A DECAY 1977KU15,1986LOZT 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +232U P 0 0+ 68.9 Y 4 5413.63 9 +228TH N 0.00259 0.00259 1 +228TH PN 2 +228TH cN NR From absolute I|g measurements of 1984Ge07, 1986LoZT +228TH cL E,J From adopted levels +228TH cA Q(|a)({+232}U)=5413.63 {I9} corrected value from G. Audi, +228THxcA Aug. 1996. +228TH cA E 1972Go33, 1971So15, 1966Ba49, 1963Le17. Calculated values +228TH2cA are from Q(|a) and E(level) in {+228}Th +228TH cA IA Calculated from I(|g+ce) balance in level scheme, unless +228TH2cA otherwise noted. The values differ +228TH3cA substantially from the direct I|a measurements of 1966Ba49. +228TH cA HF HF(5320.12|a)=1.00 yields r{-0}({+228}Th)=1.5289 {I3} +228TH cA E(B) From 1991Ry01. Recommended E|a=5262.36 {I9} in 1991Ry01 is a +228TH2cA misprint, see originally published E|a and adjustment. +228TH cA IA(F) From I(A{-0})/I|a(58)=0.463 {I5} (weighted average from +228TH2cA 1955As28, 1965Be15, 1966Ba49, 1971So15) and I(A{-0})+I(a(58)=99.70 {I2} +228TH cG E,RI$From 1977Ku15, except as noted. (I|g of 1977Ku15 are normalized +228TH2cG to 26.33 for the 129|g). Others: 1963Le17, 1965Be15, 1966Ah02, +228THxcG 1984Ge07. +228TH cG M From adopted gammas, unless otherwise noted +228TH cG RI(A) From 1986LoZT, 1984Ge07 +228TH cG M(D) 1977Ku15 quote A. Plochocki, thesis (1974) as establishing +228TH2cG the multipolarity E0+E2; however, no published information is +228TH3cG available on this. 1977Ku15 give I|g=I(|g+ce) in their level scheme, +228TH4cG suggesting that the E0 admixture may not be significant for intensity +228TH5cG calculations. +228TH L 0.0 0+ +228TH A 5320.12 14 68.15 23 1.00 B +228TH2 A FLAG=F +228TH L 57.762 5 2+ 0.406 NS 7 +228TH cL T weighted average of 0.409 ns {I10} (1970To08) and 0.402 ns +228TH2cL {I10} (1965Ne03); other: 0.40 ns {I3} (1960Be25) +228TH A 5263.36 9 31.55 230.992 12 B +228TH2 A FLAG=F +228TH G 57.78 5 77.2 7 E2 156 A +228THS G LC= 114 $MC= 31.1 $NC+= 11.4 $ +228TH cG CC 158 {I7} (1968Du06) +228TH cG M L1:L2:L3=3.55 {I25}:115 {I4}:100 (1966Ha01); +228TH2cG M1:M2:M3=5.3 {I13}:107 {I8}:100, M3/L3=0.32 {I3} (1966Ra15); theory: +228TH2cG L1:L2:L3=3.90:119:100, M1:M2:M3=4.35:114:100, M3/L3=0.276 +228TH L 186.828 5 4+ 0.164 NS 4 +228TH cL T weighted average of 0.169 ns {I7} (1970To08), 0.161 ns {I5} +228TH2cL (1965Ne03) +228TH A 5139.0 20 0.30 2 17.5 12 +228TH cA IA weighted average from 1955As28, 1965Be15, 1966Ba49, 1971So15. +228TH G 129.08 5 26.33 15 E2 3.81 A +228THS G KC= 0.269 $LC= 2.57 $MC= 0.706 $NC+= 0.263 $ +228TH L 328.003 5 1- +228TH A 4997.94 CA 0.00616 8 111 2 +228TH cA IA other: 0.0029 {I2} (1966Ba49) +228TH G 270.2 2 1.220 19 E1 0.0474 A +228THS G KC= 0.0379 $LC=0.00722 $MC=0.00173 $NC+=0.00061 $ +228TH G 327.9 2 1.093 23 E1 0.0308 A +228THS G KC=0.02472 $LC=0.00458 $MC=0.00110 $NC+=0.00039 $ +228TH L 378.178 11 6+ +228TH A 4948.63 CA 5.1E-5 5 6.4E+3 6 +228TH cA IA$other: 0.00017 {I3} (1966Ba49) +228TH G 191.0 2 0.012 1 E2 0.791 +228THS G KC= 0.1741 $LC= 0.453 $MC= 0.1237 $NC+= 0.0457 $ +228TH L 396.085 5 3- +228TH A 4931.04 CA 4.8E-5 4 5.2E+3 5 +228TH cA IA$other: 0.00021 {I3} (1966Ba49) +228TH G 209.5 5 0.0041 10 E1 0.0856 +228THS G KC= 0.0676 $LC=0.01341 $MC=0.00323 $NC+=0.00114 $ +228TH G 338.1 2 0.0143 5 E1 0.0288 +228THS G KC=0.02314 $LC=0.00427 $MC=0.00102 $NC+=0.00036 $ +228TH L 519.199 6 5- +228TH A 4810.04 CA 5.6E-5 3 680 40 +228TH G 141.0 5 0.0012 5 (E1) 0.220 +228THS G KC= 0.1711 $LC= 0.0367 $MC=0.00883 $NC+=0.00313 $ +228TH G 332.3 3 0.019 1 (E1) 0.0299 +228THS G KC=0.02402 $LC=0.00444 $MC=0.00106 $NC+=0.00038 $ +228TH L 831.832 11 0+ +228TH A 4502.80 CA 2.1E-5 2 10.6 11 +228TH cA IA$other: 0.000024 {I7} (1963Le17) +228TH G 503.6 3 0.0056 3 (E1) 0.0125 +228THS G KC=0.01015 $LC=0.00179 $ +228TH G 773.4 5 0.0018 3 [E2] 0.0167 +228THS G KC=0.01218 $LC=0.00340 $ +228TH G 831 0.0003 LT E0 8E-4 4 +228TH cG M,TI from 1963Le17 +228TH L 874.48 3 2+ +228TH A 4460.94 CA 3.9E-6 9 27 8 +228TH cA IA$includes additional weak |g's at 688.1, 816.7 and 874.4 keV, +228TH2cA from adopted levels. I|a=3.2|*10{+-6} {I9} without inclusion of these +228TH3cA additional |g's +228TH G 478 1 0.00055 21 [E1] 0.0139 +228THS G KC=0.01127 $LC=0.00199 $MC=0.00047 $NC+=0.00017 $ +228TH G 547 1 0.00039 24 [E1] 0.0106 +228THS G KC=0.00863 $LC=0.00150 $ +228TH G 817 1 0.0003 AP [M1+E2] 0.038 23 D + +228TH 226RA(A,2NG) 1993AC02,1986SC18 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH PN 6 +228TH c 1993Ac02: E|a=28 MeV; measured E|g, I|g in coin with +228TH2c ce(L2)(129.1|g) +228TH c 1986Sc18: E|a=33, 42, 55 MeV; measured ce, (ce)(ce), (ce)|g +228TH c The level scheme is that proposed by 1986Sc18 and 1993Ac02, +228TH2c confirming levels known from {+228}Ac |b{+-} decay, {+228}Pa |e decay +228TH3c and {+230}Th(|a,|a'2n), and adding the levels with J>14. The 1- and 3- +228TH3c levels of the K|p=0- band are not seen in this experiment. +228TH cL E From least squares fit to E|g, unless otherwise noted +228TH cL J From adopted levels, unless otherwise noted +228TH cL E(A) Rounded-off values from adopted levels +228TH cL J(B) From this data set, based on the level decay mode, band +228TH2cL structure (1993Ac02) +228TH CL BAND(D) GS ROTATIONAL BAND +228TH CL BAND(E) KPI=0- BAND +228TH cG E From 1993Ac02 +228TH cG RI Relative I|g from the level (1993Ac02) +228TH L 0.0 0+ D +228TH L 57.76 2+ A +228TH2 L FLAG=D +228TH L 186.83 4+ A +228TH2 L FLAG=D +228TH L 378.18 6+ A +228TH2 L FLAG=D +228TH G 191.4 3 +228TH L 519.20 5- A +228TH2 L FLAG=E +228TH G 332.4 3 +228TH L 622.5 3 8+ D +228TH G 244.4 3 +228TH L 695.6 3 7- E +228TH G 317.4 3 +228TH L 911.8 4 10+ D +228TH G 289.4 3 +228TH L 920.8 3 9- E +228TH G 225.1 3 1.00 +228TH G 298.3 3 4.07 24 +228TH L 1189.8 4 11- E +228TH G 268.9 3 1.00 +228TH G 278.0 3 1.50 10 +228TH L 1239.4 4 12+ D +228TH G 327.5 3 +228TH L 1497.1 5 13- E +228TH G 257.7 3 0.52 4 +228TH G 307.3 3 1.00 +228TH L 1599.5 5 14+ B +228TH2 L FLAG=D +228TH G 360.1 3 +228TH L 1838.3 5 15- B +228TH2 L FLAG=E +228TH G 341.2 3 +228TH L 1988.1 6 16+ B +228TH2 L FLAG=D +228TH G 388.6 3 +228TH L 2209.7 6 17- B +228TH2 L FLAG=E +228TH G 371.4 3 +228TH L 2407.9 7 18+ B +228TH2 L FLAG=D +228TH G 419.8 3 +228THF G FL=1988.1 + +228TH 230TH(P,T) 1972MA15 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH c 1972Ma15: E=17 MeV +228TH c 1995Ba42: authors quote H. Baltzer, et al., to be published +228TH cL E From 1972Ma15, unless otherwise noted +228TH cL E(A),L(B)$From 1995Ba42 +228TH L 0 0 +228TH L 57 5 +228TH L 185 5 +228TH L 830 5 0 +228TH L 874 5 +228TH L 938 0 A +228TH3 L FLAG=B +228TH L 944 A +228TH cL Possibly unnatural parity level (1995Ba42) +228TH L 977 5 +228TH cL Natural parity level (1995Ba42) +228TH L 1016 A +228TH cL Natural parity level (1995Ba42) +228TH L 1160 5 A +228TH cL Possibly unnatural parity level (1995Ba42) + +228TH 230TH(A,A'2NG) 1984HA21 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH c E=56 MeV. Measured ce and ce|g +228TH cL J From 1984Ha21 based on coin and band structure +228TH cL E From a least-squares fit to the E|g data. +228TH cL The authors do not see transitions from the known 1- and +228TH2cL 3- members of the K|p=0- band. The level scheme is based on +228TH3cL coincidence data, energy fits, and intensity systematics +228TH cG Authors give only E|g. Multipolarity of 129, 191 and 244 |g's +228TH2cG in the ground-state band are determined as E2 from (L1+L2)/L3 ce data +228TH L 0 0+ +228TH L 57.8 2+ +228TH G 57.8 S +228TH cG E not seen. E|g is rounded-off value from adopted |g's +228TH L 187 4+ +228TH G 129.0 2 E2 +228TH L 378 6+ +228TH G 191.0 1 E2 +228TH L 519 5- +228TH G 332.0 4 +228TH L 622 8+ +228TH G 244.3 1 E2 +228TH3 G FL=378 +228TH L 695 7- +228TH G 317.2 2 +228TH L 911 10+ +228TH G 289.3 2 +228TH L 921 9- +228TH G 298.7 2 +228TH L 1190 11- +228TH G 268.9 5 +228TH G 278.4 3 +228TH L 1239 12+ +228TH G 327.2 4 +228TH L 1497 (13-) +228TH cL E shown as tentative by authors, but |g's to 11- and 12+ +228TH2cL are consistent with adopted data from (|a,2n|g) +228TH G 257.3 5 +228TH G 306.6 5 +228TH L 1596 (14+) ? +228TH cL E the adopted 14+ member of this band is at 1599.5-keV +228TH2cL from (|a,2n|g) with E|g=360.1 to 12+ +228TH G 357.2 5 + diff --git a/tests/ensdf_processing/alphad/ref_a228.ens.alphad.inp b/tests/ensdf_processing/alphad/ref_a228.ens.alphad.inp new file mode 100644 index 0000000000..cc3e4e6db9 --- /dev/null +++ b/tests/ensdf_processing/alphad/ref_a228.ens.alphad.inp @@ -0,0 +1,7 @@ +ref_a228.ens +ref_a228.ens.alphad.rpt +Y +N + + + diff --git a/tests/ensdf_processing/alphad/ref_a228.ens.alphad.rpt b/tests/ensdf_processing/alphad/ref_a228.ens.alphad.rpt new file mode 100644 index 0000000000..1b20215b2c --- /dev/null +++ b/tests/ensdf_processing/alphad/ref_a228.ens.alphad.rpt @@ -0,0 +1,140 @@ +228TH ADOPTED LEVELS, GAMMAS 97NDS 199709 + +228TH 228AC B- DECAY 1987DA28 97NDS 199704 + +228TH 228PA EC DECAY 1995BA42 97NDS 199704 + +228TH 232U A DECAY 1977KU15,1986LOZT 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +232U P 0 0+ 68.9 Y 4 5413.63 9 +228TH N 0.00259 0.00259 1 +228TH PN 2 +228TH cN NR From absolute I|g measurements of 1984Ge07, 1986LoZT +228TH cL E,J From adopted levels +228TH cA Q(|a)({+232}U)=5413.63 {I9} corrected value from G. Audi, +228THxcA Aug. 1996. +228TH cA E 1972Go33, 1971So15, 1966Ba49, 1963Le17. Calculated values +228TH2cA are from Q(|a) and E(level) in {+228}Th +228TH cA IA Calculated from I(|g+ce) balance in level scheme, unless +228TH2cA otherwise noted. The values differ +228TH3cA substantially from the direct I|a measurements of 1966Ba49. +228TH cA HF HF(5320.12|a)=1.00 yields r{-0}({+228}Th)=1.5289 {I3} +228TH cA E(B) From 1991Ry01. Recommended E|a=5262.36 {I9} in 1991Ry01 is a +228TH2cA misprint, see originally published E|a and adjustment. +228TH cA IA(F) From I(A{-0})/I|a(58)=0.463 {I5} (weighted average from +228TH2cA 1955As28, 1965Be15, 1966Ba49, 1971So15) and I(A{-0})+I(a(58)=99.70 {I2} +228TH cG E,RI$From 1977Ku15, except as noted. (I|g of 1977Ku15 are normalized +228TH2cG to 26.33 for the 129|g). Others: 1963Le17, 1965Be15, 1966Ah02, +228THxcG 1984Ge07. +228TH cG M From adopted gammas, unless otherwise noted +228TH cG RI(A) From 1986LoZT, 1984Ge07 +228TH cG M(D) 1977Ku15 quote A. Plochocki, thesis (1974) as establishing +228TH2cG the multipolarity E0+E2; however, no published information is +228TH3cG available on this. 1977Ku15 give I|g=I(|g+ce) in their level scheme, +228TH4cG suggesting that the E0 admixture may not be significant for intensity +228TH5cG calculations. +228TH L 0.0 0+ +228TH A 5320.12 14 68.15 23 1.00 B +228TH2 A FLAG=F +228TH L 57.762 5 2+ 0.406 NS 7 +228TH cL T weighted average of 0.409 ns {I10} (1970To08) and 0.402 ns +228TH2cL {I10} (1965Ne03); other: 0.40 ns {I3} (1960Be25) +228TH A 5263.36 9 31.55 230.992 12 B +228TH2 A FLAG=F +228TH G 57.78 5 77.2 7 E2 156 A +228THS G LC= 114 $MC= 31.1 $NC+= 11.4 $ +228TH cG CC 158 {I7} (1968Du06) +228TH cG M L1:L2:L3=3.55 {I25}:115 {I4}:100 (1966Ha01); +228TH2cG M1:M2:M3=5.3 {I13}:107 {I8}:100, M3/L3=0.32 {I3} (1966Ra15); theory: +228TH2cG L1:L2:L3=3.90:119:100, M1:M2:M3=4.35:114:100, M3/L3=0.276 +228TH L 186.828 5 4+ 0.164 NS 4 +228TH cL T weighted average of 0.169 ns {I7} (1970To08), 0.161 ns {I5} +228TH2cL (1965Ne03) +228TH A 5139.0 20 0.30 2 17.5 12 +228TH cA IA weighted average from 1955As28, 1965Be15, 1966Ba49, 1971So15. +228TH G 129.08 5 26.33 15 E2 3.81 A +228THS G KC= 0.269 $LC= 2.57 $MC= 0.706 $NC+= 0.263 $ +228TH L 328.003 5 1- +228TH A 4997.94 CA 0.00616 8 111 2 +WARNING: Non-numeric DE(alpha)= CA +228TH cA IA other: 0.0029 {I2} (1966Ba49) +228TH G 270.2 2 1.220 19 E1 0.0474 A +228THS G KC= 0.0379 $LC=0.00722 $MC=0.00173 $NC+=0.00061 $ +228TH G 327.9 2 1.093 23 E1 0.0308 A +228THS G KC=0.02472 $LC=0.00458 $MC=0.00110 $NC+=0.00039 $ +228TH L 378.178 11 6+ +228TH A 4948.63 CA 5.1E-5 5 6.4E+3 6 +WARNING: Non-numeric DE(alpha)= CA +228TH cA IA$other: 0.00017 {I3} (1966Ba49) +228TH G 191.0 2 0.012 1 E2 0.791 +228THS G KC= 0.1741 $LC= 0.453 $MC= 0.1237 $NC+= 0.0457 $ +228TH L 396.085 5 3- +228TH A 4931.04 CA 4.8E-5 4 5.2E+3 5 +WARNING: Non-numeric DE(alpha)= CA +228TH cA IA$other: 0.00021 {I3} (1966Ba49) +228TH G 209.5 5 0.0041 10 E1 0.0856 +228THS G KC= 0.0676 $LC=0.01341 $MC=0.00323 $NC+=0.00114 $ +228TH G 338.1 2 0.0143 5 E1 0.0288 +228THS G KC=0.02314 $LC=0.00427 $MC=0.00102 $NC+=0.00036 $ +228TH L 519.199 6 5- +228TH A 4810.04 CA 5.6E-5 3 680 40 +WARNING: Non-numeric DE(alpha)= CA +228TH G 141.0 5 0.0012 5 (E1) 0.220 +228THS G KC= 0.1711 $LC= 0.0367 $MC=0.00883 $NC+=0.00313 $ +228TH G 332.3 3 0.019 1 (E1) 0.0299 +228THS G KC=0.02402 $LC=0.00444 $MC=0.00106 $NC+=0.00038 $ +228TH L 831.832 11 0+ +228TH A 4502.80 CA 2.1E-5 2 10.6 11 +WARNING: Non-numeric DE(alpha)= CA +228TH cA IA$other: 0.000024 {I7} (1963Le17) +228TH G 503.6 3 0.0056 3 (E1) 0.0125 +228THS G KC=0.01015 $LC=0.00179 $ +228TH G 773.4 5 0.0018 3 [E2] 0.0167 +228THS G KC=0.01218 $LC=0.00340 $ +228TH G 831 0.0003 LT E0 8E-4 4 +228TH cG M,TI from 1963Le17 +228TH L 874.48 3 2+ +228TH A 4460.94 CA 3.9E-6 9 27 8 +WARNING: Non-numeric DE(alpha)= CA +228TH cA IA$includes additional weak |g's at 688.1, 816.7 and 874.4 keV, +228TH2cA from adopted levels. I|a=3.2|*10{+-6} {I9} without inclusion of these +228TH3cA additional |g's +228TH G 478 1 0.00055 21 [E1] 0.0139 +228THS G KC=0.01127 $LC=0.00199 $MC=0.00047 $NC+=0.00017 $ +228TH G 547 1 0.00039 24 [E1] 0.0106 +228THS G KC=0.00863 $LC=0.00150 $ +228TH G 817 1 0.0003 AP [M1+E2] 0.038 23 D + + + +=================================== + Z: 92. A: 232. DATE RUN 06-Oct-2015 ALPHAD Version 2.0a [06-Nov-2006] +----------------------------------- +Q ALPHA E TOTAL ALPHA HALF LIFE RADIUS (1E-13 cm) RZERO +5.41363 9 5.44980 9 2.517E4 D 15 9.3399 18 1.52885 29 + R0(T+DT): 1.52856 -28 + R0(T-DT): 1.52913 29 + R0(Q+DQ): 1.52880 -5 + R0(Q-DQ): 1.52890 5 + + TOTAL HALF LIFE ALPHA BRANCH + 68.9 Y 4 1.000 +THIS RADIUS ADJUSTED +K +ENERGY LEVEL ALPHA ENERGY ABUNDANCE CALC. HALF LIFE HINDRANCE FACTOR + +0.000 5320.12 14 0.6815 23 3.693E4 25 1.000 +57.762 5 5263.36 9 0.3155 23 8.038E4 9 0.992 10 +186.828 5 5139.0 20 0.00300 20 4.796E5 6 17.5 12 +328.003 5 4998 6.16E-5 8 3.664E6 4 111.5 16 +378.178 11 4949 5.1E-7 5 7.710E6 9 6.40E3 63 +396.085 5 4931 4.8E-7 4 1.0082E7 12 5.20E3 44 +519.199 6 4810 5.6E-7 3 6.641E7 8 677 37 +831.832 11 4503 2.10E-7 20 1.1261E10 14 10.6 11 +874.48 3 4461 3.9E-8 9 2.365E10 3 27 7 +228TH 226RA(A,2NG) 1993AC02,1986SC18 97NDS 199704 + +228TH 230TH(P,T) 1972MA15 97NDS 199704 + +228TH 230TH(A,A'2NG) 1984HA21 97NDS 199704 + From e76bb16cd98e7b46860e1260851584d5160eea83 Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 4 Jan 2016 15:45:40 -0800 Subject: [PATCH 041/216] Added ensdf_processing python interface and tests --- pyne/ensdf_processing.py | 125 +++++++++++++++++++++++++++++++++ tests/test_ensdf_processing.py | 96 +++++++++++++++++++++++++ 2 files changed, 221 insertions(+) create mode 100644 pyne/ensdf_processing.py create mode 100644 tests/test_ensdf_processing.py diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py new file mode 100644 index 0000000000..2d1a07b234 --- /dev/null +++ b/pyne/ensdf_processing.py @@ -0,0 +1,125 @@ +'''This module accesses various ensdf processing tools''' + +import sys, os, shutil, subprocess, tarfile +import numpy as np +from warnings import warn +from pyne.utils import QAWarning + +try: + import urllib.request as urllib2 +except ImportError: + import urllib2 + +if sys.version_info[0] > 2: + basestring = str + +warn(__name__ + " is not yet QA compliant.", QAWarning) + +def path_to_exe(exe_name ): + exe_path_abs, dp = os.path.split(os.path.abspath(__file__)) + exe_path_abs = os.path.join(exe_path_abs, exe_name) + exe_path_abs = os.path.join('./',exe_path_abs) + return exe_path_abs + +def verify_download_exe(exe_path, exe_url, compressed = 0, decomp_path = '', dl_size = 0): + if not os.path.exists(exe_path): + print 'fetching executable' + response = urllib2.urlopen(exe_url) + prog = 0 + CHUNK = 32 * 1024 + f = open(exe_path, 'wb') + while True: + chunk = response.read(CHUNK) + prog = prog + (256) + #if dl_size != 0: + # print 'Download progress: %d/100' % (100.0 * (float(prog) / float(dl_size))) + if not chunk: break + f.write(chunk) + f.close() + # set proper permissions on newly downloaded file + os.chmod(exe_path, 0744) + if compressed: + tfile = tarfile.open(exe_path, 'r:gz') + tfile.extractall(decomp_path) + +def alphad(inputdict_unchecked): + """ + This function calculates the alpha hinderance factors and theoretical half + lives for even even ground state transitions. + + Input Dictionary Required Key Pair Value: + ensdf_input_file : input file + output_file : file for output to be written to (doesn't have to exist) + + Output Dictionary Values: + Everything in input dictionary is returned if ALPHAD completes successfully. + + Full documentation explaining the details of the functionality and physics + behind ALPHAD can be found at: + http://www.nndc.bnl.gov/nndcscr/ensdf_pgm/analysis/alphad/readme-alphad.pdf + """ + inputdict = {} + input_file = inputdict_unchecked['input_file'] + report_file = inputdict_unchecked['report_file'] + rewrite_hinderance = inputdict_unchecked['rewrite_input_with_hinderance_factor'] + output_file = 'alphad.out' + if(rewrite_hinderance == 1): + output_file = inputdict_unchecked['output_file'] #output file if report = yes + exe_path = path_to_exe('alphad') + proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + inp = input_file + '\n' + report_file + '\n' + 'Y' + '\n' + if (rewrite_hinderance == 1): + inp = inp + 'Y' + '\n' + output_file + else: + inp = inp + 'N' + '\n' + proc.stdin.write(inp) + proc.communicate()[0] + proc.stdin.close() + return inputdict_unchecked + +def bricc(inputdict_unchecked): + """ + This function calculates the conversion electron, electron-positron pair conversion + coefficients, and the E0 electron factors. + + Input Dictionary Required Key Pair Value: + input_line : input line to be used, as if bricc was being used in the interactive + command line style. This line will be passed in verbatim to the + bricc executable, and default output file names will be used. For + generating new records, or any operation that produces output files, + '' should be appended on the end of input_line, to force default + file names to be used. + Output Dictionary Values: + input_line : user defined input + output_file_directory : the directory all produced bricc output files will be + located. + bricc_output : data printed to command line. Useful for interactive use. + NOTE: + All the various ouptput files bricc can generate are found in the + + 'output_file_directory' path. '' must be appended to 'input_line' for this + to work properly. + """ + exe_path = path_to_exe('bricc') + exe_dir = path_to_exe('') + compressed_exe_path = exe_path + '.tar.gz' + + bricc_url = "http://www.nndc.bnl.gov/nndcscr/ensdf_pgm/analysis/BrIcc/Linux/BriccV23-Linux.tgz" + decomp_exe_path = path_to_exe('') + decomp_options = ['bricc', '.tgz', True] + verify_download_exe(compressed_exe_path, bricc_url, compressed = True, decomp_path = decomp_exe_path, dl_size = 127232) + + # check if BriIccHome environment variable has been set (needed by BRICC executable) + if not os.environ.get('BrIccHome'): + os.environ['BrIccHome'] = str(exe_dir) + + input_line = inputdict_unchecked['input_line'] + proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + proc.stdin.write(input_line + '\n' + 'exit' + '\n') + bricc_output = proc.communicate()[0] + proc.stdin.close() + + output_dict = inputdict_unchecked + output_dict['output_file_directory'] = exe_dir + output_dict['bricc_output'] = bricc_output + return output_dict diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py new file mode 100644 index 0000000000..c9dfbb5623 --- /dev/null +++ b/tests/test_ensdf_processing.py @@ -0,0 +1,96 @@ +import os, filecmp, numpy, shutil +import nose +from nose.plugins.skip import Skip, SkipTest +import pyne +from pyne import ensdf_processing + +tmp_path = 'ensdf_processing/tmp' + +def test_alphad(): + create_tmp() + input_dict = {} + input_dict['input_file'] = 'ensdf_processing/alphad/ref_a228.ens' + input_dict['report_file'] = tmp_path + '/tmp_alphad.rpt' + input_dict['rewrite_input_with_hinderance_factor'] = 1 + input_dict['output_file'] = tmp_path + '/tmp_alphad.out' + output_dict = ensdf_processing.alphad(input_dict) + exceptions = [[2, 'DATE RUN']] + file_comp(input_dict['report_file'],'ensdf_processing/alphad/ref_a228.ens.alphad.rpt', exceptions) + cleanup_tmp() + +def test_bricc(): + create_tmp() + input_dict = {} + input_dict['input_line'] = '44' + output_dict = ensdf_processing.bricc(input_dict) + bricc_out_tmp = tmp_path + '/tmp_bricc_out.out' + bricc_out_ref = 'ensdf_processing/bricc/ref_bricc_44.out' + bricc_outfile = open(tmp_path + '/tmp_bricc_out.out', 'w+') + bricc_outfile.write(output_dict['bricc_output']) + file_comp(bricc_out_tmp, bricc_out_ref,[]) + cleanup_tmp() + +def create_tmp(): + if not os.path.exists(tmp_path): + os.makedirs(tmp_path) + +def cleanup_tmp(): + shutil.rmtree(tmp_path) + +def file_comp(file_out, file_ref, exceptions): + ''' + xceptions format: [type, options] + type 1: prefix of length n. + options: 'prefix'. + type 2: general line ignore. + options: 'prefix' + type 3: minor precision issue ignore. + options: line number of line with potential precision issue. + type 4: carriage return vs. non standard return type. + options: line number of return. + ''' + f_out = open(file_out, 'r') + f_ref = open(file_ref, 'r') + diff_lines = numpy.array([]) + line_num = 0 + for line_out in f_out: + line_ref = f_ref.readline() + if(line_ref != line_out): + ignore = False + for i in range(0, len(exceptions)): + if exceptions[i][0] == 1: + if line_out[0:len(exceptions[i][1])] == exceptions[i][1]: + ignore = True + elif exceptions[i][0] == 2: + if exceptions[i][1] in line_out: + ignore = True + elif exceptions[i][0] == 3: + # ignores select lines to allow for tolerable differences in output precision + if exceptions[i][1] == line_num: + ignore = True + elif exceptions[i][0] == 4: + if len(line_ref[:-1]) == len(line_out): + # special exception for lines with possible carriage return instead of standard line feed return + if line_ref[:-2] == line_out[:-1]: + if map(bin,bytearray(line_ref[len(line_ref)-1])) == map(bin,bytearray(line_out[len(line_out)-1])): + ignore = True + if not ignore: + raise Exception('ENSDF Processing: Incorrect output generated, file: ' + file_ref) + #print 'difference found %i', line_num + #print ' line_out is: ' + line_out + #print ' line_ref is: ' + line_ref + #print len(line_out) + #print len(line_ref) + #diff_lines = numpy.append(diff_lines, line_num) + line_num = line_num + 1 + f_out.close() + f_ref.close() + diff_dict = {} + diff_dict['differences_lines'] = diff_lines + return diff_dict + +# nose.runmodule() +if __name__ == "__main__": + alphad = test_alphad() + bricc = test_bricc() + From 2b5bad5bbc5278d1c3d678729bb0fefae6b28a65 Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 4 Jan 2016 15:57:01 -0800 Subject: [PATCH 042/216] Added bricc test file reference output --- tests/ensdf_processing/bricc/ref_bricc_44.out | 1 + 1 file changed, 1 insertion(+) create mode 100644 tests/ensdf_processing/bricc/ref_bricc_44.out diff --git a/tests/ensdf_processing/bricc/ref_bricc_44.out b/tests/ensdf_processing/bricc/ref_bricc_44.out new file mode 100644 index 0000000000..e68a2fada3 --- /dev/null +++ b/tests/ensdf_processing/bricc/ref_bricc_44.out @@ -0,0 +1 @@ + BrIcc v2.3b (16-Dec-2014) calculates conversion coefficients\n (for electron conversion and pair production)\n and E0 electronic factors\n using cubic spline interpolation\n--------------------------------------------------------------------------------------------------------------------\nZ= 70 Ytterbium Transition energy: 279.717 keV BrIcc v2.3b (16-Dec-2014) \n Conversion Coefficient Data Table: BrIccFO\nShell E_e [keV] E1 M1 E2 M2 E3 M3 E4 M4 E5 M5\n--------------------------------------------------------------------------------------------------------------------\nTot 2.367E-02 1.901E-01 9.151E-02 8.110E-01 4.258E-01 3.015E+00 2.267E+00 1.179E+01 1.251E+01 4.967E+01\nK 218.38 1.989E-02 1.593E-01 6.401E-02 6.437E-01 1.910E-01 2.138E+00 5.694E-01 6.979E+00 1.741E+00 2.279E+01\nL-tot 2.946E-03 2.393E-02 2.115E-02 1.292E-01 1.787E-01 6.694E-01 1.279E+00 3.622E+00 8.019E+00 1.995E+01\nM-tot 6.561E-04 5.351E-03 5.038E-03 2.999E-02 4.463E-02 1.637E-01 3.323E-01 9.367E-01 2.182E+00 5.468E+00\nN-tot 1.526E-04 1.257E-03 1.161E-03 7.067E-03 1.028E-02 3.862E-02 7.675E-02 2.212E-01 5.061E-01 1.294E+00\nO-tot 2.109E-05 1.799E-04 1.447E-04 9.933E-04 1.223E-03 5.205E-03 8.903E-03 2.841E-02 5.697E-02 1.584E-01\nP-tot 1.001E-06 9.639E-06 3.226E-06 4.933E-05 1.179E-05 2.169E-04 5.326E-05 9.480E-04 2.740E-04 4.167E-03\nTranEner|ChemSymb|Z+Integer|SUBShell|DATAtable|? for help|EXIT [279.717] > --------------------------------------------------------------------------------------------------------------------\nZ= 70 Ytterbium Transition energy: 44 keV BrIcc v2.3b (16-Dec-2014) \n Conversion Coefficient Data Table: BrIccFO\nShell E_e [keV] E1 M1 E2 M2 E3 M3 E4 M4 E5 M5\n--------------------------------------------------------------------------------------------------------------------\nTot 5.831E-01 6.097E+00 1.117E+02 3.089E+02 7.319E+03 1.671E+04 2.562E+05 6.537E+05 7.526E+06 2.080E+07\nL-tot 4.543E-01 4.747E+00 8.536E+01 2.343E+02 5.410E+03 1.222E+04 1.708E+05 4.465E+05 4.106E+06 1.273E+07\nM-tot 1.026E-01 1.064E+00 2.102E+01 5.868E+01 1.519E+03 3.547E+03 6.787E+04 1.634E+05 2.720E+06 6.339E+06\nN-tot 2.324E-02 2.496E-01 4.775E+00 1.390E+01 3.516E+02 8.424E+02 1.607E+04 3.965E+04 6.603E+05 1.585E+06\nO-tot 2.820E-03 3.561E-02 5.371E-01 1.869E+00 3.794E+01 9.961E+01 1.391E+03 4.191E+03 3.953E+04 1.465E+05\nP-tot 8.814E-05 1.890E-03 2.886E-04 7.888E-02 2.448E-02 1.895E+00 1.007E+00 4.083E+01 2.793E+01 8.592E+02\nTranEner|ChemSymb|Z+Integer|SUBShell|DATAtable|? for help|EXIT [44] > ', 'input_line': '44', 'output_file_directory': '/home/josh/anaconda/lib/python2.7/site-packages/pyne-0.5.0_rc1-py2.7.egg/pyne/ From 4265e3a7732a4ea4cb4a5fbcf276f12755b629e9 Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 4 Jan 2016 16:00:10 -0800 Subject: [PATCH 043/216] Fixed incorrect indentation in setup.py and added nsdflib95.f for ensdf-processing module --- setup.py | 2 +- src/ensdf_processing/nsdflib95.f | 3781 ++++++++++++++++++++++++++++++ 2 files changed, 3782 insertions(+), 1 deletion(-) create mode 100644 src/ensdf_processing/nsdflib95.f diff --git a/setup.py b/setup.py index 0448a842cb..1e196593ec 100755 --- a/setup.py +++ b/setup.py @@ -436,7 +436,7 @@ def main(): _, pynepath, _ = imp.find_module('pyne', pypath) except ImportError: pynepath = "${HOME}/.local/python2.7/site-packages" - copy_ensdf_executables(pynepath) + copy_ensdf_executables(pynepath) libpath = abspath(joinpath(pynepath, '..', '..', '..')) binpath = abspath(joinpath(libpath, '..', 'bin')) msg = ("\nNOTE: If you have not done so already, please be sure that your PATH and " diff --git a/src/ensdf_processing/nsdflib95.f b/src/ensdf_processing/nsdflib95.f new file mode 100644 index 0000000000..d1d78b38d0 --- /dev/null +++ b/src/ensdf_processing/nsdflib95.f @@ -0,0 +1,3781 @@ +! NNDCLIB FORTRAN UTILITY SUBROUTINE PACKAGE +! +! C.L.DUNFORD January 23, 2004 +! +!*********************************************************************** +! +! VERSION 1 AS OF 8-JUL-92. COMBINED F77STR V4(10), NSDCNV V2(3), +! AND NSDMTH V1(0). +! 1.1 23-FEB-93. 1. Finished typing all variables +! 2. Delinted +! 3. Avoided possible compiler problems +! with DO loop variables in BREAK, +! SPAN, and INTSCN +! 4. Corrected TYPSTR: +! Was not allowing leading blanks as +! per documentation for FORTRAN +! numbers +! Worked around AIX XL FORTRAN +! "enhancement" which ignored error +! branch in test for FORTRAN numbers +! 5. Corrected RLSCN and DRLSCN: Not +! allowing for a real number not +! followed by an exponent +! 1.2 01-Apr-93. Corrected RLSCN and DRLSCN - Attempt to +! divide by zero when period but no +! decimal fraction +! 1.3 31-Aug-94. Corrected NUMSTR - No check on integer +! being larger than string +! 1.4 09-Feb-95. 1. Corrected CNVU2S +! Format 2 was not working as designed. +! Corrected this. Also, LENDX now +! to specify number of significant +! digits. +! Integer overflow errors for extremely +! precise numbers - added check for +! this. +! 2. Added Logical Function IOVRFLW to +! check for possible integer overflow. +! 3. Corrected KNVIX. Increased TEMP from +! 12 to 20 characters to avoid +! truncation of final result. +! 4. Corrected SCALX. Roundoff problem due +! to mixture of REAL*4 and REAL*8 in +! line 20. +! 1.4a 10-Feb-95. Corrected line 11 of IOVRFLW for +! compiler-dependent problem and lines +! 10 and 11 for FORTRAN-dependent +! double precision problems +! 1.4b 13-Feb-95. Corrected line 11 of IOVRFLW for +! compiler-dependent problem +! 1.4c 04-Apr-95. Corrected line 11 of IOVRFLW for typo +! error +! 1.4d 03-Nov-95. Corrected error in RLSCN and DRLSCN when +! there was a trailing period. +! 1.4e 01-Mar-96 Incorrect results returned in RLSCN and +! DRLSCN when a period followed by one +! number - Fixed +! 1.5 11-Aug-98 Modified ZSYM and IZEL to handle IUPAC +! chemical symbols between Z=104 and 109 +! inclusive. Extended allowed range of +! Z's from 112 to 199. +! 1.5a 16-Sep-98 Corrected error in IZEL when mixed +! alphanumeric symbol (e.g. "1S") passed +! to it. +! 1.5b 08-Oct-98 Changed IOVRFLW to IVRFLW for ANSI +! standard considerations +! 1.5c 14-Apr-99 Modified ZSYM/IZEL for change in the +! neutron chemical symbol from "N " to +! "NN" +! 1.5d 28-Jun-99 Corrected fatal error in CNVS2U when +! the single character "E" was passed +! 1.6 08-Apr-2003 Combined NSDFLIB and parts of VAXUTL +! to be migrated to new UNIX system +! including SORT +! Converted to Fortran-95 +! 1.6a 30-Oct-2003 Replaced unix specific SORT with a +! Fortran SORT based on Bruce Barton's old +! sort package +! 1.6b 14-Nov-2003 Upgraded SORT to handle formatted and +! unformatted, sequential and random access +! input files. Fully replaces old VMS +! system sort. +! 1.6c 19-Nov-2003 Added Darmstadtium to zsym +! Added TRANSNUC subroutine +! 1.6d 23-Jan-2004 Restored IZEL message option +! Added upper case function UPCASE and +! lower case function LOCASE +! 1.6e 26-Jan-2005 Added new element symbol for 111, RG +! 1.6f 07-Oct-2005 Corrected the following for platform +! dependent precision problems: +! 1. CNVS2U (PNPI) +! 2. RLSCN (Paul Davidson. ANU) +! 1.6g 14-Oct-2005 Corrected problem in KNVIX apparently +! caused by conversion from F77 to F95 +! +!*********************************************************************** +! * +! REFER ALL COMMENTS AND INQUIRIES TO * +! NATIONAL NUCLEAR DATA CENTER * +! BUILDING 197D * +! BROOKHAVEN NATIONAL LABORATORY * +! UPTON, NEW YORK 11973 * +! TELEPHONE 631-344-2902 * +! * +!*********************************************************************** +! + SUBROUTINE UPSTR(String) +! +! ROUTINE TO CONVERT A STRING TO ALL UPPER CASE +! +! STRING - CHARACTER STRING TO BE CONVERTED +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: String +! +! Local variables +! + CHARACTER(LEN=1),INTRINSIC :: CHAR + INTEGER(KIND=4) :: i,ic,l + INTEGER(KIND=4),INTRINSIC :: ICHAR + INTEGER(KIND=4),INTRINSIC :: LEN_TRIM +! + l = LEN_TRIM(String) + DO i = 1,l + ic = ICHAR(String(i:i)) + IF(ic.GT.96.AND.ic.LT.123)String(i:i) = CHAR(ic-32) + END DO +! + RETURN + END SUBROUTINE UPSTR +! +!*********************************************************************** +! + SUBROUTINE LOSTR(String) +! +! ROUTINE TO CONVERT A STRING TO ALL LOWER CASE +! +! STRING - CHARACTER STRING TO BE CONVERTED +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: String +! +! Functions used +! + CHARACTER(LEN=1),INTRINSIC :: CHAR + INTEGER(KIND=4),INTRINSIC :: ICHAR,LEN_TRIM +! +! Local variables +! + INTEGER(KIND=4) :: i,ic,l +! + l = LEN_TRIM(String) + DO i = 1,l + ic = ICHAR(String(i:i)) + IF(ic.GT.64.AND.ic.LT.91)String(i:i) = CHAR(ic+32) + END DO +! + RETURN + END SUBROUTINE LOSTR +! +!*********************************************************************** +! + CHARACTER(LEN=*) FUNCTION UPCASE(String) +! +! ROUTINE TO CONVERT A STRING TO ALL UPPER CASE +! +! STRING - CHARACTER STRING TO BE CONVERTED +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: String +! +! Functions used +! + CHARACTER(LEN=1),INTRINSIC :: CHAR + INTEGER(KIND=4),INTRINSIC :: ICHAR,LEN_TRIM +! +! Local variables +! + INTEGER(KIND=4) :: i,ic,l +! + l = LEN_TRIM(String) + UPCASE = STRING + DO i = 1,l + ic = ICHAR(String(i:i)) + IF(ic.GT.96.AND.ic.LT.123) UPCASE(i:i) = CHAR(ic-32) + END DO +! + RETURN + END FUNCTION UPCASE +! +!*********************************************************************** +! + CHARACTER(LEN=*) FUNCTION LOCASE(String) +! +! ROUTINE TO CONVERT A STRING TO ALL LOWER CASE +! +! STRING - CHARACTER STRING TO BE CONVERTED +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: String +! +! Functions used +! + CHARACTER(LEN=1),INTRINSIC :: CHAR + INTEGER(KIND=4),INTRINSIC :: ICHAR,LEN_TRIM +! +! Local variables +! + INTEGER(KIND=4) :: i,ic,l +! + l = LEN_TRIM(String) + LOCASE = STRING + DO i = 1,l + ic = ICHAR(String(i:i)) + IF(ic.GT.64.AND.ic.LT.91) LOCASE(i:i) = CHAR(ic+32) + END DO +! + RETURN + END FUNCTION LOCASE +! +!*********************************************************************** +! + INTEGER(KIND=4) FUNCTION KSEARCH(String,Delim,Idnum) +! +! ROUTINE TO RETURN THE N-TH OCCURRENCE OF A DELIMITER IN A STRING +! +! STRING - CHARACTER STRING TO BE ANALYZED +! DELIM - CHARACTER STRING TO BE CONSIDERED AS A DELIMITER +! IDNUM - DESIRED OCCURRENCE OF THE DELIMITER +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Delim,String + INTEGER(KIND=4) :: Idnum +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX, LEN_TRIM +! +! Local variables +! + INTEGER(KIND=4) :: i,ibeg,idelp,ilen,jlen + CHARACTER(LEN=6500) :: str +! +! INITIALIZE +! + KSEARCH = 0 +! +! EXIT IF NOT A POSITIVE NUMBER +! + IF(Idnum.GT.0) THEN +! +! SET UP LENGTHS OF STRINGS +! + ilen = LEN_TRIM(String) + IF(ilen.NE.0) THEN + jlen = LEN_TRIM(Delim) +! +! PUT A DELIMITER AT THE END OF THE STRING IF IT IS NOT THERE +! + IF(String(ilen-jlen+1:ilen).EQ.Delim) THEN + str = String + ilen = ilen - jlen + ELSE + str = String(1:ilen)//Delim + END IF +! +! FIND IDNUM-TH DELIMITER +! + ibeg = 1 + DO i = 1,Idnum + idelp = INDEX(str(ibeg:),Delim) + IF(idelp.EQ.0) GO TO 5 + idelp = idelp + ibeg - 1 + ibeg = idelp + jlen + IF(ibeg.GT.ilen) GO TO 5 + END DO + KSEARCH = idelp + END IF + GO TO 10 +! +! END OF STRING ENCOUNTERED +! + 5 IF(i.EQ.Idnum)KSEARCH = ilen + 1 + END IF +! + 10 RETURN + END FUNCTION KSEARCH +! +!*********************************************************************** +! + SUBROUTINE TOKEN(Instr,Delim,Itok,Outstr) +! +! SUBROUTINE TO EXTRACT A DELIMITED SUB-STRING FROM A STRING +! +! INSTR - CHARACTER STRING TO BE ANALYZED +! DELIM - CHARACTER STRING TO BE CONSIDERED AS A DELIMITER +! ITOK - ITOK-TH DELIMITED SUB-STRING DESIRED +! OUTSTR - SUB-STRING EXTRACTED AND RETURNED +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Delim,Instr,Outstr + INTEGER(KIND=4) :: Itok,Nstr +! +! Functions used +! + INTEGER(KIND=4),INTRINSIC :: LEN_TRIM + INTEGER(KIND=4),EXTERNAL :: KSEARCH +! +! Local variables +! + INTEGER(KIND=4) :: ibeg,iend,ipath,jlen +! + ipath = 1 + GO TO 10 +! + ENTRY TOKENL(Instr,Delim,Itok,Outstr,Nstr) +! + ipath = 2 + Nstr = 0 +! +! ANALYZE SUBSTRING REQUEST +! + 10 Outstr = ' ' + jlen = LEN_TRIM(Delim) +! +! FIND ITOK-TH DELIMITER +! + iend = KSEARCH(Instr,Delim,Itok) - 1 + IF(iend.NE.-1) THEN + IF(Itok.EQ.1) THEN + ibeg = 1 + ELSE + ibeg = KSEARCH(Instr,Delim,Itok-1) + jlen + END IF +! +! EXTRACT TOKEN +! + Outstr = Instr(ibeg:iend) + IF(ipath.EQ.2)CALL SCOUNT(Outstr,Nstr) + END IF +! + RETURN + END SUBROUTINE TOKEN +! +!*********************************************************************** +! + SUBROUTINE GET_COMMAND_LINE(Delim,Carray,Npar) +! +! Checks for command line input and parses it +! + IMPLICIT NONE +! +! Dummy variables +! + CHARACTER(LEN=*), DIMENSION(*) :: Carray + CHARACTER(LEN=1) :: Delim + INTEGER(KIND=4) :: Npar +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM, INDEX +! +! Local variables +! + CHARACTER(LEN=256) :: cline + INTEGER(KIND=4) :: ilent, isw, n +! + DO n=1,Npar + Carray(n) = ' ' + END DO + Npar = 0 + ilent = 0 + cline = ' ' +! +!+++MDC+++ +!...VMS +!/ CALL LIB$GET_FOREIGN(cline,,ilent) +!...UNX +!/ CALL GETCL(cline) +!/ ilent = LEN_TRIM(cline) +!...DVF +!/ CALL GETARG(1,cline) +!/ ilent = LEN_TRIM(cline) +!---MDC--- +! + DO WHILE (cline.NE.' ') + CALL LBSUP(cline) + ilent = LEN_TRIM(cline) + isw = INDEX(cline,Delim) + Npar = Npar + 1 + IF(isw.EQ.0) isw = ilent + 1 + IF(isw.GT.0) Carray(npar) = cline(1:isw-1) + cline = cline(isw+1:) + END DO +! +!+++MDC+++ +!...DVF +!/ IF(Delim.EQ.' ') THEN +!/ DO WHILE (.TRUE.) +!/ CALL GETARG(npar+1,cline) +!/ IF(cline.EQ.' ') EXIT +!/ Npar = Npar + 1 +!/ Carray(npar) = cline +!/ END DO +!/ END IF +!---MDC--- +! + RETURN + END SUBROUTINE GET_COMMAND_LINE +! +!*********************************************************************** +! + SUBROUTINE DELETE_FILE(Dfile) +! +! MACHINE INDEPENDENT ROUTINE TO DELETE A FILE +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Dfile +! + DO WHILE (.TRUE.) + OPEN(UNIT=69,FILE=Dfile,STATUS='OLD',ERR=10) + CLOSE(UNIT=69,STATUS='DELETE') + END DO +! + 10 RETURN + END SUBROUTINE DELETE_FILE +! +!*********************************************************************** +! + SUBROUTINE SCOUNT(String,Lstring) +! +! ROUTINE TO COUNT TO LAST NON BLANK CHARACTER +! +! STRING - CHARACTER STRING TO BE ANALYZED +! LSTRING - LOCATION OF THE LAST NONBALNK CHARACTER IN THE STRING +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Lstring + CHARACTER(LEN=*) :: String +! +! Functions used +! + CHARACTER(LEN=1), INTRINSIC :: CHAR + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM +! +! Local variables +! + INTEGER(KIND=4) :: n + CHARACTER(LEN=1), PARAMETER :: NULL = CHAR(0) +! + DO n=1,LEN_TRIM(String) + IF(String(n:n).EQ.NULL) String(n:n) = ' ' + END DO + Lstring = LEN_TRIM(String) +! + RETURN + END SUBROUTINE SCOUNT +! +!*********************************************************************** +! + FUNCTION LSTRING(String) +! +! ROUTINE TO RETURN THE LAST NON BLANK CHARACTER IN A STRING +! +! STRING - CHARACTER STRING TO BE ANALYZED +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: LSTRING + CHARACTER(LEN=*) :: String +! +! Functions used +! + INTEGER(KIND=4),INTRINSIC :: LEN_TRIM +! + LSTRING = LEN_TRIM(String) +! + RETURN + END FUNCTION LSTRING +! +!*********************************************************************** +! + FUNCTION LENSTR(String) +! +! COMPUTE LENGTH OF TEXT WITHIN STRING EXCLUSIVE OF TRAILING BLANK +! OR NULL CHARACTERS (I.E., VARIABLE LENGTH STRINGS WHICH EXIST +! WITHIN A FIXED LENGTH STRING AREA). +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: LENSTR + CHARACTER(LEN=*) :: String +! +! Functions used +! + INTEGER(KIND=4),INTRINSIC :: LEN_TRIM +! + LENSTR = LEN_TRIM(String) +! + RETURN + END FUNCTION LENSTR +! +!*********************************************************************** +! + SUBROUTINE REPCHR(Str,From,To) +! +! SCAN STR FOR AN OCCURRENCE OF ANY CHARACTER IN STRING FROM. REPLACE +! THAT CHARACTER WITH THE CORRESPONDING CHARACTER FROM STRING TO. +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: From,Str,To +! +! Local variables +! + INTEGER(KIND=4),EXTERNAL :: BREAK + INTEGER(KIND=4) :: i,j + INTEGER(KIND=4),INTRINSIC :: INDEX,LEN +! + i = 0 + DO WHILE (.TRUE.) + i = BREAK(Str,i+1,From) + IF(i.GT.LEN(Str))RETURN + j = INDEX(From,Str(i:i)) + Str(i:i) = To(j:j) + END DO +! +!************************************************************************* +! + END SUBROUTINE REPCHR +! + SUBROUTINE REPSTR(Str,From,To) +! +! REPLACE OCCURRENCES OF THE STRING FROM WHICH OCCUR IN THE STRING STR +! WITH THE STRING TO. IF TO = CHAR(0) (NULL) THEN JUST DELETE FROM. +! +! 02-mar-90. Modified to avoid infinite loop when TO string contains +! FROM string. TWB +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: From,Str,To +! +! Local variables +! + CHARACTER(LEN=1),INTRINSIC :: CHAR + INTEGER(KIND=4) :: i,j + INTEGER(KIND=4),EXTERNAL :: INDEXF + INTEGER(KIND=4),INTRINSIC :: LEN +! + j = 1 + DO WHILE (.TRUE.) + i = INDEXF(Str,j,From) + IF(i.EQ.0)RETURN + j = i + CALL DELSTR(Str,i,LEN(From)) + IF(To.NE.CHAR(0)) THEN + CALL ADDSTR(Str,i,To) + j = i + LEN(To) + IF(j.GT.LEN(Str))RETURN + END IF + END DO + END SUBROUTINE REPSTR +! +!*********************************************************************** +! + SUBROUTINE ADDSTR(String,Pos,New) +! +! ADD NEW TEXT TO STRING STARTING AT POSITION POS, EXTENDING RIGHT +! HAND SEGMENT FURTHER TO THE RIGHT WITH TRUNCATION OF EXCESS +! CHARACTERS. +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: New,String + INTEGER(KIND=4) :: Pos +! +! Local variables +! + INTEGER(KIND=4) :: i,l,ln + INTEGER(KIND=4),INTRINSIC :: LEN +! + l = LEN(String) + ln = LEN(New) + IF(Pos.LT.1.OR.l.LT.Pos)RETURN + l = l - (Pos-1) - ln + IF(l.LE.0) THEN + String(Pos:) = New + ELSE + DO i = LEN(String),Pos + ln, - 1 + String(i:i) = String(i-ln:i-ln) + END DO + String(Pos:Pos+ln-1) = New + END IF + END SUBROUTINE ADDSTR +! +!*********************************************************************** +! + SUBROUTINE DELSTR(String,Pos,Size) +! +! DELETE SIZE CHARACTERS FROM STRING STARTING AT POSITION POS. +! FILL AT RIGHT WITH TRAILING BLANKS. +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Pos,Size + CHARACTER(LEN=*) :: String +! +! Local variables +! + INTEGER(KIND=4) :: i,l + INTEGER(KIND=4),INTRINSIC :: LEN +! + l = LEN(String) + IF(Pos.LT.1.OR.l.LT.Pos)RETURN + l = l - (Pos-1) - Size + IF(l.LE.0) THEN + String(Pos:) = ' ' + ELSE + DO i = Pos,LEN(String) - Size + String(i:i) = String(i+Size:i+Size) + END DO + String(LEN(String)-Size+1:) = ' ' + END IF + END SUBROUTINE DELSTR +! +!*********************************************************************** +! + SUBROUTINE SUPBLANK(String,Nc) +! +! ROUTINE TO REMOVE ALL BLANKS FROM A STRING +! +! STRING - CHARACTER STRING TO BE MODIFIED +! NC - NUMBER OF CHARACTERS IN THE STRING AFTER SUPPRESSION +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Nc + CHARACTER(LEN=*) :: String +! +! Local variables +! + INTEGER(KIND=4),INTRINSIC :: LEN_TRIM +! + Nc = 0 + IF(String.NE.' ') THEN +! + CALL SQZSTR(String,' ') + Nc = LEN_TRIM(String) + END IF +! + RETURN + END SUBROUTINE SUPBLANK +! +!*********************************************************************** +! + SUBROUTINE SQZSTR(String,Achar) +! +! SQUEEZE OUT ALL OCCURRENCES OF CHAR FROM STRING. +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=1) :: Achar + CHARACTER(LEN=*) :: String +! +! Local variables +! + INTEGER(KIND=4) :: from,to + INTEGER(KIND=4),INTRINSIC :: LEN +! + to = 1 + DO from = 1,LEN(String) + IF(String(from:from).NE.Achar) THEN + IF(to.NE.from)String(to:to) = String(from:from) + to = to + 1 + END IF + END DO + IF(to.EQ.from)RETURN + String(to:) = ' ' + END SUBROUTINE SQZSTR +! +!*********************************************************************** +! + FUNCTION INDEXF(String,Pos,Sub) +! +! SAME AS THE STANDARD FUNCTION INDEX EXCEPT THE THE SCAN STARTS AT +! POSITION POS INSTEAD OF POSITION 1. STRING WILL BE SEARCHED FOR THE +! FIRST OCCURRANCE OF SUB AT OR AFTER POS. THE POSITION OF THE FIRST +! CHARACTER OF SUB IN STRING WILL BE RETURNED, OR ELSE ZERO (0) WILL +! BE RETURNED. +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: INDEXF + INTEGER(KIND=4) :: Pos + CHARACTER(LEN=*) :: String,Sub +! +! Local variables +! + INTEGER(KIND=4),INTRINSIC :: INDEX,LEN +! +! TEST THAT POS IS IN RANGE. +! + INDEXF = 0 + IF(Pos.LT.1.OR.LEN(String).LT.Pos)RETURN +! +! USE INDEX WITH SUB-STRING AND OFFSET. +! + INDEXF = INDEX(String(Pos:),Sub) + IF(INDEXF.NE.0)INDEXF = INDEXF + Pos - 1 + END FUNCTION INDEXF +! +!*********************************************************************** +! + FUNCTION BREAK(String,Pos,Brkstr) +! +! SCANS STRING LOOKING FOR THE FIRST OCCURRENCE OF A CHARACTER (THE +! BREAK CHARACTER) WHICH IS IN THE BREAK STRING. +! +! SCANNING BEGINS AT THE POSITION SPECIFIED BY POS AND CONTINUES TO +! THE END OF THE STRING. +! +! THE FUNCTION VALUE IS SET TO THE POSITION WITHIN THE STRING WHERE +! THE BREAK CHARACTER IS FOUND. +! +! IF THERE IS NO BREAK CHARACTER IN THE STRING, THE FUNCTION VALUE IS +! SET TO THE LENGTH OF THE STRING PLUS ONE. +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: BREAK + CHARACTER(LEN=*) :: Brkstr,String + INTEGER(KIND=4) :: Pos +! +! Local variables +! + INTEGER(KIND=4) :: b,i,lbrk,lstr + INTEGER(KIND=4),INTRINSIC :: LEN +! +! SCAN FOR BREAK CHARACTER (IN BRKSTR). +! + BREAK = Pos + lstr = LEN(String) + IF(Pos.LT.1.OR.lstr.LT.Pos)RETURN + lbrk = LEN(Brkstr) + DO b = Pos,lstr + DO i = 1,lbrk + IF(String(b:b).EQ.Brkstr(i:i)) THEN + BREAK = b + RETURN + END IF + END DO + END DO +! Changed from BREAK = B to avoid possible compiler dependences +! (TWB. 930223) + BREAK = lstr + 1 + END FUNCTION BREAK +! +!*********************************************************************** +! + FUNCTION SPAN(String,Pos,Spnstr) +! +! SCANS STRING LOOKING FOR THE FIRST OCCURRENCE OF A CHARACTER (THE +! BREAK CHARACTER) WHICH IS NOT IN THE SPAN STRING. +! +! SCANNING BEGINS AT THE POSITION SPECIFIED BY POS AND CONTINUES TO +! THE END OF THE STRING. +! +! THE FUNCTION VALUE IS SET TO THE POSITION WITHIN THE STRING WHERE +! THE BREAK CHARACTER IS FOUND. +! +! IF THERE IS NO BREAK CHARACTER IN THE STRING, THE FUNCTION VALUE IS +! SET TO THE LENGTH OF THE STRING PLUS ONE. +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Pos + INTEGER(KIND=4) :: SPAN + CHARACTER(LEN=*) :: Spnstr,String +! +! Local variables +! + INTEGER(KIND=4) :: i,lspn,lstr,s + INTEGER(KIND=4),INTRINSIC :: LEN +! +! SCAN FOR BREAK CHARACTER (NOT IN SPNSTR). +! + SPAN = Pos + lstr = LEN(String) + IF(Pos.LT.1.OR.lstr.LT.Pos)RETURN + lspn = LEN(Spnstr) + DO s = Pos,lstr + DO i = 1,lspn + IF(String(s:s).EQ.Spnstr(i:i)) GO TO 10 + END DO + SPAN = s + RETURN + 10 END DO +! Changed from SPAN + S to avoid possible compiler dependences +! (TWB. 930223) + SPAN = lstr + 1 + END FUNCTION SPAN +! +!*********************************************************************** +! + FUNCTION VALSTR(String) +! +! VALUE OF LEADING REAL NUMERIC STRING. +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: String + REAL(KIND=4) :: VALSTR +! +! Local variables +! + INTEGER(KIND=4) :: i + INTEGER(KIND=4),EXTERNAL :: RLSCN + REAL(KIND=4) :: v +! + i = RLSCN(String,1,v) + VALSTR = v +! + RETURN + END FUNCTION VALSTR +! +!*********************************************************************** +! + FUNCTION DVALST(String) +! +! VALUE OF LEADING REAL NUMERIC STRING IN DOUBLE PRECISION. +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=8) :: DVALST + CHARACTER(LEN=*) :: String +! +! Local variables +! + INTEGER(KIND=4),EXTERNAL :: DRLSCN + INTEGER(KIND=4) :: i + REAL(KIND=8) :: v +! + i = DRLSCN(String,1,v) + DVALST = v +! + RETURN + END FUNCTION DVALST +! +!*********************************************************************** +! + FUNCTION RLSCN(String,Pos,Value) +! +! SCANS STRING LOOKING FOR THE LEADING REAL NUMERIC STRING. +! +! SCANNING BEGINS AT THE POSITION SPECIFIED BY POS AND CONTINUES TO +! THE END OF THE STRING. +! +! LEADING BLANKS ARE IGNORED. +! +! THE NUMERIC STRING MUST HAVE THE FORM: +! +! [SIGN] D+ ['.' D*] ['E' [SIGN] D+] OR +! [SIGN] '.' D+ ['E' [SIGN] D+] +! +! WHERE SIGN IS '+' OR '-', +! D* IS ZERO OR MORE DIGITS, +! D+ IS ONE OR MORE DIGITS, +! '.' AND 'E' ARE LITERAL (ALSO ACCEPT LOWER CASE 'E'), +! BRACKETS [, ] DELIMIT OPTIONAL SEQUENCES. +! +! VALUE IS SET TO THE NUMERIC VALUE OF THE STRING. +! +! THE FUNCTION VALUE IS SET TO THE POSITION WITHIN THE STRING WHERE +! THE NUMERIC STRING ENDS PLUS ONE (I.E., THE BREAK CHARACTER). +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Pos + INTEGER(KIND=4) :: RLSCN + CHARACTER(LEN=*) :: String + REAL(KIND=4) :: Value +! +! Local variables +! + INTEGER(KIND=4) :: fract,intg,kfract,pmsign,power,ptr + INTEGER(KIND=4),EXTERNAL :: INTSCN,LENSTR + INTEGER(KIND=4),INTRINSIC :: LEN +! +! CHECK POS. +! + RLSCN = Pos + Value = 0.0 + IF(Pos.LT.1.OR.LEN(String).LT.Pos)RETURN +! +! SET UP WORKING VARIABLES. +! + intg = 0 + fract = 0 + kfract = 0 + power = 0 + DO WHILE (.TRUE.) +! +! SKIP LEADING BLANKS. +! + IF(String(RLSCN:RLSCN).EQ.' ') THEN + RLSCN = RLSCN + 1 + IF(RLSCN.GT.LEN(String))RETURN + CYCLE + END IF +! +! LOOK FOR SIGN. +! NOTE: SEPARATE CHECK FOR SIGN SINCE INTEGER PART MAY BE OMITTED. +! + pmsign = 0 + IF(String(RLSCN:RLSCN).EQ.'+') THEN + pmsign = +1 + ELSE IF(String(RLSCN:RLSCN).EQ.'-') THEN + pmsign = -1 + END IF + IF(pmsign.NE.0)RLSCN = RLSCN + 1 +! +! LOOK FOR INTEGER PART. +! + RLSCN = INTSCN(String,RLSCN,.FALSE.,intg) +! +! LOOK FOR FRACTION PART. +! + IF(RLSCN.LE.LEN(String)) THEN + IF(RLSCN.GT.Pos+ABS(pmsign)) THEN +! DETERMINE IF FIRST FORM OR SECOND FORM. +! HANDLE FIRST FORM: D+ ['.' D*] + IF(String(RLSCN:RLSCN).EQ.'.') THEN + RLSCN = RLSCN + 1 + IF(RLSCN.LE.LENSTR(String)) THEN + IF(String(RLSCN:RLSCN).NE.' ') THEN + ptr = INTSCN(String,RLSCN,.FALSE.,fract) + kfract = ptr - RLSCN + RLSCN = ptr + END IF + END IF + END IF +! HANDLE SECOND FORM: '.' D+ + ELSE IF(String(RLSCN:RLSCN).NE.'.') THEN +! IF '.' MISSING, THEN WE HAVE NOTHING. + RLSCN = Pos + RETURN + ELSE + RLSCN = RLSCN + 1 + ptr = INTSCN(String,RLSCN,.FALSE.,fract) + kfract = ptr - RLSCN + IF(kfract.EQ.0) THEN +! IF FRACTION MISSING, THEN WE STILL HAVE NOTHING. + RLSCN = Pos + RETURN + ELSE + RLSCN = ptr + END IF + END IF +! +! LOOK FOR EXPONENT PART. +! + IF(RLSCN.LE.LEN(String)) THEN + IF(String(RLSCN:RLSCN).EQ.'E'.OR.String(RLSCN:RLSCN) & + & .EQ.'e') THEN + RLSCN = RLSCN + 1 + ptr = INTSCN(String,RLSCN,.TRUE.,power) + IF(ptr.EQ.RLSCN) THEN +! IF WE HAVE THE 'E' BUT NOTHING ELSE THEN WE ASSUME +! THAT THE 'E' IS A TERMINATOR (E.G., 5.3EV) AND +! RETURN WHAT WE HAVE SO FAR (E.G., 5.3). + RLSCN = RLSCN - 1 + Value = intg + fract/10.0**kfract + IF(pmsign.EQ.-1)Value = -Value + RETURN + ELSE + RLSCN = ptr + END IF + END IF + END IF + END IF +! +! COMPUTE REAL VALUE FROM ITS PARTS. +! + IF(kfract.NE.0) THEN + Value = (intg+fract/10.0D0**kfract)*10.0D0**power + ELSE + Value = intg*10.0D0**power + END IF + IF(pmsign.EQ.-1)Value = -Value + EXIT + END DO + RETURN + END FUNCTION RLSCN +! +!*********************************************************************** +! + FUNCTION DRLSCN(String,Pos,Value) +! +! SCANS STRING LOOKING FOR THE LEADING REAL NUMERIC STRING. +! SAME AS RLSCN, BUT VALUE IS A DOUBLE PRECISION NUMBER. +! +! SCANNING BEGINS AT THE POSITION SPECIFIED BY POS AND CONTINUES TO +! THE END OF THE STRING. +! +! LEADING BLANKS ARE IGNORED. +! +! THE NUMERIC STRING MUST HAVE THE FORM: +! +! [SIGN] D+ ['.' D*] ['E' [SIGN] D+] OR +! [SIGN] '.' D+ ['E' [SIGN] D+] +! +! WHERE SIGN IS '+' OR '-', +! D* IS ZERO OR MORE DIGITS, +! D+ IS ONE OR MORE DIGITS, +! '.' AND 'E' ARE LITERAL (ALSO ACCEPT LOWER CASE 'E'), +! BRACKETS [, ] DELIMIT OPTIONAL SEQUENCES. +! +! VALUE IS SET TO THE NUMERIC VALUE OF THE STRING. +! +! THE FUNCTION VALUE IS SET TO THE POSITION WITHIN THE STRING WHERE +! THE NUMERIC STRING ENDS PLUS ONE (I.E., THE BREAK CHARACTER). +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: DRLSCN + INTEGER(KIND=4) :: Pos + CHARACTER(LEN=*) :: String + REAL(KIND=8) :: Value +! +! Local variables +! + INTEGER(KIND=4) :: fract,intg,kfract,pmsign,power,ptr + INTEGER(KIND=4),EXTERNAL :: INTSCN,LENSTR + INTEGER(KIND=4),INTRINSIC :: LEN +! +! CHECK POS. +! + DRLSCN = Pos + Value = 0.0 + IF(Pos.LT.1.OR.LEN(String).LT.Pos)RETURN +! +! SET UP WORKING VARIABLES. +! + intg = 0 + fract = 0 + kfract = 0 + power = 0 + DO WHILE (.TRUE.) +! +! SKIP LEADING BLANKS. +! + IF(String(DRLSCN:DRLSCN).EQ.' ') THEN + DRLSCN = DRLSCN + 1 + IF(DRLSCN.GT.LEN(String))RETURN + CYCLE + END IF +! +! LOOK FOR SIGN. +! NOTE: SEPARATE CHECK FOR SIGN SINCE INTEGER PART MAY BE OMITTED. +! + pmsign = 0 + IF(String(DRLSCN:DRLSCN).EQ.'+') THEN + pmsign = +1 + ELSE IF(String(DRLSCN:DRLSCN).EQ.'-') THEN + pmsign = -1 + END IF + IF(pmsign.NE.0)DRLSCN = DRLSCN + 1 +! +! LOOK FOR INTEGER PART. +! + DRLSCN = INTSCN(String,DRLSCN,.FALSE.,intg) +! +! LOOK FOR FRACTION PART. +! + IF(DRLSCN.LE.LEN(String)) THEN + IF(DRLSCN.GT.Pos+ABS(pmsign)) THEN +! DETERMINE IF FIRST FORM OR SECOND FORM. +! HANDLE FIRST FORM: D+ ['.' D*] + IF(String(DRLSCN:DRLSCN).EQ.'.') THEN + DRLSCN = DRLSCN + 1 + IF(DRLSCN.LE.LENSTR(String)) THEN + IF(String(DRLSCN:DRLSCN).NE.' ') THEN + ptr = INTSCN(String,DRLSCN,.FALSE.,fract) + kfract = ptr - DRLSCN + DRLSCN = ptr + END IF + END IF + END IF +! HANDLE SECOND FORM: '.' D+ + ELSE IF(String(DRLSCN:DRLSCN).NE.'.') THEN +! IF '.' MISSING, THEN WE HAVE NOTHING. + DRLSCN = Pos + RETURN + ELSE + DRLSCN = DRLSCN + 1 + ptr = INTSCN(String,DRLSCN,.FALSE.,fract) + kfract = ptr - DRLSCN + IF(kfract.EQ.0) THEN +! IF FRACTION MISSING, THEN WE STILL HAVE NOTHING. + DRLSCN = Pos + RETURN + ELSE + DRLSCN = ptr + END IF + END IF +! +! LOOK FOR EXPONENT PART. +! + IF(DRLSCN.LE.LEN(String)) THEN + IF(String(DRLSCN:DRLSCN).EQ.'E'.OR.String(DRLSCN:DRLSCN) & + & .EQ.'e') THEN + DRLSCN = DRLSCN + 1 + ptr = INTSCN(String,DRLSCN,.TRUE.,power) + IF(ptr.EQ.DRLSCN) THEN +! IF WE HAVE THE 'E' BUT NOTHING ELSE THEN WE ASSUME +! THAT THE 'E' IS A TERMINATOR (E.G., 5.3EV) AND +! RETURN WHAT WE HAVE SO FAR (E.G., 5.3). + DRLSCN = DRLSCN - 1 + Value = intg + fract/10.0**kfract + IF(pmsign.EQ.-1)Value = -Value + RETURN + ELSE + DRLSCN = ptr + END IF + END IF + END IF + END IF +! +! COMPUTE REAL VALUE FROM ITS PARTS. +! + IF(kfract.NE.0) THEN + Value = (intg+fract/10.0**kfract)*10.0**power + ELSE + Value = intg*10.0**power + END IF + IF(pmsign.EQ.-1)Value = -Value + EXIT + END DO + RETURN + END FUNCTION DRLSCN +! +!*********************************************************************** +! + FUNCTION IVLSTR(String) +! +! VALUE OF LEADING INTEGER STRING. +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: IVLSTR + CHARACTER(LEN=*) :: String +! +! Local variables +! + INTEGER(KIND=4) :: i,iv + INTEGER(KIND=4),EXTERNAL :: INTSCN +! + i = INTSCN(String,1,.TRUE.,iv) + IVLSTR = iv + END FUNCTION IVLSTR +! +!*********************************************************************** +! + FUNCTION INTSCN(String,Pos,Signed,Value) +! +! SCANS STRING LOOKING FOR THE LEADING INTEGER STRING. +! +! SCANNING BEGINS AT THE POSITION SPECIFIED BY POS AND CONTINUES TO +! THE END OF THE STRING. +! +! LEADING BLANKS ARE IGNORED. +! +! THE SEARCH MAY BE FOR A SIGNED (SIGNED = .TRUE.) OR UNSIGNED (SIGNED +! = .FALSE.) INTEGER VALUE. IF SIGNED, LEADING PLUS (+) OR MINUS (-) +! IS ALLOWED. IF UNSIGNED, THEY WILL TERMINATE THE SCAN AS THEY ARE +! INVALID FOR AN UNSIGNED INTEGER. +! +! VALUE IS SET TO THE NUMERIC VALUE OF THE INTEGER STRING. +! +! THE FUNCTION VALUE IS SET TO THE POSITION WITHIN THE STRING WHERE +! THE INTEGER STRING ENDS PLUS ONE (I.E., THE BREAK CHARACTER). +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: INTSCN + INTEGER(KIND=4) :: Pos,Value + LOGICAL(KIND=4) :: Signed + CHARACTER(LEN=*) :: String +! +! Local variables +! + INTEGER(KIND=4) :: digit,pmsign + INTEGER(KIND=4),INTRINSIC :: ICHAR,LEN + INTEGER(KIND=4),EXTERNAL :: LENSTR +! +! CHECK POS. +! + INTSCN = Pos + Value = 0 + IF(Pos.LT.1.OR.LEN(String).LT.Pos)RETURN + DO WHILE (.TRUE.) +! +! SKIP LEADING BLANKS. +! + IF(String(INTSCN:INTSCN).EQ.' ') THEN + INTSCN = INTSCN + 1 + IF(INTSCN.GT.LEN(String))RETURN + CYCLE + END IF +! +! IF SIGNED, CHECK FOR SIGN. +! + pmsign = 0 + IF(Signed) THEN + IF(String(INTSCN:INTSCN).EQ.'+') THEN + pmsign = +1 + ELSE IF(String(INTSCN:INTSCN).EQ.'-') THEN + pmsign = -1 + END IF + IF(pmsign.NE.0)INTSCN = INTSCN + 1 +! +! IF sign is the last char in the field (with no integer +! following it) +! INTSCN value is left as POS or at the end of leading blanks. +! + IF(INTSCN.GT.LENSTR(String)) THEN + INTSCN = INTSCN - 1 + RETURN + END IF + END IF +! +! PROCESS DIGIT STRING. +! + DO INTSCN = INTSCN,LEN(String) + digit = ICHAR(String(INTSCN:INTSCN)) - ICHAR('0') + IF(digit.LT.0.OR.9.LT.digit) GO TO 10 + Value = Value*10 + digit + END DO +! Explicitly defined intscn to avoid possible compiler dependences +! (TWB. 930223) + INTSCN = LEN(String) + 1 + EXIT + END DO +! +! ADJUST SIGN. +! + 10 IF(Signed.AND.pmsign.EQ.-1)Value = -Value + END FUNCTION INTSCN +! +!*********************************************************************** +! + SUBROUTINE NUMSTR(Num,Str) +! +! CONVERT THE INTEGER NUM INTO CHARACTER FORMAT (INTO STR). +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Num + CHARACTER(LEN=*) :: Str +! +! Local variables +! + CHARACTER(LEN=5) :: fmt + INTEGER(KIND=4),INTRINSIC :: LEN + INTEGER(KIND=4),EXTERNAL :: LENSTR + CHARACTER(LEN=11) :: stars,wrkstr + DATA stars/'***********'/ +! + WRITE(UNIT=fmt,FMT=1010)LEN(wrkstr) + 1010 FORMAT('(I',I2.2,')') + WRITE(UNIT=wrkstr,FMT=fmt,ERR=10)Num + CALL LBSUP(wrkstr) + IF(LEN(Str).GE.LENSTR(wrkstr)) THEN + Str = wrkstr + CALL PADLFT(Str,LEN(Str)) + RETURN + END IF + 10 Str = stars + RETURN + END SUBROUTINE NUMSTR +! +!*********************************************************************** +! + SUBROUTINE NOLBLANK(String) +! +! ROUTINE TO REMOVE LEADING BLANKS FROM A STRING +! +! STRING - CHARACTER STRING TO BE MODIFIED +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Nstr + CHARACTER(LEN=*) :: String +! +! Local variables +! + INTEGER(KIND=4) :: i,ipath,l + INTEGER(KIND=4),INTRINSIC :: LEN_TRIM +! + ENTRY LBSUP(String) +! + ipath = 1 + GO TO 10 +! + ENTRY NOLBLANKL(String,Nstr) +! + ipath = 2 + Nstr = 0 +! +! CHECK FOR EMPTY STRING +! + 10 IF(String.NE.' ') THEN +! +! FIND THE FIRST NON-BLANK CHARACTER +! + l = LEN_TRIM(String) + DO i = 1,l + IF(String(i:i).NE.' ') THEN +!***********REMOVE THE BLANKS + String = String(i:) + EXIT + END IF + END DO +! + IF(ipath.EQ.2)Nstr = LEN_TRIM(String) + END IF + RETURN + END SUBROUTINE NOLBLANK +! +!*********************************************************************** +! + SUBROUTINE PADLFT(Str,L) +! +! MAKE STR L CHARACTERS LONG BY EITHER TAKING AWAY BLANKS OR +! FILLING WITH BLANKS TO THE LEFT. +! DUMMY ARGUMENTS: +! STR THE STRING (ASSIGNED) +! L WANTED CURRENT LENGTH OF STR +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: L + CHARACTER(LEN=*) :: Str +! +! Local variables +! + INTEGER(KIND=4) :: i,lc + INTEGER(KIND=4),INTRINSIC :: LEN + INTEGER(KIND=4),EXTERNAL :: LENSTR + CHARACTER(LEN=1) :: temp +! + IF(L.GT.LEN(Str))RETURN + lc = LENSTR(Str) + IF(lc.GE.L)RETURN + DO i = 1,lc + temp = Str(lc-i+1:lc-i+1) + Str(L-i+1:L-i+1) = temp + END DO + Str(1:L-lc) = ' ' + RETURN + END SUBROUTINE PADLFT +! +!*********************************************************************** +! + FUNCTION TYPSTR(String) +! +! DETERMINE THE TYPE OF THE STRING: +! 0 = BLANK. +! 1 = NUMERIC (0 - 9 ONLY). +! 2 = ALPHA (A - Z (UPPER CASE) ONLY). +! -1 = MIXED OR OTHER. +! -2 = FORTRAN NUMBER +! * +! Trailing blanks are ignored but beginning blanks blanks count as +! non-numeric, non-alpha character, except that for fortran number +! beginning blanks are also allowed. +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: String + INTEGER(KIND=4) :: TYPSTR +! +! Local variables +! + INTEGER(KIND=4),EXTERNAL :: BREAK,INDEXF,INTSCN,LENSTR,RLSCN + CHARACTER(LEN=1) :: chr + INTEGER(KIND=4) :: i,istart,ix,lstr + INTEGER(KIND=4),INTRINSIC :: INDEX,LEN + LOGICAL(KIND=4) :: LLE,LLT + REAL(KIND=4) :: x +! +! FIND TYPE OF FIRST CHARACTER, THEN VERIFY REST OF STRING. +! + chr = String(1:1) + lstr = LENSTR(String) +! +! BLANK. +! + IF(chr.EQ.' ') THEN + DO i = 2,LEN(String) + IF(String(i:i).NE.' ') THEN + GO TO 10 + END IF + END DO + TYPSTR = 0 +! +! NUMERIC. +! + ELSE IF('0'.LE.chr.AND.chr.LE.'9') THEN + DO i = 2,lstr + chr = String(i:i) + IF(chr.LT.'0'.OR.'9'.LT.chr) THEN + GO TO 10 + END IF + END DO + TYPSTR = 1 +! +! ALPHABETIC. +! + ELSE IF(LLE('A',String(1:1)).AND.LLE(String(1:1),'Z')) THEN + DO i = 2,lstr + IF(LLT(String(i:i),'A').OR.LLT('Z',String(i:i))) THEN + GO TO 10 + END IF + END DO + TYPSTR = 2 +! +! OTHER. +! + ELSE + GO TO 10 + END IF + RETURN +! +! alpha, number, etc are mixed. +! check if it is a fortran readable number +! +! NCHAR=LSTR/10+1 +! WRITE(TEMP,'(I5)') LSTR +! +! see if it is a real no +! +! CHECK FOR IMBEDDED "," or " " (fortran delimiter) + 10 IF(INDEX(String,',').LE.0) THEN + istart = INDEX(String(1:lstr),' ') + IF(istart.LE.1) THEN +! Not allowing leading blanks although it should for a +! FORTRAN number (TWB. 930222) + IF(istart.GT.0) THEN + DO istart = istart + 1,lstr + IF(String(istart:istart).NE.' ')EXIT + END DO + ELSE + istart = 1 + END IF +! AIX XL FORTRAN compiler treats non-FORTRAN number +! characters as zero and issues a warning instead of +! implementing the ERR branch (TWB. 930222) + IF(INDEX(String(istart:lstr),'E').GT.0.OR. & + & INDEX(String(istart:lstr),'.').GT.0) THEN + i = RLSCN(String(1:lstr),istart,x) + IF(i.GT.lstr) THEN + TYPSTR = -2 + RETURN + END IF + ELSE + i = INDEX(String(istart:lstr),'+') & + & + INDEX(String(istart:lstr),'-') + IF(i.LE.1) THEN + IF(i.EQ.1) THEN + i = INTSCN(String(1:lstr),istart,.TRUE.,ix) + ELSE + i = INTSCN(String(1:lstr),istart,.FALSE.,ix) + END IF + IF(i.GT.lstr) THEN + TYPSTR = -2 + RETURN + END IF + END IF + END IF + END IF + END IF +! TFMT='(F'//TEMP(5-NCHAR+1:)//'.0)' +! READ(STRING,TFMT,ERR=140) X +! TYPSTR=-2 +! RETURN +! +! not fortran acceptable number +! + TYPSTR = -1 + RETURN + END FUNCTION TYPSTR +! +!*********************************************************************** +! + SUBROUTINE CNVS2U(Sx,Sdx,Y,Dy) +! +! CONVERT SX AND SDX INTO TWO REAL NUMBERS X AND DX. (CNVS2U) +! " " DOUBLE PREC REAL NUMBERS. (DCNVSU) +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=8) :: Dx,X + REAL(KIND=4) :: Dy,Y + CHARACTER(LEN=*) :: Sdx,Sx +! +! Local variables +! + REAL(KIND=8),EXTERNAL :: DVALST + REAL(KIND=8) :: dz,power,z + INTEGER(KIND=4) :: expon,idot,iexp,r + INTEGER(KIND=4) :: INDEX + INTEGER(KIND=4),EXTERNAL :: IVLSTR,LENSTR + LOGICAL(KIND=4) :: lsingl + CHARACTER(LEN=24) :: tdx,tx +! + lsingl = .TRUE. + Y = 0. + Dy = 0. + GO TO 10 +! +! ENTRY point for DCNVSU double precision +! + ENTRY DCNVSU(Sx,Sdx,X,Dx) +! + lsingl = .FALSE. + X = 0. + Dx = 0. +! +! INITIALIZE +! + 10 z = 0. + dz = 0. +! +! COPY INPUT STRINGS TO TEMP STRINGS. +! + tx = Sx + tdx = Sdx +! +! SQUEEZE OUT ALL EXTRANEOUS CHARACTERS AND BLANKS FROM TX. +! + CALL SUPALF(tx) + CALL SUPEMB(tx) + CALL SUPALF(tdx) + CALL SQZSTR(tx,' ') + CALL SQZSTR(tdx,' ') + r = LENSTR(tx) + IF(r.EQ.0)RETURN +! Look to see if its a single non-numeric character +! and return + IF(r.EQ.1.AND.(tx(1:1).LT.'0'.OR.tx(1:1).GT.'9'))RETURN +! +! LOOK FOR 'E' IN TX AND SET EXPONENT VALUE. +! + iexp = INDEX(tx(:r),'E') + IF(iexp.EQ.0) THEN + expon = 0 + ELSE + expon = IVLSTR(tx(iexp+1:r)) + r = iexp - 1 + END IF +! +! LOOK FOR '.' IN TX AND ADJUST EXPONENT VALUE. +! + idot = INDEX(tx(:r),'.') + IF(idot.GT.0) THEN + expon = expon - r + idot + CALL DELSTR(tx(idot:r),1,1) + r = r - 1 + END IF +! +! CONVERT TX, TDX FROM STRING TO NUMBER AND MULTIPLY BY EXPONENT. +! + power = 1.D1**expon + z = DVALST(tx(:r))*power + CALL SQZSTR(tdx,' ') + r = LENSTR(tdx) + IF(r.GT.0) THEN +! IF (TYPSTR(TDX(:R)) .EQ. 1) THEN + dz = IVLSTR(tdx(:r)) + IF(dz.LT.0)dz = dz*(-1) + dz = dz*power +! ENDIF + END IF +! + IF(lsingl) THEN + Y = z + Dy = dz + ELSE + X = z + Dx = dz + END IF + END SUBROUTINE CNVS2U +! +!*********************************************************************** +! + SUBROUTINE SUPALF(Str) +! +! SUBROUTINE SUPALF WILL CONVERT ALL NON-NUMERIC CHARACTERS IN STRING +! STR TO BLANKS (EXCEPT . , E , + AND - ). +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Str +! +! Local variables +! + CHARACTER(LEN=1) :: chr + INTEGER(KIND=4) :: i,ichr + INTEGER(KIND=4),INTRINSIC :: ICHAR,LEN +! +! SCAN STRING AND REPLACE ALL INVALID CHARACTERS. +! + DO i = 1,LEN(Str) + chr = Str(i:i) + ichr = ICHAR(chr) + IF(ichr.LT.ICHAR('0').OR.ICHAR('9').LT.ichr) THEN + IF(chr.EQ.'.') THEN + ELSE IF(chr.EQ.'E') THEN + ELSE IF(chr.EQ.'+') THEN + ELSE IF(chr.NE.'-') THEN + Str(i:i) = ' ' + END IF + END IF + END DO + END SUBROUTINE SUPALF +! +!*********************************************************************** +! + SUBROUTINE ZSYM(El,Sym) +! +! ZSYM: TRANSLATE ELEMENT NUMBER (Z) INTO SYMBOL TEXT. +! IZEL: TRANSLATE SYMBOL TEXT INTO ELEMENT NUMBER (Z). +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: El + CHARACTER(LEN=2) :: Sym + CHARACTER(LEN=80) :: Izlmsg +! +! Local variables +! + INTEGER(KIND=4) :: isym, imesg + INTEGER(KIND=4),PARAMETER :: NSYM = 111 + CHARACTER(LEN=2),DIMENSION(0:NSYM) :: symtbl +! +! DATA INITIALIZATIONS. +! + DATA symtbl/'NN','H ','HE','LI','BE','B ','C ','N ','O ','F ', & + & 'NE','NA','MG','AL','SI','P ','S ','CL','AR','K ','CA','SC', & + & 'TI','V ','CR','MN','FE','CO','NI','CU','ZN','GA','GE','AS', & + & 'SE','BR','KR','RB','SR','Y ','ZR','NB','MO','TC','RU','RH', & + & 'PD','AG','CD','IN','SN','SB','TE','I ','XE','CS','BA','LA', & + & 'CE','PR','ND','PM','SM','EU','GD','TB','DY','HO','ER','TM', & + & 'YB','LU','HF','TA','W ','RE','OS','IR','PT','AU','HG','TL', & + & 'PB','BI','PO','AT','RN','FR','RA','AC','TH','PA','U ','NP', & + & 'PU','AM','CM','BK','CF','ES','FM','MD','NO','LR','RF','DB', & + & 'SG','BH','HS','MT','DS','RG'/ +! +! ENTRY ZSYM (EL, SYM) +! + Sym = ' ' + IF(0.LE.El.AND.El.LE.NSYM) THEN + Sym = symtbl(El) + ELSE IF(El.GT.NSYM) THEN + isym = El - 100 + IF(isym.LT.100)WRITE(Sym,FMT='(I2)')isym + END IF + RETURN +! + ENTRY IZELW(Sym,El,Izlmsg) + imesg = 1 + izlmsg = ' ' + GO TO 100 +! + ENTRY IZEL(Sym,El) +! + imesg = 0 + 100 IF(Sym(1:1).GE.'0'.AND.Sym(1:1).LE.'9') THEN + IF(Sym(2:2).LT.'0'.OR.Sym(2:2).GT.'9') THEN + El = -1 + RETURN + END IF + READ(Sym,FMT='(I2)') isym + isym = isym + 100 + IF(isym.GE.104.AND.isym.LE.NSYM.AND.imesg.EQ.1) THEN + izlmsg = 'Obsolete formalism. Use '//symtbl(isym) + END IF + IF(isym.LE.103) THEN + El = -1 + ELSE + El = isym + END IF + RETURN + END IF + DO El = 0,NSYM + IF(Sym.EQ.symtbl(El))RETURN + END DO + El = -1 +! + END SUBROUTINE ZSYM +! +!*********************************************************************** +! + SUBROUTINE CNVU2S(Y,Dy,Sx,Lenx,Sdx,Lendx) +! +! CONVERTS THE REAL NUMBER Y(OR X FOR DOUBLE PREC), WITH +! OPTIONAL UNCERTAINTY DY(OR DX FOR DOUBLE REC), +! INTO STRING FORMAT. ONE OF FOUR FORMATS IS SELECTED BASED +! ON THE VALUES OF DY(OR DX) AND LENDX. +! +! Y IS THE INPUT REAL NUMBER TO BE CONVERTED. +! DY IS THE INPUT REAL UNCERTAINTY IN Y. +! X IS THE DOUBLE PRECISION NUMBER TO BE CONVERTED. +! DX IS THE DOUBLE PRECISION UNCERTAINTY IN X. +! SX IS THE OUTPUT STRING FOR X (AND IN FORMAT 2 ALSO DX). +! LENX IS THE INPUT LENGTH SPECIFIER FOR SX. +! SDX IS THE OUTPUT STRING FOR DX (FORMATS 1 AND 3 ONLY). +! LENDX IS THE INPUT LENGTH SPECIFIER FOR SDX (FORMATS 1 AND 3). +! OR A FORMAT FLAG (FORMAT 2 AND 4). +! +! FORMAT 1: DX > 0.0, LENDX > 0. +! SX AND SDX ARE SET. +! SDX WILL BE IN THE RANGE 1 TO 25. +! SX WILL BE SET AS APPROPRIATE FOR THE SPECIFIED UNCERTAINTY. +! +! FORMAT 2: DX > 0.0, LENDX <= 0. +! SX ONLY IS SET, SDX IS NOT MODIFIED. +! X AND DX ARE FORMATTED INTO SX. THE UNCERTAINTY IS NOT +! CONSTRAINED TO THE RANGE 1 TO 25 IF DX > 25.0. +! If LENDX=0, results will be set to the "natural" number of +! significant digits. +! If LENDX>0, results will be set to -LENDX significant +! digits. +! +! FORMAT 3: DX = 0.0, LENDX >= 0. +! SX AND SDX ARE SET. +! SX WILL BE SET USING 4 SIGNIFICANT DIGITS. +! SDX WILL BE BLANKED OUT TO A LENGTH OF LENDX. +! +! FORMAT 4: DX = 0.0, LENDX < 0. +! SX ONLY IS SET, SDX IS NOT MODIFIED. +! SX WILL BE SET USING -LENDX SIGNIFICANT DIGITS. +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=4) :: Dy,Y + REAL(KIND=8) :: Dz,Z + INTEGER(KIND=4) :: Lendx,Lenx + CHARACTER(LEN=*) :: Sdx,Sx +! +! Local variables +! + REAL(KIND=8),INTRINSIC :: DABS,DBLE,DLOG10,DSIGN + REAL(KIND=8) :: dx,t,x + REAL(KIND=4) :: FLOAT + INTEGER(KIND=4) :: i,iblk,idx,ipwr,isig,ix,lenxt + INTEGER(KIND=4) :: INT + LOGICAL(KIND=4),EXTERNAL :: IVRFLW + INTEGER(KIND=4),EXTERNAL :: LENSTR + CHARACTER(LEN=10) :: temp +! +! ENTRY FOR CNVU2S (SINGLE PRECISION) +! + x = Y + dx = Dy + GO TO 10 +! +! ENTRY FOR DCNVUS (DOUBLE PRECISION) +! + ENTRY DCNVUS(Z,Dz,Sx,Lenx,Sdx,Lendx) + x = Z + dx = Dz +! +!-- DETERMINE FORMATS BASED ON VALUES OF DX AND LENDX. +! + 10 IF(dx.LE.0.0) THEN +! +!-- FORMAT 3: SX HAS 4 SIG. DIGITS, SDX BLANKED. +!-- FORMAT 4: SX HAS -LENDX SIG. DIGITS, SDX UNTOUCHED. +! + isig = 4 + IF(Lendx.LT.0)isig = -Lendx +! ...FIND PROPER IPWR. + t = 0.0D0 + IF(DABS(x).GT.1.D-35)t = DLOG10(DABS(x)) + IF(t.LT.0.0D0)t = t - 1.0D0 + ipwr = INT(t) - isig + 1 +! Check if there will be an integer overflow if SCALX is +! called + IF(IVRFLW(x,ipwr)) THEN + Sx = '*************************************' + IF(Lendx.EQ.0)Sdx = ' ' + RETURN + END IF + CALL SCALX(x,ix,ipwr) + CALL KNVIX(ix,ipwr,Sx,Lenx) + IF(Lendx.GE.0) THEN + Sdx = ' ' + END IF + ELSE IF(Lendx.GT.0) THEN +! +!-- FORMAT 1: SX, SDX (1, 25). +! + CALL SCALDX(dx,idx,ipwr) +! Check if there will be an integer overflow if SCALX is +! called + IF(IVRFLW(x,ipwr)) THEN + Sx = '*************************************' + Sdx = '*************************************' + RETURN + END IF + CALL SCALX(x,ix,ipwr) +! when IX and IDX are multiple of 10, reduce them by 10--skip this(ys +! CALL SCAL10(IX, IDX, IPWR) + CALL KNVIX(ix,ipwr,Sx,Lenx) + CALL KNVI2S(idx,Sdx,Lendx) + ELSE +! +!-- FORMAT 2: SX ONLY (SDX INCLUDED). + ipwr = 0 + idx = dx + i = 1 + DO WHILE (DABS((dx-FLOAT(idx))/dx).GT.1.D-4) + ipwr = ipwr - 1 + dx = dx*1.D1 + idx = INT(dx+0.9) + i = i + 1 +! Not converging - abort nicely + IF(i.GT.100) THEN + Sx = '*************************************' + RETURN + END IF + END DO + CALL KNVI2S(idx,temp,0) + DO WHILE (.TRUE.) +! lendx less than zero indicates number of significant digits +! to retain. If lendx=0, than default to "natural" number +! of significant digits + IF(Lendx.LT.0.AND.LENSTR(temp).NE.-Lendx) THEN + IF(LENSTR(temp).LT.-Lendx) THEN + ipwr = ipwr - 1 + dx = dx*10. + idx = INT(dx+0.9) + END IF + IF(LENSTR(temp).GT.-Lendx) THEN + ipwr = ipwr + 1 + dx = dx/10. + idx = INT(dx+0.9) + END IF + CALL KNVI2S(idx,temp,0) + CYCLE + END IF +! Check if there will be an integer overflow if SCALX is +! called + IF(IVRFLW(x,ipwr)) THEN + Sx = '*************************************' + RETURN + END IF + CALL SCALX(x,ix,ipwr) + CALL KNVIX(ix,ipwr,Sx,Lenx) + IF(Sx(1:1).NE.'*') THEN + CALL SQZSTR(Sx,' ') + CALL ADDSTR(temp,1,' ') + lenxt = LENSTR(Sx) + LENSTR(temp) + IF(lenxt.LE.Lenx) THEN + iblk = Lenx - lenxt + Sx(LENSTR(Sx)+1:Lenx) = temp + DO i = 1,iblk + CALL ADDSTR(Sx,1,' ') + END DO + ELSE + Sx = '*************************************' + END IF + END IF + EXIT + END DO + END IF +! +!-- RETURN TO CALLING ROUTINE. +! + RETURN + END SUBROUTINE CNVU2S +! +!*********************************************************************** +! + FUNCTION IVRFLW(X,Ipwr) +! +! Check on possiblity of integer overflow +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Ipwr + LOGICAL(KIND=4) :: IVRFLW + REAL(KIND=8) :: X +! +! Local variables +! + REAL(KIND=8) :: xx +! + IVRFLW = .FALSE. + xx = X*(10.0D+0**(-Ipwr)) + IF(xx.LT.-(2.D+0**31).OR.xx.GT.((2.D+0**31)-1.D0))IVRFLW = .TRUE. + RETURN + END FUNCTION IVRFLW +! +!*********************************************************************** +! + SUBROUTINE KNVIX(Ix,Ipwr,Sx,Lenx) +! +! CONVERT IX WITH SCALE FACTOR IPWR TO A STRING SX OF LENGTH +! LENX. IF THE STRING SPACE IS TOO SMALL, RETURN STARS (*). +! IF IPWR > 0 USE EXPONENTIAL FORMAT. +! IF IX * 10 ** IPWR < 1E-4 USE EXPONENTIAL FORMAT. +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Ipwr,Ix,Lenx + CHARACTER(LEN=*) :: Sx +! +! Local variables +! + INTEGER(KIND=4) :: i,iblk,iptr,jpwr,lente2,lentem,neg + INTEGER(KIND=4),EXTERNAL :: LENSTR + CHARACTER(LEN=20) :: temp + CHARACTER(LEN=12) :: temp2 +! +!-- CONVERT IX TO STRING MODE. +! + CALL KNVI2S(Ix,temp,0) +! +!-- NEG IS CONTROL FOR NEGATIVE NUMBER (LEAVE SPACE FOR SIGN). +! + neg = 0 + IF(Ix.LT.0)neg = 1 +! +!-- SPECIAL FORMATTING BASED ON IPWR. +! + IF(Ipwr.LT.0) THEN +! +!-- IPWR < 0, RETURN ONE OF: +!-- DIG . FRACT :: TEMP(1) > -IPWR. +!-- 0 . 0'S FRACT :: TEMP(1) <= -IPWR. +!-- DIG . FRACT E - EXP :: TEMP(1) + 4 <= -IPWR +! + lentem = LENSTR(temp) + IF(lentem-neg.GT.-Ipwr) THEN +! ...FIND WHERE DECIMAL POINT BELONGS AND INSERT IT. + iptr = lentem + 1 + Ipwr + CALL ADDSTR(temp,iptr,'.') + ELSE +! + IF(lentem-neg+4.LE.-Ipwr) GO TO 10 +! ...NOTE E FORMAT CODE THE SAME FOR E+ AND E-. +! ...FIND NUMBER OF LEADING ZEROS. + iptr = -Ipwr - lentem + neg +! ...INSERT LEADING ZEROS. + IF(iptr.GE.1) THEN + DO i = 1,iptr + CALL ADDSTR(temp,i+neg,'0') + END DO + END IF +! ...INSERT DECIMAL POINT AND FIRST DIGIT. + CALL ADDSTR(temp,1+neg,'0.') + END IF + ELSE IF(Ipwr.NE.0) THEN + GO TO 10 + END IF + GO TO 20 +! +!-- IPWR > 0, RETURN DIG . FRACT E EXP. +! +! ...FIND LOCATION FOR EXPONENT. + 10 lentem = LENSTR(temp) + iptr = lentem + 1 +! ...COMPUTE EXPONENT VALUE. + jpwr = lentem - neg + Ipwr - 1 +! ...ADD EXPONENT TO END OF STRING. + CALL KNVI2S(jpwr,temp2,0) + lente2 = LENSTR(temp2) + temp(iptr:iptr+lente2-1) = temp2(1:lente2) +! ...COMPUTE LENGTH OF NEW STRING. + lentem = lentem + lente2 + 1 +! ...REPLACE EXPONENT LENGTH WITH 'E'. + CALL ADDSTR(temp,iptr,'E') +! ...INSERT DECIMAL POINT AFTER FIRST (REQUIRED) DIGIT. +! ...CHECK FIT AND GENERATE SX. + CALL ADDSTR(temp,2+neg,'.') +! +!-- RETURN TO CALLING ROUTINE. +! +!-- IPWR = 0, RETURN INTEGER FORMAT. +! + 20 lentem = LENSTR(temp) + IF(lentem.LE.Lenx) THEN +!TWB Sx = ' ' +!TWB Sx(iblk+1:Lenx) = temp(1:lentem) + sx=temp(1:lentem) + Call Padlft(sx,lenx) + ELSE + Sx = '***************************' + END IF +! + RETURN + END SUBROUTINE KNVIX +! +!*********************************************************************** +! + SUBROUTINE SCALDX(Dx,Idx,Ipwr) +! +! COMPUTE IDX IN RANGE 3 TO 25. +! IPWR IS POWER OF 10 TO GET BACK TO ORIGINAL. +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=8) :: Dx + INTEGER(KIND=4) :: Idx,Ipwr +! +! Local variables +! + REAL(KIND=8) :: d + INTEGER(KIND=4) :: INT +! +!-- SET WORKING VARIABLES. +! + d = Dx + Ipwr = 0 +! +!-- D < 3.0, MULTIPLY BY 10.0. +! + DO WHILE (d.LT.3.0) + d = d*10.0 + Ipwr = Ipwr - 1 + END DO +! ENDIF +! +!-- D > 25.0, DIVIDE BY 10.0. +! + DO WHILE (d.GT.25.0) + d = d/10.0 + Ipwr = Ipwr + 1 + END DO +! ENDIF +! +!-- D IN RANGE 3 TO 25, ROUND AND FIX. +! + Idx = INT(d+0.9) +! +!-- RETURN TO CALLING ROUTINE. +! + RETURN + END SUBROUTINE SCALDX +! +!*********************************************************************** +! + SUBROUTINE SCALX(X,Ix,Ipwr) +! +! COMPUTE IX BASED ON X AND IPWR. +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Ipwr,Ix + REAL(KIND=8) :: X +! +! Local variables +! + REAL(KIND=8),INTRINSIC :: DSIGN + INTEGER(KIND=4) :: INT + REAL(KIND=8) :: xx +! +!-- SCALE AND FIX X. +! + xx = X*(10.0D0**(-Ipwr)) + Ix = INT(xx+DSIGN(0.5D0,xx)) +! +!-- RETURN TO CALLING ROUTINE. +! + RETURN + END SUBROUTINE SCALX +! +!*********************************************************************** +! + SUBROUTINE SCAL10(Ix,Idx,Ipwr) +! +! IF IDX = 10 OR 20 AND IX A MULTIPLE OF 10, +! REDUCE IX, IDX BY 10 AND CHANGE IPWR. +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Idx,Ipwr,Ix +! +! Local variables +! + INTEGER(KIND=4),INTRINSIC :: MOD +! + IF((MOD(Ix,10).EQ.0).AND.(MOD(Idx,10).EQ.0)) THEN + Ix = Ix/10 + Idx = Idx/10 + Ipwr = Ipwr + 1 + END IF +! ENDIF +! + RETURN + END SUBROUTINE SCAL10 +! +!*********************************************************************** +! + SUBROUTINE KNVI2S(N,Str,Slen) +! +! CONVERTS THE INTEGER N INTO A RIGHT JUSTIFIED STRING, STR, +! WITH STRING LENGTH LEN. +! IF LEN EQUALS 0, THE RETURNED STRING IS LEFTJUSTIFIED. +! IF N IS TOO LARGE FOR LEN CHARACTERS, STARS FILL STR. +! LONGEST STRING CONSIDERED IS 11 CHARACTERS ACCORDING TO +! LARGEST 4 BYTE INTEGER SIZE. +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: N,Slen + CHARACTER(LEN=*) :: Str +! +! Local variables +! + INTEGER(KIND=4) :: iblk,lenst + INTEGER(KIND=4),EXTERNAL :: LENSTR + CHARACTER(LEN=11) :: temp +! + Str = ' ' + WRITE(temp,'(I11)') N +! +! LEFT JUSTIFY STR +! + CALL SQZSTR(temp,' ') +! + IF(Slen.GT.0) THEN +! +! LEN > 0, SO RIGHT JUSTIFY TO LENTH POSITION IF FITS +! + lenst = LENSTR(temp) + IF(Slen.GE.lenst) THEN + iblk = Slen - lenst + Str(iblk+1:Slen) = temp(1:lenst) + ELSE +! +! FILS STARS SINCE SLEN IS NOT BIG ENOUGH +! + Str = '*************' + END IF +! + ELSE +! +! SLEN=0 SO LEAVE THE STRING LEFT JUSTIFIED +! + Str = temp + END IF + RETURN + END SUBROUTINE KNVI2S +! +!*********************************************************************** +! + SUBROUTINE SUPEMB(Str) +! +! SUBROUTINE TO FIND AND ELIMINATE UNWANTED EMBEDDED +'S AND -'S +! FROM STRING str. sHOULD BE USED IN ADDITION TO supalf WHEN +! NEEDED. +! +! + AND - ARE ALLOWED ONLY AT THE BEGINNING OR RIGHT AFTER e, +! WHEN start IS TRUE. AFTER BAD + OR - ARE FOUND, REST OF THE +! STRING WILL BECOME BLANK. +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Str +! +! Local variables +! + CHARACTER(LEN=1) :: chr + INTEGER(KIND=4) :: i + INTEGER(KIND=4),INTRINSIC :: ICHAR,LEN + LOGICAL(KIND=4) :: ridof,start +! + ridof = .FALSE. + start = .TRUE. + DO i = 1,LEN(Str) + IF(ridof) THEN + Str(i:i) = ' ' + CYCLE + END IF + chr = Str(i:i) + IF(chr.NE.' ') THEN + IF(start) THEN + IF(ICHAR(chr).LE.ICHAR('9').AND.ICHAR(chr).GE.ICHAR('0'))& + & start = .FALSE. + CYCLE + END IF + IF(.NOT.start) THEN + IF(chr.EQ.'E') THEN + start = .TRUE. + CYCLE + END IF + IF(chr.EQ.'+'.OR.chr.EQ.'-') THEN + Str(i:i) = ' ' + ridof = .TRUE. + END IF + END IF + END IF + END DO + RETURN + END SUBROUTINE SUPEMB +! +!*********************************************************************** +! + SUBROUTINE UADD(Z,Dz,X,Dx,Y,Dy) +! +! COMPUTE THE SUM OF TWO NUMBERS AND THE UNCERTAINTY OF THE SUM. +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=4) :: Dx,Dy,Dz,X,Y,Z +! +! Local variables +! + REAL(KIND=4),INTRINSIC :: SQRT +! ADD VALUES; UNCERT IS SQUARE ROOT OF SUM OF SQUARES. +! + Z = X + Y + Dz = SQRT(Dx*Dx+Dy*Dy) + RETURN + END SUBROUTINE UADD +! +!*********************************************************************** +! + SUBROUTINE USUB(Z,Dz,X,Dx,Y,Dy) +! +! COMPUTE THE DIFFERENCE OF TWO NUMBERS AND THE UNCERTAINTY OF THE +! DIFFERENCE. +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=4) :: Dx,Dy,Dz,X,Y,Z +! +! Local variables +! + REAL(KIND=4),INTRINSIC :: SQRT +! +! SUBTRACT VALUES; UNCERT IS SQUARE ROOT OF SUM OF SQUARES. +! + Z = X - Y + Dz = SQRT(Dx*Dx+Dy*Dy) + RETURN + END SUBROUTINE USUB +! +!*********************************************************************** +! + SUBROUTINE UMULT(Z,Dz,X,Dx,Y,Dy) +! +! COMPUTE THE PRODUCT OF TWO NUMBERS AND THE UNCERTAINTY OF THE +! PRODUCT. +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=4) :: Dx,Dy,Dz,X,Y,Z +! +! Local variables +! + REAL(KIND=4),INTRINSIC :: SQRT +! +! MULTIPLY VALUES; UNCERT IS BY FORMULA. +! + Z = X*Y + Dz = Z*SQRT((Dx/X)**2+(Dy/Y)**2) + RETURN + END SUBROUTINE UMULT +! +!*********************************************************************** +! + SUBROUTINE UDIV(Z,Dz,X,Dx,Y,Dy) +! +! COMPUTE THE QUOTIENT OF TWO NUMBERS AND THE UNCERTAINTY OF THE +! QUOTIENT. +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=4) :: Dx,Dy,Dz,X,Y,Z +! +! Local variables +! + REAL(KIND=4),INTRINSIC :: SQRT +! +! DIVIDE VALUES; UNCERT IS BY FORMULA. +! + Z = X/Y + Dz = Z*SQRT((Dx/X)**2+(Dy/Y)**2) + RETURN + END SUBROUTINE UDIV +! +!*********************************************************************** +! + FUNCTION GAMA(X) +! +! Z = GAMMA(X) +! FOR ALL VALUES OF X (Z, X COMPLEX). +! + IMPLICIT NONE +! +! Dummy arguments +! + COMPLEX(KIND=4) :: GAMA + COMPLEX(KIND=4) :: X +! +! Local variables +! + REAL(KIND=4),INTRINSIC :: AIMAG,REAL + COMPLEX(KIND=4),INTRINSIC :: CONJG + REAL(KIND=4) :: fj,fn + COMPLEX(KIND=4),EXTERNAL :: GAMZ + INTEGER(KIND=4) :: j,n + COMPLEX(KIND=4) :: xtmp +! +! FOR DIFFERENT VALUES OF THE REAL AND IMAGINARY PARTS, GAMMA IS +! COMPUTED DIFFERENTLY. +! + IF(REAL(X).LT.0.0) THEN + n = 1.0 - REAL(X) + fn = n + xtmp = X + fn + j = 0 + IF(AIMAG(X).GE.0.0) THEN + GAMA = GAMZ(xtmp) + ELSE + GAMA = CONJG(GAMZ(CONJG(xtmp))) + END IF + DO j = 1,n + fj = j - 1 + xtmp = X + fj + GAMA = GAMA/xtmp + END DO + ELSE IF(AIMAG(X).GE.0.0) THEN + GAMA = GAMZ(X) + ELSE + GAMA = CONJG(GAMZ(CONJG(X))) + END IF + RETURN + END FUNCTION GAMA +! +!*********************************************************************** +! + FUNCTION GAMZ(X) +! +! Z = GAMMA(X) +! FOR ALL X(REAL), X(IMAG) >= 0. +! NOTE - GAMZ CALLS GAM1 WHICH MODIFIES ITS ARGUMENT. +! + IMPLICIT NONE +! +! Dummy arguments +! + COMPLEX(KIND=4) :: GAMZ + COMPLEX(KIND=4) :: X +! +! Local variables +! + REAL(KIND=4),INTRINSIC :: AIMAG,ALOG,REAL + COMPLEX(KIND=4) :: c,xt,xtmp,z1,z2 + COMPLEX(KIND=4),INTRINSIC :: CMPLX + REAL(KIND=4) :: f1n,fn,pi,s,t + COMPLEX(KIND=4),EXTERNAL :: GAM1 + INTEGER(KIND=4) :: j,m +! +! DATA INITIALIZATIONS. +! + DATA pi/2.50662827463/ +! +! X(IMAG) <= 1.0 IS SPECIAL CASE. +! + IF(AIMAG(X).LE.1.0) THEN + xt = X + GAMZ = GAM1(xt) + ELSE + m = AIMAG(X) + fn = m + 1 + xtmp = X/fn + xt = xtmp + z1 = GAM1(xt) + f1n = 1.0/fn + j = 1 + DO j = 1,m + xtmp = xtmp + f1n + xt = xtmp + z2 = GAM1(xt) + z1 = z1*z2 + END DO + s = (fn**(REAL(X)-0.5))/(pi**m) + t = AIMAG(X)*ALOG(fn) + c = s*CMPLX(COS(t),SIN(t)) + GAMZ = c*z1 + END IF + RETURN + END FUNCTION GAMZ +! +!*********************************************************************** +! + FUNCTION GAM1(X) +! +! Z = GAMMA(X) +! FOR X(REAL) >= 0, 0 <= X(IMAG) <= 1 +! + IMPLICIT NONE +! +! Dummy arguments +! + COMPLEX(KIND=4) :: GAM1 + COMPLEX(KIND=4) :: X +! +! Local variables +! + REAL(KIND=4) :: fj,fn + COMPLEX(KIND=4),EXTERNAL :: GAM2 + INTEGER(KIND=4) :: j,n + REAL(KIND=4),INTRINSIC :: REAL +! +! X(REAL) <= 1.0 IS SPECIAL CASE. +! + IF(REAL(X).LE.1.0) THEN + GAM1 = GAM2(X) + ELSE + n = REAL(X) + fn = n + X = X - fn + IF(REAL(X).EQ.0.0) THEN + n = n - 1 + X = X + 1. + END IF + GAM1 = GAM2(X) + DO j = 1,n + fj = j - 1 + GAM1 = (X+fj)*GAM1 + END DO + END IF + RETURN + END FUNCTION GAM1 +! +!*********************************************************************** +! + FUNCTION GAM2(X) +! +! Z = GAMMA(X) +! FOR 0 <= X(REAL) <= 1, 0 <= X(IMAG) <= 1 +! +! USING PADE-POWER APPROXIMATION OF 1 / GAMMA(X). +! + IMPLICIT NONE +! +! Dummy arguments +! + COMPLEX(KIND=4) :: GAM2 + COMPLEX(KIND=4) :: X +! +! Local variables +! + INTEGER(KIND=4) :: i + COMPLEX(KIND=4) :: p,q +! +! DATA INITIALIZATIONS. +! + REAL(KIND=4),DIMENSION(9) :: a,b + DATA a/ + 0.0000000000E+0, + 1.0000000000E+0, + 1.2536302998E+0, & + & + 6.2294126401E-2, - 1.9367439704E-1, + 9.5294089001E-3, & + & + 1.0021677762E-2, - 1.7669280217E-3, + 7.9027635693E-5/ + DATA b/ + 1.0000000000E+0, + 6.7641463495E-1, + 3.2773507466E-1, & + & + 1.0279994528E-1, + 2.7018504538E-2, + 5.1647208257E-3, & + & + 8.7521995448E-4, + 9.5129148083E-5, + 9.9862892410E-6/ +! +! POLYNOMIAL EVALUATIONS. +! + p = a(9) + q = b(9) + DO i = 8,1, - 1 + p = p*X + a(i) + q = q*X + b(i) + END DO +! +! TAKE RATIO OF TWO POLYNOMIALS. +! + GAM2 = q/p + RETURN + END FUNCTION GAM2 +! +!*********************************************************************** +! + FUNCTION HYPERG(A,B,X) +! +! Z = HYPERGEOMETRIC(A, B, X). +! +! ADOPTED FROM 1604 SUBROUTINE OF C.W. NESTOR. + IMPLICIT NONE +! +! Dummy arguments +! + COMPLEX(KIND=4) :: A,B,X + COMPLEX(KIND=4) :: HYPERG +! +! Local variables +! + COMPLEX(KIND=4) :: apn,bpn,fn,t,test + REAL(KIND=4),INTRINSIC :: CABS + INTEGER(KIND=4) :: n + REAL(KIND=4),PARAMETER :: PREC = 1.0E-6 +! +! INITIALIZE VARIABLES. +! + apn = A + bpn = B + fn = 0.0 + t = 1.0 + HYPERG = 1.0 +! +! ITERATE UNTIL PRECISION MET. +! IF > 30 ITERATIONS => ERROR. +! + DO n = 1,30 + fn = fn + 1.0 + t = t*apn*X/fn/bpn + apn = apn + 1.0 + bpn = bpn + 1.0 + test = t/HYPERG + HYPERG = HYPERG + t + IF(CABS(test).LT.PREC)RETURN + END DO + WRITE(6,1010) A,B,X,HYPERG,n + 1010 FORMAT(' ERROR IN HYPERG'/4(5X,'(',E20.10,',',E20.10,')'/),I10) + HYPERG = 0. + RETURN + END FUNCTION HYPERG +! +!*********************************************************************** +! + SUBROUTINE TRANSNUC(Instr,Rstr,Sstr,Ierr) +! +! Translates between nuclear structure presentation of nuclides +! (AAAZZ) and nuclear reaction presentation (ZZ-AAA) as necessary +! +! instr - Input string to be translated +! rstr - Resultant reaction format string +! sstr - Resultant structure format string +! ierr - Error (=1) if input string cannot be parsed +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Ierr + CHARACTER(LEN=*) :: Instr, Rstr, Sstr +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + INTEGER(KIND=4), INTRINSIC :: INDEX, LEN, LEN_TRIM + INTEGER(KIND=4), EXTERNAL :: IVLSTR, TYPSTR +! +! Local variables +! + INTEGER(KIND=4) :: hyppos, i, j, strlen + CHARACTER(LEN=3) :: sym + CHARACTER(LEN=20) :: wrkstr +! + Ierr = 1 + Rstr = ' ' + Sstr = ' ' + wrkstr = Instr + CALL LBSUP(wrkstr) + hyppos = INDEX(wrkstr,'-') + strlen = LEN_TRIM(wrkstr) +! +! Check for proper length and position of hyphen + IF(hyppos.EQ.0) THEN +! Too short or too long a string + IF(strlen.LT.1.OR.strlen.GT.5) RETURN +! Too short or too long a string or hyphen in wrong position + ELSE IF(strlen.LT.3.OR.strlen.GT.9.OR.hyppos.LT.2.OR.hyppos.GT.4) & + & THEN + RETURN + END IF +! + CALL UPSTR(wrkstr) +! +! Request for translation to nuclear reaction form + IF(LEN(Rstr).GE.7.AND.LEN(Rstr).LE.9) THEN +! Input not in nuclear reaction form + IF(hyppos.EQ.0) THEN + IF(strlen.EQ.5) THEN + Rstr = wrkstr(4:5)//'-'//wrkstr(1:3) + IF(Rstr(1:1).EQ.'0') CALL ADDSTR(Rstr,1,'1') + Ierr = 0 +! Pure integer - must be Z and natural + ELSE IF(TYPSTR(wrkstr(1:strlen)).EQ.1) THEN + IF(strlen.GT.3) RETURN + i = IVLSTR(wrkstr(1:strlen)) + CALL ZSYM(i,sym) + IF(sym.EQ.' ') RETURN + Rstr = TRIM(sym)//'-0' + IF(Rstr(1:1).EQ.'0') CALL ADDSTR(Rstr,1,'1') + ELSE + i = strlen + DO WHILE (wrkstr(i:i).GE.'A'.AND.wrkstr(i:i).LE.'Z'.AND. & + & i.GT.0) + i = i - 1 + END DO + IF(i.EQ.strlen.OR.i.GT.3) THEN +! No chemical symbol or too many digits for mass - error + RETURN + ELSE IF(i.EQ.0) THEN +! Only two character symbol allowed - error + IF(strlen.GT.2) RETURN +! Only a chemical symbol - natural + Rstr = wrkstr(1:strlen)//'-0' + ELSE +! Non-numeric mass - error + IF(TYPSTR(wrkstr(1:i)).NE.1) RETURN +! Chemical symbol and mass + Rstr = wrkstr(i+1:strlen)//'-'//wrkstr(1:i) + END IF + END IF + Ierr = 0 + ELSE +! Input looks like a reaction - check it + i = hyppos - 1 + IF(TYPSTR(wrkstr(1:i)).NE.1) THEN + IF(i.EQ.0.OR.i.GT.2.OR.TYPSTR(wrkstr(1:i)).NE.2) RETURN + END IF + IF((strlen-hyppos).EQ.0.OR.(strlen-hyppos).GT.5) RETURN + i = hyppos + 1 + DO WHILE (i.LT.strlen.AND.TYPSTR(wrkstr(i:i)).EQ.1) + i = i + 1 + END DO + IF(i.LE.strlen.AND.TYPSTR(wrkstr(i:i)).NE.1) THEN + IF(wrkstr(i:i).NE.'M'.AND.wrkstr(i:i).NE.'G') RETURN + i = i + 1 + IF(i.LE.strlen) THEN + IF(wrkstr(i-1:i-1).EQ.'G'.OR.TYPSTR(wrkstr(i:i)) & + & .NE.1.OR.i.LT.strlen) RETURN + END IF + END IF + i = hyppos - 1 + IF(TYPSTR(wrkstr(1:i)).EQ.2) THEN + Rstr = wrkstr + ELSE +! Convert Z to symbol if possible + j = IVLSTR(wrkstr(1:i)) + CALL ZSYM(j,sym) + IF(sym.EQ.' ') RETURN + Rstr = TRIM(sym)//wrkstr(i+1:) + IF(Rstr(1:1).EQ.'0') CALL ADDSTR(Rstr,1,'1') + END IF + Ierr = 0 + END IF + END IF +! +! Request for translation to nuclear structure form + IF(LEN(Sstr).EQ.5) THEN +! Input not in nuclear structure form + IF(hyppos.GT.0) THEN +! Strip off metastable info if necessary + IF(wrkstr(strlen:strlen).EQ.'G'.OR.wrkstr(strlen:strlen) & + & .EQ.'M') THEN + strlen = strlen - 1 + ELSE IF(wrkstr(strlen-1:strlen-1).EQ.'M') THEN + strlen = strlen - 2 + END IF +! Non-numeric mass - error + IF(TYPSTR(wrkstr(hyppos+1:strlen)).NE.1) THEN + Ierr = 1 + RETURN + END IF +! Get the symbol + sym = wrkstr(1:hyppos-1) + IF(TYPSTR(sym).NE.2) THEN +! Symbol must be alpha or numeric - error + IF(TYPSTR(sym).NE.1) THEN + Ierr = 1 + RETURN + END IF +! Translate from Z number to symbol + i = IVLSTR(sym) + CALL ZSYM(i,sym) +! No translation - error + IF(sym.EQ.' ') THEN + Ierr = 1 + RETURN + END IF +! Only two alpha characters allowed - error + ELSE IF(LEN_TRIM(sym).GT.2) THEN + Ierr = 1 + RETURN + END IF + IF(wrkstr(hyppos+1:strlen).EQ.'0') THEN +! Mass of zero - natural + Sstr = TRIM(sym) + ELSE + Sstr = wrkstr(hyppos+1:strlen)//TRIM(sym) + END IF + Ierr = 0 + RETURN + ELSE +! Pure integer - must be Z and natural + IF(TYPSTR(wrkstr(1:strlen)).EQ.1) THEN + IF(strlen.GT.3) THEN +! Check for all numeric nuclide symbols Z>104 + IF(strlen.EQ.5) THEN + Sstr = wrkstr + Ierr = 0 + RETURN + END IF + Ierr = 1 + RETURN + END IF + i = IVLSTR(wrkstr(1:strlen)) + CALL ZSYM(i,sym) + IF(sym.EQ.' ') THEN + Ierr = 1 + RETURN + END IF + Sstr = TRIM(sym) + Ierr = 0 + RETURN +! Input looks like structure - Check it + ELSE IF(TYPSTR(wrkstr(1:strlen)).NE.2) THEN + i = 1 + DO WHILE (i.LT.strlen.AND.TYPSTR(wrkstr(i:i)).EQ.1) + i = i + 1 + END DO + IF(TYPSTR(wrkstr(i:i)).NE.1.AND.TYPSTR(wrkstr(i:i)).NE.2)& + & THEN + Ierr = 1 + RETURN + END IF + IF(i.EQ.strlen.AND.TYPSTR(wrkstr(i:i)).NE.2) THEN + IF(strlen.NE.5) THEN + Ierr = 1 + RETURN + END IF + i = IVLSTR(wrkstr(4:5)) + CALL ZSYM(i,sym) + IF(sym.EQ.' ') THEN + Ierr = 1 + RETURN + END IF + ELSE IF(TYPSTR(wrkstr(i:strlen)).NE.2.OR. & + & LEN_TRIM(wrkstr(i:strlen)).GT.2) THEN + Ierr = 1 + RETURN + END IF + END IF + Sstr = wrkstr + Ierr = 0 + END IF + RETURN + END IF +! +! Error in call + RETURN + END SUBROUTINE TRANSNUC +! +!*********************************************************************** +! + SUBROUTINE GET_TIME(Ipath,Ieru) +! +! The environmental TZ must be defined to get the proper date/time +! + IMPLICIT NONE +! +! Dummy variables +! + INTEGER(KIND=4) Ipath, Ieru +! +! Local variables +! + CHARACTER(LEN=11) :: Pdate + CHARACTER(LEN=11) :: time + CHARACTER(LEN=10) :: rdate, zone, rtime + INTEGER(KIND=4) :: ihr, imin, isec, i100th + INTEGER(KIND=4), DIMENSION(8) :: ivalue +! + CALL DATE_20(Pdate) + CALL DATE_AND_TIME(rdate,rtime,zone,ivalue) + READ(rtime,'(3I2,1X,I2)') ihr, imin, isec, i100th + WRITE(time,'(I2.2,3(A,I2.2))') ihr, ':', imin, ':', isec, ':', & + & i100th +! + IF(Ipath.EQ.1) THEN + WRITE(6,'(/1X,A/)') 'Begin run on '//Pdate//' at '//time + IF(Ieru.NE.0) THEN + WRITE(ieru,'(A)') 'Begin run on '//Pdate//' at '//time + END IF + ELSE + WRITE(6,'(/1X,A/)') 'End run on '//Pdate//' at '//time + IF(Ieru.NE.0) THEN + WRITE(ieru,'(A)') 'End run on '//Pdate//' at '//time + END IF + END IF +! + RETURN + END SUBROUTINE GET_TIME +! +!*********************************************************************** +! + SUBROUTINE DATE_20(Date) +! +! RETURNS DATE AS A CHARACTER STRING OF 11 CHARACTERS IN THE +! FORM DD-MMM-YYYY +! +! The environmental TZ must be defined to get the proper date/time +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Date +! +! Local variables +! + INTEGER(KIND=4),DIMENSION(8) :: dt + INTEGER(KIND=4) :: imo + CHARACTER(LEN=36) :: months + DATA months/'JanFebMarAprMayJunJulAugSepOctNovDec'/ + CHARACTER(LEN=10) :: rdate,time,zone +! +! GET THE DATE AND TIME AS A CHARACTER STRING +! + CALL DATE_AND_TIME(rdate,time,zone,dt) +! +! EXTRACT THE DATE ONLY +! + imo = 3*dt(2) - 2 + Date = rdate(7:8)//'-'//months(imo:imo+2)//'-'//rdate(1:4) +! + RETURN + END SUBROUTINE DATE_20 +! +!*********************************************************************** +! + SUBROUTINE IDATE_20(Imonth,Iday,Iyear,Idate) +! +! ROUTINE TO RETURN DATE AS COMPONENTS AND IN THE FORM YYYYMMDD +! +! The environmental TZ must be defined to get the proper date/time +! +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Idate,Iday,Imonth,Iyear +! +! Local variables +! + INTEGER(KIND=4),DIMENSION(8) :: dt + CHARACTER(LEN=10) :: rdate,time,zone +! GET THE DATE STRING +! + CALL DATE_AND_TIME(rdate,time,zone,dt) +! +! SET THE COMPONENTS +! + Iyear = dt(1) + Imonth = dt(2) + Iday = dt(3) +! +! COMBINE TO SINGLE INTEGER FORMAT +! + Idate = 10000*Iyear + 100*Imonth + Iday +! + RETURN + END SUBROUTINE IDATE_20 +! +!*********************************************************************** +! + SUBROUTINE SORT(Namin,Namout,Keys,Ierr) +! +! Fortran SORT routine +! + IMPLICIT NONE +! +! Dummy arguments. +! + CHARACTER(LEN=*) :: Namin, Namout + INTEGER(KIND=4), DIMENSION(*) :: Keys + INTEGER(KIND=4) :: Ierr + INTEGER(KIND=4) :: Iaccf , Iformf, Mrecf +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: MAX0 +! +! Local variables +! + INTEGER(KIND=4) :: mkey, mbuf + INTEGER(KIND=4) :: ioff, n, nrec + INTEGER(KIND=4), PARAMETER :: iunit = 70 + INTEGER(KIND=4), SAVE :: iacc, iform, mrec + DATA iacc/1/,iform/1/,mrec/0/ +! +! OPEN the input file and count the records +! + CALL OPEN_SORT_INPUT(Namin,iunit,iacc,iform,mrec,nrec) +! +! Set the incore buffer size +! + mbuf = 2*MAX0(48,nrec/20) +! +! Get the key length +! + mkey = 0 + DO n = 1, Keys(1) + ioff = 4*(n-1) + IF(Keys(ioff+2).EQ.3) THEN + mkey = mkey + 12 + ELSE IF(Keys(ioff+2).EQ.2) THEN + mkey = mkey + 8 + ELSE IF(Keys(ioff+2).EQ.1) THEN + mkey = mkey + Keys(ioff+5) + END IF + END DO + mrec = MAX0(mrec,mkey) +! + CALL FSORT(Namin,Namout,iunit,iacc,iform,Keys,mrec,mkey,mbuf,Ierr) + iacc = 1 + iform = 1 + mrec = 0 + GO TO 100 +! +! Set type of file to be sorted. Default is ascii sequential. +! + ENTRY SET_SORT_FILE(Iaccf,Iformf,Mrecf) +! + iacc = Iaccf + iform = Iformf + mrec = Mrecf +! + 100 RETURN +! + END SUBROUTINE SORT +! +!*********************************************************************** +! + SUBROUTINE OPEN_SORT_INPUT(Namin,Iunit,Iacc,Iform,Mrec,Nrec) +! +! OPENS SORT INPUT FILE AND RETURNS THE NUMBER OF RECORDS +! + IMPLICIT NONE +! +! Dummy variables +! + CHARACTER(LEN=*) :: Namin + INTEGER(KIND=4) :: Iunit, Iacc, Iform, Mrec, Nrec +! +! Local variables +! + CHARACTER(LEN=8) :: tref + INTEGER(KIND=4) :: mreco +! + mreco = mrec +!+++MDC+++ +!...VMS +!/ IF(Iform.EQ.2) mreco = Mrec/4 +!---MDC--- +! +! OPEN the file +! + IF(Iacc.EQ.1) THEN + IF(Iform.eq.1) THEN + OPEN(UNIT=iunit,ACCESS='SEQUENTIAL',STATUS='OLD',FILE=Namin,& + & FORM='FORMATTED',RECL=mreco,ACTION='READ') + ELSE + OPEN(UNIT=iunit,ACCESS='SEQUENTIAL',STATUS='OLD', & + & FILE=Namin,FORM='UNFORMATTED',RECL=mreco,ACTION='READ') + END IF + ELSE + IF(Iform.eq.1) THEN + OPEN(UNIT=iunit,ACCESS='DIRECT',STATUS='OLD',FILE=Namin, & + & FORM='FORMATTED',RECL=mreco,ACTION='READ') + ELSE + OPEN(UNIT=iunit,ACCESS='DIRECT',STATUS='OLD',FILE=Namin, & + & FORM='UNFORMATTED',RECL=mreco,ACTION='READ') + END IF + END IF +! +! Count the records so we can determine the internal record buffer +! size +! + Nrec = 0 + IF(Iacc.EQ.1) THEN + IF(Iform.eq.1) THEN + DO WHILE (.TRUE.) + READ(iunit,'(A)',END=20,ERR=20) tref + Nrec = Nrec + 1 + END DO + ELSE + DO WHILE (.TRUE.) + READ(iunit,END=20,ERR=20) tref + Nrec = Nrec + 1 + END DO + ENDIF + ELSE + IF(Iform.eq.1) THEN + DO WHILE (.TRUE.) + READ(UNIT=iunit,REC=nrec+1,FMT='(A)',ERR=20) tref + Nrec = Nrec + 1 + END DO + ELSE + DO WHILE (.TRUE.) + READ(UNIT=iunit,REC=nrec+1,ERR=20) tref + Nrec = Nrec + 1 + END DO + ENDIF + END IF +! + 20 IF(Iacc.eq.1) REWIND(UNIT=iunit) +! + RETURN + END SUBROUTINE OPEN_SORT_INPUT +! +!*********************************************************************** +! + SUBROUTINE FSORT(Namin,Namout,Iunit,Iacc,Iform,Keys,Mrec,Mkey, & + & Mbuf,Ierr) +! * +! Sort the file specified by namin. * +! * +! This is an external sort. The input file must be closed before * +! calling SORT. The sorted data will be returned in the same file * +! as the input, but in sorted order, if namout is blank (namout * +! will be set to namin. The file(s) will be closed on exit. * +! * +! The alogorithm used is Multiway Merging and Replacement Selection * +! (see The Art of Computer Programming - Volume 3 / Sorting and * +! Searching by Donald E. Knuth, Addison-Wesley Publishing Co., * +! 1973). * +! * +! This implementation uses a tree of losers to organize the data in a * +! buffer array to minimize the time it takes to find the least * +! element of the buffer to send out to the temporary file. * +! * +! The merge phase uses a repeated two into two method to merge the * +! runs down to two runs which are finally merged back into the * +! user's file. * +! * +! There are various parameters which may be varied at compile time to * +! either adjust the performance (i.e., mbuf, the number of records * +! stored in main memory at any time (the number of leaves in the * +! sort tree)) or tailor the routine for other applications. * +! * +! To simplify the implementation, it is required that the sort key be * +! the first n characters of the record (n as appropriate for the * +! application) and that this key will be sorted in the inherent * +! character set of the host machine as a simple string of n char- * +! acters. * +! * +!*********************************************************************** +! + IMPLICIT NONE +! +! Dummy arguments. +! + CHARACTER(LEN=*) :: Namin, Namout + INTEGER(KIND=4), DIMENSION(*) :: Keys + INTEGER(KIND=4) :: Iunit, Iacc, Iform, Mrec, Mkey, Mbuf, Ierr +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: REPEAT +! +! Local variables. +! + INTEGER(KIND=4) :: iend + INTEGER(KIND=4):: filbas + INTEGER(KIND=4), PARAMETER :: maxrec = 256 + CHARACTER(LEN=Mrec), ALLOCATABLE :: buffer(:) + CHARACTER(LEN=Mkey), ALLOCATABLE :: bufkey(:) +! Internal buffer of sort records. +! These are the leaves of the sort tree. + INTEGER(KIND=4) :: ieof +! Eof flag for input file. + LOGICAL(KIND=4) :: eof +! Logical eof flag for input file. + INTEGER(KIND=4) :: filin +! For merge, input file unit number. + INTEGER(KIND=4) :: filout +! For merge, output file unit number. + INTEGER(KIND=4) :: filsw +! For merge, file switch (0 or 2). +! Controls which temp files are input and which +! are output. + INTEGER(KIND=4) :: filhi +! Keeps track of the number of files opened. + CHARACTER(LEN=maxrec) :: flag +! Used to indicate no more data in sort tree. +! Also used to indicate end of run in temp +! files. + INTEGER(KIND=4) :: i +! Miscellaneous counter uses. + CHARACTER(LEN=maxrec) :: inprec +! Buffer for input records. + INTEGER(KIND=4) :: jrun +! Do loop counter for merge runs. + INTEGER(KIND=4) :: keysiz +! Size of sort key, based on iunit. + CHARACTER(LEN=maxrec), DIMENSION(0:1) :: merger + CHARACTER(LEN=maxrec), DIMENSION(0:1) :: mekey +! Merge data buffers. + EQUIVALENCE(inprec,merger(0)) +! Will share space with merge records. + INTEGER(KIND=4) :: nbuf +! Number of sort records currently in buffer. +! Also do loop counter and buffer index. + INTEGER(KIND=4) :: nrun +! Number of merge runs. + LOGICAL(KIND=4), DIMENSION(Mbuf) :: nxtrun +! Next run indicator. + INTEGER(KIND=4) :: recsiz +! Size of sort record, based on iunit. + INTEGER(KIND=4) :: t +! Temporary for swapping winner/loser in sort. + INTEGER(KIND=4), ALLOCATABLE :: tree(:) +! Tree of losers for sort phase. +! Pointer table. + INTEGER(KIND=4) :: win +! Pointer to winner. +! Alias for top of tree. + CHARACTER(LEN=maxrec) :: winner +! Winning key value. + LOGICAL(KIND=4) :: filopn +! + INTEGER(KIND=4) :: nrio +! +!*********************************************************************** +! +! Determine various sort parameters. +! Application dependent. +! + filbas = Iunit + 1 + recsiz = Mrec + keysiz = Mkey + ALLOCATE(buffer(mbuf),bufkey(Mbuf),tree(0:Mbuf-1)) + flag = REPEAT(CHAR(255),256) + Ierr = 0 + IF(Namout.EQ.' ') Namout = Namin + nrio = 1 +! +! First output file is filbas. +! + filout = filbas + nrun = 1 + OPEN(UNIT=filout,STATUS='SCRATCH',FORM='unformatted') +! +! Read in start of data to fill buffer. +! + CALL READ_SORT_IN(iunit,iacc,iform,nrio,inprec(1:recsiz),eof) + DO nbuf = 1, Mbuf + IF(eof) THEN +! -- Since eof, flag infinite value (also next run status). + buffer(nbuf) = flag(1:recsiz) + bufkey(nbuf) = flag(1:keysiz) + nxtrun(nbuf) = .TRUE. + ELSE + buffer(nbuf) = inprec(1:recsiz) + nxtrun(nbuf) = .FALSE. + CALL READ_SORT_IN(iunit,iacc,iform,nrio,inprec(1:recsiz), & + & eof) + END IF + END DO +! +! Set up loser tree initially. +! + 30 DO i = 1, Mbuf + CALL SRTKEYS(Keys,buffer(i)(1:recsiz),bufkey(i)(1:keysiz)) + END DO + win = 0 + tree = 0 + DO nbuf = 1, Mbuf, 2 +! -- For each buffer pair ... + i = Mbuf/2 + nbuf/2 +! -- i is index into tree of father. + IF(bufkey(nbuf)(1:keysiz).LE.bufkey(nbuf+1)(1:keysiz)) THEN +! -- Winner is nbuf, store winner and loser pointers. + win = nbuf + tree(0) = win + tree(i) = nbuf + 1 + ELSE +! -- Winner is nbuf+1, store winner and loser pointers. + win = nbuf + 1 + tree(0) = win + tree(i) = nbuf + END IF + IF(win.EQ.0) CYCLE +! -- Now, percolate the winner up the tree. + winner(1:keysiz) = bufkey(win)(1:keysiz) + i = i/2 + DO WHILE (i.GT.0) + IF(tree(i).EQ.0) THEN + tree(i) = win + EXIT + ELSE +! -- We have to keep percolating. + IF(winner(1:keysiz).GT.bufkey(tree(i))(1:keysiz)) THEN +! -- We lose comparison, swap winner and loser. + t = win + win = tree(i) + tree(0) = win + tree(i) = t + winner(1:keysiz) = bufkey(win)(1:keysiz) + END IF + END IF + i = i/2 + END DO + END DO +! +! Write out the winner and replace its buffer. +! Loop until no more winners. +! + 40 IF(.NOT.nxtrun(win)) THEN + WRITE(UNIT=filout) buffer(win)(1:recsiz) + IF(eof) THEN +! -- Flag infinity and set next run indicator. + buffer(win) = flag(1:recsiz) + bufkey(win) = flag(1:keysiz) + nxtrun(win) = .TRUE. + ELSE +! -- Copy next buffer, determine next run status. + buffer(win) = inprec(1:recsiz) + CALL SRTKEYS(Keys,buffer(win)(1:recsiz),bufkey(win) & + & (1:keysiz)) + CALL READ_SORT_IN(iunit,iacc,iform,nrio,inprec(1:recsiz), & + & eof) + IF(bufkey(win)(1:keysiz).LT.winner(1:keysiz)) THEN + nxtrun(win) = .TRUE. + END IF + END IF +! -- Percolate the winner to the top. + winner(1:keysiz) = bufkey(win)(1:keysiz) + i = Mbuf/2 + (win-1)/2 +! -- i is index into tree of father. + DO WHILE (i.GT.0) + IF(nxtrun(tree(i))) THEN +! -- Always win against next run. +! -- Since we're already winner, no need to swap. + ELSE IF(nxtrun(win).OR.winner(1:keysiz).GT.bufkey(tree(i)) & + & (1:keysiz)) THEN +! -- Next run implies lose. +! -- So does loss of comparison. +! -- Swap winner and loser. + t = win + win = tree(i) + tree(0) = win + tree(i) = t + winner(1:keysiz) = bufkey(win)(1:keysiz) + END IF + i = i/2 + END DO + GO TO 40 + END IF +! End this run, check for next run data. +! If there is some, start another run, else end sort phase. +! + WRITE(UNIT=filout) flag(1:recsiz) +! -- End of run sentinal. + i = 0 +! -- i is used here to tell us if there are any more data records. + DO nbuf = 1, Mbuf + IF(bufkey(nbuf)(1:keysiz).NE.flag(1:keysiz)) THEN + nxtrun(nbuf) = .FALSE. +! -- Clear next run indicator for next pass. + i = -1 +! -- Signal more data. + END IF + END DO + IF(i.NE.0) THEN +! -- There is more data to process. + nrun = nrun + 1 +! -- Set for next run. + filout = filbas + nrun - 1 + OPEN(UNIT=filout,STATUS='SCRATCH',FORM='unformatted') +! -- Change output file to alternate. + GO TO 30 + END IF +! End of sort phase + IF(Namin.EQ.Namout) THEN + CLOSE(UNIT=iunit,STATUS='DELETE') + ELSE + CLOSE(UNIT=iunit) + END IF + CALL OPEN_SORT_OUTPUT(Namout,iunit,iacc,iform,nrio,recsiz) +! +! Merge the runs down to 1 or 2. +! + filin = filbas + filsw = nrun +! -- filsw points to output side. + filout = filbas + filsw + filhi = filout - 1 + (nrun+1)/2 + DO i = filout, filhi + OPEN(UNIT=i,STATUS='SCRATCH',FORM='unformatted') + END DO +! -- If more than 2 runs, merge to temporary output. + 50 IF(nrun.LE.2) GO TO 65 + DO jrun = 1, nrun/2 +! -- For each merge pass there are nrun / 2 run pairs +! -- to be merged. + REWIND(UNIT=filin) + READ(UNIT=filin,END=90) merger(0)(1:recsiz) + REWIND(UNIT=filin+1) + READ(UNIT=filin+1,END=90) merger(1)(1:recsiz) + REWIND(UNIT=filout) + 55 IF(merger(0)(1:keysiz).EQ.flag(1:keysiz)) THEN +! -- End of run from input file 0. +! -- Copy rest of run from file 1. + filin = filin + 1 +! If merger(1) is flag then it will come back and go to mrgret + merger(0)(1:recsiz) = merger(1)(1:recsiz) + DO WHILE (merger(0)(1:keysiz).NE.flag(1:keysiz)) + CALL SORT_WRITE(filout,iunit,iacc,iform,nrio,filin, & + & merger(0)(1:recsiz),iend) + IF(iend.GT.0) GO TO 90 + END DO + filin = filin - 1 +! The above statement returns filin to its value before call to +! copy + ELSE IF(merger(1)(1:keysiz).EQ.flag(1:keysiz)) THEN +! -- End of run from input file 1. +! -- Copy rest of run from file 0. + DO WHILE (merger(0)(1:keysiz).NE.flag(1:keysiz)) + CALL SORT_WRITE(filout,iunit,iacc,iform,nrio,filin, & + & merger(0)(1:recsiz),iend) + IF(iend.GT.0) GO TO 90 + END DO + ELSE +! -- Use least entry. + CALL SRTKEYS(Keys,merger(0)(1:recsiz),mekey(0)(1:keysiz)) + CALL SRTKEYS(Keys,merger(1)(1:recsiz),mekey(1)(1:keysiz)) + IF(mekey(0)(1:keysiz).LE.mekey(1)(1:keysiz)) THEN + CALL SORT_WRITE(filout,iunit,iacc,iform,nrio,filin, & + & merger(0)(1:recsiz),iend) + IF(iend.GT.0) GO TO 90 + ELSE + CALL SORT_WRITE(filout,iunit,iacc,iform,nrio,filin+1, & + & merger(1)(1:recsiz),iend) + IF(iend.GT.0) GO TO 90 + END IF + GO TO 55 + END IF + WRITE(UNIT=filout) flag(1:recsiz) +! -- Write end of run sentinal. + filin = filin + 2 + REWIND(UNIT=filin) + filout = filout + 1 + REWIND(UNIT=filout) + END DO + IF(MOD(nrun,2).EQ.1) THEN +! -- If there are an odd number of runs, +! -- copy final run to filout. + READ(UNIT=filin,END=60) merger(0)(1:recsiz) + CALL SRTKEYS(Keys,merger(0)(1:recsiz),mekey(0)(1:keysiz)) + IF(mekey(0)(1:keysiz).NE.flag(1:keysiz)) THEN + DO WHILE (merger(0)(1:keysiz).NE.flag(1:keysiz)) + CALL SORT_WRITE(filout,iunit,iacc,iform,nrio,filin, & + & merger(0)(1:recsiz),iend) + IF(iend.GT.0) GO TO 90 + END DO + END IF + 60 WRITE(UNIT=filout) flag(1:recsiz) +! -- Write end of run sentinal. + END IF +! +! After this merge pass, mark their ends and rewind all temp files. +! + DO filout = filbas, filhi + REWIND(UNIT=filout) + END DO +! +! -- Swap input / output pointers +! -- (I.e., input now output and output now input.) + filin = filbas + filsw + filsw = nrun - filsw + filout = filbas + filsw + nrun = (nrun+1)/2 +! -- This pass has half as many runs as previous pass. + GO TO 50 +! +! We now have 1 or 2 runs left, copy (or merge) to iunit. +! + 65 filout = iunit + IF(nrun.EQ.1) THEN +! -- Only 1 run, copy it. + REWIND(UNIT=filin) + READ(UNIT=filin,END=80) merger(0)(1:recsiz) + CALL SRTKEYS(Keys,merger(0)(1:recsiz),mekey(0)(1:keysiz)) + IF(mekey(0)(1:keysiz).EQ.flag(1:keysiz)) GO TO 80 + DO WHILE (merger(0)(1:keysiz).NE.flag(1:keysiz)) + CALL SORT_WRITE(filout,iunit,iacc,iform,nrio,filin, & + & merger(0)(1:recsiz),iend) + IF(iend.GT.0) GO TO 90 + END DO + GO TO 80 + ELSE +! -- Two runs, merge. + REWIND(UNIT=filin) + READ(UNIT=filin,END=90) merger(0)(1:recsiz) + REWIND(UNIT=filin+1) + READ(UNIT=filin+1,END=90) merger(1)(1:recsiz) + 70 IF(merger(0)(1:keysiz).EQ.flag(1:keysiz)) THEN +! -- End of run from input file 0. +! -- Copy rest of run from file 1. + filin = filin + 1 + merger(0)(1:recsiz) = merger(1)(1:recsiz) + DO WHILE (merger(0)(1:keysiz).NE.flag(1:keysiz)) + CALL SORT_WRITE(filout,iunit,iacc,iform,nrio,filin, & + & merger(0)(1:recsiz),iend) + IF(iend.GT.0) GO TO 90 + END DO + filin = filin - 1 +! The above statement returns filin to its value before call to +! copy + ELSE IF(merger(1)(1:keysiz).EQ.flag(1:keysiz)) THEN +! -- End of run from input file 1. +! -- Copy rest of run from file 0. + DO WHILE (merger(0)(1:keysiz).NE.flag(1:keysiz)) + CALL SORT_WRITE(filout,iunit,iacc,iform,nrio,filin, & + & merger(0)(1:recsiz),iend) + IF(iend.GT.0) GO TO 90 + END DO + ELSE +! -- Use least entry. + CALL SRTKEYS(Keys,merger(0)(1:recsiz),mekey(0)(1:keysiz)) + CALL SRTKEYS(Keys,merger(1)(1:recsiz),mekey(1)(1:keysiz)) + IF(mekey(0)(1:keysiz).LE.mekey(1)(1:keysiz)) THEN + CALL SORT_WRITE(filout,iunit,iacc,iform,nrio,filin, & + & merger(0)(1:recsiz),iend) + IF(iend.GT.0) GO TO 90 + ELSE + CALL SORT_WRITE(filout,iunit,iacc,iform,nrio,filin+1, & + & merger(1)(1:recsiz),iend) + IF(iend.GT.0) GO TO 90 + END IF + GO TO 70 + END IF + END IF +! +! Rewind, close files, and return. +! + 80 CLOSE(UNIT=iunit) + DO i = filbas, filhi + INQUIRE(UNIT=i,OPENED=filopn) + IF(filopn) THEN + CLOSE(UNIT=i) + END IF + END DO + DEALLOCATE(buffer,bufkey,tree) + RETURN +! +! Error reading files in the merge section. +! + 90 STOP ' *** Unexpected end of file in SORT merge/copy' +! + END SUBROUTINE FSORT +! +!*********************************************************************** +! + SUBROUTINE READ_SORT_IN(Iunit,Iacc,Iform,Nrio,Inprec,Eof) +! + IMPLICIT NONE +! +! Dummy variables +! + CHARACTER(LEN=*) :: Inprec + LOGICAL(KIND=4) :: Eof + INTEGER(KIND=4) Iunit, Iacc, Iform, Nrio +! +! Local variables +! + INTEGER(KIND=4) :: ieof +! + IF(Iacc.EQ.1) THEN + IF(Iform.EQ.1) THEN + READ(UNIT=Iunit,FMT='(A)',IOSTAT=ieof) Inprec + ELSE + READ(UNIT=Iunit,IOSTAT=ieof) Inprec + END IF + ELSE + IF(Iform.EQ.1) THEN + READ(UNIT=Iunit,REC=Nrio,FMT='(A)',IOSTAT=ieof) Inprec + ELSE + READ(UNIT=Iunit,REC=Nrio,IOSTAT=ieof) Inprec + END IF + Nrio = Nrio + 1 + END IF +! + IF(ieof.NE.0) THEN + Eof = .TRUE. + ELSE + Eof = .FALSE. + END IF +! + RETURN + END SUBROUTINE READ_SORT_IN +! +!*********************************************************************** +! + SUBROUTINE SORT_WRITE(Filout,Iunit,Iacc,Iform,Nrio,Filin,Merger, & + & Iend) +! + IMPLICIT NONE +! +! Dummy variables +! + CHARACTER(LEN=*) :: Merger + INTEGER(KIND=4) :: Filout, Iunit, Iacc, Iform, Nrio, Filin, Iend +! + Iend = 0 + IF(Filout.EQ.Iunit) THEN + IF(Iacc.EQ.1) THEN + IF(Iform.EQ.1) THEN + WRITE(Filout,'(A)') Merger + ELSE + WRITE(Filout) Merger + END IF + ELSE + IF(Iform.EQ.1) THEN + WRITE(UNIT=Filout,REC=Nrio,FMT='(A)') Merger + ELSE + WRITE(UNIT=Filout,REC=Nrio) Merger + END IF + Nrio = Nrio + 1 + END IF + ELSE + WRITE(UNIT=Filout) Merger + END IF + READ(UNIT=Filin,END=90) Merger + GO TO 100 +! + 90 Iend = 1 +! + 100 RETURN + END SUBROUTINE SORT_WRITE +! +!*********************************************************************** +! + SUBROUTINE SRTKEYS(Keys,Buffin,Keystr) +! + IMPLICIT NONE +! +! Dummy variables +! + INTEGER(KIND=4), DIMENSION(*) :: Keys + CHARACTER(LEN=*) :: Buffin + CHARACTER(LEN=*) :: Keystr +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: REPEAT + INTEGER(KIND=4), INTRINSIC :: LEN +! +! Local variables +! + INTEGER(KIND=4), PARAMETER :: keysiz = 256 + CHARACTER(LEN=keysiz) :: flag + CHARACTER(LEN=keysiz) :: str + INTEGER(KIND=4) :: numkeys, ncout, ival, styp, adcd + INTEGER(KIND=4) :: ibgn, lng, lbin + INTEGER(KIND=4) :: i, i4, n, l + INTEGER(KIND=4) :: strint + REAL(KIND=4) :: streal + REAL(KIND=4) :: val +! + EQUIVALENCE(str,strint) + EQUIVALENCE(str,streal) +! + flag = REPEAT(CHAR(255),keysiz) +! + lbin = LEN(Buffin) + IF(Buffin.EQ.flag(1:lbin)) THEN + Keystr = flag + RETURN + END IF +! + numkeys = Keys(1) +! + Keystr = ' ' + ncout = 1 + DO i = 1, numkeys + i4 = (i-1)*4 + styp = Keys(i4+2) + adcd = Keys(i4+3) + ibgn = Keys(i4+4) + lng = Keys(i4+5) + str = Buffin(ibgn:ibgn+lng-1) + IF(styp.EQ.1) THEN + IF(adcd.EQ.0) THEN + Keystr(ncout:) = str(1:lng) + ELSE + DO l = 1, lng + n = ncout + l - 1 + Keystr(n:n) = CHAR(255-ICHAR(str(l:l))) + END DO + END IF + ncout = ncout + lng + ELSE IF(styp.EQ.2) THEN + ival = strint + IF(adcd.EQ.1) ival = -ival + IF(ival.GT.99999999) ival = 99999999 + IF(ival.LT.-9999999) ival = -9999999 + WRITE(str,FMT='(I8.8)') ival + IF(ival.LT.0) THEN + CALL REPCHR(str(1:8),'-0123456789','**)(''&%$#"!') + END IF + Keystr(ncout:) = str(1:8) + ncout = ncout + 8 + ELSE IF(styp.EQ.3) THEN + val = streal + IF(adcd.EQ.1) val = -val + IF(val.GT.99999999.999) val = 99999999.999 + IF(val.LT.-9999999.999) val = -9999999.999 + WRITE(str,FMT='(F12.3)') val + CALL REPCHR(str(1:12),' ','0') + IF(val.LT.0.0) THEN + CALL REPCHR(str(1:12),'-123456789','*)(''&%$#"!') + END IF + Keystr(ncout:) = str(1:12) + ncout = ncout + 12 + END IF + END DO + END SUBROUTINE SRTKEYS +! +!*********************************************************************** +! + SUBROUTINE OPEN_SORT_OUTPUT(Namout,Iunit,Iacc,Iform,Nrio,Mrec) +! +! OPENS SORT OUTPUT FILE +! + IMPLICIT NONE +! +! Dummy variables +! + CHARACTER(LEN=*) :: Namout + INTEGER(KIND=4) :: Iunit, Iacc, Iform, Mrec, Nrio +! +! Local variables +! + INTEGER(KIND=4) :: mreco +! +! OPEN the file +! + mreco = Mrec +!+++MDC+++ +!...VMS +!/ IF(Iform.EQ.2) mreco = Mrec/4 +!---MDC--- + IF(Iacc.EQ.1) THEN + IF(Iform.eq.1) THEN +!+++MDC+++ +!...VMS +!/ OPEN(UNIT=iunit,ACCESS='SEQUENTIAL',STATUS='UNKNOWN', & +!/ & CARRIAGECONTROL='LIST',FORM='FORMATTED', & +!/ & RECL=Mreco,FILE=Namout) +!...UNX, DVF +!/ OPEN(UNIT=iunit,ACCESS='SEQUENTIAL',STATUS='UNKNOWN', & +!/ & FORM='FORMATTED',RECL=Mreco,FILE=Namout) +!---MDC--- + ELSE + OPEN(UNIT=iunit,ACCESS='SEQUENTIAL',STATUS='UNKNOWN', & + & FORM='UNFORMATTED',RECL=Mreco,FILE=Namout) + ENDIF + ELSE + IF(Iform.eq.1) THEN + OPEN(UNIT=iunit,ACCESS='DIRECT',STATUS='UNKNOWN', & + & FORM='FORMATTED',RECL=mreco,FILE=Namout) + ELSE + OPEN(UNIT=iunit,ACCESS='DIRECT',STATUS='UNKNOWN', & + & FORM='UNFORMATTED',RECL=mreco,FILE=Namout) + ENDIF + Nrio = 1 + END IF +! + RETURN + END SUBROUTINE OPEN_SORT_OUTPUT From 4b223d2d5ce66f6e3dd994773052c84cc12da932 Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 4 Jan 2016 16:02:50 -0800 Subject: [PATCH 044/216] Removed bricc, and un-needed alphad test file from ensdf-processing module --- pyne/ensdf_processing.py | 47 ------------------- .../alphad/ref_a228.ens.alphad.inp | 7 --- tests/ensdf_processing/bricc/ref_bricc_44.out | 1 - tests/test_ensdf_processing.py | 12 ----- 4 files changed, 67 deletions(-) delete mode 100644 tests/ensdf_processing/alphad/ref_a228.ens.alphad.inp delete mode 100644 tests/ensdf_processing/bricc/ref_bricc_44.out diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 2d1a07b234..cfa29971b4 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -76,50 +76,3 @@ def alphad(inputdict_unchecked): proc.communicate()[0] proc.stdin.close() return inputdict_unchecked - -def bricc(inputdict_unchecked): - """ - This function calculates the conversion electron, electron-positron pair conversion - coefficients, and the E0 electron factors. - - Input Dictionary Required Key Pair Value: - input_line : input line to be used, as if bricc was being used in the interactive - command line style. This line will be passed in verbatim to the - bricc executable, and default output file names will be used. For - generating new records, or any operation that produces output files, - '' should be appended on the end of input_line, to force default - file names to be used. - Output Dictionary Values: - input_line : user defined input - output_file_directory : the directory all produced bricc output files will be - located. - bricc_output : data printed to command line. Useful for interactive use. - NOTE: - All the various ouptput files bricc can generate are found in the - - 'output_file_directory' path. '' must be appended to 'input_line' for this - to work properly. - """ - exe_path = path_to_exe('bricc') - exe_dir = path_to_exe('') - compressed_exe_path = exe_path + '.tar.gz' - - bricc_url = "http://www.nndc.bnl.gov/nndcscr/ensdf_pgm/analysis/BrIcc/Linux/BriccV23-Linux.tgz" - decomp_exe_path = path_to_exe('') - decomp_options = ['bricc', '.tgz', True] - verify_download_exe(compressed_exe_path, bricc_url, compressed = True, decomp_path = decomp_exe_path, dl_size = 127232) - - # check if BriIccHome environment variable has been set (needed by BRICC executable) - if not os.environ.get('BrIccHome'): - os.environ['BrIccHome'] = str(exe_dir) - - input_line = inputdict_unchecked['input_line'] - proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) - proc.stdin.write(input_line + '\n' + 'exit' + '\n') - bricc_output = proc.communicate()[0] - proc.stdin.close() - - output_dict = inputdict_unchecked - output_dict['output_file_directory'] = exe_dir - output_dict['bricc_output'] = bricc_output - return output_dict diff --git a/tests/ensdf_processing/alphad/ref_a228.ens.alphad.inp b/tests/ensdf_processing/alphad/ref_a228.ens.alphad.inp deleted file mode 100644 index cc3e4e6db9..0000000000 --- a/tests/ensdf_processing/alphad/ref_a228.ens.alphad.inp +++ /dev/null @@ -1,7 +0,0 @@ -ref_a228.ens -ref_a228.ens.alphad.rpt -Y -N - - - diff --git a/tests/ensdf_processing/bricc/ref_bricc_44.out b/tests/ensdf_processing/bricc/ref_bricc_44.out deleted file mode 100644 index e68a2fada3..0000000000 --- a/tests/ensdf_processing/bricc/ref_bricc_44.out +++ /dev/null @@ -1 +0,0 @@ - BrIcc v2.3b (16-Dec-2014) calculates conversion coefficients\n (for electron conversion and pair production)\n and E0 electronic factors\n using cubic spline interpolation\n--------------------------------------------------------------------------------------------------------------------\nZ= 70 Ytterbium Transition energy: 279.717 keV BrIcc v2.3b (16-Dec-2014) \n Conversion Coefficient Data Table: BrIccFO\nShell E_e [keV] E1 M1 E2 M2 E3 M3 E4 M4 E5 M5\n--------------------------------------------------------------------------------------------------------------------\nTot 2.367E-02 1.901E-01 9.151E-02 8.110E-01 4.258E-01 3.015E+00 2.267E+00 1.179E+01 1.251E+01 4.967E+01\nK 218.38 1.989E-02 1.593E-01 6.401E-02 6.437E-01 1.910E-01 2.138E+00 5.694E-01 6.979E+00 1.741E+00 2.279E+01\nL-tot 2.946E-03 2.393E-02 2.115E-02 1.292E-01 1.787E-01 6.694E-01 1.279E+00 3.622E+00 8.019E+00 1.995E+01\nM-tot 6.561E-04 5.351E-03 5.038E-03 2.999E-02 4.463E-02 1.637E-01 3.323E-01 9.367E-01 2.182E+00 5.468E+00\nN-tot 1.526E-04 1.257E-03 1.161E-03 7.067E-03 1.028E-02 3.862E-02 7.675E-02 2.212E-01 5.061E-01 1.294E+00\nO-tot 2.109E-05 1.799E-04 1.447E-04 9.933E-04 1.223E-03 5.205E-03 8.903E-03 2.841E-02 5.697E-02 1.584E-01\nP-tot 1.001E-06 9.639E-06 3.226E-06 4.933E-05 1.179E-05 2.169E-04 5.326E-05 9.480E-04 2.740E-04 4.167E-03\nTranEner|ChemSymb|Z+Integer|SUBShell|DATAtable|? for help|EXIT [279.717] > --------------------------------------------------------------------------------------------------------------------\nZ= 70 Ytterbium Transition energy: 44 keV BrIcc v2.3b (16-Dec-2014) \n Conversion Coefficient Data Table: BrIccFO\nShell E_e [keV] E1 M1 E2 M2 E3 M3 E4 M4 E5 M5\n--------------------------------------------------------------------------------------------------------------------\nTot 5.831E-01 6.097E+00 1.117E+02 3.089E+02 7.319E+03 1.671E+04 2.562E+05 6.537E+05 7.526E+06 2.080E+07\nL-tot 4.543E-01 4.747E+00 8.536E+01 2.343E+02 5.410E+03 1.222E+04 1.708E+05 4.465E+05 4.106E+06 1.273E+07\nM-tot 1.026E-01 1.064E+00 2.102E+01 5.868E+01 1.519E+03 3.547E+03 6.787E+04 1.634E+05 2.720E+06 6.339E+06\nN-tot 2.324E-02 2.496E-01 4.775E+00 1.390E+01 3.516E+02 8.424E+02 1.607E+04 3.965E+04 6.603E+05 1.585E+06\nO-tot 2.820E-03 3.561E-02 5.371E-01 1.869E+00 3.794E+01 9.961E+01 1.391E+03 4.191E+03 3.953E+04 1.465E+05\nP-tot 8.814E-05 1.890E-03 2.886E-04 7.888E-02 2.448E-02 1.895E+00 1.007E+00 4.083E+01 2.793E+01 8.592E+02\nTranEner|ChemSymb|Z+Integer|SUBShell|DATAtable|? for help|EXIT [44] > ', 'input_line': '44', 'output_file_directory': '/home/josh/anaconda/lib/python2.7/site-packages/pyne-0.5.0_rc1-py2.7.egg/pyne/ diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index c9dfbb5623..9af40b9ef2 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -18,18 +18,6 @@ def test_alphad(): file_comp(input_dict['report_file'],'ensdf_processing/alphad/ref_a228.ens.alphad.rpt', exceptions) cleanup_tmp() -def test_bricc(): - create_tmp() - input_dict = {} - input_dict['input_line'] = '44' - output_dict = ensdf_processing.bricc(input_dict) - bricc_out_tmp = tmp_path + '/tmp_bricc_out.out' - bricc_out_ref = 'ensdf_processing/bricc/ref_bricc_44.out' - bricc_outfile = open(tmp_path + '/tmp_bricc_out.out', 'w+') - bricc_outfile.write(output_dict['bricc_output']) - file_comp(bricc_out_tmp, bricc_out_ref,[]) - cleanup_tmp() - def create_tmp(): if not os.path.exists(tmp_path): os.makedirs(tmp_path) From e1edf1872e42ddb69b51d58e52e32b419885e403 Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 4 Jan 2016 16:03:27 -0800 Subject: [PATCH 045/216] removed bricc test call --- tests/test_ensdf_processing.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 9af40b9ef2..1506806aa8 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -80,5 +80,4 @@ def file_comp(file_out, file_ref, exceptions): # nose.runmodule() if __name__ == "__main__": alphad = test_alphad() - bricc = test_bricc() From 20441145fa417e6fd25cc5c478628a407a774feb Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 4 Jan 2016 16:07:53 -0800 Subject: [PATCH 046/216] Added GABS program to ensdf-processing pyne modlue --- pyne/ensdf_processing.py | 30 +++++++++++++ tests/ensdf_processing/gabs/ref_gabs_80Br.in | 35 +++++++++++++++ tests/ensdf_processing/gabs/ref_gabs_80Br.new | 45 +++++++++++++++++++ tests/ensdf_processing/gabs/ref_gabs_80Br.rpt | 22 +++++++++ tests/test_ensdf_processing.py | 19 ++++++++ 5 files changed, 151 insertions(+) create mode 100644 tests/ensdf_processing/gabs/ref_gabs_80Br.in create mode 100644 tests/ensdf_processing/gabs/ref_gabs_80Br.new create mode 100644 tests/ensdf_processing/gabs/ref_gabs_80Br.rpt diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index cfa29971b4..5d6243b661 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -76,3 +76,33 @@ def alphad(inputdict_unchecked): proc.communicate()[0] proc.stdin.close() return inputdict_unchecked + +def gabs(inputdict_unchecked): + """ + This function ... + + Input Dictionary Required Key Pair Value: + input_file : input ensdf file + dataset_file : dataset file to be used + output file : file for output to be written to (doesn't have to exist) + + Output Dictionary Values: + Everything in input dictionary is returned if GABS completes successfully. + """ + exe_path = path_to_exe('gabs') + + gabs_url = "http://www.nndc.bnl.gov/nndcscr/ensdf_pgm/analysis/gabs/unx/gabs" + verify_download_exe(exe_path, gabs_url, dl_size = 8704) + + inputdict = {} + input_file = inputdict_unchecked['input_file'] + dataset_file = inputdict_unchecked['dataset_file'] + output_file = inputdict_unchecked['output_file'] #report file << CHANGE BACK TO REPORT.. + + #add option to not get new dataset (currently new dataset is hardprogrammed to yes) + exe_path = path_to_exe('gabs') + proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + proc.stdin.write(input_file + '\n' + output_file + '\n' + 'Y' + '\n' + dataset_file) + proc.communicate()[0] + proc.stdin.close() + diff --git a/tests/ensdf_processing/gabs/ref_gabs_80Br.in b/tests/ensdf_processing/gabs/ref_gabs_80Br.in new file mode 100644 index 0000000000..a047d08812 --- /dev/null +++ b/tests/ensdf_processing/gabs/ref_gabs_80Br.in @@ -0,0 +1,35 @@ + 80SE 80BR EC DECAY (17.68 M) + 80SE N 0.145 12 + 80BR P 0.0 1+ 17.68 M 2 1870.3 20 + 80SE L 0.0 0+ + 80SE E 2.17 22 4.9 5 4.7 1 7 + 80SE L 665.94 15 2+ + 80SE G 665.94 15 16.1 14E2 1.19E-3 X + 80SE E 1.1 4.9 1 1.1 + 80SE L 1448.9 3 2+ ? + 80SE G 783.0 3 0.1 APE2+M1 0.000707 ? + 80SE G 1448.9 3 0.24 LTE2 2.54E-4 X + 80SE E 0.02 LE 6 GT 0.02LE + 80SE L 1477.4 5 0+ + 80SE G 811.4 5 0.6 2 (E2) 7.03E-4 + 80SE E 0.05 2 5.3 3 0.05 2 + + 80KR 80BR B- DECAY (17.68 M) + 80KR N 0.073 8 + 80BR P 0.0 1+ 17.68 M 2 2006 11 + 80KR G 677.6 10 0.12 4 ? + 80KR G 688.0 10 0.18 5 ? + 80KR G 1339.1 8 + 80KR L 0.0 0+ + 80KR B 1997 10 85.0 7 6 + 80KR L 616.9 3 2+ + 80KR G 616.9 3 100 10E2 1.72E-3 X + 80KR B 1380 20 6.2 6 6.0 1 + 80KR L 1256.8 3 2+ + 80KR G 639.93 18 3.8 3E2+M1 6 1 1.54E-3 + 80KR G 1256.8 3 1.18 10 X + 80KR B 0.31 3 6.3 1 + 80KR L 1321.2 3 0(+) + 80KR G 704.37 19 2.9 4(E2) 1.19E-3 + 80KR B 0.19 2 6.4 1 + diff --git a/tests/ensdf_processing/gabs/ref_gabs_80Br.new b/tests/ensdf_processing/gabs/ref_gabs_80Br.new new file mode 100644 index 0000000000..8bbcefc8c0 --- /dev/null +++ b/tests/ensdf_processing/gabs/ref_gabs_80Br.new @@ -0,0 +1,45 @@ + 80SE 80BR EC DECAY (17.68 M) + 80SE N 0.89 0.075 9 + 80BR P 0.0 1+ 17.68 M 2 1870.3 20 + 80SE L 0.0 0+ + 80SE E 2.17 22 4.9 5 4.7 1 7 + 80SE L 665.94 15 2+ + 80SE G 665.94 15 16.1 14E2 1.19E-3 + 80SE CG %IG=1.07 13, using the calculated normalization. + 80SE E 1.1 4.9 1 1.1 + 80SE L 1448.9 3 2+ ? + 80SE G 783.0 3 0.1 APE2+M1 0.000707 ? + 80SE CG %IG=0.007 4, using the calculated normalization. + 80SE G 1448.9 3 0.24 LTE2 2.54E-4 + 80SE CG %IG=0.008 8, using the calculated normalization. + 80SE E 0.02 LE 6 GT 0.02LE + 80SE L 1477.4 5 0+ + 80SE G 811.4 5 0.6 2 (E2) 7.03E-4 + 80SE CG %IG=0.040 14, using the calculated normalization. + 80SE E 0.05 2 5.3 3 0.05 2 + + 80KR 80BR B- DECAY (17.68 M) + 80KR N 0.072 0.925 9 + 80BR P 0.0 1+ 17.68 M 2 2006 11 + 80KR G 677.6 10 0.12 4 ? + 80KR CG %IG=0.008 3, using the calculated normalization. + 80KR G 688.0 10 0.18 5 ? + 80KR CG %IG=0.012 4, using the calculated normalization. + 80KR G 1339.1 8 + 80KR L 0.0 0+ + 80KR B 1997 10 85.0 7 6 + 80KR L 616.9 3 2+ + 80KR G 616.9 3 100 10E2 1.72E-3 + 80KR CG %IG=6.7 7, using the calculated normalization. + 80KR B 1380 20 6.2 6 6.0 1 + 80KR L 1256.8 3 2+ + 80KR G 639.93 18 3.8 3E2+M1 6 1 1.54E-3 + 80KR CG %IG=0.25 3, using the calculated normalization. + 80KR G 1256.8 3 1.18 10 + 80KR CG %IG=0.079 10, using the calculated normalization. + 80KR B 0.31 3 6.3 1 + 80KR L 1321.2 3 0(+) + 80KR G 704.37 19 2.9 4(E2) 1.19E-3 + 80KR CG %IG=0.19 4, using the calculated normalization. + 80KR B 0.19 2 6.4 1 + diff --git a/tests/ensdf_processing/gabs/ref_gabs_80Br.rpt b/tests/ensdf_processing/gabs/ref_gabs_80Br.rpt new file mode 100644 index 0000000000..7a71fd8bb0 --- /dev/null +++ b/tests/ensdf_processing/gabs/ref_gabs_80Br.rpt @@ -0,0 +1,22 @@ + * * * GABS Version 11 [15-Dec-2014] Report file * * * + Current date: 12/15/2014 + ENSDF input file: 80Br.in + new ENSDF file: 80Br.new + + Data Set: 80BR EC DECAY (17.68 M) + NR= 0.89 BR= 0.075 9 + + E= 665.94 15 %IG=1.07 13 per 100 dis. Compare with 1.07 19 + E= 783.0 3 %IG=0.007 4 per 100 dis. + E= 1448.9 3 %IG=0.008 8 per 100 dis. Compare with 0.008 8 + E= 811.4 5 %IG=0.040 15 per 100 dis. + + Data Set: 80BR B- DECAY (17.68 M) + NR= 0.072 BR= 0.925 9 + + E= 677.6 10 %IG=0.008 3 per 100 dis. + E= 688.0 10 %IG=0.012 4 per 100 dis. + E= 616.9 3 %IG=6.7 7 per 100 dis. Compare with 6.7 9 + E= 639.93 18 %IG=0.25 3 per 100 dis. + E= 1256.8 3 %IG=0.079 10 per 100 dis. Compare with 0.079 10 + E= 704.37 19 %IG=0.19 4 per 100 dis. diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 1506806aa8..00e9f5d00c 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -18,6 +18,24 @@ def test_alphad(): file_comp(input_dict['report_file'],'ensdf_processing/alphad/ref_a228.ens.alphad.rpt', exceptions) cleanup_tmp() +# Tests gabs output for 80Br sample input. Date and file names are expected to be different +# in the test output and reference file sets. +def test_gabs(): + create_tmp() + input_dict = {} + input_dict['input_file'] = 'ensdf_processing/gabs/ref_gabs_80Br.in' + input_dict['output_file'] = tmp_path + '/tmp_gabs_80Br.rpt' + input_dict['dataset_file'] = tmp_path + '/tmp_gabs_80Br.new' + output_dict = ensdf_processing.gabs(input_dict) + exceptions_output = [[4,0],[1, ' * * * GABS Version 11 '], + [1, ' Current date: '], + [1, ' ENSDF input file: '], + [1, ' new ENSDF file:']] + exceptions_dataset = [[4,0]] + d_report1 = file_comp(input_dict['output_file'],'ensdf_processing/gabs/ref_gabs_80Br.rpt',exceptions_output) + d_report2 = file_comp(input_dict['dataset_file'],'ensdf_processing/gabs/ref_gabs_80Br.new',exceptions_dataset) + cleanup_tmp() + def create_tmp(): if not os.path.exists(tmp_path): os.makedirs(tmp_path) @@ -80,4 +98,5 @@ def file_comp(file_out, file_ref, exceptions): # nose.runmodule() if __name__ == "__main__": alphad = test_alphad() + gabs = test_gabs() From ce29ffbf04e7dc321e1e43e3098313d098614247 Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 4 Jan 2016 16:09:46 -0800 Subject: [PATCH 047/216] Removed accidental copied line --- src/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4ab6fa0029..a7c21ec4a6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -73,8 +73,7 @@ ELSE() "jsoncustomwriter.cpp" "material.cpp" "nucname.cpp" - "particleadd_executable(alphad ${PROJECT_SOURCE_DIR}/src/ensdf_processing/ALPHAD/alphad.f -+ ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f).cpp" + "particle.cpp "rxname.cpp" "tally.cpp" "utils.cpp" From 9d01cbf1570b5ba7e6718347b9d5b0b28c7db6d6 Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 4 Jan 2016 16:13:37 -0800 Subject: [PATCH 048/216] Final pre pr ensdf-processing cleanup --- src/CMakeLists.txt | 2 +- tests/test_ensdf_processing.py | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a7c21ec4a6..2519815b6e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -73,7 +73,7 @@ ELSE() "jsoncustomwriter.cpp" "material.cpp" "nucname.cpp" - "particle.cpp + "particle.cpp" "rxname.cpp" "tally.cpp" "utils.cpp" diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 00e9f5d00c..efc1340351 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -32,8 +32,10 @@ def test_gabs(): [1, ' ENSDF input file: '], [1, ' new ENSDF file:']] exceptions_dataset = [[4,0]] - d_report1 = file_comp(input_dict['output_file'],'ensdf_processing/gabs/ref_gabs_80Br.rpt',exceptions_output) - d_report2 = file_comp(input_dict['dataset_file'],'ensdf_processing/gabs/ref_gabs_80Br.new',exceptions_dataset) + d_report1 = file_comp(input_dict['output_file'], + 'ensdf_processing/gabs/ref_gabs_80Br.rpt', exceptions_output) + d_report2 = file_comp(input_dict['dataset_file'], + 'ensdf_processing/gabs/ref_gabs_80Br.new', exceptions_dataset) cleanup_tmp() def create_tmp(): @@ -76,18 +78,14 @@ def file_comp(file_out, file_ref, exceptions): ignore = True elif exceptions[i][0] == 4: if len(line_ref[:-1]) == len(line_out): - # special exception for lines with possible carriage return instead of standard line feed return + # special exception for lines with possible carriage return instead of standard + #line feed return if line_ref[:-2] == line_out[:-1]: - if map(bin,bytearray(line_ref[len(line_ref)-1])) == map(bin,bytearray(line_out[len(line_out)-1])): + if map(bin,bytearray(line_ref[len(line_ref)-1])) \ + == map(bin,bytearray(line_out[len(line_out)-1])): ignore = True if not ignore: raise Exception('ENSDF Processing: Incorrect output generated, file: ' + file_ref) - #print 'difference found %i', line_num - #print ' line_out is: ' + line_out - #print ' line_ref is: ' + line_ref - #print len(line_out) - #print len(line_ref) - #diff_lines = numpy.append(diff_lines, line_num) line_num = line_num + 1 f_out.close() f_ref.close() From 4b62ce76f51c4409c1a7b103887b297e4dabb62d Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 4 Jan 2016 16:31:05 -0800 Subject: [PATCH 049/216] Fortran compiler flag changes in cmake/pynemacros.cmake --- cmake/PyneMacros.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/PyneMacros.cmake b/cmake/PyneMacros.cmake index ab52a25740..08861fdacb 100644 --- a/cmake/PyneMacros.cmake +++ b/cmake/PyneMacros.cmake @@ -20,7 +20,7 @@ get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME) if (Fortran_COMPILER_NAME MATCHES "gfortran.*") # gfortran - set (CMAKE_Fortran_FLAGS_RELEASE "-c -fpic -fdefault-real-8 -fdefault-double-8") + set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-all-loops -c -fpic -fdefault-real-8 -fdefault-double-8") set (CMAKE_Fortran_FLAGS_DEBUG "-c -fpic -fdefault-real-8 -fdefault-double-8") elseif (Fortran_COMPILER_NAME MATCHES "ifort.*") # ifort (untested) @@ -34,8 +34,8 @@ else (Fortran_COMPILER_NAME MATCHES "gfortran.*") message ("CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER}) message ("Fortran compiler: " ${Fortran_COMPILER_NAME}) message ("No optimized Fortran compiler flags are known, we just try -fpic...") - set (CMAKE_Fortran_FLAGS_RELEASE "-fpic") - set (CMAKE_Fortran_FLAGS_DEBUG "-fpic") + set (CMAKE_Fortran_FLAGS_RELEASE "-c -fpic") + set (CMAKE_Fortran_FLAGS_DEBUG "-c -fpic") endif (Fortran_COMPILER_NAME MATCHES "gfortran.*") macro( add_lib_to_pyne _name _source ) From b4f63ba30eba73c40a27267a73b788d15dffb756 Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 4 Jan 2016 16:35:58 -0800 Subject: [PATCH 050/216] More final cleanup for ensdf_processing pre pr --- pyne/ensdf_processing.py | 1 - tests/test_ensdf_processing.py | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 5d6243b661..76c02d2ae2 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -1,7 +1,6 @@ '''This module accesses various ensdf processing tools''' import sys, os, shutil, subprocess, tarfile -import numpy as np from warnings import warn from pyne.utils import QAWarning diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index efc1340351..16169f04ab 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -1,9 +1,9 @@ -import os, filecmp, numpy, shutil -import nose -from nose.plugins.skip import Skip, SkipTest -import pyne +import filecmp, numpy, os, shutil from pyne import ensdf_processing +import nose + +# path to folder for temporary test files. tmp_path = 'ensdf_processing/tmp' def test_alphad(): From 478c058b220303baf36cfa67233dfda5b66086fb Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 4 Jan 2016 18:33:25 -0800 Subject: [PATCH 051/216] Removed -c flag from unknown fortran compiler --- cmake/PyneMacros.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/PyneMacros.cmake b/cmake/PyneMacros.cmake index 08861fdacb..e0f9caa4a8 100644 --- a/cmake/PyneMacros.cmake +++ b/cmake/PyneMacros.cmake @@ -34,8 +34,8 @@ else (Fortran_COMPILER_NAME MATCHES "gfortran.*") message ("CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER}) message ("Fortran compiler: " ${Fortran_COMPILER_NAME}) message ("No optimized Fortran compiler flags are known, we just try -fpic...") - set (CMAKE_Fortran_FLAGS_RELEASE "-c -fpic") - set (CMAKE_Fortran_FLAGS_DEBUG "-c -fpic") + set (CMAKE_Fortran_FLAGS_RELEASE "-fpic") + set (CMAKE_Fortran_FLAGS_DEBUG "-fpic") endif (Fortran_COMPILER_NAME MATCHES "gfortran.*") macro( add_lib_to_pyne _name _source ) From 8dd47d9569c3b2c8d672057a85f1d075eecfe4f5 Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 4 Jan 2016 22:51:03 -0800 Subject: [PATCH 052/216] Added path check to make sure ensdf executables copied to proper pyne install path. --- pyne/ensdf_processing.py | 2 +- setup.py | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 76c02d2ae2..9ded4cdb9a 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -14,7 +14,7 @@ warn(__name__ + " is not yet QA compliant.", QAWarning) -def path_to_exe(exe_name ): +def path_to_exe(exe_name): exe_path_abs, dp = os.path.split(os.path.abspath(__file__)) exe_path_abs = os.path.join(exe_path_abs, exe_name) exe_path_abs = os.path.join('./',exe_path_abs) diff --git a/setup.py b/setup.py index 1e196593ec..acf5ead412 100755 --- a/setup.py +++ b/setup.py @@ -176,9 +176,11 @@ def download_decay(): return True ALPHAD_H = os.path.join('build', 'src/alphad') -def copy_ensdf_executables(pynepath): +def copy_ensdf_executables(exe_dest): print('Copying ENSDF Executables to install directory') - ALPHAD_DEST = os.path.join(pynepath, 'alphad') + if exe_dest[-4:] != 'pyne': + exe_dest = exe_dest + '/pyne' + ALPHAD_DEST = os.path.join(exe_dest, 'alphad') shutil.copy(ALPHAD_H, ALPHAD_DEST) def generate_decay(): @@ -436,9 +438,11 @@ def main(): _, pynepath, _ = imp.find_module('pyne', pypath) except ImportError: pynepath = "${HOME}/.local/python2.7/site-packages" - copy_ensdf_executables(pynepath) libpath = abspath(joinpath(pynepath, '..', '..', '..')) binpath = abspath(joinpath(libpath, '..', 'bin')) + copy_ensdf_executables(pynepath) + print(pynepath) + print(libpath) msg = ("\nNOTE: If you have not done so already, please be sure that your PATH and " "LD_LIBRARY_PATH (or DYLD_FALLBACK_LIBRARY_PATH on Mac OSX) has been " "appropriately set to the install prefix of pyne. For this install of " From b9d53bf9cbd3eeb45a080267c2aa29409daf5321 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Thu, 7 Jan 2016 17:10:12 -0600 Subject: [PATCH 053/216] added first version --- src/CMakeLists.txt | 2 + src/atomic_data.cpp | 3667 +++++++++++++++++++++++++++++++++++++ src/atomic_data.h | 25 + src/atomicdata.py | 124 ++ src/data.cpp | 6 +- tests/test_data_nofile.py | 47 + 6 files changed, 3869 insertions(+), 2 deletions(-) create mode 100644 src/atomic_data.cpp create mode 100644 src/atomic_data.h create mode 100644 src/atomicdata.py create mode 100644 tests/test_data_nofile.py diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7df30ec679..c4b5c7cb07 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -46,6 +46,7 @@ ENDIF() # setup source files IF(BUILD_SPATIAL_SOLVER) set(PYNE_SRCS + "atomic_data.cpp" "data.cpp" "decay.cpp" "enrichment.cpp" @@ -64,6 +65,7 @@ IF(BUILD_SPATIAL_SOLVER) ) ELSE() set(PYNE_SRCS + "atomic_data.cpp" "data.cpp" "decay.cpp" "enrichment.cpp" diff --git a/src/atomic_data.cpp b/src/atomic_data.cpp new file mode 100644 index 0000000000..1bbb8aa0d8 --- /dev/null +++ b/src/atomic_data.cpp @@ -0,0 +1,3667 @@ +// Implements basic nuclear data functions. +#ifndef PYNE_IS_AMALGAMATED +#include "atomic_data.h" +#endif + +void pyne::_load_atomic_mass_map_memory() { + // header version of atomic weight table data + + //see if the data table is already loaded + if(!atomic_mass_map.empty()) { + return; + } else { + _insert_atomic_mass_map(); + } + //see if the data table is already loaded + if(!natural_abund_map.empty()) { + return; + } else { + _insert_abund_map(); + } +} + +void pyne::_insert_atomic_mass_map() { + atomic_mass_map[10010000] = 1.00782503223; + atomic_mass_map[10020000] = 2.01410177812; + atomic_mass_map[10030000] = 3.01604927791; + atomic_mass_map[20030000] = 3.01602932008; + atomic_mass_map[30030000] = 3.030775; + atomic_mass_map[10040000] = 4.026431864; + atomic_mass_map[20040000] = 4.00260325413; + atomic_mass_map[30040000] = 4.027185559; + atomic_mass_map[10050000] = 5.035311489; + atomic_mass_map[20050000] = 5.012057224; + atomic_mass_map[30050000] = 5.0125378; + atomic_mass_map[40050000] = 5.03987; + atomic_mass_map[10060000] = 6.044955433; + atomic_mass_map[20060000] = 6.018885891; + atomic_mass_map[30060000] = 6.01512288742; + atomic_mass_map[40060000] = 6.019726411; + atomic_mass_map[50060000] = 6.0508; + atomic_mass_map[10070000] = 7.052749; + atomic_mass_map[20070000] = 7.027990654; + atomic_mass_map[30070000] = 7.01600343659; + atomic_mass_map[40070000] = 7.016928717; + atomic_mass_map[50070000] = 7.029712; + atomic_mass_map[20080000] = 8.03393439; + atomic_mass_map[30080000] = 8.022486246; + atomic_mass_map[40080000] = 8.005305102; + atomic_mass_map[50080000] = 8.024607326; + atomic_mass_map[60080000] = 8.037643042; + atomic_mass_map[20090000] = 9.043946494; + atomic_mass_map[30090000] = 9.026790191; + atomic_mass_map[40090000] = 9.012183065; + atomic_mass_map[50090000] = 9.013329649; + atomic_mass_map[60090000] = 9.031037204; + atomic_mass_map[20100000] = 10.052788655; + atomic_mass_map[30100000] = 10.035483453; + atomic_mass_map[40100000] = 10.013534695; + atomic_mass_map[50100000] = 10.012936949; + atomic_mass_map[60100000] = 10.016853307; + atomic_mass_map[70100000] = 10.04165363; + atomic_mass_map[30110000] = 11.043723581; + atomic_mass_map[40110000] = 11.021661081; + atomic_mass_map[50110000] = 11.009305355; + atomic_mass_map[60110000] = 11.011433563; + atomic_mass_map[70110000] = 11.026091034; + atomic_mass_map[30120000] = 12.052517322; + atomic_mass_map[40120000] = 12.026922082; + atomic_mass_map[50120000] = 12.014352658; + atomic_mass_map[60120000] = 12.0; + atomic_mass_map[70120000] = 12.018613187; + atomic_mass_map[80120000] = 12.034261836; + atomic_mass_map[30130000] = 13.062631523; + atomic_mass_map[40130000] = 13.036134506; + atomic_mass_map[50130000] = 13.017780166; + atomic_mass_map[60130000] = 13.0033548351; + atomic_mass_map[70130000] = 13.005738609; + atomic_mass_map[80130000] = 13.024815446; + atomic_mass_map[40140000] = 14.04289292; + atomic_mass_map[50140000] = 14.025404012; + atomic_mass_map[60140000] = 14.0032419884; + atomic_mass_map[70140000] = 14.0030740044; + atomic_mass_map[80140000] = 14.008596359; + atomic_mass_map[90140000] = 14.034315207; + atomic_mass_map[40150000] = 15.05342; + atomic_mass_map[50150000] = 15.03108768; + atomic_mass_map[60150000] = 15.010599256; + atomic_mass_map[70150000] = 15.0001088989; + atomic_mass_map[80150000] = 15.003065618; + atomic_mass_map[90150000] = 15.018042853; + atomic_mass_map[40160000] = 16.061672036; + atomic_mass_map[50160000] = 16.039841663; + atomic_mass_map[60160000] = 16.014701252; + atomic_mass_map[70160000] = 16.006101925; + atomic_mass_map[80160000] = 15.9949146196; + atomic_mass_map[90160000] = 16.011465725; + atomic_mass_map[100160000] = 16.025750197; + atomic_mass_map[50170000] = 17.046989906; + atomic_mass_map[60170000] = 17.02257747; + atomic_mass_map[70170000] = 17.008448873; + atomic_mass_map[80170000] = 16.9991317565; + atomic_mass_map[90170000] = 17.002095237; + atomic_mass_map[100170000] = 17.017713963; + atomic_mass_map[50180000] = 18.055660189; + atomic_mass_map[60180000] = 18.026750708; + atomic_mass_map[70180000] = 18.014077565; + atomic_mass_map[80180000] = 17.9991596129; + atomic_mass_map[90180000] = 18.000937325; + atomic_mass_map[100180000] = 18.005708703; + atomic_mass_map[110180000] = 18.026878252; + atomic_mass_map[50190000] = 19.0631; + atomic_mass_map[60190000] = 19.034796372; + atomic_mass_map[70190000] = 19.017021603; + atomic_mass_map[80190000] = 19.00357797; + atomic_mass_map[90190000] = 18.9984031627; + atomic_mass_map[100190000] = 19.001880907; + atomic_mass_map[110190000] = 19.013880272; + atomic_mass_map[120190000] = 19.034169186; + atomic_mass_map[50200000] = 20.07207; + atomic_mass_map[60200000] = 20.040319754; + atomic_mass_map[70200000] = 20.023365807; + atomic_mass_map[80200000] = 20.004075354; + atomic_mass_map[90200000] = 19.999981252; + atomic_mass_map[100200000] = 19.9924401762; + atomic_mass_map[110200000] = 20.007354426; + atomic_mass_map[120200000] = 20.018850004; + atomic_mass_map[50210000] = 21.08129; + atomic_mass_map[60210000] = 21.049; + atomic_mass_map[70210000] = 21.02710824; + atomic_mass_map[80210000] = 21.008654813; + atomic_mass_map[90210000] = 20.999948889; + atomic_mass_map[100210000] = 20.993846685; + atomic_mass_map[110210000] = 20.997654695; + atomic_mass_map[120210000] = 21.01171614; + atomic_mass_map[130210000] = 21.028975; + atomic_mass_map[60220000] = 22.057531496; + atomic_mass_map[70220000] = 22.034394934; + atomic_mass_map[80220000] = 22.009966057; + atomic_mass_map[90220000] = 22.002998813; + atomic_mass_map[100220000] = 21.991385114; + atomic_mass_map[110220000] = 21.994437411; + atomic_mass_map[120220000] = 21.999570648; + atomic_mass_map[130220000] = 22.01954; + atomic_mass_map[140220000] = 22.03579; + atomic_mass_map[60230000] = 23.06889; + atomic_mass_map[70230000] = 23.04114; + atomic_mass_map[80230000] = 23.015695922; + atomic_mass_map[90230000] = 23.003556696; + atomic_mass_map[100230000] = 22.994466905; + atomic_mass_map[110230000] = 22.989769282; + atomic_mass_map[120230000] = 22.994124208; + atomic_mass_map[130230000] = 23.007244351; + atomic_mass_map[140230000] = 23.02544; + atomic_mass_map[70240000] = 24.05039; + atomic_mass_map[80240000] = 24.019861; + atomic_mass_map[90240000] = 24.008115485; + atomic_mass_map[100240000] = 23.99361065; + atomic_mass_map[110240000] = 23.99096295; + atomic_mass_map[120240000] = 23.985041697; + atomic_mass_map[130240000] = 23.999948883; + atomic_mass_map[140240000] = 24.011534538; + atomic_mass_map[150240000] = 24.03577; + atomic_mass_map[70250000] = 25.0601; + atomic_mass_map[80250000] = 25.029358986; + atomic_mass_map[90250000] = 25.012199229; + atomic_mass_map[100250000] = 24.997788707; + atomic_mass_map[110250000] = 24.989953969; + atomic_mass_map[120250000] = 24.985836976; + atomic_mass_map[130250000] = 24.990428102; + atomic_mass_map[140250000] = 25.004108808; + atomic_mass_map[150250000] = 25.02119; + atomic_mass_map[80260000] = 26.03728745; + atomic_mass_map[90260000] = 26.020037768; + atomic_mass_map[100260000] = 26.000514705; + atomic_mass_map[110260000] = 25.992634649; + atomic_mass_map[120260000] = 25.982592968; + atomic_mass_map[130260000] = 25.986891904; + atomic_mass_map[140260000] = 25.992333845; + atomic_mass_map[150260000] = 26.01178; + atomic_mass_map[160260000] = 26.02907; + atomic_mass_map[80270000] = 27.04772; + atomic_mass_map[90270000] = 27.026441; + atomic_mass_map[100270000] = 27.007553268; + atomic_mass_map[110270000] = 26.994076531; + atomic_mass_map[120270000] = 26.984340624; + atomic_mass_map[130270000] = 26.981538531; + atomic_mass_map[140270000] = 26.986704811; + atomic_mass_map[150270000] = 26.999224406; + atomic_mass_map[160270000] = 27.01828; + atomic_mass_map[80280000] = 28.05591; + atomic_mass_map[90280000] = 28.035342095; + atomic_mass_map[100280000] = 28.012121998; + atomic_mass_map[110280000] = 27.998939; + atomic_mass_map[120280000] = 27.983876728; + atomic_mass_map[130280000] = 27.98191021; + atomic_mass_map[140280000] = 27.9769265347; + atomic_mass_map[150280000] = 27.992326585; + atomic_mass_map[160280000] = 28.004372766; + atomic_mass_map[170280000] = 28.02954; + atomic_mass_map[90290000] = 29.04254; + atomic_mass_map[100290000] = 29.019753; + atomic_mass_map[110290000] = 29.002877073; + atomic_mass_map[120290000] = 28.988617393; + atomic_mass_map[130290000] = 28.98045649; + atomic_mass_map[140290000] = 28.9764946649; + atomic_mass_map[150290000] = 28.981800794; + atomic_mass_map[160290000] = 28.996611456; + atomic_mass_map[170290000] = 29.01478; + atomic_mass_map[90300000] = 30.05165; + atomic_mass_map[100300000] = 30.024734; + atomic_mass_map[110300000] = 30.009097932; + atomic_mass_map[120300000] = 29.990462926; + atomic_mass_map[130300000] = 29.98296022; + atomic_mass_map[140300000] = 29.973770136; + atomic_mass_map[150300000] = 29.978313753; + atomic_mass_map[160300000] = 29.984907033; + atomic_mass_map[170300000] = 30.00477; + atomic_mass_map[180300000] = 30.02307; + atomic_mass_map[90310000] = 31.059709; + atomic_mass_map[100310000] = 31.033087; + atomic_mass_map[110310000] = 31.013162656; + atomic_mass_map[120310000] = 30.996648032; + atomic_mass_map[130310000] = 30.983945171; + atomic_mass_map[140310000] = 30.975363194; + atomic_mass_map[150310000] = 30.9737619984; + atomic_mass_map[160310000] = 30.979557007; + atomic_mass_map[170310000] = 30.992414203; + atomic_mass_map[180310000] = 31.012124; + atomic_mass_map[100320000] = 32.03972; + atomic_mass_map[110320000] = 32.020193; + atomic_mass_map[120320000] = 31.999110239; + atomic_mass_map[130320000] = 31.988085239; + atomic_mass_map[140320000] = 31.974151539; + atomic_mass_map[150320000] = 31.973907643; + atomic_mass_map[160320000] = 31.9720711744; + atomic_mass_map[170320000] = 31.985684637; + atomic_mass_map[180320000] = 31.997637826; + atomic_mass_map[190320000] = 32.02265; + atomic_mass_map[100330000] = 33.04938; + atomic_mass_map[110330000] = 33.02573; + atomic_mass_map[120330000] = 33.005327145; + atomic_mass_map[130330000] = 32.990908977; + atomic_mass_map[140330000] = 32.977976964; + atomic_mass_map[150330000] = 32.971725694; + atomic_mass_map[160330000] = 32.9714589098; + atomic_mass_map[170330000] = 32.977451989; + atomic_mass_map[180330000] = 32.989925546; + atomic_mass_map[190330000] = 33.00756; + atomic_mass_map[100340000] = 34.056728; + atomic_mass_map[110340000] = 34.03359; + atomic_mass_map[120340000] = 34.008935481; + atomic_mass_map[130340000] = 33.996705398; + atomic_mass_map[140340000] = 33.978575569; + atomic_mass_map[150340000] = 33.973645886; + atomic_mass_map[160340000] = 33.967867004; + atomic_mass_map[170340000] = 33.973762485; + atomic_mass_map[180340000] = 33.98027009; + atomic_mass_map[190340000] = 33.99869; + atomic_mass_map[200340000] = 34.01487; + atomic_mass_map[110350000] = 35.040623; + atomic_mass_map[120350000] = 35.01679; + atomic_mass_map[130350000] = 34.999764; + atomic_mass_map[140350000] = 34.984583476; + atomic_mass_map[150350000] = 34.973314062; + atomic_mass_map[160350000] = 34.96903231; + atomic_mass_map[170350000] = 34.968852682; + atomic_mass_map[180350000] = 34.975257586; + atomic_mass_map[190350000] = 34.988005407; + atomic_mass_map[200350000] = 35.00514; + atomic_mass_map[110360000] = 36.049288; + atomic_mass_map[120360000] = 36.021879; + atomic_mass_map[130360000] = 36.006388; + atomic_mass_map[140360000] = 35.986695219; + atomic_mass_map[150360000] = 35.978259625; + atomic_mass_map[160360000] = 35.967080706; + atomic_mass_map[170360000] = 35.968306809; + atomic_mass_map[180360000] = 35.967545105; + atomic_mass_map[190360000] = 35.98130201; + atomic_mass_map[200360000] = 35.993074404; + atomic_mass_map[210360000] = 36.01648; + atomic_mass_map[110370000] = 37.057051; + atomic_mass_map[120370000] = 37.03037; + atomic_mass_map[130370000] = 37.010531; + atomic_mass_map[140370000] = 36.99292074; + atomic_mass_map[150370000] = 36.979606841; + atomic_mass_map[160370000] = 36.971125514; + atomic_mass_map[170370000] = 36.965902602; + atomic_mass_map[180370000] = 36.966776331; + atomic_mass_map[190370000] = 36.973375889; + atomic_mass_map[200370000] = 36.985897852; + atomic_mass_map[210370000] = 37.00374; + atomic_mass_map[120380000] = 38.03658; + atomic_mass_map[130380000] = 38.017402; + atomic_mass_map[140380000] = 37.995523; + atomic_mass_map[150380000] = 37.984251583; + atomic_mass_map[160380000] = 37.971163328; + atomic_mass_map[170380000] = 37.968010436; + atomic_mass_map[180380000] = 37.962732106; + atomic_mass_map[190380000] = 37.969081117; + atomic_mass_map[200380000] = 37.976319224; + atomic_mass_map[210380000] = 37.99512; + atomic_mass_map[220380000] = 38.01145; + atomic_mass_map[120390000] = 39.045384; + atomic_mass_map[130390000] = 39.02254; + atomic_mass_map[140390000] = 39.002491; + atomic_mass_map[150390000] = 38.986227208; + atomic_mass_map[160390000] = 38.975134197; + atomic_mass_map[170390000] = 38.968008176; + atomic_mass_map[180390000] = 38.964313038; + atomic_mass_map[190390000] = 38.9637064864; + atomic_mass_map[200390000] = 38.970710813; + atomic_mass_map[210390000] = 38.984784968; + atomic_mass_map[220390000] = 39.00236; + atomic_mass_map[120400000] = 40.05218; + atomic_mass_map[130400000] = 40.03003; + atomic_mass_map[140400000] = 40.005829; + atomic_mass_map[150400000] = 39.991331748; + atomic_mass_map[160400000] = 39.975482562; + atomic_mass_map[170400000] = 39.970415469; + atomic_mass_map[180400000] = 39.9623831237; + atomic_mass_map[190400000] = 39.963998166; + atomic_mass_map[200400000] = 39.962590863; + atomic_mass_map[210400000] = 39.977967291; + atomic_mass_map[220400000] = 39.990498719; + atomic_mass_map[230400000] = 40.01276; + atomic_mass_map[130410000] = 41.03638; + atomic_mass_map[140410000] = 41.013011; + atomic_mass_map[150410000] = 40.994654; + atomic_mass_map[160410000] = 40.979593451; + atomic_mass_map[170410000] = 40.970684525; + atomic_mass_map[180410000] = 40.96450057; + atomic_mass_map[190410000] = 40.9618252579; + atomic_mass_map[200410000] = 40.962277924; + atomic_mass_map[210410000] = 40.969251105; + atomic_mass_map[220410000] = 40.983148; + atomic_mass_map[230410000] = 41.00021; + atomic_mass_map[130420000] = 42.04384; + atomic_mass_map[140420000] = 42.01778; + atomic_mass_map[150420000] = 42.001084; + atomic_mass_map[160420000] = 41.9810651; + atomic_mass_map[170420000] = 41.973254804; + atomic_mass_map[180420000] = 41.963045736; + atomic_mass_map[190420000] = 41.962402306; + atomic_mass_map[200420000] = 41.95861783; + atomic_mass_map[210420000] = 41.965516532; + atomic_mass_map[220420000] = 41.973049034; + atomic_mass_map[230420000] = 41.99182; + atomic_mass_map[240420000] = 42.0067; + atomic_mass_map[130430000] = 43.05147; + atomic_mass_map[140430000] = 43.0248; + atomic_mass_map[150430000] = 43.005024; + atomic_mass_map[160430000] = 42.986907635; + atomic_mass_map[170430000] = 42.973888584; + atomic_mass_map[180430000] = 42.965636055; + atomic_mass_map[190430000] = 42.960734702; + atomic_mass_map[200430000] = 42.958766438; + atomic_mass_map[210430000] = 42.961150474; + atomic_mass_map[220430000] = 42.96852252; + atomic_mass_map[230430000] = 42.980766; + atomic_mass_map[240430000] = 42.99753; + atomic_mass_map[140440000] = 44.03061; + atomic_mass_map[150440000] = 44.01121; + atomic_mass_map[160440000] = 43.990118848; + atomic_mass_map[170440000] = 43.977874543; + atomic_mass_map[180440000] = 43.964923815; + atomic_mass_map[190440000] = 43.961586985; + atomic_mass_map[200440000] = 43.955481561; + atomic_mass_map[210440000] = 43.959402875; + atomic_mass_map[220440000] = 43.959689949; + atomic_mass_map[230440000] = 43.97411; + atomic_mass_map[240440000] = 43.98536; + atomic_mass_map[250440000] = 44.00715; + atomic_mass_map[140450000] = 45.03995; + atomic_mass_map[150450000] = 45.01645; + atomic_mass_map[160450000] = 44.995717; + atomic_mass_map[170450000] = 44.98029; + atomic_mass_map[180450000] = 44.968039733; + atomic_mass_map[190450000] = 44.960691493; + atomic_mass_map[200450000] = 44.95618635; + atomic_mass_map[210450000] = 44.955908275; + atomic_mass_map[220450000] = 44.958121983; + atomic_mass_map[230450000] = 44.96577482; + atomic_mass_map[240450000] = 44.97905; + atomic_mass_map[250450000] = 44.99449; + atomic_mass_map[260450000] = 45.014419; + atomic_mass_map[150460000] = 46.02446; + atomic_mass_map[160460000] = 46.00004; + atomic_mass_map[170460000] = 45.985174; + atomic_mass_map[180460000] = 45.968082712; + atomic_mass_map[190460000] = 45.961981586; + atomic_mass_map[200460000] = 45.953689023; + atomic_mass_map[210460000] = 45.955168257; + atomic_mass_map[220460000] = 45.952627718; + atomic_mass_map[230460000] = 45.960198775; + atomic_mass_map[240460000] = 45.968358861; + atomic_mass_map[250460000] = 45.98609; + atomic_mass_map[260460000] = 46.00063; + atomic_mass_map[150470000] = 47.03139; + atomic_mass_map[160470000] = 47.00795; + atomic_mass_map[170470000] = 46.98916; + atomic_mass_map[180470000] = 46.972934865; + atomic_mass_map[190470000] = 46.961661614; + atomic_mass_map[200470000] = 46.95454243; + atomic_mass_map[210470000] = 46.95240374; + atomic_mass_map[220470000] = 46.951758787; + atomic_mass_map[230470000] = 46.954904914; + atomic_mass_map[240470000] = 46.962897359; + atomic_mass_map[250470000] = 46.975775; + atomic_mass_map[260470000] = 46.99185; + atomic_mass_map[270470000] = 47.01057; + atomic_mass_map[160480000] = 48.0137; + atomic_mass_map[170480000] = 47.99564; + atomic_mass_map[180480000] = 47.97591; + atomic_mass_map[190480000] = 47.965341186; + atomic_mass_map[200480000] = 47.952522765; + atomic_mass_map[210480000] = 47.952223611; + atomic_mass_map[220480000] = 47.947941979; + atomic_mass_map[230480000] = 47.952252223; + atomic_mass_map[240480000] = 47.954029061; + atomic_mass_map[250480000] = 47.96852; + atomic_mass_map[260480000] = 47.98023; + atomic_mass_map[270480000] = 48.00093; + atomic_mass_map[280480000] = 48.017688; + atomic_mass_map[160490000] = 49.022762; + atomic_mass_map[170490000] = 49.00123; + atomic_mass_map[180490000] = 48.9819; + atomic_mass_map[190490000] = 48.968210755; + atomic_mass_map[200490000] = 48.955662736; + atomic_mass_map[210490000] = 48.950014629; + atomic_mass_map[220490000] = 48.947865676; + atomic_mass_map[230490000] = 48.948511795; + atomic_mass_map[240490000] = 48.951333349; + atomic_mass_map[250490000] = 48.959595297; + atomic_mass_map[260490000] = 48.973429; + atomic_mass_map[270490000] = 48.98891; + atomic_mass_map[280490000] = 49.0077; + atomic_mass_map[170500000] = 50.00905; + atomic_mass_map[180500000] = 49.98613; + atomic_mass_map[190500000] = 49.972380017; + atomic_mass_map[200500000] = 49.957499217; + atomic_mass_map[210500000] = 49.952176274; + atomic_mass_map[220500000] = 49.944786889; + atomic_mass_map[230500000] = 49.947156014; + atomic_mass_map[240500000] = 49.946041833; + atomic_mass_map[250500000] = 49.954237781; + atomic_mass_map[260500000] = 49.962974929; + atomic_mass_map[270500000] = 49.98091; + atomic_mass_map[280500000] = 49.99474; + atomic_mass_map[170510000] = 51.01554; + atomic_mass_map[180510000] = 50.9937; + atomic_mass_map[190510000] = 50.975828036; + atomic_mass_map[200510000] = 50.960988981; + atomic_mass_map[210510000] = 50.953591956; + atomic_mass_map[220510000] = 50.946610651; + atomic_mass_map[230510000] = 50.943957036; + atomic_mass_map[240510000] = 50.944765018; + atomic_mass_map[250510000] = 50.948208475; + atomic_mass_map[260510000] = 50.956841021; + atomic_mass_map[270510000] = 50.970647; + atomic_mass_map[280510000] = 50.98611; + atomic_mass_map[180520000] = 51.99896; + atomic_mass_map[190520000] = 51.98224; + atomic_mass_map[200520000] = 51.963217145; + atomic_mass_map[210520000] = 51.956879479; + atomic_mass_map[220520000] = 51.946893006; + atomic_mass_map[230520000] = 51.944773007; + atomic_mass_map[240520000] = 51.940506231; + atomic_mass_map[250520000] = 51.945563949; + atomic_mass_map[260520000] = 51.948113146; + atomic_mass_map[270520000] = 51.96351; + atomic_mass_map[280520000] = 51.9748; + atomic_mass_map[290520000] = 51.99671; + atomic_mass_map[180530000] = 53.00729; + atomic_mass_map[190530000] = 52.98746; + atomic_mass_map[200530000] = 52.96945; + atomic_mass_map[210530000] = 52.95909; + atomic_mass_map[220530000] = 52.949725933; + atomic_mass_map[230530000] = 52.944336741; + atomic_mass_map[240530000] = 52.940648147; + atomic_mass_map[250530000] = 52.941288891; + atomic_mass_map[260530000] = 52.945306428; + atomic_mass_map[270530000] = 52.954204077; + atomic_mass_map[280530000] = 52.96819; + atomic_mass_map[290530000] = 52.98459; + atomic_mass_map[190540000] = 53.99463; + atomic_mass_map[200540000] = 53.9734; + atomic_mass_map[210540000] = 53.96393; + atomic_mass_map[220540000] = 53.951049547; + atomic_mass_map[230540000] = 53.946438617; + atomic_mass_map[240540000] = 53.938879158; + atomic_mass_map[250540000] = 53.940357615; + atomic_mass_map[260540000] = 53.939608986; + atomic_mass_map[270540000] = 53.948459872; + atomic_mass_map[280540000] = 53.957892463; + atomic_mass_map[290540000] = 53.97666; + atomic_mass_map[300540000] = 53.992039; + atomic_mass_map[190550000] = 55.00076; + atomic_mass_map[200550000] = 54.9803; + atomic_mass_map[210550000] = 54.967818892; + atomic_mass_map[220550000] = 54.955268064; + atomic_mass_map[230550000] = 54.94724215; + atomic_mass_map[240550000] = 54.940838434; + atomic_mass_map[250550000] = 54.93804391; + atomic_mass_map[260550000] = 54.938291994; + atomic_mass_map[270550000] = 54.941997202; + atomic_mass_map[280550000] = 54.951330632; + atomic_mass_map[290550000] = 54.966038; + atomic_mass_map[300550000] = 54.98398; + atomic_mass_map[190560000] = 56.00851; + atomic_mass_map[200560000] = 55.98508; + atomic_mass_map[210560000] = 55.97345; + atomic_mass_map[220560000] = 55.957911353; + atomic_mass_map[230560000] = 55.95048481; + atomic_mass_map[240560000] = 55.940653139; + atomic_mass_map[250560000] = 55.938903691; + atomic_mass_map[260560000] = 55.934936326; + atomic_mass_map[270560000] = 55.939838798; + atomic_mass_map[280560000] = 55.942128549; + atomic_mass_map[290560000] = 55.95895; + atomic_mass_map[300560000] = 55.97254; + atomic_mass_map[310560000] = 55.99536; + atomic_mass_map[200570000] = 56.99262; + atomic_mass_map[210570000] = 56.97777; + atomic_mass_map[220570000] = 56.963641626; + atomic_mass_map[230570000] = 56.952518869; + atomic_mass_map[240570000] = 56.943613013; + atomic_mass_map[250570000] = 56.938286096; + atomic_mass_map[260570000] = 56.935392841; + atomic_mass_map[270570000] = 56.936290574; + atomic_mass_map[280570000] = 56.939792184; + atomic_mass_map[290570000] = 56.949212498; + atomic_mass_map[300570000] = 56.96506; + atomic_mass_map[310570000] = 56.9832; + atomic_mass_map[200580000] = 57.99794; + atomic_mass_map[210580000] = 57.98403; + atomic_mass_map[220580000] = 57.9666; + atomic_mass_map[230580000] = 57.956715235; + atomic_mass_map[240580000] = 57.944353129; + atomic_mass_map[250580000] = 57.940066645; + atomic_mass_map[260580000] = 57.933274431; + atomic_mass_map[270580000] = 57.935752073; + atomic_mass_map[280580000] = 57.935342414; + atomic_mass_map[290580000] = 57.944533046; + atomic_mass_map[300580000] = 57.954591062; + atomic_mass_map[310580000] = 57.97478; + atomic_mass_map[320580000] = 57.99172; + atomic_mass_map[210590000] = 58.98894; + atomic_mass_map[220590000] = 58.97247; + atomic_mass_map[230590000] = 58.959385659; + atomic_mass_map[240590000] = 58.948586367; + atomic_mass_map[250590000] = 58.940391113; + atomic_mass_map[260590000] = 58.934874338; + atomic_mass_map[270590000] = 58.933194288; + atomic_mass_map[280590000] = 58.934346202; + atomic_mass_map[290590000] = 58.939497482; + atomic_mass_map[300590000] = 58.949312657; + atomic_mass_map[310590000] = 58.96353; + atomic_mass_map[320590000] = 58.98249; + atomic_mass_map[210600000] = 59.99565; + atomic_mass_map[220600000] = 59.97603; + atomic_mass_map[230600000] = 59.96431329; + atomic_mass_map[240600000] = 59.950076033; + atomic_mass_map[250600000] = 59.943136576; + atomic_mass_map[260600000] = 59.9340711; + atomic_mass_map[270600000] = 59.933816299; + atomic_mass_map[280600000] = 59.930785885; + atomic_mass_map[290600000] = 59.937364544; + atomic_mass_map[300600000] = 59.941842103; + atomic_mass_map[310600000] = 59.95729; + atomic_mass_map[320600000] = 59.97036; + atomic_mass_map[330600000] = 59.99388; + atomic_mass_map[210610000] = 61.001; + atomic_mass_map[220610000] = 60.98245; + atomic_mass_map[230610000] = 60.96725; + atomic_mass_map[240610000] = 60.954422585; + atomic_mass_map[250610000] = 60.944452544; + atomic_mass_map[260610000] = 60.936746244; + atomic_mass_map[270610000] = 60.93247662; + atomic_mass_map[280610000] = 60.93105557; + atomic_mass_map[290610000] = 60.933457612; + atomic_mass_map[300610000] = 60.939507188; + atomic_mass_map[310610000] = 60.949398984; + atomic_mass_map[320610000] = 60.96379; + atomic_mass_map[330610000] = 60.98112; + atomic_mass_map[220620000] = 61.98651; + atomic_mass_map[230620000] = 61.97265; + atomic_mass_map[240620000] = 61.956097451; + atomic_mass_map[250620000] = 61.947954; + atomic_mass_map[260620000] = 61.936791812; + atomic_mass_map[270620000] = 61.934058809; + atomic_mass_map[280620000] = 61.928345365; + atomic_mass_map[290620000] = 61.932595415; + atomic_mass_map[300620000] = 61.934333971; + atomic_mass_map[310620000] = 61.944190251; + atomic_mass_map[320620000] = 61.95502; + atomic_mass_map[330620000] = 61.97361; + atomic_mass_map[220630000] = 62.99375; + atomic_mass_map[230630000] = 62.97639; + atomic_mass_map[240630000] = 62.961650731; + atomic_mass_map[250630000] = 62.949664675; + atomic_mass_map[260630000] = 62.9402727; + atomic_mass_map[270630000] = 62.933600217; + atomic_mass_map[280630000] = 62.929669626; + atomic_mass_map[290630000] = 62.929597723; + atomic_mass_map[300630000] = 62.933211474; + atomic_mass_map[310630000] = 62.939294196; + atomic_mass_map[320630000] = 62.949628; + atomic_mass_map[330630000] = 62.9639; + atomic_mass_map[230640000] = 63.98264; + atomic_mass_map[240640000] = 63.96408; + atomic_mass_map[250640000] = 63.95384937; + atomic_mass_map[260640000] = 63.940987763; + atomic_mass_map[270640000] = 63.935810764; + atomic_mass_map[280640000] = 63.927966816; + atomic_mass_map[290640000] = 63.929764342; + atomic_mass_map[300640000] = 63.929142013; + atomic_mass_map[310640000] = 63.93684044; + atomic_mass_map[320640000] = 63.941689913; + atomic_mass_map[330640000] = 63.957432; + atomic_mass_map[340640000] = 63.97109; + atomic_mass_map[230650000] = 64.9875; + atomic_mass_map[240650000] = 64.96996; + atomic_mass_map[250650000] = 64.95601975; + atomic_mass_map[260650000] = 64.945011462; + atomic_mass_map[270650000] = 64.936462072; + atomic_mass_map[280650000] = 64.930085173; + atomic_mass_map[290650000] = 64.927789704; + atomic_mass_map[300650000] = 64.92924077; + atomic_mass_map[310650000] = 64.932734588; + atomic_mass_map[320650000] = 64.939368137; + atomic_mass_map[330650000] = 64.949611; + atomic_mass_map[340650000] = 64.9644; + atomic_mass_map[230660000] = 65.99398; + atomic_mass_map[240660000] = 65.97366; + atomic_mass_map[250660000] = 65.960546834; + atomic_mass_map[260660000] = 65.94624996; + atomic_mass_map[270660000] = 65.939442945; + atomic_mass_map[280660000] = 65.929139334; + atomic_mass_map[290660000] = 65.928869032; + atomic_mass_map[300660000] = 65.926033809; + atomic_mass_map[310660000] = 65.931589401; + atomic_mass_map[320660000] = 65.933862126; + atomic_mass_map[330660000] = 65.944148779; + atomic_mass_map[340660000] = 65.95559; + atomic_mass_map[240670000] = 66.98016; + atomic_mass_map[250670000] = 66.96424; + atomic_mass_map[260670000] = 66.950543395; + atomic_mass_map[270670000] = 66.940609627; + atomic_mass_map[280670000] = 66.931569414; + atomic_mass_map[290670000] = 66.927730314; + atomic_mass_map[300670000] = 66.927127746; + atomic_mass_map[310670000] = 66.928202547; + atomic_mass_map[320670000] = 66.932733861; + atomic_mass_map[330670000] = 66.939251112; + atomic_mass_map[340670000] = 66.949994; + atomic_mass_map[350670000] = 66.96465; + atomic_mass_map[240680000] = 67.98403; + atomic_mass_map[250680000] = 67.96962; + atomic_mass_map[260680000] = 67.95295155; + atomic_mass_map[270680000] = 67.944257589; + atomic_mass_map[280680000] = 67.931868789; + atomic_mass_map[290680000] = 67.929610889; + atomic_mass_map[300680000] = 67.924844554; + atomic_mass_map[310680000] = 67.927980485; + atomic_mass_map[320680000] = 67.928095307; + atomic_mass_map[330680000] = 67.93677413; + atomic_mass_map[340680000] = 67.941825238; + atomic_mass_map[350680000] = 67.958732; + atomic_mass_map[250690000] = 68.97366; + atomic_mass_map[260690000] = 68.95807; + atomic_mass_map[270690000] = 68.946141268; + atomic_mass_map[280690000] = 68.935610269; + atomic_mass_map[290690000] = 68.929429269; + atomic_mass_map[300690000] = 68.926550682; + atomic_mass_map[310690000] = 68.925573541; + atomic_mass_map[320690000] = 68.927964481; + atomic_mass_map[330690000] = 68.932246302; + atomic_mass_map[340690000] = 68.939414847; + atomic_mass_map[350690000] = 68.950497297; + atomic_mass_map[360690000] = 68.96518; + atomic_mass_map[250700000] = 69.97937; + atomic_mass_map[260700000] = 69.96102; + atomic_mass_map[270700000] = 69.94963; + atomic_mass_map[280700000] = 69.936431302; + atomic_mass_map[290700000] = 69.932392079; + atomic_mass_map[300700000] = 69.925319208; + atomic_mass_map[310700000] = 69.926021927; + atomic_mass_map[320700000] = 69.92424875; + atomic_mass_map[330700000] = 69.930926195; + atomic_mass_map[340700000] = 69.933515523; + atomic_mass_map[350700000] = 69.944792323; + atomic_mass_map[360700000] = 69.95604; + atomic_mass_map[250710000] = 70.98368; + atomic_mass_map[260710000] = 70.96672; + atomic_mass_map[270710000] = 70.952366923; + atomic_mass_map[280710000] = 70.940518964; + atomic_mass_map[290710000] = 70.932676833; + atomic_mass_map[300710000] = 70.927719582; + atomic_mass_map[310710000] = 70.924702577; + atomic_mass_map[320710000] = 70.924952327; + atomic_mass_map[330710000] = 70.927113801; + atomic_mass_map[340710000] = 70.932209433; + atomic_mass_map[350710000] = 70.939342155; + atomic_mass_map[360710000] = 70.950265696; + atomic_mass_map[370710000] = 70.96532; + atomic_mass_map[260720000] = 71.96983; + atomic_mass_map[270720000] = 71.95729; + atomic_mass_map[280720000] = 71.941785926; + atomic_mass_map[290720000] = 71.935820307; + atomic_mass_map[300720000] = 71.926842807; + atomic_mass_map[310720000] = 71.926367474; + atomic_mass_map[320720000] = 71.922075826; + atomic_mass_map[330720000] = 71.926752294; + atomic_mass_map[340720000] = 71.927140507; + atomic_mass_map[350720000] = 71.936588619; + atomic_mass_map[360720000] = 71.942092407; + atomic_mass_map[370720000] = 71.95908; + atomic_mass_map[260730000] = 72.97572; + atomic_mass_map[270730000] = 72.96039; + atomic_mass_map[280730000] = 72.946206683; + atomic_mass_map[290730000] = 72.936674378; + atomic_mass_map[300730000] = 72.929582582; + atomic_mass_map[310730000] = 72.925174682; + atomic_mass_map[320730000] = 72.923458956; + atomic_mass_map[330730000] = 72.923829086; + atomic_mass_map[340730000] = 72.926754882; + atomic_mass_map[350730000] = 72.931671503; + atomic_mass_map[360730000] = 72.939289195; + atomic_mass_map[370730000] = 72.950529; + atomic_mass_map[380730000] = 72.9657; + atomic_mass_map[260740000] = 73.97935; + atomic_mass_map[270740000] = 73.96515; + atomic_mass_map[280740000] = 73.94798; + atomic_mass_map[290740000] = 73.939874862; + atomic_mass_map[300740000] = 73.929407262; + atomic_mass_map[310740000] = 73.926945727; + atomic_mass_map[320740000] = 73.921177761; + atomic_mass_map[330740000] = 73.923928598; + atomic_mass_map[340740000] = 73.922475934; + atomic_mass_map[350740000] = 73.929910177; + atomic_mass_map[360740000] = 73.93308402; + atomic_mass_map[370740000] = 73.944265894; + atomic_mass_map[380740000] = 73.95617; + atomic_mass_map[270750000] = 74.96876; + atomic_mass_map[280750000] = 74.9525; + atomic_mass_map[290750000] = 74.941522606; + atomic_mass_map[300750000] = 74.932840246; + atomic_mass_map[310750000] = 74.926500246; + atomic_mass_map[320750000] = 74.92285837; + atomic_mass_map[330750000] = 74.921594567; + atomic_mass_map[340750000] = 74.92252287; + atomic_mass_map[350750000] = 74.925810452; + atomic_mass_map[360750000] = 74.930945746; + atomic_mass_map[370750000] = 74.938573201; + atomic_mass_map[380750000] = 74.94995277; + atomic_mass_map[270760000] = 75.97413; + atomic_mass_map[280760000] = 75.95533; + atomic_mass_map[290760000] = 75.945275026; + atomic_mass_map[300760000] = 75.933114957; + atomic_mass_map[310760000] = 75.928827626; + atomic_mass_map[320760000] = 75.921402726; + atomic_mass_map[330760000] = 75.922392015; + atomic_mass_map[340760000] = 75.919213704; + atomic_mass_map[350760000] = 75.924541576; + atomic_mass_map[360760000] = 75.925910271; + atomic_mass_map[370760000] = 75.935073032; + atomic_mass_map[380760000] = 75.941762761; + atomic_mass_map[390760000] = 75.95856; + atomic_mass_map[280770000] = 76.96055; + atomic_mass_map[290770000] = 76.94792; + atomic_mass_map[300770000] = 76.936887199; + atomic_mass_map[310770000] = 76.9291543; + atomic_mass_map[320770000] = 76.923549843; + atomic_mass_map[330770000] = 76.920647563; + atomic_mass_map[340770000] = 76.919914154; + atomic_mass_map[350770000] = 76.921379198; + atomic_mass_map[360770000] = 76.92467; + atomic_mass_map[370770000] = 76.9304016; + atomic_mass_map[380770000] = 76.937945455; + atomic_mass_map[390770000] = 76.949781; + atomic_mass_map[280780000] = 77.96336; + atomic_mass_map[290780000] = 77.95223; + atomic_mass_map[300780000] = 77.938289206; + atomic_mass_map[310780000] = 77.931608845; + atomic_mass_map[320780000] = 77.922852908; + atomic_mass_map[330780000] = 77.921827773; + atomic_mass_map[340780000] = 77.91730928; + atomic_mass_map[350780000] = 77.921145895; + atomic_mass_map[360780000] = 77.920364944; + atomic_mass_map[370780000] = 77.928141868; + atomic_mass_map[380780000] = 77.93217998; + atomic_mass_map[390780000] = 77.94361; + atomic_mass_map[400780000] = 77.95566; + atomic_mass_map[280790000] = 78.970252; + atomic_mass_map[290790000] = 78.95502; + atomic_mass_map[300790000] = 78.942638069; + atomic_mass_map[310790000] = 78.932852301; + atomic_mass_map[320790000] = 78.925360127; + atomic_mass_map[330790000] = 78.920948423; + atomic_mass_map[340790000] = 78.918499287; + atomic_mass_map[350790000] = 78.918337579; + atomic_mass_map[360790000] = 78.920082923; + atomic_mass_map[370790000] = 78.923989864; + atomic_mass_map[380790000] = 78.929707664; + atomic_mass_map[390790000] = 78.937351299; + atomic_mass_map[400790000] = 78.94948; + atomic_mass_map[290800000] = 79.96089; + atomic_mass_map[300800000] = 79.944552931; + atomic_mass_map[310800000] = 79.936420775; + atomic_mass_map[320800000] = 79.925350775; + atomic_mass_map[330800000] = 79.922474584; + atomic_mass_map[340800000] = 79.916521762; + atomic_mass_map[350800000] = 79.918529788; + atomic_mass_map[360800000] = 79.916378084; + atomic_mass_map[370800000] = 79.922516444; + atomic_mass_map[380800000] = 79.924517516; + atomic_mass_map[390800000] = 79.934356096; + atomic_mass_map[400800000] = 79.9404; + atomic_mass_map[290810000] = 80.965872; + atomic_mass_map[300810000] = 80.950402619; + atomic_mass_map[310810000] = 80.938133843; + atomic_mass_map[320810000] = 80.928832943; + atomic_mass_map[330810000] = 80.92213228; + atomic_mass_map[340810000] = 80.917993023; + atomic_mass_map[350810000] = 80.91628969; + atomic_mass_map[360810000] = 80.916591181; + atomic_mass_map[370810000] = 80.918993936; + atomic_mass_map[380810000] = 80.923211395; + atomic_mass_map[390810000] = 80.929455556; + atomic_mass_map[400810000] = 80.937308892; + atomic_mass_map[410810000] = 80.9496; + atomic_mass_map[290820000] = 81.972442; + atomic_mass_map[300820000] = 81.95426; + atomic_mass_map[310820000] = 81.943176533; + atomic_mass_map[320820000] = 81.929774033; + atomic_mass_map[330820000] = 81.924741233; + atomic_mass_map[340820000] = 81.916699497; + atomic_mass_map[350820000] = 81.916803246; + atomic_mass_map[360820000] = 81.91348273; + atomic_mass_map[370820000] = 81.918209024; + atomic_mass_map[380820000] = 81.918399855; + atomic_mass_map[390820000] = 81.926931401; + atomic_mass_map[400820000] = 81.931354; + atomic_mass_map[410820000] = 81.94396; + atomic_mass_map[300830000] = 82.96056; + atomic_mass_map[310830000] = 82.947120301; + atomic_mass_map[320830000] = 82.934539101; + atomic_mass_map[330830000] = 82.925206901; + atomic_mass_map[340830000] = 82.919118569; + atomic_mass_map[350830000] = 82.91517562; + atomic_mass_map[360830000] = 82.914127164; + atomic_mass_map[370830000] = 82.915114183; + atomic_mass_map[380830000] = 82.917554374; + atomic_mass_map[390830000] = 82.92248525; + atomic_mass_map[400830000] = 82.92924215; + atomic_mass_map[410830000] = 82.937293731; + atomic_mass_map[420830000] = 82.94988; + atomic_mass_map[300840000] = 83.965206; + atomic_mass_map[310840000] = 83.95246; + atomic_mass_map[320840000] = 83.937575092; + atomic_mass_map[330840000] = 83.929303292; + atomic_mass_map[340840000] = 83.918466763; + atomic_mass_map[350840000] = 83.916496419; + atomic_mass_map[360840000] = 83.9114977282; + atomic_mass_map[370840000] = 83.914375229; + atomic_mass_map[380840000] = 83.913419136; + atomic_mass_map[390840000] = 83.920672086; + atomic_mass_map[400840000] = 83.923326899; + atomic_mass_map[410840000] = 83.934492; + atomic_mass_map[420840000] = 83.94149; + atomic_mass_map[300850000] = 84.97226; + atomic_mass_map[310850000] = 84.95699; + atomic_mass_map[320850000] = 84.94296966; + atomic_mass_map[330850000] = 84.93216366; + atomic_mass_map[340850000] = 84.92226076; + atomic_mass_map[350850000] = 84.91564576; + atomic_mass_map[360850000] = 84.912527262; + atomic_mass_map[370850000] = 84.9117897379; + atomic_mass_map[380850000] = 84.912932046; + atomic_mass_map[390850000] = 84.916433039; + atomic_mass_map[400850000] = 84.921444448; + atomic_mass_map[410850000] = 84.928845837; + atomic_mass_map[420850000] = 84.938260737; + atomic_mass_map[430850000] = 84.95058; + atomic_mass_map[310860000] = 85.96301; + atomic_mass_map[320860000] = 85.94658; + atomic_mass_map[330860000] = 85.936701533; + atomic_mass_map[340860000] = 85.924311733; + atomic_mass_map[350860000] = 85.918805433; + atomic_mass_map[360860000] = 85.9106106269; + atomic_mass_map[370860000] = 85.911167425; + atomic_mass_map[380860000] = 85.909260608; + atomic_mass_map[390860000] = 85.91488598; + atomic_mass_map[400860000] = 85.916297204; + atomic_mass_map[410860000] = 85.925782798; + atomic_mass_map[420860000] = 85.931174817; + atomic_mass_map[430860000] = 85.94493; + atomic_mass_map[310870000] = 86.968245; + atomic_mass_map[320870000] = 86.95268; + atomic_mass_map[330870000] = 86.940291718; + atomic_mass_map[340870000] = 86.928688618; + atomic_mass_map[350870000] = 86.920674018; + atomic_mass_map[360870000] = 86.91335476; + atomic_mass_map[370870000] = 86.909180531; + atomic_mass_map[380870000] = 86.908877531; + atomic_mass_map[390870000] = 86.910876138; + atomic_mass_map[400870000] = 86.914817988; + atomic_mass_map[410870000] = 86.920693747; + atomic_mass_map[420870000] = 86.928196201; + atomic_mass_map[430870000] = 86.938067187; + atomic_mass_map[440870000] = 86.95069; + atomic_mass_map[320880000] = 87.95691; + atomic_mass_map[330880000] = 87.94555; + atomic_mass_map[340880000] = 87.931417492; + atomic_mass_map[350880000] = 87.924083292; + atomic_mass_map[360880000] = 87.914447881; + atomic_mass_map[370880000] = 87.911315592; + atomic_mass_map[380880000] = 87.905612542; + atomic_mass_map[390880000] = 87.909501563; + atomic_mass_map[400880000] = 87.91022129; + atomic_mass_map[410880000] = 87.91822171; + atomic_mass_map[420880000] = 87.921967781; + atomic_mass_map[430880000] = 87.933782381; + atomic_mass_map[440880000] = 87.9416; + atomic_mass_map[320890000] = 88.96379; + atomic_mass_map[330890000] = 88.94976; + atomic_mass_map[340890000] = 88.93666906; + atomic_mass_map[350890000] = 88.92670456; + atomic_mass_map[360890000] = 88.917835451; + atomic_mass_map[370890000] = 88.912278298; + atomic_mass_map[380890000] = 88.907451095; + atomic_mass_map[390890000] = 88.905840348; + atomic_mass_map[400890000] = 88.908881441; + atomic_mass_map[410890000] = 88.913445073; + atomic_mass_map[420890000] = 88.919468151; + atomic_mass_map[430890000] = 88.927648651; + atomic_mass_map[440890000] = 88.93762; + atomic_mass_map[450890000] = 88.950584; + atomic_mass_map[320900000] = 89.96863; + atomic_mass_map[330900000] = 89.95563; + atomic_mass_map[340900000] = 89.940096; + atomic_mass_map[350900000] = 89.93129285; + atomic_mass_map[360900000] = 89.919527931; + atomic_mass_map[370900000] = 89.914798453; + atomic_mass_map[380900000] = 89.907730037; + atomic_mass_map[390900000] = 89.907143942; + atomic_mass_map[400900000] = 89.904697659; + atomic_mass_map[410900000] = 89.911258449; + atomic_mass_map[420900000] = 89.913930861; + atomic_mass_map[430900000] = 89.924073921; + atomic_mass_map[440900000] = 89.93034438; + atomic_mass_map[450900000] = 89.94422; + atomic_mass_map[330910000] = 90.96039; + atomic_mass_map[340910000] = 90.94596; + atomic_mass_map[350910000] = 90.934398619; + atomic_mass_map[360910000] = 90.923806311; + atomic_mass_map[370910000] = 90.916537169; + atomic_mass_map[380910000] = 90.910195442; + atomic_mass_map[390910000] = 90.907297442; + atomic_mass_map[400910000] = 90.905639587; + atomic_mass_map[410910000] = 90.906989658; + atomic_mass_map[420910000] = 90.911745312; + atomic_mass_map[430910000] = 90.918425397; + atomic_mass_map[440910000] = 90.926741859; + atomic_mass_map[450910000] = 90.93688; + atomic_mass_map[460910000] = 90.95032; + atomic_mass_map[330920000] = 91.96674; + atomic_mass_map[340920000] = 91.94984; + atomic_mass_map[350920000] = 91.939631597; + atomic_mass_map[360920000] = 91.926173094; + atomic_mass_map[370920000] = 91.919728389; + atomic_mass_map[380920000] = 91.91103819; + atomic_mass_map[390920000] = 91.908945142; + atomic_mass_map[400920000] = 91.905034675; + atomic_mass_map[410920000] = 91.907188081; + atomic_mass_map[420920000] = 91.906807959; + atomic_mass_map[430920000] = 91.915269779; + atomic_mass_map[440920000] = 91.920234375; + atomic_mass_map[450920000] = 91.932367694; + atomic_mass_map[460920000] = 91.94088; + atomic_mass_map[340930000] = 92.95629; + atomic_mass_map[350930000] = 92.943134; + atomic_mass_map[360930000] = 92.931147174; + atomic_mass_map[370930000] = 92.922039269; + atomic_mass_map[380930000] = 92.914024228; + atomic_mass_map[390930000] = 92.909577886; + atomic_mass_map[400930000] = 92.906469947; + atomic_mass_map[410930000] = 92.906373004; + atomic_mass_map[420930000] = 92.906809577; + atomic_mass_map[430930000] = 92.910245952; + atomic_mass_map[440930000] = 92.917104444; + atomic_mass_map[450930000] = 92.925912781; + atomic_mass_map[460930000] = 92.936511; + atomic_mass_map[470930000] = 92.95033; + atomic_mass_map[340940000] = 93.96049; + atomic_mass_map[350940000] = 93.9489; + atomic_mass_map[360940000] = 93.934140454; + atomic_mass_map[370940000] = 93.926394814; + atomic_mass_map[380940000] = 93.915355602; + atomic_mass_map[390940000] = 93.911590582; + atomic_mass_map[400940000] = 93.906310828; + atomic_mass_map[410940000] = 93.907278836; + atomic_mass_map[420940000] = 93.905084903; + atomic_mass_map[430940000] = 93.909653637; + atomic_mass_map[440940000] = 93.911342863; + atomic_mass_map[450940000] = 93.921730453; + atomic_mass_map[460940000] = 93.929037603; + atomic_mass_map[470940000] = 93.943734; + atomic_mass_map[340950000] = 94.9673; + atomic_mass_map[350950000] = 94.95301; + atomic_mass_map[360950000] = 94.939710924; + atomic_mass_map[370950000] = 94.929260004; + atomic_mass_map[380950000] = 94.919352941; + atomic_mass_map[390950000] = 94.912816058; + atomic_mass_map[400950000] = 94.90803853; + atomic_mass_map[410950000] = 94.906832404; + atomic_mass_map[420950000] = 94.905838766; + atomic_mass_map[430950000] = 94.907653612; + atomic_mass_map[440950000] = 94.910405759; + atomic_mass_map[450950000] = 94.915897895; + atomic_mass_map[460950000] = 94.924889838; + atomic_mass_map[470950000] = 94.93602; + atomic_mass_map[480950000] = 94.94994; + atomic_mass_map[350960000] = 95.95903; + atomic_mass_map[360960000] = 95.943016618; + atomic_mass_map[370960000] = 95.93413338; + atomic_mass_map[380960000] = 95.921706575; + atomic_mass_map[390960000] = 95.915896835; + atomic_mass_map[400960000] = 95.908271433; + atomic_mass_map[410960000] = 95.908097286; + atomic_mass_map[420960000] = 95.904676115; + atomic_mass_map[430960000] = 95.907868022; + atomic_mass_map[440960000] = 95.907590255; + atomic_mass_map[450960000] = 95.914453051; + atomic_mass_map[460960000] = 95.918215084; + atomic_mass_map[470960000] = 95.930743906; + atomic_mass_map[480960000] = 95.94034; + atomic_mass_map[350970000] = 96.96344; + atomic_mass_map[360970000] = 96.949088785; + atomic_mass_map[370970000] = 96.937177136; + atomic_mass_map[380970000] = 96.92637396; + atomic_mass_map[390970000] = 96.918274106; + atomic_mass_map[400970000] = 96.910951206; + atomic_mass_map[410970000] = 96.908095932; + atomic_mass_map[420970000] = 96.906018118; + atomic_mass_map[430970000] = 96.906366706; + atomic_mass_map[440970000] = 96.90754712; + atomic_mass_map[450970000] = 96.911329216; + atomic_mass_map[460970000] = 96.916471988; + atomic_mass_map[470970000] = 96.923965326; + atomic_mass_map[480970000] = 96.9351; + atomic_mass_map[490970000] = 96.94934; + atomic_mass_map[350980000] = 97.96946; + atomic_mass_map[360980000] = 97.95243; + atomic_mass_map[370980000] = 97.941686868; + atomic_mass_map[380980000] = 97.928688778; + atomic_mass_map[390980000] = 97.922382119; + atomic_mass_map[400980000] = 97.912728892; + atomic_mass_map[410980000] = 97.910326459; + atomic_mass_map[420980000] = 97.90540482; + atomic_mass_map[430980000] = 97.907212365; + atomic_mass_map[440980000] = 97.905286813; + atomic_mass_map[450980000] = 97.910707839; + atomic_mass_map[460980000] = 97.912698337; + atomic_mass_map[470980000] = 97.921559973; + atomic_mass_map[480980000] = 97.927389318; + atomic_mass_map[490980000] = 97.94214; + atomic_mass_map[360990000] = 98.95839; + atomic_mass_map[370990000] = 98.945028735; + atomic_mass_map[380990000] = 98.932890666; + atomic_mass_map[390990000] = 98.924147979; + atomic_mass_map[400990000] = 98.916666746; + atomic_mass_map[410990000] = 98.911613177; + atomic_mass_map[420990000] = 98.907708509; + atomic_mass_map[430990000] = 98.906250844; + atomic_mass_map[440990000] = 98.905934082; + atomic_mass_map[450990000] = 98.908128239; + atomic_mass_map[460990000] = 98.911774806; + atomic_mass_map[470990000] = 98.917645768; + atomic_mass_map[480990000] = 98.924925848; + atomic_mass_map[490990000] = 98.93411; + atomic_mass_map[500990000] = 98.94853; + atomic_mass_map[361000000] = 99.96237; + atomic_mass_map[371000000] = 99.95003; + atomic_mass_map[381000000] = 99.935769692; + atomic_mass_map[391000000] = 99.927714692; + atomic_mass_map[401000000] = 99.918000576; + atomic_mass_map[411000000] = 99.914327592; + atomic_mass_map[421000000] = 99.907471782; + atomic_mass_map[431000000] = 99.907653877; + atomic_mass_map[441000000] = 99.904214256; + atomic_mass_map[451000000] = 99.908117264; + atomic_mass_map[461000000] = 99.908504805; + atomic_mass_map[471000000] = 99.916115445; + atomic_mass_map[481000000] = 99.92034882; + atomic_mass_map[491000000] = 99.93095718; + atomic_mass_map[501000000] = 99.938504196; + atomic_mass_map[361010000] = 100.96873; + atomic_mass_map[371010000] = 100.954039; + atomic_mass_map[381010000] = 100.940351743; + atomic_mass_map[391010000] = 100.930147705; + atomic_mass_map[401010000] = 100.921447964; + atomic_mass_map[411010000] = 100.915310254; + atomic_mass_map[421010000] = 100.910341447; + atomic_mass_map[431010000] = 100.907309057; + atomic_mass_map[441010000] = 100.905576872; + atomic_mass_map[451010000] = 100.906160613; + atomic_mass_map[461010000] = 100.908286412; + atomic_mass_map[471010000] = 100.912683953; + atomic_mass_map[481010000] = 100.918586211; + atomic_mass_map[491010000] = 100.92634; + atomic_mass_map[501010000] = 100.935259244; + atomic_mass_map[371020000] = 101.95952; + atomic_mass_map[381020000] = 101.943790979; + atomic_mass_map[391020000] = 101.934327687; + atomic_mass_map[401020000] = 101.92314093; + atomic_mass_map[411020000] = 101.918077197; + atomic_mass_map[421020000] = 101.910283414; + atomic_mass_map[431020000] = 101.909209733; + atomic_mass_map[441020000] = 101.904344096; + atomic_mass_map[451020000] = 101.906837373; + atomic_mass_map[461020000] = 101.905602187; + atomic_mass_map[471020000] = 101.911704708; + atomic_mass_map[481020000] = 101.914481967; + atomic_mass_map[491020000] = 101.924107138; + atomic_mass_map[501020000] = 101.930290753; + atomic_mass_map[371030000] = 102.96392; + atomic_mass_map[381030000] = 102.94909; + atomic_mass_map[391030000] = 102.937243004; + atomic_mass_map[401030000] = 102.927190678; + atomic_mass_map[411030000] = 102.919457238; + atomic_mass_map[421030000] = 102.913078578; + atomic_mass_map[431030000] = 102.909176131; + atomic_mass_map[441030000] = 102.906318627; + atomic_mass_map[451030000] = 102.905497993; + atomic_mass_map[461030000] = 102.906080949; + atomic_mass_map[471030000] = 102.908963138; + atomic_mass_map[481030000] = 102.913416517; + atomic_mass_map[491030000] = 102.919881915; + atomic_mass_map[501030000] = 102.928105264; + atomic_mass_map[511030000] = 102.93969; + atomic_mass_map[381040000] = 103.95265; + atomic_mass_map[391040000] = 103.94196; + atomic_mass_map[401040000] = 103.929435691; + atomic_mass_map[411040000] = 103.922892491; + atomic_mass_map[421040000] = 103.913734373; + atomic_mass_map[431040000] = 103.911424888; + atomic_mass_map[441040000] = 103.905427481; + atomic_mass_map[451040000] = 103.90664922; + atomic_mass_map[461040000] = 103.90403054; + atomic_mass_map[471040000] = 103.908623864; + atomic_mass_map[481040000] = 103.909856386; + atomic_mass_map[491040000] = 103.918214541; + atomic_mass_map[501040000] = 103.923105204; + atomic_mass_map[511040000] = 103.936477804; + atomic_mass_map[381050000] = 104.95855; + atomic_mass_map[391050000] = 104.94544; + atomic_mass_map[401050000] = 104.934008204; + atomic_mass_map[411050000] = 104.924946471; + atomic_mass_map[421050000] = 104.916968617; + atomic_mass_map[431050000] = 104.911654883; + atomic_mass_map[441050000] = 104.907747645; + atomic_mass_map[451050000] = 104.905688549; + atomic_mass_map[461050000] = 104.905079626; + atomic_mass_map[471050000] = 104.906525615; + atomic_mass_map[481050000] = 104.909463896; + atomic_mass_map[491050000] = 104.914502325; + atomic_mass_map[501050000] = 104.921268429; + atomic_mass_map[511050000] = 104.931275897; + atomic_mass_map[521050000] = 104.943304508; + atomic_mass_map[381060000] = 105.962651; + atomic_mass_map[391060000] = 105.95056; + atomic_mass_map[401060000] = 105.93676; + atomic_mass_map[411060000] = 105.928931712; + atomic_mass_map[421060000] = 105.918259464; + atomic_mass_map[431060000] = 105.914357598; + atomic_mass_map[441060000] = 105.907329104; + atomic_mass_map[451060000] = 105.907286801; + atomic_mass_map[461060000] = 105.903480426; + atomic_mass_map[471060000] = 105.906663637; + atomic_mass_map[481060000] = 105.906459928; + atomic_mass_map[491060000] = 105.913463735; + atomic_mass_map[501060000] = 105.916957404; + atomic_mass_map[511060000] = 105.928637982; + atomic_mass_map[521060000] = 105.937499664; + atomic_mass_map[381070000] = 106.968975; + atomic_mass_map[391070000] = 106.95452; + atomic_mass_map[401070000] = 106.94174; + atomic_mass_map[411070000] = 106.931593654; + atomic_mass_map[421070000] = 106.922105877; + atomic_mass_map[431070000] = 106.915460645; + atomic_mass_map[441070000] = 106.909972045; + atomic_mass_map[451070000] = 106.906747811; + atomic_mass_map[461070000] = 106.905128195; + atomic_mass_map[471070000] = 106.905091611; + atomic_mass_map[481070000] = 106.906612122; + atomic_mass_map[491070000] = 106.910290084; + atomic_mass_map[501070000] = 106.915713652; + atomic_mass_map[511070000] = 106.924150641; + atomic_mass_map[521070000] = 106.935011573; + atomic_mass_map[531070000] = 106.94678; + atomic_mass_map[391080000] = 107.95996; + atomic_mass_map[401080000] = 107.94487; + atomic_mass_map[411080000] = 107.936074773; + atomic_mass_map[421080000] = 107.92403349; + atomic_mass_map[431080000] = 107.918495722; + atomic_mass_map[441080000] = 107.910188022; + atomic_mass_map[451080000] = 107.908714473; + atomic_mass_map[461080000] = 107.90389164; + atomic_mass_map[471080000] = 107.905950346; + atomic_mass_map[481080000] = 107.90418344; + atomic_mass_map[491080000] = 107.909693524; + atomic_mass_map[501080000] = 107.911894287; + atomic_mass_map[511080000] = 107.922226735; + atomic_mass_map[521080000] = 107.929380467; + atomic_mass_map[531080000] = 107.943481623; + atomic_mass_map[391090000] = 108.964358; + atomic_mass_map[401090000] = 108.95041; + atomic_mass_map[411090000] = 108.939216; + atomic_mass_map[421090000] = 108.92842416; + atomic_mass_map[431090000] = 108.920256356; + atomic_mass_map[441090000] = 108.913325956; + atomic_mass_map[451090000] = 108.908748821; + atomic_mass_map[461090000] = 108.905950406; + atomic_mass_map[471090000] = 108.904755282; + atomic_mass_map[481090000] = 108.904986653; + atomic_mass_map[491090000] = 108.907151381; + atomic_mass_map[501090000] = 108.91129206; + atomic_mass_map[511090000] = 108.918141122; + atomic_mass_map[521090000] = 108.927304534; + atomic_mass_map[531090000] = 108.938085287; + atomic_mass_map[541090000] = 108.950434864; + atomic_mass_map[401100000] = 109.95396; + atomic_mass_map[411100000] = 109.94403; + atomic_mass_map[421100000] = 109.930703673; + atomic_mass_map[431100000] = 109.923743534; + atomic_mass_map[441100000] = 109.914040696; + atomic_mass_map[451100000] = 109.911079429; + atomic_mass_map[461100000] = 109.905172199; + atomic_mass_map[471100000] = 109.906110226; + atomic_mass_map[481100000] = 109.903006606; + atomic_mass_map[491100000] = 109.90716981; + atomic_mass_map[501100000] = 109.907844835; + atomic_mass_map[511100000] = 109.916854287; + atomic_mass_map[521100000] = 109.922458091; + atomic_mass_map[531100000] = 109.935089034; + atomic_mass_map[541100000] = 109.944263102; + atomic_mass_map[401110000] = 110.959678; + atomic_mass_map[411110000] = 110.94753; + atomic_mass_map[421110000] = 110.935654257; + atomic_mass_map[431110000] = 110.925901257; + atomic_mass_map[441110000] = 110.917569857; + atomic_mass_map[451110000] = 110.91164231; + atomic_mass_map[461110000] = 110.907689679; + atomic_mass_map[471110000] = 110.905295923; + atomic_mass_map[481110000] = 110.904182872; + atomic_mass_map[491110000] = 110.905108458; + atomic_mass_map[501110000] = 110.907740127; + atomic_mass_map[511110000] = 110.913218189; + atomic_mass_map[521110000] = 110.921000589; + atomic_mass_map[531110000] = 110.930269214; + atomic_mass_map[541110000] = 110.941607206; + atomic_mass_map[401120000] = 111.963703; + atomic_mass_map[411120000] = 111.95247; + atomic_mass_map[421120000] = 111.93831; + atomic_mass_map[431120000] = 111.929945813; + atomic_mass_map[441120000] = 111.918809234; + atomic_mass_map[451120000] = 111.914403222; + atomic_mass_map[461120000] = 111.907329698; + atomic_mass_map[471120000] = 111.90704855; + atomic_mass_map[481120000] = 111.902762868; + atomic_mass_map[491120000] = 111.905537694; + atomic_mass_map[501120000] = 111.904823874; + atomic_mass_map[511120000] = 111.912399903; + atomic_mass_map[521120000] = 111.91672785; + atomic_mass_map[531120000] = 111.92800455; + atomic_mass_map[541120000] = 111.935558982; + atomic_mass_map[551120000] = 111.950308558; + atomic_mass_map[411130000] = 112.95651; + atomic_mass_map[421130000] = 112.94335; + atomic_mass_map[431130000] = 112.932569035; + atomic_mass_map[441130000] = 112.922843999; + atomic_mass_map[451130000] = 112.915439342; + atomic_mass_map[461130000] = 112.910261042; + atomic_mass_map[471130000] = 112.906572893; + atomic_mass_map[481130000] = 112.904408133; + atomic_mass_map[491130000] = 112.904061839; + atomic_mass_map[501130000] = 112.905175728; + atomic_mass_map[511130000] = 112.909374536; + atomic_mass_map[521130000] = 112.915891; + atomic_mass_map[531130000] = 112.923650064; + atomic_mass_map[541130000] = 112.93322165; + atomic_mass_map[551130000] = 112.944429144; + atomic_mass_map[411140000] = 113.96201; + atomic_mass_map[421140000] = 113.94653; + atomic_mass_map[431140000] = 113.93691; + atomic_mass_map[441140000] = 113.924613554; + atomic_mass_map[451140000] = 113.918718294; + atomic_mass_map[461140000] = 113.910368554; + atomic_mass_map[471140000] = 113.908823031; + atomic_mass_map[481140000] = 113.903365086; + atomic_mass_map[491140000] = 113.904917909; + atomic_mass_map[501140000] = 113.902782695; + atomic_mass_map[511140000] = 113.909290189; + atomic_mass_map[521140000] = 113.912089; + atomic_mass_map[531140000] = 113.92185; + atomic_mass_map[541140000] = 113.927980331; + atomic_mass_map[551140000] = 113.941296176; + atomic_mass_map[561140000] = 113.950660438; + atomic_mass_map[411150000] = 114.96634; + atomic_mass_map[421150000] = 114.95196; + atomic_mass_map[431150000] = 114.93998; + atomic_mass_map[441150000] = 114.928819898; + atomic_mass_map[451150000] = 114.920311589; + atomic_mass_map[461150000] = 114.913658506; + atomic_mass_map[471150000] = 114.908767355; + atomic_mass_map[481150000] = 114.905437513; + atomic_mass_map[491150000] = 114.903878776; + atomic_mass_map[501150000] = 114.903344699; + atomic_mass_map[511150000] = 114.906598; + atomic_mass_map[521150000] = 114.911902; + atomic_mass_map[531150000] = 114.918048; + atomic_mass_map[541150000] = 114.926293945; + atomic_mass_map[551150000] = 114.93591; + atomic_mass_map[561150000] = 114.94737; + atomic_mass_map[421160000] = 115.955448; + atomic_mass_map[431160000] = 115.94476; + atomic_mass_map[441160000] = 115.931219195; + atomic_mass_map[451160000] = 115.924058528; + atomic_mass_map[461160000] = 115.914296979; + atomic_mass_map[471160000] = 115.911386812; + atomic_mass_map[481160000] = 115.904763148; + atomic_mass_map[491160000] = 115.905259995; + atomic_mass_map[501160000] = 115.901742797; + atomic_mass_map[511160000] = 115.906793115; + atomic_mass_map[521160000] = 115.90846; + atomic_mass_map[531160000] = 115.916808658; + atomic_mass_map[541160000] = 115.921581112; + atomic_mass_map[551160000] = 115.933373; + atomic_mass_map[561160000] = 115.94128; + atomic_mass_map[571160000] = 115.956304; + atomic_mass_map[421170000] = 116.96117; + atomic_mass_map[431170000] = 116.94806; + atomic_mass_map[441170000] = 116.936103; + atomic_mass_map[451170000] = 116.926035391; + atomic_mass_map[461170000] = 116.917954721; + atomic_mass_map[471170000] = 116.911773934; + atomic_mass_map[481170000] = 116.907225956; + atomic_mass_map[491170000] = 116.904515678; + atomic_mass_map[501170000] = 116.902953983; + atomic_mass_map[511170000] = 116.904841508; + atomic_mass_map[521170000] = 116.908646298; + atomic_mass_map[531170000] = 116.913648312; + atomic_mass_map[541170000] = 116.920358761; + atomic_mass_map[551170000] = 116.928616726; + atomic_mass_map[561170000] = 116.93814057; + atomic_mass_map[571170000] = 116.949985; + atomic_mass_map[431180000] = 117.95299; + atomic_mass_map[441180000] = 117.93853; + atomic_mass_map[451180000] = 117.930340208; + atomic_mass_map[461180000] = 117.9190667; + atomic_mass_map[471180000] = 117.914595487; + atomic_mass_map[481180000] = 117.906921869; + atomic_mass_map[491180000] = 117.906356616; + atomic_mass_map[501180000] = 117.901606574; + atomic_mass_map[511180000] = 117.905532139; + atomic_mass_map[521180000] = 117.905853629; + atomic_mass_map[531180000] = 117.913074; + atomic_mass_map[541180000] = 117.91617868; + atomic_mass_map[551180000] = 117.926559519; + atomic_mass_map[561180000] = 117.93306; + atomic_mass_map[571180000] = 117.94673; + atomic_mass_map[431190000] = 118.95666; + atomic_mass_map[441190000] = 118.94357; + atomic_mass_map[451190000] = 118.932556954; + atomic_mass_map[461190000] = 118.923340223; + atomic_mass_map[471190000] = 118.915570287; + atomic_mass_map[481190000] = 118.909846851; + atomic_mass_map[491190000] = 118.905850708; + atomic_mass_map[501190000] = 118.903311172; + atomic_mass_map[511190000] = 118.903945471; + atomic_mass_map[521190000] = 118.906407108; + atomic_mass_map[531190000] = 118.910074; + atomic_mass_map[541190000] = 118.915410714; + atomic_mass_map[551190000] = 118.92237733; + atomic_mass_map[561190000] = 118.930659686; + atomic_mass_map[571190000] = 118.94099; + atomic_mass_map[581190000] = 118.95271; + atomic_mass_map[431200000] = 119.96187; + atomic_mass_map[441200000] = 119.94631; + atomic_mass_map[451200000] = 119.93686; + atomic_mass_map[461200000] = 119.924551089; + atomic_mass_map[471200000] = 119.918784768; + atomic_mass_map[481200000] = 119.909868068; + atomic_mass_map[491200000] = 119.907966567; + atomic_mass_map[501200000] = 119.902201634; + atomic_mass_map[511200000] = 119.905079385; + atomic_mass_map[521200000] = 119.9040593; + atomic_mass_map[531200000] = 119.910087251; + atomic_mass_map[541200000] = 119.91178427; + atomic_mass_map[551200000] = 119.920677279; + atomic_mass_map[561200000] = 119.926045; + atomic_mass_map[571200000] = 119.93807; + atomic_mass_map[581200000] = 119.94654; + atomic_mass_map[441210000] = 120.95164; + atomic_mass_map[451210000] = 120.93942; + atomic_mass_map[461210000] = 120.928950345; + atomic_mass_map[471210000] = 120.920125282; + atomic_mass_map[481210000] = 120.912963663; + atomic_mass_map[491210000] = 120.907851062; + atomic_mass_map[501210000] = 120.904242554; + atomic_mass_map[511210000] = 120.903811967; + atomic_mass_map[521210000] = 120.904943812; + atomic_mass_map[531210000] = 120.90740505; + atomic_mass_map[541210000] = 120.911453015; + atomic_mass_map[551210000] = 120.917227238; + atomic_mass_map[561210000] = 120.92405229; + atomic_mass_map[571210000] = 120.93315; + atomic_mass_map[581210000] = 120.94335; + atomic_mass_map[591210000] = 120.95532; + atomic_mass_map[441220000] = 121.95447; + atomic_mass_map[451220000] = 121.94399; + atomic_mass_map[461220000] = 121.930631696; + atomic_mass_map[471220000] = 121.923664449; + atomic_mass_map[481220000] = 121.913459053; + atomic_mass_map[491220000] = 121.910280738; + atomic_mass_map[501220000] = 121.903443774; + atomic_mass_map[511220000] = 121.905169948; + atomic_mass_map[521220000] = 121.903043455; + atomic_mass_map[531220000] = 121.907588841; + atomic_mass_map[541220000] = 121.908367658; + atomic_mass_map[551220000] = 121.916108146; + atomic_mass_map[561220000] = 121.919904; + atomic_mass_map[571220000] = 121.93071; + atomic_mass_map[581220000] = 121.93787; + atomic_mass_map[591220000] = 121.95175; + atomic_mass_map[441230000] = 122.95989; + atomic_mass_map[451230000] = 122.94685; + atomic_mass_map[461230000] = 122.93514; + atomic_mass_map[471230000] = 122.925337063; + atomic_mass_map[481230000] = 122.916892453; + atomic_mass_map[491230000] = 122.910433718; + atomic_mass_map[501230000] = 122.905725221; + atomic_mass_map[511230000] = 122.904213204; + atomic_mass_map[521230000] = 122.904269769; + atomic_mass_map[531230000] = 122.905588537; + atomic_mass_map[541230000] = 122.908481757; + atomic_mass_map[551230000] = 122.912996063; + atomic_mass_map[561230000] = 122.918781063; + atomic_mass_map[571230000] = 122.9263; + atomic_mass_map[581230000] = 122.93528; + atomic_mass_map[591230000] = 122.94596; + atomic_mass_map[441240000] = 123.96305; + atomic_mass_map[451240000] = 123.95151; + atomic_mass_map[461240000] = 123.93714; + atomic_mass_map[471240000] = 123.928931229; + atomic_mass_map[481240000] = 123.917657364; + atomic_mass_map[491240000] = 123.913182245; + atomic_mass_map[501240000] = 123.905276645; + atomic_mass_map[511240000] = 123.905934978; + atomic_mass_map[521240000] = 123.902817085; + atomic_mass_map[531240000] = 123.906209041; + atomic_mass_map[541240000] = 123.905891984; + atomic_mass_map[551240000] = 123.912257798; + atomic_mass_map[561240000] = 123.915093629; + atomic_mass_map[571240000] = 123.924574275; + atomic_mass_map[581240000] = 123.93031; + atomic_mass_map[591240000] = 123.94294; + atomic_mass_map[601240000] = 123.9522; + atomic_mass_map[451250000] = 124.95469; + atomic_mass_map[461250000] = 124.94179; + atomic_mass_map[471250000] = 124.931046; + atomic_mass_map[481250000] = 124.921257577; + atomic_mass_map[491250000] = 124.913604553; + atomic_mass_map[501250000] = 124.907786395; + atomic_mass_map[511250000] = 124.905253007; + atomic_mass_map[521250000] = 124.90442992; + atomic_mass_map[531250000] = 124.904629353; + atomic_mass_map[541250000] = 124.906394445; + atomic_mass_map[551250000] = 124.909727985; + atomic_mass_map[561250000] = 124.914471843; + atomic_mass_map[571250000] = 124.920815932; + atomic_mass_map[581250000] = 124.92844; + atomic_mass_map[591250000] = 124.9377; + atomic_mass_map[601250000] = 124.9489; + atomic_mass_map[451260000] = 125.95946; + atomic_mass_map[461260000] = 125.94416; + atomic_mass_map[471260000] = 125.93475; + atomic_mass_map[481260000] = 125.922429128; + atomic_mass_map[491260000] = 125.916507322; + atomic_mass_map[501260000] = 125.907658786; + atomic_mass_map[511260000] = 125.907252987; + atomic_mass_map[521260000] = 125.903310886; + atomic_mass_map[531260000] = 125.905623329; + atomic_mass_map[541260000] = 125.904298292; + atomic_mass_map[551260000] = 125.909446057; + atomic_mass_map[561260000] = 125.911250204; + atomic_mass_map[571260000] = 125.919512667; + atomic_mass_map[581260000] = 125.923971; + atomic_mass_map[591260000] = 125.93524; + atomic_mass_map[601260000] = 125.94311; + atomic_mass_map[611260000] = 125.95792; + atomic_mass_map[461270000] = 126.94907; + atomic_mass_map[471270000] = 126.93711; + atomic_mass_map[481270000] = 126.926472404; + atomic_mass_map[491270000] = 126.917446276; + atomic_mass_map[501270000] = 126.910389943; + atomic_mass_map[511270000] = 126.906924278; + atomic_mass_map[521270000] = 126.905225735; + atomic_mass_map[531270000] = 126.904471853; + atomic_mass_map[541270000] = 126.905182914; + atomic_mass_map[551270000] = 126.907417384; + atomic_mass_map[561270000] = 126.911091275; + atomic_mass_map[571270000] = 126.916375084; + atomic_mass_map[581270000] = 126.922727; + atomic_mass_map[591270000] = 126.93071; + atomic_mass_map[601270000] = 126.94038; + atomic_mass_map[611270000] = 126.95192; + atomic_mass_map[461280000] = 127.95183; + atomic_mass_map[471280000] = 127.94106; + atomic_mass_map[481280000] = 127.927812858; + atomic_mass_map[491280000] = 127.920401044; + atomic_mass_map[501280000] = 127.910507184; + atomic_mass_map[511280000] = 127.909145628; + atomic_mass_map[521280000] = 127.904461279; + atomic_mass_map[531280000] = 127.905808615; + atomic_mass_map[541280000] = 127.903531018; + atomic_mass_map[551280000] = 127.907748666; + atomic_mass_map[561280000] = 127.908341967; + atomic_mass_map[571280000] = 127.915592123; + atomic_mass_map[581280000] = 127.918911; + atomic_mass_map[591280000] = 127.928791; + atomic_mass_map[601280000] = 127.93525; + atomic_mass_map[611280000] = 127.9487; + atomic_mass_map[621280000] = 127.95842; + atomic_mass_map[471290000] = 128.94395; + atomic_mass_map[481290000] = 128.93182; + atomic_mass_map[491290000] = 128.921805301; + atomic_mass_map[501290000] = 128.913464711; + atomic_mass_map[511290000] = 128.909146665; + atomic_mass_map[521290000] = 128.90659646; + atomic_mass_map[531290000] = 128.904983669; + atomic_mass_map[541290000] = 128.904780861; + atomic_mass_map[551290000] = 128.906065683; + atomic_mass_map[561290000] = 128.908680798; + atomic_mass_map[571290000] = 128.912694431; + atomic_mass_map[581290000] = 128.918102; + atomic_mass_map[591290000] = 128.925095; + atomic_mass_map[601290000] = 128.933102; + atomic_mass_map[611290000] = 128.94323; + atomic_mass_map[621290000] = 128.95476; + atomic_mass_map[471300000] = 129.950703; + atomic_mass_map[481300000] = 129.933940679; + atomic_mass_map[491300000] = 129.924976585; + atomic_mass_map[501300000] = 129.91397383; + atomic_mass_map[511300000] = 129.911662054; + atomic_mass_map[521300000] = 129.906222748; + atomic_mass_map[531300000] = 129.906670193; + atomic_mass_map[541300000] = 129.903509349; + atomic_mass_map[551300000] = 129.906709283; + atomic_mass_map[561300000] = 129.906320669; + atomic_mass_map[571300000] = 129.912369413; + atomic_mass_map[581300000] = 129.914736; + atomic_mass_map[591300000] = 129.92359; + atomic_mass_map[601300000] = 129.928506; + atomic_mass_map[611300000] = 129.94053; + atomic_mass_map[621300000] = 129.949; + atomic_mass_map[631300000] = 129.963689; + atomic_mass_map[481310000] = 130.9406; + atomic_mass_map[491310000] = 130.926971529; + atomic_mass_map[501310000] = 130.917044954; + atomic_mass_map[511310000] = 130.911988799; + atomic_mass_map[521310000] = 130.908522213; + atomic_mass_map[531310000] = 130.906126305; + atomic_mass_map[541310000] = 130.905084057; + atomic_mass_map[551310000] = 130.905464899; + atomic_mass_map[561310000] = 130.906940977; + atomic_mass_map[571310000] = 130.91007; + atomic_mass_map[581310000] = 130.914429465; + atomic_mass_map[591310000] = 130.92023496; + atomic_mass_map[601310000] = 130.92724802; + atomic_mass_map[611310000] = 130.93567; + atomic_mass_map[621310000] = 130.94618; + atomic_mass_map[631310000] = 130.957842; + atomic_mass_map[481320000] = 131.94604; + atomic_mass_map[491320000] = 131.933001273; + atomic_mass_map[501320000] = 131.917826725; + atomic_mass_map[511320000] = 131.914507691; + atomic_mass_map[521320000] = 131.908546716; + atomic_mass_map[531320000] = 131.907993514; + atomic_mass_map[541320000] = 131.904155086; + atomic_mass_map[551320000] = 131.906433914; + atomic_mass_map[561320000] = 131.905061128; + atomic_mass_map[571320000] = 131.910118979; + atomic_mass_map[581320000] = 131.911463775; + atomic_mass_map[591320000] = 131.919255; + atomic_mass_map[601320000] = 131.923321237; + atomic_mass_map[611320000] = 131.93384; + atomic_mass_map[621320000] = 131.94087; + atomic_mass_map[631320000] = 131.95467; + atomic_mass_map[481330000] = 132.95285; + atomic_mass_map[491330000] = 132.93831; + atomic_mass_map[501330000] = 132.923913404; + atomic_mass_map[511330000] = 132.915273198; + atomic_mass_map[521330000] = 132.910968766; + atomic_mass_map[531330000] = 132.907796968; + atomic_mass_map[541330000] = 132.905910751; + atomic_mass_map[551330000] = 132.905451961; + atomic_mass_map[561330000] = 132.906007351; + atomic_mass_map[571330000] = 132.908218; + atomic_mass_map[581330000] = 132.911520402; + atomic_mass_map[591330000] = 132.916330561; + atomic_mass_map[601330000] = 132.922348; + atomic_mass_map[611330000] = 132.929782; + atomic_mass_map[621330000] = 132.93856; + atomic_mass_map[631330000] = 132.94929; + atomic_mass_map[641330000] = 132.96133; + atomic_mass_map[491340000] = 133.94454; + atomic_mass_map[501340000] = 133.928682064; + atomic_mass_map[511340000] = 133.920535676; + atomic_mass_map[521340000] = 133.911393959; + atomic_mass_map[531340000] = 133.909758836; + atomic_mass_map[541340000] = 133.905394664; + atomic_mass_map[551340000] = 133.906718503; + atomic_mass_map[561340000] = 133.904508182; + atomic_mass_map[571340000] = 133.908514011; + atomic_mass_map[581340000] = 133.908928142; + atomic_mass_map[591340000] = 133.915696729; + atomic_mass_map[601340000] = 133.91879021; + atomic_mass_map[611340000] = 133.928353; + atomic_mass_map[621340000] = 133.93411; + atomic_mass_map[631340000] = 133.9464; + atomic_mass_map[641340000] = 133.95566; + atomic_mass_map[491350000] = 134.95005; + atomic_mass_map[501350000] = 134.934908606; + atomic_mass_map[511350000] = 134.925185106; + atomic_mass_map[521350000] = 134.916555706; + atomic_mass_map[531350000] = 134.910048847; + atomic_mass_map[541350000] = 134.90722778; + atomic_mass_map[551350000] = 134.905977049; + atomic_mass_map[561350000] = 134.905688375; + atomic_mass_map[571350000] = 134.906984363; + atomic_mass_map[581350000] = 134.909160599; + atomic_mass_map[591350000] = 134.913111775; + atomic_mass_map[601350000] = 134.918181321; + atomic_mass_map[611350000] = 134.924823; + atomic_mass_map[621350000] = 134.93252; + atomic_mass_map[631350000] = 134.94187; + atomic_mass_map[641350000] = 134.95245; + atomic_mass_map[651350000] = 134.96476; + atomic_mass_map[501360000] = 135.93999; + atomic_mass_map[511360000] = 135.930745879; + atomic_mass_map[521360000] = 135.920100608; + atomic_mass_map[531360000] = 135.914604412; + atomic_mass_map[541360000] = 135.907214484; + atomic_mass_map[551360000] = 135.907311358; + atomic_mass_map[561360000] = 135.904575727; + atomic_mass_map[571360000] = 135.907634962; + atomic_mass_map[581360000] = 135.907129205; + atomic_mass_map[591360000] = 135.912677456; + atomic_mass_map[601360000] = 135.914976064; + atomic_mass_map[611360000] = 135.923584586; + atomic_mass_map[621360000] = 135.928275556; + atomic_mass_map[631360000] = 135.93962; + atomic_mass_map[641360000] = 135.9473; + atomic_mass_map[651360000] = 135.96129; + atomic_mass_map[501370000] = 136.94655; + atomic_mass_map[511370000] = 136.935555; + atomic_mass_map[521370000] = 136.925598852; + atomic_mass_map[531370000] = 136.918028188; + atomic_mass_map[541370000] = 136.911557781; + atomic_mass_map[551370000] = 136.907089231; + atomic_mass_map[561370000] = 136.905827141; + atomic_mass_map[571370000] = 136.906450385; + atomic_mass_map[581370000] = 136.907762364; + atomic_mass_map[591370000] = 136.91067915; + atomic_mass_map[601370000] = 136.914562448; + atomic_mass_map[611370000] = 136.920479523; + atomic_mass_map[621370000] = 136.926970517; + atomic_mass_map[631370000] = 136.93546; + atomic_mass_map[641370000] = 136.94502; + atomic_mass_map[651370000] = 136.95602; + atomic_mass_map[501380000] = 137.95184; + atomic_mass_map[511380000] = 137.94145; + atomic_mass_map[521380000] = 137.929472226; + atomic_mass_map[531380000] = 137.922726402; + atomic_mass_map[541380000] = 137.914146273; + atomic_mass_map[551380000] = 137.911017089; + atomic_mass_map[561380000] = 137.905246995; + atomic_mass_map[571380000] = 137.907114919; + atomic_mass_map[581380000] = 137.905991089; + atomic_mass_map[591380000] = 137.910754405; + atomic_mass_map[601380000] = 137.911949718; + atomic_mass_map[611380000] = 137.919548077; + atomic_mass_map[621380000] = 137.923243991; + atomic_mass_map[631380000] = 137.933709; + atomic_mass_map[641380000] = 137.94025; + atomic_mass_map[651380000] = 137.95312; + atomic_mass_map[661380000] = 137.9625; + atomic_mass_map[511390000] = 138.94655; + atomic_mass_map[521390000] = 138.935367194; + atomic_mass_map[531390000] = 138.926506206; + atomic_mass_map[541390000] = 138.918792203; + atomic_mass_map[551390000] = 138.913363758; + atomic_mass_map[561390000] = 138.908841099; + atomic_mass_map[571390000] = 138.906356256; + atomic_mass_map[581390000] = 138.906655111; + atomic_mass_map[591390000] = 138.908940762; + atomic_mass_map[601390000] = 138.911953649; + atomic_mass_map[611390000] = 138.91679967; + atomic_mass_map[621390000] = 138.922296635; + atomic_mass_map[631390000] = 138.92979231; + atomic_mass_map[641390000] = 138.93813; + atomic_mass_map[651390000] = 138.94833; + atomic_mass_map[661390000] = 138.95959; + atomic_mass_map[511400000] = 139.95283; + atomic_mass_map[521400000] = 139.939498567; + atomic_mass_map[531400000] = 139.931727; + atomic_mass_map[541400000] = 139.921645817; + atomic_mass_map[551400000] = 139.917283063; + atomic_mass_map[561400000] = 139.91060573; + atomic_mass_map[571400000] = 139.909480635; + atomic_mass_map[581400000] = 139.905443107; + atomic_mass_map[591400000] = 139.909080275; + atomic_mass_map[601400000] = 139.909549849; + atomic_mass_map[611400000] = 139.916039639; + atomic_mass_map[621400000] = 139.918994717; + atomic_mass_map[631400000] = 139.928087637; + atomic_mass_map[641400000] = 139.933674; + atomic_mass_map[651400000] = 139.945805049; + atomic_mass_map[661400000] = 139.95402; + atomic_mass_map[671400000] = 139.968589; + atomic_mass_map[521410000] = 140.9458; + atomic_mass_map[531410000] = 140.93569; + atomic_mass_map[541410000] = 140.926787184; + atomic_mass_map[551410000] = 140.920045491; + atomic_mass_map[561410000] = 140.914403333; + atomic_mass_map[571410000] = 140.91096603; + atomic_mass_map[581410000] = 140.908280674; + atomic_mass_map[591410000] = 140.907657568; + atomic_mass_map[601410000] = 140.909614653; + atomic_mass_map[611410000] = 140.913555084; + atomic_mass_map[621410000] = 140.918481636; + atomic_mass_map[631410000] = 140.924931754; + atomic_mass_map[641410000] = 140.932126; + atomic_mass_map[651410000] = 140.941448; + atomic_mass_map[661410000] = 140.95128; + atomic_mass_map[671410000] = 140.963108; + atomic_mass_map[521420000] = 141.95022; + atomic_mass_map[531420000] = 141.941202; + atomic_mass_map[541420000] = 141.929973098; + atomic_mass_map[551420000] = 141.924295991; + atomic_mass_map[561420000] = 141.916432382; + atomic_mass_map[571420000] = 141.91409089; + atomic_mass_map[581420000] = 141.909250375; + atomic_mass_map[591420000] = 141.910049607; + atomic_mass_map[601420000] = 141.907728996; + atomic_mass_map[611420000] = 141.912890411; + atomic_mass_map[621420000] = 141.915204385; + atomic_mass_map[631420000] = 141.92344169; + atomic_mass_map[641420000] = 141.928116; + atomic_mass_map[651420000] = 141.939280859; + atomic_mass_map[661420000] = 141.946194; + atomic_mass_map[671420000] = 141.96001; + atomic_mass_map[681420000] = 141.9701; + atomic_mass_map[521430000] = 142.95676; + atomic_mass_map[531430000] = 142.94565; + atomic_mass_map[541430000] = 142.935369554; + atomic_mass_map[551430000] = 142.927349327; + atomic_mass_map[561430000] = 142.920625293; + atomic_mass_map[571430000] = 142.916079512; + atomic_mass_map[581430000] = 142.91239212; + atomic_mass_map[591430000] = 142.910822796; + atomic_mass_map[601430000] = 142.909819989; + atomic_mass_map[611430000] = 142.910938262; + atomic_mass_map[621430000] = 142.914635303; + atomic_mass_map[631430000] = 142.920298681; + atomic_mass_map[641430000] = 142.926750682; + atomic_mass_map[651430000] = 142.935137335; + atomic_mass_map[661430000] = 142.943994335; + atomic_mass_map[671430000] = 142.95486; + atomic_mass_map[681430000] = 142.96662; + atomic_mass_map[531440000] = 143.95139; + atomic_mass_map[541440000] = 143.938945079; + atomic_mass_map[551440000] = 143.932076313; + atomic_mass_map[561440000] = 143.922954866; + atomic_mass_map[571440000] = 143.919645589; + atomic_mass_map[581440000] = 143.913652939; + atomic_mass_map[591440000] = 143.913310859; + atomic_mass_map[601440000] = 143.910092974; + atomic_mass_map[611440000] = 143.912596396; + atomic_mass_map[621440000] = 143.912006466; + atomic_mass_map[631440000] = 143.918819553; + atomic_mass_map[641440000] = 143.922963; + atomic_mass_map[651440000] = 143.933045; + atomic_mass_map[661440000] = 143.939269515; + atomic_mass_map[671440000] = 143.952109715; + atomic_mass_map[681440000] = 143.9607; + atomic_mass_map[691440000] = 143.976283; + atomic_mass_map[531450000] = 144.95605; + atomic_mass_map[541450000] = 144.944719634; + atomic_mass_map[551450000] = 144.935527435; + atomic_mass_map[561450000] = 144.9275184; + atomic_mass_map[571450000] = 144.921808068; + atomic_mass_map[581450000] = 144.917265228; + atomic_mass_map[591450000] = 144.914518156; + atomic_mass_map[601450000] = 144.912579322; + atomic_mass_map[611450000] = 144.912755935; + atomic_mass_map[621450000] = 144.913417339; + atomic_mass_map[631450000] = 144.916272629; + atomic_mass_map[641450000] = 144.921712821; + atomic_mass_map[651450000] = 144.928821947; + atomic_mass_map[661450000] = 144.937473995; + atomic_mass_map[671450000] = 144.947267395; + atomic_mass_map[681450000] = 144.95805; + atomic_mass_map[691450000] = 144.970389; + atomic_mass_map[541460000] = 145.948518249; + atomic_mass_map[551460000] = 145.940344271; + atomic_mass_map[561460000] = 145.930283712; + atomic_mass_map[571460000] = 145.925875174; + atomic_mass_map[581460000] = 145.918802412; + atomic_mass_map[591460000] = 145.91767985; + atomic_mass_map[601460000] = 145.913122628; + atomic_mass_map[611460000] = 145.914702396; + atomic_mass_map[621460000] = 145.913046991; + atomic_mass_map[631460000] = 145.917211039; + atomic_mass_map[641460000] = 145.918318817; + atomic_mass_map[651460000] = 145.927252984; + atomic_mass_map[661460000] = 145.93284453; + atomic_mass_map[671460000] = 145.944993506; + atomic_mass_map[681460000] = 145.95241836; + atomic_mass_map[691460000] = 145.966837; + atomic_mass_map[541470000] = 146.95426; + atomic_mass_map[551470000] = 146.944156156; + atomic_mass_map[561470000] = 146.9353039; + atomic_mass_map[571470000] = 146.9284178; + atomic_mass_map[581470000] = 146.922689913; + atomic_mass_map[591470000] = 146.919007518; + atomic_mass_map[601470000] = 146.916106136; + atomic_mass_map[611470000] = 146.915144988; + atomic_mass_map[621470000] = 146.914904435; + atomic_mass_map[631470000] = 146.916752659; + atomic_mass_map[641470000] = 146.919101384; + atomic_mass_map[651470000] = 146.924054788; + atomic_mass_map[661470000] = 146.931082715; + atomic_mass_map[671470000] = 146.940142296; + atomic_mass_map[681470000] = 146.949964459; + atomic_mass_map[691470000] = 146.961379891; + atomic_mass_map[541480000] = 147.95813; + atomic_mass_map[551480000] = 147.949225137; + atomic_mass_map[561480000] = 147.938170578; + atomic_mass_map[571480000] = 147.9326794; + atomic_mass_map[581480000] = 147.924424225; + atomic_mass_map[591480000] = 147.922130083; + atomic_mass_map[601480000] = 147.916899294; + atomic_mass_map[611480000] = 147.917481945; + atomic_mass_map[621480000] = 147.914829226; + atomic_mass_map[631480000] = 147.918089243; + atomic_mass_map[641480000] = 147.918121511; + atomic_mass_map[651480000] = 147.924281552; + atomic_mass_map[661480000] = 147.927156571; + atomic_mass_map[671480000] = 147.937743928; + atomic_mass_map[681480000] = 147.944735029; + atomic_mass_map[691480000] = 147.958384029; + atomic_mass_map[701480000] = 147.96758; + atomic_mass_map[551490000] = 148.95302; + atomic_mass_map[561490000] = 148.94308; + atomic_mass_map[571490000] = 148.93535126; + atomic_mass_map[581490000] = 148.9284269; + atomic_mass_map[591490000] = 148.9237361; + atomic_mass_map[601490000] = 148.920154849; + atomic_mass_map[611490000] = 148.918342277; + atomic_mass_map[621490000] = 148.917192062; + atomic_mass_map[631490000] = 148.917937763; + atomic_mass_map[641490000] = 148.919348117; + atomic_mass_map[651490000] = 148.923253549; + atomic_mass_map[661490000] = 148.927321692; + atomic_mass_map[671490000] = 148.933802646; + atomic_mass_map[681490000] = 148.942306; + atomic_mass_map[691490000] = 148.95289; + atomic_mass_map[701490000] = 148.96436; + atomic_mass_map[551500000] = 149.95833; + atomic_mass_map[561500000] = 149.94605; + atomic_mass_map[571500000] = 149.93947; + atomic_mass_map[581500000] = 149.930384042; + atomic_mass_map[591500000] = 149.926676502; + atomic_mass_map[601500000] = 149.920902249; + atomic_mass_map[611500000] = 149.920990941; + atomic_mass_map[621500000] = 149.917282919; + atomic_mass_map[631500000] = 149.919707671; + atomic_mass_map[641500000] = 149.918664422; + atomic_mass_map[651500000] = 149.923664941; + atomic_mass_map[661500000] = 149.925593264; + atomic_mass_map[671500000] = 149.933498408; + atomic_mass_map[681500000] = 149.937915567; + atomic_mass_map[691500000] = 149.95009; + atomic_mass_map[701500000] = 149.95852; + atomic_mass_map[711500000] = 149.973548; + atomic_mass_map[551510000] = 150.96258; + atomic_mass_map[561510000] = 150.95127; + atomic_mass_map[571510000] = 150.94232; + atomic_mass_map[581510000] = 150.9342722; + atomic_mass_map[591510000] = 150.928309285; + atomic_mass_map[601510000] = 150.923840289; + atomic_mass_map[611510000] = 150.921217539; + atomic_mass_map[621510000] = 150.919939796; + atomic_mass_map[631510000] = 150.919857803; + atomic_mass_map[641510000] = 150.92035595; + atomic_mass_map[651510000] = 150.923109599; + atomic_mass_map[661510000] = 150.926191564; + atomic_mass_map[671510000] = 150.931698345; + atomic_mass_map[681510000] = 150.937448567; + atomic_mass_map[691510000] = 150.945487875; + atomic_mass_map[701510000] = 150.955402497; + atomic_mass_map[711510000] = 150.967677; + atomic_mass_map[561520000] = 151.95481; + atomic_mass_map[571520000] = 151.94682; + atomic_mass_map[581520000] = 151.9366; + atomic_mass_map[591520000] = 151.9315529; + atomic_mass_map[601520000] = 151.924692216; + atomic_mass_map[611520000] = 151.923506181; + atomic_mass_map[621520000] = 151.919739721; + atomic_mass_map[631520000] = 151.921752184; + atomic_mass_map[641520000] = 151.919799494; + atomic_mass_map[651520000] = 151.924082936; + atomic_mass_map[661520000] = 151.924725286; + atomic_mass_map[671520000] = 151.931723623; + atomic_mass_map[681520000] = 151.935057085; + atomic_mass_map[691520000] = 151.944422; + atomic_mass_map[701520000] = 151.9502727; + atomic_mass_map[711520000] = 151.96412; + atomic_mass_map[561530000] = 152.96036; + atomic_mass_map[571530000] = 152.95036; + atomic_mass_map[581530000] = 152.94093; + atomic_mass_map[591530000] = 152.933903539; + atomic_mass_map[601530000] = 152.927717978; + atomic_mass_map[611530000] = 152.924156686; + atomic_mass_map[621530000] = 152.92210465; + atomic_mass_map[631530000] = 152.921238003; + atomic_mass_map[641530000] = 152.921758027; + atomic_mass_map[651530000] = 152.923442403; + atomic_mass_map[661530000] = 152.925772378; + atomic_mass_map[671530000] = 152.930206429; + atomic_mass_map[681530000] = 152.93508044; + atomic_mass_map[691530000] = 152.942040101; + atomic_mass_map[701530000] = 152.94932; + atomic_mass_map[711530000] = 152.958751054; + atomic_mass_map[721530000] = 152.97069; + atomic_mass_map[571540000] = 153.95517; + atomic_mass_map[581540000] = 153.9438; + atomic_mass_map[591540000] = 153.937525741; + atomic_mass_map[601540000] = 153.929484894; + atomic_mass_map[611540000] = 153.926471531; + atomic_mass_map[621540000] = 153.922216861; + atomic_mass_map[631540000] = 153.922986962; + atomic_mass_map[641540000] = 153.92087406; + atomic_mass_map[651540000] = 153.924684767; + atomic_mass_map[661540000] = 153.924429277; + atomic_mass_map[671540000] = 153.930606834; + atomic_mass_map[681540000] = 153.932790842; + atomic_mass_map[691540000] = 153.941570033; + atomic_mass_map[701540000] = 153.946395655; + atomic_mass_map[711540000] = 153.957364; + atomic_mass_map[721540000] = 153.96486; + atomic_mass_map[571550000] = 154.95901; + atomic_mass_map[581550000] = 154.94855; + atomic_mass_map[591550000] = 154.940509281; + atomic_mass_map[601550000] = 154.933135691; + atomic_mass_map[611550000] = 154.928137048; + atomic_mass_map[621550000] = 154.924647748; + atomic_mass_map[631550000] = 154.922901107; + atomic_mass_map[641550000] = 154.922630473; + atomic_mass_map[651550000] = 154.923510547; + atomic_mass_map[661550000] = 154.925759086; + atomic_mass_map[671550000] = 154.929104049; + atomic_mass_map[681550000] = 154.933215911; + atomic_mass_map[691550000] = 154.93920966; + atomic_mass_map[701550000] = 154.945783132; + atomic_mass_map[711550000] = 154.9543206; + atomic_mass_map[721550000] = 154.96311; + atomic_mass_map[731550000] = 154.974245; + atomic_mass_map[581560000] = 155.95183; + atomic_mass_map[591560000] = 155.94464; + atomic_mass_map[601560000] = 155.935078894; + atomic_mass_map[611560000] = 155.931117516; + atomic_mass_map[621560000] = 155.925536067; + atomic_mass_map[631560000] = 155.924760494; + atomic_mass_map[641560000] = 155.922131241; + atomic_mass_map[651560000] = 155.924755181; + atomic_mass_map[661560000] = 155.924284713; + atomic_mass_map[671560000] = 155.929706112; + atomic_mass_map[681560000] = 155.931067313; + atomic_mass_map[691560000] = 155.938991573; + atomic_mass_map[701560000] = 155.942824698; + atomic_mass_map[711560000] = 155.953032522; + atomic_mass_map[721560000] = 155.959347805; + atomic_mass_map[731560000] = 155.97203; + atomic_mass_map[581570000] = 156.95705; + atomic_mass_map[591570000] = 156.94789; + atomic_mass_map[601570000] = 156.939386061; + atomic_mass_map[611570000] = 156.933121393; + atomic_mass_map[621570000] = 156.928418698; + atomic_mass_map[631570000] = 156.925433446; + atomic_mass_map[641570000] = 156.923968569; + atomic_mass_map[651570000] = 156.924033028; + atomic_mass_map[661570000] = 156.92547066; + atomic_mass_map[671570000] = 156.928254427; + atomic_mass_map[681570000] = 156.931948658; + atomic_mass_map[691570000] = 156.93694412; + atomic_mass_map[701570000] = 156.942645349; + atomic_mass_map[711570000] = 156.950126667; + atomic_mass_map[721570000] = 156.958236; + atomic_mass_map[731570000] = 156.968176167; + atomic_mass_map[741570000] = 156.97884; + atomic_mass_map[591580000] = 157.95241; + atomic_mass_map[601580000] = 157.94197; + atomic_mass_map[611580000] = 157.936565144; + atomic_mass_map[621580000] = 157.929951004; + atomic_mass_map[631580000] = 157.927798606; + atomic_mass_map[641580000] = 157.924112348; + atomic_mass_map[651580000] = 157.925420947; + atomic_mass_map[661580000] = 157.924415875; + atomic_mass_map[671580000] = 157.928945969; + atomic_mass_map[681580000] = 157.929893474; + atomic_mass_map[691580000] = 157.936979525; + atomic_mass_map[701580000] = 157.939870549; + atomic_mass_map[711580000] = 157.949315507; + atomic_mass_map[721580000] = 157.954801092; + atomic_mass_map[731580000] = 157.966541; + atomic_mass_map[741580000] = 157.974562; + atomic_mass_map[591590000] = 158.95589; + atomic_mass_map[601590000] = 158.94653; + atomic_mass_map[611590000] = 158.939286502; + atomic_mass_map[621590000] = 158.933217226; + atomic_mass_map[631590000] = 158.929100067; + atomic_mass_map[641590000] = 158.926396969; + atomic_mass_map[651590000] = 158.92535471; + atomic_mass_map[661590000] = 158.925746958; + atomic_mass_map[671590000] = 158.927719703; + atomic_mass_map[681590000] = 158.93069181; + atomic_mass_map[691590000] = 158.934975; + atomic_mass_map[701590000] = 158.940054623; + atomic_mass_map[711590000] = 158.946635615; + atomic_mass_map[721590000] = 158.953995669; + atomic_mass_map[731590000] = 158.963022556; + atomic_mass_map[741590000] = 158.972638; + atomic_mass_map[751590000] = 158.984179; + atomic_mass_map[601600000] = 159.9494; + atomic_mass_map[611600000] = 159.9431; + atomic_mass_map[621600000] = 159.935335311; + atomic_mass_map[631600000] = 159.931850939; + atomic_mass_map[641600000] = 159.927062411; + atomic_mass_map[651600000] = 159.927175556; + atomic_mass_map[661600000] = 159.925204646; + atomic_mass_map[671600000] = 159.928736606; + atomic_mass_map[681600000] = 159.92907713; + atomic_mass_map[691600000] = 159.935263106; + atomic_mass_map[701600000] = 159.937557406; + atomic_mass_map[711600000] = 159.946033; + atomic_mass_map[721600000] = 159.950690749; + atomic_mass_map[731600000] = 159.96148751; + atomic_mass_map[741600000] = 159.968462584; + atomic_mass_map[751600000] = 159.981823; + atomic_mass_map[601610000] = 160.95428; + atomic_mass_map[611610000] = 160.94607; + atomic_mass_map[621610000] = 160.93916017; + atomic_mass_map[631610000] = 160.933664091; + atomic_mass_map[641610000] = 160.929677476; + atomic_mass_map[651610000] = 160.927577825; + atomic_mass_map[661610000] = 160.926940492; + atomic_mass_map[671610000] = 160.927861547; + atomic_mass_map[681610000] = 160.930004599; + atomic_mass_map[691610000] = 160.933549; + atomic_mass_map[701610000] = 160.937907138; + atomic_mass_map[711610000] = 160.943572; + atomic_mass_map[721610000] = 160.95027837; + atomic_mass_map[731610000] = 160.958452265; + atomic_mass_map[741610000] = 160.967197; + atomic_mass_map[751610000] = 160.977572951; + atomic_mass_map[761610000] = 160.989029; + atomic_mass_map[611620000] = 161.95022; + atomic_mass_map[621620000] = 161.94146; + atomic_mass_map[631620000] = 161.936988761; + atomic_mass_map[641620000] = 161.930993017; + atomic_mass_map[651620000] = 161.92949536; + atomic_mass_map[661620000] = 161.926805573; + atomic_mass_map[671620000] = 161.929102274; + atomic_mass_map[681620000] = 161.928788364; + atomic_mass_map[691620000] = 161.934002277; + atomic_mass_map[701620000] = 161.935773604; + atomic_mass_map[711620000] = 161.943282776; + atomic_mass_map[721620000] = 161.947214837; + atomic_mass_map[731620000] = 161.957294083; + atomic_mass_map[741620000] = 161.963499142; + atomic_mass_map[751620000] = 161.975844; + atomic_mass_map[761620000] = 161.984431; + atomic_mass_map[611630000] = 162.95357; + atomic_mass_map[621630000] = 162.94555; + atomic_mass_map[631630000] = 162.939195675; + atomic_mass_map[641630000] = 162.934176855; + atomic_mass_map[651630000] = 162.930654659; + atomic_mass_map[661630000] = 162.928738284; + atomic_mass_map[671630000] = 162.928741027; + atomic_mass_map[681630000] = 162.930040797; + atomic_mass_map[691630000] = 162.932659172; + atomic_mass_map[701630000] = 162.936339632; + atomic_mass_map[711630000] = 162.941179; + atomic_mass_map[721630000] = 162.947112946; + atomic_mass_map[731630000] = 162.95433711; + atomic_mass_map[741630000] = 162.962524342; + atomic_mass_map[751630000] = 162.97207986; + atomic_mass_map[761630000] = 162.98241; + atomic_mass_map[621640000] = 163.94836; + atomic_mass_map[631640000] = 163.942744; + atomic_mass_map[641640000] = 163.93583; + atomic_mass_map[651640000] = 163.933357961; + atomic_mass_map[661640000] = 163.929181874; + atomic_mass_map[671640000] = 163.930240273; + atomic_mass_map[681640000] = 163.929208791; + atomic_mass_map[691640000] = 163.933543614; + atomic_mass_map[701640000] = 163.934494934; + atomic_mass_map[711640000] = 163.941339; + atomic_mass_map[721640000] = 163.944370845; + atomic_mass_map[731640000] = 163.953534; + atomic_mass_map[741640000] = 163.958960683; + atomic_mass_map[751640000] = 163.97045287; + atomic_mass_map[761640000] = 163.978021712; + atomic_mass_map[771640000] = 163.991909; + atomic_mass_map[621650000] = 164.95297; + atomic_mass_map[631650000] = 164.945587; + atomic_mass_map[641650000] = 164.93936; + atomic_mass_map[651650000] = 164.93498; + atomic_mass_map[661650000] = 164.931710456; + atomic_mass_map[671650000] = 164.930328835; + atomic_mass_map[681650000] = 164.930734496; + atomic_mass_map[691650000] = 164.93244314; + atomic_mass_map[701650000] = 164.935270241; + atomic_mass_map[711650000] = 164.939406758; + atomic_mass_map[721650000] = 164.944567; + atomic_mass_map[731650000] = 164.950780572; + atomic_mass_map[741650000] = 164.958280788; + atomic_mass_map[751650000] = 164.96710266; + atomic_mass_map[761650000] = 164.976602; + atomic_mass_map[771650000] = 164.987501; + atomic_mass_map[631660000] = 165.94962; + atomic_mass_map[641660000] = 165.94146; + atomic_mass_map[651660000] = 165.937859521; + atomic_mass_map[661660000] = 165.932813863; + atomic_mass_map[671660000] = 165.932290927; + atomic_mass_map[681660000] = 165.93029953; + atomic_mass_map[691660000] = 165.9335606; + atomic_mass_map[701660000] = 165.933874749; + atomic_mass_map[711660000] = 165.939859; + atomic_mass_map[721660000] = 165.94218; + atomic_mass_map[731660000] = 165.950512; + atomic_mass_map[741660000] = 165.95503121; + atomic_mass_map[751660000] = 165.965760821; + atomic_mass_map[761660000] = 165.972692476; + atomic_mass_map[771660000] = 165.985664; + atomic_mass_map[781660000] = 165.994855; + atomic_mass_map[631670000] = 166.95289; + atomic_mass_map[641670000] = 166.94545; + atomic_mass_map[651670000] = 166.93996; + atomic_mass_map[661670000] = 166.935661379; + atomic_mass_map[671670000] = 166.93313855; + atomic_mass_map[681670000] = 166.932054617; + atomic_mass_map[691670000] = 166.932856192; + atomic_mass_map[701670000] = 166.934952988; + atomic_mass_map[711670000] = 166.93827; + atomic_mass_map[721670000] = 166.9426; + atomic_mass_map[731670000] = 166.948093; + atomic_mass_map[741670000] = 166.95480456; + atomic_mass_map[751670000] = 166.962595; + atomic_mass_map[761670000] = 166.971548768; + atomic_mass_map[771670000] = 166.981666315; + atomic_mass_map[781670000] = 166.992695; + atomic_mass_map[641680000] = 167.94808; + atomic_mass_map[651680000] = 167.9434; + atomic_mass_map[661680000] = 167.937133273; + atomic_mass_map[671680000] = 167.935522173; + atomic_mass_map[681680000] = 167.932376688; + atomic_mass_map[691680000] = 167.934177409; + atomic_mass_map[701680000] = 167.933889602; + atomic_mass_map[711680000] = 167.938735635; + atomic_mass_map[721680000] = 167.940568; + atomic_mass_map[731680000] = 167.948047; + atomic_mass_map[741680000] = 167.951805537; + atomic_mass_map[751680000] = 167.961572608; + atomic_mass_map[761680000] = 167.967807751; + atomic_mass_map[771680000] = 167.979906642; + atomic_mass_map[781680000] = 167.988128665; + atomic_mass_map[641690000] = 168.9526; + atomic_mass_map[651690000] = 168.94597; + atomic_mass_map[661690000] = 168.940313531; + atomic_mass_map[671690000] = 168.936878189; + atomic_mass_map[681690000] = 168.93459685; + atomic_mass_map[691690000] = 168.934217889; + atomic_mass_map[701690000] = 168.935182512; + atomic_mass_map[711690000] = 168.937644149; + atomic_mass_map[721690000] = 168.941259; + atomic_mass_map[731690000] = 168.946011; + atomic_mass_map[741690000] = 168.951778845; + atomic_mass_map[751690000] = 168.958766063; + atomic_mass_map[761690000] = 168.967017574; + atomic_mass_map[771690000] = 168.976298488; + atomic_mass_map[781690000] = 168.986567; + atomic_mass_map[791690000] = 168.99808; + atomic_mass_map[651700000] = 169.94984; + atomic_mass_map[661700000] = 169.94239; + atomic_mass_map[671700000] = 169.939624846; + atomic_mass_map[681700000] = 169.93547023; + atomic_mass_map[691700000] = 169.935806032; + atomic_mass_map[701700000] = 169.934766376; + atomic_mass_map[711700000] = 169.938478365; + atomic_mass_map[721700000] = 169.939609; + atomic_mass_map[731700000] = 169.946175; + atomic_mass_map[741700000] = 169.949231588; + atomic_mass_map[751700000] = 169.958220071; + atomic_mass_map[761700000] = 169.963578454; + atomic_mass_map[771700000] = 169.974922; + atomic_mass_map[781700000] = 169.982496345; + atomic_mass_map[791700000] = 169.995972; + atomic_mass_map[651710000] = 170.95273; + atomic_mass_map[661710000] = 170.94612; + atomic_mass_map[671710000] = 170.941471022; + atomic_mass_map[681710000] = 170.938035681; + atomic_mass_map[691710000] = 170.936433871; + atomic_mass_map[701710000] = 170.936330208; + atomic_mass_map[711710000] = 170.93791696; + atomic_mass_map[721710000] = 170.940492; + atomic_mass_map[731710000] = 170.944476; + atomic_mass_map[741710000] = 170.949451; + atomic_mass_map[751710000] = 170.955716; + atomic_mass_map[761710000] = 170.963173969; + atomic_mass_map[771710000] = 170.971640252; + atomic_mass_map[781710000] = 170.981245248; + atomic_mass_map[791710000] = 170.991875791; + atomic_mass_map[801710000] = 171.003529; + atomic_mass_map[661720000] = 171.94846; + atomic_mass_map[671720000] = 171.94473; + atomic_mass_map[681720000] = 171.939361858; + atomic_mass_map[691720000] = 171.938405521; + atomic_mass_map[701720000] = 171.936385872; + atomic_mass_map[711720000] = 171.939089103; + atomic_mass_map[721720000] = 171.939449716; + atomic_mass_map[731720000] = 171.944895; + atomic_mass_map[741720000] = 171.947292; + atomic_mass_map[751720000] = 171.955419665; + atomic_mass_map[761720000] = 171.960017317; + atomic_mass_map[771720000] = 171.970607036; + atomic_mass_map[781720000] = 171.977350921; + atomic_mass_map[791720000] = 171.989942284; + atomic_mass_map[801720000] = 171.998808967; + atomic_mass_map[661730000] = 172.95283; + atomic_mass_map[671730000] = 172.94702; + atomic_mass_map[681730000] = 172.9424; + atomic_mass_map[691730000] = 172.939608371; + atomic_mass_map[701730000] = 172.938215136; + atomic_mass_map[711730000] = 172.938934029; + atomic_mass_map[721730000] = 172.940513; + atomic_mass_map[731730000] = 172.94375; + atomic_mass_map[741730000] = 172.947689; + atomic_mass_map[751730000] = 172.953243; + atomic_mass_map[761730000] = 172.959808465; + atomic_mass_map[771730000] = 172.967505636; + atomic_mass_map[781730000] = 172.976443058; + atomic_mass_map[791730000] = 172.986240924; + atomic_mass_map[801730000] = 172.997091; + atomic_mass_map[671740000] = 173.95095; + atomic_mass_map[681740000] = 173.94423; + atomic_mass_map[691740000] = 173.942172953; + atomic_mass_map[701740000] = 173.938866437; + atomic_mass_map[711740000] = 173.940340854; + atomic_mass_map[721740000] = 173.940046141; + atomic_mass_map[731740000] = 173.944454; + atomic_mass_map[741740000] = 173.946079; + atomic_mass_map[751740000] = 173.953115; + atomic_mass_map[761740000] = 173.957063507; + atomic_mass_map[771740000] = 173.966861045; + atomic_mass_map[781740000] = 173.972819528; + atomic_mass_map[791740000] = 173.984717; + atomic_mass_map[801740000] = 173.992864748; + atomic_mass_map[671750000] = 174.95362; + atomic_mass_map[681750000] = 174.94777; + atomic_mass_map[691750000] = 174.9438412; + atomic_mass_map[701750000] = 174.941280797; + atomic_mass_map[711750000] = 174.940775191; + atomic_mass_map[721750000] = 174.941509187; + atomic_mass_map[731750000] = 174.943737; + atomic_mass_map[741750000] = 174.946717; + atomic_mass_map[751750000] = 174.951381; + atomic_mass_map[761750000] = 174.956945313; + atomic_mass_map[771750000] = 174.964149589; + atomic_mass_map[781750000] = 174.972409721; + atomic_mass_map[791750000] = 174.981303712; + atomic_mass_map[801750000] = 174.991440747; + atomic_mass_map[681760000] = 175.94994; + atomic_mass_map[691760000] = 175.946999449; + atomic_mass_map[701760000] = 175.942576447; + atomic_mass_map[711760000] = 175.94268968; + atomic_mass_map[721760000] = 175.941407628; + atomic_mass_map[731760000] = 175.944857; + atomic_mass_map[741760000] = 175.945634; + atomic_mass_map[751760000] = 175.951623; + atomic_mass_map[761760000] = 175.954806; + atomic_mass_map[771760000] = 175.963650389; + atomic_mass_map[781760000] = 175.968938362; + atomic_mass_map[791760000] = 175.980250432; + atomic_mass_map[801760000] = 175.987360863; + atomic_mass_map[811760000] = 176.000624028; + atomic_mass_map[681770000] = 176.95399; + atomic_mass_map[691770000] = 176.94904; + atomic_mass_map[701770000] = 176.945265586; + atomic_mass_map[711770000] = 176.943761525; + atomic_mass_map[721770000] = 176.943227717; + atomic_mass_map[731770000] = 176.944479469; + atomic_mass_map[741770000] = 176.946643; + atomic_mass_map[751770000] = 176.950328; + atomic_mass_map[761770000] = 176.954965628; + atomic_mass_map[771770000] = 176.9613015; + atomic_mass_map[781770000] = 176.968469537; + atomic_mass_map[791770000] = 176.976870439; + atomic_mass_map[801770000] = 176.986277319; + atomic_mass_map[811770000] = 176.996430829; + atomic_mass_map[691780000] = 177.95264; + atomic_mass_map[701780000] = 177.946651444; + atomic_mass_map[711780000] = 177.945958018; + atomic_mass_map[721780000] = 177.943705833; + atomic_mass_map[731780000] = 177.945678; + atomic_mass_map[741780000] = 177.945883303; + atomic_mass_map[751780000] = 177.950989; + atomic_mass_map[761780000] = 177.953253627; + atomic_mass_map[771780000] = 177.961082; + atomic_mass_map[781780000] = 177.965649523; + atomic_mass_map[791780000] = 177.97603192; + atomic_mass_map[801780000] = 177.982483769; + atomic_mass_map[811780000] = 177.994854; + atomic_mass_map[821780000] = 178.003831243; + atomic_mass_map[691790000] = 178.95534; + atomic_mass_map[701790000] = 178.95004; + atomic_mass_map[711790000] = 178.947330935; + atomic_mass_map[721790000] = 178.945823212; + atomic_mass_map[731790000] = 178.945936555; + atomic_mass_map[741790000] = 178.947077043; + atomic_mass_map[751790000] = 178.94998913; + atomic_mass_map[761790000] = 178.953816881; + atomic_mass_map[771790000] = 178.959120178; + atomic_mass_map[781790000] = 178.965358953; + atomic_mass_map[791790000] = 178.973173654; + atomic_mass_map[801790000] = 178.981831329; + atomic_mass_map[811790000] = 178.991110696; + atomic_mass_map[821790000] = 179.002201112; + atomic_mass_map[701800000] = 179.95212; + atomic_mass_map[711800000] = 179.94988825; + atomic_mass_map[721800000] = 179.946557042; + atomic_mass_map[731800000] = 179.947464832; + atomic_mass_map[741800000] = 179.946710805; + atomic_mass_map[751800000] = 179.950791568; + atomic_mass_map[761800000] = 179.952375485; + atomic_mass_map[771800000] = 179.959229446; + atomic_mass_map[781800000] = 179.963031955; + atomic_mass_map[791800000] = 179.972523397; + atomic_mass_map[801800000] = 179.978260335; + atomic_mass_map[811800000] = 179.990056524; + atomic_mass_map[821800000] = 179.997928286; + atomic_mass_map[701810000] = 180.95589; + atomic_mass_map[711810000] = 180.951908; + atomic_mass_map[721810000] = 180.949108338; + atomic_mass_map[731810000] = 180.947995769; + atomic_mass_map[741810000] = 180.948197783; + atomic_mass_map[751810000] = 180.950057673; + atomic_mass_map[761810000] = 180.953247188; + atomic_mass_map[771810000] = 180.957625456; + atomic_mass_map[781810000] = 180.963097588; + atomic_mass_map[791810000] = 180.970079047; + atomic_mass_map[801810000] = 180.977819371; + atomic_mass_map[811810000] = 180.986259979; + atomic_mass_map[821810000] = 180.99665331; + atomic_mass_map[711820000] = 181.95504; + atomic_mass_map[721820000] = 181.950561185; + atomic_mass_map[731820000] = 181.950151853; + atomic_mass_map[741820000] = 181.948203945; + atomic_mass_map[751820000] = 181.951209869; + atomic_mass_map[761820000] = 181.952110187; + atomic_mass_map[771820000] = 181.958076296; + atomic_mass_map[781820000] = 181.961171823; + atomic_mass_map[791820000] = 181.969617874; + atomic_mass_map[801820000] = 181.974689351; + atomic_mass_map[811820000] = 181.985713159; + atomic_mass_map[821820000] = 181.992672466; + atomic_mass_map[711830000] = 182.957363; + atomic_mass_map[721830000] = 182.953530444; + atomic_mass_map[731830000] = 182.95137262; + atomic_mass_map[741830000] = 182.950222748; + atomic_mass_map[751830000] = 182.950819638; + atomic_mass_map[761830000] = 182.953124719; + atomic_mass_map[771830000] = 182.956839968; + atomic_mass_map[781830000] = 182.961596804; + atomic_mass_map[791830000] = 182.967590635; + atomic_mass_map[801830000] = 182.974444783; + atomic_mass_map[811830000] = 182.982192839; + atomic_mass_map[821830000] = 182.991872098; + atomic_mass_map[711840000] = 183.96091; + atomic_mass_map[721840000] = 183.955446243; + atomic_mass_map[731840000] = 183.954007694; + atomic_mass_map[741840000] = 183.950930916; + atomic_mass_map[751840000] = 183.952522809; + atomic_mass_map[761840000] = 183.952488536; + atomic_mass_map[771840000] = 183.957476; + atomic_mass_map[781840000] = 183.959915113; + atomic_mass_map[791840000] = 183.967451524; + atomic_mass_map[801840000] = 183.971713528; + atomic_mass_map[811840000] = 183.981885851; + atomic_mass_map[821840000] = 183.988135701; + atomic_mass_map[831840000] = 184.001274756; + atomic_mass_map[711850000] = 184.96362; + atomic_mass_map[721850000] = 184.958862; + atomic_mass_map[731850000] = 184.955559084; + atomic_mass_map[741850000] = 184.953418974; + atomic_mass_map[751850000] = 184.952954486; + atomic_mass_map[761850000] = 184.954041741; + atomic_mass_map[771850000] = 184.956698; + atomic_mass_map[781850000] = 184.960613659; + atomic_mass_map[791850000] = 184.965789569; + atomic_mass_map[801850000] = 184.971899388; + atomic_mass_map[811850000] = 184.97878905; + atomic_mass_map[821850000] = 184.987610004; + atomic_mass_map[831850000] = 184.9976; + atomic_mass_map[721860000] = 185.960897; + atomic_mass_map[731860000] = 185.958550667; + atomic_mass_map[741860000] = 185.954362771; + atomic_mass_map[751860000] = 185.954985595; + atomic_mass_map[761860000] = 185.953835044; + atomic_mass_map[771860000] = 185.957944153; + atomic_mass_map[781860000] = 185.959350812; + atomic_mass_map[791860000] = 185.965952703; + atomic_mass_map[801860000] = 185.969362272; + atomic_mass_map[811860000] = 185.978650841; + atomic_mass_map[821860000] = 185.984238331; + atomic_mass_map[831860000] = 185.996643681; + atomic_mass_map[841860000] = 186.004393241; + atomic_mass_map[721870000] = 186.96477; + atomic_mass_map[731870000] = 186.960386; + atomic_mass_map[741870000] = 186.957158841; + atomic_mass_map[751870000] = 186.955750071; + atomic_mass_map[761870000] = 186.955747422; + atomic_mass_map[771870000] = 186.957542; + atomic_mass_map[781870000] = 186.960616976; + atomic_mass_map[791870000] = 186.964543155; + atomic_mass_map[801870000] = 186.969814428; + atomic_mass_map[811870000] = 186.975906348; + atomic_mass_map[821870000] = 186.983910895; + atomic_mass_map[831870000] = 186.993147184; + atomic_mass_map[841870000] = 187.003041054; + atomic_mass_map[721880000] = 187.96685; + atomic_mass_map[731880000] = 187.963916; + atomic_mass_map[741880000] = 187.958486177; + atomic_mass_map[751880000] = 187.95811151; + atomic_mass_map[761880000] = 187.955835174; + atomic_mass_map[771880000] = 187.958828095; + atomic_mass_map[781880000] = 187.959388889; + atomic_mass_map[791880000] = 187.965349392; + atomic_mass_map[801880000] = 187.967566887; + atomic_mass_map[811880000] = 187.976020886; + atomic_mass_map[821880000] = 187.980874815; + atomic_mass_map[831880000] = 187.992286943; + atomic_mass_map[841880000] = 187.999415569; + atomic_mass_map[721890000] = 188.97084; + atomic_mass_map[731890000] = 188.96583; + atomic_mass_map[741890000] = 188.961763; + atomic_mass_map[751890000] = 188.95922602; + atomic_mass_map[761890000] = 188.958144162; + atomic_mass_map[771890000] = 188.958715028; + atomic_mass_map[781890000] = 188.960831282; + atomic_mass_map[791890000] = 188.963948286; + atomic_mass_map[801890000] = 188.968194927; + atomic_mass_map[811890000] = 188.973588471; + atomic_mass_map[821890000] = 188.980807; + atomic_mass_map[831890000] = 188.989194984; + atomic_mass_map[841890000] = 188.998473429; + atomic_mass_map[731900000] = 189.96939; + atomic_mass_map[741900000] = 189.963090589; + atomic_mass_map[751900000] = 189.96174426; + atomic_mass_map[761900000] = 189.958443702; + atomic_mass_map[771900000] = 189.960541215; + atomic_mass_map[781900000] = 189.959929707; + atomic_mass_map[791900000] = 189.96469839; + atomic_mass_map[801900000] = 189.966322735; + atomic_mass_map[811900000] = 189.973828; + atomic_mass_map[821900000] = 189.978081999; + atomic_mass_map[831900000] = 189.988621561; + atomic_mass_map[841900000] = 189.995100569; + atomic_mass_map[731910000] = 190.97156; + atomic_mass_map[741910000] = 190.966531; + atomic_mass_map[751910000] = 190.963121551; + atomic_mass_map[761910000] = 190.960926361; + atomic_mass_map[771910000] = 190.960589293; + atomic_mass_map[781910000] = 190.961672912; + atomic_mass_map[791910000] = 190.963702248; + atomic_mass_map[801910000] = 190.96715716; + atomic_mass_map[811910000] = 190.971784199; + atomic_mass_map[821910000] = 190.978276; + atomic_mass_map[831910000] = 190.985786556; + atomic_mass_map[841910000] = 190.994558462; + atomic_mass_map[851910000] = 191.004147909; + atomic_mass_map[731920000] = 191.97514; + atomic_mass_map[741920000] = 191.96817; + atomic_mass_map[751920000] = 191.966088; + atomic_mass_map[761920000] = 191.961476998; + atomic_mass_map[771920000] = 191.962600247; + atomic_mass_map[781920000] = 191.961038746; + atomic_mass_map[791920000] = 191.964813694; + atomic_mass_map[801920000] = 191.965634702; + atomic_mass_map[811920000] = 191.972225; + atomic_mass_map[821920000] = 191.975775008; + atomic_mass_map[831920000] = 191.985469058; + atomic_mass_map[841920000] = 191.991335925; + atomic_mass_map[851920000] = 192.003151707; + atomic_mass_map[741930000] = 192.97178; + atomic_mass_map[751930000] = 192.967541; + atomic_mass_map[761930000] = 192.96414787; + atomic_mass_map[771930000] = 192.962921587; + atomic_mass_map[781930000] = 192.96298238; + atomic_mass_map[791930000] = 192.964137257; + atomic_mass_map[801930000] = 192.966652658; + atomic_mass_map[811930000] = 192.970501998; + atomic_mass_map[821930000] = 192.976173234; + atomic_mass_map[831930000] = 192.982959813; + atomic_mass_map[841930000] = 192.991025678; + atomic_mass_map[851930000] = 192.999927418; + atomic_mass_map[861930000] = 193.009707979; + atomic_mass_map[741940000] = 193.97367; + atomic_mass_map[751940000] = 193.97076; + atomic_mass_map[761940000] = 193.96517724; + atomic_mass_map[771940000] = 193.965073536; + atomic_mass_map[781940000] = 193.96268085; + atomic_mass_map[791940000] = 193.965417754; + atomic_mass_map[801940000] = 193.965449112; + atomic_mass_map[811940000] = 193.971081412; + atomic_mass_map[821940000] = 193.97401225; + atomic_mass_map[831940000] = 193.982785; + atomic_mass_map[841940000] = 193.988186101; + atomic_mass_map[851940000] = 193.999236139; + atomic_mass_map[861940000] = 194.006144389; + atomic_mass_map[751950000] = 194.97254; + atomic_mass_map[761950000] = 194.968318; + atomic_mass_map[771950000] = 194.96597473; + atomic_mass_map[781950000] = 194.964791719; + atomic_mass_map[791950000] = 194.965035225; + atomic_mass_map[801950000] = 194.96672054; + atomic_mass_map[811950000] = 194.969774268; + atomic_mass_map[821950000] = 194.974542922; + atomic_mass_map[831950000] = 194.980648781; + atomic_mass_map[841950000] = 194.988125532; + atomic_mass_map[851950000] = 194.996268546; + atomic_mass_map[861950000] = 195.005421673; + atomic_mass_map[751960000] = 195.9758; + atomic_mass_map[761960000] = 195.969641463; + atomic_mass_map[771960000] = 195.968397112; + atomic_mass_map[781960000] = 195.964952091; + atomic_mass_map[791960000] = 195.966569908; + atomic_mass_map[801960000] = 195.96583256; + atomic_mass_map[811960000] = 195.970481193; + atomic_mass_map[821960000] = 195.972774233; + atomic_mass_map[831960000] = 195.980666509; + atomic_mass_map[841960000] = 195.985525902; + atomic_mass_map[851960000] = 195.995799619; + atomic_mass_map[861960000] = 196.002115998; + atomic_mass_map[751970000] = 196.97799; + atomic_mass_map[761970000] = 196.97283; + atomic_mass_map[771970000] = 196.969655415; + atomic_mass_map[781970000] = 196.967340687; + atomic_mass_map[791970000] = 196.966568786; + atomic_mass_map[801970000] = 196.967212847; + atomic_mass_map[811970000] = 196.96957589; + atomic_mass_map[821970000] = 196.973431166; + atomic_mass_map[831970000] = 196.978865099; + atomic_mass_map[841970000] = 196.985659522; + atomic_mass_map[851970000] = 196.993189187; + atomic_mass_map[861970000] = 197.00158462; + atomic_mass_map[751980000] = 197.9816; + atomic_mass_map[761980000] = 197.97441; + atomic_mass_map[771980000] = 197.97228; + atomic_mass_map[781980000] = 197.96789492; + atomic_mass_map[791980000] = 197.96824242; + atomic_mass_map[801980000] = 197.966768602; + atomic_mass_map[811980000] = 197.970483065; + atomic_mass_map[821980000] = 197.972034077; + atomic_mass_map[831980000] = 197.979206; + atomic_mass_map[841980000] = 197.983389132; + atomic_mass_map[851980000] = 197.992784; + atomic_mass_map[861980000] = 197.998679156; + atomic_mass_map[761990000] = 198.97801; + atomic_mass_map[771990000] = 198.973805301; + atomic_mass_map[781990000] = 198.970595224; + atomic_mass_map[791990000] = 198.968765282; + atomic_mass_map[801990000] = 198.968280643; + atomic_mass_map[811990000] = 198.969877; + atomic_mass_map[821990000] = 198.97291268; + atomic_mass_map[831990000] = 198.97767301; + atomic_mass_map[841990000] = 198.983667115; + atomic_mass_map[851990000] = 198.990527654; + atomic_mass_map[861990000] = 198.998389856; + atomic_mass_map[871990000] = 199.007258594; + atomic_mass_map[762000000] = 199.97984; + atomic_mass_map[772000000] = 199.9768; + atomic_mass_map[782000000] = 199.971442807; + atomic_mass_map[792000000] = 199.970756456; + atomic_mass_map[802000000] = 199.96832659; + atomic_mass_map[812000000] = 199.970963258; + atomic_mass_map[822000000] = 199.971818893; + atomic_mass_map[832000000] = 199.978131179; + atomic_mass_map[842000000] = 199.98179879; + atomic_mass_map[852000000] = 199.990351015; + atomic_mass_map[862000000] = 199.995690431; + atomic_mass_map[872000000] = 200.006586003; + atomic_mass_map[762010000] = 200.98364; + atomic_mass_map[772010000] = 200.97864; + atomic_mass_map[782010000] = 200.974513112; + atomic_mass_map[792010000] = 200.971657484; + atomic_mass_map[802010000] = 200.970302839; + atomic_mass_map[812010000] = 200.970822212; + atomic_mass_map[822010000] = 200.972882917; + atomic_mass_map[832010000] = 200.977010416; + atomic_mass_map[842010000] = 200.982259806; + atomic_mass_map[852010000] = 200.988417147; + atomic_mass_map[862010000] = 200.99562801; + atomic_mass_map[872010000] = 201.003866593; + atomic_mass_map[882010000] = 201.012712; + atomic_mass_map[762020000] = 201.98595; + atomic_mass_map[772020000] = 201.98199; + atomic_mass_map[782020000] = 201.975639; + atomic_mass_map[792020000] = 201.973856; + atomic_mass_map[802020000] = 201.9706434; + atomic_mass_map[812020000] = 201.972102441; + atomic_mass_map[822020000] = 201.972152026; + atomic_mass_map[832020000] = 201.977733861; + atomic_mass_map[842020000] = 201.980757657; + atomic_mass_map[852020000] = 201.988630302; + atomic_mass_map[862020000] = 201.993264277; + atomic_mass_map[872020000] = 202.00332; + atomic_mass_map[882020000] = 202.009759744; + atomic_mass_map[772030000] = 202.98423; + atomic_mass_map[782030000] = 202.97893; + atomic_mass_map[792030000] = 202.975154446; + atomic_mass_map[802030000] = 202.972872837; + atomic_mass_map[812030000] = 202.972344593; + atomic_mass_map[822030000] = 202.973391126; + atomic_mass_map[832030000] = 202.976892779; + atomic_mass_map[842030000] = 202.981416133; + atomic_mass_map[852030000] = 202.98694299; + atomic_mass_map[862030000] = 202.993387741; + atomic_mass_map[872030000] = 203.000940729; + atomic_mass_map[882030000] = 203.009304274; + atomic_mass_map[772040000] = 203.9896; + atomic_mass_map[782040000] = 203.98076; + atomic_mass_map[792040000] = 203.977831; + atomic_mass_map[802040000] = 203.973493981; + atomic_mass_map[812040000] = 203.9738639; + atomic_mass_map[822040000] = 203.973043981; + atomic_mass_map[832040000] = 203.977836062; + atomic_mass_map[842040000] = 203.980310339; + atomic_mass_map[852040000] = 203.987251198; + atomic_mass_map[862040000] = 203.991429922; + atomic_mass_map[872040000] = 204.000652059; + atomic_mass_map[882040000] = 204.006491866; + atomic_mass_map[782050000] = 204.98608; + atomic_mass_map[792050000] = 204.97985; + atomic_mass_map[802050000] = 204.976073417; + atomic_mass_map[812050000] = 204.974427801; + atomic_mass_map[822050000] = 204.974482157; + atomic_mass_map[832050000] = 204.977386694; + atomic_mass_map[842050000] = 204.981203091; + atomic_mass_map[852050000] = 204.986075861; + atomic_mass_map[862050000] = 204.99171884; + atomic_mass_map[872050000] = 204.998593858; + atomic_mass_map[882050000] = 205.006268245; + atomic_mass_map[782060000] = 205.98966; + atomic_mass_map[792060000] = 205.98474; + atomic_mass_map[802060000] = 205.977514401; + atomic_mass_map[812060000] = 205.976110589; + atomic_mass_map[822060000] = 205.974465683; + atomic_mass_map[832060000] = 205.978499317; + atomic_mass_map[842060000] = 205.980473991; + atomic_mass_map[852060000] = 205.986656933; + atomic_mass_map[862060000] = 205.990214219; + atomic_mass_map[872060000] = 205.998666132; + atomic_mass_map[882060000] = 206.003828053; + atomic_mass_map[892060000] = 206.014452; + atomic_mass_map[792070000] = 206.9884; + atomic_mass_map[802070000] = 206.9823; + atomic_mass_map[812070000] = 206.977419712; + atomic_mass_map[822070000] = 206.975897297; + atomic_mass_map[832070000] = 206.978471022; + atomic_mass_map[842070000] = 206.981593762; + atomic_mass_map[852070000] = 206.985800332; + atomic_mass_map[862070000] = 206.990730254; + atomic_mass_map[872070000] = 206.996946478; + atomic_mass_map[882070000] = 207.003799159; + atomic_mass_map[892070000] = 207.01196583; + atomic_mass_map[792080000] = 207.99345; + atomic_mass_map[802080000] = 207.985759; + atomic_mass_map[812080000] = 207.982019001; + atomic_mass_map[822080000] = 207.976652481; + atomic_mass_map[832080000] = 207.97974253; + atomic_mass_map[842080000] = 207.981246092; + atomic_mass_map[852080000] = 207.986613302; + atomic_mass_map[862080000] = 207.989634687; + atomic_mass_map[872080000] = 207.997138132; + atomic_mass_map[882080000] = 208.001841122; + atomic_mass_map[892080000] = 208.011550406; + atomic_mass_map[902080000] = 208.017900275; + atomic_mass_map[792090000] = 208.99735; + atomic_mass_map[802090000] = 208.99072; + atomic_mass_map[812090000] = 208.985359353; + atomic_mass_map[822090000] = 208.981090461; + atomic_mass_map[832090000] = 208.980399068; + atomic_mass_map[842090000] = 208.982430836; + atomic_mass_map[852090000] = 208.986170215; + atomic_mass_map[862090000] = 208.99041451; + atomic_mass_map[872090000] = 208.995954932; + atomic_mass_map[882090000] = 209.001990455; + atomic_mass_map[892090000] = 209.009494762; + atomic_mass_map[902090000] = 209.017752974; + atomic_mass_map[792100000] = 210.0025; + atomic_mass_map[802100000] = 209.99424; + atomic_mass_map[812100000] = 209.990073958; + atomic_mass_map[822100000] = 209.984188861; + atomic_mass_map[832100000] = 209.984120705; + atomic_mass_map[842100000] = 209.982874076; + atomic_mass_map[852100000] = 209.987147898; + atomic_mass_map[862100000] = 209.989689107; + atomic_mass_map[872100000] = 209.996422409; + atomic_mass_map[882100000] = 210.000494169; + atomic_mass_map[892100000] = 210.009436052; + atomic_mass_map[902100000] = 210.015093642; + atomic_mass_map[802110000] = 210.99933; + atomic_mass_map[812110000] = 210.993475; + atomic_mass_map[822110000] = 210.988737125; + atomic_mass_map[832110000] = 210.987269741; + atomic_mass_map[842110000] = 210.986653562; + atomic_mass_map[852110000] = 210.987496614; + atomic_mass_map[862110000] = 210.99060111; + atomic_mass_map[872110000] = 210.995555723; + atomic_mass_map[882110000] = 211.000893214; + atomic_mass_map[892110000] = 211.007731899; + atomic_mass_map[902110000] = 211.014929468; + atomic_mass_map[802120000] = 212.00296; + atomic_mass_map[812120000] = 211.998335; + atomic_mass_map[822120000] = 211.991897703; + atomic_mass_map[832120000] = 211.991286026; + atomic_mass_map[842120000] = 211.988868376; + atomic_mass_map[852120000] = 211.990737688; + atomic_mass_map[862120000] = 211.990703919; + atomic_mass_map[872120000] = 211.996225652; + atomic_mass_map[882120000] = 211.999786715; + atomic_mass_map[892120000] = 212.007813171; + atomic_mass_map[902120000] = 212.012987595; + atomic_mass_map[912120000] = 212.023202993; + atomic_mass_map[802130000] = 213.00823; + atomic_mass_map[812130000] = 213.001915; + atomic_mass_map[822130000] = 212.996562894; + atomic_mass_map[832130000] = 212.994385067; + atomic_mass_map[842130000] = 212.992857623; + atomic_mass_map[852130000] = 212.992936978; + atomic_mass_map[862130000] = 212.993883069; + atomic_mass_map[872130000] = 212.996186041; + atomic_mass_map[882130000] = 213.000384258; + atomic_mass_map[892130000] = 213.00660902; + atomic_mass_map[902130000] = 213.013009223; + atomic_mass_map[912130000] = 213.021109239; + atomic_mass_map[802140000] = 214.012; + atomic_mass_map[812140000] = 214.00694; + atomic_mass_map[822140000] = 213.999805917; + atomic_mass_map[832140000] = 213.998711926; + atomic_mass_map[842140000] = 213.995201683; + atomic_mass_map[852140000] = 213.996372066; + atomic_mass_map[862140000] = 213.995362956; + atomic_mass_map[872140000] = 213.998971333; + atomic_mass_map[882140000] = 214.000099727; + atomic_mass_map[892140000] = 214.006918488; + atomic_mass_map[902140000] = 214.011500159; + atomic_mass_map[912140000] = 214.020918483; + atomic_mass_map[802150000] = 215.0174; + atomic_mass_map[812150000] = 215.01064; + atomic_mass_map[822150000] = 215.004741; + atomic_mass_map[832150000] = 215.001769823; + atomic_mass_map[842150000] = 214.999420146; + atomic_mass_map[852150000] = 214.998652849; + atomic_mass_map[862150000] = 214.99874589; + atomic_mass_map[872150000] = 215.000341838; + atomic_mass_map[882150000] = 215.00272042; + atomic_mass_map[892150000] = 215.006474511; + atomic_mass_map[902150000] = 215.011724774; + atomic_mass_map[912150000] = 215.019182929; + atomic_mass_map[802160000] = 216.02132; + atomic_mass_map[812160000] = 216.0158; + atomic_mass_map[822160000] = 216.00803; + atomic_mass_map[832160000] = 216.006305989; + atomic_mass_map[842160000] = 216.001915186; + atomic_mass_map[852160000] = 216.002423555; + atomic_mass_map[862160000] = 216.000271859; + atomic_mass_map[872160000] = 216.003189865; + atomic_mass_map[882160000] = 216.003533423; + atomic_mass_map[892160000] = 216.008743482; + atomic_mass_map[902160000] = 216.011056007; + atomic_mass_map[912160000] = 216.019108913; + atomic_mass_map[812170000] = 217.01966; + atomic_mass_map[822170000] = 217.01314; + atomic_mass_map[832170000] = 217.009372; + atomic_mass_map[842170000] = 217.006318159; + atomic_mass_map[852170000] = 217.004719222; + atomic_mass_map[862170000] = 217.003928018; + atomic_mass_map[872170000] = 217.004632282; + atomic_mass_map[882170000] = 217.006320726; + atomic_mass_map[892170000] = 217.009343872; + atomic_mass_map[902170000] = 217.013116701; + atomic_mass_map[912170000] = 217.018325363; + atomic_mass_map[922170000] = 217.024661; + atomic_mass_map[812180000] = 218.02479; + atomic_mass_map[822180000] = 218.01659; + atomic_mass_map[832180000] = 218.014188; + atomic_mass_map[842180000] = 218.008973546; + atomic_mass_map[852180000] = 218.008694723; + atomic_mass_map[862180000] = 218.005601586; + atomic_mass_map[872180000] = 218.007578653; + atomic_mass_map[882180000] = 218.007140631; + atomic_mass_map[892180000] = 218.01164164; + atomic_mass_map[902180000] = 218.013276331; + atomic_mass_map[912180000] = 218.020058579; + atomic_mass_map[922180000] = 218.023523472; + atomic_mass_map[822190000] = 219.02177; + atomic_mass_map[832190000] = 219.01748; + atomic_mass_map[842190000] = 219.013614; + atomic_mass_map[852190000] = 219.011161848; + atomic_mass_map[862190000] = 219.009480361; + atomic_mass_map[872190000] = 219.009252427; + atomic_mass_map[882190000] = 219.010085484; + atomic_mass_map[892190000] = 219.01242073; + atomic_mass_map[902190000] = 219.015537481; + atomic_mass_map[912190000] = 219.019904029; + atomic_mass_map[922190000] = 219.02499913; + atomic_mass_map[932190000] = 219.03143; + atomic_mass_map[822200000] = 220.02541; + atomic_mass_map[832200000] = 220.02235; + atomic_mass_map[842200000] = 220.016386; + atomic_mass_map[852200000] = 220.015433; + atomic_mass_map[862200000] = 220.01139413; + atomic_mass_map[872200000] = 220.012327702; + atomic_mass_map[882200000] = 220.011025872; + atomic_mass_map[892200000] = 220.014754854; + atomic_mass_map[902200000] = 220.015748148; + atomic_mass_map[912200000] = 220.021705; + atomic_mass_map[922200000] = 220.02462; + atomic_mass_map[932200000] = 220.03254; + atomic_mass_map[832210000] = 221.02587; + atomic_mass_map[842210000] = 221.021228; + atomic_mass_map[852210000] = 221.018017; + atomic_mass_map[862210000] = 221.015537076; + atomic_mass_map[872210000] = 221.014255163; + atomic_mass_map[882210000] = 221.01391768; + atomic_mass_map[892210000] = 221.015591579; + atomic_mass_map[902210000] = 221.018184072; + atomic_mass_map[912210000] = 221.021874941; + atomic_mass_map[922210000] = 221.026284; + atomic_mass_map[932210000] = 221.03204; + atomic_mass_map[832220000] = 222.03078; + atomic_mass_map[842220000] = 222.02414; + atomic_mass_map[852220000] = 222.022494; + atomic_mass_map[862220000] = 222.017578246; + atomic_mass_map[872220000] = 222.017552192; + atomic_mass_map[882220000] = 222.015374846; + atomic_mass_map[892220000] = 222.017844181; + atomic_mass_map[902220000] = 222.018468521; + atomic_mass_map[912220000] = 222.023784; + atomic_mass_map[922220000] = 222.026003; + atomic_mass_map[932220000] = 222.0333; + atomic_mass_map[832230000] = 223.0345; + atomic_mass_map[842230000] = 223.02907; + atomic_mass_map[852230000] = 223.025151; + atomic_mass_map[862230000] = 223.021889286; + atomic_mass_map[872230000] = 223.019736013; + atomic_mass_map[882230000] = 223.018502327; + atomic_mass_map[892230000] = 223.019137747; + atomic_mass_map[902230000] = 223.020811853; + atomic_mass_map[912230000] = 223.023962614; + atomic_mass_map[922230000] = 223.027739187; + atomic_mass_map[932230000] = 223.03285; + atomic_mass_map[832240000] = 224.03947; + atomic_mass_map[842240000] = 224.03211; + atomic_mass_map[852240000] = 224.029749; + atomic_mass_map[862240000] = 224.024095805; + atomic_mass_map[872240000] = 224.023398; + atomic_mass_map[882240000] = 224.020211968; + atomic_mass_map[892240000] = 224.021723163; + atomic_mass_map[902240000] = 224.021464382; + atomic_mass_map[912240000] = 224.025617614; + atomic_mass_map[922240000] = 224.027605163; + atomic_mass_map[932240000] = 224.03422; + atomic_mass_map[842250000] = 225.03707; + atomic_mass_map[852250000] = 225.03263; + atomic_mass_map[862250000] = 225.028485574; + atomic_mass_map[872250000] = 225.025572682; + atomic_mass_map[882250000] = 225.023611857; + atomic_mass_map[892250000] = 225.023229987; + atomic_mass_map[902250000] = 225.023951363; + atomic_mass_map[912250000] = 225.026131009; + atomic_mass_map[922250000] = 225.02939135; + atomic_mass_map[932250000] = 225.033910892; + atomic_mass_map[842260000] = 226.04031; + atomic_mass_map[852260000] = 226.03716; + atomic_mass_map[862260000] = 226.030861382; + atomic_mass_map[872260000] = 226.029566; + atomic_mass_map[882260000] = 226.02541033; + atomic_mass_map[892260000] = 226.026098383; + atomic_mass_map[902260000] = 226.024903383; + atomic_mass_map[912260000] = 226.027948082; + atomic_mass_map[922260000] = 226.029339101; + atomic_mass_map[932260000] = 226.035188; + atomic_mass_map[842270000] = 227.04539; + atomic_mass_map[852270000] = 227.04024; + atomic_mass_map[862270000] = 227.035304396; + atomic_mass_map[872270000] = 227.031869; + atomic_mass_map[882270000] = 227.029178349; + atomic_mass_map[892270000] = 227.027752283; + atomic_mass_map[902270000] = 227.027704227; + atomic_mass_map[912270000] = 227.028805351; + atomic_mass_map[922270000] = 227.031156773; + atomic_mass_map[932270000] = 227.034957129; + atomic_mass_map[852280000] = 228.04475; + atomic_mass_map[862280000] = 228.037835418; + atomic_mass_map[872280000] = 228.035823175; + atomic_mass_map[882280000] = 228.031070728; + atomic_mass_map[892280000] = 228.031021547; + atomic_mass_map[902280000] = 228.028741272; + atomic_mass_map[912280000] = 228.031051673; + atomic_mass_map[922280000] = 228.031371492; + atomic_mass_map[932280000] = 228.036066866; + atomic_mass_map[942280000] = 228.038732491; + atomic_mass_map[852290000] = 229.04812; + atomic_mass_map[862290000] = 229.042257277; + atomic_mass_map[872290000] = 229.038298; + atomic_mass_map[882290000] = 229.034942262; + atomic_mass_map[892290000] = 229.032955884; + atomic_mass_map[902290000] = 229.031762713; + atomic_mass_map[912290000] = 229.032097236; + atomic_mass_map[922290000] = 229.03350628; + atomic_mass_map[932290000] = 229.036264139; + atomic_mass_map[942290000] = 229.040143614; + atomic_mass_map[862300000] = 230.04514; + atomic_mass_map[872300000] = 230.042416349; + atomic_mass_map[882300000] = 230.037054781; + atomic_mass_map[892300000] = 230.036327; + atomic_mass_map[902300000] = 230.03313413; + atomic_mass_map[912300000] = 230.034541047; + atomic_mass_map[922300000] = 230.033940096; + atomic_mass_map[932300000] = 230.037827926; + atomic_mass_map[942300000] = 230.039650283; + atomic_mass_map[952300000] = 230.04609; + atomic_mass_map[862310000] = 231.04987; + atomic_mass_map[872310000] = 231.045158; + atomic_mass_map[882310000] = 231.041027087; + atomic_mass_map[892310000] = 231.038393; + atomic_mass_map[902310000] = 231.036304628; + atomic_mass_map[912310000] = 231.035884243; + atomic_mass_map[922310000] = 231.036293861; + atomic_mass_map[932310000] = 231.038245364; + atomic_mass_map[942310000] = 231.041101511; + atomic_mass_map[952310000] = 231.04556; + atomic_mass_map[872320000] = 232.049368; + atomic_mass_map[882320000] = 232.04347527; + atomic_mass_map[892320000] = 232.042034; + atomic_mass_map[902320000] = 232.03805576; + atomic_mass_map[912320000] = 232.038591737; + atomic_mass_map[922320000] = 232.037156297; + atomic_mass_map[932320000] = 232.040109; + atomic_mass_map[942320000] = 232.041184582; + atomic_mass_map[952320000] = 232.04645; + atomic_mass_map[962320000] = 232.049817; + atomic_mass_map[872330000] = 233.05264; + atomic_mass_map[882330000] = 233.047582; + atomic_mass_map[892330000] = 233.044346; + atomic_mass_map[902330000] = 233.041582278; + atomic_mass_map[912330000] = 233.040247222; + atomic_mass_map[922330000] = 233.039635525; + atomic_mass_map[932330000] = 233.040740989; + atomic_mass_map[942330000] = 233.042997716; + atomic_mass_map[952330000] = 233.046445; + atomic_mass_map[962330000] = 233.050770001; + atomic_mass_map[882340000] = 234.050342; + atomic_mass_map[892340000] = 234.048139; + atomic_mass_map[902340000] = 234.043601407; + atomic_mass_map[912340000] = 234.043307161; + atomic_mass_map[922340000] = 234.040952306; + atomic_mass_map[932340000] = 234.042895256; + atomic_mass_map[942340000] = 234.043317387; + atomic_mass_map[952340000] = 234.047731; + atomic_mass_map[962340000] = 234.050160237; + atomic_mass_map[972340000] = 234.057267; + atomic_mass_map[882350000] = 235.05497; + atomic_mass_map[892350000] = 235.05084; + atomic_mass_map[902350000] = 235.047255; + atomic_mass_map[912350000] = 235.045399; + atomic_mass_map[922350000] = 235.043930131; + atomic_mass_map[932350000] = 235.044063487; + atomic_mass_map[942350000] = 235.045286206; + atomic_mass_map[952350000] = 235.047908245; + atomic_mass_map[962350000] = 235.051542; + atomic_mass_map[972350000] = 235.05658; + atomic_mass_map[892360000] = 236.054988; + atomic_mass_map[902360000] = 236.049657; + atomic_mass_map[912360000] = 236.048668; + atomic_mass_map[922360000] = 236.04556821; + atomic_mass_map[932360000] = 236.046569744; + atomic_mass_map[942360000] = 236.046058109; + atomic_mass_map[952360000] = 236.049428; + atomic_mass_map[962360000] = 236.051374477; + atomic_mass_map[972360000] = 236.05748; + atomic_mass_map[892370000] = 237.05827; + atomic_mass_map[902370000] = 237.053629; + atomic_mass_map[912370000] = 237.051023; + atomic_mass_map[922370000] = 237.048730378; + atomic_mass_map[932370000] = 237.048173649; + atomic_mass_map[942370000] = 237.04840983; + atomic_mass_map[952370000] = 237.049996; + atomic_mass_map[962370000] = 237.052869294; + atomic_mass_map[972370000] = 237.0571; + atomic_mass_map[982370000] = 237.062197789; + atomic_mass_map[902380000] = 238.056496; + atomic_mass_map[912380000] = 238.054637; + atomic_mass_map[922380000] = 238.050788423; + atomic_mass_map[932380000] = 238.050946611; + atomic_mass_map[942380000] = 238.049560111; + atomic_mass_map[952380000] = 238.051984542; + atomic_mass_map[962380000] = 238.05308142; + atomic_mass_map[972380000] = 238.058204; + atomic_mass_map[982380000] = 238.06149; + atomic_mass_map[902390000] = 239.06077; + atomic_mass_map[912390000] = 239.05726; + atomic_mass_map[922390000] = 239.054293475; + atomic_mass_map[932390000] = 239.052939241; + atomic_mass_map[942390000] = 239.052163591; + atomic_mass_map[952390000] = 239.053024699; + atomic_mass_map[962390000] = 239.054910117; + atomic_mass_map[972390000] = 239.058241; + atomic_mass_map[982390000] = 239.062529; + atomic_mass_map[992390000] = 239.06823; + atomic_mass_map[912400000] = 240.06098; + atomic_mass_map[922400000] = 240.056593356; + atomic_mass_map[932400000] = 240.056165427; + atomic_mass_map[942400000] = 240.05381375; + atomic_mass_map[952400000] = 240.055300384; + atomic_mass_map[962400000] = 240.055529681; + atomic_mass_map[972400000] = 240.059759; + atomic_mass_map[982400000] = 240.062255728; + atomic_mass_map[992400000] = 240.06892; + atomic_mass_map[912410000] = 241.06408; + atomic_mass_map[922410000] = 241.06033; + atomic_mass_map[932410000] = 241.058252636; + atomic_mass_map[942410000] = 241.056851661; + atomic_mass_map[952410000] = 241.056829349; + atomic_mass_map[962410000] = 241.05765317; + atomic_mass_map[972410000] = 241.060155; + atomic_mass_map[982410000] = 241.06369; + atomic_mass_map[992410000] = 241.06856; + atomic_mass_map[1002410000] = 241.07421; + atomic_mass_map[922420000] = 242.062932; + atomic_mass_map[932420000] = 242.061641379; + atomic_mass_map[942420000] = 242.058742809; + atomic_mass_map[952420000] = 242.059549364; + atomic_mass_map[962420000] = 242.058836039; + atomic_mass_map[972420000] = 242.061982; + atomic_mass_map[982420000] = 242.063754274; + atomic_mass_map[992420000] = 242.069567; + atomic_mass_map[1002420000] = 242.07343; + atomic_mass_map[922430000] = 243.06699; + atomic_mass_map[932430000] = 243.06428; + atomic_mass_map[942430000] = 243.062003595; + atomic_mass_map[952430000] = 243.061381302; + atomic_mass_map[962430000] = 243.061389325; + atomic_mass_map[972430000] = 243.063007791; + atomic_mass_map[982430000] = 243.065477; + atomic_mass_map[992430000] = 243.06951; + atomic_mass_map[1002430000] = 243.074465; + atomic_mass_map[932440000] = 244.06785; + atomic_mass_map[942440000] = 244.06420526; + atomic_mass_map[952440000] = 244.064285052; + atomic_mass_map[962440000] = 244.062752783; + atomic_mass_map[972440000] = 244.065180979; + atomic_mass_map[982440000] = 244.066000801; + atomic_mass_map[992440000] = 244.070883; + atomic_mass_map[1002440000] = 244.074038; + atomic_mass_map[932450000] = 245.0708; + atomic_mass_map[942450000] = 245.067826058; + atomic_mass_map[952450000] = 245.066454834; + atomic_mass_map[962450000] = 245.065491454; + atomic_mass_map[972450000] = 245.066361821; + atomic_mass_map[982450000] = 245.068048677; + atomic_mass_map[992450000] = 245.071249; + atomic_mass_map[1002450000] = 245.075349; + atomic_mass_map[1012450000] = 245.080808; + atomic_mass_map[942460000] = 246.070205458; + atomic_mass_map[952460000] = 246.069775; + atomic_mass_map[962460000] = 246.067223841; + atomic_mass_map[972460000] = 246.068673126; + atomic_mass_map[982460000] = 246.068805531; + atomic_mass_map[992460000] = 246.072896; + atomic_mass_map[1002460000] = 246.07535047; + atomic_mass_map[1012460000] = 246.081713; + atomic_mass_map[942470000] = 247.07419; + atomic_mass_map[952470000] = 247.072093; + atomic_mass_map[962470000] = 247.070354131; + atomic_mass_map[972470000] = 247.070307302; + atomic_mass_map[982470000] = 247.070965463; + atomic_mass_map[992470000] = 247.073622017; + atomic_mass_map[1002470000] = 247.076945; + atomic_mass_map[1012470000] = 247.081522; + atomic_mass_map[952480000] = 248.075753; + atomic_mass_map[962480000] = 248.072349862; + atomic_mass_map[972480000] = 248.073088; + atomic_mass_map[982480000] = 248.072185066; + atomic_mass_map[992480000] = 248.075471; + atomic_mass_map[1002480000] = 248.077186463; + atomic_mass_map[1012480000] = 248.082823; + atomic_mass_map[1022480000] = 248.08655; + atomic_mass_map[952490000] = 249.07848; + atomic_mass_map[962490000] = 249.075954767; + atomic_mass_map[972490000] = 249.074987676; + atomic_mass_map[982490000] = 249.074853903; + atomic_mass_map[992490000] = 249.076411; + atomic_mass_map[1002490000] = 249.07892755; + atomic_mass_map[1012490000] = 249.082914; + atomic_mass_map[1022490000] = 249.087797; + atomic_mass_map[962500000] = 250.078358313; + atomic_mass_map[972500000] = 250.078316698; + atomic_mass_map[982500000] = 250.076406244; + atomic_mass_map[992500000] = 250.078612; + atomic_mass_map[1002500000] = 250.079521034; + atomic_mass_map[1012500000] = 250.084415; + atomic_mass_map[1022500000] = 250.087562; + atomic_mass_map[962510000] = 251.082286441; + atomic_mass_map[972510000] = 251.080762009; + atomic_mass_map[982510000] = 251.079588625; + atomic_mass_map[992510000] = 251.079993586; + atomic_mass_map[1002510000] = 251.08153989; + atomic_mass_map[1012510000] = 251.084774376; + atomic_mass_map[1022510000] = 251.088944; + atomic_mass_map[1032510000] = 251.09418; + atomic_mass_map[962520000] = 252.08487; + atomic_mass_map[972520000] = 252.084311; + atomic_mass_map[982520000] = 252.081627199; + atomic_mass_map[992520000] = 252.082979865; + atomic_mass_map[1002520000] = 252.08246706; + atomic_mass_map[1012520000] = 252.086432; + atomic_mass_map[1022520000] = 252.088966908; + atomic_mass_map[1032520000] = 252.095264; + atomic_mass_map[972530000] = 253.08688; + atomic_mass_map[982530000] = 253.085134499; + atomic_mass_map[992530000] = 253.084825715; + atomic_mass_map[1002530000] = 253.085184571; + atomic_mass_map[1012530000] = 253.087144; + atomic_mass_map[1022530000] = 253.090564103; + atomic_mass_map[1032530000] = 253.095091; + atomic_mass_map[1042530000] = 253.100438; + atomic_mass_map[972540000] = 254.0906; + atomic_mass_map[982540000] = 254.087324263; + atomic_mass_map[992540000] = 254.088022199; + atomic_mass_map[1002540000] = 254.086854397; + atomic_mass_map[1012540000] = 254.089592; + atomic_mass_map[1022540000] = 254.090955661; + atomic_mass_map[1032540000] = 254.096483; + atomic_mass_map[1042540000] = 254.100053; + atomic_mass_map[982550000] = 255.091048; + atomic_mass_map[992550000] = 255.090274958; + atomic_mass_map[1002550000] = 255.089964038; + atomic_mass_map[1012550000] = 255.091084149; + atomic_mass_map[1022550000] = 255.093191404; + atomic_mass_map[1032550000] = 255.096562404; + atomic_mass_map[1042550000] = 255.101268; + atomic_mass_map[1052550000] = 255.107068; + atomic_mass_map[982560000] = 256.093442; + atomic_mass_map[992560000] = 256.093599; + atomic_mass_map[1002560000] = 256.091774469; + atomic_mass_map[1012560000] = 256.093889; + atomic_mass_map[1022560000] = 256.09428287; + atomic_mass_map[1032560000] = 256.09849403; + atomic_mass_map[1042560000] = 256.101152218; + atomic_mass_map[1052560000] = 256.10789; + atomic_mass_map[992570000] = 257.095979; + atomic_mass_map[1002570000] = 257.095106078; + atomic_mass_map[1012570000] = 257.095542387; + atomic_mass_map[1022570000] = 257.09688783; + atomic_mass_map[1032570000] = 257.099418; + atomic_mass_map[1042570000] = 257.10291812; + atomic_mass_map[1052570000] = 257.107578; + atomic_mass_map[992580000] = 258.09952; + atomic_mass_map[1002580000] = 258.097077; + atomic_mass_map[1012580000] = 258.098431496; + atomic_mass_map[1022580000] = 258.098207; + atomic_mass_map[1032580000] = 258.101755; + atomic_mass_map[1042580000] = 258.103427679; + atomic_mass_map[1052580000] = 258.109285; + atomic_mass_map[1062580000] = 258.112983; + atomic_mass_map[1002590000] = 259.100597; + atomic_mass_map[1012590000] = 259.100511; + atomic_mass_map[1022590000] = 259.101032; + atomic_mass_map[1032590000] = 259.102902; + atomic_mass_map[1042590000] = 259.105596; + atomic_mass_map[1052590000] = 259.109491866; + atomic_mass_map[1062590000] = 259.114396; + atomic_mass_map[1002600000] = 260.102809; + atomic_mass_map[1012600000] = 260.103653; + atomic_mass_map[1022600000] = 260.102644; + atomic_mass_map[1032600000] = 260.105505; + atomic_mass_map[1042600000] = 260.106441; + atomic_mass_map[1052600000] = 260.111297; + atomic_mass_map[1062600000] = 260.114384105; + atomic_mass_map[1072600000] = 260.121659; + atomic_mass_map[1012610000] = 261.105828; + atomic_mass_map[1022610000] = 261.105697; + atomic_mass_map[1032610000] = 261.106884; + atomic_mass_map[1042610000] = 261.108773401; + atomic_mass_map[1052610000] = 261.111917; + atomic_mass_map[1062610000] = 261.115949461; + atomic_mass_map[1072610000] = 261.121455; + atomic_mass_map[1012620000] = 262.109101; + atomic_mass_map[1022620000] = 262.107464; + atomic_mass_map[1032620000] = 262.109612; + atomic_mass_map[1042620000] = 262.109925; + atomic_mass_map[1052620000] = 262.114072; + atomic_mass_map[1062620000] = 262.116336679; + atomic_mass_map[1072620000] = 262.122967; + atomic_mass_map[1022630000] = 263.110715; + atomic_mass_map[1032630000] = 263.111359; + atomic_mass_map[1042630000] = 263.112495; + atomic_mass_map[1052630000] = 263.11499; + atomic_mass_map[1062630000] = 263.118294; + atomic_mass_map[1072630000] = 263.122916; + atomic_mass_map[1082630000] = 263.128522; + atomic_mass_map[1022640000] = 264.112734; + atomic_mass_map[1032640000] = 264.114201; + atomic_mass_map[1042640000] = 264.113879; + atomic_mass_map[1052640000] = 264.117405; + atomic_mass_map[1062640000] = 264.118931; + atomic_mass_map[1072640000] = 264.124593; + atomic_mass_map[1082640000] = 264.128356917; + atomic_mass_map[1032650000] = 265.116193; + atomic_mass_map[1042650000] = 265.116684; + atomic_mass_map[1052650000] = 265.118613; + atomic_mass_map[1062650000] = 265.121093; + atomic_mass_map[1072650000] = 265.124914; + atomic_mass_map[1082650000] = 265.129792986; + atomic_mass_map[1092650000] = 265.135996; + atomic_mass_map[1032660000] = 266.119831; + atomic_mass_map[1042660000] = 266.118172; + atomic_mass_map[1052660000] = 266.121029; + atomic_mass_map[1062660000] = 266.121975; + atomic_mass_map[1072660000] = 266.126794; + atomic_mass_map[1082660000] = 266.1300464; + atomic_mass_map[1092660000] = 266.137374; + atomic_mass_map[1042670000] = 267.121789; + atomic_mass_map[1052670000] = 267.122465; + atomic_mass_map[1062670000] = 267.124357; + atomic_mass_map[1072670000] = 267.127501; + atomic_mass_map[1082670000] = 267.131673; + atomic_mass_map[1092670000] = 267.137189; + atomic_mass_map[1102670000] = 267.143768; + atomic_mass_map[1042680000] = 268.123968; + atomic_mass_map[1052680000] = 268.125671; + atomic_mass_map[1062680000] = 268.125392; + atomic_mass_map[1072680000] = 268.129692; + atomic_mass_map[1082680000] = 268.131865; + atomic_mass_map[1092680000] = 268.138649; + atomic_mass_map[1102680000] = 268.143478; + atomic_mass_map[1052690000] = 269.127911; + atomic_mass_map[1062690000] = 269.128627; + atomic_mass_map[1072690000] = 269.130416; + atomic_mass_map[1082690000] = 269.133753; + atomic_mass_map[1092690000] = 269.138822; + atomic_mass_map[1102690000] = 269.144752124; + atomic_mass_map[1052700000] = 270.131356; + atomic_mass_map[1062700000] = 270.130427; + atomic_mass_map[1072700000] = 270.133363; + atomic_mass_map[1082700000] = 270.13429; + atomic_mass_map[1092700000] = 270.140327; + atomic_mass_map[1102700000] = 270.144584153; + atomic_mass_map[1062710000] = 271.133933; + atomic_mass_map[1072710000] = 271.135256; + atomic_mass_map[1082710000] = 271.13717; + atomic_mass_map[1092710000] = 271.140744; + atomic_mass_map[1102710000] = 271.145946; + atomic_mass_map[1062720000] = 272.13589; + atomic_mass_map[1072720000] = 272.138264; + atomic_mass_map[1082720000] = 272.138495; + atomic_mass_map[1092720000] = 272.143406; + atomic_mass_map[1102720000] = 272.14602; + atomic_mass_map[1112720000] = 272.153273; + atomic_mass_map[1062730000] = 273.13958; + atomic_mass_map[1072730000] = 273.14024; + atomic_mass_map[1082730000] = 273.141679; + atomic_mass_map[1092730000] = 273.144399; + atomic_mass_map[1102730000] = 273.14856; + atomic_mass_map[1112730000] = 273.153127; + atomic_mass_map[1072740000] = 274.143548; + atomic_mass_map[1082740000] = 274.143304; + atomic_mass_map[1092740000] = 274.147245; + atomic_mass_map[1102740000] = 274.149411; + atomic_mass_map[1112740000] = 274.155253; + atomic_mass_map[1072750000] = 275.14567; + atomic_mass_map[1082750000] = 275.146668; + atomic_mass_map[1092750000] = 275.14882; + atomic_mass_map[1102750000] = 275.152033; + atomic_mass_map[1112750000] = 275.155939; + atomic_mass_map[1082760000] = 276.148455; + atomic_mass_map[1092760000] = 276.151594; + atomic_mass_map[1102760000] = 276.153025; + atomic_mass_map[1112760000] = 276.158334; + atomic_mass_map[1122760000] = 276.16141; + atomic_mass_map[1082770000] = 277.151899; + atomic_mass_map[1092770000] = 277.153268; + atomic_mass_map[1102770000] = 277.155914; + atomic_mass_map[1112770000] = 277.159069; + atomic_mass_map[1122770000] = 277.163641; + atomic_mass_map[1092780000] = 278.156307; + atomic_mass_map[1102780000] = 278.15704; + atomic_mass_map[1112780000] = 278.161493; + atomic_mass_map[1122780000] = 278.164156; + atomic_mass_map[1132780000] = 278.170578; + atomic_mass_map[1092790000] = 279.158075; + atomic_mass_map[1102790000] = 279.160097; + atomic_mass_map[1112790000] = 279.162722; + atomic_mass_map[1122790000] = 279.166542; + atomic_mass_map[1132790000] = 279.17095; + atomic_mass_map[1102800000] = 280.161311; + atomic_mass_map[1112800000] = 280.165138; + atomic_mass_map[1122800000] = 280.167147; + atomic_mass_map[1132800000] = 280.17293; + atomic_mass_map[1102810000] = 281.164511; + atomic_mass_map[1112810000] = 281.16636; + atomic_mass_map[1122810000] = 281.169746; + atomic_mass_map[1132810000] = 281.17348; + atomic_mass_map[1112820000] = 282.169119; + atomic_mass_map[1122820000] = 282.170496; + atomic_mass_map[1132820000] = 282.175672; + atomic_mass_map[1112830000] = 283.170544; + atomic_mass_map[1122830000] = 283.17327; + atomic_mass_map[1132830000] = 283.176571; + atomic_mass_map[1122840000] = 284.174156; + atomic_mass_map[1132840000] = 284.178727; + atomic_mass_map[1122850000] = 285.177117; + atomic_mass_map[1132850000] = 285.179727; + atomic_mass_map[1142850000] = 285.183643; + atomic_mass_map[1132860000] = 286.182208; + atomic_mass_map[1142860000] = 286.184235; + atomic_mass_map[1132870000] = 287.183389; + atomic_mass_map[1142870000] = 287.186783; + atomic_mass_map[1152870000] = 287.190704; + atomic_mass_map[1142880000] = 288.187572; + atomic_mass_map[1152880000] = 288.19274; + atomic_mass_map[1142890000] = 289.190419; + atomic_mass_map[1152890000] = 289.193627; + atomic_mass_map[1162890000] = 289.198162; + atomic_mass_map[1152900000] = 290.195975; + atomic_mass_map[1162900000] = 290.198638; + atomic_mass_map[1152910000] = 291.197071; + atomic_mass_map[1162910000] = 291.201077; + atomic_mass_map[1172910000] = 291.205535; + atomic_mass_map[1162920000] = 292.201742; + atomic_mass_map[1172920000] = 292.207463; + atomic_mass_map[1162930000] = 293.204487; + atomic_mass_map[1172930000] = 293.208236; + atomic_mass_map[1182930000] = 293.213562; + atomic_mass_map[1172940000] = 294.210462; + atomic_mass_map[1182940000] = 294.213921; + atomic_mass_map[1182950000] = 295.21624; +} + +void pyne::_insert_abund_map() { + natural_abund_map[10010000] = 99.9885; + natural_abund_map[10020000] = 0.0115; + natural_abund_map[20030000] = 0.000134; + natural_abund_map[20040000] = 99.999866; + natural_abund_map[30060000] = 7.59; + natural_abund_map[30070000] = 92.41; + natural_abund_map[40090000] = 100.0; + natural_abund_map[50100000] = 19.9; + natural_abund_map[50110000] = 80.1; + natural_abund_map[60120000] = 98.93; + natural_abund_map[60130000] = 1.07; + natural_abund_map[70140000] = 99.636; + natural_abund_map[70150000] = 0.364; + natural_abund_map[80160000] = 99.757; + natural_abund_map[80170000] = 0.038; + natural_abund_map[80180000] = 0.205; + natural_abund_map[90190000] = 100.0; + natural_abund_map[100200000] = 90.48; + natural_abund_map[100210000] = 0.27; + natural_abund_map[100220000] = 9.25; + natural_abund_map[110230000] = 100.0; + natural_abund_map[120240000] = 78.99; + natural_abund_map[120250000] = 10.00; + natural_abund_map[120260000] = 11.01; + natural_abund_map[130270000] = 100.0; + natural_abund_map[140280000] = 92.223; + natural_abund_map[140290000] = 4.685; + natural_abund_map[140300000] = 3.092; + natural_abund_map[150310000] = 100.0; + natural_abund_map[160320000] = 94.99; + natural_abund_map[160330000] = 0.75; + natural_abund_map[160340000] = 4.25; + natural_abund_map[160360000] = 0.01; + natural_abund_map[170350000] = 75.76; + natural_abund_map[170370000] = 24.24; + natural_abund_map[180360000] = 0.3336; + natural_abund_map[180380000] = 0.0629; + natural_abund_map[180400000] = 99.6035; + natural_abund_map[190390000] = 93.2581; + natural_abund_map[190400000] = 0.0117; + natural_abund_map[190410000] = 6.7302; + natural_abund_map[200400000] = 96.941; + natural_abund_map[200420000] = 0.647; + natural_abund_map[200430000] = 0.135; + natural_abund_map[200440000] = 2.086; + natural_abund_map[200460000] = 0.004; + natural_abund_map[200480000] = 0.187; + natural_abund_map[210450000] = 100.0; + natural_abund_map[220460000] = 8.25; + natural_abund_map[220470000] = 7.44; + natural_abund_map[220480000] = 73.72; + natural_abund_map[220490000] = 5.41; + natural_abund_map[220500000] = 5.18; + natural_abund_map[230500000] = 0.250; + natural_abund_map[230510000] = 99.750; + natural_abund_map[240500000] = 4.345; + natural_abund_map[240520000] = 83.789; + natural_abund_map[240530000] = 9.501; + natural_abund_map[240540000] = 2.365; + natural_abund_map[250550000] = 100.0; + natural_abund_map[260540000] = 5.845; + natural_abund_map[260560000] = 91.754; + natural_abund_map[260570000] = 2.119; + natural_abund_map[260580000] = 0.282; + natural_abund_map[270590000] = 100.0; + natural_abund_map[280580000] = 68.077; + natural_abund_map[280600000] = 26.223; + natural_abund_map[280610000] = 1.1399; + natural_abund_map[280620000] = 3.6346; + natural_abund_map[280640000] = 0.9255; + natural_abund_map[290630000] = 69.15; + natural_abund_map[290650000] = 30.85; + natural_abund_map[300640000] = 49.17; + natural_abund_map[300660000] = 27.73; + natural_abund_map[300670000] = 4.04; + natural_abund_map[300680000] = 18.45; + natural_abund_map[300700000] = 0.61; + natural_abund_map[310690000] = 60.108; + natural_abund_map[310710000] = 39.892; + natural_abund_map[320700000] = 20.57; + natural_abund_map[320720000] = 27.45; + natural_abund_map[320730000] = 7.75; + natural_abund_map[320740000] = 36.50; + natural_abund_map[320760000] = 7.73; + natural_abund_map[330750000] = 100.0; + natural_abund_map[340740000] = 0.89; + natural_abund_map[340760000] = 9.37; + natural_abund_map[340770000] = 7.63; + natural_abund_map[340780000] = 23.77; + natural_abund_map[340800000] = 49.61; + natural_abund_map[340820000] = 8.73; + natural_abund_map[350790000] = 50.69; + natural_abund_map[350810000] = 49.31; + natural_abund_map[360780000] = 0.355; + natural_abund_map[360800000] = 2.286; + natural_abund_map[360820000] = 11.593; + natural_abund_map[360830000] = 11.500; + natural_abund_map[360840000] = 56.987; + natural_abund_map[360860000] = 17.279; + natural_abund_map[370850000] = 72.17; + natural_abund_map[370870000] = 27.83; + natural_abund_map[380840000] = 0.56; + natural_abund_map[380860000] = 9.86; + natural_abund_map[380870000] = 7.00; + natural_abund_map[380880000] = 82.58; + natural_abund_map[390890000] = 100.0; + natural_abund_map[400900000] = 51.45; + natural_abund_map[400910000] = 11.22; + natural_abund_map[400920000] = 17.15; + natural_abund_map[400940000] = 17.38; + natural_abund_map[400960000] = 2.80; + natural_abund_map[410930000] = 100.0; + natural_abund_map[420920000] = 14.53; + natural_abund_map[420940000] = 9.15; + natural_abund_map[420950000] = 15.84; + natural_abund_map[420960000] = 16.67; + natural_abund_map[420970000] = 9.60; + natural_abund_map[420980000] = 24.39; + natural_abund_map[421000000] = 9.82; + natural_abund_map[440960000] = 5.54; + natural_abund_map[440980000] = 1.87; + natural_abund_map[440990000] = 12.76; + natural_abund_map[441000000] = 12.60; + natural_abund_map[441010000] = 17.06; + natural_abund_map[441020000] = 31.55; + natural_abund_map[441040000] = 18.62; + natural_abund_map[451030000] = 100.0; + natural_abund_map[461020000] = 1.02; + natural_abund_map[461040000] = 11.14; + natural_abund_map[461050000] = 22.33; + natural_abund_map[461060000] = 27.33; + natural_abund_map[461080000] = 26.46; + natural_abund_map[461100000] = 11.72; + natural_abund_map[471070000] = 51.839; + natural_abund_map[471090000] = 48.161; + natural_abund_map[481060000] = 1.25; + natural_abund_map[481080000] = 0.89; + natural_abund_map[481100000] = 12.49; + natural_abund_map[481110000] = 12.80; + natural_abund_map[481120000] = 24.13; + natural_abund_map[481130000] = 12.22; + natural_abund_map[481140000] = 28.73; + natural_abund_map[481160000] = 7.49; + natural_abund_map[491130000] = 4.29; + natural_abund_map[491150000] = 95.71; + natural_abund_map[501120000] = 0.97; + natural_abund_map[501140000] = 0.66; + natural_abund_map[501150000] = 0.34; + natural_abund_map[501160000] = 14.54; + natural_abund_map[501170000] = 7.68; + natural_abund_map[501180000] = 24.22; + natural_abund_map[501190000] = 8.59; + natural_abund_map[501200000] = 32.58; + natural_abund_map[501220000] = 4.63; + natural_abund_map[501240000] = 5.79; + natural_abund_map[511210000] = 57.21; + natural_abund_map[511230000] = 42.79; + natural_abund_map[521200000] = 0.09; + natural_abund_map[521220000] = 2.55; + natural_abund_map[521230000] = 0.89; + natural_abund_map[521240000] = 4.74; + natural_abund_map[521250000] = 7.07; + natural_abund_map[521260000] = 18.84; + natural_abund_map[521280000] = 31.74; + natural_abund_map[521300000] = 34.08; + natural_abund_map[531270000] = 100.0; + natural_abund_map[541240000] = 0.0952; + natural_abund_map[541260000] = 0.0890; + natural_abund_map[541280000] = 1.9102; + natural_abund_map[541290000] = 26.4006; + natural_abund_map[541300000] = 4.0710; + natural_abund_map[541310000] = 21.2324; + natural_abund_map[541320000] = 26.9086; + natural_abund_map[541340000] = 10.4357; + natural_abund_map[541360000] = 8.8573; + natural_abund_map[551330000] = 100.0; + natural_abund_map[561300000] = 0.106; + natural_abund_map[561320000] = 0.101; + natural_abund_map[561340000] = 2.417; + natural_abund_map[561350000] = 6.592; + natural_abund_map[561360000] = 7.854; + natural_abund_map[561370000] = 11.232; + natural_abund_map[561380000] = 71.698; + natural_abund_map[571380000] = 0.08881; + natural_abund_map[571390000] = 99.91119; + natural_abund_map[581360000] = 0.185; + natural_abund_map[581380000] = 0.251; + natural_abund_map[581400000] = 88.450; + natural_abund_map[581420000] = 11.114; + natural_abund_map[591410000] = 100.0; + natural_abund_map[601420000] = 27.152; + natural_abund_map[601430000] = 12.174; + natural_abund_map[601440000] = 23.798; + natural_abund_map[601450000] = 8.293; + natural_abund_map[601460000] = 17.189; + natural_abund_map[601480000] = 5.756; + natural_abund_map[601500000] = 5.638; + natural_abund_map[621440000] = 3.07; + natural_abund_map[621470000] = 14.99; + natural_abund_map[621480000] = 11.24; + natural_abund_map[621490000] = 13.82; + natural_abund_map[621500000] = 7.38; + natural_abund_map[621520000] = 26.75; + natural_abund_map[621540000] = 22.75; + natural_abund_map[631510000] = 47.81; + natural_abund_map[631530000] = 52.19; + natural_abund_map[641520000] = 0.20; + natural_abund_map[641540000] = 2.18; + natural_abund_map[641550000] = 14.80; + natural_abund_map[641560000] = 20.47; + natural_abund_map[641570000] = 15.65; + natural_abund_map[641580000] = 24.84; + natural_abund_map[641600000] = 21.86; + natural_abund_map[651590000] = 100.0; + natural_abund_map[661560000] = 0.056; + natural_abund_map[661580000] = 0.095; + natural_abund_map[661600000] = 2.329; + natural_abund_map[661610000] = 18.889; + natural_abund_map[661620000] = 25.475; + natural_abund_map[661630000] = 24.896; + natural_abund_map[661640000] = 28.260; + natural_abund_map[671650000] = 100.0; + natural_abund_map[681620000] = 0.139; + natural_abund_map[681640000] = 1.601; + natural_abund_map[681660000] = 33.503; + natural_abund_map[681670000] = 22.869; + natural_abund_map[681680000] = 26.978; + natural_abund_map[681700000] = 14.910; + natural_abund_map[691690000] = 100.0; + natural_abund_map[701680000] = 0.123; + natural_abund_map[701700000] = 2.982; + natural_abund_map[701710000] = 14.09; + natural_abund_map[701720000] = 21.68; + natural_abund_map[701730000] = 16.103; + natural_abund_map[701740000] = 32.026; + natural_abund_map[701760000] = 12.996; + natural_abund_map[711750000] = 97.401; + natural_abund_map[711760000] = 2.599; + natural_abund_map[721740000] = 0.16; + natural_abund_map[721760000] = 5.26; + natural_abund_map[721770000] = 18.60; + natural_abund_map[721780000] = 27.28; + natural_abund_map[721790000] = 13.62; + natural_abund_map[721800000] = 35.08; + natural_abund_map[731800000] = 0.01201; + natural_abund_map[731810000] = 99.98799; + natural_abund_map[741800000] = 0.12; + natural_abund_map[741820000] = 26.50; + natural_abund_map[741830000] = 14.31; + natural_abund_map[741840000] = 30.64; + natural_abund_map[741860000] = 28.43; + natural_abund_map[751850000] = 37.40; + natural_abund_map[751870000] = 62.60; + natural_abund_map[761840000] = 0.02; + natural_abund_map[761860000] = 1.59; + natural_abund_map[761870000] = 1.96; + natural_abund_map[761880000] = 13.24; + natural_abund_map[761890000] = 16.15; + natural_abund_map[761900000] = 26.26; + natural_abund_map[761920000] = 40.78; + natural_abund_map[771910000] = 37.3; + natural_abund_map[771930000] = 62.7; + natural_abund_map[781900000] = 0.012; + natural_abund_map[781920000] = 0.782; + natural_abund_map[781940000] = 32.86; + natural_abund_map[781950000] = 33.78; + natural_abund_map[781960000] = 25.21; + natural_abund_map[781980000] = 7.356; + natural_abund_map[791970000] = 100.0; + natural_abund_map[801960000] = 0.15; + natural_abund_map[801980000] = 9.97; + natural_abund_map[801990000] = 16.87; + natural_abund_map[802000000] = 23.10; + natural_abund_map[802010000] = 13.18; + natural_abund_map[802020000] = 29.86; + natural_abund_map[802040000] = 6.87; + natural_abund_map[812030000] = 29.52; + natural_abund_map[812050000] = 70.48; + natural_abund_map[822040000] = 1.4; + natural_abund_map[822060000] = 24.1; + natural_abund_map[822070000] = 22.1; + natural_abund_map[822080000] = 52.4; + natural_abund_map[832090000] = 100.0; + natural_abund_map[902320000] = 100.0; + natural_abund_map[912310000] = 100.0; + natural_abund_map[922340000] = 0.0054; + natural_abund_map[922350000] = 0.7204; + natural_abund_map[922380000] = 99.2742; +} diff --git a/src/atomic_data.h b/src/atomic_data.h new file mode 100644 index 0000000000..f70bff4589 --- /dev/null +++ b/src/atomic_data.h @@ -0,0 +1,25 @@ +/// \/file atomic_nuclear_data.h +/// \/author Andrew Davis (andrew.davis@wisc.edu) +/// +/// \/brief Impliments all the fundamental atomic & nuclear data data +#include + +namespace pyne +{ + /// main function to be called when you whish to load the nuclide data + /// into memory + void _load_atomic_mass_map_memory(); + /// function to create mapping from nuclides in id form + /// to their atomic masses + void _insert_atomic_mass_map(); + /// function to create mapping from nuclides in id form + /// to their natural abundances + void _insert_abund_map(); + /// Mapping from nuclides in id form to their natural abundances + extern std::map natural_abund_map; + + /// Mapping from nuclides in id form to their atomic masses. + extern std::map atomic_mass_map; + + extern std::map atomic_mass_error_map; +} // namespace pyne diff --git a/src/atomicdata.py b/src/atomicdata.py new file mode 100644 index 0000000000..4912b7e391 --- /dev/null +++ b/src/atomicdata.py @@ -0,0 +1,124 @@ +#!/usr/bin/python +import re + +# print the header +def print_header_file(filename): + header_file = "" + header_file += "/// \/file atomic_nuclear_data.h\n" + header_file += "/// \/author Andrew Davis (andrew.davis@wisc.edu)\n" + header_file += "///\n" + header_file += "/// \/brief Impliments all the fundamental atomic & nuclear data data\n" + header_file += "#include \n" + header_file += "\n" + header_file += "namespace pyne\n" + header_file += "{\n" + header_file += " /// main function to be called when you whish to load the nuclide data \n" + header_file += " /// into memory \n" + header_file += " void _load_atomic_mass_map_memory();\n" + header_file += " /// function to create mapping from nuclides in id form\n" + header_file += " /// to their atomic masses\n" + header_file += " void _insert_atomic_mass_map();\n" + header_file += " /// function to create mapping from nuclides in id form \n" + header_file += " /// to their natural abundances\n" + header_file += " void _insert_abund_map();\n" + header_file += " /// Mapping from nuclides in id form to their natural abundances\n" + header_file += " extern std::map natural_abund_map;\n" + header_file += " \n" + header_file += " /// Mapping from nuclides in id form to their atomic masses.\n" + header_file += " extern std::map atomic_mass_map;\n" + header_file += " \n" + header_file += " extern std::map atomic_mass_error_map;\n" + header_file += "} // namespace pyne\n" + + f = open(filename,'w') + f.write(header_file) + +# print the masses map +def print_atomic_mass_errors(): + atomic_mass_error = "" + + file = open('../pyne/dbgen/mass.mas12','r') + amdc_regex = re.compile('[ \d-]*? (\d{1,3})[ ]{1,4}(\d{1,3}) [A-Z][a-z]? .*? (\\d{1,3}) ([ #.\d]{5,12}) ([ #.\d]+)[ ]*?$') + for line in file: + m = amdc_regex.search(line) + if m is None: + continue + + nuc = (10000000 * int(m.group(1))) + (10000 * int(m.group(2))) + error = 1E-6 * float(m.group(5).strip().replace('#', '')) + atomic_mass_error = " atomic_mass_error["+str(nuc)+"] = "+str(error)+";\n" + + return atomic_mass_error + +# print the masses map +def print_atomic_mass(): + atomic_mass = "" + file = open('../pyne/dbgen/mass.mas12','r') + amdc_regex = re.compile('[ \d-]*? (\d{1,3})[ ]{1,4}(\d{1,3}) [A-Z][a-z]? .*? (\\d{1,3}) ([ #.\d]{5,12}) ([ #.\d]+)[ ]*?$') + for line in file: + m = amdc_regex.search(line) + if m is None: + continue + + nuc = (10000000 * int(m.group(1))) + (10000 * int(m.group(2))) + mass = float(m.group(3)) + 1E-6 * float(m.group(4).strip().replace('#','')) + atomic_mass += " atomic_mass_map["+str(nuc)+"] = "+str(mass)+";\n" + + return atomic_mass + +# print the abundances map +def print_abundances(): + isotopic_abundances = "" + file = open('../pyne/dbgen/abundances.txt','r') + + for line in file: + # tokenise the line + splitted = line.split(' ') + tokens = [] + for item in splitted: + if item != '': + tokens.append(item) + # ignore the comment line + if tokens[0] != "#": + tokens[3] = tokens[3].replace("\n","") + isotopic_abundances += " natural_abund_map["+str((int(tokens[0])*10000000)+(int(tokens[2])*10000))+"] = "+str(tokens[3])+";\n" + return isotopic_abundances + +def print_cpp_file(filename): + #empty string + cpp_file = "" + cpp_file += "// Implements basic nuclear data functions.\n" + cpp_file += "#ifndef PYNE_IS_AMALGAMATED\n" + cpp_file += "#include \"atomic_data.h\"\n" + cpp_file += "#endif\n" + cpp_file += " \n" + cpp_file += "void pyne::_load_atomic_mass_map_memory() { \n" + cpp_file += " // header version of atomic weight table data \n" + cpp_file += " \n" + cpp_file += " //see if the data table is already loaded\n" + cpp_file += " if(!atomic_mass_map.empty()) {\n" + cpp_file += " return;\n" + cpp_file += " } else { \n" + cpp_file += " _insert_atomic_mass_map();\n" + cpp_file += " }\n" + cpp_file += " //see if the data table is already loaded\n" + cpp_file += " if(!natural_abund_map.empty()) {\n" + cpp_file += " return;\n" + cpp_file += " } else { \n" + cpp_file += " _insert_abund_map();\n" + cpp_file += " }\n" + cpp_file += "}\n" + cpp_file += "\n" + cpp_file += "void pyne::_insert_atomic_mass_map() { \n" + cpp_file += print_atomic_mass() + cpp_file += "}\n" + cpp_file += "\n" + cpp_file += "void pyne::_insert_abund_map() { \n" + cpp_file += print_abundances() + cpp_file += "}\n" + + f = open(filename,'w') + f.write(cpp_file) + +print_cpp_file("atomic_data.cpp") +print_header_file("atomic_data.h") diff --git a/src/data.cpp b/src/data.cpp index 84a0441e4f..ecfc4e48f5 100644 --- a/src/data.cpp +++ b/src/data.cpp @@ -1,6 +1,7 @@ // Implements basic nuclear data functions. #ifndef PYNE_IS_AMALGAMATED #include "data.h" +#include "atomic_data.h" #endif // @@ -47,8 +48,9 @@ void pyne::_load_atomic_mass_map() { // Loads the important parts of atomic_wight table into atomic_mass_map //Check to see if the file is in HDF5 format. - if (!pyne::file_exists(pyne::NUC_DATA_PATH)) - throw pyne::FileNotFound(pyne::NUC_DATA_PATH); + if (!pyne::file_exists(pyne::NUC_DATA_PATH)) { + pyne::_load_atomic_mass_map_memory(); + } bool ish5 = H5Fis_hdf5(pyne::NUC_DATA_PATH.c_str()); if (!ish5) diff --git a/tests/test_data_nofile.py b/tests/test_data_nofile.py new file mode 100644 index 0000000000..d8786b1abe --- /dev/null +++ b/tests/test_data_nofile.py @@ -0,0 +1,47 @@ +"""PyNE nuclear data tests""" +import os +import math +import warnings + +import nose +from nose.tools import assert_equal, assert_in, assert_true +import numpy as np +import numpy.testing as npt + +from pyne.utils import QAWarning + +warnings.simplefilter("ignore", QAWarning) + +import pyne +from pyne import data, nucname + +from pyne import utils + +if utils.use_warnings(): + utils.toggle_warnings() + +def test_atomic_mass(): + o16 = [15.99491461957, 16.0] + u235 = [235.043930131, 235.0] + am242m = [242.059549364, 242.0] + + # zzaam form + assert_in(data.atomic_mass(80160), o16) + assert_in(data.atomic_mass(922350), u235) + assert_in(data.atomic_mass(952421), am242m) + + +def test_natural_abund_excited_state(): + # initialize natural_abund_map + gnd = 902320000 + excited = gnd + 1 + data.natural_abund(gnd) + # excited state should not be in the map yet + assert_equal(data.natural_abund_map.get(excited), None) + nabund = data.natural_abund(excited) + assert_equal(nabund, data.natural_abund_map.get(excited)) + + + +if __name__ == "__main__": + nose.runmodule() From d9e9f7e7004fae2a90102083427baf4459085014 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 8 Jan 2016 13:40:57 -0600 Subject: [PATCH 054/216] added tests and return from load_data_map --- src/data.cpp | 1 + tests/test_data_nofile.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/data.cpp b/src/data.cpp index ecfc4e48f5..1c546de824 100644 --- a/src/data.cpp +++ b/src/data.cpp @@ -50,6 +50,7 @@ void pyne::_load_atomic_mass_map() { //Check to see if the file is in HDF5 format. if (!pyne::file_exists(pyne::NUC_DATA_PATH)) { pyne::_load_atomic_mass_map_memory(); + return; } bool ish5 = H5Fis_hdf5(pyne::NUC_DATA_PATH.c_str()); diff --git a/tests/test_data_nofile.py b/tests/test_data_nofile.py index d8786b1abe..7f6647e410 100644 --- a/tests/test_data_nofile.py +++ b/tests/test_data_nofile.py @@ -9,18 +9,19 @@ import numpy.testing as npt from pyne.utils import QAWarning +from pyne.pyne_config import pyne_conf warnings.simplefilter("ignore", QAWarning) import pyne from pyne import data, nucname - from pyne import utils if utils.use_warnings(): utils.toggle_warnings() def test_atomic_mass(): + pyne_conf.NUC_DATA_PATH = "bobbobhonkeytonk" o16 = [15.99491461957, 16.0] u235 = [235.043930131, 235.0] am242m = [242.059549364, 242.0] @@ -32,6 +33,7 @@ def test_atomic_mass(): def test_natural_abund_excited_state(): + pyne_conf.NUC_DATA_PATH = "bobbobhonkeytonk" # initialize natural_abund_map gnd = 902320000 excited = gnd + 1 From f27758629076ffab5cac0585a97fd7343006c70c Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 8 Jan 2016 14:08:49 -0600 Subject: [PATCH 055/216] add the atomic_data to the amalgamation --- amalgamate.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/amalgamate.py b/amalgamate.py index 6542640e25..1deb54fb71 100755 --- a/amalgamate.py +++ b/amalgamate.py @@ -29,6 +29,8 @@ 'src/nucname.cpp', 'src/rxname.h', 'src/rxname.cpp', + 'src/atomic_data.h', + 'src/atomic_data.cpp', 'src/data.h', 'src/data.cpp', #'src/dagmc_bridge.cpp', From a029d76df3699d69da20086a1f3763449011ed44 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 8 Jan 2016 14:09:08 -0600 Subject: [PATCH 056/216] Added updated version with nicer formatting --- src/atomic_data.cpp | 1 - src/atomic_data.h | 5 +++++ src/atomicdata.py | 6 +++++- 3 files changed, 10 insertions(+), 2 deletions(-) mode change 100644 => 100755 src/atomicdata.py diff --git a/src/atomic_data.cpp b/src/atomic_data.cpp index 1bbb8aa0d8..37326877cb 100644 --- a/src/atomic_data.cpp +++ b/src/atomic_data.cpp @@ -5,7 +5,6 @@ void pyne::_load_atomic_mass_map_memory() { // header version of atomic weight table data - //see if the data table is already loaded if(!atomic_mass_map.empty()) { return; diff --git a/src/atomic_data.h b/src/atomic_data.h index f70bff4589..b6551be1f8 100644 --- a/src/atomic_data.h +++ b/src/atomic_data.h @@ -11,15 +11,20 @@ namespace pyne void _load_atomic_mass_map_memory(); /// function to create mapping from nuclides in id form /// to their atomic masses + void _insert_atomic_mass_map(); + /// function to create mapping from nuclides in id form /// to their natural abundances void _insert_abund_map(); + /// Mapping from nuclides in id form to their natural abundances extern std::map natural_abund_map; /// Mapping from nuclides in id form to their atomic masses. extern std::map atomic_mass_map; + /// Mapping from nuclides in id form to the associated error in + /// abdundance extern std::map atomic_mass_error_map; } // namespace pyne diff --git a/src/atomicdata.py b/src/atomicdata.py old mode 100644 new mode 100755 index 4912b7e391..1ff409b7c2 --- a/src/atomicdata.py +++ b/src/atomicdata.py @@ -17,16 +17,21 @@ def print_header_file(filename): header_file += " void _load_atomic_mass_map_memory();\n" header_file += " /// function to create mapping from nuclides in id form\n" header_file += " /// to their atomic masses\n" + header_file += " \n" header_file += " void _insert_atomic_mass_map();\n" + header_file += " \n" header_file += " /// function to create mapping from nuclides in id form \n" header_file += " /// to their natural abundances\n" header_file += " void _insert_abund_map();\n" + header_file += " \n" header_file += " /// Mapping from nuclides in id form to their natural abundances\n" header_file += " extern std::map natural_abund_map;\n" header_file += " \n" header_file += " /// Mapping from nuclides in id form to their atomic masses.\n" header_file += " extern std::map atomic_mass_map;\n" header_file += " \n" + header_file += " /// Mapping from nuclides in id form to the associated error in \n" + header_file += " /// abdundance \n" header_file += " extern std::map atomic_mass_error_map;\n" header_file += "} // namespace pyne\n" @@ -94,7 +99,6 @@ def print_cpp_file(filename): cpp_file += " \n" cpp_file += "void pyne::_load_atomic_mass_map_memory() { \n" cpp_file += " // header version of atomic weight table data \n" - cpp_file += " \n" cpp_file += " //see if the data table is already loaded\n" cpp_file += " if(!atomic_mass_map.empty()) {\n" cpp_file += " return;\n" From a2205676a1a39e5a849b2a44468259077db4136f Mon Sep 17 00:00:00 2001 From: josh Date: Sat, 9 Jan 2016 15:01:11 -0800 Subject: [PATCH 057/216] Added hack to get pyne install path in event of import error when setting pynepath --- setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/setup.py b/setup.py index acf5ead412..710d73a237 100755 --- a/setup.py +++ b/setup.py @@ -179,6 +179,7 @@ def download_decay(): def copy_ensdf_executables(exe_dest): print('Copying ENSDF Executables to install directory') if exe_dest[-4:] != 'pyne': + exe_dest = exe_dest + '/pyne-' + VERSION + '-py2.7.egg' exe_dest = exe_dest + '/pyne' ALPHAD_DEST = os.path.join(exe_dest, 'alphad') shutil.copy(ALPHAD_H, ALPHAD_DEST) @@ -441,8 +442,6 @@ def main(): libpath = abspath(joinpath(pynepath, '..', '..', '..')) binpath = abspath(joinpath(libpath, '..', 'bin')) copy_ensdf_executables(pynepath) - print(pynepath) - print(libpath) msg = ("\nNOTE: If you have not done so already, please be sure that your PATH and " "LD_LIBRARY_PATH (or DYLD_FALLBACK_LIBRARY_PATH on Mac OSX) has been " "appropriately set to the install prefix of pyne. For this install of " From 1f5ed86e6001b81fe80730fa034102de7b1ad6e2 Mon Sep 17 00:00:00 2001 From: josh Date: Sat, 9 Jan 2016 18:03:18 -0800 Subject: [PATCH 058/216] Fixed hack to get ensdf_processing executables copying the first time PyNE is installed, and fixed ensdf_processing docstrings --- pyne/ensdf_processing.py | 4 ++-- setup.py | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 9ded4cdb9a..9a07243580 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -44,7 +44,7 @@ def verify_download_exe(exe_path, exe_url, compressed = 0, decomp_path = '', dl_ def alphad(inputdict_unchecked): """ This function calculates the alpha hinderance factors and theoretical half - lives for even even ground state transitions. + lives for even even ground state transitions. (alphad readme) Input Dictionary Required Key Pair Value: ensdf_input_file : input file @@ -78,7 +78,7 @@ def alphad(inputdict_unchecked): def gabs(inputdict_unchecked): """ - This function ... + This program calculates Gamma-ray absolute intensity and normalization (GABS readme) Input Dictionary Required Key Pair Value: input_file : input ensdf file diff --git a/setup.py b/setup.py index 710d73a237..566f6b2621 100755 --- a/setup.py +++ b/setup.py @@ -41,7 +41,7 @@ import warnings import subprocess from glob import glob -from distutils import core, dir_util +from distutils import core, dir_util, sysconfig from contextlib import contextmanager if sys.version_info[0] < 3: from urllib import urlopen @@ -178,8 +178,11 @@ def download_decay(): ALPHAD_H = os.path.join('build', 'src/alphad') def copy_ensdf_executables(exe_dest): print('Copying ENSDF Executables to install directory') + # Hack for copying the executables the first time PyNE is instealled, before pyne has + # been added to the python path. if exe_dest[-4:] != 'pyne': - exe_dest = exe_dest + '/pyne-' + VERSION + '-py2.7.egg' + exe_dest = sysconfig.get_python_lib() + exe_dest = exe_dest + '/pyne-' + VERSION.replace('-','_') + '-py2.7.egg' exe_dest = exe_dest + '/pyne' ALPHAD_DEST = os.path.join(exe_dest, 'alphad') shutil.copy(ALPHAD_H, ALPHAD_DEST) From 897005b08fdff12f7abd25a3e56d086247b7cee8 Mon Sep 17 00:00:00 2001 From: josh Date: Sat, 9 Jan 2016 18:24:59 -0800 Subject: [PATCH 059/216] Another attempt at hack to get pyne install directory in setup.py for copying ensdf_processing executables --- setup.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 566f6b2621..ce704abfd6 100755 --- a/setup.py +++ b/setup.py @@ -32,6 +32,7 @@ import io import os +import re import sys import imp import shutil @@ -182,7 +183,9 @@ def copy_ensdf_executables(exe_dest): # been added to the python path. if exe_dest[-4:] != 'pyne': exe_dest = sysconfig.get_python_lib() - exe_dest = exe_dest + '/pyne-' + VERSION.replace('-','_') + '-py2.7.egg' + for f in os.listdir(sysconfig.get_python_lib()): + if re.match('pyne', f): + exe_dest = exe_dest + '/' + f exe_dest = exe_dest + '/pyne' ALPHAD_DEST = os.path.join(exe_dest, 'alphad') shutil.copy(ALPHAD_H, ALPHAD_DEST) From ad5b18790ee966e6890c054636b4b63fd512ee3c Mon Sep 17 00:00:00 2001 From: josh Date: Sat, 9 Jan 2016 19:44:59 -0800 Subject: [PATCH 060/216] Converted tabs to spaces --- setup.py | 10 ++++++--- tests/test_ensdf_processing.py | 40 +++++++++++++++++----------------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/setup.py b/setup.py index ce704abfd6..7f43a39b94 100755 --- a/setup.py +++ b/setup.py @@ -179,8 +179,8 @@ def download_decay(): ALPHAD_H = os.path.join('build', 'src/alphad') def copy_ensdf_executables(exe_dest): print('Copying ENSDF Executables to install directory') - # Hack for copying the executables the first time PyNE is instealled, before pyne has - # been added to the python path. + # Hack for copying the executables the first time PyNE is instealled, before + # pyne has been added to the python path. if exe_dest[-4:] != 'pyne': exe_dest = sysconfig.get_python_lib() for f in os.listdir(sysconfig.get_python_lib()): @@ -188,7 +188,11 @@ def copy_ensdf_executables(exe_dest): exe_dest = exe_dest + '/' + f exe_dest = exe_dest + '/pyne' ALPHAD_DEST = os.path.join(exe_dest, 'alphad') - shutil.copy(ALPHAD_H, ALPHAD_DEST) + try: + shutil.copy(ALPHAD_H, ALPHAD_DEST) + except Exception: + print('Some ENSDF processing executables were unable to be copied to the \ + install directory.') def generate_decay(): with indir('src'): diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 16169f04ab..c7025dc9cb 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -28,9 +28,9 @@ def test_gabs(): input_dict['dataset_file'] = tmp_path + '/tmp_gabs_80Br.new' output_dict = ensdf_processing.gabs(input_dict) exceptions_output = [[4,0],[1, ' * * * GABS Version 11 '], - [1, ' Current date: '], - [1, ' ENSDF input file: '], - [1, ' new ENSDF file:']] + [1, ' Current date: '], + [1, ' ENSDF input file: '], + [1, ' new ENSDF file:']] exceptions_dataset = [[4,0]] d_report1 = file_comp(input_dict['output_file'], 'ensdf_processing/gabs/ref_gabs_80Br.rpt', exceptions_output) @@ -67,25 +67,25 @@ def file_comp(file_out, file_ref, exceptions): ignore = False for i in range(0, len(exceptions)): if exceptions[i][0] == 1: - if line_out[0:len(exceptions[i][1])] == exceptions[i][1]: - ignore = True - elif exceptions[i][0] == 2: - if exceptions[i][1] in line_out: - ignore = True - elif exceptions[i][0] == 3: - # ignores select lines to allow for tolerable differences in output precision - if exceptions[i][1] == line_num: - ignore = True - elif exceptions[i][0] == 4: - if len(line_ref[:-1]) == len(line_out): - # special exception for lines with possible carriage return instead of standard + if line_out[0:len(exceptions[i][1])] == exceptions[i][1]: + ignore = True + elif exceptions[i][0] == 2: + if exceptions[i][1] in line_out: + ignore = True + elif exceptions[i][0] == 3: + # ignores select lines to allow for tolerable differences in output precision + if exceptions[i][1] == line_num: + ignore = True + elif exceptions[i][0] == 4: + if len(line_ref[:-1]) == len(line_out): + # special exception for lines with possible carriage return instead of standard #line feed return - if line_ref[:-2] == line_out[:-1]: - if map(bin,bytearray(line_ref[len(line_ref)-1])) \ - == map(bin,bytearray(line_out[len(line_out)-1])): - ignore = True + if line_ref[:-2] == line_out[:-1]: + if map(bin,bytearray(line_ref[len(line_ref)-1])) \ + == map(bin,bytearray(line_out[len(line_out)-1])): + ignore = True if not ignore: - raise Exception('ENSDF Processing: Incorrect output generated, file: ' + file_ref) + raise Exception('ENSDF Processing: Incorrect output generated, file: ' + file_ref) line_num = line_num + 1 f_out.close() f_ref.close() From de8df9b1bb2b5c6dcfa4c5244d68428c9c276f0f Mon Sep 17 00:00:00 2001 From: josh Date: Sat, 9 Jan 2016 20:08:04 -0800 Subject: [PATCH 061/216] Fixed a print statement --- pyne/ensdf_processing.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 9a07243580..a8b5d9618c 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -22,7 +22,7 @@ def path_to_exe(exe_name): def verify_download_exe(exe_path, exe_url, compressed = 0, decomp_path = '', dl_size = 0): if not os.path.exists(exe_path): - print 'fetching executable' + print('fetching executable') response = urllib2.urlopen(exe_url) prog = 0 CHUNK = 32 * 1024 @@ -30,8 +30,6 @@ def verify_download_exe(exe_path, exe_url, compressed = 0, decomp_path = '', dl_ while True: chunk = response.read(CHUNK) prog = prog + (256) - #if dl_size != 0: - # print 'Download progress: %d/100' % (100.0 * (float(prog) / float(dl_size))) if not chunk: break f.write(chunk) f.close() From 3774925a4d7dc7e180f1f76105d9efc17a41d9b4 Mon Sep 17 00:00:00 2001 From: josh Date: Sat, 9 Jan 2016 20:36:47 -0800 Subject: [PATCH 062/216] Removed prefix 0 from permission code --- pyne/ensdf_processing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index a8b5d9618c..ed9c25494d 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -34,7 +34,7 @@ def verify_download_exe(exe_path, exe_url, compressed = 0, decomp_path = '', dl_ f.write(chunk) f.close() # set proper permissions on newly downloaded file - os.chmod(exe_path, 0744) + os.chmod(exe_path, 744) if compressed: tfile = tarfile.open(exe_path, 'r:gz') tfile.extractall(decomp_path) From aa6a8c7f1bee5fd9fc3e51f9b1a3f379474e78c2 Mon Sep 17 00:00:00 2001 From: josh Date: Sat, 9 Jan 2016 21:08:40 -0800 Subject: [PATCH 063/216] updated pipe writes to be python3 compadible --- pyne/ensdf_processing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index ed9c25494d..5996e1a524 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -69,7 +69,7 @@ def alphad(inputdict_unchecked): inp = inp + 'Y' + '\n' + output_file else: inp = inp + 'N' + '\n' - proc.stdin.write(inp) + proc.stdin.write(inp.encode('utf-8')) proc.communicate()[0] proc.stdin.close() return inputdict_unchecked From a964c520d980f447eef5c022ac300214cf25deb8 Mon Sep 17 00:00:00 2001 From: josh Date: Sat, 9 Jan 2016 21:41:29 -0800 Subject: [PATCH 064/216] updated pipe writes to be python3 compadible --- pyne/ensdf_processing.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 5996e1a524..c0ecaac585 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -99,7 +99,8 @@ def gabs(inputdict_unchecked): #add option to not get new dataset (currently new dataset is hardprogrammed to yes) exe_path = path_to_exe('gabs') proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) - proc.stdin.write(input_file + '\n' + output_file + '\n' + 'Y' + '\n' + dataset_file) + inp = input_file + '\n' + output_file + '\n' + 'Y' + '\n' + dataset_file + proc.stdin.write(inp.encode('utf-8')) proc.communicate()[0] proc.stdin.close() From 59708477cffb64e043a9f90164de2fb7f6980daf Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Mon, 11 Jan 2016 12:08:43 -0600 Subject: [PATCH 065/216] added python3 compatable string method --- tests/test_data_nofile.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_data_nofile.py b/tests/test_data_nofile.py index 7f6647e410..62513e4803 100644 --- a/tests/test_data_nofile.py +++ b/tests/test_data_nofile.py @@ -21,7 +21,7 @@ utils.toggle_warnings() def test_atomic_mass(): - pyne_conf.NUC_DATA_PATH = "bobbobhonkeytonk" + pyne_conf.NUC_DATA_PATH = b'bobbobhonkeytonk' o16 = [15.99491461957, 16.0] u235 = [235.043930131, 235.0] am242m = [242.059549364, 242.0] @@ -33,7 +33,7 @@ def test_atomic_mass(): def test_natural_abund_excited_state(): - pyne_conf.NUC_DATA_PATH = "bobbobhonkeytonk" + pyne_conf.NUC_DATA_PATH = b'bobbobhonkeytonk' # initialize natural_abund_map gnd = 902320000 excited = gnd + 1 From 895d988cd729340c4d08699dba42d715b086a6be Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Mon, 11 Jan 2016 12:31:19 -0600 Subject: [PATCH 066/216] added comment to say why we set the datapath to nonsense --- tests/test_data_nofile.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_data_nofile.py b/tests/test_data_nofile.py index 62513e4803..512656e987 100644 --- a/tests/test_data_nofile.py +++ b/tests/test_data_nofile.py @@ -21,6 +21,7 @@ utils.toggle_warnings() def test_atomic_mass(): + # set the datapath to nonsense so we call, the cpp data version pyne_conf.NUC_DATA_PATH = b'bobbobhonkeytonk' o16 = [15.99491461957, 16.0] u235 = [235.043930131, 235.0] @@ -33,6 +34,7 @@ def test_atomic_mass(): def test_natural_abund_excited_state(): + # set the datapath to nonsense so we call, the cpp data version pyne_conf.NUC_DATA_PATH = b'bobbobhonkeytonk' # initialize natural_abund_map gnd = 902320000 From 41619162ee8b1d2ca07b6bc81a4b38cced8cd52a Mon Sep 17 00:00:00 2001 From: Marissa Ramirez Zweiger Date: Thu, 14 Jan 2016 15:35:26 -0500 Subject: [PATCH 067/216] Put in check for type of nuclide vector. --- pyne/alara.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pyne/alara.py b/pyne/alara.py index 0b3b686ae6..8b59547740 100644 --- a/pyne/alara.py +++ b/pyne/alara.py @@ -27,7 +27,7 @@ from pyne.material import Material, from_atom_frac from pyne import nucname from pyne.nucname import serpent, alara, znum, anum -from pyne.data import N_A, decay_const, decay_children +from pyne.data import N_A, decay_const, decay_children, branch_ratio from pyne.xs.data_source import SimpleDataSource @@ -543,7 +543,10 @@ def _build_matrix(N): # convert N to id form N_id = [] for i in xrange(len(N)): - ID = nucname.id(N[i]) + if isinstance(N[i], str): + ID = nucname.id(N[i]) + else: + ID = N[i] N_id.append(ID) sds = SimpleDataSource() @@ -555,7 +558,7 @@ def _build_matrix(N): # Find decay parents for k in xrange(len(N)): if N_id[i] in decay_children(N_id[k]): - A[i, k] += data.branch_ratio(N_id[k], N_id[i])*decay_const(N_id[k]) + A[i, k] += branch_ratio(N_id[k], N_id[i])*decay_const(N_id[k]) return A def _rat_apprx_14(A, t, n_0): @@ -673,3 +676,4 @@ def cram(N, t, n_0, order): msg = 'Rational approximation of degree {0} is not supported.'.format(order) raise ValueError(msg) +# !!!! From c75548ed8ccf908ca97f8d17131bc4877ca5137b Mon Sep 17 00:00:00 2001 From: Marissa Ramirez Zweiger Date: Thu, 14 Jan 2016 15:35:51 -0500 Subject: [PATCH 068/216] Added cram test. --- tests/test_cram.py | 75 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 tests/test_cram.py diff --git a/tests/test_cram.py b/tests/test_cram.py new file mode 100644 index 0000000000..622424331e --- /dev/null +++ b/tests/test_cram.py @@ -0,0 +1,75 @@ +import nose +import numpy as np +from nose.plugins.skip import Skip, SkipTest +from numpy.testing import assert_almost_equal +from pyne import nucname, alara, data, material + +def test_cram14(): + test_nuclides = ['H3', 'C14', 'V50', 'Rb87', 'In115', 'Sr90', 'Te123', 'Te130', 'I131', 'Cs137', 'La138', 'Nd144', 'Sm147', 'Lu176', 'Re187', 'Os186'] + error14 = [] + for species in test_nuclides: + nuclides = [nucname.id(species)] + + children = data.decay_children(species) + children = list(children) + while children: + print nuclides + nuclides += children + parent = children[0] + children = data.decay_children(parent) + children = list(children) + + nuclides = sorted(nuclides) + half_life = data.half_life(species) # Half life of species + + n_0 = np.zeros(len(nuclides)) + position = nuclides.index(nucname.id(species)) + n_0[position] = 1 # Set initial amount of material + + # Compute CRAM 14 Solution + cram14 = alara.cram(nuclides, half_life, n_0, 14) + + # Compute PyNE decay solution + initial = material.Material({species: 1.0}) + final = initial.decay(half_life) + pdecay = final.values() + + error_14 = np.abs(cram14 - pdecay)*2 / (cram14 + pdecay) + error14.append(np.mean(error_14)) + + assert_almost_equal(np.mean(error14), 0, 2) + +def test_cram16(): + test_nuclides = ['H3', 'C14', 'V50', 'Rb87', 'In115', 'Sr90', 'Te123', 'Te130', 'I131', 'Cs137', 'La138', 'Nd144', 'Sm147', 'Lu176', 'Re187', 'Os186'] + error16 = [] + for species in test_nuclides: + nuclides = [nucname.id(species)] + + children = data.decay_children(species) + children = list(children) + while children: + nuclides += children + parent = children[0] + children = data.decay_children(parent) + children = list(children) + + nuclides = sorted(nuclides) + half_life = data.half_life(species) # Half life of species + + n_0 = np.zeros(len(nuclides)) + position = nuclides.index(nucname.id(species)) + n_0[position] = 1 # Set initial amount of material + + # Compute CRAM 16 Solution + cram16 = alara.cram(nuclides, half_life, n_0, 14) + + # Compute PyNE decay solution + initial = material.Material({species: 1.0}) + final = initial.decay(half_life) + pdecay = final.values() + + error_16 = np.abs(cram16 - pdecay)*2 / (cram16 + pdecay) + error16.append(np.mean(error_16)) + + assert_almost_equal(np.mean(error16), 0, 2) + From dc32605aad64304bad101a54a04264d3bb6d537b Mon Sep 17 00:00:00 2001 From: Marissa Ramirez Zweiger Date: Thu, 14 Jan 2016 15:44:53 -0500 Subject: [PATCH 069/216] Removed unnecessary comment. --- pyne/alara.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyne/alara.py b/pyne/alara.py index 8b59547740..68b95b8e56 100644 --- a/pyne/alara.py +++ b/pyne/alara.py @@ -676,4 +676,3 @@ def cram(N, t, n_0, order): msg = 'Rational approximation of degree {0} is not supported.'.format(order) raise ValueError(msg) -# !!!! From 40c718c907dcb44a5379089fed2e76f132d03964 Mon Sep 17 00:00:00 2001 From: Marissa Ramirez Zweiger Date: Thu, 14 Jan 2016 16:32:30 -0500 Subject: [PATCH 070/216] Removed extraneous print statement. --- tests/test_cram.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_cram.py b/tests/test_cram.py index 622424331e..735c4444f9 100644 --- a/tests/test_cram.py +++ b/tests/test_cram.py @@ -13,7 +13,6 @@ def test_cram14(): children = data.decay_children(species) children = list(children) while children: - print nuclides nuclides += children parent = children[0] children = data.decay_children(parent) From a1117ea29fc0872bee39e3a2d6fdd700c2d73d4b Mon Sep 17 00:00:00 2001 From: Marissa Ramirez Zweiger Date: Fri, 15 Jan 2016 09:58:55 -0500 Subject: [PATCH 071/216] Changed xrange to range --- pyne/alara.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyne/alara.py b/pyne/alara.py index 68b95b8e56..4e251915e6 100644 --- a/pyne/alara.py +++ b/pyne/alara.py @@ -542,7 +542,7 @@ def _build_matrix(N): # convert N to id form N_id = [] - for i in xrange(len(N)): + for i in range(len(N)): if isinstance(N[i], str): ID = nucname.id(N[i]) else: @@ -552,11 +552,11 @@ def _build_matrix(N): sds = SimpleDataSource() # Decay - for i in xrange(len(N)): + for i in range(len(N)): A[i, i] -= decay_const(N_id[i]) # Find decay parents - for k in xrange(len(N)): + for k in range(len(N)): if N_id[i] in decay_children(N_id[k]): A[i, k] += branch_ratio(N_id[k], N_id[i])*decay_const(N_id[k]) return A From 5e855860a6859d8003b116be8b7f43a917061073 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 15 Jan 2016 09:04:56 -0600 Subject: [PATCH 072/216] added functions to automatically generate atomic_data.cpp & atomic_data.h at install time --- setup.py | 31 +++++++++++++++++++++++++---- src/{atomicdata.py => atomicgen.py} | 0 2 files changed, 27 insertions(+), 4 deletions(-) rename src/{atomicdata.py => atomicgen.py} (100%) diff --git a/setup.py b/setup.py index 8730ff339b..a392ce4d8e 100755 --- a/setup.py +++ b/setup.py @@ -188,18 +188,17 @@ def generate_decay(): return False return True - def ensure_decay(): mb = 1024**2 if os.path.isfile(DECAY_H) and os.path.isfile(DECAY_CPP) and \ os.stat(DECAY_CPP).st_size > mb: return - downloaded = download_decay() - if downloaded: - return generated = generate_decay() if generated: return + downloaded = download_decay() + if downloaded: + return print('!'*42) print('Decay files could not be downloaded or generated, using surrogates instead.') print('Please consider using the --bootstrap command line argument.') @@ -207,6 +206,29 @@ def ensure_decay(): shutil.copy(DECAY_H_REP, DECAY_H) shutil.copy(DECAY_CPP_REP, DECAY_CPP) +ATOMIC_H = os.path.join('src', 'atomic_data.h') +ATOMIC_CPP = os.path.join('src', 'atomic_data.cpp') + +def generate_atomic(): + with indir('src'): + try: + import atomicgen + except ImportError: + return False + try: + atomicgen.build() + except Exception: + return False + return True + +def ensure_atomic(): + mb = 1024**2 + if os.path.isfile(ATOMIC_H) and os.path.isfile(ATOMIC_CPP) and \ + os.stat(ATOMIC_CPP).st_size > mb: + return + generated = generate_atomic() + if generated: + return def ensure_nuc_data(): import tempfile @@ -385,6 +407,7 @@ def cmake_cli(cmake_args): def main_body(cmake_args, make_args): assert_dep_versions() ensure_decay() + ensure_atomic() if not os.path.exists('build'): os.mkdir('build') cmake_cmd = cmake_cli(cmake_args) diff --git a/src/atomicdata.py b/src/atomicgen.py similarity index 100% rename from src/atomicdata.py rename to src/atomicgen.py From 511fd1c019ca7972f7857dfa39a9743e2b01578e Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 15 Jan 2016 09:06:36 -0600 Subject: [PATCH 073/216] removed the atomic_data source files such that they are generated at install time --- src/atomic_data.cpp | 3666 ------------------------------------------- src/atomic_data.h | 30 - 2 files changed, 3696 deletions(-) delete mode 100644 src/atomic_data.cpp delete mode 100644 src/atomic_data.h diff --git a/src/atomic_data.cpp b/src/atomic_data.cpp deleted file mode 100644 index 37326877cb..0000000000 --- a/src/atomic_data.cpp +++ /dev/null @@ -1,3666 +0,0 @@ -// Implements basic nuclear data functions. -#ifndef PYNE_IS_AMALGAMATED -#include "atomic_data.h" -#endif - -void pyne::_load_atomic_mass_map_memory() { - // header version of atomic weight table data - //see if the data table is already loaded - if(!atomic_mass_map.empty()) { - return; - } else { - _insert_atomic_mass_map(); - } - //see if the data table is already loaded - if(!natural_abund_map.empty()) { - return; - } else { - _insert_abund_map(); - } -} - -void pyne::_insert_atomic_mass_map() { - atomic_mass_map[10010000] = 1.00782503223; - atomic_mass_map[10020000] = 2.01410177812; - atomic_mass_map[10030000] = 3.01604927791; - atomic_mass_map[20030000] = 3.01602932008; - atomic_mass_map[30030000] = 3.030775; - atomic_mass_map[10040000] = 4.026431864; - atomic_mass_map[20040000] = 4.00260325413; - atomic_mass_map[30040000] = 4.027185559; - atomic_mass_map[10050000] = 5.035311489; - atomic_mass_map[20050000] = 5.012057224; - atomic_mass_map[30050000] = 5.0125378; - atomic_mass_map[40050000] = 5.03987; - atomic_mass_map[10060000] = 6.044955433; - atomic_mass_map[20060000] = 6.018885891; - atomic_mass_map[30060000] = 6.01512288742; - atomic_mass_map[40060000] = 6.019726411; - atomic_mass_map[50060000] = 6.0508; - atomic_mass_map[10070000] = 7.052749; - atomic_mass_map[20070000] = 7.027990654; - atomic_mass_map[30070000] = 7.01600343659; - atomic_mass_map[40070000] = 7.016928717; - atomic_mass_map[50070000] = 7.029712; - atomic_mass_map[20080000] = 8.03393439; - atomic_mass_map[30080000] = 8.022486246; - atomic_mass_map[40080000] = 8.005305102; - atomic_mass_map[50080000] = 8.024607326; - atomic_mass_map[60080000] = 8.037643042; - atomic_mass_map[20090000] = 9.043946494; - atomic_mass_map[30090000] = 9.026790191; - atomic_mass_map[40090000] = 9.012183065; - atomic_mass_map[50090000] = 9.013329649; - atomic_mass_map[60090000] = 9.031037204; - atomic_mass_map[20100000] = 10.052788655; - atomic_mass_map[30100000] = 10.035483453; - atomic_mass_map[40100000] = 10.013534695; - atomic_mass_map[50100000] = 10.012936949; - atomic_mass_map[60100000] = 10.016853307; - atomic_mass_map[70100000] = 10.04165363; - atomic_mass_map[30110000] = 11.043723581; - atomic_mass_map[40110000] = 11.021661081; - atomic_mass_map[50110000] = 11.009305355; - atomic_mass_map[60110000] = 11.011433563; - atomic_mass_map[70110000] = 11.026091034; - atomic_mass_map[30120000] = 12.052517322; - atomic_mass_map[40120000] = 12.026922082; - atomic_mass_map[50120000] = 12.014352658; - atomic_mass_map[60120000] = 12.0; - atomic_mass_map[70120000] = 12.018613187; - atomic_mass_map[80120000] = 12.034261836; - atomic_mass_map[30130000] = 13.062631523; - atomic_mass_map[40130000] = 13.036134506; - atomic_mass_map[50130000] = 13.017780166; - atomic_mass_map[60130000] = 13.0033548351; - atomic_mass_map[70130000] = 13.005738609; - atomic_mass_map[80130000] = 13.024815446; - atomic_mass_map[40140000] = 14.04289292; - atomic_mass_map[50140000] = 14.025404012; - atomic_mass_map[60140000] = 14.0032419884; - atomic_mass_map[70140000] = 14.0030740044; - atomic_mass_map[80140000] = 14.008596359; - atomic_mass_map[90140000] = 14.034315207; - atomic_mass_map[40150000] = 15.05342; - atomic_mass_map[50150000] = 15.03108768; - atomic_mass_map[60150000] = 15.010599256; - atomic_mass_map[70150000] = 15.0001088989; - atomic_mass_map[80150000] = 15.003065618; - atomic_mass_map[90150000] = 15.018042853; - atomic_mass_map[40160000] = 16.061672036; - atomic_mass_map[50160000] = 16.039841663; - atomic_mass_map[60160000] = 16.014701252; - atomic_mass_map[70160000] = 16.006101925; - atomic_mass_map[80160000] = 15.9949146196; - atomic_mass_map[90160000] = 16.011465725; - atomic_mass_map[100160000] = 16.025750197; - atomic_mass_map[50170000] = 17.046989906; - atomic_mass_map[60170000] = 17.02257747; - atomic_mass_map[70170000] = 17.008448873; - atomic_mass_map[80170000] = 16.9991317565; - atomic_mass_map[90170000] = 17.002095237; - atomic_mass_map[100170000] = 17.017713963; - atomic_mass_map[50180000] = 18.055660189; - atomic_mass_map[60180000] = 18.026750708; - atomic_mass_map[70180000] = 18.014077565; - atomic_mass_map[80180000] = 17.9991596129; - atomic_mass_map[90180000] = 18.000937325; - atomic_mass_map[100180000] = 18.005708703; - atomic_mass_map[110180000] = 18.026878252; - atomic_mass_map[50190000] = 19.0631; - atomic_mass_map[60190000] = 19.034796372; - atomic_mass_map[70190000] = 19.017021603; - atomic_mass_map[80190000] = 19.00357797; - atomic_mass_map[90190000] = 18.9984031627; - atomic_mass_map[100190000] = 19.001880907; - atomic_mass_map[110190000] = 19.013880272; - atomic_mass_map[120190000] = 19.034169186; - atomic_mass_map[50200000] = 20.07207; - atomic_mass_map[60200000] = 20.040319754; - atomic_mass_map[70200000] = 20.023365807; - atomic_mass_map[80200000] = 20.004075354; - atomic_mass_map[90200000] = 19.999981252; - atomic_mass_map[100200000] = 19.9924401762; - atomic_mass_map[110200000] = 20.007354426; - atomic_mass_map[120200000] = 20.018850004; - atomic_mass_map[50210000] = 21.08129; - atomic_mass_map[60210000] = 21.049; - atomic_mass_map[70210000] = 21.02710824; - atomic_mass_map[80210000] = 21.008654813; - atomic_mass_map[90210000] = 20.999948889; - atomic_mass_map[100210000] = 20.993846685; - atomic_mass_map[110210000] = 20.997654695; - atomic_mass_map[120210000] = 21.01171614; - atomic_mass_map[130210000] = 21.028975; - atomic_mass_map[60220000] = 22.057531496; - atomic_mass_map[70220000] = 22.034394934; - atomic_mass_map[80220000] = 22.009966057; - atomic_mass_map[90220000] = 22.002998813; - atomic_mass_map[100220000] = 21.991385114; - atomic_mass_map[110220000] = 21.994437411; - atomic_mass_map[120220000] = 21.999570648; - atomic_mass_map[130220000] = 22.01954; - atomic_mass_map[140220000] = 22.03579; - atomic_mass_map[60230000] = 23.06889; - atomic_mass_map[70230000] = 23.04114; - atomic_mass_map[80230000] = 23.015695922; - atomic_mass_map[90230000] = 23.003556696; - atomic_mass_map[100230000] = 22.994466905; - atomic_mass_map[110230000] = 22.989769282; - atomic_mass_map[120230000] = 22.994124208; - atomic_mass_map[130230000] = 23.007244351; - atomic_mass_map[140230000] = 23.02544; - atomic_mass_map[70240000] = 24.05039; - atomic_mass_map[80240000] = 24.019861; - atomic_mass_map[90240000] = 24.008115485; - atomic_mass_map[100240000] = 23.99361065; - atomic_mass_map[110240000] = 23.99096295; - atomic_mass_map[120240000] = 23.985041697; - atomic_mass_map[130240000] = 23.999948883; - atomic_mass_map[140240000] = 24.011534538; - atomic_mass_map[150240000] = 24.03577; - atomic_mass_map[70250000] = 25.0601; - atomic_mass_map[80250000] = 25.029358986; - atomic_mass_map[90250000] = 25.012199229; - atomic_mass_map[100250000] = 24.997788707; - atomic_mass_map[110250000] = 24.989953969; - atomic_mass_map[120250000] = 24.985836976; - atomic_mass_map[130250000] = 24.990428102; - atomic_mass_map[140250000] = 25.004108808; - atomic_mass_map[150250000] = 25.02119; - atomic_mass_map[80260000] = 26.03728745; - atomic_mass_map[90260000] = 26.020037768; - atomic_mass_map[100260000] = 26.000514705; - atomic_mass_map[110260000] = 25.992634649; - atomic_mass_map[120260000] = 25.982592968; - atomic_mass_map[130260000] = 25.986891904; - atomic_mass_map[140260000] = 25.992333845; - atomic_mass_map[150260000] = 26.01178; - atomic_mass_map[160260000] = 26.02907; - atomic_mass_map[80270000] = 27.04772; - atomic_mass_map[90270000] = 27.026441; - atomic_mass_map[100270000] = 27.007553268; - atomic_mass_map[110270000] = 26.994076531; - atomic_mass_map[120270000] = 26.984340624; - atomic_mass_map[130270000] = 26.981538531; - atomic_mass_map[140270000] = 26.986704811; - atomic_mass_map[150270000] = 26.999224406; - atomic_mass_map[160270000] = 27.01828; - atomic_mass_map[80280000] = 28.05591; - atomic_mass_map[90280000] = 28.035342095; - atomic_mass_map[100280000] = 28.012121998; - atomic_mass_map[110280000] = 27.998939; - atomic_mass_map[120280000] = 27.983876728; - atomic_mass_map[130280000] = 27.98191021; - atomic_mass_map[140280000] = 27.9769265347; - atomic_mass_map[150280000] = 27.992326585; - atomic_mass_map[160280000] = 28.004372766; - atomic_mass_map[170280000] = 28.02954; - atomic_mass_map[90290000] = 29.04254; - atomic_mass_map[100290000] = 29.019753; - atomic_mass_map[110290000] = 29.002877073; - atomic_mass_map[120290000] = 28.988617393; - atomic_mass_map[130290000] = 28.98045649; - atomic_mass_map[140290000] = 28.9764946649; - atomic_mass_map[150290000] = 28.981800794; - atomic_mass_map[160290000] = 28.996611456; - atomic_mass_map[170290000] = 29.01478; - atomic_mass_map[90300000] = 30.05165; - atomic_mass_map[100300000] = 30.024734; - atomic_mass_map[110300000] = 30.009097932; - atomic_mass_map[120300000] = 29.990462926; - atomic_mass_map[130300000] = 29.98296022; - atomic_mass_map[140300000] = 29.973770136; - atomic_mass_map[150300000] = 29.978313753; - atomic_mass_map[160300000] = 29.984907033; - atomic_mass_map[170300000] = 30.00477; - atomic_mass_map[180300000] = 30.02307; - atomic_mass_map[90310000] = 31.059709; - atomic_mass_map[100310000] = 31.033087; - atomic_mass_map[110310000] = 31.013162656; - atomic_mass_map[120310000] = 30.996648032; - atomic_mass_map[130310000] = 30.983945171; - atomic_mass_map[140310000] = 30.975363194; - atomic_mass_map[150310000] = 30.9737619984; - atomic_mass_map[160310000] = 30.979557007; - atomic_mass_map[170310000] = 30.992414203; - atomic_mass_map[180310000] = 31.012124; - atomic_mass_map[100320000] = 32.03972; - atomic_mass_map[110320000] = 32.020193; - atomic_mass_map[120320000] = 31.999110239; - atomic_mass_map[130320000] = 31.988085239; - atomic_mass_map[140320000] = 31.974151539; - atomic_mass_map[150320000] = 31.973907643; - atomic_mass_map[160320000] = 31.9720711744; - atomic_mass_map[170320000] = 31.985684637; - atomic_mass_map[180320000] = 31.997637826; - atomic_mass_map[190320000] = 32.02265; - atomic_mass_map[100330000] = 33.04938; - atomic_mass_map[110330000] = 33.02573; - atomic_mass_map[120330000] = 33.005327145; - atomic_mass_map[130330000] = 32.990908977; - atomic_mass_map[140330000] = 32.977976964; - atomic_mass_map[150330000] = 32.971725694; - atomic_mass_map[160330000] = 32.9714589098; - atomic_mass_map[170330000] = 32.977451989; - atomic_mass_map[180330000] = 32.989925546; - atomic_mass_map[190330000] = 33.00756; - atomic_mass_map[100340000] = 34.056728; - atomic_mass_map[110340000] = 34.03359; - atomic_mass_map[120340000] = 34.008935481; - atomic_mass_map[130340000] = 33.996705398; - atomic_mass_map[140340000] = 33.978575569; - atomic_mass_map[150340000] = 33.973645886; - atomic_mass_map[160340000] = 33.967867004; - atomic_mass_map[170340000] = 33.973762485; - atomic_mass_map[180340000] = 33.98027009; - atomic_mass_map[190340000] = 33.99869; - atomic_mass_map[200340000] = 34.01487; - atomic_mass_map[110350000] = 35.040623; - atomic_mass_map[120350000] = 35.01679; - atomic_mass_map[130350000] = 34.999764; - atomic_mass_map[140350000] = 34.984583476; - atomic_mass_map[150350000] = 34.973314062; - atomic_mass_map[160350000] = 34.96903231; - atomic_mass_map[170350000] = 34.968852682; - atomic_mass_map[180350000] = 34.975257586; - atomic_mass_map[190350000] = 34.988005407; - atomic_mass_map[200350000] = 35.00514; - atomic_mass_map[110360000] = 36.049288; - atomic_mass_map[120360000] = 36.021879; - atomic_mass_map[130360000] = 36.006388; - atomic_mass_map[140360000] = 35.986695219; - atomic_mass_map[150360000] = 35.978259625; - atomic_mass_map[160360000] = 35.967080706; - atomic_mass_map[170360000] = 35.968306809; - atomic_mass_map[180360000] = 35.967545105; - atomic_mass_map[190360000] = 35.98130201; - atomic_mass_map[200360000] = 35.993074404; - atomic_mass_map[210360000] = 36.01648; - atomic_mass_map[110370000] = 37.057051; - atomic_mass_map[120370000] = 37.03037; - atomic_mass_map[130370000] = 37.010531; - atomic_mass_map[140370000] = 36.99292074; - atomic_mass_map[150370000] = 36.979606841; - atomic_mass_map[160370000] = 36.971125514; - atomic_mass_map[170370000] = 36.965902602; - atomic_mass_map[180370000] = 36.966776331; - atomic_mass_map[190370000] = 36.973375889; - atomic_mass_map[200370000] = 36.985897852; - atomic_mass_map[210370000] = 37.00374; - atomic_mass_map[120380000] = 38.03658; - atomic_mass_map[130380000] = 38.017402; - atomic_mass_map[140380000] = 37.995523; - atomic_mass_map[150380000] = 37.984251583; - atomic_mass_map[160380000] = 37.971163328; - atomic_mass_map[170380000] = 37.968010436; - atomic_mass_map[180380000] = 37.962732106; - atomic_mass_map[190380000] = 37.969081117; - atomic_mass_map[200380000] = 37.976319224; - atomic_mass_map[210380000] = 37.99512; - atomic_mass_map[220380000] = 38.01145; - atomic_mass_map[120390000] = 39.045384; - atomic_mass_map[130390000] = 39.02254; - atomic_mass_map[140390000] = 39.002491; - atomic_mass_map[150390000] = 38.986227208; - atomic_mass_map[160390000] = 38.975134197; - atomic_mass_map[170390000] = 38.968008176; - atomic_mass_map[180390000] = 38.964313038; - atomic_mass_map[190390000] = 38.9637064864; - atomic_mass_map[200390000] = 38.970710813; - atomic_mass_map[210390000] = 38.984784968; - atomic_mass_map[220390000] = 39.00236; - atomic_mass_map[120400000] = 40.05218; - atomic_mass_map[130400000] = 40.03003; - atomic_mass_map[140400000] = 40.005829; - atomic_mass_map[150400000] = 39.991331748; - atomic_mass_map[160400000] = 39.975482562; - atomic_mass_map[170400000] = 39.970415469; - atomic_mass_map[180400000] = 39.9623831237; - atomic_mass_map[190400000] = 39.963998166; - atomic_mass_map[200400000] = 39.962590863; - atomic_mass_map[210400000] = 39.977967291; - atomic_mass_map[220400000] = 39.990498719; - atomic_mass_map[230400000] = 40.01276; - atomic_mass_map[130410000] = 41.03638; - atomic_mass_map[140410000] = 41.013011; - atomic_mass_map[150410000] = 40.994654; - atomic_mass_map[160410000] = 40.979593451; - atomic_mass_map[170410000] = 40.970684525; - atomic_mass_map[180410000] = 40.96450057; - atomic_mass_map[190410000] = 40.9618252579; - atomic_mass_map[200410000] = 40.962277924; - atomic_mass_map[210410000] = 40.969251105; - atomic_mass_map[220410000] = 40.983148; - atomic_mass_map[230410000] = 41.00021; - atomic_mass_map[130420000] = 42.04384; - atomic_mass_map[140420000] = 42.01778; - atomic_mass_map[150420000] = 42.001084; - atomic_mass_map[160420000] = 41.9810651; - atomic_mass_map[170420000] = 41.973254804; - atomic_mass_map[180420000] = 41.963045736; - atomic_mass_map[190420000] = 41.962402306; - atomic_mass_map[200420000] = 41.95861783; - atomic_mass_map[210420000] = 41.965516532; - atomic_mass_map[220420000] = 41.973049034; - atomic_mass_map[230420000] = 41.99182; - atomic_mass_map[240420000] = 42.0067; - atomic_mass_map[130430000] = 43.05147; - atomic_mass_map[140430000] = 43.0248; - atomic_mass_map[150430000] = 43.005024; - atomic_mass_map[160430000] = 42.986907635; - atomic_mass_map[170430000] = 42.973888584; - atomic_mass_map[180430000] = 42.965636055; - atomic_mass_map[190430000] = 42.960734702; - atomic_mass_map[200430000] = 42.958766438; - atomic_mass_map[210430000] = 42.961150474; - atomic_mass_map[220430000] = 42.96852252; - atomic_mass_map[230430000] = 42.980766; - atomic_mass_map[240430000] = 42.99753; - atomic_mass_map[140440000] = 44.03061; - atomic_mass_map[150440000] = 44.01121; - atomic_mass_map[160440000] = 43.990118848; - atomic_mass_map[170440000] = 43.977874543; - atomic_mass_map[180440000] = 43.964923815; - atomic_mass_map[190440000] = 43.961586985; - atomic_mass_map[200440000] = 43.955481561; - atomic_mass_map[210440000] = 43.959402875; - atomic_mass_map[220440000] = 43.959689949; - atomic_mass_map[230440000] = 43.97411; - atomic_mass_map[240440000] = 43.98536; - atomic_mass_map[250440000] = 44.00715; - atomic_mass_map[140450000] = 45.03995; - atomic_mass_map[150450000] = 45.01645; - atomic_mass_map[160450000] = 44.995717; - atomic_mass_map[170450000] = 44.98029; - atomic_mass_map[180450000] = 44.968039733; - atomic_mass_map[190450000] = 44.960691493; - atomic_mass_map[200450000] = 44.95618635; - atomic_mass_map[210450000] = 44.955908275; - atomic_mass_map[220450000] = 44.958121983; - atomic_mass_map[230450000] = 44.96577482; - atomic_mass_map[240450000] = 44.97905; - atomic_mass_map[250450000] = 44.99449; - atomic_mass_map[260450000] = 45.014419; - atomic_mass_map[150460000] = 46.02446; - atomic_mass_map[160460000] = 46.00004; - atomic_mass_map[170460000] = 45.985174; - atomic_mass_map[180460000] = 45.968082712; - atomic_mass_map[190460000] = 45.961981586; - atomic_mass_map[200460000] = 45.953689023; - atomic_mass_map[210460000] = 45.955168257; - atomic_mass_map[220460000] = 45.952627718; - atomic_mass_map[230460000] = 45.960198775; - atomic_mass_map[240460000] = 45.968358861; - atomic_mass_map[250460000] = 45.98609; - atomic_mass_map[260460000] = 46.00063; - atomic_mass_map[150470000] = 47.03139; - atomic_mass_map[160470000] = 47.00795; - atomic_mass_map[170470000] = 46.98916; - atomic_mass_map[180470000] = 46.972934865; - atomic_mass_map[190470000] = 46.961661614; - atomic_mass_map[200470000] = 46.95454243; - atomic_mass_map[210470000] = 46.95240374; - atomic_mass_map[220470000] = 46.951758787; - atomic_mass_map[230470000] = 46.954904914; - atomic_mass_map[240470000] = 46.962897359; - atomic_mass_map[250470000] = 46.975775; - atomic_mass_map[260470000] = 46.99185; - atomic_mass_map[270470000] = 47.01057; - atomic_mass_map[160480000] = 48.0137; - atomic_mass_map[170480000] = 47.99564; - atomic_mass_map[180480000] = 47.97591; - atomic_mass_map[190480000] = 47.965341186; - atomic_mass_map[200480000] = 47.952522765; - atomic_mass_map[210480000] = 47.952223611; - atomic_mass_map[220480000] = 47.947941979; - atomic_mass_map[230480000] = 47.952252223; - atomic_mass_map[240480000] = 47.954029061; - atomic_mass_map[250480000] = 47.96852; - atomic_mass_map[260480000] = 47.98023; - atomic_mass_map[270480000] = 48.00093; - atomic_mass_map[280480000] = 48.017688; - atomic_mass_map[160490000] = 49.022762; - atomic_mass_map[170490000] = 49.00123; - atomic_mass_map[180490000] = 48.9819; - atomic_mass_map[190490000] = 48.968210755; - atomic_mass_map[200490000] = 48.955662736; - atomic_mass_map[210490000] = 48.950014629; - atomic_mass_map[220490000] = 48.947865676; - atomic_mass_map[230490000] = 48.948511795; - atomic_mass_map[240490000] = 48.951333349; - atomic_mass_map[250490000] = 48.959595297; - atomic_mass_map[260490000] = 48.973429; - atomic_mass_map[270490000] = 48.98891; - atomic_mass_map[280490000] = 49.0077; - atomic_mass_map[170500000] = 50.00905; - atomic_mass_map[180500000] = 49.98613; - atomic_mass_map[190500000] = 49.972380017; - atomic_mass_map[200500000] = 49.957499217; - atomic_mass_map[210500000] = 49.952176274; - atomic_mass_map[220500000] = 49.944786889; - atomic_mass_map[230500000] = 49.947156014; - atomic_mass_map[240500000] = 49.946041833; - atomic_mass_map[250500000] = 49.954237781; - atomic_mass_map[260500000] = 49.962974929; - atomic_mass_map[270500000] = 49.98091; - atomic_mass_map[280500000] = 49.99474; - atomic_mass_map[170510000] = 51.01554; - atomic_mass_map[180510000] = 50.9937; - atomic_mass_map[190510000] = 50.975828036; - atomic_mass_map[200510000] = 50.960988981; - atomic_mass_map[210510000] = 50.953591956; - atomic_mass_map[220510000] = 50.946610651; - atomic_mass_map[230510000] = 50.943957036; - atomic_mass_map[240510000] = 50.944765018; - atomic_mass_map[250510000] = 50.948208475; - atomic_mass_map[260510000] = 50.956841021; - atomic_mass_map[270510000] = 50.970647; - atomic_mass_map[280510000] = 50.98611; - atomic_mass_map[180520000] = 51.99896; - atomic_mass_map[190520000] = 51.98224; - atomic_mass_map[200520000] = 51.963217145; - atomic_mass_map[210520000] = 51.956879479; - atomic_mass_map[220520000] = 51.946893006; - atomic_mass_map[230520000] = 51.944773007; - atomic_mass_map[240520000] = 51.940506231; - atomic_mass_map[250520000] = 51.945563949; - atomic_mass_map[260520000] = 51.948113146; - atomic_mass_map[270520000] = 51.96351; - atomic_mass_map[280520000] = 51.9748; - atomic_mass_map[290520000] = 51.99671; - atomic_mass_map[180530000] = 53.00729; - atomic_mass_map[190530000] = 52.98746; - atomic_mass_map[200530000] = 52.96945; - atomic_mass_map[210530000] = 52.95909; - atomic_mass_map[220530000] = 52.949725933; - atomic_mass_map[230530000] = 52.944336741; - atomic_mass_map[240530000] = 52.940648147; - atomic_mass_map[250530000] = 52.941288891; - atomic_mass_map[260530000] = 52.945306428; - atomic_mass_map[270530000] = 52.954204077; - atomic_mass_map[280530000] = 52.96819; - atomic_mass_map[290530000] = 52.98459; - atomic_mass_map[190540000] = 53.99463; - atomic_mass_map[200540000] = 53.9734; - atomic_mass_map[210540000] = 53.96393; - atomic_mass_map[220540000] = 53.951049547; - atomic_mass_map[230540000] = 53.946438617; - atomic_mass_map[240540000] = 53.938879158; - atomic_mass_map[250540000] = 53.940357615; - atomic_mass_map[260540000] = 53.939608986; - atomic_mass_map[270540000] = 53.948459872; - atomic_mass_map[280540000] = 53.957892463; - atomic_mass_map[290540000] = 53.97666; - atomic_mass_map[300540000] = 53.992039; - atomic_mass_map[190550000] = 55.00076; - atomic_mass_map[200550000] = 54.9803; - atomic_mass_map[210550000] = 54.967818892; - atomic_mass_map[220550000] = 54.955268064; - atomic_mass_map[230550000] = 54.94724215; - atomic_mass_map[240550000] = 54.940838434; - atomic_mass_map[250550000] = 54.93804391; - atomic_mass_map[260550000] = 54.938291994; - atomic_mass_map[270550000] = 54.941997202; - atomic_mass_map[280550000] = 54.951330632; - atomic_mass_map[290550000] = 54.966038; - atomic_mass_map[300550000] = 54.98398; - atomic_mass_map[190560000] = 56.00851; - atomic_mass_map[200560000] = 55.98508; - atomic_mass_map[210560000] = 55.97345; - atomic_mass_map[220560000] = 55.957911353; - atomic_mass_map[230560000] = 55.95048481; - atomic_mass_map[240560000] = 55.940653139; - atomic_mass_map[250560000] = 55.938903691; - atomic_mass_map[260560000] = 55.934936326; - atomic_mass_map[270560000] = 55.939838798; - atomic_mass_map[280560000] = 55.942128549; - atomic_mass_map[290560000] = 55.95895; - atomic_mass_map[300560000] = 55.97254; - atomic_mass_map[310560000] = 55.99536; - atomic_mass_map[200570000] = 56.99262; - atomic_mass_map[210570000] = 56.97777; - atomic_mass_map[220570000] = 56.963641626; - atomic_mass_map[230570000] = 56.952518869; - atomic_mass_map[240570000] = 56.943613013; - atomic_mass_map[250570000] = 56.938286096; - atomic_mass_map[260570000] = 56.935392841; - atomic_mass_map[270570000] = 56.936290574; - atomic_mass_map[280570000] = 56.939792184; - atomic_mass_map[290570000] = 56.949212498; - atomic_mass_map[300570000] = 56.96506; - atomic_mass_map[310570000] = 56.9832; - atomic_mass_map[200580000] = 57.99794; - atomic_mass_map[210580000] = 57.98403; - atomic_mass_map[220580000] = 57.9666; - atomic_mass_map[230580000] = 57.956715235; - atomic_mass_map[240580000] = 57.944353129; - atomic_mass_map[250580000] = 57.940066645; - atomic_mass_map[260580000] = 57.933274431; - atomic_mass_map[270580000] = 57.935752073; - atomic_mass_map[280580000] = 57.935342414; - atomic_mass_map[290580000] = 57.944533046; - atomic_mass_map[300580000] = 57.954591062; - atomic_mass_map[310580000] = 57.97478; - atomic_mass_map[320580000] = 57.99172; - atomic_mass_map[210590000] = 58.98894; - atomic_mass_map[220590000] = 58.97247; - atomic_mass_map[230590000] = 58.959385659; - atomic_mass_map[240590000] = 58.948586367; - atomic_mass_map[250590000] = 58.940391113; - atomic_mass_map[260590000] = 58.934874338; - atomic_mass_map[270590000] = 58.933194288; - atomic_mass_map[280590000] = 58.934346202; - atomic_mass_map[290590000] = 58.939497482; - atomic_mass_map[300590000] = 58.949312657; - atomic_mass_map[310590000] = 58.96353; - atomic_mass_map[320590000] = 58.98249; - atomic_mass_map[210600000] = 59.99565; - atomic_mass_map[220600000] = 59.97603; - atomic_mass_map[230600000] = 59.96431329; - atomic_mass_map[240600000] = 59.950076033; - atomic_mass_map[250600000] = 59.943136576; - atomic_mass_map[260600000] = 59.9340711; - atomic_mass_map[270600000] = 59.933816299; - atomic_mass_map[280600000] = 59.930785885; - atomic_mass_map[290600000] = 59.937364544; - atomic_mass_map[300600000] = 59.941842103; - atomic_mass_map[310600000] = 59.95729; - atomic_mass_map[320600000] = 59.97036; - atomic_mass_map[330600000] = 59.99388; - atomic_mass_map[210610000] = 61.001; - atomic_mass_map[220610000] = 60.98245; - atomic_mass_map[230610000] = 60.96725; - atomic_mass_map[240610000] = 60.954422585; - atomic_mass_map[250610000] = 60.944452544; - atomic_mass_map[260610000] = 60.936746244; - atomic_mass_map[270610000] = 60.93247662; - atomic_mass_map[280610000] = 60.93105557; - atomic_mass_map[290610000] = 60.933457612; - atomic_mass_map[300610000] = 60.939507188; - atomic_mass_map[310610000] = 60.949398984; - atomic_mass_map[320610000] = 60.96379; - atomic_mass_map[330610000] = 60.98112; - atomic_mass_map[220620000] = 61.98651; - atomic_mass_map[230620000] = 61.97265; - atomic_mass_map[240620000] = 61.956097451; - atomic_mass_map[250620000] = 61.947954; - atomic_mass_map[260620000] = 61.936791812; - atomic_mass_map[270620000] = 61.934058809; - atomic_mass_map[280620000] = 61.928345365; - atomic_mass_map[290620000] = 61.932595415; - atomic_mass_map[300620000] = 61.934333971; - atomic_mass_map[310620000] = 61.944190251; - atomic_mass_map[320620000] = 61.95502; - atomic_mass_map[330620000] = 61.97361; - atomic_mass_map[220630000] = 62.99375; - atomic_mass_map[230630000] = 62.97639; - atomic_mass_map[240630000] = 62.961650731; - atomic_mass_map[250630000] = 62.949664675; - atomic_mass_map[260630000] = 62.9402727; - atomic_mass_map[270630000] = 62.933600217; - atomic_mass_map[280630000] = 62.929669626; - atomic_mass_map[290630000] = 62.929597723; - atomic_mass_map[300630000] = 62.933211474; - atomic_mass_map[310630000] = 62.939294196; - atomic_mass_map[320630000] = 62.949628; - atomic_mass_map[330630000] = 62.9639; - atomic_mass_map[230640000] = 63.98264; - atomic_mass_map[240640000] = 63.96408; - atomic_mass_map[250640000] = 63.95384937; - atomic_mass_map[260640000] = 63.940987763; - atomic_mass_map[270640000] = 63.935810764; - atomic_mass_map[280640000] = 63.927966816; - atomic_mass_map[290640000] = 63.929764342; - atomic_mass_map[300640000] = 63.929142013; - atomic_mass_map[310640000] = 63.93684044; - atomic_mass_map[320640000] = 63.941689913; - atomic_mass_map[330640000] = 63.957432; - atomic_mass_map[340640000] = 63.97109; - atomic_mass_map[230650000] = 64.9875; - atomic_mass_map[240650000] = 64.96996; - atomic_mass_map[250650000] = 64.95601975; - atomic_mass_map[260650000] = 64.945011462; - atomic_mass_map[270650000] = 64.936462072; - atomic_mass_map[280650000] = 64.930085173; - atomic_mass_map[290650000] = 64.927789704; - atomic_mass_map[300650000] = 64.92924077; - atomic_mass_map[310650000] = 64.932734588; - atomic_mass_map[320650000] = 64.939368137; - atomic_mass_map[330650000] = 64.949611; - atomic_mass_map[340650000] = 64.9644; - atomic_mass_map[230660000] = 65.99398; - atomic_mass_map[240660000] = 65.97366; - atomic_mass_map[250660000] = 65.960546834; - atomic_mass_map[260660000] = 65.94624996; - atomic_mass_map[270660000] = 65.939442945; - atomic_mass_map[280660000] = 65.929139334; - atomic_mass_map[290660000] = 65.928869032; - atomic_mass_map[300660000] = 65.926033809; - atomic_mass_map[310660000] = 65.931589401; - atomic_mass_map[320660000] = 65.933862126; - atomic_mass_map[330660000] = 65.944148779; - atomic_mass_map[340660000] = 65.95559; - atomic_mass_map[240670000] = 66.98016; - atomic_mass_map[250670000] = 66.96424; - atomic_mass_map[260670000] = 66.950543395; - atomic_mass_map[270670000] = 66.940609627; - atomic_mass_map[280670000] = 66.931569414; - atomic_mass_map[290670000] = 66.927730314; - atomic_mass_map[300670000] = 66.927127746; - atomic_mass_map[310670000] = 66.928202547; - atomic_mass_map[320670000] = 66.932733861; - atomic_mass_map[330670000] = 66.939251112; - atomic_mass_map[340670000] = 66.949994; - atomic_mass_map[350670000] = 66.96465; - atomic_mass_map[240680000] = 67.98403; - atomic_mass_map[250680000] = 67.96962; - atomic_mass_map[260680000] = 67.95295155; - atomic_mass_map[270680000] = 67.944257589; - atomic_mass_map[280680000] = 67.931868789; - atomic_mass_map[290680000] = 67.929610889; - atomic_mass_map[300680000] = 67.924844554; - atomic_mass_map[310680000] = 67.927980485; - atomic_mass_map[320680000] = 67.928095307; - atomic_mass_map[330680000] = 67.93677413; - atomic_mass_map[340680000] = 67.941825238; - atomic_mass_map[350680000] = 67.958732; - atomic_mass_map[250690000] = 68.97366; - atomic_mass_map[260690000] = 68.95807; - atomic_mass_map[270690000] = 68.946141268; - atomic_mass_map[280690000] = 68.935610269; - atomic_mass_map[290690000] = 68.929429269; - atomic_mass_map[300690000] = 68.926550682; - atomic_mass_map[310690000] = 68.925573541; - atomic_mass_map[320690000] = 68.927964481; - atomic_mass_map[330690000] = 68.932246302; - atomic_mass_map[340690000] = 68.939414847; - atomic_mass_map[350690000] = 68.950497297; - atomic_mass_map[360690000] = 68.96518; - atomic_mass_map[250700000] = 69.97937; - atomic_mass_map[260700000] = 69.96102; - atomic_mass_map[270700000] = 69.94963; - atomic_mass_map[280700000] = 69.936431302; - atomic_mass_map[290700000] = 69.932392079; - atomic_mass_map[300700000] = 69.925319208; - atomic_mass_map[310700000] = 69.926021927; - atomic_mass_map[320700000] = 69.92424875; - atomic_mass_map[330700000] = 69.930926195; - atomic_mass_map[340700000] = 69.933515523; - atomic_mass_map[350700000] = 69.944792323; - atomic_mass_map[360700000] = 69.95604; - atomic_mass_map[250710000] = 70.98368; - atomic_mass_map[260710000] = 70.96672; - atomic_mass_map[270710000] = 70.952366923; - atomic_mass_map[280710000] = 70.940518964; - atomic_mass_map[290710000] = 70.932676833; - atomic_mass_map[300710000] = 70.927719582; - atomic_mass_map[310710000] = 70.924702577; - atomic_mass_map[320710000] = 70.924952327; - atomic_mass_map[330710000] = 70.927113801; - atomic_mass_map[340710000] = 70.932209433; - atomic_mass_map[350710000] = 70.939342155; - atomic_mass_map[360710000] = 70.950265696; - atomic_mass_map[370710000] = 70.96532; - atomic_mass_map[260720000] = 71.96983; - atomic_mass_map[270720000] = 71.95729; - atomic_mass_map[280720000] = 71.941785926; - atomic_mass_map[290720000] = 71.935820307; - atomic_mass_map[300720000] = 71.926842807; - atomic_mass_map[310720000] = 71.926367474; - atomic_mass_map[320720000] = 71.922075826; - atomic_mass_map[330720000] = 71.926752294; - atomic_mass_map[340720000] = 71.927140507; - atomic_mass_map[350720000] = 71.936588619; - atomic_mass_map[360720000] = 71.942092407; - atomic_mass_map[370720000] = 71.95908; - atomic_mass_map[260730000] = 72.97572; - atomic_mass_map[270730000] = 72.96039; - atomic_mass_map[280730000] = 72.946206683; - atomic_mass_map[290730000] = 72.936674378; - atomic_mass_map[300730000] = 72.929582582; - atomic_mass_map[310730000] = 72.925174682; - atomic_mass_map[320730000] = 72.923458956; - atomic_mass_map[330730000] = 72.923829086; - atomic_mass_map[340730000] = 72.926754882; - atomic_mass_map[350730000] = 72.931671503; - atomic_mass_map[360730000] = 72.939289195; - atomic_mass_map[370730000] = 72.950529; - atomic_mass_map[380730000] = 72.9657; - atomic_mass_map[260740000] = 73.97935; - atomic_mass_map[270740000] = 73.96515; - atomic_mass_map[280740000] = 73.94798; - atomic_mass_map[290740000] = 73.939874862; - atomic_mass_map[300740000] = 73.929407262; - atomic_mass_map[310740000] = 73.926945727; - atomic_mass_map[320740000] = 73.921177761; - atomic_mass_map[330740000] = 73.923928598; - atomic_mass_map[340740000] = 73.922475934; - atomic_mass_map[350740000] = 73.929910177; - atomic_mass_map[360740000] = 73.93308402; - atomic_mass_map[370740000] = 73.944265894; - atomic_mass_map[380740000] = 73.95617; - atomic_mass_map[270750000] = 74.96876; - atomic_mass_map[280750000] = 74.9525; - atomic_mass_map[290750000] = 74.941522606; - atomic_mass_map[300750000] = 74.932840246; - atomic_mass_map[310750000] = 74.926500246; - atomic_mass_map[320750000] = 74.92285837; - atomic_mass_map[330750000] = 74.921594567; - atomic_mass_map[340750000] = 74.92252287; - atomic_mass_map[350750000] = 74.925810452; - atomic_mass_map[360750000] = 74.930945746; - atomic_mass_map[370750000] = 74.938573201; - atomic_mass_map[380750000] = 74.94995277; - atomic_mass_map[270760000] = 75.97413; - atomic_mass_map[280760000] = 75.95533; - atomic_mass_map[290760000] = 75.945275026; - atomic_mass_map[300760000] = 75.933114957; - atomic_mass_map[310760000] = 75.928827626; - atomic_mass_map[320760000] = 75.921402726; - atomic_mass_map[330760000] = 75.922392015; - atomic_mass_map[340760000] = 75.919213704; - atomic_mass_map[350760000] = 75.924541576; - atomic_mass_map[360760000] = 75.925910271; - atomic_mass_map[370760000] = 75.935073032; - atomic_mass_map[380760000] = 75.941762761; - atomic_mass_map[390760000] = 75.95856; - atomic_mass_map[280770000] = 76.96055; - atomic_mass_map[290770000] = 76.94792; - atomic_mass_map[300770000] = 76.936887199; - atomic_mass_map[310770000] = 76.9291543; - atomic_mass_map[320770000] = 76.923549843; - atomic_mass_map[330770000] = 76.920647563; - atomic_mass_map[340770000] = 76.919914154; - atomic_mass_map[350770000] = 76.921379198; - atomic_mass_map[360770000] = 76.92467; - atomic_mass_map[370770000] = 76.9304016; - atomic_mass_map[380770000] = 76.937945455; - atomic_mass_map[390770000] = 76.949781; - atomic_mass_map[280780000] = 77.96336; - atomic_mass_map[290780000] = 77.95223; - atomic_mass_map[300780000] = 77.938289206; - atomic_mass_map[310780000] = 77.931608845; - atomic_mass_map[320780000] = 77.922852908; - atomic_mass_map[330780000] = 77.921827773; - atomic_mass_map[340780000] = 77.91730928; - atomic_mass_map[350780000] = 77.921145895; - atomic_mass_map[360780000] = 77.920364944; - atomic_mass_map[370780000] = 77.928141868; - atomic_mass_map[380780000] = 77.93217998; - atomic_mass_map[390780000] = 77.94361; - atomic_mass_map[400780000] = 77.95566; - atomic_mass_map[280790000] = 78.970252; - atomic_mass_map[290790000] = 78.95502; - atomic_mass_map[300790000] = 78.942638069; - atomic_mass_map[310790000] = 78.932852301; - atomic_mass_map[320790000] = 78.925360127; - atomic_mass_map[330790000] = 78.920948423; - atomic_mass_map[340790000] = 78.918499287; - atomic_mass_map[350790000] = 78.918337579; - atomic_mass_map[360790000] = 78.920082923; - atomic_mass_map[370790000] = 78.923989864; - atomic_mass_map[380790000] = 78.929707664; - atomic_mass_map[390790000] = 78.937351299; - atomic_mass_map[400790000] = 78.94948; - atomic_mass_map[290800000] = 79.96089; - atomic_mass_map[300800000] = 79.944552931; - atomic_mass_map[310800000] = 79.936420775; - atomic_mass_map[320800000] = 79.925350775; - atomic_mass_map[330800000] = 79.922474584; - atomic_mass_map[340800000] = 79.916521762; - atomic_mass_map[350800000] = 79.918529788; - atomic_mass_map[360800000] = 79.916378084; - atomic_mass_map[370800000] = 79.922516444; - atomic_mass_map[380800000] = 79.924517516; - atomic_mass_map[390800000] = 79.934356096; - atomic_mass_map[400800000] = 79.9404; - atomic_mass_map[290810000] = 80.965872; - atomic_mass_map[300810000] = 80.950402619; - atomic_mass_map[310810000] = 80.938133843; - atomic_mass_map[320810000] = 80.928832943; - atomic_mass_map[330810000] = 80.92213228; - atomic_mass_map[340810000] = 80.917993023; - atomic_mass_map[350810000] = 80.91628969; - atomic_mass_map[360810000] = 80.916591181; - atomic_mass_map[370810000] = 80.918993936; - atomic_mass_map[380810000] = 80.923211395; - atomic_mass_map[390810000] = 80.929455556; - atomic_mass_map[400810000] = 80.937308892; - atomic_mass_map[410810000] = 80.9496; - atomic_mass_map[290820000] = 81.972442; - atomic_mass_map[300820000] = 81.95426; - atomic_mass_map[310820000] = 81.943176533; - atomic_mass_map[320820000] = 81.929774033; - atomic_mass_map[330820000] = 81.924741233; - atomic_mass_map[340820000] = 81.916699497; - atomic_mass_map[350820000] = 81.916803246; - atomic_mass_map[360820000] = 81.91348273; - atomic_mass_map[370820000] = 81.918209024; - atomic_mass_map[380820000] = 81.918399855; - atomic_mass_map[390820000] = 81.926931401; - atomic_mass_map[400820000] = 81.931354; - atomic_mass_map[410820000] = 81.94396; - atomic_mass_map[300830000] = 82.96056; - atomic_mass_map[310830000] = 82.947120301; - atomic_mass_map[320830000] = 82.934539101; - atomic_mass_map[330830000] = 82.925206901; - atomic_mass_map[340830000] = 82.919118569; - atomic_mass_map[350830000] = 82.91517562; - atomic_mass_map[360830000] = 82.914127164; - atomic_mass_map[370830000] = 82.915114183; - atomic_mass_map[380830000] = 82.917554374; - atomic_mass_map[390830000] = 82.92248525; - atomic_mass_map[400830000] = 82.92924215; - atomic_mass_map[410830000] = 82.937293731; - atomic_mass_map[420830000] = 82.94988; - atomic_mass_map[300840000] = 83.965206; - atomic_mass_map[310840000] = 83.95246; - atomic_mass_map[320840000] = 83.937575092; - atomic_mass_map[330840000] = 83.929303292; - atomic_mass_map[340840000] = 83.918466763; - atomic_mass_map[350840000] = 83.916496419; - atomic_mass_map[360840000] = 83.9114977282; - atomic_mass_map[370840000] = 83.914375229; - atomic_mass_map[380840000] = 83.913419136; - atomic_mass_map[390840000] = 83.920672086; - atomic_mass_map[400840000] = 83.923326899; - atomic_mass_map[410840000] = 83.934492; - atomic_mass_map[420840000] = 83.94149; - atomic_mass_map[300850000] = 84.97226; - atomic_mass_map[310850000] = 84.95699; - atomic_mass_map[320850000] = 84.94296966; - atomic_mass_map[330850000] = 84.93216366; - atomic_mass_map[340850000] = 84.92226076; - atomic_mass_map[350850000] = 84.91564576; - atomic_mass_map[360850000] = 84.912527262; - atomic_mass_map[370850000] = 84.9117897379; - atomic_mass_map[380850000] = 84.912932046; - atomic_mass_map[390850000] = 84.916433039; - atomic_mass_map[400850000] = 84.921444448; - atomic_mass_map[410850000] = 84.928845837; - atomic_mass_map[420850000] = 84.938260737; - atomic_mass_map[430850000] = 84.95058; - atomic_mass_map[310860000] = 85.96301; - atomic_mass_map[320860000] = 85.94658; - atomic_mass_map[330860000] = 85.936701533; - atomic_mass_map[340860000] = 85.924311733; - atomic_mass_map[350860000] = 85.918805433; - atomic_mass_map[360860000] = 85.9106106269; - atomic_mass_map[370860000] = 85.911167425; - atomic_mass_map[380860000] = 85.909260608; - atomic_mass_map[390860000] = 85.91488598; - atomic_mass_map[400860000] = 85.916297204; - atomic_mass_map[410860000] = 85.925782798; - atomic_mass_map[420860000] = 85.931174817; - atomic_mass_map[430860000] = 85.94493; - atomic_mass_map[310870000] = 86.968245; - atomic_mass_map[320870000] = 86.95268; - atomic_mass_map[330870000] = 86.940291718; - atomic_mass_map[340870000] = 86.928688618; - atomic_mass_map[350870000] = 86.920674018; - atomic_mass_map[360870000] = 86.91335476; - atomic_mass_map[370870000] = 86.909180531; - atomic_mass_map[380870000] = 86.908877531; - atomic_mass_map[390870000] = 86.910876138; - atomic_mass_map[400870000] = 86.914817988; - atomic_mass_map[410870000] = 86.920693747; - atomic_mass_map[420870000] = 86.928196201; - atomic_mass_map[430870000] = 86.938067187; - atomic_mass_map[440870000] = 86.95069; - atomic_mass_map[320880000] = 87.95691; - atomic_mass_map[330880000] = 87.94555; - atomic_mass_map[340880000] = 87.931417492; - atomic_mass_map[350880000] = 87.924083292; - atomic_mass_map[360880000] = 87.914447881; - atomic_mass_map[370880000] = 87.911315592; - atomic_mass_map[380880000] = 87.905612542; - atomic_mass_map[390880000] = 87.909501563; - atomic_mass_map[400880000] = 87.91022129; - atomic_mass_map[410880000] = 87.91822171; - atomic_mass_map[420880000] = 87.921967781; - atomic_mass_map[430880000] = 87.933782381; - atomic_mass_map[440880000] = 87.9416; - atomic_mass_map[320890000] = 88.96379; - atomic_mass_map[330890000] = 88.94976; - atomic_mass_map[340890000] = 88.93666906; - atomic_mass_map[350890000] = 88.92670456; - atomic_mass_map[360890000] = 88.917835451; - atomic_mass_map[370890000] = 88.912278298; - atomic_mass_map[380890000] = 88.907451095; - atomic_mass_map[390890000] = 88.905840348; - atomic_mass_map[400890000] = 88.908881441; - atomic_mass_map[410890000] = 88.913445073; - atomic_mass_map[420890000] = 88.919468151; - atomic_mass_map[430890000] = 88.927648651; - atomic_mass_map[440890000] = 88.93762; - atomic_mass_map[450890000] = 88.950584; - atomic_mass_map[320900000] = 89.96863; - atomic_mass_map[330900000] = 89.95563; - atomic_mass_map[340900000] = 89.940096; - atomic_mass_map[350900000] = 89.93129285; - atomic_mass_map[360900000] = 89.919527931; - atomic_mass_map[370900000] = 89.914798453; - atomic_mass_map[380900000] = 89.907730037; - atomic_mass_map[390900000] = 89.907143942; - atomic_mass_map[400900000] = 89.904697659; - atomic_mass_map[410900000] = 89.911258449; - atomic_mass_map[420900000] = 89.913930861; - atomic_mass_map[430900000] = 89.924073921; - atomic_mass_map[440900000] = 89.93034438; - atomic_mass_map[450900000] = 89.94422; - atomic_mass_map[330910000] = 90.96039; - atomic_mass_map[340910000] = 90.94596; - atomic_mass_map[350910000] = 90.934398619; - atomic_mass_map[360910000] = 90.923806311; - atomic_mass_map[370910000] = 90.916537169; - atomic_mass_map[380910000] = 90.910195442; - atomic_mass_map[390910000] = 90.907297442; - atomic_mass_map[400910000] = 90.905639587; - atomic_mass_map[410910000] = 90.906989658; - atomic_mass_map[420910000] = 90.911745312; - atomic_mass_map[430910000] = 90.918425397; - atomic_mass_map[440910000] = 90.926741859; - atomic_mass_map[450910000] = 90.93688; - atomic_mass_map[460910000] = 90.95032; - atomic_mass_map[330920000] = 91.96674; - atomic_mass_map[340920000] = 91.94984; - atomic_mass_map[350920000] = 91.939631597; - atomic_mass_map[360920000] = 91.926173094; - atomic_mass_map[370920000] = 91.919728389; - atomic_mass_map[380920000] = 91.91103819; - atomic_mass_map[390920000] = 91.908945142; - atomic_mass_map[400920000] = 91.905034675; - atomic_mass_map[410920000] = 91.907188081; - atomic_mass_map[420920000] = 91.906807959; - atomic_mass_map[430920000] = 91.915269779; - atomic_mass_map[440920000] = 91.920234375; - atomic_mass_map[450920000] = 91.932367694; - atomic_mass_map[460920000] = 91.94088; - atomic_mass_map[340930000] = 92.95629; - atomic_mass_map[350930000] = 92.943134; - atomic_mass_map[360930000] = 92.931147174; - atomic_mass_map[370930000] = 92.922039269; - atomic_mass_map[380930000] = 92.914024228; - atomic_mass_map[390930000] = 92.909577886; - atomic_mass_map[400930000] = 92.906469947; - atomic_mass_map[410930000] = 92.906373004; - atomic_mass_map[420930000] = 92.906809577; - atomic_mass_map[430930000] = 92.910245952; - atomic_mass_map[440930000] = 92.917104444; - atomic_mass_map[450930000] = 92.925912781; - atomic_mass_map[460930000] = 92.936511; - atomic_mass_map[470930000] = 92.95033; - atomic_mass_map[340940000] = 93.96049; - atomic_mass_map[350940000] = 93.9489; - atomic_mass_map[360940000] = 93.934140454; - atomic_mass_map[370940000] = 93.926394814; - atomic_mass_map[380940000] = 93.915355602; - atomic_mass_map[390940000] = 93.911590582; - atomic_mass_map[400940000] = 93.906310828; - atomic_mass_map[410940000] = 93.907278836; - atomic_mass_map[420940000] = 93.905084903; - atomic_mass_map[430940000] = 93.909653637; - atomic_mass_map[440940000] = 93.911342863; - atomic_mass_map[450940000] = 93.921730453; - atomic_mass_map[460940000] = 93.929037603; - atomic_mass_map[470940000] = 93.943734; - atomic_mass_map[340950000] = 94.9673; - atomic_mass_map[350950000] = 94.95301; - atomic_mass_map[360950000] = 94.939710924; - atomic_mass_map[370950000] = 94.929260004; - atomic_mass_map[380950000] = 94.919352941; - atomic_mass_map[390950000] = 94.912816058; - atomic_mass_map[400950000] = 94.90803853; - atomic_mass_map[410950000] = 94.906832404; - atomic_mass_map[420950000] = 94.905838766; - atomic_mass_map[430950000] = 94.907653612; - atomic_mass_map[440950000] = 94.910405759; - atomic_mass_map[450950000] = 94.915897895; - atomic_mass_map[460950000] = 94.924889838; - atomic_mass_map[470950000] = 94.93602; - atomic_mass_map[480950000] = 94.94994; - atomic_mass_map[350960000] = 95.95903; - atomic_mass_map[360960000] = 95.943016618; - atomic_mass_map[370960000] = 95.93413338; - atomic_mass_map[380960000] = 95.921706575; - atomic_mass_map[390960000] = 95.915896835; - atomic_mass_map[400960000] = 95.908271433; - atomic_mass_map[410960000] = 95.908097286; - atomic_mass_map[420960000] = 95.904676115; - atomic_mass_map[430960000] = 95.907868022; - atomic_mass_map[440960000] = 95.907590255; - atomic_mass_map[450960000] = 95.914453051; - atomic_mass_map[460960000] = 95.918215084; - atomic_mass_map[470960000] = 95.930743906; - atomic_mass_map[480960000] = 95.94034; - atomic_mass_map[350970000] = 96.96344; - atomic_mass_map[360970000] = 96.949088785; - atomic_mass_map[370970000] = 96.937177136; - atomic_mass_map[380970000] = 96.92637396; - atomic_mass_map[390970000] = 96.918274106; - atomic_mass_map[400970000] = 96.910951206; - atomic_mass_map[410970000] = 96.908095932; - atomic_mass_map[420970000] = 96.906018118; - atomic_mass_map[430970000] = 96.906366706; - atomic_mass_map[440970000] = 96.90754712; - atomic_mass_map[450970000] = 96.911329216; - atomic_mass_map[460970000] = 96.916471988; - atomic_mass_map[470970000] = 96.923965326; - atomic_mass_map[480970000] = 96.9351; - atomic_mass_map[490970000] = 96.94934; - atomic_mass_map[350980000] = 97.96946; - atomic_mass_map[360980000] = 97.95243; - atomic_mass_map[370980000] = 97.941686868; - atomic_mass_map[380980000] = 97.928688778; - atomic_mass_map[390980000] = 97.922382119; - atomic_mass_map[400980000] = 97.912728892; - atomic_mass_map[410980000] = 97.910326459; - atomic_mass_map[420980000] = 97.90540482; - atomic_mass_map[430980000] = 97.907212365; - atomic_mass_map[440980000] = 97.905286813; - atomic_mass_map[450980000] = 97.910707839; - atomic_mass_map[460980000] = 97.912698337; - atomic_mass_map[470980000] = 97.921559973; - atomic_mass_map[480980000] = 97.927389318; - atomic_mass_map[490980000] = 97.94214; - atomic_mass_map[360990000] = 98.95839; - atomic_mass_map[370990000] = 98.945028735; - atomic_mass_map[380990000] = 98.932890666; - atomic_mass_map[390990000] = 98.924147979; - atomic_mass_map[400990000] = 98.916666746; - atomic_mass_map[410990000] = 98.911613177; - atomic_mass_map[420990000] = 98.907708509; - atomic_mass_map[430990000] = 98.906250844; - atomic_mass_map[440990000] = 98.905934082; - atomic_mass_map[450990000] = 98.908128239; - atomic_mass_map[460990000] = 98.911774806; - atomic_mass_map[470990000] = 98.917645768; - atomic_mass_map[480990000] = 98.924925848; - atomic_mass_map[490990000] = 98.93411; - atomic_mass_map[500990000] = 98.94853; - atomic_mass_map[361000000] = 99.96237; - atomic_mass_map[371000000] = 99.95003; - atomic_mass_map[381000000] = 99.935769692; - atomic_mass_map[391000000] = 99.927714692; - atomic_mass_map[401000000] = 99.918000576; - atomic_mass_map[411000000] = 99.914327592; - atomic_mass_map[421000000] = 99.907471782; - atomic_mass_map[431000000] = 99.907653877; - atomic_mass_map[441000000] = 99.904214256; - atomic_mass_map[451000000] = 99.908117264; - atomic_mass_map[461000000] = 99.908504805; - atomic_mass_map[471000000] = 99.916115445; - atomic_mass_map[481000000] = 99.92034882; - atomic_mass_map[491000000] = 99.93095718; - atomic_mass_map[501000000] = 99.938504196; - atomic_mass_map[361010000] = 100.96873; - atomic_mass_map[371010000] = 100.954039; - atomic_mass_map[381010000] = 100.940351743; - atomic_mass_map[391010000] = 100.930147705; - atomic_mass_map[401010000] = 100.921447964; - atomic_mass_map[411010000] = 100.915310254; - atomic_mass_map[421010000] = 100.910341447; - atomic_mass_map[431010000] = 100.907309057; - atomic_mass_map[441010000] = 100.905576872; - atomic_mass_map[451010000] = 100.906160613; - atomic_mass_map[461010000] = 100.908286412; - atomic_mass_map[471010000] = 100.912683953; - atomic_mass_map[481010000] = 100.918586211; - atomic_mass_map[491010000] = 100.92634; - atomic_mass_map[501010000] = 100.935259244; - atomic_mass_map[371020000] = 101.95952; - atomic_mass_map[381020000] = 101.943790979; - atomic_mass_map[391020000] = 101.934327687; - atomic_mass_map[401020000] = 101.92314093; - atomic_mass_map[411020000] = 101.918077197; - atomic_mass_map[421020000] = 101.910283414; - atomic_mass_map[431020000] = 101.909209733; - atomic_mass_map[441020000] = 101.904344096; - atomic_mass_map[451020000] = 101.906837373; - atomic_mass_map[461020000] = 101.905602187; - atomic_mass_map[471020000] = 101.911704708; - atomic_mass_map[481020000] = 101.914481967; - atomic_mass_map[491020000] = 101.924107138; - atomic_mass_map[501020000] = 101.930290753; - atomic_mass_map[371030000] = 102.96392; - atomic_mass_map[381030000] = 102.94909; - atomic_mass_map[391030000] = 102.937243004; - atomic_mass_map[401030000] = 102.927190678; - atomic_mass_map[411030000] = 102.919457238; - atomic_mass_map[421030000] = 102.913078578; - atomic_mass_map[431030000] = 102.909176131; - atomic_mass_map[441030000] = 102.906318627; - atomic_mass_map[451030000] = 102.905497993; - atomic_mass_map[461030000] = 102.906080949; - atomic_mass_map[471030000] = 102.908963138; - atomic_mass_map[481030000] = 102.913416517; - atomic_mass_map[491030000] = 102.919881915; - atomic_mass_map[501030000] = 102.928105264; - atomic_mass_map[511030000] = 102.93969; - atomic_mass_map[381040000] = 103.95265; - atomic_mass_map[391040000] = 103.94196; - atomic_mass_map[401040000] = 103.929435691; - atomic_mass_map[411040000] = 103.922892491; - atomic_mass_map[421040000] = 103.913734373; - atomic_mass_map[431040000] = 103.911424888; - atomic_mass_map[441040000] = 103.905427481; - atomic_mass_map[451040000] = 103.90664922; - atomic_mass_map[461040000] = 103.90403054; - atomic_mass_map[471040000] = 103.908623864; - atomic_mass_map[481040000] = 103.909856386; - atomic_mass_map[491040000] = 103.918214541; - atomic_mass_map[501040000] = 103.923105204; - atomic_mass_map[511040000] = 103.936477804; - atomic_mass_map[381050000] = 104.95855; - atomic_mass_map[391050000] = 104.94544; - atomic_mass_map[401050000] = 104.934008204; - atomic_mass_map[411050000] = 104.924946471; - atomic_mass_map[421050000] = 104.916968617; - atomic_mass_map[431050000] = 104.911654883; - atomic_mass_map[441050000] = 104.907747645; - atomic_mass_map[451050000] = 104.905688549; - atomic_mass_map[461050000] = 104.905079626; - atomic_mass_map[471050000] = 104.906525615; - atomic_mass_map[481050000] = 104.909463896; - atomic_mass_map[491050000] = 104.914502325; - atomic_mass_map[501050000] = 104.921268429; - atomic_mass_map[511050000] = 104.931275897; - atomic_mass_map[521050000] = 104.943304508; - atomic_mass_map[381060000] = 105.962651; - atomic_mass_map[391060000] = 105.95056; - atomic_mass_map[401060000] = 105.93676; - atomic_mass_map[411060000] = 105.928931712; - atomic_mass_map[421060000] = 105.918259464; - atomic_mass_map[431060000] = 105.914357598; - atomic_mass_map[441060000] = 105.907329104; - atomic_mass_map[451060000] = 105.907286801; - atomic_mass_map[461060000] = 105.903480426; - atomic_mass_map[471060000] = 105.906663637; - atomic_mass_map[481060000] = 105.906459928; - atomic_mass_map[491060000] = 105.913463735; - atomic_mass_map[501060000] = 105.916957404; - atomic_mass_map[511060000] = 105.928637982; - atomic_mass_map[521060000] = 105.937499664; - atomic_mass_map[381070000] = 106.968975; - atomic_mass_map[391070000] = 106.95452; - atomic_mass_map[401070000] = 106.94174; - atomic_mass_map[411070000] = 106.931593654; - atomic_mass_map[421070000] = 106.922105877; - atomic_mass_map[431070000] = 106.915460645; - atomic_mass_map[441070000] = 106.909972045; - atomic_mass_map[451070000] = 106.906747811; - atomic_mass_map[461070000] = 106.905128195; - atomic_mass_map[471070000] = 106.905091611; - atomic_mass_map[481070000] = 106.906612122; - atomic_mass_map[491070000] = 106.910290084; - atomic_mass_map[501070000] = 106.915713652; - atomic_mass_map[511070000] = 106.924150641; - atomic_mass_map[521070000] = 106.935011573; - atomic_mass_map[531070000] = 106.94678; - atomic_mass_map[391080000] = 107.95996; - atomic_mass_map[401080000] = 107.94487; - atomic_mass_map[411080000] = 107.936074773; - atomic_mass_map[421080000] = 107.92403349; - atomic_mass_map[431080000] = 107.918495722; - atomic_mass_map[441080000] = 107.910188022; - atomic_mass_map[451080000] = 107.908714473; - atomic_mass_map[461080000] = 107.90389164; - atomic_mass_map[471080000] = 107.905950346; - atomic_mass_map[481080000] = 107.90418344; - atomic_mass_map[491080000] = 107.909693524; - atomic_mass_map[501080000] = 107.911894287; - atomic_mass_map[511080000] = 107.922226735; - atomic_mass_map[521080000] = 107.929380467; - atomic_mass_map[531080000] = 107.943481623; - atomic_mass_map[391090000] = 108.964358; - atomic_mass_map[401090000] = 108.95041; - atomic_mass_map[411090000] = 108.939216; - atomic_mass_map[421090000] = 108.92842416; - atomic_mass_map[431090000] = 108.920256356; - atomic_mass_map[441090000] = 108.913325956; - atomic_mass_map[451090000] = 108.908748821; - atomic_mass_map[461090000] = 108.905950406; - atomic_mass_map[471090000] = 108.904755282; - atomic_mass_map[481090000] = 108.904986653; - atomic_mass_map[491090000] = 108.907151381; - atomic_mass_map[501090000] = 108.91129206; - atomic_mass_map[511090000] = 108.918141122; - atomic_mass_map[521090000] = 108.927304534; - atomic_mass_map[531090000] = 108.938085287; - atomic_mass_map[541090000] = 108.950434864; - atomic_mass_map[401100000] = 109.95396; - atomic_mass_map[411100000] = 109.94403; - atomic_mass_map[421100000] = 109.930703673; - atomic_mass_map[431100000] = 109.923743534; - atomic_mass_map[441100000] = 109.914040696; - atomic_mass_map[451100000] = 109.911079429; - atomic_mass_map[461100000] = 109.905172199; - atomic_mass_map[471100000] = 109.906110226; - atomic_mass_map[481100000] = 109.903006606; - atomic_mass_map[491100000] = 109.90716981; - atomic_mass_map[501100000] = 109.907844835; - atomic_mass_map[511100000] = 109.916854287; - atomic_mass_map[521100000] = 109.922458091; - atomic_mass_map[531100000] = 109.935089034; - atomic_mass_map[541100000] = 109.944263102; - atomic_mass_map[401110000] = 110.959678; - atomic_mass_map[411110000] = 110.94753; - atomic_mass_map[421110000] = 110.935654257; - atomic_mass_map[431110000] = 110.925901257; - atomic_mass_map[441110000] = 110.917569857; - atomic_mass_map[451110000] = 110.91164231; - atomic_mass_map[461110000] = 110.907689679; - atomic_mass_map[471110000] = 110.905295923; - atomic_mass_map[481110000] = 110.904182872; - atomic_mass_map[491110000] = 110.905108458; - atomic_mass_map[501110000] = 110.907740127; - atomic_mass_map[511110000] = 110.913218189; - atomic_mass_map[521110000] = 110.921000589; - atomic_mass_map[531110000] = 110.930269214; - atomic_mass_map[541110000] = 110.941607206; - atomic_mass_map[401120000] = 111.963703; - atomic_mass_map[411120000] = 111.95247; - atomic_mass_map[421120000] = 111.93831; - atomic_mass_map[431120000] = 111.929945813; - atomic_mass_map[441120000] = 111.918809234; - atomic_mass_map[451120000] = 111.914403222; - atomic_mass_map[461120000] = 111.907329698; - atomic_mass_map[471120000] = 111.90704855; - atomic_mass_map[481120000] = 111.902762868; - atomic_mass_map[491120000] = 111.905537694; - atomic_mass_map[501120000] = 111.904823874; - atomic_mass_map[511120000] = 111.912399903; - atomic_mass_map[521120000] = 111.91672785; - atomic_mass_map[531120000] = 111.92800455; - atomic_mass_map[541120000] = 111.935558982; - atomic_mass_map[551120000] = 111.950308558; - atomic_mass_map[411130000] = 112.95651; - atomic_mass_map[421130000] = 112.94335; - atomic_mass_map[431130000] = 112.932569035; - atomic_mass_map[441130000] = 112.922843999; - atomic_mass_map[451130000] = 112.915439342; - atomic_mass_map[461130000] = 112.910261042; - atomic_mass_map[471130000] = 112.906572893; - atomic_mass_map[481130000] = 112.904408133; - atomic_mass_map[491130000] = 112.904061839; - atomic_mass_map[501130000] = 112.905175728; - atomic_mass_map[511130000] = 112.909374536; - atomic_mass_map[521130000] = 112.915891; - atomic_mass_map[531130000] = 112.923650064; - atomic_mass_map[541130000] = 112.93322165; - atomic_mass_map[551130000] = 112.944429144; - atomic_mass_map[411140000] = 113.96201; - atomic_mass_map[421140000] = 113.94653; - atomic_mass_map[431140000] = 113.93691; - atomic_mass_map[441140000] = 113.924613554; - atomic_mass_map[451140000] = 113.918718294; - atomic_mass_map[461140000] = 113.910368554; - atomic_mass_map[471140000] = 113.908823031; - atomic_mass_map[481140000] = 113.903365086; - atomic_mass_map[491140000] = 113.904917909; - atomic_mass_map[501140000] = 113.902782695; - atomic_mass_map[511140000] = 113.909290189; - atomic_mass_map[521140000] = 113.912089; - atomic_mass_map[531140000] = 113.92185; - atomic_mass_map[541140000] = 113.927980331; - atomic_mass_map[551140000] = 113.941296176; - atomic_mass_map[561140000] = 113.950660438; - atomic_mass_map[411150000] = 114.96634; - atomic_mass_map[421150000] = 114.95196; - atomic_mass_map[431150000] = 114.93998; - atomic_mass_map[441150000] = 114.928819898; - atomic_mass_map[451150000] = 114.920311589; - atomic_mass_map[461150000] = 114.913658506; - atomic_mass_map[471150000] = 114.908767355; - atomic_mass_map[481150000] = 114.905437513; - atomic_mass_map[491150000] = 114.903878776; - atomic_mass_map[501150000] = 114.903344699; - atomic_mass_map[511150000] = 114.906598; - atomic_mass_map[521150000] = 114.911902; - atomic_mass_map[531150000] = 114.918048; - atomic_mass_map[541150000] = 114.926293945; - atomic_mass_map[551150000] = 114.93591; - atomic_mass_map[561150000] = 114.94737; - atomic_mass_map[421160000] = 115.955448; - atomic_mass_map[431160000] = 115.94476; - atomic_mass_map[441160000] = 115.931219195; - atomic_mass_map[451160000] = 115.924058528; - atomic_mass_map[461160000] = 115.914296979; - atomic_mass_map[471160000] = 115.911386812; - atomic_mass_map[481160000] = 115.904763148; - atomic_mass_map[491160000] = 115.905259995; - atomic_mass_map[501160000] = 115.901742797; - atomic_mass_map[511160000] = 115.906793115; - atomic_mass_map[521160000] = 115.90846; - atomic_mass_map[531160000] = 115.916808658; - atomic_mass_map[541160000] = 115.921581112; - atomic_mass_map[551160000] = 115.933373; - atomic_mass_map[561160000] = 115.94128; - atomic_mass_map[571160000] = 115.956304; - atomic_mass_map[421170000] = 116.96117; - atomic_mass_map[431170000] = 116.94806; - atomic_mass_map[441170000] = 116.936103; - atomic_mass_map[451170000] = 116.926035391; - atomic_mass_map[461170000] = 116.917954721; - atomic_mass_map[471170000] = 116.911773934; - atomic_mass_map[481170000] = 116.907225956; - atomic_mass_map[491170000] = 116.904515678; - atomic_mass_map[501170000] = 116.902953983; - atomic_mass_map[511170000] = 116.904841508; - atomic_mass_map[521170000] = 116.908646298; - atomic_mass_map[531170000] = 116.913648312; - atomic_mass_map[541170000] = 116.920358761; - atomic_mass_map[551170000] = 116.928616726; - atomic_mass_map[561170000] = 116.93814057; - atomic_mass_map[571170000] = 116.949985; - atomic_mass_map[431180000] = 117.95299; - atomic_mass_map[441180000] = 117.93853; - atomic_mass_map[451180000] = 117.930340208; - atomic_mass_map[461180000] = 117.9190667; - atomic_mass_map[471180000] = 117.914595487; - atomic_mass_map[481180000] = 117.906921869; - atomic_mass_map[491180000] = 117.906356616; - atomic_mass_map[501180000] = 117.901606574; - atomic_mass_map[511180000] = 117.905532139; - atomic_mass_map[521180000] = 117.905853629; - atomic_mass_map[531180000] = 117.913074; - atomic_mass_map[541180000] = 117.91617868; - atomic_mass_map[551180000] = 117.926559519; - atomic_mass_map[561180000] = 117.93306; - atomic_mass_map[571180000] = 117.94673; - atomic_mass_map[431190000] = 118.95666; - atomic_mass_map[441190000] = 118.94357; - atomic_mass_map[451190000] = 118.932556954; - atomic_mass_map[461190000] = 118.923340223; - atomic_mass_map[471190000] = 118.915570287; - atomic_mass_map[481190000] = 118.909846851; - atomic_mass_map[491190000] = 118.905850708; - atomic_mass_map[501190000] = 118.903311172; - atomic_mass_map[511190000] = 118.903945471; - atomic_mass_map[521190000] = 118.906407108; - atomic_mass_map[531190000] = 118.910074; - atomic_mass_map[541190000] = 118.915410714; - atomic_mass_map[551190000] = 118.92237733; - atomic_mass_map[561190000] = 118.930659686; - atomic_mass_map[571190000] = 118.94099; - atomic_mass_map[581190000] = 118.95271; - atomic_mass_map[431200000] = 119.96187; - atomic_mass_map[441200000] = 119.94631; - atomic_mass_map[451200000] = 119.93686; - atomic_mass_map[461200000] = 119.924551089; - atomic_mass_map[471200000] = 119.918784768; - atomic_mass_map[481200000] = 119.909868068; - atomic_mass_map[491200000] = 119.907966567; - atomic_mass_map[501200000] = 119.902201634; - atomic_mass_map[511200000] = 119.905079385; - atomic_mass_map[521200000] = 119.9040593; - atomic_mass_map[531200000] = 119.910087251; - atomic_mass_map[541200000] = 119.91178427; - atomic_mass_map[551200000] = 119.920677279; - atomic_mass_map[561200000] = 119.926045; - atomic_mass_map[571200000] = 119.93807; - atomic_mass_map[581200000] = 119.94654; - atomic_mass_map[441210000] = 120.95164; - atomic_mass_map[451210000] = 120.93942; - atomic_mass_map[461210000] = 120.928950345; - atomic_mass_map[471210000] = 120.920125282; - atomic_mass_map[481210000] = 120.912963663; - atomic_mass_map[491210000] = 120.907851062; - atomic_mass_map[501210000] = 120.904242554; - atomic_mass_map[511210000] = 120.903811967; - atomic_mass_map[521210000] = 120.904943812; - atomic_mass_map[531210000] = 120.90740505; - atomic_mass_map[541210000] = 120.911453015; - atomic_mass_map[551210000] = 120.917227238; - atomic_mass_map[561210000] = 120.92405229; - atomic_mass_map[571210000] = 120.93315; - atomic_mass_map[581210000] = 120.94335; - atomic_mass_map[591210000] = 120.95532; - atomic_mass_map[441220000] = 121.95447; - atomic_mass_map[451220000] = 121.94399; - atomic_mass_map[461220000] = 121.930631696; - atomic_mass_map[471220000] = 121.923664449; - atomic_mass_map[481220000] = 121.913459053; - atomic_mass_map[491220000] = 121.910280738; - atomic_mass_map[501220000] = 121.903443774; - atomic_mass_map[511220000] = 121.905169948; - atomic_mass_map[521220000] = 121.903043455; - atomic_mass_map[531220000] = 121.907588841; - atomic_mass_map[541220000] = 121.908367658; - atomic_mass_map[551220000] = 121.916108146; - atomic_mass_map[561220000] = 121.919904; - atomic_mass_map[571220000] = 121.93071; - atomic_mass_map[581220000] = 121.93787; - atomic_mass_map[591220000] = 121.95175; - atomic_mass_map[441230000] = 122.95989; - atomic_mass_map[451230000] = 122.94685; - atomic_mass_map[461230000] = 122.93514; - atomic_mass_map[471230000] = 122.925337063; - atomic_mass_map[481230000] = 122.916892453; - atomic_mass_map[491230000] = 122.910433718; - atomic_mass_map[501230000] = 122.905725221; - atomic_mass_map[511230000] = 122.904213204; - atomic_mass_map[521230000] = 122.904269769; - atomic_mass_map[531230000] = 122.905588537; - atomic_mass_map[541230000] = 122.908481757; - atomic_mass_map[551230000] = 122.912996063; - atomic_mass_map[561230000] = 122.918781063; - atomic_mass_map[571230000] = 122.9263; - atomic_mass_map[581230000] = 122.93528; - atomic_mass_map[591230000] = 122.94596; - atomic_mass_map[441240000] = 123.96305; - atomic_mass_map[451240000] = 123.95151; - atomic_mass_map[461240000] = 123.93714; - atomic_mass_map[471240000] = 123.928931229; - atomic_mass_map[481240000] = 123.917657364; - atomic_mass_map[491240000] = 123.913182245; - atomic_mass_map[501240000] = 123.905276645; - atomic_mass_map[511240000] = 123.905934978; - atomic_mass_map[521240000] = 123.902817085; - atomic_mass_map[531240000] = 123.906209041; - atomic_mass_map[541240000] = 123.905891984; - atomic_mass_map[551240000] = 123.912257798; - atomic_mass_map[561240000] = 123.915093629; - atomic_mass_map[571240000] = 123.924574275; - atomic_mass_map[581240000] = 123.93031; - atomic_mass_map[591240000] = 123.94294; - atomic_mass_map[601240000] = 123.9522; - atomic_mass_map[451250000] = 124.95469; - atomic_mass_map[461250000] = 124.94179; - atomic_mass_map[471250000] = 124.931046; - atomic_mass_map[481250000] = 124.921257577; - atomic_mass_map[491250000] = 124.913604553; - atomic_mass_map[501250000] = 124.907786395; - atomic_mass_map[511250000] = 124.905253007; - atomic_mass_map[521250000] = 124.90442992; - atomic_mass_map[531250000] = 124.904629353; - atomic_mass_map[541250000] = 124.906394445; - atomic_mass_map[551250000] = 124.909727985; - atomic_mass_map[561250000] = 124.914471843; - atomic_mass_map[571250000] = 124.920815932; - atomic_mass_map[581250000] = 124.92844; - atomic_mass_map[591250000] = 124.9377; - atomic_mass_map[601250000] = 124.9489; - atomic_mass_map[451260000] = 125.95946; - atomic_mass_map[461260000] = 125.94416; - atomic_mass_map[471260000] = 125.93475; - atomic_mass_map[481260000] = 125.922429128; - atomic_mass_map[491260000] = 125.916507322; - atomic_mass_map[501260000] = 125.907658786; - atomic_mass_map[511260000] = 125.907252987; - atomic_mass_map[521260000] = 125.903310886; - atomic_mass_map[531260000] = 125.905623329; - atomic_mass_map[541260000] = 125.904298292; - atomic_mass_map[551260000] = 125.909446057; - atomic_mass_map[561260000] = 125.911250204; - atomic_mass_map[571260000] = 125.919512667; - atomic_mass_map[581260000] = 125.923971; - atomic_mass_map[591260000] = 125.93524; - atomic_mass_map[601260000] = 125.94311; - atomic_mass_map[611260000] = 125.95792; - atomic_mass_map[461270000] = 126.94907; - atomic_mass_map[471270000] = 126.93711; - atomic_mass_map[481270000] = 126.926472404; - atomic_mass_map[491270000] = 126.917446276; - atomic_mass_map[501270000] = 126.910389943; - atomic_mass_map[511270000] = 126.906924278; - atomic_mass_map[521270000] = 126.905225735; - atomic_mass_map[531270000] = 126.904471853; - atomic_mass_map[541270000] = 126.905182914; - atomic_mass_map[551270000] = 126.907417384; - atomic_mass_map[561270000] = 126.911091275; - atomic_mass_map[571270000] = 126.916375084; - atomic_mass_map[581270000] = 126.922727; - atomic_mass_map[591270000] = 126.93071; - atomic_mass_map[601270000] = 126.94038; - atomic_mass_map[611270000] = 126.95192; - atomic_mass_map[461280000] = 127.95183; - atomic_mass_map[471280000] = 127.94106; - atomic_mass_map[481280000] = 127.927812858; - atomic_mass_map[491280000] = 127.920401044; - atomic_mass_map[501280000] = 127.910507184; - atomic_mass_map[511280000] = 127.909145628; - atomic_mass_map[521280000] = 127.904461279; - atomic_mass_map[531280000] = 127.905808615; - atomic_mass_map[541280000] = 127.903531018; - atomic_mass_map[551280000] = 127.907748666; - atomic_mass_map[561280000] = 127.908341967; - atomic_mass_map[571280000] = 127.915592123; - atomic_mass_map[581280000] = 127.918911; - atomic_mass_map[591280000] = 127.928791; - atomic_mass_map[601280000] = 127.93525; - atomic_mass_map[611280000] = 127.9487; - atomic_mass_map[621280000] = 127.95842; - atomic_mass_map[471290000] = 128.94395; - atomic_mass_map[481290000] = 128.93182; - atomic_mass_map[491290000] = 128.921805301; - atomic_mass_map[501290000] = 128.913464711; - atomic_mass_map[511290000] = 128.909146665; - atomic_mass_map[521290000] = 128.90659646; - atomic_mass_map[531290000] = 128.904983669; - atomic_mass_map[541290000] = 128.904780861; - atomic_mass_map[551290000] = 128.906065683; - atomic_mass_map[561290000] = 128.908680798; - atomic_mass_map[571290000] = 128.912694431; - atomic_mass_map[581290000] = 128.918102; - atomic_mass_map[591290000] = 128.925095; - atomic_mass_map[601290000] = 128.933102; - atomic_mass_map[611290000] = 128.94323; - atomic_mass_map[621290000] = 128.95476; - atomic_mass_map[471300000] = 129.950703; - atomic_mass_map[481300000] = 129.933940679; - atomic_mass_map[491300000] = 129.924976585; - atomic_mass_map[501300000] = 129.91397383; - atomic_mass_map[511300000] = 129.911662054; - atomic_mass_map[521300000] = 129.906222748; - atomic_mass_map[531300000] = 129.906670193; - atomic_mass_map[541300000] = 129.903509349; - atomic_mass_map[551300000] = 129.906709283; - atomic_mass_map[561300000] = 129.906320669; - atomic_mass_map[571300000] = 129.912369413; - atomic_mass_map[581300000] = 129.914736; - atomic_mass_map[591300000] = 129.92359; - atomic_mass_map[601300000] = 129.928506; - atomic_mass_map[611300000] = 129.94053; - atomic_mass_map[621300000] = 129.949; - atomic_mass_map[631300000] = 129.963689; - atomic_mass_map[481310000] = 130.9406; - atomic_mass_map[491310000] = 130.926971529; - atomic_mass_map[501310000] = 130.917044954; - atomic_mass_map[511310000] = 130.911988799; - atomic_mass_map[521310000] = 130.908522213; - atomic_mass_map[531310000] = 130.906126305; - atomic_mass_map[541310000] = 130.905084057; - atomic_mass_map[551310000] = 130.905464899; - atomic_mass_map[561310000] = 130.906940977; - atomic_mass_map[571310000] = 130.91007; - atomic_mass_map[581310000] = 130.914429465; - atomic_mass_map[591310000] = 130.92023496; - atomic_mass_map[601310000] = 130.92724802; - atomic_mass_map[611310000] = 130.93567; - atomic_mass_map[621310000] = 130.94618; - atomic_mass_map[631310000] = 130.957842; - atomic_mass_map[481320000] = 131.94604; - atomic_mass_map[491320000] = 131.933001273; - atomic_mass_map[501320000] = 131.917826725; - atomic_mass_map[511320000] = 131.914507691; - atomic_mass_map[521320000] = 131.908546716; - atomic_mass_map[531320000] = 131.907993514; - atomic_mass_map[541320000] = 131.904155086; - atomic_mass_map[551320000] = 131.906433914; - atomic_mass_map[561320000] = 131.905061128; - atomic_mass_map[571320000] = 131.910118979; - atomic_mass_map[581320000] = 131.911463775; - atomic_mass_map[591320000] = 131.919255; - atomic_mass_map[601320000] = 131.923321237; - atomic_mass_map[611320000] = 131.93384; - atomic_mass_map[621320000] = 131.94087; - atomic_mass_map[631320000] = 131.95467; - atomic_mass_map[481330000] = 132.95285; - atomic_mass_map[491330000] = 132.93831; - atomic_mass_map[501330000] = 132.923913404; - atomic_mass_map[511330000] = 132.915273198; - atomic_mass_map[521330000] = 132.910968766; - atomic_mass_map[531330000] = 132.907796968; - atomic_mass_map[541330000] = 132.905910751; - atomic_mass_map[551330000] = 132.905451961; - atomic_mass_map[561330000] = 132.906007351; - atomic_mass_map[571330000] = 132.908218; - atomic_mass_map[581330000] = 132.911520402; - atomic_mass_map[591330000] = 132.916330561; - atomic_mass_map[601330000] = 132.922348; - atomic_mass_map[611330000] = 132.929782; - atomic_mass_map[621330000] = 132.93856; - atomic_mass_map[631330000] = 132.94929; - atomic_mass_map[641330000] = 132.96133; - atomic_mass_map[491340000] = 133.94454; - atomic_mass_map[501340000] = 133.928682064; - atomic_mass_map[511340000] = 133.920535676; - atomic_mass_map[521340000] = 133.911393959; - atomic_mass_map[531340000] = 133.909758836; - atomic_mass_map[541340000] = 133.905394664; - atomic_mass_map[551340000] = 133.906718503; - atomic_mass_map[561340000] = 133.904508182; - atomic_mass_map[571340000] = 133.908514011; - atomic_mass_map[581340000] = 133.908928142; - atomic_mass_map[591340000] = 133.915696729; - atomic_mass_map[601340000] = 133.91879021; - atomic_mass_map[611340000] = 133.928353; - atomic_mass_map[621340000] = 133.93411; - atomic_mass_map[631340000] = 133.9464; - atomic_mass_map[641340000] = 133.95566; - atomic_mass_map[491350000] = 134.95005; - atomic_mass_map[501350000] = 134.934908606; - atomic_mass_map[511350000] = 134.925185106; - atomic_mass_map[521350000] = 134.916555706; - atomic_mass_map[531350000] = 134.910048847; - atomic_mass_map[541350000] = 134.90722778; - atomic_mass_map[551350000] = 134.905977049; - atomic_mass_map[561350000] = 134.905688375; - atomic_mass_map[571350000] = 134.906984363; - atomic_mass_map[581350000] = 134.909160599; - atomic_mass_map[591350000] = 134.913111775; - atomic_mass_map[601350000] = 134.918181321; - atomic_mass_map[611350000] = 134.924823; - atomic_mass_map[621350000] = 134.93252; - atomic_mass_map[631350000] = 134.94187; - atomic_mass_map[641350000] = 134.95245; - atomic_mass_map[651350000] = 134.96476; - atomic_mass_map[501360000] = 135.93999; - atomic_mass_map[511360000] = 135.930745879; - atomic_mass_map[521360000] = 135.920100608; - atomic_mass_map[531360000] = 135.914604412; - atomic_mass_map[541360000] = 135.907214484; - atomic_mass_map[551360000] = 135.907311358; - atomic_mass_map[561360000] = 135.904575727; - atomic_mass_map[571360000] = 135.907634962; - atomic_mass_map[581360000] = 135.907129205; - atomic_mass_map[591360000] = 135.912677456; - atomic_mass_map[601360000] = 135.914976064; - atomic_mass_map[611360000] = 135.923584586; - atomic_mass_map[621360000] = 135.928275556; - atomic_mass_map[631360000] = 135.93962; - atomic_mass_map[641360000] = 135.9473; - atomic_mass_map[651360000] = 135.96129; - atomic_mass_map[501370000] = 136.94655; - atomic_mass_map[511370000] = 136.935555; - atomic_mass_map[521370000] = 136.925598852; - atomic_mass_map[531370000] = 136.918028188; - atomic_mass_map[541370000] = 136.911557781; - atomic_mass_map[551370000] = 136.907089231; - atomic_mass_map[561370000] = 136.905827141; - atomic_mass_map[571370000] = 136.906450385; - atomic_mass_map[581370000] = 136.907762364; - atomic_mass_map[591370000] = 136.91067915; - atomic_mass_map[601370000] = 136.914562448; - atomic_mass_map[611370000] = 136.920479523; - atomic_mass_map[621370000] = 136.926970517; - atomic_mass_map[631370000] = 136.93546; - atomic_mass_map[641370000] = 136.94502; - atomic_mass_map[651370000] = 136.95602; - atomic_mass_map[501380000] = 137.95184; - atomic_mass_map[511380000] = 137.94145; - atomic_mass_map[521380000] = 137.929472226; - atomic_mass_map[531380000] = 137.922726402; - atomic_mass_map[541380000] = 137.914146273; - atomic_mass_map[551380000] = 137.911017089; - atomic_mass_map[561380000] = 137.905246995; - atomic_mass_map[571380000] = 137.907114919; - atomic_mass_map[581380000] = 137.905991089; - atomic_mass_map[591380000] = 137.910754405; - atomic_mass_map[601380000] = 137.911949718; - atomic_mass_map[611380000] = 137.919548077; - atomic_mass_map[621380000] = 137.923243991; - atomic_mass_map[631380000] = 137.933709; - atomic_mass_map[641380000] = 137.94025; - atomic_mass_map[651380000] = 137.95312; - atomic_mass_map[661380000] = 137.9625; - atomic_mass_map[511390000] = 138.94655; - atomic_mass_map[521390000] = 138.935367194; - atomic_mass_map[531390000] = 138.926506206; - atomic_mass_map[541390000] = 138.918792203; - atomic_mass_map[551390000] = 138.913363758; - atomic_mass_map[561390000] = 138.908841099; - atomic_mass_map[571390000] = 138.906356256; - atomic_mass_map[581390000] = 138.906655111; - atomic_mass_map[591390000] = 138.908940762; - atomic_mass_map[601390000] = 138.911953649; - atomic_mass_map[611390000] = 138.91679967; - atomic_mass_map[621390000] = 138.922296635; - atomic_mass_map[631390000] = 138.92979231; - atomic_mass_map[641390000] = 138.93813; - atomic_mass_map[651390000] = 138.94833; - atomic_mass_map[661390000] = 138.95959; - atomic_mass_map[511400000] = 139.95283; - atomic_mass_map[521400000] = 139.939498567; - atomic_mass_map[531400000] = 139.931727; - atomic_mass_map[541400000] = 139.921645817; - atomic_mass_map[551400000] = 139.917283063; - atomic_mass_map[561400000] = 139.91060573; - atomic_mass_map[571400000] = 139.909480635; - atomic_mass_map[581400000] = 139.905443107; - atomic_mass_map[591400000] = 139.909080275; - atomic_mass_map[601400000] = 139.909549849; - atomic_mass_map[611400000] = 139.916039639; - atomic_mass_map[621400000] = 139.918994717; - atomic_mass_map[631400000] = 139.928087637; - atomic_mass_map[641400000] = 139.933674; - atomic_mass_map[651400000] = 139.945805049; - atomic_mass_map[661400000] = 139.95402; - atomic_mass_map[671400000] = 139.968589; - atomic_mass_map[521410000] = 140.9458; - atomic_mass_map[531410000] = 140.93569; - atomic_mass_map[541410000] = 140.926787184; - atomic_mass_map[551410000] = 140.920045491; - atomic_mass_map[561410000] = 140.914403333; - atomic_mass_map[571410000] = 140.91096603; - atomic_mass_map[581410000] = 140.908280674; - atomic_mass_map[591410000] = 140.907657568; - atomic_mass_map[601410000] = 140.909614653; - atomic_mass_map[611410000] = 140.913555084; - atomic_mass_map[621410000] = 140.918481636; - atomic_mass_map[631410000] = 140.924931754; - atomic_mass_map[641410000] = 140.932126; - atomic_mass_map[651410000] = 140.941448; - atomic_mass_map[661410000] = 140.95128; - atomic_mass_map[671410000] = 140.963108; - atomic_mass_map[521420000] = 141.95022; - atomic_mass_map[531420000] = 141.941202; - atomic_mass_map[541420000] = 141.929973098; - atomic_mass_map[551420000] = 141.924295991; - atomic_mass_map[561420000] = 141.916432382; - atomic_mass_map[571420000] = 141.91409089; - atomic_mass_map[581420000] = 141.909250375; - atomic_mass_map[591420000] = 141.910049607; - atomic_mass_map[601420000] = 141.907728996; - atomic_mass_map[611420000] = 141.912890411; - atomic_mass_map[621420000] = 141.915204385; - atomic_mass_map[631420000] = 141.92344169; - atomic_mass_map[641420000] = 141.928116; - atomic_mass_map[651420000] = 141.939280859; - atomic_mass_map[661420000] = 141.946194; - atomic_mass_map[671420000] = 141.96001; - atomic_mass_map[681420000] = 141.9701; - atomic_mass_map[521430000] = 142.95676; - atomic_mass_map[531430000] = 142.94565; - atomic_mass_map[541430000] = 142.935369554; - atomic_mass_map[551430000] = 142.927349327; - atomic_mass_map[561430000] = 142.920625293; - atomic_mass_map[571430000] = 142.916079512; - atomic_mass_map[581430000] = 142.91239212; - atomic_mass_map[591430000] = 142.910822796; - atomic_mass_map[601430000] = 142.909819989; - atomic_mass_map[611430000] = 142.910938262; - atomic_mass_map[621430000] = 142.914635303; - atomic_mass_map[631430000] = 142.920298681; - atomic_mass_map[641430000] = 142.926750682; - atomic_mass_map[651430000] = 142.935137335; - atomic_mass_map[661430000] = 142.943994335; - atomic_mass_map[671430000] = 142.95486; - atomic_mass_map[681430000] = 142.96662; - atomic_mass_map[531440000] = 143.95139; - atomic_mass_map[541440000] = 143.938945079; - atomic_mass_map[551440000] = 143.932076313; - atomic_mass_map[561440000] = 143.922954866; - atomic_mass_map[571440000] = 143.919645589; - atomic_mass_map[581440000] = 143.913652939; - atomic_mass_map[591440000] = 143.913310859; - atomic_mass_map[601440000] = 143.910092974; - atomic_mass_map[611440000] = 143.912596396; - atomic_mass_map[621440000] = 143.912006466; - atomic_mass_map[631440000] = 143.918819553; - atomic_mass_map[641440000] = 143.922963; - atomic_mass_map[651440000] = 143.933045; - atomic_mass_map[661440000] = 143.939269515; - atomic_mass_map[671440000] = 143.952109715; - atomic_mass_map[681440000] = 143.9607; - atomic_mass_map[691440000] = 143.976283; - atomic_mass_map[531450000] = 144.95605; - atomic_mass_map[541450000] = 144.944719634; - atomic_mass_map[551450000] = 144.935527435; - atomic_mass_map[561450000] = 144.9275184; - atomic_mass_map[571450000] = 144.921808068; - atomic_mass_map[581450000] = 144.917265228; - atomic_mass_map[591450000] = 144.914518156; - atomic_mass_map[601450000] = 144.912579322; - atomic_mass_map[611450000] = 144.912755935; - atomic_mass_map[621450000] = 144.913417339; - atomic_mass_map[631450000] = 144.916272629; - atomic_mass_map[641450000] = 144.921712821; - atomic_mass_map[651450000] = 144.928821947; - atomic_mass_map[661450000] = 144.937473995; - atomic_mass_map[671450000] = 144.947267395; - atomic_mass_map[681450000] = 144.95805; - atomic_mass_map[691450000] = 144.970389; - atomic_mass_map[541460000] = 145.948518249; - atomic_mass_map[551460000] = 145.940344271; - atomic_mass_map[561460000] = 145.930283712; - atomic_mass_map[571460000] = 145.925875174; - atomic_mass_map[581460000] = 145.918802412; - atomic_mass_map[591460000] = 145.91767985; - atomic_mass_map[601460000] = 145.913122628; - atomic_mass_map[611460000] = 145.914702396; - atomic_mass_map[621460000] = 145.913046991; - atomic_mass_map[631460000] = 145.917211039; - atomic_mass_map[641460000] = 145.918318817; - atomic_mass_map[651460000] = 145.927252984; - atomic_mass_map[661460000] = 145.93284453; - atomic_mass_map[671460000] = 145.944993506; - atomic_mass_map[681460000] = 145.95241836; - atomic_mass_map[691460000] = 145.966837; - atomic_mass_map[541470000] = 146.95426; - atomic_mass_map[551470000] = 146.944156156; - atomic_mass_map[561470000] = 146.9353039; - atomic_mass_map[571470000] = 146.9284178; - atomic_mass_map[581470000] = 146.922689913; - atomic_mass_map[591470000] = 146.919007518; - atomic_mass_map[601470000] = 146.916106136; - atomic_mass_map[611470000] = 146.915144988; - atomic_mass_map[621470000] = 146.914904435; - atomic_mass_map[631470000] = 146.916752659; - atomic_mass_map[641470000] = 146.919101384; - atomic_mass_map[651470000] = 146.924054788; - atomic_mass_map[661470000] = 146.931082715; - atomic_mass_map[671470000] = 146.940142296; - atomic_mass_map[681470000] = 146.949964459; - atomic_mass_map[691470000] = 146.961379891; - atomic_mass_map[541480000] = 147.95813; - atomic_mass_map[551480000] = 147.949225137; - atomic_mass_map[561480000] = 147.938170578; - atomic_mass_map[571480000] = 147.9326794; - atomic_mass_map[581480000] = 147.924424225; - atomic_mass_map[591480000] = 147.922130083; - atomic_mass_map[601480000] = 147.916899294; - atomic_mass_map[611480000] = 147.917481945; - atomic_mass_map[621480000] = 147.914829226; - atomic_mass_map[631480000] = 147.918089243; - atomic_mass_map[641480000] = 147.918121511; - atomic_mass_map[651480000] = 147.924281552; - atomic_mass_map[661480000] = 147.927156571; - atomic_mass_map[671480000] = 147.937743928; - atomic_mass_map[681480000] = 147.944735029; - atomic_mass_map[691480000] = 147.958384029; - atomic_mass_map[701480000] = 147.96758; - atomic_mass_map[551490000] = 148.95302; - atomic_mass_map[561490000] = 148.94308; - atomic_mass_map[571490000] = 148.93535126; - atomic_mass_map[581490000] = 148.9284269; - atomic_mass_map[591490000] = 148.9237361; - atomic_mass_map[601490000] = 148.920154849; - atomic_mass_map[611490000] = 148.918342277; - atomic_mass_map[621490000] = 148.917192062; - atomic_mass_map[631490000] = 148.917937763; - atomic_mass_map[641490000] = 148.919348117; - atomic_mass_map[651490000] = 148.923253549; - atomic_mass_map[661490000] = 148.927321692; - atomic_mass_map[671490000] = 148.933802646; - atomic_mass_map[681490000] = 148.942306; - atomic_mass_map[691490000] = 148.95289; - atomic_mass_map[701490000] = 148.96436; - atomic_mass_map[551500000] = 149.95833; - atomic_mass_map[561500000] = 149.94605; - atomic_mass_map[571500000] = 149.93947; - atomic_mass_map[581500000] = 149.930384042; - atomic_mass_map[591500000] = 149.926676502; - atomic_mass_map[601500000] = 149.920902249; - atomic_mass_map[611500000] = 149.920990941; - atomic_mass_map[621500000] = 149.917282919; - atomic_mass_map[631500000] = 149.919707671; - atomic_mass_map[641500000] = 149.918664422; - atomic_mass_map[651500000] = 149.923664941; - atomic_mass_map[661500000] = 149.925593264; - atomic_mass_map[671500000] = 149.933498408; - atomic_mass_map[681500000] = 149.937915567; - atomic_mass_map[691500000] = 149.95009; - atomic_mass_map[701500000] = 149.95852; - atomic_mass_map[711500000] = 149.973548; - atomic_mass_map[551510000] = 150.96258; - atomic_mass_map[561510000] = 150.95127; - atomic_mass_map[571510000] = 150.94232; - atomic_mass_map[581510000] = 150.9342722; - atomic_mass_map[591510000] = 150.928309285; - atomic_mass_map[601510000] = 150.923840289; - atomic_mass_map[611510000] = 150.921217539; - atomic_mass_map[621510000] = 150.919939796; - atomic_mass_map[631510000] = 150.919857803; - atomic_mass_map[641510000] = 150.92035595; - atomic_mass_map[651510000] = 150.923109599; - atomic_mass_map[661510000] = 150.926191564; - atomic_mass_map[671510000] = 150.931698345; - atomic_mass_map[681510000] = 150.937448567; - atomic_mass_map[691510000] = 150.945487875; - atomic_mass_map[701510000] = 150.955402497; - atomic_mass_map[711510000] = 150.967677; - atomic_mass_map[561520000] = 151.95481; - atomic_mass_map[571520000] = 151.94682; - atomic_mass_map[581520000] = 151.9366; - atomic_mass_map[591520000] = 151.9315529; - atomic_mass_map[601520000] = 151.924692216; - atomic_mass_map[611520000] = 151.923506181; - atomic_mass_map[621520000] = 151.919739721; - atomic_mass_map[631520000] = 151.921752184; - atomic_mass_map[641520000] = 151.919799494; - atomic_mass_map[651520000] = 151.924082936; - atomic_mass_map[661520000] = 151.924725286; - atomic_mass_map[671520000] = 151.931723623; - atomic_mass_map[681520000] = 151.935057085; - atomic_mass_map[691520000] = 151.944422; - atomic_mass_map[701520000] = 151.9502727; - atomic_mass_map[711520000] = 151.96412; - atomic_mass_map[561530000] = 152.96036; - atomic_mass_map[571530000] = 152.95036; - atomic_mass_map[581530000] = 152.94093; - atomic_mass_map[591530000] = 152.933903539; - atomic_mass_map[601530000] = 152.927717978; - atomic_mass_map[611530000] = 152.924156686; - atomic_mass_map[621530000] = 152.92210465; - atomic_mass_map[631530000] = 152.921238003; - atomic_mass_map[641530000] = 152.921758027; - atomic_mass_map[651530000] = 152.923442403; - atomic_mass_map[661530000] = 152.925772378; - atomic_mass_map[671530000] = 152.930206429; - atomic_mass_map[681530000] = 152.93508044; - atomic_mass_map[691530000] = 152.942040101; - atomic_mass_map[701530000] = 152.94932; - atomic_mass_map[711530000] = 152.958751054; - atomic_mass_map[721530000] = 152.97069; - atomic_mass_map[571540000] = 153.95517; - atomic_mass_map[581540000] = 153.9438; - atomic_mass_map[591540000] = 153.937525741; - atomic_mass_map[601540000] = 153.929484894; - atomic_mass_map[611540000] = 153.926471531; - atomic_mass_map[621540000] = 153.922216861; - atomic_mass_map[631540000] = 153.922986962; - atomic_mass_map[641540000] = 153.92087406; - atomic_mass_map[651540000] = 153.924684767; - atomic_mass_map[661540000] = 153.924429277; - atomic_mass_map[671540000] = 153.930606834; - atomic_mass_map[681540000] = 153.932790842; - atomic_mass_map[691540000] = 153.941570033; - atomic_mass_map[701540000] = 153.946395655; - atomic_mass_map[711540000] = 153.957364; - atomic_mass_map[721540000] = 153.96486; - atomic_mass_map[571550000] = 154.95901; - atomic_mass_map[581550000] = 154.94855; - atomic_mass_map[591550000] = 154.940509281; - atomic_mass_map[601550000] = 154.933135691; - atomic_mass_map[611550000] = 154.928137048; - atomic_mass_map[621550000] = 154.924647748; - atomic_mass_map[631550000] = 154.922901107; - atomic_mass_map[641550000] = 154.922630473; - atomic_mass_map[651550000] = 154.923510547; - atomic_mass_map[661550000] = 154.925759086; - atomic_mass_map[671550000] = 154.929104049; - atomic_mass_map[681550000] = 154.933215911; - atomic_mass_map[691550000] = 154.93920966; - atomic_mass_map[701550000] = 154.945783132; - atomic_mass_map[711550000] = 154.9543206; - atomic_mass_map[721550000] = 154.96311; - atomic_mass_map[731550000] = 154.974245; - atomic_mass_map[581560000] = 155.95183; - atomic_mass_map[591560000] = 155.94464; - atomic_mass_map[601560000] = 155.935078894; - atomic_mass_map[611560000] = 155.931117516; - atomic_mass_map[621560000] = 155.925536067; - atomic_mass_map[631560000] = 155.924760494; - atomic_mass_map[641560000] = 155.922131241; - atomic_mass_map[651560000] = 155.924755181; - atomic_mass_map[661560000] = 155.924284713; - atomic_mass_map[671560000] = 155.929706112; - atomic_mass_map[681560000] = 155.931067313; - atomic_mass_map[691560000] = 155.938991573; - atomic_mass_map[701560000] = 155.942824698; - atomic_mass_map[711560000] = 155.953032522; - atomic_mass_map[721560000] = 155.959347805; - atomic_mass_map[731560000] = 155.97203; - atomic_mass_map[581570000] = 156.95705; - atomic_mass_map[591570000] = 156.94789; - atomic_mass_map[601570000] = 156.939386061; - atomic_mass_map[611570000] = 156.933121393; - atomic_mass_map[621570000] = 156.928418698; - atomic_mass_map[631570000] = 156.925433446; - atomic_mass_map[641570000] = 156.923968569; - atomic_mass_map[651570000] = 156.924033028; - atomic_mass_map[661570000] = 156.92547066; - atomic_mass_map[671570000] = 156.928254427; - atomic_mass_map[681570000] = 156.931948658; - atomic_mass_map[691570000] = 156.93694412; - atomic_mass_map[701570000] = 156.942645349; - atomic_mass_map[711570000] = 156.950126667; - atomic_mass_map[721570000] = 156.958236; - atomic_mass_map[731570000] = 156.968176167; - atomic_mass_map[741570000] = 156.97884; - atomic_mass_map[591580000] = 157.95241; - atomic_mass_map[601580000] = 157.94197; - atomic_mass_map[611580000] = 157.936565144; - atomic_mass_map[621580000] = 157.929951004; - atomic_mass_map[631580000] = 157.927798606; - atomic_mass_map[641580000] = 157.924112348; - atomic_mass_map[651580000] = 157.925420947; - atomic_mass_map[661580000] = 157.924415875; - atomic_mass_map[671580000] = 157.928945969; - atomic_mass_map[681580000] = 157.929893474; - atomic_mass_map[691580000] = 157.936979525; - atomic_mass_map[701580000] = 157.939870549; - atomic_mass_map[711580000] = 157.949315507; - atomic_mass_map[721580000] = 157.954801092; - atomic_mass_map[731580000] = 157.966541; - atomic_mass_map[741580000] = 157.974562; - atomic_mass_map[591590000] = 158.95589; - atomic_mass_map[601590000] = 158.94653; - atomic_mass_map[611590000] = 158.939286502; - atomic_mass_map[621590000] = 158.933217226; - atomic_mass_map[631590000] = 158.929100067; - atomic_mass_map[641590000] = 158.926396969; - atomic_mass_map[651590000] = 158.92535471; - atomic_mass_map[661590000] = 158.925746958; - atomic_mass_map[671590000] = 158.927719703; - atomic_mass_map[681590000] = 158.93069181; - atomic_mass_map[691590000] = 158.934975; - atomic_mass_map[701590000] = 158.940054623; - atomic_mass_map[711590000] = 158.946635615; - atomic_mass_map[721590000] = 158.953995669; - atomic_mass_map[731590000] = 158.963022556; - atomic_mass_map[741590000] = 158.972638; - atomic_mass_map[751590000] = 158.984179; - atomic_mass_map[601600000] = 159.9494; - atomic_mass_map[611600000] = 159.9431; - atomic_mass_map[621600000] = 159.935335311; - atomic_mass_map[631600000] = 159.931850939; - atomic_mass_map[641600000] = 159.927062411; - atomic_mass_map[651600000] = 159.927175556; - atomic_mass_map[661600000] = 159.925204646; - atomic_mass_map[671600000] = 159.928736606; - atomic_mass_map[681600000] = 159.92907713; - atomic_mass_map[691600000] = 159.935263106; - atomic_mass_map[701600000] = 159.937557406; - atomic_mass_map[711600000] = 159.946033; - atomic_mass_map[721600000] = 159.950690749; - atomic_mass_map[731600000] = 159.96148751; - atomic_mass_map[741600000] = 159.968462584; - atomic_mass_map[751600000] = 159.981823; - atomic_mass_map[601610000] = 160.95428; - atomic_mass_map[611610000] = 160.94607; - atomic_mass_map[621610000] = 160.93916017; - atomic_mass_map[631610000] = 160.933664091; - atomic_mass_map[641610000] = 160.929677476; - atomic_mass_map[651610000] = 160.927577825; - atomic_mass_map[661610000] = 160.926940492; - atomic_mass_map[671610000] = 160.927861547; - atomic_mass_map[681610000] = 160.930004599; - atomic_mass_map[691610000] = 160.933549; - atomic_mass_map[701610000] = 160.937907138; - atomic_mass_map[711610000] = 160.943572; - atomic_mass_map[721610000] = 160.95027837; - atomic_mass_map[731610000] = 160.958452265; - atomic_mass_map[741610000] = 160.967197; - atomic_mass_map[751610000] = 160.977572951; - atomic_mass_map[761610000] = 160.989029; - atomic_mass_map[611620000] = 161.95022; - atomic_mass_map[621620000] = 161.94146; - atomic_mass_map[631620000] = 161.936988761; - atomic_mass_map[641620000] = 161.930993017; - atomic_mass_map[651620000] = 161.92949536; - atomic_mass_map[661620000] = 161.926805573; - atomic_mass_map[671620000] = 161.929102274; - atomic_mass_map[681620000] = 161.928788364; - atomic_mass_map[691620000] = 161.934002277; - atomic_mass_map[701620000] = 161.935773604; - atomic_mass_map[711620000] = 161.943282776; - atomic_mass_map[721620000] = 161.947214837; - atomic_mass_map[731620000] = 161.957294083; - atomic_mass_map[741620000] = 161.963499142; - atomic_mass_map[751620000] = 161.975844; - atomic_mass_map[761620000] = 161.984431; - atomic_mass_map[611630000] = 162.95357; - atomic_mass_map[621630000] = 162.94555; - atomic_mass_map[631630000] = 162.939195675; - atomic_mass_map[641630000] = 162.934176855; - atomic_mass_map[651630000] = 162.930654659; - atomic_mass_map[661630000] = 162.928738284; - atomic_mass_map[671630000] = 162.928741027; - atomic_mass_map[681630000] = 162.930040797; - atomic_mass_map[691630000] = 162.932659172; - atomic_mass_map[701630000] = 162.936339632; - atomic_mass_map[711630000] = 162.941179; - atomic_mass_map[721630000] = 162.947112946; - atomic_mass_map[731630000] = 162.95433711; - atomic_mass_map[741630000] = 162.962524342; - atomic_mass_map[751630000] = 162.97207986; - atomic_mass_map[761630000] = 162.98241; - atomic_mass_map[621640000] = 163.94836; - atomic_mass_map[631640000] = 163.942744; - atomic_mass_map[641640000] = 163.93583; - atomic_mass_map[651640000] = 163.933357961; - atomic_mass_map[661640000] = 163.929181874; - atomic_mass_map[671640000] = 163.930240273; - atomic_mass_map[681640000] = 163.929208791; - atomic_mass_map[691640000] = 163.933543614; - atomic_mass_map[701640000] = 163.934494934; - atomic_mass_map[711640000] = 163.941339; - atomic_mass_map[721640000] = 163.944370845; - atomic_mass_map[731640000] = 163.953534; - atomic_mass_map[741640000] = 163.958960683; - atomic_mass_map[751640000] = 163.97045287; - atomic_mass_map[761640000] = 163.978021712; - atomic_mass_map[771640000] = 163.991909; - atomic_mass_map[621650000] = 164.95297; - atomic_mass_map[631650000] = 164.945587; - atomic_mass_map[641650000] = 164.93936; - atomic_mass_map[651650000] = 164.93498; - atomic_mass_map[661650000] = 164.931710456; - atomic_mass_map[671650000] = 164.930328835; - atomic_mass_map[681650000] = 164.930734496; - atomic_mass_map[691650000] = 164.93244314; - atomic_mass_map[701650000] = 164.935270241; - atomic_mass_map[711650000] = 164.939406758; - atomic_mass_map[721650000] = 164.944567; - atomic_mass_map[731650000] = 164.950780572; - atomic_mass_map[741650000] = 164.958280788; - atomic_mass_map[751650000] = 164.96710266; - atomic_mass_map[761650000] = 164.976602; - atomic_mass_map[771650000] = 164.987501; - atomic_mass_map[631660000] = 165.94962; - atomic_mass_map[641660000] = 165.94146; - atomic_mass_map[651660000] = 165.937859521; - atomic_mass_map[661660000] = 165.932813863; - atomic_mass_map[671660000] = 165.932290927; - atomic_mass_map[681660000] = 165.93029953; - atomic_mass_map[691660000] = 165.9335606; - atomic_mass_map[701660000] = 165.933874749; - atomic_mass_map[711660000] = 165.939859; - atomic_mass_map[721660000] = 165.94218; - atomic_mass_map[731660000] = 165.950512; - atomic_mass_map[741660000] = 165.95503121; - atomic_mass_map[751660000] = 165.965760821; - atomic_mass_map[761660000] = 165.972692476; - atomic_mass_map[771660000] = 165.985664; - atomic_mass_map[781660000] = 165.994855; - atomic_mass_map[631670000] = 166.95289; - atomic_mass_map[641670000] = 166.94545; - atomic_mass_map[651670000] = 166.93996; - atomic_mass_map[661670000] = 166.935661379; - atomic_mass_map[671670000] = 166.93313855; - atomic_mass_map[681670000] = 166.932054617; - atomic_mass_map[691670000] = 166.932856192; - atomic_mass_map[701670000] = 166.934952988; - atomic_mass_map[711670000] = 166.93827; - atomic_mass_map[721670000] = 166.9426; - atomic_mass_map[731670000] = 166.948093; - atomic_mass_map[741670000] = 166.95480456; - atomic_mass_map[751670000] = 166.962595; - atomic_mass_map[761670000] = 166.971548768; - atomic_mass_map[771670000] = 166.981666315; - atomic_mass_map[781670000] = 166.992695; - atomic_mass_map[641680000] = 167.94808; - atomic_mass_map[651680000] = 167.9434; - atomic_mass_map[661680000] = 167.937133273; - atomic_mass_map[671680000] = 167.935522173; - atomic_mass_map[681680000] = 167.932376688; - atomic_mass_map[691680000] = 167.934177409; - atomic_mass_map[701680000] = 167.933889602; - atomic_mass_map[711680000] = 167.938735635; - atomic_mass_map[721680000] = 167.940568; - atomic_mass_map[731680000] = 167.948047; - atomic_mass_map[741680000] = 167.951805537; - atomic_mass_map[751680000] = 167.961572608; - atomic_mass_map[761680000] = 167.967807751; - atomic_mass_map[771680000] = 167.979906642; - atomic_mass_map[781680000] = 167.988128665; - atomic_mass_map[641690000] = 168.9526; - atomic_mass_map[651690000] = 168.94597; - atomic_mass_map[661690000] = 168.940313531; - atomic_mass_map[671690000] = 168.936878189; - atomic_mass_map[681690000] = 168.93459685; - atomic_mass_map[691690000] = 168.934217889; - atomic_mass_map[701690000] = 168.935182512; - atomic_mass_map[711690000] = 168.937644149; - atomic_mass_map[721690000] = 168.941259; - atomic_mass_map[731690000] = 168.946011; - atomic_mass_map[741690000] = 168.951778845; - atomic_mass_map[751690000] = 168.958766063; - atomic_mass_map[761690000] = 168.967017574; - atomic_mass_map[771690000] = 168.976298488; - atomic_mass_map[781690000] = 168.986567; - atomic_mass_map[791690000] = 168.99808; - atomic_mass_map[651700000] = 169.94984; - atomic_mass_map[661700000] = 169.94239; - atomic_mass_map[671700000] = 169.939624846; - atomic_mass_map[681700000] = 169.93547023; - atomic_mass_map[691700000] = 169.935806032; - atomic_mass_map[701700000] = 169.934766376; - atomic_mass_map[711700000] = 169.938478365; - atomic_mass_map[721700000] = 169.939609; - atomic_mass_map[731700000] = 169.946175; - atomic_mass_map[741700000] = 169.949231588; - atomic_mass_map[751700000] = 169.958220071; - atomic_mass_map[761700000] = 169.963578454; - atomic_mass_map[771700000] = 169.974922; - atomic_mass_map[781700000] = 169.982496345; - atomic_mass_map[791700000] = 169.995972; - atomic_mass_map[651710000] = 170.95273; - atomic_mass_map[661710000] = 170.94612; - atomic_mass_map[671710000] = 170.941471022; - atomic_mass_map[681710000] = 170.938035681; - atomic_mass_map[691710000] = 170.936433871; - atomic_mass_map[701710000] = 170.936330208; - atomic_mass_map[711710000] = 170.93791696; - atomic_mass_map[721710000] = 170.940492; - atomic_mass_map[731710000] = 170.944476; - atomic_mass_map[741710000] = 170.949451; - atomic_mass_map[751710000] = 170.955716; - atomic_mass_map[761710000] = 170.963173969; - atomic_mass_map[771710000] = 170.971640252; - atomic_mass_map[781710000] = 170.981245248; - atomic_mass_map[791710000] = 170.991875791; - atomic_mass_map[801710000] = 171.003529; - atomic_mass_map[661720000] = 171.94846; - atomic_mass_map[671720000] = 171.94473; - atomic_mass_map[681720000] = 171.939361858; - atomic_mass_map[691720000] = 171.938405521; - atomic_mass_map[701720000] = 171.936385872; - atomic_mass_map[711720000] = 171.939089103; - atomic_mass_map[721720000] = 171.939449716; - atomic_mass_map[731720000] = 171.944895; - atomic_mass_map[741720000] = 171.947292; - atomic_mass_map[751720000] = 171.955419665; - atomic_mass_map[761720000] = 171.960017317; - atomic_mass_map[771720000] = 171.970607036; - atomic_mass_map[781720000] = 171.977350921; - atomic_mass_map[791720000] = 171.989942284; - atomic_mass_map[801720000] = 171.998808967; - atomic_mass_map[661730000] = 172.95283; - atomic_mass_map[671730000] = 172.94702; - atomic_mass_map[681730000] = 172.9424; - atomic_mass_map[691730000] = 172.939608371; - atomic_mass_map[701730000] = 172.938215136; - atomic_mass_map[711730000] = 172.938934029; - atomic_mass_map[721730000] = 172.940513; - atomic_mass_map[731730000] = 172.94375; - atomic_mass_map[741730000] = 172.947689; - atomic_mass_map[751730000] = 172.953243; - atomic_mass_map[761730000] = 172.959808465; - atomic_mass_map[771730000] = 172.967505636; - atomic_mass_map[781730000] = 172.976443058; - atomic_mass_map[791730000] = 172.986240924; - atomic_mass_map[801730000] = 172.997091; - atomic_mass_map[671740000] = 173.95095; - atomic_mass_map[681740000] = 173.94423; - atomic_mass_map[691740000] = 173.942172953; - atomic_mass_map[701740000] = 173.938866437; - atomic_mass_map[711740000] = 173.940340854; - atomic_mass_map[721740000] = 173.940046141; - atomic_mass_map[731740000] = 173.944454; - atomic_mass_map[741740000] = 173.946079; - atomic_mass_map[751740000] = 173.953115; - atomic_mass_map[761740000] = 173.957063507; - atomic_mass_map[771740000] = 173.966861045; - atomic_mass_map[781740000] = 173.972819528; - atomic_mass_map[791740000] = 173.984717; - atomic_mass_map[801740000] = 173.992864748; - atomic_mass_map[671750000] = 174.95362; - atomic_mass_map[681750000] = 174.94777; - atomic_mass_map[691750000] = 174.9438412; - atomic_mass_map[701750000] = 174.941280797; - atomic_mass_map[711750000] = 174.940775191; - atomic_mass_map[721750000] = 174.941509187; - atomic_mass_map[731750000] = 174.943737; - atomic_mass_map[741750000] = 174.946717; - atomic_mass_map[751750000] = 174.951381; - atomic_mass_map[761750000] = 174.956945313; - atomic_mass_map[771750000] = 174.964149589; - atomic_mass_map[781750000] = 174.972409721; - atomic_mass_map[791750000] = 174.981303712; - atomic_mass_map[801750000] = 174.991440747; - atomic_mass_map[681760000] = 175.94994; - atomic_mass_map[691760000] = 175.946999449; - atomic_mass_map[701760000] = 175.942576447; - atomic_mass_map[711760000] = 175.94268968; - atomic_mass_map[721760000] = 175.941407628; - atomic_mass_map[731760000] = 175.944857; - atomic_mass_map[741760000] = 175.945634; - atomic_mass_map[751760000] = 175.951623; - atomic_mass_map[761760000] = 175.954806; - atomic_mass_map[771760000] = 175.963650389; - atomic_mass_map[781760000] = 175.968938362; - atomic_mass_map[791760000] = 175.980250432; - atomic_mass_map[801760000] = 175.987360863; - atomic_mass_map[811760000] = 176.000624028; - atomic_mass_map[681770000] = 176.95399; - atomic_mass_map[691770000] = 176.94904; - atomic_mass_map[701770000] = 176.945265586; - atomic_mass_map[711770000] = 176.943761525; - atomic_mass_map[721770000] = 176.943227717; - atomic_mass_map[731770000] = 176.944479469; - atomic_mass_map[741770000] = 176.946643; - atomic_mass_map[751770000] = 176.950328; - atomic_mass_map[761770000] = 176.954965628; - atomic_mass_map[771770000] = 176.9613015; - atomic_mass_map[781770000] = 176.968469537; - atomic_mass_map[791770000] = 176.976870439; - atomic_mass_map[801770000] = 176.986277319; - atomic_mass_map[811770000] = 176.996430829; - atomic_mass_map[691780000] = 177.95264; - atomic_mass_map[701780000] = 177.946651444; - atomic_mass_map[711780000] = 177.945958018; - atomic_mass_map[721780000] = 177.943705833; - atomic_mass_map[731780000] = 177.945678; - atomic_mass_map[741780000] = 177.945883303; - atomic_mass_map[751780000] = 177.950989; - atomic_mass_map[761780000] = 177.953253627; - atomic_mass_map[771780000] = 177.961082; - atomic_mass_map[781780000] = 177.965649523; - atomic_mass_map[791780000] = 177.97603192; - atomic_mass_map[801780000] = 177.982483769; - atomic_mass_map[811780000] = 177.994854; - atomic_mass_map[821780000] = 178.003831243; - atomic_mass_map[691790000] = 178.95534; - atomic_mass_map[701790000] = 178.95004; - atomic_mass_map[711790000] = 178.947330935; - atomic_mass_map[721790000] = 178.945823212; - atomic_mass_map[731790000] = 178.945936555; - atomic_mass_map[741790000] = 178.947077043; - atomic_mass_map[751790000] = 178.94998913; - atomic_mass_map[761790000] = 178.953816881; - atomic_mass_map[771790000] = 178.959120178; - atomic_mass_map[781790000] = 178.965358953; - atomic_mass_map[791790000] = 178.973173654; - atomic_mass_map[801790000] = 178.981831329; - atomic_mass_map[811790000] = 178.991110696; - atomic_mass_map[821790000] = 179.002201112; - atomic_mass_map[701800000] = 179.95212; - atomic_mass_map[711800000] = 179.94988825; - atomic_mass_map[721800000] = 179.946557042; - atomic_mass_map[731800000] = 179.947464832; - atomic_mass_map[741800000] = 179.946710805; - atomic_mass_map[751800000] = 179.950791568; - atomic_mass_map[761800000] = 179.952375485; - atomic_mass_map[771800000] = 179.959229446; - atomic_mass_map[781800000] = 179.963031955; - atomic_mass_map[791800000] = 179.972523397; - atomic_mass_map[801800000] = 179.978260335; - atomic_mass_map[811800000] = 179.990056524; - atomic_mass_map[821800000] = 179.997928286; - atomic_mass_map[701810000] = 180.95589; - atomic_mass_map[711810000] = 180.951908; - atomic_mass_map[721810000] = 180.949108338; - atomic_mass_map[731810000] = 180.947995769; - atomic_mass_map[741810000] = 180.948197783; - atomic_mass_map[751810000] = 180.950057673; - atomic_mass_map[761810000] = 180.953247188; - atomic_mass_map[771810000] = 180.957625456; - atomic_mass_map[781810000] = 180.963097588; - atomic_mass_map[791810000] = 180.970079047; - atomic_mass_map[801810000] = 180.977819371; - atomic_mass_map[811810000] = 180.986259979; - atomic_mass_map[821810000] = 180.99665331; - atomic_mass_map[711820000] = 181.95504; - atomic_mass_map[721820000] = 181.950561185; - atomic_mass_map[731820000] = 181.950151853; - atomic_mass_map[741820000] = 181.948203945; - atomic_mass_map[751820000] = 181.951209869; - atomic_mass_map[761820000] = 181.952110187; - atomic_mass_map[771820000] = 181.958076296; - atomic_mass_map[781820000] = 181.961171823; - atomic_mass_map[791820000] = 181.969617874; - atomic_mass_map[801820000] = 181.974689351; - atomic_mass_map[811820000] = 181.985713159; - atomic_mass_map[821820000] = 181.992672466; - atomic_mass_map[711830000] = 182.957363; - atomic_mass_map[721830000] = 182.953530444; - atomic_mass_map[731830000] = 182.95137262; - atomic_mass_map[741830000] = 182.950222748; - atomic_mass_map[751830000] = 182.950819638; - atomic_mass_map[761830000] = 182.953124719; - atomic_mass_map[771830000] = 182.956839968; - atomic_mass_map[781830000] = 182.961596804; - atomic_mass_map[791830000] = 182.967590635; - atomic_mass_map[801830000] = 182.974444783; - atomic_mass_map[811830000] = 182.982192839; - atomic_mass_map[821830000] = 182.991872098; - atomic_mass_map[711840000] = 183.96091; - atomic_mass_map[721840000] = 183.955446243; - atomic_mass_map[731840000] = 183.954007694; - atomic_mass_map[741840000] = 183.950930916; - atomic_mass_map[751840000] = 183.952522809; - atomic_mass_map[761840000] = 183.952488536; - atomic_mass_map[771840000] = 183.957476; - atomic_mass_map[781840000] = 183.959915113; - atomic_mass_map[791840000] = 183.967451524; - atomic_mass_map[801840000] = 183.971713528; - atomic_mass_map[811840000] = 183.981885851; - atomic_mass_map[821840000] = 183.988135701; - atomic_mass_map[831840000] = 184.001274756; - atomic_mass_map[711850000] = 184.96362; - atomic_mass_map[721850000] = 184.958862; - atomic_mass_map[731850000] = 184.955559084; - atomic_mass_map[741850000] = 184.953418974; - atomic_mass_map[751850000] = 184.952954486; - atomic_mass_map[761850000] = 184.954041741; - atomic_mass_map[771850000] = 184.956698; - atomic_mass_map[781850000] = 184.960613659; - atomic_mass_map[791850000] = 184.965789569; - atomic_mass_map[801850000] = 184.971899388; - atomic_mass_map[811850000] = 184.97878905; - atomic_mass_map[821850000] = 184.987610004; - atomic_mass_map[831850000] = 184.9976; - atomic_mass_map[721860000] = 185.960897; - atomic_mass_map[731860000] = 185.958550667; - atomic_mass_map[741860000] = 185.954362771; - atomic_mass_map[751860000] = 185.954985595; - atomic_mass_map[761860000] = 185.953835044; - atomic_mass_map[771860000] = 185.957944153; - atomic_mass_map[781860000] = 185.959350812; - atomic_mass_map[791860000] = 185.965952703; - atomic_mass_map[801860000] = 185.969362272; - atomic_mass_map[811860000] = 185.978650841; - atomic_mass_map[821860000] = 185.984238331; - atomic_mass_map[831860000] = 185.996643681; - atomic_mass_map[841860000] = 186.004393241; - atomic_mass_map[721870000] = 186.96477; - atomic_mass_map[731870000] = 186.960386; - atomic_mass_map[741870000] = 186.957158841; - atomic_mass_map[751870000] = 186.955750071; - atomic_mass_map[761870000] = 186.955747422; - atomic_mass_map[771870000] = 186.957542; - atomic_mass_map[781870000] = 186.960616976; - atomic_mass_map[791870000] = 186.964543155; - atomic_mass_map[801870000] = 186.969814428; - atomic_mass_map[811870000] = 186.975906348; - atomic_mass_map[821870000] = 186.983910895; - atomic_mass_map[831870000] = 186.993147184; - atomic_mass_map[841870000] = 187.003041054; - atomic_mass_map[721880000] = 187.96685; - atomic_mass_map[731880000] = 187.963916; - atomic_mass_map[741880000] = 187.958486177; - atomic_mass_map[751880000] = 187.95811151; - atomic_mass_map[761880000] = 187.955835174; - atomic_mass_map[771880000] = 187.958828095; - atomic_mass_map[781880000] = 187.959388889; - atomic_mass_map[791880000] = 187.965349392; - atomic_mass_map[801880000] = 187.967566887; - atomic_mass_map[811880000] = 187.976020886; - atomic_mass_map[821880000] = 187.980874815; - atomic_mass_map[831880000] = 187.992286943; - atomic_mass_map[841880000] = 187.999415569; - atomic_mass_map[721890000] = 188.97084; - atomic_mass_map[731890000] = 188.96583; - atomic_mass_map[741890000] = 188.961763; - atomic_mass_map[751890000] = 188.95922602; - atomic_mass_map[761890000] = 188.958144162; - atomic_mass_map[771890000] = 188.958715028; - atomic_mass_map[781890000] = 188.960831282; - atomic_mass_map[791890000] = 188.963948286; - atomic_mass_map[801890000] = 188.968194927; - atomic_mass_map[811890000] = 188.973588471; - atomic_mass_map[821890000] = 188.980807; - atomic_mass_map[831890000] = 188.989194984; - atomic_mass_map[841890000] = 188.998473429; - atomic_mass_map[731900000] = 189.96939; - atomic_mass_map[741900000] = 189.963090589; - atomic_mass_map[751900000] = 189.96174426; - atomic_mass_map[761900000] = 189.958443702; - atomic_mass_map[771900000] = 189.960541215; - atomic_mass_map[781900000] = 189.959929707; - atomic_mass_map[791900000] = 189.96469839; - atomic_mass_map[801900000] = 189.966322735; - atomic_mass_map[811900000] = 189.973828; - atomic_mass_map[821900000] = 189.978081999; - atomic_mass_map[831900000] = 189.988621561; - atomic_mass_map[841900000] = 189.995100569; - atomic_mass_map[731910000] = 190.97156; - atomic_mass_map[741910000] = 190.966531; - atomic_mass_map[751910000] = 190.963121551; - atomic_mass_map[761910000] = 190.960926361; - atomic_mass_map[771910000] = 190.960589293; - atomic_mass_map[781910000] = 190.961672912; - atomic_mass_map[791910000] = 190.963702248; - atomic_mass_map[801910000] = 190.96715716; - atomic_mass_map[811910000] = 190.971784199; - atomic_mass_map[821910000] = 190.978276; - atomic_mass_map[831910000] = 190.985786556; - atomic_mass_map[841910000] = 190.994558462; - atomic_mass_map[851910000] = 191.004147909; - atomic_mass_map[731920000] = 191.97514; - atomic_mass_map[741920000] = 191.96817; - atomic_mass_map[751920000] = 191.966088; - atomic_mass_map[761920000] = 191.961476998; - atomic_mass_map[771920000] = 191.962600247; - atomic_mass_map[781920000] = 191.961038746; - atomic_mass_map[791920000] = 191.964813694; - atomic_mass_map[801920000] = 191.965634702; - atomic_mass_map[811920000] = 191.972225; - atomic_mass_map[821920000] = 191.975775008; - atomic_mass_map[831920000] = 191.985469058; - atomic_mass_map[841920000] = 191.991335925; - atomic_mass_map[851920000] = 192.003151707; - atomic_mass_map[741930000] = 192.97178; - atomic_mass_map[751930000] = 192.967541; - atomic_mass_map[761930000] = 192.96414787; - atomic_mass_map[771930000] = 192.962921587; - atomic_mass_map[781930000] = 192.96298238; - atomic_mass_map[791930000] = 192.964137257; - atomic_mass_map[801930000] = 192.966652658; - atomic_mass_map[811930000] = 192.970501998; - atomic_mass_map[821930000] = 192.976173234; - atomic_mass_map[831930000] = 192.982959813; - atomic_mass_map[841930000] = 192.991025678; - atomic_mass_map[851930000] = 192.999927418; - atomic_mass_map[861930000] = 193.009707979; - atomic_mass_map[741940000] = 193.97367; - atomic_mass_map[751940000] = 193.97076; - atomic_mass_map[761940000] = 193.96517724; - atomic_mass_map[771940000] = 193.965073536; - atomic_mass_map[781940000] = 193.96268085; - atomic_mass_map[791940000] = 193.965417754; - atomic_mass_map[801940000] = 193.965449112; - atomic_mass_map[811940000] = 193.971081412; - atomic_mass_map[821940000] = 193.97401225; - atomic_mass_map[831940000] = 193.982785; - atomic_mass_map[841940000] = 193.988186101; - atomic_mass_map[851940000] = 193.999236139; - atomic_mass_map[861940000] = 194.006144389; - atomic_mass_map[751950000] = 194.97254; - atomic_mass_map[761950000] = 194.968318; - atomic_mass_map[771950000] = 194.96597473; - atomic_mass_map[781950000] = 194.964791719; - atomic_mass_map[791950000] = 194.965035225; - atomic_mass_map[801950000] = 194.96672054; - atomic_mass_map[811950000] = 194.969774268; - atomic_mass_map[821950000] = 194.974542922; - atomic_mass_map[831950000] = 194.980648781; - atomic_mass_map[841950000] = 194.988125532; - atomic_mass_map[851950000] = 194.996268546; - atomic_mass_map[861950000] = 195.005421673; - atomic_mass_map[751960000] = 195.9758; - atomic_mass_map[761960000] = 195.969641463; - atomic_mass_map[771960000] = 195.968397112; - atomic_mass_map[781960000] = 195.964952091; - atomic_mass_map[791960000] = 195.966569908; - atomic_mass_map[801960000] = 195.96583256; - atomic_mass_map[811960000] = 195.970481193; - atomic_mass_map[821960000] = 195.972774233; - atomic_mass_map[831960000] = 195.980666509; - atomic_mass_map[841960000] = 195.985525902; - atomic_mass_map[851960000] = 195.995799619; - atomic_mass_map[861960000] = 196.002115998; - atomic_mass_map[751970000] = 196.97799; - atomic_mass_map[761970000] = 196.97283; - atomic_mass_map[771970000] = 196.969655415; - atomic_mass_map[781970000] = 196.967340687; - atomic_mass_map[791970000] = 196.966568786; - atomic_mass_map[801970000] = 196.967212847; - atomic_mass_map[811970000] = 196.96957589; - atomic_mass_map[821970000] = 196.973431166; - atomic_mass_map[831970000] = 196.978865099; - atomic_mass_map[841970000] = 196.985659522; - atomic_mass_map[851970000] = 196.993189187; - atomic_mass_map[861970000] = 197.00158462; - atomic_mass_map[751980000] = 197.9816; - atomic_mass_map[761980000] = 197.97441; - atomic_mass_map[771980000] = 197.97228; - atomic_mass_map[781980000] = 197.96789492; - atomic_mass_map[791980000] = 197.96824242; - atomic_mass_map[801980000] = 197.966768602; - atomic_mass_map[811980000] = 197.970483065; - atomic_mass_map[821980000] = 197.972034077; - atomic_mass_map[831980000] = 197.979206; - atomic_mass_map[841980000] = 197.983389132; - atomic_mass_map[851980000] = 197.992784; - atomic_mass_map[861980000] = 197.998679156; - atomic_mass_map[761990000] = 198.97801; - atomic_mass_map[771990000] = 198.973805301; - atomic_mass_map[781990000] = 198.970595224; - atomic_mass_map[791990000] = 198.968765282; - atomic_mass_map[801990000] = 198.968280643; - atomic_mass_map[811990000] = 198.969877; - atomic_mass_map[821990000] = 198.97291268; - atomic_mass_map[831990000] = 198.97767301; - atomic_mass_map[841990000] = 198.983667115; - atomic_mass_map[851990000] = 198.990527654; - atomic_mass_map[861990000] = 198.998389856; - atomic_mass_map[871990000] = 199.007258594; - atomic_mass_map[762000000] = 199.97984; - atomic_mass_map[772000000] = 199.9768; - atomic_mass_map[782000000] = 199.971442807; - atomic_mass_map[792000000] = 199.970756456; - atomic_mass_map[802000000] = 199.96832659; - atomic_mass_map[812000000] = 199.970963258; - atomic_mass_map[822000000] = 199.971818893; - atomic_mass_map[832000000] = 199.978131179; - atomic_mass_map[842000000] = 199.98179879; - atomic_mass_map[852000000] = 199.990351015; - atomic_mass_map[862000000] = 199.995690431; - atomic_mass_map[872000000] = 200.006586003; - atomic_mass_map[762010000] = 200.98364; - atomic_mass_map[772010000] = 200.97864; - atomic_mass_map[782010000] = 200.974513112; - atomic_mass_map[792010000] = 200.971657484; - atomic_mass_map[802010000] = 200.970302839; - atomic_mass_map[812010000] = 200.970822212; - atomic_mass_map[822010000] = 200.972882917; - atomic_mass_map[832010000] = 200.977010416; - atomic_mass_map[842010000] = 200.982259806; - atomic_mass_map[852010000] = 200.988417147; - atomic_mass_map[862010000] = 200.99562801; - atomic_mass_map[872010000] = 201.003866593; - atomic_mass_map[882010000] = 201.012712; - atomic_mass_map[762020000] = 201.98595; - atomic_mass_map[772020000] = 201.98199; - atomic_mass_map[782020000] = 201.975639; - atomic_mass_map[792020000] = 201.973856; - atomic_mass_map[802020000] = 201.9706434; - atomic_mass_map[812020000] = 201.972102441; - atomic_mass_map[822020000] = 201.972152026; - atomic_mass_map[832020000] = 201.977733861; - atomic_mass_map[842020000] = 201.980757657; - atomic_mass_map[852020000] = 201.988630302; - atomic_mass_map[862020000] = 201.993264277; - atomic_mass_map[872020000] = 202.00332; - atomic_mass_map[882020000] = 202.009759744; - atomic_mass_map[772030000] = 202.98423; - atomic_mass_map[782030000] = 202.97893; - atomic_mass_map[792030000] = 202.975154446; - atomic_mass_map[802030000] = 202.972872837; - atomic_mass_map[812030000] = 202.972344593; - atomic_mass_map[822030000] = 202.973391126; - atomic_mass_map[832030000] = 202.976892779; - atomic_mass_map[842030000] = 202.981416133; - atomic_mass_map[852030000] = 202.98694299; - atomic_mass_map[862030000] = 202.993387741; - atomic_mass_map[872030000] = 203.000940729; - atomic_mass_map[882030000] = 203.009304274; - atomic_mass_map[772040000] = 203.9896; - atomic_mass_map[782040000] = 203.98076; - atomic_mass_map[792040000] = 203.977831; - atomic_mass_map[802040000] = 203.973493981; - atomic_mass_map[812040000] = 203.9738639; - atomic_mass_map[822040000] = 203.973043981; - atomic_mass_map[832040000] = 203.977836062; - atomic_mass_map[842040000] = 203.980310339; - atomic_mass_map[852040000] = 203.987251198; - atomic_mass_map[862040000] = 203.991429922; - atomic_mass_map[872040000] = 204.000652059; - atomic_mass_map[882040000] = 204.006491866; - atomic_mass_map[782050000] = 204.98608; - atomic_mass_map[792050000] = 204.97985; - atomic_mass_map[802050000] = 204.976073417; - atomic_mass_map[812050000] = 204.974427801; - atomic_mass_map[822050000] = 204.974482157; - atomic_mass_map[832050000] = 204.977386694; - atomic_mass_map[842050000] = 204.981203091; - atomic_mass_map[852050000] = 204.986075861; - atomic_mass_map[862050000] = 204.99171884; - atomic_mass_map[872050000] = 204.998593858; - atomic_mass_map[882050000] = 205.006268245; - atomic_mass_map[782060000] = 205.98966; - atomic_mass_map[792060000] = 205.98474; - atomic_mass_map[802060000] = 205.977514401; - atomic_mass_map[812060000] = 205.976110589; - atomic_mass_map[822060000] = 205.974465683; - atomic_mass_map[832060000] = 205.978499317; - atomic_mass_map[842060000] = 205.980473991; - atomic_mass_map[852060000] = 205.986656933; - atomic_mass_map[862060000] = 205.990214219; - atomic_mass_map[872060000] = 205.998666132; - atomic_mass_map[882060000] = 206.003828053; - atomic_mass_map[892060000] = 206.014452; - atomic_mass_map[792070000] = 206.9884; - atomic_mass_map[802070000] = 206.9823; - atomic_mass_map[812070000] = 206.977419712; - atomic_mass_map[822070000] = 206.975897297; - atomic_mass_map[832070000] = 206.978471022; - atomic_mass_map[842070000] = 206.981593762; - atomic_mass_map[852070000] = 206.985800332; - atomic_mass_map[862070000] = 206.990730254; - atomic_mass_map[872070000] = 206.996946478; - atomic_mass_map[882070000] = 207.003799159; - atomic_mass_map[892070000] = 207.01196583; - atomic_mass_map[792080000] = 207.99345; - atomic_mass_map[802080000] = 207.985759; - atomic_mass_map[812080000] = 207.982019001; - atomic_mass_map[822080000] = 207.976652481; - atomic_mass_map[832080000] = 207.97974253; - atomic_mass_map[842080000] = 207.981246092; - atomic_mass_map[852080000] = 207.986613302; - atomic_mass_map[862080000] = 207.989634687; - atomic_mass_map[872080000] = 207.997138132; - atomic_mass_map[882080000] = 208.001841122; - atomic_mass_map[892080000] = 208.011550406; - atomic_mass_map[902080000] = 208.017900275; - atomic_mass_map[792090000] = 208.99735; - atomic_mass_map[802090000] = 208.99072; - atomic_mass_map[812090000] = 208.985359353; - atomic_mass_map[822090000] = 208.981090461; - atomic_mass_map[832090000] = 208.980399068; - atomic_mass_map[842090000] = 208.982430836; - atomic_mass_map[852090000] = 208.986170215; - atomic_mass_map[862090000] = 208.99041451; - atomic_mass_map[872090000] = 208.995954932; - atomic_mass_map[882090000] = 209.001990455; - atomic_mass_map[892090000] = 209.009494762; - atomic_mass_map[902090000] = 209.017752974; - atomic_mass_map[792100000] = 210.0025; - atomic_mass_map[802100000] = 209.99424; - atomic_mass_map[812100000] = 209.990073958; - atomic_mass_map[822100000] = 209.984188861; - atomic_mass_map[832100000] = 209.984120705; - atomic_mass_map[842100000] = 209.982874076; - atomic_mass_map[852100000] = 209.987147898; - atomic_mass_map[862100000] = 209.989689107; - atomic_mass_map[872100000] = 209.996422409; - atomic_mass_map[882100000] = 210.000494169; - atomic_mass_map[892100000] = 210.009436052; - atomic_mass_map[902100000] = 210.015093642; - atomic_mass_map[802110000] = 210.99933; - atomic_mass_map[812110000] = 210.993475; - atomic_mass_map[822110000] = 210.988737125; - atomic_mass_map[832110000] = 210.987269741; - atomic_mass_map[842110000] = 210.986653562; - atomic_mass_map[852110000] = 210.987496614; - atomic_mass_map[862110000] = 210.99060111; - atomic_mass_map[872110000] = 210.995555723; - atomic_mass_map[882110000] = 211.000893214; - atomic_mass_map[892110000] = 211.007731899; - atomic_mass_map[902110000] = 211.014929468; - atomic_mass_map[802120000] = 212.00296; - atomic_mass_map[812120000] = 211.998335; - atomic_mass_map[822120000] = 211.991897703; - atomic_mass_map[832120000] = 211.991286026; - atomic_mass_map[842120000] = 211.988868376; - atomic_mass_map[852120000] = 211.990737688; - atomic_mass_map[862120000] = 211.990703919; - atomic_mass_map[872120000] = 211.996225652; - atomic_mass_map[882120000] = 211.999786715; - atomic_mass_map[892120000] = 212.007813171; - atomic_mass_map[902120000] = 212.012987595; - atomic_mass_map[912120000] = 212.023202993; - atomic_mass_map[802130000] = 213.00823; - atomic_mass_map[812130000] = 213.001915; - atomic_mass_map[822130000] = 212.996562894; - atomic_mass_map[832130000] = 212.994385067; - atomic_mass_map[842130000] = 212.992857623; - atomic_mass_map[852130000] = 212.992936978; - atomic_mass_map[862130000] = 212.993883069; - atomic_mass_map[872130000] = 212.996186041; - atomic_mass_map[882130000] = 213.000384258; - atomic_mass_map[892130000] = 213.00660902; - atomic_mass_map[902130000] = 213.013009223; - atomic_mass_map[912130000] = 213.021109239; - atomic_mass_map[802140000] = 214.012; - atomic_mass_map[812140000] = 214.00694; - atomic_mass_map[822140000] = 213.999805917; - atomic_mass_map[832140000] = 213.998711926; - atomic_mass_map[842140000] = 213.995201683; - atomic_mass_map[852140000] = 213.996372066; - atomic_mass_map[862140000] = 213.995362956; - atomic_mass_map[872140000] = 213.998971333; - atomic_mass_map[882140000] = 214.000099727; - atomic_mass_map[892140000] = 214.006918488; - atomic_mass_map[902140000] = 214.011500159; - atomic_mass_map[912140000] = 214.020918483; - atomic_mass_map[802150000] = 215.0174; - atomic_mass_map[812150000] = 215.01064; - atomic_mass_map[822150000] = 215.004741; - atomic_mass_map[832150000] = 215.001769823; - atomic_mass_map[842150000] = 214.999420146; - atomic_mass_map[852150000] = 214.998652849; - atomic_mass_map[862150000] = 214.99874589; - atomic_mass_map[872150000] = 215.000341838; - atomic_mass_map[882150000] = 215.00272042; - atomic_mass_map[892150000] = 215.006474511; - atomic_mass_map[902150000] = 215.011724774; - atomic_mass_map[912150000] = 215.019182929; - atomic_mass_map[802160000] = 216.02132; - atomic_mass_map[812160000] = 216.0158; - atomic_mass_map[822160000] = 216.00803; - atomic_mass_map[832160000] = 216.006305989; - atomic_mass_map[842160000] = 216.001915186; - atomic_mass_map[852160000] = 216.002423555; - atomic_mass_map[862160000] = 216.000271859; - atomic_mass_map[872160000] = 216.003189865; - atomic_mass_map[882160000] = 216.003533423; - atomic_mass_map[892160000] = 216.008743482; - atomic_mass_map[902160000] = 216.011056007; - atomic_mass_map[912160000] = 216.019108913; - atomic_mass_map[812170000] = 217.01966; - atomic_mass_map[822170000] = 217.01314; - atomic_mass_map[832170000] = 217.009372; - atomic_mass_map[842170000] = 217.006318159; - atomic_mass_map[852170000] = 217.004719222; - atomic_mass_map[862170000] = 217.003928018; - atomic_mass_map[872170000] = 217.004632282; - atomic_mass_map[882170000] = 217.006320726; - atomic_mass_map[892170000] = 217.009343872; - atomic_mass_map[902170000] = 217.013116701; - atomic_mass_map[912170000] = 217.018325363; - atomic_mass_map[922170000] = 217.024661; - atomic_mass_map[812180000] = 218.02479; - atomic_mass_map[822180000] = 218.01659; - atomic_mass_map[832180000] = 218.014188; - atomic_mass_map[842180000] = 218.008973546; - atomic_mass_map[852180000] = 218.008694723; - atomic_mass_map[862180000] = 218.005601586; - atomic_mass_map[872180000] = 218.007578653; - atomic_mass_map[882180000] = 218.007140631; - atomic_mass_map[892180000] = 218.01164164; - atomic_mass_map[902180000] = 218.013276331; - atomic_mass_map[912180000] = 218.020058579; - atomic_mass_map[922180000] = 218.023523472; - atomic_mass_map[822190000] = 219.02177; - atomic_mass_map[832190000] = 219.01748; - atomic_mass_map[842190000] = 219.013614; - atomic_mass_map[852190000] = 219.011161848; - atomic_mass_map[862190000] = 219.009480361; - atomic_mass_map[872190000] = 219.009252427; - atomic_mass_map[882190000] = 219.010085484; - atomic_mass_map[892190000] = 219.01242073; - atomic_mass_map[902190000] = 219.015537481; - atomic_mass_map[912190000] = 219.019904029; - atomic_mass_map[922190000] = 219.02499913; - atomic_mass_map[932190000] = 219.03143; - atomic_mass_map[822200000] = 220.02541; - atomic_mass_map[832200000] = 220.02235; - atomic_mass_map[842200000] = 220.016386; - atomic_mass_map[852200000] = 220.015433; - atomic_mass_map[862200000] = 220.01139413; - atomic_mass_map[872200000] = 220.012327702; - atomic_mass_map[882200000] = 220.011025872; - atomic_mass_map[892200000] = 220.014754854; - atomic_mass_map[902200000] = 220.015748148; - atomic_mass_map[912200000] = 220.021705; - atomic_mass_map[922200000] = 220.02462; - atomic_mass_map[932200000] = 220.03254; - atomic_mass_map[832210000] = 221.02587; - atomic_mass_map[842210000] = 221.021228; - atomic_mass_map[852210000] = 221.018017; - atomic_mass_map[862210000] = 221.015537076; - atomic_mass_map[872210000] = 221.014255163; - atomic_mass_map[882210000] = 221.01391768; - atomic_mass_map[892210000] = 221.015591579; - atomic_mass_map[902210000] = 221.018184072; - atomic_mass_map[912210000] = 221.021874941; - atomic_mass_map[922210000] = 221.026284; - atomic_mass_map[932210000] = 221.03204; - atomic_mass_map[832220000] = 222.03078; - atomic_mass_map[842220000] = 222.02414; - atomic_mass_map[852220000] = 222.022494; - atomic_mass_map[862220000] = 222.017578246; - atomic_mass_map[872220000] = 222.017552192; - atomic_mass_map[882220000] = 222.015374846; - atomic_mass_map[892220000] = 222.017844181; - atomic_mass_map[902220000] = 222.018468521; - atomic_mass_map[912220000] = 222.023784; - atomic_mass_map[922220000] = 222.026003; - atomic_mass_map[932220000] = 222.0333; - atomic_mass_map[832230000] = 223.0345; - atomic_mass_map[842230000] = 223.02907; - atomic_mass_map[852230000] = 223.025151; - atomic_mass_map[862230000] = 223.021889286; - atomic_mass_map[872230000] = 223.019736013; - atomic_mass_map[882230000] = 223.018502327; - atomic_mass_map[892230000] = 223.019137747; - atomic_mass_map[902230000] = 223.020811853; - atomic_mass_map[912230000] = 223.023962614; - atomic_mass_map[922230000] = 223.027739187; - atomic_mass_map[932230000] = 223.03285; - atomic_mass_map[832240000] = 224.03947; - atomic_mass_map[842240000] = 224.03211; - atomic_mass_map[852240000] = 224.029749; - atomic_mass_map[862240000] = 224.024095805; - atomic_mass_map[872240000] = 224.023398; - atomic_mass_map[882240000] = 224.020211968; - atomic_mass_map[892240000] = 224.021723163; - atomic_mass_map[902240000] = 224.021464382; - atomic_mass_map[912240000] = 224.025617614; - atomic_mass_map[922240000] = 224.027605163; - atomic_mass_map[932240000] = 224.03422; - atomic_mass_map[842250000] = 225.03707; - atomic_mass_map[852250000] = 225.03263; - atomic_mass_map[862250000] = 225.028485574; - atomic_mass_map[872250000] = 225.025572682; - atomic_mass_map[882250000] = 225.023611857; - atomic_mass_map[892250000] = 225.023229987; - atomic_mass_map[902250000] = 225.023951363; - atomic_mass_map[912250000] = 225.026131009; - atomic_mass_map[922250000] = 225.02939135; - atomic_mass_map[932250000] = 225.033910892; - atomic_mass_map[842260000] = 226.04031; - atomic_mass_map[852260000] = 226.03716; - atomic_mass_map[862260000] = 226.030861382; - atomic_mass_map[872260000] = 226.029566; - atomic_mass_map[882260000] = 226.02541033; - atomic_mass_map[892260000] = 226.026098383; - atomic_mass_map[902260000] = 226.024903383; - atomic_mass_map[912260000] = 226.027948082; - atomic_mass_map[922260000] = 226.029339101; - atomic_mass_map[932260000] = 226.035188; - atomic_mass_map[842270000] = 227.04539; - atomic_mass_map[852270000] = 227.04024; - atomic_mass_map[862270000] = 227.035304396; - atomic_mass_map[872270000] = 227.031869; - atomic_mass_map[882270000] = 227.029178349; - atomic_mass_map[892270000] = 227.027752283; - atomic_mass_map[902270000] = 227.027704227; - atomic_mass_map[912270000] = 227.028805351; - atomic_mass_map[922270000] = 227.031156773; - atomic_mass_map[932270000] = 227.034957129; - atomic_mass_map[852280000] = 228.04475; - atomic_mass_map[862280000] = 228.037835418; - atomic_mass_map[872280000] = 228.035823175; - atomic_mass_map[882280000] = 228.031070728; - atomic_mass_map[892280000] = 228.031021547; - atomic_mass_map[902280000] = 228.028741272; - atomic_mass_map[912280000] = 228.031051673; - atomic_mass_map[922280000] = 228.031371492; - atomic_mass_map[932280000] = 228.036066866; - atomic_mass_map[942280000] = 228.038732491; - atomic_mass_map[852290000] = 229.04812; - atomic_mass_map[862290000] = 229.042257277; - atomic_mass_map[872290000] = 229.038298; - atomic_mass_map[882290000] = 229.034942262; - atomic_mass_map[892290000] = 229.032955884; - atomic_mass_map[902290000] = 229.031762713; - atomic_mass_map[912290000] = 229.032097236; - atomic_mass_map[922290000] = 229.03350628; - atomic_mass_map[932290000] = 229.036264139; - atomic_mass_map[942290000] = 229.040143614; - atomic_mass_map[862300000] = 230.04514; - atomic_mass_map[872300000] = 230.042416349; - atomic_mass_map[882300000] = 230.037054781; - atomic_mass_map[892300000] = 230.036327; - atomic_mass_map[902300000] = 230.03313413; - atomic_mass_map[912300000] = 230.034541047; - atomic_mass_map[922300000] = 230.033940096; - atomic_mass_map[932300000] = 230.037827926; - atomic_mass_map[942300000] = 230.039650283; - atomic_mass_map[952300000] = 230.04609; - atomic_mass_map[862310000] = 231.04987; - atomic_mass_map[872310000] = 231.045158; - atomic_mass_map[882310000] = 231.041027087; - atomic_mass_map[892310000] = 231.038393; - atomic_mass_map[902310000] = 231.036304628; - atomic_mass_map[912310000] = 231.035884243; - atomic_mass_map[922310000] = 231.036293861; - atomic_mass_map[932310000] = 231.038245364; - atomic_mass_map[942310000] = 231.041101511; - atomic_mass_map[952310000] = 231.04556; - atomic_mass_map[872320000] = 232.049368; - atomic_mass_map[882320000] = 232.04347527; - atomic_mass_map[892320000] = 232.042034; - atomic_mass_map[902320000] = 232.03805576; - atomic_mass_map[912320000] = 232.038591737; - atomic_mass_map[922320000] = 232.037156297; - atomic_mass_map[932320000] = 232.040109; - atomic_mass_map[942320000] = 232.041184582; - atomic_mass_map[952320000] = 232.04645; - atomic_mass_map[962320000] = 232.049817; - atomic_mass_map[872330000] = 233.05264; - atomic_mass_map[882330000] = 233.047582; - atomic_mass_map[892330000] = 233.044346; - atomic_mass_map[902330000] = 233.041582278; - atomic_mass_map[912330000] = 233.040247222; - atomic_mass_map[922330000] = 233.039635525; - atomic_mass_map[932330000] = 233.040740989; - atomic_mass_map[942330000] = 233.042997716; - atomic_mass_map[952330000] = 233.046445; - atomic_mass_map[962330000] = 233.050770001; - atomic_mass_map[882340000] = 234.050342; - atomic_mass_map[892340000] = 234.048139; - atomic_mass_map[902340000] = 234.043601407; - atomic_mass_map[912340000] = 234.043307161; - atomic_mass_map[922340000] = 234.040952306; - atomic_mass_map[932340000] = 234.042895256; - atomic_mass_map[942340000] = 234.043317387; - atomic_mass_map[952340000] = 234.047731; - atomic_mass_map[962340000] = 234.050160237; - atomic_mass_map[972340000] = 234.057267; - atomic_mass_map[882350000] = 235.05497; - atomic_mass_map[892350000] = 235.05084; - atomic_mass_map[902350000] = 235.047255; - atomic_mass_map[912350000] = 235.045399; - atomic_mass_map[922350000] = 235.043930131; - atomic_mass_map[932350000] = 235.044063487; - atomic_mass_map[942350000] = 235.045286206; - atomic_mass_map[952350000] = 235.047908245; - atomic_mass_map[962350000] = 235.051542; - atomic_mass_map[972350000] = 235.05658; - atomic_mass_map[892360000] = 236.054988; - atomic_mass_map[902360000] = 236.049657; - atomic_mass_map[912360000] = 236.048668; - atomic_mass_map[922360000] = 236.04556821; - atomic_mass_map[932360000] = 236.046569744; - atomic_mass_map[942360000] = 236.046058109; - atomic_mass_map[952360000] = 236.049428; - atomic_mass_map[962360000] = 236.051374477; - atomic_mass_map[972360000] = 236.05748; - atomic_mass_map[892370000] = 237.05827; - atomic_mass_map[902370000] = 237.053629; - atomic_mass_map[912370000] = 237.051023; - atomic_mass_map[922370000] = 237.048730378; - atomic_mass_map[932370000] = 237.048173649; - atomic_mass_map[942370000] = 237.04840983; - atomic_mass_map[952370000] = 237.049996; - atomic_mass_map[962370000] = 237.052869294; - atomic_mass_map[972370000] = 237.0571; - atomic_mass_map[982370000] = 237.062197789; - atomic_mass_map[902380000] = 238.056496; - atomic_mass_map[912380000] = 238.054637; - atomic_mass_map[922380000] = 238.050788423; - atomic_mass_map[932380000] = 238.050946611; - atomic_mass_map[942380000] = 238.049560111; - atomic_mass_map[952380000] = 238.051984542; - atomic_mass_map[962380000] = 238.05308142; - atomic_mass_map[972380000] = 238.058204; - atomic_mass_map[982380000] = 238.06149; - atomic_mass_map[902390000] = 239.06077; - atomic_mass_map[912390000] = 239.05726; - atomic_mass_map[922390000] = 239.054293475; - atomic_mass_map[932390000] = 239.052939241; - atomic_mass_map[942390000] = 239.052163591; - atomic_mass_map[952390000] = 239.053024699; - atomic_mass_map[962390000] = 239.054910117; - atomic_mass_map[972390000] = 239.058241; - atomic_mass_map[982390000] = 239.062529; - atomic_mass_map[992390000] = 239.06823; - atomic_mass_map[912400000] = 240.06098; - atomic_mass_map[922400000] = 240.056593356; - atomic_mass_map[932400000] = 240.056165427; - atomic_mass_map[942400000] = 240.05381375; - atomic_mass_map[952400000] = 240.055300384; - atomic_mass_map[962400000] = 240.055529681; - atomic_mass_map[972400000] = 240.059759; - atomic_mass_map[982400000] = 240.062255728; - atomic_mass_map[992400000] = 240.06892; - atomic_mass_map[912410000] = 241.06408; - atomic_mass_map[922410000] = 241.06033; - atomic_mass_map[932410000] = 241.058252636; - atomic_mass_map[942410000] = 241.056851661; - atomic_mass_map[952410000] = 241.056829349; - atomic_mass_map[962410000] = 241.05765317; - atomic_mass_map[972410000] = 241.060155; - atomic_mass_map[982410000] = 241.06369; - atomic_mass_map[992410000] = 241.06856; - atomic_mass_map[1002410000] = 241.07421; - atomic_mass_map[922420000] = 242.062932; - atomic_mass_map[932420000] = 242.061641379; - atomic_mass_map[942420000] = 242.058742809; - atomic_mass_map[952420000] = 242.059549364; - atomic_mass_map[962420000] = 242.058836039; - atomic_mass_map[972420000] = 242.061982; - atomic_mass_map[982420000] = 242.063754274; - atomic_mass_map[992420000] = 242.069567; - atomic_mass_map[1002420000] = 242.07343; - atomic_mass_map[922430000] = 243.06699; - atomic_mass_map[932430000] = 243.06428; - atomic_mass_map[942430000] = 243.062003595; - atomic_mass_map[952430000] = 243.061381302; - atomic_mass_map[962430000] = 243.061389325; - atomic_mass_map[972430000] = 243.063007791; - atomic_mass_map[982430000] = 243.065477; - atomic_mass_map[992430000] = 243.06951; - atomic_mass_map[1002430000] = 243.074465; - atomic_mass_map[932440000] = 244.06785; - atomic_mass_map[942440000] = 244.06420526; - atomic_mass_map[952440000] = 244.064285052; - atomic_mass_map[962440000] = 244.062752783; - atomic_mass_map[972440000] = 244.065180979; - atomic_mass_map[982440000] = 244.066000801; - atomic_mass_map[992440000] = 244.070883; - atomic_mass_map[1002440000] = 244.074038; - atomic_mass_map[932450000] = 245.0708; - atomic_mass_map[942450000] = 245.067826058; - atomic_mass_map[952450000] = 245.066454834; - atomic_mass_map[962450000] = 245.065491454; - atomic_mass_map[972450000] = 245.066361821; - atomic_mass_map[982450000] = 245.068048677; - atomic_mass_map[992450000] = 245.071249; - atomic_mass_map[1002450000] = 245.075349; - atomic_mass_map[1012450000] = 245.080808; - atomic_mass_map[942460000] = 246.070205458; - atomic_mass_map[952460000] = 246.069775; - atomic_mass_map[962460000] = 246.067223841; - atomic_mass_map[972460000] = 246.068673126; - atomic_mass_map[982460000] = 246.068805531; - atomic_mass_map[992460000] = 246.072896; - atomic_mass_map[1002460000] = 246.07535047; - atomic_mass_map[1012460000] = 246.081713; - atomic_mass_map[942470000] = 247.07419; - atomic_mass_map[952470000] = 247.072093; - atomic_mass_map[962470000] = 247.070354131; - atomic_mass_map[972470000] = 247.070307302; - atomic_mass_map[982470000] = 247.070965463; - atomic_mass_map[992470000] = 247.073622017; - atomic_mass_map[1002470000] = 247.076945; - atomic_mass_map[1012470000] = 247.081522; - atomic_mass_map[952480000] = 248.075753; - atomic_mass_map[962480000] = 248.072349862; - atomic_mass_map[972480000] = 248.073088; - atomic_mass_map[982480000] = 248.072185066; - atomic_mass_map[992480000] = 248.075471; - atomic_mass_map[1002480000] = 248.077186463; - atomic_mass_map[1012480000] = 248.082823; - atomic_mass_map[1022480000] = 248.08655; - atomic_mass_map[952490000] = 249.07848; - atomic_mass_map[962490000] = 249.075954767; - atomic_mass_map[972490000] = 249.074987676; - atomic_mass_map[982490000] = 249.074853903; - atomic_mass_map[992490000] = 249.076411; - atomic_mass_map[1002490000] = 249.07892755; - atomic_mass_map[1012490000] = 249.082914; - atomic_mass_map[1022490000] = 249.087797; - atomic_mass_map[962500000] = 250.078358313; - atomic_mass_map[972500000] = 250.078316698; - atomic_mass_map[982500000] = 250.076406244; - atomic_mass_map[992500000] = 250.078612; - atomic_mass_map[1002500000] = 250.079521034; - atomic_mass_map[1012500000] = 250.084415; - atomic_mass_map[1022500000] = 250.087562; - atomic_mass_map[962510000] = 251.082286441; - atomic_mass_map[972510000] = 251.080762009; - atomic_mass_map[982510000] = 251.079588625; - atomic_mass_map[992510000] = 251.079993586; - atomic_mass_map[1002510000] = 251.08153989; - atomic_mass_map[1012510000] = 251.084774376; - atomic_mass_map[1022510000] = 251.088944; - atomic_mass_map[1032510000] = 251.09418; - atomic_mass_map[962520000] = 252.08487; - atomic_mass_map[972520000] = 252.084311; - atomic_mass_map[982520000] = 252.081627199; - atomic_mass_map[992520000] = 252.082979865; - atomic_mass_map[1002520000] = 252.08246706; - atomic_mass_map[1012520000] = 252.086432; - atomic_mass_map[1022520000] = 252.088966908; - atomic_mass_map[1032520000] = 252.095264; - atomic_mass_map[972530000] = 253.08688; - atomic_mass_map[982530000] = 253.085134499; - atomic_mass_map[992530000] = 253.084825715; - atomic_mass_map[1002530000] = 253.085184571; - atomic_mass_map[1012530000] = 253.087144; - atomic_mass_map[1022530000] = 253.090564103; - atomic_mass_map[1032530000] = 253.095091; - atomic_mass_map[1042530000] = 253.100438; - atomic_mass_map[972540000] = 254.0906; - atomic_mass_map[982540000] = 254.087324263; - atomic_mass_map[992540000] = 254.088022199; - atomic_mass_map[1002540000] = 254.086854397; - atomic_mass_map[1012540000] = 254.089592; - atomic_mass_map[1022540000] = 254.090955661; - atomic_mass_map[1032540000] = 254.096483; - atomic_mass_map[1042540000] = 254.100053; - atomic_mass_map[982550000] = 255.091048; - atomic_mass_map[992550000] = 255.090274958; - atomic_mass_map[1002550000] = 255.089964038; - atomic_mass_map[1012550000] = 255.091084149; - atomic_mass_map[1022550000] = 255.093191404; - atomic_mass_map[1032550000] = 255.096562404; - atomic_mass_map[1042550000] = 255.101268; - atomic_mass_map[1052550000] = 255.107068; - atomic_mass_map[982560000] = 256.093442; - atomic_mass_map[992560000] = 256.093599; - atomic_mass_map[1002560000] = 256.091774469; - atomic_mass_map[1012560000] = 256.093889; - atomic_mass_map[1022560000] = 256.09428287; - atomic_mass_map[1032560000] = 256.09849403; - atomic_mass_map[1042560000] = 256.101152218; - atomic_mass_map[1052560000] = 256.10789; - atomic_mass_map[992570000] = 257.095979; - atomic_mass_map[1002570000] = 257.095106078; - atomic_mass_map[1012570000] = 257.095542387; - atomic_mass_map[1022570000] = 257.09688783; - atomic_mass_map[1032570000] = 257.099418; - atomic_mass_map[1042570000] = 257.10291812; - atomic_mass_map[1052570000] = 257.107578; - atomic_mass_map[992580000] = 258.09952; - atomic_mass_map[1002580000] = 258.097077; - atomic_mass_map[1012580000] = 258.098431496; - atomic_mass_map[1022580000] = 258.098207; - atomic_mass_map[1032580000] = 258.101755; - atomic_mass_map[1042580000] = 258.103427679; - atomic_mass_map[1052580000] = 258.109285; - atomic_mass_map[1062580000] = 258.112983; - atomic_mass_map[1002590000] = 259.100597; - atomic_mass_map[1012590000] = 259.100511; - atomic_mass_map[1022590000] = 259.101032; - atomic_mass_map[1032590000] = 259.102902; - atomic_mass_map[1042590000] = 259.105596; - atomic_mass_map[1052590000] = 259.109491866; - atomic_mass_map[1062590000] = 259.114396; - atomic_mass_map[1002600000] = 260.102809; - atomic_mass_map[1012600000] = 260.103653; - atomic_mass_map[1022600000] = 260.102644; - atomic_mass_map[1032600000] = 260.105505; - atomic_mass_map[1042600000] = 260.106441; - atomic_mass_map[1052600000] = 260.111297; - atomic_mass_map[1062600000] = 260.114384105; - atomic_mass_map[1072600000] = 260.121659; - atomic_mass_map[1012610000] = 261.105828; - atomic_mass_map[1022610000] = 261.105697; - atomic_mass_map[1032610000] = 261.106884; - atomic_mass_map[1042610000] = 261.108773401; - atomic_mass_map[1052610000] = 261.111917; - atomic_mass_map[1062610000] = 261.115949461; - atomic_mass_map[1072610000] = 261.121455; - atomic_mass_map[1012620000] = 262.109101; - atomic_mass_map[1022620000] = 262.107464; - atomic_mass_map[1032620000] = 262.109612; - atomic_mass_map[1042620000] = 262.109925; - atomic_mass_map[1052620000] = 262.114072; - atomic_mass_map[1062620000] = 262.116336679; - atomic_mass_map[1072620000] = 262.122967; - atomic_mass_map[1022630000] = 263.110715; - atomic_mass_map[1032630000] = 263.111359; - atomic_mass_map[1042630000] = 263.112495; - atomic_mass_map[1052630000] = 263.11499; - atomic_mass_map[1062630000] = 263.118294; - atomic_mass_map[1072630000] = 263.122916; - atomic_mass_map[1082630000] = 263.128522; - atomic_mass_map[1022640000] = 264.112734; - atomic_mass_map[1032640000] = 264.114201; - atomic_mass_map[1042640000] = 264.113879; - atomic_mass_map[1052640000] = 264.117405; - atomic_mass_map[1062640000] = 264.118931; - atomic_mass_map[1072640000] = 264.124593; - atomic_mass_map[1082640000] = 264.128356917; - atomic_mass_map[1032650000] = 265.116193; - atomic_mass_map[1042650000] = 265.116684; - atomic_mass_map[1052650000] = 265.118613; - atomic_mass_map[1062650000] = 265.121093; - atomic_mass_map[1072650000] = 265.124914; - atomic_mass_map[1082650000] = 265.129792986; - atomic_mass_map[1092650000] = 265.135996; - atomic_mass_map[1032660000] = 266.119831; - atomic_mass_map[1042660000] = 266.118172; - atomic_mass_map[1052660000] = 266.121029; - atomic_mass_map[1062660000] = 266.121975; - atomic_mass_map[1072660000] = 266.126794; - atomic_mass_map[1082660000] = 266.1300464; - atomic_mass_map[1092660000] = 266.137374; - atomic_mass_map[1042670000] = 267.121789; - atomic_mass_map[1052670000] = 267.122465; - atomic_mass_map[1062670000] = 267.124357; - atomic_mass_map[1072670000] = 267.127501; - atomic_mass_map[1082670000] = 267.131673; - atomic_mass_map[1092670000] = 267.137189; - atomic_mass_map[1102670000] = 267.143768; - atomic_mass_map[1042680000] = 268.123968; - atomic_mass_map[1052680000] = 268.125671; - atomic_mass_map[1062680000] = 268.125392; - atomic_mass_map[1072680000] = 268.129692; - atomic_mass_map[1082680000] = 268.131865; - atomic_mass_map[1092680000] = 268.138649; - atomic_mass_map[1102680000] = 268.143478; - atomic_mass_map[1052690000] = 269.127911; - atomic_mass_map[1062690000] = 269.128627; - atomic_mass_map[1072690000] = 269.130416; - atomic_mass_map[1082690000] = 269.133753; - atomic_mass_map[1092690000] = 269.138822; - atomic_mass_map[1102690000] = 269.144752124; - atomic_mass_map[1052700000] = 270.131356; - atomic_mass_map[1062700000] = 270.130427; - atomic_mass_map[1072700000] = 270.133363; - atomic_mass_map[1082700000] = 270.13429; - atomic_mass_map[1092700000] = 270.140327; - atomic_mass_map[1102700000] = 270.144584153; - atomic_mass_map[1062710000] = 271.133933; - atomic_mass_map[1072710000] = 271.135256; - atomic_mass_map[1082710000] = 271.13717; - atomic_mass_map[1092710000] = 271.140744; - atomic_mass_map[1102710000] = 271.145946; - atomic_mass_map[1062720000] = 272.13589; - atomic_mass_map[1072720000] = 272.138264; - atomic_mass_map[1082720000] = 272.138495; - atomic_mass_map[1092720000] = 272.143406; - atomic_mass_map[1102720000] = 272.14602; - atomic_mass_map[1112720000] = 272.153273; - atomic_mass_map[1062730000] = 273.13958; - atomic_mass_map[1072730000] = 273.14024; - atomic_mass_map[1082730000] = 273.141679; - atomic_mass_map[1092730000] = 273.144399; - atomic_mass_map[1102730000] = 273.14856; - atomic_mass_map[1112730000] = 273.153127; - atomic_mass_map[1072740000] = 274.143548; - atomic_mass_map[1082740000] = 274.143304; - atomic_mass_map[1092740000] = 274.147245; - atomic_mass_map[1102740000] = 274.149411; - atomic_mass_map[1112740000] = 274.155253; - atomic_mass_map[1072750000] = 275.14567; - atomic_mass_map[1082750000] = 275.146668; - atomic_mass_map[1092750000] = 275.14882; - atomic_mass_map[1102750000] = 275.152033; - atomic_mass_map[1112750000] = 275.155939; - atomic_mass_map[1082760000] = 276.148455; - atomic_mass_map[1092760000] = 276.151594; - atomic_mass_map[1102760000] = 276.153025; - atomic_mass_map[1112760000] = 276.158334; - atomic_mass_map[1122760000] = 276.16141; - atomic_mass_map[1082770000] = 277.151899; - atomic_mass_map[1092770000] = 277.153268; - atomic_mass_map[1102770000] = 277.155914; - atomic_mass_map[1112770000] = 277.159069; - atomic_mass_map[1122770000] = 277.163641; - atomic_mass_map[1092780000] = 278.156307; - atomic_mass_map[1102780000] = 278.15704; - atomic_mass_map[1112780000] = 278.161493; - atomic_mass_map[1122780000] = 278.164156; - atomic_mass_map[1132780000] = 278.170578; - atomic_mass_map[1092790000] = 279.158075; - atomic_mass_map[1102790000] = 279.160097; - atomic_mass_map[1112790000] = 279.162722; - atomic_mass_map[1122790000] = 279.166542; - atomic_mass_map[1132790000] = 279.17095; - atomic_mass_map[1102800000] = 280.161311; - atomic_mass_map[1112800000] = 280.165138; - atomic_mass_map[1122800000] = 280.167147; - atomic_mass_map[1132800000] = 280.17293; - atomic_mass_map[1102810000] = 281.164511; - atomic_mass_map[1112810000] = 281.16636; - atomic_mass_map[1122810000] = 281.169746; - atomic_mass_map[1132810000] = 281.17348; - atomic_mass_map[1112820000] = 282.169119; - atomic_mass_map[1122820000] = 282.170496; - atomic_mass_map[1132820000] = 282.175672; - atomic_mass_map[1112830000] = 283.170544; - atomic_mass_map[1122830000] = 283.17327; - atomic_mass_map[1132830000] = 283.176571; - atomic_mass_map[1122840000] = 284.174156; - atomic_mass_map[1132840000] = 284.178727; - atomic_mass_map[1122850000] = 285.177117; - atomic_mass_map[1132850000] = 285.179727; - atomic_mass_map[1142850000] = 285.183643; - atomic_mass_map[1132860000] = 286.182208; - atomic_mass_map[1142860000] = 286.184235; - atomic_mass_map[1132870000] = 287.183389; - atomic_mass_map[1142870000] = 287.186783; - atomic_mass_map[1152870000] = 287.190704; - atomic_mass_map[1142880000] = 288.187572; - atomic_mass_map[1152880000] = 288.19274; - atomic_mass_map[1142890000] = 289.190419; - atomic_mass_map[1152890000] = 289.193627; - atomic_mass_map[1162890000] = 289.198162; - atomic_mass_map[1152900000] = 290.195975; - atomic_mass_map[1162900000] = 290.198638; - atomic_mass_map[1152910000] = 291.197071; - atomic_mass_map[1162910000] = 291.201077; - atomic_mass_map[1172910000] = 291.205535; - atomic_mass_map[1162920000] = 292.201742; - atomic_mass_map[1172920000] = 292.207463; - atomic_mass_map[1162930000] = 293.204487; - atomic_mass_map[1172930000] = 293.208236; - atomic_mass_map[1182930000] = 293.213562; - atomic_mass_map[1172940000] = 294.210462; - atomic_mass_map[1182940000] = 294.213921; - atomic_mass_map[1182950000] = 295.21624; -} - -void pyne::_insert_abund_map() { - natural_abund_map[10010000] = 99.9885; - natural_abund_map[10020000] = 0.0115; - natural_abund_map[20030000] = 0.000134; - natural_abund_map[20040000] = 99.999866; - natural_abund_map[30060000] = 7.59; - natural_abund_map[30070000] = 92.41; - natural_abund_map[40090000] = 100.0; - natural_abund_map[50100000] = 19.9; - natural_abund_map[50110000] = 80.1; - natural_abund_map[60120000] = 98.93; - natural_abund_map[60130000] = 1.07; - natural_abund_map[70140000] = 99.636; - natural_abund_map[70150000] = 0.364; - natural_abund_map[80160000] = 99.757; - natural_abund_map[80170000] = 0.038; - natural_abund_map[80180000] = 0.205; - natural_abund_map[90190000] = 100.0; - natural_abund_map[100200000] = 90.48; - natural_abund_map[100210000] = 0.27; - natural_abund_map[100220000] = 9.25; - natural_abund_map[110230000] = 100.0; - natural_abund_map[120240000] = 78.99; - natural_abund_map[120250000] = 10.00; - natural_abund_map[120260000] = 11.01; - natural_abund_map[130270000] = 100.0; - natural_abund_map[140280000] = 92.223; - natural_abund_map[140290000] = 4.685; - natural_abund_map[140300000] = 3.092; - natural_abund_map[150310000] = 100.0; - natural_abund_map[160320000] = 94.99; - natural_abund_map[160330000] = 0.75; - natural_abund_map[160340000] = 4.25; - natural_abund_map[160360000] = 0.01; - natural_abund_map[170350000] = 75.76; - natural_abund_map[170370000] = 24.24; - natural_abund_map[180360000] = 0.3336; - natural_abund_map[180380000] = 0.0629; - natural_abund_map[180400000] = 99.6035; - natural_abund_map[190390000] = 93.2581; - natural_abund_map[190400000] = 0.0117; - natural_abund_map[190410000] = 6.7302; - natural_abund_map[200400000] = 96.941; - natural_abund_map[200420000] = 0.647; - natural_abund_map[200430000] = 0.135; - natural_abund_map[200440000] = 2.086; - natural_abund_map[200460000] = 0.004; - natural_abund_map[200480000] = 0.187; - natural_abund_map[210450000] = 100.0; - natural_abund_map[220460000] = 8.25; - natural_abund_map[220470000] = 7.44; - natural_abund_map[220480000] = 73.72; - natural_abund_map[220490000] = 5.41; - natural_abund_map[220500000] = 5.18; - natural_abund_map[230500000] = 0.250; - natural_abund_map[230510000] = 99.750; - natural_abund_map[240500000] = 4.345; - natural_abund_map[240520000] = 83.789; - natural_abund_map[240530000] = 9.501; - natural_abund_map[240540000] = 2.365; - natural_abund_map[250550000] = 100.0; - natural_abund_map[260540000] = 5.845; - natural_abund_map[260560000] = 91.754; - natural_abund_map[260570000] = 2.119; - natural_abund_map[260580000] = 0.282; - natural_abund_map[270590000] = 100.0; - natural_abund_map[280580000] = 68.077; - natural_abund_map[280600000] = 26.223; - natural_abund_map[280610000] = 1.1399; - natural_abund_map[280620000] = 3.6346; - natural_abund_map[280640000] = 0.9255; - natural_abund_map[290630000] = 69.15; - natural_abund_map[290650000] = 30.85; - natural_abund_map[300640000] = 49.17; - natural_abund_map[300660000] = 27.73; - natural_abund_map[300670000] = 4.04; - natural_abund_map[300680000] = 18.45; - natural_abund_map[300700000] = 0.61; - natural_abund_map[310690000] = 60.108; - natural_abund_map[310710000] = 39.892; - natural_abund_map[320700000] = 20.57; - natural_abund_map[320720000] = 27.45; - natural_abund_map[320730000] = 7.75; - natural_abund_map[320740000] = 36.50; - natural_abund_map[320760000] = 7.73; - natural_abund_map[330750000] = 100.0; - natural_abund_map[340740000] = 0.89; - natural_abund_map[340760000] = 9.37; - natural_abund_map[340770000] = 7.63; - natural_abund_map[340780000] = 23.77; - natural_abund_map[340800000] = 49.61; - natural_abund_map[340820000] = 8.73; - natural_abund_map[350790000] = 50.69; - natural_abund_map[350810000] = 49.31; - natural_abund_map[360780000] = 0.355; - natural_abund_map[360800000] = 2.286; - natural_abund_map[360820000] = 11.593; - natural_abund_map[360830000] = 11.500; - natural_abund_map[360840000] = 56.987; - natural_abund_map[360860000] = 17.279; - natural_abund_map[370850000] = 72.17; - natural_abund_map[370870000] = 27.83; - natural_abund_map[380840000] = 0.56; - natural_abund_map[380860000] = 9.86; - natural_abund_map[380870000] = 7.00; - natural_abund_map[380880000] = 82.58; - natural_abund_map[390890000] = 100.0; - natural_abund_map[400900000] = 51.45; - natural_abund_map[400910000] = 11.22; - natural_abund_map[400920000] = 17.15; - natural_abund_map[400940000] = 17.38; - natural_abund_map[400960000] = 2.80; - natural_abund_map[410930000] = 100.0; - natural_abund_map[420920000] = 14.53; - natural_abund_map[420940000] = 9.15; - natural_abund_map[420950000] = 15.84; - natural_abund_map[420960000] = 16.67; - natural_abund_map[420970000] = 9.60; - natural_abund_map[420980000] = 24.39; - natural_abund_map[421000000] = 9.82; - natural_abund_map[440960000] = 5.54; - natural_abund_map[440980000] = 1.87; - natural_abund_map[440990000] = 12.76; - natural_abund_map[441000000] = 12.60; - natural_abund_map[441010000] = 17.06; - natural_abund_map[441020000] = 31.55; - natural_abund_map[441040000] = 18.62; - natural_abund_map[451030000] = 100.0; - natural_abund_map[461020000] = 1.02; - natural_abund_map[461040000] = 11.14; - natural_abund_map[461050000] = 22.33; - natural_abund_map[461060000] = 27.33; - natural_abund_map[461080000] = 26.46; - natural_abund_map[461100000] = 11.72; - natural_abund_map[471070000] = 51.839; - natural_abund_map[471090000] = 48.161; - natural_abund_map[481060000] = 1.25; - natural_abund_map[481080000] = 0.89; - natural_abund_map[481100000] = 12.49; - natural_abund_map[481110000] = 12.80; - natural_abund_map[481120000] = 24.13; - natural_abund_map[481130000] = 12.22; - natural_abund_map[481140000] = 28.73; - natural_abund_map[481160000] = 7.49; - natural_abund_map[491130000] = 4.29; - natural_abund_map[491150000] = 95.71; - natural_abund_map[501120000] = 0.97; - natural_abund_map[501140000] = 0.66; - natural_abund_map[501150000] = 0.34; - natural_abund_map[501160000] = 14.54; - natural_abund_map[501170000] = 7.68; - natural_abund_map[501180000] = 24.22; - natural_abund_map[501190000] = 8.59; - natural_abund_map[501200000] = 32.58; - natural_abund_map[501220000] = 4.63; - natural_abund_map[501240000] = 5.79; - natural_abund_map[511210000] = 57.21; - natural_abund_map[511230000] = 42.79; - natural_abund_map[521200000] = 0.09; - natural_abund_map[521220000] = 2.55; - natural_abund_map[521230000] = 0.89; - natural_abund_map[521240000] = 4.74; - natural_abund_map[521250000] = 7.07; - natural_abund_map[521260000] = 18.84; - natural_abund_map[521280000] = 31.74; - natural_abund_map[521300000] = 34.08; - natural_abund_map[531270000] = 100.0; - natural_abund_map[541240000] = 0.0952; - natural_abund_map[541260000] = 0.0890; - natural_abund_map[541280000] = 1.9102; - natural_abund_map[541290000] = 26.4006; - natural_abund_map[541300000] = 4.0710; - natural_abund_map[541310000] = 21.2324; - natural_abund_map[541320000] = 26.9086; - natural_abund_map[541340000] = 10.4357; - natural_abund_map[541360000] = 8.8573; - natural_abund_map[551330000] = 100.0; - natural_abund_map[561300000] = 0.106; - natural_abund_map[561320000] = 0.101; - natural_abund_map[561340000] = 2.417; - natural_abund_map[561350000] = 6.592; - natural_abund_map[561360000] = 7.854; - natural_abund_map[561370000] = 11.232; - natural_abund_map[561380000] = 71.698; - natural_abund_map[571380000] = 0.08881; - natural_abund_map[571390000] = 99.91119; - natural_abund_map[581360000] = 0.185; - natural_abund_map[581380000] = 0.251; - natural_abund_map[581400000] = 88.450; - natural_abund_map[581420000] = 11.114; - natural_abund_map[591410000] = 100.0; - natural_abund_map[601420000] = 27.152; - natural_abund_map[601430000] = 12.174; - natural_abund_map[601440000] = 23.798; - natural_abund_map[601450000] = 8.293; - natural_abund_map[601460000] = 17.189; - natural_abund_map[601480000] = 5.756; - natural_abund_map[601500000] = 5.638; - natural_abund_map[621440000] = 3.07; - natural_abund_map[621470000] = 14.99; - natural_abund_map[621480000] = 11.24; - natural_abund_map[621490000] = 13.82; - natural_abund_map[621500000] = 7.38; - natural_abund_map[621520000] = 26.75; - natural_abund_map[621540000] = 22.75; - natural_abund_map[631510000] = 47.81; - natural_abund_map[631530000] = 52.19; - natural_abund_map[641520000] = 0.20; - natural_abund_map[641540000] = 2.18; - natural_abund_map[641550000] = 14.80; - natural_abund_map[641560000] = 20.47; - natural_abund_map[641570000] = 15.65; - natural_abund_map[641580000] = 24.84; - natural_abund_map[641600000] = 21.86; - natural_abund_map[651590000] = 100.0; - natural_abund_map[661560000] = 0.056; - natural_abund_map[661580000] = 0.095; - natural_abund_map[661600000] = 2.329; - natural_abund_map[661610000] = 18.889; - natural_abund_map[661620000] = 25.475; - natural_abund_map[661630000] = 24.896; - natural_abund_map[661640000] = 28.260; - natural_abund_map[671650000] = 100.0; - natural_abund_map[681620000] = 0.139; - natural_abund_map[681640000] = 1.601; - natural_abund_map[681660000] = 33.503; - natural_abund_map[681670000] = 22.869; - natural_abund_map[681680000] = 26.978; - natural_abund_map[681700000] = 14.910; - natural_abund_map[691690000] = 100.0; - natural_abund_map[701680000] = 0.123; - natural_abund_map[701700000] = 2.982; - natural_abund_map[701710000] = 14.09; - natural_abund_map[701720000] = 21.68; - natural_abund_map[701730000] = 16.103; - natural_abund_map[701740000] = 32.026; - natural_abund_map[701760000] = 12.996; - natural_abund_map[711750000] = 97.401; - natural_abund_map[711760000] = 2.599; - natural_abund_map[721740000] = 0.16; - natural_abund_map[721760000] = 5.26; - natural_abund_map[721770000] = 18.60; - natural_abund_map[721780000] = 27.28; - natural_abund_map[721790000] = 13.62; - natural_abund_map[721800000] = 35.08; - natural_abund_map[731800000] = 0.01201; - natural_abund_map[731810000] = 99.98799; - natural_abund_map[741800000] = 0.12; - natural_abund_map[741820000] = 26.50; - natural_abund_map[741830000] = 14.31; - natural_abund_map[741840000] = 30.64; - natural_abund_map[741860000] = 28.43; - natural_abund_map[751850000] = 37.40; - natural_abund_map[751870000] = 62.60; - natural_abund_map[761840000] = 0.02; - natural_abund_map[761860000] = 1.59; - natural_abund_map[761870000] = 1.96; - natural_abund_map[761880000] = 13.24; - natural_abund_map[761890000] = 16.15; - natural_abund_map[761900000] = 26.26; - natural_abund_map[761920000] = 40.78; - natural_abund_map[771910000] = 37.3; - natural_abund_map[771930000] = 62.7; - natural_abund_map[781900000] = 0.012; - natural_abund_map[781920000] = 0.782; - natural_abund_map[781940000] = 32.86; - natural_abund_map[781950000] = 33.78; - natural_abund_map[781960000] = 25.21; - natural_abund_map[781980000] = 7.356; - natural_abund_map[791970000] = 100.0; - natural_abund_map[801960000] = 0.15; - natural_abund_map[801980000] = 9.97; - natural_abund_map[801990000] = 16.87; - natural_abund_map[802000000] = 23.10; - natural_abund_map[802010000] = 13.18; - natural_abund_map[802020000] = 29.86; - natural_abund_map[802040000] = 6.87; - natural_abund_map[812030000] = 29.52; - natural_abund_map[812050000] = 70.48; - natural_abund_map[822040000] = 1.4; - natural_abund_map[822060000] = 24.1; - natural_abund_map[822070000] = 22.1; - natural_abund_map[822080000] = 52.4; - natural_abund_map[832090000] = 100.0; - natural_abund_map[902320000] = 100.0; - natural_abund_map[912310000] = 100.0; - natural_abund_map[922340000] = 0.0054; - natural_abund_map[922350000] = 0.7204; - natural_abund_map[922380000] = 99.2742; -} diff --git a/src/atomic_data.h b/src/atomic_data.h deleted file mode 100644 index b6551be1f8..0000000000 --- a/src/atomic_data.h +++ /dev/null @@ -1,30 +0,0 @@ -/// \/file atomic_nuclear_data.h -/// \/author Andrew Davis (andrew.davis@wisc.edu) -/// -/// \/brief Impliments all the fundamental atomic & nuclear data data -#include - -namespace pyne -{ - /// main function to be called when you whish to load the nuclide data - /// into memory - void _load_atomic_mass_map_memory(); - /// function to create mapping from nuclides in id form - /// to their atomic masses - - void _insert_atomic_mass_map(); - - /// function to create mapping from nuclides in id form - /// to their natural abundances - void _insert_abund_map(); - - /// Mapping from nuclides in id form to their natural abundances - extern std::map natural_abund_map; - - /// Mapping from nuclides in id form to their atomic masses. - extern std::map atomic_mass_map; - - /// Mapping from nuclides in id form to the associated error in - /// abdundance - extern std::map atomic_mass_error_map; -} // namespace pyne From f2c9dd40ef859f4ddcd5b25e7da8b9c9b10e8147 Mon Sep 17 00:00:00 2001 From: Marissa Ramirez Zweiger Date: Fri, 15 Jan 2016 10:08:14 -0500 Subject: [PATCH 074/216] Fixed ufunc error. --- pyne/alara.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyne/alara.py b/pyne/alara.py index 4e251915e6..8885d40e7d 100644 --- a/pyne/alara.py +++ b/pyne/alara.py @@ -597,7 +597,7 @@ def _rat_apprx_14(A, t, n_0): n = 0*n_0 for j in range(7): - n += np.linalg.solve(A - theta[j] * np.identity(np.shape(A)[0]), alpha[j]*n_0) + n = n + np.linalg.solve(A - theta[j] * np.identity(np.shape(A)[0]), alpha[j]*n_0) n = 2*n.real n = n + alpha_0*n_0 @@ -642,7 +642,7 @@ def _rat_apprx_16(A, t, n_0): n = 0*n_0 for j in range(8): - n += np.linalg.solve(A - theta[j] * np.identity(np.shape(A)[0]), alpha[j]*n_0) + n = n + np.linalg.solve(A - theta[j] * np.identity(np.shape(A)[0]), alpha[j]*n_0) n = 2*n.real n = n + alpha_0*n_0 From 7e3ec3c0310e50e2f8e5fc766aa84a19f931d64c Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 15 Jan 2016 09:13:08 -0600 Subject: [PATCH 075/216] fixed the issue with the src path --- setup.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/setup.py b/setup.py index a392ce4d8e..941c391128 100755 --- a/setup.py +++ b/setup.py @@ -56,6 +56,9 @@ import numpy as np +# import src into pythonpath - needed to actually run decaygen/atomicgen +sys.path.append(os.getcwd()+'/src') + # Thanks to http://patorjk.com/software/taag/ # and http://www.chris.com/ascii/index.php?art=creatures/dragons # for ASCII art inspiriation From 24c3e8b5039e800178ea60d66adbf24cf2146b6f Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 15 Jan 2016 09:35:40 -0600 Subject: [PATCH 076/216] added last resort option for Conda based people --- setup.py | 6 + src/_atomic_data.cpp | 3666 ++++++++++++++++++++++++++++++++++++++++++ src/_atomic_data.h | 30 + 3 files changed, 3702 insertions(+) create mode 100644 src/_atomic_data.cpp create mode 100644 src/_atomic_data.h diff --git a/setup.py b/setup.py index 941c391128..434b36f7d9 100755 --- a/setup.py +++ b/setup.py @@ -211,6 +211,8 @@ def ensure_decay(): ATOMIC_H = os.path.join('src', 'atomic_data.h') ATOMIC_CPP = os.path.join('src', 'atomic_data.cpp') +ATOMIC_H_UNDER = os.path.join('src', 'atomic_data.h') +ATOMIC_CPP_UNDER = os.path.join('src', 'atomic_data.cpp') def generate_atomic(): with indir('src'): @@ -232,6 +234,10 @@ def ensure_atomic(): generated = generate_atomic() if generated: return + # last resort + if !os.path.isfile(ATOMIC_H) and !os.path.isfile(ATOMIC_CPP): + shutil.copy(ATOMIC_H_UNDER, ATOMIC_H) + shutil.copy(ATOMIC_CPP_UNDER, ATOMIC_CPP) def ensure_nuc_data(): import tempfile diff --git a/src/_atomic_data.cpp b/src/_atomic_data.cpp new file mode 100644 index 0000000000..37326877cb --- /dev/null +++ b/src/_atomic_data.cpp @@ -0,0 +1,3666 @@ +// Implements basic nuclear data functions. +#ifndef PYNE_IS_AMALGAMATED +#include "atomic_data.h" +#endif + +void pyne::_load_atomic_mass_map_memory() { + // header version of atomic weight table data + //see if the data table is already loaded + if(!atomic_mass_map.empty()) { + return; + } else { + _insert_atomic_mass_map(); + } + //see if the data table is already loaded + if(!natural_abund_map.empty()) { + return; + } else { + _insert_abund_map(); + } +} + +void pyne::_insert_atomic_mass_map() { + atomic_mass_map[10010000] = 1.00782503223; + atomic_mass_map[10020000] = 2.01410177812; + atomic_mass_map[10030000] = 3.01604927791; + atomic_mass_map[20030000] = 3.01602932008; + atomic_mass_map[30030000] = 3.030775; + atomic_mass_map[10040000] = 4.026431864; + atomic_mass_map[20040000] = 4.00260325413; + atomic_mass_map[30040000] = 4.027185559; + atomic_mass_map[10050000] = 5.035311489; + atomic_mass_map[20050000] = 5.012057224; + atomic_mass_map[30050000] = 5.0125378; + atomic_mass_map[40050000] = 5.03987; + atomic_mass_map[10060000] = 6.044955433; + atomic_mass_map[20060000] = 6.018885891; + atomic_mass_map[30060000] = 6.01512288742; + atomic_mass_map[40060000] = 6.019726411; + atomic_mass_map[50060000] = 6.0508; + atomic_mass_map[10070000] = 7.052749; + atomic_mass_map[20070000] = 7.027990654; + atomic_mass_map[30070000] = 7.01600343659; + atomic_mass_map[40070000] = 7.016928717; + atomic_mass_map[50070000] = 7.029712; + atomic_mass_map[20080000] = 8.03393439; + atomic_mass_map[30080000] = 8.022486246; + atomic_mass_map[40080000] = 8.005305102; + atomic_mass_map[50080000] = 8.024607326; + atomic_mass_map[60080000] = 8.037643042; + atomic_mass_map[20090000] = 9.043946494; + atomic_mass_map[30090000] = 9.026790191; + atomic_mass_map[40090000] = 9.012183065; + atomic_mass_map[50090000] = 9.013329649; + atomic_mass_map[60090000] = 9.031037204; + atomic_mass_map[20100000] = 10.052788655; + atomic_mass_map[30100000] = 10.035483453; + atomic_mass_map[40100000] = 10.013534695; + atomic_mass_map[50100000] = 10.012936949; + atomic_mass_map[60100000] = 10.016853307; + atomic_mass_map[70100000] = 10.04165363; + atomic_mass_map[30110000] = 11.043723581; + atomic_mass_map[40110000] = 11.021661081; + atomic_mass_map[50110000] = 11.009305355; + atomic_mass_map[60110000] = 11.011433563; + atomic_mass_map[70110000] = 11.026091034; + atomic_mass_map[30120000] = 12.052517322; + atomic_mass_map[40120000] = 12.026922082; + atomic_mass_map[50120000] = 12.014352658; + atomic_mass_map[60120000] = 12.0; + atomic_mass_map[70120000] = 12.018613187; + atomic_mass_map[80120000] = 12.034261836; + atomic_mass_map[30130000] = 13.062631523; + atomic_mass_map[40130000] = 13.036134506; + atomic_mass_map[50130000] = 13.017780166; + atomic_mass_map[60130000] = 13.0033548351; + atomic_mass_map[70130000] = 13.005738609; + atomic_mass_map[80130000] = 13.024815446; + atomic_mass_map[40140000] = 14.04289292; + atomic_mass_map[50140000] = 14.025404012; + atomic_mass_map[60140000] = 14.0032419884; + atomic_mass_map[70140000] = 14.0030740044; + atomic_mass_map[80140000] = 14.008596359; + atomic_mass_map[90140000] = 14.034315207; + atomic_mass_map[40150000] = 15.05342; + atomic_mass_map[50150000] = 15.03108768; + atomic_mass_map[60150000] = 15.010599256; + atomic_mass_map[70150000] = 15.0001088989; + atomic_mass_map[80150000] = 15.003065618; + atomic_mass_map[90150000] = 15.018042853; + atomic_mass_map[40160000] = 16.061672036; + atomic_mass_map[50160000] = 16.039841663; + atomic_mass_map[60160000] = 16.014701252; + atomic_mass_map[70160000] = 16.006101925; + atomic_mass_map[80160000] = 15.9949146196; + atomic_mass_map[90160000] = 16.011465725; + atomic_mass_map[100160000] = 16.025750197; + atomic_mass_map[50170000] = 17.046989906; + atomic_mass_map[60170000] = 17.02257747; + atomic_mass_map[70170000] = 17.008448873; + atomic_mass_map[80170000] = 16.9991317565; + atomic_mass_map[90170000] = 17.002095237; + atomic_mass_map[100170000] = 17.017713963; + atomic_mass_map[50180000] = 18.055660189; + atomic_mass_map[60180000] = 18.026750708; + atomic_mass_map[70180000] = 18.014077565; + atomic_mass_map[80180000] = 17.9991596129; + atomic_mass_map[90180000] = 18.000937325; + atomic_mass_map[100180000] = 18.005708703; + atomic_mass_map[110180000] = 18.026878252; + atomic_mass_map[50190000] = 19.0631; + atomic_mass_map[60190000] = 19.034796372; + atomic_mass_map[70190000] = 19.017021603; + atomic_mass_map[80190000] = 19.00357797; + atomic_mass_map[90190000] = 18.9984031627; + atomic_mass_map[100190000] = 19.001880907; + atomic_mass_map[110190000] = 19.013880272; + atomic_mass_map[120190000] = 19.034169186; + atomic_mass_map[50200000] = 20.07207; + atomic_mass_map[60200000] = 20.040319754; + atomic_mass_map[70200000] = 20.023365807; + atomic_mass_map[80200000] = 20.004075354; + atomic_mass_map[90200000] = 19.999981252; + atomic_mass_map[100200000] = 19.9924401762; + atomic_mass_map[110200000] = 20.007354426; + atomic_mass_map[120200000] = 20.018850004; + atomic_mass_map[50210000] = 21.08129; + atomic_mass_map[60210000] = 21.049; + atomic_mass_map[70210000] = 21.02710824; + atomic_mass_map[80210000] = 21.008654813; + atomic_mass_map[90210000] = 20.999948889; + atomic_mass_map[100210000] = 20.993846685; + atomic_mass_map[110210000] = 20.997654695; + atomic_mass_map[120210000] = 21.01171614; + atomic_mass_map[130210000] = 21.028975; + atomic_mass_map[60220000] = 22.057531496; + atomic_mass_map[70220000] = 22.034394934; + atomic_mass_map[80220000] = 22.009966057; + atomic_mass_map[90220000] = 22.002998813; + atomic_mass_map[100220000] = 21.991385114; + atomic_mass_map[110220000] = 21.994437411; + atomic_mass_map[120220000] = 21.999570648; + atomic_mass_map[130220000] = 22.01954; + atomic_mass_map[140220000] = 22.03579; + atomic_mass_map[60230000] = 23.06889; + atomic_mass_map[70230000] = 23.04114; + atomic_mass_map[80230000] = 23.015695922; + atomic_mass_map[90230000] = 23.003556696; + atomic_mass_map[100230000] = 22.994466905; + atomic_mass_map[110230000] = 22.989769282; + atomic_mass_map[120230000] = 22.994124208; + atomic_mass_map[130230000] = 23.007244351; + atomic_mass_map[140230000] = 23.02544; + atomic_mass_map[70240000] = 24.05039; + atomic_mass_map[80240000] = 24.019861; + atomic_mass_map[90240000] = 24.008115485; + atomic_mass_map[100240000] = 23.99361065; + atomic_mass_map[110240000] = 23.99096295; + atomic_mass_map[120240000] = 23.985041697; + atomic_mass_map[130240000] = 23.999948883; + atomic_mass_map[140240000] = 24.011534538; + atomic_mass_map[150240000] = 24.03577; + atomic_mass_map[70250000] = 25.0601; + atomic_mass_map[80250000] = 25.029358986; + atomic_mass_map[90250000] = 25.012199229; + atomic_mass_map[100250000] = 24.997788707; + atomic_mass_map[110250000] = 24.989953969; + atomic_mass_map[120250000] = 24.985836976; + atomic_mass_map[130250000] = 24.990428102; + atomic_mass_map[140250000] = 25.004108808; + atomic_mass_map[150250000] = 25.02119; + atomic_mass_map[80260000] = 26.03728745; + atomic_mass_map[90260000] = 26.020037768; + atomic_mass_map[100260000] = 26.000514705; + atomic_mass_map[110260000] = 25.992634649; + atomic_mass_map[120260000] = 25.982592968; + atomic_mass_map[130260000] = 25.986891904; + atomic_mass_map[140260000] = 25.992333845; + atomic_mass_map[150260000] = 26.01178; + atomic_mass_map[160260000] = 26.02907; + atomic_mass_map[80270000] = 27.04772; + atomic_mass_map[90270000] = 27.026441; + atomic_mass_map[100270000] = 27.007553268; + atomic_mass_map[110270000] = 26.994076531; + atomic_mass_map[120270000] = 26.984340624; + atomic_mass_map[130270000] = 26.981538531; + atomic_mass_map[140270000] = 26.986704811; + atomic_mass_map[150270000] = 26.999224406; + atomic_mass_map[160270000] = 27.01828; + atomic_mass_map[80280000] = 28.05591; + atomic_mass_map[90280000] = 28.035342095; + atomic_mass_map[100280000] = 28.012121998; + atomic_mass_map[110280000] = 27.998939; + atomic_mass_map[120280000] = 27.983876728; + atomic_mass_map[130280000] = 27.98191021; + atomic_mass_map[140280000] = 27.9769265347; + atomic_mass_map[150280000] = 27.992326585; + atomic_mass_map[160280000] = 28.004372766; + atomic_mass_map[170280000] = 28.02954; + atomic_mass_map[90290000] = 29.04254; + atomic_mass_map[100290000] = 29.019753; + atomic_mass_map[110290000] = 29.002877073; + atomic_mass_map[120290000] = 28.988617393; + atomic_mass_map[130290000] = 28.98045649; + atomic_mass_map[140290000] = 28.9764946649; + atomic_mass_map[150290000] = 28.981800794; + atomic_mass_map[160290000] = 28.996611456; + atomic_mass_map[170290000] = 29.01478; + atomic_mass_map[90300000] = 30.05165; + atomic_mass_map[100300000] = 30.024734; + atomic_mass_map[110300000] = 30.009097932; + atomic_mass_map[120300000] = 29.990462926; + atomic_mass_map[130300000] = 29.98296022; + atomic_mass_map[140300000] = 29.973770136; + atomic_mass_map[150300000] = 29.978313753; + atomic_mass_map[160300000] = 29.984907033; + atomic_mass_map[170300000] = 30.00477; + atomic_mass_map[180300000] = 30.02307; + atomic_mass_map[90310000] = 31.059709; + atomic_mass_map[100310000] = 31.033087; + atomic_mass_map[110310000] = 31.013162656; + atomic_mass_map[120310000] = 30.996648032; + atomic_mass_map[130310000] = 30.983945171; + atomic_mass_map[140310000] = 30.975363194; + atomic_mass_map[150310000] = 30.9737619984; + atomic_mass_map[160310000] = 30.979557007; + atomic_mass_map[170310000] = 30.992414203; + atomic_mass_map[180310000] = 31.012124; + atomic_mass_map[100320000] = 32.03972; + atomic_mass_map[110320000] = 32.020193; + atomic_mass_map[120320000] = 31.999110239; + atomic_mass_map[130320000] = 31.988085239; + atomic_mass_map[140320000] = 31.974151539; + atomic_mass_map[150320000] = 31.973907643; + atomic_mass_map[160320000] = 31.9720711744; + atomic_mass_map[170320000] = 31.985684637; + atomic_mass_map[180320000] = 31.997637826; + atomic_mass_map[190320000] = 32.02265; + atomic_mass_map[100330000] = 33.04938; + atomic_mass_map[110330000] = 33.02573; + atomic_mass_map[120330000] = 33.005327145; + atomic_mass_map[130330000] = 32.990908977; + atomic_mass_map[140330000] = 32.977976964; + atomic_mass_map[150330000] = 32.971725694; + atomic_mass_map[160330000] = 32.9714589098; + atomic_mass_map[170330000] = 32.977451989; + atomic_mass_map[180330000] = 32.989925546; + atomic_mass_map[190330000] = 33.00756; + atomic_mass_map[100340000] = 34.056728; + atomic_mass_map[110340000] = 34.03359; + atomic_mass_map[120340000] = 34.008935481; + atomic_mass_map[130340000] = 33.996705398; + atomic_mass_map[140340000] = 33.978575569; + atomic_mass_map[150340000] = 33.973645886; + atomic_mass_map[160340000] = 33.967867004; + atomic_mass_map[170340000] = 33.973762485; + atomic_mass_map[180340000] = 33.98027009; + atomic_mass_map[190340000] = 33.99869; + atomic_mass_map[200340000] = 34.01487; + atomic_mass_map[110350000] = 35.040623; + atomic_mass_map[120350000] = 35.01679; + atomic_mass_map[130350000] = 34.999764; + atomic_mass_map[140350000] = 34.984583476; + atomic_mass_map[150350000] = 34.973314062; + atomic_mass_map[160350000] = 34.96903231; + atomic_mass_map[170350000] = 34.968852682; + atomic_mass_map[180350000] = 34.975257586; + atomic_mass_map[190350000] = 34.988005407; + atomic_mass_map[200350000] = 35.00514; + atomic_mass_map[110360000] = 36.049288; + atomic_mass_map[120360000] = 36.021879; + atomic_mass_map[130360000] = 36.006388; + atomic_mass_map[140360000] = 35.986695219; + atomic_mass_map[150360000] = 35.978259625; + atomic_mass_map[160360000] = 35.967080706; + atomic_mass_map[170360000] = 35.968306809; + atomic_mass_map[180360000] = 35.967545105; + atomic_mass_map[190360000] = 35.98130201; + atomic_mass_map[200360000] = 35.993074404; + atomic_mass_map[210360000] = 36.01648; + atomic_mass_map[110370000] = 37.057051; + atomic_mass_map[120370000] = 37.03037; + atomic_mass_map[130370000] = 37.010531; + atomic_mass_map[140370000] = 36.99292074; + atomic_mass_map[150370000] = 36.979606841; + atomic_mass_map[160370000] = 36.971125514; + atomic_mass_map[170370000] = 36.965902602; + atomic_mass_map[180370000] = 36.966776331; + atomic_mass_map[190370000] = 36.973375889; + atomic_mass_map[200370000] = 36.985897852; + atomic_mass_map[210370000] = 37.00374; + atomic_mass_map[120380000] = 38.03658; + atomic_mass_map[130380000] = 38.017402; + atomic_mass_map[140380000] = 37.995523; + atomic_mass_map[150380000] = 37.984251583; + atomic_mass_map[160380000] = 37.971163328; + atomic_mass_map[170380000] = 37.968010436; + atomic_mass_map[180380000] = 37.962732106; + atomic_mass_map[190380000] = 37.969081117; + atomic_mass_map[200380000] = 37.976319224; + atomic_mass_map[210380000] = 37.99512; + atomic_mass_map[220380000] = 38.01145; + atomic_mass_map[120390000] = 39.045384; + atomic_mass_map[130390000] = 39.02254; + atomic_mass_map[140390000] = 39.002491; + atomic_mass_map[150390000] = 38.986227208; + atomic_mass_map[160390000] = 38.975134197; + atomic_mass_map[170390000] = 38.968008176; + atomic_mass_map[180390000] = 38.964313038; + atomic_mass_map[190390000] = 38.9637064864; + atomic_mass_map[200390000] = 38.970710813; + atomic_mass_map[210390000] = 38.984784968; + atomic_mass_map[220390000] = 39.00236; + atomic_mass_map[120400000] = 40.05218; + atomic_mass_map[130400000] = 40.03003; + atomic_mass_map[140400000] = 40.005829; + atomic_mass_map[150400000] = 39.991331748; + atomic_mass_map[160400000] = 39.975482562; + atomic_mass_map[170400000] = 39.970415469; + atomic_mass_map[180400000] = 39.9623831237; + atomic_mass_map[190400000] = 39.963998166; + atomic_mass_map[200400000] = 39.962590863; + atomic_mass_map[210400000] = 39.977967291; + atomic_mass_map[220400000] = 39.990498719; + atomic_mass_map[230400000] = 40.01276; + atomic_mass_map[130410000] = 41.03638; + atomic_mass_map[140410000] = 41.013011; + atomic_mass_map[150410000] = 40.994654; + atomic_mass_map[160410000] = 40.979593451; + atomic_mass_map[170410000] = 40.970684525; + atomic_mass_map[180410000] = 40.96450057; + atomic_mass_map[190410000] = 40.9618252579; + atomic_mass_map[200410000] = 40.962277924; + atomic_mass_map[210410000] = 40.969251105; + atomic_mass_map[220410000] = 40.983148; + atomic_mass_map[230410000] = 41.00021; + atomic_mass_map[130420000] = 42.04384; + atomic_mass_map[140420000] = 42.01778; + atomic_mass_map[150420000] = 42.001084; + atomic_mass_map[160420000] = 41.9810651; + atomic_mass_map[170420000] = 41.973254804; + atomic_mass_map[180420000] = 41.963045736; + atomic_mass_map[190420000] = 41.962402306; + atomic_mass_map[200420000] = 41.95861783; + atomic_mass_map[210420000] = 41.965516532; + atomic_mass_map[220420000] = 41.973049034; + atomic_mass_map[230420000] = 41.99182; + atomic_mass_map[240420000] = 42.0067; + atomic_mass_map[130430000] = 43.05147; + atomic_mass_map[140430000] = 43.0248; + atomic_mass_map[150430000] = 43.005024; + atomic_mass_map[160430000] = 42.986907635; + atomic_mass_map[170430000] = 42.973888584; + atomic_mass_map[180430000] = 42.965636055; + atomic_mass_map[190430000] = 42.960734702; + atomic_mass_map[200430000] = 42.958766438; + atomic_mass_map[210430000] = 42.961150474; + atomic_mass_map[220430000] = 42.96852252; + atomic_mass_map[230430000] = 42.980766; + atomic_mass_map[240430000] = 42.99753; + atomic_mass_map[140440000] = 44.03061; + atomic_mass_map[150440000] = 44.01121; + atomic_mass_map[160440000] = 43.990118848; + atomic_mass_map[170440000] = 43.977874543; + atomic_mass_map[180440000] = 43.964923815; + atomic_mass_map[190440000] = 43.961586985; + atomic_mass_map[200440000] = 43.955481561; + atomic_mass_map[210440000] = 43.959402875; + atomic_mass_map[220440000] = 43.959689949; + atomic_mass_map[230440000] = 43.97411; + atomic_mass_map[240440000] = 43.98536; + atomic_mass_map[250440000] = 44.00715; + atomic_mass_map[140450000] = 45.03995; + atomic_mass_map[150450000] = 45.01645; + atomic_mass_map[160450000] = 44.995717; + atomic_mass_map[170450000] = 44.98029; + atomic_mass_map[180450000] = 44.968039733; + atomic_mass_map[190450000] = 44.960691493; + atomic_mass_map[200450000] = 44.95618635; + atomic_mass_map[210450000] = 44.955908275; + atomic_mass_map[220450000] = 44.958121983; + atomic_mass_map[230450000] = 44.96577482; + atomic_mass_map[240450000] = 44.97905; + atomic_mass_map[250450000] = 44.99449; + atomic_mass_map[260450000] = 45.014419; + atomic_mass_map[150460000] = 46.02446; + atomic_mass_map[160460000] = 46.00004; + atomic_mass_map[170460000] = 45.985174; + atomic_mass_map[180460000] = 45.968082712; + atomic_mass_map[190460000] = 45.961981586; + atomic_mass_map[200460000] = 45.953689023; + atomic_mass_map[210460000] = 45.955168257; + atomic_mass_map[220460000] = 45.952627718; + atomic_mass_map[230460000] = 45.960198775; + atomic_mass_map[240460000] = 45.968358861; + atomic_mass_map[250460000] = 45.98609; + atomic_mass_map[260460000] = 46.00063; + atomic_mass_map[150470000] = 47.03139; + atomic_mass_map[160470000] = 47.00795; + atomic_mass_map[170470000] = 46.98916; + atomic_mass_map[180470000] = 46.972934865; + atomic_mass_map[190470000] = 46.961661614; + atomic_mass_map[200470000] = 46.95454243; + atomic_mass_map[210470000] = 46.95240374; + atomic_mass_map[220470000] = 46.951758787; + atomic_mass_map[230470000] = 46.954904914; + atomic_mass_map[240470000] = 46.962897359; + atomic_mass_map[250470000] = 46.975775; + atomic_mass_map[260470000] = 46.99185; + atomic_mass_map[270470000] = 47.01057; + atomic_mass_map[160480000] = 48.0137; + atomic_mass_map[170480000] = 47.99564; + atomic_mass_map[180480000] = 47.97591; + atomic_mass_map[190480000] = 47.965341186; + atomic_mass_map[200480000] = 47.952522765; + atomic_mass_map[210480000] = 47.952223611; + atomic_mass_map[220480000] = 47.947941979; + atomic_mass_map[230480000] = 47.952252223; + atomic_mass_map[240480000] = 47.954029061; + atomic_mass_map[250480000] = 47.96852; + atomic_mass_map[260480000] = 47.98023; + atomic_mass_map[270480000] = 48.00093; + atomic_mass_map[280480000] = 48.017688; + atomic_mass_map[160490000] = 49.022762; + atomic_mass_map[170490000] = 49.00123; + atomic_mass_map[180490000] = 48.9819; + atomic_mass_map[190490000] = 48.968210755; + atomic_mass_map[200490000] = 48.955662736; + atomic_mass_map[210490000] = 48.950014629; + atomic_mass_map[220490000] = 48.947865676; + atomic_mass_map[230490000] = 48.948511795; + atomic_mass_map[240490000] = 48.951333349; + atomic_mass_map[250490000] = 48.959595297; + atomic_mass_map[260490000] = 48.973429; + atomic_mass_map[270490000] = 48.98891; + atomic_mass_map[280490000] = 49.0077; + atomic_mass_map[170500000] = 50.00905; + atomic_mass_map[180500000] = 49.98613; + atomic_mass_map[190500000] = 49.972380017; + atomic_mass_map[200500000] = 49.957499217; + atomic_mass_map[210500000] = 49.952176274; + atomic_mass_map[220500000] = 49.944786889; + atomic_mass_map[230500000] = 49.947156014; + atomic_mass_map[240500000] = 49.946041833; + atomic_mass_map[250500000] = 49.954237781; + atomic_mass_map[260500000] = 49.962974929; + atomic_mass_map[270500000] = 49.98091; + atomic_mass_map[280500000] = 49.99474; + atomic_mass_map[170510000] = 51.01554; + atomic_mass_map[180510000] = 50.9937; + atomic_mass_map[190510000] = 50.975828036; + atomic_mass_map[200510000] = 50.960988981; + atomic_mass_map[210510000] = 50.953591956; + atomic_mass_map[220510000] = 50.946610651; + atomic_mass_map[230510000] = 50.943957036; + atomic_mass_map[240510000] = 50.944765018; + atomic_mass_map[250510000] = 50.948208475; + atomic_mass_map[260510000] = 50.956841021; + atomic_mass_map[270510000] = 50.970647; + atomic_mass_map[280510000] = 50.98611; + atomic_mass_map[180520000] = 51.99896; + atomic_mass_map[190520000] = 51.98224; + atomic_mass_map[200520000] = 51.963217145; + atomic_mass_map[210520000] = 51.956879479; + atomic_mass_map[220520000] = 51.946893006; + atomic_mass_map[230520000] = 51.944773007; + atomic_mass_map[240520000] = 51.940506231; + atomic_mass_map[250520000] = 51.945563949; + atomic_mass_map[260520000] = 51.948113146; + atomic_mass_map[270520000] = 51.96351; + atomic_mass_map[280520000] = 51.9748; + atomic_mass_map[290520000] = 51.99671; + atomic_mass_map[180530000] = 53.00729; + atomic_mass_map[190530000] = 52.98746; + atomic_mass_map[200530000] = 52.96945; + atomic_mass_map[210530000] = 52.95909; + atomic_mass_map[220530000] = 52.949725933; + atomic_mass_map[230530000] = 52.944336741; + atomic_mass_map[240530000] = 52.940648147; + atomic_mass_map[250530000] = 52.941288891; + atomic_mass_map[260530000] = 52.945306428; + atomic_mass_map[270530000] = 52.954204077; + atomic_mass_map[280530000] = 52.96819; + atomic_mass_map[290530000] = 52.98459; + atomic_mass_map[190540000] = 53.99463; + atomic_mass_map[200540000] = 53.9734; + atomic_mass_map[210540000] = 53.96393; + atomic_mass_map[220540000] = 53.951049547; + atomic_mass_map[230540000] = 53.946438617; + atomic_mass_map[240540000] = 53.938879158; + atomic_mass_map[250540000] = 53.940357615; + atomic_mass_map[260540000] = 53.939608986; + atomic_mass_map[270540000] = 53.948459872; + atomic_mass_map[280540000] = 53.957892463; + atomic_mass_map[290540000] = 53.97666; + atomic_mass_map[300540000] = 53.992039; + atomic_mass_map[190550000] = 55.00076; + atomic_mass_map[200550000] = 54.9803; + atomic_mass_map[210550000] = 54.967818892; + atomic_mass_map[220550000] = 54.955268064; + atomic_mass_map[230550000] = 54.94724215; + atomic_mass_map[240550000] = 54.940838434; + atomic_mass_map[250550000] = 54.93804391; + atomic_mass_map[260550000] = 54.938291994; + atomic_mass_map[270550000] = 54.941997202; + atomic_mass_map[280550000] = 54.951330632; + atomic_mass_map[290550000] = 54.966038; + atomic_mass_map[300550000] = 54.98398; + atomic_mass_map[190560000] = 56.00851; + atomic_mass_map[200560000] = 55.98508; + atomic_mass_map[210560000] = 55.97345; + atomic_mass_map[220560000] = 55.957911353; + atomic_mass_map[230560000] = 55.95048481; + atomic_mass_map[240560000] = 55.940653139; + atomic_mass_map[250560000] = 55.938903691; + atomic_mass_map[260560000] = 55.934936326; + atomic_mass_map[270560000] = 55.939838798; + atomic_mass_map[280560000] = 55.942128549; + atomic_mass_map[290560000] = 55.95895; + atomic_mass_map[300560000] = 55.97254; + atomic_mass_map[310560000] = 55.99536; + atomic_mass_map[200570000] = 56.99262; + atomic_mass_map[210570000] = 56.97777; + atomic_mass_map[220570000] = 56.963641626; + atomic_mass_map[230570000] = 56.952518869; + atomic_mass_map[240570000] = 56.943613013; + atomic_mass_map[250570000] = 56.938286096; + atomic_mass_map[260570000] = 56.935392841; + atomic_mass_map[270570000] = 56.936290574; + atomic_mass_map[280570000] = 56.939792184; + atomic_mass_map[290570000] = 56.949212498; + atomic_mass_map[300570000] = 56.96506; + atomic_mass_map[310570000] = 56.9832; + atomic_mass_map[200580000] = 57.99794; + atomic_mass_map[210580000] = 57.98403; + atomic_mass_map[220580000] = 57.9666; + atomic_mass_map[230580000] = 57.956715235; + atomic_mass_map[240580000] = 57.944353129; + atomic_mass_map[250580000] = 57.940066645; + atomic_mass_map[260580000] = 57.933274431; + atomic_mass_map[270580000] = 57.935752073; + atomic_mass_map[280580000] = 57.935342414; + atomic_mass_map[290580000] = 57.944533046; + atomic_mass_map[300580000] = 57.954591062; + atomic_mass_map[310580000] = 57.97478; + atomic_mass_map[320580000] = 57.99172; + atomic_mass_map[210590000] = 58.98894; + atomic_mass_map[220590000] = 58.97247; + atomic_mass_map[230590000] = 58.959385659; + atomic_mass_map[240590000] = 58.948586367; + atomic_mass_map[250590000] = 58.940391113; + atomic_mass_map[260590000] = 58.934874338; + atomic_mass_map[270590000] = 58.933194288; + atomic_mass_map[280590000] = 58.934346202; + atomic_mass_map[290590000] = 58.939497482; + atomic_mass_map[300590000] = 58.949312657; + atomic_mass_map[310590000] = 58.96353; + atomic_mass_map[320590000] = 58.98249; + atomic_mass_map[210600000] = 59.99565; + atomic_mass_map[220600000] = 59.97603; + atomic_mass_map[230600000] = 59.96431329; + atomic_mass_map[240600000] = 59.950076033; + atomic_mass_map[250600000] = 59.943136576; + atomic_mass_map[260600000] = 59.9340711; + atomic_mass_map[270600000] = 59.933816299; + atomic_mass_map[280600000] = 59.930785885; + atomic_mass_map[290600000] = 59.937364544; + atomic_mass_map[300600000] = 59.941842103; + atomic_mass_map[310600000] = 59.95729; + atomic_mass_map[320600000] = 59.97036; + atomic_mass_map[330600000] = 59.99388; + atomic_mass_map[210610000] = 61.001; + atomic_mass_map[220610000] = 60.98245; + atomic_mass_map[230610000] = 60.96725; + atomic_mass_map[240610000] = 60.954422585; + atomic_mass_map[250610000] = 60.944452544; + atomic_mass_map[260610000] = 60.936746244; + atomic_mass_map[270610000] = 60.93247662; + atomic_mass_map[280610000] = 60.93105557; + atomic_mass_map[290610000] = 60.933457612; + atomic_mass_map[300610000] = 60.939507188; + atomic_mass_map[310610000] = 60.949398984; + atomic_mass_map[320610000] = 60.96379; + atomic_mass_map[330610000] = 60.98112; + atomic_mass_map[220620000] = 61.98651; + atomic_mass_map[230620000] = 61.97265; + atomic_mass_map[240620000] = 61.956097451; + atomic_mass_map[250620000] = 61.947954; + atomic_mass_map[260620000] = 61.936791812; + atomic_mass_map[270620000] = 61.934058809; + atomic_mass_map[280620000] = 61.928345365; + atomic_mass_map[290620000] = 61.932595415; + atomic_mass_map[300620000] = 61.934333971; + atomic_mass_map[310620000] = 61.944190251; + atomic_mass_map[320620000] = 61.95502; + atomic_mass_map[330620000] = 61.97361; + atomic_mass_map[220630000] = 62.99375; + atomic_mass_map[230630000] = 62.97639; + atomic_mass_map[240630000] = 62.961650731; + atomic_mass_map[250630000] = 62.949664675; + atomic_mass_map[260630000] = 62.9402727; + atomic_mass_map[270630000] = 62.933600217; + atomic_mass_map[280630000] = 62.929669626; + atomic_mass_map[290630000] = 62.929597723; + atomic_mass_map[300630000] = 62.933211474; + atomic_mass_map[310630000] = 62.939294196; + atomic_mass_map[320630000] = 62.949628; + atomic_mass_map[330630000] = 62.9639; + atomic_mass_map[230640000] = 63.98264; + atomic_mass_map[240640000] = 63.96408; + atomic_mass_map[250640000] = 63.95384937; + atomic_mass_map[260640000] = 63.940987763; + atomic_mass_map[270640000] = 63.935810764; + atomic_mass_map[280640000] = 63.927966816; + atomic_mass_map[290640000] = 63.929764342; + atomic_mass_map[300640000] = 63.929142013; + atomic_mass_map[310640000] = 63.93684044; + atomic_mass_map[320640000] = 63.941689913; + atomic_mass_map[330640000] = 63.957432; + atomic_mass_map[340640000] = 63.97109; + atomic_mass_map[230650000] = 64.9875; + atomic_mass_map[240650000] = 64.96996; + atomic_mass_map[250650000] = 64.95601975; + atomic_mass_map[260650000] = 64.945011462; + atomic_mass_map[270650000] = 64.936462072; + atomic_mass_map[280650000] = 64.930085173; + atomic_mass_map[290650000] = 64.927789704; + atomic_mass_map[300650000] = 64.92924077; + atomic_mass_map[310650000] = 64.932734588; + atomic_mass_map[320650000] = 64.939368137; + atomic_mass_map[330650000] = 64.949611; + atomic_mass_map[340650000] = 64.9644; + atomic_mass_map[230660000] = 65.99398; + atomic_mass_map[240660000] = 65.97366; + atomic_mass_map[250660000] = 65.960546834; + atomic_mass_map[260660000] = 65.94624996; + atomic_mass_map[270660000] = 65.939442945; + atomic_mass_map[280660000] = 65.929139334; + atomic_mass_map[290660000] = 65.928869032; + atomic_mass_map[300660000] = 65.926033809; + atomic_mass_map[310660000] = 65.931589401; + atomic_mass_map[320660000] = 65.933862126; + atomic_mass_map[330660000] = 65.944148779; + atomic_mass_map[340660000] = 65.95559; + atomic_mass_map[240670000] = 66.98016; + atomic_mass_map[250670000] = 66.96424; + atomic_mass_map[260670000] = 66.950543395; + atomic_mass_map[270670000] = 66.940609627; + atomic_mass_map[280670000] = 66.931569414; + atomic_mass_map[290670000] = 66.927730314; + atomic_mass_map[300670000] = 66.927127746; + atomic_mass_map[310670000] = 66.928202547; + atomic_mass_map[320670000] = 66.932733861; + atomic_mass_map[330670000] = 66.939251112; + atomic_mass_map[340670000] = 66.949994; + atomic_mass_map[350670000] = 66.96465; + atomic_mass_map[240680000] = 67.98403; + atomic_mass_map[250680000] = 67.96962; + atomic_mass_map[260680000] = 67.95295155; + atomic_mass_map[270680000] = 67.944257589; + atomic_mass_map[280680000] = 67.931868789; + atomic_mass_map[290680000] = 67.929610889; + atomic_mass_map[300680000] = 67.924844554; + atomic_mass_map[310680000] = 67.927980485; + atomic_mass_map[320680000] = 67.928095307; + atomic_mass_map[330680000] = 67.93677413; + atomic_mass_map[340680000] = 67.941825238; + atomic_mass_map[350680000] = 67.958732; + atomic_mass_map[250690000] = 68.97366; + atomic_mass_map[260690000] = 68.95807; + atomic_mass_map[270690000] = 68.946141268; + atomic_mass_map[280690000] = 68.935610269; + atomic_mass_map[290690000] = 68.929429269; + atomic_mass_map[300690000] = 68.926550682; + atomic_mass_map[310690000] = 68.925573541; + atomic_mass_map[320690000] = 68.927964481; + atomic_mass_map[330690000] = 68.932246302; + atomic_mass_map[340690000] = 68.939414847; + atomic_mass_map[350690000] = 68.950497297; + atomic_mass_map[360690000] = 68.96518; + atomic_mass_map[250700000] = 69.97937; + atomic_mass_map[260700000] = 69.96102; + atomic_mass_map[270700000] = 69.94963; + atomic_mass_map[280700000] = 69.936431302; + atomic_mass_map[290700000] = 69.932392079; + atomic_mass_map[300700000] = 69.925319208; + atomic_mass_map[310700000] = 69.926021927; + atomic_mass_map[320700000] = 69.92424875; + atomic_mass_map[330700000] = 69.930926195; + atomic_mass_map[340700000] = 69.933515523; + atomic_mass_map[350700000] = 69.944792323; + atomic_mass_map[360700000] = 69.95604; + atomic_mass_map[250710000] = 70.98368; + atomic_mass_map[260710000] = 70.96672; + atomic_mass_map[270710000] = 70.952366923; + atomic_mass_map[280710000] = 70.940518964; + atomic_mass_map[290710000] = 70.932676833; + atomic_mass_map[300710000] = 70.927719582; + atomic_mass_map[310710000] = 70.924702577; + atomic_mass_map[320710000] = 70.924952327; + atomic_mass_map[330710000] = 70.927113801; + atomic_mass_map[340710000] = 70.932209433; + atomic_mass_map[350710000] = 70.939342155; + atomic_mass_map[360710000] = 70.950265696; + atomic_mass_map[370710000] = 70.96532; + atomic_mass_map[260720000] = 71.96983; + atomic_mass_map[270720000] = 71.95729; + atomic_mass_map[280720000] = 71.941785926; + atomic_mass_map[290720000] = 71.935820307; + atomic_mass_map[300720000] = 71.926842807; + atomic_mass_map[310720000] = 71.926367474; + atomic_mass_map[320720000] = 71.922075826; + atomic_mass_map[330720000] = 71.926752294; + atomic_mass_map[340720000] = 71.927140507; + atomic_mass_map[350720000] = 71.936588619; + atomic_mass_map[360720000] = 71.942092407; + atomic_mass_map[370720000] = 71.95908; + atomic_mass_map[260730000] = 72.97572; + atomic_mass_map[270730000] = 72.96039; + atomic_mass_map[280730000] = 72.946206683; + atomic_mass_map[290730000] = 72.936674378; + atomic_mass_map[300730000] = 72.929582582; + atomic_mass_map[310730000] = 72.925174682; + atomic_mass_map[320730000] = 72.923458956; + atomic_mass_map[330730000] = 72.923829086; + atomic_mass_map[340730000] = 72.926754882; + atomic_mass_map[350730000] = 72.931671503; + atomic_mass_map[360730000] = 72.939289195; + atomic_mass_map[370730000] = 72.950529; + atomic_mass_map[380730000] = 72.9657; + atomic_mass_map[260740000] = 73.97935; + atomic_mass_map[270740000] = 73.96515; + atomic_mass_map[280740000] = 73.94798; + atomic_mass_map[290740000] = 73.939874862; + atomic_mass_map[300740000] = 73.929407262; + atomic_mass_map[310740000] = 73.926945727; + atomic_mass_map[320740000] = 73.921177761; + atomic_mass_map[330740000] = 73.923928598; + atomic_mass_map[340740000] = 73.922475934; + atomic_mass_map[350740000] = 73.929910177; + atomic_mass_map[360740000] = 73.93308402; + atomic_mass_map[370740000] = 73.944265894; + atomic_mass_map[380740000] = 73.95617; + atomic_mass_map[270750000] = 74.96876; + atomic_mass_map[280750000] = 74.9525; + atomic_mass_map[290750000] = 74.941522606; + atomic_mass_map[300750000] = 74.932840246; + atomic_mass_map[310750000] = 74.926500246; + atomic_mass_map[320750000] = 74.92285837; + atomic_mass_map[330750000] = 74.921594567; + atomic_mass_map[340750000] = 74.92252287; + atomic_mass_map[350750000] = 74.925810452; + atomic_mass_map[360750000] = 74.930945746; + atomic_mass_map[370750000] = 74.938573201; + atomic_mass_map[380750000] = 74.94995277; + atomic_mass_map[270760000] = 75.97413; + atomic_mass_map[280760000] = 75.95533; + atomic_mass_map[290760000] = 75.945275026; + atomic_mass_map[300760000] = 75.933114957; + atomic_mass_map[310760000] = 75.928827626; + atomic_mass_map[320760000] = 75.921402726; + atomic_mass_map[330760000] = 75.922392015; + atomic_mass_map[340760000] = 75.919213704; + atomic_mass_map[350760000] = 75.924541576; + atomic_mass_map[360760000] = 75.925910271; + atomic_mass_map[370760000] = 75.935073032; + atomic_mass_map[380760000] = 75.941762761; + atomic_mass_map[390760000] = 75.95856; + atomic_mass_map[280770000] = 76.96055; + atomic_mass_map[290770000] = 76.94792; + atomic_mass_map[300770000] = 76.936887199; + atomic_mass_map[310770000] = 76.9291543; + atomic_mass_map[320770000] = 76.923549843; + atomic_mass_map[330770000] = 76.920647563; + atomic_mass_map[340770000] = 76.919914154; + atomic_mass_map[350770000] = 76.921379198; + atomic_mass_map[360770000] = 76.92467; + atomic_mass_map[370770000] = 76.9304016; + atomic_mass_map[380770000] = 76.937945455; + atomic_mass_map[390770000] = 76.949781; + atomic_mass_map[280780000] = 77.96336; + atomic_mass_map[290780000] = 77.95223; + atomic_mass_map[300780000] = 77.938289206; + atomic_mass_map[310780000] = 77.931608845; + atomic_mass_map[320780000] = 77.922852908; + atomic_mass_map[330780000] = 77.921827773; + atomic_mass_map[340780000] = 77.91730928; + atomic_mass_map[350780000] = 77.921145895; + atomic_mass_map[360780000] = 77.920364944; + atomic_mass_map[370780000] = 77.928141868; + atomic_mass_map[380780000] = 77.93217998; + atomic_mass_map[390780000] = 77.94361; + atomic_mass_map[400780000] = 77.95566; + atomic_mass_map[280790000] = 78.970252; + atomic_mass_map[290790000] = 78.95502; + atomic_mass_map[300790000] = 78.942638069; + atomic_mass_map[310790000] = 78.932852301; + atomic_mass_map[320790000] = 78.925360127; + atomic_mass_map[330790000] = 78.920948423; + atomic_mass_map[340790000] = 78.918499287; + atomic_mass_map[350790000] = 78.918337579; + atomic_mass_map[360790000] = 78.920082923; + atomic_mass_map[370790000] = 78.923989864; + atomic_mass_map[380790000] = 78.929707664; + atomic_mass_map[390790000] = 78.937351299; + atomic_mass_map[400790000] = 78.94948; + atomic_mass_map[290800000] = 79.96089; + atomic_mass_map[300800000] = 79.944552931; + atomic_mass_map[310800000] = 79.936420775; + atomic_mass_map[320800000] = 79.925350775; + atomic_mass_map[330800000] = 79.922474584; + atomic_mass_map[340800000] = 79.916521762; + atomic_mass_map[350800000] = 79.918529788; + atomic_mass_map[360800000] = 79.916378084; + atomic_mass_map[370800000] = 79.922516444; + atomic_mass_map[380800000] = 79.924517516; + atomic_mass_map[390800000] = 79.934356096; + atomic_mass_map[400800000] = 79.9404; + atomic_mass_map[290810000] = 80.965872; + atomic_mass_map[300810000] = 80.950402619; + atomic_mass_map[310810000] = 80.938133843; + atomic_mass_map[320810000] = 80.928832943; + atomic_mass_map[330810000] = 80.92213228; + atomic_mass_map[340810000] = 80.917993023; + atomic_mass_map[350810000] = 80.91628969; + atomic_mass_map[360810000] = 80.916591181; + atomic_mass_map[370810000] = 80.918993936; + atomic_mass_map[380810000] = 80.923211395; + atomic_mass_map[390810000] = 80.929455556; + atomic_mass_map[400810000] = 80.937308892; + atomic_mass_map[410810000] = 80.9496; + atomic_mass_map[290820000] = 81.972442; + atomic_mass_map[300820000] = 81.95426; + atomic_mass_map[310820000] = 81.943176533; + atomic_mass_map[320820000] = 81.929774033; + atomic_mass_map[330820000] = 81.924741233; + atomic_mass_map[340820000] = 81.916699497; + atomic_mass_map[350820000] = 81.916803246; + atomic_mass_map[360820000] = 81.91348273; + atomic_mass_map[370820000] = 81.918209024; + atomic_mass_map[380820000] = 81.918399855; + atomic_mass_map[390820000] = 81.926931401; + atomic_mass_map[400820000] = 81.931354; + atomic_mass_map[410820000] = 81.94396; + atomic_mass_map[300830000] = 82.96056; + atomic_mass_map[310830000] = 82.947120301; + atomic_mass_map[320830000] = 82.934539101; + atomic_mass_map[330830000] = 82.925206901; + atomic_mass_map[340830000] = 82.919118569; + atomic_mass_map[350830000] = 82.91517562; + atomic_mass_map[360830000] = 82.914127164; + atomic_mass_map[370830000] = 82.915114183; + atomic_mass_map[380830000] = 82.917554374; + atomic_mass_map[390830000] = 82.92248525; + atomic_mass_map[400830000] = 82.92924215; + atomic_mass_map[410830000] = 82.937293731; + atomic_mass_map[420830000] = 82.94988; + atomic_mass_map[300840000] = 83.965206; + atomic_mass_map[310840000] = 83.95246; + atomic_mass_map[320840000] = 83.937575092; + atomic_mass_map[330840000] = 83.929303292; + atomic_mass_map[340840000] = 83.918466763; + atomic_mass_map[350840000] = 83.916496419; + atomic_mass_map[360840000] = 83.9114977282; + atomic_mass_map[370840000] = 83.914375229; + atomic_mass_map[380840000] = 83.913419136; + atomic_mass_map[390840000] = 83.920672086; + atomic_mass_map[400840000] = 83.923326899; + atomic_mass_map[410840000] = 83.934492; + atomic_mass_map[420840000] = 83.94149; + atomic_mass_map[300850000] = 84.97226; + atomic_mass_map[310850000] = 84.95699; + atomic_mass_map[320850000] = 84.94296966; + atomic_mass_map[330850000] = 84.93216366; + atomic_mass_map[340850000] = 84.92226076; + atomic_mass_map[350850000] = 84.91564576; + atomic_mass_map[360850000] = 84.912527262; + atomic_mass_map[370850000] = 84.9117897379; + atomic_mass_map[380850000] = 84.912932046; + atomic_mass_map[390850000] = 84.916433039; + atomic_mass_map[400850000] = 84.921444448; + atomic_mass_map[410850000] = 84.928845837; + atomic_mass_map[420850000] = 84.938260737; + atomic_mass_map[430850000] = 84.95058; + atomic_mass_map[310860000] = 85.96301; + atomic_mass_map[320860000] = 85.94658; + atomic_mass_map[330860000] = 85.936701533; + atomic_mass_map[340860000] = 85.924311733; + atomic_mass_map[350860000] = 85.918805433; + atomic_mass_map[360860000] = 85.9106106269; + atomic_mass_map[370860000] = 85.911167425; + atomic_mass_map[380860000] = 85.909260608; + atomic_mass_map[390860000] = 85.91488598; + atomic_mass_map[400860000] = 85.916297204; + atomic_mass_map[410860000] = 85.925782798; + atomic_mass_map[420860000] = 85.931174817; + atomic_mass_map[430860000] = 85.94493; + atomic_mass_map[310870000] = 86.968245; + atomic_mass_map[320870000] = 86.95268; + atomic_mass_map[330870000] = 86.940291718; + atomic_mass_map[340870000] = 86.928688618; + atomic_mass_map[350870000] = 86.920674018; + atomic_mass_map[360870000] = 86.91335476; + atomic_mass_map[370870000] = 86.909180531; + atomic_mass_map[380870000] = 86.908877531; + atomic_mass_map[390870000] = 86.910876138; + atomic_mass_map[400870000] = 86.914817988; + atomic_mass_map[410870000] = 86.920693747; + atomic_mass_map[420870000] = 86.928196201; + atomic_mass_map[430870000] = 86.938067187; + atomic_mass_map[440870000] = 86.95069; + atomic_mass_map[320880000] = 87.95691; + atomic_mass_map[330880000] = 87.94555; + atomic_mass_map[340880000] = 87.931417492; + atomic_mass_map[350880000] = 87.924083292; + atomic_mass_map[360880000] = 87.914447881; + atomic_mass_map[370880000] = 87.911315592; + atomic_mass_map[380880000] = 87.905612542; + atomic_mass_map[390880000] = 87.909501563; + atomic_mass_map[400880000] = 87.91022129; + atomic_mass_map[410880000] = 87.91822171; + atomic_mass_map[420880000] = 87.921967781; + atomic_mass_map[430880000] = 87.933782381; + atomic_mass_map[440880000] = 87.9416; + atomic_mass_map[320890000] = 88.96379; + atomic_mass_map[330890000] = 88.94976; + atomic_mass_map[340890000] = 88.93666906; + atomic_mass_map[350890000] = 88.92670456; + atomic_mass_map[360890000] = 88.917835451; + atomic_mass_map[370890000] = 88.912278298; + atomic_mass_map[380890000] = 88.907451095; + atomic_mass_map[390890000] = 88.905840348; + atomic_mass_map[400890000] = 88.908881441; + atomic_mass_map[410890000] = 88.913445073; + atomic_mass_map[420890000] = 88.919468151; + atomic_mass_map[430890000] = 88.927648651; + atomic_mass_map[440890000] = 88.93762; + atomic_mass_map[450890000] = 88.950584; + atomic_mass_map[320900000] = 89.96863; + atomic_mass_map[330900000] = 89.95563; + atomic_mass_map[340900000] = 89.940096; + atomic_mass_map[350900000] = 89.93129285; + atomic_mass_map[360900000] = 89.919527931; + atomic_mass_map[370900000] = 89.914798453; + atomic_mass_map[380900000] = 89.907730037; + atomic_mass_map[390900000] = 89.907143942; + atomic_mass_map[400900000] = 89.904697659; + atomic_mass_map[410900000] = 89.911258449; + atomic_mass_map[420900000] = 89.913930861; + atomic_mass_map[430900000] = 89.924073921; + atomic_mass_map[440900000] = 89.93034438; + atomic_mass_map[450900000] = 89.94422; + atomic_mass_map[330910000] = 90.96039; + atomic_mass_map[340910000] = 90.94596; + atomic_mass_map[350910000] = 90.934398619; + atomic_mass_map[360910000] = 90.923806311; + atomic_mass_map[370910000] = 90.916537169; + atomic_mass_map[380910000] = 90.910195442; + atomic_mass_map[390910000] = 90.907297442; + atomic_mass_map[400910000] = 90.905639587; + atomic_mass_map[410910000] = 90.906989658; + atomic_mass_map[420910000] = 90.911745312; + atomic_mass_map[430910000] = 90.918425397; + atomic_mass_map[440910000] = 90.926741859; + atomic_mass_map[450910000] = 90.93688; + atomic_mass_map[460910000] = 90.95032; + atomic_mass_map[330920000] = 91.96674; + atomic_mass_map[340920000] = 91.94984; + atomic_mass_map[350920000] = 91.939631597; + atomic_mass_map[360920000] = 91.926173094; + atomic_mass_map[370920000] = 91.919728389; + atomic_mass_map[380920000] = 91.91103819; + atomic_mass_map[390920000] = 91.908945142; + atomic_mass_map[400920000] = 91.905034675; + atomic_mass_map[410920000] = 91.907188081; + atomic_mass_map[420920000] = 91.906807959; + atomic_mass_map[430920000] = 91.915269779; + atomic_mass_map[440920000] = 91.920234375; + atomic_mass_map[450920000] = 91.932367694; + atomic_mass_map[460920000] = 91.94088; + atomic_mass_map[340930000] = 92.95629; + atomic_mass_map[350930000] = 92.943134; + atomic_mass_map[360930000] = 92.931147174; + atomic_mass_map[370930000] = 92.922039269; + atomic_mass_map[380930000] = 92.914024228; + atomic_mass_map[390930000] = 92.909577886; + atomic_mass_map[400930000] = 92.906469947; + atomic_mass_map[410930000] = 92.906373004; + atomic_mass_map[420930000] = 92.906809577; + atomic_mass_map[430930000] = 92.910245952; + atomic_mass_map[440930000] = 92.917104444; + atomic_mass_map[450930000] = 92.925912781; + atomic_mass_map[460930000] = 92.936511; + atomic_mass_map[470930000] = 92.95033; + atomic_mass_map[340940000] = 93.96049; + atomic_mass_map[350940000] = 93.9489; + atomic_mass_map[360940000] = 93.934140454; + atomic_mass_map[370940000] = 93.926394814; + atomic_mass_map[380940000] = 93.915355602; + atomic_mass_map[390940000] = 93.911590582; + atomic_mass_map[400940000] = 93.906310828; + atomic_mass_map[410940000] = 93.907278836; + atomic_mass_map[420940000] = 93.905084903; + atomic_mass_map[430940000] = 93.909653637; + atomic_mass_map[440940000] = 93.911342863; + atomic_mass_map[450940000] = 93.921730453; + atomic_mass_map[460940000] = 93.929037603; + atomic_mass_map[470940000] = 93.943734; + atomic_mass_map[340950000] = 94.9673; + atomic_mass_map[350950000] = 94.95301; + atomic_mass_map[360950000] = 94.939710924; + atomic_mass_map[370950000] = 94.929260004; + atomic_mass_map[380950000] = 94.919352941; + atomic_mass_map[390950000] = 94.912816058; + atomic_mass_map[400950000] = 94.90803853; + atomic_mass_map[410950000] = 94.906832404; + atomic_mass_map[420950000] = 94.905838766; + atomic_mass_map[430950000] = 94.907653612; + atomic_mass_map[440950000] = 94.910405759; + atomic_mass_map[450950000] = 94.915897895; + atomic_mass_map[460950000] = 94.924889838; + atomic_mass_map[470950000] = 94.93602; + atomic_mass_map[480950000] = 94.94994; + atomic_mass_map[350960000] = 95.95903; + atomic_mass_map[360960000] = 95.943016618; + atomic_mass_map[370960000] = 95.93413338; + atomic_mass_map[380960000] = 95.921706575; + atomic_mass_map[390960000] = 95.915896835; + atomic_mass_map[400960000] = 95.908271433; + atomic_mass_map[410960000] = 95.908097286; + atomic_mass_map[420960000] = 95.904676115; + atomic_mass_map[430960000] = 95.907868022; + atomic_mass_map[440960000] = 95.907590255; + atomic_mass_map[450960000] = 95.914453051; + atomic_mass_map[460960000] = 95.918215084; + atomic_mass_map[470960000] = 95.930743906; + atomic_mass_map[480960000] = 95.94034; + atomic_mass_map[350970000] = 96.96344; + atomic_mass_map[360970000] = 96.949088785; + atomic_mass_map[370970000] = 96.937177136; + atomic_mass_map[380970000] = 96.92637396; + atomic_mass_map[390970000] = 96.918274106; + atomic_mass_map[400970000] = 96.910951206; + atomic_mass_map[410970000] = 96.908095932; + atomic_mass_map[420970000] = 96.906018118; + atomic_mass_map[430970000] = 96.906366706; + atomic_mass_map[440970000] = 96.90754712; + atomic_mass_map[450970000] = 96.911329216; + atomic_mass_map[460970000] = 96.916471988; + atomic_mass_map[470970000] = 96.923965326; + atomic_mass_map[480970000] = 96.9351; + atomic_mass_map[490970000] = 96.94934; + atomic_mass_map[350980000] = 97.96946; + atomic_mass_map[360980000] = 97.95243; + atomic_mass_map[370980000] = 97.941686868; + atomic_mass_map[380980000] = 97.928688778; + atomic_mass_map[390980000] = 97.922382119; + atomic_mass_map[400980000] = 97.912728892; + atomic_mass_map[410980000] = 97.910326459; + atomic_mass_map[420980000] = 97.90540482; + atomic_mass_map[430980000] = 97.907212365; + atomic_mass_map[440980000] = 97.905286813; + atomic_mass_map[450980000] = 97.910707839; + atomic_mass_map[460980000] = 97.912698337; + atomic_mass_map[470980000] = 97.921559973; + atomic_mass_map[480980000] = 97.927389318; + atomic_mass_map[490980000] = 97.94214; + atomic_mass_map[360990000] = 98.95839; + atomic_mass_map[370990000] = 98.945028735; + atomic_mass_map[380990000] = 98.932890666; + atomic_mass_map[390990000] = 98.924147979; + atomic_mass_map[400990000] = 98.916666746; + atomic_mass_map[410990000] = 98.911613177; + atomic_mass_map[420990000] = 98.907708509; + atomic_mass_map[430990000] = 98.906250844; + atomic_mass_map[440990000] = 98.905934082; + atomic_mass_map[450990000] = 98.908128239; + atomic_mass_map[460990000] = 98.911774806; + atomic_mass_map[470990000] = 98.917645768; + atomic_mass_map[480990000] = 98.924925848; + atomic_mass_map[490990000] = 98.93411; + atomic_mass_map[500990000] = 98.94853; + atomic_mass_map[361000000] = 99.96237; + atomic_mass_map[371000000] = 99.95003; + atomic_mass_map[381000000] = 99.935769692; + atomic_mass_map[391000000] = 99.927714692; + atomic_mass_map[401000000] = 99.918000576; + atomic_mass_map[411000000] = 99.914327592; + atomic_mass_map[421000000] = 99.907471782; + atomic_mass_map[431000000] = 99.907653877; + atomic_mass_map[441000000] = 99.904214256; + atomic_mass_map[451000000] = 99.908117264; + atomic_mass_map[461000000] = 99.908504805; + atomic_mass_map[471000000] = 99.916115445; + atomic_mass_map[481000000] = 99.92034882; + atomic_mass_map[491000000] = 99.93095718; + atomic_mass_map[501000000] = 99.938504196; + atomic_mass_map[361010000] = 100.96873; + atomic_mass_map[371010000] = 100.954039; + atomic_mass_map[381010000] = 100.940351743; + atomic_mass_map[391010000] = 100.930147705; + atomic_mass_map[401010000] = 100.921447964; + atomic_mass_map[411010000] = 100.915310254; + atomic_mass_map[421010000] = 100.910341447; + atomic_mass_map[431010000] = 100.907309057; + atomic_mass_map[441010000] = 100.905576872; + atomic_mass_map[451010000] = 100.906160613; + atomic_mass_map[461010000] = 100.908286412; + atomic_mass_map[471010000] = 100.912683953; + atomic_mass_map[481010000] = 100.918586211; + atomic_mass_map[491010000] = 100.92634; + atomic_mass_map[501010000] = 100.935259244; + atomic_mass_map[371020000] = 101.95952; + atomic_mass_map[381020000] = 101.943790979; + atomic_mass_map[391020000] = 101.934327687; + atomic_mass_map[401020000] = 101.92314093; + atomic_mass_map[411020000] = 101.918077197; + atomic_mass_map[421020000] = 101.910283414; + atomic_mass_map[431020000] = 101.909209733; + atomic_mass_map[441020000] = 101.904344096; + atomic_mass_map[451020000] = 101.906837373; + atomic_mass_map[461020000] = 101.905602187; + atomic_mass_map[471020000] = 101.911704708; + atomic_mass_map[481020000] = 101.914481967; + atomic_mass_map[491020000] = 101.924107138; + atomic_mass_map[501020000] = 101.930290753; + atomic_mass_map[371030000] = 102.96392; + atomic_mass_map[381030000] = 102.94909; + atomic_mass_map[391030000] = 102.937243004; + atomic_mass_map[401030000] = 102.927190678; + atomic_mass_map[411030000] = 102.919457238; + atomic_mass_map[421030000] = 102.913078578; + atomic_mass_map[431030000] = 102.909176131; + atomic_mass_map[441030000] = 102.906318627; + atomic_mass_map[451030000] = 102.905497993; + atomic_mass_map[461030000] = 102.906080949; + atomic_mass_map[471030000] = 102.908963138; + atomic_mass_map[481030000] = 102.913416517; + atomic_mass_map[491030000] = 102.919881915; + atomic_mass_map[501030000] = 102.928105264; + atomic_mass_map[511030000] = 102.93969; + atomic_mass_map[381040000] = 103.95265; + atomic_mass_map[391040000] = 103.94196; + atomic_mass_map[401040000] = 103.929435691; + atomic_mass_map[411040000] = 103.922892491; + atomic_mass_map[421040000] = 103.913734373; + atomic_mass_map[431040000] = 103.911424888; + atomic_mass_map[441040000] = 103.905427481; + atomic_mass_map[451040000] = 103.90664922; + atomic_mass_map[461040000] = 103.90403054; + atomic_mass_map[471040000] = 103.908623864; + atomic_mass_map[481040000] = 103.909856386; + atomic_mass_map[491040000] = 103.918214541; + atomic_mass_map[501040000] = 103.923105204; + atomic_mass_map[511040000] = 103.936477804; + atomic_mass_map[381050000] = 104.95855; + atomic_mass_map[391050000] = 104.94544; + atomic_mass_map[401050000] = 104.934008204; + atomic_mass_map[411050000] = 104.924946471; + atomic_mass_map[421050000] = 104.916968617; + atomic_mass_map[431050000] = 104.911654883; + atomic_mass_map[441050000] = 104.907747645; + atomic_mass_map[451050000] = 104.905688549; + atomic_mass_map[461050000] = 104.905079626; + atomic_mass_map[471050000] = 104.906525615; + atomic_mass_map[481050000] = 104.909463896; + atomic_mass_map[491050000] = 104.914502325; + atomic_mass_map[501050000] = 104.921268429; + atomic_mass_map[511050000] = 104.931275897; + atomic_mass_map[521050000] = 104.943304508; + atomic_mass_map[381060000] = 105.962651; + atomic_mass_map[391060000] = 105.95056; + atomic_mass_map[401060000] = 105.93676; + atomic_mass_map[411060000] = 105.928931712; + atomic_mass_map[421060000] = 105.918259464; + atomic_mass_map[431060000] = 105.914357598; + atomic_mass_map[441060000] = 105.907329104; + atomic_mass_map[451060000] = 105.907286801; + atomic_mass_map[461060000] = 105.903480426; + atomic_mass_map[471060000] = 105.906663637; + atomic_mass_map[481060000] = 105.906459928; + atomic_mass_map[491060000] = 105.913463735; + atomic_mass_map[501060000] = 105.916957404; + atomic_mass_map[511060000] = 105.928637982; + atomic_mass_map[521060000] = 105.937499664; + atomic_mass_map[381070000] = 106.968975; + atomic_mass_map[391070000] = 106.95452; + atomic_mass_map[401070000] = 106.94174; + atomic_mass_map[411070000] = 106.931593654; + atomic_mass_map[421070000] = 106.922105877; + atomic_mass_map[431070000] = 106.915460645; + atomic_mass_map[441070000] = 106.909972045; + atomic_mass_map[451070000] = 106.906747811; + atomic_mass_map[461070000] = 106.905128195; + atomic_mass_map[471070000] = 106.905091611; + atomic_mass_map[481070000] = 106.906612122; + atomic_mass_map[491070000] = 106.910290084; + atomic_mass_map[501070000] = 106.915713652; + atomic_mass_map[511070000] = 106.924150641; + atomic_mass_map[521070000] = 106.935011573; + atomic_mass_map[531070000] = 106.94678; + atomic_mass_map[391080000] = 107.95996; + atomic_mass_map[401080000] = 107.94487; + atomic_mass_map[411080000] = 107.936074773; + atomic_mass_map[421080000] = 107.92403349; + atomic_mass_map[431080000] = 107.918495722; + atomic_mass_map[441080000] = 107.910188022; + atomic_mass_map[451080000] = 107.908714473; + atomic_mass_map[461080000] = 107.90389164; + atomic_mass_map[471080000] = 107.905950346; + atomic_mass_map[481080000] = 107.90418344; + atomic_mass_map[491080000] = 107.909693524; + atomic_mass_map[501080000] = 107.911894287; + atomic_mass_map[511080000] = 107.922226735; + atomic_mass_map[521080000] = 107.929380467; + atomic_mass_map[531080000] = 107.943481623; + atomic_mass_map[391090000] = 108.964358; + atomic_mass_map[401090000] = 108.95041; + atomic_mass_map[411090000] = 108.939216; + atomic_mass_map[421090000] = 108.92842416; + atomic_mass_map[431090000] = 108.920256356; + atomic_mass_map[441090000] = 108.913325956; + atomic_mass_map[451090000] = 108.908748821; + atomic_mass_map[461090000] = 108.905950406; + atomic_mass_map[471090000] = 108.904755282; + atomic_mass_map[481090000] = 108.904986653; + atomic_mass_map[491090000] = 108.907151381; + atomic_mass_map[501090000] = 108.91129206; + atomic_mass_map[511090000] = 108.918141122; + atomic_mass_map[521090000] = 108.927304534; + atomic_mass_map[531090000] = 108.938085287; + atomic_mass_map[541090000] = 108.950434864; + atomic_mass_map[401100000] = 109.95396; + atomic_mass_map[411100000] = 109.94403; + atomic_mass_map[421100000] = 109.930703673; + atomic_mass_map[431100000] = 109.923743534; + atomic_mass_map[441100000] = 109.914040696; + atomic_mass_map[451100000] = 109.911079429; + atomic_mass_map[461100000] = 109.905172199; + atomic_mass_map[471100000] = 109.906110226; + atomic_mass_map[481100000] = 109.903006606; + atomic_mass_map[491100000] = 109.90716981; + atomic_mass_map[501100000] = 109.907844835; + atomic_mass_map[511100000] = 109.916854287; + atomic_mass_map[521100000] = 109.922458091; + atomic_mass_map[531100000] = 109.935089034; + atomic_mass_map[541100000] = 109.944263102; + atomic_mass_map[401110000] = 110.959678; + atomic_mass_map[411110000] = 110.94753; + atomic_mass_map[421110000] = 110.935654257; + atomic_mass_map[431110000] = 110.925901257; + atomic_mass_map[441110000] = 110.917569857; + atomic_mass_map[451110000] = 110.91164231; + atomic_mass_map[461110000] = 110.907689679; + atomic_mass_map[471110000] = 110.905295923; + atomic_mass_map[481110000] = 110.904182872; + atomic_mass_map[491110000] = 110.905108458; + atomic_mass_map[501110000] = 110.907740127; + atomic_mass_map[511110000] = 110.913218189; + atomic_mass_map[521110000] = 110.921000589; + atomic_mass_map[531110000] = 110.930269214; + atomic_mass_map[541110000] = 110.941607206; + atomic_mass_map[401120000] = 111.963703; + atomic_mass_map[411120000] = 111.95247; + atomic_mass_map[421120000] = 111.93831; + atomic_mass_map[431120000] = 111.929945813; + atomic_mass_map[441120000] = 111.918809234; + atomic_mass_map[451120000] = 111.914403222; + atomic_mass_map[461120000] = 111.907329698; + atomic_mass_map[471120000] = 111.90704855; + atomic_mass_map[481120000] = 111.902762868; + atomic_mass_map[491120000] = 111.905537694; + atomic_mass_map[501120000] = 111.904823874; + atomic_mass_map[511120000] = 111.912399903; + atomic_mass_map[521120000] = 111.91672785; + atomic_mass_map[531120000] = 111.92800455; + atomic_mass_map[541120000] = 111.935558982; + atomic_mass_map[551120000] = 111.950308558; + atomic_mass_map[411130000] = 112.95651; + atomic_mass_map[421130000] = 112.94335; + atomic_mass_map[431130000] = 112.932569035; + atomic_mass_map[441130000] = 112.922843999; + atomic_mass_map[451130000] = 112.915439342; + atomic_mass_map[461130000] = 112.910261042; + atomic_mass_map[471130000] = 112.906572893; + atomic_mass_map[481130000] = 112.904408133; + atomic_mass_map[491130000] = 112.904061839; + atomic_mass_map[501130000] = 112.905175728; + atomic_mass_map[511130000] = 112.909374536; + atomic_mass_map[521130000] = 112.915891; + atomic_mass_map[531130000] = 112.923650064; + atomic_mass_map[541130000] = 112.93322165; + atomic_mass_map[551130000] = 112.944429144; + atomic_mass_map[411140000] = 113.96201; + atomic_mass_map[421140000] = 113.94653; + atomic_mass_map[431140000] = 113.93691; + atomic_mass_map[441140000] = 113.924613554; + atomic_mass_map[451140000] = 113.918718294; + atomic_mass_map[461140000] = 113.910368554; + atomic_mass_map[471140000] = 113.908823031; + atomic_mass_map[481140000] = 113.903365086; + atomic_mass_map[491140000] = 113.904917909; + atomic_mass_map[501140000] = 113.902782695; + atomic_mass_map[511140000] = 113.909290189; + atomic_mass_map[521140000] = 113.912089; + atomic_mass_map[531140000] = 113.92185; + atomic_mass_map[541140000] = 113.927980331; + atomic_mass_map[551140000] = 113.941296176; + atomic_mass_map[561140000] = 113.950660438; + atomic_mass_map[411150000] = 114.96634; + atomic_mass_map[421150000] = 114.95196; + atomic_mass_map[431150000] = 114.93998; + atomic_mass_map[441150000] = 114.928819898; + atomic_mass_map[451150000] = 114.920311589; + atomic_mass_map[461150000] = 114.913658506; + atomic_mass_map[471150000] = 114.908767355; + atomic_mass_map[481150000] = 114.905437513; + atomic_mass_map[491150000] = 114.903878776; + atomic_mass_map[501150000] = 114.903344699; + atomic_mass_map[511150000] = 114.906598; + atomic_mass_map[521150000] = 114.911902; + atomic_mass_map[531150000] = 114.918048; + atomic_mass_map[541150000] = 114.926293945; + atomic_mass_map[551150000] = 114.93591; + atomic_mass_map[561150000] = 114.94737; + atomic_mass_map[421160000] = 115.955448; + atomic_mass_map[431160000] = 115.94476; + atomic_mass_map[441160000] = 115.931219195; + atomic_mass_map[451160000] = 115.924058528; + atomic_mass_map[461160000] = 115.914296979; + atomic_mass_map[471160000] = 115.911386812; + atomic_mass_map[481160000] = 115.904763148; + atomic_mass_map[491160000] = 115.905259995; + atomic_mass_map[501160000] = 115.901742797; + atomic_mass_map[511160000] = 115.906793115; + atomic_mass_map[521160000] = 115.90846; + atomic_mass_map[531160000] = 115.916808658; + atomic_mass_map[541160000] = 115.921581112; + atomic_mass_map[551160000] = 115.933373; + atomic_mass_map[561160000] = 115.94128; + atomic_mass_map[571160000] = 115.956304; + atomic_mass_map[421170000] = 116.96117; + atomic_mass_map[431170000] = 116.94806; + atomic_mass_map[441170000] = 116.936103; + atomic_mass_map[451170000] = 116.926035391; + atomic_mass_map[461170000] = 116.917954721; + atomic_mass_map[471170000] = 116.911773934; + atomic_mass_map[481170000] = 116.907225956; + atomic_mass_map[491170000] = 116.904515678; + atomic_mass_map[501170000] = 116.902953983; + atomic_mass_map[511170000] = 116.904841508; + atomic_mass_map[521170000] = 116.908646298; + atomic_mass_map[531170000] = 116.913648312; + atomic_mass_map[541170000] = 116.920358761; + atomic_mass_map[551170000] = 116.928616726; + atomic_mass_map[561170000] = 116.93814057; + atomic_mass_map[571170000] = 116.949985; + atomic_mass_map[431180000] = 117.95299; + atomic_mass_map[441180000] = 117.93853; + atomic_mass_map[451180000] = 117.930340208; + atomic_mass_map[461180000] = 117.9190667; + atomic_mass_map[471180000] = 117.914595487; + atomic_mass_map[481180000] = 117.906921869; + atomic_mass_map[491180000] = 117.906356616; + atomic_mass_map[501180000] = 117.901606574; + atomic_mass_map[511180000] = 117.905532139; + atomic_mass_map[521180000] = 117.905853629; + atomic_mass_map[531180000] = 117.913074; + atomic_mass_map[541180000] = 117.91617868; + atomic_mass_map[551180000] = 117.926559519; + atomic_mass_map[561180000] = 117.93306; + atomic_mass_map[571180000] = 117.94673; + atomic_mass_map[431190000] = 118.95666; + atomic_mass_map[441190000] = 118.94357; + atomic_mass_map[451190000] = 118.932556954; + atomic_mass_map[461190000] = 118.923340223; + atomic_mass_map[471190000] = 118.915570287; + atomic_mass_map[481190000] = 118.909846851; + atomic_mass_map[491190000] = 118.905850708; + atomic_mass_map[501190000] = 118.903311172; + atomic_mass_map[511190000] = 118.903945471; + atomic_mass_map[521190000] = 118.906407108; + atomic_mass_map[531190000] = 118.910074; + atomic_mass_map[541190000] = 118.915410714; + atomic_mass_map[551190000] = 118.92237733; + atomic_mass_map[561190000] = 118.930659686; + atomic_mass_map[571190000] = 118.94099; + atomic_mass_map[581190000] = 118.95271; + atomic_mass_map[431200000] = 119.96187; + atomic_mass_map[441200000] = 119.94631; + atomic_mass_map[451200000] = 119.93686; + atomic_mass_map[461200000] = 119.924551089; + atomic_mass_map[471200000] = 119.918784768; + atomic_mass_map[481200000] = 119.909868068; + atomic_mass_map[491200000] = 119.907966567; + atomic_mass_map[501200000] = 119.902201634; + atomic_mass_map[511200000] = 119.905079385; + atomic_mass_map[521200000] = 119.9040593; + atomic_mass_map[531200000] = 119.910087251; + atomic_mass_map[541200000] = 119.91178427; + atomic_mass_map[551200000] = 119.920677279; + atomic_mass_map[561200000] = 119.926045; + atomic_mass_map[571200000] = 119.93807; + atomic_mass_map[581200000] = 119.94654; + atomic_mass_map[441210000] = 120.95164; + atomic_mass_map[451210000] = 120.93942; + atomic_mass_map[461210000] = 120.928950345; + atomic_mass_map[471210000] = 120.920125282; + atomic_mass_map[481210000] = 120.912963663; + atomic_mass_map[491210000] = 120.907851062; + atomic_mass_map[501210000] = 120.904242554; + atomic_mass_map[511210000] = 120.903811967; + atomic_mass_map[521210000] = 120.904943812; + atomic_mass_map[531210000] = 120.90740505; + atomic_mass_map[541210000] = 120.911453015; + atomic_mass_map[551210000] = 120.917227238; + atomic_mass_map[561210000] = 120.92405229; + atomic_mass_map[571210000] = 120.93315; + atomic_mass_map[581210000] = 120.94335; + atomic_mass_map[591210000] = 120.95532; + atomic_mass_map[441220000] = 121.95447; + atomic_mass_map[451220000] = 121.94399; + atomic_mass_map[461220000] = 121.930631696; + atomic_mass_map[471220000] = 121.923664449; + atomic_mass_map[481220000] = 121.913459053; + atomic_mass_map[491220000] = 121.910280738; + atomic_mass_map[501220000] = 121.903443774; + atomic_mass_map[511220000] = 121.905169948; + atomic_mass_map[521220000] = 121.903043455; + atomic_mass_map[531220000] = 121.907588841; + atomic_mass_map[541220000] = 121.908367658; + atomic_mass_map[551220000] = 121.916108146; + atomic_mass_map[561220000] = 121.919904; + atomic_mass_map[571220000] = 121.93071; + atomic_mass_map[581220000] = 121.93787; + atomic_mass_map[591220000] = 121.95175; + atomic_mass_map[441230000] = 122.95989; + atomic_mass_map[451230000] = 122.94685; + atomic_mass_map[461230000] = 122.93514; + atomic_mass_map[471230000] = 122.925337063; + atomic_mass_map[481230000] = 122.916892453; + atomic_mass_map[491230000] = 122.910433718; + atomic_mass_map[501230000] = 122.905725221; + atomic_mass_map[511230000] = 122.904213204; + atomic_mass_map[521230000] = 122.904269769; + atomic_mass_map[531230000] = 122.905588537; + atomic_mass_map[541230000] = 122.908481757; + atomic_mass_map[551230000] = 122.912996063; + atomic_mass_map[561230000] = 122.918781063; + atomic_mass_map[571230000] = 122.9263; + atomic_mass_map[581230000] = 122.93528; + atomic_mass_map[591230000] = 122.94596; + atomic_mass_map[441240000] = 123.96305; + atomic_mass_map[451240000] = 123.95151; + atomic_mass_map[461240000] = 123.93714; + atomic_mass_map[471240000] = 123.928931229; + atomic_mass_map[481240000] = 123.917657364; + atomic_mass_map[491240000] = 123.913182245; + atomic_mass_map[501240000] = 123.905276645; + atomic_mass_map[511240000] = 123.905934978; + atomic_mass_map[521240000] = 123.902817085; + atomic_mass_map[531240000] = 123.906209041; + atomic_mass_map[541240000] = 123.905891984; + atomic_mass_map[551240000] = 123.912257798; + atomic_mass_map[561240000] = 123.915093629; + atomic_mass_map[571240000] = 123.924574275; + atomic_mass_map[581240000] = 123.93031; + atomic_mass_map[591240000] = 123.94294; + atomic_mass_map[601240000] = 123.9522; + atomic_mass_map[451250000] = 124.95469; + atomic_mass_map[461250000] = 124.94179; + atomic_mass_map[471250000] = 124.931046; + atomic_mass_map[481250000] = 124.921257577; + atomic_mass_map[491250000] = 124.913604553; + atomic_mass_map[501250000] = 124.907786395; + atomic_mass_map[511250000] = 124.905253007; + atomic_mass_map[521250000] = 124.90442992; + atomic_mass_map[531250000] = 124.904629353; + atomic_mass_map[541250000] = 124.906394445; + atomic_mass_map[551250000] = 124.909727985; + atomic_mass_map[561250000] = 124.914471843; + atomic_mass_map[571250000] = 124.920815932; + atomic_mass_map[581250000] = 124.92844; + atomic_mass_map[591250000] = 124.9377; + atomic_mass_map[601250000] = 124.9489; + atomic_mass_map[451260000] = 125.95946; + atomic_mass_map[461260000] = 125.94416; + atomic_mass_map[471260000] = 125.93475; + atomic_mass_map[481260000] = 125.922429128; + atomic_mass_map[491260000] = 125.916507322; + atomic_mass_map[501260000] = 125.907658786; + atomic_mass_map[511260000] = 125.907252987; + atomic_mass_map[521260000] = 125.903310886; + atomic_mass_map[531260000] = 125.905623329; + atomic_mass_map[541260000] = 125.904298292; + atomic_mass_map[551260000] = 125.909446057; + atomic_mass_map[561260000] = 125.911250204; + atomic_mass_map[571260000] = 125.919512667; + atomic_mass_map[581260000] = 125.923971; + atomic_mass_map[591260000] = 125.93524; + atomic_mass_map[601260000] = 125.94311; + atomic_mass_map[611260000] = 125.95792; + atomic_mass_map[461270000] = 126.94907; + atomic_mass_map[471270000] = 126.93711; + atomic_mass_map[481270000] = 126.926472404; + atomic_mass_map[491270000] = 126.917446276; + atomic_mass_map[501270000] = 126.910389943; + atomic_mass_map[511270000] = 126.906924278; + atomic_mass_map[521270000] = 126.905225735; + atomic_mass_map[531270000] = 126.904471853; + atomic_mass_map[541270000] = 126.905182914; + atomic_mass_map[551270000] = 126.907417384; + atomic_mass_map[561270000] = 126.911091275; + atomic_mass_map[571270000] = 126.916375084; + atomic_mass_map[581270000] = 126.922727; + atomic_mass_map[591270000] = 126.93071; + atomic_mass_map[601270000] = 126.94038; + atomic_mass_map[611270000] = 126.95192; + atomic_mass_map[461280000] = 127.95183; + atomic_mass_map[471280000] = 127.94106; + atomic_mass_map[481280000] = 127.927812858; + atomic_mass_map[491280000] = 127.920401044; + atomic_mass_map[501280000] = 127.910507184; + atomic_mass_map[511280000] = 127.909145628; + atomic_mass_map[521280000] = 127.904461279; + atomic_mass_map[531280000] = 127.905808615; + atomic_mass_map[541280000] = 127.903531018; + atomic_mass_map[551280000] = 127.907748666; + atomic_mass_map[561280000] = 127.908341967; + atomic_mass_map[571280000] = 127.915592123; + atomic_mass_map[581280000] = 127.918911; + atomic_mass_map[591280000] = 127.928791; + atomic_mass_map[601280000] = 127.93525; + atomic_mass_map[611280000] = 127.9487; + atomic_mass_map[621280000] = 127.95842; + atomic_mass_map[471290000] = 128.94395; + atomic_mass_map[481290000] = 128.93182; + atomic_mass_map[491290000] = 128.921805301; + atomic_mass_map[501290000] = 128.913464711; + atomic_mass_map[511290000] = 128.909146665; + atomic_mass_map[521290000] = 128.90659646; + atomic_mass_map[531290000] = 128.904983669; + atomic_mass_map[541290000] = 128.904780861; + atomic_mass_map[551290000] = 128.906065683; + atomic_mass_map[561290000] = 128.908680798; + atomic_mass_map[571290000] = 128.912694431; + atomic_mass_map[581290000] = 128.918102; + atomic_mass_map[591290000] = 128.925095; + atomic_mass_map[601290000] = 128.933102; + atomic_mass_map[611290000] = 128.94323; + atomic_mass_map[621290000] = 128.95476; + atomic_mass_map[471300000] = 129.950703; + atomic_mass_map[481300000] = 129.933940679; + atomic_mass_map[491300000] = 129.924976585; + atomic_mass_map[501300000] = 129.91397383; + atomic_mass_map[511300000] = 129.911662054; + atomic_mass_map[521300000] = 129.906222748; + atomic_mass_map[531300000] = 129.906670193; + atomic_mass_map[541300000] = 129.903509349; + atomic_mass_map[551300000] = 129.906709283; + atomic_mass_map[561300000] = 129.906320669; + atomic_mass_map[571300000] = 129.912369413; + atomic_mass_map[581300000] = 129.914736; + atomic_mass_map[591300000] = 129.92359; + atomic_mass_map[601300000] = 129.928506; + atomic_mass_map[611300000] = 129.94053; + atomic_mass_map[621300000] = 129.949; + atomic_mass_map[631300000] = 129.963689; + atomic_mass_map[481310000] = 130.9406; + atomic_mass_map[491310000] = 130.926971529; + atomic_mass_map[501310000] = 130.917044954; + atomic_mass_map[511310000] = 130.911988799; + atomic_mass_map[521310000] = 130.908522213; + atomic_mass_map[531310000] = 130.906126305; + atomic_mass_map[541310000] = 130.905084057; + atomic_mass_map[551310000] = 130.905464899; + atomic_mass_map[561310000] = 130.906940977; + atomic_mass_map[571310000] = 130.91007; + atomic_mass_map[581310000] = 130.914429465; + atomic_mass_map[591310000] = 130.92023496; + atomic_mass_map[601310000] = 130.92724802; + atomic_mass_map[611310000] = 130.93567; + atomic_mass_map[621310000] = 130.94618; + atomic_mass_map[631310000] = 130.957842; + atomic_mass_map[481320000] = 131.94604; + atomic_mass_map[491320000] = 131.933001273; + atomic_mass_map[501320000] = 131.917826725; + atomic_mass_map[511320000] = 131.914507691; + atomic_mass_map[521320000] = 131.908546716; + atomic_mass_map[531320000] = 131.907993514; + atomic_mass_map[541320000] = 131.904155086; + atomic_mass_map[551320000] = 131.906433914; + atomic_mass_map[561320000] = 131.905061128; + atomic_mass_map[571320000] = 131.910118979; + atomic_mass_map[581320000] = 131.911463775; + atomic_mass_map[591320000] = 131.919255; + atomic_mass_map[601320000] = 131.923321237; + atomic_mass_map[611320000] = 131.93384; + atomic_mass_map[621320000] = 131.94087; + atomic_mass_map[631320000] = 131.95467; + atomic_mass_map[481330000] = 132.95285; + atomic_mass_map[491330000] = 132.93831; + atomic_mass_map[501330000] = 132.923913404; + atomic_mass_map[511330000] = 132.915273198; + atomic_mass_map[521330000] = 132.910968766; + atomic_mass_map[531330000] = 132.907796968; + atomic_mass_map[541330000] = 132.905910751; + atomic_mass_map[551330000] = 132.905451961; + atomic_mass_map[561330000] = 132.906007351; + atomic_mass_map[571330000] = 132.908218; + atomic_mass_map[581330000] = 132.911520402; + atomic_mass_map[591330000] = 132.916330561; + atomic_mass_map[601330000] = 132.922348; + atomic_mass_map[611330000] = 132.929782; + atomic_mass_map[621330000] = 132.93856; + atomic_mass_map[631330000] = 132.94929; + atomic_mass_map[641330000] = 132.96133; + atomic_mass_map[491340000] = 133.94454; + atomic_mass_map[501340000] = 133.928682064; + atomic_mass_map[511340000] = 133.920535676; + atomic_mass_map[521340000] = 133.911393959; + atomic_mass_map[531340000] = 133.909758836; + atomic_mass_map[541340000] = 133.905394664; + atomic_mass_map[551340000] = 133.906718503; + atomic_mass_map[561340000] = 133.904508182; + atomic_mass_map[571340000] = 133.908514011; + atomic_mass_map[581340000] = 133.908928142; + atomic_mass_map[591340000] = 133.915696729; + atomic_mass_map[601340000] = 133.91879021; + atomic_mass_map[611340000] = 133.928353; + atomic_mass_map[621340000] = 133.93411; + atomic_mass_map[631340000] = 133.9464; + atomic_mass_map[641340000] = 133.95566; + atomic_mass_map[491350000] = 134.95005; + atomic_mass_map[501350000] = 134.934908606; + atomic_mass_map[511350000] = 134.925185106; + atomic_mass_map[521350000] = 134.916555706; + atomic_mass_map[531350000] = 134.910048847; + atomic_mass_map[541350000] = 134.90722778; + atomic_mass_map[551350000] = 134.905977049; + atomic_mass_map[561350000] = 134.905688375; + atomic_mass_map[571350000] = 134.906984363; + atomic_mass_map[581350000] = 134.909160599; + atomic_mass_map[591350000] = 134.913111775; + atomic_mass_map[601350000] = 134.918181321; + atomic_mass_map[611350000] = 134.924823; + atomic_mass_map[621350000] = 134.93252; + atomic_mass_map[631350000] = 134.94187; + atomic_mass_map[641350000] = 134.95245; + atomic_mass_map[651350000] = 134.96476; + atomic_mass_map[501360000] = 135.93999; + atomic_mass_map[511360000] = 135.930745879; + atomic_mass_map[521360000] = 135.920100608; + atomic_mass_map[531360000] = 135.914604412; + atomic_mass_map[541360000] = 135.907214484; + atomic_mass_map[551360000] = 135.907311358; + atomic_mass_map[561360000] = 135.904575727; + atomic_mass_map[571360000] = 135.907634962; + atomic_mass_map[581360000] = 135.907129205; + atomic_mass_map[591360000] = 135.912677456; + atomic_mass_map[601360000] = 135.914976064; + atomic_mass_map[611360000] = 135.923584586; + atomic_mass_map[621360000] = 135.928275556; + atomic_mass_map[631360000] = 135.93962; + atomic_mass_map[641360000] = 135.9473; + atomic_mass_map[651360000] = 135.96129; + atomic_mass_map[501370000] = 136.94655; + atomic_mass_map[511370000] = 136.935555; + atomic_mass_map[521370000] = 136.925598852; + atomic_mass_map[531370000] = 136.918028188; + atomic_mass_map[541370000] = 136.911557781; + atomic_mass_map[551370000] = 136.907089231; + atomic_mass_map[561370000] = 136.905827141; + atomic_mass_map[571370000] = 136.906450385; + atomic_mass_map[581370000] = 136.907762364; + atomic_mass_map[591370000] = 136.91067915; + atomic_mass_map[601370000] = 136.914562448; + atomic_mass_map[611370000] = 136.920479523; + atomic_mass_map[621370000] = 136.926970517; + atomic_mass_map[631370000] = 136.93546; + atomic_mass_map[641370000] = 136.94502; + atomic_mass_map[651370000] = 136.95602; + atomic_mass_map[501380000] = 137.95184; + atomic_mass_map[511380000] = 137.94145; + atomic_mass_map[521380000] = 137.929472226; + atomic_mass_map[531380000] = 137.922726402; + atomic_mass_map[541380000] = 137.914146273; + atomic_mass_map[551380000] = 137.911017089; + atomic_mass_map[561380000] = 137.905246995; + atomic_mass_map[571380000] = 137.907114919; + atomic_mass_map[581380000] = 137.905991089; + atomic_mass_map[591380000] = 137.910754405; + atomic_mass_map[601380000] = 137.911949718; + atomic_mass_map[611380000] = 137.919548077; + atomic_mass_map[621380000] = 137.923243991; + atomic_mass_map[631380000] = 137.933709; + atomic_mass_map[641380000] = 137.94025; + atomic_mass_map[651380000] = 137.95312; + atomic_mass_map[661380000] = 137.9625; + atomic_mass_map[511390000] = 138.94655; + atomic_mass_map[521390000] = 138.935367194; + atomic_mass_map[531390000] = 138.926506206; + atomic_mass_map[541390000] = 138.918792203; + atomic_mass_map[551390000] = 138.913363758; + atomic_mass_map[561390000] = 138.908841099; + atomic_mass_map[571390000] = 138.906356256; + atomic_mass_map[581390000] = 138.906655111; + atomic_mass_map[591390000] = 138.908940762; + atomic_mass_map[601390000] = 138.911953649; + atomic_mass_map[611390000] = 138.91679967; + atomic_mass_map[621390000] = 138.922296635; + atomic_mass_map[631390000] = 138.92979231; + atomic_mass_map[641390000] = 138.93813; + atomic_mass_map[651390000] = 138.94833; + atomic_mass_map[661390000] = 138.95959; + atomic_mass_map[511400000] = 139.95283; + atomic_mass_map[521400000] = 139.939498567; + atomic_mass_map[531400000] = 139.931727; + atomic_mass_map[541400000] = 139.921645817; + atomic_mass_map[551400000] = 139.917283063; + atomic_mass_map[561400000] = 139.91060573; + atomic_mass_map[571400000] = 139.909480635; + atomic_mass_map[581400000] = 139.905443107; + atomic_mass_map[591400000] = 139.909080275; + atomic_mass_map[601400000] = 139.909549849; + atomic_mass_map[611400000] = 139.916039639; + atomic_mass_map[621400000] = 139.918994717; + atomic_mass_map[631400000] = 139.928087637; + atomic_mass_map[641400000] = 139.933674; + atomic_mass_map[651400000] = 139.945805049; + atomic_mass_map[661400000] = 139.95402; + atomic_mass_map[671400000] = 139.968589; + atomic_mass_map[521410000] = 140.9458; + atomic_mass_map[531410000] = 140.93569; + atomic_mass_map[541410000] = 140.926787184; + atomic_mass_map[551410000] = 140.920045491; + atomic_mass_map[561410000] = 140.914403333; + atomic_mass_map[571410000] = 140.91096603; + atomic_mass_map[581410000] = 140.908280674; + atomic_mass_map[591410000] = 140.907657568; + atomic_mass_map[601410000] = 140.909614653; + atomic_mass_map[611410000] = 140.913555084; + atomic_mass_map[621410000] = 140.918481636; + atomic_mass_map[631410000] = 140.924931754; + atomic_mass_map[641410000] = 140.932126; + atomic_mass_map[651410000] = 140.941448; + atomic_mass_map[661410000] = 140.95128; + atomic_mass_map[671410000] = 140.963108; + atomic_mass_map[521420000] = 141.95022; + atomic_mass_map[531420000] = 141.941202; + atomic_mass_map[541420000] = 141.929973098; + atomic_mass_map[551420000] = 141.924295991; + atomic_mass_map[561420000] = 141.916432382; + atomic_mass_map[571420000] = 141.91409089; + atomic_mass_map[581420000] = 141.909250375; + atomic_mass_map[591420000] = 141.910049607; + atomic_mass_map[601420000] = 141.907728996; + atomic_mass_map[611420000] = 141.912890411; + atomic_mass_map[621420000] = 141.915204385; + atomic_mass_map[631420000] = 141.92344169; + atomic_mass_map[641420000] = 141.928116; + atomic_mass_map[651420000] = 141.939280859; + atomic_mass_map[661420000] = 141.946194; + atomic_mass_map[671420000] = 141.96001; + atomic_mass_map[681420000] = 141.9701; + atomic_mass_map[521430000] = 142.95676; + atomic_mass_map[531430000] = 142.94565; + atomic_mass_map[541430000] = 142.935369554; + atomic_mass_map[551430000] = 142.927349327; + atomic_mass_map[561430000] = 142.920625293; + atomic_mass_map[571430000] = 142.916079512; + atomic_mass_map[581430000] = 142.91239212; + atomic_mass_map[591430000] = 142.910822796; + atomic_mass_map[601430000] = 142.909819989; + atomic_mass_map[611430000] = 142.910938262; + atomic_mass_map[621430000] = 142.914635303; + atomic_mass_map[631430000] = 142.920298681; + atomic_mass_map[641430000] = 142.926750682; + atomic_mass_map[651430000] = 142.935137335; + atomic_mass_map[661430000] = 142.943994335; + atomic_mass_map[671430000] = 142.95486; + atomic_mass_map[681430000] = 142.96662; + atomic_mass_map[531440000] = 143.95139; + atomic_mass_map[541440000] = 143.938945079; + atomic_mass_map[551440000] = 143.932076313; + atomic_mass_map[561440000] = 143.922954866; + atomic_mass_map[571440000] = 143.919645589; + atomic_mass_map[581440000] = 143.913652939; + atomic_mass_map[591440000] = 143.913310859; + atomic_mass_map[601440000] = 143.910092974; + atomic_mass_map[611440000] = 143.912596396; + atomic_mass_map[621440000] = 143.912006466; + atomic_mass_map[631440000] = 143.918819553; + atomic_mass_map[641440000] = 143.922963; + atomic_mass_map[651440000] = 143.933045; + atomic_mass_map[661440000] = 143.939269515; + atomic_mass_map[671440000] = 143.952109715; + atomic_mass_map[681440000] = 143.9607; + atomic_mass_map[691440000] = 143.976283; + atomic_mass_map[531450000] = 144.95605; + atomic_mass_map[541450000] = 144.944719634; + atomic_mass_map[551450000] = 144.935527435; + atomic_mass_map[561450000] = 144.9275184; + atomic_mass_map[571450000] = 144.921808068; + atomic_mass_map[581450000] = 144.917265228; + atomic_mass_map[591450000] = 144.914518156; + atomic_mass_map[601450000] = 144.912579322; + atomic_mass_map[611450000] = 144.912755935; + atomic_mass_map[621450000] = 144.913417339; + atomic_mass_map[631450000] = 144.916272629; + atomic_mass_map[641450000] = 144.921712821; + atomic_mass_map[651450000] = 144.928821947; + atomic_mass_map[661450000] = 144.937473995; + atomic_mass_map[671450000] = 144.947267395; + atomic_mass_map[681450000] = 144.95805; + atomic_mass_map[691450000] = 144.970389; + atomic_mass_map[541460000] = 145.948518249; + atomic_mass_map[551460000] = 145.940344271; + atomic_mass_map[561460000] = 145.930283712; + atomic_mass_map[571460000] = 145.925875174; + atomic_mass_map[581460000] = 145.918802412; + atomic_mass_map[591460000] = 145.91767985; + atomic_mass_map[601460000] = 145.913122628; + atomic_mass_map[611460000] = 145.914702396; + atomic_mass_map[621460000] = 145.913046991; + atomic_mass_map[631460000] = 145.917211039; + atomic_mass_map[641460000] = 145.918318817; + atomic_mass_map[651460000] = 145.927252984; + atomic_mass_map[661460000] = 145.93284453; + atomic_mass_map[671460000] = 145.944993506; + atomic_mass_map[681460000] = 145.95241836; + atomic_mass_map[691460000] = 145.966837; + atomic_mass_map[541470000] = 146.95426; + atomic_mass_map[551470000] = 146.944156156; + atomic_mass_map[561470000] = 146.9353039; + atomic_mass_map[571470000] = 146.9284178; + atomic_mass_map[581470000] = 146.922689913; + atomic_mass_map[591470000] = 146.919007518; + atomic_mass_map[601470000] = 146.916106136; + atomic_mass_map[611470000] = 146.915144988; + atomic_mass_map[621470000] = 146.914904435; + atomic_mass_map[631470000] = 146.916752659; + atomic_mass_map[641470000] = 146.919101384; + atomic_mass_map[651470000] = 146.924054788; + atomic_mass_map[661470000] = 146.931082715; + atomic_mass_map[671470000] = 146.940142296; + atomic_mass_map[681470000] = 146.949964459; + atomic_mass_map[691470000] = 146.961379891; + atomic_mass_map[541480000] = 147.95813; + atomic_mass_map[551480000] = 147.949225137; + atomic_mass_map[561480000] = 147.938170578; + atomic_mass_map[571480000] = 147.9326794; + atomic_mass_map[581480000] = 147.924424225; + atomic_mass_map[591480000] = 147.922130083; + atomic_mass_map[601480000] = 147.916899294; + atomic_mass_map[611480000] = 147.917481945; + atomic_mass_map[621480000] = 147.914829226; + atomic_mass_map[631480000] = 147.918089243; + atomic_mass_map[641480000] = 147.918121511; + atomic_mass_map[651480000] = 147.924281552; + atomic_mass_map[661480000] = 147.927156571; + atomic_mass_map[671480000] = 147.937743928; + atomic_mass_map[681480000] = 147.944735029; + atomic_mass_map[691480000] = 147.958384029; + atomic_mass_map[701480000] = 147.96758; + atomic_mass_map[551490000] = 148.95302; + atomic_mass_map[561490000] = 148.94308; + atomic_mass_map[571490000] = 148.93535126; + atomic_mass_map[581490000] = 148.9284269; + atomic_mass_map[591490000] = 148.9237361; + atomic_mass_map[601490000] = 148.920154849; + atomic_mass_map[611490000] = 148.918342277; + atomic_mass_map[621490000] = 148.917192062; + atomic_mass_map[631490000] = 148.917937763; + atomic_mass_map[641490000] = 148.919348117; + atomic_mass_map[651490000] = 148.923253549; + atomic_mass_map[661490000] = 148.927321692; + atomic_mass_map[671490000] = 148.933802646; + atomic_mass_map[681490000] = 148.942306; + atomic_mass_map[691490000] = 148.95289; + atomic_mass_map[701490000] = 148.96436; + atomic_mass_map[551500000] = 149.95833; + atomic_mass_map[561500000] = 149.94605; + atomic_mass_map[571500000] = 149.93947; + atomic_mass_map[581500000] = 149.930384042; + atomic_mass_map[591500000] = 149.926676502; + atomic_mass_map[601500000] = 149.920902249; + atomic_mass_map[611500000] = 149.920990941; + atomic_mass_map[621500000] = 149.917282919; + atomic_mass_map[631500000] = 149.919707671; + atomic_mass_map[641500000] = 149.918664422; + atomic_mass_map[651500000] = 149.923664941; + atomic_mass_map[661500000] = 149.925593264; + atomic_mass_map[671500000] = 149.933498408; + atomic_mass_map[681500000] = 149.937915567; + atomic_mass_map[691500000] = 149.95009; + atomic_mass_map[701500000] = 149.95852; + atomic_mass_map[711500000] = 149.973548; + atomic_mass_map[551510000] = 150.96258; + atomic_mass_map[561510000] = 150.95127; + atomic_mass_map[571510000] = 150.94232; + atomic_mass_map[581510000] = 150.9342722; + atomic_mass_map[591510000] = 150.928309285; + atomic_mass_map[601510000] = 150.923840289; + atomic_mass_map[611510000] = 150.921217539; + atomic_mass_map[621510000] = 150.919939796; + atomic_mass_map[631510000] = 150.919857803; + atomic_mass_map[641510000] = 150.92035595; + atomic_mass_map[651510000] = 150.923109599; + atomic_mass_map[661510000] = 150.926191564; + atomic_mass_map[671510000] = 150.931698345; + atomic_mass_map[681510000] = 150.937448567; + atomic_mass_map[691510000] = 150.945487875; + atomic_mass_map[701510000] = 150.955402497; + atomic_mass_map[711510000] = 150.967677; + atomic_mass_map[561520000] = 151.95481; + atomic_mass_map[571520000] = 151.94682; + atomic_mass_map[581520000] = 151.9366; + atomic_mass_map[591520000] = 151.9315529; + atomic_mass_map[601520000] = 151.924692216; + atomic_mass_map[611520000] = 151.923506181; + atomic_mass_map[621520000] = 151.919739721; + atomic_mass_map[631520000] = 151.921752184; + atomic_mass_map[641520000] = 151.919799494; + atomic_mass_map[651520000] = 151.924082936; + atomic_mass_map[661520000] = 151.924725286; + atomic_mass_map[671520000] = 151.931723623; + atomic_mass_map[681520000] = 151.935057085; + atomic_mass_map[691520000] = 151.944422; + atomic_mass_map[701520000] = 151.9502727; + atomic_mass_map[711520000] = 151.96412; + atomic_mass_map[561530000] = 152.96036; + atomic_mass_map[571530000] = 152.95036; + atomic_mass_map[581530000] = 152.94093; + atomic_mass_map[591530000] = 152.933903539; + atomic_mass_map[601530000] = 152.927717978; + atomic_mass_map[611530000] = 152.924156686; + atomic_mass_map[621530000] = 152.92210465; + atomic_mass_map[631530000] = 152.921238003; + atomic_mass_map[641530000] = 152.921758027; + atomic_mass_map[651530000] = 152.923442403; + atomic_mass_map[661530000] = 152.925772378; + atomic_mass_map[671530000] = 152.930206429; + atomic_mass_map[681530000] = 152.93508044; + atomic_mass_map[691530000] = 152.942040101; + atomic_mass_map[701530000] = 152.94932; + atomic_mass_map[711530000] = 152.958751054; + atomic_mass_map[721530000] = 152.97069; + atomic_mass_map[571540000] = 153.95517; + atomic_mass_map[581540000] = 153.9438; + atomic_mass_map[591540000] = 153.937525741; + atomic_mass_map[601540000] = 153.929484894; + atomic_mass_map[611540000] = 153.926471531; + atomic_mass_map[621540000] = 153.922216861; + atomic_mass_map[631540000] = 153.922986962; + atomic_mass_map[641540000] = 153.92087406; + atomic_mass_map[651540000] = 153.924684767; + atomic_mass_map[661540000] = 153.924429277; + atomic_mass_map[671540000] = 153.930606834; + atomic_mass_map[681540000] = 153.932790842; + atomic_mass_map[691540000] = 153.941570033; + atomic_mass_map[701540000] = 153.946395655; + atomic_mass_map[711540000] = 153.957364; + atomic_mass_map[721540000] = 153.96486; + atomic_mass_map[571550000] = 154.95901; + atomic_mass_map[581550000] = 154.94855; + atomic_mass_map[591550000] = 154.940509281; + atomic_mass_map[601550000] = 154.933135691; + atomic_mass_map[611550000] = 154.928137048; + atomic_mass_map[621550000] = 154.924647748; + atomic_mass_map[631550000] = 154.922901107; + atomic_mass_map[641550000] = 154.922630473; + atomic_mass_map[651550000] = 154.923510547; + atomic_mass_map[661550000] = 154.925759086; + atomic_mass_map[671550000] = 154.929104049; + atomic_mass_map[681550000] = 154.933215911; + atomic_mass_map[691550000] = 154.93920966; + atomic_mass_map[701550000] = 154.945783132; + atomic_mass_map[711550000] = 154.9543206; + atomic_mass_map[721550000] = 154.96311; + atomic_mass_map[731550000] = 154.974245; + atomic_mass_map[581560000] = 155.95183; + atomic_mass_map[591560000] = 155.94464; + atomic_mass_map[601560000] = 155.935078894; + atomic_mass_map[611560000] = 155.931117516; + atomic_mass_map[621560000] = 155.925536067; + atomic_mass_map[631560000] = 155.924760494; + atomic_mass_map[641560000] = 155.922131241; + atomic_mass_map[651560000] = 155.924755181; + atomic_mass_map[661560000] = 155.924284713; + atomic_mass_map[671560000] = 155.929706112; + atomic_mass_map[681560000] = 155.931067313; + atomic_mass_map[691560000] = 155.938991573; + atomic_mass_map[701560000] = 155.942824698; + atomic_mass_map[711560000] = 155.953032522; + atomic_mass_map[721560000] = 155.959347805; + atomic_mass_map[731560000] = 155.97203; + atomic_mass_map[581570000] = 156.95705; + atomic_mass_map[591570000] = 156.94789; + atomic_mass_map[601570000] = 156.939386061; + atomic_mass_map[611570000] = 156.933121393; + atomic_mass_map[621570000] = 156.928418698; + atomic_mass_map[631570000] = 156.925433446; + atomic_mass_map[641570000] = 156.923968569; + atomic_mass_map[651570000] = 156.924033028; + atomic_mass_map[661570000] = 156.92547066; + atomic_mass_map[671570000] = 156.928254427; + atomic_mass_map[681570000] = 156.931948658; + atomic_mass_map[691570000] = 156.93694412; + atomic_mass_map[701570000] = 156.942645349; + atomic_mass_map[711570000] = 156.950126667; + atomic_mass_map[721570000] = 156.958236; + atomic_mass_map[731570000] = 156.968176167; + atomic_mass_map[741570000] = 156.97884; + atomic_mass_map[591580000] = 157.95241; + atomic_mass_map[601580000] = 157.94197; + atomic_mass_map[611580000] = 157.936565144; + atomic_mass_map[621580000] = 157.929951004; + atomic_mass_map[631580000] = 157.927798606; + atomic_mass_map[641580000] = 157.924112348; + atomic_mass_map[651580000] = 157.925420947; + atomic_mass_map[661580000] = 157.924415875; + atomic_mass_map[671580000] = 157.928945969; + atomic_mass_map[681580000] = 157.929893474; + atomic_mass_map[691580000] = 157.936979525; + atomic_mass_map[701580000] = 157.939870549; + atomic_mass_map[711580000] = 157.949315507; + atomic_mass_map[721580000] = 157.954801092; + atomic_mass_map[731580000] = 157.966541; + atomic_mass_map[741580000] = 157.974562; + atomic_mass_map[591590000] = 158.95589; + atomic_mass_map[601590000] = 158.94653; + atomic_mass_map[611590000] = 158.939286502; + atomic_mass_map[621590000] = 158.933217226; + atomic_mass_map[631590000] = 158.929100067; + atomic_mass_map[641590000] = 158.926396969; + atomic_mass_map[651590000] = 158.92535471; + atomic_mass_map[661590000] = 158.925746958; + atomic_mass_map[671590000] = 158.927719703; + atomic_mass_map[681590000] = 158.93069181; + atomic_mass_map[691590000] = 158.934975; + atomic_mass_map[701590000] = 158.940054623; + atomic_mass_map[711590000] = 158.946635615; + atomic_mass_map[721590000] = 158.953995669; + atomic_mass_map[731590000] = 158.963022556; + atomic_mass_map[741590000] = 158.972638; + atomic_mass_map[751590000] = 158.984179; + atomic_mass_map[601600000] = 159.9494; + atomic_mass_map[611600000] = 159.9431; + atomic_mass_map[621600000] = 159.935335311; + atomic_mass_map[631600000] = 159.931850939; + atomic_mass_map[641600000] = 159.927062411; + atomic_mass_map[651600000] = 159.927175556; + atomic_mass_map[661600000] = 159.925204646; + atomic_mass_map[671600000] = 159.928736606; + atomic_mass_map[681600000] = 159.92907713; + atomic_mass_map[691600000] = 159.935263106; + atomic_mass_map[701600000] = 159.937557406; + atomic_mass_map[711600000] = 159.946033; + atomic_mass_map[721600000] = 159.950690749; + atomic_mass_map[731600000] = 159.96148751; + atomic_mass_map[741600000] = 159.968462584; + atomic_mass_map[751600000] = 159.981823; + atomic_mass_map[601610000] = 160.95428; + atomic_mass_map[611610000] = 160.94607; + atomic_mass_map[621610000] = 160.93916017; + atomic_mass_map[631610000] = 160.933664091; + atomic_mass_map[641610000] = 160.929677476; + atomic_mass_map[651610000] = 160.927577825; + atomic_mass_map[661610000] = 160.926940492; + atomic_mass_map[671610000] = 160.927861547; + atomic_mass_map[681610000] = 160.930004599; + atomic_mass_map[691610000] = 160.933549; + atomic_mass_map[701610000] = 160.937907138; + atomic_mass_map[711610000] = 160.943572; + atomic_mass_map[721610000] = 160.95027837; + atomic_mass_map[731610000] = 160.958452265; + atomic_mass_map[741610000] = 160.967197; + atomic_mass_map[751610000] = 160.977572951; + atomic_mass_map[761610000] = 160.989029; + atomic_mass_map[611620000] = 161.95022; + atomic_mass_map[621620000] = 161.94146; + atomic_mass_map[631620000] = 161.936988761; + atomic_mass_map[641620000] = 161.930993017; + atomic_mass_map[651620000] = 161.92949536; + atomic_mass_map[661620000] = 161.926805573; + atomic_mass_map[671620000] = 161.929102274; + atomic_mass_map[681620000] = 161.928788364; + atomic_mass_map[691620000] = 161.934002277; + atomic_mass_map[701620000] = 161.935773604; + atomic_mass_map[711620000] = 161.943282776; + atomic_mass_map[721620000] = 161.947214837; + atomic_mass_map[731620000] = 161.957294083; + atomic_mass_map[741620000] = 161.963499142; + atomic_mass_map[751620000] = 161.975844; + atomic_mass_map[761620000] = 161.984431; + atomic_mass_map[611630000] = 162.95357; + atomic_mass_map[621630000] = 162.94555; + atomic_mass_map[631630000] = 162.939195675; + atomic_mass_map[641630000] = 162.934176855; + atomic_mass_map[651630000] = 162.930654659; + atomic_mass_map[661630000] = 162.928738284; + atomic_mass_map[671630000] = 162.928741027; + atomic_mass_map[681630000] = 162.930040797; + atomic_mass_map[691630000] = 162.932659172; + atomic_mass_map[701630000] = 162.936339632; + atomic_mass_map[711630000] = 162.941179; + atomic_mass_map[721630000] = 162.947112946; + atomic_mass_map[731630000] = 162.95433711; + atomic_mass_map[741630000] = 162.962524342; + atomic_mass_map[751630000] = 162.97207986; + atomic_mass_map[761630000] = 162.98241; + atomic_mass_map[621640000] = 163.94836; + atomic_mass_map[631640000] = 163.942744; + atomic_mass_map[641640000] = 163.93583; + atomic_mass_map[651640000] = 163.933357961; + atomic_mass_map[661640000] = 163.929181874; + atomic_mass_map[671640000] = 163.930240273; + atomic_mass_map[681640000] = 163.929208791; + atomic_mass_map[691640000] = 163.933543614; + atomic_mass_map[701640000] = 163.934494934; + atomic_mass_map[711640000] = 163.941339; + atomic_mass_map[721640000] = 163.944370845; + atomic_mass_map[731640000] = 163.953534; + atomic_mass_map[741640000] = 163.958960683; + atomic_mass_map[751640000] = 163.97045287; + atomic_mass_map[761640000] = 163.978021712; + atomic_mass_map[771640000] = 163.991909; + atomic_mass_map[621650000] = 164.95297; + atomic_mass_map[631650000] = 164.945587; + atomic_mass_map[641650000] = 164.93936; + atomic_mass_map[651650000] = 164.93498; + atomic_mass_map[661650000] = 164.931710456; + atomic_mass_map[671650000] = 164.930328835; + atomic_mass_map[681650000] = 164.930734496; + atomic_mass_map[691650000] = 164.93244314; + atomic_mass_map[701650000] = 164.935270241; + atomic_mass_map[711650000] = 164.939406758; + atomic_mass_map[721650000] = 164.944567; + atomic_mass_map[731650000] = 164.950780572; + atomic_mass_map[741650000] = 164.958280788; + atomic_mass_map[751650000] = 164.96710266; + atomic_mass_map[761650000] = 164.976602; + atomic_mass_map[771650000] = 164.987501; + atomic_mass_map[631660000] = 165.94962; + atomic_mass_map[641660000] = 165.94146; + atomic_mass_map[651660000] = 165.937859521; + atomic_mass_map[661660000] = 165.932813863; + atomic_mass_map[671660000] = 165.932290927; + atomic_mass_map[681660000] = 165.93029953; + atomic_mass_map[691660000] = 165.9335606; + atomic_mass_map[701660000] = 165.933874749; + atomic_mass_map[711660000] = 165.939859; + atomic_mass_map[721660000] = 165.94218; + atomic_mass_map[731660000] = 165.950512; + atomic_mass_map[741660000] = 165.95503121; + atomic_mass_map[751660000] = 165.965760821; + atomic_mass_map[761660000] = 165.972692476; + atomic_mass_map[771660000] = 165.985664; + atomic_mass_map[781660000] = 165.994855; + atomic_mass_map[631670000] = 166.95289; + atomic_mass_map[641670000] = 166.94545; + atomic_mass_map[651670000] = 166.93996; + atomic_mass_map[661670000] = 166.935661379; + atomic_mass_map[671670000] = 166.93313855; + atomic_mass_map[681670000] = 166.932054617; + atomic_mass_map[691670000] = 166.932856192; + atomic_mass_map[701670000] = 166.934952988; + atomic_mass_map[711670000] = 166.93827; + atomic_mass_map[721670000] = 166.9426; + atomic_mass_map[731670000] = 166.948093; + atomic_mass_map[741670000] = 166.95480456; + atomic_mass_map[751670000] = 166.962595; + atomic_mass_map[761670000] = 166.971548768; + atomic_mass_map[771670000] = 166.981666315; + atomic_mass_map[781670000] = 166.992695; + atomic_mass_map[641680000] = 167.94808; + atomic_mass_map[651680000] = 167.9434; + atomic_mass_map[661680000] = 167.937133273; + atomic_mass_map[671680000] = 167.935522173; + atomic_mass_map[681680000] = 167.932376688; + atomic_mass_map[691680000] = 167.934177409; + atomic_mass_map[701680000] = 167.933889602; + atomic_mass_map[711680000] = 167.938735635; + atomic_mass_map[721680000] = 167.940568; + atomic_mass_map[731680000] = 167.948047; + atomic_mass_map[741680000] = 167.951805537; + atomic_mass_map[751680000] = 167.961572608; + atomic_mass_map[761680000] = 167.967807751; + atomic_mass_map[771680000] = 167.979906642; + atomic_mass_map[781680000] = 167.988128665; + atomic_mass_map[641690000] = 168.9526; + atomic_mass_map[651690000] = 168.94597; + atomic_mass_map[661690000] = 168.940313531; + atomic_mass_map[671690000] = 168.936878189; + atomic_mass_map[681690000] = 168.93459685; + atomic_mass_map[691690000] = 168.934217889; + atomic_mass_map[701690000] = 168.935182512; + atomic_mass_map[711690000] = 168.937644149; + atomic_mass_map[721690000] = 168.941259; + atomic_mass_map[731690000] = 168.946011; + atomic_mass_map[741690000] = 168.951778845; + atomic_mass_map[751690000] = 168.958766063; + atomic_mass_map[761690000] = 168.967017574; + atomic_mass_map[771690000] = 168.976298488; + atomic_mass_map[781690000] = 168.986567; + atomic_mass_map[791690000] = 168.99808; + atomic_mass_map[651700000] = 169.94984; + atomic_mass_map[661700000] = 169.94239; + atomic_mass_map[671700000] = 169.939624846; + atomic_mass_map[681700000] = 169.93547023; + atomic_mass_map[691700000] = 169.935806032; + atomic_mass_map[701700000] = 169.934766376; + atomic_mass_map[711700000] = 169.938478365; + atomic_mass_map[721700000] = 169.939609; + atomic_mass_map[731700000] = 169.946175; + atomic_mass_map[741700000] = 169.949231588; + atomic_mass_map[751700000] = 169.958220071; + atomic_mass_map[761700000] = 169.963578454; + atomic_mass_map[771700000] = 169.974922; + atomic_mass_map[781700000] = 169.982496345; + atomic_mass_map[791700000] = 169.995972; + atomic_mass_map[651710000] = 170.95273; + atomic_mass_map[661710000] = 170.94612; + atomic_mass_map[671710000] = 170.941471022; + atomic_mass_map[681710000] = 170.938035681; + atomic_mass_map[691710000] = 170.936433871; + atomic_mass_map[701710000] = 170.936330208; + atomic_mass_map[711710000] = 170.93791696; + atomic_mass_map[721710000] = 170.940492; + atomic_mass_map[731710000] = 170.944476; + atomic_mass_map[741710000] = 170.949451; + atomic_mass_map[751710000] = 170.955716; + atomic_mass_map[761710000] = 170.963173969; + atomic_mass_map[771710000] = 170.971640252; + atomic_mass_map[781710000] = 170.981245248; + atomic_mass_map[791710000] = 170.991875791; + atomic_mass_map[801710000] = 171.003529; + atomic_mass_map[661720000] = 171.94846; + atomic_mass_map[671720000] = 171.94473; + atomic_mass_map[681720000] = 171.939361858; + atomic_mass_map[691720000] = 171.938405521; + atomic_mass_map[701720000] = 171.936385872; + atomic_mass_map[711720000] = 171.939089103; + atomic_mass_map[721720000] = 171.939449716; + atomic_mass_map[731720000] = 171.944895; + atomic_mass_map[741720000] = 171.947292; + atomic_mass_map[751720000] = 171.955419665; + atomic_mass_map[761720000] = 171.960017317; + atomic_mass_map[771720000] = 171.970607036; + atomic_mass_map[781720000] = 171.977350921; + atomic_mass_map[791720000] = 171.989942284; + atomic_mass_map[801720000] = 171.998808967; + atomic_mass_map[661730000] = 172.95283; + atomic_mass_map[671730000] = 172.94702; + atomic_mass_map[681730000] = 172.9424; + atomic_mass_map[691730000] = 172.939608371; + atomic_mass_map[701730000] = 172.938215136; + atomic_mass_map[711730000] = 172.938934029; + atomic_mass_map[721730000] = 172.940513; + atomic_mass_map[731730000] = 172.94375; + atomic_mass_map[741730000] = 172.947689; + atomic_mass_map[751730000] = 172.953243; + atomic_mass_map[761730000] = 172.959808465; + atomic_mass_map[771730000] = 172.967505636; + atomic_mass_map[781730000] = 172.976443058; + atomic_mass_map[791730000] = 172.986240924; + atomic_mass_map[801730000] = 172.997091; + atomic_mass_map[671740000] = 173.95095; + atomic_mass_map[681740000] = 173.94423; + atomic_mass_map[691740000] = 173.942172953; + atomic_mass_map[701740000] = 173.938866437; + atomic_mass_map[711740000] = 173.940340854; + atomic_mass_map[721740000] = 173.940046141; + atomic_mass_map[731740000] = 173.944454; + atomic_mass_map[741740000] = 173.946079; + atomic_mass_map[751740000] = 173.953115; + atomic_mass_map[761740000] = 173.957063507; + atomic_mass_map[771740000] = 173.966861045; + atomic_mass_map[781740000] = 173.972819528; + atomic_mass_map[791740000] = 173.984717; + atomic_mass_map[801740000] = 173.992864748; + atomic_mass_map[671750000] = 174.95362; + atomic_mass_map[681750000] = 174.94777; + atomic_mass_map[691750000] = 174.9438412; + atomic_mass_map[701750000] = 174.941280797; + atomic_mass_map[711750000] = 174.940775191; + atomic_mass_map[721750000] = 174.941509187; + atomic_mass_map[731750000] = 174.943737; + atomic_mass_map[741750000] = 174.946717; + atomic_mass_map[751750000] = 174.951381; + atomic_mass_map[761750000] = 174.956945313; + atomic_mass_map[771750000] = 174.964149589; + atomic_mass_map[781750000] = 174.972409721; + atomic_mass_map[791750000] = 174.981303712; + atomic_mass_map[801750000] = 174.991440747; + atomic_mass_map[681760000] = 175.94994; + atomic_mass_map[691760000] = 175.946999449; + atomic_mass_map[701760000] = 175.942576447; + atomic_mass_map[711760000] = 175.94268968; + atomic_mass_map[721760000] = 175.941407628; + atomic_mass_map[731760000] = 175.944857; + atomic_mass_map[741760000] = 175.945634; + atomic_mass_map[751760000] = 175.951623; + atomic_mass_map[761760000] = 175.954806; + atomic_mass_map[771760000] = 175.963650389; + atomic_mass_map[781760000] = 175.968938362; + atomic_mass_map[791760000] = 175.980250432; + atomic_mass_map[801760000] = 175.987360863; + atomic_mass_map[811760000] = 176.000624028; + atomic_mass_map[681770000] = 176.95399; + atomic_mass_map[691770000] = 176.94904; + atomic_mass_map[701770000] = 176.945265586; + atomic_mass_map[711770000] = 176.943761525; + atomic_mass_map[721770000] = 176.943227717; + atomic_mass_map[731770000] = 176.944479469; + atomic_mass_map[741770000] = 176.946643; + atomic_mass_map[751770000] = 176.950328; + atomic_mass_map[761770000] = 176.954965628; + atomic_mass_map[771770000] = 176.9613015; + atomic_mass_map[781770000] = 176.968469537; + atomic_mass_map[791770000] = 176.976870439; + atomic_mass_map[801770000] = 176.986277319; + atomic_mass_map[811770000] = 176.996430829; + atomic_mass_map[691780000] = 177.95264; + atomic_mass_map[701780000] = 177.946651444; + atomic_mass_map[711780000] = 177.945958018; + atomic_mass_map[721780000] = 177.943705833; + atomic_mass_map[731780000] = 177.945678; + atomic_mass_map[741780000] = 177.945883303; + atomic_mass_map[751780000] = 177.950989; + atomic_mass_map[761780000] = 177.953253627; + atomic_mass_map[771780000] = 177.961082; + atomic_mass_map[781780000] = 177.965649523; + atomic_mass_map[791780000] = 177.97603192; + atomic_mass_map[801780000] = 177.982483769; + atomic_mass_map[811780000] = 177.994854; + atomic_mass_map[821780000] = 178.003831243; + atomic_mass_map[691790000] = 178.95534; + atomic_mass_map[701790000] = 178.95004; + atomic_mass_map[711790000] = 178.947330935; + atomic_mass_map[721790000] = 178.945823212; + atomic_mass_map[731790000] = 178.945936555; + atomic_mass_map[741790000] = 178.947077043; + atomic_mass_map[751790000] = 178.94998913; + atomic_mass_map[761790000] = 178.953816881; + atomic_mass_map[771790000] = 178.959120178; + atomic_mass_map[781790000] = 178.965358953; + atomic_mass_map[791790000] = 178.973173654; + atomic_mass_map[801790000] = 178.981831329; + atomic_mass_map[811790000] = 178.991110696; + atomic_mass_map[821790000] = 179.002201112; + atomic_mass_map[701800000] = 179.95212; + atomic_mass_map[711800000] = 179.94988825; + atomic_mass_map[721800000] = 179.946557042; + atomic_mass_map[731800000] = 179.947464832; + atomic_mass_map[741800000] = 179.946710805; + atomic_mass_map[751800000] = 179.950791568; + atomic_mass_map[761800000] = 179.952375485; + atomic_mass_map[771800000] = 179.959229446; + atomic_mass_map[781800000] = 179.963031955; + atomic_mass_map[791800000] = 179.972523397; + atomic_mass_map[801800000] = 179.978260335; + atomic_mass_map[811800000] = 179.990056524; + atomic_mass_map[821800000] = 179.997928286; + atomic_mass_map[701810000] = 180.95589; + atomic_mass_map[711810000] = 180.951908; + atomic_mass_map[721810000] = 180.949108338; + atomic_mass_map[731810000] = 180.947995769; + atomic_mass_map[741810000] = 180.948197783; + atomic_mass_map[751810000] = 180.950057673; + atomic_mass_map[761810000] = 180.953247188; + atomic_mass_map[771810000] = 180.957625456; + atomic_mass_map[781810000] = 180.963097588; + atomic_mass_map[791810000] = 180.970079047; + atomic_mass_map[801810000] = 180.977819371; + atomic_mass_map[811810000] = 180.986259979; + atomic_mass_map[821810000] = 180.99665331; + atomic_mass_map[711820000] = 181.95504; + atomic_mass_map[721820000] = 181.950561185; + atomic_mass_map[731820000] = 181.950151853; + atomic_mass_map[741820000] = 181.948203945; + atomic_mass_map[751820000] = 181.951209869; + atomic_mass_map[761820000] = 181.952110187; + atomic_mass_map[771820000] = 181.958076296; + atomic_mass_map[781820000] = 181.961171823; + atomic_mass_map[791820000] = 181.969617874; + atomic_mass_map[801820000] = 181.974689351; + atomic_mass_map[811820000] = 181.985713159; + atomic_mass_map[821820000] = 181.992672466; + atomic_mass_map[711830000] = 182.957363; + atomic_mass_map[721830000] = 182.953530444; + atomic_mass_map[731830000] = 182.95137262; + atomic_mass_map[741830000] = 182.950222748; + atomic_mass_map[751830000] = 182.950819638; + atomic_mass_map[761830000] = 182.953124719; + atomic_mass_map[771830000] = 182.956839968; + atomic_mass_map[781830000] = 182.961596804; + atomic_mass_map[791830000] = 182.967590635; + atomic_mass_map[801830000] = 182.974444783; + atomic_mass_map[811830000] = 182.982192839; + atomic_mass_map[821830000] = 182.991872098; + atomic_mass_map[711840000] = 183.96091; + atomic_mass_map[721840000] = 183.955446243; + atomic_mass_map[731840000] = 183.954007694; + atomic_mass_map[741840000] = 183.950930916; + atomic_mass_map[751840000] = 183.952522809; + atomic_mass_map[761840000] = 183.952488536; + atomic_mass_map[771840000] = 183.957476; + atomic_mass_map[781840000] = 183.959915113; + atomic_mass_map[791840000] = 183.967451524; + atomic_mass_map[801840000] = 183.971713528; + atomic_mass_map[811840000] = 183.981885851; + atomic_mass_map[821840000] = 183.988135701; + atomic_mass_map[831840000] = 184.001274756; + atomic_mass_map[711850000] = 184.96362; + atomic_mass_map[721850000] = 184.958862; + atomic_mass_map[731850000] = 184.955559084; + atomic_mass_map[741850000] = 184.953418974; + atomic_mass_map[751850000] = 184.952954486; + atomic_mass_map[761850000] = 184.954041741; + atomic_mass_map[771850000] = 184.956698; + atomic_mass_map[781850000] = 184.960613659; + atomic_mass_map[791850000] = 184.965789569; + atomic_mass_map[801850000] = 184.971899388; + atomic_mass_map[811850000] = 184.97878905; + atomic_mass_map[821850000] = 184.987610004; + atomic_mass_map[831850000] = 184.9976; + atomic_mass_map[721860000] = 185.960897; + atomic_mass_map[731860000] = 185.958550667; + atomic_mass_map[741860000] = 185.954362771; + atomic_mass_map[751860000] = 185.954985595; + atomic_mass_map[761860000] = 185.953835044; + atomic_mass_map[771860000] = 185.957944153; + atomic_mass_map[781860000] = 185.959350812; + atomic_mass_map[791860000] = 185.965952703; + atomic_mass_map[801860000] = 185.969362272; + atomic_mass_map[811860000] = 185.978650841; + atomic_mass_map[821860000] = 185.984238331; + atomic_mass_map[831860000] = 185.996643681; + atomic_mass_map[841860000] = 186.004393241; + atomic_mass_map[721870000] = 186.96477; + atomic_mass_map[731870000] = 186.960386; + atomic_mass_map[741870000] = 186.957158841; + atomic_mass_map[751870000] = 186.955750071; + atomic_mass_map[761870000] = 186.955747422; + atomic_mass_map[771870000] = 186.957542; + atomic_mass_map[781870000] = 186.960616976; + atomic_mass_map[791870000] = 186.964543155; + atomic_mass_map[801870000] = 186.969814428; + atomic_mass_map[811870000] = 186.975906348; + atomic_mass_map[821870000] = 186.983910895; + atomic_mass_map[831870000] = 186.993147184; + atomic_mass_map[841870000] = 187.003041054; + atomic_mass_map[721880000] = 187.96685; + atomic_mass_map[731880000] = 187.963916; + atomic_mass_map[741880000] = 187.958486177; + atomic_mass_map[751880000] = 187.95811151; + atomic_mass_map[761880000] = 187.955835174; + atomic_mass_map[771880000] = 187.958828095; + atomic_mass_map[781880000] = 187.959388889; + atomic_mass_map[791880000] = 187.965349392; + atomic_mass_map[801880000] = 187.967566887; + atomic_mass_map[811880000] = 187.976020886; + atomic_mass_map[821880000] = 187.980874815; + atomic_mass_map[831880000] = 187.992286943; + atomic_mass_map[841880000] = 187.999415569; + atomic_mass_map[721890000] = 188.97084; + atomic_mass_map[731890000] = 188.96583; + atomic_mass_map[741890000] = 188.961763; + atomic_mass_map[751890000] = 188.95922602; + atomic_mass_map[761890000] = 188.958144162; + atomic_mass_map[771890000] = 188.958715028; + atomic_mass_map[781890000] = 188.960831282; + atomic_mass_map[791890000] = 188.963948286; + atomic_mass_map[801890000] = 188.968194927; + atomic_mass_map[811890000] = 188.973588471; + atomic_mass_map[821890000] = 188.980807; + atomic_mass_map[831890000] = 188.989194984; + atomic_mass_map[841890000] = 188.998473429; + atomic_mass_map[731900000] = 189.96939; + atomic_mass_map[741900000] = 189.963090589; + atomic_mass_map[751900000] = 189.96174426; + atomic_mass_map[761900000] = 189.958443702; + atomic_mass_map[771900000] = 189.960541215; + atomic_mass_map[781900000] = 189.959929707; + atomic_mass_map[791900000] = 189.96469839; + atomic_mass_map[801900000] = 189.966322735; + atomic_mass_map[811900000] = 189.973828; + atomic_mass_map[821900000] = 189.978081999; + atomic_mass_map[831900000] = 189.988621561; + atomic_mass_map[841900000] = 189.995100569; + atomic_mass_map[731910000] = 190.97156; + atomic_mass_map[741910000] = 190.966531; + atomic_mass_map[751910000] = 190.963121551; + atomic_mass_map[761910000] = 190.960926361; + atomic_mass_map[771910000] = 190.960589293; + atomic_mass_map[781910000] = 190.961672912; + atomic_mass_map[791910000] = 190.963702248; + atomic_mass_map[801910000] = 190.96715716; + atomic_mass_map[811910000] = 190.971784199; + atomic_mass_map[821910000] = 190.978276; + atomic_mass_map[831910000] = 190.985786556; + atomic_mass_map[841910000] = 190.994558462; + atomic_mass_map[851910000] = 191.004147909; + atomic_mass_map[731920000] = 191.97514; + atomic_mass_map[741920000] = 191.96817; + atomic_mass_map[751920000] = 191.966088; + atomic_mass_map[761920000] = 191.961476998; + atomic_mass_map[771920000] = 191.962600247; + atomic_mass_map[781920000] = 191.961038746; + atomic_mass_map[791920000] = 191.964813694; + atomic_mass_map[801920000] = 191.965634702; + atomic_mass_map[811920000] = 191.972225; + atomic_mass_map[821920000] = 191.975775008; + atomic_mass_map[831920000] = 191.985469058; + atomic_mass_map[841920000] = 191.991335925; + atomic_mass_map[851920000] = 192.003151707; + atomic_mass_map[741930000] = 192.97178; + atomic_mass_map[751930000] = 192.967541; + atomic_mass_map[761930000] = 192.96414787; + atomic_mass_map[771930000] = 192.962921587; + atomic_mass_map[781930000] = 192.96298238; + atomic_mass_map[791930000] = 192.964137257; + atomic_mass_map[801930000] = 192.966652658; + atomic_mass_map[811930000] = 192.970501998; + atomic_mass_map[821930000] = 192.976173234; + atomic_mass_map[831930000] = 192.982959813; + atomic_mass_map[841930000] = 192.991025678; + atomic_mass_map[851930000] = 192.999927418; + atomic_mass_map[861930000] = 193.009707979; + atomic_mass_map[741940000] = 193.97367; + atomic_mass_map[751940000] = 193.97076; + atomic_mass_map[761940000] = 193.96517724; + atomic_mass_map[771940000] = 193.965073536; + atomic_mass_map[781940000] = 193.96268085; + atomic_mass_map[791940000] = 193.965417754; + atomic_mass_map[801940000] = 193.965449112; + atomic_mass_map[811940000] = 193.971081412; + atomic_mass_map[821940000] = 193.97401225; + atomic_mass_map[831940000] = 193.982785; + atomic_mass_map[841940000] = 193.988186101; + atomic_mass_map[851940000] = 193.999236139; + atomic_mass_map[861940000] = 194.006144389; + atomic_mass_map[751950000] = 194.97254; + atomic_mass_map[761950000] = 194.968318; + atomic_mass_map[771950000] = 194.96597473; + atomic_mass_map[781950000] = 194.964791719; + atomic_mass_map[791950000] = 194.965035225; + atomic_mass_map[801950000] = 194.96672054; + atomic_mass_map[811950000] = 194.969774268; + atomic_mass_map[821950000] = 194.974542922; + atomic_mass_map[831950000] = 194.980648781; + atomic_mass_map[841950000] = 194.988125532; + atomic_mass_map[851950000] = 194.996268546; + atomic_mass_map[861950000] = 195.005421673; + atomic_mass_map[751960000] = 195.9758; + atomic_mass_map[761960000] = 195.969641463; + atomic_mass_map[771960000] = 195.968397112; + atomic_mass_map[781960000] = 195.964952091; + atomic_mass_map[791960000] = 195.966569908; + atomic_mass_map[801960000] = 195.96583256; + atomic_mass_map[811960000] = 195.970481193; + atomic_mass_map[821960000] = 195.972774233; + atomic_mass_map[831960000] = 195.980666509; + atomic_mass_map[841960000] = 195.985525902; + atomic_mass_map[851960000] = 195.995799619; + atomic_mass_map[861960000] = 196.002115998; + atomic_mass_map[751970000] = 196.97799; + atomic_mass_map[761970000] = 196.97283; + atomic_mass_map[771970000] = 196.969655415; + atomic_mass_map[781970000] = 196.967340687; + atomic_mass_map[791970000] = 196.966568786; + atomic_mass_map[801970000] = 196.967212847; + atomic_mass_map[811970000] = 196.96957589; + atomic_mass_map[821970000] = 196.973431166; + atomic_mass_map[831970000] = 196.978865099; + atomic_mass_map[841970000] = 196.985659522; + atomic_mass_map[851970000] = 196.993189187; + atomic_mass_map[861970000] = 197.00158462; + atomic_mass_map[751980000] = 197.9816; + atomic_mass_map[761980000] = 197.97441; + atomic_mass_map[771980000] = 197.97228; + atomic_mass_map[781980000] = 197.96789492; + atomic_mass_map[791980000] = 197.96824242; + atomic_mass_map[801980000] = 197.966768602; + atomic_mass_map[811980000] = 197.970483065; + atomic_mass_map[821980000] = 197.972034077; + atomic_mass_map[831980000] = 197.979206; + atomic_mass_map[841980000] = 197.983389132; + atomic_mass_map[851980000] = 197.992784; + atomic_mass_map[861980000] = 197.998679156; + atomic_mass_map[761990000] = 198.97801; + atomic_mass_map[771990000] = 198.973805301; + atomic_mass_map[781990000] = 198.970595224; + atomic_mass_map[791990000] = 198.968765282; + atomic_mass_map[801990000] = 198.968280643; + atomic_mass_map[811990000] = 198.969877; + atomic_mass_map[821990000] = 198.97291268; + atomic_mass_map[831990000] = 198.97767301; + atomic_mass_map[841990000] = 198.983667115; + atomic_mass_map[851990000] = 198.990527654; + atomic_mass_map[861990000] = 198.998389856; + atomic_mass_map[871990000] = 199.007258594; + atomic_mass_map[762000000] = 199.97984; + atomic_mass_map[772000000] = 199.9768; + atomic_mass_map[782000000] = 199.971442807; + atomic_mass_map[792000000] = 199.970756456; + atomic_mass_map[802000000] = 199.96832659; + atomic_mass_map[812000000] = 199.970963258; + atomic_mass_map[822000000] = 199.971818893; + atomic_mass_map[832000000] = 199.978131179; + atomic_mass_map[842000000] = 199.98179879; + atomic_mass_map[852000000] = 199.990351015; + atomic_mass_map[862000000] = 199.995690431; + atomic_mass_map[872000000] = 200.006586003; + atomic_mass_map[762010000] = 200.98364; + atomic_mass_map[772010000] = 200.97864; + atomic_mass_map[782010000] = 200.974513112; + atomic_mass_map[792010000] = 200.971657484; + atomic_mass_map[802010000] = 200.970302839; + atomic_mass_map[812010000] = 200.970822212; + atomic_mass_map[822010000] = 200.972882917; + atomic_mass_map[832010000] = 200.977010416; + atomic_mass_map[842010000] = 200.982259806; + atomic_mass_map[852010000] = 200.988417147; + atomic_mass_map[862010000] = 200.99562801; + atomic_mass_map[872010000] = 201.003866593; + atomic_mass_map[882010000] = 201.012712; + atomic_mass_map[762020000] = 201.98595; + atomic_mass_map[772020000] = 201.98199; + atomic_mass_map[782020000] = 201.975639; + atomic_mass_map[792020000] = 201.973856; + atomic_mass_map[802020000] = 201.9706434; + atomic_mass_map[812020000] = 201.972102441; + atomic_mass_map[822020000] = 201.972152026; + atomic_mass_map[832020000] = 201.977733861; + atomic_mass_map[842020000] = 201.980757657; + atomic_mass_map[852020000] = 201.988630302; + atomic_mass_map[862020000] = 201.993264277; + atomic_mass_map[872020000] = 202.00332; + atomic_mass_map[882020000] = 202.009759744; + atomic_mass_map[772030000] = 202.98423; + atomic_mass_map[782030000] = 202.97893; + atomic_mass_map[792030000] = 202.975154446; + atomic_mass_map[802030000] = 202.972872837; + atomic_mass_map[812030000] = 202.972344593; + atomic_mass_map[822030000] = 202.973391126; + atomic_mass_map[832030000] = 202.976892779; + atomic_mass_map[842030000] = 202.981416133; + atomic_mass_map[852030000] = 202.98694299; + atomic_mass_map[862030000] = 202.993387741; + atomic_mass_map[872030000] = 203.000940729; + atomic_mass_map[882030000] = 203.009304274; + atomic_mass_map[772040000] = 203.9896; + atomic_mass_map[782040000] = 203.98076; + atomic_mass_map[792040000] = 203.977831; + atomic_mass_map[802040000] = 203.973493981; + atomic_mass_map[812040000] = 203.9738639; + atomic_mass_map[822040000] = 203.973043981; + atomic_mass_map[832040000] = 203.977836062; + atomic_mass_map[842040000] = 203.980310339; + atomic_mass_map[852040000] = 203.987251198; + atomic_mass_map[862040000] = 203.991429922; + atomic_mass_map[872040000] = 204.000652059; + atomic_mass_map[882040000] = 204.006491866; + atomic_mass_map[782050000] = 204.98608; + atomic_mass_map[792050000] = 204.97985; + atomic_mass_map[802050000] = 204.976073417; + atomic_mass_map[812050000] = 204.974427801; + atomic_mass_map[822050000] = 204.974482157; + atomic_mass_map[832050000] = 204.977386694; + atomic_mass_map[842050000] = 204.981203091; + atomic_mass_map[852050000] = 204.986075861; + atomic_mass_map[862050000] = 204.99171884; + atomic_mass_map[872050000] = 204.998593858; + atomic_mass_map[882050000] = 205.006268245; + atomic_mass_map[782060000] = 205.98966; + atomic_mass_map[792060000] = 205.98474; + atomic_mass_map[802060000] = 205.977514401; + atomic_mass_map[812060000] = 205.976110589; + atomic_mass_map[822060000] = 205.974465683; + atomic_mass_map[832060000] = 205.978499317; + atomic_mass_map[842060000] = 205.980473991; + atomic_mass_map[852060000] = 205.986656933; + atomic_mass_map[862060000] = 205.990214219; + atomic_mass_map[872060000] = 205.998666132; + atomic_mass_map[882060000] = 206.003828053; + atomic_mass_map[892060000] = 206.014452; + atomic_mass_map[792070000] = 206.9884; + atomic_mass_map[802070000] = 206.9823; + atomic_mass_map[812070000] = 206.977419712; + atomic_mass_map[822070000] = 206.975897297; + atomic_mass_map[832070000] = 206.978471022; + atomic_mass_map[842070000] = 206.981593762; + atomic_mass_map[852070000] = 206.985800332; + atomic_mass_map[862070000] = 206.990730254; + atomic_mass_map[872070000] = 206.996946478; + atomic_mass_map[882070000] = 207.003799159; + atomic_mass_map[892070000] = 207.01196583; + atomic_mass_map[792080000] = 207.99345; + atomic_mass_map[802080000] = 207.985759; + atomic_mass_map[812080000] = 207.982019001; + atomic_mass_map[822080000] = 207.976652481; + atomic_mass_map[832080000] = 207.97974253; + atomic_mass_map[842080000] = 207.981246092; + atomic_mass_map[852080000] = 207.986613302; + atomic_mass_map[862080000] = 207.989634687; + atomic_mass_map[872080000] = 207.997138132; + atomic_mass_map[882080000] = 208.001841122; + atomic_mass_map[892080000] = 208.011550406; + atomic_mass_map[902080000] = 208.017900275; + atomic_mass_map[792090000] = 208.99735; + atomic_mass_map[802090000] = 208.99072; + atomic_mass_map[812090000] = 208.985359353; + atomic_mass_map[822090000] = 208.981090461; + atomic_mass_map[832090000] = 208.980399068; + atomic_mass_map[842090000] = 208.982430836; + atomic_mass_map[852090000] = 208.986170215; + atomic_mass_map[862090000] = 208.99041451; + atomic_mass_map[872090000] = 208.995954932; + atomic_mass_map[882090000] = 209.001990455; + atomic_mass_map[892090000] = 209.009494762; + atomic_mass_map[902090000] = 209.017752974; + atomic_mass_map[792100000] = 210.0025; + atomic_mass_map[802100000] = 209.99424; + atomic_mass_map[812100000] = 209.990073958; + atomic_mass_map[822100000] = 209.984188861; + atomic_mass_map[832100000] = 209.984120705; + atomic_mass_map[842100000] = 209.982874076; + atomic_mass_map[852100000] = 209.987147898; + atomic_mass_map[862100000] = 209.989689107; + atomic_mass_map[872100000] = 209.996422409; + atomic_mass_map[882100000] = 210.000494169; + atomic_mass_map[892100000] = 210.009436052; + atomic_mass_map[902100000] = 210.015093642; + atomic_mass_map[802110000] = 210.99933; + atomic_mass_map[812110000] = 210.993475; + atomic_mass_map[822110000] = 210.988737125; + atomic_mass_map[832110000] = 210.987269741; + atomic_mass_map[842110000] = 210.986653562; + atomic_mass_map[852110000] = 210.987496614; + atomic_mass_map[862110000] = 210.99060111; + atomic_mass_map[872110000] = 210.995555723; + atomic_mass_map[882110000] = 211.000893214; + atomic_mass_map[892110000] = 211.007731899; + atomic_mass_map[902110000] = 211.014929468; + atomic_mass_map[802120000] = 212.00296; + atomic_mass_map[812120000] = 211.998335; + atomic_mass_map[822120000] = 211.991897703; + atomic_mass_map[832120000] = 211.991286026; + atomic_mass_map[842120000] = 211.988868376; + atomic_mass_map[852120000] = 211.990737688; + atomic_mass_map[862120000] = 211.990703919; + atomic_mass_map[872120000] = 211.996225652; + atomic_mass_map[882120000] = 211.999786715; + atomic_mass_map[892120000] = 212.007813171; + atomic_mass_map[902120000] = 212.012987595; + atomic_mass_map[912120000] = 212.023202993; + atomic_mass_map[802130000] = 213.00823; + atomic_mass_map[812130000] = 213.001915; + atomic_mass_map[822130000] = 212.996562894; + atomic_mass_map[832130000] = 212.994385067; + atomic_mass_map[842130000] = 212.992857623; + atomic_mass_map[852130000] = 212.992936978; + atomic_mass_map[862130000] = 212.993883069; + atomic_mass_map[872130000] = 212.996186041; + atomic_mass_map[882130000] = 213.000384258; + atomic_mass_map[892130000] = 213.00660902; + atomic_mass_map[902130000] = 213.013009223; + atomic_mass_map[912130000] = 213.021109239; + atomic_mass_map[802140000] = 214.012; + atomic_mass_map[812140000] = 214.00694; + atomic_mass_map[822140000] = 213.999805917; + atomic_mass_map[832140000] = 213.998711926; + atomic_mass_map[842140000] = 213.995201683; + atomic_mass_map[852140000] = 213.996372066; + atomic_mass_map[862140000] = 213.995362956; + atomic_mass_map[872140000] = 213.998971333; + atomic_mass_map[882140000] = 214.000099727; + atomic_mass_map[892140000] = 214.006918488; + atomic_mass_map[902140000] = 214.011500159; + atomic_mass_map[912140000] = 214.020918483; + atomic_mass_map[802150000] = 215.0174; + atomic_mass_map[812150000] = 215.01064; + atomic_mass_map[822150000] = 215.004741; + atomic_mass_map[832150000] = 215.001769823; + atomic_mass_map[842150000] = 214.999420146; + atomic_mass_map[852150000] = 214.998652849; + atomic_mass_map[862150000] = 214.99874589; + atomic_mass_map[872150000] = 215.000341838; + atomic_mass_map[882150000] = 215.00272042; + atomic_mass_map[892150000] = 215.006474511; + atomic_mass_map[902150000] = 215.011724774; + atomic_mass_map[912150000] = 215.019182929; + atomic_mass_map[802160000] = 216.02132; + atomic_mass_map[812160000] = 216.0158; + atomic_mass_map[822160000] = 216.00803; + atomic_mass_map[832160000] = 216.006305989; + atomic_mass_map[842160000] = 216.001915186; + atomic_mass_map[852160000] = 216.002423555; + atomic_mass_map[862160000] = 216.000271859; + atomic_mass_map[872160000] = 216.003189865; + atomic_mass_map[882160000] = 216.003533423; + atomic_mass_map[892160000] = 216.008743482; + atomic_mass_map[902160000] = 216.011056007; + atomic_mass_map[912160000] = 216.019108913; + atomic_mass_map[812170000] = 217.01966; + atomic_mass_map[822170000] = 217.01314; + atomic_mass_map[832170000] = 217.009372; + atomic_mass_map[842170000] = 217.006318159; + atomic_mass_map[852170000] = 217.004719222; + atomic_mass_map[862170000] = 217.003928018; + atomic_mass_map[872170000] = 217.004632282; + atomic_mass_map[882170000] = 217.006320726; + atomic_mass_map[892170000] = 217.009343872; + atomic_mass_map[902170000] = 217.013116701; + atomic_mass_map[912170000] = 217.018325363; + atomic_mass_map[922170000] = 217.024661; + atomic_mass_map[812180000] = 218.02479; + atomic_mass_map[822180000] = 218.01659; + atomic_mass_map[832180000] = 218.014188; + atomic_mass_map[842180000] = 218.008973546; + atomic_mass_map[852180000] = 218.008694723; + atomic_mass_map[862180000] = 218.005601586; + atomic_mass_map[872180000] = 218.007578653; + atomic_mass_map[882180000] = 218.007140631; + atomic_mass_map[892180000] = 218.01164164; + atomic_mass_map[902180000] = 218.013276331; + atomic_mass_map[912180000] = 218.020058579; + atomic_mass_map[922180000] = 218.023523472; + atomic_mass_map[822190000] = 219.02177; + atomic_mass_map[832190000] = 219.01748; + atomic_mass_map[842190000] = 219.013614; + atomic_mass_map[852190000] = 219.011161848; + atomic_mass_map[862190000] = 219.009480361; + atomic_mass_map[872190000] = 219.009252427; + atomic_mass_map[882190000] = 219.010085484; + atomic_mass_map[892190000] = 219.01242073; + atomic_mass_map[902190000] = 219.015537481; + atomic_mass_map[912190000] = 219.019904029; + atomic_mass_map[922190000] = 219.02499913; + atomic_mass_map[932190000] = 219.03143; + atomic_mass_map[822200000] = 220.02541; + atomic_mass_map[832200000] = 220.02235; + atomic_mass_map[842200000] = 220.016386; + atomic_mass_map[852200000] = 220.015433; + atomic_mass_map[862200000] = 220.01139413; + atomic_mass_map[872200000] = 220.012327702; + atomic_mass_map[882200000] = 220.011025872; + atomic_mass_map[892200000] = 220.014754854; + atomic_mass_map[902200000] = 220.015748148; + atomic_mass_map[912200000] = 220.021705; + atomic_mass_map[922200000] = 220.02462; + atomic_mass_map[932200000] = 220.03254; + atomic_mass_map[832210000] = 221.02587; + atomic_mass_map[842210000] = 221.021228; + atomic_mass_map[852210000] = 221.018017; + atomic_mass_map[862210000] = 221.015537076; + atomic_mass_map[872210000] = 221.014255163; + atomic_mass_map[882210000] = 221.01391768; + atomic_mass_map[892210000] = 221.015591579; + atomic_mass_map[902210000] = 221.018184072; + atomic_mass_map[912210000] = 221.021874941; + atomic_mass_map[922210000] = 221.026284; + atomic_mass_map[932210000] = 221.03204; + atomic_mass_map[832220000] = 222.03078; + atomic_mass_map[842220000] = 222.02414; + atomic_mass_map[852220000] = 222.022494; + atomic_mass_map[862220000] = 222.017578246; + atomic_mass_map[872220000] = 222.017552192; + atomic_mass_map[882220000] = 222.015374846; + atomic_mass_map[892220000] = 222.017844181; + atomic_mass_map[902220000] = 222.018468521; + atomic_mass_map[912220000] = 222.023784; + atomic_mass_map[922220000] = 222.026003; + atomic_mass_map[932220000] = 222.0333; + atomic_mass_map[832230000] = 223.0345; + atomic_mass_map[842230000] = 223.02907; + atomic_mass_map[852230000] = 223.025151; + atomic_mass_map[862230000] = 223.021889286; + atomic_mass_map[872230000] = 223.019736013; + atomic_mass_map[882230000] = 223.018502327; + atomic_mass_map[892230000] = 223.019137747; + atomic_mass_map[902230000] = 223.020811853; + atomic_mass_map[912230000] = 223.023962614; + atomic_mass_map[922230000] = 223.027739187; + atomic_mass_map[932230000] = 223.03285; + atomic_mass_map[832240000] = 224.03947; + atomic_mass_map[842240000] = 224.03211; + atomic_mass_map[852240000] = 224.029749; + atomic_mass_map[862240000] = 224.024095805; + atomic_mass_map[872240000] = 224.023398; + atomic_mass_map[882240000] = 224.020211968; + atomic_mass_map[892240000] = 224.021723163; + atomic_mass_map[902240000] = 224.021464382; + atomic_mass_map[912240000] = 224.025617614; + atomic_mass_map[922240000] = 224.027605163; + atomic_mass_map[932240000] = 224.03422; + atomic_mass_map[842250000] = 225.03707; + atomic_mass_map[852250000] = 225.03263; + atomic_mass_map[862250000] = 225.028485574; + atomic_mass_map[872250000] = 225.025572682; + atomic_mass_map[882250000] = 225.023611857; + atomic_mass_map[892250000] = 225.023229987; + atomic_mass_map[902250000] = 225.023951363; + atomic_mass_map[912250000] = 225.026131009; + atomic_mass_map[922250000] = 225.02939135; + atomic_mass_map[932250000] = 225.033910892; + atomic_mass_map[842260000] = 226.04031; + atomic_mass_map[852260000] = 226.03716; + atomic_mass_map[862260000] = 226.030861382; + atomic_mass_map[872260000] = 226.029566; + atomic_mass_map[882260000] = 226.02541033; + atomic_mass_map[892260000] = 226.026098383; + atomic_mass_map[902260000] = 226.024903383; + atomic_mass_map[912260000] = 226.027948082; + atomic_mass_map[922260000] = 226.029339101; + atomic_mass_map[932260000] = 226.035188; + atomic_mass_map[842270000] = 227.04539; + atomic_mass_map[852270000] = 227.04024; + atomic_mass_map[862270000] = 227.035304396; + atomic_mass_map[872270000] = 227.031869; + atomic_mass_map[882270000] = 227.029178349; + atomic_mass_map[892270000] = 227.027752283; + atomic_mass_map[902270000] = 227.027704227; + atomic_mass_map[912270000] = 227.028805351; + atomic_mass_map[922270000] = 227.031156773; + atomic_mass_map[932270000] = 227.034957129; + atomic_mass_map[852280000] = 228.04475; + atomic_mass_map[862280000] = 228.037835418; + atomic_mass_map[872280000] = 228.035823175; + atomic_mass_map[882280000] = 228.031070728; + atomic_mass_map[892280000] = 228.031021547; + atomic_mass_map[902280000] = 228.028741272; + atomic_mass_map[912280000] = 228.031051673; + atomic_mass_map[922280000] = 228.031371492; + atomic_mass_map[932280000] = 228.036066866; + atomic_mass_map[942280000] = 228.038732491; + atomic_mass_map[852290000] = 229.04812; + atomic_mass_map[862290000] = 229.042257277; + atomic_mass_map[872290000] = 229.038298; + atomic_mass_map[882290000] = 229.034942262; + atomic_mass_map[892290000] = 229.032955884; + atomic_mass_map[902290000] = 229.031762713; + atomic_mass_map[912290000] = 229.032097236; + atomic_mass_map[922290000] = 229.03350628; + atomic_mass_map[932290000] = 229.036264139; + atomic_mass_map[942290000] = 229.040143614; + atomic_mass_map[862300000] = 230.04514; + atomic_mass_map[872300000] = 230.042416349; + atomic_mass_map[882300000] = 230.037054781; + atomic_mass_map[892300000] = 230.036327; + atomic_mass_map[902300000] = 230.03313413; + atomic_mass_map[912300000] = 230.034541047; + atomic_mass_map[922300000] = 230.033940096; + atomic_mass_map[932300000] = 230.037827926; + atomic_mass_map[942300000] = 230.039650283; + atomic_mass_map[952300000] = 230.04609; + atomic_mass_map[862310000] = 231.04987; + atomic_mass_map[872310000] = 231.045158; + atomic_mass_map[882310000] = 231.041027087; + atomic_mass_map[892310000] = 231.038393; + atomic_mass_map[902310000] = 231.036304628; + atomic_mass_map[912310000] = 231.035884243; + atomic_mass_map[922310000] = 231.036293861; + atomic_mass_map[932310000] = 231.038245364; + atomic_mass_map[942310000] = 231.041101511; + atomic_mass_map[952310000] = 231.04556; + atomic_mass_map[872320000] = 232.049368; + atomic_mass_map[882320000] = 232.04347527; + atomic_mass_map[892320000] = 232.042034; + atomic_mass_map[902320000] = 232.03805576; + atomic_mass_map[912320000] = 232.038591737; + atomic_mass_map[922320000] = 232.037156297; + atomic_mass_map[932320000] = 232.040109; + atomic_mass_map[942320000] = 232.041184582; + atomic_mass_map[952320000] = 232.04645; + atomic_mass_map[962320000] = 232.049817; + atomic_mass_map[872330000] = 233.05264; + atomic_mass_map[882330000] = 233.047582; + atomic_mass_map[892330000] = 233.044346; + atomic_mass_map[902330000] = 233.041582278; + atomic_mass_map[912330000] = 233.040247222; + atomic_mass_map[922330000] = 233.039635525; + atomic_mass_map[932330000] = 233.040740989; + atomic_mass_map[942330000] = 233.042997716; + atomic_mass_map[952330000] = 233.046445; + atomic_mass_map[962330000] = 233.050770001; + atomic_mass_map[882340000] = 234.050342; + atomic_mass_map[892340000] = 234.048139; + atomic_mass_map[902340000] = 234.043601407; + atomic_mass_map[912340000] = 234.043307161; + atomic_mass_map[922340000] = 234.040952306; + atomic_mass_map[932340000] = 234.042895256; + atomic_mass_map[942340000] = 234.043317387; + atomic_mass_map[952340000] = 234.047731; + atomic_mass_map[962340000] = 234.050160237; + atomic_mass_map[972340000] = 234.057267; + atomic_mass_map[882350000] = 235.05497; + atomic_mass_map[892350000] = 235.05084; + atomic_mass_map[902350000] = 235.047255; + atomic_mass_map[912350000] = 235.045399; + atomic_mass_map[922350000] = 235.043930131; + atomic_mass_map[932350000] = 235.044063487; + atomic_mass_map[942350000] = 235.045286206; + atomic_mass_map[952350000] = 235.047908245; + atomic_mass_map[962350000] = 235.051542; + atomic_mass_map[972350000] = 235.05658; + atomic_mass_map[892360000] = 236.054988; + atomic_mass_map[902360000] = 236.049657; + atomic_mass_map[912360000] = 236.048668; + atomic_mass_map[922360000] = 236.04556821; + atomic_mass_map[932360000] = 236.046569744; + atomic_mass_map[942360000] = 236.046058109; + atomic_mass_map[952360000] = 236.049428; + atomic_mass_map[962360000] = 236.051374477; + atomic_mass_map[972360000] = 236.05748; + atomic_mass_map[892370000] = 237.05827; + atomic_mass_map[902370000] = 237.053629; + atomic_mass_map[912370000] = 237.051023; + atomic_mass_map[922370000] = 237.048730378; + atomic_mass_map[932370000] = 237.048173649; + atomic_mass_map[942370000] = 237.04840983; + atomic_mass_map[952370000] = 237.049996; + atomic_mass_map[962370000] = 237.052869294; + atomic_mass_map[972370000] = 237.0571; + atomic_mass_map[982370000] = 237.062197789; + atomic_mass_map[902380000] = 238.056496; + atomic_mass_map[912380000] = 238.054637; + atomic_mass_map[922380000] = 238.050788423; + atomic_mass_map[932380000] = 238.050946611; + atomic_mass_map[942380000] = 238.049560111; + atomic_mass_map[952380000] = 238.051984542; + atomic_mass_map[962380000] = 238.05308142; + atomic_mass_map[972380000] = 238.058204; + atomic_mass_map[982380000] = 238.06149; + atomic_mass_map[902390000] = 239.06077; + atomic_mass_map[912390000] = 239.05726; + atomic_mass_map[922390000] = 239.054293475; + atomic_mass_map[932390000] = 239.052939241; + atomic_mass_map[942390000] = 239.052163591; + atomic_mass_map[952390000] = 239.053024699; + atomic_mass_map[962390000] = 239.054910117; + atomic_mass_map[972390000] = 239.058241; + atomic_mass_map[982390000] = 239.062529; + atomic_mass_map[992390000] = 239.06823; + atomic_mass_map[912400000] = 240.06098; + atomic_mass_map[922400000] = 240.056593356; + atomic_mass_map[932400000] = 240.056165427; + atomic_mass_map[942400000] = 240.05381375; + atomic_mass_map[952400000] = 240.055300384; + atomic_mass_map[962400000] = 240.055529681; + atomic_mass_map[972400000] = 240.059759; + atomic_mass_map[982400000] = 240.062255728; + atomic_mass_map[992400000] = 240.06892; + atomic_mass_map[912410000] = 241.06408; + atomic_mass_map[922410000] = 241.06033; + atomic_mass_map[932410000] = 241.058252636; + atomic_mass_map[942410000] = 241.056851661; + atomic_mass_map[952410000] = 241.056829349; + atomic_mass_map[962410000] = 241.05765317; + atomic_mass_map[972410000] = 241.060155; + atomic_mass_map[982410000] = 241.06369; + atomic_mass_map[992410000] = 241.06856; + atomic_mass_map[1002410000] = 241.07421; + atomic_mass_map[922420000] = 242.062932; + atomic_mass_map[932420000] = 242.061641379; + atomic_mass_map[942420000] = 242.058742809; + atomic_mass_map[952420000] = 242.059549364; + atomic_mass_map[962420000] = 242.058836039; + atomic_mass_map[972420000] = 242.061982; + atomic_mass_map[982420000] = 242.063754274; + atomic_mass_map[992420000] = 242.069567; + atomic_mass_map[1002420000] = 242.07343; + atomic_mass_map[922430000] = 243.06699; + atomic_mass_map[932430000] = 243.06428; + atomic_mass_map[942430000] = 243.062003595; + atomic_mass_map[952430000] = 243.061381302; + atomic_mass_map[962430000] = 243.061389325; + atomic_mass_map[972430000] = 243.063007791; + atomic_mass_map[982430000] = 243.065477; + atomic_mass_map[992430000] = 243.06951; + atomic_mass_map[1002430000] = 243.074465; + atomic_mass_map[932440000] = 244.06785; + atomic_mass_map[942440000] = 244.06420526; + atomic_mass_map[952440000] = 244.064285052; + atomic_mass_map[962440000] = 244.062752783; + atomic_mass_map[972440000] = 244.065180979; + atomic_mass_map[982440000] = 244.066000801; + atomic_mass_map[992440000] = 244.070883; + atomic_mass_map[1002440000] = 244.074038; + atomic_mass_map[932450000] = 245.0708; + atomic_mass_map[942450000] = 245.067826058; + atomic_mass_map[952450000] = 245.066454834; + atomic_mass_map[962450000] = 245.065491454; + atomic_mass_map[972450000] = 245.066361821; + atomic_mass_map[982450000] = 245.068048677; + atomic_mass_map[992450000] = 245.071249; + atomic_mass_map[1002450000] = 245.075349; + atomic_mass_map[1012450000] = 245.080808; + atomic_mass_map[942460000] = 246.070205458; + atomic_mass_map[952460000] = 246.069775; + atomic_mass_map[962460000] = 246.067223841; + atomic_mass_map[972460000] = 246.068673126; + atomic_mass_map[982460000] = 246.068805531; + atomic_mass_map[992460000] = 246.072896; + atomic_mass_map[1002460000] = 246.07535047; + atomic_mass_map[1012460000] = 246.081713; + atomic_mass_map[942470000] = 247.07419; + atomic_mass_map[952470000] = 247.072093; + atomic_mass_map[962470000] = 247.070354131; + atomic_mass_map[972470000] = 247.070307302; + atomic_mass_map[982470000] = 247.070965463; + atomic_mass_map[992470000] = 247.073622017; + atomic_mass_map[1002470000] = 247.076945; + atomic_mass_map[1012470000] = 247.081522; + atomic_mass_map[952480000] = 248.075753; + atomic_mass_map[962480000] = 248.072349862; + atomic_mass_map[972480000] = 248.073088; + atomic_mass_map[982480000] = 248.072185066; + atomic_mass_map[992480000] = 248.075471; + atomic_mass_map[1002480000] = 248.077186463; + atomic_mass_map[1012480000] = 248.082823; + atomic_mass_map[1022480000] = 248.08655; + atomic_mass_map[952490000] = 249.07848; + atomic_mass_map[962490000] = 249.075954767; + atomic_mass_map[972490000] = 249.074987676; + atomic_mass_map[982490000] = 249.074853903; + atomic_mass_map[992490000] = 249.076411; + atomic_mass_map[1002490000] = 249.07892755; + atomic_mass_map[1012490000] = 249.082914; + atomic_mass_map[1022490000] = 249.087797; + atomic_mass_map[962500000] = 250.078358313; + atomic_mass_map[972500000] = 250.078316698; + atomic_mass_map[982500000] = 250.076406244; + atomic_mass_map[992500000] = 250.078612; + atomic_mass_map[1002500000] = 250.079521034; + atomic_mass_map[1012500000] = 250.084415; + atomic_mass_map[1022500000] = 250.087562; + atomic_mass_map[962510000] = 251.082286441; + atomic_mass_map[972510000] = 251.080762009; + atomic_mass_map[982510000] = 251.079588625; + atomic_mass_map[992510000] = 251.079993586; + atomic_mass_map[1002510000] = 251.08153989; + atomic_mass_map[1012510000] = 251.084774376; + atomic_mass_map[1022510000] = 251.088944; + atomic_mass_map[1032510000] = 251.09418; + atomic_mass_map[962520000] = 252.08487; + atomic_mass_map[972520000] = 252.084311; + atomic_mass_map[982520000] = 252.081627199; + atomic_mass_map[992520000] = 252.082979865; + atomic_mass_map[1002520000] = 252.08246706; + atomic_mass_map[1012520000] = 252.086432; + atomic_mass_map[1022520000] = 252.088966908; + atomic_mass_map[1032520000] = 252.095264; + atomic_mass_map[972530000] = 253.08688; + atomic_mass_map[982530000] = 253.085134499; + atomic_mass_map[992530000] = 253.084825715; + atomic_mass_map[1002530000] = 253.085184571; + atomic_mass_map[1012530000] = 253.087144; + atomic_mass_map[1022530000] = 253.090564103; + atomic_mass_map[1032530000] = 253.095091; + atomic_mass_map[1042530000] = 253.100438; + atomic_mass_map[972540000] = 254.0906; + atomic_mass_map[982540000] = 254.087324263; + atomic_mass_map[992540000] = 254.088022199; + atomic_mass_map[1002540000] = 254.086854397; + atomic_mass_map[1012540000] = 254.089592; + atomic_mass_map[1022540000] = 254.090955661; + atomic_mass_map[1032540000] = 254.096483; + atomic_mass_map[1042540000] = 254.100053; + atomic_mass_map[982550000] = 255.091048; + atomic_mass_map[992550000] = 255.090274958; + atomic_mass_map[1002550000] = 255.089964038; + atomic_mass_map[1012550000] = 255.091084149; + atomic_mass_map[1022550000] = 255.093191404; + atomic_mass_map[1032550000] = 255.096562404; + atomic_mass_map[1042550000] = 255.101268; + atomic_mass_map[1052550000] = 255.107068; + atomic_mass_map[982560000] = 256.093442; + atomic_mass_map[992560000] = 256.093599; + atomic_mass_map[1002560000] = 256.091774469; + atomic_mass_map[1012560000] = 256.093889; + atomic_mass_map[1022560000] = 256.09428287; + atomic_mass_map[1032560000] = 256.09849403; + atomic_mass_map[1042560000] = 256.101152218; + atomic_mass_map[1052560000] = 256.10789; + atomic_mass_map[992570000] = 257.095979; + atomic_mass_map[1002570000] = 257.095106078; + atomic_mass_map[1012570000] = 257.095542387; + atomic_mass_map[1022570000] = 257.09688783; + atomic_mass_map[1032570000] = 257.099418; + atomic_mass_map[1042570000] = 257.10291812; + atomic_mass_map[1052570000] = 257.107578; + atomic_mass_map[992580000] = 258.09952; + atomic_mass_map[1002580000] = 258.097077; + atomic_mass_map[1012580000] = 258.098431496; + atomic_mass_map[1022580000] = 258.098207; + atomic_mass_map[1032580000] = 258.101755; + atomic_mass_map[1042580000] = 258.103427679; + atomic_mass_map[1052580000] = 258.109285; + atomic_mass_map[1062580000] = 258.112983; + atomic_mass_map[1002590000] = 259.100597; + atomic_mass_map[1012590000] = 259.100511; + atomic_mass_map[1022590000] = 259.101032; + atomic_mass_map[1032590000] = 259.102902; + atomic_mass_map[1042590000] = 259.105596; + atomic_mass_map[1052590000] = 259.109491866; + atomic_mass_map[1062590000] = 259.114396; + atomic_mass_map[1002600000] = 260.102809; + atomic_mass_map[1012600000] = 260.103653; + atomic_mass_map[1022600000] = 260.102644; + atomic_mass_map[1032600000] = 260.105505; + atomic_mass_map[1042600000] = 260.106441; + atomic_mass_map[1052600000] = 260.111297; + atomic_mass_map[1062600000] = 260.114384105; + atomic_mass_map[1072600000] = 260.121659; + atomic_mass_map[1012610000] = 261.105828; + atomic_mass_map[1022610000] = 261.105697; + atomic_mass_map[1032610000] = 261.106884; + atomic_mass_map[1042610000] = 261.108773401; + atomic_mass_map[1052610000] = 261.111917; + atomic_mass_map[1062610000] = 261.115949461; + atomic_mass_map[1072610000] = 261.121455; + atomic_mass_map[1012620000] = 262.109101; + atomic_mass_map[1022620000] = 262.107464; + atomic_mass_map[1032620000] = 262.109612; + atomic_mass_map[1042620000] = 262.109925; + atomic_mass_map[1052620000] = 262.114072; + atomic_mass_map[1062620000] = 262.116336679; + atomic_mass_map[1072620000] = 262.122967; + atomic_mass_map[1022630000] = 263.110715; + atomic_mass_map[1032630000] = 263.111359; + atomic_mass_map[1042630000] = 263.112495; + atomic_mass_map[1052630000] = 263.11499; + atomic_mass_map[1062630000] = 263.118294; + atomic_mass_map[1072630000] = 263.122916; + atomic_mass_map[1082630000] = 263.128522; + atomic_mass_map[1022640000] = 264.112734; + atomic_mass_map[1032640000] = 264.114201; + atomic_mass_map[1042640000] = 264.113879; + atomic_mass_map[1052640000] = 264.117405; + atomic_mass_map[1062640000] = 264.118931; + atomic_mass_map[1072640000] = 264.124593; + atomic_mass_map[1082640000] = 264.128356917; + atomic_mass_map[1032650000] = 265.116193; + atomic_mass_map[1042650000] = 265.116684; + atomic_mass_map[1052650000] = 265.118613; + atomic_mass_map[1062650000] = 265.121093; + atomic_mass_map[1072650000] = 265.124914; + atomic_mass_map[1082650000] = 265.129792986; + atomic_mass_map[1092650000] = 265.135996; + atomic_mass_map[1032660000] = 266.119831; + atomic_mass_map[1042660000] = 266.118172; + atomic_mass_map[1052660000] = 266.121029; + atomic_mass_map[1062660000] = 266.121975; + atomic_mass_map[1072660000] = 266.126794; + atomic_mass_map[1082660000] = 266.1300464; + atomic_mass_map[1092660000] = 266.137374; + atomic_mass_map[1042670000] = 267.121789; + atomic_mass_map[1052670000] = 267.122465; + atomic_mass_map[1062670000] = 267.124357; + atomic_mass_map[1072670000] = 267.127501; + atomic_mass_map[1082670000] = 267.131673; + atomic_mass_map[1092670000] = 267.137189; + atomic_mass_map[1102670000] = 267.143768; + atomic_mass_map[1042680000] = 268.123968; + atomic_mass_map[1052680000] = 268.125671; + atomic_mass_map[1062680000] = 268.125392; + atomic_mass_map[1072680000] = 268.129692; + atomic_mass_map[1082680000] = 268.131865; + atomic_mass_map[1092680000] = 268.138649; + atomic_mass_map[1102680000] = 268.143478; + atomic_mass_map[1052690000] = 269.127911; + atomic_mass_map[1062690000] = 269.128627; + atomic_mass_map[1072690000] = 269.130416; + atomic_mass_map[1082690000] = 269.133753; + atomic_mass_map[1092690000] = 269.138822; + atomic_mass_map[1102690000] = 269.144752124; + atomic_mass_map[1052700000] = 270.131356; + atomic_mass_map[1062700000] = 270.130427; + atomic_mass_map[1072700000] = 270.133363; + atomic_mass_map[1082700000] = 270.13429; + atomic_mass_map[1092700000] = 270.140327; + atomic_mass_map[1102700000] = 270.144584153; + atomic_mass_map[1062710000] = 271.133933; + atomic_mass_map[1072710000] = 271.135256; + atomic_mass_map[1082710000] = 271.13717; + atomic_mass_map[1092710000] = 271.140744; + atomic_mass_map[1102710000] = 271.145946; + atomic_mass_map[1062720000] = 272.13589; + atomic_mass_map[1072720000] = 272.138264; + atomic_mass_map[1082720000] = 272.138495; + atomic_mass_map[1092720000] = 272.143406; + atomic_mass_map[1102720000] = 272.14602; + atomic_mass_map[1112720000] = 272.153273; + atomic_mass_map[1062730000] = 273.13958; + atomic_mass_map[1072730000] = 273.14024; + atomic_mass_map[1082730000] = 273.141679; + atomic_mass_map[1092730000] = 273.144399; + atomic_mass_map[1102730000] = 273.14856; + atomic_mass_map[1112730000] = 273.153127; + atomic_mass_map[1072740000] = 274.143548; + atomic_mass_map[1082740000] = 274.143304; + atomic_mass_map[1092740000] = 274.147245; + atomic_mass_map[1102740000] = 274.149411; + atomic_mass_map[1112740000] = 274.155253; + atomic_mass_map[1072750000] = 275.14567; + atomic_mass_map[1082750000] = 275.146668; + atomic_mass_map[1092750000] = 275.14882; + atomic_mass_map[1102750000] = 275.152033; + atomic_mass_map[1112750000] = 275.155939; + atomic_mass_map[1082760000] = 276.148455; + atomic_mass_map[1092760000] = 276.151594; + atomic_mass_map[1102760000] = 276.153025; + atomic_mass_map[1112760000] = 276.158334; + atomic_mass_map[1122760000] = 276.16141; + atomic_mass_map[1082770000] = 277.151899; + atomic_mass_map[1092770000] = 277.153268; + atomic_mass_map[1102770000] = 277.155914; + atomic_mass_map[1112770000] = 277.159069; + atomic_mass_map[1122770000] = 277.163641; + atomic_mass_map[1092780000] = 278.156307; + atomic_mass_map[1102780000] = 278.15704; + atomic_mass_map[1112780000] = 278.161493; + atomic_mass_map[1122780000] = 278.164156; + atomic_mass_map[1132780000] = 278.170578; + atomic_mass_map[1092790000] = 279.158075; + atomic_mass_map[1102790000] = 279.160097; + atomic_mass_map[1112790000] = 279.162722; + atomic_mass_map[1122790000] = 279.166542; + atomic_mass_map[1132790000] = 279.17095; + atomic_mass_map[1102800000] = 280.161311; + atomic_mass_map[1112800000] = 280.165138; + atomic_mass_map[1122800000] = 280.167147; + atomic_mass_map[1132800000] = 280.17293; + atomic_mass_map[1102810000] = 281.164511; + atomic_mass_map[1112810000] = 281.16636; + atomic_mass_map[1122810000] = 281.169746; + atomic_mass_map[1132810000] = 281.17348; + atomic_mass_map[1112820000] = 282.169119; + atomic_mass_map[1122820000] = 282.170496; + atomic_mass_map[1132820000] = 282.175672; + atomic_mass_map[1112830000] = 283.170544; + atomic_mass_map[1122830000] = 283.17327; + atomic_mass_map[1132830000] = 283.176571; + atomic_mass_map[1122840000] = 284.174156; + atomic_mass_map[1132840000] = 284.178727; + atomic_mass_map[1122850000] = 285.177117; + atomic_mass_map[1132850000] = 285.179727; + atomic_mass_map[1142850000] = 285.183643; + atomic_mass_map[1132860000] = 286.182208; + atomic_mass_map[1142860000] = 286.184235; + atomic_mass_map[1132870000] = 287.183389; + atomic_mass_map[1142870000] = 287.186783; + atomic_mass_map[1152870000] = 287.190704; + atomic_mass_map[1142880000] = 288.187572; + atomic_mass_map[1152880000] = 288.19274; + atomic_mass_map[1142890000] = 289.190419; + atomic_mass_map[1152890000] = 289.193627; + atomic_mass_map[1162890000] = 289.198162; + atomic_mass_map[1152900000] = 290.195975; + atomic_mass_map[1162900000] = 290.198638; + atomic_mass_map[1152910000] = 291.197071; + atomic_mass_map[1162910000] = 291.201077; + atomic_mass_map[1172910000] = 291.205535; + atomic_mass_map[1162920000] = 292.201742; + atomic_mass_map[1172920000] = 292.207463; + atomic_mass_map[1162930000] = 293.204487; + atomic_mass_map[1172930000] = 293.208236; + atomic_mass_map[1182930000] = 293.213562; + atomic_mass_map[1172940000] = 294.210462; + atomic_mass_map[1182940000] = 294.213921; + atomic_mass_map[1182950000] = 295.21624; +} + +void pyne::_insert_abund_map() { + natural_abund_map[10010000] = 99.9885; + natural_abund_map[10020000] = 0.0115; + natural_abund_map[20030000] = 0.000134; + natural_abund_map[20040000] = 99.999866; + natural_abund_map[30060000] = 7.59; + natural_abund_map[30070000] = 92.41; + natural_abund_map[40090000] = 100.0; + natural_abund_map[50100000] = 19.9; + natural_abund_map[50110000] = 80.1; + natural_abund_map[60120000] = 98.93; + natural_abund_map[60130000] = 1.07; + natural_abund_map[70140000] = 99.636; + natural_abund_map[70150000] = 0.364; + natural_abund_map[80160000] = 99.757; + natural_abund_map[80170000] = 0.038; + natural_abund_map[80180000] = 0.205; + natural_abund_map[90190000] = 100.0; + natural_abund_map[100200000] = 90.48; + natural_abund_map[100210000] = 0.27; + natural_abund_map[100220000] = 9.25; + natural_abund_map[110230000] = 100.0; + natural_abund_map[120240000] = 78.99; + natural_abund_map[120250000] = 10.00; + natural_abund_map[120260000] = 11.01; + natural_abund_map[130270000] = 100.0; + natural_abund_map[140280000] = 92.223; + natural_abund_map[140290000] = 4.685; + natural_abund_map[140300000] = 3.092; + natural_abund_map[150310000] = 100.0; + natural_abund_map[160320000] = 94.99; + natural_abund_map[160330000] = 0.75; + natural_abund_map[160340000] = 4.25; + natural_abund_map[160360000] = 0.01; + natural_abund_map[170350000] = 75.76; + natural_abund_map[170370000] = 24.24; + natural_abund_map[180360000] = 0.3336; + natural_abund_map[180380000] = 0.0629; + natural_abund_map[180400000] = 99.6035; + natural_abund_map[190390000] = 93.2581; + natural_abund_map[190400000] = 0.0117; + natural_abund_map[190410000] = 6.7302; + natural_abund_map[200400000] = 96.941; + natural_abund_map[200420000] = 0.647; + natural_abund_map[200430000] = 0.135; + natural_abund_map[200440000] = 2.086; + natural_abund_map[200460000] = 0.004; + natural_abund_map[200480000] = 0.187; + natural_abund_map[210450000] = 100.0; + natural_abund_map[220460000] = 8.25; + natural_abund_map[220470000] = 7.44; + natural_abund_map[220480000] = 73.72; + natural_abund_map[220490000] = 5.41; + natural_abund_map[220500000] = 5.18; + natural_abund_map[230500000] = 0.250; + natural_abund_map[230510000] = 99.750; + natural_abund_map[240500000] = 4.345; + natural_abund_map[240520000] = 83.789; + natural_abund_map[240530000] = 9.501; + natural_abund_map[240540000] = 2.365; + natural_abund_map[250550000] = 100.0; + natural_abund_map[260540000] = 5.845; + natural_abund_map[260560000] = 91.754; + natural_abund_map[260570000] = 2.119; + natural_abund_map[260580000] = 0.282; + natural_abund_map[270590000] = 100.0; + natural_abund_map[280580000] = 68.077; + natural_abund_map[280600000] = 26.223; + natural_abund_map[280610000] = 1.1399; + natural_abund_map[280620000] = 3.6346; + natural_abund_map[280640000] = 0.9255; + natural_abund_map[290630000] = 69.15; + natural_abund_map[290650000] = 30.85; + natural_abund_map[300640000] = 49.17; + natural_abund_map[300660000] = 27.73; + natural_abund_map[300670000] = 4.04; + natural_abund_map[300680000] = 18.45; + natural_abund_map[300700000] = 0.61; + natural_abund_map[310690000] = 60.108; + natural_abund_map[310710000] = 39.892; + natural_abund_map[320700000] = 20.57; + natural_abund_map[320720000] = 27.45; + natural_abund_map[320730000] = 7.75; + natural_abund_map[320740000] = 36.50; + natural_abund_map[320760000] = 7.73; + natural_abund_map[330750000] = 100.0; + natural_abund_map[340740000] = 0.89; + natural_abund_map[340760000] = 9.37; + natural_abund_map[340770000] = 7.63; + natural_abund_map[340780000] = 23.77; + natural_abund_map[340800000] = 49.61; + natural_abund_map[340820000] = 8.73; + natural_abund_map[350790000] = 50.69; + natural_abund_map[350810000] = 49.31; + natural_abund_map[360780000] = 0.355; + natural_abund_map[360800000] = 2.286; + natural_abund_map[360820000] = 11.593; + natural_abund_map[360830000] = 11.500; + natural_abund_map[360840000] = 56.987; + natural_abund_map[360860000] = 17.279; + natural_abund_map[370850000] = 72.17; + natural_abund_map[370870000] = 27.83; + natural_abund_map[380840000] = 0.56; + natural_abund_map[380860000] = 9.86; + natural_abund_map[380870000] = 7.00; + natural_abund_map[380880000] = 82.58; + natural_abund_map[390890000] = 100.0; + natural_abund_map[400900000] = 51.45; + natural_abund_map[400910000] = 11.22; + natural_abund_map[400920000] = 17.15; + natural_abund_map[400940000] = 17.38; + natural_abund_map[400960000] = 2.80; + natural_abund_map[410930000] = 100.0; + natural_abund_map[420920000] = 14.53; + natural_abund_map[420940000] = 9.15; + natural_abund_map[420950000] = 15.84; + natural_abund_map[420960000] = 16.67; + natural_abund_map[420970000] = 9.60; + natural_abund_map[420980000] = 24.39; + natural_abund_map[421000000] = 9.82; + natural_abund_map[440960000] = 5.54; + natural_abund_map[440980000] = 1.87; + natural_abund_map[440990000] = 12.76; + natural_abund_map[441000000] = 12.60; + natural_abund_map[441010000] = 17.06; + natural_abund_map[441020000] = 31.55; + natural_abund_map[441040000] = 18.62; + natural_abund_map[451030000] = 100.0; + natural_abund_map[461020000] = 1.02; + natural_abund_map[461040000] = 11.14; + natural_abund_map[461050000] = 22.33; + natural_abund_map[461060000] = 27.33; + natural_abund_map[461080000] = 26.46; + natural_abund_map[461100000] = 11.72; + natural_abund_map[471070000] = 51.839; + natural_abund_map[471090000] = 48.161; + natural_abund_map[481060000] = 1.25; + natural_abund_map[481080000] = 0.89; + natural_abund_map[481100000] = 12.49; + natural_abund_map[481110000] = 12.80; + natural_abund_map[481120000] = 24.13; + natural_abund_map[481130000] = 12.22; + natural_abund_map[481140000] = 28.73; + natural_abund_map[481160000] = 7.49; + natural_abund_map[491130000] = 4.29; + natural_abund_map[491150000] = 95.71; + natural_abund_map[501120000] = 0.97; + natural_abund_map[501140000] = 0.66; + natural_abund_map[501150000] = 0.34; + natural_abund_map[501160000] = 14.54; + natural_abund_map[501170000] = 7.68; + natural_abund_map[501180000] = 24.22; + natural_abund_map[501190000] = 8.59; + natural_abund_map[501200000] = 32.58; + natural_abund_map[501220000] = 4.63; + natural_abund_map[501240000] = 5.79; + natural_abund_map[511210000] = 57.21; + natural_abund_map[511230000] = 42.79; + natural_abund_map[521200000] = 0.09; + natural_abund_map[521220000] = 2.55; + natural_abund_map[521230000] = 0.89; + natural_abund_map[521240000] = 4.74; + natural_abund_map[521250000] = 7.07; + natural_abund_map[521260000] = 18.84; + natural_abund_map[521280000] = 31.74; + natural_abund_map[521300000] = 34.08; + natural_abund_map[531270000] = 100.0; + natural_abund_map[541240000] = 0.0952; + natural_abund_map[541260000] = 0.0890; + natural_abund_map[541280000] = 1.9102; + natural_abund_map[541290000] = 26.4006; + natural_abund_map[541300000] = 4.0710; + natural_abund_map[541310000] = 21.2324; + natural_abund_map[541320000] = 26.9086; + natural_abund_map[541340000] = 10.4357; + natural_abund_map[541360000] = 8.8573; + natural_abund_map[551330000] = 100.0; + natural_abund_map[561300000] = 0.106; + natural_abund_map[561320000] = 0.101; + natural_abund_map[561340000] = 2.417; + natural_abund_map[561350000] = 6.592; + natural_abund_map[561360000] = 7.854; + natural_abund_map[561370000] = 11.232; + natural_abund_map[561380000] = 71.698; + natural_abund_map[571380000] = 0.08881; + natural_abund_map[571390000] = 99.91119; + natural_abund_map[581360000] = 0.185; + natural_abund_map[581380000] = 0.251; + natural_abund_map[581400000] = 88.450; + natural_abund_map[581420000] = 11.114; + natural_abund_map[591410000] = 100.0; + natural_abund_map[601420000] = 27.152; + natural_abund_map[601430000] = 12.174; + natural_abund_map[601440000] = 23.798; + natural_abund_map[601450000] = 8.293; + natural_abund_map[601460000] = 17.189; + natural_abund_map[601480000] = 5.756; + natural_abund_map[601500000] = 5.638; + natural_abund_map[621440000] = 3.07; + natural_abund_map[621470000] = 14.99; + natural_abund_map[621480000] = 11.24; + natural_abund_map[621490000] = 13.82; + natural_abund_map[621500000] = 7.38; + natural_abund_map[621520000] = 26.75; + natural_abund_map[621540000] = 22.75; + natural_abund_map[631510000] = 47.81; + natural_abund_map[631530000] = 52.19; + natural_abund_map[641520000] = 0.20; + natural_abund_map[641540000] = 2.18; + natural_abund_map[641550000] = 14.80; + natural_abund_map[641560000] = 20.47; + natural_abund_map[641570000] = 15.65; + natural_abund_map[641580000] = 24.84; + natural_abund_map[641600000] = 21.86; + natural_abund_map[651590000] = 100.0; + natural_abund_map[661560000] = 0.056; + natural_abund_map[661580000] = 0.095; + natural_abund_map[661600000] = 2.329; + natural_abund_map[661610000] = 18.889; + natural_abund_map[661620000] = 25.475; + natural_abund_map[661630000] = 24.896; + natural_abund_map[661640000] = 28.260; + natural_abund_map[671650000] = 100.0; + natural_abund_map[681620000] = 0.139; + natural_abund_map[681640000] = 1.601; + natural_abund_map[681660000] = 33.503; + natural_abund_map[681670000] = 22.869; + natural_abund_map[681680000] = 26.978; + natural_abund_map[681700000] = 14.910; + natural_abund_map[691690000] = 100.0; + natural_abund_map[701680000] = 0.123; + natural_abund_map[701700000] = 2.982; + natural_abund_map[701710000] = 14.09; + natural_abund_map[701720000] = 21.68; + natural_abund_map[701730000] = 16.103; + natural_abund_map[701740000] = 32.026; + natural_abund_map[701760000] = 12.996; + natural_abund_map[711750000] = 97.401; + natural_abund_map[711760000] = 2.599; + natural_abund_map[721740000] = 0.16; + natural_abund_map[721760000] = 5.26; + natural_abund_map[721770000] = 18.60; + natural_abund_map[721780000] = 27.28; + natural_abund_map[721790000] = 13.62; + natural_abund_map[721800000] = 35.08; + natural_abund_map[731800000] = 0.01201; + natural_abund_map[731810000] = 99.98799; + natural_abund_map[741800000] = 0.12; + natural_abund_map[741820000] = 26.50; + natural_abund_map[741830000] = 14.31; + natural_abund_map[741840000] = 30.64; + natural_abund_map[741860000] = 28.43; + natural_abund_map[751850000] = 37.40; + natural_abund_map[751870000] = 62.60; + natural_abund_map[761840000] = 0.02; + natural_abund_map[761860000] = 1.59; + natural_abund_map[761870000] = 1.96; + natural_abund_map[761880000] = 13.24; + natural_abund_map[761890000] = 16.15; + natural_abund_map[761900000] = 26.26; + natural_abund_map[761920000] = 40.78; + natural_abund_map[771910000] = 37.3; + natural_abund_map[771930000] = 62.7; + natural_abund_map[781900000] = 0.012; + natural_abund_map[781920000] = 0.782; + natural_abund_map[781940000] = 32.86; + natural_abund_map[781950000] = 33.78; + natural_abund_map[781960000] = 25.21; + natural_abund_map[781980000] = 7.356; + natural_abund_map[791970000] = 100.0; + natural_abund_map[801960000] = 0.15; + natural_abund_map[801980000] = 9.97; + natural_abund_map[801990000] = 16.87; + natural_abund_map[802000000] = 23.10; + natural_abund_map[802010000] = 13.18; + natural_abund_map[802020000] = 29.86; + natural_abund_map[802040000] = 6.87; + natural_abund_map[812030000] = 29.52; + natural_abund_map[812050000] = 70.48; + natural_abund_map[822040000] = 1.4; + natural_abund_map[822060000] = 24.1; + natural_abund_map[822070000] = 22.1; + natural_abund_map[822080000] = 52.4; + natural_abund_map[832090000] = 100.0; + natural_abund_map[902320000] = 100.0; + natural_abund_map[912310000] = 100.0; + natural_abund_map[922340000] = 0.0054; + natural_abund_map[922350000] = 0.7204; + natural_abund_map[922380000] = 99.2742; +} diff --git a/src/_atomic_data.h b/src/_atomic_data.h new file mode 100644 index 0000000000..b6551be1f8 --- /dev/null +++ b/src/_atomic_data.h @@ -0,0 +1,30 @@ +/// \/file atomic_nuclear_data.h +/// \/author Andrew Davis (andrew.davis@wisc.edu) +/// +/// \/brief Impliments all the fundamental atomic & nuclear data data +#include + +namespace pyne +{ + /// main function to be called when you whish to load the nuclide data + /// into memory + void _load_atomic_mass_map_memory(); + /// function to create mapping from nuclides in id form + /// to their atomic masses + + void _insert_atomic_mass_map(); + + /// function to create mapping from nuclides in id form + /// to their natural abundances + void _insert_abund_map(); + + /// Mapping from nuclides in id form to their natural abundances + extern std::map natural_abund_map; + + /// Mapping from nuclides in id form to their atomic masses. + extern std::map atomic_mass_map; + + /// Mapping from nuclides in id form to the associated error in + /// abdundance + extern std::map atomic_mass_error_map; +} // namespace pyne From 65b05d620d1c9b4bda3b48b8b64f67519055d937 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 15 Jan 2016 09:37:34 -0600 Subject: [PATCH 077/216] updated for the default amlgamate option --- amalgamate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/amalgamate.py b/amalgamate.py index 1deb54fb71..8dfe3a1a47 100755 --- a/amalgamate.py +++ b/amalgamate.py @@ -29,8 +29,8 @@ 'src/nucname.cpp', 'src/rxname.h', 'src/rxname.cpp', - 'src/atomic_data.h', - 'src/atomic_data.cpp', + 'src/_atomic_data.h', + 'src/_atomic_data.cpp', 'src/data.h', 'src/data.cpp', #'src/dagmc_bridge.cpp', From 2570bd5b4957c3b8243d3e25c8e4e652ff349794 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 15 Jan 2016 09:55:24 -0600 Subject: [PATCH 078/216] updated setup.py to fix silly error --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 434b36f7d9..03c7d24325 100755 --- a/setup.py +++ b/setup.py @@ -235,7 +235,7 @@ def ensure_atomic(): if generated: return # last resort - if !os.path.isfile(ATOMIC_H) and !os.path.isfile(ATOMIC_CPP): + if not os.path.isfile(ATOMIC_H) and not os.path.isfile(ATOMIC_CPP): shutil.copy(ATOMIC_H_UNDER, ATOMIC_H) shutil.copy(ATOMIC_CPP_UNDER, ATOMIC_CPP) From cfd1b8f39707ebae45533e6acb85bec0e69314d8 Mon Sep 17 00:00:00 2001 From: Marissa Ramirez Zweiger Date: Fri, 15 Jan 2016 11:00:47 -0500 Subject: [PATCH 079/216] Changed pdecay variable to float. --- tests/test_cram.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_cram.py b/tests/test_cram.py index 735c4444f9..d145f9f356 100644 --- a/tests/test_cram.py +++ b/tests/test_cram.py @@ -31,8 +31,7 @@ def test_cram14(): # Compute PyNE decay solution initial = material.Material({species: 1.0}) final = initial.decay(half_life) - pdecay = final.values() - + pdecay = float(final.values()) error_14 = np.abs(cram14 - pdecay)*2 / (cram14 + pdecay) error14.append(np.mean(error_14)) From 2af3a9c82a7b6d592c8603fe4e56f09942082823 Mon Sep 17 00:00:00 2001 From: Marissa Ramirez Zweiger Date: Fri, 15 Jan 2016 11:01:30 -0500 Subject: [PATCH 080/216] Chaned pdecay variable for cram16 test. --- tests/test_cram.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_cram.py b/tests/test_cram.py index d145f9f356..9a09422cf5 100644 --- a/tests/test_cram.py +++ b/tests/test_cram.py @@ -64,7 +64,7 @@ def test_cram16(): # Compute PyNE decay solution initial = material.Material({species: 1.0}) final = initial.decay(half_life) - pdecay = final.values() + pdecay = float(final.values()) error_16 = np.abs(cram16 - pdecay)*2 / (cram16 + pdecay) error16.append(np.mean(error_16)) From cc1e319e0968ee1e0f4580b036aefb336b82af15 Mon Sep 17 00:00:00 2001 From: Marissa Ramirez Zweiger Date: Fri, 15 Jan 2016 11:22:14 -0500 Subject: [PATCH 081/216] Changed pdecay to list. --- tests/test_cram.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_cram.py b/tests/test_cram.py index 9a09422cf5..029f7bf761 100644 --- a/tests/test_cram.py +++ b/tests/test_cram.py @@ -31,7 +31,7 @@ def test_cram14(): # Compute PyNE decay solution initial = material.Material({species: 1.0}) final = initial.decay(half_life) - pdecay = float(final.values()) + pdecay = list(final.values()) error_14 = np.abs(cram14 - pdecay)*2 / (cram14 + pdecay) error14.append(np.mean(error_14)) @@ -64,7 +64,7 @@ def test_cram16(): # Compute PyNE decay solution initial = material.Material({species: 1.0}) final = initial.decay(half_life) - pdecay = float(final.values()) + pdecay = list(final.values()) error_16 = np.abs(cram16 - pdecay)*2 / (cram16 + pdecay) error16.append(np.mean(error_16)) From aca4c67cc5a492023c63e0fca116ab69272e161a Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 15 Jan 2016 12:41:09 -0600 Subject: [PATCH 082/216] Fixed missing file close --- src/atomicgen.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/atomicgen.py b/src/atomicgen.py index 1ff409b7c2..98939605ad 100755 --- a/src/atomicgen.py +++ b/src/atomicgen.py @@ -37,6 +37,7 @@ def print_header_file(filename): f = open(filename,'w') f.write(header_file) + f.close() # print the masses map def print_atomic_mass_errors(): @@ -123,6 +124,7 @@ def print_cpp_file(filename): f = open(filename,'w') f.write(cpp_file) + f.close() print_cpp_file("atomic_data.cpp") print_header_file("atomic_data.h") From e655d180f6a9c913e75be02cc3f15ecf5fba9d83 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 15 Jan 2016 13:13:28 -0600 Subject: [PATCH 083/216] if . not in path then add src to path fix --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 03c7d24325..3803171d1e 100755 --- a/setup.py +++ b/setup.py @@ -57,7 +57,8 @@ import numpy as np # import src into pythonpath - needed to actually run decaygen/atomicgen -sys.path.append(os.getcwd()+'/src') +if '.' not in sys.path: + sys.path.append(os.getcwd()+'/src') # Thanks to http://patorjk.com/software/taag/ # and http://www.chris.com/ascii/index.php?art=creatures/dragons From ac1a6d94e3e83e2830fe84812fa73bc138d84fcb Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 15 Jan 2016 13:24:41 -0600 Subject: [PATCH 084/216] move files around for consisteny --- setup.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 3803171d1e..b436f1611e 100755 --- a/setup.py +++ b/setup.py @@ -212,8 +212,8 @@ def ensure_decay(): ATOMIC_H = os.path.join('src', 'atomic_data.h') ATOMIC_CPP = os.path.join('src', 'atomic_data.cpp') -ATOMIC_H_UNDER = os.path.join('src', 'atomic_data.h') -ATOMIC_CPP_UNDER = os.path.join('src', 'atomic_data.cpp') +ATOMIC_H_UNDER = os.path.join('src', '_atomic_data.h') +ATOMIC_CPP_UNDER = os.path.join('src', '_atomic_data.cpp') def generate_atomic(): with indir('src'): @@ -229,16 +229,22 @@ def generate_atomic(): def ensure_atomic(): mb = 1024**2 + # if the file exists then we're done! if os.path.isfile(ATOMIC_H) and os.path.isfile(ATOMIC_CPP) and \ os.stat(ATOMIC_CPP).st_size > mb: return + # generate the data generated = generate_atomic() if generated: return - # last resort + # last resort - if generate atomic failed, use the backup if not os.path.isfile(ATOMIC_H) and not os.path.isfile(ATOMIC_CPP): shutil.copy(ATOMIC_H_UNDER, ATOMIC_H) shutil.copy(ATOMIC_CPP_UNDER, ATOMIC_CPP) + else: + # copy the freshly generated file to the last resort for consistency + shutil.copy(ATOMIC_H, ATOMIC_H_UNDER) + shutil.copy(ATOMIC_CPP, ATOMIC_CPP_UNDER) def ensure_nuc_data(): import tempfile From b3f001f03c56075024a91cc93d457e769c397393 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 15 Jan 2016 13:58:09 -0600 Subject: [PATCH 085/216] updated documentation for the data module --- docs/usersguide/data.rst | 43 +++++++++++++++++++++++++++++++++++++++ docs/usersguide/index.rst | 1 + 2 files changed, 44 insertions(+) create mode 100644 docs/usersguide/data.rst diff --git a/docs/usersguide/data.rst b/docs/usersguide/data.rst new file mode 100644 index 0000000000..e94072e040 --- /dev/null +++ b/docs/usersguide/data.rst @@ -0,0 +1,43 @@ +.. _usersguide_data: + +============ +Atomic & Isotopic Data +============ + +.. currentmodule:: pyne.data + +.. automodule:: pyne.data + +For a complete specification for the classes in the ``cccc`` module, please +refer to the Library Reference entry for :ref:`pyne_cccc`. + +*************************** +Example Use of Data Class +*************************** + +The isotopic & elemental abundance data is usually loaded at the time the atomic_mass function is launched. This data now +exists in the C++ implementaion, behinds the scenes the nuc_data.h5 file is loaded and the appropriate data elements populated. + + +.. code-block:: ipython + + In [1]: from pyne.data import atomic_mass + + In [2]: print atomic_mass('2H') + 2.01410177812 + +If one chooses to, the nuclear data path can be set to some nonesense value and the data will be initialised from memory +instead. + +.. code-block:: ipython + + In [1]: from pyne.pyne_config import pyne_conf + + In [2]: from pyne.data import atomic_mass + + In [3]: pyne_conf.NUC_DATA_PATH = b'some silly path that doesnt exist' + + In [4]: print atomic_mass('2H') + 2.01410177812 + +This is not particularly useful for Python users of PyNE, however the pure C++ users can now use the atomic and isotopic data from the amalgamated source and not need to carry the nuc_data.h5 with you. diff --git a/docs/usersguide/index.rst b/docs/usersguide/index.rst index fa4d86fe26..ecd439137c 100644 --- a/docs/usersguide/index.rst +++ b/docs/usersguide/index.rst @@ -9,6 +9,7 @@ essential aspects of using PyNE to do nuclear engineering. .. toctree:: :maxdepth: 1 + data nucname particle material From 26c306f4cb2ddbac5930d54866b9bad7548e8931 Mon Sep 17 00:00:00 2001 From: Kelly Rowland Date: Sun, 17 Jan 2016 18:58:02 -0800 Subject: [PATCH 086/216] change binary download command to conda channel --- readme.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.rst b/readme.rst index c42361d4ca..6bab139d85 100644 --- a/readme.rst +++ b/readme.rst @@ -55,10 +55,10 @@ Most of the dependencies are readily available through package managers. ------ Binary ------ -Binary distributions of the latest release (0.4) for mac and linux (64-bit) +Binary distributions of the latest release (0.5) for mac and linux (64-bit) using the conda package manager can be installed by running the command:: - conda install -c https://conda.binstar.org/pyne pyne + conda install -c cyclus -c pyne pyne=0.5.0 A windows 32-bit binary is also available on conda via the same command but it is highly experimental and likely broken. Conda binaries do not have From 9e4dbc96f9ecf40d3db9061e243b673e0ade5dcc Mon Sep 17 00:00:00 2001 From: Kelly Rowland Date: Sun, 17 Jan 2016 19:34:33 -0800 Subject: [PATCH 087/216] make conda binary command instruction more general --- readme.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/readme.rst b/readme.rst index 6bab139d85..13d47e6026 100644 --- a/readme.rst +++ b/readme.rst @@ -55,10 +55,12 @@ Most of the dependencies are readily available through package managers. ------ Binary ------ -Binary distributions of the latest release (0.5) for mac and linux (64-bit) +Binary distributions of the latest release for mac and linux (64-bit) using the conda package manager can be installed by running the command:: - conda install -c cyclus -c pyne pyne=0.5.0 + conda install -c cyclus -c pyne pyne=VERSION + +where VERSION should be replaced with the version number to be installed. A windows 32-bit binary is also available on conda via the same command but it is highly experimental and likely broken. Conda binaries do not have From e097c773b2c677d24236656f12a81dc70d42ad44 Mon Sep 17 00:00:00 2001 From: Kelly Rowland Date: Sun, 17 Jan 2016 19:42:39 -0800 Subject: [PATCH 088/216] update binary download instructions in readme and docs too --- docs/install/conda.rst | 10 ++++++---- readme.rst | 4 +++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/install/conda.rst b/docs/install/conda.rst index b22326ffce..d30d17ddbe 100644 --- a/docs/install/conda.rst +++ b/docs/install/conda.rst @@ -14,10 +14,12 @@ option when installing conda. -------------------------- Binary Package (For Users) -------------------------- -Binary distributions of the latest release (0.4) of pyne -can be installed by running the command:: +Binary distributions of thelatest release for mac and linux (64-bit) +using the conda package manager can be installed by running the command:: - conda install -c https://conda.binstar.org/pyne pyne + conda install -c cyclus -c pyne pyne=VERSION + +where VERSION should be replaced with the version number to be installed. A windows 32-bit binary is also available on conda via the same command but it is highly experimental and likely broken. Conda binaries do not have @@ -43,4 +45,4 @@ cd to the conda-recipes directory and run:: conda install $(conda build --output pyne) nuc_data_make -You should now be able to update the conda package that lives on binstar. \ No newline at end of file +You should now be able to update the conda package that lives on binstar. diff --git a/readme.rst b/readme.rst index 13d47e6026..b046079485 100644 --- a/readme.rst +++ b/readme.rst @@ -116,7 +116,9 @@ After installing anaconda or miniconda from `the Continuum downloads page `_, in a new terminal run the following conda install command:: - conda install -c https://conda.binstar.org/pyne pyne + conda install -c cyclus -c pyne pyne=VERSION + +where VERSION should be replaced with the version number to be installed. If you have any issues, please let us know. From b021fd8720c5e45e65f41a4ddce801cf8db7f10e Mon Sep 17 00:00:00 2001 From: Kelly Rowland Date: Sun, 17 Jan 2016 19:43:41 -0800 Subject: [PATCH 089/216] fix small space typo in binary instruct in docs --- docs/install/conda.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/install/conda.rst b/docs/install/conda.rst index d30d17ddbe..42b584f3dd 100644 --- a/docs/install/conda.rst +++ b/docs/install/conda.rst @@ -14,7 +14,7 @@ option when installing conda. -------------------------- Binary Package (For Users) -------------------------- -Binary distributions of thelatest release for mac and linux (64-bit) +Binary distributions of the latest release for mac and linux (64-bit) using the conda package manager can be installed by running the command:: conda install -c cyclus -c pyne pyne=VERSION From e8192c2ffbad0dc52aa6aeb45353d4ad7f8c49c9 Mon Sep 17 00:00:00 2001 From: josh Date: Tue, 19 Jan 2016 14:48:44 -0800 Subject: [PATCH 090/216] Added ensdf_processing/delta --- pyne/ensdf_processing.py | 24 + setup.py | 4 + src/CMakeLists.txt | 1 + src/ensdf_processing/DELTA/delta.for | 2563 ++++++++++++++++++++ tests/ensdf_processing/delta/ref_delta.rpt | 910 +++++++ tests/ensdf_processing/delta/ref_inp.dat | 27 + tests/test_ensdf_processing.py | 14 +- 7 files changed, 3542 insertions(+), 1 deletion(-) create mode 100644 src/ensdf_processing/DELTA/delta.for create mode 100644 tests/ensdf_processing/delta/ref_delta.rpt create mode 100644 tests/ensdf_processing/delta/ref_inp.dat diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index c0ecaac585..e35581e2c1 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -74,6 +74,30 @@ def alphad(inputdict_unchecked): proc.stdin.close() return inputdict_unchecked +def delta(inputdict_unchecked): + """ + This function calculates the best values of mixing ratios based of its analysis of + the angular correlation and conversion coefficient data. + + Input Dictionary Required Key Pair Value: + input_file : input ensdf file + output_file : file for output to be written to (doesn't have to exist) + + Output Dictionary Values: + Everything in input dictionary is returned if DELTA completes successfully. + """ + inputdict = {} + input_file = inputdict_unchecked['input_file'] + output_file = inputdict_unchecked['output_file'] + + exe_path = path_to_exe('delta') + proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + inp = input_file + '\n' + output_file + '\n' + proc.stdin.write(inp.encode('utf-8')) + proc.communicate()[0] + proc.stdin.close() + return inputdict_unchecked + def gabs(inputdict_unchecked): """ This program calculates Gamma-ray absolute intensity and normalization (GABS readme) diff --git a/setup.py b/setup.py index 7f43a39b94..c0cb09b477 100755 --- a/setup.py +++ b/setup.py @@ -177,6 +177,8 @@ def download_decay(): return True ALPHAD_H = os.path.join('build', 'src/alphad') +DELTA_H = os.path.join('build', 'src/delta') + def copy_ensdf_executables(exe_dest): print('Copying ENSDF Executables to install directory') # Hack for copying the executables the first time PyNE is instealled, before @@ -188,8 +190,10 @@ def copy_ensdf_executables(exe_dest): exe_dest = exe_dest + '/' + f exe_dest = exe_dest + '/pyne' ALPHAD_DEST = os.path.join(exe_dest, 'alphad') + DELTA_DEST = os.path.join(exe_dest, 'delta') try: shutil.copy(ALPHAD_H, ALPHAD_DEST) + shutil.copy(DELTA_H, DELTA_DEST) except Exception: print('Some ENSDF processing executables were unable to be copied to the \ install directory.') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2519815b6e..cac020c99a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -104,6 +104,7 @@ set_source_files_properties(decay.cpp PROPERTIES COMPILE_FLAGS add_executable(alphad ${PROJECT_SOURCE_DIR}/src/ensdf_processing/ALPHAD/alphad.f ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f) +add_executable(delta ${PROJECT_SOURCE_DIR}/src/ensdf_processing/DELTA/delta.for) # Print include dir get_property(inc_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES) diff --git a/src/ensdf_processing/DELTA/delta.for b/src/ensdf_processing/DELTA/delta.for new file mode 100644 index 0000000000..9fd195047c --- /dev/null +++ b/src/ensdf_processing/DELTA/delta.for @@ -0,0 +1,2563 @@ +C PROGRAM DELTA 01 00010 +C 01 00020 +C PROGRAM UNIT 1 01 00030 +C 01 00040 +C VERSION AUGUST, 1983, L.P. EKSTROM, LUND. 01 00050 +C VERSION 1 I/O UNIT NUMBER CHANGED(YS) 01 00060 +C Version 1.01 15-Apr-93 Delinted using FLINT 2.83 01 00070 +C Explicitely typed all variables and 01 00080 +C functions 01 00090 +C Floating overflow in SETFAC corrected and 01 00100 +C routines using factorials adjusted to 01 00110 +C handle change in data storage 01 00120 +C Corrected CLOSE statement on error in 01 00130 +C OPENFI 01 00140 +C Fixed output conversion problem 01 00150 +C (TWB) 01 00160 +C ANALYSES ANGULAR CORRELATION AND CONVERSION COEFFICIENT DATA, 01 00170 +C AND CALCULATES THE BEST VALUES OF MIXING RATIOS. THE SIGN 01 00180 +C CONVENTION IS THAT OF KRANE AND STEFFEN, PHYS.REV. C2(1970)724. 01 00190 +C 01 00200 +C THE GAMMA-GAMMA CASCADE STUDIED IS: 01 00210 +C 01 00220 +C --------- J(1) 01 00230 +C I 01 00240 +C I DELTA(1) (TRANSITION NUMBER 1) 01 00250 +C I 01 00260 +C V 01 00270 +C --------- J(2) 01 00280 +C I . 01 00290 +C I DU(1) . 01 00300 +C I . 01 00310 +C V . 01 00320 +C --------- J(3) . 01 00330 +C . UNOBSERVED TRANSITIONS 01 00340 +C --------- J(NLEV-2) . (MAXIMUM 3) 01 00350 +C I . 01 00360 +C I DU(NLEV-3) . 01 00370 +C I . 01 00380 +C V . 01 00390 +C --------- J(NLEV-1) 01 00400 +C I 01 00410 +C I DELTA(2) (TRANSITION NUMBER 2) 01 00420 +C I 01 00430 +C V 01 00440 +C --------- J(NLEV) 01 00450 +C 01 00460 +C DELTA(1) AND DELTA(2) CAN BE VARIED. THE MIXING RATIOS OF 01 00470 +C THE UNOBSERVED TRANSITIONS ARE FIXED. 01 00480 +C POSSIBLE DATA ITEMS ARE: 01 00490 +C 1) A(2) AND A(4) FOR GAMMA-GAMMA CORRELATION (CORRECTED FOR 01 00500 +C SOLID ANGLE EFFECTS). 01 00510 +C 2) DELTA VALUES FROM OTHER INDEPENDENT MEASUREMENTS (ATAN(DELTA) 01 00520 +C IS USED INTERNALLY). 01 00530 +C 3) CONVERSION COEFFICIENT OR CONVERSION RATIO DATA. 01 00540 +C 01 00550 +C ALL DATA ITEMS ARE TREATED AS INDEPENDENT, AND UNCERTAINTIES 01 00560 +C AS STATISTICAL. NOTE THAT A MEASURED A(2) ONLY GIVES VERY LITTLE 01 00570 +C INFORMATION IF BOTH MIXING RATIOS ARE UNKNOWN. A MEASURED INTERNAL 01 00580 +C CONVERSION COEFFICIENT HELPS A LOT! NOTE THAT DELTA VALUES MAY 01 00590 +C BE SUSPECT WHEN MINIMUM IS NOT APPROXIMATELY PARABOLIC. 01 00600 +C THE DEFAULT STEP SIZE IN ATAN(DELTA) IS 2 DEGREES. THIS IS 01 00610 +C NORMALLY SMALL ENOUGH, BUT FOR VERY ACCURATE DATA A SMALLER 01 00620 +C STEP SIZE (SET WITH OPTION ST) MAY BE NECESSARY. 01 00630 +C 01 00640 +C LIMITATIONS: 01 00650 +C 1) NO TRIPLE CORRELATIONS. 01 00660 +C 2) SPINS UP TO 20 ARE ALLOWED, EXCEPT WHEN UNOBSERVED TRANSTIONS 01 00670 +C ARE INVOLVED. FOR UNOBSERVED TRANSITIONS THE MAXIMUM SPIN 01 00680 +C IS 10. THESE LIMITATIONS ARE VALID IF THE COMPUTER CAN 01 00690 +C HANDLE DOUBLE PRECISION REALS OF UP TO 10**76. 01 00700 +C 3) EFFECTS OF INTERNAL CONVERSION ON THE DEORIENTATION 01 00710 +C COEFFICIENTS FOR MIXED TRANSITIONS ARE NEGLECTED. SEE 01 00720 +C ANICIN ET AL, NUCL.INSTR. 103(1972)395 FOR THIS USUALLY 01 00730 +C VERY SMALL EFFECT. 01 00740 +C 01 00750 +C *INPUT* 01 00760 +C (FILE 25, OPENED IN SUBROUTINE OPENFI) 01 00770 +C ALL CARDS HAVE THE FOLLOWING FORMAT: 01 00780 +C COL. 1-2 SYMBOL THAT DETERMINES TYPE OF CARD. 01 00790 +C COL. 3-72 FREE FORMAT REALS OR INTEGERS. SEPARATOR: ANY 01 00800 +C CHARACTER DIFFERENT FROM '0-9', '.' AND '-'. 01 00810 +C EVERYTHING FOLLOWING A '$' IS IGNORED. THIS CAN 01 00820 +C BE USED FOR COMMENTS ON THE DATA CARDS. 01 00830 +C ONLY DATA AND GO CARDS ARE NECESSARY. UNCERT.= 0 FOR DELTA MEANS 01 00840 +C THAT DELTA IS KEPT FIXED. NEW DATA WITH SAME NAME AS EXISTING 01 00850 +C DATA REPLACE THE LATTER. 01 00860 +C 01 00870 +C OPTIONS (PARAMETERS IN () ARE OPTIONAL) 01 00880 +C CL CLEAR DATA 01 00890 +C DU DUMP COMMON BLOCKS (FOR DEBUGGING) 01 00900 +C OU A A=0 SHORT OUTPUT (DEFAULT) 01 00910 +C A>0 FULL OUTPUT 01 00920 +C ST ST1(,ST2) STEPSIZE (IN DEGREES) FOR ATAN(DELTA1) 01 00930 +C AND ATAN(DELTA2), RESPECTIVELY 01 00940 +C EN END OF RUN 01 00950 +C GO RJ1,RJ2(,RJ3) READ SPINS AND GO. RJ ARE REALS OR 01 00960 +C INTEGERS. (E.G. 5/2-=-2.5, 2+=2, 01 00970 +C 0-=-0) MAXIMUM 6 SPINS. 01 00980 +C HE ANY TEXT HEADER 01 00990 +C LI A,B,C,D LIMITS ATAN(DELTA1) TO A TO B 01 01000 +C AND ATAN(DELTA2) TO C TO D 01 01010 +C UN (DU(1),DU(2),DU(3)) UNOBSERVED TRANSITIONS, DELTAS. 01 01020 +C DEFAULTS=0.0 01 01030 +C 01 01040 +C CORRELATION AND DELTA DATA 01 01050 +C A2 A2,DA2 A2, UNCERTAINTY IN A2 01 01060 +C A4 A4,DA4 A4, UNCERTAINTY IN A4 01 01070 +C D NTR(,DELTA,DDELTA) TRANSITION NUMBER, DELTA, UNCERT. 01 01080 +C IN DELTA. DEFAULTS: NONE,0,0 01 01090 +C 01 01100 +C CONVERSION COEFFICIENT DATA (MAXIMUM 5 ITEMS) 01 01110 +C ** NTR,EXP,DEXP,L1,H1(,L2,H2) 01 01120 +C WHERE ** IS ANY UNIQUE COMBINATION OF SYMBOLS (E.G. CC, AK) 01 01130 +C NTR THE NUMBER OF THE TRANSITION (1 OR 2) 01 01140 +C EXP EXPERIMENTAL VALUE 01 01150 +C DEXP UNCERTAINTY 01 01160 +C L1 THEORETICAL VALUE FOR THE LOWER MULTIPOLE (SHELL1) 01 01170 +C H1 THEORETICAL VALUE FOR THE HIGHER MULTIPOLE (SHELL1) 01 01180 +C FOR RATIOS SHELL1/SHELL2: 01 01190 +C L2 THEORETICAL VALUE FOR THE LOWER MULTIPOLE (SHELL2) 01 01200 +C H2 THEORETICAL VALUE FOR THE HIGHER MULTIPOLE (SHELL2) 01 01210 +C 01 01220 +C TIMING AND CORE REQUIREMENTS FOR NORSK DATA ND-500: 01 01230 +C CORE 58 KBYTES. TIME 8 SEC. FOR ONE SPIN SEQUENCE AND BOTH DELTAS 01 01240 +C VARIED. 01 01250 +C 01 01260 +C *OUTPUT* 01 01270 +C (FILE 26, OPENED IN OPENFI) 01 01280 +C SHORT OUTPUT MARKED WITH A STAR (*) 01 01290 +C FOR EACH SPIN COMBINATION (EACH GO CARD): 01 01300 +C * OPTION AND DATA CARDS READ 01 01310 +C * HEADER 01 01320 +C * DATA 01 01330 +C HEADER 01 01340 +C CHI**2 AND BEST THEORETICAL VALUES OF DATA (STEP IN DELTA1) 01 01350 +C * BEST DELTA1 01 01360 +C HEADER 01 01370 +C * PLOT OF CHI**2 VERSUS ATAN(DELTA1) 01 01380 +C HEADER 01 01390 +C CHI**2 AND BEST THEORETICAL VALUES OF DATA (STEP IN DELTA2) 01 01400 +C * BEST DELTA2 01 01410 +C * PLOT OF CHI**2 VERSUS ATAN(DELTA2) 01 01420 +C * 'END OF ANALYSIS FOR THIS SPIN COMBINATION' 01 01430 +C 01 01440 +C OPTIONALLY A DUMP OF COMMON BLOCK VARIABLES CAN BE OBTAINED 01 01450 +C 01 01460 +C INPUT/OUTPUT UNITS ARE CHOSEN BY DIALOGUE WITH TERMINAL (UNITS 5&6).01 01470 +C ALL TERMINAL COMMUNICATION IS MARKED IN THE CODE FOR EASY 01 01480 +C REMOVAL IF ONE WANTS BATCH MODE. 01 01490 +C 01 01500 +C A MAXIMUM OF 9 DATA ITEMS ARE ALLOWED. THEY ARE STORED 01 01510 +C IN COMMON BLOCK /DATA/ IN THE FOLLOWING ORDER: 01 01520 +C 01 01530 +C INDEX DATA ITEM 01 01540 +C 1 A2 COEFFICIENT 01 01550 +C 2 A4 COEFFICIENT 01 01560 +C 3 ATAN(DELTA1) DATA (NOTE: DELTA ON INPUT, 01 01570 +C ATAN(DELTA) INTERNALLY) 01 01580 +C 4 ATAN(DELTA2) DATA 01 01590 +C 5-9 ANY CONVERSION COEFFICIENT OR RATIO 01 01600 +C 01 01610 +C COMMON BLOCK VARIABLES 01 01620 +C 01 01630 +C /SPINS/ 01 01640 +C J(6) 2*SPIN OF LEVEL 01 01650 +C PI(6) PARITY OF LEVEL (1.0=+, -1.0=-) 01 01660 +C NLEV NUMBER OF LEVELS 01 01670 +C ODD .T.=HALF INTEGER SPINS, .F.=INTEGER SPINS 01 01680 +C 01 01690 +C /COEFFS/ 01 01700 +C R1(2,3) RK COEFFICIENT FOR THE FIRST TRANSITION. FIRST 01 01710 +C INDEX=K/2, SECOND INDEX= LL,LL',L'L' 01 01720 +C R2(2,3) AS R1 BUT FOR SECOND TRANSITION 01 01730 +C U1(2) UK COEFFICIENT FOR 1'ST UNOBSERVED TRANSITION. 01 01740 +C INDEX=K/2 01 01750 +C U2(2) AS U1 BUT FOR 2'ND UNOBSERVED TRANSITION 01 01760 +C U3(2) AS U1 BUT FOR 3'RD UNOBSERVED TRANSITION 01 01770 +C UPROD(2) PRODUCT U1(K)*U2(K)*U3(K). INDEX=K/2. 01 01780 +C 01 01790 +C /DATA/ 01 01800 +C VALUE(9) EXPERIMENTAL VALUE 01 01810 +C ERROR(9) EXPERIMENTAL UNCERTAINTY 01 01820 +C THEO(9) THEORETICAL VALUE 01 01830 +C DATA(9) .T.=DATA GIVEN, .F.=NO DATA 01 01840 +C ITRAN(9) TRANSITION NUMBER FOR WHICH DATA APPLIES 01 01850 +C RLOW1(9) CONVERSION COEFFICIENT FOR LOWER MULTIPOLE (SHELL 1) 01 01860 +C HIGH1(9) CONVERSION COEFFICIENT FOR HIGHER MULTIPOLE (SHELL 1)01 01870 +C NDAT NUMBER OF DATA ITEMS 01 01880 +C RLOW2(9) CONVERSION COEFFICIENT FOR LOWER MULTIPOLE (SHELL 2)01 01890 +C HIGH2(9) CONVERSION COEFFICIENT FOR HIGHER MULTIPOLE (SHELL 2)01 01900 +C RATIO(9) .T.=RATIO SHELL1/SHELL2 GIVEN, .F.=CONVERSION 01 01910 +C COEFFICIENT FOR SHELL 1 GIVEN 01 01920 +C 01 01930 +C /DELTAS/ 01 01940 +C RLLIM(2) LOWER LIMIT OF ATAN(DELTA), INDEX=TRANSITION NUMBER 01 01950 +C RULIM(2) UPPER LIMIT OF ATAN(DELTA), INDEX=TRANSITION NUMBER 01 01960 +C STEP(2) STEP IN ATAN(DELTA), INDEX=TRANSITION NUMBER 01 01970 +C PURE(2) .T.=PURE MULTIPOLE, .F.=MIXED MULTIPOLES. INDEX= 01 01980 +C TRANSITION NUMBER 01 01990 +C NUMU NUMBER OF UNOBSERVED TRANSITIONS 01 02000 +C DU(3) DELTA OF UNOBSERVED TRANSITION. INDEX= 01 02010 +C UNOBSERVED TRANSITION NUMBER 01 02020 +C 01 02030 +C /CARD/ (CHARACTER) 01 02040 +C CARD*80 STRING CONTAINING LAST DATA CARD READ 01 02050 +C 01 02060 +C /FAC/ 01 02070 +C FA(114) FACTORIALS FOR CLEGOR AND WCOEFF 01 02080 +C (kept between 0.1 and 1. to avoid floating overflow 01 02090 +C by storing exponent separately) 01 02100 +C ifa(114) Exponent of fa 01 02110 +C 01 02120 +C /MISC/ 01 02130 +C DUMP .T.=DUMP ON, .F.=DUMP OFF 01 02140 +C NFREE NUMBER OF DEGREES OF FREEDOM IN FIT 01 02150 +C NUMB NUMBER OF ATAN(DELTA) POINTS 01 02160 +C QSQ(181) UNNORMALIZED CHI**2 01 02170 +C ALIM(2,2) LIMITS IN ATAN(DELTA). FIRST INDEX=TRANSITION 01 02180 +C NUMBER, SECOND INDEX: 1=LOWER, 2=UPPER 01 02190 +C SHORT .T.=SHORT OUTPUT, .F.=FULL OUTPUT 01 02200 +C 01 02210 +C /CHARAC/ (CHARACTER) 01 02220 +C NAME(9)*2 NAME OF DATA ITEM, INDEX=ITEM NUMBER 01 02230 +C MULL(2)*2 LOWER MULTIPOLARITY, INDEX=TRANSITION NUMBER 01 02240 +C MULH(2)*2 HIGHER MULTIPOLARITY, INDEX=TRANSITION NUMBER 01 02250 +C TITLE*80 LAST HEADER 01 02260 +C 01 02270 +C 01 02280 +C 01 02290 +C PROGRAM UNITS (ALPHABETICAL): 01 02300 +C 01 02310 +C NAME NUMBER I/O TYPE 01 02320 +C AK 22 REAL FUNCTION 01 02330 +C AOUT 4 * ENTRY 01 02340 +C BOUT 4 * ENTRY 01 02350 +C CC 21 REAL FUNCTION 01 02360 +C CLEAR 32 SUROUTINE 01 02370 +C CLEGOR 27 REAL FUNCTION 01 02380 +C COUT 4 * ENTRY 01 02390 +C CREAD 31 SUBROUTINE 01 02400 +C DELOUT 4 * ENTRY 01 02410 +C DIPS 10 SUBROUTINE 01 02420 +C DOUT 4 * ENTRY 01 02430 +C DUMPP 7 * SUBROUTINE 01 02440 +C EOUT 4 * ENTRY 01 02450 +C F 19 REAL FUNCTION 01 02460 +C HEADR 5 * SUBROUTINE 01 02470 +C HEOUT 4 * ENTRY 01 02480 +C HIST 6 * SUBROUTINE 01 02490 +C HOUT 4 * ENTRY 01 02500 +C ISPIN 16 INTEGER FUNCTION 01 02510 +C LIFIVE 17 REAL FUNCTION 01 02520 +C LINE 20 * SUBROUTINE 01 02530 +C LITENT 18 REAL FUNCTION 01 02540 +C MAIN 1 # MAIN PROGRAM 01 02550 +C MOUT 4 * ENTRY 01 02560 +C OPENFI 2 # SUBROUTINE 01 02570 +C OUT 4 * SUBROUTINE 01 02580 +C PAROUT 4 * ENTRY 01 02590 +C POUT 4 * ENTRY 01 02600 +C QUADIN 15 SUBROUTINE 01 02610 +C RDDATA 3 $ SUBROUTINE 01 02620 +C RK 25 REAL FUNCTION 01 02630 +C RMINIM 9 REAL FUNCTION 01 02640 +C SETCOF 12 SUBROUTINE 01 02650 +C SETFAC 30 SUBROUTINE 01 02660 +C SETUP 11 SUBROUTINE 01 02670 +C SETVAL 13 SUBROUTINE 01 02680 +C SOUT 4 * ENTRY 01 02690 +C SQRES 14 REAL FUNCTION 01 02700 +C SRK 23 SUBROUTINE 01 02710 +C SUK 24 SUBROUTINE 01 02720 +C TOUT 4 * ENTRY 01 02730 +C TRI 29 DOUBLE PRECISION FUNCTION 01 02740 +C TROUT 4 *,# ENTRY 01 02750 +C UK 26 REAL FUNCTION 01 02760 +C WCOEFF 28 REAL FUNCTION 01 02770 +C WORK 8 SUBROUTINE 01 02780 +C 01 02790 +C * OUTPUT (UNIT 6) 01 02800 +C $ INPUT (UNIT 5) 01 02810 +C # TERMINAL COMMUNICATION (UNIT 1) 01 02820 +C 01 02830 +C **********************************************************************01 02840 +C 01 02850 +C NOPT IS NUMBER OF OPTIONS 01 02860 + Integer nopt 01 02870 + PARAMETER (NOPT=9) 01 02880 +C 01 02890 + Integer j(6),nlev 01 02900 + LOGICAL ODD 01 02910 + Real pi(6) 01 02920 + COMMON /SPINS/ J,PI,NLEV,ODD 01 02930 +C 01 02940 + Real r1(2,3),r2(2,3),u1(2),u2(2),u3(2),uprod(2) 01 02950 + Common /COEFS/ R1,R2,U1,U2,U3,UPROD 01 02960 + Real value(9),error(9),theo(9),rlow1(9),high1(9),rlow2(9),high2(9)01 02970 + Integer itran(9),ndat 01 02980 + Logical data(9),ratio(9) 01 02990 + Common /DATA/ VALUE,ERROR,THEO,DATA,ITRAN,RLOW1,HIGH1,NDAT, 01 03000 + 2 RLOW2,HIGH2,RATIO 01 03010 +C 01 03020 + Integer numu 01 03030 + Logical pure(2) 01 03040 + Real rllim(2),rulim(2),step(2),du(3) 01 03050 + Common /DELTAS/ RLLIM,RULIM,STEP,PURE,NUMU,DU 01 03060 +C 01 03070 + Integer nfree,numb 01 03080 + LOGICAL DUMP,SHORT 01 03090 + Real QSQ(181),alim(2,2) 01 03100 + Common /MISC/ DUMP,NFREE,NUMB,QSQ,ALIM,SHORT 01 03110 +C 01 03120 + Character*80 CARD 01 03130 + Common /CARD/ CARD 01 03140 +C 01 03150 + Character*2 NAME(9),MULL(2),MULH(2) 01 03160 + CHARACTER*80 TITLE 01 03170 + Common /CHARAC/ NAME,MULL,MULH,TITLE 01 03180 +C 01 03190 + Integer ifa(114) 01 03200 + Double Precision fa(114) 01 03210 + COMMON /FAC/ ifa,FA 01 03220 +C 01 03230 + Integer i,ng,np,ns,nsave 01 03240 + Real help1,help2,rads,t(10) 01 03250 + Character*2 iopt(nopt) 01 03260 +C 01 03270 + Integer Ispin 01 03280 + External Ispin 01 03290 +C 01 03300 + Real ATAN 01 03310 + Intrinsic ATAN 01 03320 +C 01 03330 + DATA IOPT /'GO','EN','CL','DU','HE','LI','UN','OU','ST'/ 01 03340 +C RADS IS PI/180 01 03350 + DATA RADS /0.0174532/ 01 03360 +C 01 03370 +C MAIN PROGRAM, CHECKS INPUT 01 03380 +C 01 03390 +C OPENS I/O UNITS 01 03400 + CALL OPENFI 01 03410 +C INITIALIZES 01 03420 + CALL SETFAC 01 03430 + CALL CLEAR 01 03440 +1 CALL RDDATA(CARD,T,NP) 01 03450 +C CHECK IF OPTION 01 03460 + DO 2 I=1,NOPT 01 03470 + IF(CARD(1:2).EQ.IOPT(I)) THEN 01 03480 + NSAVE=I 01 03490 + GO TO 10 01 03500 + ENDIF 01 03510 +2 CONTINUE 01 03520 + 01 03530 +C CHECK IF EXISTING DATA 01 03540 + DO 3 I=1,NDAT 01 03550 + IF(CARD(1:2).EQ.NAME(I)) THEN 01 03560 + NSAVE=I 01 03570 + GO TO 20 01 03580 + ENDIF 01 03590 +3 CONTINUE 01 03600 + 01 03610 +C IT MUST BE NEW DATA 01 03620 + GO TO 30 01 03630 + 01 03640 +C OPTION SWITCH 01 03650 +10 GO TO (11,12,13,14,15,16,17,18,19),NSAVE 01 03660 + 01 03670 +C OPTION IS GO 01 03680 +11 IF(NUMU.GT.0.AND.NP.LT.(NUMU+3)) CALL TROUT(11,'MAIN', 01 03690 + # 'TOO FEW OR TOO MANY LEVELS') 01 03700 + IF(NP.LT.2.OR.NP.GT.6) CALL TROUT(111,'MAIN', 01 03710 + # 'WRONG NUMBER OF LEVELS') 01 03720 + IF((DATA(1).OR.DATA(2).OR.DATA(4)).AND.(NP.LT.3)) 01 03730 + # CALL TROUT(112,'MAIN', 01 03740 + # 'TOO FEW LEVELS WITH CORRELATION OR DELTA(2) DATA') 01 03750 + NLEV=NP 01 03760 +C CALCULATE 2*SPIN AND PARITY 01 03770 + DO 115 I=1,NLEV 01 03780 + J(I)=ISPIN(T(I),PI(I)) 01 03790 +115 CONTINUE 01 03800 + 01 03810 +C********* WRITE ON TERMINAL 01 03820 + WRITE(6,1151) TITLE 01 03830 +1151 FORMAT(/1X,A) 01 03840 + WRITE(6,1152) (J(I), I=1,NLEV) 01 03850 +1152 FORMAT(' 2*SPINS:',6I7) 01 03860 +C*********************************** 01 03870 +C 01 03880 +C EVEN OR ODD SPINS? CHECK SPINS 01 03890 + ODD=(MOD(J(1),2).NE.0) 01 03900 + DO 117 I=2,NLEV 01 03910 + IF(ODD .AND. .NOT.(MOD(J(I),2).NE.0)) 01 03920 + 2 CALL TROUT(116,'MAIN','MIXED INTEGER/HALF INTEGER SPINS') 01 03930 +117 CONTINUE 01 03940 +C PREPARE FOR CHI**2 ANALYSIS 01 03950 + CALL SETUP 01 03960 +C PRINT HEADER 01 03970 + CALL HEADR 01 03980 +C OPTIONAL DUMP OF COMMON BLOCKS 01 03990 + IF(DUMP) CALL DUMPP 01 04000 +C PRINT OUT DATA 01 04010 + CALL DOUT 01 04020 +C PRINT OUT ATAN(DELTA) LIMITS 01 04030 + CALL POUT 01 04040 +C PERFORM CHI**2 ANALYSIS 01 04050 + CALL WORK 01 04060 +C 'END OF ANALYSIS FOR THIS SPIN COMBINATION' 01 04070 + CALL OUT 01 04080 + GO TO 1 01 04090 + 01 04100 +C OPTION IS EN 01 04110 +12 IF(NP.NE.0) CALL TROUT(12,'MAIN','PARAMETER ON END CARD') 01 04120 + CALL EOUT 01 04130 + STOP 01 04140 + 01 04150 +C OPTION IS CL 01 04160 +13 IF(NP.NE.0) CALL TROUT(13,'MAIN','PARAMETER ON CLEAR CARD') 01 04170 + CALL CLEAR 01 04180 + GO TO 1 01 04190 + 01 04200 +C OPTION IS DU 01 04210 +14 IF(NP.NE.0) CALL TROUT(14,'MAIN','PARAMETER ON DUMP CARD') 01 04220 + DUMP=.TRUE. 01 04230 + GO TO 1 01 04240 + 01 04250 +C OPTION IS HE 01 04260 +15 CONTINUE 01 04270 + TITLE=CARD(3:72) 01 04280 + GO TO 1 01 04290 + 01 04300 +C OPTION IS LI 01 04310 +16 IF(NP.NE.4) CALL TROUT(16,'MAIN', 01 04320 + # '4 AND ONLY 4 PARAMETERS ALLOWED ON LIMIT CARD') 01 04330 + DO 161 I=1,2 01 04340 + ALIM(I,1)=T(2*I-1) 01 04350 +161 ALIM(I,2)=T(2*I) 01 04360 + GO TO 1 01 04370 + 01 04380 +C OPTION IS UN 01 04390 +17 IF(NP.GT.3) CALL TROUT(17,'MAIN', 01 04400 + # 'MAXIMUM 3 UNOBSERVED TRANSITIONS') 01 04410 + NUMU=NP 01 04420 + DO 171 I=1,3 01 04430 +171 DU(I)=T(I) 01 04440 + GO TO 1 01 04450 + 01 04460 +C OPTION IS OU 01 04470 +18 IF(NP.GT.1) CALL TROUT(18,'MAIN', 01 04480 + # 'TOO MANY PARAMETERS ON OUTPUT CARD') 01 04490 + IF(T(1).LE.0) THEN 01 04500 + SHORT=.TRUE. 01 04510 + ELSE 01 04520 + SHORT=.FALSE. 01 04530 + ENDIF 01 04540 + GO TO 1 01 04550 + 01 04560 +C OPTION IS ST 01 04570 +19 IF(NP.GT.2) CALL TROUT(19,'MAIN', 01 04580 + # 'TOO MANY PARAMETERS ON STEP CARD') 01 04590 + DO 191 I=1,2 01 04600 + IF(T(I).GE.0.01) THEN 01 04610 + STEP(I)=T(I) 01 04620 + ELSE 01 04630 +C DEFAULT STEP IS 2 DEGREES 01 04640 + STEP(I)=2.0 01 04650 + ENDIF 01 04660 +191 CONTINUE 01 04670 + GO TO 1 01 04680 + 01 04690 +C DATA SWITCH 01 04700 +20 GO TO (21,22,23,23,25,25,25,25,25),NSAVE 01 04710 + 01 04720 +C DATA IS A2 01 04730 +21 IF(NP.NE.2) CALL TROUT(21,'MAIN', 01 04740 + # 'A2 DATA SHOULD BE: VALUE, UNCERTAINTY') 01 04750 + VALUE(1)=T(1) 01 04760 + ERROR(1)=T(2) 01 04770 + IF(ERROR(1).GT.0.0) THEN 01 04780 + DATA(1)=.TRUE. 01 04790 + ELSE 01 04800 + DATA(1)=.FALSE. 01 04810 + ENDIF 01 04820 + GO TO 1 01 04830 + 01 04840 +C DATA IS A4 01 04850 +22 IF(NP.NE.2) CALL TROUT(22,'MAIN', 01 04860 + # 'A4 DATA SHOULD BE: VALUE, UNCERTAINTY') 01 04870 + VALUE(2)=T(1) 01 04880 + ERROR(2)=T(2) 01 04890 + IF(ERROR(2).GT.0.0) THEN 01 04900 + DATA(2)=.TRUE. 01 04910 + ELSE 01 04920 + DATA(2)=.FALSE. 01 04930 + ENDIF 01 04940 + GO TO 1 01 04950 + 01 04960 +C DATA IS D 01 04970 +23 IF(NP.LT.1.OR.NP.GT.3) CALL TROUT(23,'MAIN', 01 04980 + # ' DELTA DATA SHOULD BE: GAMMA NUMBER, VALUE, UNCERTAINTY') 01 04990 + NG=T(1)+0.1 01 05000 + IF(NG.LT.1.OR.NG.GT.2) CALL TROUT(231,'MAIN', 01 05010 + # 'INVALID GAMMA NUMBER') 01 05020 + HELP1=T(2)+T(3) 01 05030 + HELP2=T(2)-T(3) 01 05040 + VALUE(NG+2)=ATAN(T(2))/RADS 01 05050 + ERROR(NG+2)=(ATAN(HELP1)-ATAN(HELP2))/(2.*RADS) 01 05060 + ITRAN(NG+2)=NG 01 05070 + IF(T(3).LE.0.0) THEN 01 05080 + DATA(NG+2)=.FALSE. 01 05090 + PURE(NG)=.TRUE. 01 05100 + ERROR(NG+2)=0.0 01 05110 + ELSE 01 05120 + DATA(NG+2)=.TRUE. 01 05130 + PURE(NG)=.FALSE. 01 05140 + ENDIF 01 05150 + GO TO 1 01 05160 + 01 05170 +C OTHER EXISTING TYPE OF DATA 01 05180 +25 IF(NP.NE.5.AND.NP.NE.7) CALL TROUT(25,'MAIN', 01 05190 + # 'WRONG NUMBER OF PARAMETERS ON CC DATA CARD') 01 05200 +C CHECK THAT DATA IS FOR SAME GAMMA AS BEFORE, IF NOT: IT IS NEW DATA 01 05210 + NG=T(1)+0.1 01 05220 + IF(NG.LT.1.OR.NG.GT.2) CALL TROUT(26,'MAIN', 01 05230 + # 'INVALID GAMMA NUMBER') 01 05240 + IF(ITRAN(NSAVE).NE.NG) THEN 01 05250 +C LOOK FOR DATA WITH SAME NAME, BUT FOR OTHER TRANSITION 01 05260 + DO 27 I=NSAVE+1,NDAT 01 05270 + NS=I 01 05280 + IF(CARD(1:2).EQ.NAME(I)) THEN 01 05290 + IF(ITRAN(NS).EQ.NG) THEN 01 05300 + GO TO 28 01 05310 + ELSE 01 05320 + GO TO 30 01 05330 + ENDIF 01 05340 + ENDIF 01 05350 +27 CONTINUE 01 05360 + GO TO 30 01 05370 +28 CONTINUE 01 05380 + NSAVE=NS 01 05390 + ENDIF 01 05400 + VALUE(NSAVE)=T(2) 01 05410 + ERROR(NSAVE)=T(3) 01 05420 + RLOW1(NSAVE)=T(4) 01 05430 + HIGH1(NSAVE)=T(5) 01 05440 + IF(T(6).LE.0.OR.T(7).LE.0) THEN 01 05450 + RLOW2(NSAVE)=1.0 01 05460 + HIGH2(NSAVE)=1.0 01 05470 + RATIO(NSAVE)=.FALSE. 01 05480 + ELSE 01 05490 + RLOW2(NSAVE)=T(6) 01 05500 + HIGH2(NSAVE)=T(7) 01 05510 + RATIO(NSAVE)=.TRUE. 01 05520 + ENDIF 01 05530 + IF(T(3).LE.0.0) THEN 01 05540 + DATA(NSAVE)=.FALSE. 01 05550 + ELSE 01 05560 + DATA(NSAVE)=.TRUE. 01 05570 + ENDIF 01 05580 + GO TO 1 01 05590 + 01 05600 +C NEW DATA 01 05610 +30 IF(NDAT.GE.9) CALL TROUT(30,'MAIN','TOO MUCH DATA') 01 05620 + IF(NP.NE.5.AND.NP.NE.7) CALL TROUT(301,'MAIN', 01 05630 + # 'WRONG NUMBER OF PARAMETERS ON CC DATA CARD') 01 05640 + NDAT=NDAT+1 01 05650 + NAME(NDAT)=CARD(1:2) 01 05660 + NG=T(1)+0.1 01 05670 + IF(NG.LT.1.OR.NG.GT.2) CALL TROUT(302,'MAIN', 01 05680 + # 'INVALID GAMMA NUMBER') 01 05690 + ITRAN(NDAT)=NG 01 05700 + VALUE(NDAT)=T(2) 01 05710 + ERROR(NDAT)=T(3) 01 05720 + RLOW1(NDAT)=T(4) 01 05730 + HIGH1(NDAT)=T(5) 01 05740 + IF(T(6).LE.0.OR.T(7).LE.0) THEN 01 05750 + RLOW2(NDAT)=1.0 01 05760 + HIGH2(NDAT)=1.0 01 05770 + RATIO(NDAT)=.FALSE. 01 05780 + ELSE 01 05790 + RLOW2(NDAT)=T(6) 01 05800 + HIGH2(NDAT)=T(7) 01 05810 + RATIO(NDAT)=.TRUE. 01 05820 + ENDIF 01 05830 + IF(T(3).LE.0.0) THEN 01 05840 + DATA(NDAT)=.FALSE. 01 05850 + ELSE 01 05860 + DATA(NDAT)=.TRUE. 01 05870 + ENDIF 01 05880 + GO TO 1 01 05890 + END 01 05900 + SUBROUTINE OPENFI 02 00010 +C 02 00020 +C PROGRAM UNIT 2 02 00030 +C ROUTINE TO READ (FROM TERMINAL) NAMES OF I/O UNITS AND OPEN THEM. 02 00040 +C 02 00050 + CHARACTER*80 INAME,ONAME,NAME 02 00060 +C 02 00070 + 9000 FORMAT(A) 02 00080 +C 02 00090 +C********** TERMINAL COMMUNICATION 02 00100 + WRITE(6,*) 02 00110 + WRITE(6,*)' ++ DELTA, version 1.01 [15-Apr-1993] ++' 02 00120 + WRITE(6,*)' Analyse gamma-gamma correlations' 02 00130 + WRITE(6,*) 02 00140 +1 WRITE(6,*)' Enter INPUT-FILENAME:' 02 00150 + WRITE(6,*) 02 00160 + READ(5,9000) INAME 02 00170 + NAME=INAME 02 00180 +C OPEN INPUT FILE 02 00190 +C **** NOTE: ACCESS MODE MAY HAVE TO BE CHANGED ON SOME INSTALLATIONS 02 00200 + OPEN(25,FILE=INAME,STATUS='OLD',ERR=99) 02 00210 + WRITE(6,*) ' Enter OUTPUT-FILENAME:' 02 00220 + WRITE(6,*) 02 00230 + READ(5,9000) ONAME 02 00240 + NAME=ONAME 02 00250 +C OPEN OUTPUT FILE 02 00260 +C **** NOTE: ACCESS MODE MAY HAVE TO BE CHANGED ON SOME INSTALLATIONS 02 00270 + OPEN(26,FILE=ONAME,STATUS='UNKNOWN') 02 00280 + WRITE(6,*)' DELTA started with INPUT FILE ',INAME 02 00290 + WRITE(6,*)' and OUTPUT FILE ',ONAME 02 00300 + RETURN 02 00310 +99 CONTINUE 02 00320 + WRITE(6,*)' Error in OPEN' 02 00330 + WRITE(6,*)' File name ',NAME 02 00340 + WRITE(6,*)' Let us try again!' 02 00350 +C****************************************************** 02 00360 + If(name .EQ. iname)GoTo 1 02 00370 + Close(25) 02 00380 + GO TO 1 02 00390 + END 02 00400 + SUBROUTINE RDDATA (CARD,T,NP) 03 00010 +C 03 00020 +C PROGRAM UNIT 3 03 00030 +C READ CARD AND PRINT IT OUT UNLESS IT CONTAINS NO PARAMETERS 03 00040 +C HEADER (CARD(1:2)='HE') TAKES SPECIAL TREATMENT 03 00050 +C 03 00060 +C DUMMY ARGUMENTS: 03 00070 +C CARD * STRING CONTAINING CARD 03 00080 +C T * REALS FOUND ON CARD 03 00090 +C NP * NUMBER OF REALS FOUND ON CARD 03 00100 +C * ASSIGNED IN ROUTINE (LAST TWO ACTUALLY IN CREAD) 03 00110 +C 03 00120 + Integer np 03 00130 + Real t(10) 03 00140 + Character*80 card 03 00150 +C 03 00160 + Integer ipos 03 00170 + CHARACTER*80 CARD1 03 00180 +C 03 00190 + Integer INDEX 03 00200 + Intrinsic INDEX 03 00210 + 03 00220 + NP=0 03 00230 + READ(25,1000) CARD 03 00240 +C CHECK IF HEADER CARD 03 00250 + IF(CARD(1:2).EQ.'HE') THEN 03 00260 + CALL HEOUT 03 00270 + RETURN 03 00280 + ENDIF 03 00290 +C PUT CARD WITHOUT COMMENTS IN CARD1 03 00300 + IPOS=INDEX(CARD,'$') 03 00310 + IF(IPOS.GT.0) THEN 03 00320 + CARD1=CARD(1:IPOS-1) 03 00330 + ELSE 03 00340 + CARD1=CARD 03 00350 + ENDIF 03 00360 + 03 00370 + CALL CREAD(NP,T,CARD1) 03 00380 + IF (NP.LE.0) RETURN 03 00390 + CALL PAROUT(NP,T) 03 00400 + RETURN 03 00410 + 03 00420 + 1000 FORMAT(A) 03 00430 + END 03 00440 + SUBROUTINE OUT 04 00010 +C 04 00020 +C PROGRAM UNIT 4 04 00030 +C OUTPUT ROUTINES, NOTE SEVERAL ENTRIES: 04 00040 +C AOUT BOUT COUT DELOUT DOUT EOUT HEOUT 04 00050 +C HOUT MOUT SOUT TOUT TROUT PAROUT POUT 04 00060 +C 04 00070 + Integer j(6),nlev 04 00080 + LOGICAL ODD 04 00090 + Real pi(6) 04 00100 + COMMON /SPINS/ J,PI,NLEV,ODD 04 00110 +C 04 00120 + Real r1(2,3),r2(2,3),u1(2),u2(2),u3(2),uprod(2) 04 00130 + Common /COEFS/ R1,R2,U1,U2,U3,UPROD 04 00140 + Real value(9),error(9),theo(9),rlow1(9),high1(9),rlow2(9),high2(9)04 00150 + Integer itran(9),ndat 04 00160 + Logical data(9),ratio(9) 04 00170 + Common /DATA/ VALUE,ERROR,THEO,DATA,ITRAN,RLOW1,HIGH1,NDAT, 04 00180 + 2 RLOW2,HIGH2,RATIO 04 00190 +C 04 00200 + Integer numu 04 00210 + Logical pure(2) 04 00220 + Real rllim(2),rulim(2),step(2),du(3) 04 00230 + Common /DELTAS/ RLLIM,RULIM,STEP,PURE,NUMU,DU 04 00240 +C 04 00250 + Character*80 CARD 04 00260 + Common /CARD/ CARD 04 00270 +C 04 00280 + Character*2 NAME(9),MULL(2),MULH(2) 04 00290 + CHARACTER*80 TITLE 04 00300 + Common /CHARAC/ NAME,MULL,MULH,TITLE 04 00310 +C 04 00320 + Integer ntr 04 00330 + Real best,errl,errr,sigma,sigman 04 00340 +C 04 00350 + Integer i,ng 04 00360 +C 04 00370 + Integer np 04 00380 + Real t(np) 04 00390 +C 04 00400 + Integer ii 04 00410 +C 04 00420 + Real sq 04 00430 +C 04 00440 + Integer jnum 04 00450 + CHARACTER*(*) PROG,MESS 04 00460 +C 04 00470 + Real ABS 04 00480 + Intrinsic ABS 04 00490 +C 04 00500 +C END OF THIS SPIN COMBINATION 04 00510 + WRITE(26,171) 04 00520 + RETURN 04 00530 + 04 00540 + ENTRY AOUT 04 00550 +C NO CORRELATION DATA 04 00560 + WRITE(26,140) 04 00570 + RETURN 04 00580 + 04 00590 + ENTRY BOUT 04 00600 +C NFREE IS LE 0 04 00610 + WRITE(26,150) 04 00620 + RETURN 04 00630 + 04 00640 + ENTRY COUT 04 00650 +C DATA CLEARED 04 00660 + WRITE(26,165) 04 00670 + RETURN 04 00680 + 04 00690 + ENTRY DELOUT(NTR,BEST,ERRL,ERRR,SIGMA,SIGMAN) 04 00700 +C PRINTS BEST DELTAS 04 00710 +C 04 00720 +C DUMMY ARGUMENTS: 04 00730 +C NTR TRANSITION NUMBER 04 00740 +C BEST BEST DELTA 04 00750 +C ERRL LEFT UNCERTAINTY (-) 04 00760 +C ERRL RIGHT UNCERTAINTY (+) 04 00770 +C SIGMA ADDED TO UNNORM. CHI**2 TO GET UNCERTAINTY 04 00780 +C SIGMAN SIGMA/DEGREE OF FREEDOM 04 00790 +C 04 00800 + If(ABS(best) .LT. 100. .AND. errr .LT. 100. 04 00810 + 2 .AND. errl .LT. 100.)Then 04 00820 + WRITE(26,170) NTR,BEST,ERRR,ERRL,SIGMA,SIGMAN 04 00830 + Else 04 00840 + Write(26,FMT='(/'' DELTA('',I1,'')='',E10.3,'' +'',E9.3, 04 00850 + 2 '' -'',E9.3,'' SIGMA='',F8.3, 04 00860 + 3 '' SIGMA/DEGREE OF FREEDOM='',F7.3)') 04 00870 + 4 ntr,best,errr,errl,sigma,sigman 04 00880 + Endif 04 00890 + RETURN 04 00900 + 04 00910 + ENTRY DOUT 04 00920 +C PRINTS DATA 04 00930 + WRITE(26,100) 04 00940 + DO 45 I=1,NDAT 04 00950 + IF(DATA(I)) THEN 04 00960 + IF(I.EQ.1.OR.I.EQ.2) WRITE(26,101) NAME(I),VALUE(I),ERROR(I)04 00970 + IF(I.EQ.3.OR.I.EQ.4) WRITE(26,102) NAME(I),ITRAN(I),VALUE(I)04 00980 + # ,ERROR(I) 04 00990 + NG=ITRAN(I) 04 01000 + IF(I.GT.4) WRITE(26,103) NAME(I),VALUE(I),ERROR(I),NG, 04 01010 + # RLOW1(I),MULL(NG),HIGH1(I),MULH(NG) 04 01020 + IF(I.GT.4.AND.RATIO(I)) WRITE(26,104) RLOW2(I),MULL(NG), 04 01030 + # HIGH2(I),MULH(NG) 04 01040 + ENDIF 04 01050 +45 CONTINUE 04 01060 + RETURN 04 01070 + 04 01080 + ENTRY EOUT 04 01090 +C END PROGRAM 04 01100 + WRITE(26,173) 04 01110 + RETURN 04 01120 + 04 01130 + ENTRY HEOUT 04 01140 +C PRINT OUT HEADER CARD 04 01150 + WRITE(26,182) CARD(3:72) 04 01160 + RETURN 04 01170 + 04 01180 + ENTRY HOUT 04 01190 +C PRINTS TABLE HEADER FOR RESULTS TABLE 04 01200 + IF(NDAT.EQ.4) WRITE(26,110) 04 01210 + IF(NDAT.GT.4) WRITE(26,110) (NAME(I),ITRAN(I), I=5,NDAT) 04 01220 + RETURN 04 01230 + 04 01240 + ENTRY MOUT(NTR) 04 01250 +C HEADER FOR BEST DELTA 04 01260 +C 04 01270 +C DUMMY ARGUMENT: 04 01280 +C NTR TRANSITION NUMBER 04 01290 +C 04 01300 + WRITE(26,160) NTR 04 01310 + RETURN 04 01320 + 04 01330 + ENTRY SOUT(NTR) 04 01340 +C STEPPING IN ATAN(DELTA(NTR)) 04 01350 +C 04 01360 +C DUMMY ARGUMENT: 04 01370 +C NTR TRANSITION NUMBER 04 01380 +C 04 01390 + WRITE(26,172) NTR 04 01400 + RETURN 04 01410 + 04 01420 + ENTRY PAROUT(NP,T) 04 01430 +C PRINT PARAMETERS FROM CARD 04 01440 +C 04 01450 +C DUMMY ARGUMENTS: 04 01460 +C NP NUMBER OF PARAMETERS 04 01470 +C T THE PARAMETERS (REALS) 04 01480 +C 04 01490 + WRITE(26,184) CARD(1:2),(T(I), I=1,NP) 04 01500 + RETURN 04 01510 + 04 01520 + ENTRY POUT 04 01530 +C PRINTS DELTA LIMITS 04 01540 + II=2 04 01550 + IF(NLEV.LE.2) II=1 04 01560 + DO 951 I=1,II 04 01570 + IF(PURE(I)) WRITE(26,130) I 04 01580 + IF(.NOT.PURE(I)) WRITE(26,131) I,RLLIM(I),RULIM(I),STEP(I) 04 01590 +951 CONTINUE 04 01600 + RETURN 04 01610 + 04 01620 + ENTRY TOUT(SQ) 04 01630 +C PRINTS ONE LINE OF RESULTS TABLE 04 01640 +C 04 01650 +C DUMMY ARGUMENT: 04 01660 +C SQ UNNORM. CHI**2 04 01670 +C 04 01680 + WRITE(26,120) SQ,(THEO(I), I=1,NDAT) 04 01690 + RETURN 04 01700 + 04 01710 + ENTRY TROUT(JNUM,PROG,MESS) 04 01720 +C 04 01730 +C ENTRY TO DIAGNOSE FATAL ERRORS 04 01740 +C 04 01750 +C DUMMY ARGUMENTS: 04 01760 +C JNUM LINE NUMBER WHERE ERROR OCURRED 04 01770 +C PROG PROGRAM UNIT WHERE ERROR OCCURRED 04 01780 +C MESS MESSAGE DEFINING THE ERROR 04 01790 +C 04 01800 + 04 01810 + WRITE(26,180) PROG,JNUM,MESS,CARD 04 01820 +C********** WRITING ON TERMINAL 04 01830 + WRITE(6,180) PROG,JNUM,MESS,CARD 04 01840 +C************************************* 04 01850 + CALL DUMPP 04 01860 + STOP 04 01870 + 04 01880 +100 FORMAT(//' +++++++ DATA +++++++') 04 01890 +101 FORMAT(1X,A,' =',F10.3,'+-',F8.3) 04 01900 +102 FORMAT(1X,A,I1,'=',F10.3,'+-',F8.3,' (ATAN(DELTA))') 04 01910 +103 FORMAT(1X,A,' =',F10.4,'+-',F8.4,' FOR TRANSITION', 04 01920 + # I2,'. THEORETICAL VALUES=',F10.4,' FOR ',A,' AND', 04 01930 + # F10.4,' FOR ',A) 04 01940 +104 FORMAT(40X,'* RATIO * OTHER SHELL:',F10.4,' FOR ',A, 04 01950 + # ' AND',F10.4,' FOR ',A) 04 01960 +110 FORMAT(//4X,'SQ.RES.',8X,'A2',8X,'A4',2X,'ATAN(D1)', 04 01970 + # 2X,'ATAN(D2)',5(5X,A,'(',I1,')')) 04 01980 +120 FORMAT(1X,3F10.3,2F10.1,5F10.4) 04 01990 +130 FORMAT(/' ATAN(D',I1,') KEPT FIXED') 04 02000 +131 FORMAT(/' ATAN(D',I1,') VARIED FROM',F6.1,' TO', 04 02010 + # F6.1,' IN STEPS OF',F4.1,' DEGREES') 04 02020 +140 FORMAT(/' * NO CORRELATION DATA. DELTA VALUES SHOULD ', 04 02030 + # 'BE INTERPRETED AS ABSOLUTE VALUES *') 04 02040 +150 FORMAT(/' *** NUMBER OF DEGRRES OF FREEDOM IS 0 OR NEGATIVE', 04 02050 + # ' FOR THIS SPIN COMBINATION. CONFIDENCE LIMITS ARE NOT', 04 02060 + # ' MEANINGFUL ***') 04 02070 +160 FORMAT(///' DELTA(',I1,') MINIMUM') 04 02080 +165 FORMAT(//' * DATA CLEARED *') 04 02090 +170 FORMAT(/' DELTA(',I1,')=',F7.3,' +',F6.3,' -',F6.3, 04 02100 + # ' SIGMA=',F8.3,' SIGMA/DEGREE OF FREEDOM=',F7.3) 04 02110 +171 FORMAT(////' +++++++ END OF ANALYSIS FOR THIS SPIN ', 04 02120 + # 'COMBINATION ',77('+')) 04 02130 +172 FORMAT(/' STEPPING IN ATAN(DELTA',I1,')') 04 02140 +173 FORMAT(///' ------- PROGRAM END') 04 02150 + 04 02160 +180 FORMAT(///' ***** SERIOUS ERROR IN ROUTINE ',A,' *****'/ 04 02170 + # ' STATEMENT NUMBER IS:',I5/ 04 02180 + # ' MESSAGE IS: ',A/ 04 02190 + # ' LAST CARD READ IS:'/ 04 02200 + # 1X,8('1234567890')/1X,A) 04 02210 +182 FORMAT(/' HEADER: ',A) 04 02220 +184 FORMAT(/' * ',A2,'-DATA',10F10.4) 04 02230 + END 04 02240 + SUBROUTINE HEADR 05 00010 +C 05 00020 +C PROGRAM UNIT 5 05 00030 +C PRINTS HEADER ON LINE-PRINTER 05 00040 +C 05 00050 + Integer j(6),nlev 05 00060 + LOGICAL ODD 05 00070 + Real pi(6) 05 00080 + COMMON /SPINS/ J,PI,NLEV,ODD 05 00090 +C 05 00100 +C 05 00110 + Integer numu 05 00120 + Logical pure(2) 05 00130 + Real rllim(2),rulim(2),step(2),du(3) 05 00140 + Common /DELTAS/ RLLIM,RULIM,STEP,PURE,NUMU,DU 05 00150 +C 05 00160 + Character*2 NAME(9),MULL(2),MULH(2) 05 00170 + CHARACTER*80 TITLE 05 00180 + Common /CHARAC/ NAME,MULL,MULH,TITLE 05 00190 +C 05 00200 + Integer i,iodd,ipar,jj(6) 05 00210 + CHARACTER*4 ISP(4),JARR(6),JJP(6) 05 00220 + DATA ISP /'/2+ ','/2- ','+ ','- '/ 05 00230 + 05 00240 + WRITE(26,101) TITLE 05 00250 + IODD=2 05 00260 + IF(ODD) IODD=1 05 00270 + DO 10 I=1,NLEV 05 00280 + JJ(I)=J(I)/IODD 05 00290 + IPAR=-1 05 00300 + IF(PI(I).LT.0.0) IPAR=0 05 00310 + JJP(I)=ISP(2*IODD+IPAR) 05 00320 +10 JARR(I)='--->' 05 00330 + JARR(NLEV)=' ' 05 00340 + WRITE(26,102) (JJ(I),JJP(I),JARR(I), I=1,NLEV) 05 00350 + IF(NLEV.GT.3) THEN 05 00360 + WRITE(26,103) (JJ(I-2),JJP(I-2),JARR(I-2),JJ(I-1),JJP(I-1), 05 00370 + # DU(I-3),I=4,NLEV) 05 00380 + ENDIF 05 00390 + WRITE(26,104) 05 00400 + RETURN 05 00410 + 05 00420 +101 FORMAT(1H1,A) 05 00430 +102 FORMAT(/' SPIN SEQUENCE ',6(I3,A,A)) 05 00440 +103 FORMAT(/' UNOBSERVED TRANSITIONS:',3(/1X,I3,A4,A4,I3,A4, 05 00450 + # ' DELTA=',F8.3)) 05 00460 +104 FORMAT(/' KRANE-STEFFEN SIGN CONVENTION FOR MIXING RATIOS') 05 00470 + END 05 00480 + SUBROUTINE HIST(NUMB,A,ST,QSQ,IDEGR,NTR,SHORT) 06 00010 +C 06 00020 +C PROGRAM UNIT 6 06 00030 +C PLOTS CHI**2(ATAN(DELTA)) ON LINE PRINTER. 06 00040 +C 06 00050 +C DUMMY ARGUMENTS: 06 00060 +C NUMB NUMBER OF POINTS IN HISTOGRAM 06 00070 +C A STARTING X-VALUE 06 00080 +C ST STEP IN X 06 00090 +C QSQ CHI**2 (Y) 06 00100 +C IDEGR NUMBER OF DEGREES OF FREEDOM 06 00110 +C NTR TRANSITION NUMBER 06 00120 +C SHORT .T.=SHORT OUTPUT, .F.=FULL OUPUT 06 00130 +C 06 00140 + Integer numb,idegr,ntr 06 00150 + Real a,st,qsq(181) 06 00160 + Logical short 06 00170 +C 06 00180 + Integer i,ipos,istar,ix 06 00190 + Real atgd,chi2,offs,rlim1,rlim2,rmin,step 06 00200 +C 06 00210 + Real ALOG10 06 00220 + Intrinsic ALOG10 06 00230 +C 06 00240 + Real lifive,litent 06 00250 + External lifive,litent 06 00260 +C 06 00270 +C PARAMETERS FOR CHI**2 PLOT 06 00280 + DATA OFFS,STEP,RMIN /23.5,0.028571,-1.0/ 06 00290 + 06 00300 + IF(NUMB.LE.0.OR.NUMB.GT.181) CALL TROUT(1,'HIST', 06 00310 + # '0 OR >181 STEPS IN PLOT') 06 00320 + RLIM1=LIFIVE(IDEGR) 06 00330 + RLIM2=LITENT(IDEGR) 06 00340 + IF(SHORT) THEN 06 00350 + WRITE(26,*) 06 00360 + ELSE 06 00370 + CALL HEADR 06 00380 + ENDIF 06 00390 + WRITE(26,100) NTR 06 00400 + IX=(ALOG10(RLIM1)-RMIN)/STEP + OFFS 06 00410 + IF(IX.GT.128) IX=128 06 00420 + ISTAR=(ALOG10(RLIM2)-RMIN)/STEP + OFFS 06 00430 + IF(ISTAR.GT.128) ISTAR=128 06 00440 + DO 10 I=1,NUMB 06 00450 + ATGD=A+(I-1)*ST 06 00460 + CHI2=QSQ(I) 06 00470 + IF(IDEGR.GT.0) CHI2=CHI2/IDEGR 06 00480 + IPOS=(ALOG10(CHI2)-RMIN)/STEP + OFFS 06 00490 + IF(IPOS.LT.23) IPOS=23 06 00500 + IF(IPOS.GT.128) IPOS=128 06 00510 + CALL LINE(ATGD,CHI2,IPOS,IX,ISTAR) 06 00520 +10 CONTINUE 06 00530 + WRITE(26,101) 06 00540 + WRITE(26,102) IDEGR,RLIM1,RLIM2 06 00550 + RETURN 06 00560 + 06 00570 +100 FORMAT(/ ' ATAN(DELTA',I1,') NSQRES',1X,'0.1',8X,'0.2', 06 00580 + # 10X,'0.5',8X,' 1 ',8X,' 2 ',10X,' 5 ',8X,'10 ', 06 00590 + # 8X,'20 ',10X,'50 ',8X,'100'/ 06 00600 + # 22X,3('+',10('-'),'+',12('-'),'+',10('-')),'+') 06 00610 +101 FORMAT(22X,3('+',10('-'),'+',12('-'),'+',10('-')),'+'/) 06 00620 +102 FORMAT(' DEGREES OF FREEDOM =',I3/' X = 5 PERCENT LIMIT =', 06 00630 + # F7.3/' * = 0.1 PERCENT LIMIT =',F7.3/) 06 00640 + END 06 00650 + SUBROUTINE DUMPP 07 00010 +C 07 00020 +C PROGRAM UNIT 7 07 00030 +C ROUTINE TO DUMP COMMON BLOCKS, PRIMARILY FOR DEBUGGING 07 00040 +C 07 00050 + Integer j(6),nlev 07 00060 + LOGICAL ODD 07 00070 + Real pi(6) 07 00080 + COMMON /SPINS/ J,PI,NLEV,ODD 07 00090 +C 07 00100 + Real r1(2,3),r2(2,3),u1(2),u2(2),u3(2),uprod(2) 07 00110 + Common /COEFS/ R1,R2,U1,U2,U3,UPROD 07 00120 + Real value(9),error(9),theo(9),rlow1(9),high1(9),rlow2(9),high2(9)07 00130 + Integer itran(9),ndat 07 00140 + Logical data(9),ratio(9) 07 00150 + Common /DATA/ VALUE,ERROR,THEO,DATA,ITRAN,RLOW1,HIGH1,NDAT, 07 00160 + 2 RLOW2,HIGH2,RATIO 07 00170 +C 07 00180 + Integer numu 07 00190 + Logical pure(2) 07 00200 + Real rllim(2),rulim(2),step(2),du(3) 07 00210 + Common /DELTAS/ RLLIM,RULIM,STEP,PURE,NUMU,DU 07 00220 +C 07 00230 + Integer nfree,numb 07 00240 + LOGICAL DUMP,SHORT 07 00250 + Real QSQ(181),alim(2,2) 07 00260 + Common /MISC/ DUMP,NFREE,NUMB,QSQ,ALIM,SHORT 07 00270 +C 07 00280 + Character*80 CARD 07 00290 + Common /CARD/ CARD 07 00300 +C 07 00310 + Character*2 NAME(9),MULL(2),MULH(2) 07 00320 + CHARACTER*80 TITLE 07 00330 + Common /CHARAC/ NAME,MULL,MULH,TITLE 07 00340 +C 07 00350 + Integer ifa(114) 07 00360 + Double Precision fa(114) 07 00370 + COMMON /FAC/ ifa,FA 07 00380 +C 07 00390 + Integer i,ii 07 00400 +C 07 00410 + WRITE(26,100) TITLE 07 00420 + WRITE(26,101) NLEV,ODD,(J(I),PI(I), I=1,NLEV) 07 00430 + WRITE(26,102) NDAT,(NAME(I),VALUE(I),ERROR(I),THEO(I), 07 00440 + # DATA(I),ITRAN(I),RLOW1(I),HIGH1(I),RLOW2(I),HIGH2(I),RATIO(I), 07 00450 + # I=1,NDAT) 07 00460 + WRITE(26,103) (I,RLLIM(I),RULIM(I),STEP(I),PURE(I),MULL(I), 07 00470 + # MULH(I), I=1,2) 07 00480 + WRITE(26,104) ((R1(I,II), II=1,3), I=1,2), 07 00490 + # ((R2(I,II), II=1,3), I=1,2), 07 00500 + # U1,U2,U3,UPROD 07 00510 + WRITE(26,105) DUMP,NFREE,SHORT,ALIM 07 00520 + WRITE(26,106) NUMU,DU 07 00530 + WRITE(26,107) NUMB,(QSQ(I), I=1,NUMB) 07 00540 + Write(26,FMT='(/'' FA= ''/15(10(F6.4,''E+'',I2.2)/))') 07 00550 + 2 (fa(i),ifa(i),i=1,114) 07 00560 + WRITE(26,109) CARD 07 00570 + WRITE(26,120) 07 00580 + RETURN 07 00590 +100 FORMAT(/////' ******* DUMP FOLLOWS *******'//' HEADER=',A) 07 00600 +101 FORMAT(//' NUMBER OF LEVELS=',I2,', ODD=',L2/ 07 00610 + # ' 2J AND PI FOLLOW'/ (1X,I5,F5.0)) 07 00620 +102 FORMAT(/' NUMBER OF DATA ITEMS=',I2/ 07 00630 + # (1X,A2,3F10.4,L2,I2,4F10.4,L2/)) 07 00640 +103 FORMAT(/' ATAN(DELTA',I1,') VARIATIONS=',3F10.2,' PURE=',L2/ 07 00650 + # ' MULTIPOLARITIES= ',A2,' AND ',A2) 07 00660 +104 FORMAT(/' ANGULAR CORRELATION COEFFICIENTS'/' RK'/ 07 00670 + # 2(3F10.4,10X,3F10.4/),' UK'/4(F10.4,30X,F10.4/)) 07 00680 +105 FORMAT(/' DUMP, NFREE, SHORT=',L2,I2,L2/' ALIM=',4F10.3) 07 00690 +106 FORMAT(/' DELTAS OF UNOBSERVED GAMMAS',I3,3F8.3) 07 00700 +107 FORMAT(/' NUMB=',I4/' QSQ='/20(10E10.4/)) 07 00710 +109 FORMAT(/' CARD= ',A) 07 00720 +120 FORMAT(/' ******* DUMP ENDS *******') 07 00730 + END 07 00740 + SUBROUTINE WORK 08 00010 +C 08 00020 +C PROGRAM UNIT 8 08 00030 +C PERFORMS THE LEAST-SQUARES FIT BY GRID-SEARCH OF THE 08 00040 +C DELTA1-DELTA2 PLANE 08 00050 +C 08 00060 + Integer j(6),nlev 08 00070 + LOGICAL ODD 08 00080 + Real pi(6) 08 00090 + COMMON /SPINS/ J,PI,NLEV,ODD 08 00100 +C 08 00110 + Real r1(2,3),r2(2,3),u1(2),u2(2),u3(2),uprod(2) 08 00120 + Common /COEFS/ R1,R2,U1,U2,U3,UPROD 08 00130 +C 08 00140 + Real value(9),error(9),theo(9),rlow1(9),high1(9),rlow2(9),high2(9)08 00150 + Integer itran(9),ndat 08 00160 + Logical data(9),ratio(9) 08 00170 + Common /DATA/ VALUE,ERROR,THEO,DATA,ITRAN,RLOW1,HIGH1,NDAT, 08 00180 + 2 RLOW2,HIGH2,RATIO 08 00190 +C 08 00200 + Integer numu 08 00210 + Logical pure(2) 08 00220 + Real rllim(2),rulim(2),step(2),du(3) 08 00230 + Common /DELTAS/ RLLIM,RULIM,STEP,PURE,NUMU,DU 08 00240 +C 08 00250 + Integer nfree,numb 08 00260 + LOGICAL DUMP,SHORT 08 00270 + Real QSQ(181),alim(2,2) 08 00280 + Common /MISC/ DUMP,NFREE,NUMB,QSQ,ALIM,SHORT 08 00290 +C 08 00300 + Character*2 NAME(9),MULL(2),MULH(2) 08 00310 + CHARACTER*80 TITLE 08 00320 + Common /CHARAC/ NAME,MULL,MULH,TITLE 08 00330 +C 08 00340 + Integer i,ntra,ntrb 08 00350 + Real ada,a2sav,a4sav,sq 08 00360 +C 08 00370 + Real Ak,Cc,Rminim 08 00380 + External Ak,Cc,Rminim 08 00390 +C 08 00400 +C FIRST STEP IN ATAN(DELTA1) AND MINIMIZE CHI**2 WITH RESPECT 08 00410 +C TO ATAN(DELTA2) 08 00420 + NTRA=1 08 00430 + NTRB=2 08 00440 + A2SAV=0.0 08 00450 + A4SAV=0.0 08 00460 + IF(PURE(NTRA).AND.PURE(NTRB).AND.NLEV.GE.3) GO TO 2 08 00470 +1 IF(PURE(NTRA)) GO TO 89 08 00480 +2 IF(.NOT.SHORT) THEN 08 00490 + CALL HEADR 08 00500 + CALL SOUT(NTRA) 08 00510 + CALL HOUT 08 00520 + ENDIF 08 00530 + NUMB=0 08 00540 + ADA=RLLIM(NTRA)-STEP(NTRA) 08 00550 +10 ADA=ADA+STEP(NTRA) 08 00560 + IF(ADA.GT.RULIM(NTRA)) GO TO 88 08 00570 + IF(NLEV.GT.2) THEN 08 00580 + A2SAV=AK(NTRA,2,ADA)*UPROD(1) 08 00590 + A4SAV=AK(NTRA,4,ADA)*UPROD(2) 08 00600 + THEO(NTRA+2)=ADA 08 00610 + ENDIF 08 00620 + IF(NDAT.GT.4) THEN 08 00630 + DO 20 I=5,NDAT 08 00640 + IF(DATA(I).AND.ITRAN(I).EQ.NTRA) 08 00650 + # THEO(I)=CC(ADA,RLOW1(I),HIGH1(I),RLOW2(I),HIGH2(I)) 08 00660 +20 CONTINUE 08 00670 + ENDIF 08 00680 + SQ=RMINIM(NTRB,A2SAV,A4SAV) 08 00690 + IF(.NOT.SHORT) CALL TOUT(SQ) 08 00700 + IF(NUMB.GE.181) CALL TROUT(21,'WORK','TOO MANY STEPS IN DELTA') 08 00710 + NUMB=NUMB+1 08 00720 + QSQ(NUMB)=SQ 08 00730 + GO TO 10 08 00740 +88 CALL DIPS(NTRA,NTRB) 08 00750 + CALL HIST(NUMB,RLLIM(NTRA),STEP(NTRA),QSQ,NFREE,NTRA,SHORT) 08 00760 +89 IF(NTRA.EQ.2) GO TO 90 08 00770 + IF(NLEV.LE.2) GO TO 90 08 00780 + 08 00790 +C THEN STEP IN ATAN(DELTA2) AND MINIMIZE CHI**2 WITH RESPECT 08 00800 +C TO ATAN(DELTA1) 08 00810 + NTRA=2 08 00820 + NTRB=1 08 00830 + GO TO 1 08 00840 +90 RETURN 08 00850 + END 08 00860 + Real FUNCTION RMINIM(NTRB,A2SAV,A4SAV) 09 00010 +C 09 00020 +C PROGRAM UNIT 9 09 00030 +C MINIMIZES SUM OF SQUARED RESIDUALS WITH RESPECT TO DELTA(NTRB). 09 00040 +C MINIMUM CHI**2 IS RETURNED IN RMINIM 09 00050 +C 09 00060 +C DUMMY ARGUMENTS: 09 00070 +C NTRB TRANSITION NUMBER 09 00080 +C A2SAV THE FACTOR OF A2 THAT DEPENDS ON THE OTHER GAMMA 09 00090 +C A4SAV THE SAME FOR A4 09 00100 +C 09 00110 + Integer ntrb 09 00120 + Real a2sav,a4sav 09 00130 +C 09 00140 + Real value(9),error(9),theo(9),rlow1(9),high1(9),rlow2(9),high2(9)09 00150 + Integer itran(9),ndat 09 00160 + Logical data(9),ratio(9) 09 00170 + Common /DATA/ VALUE,ERROR,THEO,DATA,ITRAN,RLOW1,HIGH1,NDAT, 09 00180 + 2 RLOW2,HIGH2,RATIO 09 00190 +C 09 00200 + Integer numu 09 00210 + Logical pure(2) 09 00220 + Real rllim(2),rulim(2),step(2),du(3) 09 00230 + Common /DELTAS/ RLLIM,RULIM,STEP,PURE,NUMU,DU 09 00240 +C 09 00250 + Character*2 NAME(9),MULL(2),MULH(2) 09 00260 + CHARACTER*80 TITLE 09 00270 + Common /CHARAC/ NAME,MULL,MULH,TITLE 09 00280 +C 09 00290 + Real a,adb,adbmin,b,c,sq,sqmin,x1,x2,x3,y1,y2,y3 09 00300 +C 09 00310 + SQMIN=100000. 09 00320 + ADBMIN=VALUE(NTRB+2) 09 00330 + IF(PURE(NTRB)) GO TO 80 09 00340 + ADB=RLLIM(NTRB)-STEP(NTRB) 09 00350 +10 ADB=ADB+STEP(NTRB) 09 00360 + IF(ADB.LE.RULIM(NTRB)) THEN 09 00370 + CALL SETVAL(NTRB,A2SAV,A4SAV,ADB,SQ) 09 00380 + IF(SQ.LE.SQMIN) THEN 09 00390 + SQMIN=SQ 09 00400 + ADBMIN=ADB 09 00410 + ENDIF 09 00420 + GO TO 10 09 00430 + ENDIF 09 00440 + 09 00450 +C USE PARABOLA TO FIND MINIMUM 09 00460 + X1=ADBMIN-STEP(NTRB) 09 00470 + X2=ADBMIN 09 00480 + X3=ADBMIN+STEP(NTRB) 09 00490 + IF(X1.LT.RLLIM(NTRB).OR.X3.GT.RULIM(NTRB)) GO TO 80 09 00500 + CALL SETVAL(NTRB,A2SAV,A4SAV,X1,Y1) 09 00510 + CALL SETVAL(NTRB,A2SAV,A4SAV,X2,Y2) 09 00520 + CALL SETVAL(NTRB,A2SAV,A4SAV,X3,Y3) 09 00530 + CALL QUADIN(X1,X2,X3,Y1,Y2,Y3,A,B,C) 09 00540 + IF(A.LE.0.0) GO TO 80 09 00550 + ADBMIN=-B/(2.*A) 09 00560 +80 CONTINUE 09 00570 +C SAVE BEST VALUE AND CALCULATE CHI**2 09 00580 + CALL SETVAL(NTRB,A2SAV,A4SAV,ADBMIN,SQMIN) 09 00590 + RMINIM=SQMIN 09 00600 + RETURN 09 00610 + END 09 00620 + SUBROUTINE DIPS(NTRA,NTRB) 10 00010 +C 10 00020 +C PROGRAM UNIT 10 10 00030 +C ROUTINE TO FIND DIPS IN CHI**2(DELTA) AND TO CALCULATE 10 00040 +C UNCERTAINTY IN DELTA 10 00050 +C 10 00060 +C DUMMY ARGUMENTS: 10 00070 +C NTRA NUMBER OF THE TRANSITION THE DELTA OF WHICH IS STEPPED THRU 10 00080 +C NTRB NUMBER OF THE TRANSITION THE DELTA OF WHICH IS MINIMIZED 10 00090 +C WITH RESPECT TO 10 00100 +C 10 00110 + Integer NTRA,NTRB 10 00120 +C 10 00130 + Integer j(6),nlev 10 00140 + LOGICAL ODD 10 00150 + Real pi(6) 10 00160 + COMMON /SPINS/ J,PI,NLEV,ODD 10 00170 +C 10 00180 + Real r1(2,3),r2(2,3),u1(2),u2(2),u3(2),uprod(2) 10 00190 + Common /COEFS/ R1,R2,U1,U2,U3,UPROD 10 00200 +C 10 00210 + Real value(9),error(9),theo(9),rlow1(9),high1(9),rlow2(9),high2(9)10 00220 + Integer itran(9),ndat 10 00230 + Logical data(9),ratio(9) 10 00240 + Common /DATA/ VALUE,ERROR,THEO,DATA,ITRAN,RLOW1,HIGH1,NDAT, 10 00250 + 2 RLOW2,HIGH2,RATIO 10 00260 +C 10 00270 + Integer numu 10 00280 + Logical pure(2) 10 00290 + Real rllim(2),rulim(2),step(2),du(3) 10 00300 + Common /DELTAS/ RLLIM,RULIM,STEP,PURE,NUMU,DU 10 00310 +C 10 00320 + Integer nfree,numb 10 00330 + LOGICAL DUMP,SHORT 10 00340 + Real QSQ(181),alim(2,2) 10 00350 + Common /MISC/ DUMP,NFREE,NUMB,QSQ,ALIM,SHORT 10 00360 +C 10 00370 + Character*2 NAME(9),MULL(2),MULH(2) 10 00380 + CHARACTER*80 TITLE 10 00390 + Common /CHARAC/ NAME,MULL,MULH,TITLE 10 00400 +C 10 00410 + Integer i,ii,ncount,nsave,nstop,num 10 00420 + Real a,a2sav,a4sav,b,best,c,damin,dif1,dif2,errl,errr,rads, 10 00430 + 2 rlmt,root,sigma,sigman,sigma1,signn,sq,term1,term2,x1,x2,x3 10 00440 +C 10 00450 + Real Ak,Cc,F,Litent,Rminim 10 00460 + External Ak,Cc,F,Litent,Rminim 10 00470 +C 10 00480 + Real SQRT,TAN 10 00490 + Intrinsic SQRT,TAN 10 00500 +C 10 00510 + DATA RADS /0.0174532/ 10 00520 +C 10 00530 + NCOUNT=0 10 00540 + A2SAV=0.0 10 00550 + A4SAV=0.0 10 00560 +C GET 0.1% LIMIT FOR EXCLUDING DELTAS 10 00570 + RLMT=LITENT(NFREE)*NFREE 10 00580 + II=3 10 00590 +C FIND POINT WHERE DERIVATIVE CHANGES 10 00600 +1 IF(II.GT.NUMB) GO TO 90 10 00610 + DO 10 I=II,NUMB 10 00620 + IF(QSQ(I-1).GT.RLMT) GO TO 10 10 00630 + DIF1=QSQ(I-2)-QSQ(I-1) 10 00640 + DIF2=QSQ(I-1)-QSQ(I) 10 00650 + IF(DIF1) 10,7,8 10 00660 +7 IF(DIF2) 9,10,10 10 00670 +8 IF(DIF2) 9,9,10 10 00680 +9 NSAVE=I 10 00690 + GO TO 20 10 00700 +10 CONTINUE 10 00710 + GO TO 90 10 00720 + 10 00730 +C FIT PARABOLA TO THE TREE POINTS NEAREST THE MINIMUM 10 00740 +20 X3=RLLIM(NTRA)+(NSAVE-1)*STEP(NTRA) 10 00750 + X2=X3-STEP(NTRA) 10 00760 + X1=X2-STEP(NTRA) 10 00770 + CALL QUADIN(X1,X2,X3,QSQ(NSAVE-2),QSQ(NSAVE-1),QSQ(NSAVE),A,B,C) 10 00780 + IF(A.LE.0.0) GO TO 30 10 00790 + DAMIN=-B/(2.*A) 10 00800 + IF(NLEV.LE.2) GO TO 201 10 00810 + A2SAV=AK(NTRA,2,DAMIN)*UPROD(1) 10 00820 + A4SAV=AK(NTRA,4,DAMIN)*UPROD(2) 10 00830 +201 THEO(NTRA+2)=DAMIN 10 00840 + IF(NDAT.GT.4) THEN 10 00850 + DO 21 I=5,NDAT 10 00860 + IF(DATA(I).AND.ITRAN(I).EQ.NTRA) 10 00870 + # THEO(I)=CC(DAMIN,RLOW1(I),HIGH1(I),RLOW2(I),HIGH2(I)) 10 00880 +21 CONTINUE 10 00890 + ENDIF 10 00900 + 10 00910 +C MINIMIZE WITH RESPECT TO DELTA(NTRB) 10 00920 + SQ=RMINIM(NTRB,A2SAV,A4SAV) 10 00930 + CALL MOUT(NTRA) 10 00940 + CALL HOUT 10 00950 + CALL TOUT(SQ) 10 00960 + BEST=TAN(THEO(NTRA+2)*RADS) 10 00970 + ERRL=1000. 10 00980 + ERRR=1000. 10 00990 +C CALCULATE UNCERTAINTY FROM INTERSECTION OF Y=QSQ WITH Y=SIGMA 10 01000 + SIGMA=SQ+1.0 10 01010 + SIGMA1=SQ*(1.0+F(NFREE)/NFREE) 10 01020 + IF(SIGMA1.GT.SIGMA) SIGMA=SIGMA1 10 01030 + NSTOP=NSAVE-1 10 01040 +C LEFT UNCERTAINTY 10 01050 + DO 25 I=1,NSTOP 10 01060 + NUM=NSAVE-I 10 01070 + IF(QSQ(NUM).LT.SIGMA) GO TO 25 10 01080 + X1=RLLIM(NTRA)+(NUM-1)*STEP(NTRA) 10 01090 + X2=X1+STEP(NTRA) 10 01100 + X3=X2+STEP(NTRA) 10 01110 + CALL QUADIN(X1,X2,X3,QSQ(NUM),QSQ(NUM+1),QSQ(NUM+2),A,B,C) 10 01120 + IF(A.EQ.0.0) GO TO 26 10 01130 + signn=1.0 10 01140 + IF(A.LT.0.0) signn=-1.0 10 01150 + TERM1=-B/(2.*A) 10 01160 + TERM2=TERM1*TERM1-(C-SIGMA)/A 10 01170 + IF(TERM2.LT.0) GO TO 26 10 01180 + ROOT=TERM1-signn*SQRT(TERM2) 10 01190 + ERRL=BEST-TAN(ROOT*RADS) 10 01200 + GO TO 26 10 01210 +25 CONTINUE 10 01220 +26 NSTOP=NUMB-NSAVE+2 10 01230 +C RIGHT UNCERTAINTY 10 01240 + DO 27 I=1,NSTOP 10 01250 + NUM=NSAVE-2+I 10 01260 + IF(QSQ(NUM).LT.SIGMA) GO TO 27 10 01270 + X1=RLLIM(NTRA)+(NUM-1)*STEP(NTRA) 10 01280 + X2=X1-STEP(NTRA) 10 01290 + X3=X2-STEP(NTRA) 10 01300 + CALL QUADIN(X1,X2,X3,QSQ(NUM),QSQ(NUM-1),QSQ(NUM-2),A,B,C) 10 01310 + IF(A.EQ.0.0) GO TO 28 10 01320 + signn=1.0 10 01330 + IF(A.LT.0.0) signn=-1.0 10 01340 + TERM1=-B/(2.*A) 10 01350 + TERM2=TERM1*TERM1-(C-SIGMA)/A 10 01360 + IF(TERM2.LT.0) GO TO 28 10 01370 + ROOT=TERM1+signn*SQRT(TERM2) 10 01380 + ERRR=TAN(ROOT*RADS)-BEST 10 01390 + GO TO 28 10 01400 +27 CONTINUE 10 01410 + 10 01420 +C PRINT OUT RESULT 10 01430 +28 IF(NFREE.GT.0) THEN 10 01440 + SIGMAN=SIGMA/NFREE 10 01450 + ELSE 10 01460 + SIGMAN=1.E+10 10 01470 + ENDIF 10 01480 + CALL DELOUT(NTRA,BEST,ERRL,ERRR,SIGMA,SIGMAN) 10 01490 + NCOUNT=NCOUNT+1 10 01500 + IF(NCOUNT.GT.4) GO TO 90 10 01510 +30 II=NUM+3 10 01520 + GO TO 1 10 01530 +90 RETURN 10 01540 + END 10 01550 + SUBROUTINE SETUP 11 00010 +C 11 00020 +C PROGRAM UNIT 11 11 00030 +C PREPARES FOR CHI-SQUARED ANALYSIS 11 00040 +C 11 00050 + Integer j(6),nlev 11 00060 + LOGICAL ODD 11 00070 + Real pi(6) 11 00080 + COMMON /SPINS/ J,PI,NLEV,ODD 11 00090 +C 11 00100 + Real value(9),error(9),theo(9),rlow1(9),high1(9),rlow2(9),high2(9)11 00110 + Integer itran(9),ndat 11 00120 + Logical data(9),ratio(9) 11 00130 + Common /DATA/ VALUE,ERROR,THEO,DATA,ITRAN,RLOW1,HIGH1,NDAT, 11 00140 + 2 RLOW2,HIGH2,RATIO 11 00150 +C 11 00160 + Integer numu 11 00170 + Logical pure(2) 11 00180 + Real rllim(2),rulim(2),step(2),du(3) 11 00190 + Common /DELTAS/ RLLIM,RULIM,STEP,PURE,NUMU,DU 11 00200 +C 11 00210 + Integer nfree,numb 11 00220 + LOGICAL DUMP,SHORT 11 00230 + Real QSQ(181),alim(2,2) 11 00240 + Common /MISC/ DUMP,NFREE,NUMB,QSQ,ALIM,SHORT 11 00250 +C 11 00260 + Character*2 NAME(9),MULL(2),MULH(2) 11 00270 + CHARACTER*80 TITLE 11 00280 + Common /CHARAC/ NAME,MULL,MULH,TITLE 11 00290 +C 11 00300 + Integer i,ii,l,ll,maxj,nstep 11 00310 + Real par 11 00320 + CHARACTER*2 MUL(10) 11 00330 +C 11 00340 + Integer IABS 11 00350 + Intrinsic IABS 11 00360 +C 11 00370 + DATA MUL /'M1','M2','M3','M4','M5','E1','E2','E3','E4','E5'/ 11 00380 +C DEFINE 2*MAXIMUM ALLOWED SPIN 11 00390 + DATA MAXJ /40/ 11 00400 + 11 00410 +C DELTA VARIATION LIMITS, CHECK IF PURE MULTIPOLE 11 00420 + DO 10 I=1,2 11 00430 + RLLIM(I)=ALIM(I,1) 11 00440 + RULIM(I)=ALIM(I,2) 11 00450 + IF(PURE(I)) THEN 11 00460 + RLLIM(I)=VALUE(I+2) 11 00470 + RULIM(I)=VALUE(I+2) 11 00480 + ENDIF 11 00490 +10 CONTINUE 11 00500 + IF(J(1)*J(2).LE.1) THEN 11 00510 + RLLIM(1)=0.0 11 00520 + RULIM(1)=0.0 11 00530 + ENDIF 11 00540 + IF(NLEV.LE.2.OR.J(NLEV-1)*J(NLEV).LE.1) THEN 11 00550 + RLLIM(2)=0.0 11 00560 + RULIM(2)=0.0 11 00570 + ENDIF 11 00580 + 11 00590 +C CHECK DELTA STEPS 11 00600 + DO 30 I=1,2 11 00610 + NSTEP=(RULIM(I)-RLLIM(I))/STEP(I)+1.5 11 00620 + IF(NSTEP.GT.181) CALL TROUT(20,'SETUP', 11 00630 + # 'TOO SMALL STEP IN DELTA') 11 00640 +30 CONTINUE 11 00650 + 11 00660 +C CHECK FOR A2 AND A4 DATA 11 00670 + IF(.NOT.DATA(1).AND..NOT.DATA(2)) THEN 11 00680 + IF(NLEV.GE.3) CALL TROUT(33,'SETUP', 11 00690 + # 'NO CORRELATION DATA, BUT MORE THAN 2 LEVELS') 11 00700 + IF(RLLIM(1).LT.0.0) RLLIM(1)=0.0 11 00710 + CALL AOUT 11 00720 + ENDIF 11 00730 + 11 00740 +C DETERMINE MULTIPOLARITIES AND TEST FOR DISALLOWED SPIN 11 00750 +C COMBINATIONS 11 00760 + II=NLEV-1 11 00770 + L=IABS(J(1)-J(2))/2 11 00780 + IF(L.LE.0) L=1 11 00790 + LL=L+1 11 00800 + PAR=PI(1)*PI(2) 11 00810 + IF(PAR*(-1)**L.GT.0.0) L=L+5 11 00820 + IF(PAR*(-1)**LL.GT.0.0) LL=LL+5 11 00830 + MULL(1)=MUL(L) 11 00840 + MULH(1)=MUL(LL) 11 00850 + L=IABS(J(II)-J(NLEV))/2 11 00860 + IF(L.LE.0) L=1 11 00870 + LL=L+1 11 00880 + PAR=PI(II)*PI(NLEV) 11 00890 + IF(PAR*(-1)**L.GT.0.0) L=L+5 11 00900 + IF(PAR*(-1)**LL.GT.0.0) LL=LL+5 11 00910 + MULL(2)=MUL(L) 11 00920 + MULH(2)=MUL(LL) 11 00930 + DO 50 I=1,II 11 00940 + IF(J(I).LE.0.AND.J(I+1).LE.0) CALL TROUT(48,'SETUP', 11 00950 + # 'REALLY A 0 --> 0 TRANSITION?') 11 00960 + IF(J(I).GT.MAXJ) CALL TROUT(49,'SETUP', 11 00970 + # 'TOO LARGE SPIN') 11 00980 +50 CONTINUE 11 00990 + IF(J(NLEV).GT.MAXJ) CALL TROUT(52,'SETUP', 11 01000 + # 'TOO LARGE SPIN') 11 01010 + 11 01020 +C SET ANGULAR CORRELATION COEFFICIENTS 11 01030 + IF(NLEV.GE.3) CALL SETCOF 11 01040 + 11 01050 +C CALCULATE NUMBER OF DEGREES OF FREEDOM 11 01060 + NFREE=1 11 01070 + IF(NLEV.GE.3.AND.RLLIM(1).GE.RULIM(1).AND.RLLIM(2).GE.RULIM(2)) 11 01080 + # NFREE=0 11 01090 + DO 60 I=1,NDAT 11 01100 + IF(DATA(I)) NFREE=NFREE+1 11 01110 +60 CONTINUE 11 01120 + II=2 11 01130 + IF(NLEV.LE.2) II=1 11 01140 + DO 61 I=1,II 11 01150 + IF(RLLIM(I).LT.RULIM(I)) NFREE=NFREE-1 11 01160 +61 CONTINUE 11 01170 + IF(NFREE.LE.0) CALL BOUT 11 01180 + RETURN 11 01190 + END 11 01200 + SUBROUTINE SETCOF 12 00010 +C 12 00020 +C PROGRAM UNIT 12 12 00030 +C ROUTINE TO SET COEFFICIENTS FOR GAMMA-GAMMA CORRELATIONS 12 00040 +C 12 00050 + Integer j(6),nlev 12 00060 + LOGICAL ODD 12 00070 + Real pi(6) 12 00080 + COMMON /SPINS/ J,PI,NLEV,ODD 12 00090 +C 12 00100 + Real r1(2,3),r2(2,3),u1(2),u2(2),u3(2),uprod(2) 12 00110 + Common /COEFS/ R1,R2,U1,U2,U3,UPROD 12 00120 +C 12 00130 + Integer numu 12 00140 + Logical pure(2) 12 00150 + Real rllim(2),rulim(2),step(2),du(3) 12 00160 + Common /DELTAS/ RLLIM,RULIM,STEP,PURE,NUMU,DU 12 00170 +C 12 00180 + Integer i,maxju 12 00190 +C MAXJU IS 2* MAXIMUM SPIN FOR UNOBSERVED TRANSITIONS 12 00200 + DATA MAXJU /20/ 12 00210 + 12 00220 + IF(NLEV.LT.3) CALL TROUT(1,'SETCOF', 12 00230 + # '<3 LEVELS --> NO CORRELATION!') 12 00240 + CALL SRK(R1,J(2),J(1)) 12 00250 + CALL SRK(R2,J(NLEV-1),J(NLEV)) 12 00260 + DO 5 I=1,2 12 00270 + U1(I)=1.0 12 00280 + U2(I)=1.0 12 00290 +5 U3(I)=1.0 12 00300 + IF(NLEV.EQ.3) GO TO 10 12 00310 +C CHECK THAT SPIN IS NOT TOO HIGH 12 00320 + IF(J(2).GT.MAXJU.OR.J(3).GT.MAXJU) CALL TROUT(6,'SETCOF', 12 00330 + # 'TOO HIGH SPIN FOR UNOBSERVED TRANSITION') 12 00340 + CALL SUK(U1,J(2),J(3),DU(1)) 12 00350 + IF(NLEV.EQ.4) GO TO 10 12 00360 + IF(J(4).GT.MAXJU) CALL TROUT(7,'SETCOF', 12 00370 + # 'TOO HIGH SPIN FOR UNOBSERVED TRANSITION') 12 00380 + CALL SUK(U2,J(3),J(4),DU(2)) 12 00390 + IF(NLEV.EQ.5) GO TO 10 12 00400 + IF(J(5).GT.MAXJU) CALL TROUT(8,'SETCOF', 12 00410 + # 'TOO HIGH SPIN FOR UNOBSERVED TRANSITION') 12 00420 + CALL SUK(U3,J(4),J(5),DU(3)) 12 00430 +10 CONTINUE 12 00440 + DO 20 I=1,2 12 00450 +20 UPROD(I)=U1(I)*U2(I)*U3(I) 12 00460 + RETURN 12 00470 + END 12 00480 + SUBROUTINE SETVAL(NTRB,A2SAV,A4SAV,ADB,SQ) 13 00010 +C 13 00020 +C PROGRAM UNIT 13 13 00030 +C SETS THEORETICAL VALUES THAT DEPEND ON DELTA(NTRB). 13 00040 +C RETURNS THE SUM OF SQUARED RESIDUALS. 13 00050 +C 13 00060 +C DUMMY ARGUMENTS: 13 00070 +C NTRB TRANSITION NUMBER 13 00080 +C A2SAV THE FACTOR OF A2 WHICH DEPENDS ON THE OTHER GAMMA 13 00090 +C A4SAV SAME FOR A4 13 00100 +C ADB ATAN(DELTA) OF TRANSITION NTRB 13 00110 +C SQ * SUM OF SQUARED RESIDUALS 13 00120 +C * ASSIGNED IN ROUTINE 13 00130 +C 13 00140 + Integer ntrb 13 00150 + Real A2SAV,A4SAV,ADB,SQ 13 00160 +C 13 00170 + Real value(9),error(9),theo(9),rlow1(9),high1(9),rlow2(9),high2(9)13 00180 + Integer itran(9),ndat 13 00190 + Logical data(9),ratio(9) 13 00200 + Common /DATA/ VALUE,ERROR,THEO,DATA,ITRAN,RLOW1,HIGH1,NDAT, 13 00210 + 2 RLOW2,HIGH2,RATIO 13 00220 +C 13 00230 + Character*2 NAME(9),MULL(2),MULH(2) 13 00240 + CHARACTER*80 TITLE 13 00250 + Common /CHARAC/ NAME,MULL,MULH,TITLE 13 00260 +C 13 00270 + Integer i 13 00280 + Real dummy 13 00290 +C 13 00300 + Real Ak,Cc,Sqres 13 00310 + External Ak,Cc,Sqres 13 00320 +C 13 00330 + THEO(1)=A2SAV*AK(NTRB,2,ADB) 13 00340 + THEO(2)=A4SAV*AK(NTRB,4,ADB) 13 00350 + THEO(NTRB+2)=ADB 13 00360 + IF(NDAT.GT.4) THEN 13 00370 + DO 20 I=5,NDAT 13 00380 + IF(DATA(I).AND.ITRAN(I).EQ.NTRB) 13 00390 + # THEO(I)=CC(ADB,RLOW1(I),HIGH1(I),RLOW2(I),HIGH2(I)) 13 00400 +20 CONTINUE 13 00410 + ENDIF 13 00420 + SQ=SQRES(DUMMY) 13 00430 + RETURN 13 00440 + END 13 00450 + Real FUNCTION SQRES(DUMMY) 14 00010 +C 14 00020 +C PROGRAM UNIT 14 14 00030 +C ACCUMULATES SUM OF SQUARED RESIDUALS 14 00040 +C 14 00050 +C DUMMY ARGUMENT IS REALLY DUMMY 14 00060 +C 14 00070 + Real dummy 14 00080 +C 14 00090 + Real value(9),error(9),theo(9),rlow1(9),high1(9),rlow2(9),high2(9)14 00100 + Integer itran(9),ndat 14 00110 + Logical data(9),ratio(9) 14 00120 + Common /DATA/ VALUE,ERROR,THEO,DATA,ITRAN,RLOW1,HIGH1,NDAT, 14 00130 + 2 RLOW2,HIGH2,RATIO 14 00140 +C 14 00150 + Integer i 14 00160 + Real dev,q 14 00170 +C 14 00180 + Q=0.0 14 00190 + DO 1 I=1,NDAT 14 00200 + IF(DATA(I)) THEN 14 00210 + DEV=(VALUE(I)-THEO(I))/ERROR(I) 14 00220 + Q=Q+DEV*DEV 14 00230 + ENDIF 14 00240 +1 CONTINUE 14 00250 + SQRES=Q 14 00260 + RETURN 14 00270 + END 14 00280 + SUBROUTINE QUADIN(X1,X2,X3,Y1,Y2,Y3,A,B,C) 15 00010 +C 15 00020 +C PROGRAM UNIT 15 15 00030 +C ROUTINE TO CALCULATE PARABOLA THRU 3 POINTS 15 00040 +C 15 00050 +C DUMMY ARGUMENTS: 15 00060 +C X1,Y1 (X,Y) OF FIRST POINT 15 00070 +C X2,Y2 (X,Y) OF SECOND POINT 15 00080 +C X3,Y3 (X,Y) OF THIRD POINT 15 00090 +C A,B,C * PARABOLA IS A*X**2+B*X+C 15 00100 +C * ASSIGNED IN ROUTINE 15 00110 +C 15 00120 + Real X1,X2,X3,Y1,Y2,Y3,A,B,C 15 00130 +C 15 00140 + Real rnom 15 00150 +C 15 00160 + RNOM=(X1-X2)*(X1-X3)*(X3-X2) 15 00170 + IF(RNOM.EQ.0) CALL TROUT(10,'QUADIN','DOUBLE X-VALUE') 15 00180 + A=((Y1-Y2)*(X3-X2)-(Y3-Y2)*(X1-X2))/RNOM 15 00190 + B=(Y1-Y2)/(X1-X2)-A*(X1+X2) 15 00200 + C=Y2-X2*(X2*A+B) 15 00210 + RETURN 15 00220 + END 15 00230 + Integer FUNCTION ISPIN(RJ,PARITY) 16 00010 +C 16 00020 +C PROGRAM UNIT 16 16 00030 +C CALCULATES 2J AND PI FROM REAL NUMBER RJ 16 00040 +C 16 00050 + Real rj,parity 16 00060 +C 16 00070 + Integer j 16 00080 +C 16 00090 + Real ABS,SIGN 16 00100 + Intrinsic ABS,SIGN 16 00110 +C 16 00120 + J=2.0*ABS(RJ)+0.5 16 00130 + PARITY=SIGN(1.0,RJ) 16 00140 + ISPIN=J 16 00150 + RETURN 16 00160 + END 16 00170 + REAL FUNCTION LIFIVE(N) 17 00010 +C 17 00020 +C PROGRAM UNIT 17 17 00030 +C GIVES 5% CONFIDENCE LIMIT FOR CHI**2 FOR N DEGREES OF FREEDOM 17 00040 +C 17 00050 +C DUMMY ARGUMENT: 17 00060 +C N NUMBER OF DEGREES OF FREEDOM 17 00070 +C 17 00080 + Integer n 17 00090 +C 17 00100 + Real FIVE(30) 17 00110 + DATA FIVE/ 17 00120 + #3.841,2.996,2.605,2.372,2.214,2.099,2.010,1.938,1.880,1.831, 17 00130 + #1.789,1.752,1.720,1.692,1.666,1.644,1.623,1.604,1.587,1.571, 17 00140 + #1.556,1.542,1.529,1.517,1.506,1.496,1.486,1.476,1.467,1.459/ 17 00150 + 17 00160 + LIFIVE=100000. 17 00170 + IF(N.LE.0.OR.N.GT.30) RETURN 17 00180 + LIFIVE=FIVE(N) 17 00190 + RETURN 17 00200 + END 17 00210 + REAL FUNCTION LITENT(N) 18 00010 +C 18 00020 +C PROGRAM UNIT 18 18 00030 +C GIVES 0.1% CONFIDENCE LIMIT FOR CHI**2 FOR N DEGREES OF FREEDOM 18 00040 +C 18 00050 +C DUMMY ARGUMENT: 18 00060 +C N NUMBER OF DEGREES OF FREEDOM 18 00070 +C 18 00080 + Integer n 18 00090 +C 18 00100 + Real TENTH(30) 18 00110 + DATA TENTH/ 18 00120 + #10.8276,6.9078,5.4221,4.6167,4.1030,3.7430,3.4746,3.2656,3.0975, 18 00130 + # 2.9588,2.8422,2.7425,2.6560,2.5802,2.5132,2.4533,2.3994,2.3507, 18 00140 + # 2.3063,2.2657,2.2284,2.1940,2.1621,2.1324,2.1048,2.0789,2.0547, 18 00150 + # 2.0319,2.0104,1.9901/ 18 00160 + 18 00170 + LITENT=100000. 18 00180 + IF(N.LE.0.OR.N.GT.30) RETURN 18 00190 + LITENT=TENTH(N) 18 00200 + RETURN 18 00210 + END 18 00220 + Real FUNCTION F(N) 19 00010 +C 19 00020 +C PROGRAM UNIT 19 19 00030 +C GIVES F(1,N,0.683) FOR N DEGREES OF FREEDOM (GILL, 19 00040 +C GAMMA RAY ANGULAR CORRELATIONS, ACADEMIC PRESS, 1975, 19 00050 +C APPENDIX A, TABLE 7) 19 00060 +C 19 00070 +C DUMMY ARGUMENT: 19 00080 +C N NUMBER OF DEGREES OF FREEDOM 19 00090 +C 19 00100 + Integer n 19 00110 +C 19 00120 + Real FF(16) 19 00130 + DATA FF /3.38,1.75,1.43,1.30,1.23,1.19,1.16,1.14, 19 00140 + # 1.12,1.11,1.10,1.09,1.09,1.08,1.08,1.07/ 19 00150 + 19 00160 + F=1.0 19 00170 + IF(N.LE.0.OR.N.GT.16) RETURN 19 00180 + F=FF(N) 19 00190 + RETURN 19 00200 + END 19 00210 + SUBROUTINE LINE(X,Y,IPOS,IX,ISTAR) 20 00010 +C 20 00020 +C PROGRAM UNIT 20 20 00030 +C PLOTS ONE LINE OF HISTOGRAM ON LINE-PRINTER. 20 00040 +C FRAME IN POSITION 23 AND 128. 20 00050 +C 20 00060 +C DUMMY ARGUMENTS: 20 00070 +C X,Y X,Y VALUES TO BE PRINTED 20 00080 +C IPOS POSITION OF 'O' 20 00090 +C IX POSITION OF 'X' 20 00100 +C ISTAR POSITION OF '*' 20 00110 +C 20 00120 + Integer ipos,ix,istar 20 00130 + Real x,y 20 00140 +C 20 00150 + CHARACTER*128 LINEE 20 00160 + 20 00170 + LINEE=' ' 20 00180 +C WRITE NUMBERS IN STRING LINE 20 00190 + WRITE(LINEE,100) X,Y 20 00200 +100 FORMAT(1X,F8.2,1X,F9.3) 20 00210 +C MAKE FRAME 20 00220 + LINEE(23:23)='+' 20 00230 + LINEE(128:128)='+' 20 00240 +C PUT IN *, X AND O 20 00250 + LINEE(ISTAR:ISTAR)='*' 20 00260 + LINEE(IX:IX) ='X' 20 00270 + LINEE(IPOS:IPOS) ='O' 20 00280 +C FINALLY WRITE LINE 20 00290 + WRITE(26,101) LINEE 20 00300 +101 FORMAT(A) 20 00310 + RETURN 20 00320 + END 20 00330 + Real FUNCTION CC(AD,THL1,THH1,THL2,THH2) 21 00010 +C 21 00020 +C PROGRAM UNIT 21 21 00030 +C CALCULATES CONVERSION COEFFICIENT OR RATIO FROM DELTA AND 21 00040 +C THEORETICAL VALUES FOR PURE MULTIPOLES. 21 00050 +C IF THL2 AND THH2 ARE 1.0, THE CONVERSION COEFFICIENT IS 21 00060 +C OBTAINED, ELSE THE RATIO FOR TWO SHELLS (SHELL1/SHELL2) 21 00070 +C IS CALCULATED. 21 00080 +C 21 00090 +C DUMMY ARGUMENTS: 21 00100 +C AD ATAN(DELTA) OF TRANSITION 21 00110 +C THL1 THEORETICAL VALUE FOR LOWER MULTIPOLE (SHELL1) 21 00120 +C THH1 THEORETICAL VALUE FOR HIGHER MULTIPOLE (SHELL1) 21 00130 +C THL2 THEORETICAL VALUE FOR LOWER MULTIPOLE (SHELL2) 21 00140 +C THH2 THEORETICAL VALUE FOR HIGHER MULTIPOLE (SHELL2) 21 00150 +C 21 00160 + Real AD,THL1,THH1,THL2,THH2 21 00170 +C 21 00180 + Real delta,d2,rads 21 00190 +C 21 00200 + Real TAN 21 00210 + Intrinsic TAN 21 00220 +C 21 00230 + DATA RADS /0.0174532/ 21 00240 +C 21 00250 + DELTA=TAN(RADS*AD) 21 00260 + D2=DELTA*DELTA 21 00270 + CC=(THL1+D2*THH1)/(THL2+D2*THH2) 21 00280 + RETURN 21 00290 + END 21 00300 + Real FUNCTION AK(ITR,K,AD) 22 00010 +C 22 00020 +C PROGRAM UNIT 22 22 00030 +C ROUTINE TO CALCULATE AK COEFFICIENT OF TRANSITION ITR. 22 00040 +C NOTE THAT RK(L,L+1)=-FK(L,L+1), SO DELTA(KRANE&STEFFEN)= 22 00050 +C -DELTA(ROSE&BRINK) IS USED. 22 00060 +C REFERENCE FOR EXPRESSION: ROSE AND BRINK, REV.MOD.PHYS.39(1967)306, 22 00070 +C FORMULA (3.73) WITH CHANGE OF SIGN FOR DELTA. 22 00080 +C 22 00090 +C DUMMY ARGUMENTS: 22 00100 +C ITR TRANSITION NUMBER 22 00110 +C K K=2 - A2, K=4 - A4 22 00120 +C AD ATAN(DELTA) OF TRANSITION ITR 22 00130 +C 22 00140 + Integer itr,k 22 00150 + Real ad 22 00160 +C 22 00170 + Real r1(2,3),r2(2,3),u1(2),u2(2),u3(2),uprod(2) 22 00180 + Common /COEFS/ R1,R2,U1,U2,U3,UPROD 22 00190 +C 22 00200 + Integer kk 22 00210 + Real delta,d2,rads,val 22 00220 +C 22 00230 + Real TAN 22 00240 + Intrinsic TAN 22 00250 +C 22 00260 + DATA RADS /0.0174532/ 22 00270 +C 22 00280 + KK=K/2 22 00290 + DELTA=TAN(AD*RADS) 22 00300 + D2=DELTA*DELTA 22 00310 + IF(ITR.EQ.2) GO TO 10 22 00320 + VAL=(R1(KK,1)+2.*DELTA*R1(KK,2)+D2*R1(KK,3))/(1.0+D2) 22 00330 + GO TO 20 22 00340 +10 VAL=(R2(KK,1)-2.*DELTA*R2(KK,2)+D2*R2(KK,3))/(1.0+D2) 22 00350 +20 AK=VAL 22 00360 + RETURN 22 00370 + END 22 00380 + SUBROUTINE SRK (RKK, JA, JB) 23 00010 +C 23 00020 +C PROGRAM UNIT 23 23 00030 +C SETS UP RK COEFFICIENTS 23 00040 +C 23 00050 +C DUMMY ARGUMENTS: 23 00060 +C RKK * 2 DIM. ARRAY CONTAINING RK COEFFICIENTS 23 00070 +C INDEX 1: 1 - K=2, 2 - K=4 23 00080 +C INDEX 2: LL, LL', L'L' 23 00090 +C JA 2*SPIN ON FINAL/INITIAL LEVEL (TRANSITION 1/2) 23 00100 +C JB 2*SPIN ON INITIAL/FINAL LEVEL (TRANSITION 1/2) 23 00110 +C * ASSIGNED IN ROUTINE 23 00120 +C 23 00130 + Integer ja,jb 23 00140 + Real RKK(2,3) 23 00150 +C 23 00160 + Integer k,ll,m 23 00170 +C 23 00180 + Real Rk 23 00190 + External Rk 23 00200 +C 23 00210 + Integer IABS 23 00220 + Intrinsic IABS 23 00230 +C 23 00240 + LL=IABS(JA-JB) 23 00250 + IF(LL.EQ.0) LL=2 23 00260 + DO 10 K=1,2 23 00270 + M=4*K 23 00280 + RKK(K,1)=RK(M,LL ,LL ,JA,JB) 23 00290 + RKK(K,2)=RK(M,LL ,LL+2,JA,JB) 23 00300 + RKK(K,3)=RK(M,LL+2,LL+2,JA,JB) 23 00310 +10 CONTINUE 23 00320 + RETURN 23 00330 + END 23 00340 + SUBROUTINE SUK(UKK,JA,JB,DELTA) 24 00010 +C 24 00020 +C PROGRAM UNIT 24 24 00030 +C SETS UP UK COEFFICIENTS 24 00040 +C REFERENCE: ROSE AND BRINK, REV.MOD.PHYS. 39(1967)306, 24 00050 +C FORMULA (3.49). 24 00060 +C 24 00070 +C DUMMY ARGUMENTS: 24 00080 +C UKK * ARRAY CONTAINING UK COEFFICIENTS 24 00090 +C INDEX: 1 - K=2, 2 - K=4 24 00100 +C JA 2*SPIN OF INITIAL LEVEL 24 00110 +C JB 2*SPIN OF FINAL LEVEL 24 00120 +C DELTA MIXING RATIO OF UNOBSERVED TRANSITION 24 00130 +C * ASSIGNED IN ROUTINE 24 00140 +C 24 00150 + Integer JA,JB 24 00160 + Real UKK(2),delta 24 00170 +C 24 00180 + Integer k,ll,m 24 00190 + Real d2 24 00200 +C 24 00210 + Real Uk 24 00220 + External Uk 24 00230 +C 24 00240 + Integer IABS 24 00250 + Intrinsic IABS 24 00260 +C 24 00270 + LL=IABS(JA-JB) 24 00280 + IF(LL.EQ.0) LL=2 24 00290 + 24 00300 + DO 10 K=1,2 24 00310 + M=4*K 24 00320 + D2=DELTA*DELTA 24 00330 + UKK(K)=(UK(M,LL,JA,JB)+D2*UK(M,LL+2,JA,JB))/(1.+D2) 24 00340 +10 CONTINUE 24 00350 + RETURN 24 00360 + END 24 00370 + Real FUNCTION RK(K,L,LDASH,JA,JB) 25 00010 +C 25 00020 +C PROGRAM UNIT 25 25 00030 +C CALCULATES RK COEFFICIENTS 25 00040 +C REFERENCE: ROSE AND BRINK, REV.MOD.PHYS 39(1967)306, 25 00050 +C FORMULA (3.36). 25 00060 +C 25 00070 +C DUMMY ARGUMENTS ROSE AND BRINK 25 00080 +C K K 25 00090 +C L L 25 00100 +C LDASH L' 25 00110 +C JA J1 25 00120 +C JB J2 25 00130 +C 25 00140 +C ALL ARGUMENTS ARE 2* THEIR ACTUAL VALUE 25 00150 +C 25 00160 + Integer k,l,ldash,ja,jb 25 00170 +C 25 00180 + Integer ind 25 00190 + Real x,y,z 25 00200 +C 25 00210 + Real Clegor,Wcoeff 25 00220 + External Clegor,Wcoeff 25 00230 +C 25 00240 + Real SQRT 25 00250 + Intrinsic SQRT 25 00260 +C 25 00270 + Z=(L-LDASH+2.0)/2.0 25 00280 + IF(K.EQ.0) GO TO 10 25 00290 + IND=(2+JA-JB+LDASH-L-K)/2 25 00300 + Y=(-1.)**IND 25 00310 + Z=WCOEFF(JA,JA,L,LDASH,K,JB) 25 00320 + IF(Z.EQ.0.) GO TO 10 25 00330 + X=(JA+1)*(L+1)*(LDASH+1) 25 00340 + Z=Z*SQRT(X)*CLEGOR(L,LDASH,2,-2,K,0)*Y 25 00350 +10 RK=Z 25 00360 + RETURN 25 00370 + END 25 00380 + Real FUNCTION UK(K,L,JA,JB) 26 00010 +C 26 00020 +C PROGRAM UNIT 26 26 00030 +C CALCULATES UK COEFFICIENTS 26 00040 +C REFERENCE: ROSE AND BRINK, REV.MOD.PHYS. 39(1967)306, 26 00050 +C FORMULA (3.45). 26 00060 +C 26 00070 +C DUMMY ARGUMENTS ROSE AND BRINK 26 00080 +C K K 26 00090 +C L L12 26 00100 +C JA J1 26 00110 +C JB J2 26 00120 +C ALL ARGUMENTS ARE 2* THEIR ACTUAL VALUE 26 00130 +C 26 00140 + Integer k,l,ja,jb 26 00150 + Real y,z 26 00160 +C 26 00170 + Real Wcoeff 26 00180 + External Wcoeff 26 00190 +C 26 00200 + Z=1.0 26 00210 + IF(K.EQ.0) GO TO 10 26 00220 + Z=WCOEFF(JA,JB,JA,JB,L,K) 26 00230 + Y=WCOEFF(JA,JB,JA,JB,L,0) 26 00240 + IF(Z.EQ.0.0) GO TO 10 26 00250 + Z=Z/Y 26 00260 +10 UK=Z 26 00270 + RETURN 26 00280 + END 26 00290 + Real FUNCTION CLEGOR(N,P,Q,R,S,T) 27 00010 +C 27 00020 +C PROGRAM UNIT 27 27 00030 +C ROUTINE TO CALCULATE CLEBSCH-GORDAN COEFFICIENTS 27 00040 +C 27 00050 +C Modified to handle change in storage of factorials and possible 27 00060 +C floating point overflow or underflow (TWB. 930414) 27 00070 +C 27 00080 +C DUMMY ARGUMENTS: 27 00090 +C ALL ARGUMENTS ARE 2* THEIR ACTUAL VALUE 27 00100 +C CLEGOR=(N P Q R / S T) 27 00110 +C 27 00120 + Integer N,P,Q,R,S,T 27 00130 +C 27 00140 +C FA CONTAINS FACTORIALS 27 00150 + Integer ifa(114) 27 00160 + Double Precision fa(114) 27 00170 + COMMON /FAC/ ifa,FA 27 00180 +C 27 00190 + Integer i,i1,i2,i3,i4,i5,i6,j,k,l,m 27 00200 + Integer exp, ix,iy, iz,itemp 27 00210 + Double Precision x, y,w,z, temp 27 00220 +C 27 00230 + Real ABS,ALOG10,FLOAT,SIGN 27 00240 + Double Precision DABS,DLOG10,DSIGN,DSQRT 27 00250 + Integer MOD 27 00260 + Intrinsic ABS,ALOG10,DABS,DLOG10,DSIGN,DSQRT,FLOAT,MOD,SIGN 27 00270 +C 27 00280 + Double Precision TRI 27 00290 + External TRI 27 00300 +C 27 00310 + I=0 27 00320 + Z=0. 27 00330 + iz=0 27 00340 + W=FLOAT(S+1) 27 00350 + W=DSQRT(W) 27 00360 + Y=W*TRI(N,P,S) 27 00370 + iy=0 27 00380 + IF(Y.EQ.0.) GO TO 12 27 00390 + If(DABS(y) .GT. 10.D+0 .OR. DABS(y) .LT. 0.1D+0)Then 27 00400 + exp=DLOG10(DABS(y)) 27 00410 + y=y/10.D+0**exp 27 00420 + iy=exp 27 00430 + Endif 27 00440 + X=0. 27 00450 + ix=0 27 00460 + I1=N+Q 27 00470 + I2=N-Q 27 00480 + I3=P+R 27 00490 + I4=P-R 27 00500 + I5=S+T 27 00510 + I6=S-T 27 00520 + IF(I1.LT.0)GO TO 12 27 00530 + IF(I2.LT.0)GO TO 12 27 00540 + IF(I3.LT.0)GO TO 12 27 00550 + IF(I4.LT.0)GO TO 12 27 00560 + IF(I5.LT.0)GO TO 12 27 00570 + IF(I6.LT.0)GO TO 12 27 00580 + X=Y*DSQRT(FA(I1+1)*FA(I2+1)*FA(I3+1)*FA(I4+1)*FA(I5+1)*FA(I6+1)) 27 00590 + temp=FLOAT(ifa(i1+1)+ifa(i2+1)+ifa(i3+1)+ifa(i4+1)+ifa(i5+1) 27 00600 + 2 +ifa(i6+1))/2.D+0 27 00610 + itemp=temp 27 00620 + x=x*10.D+0**(temp-FLOAT(itemp)) 27 00630 + ix=iy+itemp 27 00640 + If((DABS(x) .GT. 10.D+0 .OR. DABS(x) .LT. 0.1D+0) 27 00650 + 2 .AND. x .NE. 0.D+0)Then 27 00660 + exp=DLOG10(DABS(x)) 27 00670 + x=x/10.D+0**exp 27 00680 + ix=ix+exp 27 00690 + Endif 27 00700 + 1 ASSIGN 12 TO M 27 00710 + Y=FA(I+1) 27 00720 + iy=ifa(i+1) 27 00730 + J=N+P-S-I 27 00740 + L=0 27 00750 + GO TO 13 27 00760 + 2 J=N-Q-I 27 00770 + GO TO 13 27 00780 + 3 J=P+R-I 27 00790 + GO TO 13 27 00800 + 4 ASSIGN 11 TO M 27 00810 + J=S-P+Q+I 27 00820 + GO TO 13 27 00830 + 5 J=S-N-R+I 27 00840 + GO TO 13 27 00850 + 6 IF (I) 7,9,7 27 00860 + 7 IF(MOD(I,4))8,9,8 27 00870 + 8 K=-1 27 00880 + GO TO 10 27 00890 + 9 K=1 27 00900 + 10 Continue 27 00910 + Y=FLOAT(K)*Y 27 00920 + If((DABS(y) .GT. 10.D+0 .OR. DABS(y) .LT. 0.1D+0) 27 00930 + 2 .AND. y .NE. 0.D+0)Then 27 00940 + exp=DLOG10(DABS(y)) 27 00950 + y=y/10.D+0**exp 27 00960 + iy=iy+exp 27 00970 + Endif 27 00980 + temp=1.D+0/y 27 00990 + itemp=-iy 27 01000 + If((DABS(temp) .GT. 10.D+0 .OR. DABS(temp) .LT. 0.1D+0) 27 01010 + 2 .AND. temp .NE. 0.D+0)Then 27 01020 + exp=DLOG10(DABS(temp)) 27 01030 + temp=temp/10.D+0**exp 27 01040 + itemp=itemp+exp 27 01050 + Endif 27 01060 + If(iz .EQ. itemp)Then 27 01070 + Else If(iz .GT. itemp)Then 27 01080 + temp=temp*10.D+0**(itemp-iz) 27 01090 + Else 27 01100 + z=z*10.D+0**(iz-itemp) 27 01110 + iz=itemp 27 01120 + Endif 27 01130 + z=z+temp 27 01140 + If((DABS(z) .GT. 10.D+0 .OR. DABS(z) .LT. 0.1D+0) 27 01150 + 2 .AND. z .NE. 0.D+0)Then 27 01160 + exp=DLOG10(DABS(z)) 27 01170 + z=z/10.D+0**exp 27 01180 + iz=iz+exp 27 01190 + Endif 27 01200 + 11 I=I+2 27 01210 + GO TO 1 27 01220 + 12 Continue 27 01230 + CLEGOR=X*Z 27 01240 + If(clegor .EQ. 0.0)Return 27 01250 + If(ALOG10(ABS(clegor))+ix+iz .LE. 38 27 01260 + 2 .AND. ALOG10(ABS(clegor))+ix+iz .GE. -37)Then 27 01270 + clegor=clegor*10.**(ix+iz) 27 01280 + Else If(ALOG10(ABS(clegor))+ix+iz .GT. 38)Then 27 01290 + clegor=SIGN(1.6E+38,clegor) 27 01300 + Else 27 01310 + clegor=SIGN(0.25E-37,clegor) 27 01320 + Endif 27 01330 + RETURN 27 01340 + 13 IF (J) 15,14,14 27 01350 + 14 Continue 27 01360 + Y=Y*FA(J+1) 27 01370 + iy=iy+ifa(j+1) 27 01380 + If((DABS(y) .GT. 10.D+0 .OR. DABS(y) .LT. 0.1D+0) 27 01390 + 2 .AND. y .NE. 0.D+0)Then 27 01400 + exp=DLOG10(DABS(y)) 27 01410 + y=y/10.D+0**exp 27 01420 + iy=iy+exp 27 01430 + Endif 27 01440 + L=L+1 27 01450 + GO TO (2,3,4,5,6),L 27 01460 + 15 GO TO M, (12,11) 27 01470 + END 27 01480 + Real FUNCTION WCOEFF(N,P,Q,R,S,T) 28 00010 +C 28 00020 +C PROGRAM UNIT 28 28 00030 +C ROUTINE TO CALCULATE RACAH COEFFICIENTS 28 00040 +C 28 00050 +C Modified to handle change in storage of factorials and possible 28 00060 +C floating point overflow or underflow (TWB. 930414) 28 00070 +C 28 00080 +C DUMMY ARGUMENTS: 28 00090 +C ALL ARGUMENTS ARE 2* THEIR ACTUAL VALUE 28 00100 +C WCOEFF=W(N P Q R ; S T) 28 00110 +C 28 00120 + INTEGER n,P,Q,R,S,T 28 00130 +C 28 00140 +C FA CONTAINS FACTORIALS 28 00150 + Integer ifa(114) 28 00160 + Double Precision fa(114) 28 00170 + COMMON /FAC/ ifa,FA 28 00180 +C 28 00190 + Integer i,j,k,l,m 28 00200 + Integer exp, if,iv,ix,iy,iz,itemp 28 00210 + Double Precision f, v, x, y,z,temp 28 00220 +C 28 00230 + Double Precision Tri 28 00240 + External Tri 28 00250 +C 28 00260 + Real FLOAT,REAL,SIGN 28 00270 + Double Precision DABS,DLOG10 28 00280 + Intrinsic DABS,DLOG10,FLOAT,REAL,SIGN 28 00290 +C 28 00300 + f=0.0 28 00310 + if=0 28 00320 + Y=TRI(N,P,S)*TRI(Q,R,S)*TRI(Q,N,T)*TRI(P,R,T) 28 00330 + If((DABS(y) .GT. 10.D+0 .OR. DABS(y) .LT. 0.1D+0) 28 00340 + 2 .AND. y .NE. 0.D+0)Then 28 00350 + exp=DLOG10(DABS(y)) 28 00360 + y=y/10.D+0**exp 28 00370 + iy=exp 28 00380 + Endif 28 00390 + I=0 28 00400 + Z=0. 28 00410 + iz=0 28 00420 + IF (Y.EQ.0.) GO TO 14 28 00430 + 2 ASSIGN 14 TO M 28 00440 + X=FA(I+1) 28 00450 + ix=ifa(i+1) 28 00460 + J=N+P-S-I 28 00470 + L=0 28 00480 + GO TO 15 28 00490 + 3 Continue 28 00500 + X=X*F 28 00510 + ix=ix+if 28 00520 + If((DABS(x) .GT. 10.D+0 .OR. DABS(x) .LT. 0.1D+0) 28 00530 + 2 .AND. x .NE. 0.D+0)Then 28 00540 + exp=DLOG10(DABS(x)) 28 00550 + x=x/10.D+0**exp 28 00560 + ix=exp+ix 28 00570 + Endif 28 00580 + J=Q+R-S-I 28 00590 + GO TO 15 28 00600 + 4 Continue 28 00610 + X=X*F 28 00620 + ix=ix+if 28 00630 + If((DABS(x) .GT. 10.D+0 .OR. DABS(x) .LT. 0.1D+0) 28 00640 + 2 .AND. x .NE. 0.D+0)Then 28 00650 + exp=DLOG10(DABS(x)) 28 00660 + x=x/10.D+0**exp 28 00670 + ix=exp+ix 28 00680 + Endif 28 00690 + J=N+Q-T-I 28 00700 + GO TO 15 28 00710 + 5 Continue 28 00720 + X=X*F 28 00730 + ix=ix+if 28 00740 + If((DABS(x) .GT. 10.D+0 .OR. DABS(x) .LT. 0.1D+0) 28 00750 + 2 .AND. x .NE. 0.D+0)Then 28 00760 + exp=DLOG10(DABS(x)) 28 00770 + x=x/10.D+0**exp 28 00780 + ix=exp+ix 28 00790 + Endif 28 00800 + J=P+R-T-I 28 00810 + GO TO 15 28 00820 + 6 Continue 28 00830 + X=X*F 28 00840 + ix=ix+if 28 00850 + If((DABS(x) .GT. 10.D+0 .OR. DABS(x) .LT. 0.1D+0) 28 00860 + 2 .AND. x .NE. 0.D+0)Then 28 00870 + exp=DLOG10(DABS(x)) 28 00880 + x=x/10.D+0**exp 28 00890 + ix=exp+ix 28 00900 + Endif 28 00910 + J=N+P+Q+R+2-I 28 00920 + GO TO 15 28 00930 + 7 V=F 28 00940 + iv=if 28 00950 + ASSIGN 13 TO M 28 00960 + J=S+T-N-R+I 28 00970 + GO TO 15 28 00980 + 8 Continue 28 00990 + X=X*F 28 01000 + ix=ix+if 28 01010 + If((DABS(x) .GT. 10.D+0 .OR. DABS(x) .LT. 0.1D+0) 28 01020 + 2 .AND. x .NE. 0.D+0)Then 28 01030 + exp=DLOG10(DABS(x)) 28 01040 + x=x/10.D+0**exp 28 01050 + ix=exp+ix 28 01060 + Endif 28 01070 + J=S+T-P-Q+I 28 01080 + GO TO 15 28 01090 + 9 Continue 28 01100 + X=V/(X*F) 28 01110 + ix=iv-ix-if 28 01120 + If((DABS(x) .GT. 10.D+0 .OR. DABS(x) .LT. 0.1D+0) 28 01130 + 2 .AND. x .NE. 0.D+0)Then 28 01140 + exp=DLOG10(DABS(x)) 28 01150 + x=x/10.D+0**exp 28 01160 + ix=exp+ix 28 01170 + Endif 28 01180 + IF (MOD(I,4)) 10,11,10 28 01190 + 10 K=-1 28 01200 + GO TO 12 28 01210 + 11 K=1 28 01220 + 12 Continue 28 01230 + X=FLOAT(K)*X 28 01240 + If((DABS(x) .GT. 10.D+0 .OR. DABS(x) .LT. 0.1D+0) 28 01250 + 2 .AND. x .NE. 0.D+0)Then 28 01260 + exp=DLOG10(DABS(x)) 28 01270 + x=x/10.D+0**exp 28 01280 + ix=exp+ix 28 01290 + Endif 28 01300 + temp=x 28 01310 + itemp=ix 28 01320 + If(iz .EQ. itemp)Then 28 01330 + Else If(iz .GT. itemp)Then 28 01340 + temp=temp*10.D+0**(itemp-iz) 28 01350 + Else 28 01360 + z=z*10.D+0**(iz-itemp) 28 01370 + iz=itemp 28 01380 + Endif 28 01390 + z=z+temp 28 01400 + If((DABS(z) .GT. 10.D+0 .OR. DABS(z) .LT. 0.1D+0) 28 01410 + 2 .AND. z .NE. 0.D+0)Then 28 01420 + exp=DLOG10(DABS(z)) 28 01430 + z=z/10.D+0**exp 28 01440 + iz=iz+exp 28 01450 + Endif 28 01460 + 13 I=I+2 28 01470 + GO TO 2 28 01480 + 14 Continue 28 01490 + X=Y*Z 28 01500 + ix=iy+iz 28 01510 + If((DABS(x) .GT. 10.D+0 .OR. DABS(x) .LT. 0.1D+0) 28 01520 + 2 .AND. x .NE. 0.D+0)Then 28 01530 + exp=DLOG10(DABS(x)) 28 01540 + x=x/10.D+0**exp 28 01550 + ix=exp+ix 28 01560 + Endif 28 01570 + GO TO 18 28 01580 + 15 L=L+1 28 01590 + IF (J) 17,16,16 28 01600 + 16 F=FA(J+1) 28 01610 + if=ifa(j+1) 28 01620 + GO TO (3,4,5,6,7,8,9),L 28 01630 + 17 GO TO M,(14,13) 28 01640 + 18 Continue 28 01650 + If(ix .LE. 38 .AND. ix .GE. -37)Then 28 01660 + Wcoeff=x*10.**ix 28 01670 + Else If(ix .GT. +38)Then 28 01680 + Wcoeff=SIGN(1.6E+38,REAL(x)) 28 01690 + Else 28 01700 + Wcoeff=SIGN(0.25E-37,REAL(x)) 28 01710 + Endif 28 01720 + RETURN 28 01730 + END 28 01740 + DOUBLE PRECISION FUNCTION TRI(I,J,K) 29 00010 +C 29 00020 +C PROGRAM UNIT 29 29 00030 +C HELP ROUTINE FOR CLEGOR AND WCOEFF 29 00040 +C 29 00050 +C Modified to handle change in storage of factorials (TWB. 930414) 29 00060 +C 29 00070 +C DUMMY ARGUMENTS: 29 00080 +C ALL ARGUMENTS ARE 2* THEIR ACTUAL VALUE 29 00090 +C I,J,K INTEGERS, SEE WCOEFF AND CLEGOR 29 00100 +C 29 00110 + Integer i,j,k 29 00120 +C 29 00130 +C FA CONTAINS FACTORIALS 29 00140 + Integer ifa(114) 29 00150 + Double Precision fa(114) 29 00160 + COMMON /FAC/ ifa,FA 29 00170 +C 29 00180 + Integer m1,m2,m3,m4 29 00190 +C 29 00200 + Real FLOAT 29 00210 + Double Precision DSQRT 29 00220 + Intrinsic FLOAT,DSQRT 29 00230 +C 29 00240 + M1=I+J-K 29 00250 + M2=I-J+K 29 00260 + M3=J+K-I 29 00270 + M4=I+J+K+2 29 00280 + If(m1.LT.0 .OR. m2.LT.0 .OR. m3.LT.0 .OR. m4.LT.0)Then 29 00290 + Tri=0.D+0 29 00300 + Return 29 00310 + Endif 29 00320 + Tri=DSQRT(FA(M1+1)*FA(M2+1)*FA(M3+1)/FA(M4+1)) 29 00330 + Tri=Tri* 29 00340 + 2 10.D+0**(FLOAT(ifa(m1+1)+ifa(m2+1)+ifa(m3+1)-ifa(m4+1))/2.) 29 00350 + RETURN 29 00360 + END 29 00370 + SUBROUTINE SETFAC 30 00010 +C 30 00020 +C PROGRAM UNIT 30 30 00030 +C CALCULATE FACTORIALS FOR VECTOR-COUPLING COEFFICIENTS 30 00040 +C 30 00050 +C Modified 14-Apr-93 to avoid floating overflow problems (TWB) 30 00060 +C 30 00070 + Integer ifa(114) 30 00080 + DOUBLE PRECISION FA(114) 30 00090 + COMMON /FAC/ ifa,FA 30 00100 +C 30 00110 + Integer i,exp 30 00120 +C 30 00130 + Real FLOAT 30 00140 + Double Precision DLOG10 30 00150 + Intrinsic DLOG10,FLOAT 30 00160 +C 30 00170 + Do 100 i=1,113 30 00180 + ifa(i)=0 30 00190 +100 Continue 30 00200 + DO 10 I=1,4 30 00210 + FA(I)=1.D+0 30 00220 +10 Continue 30 00230 + DO 11 I=5,113,2 30 00240 + FA(I)=FA(I-2)*FLOAT(I/2) 30 00250 + ifa(i)=ifa(i-2) 30 00260 + If(fa(i) .GE. 10.0)Then 30 00270 + exp=DLOG10(fa(i)) 30 00280 + ifa(i)=ifa(i)+exp 30 00290 + fa(i)=fa(i)/10.D+0**exp 30 00300 + Endif 30 00310 + FA(I+1)=FA(I) 30 00320 + ifa(i+1)=ifa(i) 30 00330 +11 Continue 30 00340 + Do 150 i=1,114 30 00350 + fa(i)=fa(i)/10. 30 00360 + ifa(i)=ifa(i)+1 30 00370 +150 Continue 30 00380 + RETURN 30 00390 + END 30 00400 + SUBROUTINE CREAD(N,T,CARD) 31 00010 +C 31 00020 +C PROGRAM UNIT 31 31 00030 +C ROUTINE TO READ A MAXIMUM OF NMAX REALS FROM THE STRING CARD 31 00040 +C EACH CHARACTER DIFFERENT FROM '0-9','-' AND 31 00050 +C '.' IS TREATED AS A SEPARATOR. 31 00060 +C N IS NUMBER OF REALS FOUND ON CARD. 31 00070 +C T(I) CONTAINS THE NUMBERS. 31 00080 +C 31 00090 +C DUMMY ARGUMENTS: 31 00100 +C N * NUMBER OF REALS FOUND IN SUBSTRING CARD(NSTART:NSTOP) 31 00110 +C T * THE REALS 31 00120 +C CARD THE STRING 31 00130 +C * ASSIGNED IN ROUTINE 31 00140 +C 31 00150 + Integer N 31 00160 + Real T(*) 31 00170 + Character*80 card 31 00180 +C 31 00190 + Integer i,isave,j 31 00200 + Integer nsta,nstart,nstop,nmax 31 00210 + LOGICAL FIRST,NEG 31 00220 + Real DEC,reall 31 00230 + CHARACTER*1 NUMBER(10) 31 00240 + DATA NUMBER /'0','1','2','3','4','5','6','7', 31 00250 + # '8','9'/ 31 00260 +C DEFINE STARTING AND END CHARACTER AND MAXIMUM NUMBER OF REALS 31 00270 + DATA NSTART,NSTOP,NMAX /3,72,10/ 31 00280 + 31 00290 +C INITIALIZE 31 00300 + DO 2 I=1,NMAX 31 00310 +2 T(I)=0.0 31 00320 + N=0 31 00330 + reall=0.0 31 00340 + DEC=0.1 31 00350 + NSTA=NSTART 31 00360 + NEG=.FALSE. 31 00370 + FIRST=.TRUE. 31 00380 + 31 00390 +5 DO 25 I=NSTA,NSTOP 31 00400 + ISAVE=I 31 00410 +C CHECK IF DECIMAL POINT 31 00420 + IF(CARD(I:I).EQ.'.') GO TO 26 31 00430 +C CHECK IF NEGATIVE 31 00440 + IF(CARD(I:I).EQ.'-') NEG=.TRUE. 31 00450 +C CHECK IF NUMBER. 31 00460 + DO 10 J=1,10 31 00470 + IF(CARD(I:I).EQ.NUMBER(J)) GO TO 20 31 00480 +10 CONTINUE 31 00490 + IF(FIRST) GO TO 25 31 00500 + GO TO 30 31 00510 +C ACCUMULATE INTEGER PART 31 00520 +20 reall=10.*reall+J-1. 31 00530 + FIRST=.FALSE. 31 00540 +25 CONTINUE 31 00550 + 31 00560 + IF(FIRST) GO TO 40 31 00570 + GO TO 30 31 00580 + 31 00590 +26 NSTA=ISAVE+1 31 00600 + DO 29 I=NSTA,NSTOP 31 00610 + ISAVE=I 31 00620 +C DOUBLE DECIMAL POINTS ARE NOT ALLOWED 31 00630 + IF(CARD(I:I).EQ.'.') 31 00640 + # CALL TROUT(261,'CREAD','DOUBLE DECIMAL POINT') 31 00650 +C CHECK IF NUMBER 31 00660 + DO 27 J=1,10 31 00670 + IF(CARD(I:I).EQ.NUMBER(J)) GO TO 28 31 00680 +27 CONTINUE 31 00690 + GO TO 30 31 00700 +C ACCUMULATE FRACTIONAL PART 31 00710 +28 reall=reall+(J-1.)*DEC 31 00720 + DEC=DEC/10. 31 00730 +29 CONTINUE 31 00740 + 31 00750 +C NUMBER COMPLETE. 31 00760 +30 N=N+1 31 00770 + IF(N.GT.NMAX) CALL TROUT(301,'CREAD','TOO MANY PARAMETERS') 31 00780 + IF(NEG) reall=-reall 31 00790 +C TRICK TO TAKE CARE OF SPIN -0 31 00800 + IF(NEG.AND.(reall.EQ.0)) reall=-1.0E-30 31 00810 +C 31 00820 + T(N)=reall 31 00830 + reall=0.0 31 00840 + DEC=0.1 31 00850 + NEG=.FALSE. 31 00860 + FIRST=.TRUE. 31 00870 + NSTA=ISAVE+1 31 00880 + IF(NSTA.LE.NSTOP) GO TO 5 31 00890 +40 RETURN 31 00900 + END 31 00910 + SUBROUTINE CLEAR 32 00010 +C 32 00020 +C PROGRAM UNIT 32 32 00030 +C ROUTINE TO CLEAR DATA AND RESET DEFAULS 32 00040 +C 32 00050 + Integer j(6),nlev 32 00060 + LOGICAL ODD 32 00070 + Real pi(6) 32 00080 + COMMON /SPINS/ J,PI,NLEV,ODD 32 00090 +C 32 00100 + Real r1(2,3),r2(2,3),u1(2),u2(2),u3(2),uprod(2) 32 00110 + Common /COEFS/ R1,R2,U1,U2,U3,UPROD 32 00120 +C 32 00130 + Real value(9),error(9),theo(9),rlow1(9),high1(9),rlow2(9),high2(9)32 00140 + Integer itran(9),ndat 32 00150 + Logical data(9),ratio(9) 32 00160 + Common /DATA/ VALUE,ERROR,THEO,DATA,ITRAN,RLOW1,HIGH1,NDAT, 32 00170 + 2 RLOW2,HIGH2,RATIO 32 00180 +C 32 00190 + Integer numu 32 00200 + Logical pure(2) 32 00210 + Real rllim(2),rulim(2),step(2),du(3) 32 00220 + Common /DELTAS/ RLLIM,RULIM,STEP,PURE,NUMU,DU 32 00230 +C 32 00240 + Character*80 CARD 32 00250 + Common /CARD/ CARD 32 00260 +C 32 00270 + Integer nfree,numb 32 00280 + LOGICAL DUMP,SHORT 32 00290 + Real QSQ(181),alim(2,2) 32 00300 + Common /MISC/ DUMP,NFREE,NUMB,QSQ,ALIM,SHORT 32 00310 +C 32 00320 + Character*2 NAME(9),MULL(2),MULH(2) 32 00330 + CHARACTER*80 TITLE 32 00340 + Common /CHARAC/ NAME,MULL,MULH,TITLE 32 00350 +C 32 00360 + Integer i,ii 32 00370 + Character*2 INNAME(9) 32 00380 + DATA INNAME /'A2','A4','D ',' D',' ',' ',' ',' ',' '/ 32 00390 + 32 00400 + NLEV=2 32 00410 + NDAT=4 32 00420 + NUMU=0 32 00430 + NFREE=1 32 00440 + NUMB=0 32 00450 + ODD=.FALSE. 32 00460 + DUMP=.FALSE. 32 00470 + SHORT=.TRUE. 32 00480 + CARD=' ' 32 00490 + TITLE=' ' 32 00500 + 32 00510 + DO 2 I=1,9 32 00520 + NAME(I)=INNAME(I) 32 00530 + VALUE(I)=0.0 32 00540 + ERROR(I)=0.0 32 00550 + THEO(I)=0.0 32 00560 + DATA(I)=.FALSE. 32 00570 + ITRAN(I)=0 32 00580 + RLOW1(I)=0.0 32 00590 + RLOW2(I)=0.0 32 00600 + HIGH1(I)=0.0 32 00610 + HIGH2(I)=0.0 32 00620 + RATIO(I)=.FALSE. 32 00630 +2 CONTINUE 32 00640 + 32 00650 + DO 3 I=1,2 32 00660 + PURE(I)=.FALSE. 32 00670 + UPROD(I)=1.0 32 00680 + U1(I)=1.0 32 00690 + U2(I)=1.0 32 00700 + U3(I)=1.0 32 00710 + ITRAN(I+2)=I 32 00720 + RLLIM(I)=-90. 32 00730 + RULIM(I)=90. 32 00740 + STEP(I)=2. 32 00750 + MULL(I)=' ' 32 00760 + MULH(I)=' ' 32 00770 + ALIM(I,1)=-90. 32 00780 + ALIM(I,2)=90. 32 00790 +3 CONTINUE 32 00800 + 32 00810 + DO 4 I=1,3 32 00820 + DU(I)=0.0 32 00830 +4 CONTINUE 32 00840 + 32 00850 + DO 6 I=1,6 32 00860 + J(I)=0 32 00870 + PI(I)=0.0 32 00880 +6 CONTINUE 32 00890 + 32 00900 + DO 7 I=1,181 32 00910 + QSQ(I)=0.0 32 00920 +7 CONTINUE 32 00930 + DO 8 I=1,2 32 00940 + DO 8 II=1,3 32 00950 + R1(I,II)=0.0 32 00960 + R2(I,II)=0.0 32 00970 +8 CONTINUE 32 00980 + CALL COUT 32 00990 + RETURN 32 01000 + END 32 01010 diff --git a/tests/ensdf_processing/delta/ref_delta.rpt b/tests/ensdf_processing/delta/ref_delta.rpt new file mode 100644 index 0000000000..29d252ffe0 --- /dev/null +++ b/tests/ensdf_processing/delta/ref_delta.rpt @@ -0,0 +1,910 @@ + + + * DATA CLEARED * + + HEADER: 59FE B- DECAY. 142-192 CORR. WITH DELTA DATA FROM OTHER CORR. + + * A2-DATA -0.2800 0.0400 + + * D -DATA 1.0000 -0.0050 0.0200 + + * D -DATA 2.0000 0.2200 0.0190 + + * ST-DATA 3.0000 3.0000 + + * LI-DATA -12.0000 12.0000 -90.0000 90.0000 + + * GO-DATA -0.5000 -1.5000 -1.5000 +1 59FE B- DECAY. 142-192 CORR. WITH DELTA DATA FROM OTHER CORR. + + SPIN SEQUENCE 1/2- ---> 3/2- ---> 3/2- + + KRANE-STEFFEN SIGN CONVENTION FOR MIXING RATIOS + + + +++++++ DATA +++++++ + A2 = -0.280+- 0.040 + D 1= -0.286+- 1.146 (ATAN(DELTA)) + D2= 12.407+- 1.038 (ATAN(DELTA)) + + ATAN(D1) VARIED FROM -12.0 TO 12.0 IN STEPS OF 3.0 DEGREES + + ATAN(D2) VARIED FROM -90.0 TO 90.0 IN STEPS OF 3.0 DEGREES + + + + DELTA(1) MINIMUM + + + SQ.RES. A2 A4 ATAN(D1) ATAN(D2) + 1.941 -0.327 0.000 -1.1 12.1 + + DELTA(1)= -0.019 + 0.022 - 0.022 SIGMA= 3.639 SIGMA/DEGREE OF FREEDOM= 1.819 + + + ATAN(DELTA1) NSQRES 0.1 0.2 0.5 1 2 5 10 20 50 100 + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + -12.00 65.494 + X * O + + -9.00 34.380 + X * O + + -6.00 13.587 + X * O + + -3.00 2.821 + OX * + + 0.00 1.587 + O X * + + 3.00 9.262 + X * O + + 6.00 25.177 + X * O + + 9.00 48.690 + X * O + + 12.00 79.235 + X * O + + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + + DEGREES OF FREEDOM = 2 + X = 5 PERCENT LIMIT = 2.996 + * = 0.1 PERCENT LIMIT = 6.908 + + + + + DELTA(2) MINIMUM + + + SQ.RES. A2 A4 ATAN(D1) ATAN(D2) + 1.940 -0.327 0.000 -1.1 12.1 + + DELTA(2)= 0.214 + 0.024 - 0.024 SIGMA= 3.638 SIGMA/DEGREE OF FREEDOM= 1.819 + + + ATAN(DELTA2) NSQRES 0.1 0.2 0.5 1 2 5 10 20 50 100 + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + -90.00 4888.706 + X * O + -87.00 4615.082 + X * O + -84.00 4349.997 + X * O + -81.00 4093.088 + X * O + -78.00 3844.051 + X * O + -75.00 3602.669 + X * O + -72.00 3368.822 + X * O + -69.00 3142.468 + X * O + -66.00 2923.624 + X * O + -63.00 2712.336 + X * O + -60.00 2508.660 + X * O + -57.00 2312.650 + X * O + -54.00 2124.345 + X * O + -51.00 1943.767 + X * O + -48.00 1770.917 + X * O + -45.00 1605.778 + X * O + -42.00 1448.312 + X * O + -39.00 1298.469 + X * O + -36.00 1156.191 + X * O + -33.00 1021.429 + X * O + -30.00 894.161 + X * O + -27.00 774.414 + X * O + -24.00 662.295 + X * O + -21.00 558.003 + X * O + -18.00 461.830 + X * O + -15.00 374.130 + X * O + -12.00 295.272 + X * O + -9.00 225.584 + X * O + -6.00 165.306 + X * O + -3.00 114.560 + X * O + 0.00 73.348 + X * O + + 3.00 41.570 + X * O + + 6.00 19.053 + X * O + + 9.00 5.592 + X O * + + 12.00 0.974 + O X * + + 15.00 5.009 + X O * + + 18.00 17.534 + X * O + + 21.00 38.425 + X * O + + 24.00 67.586 + X * O + + 27.00 104.950 + X * O + 30.00 150.470 + X * O + 33.00 204.116 + X * O + 36.00 265.869 + X * O + 39.00 335.721 + X * O + 42.00 413.672 + X * O + 45.00 499.727 + X * O + 48.00 593.905 + X * O + 51.00 696.233 + X * O + 54.00 806.754 + X * O + 57.00 925.531 + X * O + 60.00 1052.655 + X * O + 63.00 1188.245 + X * O + 66.00 1332.458 + X * O + 69.00 1485.479 + X * O + 72.00 1647.517 + X * O + 75.00 1818.783 + X * O + 78.00 1999.457 + X * O + 81.00 2189.654 + X * O + 84.00 2389.392 + X * O + 87.00 2598.569 + X * O + 90.00 2816.966 + X * O + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + + DEGREES OF FREEDOM = 2 + X = 5 PERCENT LIMIT = 2.996 + * = 0.1 PERCENT LIMIT = 6.908 + + + + + + +++++++ END OF ANALYSIS FOR THIS SPIN COMBINATION +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + * D -DATA 2.0000 -28.0000 10.0000 + + * GO-DATA -0.5000 -1.5000 -1.5000 +1 59FE B- DECAY. 142-192 CORR. WITH DELTA DATA FROM OTHER CORR. + + SPIN SEQUENCE 1/2- ---> 3/2- ---> 3/2- + + KRANE-STEFFEN SIGN CONVENTION FOR MIXING RATIOS + + + +++++++ DATA +++++++ + A2 = -0.280+- 0.040 + D 1= -0.286+- 1.146 (ATAN(DELTA)) + D2= -87.955+- 0.836 (ATAN(DELTA)) + + ATAN(D1) VARIED FROM -12.0 TO 12.0 IN STEPS OF 3.0 DEGREES + + ATAN(D2) VARIED FROM -90.0 TO 90.0 IN STEPS OF 3.0 DEGREES + + + ATAN(DELTA1) NSQRES 0.1 0.2 0.5 1 2 5 10 20 50 100 + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + -12.00 77.687 + X * O + + -9.00 56.410 + X * O + + -6.00 39.925 + X * O + + -3.00 30.296 + X * O + + 0.00 27.523 + X * O + + 3.00 31.606 + X * O + + 6.00 42.544 + X * O + + 9.00 60.339 + X * O + + 12.00 84.990 + X * O + + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + + DEGREES OF FREEDOM = 2 + X = 5 PERCENT LIMIT = 2.996 + * = 0.1 PERCENT LIMIT = 6.908 + + + + ATAN(DELTA2) NSQRES 0.1 0.2 0.5 1 2 5 10 20 50 100 + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + -90.00 27.491 + X * O + + -87.00 32.347 + X * O + + -84.00 50.262 + X * O + + -81.00 80.877 + X * O + + -78.00 123.886 + X * O + -75.00 179.074 + X * O + -72.00 246.317 + X * O + -69.00 325.577 + X * O + -66.00 416.868 + X * O + -63.00 520.238 + X * O + -60.00 635.743 + X * O + -57.00 763.436 + X * O + -54.00 903.357 + X * O + -51.00 1055.526 + X * O + -48.00 1219.947 + X * O + -45.00 1396.601 + X * O + -42.00 1585.450 + X * O + -39.00 1786.444 + X * O + -36.00 1999.527 + X * O + -33.00 2224.647 + X * O + -30.00 2461.784 + X * O + -27.00 2710.965 + X * O + -24.00 2972.295 + X * O + -21.00 3245.975 + X * O + -18.00 3532.297 + X * O + -15.00 3831.614 + X * O + -12.00 4144.295 + X * O + -9.00 4470.669 + X * O + -6.00 4810.976 + X * O + -3.00 5165.336 + X * O + 0.00 5533.753 + X * O + 3.00 5916.127 + X * O + 6.00 6312.285 + X * O + 9.00 6722.020 + X * O + 12.00 7145.121 + X * O + 15.00 7581.397 + X * O + 18.00 8030.687 + X * O + 21.00 8492.864 + X * O + 24.00 8967.833 + X * O + 27.00 9455.528 + X * O + 30.00 9955.902 + X * O + 33.00 10468.923 + X * O + 36.00 10994.575 + X * O + 39.00 11532.847 + X * O + 42.00 12083.741 + X * O + 45.00 12647.264 + X * O + 48.00 13223.428 + X * O + 51.00 13812.267 + X * O + 54.00 14413.821 + X * O + 57.00 15028.152 + X * O + 60.00 15655.355 + X * O + 63.00 16295.547 + X * O + 66.00 16948.881 + X * O + 69.00 17615.547 + X * O + 72.00 18295.754 + X * O + 75.00 18989.709 + X * O + 78.00 19697.596 + X * O + 81.00 20419.525 + X * O + 84.00 21155.521 + X * O + 87.00 21905.480 + X * O + 90.00 22669.176 + X * O + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + + DEGREES OF FREEDOM = 2 + X = 5 PERCENT LIMIT = 2.996 + * = 0.1 PERCENT LIMIT = 6.908 + + + + + + +++++++ END OF ANALYSIS FOR THIS SPIN COMBINATION +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + + * DATA CLEARED * + + HEADER: 206PO EC DECAY. 286-1032 CORR. WITH K AND L1/L2 CONVERSION DATA + + * A2-DATA 0.0170 0.0050 + + * A4-DATA 0.0080 0.0120 + + * KA-DATA 1.0000 46.4000 2.2000 44.8100 7.4230 + + * LL-DATA 1.0000 9.6700 0.5000 6.9800 1.0880 0.7259 2.5890 + + * KA-DATA 2.0000 1.6000 0.0900 1.5290 0.5272 + + * LL-DATA 2.0000 10.9000 0.5000 0.2331 0.0771 0.0211 0.0210 + + * ST-DATA 4.0000 4.0000 + + * OU-DATA 1.0000 + + * GO-DATA 1.0000 2.0000 3.0000 +1 206PO EC DECAY. 286-1032 CORR. WITH K AND L1/L2 CONVERSION DATA + + SPIN SEQUENCE 1+ ---> 2+ ---> 3+ + + KRANE-STEFFEN SIGN CONVENTION FOR MIXING RATIOS + + + +++++++ DATA +++++++ + A2 = 0.017+- 0.005 + A4 = 0.008+- 0.012 + KA = 46.4000+- 2.2000 FOR TRANSITION 1. THEORETICAL VALUES= 44.8100 FOR M1 AND 7.4230 FOR E2 + LL = 9.6700+- 0.5000 FOR TRANSITION 1. THEORETICAL VALUES= 6.9800 FOR M1 AND 1.0880 FOR E2 + * RATIO * OTHER SHELL: 0.7259 FOR M1 AND 2.5890 FOR E2 + KA = 1.6000+- 0.0900 FOR TRANSITION 2. THEORETICAL VALUES= 1.5290 FOR M1 AND 0.5272 FOR E2 + LL = 10.9000+- 0.5000 FOR TRANSITION 2. THEORETICAL VALUES= 0.2331 FOR M1 AND 0.0771 FOR E2 + * RATIO * OTHER SHELL: 0.0211 FOR M1 AND 0.0210 FOR E2 + + ATAN(D1) VARIED FROM -90.0 TO 90.0 IN STEPS OF 4.0 DEGREES + + ATAN(D2) VARIED FROM -90.0 TO 90.0 IN STEPS OF 4.0 DEGREES +1 206PO EC DECAY. 286-1032 CORR. WITH K AND L1/L2 CONVERSION DATA + + SPIN SEQUENCE 1+ ---> 2+ ---> 3+ + + KRANE-STEFFEN SIGN CONVENTION FOR MIXING RATIOS + + STEPPING IN ATAN(DELTA1) + + + SQ.RES. A2 A4 ATAN(D1) ATAN(D2) KA(1) LL(1) KA(2) LL(2) + 657.464 0.017 0.001 -90.0 -8.0 7.4230 0.4202 1.5095 10.9044 + 653.572 0.018 0.001 -86.0 -7.3 7.6050 0.4328 1.5129 10.9296 + 642.141 0.018 0.001 -82.0 -6.9 8.1472 0.4709 1.5146 10.9416 + 623.505 0.018 0.001 -78.0 -6.7 9.0392 0.5353 1.5155 10.9486 + 598.237 0.019 0.001 -74.0 -6.5 10.2636 0.6275 1.5161 10.9529 + 567.085 0.019 0.001 -70.0 -6.4 11.7966 0.7496 1.5165 10.9557 + 530.928 0.019 0.001 -66.0 -6.4 13.6083 0.9044 1.5167 10.9575 + 490.711 0.019 0.001 -62.0 -6.3 15.6634 1.0956 1.5169 10.9586 + 447.393 0.019 0.000 -58.0 -6.3 17.9220 1.3276 1.5170 10.9592 + 401.898 0.019 0.000 -54.0 -6.3 20.3401 1.6057 1.5170 10.9593 + 355.082 0.019 0.000 -50.0 -6.3 22.8706 1.9363 1.5169 10.9588 + 307.726 0.019 0.000 -46.0 -6.3 25.4643 2.3262 1.5168 10.9579 + 260.556 0.019 0.000 -42.0 -6.4 28.0706 2.7832 1.5166 10.9563 + 214.301 0.019 0.000 -38.0 -6.5 30.6390 3.3146 1.5162 10.9537 + 169.789 0.018 0.000 -34.0 -6.6 33.1193 3.9264 1.5157 10.9499 + 128.050 0.018 0.000 -30.0 -6.8 35.4633 4.6213 1.5149 10.9438 + 90.389 0.018 0.000 -26.0 -7.2 37.6254 5.3950 1.5135 10.9335 + 58.350 0.017 0.000 -22.0 -7.8 39.5635 6.2320 1.5107 10.9133 + 33.530 0.017 0.000 -18.0 -9.4 41.2399 7.1004 1.5023 10.8518 + 19.028 0.012 0.000 -14.0 -14.8 42.6219 7.9469 1.4635 10.5670 + 6.522 0.017 0.000 -10.0 4.3 43.6827 8.6978 1.5234 11.0066 + 2.641 0.017 0.000 -6.0 -1.9 44.4015 9.2671 1.5279 11.0397 + 1.779 0.017 0.000 -2.0 -3.2 44.7645 9.5758 1.5259 11.0245 + 1.791 0.017 0.000 2.0 -3.8 44.7645 9.5758 1.5247 11.0156 + 2.687 0.017 0.000 6.0 -4.1 44.4015 9.2671 1.5239 11.0100 + 6.539 0.016 0.000 10.0 -4.3 43.6827 8.6978 1.5234 11.0060 + 16.079 0.016 0.000 14.0 -4.4 42.6219 7.9469 1.5230 11.0033 + 33.188 0.016 0.000 18.0 -4.5 41.2399 7.1004 1.5227 11.0014 + 58.227 0.016 0.000 22.0 -4.6 39.5635 6.2320 1.5225 11.0001 + 90.317 0.016 0.000 26.0 -4.6 37.6254 5.3950 1.5224 10.9992 + 127.986 0.015 0.000 30.0 -4.7 35.4633 4.6213 1.5224 10.9987 + 169.713 0.015 0.000 34.0 -4.7 33.1193 3.9264 1.5223 10.9985 + 214.201 0.015 0.000 38.0 -4.7 30.6390 3.3146 1.5223 10.9986 + 260.426 0.016 0.000 42.0 -4.7 28.0706 2.7832 1.5224 10.9991 + 307.565 0.016 0.000 46.0 -4.6 25.4643 2.3262 1.5225 10.9998 + 354.891 0.016 0.000 50.0 -4.6 22.8706 1.9363 1.5227 11.0010 + 401.681 0.016 0.000 54.0 -4.5 20.3401 1.6057 1.5229 11.0027 + 447.158 0.016 0.000 58.0 -4.3 17.9220 1.3276 1.5232 11.0052 + 490.468 0.017 0.000 62.0 -4.2 15.6634 1.0956 1.5237 11.0088 + 530.693 0.017 0.000 66.0 -3.9 13.6083 0.9044 1.5244 11.0140 + 566.869 0.017 0.000 70.0 -3.4 11.7966 0.7496 1.5255 11.0217 + 598.036 0.017 0.000 74.0 -2.4 10.2636 0.6275 1.5273 11.0350 + 623.323 0.017 0.000 78.0 1.3 9.0392 0.5353 1.5285 11.0434 + 649.339 0.005 0.004 82.0 -14.9 8.1472 0.4709 1.4626 10.5607 + 653.865 0.017 0.002 86.0 -10.2 7.6050 0.4328 1.4975 10.8162 + 657.464 0.017 0.001 90.0 -8.0 7.4230 0.4202 1.5095 10.9044 + + + + DELTA(1) MINIMUM + + + SQ.RES. A2 A4 ATAN(D1) ATAN(D2) KA(1) LL(1) KA(2) LL(2) + 1.732 0.017 0.000 -0.1 -3.5 44.8100 9.6156 1.5252 11.0196 + + DELTA(1)= -0.001 + 0.107 - 0.107 SIGMA= 2.732 SIGMA/DEGREE OF FREEDOM= 0.546 +1 206PO EC DECAY. 286-1032 CORR. WITH K AND L1/L2 CONVERSION DATA + + SPIN SEQUENCE 1+ ---> 2+ ---> 3+ + + KRANE-STEFFEN SIGN CONVENTION FOR MIXING RATIOS + + ATAN(DELTA1) NSQRES 0.1 0.2 0.5 1 2 5 10 20 50 100 + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + -90.00 131.493 + X * O + -86.00 130.714 + X * O + -82.00 128.428 + X * O + -78.00 124.701 + X * O + -74.00 119.647 + X * O + -70.00 113.417 + X * O + -66.00 106.186 + X * O + -62.00 98.142 + X * O + -58.00 89.479 + X * O + + -54.00 80.380 + X * O + + -50.00 71.016 + X * O + + -46.00 61.545 + X * O + + -42.00 52.111 + X * O + + -38.00 42.860 + X * O + + -34.00 33.958 + X * O + + -30.00 25.610 + X * O + + -26.00 18.078 + X * O + + -22.00 11.670 + X * O + + -18.00 6.706 + X * O + + -14.00 3.806 + X O* + + -10.00 1.304 + O X * + + -6.00 0.528 + O X * + + -2.00 0.356 + O X * + + 2.00 0.358 + O X * + + 6.00 0.537 + O X * + + 10.00 1.308 + O X * + + 14.00 3.216 + X O * + + 18.00 6.638 + X * O + + 22.00 11.645 + X * O + + 26.00 18.063 + X * O + + 30.00 25.597 + X * O + + 34.00 33.943 + X * O + + 38.00 42.840 + X * O + + 42.00 52.085 + X * O + + 46.00 61.513 + X * O + + 50.00 70.978 + X * O + + 54.00 80.336 + X * O + + 58.00 89.432 + X * O + + 62.00 98.094 + X * O + 66.00 106.139 + X * O + 70.00 113.374 + X * O + 74.00 119.607 + X * O + 78.00 124.665 + X * O + 82.00 129.868 + X * O + 86.00 130.773 + X * O + 90.00 131.493 + X * O + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + + DEGREES OF FREEDOM = 5 + X = 5 PERCENT LIMIT = 2.214 + * = 0.1 PERCENT LIMIT = 4.103 + +1 206PO EC DECAY. 286-1032 CORR. WITH K AND L1/L2 CONVERSION DATA + + SPIN SEQUENCE 1+ ---> 2+ ---> 3+ + + KRANE-STEFFEN SIGN CONVENTION FOR MIXING RATIOS + + STEPPING IN ATAN(DELTA2) + + + SQ.RES. A2 A4 ATAN(D1) ATAN(D2) KA(1) LL(1) KA(2) LL(2) + 357.837 0.019 0.002 -10.6 -90.0 43.5434 8.5935 0.5272 3.6714 + 353.499 0.019 0.002 -10.0 -86.0 43.6890 8.7026 0.5321 3.7075 + 341.849 0.020 0.001 -8.6 -82.0 43.9729 8.9212 0.5466 3.8150 + 323.088 0.018 0.000 -4.1 -78.0 44.6147 9.4466 0.5705 3.9917 + 319.806 -0.003 0.001 -8.8 -74.0 43.9340 8.8908 0.6033 4.2343 + 293.960 0.006 0.003 -13.8 -70.0 42.6682 7.9777 0.6444 4.5379 + 261.990 0.011 0.003 -13.9 -66.0 42.6537 7.9680 0.6929 4.8965 + 229.595 0.013 0.002 -13.7 -62.0 42.7249 8.0156 0.7480 5.3032 + 197.260 0.014 0.002 -13.5 -58.0 42.7801 8.0528 0.8085 5.7498 + 165.841 0.014 0.002 -13.3 -54.0 42.8175 8.0781 0.8733 6.2277 + 136.265 0.015 0.002 -13.3 -50.0 42.8419 8.0947 0.9411 6.7275 + 109.352 0.015 0.001 -13.2 -46.0 42.8565 8.1046 1.0106 7.2395 + 85.730 0.015 0.001 -13.2 -42.0 42.8632 8.1092 1.0805 7.7536 + 65.790 0.015 0.001 -13.2 -38.0 42.8629 8.1090 1.1493 8.2599 + 49.682 0.015 0.001 -13.2 -34.0 42.8556 8.1040 1.2157 8.7485 + 37.327 0.015 0.001 -13.3 -30.0 42.8403 8.0936 1.2786 9.2100 + 28.461 0.014 0.001 -13.4 -26.0 42.8150 8.0764 1.3365 9.6354 + 22.698 0.014 0.000 -13.5 -22.0 42.7763 8.0502 1.3884 10.0166 + 19.640 0.013 0.000 -13.7 -18.0 42.7197 8.0121 1.4333 10.3461 + 19.076 0.010 0.000 -13.9 -14.0 42.6495 7.9652 1.4704 10.6176 + 21.231 0.005 0.000 -13.7 -10.0 42.6990 7.9983 1.4988 10.8260 + 18.658 -0.003 0.000 -7.0 -6.0 44.2601 9.1508 1.5181 10.9672 + 2.353 0.019 0.000 -4.8 -2.0 44.5431 9.3857 1.5278 11.0385 + 5.124 0.020 0.000 -8.8 2.0 43.9378 8.8938 1.5278 11.0385 + 6.898 0.019 0.000 -10.0 6.0 43.6720 8.6897 1.5181 10.9672 + 8.273 0.019 0.000 -10.6 10.0 43.5340 8.5865 1.4988 10.8260 + 9.957 0.019 0.000 -11.0 14.0 43.4530 8.5268 1.4704 10.6176 + 12.599 0.018 0.000 -11.2 18.0 43.4012 8.4888 1.4333 10.3461 + 16.850 0.018 0.000 -11.3 22.0 43.3661 8.4633 1.3884 10.0166 + 23.352 0.018 0.000 -11.4 26.0 43.3414 8.4453 1.3365 9.6354 + 32.690 0.018 0.001 -11.5 30.0 43.3237 8.4325 1.2786 9.2100 + 45.340 0.018 0.001 -11.6 34.0 43.3109 8.4234 1.2157 8.7485 + 61.613 0.018 0.001 -11.6 38.0 43.3020 8.4169 1.1493 8.2599 + 81.608 0.018 0.001 -11.6 42.0 43.2961 8.4126 1.0805 7.7536 + 105.179 0.018 0.001 -11.6 46.0 43.2927 8.4102 1.0106 7.2395 + 131.924 0.018 0.001 -11.6 50.0 43.2917 8.4095 0.9411 6.7275 + 161.181 0.018 0.001 -11.6 54.0 43.2929 8.4104 0.8733 6.2277 + 192.061 0.018 0.002 -11.6 58.0 43.2965 8.4129 0.8085 5.7498 + 223.479 0.018 0.002 -11.6 62.0 43.3027 8.4174 0.7480 5.3032 + 254.222 0.018 0.002 -11.5 66.0 43.3119 8.4240 0.6929 4.8965 + 283.012 0.018 0.002 -11.5 70.0 43.3250 8.4335 0.6444 4.5379 + 308.583 0.018 0.002 -11.4 74.0 43.3432 8.4467 0.6033 4.2343 + 329.759 0.018 0.002 -11.3 78.0 43.3687 8.4652 0.5705 3.9917 + 345.521 0.018 0.002 -11.2 82.0 43.4050 8.4916 0.5466 3.8150 + 355.067 0.019 0.002 -11.0 86.0 43.4588 8.5310 0.5321 3.7075 + 357.837 0.019 0.002 -10.6 90.0 43.5434 8.5935 0.5272 3.6714 + + + + DELTA(2) MINIMUM + + + SQ.RES. A2 A4 ATAN(D1) ATAN(D2) KA(1) LL(1) KA(2) LL(2) + 18.978 0.011 0.000 -13.8 -15.2 42.6695 7.9785 1.4604 10.5445 + + DELTA(2)= -0.271 + 0.762 - 0.149 SIGMA= 23.647 SIGMA/DEGREE OF FREEDOM= 4.729 +1 206PO EC DECAY. 286-1032 CORR. WITH K AND L1/L2 CONVERSION DATA + + SPIN SEQUENCE 1+ ---> 2+ ---> 3+ + + KRANE-STEFFEN SIGN CONVENTION FOR MIXING RATIOS + + ATAN(DELTA2) NSQRES 0.1 0.2 0.5 1 2 5 10 20 50 100 + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + -90.00 71.567 + X * O + + -86.00 70.700 + X * O + + -82.00 68.370 + X * O + + -78.00 64.618 + X * O + + -74.00 63.961 + X * O + + -70.00 58.792 + X * O + + -66.00 52.398 + X * O + + -62.00 45.919 + X * O + + -58.00 39.452 + X * O + + -54.00 33.168 + X * O + + -50.00 27.253 + X * O + + -46.00 21.870 + X * O + + -42.00 17.146 + X * O + + -38.00 13.158 + X * O + + -34.00 9.936 + X * O + + -30.00 7.465 + X * O + + -26.00 5.692 + X * O + + -22.00 4.540 + X * O + + -18.00 3.928 + X O + + -14.00 3.815 + X O* + + -10.00 4.246 + X *O + + -6.00 3.732 + X O* + + -2.00 0.471 + O X * + + 2.00 1.025 + O X * + + 6.00 1.380 + O X * + + 10.00 1.655 + O X * + + 14.00 1.991 + O X * + + 18.00 2.520 + X O * + + 22.00 3.370 + X O * + + 26.00 4.670 + X * O + + 30.00 6.538 + X * O + + 34.00 9.068 + X * O + + 38.00 12.323 + X * O + + 42.00 16.322 + X * O + + 46.00 21.036 + X * O + + 50.00 26.385 + X * O + + 54.00 32.236 + X * O + + 58.00 38.412 + X * O + + 62.00 44.696 + X * O + + 66.00 50.844 + X * O + + 70.00 56.602 + X * O + + 74.00 61.717 + X * O + + 78.00 65.952 + X * O + + 82.00 69.104 + X * O + + 86.00 71.013 + X * O + + 90.00 71.567 + X * O + + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + + DEGREES OF FREEDOM = 5 + X = 5 PERCENT LIMIT = 2.214 + * = 0.1 PERCENT LIMIT = 4.103 + + + + + + +++++++ END OF ANALYSIS FOR THIS SPIN COMBINATION +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + * OU-DATA 0.0000 + + * UN-DATA 1.0000 + + * GO-DATA 13.0000 10.0000 9.0000 9.0000 9.0000 7.0000 +1 206PO EC DECAY. 286-1032 CORR. WITH K AND L1/L2 CONVERSION DATA + + SPIN SEQUENCE 13+ ---> 10+ ---> 9+ ---> 9+ ---> 9+ ---> 7+ + + UNOBSERVED TRANSITIONS: + 10+ ---> 9+ DELTA= 1.000 + 9+ ---> 9+ DELTA= 0.000 + 9+ ---> 9+ DELTA= 0.000 + + KRANE-STEFFEN SIGN CONVENTION FOR MIXING RATIOS + + + + + + ******* DUMP FOLLOWS ******* + + HEADER= 206PO EC DECAY. 286-1032 CORR. WITH K AND L1/L2 CONVERSION DATA + + + NUMBER OF LEVELS= 6, ODD= F + 2J AND PI FOLLOW + 26 1. + 20 1. + 18 1. + 18 1. + 18 1. + 14 1. + + NUMBER OF DATA ITEMS= 8 + A2 0.0170 0.0050 0.0112 T 0 0.0000 0.0000 0.0000 0.0000 F + + A4 0.0080 0.0120 0.0002 T 0 0.0000 0.0000 0.0000 0.0000 F + + D 0.0000 0.0000 -13.8439 F 1 0.0000 0.0000 0.0000 0.0000 F + + D 0.0000 0.0000 -15.1706 F 2 0.0000 0.0000 0.0000 0.0000 F + + KA 46.4000 2.2000 42.6695 T 1 44.8100 7.4230 1.0000 1.0000 F + + LL 9.6700 0.5000 7.9785 T 1 6.9800 1.0880 0.7259 2.5890 T + + KA 1.6000 0.0900 1.4604 T 2 1.5290 0.5272 1.0000 1.0000 F + + LL 10.9000 0.5000 10.5445 T 2 0.2331 0.0771 0.0211 0.0210 T + + + ATAN(DELTA1) VARIATIONS= -90.00 90.00 4.00 PURE= F + MULTIPOLARITIES= M3 AND E4 + + ATAN(DELTA2) VARIATIONS= -90.00 90.00 4.00 PURE= F + MULTIPOLARITIES= E2 AND M3 + + ANGULAR CORRELATION COEFFICIENTS + RK + -0.4844 -0.4440 0.0299 0.0281 0.3867 -0.2921 + -0.3742 0.5858 -0.1965 -0.1620 -0.6340 -0.1031 + UK + 0.9551 0.8539 + 0.9667 0.8889 + 0.9667 0.8889 + 0.8925 0.6747 + + + DUMP, NFREE, SHORT= T 5 T + ALIM= -90.000 -90.000 90.000 90.000 + + DELTAS OF UNOBSERVED GAMMAS 1 1.000 0.000 0.000 + + NUMB= 46 + QSQ= +0.3578E+030.3535E+030.3418E+030.3231E+030.3198E+030.2940E+030.2620E+030.2296E+030.1973E+030.1658E+03 +0.1363E+030.1094E+030.8573E+020.6579E+020.4968E+020.3733E+020.2846E+020.2270E+020.1964E+020.1908E+02 +0.2123E+020.1866E+020.2353E+010.5124E+010.6898E+010.8273E+010.9957E+010.1260E+020.1685E+020.2335E+02 +0.3269E+020.4534E+020.6161E+020.8161E+020.1052E+030.1319E+030.1612E+030.1921E+030.2235E+030.2542E+03 +0.2830E+030.3086E+030.3298E+030.3455E+030.3551E+030.3578E+03 + + FA= +0.1000E+010.1000E+010.1000E+010.1000E+010.2000E+010.2000E+010.6000E+010.6000E+010.2400E+020.2400E+02 +0.1200E+030.1200E+030.7200E+030.7200E+030.5040E+040.5040E+040.4032E+050.4032E+050.3629E+060.3629E+06 +0.3629E+070.3629E+070.3992E+080.3992E+080.4790E+090.4790E+090.6227E+100.6227E+100.8718E+110.8718E+11 +0.1308E+130.1308E+130.2092E+140.2092E+140.3557E+150.3557E+150.6402E+160.6402E+160.1216E+180.1216E+18 +0.2433E+190.2433E+190.5109E+200.5109E+200.1124E+220.1124E+220.2585E+230.2585E+230.6204E+240.6204E+24 +0.1551E+260.1551E+260.4033E+270.4033E+270.1089E+290.1089E+290.3049E+300.3049E+300.8842E+310.8842E+31 +0.2653E+330.2653E+330.8223E+340.8223E+340.2631E+360.2631E+360.8683E+370.8683E+370.2952E+390.2952E+39 +0.1033E+410.1033E+410.3720E+420.3720E+420.1376E+440.1376E+440.5230E+450.5230E+450.2040E+470.2040E+47 +0.8159E+480.8159E+480.3345E+500.3345E+500.1405E+520.1405E+520.6042E+530.6042E+530.2658E+550.2658E+55 +0.1196E+570.1196E+570.5503E+580.5503E+580.2586E+600.2586E+600.1241E+620.1241E+620.6083E+630.6083E+63 +0.3041E+650.3041E+650.1551E+670.1551E+670.8066E+680.8066E+680.4275E+700.4275E+700.2308E+720.2308E+72 +0.1270E+740.1270E+740.7110E+750.7110E+75 + + CARD= GO 13 10 9 9 9 7 $TEST HIGH SPINS + + ******* DUMP ENDS ******* + + + +++++++ DATA +++++++ + A2 = 0.017+- 0.005 + A4 = 0.008+- 0.012 + KA = 46.4000+- 2.2000 FOR TRANSITION 1. THEORETICAL VALUES= 44.8100 FOR M3 AND 7.4230 FOR E4 + LL = 9.6700+- 0.5000 FOR TRANSITION 1. THEORETICAL VALUES= 6.9800 FOR M3 AND 1.0880 FOR E4 + * RATIO * OTHER SHELL: 0.7259 FOR M3 AND 2.5890 FOR E4 + KA = 1.6000+- 0.0900 FOR TRANSITION 2. THEORETICAL VALUES= 1.5290 FOR E2 AND 0.5272 FOR M3 + LL = 10.9000+- 0.5000 FOR TRANSITION 2. THEORETICAL VALUES= 0.2331 FOR E2 AND 0.0771 FOR M3 + * RATIO * OTHER SHELL: 0.0211 FOR E2 AND 0.0210 FOR M3 + + ATAN(D1) VARIED FROM -90.0 TO 90.0 IN STEPS OF 4.0 DEGREES + + ATAN(D2) VARIED FROM -90.0 TO 90.0 IN STEPS OF 4.0 DEGREES + + + + DELTA(1) MINIMUM + + + SQ.RES. A2 A4 ATAN(D1) ATAN(D2) KA(1) LL(1) KA(2) LL(2) + 4.243 0.018 0.006 -3.3 -16.2 44.6843 9.5063 1.4506 10.4730 + + DELTA(1)= -0.058 + 0.041 - 0.041 SIGMA= 5.287 SIGMA/DEGREE OF FREEDOM= 1.057 + + + ATAN(DELTA1) NSQRES 0.1 0.2 0.5 1 2 5 10 20 50 100 + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + -90.00 137.970 + X * O + -86.00 146.492 + X * O + -82.00 151.873 + X * O + -78.00 154.884 + X * O + -74.00 155.818 + X * O + -70.00 154.673 + X * O + -66.00 151.387 + X * O + -62.00 145.918 + X * O + -58.00 138.280 + X * O + -54.00 128.545 + X * O + -50.00 116.840 + X * O + -46.00 103.321 + X * O + -42.00 88.117 + X * O + + -38.00 71.214 + X * O + + -34.00 52.357 + X * O + + -30.00 32.203 + X * O + + -26.00 17.985 + X * O + + -22.00 14.456 + X * O + + -18.00 10.856 + X * O + + -14.00 6.252 + X * O + + -10.00 2.810 + X O * + + -6.00 1.114 + O X * + + -2.00 0.926 + O X * + + 2.00 1.851 + O X * + + 6.00 3.756 + X O* + + 10.00 6.829 + X * O + + 14.00 11.347 + X * O + + 18.00 17.396 + X * O + + 22.00 24.767 + X * O + + 26.00 33.040 + X * O + + 30.00 41.732 + X * O + + 34.00 50.422 + X * O + + 38.00 58.817 + X * O + + 42.00 66.762 + X * O + + 46.00 74.224 + X * O + + 50.00 81.258 + X * O + + 54.00 87.972 + X * O + + 58.00 94.492 + X * O+ + 62.00 100.933 + X * O + 66.00 107.367 + X * O + 70.00 113.792 + X * O + 74.00 120.073 + X * O + 78.00 125.782 + X * O + 82.00 129.654 + X * O + 86.00 130.656 + X * O + 90.00 137.967 + X * O + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + + DEGREES OF FREEDOM = 5 + X = 5 PERCENT LIMIT = 2.214 + * = 0.1 PERCENT LIMIT = 4.103 + + + + + DELTA(2) MINIMUM + + + SQ.RES. A2 A4 ATAN(D1) ATAN(D2) KA(1) LL(1) KA(2) LL(2) + 4.272 0.019 0.007 -3.5 -16.0 44.6745 9.4979 1.4525 10.4863 + + DELTA(2)=-0.288E+00 +0.371E+00 -0.100E+04 SIGMA= 5.323 SIGMA/DEGREE OF FREEDOM= 1.065 + + + ATAN(DELTA2) NSQRES 0.1 0.2 0.5 1 2 5 10 20 50 100 + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + -90.00 77.860 + X * O + + -86.00 72.614 + X * O + + -82.00 67.769 + X * O + + -78.00 71.260 + X * O + + -74.00 77.777 + X * O + + -70.00 82.286 + X * O + + -66.00 84.538 + X * O + + -62.00 85.019 + X * O + + -58.00 84.055 + X * O + + -54.00 81.782 + X * O + + -50.00 78.242 + X * O + + -46.00 73.426 + X * O + + -42.00 67.294 + X * O + + -38.00 59.770 + X * O + + -34.00 50.706 + X * O + + -30.00 39.868 + X * O + + -26.00 27.079 + X * O + + -22.00 13.061 + X * O + + -18.00 2.225 + O * + + -14.00 2.351 + XO * + + -10.00 8.145 + X * O + + -6.00 12.362 + X * O + + -2.00 14.274 + X * O + + 2.00 15.167 + X * O + + 6.00 16.089 + X * O + + 10.00 17.605 + X * O + + 14.00 19.951 + X * O + + 18.00 23.174 + X * O + + 22.00 27.203 + X * O + + 26.00 31.900 + X * O + + 30.00 37.080 + X * O + + 34.00 42.544 + X * O + + 38.00 48.089 + X * O + + 42.00 53.527 + X * O + + 46.00 58.694 + X * O + + 50.00 63.459 + X * O + + 54.00 67.732 + X * O + + 58.00 71.457 + X * O + + 62.00 74.614 + X * O + + 66.00 77.205 + X * O + + 70.00 79.246 + X * O + + 74.00 80.738 + X * O + + 78.00 81.634 + X * O + + 82.00 81.767 + X * O + + 86.00 80.746 + X * O + + 90.00 77.861 + X * O + + +----------+------------+----------+----------+------------+----------+----------+------------+----------+ + + DEGREES OF FREEDOM = 5 + X = 5 PERCENT LIMIT = 2.214 + * = 0.1 PERCENT LIMIT = 4.103 + + + + + + +++++++ END OF ANALYSIS FOR THIS SPIN COMBINATION +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + HEADER: THE FOLLOWING DATA CARD CAUSES AN ERROR + + * GO-DATA 1.5000 2.0000 3.0000 4.0000 5.0000 6.0000 + + + + ***** SERIOUS ERROR IN ROUTINE MAIN ***** + STATEMENT NUMBER IS: 116 + MESSAGE IS: MIXED INTEGER/HALF INTEGER SPINS + LAST CARD READ IS: + 12345678901234567890123456789012345678901234567890123456789012345678901234567890 + GO 1.5 2 3 4 5 6 $MIXED HALF_INTEGER AND INTEGER SPIN!!! + + + + + + ******* DUMP FOLLOWS ******* + + HEADER= THE FOLLOWING DATA CARD CAUSES AN ERROR + + + NUMBER OF LEVELS= 6, ODD= T + 2J AND PI FOLLOW + 3 1. + 4 1. + 6 1. + 8 1. + 10 1. + 12 1. + + NUMBER OF DATA ITEMS= 8 + A2 0.0170 0.0050 0.0189 T 0 0.0000 0.0000 0.0000 0.0000 F + + A4 0.0080 0.0120 0.0065 T 0 0.0000 0.0000 0.0000 0.0000 F + + D 0.0000 0.0000 -3.4508 F 1 0.0000 0.0000 0.0000 0.0000 F + + D 0.0000 0.0000 -16.0461 F 2 0.0000 0.0000 0.0000 0.0000 F + + KA 46.4000 2.2000 44.6745 T 1 44.8100 7.4230 1.0000 1.0000 F + + LL 9.6700 0.5000 9.4979 T 1 6.9800 1.0880 0.7259 2.5890 T + + KA 1.6000 0.0900 1.4525 T 2 1.5290 0.5272 1.0000 1.0000 F + + LL 10.9000 0.5000 10.4863 T 2 0.2331 0.0771 0.0211 0.0210 T + + + ATAN(DELTA1) VARIATIONS= -90.00 90.00 4.00 PURE= F + MULTIPOLARITIES= M3 AND E4 + + ATAN(DELTA2) VARIATIONS= -90.00 90.00 4.00 PURE= F + MULTIPOLARITIES= E2 AND M3 + + ANGULAR CORRELATION COEFFICIENTS + RK + -0.4844 -0.4440 0.0299 0.0281 0.3867 -0.2921 + -0.3742 0.5858 -0.1965 -0.1620 -0.6340 -0.1031 + UK + 0.9551 0.8539 + 0.9667 0.8889 + 0.9667 0.8889 + 0.8925 0.6747 + + + DUMP, NFREE, SHORT= T 5 T + ALIM= -90.000 -90.000 90.000 90.000 + + DELTAS OF UNOBSERVED GAMMAS 1 1.000 0.000 0.000 + + NUMB= 46 + QSQ= +0.3893E+030.3631E+030.3388E+030.3563E+030.3889E+030.4114E+030.4227E+030.4251E+030.4203E+030.4089E+03 +0.3912E+030.3671E+030.3365E+030.2988E+030.2535E+030.1993E+030.1354E+030.6531E+020.1112E+020.1175E+02 +0.4072E+020.6181E+020.7137E+020.7584E+020.8044E+020.8803E+020.9976E+020.1159E+030.1360E+030.1595E+03 +0.1854E+030.2127E+030.2404E+030.2676E+030.2935E+030.3173E+030.3387E+030.3573E+030.3731E+030.3860E+03 +0.3962E+030.4037E+030.4082E+030.4088E+030.4037E+030.3893E+03 + + FA= +0.1000E+010.1000E+010.1000E+010.1000E+010.2000E+010.2000E+010.6000E+010.6000E+010.2400E+020.2400E+02 +0.1200E+030.1200E+030.7200E+030.7200E+030.5040E+040.5040E+040.4032E+050.4032E+050.3629E+060.3629E+06 +0.3629E+070.3629E+070.3992E+080.3992E+080.4790E+090.4790E+090.6227E+100.6227E+100.8718E+110.8718E+11 +0.1308E+130.1308E+130.2092E+140.2092E+140.3557E+150.3557E+150.6402E+160.6402E+160.1216E+180.1216E+18 +0.2433E+190.2433E+190.5109E+200.5109E+200.1124E+220.1124E+220.2585E+230.2585E+230.6204E+240.6204E+24 +0.1551E+260.1551E+260.4033E+270.4033E+270.1089E+290.1089E+290.3049E+300.3049E+300.8842E+310.8842E+31 +0.2653E+330.2653E+330.8223E+340.8223E+340.2631E+360.2631E+360.8683E+370.8683E+370.2952E+390.2952E+39 +0.1033E+410.1033E+410.3720E+420.3720E+420.1376E+440.1376E+440.5230E+450.5230E+450.2040E+470.2040E+47 +0.8159E+480.8159E+480.3345E+500.3345E+500.1405E+520.1405E+520.6042E+530.6042E+530.2658E+550.2658E+55 +0.1196E+570.1196E+570.5503E+580.5503E+580.2586E+600.2586E+600.1241E+620.1241E+620.6083E+630.6083E+63 +0.3041E+650.3041E+650.1551E+670.1551E+670.8066E+680.8066E+680.4275E+700.4275E+700.2308E+720.2308E+72 +0.1270E+740.1270E+740.7110E+750.7110E+75 + + CARD= GO 1.5 2 3 4 5 6 $MIXED HALF_INTEGER AND INTEGER SPIN!!! + + ******* DUMP ENDS ******* diff --git a/tests/ensdf_processing/delta/ref_inp.dat b/tests/ensdf_processing/delta/ref_inp.dat new file mode 100644 index 0000000000..3f4930333c --- /dev/null +++ b/tests/ensdf_processing/delta/ref_inp.dat @@ -0,0 +1,27 @@ +HE 59FE B- DECAY. 142-192 CORR. WITH DELTA DATA FROM OTHER CORR. +A2 -0.28 0.04 $MEASURED A2 COEFFICIENT +D 1 -0.005 0.020 $DELTA1 FROM 142-1292 CORRELATION +D 2 0.220 0.019 $DELTA2 FROM 192-1099 CORRELATION (FIRST SOLUTION) +ST 3 3 $STEP SIZE 3 DEGREES +LI -12 12 -90 90 $LIMIT ATAN(DELTA1) TO -12 TO 12 DEGREES +GO -0.5 -1.5 -1.5 $ANALYZE SPIN SEQUENCE 1/2- TO 3/2- TO 3/2- +D 2 -28 10 $DELTA2 FROM 192-1099 CORRELATION (SECOND SOLUTION) +GO -0.5 -1.5 -1.5 $ANALYSE SPIN SEQUENCE 1/2- TO 3/2- TO 3/2- +CL $CLEAR DATA +HE 206PO EC DECAY. 286-1032 CORR. WITH K AND L1/L2 CONVERSION DATA +A2 0.017 0.005 +A4 0.008 0.012 +KA 1 46.4 2.2 44.81 7.423 $CONV.COEFF.'S RENORMALIZED! +LL 1 9.67 0.50 6.98 1.088 0.7259 2.589 +KA 2 1.60 0.09 1.529 0.5272 +LL 2 10.9 0.5 0.2331 0.0771 0.0211 0.0210 +ST 4 4 +OU 1 $FULL OUTPUT +GO 1 2 3 $ANALYSE SPIN SEQUENCE 1+ TO 2+ TO 3+ +OU 0 $SHORT OUTPUT +DU $DUMP ON +UN 1.0 $UNOBSERVED TRANSITIONS: DELTA=1.0, 0.0, 0.0 +GO 13 10 9 9 9 7 $TEST HIGH SPINS +HE THE FOLLOWING DATA CARD CAUSES AN ERROR +GO 1.5 2 3 4 5 6 $MIXED HALF_INTEGER AND INTEGER SPIN!!! +EN diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index c7025dc9cb..43c6345aa2 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -18,6 +18,18 @@ def test_alphad(): file_comp(input_dict['report_file'],'ensdf_processing/alphad/ref_a228.ens.alphad.rpt', exceptions) cleanup_tmp() +def test_delta(): + create_tmp() + input_dict = {} + input_dict['input_file'] = 'ensdf_processing/delta/ref_inp.dat' + input_dict['output_file'] = tmp_path + '/tmp_delta.dat' + output_dict = ensdf_processing.delta(input_dict) + # exceptions contain lines in the ouptut that can have a tolerable precision difference + exceptions = [[3, 82], [3, 89], [3, 119], [3, 202], [3, 209], [3, 213],[3, 217],[3, 229], \ + [3, 232], [3, 236], [3, 243], [3, 318], [3, 355], [3, 458]] + d_ouptut = file_comp(input_dict['output_file'],'ensdf_processing/delta/ref_delta.rpt', exceptions) + cleanup_tmp() + # Tests gabs output for 80Br sample input. Date and file names are expected to be different # in the test output and reference file sets. def test_gabs(): @@ -97,4 +109,4 @@ def file_comp(file_out, file_ref, exceptions): if __name__ == "__main__": alphad = test_alphad() gabs = test_gabs() - + delta = test_delta() From ac724ea0c35ef0e4f1d80b6b660bba9ae64ecc3b Mon Sep 17 00:00:00 2001 From: josh Date: Tue, 19 Jan 2016 14:52:12 -0800 Subject: [PATCH 091/216] Added ensdf_processing/gtol tool --- pyne/ensdf_processing.py | 45 + setup.py | 3 + src/CMakeLists.txt | 2 + src/ensdf_processing/GTOL/gtol.f | 4813 ++++++++++++++++++++++ tests/ensdf_processing/gtol/ref_gtol.inp | 3007 ++++++++++++++ tests/ensdf_processing/gtol/ref_gtol.rpt | 1945 +++++++++ tests/test_ensdf_processing.py | 17 + 7 files changed, 9832 insertions(+) create mode 100644 src/ensdf_processing/GTOL/gtol.f create mode 100644 tests/ensdf_processing/gtol/ref_gtol.inp create mode 100644 tests/ensdf_processing/gtol/ref_gtol.rpt diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index e35581e2c1..13faa407ba 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -128,3 +128,48 @@ def gabs(inputdict_unchecked): proc.communicate()[0] proc.stdin.close() +def gtol(inputdict_unchecked): + """ + This function ... + + Input Dictionary Required Key Pair Value: + input_file : input ensdf file. + report_file : desired gtol report file path. + new_ensdf_file_with_results : boolean, if true then a new ensdf file with results + will be created. + output_file : desired gtol output file path. + supress_gamma_comparison : boolean, if true the gamma comparison will be suppressed. + dcc_theory_percent : double, specifies the dcc theory percentage to be used. + + + Output Dictionary Values: + Everything in input dictionary is returned if GTOL completes successfully. + """ + inputdict = {} + input_file = inputdict_unchecked['input_file'] + report_file = inputdict_unchecked['report_file'] + new_out = inputdict_unchecked['new_ensdf_file_with_results'] + output_file = inputdict_unchecked['output_file'] #output file if report = yes + supress_g = inputdict_unchecked['supress_gamma_comparison'] + supress_ic = inputdict_unchecked['supress_intensity_comparison'] + dcc_theory = inputdict_unchecked['dcc_theory_percent'] + + exe_path = path_to_exe('gtol') + proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + inp = input_file + '\n' + report_file + '\n' + if (new_out): + inp = inp + 'Y' + '\n' + output_file + '\n' + else: + inp = inp + 'N' + '\n' + if (supress_g): + inp = inp + 'Y' + '\n' + else: + inp = inp + 'N' + '\n' + if(supress_ic): + inp = inp + 'Y' + '\n' + else: + inp = inp + 'N' + '\n' + `dcc_theory` + '\n' + proc.stdin.write(inp.encode('utf-8')) + proc.communicate()[0] + proc.stdin.close() + return inputdict_unchecked \ No newline at end of file diff --git a/setup.py b/setup.py index c0cb09b477..5d9a0373a6 100755 --- a/setup.py +++ b/setup.py @@ -178,6 +178,7 @@ def download_decay(): ALPHAD_H = os.path.join('build', 'src/alphad') DELTA_H = os.path.join('build', 'src/delta') +GTOL_H = os.path.join('build', 'src/gtol') def copy_ensdf_executables(exe_dest): print('Copying ENSDF Executables to install directory') @@ -191,9 +192,11 @@ def copy_ensdf_executables(exe_dest): exe_dest = exe_dest + '/pyne' ALPHAD_DEST = os.path.join(exe_dest, 'alphad') DELTA_DEST = os.path.join(exe_dest, 'delta') + GTOL_DEST = os.path.join(exe_dest, 'gtol') try: shutil.copy(ALPHAD_H, ALPHAD_DEST) shutil.copy(DELTA_H, DELTA_DEST) + shutil.copy(GTOL_H, GTOL_DEST) except Exception: print('Some ENSDF processing executables were unable to be copied to the \ install directory.') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cac020c99a..99a4a76678 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -105,6 +105,8 @@ set_source_files_properties(decay.cpp PROPERTIES COMPILE_FLAGS add_executable(alphad ${PROJECT_SOURCE_DIR}/src/ensdf_processing/ALPHAD/alphad.f ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f) add_executable(delta ${PROJECT_SOURCE_DIR}/src/ensdf_processing/DELTA/delta.for) +add_executable(gtol ${PROJECT_SOURCE_DIR}/src/ensdf_processing/GTOL/gtol.f + ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f) # Print include dir get_property(inc_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES) diff --git a/src/ensdf_processing/GTOL/gtol.f b/src/ensdf_processing/GTOL/gtol.f new file mode 100644 index 0000000000..d577eba7f9 --- /dev/null +++ b/src/ensdf_processing/GTOL/gtol.f @@ -0,0 +1,4813 @@ +! +!********************************************************************** +!* +!* PROGRAM GTOL +!* +!* Version 7(0): February 18, 2004 C.L.Dunford +!* Converted to Fortran 95 +!* Command line input added +!* Version 7.1: October 6, 2005 Thomas W. Burrows +!* 1. Incorporated PNPI F77 versions 6.4c and 6.4d +!* a. Additional output after matrix inversion +!* comparing the level energies and transition +!* energies including Chi**2. These were moved +!* to separate subroutines and are only output +!* if matrix inversion is successful +!* b. Converted to double precision +!* 2. Added check against Chi**2 (critical) and output +!* warning to terminal and report file if deviant +!* Version 7.1a October 17, 2005 Thomas W. Burrows +!* 1. Corrected problem in comparing transition energies +!* when gamma could not be placed within +-10 keV +!* 2. Added summary of gammas which could not be placed +!* within +-10 keV to terminal output +!* Version 7.2 November 14, 2005 Thomas W. Burrows +!* 1. Changed logic for processing FL=? so that RI and +!* TI would be included in RI(OUT) and TI(OUT) +!* 2. Added query to allow user to specify theoretical +!* DCC to be assumed (HSICC, BrIcc, or Other) +!* 3. Attempted to check metastable state continuation +!* records to see if there is no IT decay. If so, +!* GTOL assumes level is fixed and adds the uncertainty +!* of the state in quadrature with that derived from +!* the least-squares adjustment +!* 4. Added option to place "G" in level energy field. +!* Similar to "F" option but uncertainty will be added +!* in quadrature with that derived from the least-squares +!* adjustment +!* 5. Added check for two gammas from same parent to same +!* daughter +!* 6. Attempted to make the level and transition energy +!* tables more readable +!* 7. If Chi**2 (critical) test fails, give a short summary +!* of the most discrepant gammas. +!* 8. Corrected logic errors in converting ranges to values +!* and uncertainties for GAMMA continuation records +!* 9. Corrected some field width overflow problems in +!* intensity comparison +!* 10. Restored ANS MDC for opening output files +!* Version 7.2a November 17, 2005 Thomas W. Burrows +!* Corrected conflict in type for dummy real variable in +!* calls to RLSCN in subroutine READIN +!* Version 7.2b January 20, 2006 Thomas W. Burrows +!* 1. Corrected formula for chi**2 critical for N>30 +!* 2. Output to report degrees of freedom if chi**2 test +!* fails +!* 3. Some cleanup of terminal output +!* Version 7.2c May 15, 2006 Thomas W. Burrows +!* 1. Reworked logic so matrix would be recalculated if "FL=" +!* gamma had not been placed within +-10 keV +!* 2. Used data created by Tibor Kibedi to extended critical +!* Chi**2 DATA statement from 30 to 200 +!* 3. Added check when adjusting energies for fixed daughter +!* level uncertainties so that fixed levels would not be +!* adjusted +!* Version 7.2d November 1, 2006 Thomas W. Burrows +!* 1. Added check for existence of %IT when checking decay +!* modes. If found, level will not be held fixed even if +!* if total of other modes is gerater tnan 99.95% +!* 2. Added checks for other types of decay (e.g., %N or %P) +!* 3. Corrected bug apparently introduced in 7.2 when attempt +!* was made to process FL=? so that RI and TI would be +!* included in RI(OUT) and TI(OUT) +!* 4. Corrected bug apparently introduced in 7.2 when +!* the "G" option was introduced +!* Version 7.2e June 1, 2007 Thomas W. Burrows +!* 1. Added check on unrealistical large diagonal matrix +!* elements to handle differences between LF95 and DVF +!* 2. Added check for level energies such as "EN+X" and +!* ignore deexciting gammas +!* 3. Changed default ICC's from HSICC to BrIcc +!* 4. Fixed suprious error message when End of File followed +!* an END record +!* Version 7.2f February 9, 2009 PNPI Group, Russia +!* Chnages by PNPI Group **PNPI** +!* Version 7.2g April 30, 2010 by Tibor Kibedi **TK** +!* 1. Added initialization of NOFf in the main program +!* 2. Changed single precision dummy arguments to double +!* precision ones in Dcnvus subroutine calls. +!* Version 7.2h May 24, 2013 by Jagdish Tuli **JKT** +!* Incorrect DTI value when FL specified. Removed +!* sqrt construct. +!* +!* +!* Requires NNDCLIB (NSDFLIB) subroutine library +!* +!* PRIOR VERSIONS +!* +!* VERSION 5(0): FORTRAN77 Version August, 1983, LPE, Lund, Sweden. +!* Based on VERSION 4(15) as of 6-Jan-82. +!* MAIN CHANGES: +!* 1) FORTRAN 77 using STR77 Library. +!* 2) Number of levels, gammas, fixed levels as +!* parameters. +!* 3) Some unused options removed. +!* 4) Some options added. +!* VERSION 5(1): February 1986 +!* MAIN CHANGES: +!* 1) Localized program to improve paging rate on +!* TOPS-10. +!* 2) Changed terminal dialog. +!* 3) Size of output reduced. +!* 4) Option to create a new file with calculated +!* level energies included. +!* 5) Check of GAMMA continuation record for final +!* level (FL=) formalism and other quantities +!* which may affect the calculations. +!* 6) Ignores data sets whose DSID's indicate that +!* there are no gammas present. +!* KNOWN PROBLEMS (Common to all versions): +!* 1) Field width overflows when there are very +!* precise gamma energies. +!* 2) Matrix inversion sometimes unstable when there +!* is only one transition to or one transition +!* from a level. +!* VERSION 5(2): June 1986 +!* MAJOR CHANGES: +!* 1) Converted from Swedish STR77 library to NNDC +!* to NNDC F77STR and NSDCNV libraries +!* VERSION 5(3): 8-Aug-1986 Add VAX MDC +!* VERSION 5(4): 11-Dec-1986 Add IbmPC MDC +!* VERSION 5(5): 4-Sep-1987 +!* 1) Corrected logic causing floating-point overflow +!* in subroutine MINV. +!* 2) Corrected minor parsing problems in subroutine +!* GA2DEC. Also rewrote this subroutine to reduce +!* redundant coding using modules from RADLST and +!* the new subroutines CHNGS1 and CHNGS2. +!* 3) Corrected field-width overflow problems by +!* increasing associated string lengths and +!* format statements from 8 to 10 (Maximum size +!* of energy fields in ENSDF). Since this +!* increased the size of the output, added checks +!* to not list blank lines when there are no old +!* gamma energies to be compared to. +!* 4) Removed output of "F" for level energies. +!* 5) Brought modules associated with these +!* corrections more up to current F77 standards +!* and philosophy. +!* VERSION 5(6): 2-Nov-87 +!* VAX mdc OPEN READONLY added for input dataset +!* file +!* VERSION 5(7): 30-Aug-89 +!* 1) Added checks for +!* a) Number of levels exceeding number of +!* gammas plus fixed levels +!* b) Matrix being singular +!* In both of these cases it will list connected +!* but not fixed levels which either have +!* a) No gammas feeding them +!* b) No gammas deexciting them +!* since this seems to be the most common cause +!* of the problem +!* 2) General cleanup of code +!* 3) Added logic to reduce extraneous calculations a +!* output +!* 4) Restored lost coding to remove output of "F" fo +!* level energies and to output a "D L" record for +!* these levels +!* 5) Automatic suppression of intensity comparison +!* for ADOPTED LEVELS, GAMMAS dataset +!* VERSION 5(8): 12-SEP-89 +!* 1) Corrected logic error which caused (G,G') data +!* sets to be rejected +!* 2) Changed string lengths and output formats for +!* I/O files to reduce changes of truncation +!* VERSION 5(9): 12-JUN-90 +!* 1) Changed statement order(CHKALF),F format spec(I +!* etc for PC fortran +!* VERSION 5(10): 24-JUL-90 +!* 1) Corrected error in INTOUT which gave log of a +!* negative number +!* VERSION 5(11): 13-DEC-90 +!* 1) Corrected error in INTOUT which gave log of +!* zero +!* 2) Delinted using F-LINT 2.71 +!* VERSION 5(12): 15-Oct-92 Added Machine coding for ANS +!* VERSION 6.0: 7-Apr-93 Merged IBM PC test version of 28-Feb-91 +!* with distributed version 5(12) [15-Oct-92]. IBM PC +!* changes were: +!* 1) Reworked internal storage to fit into +!* limitations of real mode of MS/DOS. +!* a) Most argument passing to subprograms replace +!* by COMMONs. +!* b) Replaced WAA(NLE,NLE) by WAA(NSTORE) with +!* NSTORE=(NLE*NLE+NLE+1)/2 and added +!* bookkeeping function STRLOC +!* 2) Replaced general purpose matrix inversion +!* routine MATINV and MINV by a new MATINV which +!* uses a specific algorithm for symmetric +!* matrices. +!* 3) Added PCTIME and PCDATE routines for IBM PC +!* which access the MS FORTRAN routines GETTIM and +!* GETDATE +!* *** As a result of 1b) and 2) the code runs slower +!* however, for NLE=300 memory requirements were +!* reduced by about 658k. +!* Other changes: +!* 1) Added overlay module indicators for use in +!* separating source code for compilation and +!* linking on IBM PC +!* 2) Added check on diagonal matrix elements after +!* inversion - If any negative values, no +!* least-squares adjustment +!* 3) Added check on E(level) after matrix +!* multiplication - If any negative values, level +!* processing terminated +!* 4) Removed redundant output of fixed levels list +!* 5) Replaced numeric comparison for FL= with +!* string comparison and corrected minor logic +!* errors +!* 6) Added bookkeeping on how the level was fixed +!* 7) Always assume that the first level is fixed +!* 8) Added logic for non-numeric levels +!* 9) Update FL= when new file option specified +!* 10) Warn about levels being out of order in new +!* output +!* 11) Increased NFIX=NLE/2 to NFIX=NLE +!* 12) Reduced verbosity of report by only +!* putting out relevant input data (should also +!* reduce elapsed time due to I/O +!* 13) Corrected output field width overlow in +!* intensities +!* 14) Kept non-numeric uncertainties on feeding +!* radiations +!* 15) Hold levels of the form SP+x or SN+x fixed +!* and ignore deexciting gammas +!* 16) Correction of minor logic errors in calculating +!* total intensities +!* 17) If NB not given, assume 1.0/BR in agreement wit +!* other codes +!* 18) Accounted for 3% uncertainty in CC theory when +!* calculating TI +!* VERSION 6.1: 12-Jul-93 Corrected error in calculating net g.s. +!* feeding (100*BR+TNRF to 100+ TNRF) +!* VERSION 6.2: 26-Nov-93 +!* 1) Removed error introduced in version 6.1. +!* 2) Ignore gammas with non-numeric EG. +!* 3) Implemented Asilomar F and P recommendations to +!* allow specifications of DEG, DRI, and DTI when +!* not given. +!* 4) For DEG, DRI, or DTI of "AP", uncertainty set +!* to three times that for field. +!* 5) If "&", in column 77, RI=DRI=(RI+DRI)/2 and +!* TI=DTI=(TI+DTI)/2 assumed. +!* 6) If "LT" or "LE" in DRI or DTI field, +!* RI=DRI=RI/2 or TI=DTI=TI/2 assumed. +!* 7) Automatically remove previous GTOL-generated +!* "DL E" records. +!* Version 6.2a: 09-Apr-1999 +!* 1) Y2K compliance +!* 2) Increased ANSI FORTRAN 77 compliance +!* 3) Check for and skip Ionized Atom +!* 4) Properly recognize H record +!* Version 6.3: 23-May-2000 +!* 1) Implemented logic for FL=? +!* 2) Added estimates of upper limits of the +!* calculated net feeding using the methods of Lyon +!* 3) Corrected bug in subroutine CHGCRD +!* 4) Removed overlay logic +!* Version 6.3a: 08-Jan-2001 +!* Corrected logic errors in replacing "FL="'s +!* Version 6.4 01-Mar-2001 +!* Added MDC code for f77 on Linux +!* Version 6.4a 11-Jul-2001 +!* Corrected output overflows when adding new Comment +!* record for DEG, etc. +!* Version 6.4b 03-Dec-2003 +!* 1) Increased NLE from 300 to 1000 and NGA from +!* 3*NLE to 4*NLE. +!* 2) Left justify new level energies in output file. +!* 3) Corrected outout overflow problem in RADDEC. +!* 4) Corrected string range problem in IDDEC. +!* +!* REFER ALL COMMENTS AND INQUIRIES TO +!* NATIONAL NUCLEAR DATA CENTER +!* BUILDING 197D +!* BROOKHAVEN NATIONAL LABORATORY +!* UPTON, NEW YORK 11973 +!* TELEPHONE 631-344-2901 631-344-2901 COMM +!* +!********************************************************************** +! + PROGRAM GTOL +! + CHARACTER(LEN=*), PARAMETER :: version = 'GTOL Version 7.2h' + CHARACTER(LEN=*), PARAMETER :: verdate = '24-May-2013' +! +! COMMON /IOUNIT/ IN, RPT, ITTYI, ISCR, IOUT +! + INTEGER(KIND=4), PARAMETER :: in = 20, iout = 21, rpt = 22, & + & iscr = 23 + INTEGER(KIND=4), PARAMETER :: IDEfi = 5, IDEfo = 6 +! +!+++MDC+++ +!...VMS +!/ CHARACTER(LEN=*), PARAMETER :: nuldev = 'NL:' +!/ CHARACTER(LEN=*), PARAMETER :: ostat = 'NEW' +!...UNX + CHARACTER(LEN=*), PARAMETER :: nuldev = '/dev/null' + CHARACTER(LEN=*), PARAMETER :: ostat = 'REPLACE' +!...DVF +!/ CHARACTER(LEN=*), PARAMETER :: nuldev = ' ' +!/ CHARACTER(LEN=*), PARAMETER :: ostat = 'REPLACE' +!---MDC--- +! +! COMMON /CHAR / CARD, LABEL, OPTCRD +! + CHARACTER(LEN=80) :: card, label, optcrd +! +! COMMON /CONST / ANR, DNR, ANT, DNT, BR, DBR, ANB, DNB, IAMASS, IZ,& +! & EMASS +! + REAL(KIND=8) :: anb, anr, ant, br, dbr, dnb, dnr, dnt, emass + INTEGER(KIND=4) :: iamass, iz +! +! COMMON /DIDSET/ DEGSET, DRISET, DTISET +! + LOGICAL(KIND=4) :: degset, driset, dtiset +! +! COMMON /LOGIC / RECOIL, ALLA, SKIP, NEWFIL, NOGAM, NOMAT, NOINT, & +! & NOINT2, IGNORG +! + LOGICAL(KIND=4) :: alla, ignorg1, ignorg2, newfil, nogam, noint, & + & noint2, nomat, recoil, skip +! +! COMMON /PNINFO/ NRBR, DNRBR, NTBR, DNTBR, NBBR, DNBBR +! + REAL(KIND=8) :: dnbbr, dnrbr, dntbr, nbbr, nrbr, ntbr +! +! COMMON /SETUNC/ DEGKEV, DEGPCT, DRIREL, DRIPCT, DTIREL, DTIPCT +! + REAL(KIND=8) :: degkev, degpct, dripct, drirel, dtipct, dtirel +! +! COMMON /SAVEG / LBOTS, LTOPS, RIS, DRIS, TIS, DTIS, CCS, DCCS, & +! & RIINS, DRIINS, RIOUTS, DRIOUS, TIINS, DTIINS, & +! & TIOUTS, DTIOUS, WAAS11, WAAS12, WAAS22, WAGS1, & +! & WAGS2, YS, XS +! + INTEGER(KIND=4) :: lbots, ltops + REAL(KIND=8) :: ccs, dccs, driins, drious, dris, dtiins, dtious, & + & dtis, riins, riouts, ris, tiins, tiouts, tis, & + & waas11, waas12, waas22, wags1, wags2, xs, ys +! +! COMMON /PARAM / MU, SIGMA +! + REAL(KIND=4) :: mu, sigma +! + INTEGER(KIND=4), PARAMETER :: nle = 1000, nfix = nle +! +! COMMON /LEVDAT/ EL, DLEV, RLEV +! + REAL(KIND=8), DIMENSION(nle) :: dlev, el, rlev +! + CHARACTER(LEN=10), DIMENSION(nle) :: celev + CHARACTER(LEN=2), DIMENSION(nle) :: cdelev +! +! COMMON /MATR2 / WAG +! + REAL(KIND=8), DIMENSION(nle) :: wag +! +! COMMON /RELINT/ RIIN, DRIIN, RIOUT, DRIOUT +! + REAL(KIND=8), DIMENSION(nle) :: driin, driout, riin, riout +! +! COMMON /TOTINT/ TIIN, DTIIN, TIOUT, DTIOUT +! + REAL(KIND=8), DIMENSION(nle) :: dtiin, dtiout, tiin, tiout +! +! COMMON /LEVST1/ AILEV, AIDLEV, HOWFIX +! + CHARACTER(LEN=2), DIMENSION(nle) :: aidlev + CHARACTER(LEN=10), DIMENSION(nle) :: ailev + CHARACTER(LEN=1), DIMENSION(nle) :: howfix +! +! COMMON /LEVST2/ ALEV, ADLEV +! + CHARACTER(LEN=2), DIMENSION(nle) :: adlev + CHARACTER(LEN=10), DIMENSION(nle) :: alev +! + COMMON /BETSTR/ EBI, DEBi + CHARACTER(LEN=2), DIMENSION(nle) :: DEBi + CHARACTER(LEN=8), DIMENSION(nle) :: EBI +! + COMMON /FIX1 / LEVfix + INTEGER(KIND=4), DIMENSION(nfix) :: LEVfix +! + INTEGER(KIND=4), PARAMETER :: nstore = (nle*nle+nle+1)/2 +! +! COMMON /MATR1 / WAA +! + REAL(KIND=8), DIMENSION(nstore) :: waa +! + INTEGER(KIND=4), PARAMETER :: nga = 4*nle +! +! COMMON /TOPBOT/ LTOP, LBOT +! + INTEGER(KIND=4), DIMENSION(nga) :: lbot, ltop +! +! COMMON /GAME1 / EG, DEG +! + REAL(KIND=8), DIMENSION(nga) :: deg, eg, egc +! + INTEGER(KIND=4), PARAMETER :: maxoff = 12 +! +! COMMON /OFFSCH/ OFFCHR +! + CHARACTER(LEN=1), DIMENSION(maxoff) :: offchr +! +! COMMON /OFFSIN/ NOFF, OFFSET +! + INTEGER(KIND=4) :: noff + REAL(KIND=8), DIMENSION(maxoff) :: offset +! + REAL(KIND=8), DIMENSION(nfix) :: elfix +! +! Saves information for assumed theoretical DCC + REAL(KIND=4) :: theodcc + LOGICAL(KIND=4) :: adddcc +! +! Initialization **TK** + NOFf = 0 + CALL RUN_GTOL +! + STOP +! + CONTAINS +! +!*********************************************************************** +! + SUBROUTINE RUN_GTOL +! +! PROGRAM USES STANDARD ENSDF DATA SETS +! GAMMA-RAY ENERGIES USED TO DERIVE A SET OF LEAST-SQUARES +! ADJUSTED LEVEL ENERGIES +! UNPLACED OR QUESTIONABLE GAMMAS ARE IGNORED +! BETA OR EC+BETA FEEDING AT EACH LEVEL IS CALCULATED FROM +! THE INPUT GAMMA INTENSITIES AND CONVERSION COEFFICIENTS +! AN OPTION CARD WITH 'OPTION' IN COL. 1-6 MAY PRECEDE ANY +! DATA SET AND CONTAIN ANY OF THE FOLLOWING OPTIONS +! IN FREE FORMAT: +! OPTION MEANING +! NOREC NO RECOIL CORRECTION, I.E. RECIOL CORR. +! HAS ALREADY BEEN APPLIED TO E(GAMMA) +! RECOIL PERFORM RECOIL CORRECTION (DEFAULT) +! MARKED PROCESS ONLY DATA SETS PRECEEDED BY +! A CARD WITH '*GTOL' IN COL. 1-5 +! ALL PROCESS ALL DATA SETS (DEFAULT) +! DEG= Reset default assumption of +-1 keV for +! blank DEG. Either in keV or %. Must be set +! for each data set. +! DRI= Assume an uncertainty for blank DRI in +! data set. Either in relative intensities +! or as %. Must be set for each data set. +! DTI= Same as for DRI but for the DTI field. +! Note that an option card resets the defaults. +! +! A level energy can be held fixed by adding the letter 'F' or 'G' +! somewhere in the energy field (Columns 10-21). If 'G' is used, energy +! uncertainty of the fixed level will be added in quadrature with that +! from the least-squares adjustment +! +! DRI and DTI options for a data set may be over-ridden for +! an individual intensity by adding the letter 'E' in the +! intensity fields separated by blanks from the intensities. +! + IMPLICIT NONE +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + CHARACTER(LEN=1), INTRINSIC :: CHAR +! +! Local variables +! + LOGICAL(KIND=4) :: bad, g2here, issep, isxlv + INTEGER(KIND=4) :: ieof, ig, il, ilfix, i +! + RECoil = .TRUE. + ALLa = .TRUE. + NOGam = .FALSE. + NOMat = .FALSE. + NEWfil = .FALSE. + NOInt = .FALSE. + NOInt2 = .FALSE. + issep = .FALSE. + isxlv=.FALSE. + EBI = ' ' + DEBi = ' ' + ilfix = nfix + DO i = 1, Ilfix + LEVfix(i) = 0 + elfix(i) = 10.**20 + END DO + IF(NOFf.GT.0) THEN + DO i = 1, NOFf + OFFset(i) = 0.0 + OFFchr(i) = ' ' + END DO + NOFf = 0 + END IF + OPTcrd = ' ' +! +! OPEN INPUT/OUTPUT FILES +! + CALL GET_INPUT +! + il = 0 + ig = 0 + ilfix = 1 + 10 LABel = ' ' +! + 20 SKIp = .TRUE. + DO i = 1, Ilfix + LEVfix(i) = 0 + elfix(i) = 10.**20 + END DO + IF(NOFf.GT.0) THEN + DO i = 1, NOFf + OFFset(i) = 0.0 + OFFchr(i) = ' ' + END DO + NOFf = 0 + END IF + ANR = 1.0 + ANT = 1.0 + BR = 1.0 + ANB = 1.0 + DNR = 0.0 + DNT = 0.0 + DBR = 0.0 + DNB = 0.0 + NRBr = 0.0 + DNRbr = 0.0 + NTBr = 0.0 + DNTbr = 0.0 + NBBr = 0.0 + DNBbr = 0.0 + NOInt2 = .FALSE. + issep = .FALSE. + isxlv=.FALSE. + DEGkev = 0.0 + DEGpct = 0.0 + DRIrel = 0.0 + DRIpct = 0.0 + DTIrel = 0.0 + DTIpct = 0.0 + DEGset = .FALSE. + DRIset = .FALSE. + DTIset = .FALSE. +! +! CLEAR MATRIX WORK AREAS TO ZEROES +! + EBI = ' ' + DEBi = ' ' +! + il = 0 + ig = 0 + ilfix = 1 +! + IF(NEWfil) OPEN(UNIT=iscr,ACCESS='SEQUENTIAL',STATUS='SCRATCH') +! + DO WHILE (.TRUE.) +! +! Read input +! + CALL READIN(il,ilfix,ieof,g2here) +! +! Check for presence of GAMMA continuation record and redo +! matrice + IF(g2here) THEN + IF(issep .OR. isxlv) CYCLE + CALL GA2DEC(il,ig,ilfix) + CYCLE + END IF +! +! Check for EOF with Data Set Still Active +! + If(ieof .EQ. 998)EXIT + IF(ieof.EQ.999) THEN + IF(il.NE.0.AND.ig.NE.0) THEN + bad = .FALSE. + CALL ADJUST(il,ig,ilfix,bad) + IF(NEWfil) THEN + IF(bad) THEN + CALL DUMPIT + ELSE + CALL NEWOUT(ieof,il,ilfix) + END IF + END IF + ELSE + Write(idefo,'(A)')' Nothing can be calculated' + IF(NEWfil) CALL DUMPIT + END IF + EXIT + END IF +! +!--- END RECORD + IF(CARd(1:8).EQ.' ') THEN + WRITE(rpt,'(9X,A)') CARd + IF(il.NE.0.AND.ig.NE.0) THEN + bad = .FALSE. + CALL ADJUST(il,ig,ilfix,bad) + IF(NEWfil) THEN + IF(bad) THEN + CALL DUMPIT + ELSE + CALL NEWOUT(ieof,il,ilfix) + END IF + END IF + ELSE + Write(idefo,'(A)')' Nothing can be calculated' + END IF + IF(LABel.EQ.' ') THEN + WRITE(IDEfo,'(A)')' No ID record preceding END record' + CYCLE + END IF + IF(NEWfil) THEN + IF((il.EQ.0.OR.ig.EQ.0).OR.bad) CALL DUMPIT + END IF + IF(il.EQ.0) il = 1 + IF(ig.EQ.0) ig = 1 + IF(ilfix.EQ.1) ilfix = 2 + GO TO 10 + END IF +!--- BETA, ALPHA, OR EC RECORD + IF(CARd(6:8).EQ.' B'.OR.CARd(6:8).EQ.' A'.OR.CARd(6:8) & + & .EQ.' E') THEN + IF(.NOT.NOInt.AND..NOT.NOInt2) THEN + CALL RADDEC(il) + END IF + CYCLE + END IF +!--- GAMMA RECORD + IF(CARd(6:8).EQ.' G') THEN + IF(issep) THEN + WRITE(rpt,'(9X,A,T93,A)') CARd,'Ignoring after SP or SN' + CYCLE + END IF + IF(isxlv) THEN + WRITE(rpt,'(9X,A,T93,A)') CARd,'Ignoring after "+X",...' + CYCLE + END IF + CALL GAMDEC(il,ig,ilfix) + CYCLE + END IF +!--- LEVEL RECORD + IF(CARd(6:8).EQ.' L') THEN + WRITE(rpt,'(9X,A)') CARd + CALL LEVDEC(il,ilfix,ig,nga,issep,isxlv) + CYCLE + END IF +!--- NORMALIZATION RECORD + IF(CARd(6:8).EQ.' N') THEN + IF(.NOT.NOInt) THEN + CALL NORDEC + END IF + CYCLE + END IF +!--- PN Record + IF(CARd(6:8).EQ.' PN') THEN + IF(.NOT.NOInt) THEN + CALL PNDEC + IF(NOInt2) THEN + DRIrel = 0.0 + DRIpct = 0.0 + DTIrel = 0.0 + DTIpct = 0.0 + END IF + END IF + CYCLE + END IF +!--- ID RECORD + IF(CARd(6:9).EQ.' '.AND.CARd(1:5).NE.' ') THEN +! SKIP TO TOP OF PAGE. + WRITE(rpt,'(A/5A/)') & + & CHAR(12), 'Program ',TRIM(VERSION),' as of ', & + & TRIM(verdate),' (Double precision, localized)' + IF(OPTcrd.NE.' ') THEN + WRITE(rpt,'(9X,A)') OPTcrd + OPTcrd = ' ' + END IF + WRITE(rpt,'(9X,A)') CARd +! + WAG = 0.0 + RIIn = 0.0 + DRIin = 0.0 + RIOut = 0.0 + DRIout = 0.0 + TIIn = 0.0 + DTIin = 0.0 + TIOut = 0.0 + DTIout = 0.0 + WAA = 0.0 +! + IF(il.NE.0.OR.ig.NE.0) THEN + WRITE(IDEfo,'(A)')' No END record preceding '//CARd(1:39) + bad = .FALSE. + CALL ADJUST(il,ig,ilfix,bad) + IF(NEWfil) THEN + IF(bad) THEN + CALL DUMPIT + ELSE + ieof = 999 + CALL NEWOUT(ieof,il,ilfix) + ieof = 0 + END IF + END IF + CALL IDDEC + GO TO 20 + ELSE + IF(NEWfil.AND.LABel.NE.' ') THEN + CALL DUMPIT + END IF + CALL IDDEC + CYCLE + END IF + END IF + IF(CARd(6:8).EQ.' H') CYCLE +!--- RECORD TYPE NOT RECOGNIZED, SKIP + WRITE(rpt,'(9X,A,T96,A)') CARd,'NOT RECOGNIZED-SKIPPED' + END DO +! + WRITE(IDEfo,'(/A)') ' Job completed successfully' + RETURN +! + END SUBROUTINE RUN_GTOL +! +!*********************************************************************** +! + SUBROUTINE GET_INPUT +! +! Opens files +! + IMPLICIT NONE +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM,REPEAT + CHARACTER(LEN=1), EXTERNAL :: UPCASE + REAL(KIND=4), EXTERNAL :: VALSTR + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM +! +! Local variables +! + INTEGER(KIND=4), PARAMETER :: nf = 5 + CHARACTER(LEN=50), DIMENSION(nf) :: carray + CHARACTER(LEN=50), DIMENSION(nf-1) :: file + CHARACTER(LEN=50) :: carrayuc + CHARACTER(LEN=3) :: ans + CHARACTER(LEN=11) :: daet + INTEGER(KIND=4) :: npar, i, lver + CHARACTER(LEN=100) :: name, name1 + CHARACTER(LEN=8) :: tyme + CHARACTER(LEN=20) :: adcc +! + file(1) = 'gtol.inp' + file(2) = 'gtol.rpt' + file(3) = 'gtol.out' + file(4) = ' ' +! + npar = nf + CALL GET_COMMAND_LINE('%',carray,npar) +! +! Check input for new file names +! + IF(npar.GT.1) THEN + DO i = 2, npar + IF(carray(i).EQ.' '.OR.carray(i).EQ.'#') CYCLE + file(i-1) = carray(i) + carrayuc = carray(i) + CALL UPSTR(carrayuc) + IF(carrayuc.EQ.'NULL') file(i-1) = nuldev + END DO + END IF +! +! open standard output file if not blank +! + IF(file(4).NE.' ') CALL OPEN_FILE(IDEfo,file(4),OSTat) +! + WRITE(IDEFO,'(/1X,A)') version//' ['//verdate//']' + WRITE(IDEFO,'(A)')' (Double precision, localized)' + WRITE(IDEFO,'('' Max. number of levels='',I4)')nle + WRITE(IDEFO,'('' Max. number of gammas='',I4)')nga + WRITE(IDEFO,'('' Max. number of fixed levels='',I4)')nfix +! +! GET INPUT ENSDF FILE NAME +! + 10 IF(npar.EQ.0) THEN + WRITE(IDEfo,'(/1X,3A,$)') & + & 'INPUT FILE (DEF: ',TRIM(file(1)),'): ' + READ(IDEfi,'(A)') name + IF(name.EQ.' ') name = file(1) + ELSE + name = file(1) + END IF + name1 = name + OPEN(UNIT=in,FILE=name,ACCESS='SEQUENTIAL',STATUS='OLD', & + & ACTION='READ',ERR=80) +! +! REPORT FILE NAME +! + IF(npar.EQ.0) THEN + WRITE(IDEfo,'(1X,3A,$)') & + & 'REPORT FILE (DEF: ',TRIM(file(2)),'): ' + READ(IDEfi,'(A)') name + IF(name.EQ.' ') name = file(2) + ELSE + name = file(2) + END IF + CALL OPEN_FILE(rpt,name,OSTat) +! +! OUTPUT ENSDF FILE +! + IF(npar.EQ.0) THEN + WRITE(IDEfo,'(/1X,A)') & + & 'Do you wish to create a new file with level' + WRITE(IDEfo,'(3X,A,$)') & + & 'energies replaced by GTOL results(N/Y)? - ' + READ(IDEfi,'(A)') ans + IF(UPCASE(ans(1:1)).NE.'Y') GO TO 20 + NEWfil = .TRUE. + WRITE(IDEfo,'(1X,3A,$)') & + & 'Enter OUTPUT ENDSF FILE NAME (DEF: ',TRIM(file(3)),'): ' + READ(IDEfi,'(A)') name + IF(name.EQ.' ') name = file(3) + ELSE + IF(UPCASE(carray(1)(1:1)).NE.'Y') GO TO 20 + NEWfil = .TRUE. + name = file(3) + END IF + CALL OPEN_FILE(iout,name,ostat) +! + 20 IF(npar.EQ.0) THEN + WRITE(IDEfo,'(1X,A,$)') & + & 'Do you wish to suppress gamma energy comparison(N/Y)? - ' + READ(IDEfi,'(A)') ans + IF(UPCASE(ans(1:1)).EQ.'Y') NOMat = .TRUE. + ELSE + IF(UPCASE(carray(1)(2:2)).EQ.'Y') NOMat = .TRUE. + END IF +! + IF(npar.EQ.0) THEN + WRITE(IDEfo,'(1X,A,$)') & + & 'Do you wish to suppress intensity comparison(N/Y)? - ' + READ(IDEfi,'(A)') ans + IF(UPCASE(ans(1:1)).EQ.'Y')Then + NOInt = .TRUE. + Else + Write(idefo,'(3X,A,$)') & + & 'Assumed DCC theory (Bricc-1.4%, Hsicc-3%, Other-?) - ' + Read(idefi,'(A)')ans + ans=UPCASE(ans) + If(ans(1:1).EQ.' ' .OR. ans(1:1).EQ.'B')Then + theodcc=0.014 + adddcc=.TRUE. + ElseIf(ans(1:1) .EQ. 'H')Then + theodcc=0.03 + adddcc=.FALSE. + ElseIf(ans(1:1) .EQ. 'O')Then + Write(idefo,'(5X,A,$)')'%DCC(theory) to assume - ' + Read(idefi,'(a)')adcc + theodcc=VALSTR(adcc) + theodcc=theodcc/100.0 + adddcc=.TRUE. + EndIf + Write(idefo,'(3X,A,F6.3)')'DCC(theory)=',theodcc + EndIf + ELSE + IF(UPCASE(carray(1)(3:3)).EQ.'Y')Then + NOInt = .TRUE. + Else + If(UPCASE(carray(1)(4:4)).EQ. ' ' .OR. & + & UPCASE(carray(1)(4:4)).EQ.'B')Then + theodcc=0.014 + adddcc=.TRUE. + ElseIf(UPCASE(carray(1)(4:4)).EQ.'H')Then + theodcc=0.03 + adddcc=.FALSE. + ElseIf(UPCASE(carray(1)(4:4)).EQ.'O')Then + theodcc=VALSTR(carray(1)(5:)) + theodcc=theodcc/100.0 + adddcc=.TRUE. + EndIf + EndIf + END IF +! + CALL TIMES(tyme) + CALL DATE_20(daet) + lver = LEN_TRIM(version) + 4 + WRITE(rpt,'(/A)') REPEAT('*',lver) + WRITE(rpt,'(3A)')'* ', version, ' *' + WRITE(rpt,'(A)') REPEAT('*',lver) + WRITE(rpt,'(/2A)') 'DATE: ', daet + WRITE(rpt,'(2A/)') 'TIME: ', tyme + WRITE(rpt,'(A)') '(Double precision, localized)' + WRITE(rpt,'(A,I4)') 'Max. number of levels=', nle + WRITE(rpt,'(A,I4)') 'Max. number of gammas=', nga + WRITE(rpt,'(A,I4//)') 'Max. number of fixed levels=', nfix + WRITE(rpt,'(2A)') 'INPUT-FILE name: ', TRIM(name1) + IF(NEWfil) WRITE(rpt,'(2A)') 'OUTPUT-FILE name: ', TRIM(name) + GO TO 100 +! + 80 WRITE(IDEfO,'(/5X,A)') 'INPUT FILE OPEN ERROR' + STOP +! + 100 RETURN +! + END SUBROUTINE GET_INPUT +! +!*********************************************************************** +! + SUBROUTINE OPEN_FILE(I,Ofile,Ostat) +! +! MACHINE DEPENDENT FILE OPEN ROUTINE +! + IMPLICIT NONE +! +! Dummy variables +! + CHARACTER(LEN=*) :: Ofile,Ostat + INTEGER(KIND=4) :: I +! +!+++MDC+++ +!...VMS +!/ OPEN(UNIT=I,FILE=Ofile,ACCESS='SEQUENTIAL',STATUS=Ostat, & +!/ & CARRIAGECONTROL='LIST') +!...UNX, DVF, ANS + OPEN(UNIT=I,FILE=Ofile,ACCESS='SEQUENTIAL',STATUS=Ostat) +!---MDC--- +! + RETURN + END SUBROUTINE OPEN_FILE +! +!*********************************************************************** +! + INTEGER(KIND=4) FUNCTION STRLOC(Row,Col) +! +! Support function for storing data in a packed vector of +! (NLE*NLE+NLE+1)/2 which represents a symmetric matrix of +! NLExNLE. The lower triangle of the matrix is stored by row +! with a(i*(i-1)/2+j)=Aij +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Col, Row +! +! Local variables +! + INTEGER(KIND=4) :: tmp1, tmp2 +! + IF((Row.GT.nle).OR.(Col.GT.nle)) THEN + WRITE(IDEfo,'(/A)') & + & 'Error in STRLOC. ROW or COLUMN exceeds dimensions' + STOP + ELSE IF(Row.GE.Col) THEN + tmp1 = Row + tmp2 = Col + ELSE + tmp1 = Col + tmp2 = Row + END IF + STRLOC = tmp1*(tmp1-1)/2 + tmp2 + RETURN + END FUNCTION STRLOC +! +!*********************************************************************** +! + SUBROUTINE GCALC(I1,I2,Ilfix,X,Y,Ri,Dri,Ti,Dti) +! +! Save data for possible modifications due to data on GAMMA +! continuation records +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: I1, I2, Ilfix + REAL(KIND=8) :: Dri, Dti, Ri, Ti, X, Y +! +! Local variables +! + INTEGER(KIND=4) :: i, itmp, j, k +! + LBOts = I2 + LTOps = I1 +! + IF(.NOT.NOInt.AND..NOT.NOInt2) THEN + RIIns = RIIn(I2) + RIOuts = RIOut(I1) + DRIins = DRIin(I2) + DRIous = DRIout(I1) + RIS = Ri + DRIs = Dri +! + TIIns = TIIn(I2) + TIOuts = TIOut(I1) + DTIins = DTIin(I2) + DTIous = DTIout(I1) + TIS = Ti + DTIs = Dti + END IF +! + IF(.NOT.NOMat.OR.NEWfil) THEN + XS = X + YS = Y + WAAs11 = WAA(STRLOC(I1,I1)) + WAAs22 = WAA(STRLOC(I2,I2)) + WAGs1 = WAG(I1) + WAGs2 = WAG(I2) + IF(I1.NE.I2) WAAs12 = WAA(STRLOC(I1,I2)) + END IF +! +! ADD TO FEEDING TO AND FROM THE TWO LEVELS +! +! ADD TO SUM OF SQUARES OF UNCERTAINTIES +! + IF(.NOT.NOInt.AND..NOT.NOInt2) THEN + RIIn(I2) = RIIn(I2) + Ri + RIOut(I1) = RIOut(I1) + Ri + DRIin(I2) = DRIin(I2) + Dri**2 + DRIout(I1) = DRIout(I1) + Dri**2 +! + TIIn(I2) = TIIn(I2) + Ti + TIOut(I1) = TIOut(I1) + Ti + DTIin(I2) = DTIin(I2) + Dti + DTIout(I1) = DTIout(I1) + Dti + END IF +! + IF(NOMat) THEN + IF(.NOT.NEWfil) RETURN + END IF +! +! SET UP ARTIFICIAL LEVEL ENERGY MEASUREMENTS +! FOR CONNECTIONS TO FIXED LEVELS +! + DO j = 1, Ilfix + k = LEVfix(j) + IF(k.EQ.I1) X = -(EL(I1)-X) + IF(k.EQ.I2) X = EL(I2) + X + END DO +! + itmp = STRLOC(I1,I1) + WAA(itmp) = WAA(itmp) + Y + itmp = STRLOC(I2,I2) + WAA(itmp) = WAA(itmp) + Y + WAG(I1) = WAG(I1) + Y*X + WAG(I2) = WAG(I2) - Y*X + IF(I2.NE.I1) THEN + itmp = STRLOC(I1,I2) + WAA(itmp) = WAA(itmp) - Y + END IF +! + RETURN + END SUBROUTINE GCALC +! +!*********************************************************************** +! + SUBROUTINE TIMES(Tyme) +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Tyme +! +! Local variables +! + CHARACTER(LEN=8) :: date + CHARACTER(LEN=10) :: time +! + CALL DATE_AND_TIME(date,time) + Tyme = time(1:2)//':'//time(3:4)//':'//time(5:6) +! + RETURN + END SUBROUTINE TIMES +! +!*********************************************************************** +! + SUBROUTINE READIN(Il,Ilfix,Ieof,G2here) +! + IMPLICIT NONE +! +! Dummy arguments +! + LOGICAL(KIND=4) :: G2here + INTEGER(KIND=4) :: Ieof,Il,Ilfix +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + INTEGER(KIND=4), INTRINSIC :: INDEX + REAL(KIND=8), INTRINSIC :: DBLE + INTEGER(KIND=4), EXTERNAL :: RLSCN + INTEGER(KIND=4), EXTERNAL :: LENSTR +! +! Local variables +! + LOGICAL(KIND=4) :: doout, isfixed + LOGICAL(KIND=4) :: isitdec + CHARACTER(LEN=132) :: outline + CHARACTER(LEN=71) :: tmpstr + CHARACTER(LEN=80) :: lastcard + INTEGER(KIND=4) :: i, i1, i2, j, k + REAL(KIND=4) :: x + REAL(KIND=4) :: totdec,dtotdec +! + G2here = .FALSE. + Ieof = 0 + lastcard=card + DO WHILE (.TRUE.) + READ(in,'(A)',END=10) CARd +! +!--- OPTION CARD (ADDITIONAL OPTIONS ARE EASILY ADDED IN ANALOGY +!--- WITH THE EXISTING) + IF(CARd(1:6).EQ.'OPTION') THEN + OPTcrd = CARd + RECoil = .TRUE. + ALLa = .TRUE. + IF(INDEX(CARd,'NOREC').GT.0) RECoil = .FALSE. + IF(INDEX(CARd,'MARKED').GT.0) ALLa = .FALSE. + i1 = INDEX(CARd,'DEG=') + IF(i1.GT.0) THEN + i1 = i1 + 4 + i2 = RLSCN(CARd,i1,x) + IF(CARd(i2:i2).EQ.'%') THEN + DEGpct = x + ELSE + DEGkev = x + END IF + END IF + IF(.NOT.NOInt) THEN + i1 = INDEX(CARd,'DRI=') + IF(i1.GT.0) THEN + i1 = i1 + 4 + i2 = RLSCN(CARd,i1,x) + IF(CARd(i2:i2).EQ.'%') THEN + DRIpct = x + ELSE + DRIrel = x + END IF + END IF + i1 = INDEX(CARd,'DTI=') + IF(i1.GT.0) THEN + i1 = i1 + 4 + i2 = RLSCN(CARd,i1,x) + IF(CARd(i2:i2).EQ.'%') THEN + DTIpct = x + ELSE + DTIrel = x + END IF + END IF + END IF + CYCLE + END IF + IF(NEWfil) WRITE(iscr,'(A)') CARd +!--- *GTOL MARK + IF(CARd(1:5).EQ.'*GTOL') THEN + WRITE(rpt,'(9X,A)') CARd + SKIp = .FALSE. + CYCLE + END IF +!--- SKIP CARD? + IF(.NOT.ALLa.AND.SKIp) THEN + WRITE(rpt,'(9X,A)') CARd//' SKIPPED' + CYCLE + ELSE IF(NOGam.AND.CARd(6:8).NE.' ') THEN + CYCLE + END IF +! +! Check for other legal record types +! + IF(CARd(8:8).EQ.'X') CYCLE + IF(CARd(8:8).EQ.'D') CYCLE + IF(CARd(8:8).EQ.'Q') CYCLE + IF(CARd(8:8).EQ.'P') CYCLE +! + IF(CARd(6:8).EQ.' PN') RETURN + IF(CARd(6:7).EQ.' ') THEN + If(totdec .GE. 99.95)Then + isfixed=.FALSE. + Do j=1,Ilfix-1 + If(levfix(j) .EQ. il)isfixed=.TRUE. + EndDo + If(isfixed)Then + Write(rpt,'(T96,A)')'Level already held fixed' + ElseIf(isitdec)Then + Write(rpt,'(T96,A)')'IT decay mode found' + Else + Write(rpt,'(T96,A)')'Level assumed to be fixed' + levfix(ilfix)=il + elfix(Ilfix)=el(il) + Ilfix = Ilfix + 1 + HOWfix(Il) = 'D' + EndIf + EndIf + isitdec=.FALSE. + totdec=0.0 + RETURN +! +! Check for quantities on GAMMA continuation records which +! may effect the results of GTOL + ELSE IF(CARd(7:8).EQ.' G') THEN + outline = ' '//CARd + IF(INDEX(CARd(10:80),'FL=').NE.0) THEN + outline(92:) = 'FINAL LEVEL FOUND' + IF(.NOT.IGNorg1) G2here = .TRUE. + END IF + IF(.NOT.NOInt.AND..NOT.NOInt2) THEN + IF(INDEX(CARd(10:80),'RI').NE.0) THEN + outline(92:) = 'RI OR DRI FOUND' + IF(.NOT.(IGNorg1 .OR. IGNorg2)) G2here = .TRUE. + END IF + IF(INDEX(CARd(10:80),'CC').NE.0.AND. & + & INDEX(CARd(10:80),'ECC').NE.INDEX(CARd(10:80),'CC')-1)& + & THEN + outline(112:) = 'CC OR DCC FOUND' + IF(.NOT.(IGNorg1 .OR. IGNorg2)) G2here = .TRUE. + END IF + IF(INDEX(CARd(10:80),'TI').NE.0) THEN + outline(92:) = 'TI OR DTI FOUND' + IF(.NOT.(IGNorg1 .OR. IGNorg2)) G2here = .TRUE. + END IF + END IF + WRITE(rpt,'(A)') TRIM(outline) + IF(G2here) RETURN +! +! Check for decay modes on level continuation records + ElseIf(card(7:8).EQ.' L' .AND. INDEX(card(10:),"%").GT.0 .AND. & + & il.GT.1)Then + tmpstr=card(10:) + Call Lbsup(tmpstr) + i=INDEX(tmpstr,'$') + doout=.TRUE. + If(i .EQ. 0)Then + i=LENSTR(tmpstr) + Call GetModes(tmpstr(1:i),totdec,dtotdec,doout,isitdec) + Else + Do While (i .GT. 0) + Call Lbsup(tmpstr) + Call GetModes(tmpstr(1:i-1),totdec,dtotdec,doout, & + & isitdec) + tmpstr=tmpstr(i+1:) + i=INDEX(tmpstr,'$') + EndDo + Call Lbsup(tmpstr) + Call GetModes(tmpstr(1:Lenstr(tmpstr)),totdec,dtotdec, & + & doout,isitdec) + EndIf + END IF + END DO +!TWB-20070601 10 Ieof = 999 +10 Continue + If(lastcard .NE. ' ')Then + ieof=999 + Else + ieof=998 + EndIf + RETURN + END SUBROUTINE READIN +! +!*********************************************************************** +! + SUBROUTINE GA2DEC(Il,Ig,Ilfix) +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Ig, Il, Ilfix +! +! Functions used + INTEGER(KIND=4), INTRINSIC :: INDEX, LEN_TRIM + INTEGER(KIND=4), EXTERNAL :: INDEXF + REAL(KIND=8), INTRINSIC :: DABS, DSQRT +! +! Local variables +! + CHARACTER(LEN=10) :: tmpstr + LOGICAL(KIND=4) :: change + INTEGER(KIND=4) :: code, i, i1, i2 + REAL(KIND=8) :: cc, dcc, dri, dti, dxx, ri, ti, x, xx, y +! +! Decodes quantities found on GAMMA continuation records and correct +! the arrays +! + change = .FALSE. + LTOp(Ig) = LTOps +! +! Check for final level +! + i1 = INDEXF(CARd,10,'FL=') + IF(i1.GT.0) THEN + i1 = i1 + 3 + i2 = INDEXF(CARd,i1,'$') - 1 + IF(i2.LT.0) i2 = LEN_TRIM(CARd) + tmpstr = CARd(i1:i2) + IF(INDEX(tmpstr,'?').GT.0) THEN + WRITE(rpt,'(A)') & + & '***** Unknown final level - ignoring gamma for energy' + CALL REDO2(ris,dris,tis,dtis,cc,dcc) + lbot(ig)=-1 + RETURN + ELSE + CALL PADLFT(tmpstr,10) + DO i = Il, 1, -1 + IF(tmpstr.EQ.AILev(i)) THEN + LBOt(Ig) = i + IF(LBOt(Ig).NE.LBOts) change = .TRUE. + GO TO 10 + END IF + END DO + WRITE(rpt,'(A)') '***** No match for '//tmpstr + LBOt(Ig) = LBOts + END IF + ELSE + LBOt(Ig) = LBOts + END IF +! +! Check for ranges +! + 10 IF(INDEX(CARd(10:80),' G').NE.0.OR.INDEX(CARd(10:80),' L').NE.0) & + & CALL CHGCRD +! +! Check for RI or DRI +! + IF(.NOT.NOInt.AND..NOT.NOInt2) THEN + ri = RIS + dri = DRIs + CALL READC(CARd(10:80),'RI=',xx,dxx,code) + IF(code.NE.0.AND. & + & (code.EQ.1.OR.INDEX(CARd(10:80),'DRI=').NE.code-1)) & + & CALL CHNGS1(ri,dri,RIS,DRIs,change,xx,dxx) + CALL CHNGS2(dri,CARd(10:80),'DRI=',change) +! +! Check for TI or DTI +! + ti = TIS +**JKT** + dti=DTIs +c IF(DTIs.LT.0) THEN +c dti = -DSQRT(ABS(DTIs)) +c ELSE +c dti = DSQRT(DTIs) +c END IF +**JKT** + CALL READC(CARd(1:80),'TI=',xx,dxx,code) + IF(code.NE.0.AND. & + & (code.EQ.1.OR.INDEX(CARd(10:80),'DTI=').NE.code-1)) & + & CALL CHNGS1(ti,dti,TIS,DTIs,change,xx,dxx) + CALL CHNGS2(dti,CARd(10:80),'DTI=',change) +! +! Check for CC or DCC +! + cc = CCS + dcc = DCCs + CALL READC(CARd(10:80),'CC=',xx,dxx,code) + IF(code.NE.0.AND. & + & (code.EQ.1.OR.INDEX(CARd(10:80),'ECC=').NE.code-1).AND. & + & (code.EQ.1.OR.INDEX(CARd(10:80),'DCC=').NE.code-1)) & + & CALL CHNGS1(cc,dcc,CCS,DCCs,change,xx,dxx) + CALL CHNGS2(dcc,CARd(10:80),'DCC=',change) +! +! Check for %IG=. At this time just note it +! + CALL READC(CARd(10:80),'%IG=',xx,dxx,code) + IF(code.NE.0) THEN + WRITE(rpt,'(9X,A,T93,A)') card,'%IG FOUND BUT IGNORED' + END IF + END IF +! +! Check to see if there are any differences --- If there are +! redo array calculations +! + IF(.NOT.change) THEN + WRITE(rpt,'(A)') ' ***** No differences introduced'// & + & ' due to continuation record' + RETURN + ELSE + WRITE(rpt,'(A)') ' ***** Recalculating' + i1 = LTOp(Ig) + i2 = LBOt(Ig) + x = XS + y = YS + CALL REDO(ris,dris,tis,dtis,cc,dcc) + CALL GCALC(i1,i2,Ilfix,x,y,ri,dri,ti,dti) + END IF +! + RETURN + END SUBROUTINE GA2DEC +! +!*********************************************************************** +! + SUBROUTINE READC(Card,Str,X,Dx,Istr) +! +! Based on ORNL-NDP MEDLIST PROGRAM, READ subroutine +! [Revised 5-SEP-85 to check for non-numeric characters] +! +! Scans the character string CARD for the character string STR and a +! "$". Characters between the match for STR and "$" (or end of +! CARD) are decoded into a number X and its uncertainty DX. +! +! ISTR=0 if STR is not contained in CARD +! =location of STR otherwise +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Card, Str + INTEGER(KIND=4) :: Istr + REAL(KIND=8) :: Dx, X +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX, LEN_TRIM +! +! Local variables +! + CHARACTER(LEN=16) :: ax + CHARACTER(LEN=8) :: dax + CHARACTER(LEN=80) :: test + INTEGER(KIND=4) :: ibl, icode, idol, il, nch +! + X = 0. + Dx = 0. + test = Card + nch = LEN_TRIM(Str) + Istr = INDEX(test,Str(:nch)) + IF(Istr.EQ.0) RETURN + CALL DELSTR(test,1,Istr+nch-1) + idol = INDEX(test,'$') + IF(idol.NE.0) test = test(1:idol-1) + il = LEN_TRIM(test) + CALL CHKALF(test,icode) + IF(icode.NE.0) THEN + CALL DELSTR(test,icode,il) + il = LEN_TRIM(test) + END IF + DO WHILE (.TRUE.) +! +! Delete leading blanks + IF(il.EQ.0) THEN + RETURN + END IF + IF(test(1:1).EQ.' ') THEN + CALL DELSTR(test,1,1) + il = il - 1 + CYCLE + END IF +! + ibl = INDEX(test,' ') + IF(ibl.EQ.0) ibl = il + 1 + ax = test(1:ibl-1) + CALL DELSTR(test,1,ibl) + IF(LEN_TRIM(test).NE.0) THEN + CALL SUPALF(test) + CALL SQZSTR(test,' ') +! Note deliberate truncation of string + dax = test + END IF +! + CALL DCNVSU(ax,dax,X,Dx) + RETURN + END DO + END SUBROUTINE READC +! +!*********************************************************************** +! + SUBROUTINE CHKALF(Str,Istr) +! +! NNDC MEDNEW PROGRAM, CHKALF Subroutine [5-SEP-85] +! +! Checks for the first occurrence of an alphabetic character (except +! ".", "E", "+", and "-") and reports the location. +! +! ISTR=0 if no alphabetic characters found +! =location of first alphabetic character otherwise +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Str + INTEGER(KIND=4) :: Istr +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM + INTEGER(KIND=4), EXTERNAL :: TYPSTR +! +! Local variables +! + CHARACTER(LEN=1) :: ich + INTEGER(KIND=4) :: i, ityp, j +! + CHARACTER(LEN=1), PARAMETER :: idot = '.', ie = 'E' + CHARACTER(LEN=1), PARAMETER :: iminus = '-', iplus = '+' +! + Istr = 0 + IF(LEN_TRIM(Str).LE.0) RETURN + DO i = 1, LEN_TRIM(Str) + j = i + ityp = TYPSTR(Str(j:j)) + IF((ityp.NE.1).AND.(ityp.NE.0)) THEN + ich = Str(j:j) + IF((ich.NE.idot).AND.(ich.NE.ie)) THEN + IF((ich.NE.iplus).AND.(ich.NE.iminus)) THEN + Istr = j + RETURN + END IF + END IF + END IF + END DO + RETURN + END SUBROUTINE CHKALF +! +!*********************************************************************** +! + SUBROUTINE CHNGS1(A,Da,As,Das,Change,Xx,Dxx) +! +! Checks quantities and uncertainties decoded from GAMMA continuatio +! records for changes +! + IMPLICIT NONE +! +! Dummy arguments +! + LOGICAL(KIND=4) :: Change + REAL(KIND=8) :: A, As, Da, Das, Dxx, Xx +! + A = Xx + IF(A.NE.As) Change = .TRUE. + IF(Dxx.NE.0) THEN + Da = Dxx + IF(Da.NE.Das) Change = .TRUE. + END IF + RETURN + END SUBROUTINE CHNGS1 +! +!*********************************************************************** +! + SUBROUTINE CHNGS2(Da,Str1,Str2,Change) +! +! Decodes uncertainties on GAMMA continuation records and checks for +! changes +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Str1, Str2 + LOGICAL(KIND=4) :: Change + REAL(KIND=8) :: Da +! +! Local variables +! + INTEGER(KIND=4) :: code + REAL(KIND=8) :: dxx, xx +! + CALL READC(Str1,Str2,xx,dxx,code) + IF(code.NE.0) THEN + Da = xx + IF(Da.NE.Da) Change = .TRUE. + END IF + RETURN + END SUBROUTINE CHNGS2 +! +!*********************************************************************** +! + SUBROUTINE CHGCRD +! +! Changes ranges found on GAMMA continuation record to X,DX +! NOTE: Card image modified in process +! + IMPLICIT NONE +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX, MIN0, LEN_TRIM + INTEGER(KIND=4), EXTERNAL :: INDEXF + REAL(KIND=8), INTRINSIC :: DABS +! +! Local variables +! + CHARACTER(LEN=33) :: st1, st2, xlow, xup + INTEGER(KIND=4) :: i, i1, i2, i3, i4, i5, k1, k2, kmin, knew, kold + REAL(KIND=8) :: dx, x, xlower, xupper +! + i1 = 10 + DO WHILE (.TRUE.) + i2 = INDEXF(CARd,i1,'$') + IF(i2.EQ.0) THEN + i2 = 80 + ELSE + i2 = i2 - 1 + END IF + i3 = INDEX(CARd(i1:i2),'G') + i4 = INDEX(CARd(i1:i2),'L') + IF(i3.EQ.0.OR.i4.EQ.0) THEN + IF(i2.EQ.80) THEN + RETURN + ELSE + i1 = i2 + 2 + CYCLE + END IF + END IF + IF(INDEX(CARd(i1:i2),'TI').EQ.0.AND.INDEX(CARd(i1:i2),'RI') & + & .EQ.0.AND.INDEX(CARd(i1:i2),'CC').EQ.0) THEN + IF(i2.EQ.80) THEN + RETURN + ELSE + i1 = i2 + 2 + CYCLE + END IF + END IF + st1 = CARd(i1:i2) + CALL LBSUP(st1) + k1 = INDEX(st1,' G') + k2 = INDEX(st1,' L') + kmin = MIN0(k1,k2) + st2 = st1(:kmin-1)//'=' + IF(k1.GT.k2) THEN + xup = st1(k1+3:) + xlow = st1(k2+3:k1-1) + ELSE + xup = st1(k1+3:k2-1) + xlow = st1(k2+3:) + END IF + CALL DCNVSU(xup,' ',xupper,dx) + CALL DCNVSU(xlow,' ',xlower,dx) + x = (xupper+xlower)/2. + dx = DABS(xupper-x) + CALL DCNVUS(x,dx,xup,10,xlow,2) + Call Lbsup(xup) + Call Lbsup(xlow) + st2=TRIM(st2)//TRIM(xup)//' '//TRIM(xlow) + WRITE(rpt,'(A)')'***** Range changed '//st2 + knew = LEN_TRIM(st2) + kold = LEN_TRIM(CARd(i1:i2)) + IF(knew.EQ.kold) THEN + CARd(i1:i2) = st2 + ELSE IF(knew.LT.kold) THEN + CARd(i1:i1+knew-1) = st2 + IF(i2.GE.80) i2 = 79 + CARd = CARd(1:i1+knew-1)//CARd(i2+1:) + i2 = i1 + knew - 1 + ELSE + i2 = i2 - 1 + DO i = kold, knew + i2 = i2 + 1 + CALL ADDSTR(CARd,i2,' ') + END DO + CARd(i1:i2) = st2 + END IF + IF(i2.EQ.80) THEN + RETURN + ELSE + i1 = i2 + 2 + END IF + END DO + END SUBROUTINE CHGCRD +! +!*********************************************************************** +! + SUBROUTINE REDO(Ri,Dri,Ti,Dti,Cc,Dcc) +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=8) :: Cc, Dcc, Dri, Dti, Ri, Ti +! +! Local arguments + REAL(KIND=8) :: drinew, dtinew, rinew, tinew +! + rinew=riin(lbots)-ri + drinew=driin(lbots) - dri*dri + IF(.NOT.NOInt .AND. .NOT.NOInt2) THEN +! Recalculate TI, DTI +! + IF(Ti.EQ.0.) THEN + Ti = Ri*(1+Cc) + Dti = 0. + IF(Ri.NE.0.) THEN + If(dcc .EQ. 0.0)Then + dti=Dri**2/Ri**2 + (theodcc*theodcc*cc*cc)/(1.+Cc)**2 + Else + If(adddcc)Then + dti=dri**2/ri**2+(dcc**2+(theodcc*cc)**2)/(1.+cc)**2 + Else + dti=dri**2/ri**2+(dcc/(1.+cc))**2 + EndIf + EndIf + Dti = Dti*Ti*Ti + END IF + ELSE IF(NRBr.NE.0.0.AND.NTBr.NE.0.0) THEN + Ti = Ti*NTBr/NRBr + Dti = Dti*NTBr/NRBr + Dti = Ti*Ti*((Dti/Ti)**2+(DNTbr/NTBr)**2-(DNRbr/NRBr)**2) + ELSE + Ti = Ti*ANT/ANR + Dti = Dti*ANT/ANR + Dti = Ti*Ti*((Dti/Ti)**2+(DNT/ANT)**2-(DNR/ANR)**2) + END IF + tinew=tiin(lbots)-ti + dtinew=dtiin(LBOTS) - dti*dti + riins=rinew + driins=drinew + tiins=tinew + dtiins=dtinew +! +! Reset intensity arrays +! + RIIn(LBOts) = RIIns + RIOut(LTOps) = RIOuts + DRIin(LBOts) = DRIins + DRIout(LTOps) = DRIous +! + TIIn(LBOts) = TIIns + TIOut(LTOps) = TIOuts + DTIin(LBOts) = DTIins + DTIout(LTOps) = DTIous + END IF +! +! Reset weighting matrices +! + IF(NOMat) THEN + IF(.NOT.NEWfil) RETURN + END IF + WAA(STRLOC(LTOps,LTOps)) = WAAs11 + WAA(STRLOC(LBOts,LBOts)) = WAAs22 + WAG(LTOps) = WAGs1 + WAG(LBOts) = WAGs2 + IF(LTOps.EQ.LBOts) RETURN + WAA(STRLOC(LTOps,LBOts)) = WAAs12 +! + RETURN + END SUBROUTINE REDO +! +!*********************************************************************** +! + SUBROUTINE ADJUST(Il,Ig,Ilfix,Bad) +! + IMPLICIT NONE +! +! Dummy arguments +! + LOGICAL(KIND=4) :: Bad + INTEGER(KIND=4) :: Ig, Il, Ilfix +! +! Local variables +! + INTEGER(KIND=4) :: i, idexp, j, jj + REAL(KIND=8) :: det, grec +! + IF(NOMat) THEN + IF(.NOT.NEWfil) THEN + DO i = 1, Il + ALEv(i) = AILev(i) + ADLev(i) = AIDlev(i) + END DO + GO TO 10 + END IF + END IF +! +! READY NOW TO PERFORM ADJUSTMENT VIA MTX INVERSION +! + CALL SETUP1(Il,Ilfix) +! +! Check to see if the total number of levels is less than +! or equal to the sum of the gammas and fixed levels + IF(Il.GT.Ig+Ilfix) THEN + Bad = .TRUE. + WRITE(IDEfo,'(A,I3,2A,I3,A/7X,A)')' ***** Number of levels (', & + & Il, ')', ' exceeds number of gammas+fixed levels (', & + & Ig + Ilfix, ')', 'Least-squares fit will not be done' + WRITE(rpt,'(A,I3,2A,I3,A/7X,A)') '***** Number of levels (', & + & Il, ')', ' exceeds number of gammas+fixed levels (', & + & Ig + Ilfix, ')', 'Least-squares fit will not be done' + END IF +! +! INVERT THE MATRIX OF WEIGHTS +! + CALL MATINV(Il,det,idexp) + IF(det.LE.0..AND..NOT.Bad) THEN + Bad = .TRUE. + IF(det.EQ.0) THEN + WRITE(IDEfo,'(A)')' ***** Matrix is singular. '// & + & 'Least-squares fit will not be done' + WRITE(rpt,'(A)') '***** Matrix is singular. '// & + & 'Least-squares fit will not be done' + ELSE + WRITE(IDEfo,'(A)')' ***** Negative diagonal matrix '// & + & 'elements. Least-squares fit will not be done' + WRITE(rpt,'(A)') '***** Negative diagonal matrix '// & + & 'elements. Least-squares fit will not be done' + END IF + END IF + IF(.NOT.Bad) THEN + DO i = 1, Il + IF(WAA(STRLOC(i,i)).LT.0.) THEN + WRITE(IDEfo,'(A)')' ***** Negative diagonal matrix '// & + & 'elements. Least-squares fit will not be done' + WRITE(rpt,'(A)') '***** Negative diagonal matrix '// & + & 'elements. Least-squares fit will not be done' + Bad = .TRUE. + EXIT + END IF + IF(WAA(STRLOC(i,i)) .GT. 1E+14) THEN + WRITE(IDEfo,'(A)')' ***** Unrealistic large diagonal '// & + & 'matrix elements. Least-squares fit will not be done' + WRITE(rpt,'(A)')' ***** Unrealistic large diagonal '// & + & 'matrix elements. Least-squares fit will not be done' + Bad = .TRUE. + EXIT + END IF + END DO + END IF + IF(Bad) THEN + CALL CHKFED(Il,Ig) + Call Chkmulg(Il,Ig) + IF(NOInt.OR.NOInt2) THEN + RETURN + ELSE + DO i = 1, Il + ALEv(i) = AILev(i) + ADLev(i) = AIDlev(i) + END DO + END IF + ELSE +! Now find the adjusted level energies by matrix multiplication + CALL GMPRD(Il) + DO i = 1, Il + IF(RLEv(i).LT.0) THEN + Bad = .TRUE. + WRITE(rpt,'(A)') & + & ' ***** New E(level)<0.0 after matrix mul. for '// & + & AILev(i) + END IF + END DO + IF(Bad) THEN + WRITE(IDEfo,'(A)') & + & ' ***** Negative E(level) after matrix mul. '& + & //'Level processing terminated' + WRITE(rpt,'(A)') '***** Level processing terminated '// & + & '- Check need for FL=' + CALL CHKFED(Il,Ig) + Call Chkmulg(Il,Ig) + IF(NOInt.OR.NOInt2) THEN + RETURN + ELSE + DO j = 1, Il + ALEv(j) = AILev(j) + ADLev(j) = AIDlev(j) + END DO + END IF + ELSE + CALL SETUP2(Il,Ilfix) + CALL SETUP3(Il,Ilfix) + Call SETUP4(Il,Ilfix,Ig) + Call SETUP5(Il,Ilfix,Ig) + END IF + END IF + 10 CALL OUTPUT(Il,Ig,Ilfix,Bad) + RETURN + END SUBROUTINE ADJUST +! +!*********************************************************************** +! + SUBROUTINE SETUP1(Il,Ilfix) +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Il, Ilfix +! +! Local variables +! + INTEGER(KIND=4) :: i, itmp, j, k +! +! SET ROWS AND COLUMNS TO ZERO FOR ALL LEVELS WITH FIXED ENERGY +! + DO i = 1, Il + DO j = 1, Ilfix + k = LEVfix(j) + IF(k.NE.0) THEN + WAA(STRLOC(i,k)) = 0. + END IF + END DO +! +! DISALLOW ANY ZEROES ALONG DIAGONAL OF WAA +! + itmp = STRLOC(i,i) + IF(WAA(itmp).NE.0.0) CYCLE + WAA(itmp) = 10.0**20 + WAG(i) = WAA(itmp)*EL(i) +! +! CALL THESE LEVELS FIXED +! + DO j = Ilfix, 1, -1 + IF(i.EQ.LEVfix(j)) GO TO 5 + END DO + IF(Ilfix.GT.nfix) THEN + WRITE(rpt,'(A,I4)') & + & '***** TOO MANY LEVELS FIXED. MAXIMUM IS', nfix + Ilfix = nfix + END IF + LEVfix(Ilfix) = i + Ilfix = Ilfix + 1 + 5 IF(HOWfix(i).EQ.' ') THEN + WRITE(rpt,'(2A)') AILev(i), & + & ' not connected to any other level' + ELSE + IF(HOWfix(i).EQ.'F') THEN + WRITE(rpt,'(2A)') AILev(i), & + & ' fixed on input (Uncertainty ignored)' + END IF + IF(HOWfix(i).EQ.'G') THEN + WRITE(rpt,'(4A)') AILev(i), & + & ' fixed on input (Uncertainty of ',aidlev(i),' used)' + END IF + IF(i.EQ.1) THEN + IF(EL(i).NE.0.0.AND.HOWfix(i).EQ.'A') THEN + WRITE(rpt,'(2A)')AILev(i), ' assumed fixed by GTOL' + END IF + ELSE + IF(HOWfix(i).EQ.'A') THEN + WRITE(rpt,'(2A)')AILev(i), ' assumed fixed by GTOL' + END IF + END IF + If(Howfix(i) .EQ. 'D')Then + WRITE(rpt,'(2A)')AILev(i), & + & ' assumed fixed by GTOL (%B/EC/A/SF>=99.95)' + End If + END IF + END DO + RETURN + END SUBROUTINE SETUP1 +! +!*********************************************************************** +! + SUBROUTINE CHKFED(Il,Ig) +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Ig, Il +! +! Local variables +! + LOGICAL(KIND=4) :: dohead + INTEGER(KIND=4) :: i, j +! +! Checks for connected levels which have no gammas feeding or +! no gammas deexciting the levels. This routine is called if +! the number of levels exceeds the number of gammas and number +! of fixed levels or if the matrix is singular within the +! precision of the matrix inversion algorithm +! + dohead = .TRUE. + DO i = 1, Il + DO j = 1, nfix + IF(i.EQ.LEVfix(j)) GO TO 10 + END DO + DO j = 1, Ig + IF(i.EQ.LTOp(j)) GO TO 10 + END DO + IF(dohead) THEN + WRITE(rpt,'(/A)') 'The following connected but not '// & + & 'fixed levels have no deexciting gammas' + dohead = .FALSE. + END IF + WRITE(rpt,'(4X,A)') AILev(i) + 10 END DO +! + dohead = .TRUE. + DO i = 1, Il - 1 + DO j = 1, nfix + IF(i.EQ.LEVfix(j)) GO TO 20 + END DO + DO j = 1, Ig + IF(i.EQ.LBOt(j)) GO TO 20 + END DO + IF(dohead) THEN + WRITE(rpt,'(/A)') 'The following connected but not '// & + & 'fixed levels have no feeding gammas' + dohead = .FALSE. + END IF + WRITE(rpt,'(4X,A)') AILev(i) + 20 END DO + WRITE(rpt,'(/A)') 'Fixing one or more of the preceding'// & + & ' levels may solve matrix problem' + RETURN + END SUBROUTINE CHKFED +! +!*********************************************************************** +! + SUBROUTINE MATINV(Il,Det,Idexp) +! +! Bauer-Reinsch Gauss-Jordon inversion of a symmetric matrix +! which has been represented as a packed vector. +! Based on Algorithm 9 [J.C. Nash. Compact Numerical Methods +! for Computers (Adam Hilger, Ltd., Bristol (1979)] +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Idexp, Il + REAL(KIND=8) :: Det +! +! Functions used +! + REAL(KIND=8), INTRINSIC :: DABS, DLOG10, DBLE +! +! Local variables +! + INTEGER(KIND=4) :: i, j, k, m, q + REAL(KIND=8) :: s, t + REAL(KIND=8), DIMENSION(nle) :: x +! + Det = 0. + Idexp = 0 +! + DO i = 1, Il + x(i) = 0. + END DO +! + DO k = Il, 1, -1 + s = WAA(1) +! If S is zero the matrix is singular + IF(s.EQ.0.) RETURN + m = 1 + DO i = 2, Il + q = m + m = m + i + t = WAA(q+1) + x(i) = -t/s + IF(i.GT.k) x(i) = -x(i) + DO j = q + 2, m + WAA(j-i) = WAA(j) + t*x(j-q) + END DO + END DO + q = q - 1 + WAA(m) = 1/s + DO i = 2, Il + WAA(q+i) = x(i) + END DO + END DO +! +! Calculate the determinant as a double check and to maintain +! consistency with previous inversion routines + Det = WAA(STRLOC(1,1)) + j = DLOG10(DABS(Det)) + Idexp = Idexp + j + Det = Det/(10.**DFLOAT(j)) + DO i = 2, Il + Det = Det*WAA(STRLOC(i,i)) + j = DLOG10(DABS(Det)) + Idexp = Idexp + j + Det = Det/(10.**DBLE(j)) + END DO + RETURN + END SUBROUTINE MATINV +! +!*********************************************************************** +! + SUBROUTINE GMPRD(Il) +! +! Modified from the orginal general purpose subroutine to use the +! packed vector WAA representing a symmetric matrix +! +! Multiplies the packed vector WAA representing a symmetric matrix +! by the vector WAG. IL is the actually dimension of the +! symmetric matrix. RLEV is the resultant vector. +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Il +! +! Local variables +! + INTEGER(KIND=4) :: i, j +! + DO i = 1, Il + RLEv(i) = 0.D+0 + DO j = 1, Il + RLEv(i) = RLEv(i) + WAA(STRLOC(i,j))*WAG(j) + END DO + END DO + RETURN + END SUBROUTINE GMPRD +! +!*********************************************************************** +! + SUBROUTINE SETUP2(Il,Ilfix) +! +! COMPUTE UNCERTAINTY IN EACH LEVEL ENERGY AS +! SQ ROOT OF DIAGONAL ELEMENTS OF INVERTED WEIGHTS MATRIX +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Il, Ilfix +! +! Functions used +! + REAL(KIND=8), INTRINSIC :: DSQRT +! +! Local variables +! + REAL(KIND=4) :: x,dx + INTEGER(KIND=4) :: i, itmp, j, k +! + DO i = 1, Il +! +! FOR LEVELS WITH FIXED ENERGY, SET UNCERTAINTY TO ZERO +! + DO j = 1, Ilfix + k = LEVfix(j) + IF(k.EQ.i) THEN +! +! For levels held fixed because of decay modes set uncertainty +! to input uncertainty +! + If(howfix(j) .EQ. 'D')Then + Call Cnvs2u(ailev(i),aidlev(i),x,dx) + dlev(i)=dx + Else + DLEv(i) = 0 + EndIf + RLEv(i) = EL(i) + GO TO 10 + END IF + END DO + itmp = STRLOC(i,i) + DLEv(i) = DSQRT(WAA(itmp)) + 10 END DO + RETURN + END SUBROUTINE SETUP2 +! +!*********************************************************************** +! + SUBROUTINE SETUP3(Il,Ilfix) +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Il, Ilfix +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX, LEN_TRIM +! +! Local variables +! + LOGICAL(KIND=4) :: notnum + INTEGER(KIND=4) :: i, j, k, l +! + DO i = 1, Il +! +! SET OUTPUT ENERGY EQUAL TO INPUT ENERGY FOR FIXED LEVELS +! + notnum = .FALSE. + IF(NOFf.GT.0) THEN + DO j = 1, NOFf + IF(INDEX(AILev(i),OFFchr(j)).GT.0) THEN + notnum = .TRUE. + RLEv(i) = RLEv(i) - OFFset(j) + END IF + END DO + END IF + DO j = 1, Ilfix + k = LEVfix(j) + IF(k.EQ.i) THEN + ALEv(i) = AILev(i) + ADLev(i) = AIDlev(i) + GO TO 10 + END IF + END DO + CALL DCNVUS(RLEv(i),DLEv(i),ALEv(i),10,ADLev(i),2) + IF(notnum) THEN + CALL LBSUP(AILev(i)) + CALL LBSUP(ALEv(i)) + DO j = 1, NOFf + k = INDEX(AILev(i),OFFchr(j)) + IF(k.GT.0) THEN + IF(AILev(i)(k+1:k+1).EQ.'+') THEN + l = k + 1 + ELSE + l = k + k = k - 1 + END IF + IF(k.EQ.1) THEN + CALL ADDSTR(ALEv(i),1,AILev(i)(k:l)) + ELSE + CALL ADDSTR(ALEv(i),LEN_TRIM(ALEv(i))+1,AILev(i) & + & (k:l)) + END IF + END IF + END DO + CALL PADLFT(ALEv(i),10) + CALL PADLFT(AILev(i),10) + END IF + 10 END DO + RETURN + END SUBROUTINE SETUP3 +! +!*********************************************************************** +! + SUBROUTINE OUTPUT(Il,Ig,Ilfix,Bad) +! + IMPLICIT NONE +! +! Dummy arguments +! + LOGICAL(KIND=4) :: Bad + INTEGER(KIND=4) :: Ig, Il, Ilfix +! +! Functions used +! + CHARACTER(LEN=1), INTRINSIC :: CHAR + INTEGER(KIND=4), INTRINSIC :: INDEX, LEN_TRIM + INTEGER(KIND=4), EXTERNAL :: SPAN, TYPSTR + REAL(KIND=8), INTRINSIC :: DABS, DSQRT +! +! Local variables +! + LOGICAL(KIND=4) :: oldpre + INTEGER(KIND=4) :: i, i1, i2, ifx, ij, isigfl, itest, ix, j, jmax,& + & jmin, k, l, lmax, nchar, ndev + REAL(KIND=8) :: d, ddiff, diff, tsigfl +! + INTEGER(KIND=4), PARAMETER :: ndn = 9 + CHARACTER(LEN=2), DIMENSION(ndn) :: dnug, doldg + CHARACTER(LEN=10), DIMENSION(ndn) :: flag, nugam, oldgam +! + INTEGER(KIND=4), PARAMETER :: nfg=5 + CHARACTER(LEN=10), DIMENSION(nfg) :: sigflg + DATA sigflg/'****1*****', '****2*****', '****3*****', & + & '****4*****', '****5*****'/ +! +!--- PRINT MASS AND OPTIONS + WRITE(rpt,'(//A,I4)') 'MASS NUMBER=', IAMass + WRITE(rpt,'(/A,L2,A,L2)') 'OPTIONS: RECOIL=', RECoil, ' ALL=', & + & ALLa + IF(DEGkev.GT.0) THEN + WRITE(rpt,'(8X,A,F5.2,A)') 'DEG=', DEGkev, ' keV' + ELSE IF(DEGpct.GT.0) THEN + WRITE(rpt,'(8X,A,F5.2,A)') 'DEG=', DEGpct, '%' + ELSE + WRITE(rpt,'(8X,A)') 'DEG=1 keV' + END IF + IF(DRIrel.GT.0) WRITE(rpt,'(8X,A,F5.2)') 'DRI=', DRIrel + IF(DRIpct.GT.0) WRITE(rpt,'(8X,A,F5.2,A)') 'DRI=', DRIpct, '%' + IF(DTIrel.GT.0) WRITE(rpt,'(8X,A,F5.2)') 'DTI=', DTIrel + IF(DTIpct.GT.0) WRITE(rpt,'(8X,A,F5.2,A)') 'DTI=', DTIpct, '%' + Write(rpt,'(8X,A,F6.3)')'DCC(theory)=',theodcc +! + ndev = 0 + IF(NOMat.OR.Bad.OR.Il.EQ.1) GO TO 20 + Call REPLEV(Il) + Call REPGAM(Il,Ig,Ilfix) + lmax = (Il+8)/9 + DO l = 1, lmax + jmin = 9*l - 8 + jmax = MIN(Il,9*l) + IF(jmin.GT.jmax) EXIT + WRITE(rpt,'(A,9X,A/)') CHAR(12), LABel + WRITE(rpt,'(A,9(A10,1X,A2))') 'BOTTOM (OUT) ', & + & (ALEv(j),ADLev(j),j=jmin,jmax) + WRITE(rpt,'(A,9(A10,1X,A2))') 'LEVEL= (IN) ', & + & (AILev(j),AIDlev(j),j=jmin,jmax) + IF(jmax-jmin.GT.1) THEN + WRITE(rpt,'(/A/A/)')' TOP', ' LEVEL' + END IF + DO i = jmin + 1, Il + oldpre = .FALSE. + DO j = 1, ndn + nugam(j) = ' --- ' + dnug(j) = ' ' + oldgam(j) = ' ' + doldg(j) = ' ' + flag(j) = ' ' + IF(INDEX(ALEv(i),'SP').GT.0.OR.INDEX(ALEv(i),'SN').GT.0) & + & CYCLE + ij = 9*l - 9 + j + IF(ij.GT.Il) CYCLE + IF(INDEX(ALEv(ij),'SP').GT.0.OR.INDEX(ALEv(ij),'SN') & + & .GT.0) CYCLE + diff = RLEv(i) - RLEv(ij) + IF(diff.LE.0.) CYCLE + IF(NOFf.GT.0) THEN + IF(TYPSTR(ALEv(i)).EQ.2) CYCLE + IF(TYPSTR(ALEv(i)).EQ.-1) THEN + IF(TYPSTR(ALEv(ij)).NE.-1.AND.TYPSTR(ALEv(ij)) & + & .NE.2) CYCLE + nchar = 0 + DO k = 1, NOFf + IF(INDEX(ALEv(i),OFFchr(k)).GT.0)nchar = nchar +& + & 1 + IF(INDEX(ALEv(ij),OFFchr(k)).GT.0) & + & nchar = nchar + 1 + IF(nchar.EQ.1) GO TO 10 + END DO + ELSE IF(TYPSTR(ALEv(ij)).EQ.-1.OR.TYPSTR(ALEv(ij)) & + & .EQ.2) THEN + CYCLE + END IF + END IF + diff = diff*(1.0-diff/(2.0*EMAss)) +! +! FOR GAMMAS BETWEEN FIXED LEVELS USE ZERO UNCERTAINTY +! + itest = 0 + IF(Ilfix.GE.2) THEN + DO ix = 1, Ilfix + ifx = LEVfix(ix) + IF(i.EQ.ifx) itest = itest + 1 + IF(ij.EQ.ifx) itest = itest + 1 + END DO + END IF + IF(itest.GT.1) THEN + ddiff = 0.0 + ELSE + ddiff = WAA(STRLOC(ij,ij)) + WAA(STRLOC(i,i)) & + & - WAA(STRLOC(ij,i)) - WAA(STRLOC(i,ij)) + ddiff = DSQRT(ABS(ddiff)) + END IF + IF(ddiff.GT.0.0) THEN + CALL DCNVUS(diff,ddiff,nugam(j),10,dnug(j),2) + ELSE IF(INDEX(ALEv(i),'.').EQ.0) THEN + CALL DCNVUS(diff,ddiff,nugam(j),10,dnug(j), & + & -LEN_TRIM(ALEv(i)(SPAN(ALEv(i),1,' '):))) + ELSE + CALL DCNVUS(diff,ddiff,nugam(j),10,dnug(j), & + & -LEN_TRIM(ALEv(i)(SPAN(ALEv(i),1,' '):)) & + & +1) + END IF + DO k = 1, Ig + i1 = LTOp(k) + i2 = LBOt(k) + IF((i1.EQ.i).AND.(i2.EQ.ij)) THEN + CALL DCNVUS(EG(k),DEG(k),oldgam(j),10,doldg(j),2) + oldpre = .TRUE. + GO TO 5 + END IF + END DO + CYCLE +! +! MARK INCONSISTENT GAMMA RAYS WITH INCONSISTENCY +! = DEVIATION / UNC. IN INPUT GAMMA +! + 5 d = ABS(diff-EG(k))/DEG(k) + DO isigfl = 1, nfg + tsigfl = isigfl + IF(d.GT.tsigfl) flag(j) = sigflg(isigfl) + END DO + IF(flag(j).GE.sigflg(3)) ndev = ndev + 1 + 10 END DO +! + WRITE(rpt,'(/A10,1X,A2,1X,9(A10,1X,A2))') ALEv(i), & + & ADLev(i), (nugam(j),dnug(j),j=1,ndn) +! Write out comparison lines only if there is an old gamma + IF(oldpre) THEN + WRITE(rpt,'(14X,9(A10,1X,A2)/15X,9(A10,3X))') & + & (oldgam(j),doldg(j),j=1,ndn), (flag(j),j=1,ndn) + END IF + END DO +! + END DO +! +! NOW CALCULATE INTENSITY IMBALANCE AT EACH LEVEL +! + 20 IF(ndev.GT.0) THEN + WRITE(IDEfo,'(/A,I4,A,I4,A)')' ***', ndev, ' Egs out of ', Ig, & + & ' differ by 3 or more sigma from calculated' + END IF + Do i = 1, ig + If(lbot(i) .LE. 0)Then + Write(IDEfo,'(A,F12.5,F10.5,3A)') & + & ' *** ',eg(i),deg(i),' Cannot be placed from ', & + & ailev(ltop(i)),' within +-10 keV' + EndIf + EndDo + IF(NOInt.OR.NOInt2) RETURN + IF(INDEX(LABel,'ADOPTED LEVELS, GAMMAS').GT.0) THEN + WRITE(IDEfo,'(A)')' ADOPTED LEVELS, GAMMAS'// & + & ' --- Intensities will not be reported' + NOInt2 = .TRUE. + RETURN + END IF + DO i = 1, Il + IF(EBI(i).NE.' '.OR.RIIn(i).NE.0.0.OR.RIOut(i).NE.0.0.OR. & + & TIIn(i).NE.0.0.OR.TIOut(i).NE.0.0) GO TO 30 + END DO + WRITE(IDEfo,'(A)')' No intensities given -'// & + & ' Intensity comparison will not be done.' + WRITE(rpt,'(/A)') ' No intensities given -'// & + & ' Intensity comparison will not be done.' + RETURN +!--- PRINT NORM. FACTORS + 30 WRITE(rpt,'(2A,E10.4,A,E8.2)') CHAR(12), 'NR=', ANR, '+-', DNR + WRITE(rpt,'(A,E10.4,A,E8.2)') 'NT=', ANT, '+-', DNT + WRITE(rpt,'(A,E10.4,A,E8.2)') 'BR=', BR, '+-', DBR + WRITE(rpt,'(A,E10.4,A,E8.2)') 'NB=', ANB, '+-', DNB + IF(NRBr+NTBr+NBBr.GT.0.0) THEN + WRITE(rpt,'(A)') ' ' + IF(NRBr.GT.0.0) WRITE(rpt,'(A,E10.4,A,E8.2,A)') 'NRBR=', NRBr, & + & '+-', DNRbr, ' from PN record' + IF(NTBr.GT.0.0) WRITE(rpt,'(A,E10.4,A,E8.2,A)') 'NTBR=', NTBr, & + & '+-', DNTbr, ' from PN record' + IF(NBBr.GT.0.0) WRITE(rpt,'(A,E10.4,A,E8.2,A)') 'NBBR=', NBBr, & + & '+-', DNBbr, ' from PN record' + END IF + CALL INTOUT(Il) + RETURN + END SUBROUTINE OUTPUT +! +!*********************************************************************** +! + SUBROUTINE INTOUT(Il) +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Il +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM + REAL(KIND=4), INTRINSIC :: ALOG10, REAL + REAL(KIND=8) :: DABS, DSQRT +! +! Local variables +! + CHARACTER(LEN=80) :: dgsf, gsf + CHARACTER(LEN=7) :: ffmt + CHARACTER(LEN=10) :: frnt + CHARACTER(LEN=2) :: frntd + INTEGER(KIND=4) :: i, j, k + INTEGER(KIND=4) :: INDEX + REAL(KIND=4) :: tnrff, dtnrff + REAL(KIND=8) :: dtnrf, tnrf + REAL(KIND=8) :: dgsfee, gsfee +! + INTEGER(KIND=4), PARAMETER :: na=6 + CHARACTER(LEN=8), DIMENSION(na) :: sa + CHARACTER(LEN=2), DIMENSION(na) :: sda + REAL(KIND=8), DIMENSION(na) :: a, da +! + gsfee = 0.0 + dgsfee = 0.0 +! + WRITE(rpt,10) + 10 FORMAT(/19X,3('RI',11X),3('TI',11X),' NET FEEDING'/4X,'LEVEL', & + & 2(8X,'(OUT)',8X,'(IN)',11X,'(NET)'),8X,'(CALC)',8X,'(INPUT)'/) +! + DO j = 1, Il + tnrf = 0.0 + dtnrf = 0.0 + a(1) = RIOut(j) + a(2) = RIIn(j) + a(3) = a(1) - a(2) + da(1) = DSQRT(DRIout(j)) + da(2) = DSQRT(DRIin(j)) + da(3) = DSQRT(DRIin(j)+DRIout(j)) + a(4) = TIOut(j) + a(5) = TIIn(j) + a(6) = a(4) - a(5) + IF(DTIout(j).GT.0.) THEN + da(4) = DSQRT(DTIout(j)) + ELSE + da(4) = 0.0 + END IF + IF(DTIin(j).GT.0.0) THEN + da(5) = DSQRT(DTIin(j)) + ELSE + da(5) = 0.0 + END IF + da(6) = DTIin(j) + DTIout(j) + IF(a(6).NE.0.0) THEN + IF(NRBr.EQ.0.0) THEN + tnrf = a(6)*ANR*BR + dtnrf = da(6)/a(6)/a(6) + DNR*DNR/ANR/ANR + DBR*DBR/BR/BR + ELSE + tnrf = a(6)*NRBr + dtnrf = da(6)/a(6)/a(6) + DNRbr*DNRbr/NRBr/NRBr + END IF + IF(dtnrf.GT.0.) THEN + dtnrf = DSQRT(dtnrf)*tnrf + dtnrf = DABS(dtnrf) + ELSE + dtnrf = 0.0 + END IF + IF(RLEv(j).EQ.0.0.AND.j.EQ.1) THEN + tnrf = 100.0*BR + tnrf + IF(tnrf.NE.0.0) THEN + dtnrf = ((100.+ANR*a(6))*DBR)**2 + (BR*a(6)*DNR) & + & **2 + da(6)*(BR*ANR)**2 + IF(dtnrf.GT.0.) THEN + dtnrf = DSQRT(dtnrf) + dtnrf = DABS(dtnrf) + ELSE + dtnrf = 0.0 + END IF + ELSE + dtnrf = 0.0 + END IF +!--- SAVE EXACT VALUE OF G.S. FEEDING FOR PRINTOUT AT END + gsfee = tnrf + dgsfee = dtnrf + END IF + ELSE + IF(NRBr.EQ.0.0.AND.ANR.EQ.1.0.AND.BR.EQ.1.0) dtnrf = da(6) + IF(NRBr.EQ.1.0) dtnrf = da(6) + IF(dtnrf.GT.0.) THEN + dtnrf = DSQRT(dtnrf) + dtnrf = DABS(dtnrf) + ELSE + dtnrf = 0.0 + END IF + END IF + IF(da(6).GT.0) THEN + da(6) = DSQRT(da(6)) + ELSE + da(6) = 0.0 + END IF + IF(a(5).NE.0.0) THEN + IF(DABS(da(5)/a(5)).LT.0.00001) da(5) = 0.0 + END IF + IF(a(6).NE.0.0) THEN + IF(DABS(da(6)/a(6)).LT.0.00001) da(6) = 0.0 + END IF + DO i = 1, na + CALL DCNVUS(a(i),da(i),sa(i),8,sda(i),2) + IF(sa(i)(1:1).EQ.'*') THEN + k=5 + CALL DCNVUS(a(i),0.0D0,sa(i),8,sda(i),-k) + Do While (k.GT.0 .AND. sa(i)(1:1).EQ.'*') + k=k-1 + CALL DCNVUS(a(i),0.0D0,sa(i),8,sda(i),-k) + sda(i) = ' ' + EndDo + END IF + END DO + IF(tnrf.NE.0) THEN + IF(DABS(dtnrf/tnrf).LT.0.00001) dtnrf = 0.0 + END IF + CALL DCNVUS(tnrf,dtnrf,frnt,10,frntd,2) + WRITE(rpt,20) ALEv(j), ADLev(j), (sa(k),sda(k),k=1,na), frnt, & + & frntd, EBI(j), DEBi(j) + 20 FORMAT(A10,1X,A2,6(2X,A8,1X,A2),2X,A10,1X,A2,2X,A10,1X,A2) + IF((tnrf-3*dtnrf).LT.0.0.AND.(tnrf+3*dtnrf).GT.0.0) THEN + tnrff=REAL(tnrf) + dtnrff=REAL(dtnrf) + CALL FNDLMT(tnrff,dtnrff) + END IF + END DO + IF(gsfee.NE.0.) THEN + ffmt = '(F .2)' + IF(gsfee.GT.0.) THEN + i = DLOG10(gsfee) + 0.5 + IF(i.LT.0) i = 0 + ELSE + i = DLOG10(-gsfee) + 0.5 + IF(i.LT.0) i = 0 + i = i + 1 + END IF + WRITE(ffmt(3:4),'(I2)') i + 4 + WRITE(gsf,FMT=ffmt) gsfee + CALL SQZSTR(gsf,' ') + IF(dgsfee.NE.0.) THEN + ffmt = '(F .2)' + i = DLOG10(dgsfee) + IF(i.LT.0) i = 0 + WRITE(ffmt(3:4),'(I2)') i + 4 + WRITE(dgsf,FMT=ffmt) dgsfee + CALL SQZSTR(dgsf,' ') + ELSE + dgsf = '0.00' + END IF + i = INDEX(dgsf,'.') + j = INDEX(gsf,'.') + WRITE(rpt,'(A)') 'NET FEEDING TO G.S. IS '//gsf(1:j+2) & + & //'+-'//dgsf(1:i+2) + END IF + RETURN + END SUBROUTINE INTOUT +! +!*********************************************************************** +! + SUBROUTINE DUMPIT +! + IMPLICIT NONE +! + REWIND iscr + DO WHILE (.TRUE.) + READ(iscr,'(A)',END=10) CARd + WRITE(iout,'(A)') CARd + END DO + 10 CLOSE(UNIT=iscr) + OPEN(UNIT=iscr,ACCESS='SEQUENTIAL',STATUS='SCRATCH') +! + RETURN + END SUBROUTINE DUMPIT +! +!*********************************************************************** +! + SUBROUTINE NEWOUT(Ieof,Il,Ilfix) +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Ieof, Il, Ilfix +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + CHARACTER(LEN=1), INTRINSIC :: CHAR + CHARACTER(LEN=80), EXTERNAL :: UPCASE + INTEGER(KIND=4), INTRINSIC :: INDEX, LEN_TRIM + INTEGER(KIND=4), EXTERNAL :: INDEXF +! +! Local variables +! + CHARACTER(LEN=14) :: flstr1, flstr2 + CHARACTER(LEN=81) :: newcrd + INTEGER(KIND=4) :: i, ifind, j, k, levin + REAL(KIND=8) :: e1, e2 +! + WRITE(rpt,'(2A)') & + & CHAR(12), 'Replacing Levels for: '//LABel(1:39) + DO i = 2, Il + IF(INDEX(ALEv(i),'SP')+INDEX(ALEv(i),'SN').GT.0) CYCLE + e1 = RLEv(i) + IF(NOFf.GT.0) THEN + DO j = 1, NOFf + IF(INDEX(ALEv(i),OFFchr(j)).GT.0) e1 = e1 + OFFset(j) + END DO + END IF + DO j = i - 1, 1, -1 + IF(INDEX(ALEv(j),'SP')+INDEX(ALEv(j),'SN').GT.0) CYCLE + e2 = RLEv(j) + IF(NOFf.GT.0) THEN + DO k = 1, NOFf + IF(INDEX(ALEv(j),OFFchr(k)).GT.0) e2 = e2 + OFFset(k) + END DO + END IF + IF(e1.LE.e2) THEN + IF(ALEv(i).NE.ALEv(j)) THEN + WRITE(IDEfo,'(1X,2A,I3,3A,I3,A)')ALEv(i), ' level(', & + & i, ') less than ', ALEv(j), ' level(', j, ')' + WRITE(rpt,'(2A,I3,3A,I3,A)') ALEv(i), ' level(', i, & + & ') less than ', ALEv(j), ' level(', j, ')' + ELSE + WRITE(IDEfo,'(1X,2A,I3,3A,I3,A)')ALEv(i), ' level(', & + & i ,') equal to ', ALEv(j), ' level(', j, ')' + WRITE(rpt,'(2A,I3,3A,I3,A)') ALEv(i), ' level(', i, & + & ') equal to ', ALEv(j), ' level(', j, ')' + END IF + EXIT + END IF + END DO + END DO + levin = 0 + flstr1 = 'FL=' + flstr2 = 'FL=' + REWIND iscr + DO WHILE (.TRUE.) + READ(iscr,'(A)',END=20) CARd + IF(CARd(6:7).EQ.' '.AND.CARd(8:9).NE.' '.AND.CARd(8:8) & + & .NE.'P'.AND.CARd(8:8).NE.'X') THEN + IF(DEGset) THEN + newcrd = CARd(1:6) + CALL ADDSTR(newcrd,7,'CL E$') + i = LEN_TRIM(newcrd) + 1 + CALL ADDSTR(newcrd,i,'IF |DE|g NOT GIVEN, +-') + i = LEN_TRIM(newcrd) + 1 + IF(DEGkev.GT.0.0) THEN + WRITE(newcrd(i:),'(F5.2,A)') DEGkev, & + & ' KEV ASSUMED FOR LEAST-SQUARES FITTING' + ELSE + WRITE(newcrd(i:),'(F5.2,A)') DEGpct, & + & '% ASSUMED FOR LEAST-SQUARES FITTING' + END IF + CALL LBSUP(newcrd(i:)) + WRITE(iout,'(A)') newcrd + DEGset = .FALSE. + END IF + IF(.NOT.(NOInt.OR.NOInt2)) THEN + IF(DRIset) THEN + newcrd = CARd(1:6) + CALL ADDSTR(newcrd,7,'CG RI$') + i = LEN_TRIM(newcrd) + 1 + CALL ADDSTR(newcrd,i,'IF DRI NOT, +-') + i = LEN_TRIM(newcrd) + 1 + IF(DRIrel.GT.0.0) THEN + WRITE(newcrd(i:),'(F5.2,A)') DRIrel, & + & ' ASSUMED FOR INTENSITY BALANCING' + ELSE + WRITE(newcrd(i:),'(F5.2,A)') DRIpct, & + & '% ASSUMED FOR INTENSITY BALANCING' + END IF + CALL LBSUP(newcrd(i:)) + WRITE(iout,'(A)') newcrd + DRIset = .FALSE. + END IF + IF(DTIset) THEN + newcrd = CARd(1:6) + CALL ADDSTR(newcrd,7,'CG TI$') + i = LEN_TRIM(newcrd) + 1 + CALL ADDSTR(newcrd,i,'IF DTI NOT GIVEN, +-') + i = LEN_TRIM(newcrd) + 1 + IF(DTIrel.GT.0.0) THEN + WRITE(newcrd(i:),'(F5.2,A)') DTIrel, & + & ' ASSUMED FOR INTENSITY BALANCING' + ELSE + WRITE(newcrd(i:),'(F5.2,A)') DTIpct, & + & '% ASSUMED FOR INTENSITY BALANCING' + END IF + CALL LBSUP(newcrd(i:)) + WRITE(iout,'(A)') newcrd + DTIset = .FALSE. + END IF + END IF + END IF + IF(UPCASE(CARd(7:10)).EQ.'DL E'.AND.UPCASE(CARd(20:)) & + & .EQ.'LEVEL ENERGY HELD FIXED IN LEAST-SQUARES ADJUSTMENT') & + & CYCLE + IF(CARd(6:8).NE.' L') THEN + IF(levin.GT.1.AND.CARd(7:8).EQ.' G'.AND.CARd(6:6).NE.' ') & + & THEN + IF(INDEXF(CARd,10,'FL=').GT.0) THEN + DO i = levin - 1, 1, -1 + flstr1(4:) = AILev(i) + CALL SQZSTR(flstr1,' ') + flstr2(4:) = ALEv(i) + CALL SQZSTR(flstr2,' ') + IF(flstr1.NE.flstr2) THEN + IF(INDEXF(CARd,10,'FL= ').GT.0) & + & CALL ADDSTR(flstr1,4,' ') + IF(INDEXF(CARd,10,TRIM(flstr1)).GT.0) THEN + WRITE(rpt,'(/9X,2A)') 'OLD CARD: ', CARd + CALL REPSTR(CARd,TRIM(flstr1),TRIM(flstr2)) + WRITE(iout,'(A)') CARd + WRITE(rpt,'(9X,2A,T106,A)') 'NEW CARD: ', & + & CARd, 'Replacing "FL" value' + GO TO 10 + END IF + END IF + END DO + WRITE(iout,'(A)') CARd + CYCLE + END IF + END IF + WRITE(iout,'(A)') CARd + CYCLE + END IF + levin = levin + 1 + IF(levin.GT.Il) THEN + WRITE(iout,'(A)') CARd + WRITE(rpt,'(A,I4,A,I4)') 'Error in level counting: ', & + & levin, ' ', Il + WRITE(rpt,'(/9X,2A)') 'OLD CARD: ', CARd + WRITE(rpt,'(/9X,2A,T104,A)') 'OLD CARD: ', CARd, 'KEPT' + CYCLE + END IF + IF(ALEv(levin)(1:1).EQ.'*') THEN + WRITE(iout,'(A)') CARd + WRITE(rpt,'(/9X,2A,T104,A)') 'OLD CARD: ', CARd, 'KEPT' + CYCLE + END IF + DO i = 1, Ilfix + IF(LEVfix(i).EQ.levin) THEN + ifind = INDEXF(CARd(1:19),10,'F') + If(ifind .EQ. 0)Then + ifind = INDEXF(CARd(1:19),10,'G') + EndIf + If(ifind .GT. 0)Then + If(CARD(ifind-1:ifind-1).EQ.'+' .OR. & + & CARD(ifind+1:ifind+1).EQ.'+')ifind=0 + EndIf + IF(ifind.LE.0) THEN + WRITE(iout,'(A)') CARd + WRITE(rpt,'(/9X,2A,T104,A)') 'OLD CARD: ', CARd, & + & 'KEPT' + IF(HOWfix(levin).EQ.'A'.AND.EL(levin).NE.0.0) THEN + CARd(7:) = 'DL E' + CARd(20:) = & + & 'LEVEL ENERGY HELD FIXED IN LEAST-SQUARES ADJUSTMENT' + WRITE(iout,'(A)') CARd + WRITE(rpt,'(20X,A,T104,A)') CARd, & + & '"D" COMMENT ADDED' + END IF + If(howfix(levin) .EQ. 'D')Then + CARd(7:) = 'DL E' + CARd(20:) = & + & 'LEVEL ENERGY HELD FIXED IN LEAST-SQUARES ADJUSTMENT' + WRITE(iout,'(A)') CARd + WRITE(rpt,'(20X,A,T104,A)') CARd, & + & '"D" COMMENT ADDED' + EndIf + ELSE + CARd(ifind:ifind) = ' ' + WRITE(iout,'(A)') CARd + WRITE(rpt,'(/9X,2A)') 'OLD CARD: ', CARd + WRITE(rpt,'(/9X,2A,T104,A)') 'OLD CARD: ', CARd, & + & 'KEPT' + CARd(7:) = 'DL E' + CARd(20:) = & + & 'LEVEL ENERGY HELD FIXED IN LEAST-SQUARES ADJUSTMENT' + WRITE(iout,'(A)') CARd + WRITE(rpt,'(20X,A,T104,A)') CARd, '"D" COMMENT ADDED' + END IF + GO TO 10 + END IF + END DO + IF(ALEv(levin).NE.AILev(levin).OR.ADLev(levin).NE.AIDlev(levin)& + & ) THEN + WRITE(rpt,'(/9X,2A)') 'OLD CARD: ', CARd + CALL LBSUP(ALEv(levin)) + CARd(10:19) = ALEv(levin) + CARd(20:21) = ADLev(levin) + WRITE(rpt,'(9X,2A)') 'NEW CARD: ', CARd + ELSE + WRITE(rpt,'(/9X,2A,T104,A)') 'OLD CARD: ', CARd, 'KEPT' + END IF + WRITE(iout,'(A)') CARd + 10 END DO + 20 IF(Ieof.EQ.999) THEN + WRITE(rpt,'(A)') 'Adding END record' + WRITE(iout,'(A)')' ' + END IF + CLOSE(UNIT=iscr) +! + RETURN + END SUBROUTINE NEWOUT +! +!*********************************************************************** +! + SUBROUTINE RADDEC(Il) +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Il +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX, MAX0, LEN_TRIM + INTEGER(KIND=4), EXTERNAL :: TYPSTR + REAL(KIND=8), INTRINSIC :: DABS +! +! Local variables +! + CHARACTER(LEN=10) :: tmpstr + INTEGER(KIND=4) :: i, j + REAL(KIND=8) :: ast1, ast2, ast3, ast4, ib, ie +! + IF(Il.EQ.0) THEN + WRITE(rpt,'(9X,A,T96,A)') & + & CArd, 'UNPLACED RADIATION IS IGNORED' + RETURN + ELSE + WRITE(rpt,'(9X,A)') CARd + END IF +! +! BETA OR ALPHA +! + CALL DCNVSU(CARd(22:29),CARd(30:31),ast1,ast2) + ib = ast1 + ast4 = 0.0 + IF(CARd(6:8).NE.' E') THEN + EBI(Il) = CARd(22:29) + DEBi(Il) = CARd(30:31) + IF(CARd(6:8).NE.' B') THEN + IF(DABS(BR-1.0).LE.0.0001) RETURN + ast3 = ast1*BR + IF(TYPSTR(DEBi(Il)).EQ.0.OR.TYPSTR(DEBi(Il)).EQ.1.OR. & + & TYPSTR(DEBi(Il)).EQ.-2) THEN + IF(ast3.GT.0.0) & + & ast4 = ast3*DSQRT((ast2/ast1)**2+(DBR/BR)**2) + CALL DCNVUS(ast3,ast4,EBI(Il),10,DEBi(Il),2) + IF(EBI(Il)(1:1).EQ.'*') THEN + IF(ast4.EQ.0.0) THEN + CALL DCNVUS(ast3,0.01*ast3,EBI(Il),10,DEBi(Il),2) + ELSE + CALL DCNVUS(ast3,0.0D0,EBI(Il),10,DEBi(Il),-4) + END IF + DEBi(Il) = ' ' + END IF + ELSE + tmpstr = CARd(22:29) + CALL LBSUP(tmpstr) + i = ISIGNI(tmpstr) + CALL DCNVUS(ast3,0.0D0,EBI(Il),10,tmpstr,-i) + END IF + RETURN + END IF + IF(NBBr.EQ.0.0) THEN + IF(ABS(BR*ANB-1.0).LE.0.0001) RETURN + ast3 = ast1*BR*ANB + IF(ast3.GT.0.0)ast4 = ast3*SQRT((ast2/ast1)**2+(DBR/BR)**2+(& + & DNB/ANB)**2) + ELSE + IF(NBBr.EQ.1.0) RETURN + ast3 = ast1*NBBr + IF(ast3.GT.0.0) ast4 = ast3*SQRT((ast2/ast1)**2+(DNBbr/NBBr)& + & **2) + END IF + IF(TYPSTR(DEBi(Il)).EQ.0.OR.TYPSTR(DEBi(Il)).EQ.1.OR. & + & TYPSTR(DEBi(Il)).EQ.-2) THEN + CALL DCNVUS(ast3,ast4,EBI(Il),10,DEBi(Il),2) + ELSE + tmpstr = CARd(22:29) + CALL LBSUP(tmpstr) + i = ISIGNI(tmpstr) + CALL DCNVUS(ast3,0.0D0,EBI(Il),10,tmpstr,-i) + END IF + RETURN + END IF +! +! CAPTURE ONLY +! + IF(CARd(65:74).EQ.' '.AND.CARd(32:39).EQ.' ') RETURN + ast4 = 0.0 + IF(CARd(65:74).NE.' ') THEN + tmpstr = CARd(65:74) + CALL LBSUP(tmpstr) + i = LEN_TRIM(tmpstr) + IF(i.LE.8) THEN + EBI(Il) = tmpstr(1:i) + DEBi(Il) = CARd(75:76) + IF(NBBr.EQ.0.0) THEN + IF(DABS(BR*ANB-1.0).LE.0.0001) RETURN + ELSE IF(DABS(NBBr-1.0).LE.0.0001) THEN + RETURN + END IF + END IF + CALL DCNVSU(CARd(65:74),CARd(75:76),ast1,ast2) + IF(NBBr.EQ.0.0) THEN + ast3 = ast1*BR*ANB + IF(ast3.GT.0.0) & + & ast4 = ast3*DSQRT((ast2/ast1)**2+(DBR/BR)**2+(DNB/ANB)**2) + ELSE + ast3 = ast1*NBBr + IF(ast3.GT.0.0) & + & ast4 = ast3*DSQRT((ast2/ast1)**2+(DNBbr/NBBr)**2) + END IF + IF(TYPSTR(DEBi(Il)).EQ.0.OR.TYPSTR(DEBi(Il)).EQ.1.OR. & + & TYPSTR(DEBi(Il)).EQ.-2) THEN + CALL DCNVUS(ast3,ast4,EBI(Il),10,DEBi(Il),2) + ELSE + tmpstr = CARd(65:74) + CALL LBSUP(tmpstr) + i = ISIGNI(tmpstr) + CALL DCNVUS(ast3,0.0D0,EBI(Il),10,tmpstr,-i) + END IF + RETURN + ELSE + IF(CARd(32:39).EQ.' ') THEN + RETURN + ELSE IF(CARd(22:29).EQ.' ') THEN + EBI(Il) = CARd(32:39) + DEBi(Il) = CARd(40:41) + IF(NBBr.EQ.0.0) THEN + IF(DABS(BR*ANB-1.0).LE.0.0001) RETURN + ELSE IF(DABS(NBBr-1.0).LE.0.0001) THEN + RETURN + END IF + END IF + CALL DCNVSU(CARd(32:39),CARd(40:41),ast3,ast4) + ie = ast3 + ast1 = ast1 + ast3 + ast2 = DSQRT(ast2**2+ast4**2) + ast4 = 0.0 + IF(NBBr.EQ.0.0) THEN + ast3 = ast1*BR*ANB + IF(ast3.GT.0.0) & + & ast4 = ast3*DSQRT((ast2/ast1)**2+(DBR/BR)**2+(DNB/ANB)**2) + ELSE + ast3 = ast1*NBBr + IF(ast3.GT.0.0) & + & ast4 = ast3*DSQRT((ast2/ast1)**2+(DNBbr/NBBr)**2) + END IF + IF(ib.GE.10.*ie) THEN + IF(TYPSTR(CARd(30:31)).NE.0.AND.TYPSTR(CARd(30:31)) & + & .NE.1.AND.TYPSTR(CARd(30:31)).NE.-2) THEN + tmpstr = CARd(22:29) + CALL LBSUP(tmpstr) + i = ISIGNI(tmpstr) + CALL DCNVUS(ast3,0.0D0,EBI(Il),10,tmpstr,-i) + DEBi(Il) = CARd(30:31) + RETURN + END IF + ELSE IF(ie.GE.10.*ib) THEN + IF(TYPSTR(CARd(40:41)).NE.0.AND.TYPSTR(CARd(40:41)) & + & .NE.1.AND.TYPSTR(CARd(40:41)).NE.-2) THEN + tmpstr = CARd(32:39) + CALL LBSUP(tmpstr) + i = ISIGNI(tmpstr) + CALL DCNVUS(ast3,0.0D0,EBI(Il),10,tmpstr,-i) + DEBi(Il) = CARd(40:41) + RETURN + END IF + ELSE IF(.NOT.(TYPSTR(CARd(30:31)).EQ.0.OR.TYPSTR(CARd(30:31)) & + & .EQ.1.OR.TYPSTR(CARd(30:31)).EQ.-2).OR. & + & .NOT.(TYPSTR(CARd(40:41)).EQ.0.OR.TYPSTR(CARd(40:41)) & + & .EQ.1.OR.TYPSTR(CARd(40:41)).EQ.-2)) THEN + tmpstr = CARd(22:29) + CALL LBSUP(tmpstr) + i = ISIGNI(tmpstr) + tmpstr = CARd(32:39) + CALL LBSUP(tmpstr) + j = ISIGNI(tmpstr) + IF(CARd(30:31).EQ.CARd(40:41)) THEN + DEBi(Il) = CARd(30:31) + ELSE IF(TYPSTR(CARd(30:31)).EQ.0.OR.TYPSTR(CARd(30:31)) & + & .EQ.1.OR.TYPSTR(CARd(30:31)).EQ.-2) THEN + DEBi(Il) = CARd(40:41) + ELSE IF(TYPSTR(CARd(40:41)).EQ.0.OR.TYPSTR(CARd(40:41)) & + & .EQ.1.OR.TYPSTR(CARd(40:41)).EQ.-2) THEN + DEBi(Il) = CARd(30:31) + ELSE + DEBi(Il) = '??' + END IF + CALL DCNVUS(ast3,0.0D0,EBI(Il),10,tmpstr,-MAX0(i,j)) + RETURN + END IF + CALL DCNVUS(ast3,ast4,EBI(Il),10,DEBi(Il),2) + END IF + RETURN + END SUBROUTINE RADDEC +! +!*********************************************************************** +! + INTEGER(KIND=4) FUNCTION ISIGNI(Str) +! +! Returns the number of significant digits in a left-justified +! numeric string +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Str +! +! Local variables +! + INTEGER(KIND=4), INTRINSIC :: INDEX, LEN_TRIM +! + ISIGNI = INDEX(Str,'E') + IF(ISIGNI.EQ.0) ISIGNI = LEN_TRIM(Str) + IF(ISIGNI.EQ.0) RETURN + IF(Str(1:2).EQ.'0.') THEN + ISIGNI = ISIGNI - 2 + ELSE + IF(INDEX(Str,'.').NE.0) ISIGNI = ISIGNI - 1 + END IF + RETURN + END FUNCTION ISIGNI +! +!*********************************************************************** +! + SUBROUTINE GAMDEC(Il,Ig,Ilfix) +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Ig, Il, Ilfix +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + INTEGER(KIND=4), INTRINSIC :: INDEX + INTEGER(KIND=4), EXTERNAL :: INDEXF, TYPSTR +! +! Local variables +! + CHARACTER(LEN=33) :: st1, st2 + CHARACTER(LEN=132) :: outline + LOGICAL(KIND=4) :: adjri, adjti + INTEGER(KIND=4) :: i, i1, i2, j, jmax, nchar + REAL(KIND=8) :: cc, dcc, diff, dri, dti, grec, ri, test, ti, tol, & + & x, y +! + IGNorg1 = .FALSE. + IGNorg2 = .FALSE. +! +! INDEX GAMMA ENERGY +! + IF(Il.GE.nle) THEN + WRITE(rpt,'(9X,A)') CARd + IGNorg1 = .TRUE. + RETURN + ELSE IF(Ig.GE.nga) THEN + WRITE(rpt,'(9X,A)') CARd + IGNorg1 = .TRUE. + WRITE(rpt,'(2A,4X,2A)') & + & '***** TOO MANY GAMMAS. LAST LEVEL AT E= ', AILev(Il), & + & 'SKIP GAMMA WITH E=', CARd(10:21) +! + RETURN + END IF + ri = 0.0 + ti = 0.0 + dri = 0.0 + dti = 0.0 + cc = 0.0 + dcc = 0.0 + Ig = Ig + 1 + adjri = .TRUE. + adjti = .TRUE. + CALL DCNVSU(CARd(10:19),CARd(20:21),EG(Ig),DEG(Ig)) + CALL DCNVSU(CARd(56:62),CARd(63:64),cc,dcc) +! +! Save CC,DCC for possible modification due to GAMMA continuation +! records +! + CCS = cc + DCCs = dcc +! +! EXCLUDE UNASSIGNED GAMMAS AND UNCERTAIN GAMMAS +! SAVE DETAILS FOR LATER COMPARISON +! + IF(Il.GT.0) THEN + IF(CARd(80:80).EQ.'?') THEN + IGNorg1 = .TRUE. + Ig = Ig - 1 + WRITE(rpt,'(9X,A,T96,A)') & + & CARd, 'UNCERTAIN GAMMA IS IGNORED' + RETURN + END IF + IF(TYPSTR(CARd(10:19)).EQ.1.OR.TYPSTR(CARd(10:19)).EQ.-2) THEN +! +! Check to see if assumed DRI or DTI should be ignored for +! this gamma +! + i = INDEXF(CARd(1:29),22,' E ') + IF(i.GE.22) THEN + CARd(i+1:i+1) = ' ' + adjri = .FALSE. + ELSE IF(CARd(28:29).EQ.' E') THEN + CARd(29:29) = ' ' + adjri = .FALSE. + ELSE IF(CARd(22:23).EQ.'E ') THEN + CARd(22:22) = ' ' + adjri = .FALSE. + END IF + i = INDEXF(CARd(1:74),65,' E ') + IF(i.GE.65) THEN + CARd(i+1:i+1) = ' ' + adjti = .FALSE. + ELSE IF(CARd(73:74).EQ.' E') THEN + CARd(73:74) = ' ' + adjti = .FALSE. + ELSE IF(CARd(65:66).EQ.'E ') THEN + CARd(65:65) = ' ' + adjti = .FALSE. + END IF + outline = ' '//CARd +! +! ASSIGN 1-KEV UNCERTAINTY IF NONE IS GIVEN +! + IF(DEG(Ig).EQ.0.0) THEN + IF(DEGkev.NE.0.0) THEN + IF(CARd(20:21).EQ.'AP') THEN + DEG(Ig) = 3.0*DEGkev + ELSE + DEG(Ig) = DEGkev + END IF + WRITE(outline(96:),'(A,F5.2,2A)') '+- ', DEG(Ig), & + & ' keV', ' unc. assigned to energy' + WRITE(rpt,'(A)') TRIM(outline) + outline = ' ' + DEGset = .TRUE. + ELSE IF(DEGpct.NE.0.0) THEN + IF(CARd(20:21).EQ.'AP') THEN + DEG(Ig) = 3.0*EG(Ig)*DEGpct/100.0 + ELSE + DEG(Ig) = EG(Ig)*DEGpct/100.0 + END IF + WRITE(outline(96:),'(A,F5.2,2A)') '+- ', DEGpct, & + & ' %', ' unc. assigned to energy' + WRITE(rpt,'(A)') TRIM(outline) + outline = ' ' + DEGset = .TRUE. + ELSE + IF(CARd(20:21).EQ.'AP') THEN + DEG(Ig) = 3.0 + ELSE + DEG(Ig) = 1.0 + END IF + WRITE(outline(96:),'(A,F5.2,2A)') '+- ', DEG(Ig), & + & ' keV', ' unc. assigned to energy' + WRITE(rpt,'(A)') TRIM(outline) + outline = ' ' + END IF + END IF +! +! APPLY RECOIL CORRECTION +! + grec = EG(Ig)**2/(2.0*EMAss) + IF(grec.GT.0.005*DEG(Ig)) THEN + x = EG(Ig)/EMAss + test = (EG(Ig)*x*x*x/8.)*(1.-(x*x/2.)) + IF(ABS(test).GT.0.1*grec) THEN + WRITE(IDEfo,'(A)') & + & ' WARNING: Recoil approximation imprecise' + WRITE(IDEfo,'(3(A,F5.2))')' RECOIL=', grec, ' EG=', & + & EG(Ig), '+-', DEG(Ig) + END IF + END IF + IF(RECoil) THEN + egc(Ig) = EG(Ig) + grec + ELSE + egc(Ig) = EG(Ig) + EG(Ig) = EG(Ig) - grec + END IF +! +! WEIGHT EACH GAMMA MEASUREMENT BY RECIPROCAL UNCERTAINTY +! + y = 1.0/DEG(Ig)**2 + LTOp(Ig) = Il +! +! FIND AND DECODE INTENSITIES (RI AND TI) +! + st1 = CARd(22:29) + IF(st1.NE.' '.AND.TYPSTR(st1).NE.2) THEN + st2 = CARd(30:31) + CALL DCNVSU(st1,st2,ri,dri) + IF((st2.EQ.' '.OR.st2.EQ.'AP').AND.ri.NE.0.0.AND.adjri) & + & THEN + IF(DRIrel.NE.0) THEN + IF(st2.EQ.'AP') THEN + dri = 3.*DRIrel + ELSE + dri = DRIrel + END IF + WRITE(outline(96:),'(A,F5.2,A)') 'DRI=', dri, & + & ' assumed' + WRITE(rpt,'(A)') TRIM(outline) + outline = ' ' + DRIset = .TRUE. + ELSE IF(DRIpct.NE.0) THEN + IF(st2.EQ.'AP') THEN + dri = 3.0*DRIpct/100.0 + +! ***Changes by PNPI*** + + WRITE(outline(96:),'(A,F5.2,A)') 'DRI=', & + & 3.0*DRIpct, '% assumed' + ELSE + dri = ri*DRIpct/100.0 + WRITE(outline(96:),'(A,F5.2,A)') 'DRI=', & + & DRIpct, '% assumed' + END IF + +! ***End Changes by PNPI*** + + WRITE(rpt,'(A)') TRIM(outline) + outline = ' ' + DRIset = .TRUE. + END IF + ELSE IF(st2(1:1).EQ.'L') THEN + ri = ri/2. + dri = ri/2. + WRITE(outline(96:),'(A)') 'RI=DRI=RI/2 assumed' + WRITE(rpt,'(A)') TRIM(outline) + outline = ' ' + END IF + END IF + st1 = CARd(65:74) + st2 = CARd(75:76) + CALL DCNVSU(st1,st2,ti,dti) + IF(ti.EQ.0.0) THEN + IF(st1.NE.' ') THEN + WRITE(outline(96:),'(A)') 'TI assumed to be zero' + WRITE(rpt,'(A)') TRIM(outline) + outline = ' ' + END IF + ti = ri*(1.0+cc) + dti = 0.0 + IF(ri.EQ.0.0) GO TO 10 + If(dcc .EQ. 0.0)Then + dti=dri**2/ri**2+(theodcc*theodcc*cc*cc)/(1.0+cc)**2 + Else + If(adddcc)Then + dti=dri**2/ri**2+(dcc**2+(theodcc*cc)**2)/(1.0+cc)**2 + Else + dti=dri**2/ri**2+(dcc/(1.0+cc))**2 + EndIf + EndIf + dti = dti*ti*ti + GO TO 10 + ELSE IF((st2.EQ.' '.OR.st2.EQ.'AP').AND.adjti) THEN + IF(DTIrel.NE.0) THEN + IF(st2.EQ.'AP') THEN + dti = 3.0*DTIrel + ELSE + dti = DTIrel + END IF + WRITE(outline(96:),'(A,F5.2,A)') 'DTI=', dti, & + & ' assumed' + WRITE(rpt,'(A)') TRIM(outline) + outline = ' ' + DTIset = .TRUE. + ELSE IF(DTIpct.NE.0) THEN + IF(st2.EQ.'AP') THEN + dti = 3.0*ti*DTIpct/100.0 + WRITE(outline(96:),'(A,F5.2,A)') 'DTI=', & + & 3.0*DTIpct, '% assumed' + + ELSE + dti = ti*DTIpct/100.0 + WRITE(outline(96:),'(A,F5.2,A)') 'DTI=', & + & DTIpct, '% assumed' + + END IF + WRITE(rpt,'(A)') TRIM(outline) + outline = ' ' + DTIset = .TRUE. + END IF + ELSE IF(st2(1:1).EQ.'L') THEN + ti = ti/2. + dti = ti/2. + WRITE(outline(96:),'(A)') 'TI=DTI=TI/2 assumed' + WRITE(rpt,'(A)') TRIM(outline) + outline = ' ' + END IF + IF(CARd(77:77).EQ.'&') THEN + ri = (ri+dri)/2.0 + dri = ri + ti = (ti+dti)/2.0 + dti = ti + IF(ri.GT.0.) THEN + WRITE(outline(96:),'(A)') 'RI=DRI=(RI+DRI)/2 assumed' + WRITE(rpt,'(A)') TRIM(outline) + outline = ' ' + END IF + IF(ti.GT.0.) THEN + WRITE(outline(96:),'(A)') 'TI=DTI=(TI+DTI)/2 assumed' + WRITE(rpt,'(A)') TRIM(outline) + outline = ' ' + END IF + END IF + IF((ANT.EQ.0.0).OR.(ANR.EQ.0.0)) GO TO 10 + IF(NRBr.NE.0.0.AND.NTBr.NE.0.0) THEN + ti = ti*NTBr/NRBr + dti = dti*NTBr/NRBr + dti = ti*ti*((dti/ti)**2+(DNTbr/NTBr)**2-(DNRbr/NRBr)**2) + ELSE + ti = ti*ANT/ANR + dti = dti*ANT/ANR + dti = ti*ti*((dti/ti)**2+(DNT/ANT)**2-(DNR/ANR)**2) + END IF + GO TO 10 + ELSE + IGNorg1 = .TRUE. + Ig = Ig - 1 + WRITE(rpt,'(9X,A,T96,A)') CARd, 'NON-NUMERIC EG IGNORED' + RETURN + END IF + END IF + IGNorg1 = .TRUE. + Ig = Ig - 1 + WRITE(rpt,'(9X,A,T96,A)') CARd, 'UNPLACED GAMMA IGNORED' + RETURN +! +! FIND TERMINATING (LOWER) LEVEL FOR GAMMA(IG), CALL IT LBOT(IG) +! + 10 IF(outline.NE.' ') THEN + WRITE(rpt,'(A)') TRIM(outline) + outline = ' ' + END IF + LBOt(Ig) = 0 + tol = 10.04 + If(deg(ig) .GT. tol)Then + tol=deg(ig) + EndIf + diff = 1000. + jmax = Il - 1 + DO j = 1, jmax + IF(NOFf.GT.0) THEN + nchar = 0 + DO i = 1, NOFf + IF(INDEX(AILev(Il),OFFchr(i)).GT.0) nchar = nchar + 1 + IF(INDEX(AILev(j),OFFchr(i)).GT.0) nchar = nchar + 1 + IF(nchar.EQ.1) GO TO 20 + END DO + END IF + diff = ABS(EL(Il)-EL(j)-egc(Ig)) + IF(diff.GE.tol) CYCLE + LBOt(Ig) = j + tol = diff + 20 END DO + IF(LBOt(Ig).EQ.0) THEN + WRITE(rpt,'(5A,F5.1,A)')'***** GAMMA= ', CARd(10:19), & + & ' CANNOT BE PLACED FROM LEVEL ', & + & AILev(Il), ' WITHIN +-', tol, ' keV' + IGNorg2 = .TRUE. + + END IF +! +! Add to packed vector WAA(STRLOC(I1,I2)) representing the weights +! matrix + i1 = LTOp(Ig) + i2 = LBOt(Ig) + IF(i1.LE.i2) THEN + WRITE(rpt,'(5A)') '***** ERROR--GAMMA=', CARd(10:19), & + & ' WILL NOT FIT LEVELS', AILev(i1), AILev(i2) + END IF + x = egc(Ig) + If(.NOT.ignorg2)Then + CALL GCALC(i1,i2,Ilfix,x,y,ri,dri,ti,dti) + ElseIf(.NOT.ignorg1)Then + riout(i1) = riout(i1) + ri + driout(i1) = driout(i1) + dri**2 + tiout(i1) = tiout(i1) + ti + dtiout(i1) = dtiout(i1) + dti + EndIf + RETURN + END SUBROUTINE GAMDEC +! +!*********************************************************************** +! + SUBROUTINE LEVDEC(Il,Ilfix,Ig,Nga,Issep,isxlv) +! + IMPLICIT NONE +! +! Dummy arguments +! + LOGICAL(KIND=4) :: Issep,isxlv + INTEGER(KIND=4) :: Ig, Il, Ilfix, Nga +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX + INTEGER(KIND=4), EXTERNAL :: TYPSTR + INTEGER(KIND=4), EXTERNAL :: INDEXF + CHARACTER(LEN=*), INTRINSIC :: TRIM + REAL(KIND=8), INTRINSIC :: DBLE, DFLOAT +! +! Local variables +! + CHARACTER(LEN=10) :: st1, tmp1, tmp2 + CHARACTER(LEN=2) :: st2 + INTEGER(KIND=4) :: i, ip, isfixed + REAL(KIND=8) :: dummy +! +! Bookkeeping for levels of the type "num+X" +! +! INDEX LEVEL ENERGY +! + Issep = .FALSE. + isxlv=.FALSE. + IF(Ig.GE.Nga) RETURN + IF(Il.GE.nle) THEN + WRITE(rpt,'(2A)') '***** TOO MANY LEVELS. SKIPPED LEVEL: ', & + & CARd(10:21) + RETURN + END IF + Il = Il + 1 + st1 = CARd(10:19) + CALL LBSUP(st1) + st2 = CARd(20:21) +! Always assume first level is fixed. This should alleviate some +! problems +! Also set counter on offsets + + isfixed=INDEX(st1,'F') + If(isfixed .EQ. 0)isfixed=INDEX(st1,'G') + +! ***Changes by PNPI*** + + If(isfixed .GT. 0.AND.isfixed.lt.10)Then + If(st1(isfixed+1:isfixed+1).EQ.'+')isfixed=0 + EndIf + If(isfixed .GT. 1)Then + If(st1(isfixed-1:isfixed-1).EQ.'+')isfixed=0 + EndIf + +! ***End Changes by PNPI*** + + If(Il.EQ.1 .AND. isfixed.EQ.0)Then + NOFf = 0 + IF(TYPSTR(st1).EQ.1.OR.TYPSTR(st1).EQ.-2) THEN + CALL DCNVSU(st1,st2,elfix(Ilfix),dummy) + EL(Il) = elfix(Ilfix) + ELSE + NOFf = NOFf + 1 + OFFset(NOFf) = DFLOAT(NOFf)*0.01 + IF(TYPSTR(st1).EQ.2) THEN + OFFchr(NOFf) = st1(1:1) + elfix(Ilfix) = OFFset(NOFf) + EL(Il) = elfix(Ilfix) + ELSE + i = INDEX(st1,'+') + IF(i.EQ.0) i = INDEX(st1,'-') + IF(i.EQ.0) THEN + EL(Il) = 0.0 + NOFf = NOFf - 1 + GO TO 20 + END IF + IF(i.EQ.2) THEN + IF(TYPSTR(st1(1:1)).EQ.2) THEN + OFFchr(NOFf) = st1(1:1) + CALL DCNVSU(st1(i+1:),st2,elfix(Ilfix),dummy) + ELSE + OFFchr(NOFf) = st1(i+1:i+2) + CALL DCNVSU(st1(1:i-1),st2,elfix(Ilfix),dummy) + END IF + ELSE IF(TYPSTR(st1(1:i-1)).EQ.2) THEN + EL(Il) = 0.0 + NOFf = NOFf - 1 + GO TO 20 + ELSE + OFFchr(NOFf) = st1(i+1:i+2) + CALL DCNVSU(st1(1:i-1),st2,elfix(Ilfix),dummy) + END IF + elfix(Ilfix) = elfix(Ilfix) + OFFset(NOFf) + EL(Il) = elfix(Ilfix) + END IF + END IF + HOWfix(Il) = 'A' + Ilfix = Ilfix + 1 + GO TO 20 + ELSE + HOWfix(Il) = ' ' + END IF + IF(st1.EQ.' ') THEN +! +! HOLD UNKNOWN ENERGIES (BLANK ENERGY FIELD) FIXED +! + HOWfix(Il) = 'A' + IF(Ilfix.GT.nfix) THEN + WRITE(rpt,'(A,I4)') & + & '***** TOO MANY LEVELS FIXED. MAXIMUM IS', nfix + Ilfix = nfix + END IF + elfix(Ilfix) = Il*10**5 + EL(Il) = elfix(Ilfix) + Ilfix = Ilfix + 1 + WRITE(rpt,'(A,I4,A)') 'Blank E(LEVEL) for level ', Il, & + & ' assumed fixed by GTOL' + GO TO 20 + END IF +!--- HOLD ENERGIES WITH 'F' IN ENERGY FIELD FIXED + isfixed=INDEXF(card(1:19),10,'F') + If(isfixed .EQ. 0)isfixed=INDEXF(card(1:19),10,'G') + +! ***Changes by PNPI*** + + If(isfixed .GT. 9.AND.isfixed.LT.19)Then + If(st1(isfixed-8:isfixed-8).EQ.'+')isfixed=0 + EndIf + If(isfixed .GT. 10)Then + If(st1(isfixed-10:isfixed-10).EQ.'+')isfixed=0 + EndIf + +! ***End Changes by PNPI*** + + If(isfixed .GT. 0) THEN + IF(Ilfix.GT.nfix) THEN + WRITE(rpt,'(A,I4)') & + & '***** TOO MANY LEVELS FIXED. MAXIMUM IS', nfix + Ilfix = nfix + END IF + CALL DCNVSU(st1,st2,elfix(Ilfix),dummy) + EL(Il) = elfix(Ilfix) + Ilfix = Ilfix + 1 + HOWfix(Il) = card(isfixed:isfixed) + ELSE IF(TYPSTR(st1).EQ.2) THEN + IF(NOFf.GT.0) THEN + DO i = 1, NOFf + IF(st1(1:1).EQ.OFFchr(i)) THEN + EL(Il) = OFFset(i) + GO TO 20 + END IF + END DO + END IF + NOFf = NOFf + 1 + OFFchr(NOFf) = st1(1:1) + OFFset(NOFf) = DFLOAT(NOFf)*0.01 + EL(Il-1) + IF(Ilfix.GT.nfix) THEN + WRITE(rpt,'(A,I4)') & + & '***** TOO MANY LEVELS FIXED. MAXIMUM IS', nfix + Ilfix = nfix + END IF + elfix(Ilfix) = OFFset(NOFf) + EL(Il) = elfix(Ilfix) + Ilfix = Ilfix + 1 + HOWfix(Il) = 'A' + ELSE IF(TYPSTR(st1).EQ.1.OR.TYPSTR(st1).EQ.-2) THEN + CALL DCNVSU(st1,st2,EL(Il),dummy) + ELSE IF(INDEX(st1,'SP').EQ.0.AND.INDEX(st1,'SN').EQ.0) THEN + ip = INDEX(st1,'+') + IF(ip.EQ.0) ip = INDEX(st1,'-') + IF(ip.EQ.0) THEN + CALL DCNVSU(st1,st2,EL(Il),dummy) + ELSE + tmp1 = st1(1:ip-1) + tmp2 = st1(ip+1:) + IF(TYPSTR(tmp1).EQ.2) THEN + CALL DCNVSU(tmp2,st2,EL(Il),dummy) + IF(NOFf.GT.0) THEN + DO WHILE (.TRUE.) + DO i = 1, NOFf + IF(OFFchr(i).EQ.tmp1(1:1)) THEN + EL(Il) = EL(Il) + OFFset(i) + ip = INDEX(tmp2,'+') + IF(ip.GT.0) THEN + tmp2 = tmp2(ip+1:) + GO TO 5 + END IF + GO TO 20 + END IF + END DO + EXIT + 5 END DO + END IF + isxlv=.TRUE. + WRITE(rpt,'(92X,2A)') TRIM(st1),' - Ignoring gammas' + NOFf = NOFf + 1 + OFFchr(NOFf) = tmp1(1:1) + ELSE + CALL DCNVSU(tmp1,st2,EL(Il),dummy) + IF(NOFf.GT.0) THEN + DO WHILE (.TRUE.) + DO i = 1, NOFf + IF(OFFchr(i).EQ.tmp2(1:1)) THEN + EL(Il) = EL(Il) + OFFset(i) + ip = INDEX(tmp2,'+') + IF(ip.GT.0) THEN + tmp2 = tmp2(ip+1:) + GO TO 10 + END IF + GO TO 20 + END IF + END DO + EXIT + 10 END DO + END IF + isxlv=.TRUE. + WRITE(rpt,'(92X,2A)') TRIM(st1),' - Ignoring gammas' + NOFf = NOFf + 1 + OFFchr(NOFf) = tmp2(1:1) + END IF + OFFset(NOFf) = DFLOAT(NOFf)*0.01 + IF(Ilfix.GT.nfix) THEN + WRITE(rpt,'(A,I4)') & + & '***** TOO MANY LEVELS FIXED. MAXIMUM IS', nfix + Ilfix = nfix + END IF + elfix(Ilfix) = EL(Il) + OFFset(NOFf) + IF(Il.GT.1) THEN + IF(elfix(Ilfix).LE.EL(Il-1)) THEN + OFFset(NOFf) = EL(Il-1) - elfix(Ilfix) & + & + 0.01 + OFFset(NOFf) + elfix(Ilfix) = EL(Il) + OFFset(NOFf) + END IF + END IF + EL(Il) = elfix(Ilfix) + Ilfix = Ilfix + 1 + HOWfix(Il) = 'A' + END IF + ELSE IF(INDEX(st1,'SP').GT.0.OR.INDEX(st1,'SN').GT.0) THEN + WRITE(rpt,'(92X,A)') 'SP or SN found - Ignoring' + IF(Ilfix.GT.nfix) THEN + WRITE(rpt,'(A,I4)') & + & '***** TOO MANY LEVELS FIXED. MAXIMUM IS', nfix + Ilfix = nfix + END IF + elfix(Ilfix) = Il*10.**9 + EL(Il) = elfix(Ilfix) + Ilfix = Ilfix + 1 + Issep = .TRUE. + END IF +! +! SAVE INPUT LEVEL BCD FOR OUTPUT LISTS +! + 20 CALL SQZSTR(st1,' ') + IF(INDEX(st1,'F').NE.0) CALL SQZSTR(st1,'F') + IF(INDEX(st1,'G').NE.0) CALL SQZSTR(st1,'G') + CALL SQZSTR(st2,' ') + CALL PADLFT(st1,10) + CALL PADLFT(st2,2) + AILev(Il) = st1 + AIDlev(Il) = st2 +! +! CHECK TO SEE IF ENERGY IS TO BE HELD FIXED +! + DO i = 1, Ilfix + IF(EL(Il).EQ.elfix(i)) THEN + LEVfix(i) = Il + RETURN + END IF + END DO + RETURN + END SUBROUTINE LEVDEC +! +!*********************************************************************** +! + SUBROUTINE NORDEC +! + IMPLICIT NONE +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX +! +! Local variables +! + CHARACTER(LEN=33) :: st1, st2 + LOGICAL(KIND=4) :: didone +! +! NORMALIZATION CARD +! + didone = .FALSE. + CALL DCNVSU(CARd(10:19),CARd(20:21),ANR,DNR) + IF(ANR.LE.0.0) THEN + WRITE(rpt,'(9X,A,T93,A)') CARd, 'NR assumed 1.0' + didone = .TRUE. + ANR = 1.0 + DNR = 0.0 + ELSE + WRITE(rpt,'(9X,A)') CARd + END IF + CALL DCNVSU(CARd(22:29),CARd(30:31),ANT,DNT) + IF(ANT.LE.0.0) THEN + IF(didone) THEN + WRITE(rpt,'(92X,A)') 'NT assumed to be NR' + ELSE + WRITE(rpt,'(9X,A,T93,A)') CARd, 'NT assumed to be NR' + didone = .TRUE. + END IF + ANT = ANR + DNT = DNR + END IF + CALL DCNVSU(CARd(32:39),CARd(40:41),BR,DBR) + st1 = CARd(42:49) + IF(st1.NE.' ') THEN + st2 = CARd(50:55) + CALL DCNVSU(st1,st2,ANB,DNB) + END IF + IF(BR.LE.0.0) THEN + IF(INDEX(LABel,' DECAY').GT.0) THEN + IF(didone) THEN + WRITE(rpt,'(92X,A)') 'BR assumed 1.0' + ELSE + WRITE(rpt,'(9X,A,T93,A)') CARd, 'BR assumed 1.0' + didone = .TRUE. + END IF + END IF + BR = 1.0 + DBR = 0.0 + END IF + IF(ANB.EQ.0.0) THEN + IF(INDEX(LABel,' B- ').GT.0.OR.INDEX(LABel,' B+ ').GT.0.OR. & + & INDEX(LABel,' EC ').GT.0) THEN + IF(didone) THEN + WRITE(rpt,'(92X,A)') 'NB assumed 1.0/BR' + ELSE + WRITE(rpt,'(9X,A,T93,A)') CARd,'NB assumed 1.0/BR' + END IF + ANB = 1.0/BR + ELSE + ANB = 1.0 + END IF + DNB = 0.0 + END IF + RETURN + END SUBROUTINE NORDEC +! +!*********************************************************************** +! + SUBROUTINE PNDEC +! + IMPLICIT NONE +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX +! +! Decodes the PN record +! + IF(CARd(78:78).EQ.'6'.OR.CARd(78:78).EQ.'7') THEN + WRITE(rpt,'(9X,A,T96,A)') CARd, 'BRANCHING RATIOS SPECIFIED' + WRITE(IDEfo,'(2A)')' Option 6 or 7 on PN record', & + & ' --- Intensities will not be reported' + NOInt2 = .TRUE. + RETURN + ELSE + WRITE(rpt,'(9X,A)') CARd + END IF + IF(((CARd(78:78).GE.'2'.AND.CARd(78:78).LE.'4').OR.CARd(78:78) & + & .EQ.' ').AND.CARd(10:77).NE.' ') THEN + IF(CARd(10:19).NE.' ')CALL DCNVSU(CARd(10:19),CARd(20:21),NRBr,& + & DNRbr) + IF(CARd(22:29).NE.' ')CALL DCNVSU(CARd(22:29),CARd(30:31),NTBr,& + & DNTbr) + IF(CARd(42:49).NE.' '.AND. & + & (INDEX(LABel,' B- ').GT.0.OR.INDEX(LABel,' B+ ').GT.0.OR. & + & INDEX(LABel,' EC ').GT.0)) & + & CALL DCNVSU(CARd(42:49),CARd(50:55),NBBr,DNBbr) + END IF + RETURN + END SUBROUTINE PNDEC +! +!*********************************************************************** +! + SUBROUTINE IDDEC +! + IMPLICIT NONE +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX +! +! Local variables +! + INTEGER(KIND=4) :: i +! +! ID RECORD +! + WRITE(IDEfo,'(/2A)') ' CURRENT DATA SET: ', CARd(1:39) +! +! SET UP FOR RECOIL CORRECTION +! + CALL AZ(CARd(1:5),IAMass,IZ) + IF(IAMass.EQ.0) IAMass = 1 + EMAss = 931501.6D0*IAMass + LABel = CARd +! +! CHECK DSID FOR INDICATION OF GAMMAS +! + NOGam = .FALSE. + i = INDEX(CARd(10:39),' ') + IF(i.EQ.0) i = 30 + IF(INDEX(CARd(10:9+i),'[').EQ.0) THEN + IF(INDEX(CARd(10:39),',G'')').NE.0) RETURN + IF(INDEX(CARd(10:39),'G)').NE.0) RETURN + IF(INDEX(CARd(10:39),'GAMMA').NE.0) RETURN + IF(INDEX(CARd(10:39),'COUL').NE.0) RETURN + IF(INDEX(CARd(10:39),'DECAY').NE.0) RETURN + END IF + NOGam = .TRUE. + WRITE(IDEfo,'(3X,A)') & + & 'No gammas expected. Data set will not be reported on.' + WRITE(rpt,'(2X,A)') & + & 'No gammas expected. Data set will not be reported on.' +! + RETURN + END SUBROUTINE IDDEC +! +!*********************************************************************** +! + SUBROUTINE AZ(Str,A,Z) +! +! adopted from Swedish string library +! PROGRAM UNIT 24 +! GETS MASS NUMBER A (INTEGER) AND ATOMIC NUMBER Z (INTEGER) +! FROM STRING STR. +! DUMMY ARGUMENTS: +! STR INPUT STRING (NUCID) +! A MASS NUMBER (ASSIGNED) +! Z ATOMIC NUMBER (ASSIGNED) +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: A, Z + CHARACTER(LEN=*) :: Str +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: MIN0, LEN_TRIM + INTEGER(KIND=4), EXTERNAL :: IVLSTR, TYPSTR +! +! Local variables +! + CHARACTER(LEN=3) :: astr + CHARACTER(LEN=2) :: el + INTEGER(KIND=4) :: ie, is +! +!--- GET A + astr = Str(1:3) + CALL SQZSTR(astr,' ') + IF(TYPSTR(Str(1:5)).EQ.1) THEN +!--- A>103 --> ELEMENT SYMBOL IS NUMBER. SINCE NUCID IS +!--- 5 CHARACTERS LONG, A MUST BE CH. 1-3 AND Z MUST BE CH. 4-5. + el = Str(4:5) + CALL IZEL(el,Z) + GO TO 10 + END IF +! +!--- FIND OUT WHERE ELEMENT SYMBOL STARTS AND ENDS + ie = MIN0(LEN_TRIM(Str),5) + is = ie - 1 +!--- MAKE SURE THAT IS POINTS TO AN ALPHA CHARACTER; IF NOT, +!--- ELEMENT CODE IS ONE LETTER. + IF(TYPSTR(Str(is:is)).NE.2) is = ie +!--- GET Z + el = Str(is:ie) + 10 A = IVLSTR(astr) + CALL IZEL(el,Z) + RETURN + END SUBROUTINE AZ +! +!*********************************************************************** +! + SUBROUTINE FNDLMT(X,Dx) +! +! Estimates the upper limit (90% C.L.) for a normal distribution +! using the method described by Louis Lyons on in Fig 4.3 and +! Table 4.1 of Statistics for nuclear and particle physicists +! (Cambridge University Press) +! + IMPLICIT NONE +! +! Functions used +! + REAL(KIND=4), INTRINSIC :: ABS +! +! Dummy arguments +! + REAL(KIND=4) :: Dx, X +! +! Local variables +! + INTEGER(KIND=4) :: counts + REAL(KIND=4) :: area, b1, b2, denom, high, low, prob +! + MU = X + SIGma = Dx + b2 = MU + 1.28*SIGma + high = MU + 10.0*SIGma + CALL QROMB(0.0,high,denom) + low = MU + 1.28*SIGma + IF(low.LE.0.0) low = 5.0*SIGma + counts = 1 + DO WHILE (.TRUE.) + CALL QROMB(0.0,low,area) + prob = area/denom + IF((prob.GE.0.899.AND.prob.LE.0.901).OR.counts.GT.100) THEN + b1 = low + IF(ABS(b1-b2).GT.0.01.OR.counts.GT.100) THEN + WRITE(rpt,'(10X,A)') 'Upper limit (90% C.L.) estimates:' + WRITE(rpt,'(12X,A,F8.2)') 'Method 1: ', b1 + WRITE(rpt,'(12X,A,F8.2)') 'Method 2: ', b2 + IF(counts.GT.100) THEN + WRITE(rpt,'(12X,A,F8.2,A)')'(Method 1 not converged', & + & 100.0*prob, ')' + END IF + END IF + ELSE + IF(prob.LT.0.90) THEN + low = (low+high)/2. + ELSE + high = low + low = high/2.0 + END IF + counts = counts + 1 + CYCLE + END IF + RETURN + END DO + END SUBROUTINE FNDLMT +! +!*********************************************************************** +! + REAL(KIND=4) FUNCTION NORMFUNC(X) +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=4) :: X +! +! Functions used +! + REAL(KIND=8), INTRINSIC :: DEXP, DSQRT +! +! Local variables +! + REAL(KIND=8) :: tmp +! +! Function for a Normal distribution +! + tmp = (X-MU)*(X-MU)/(2.D0*SIGma*SIGma) + tmp = DEXP(-tmp) + tmp = tmp/SIGma + tmp = tmp/DSQRT(6.283185307D0) + NORMFUNC = tmp +! + RETURN + END FUNCTION NORMFUNC +! +!*********************************************************************** +! + SUBROUTINE QROMB(A,B,Ss) +! +! Returns as SS the integral of the function FUNC FROM A TO B. +! Integration is performed by Romberg's method of order 2K, +! where, e.g., K=2 is Simpson's Rule +! [Numerical Recipes (The Art of Scientific Computing). W.H. Press, +! et al. Cambridge University Press (NY, 1986), p.114] +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=4) :: A, B, Ss +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INT + REAL(KIND=4), INTRINSIC :: ABS, ALOG10 + REAL(KIND=8), INTRINSIC :: DABS, DBLE +! +! Local variables +! + INTEGER(KIND=4), SAVE :: j, jj + REAL(KIND=4), SAVE :: dss + REAL(KIND=4), PARAMETER :: eps = 1.0E-5 +! + INTEGER(KIND=4), PARAMETER :: jmax = 20, jmaxp = jmax + 1, k = 3, & + & km = k - 1 + REAL(KIND=4), DIMENSION(jmaxp), SAVE :: h, s +! + Ss = 0. + dss = 0. + h(1) = 1. + DO j = 1, jmax + jj = j + CALL TRAPZD(A,B,s(j),jj) + IF(j.GE.k) THEN + CALL POLINT(h(j-km),s(j-km),k,0.,Ss,dss) +! Add check for when integral is zero + IF(Ss.EQ.0..AND.dss.EQ.0.) RETURN +! IF(ABS(DSS) .LE. EPS*ABS(SS))RETURN + IF(DABS(DBLE(dss)/DBLE(Ss)).LE.eps) RETURN + END IF + s(j+1) = s(j) + h(j+1) = 0.25*h(j) + END DO + WRITE(IDEfo,'(A)')' TOO MANY STEPS --- QROMB' +! + RETURN + END SUBROUTINE QROMB +! +!*********************************************************************** +! + SUBROUTINE TRAPZD(A,B,S,N) +! +! Compute's the Nth stage of refinement of an extended trapoziodal +! rule FUNC is input as the name of the function to be integrated +! between limits A and B, also input. S should not be modified +! between sequential calls. +! [Numerical Recipes (The Art of Scientific Computing). W.H. Press, +! et al. Cambridge University Press (NY, 1986), p.111] +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: N + REAL(KIND=4) :: A, B, S +! +! FUNCTIONS USED +! + REAL(KIND=4), INTRINSIC :: REAL + REAL(KIND=8), INTRINSIC :: DBLE +! +! Local variables +! + INTEGER(KIND=4), SAVE :: it, j + REAL(KIND=8), SAVE :: del, dsum, tnm, x +! + IF(N.EQ.1) THEN + S = 0.5*(B-A)*(NORMFUNC(A)+NORMFUNC(B)) + it = 1 + ELSE + tnm = DBLE(it) + del = (DBLE(B)-DBLE(A))/tnm + x = A + 0.5D+0*del + dsum = 0.D+0 + DO j = 1, it + dsum = dsum + DBLE(NORMFUNC(REAL(x))) + x = x + del + END DO + S = 0.5D+0*(S+(DBLE(B)-DBLE(A))*dsum/tnm) + it = 2*it + END IF +! + RETURN + END SUBROUTINE TRAPZD +! +!*********************************************************************** +! + SUBROUTINE POLINT(Xa,Ya,N,X,Y,Dy) +! +! Given arrays XA and YA, each of length N, and given a value X, THE +! value Y and an error estimate DY are returned +! [Numerical Recipes (The Art of Scientific Computing. W.H. Press, +! et al. Cambridge University Press (NY, 1986), p.82] +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=4) :: Dy, X, Y + INTEGER(KIND=4) :: N + REAL(KIND=4), DIMENSION(N) :: Xa, Ya +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INT + REAL(KIND=4), INTRINSIC :: ABS, ALOG10, AMAX1, AMIN1 +! +! Local variables +! + INTEGER(KIND=4), SAVE :: i, m, ns, test + REAL(KIND=4), SAVE :: den, dif, dift, ho, hp, maxyval, minyval, & + & scales, w +! + INTEGER(KIND=4), PARAMETER :: nmax = 10 + REAL(KIND=4), DIMENSION(nmax), SAVE :: c, d +! + IF(N.LE.1.OR.N.GT.nmax) THEN + Dy = 10000. + RETURN + END IF + ns = 1 + dif = ABS(X-Xa(1)) + maxyval = 0. + minyval = 0. + scales = 1. + DO i = 1, N + dift = ABS(X-Xa(i)) + IF(dift.LT.dif) THEN + ns = i + dif = dift + END IF + c(i) = Ya(i) + d(i) = Ya(i) + IF(Ya(i).NE.0.) THEN + maxyval = AMAX1(maxyval,ALOG10(ABS(Ya(i)))) + minyval = AMIN1(minyval,ALOG10(ABS(Ya(i)))) + END IF + END DO + Y = Ya(ns) +! Try to keep the scale within reasonable limits + test = INT(minyval) + IF(test.LT.-5) scales = 10.**(-test) + test = INT(maxyval) + IF(test.GT.5) scales = scales*10.**(-test) + IF(scales.NE.1.) THEN + Y = Y*scales + DO i = 1, N + c(i) = scales*c(i) + d(i) = scales*d(i) + END DO + END IF + ns = ns - 1 + DO m = 1, N - 1 + DO i = 1, N - m + ho = Xa(i) - X + hp = Xa(i+m) - X + w = c(i+1) - d(i) + den = ho - hp + IF(den.EQ.0.) THEN + Dy = 1000.*Y + IF(scales.NE.1.) THEN + Y = Y/scales + Dy = Dy/scales + END IF + RETURN + END IF + den = w/den + d(i) = hp*den + c(i) = ho*den + END DO + IF(2*ns.LT.N-m) THEN + Dy = c(ns+1) + ELSE + Dy = d(ns) + ns = ns - 1 + END IF + Y = Y + Dy + END DO + IF(scales.NE.1) THEN + Y = Y/scales + Dy = Dy/scales + END IF +! + RETURN + END SUBROUTINE POLINT +! + SUBROUTINE REPLEV(Il) +! +! Compares input and calculated level energies +! Taken from PNPI FORTRAN77 version 6.4c +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Il +! +! External functions + INTEGER(KIND=4), EXTERNAL :: Lenstr +! +! Local variables +! + INTEGER(KIND=4) :: i, j, k + REAL(KIND=8) :: z1 + CHARACTER(LEN=12) :: nflev + CHARACTER(LEN=10) :: nlev,test + CHARACTER(LEN=2) :: ndlev + CHARACTER(LEN=1) :: xoff +! + Write(rpt,'(//A)')' Input and Calculated Level Energies' + Write(rpt,'(1X,A,1X,A,1X,A)') & + & 'Num.',' Input ',' Calculated' + Write(rpt,'(1X,A,1X,A,1X,A)') & + & '----','------------','---------------' + DO i = 1, Il + celev(i)=alev(i) + cdelev(i)=adlev(i) + Write(rpt,'(1x,i4,a,1x,a,1x,a,1x,a)') & + & i,ailev(i),aidlev(i),alev(i),adlev(i) + EndDo +! + Return +! + END SUBROUTINE REPLEV +! + SUBROUTINE REPGAM(Il,Ig,Ilfix) +! +! Compares input and calculated transition energies and +! calculates Chi**2's +! Taken from PNPI FORTRAN77 version 6.4c +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Il,Ig, Ilfix +! +! Functions required +! + REAL(KIND=4), INTRINSIC :: SQRT +! +! Local variables +! + INTEGER(KIND=4) :: j, jj, k, levt, levb + INTEGER(KIND=4) :: prcnt + INTEGER(KIND=4), PARAMETER :: ncrit=200 + REAL(KIND=4) :: test + REAL(KIND=4), DIMENSION(ncrit) :: chicrit + REAL(KIND=8) :: chisq, chisqn, z, z1, z2, z3, z4, z5, z6, z7 + CHARACTER(LEN=10) :: cgam,cdiff + CHARACTER(LEN=2) :: cdgam,cddiff + CHARACTER(LEN=10), DIMENSION(nga) :: scgam + CHARACTER(LEN=2), DIMENSION(nga) :: scdgam + REAL(KIND=8), DIMENSION(nga) :: schi2 + REAL(KIND=8) :: testch +! +! Chi-squared critical taken from LWEIGHT documentation +! Note error in equation for N>200 - Should be SQRT(2/N) instead of +! (2/N) (TWB. 20050120) +!TWB DATA chicrit/6.6,4.6,3.8,3.3,3.0,2.8,2.6,2.5,2.4,2.3,2.2,2.2,2.1, & +!TWB & 2.1,2.0,2.0,2.0,1.9,1.9,1.9,1.9,1.8,1.8,1.8,1.8,1.8, & +!TWB & 1.7,1.7,1.7,1.7/ +! +! Chi-squared critical taken from function ChiKT in LWEIGHT version +! by Tibor Kibedi + DATA chicrit/ & + & 6.635, 4.605, 3.780, 3.319, 3.017, 2.802, 2.639, 2.511, 2.407, & + & 2.321, 2.248, 2.185, 2.130, 2.082, 2.039, 2.000, 1.965, 1.934, & + & 1.905, 1.872, 1.851, 1.831, 1.811, 1.793, 1.775, 1.758, 1.742, & + & 1.727, 1.713, 1.699, 1.686, 1.673, 1.661, 1.649, 1.639, 1.628, & + & 1.618, 1.609, 1.599, 1.591, 1.582, 1.574, 1.567, 1.560, 1.553, & + & 1.546, 1.539, 1.533, 1.527, 1.522, 1.516, 1.511, 1.506, 1.501, & + & 1.496, 1.491, 1.487, 1.482, 1.478, 1.474, 1.470, 1.466, 1.462, & + & 1.458, 1.455, 1.451, 1.448, 1.444, 1.441, 1.437, 1.434, 1.431, & + & 1.428, 1.425, 1.422, 1.419, 1.416, 1.413, 1.410, 1.407, 1.404, & + & 1.401, 1.399, 1.396, 1.393, 1.391, 1.388, 1.385, 1.383, 1.380, & + & 1.378, 1.375, 1.373, 1.370, 1.368, 1.366, 1.363, 1.361, 1.359, & + & 1.357, 1.355, 1.353, 1.350, 1.348, 1.346, 1.344, 1.343, 1.341, & + & 1.339, 1.337, 1.335, 1.334, 1.332, 1.330, 1.329, 1.327, 1.325, & + & 1.324, 1.323, 1.321, 1.320, 1.318, 1.317, 1.316, 1.315, 1.313, & + & 1.312, 1.311, 1.310, 1.309, 1.308, 1.307, 1.306, 1.305, 1.304, & + & 1.303, 1.302, 1.301, 1.300, 1.299, 1.299, 1.298, 1.297, 1.296, & + & 1.295, 1.294, 1.293, 1.293, 1.292, 1.291, 1.290, 1.289, 1.288, & + & 1.287, 1.287, 1.286, 1.285, 1.284, 1.283, 1.282, 1.281, 1.280, & + & 1.279, 1.278, 1.276, 1.275, 1.274, 1.273, 1.272, 1.271, 1.270, & + & 1.268, 1.267, 1.266, 1.265, 1.263, 1.262, 1.261, 1.260, 1.258, & + & 1.257, 1.256, 1.255, 1.254, 1.253, 1.251, 1.250, 1.250, 1.249, & + & 1.248, 1.247, 1.247, 1.246, 1.246, 1.246, 1.246, 1.246, 1.246, & + & 1.247, 1.248/ +! + chisq=0.D+0 + Write(rpt,'(//A)')' Input and Calculated Transition Energies' + Write(rpt, & + & '(6X,A,1X,A,1X,A,2X,A,1X,A,1X,A,1X,A,3X,A,5X,A,4X,A,3X,A)') & + & ' EG+EREC ','DEG','LTOP',' ELTOP ','LBOT',' ELBOT ', & + & ' ELTOP-ELBOT ','DIFF','DIFF/DEG','CHI-SQ' +!TWB Write(rpt, & +!TWB & '(9X,A,1X,A,4X,A,3X,A,3X,A,4X,A,4X,A,3X,A,5X,A,4X,A,3X,A)') & +!TWB & ' EG+EREC ','DEG','LTOP','ELTOP','LBOT','ELBOT','ELTOP-ELBOT', & +!TWB & 'UNC. ','DIFF','DIFF/DEG','CHI-SQ' + Do j=1,ig + levt=ltop(j) + levb=lbot(j) + z5=rlev(levt) + If(levb .GT. 0)Then + z6=rlev(levb) + EndIf + If(noff .GT. 0)Then + Do jj=1,noff + If(INDEX(ailev(levt),offchr(jj)) .GT. 0)Then + z5=rlev(levt)-offset(jj) + EndIf + If(levb .GT. 0)Then + If(INDEX(ailev(levb),offchr(jj)) .GT. 0)Then + z6=rlev(levb)-offset(jj) + EndIf + EndIf + EndDo + EndIf + Call Dcnvus(egc(j),deg(j),cgam,10,cdgam,2) + If(levb .GT. 0)Then + z=rlev(levt)-rlev(levb) + z1=dsqrt(waa(strloc(levt,levt))+waa(strloc(levb,levb))- & + & waa(strloc(levt,levb))-waa(strloc(levb,levt))) + z2=egc(j)-z + z3=DABS(z2/deg(j)) + z4=z3*z3 + chisq=chisq+z4 + Call Dcnvus(z,z1,cdiff,10,cddiff,2) + If(INDEX(cdiff,'*') .GT. 0)Then + Call Dcnvus(z,0.01D0,cdiff,10,cddiff,2) + cddiff=' ' + EndIf + Write(rpt,7004)j,cgam,cdgam,levt,celev(levt),cdelev(levt), & + & levb,celev(levb),cdelev(levb),cdiff,cddiff,z2,z3,z4 + scgam(j)=cgam + scdgam(j)=cdgam + schi2(j)=z4 + ElseIf(levb .EQ. 0)Then + Write(rpt,'(1X,I4,1X,A,2X,A,1X,I4,1X,A,1X,A,1X,A)') & + & j,cgam,cdgam,levt,celev(levt),cdelev(levt), & + & '*** Cannot be placed from level within +-10 keV' +!TWB Write(rpt,'(1X,I4,F12.5,F10.5,I4,F12.5,1X,A)') & +!TWB & j,egc(j),deg(j),levt,z5, & +!TWB & '*** Cannot be placed from level within +-10 keV' + schi2(j)=0.0 + Else + Write(rpt,'(1X,I4,1X,A,2X,A,1X,I4,1X,A,1X,A,1X,A)') & + & j,cgam,cdgam,levt,celev(levt),cdelev(levt), & + & '*** Final level unknown' + EndIf + EndDo + 7004 Format(1X,I4,1X,A,2X,A,1X,I4,1X,A,1X,A,1X,I4,1X,A,1X,A,1X, & + & A,1X,A,F10.5,2F10.4) +!TWB 7004 Format(1X,I4,F12.5,F10.5,I4,F12.5,I4,2F12.5,2F10.5,2F10.4) + Write(rpt,'(/1X,''CHI-SQ='',F15.4)')chisq + chisqn=chisq/(ig-il+ilfix) + Write (rpt,'(1X,''CHI-SQ NORM='',F12.4)')chisqn + If(ig-il+ilfix .LE. ncrit)Then + test=chicrit(ig-il+ilfix) + Else + test=1.0+2.33*SQRT(2.0/(ig-il+ilfix)) + EndIf + If((chisqn-test) .GT. 0.1)Then + Write(IDEfo,'(A,F8.1,A,F4.1)')' *****CHI-SQ NORM=',chisqn, & + & ' greater than CHI-SQ CRITICAL=',test + Write(rpt,'(/A,F8.2,A,F5.2)')' *****CHI-SQ NORM=',chisqn, & + & ' greater than CHI-SQ CRITICAL=',test + Write(rpt,'(A,I4)')' Degrees of freedom=',ig-il+ilfix + Call Chkfed(Il,Ig) + Call Chkmulg(Il,Ig) + Do k=5,0,-1 + testch=k/100. + Do j=1,ig + If(schi2(j) .GE. (testch*chisq))GoTo 100 + EndDo + EndDo +100 Continue + prcnt=100.0*(testch+0.005) + If(prcnt .GE. 1)Then + Write(rpt,'(/A,I2,A,F15.4)') & + & 'The following gammas contribute ',prcnt, & + & '% or more to Chi**2=',chisq + Do j=1,ig + If((schi2(j)/chisq) .GE. testch)Then + Write(rpt,'(2X,I4,A,1X,A,'' from '',A,1X,A,'' to '', & + & A,1X,A,'' ('',F12.4,''/'',F5.1,''%)'')') & + & j,scgam(j),scdgam(j),ailev(ltop(j)),aidlev(ltop(j)), & + & ailev(lbot(j)),aidlev(lbot(j)),schi2(j), & + & 100.0*(schi2(j)/chisq) + EndIf + EndDo + EndIf + EndIf +! + Return +! + END SUBROUTINE REPGAM + SUBROUTINE CHKMULG(Il,Ig) +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Ig, Il +! +! Local variables +! + INTEGER(KIND=4) :: i, j + REAL(KIND=8) :: x +! +! Checks to see if more than one gamma from a level feeds the same +! daughter level +! + Do i=2,ig + If((ltop(i-1).EQ.ltop(i)) .AND. (lbot(i-1).EQ.lbot(i)) & + & .AND. (lbot(i).GT.0))Then + Write(IDEfo,100)eg(i-1),egc(i),ailev(ltop(i)), & + & aidlev(ltop(i)),ailev(lbot(i)),aidlev(lbot(i)) + Write(rpt,100)eg(i-1),egc(i),ailev(ltop(i)), & + & aidlev(ltop(i)),ailev(lbot(i)),aidlev(lbot(i)) + x=rlev(ltop(i-1))-egc(i-1) + Write(rpt,'(1X,F9.2,'' Calculated E(daughter)='',F9.2)') & + & eg(i-1),x + x=rlev(ltop(i))-egc(i) + Write(rpt,'(1X,F9.2,'' Calculated E(daughter)='',F9.2)') & + & eg(i),x + EndIf + EndDo +100 FORMAT(/F9.2,' and ',F9.2,' from ',A,1X,A,' both feed ',A,1X,A) +! + Return +! + END SUBROUTINE CHKMULG + SUBROUTINE GETMODES(instr,totdec,dtotdec,doout,isitdec) +! Gets the branching ratios from level continuation record information +! + IMPLICIT NONE +! +! Dummy variables + CHARACTER(LEN=*) :: instr + REAL(KIND=4) :: totdec, dtotdec + LOGICAL(KIND=4) :: doout,isitdec +! +! Functions required +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + INTEGER(KIND=4), INTRINSIC :: INDEX + INTEGER(KIND=4), EXTERNAL :: LENSTR +! +! Local variables +! + CHARACTER(LEN=132) :: outline + CHARACTER(LEN=20) :: sx,sdx + INTEGER(KIND=4) :: j,k + REAL(KIND=4) :: y,dy +! + If(INDEX(instr,'%IT') .EQ. 1)Then + isitdec=.TRUE. + EndIf +! + If(INDEX(instr,'%B-=').EQ.1 .OR. INDEX(instr,'%B- ').EQ.1 .OR. & + & INDEX(instr,'%EC=').EQ.1 .OR. INDEX(instr,'%EC ').EQ.1 .OR. & + & INDEX(instr,'%B+=').EQ.1 .OR. INDEX(instr,'%B+ ').EQ.1 .OR. & + & INDEX(instr,'%EC+').EQ.1 .OR. INDEX(instr,'%A').EQ.1 .OR. & + & INDEX(instr,'%SF').EQ.1 .OR. INDEX(instr,'%N').EQ.1 .OR. & + & INDEX(instr,'%P').EQ.1 .OR. INDEX(instr,'%3HE').EQ.1 .OR. & + & INDEX(instr,'%8BE').EQ.1)Then + j=INDEX(instr,"=") + If(j .EQ. 0)Then + j=INDEX(instr," AP ") + If(j .GT. 0)j=j+4 + Else + j=j+1 + EndIf + If(j .GT. 0)Then + If(doout)Then + outline=' '//card + Write(outline(96:),'(A)')'B/EC/A decay mode found' + Write(rpt,'(A)')outline + doout=.FALSE. + EndIf + sx=instr(j:) + k=INDEX(sx,' ') + If(k .GT. 0)Then + sdx=sx(k+1:) + sx=sx(1:k-1) + Call Cnvs2u(TRIM(sx),TRIM(sdx),y,dy) + Else + sx=sx(1:Lenstr(sx)) + sdx=' ' + Call Cnvs2u(TRIM(sx),sdx,y,dy) + EndIf + totdec=totdec+y + dtotdec=SQRT(dtotdec**2+dy**2) + EndIf + EndIf + Return +! + END SUBROUTINE GETMODES + SUBROUTINE SETUP4(Il,Ilfix,Ig) +! Factors in the metastable state energy uncertainty when held fixed +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Il, Ilfix, Ig +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX, LEN_TRIM +! +! Local variables +! + LOGICAL(KIND=4), DIMENSION(nle) :: ismeta + LOGICAL(KIND=4) :: fix + Logical(KIND=4) :: dohead + INTEGER(KIND=4) :: i, j, k, l + INTEGER(KIND=4) :: top, tmp + INTEGER(KIND=4), DIMENSION(nle) :: metlev + INTEGER(KIND=4), DIMENSION(nle) :: levtmp + REAL(KIND=8) :: x,dx,y + CHARACTER(LEN=10) :: sav + CHARACTER(LEN=2) :: dsav +! + dohead=.TRUE. + Do i=2,Il + metlev(i)=0 + ismeta(i)=.FALSE. + Do j=1,Ilfix + If(levfix(j).EQ.i .AND. howfix(i).EQ.'D')Then + ismeta(i)=.TRUE. + EndIf + EndDo + EndDo + i=1 + Do While(i .LE. ig) + If(lbot(i) .GT. 0)Then + j=1 + levtmp(j)=lbot(i) + top=ltop(i) + If(ltop(i+1) .EQ. top)Then + i=i+1 + j=j+1 + levtmp(j)=lbot(i) + EndIf + i=i+1 + fix=.TRUE. + Do k=1,j + fix=fix .AND. & + & (ismeta(levtmp(k)) .OR. metlev(levtmp(k)).GT.0) + If(fix)Then + If(ismeta(levtmp(k)))Then + tmp=levtmp(k) + Else + tmp=metlev(levtmp(k)) + EndIf + EndIf + EndDo + If(fix)then + metlev(top)=tmp + EndIf + Else + i=i+1 + EndIf + EndDo + dohead=.TRUE. + Do i=2,Il + If(metlev(i) .GT. 0)Then + If(dohead)Then + Write(rpt,'(//A)') & + & 'Adjusting output uncertainties for metastable '// & + & 'daughter uncert.' + dohead=.FALSE. + EndIf + Call Dcnvsu(alev(metlev(i)),adlev(metlev(i)),x,dx) + y=DSQRT(dlev(i)**2+dx**2) + sav=alev(i) + dsav=adlev(i) + Call Dcnvus(rlev(i),y,alev(i),10,adlev(i),2) + Write(rpt,'(8A)')' From ',sav,' ',dsav,' to ',alev(i),' ', & + & adlev(i) + EndIf + EndDo +! + Return +! + END SUBROUTINE SETUP4 +! + SUBROUTINE SETUP5(Il,Ilfix,Ig) +! Factors in the level energy uncertainty when held fixed with 'G' +! Checks levels fixed with 'F' or 'G' to see if they have dexciting gammas +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Il, Ilfix, Ig +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX, LEN_TRIM +! +! Local variables + LOGICAL(KIND=4), DIMENSION(nle) :: isufix + LOGICAL(KIND=4) :: fix + Logical(KIND=4) :: dohead + INTEGER(KIND=4) :: i, j, k, l + INTEGER(KIND=4) :: top, tmp + INTEGER(KIND=4), DIMENSION(nle) :: ufixlev + INTEGER(KIND=4), DIMENSION(nle) :: levtmp + REAL(KIND=8) :: x,dx,y + Character(LEN=80) :: outstr + CHARACTER(LEN=10) :: sav + CHARACTER(LEN=2) :: dsav +! + dohead=.TRUE. + Do i=1,Il + ufixlev(i)=0 + isufix(i)=.FALSE. + Do j=1,Ilfix + If(levfix(j).EQ.i .AND. howfix(i).EQ.'G')Then + isufix(i)=.TRUE. + EndIf + If(levfix(j).EQ.i & + & .AND. (howfix(i).EQ.'F'.OR.howfix(i).EQ.'G'))Then + k=1 + Do While(k .LE. ig) + If(ltop(k) .EQ. i)Then + outstr=ailev(i) + Call Lbsup(outstr) + outstr='Gammas from fixed level ('//outstr + outstr=TRIM(outstr)//') found' + Write(rpt,'(//A)')outstr + Write(idefo,'(/A)')outstr + If(lbot(k) .GT. 0)Then + Write(rpt,'(1X,F9.2,1X,2A)')eg(k),'to ', & + & ailev(lbot(k)) + Else + Write(rpt,'(1X,F9.2,1X,A)')eg(k), & + & 'could not be placed within +-10 keV' + EndIf + k=k+1 + If(k .LE. ig)Then + Do While(ltop(k) .EQ. i) + Write(rpt,'(1X,F9.2,1X,2A)')eg(k),'to ', & + & ailev(lbot(k)) + k=k+1 + EndDo + EndIf + Else + k=k+1 + EndIf + EndDo + EndIf + EndDo + EndDo + i=1 + Do While(i .LE. ig) + If(lbot(i) .GT. 0)Then + j=1 + levtmp(j)=lbot(i) + top=ltop(i) + If(ltop(i+1) .EQ. top)Then + i=i+1 + j=j+1 + levtmp(j)=lbot(i) + EndIf + i=i+1 + fix=.TRUE. + Do k=1,j + fix=fix .AND. & + & (isufix(levtmp(k)) .OR. ufixlev(levtmp(k)).GT. 0) + If(fix)Then + If(isufix(levtmp(k)))Then + tmp=levtmp(k) + Else + tmp=ufixlev(levtmp(k)) + EndIf + EndIf + EndDo + If(fix)then + ufixlev(top)=tmp + EndIf + Else + i=i+1 + EndIf + EndDo + dohead=.TRUE. + Do i=1,Il + If(ufixlev(i).GT.0 .AND. howfix(i).EQ.' ')Then + If(dohead)Then + Write(rpt,'(//A)') & + & 'Adjusting output uncertainties for fixed '// & + & 'daughter level uncert.' + dohead=.FALSE. + EndIf + Call Dcnvsu(alev(ufixlev(i)),adlev(ufixlev(i)),x,dx) + y=DSQRT(dlev(i)**2+dx**2) + sav=alev(i) + dsav=adlev(i) + Call Dcnvus(rlev(i),y,alev(i),10,adlev(i),2) + Write(rpt,'(8A)')' From ',sav,' ',dsav,' to ',alev(i),' ', & + & adlev(i) + EndIf + EndDo +! + Return +! + END SUBROUTINE SETUP5 +! +!*********************************************************************** +! + SUBROUTINE REDO2(Ri,Dri,Ti,Dti,Cc,Dcc) +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=8) :: Cc, Dcc, Dri, Dti, Ri, Ti +! +! Local arguments + REAL(KIND=8) :: drinew, dtinew, rinew, tinew +! + rinew=riin(lbots)-ri + drinew=driin(lbots) - dri*dri + IF(.NOT.NOInt .AND. .NOT.NOInt2) THEN +! Recalculate TI, DTI + If(ti .EQ. 0.)Then + ti=ri*(1+cc) + dti=0.0 + If(ri .NE. 0)Then + If(dcc .EQ. 0.0)Then + dti=Dri**2/Ri**2 + (theodcc*theodcc*cc*cc)/(1.+Cc)**2 + Else + If(adddcc)Then + dti=dri**2/ri**2+(dcc**2+(theodcc*cc)**2)/(1.+cc)**2 + Else + dti=dri**2/ri**2+(dcc/(1.+cc))**2 + EndIf + EndIf + Dti = Dti*Ti*Ti + END IF + ELSE IF(NRBr.NE.0.0.AND.NTBr.NE.0.0) THEN + Ti = Ti*NTBr/NRBr + Dti = Dti*NTBr/NRBr + Dti = Ti*Ti*((Dti/Ti)**2+(DNTbr/NTBr)**2-(DNRbr/NRBr)**2) + ELSE + Ti = Ti*ANT/ANR + Dti = Dti*ANT/ANR + Dti = Ti*Ti*((Dti/Ti)**2+(DNT/ANT)**2-(DNR/ANR)**2) + EndIf + ENDIF + tinew=tiin(lbots)-ti + dtinew=dtiin(LBOTS) - dti*dti +! +! Reset intensity arrays +! + riins=rinew + driins=drinew + tiins=tinew + dtiins=dtinew +! + riin(lbots)=riins + driin(lbots)=drinew + tiin(lbots)=tiins + dtiin(lbots)=dtinew +! + RETURN +! + END SUBROUTINE REDO2 +! + END PROGRAM GTOL + + diff --git a/tests/ensdf_processing/gtol/ref_gtol.inp b/tests/ensdf_processing/gtol/ref_gtol.inp new file mode 100644 index 0000000000..27a4bda9fa --- /dev/null +++ b/tests/ensdf_processing/gtol/ref_gtol.inp @@ -0,0 +1,3007 @@ +228TH ADOPTED LEVELS, GAMMAS 97NDS 199709 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH Q -2148 5 7109.6 25 6372.0 23 5520.1222 1995AU04 +228TH PN 6 +228TH c +228TH c Calculations, compilations, systematics: +228TH c |a decay widths: 1996De19 +228TH c Biding energies, deformation role: 1986Ch23 +228TH c B(E1) from octupole states: 1989De11, 1986Le05, 1981Le15 +228TH c Cluster model for |a decay; Geiger-Nuttall plot: 1991Bu05, +228TH2c 1986Da03 +228TH c Equilibrium deformation: 1988So08, 1984Na22, 1981Gy03 +228TH c Heavy cluster spontaneous emission: 1996Bu05, 1994Bu07, 1993Go18, +228TH2c 1992Sa30, 1986Po15, 1986Po06 +228TH c Levels, shapes, B(|l): 1996Li18, 1995De13, 1995La01, 1989Hu05, +228TH2c 1989Sh35, 1988Ri07, 1986An10, 1986Go07, 1984Ba59, 1984Ba63 +228TH c Octupole shapes and shape changes: 1987Na10 +228TH c p-n interaction energy: 1990Mo11 +228TH c Rotational bands in even-even nuclei: 1992So10, 1988Ab07 +228TH c Quasi-bands in even-even nuclei: 1984Sa37 +228TH c Super- and hyperdeformed configurations: 1995We02 +228TH c Yrast band parity splitting: 1994Jo02, 1993Jo12 +228TH XA228AC B- DECAY +228TH XB228PA EC DECAY +228TH XC232U A DECAY +228TH XD226RA(A,2NG) +228TH XE230TH(P,T) +228TH XF230TH(A,A'2NG) +228TH cL +228TH cL For a discussion of the level scheme and the rotational +228TH2cL bands see 1995Ba42, 1987Da28 +228TH cL E From least squares fit to E|g +228TH CL BAND(A) GS ROTATIONAL BAND +228TH CL BAND(B) KPI=0- OCTUPOLE-VIBRATIONAL BAND +228TH CL BAND(C) FIRST KPI=0+ BAND +228TH CL BAND(D) SECOND KPI=0+ BAND +228TH CL BAND(F) KPI=1- OCTUPOLE-VIBRATIONAL BAND HEAD +228TH CL BAND(G) FIRST KPI=2+ BAND +228TH CL BAND(H) KPI=2- OCTUPOLE-VIBRATIONAL BAND +228TH CL BAND(I) SECOND KPI=2+ BAND +228TH CL BAND(J) KPI=3- OCTUPOLE-VIBRATIONAL BAND HEAD +228TH cG E,RI Weighted average of measurements in {+228}Ac and {+228}Pa +228TH2cG decays, unless otherwise noted. +228TH cG M,MR From {+228}Ac |b{+-} decay and/or {+228}Pa |e decay +228TH cG E(I),RI(K)$From {+228}Pa |e decay +228TH cG RI(J) From {+232}U |a decay +228TH cG E(L),RI(M)$From {+228}Ac |b{+-} decay +228TH cG E(G),RI(H)$From (|a,2n|g) data set +228TH cG E(B) Energy fit poor. Not included in E(level) calculation. +228TH cG E(N) Doublet, energy not included in E(level) calculation +228TH cG E(P) A |g of this energy was seen in {+228}Pa decay and placed +228TH2cG here in level scheme; however, the |g's deexciting the final level of +228TH3cG this |g were not seen in {+228}Pa decay +228TH cG E(Q) |g's of approximately same energy and intensity seen in both +228TH2cG {+228}Ac and {+228}Pa decays. On the basis of coin with 911|g, it is +228TH3cG suggested in {+228}Ac decay, that the |g feeds the 2+ 968.968 level. In +228TH4cG {+228}Pa decay, the |g is placed feeding the 3- 968.368 level. The +228TH5cG energy fit is much better feeding the 3- level. Possibly the |g seen +228TH6cG is a doublet feeding both the 968 and 969 levels. I|g(doublet)=24 {I6}, +228TH7cG E(doublet)=674.65 {I5}. +228TH cG RI(R) There is a disagreement in the ratio I|g(583|g/I|g(651|g) +228TH2cG between {+228}Ac decay (1.23 {I15}) and {+228}Pa decay (2.26 {I24}). +228TH L 0.0 0+ 1.9116 Y 16 A +228TH2 L %A=100$%{+20}O=1.13E-11 22$ +228THX L XREF=ABCDEF +228TH cL %{+20}O=1.13|*10{+-11} {I22} (1993Bo20) +228TH cL T value (698.2 d {I6}) recommended by 1991BaZS; based on +228TH2cL measurements from 1971Jo14, 1962Ma57, 1956Ki16 (tropical year +228TH3cL (365.24220 days) used in conversion). Other: 1.912 y {I2} (recommended +228TH4cL value, 1990Ho28), 1.906 y (1918Me01). +228TH cL Isotope shift: |D=-0.413 {I5} relative to {+232}Th +228THxcL (1989Ka29) +228TH L 57.759 4 2+ 0.405 NS 7 A +228THX L XREF=ABCDEF +228TH cL J E2 |g to 0+ g.s. +228TH cL T from {+232}U |a decay +228TH G 57.766 5 100 E2 156 L +228TH cG M also from {+232}U |a decay +228THB G BE2W=167 6 +228TH L 186.823 4 4+ 0.164 NS 4 A +228THX L XREF=ABCDEF +228TH cL J E2 |g to 2+ level; member of g.s. rotational band +228TH cL T from {+232}U |a decay +228TH G 129.065 1 100 E2 3.81 L +228TH cG M also from (|a,|a'2n|g) +228THB G BE2W=242 9 +228TH L 328.003 4 1- B +228THX L XREF=ABC +228TH cL J E1 |g to 0+ +228TH G 270.245 2 100.0 16 E1 0.0474 J +228TH3 G FLAG=L +228TH G 328.000 6 89.3 21 E1 0.0308 J +228TH3 G FLAG=L +228TH L 378.179 10 6+ A +228THX L XREF=ABCDF +228TH cL J E2 |g to 2+ level: member of g.s. rotational band +228TH G 191.353 10 100 E2 0.791 L +228TH cG M also from (|a,|a'2n|g) +228TH L 396.078 5 3- B +228THX L XREF=ABC +228TH cL J E1 |g's to 4+ and 2+ levels +228TH G 209.253 6 34.5 6 E1 0.086 L +228TH G 338.320 3 100.0 17 E1 0.0288 L +228TH L 519.192 6 5- B +228THX L XREF=ABCDF +228TH cL J E1 |g's to 4+ and 6+ levels +228TH G 141.01 2 10.1 6 E1 0.220 +228TH G 332.370 4 100 5 E1 0.0299 L +228TH L 622.5 3 8+ A +228THX L XREF=DF +228TH cL J E2 |g to 6+ level; member of g.s. rotational band +228TH G 244.4 3 E2 0.332 G +228TH cG M from (|a,|a'2n|g) +228TH L 695.6 3 7- B +228THX L XREF=DF +228TH cL J |g to 6+ level; member of K|p=0- octupole band +228TH G 317.4 3 [E1] 0.0331 G +228TH L 831.823 10 0+ C +228THX L XREF=ABCDE +228TH cL J L=0 in (p,t) +228TH G 503.823 13 100 7 (E1) 0.0125 L +228TH3 G FLAG=M +228TH G 774.1 2 33 AP L +228TH3 G FLAG=M +228TH G 831 E0 0.04 2 +228TH cG E,M,TI from {+232}U |a decay +228TH L 874.473 18 2+ C +228THX L XREF=ABCE +228TH cL J E1 |g to 3- level, |g to 0+ g.s. +228TH G 478.40 6 100 5 E1 0.0139 +228TH G 546.45 2 91 5 +228TH G 688.11 4 32 3 & +228TH3 G FL=186.823$ FLAG=N +228TH G 816.62 10 12.3 20 +228TH G 874.45 7 23 3 +228TH L 911.8 4 10+ A +228THX L XREF=DF +228TH cL J |g to 8+ level; member of g.s. band +228TH G 289.4 3 G +228TH L 920.8 3 9- B +228THX L XREF=DF +228TH cL J |g to 7- and 8+ levels; member of K|p=0- band +228TH G 225.1 3 24.6 15 G +228TH3 G FLAG=H +228TH G 298.3 3 100 G +228TH3 G FLAG=H +228TH L 938.58 7 0+ D +228THX L XREF=AE +228TH cL J from L(p,t) quoted in 1995Ba42 +228TH G 610.64 10 100 22 L +228TH3 G FLAG=M +228TH G 880.76 10 27 8 L +228TH3 G FLAG=M +228TH L 944.196 13 1,2+ +228THX L XREF=ABE +228TH cL J |g's to 1- level and 0+ g.s. Possibly unnatural parity level +228TH2cL from (p,t); possible band head for a K|p=1+ band. However, log| +228TH3cL {Ift}=9.8 from 3+ {+228}Pa would rule out J|p=1+ +228TH G 616.20 3 91 11 +228TH G 944.196 14 100 8 L +228TH L 968.369 17 3- F +228THX L XREF=AB +228TH cL J |g's to 1- and 5- levels +228TH G 449.21 4 39 5 +228TH G 572.29 4 100 5 +228TH G 640.34 3 28 4 +228TH L 968.968 5 2+ G +228THX L XREF=AB +228TH cL J E2 |g to 0+ g.s. +228TH G 782.142 5 1.89 6 L +228TH G 911.204 4 100.0 16 E2+M1 +24 8 0.0121 L +228TH G 968.971 17 61.1 11 E2 0.0107 L +228TH L 979.499 14 2+ D +228THX L XREF=ABE +228TH cL J |g's to 0+ g.s. and 4+ level +228TH G 583.41 5 123 11 R +228TH2 G FLAG=M +228TH G 651.48 5 100 9 R +228TH2 G FLAG=M +228TH G 792.8 89 AP L +228TH3 G FLAG=M +228TH G 921.98 10 18.6 LE L +228TH3 G FLAG=BM +228TH cG Doubly placed |g with undivided intensity (I|g=16.3 {I23}) +228TH2cG in {+228}Ac decay +228TH G 979.48 10 29 3 L +228TH3 G FLAG=M +228TH L 1016.406 21 2+,3-,4+ +228THX L XREF=AB +228TH cL J |g's to 3- and 2+ levels, |g from 3+ level; natural parity +228TH2cL from (p,t) (quoted in 1995Ba42). Multiply placed +228TH3cL |g to 0+ would limit J|p to 2+; possible 2+ member of K|p=1+ band. +228TH4cL However, |g from 1450-keV 4- level would rule out 2+. +228TH G 620.33 6 28.4 14 +228TH G 688.11 4 24.0 15 & +228TH3 G FL=328.003$ FLAG=N +228TH G 958.61 4 100 12 +228TH G 1016.44 15 6.8 11 & +228TH3 G FLAG=LM +228TH L 1022.527 6 (3)+ G +228THX L XREF=AB +228TH cL J E2 |g's to 4+ and 2+ levels; E1 |g from 4- level; +228TH2cL member of K|p=2+ band +228TH G 835.710 6 32.4 11 E2 0.0143 L +228TH cG M |d|<-9 ({+228}Pa decay) +228TH G 964.766 10 100.0 18 E2+M1 -7.2 10 0.0108 L +228TH L 1059.93 3 4- +228THX L XREF=AB +228TH cL J |g's to 3- and 5- levels; J|p=3-,4+,5- ruled out by +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 540.68 5 58 10 +228TH G 663.88 6 87 7 (M1+E2) 0.06 4 +228TH G 873.11 12 100 10 +228TH L 1091.017 8 4+ G +228THX L XREF=AB +228TH cL J E2 |g to 4+ level, |g to 2+ level; |g to 6+ level +228TH G 694.8 2 2.9 4 I +228TH3 G FLAG=K +228TH G 713.1 3 1.8 4 I +228TH3 G FLAG=K +228TH G 904.19 3 100 4 E2 0.0123 +228TH cG MR |>+3.7 ({+228}Pa decay) +228TH G 1033.248 9 26.5 9 E2 L +228TH L 1122.951 6 2- H +228THX L XREF=AB +228TH cL J E1 |g to 2+ level, E2+M1 |g to 1- level, (E1+M2) |g to (3)+ +228TH2cL level; member of K|p=2- band +228TH G 100.41 3 2.2 3 (E1+M2) 0.23 AP 3.2 AP L +228TH3 G FLAG=M +228TH G 153.977 10 16.7 5 E1 0.178 L +228TH3 G FL=968.968 +228TH G 726.863 15 13.7 13 (E2) 0.0189 L +228TH G 794.947 5 100.0 16 E2+M1 -4.4 10 0.0182 15 L +228TH G 1065.19 4 3.02 12 +228TH L 1153.467 10 2+ 0.29 NS 2 I +228THX L XREF=AB +228TH cL J |g to 2+ has E0 component +228TH cL T from {+228}Ac |b{+-} decay +228TH G 173.964 13 15.5 22 M1+E2 1.2 +11-6 2.3 18 L +228THB G BM1W=4.E-5 +6-4$BE2W=0.6 +7-6 +228TH G 184.54 2 31 4 E0+M1 63 8 M +228TH3 G FL=968.968$ FLAG=L +228THB G BM1W=1.2E-4 3 +228TH cG |a(K)exp, L1/L2, L1/L3 indicate E0+5.4%M1 transition +228TH2cG ({+228}Ac |b{+-} decay) +228TH G 278.70 10 71 9 (M1+E2) 0.7 5 @ +228TH3 G FL=874.473 +228TH G 321.646 8 100 5 [E2] 0.140 L +228THB G BE2W=0.29 5 +228TH G 1095.679 20 55 4 [M1,E2] 0.018 10 L +228TH G 1153.52 4 61 4 [E2] +228THB G BE2W=0.00030 6 +228TH L 1160 5 +228THX L XREF=E +228TH L 1168.375 5 3- H +228THX L XREF=AB +228TH cL J E1 |g's to 2+ levels, |g to 5- level +228TH G 77.34 3 1.7 3 L +228TH3 G FLAG=M +228TH G 145.849 10 10.4 4 E1 0.203 L +228TH G 199.407 10 20.8 8 E1 0.096 L +228TH G 649.03 13 2.7 3 & +228TH G 772.291 5 100.0 20 E2+M1 -3.4 +8-27 0.021 3 L +228TH G 840.377 7 61.9 21 E2 0.0142 L +228TH G 981.5 2 3.0 4 I +228TH3 G FLAG=K +228TH G 1110.610 10 18.7 20 E1 @ +228TH2 G FLAG=L +228TH L 1174.508 18 (5+) G +228THX L XREF=AB +228TH cL J |g to 4+ level; member of K|p=2+ band +228TH G 987.88 9 +228TH L 1175.39 5 2+ +228THX L XREF=A +228TH cL J |g to 0+ g.s., |g to 4+ level +228TH G 231.42 10 32 5 L +228TH3 G FLAG=M +228TH G 988.63 20 100 17 L +228TH3 G FLAG=M +228TH G 1117.63 10 70 10 L +228TH3 G FLAG=M +228TH G 1175.31 10 31 4 L +228TH3 G FLAG=M +228TH L 1189.8 4 11- B +228THX L XREF=DF +228TH cL J |g's to 9- and 10+ levels; band structure +228TH G 268.9 3 67 5 G +228TH3 G FLAG=H +228TH G 278.0 3 100 G +228TH3 G FLAG=H +228TH L 1200.54 4 (3)+ I +228THX L XREF=B +228TH cL J E0 transition to (3)+ level +228TH G 178.14 7 22 LE (E0) I +228TH3 G FLAG=K +228TH G 231.50 5 100 5 I +228TH3 G FL=968.968$ FLAG=K +228TH G 1013.54 13 41 5 & +228TH3 G FLAG=IK +228TH G 1142.78 11 3 I +228TH3 G FLAG=K +228TH L 1226.565 7 (4)- H +228THX L XREF=AB +228TH cL J E1 |g's to 4+ and (3)+ levels; member of K|p=2- band +228TH G 135.51 2 3.66 20 E1 0.242 +228TH G 204.026 10 20.7 10 E1 0.091 L +228TH G 707.41 3 27.5 6 (E2) 0.0200 +228TH G 830.486 8 100 4 E2(+M1) -7.7 9 0.0152 2 L +228TH G 1039.84 8 9.9 6 +228TH L 1239.4 4 12+ A +228THX L XREF=DF +228TH cL J |g to 10+ level; member of g.s. band +228TH G 327.5 3 G +228TH L 1297.423 10 (5)- H +228THX L XREF=AB +228TH cL J E1 |g to 4+ level; band structure +228TH G 601.7 3 11.1 19 & ? +228TH3 G FLAG=IK +228TH G 778.1 2 100 11 I +228TH3 G FLAG=K +228TH cG |g not reported in {+228}Ac decay +228TH G 901.26 13 74 11 K +228TH G 1110.610 10 89 7 E1 @ +228TH3 G FLAG=L +228TH L 1344.078 11 3- J +228THX L XREF=A +228TH cL J |g's to 1- and 5- levels; band structure. Although the |g to +228TH2cL 1- level is multiply placed, this position in level scheme is +228TH3cL supported by coin results +228TH G 168.65 10 9 3 L +228TH3 G FLAG=M +228TH G 824.934 23 47 5 L +228TH3 G FLAG=M +228TH G 947.982 11 100 8 L +228TH3 G FLAG=M +228TH G 1016.44 15 18 3 & +228TH3 G FLAG=LM +228TH G 1157.14 15 6.6 12 L +228TH3 G FLAG=M +228TH G 1286.27 20 47 9 L +228TH3 G FLAG=M +228TH L 1416.11 6 2+,3- +228THX L XREF=A +228TH cL J |g's to 1- and 4+ levels +228TH G 471.76 15 100 10 L +228TH3 G FLAG=M +228TH G 1019.86 10 64 12 L +228TH3 G FLAG=M +228TH G 1088.18 15 18 4 L +228TH3 G FLAG=M +228TH G 1229.40 15 23 7 L +228TH3 G FLAG=M +228TH L 1431.979 6 4+ +228THX L XREF=AB +228TH cL J E1 |g to 3- level, E2+M1 |g to 4+ level; J|=3 from +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 257.49 2 0.64 3 (M1) 1.36 +228TH G 263.62 2 0.95 5 E1 0.0502 +228TH G 278.70 10 0.70 11 @ +228TH3 G FL=1153.467 +228TH G 340.98 2 8.8 4 E2+M1 -5.2 18 0.136 23 +228TH G 409.462 6 43.8 8 E2+M1 -5.4 8 0.082 4 +228TH G 452.51 5 0.45 4 +228TH G 463.004 6 100.0 16 E2 0.0522 L +228TH G 1245.16 6 2.47 12 +228TH G 1374.24 6 0.32 9 M +228TH L 1450.394 10 4- +228THX L XREF=AB +228TH cL J M1+E2 |g's to 3- level, |g to 4+ level; J|=3 from +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 18.4 11.9 16 [E1] 6.6 K +228TH cG E deduced from E(level) +228TH G 153.02 2 3.58 19 M1+E2 +0.60 8 4.8 2 I +228TH3 G FLAG=K +228TH G 223.80 2 43.4 20 M1+E2 -0.18 5 1.97 3 +228TH G 275.85 4 2.65 23 I +228TH3 G FLAG=K +228TH G 282.00 3 60 3 M1+E2 -0.51 12 0.88 7 K +228TH G 327.45 4 100.0 10 I +228TH3 G FLAG=K +228TH G 359.36 3 4.19 23 I +228TH3 G FLAG=K +228TH G 390.45 5 3.58 19 I +228TH3 G FLAG=K +228TH G 427.90 3 4.0 3 I +228TH3 G FLAG=K +228TH G 434.01 3 5.6 3 I +228TH3 G FLAG=K +228TH G 482.03 5 5.9 4 I +228TH3 G FL=968.369$ FLAG=K +228TH G 1054.22 6 10.9 10 +228TH L 1497.1 5 13- B +228THX L XREF=DF +228TH cL J |g's to 11- and 12+ levels; band structure +228TH G 257.7 3 52 4 G +228TH3 G FLAG=H +228TH G 307.3 3 100 G +228TH3 G FLAG=H +228TH L 1531.474 6 3+ +228THX L XREF=AB +228TH cL J E2+M1 |g to 2+ level, M1 |g to 4+ level +228TH G 99.509 6 100 6 M1 4.09 L +228TH G 356.94 10 1.35 14 L +228TH3 G FLAG=M +228TH G 377.99 10 1.98 24 L +228TH3 G FLAG=M +228TH G 440.44 5 9.6 6 M1 0.314 +228TH G 508.959 17 40 10 E2(+M1) 1.1 GT 0.08 4 L +228TH G 562.500 4 71 4 E2+M1 +1.6 6 0.07 3 L +228TH G 1135.24 15 0.78 12 L +228TH3 G FLAG=M +228TH G 1344.59 15 0.71 14 L +228TH3 G FLAG=M +228TH L 1539.21 9 2,3,4 +228THX L XREF=A +228TH cL J |g to 3- level, |g from 3+ level +228TH G 416.30 20 100 16 L +228TH2 G FLAG=M +228TH G 1142.85 15 78 16 L +228TH2 G FLAG=M +228TH L 1580.91 6 (2-) +228THX L XREF=B +228TH cL J (M1+E2) |g's to 3- and 1- levels +228TH G 354.2 2 43 7 & +228TH3 G FLAG=IK +228TH G 601.7 3 44 7 & +228TH3 G FLAG=IK +228TH G 1184.71 9 69 6 (M1+E2) 0.015 8 I +228TH3 G FLAG=K +228TH G 1252.98 10 100 9 (M1+E2) 0.013 7 I +228TH3 G FLAG=K +228TH G 1523.4 2 88 9 & +228TH3 G FLAG=IK +228TH L 1588.335 14 4- +228THX L XREF=B +228TH cL J E1 |g's to 3+ and 4+; J|=3- from |g(|q,H,T) +228TH2cL ({+228}Pa decay) +228TH G 56.86 3 16.1 8 E1 0.533 I +228TH3 G FLAG=K +228TH G 137.95 2 100 3 M1 7.89 I +228TH3 G FLAG=K +228TH G 156.34 2 20.6 11 E1 0.172 I +228TH3 G FLAG=K +228TH G 420.03 8 10.3 8 I +228TH3 G FLAG=K +228TH L 1599.5 5 14+ A +228THX L XREF=DF +228TH cL J |g to 12+; band structure +228TH G 360.1 3 G +228TH L 1617.78 7 2+,3,4+ +228THX L XREF=AB +228TH cL J |g's to 4+ and 2+ levels +228TH G 649.03 13 114 11 & +228TH2 G FL=968.968$ FLAG=M +228TH G 1430.95 10 100 20 L +228TH3 G FLAG=M +228TH G 1559.78 14 57 11 M +228TH L 1638.284 9 2+ +228THX L XREF=AB +228TH cL J |g's to 0+ g.s. and 4+ level +228TH G 470.20 19 2.3 6 +228TH G 515.06 10 8.2 8 L +228TH3 G FLAG=M +228TH G 1309.71 20 3.2 10 L +228TH3 G FLAG=M +228TH G 1451.40 15 1.8 4 L +228TH3 G FLAG=M +228TH G 1580.53 3 100 7 (M1,E2) +228TH G 1638.281 10 85 7 (E2) L +228TH L 1643.125 15 (2-,3-) +228THX L XREF=AB +228TH cL J (M1) |g's to 2- and 3- levels, +228TH G 474.79 11 4.6 7 +228TH G 520.151 16 11.8 10 (M1) 0.201 L +228TH G 627.23 20 2.8 6 L +228TH3 G FLAG=M +228TH G 674.16 30 LE Q +228TH3 G FL=968.968 +228TH cG E from level energies +228TH G 674.76 30 LE Q +228TH3 G FL=968.369 +228TH cG E from level energies +228TH G 699.08 15 7.4 10 L +228TH3 G FLAG=M +228TH G 1247.08 3 100 5 (M1) 0.0201 +228TH G 1315.31 9 2.7 4 +228TH L 1645.954 12 3+ +228THX L XREF=AB +228TH cL J E2 |g's to 2+ and 4+ levels, |g's to 2- and 4- levels +228TH G 114.54 6 0.28 4 +228TH G 419.42 10 0.65 9 L +228TH3 G FLAG=M +228TH G 492.30 8 0.74 5 +228TH G 523.131 16 3.5 3 B +228TH3 G FL=1122.951$ FLAG=L +228TH G 555.07 16 1.40 14 +228TH G 623.27 20 0.34 9 L +228TH3 G FLAG=M +228TH G 629.40 5 1.20 21 +228TH G 666.47 4 1.8 2 @ +228TH G 677.07 9 1.99 16 +228TH3 G FL=968.968 +228TH G 1249.97 14 1.94 14 +228TH G 1459.138 15 23.7 12 E2 L +228TH G 1588.19 3 100.0 25 E2 +228TH L 1682.81 3 2+,3(+),4+ +228THX L XREF=AB +228TH cL J (E2) |g to 4+ level, |g to 2+ level +228TH G 660.1 3 0.6 AP L +228TH3 G FLAG=M +228TH G 1495.93 7 100 5 (E2) +228TH G 1625.06 5 29.1 19 +228TH L 1683.82 5 (4-) +228THX L XREF=AB +228TH cL J (M1+E2) |g's to 3- and 5- levels +228TH G 457.35 7 19.2 19 +228TH G 623.7 2 26 LE I +228TH3 G FLAG=K +228TH cG |g not resolved from the 623.27|g from 1645 level in {+228}Pa +228TH2cG decay, I(doublet)=23 {I3}. Not reported in {+228}Ac decay. +228TH G 1164.55 7 83 4 (M1+E2) 0.016 9 +228TH G 1287.78 12 100 7 (M1+E2) 0.012 7 +228TH L 1688.394 11 2+,3+ +228THX L XREF=AB +228TH cL J |g's to 2+ and 4+ levels; J|p|=3-,4+ from +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 42.46 5 0.60 20 L +228TH3 G FLAG=M +228TH G 672.00 15 1.7 5 L +228TH3 G FLAG=M +228TH G 813.77 15 0.46 11 L +228TH3 G FLAG=M +228TH G 1501.57 5 29.4 15 +228TH G 1630.627 10 100 3 (M1,E2) L +228TH L 1724.283 6 2+ +228THX L XREF=AB +228TH cL J M1 |g to 2+ level, |g to 0+ g.s.; log| {Ift}=7.06 for |b{+-} +228TH2cL decay from 3+ {+228}Ac 7.32 for |e decay from 3+ {+228}Pa +228TH G 548.73 15 2.3 3 L +228TH2 G FLAG=M +228TH G 570.88 4 17.1 9 (M1) 0.156 +228TH G 701.747 14 18.2 10 (M1) 0.091 L +228TH G 755.315 4 100 3 M1 0.0747 L +228TH G 1537.87 9 4.2 5 B +228TH3 G FL=186.823 +228TH G 1666.523 13 17.3 8 M1 L +228TH G 1724.20 4 2.7 3 +228TH L 1735.450 25 (4+) +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels; possible |g to 6+ level would +228TH2cL limit J|p to 4+ +228TH G 1217.03 10 39 6 B ? +228TH3 G FL=519.192$ FLAG=LM +228TH G 1357.78 15 37 7 B ? +228TH3 G FL=378.179$ FLAG=LM +228TH G 1548.65 4 70 7 L +228TH3 G FLAG=M +228TH G 1677.67 3 100 9 L +228TH3 G FLAG=M +228TH L 1743.89 3 4+ +228THX L XREF=AB +228TH cL J (E2) |g to 2+ level; (E2+M1) |g to 4+ level; |g to 6+ level +228TH G 399.62 10 16.3 17 L +228TH3 G FLAG=MP +228TH G 590.65 11 9.3 11 I ? +228TH3 G FLAG=K +228TH cG |g not reported in {+228}Ac decay +228TH G 684.0 3 10.4 23 I ? +228TH3 G FLAG=K +228TH cG |g not reported in {+228}Ac decay +228TH G 1365.71 9 8.8 8 +228TH G 1557.10 4 100 5 (E2+M1) +1.2 2 +228TH G 1686.12 5 53.8 23 (E2) +228TH L 1758.24 12 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 326.04 20 100 15 L +228TH3 G FLAG=M +228TH G 1571.52 20 17 5 L +228TH3 G FLAG=M +228TH G 1700.59 20 31 7 L +228TH3 G FLAG=M +228TH L 1760.218 24 2+,3(+) +228THX L XREF=AB +228TH cL J (E2) |g to 4+ level, |g to 2+ level; J|p|=4+ from +228TH2cL |g(|q,H,T) in {+228}Pa decay +228TH G 584.7 3 12 4 & +228TH3 G FLAG=IK +228TH G 737.72 5 73 7 +228TH G 791.44 9 21 6 @ +228TH3 G FL=968.968 +228TH G 1573.26 5 65 4 (E2) +228TH G 1702.44 5 100 7 +228TH L 1795.90 10 3-,4+ +228THX L XREF=A +228TH cL J |g's to 5- and 2+ levels +228TH G 1276.69 10 78 17 L +228TH3 G FLAG=M +228TH G 1738.22 25 100 22 L +228TH3 G FLAG=M +228TH L 1797.65 8 2+ +228THX L XREF=A +228TH cL J |g's to 0+ g.s. and 3- level; log| {If{+1u}t}=8.14 for +228TH2cL |b{+-} decay from 3+ {+228}Ac +228TH G 1401.49 10 60 15 L +228TH3 G FLAG=M +228TH G 1469.71 15 100 20 L +228TH3 G FLAG=M +228TH G 1740.4 3 55 15 L +228TH3 G FLAG=M +228TH G 1797.5 5 11 4 L +228TH3 G FLAG=M +228TH L 1804.689 23 4+ +228THX L XREF=B +228TH cL J M1+E2 |g to 3+ level, (M1+E2) |g to 4+ level, |g to 6+ level +228TH G 116.26 5 12.8 16 I +228TH3 G FLAG=K +228TH G 121.18 7 15.2 24 I ? +228TH3 G FL=1683.82$ FLAG=KB +228TH G 121.87 3 26.4 24 I +228TH3 G FLAG=K +228TH G 158.74 3 100 6 M1+E2 0.55 15 I +228TH3 G FLAG=K +228TH G 354.2 2 23 4 & +228TH3 G FLAG=IK +228TH G 372.60 3 126 6 I ? +228TH3 G FL=1431.979$ FLAG=KB +228TH G 651.5 2 27 4 I +228TH3 G FLAG=K +228TH G 1426.5 2 38 5 I +228TH3 G FLAG=K +228TH G 1618.0 1 72 5 (M1,E2) I +228TH3 G FLAG=K +228TH L 1817.432 23 4- +228THX L XREF=B +228TH cL J E2+M1 |g to 3- level, D+Q |g to 5- level +228TH G 367.04 2 100 5 M1 0.512 I +228TH3 G FLAG=K +228TH G 1298.3 2 18.4 16 (M1+E2) I +228TH3 G FLAG=K +228TH cG MR +0.27|<|d|<+5 from |g(|q,H,T) in {+228}Pa decay +228TH G 1421.1 2 57 3 E2+M1 +2.0 5 I +228TH3 G FLAG=K +228TH L 1838.3 5 15- B +228THX L XREF=D +228TH cL J |g to 13- level; band structure +228TH G 341.2 3 G +228TH L 1892.996 17 3+ +228THX L XREF=AB +228TH cL J E2+M1 |g to 2+ level, M1+E2 |g to 4+ level +228TH G 477.1 3 4.4 13 I +228TH3 G FLAG=KP +228TH G 666.47 4 11 2 @ +228TH G 692.47 7 12.6 9 (M1+E2+E0) 0.24 3 I +228TH3 G FLAG=K +228TH cG CC from |a(K)exp in {+228}Pa decay +228TH G 724.42 11 4.8 6 & +228TH3 G FLAG=IK +228TH G 739.2 2 3.6 6 I +228TH3 G FLAG=K +228TH G 770.2 2 14.3 9 I +228TH3 G FLAG=K +228TH G 870.45 2 100 5 M1 +228TH cG MR -0.1 {I1} ({+228}Pa decay) +228TH G 924.3 2 17.0 13 I +228TH3 G FLAG=K +228TH G 1706.17 7 18.1 8 M1+E2 +0.42 4 +228TH G 1835.29 5 64 8 E2+M1 +2.9 3 +228TH L 1899.95 4 2+ +228THX L XREF=AB +228TH cL J M1+E2 |g tp 2+ level, |g's to 0+ g.s. and 3- level +228TH G 877.39 7 41 4 +228TH G 883.6 3 6.6 18 I +228TH3 G FLAG=K +228TH G 920.8 3 17 4 I +228TH3 G FLAG=K +228TH G 931.02 7 43 4 I +228TH3 G FLAG=K +228TH G 1503.7 2 31 3 I +228TH3 G FLAG=K +228TH G 1842.14 8 100 5 M1+E2 -0.86 14 +228TH G 1900.14 17 9 3 +228TH L 1901.93 8 3-,4 +228THX L XREF=B +228TH cL J |g's to 3- and 5- levels; multiply placed |g to 6+ would +228TH2cL rule out J|p=3- and 4-. log| {If{+1u}t}=7.10 for decay from 3+ {+228}Pa +228TH3cL rules out 5- +228TH G 1383.2 2 100 9 I +228TH3 G FLAG=K +228TH G 1505.9 2 100 9 I +228TH3 G FLAG=K +228TH G 1523.4 2 109 11 & +228TH3 G FLAG=IK +228TH G 1715.06 10 91 6 I +228TH3 G FLAG=K +228TH L 1906.64 10 (2+) +228THX L XREF=A +228TH cL J |g to 0+ g.s., |g to 2+,3- level; log| {If{+1u}t}=7.5 from +228THxcL 3+ {+228}Ac +228TH G 490.33 15 93 19 L +228TH3 G FLAG=M +228TH G 1074.71 15 84 25 L +228TH3 G FLAG=M +228TH G 1907.18 20 100 8 L +228TH3 G FLAG=M +228TH L 1925.22 4 3+,4+ +228THX L XREF=B +228TH cL J M1+E2 |g to 4+ level, |g's to (5+) and 3- levels +228TH G 724.42 11 7.9 9 & +228TH3 G FLAG=IK +228TH G 750.10 10 7.0 8 I +228TH3 G FLAG=K +228TH G 865.15 13 5.2 7 I +228TH3 G FLAG=K +228TH G 956.8 2 26 5 I +228TH3 G FL=968.369$ FLAG=K +228TH G 1529.02 6 27.2 14 I +228TH3 G FLAG=K +228TH G 1738.48 5 100 5 M1+E2 I +228TH3 G FLAG=K +228TH L 1928.57 6 3+ +228THX L XREF=AB +228TH cL J |g's to 2+ and 4+ levels; J|p|=2+,3-,4+ from +228TH2cL |g(|q,H,T) in {+228}Pa decay +228TH G 168.42 9 12 3 I +228TH3 G FLAG=K +228TH G 389.12 15 42 6 L +228TH3 G FLAG=M +228TH G 584.7 3 30 10 & +228TH3 G FLAG=IKP +228TH G 1741.74 21 43 12 +228TH G 1870.81 9 100 6 (M1+E2) +228TH L 1937.16 9 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 397.94 10 100 11 L +228TH3 G FLAG=M +228TH G 1062.55 15 37 11 L +228TH3 G FLAG=M +228TH G 1750.54 20 30 3 L +228TH3 G FLAG=M +228TH G 1879.6 3 4.8 18 L +228TH3 G FLAG=M +228TH L 1944.895 11 3+ +228THX L XREF=AB +228TH cL J E2+M1 |g's to 2+ and 4+ levels +228TH G 184.61 5 1.7 2 (M1) 3.45 I +228TH3 G FLAG=K +228TH G 220.61 2 5.2 3 (M1) 2.10 I +228TH3 G FLAG=K +228TH G 299.10 10 1.79 21 M1 0.90 I +228TH3 G FLAG=K +228TH G 306.61 2 8.3 4 M1 0.84 I +228TH3 G FLAG=K +228TH G 512.79 11 5.5 6 I +228TH3 G FLAG=K +228TH G 718.31 2 26.2 17 (E1) +228TH G 776.52 3 32 3 +228TH G 791.44 9 15 2 (M1) 0.0661 @ +228TH G 853.97 8 3.4 3 I +228TH3 G FLAG=K +228TH G 922.5 2 9.4 5 I +228TH3 G FLAG=K +228TH G 928.4 2 3.7 3 I +228TH3 G FLAG=K +228TH G 975.98 5 56 3 M1 0.0381 +228TH3 G FL=968.968 +228TH G 1070.40 7 5.0 3 I +228TH3 G FLAG=K +228TH G 1549.3 2 5.0 8 I +228TH3 G FLAG=K +228TH G 1758.11 5 37.7 20 E2+M1 -9 1 +228TH G 1887.12 5 100 5 E2+M1 -9.1 9 +228TH L 1958.72 22 2+ +228THX L XREF=A +228TH cL J |g's to 0+ g.s. and 4+ level +228TH G 1772.2 3 100 28 L +228TH3 G FLAG=M +228TH G 1958.4 3 83 28 L +228TH3 G FLAG=M +228TH L 1964.98 7 2+,3,4+ +228THX L XREF=B +228TH cL J |g to 2+ and 4+ levels; multiple placed |g to 0+ g.s., would +228TH2cL limit J|p to 2+ +228TH G 548.74 11 46 LT I +228TH3 G FLAG=K +228TH cG Multiply placed |g in {+228}Pa decay with I|g(doublet)=41 +228THxcG {I5} +228TH G 1778.0 6 6 2 I +228TH3 G FLAG=K +228TH G 1907.13 11 100 9 I +228TH3 G FLAG=K +228TH G 1965.22 12 43 4 & +228TH3 G FLAG=K +228TH L 1974.20 11 3-,4+ +228THX L XREF=B +228TH cL J |g's to 2+ and 5- levels +228TH G 1455.0 2 87 5 I +228TH3 G FLAG=K +228TH G 1578.2 2 100 10 I +228TH3 G FLAG=K +228TH G 1787.2 2 28 3 I +228TH3 G FLAG=K +228TH G 1916.6 3 11.3 23 I +228TH3 G FLAG=K +228TH L 1981.97 6 2+,3,4+ +228THX L XREF=B +228TH cL J |g's to 2+ and 4+ levels +228TH G 1013.54 13 32 4 & +228TH3 G FLAG=IK +228TH G 1795.15 6 100 6 I +228TH3 G FLAG=K +228TH G 1924.2 2 15.1 17 I +228TH3 G FLAG=K +228TH L 1987.46 10 4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 6+ levels +228TH G 1017.92 20 29 7 L +228TH3 G FL=968.968$ FLAG=M +228TH G 1609.41 15 39 8 L +228TH3 G FLAG=M +228TH G 1800.86 20 22 4 L +228TH3 G FLAG=M +228TH G 1929.78 20 100 11 L +228TH3 G FLAG=M +228TH L 1988.1 6 16+ A +228THX L XREF=D +228TH cL J |g to 14+ level; band structure +228TH G 388.6 3 G +228TH L 2010.11 5 2+,3,(4+) +228THX L XREF=AB +228TH cL J |g's to 2+, 2- and 4+ levels limit J|p to 2+, 3. However, +228TH2cL possible E0 component in the 918|g to (4)+ level ({+228}Ac |b{+-} +228TH3cL decay) would require J|p=(4+), making the 887|g to 2- level an M2 +228THxcL transition +228TH G 214.85 10 49 7 L ? +228TH3 G FL=1795.90$ FLAG=M +228TH cG |g not reported in {+228}Pa decay +228TH G 372.57 20 11 3 L ? +228TH3 G FL=1638.284$ FLAG=MB +228TH G 887.33 10 46 5 L +228TH3 G FLAG=M +228TH G 919.01 13 47 6 +228TH cG M possible E0 component ({+228}Ac |b{+-} decay) +228TH G 1040.92 15 75 15 L +228TH3 G FLAG=M +228TH G 1823.21 10 65 6 +228TH G 1952.37 10 100 7 +228TH L 2013.6 3 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 1826.7 3 100 38 L +228TH3 G FLAG=M +228TH G 1955.9 5 38 14 L +228TH3 G FLAG=M +228TH L 2016.76 10 (2-,3-,4-) +228THX L XREF=B +228TH cL J (M1+E2) |g to 3- level +228TH G 1620.67 10 100 (M1+E2) I +228TH3 G FLAG=K +228TH L 2022.84 8 +228THX L XREF=AB +228TH cL Level is proposed in both {+228}Ac and {+228}Pa decays. +228TH2cL However, there is agreement only on one |g (1148.16|g) from this level +228TH G 1053.09 20 220 68 L ? +228TH3 G FL=968.968$ FLAG=MB +228TH cG Possibly part of a doublet in {+228}Pa decay +228TH G 1148.16 14 100 20 +228TH G 1965.22 12 143 14 & +228TH3 G FLAG=M +228TH cG E,RI a multiply placed |g in {+228}Pa with I|g(doublet)=143 {I13}. +228TH2cG All intensity placed here in {+228}Ac decay with I|g=346 {I31} +228TH L 2029.84 16 1,2+ +228THX L XREF=A +228TH cL J |g to 0+ g.s. +228TH G 939.87 15 200 70 L ? +228TH3 G FL=1091.017$ FLAG=MB +228TH G 1013.58 20 100 28 L +228TH3 G FLAG=M +228TH G 1971.9 3 78 17 L +228TH3 G FLAG=M +228TH G 2029.4 5 39 11 L +228TH3 G FLAG=M +228TH L 2036.99 17 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 1850.13 20 100 18 L +228TH3 G FLAG=M +228TH G 1979.3 3 41 11 L +228TH3 G FLAG=M +228TH L 2123.1 3 (2+) +228THX L XREF=A +228TH cL E the level may be questionable, Q(|b{+-})({+228}Ac)=2127 {I3}. +228TH cL J |g's to 4+ and 1- levels; log| {Ift}=3.5 {I20} indicates an +228TH2cL allowed transition +228TH G 1795.1 5 100 38 L +228TH3 G FLAG=M +228TH G 1936.3 3 100 24 L +228TH3 G FLAG=M +228TH L 2209.7 6 17- B +228THX L XREF=D +228TH cL J |g to 15- level; band structure +228TH G 371.4 3 [E2] G +228TH L 2407.9 7 18+ A +228THX L XREF=D +228TH cL J |g tp 16+ level; band structure +228TH G 419.8 3 [E2] G +228THF G FL=1988.1 + +228TH 228AC B- DECAY 1987DA28 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228AC P 0 3+ 6.15 H 2 2127 3 +228TH N 1.000 1.000 1.0 1.0 +228TH PN 2 +228TH cN NR From absolute I|g, based on measurements by 1992Li05, +228TH2cN 1983Sc13 and 1982Sa36. This normalization leads to I|b(g.s.)=6% {I6}, +228TH4cN although consistent with zero as expected from the spin change |DJ=3, +228TH5cN it may indicate that some g.s. transitions are missing from the level +228THxcN scheme. +228TH cL 1992Li05: measured absolute I|g +228TH cL 1987Da28: measured E|g, I|g, |g|g. Earlier report: 1985Da05 +228TH cL 1983Sc13, 1982Sa36: measured absolute I|g +228TH cL 1982Ma52, 1960Ar06, 1957Bj56: measured ce +228TH cL 1979Bo30: measured E|g; not included in E|g calculation +228TH2cL because five out of twelve E|g disagree with measurements of 1987Da28 +228TH3cL and 1979He10 (deviation>3 x |s) +228TH cL 1979He10: measured E|g +228TH cL 1974De14: measured E|g, I|g, |b|g(|q), |b|g(circ pol)(|q) +228TH cL +228TH cL The decay scheme is that proposed by 1987Da28 +228TH cL E,J From adopted levels +228TH CL BAND(A) GS ROTATIONAL BAND +228TH CL BAND(B) KPI=0- OCTUPOLE BAND +228TH CL BAND(C) KPI=0+ TWO OCTUPOLE PHONON BAND +228TH CL BAND(D) KPI=1- OCTUPOLE BAND +228TH CL BAND(E) KPI=2+ GAMMA-VIBRATIONAL BAND +228TH CL BAND(F) KPI=2- OCTUPOLE BAND +228TH CL BAND(G) KPI=2+ ROTATIONAL BAND ON QUASIPARTICLE STATE +228TH cB J|p({+228}Ac)=3+ +228TH cB Q(|b{+-})=2127 {I3} (1995Au04) +228TH cB IB Deduced from intensity balance in the level scheme. +228TH cG E From 1987Da28, unless otherwise noted +228TH cG RI From 1987Da28, unless otherwise noted. The relative I|g of +228TH2cG 1987Da28 have been normalized to the absolute measurements of 1992Li05, +228TH3cG 1983Sc13 and 1982Sa36 at the three |g's with I|g>10 % (338.324|g +228TH4cG I|g=11.27% {I19}, 911.205|g I|g=25.8% {I4} and 968.987|g I|g=15.8% +228TH5cG {I3}, giving a normalization factor of 0.0258 {I5}). +228TH cG M From adopted I|g and the Ice data of 1960Ar06 and 1971He23 +228TH2cG (as noted with |a(exp)) normalized to theoretical values for: +228TH3cG |a(L)(E2) for 129.065|g, |a(K)(E1) for 209.253|g and |a(K)(E2) for +228THxcG 968.971|g +228TH cG E(A) Weighted average of measurements by 1987Da28, 1979He10. The +228TH2cG measurements of 1979He10 have been corrected by using the calibration +228TH3cG line E|g from 1995HeZZ. +228TH cG E(B) Energy fit poor, E|g not included in the least squares fit +228TH2cG to obtain E(level) +228TH cG E(M) |g unassigned by 1987Da28. Placement suggested by {+228}Pa +228TH2cG decay +228TH cG RI(D) Weighted average of absolute intensity measurements of +228TH2cG 1992Li05, 1983Sc13, 1982Sa36 +228TH cG RI(E) Weighted average of measurements by 1992Li05, 1987Da28, +228TH2cG 1983Sc13, 1982Sa36 +228TH cG RI(F) Weighted average of measurements by 1987Da28, 1983Sc13, +228THxcG 1982Sa36 +228TH cG RI(G) Weighted average of measurements by 1987Da28, 1983Sc13 +228TH cG RI(H) Weighted average of measurements by 1987Da28, 1982Sa36 +228TH cG RI(I) Weighted average of measurements by 1992Li05, 1987Da28, +228THxcG 1983Sc13 +228TH cG RI(N) Intensity of the doublet divided by evaluator by comparison +228TH2cG with branching ratios and the intensities of the doublet as measured +228TH3cG in both {+228}Ac and {+228}Pa decays. +228TH cG M(J),MR(K)$From {+228}Pa |e decay +228TH cG M(L) |a(K)exp(1245|g+1247|g)=0.013 {I3} (1971He23); theory: +228TH2cG |a(K)(M1)=0.0162, |a(K)(E2)=0.00521. I(1245|g)=0.095 {I18}, +228TH3cG I(1247|g)=0.50 {I3}; the 1245|g is [M1,E2]. Therefore: if the 1245|g +228TH4cG is M1, then |a(K)exp(1247|g)=0.013 {I3}; if 1245|g is E2, then +228THxcG |a(K)exp(1247|g)=0.015 {I3}. In each case the |g M1(+E2). +228TH cG E(P) The adopted J|p require that this |g have an unreasonable +228TH2cG multipolarity (M2 or E3). The placement of this transition is +228TH3cG therefore questionable. +228TH cG RI(Q) Total intensity (I|g=0.013 {I3}) placed from 1344.1 level by +228TH2cG 1987Da28. Alternate placement from 1928.6 level suggested by {+228}Pa +228TH3cG decay. +228TH cG E(R) |g's of approximately same energy and intensity are reported +228TH2cG in both {+228}Ac and {+228}Pa decays. On the basis of coin with +228TH3cG 911.2|g, it is suggested in {+228}Ac decay that the |g feeds the 2+ +228TH4cG 968.97 level. In {+228}Pa decay, the |g is placed feeding the 3- +228TH5cG 968.37 level. The energy of the |g (E|g=674.65 {I5}) agrees with decay +228TH6cG to the 968.37 level. Possibly the |g is a doublet feeding both the +228TH7cG 968.97 and 968.37 levels. I|g(doublet)=0.101 {I8} +228TH cG E(T),RI(T)$|g not reported in this decay. Placement suggested by +228TH2cG {+228}Pa decay. I|g deduced from branching ratio in {+228}Pa decay. +228TH cG RI(U) The energy of the 853-keV transition from the 1944.9 level is +228TH2cG expected to be 853.877 {I12} from E(level); the expected intensity +228TH3cG is I|g=0.0031 {I4} from branching ratio in {+228}Pa decay. Therefore, +228TH4cG the the 853.17 {I10} |g with I|g=0.0119 {I18} reported by 1987Da28 +228TH5cG seems to be a doublet with part of the intensity belonging to a |g +228TH6cG unplaced in level scheme +228TH G 56.96 5 0.019 4 +228TH G 137.91 5 0.024 5 M1 7.90 +228TH cG M |a(K)exp=5.5 {I17}, K/L=5.6 {I27} (1971He23) +228TH G 466.40 10 0.029 3 +228TH G 634.18 10 0.0106 21 +228TH G 853.17 10 0.0088 18 U +228TH G 1337.33 20 0.0049 15 +228TH G 1378.23 10 0.0059 18 +228TH G 1385.39 10 0.0106 21 +228TH G 1434.22 15 0.0080 23 +228TH G 1438.01 10 0.0059 15 +228TH G 1480.37 15 0.016 3 +228TH G 1529.05 10 0.057 6 +228TH G 1671.64 15 0.0041 13 +228TH G 1684.01 20 0.015 5 +228TH G 1721.4 3 0.0057 21 +228TH G 1745.28 20 0.0065 8 +228TH G 1784.4 3 0.0059 10 +228TH G 1787.3 5 0.0013 5 +228TH G 1915.9 4 0.0008 3 +228TH G 1919.5 3 0.0021 5 +228TH G 1944.20 20 0.0021 5 +228TH G 2000.9 5 0.0010 3 +228TH L 0.0 0+ A +228TH L 57.759 4 2+ A +228TH B 8 6 8.9 4 +228THS B EAV=744.1 13 +228TH G 57.766 5 0.47 3 E2 156 A +228TH3 G FLAG=H +228THS G LC=114$ MC=31.1$ NC+=11.4 +228TH cG M |a(L)exp=124 {I11} (1971He23); L12/L3=1.42 (1982Ma52), 1.14 +228TH2cG {I8} (1960Ar06), 1.15 {I15} (1957Bj56); theory: |a(K)=114, L12/L3=1.23 +228TH L 186.823 4 4+ A +228TH B 0.8 6 9.8 4 +228THS B EAV=691.5 13 +228TH G 129.065 1 2.42 9 E2 3.81 A +228TH3 G FLAG=E +228THS G KC=0.269$ LC=2.58$ MC=0.707$ NC+=0.263 +228TH cG M L12/L3=1.94 {I14} (1960Ar06), 1.7 {I2} (1957Bj56). K/L=0.10 +228TH2cG {I1} (1971He23), 0.12 {I3} (1957Bj56); theory: L12/L3=1.70, K/L=0.10 +228TH L 328.003 4 1- B +228TH B 0.65 17 10.69 12 1U +228THS B EAV=606.6 12 +228TH G 270.245 2 3.46 6 E1 0.0474 A +228TH3 G FLAG=E +228THS G KC=0.0379$ LC=0.00721$ MC=0.00173$ NC+=0.00061 +228TH cG M |a(K)exp=0.029 {I4} (1971He23); theory: |a(K)=0.0379 +228TH G 328.000 6 2.95 12 E1 0.0308 H +228THS G KC=0.0247$ LC=0.00458$ MC=0.00110$ NC+=0.00039 +228TH cG M |a(K)exp=0.037 {I8} (1971He23); theory |a(K)=0.0247 +228TH L 378.179 10 6+ A +228TH G 191.353 10 0.123 8 E2 0.791 H +228THS G KC=0.174$ LC=0.450$ MC=0.123$ NC+=0.0454 +228TH cG M |a(K)exp=0.24 {I7}, K/L=1.0 {I5}; theory: |a(K)(E2)=0.174, +228TH2cG K/L(E2)=0.39, |a(K)(M1)=2.49, K/L(M1)=5.25 +228TH L 396.078 5 3- B +228TH B 11.66 24 8.428 10 +228THS B EAV=606.9 12 +228TH G 209.253 6 3.89 7 E1 0.086 E +228THS G KC=0.0678$ LC=0.0135$ MC=0.00323$ NC+=0.00114 +228TH cG M from K/L and L subshell ratios in {+228}Pa |e decay. +228TH2cG Other: K/L=2.4 {I4} (1971He23) +228TH G 338.320 3 11.27 19 E1 0.0288 A +228TH3 G FLAG=D +228THS G KC=0.0231$ LC=0.00426$ MC=0.00102$ NC+=0.00036 +228TH cG M |a(K)exp=0.019 {I2} (1960Ar06); theory: |a(K)=0.0231 +228TH L 519.192 6 5- B +228TH B 0.08 LT 11.3 GT 1U +228THS B EAV=534.3 12 +228TH G 141.02 3 0.050 8 E1 0.220 J +228THS G KC=0.171$ LC=0.0366$ MC=0.0088$ NC+=0.00313 +228TH cG M |a(K)exp=0.7 {I5} (1971He23); theory: |a(K)(E1)=0.171, +228TH2cG |a(K)(E2)=0.259, |a(K)(M1)=5.92, |a(K)(M2)=26.1. +228TH G 332.370 4 0.40 4 E1 0.0299 A +228TH3 G FLAG=EJ +228THS G KC=0.0240$ LC=0.00444$ MC=0.00106$ NC+=0.00038 +228TH cG M ce(K) not seen by 1960Ar06. |a(K)exp=0.41 {I8} (1971He23) +228TH2cG does not agree with [E1] required by the level scheme. +228TH L 831.823 10 0+ C +228TH G 503.823 13 0.182 12 (E1) 0.0125 A +228TH3 G FLAG=G +228THS G KC=0.0101$ LC=0.00178 +228TH cG M Ice not seen (1971He23), upper limit in Ice suggests E1 +228TH G 774.1 2 0.06 AP [E2] 0.0167 +228THS G KC=0.0122$ LC=0.00339 +228TH L 874.473 18 2+ C +228TH B 0.23 10 9.62 19 +228THS B EAV=418.5 12 +228TH G 478.33 5 0.209 15 E1 0.0139 +228THS G KC=0.0112$ LC=0.00199$ MC=0.00047$ NC+=0.00017 +228TH G 546.47 5 0.201 13 [E1] 0.0106 +228THS G KC=0.0086$ LC=0.00151 +228TH G 688.10 5 0.067 5 [E2] 0.0212 & +228TH2 G FL=186.823$ FLAG=B +228THS G KC=0.0151$ LC=0.00464 +228TH G 816.71 10 0.030 3 [M1,E2] 0.038 23 +228THS G KC=0.030 19$ LC=0.006 3 +228TH G 874.44 7 0.047 10 [E2] 0.0131 A +228THS G KC=0.0098$ LC=0.00249 +228TH L 938.58 7 0+ D +228TH G 610.64 10 0.023 5 [E1] +228TH G 880.76 10 0.0062 18 [E2] 0.0129 +228THS G KC=0.0096$ LC=0.00244 +228TH L 944.196 13 1,2+ +228TH B 0.07 LT 10.0 GT +228THS B EAV=391.8 12 +228TH G 616.22 3 0.080 5 A +228TH G 944.196 14 0.095 8 A +228TH L 968.369 20 3- D +228TH B 0.21 4 9.54 9 +228THS B EAV=382.6 12 +228TH G 449.15 5 0.048 5 [E2] 0.0563 A +228THS G KC=0.0335$ LC=0.0168$ MC=0.00439$ NC+=0.00162 +228TH G 572.14 8 0.150 16 [M1,E2] 0.09 7 A +228THS G KC=0.07 6$ LC=0.016 8 +228TH G 640.34 3 0.054 5 [E2] 0.0247 A +228THS G KC=0.0172$ LC=0.00567 +228TH L 968.968 5 2+ E +228TH B 29.9 10 7.39 2 +228THS B EAV=382.3 12 +228TH G 782.142 5 0.485 19 [E2] 0.0163 A +228TH3 G FLAG=E +228THS G KC=0.0119$ LC=0.00330 +228TH cG M |a(K)exp=0.024 {I3} (1960Ar06), 0.07 {I3} (1971He23) +228TH2cG inconsistent with with each other and with E2 assignment required by +228THxcG level scheme +228TH G 911.204 4 25.8 4 E2 0.0121 A +228TH3 G FLAG=D +228THS G KC=0.0091$ LC=0.00225 +228TH cG M |a(K)exp=0.0104 {I10}, K/L=4.6 {I5} (1971He23), +228TH2cG |a(K)exp=0.0092 {I9} (1960Ar06); theory: |a(K)=0.0091, K/L=4.04. +228THxcG |d=+24 {I8} from {+228}Pa decay +228TH G 968.971 17 15.8 3 E2 0.0107 A +228TH3 G FLAG=D +228THS G KC=0.00815$ LC=0.00194 +228TH cG M |a(L)exp=0.0016 {I3} (1971He23); theory: |a(K)=0.00815, +228TH2cG |a(L)=0.0194; |a(K)exp used in normalization of the ce spectra. +228TH L 979.499 14 2+ +228TH B 0.13 7 9.73 24 +228THS B EAV=378.3 12 +228TH G 583.41 5 0.111 10 [E1] 0.0094 +228THS G KC=0.00761$ LC=0.00132 +228TH cG RI does not agree with the branching ratio in {+228}Pa decay +228TH G 651.51 3 0.090 8 [E1] 0.0076 A +228THS G KC=0.00617$ LC=0.00106 +228TH G 792.8 0.08 AP [E2] 0.0159 +228THS G KC=0.0116$ LC=0.00319 +228TH G 921.98 10 0.0147 21 [M1,E2] 0.028 17 & +228THS G KC=0.022 14$ LC=0.0044 22 +228TH cG M |a(K)exp=2.0 {I4} (1971He23) may indicate an E0 component +228TH cG Total intensity placed here by 1987Da28 +228TH G 979.48 10 0.026 3 [E2] 0.0105 +228THS G KC=0.00799$ LC=0.00189 +228TH L 1016.406 21 2+,3-,4+ +228TH B 0.31 5 9.31 7 +228THS B EAV=364.3 12 +228TH G 620.38 5 0.080 5 +228TH G 688.10 5 0.067 5 & +228TH2 G FL=328.003 +228TH cG |g not placed here by 1987Da28; this placement of the |g +228TH2cG suggested in {+228}Pa decay +228TH G 958.61 4 0.28 4 A +228TH3 G FLAG=H +228TH G 1016.44 15 0.019 3 & +228TH L 1022.527 6 (3)+ E +228TH B 3.10 15 8.30 2 +228THS B EAV=362.0 12 +228TH G 835.710 6 1.61 6 E2 0.0143 A +228TH3 G FLAG=EJ +228THS G KC=0.0106$ LC=0.00279 +228TH cG M |a(K)exp|<0.015 (1971He23); theory: |a(K)=0.0106 +228TH G 964.766 10 4.99 9 E2+M1 -7.2 10 0.0108 A +228TH3 G FLAG=E +228THS G KC=0.00821$ LC=0.00196 +228TH cG M |a(K)exp=0.0084 {I9} (1971He23); theory: |a(K)=0.00821 +228TH L 1059.93 3 4- +228TH B 0.071 11 9.88 7 +228THS B EAV=347.9 12 +228TH G 540.76 10 0.026 3 [M1,E2] 0.11 8 +228THS G KC=0.08 6$ LC=0.018 9 +228TH G 663.82 10 0.028 6 (M1+E2) 0.06 4 J +228THS G KC=0.05 4$ LC=0.010 6 +228TH G 873.17 15 0.031 6 [E1] 0.00441 +228THS G KC=0.00361$ LC=0.00060 +228TH L 1091.017 8 4+ E +228TH B 0.26 5 9.28 9 +228THS B EAV=336.3 12 +228TH G 904.20 4 0.77 3 E2 0.0123 A +228TH3 G FLAG=FJ +228THS G KC=0.0092$ LC=0.00229 +228TH cG M |a(K)exp=0.027 {I10} (1971He23), ce(K) not seen (1960Ar06); +228TH2cG |a(K)exp does not agree with |a(K)exp measured in {+228}Pa |e decay. +228TH G 1033.248 9 0.201 13 E2 0.0095 A +228TH3 G FLAG=J +228THS G KC=0.00727$ LC=0.00167 +228TH L 1122.951 6 2- F +228TH B 5.92 14 7.871 12 +228THS B EAV=324.4 12 +228TH G 100.41 3 0.093 13 (E1+M2) 0.23 AP 3.2 AP +228THS G LC=2.4$ MC=0.64$ NC+=0.25 +228TH cG M,MR |a(L3)exp|?0.43 (1971He23); theory: |a(L3)(E1)=0.0213, +228TH2cG |a(L3)(M2)=8.66. |a(L3)exp could also fit M1+E2; however, level scheme +228TH3cG requires |D|p=yes +228TH G 153.977 10 0.722 21 E1 0.178 E +228TH3 G FL=968.968 +228THS G KC=0.139$ LC=0.0292$ MC=0.00703$ NC+=0.00250 +228TH cG M |a(K)exp=0.095 {I16} (1971He23); theory: |a(K)=0.129 +228TH G 726.863 15 0.62 8 (E2) 0.0189 +228THS G KC=0.0136$ LC=0.00400 +228TH cG M |a(K)exp|?0.012 (1971He23); theory: |a(K)=0.0136 +228TH G 794.947 5 4.25 7 E2+M1 -4.4 10 0.0182 15 A +228TH3 G FLAG=DK +228THS G KC=0.0136 13$ LC=0.00349 20 +228TH cG M |a(K)exp=0.0118 {I20}, K/L=1.6 {I7} (1971He23), +228TH2cG |a(K)exp=0.0139 {I19} (1960Ar06); theory: |a(K)(E2)=0.0116, +228THxcG |a(K)(M1)=0.0524 +228TH G 1065.18 4 0.132 10 A +228TH L 1153.467 10 2+ 0.29 NS 2 +228TH cL T from 1974De14 +228TH B 5.1 8 7.89 7 +228THS B EAV=313.1 11 +228TH G 173.964 13 0.035 5 M1+E2 1.2 +11-6 2.3 18 A +228THS G KC=1.5 10$ LC=0.66 4$ MC=0.171 22$ NC+=0.063 5 +228TH cG M,MR from |a(K)exp=1.5 {I8} (1971He23); also fits E1+M2 with +228TH2cG |d=0.35 {I12}, level scheme requires |D|p=no. Theory: |a(K)(E1)=0.104, +228TH3cG |a(K)(E2)=0.203, |a(K)(M1)=3.26, |a(K)(M2)=12.9 +228TH G 184.54 2 0.070 8 E0+M1 63 8 4.5 8 +228TH3 G FL=968.968 +228THS G KC=53 7$ LC=10.2 13$ MC=0.126$ NC+=0.0462 +228TH cG M K/L=4.0 {I5}, L1/L2=33 {I6}, L1/L3>>50 (1974De14), +228TH2cG |a(K)exp=53 {I7} (1971He23); measured |a(K)exp yields an E0 transition +228TH3cG with an admixture of: 5.4% M1 with K/L=5.2, L1/L2=30, L1/L3=3300, or +228TH4cG 1.4% E2 with K/L=5.0, L1/L2=16.5, L1/L3=58. Thus the ratios support +228TH5cG E0+M1 transition +228TH cG CC from |a(K)exp +228TH G 278.95 5 0.160 21 (M1,E2) 0.7 5 @ +228TH3 G FL=874.473$ FLAG=N +228THS G KC=0.48 39$ LC=0.130 35$ MC=0.033 7$ NC+=0.0119 24 +228TH cG M |a(K)exp(doublet)=0.18 {I4} (1960Ar06), +228TH2cG |a(L)exp(279|g+282|g)=0.37 {I7} (1971He23); theory: |a(K)(M1)=0.872, +228THxcG |a(K)(E2)=0.0854 +228TH G 321.646 8 0.226 11 [E2] 0.140 A +228TH3 G FLAG=D +228THS G KC=0.0643$ LC=0.0550$ MC=0.0147$ NC+=0.00544 +228TH cG M |a(K)exp=0.49 {I8} (1971He23) indicating mainly M1 transition +228TH2cG (|a(K)(M1)=0.590) which is not in agreement with the level scheme. +228TH3cG 1960Ar06 did not see ce(K) suggesting that the |a(K)exp may be +228THxcG unreliable. +228TH G 1095.679 20 0.129 10 [M1,E2] 0.018 10 A +228TH G 1153.52 4 0.139 10 A +228TH L 1168.375 5 3- F +228TH B 3.08 7 8.084 11 +228THS B EAV=307.6 11 +228TH G 77.34 3 0.026 5 [E1] 0.235 +228THS G LC=0.177$ MC=0.0431$ NC+=0.0150 +228TH G 145.849 10 0.158 8 E1 0.203 H +228TH3 G FLAG=J +228THS G KC=0.158$ LC=0.0336$ MC=0.00809$ NC+=0.00287 +228TH cG M |a(K)exp=1.3 {I4} (1971He23); theory: |a(K)=0.158. ce not +228TH2cG seen by 1960Ar06 or in {+228}Pa decay. +228TH G 199.407 10 0.315 5 E1 0.096 H +228TH3 G FLAG=J +228THS G KC=0.0758$ LC=0.0152$ MC=0.00365$ NC+=0.00129 +228TH cG M ce(K), ce(L) not seen (1971He23,1960Ar06), suggests E1 mult +228TH G 648.84 10 0.040 4 [E2] 0.0240 & +228TH2 G FL=519.192 +228THS G KC=0.0168$ LC=0.00546 +228TH G 772.291 5 1.49 3 E2+M1 -3.4 +8-27 0.021 3 A +228TH3 G FLAG=EK +228THS G KC=0.0157 24$ LC=0.0040 4 +228TH cG M |a(K)exp=0.016 {I7} (1971He23), 0.019 {I3} (1960Ar06); +228TH2cG theory: |a(K)=0.0157 {I24} +228TH G 840.377 7 0.91 4 E2 0.0142 A +228TH3 G FLAG=EJ +228THS G KC=0.0105$ LC=0.00275 +228TH cG M |a(K)exp|<0.026 (1971He23); theory: |a(K)=0.0105 +228TH G 1110.610 10 0.285 23 E1 @ +228TH3 G FLAG=AJN +228TH L 1174.508 18 (5+) E +228TH B 0.005 LT 10.9 GT +228THS B EAV=305.4 11 +228TH G 987.71 20 0.077 13 [M1,E2] 0.024 14 +228THS G KC=0.019 11$ LC=0.0037 18 +228TH L 1175.39 5 2+ +228TH B 0.17 3 9.33 8 +228THS B EAV=305.0 11 +228TH G 231.42 10 0.025 4 [D,E2] 1.0 9 +228TH G 988.63 20 0.077 13 [E2] 0.0103 +228TH G 1117.63 10 0.054 8 +228TH G 1175.31 10 0.024 3 +228TH L 1226.565 7 (4)- F +228TH B 0.66 4 8.66 3 +228THS B EAV=286.3 11 +228TH G 135.54 5 0.018 4 E1 0.242 J +228THS G KC=0.188$ LC=0.0406$ MC=0.0098$ NC+=0.00348 +228TH cG M |a(K)exp|?3 (1971He23); theory: |a(K)=0.188 +228TH G 204.026 10 0.112 15 E1 0.091 H +228THS G KC=0.0719$ LC=0.0143$ MC=0.00344$ NC+=0.00122 +228TH cG M |a(L)exp<0.23 (1971He23); theory: |a(L)(E1)=0.0143, +228THxcG |a(L)(E2)=0.342 +228TH G 707.41 5 0.155 15 (E2) 0.0200 H +228TH3 G FLAG=J +228THS G KC=0.0143$ LC=0.00711 +228TH G 830.486 8 0.540 21 E2(+M1) -7.7 9 0.0152 2 A +228TH3 G FLAG=FJK +228THS G KC=0.0113 2 $ LC=0.00293 3 +228TH cG M |a(K)exp=0.020 {I11} (1971He23); theory: |a(K)=0.0113 {I2} +228TH G 1039.65 15 0.044 9 +228TH L 1297.423 10 (5)- F +228TH B 0.058 13 9.95 10 1U +228THS B EAV=257.9 10 +228TH G 778.23 0.022 6 [M1,E2] 0.04 3 S +228TH3 G FLAG=T +228THS G KC=0.034 22$ LC=0.007 4 +228TH G 901.23 15 0.016 3 [E2] 0.0123 +228THS G KC=0.00926$ LC=0.00231 +228TH G 1110.610 10 0.019 10 E1 @ +228TH3 G FLAG=JN +228TH L 1344.078 11 3- +228TH B 0.208 16 8.95 4 +228THS B EAV=243.9 11 +228TH G 168.65 10 0.010 3 [E1] 0.143 @ +228TH2 G FLAG=Q +228THS G KC=0.112$ LC=0.0232$ MC=0.00557$ NC+=0.00197 +228TH G 824.934 23 0.050 5 [E2] 0.0147 A +228THS G KC=0.0108$ LC=0.00288 +228TH G 947.982 11 0.106 8 [M1,E2] 0.026 15 A +228THS G KC=0.021 12$ LC=0.0041 20 +228TH G 1016.44 15 0.019 3 & +228TH G 1157.14 15 0.0070 13 +228TH G 1286.27 20 0.050 10 +228TH L 1416.11 6 2+,3- +228TH B 0.060 8 9.35 6 +228THS B EAV=218.4 11 +228TH G 471.76 15 0.033 3 [D,E2] 0.14 12 +228TH G 1019.86 10 0.021 4 +228TH G 1088.18 15 0.0059 13 +228TH G 1229.40 15 0.0075 23 +228TH L 1431.979 6 4+ +228TH B 0.8 4 8.19 22 +228THS B EAV=212.9 11 +228TH G 257.52 10 0.030 3 (M1) 1.36 J +228THS G KC=1.09$ LC=0.205$ MC=0.0495$ NC+=0.0180 +228TH G 263.58 10 0.040 4 E1 0.0502 J +228THS G KC=0.0400$ LC=0.00766$ MC=0.00184$ NC+=0.00065 +228TH G 278.95 5 0.031 5 [E2] 0.216 @ +228TH3 G FL=1153.467$ FLAG=N +228THS G KC=0.086$ LC=0.096$ MC=0.0257$ NC+=0.0095 +228TH cG |g not placed here by 1987Da28; this alternate placement is +228TH2cG suggested in {+228}Pa decay +228TH G 340.96 5 0.369 21 E2+M1 -5.2 18 0.136 23 E +228TH3 G FLAG=JK +228THS G KC=0.073 20$ LC=0.046 2$ MC=0.0122 5$ NC+=0.00450 17 +228TH cG M |a(K)exp=0.66 {I7} (1971He23) suggests an M1 transition. +228TH2cG However, ce(K) not seen by 1960Ar06. +228TH G 409.462 6 1.92 4 E2+M1 -5.4 8 0.082 4 A +228TH3 G FLAG=EK +228THS G KC=0.049 4$ LC=0.0242 5$ MC=0.00631 10$ NC+=0.00233 4 +228TH cG M |a(K)exp=0.058 {I9}, K/L=2.0 {I4} (1971He23), |a(K)exp=0049 +228TH2cG {I4} (1960Ar06). Theory: |a(K)=0.49 {I4}, K/L=2.02 +228TH G 452.47 10 0.015 5 [E2] 0.0553 +228THS G KC=0.0330$ LC=0.0164$ MC=0.00429$ NC+=0.00158 +228TH G 463.004 6 4.40 7 E2 0.0522 A +228TH3 G FLAG=E +228THS G KC=0.0316$ LC=0.0152$ MC=0.00397$ NC+=0.00146 +228TH cG M |a(K)exp=0.036 {I4}, K/L=3.0 {I7} (1971He23); |a(K)exp=0.028 +228TH2cG {I3} (1960Ar06); theory: |a(K)=0.0316, K/L=2.1 +228TH G 1103.41 10 0.0150 23 [E3] B ? +228TH2 G FL=328.003$ FLAG=P +228TH G 1245.05 20 0.095 18 [M1,E2] 0.013 7 L +228TH G 1374.19 10 0.014 4 +228TH L 1450.394 10 4- +228TH B 0.59 7 8.28 6 +228THS B EAV=206.5 11 +228TH G 18.4 0.014 4 [E1] 6.6 0.11 3 S +228TH cG TI,RI deduced from branching ratio in Pa decay +228TH G 223.85 10 0.054 5 M1+E2 -0.18 5 1.97 3 J +228TH3 G FLAG=K +228THS G KC=1.56 3$ LC=0.302 1$ MC=0.0729 2$ NC+=0.0266 1 +228TH cG M |a(K)exp=1.7 {I5}, K/L=4.2 {I19} (1971He23); theory: +228THxcG |a(K)=1.56 {I3}, K/L=5.2 +228TH G 282.00 3 0.072 19 M1+E2 -0.51 12 0.88 7 A +228TH3 G FLAG=HJK +228THS G KC=0.69 6$ LC=0.145 6$ MC=0.0355 11$ NC+=0.0129 4 +228TH G 327.44 0.12 4 [E2] 0.132 S +228TH3 G FLAG=T +228THS G KC=0.0621$ LC=0.0515$ MC=0.0137$ NC+=0.00508 +228TH cG |g may be masked by strong 328.000|g. +228TH cG E E|g from E(level) +228TH G 480.94 20 0.023 5 [M2] P +228TH3 G FL=968.968 +228TH cG Not reported in {+228}Pa decay +228TH G 930.93 10 0.0124 18 & +228TH cG Placement of |g in level scheme uncertain. Alternate +228TH2cG placement suggested in {+228}Pa decay +228TH G 1054.11 20 0.018 5 +228TH L 1531.474 6 3+ +228TH B 8.0 4 6.96 2 +228THS B EAV=178.7 11 +228TH G 99.509 6 1.26 7 M1 4.09 A +228TH2 G FLAG=H +228THS G LC=3.07$ MC=0.741$ NC+=0.273 +228TH cG M |a(L12)exp=3.0 {I3} (1971He23), 2.0 {I3} (1960Ar06); L3 not +228TH2cG seen (1960Ar06) theory: |a(L)=3.07 +228TH G 356.94 10 0.0170 18 [E2] 0.103 +228THS G KC=0.0523$ LC=0.0374$ MC=0.0099$ NC+=0.00368 +228TH cG M |a(K)exp=1.9 {I9} (1971He23) does not agree with +228TH2cG multipolarity deduced from level scheme. Theory: |a(K)=0.0523 +228TH G 377.99 10 0.025 3 [M1,E2] 0.28 19 +228THS G KC=0.21 17$ LC=0.051 20$ MC=0.013 5$ NC+=0.0046 16 +228TH G 440.44 5 0.121 8 M1 0.314 +228THS G KC=0.252$ LC=0.0471$ MC=0.0113$ NC+=0.00410 +228TH cG M |a(K)exp=0.26 {I9} (1971He23); theory: |a(K)=0.252. Limit of +228TH2cG E2 admixture |d<0.8 +228TH G 508.959 17 0.45 5 E2(+M1) 1.1 GT 0.08 4 A +228THS G KC=0.06 3$ LC=0.016 5 +228TH cG M,MR |a(K)exp=0.06 {I3} (1971He23); theory: |a(K)(E2)=0.0264, +228THxcG |a(K)(M1)=0.171 +228TH G 562.500 4 0.87 3 E2+M1 +1.6 6 0.07 3 A +228TH3 G FLAG=EK +228THS G KC=0.051 23$ LC=0.013 4 +228TH cG M |a(K)exp=0.048 {I10} (1971He23); E1+M2 mixture requires +228THxcG |d=0.39 +228TH G 1135.24 15 0.0098 15 +228TH G 1344.59 15 0.0090 18 +228TH L 1539.21 9 2,3,4 +228TH G 416.30 20 0.0132 21 [E1] 0.0185 +228THS G KC=0.0149$ LC=0.00268$ MC=0.000640$ NC+=0.000228 +228TH G 1142.85 15 0.0103 21 +228TH L 1617.78 7 2+,3,4+ +228TH B 0.075 13 8.77 8 +228THS B EAV=149.8 10 +228TH G 648.84 10 0.040 4 & +228TH3 G FL=968.968 +228TH cG |g not placed here by 1987Da28. This multiply placement +228TH2cG suggested in {+228}Pa decay +228TH G 1430.95 10 0.035 7 +228TH G 1559.85 20 0.020 4 +228TH L 1638.284 9 2+ G +228TH cL Quasiparticle configuration=((|p 3/2+[651])(|p 1/2+[660])) or +228TH2cL configuration=((|p 3/2+[651])(|p 1/2+[400])) suggested for this level +228TH B 1.15 5 7.52 2 +228THS B EAV=143.0 10 +228TH G 470.25 20 0.013 3 [E1] 0.0144 +228THS G KC=0.0116$ LC=0.00206$ MC=0.00049$ NC+=0.00018 +228TH G 515.06 10 0.049 5 [E1] 0.0120 +228THS G KC=0.0097$ LC=0.00170 +228TH G 1309.71 20 0.019 6 +228TH G 1451.40 15 0.0106 21 +228TH G 1580.53 3 0.60 4 (M1,E2) A +228TH3 G FLAG=I +228TH cG M |a(K)exp=0.012 {I7} (1971He23); theory: |a(K)(M1)=0.0087, +228THxcG |a(K)(E2)=0.00343 +228TH G 1638.281 10 0.47 3 (E2) A +228TH3 G FLAG=IJ +228TH L 1643.125 15 (2-,3-) +228TH B 0.80 6 7.67 4 +228THS B EAV=141.4 10 +228TH G 474.75 10 0.022 3 [M1,E2] 0.15 11 +228THS G KC=0.12 9$ LC=0.026 13$ MC=0.006 3$ NC+=0.0023 10 +228TH G 520.151 16 0.067 5 (M1) 0.201 A +228THS G KC=0.161$ LC=0.0301 +228TH cG M |a(K)exp=0.31 {I12} (1971He23); theory: |a(K)=0.161 +228TH G 627.23 20 0.014 3 +228TH G 674.16 0.109 LE [E1] R +228TH3 G FL=968.968 +228TH cG E deduced from E(level) +228TH G 674.75 0.109 LE [M1,E2] 0.06 4 R +228TH3 G FL=968.369 +228THS G KC=0.048 32$ LC=0.010 5 +228TH cG E deduced from E(level) +228TH G 699.08 15 0.037 5 [D,E2] 0.05 4 +228TH G 1247.08 4 0.50 3 (M1) 0.0201 A +228TH3 G FLAG=IL +228TH G 1315.34 10 0.015 3 [M1,E2] 0.012 6 +228TH L 1645.954 12 3+ +228TH B 4.16 20 6.94 2 +228THS B EAV=140.5 10 +228TH G 114.56 7 0.0098 21 [M1,E2] 10 4 +228THS G KC=5.5 52$ LC=3.2 12$ MC=0.9 4$ NC+=0.32 14 +228TH G 419.42 10 0.021 3 [E1] 0.0182 +228THS G KC=0.0147$ LC=0.00264$ MC=0.00063$ NC+=0.000225 +228TH G 492.37 10 0.0235 23 [M1,E2] 0.14 10 +228THS G KC=0.11 8$ LC=0.024 12$ MC=0.006 3$ NC+=0.0021 10 +228TH G 523.131 16 0.103 8 [E1] 0.0116 A +228TH3 G FL=1122.951$ FLAG=B +228THS G KC=0.00942$ LC=0.000165 +228TH cG M |a(K)exp|<0.08 (1971He23); theory: |a(K)(E1)=0.0094, +228TH2cG |a(K)(E2)=0.0251, |a(K)(E3)=0.0610, |a(K)(M1)=0.158 +228TH G 555.12 10 0.046 5 [M1,E2] 0.10 7 +228THS G KC=0.08 6$ LC=0.017 9 +228TH G 623.27 20 0.011 3 [M1,E2] 0.08 5 +228THS G KC=0.06 4$ LC=0.012 6 +228TH G 629.40 5 0.045 5 [D,E2] 0.06 6 +228TH G 666.45 10 0.057 6 [M1,E2] 0.06 4 @ +228TH3 G FLAG=N +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG I|g(doublet)=0.052 {I5}. All of intensity placed here by +228THxcG 1987Da28, +228TH G 677.11 10 0.062 5 [M1,E2] 0.06 4 +228TH3 G FL=968.968 +228THS G KC=0.05 3$ LC=0.010 5 +228TH G 1250.04 10 0.062 5 A +228TH G 1459.138 15 0.83 8 E2 A +228TH3 G FLAG=IJ +228TH G 1588.20 3 3.22 8 E2 A +228TH3 G FLAG=IJ +228TH cG M |a(K)exp=0.0050 {I16} (1971He23); theory: |a(K)=0.00340 +228TH L 1682.81 3 2+,3(+),4+ +228TH B 1.12 5 7.40 2 +228THS B EAV=128.5 10 +228TH G 660.1 3 0.005 AP [M1,E2] 0.06 4 +228THS G KC=0.05 3$ LC=0.010 5 +228TH G 1495.910 20 0.86 4 (E2) A +228TH3 G FLAG=IJ +228TH G 1625.06 5 0.255 18 A +228TH L 1683.82 5 (4-) +228TH B 0.165 17 8.23 5 +228THS B EAV=128.2 10 +228TH G 457.17 15 0.0150 23 [M1,E2] 0.17 12 +228THS G KC=0.13 10$ LC=0.029 14$ MC=0.007 3$ NC+=0.0026 11 +228TH G 1164.50 8 0.065 5 (M1+E2) 0.016 9 J +228TH G 1287.68 20 0.080 15 (M1+E2) 0.012 7 J +228TH cG |g listed in table I of 1987Da28 as deexciting the 1682.8 +228TH2cG level; however, on level scheme (fig. 4) shown as deexciting the +228TH3cG 1683.8 level. The energy fit is much better from the 1683.8 level. +228TH L 1688.394 11 2+,3+ G +228TH B 2.45 16 7.04 3 +228THS B EAV=126.7 10 +228TH G 42.46 5 0.009 3 [M1] 49 +228TH cG From intensity balance at 1646 level, multipolarity cannot +228TH2cG be pure E2. Some E2 admixture, however, cannot be ruled out +228TH G 672.00 15 0.026 8 +228TH cG |g listed in table I of 1987Da28 as deexciting the 1683.8 +228TH2cG level; however, on level scheme (fig. 4) shown as deexciting the +228TH3cG 1688.4 level. +228TH G 813.77 15 0.0070 16 [M1,E2] 0.038 23 +228THS G KC=0.030 19$ LC=0.006 3 +228TH G 1501.57 5 0.46 3 G +228TH G 1630.627 10 1.51 4 (M1,E2) A +228TH2 G FLAG=I +228TH cG M from |a(K)exp(1625|g+1630|g)=0.0062 {I20} (1971He23); theory: +228TH2cG |a(K)(M1)=0.0090, |a(K)(E2)=0.0034 +228TH L 1724.283 6 2+ +228TH B 1.76 5 7.06 2 +228THS B EAV=115.3 10 +228TH G 497.49 15 0.0059 18 [M2] 0.608 P +228THS G KC=0.457$ LC=0.113$ MC=0.0282$ NC+=0.0104 +228TH G 548.73 15 0.023 3 [M1,E2] 0.10 7 +228THS G KC=0.08 6$ LC=0.017 9 +228TH G 570.91 10 0.182 24 (M1) 0.156 G +228THS G KC=0.125$ LC=0.0234 +228TH cG M |a(K)exp=0.20 {I8} (1971He23); theory: |a(K)=0.125 +228TH cG 1987Da28 assigns this |g to be the 1539.2 to 968.4 transition +228TH2cG on the basis of coin with 911.2|g. However, the E(level) difference is +228TH3cG 570.25 {I9}. In {+228}Pa decay this |g is assigned to the 1724.3 level; +228TH4cG energy, intensity, multipolarity, and coin results agree with this +228TH5cG assignment. +228TH G 701.747 14 0.173 10 (M1) 0.091 A +228TH3 G FLAG=J +228THS G KC=0.0726$ LC=0.0135 +228TH G 755.315 4 1.00 3 M1 0.0747 A +228TH3 G FLAG=DJ +228THS G KC=0.0599$ LC=0.0111 +228TH cG M |a(K)exp=0.055 {I9} (1971He23), 0.057 {I8} (1960Ar06); +228TH2cG theory: |a(K)(M1)=0.0599, |a(K)(E2)=0.0127 +228TH G 1537.89 10 0.047 5 B +228TH2 G FL=186.823 +228TH G 1666.523 13 0.178 13 M1 A +228TH3 G FLAG=J +228TH G 1724.21 4 0.029 3 A +228TH L 1735.450 25 (4+) +228TH B 0.133 9 8.14 4 +228THS B EAV=111.7 10 +228TH G 1217.03 10 0.021 3 B +228TH2 G FL=519.192 +228TH G 1357.78 15 0.020 4 B +228TH2 G FL=378.179 +228TH G 1548.65 4 0.038 4 A +228TH G 1677.67 3 0.054 5 A +228TH L 1743.89 3 4+ +228TH B 0.389 18 7.65 2 +228THS B EAV=109.1 10 +228TH G 399.62 10 0.029 3 [E1] 0.0212 +228THS G KC=0.0162$ LC=0.00293$ MC=0.000701$ NC+=0.000250 +228TH G 590.4 0.017 3 [E2] 0.0295 S +228TH3 G FLAG=T +228THS G KC=0.0200$ LC=0.00716 +228TH G 684.0 0.019 5 [E1] S +228TH3 G FLAG=T +228TH G 1347.50 15 0.015 3 +228TH cG |g not seen in {+228}Pa decay. I|g<0.004 from upper limit in +228TH2cG {+228}Pa decay +228TH G 1365.70 15 0.014 3 M +228TH G 1415.66 10 0.021 4 [E3] P +228TH3 G FL=328.003 +228TH G 1557.11 4 0.178 13 (E2+M1) +1.2 2 A +228TH3 G FLAG=JK +228TH G 1686.09 7 0.095 8 (E2) A +228TH3 G FLAG=J +228TH L 1758.24 12 2+,3,4+ +228TH B 0.062 13 8.39 10 +228THS B EAV=104.6 10 +228TH G 326.04 20 0.033 5 [D,E2] 0.4 3 +228TH G 1571.52 20 0.0057 16 +228TH G 1700.59 20 0.0101 23 +228TH L 1760.218 24 2+,3(+) G +228TH B 0.119 10 8.10 4 +228THS B EAV=104.0 10 +228TH G 737.72 5 0.037 4 [M1,E2] 0.05 3 +228TH cG M |a(K)exp=0.28 {I14} (1971He23); theory: |a(K)(M1)=0.0637, +228TH2cG |a(K)(E2)=0.0133, |a(K)(M2)=0.147. Unconfirmed |a(K)exp seems to +228THxcG indicate E0 admixture +228TH G 791.49 25 0.010 3 [M1,E2] 0.04 3 @ +228TH3 G FL=968.968$ FLAG=N +228THS G KC=0.032 21$ LC=0.007 4 +228TH cG |g placed here with I|g=0.023 {I7} by 1987Da28 +228TH G 1573.26 5 0.033 3 (E2) A +228TH3 G FLAG=J +228TH G 1702.43 5 0.048 5 A +228TH L 1795.90 10 3-,4+ +228TH B 0.01 LT 9.0 GT +228THS B EAV=92.9 10 +228TH G 1276.69 10 0.014 3 +228TH G 1738.22 25 0.018 4 +228TH L 1797.65 8 2+ +228TH B 0.045 6 8.37 6 +228THS B EAV=92.4 10 +228TH G 1401.49 10 0.012 3 +228TH G 1469.71 15 0.020 4 +228TH G 1740.4 3 0.011 3 +228TH G 1797.5 5 0.0021 8 +228TH L 1892.996 17 3+ +228TH B 0.112 7 7.51 4 +228THS B EAV=63.7 9 +228TH G 666.45 10 0.005 2 [E1] @ +228TH3 G FLAG=N +228TH cG This placement of the |g suggested by {+228}Pa decay. +228TH G 692.5 0.0056 7 (M1+E2+E0) 0.24 3 S +228TH3 G FLAG=T +228TH G 770.04 0.0063 8 [E1] S +228TH3 G FLAG=T +228TH G 870.46 4 0.044 4 M1 0.0515 A +228TH3 G FLAG=J +228THS G KC=0.0414$ LC=0.00762 +228TH G 924.03 0.0075 10 [M1,E2] S +228TH3 G FLAG=T +228TH G 1706.19 10 0.0085 10 M1+E2 +0.42 4 J +228TH3 G FLAG=K +228TH G 1835.43 10 0.038 4 E2+M1 +2.9 3 J +228TH3 G FLAG=K +228TH L 1899.95 4 2+ G +228TH cL Quasiparticle configuration=((|p 3/2[651])(|p 1/2[660])) or +228TH2cL configuration=((|p 3/2[651])(|p 1/2[400])) suggested for this level +228TH B 0.071 6 7.66 4 +228THS B EAV=61.7 9 +228TH G 877.46 10 0.014 3 [M1,E2] 0.032 19 +228THS G KC=0.025 15$ LC=0.005 3 +228TH G 930.93 10 0.0124 18 & +228TH cG This placement of |g suggested in {+228}Pa decay +228TH G 1713.47 20 0.0054 10 +228TH cG |g not seen in {+228}Pa decay. I|g<0.002 from upper limit in +228TH2cG {+228}Pa decay +228TH G 1842.13 10 0.042 4 M1+E2 -0.86 14 J +228TH3 G FLAG=K +228TH G 1900.07 20 0.0028 5 +228TH L 1906.64 10 (2+) +228TH B 0.034 5 7.94 7 +228THS B EAV=59.7 9 +228TH G 490.33 15 0.0111 23 [D,E2] 0.12 11 +228TH G 1074.71 15 0.010 3 +228TH G 1907.18 20 0.0119 10 +228TH L 1928.57 6 3+ +228TH B 0.057 7 7.57 6 +228THS B EAV=53.4 9 +228TH G 168.65 10 0.0030 7 [M1,E2] 2.9 16 @ +228TH2 G FLAG=Q +228THS G KC=1.9 17$ LC=0.73 6$ MC=0.19 3$ NC+=0.070 10 +228TH G 389.12 15 0.0103 15 [M1,E2] 0.26 18 +228TH G 1742.0 3 0.0080 23 +228TH G 1870.83 10 0.0243 23 (M1+E2) J +228TH L 1937.16 9 2+,3,4+ +228TH B 0.046 5 7.61 6 +228THS B EAV=50.9 9 +228TH G 397.94 10 0.027 3 +228TH G 1062.55 15 0.010 3 +228TH G 1750.54 20 0.0080 8 +228TH G 1879.6 3 0.0013 5 +228TH L 1944.895 11 3+ G +228TH B 0.244 14 6.83 4 +228THS B EAV=48.7 9 +228TH G 718.48 15 0.019 4 (E1) J +228TH G 776.56 10 0.019 6 +228TH G 791.49 25 0.013 3 (M1) 0.0661 @ +228TH3 G FLAG=N +228THS G KC=0.0530$ LC=0.0098 +228TH cG This placement suggested by {+228}Pa decay +228TH G 853.17 10 0.0031 4 [M1,E2] 0.034 20 B +228TH2 G FL=1091.017$ FLAG=U +228THS G KC=0.027 17$ LC=0.005 3 +228TH cG RI from branching ratio in {+228}Pa decay +228TH G 921.98 10 0.0147 21 & +228TH cG This placement suggested by {+228}Pa decay +228TH G 975.96 5 0.050 5 M1 0.0381 J +228TH3 G FL=968.968 +228THS G KC=0.0306$ LC=0.00563 +228TH G 1000.69 15 0.005 +228TH cG |g not seen in {+228}Pa decay. I|g<0.002 from upper limit in +228TH2cG {+228}Pa decay. +228TH G 1758.11 10 0.035 4 E2+M1 -9 1 J +228TH3 G FLAG=K +228TH G 1887.10 5 0.090 8 E2+M1 -9.1 1 J +228TH3 G FLAG=K +228TH L 1958.72 22 2+ +228TH B 0.0033 7 8.59 10 +228THS B EAV=44.8 9 +228TH G 1772.2 3 0.0018 5 +228TH G 1958.4 3 0.0015 5 +228TH L 1987.46 10 4+ +228TH B 0.038 3 7.27 5 +228THS B EAV=36.8 9 +228TH G 1017.92 20 0.0057 13 +228TH3 G FL=968.968 +228TH G 1609.41 15 0.0077 15 +228TH G 1800.86 20 0.0044 8 +228TH G 1929.78 20 0.0199 21 +228TH L 2010.11 5 2+,3,(4+) +228TH cL 1987Da28 suggests that this is the 4+ level of K|p=2+ +228TH2cL rotational band built on the 1900.00 level. However, the relatively +228TH3cL strong 887.33|g to the 1123-keV level would then have M2 mult. +228TH B 0.27 4 6.19 8 +228THS B EAV=30.5 9 +228TH G 214.85 10 0.029 4 [D,E2] 1.2 11 +228TH G 372.57 20 0.0067 15 [D,E2] 0.26 24 +228TH3 G FL=1638.284 +228TH G 887.33 10 0.027 3 +228TH G 918.97 10 0.027 3 +228TH cG M |a(K)exp=1.1 {I2} (1971He23) indicates E0 component; +228TH2cG however, then the relatively strong |g to 1123 {I2}- level must be M2 +228TH G 1040.92 15 0.044 9 +228TH G 1823.22 10 0.044 4 +228TH G 1952.33 15 0.059 5 +228TH L 2013.6 3 2+,3,4+ +228TH B 0.0029 9 8.11 14 +228THS B EAV=29.6 9 +228TH G 1826.7 3 0.0021 8 +228TH G 1955.9 5 0.0008 3 +228TH L 2022.84 10 +228TH B 0.054 6 6.73 7 +228THS B EAV=27.1 9 +228TH G 384.63 20 0.0067 15 [D,E2] 0.24 22 +228TH cG Not reported in {+228}Pa decay +228TH G 1053.09 20 0.013 4 B +228TH3 G FL=968.968 +228TH G 1148.12 15 0.0059 13 +228TH G 1190.81 20 0.0062 16 +228TH G 1965.24 20 0.0204 18 +228TH cG RI from {+228}Pa decay I|g|<0.0085 {I23} +228TH L 2029.84 16 1,2+ +228TH B 0.019 4 7.09 10 +228THS B EAV=25.2 8 +228TH G 939.87 15 0.009 3 B +228TH3 G FL=1091.017$ +228TH G 1013.58 20 0.0046 13 +228TH G 1971.9 3 0.0036 8 +228TH G 2029.4 5 0.0018 5 +228TH L 2036.99 17 2+,3,4+ +228TH B 0.0062 10 7.48 9 +228THS B EAV=23.3 8 +228TH G 1850.13 20 0.0044 8 +228TH G 1979.3 3 0.0018 5 +228TH L 2123.1 3 (2+) +228TH B 0.0042 10 3.5 20 +228THS B EAV=1.0 8 +228TH G 1795.1 5 0.0021 8 +228TH G 1936.3 3 0.0021 5 + +228TH 228PA EC DECAY 1995BA42 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228PA P 0.0 3+ 22 H 1 2148 5 +228TH N 0.095 5 0.095 5 0.9815 17 1.01885 +228TH PN 2 +228TH cN NR From |SI(|g+ce)(g.s.)=100. No direct |e+|b{++} decay to g.s. +228TH2cN (|DJ=3 transition) +228TH cL 1995Ba42: measured |g, ce, |g|g, |g(|q,H,T) +228TH cL 1993Ac02: measured |g, ce +228TH cL 1973Ku09: measured |g, ce, |g|g, |g(ce) +228TH cL 1971Am05, 1970SpZW, 1960Ar06: measured ce +228TH cL The decay scheme for {+228}Pa and the band assignments in +228TH2cL {+228}Th are those proposed by 1995Ba42. For a discussion of the +228TH3cL structure of the bands, and of the band parameters, see 1995Ba42 +228TH cL E Rounded off values from adopted levels +228TH cL J From adopted levels +228TH CL BAND(A) GS ROTATIONAL BAND +228TH CL BAND(B) KPI=0- BAND +228TH CL BAND(C) FIRST KPI=0+ BAND +228TH CL BAND(D) SECOND KPI=0+ BAND +228TH CL BAND(F) KPI=1- BANDHEAD +228TH CL BAND(G) FIRST KPI=2+ BAND +228TH CL BAND(H) KPI=2- BAND +228TH CL BAND(I) SECOND K=2+ BAND +228TH CL BAND(J) KPI=3- BANDHEAD +228TH cE J|p({+228}Pa)=3+ +228TH cE Q(|e)=2148 {I5} (1995Au04) +228TH cE IE,TI Deduced from intensity balance in level scheme +228TH cG E,RI From 1995Ba42, unless otherwise noted +228TH cG M Based on |g(|q,H,T) of 1995Ba42 and on |a's and Ice +228TH2cG ratios. |a's deduced from I(ce(K)) of 1973Ku09, 1971Am05 and/or +228TH3cG 1960Ar06 as noted and I|g of 1995Ba42. The I(ce(K)) are normalized to +228TH4cG I|g at 911.204|g (|a(K)(E2)=0.0091). +228TH cG MR From |g(|q,H,T) in 1995Ba42, unless otherwise noted +228TH cG CC Values correspond to E|g given in adopted gammas +228TH cG E(G) |g is seen as a part of a multiplet in 1995Ba42 +228TH cG E(J),RI(J)$From 1973Ku09; |g not seen by 1995Ba42 +228TH cG E(N) Energy calculated from E(level), existence of |g suggested +228TH2cG by {+228}Ac decay +228TH cG E(P) This line seems to be a doublet of lines with E|g|?1431 +228TH2cG and 1433 keV, which are both in coin with the 4+ to 2+ transition +228TH cG E(R) |g's of approximately same energy and intensity are reported +228TH2cG in both {+228}Ac and {+228}Pa decays. On the basis of coin with 911.2|g +228TH3cG it is suggested in {+228}Ac decay that this |g feeds the 2+ 968.97 +228TH4cG level. In {+228}Pa decay, the |g is placed feeding the 3- 968.37 +228TH5cG level. The energy of the |g (E|g=674.65 {I5}) agrees with decay to the +228TH6cG 968.37 level. Possibly the |g is a doublet feeding both the 968.97 and +228TH7cG 968.37 levels with I|g(doublet)=2.64 {I18} +228TH cG RI(I) Derived from coin spectrum +228TH cG RI(M) Intensity of doublet divided by evaluator by comparison +228TH2cG with branching ratios and the intensities of the doublet as +228TH3cG measured in both {+228}Ac and {+228}Pa decays +228TH cG RI(Q) The total intensity of this doublet does not agree with +228TH2cG the total intensity of this |g as seen in {+228}Ac decay, considering +228TH3cG the observed branching ratios from the 1646.0 level in both decays and +228TH4cG from the 1682.8 level in {+228}Pa decay. +228TH cG M(K) From |a data of 1995Ba42 (data not given) +228TH cG M(A),MR(E)$From adopted gammas +228TH G 141.9 1 0.21 3 +228TH G 206.30 5 0.50 7 +228TH G 216.1 1 1.1 3 +228TH cG |g dominant in {+224}Ra +228TH cG M possibly E1, no ce seen (1960Ar06) +228TH G 357.3 1 0.37 4 +228TH G 425.4 1 0.41 5 +228TH G 443.8 1 0.62 7 +228TH G 471.7 2 0.37 9 +228TH G 490.7 1 0.82 4 G +228TH G 555.7 1 1.5 2 +228TH G 621.6 3 1.0 2 G +228TH G 796 1 2.0 AP J +228TH cG |g seen coin only (1973Ku09) +228TH G 801.2 1 0.46 5 +228TH cG M |a(K)exp=0.14 {I4} (1973Ku09); theory: |a(K)(E2)=0.0141, +228THxcG |a(K)(M1)=0.0512 +228TH G 895.9 1 1.41 7 +228TH G 1017.2 2 0.82 12 G +228TH G 1018.9 2 1.3 2 +228TH G 1024.4 2 0.43 6 +228TH G 1058.5 1 0.66 7 +228TH G 1062.4 1 0.57 6 +228TH G 1074.7 3 0.42 5 G +228TH G 1077.5 3 0.36 5 G +228TH G 1103.4 1 0.44 4 +228TH G 1175.6 2 0.24 4 G +228TH G 1281.7 2 0.29 3 +228TH G 1286.3 3 0.39 9 G +228TH cG E this |g is placed from the 1682.8 level by 1995Ba42. +228TH2cG A 1286.27 {I20} |g seen in {+228}Ac decay is placed from the 1344.08 +228TH3cG level. However, the ratio I|g/I|g(1496.15|g)=0.14 {I3} here does not +228TH4cG agree with I|g/I|g(1495.91|g)=0.058 {I15} in {+228}Ac decay. The +228TH5cG calculated energy of the transition from the 1682.8 level is 1286.73 +228TH6cG {I3}. From 1344.08 level the ratio I|g/I|g(947.98|g)=0.47 {I10} in +228TH7cG {+228}Ac decay; in this decay, I(948|g)|?0.2 giving the estimated +228THxcG I|g|?0.1 for that placement. +228TH G 1310.8 1 0.48 5 +228TH G 1358.0 2 0.34 5 +228TH G 1432 1 1.3 LE @ +228TH2 G FLAG=P +228TH G 1480.4 3 0.77 10 G +228TH cG M |a(K)exp=0.009 {I3} (1973Ku09); theory: |a(K)(E2)=0.00385, +228THxcG |a(K)(M1)=0.0104 +228TH G 1483.2 3 0.52 7 G +228TH G 1486.3 3 0.27 7 G +228TH G 1542.8 2 0.28 5 +228TH G 1547.2 3 0.54 11 G +228TH G 1609.6 1 0.92 7 (M1) +228TH cG M |a(K)exp=0.014 {I3} (1973Ku09); theory: |a(K)(M1)=0.0092 +228TH G 1677.9 1 0.65 5 +228TH G 1746.2 2 0.34 4 +228TH G 1752.1 2 0.37 4 G +228TH G 1784.4 2 0.62 5 G +228TH G 1807.2 1 0.60 5 +228TH cG M |a(K)exp=0.006 {I3} (1973Ku09); theory: |a(K)(M1)=0.0068, +228THxcG |a(K)(E2)=0.0028 +228TH G 1865.1 1 0.80 4 +228TH G 1919.4 2 0.26 3 +228TH G 1936.0 2 0.20 3 +228TH G 1958.1 2 0.29 3 +228TH L 0.0 0+ A +228TH L 57.76 2+ A +228TH E 0.065 LE 9.9 LE 8.3 GE 10 LE +228THS E EAV=502.6 22 $CK=0.7750 $CL=0.1625 $CM+=0.05599 +228TH G 57.76 2 5.5 3 E2 156 +228THS G LC= 114$ MC= 31.1$ N+= 11.5 +228TH cG M L1/L3=0.036 {I11}, L2/L3=1.187 {I5}, M1/M2=0.0328 {I27}, +228TH2cG M2/M3=1.137 {I19} (1970SpZW); theory: L1/L3=0.0390, L2/L3=1.19, +228TH3cG M1/M2=0.0382, M2/M3=1.14 +228TH L 186.82 4+ A +228TH E 0.009 5 2.1 12 8.94 25 2.1 12 +228THS E EAV=446.7 22 $CK=0.7758 $CL=0.1636 $CM+=0.05644 +228TH G 129.06 2 45.7 23 E2 3.81 +228THS G KC= 0.269 $LC= 2.58$ MC= 0.707$ N+= 0.263 +228TH cG M L12/L3=1.62 {I12} (1960Ar06); theory: L12/L3=1.70 +228TH L 328.00 1- B +228TH E 0.7 LE 10.4 GE 0.7 LE 1U +228THS E CK=0.7572 $CL=0.1793 $CM+=0.06308 +228TH G 270.25 2 33.9 17 E1 0.0474 +228THS G KC= 0.0379 $LC=0.00721$ MC=0.00173 $N+=0.00061 $ +228TH cG M |a(K)exp=0.032 (1960Ar06); theory: |a(K)=0.0379 +228TH G 328.03 4 30 3 E1 0.0308 G +228THS G KC=0.0247$ LC=0.00458$ MC=0.00110 $N+=0.00039 $ +228TH cG M |a(K)exp=0.019 {I2} (1960Ar06); theory: |a(K)=0.0247 +228TH L 378.18 6+ A +228TH G 191.35 2 4.60 23 E2 0.791 A +228THS G KC=0.174$ LC=0.450$ MC=0.123$ NC+=0.0454 +228TH cG M |a(L3)exp=0.16 (1960Ar06); theory: |a(L3)=0.141 +228TH L 396.08 3- B +228TH E 0.001 1 0.8 5 9.3 3 0.8 5 +228THS E EAV=354.3 23 $CK=0.7757 $CL=0.1655 $CM+=0.05720 +228TH G 68.08 0.04 LE [E2] 70.2 N +228THS G LC=51.0$ MC=14.0$ NC+=5.16 +228TH cG RI limit of I|g deduced from the limit of Ice(L2) (1993Ac02) +228TH G 209.26 2 26.3 13 E1 0.086 +228THS G KC=0.0678$ LC=0.0135$ MC=0.00323$ NC+=0.00114 +228TH cG M K/L12=4.4 (1960Ar06); theory: K/L12(E1)=5.9, K/L12(E2)=0.69, +228TH2cG K/L12(M1)=5.3. |a(K)exp=0.075 (1960Ar06); theory: |a(K)(E1)=0.0678, +228THxcG |a(K)(M1)=1.94 +228TH G 338.32 2 82 4 E1 0.0288 +228THS G KC=0.0231$ LC=0.00426$ MC=0.00102$ NC+=0.00036 +228TH cG M |a(K)exp=0.019 (1960Ar06); theory: |a(K)=0.0231 +228TH L 519.19 5- B +228TH E 0.53 13 10.33 11 0.53 13 1U +228THS E CK=0.7523 $CL=0.1830 $CM+=0.06464 +228TH G 141.00 2 2.08 10 E1 0.220 K +228THS G KC=0.171$ LC=0.0366$ MC=0.0088$ NC+=0.00313 +228TH G 332.37 2 21.0 11 E1 0.0299 K +228THS G KC=0.0240$ LC=0.00444$ MC=0.00106$ NC+=0.00038 +228TH cG M ce(K) not seen (1960Ar06) +228TH L 695.6 7- ? +228TH cL Possibly fed by multiply placed 601.7|g from the 1297.4 (5)- +228TH2cL level. The 317.4|g from this level is not seen by 1995Ba42. +228TH L 831.82 0+ C +228TH E 0.03 LE 10.4 GE 0.03 LE +228THS E CK=0.7702 $CL=0.1705 $CM+=0.05928 +228TH G 503.7 2 0.78 8 (E1) 0.0125 A +228THS G KC=0.0101$ LC=0.00178 +228TH G 774.06 0.26 AP [E2] 0.0167 N +228THS G KC=0.0122$ LC=0.00339 +228TH cG E,RI |g is part of a multiplet in 1995Ba42; I|g from branching +228TH2cG ratio in adopted |g's +228TH L 874.47 2+ C +228TH E 0.52 6 9.15 6 0.52 6 +228THS E CK=0.7693 $CL=0.1712 $CM+=0.05955 +228TH G 478.45 4 3.17 17 E1 0.0139 K +228THS G KC=0.0112$ LC=0.00199$ MC=0.00047$ NC+=0.00017 +228TH G 546.45 2 2.80 14 [E1] 0.0107 +228THS G KC=0.00864$ LC=0.00151 +228TH G 688.14 8 1.21 14 [E2] 0.0212 & +228TH3 G FL=186.82 +228THS G KC=0.0151$ LC=0.00464 +228TH G 816.50 12 0.33 4 [M1,E2] 0.038 23 +228THS G KC=0.030 19$ LC=0.006 3 +228TH G 874.5 2 0.77 12 [E2] 0.0131 G +228THS G KC=0.0098$ LC=0.00249 +228TH L 944.20 1,2+ +228TH cL Possibly J|p=1+, K|p=1+ bandhead. (p,t) suggests possible +228TH2cL unnatural parity level; however, log| {Ift}=9.79 for decay from 3+ +228TH3cL {+228}Pa would rule out J|p=1+ +228TH E 0.108 19 9.78 8 0.108 19 +228THS E CK=0.7676 $CL=0.1724 $CM+=0.06005 +228TH G 616.15 5 1.07 8 +228TH G 944.31 6 0.98 8 +228TH L 968.37 3- F +228TH E 0.39 11 9.20 13 0.39 11 +228THS E CK=0.7670 $CL=0.1728 $CM+=0.06024 +228TH G 449.23 3 2.45 13 [E2] 0.0563 +228THS G KC=0.0335$ LC=0.0168$ MC=0.00439$ NC+=0.00162 +228TH G 572.30 2 5.8 3 [M1,E2] 0.09 7 +228THS G KC=0.07 6$ LC=0.016 8 +228TH G 640.33 5 1.53 10 [E2] 0.0247 +228THS G KC=0.0172$ LC=0.00567 +228TH cG M |a(K)exp=0.16 {I3} (1973Ku09), 0.18 (1960Ar06); theory: +228THxcG |a(K)(E2)=0.0172 +228TH L 968.97 2+ G +228TH E 9.2 19 7.83 10 9.2 19 +228THS E CK=0.7669 $CL=0.1728 $CM+=0.06024 +228TH G 782.08 3 4.70 23 [E2] 0.0163 +228THS G KC=0.0119$ LC=0.00330 +228TH cG M |a(K)exp=0.029 (1960Ar06); theory: |a(K)(E2)=0.0119 +228TH G 911.20 2 247 12 E2+M1 +24 8 0.0121 +228THS G KC=0.0091$ LC=0.00225 +228TH cG M |a(K)(E2)=0.0091 used for normalization of I(ce(K)) of +228TH2cG 1973Ku09, 1960Ar06 to the I|g of 1995Ba42 +228TH G 968.98 2 149 8 E2 0.0107 +228THS G KC=0.00815$ LC=0.00194 +228TH cG M |a(K)exp=0.0074 {I30} (1973Ku09), 0.0082 (1960Ar06); +228TH2cG theory: |a(K)(E1)=0.0030, |a(K)(E2)=0.00815 +228TH L 979.50 2+ D +228TH E 0.37 5 9.22 7 0.37 5 +228THS E CK=0.7667 $CL=0.1730 $CM+=0.06033 +228TH G 583.4 1 3.6 3 [E1] 0.0094 I +228THS G KC=0.00761$ LC=0.00132 +228TH cG RI does not agree with the branching ratio in {+228}Ac decay +228TH G 651.40 5 1.59 10 [E1] +228TH3 G FLAG=G +228THS G CC=0.00758$ KC=0.00617$ LC=0.00106 +228TH cG RI indicated as a doublet in 1995Ba42, however, no other +228TH2cG placement of |g given. +228TH G 792.68 1.4 AP [E2] 0.0159 G +228TH3 G FLAG=N +228THS G KC=0.0116$ LC=0.00319 +228TH cG RI deduced from branching ratio in adopted |g's +228TH G 921.74 0.30 LT [M1,E2] 0.028 17 G +228TH3 G FLAG=N +228THS G KC=0.022 14$ LC=0.0044 22 +228TH cG |g seen in {+228}Ac decay; here |g is part of a multiplet +228TH cG RI deduced from branching ratio in adopted |g's +228TH G 979.4 4 0.5 AP [E2] 0.0105 G +228THS G KC=0.00799$ LC=0.00180 +228TH L 1016.41 2+,3-,4+ +228TH cL Possibly 2+ member of K|p=1+ band. +228TH E 0.34 8 9.22 11 0.34 8 +228THS E CK=0.7656 $CL=0.1738 $CM+=0.06064 +228TH G 620.27 5 1.41 10 G +228TH cG M |a(K)exp=0.16 {I3} (1973Ku09); theory: +228TH2cG |a(K)(E1)=0.00677, |a(K)(E2)=0.0183, |a(K)(M1)=0.100 +228TH G 688.14 8 1.21 14 & +228TH3 G FL=328.00 +228TH G 958.69 11 5.0 6 G +228TH G 1016.41 0.34 6 G +228TH3 G FLAG=N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.7 (1995Ba42) +228TH L 1022.53 (3)+ G +228TH E 1.8 8 8.49 20 1.8 8 +228THS E CK=0.7654 $CL=0.1739 $CM+=0.06069 +228TH G 835.65 2 42.7 22 E2 0.0143 +228THS G KC=0.0106$ LC=0.00279 +228TH cG M |a(K)exp=0.0119 {I17} (1973Ku09), 0.0105 {I15} (1960Ar06); +228TH2cG theory: |a(K)=0.0106 +228TH cG MR |<-9 from |g(|q,H,T) (1995Ba42) +228TH G 964.80 2 122 6 E2+M1 -7.2 10 0.0108 +228THS G KC=0.00821$ LC=0.00196 +228TH cG M |a(K)exp=0.012 {I5} (1973Ku09), 0.011 (1960Ar06); theory: +228THxcG |a(K)=0.00821 +228TH L 1059.93 4- +228TH cL J 3-,4+,5- ruled out by |g(|q,H,T) (1995Ba42) +228TH E 0.15 4 9.54 12 0.15 4 +228THS E CK=0.7643 $CL=0.1747 $CM+=0.06103 +228TH G 540.66 5 0.89 6 [M1,E2] 0.11 8 +228THS G KC=0.08 6$ LC=0.018 9$ +228TH G 663.92 8 1.44 11 (M1+E2) 0.06 4 +228THS G KC=0.05 4$ LC=0.010 6 +228TH cG M |a(K)exp=0.10 {I3} (1973Ku09), 0.075 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0842, |a(K)(E2)=0.0161 +228TH G 873.0 2 1.66 17 [E1] 0.00441 G +228THS G KC=0.00361$ LC=0.00060 +228TH L 1091.02 4+ G +228TH E 0.66 18 8.87 12 0.66 18 +228THS E CK=0.7632 $CL=0.1754 $CM+=0.06133 +228TH G 694.8 2 0.76 10 [E1] 0.00671 G +228THS G KC=0.00547$ LC=0.00093 +228TH G 713.1 3 0.48 11 [E2] 0.0197 I +228THS G KC=0.0141$ LC=0.00421 +228TH G 904.19 3 26.5 13 E2 0.0123 +228THS G KC=0.0092$ LC=0.00229 +228TH cG M |a(K)exp=0.012 {I3} (1973Ku09), 0.0092 (1960Ar06) +228TH2cG theory: |a(K)(E2)=0.00921, |a(K)(M1)=0.0374 +228TH cG MR |>+3.7 from |g(|q,H,T) (1995Ba42) +228TH G 1033.27 7 7.6 4 E2 0.0095 +228TH cG M E2 in 1995Ba42; possibly from |g(|q,H,T), although not +228TH2cG listed in table 3 +228TH L 1122.95 2- H +228TH E 0.7 4 8.82 25 0.7 4 +228THS E CK=0.7621 $CL=0.1762 $CM+=0.06167 +228TH G 100.42 0.5 LT (E1+M2) 0.23 AP 3.2 AP A +228TH3 G FLAG=EN +228THS G LC=2.4$ MC=0.64$ NC+=0.25 +228TH cG RI deduced from I(ce(L1)) +228TH G 153.95 2 5.5 3 E1 0.178 K +228THS G KC=0.139$ LC=0.0292$ MC=0.00703$ NC+=0.00250 +228TH cG M no ce(K) observed (1960Ar06) +228TH G 726.90 10 4.4 6 (E2) 0.0189 A +228THS G KC=0.0136$ LC=0.00400 +228TH G 794.97 2 34.4 17 E2+M1 -4.4 10 0.0182 15 +228THS G KC=0.0136 13$ LC=0.00349 20 +228TH cG M |a(K)exp=0.014 {I3} (1973Ku09), 0.014 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0116, |a(K)(M1)=0.0524 +228TH G 1065.21 7 1.03 7 [E1] 0.00311 +228THS G KC=0.00255$ LC=0.00042 +228TH L 1153.47 2+ I +228TH E 0.51 25 8.93 22 0.51 25 +228THS E CK=0.7610 $CL=0.1770 $CM+=0.06201 +228TH G 174.02 4 0.30 3 M1+E2 1.2 +11-6 2.23 18 A +228TH2 G FLAG=E +228THS G KC=1.5 10$ LC=0.66 4$ MC=0.171 22$ NC+=0.063 5 +228TH cG RI not in agreement with branching ratio in {+228}Ac decay +228TH G 184.61 5 0.21 3 E0+M1 63 8 @ +228TH3 G FL=968.97$ FLAG=M +228TH cG M |a(L12)exp=15 (1960Ar06); |a(L12)=10.2 for 5.4% M1 (10.5 for +228TH2cG 1.4%E2) transition deduced from {+228}Ac |b{+-} decay +228TH cG CC from {+228}Ac |b{+-} decay +228TH G 278.66 2 0.44 6 (M1+E2) 0.7 5 @ +228TH3 G FL=874.47$ FLAG=AM +228THS G KC=0.5 4$ LC=0.13 4$ MC=0.033 7$ NC+=0.0120 25 +228TH cG M 1995Ba42 gives M=(E2), data not given. For the doublet: +228TH2cG |a(K)exp=0.26 (1960Ar06); theory: |a(K)(M1)=0.872, |a(K)(E2)=0.0854 +228TH G 321.71 3 0.67 4 [E2] 0.140 +228THS G KC=0.0643$ LC=0.0550$ MC=0.0147$ NC+=0.00544 +228TH G 966.64 0.5 LE [E2] 0.0108 I +228TH3 G FLAG=N +228TH G 1095.74 14 0.32 6 [M1,E2] 0.018 10 +228TH G 1153.6 3 0.37 8 +228TH L 1168.38 3- H +228TH E 0.9 3 8.66 15 0.9 3 +228THS E CK=0.7604 $CL=0.1774 $CM+=0.06219 +228TH G 77.36 0.44 9 [E1] 0.235 N +228THS G LC=0.177$ MC=0.0431$ NC+=0.0150 +228TH cG RI deduced from branching ratio in adopted |g's. I|g|<0.6 +228TH2cG (1995Ba42) +228TH G 145.82 2 2.57 13 E1 0.203 K +228THS G KC=0.158$ LC=0.0336$ MC=0.00809$ NC+=0.00287 +228TH cG M ce not seen (1960Ar06) +228TH G 199.40 2 4.65 23 E1 0.096 K +228THS G KC=0.0758$ LC=0.0152$ MC=0.00365$ NC+=0.00129 +228TH cG M ce not seen (1960Ar06) +228TH G 649.12 7 0.97 9 [E2] 0.0240 & +228THS G KC=0.0168$ LC=0.00546 +228TH G 772.28 2 25.2 13 E2+M1 -3.4 +8-27 0.021 3 +228THS G KC=0.0157 24$ LC=0.0040 4 +228TH cG M |a(K)exp=0.0157 {I22} (1973Ku09), 0.015 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0122, |a(K)(M1)=0.0565 +228TH cG MR from |a(K)exp and -19|<|d|<-3 from |g(|q,H,T) +228TH2cG (1995Ba42) +228TH G 840.36 4 15.9 8 E2 0.0142 +228THS G KC=0.0105$ LC=0.00275 +228TH cG M |a(K)exp=0.0092 {I24} (1973Ku09), 0.0113 (1960Ar06); theory: +228TH2cG |a(K)=0.0105 +228TH G 981.5 2 0.76 10 [E1] I +228THS G CC=0.00358$ KC=0.00294$ LC=0.00049 +228TH G 1110.55 5 4.7 5 E1 @ +228THS G CC=0.00289$ KC=0.00237$ LC=0.00039 +228TH cG RI I|g(doublet)=7.1 {I4} and I|g(|g from 1297.42 level)=2.4 +228TH2cG {I2} (from coin) +228TH cG M for the 1110.55 doublet: |a(K)exp=0.0013 {I3} (1973Ku09), +228TH2cG 0.0019 (1960Ar06); theory: |a(K)=0.00237 +228TH L 1174.51 (5+) G +228TH G 987.92 10 4.31 22 [M1,E2] 0.024 14 +228THS G KC=0.019 11$ LC=0.0037 18 +228TH L 1175.4 2+ ? +228TH cL Possibly fed by multiply placed 584.7|g from the 1760.2 +228TH2cL level, and the 750.10|g from the 1925.2 level. However, the 988.63|g +228TH3cL and the 1117.63|g from this level were not seen by 1995Ba42. +228TH L 1200.5 (3)+ I +228TH E 0.13 LE 9.5 GE 0.13 LE +228THS E CK=0.7590 $CL=0.1784 $CM+=0.06259 7 +228TH G 178.14 7 0.2 LE E0 1.2 +228TH cG E from ce(L1) (1995Ba42) +228TH cG M no |g seen. No ce(L3) seen, |a(L12)exp>6 (1960Ar06) +228TH cG TI I(ce(L12)) (1960Ar06) +228TH G 231.50 5 0.92 5 [M1,E2] 1.1 8 +228THS G KC=0.8 7$ LC=0.24 4$ MC=0.061 6$ NC+=0.0223 20 +228TH G 1013.54 13 0.38 5 [M1,E2] 0.022 13 & +228THS G KC=0.018 11$ LC=0.0034 17 +228TH G 1142.78 0.10 3 [M1,E2] 0.017 9 +228THS G KC=0.013 8$ LC=0.0025 12 +228TH cG E deduced from E(level) +228TH L 1226.57 (4)- H +228TH E 0.3 LE 9.1 GE 0.3 LE +228THS E CK=0.7578 $CL=0.1792 $CM+=0.06294 7 +228TH G 135.51 2 1.04 6 E1 0.242 K +228THS G KC=0.188$ LC=0.0406$ MC=0.0098$ NC+=0.00348 +228TH G 204.05 2 6.0 3 E1 0.091 K +228THS G KC=0.0719$ LC=0.0143$ MC=0.00344$ NC+=0.00122 +228TH cG M ce not seen (1960Ar06) +228TH G 707.40 3 7.9 4 (E2) 0.0200 +228THS G KC=0.0143 $ LC=0.00431 +228TH cG M,MR |a(K)exp=0.020 {I6} (1973Ku09), thus |d|>2; theory: +228TH2cG |a(K)(E2)=0.0143, |a(K)(M1)=0.0711 +228TH G 830.48 3 29.0 15 E2(+M1) -7.7 9 0.0152 2 +228THS G KC=0.0113 2 $ LC=0.00293 3 +228TH cG M |a(K)exp=0.0140 {I18} (1973Ku09); theory: |a(K)(E2)=0.0107, +228THxcG |a(K)(M1)=0.0468 +228TH G 1039.87 6 2.92 15 +228TH L 1297.42 (5)- H +228TH E 0.16 LE 9.6 GE 0.16 LE 1U +228THS E CK=0.7009 8 $CL=0.2188 5 $CM+=0.08035 23 +228TH G 601.7 3 0.30 5 [E2] 0.0283 & ? +228TH cG Feeds the 695.6 level; see comment with the that level +228TH cG M |a(K)exp|>0.24 {I5} (1973Ku09); theory: |a(K)(E1)=0.00716, +228TH2cG |a(K)(E2)=0.0192, |a(K)(M1)=0.108 +228TH G 778.1 2 2.7 3 [M1,E2] 0.04 3 G +228THS G KC=0.034 22$ LC=0.007 4 +228TH G 901.4 3 2.0 3 [E2] 0.0123 G +228THS G KC=0.0093$ LC=0.00231 +228TH G 1110.55 5 2.4 2 E1 @ +228TH3 G FLAG=I +228TH cG M for the 1110.55 doublet: |a(K)exp=0.0013 {I3} (1973Ku09), +228TH2cG 0.0019 (1960Ar06); theory: |a(K)=0.00237 +228TH L 1344.08 3- J ? +228TH cL Possibly fed by the 399.94|g from the 1743.9 level, the +228TH2cL 415.91|g from the 1760.2 level, and the multiply placed 584.7|g from +228TH3cL the 1928.6 level; total feeding I(|g+ce)=0.97 {I13}. 1995Ba42 report an +228TH4cL indication of the strongest line deexciting this level, the 948|g +228TH5cL with I|g|?0.2; the other |g's deexciting this level were not seen +228TH6cL by 1995Ba42. Therefore, there is no intensity balance at this level. +228TH G 948 0.2 AP +228TH L 1416.1 2+,3- ? +228TH cL Possibly fed by the 477.1|g from the 1893.0 level and the +228TH2cL multiply placed 548.74|g from the 1965.0 level. However, although a +228TH3cL 471.7|g was seen (not placed in level scheme), the other |g's placed +228TH4cL from this level in {+228}Ac decay were not seen by 1995Ba42. +228TH L 1431.98 4+ +228TH cL J J|=3 from |g(|q,H,T) (1995Ba42) +228TH E 31.8 21 6.81 4 31.8 21 +228THS E CK=0.7450 $CL=0.1882 3 $CM+=0.06675 13 +228TH G 257.49 2 1.40 7 (M1) 1.36 K +228THS G KC=1.09$ LC=0.205$ MC=0.0495$ NC+=0.0180 +228TH G 263.62 2 2.17 11 E1 0.0502 K +228THS G KC=0.0400$ LC=0.00766$ MC=0.00184$ NC+=0.00065 +228TH G 278.66 2 1.61 21 [E2] 0.216 @ +228TH3 G FL=1153.47$ FLAG=M +228THS G KC=0.086$ LC=0.095$ MC=0.0257$ NC+=0.0095 +228TH cG M for the doublet: |a(K)exp=0.26 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.872, |a(K)(E2)=0.0854 +228TH G 340.98 2 20.5 10 E2+M1 -5.2 18 0.136 23 +228THS G KC=0.073 20$ LC=0.046 2$ MC=0.0122 5$ NC+=0.00450 17 +228TH cG M from K:L12:L3=140:90:30, |a(K)exp=0.061 (1960Ar06); theory: +228TH2cG K:L12:L3=140:74:18, |a(K)=0.073 {I20} +228TH G 409.45 2 100 5 E2+M1 -5.4 8 0.082 4 +228THS G KC= 0.049 4$ LC=0.0242 5$ MC=0.00631 10$ N+=0.00233 4 +228TH cG M |a(K)exp=0.049, K:L12:L3=54 {I3}:21 {I1}:4.6 {I3} +228TH2cG (1960Ar06); theory: |a(K)=0.049 {I4}, K:L12:L3=54:22:4.3 +228TH G 452.52 6 1.02 8 [E2] 0.0553 +228THS G KC=0.0330$ LC=0.0164$ MC=0.00429$ NC+=0.00158 +228TH G 463.02 2 224 11 E2 0.0522 +228THS G KC= 0.0316 $LC=0.0152 $MC=0.00397 $N+=0.00146 $ +228TH cG M |a(K)exp=0.044 {I5} (1973Ku09), |a(K)exp=0.035, K/L12=2.64 +228TH2cG {I21}, K/L3=11.6 {I8} (1960Ar06); theory: |a(K)=0.0316, K/L12=2.44, +228TH3cG K/L3=13.7; K/L3(M1)=1220 +228TH G 1053.80 0.5 AP I +228TH cG E deduced from E(level) +228TH G 1245.17 6 5.6 3 [M1,E2] 0.013 7 G +228THS G KC=0.011 6$ LC=0.0020 10 +228TH G 1374.26 7 1.0 AP +228TH L 1450.39 4- +228TH cL J J|=3 from |g(|q,H,T) (1995Ba42) +228TH E 8.7 8 7.35 5 8.7 8 +228THS E CK=0.7435 $CL=0.1893 4 $CM+=0.06722 14 +228TH G 18.41 3.7 5 [E1] 6.6 28 3 +228THS G L/T=0.59$ M/T=0.31 +228TH cG E deduced from E(level) +228TH cG TI deduced from coin experiment which gives branching=18% {I2} +228TH2cG for decay from 1450 level to 1432 level (1995Ba42). +228TH cG RI from I(|g+ce) and |a +228TH G 153.02 2 1.11 6 M1+E2 0.60 8 4.8 2 +228THS G KC=3.5 2$ LC=0.97 2$ MC=0.245 6$ NC+=0.090 2 +228TH cG M,MR from ce data (data not given) (1995Ba42) +228TH G 223.80 2 13.3 7 M1+E2 -0.18 5 1.97 3 +228THS G KC= 1.56 3$ LC= 0.302 1$ MC= 0.0729 2$ N+= 0.0266 1$ +228TH cG M |a(K)exp=1.32, K/L1=5.1 {I6}, ce(L3) not seen (1960Ar06); +228TH2cG theory: |a(K)=1.56, K/L1=5.93, K/L3=443 +228TH G 275.85 4 0.82 7 [E1] 0.0453 +228THS G KC=0.0362$ LC=0.00687$ MC=0.00165$ NC+=0.00058 +228TH G 282.01 2 18.6 9 M1+E2 -0.51 12 0.88 7 +228THS G KC=0.69 6$ LC= 0.145 6$ MC=0.0355 11$ N+=0.0129 4 +228TH cG M |a(K)exp=0.62, K/L12=4.1 {I5}, K/L3=58 {I6} (1960Ar06); +228TH2cG theory: |a(K)=0.69 {I6}, K/L12=4.9 {I6}, K/L3=133 {I43} +228TH G 327.45 4 31 3 [E2] 0.132 G +228THS G KC=0.0621$ LC=0.0515$ MC=0.0137$ NC+=0.00508 +228TH cG M |a(K)exp=0.055 (1960Ar06) based on the division of I|g and E1 +228TH2cG mult. in alternate placement. Theory: |a(K)(E2)=0.0619, |a(K)(M1)=0.559 +228TH G 359.36 3 1.30 7 [E1] 0.0252 +228THS G KC=0.0203$ LC=0.00372$ MC=0.00089$ NC+=0.00032 +228TH G 390.45 5 1.11 6 [M1,E2] 0.26 18 +228THS G KC=0.20 16$ LC=0.046 19$ MC=0.011 5$ NC+=0.0042 16 +228TH G 427.90 3 1.24 8 [E1] 0.0174 +228THS G KC=0.0141$ LC=0.00252$ MC=0.00060$ NC+=0.00022 +228TH G 434.01 3 1.73 10 [D,E2] 0.14 13 +228TH G 482.03 5 1.84 13 [M1,E2] 0.15 10 +228THS G KC=0.11 9$ LC=0.025 12$ MC=0.006 3$ NC+=0.0022 10 +228TH G 1054.23 6 3.3 3 [M1,E2] 0.020 11 +228THS G KC=0.016 9$ LC=0.0031 15 +228TH L 1531.47 3+ +228TH E 0.89 16 8.21 8 0.89 16 +228THS E CK=0.7351 $CL=0.1952 5 $CM+=0.06971 18 +228TH G 99.47 6 1.8 3 M1 4.09 +228THS G LC=3.07$ MC=0.741$ NC+=0.273 +228TH cG M |a(L12)exp=2.0, no ce(L3), L/M=2.0, L/N=6 (1960Ar06); theory: +228TH2cG |a(L12)=3.06, |a(L3)=0.0165 +228TH cG MR |<0.4 from ce data (data not given) (1995Ba42) +228TH G 356.96 0.024 5 [E2] 0.103 N +228TH cG Part of a multiplet, I|g not measured. +228TH cG RI from branching ratio in adopted |g's +228TH G 378.01 0.036 7 [M1,E2] 0.28 19 N +228THS G KC=0.21 17$ LC=0.051 20$ MC=0.013 5$ NC+=0.0046 16 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.2 (1995Ba42) +228TH G 440.4 4 0.15 7 M1 0.314 A +228THS G KC=0.252$ LC=0.0471$ MC=0.0113$ NC+=0.00410 +228TH G 509.13 8 1.2 2 E2(+M1) 1.1 GT 0.08 4 A +228TH3 G FLAG=EG +228THS G KC=0.06 3$ LC=0.016 5 +228TH G 562.50 4 1.44 9 E2+M1 +1.6 6 0.07 3 +228THS G KC=0.051 24$ LC=0.013 4 +228TH G 1135.39 0.014 4 N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH G 1344.65 0.013 4 N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH L 1539.2 2,3,4 +228TH cL Possibly fed by the 389.36|g from the 1928.6 level. +228TH2cL However, the |g's shown as deexciting this level in {+228}Ac decay +228TH3cL have either not been reported (416.30|g) or placed elsewhere in +228TH4cL level scheme (1142.85|g). 1995Ba42 suggests that the existence of +228TH5cL this level is doubtful. +228TH L 1580.9 (2-) +228TH E 0.166 21 8.86 6 0.166 21 +228THS E CK=0.7286 8 $CL=0.1998 6 $CM+=0.07167 23 +228TH G 354.2 2 0.29 5 [E2] 0.106 & +228THS G KC=0.0531$ LC=0.0385$ MC=0.0102$ NC+=0.00378 +228TH G 601.7 3 0.30 5 [E1] 0.0088 & +228THS G KC=0.00718$ LC=0.00124 +228TH G 1184.71 9 0.47 4 (M1+E2) 0.015 8 +228THS G KC=0.012 7$ LC=0.0023 11 +228TH cG M |a(K)exp=0.0105 {I20} (1973Ku09); theory: |a(K)(E2)=0.00571, +228TH2cG |a(K)(M1)=0.0185 +228TH G 1252.98 10 0.68 6 (M1+E2) 0.013 7 +228THS G KC=0.011 6$ LC=0.0020 10 +228TH cG M |a(K)exp=0.010 {I3} (1971Am05); theory: |a(K)(E2)=0.00517, +228THxcG |a(K)(M1)=0.0160 +228TH G 1523.4 2 0.60 6 & +228THS G CC=0.00139$ KC=0.00139 +228TH L 1588.3 4- +228TH cL J |g(|q,H,T) excludes 3- (1995Ba42) +228TH E 5.8 5 7.30 5 5.8 5 +228THS E CK=0.7275 8 $CL=0.2005 6 $CM+=0.07200 23 +228TH G 56.86 3 1.06 5 E1 0.533 K +228THS G LC=0.400$ MC=0.098$ NC+=0.0339 +228TH G 137.95 2 6.6 3 M1 7.89 +228THS G KC=6.30$ LC=1.20$ MC=0.289$ NC+=0.106 +228TH cG M |a(L12)exp=1.23, ce(L3) not seen (1960Ar06); theory: M1: +228TH2cG |a(L12)=1.20, |a(L3)=0.00622; E2: |a(L12)=1.22, |a(L3)=0.690 +228TH cG MR -0.2|<|d|<1.4 (|g(|q,H,T)), |<0.3 (|a) +228TH2cG (1995Ba42) +228TH G 156.34 2 1.36 7 E1 0.172 K +228THS G KC=0.134$ LC=0.0281$ MC=0.00676$ NC+=0.00240 +228TH G 420.03 8 0.68 5 [M1,E2] 0.21 15 +228THS G KC=0.16 13$ LC=0.037 17$ MC=0.009 4$ NC+=0.0034 14 +228TH L 1617.8 2+,3,4+ +228TH E 0.13 3 8.90 11 0.13 3 +228THS E CK=0.7227 9 $CL=0.2039 7 $CM+=0.0734 3 +228TH G 649.12 7 0.97 9 & +228TH3 G FL=968.97$ FLAG=G +228TH G 1432 1 0.60 14 @ +228TH2 G FLAG=P +228TH cG RI from I|g/I|g(1560|g) in adopted |g's. I|g(doublet)|<1.8 +228TH cG M for the doublet |a(K)exp=0.0032 {I7} (1973Ku09); +228TH2cG |a(K)(E2)=0.00409, |a(K)(M1)=0.0113 +228TH G 1559.7 2 0.34 5 G +228TH L 1638.3 2+ +228TH E 0.08 LE 9.1 GE 0.08 LE +228THS E CK=0.7190 10 $CL=0.2065 7 $CM+=0.0745 3 +228TH G 469.9 5 0.14 8 [E1] 0.0144 +228THS G KC=0.0116$ LC=0.00206$ MC=0.00049$ NC+=0.00018 +228TH G 515.20 11 0.62 9 [E1] 0.0120 ? +228THS G KC=0.0097$ LC=0.00170 +228TH cG RI disagrees with the branching ratio in {+228}Ac decay +228TH G 1310.26 0.07 3 G +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 1451.45 0.039 9 [E2] N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.05 (1995Ba42) +228TH G 1580.5 3 2.18 14 (M1,E2) G +228TH cG M |a(K)exp=0.0046 {I15} (1973Ku09); theory: |a(K)(M1)=0.0087, +228TH2cG |a(K)(E2)=0.00343 +228TH G 1638.30 7 1.98 10 (E2) +228TH cG M |a(K)exp=0.0026 {I8} (1973Ku09); theory: |a(K)(M1)=0.0087, +228THxcG |a(K)(E2)=0.0034 +228TH L 1643.1 (2-,3-) +228TH E 1.33 13 7.83 5 1.33 13 +228THS E CK=0.7181 10 $CL=0.2071 7 $CM+=0.0748 3 +228TH G 475.1 3 0.7 2 [M1,E2] 0.15 11 +228THS G KC=0.12 9$ LC=0.026 13$ MC=0.006 3$ NC+=0.0023 10 +228TH G 520.17 8 0.92 10 (M1) 0.201 A +228THS G KC=0.161$ LC=0.0301 +228TH G 626.72 0.23 5 G +228TH3 G FLAG=N +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 674.16 2.82 LE [E1] G +228TH3 G FLAG=R +228TH cG E from E(level) +228TH G 674.75 2.82 LE [M1,E2] 0.06 4 G +228TH3 G FLAG=R +228TH cG E from E(level) +228TH G 698.93 0.61 9 [D,E2] 0.05 4 G +228TH3 G FLAG=N +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 1247.07 5 8.2 4 (M1) 0.0201 G +228TH2 G FLAG=A +228THS G KC=0.0162 +228TH cG M for the 1245+1246 doublet: |a(K)exp=0.0088 {I11} (1973Ku09), +228TH2cG 0.021 (1960Ar06); theory: |a(K)(M1)=0.0162, |a(K)(E2)=0.00521 +228TH G 1315.2 2 0.20 5 [M1,E2] 0.012 6 +228THS G KC=0.009 5$ LC=0.0018 8 +228TH L 1646.0 3+ +228TH E 4.1 3 7.34 4 4.1 3 +228THS E CK=0.7175 10 $CL=0.2075 7 $CM+=0.0750 3 +228TH G 114.49 10 0.10 2 [M1,E2] 10 4 +228THS G KC=5.5 52$ LC=3.2 12$ MC=0.9 4$ NC+=0.32 14 +228TH G 419.39 0.24 3 [E1] 0.0182 N +228TH3 G FLAG=G +228THS G KC=0.0147$ LC=0.00264$ MC=0.00063$ NC+=0.000225 +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 492.22 10 0.28 3 [M1,E2] 0.14 10 +228THS G KC=0.11 8$ LC=0.024 12$ MC=0.006 3$ NC+=0.0021 10 +228TH G 523.16 11 1.40 10 [E1] 0.0116 +228TH2 G FL=1122.95 +228THS G KC=0.0094$ LC=0.00165 +228TH G 554.6 3 0.48 11 [M1,E2] 0.10 7 G +228THS G KC=0.08 6$ LC=0.017 9 +228TH G 623.7 2 0.36 6 [M1,E2] 0.08 5 & +228TH2 G FLAG=GQ +228THS G KC=0.06 4$ LC=0.012 6 +228TH G 629.4 2 0.37 6 [D,E2] 0.06 6 +228TH G 666.47 4 0.66 7 [M1,E2] 0.06 4 @ +228TH2 G FLAG=M +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG M for the doublet (I|g=2.47 {I13}): |a(K)exp=0.053 {I16} +228TH2cG (1973Ku09), 0.025 (1960Ar06); theory: |a(K)(M1)=0.0831, +228THxcG |a(K)(E2)=0.0160 +228TH G 676.9 2 0.89 15 [M1,E2] 0.06 4 G +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG M |a(K)exp=0.17 {I5} (1973Ku09), 0.10 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0797, |a(K)(E2)=0.0155 +228TH G 1249.7 2 0.73 10 G +228TH G 1459.2 2 8.6 5 E2 G +228TH2 G FLAG=I +228TH cG M |a(K)exp=0.0045 {I9} (1971Am05), 0.0026 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00395, |a(K)(M1)=0.0108 +228TH G 1588.15 5 37.2 19 E2 +228TH cG M |a(K)exp=0.0025 {I4} (1971Am05), 0.0031 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0034, |a(K)(E1)=0.0013, |a(K)(M1)=0.0086 +228TH cG MR |<-6 from nuclear orientation (1995Ba42) +228TH L 1682.8 2+,3(+),4+ +228TH E 0.2 LE 8.6 GE 0.2 LE +228THS E CK=0.7094 13 $CL=0.2131 9 $CM+=0.0774 4 +228TH G 660.28 0.02 AP [M1,E2] 0.06 4 N +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.2 (1995Ba42) +228TH G 1496.15 6 2.74 14 (E2) +228TH cG M |a(K)exp=0.0029 {I9} (1973Ku09); theory: |a(K)(E2)=0.00378, +228TH2cG |a(K)(M1)=0.0101 +228TH G 1625.0 2 0.70 14 +228TH L 1683.8 (4-) +228TH E 0.300 23 8.39 4 0.300 23 +228THS E CK=0.7092 13 $CL=0.2133 9 $CM+=0.0775 4 +228TH G 457.38 6 0.30 3 [M1,E2] 0.17 12 +228THS G KC=0.13 10$ LC=0.029 14$ MC=0.007 3$ NC+=0.0026 11 +228TH G 623.7 2 0.36 6 [M1,E2] 0.07 5 & +228TH2 G FLAG=GQ +228THS G KC=0.06 4$ LC=0.012 7 +228TH G 1164.58 7 1.32 7 (M1+E2) 0.016 9 +228THS G KC=0.013 7$ LC=0.0024 12 +228TH cG M |a(K)exp=0.012 {I2} (1973Ku09), 0.014 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00588, |a(K)(M1)=0.0193 +228TH G 1287.79 8 1.56 11 (M1+E2) 0.012 7 G +228THS G KC=0.010 5$ LC=0.0019 9 +228TH cG M |a(K)exp=0.0104 {I15} (1973Ku09); theory: |a(K)(M1)=0.0149, +228TH2cG |a(K)(E2)=0.00492 +228TH L 1688.4 2+,3+ +228TH cL J J|p=3-,4+ excluded by |g(|q,H,T) (1995Ba42) +228TH E 0.25 8 8.46 14 0.25 8 +228THS E CK=0.7081 13 $CL=0.2141 9 $CM+=0.0778 4 +228TH G 42.44 0.016 6 [M1] 49 N +228THS G LC=37.1$ MC=8.95 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH G 671.99 0.045 14 N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.2 (1995Ba42) +228TH G 813.94 0.012 3 [M1,E2] 0.038 23 N +228THS G KC=0.030 19$ LC=0.006 3 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH G 1501.5 2 0.74 6 G +228TH G 1630.63 6 2.65 13 (M1,E2) A +228TH L 1724.3 2+ +228TH E 2.80 19 7.32 4 2.80 19 +228THS E CK=0.6982 16 $CL=0.2210 11 $CM+=0.0808 5 +228TH G 497.72 0.1 LE [M2] N ? +228TH G 548.74 11 0.41 5 [M1,E2] 0.10 7 & ? +228THS G KC=0.08 6$ LC=0.017 9 +228TH cG |g feeds the 1175.4 level; see comment with that level +228TH G 570.88 4 3.33 17 (M1) 0.156 G +228TH3 G FLAG=A +228THS G KC=0.125$ LC=0.0234 +228TH G 701.72 4 3.76 21 (M1) 0.091 +228THS G KC=0.0726$ LC=0.0135 +228TH cG M |a(K)exp=0.081 {I14} (1973Ku09), 0.057 (1960Ar06); theory: +228TH2cG |a(K)=0.0726 +228TH G 755.32 2 19.6 10 M1 0.0747 +228THS G KC=0.0599$ LC=0.0111 +228TH cG M |a(K)exp=0.063 {I6} (1973Ku09), 0.057 (1960Ar06); theory: +228THxcG |a(K)(M1)=0.0599 +228TH G 1537.8 2 0.73 10 [E2] +228TH cG M |a(K)exp=0.0080 {I25} (1973Ku09); theory: |a(K)(E2)=0.00360 +228TH G 1666.53 6 3.35 17 M1 +228TH cG M |a(K)exp=0.0081 {I21} (1971Am05); theory: |a(K)(M1)=0.0084 +228TH cG MR 0.00 {I5} from |g(|q,H,T) (1995Ba42) +228TH G 1724.0 2 0.50 5 +228TH L 1743.9 4+ +228TH E 0.88 6 7.77 4 0.88 6 +228THS E CK=0.6917 18 $CL=0.2255 13 $CM+=0.0828 6 +228TH G 399.94 7 0.35 4 [E1] 0.0212 ? +228THS G KC=0.0162$ LC=0.00293$ MC=0.00070$ NC+=0.00025 +228TH cG Possibly feeds the 1344.08 level; see comment with that level +228TH G 590.65 11 0.41 5 [E2] 0.0295 +228THS G KC=0.0200$ LC=0.00716 +228TH cG M |a(K)exp=0.088 {I17} (1973Ku09); theory: |a(K)(E2)=0.0200, +228THxcG |a(K)(M1)=0.115 +228TH G 684.0 3 0.46 10 [E1] +228THS G CC=0.00691$ KC=0.00563$ LC=0.00096 +228TH G 1347.84 0.1 LE N ? +228TH G 1365.72 12 0.40 4 +228TH G 1415.42 10 0.97 6 [E3] ? +228TH G 1557.06 6 4.42 22 (E2+M1) +1.2 2 +228TH cG M |a(K)exp=0.0056 {I11} (1973Ku09), 0.0061 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00352, |a(K)(M1)=0.00908 +228TH G 1686.15 7 2.39 12 (E2) +228TH cG M |a(K)exp=0.0031 {I11} (1973Ku09); theory: |a(K)(E2)=0.0032, +228THxcG |a(K)(M1)=0.0082 +228TH L 1760.2 2+,3(+) +228TH cL J |g(|q,H,T) excludes J|p=4+ (1995Ba42) +228TH E 0.12 4 8.59 15 0.12 4 +228THS E CK=0.6857 20 $CL=0.2297 14 $CM+=0.0846 6 +228TH G 415.91 8 0.49 5 [E1] 0.0185 ? +228THS G KC=0.0150$ LC=0.00269$ MC=0.00064$ NC+=0.00023 +228TH cG Possibly feeds the 1344.08 level; see comment with that level +228TH G 584.7 3 0.22 7 [M1,E2] 0.10 7 & ? +228TH3 G FLAG=G +228THS G KC=0.08 6$ LC=0.017 9 +228TH cG Possibly feeds the 1175.4 level; see comment with that level +228TH G 737.8 2 0.74 13 [M1,E2] 0.05 3 G +228THS G KC=0.04 3$ LC=0.008 4 +228TH G 791.43 9 0.24 9 [M1,E2] 0.04 3 @ +228TH3 G FLAG=M +228THS G KC=0.032 21$ LC=0.007 4 +228TH G 1573.3 3 0.70 7 (E2) +228TH cG M |a(K)exp=0.011 {I4} (1973Ku09); theory: |a(K)(M1)=0.00884, +228TH2cG |a(K)(E2)=0.00346 |a(K)(E1)=0.00132 +228TH G 1702.6 3 1.15 11 G +228TH L 1804.7 4+ +228TH E 1.44 18 7.38 6 1.44 18 +228THS E CK=0.665 3 $CL=0.2439 20 $CM+=0.0908 9 +228TH G 116.26 5 0.16 2 [M1,E2] 9 4 +228THS G KC=5 5$ LC=3.1 11$ MC=0.8 4$ NC+=0.30 13 +228TH G 121.18 7 0.19 3 [E1] 0.316 +228TH2 G FL=1683.8 +228THS G KC=0.244$ LC=0.0542$ MC=0.0131$ NC+=0.00465 +228TH G 121.87 3 0.33 3 [M1,E2] 8 4 +228THS G KC=5 5$ LC=2.5 9$ MC=0.7 3$ NC+=0.25 10 +228TH G 158.74 3 1.25 7 M1+E2 0.55 15 4.4 4 +228THS G KC=3.3 4$ LC=0.85 2$ MC=0.213 9$ NC+=0.079 4 +228TH cG M,MR from ce data (data not given) (1995Ba42) +228TH G 354.2 2 0.29 5 [E1] 0.0260 & +228THS G KC=0.0209$ LC=0.00384$ MC=0.00092$ NC+=0.00033 +228TH G 372.60 3 1.57 8 [M1,E2] 0.29 20 +228THS G KC=0.22 18$ LC=0.053 21$ MC=0.013 5$ NC+=0.0048 7 +228TH G 651.5 2 0.34 5 [E2] 0.0238 I +228THS G KC=0.0166$ LC=0.00540 +228TH G 1426.5 2 0.48 6 [E2] +228TH G 1618.0 1 0.90 6 (M1,E2) G +228TH cG M |a(K)exp=0.012 {I4} (1973Ku09); theory: |a(K)(M1)=0.0091, +228THxcG |a(K)(E2)=0.0035 +228TH L 1817.4 4- +228TH cL J |g(|q,H,T) excludes J|p=3-,5- +228TH E 0.52 4 7.77 5 0.52 4 +228THS E CK=0.658 3 $CL=0.2490 22 $CM+=0.0930 10 +228TH G 367.04 2 2.45 12 M1 0.512 +228THS G KC=0.411$ LC=0.0773$ MC=0.0185$ NC+=0.00674 +228TH cG M,MR -0.2|<|d|<1.4 (|g(|q,H,T)), |<0.3 (|a) +228TH2cG (1995Ba42) +228TH G 1298.3 2 0.45 4 (M1+E2) 0.012 6 +228TH cG M |a(K)exp=0.011 {I4} (1973Ku09); theory: |a(K)(M1)=0.0146, +228TH2cG |a(K)(E2)=0.00486, |a(K)(E1)=0.00182, |a(K)(M2)=0.0146 +228TH cG MR +0.27|<|d|<+5 from |g(|q,H,T) (1995Ba42) +228TH G 1421.1 2 1.40 7 E2+M1 +2.0 5 +228TH cG M |a(K)exp=0.0055 {I14} (1973Ku09); theory: |a(K)(E2)=0.00414 +228TH L 1893.0 3+ +228TH E 3.77 23 6.60 5 3.77 23 +228THS E CK=0.591 7 $CL=0.295 5 $CM+=0.1138 21 +228TH G 477.1 3 0.7 2 G ? +228TH cG Possibly feeds the 1416.1 level; see comment with that level +228TH G 666.47 4 1.81 15 [E1] @ +228TH2 G FLAG=M +228TH cG M for the doublet (I|g=2.47 {I13}): |a(K)exp=0.053 {I16} +228TH2cG (1973Ku09), 0.025 (1960Ar06); theory: |a(K)(E1)=0.00591, +228THxcG |a(K)(E2)=0.0160 +228TH G 692.47 7 2.01 15(M1+E2+E0) 0.24 3 +228TH cG M |a(K)exp=0.17 {I3} (1973Ku09), 0.13 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0148, |a(K)(M1)=0.0751. |a(K)exp may indicate E0 presence. +228TH cG CC from |a(K)exp +228TH G 724.42 11 0.76 9 [E1] & +228TH G 739.2 2 0.57 9 [M1,E2] 0.0790 I +228TH cG M |a(K)exp=0.18 {I5} (1973Ku09); theory: |a(K)(M1)=0.0637. +228TH2cG ce(K) may include the ce(K)(737.8|g) +228TH G 770.2 2 2.28 15 [E1] G +228TH G 870.45 2 15.9 8 M1 0.0515 +228THS G KC=0.0414$ LC=0.00762 +228TH cG M |a(K)exp=0.038 {I5} (1973Ku09), 0.046 (1960Ar06): theory: +228TH2cG |a(K)(M1)=0.0414 +228TH cG MR -0.1 {I1} from |g(|q,H,T) (1995Ba42) +228TH G 924.3 2 2.7 2 [M1,E2] 0.028 17 G +228THS G KC=0.022 14$ LC=0.0043 22 +228TH cG M |a(K)exp=0.09 {I3} (1971Am05), 0.083 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0354, |a(K)(E2)=0.00886 +228TH G 1706.16 7 2.84 14 M1+E2 +0.42 4 +228TH cG M |a(K)exp=0.0071 {I16} (1973Ku09), 0.0063 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0079, |a(K)(E2)=0.0031 +228TH G 1835.26 5 9.8 5 E2+M1 +2.9 3 +228TH cG M |a(K)exp=0.0036 {I6} (1971Am05), 0.0055 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00275, |a(K)(M1)=0.0065 +228TH L 1900.0 2+ +228TH E 0.56 4 7.39 5 0.56 4 +228THS E CK=0.581 8 $CL=0.302 5 $CM+=0.1167 23 +228TH G 877.35 7 0.97 8 [M1,E2] 0.032 19 +228THS G KC=0.025 16$ LC=0.005 3 +228TH G 883.6 3 0.15 4 G +228TH G 920.8 3 0.38 10 [M1,E2] 0.028 17 G +228THS G KC=0.022 14$ LC=0.0044 22 +228TH cG |g not reported in {+228}Ac decay +228TH G 931.02 7 0.99 8 [M1,E2] 0.027 17 +228TH G 1503.7 2 0.72 6 [E1] G +228TH cG M |a(K)exp=0.0050 {I23} (1973Ku09); theory: |a(K)(E1)=0.00142, +228TH2cG |a(K)(E2)=0.00374 +228TH cG |g not reported in {+228}Ac decay +228TH G 1713.16 0.1 LE ? +228TH G 1842.15 8 2.29 12 M1+E2 -0.86 14 +228TH cG M |a(K)exp=0.0059 {I20} (1971Am05); theory: |a(K)(M1)=0.0064, +228THxcG |a(K)(E2)=0.0027 +228TH G 1900.3 3 0.34 5 +228TH L 1901.9 3-,4 +228TH E 0.177 19 7.88 6 0.177 19 +228THS E CK=0.579 8 $CL=0.304 6 $CM+=0.1176 24 +228TH G 1383.2 2 0.55 5 +228TH G 1505.9 2 0.55 5 G +228TH G 1523.4 2 0.60 6 & +228TH G 1715.06 10 0.50 3 +228TH L 1925.2 3+,4+ +228TH cL J |g(|q,H,T) excludes J|p=2+,3- +228TH E 1.52 11 6.81 5 1.52 11 +228THS E CK=0.539 11 $CL=0.331 7 $CM+=0.130 4 +228TH G 724.42 11 0.76 9 [M1,E2] 0.05 4 & +228THS G KC=0.04 3$ LC=0.008 5 +228TH G 750.10 10 0.67 8 [M1,E2] 0.05 3 ? +228TH cG Possibly feeds the 1175.4 level; see comment with that level +228TH G 865.15 13 0.50 7 +228TH G 956.8 2 2.5 5 G +228TH G 1529.02 6 2.61 13 [E1] +228TH cG M |a(K)exp=0.0034 {I11} (1973Ku09); theory: |a(K)(E1)=0.00138, +228TH2cG |a(K)(E2)=0.00364, |a(K)(M1)=0.0095; +228TH G 1738.48 5 9.6 5 M1+E2 +228TH cG M |a(K)exp=0.0061 {I8} (1971Am05), 0.0057 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0074, |a(K)(E2)=0.0030 +228TH L 1928.6 3+ +228TH cL J |g(|q,H,T) excludes J|p=2+,3-,4+ +228TH E 0.187 22 7.70 7 0.187 22 +228THS E CK=0.532 11 $CL=0.336 8 $CM+=0.132 4 +228TH G 168.42 9 0.09 2 [M1,E2] 2.9 16 +228THS G KC=1.9 17$ LC=0.73 6$ MC=0.19 3$ NC+=0.070 10 +228TH G 389.36 0.31 5 [M1,E2] 0.26 18 N ? +228TH cG RI from branching ratio in adopted |g's; I|g|<0.4 (1995Ba42) +228TH cG Possibility feeds the 1539.2 level; see comment with that +228TH2cG level +228TH G 584.7 3 0.22 7 [E1] & ? +228TH cG |g feeds the 1344 level; see comment with 1344 level +228TH3 G FLAG=G +228TH G 1741.6 2 0.42 8 G +228TH G 1870.80 9 0.73 4 (M1+E2) +228TH cG M |a(K)exp=0.0028 {I14} (1973Ku09); theory: |a(K)(E2)=0.0026, +228TH2cG |a(K)(M1)=0.0071 |a(K)(E1)=0.00100, |a(K)(M2)=0.0138 +228TH cG MR -0.32 {I9} or -1.7 {I3} from |g(|q,H,T) (1995Ba42) +228TH L 1944.9 3+ +228TH E 7.8 5 5.98 5 7.8 5 +228THS E CK=0.494 14 $CL=0.362 10 $CM+=0.144 5 +228TH G 184.61 5 0.41 5 (M1) 3.45 @ +228TH3 G FLAG=M +228THS G KC=2.76$ LC=0.525$ MC=0.125$ NC+=0.0461 +228TH cG M from ce data (data not given) (1995Ba42) +228TH G 220.61 2 1.24 6 (M1) 2.10 +228THS G KC=1.68$ LC=0.317$ MC=0.0763$ NC+=0.0278 +228TH cG M from ce data (data not given) (1995Ba42) +228TH G 299.10 10 0.43 5 M1 0.90 +228THS G KC=0.719$ LC=0.135$ MC=0.0326$ NC+=0.0118 +228TH cG M from ce data (data not given) (1995Ba42) +228TH G 306.61 2 2.00 10 M1 0.84 +228THS G KC=0.672$ LC=0.126$ MC=0.0304$ NC+=0.0111 +228TH cG M,MR from ce data, |d|<0.3 (data not given) (1995Ba42) +228TH G 512.79 11 1.33 13 [M1,E2] 0.12 9 G +228THS G KC=0.10 7$ LC=0.021 11 +228TH G 718.31 2 6.4 3 (E1) +228THS G CC=0.00631$ KC=0.00514$ LC=0.00087 +228TH cG M |a(K)exp=0.0074 {I36} (1973Ku09); theory: |a(K)(E1)=0.00514, +228TH2cG |a(K)(E2)=0.0140 +228TH G 776.52 3 7.9 4 [E1] +228THS G CC=0.00546$ KC=0.00446$ LC=0.00075 +228TH cG M |a(K)exp=0.009 {I3} (1973Ku09); theory: |a(K)(E1)=0.00446, +228THxcG |a(K)(E2)=0.0121 +228TH G 791.43 9 3.6 4 (M1) 0.0661 @ +228TH2 G FLAG=M +228THS G KC=0.0530$ LC=0.0098 +228TH cG M |a(K)exp(doublet)=0.054 {I11} (1973Ku09), I|g(doublet)=3.8; +228TH2cG theory: |a(K)(M1)=0.0530 +228TH G 853.97 8 0.82 7 [M1,E2] 0.034 21 +228THS G KC=0.027 17$ LC=0.005 3 +228TH cG M |a(K)exp=0.055 {I25} (1973Ku09,1960Ar06); theory: +228THxcG |a(K)(M1)=0.0436 +228TH G 922.5 2 2.25 12 [M1,E2] 0.028 16 G +228THS G KC=0.022 13$ LC=0.0044 22 +228TH G 928.4 2 0.89 8 G +228TH G 976.00 5 13.4 7 M1 0.0381 +228THS G KC=0.0306$ LC=0.00563 +228TH cG M |a(K)exp=0.025 {I6} (1973Ku09), 0.034 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0306, |a(K)(E2)=0.00804 +228TH cG MR 0.00 {I5} from |g(|q,H,T) (1995Ba42) +228TH G 1000.70 0.5 LE N +228TH G 1070.40 7 1.20 8 +228TH G 1549.3 2 1.2 2 G +228TH G 1758.11 5 9.0 5 E2+M1 -9 1 +228TH cG M |a(K)exp=0.0038 {I8} (1971Am05), 0.0015 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0029, |a(K)(M1)=0.0072 +228TH G 1887.13 5 24.0 12 E2+M1 -9.1 9 +228TH cG M |a(K)exp=0.0028 {I5} (1971Am05), 0.0023 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0026, |a(K)(M1)=0.0059 +228TH L 1965.0 2+,3,4+ +228TH E 0.139 17 7.57 7 0.139 17 +228THS E CK=0.430 20 $CL=0.405 14 $CM+=0.165 7 +228TH G 548.74 11 0.41 5 [M1,E2] 0.10 7 & ? +228THS G KC=0.08 6$ LC=0.017 9 +228TH cG Possibly feeds the 1416.1 level; see comment with that level +228TH G 1778.0 6 0.06 2 +228TH G 1907.13 11 0.99 5 +228TH G 1965.22 12 0.43 4 & +228TH L 1974.2 3-,4+ +228TH E 0.281 21 7.19 6 0.281 21 +228THS E CK=0.392 23 $CL=0.431 16 $CM+=0.177 8 +228TH G 1455.0 2 1.16 7 G +228TH G 1578.2 2 1.33 13 G +228TH G 1787.2 2 0.37 4 G +228TH G 1916.6 3 0.15 3 G +228TH L 1982.0 2+,3,4+ +228TH E 0.145 14 7.41 7 0.145 14 +228THS E CK=0.36 3 $CL=0.456 18 $CM+=0.189 9 +228TH G 1013.54 13 0.38 5 & +228TH G 1795.15 6 1.19 7 +228TH G 1924.2 2 0.18 2 +228TH L 2010.1 2+,3,4(+) +228TH E 0.30 4 6.81 9 0.30 4 +228THS E CK=0.17 4 $CL=0.58 3 $CM+=0.250 14 +228TH G 371.83 0.84 23 G +228TH3 G FLAG=N +228TH cG RI from branching ratio in adopted |g's +228TH G 887.16 0.35 5 N +228TH cG RI from branching ration in adopted |g's; I|g|<0.4 (1995Ba42) +228TH G 919.4 3 0.6 2 I +228TH G 1041.14 0.3 LE N +228TH G 1823.19 10 0.47 3 +228TH G 1952.39 10 0.76 5 +228TH L 2016.8 (2-,3-,4-) +228TH E 0.46 4 6.54 8 0.46 4 +228THS E CK=0.12 4 $CL=0.61 3 $CM+=0.268 15 +228TH G 1620.67 10 4.9 3 (M1+E2) +228TH cG M |a(K)exp=0.0060 {I15} (1973Ku09); theory: |a(K)(M1)=0.0090, +228TH2cG |a(K)(E2)=0.0034 +228TH L 2022.8 +228TH E 0.059 22 7.37 18 0.059 22 +228THS E CK=0.07 4 $CL=0.641 25 $CM+=0.285 15 +228TH G 384.53 0.1 LE [M1,E2] 0.27 18 N ? +228TH G 1148.20 14 0.30 4 +228TH G 1190.98 0.1 LE N +228TH G 1965.22 12 0.43 4 & + +228TH 232U A DECAY 1977KU15,1986LOZT 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +232U P 0 0+ 68.9 Y 4 5413.63 9 +228TH N 0.00259 0.00259 1 +228TH PN 2 +228TH cN NR From absolute I|g measurements of 1984Ge07, 1986LoZT +228TH cL E,J From adopted levels +228TH cA Q(|a)({+232}U)=5413.63 {I9} corrected value from G. Audi, +228THxcA Aug. 1996. +228TH cA E 1972Go33, 1971So15, 1966Ba49, 1963Le17. Calculated values +228TH2cA are from Q(|a) and E(level) in {+228}Th +228TH cA IA Calculated from I(|g+ce) balance in level scheme, unless +228TH2cA otherwise noted. The values differ +228TH3cA substantially from the direct I|a measurements of 1966Ba49. +228TH cA HF HF(5320.12|a)=1.00 yields r{-0}({+228}Th)=1.5289 {I3} +228TH cA E(B) From 1991Ry01. Recommended E|a=5262.36 {I9} in 1991Ry01 is a +228TH2cA misprint, see originally published E|a and adjustment. +228TH cA IA(F) From I(A{-0})/I|a(58)=0.463 {I5} (weighted average from +228TH2cA 1955As28, 1965Be15, 1966Ba49, 1971So15) and I(A{-0})+I(a(58)=99.70 {I2} +228TH cG E,RI$From 1977Ku15, except as noted. (I|g of 1977Ku15 are normalized +228TH2cG to 26.33 for the 129|g). Others: 1963Le17, 1965Be15, 1966Ah02, +228THxcG 1984Ge07. +228TH cG M From adopted gammas, unless otherwise noted +228TH cG RI(A) From 1986LoZT, 1984Ge07 +228TH cG M(D) 1977Ku15 quote A. Plochocki, thesis (1974) as establishing +228TH2cG the multipolarity E0+E2; however, no published information is +228TH3cG available on this. 1977Ku15 give I|g=I(|g+ce) in their level scheme, +228TH4cG suggesting that the E0 admixture may not be significant for intensity +228TH5cG calculations. +228TH L 0.0 0+ +228TH A 5320.12 14 68.15 23 1.00 B +228TH2 A FLAG=F +228TH L 57.762 5 2+ 0.406 NS 7 +228TH cL T weighted average of 0.409 ns {I10} (1970To08) and 0.402 ns +228TH2cL {I10} (1965Ne03); other: 0.40 ns {I3} (1960Be25) +228TH A 5263.36 9 31.55 230.992 12 B +228TH2 A FLAG=F +228TH G 57.78 5 77.2 7 E2 156 A +228THS G LC= 114 $MC= 31.1 $NC+= 11.4 $ +228TH cG CC 158 {I7} (1968Du06) +228TH cG M L1:L2:L3=3.55 {I25}:115 {I4}:100 (1966Ha01); +228TH2cG M1:M2:M3=5.3 {I13}:107 {I8}:100, M3/L3=0.32 {I3} (1966Ra15); theory: +228TH2cG L1:L2:L3=3.90:119:100, M1:M2:M3=4.35:114:100, M3/L3=0.276 +228TH L 186.828 5 4+ 0.164 NS 4 +228TH cL T weighted average of 0.169 ns {I7} (1970To08), 0.161 ns {I5} +228TH2cL (1965Ne03) +228TH A 5139.0 20 0.30 2 17.5 12 +228TH cA IA weighted average from 1955As28, 1965Be15, 1966Ba49, 1971So15. +228TH G 129.08 5 26.33 15 E2 3.81 A +228THS G KC= 0.269 $LC= 2.57 $MC= 0.706 $NC+= 0.263 $ +228TH L 328.003 5 1- +228TH A 4997.94 CA 0.00616 8 111 2 +228TH cA IA other: 0.0029 {I2} (1966Ba49) +228TH G 270.2 2 1.220 19 E1 0.0474 A +228THS G KC= 0.0379 $LC=0.00722 $MC=0.00173 $NC+=0.00061 $ +228TH G 327.9 2 1.093 23 E1 0.0308 A +228THS G KC=0.02472 $LC=0.00458 $MC=0.00110 $NC+=0.00039 $ +228TH L 378.178 11 6+ +228TH A 4948.63 CA 5.1E-5 5 6.4E+3 6 +228TH cA IA$other: 0.00017 {I3} (1966Ba49) +228TH G 191.0 2 0.012 1 E2 0.791 +228THS G KC= 0.1741 $LC= 0.453 $MC= 0.1237 $NC+= 0.0457 $ +228TH L 396.085 5 3- +228TH A 4931.04 CA 4.8E-5 4 5.2E+3 5 +228TH cA IA$other: 0.00021 {I3} (1966Ba49) +228TH G 209.5 5 0.0041 10 E1 0.0856 +228THS G KC= 0.0676 $LC=0.01341 $MC=0.00323 $NC+=0.00114 $ +228TH G 338.1 2 0.0143 5 E1 0.0288 +228THS G KC=0.02314 $LC=0.00427 $MC=0.00102 $NC+=0.00036 $ +228TH L 519.199 6 5- +228TH A 4810.04 CA 5.6E-5 3 680 40 +228TH G 141.0 5 0.0012 5 (E1) 0.220 +228THS G KC= 0.1711 $LC= 0.0367 $MC=0.00883 $NC+=0.00313 $ +228TH G 332.3 3 0.019 1 (E1) 0.0299 +228THS G KC=0.02402 $LC=0.00444 $MC=0.00106 $NC+=0.00038 $ +228TH L 831.832 11 0+ +228TH A 4502.80 CA 2.1E-5 2 10.6 11 +228TH cA IA$other: 0.000024 {I7} (1963Le17) +228TH G 503.6 3 0.0056 3 (E1) 0.0125 +228THS G KC=0.01015 $LC=0.00179 $ +228TH G 773.4 5 0.0018 3 [E2] 0.0167 +228THS G KC=0.01218 $LC=0.00340 $ +228TH G 831 0.0003 LT E0 8E-4 4 +228TH cG M,TI from 1963Le17 +228TH L 874.48 3 2+ +228TH A 4460.94 CA 3.9E-6 9 27 8 +228TH cA IA$includes additional weak |g's at 688.1, 816.7 and 874.4 keV, +228TH2cA from adopted levels. I|a=3.2|*10{+-6} {I9} without inclusion of these +228TH3cA additional |g's +228TH G 478 1 0.00055 21 [E1] 0.0139 +228THS G KC=0.01127 $LC=0.00199 $MC=0.00047 $NC+=0.00017 $ +228TH G 547 1 0.00039 24 [E1] 0.0106 +228THS G KC=0.00863 $LC=0.00150 $ +228TH G 817 1 0.0003 AP [M1+E2] 0.038 23 D + +228TH 226RA(A,2NG) 1993AC02,1986SC18 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH PN 6 +228TH c 1993Ac02: E|a=28 MeV; measured E|g, I|g in coin with +228TH2c ce(L2)(129.1|g) +228TH c 1986Sc18: E|a=33, 42, 55 MeV; measured ce, (ce)(ce), (ce)|g +228TH c The level scheme is that proposed by 1986Sc18 and 1993Ac02, +228TH2c confirming levels known from {+228}Ac |b{+-} decay, {+228}Pa |e decay +228TH3c and {+230}Th(|a,|a'2n), and adding the levels with J>14. The 1- and 3- +228TH3c levels of the K|p=0- band are not seen in this experiment. +228TH cL E From least squares fit to E|g, unless otherwise noted +228TH cL J From adopted levels, unless otherwise noted +228TH cL E(A) Rounded-off values from adopted levels +228TH cL J(B) From this data set, based on the level decay mode, band +228TH2cL structure (1993Ac02) +228TH CL BAND(D) GS ROTATIONAL BAND +228TH CL BAND(E) KPI=0- BAND +228TH cG E From 1993Ac02 +228TH cG RI Relative I|g from the level (1993Ac02) +228TH L 0.0 0+ D +228TH L 57.76 2+ A +228TH2 L FLAG=D +228TH L 186.83 4+ A +228TH2 L FLAG=D +228TH L 378.18 6+ A +228TH2 L FLAG=D +228TH G 191.4 3 +228TH L 519.20 5- A +228TH2 L FLAG=E +228TH G 332.4 3 +228TH L 622.5 3 8+ D +228TH G 244.4 3 +228TH L 695.6 3 7- E +228TH G 317.4 3 +228TH L 911.8 4 10+ D +228TH G 289.4 3 +228TH L 920.8 3 9- E +228TH G 225.1 3 1.00 +228TH G 298.3 3 4.07 24 +228TH L 1189.8 4 11- E +228TH G 268.9 3 1.00 +228TH G 278.0 3 1.50 10 +228TH L 1239.4 4 12+ D +228TH G 327.5 3 +228TH L 1497.1 5 13- E +228TH G 257.7 3 0.52 4 +228TH G 307.3 3 1.00 +228TH L 1599.5 5 14+ B +228TH2 L FLAG=D +228TH G 360.1 3 +228TH L 1838.3 5 15- B +228TH2 L FLAG=E +228TH G 341.2 3 +228TH L 1988.1 6 16+ B +228TH2 L FLAG=D +228TH G 388.6 3 +228TH L 2209.7 6 17- B +228TH2 L FLAG=E +228TH G 371.4 3 +228TH L 2407.9 7 18+ B +228TH2 L FLAG=D +228TH G 419.8 3 +228THF G FL=1988.1 + +228TH 230TH(P,T) 1972MA15 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH c 1972Ma15: E=17 MeV +228TH c 1995Ba42: authors quote H. Baltzer, et al., to be published +228TH cL E From 1972Ma15, unless otherwise noted +228TH cL E(A),L(B)$From 1995Ba42 +228TH L 0 0 +228TH L 57 5 +228TH L 185 5 +228TH L 830 5 0 +228TH L 874 5 +228TH L 938 0 A +228TH3 L FLAG=B +228TH L 944 A +228TH cL Possibly unnatural parity level (1995Ba42) +228TH L 977 5 +228TH cL Natural parity level (1995Ba42) +228TH L 1016 A +228TH cL Natural parity level (1995Ba42) +228TH L 1160 5 A +228TH cL Possibly unnatural parity level (1995Ba42) + +228TH 230TH(A,A'2NG) 1984HA21 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH c E=56 MeV. Measured ce and ce|g +228TH cL J From 1984Ha21 based on coin and band structure +228TH cL E From a least-squares fit to the E|g data. +228TH cL The authors do not see transitions from the known 1- and +228TH2cL 3- members of the K|p=0- band. The level scheme is based on +228TH3cL coincidence data, energy fits, and intensity systematics +228TH cG Authors give only E|g. Multipolarity of 129, 191 and 244 |g's +228TH2cG in the ground-state band are determined as E2 from (L1+L2)/L3 ce data +228TH L 0 0+ +228TH L 57.8 2+ +228TH G 57.8 S +228TH cG E not seen. E|g is rounded-off value from adopted |g's +228TH L 187 4+ +228TH G 129.0 2 E2 +228TH L 378 6+ +228TH G 191.0 1 E2 +228TH L 519 5- +228TH G 332.0 4 +228TH L 622 8+ +228TH G 244.3 1 E2 +228TH3 G FL=378 +228TH L 695 7- +228TH G 317.2 2 +228TH L 911 10+ +228TH G 289.3 2 +228TH L 921 9- +228TH G 298.7 2 +228TH L 1190 11- +228TH G 268.9 5 +228TH G 278.4 3 +228TH L 1239 12+ +228TH G 327.2 4 +228TH L 1497 (13-) +228TH cL E shown as tentative by authors, but |g's to 11- and 12+ +228TH2cL are consistent with adopted data from (|a,2n|g) +228TH G 257.3 5 +228TH G 306.6 5 +228TH L 1596 (14+) ? +228TH cL E the adopted 14+ member of this band is at 1599.5-keV +228TH2cL from (|a,2n|g) with E|g=360.1 to 12+ +228TH G 357.2 5 + \ No newline at end of file diff --git a/tests/ensdf_processing/gtol/ref_gtol.rpt b/tests/ensdf_processing/gtol/ref_gtol.rpt new file mode 100644 index 0000000000..a6f1505c2f --- /dev/null +++ b/tests/ensdf_processing/gtol/ref_gtol.rpt @@ -0,0 +1,1945 @@ + +********************* +* GTOL Version 7.2h * +********************* + +DATE: 06-Oct-2015 +TIME: 20:41:34 + +(Double precision, localized) +Max. number of levels=1000 +Max. number of gammas=4000 +Max. number of fixed levels=1000 + + +INPUT-FILE name: a228.ens + +Program GTOL Version 7.2h as of 24-May-2013 (Double precision, localized) + + 228TH ADOPTED LEVELS, GAMMAS 97NDS 199709 + 228TH L 0.0 0+ 1.9116 Y 16 A + 228TH L 57.759 4 2+ 0.405 NS 7 A + 228TH G 57.766 5 100 E2 156 L + 228THB G BE2W=167 6 + 228TH L 186.823 4 4+ 0.164 NS 4 A + 228TH G 129.065 1 100 E2 3.81 L + 228THB G BE2W=242 9 + 228TH L 328.003 4 1- B + 228TH G 270.245 2 100.0 16 E1 0.0474 J + 228TH3 G FLAG=L + 228TH G 328.000 6 89.3 21 E1 0.0308 J + 228TH3 G FLAG=L + 228TH L 378.179 10 6+ A + 228TH G 191.353 10 100 E2 0.791 L + 228TH L 396.078 5 3- B + 228TH G 209.253 6 34.5 6 E1 0.086 L + 228TH G 338.320 3 100.0 17 E1 0.0288 L + 228TH L 519.192 6 5- B + 228TH G 141.01 2 10.1 6 E1 0.220 + 228TH G 332.370 4 100 5 E1 0.0299 L + 228TH L 622.5 3 8+ A + 228TH G 244.4 3 E2 0.332 G + 228TH L 695.6 3 7- B + 228TH G 317.4 3 [E1] 0.0331 G + 228TH L 831.823 10 0+ C + 228TH G 503.823 13 100 7 (E1) 0.0125 L + 228TH3 G FLAG=M + 228TH G 774.1 2 33 AP L + 228TH3 G FLAG=M + 228TH G 831 E0 0.04 2 +- 1.00 keV unc. assigned to energy + 228TH L 874.473 18 2+ C + 228TH G 478.40 6 100 5 E1 0.0139 + 228TH G 546.45 2 91 5 + 228TH G 688.11 4 32 3 & + 228TH3 G FL=186.823$ FLAG=N FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 816.62 10 12.3 20 + 228TH G 874.45 7 23 3 + 228TH L 911.8 4 10+ A + 228TH G 289.4 3 G + 228TH L 920.8 3 9- B + 228TH G 225.1 3 24.6 15 G + 228TH3 G FLAG=H + 228TH G 298.3 3 100 G + 228TH3 G FLAG=H + 228TH L 938.58 7 0+ D + 228TH G 610.64 10 100 22 L + 228TH3 G FLAG=M + 228TH G 880.76 10 27 8 L + 228TH3 G FLAG=M + 228TH L 944.196 13 1,2+ + 228TH G 616.20 3 91 11 + 228TH G 944.196 14 100 8 L + 228TH L 968.369 17 3- F + 228TH G 449.21 4 39 5 + 228TH G 572.29 4 100 5 + 228TH G 640.34 3 28 4 + 228TH L 968.968 5 2+ G + 228TH G 782.142 5 1.89 6 L + 228TH G 911.204 4 100.0 16 E2+M1 +24 8 0.0121 L + 228TH G 968.971 17 61.1 11 E2 0.0107 L + 228TH L 979.499 14 2+ D + 228TH G 583.41 5 123 11 R + 228TH2 G FLAG=M + 228TH G 651.48 5 100 9 R + 228TH2 G FLAG=M + 228TH G 792.8 89 AP L +- 1.00 keV unc. assigned to energy + 228TH3 G FLAG=M + 228TH G 921.98 10 18.6 LE L RI=DRI=RI/2 assumed + 228TH3 G FLAG=BM + 228TH G 979.48 10 29 3 L + 228TH3 G FLAG=M + 228TH L 1016.406 21 2+,3-,4+ + 228TH G 620.33 6 28.4 14 + 228TH G 688.11 4 24.0 15 & + 228TH3 G FL=328.003$ FLAG=N FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 958.61 4 100 12 + 228TH G 1016.44 15 6.8 11 & + 228TH3 G FLAG=LM + 228TH L 1022.527 6 (3)+ G + 228TH G 835.710 6 32.4 11 E2 0.0143 L + 228TH G 964.766 10 100.0 18 E2+M1 -7.2 10 0.0108 L + 228TH L 1059.93 3 4- + 228TH G 540.68 5 58 10 + 228TH G 663.88 6 87 7 (M1+E2) 0.06 4 + 228TH G 873.11 12 100 10 + 228TH L 1091.017 8 4+ G + 228TH G 694.8 2 2.9 4 I + 228TH3 G FLAG=K + 228TH G 713.1 3 1.8 4 I + 228TH3 G FLAG=K + 228TH G 904.19 3 100 4 E2 0.0123 + 228TH G 1033.248 9 26.5 9 E2 L + 228TH L 1122.951 6 2- H + 228TH G 100.41 3 2.2 3 (E1+M2) 0.23 AP 3.2 AP L + 228TH3 G FLAG=M + 228TH G 153.977 10 16.7 5 E1 0.178 L + 228TH3 G FL=968.968 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 726.863 15 13.7 13 (E2) 0.0189 L + 228TH G 794.947 5 100.0 16 E2+M1 -4.4 10 0.0182 15 L + 228TH G 1065.19 4 3.02 12 + 228TH L 1153.467 10 2+ 0.29 NS 2 I + 228TH G 173.964 13 15.5 22 M1+E2 1.2 +11-6 2.3 18 L + 228THB G BM1W=4.E-5 +6-4$BE2W=0.6 +7-6 + 228TH G 184.54 2 31 4 E0+M1 63 8 M + 228TH3 G FL=968.968$ FLAG=L FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THB G BM1W=1.2E-4 3 + 228TH G 278.70 10 71 9 (M1+E2) 0.7 5 @ + 228TH3 G FL=874.473 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 321.646 8 100 5 [E2] 0.140 L + 228THB G BE2W=0.29 5 + 228TH G 1095.679 20 55 4 [M1,E2] 0.018 10 L + 228TH G 1153.52 4 61 4 [E2] + 228THB G BE2W=0.00030 6 + 228TH L 1160 5 + 228TH L 1168.375 5 3- H + 228TH G 77.34 3 1.7 3 L + 228TH3 G FLAG=M + 228TH G 145.849 10 10.4 4 E1 0.203 L + 228TH G 199.407 10 20.8 8 E1 0.096 L + 228TH G 649.03 13 2.7 3 & + 228TH G 772.291 5 100.0 20 E2+M1 -3.4 +8-27 0.021 3 L + 228TH G 840.377 7 61.9 21 E2 0.0142 L + 228TH G 981.5 2 3.0 4 I + 228TH3 G FLAG=K + 228TH G 1110.610 10 18.7 20 E1 @ + 228TH2 G FLAG=L + 228TH L 1174.508 18 (5+) G + 228TH G 987.88 9 + 228TH L 1175.39 5 2+ + 228TH G 231.42 10 32 5 L + 228TH3 G FLAG=M + 228TH G 988.63 20 100 17 L + 228TH3 G FLAG=M + 228TH G 1117.63 10 70 10 L + 228TH3 G FLAG=M + 228TH G 1175.31 10 31 4 L + 228TH3 G FLAG=M + 228TH L 1189.8 4 11- B + 228TH G 268.9 3 67 5 G + 228TH3 G FLAG=H + 228TH G 278.0 3 100 G + 228TH3 G FLAG=H + 228TH L 1200.54 4 (3)+ I + 228TH G 178.14 7 22 LE (E0) I RI=DRI=RI/2 assumed + 228TH3 G FLAG=K + 228TH G 231.50 5 100 5 I + 228TH3 G FL=968.968$ FLAG=K FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1013.54 13 41 5 & + 228TH3 G FLAG=IK + 228TH G 1142.78 11 3 I +- 1.00 keV unc. assigned to energy + 228TH3 G FLAG=K + 228TH L 1226.565 7 (4)- H + 228TH G 135.51 2 3.66 20 E1 0.242 + 228TH G 204.026 10 20.7 10 E1 0.091 L + 228TH G 707.41 3 27.5 6 (E2) 0.0200 + 228TH G 830.486 8 100 4 E2(+M1) -7.7 9 0.0152 2 L + 228TH G 1039.84 8 9.9 6 + 228TH L 1239.4 4 12+ A + 228TH G 327.5 3 G + 228TH L 1297.423 10 (5)- H + 228TH G 601.7 3 11.1 19 & ? UNCERTAIN GAMMA IS IGNORED + 228TH3 G FLAG=IK + 228TH G 778.1 2 100 11 I + 228TH3 G FLAG=K + 228TH G 901.26 13 74 11 K + 228TH G 1110.610 10 89 7 E1 @ + 228TH3 G FLAG=L + 228TH L 1344.078 11 3- J + 228TH G 168.65 10 9 3 L + 228TH3 G FLAG=M + 228TH G 824.934 23 47 5 L + 228TH3 G FLAG=M + 228TH G 947.982 11 100 8 L + 228TH3 G FLAG=M + 228TH G 1016.44 15 18 3 & + 228TH3 G FLAG=LM + 228TH G 1157.14 15 6.6 12 L + 228TH3 G FLAG=M + 228TH G 1286.27 20 47 9 L + 228TH3 G FLAG=M + 228TH L 1416.11 6 2+,3- + 228TH G 471.76 15 100 10 L + 228TH3 G FLAG=M + 228TH G 1019.86 10 64 12 L + 228TH3 G FLAG=M + 228TH G 1088.18 15 18 4 L + 228TH3 G FLAG=M + 228TH G 1229.40 15 23 7 L + 228TH3 G FLAG=M + 228TH L 1431.979 6 4+ + 228TH G 257.49 2 0.64 3 (M1) 1.36 + 228TH G 263.62 2 0.95 5 E1 0.0502 + 228TH G 278.70 10 0.70 11 @ + 228TH3 G FL=1153.467 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 340.98 2 8.8 4 E2+M1 -5.2 18 0.136 23 + 228TH G 409.462 6 43.8 8 E2+M1 -5.4 8 0.082 4 + 228TH G 452.51 5 0.45 4 + 228TH G 463.004 6 100.0 16 E2 0.0522 L + 228TH G 1245.16 6 2.47 12 + 228TH G 1374.24 6 0.32 9 M + 228TH L 1450.394 10 4- + 228TH G 18.4 11.9 16 [E1] 6.6 K +- 1.00 keV unc. assigned to energy + 228TH G 153.02 2 3.58 19 M1+E2 +0.60 8 4.8 2 I + 228TH3 G FLAG=K + 228TH G 223.80 2 43.4 20 M1+E2 -0.18 5 1.97 3 + 228TH G 275.85 4 2.65 23 I + 228TH3 G FLAG=K + 228TH G 282.00 3 60 3 M1+E2 -0.51 12 0.88 7 K + 228TH G 327.45 4 100.0 10 I + 228TH3 G FLAG=K + 228TH G 359.36 3 4.19 23 I + 228TH3 G FLAG=K + 228TH G 390.45 5 3.58 19 I + 228TH3 G FLAG=K + 228TH G 427.90 3 4.0 3 I + 228TH3 G FLAG=K + 228TH G 434.01 3 5.6 3 I + 228TH3 G FLAG=K + 228TH G 482.03 5 5.9 4 I + 228TH3 G FL=968.369$ FLAG=K FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1054.22 6 10.9 10 + 228TH L 1497.1 5 13- B + 228TH G 257.7 3 52 4 G + 228TH3 G FLAG=H + 228TH G 307.3 3 100 G + 228TH3 G FLAG=H + 228TH L 1531.474 6 3+ + 228TH G 99.509 6 100 6 M1 4.09 L + 228TH G 356.94 10 1.35 14 L + 228TH3 G FLAG=M + 228TH G 377.99 10 1.98 24 L + 228TH3 G FLAG=M + 228TH G 440.44 5 9.6 6 M1 0.314 + 228TH G 508.959 17 40 10 E2(+M1) 1.1 GT 0.08 4 L + 228TH G 562.500 4 71 4 E2+M1 +1.6 6 0.07 3 L + 228TH G 1135.24 15 0.78 12 L + 228TH3 G FLAG=M + 228TH G 1344.59 15 0.71 14 L + 228TH3 G FLAG=M + 228TH L 1539.21 9 2,3,4 + 228TH G 416.30 20 100 16 L + 228TH2 G FLAG=M + 228TH G 1142.85 15 78 16 L + 228TH2 G FLAG=M + 228TH L 1580.91 6 (2-) + 228TH G 354.2 2 43 7 & + 228TH3 G FLAG=IK + 228TH G 601.7 3 44 7 & + 228TH3 G FLAG=IK + 228TH G 1184.71 9 69 6 (M1+E2) 0.015 8 I + 228TH3 G FLAG=K + 228TH G 1252.98 10 100 9 (M1+E2) 0.013 7 I + 228TH3 G FLAG=K + 228TH G 1523.4 2 88 9 & + 228TH3 G FLAG=IK + 228TH L 1588.335 14 4- + 228TH G 56.86 3 16.1 8 E1 0.533 I + 228TH3 G FLAG=K + 228TH G 137.95 2 100 3 M1 7.89 I + 228TH3 G FLAG=K + 228TH G 156.34 2 20.6 11 E1 0.172 I + 228TH3 G FLAG=K + 228TH G 420.03 8 10.3 8 I + 228TH3 G FLAG=K + 228TH L 1599.5 5 14+ A + 228TH G 360.1 3 G + 228TH L 1617.78 7 2+,3,4+ + 228TH G 649.03 13 114 11 & + 228TH2 G FL=968.968$ FLAG=M FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1430.95 10 100 20 L + 228TH3 G FLAG=M + 228TH G 1559.78 14 57 11 M + 228TH L 1638.284 9 2+ + 228TH G 470.20 19 2.3 6 + 228TH G 515.06 10 8.2 8 L + 228TH3 G FLAG=M + 228TH G 1309.71 20 3.2 10 L + 228TH3 G FLAG=M + 228TH G 1451.40 15 1.8 4 L + 228TH3 G FLAG=M + 228TH G 1580.53 3 100 7 (M1,E2) + 228TH G 1638.281 10 85 7 (E2) L + 228TH L 1643.125 15 (2-,3-) + 228TH G 474.79 11 4.6 7 + 228TH G 520.151 16 11.8 10 (M1) 0.201 L + 228TH G 627.23 20 2.8 6 L + 228TH3 G FLAG=M + 228TH G 674.16 30 LE Q +- 1.00 keV unc. assigned to energy + RI=DRI=RI/2 assumed + 228TH3 G FL=968.968 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 674.76 30 LE Q +- 1.00 keV unc. assigned to energy + RI=DRI=RI/2 assumed + 228TH3 G FL=968.369 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 699.08 15 7.4 10 L + 228TH3 G FLAG=M + 228TH G 1247.08 3 100 5 (M1) 0.0201 + 228TH G 1315.31 9 2.7 4 + 228TH L 1645.954 12 3+ + 228TH G 114.54 6 0.28 4 + 228TH G 419.42 10 0.65 9 L + 228TH3 G FLAG=M + 228TH G 492.30 8 0.74 5 + 228TH G 523.131 16 3.5 3 B + 228TH3 G FL=1122.951$ FLAG=L FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 555.07 16 1.40 14 + 228TH G 623.27 20 0.34 9 L + 228TH3 G FLAG=M + 228TH G 629.40 5 1.20 21 + 228TH G 666.47 4 1.8 2 @ + 228TH G 677.07 9 1.99 16 + 228TH3 G FL=968.968 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1249.97 14 1.94 14 + 228TH G 1459.138 15 23.7 12 E2 L + 228TH G 1588.19 3 100.0 25 E2 + 228TH L 1682.81 3 2+,3(+),4+ + 228TH G 660.1 3 0.6 AP L + 228TH3 G FLAG=M + 228TH G 1495.93 7 100 5 (E2) + 228TH G 1625.06 5 29.1 19 + 228TH L 1683.82 5 (4-) + 228TH G 457.35 7 19.2 19 + 228TH G 623.7 2 26 LE I RI=DRI=RI/2 assumed + 228TH3 G FLAG=K + 228TH G 1164.55 7 83 4 (M1+E2) 0.016 9 + 228TH G 1287.78 12 100 7 (M1+E2) 0.012 7 + 228TH L 1688.394 11 2+,3+ + 228TH G 42.46 5 0.60 20 L + 228TH3 G FLAG=M + 228TH G 672.00 15 1.7 5 L + 228TH3 G FLAG=M + 228TH G 813.77 15 0.46 11 L + 228TH3 G FLAG=M + 228TH G 1501.57 5 29.4 15 + 228TH G 1630.627 10 100 3 (M1,E2) L + 228TH L 1724.283 6 2+ + 228TH G 548.73 15 2.3 3 L + 228TH2 G FLAG=M + 228TH G 570.88 4 17.1 9 (M1) 0.156 + 228TH G 701.747 14 18.2 10 (M1) 0.091 L + 228TH G 755.315 4 100 3 M1 0.0747 L + 228TH G 1537.87 9 4.2 5 B + 228TH3 G FL=186.823 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1666.523 13 17.3 8 M1 L + 228TH G 1724.20 4 2.7 3 + 228TH L 1735.450 25 (4+) + 228TH G 1217.03 10 39 6 B ? UNCERTAIN GAMMA IS IGNORED + 228TH3 G FL=519.192$ FLAG=LM FINAL LEVEL FOUND + 228TH G 1357.78 15 37 7 B ? UNCERTAIN GAMMA IS IGNORED + 228TH3 G FL=378.179$ FLAG=LM FINAL LEVEL FOUND + 228TH G 1548.65 4 70 7 L + 228TH3 G FLAG=M + 228TH G 1677.67 3 100 9 L + 228TH3 G FLAG=M + 228TH L 1743.89 3 4+ + 228TH G 399.62 10 16.3 17 L + 228TH3 G FLAG=MP + 228TH G 590.65 11 9.3 11 I ? UNCERTAIN GAMMA IS IGNORED + 228TH3 G FLAG=K + 228TH G 684.0 3 10.4 23 I ? UNCERTAIN GAMMA IS IGNORED + 228TH3 G FLAG=K + 228TH G 1365.71 9 8.8 8 + 228TH G 1557.10 4 100 5 (E2+M1) +1.2 2 + 228TH G 1686.12 5 53.8 23 (E2) + 228TH L 1758.24 12 2+,3,4+ + 228TH G 326.04 20 100 15 L + 228TH3 G FLAG=M + 228TH G 1571.52 20 17 5 L + 228TH3 G FLAG=M + 228TH G 1700.59 20 31 7 L + 228TH3 G FLAG=M + 228TH L 1760.218 24 2+,3(+) + 228TH G 584.7 3 12 4 & + 228TH3 G FLAG=IK + 228TH G 737.72 5 73 7 + 228TH G 791.44 9 21 6 @ + 228TH3 G FL=968.968 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1573.26 5 65 4 (E2) + 228TH G 1702.44 5 100 7 + 228TH L 1795.90 10 3-,4+ + 228TH G 1276.69 10 78 17 L + 228TH3 G FLAG=M + 228TH G 1738.22 25 100 22 L + 228TH3 G FLAG=M + 228TH L 1797.65 8 2+ + 228TH G 1401.49 10 60 15 L + 228TH3 G FLAG=M + 228TH G 1469.71 15 100 20 L + 228TH3 G FLAG=M + 228TH G 1740.4 3 55 15 L + 228TH3 G FLAG=M + 228TH G 1797.5 5 11 4 L + 228TH3 G FLAG=M + 228TH L 1804.689 23 4+ + 228TH G 116.26 5 12.8 16 I + 228TH3 G FLAG=K + 228TH G 121.18 7 15.2 24 I ? UNCERTAIN GAMMA IS IGNORED + 228TH3 G FL=1683.82$ FLAG=KB FINAL LEVEL FOUND + 228TH G 121.87 3 26.4 24 I + 228TH3 G FLAG=K + 228TH G 158.74 3 100 6 M1+E2 0.55 15 I + 228TH3 G FLAG=K + 228TH G 354.2 2 23 4 & + 228TH3 G FLAG=IK + 228TH G 372.60 3 126 6 I ? UNCERTAIN GAMMA IS IGNORED + 228TH3 G FL=1431.979$ FLAG=KB FINAL LEVEL FOUND + 228TH G 651.5 2 27 4 I + 228TH3 G FLAG=K + 228TH G 1426.5 2 38 5 I + 228TH3 G FLAG=K + 228TH G 1618.0 1 72 5 (M1,E2) I + 228TH3 G FLAG=K + 228TH L 1817.432 23 4- + 228TH G 367.04 2 100 5 M1 0.512 I + 228TH3 G FLAG=K + 228TH G 1298.3 2 18.4 16 (M1+E2) I + 228TH3 G FLAG=K + 228TH G 1421.1 2 57 3 E2+M1 +2.0 5 I + 228TH3 G FLAG=K + 228TH L 1838.3 5 15- B + 228TH G 341.2 3 G + 228TH L 1892.996 17 3+ + 228TH G 477.1 3 4.4 13 I + 228TH3 G FLAG=KP + 228TH G 666.47 4 11 2 @ + 228TH G 692.47 7 12.6 9 (M1+E2+E0) 0.24 3 I + 228TH3 G FLAG=K + 228TH G 724.42 11 4.8 6 & + 228TH3 G FLAG=IK + 228TH G 739.2 2 3.6 6 I + 228TH3 G FLAG=K + 228TH G 770.2 2 14.3 9 I + 228TH3 G FLAG=K + 228TH G 870.45 2 100 5 M1 + 228TH G 924.3 2 17.0 13 I + 228TH3 G FLAG=K + 228TH G 1706.17 7 18.1 8 M1+E2 +0.42 4 + 228TH G 1835.29 5 64 8 E2+M1 +2.9 3 + 228TH L 1899.95 4 2+ + 228TH G 877.39 7 41 4 + 228TH G 883.6 3 6.6 18 I + 228TH3 G FLAG=K + 228TH G 920.8 3 17 4 I + 228TH3 G FLAG=K + 228TH G 931.02 7 43 4 I + 228TH3 G FLAG=K + 228TH G 1503.7 2 31 3 I + 228TH3 G FLAG=K + 228TH G 1842.14 8 100 5 M1+E2 -0.86 14 + 228TH G 1900.14 17 9 3 + 228TH L 1901.93 8 3-,4 + 228TH G 1383.2 2 100 9 I + 228TH3 G FLAG=K + 228TH G 1505.9 2 100 9 I + 228TH3 G FLAG=K + 228TH G 1523.4 2 109 11 & + 228TH3 G FLAG=IK + 228TH G 1715.06 10 91 6 I + 228TH3 G FLAG=K + 228TH L 1906.64 10 (2+) + 228TH G 490.33 15 93 19 L + 228TH3 G FLAG=M + 228TH G 1074.71 15 84 25 L + 228TH3 G FLAG=M + 228TH G 1907.18 20 100 8 L + 228TH3 G FLAG=M + 228TH L 1925.22 4 3+,4+ + 228TH G 724.42 11 7.9 9 & + 228TH3 G FLAG=IK + 228TH G 750.10 10 7.0 8 I + 228TH3 G FLAG=K + 228TH G 865.15 13 5.2 7 I + 228TH3 G FLAG=K + 228TH G 956.8 2 26 5 I + 228TH3 G FL=968.369$ FLAG=K FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1529.02 6 27.2 14 I + 228TH3 G FLAG=K + 228TH G 1738.48 5 100 5 M1+E2 I + 228TH3 G FLAG=K + 228TH L 1928.57 6 3+ + 228TH G 168.42 9 12 3 I + 228TH3 G FLAG=K + 228TH G 389.12 15 42 6 L + 228TH3 G FLAG=M + 228TH G 584.7 3 30 10 & + 228TH3 G FLAG=IKP + 228TH G 1741.74 21 43 12 + 228TH G 1870.81 9 100 6 (M1+E2) + 228TH L 1937.16 9 2+,3,4+ + 228TH G 397.94 10 100 11 L + 228TH3 G FLAG=M + 228TH G 1062.55 15 37 11 L + 228TH3 G FLAG=M + 228TH G 1750.54 20 30 3 L + 228TH3 G FLAG=M + 228TH G 1879.6 3 4.8 18 L + 228TH3 G FLAG=M + 228TH L 1944.895 11 3+ + 228TH G 184.61 5 1.7 2 (M1) 3.45 I + 228TH3 G FLAG=K + 228TH G 220.61 2 5.2 3 (M1) 2.10 I + 228TH3 G FLAG=K + 228TH G 299.10 10 1.79 21 M1 0.90 I + 228TH3 G FLAG=K + 228TH G 306.61 2 8.3 4 M1 0.84 I + 228TH3 G FLAG=K + 228TH G 512.79 11 5.5 6 I + 228TH3 G FLAG=K + 228TH G 718.31 2 26.2 17 (E1) + 228TH G 776.52 3 32 3 + 228TH G 791.44 9 15 2 (M1) 0.0661 @ + 228TH G 853.97 8 3.4 3 I + 228TH3 G FLAG=K + 228TH G 922.5 2 9.4 5 I + 228TH3 G FLAG=K + 228TH G 928.4 2 3.7 3 I + 228TH3 G FLAG=K + 228TH G 975.98 5 56 3 M1 0.0381 + 228TH3 G FL=968.968 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1070.40 7 5.0 3 I + 228TH3 G FLAG=K + 228TH G 1549.3 2 5.0 8 I + 228TH3 G FLAG=K + 228TH G 1758.11 5 37.7 20 E2+M1 -9 1 + 228TH G 1887.12 5 100 5 E2+M1 -9.1 9 + 228TH L 1958.72 22 2+ + 228TH G 1772.2 3 100 28 L + 228TH3 G FLAG=M + 228TH G 1958.4 3 83 28 L + 228TH3 G FLAG=M + 228TH L 1964.98 7 2+,3,4+ + 228TH G 548.74 11 46 LT I RI=DRI=RI/2 assumed + 228TH3 G FLAG=K + 228TH G 1778.0 6 6 2 I + 228TH3 G FLAG=K + 228TH G 1907.13 11 100 9 I + 228TH3 G FLAG=K + 228TH G 1965.22 12 43 4 & + 228TH3 G FLAG=K + 228TH L 1974.20 11 3-,4+ + 228TH G 1455.0 2 87 5 I + 228TH3 G FLAG=K + 228TH G 1578.2 2 100 10 I + 228TH3 G FLAG=K + 228TH G 1787.2 2 28 3 I + 228TH3 G FLAG=K + 228TH G 1916.6 3 11.3 23 I + 228TH3 G FLAG=K + 228TH L 1981.97 6 2+,3,4+ + 228TH G 1013.54 13 32 4 & + 228TH3 G FLAG=IK + 228TH G 1795.15 6 100 6 I + 228TH3 G FLAG=K + 228TH G 1924.2 2 15.1 17 I + 228TH3 G FLAG=K + 228TH L 1987.46 10 4+ + 228TH G 1017.92 20 29 7 L + 228TH3 G FL=968.968$ FLAG=M FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1609.41 15 39 8 L + 228TH3 G FLAG=M + 228TH G 1800.86 20 22 4 L + 228TH3 G FLAG=M + 228TH G 1929.78 20 100 11 L + 228TH3 G FLAG=M + 228TH L 1988.1 6 16+ A + 228TH G 388.6 3 G + 228TH L 2010.11 5 2+,3,(4+) + 228TH G 214.85 10 49 7 L ? UNCERTAIN GAMMA IS IGNORED + 228TH3 G FL=1795.90$ FLAG=M FINAL LEVEL FOUND + 228TH G 372.57 20 11 3 L ? UNCERTAIN GAMMA IS IGNORED + 228TH3 G FL=1638.284$ FLAG=MB FINAL LEVEL FOUND + 228TH G 887.33 10 46 5 L + 228TH3 G FLAG=M + 228TH G 919.01 13 47 6 + 228TH G 1040.92 15 75 15 L + 228TH3 G FLAG=M + 228TH G 1823.21 10 65 6 + 228TH G 1952.37 10 100 7 + 228TH L 2013.6 3 2+,3,4+ + 228TH G 1826.7 3 100 38 L + 228TH3 G FLAG=M + 228TH G 1955.9 5 38 14 L + 228TH3 G FLAG=M + 228TH L 2016.76 10 (2-,3-,4-) + 228TH G 1620.67 10 100 (M1+E2) I + 228TH3 G FLAG=K + 228TH L 2022.84 8 + 228TH G 1053.09 20 220 68 L ? UNCERTAIN GAMMA IS IGNORED + 228TH3 G FL=968.968$ FLAG=MB FINAL LEVEL FOUND + 228TH G 1148.16 14 100 20 + 228TH G 1965.22 12 143 14 & + 228TH3 G FLAG=M + 228TH L 2029.84 16 1,2+ + 228TH G 939.87 15 200 70 L ? UNCERTAIN GAMMA IS IGNORED + 228TH3 G FL=1091.017$ FLAG=MB FINAL LEVEL FOUND + 228TH G 1013.58 20 100 28 L + 228TH3 G FLAG=M + 228TH G 1971.9 3 78 17 L + 228TH3 G FLAG=M + 228TH G 2029.4 5 39 11 L + 228TH3 G FLAG=M + 228TH L 2036.99 17 2+,3,4+ + 228TH G 1850.13 20 100 18 L + 228TH3 G FLAG=M + 228TH G 1979.3 3 41 11 L + 228TH3 G FLAG=M + 228TH L 2123.1 3 (2+) + 228TH G 1795.1 5 100 38 L + 228TH3 G FLAG=M + 228TH G 1936.3 3 100 24 L + 228TH3 G FLAG=M + 228TH L 2209.7 6 17- B + 228TH G 371.4 3 [E2] G + 228TH L 2407.9 7 18+ A + 228TH G 419.8 3 [E2] G + 228THF G FL=1988.1 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + + + +MASS NUMBER= 228 + +OPTIONS: RECOIL= T ALL= T + DEG=1 keV + DCC(theory)= 0.000 + +Program GTOL Version 7.2h as of 24-May-2013 (Double precision, localized) + + 228TH 228AC B- DECAY 1987DA28 97NDS 199704 + 228TH G 56.96 5 0.019 4 UNPLACED GAMMA IGNORED + 228TH G 137.91 5 0.024 5 M1 7.90 UNPLACED GAMMA IGNORED + 228TH G 466.40 10 0.029 3 UNPLACED GAMMA IGNORED + 228TH G 634.18 10 0.0106 21 UNPLACED GAMMA IGNORED + 228TH G 853.17 10 0.0088 18 U UNPLACED GAMMA IGNORED + 228TH G 1337.33 20 0.0049 15 UNPLACED GAMMA IGNORED + 228TH G 1378.23 10 0.0059 18 UNPLACED GAMMA IGNORED + 228TH G 1385.39 10 0.0106 21 UNPLACED GAMMA IGNORED + 228TH G 1434.22 15 0.0080 23 UNPLACED GAMMA IGNORED + 228TH G 1438.01 10 0.0059 15 UNPLACED GAMMA IGNORED + 228TH G 1480.37 15 0.016 3 UNPLACED GAMMA IGNORED + 228TH G 1529.05 10 0.057 6 UNPLACED GAMMA IGNORED + 228TH G 1671.64 15 0.0041 13 UNPLACED GAMMA IGNORED + 228TH G 1684.01 20 0.015 5 UNPLACED GAMMA IGNORED + 228TH G 1721.4 3 0.0057 21 UNPLACED GAMMA IGNORED + 228TH G 1745.28 20 0.0065 8 UNPLACED GAMMA IGNORED + 228TH G 1784.4 3 0.0059 10 UNPLACED GAMMA IGNORED + 228TH G 1787.3 5 0.0013 5 UNPLACED GAMMA IGNORED + 228TH G 1915.9 4 0.0008 3 UNPLACED GAMMA IGNORED + 228TH G 1919.5 3 0.0021 5 UNPLACED GAMMA IGNORED + 228TH G 1944.20 20 0.0021 5 UNPLACED GAMMA IGNORED + 228TH G 2000.9 5 0.0010 3 UNPLACED GAMMA IGNORED + 228TH L 0.0 0+ A + 228TH L 57.759 4 2+ A + 228TH G 57.766 5 0.47 3 E2 156 A + 228TH3 G FLAG=H + 228THS G LC=114$ MC=31.1$ NC+=11.4 + 228TH L 186.823 4 4+ A + 228TH G 129.065 1 2.42 9 E2 3.81 A + 228TH3 G FLAG=E + 228THS G KC=0.269$ LC=2.58$ MC=0.707$ NC+=0.263 + 228TH L 328.003 4 1- B + 228TH G 270.245 2 3.46 6 E1 0.0474 A + 228TH3 G FLAG=E + 228THS G KC=0.0379$ LC=0.00721$ MC=0.00173$ NC+=0.00061 + 228TH G 328.000 6 2.95 12 E1 0.0308 H + 228THS G KC=0.0247$ LC=0.00458$ MC=0.00110$ NC+=0.00039 + 228TH L 378.179 10 6+ A + 228TH G 191.353 10 0.123 8 E2 0.791 H + 228THS G KC=0.174$ LC=0.450$ MC=0.123$ NC+=0.0454 + 228TH L 396.078 5 3- B + 228TH G 209.253 6 3.89 7 E1 0.086 E + 228THS G KC=0.0678$ LC=0.0135$ MC=0.00323$ NC+=0.00114 + 228TH G 338.320 3 11.27 19 E1 0.0288 A + 228TH3 G FLAG=D + 228THS G KC=0.0231$ LC=0.00426$ MC=0.00102$ NC+=0.00036 + 228TH L 519.192 6 5- B + 228TH G 141.02 3 0.050 8 E1 0.220 J + 228THS G KC=0.171$ LC=0.0366$ MC=0.0088$ NC+=0.00313 + 228TH G 332.370 4 0.40 4 E1 0.0299 A + 228TH3 G FLAG=EJ + 228THS G KC=0.0240$ LC=0.00444$ MC=0.00106$ NC+=0.00038 + 228TH L 831.823 10 0+ C + 228TH G 503.823 13 0.182 12 (E1) 0.0125 A + 228TH3 G FLAG=G + 228THS G KC=0.0101$ LC=0.00178 + 228TH G 774.1 2 0.06 AP [E2] 0.0167 + 228THS G KC=0.0122$ LC=0.00339 + 228TH L 874.473 18 2+ C + 228TH G 478.33 5 0.209 15 E1 0.0139 + 228THS G KC=0.0112$ LC=0.00199$ MC=0.00047$ NC+=0.00017 + 228TH G 546.47 5 0.201 13 [E1] 0.0106 + 228THS G KC=0.0086$ LC=0.00151 + 228TH G 688.10 5 0.067 5 [E2] 0.0212 & + 228TH2 G FL=186.823$ FLAG=B FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.0151$ LC=0.00464 + 228TH G 816.71 10 0.030 3 [M1,E2] 0.038 23 + 228THS G KC=0.030 19$ LC=0.006 3 + 228TH G 874.44 7 0.047 10 [E2] 0.0131 A + 228THS G KC=0.0098$ LC=0.00249 + 228TH L 938.58 7 0+ D + 228TH G 610.64 10 0.023 5 [E1] + 228TH G 880.76 10 0.0062 18 [E2] 0.0129 + 228THS G KC=0.0096$ LC=0.00244 + 228TH L 944.196 13 1,2+ + 228TH G 616.22 3 0.080 5 A + 228TH G 944.196 14 0.095 8 A + 228TH L 968.369 20 3- D + 228TH G 449.15 5 0.048 5 [E2] 0.0563 A + 228THS G KC=0.0335$ LC=0.0168$ MC=0.00439$ NC+=0.00162 + 228TH G 572.14 8 0.150 16 [M1,E2] 0.09 7 A + 228THS G KC=0.07 6$ LC=0.016 8 + 228TH G 640.34 3 0.054 5 [E2] 0.0247 A + 228THS G KC=0.0172$ LC=0.00567 + 228TH L 968.968 5 2+ E + 228TH G 782.142 5 0.485 19 [E2] 0.0163 A + 228TH3 G FLAG=E + 228THS G KC=0.0119$ LC=0.00330 + 228TH G 911.204 4 25.8 4 E2 0.0121 A + 228TH3 G FLAG=D + 228THS G KC=0.0091$ LC=0.00225 + 228TH G 968.971 17 15.8 3 E2 0.0107 A + 228TH3 G FLAG=D + 228THS G KC=0.00815$ LC=0.00194 + 228TH L 979.499 14 2+ + 228TH G 583.41 5 0.111 10 [E1] 0.0094 + 228THS G KC=0.00761$ LC=0.00132 + 228TH G 651.51 3 0.090 8 [E1] 0.0076 A + 228THS G KC=0.00617$ LC=0.00106 + 228TH G 792.8 0.08 AP [E2] 0.0159 +- 1.00 keV unc. assigned to energy + 228THS G KC=0.0116$ LC=0.00319 + 228TH G 921.98 10 0.0147 21 [M1,E2] 0.028 17 & + 228THS G KC=0.022 14$ LC=0.0044 22 + 228TH G 979.48 10 0.026 3 [E2] 0.0105 + 228THS G KC=0.00799$ LC=0.00189 + 228TH L 1016.406 21 2+,3-,4+ + 228TH G 620.38 5 0.080 5 + 228TH G 688.10 5 0.067 5 & + 228TH2 G FL=328.003 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 958.61 4 0.28 4 A + 228TH3 G FLAG=H + 228TH G 1016.44 15 0.019 3 & + 228TH L 1022.527 6 (3)+ E + 228TH G 835.710 6 1.61 6 E2 0.0143 A + 228TH3 G FLAG=EJ + 228THS G KC=0.0106$ LC=0.00279 + 228TH G 964.766 10 4.99 9 E2+M1 -7.2 10 0.0108 A + 228TH3 G FLAG=E + 228THS G KC=0.00821$ LC=0.00196 + 228TH L 1059.93 3 4- + 228TH G 540.76 10 0.026 3 [M1,E2] 0.11 8 + 228THS G KC=0.08 6$ LC=0.018 9 + 228TH G 663.82 10 0.028 6 (M1+E2) 0.06 4 J + 228THS G KC=0.05 4$ LC=0.010 6 + 228TH G 873.17 15 0.031 6 [E1] 0.00441 + 228THS G KC=0.00361$ LC=0.00060 + 228TH L 1091.017 8 4+ E + 228TH G 904.20 4 0.77 3 E2 0.0123 A + 228TH3 G FLAG=FJ + 228THS G KC=0.0092$ LC=0.00229 + 228TH G 1033.248 9 0.201 13 E2 0.0095 A + 228TH3 G FLAG=J + 228THS G KC=0.00727$ LC=0.00167 + 228TH L 1122.951 6 2- F + 228TH G 100.41 3 0.093 13 (E1+M2) 0.23 AP 3.2 AP + 228THS G LC=2.4$ MC=0.64$ NC+=0.25 + 228TH G 153.977 10 0.722 21 E1 0.178 E + 228TH3 G FL=968.968 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.139$ LC=0.0292$ MC=0.00703$ NC+=0.00250 + 228TH G 726.863 15 0.62 8 (E2) 0.0189 + 228THS G KC=0.0136$ LC=0.00400 + 228TH G 794.947 5 4.25 7 E2+M1 -4.4 10 0.0182 15 A + 228TH3 G FLAG=DK + 228THS G KC=0.0136 13$ LC=0.00349 20 + 228TH G 1065.18 4 0.132 10 A + 228TH L 1153.467 10 2+ 0.29 NS 2 + 228TH G 173.964 13 0.035 5 M1+E2 1.2 +11-6 2.3 18 A + 228THS G KC=1.5 10$ LC=0.66 4$ MC=0.171 22$ NC+=0.063 5 + 228TH G 184.54 2 0.070 8 E0+M1 63 8 4.5 8 + 228TH3 G FL=968.968 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=53 7$ LC=10.2 13$ MC=0.126$ NC+=0.0462 + 228TH G 278.95 5 0.160 21 (M1,E2) 0.7 5 @ + 228TH3 G FL=874.473$ FLAG=N FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.48 39$ LC=0.130 35$ MC=0.033 7$ NC+=0.0119 24 + 228TH G 321.646 8 0.226 11 [E2] 0.140 A + 228TH3 G FLAG=D + 228THS G KC=0.0643$ LC=0.0550$ MC=0.0147$ NC+=0.00544 + 228TH G 1095.679 20 0.129 10 [M1,E2] 0.018 10 A + 228TH G 1153.52 4 0.139 10 A + 228TH L 1168.375 5 3- F + 228TH G 77.34 3 0.026 5 [E1] 0.235 + 228THS G LC=0.177$ MC=0.0431$ NC+=0.0150 + 228TH G 145.849 10 0.158 8 E1 0.203 H + 228TH3 G FLAG=J + 228THS G KC=0.158$ LC=0.0336$ MC=0.00809$ NC+=0.00287 + 228TH G 199.407 10 0.315 5 E1 0.096 H + 228TH3 G FLAG=J + 228THS G KC=0.0758$ LC=0.0152$ MC=0.00365$ NC+=0.00129 + 228TH G 648.84 10 0.040 4 [E2] 0.0240 & + 228TH2 G FL=519.192 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.0168$ LC=0.00546 + 228TH G 772.291 5 1.49 3 E2+M1 -3.4 +8-27 0.021 3 A + 228TH3 G FLAG=EK + 228THS G KC=0.0157 24$ LC=0.0040 4 + 228TH G 840.377 7 0.91 4 E2 0.0142 A + 228TH3 G FLAG=EJ + 228THS G KC=0.0105$ LC=0.00275 + 228TH G 1110.610 10 0.285 23 E1 @ + 228TH3 G FLAG=AJN + 228TH L 1174.508 18 (5+) E + 228TH G 987.71 20 0.077 13 [M1,E2] 0.024 14 + 228THS G KC=0.019 11$ LC=0.0037 18 + 228TH L 1175.39 5 2+ + 228TH G 231.42 10 0.025 4 [D,E2] 1.0 9 + 228TH G 988.63 20 0.077 13 [E2] 0.0103 + 228TH G 1117.63 10 0.054 8 + 228TH G 1175.31 10 0.024 3 + 228TH L 1226.565 7 (4)- F + 228TH G 135.54 5 0.018 4 E1 0.242 J + 228THS G KC=0.188$ LC=0.0406$ MC=0.0098$ NC+=0.00348 + 228TH G 204.026 10 0.112 15 E1 0.091 H + 228THS G KC=0.0719$ LC=0.0143$ MC=0.00344$ NC+=0.00122 + 228TH G 707.41 5 0.155 15 (E2) 0.0200 H + 228TH3 G FLAG=J + 228THS G KC=0.0143$ LC=0.00711 + 228TH G 830.486 8 0.540 21 E2(+M1) -7.7 9 0.0152 2 A + 228TH3 G FLAG=FJK + 228THS G KC=0.0113 2 $ LC=0.00293 3 + 228TH G 1039.65 15 0.044 9 + 228TH L 1297.423 10 (5)- F + 228TH G 778.23 0.022 6 [M1,E2] 0.04 3 S +- 1.00 keV unc. assigned to energy + 228TH3 G FLAG=T + 228THS G KC=0.034 22$ LC=0.007 4 + 228TH G 901.23 15 0.016 3 [E2] 0.0123 + 228THS G KC=0.00926$ LC=0.00231 + 228TH G 1110.610 10 0.019 10 E1 @ + 228TH3 G FLAG=JN + 228TH L 1344.078 11 3- + 228TH G 168.65 10 0.010 3 [E1] 0.143 @ + 228TH2 G FLAG=Q + 228THS G KC=0.112$ LC=0.0232$ MC=0.00557$ NC+=0.00197 + 228TH G 824.934 23 0.050 5 [E2] 0.0147 A + 228THS G KC=0.0108$ LC=0.00288 + 228TH G 947.982 11 0.106 8 [M1,E2] 0.026 15 A + 228THS G KC=0.021 12$ LC=0.0041 20 + 228TH G 1016.44 15 0.019 3 & + 228TH G 1157.14 15 0.0070 13 + 228TH G 1286.27 20 0.050 10 + 228TH L 1416.11 6 2+,3- + 228TH G 471.76 15 0.033 3 [D,E2] 0.14 12 + 228TH G 1019.86 10 0.021 4 + 228TH G 1088.18 15 0.0059 13 + 228TH G 1229.40 15 0.0075 23 + 228TH L 1431.979 6 4+ + 228TH G 257.52 10 0.030 3 (M1) 1.36 J + 228THS G KC=1.09$ LC=0.205$ MC=0.0495$ NC+=0.0180 + 228TH G 263.58 10 0.040 4 E1 0.0502 J + 228THS G KC=0.0400$ LC=0.00766$ MC=0.00184$ NC+=0.00065 + 228TH G 278.95 5 0.031 5 [E2] 0.216 @ + 228TH3 G FL=1153.467$ FLAG=N FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.086$ LC=0.096$ MC=0.0257$ NC+=0.0095 + 228TH G 340.96 5 0.369 21 E2+M1 -5.2 18 0.136 23 E + 228TH3 G FLAG=JK + 228THS G KC=0.073 20$ LC=0.046 2$ MC=0.0122 5$ NC+=0.00450 17 + 228TH G 409.462 6 1.92 4 E2+M1 -5.4 8 0.082 4 A + 228TH3 G FLAG=EK + 228THS G KC=0.049 4$ LC=0.0242 5$ MC=0.00631 10$ NC+=0.00233 4 + 228TH G 452.47 10 0.015 5 [E2] 0.0553 + 228THS G KC=0.0330$ LC=0.0164$ MC=0.00429$ NC+=0.00158 + 228TH G 463.004 6 4.40 7 E2 0.0522 A + 228TH3 G FLAG=E + 228THS G KC=0.0316$ LC=0.0152$ MC=0.00397$ NC+=0.00146 + 228TH G 1103.41 10 0.0150 23 [E3] B ? UNCERTAIN GAMMA IS IGNORED + 228TH2 G FL=328.003$ FLAG=P FINAL LEVEL FOUND + 228TH G 1245.05 20 0.095 18 [M1,E2] 0.013 7 L + 228TH G 1374.19 10 0.014 4 + 228TH L 1450.394 10 4- + 228TH G 18.4 0.014 4 [E1] 6.6 0.11 3 S +- 1.00 keV unc. assigned to energy + 228TH G 223.85 10 0.054 5 M1+E2 -0.18 5 1.97 3 J + 228TH3 G FLAG=K + 228THS G KC=1.56 3$ LC=0.302 1$ MC=0.0729 2$ NC+=0.0266 1 + 228TH G 282.00 3 0.072 19 M1+E2 -0.51 12 0.88 7 A + 228TH3 G FLAG=HJK + 228THS G KC=0.69 6$ LC=0.145 6$ MC=0.0355 11$ NC+=0.0129 4 + 228TH G 327.44 0.12 4 [E2] 0.132 S +- 1.00 keV unc. assigned to energy + 228TH3 G FLAG=T + 228THS G KC=0.0621$ LC=0.0515$ MC=0.0137$ NC+=0.00508 + 228TH G 480.94 20 0.023 5 [M2] P + 228TH3 G FL=968.968 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 930.93 10 0.0124 18 & + 228TH G 1054.11 20 0.018 5 + 228TH L 1531.474 6 3+ + 228TH G 99.509 6 1.26 7 M1 4.09 A + 228TH2 G FLAG=H + 228THS G LC=3.07$ MC=0.741$ NC+=0.273 + 228TH G 356.94 10 0.0170 18 [E2] 0.103 + 228THS G KC=0.0523$ LC=0.0374$ MC=0.0099$ NC+=0.00368 + 228TH G 377.99 10 0.025 3 [M1,E2] 0.28 19 + 228THS G KC=0.21 17$ LC=0.051 20$ MC=0.013 5$ NC+=0.0046 16 + 228TH G 440.44 5 0.121 8 M1 0.314 + 228THS G KC=0.252$ LC=0.0471$ MC=0.0113$ NC+=0.00410 + 228TH G 508.959 17 0.45 5 E2(+M1) 1.1 GT 0.08 4 A + 228THS G KC=0.06 3$ LC=0.016 5 + 228TH G 562.500 4 0.87 3 E2+M1 +1.6 6 0.07 3 A + 228TH3 G FLAG=EK + 228THS G KC=0.051 23$ LC=0.013 4 + 228TH G 1135.24 15 0.0098 15 + 228TH G 1344.59 15 0.0090 18 + 228TH L 1539.21 9 2,3,4 + 228TH G 416.30 20 0.0132 21 [E1] 0.0185 + 228THS G KC=0.0149$ LC=0.00268$ MC=0.000640$ NC+=0.000228 + 228TH G 1142.85 15 0.0103 21 + 228TH L 1617.78 7 2+,3,4+ + 228TH G 648.84 10 0.040 4 & + 228TH3 G FL=968.968 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1430.95 10 0.035 7 + 228TH G 1559.85 20 0.020 4 + 228TH L 1638.284 9 2+ G + 228TH G 470.25 20 0.013 3 [E1] 0.0144 + 228THS G KC=0.0116$ LC=0.00206$ MC=0.00049$ NC+=0.00018 + 228TH G 515.06 10 0.049 5 [E1] 0.0120 + 228THS G KC=0.0097$ LC=0.00170 + 228TH G 1309.71 20 0.019 6 + 228TH G 1451.40 15 0.0106 21 + 228TH G 1580.53 3 0.60 4 (M1,E2) A + 228TH3 G FLAG=I + 228TH G 1638.281 10 0.47 3 (E2) A + 228TH3 G FLAG=IJ + 228TH L 1643.125 15 (2-,3-) + 228TH G 474.75 10 0.022 3 [M1,E2] 0.15 11 + 228THS G KC=0.12 9$ LC=0.026 13$ MC=0.006 3$ NC+=0.0023 10 + 228TH G 520.151 16 0.067 5 (M1) 0.201 A + 228THS G KC=0.161$ LC=0.0301 + 228TH G 627.23 20 0.014 3 + 228TH G 674.16 0.109 LE [E1] R +- 1.00 keV unc. assigned to energy + RI=DRI=RI/2 assumed + 228TH3 G FL=968.968 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 674.75 0.109 LE [M1,E2] 0.06 4 R +- 1.00 keV unc. assigned to energy + RI=DRI=RI/2 assumed + 228TH3 G FL=968.369 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.048 32$ LC=0.010 5 + 228TH G 699.08 15 0.037 5 [D,E2] 0.05 4 + 228TH G 1247.08 4 0.50 3 (M1) 0.0201 A + 228TH3 G FLAG=IL + 228TH G 1315.34 10 0.015 3 [M1,E2] 0.012 6 + 228TH L 1645.954 12 3+ + 228TH G 114.56 7 0.0098 21 [M1,E2] 10 4 + 228THS G KC=5.5 52$ LC=3.2 12$ MC=0.9 4$ NC+=0.32 14 + 228TH G 419.42 10 0.021 3 [E1] 0.0182 + 228THS G KC=0.0147$ LC=0.00264$ MC=0.00063$ NC+=0.000225 + 228TH G 492.37 10 0.0235 23 [M1,E2] 0.14 10 + 228THS G KC=0.11 8$ LC=0.024 12$ MC=0.006 3$ NC+=0.0021 10 + 228TH G 523.131 16 0.103 8 [E1] 0.0116 A + 228TH3 G FL=1122.951$ FLAG=B FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.00942$ LC=0.000165 + 228TH G 555.12 10 0.046 5 [M1,E2] 0.10 7 + 228THS G KC=0.08 6$ LC=0.017 9 + 228TH G 623.27 20 0.011 3 [M1,E2] 0.08 5 + 228THS G KC=0.06 4$ LC=0.012 6 + 228TH G 629.40 5 0.045 5 [D,E2] 0.06 6 + 228TH G 666.45 10 0.057 6 [M1,E2] 0.06 4 @ + 228TH3 G FLAG=N + 228THS G KC=0.05 3$ LC=0.010 5 + 228TH G 677.11 10 0.062 5 [M1,E2] 0.06 4 + 228TH3 G FL=968.968 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.05 3$ LC=0.010 5 + 228TH G 1250.04 10 0.062 5 A + 228TH G 1459.138 15 0.83 8 E2 A + 228TH3 G FLAG=IJ + 228TH G 1588.20 3 3.22 8 E2 A + 228TH3 G FLAG=IJ + 228TH L 1682.81 3 2+,3(+),4+ + 228TH G 660.1 3 0.005 AP [M1,E2] 0.06 4 + 228THS G KC=0.05 3$ LC=0.010 5 + 228TH G 1495.910 20 0.86 4 (E2) A + 228TH3 G FLAG=IJ + 228TH G 1625.06 5 0.255 18 A + 228TH L 1683.82 5 (4-) + 228TH G 457.17 15 0.0150 23 [M1,E2] 0.17 12 + 228THS G KC=0.13 10$ LC=0.029 14$ MC=0.007 3$ NC+=0.0026 11 + 228TH G 1164.50 8 0.065 5 (M1+E2) 0.016 9 J + 228TH G 1287.68 20 0.080 15 (M1+E2) 0.012 7 J + 228TH L 1688.394 11 2+,3+ G + 228TH G 42.46 5 0.009 3 [M1] 49 + 228TH G 672.00 15 0.026 8 + 228TH G 813.77 15 0.0070 16 [M1,E2] 0.038 23 + 228THS G KC=0.030 19$ LC=0.006 3 + 228TH G 1501.57 5 0.46 3 G + 228TH G 1630.627 10 1.51 4 (M1,E2) A + 228TH2 G FLAG=I + 228TH L 1724.283 6 2+ + 228TH G 497.49 15 0.0059 18 [M2] 0.608 P + 228THS G KC=0.457$ LC=0.113$ MC=0.0282$ NC+=0.0104 + 228TH G 548.73 15 0.023 3 [M1,E2] 0.10 7 + 228THS G KC=0.08 6$ LC=0.017 9 + 228TH G 570.91 10 0.182 24 (M1) 0.156 G + 228THS G KC=0.125$ LC=0.0234 + 228TH G 701.747 14 0.173 10 (M1) 0.091 A + 228TH3 G FLAG=J + 228THS G KC=0.0726$ LC=0.0135 + 228TH G 755.315 4 1.00 3 M1 0.0747 A + 228TH3 G FLAG=DJ + 228THS G KC=0.0599$ LC=0.0111 + 228TH G 1537.89 10 0.047 5 B + 228TH2 G FL=186.823 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1666.523 13 0.178 13 M1 A + 228TH3 G FLAG=J + 228TH G 1724.21 4 0.029 3 A + 228TH L 1735.450 25 (4+) + 228TH G 1217.03 10 0.021 3 B + 228TH2 G FL=519.192 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1357.78 15 0.020 4 B + 228TH2 G FL=378.179 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1548.65 4 0.038 4 A + 228TH G 1677.67 3 0.054 5 A + 228TH L 1743.89 3 4+ + 228TH G 399.62 10 0.029 3 [E1] 0.0212 + 228THS G KC=0.0162$ LC=0.00293$ MC=0.000701$ NC+=0.000250 + 228TH G 590.4 0.017 3 [E2] 0.0295 S +- 1.00 keV unc. assigned to energy + 228TH3 G FLAG=T + 228THS G KC=0.0200$ LC=0.00716 + 228TH G 684.0 0.019 5 [E1] S +- 1.00 keV unc. assigned to energy + 228TH3 G FLAG=T + 228TH G 1347.50 15 0.015 3 + 228TH G 1365.70 15 0.014 3 M + 228TH G 1415.66 10 0.021 4 [E3] P + 228TH3 G FL=328.003 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1557.11 4 0.178 13 (E2+M1) +1.2 2 A + 228TH3 G FLAG=JK + 228TH G 1686.09 7 0.095 8 (E2) A + 228TH3 G FLAG=J + 228TH L 1758.24 12 2+,3,4+ + 228TH G 326.04 20 0.033 5 [D,E2] 0.4 3 + 228TH G 1571.52 20 0.0057 16 + 228TH G 1700.59 20 0.0101 23 + 228TH L 1760.218 24 2+,3(+) G + 228TH G 737.72 5 0.037 4 [M1,E2] 0.05 3 + 228TH G 791.49 25 0.010 3 [M1,E2] 0.04 3 @ + 228TH3 G FL=968.968$ FLAG=N FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.032 21$ LC=0.007 4 + 228TH G 1573.26 5 0.033 3 (E2) A + 228TH3 G FLAG=J + 228TH G 1702.43 5 0.048 5 A + 228TH L 1795.90 10 3-,4+ + 228TH G 1276.69 10 0.014 3 + 228TH G 1738.22 25 0.018 4 + 228TH L 1797.65 8 2+ + 228TH G 1401.49 10 0.012 3 + 228TH G 1469.71 15 0.020 4 + 228TH G 1740.4 3 0.011 3 + 228TH G 1797.5 5 0.0021 8 + 228TH L 1892.996 17 3+ + 228TH G 666.45 10 0.005 2 [E1] @ + 228TH3 G FLAG=N + 228TH G 692.5 0.0056 7 (M1+E2+E0) 0.24 3 S +- 1.00 keV unc. assigned to energy +***** GAMMA= 692.5 CANNOT BE PLACED FROM LEVEL 1892.996 WITHIN +- 10.0 keV + 228TH3 G FLAG=T + 228TH G 770.04 0.0063 8 [E1] S +- 1.00 keV unc. assigned to energy + 228TH3 G FLAG=T + 228TH G 870.46 4 0.044 4 M1 0.0515 A + 228TH3 G FLAG=J + 228THS G KC=0.0414$ LC=0.00762 + 228TH G 924.03 0.0075 10 [M1,E2] S +- 1.00 keV unc. assigned to energy + 228TH3 G FLAG=T + 228TH G 1706.19 10 0.0085 10 M1+E2 +0.42 4 J + 228TH3 G FLAG=K + 228TH G 1835.43 10 0.038 4 E2+M1 +2.9 3 J + 228TH3 G FLAG=K + 228TH L 1899.95 4 2+ G + 228TH G 877.46 10 0.014 3 [M1,E2] 0.032 19 + 228THS G KC=0.025 15$ LC=0.005 3 + 228TH G 930.93 10 0.0124 18 & + 228TH G 1713.47 20 0.0054 10 + 228TH G 1842.13 10 0.042 4 M1+E2 -0.86 14 J + 228TH3 G FLAG=K + 228TH G 1900.07 20 0.0028 5 + 228TH L 1906.64 10 (2+) + 228TH G 490.33 15 0.0111 23 [D,E2] 0.12 11 + 228TH G 1074.71 15 0.010 3 + 228TH G 1907.18 20 0.0119 10 + 228TH L 1928.57 6 3+ + 228TH G 168.65 10 0.0030 7 [M1,E2] 2.9 16 @ + 228TH2 G FLAG=Q + 228THS G KC=1.9 17$ LC=0.73 6$ MC=0.19 3$ NC+=0.070 10 + 228TH G 389.12 15 0.0103 15 [M1,E2] 0.26 18 + 228TH G 1742.0 3 0.0080 23 + 228TH G 1870.83 10 0.0243 23 (M1+E2) J + 228TH L 1937.16 9 2+,3,4+ + 228TH G 397.94 10 0.027 3 + 228TH G 1062.55 15 0.010 3 + 228TH G 1750.54 20 0.0080 8 + 228TH G 1879.6 3 0.0013 5 + 228TH L 1944.895 11 3+ G + 228TH G 718.48 15 0.019 4 (E1) J + 228TH G 776.56 10 0.019 6 + 228TH G 791.49 25 0.013 3 (M1) 0.0661 @ + 228TH3 G FLAG=N + 228THS G KC=0.0530$ LC=0.0098 + 228TH G 853.17 10 0.0031 4 [M1,E2] 0.034 20 B + 228TH2 G FL=1091.017$ FLAG=U FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.027 17$ LC=0.005 3 + 228TH G 921.98 10 0.0147 21 & + 228TH G 975.96 5 0.050 5 M1 0.0381 J + 228TH3 G FL=968.968 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.0306$ LC=0.00563 + 228TH G 1000.69 15 0.005 + 228TH G 1758.11 10 0.035 4 E2+M1 -9 1 J + 228TH3 G FLAG=K + 228TH G 1887.10 5 0.090 8 E2+M1 -9.1 1 J + 228TH3 G FLAG=K + 228TH L 1958.72 22 2+ + 228TH G 1772.2 3 0.0018 5 + 228TH G 1958.4 3 0.0015 5 + 228TH L 1987.46 10 4+ + 228TH G 1017.92 20 0.0057 13 + 228TH3 G FL=968.968 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1609.41 15 0.0077 15 + 228TH G 1800.86 20 0.0044 8 + 228TH G 1929.78 20 0.0199 21 + 228TH L 2010.11 5 2+,3,(4+) + 228TH G 214.85 10 0.029 4 [D,E2] 1.2 11 + 228TH G 372.57 20 0.0067 15 [D,E2] 0.26 24 + 228TH3 G FL=1638.284 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 887.33 10 0.027 3 + 228TH G 918.97 10 0.027 3 + 228TH G 1040.92 15 0.044 9 + 228TH G 1823.22 10 0.044 4 + 228TH G 1952.33 15 0.059 5 + 228TH L 2013.6 3 2+,3,4+ + 228TH G 1826.7 3 0.0021 8 + 228TH G 1955.9 5 0.0008 3 + 228TH L 2022.84 10 + 228TH G 384.63 20 0.0067 15 [D,E2] 0.24 22 + 228TH G 1053.09 20 0.013 4 B + 228TH3 G FL=968.968 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1148.12 15 0.0059 13 + 228TH G 1190.81 20 0.0062 16 + 228TH G 1965.24 20 0.0204 18 + 228TH L 2029.84 16 1,2+ + 228TH G 939.87 15 0.009 3 B + 228TH3 G FL=1091.017$ FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1013.58 20 0.0046 13 + 228TH G 1971.9 3 0.0036 8 + 228TH G 2029.4 5 0.0018 5 + 228TH L 2036.99 17 2+,3,4+ + 228TH G 1850.13 20 0.0044 8 + 228TH G 1979.3 3 0.0018 5 + 228TH L 2123.1 3 (2+) + 228TH G 1795.1 5 0.0021 8 + 228TH G 1936.3 3 0.0021 5 + + + +MASS NUMBER= 228 + +OPTIONS: RECOIL= T ALL= T + DEG=1 keV + DCC(theory)= 0.000 + +Program GTOL Version 7.2h as of 24-May-2013 (Double precision, localized) + + 228TH 228PA EC DECAY 1995BA42 97NDS 199704 + 228TH G 141.9 1 0.21 3 UNPLACED GAMMA IGNORED + 228TH G 206.30 5 0.50 7 UNPLACED GAMMA IGNORED + 228TH G 216.1 1 1.1 3 UNPLACED GAMMA IGNORED + 228TH G 357.3 1 0.37 4 UNPLACED GAMMA IGNORED + 228TH G 425.4 1 0.41 5 UNPLACED GAMMA IGNORED + 228TH G 443.8 1 0.62 7 UNPLACED GAMMA IGNORED + 228TH G 471.7 2 0.37 9 UNPLACED GAMMA IGNORED + 228TH G 490.7 1 0.82 4 G UNPLACED GAMMA IGNORED + 228TH G 555.7 1 1.5 2 UNPLACED GAMMA IGNORED + 228TH G 621.6 3 1.0 2 G UNPLACED GAMMA IGNORED + 228TH G 796 1 2.0 AP J UNPLACED GAMMA IGNORED + 228TH G 801.2 1 0.46 5 UNPLACED GAMMA IGNORED + 228TH G 895.9 1 1.41 7 UNPLACED GAMMA IGNORED + 228TH G 1017.2 2 0.82 12 G UNPLACED GAMMA IGNORED + 228TH G 1018.9 2 1.3 2 UNPLACED GAMMA IGNORED + 228TH G 1024.4 2 0.43 6 UNPLACED GAMMA IGNORED + 228TH G 1058.5 1 0.66 7 UNPLACED GAMMA IGNORED + 228TH G 1062.4 1 0.57 6 UNPLACED GAMMA IGNORED + 228TH G 1074.7 3 0.42 5 G UNPLACED GAMMA IGNORED + 228TH G 1077.5 3 0.36 5 G UNPLACED GAMMA IGNORED + 228TH G 1103.4 1 0.44 4 UNPLACED GAMMA IGNORED + 228TH G 1175.6 2 0.24 4 G UNPLACED GAMMA IGNORED + 228TH G 1281.7 2 0.29 3 UNPLACED GAMMA IGNORED + 228TH G 1286.3 3 0.39 9 G UNPLACED GAMMA IGNORED + 228TH G 1310.8 1 0.48 5 UNPLACED GAMMA IGNORED + 228TH G 1358.0 2 0.34 5 UNPLACED GAMMA IGNORED + 228TH G 1432 1 1.3 LE @ UNPLACED GAMMA IGNORED + 228TH2 G FLAG=P + 228TH G 1480.4 3 0.77 10 G UNPLACED GAMMA IGNORED + 228TH G 1483.2 3 0.52 7 G UNPLACED GAMMA IGNORED + 228TH G 1486.3 3 0.27 7 G UNPLACED GAMMA IGNORED + 228TH G 1542.8 2 0.28 5 UNPLACED GAMMA IGNORED + 228TH G 1547.2 3 0.54 11 G UNPLACED GAMMA IGNORED + 228TH G 1609.6 1 0.92 7 (M1) UNPLACED GAMMA IGNORED + 228TH G 1677.9 1 0.65 5 UNPLACED GAMMA IGNORED + 228TH G 1746.2 2 0.34 4 UNPLACED GAMMA IGNORED + 228TH G 1752.1 2 0.37 4 G UNPLACED GAMMA IGNORED + 228TH G 1784.4 2 0.62 5 G UNPLACED GAMMA IGNORED + 228TH G 1807.2 1 0.60 5 UNPLACED GAMMA IGNORED + 228TH G 1865.1 1 0.80 4 UNPLACED GAMMA IGNORED + 228TH G 1919.4 2 0.26 3 UNPLACED GAMMA IGNORED + 228TH G 1936.0 2 0.20 3 UNPLACED GAMMA IGNORED + 228TH G 1958.1 2 0.29 3 UNPLACED GAMMA IGNORED + 228TH L 0.0 0+ A + 228TH L 57.76 2+ A + 228TH G 57.76 2 5.5 3 E2 156 + 228THS G LC= 114$ MC= 31.1$ N+= 11.5 + 228TH L 186.82 4+ A + 228TH G 129.06 2 45.7 23 E2 3.81 + 228THS G KC= 0.269 $LC= 2.58$ MC= 0.707$ N+= 0.263 + 228TH L 328.00 1- B + 228TH G 270.25 2 33.9 17 E1 0.0474 + 228THS G KC= 0.0379 $LC=0.00721$ MC=0.00173 $N+=0.00061 $ + 228TH G 328.03 4 30 3 E1 0.0308 G + 228THS G KC=0.0247$ LC=0.00458$ MC=0.00110 $N+=0.00039 $ + 228TH L 378.18 6+ A + 228TH G 191.35 2 4.60 23 E2 0.791 A + 228THS G KC=0.174$ LC=0.450$ MC=0.123$ NC+=0.0454 + 228TH L 396.08 3- B + 228TH G 68.08 0.04 LE [E2] 70.2 N +- 1.00 keV unc. assigned to energy + RI=DRI=RI/2 assumed + 228THS G LC=51.0$ MC=14.0$ NC+=5.16 + 228TH G 209.26 2 26.3 13 E1 0.086 + 228THS G KC=0.0678$ LC=0.0135$ MC=0.00323$ NC+=0.00114 + 228TH G 338.32 2 82 4 E1 0.0288 + 228THS G KC=0.0231$ LC=0.00426$ MC=0.00102$ NC+=0.00036 + 228TH L 519.19 5- B + 228TH G 141.00 2 2.08 10 E1 0.220 K + 228THS G KC=0.171$ LC=0.0366$ MC=0.0088$ NC+=0.00313 + 228TH G 332.37 2 21.0 11 E1 0.0299 K + 228THS G KC=0.0240$ LC=0.00444$ MC=0.00106$ NC+=0.00038 + 228TH L 695.6 7- ? + 228TH L 831.82 0+ C + 228TH G 503.7 2 0.78 8 (E1) 0.0125 A + 228THS G KC=0.0101$ LC=0.00178 + 228TH G 774.06 0.26 AP [E2] 0.0167 N +- 1.00 keV unc. assigned to energy + 228THS G KC=0.0122$ LC=0.00339 + 228TH L 874.47 2+ C + 228TH G 478.45 4 3.17 17 E1 0.0139 K + 228THS G KC=0.0112$ LC=0.00199$ MC=0.00047$ NC+=0.00017 + 228TH G 546.45 2 2.80 14 [E1] 0.0107 + 228THS G KC=0.00864$ LC=0.00151 + 228TH G 688.14 8 1.21 14 [E2] 0.0212 & + 228TH3 G FL=186.82 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.0151$ LC=0.00464 + 228TH G 816.50 12 0.33 4 [M1,E2] 0.038 23 + 228THS G KC=0.030 19$ LC=0.006 3 + 228TH G 874.5 2 0.77 12 [E2] 0.0131 G + 228THS G KC=0.0098$ LC=0.00249 + 228TH L 944.20 1,2+ + 228TH G 616.15 5 1.07 8 + 228TH G 944.31 6 0.98 8 + 228TH L 968.37 3- F + 228TH G 449.23 3 2.45 13 [E2] 0.0563 + 228THS G KC=0.0335$ LC=0.0168$ MC=0.00439$ NC+=0.00162 + 228TH G 572.30 2 5.8 3 [M1,E2] 0.09 7 + 228THS G KC=0.07 6$ LC=0.016 8 + 228TH G 640.33 5 1.53 10 [E2] 0.0247 + 228THS G KC=0.0172$ LC=0.00567 + 228TH L 968.97 2+ G + 228TH G 782.08 3 4.70 23 [E2] 0.0163 + 228THS G KC=0.0119$ LC=0.00330 + 228TH G 911.20 2 247 12 E2+M1 +24 8 0.0121 + 228THS G KC=0.0091$ LC=0.00225 + 228TH G 968.98 2 149 8 E2 0.0107 + 228THS G KC=0.00815$ LC=0.00194 + 228TH L 979.50 2+ D + 228TH G 583.4 1 3.6 3 [E1] 0.0094 I + 228THS G KC=0.00761$ LC=0.00132 + 228TH G 651.40 5 1.59 10 [E1] + 228TH3 G FLAG=G + 228THS G CC=0.00758$ KC=0.00617$ LC=0.00106 + 228TH G 792.68 1.4 AP [E2] 0.0159 G +- 1.00 keV unc. assigned to energy + 228TH3 G FLAG=N + 228THS G KC=0.0116$ LC=0.00319 + 228TH G 921.74 0.30 LT [M1,E2] 0.028 17 G +- 1.00 keV unc. assigned to energy + RI=DRI=RI/2 assumed + 228TH3 G FLAG=N + 228THS G KC=0.022 14$ LC=0.0044 22 + 228TH G 979.4 4 0.5 AP [E2] 0.0105 G + 228THS G KC=0.00799$ LC=0.00180 + 228TH L 1016.41 2+,3-,4+ + 228TH G 620.27 5 1.41 10 G + 228TH G 688.14 8 1.21 14 & + 228TH3 G FL=328.00 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 958.69 11 5.0 6 G + 228TH G 1016.41 0.34 6 G +- 1.00 keV unc. assigned to energy + 228TH3 G FLAG=N + 228TH L 1022.53 (3)+ G + 228TH G 835.65 2 42.7 22 E2 0.0143 + 228THS G KC=0.0106$ LC=0.00279 + 228TH G 964.80 2 122 6 E2+M1 -7.2 10 0.0108 + 228THS G KC=0.00821$ LC=0.00196 + 228TH L 1059.93 4- + 228TH G 540.66 5 0.89 6 [M1,E2] 0.11 8 + 228THS G KC=0.08 6$ LC=0.018 9$ + 228TH G 663.92 8 1.44 11 (M1+E2) 0.06 4 + 228THS G KC=0.05 4$ LC=0.010 6 + 228TH G 873.0 2 1.66 17 [E1] 0.00441 G + 228THS G KC=0.00361$ LC=0.00060 + 228TH L 1091.02 4+ G + 228TH G 694.8 2 0.76 10 [E1] 0.00671 G + 228THS G KC=0.00547$ LC=0.00093 + 228TH G 713.1 3 0.48 11 [E2] 0.0197 I + 228THS G KC=0.0141$ LC=0.00421 + 228TH G 904.19 3 26.5 13 E2 0.0123 + 228THS G KC=0.0092$ LC=0.00229 + 228TH G 1033.27 7 7.6 4 E2 0.0095 + 228TH L 1122.95 2- H + 228TH G 100.42 0.5 LT (E1+M2) 0.23 AP 3.2 AP A +- 1.00 keV unc. assigned to energy + RI=DRI=RI/2 assumed + 228TH3 G FLAG=EN + 228THS G LC=2.4$ MC=0.64$ NC+=0.25 + 228TH G 153.95 2 5.5 3 E1 0.178 K + 228THS G KC=0.139$ LC=0.0292$ MC=0.00703$ NC+=0.00250 + 228TH G 726.90 10 4.4 6 (E2) 0.0189 A + 228THS G KC=0.0136$ LC=0.00400 + 228TH G 794.97 2 34.4 17 E2+M1 -4.4 10 0.0182 15 + 228THS G KC=0.0136 13$ LC=0.00349 20 + 228TH G 1065.21 7 1.03 7 [E1] 0.00311 + 228THS G KC=0.00255$ LC=0.00042 + 228TH L 1153.47 2+ I + 228TH G 174.02 4 0.30 3 M1+E2 1.2 +11-6 2.23 18 A + 228TH2 G FLAG=E + 228THS G KC=1.5 10$ LC=0.66 4$ MC=0.171 22$ NC+=0.063 5 + 228TH G 184.61 5 0.21 3 E0+M1 63 8 @ + 228TH3 G FL=968.97$ FLAG=M FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 278.66 2 0.44 6 (M1+E2) 0.7 5 @ + 228TH3 G FL=874.47$ FLAG=AM FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.5 4$ LC=0.13 4$ MC=0.033 7$ NC+=0.0120 25 + 228TH G 321.71 3 0.67 4 [E2] 0.140 + 228THS G KC=0.0643$ LC=0.0550$ MC=0.0147$ NC+=0.00544 + 228TH G 966.64 0.5 LE [E2] 0.0108 I +- 1.00 keV unc. assigned to energy + RI=DRI=RI/2 assumed + 228TH3 G FLAG=N + 228TH G 1095.74 14 0.32 6 [M1,E2] 0.018 10 + 228TH G 1153.6 3 0.37 8 + 228TH L 1168.38 3- H + 228TH G 77.36 0.44 9 [E1] 0.235 N +- 1.00 keV unc. assigned to energy + 228THS G LC=0.177$ MC=0.0431$ NC+=0.0150 + 228TH G 145.82 2 2.57 13 E1 0.203 K + 228THS G KC=0.158$ LC=0.0336$ MC=0.00809$ NC+=0.00287 + 228TH G 199.40 2 4.65 23 E1 0.096 K + 228THS G KC=0.0758$ LC=0.0152$ MC=0.00365$ NC+=0.00129 + 228TH G 649.12 7 0.97 9 [E2] 0.0240 & + 228THS G KC=0.0168$ LC=0.00546 + 228TH G 772.28 2 25.2 13 E2+M1 -3.4 +8-27 0.021 3 + 228THS G KC=0.0157 24$ LC=0.0040 4 + 228TH G 840.36 4 15.9 8 E2 0.0142 + 228THS G KC=0.0105$ LC=0.00275 + 228TH G 981.5 2 0.76 10 [E1] I + 228THS G CC=0.00358$ KC=0.00294$ LC=0.00049 + 228TH G 1110.55 5 4.7 5 E1 @ + 228THS G CC=0.00289$ KC=0.00237$ LC=0.00039 + 228TH L 1174.51 (5+) G + 228TH G 987.92 10 4.31 22 [M1,E2] 0.024 14 + 228THS G KC=0.019 11$ LC=0.0037 18 + 228TH L 1175.4 2+ ? + 228TH L 1200.5 (3)+ I + 228TH G 178.14 7 0.2 LE E0 1.2 RI=DRI=RI/2 assumed + 228TH G 231.50 5 0.92 5 [M1,E2] 1.1 8 + 228THS G KC=0.8 7$ LC=0.24 4$ MC=0.061 6$ NC+=0.0223 20 + 228TH G 1013.54 13 0.38 5 [M1,E2] 0.022 13 & + 228THS G KC=0.018 11$ LC=0.0034 17 + 228TH G 1142.78 0.10 3 [M1,E2] 0.017 9 +- 1.00 keV unc. assigned to energy + 228THS G KC=0.013 8$ LC=0.0025 12 + 228TH L 1226.57 (4)- H + 228TH G 135.51 2 1.04 6 E1 0.242 K + 228THS G KC=0.188$ LC=0.0406$ MC=0.0098$ NC+=0.00348 + 228TH G 204.05 2 6.0 3 E1 0.091 K + 228THS G KC=0.0719$ LC=0.0143$ MC=0.00344$ NC+=0.00122 + 228TH G 707.40 3 7.9 4 (E2) 0.0200 + 228THS G KC=0.0143 $ LC=0.00431 + 228TH G 830.48 3 29.0 15 E2(+M1) -7.7 9 0.0152 2 + 228THS G KC=0.0113 2 $ LC=0.00293 3 + 228TH G 1039.87 6 2.92 15 + 228TH L 1297.42 (5)- H + 228TH G 601.7 3 0.30 5 [E2] 0.0283 & ? UNCERTAIN GAMMA IS IGNORED + 228TH G 778.1 2 2.7 3 [M1,E2] 0.04 3 G + 228THS G KC=0.034 22$ LC=0.007 4 + 228TH G 901.4 3 2.0 3 [E2] 0.0123 G + 228THS G KC=0.0093$ LC=0.00231 + 228TH G 1110.55 5 2.4 2 E1 @ + 228TH3 G FLAG=I + 228TH L 1344.08 3- J ? + 228TH G 948 0.2 AP +- 1.00 keV unc. assigned to energy + 228TH L 1416.1 2+,3- ? + 228TH L 1431.98 4+ + 228TH G 257.49 2 1.40 7 (M1) 1.36 K + 228THS G KC=1.09$ LC=0.205$ MC=0.0495$ NC+=0.0180 + 228TH G 263.62 2 2.17 11 E1 0.0502 K + 228THS G KC=0.0400$ LC=0.00766$ MC=0.00184$ NC+=0.00065 + 228TH G 278.66 2 1.61 21 [E2] 0.216 @ + 228TH3 G FL=1153.47$ FLAG=M FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.086$ LC=0.095$ MC=0.0257$ NC+=0.0095 + 228TH G 340.98 2 20.5 10 E2+M1 -5.2 18 0.136 23 + 228THS G KC=0.073 20$ LC=0.046 2$ MC=0.0122 5$ NC+=0.00450 17 + 228TH G 409.45 2 100 5 E2+M1 -5.4 8 0.082 4 + 228THS G KC= 0.049 4$ LC=0.0242 5$ MC=0.00631 10$ N+=0.00233 4 + 228TH G 452.52 6 1.02 8 [E2] 0.0553 + 228THS G KC=0.0330$ LC=0.0164$ MC=0.00429$ NC+=0.00158 + 228TH G 463.02 2 224 11 E2 0.0522 + 228THS G KC= 0.0316 $LC=0.0152 $MC=0.00397 $N+=0.00146 $ + 228TH G 1053.80 0.5 AP I +- 1.00 keV unc. assigned to energy + 228TH G 1245.17 6 5.6 3 [M1,E2] 0.013 7 G + 228THS G KC=0.011 6$ LC=0.0020 10 + 228TH G 1374.26 7 1.0 AP + 228TH L 1450.39 4- + 228TH G 18.41 3.7 5 [E1] 6.6 28 3 +- 1.00 keV unc. assigned to energy + 228THS G L/T=0.59$ M/T=0.31 + 228TH G 153.02 2 1.11 6 M1+E2 0.60 8 4.8 2 + 228THS G KC=3.5 2$ LC=0.97 2$ MC=0.245 6$ NC+=0.090 2 + 228TH G 223.80 2 13.3 7 M1+E2 -0.18 5 1.97 3 + 228THS G KC= 1.56 3$ LC= 0.302 1$ MC= 0.0729 2$ N+= 0.0266 1$ + 228TH G 275.85 4 0.82 7 [E1] 0.0453 + 228THS G KC=0.0362$ LC=0.00687$ MC=0.00165$ NC+=0.00058 + 228TH G 282.01 2 18.6 9 M1+E2 -0.51 12 0.88 7 + 228THS G KC=0.69 6$ LC= 0.145 6$ MC=0.0355 11$ N+=0.0129 4 + 228TH G 327.45 4 31 3 [E2] 0.132 G + 228THS G KC=0.0621$ LC=0.0515$ MC=0.0137$ NC+=0.00508 + 228TH G 359.36 3 1.30 7 [E1] 0.0252 + 228THS G KC=0.0203$ LC=0.00372$ MC=0.00089$ NC+=0.00032 + 228TH G 390.45 5 1.11 6 [M1,E2] 0.26 18 + 228THS G KC=0.20 16$ LC=0.046 19$ MC=0.011 5$ NC+=0.0042 16 + 228TH G 427.90 3 1.24 8 [E1] 0.0174 + 228THS G KC=0.0141$ LC=0.00252$ MC=0.00060$ NC+=0.00022 + 228TH G 434.01 3 1.73 10 [D,E2] 0.14 13 + 228TH G 482.03 5 1.84 13 [M1,E2] 0.15 10 + 228THS G KC=0.11 9$ LC=0.025 12$ MC=0.006 3$ NC+=0.0022 10 + 228TH G 1054.23 6 3.3 3 [M1,E2] 0.020 11 + 228THS G KC=0.016 9$ LC=0.0031 15 + 228TH L 1531.47 3+ + 228TH G 99.47 6 1.8 3 M1 4.09 + 228THS G LC=3.07$ MC=0.741$ NC+=0.273 + 228TH G 356.96 0.024 5 [E2] 0.103 N +- 1.00 keV unc. assigned to energy + 228TH G 378.01 0.036 7 [M1,E2] 0.28 19 N +- 1.00 keV unc. assigned to energy + 228THS G KC=0.21 17$ LC=0.051 20$ MC=0.013 5$ NC+=0.0046 16 + 228TH G 440.4 4 0.15 7 M1 0.314 A + 228THS G KC=0.252$ LC=0.0471$ MC=0.0113$ NC+=0.00410 + 228TH G 509.13 8 1.2 2 E2(+M1) 1.1 GT 0.08 4 A + 228TH3 G FLAG=EG + 228THS G KC=0.06 3$ LC=0.016 5 + 228TH G 562.50 4 1.44 9 E2+M1 +1.6 6 0.07 3 + 228THS G KC=0.051 24$ LC=0.013 4 + 228TH G 1135.39 0.014 4 N +- 1.00 keV unc. assigned to energy + 228TH G 1344.65 0.013 4 N +- 1.00 keV unc. assigned to energy + 228TH L 1539.2 2,3,4 + 228TH L 1580.9 (2-) + 228TH G 354.2 2 0.29 5 [E2] 0.106 & + 228THS G KC=0.0531$ LC=0.0385$ MC=0.0102$ NC+=0.00378 + 228TH G 601.7 3 0.30 5 [E1] 0.0088 & + 228THS G KC=0.00718$ LC=0.00124 + 228TH G 1184.71 9 0.47 4 (M1+E2) 0.015 8 + 228THS G KC=0.012 7$ LC=0.0023 11 + 228TH G 1252.98 10 0.68 6 (M1+E2) 0.013 7 + 228THS G KC=0.011 6$ LC=0.0020 10 + 228TH G 1523.4 2 0.60 6 & + 228THS G CC=0.00139$ KC=0.00139 + 228TH L 1588.3 4- + 228TH G 56.86 3 1.06 5 E1 0.533 K + 228THS G LC=0.400$ MC=0.098$ NC+=0.0339 + 228TH G 137.95 2 6.6 3 M1 7.89 + 228THS G KC=6.30$ LC=1.20$ MC=0.289$ NC+=0.106 + 228TH G 156.34 2 1.36 7 E1 0.172 K + 228THS G KC=0.134$ LC=0.0281$ MC=0.00676$ NC+=0.00240 + 228TH G 420.03 8 0.68 5 [M1,E2] 0.21 15 + 228THS G KC=0.16 13$ LC=0.037 17$ MC=0.009 4$ NC+=0.0034 14 + 228TH L 1617.8 2+,3,4+ + 228TH G 649.12 7 0.97 9 & + 228TH3 G FL=968.97$ FLAG=G FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH G 1432 1 0.60 14 @ + 228TH2 G FLAG=P + 228TH G 1559.7 2 0.34 5 G + 228TH L 1638.3 2+ + 228TH G 469.9 5 0.14 8 [E1] 0.0144 + 228THS G KC=0.0116$ LC=0.00206$ MC=0.00049$ NC+=0.00018 + 228TH G 515.20 11 0.62 9 [E1] 0.0120 ? UNCERTAIN GAMMA IS IGNORED + 228THS G KC=0.0097$ LC=0.00170 + 228TH G 1310.26 0.07 3 G +- 1.00 keV unc. assigned to energy + 228TH G 1451.45 0.039 9 [E2] N +- 1.00 keV unc. assigned to energy + 228TH G 1580.5 3 2.18 14 (M1,E2) G + 228TH G 1638.30 7 1.98 10 (E2) + 228TH L 1643.1 (2-,3-) + 228TH G 475.1 3 0.7 2 [M1,E2] 0.15 11 + 228THS G KC=0.12 9$ LC=0.026 13$ MC=0.006 3$ NC+=0.0023 10 + 228TH G 520.17 8 0.92 10 (M1) 0.201 A + 228THS G KC=0.161$ LC=0.0301 + 228TH G 626.72 0.23 5 G +- 1.00 keV unc. assigned to energy + 228TH3 G FLAG=N + 228TH G 674.16 2.82 LE [E1] G +- 1.00 keV unc. assigned to energy + RI=DRI=RI/2 assumed + 228TH3 G FLAG=R + 228TH G 674.75 2.82 LE [M1,E2] 0.06 4 G +- 1.00 keV unc. assigned to energy + RI=DRI=RI/2 assumed + 228TH3 G FLAG=R + 228TH G 698.93 0.61 9 [D,E2] 0.05 4 G +- 1.00 keV unc. assigned to energy + 228TH3 G FLAG=N + 228TH G 1247.07 5 8.2 4 (M1) 0.0201 G + 228TH2 G FLAG=A + 228THS G KC=0.0162 + 228TH G 1315.2 2 0.20 5 [M1,E2] 0.012 6 + 228THS G KC=0.009 5$ LC=0.0018 8 + 228TH L 1646.0 3+ + 228TH G 114.49 10 0.10 2 [M1,E2] 10 4 + 228THS G KC=5.5 52$ LC=3.2 12$ MC=0.9 4$ NC+=0.32 14 + 228TH G 419.39 0.24 3 [E1] 0.0182 N +- 1.00 keV unc. assigned to energy + 228TH3 G FLAG=G + 228THS G KC=0.0147$ LC=0.00264$ MC=0.00063$ NC+=0.000225 + 228TH G 492.22 10 0.28 3 [M1,E2] 0.14 10 + 228THS G KC=0.11 8$ LC=0.024 12$ MC=0.006 3$ NC+=0.0021 10 + 228TH G 523.16 11 1.40 10 [E1] 0.0116 + 228TH2 G FL=1122.95 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.0094$ LC=0.00165 + 228TH G 554.6 3 0.48 11 [M1,E2] 0.10 7 G + 228THS G KC=0.08 6$ LC=0.017 9 + 228TH G 623.7 2 0.36 6 [M1,E2] 0.08 5 & + 228TH2 G FLAG=GQ + 228THS G KC=0.06 4$ LC=0.012 6 + 228TH G 629.4 2 0.37 6 [D,E2] 0.06 6 + 228TH G 666.47 4 0.66 7 [M1,E2] 0.06 4 @ + 228TH2 G FLAG=M + 228THS G KC=0.05 3$ LC=0.010 5 + 228TH G 676.9 2 0.89 15 [M1,E2] 0.06 4 G + 228THS G KC=0.05 3$ LC=0.010 5 + 228TH G 1249.7 2 0.73 10 G + 228TH G 1459.2 2 8.6 5 E2 G + 228TH2 G FLAG=I + 228TH G 1588.15 5 37.2 19 E2 + 228TH L 1682.8 2+,3(+),4+ + 228TH G 660.28 0.02 AP [M1,E2] 0.06 4 N +- 1.00 keV unc. assigned to energy + 228THS G KC=0.05 3$ LC=0.010 5 + 228TH G 1496.15 6 2.74 14 (E2) + 228TH G 1625.0 2 0.70 14 + 228TH L 1683.8 (4-) + 228TH G 457.38 6 0.30 3 [M1,E2] 0.17 12 + 228THS G KC=0.13 10$ LC=0.029 14$ MC=0.007 3$ NC+=0.0026 11 + 228TH G 623.7 2 0.36 6 [M1,E2] 0.07 5 & + 228TH2 G FLAG=GQ + 228THS G KC=0.06 4$ LC=0.012 7 + 228TH G 1164.58 7 1.32 7 (M1+E2) 0.016 9 + 228THS G KC=0.013 7$ LC=0.0024 12 + 228TH G 1287.79 8 1.56 11 (M1+E2) 0.012 7 G + 228THS G KC=0.010 5$ LC=0.0019 9 + 228TH L 1688.4 2+,3+ + 228TH G 42.44 0.016 6 [M1] 49 N +- 1.00 keV unc. assigned to energy + 228THS G LC=37.1$ MC=8.95 + 228TH G 671.99 0.045 14 N +- 1.00 keV unc. assigned to energy + 228TH G 813.94 0.012 3 [M1,E2] 0.038 23 N +- 1.00 keV unc. assigned to energy + 228THS G KC=0.030 19$ LC=0.006 3 + 228TH G 1501.5 2 0.74 6 G + 228TH G 1630.63 6 2.65 13 (M1,E2) A + 228TH L 1724.3 2+ + 228TH G 497.72 0.1 LE [M2] N ? UNCERTAIN GAMMA IS IGNORED + 228TH G 548.74 11 0.41 5 [M1,E2] 0.10 7 & ? UNCERTAIN GAMMA IS IGNORED + 228THS G KC=0.08 6$ LC=0.017 9 + 228TH G 570.88 4 3.33 17 (M1) 0.156 G + 228TH3 G FLAG=A + 228THS G KC=0.125$ LC=0.0234 + 228TH G 701.72 4 3.76 21 (M1) 0.091 + 228THS G KC=0.0726$ LC=0.0135 + 228TH G 755.32 2 19.6 10 M1 0.0747 + 228THS G KC=0.0599$ LC=0.0111 + 228TH G 1537.8 2 0.73 10 [E2] + 228TH G 1666.53 6 3.35 17 M1 + 228TH G 1724.0 2 0.50 5 + 228TH L 1743.9 4+ + 228TH G 399.94 7 0.35 4 [E1] 0.0212 ? UNCERTAIN GAMMA IS IGNORED + 228THS G KC=0.0162$ LC=0.00293$ MC=0.00070$ NC+=0.00025 + 228TH G 590.65 11 0.41 5 [E2] 0.0295 + 228THS G KC=0.0200$ LC=0.00716 + 228TH G 684.0 3 0.46 10 [E1] + 228THS G CC=0.00691$ KC=0.00563$ LC=0.00096 + 228TH G 1347.84 0.1 LE N ? UNCERTAIN GAMMA IS IGNORED + 228TH G 1365.72 12 0.40 4 + 228TH G 1415.42 10 0.97 6 [E3] ? UNCERTAIN GAMMA IS IGNORED + 228TH G 1557.06 6 4.42 22 (E2+M1) +1.2 2 + 228TH G 1686.15 7 2.39 12 (E2) + 228TH L 1760.2 2+,3(+) + 228TH G 415.91 8 0.49 5 [E1] 0.0185 ? UNCERTAIN GAMMA IS IGNORED + 228THS G KC=0.0150$ LC=0.00269$ MC=0.00064$ NC+=0.00023 + 228TH G 584.7 3 0.22 7 [M1,E2] 0.10 7 & ? UNCERTAIN GAMMA IS IGNORED + 228TH3 G FLAG=G + 228THS G KC=0.08 6$ LC=0.017 9 + 228TH G 737.8 2 0.74 13 [M1,E2] 0.05 3 G + 228THS G KC=0.04 3$ LC=0.008 4 + 228TH G 791.43 9 0.24 9 [M1,E2] 0.04 3 @ + 228TH3 G FLAG=M + 228THS G KC=0.032 21$ LC=0.007 4 + 228TH G 1573.3 3 0.70 7 (E2) + 228TH G 1702.6 3 1.15 11 G + 228TH L 1804.7 4+ + 228TH G 116.26 5 0.16 2 [M1,E2] 9 4 + 228THS G KC=5 5$ LC=3.1 11$ MC=0.8 4$ NC+=0.30 13 + 228TH G 121.18 7 0.19 3 [E1] 0.316 + 228TH2 G FL=1683.8 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228THS G KC=0.244$ LC=0.0542$ MC=0.0131$ NC+=0.00465 + 228TH G 121.87 3 0.33 3 [M1,E2] 8 4 + 228THS G KC=5 5$ LC=2.5 9$ MC=0.7 3$ NC+=0.25 10 + 228TH G 158.74 3 1.25 7 M1+E2 0.55 15 4.4 4 + 228THS G KC=3.3 4$ LC=0.85 2$ MC=0.213 9$ NC+=0.079 4 + 228TH G 354.2 2 0.29 5 [E1] 0.0260 & + 228THS G KC=0.0209$ LC=0.00384$ MC=0.00092$ NC+=0.00033 + 228TH G 372.60 3 1.57 8 [M1,E2] 0.29 20 + 228THS G KC=0.22 18$ LC=0.053 21$ MC=0.013 5$ NC+=0.0048 7 + 228TH G 651.5 2 0.34 5 [E2] 0.0238 I + 228THS G KC=0.0166$ LC=0.00540 + 228TH G 1426.5 2 0.48 6 [E2] + 228TH G 1618.0 1 0.90 6 (M1,E2) G + 228TH L 1817.4 4- + 228TH G 367.04 2 2.45 12 M1 0.512 + 228THS G KC=0.411$ LC=0.0773$ MC=0.0185$ NC+=0.00674 + 228TH G 1298.3 2 0.45 4 (M1+E2) 0.012 6 + 228TH G 1421.1 2 1.40 7 E2+M1 +2.0 5 + 228TH L 1893.0 3+ + 228TH G 477.1 3 0.7 2 G ? UNCERTAIN GAMMA IS IGNORED + 228TH G 666.47 4 1.81 15 [E1] @ + 228TH2 G FLAG=M + 228TH G 692.47 7 2.01 15(M1+E2+E0) 0.24 3 + 228TH G 724.42 11 0.76 9 [E1] & + 228TH G 739.2 2 0.57 9 [M1,E2] 0.0790 I + 228TH G 770.2 2 2.28 15 [E1] G + 228TH G 870.45 2 15.9 8 M1 0.0515 + 228THS G KC=0.0414$ LC=0.00762 + 228TH G 924.3 2 2.7 2 [M1,E2] 0.028 17 G + 228THS G KC=0.022 14$ LC=0.0043 22 + 228TH G 1706.16 7 2.84 14 M1+E2 +0.42 4 + 228TH G 1835.26 5 9.8 5 E2+M1 +2.9 3 + 228TH L 1900.0 2+ + 228TH G 877.35 7 0.97 8 [M1,E2] 0.032 19 + 228THS G KC=0.025 16$ LC=0.005 3 + 228TH G 883.6 3 0.15 4 G + 228TH G 920.8 3 0.38 10 [M1,E2] 0.028 17 G + 228THS G KC=0.022 14$ LC=0.0044 22 + 228TH G 931.02 7 0.99 8 [M1,E2] 0.027 17 + 228TH G 1503.7 2 0.72 6 [E1] G + 228TH G 1713.16 0.1 LE ? UNCERTAIN GAMMA IS IGNORED + 228TH G 1842.15 8 2.29 12 M1+E2 -0.86 14 + 228TH G 1900.3 3 0.34 5 + 228TH L 1901.9 3-,4 + 228TH G 1383.2 2 0.55 5 + 228TH G 1505.9 2 0.55 5 G + 228TH G 1523.4 2 0.60 6 & + 228TH G 1715.06 10 0.50 3 + 228TH L 1925.2 3+,4+ + 228TH G 724.42 11 0.76 9 [M1,E2] 0.05 4 & + 228THS G KC=0.04 3$ LC=0.008 5 + 228TH G 750.10 10 0.67 8 [M1,E2] 0.05 3 ? UNCERTAIN GAMMA IS IGNORED + 228TH G 865.15 13 0.50 7 + 228TH G 956.8 2 2.5 5 G + 228TH G 1529.02 6 2.61 13 [E1] + 228TH G 1738.48 5 9.6 5 M1+E2 + 228TH L 1928.6 3+ + 228TH G 168.42 9 0.09 2 [M1,E2] 2.9 16 + 228THS G KC=1.9 17$ LC=0.73 6$ MC=0.19 3$ NC+=0.070 10 + 228TH G 389.36 0.31 5 [M1,E2] 0.26 18 N ? UNCERTAIN GAMMA IS IGNORED + 228TH G 584.7 3 0.22 7 [E1] & ? UNCERTAIN GAMMA IS IGNORED + 228TH3 G FLAG=G + 228TH G 1741.6 2 0.42 8 G + 228TH G 1870.80 9 0.73 4 (M1+E2) + 228TH L 1944.9 3+ + 228TH G 184.61 5 0.41 5 (M1) 3.45 @ + 228TH3 G FLAG=M + 228THS G KC=2.76$ LC=0.525$ MC=0.125$ NC+=0.0461 + 228TH G 220.61 2 1.24 6 (M1) 2.10 + 228THS G KC=1.68$ LC=0.317$ MC=0.0763$ NC+=0.0278 + 228TH G 299.10 10 0.43 5 M1 0.90 + 228THS G KC=0.719$ LC=0.135$ MC=0.0326$ NC+=0.0118 + 228TH G 306.61 2 2.00 10 M1 0.84 + 228THS G KC=0.672$ LC=0.126$ MC=0.0304$ NC+=0.0111 + 228TH G 512.79 11 1.33 13 [M1,E2] 0.12 9 G + 228THS G KC=0.10 7$ LC=0.021 11 + 228TH G 718.31 2 6.4 3 (E1) + 228THS G CC=0.00631$ KC=0.00514$ LC=0.00087 + 228TH G 776.52 3 7.9 4 [E1] + 228THS G CC=0.00546$ KC=0.00446$ LC=0.00075 + 228TH G 791.43 9 3.6 4 (M1) 0.0661 @ + 228TH2 G FLAG=M + 228THS G KC=0.0530$ LC=0.0098 + 228TH G 853.97 8 0.82 7 [M1,E2] 0.034 21 + 228THS G KC=0.027 17$ LC=0.005 3 + 228TH G 922.5 2 2.25 12 [M1,E2] 0.028 16 G + 228THS G KC=0.022 13$ LC=0.0044 22 + 228TH G 928.4 2 0.89 8 G + 228TH G 976.00 5 13.4 7 M1 0.0381 + 228THS G KC=0.0306$ LC=0.00563 + 228TH G 1000.70 0.5 LE N +- 1.00 keV unc. assigned to energy + RI=DRI=RI/2 assumed + 228TH G 1070.40 7 1.20 8 + 228TH G 1549.3 2 1.2 2 G + 228TH G 1758.11 5 9.0 5 E2+M1 -9 1 + 228TH G 1887.13 5 24.0 12 E2+M1 -9.1 9 + 228TH L 1965.0 2+,3,4+ + 228TH G 548.74 11 0.41 5 [M1,E2] 0.10 7 & ? UNCERTAIN GAMMA IS IGNORED + 228THS G KC=0.08 6$ LC=0.017 9 + 228TH G 1778.0 6 0.06 2 + 228TH G 1907.13 11 0.99 5 + 228TH G 1965.22 12 0.43 4 & + 228TH L 1974.2 3-,4+ + 228TH G 1455.0 2 1.16 7 G + 228TH G 1578.2 2 1.33 13 G + 228TH G 1787.2 2 0.37 4 G + 228TH G 1916.6 3 0.15 3 G + 228TH L 1982.0 2+,3,4+ + 228TH G 1013.54 13 0.38 5 & + 228TH G 1795.15 6 1.19 7 + 228TH G 1924.2 2 0.18 2 + 228TH L 2010.1 2+,3,4(+) + 228TH G 371.83 0.84 23 G +- 1.00 keV unc. assigned to energy + 228TH3 G FLAG=N + 228TH G 887.16 0.35 5 N +- 1.00 keV unc. assigned to energy + 228TH G 919.4 3 0.6 2 I + 228TH G 1041.14 0.3 LE N +- 1.00 keV unc. assigned to energy + RI=DRI=RI/2 assumed + 228TH G 1823.19 10 0.47 3 + 228TH G 1952.39 10 0.76 5 + 228TH L 2016.8 (2-,3-,4-) + 228TH G 1620.67 10 4.9 3 (M1+E2) + 228TH L 2022.8 + 228TH G 384.53 0.1 LE [M1,E2] 0.27 18 N ? UNCERTAIN GAMMA IS IGNORED + 228TH G 1148.20 14 0.30 4 + 228TH G 1190.98 0.1 LE N +- 1.00 keV unc. assigned to energy + RI=DRI=RI/2 assumed + 228TH G 1965.22 12 0.43 4 & + + + +MASS NUMBER= 228 + +OPTIONS: RECOIL= T ALL= T + DEG=1 keV + DCC(theory)= 0.000 + +Program GTOL Version 7.2h as of 24-May-2013 (Double precision, localized) + + 228TH 232U A DECAY 1977KU15,1986LOZT 97NDS 199704 + 228TH L 0.0 0+ + 228TH L 57.762 5 2+ 0.406 NS 7 + 228TH G 57.78 5 77.2 7 E2 156 A + 228THS G LC= 114 $MC= 31.1 $NC+= 11.4 $ + 228TH L 186.828 5 4+ 0.164 NS 4 + 228TH G 129.08 5 26.33 15 E2 3.81 A + 228THS G KC= 0.269 $LC= 2.57 $MC= 0.706 $NC+= 0.263 $ + 228TH L 328.003 5 1- + 228TH G 270.2 2 1.220 19 E1 0.0474 A + 228THS G KC= 0.0379 $LC=0.00722 $MC=0.00173 $NC+=0.00061 $ + 228TH G 327.9 2 1.093 23 E1 0.0308 A + 228THS G KC=0.02472 $LC=0.00458 $MC=0.00110 $NC+=0.00039 $ + 228TH L 378.178 11 6+ + 228TH G 191.0 2 0.012 1 E2 0.791 + 228THS G KC= 0.1741 $LC= 0.453 $MC= 0.1237 $NC+= 0.0457 $ + 228TH L 396.085 5 3- + 228TH G 209.5 5 0.0041 10 E1 0.0856 + 228THS G KC= 0.0676 $LC=0.01341 $MC=0.00323 $NC+=0.00114 $ + 228TH G 338.1 2 0.0143 5 E1 0.0288 + 228THS G KC=0.02314 $LC=0.00427 $MC=0.00102 $NC+=0.00036 $ + 228TH L 519.199 6 5- + 228TH G 141.0 5 0.0012 5 (E1) 0.220 + 228THS G KC= 0.1711 $LC= 0.0367 $MC=0.00883 $NC+=0.00313 $ + 228TH G 332.3 3 0.019 1 (E1) 0.0299 + 228THS G KC=0.02402 $LC=0.00444 $MC=0.00106 $NC+=0.00038 $ + 228TH L 831.832 11 0+ + 228TH G 503.6 3 0.0056 3 (E1) 0.0125 + 228THS G KC=0.01015 $LC=0.00179 $ + 228TH G 773.4 5 0.0018 3 [E2] 0.0167 + 228THS G KC=0.01218 $LC=0.00340 $ + 228TH G 831 0.0003 LT E0 8E-4 4 +- 1.00 keV unc. assigned to energy + RI=DRI=RI/2 assumed + 228TH L 874.48 3 2+ + 228TH G 478 1 0.00055 21 [E1] 0.0139 + 228THS G KC=0.01127 $LC=0.00199 $MC=0.00047 $NC+=0.00017 $ + 228TH G 547 1 0.00039 24 [E1] 0.0106 + 228THS G KC=0.00863 $LC=0.00150 $ + 228TH G 817 1 0.0003 AP [M1+E2] 0.038 23 D + + + +MASS NUMBER= 228 + +OPTIONS: RECOIL= T ALL= T + DEG=1 keV + DCC(theory)= 0.000 + +Program GTOL Version 7.2h as of 24-May-2013 (Double precision, localized) + + 228TH 226RA(A,2NG) 1993AC02,1986SC18 97NDS 199704 + 228TH L 0.0 0+ D + 228TH L 57.76 2+ A + 228TH L 186.83 4+ A + 228TH L 378.18 6+ A + 228TH G 191.4 3 + 228TH L 519.20 5- A + 228TH G 332.4 3 + 228TH L 622.5 3 8+ D + 228TH G 244.4 3 + 228TH L 695.6 3 7- E + 228TH G 317.4 3 + 228TH L 911.8 4 10+ D + 228TH G 289.4 3 + 228TH L 920.8 3 9- E + 228TH G 225.1 3 1.00 + 228TH G 298.3 3 4.07 24 + 228TH L 1189.8 4 11- E + 228TH G 268.9 3 1.00 + 228TH G 278.0 3 1.50 10 + 228TH L 1239.4 4 12+ D + 228TH G 327.5 3 + 228TH L 1497.1 5 13- E + 228TH G 257.7 3 0.52 4 + 228TH G 307.3 3 1.00 + 228TH L 1599.5 5 14+ B + 228TH G 360.1 3 + 228TH L 1838.3 5 15- B + 228TH G 341.2 3 + 228TH L 1988.1 6 16+ B + 228TH G 388.6 3 + 228TH L 2209.7 6 17- B + 228TH G 371.4 3 + 228TH L 2407.9 7 18+ B + 228TH G 419.8 3 + 228THF G FL=1988.1 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + + + +MASS NUMBER= 228 + +OPTIONS: RECOIL= T ALL= T + DEG=1 keV + DCC(theory)= 0.000 + +Program GTOL Version 7.2h as of 24-May-2013 (Double precision, localized) + + 228TH 230TH(P,T) 1972MA15 97NDS 199704 + No gammas expected. Data set will not be reported on. + + +Program GTOL Version 7.2h as of 24-May-2013 (Double precision, localized) + + 228TH 230TH(A,A'2NG) 1984HA21 97NDS 199704 + 228TH L 0 0+ + 228TH L 57.8 2+ + 228TH G 57.8 S +- 1.00 keV unc. assigned to energy + 228TH L 187 4+ + 228TH G 129.0 2 E2 + 228TH L 378 6+ + 228TH G 191.0 1 E2 + 228TH L 519 5- + 228TH G 332.0 4 + 228TH L 622 8+ + 228TH G 244.3 1 E2 + 228TH3 G FL=378 FINAL LEVEL FOUND + ***** No differences introduced due to continuation record + 228TH L 695 7- + 228TH G 317.2 2 + 228TH L 911 10+ + 228TH G 289.3 2 + 228TH L 921 9- + 228TH G 298.7 2 + 228TH L 1190 11- + 228TH G 268.9 5 + 228TH G 278.4 3 + 228TH L 1239 12+ + 228TH G 327.2 4 + 228TH L 1497 (13-) + 228TH G 257.3 5 + 228TH G 306.6 5 + 228TH L 1596 (14+) ? + 228TH G 357.2 5 + + + +MASS NUMBER= 228 + +OPTIONS: RECOIL= T ALL= T + DEG=1 keV + DCC(theory)= 0.000 diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 43c6345aa2..a671120cd0 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -50,6 +50,22 @@ def test_gabs(): 'ensdf_processing/gabs/ref_gabs_80Br.new', exceptions_dataset) cleanup_tmp() +def test_gtol(): + create_tmp() + input_dict = {} + input_dict['input_file'] = 'ensdf_processing/gtol/ref_gtol.inp' + input_dict['report_file'] = tmp_path + '/tmp_gtol.rpt' + input_dict['new_ensdf_file_with_results'] = 0 + input_dict['output_file'] = tmp_path + '/tmp_gtol.out' + input_dict['supress_gamma_comparison'] = 1 + input_dict['supress_intensity_comparison'] = 1 + input_dict['dcc_theory_percent'] = 1.4 + output_dict = ensdf_processing.gtol(input_dict) + ref_output_report = 'ensdf_processing/gtol/ref_gtol.rpt' + exceptions = [[1, 'DATE:'], [1, 'INPUT-FILE name:'], [1, 'TIME:']] + d_report = file_comp(input_dict['report_file'], ref_output_report, exceptions) + cleanup_tmp() + def create_tmp(): if not os.path.exists(tmp_path): os.makedirs(tmp_path) @@ -110,3 +126,4 @@ def file_comp(file_out, file_ref, exceptions): alphad = test_alphad() gabs = test_gabs() delta = test_delta() + gtol = test_gtol() From c7e78ccec086b61dd106544b4f5c97a921f52f44 Mon Sep 17 00:00:00 2001 From: josh Date: Tue, 19 Jan 2016 14:58:26 -0800 Subject: [PATCH 092/216] Added ensdf_processing/hsicc set of tools --- pyne/ensdf_processing.py | 112 + setup.py | 12 + src/CMakeLists.txt | 7 + src/ensdf_processing/HSICC/bldhst.for | 131 + src/ensdf_processing/HSICC/hsicc.for | 2882 ++++ src/ensdf_processing/HSICC/hsmrg.for | 416 + src/ensdf_processing/HSICC/seqhst.for | 142 + .../bldhst/ref_bldhst_iccseq.dat | 13004 ++++++++++++++++ tests/ensdf_processing/bldhst/ref_iccndx.dat | Bin 0 -> 448 bytes tests/ensdf_processing/bldhst/ref_icctbl.dat | Bin 0 -> 572176 bytes tests/ensdf_processing/hsicc/ref_cards.new | 4 + tests/ensdf_processing/hsicc/ref_compar.lst | 21 + tests/ensdf_processing/hsicc/ref_hscalc.lst | 462 + .../ensdf_processing/hsicc/ref_hsicc_data.tst | 47 + .../hsicc/ref_hsicc_iccndx.dat | Bin 0 -> 448 bytes .../hsicc/ref_hsicc_icctbl.dat | Bin 0 -> 572176 bytes tests/ensdf_processing/hsmrg/ref_cards.mrg | 49 + .../hsmrg/ref_hsmrg_cards.new | 4 + .../ensdf_processing/hsmrg/ref_hsmrg_data.tst | 47 + tests/ensdf_processing/seqhst/ref_iccseq.dat | 13004 ++++++++++++++++ .../seqhst/ref_seqhst_icctbl.dat | Bin 0 -> 572176 bytes tests/test_ensdf_processing.py | 59 + 22 files changed, 30403 insertions(+) create mode 100644 src/ensdf_processing/HSICC/bldhst.for create mode 100644 src/ensdf_processing/HSICC/hsicc.for create mode 100644 src/ensdf_processing/HSICC/hsmrg.for create mode 100644 src/ensdf_processing/HSICC/seqhst.for create mode 100644 tests/ensdf_processing/bldhst/ref_bldhst_iccseq.dat create mode 100644 tests/ensdf_processing/bldhst/ref_iccndx.dat create mode 100644 tests/ensdf_processing/bldhst/ref_icctbl.dat create mode 100644 tests/ensdf_processing/hsicc/ref_cards.new create mode 100644 tests/ensdf_processing/hsicc/ref_compar.lst create mode 100644 tests/ensdf_processing/hsicc/ref_hscalc.lst create mode 100644 tests/ensdf_processing/hsicc/ref_hsicc_data.tst create mode 100644 tests/ensdf_processing/hsicc/ref_hsicc_iccndx.dat create mode 100644 tests/ensdf_processing/hsicc/ref_hsicc_icctbl.dat create mode 100644 tests/ensdf_processing/hsmrg/ref_cards.mrg create mode 100644 tests/ensdf_processing/hsmrg/ref_hsmrg_cards.new create mode 100644 tests/ensdf_processing/hsmrg/ref_hsmrg_data.tst create mode 100644 tests/ensdf_processing/seqhst/ref_iccseq.dat create mode 100644 tests/ensdf_processing/seqhst/ref_seqhst_icctbl.dat diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 13faa407ba..5a8f105b46 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -172,4 +172,116 @@ def gtol(inputdict_unchecked): proc.stdin.write(inp.encode('utf-8')) proc.communicate()[0] proc.stdin.close() + return inputdict_unchecked + +def bldhst(inputdict_unchecked): + """ + This program builds a direct access file of the internal conversion coefficient + table. (BLDHST readme) + + Input Dictionary Required Key Pair Value: + input_file : input ensdf file. + output_table_file : desired output table file path. + output_index_file : desired output index file path. + + + Output Dictionary Values: + Everything in input dictionary is returned if BLDHST completes successfully. + """ + inputdict = {} + input_file = inputdict_unchecked['input_file'] + output_table_file = inputdict_unchecked['output_table_file'] + output_index_file = inputdict_unchecked['output_index_file'] + + exe_path = path_to_exe('bldhst') + proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + inp = input_file + '\n' + output_table_file + '\n' + output_index_file + proc.stdin.write(inp.encode('utf-8')) + proc.communicate()[0] + proc.stdin.close() + return inputdict_unchecked + +def hsicc(inputdict_unchecked): + """ + This program calculates internal conversion coefficients. (HSICC readme) + + Input Dictionary Required Key Pair Value: + data_deck : data deck to be used for hsicc program. + icc_index : icc index to be used for hsicc program. + icc_table : icc table to be used for the hsicc program. + complete_report : desired report file path for hsicc program. + new_card_deck : desired new card deck file path for hsicc program. + comparison_report : desired comparison report path for hsicc program. + is_multipol_known : 1 if multipol is known, 0 otherwise. + + Output Dictionary Values: + Everything in input dictionary is returned if HSICC completes successfully. + """ + inputdict = {} + data_deck = inputdict_unchecked['data_deck'] + icc_index = inputdict_unchecked['icc_index'] + icc_table = inputdict_unchecked['icc_table'] + complete_report = inputdict_unchecked['complete_report'] + new_card_deck = inputdict_unchecked['new_card_deck'] + comparison_report = inputdict_unchecked['comparison_report'] + multipol_known = inputdict_unchecked['is_multipol_known'] #'Y or CR' + + exe_path = path_to_exe('hsicc') + proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + inp = data_deck + '\n' + icc_index + '\n' + icc_table + '\n' + \ + complete_report + '\n' + new_card_deck + '\n' + comparison_report + '\n' + multipol_known + proc.stdin.write(inp.encode('utf-8')) + proc.communicate()[0] + proc.stdin.close() + return inputdict_unchecked + +def hsmrg(inputdict_unchecked): + """ + This program merges new gamma records created by HSICC with the original input + data. (HSICC readme) + + Input Dictionary Required Key Pair Value: + data_deck : data deck file path for hsmrg to use. + card_deck : card deck file path for hsmrg to use. + merged_data_deck : desired merged data deck file path created by hsmrg. + + Output Dictionary Values: + Everything in input dictionary is returned if HSMRG completes successfully. + """ + inputdict = {} + data_deck = inputdict_unchecked['data_deck'] + card_deck = inputdict_unchecked['card_deck'] + merged_data_deck = inputdict_unchecked['merged_data_deck'] + + exe_path = path_to_exe('hsmrg') + proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + inp = data_deck + '\n' + card_deck + '\n' + merged_data_deck + proc.stdin.write(inp.encode('utf-8')) + proc.communicate()[0] + proc.stdin.close() + return inputdict_unchecked + +def seqhst(inputdict_unchecked): + """ + This program recreates a sequential file of the internal conversion table from the + direct access file. (HSICC readme) + + Input Dictionary Required Key Pair Value: + binary_table_input_file : binary table input file path. + sequential_output_file : desired path of sequential output file. + + Output Dictionary Values: + Everything in input dictionary is returned if SEQHST completes successfully. + """ + #NOTE: changed input file line length to 90 to support longer file paths in fortran source. + inputdict = {} + input_file = inputdict_unchecked['binary_table_input_file'] + output_file = inputdict_unchecked['sequential_output_file'] + + exe_path = path_to_exe('seqhst') + proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + inp = input_file + '\n' + output_file + proc.stdin.write(inp.encode('utf-8')) + proc.communicate()[0] + proc.stdin.close() return inputdict_unchecked \ No newline at end of file diff --git a/setup.py b/setup.py index 5d9a0373a6..7db5eb437c 100755 --- a/setup.py +++ b/setup.py @@ -179,6 +179,10 @@ def download_decay(): ALPHAD_H = os.path.join('build', 'src/alphad') DELTA_H = os.path.join('build', 'src/delta') GTOL_H = os.path.join('build', 'src/gtol') +BLDHST_H = os.path.join('build', 'src/bldhst') +HSICC_H = os.path.join('build', 'src/hsicc') +HSMRG_H = os.path.join('build', 'src/hsmrg') +SEQHST_H = os.path.join('build', 'src/seqhst') def copy_ensdf_executables(exe_dest): print('Copying ENSDF Executables to install directory') @@ -193,10 +197,18 @@ def copy_ensdf_executables(exe_dest): ALPHAD_DEST = os.path.join(exe_dest, 'alphad') DELTA_DEST = os.path.join(exe_dest, 'delta') GTOL_DEST = os.path.join(exe_dest, 'gtol') + BLDHST_DEST = os.path.join(exe_dest, 'bldhst') + HSICC_DEST = os.path.join(exe_dest, 'hsicc') + HSMRG_DEST = os.path.join(exe_dest, 'hsmrg') + SEQHST_DEST = os.path.join(exe_dest, 'seqhst') try: shutil.copy(ALPHAD_H, ALPHAD_DEST) shutil.copy(DELTA_H, DELTA_DEST) shutil.copy(GTOL_H, GTOL_DEST) + shutil.copy(BLDHST_H, BLDHST_DEST) + shutil.copy(HSICC_H, HSICC_DEST) + shutil.copy(HSMRG_H, HSMRG_DEST) + shutil.copy(SEQHST_H, SEQHST_DEST) except Exception: print('Some ENSDF processing executables were unable to be copied to the \ install directory.') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 99a4a76678..450136381c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -107,6 +107,13 @@ add_executable(alphad ${PROJECT_SOURCE_DIR}/src/ensdf_processing/ALPHAD/alphad.f add_executable(delta ${PROJECT_SOURCE_DIR}/src/ensdf_processing/DELTA/delta.for) add_executable(gtol ${PROJECT_SOURCE_DIR}/src/ensdf_processing/GTOL/gtol.f ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f) +add_executable(bldhst ${PROJECT_SOURCE_DIR}/src/ensdf_processing/HSICC/bldhst.for) +add_executable(hsicc ${PROJECT_SOURCE_DIR}/src/ensdf_processing/HSICC/hsicc.for + ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f) +add_executable(hsmrg ${PROJECT_SOURCE_DIR}/src/ensdf_processing/HSICC/hsmrg.for + ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f) +add_executable(seqhst ${PROJECT_SOURCE_DIR}/src/ensdf_processing/HSICC/seqhst.for + ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f) # Print include dir get_property(inc_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES) diff --git a/src/ensdf_processing/HSICC/bldhst.for b/src/ensdf_processing/HSICC/bldhst.for new file mode 100644 index 0000000000..a2063659b6 --- /dev/null +++ b/src/ensdf_processing/HSICC/bldhst.for @@ -0,0 +1,131 @@ +C***********************************************************************01 00010 +C* 01 00020 +C* PROGRAM BLDHST 01 00030 +C* 01 00040 +C* VERSION 1(4) AS OF 7-DEC-77. FOR DEC AND IBM MACHINES ONLY. 01 00050 +C* VERSION 1(5) AS OF 28-SEP-78. PRINT OUT RECORD COUNTS. 01 00060 +C* VERSION 1(6) AS OF 28-SEP-78. MODIFY TO HANDLE NEW ICCSEQ TABLE. 01 00070 +C* VERSION 2(7) AS OF 9-JUN-81. USE DIALOG=LINE FOR DEC. 01 00080 +C* VERSION 3 AS OF 24-FEB-86. CONVERT TO FORTRAN 77 01 00090 +C* VERSION 3(1) AS OF 6-AUG-86. ADD VAX MDC 01 00100 +C* VERSION 3(2) AS OF 27-MAR-87. ADD IbmPC MDC--May read ICC data 01 00110 +C* from floppies. Creates entire or partioal direct 01 00120 +C* access ICC table files. 01 00130 +C* VERSION 3(3) as of 2-OCT-90. Modified IBM MDC file open section. 01 00140 +C* VERSION 3(4) as of 16-Oct-92. Added ANS MDC 01 00150 +C* VERSION 3(5) as of 03-Aug-93. Finished typing of variables 01 00160 +c* Version 3.6 as of 9-Feb-01 Added UNX (Linux and GNU f77) (RRK) 01 00165 +C* 01 00170 +C* 01 00180 +C* REFER ALL COMMENTS AND INQUIRIES TO 01 00190 +C* NATIONAL NUCLEAR DATA CENTER 01 00200 +C* BUILDING 197D 01 00210 +C* BROOKHAVEN NATIONAL LABORATORY 01 00220 +C* UPTON, NEW YORK 11973 01 00230 +C* TELEPHONE 631-344-2901 COMM 01 00240 +C* 01 00260 +C***********************************************************************01 00270 +C* 01 00280 +C* 01 00290 +C BUILD HAGER-SELTZER DIRECT ACCESS TABLE PLUS INDEX 01 00300 +C FROM SOURCE DATA. 01 00310 +C 01 00320 +C SOURCE DATA IS A SEQUENTIAL ACCESS SYMBOLIC FILE OF 80 01 00330 +C CHARACTER RECORDS (Z, SHELL, EG, E1, E2, E3, E4, 01 00340 +C M1, M2, M3, M4) = (I3, A2, F7.2, 8E8.2). 01 00350 +C 01 00360 +C DIRECT ACCESS TABLE IS A BINARY FILE OF 11 WORD RECORDS. 01 00370 +C 13004 RECORDS IN THE FILE. 01 00380 +C 01 00390 +C INDEX IS A DIRECT ACCESS BINARY FILE OF 1 WORD RECORDS. 01 00400 +C THE Z-TH RECORD IS THE INTEGER RECORD NUMBER POINTER TO THE 01 00410 +C DIRECT ACCESS TABLE. 01 00420 +C 112 RECORDS IN THE FILE. 01 00430 +C 01 00440 +C WRITTEN BY: 01 00450 +C BRUCE J. BARTON 01 00460 +C JUNE, 1977 01 00470 +C 01 00480 + PROGRAM BLDHST 01 00490 +C 01 00500 + INTEGER Z 01 00510 + CHARACTER*2 SHELL 01 00520 + REAL E(4), M(4) 01 00530 + INTEGER TBLKEY, NDXKEY 01 00540 + INTEGER ZOLD 01 00550 + CHARACTER*90 LINE,line1,line2 01 00560 + Integer i,j 01 00570 + Real eg 01 00580 +C 01 01020 +C OPEN INPUT FILE AND TWO OUTPUT FILES (DIRECT ACCESS). 01 01030 +C 01 01040 +99900 FORMAT(A) 01 01050 +C+++MDC +C...VAX, DVF, UNX +99901 FORMAT(' ENTER SEQUENTIAL INPUT FILE NAME (DEF: iccseq.dat): ',$) 01 01060 +99902 FORMAT(' ENTER OUTPUT TABLE FILE NAME (DEF: icctbl.dat): ',$) 01 01070 +99903 FORMAT(' ENTER OUTPUT INDEX FILE NAME (DEF: iccndx.dat): ',$) 01 01080 +C...ANS 01 01050 +C/99901 FORMAT(' ENTER SEQUENTIAL INPUT FILE NAME (DEF: ICCSEQ.DAT): ') 01 01060 +C/99902 FORMAT(' ENTER OUTPUT TABLE FILE NAME (DEF: ICCTBL.DAT): ') 01 01070 +C/99903 FORMAT(' ENTER OUTPUT INDEX FILE NAME (DEF: ICCNDX.DAT): ') 01 01080 +C---MDC + WRITE(6,99901) 01 01110 + READ(5,99900) LINE 01 01120 + IF(LINE.EQ.' ') LINE='iccseq.dat' 01 01130 + OPEN(UNIT=20, ACCESS='SEQUENTIAL',FILE=LINE,STATUS='OLD') 01 01150 + WRITE(6,99902) 01 01160 + READ(5, 99900) LINE1 01 01170 + IF(LINE1.EQ.' ') LINE1='icctbl.dat' 01 01180 + WRITE(6,99903) 01 01220 + READ(5,99900) LINE2 01 01230 + IF(LINE2.EQ.' ') LINE2='iccndx.dat' 01 01240 +C+++MDC +C...VAX +C/ OPEN (UNIT=21,ACCESS='DIRECT',STATUS='NEW',RECL = 11,FILE=LINE1)01 01210 +C/ OPEN (UNIT=22,ACCESS='DIRECT',STATUS='NEW',RECL =1,FILE=LINE2) 01 01270 +C...DVF,UNX,ANS + OPEN (UNIT=21,ACCESS='DIRECT',STATUS='UNKNOWN',RECL=44,FILE=LINE1)01 01210 + OPEN (UNIT=22,ACCESS='DIRECT',STATUS='UNKNOWN',RECL =4,FILE=LINE2)01 01270 +C---MDC + WRITE (6, 9300) 01 02380 + 9300 FORMAT(' PROGRAM B L D H S T VERSION 3.6 AS OF 9-Feb-01'//) 01 02390 + 9100 FORMAT(I3, A2, F7.2, 8E8.2) 01 02400 +C 01 02410 +C INITIALIZE CONTROL VARIABLES. 01 02420 +C 01 02430 + TBLKEY = 1 01 02440 + NDXKEY=1 01 02450 + ZOLD = 0 01 02460 +C 01 02470 +C ZERO OUT INDEX FILE. 01 02480 +C 01 02490 + DO 5 I = 1, 112 01 02500 + WRITE(22,REC=I) ZOLD 01 02510 + 5 CONTINUE 01 02520 +C 01 02550 +C READ ICCSEQ AND WRITE ICCTBL. 01 02560 +C IF Z NOT = ZOLD WRITE ICCNDX. 01 02570 +C 01 02580 + 10 READ(20, 9100, END=99) Z, SHELL, EG, E, M 01 02590 + IF (Z .EQ. ZOLD) GOTO 20 01 02600 + WRITE(22,REC=Z) TBLKEY 01 02610 + NDXKEY=NDXKEY+1 01 02620 + ZOLD = Z 01 02630 + 20 WRITE(21,REC=TBLKEY) Z, SHELL, EG, E, M 01 02640 + TBLKEY=TBLKEY+1 01 02650 + GOTO 10 01 02660 +C 01 02670 +C CLOSE FILES AND EXIT. 01 02680 +C WRITE ONE MORE EXTRA RECORD ON UNIT 21 FOR IPC VERSION'S BENEFIT 01 02690 +C 01 02700 + 99 I = NDXKEY - 1 01 02710 + J = TBLKEY - 1 01 02720 + WRITE(6, 9200) I, J 01 03620 + 9200 FORMAT(' RECORDS WRITTEN - INDEX:', I3, ', TABLE:', I8) 01 03630 +C 01 03640 + CLOSE (UNIT = 20) 01 03650 + CLOSE (UNIT = 21) 01 03660 + CLOSE (UNIT = 22) 01 03670 + STOP 01 03680 + END 01 03690 diff --git a/src/ensdf_processing/HSICC/hsicc.for b/src/ensdf_processing/HSICC/hsicc.for new file mode 100644 index 0000000000..1ab85bde1c --- /dev/null +++ b/src/ensdf_processing/HSICC/hsicc.for @@ -0,0 +1,2882 @@ +C***********************************************************************01 00010 +C* 01 00020 +C* PROGRAM HSICC 01 00030 +C* 01 00040 +C* VERSION 1 SUPPLIED BY ORNL. 01 00050 +C* VERSION 2(23) AS OF 7-DEC-77. CONVERT TO MACHINE DEPENDENT CODE. 01 00060 +C* VERSION 3(24) AS OF 12-JUL-78. ADD LATEST NDP MODS (11-28-77). 01 00070 +C* VERSION 3(25) AS OF 20-JUL-78. INCL DELL,H ** 2 IN CALCULATION 01 00080 +C* OF DELSQ. 01 00090 +C* VERSION 3(26) AS OF 29-SEP-78. FIX FOR NEW ICC TABLE. 01 00100 +C* VERSION 3(27) AS OF 13-DEC-79. FIX LCM FOR CDC. 01 00110 +C* VERSION 3(30) AS OF 13-DEC-79. FIX SORT TO NOT RUNN OFF TABLE. 01 00120 +C* VERSION 3(31) AS OF 13-DEC-79. CHANGE DIRECTORY FOR TABLES (DEC). 01 00130 +C* VERSION 3(32) AS OF 19-DEC-79. BLANK OUT DCC BEFORE UPDATE. 01 00140 +C* VERSION 3(33) AS OF 25-MAR-80. FIX STMNT 8560. 01 00150 +C* VERSION 4(34) AS OF 9-JUN-81. USE DIALOG=LINE FOR DEC. 01 00160 +C* VERSION 4(35) AS OF 10-JUN-81. MAKE NEW FILE FOR G-CARD CHANGES. 01 00170 +C* VERSION 4(36) AS OF 11-JUN-81. CHANGE N+ ON 2G CARD TO NC+. 01 00180 +C* VERSION 5(37) AS OF 23-JUL-81. ALLOW FOR MORE THAN 100 GAMMAS. 01 00190 +C* VERSION 5(40) AS OF 2-SEP-81. REMOVE LAST $ ON CONT CARDS. 01 00200 +C* VERSION 5(41) AS OF 16-NOV-81. FIX ICC TABLE OVERRUN FOR Z=103. 01 00210 +C* VERSION 6(42) AS OF 18-NOV-81. ADD OPTION TO CALC CONV COEFS ONLY 01 00220 +C* FOR GAMMAS OF KNOWN MULTIPOL.(DEC).01 00230 +C* VERSION 6(43) AS OF 11-DEC-81. FIX DATSTR TO ELIMINATE ROUNDOFF 01 00240 +C* ERROR. 01 00250 +C* VERSION 6(44) AS OF 6-JAN-82. DON'T PUNCH CC IF UNKNOWN OR IF 01 00260 +C* (CC / 1. + CC) < 1.E-4. 01 00270 +C* VERSION 7(45) AS OF 3-FEB-82. INCLUDE SEQ #'S ON FILES 6,7 AND 8.01 00280 +C* VERSION 7(46) AS OF 29-MAR-82. MODIFY FILE PROMPTS FOR DEC. 01 00290 +C* VERSION 7(47) AS OF 16-AUG-82. STATEMENT ORDER BAD AT 50500. 01 00300 +C* VERSION 7(50) AS OF 27-AUG-82. SUPPRESS 2G CARD WHEN CC FLD SUP'D.01 00310 +C* VERSION 7(51) AS OF 18-MAY-84. FIX DATSTR TO ELIMINATE RNDOFF ERR.01 00320 +C* VERSION 10 AS OF 24-FEB-86. CONVERT TO FORTRAN 77 01 00330 +C* VERSION 10(1) AS OF 5-AUG-86. ADD VAX MDC 01 00340 +C* CDC USES DIRECT ACCESS LIKE OTHERS. CDC 01 00350 +C* SEQUENTIAL CODE IS KEPT AS COMMENT 01 00360 +C* VERSION 10(2) AS OF 14-AUG-86. MULTIPOLARITY FIELD ON G CARD. 01 00370 +C* VERSION 10(3) AS OF 26-SEP-86. OUTPUT CHANGE-ALL L VALUES PRINTED 01 00380 +C* VERSION 10(4) AS OF 10-FEB-87. Added IbmPC MDC. IBM PC version of01 00390 +C* HSICC code written by G.De Smet and M.Verboven of 01 00400 +C* Nuclear Physics Lab., Belgium was adopted.(CDC seque.01 00410 +C* code became IPC code.) CDC seq. commented with 01 00420 +C* CCDCSEQ 01 00430 +C* VERSION 10(5) AS OF 27-FEB-87. Corrected CC value error in case no01 00440 +C* M's. Changed from 2 G to S G 01 00450 +C* VERSION 10(6) AS OF 5-APR-87. IPC rewritten. IPC now uses dir. 01 00460 +C* access ICC table as other MDC. IPC of V10(4) became 01 00470 +C* CCIPSEQ. 01 00480 +C* VERSION 10(7) AS OF 2-NOV-87. VAX MDC add READONLY for datasets. 01 00490 +C* VERSION 11(1) AS OF SEP-89. CCIPSEQ deleted. Various cleanup and 01 00500 +C* output corrections. Non numerical DMR and DE treated 01 00510 +C* VERSION 11(2) AS OF JUN-90. double precision consistency (datstr) 01 00520 +C* VERSION 11(3) AS OF 27-AUG-90. ICC summations for mixed trans. 01 00530 +C* case was corrected and made consistent with regular 01 00540 +C* ICC summations. 01 00550 +C* VERSION 11(4) AS OF 25-SEP-90. Simplified read data from ICCtable 01 00560 +C* logic(eliminate ASSIGN etc). When Gamma energy is too01 00570 +C* close to binding energy, indicate so. 01 00580 +C* VERSION 11(5) as of 2-OCT-90. IBM MDC open statements mod for 01 00590 +C* SUN. 01 00600 +C* VERSION 11(6) as of 20-SEP-91. New card and 2nd card generated 01 00610 +C* when no MR but 2 multipoles. Calculation of DICC for 01 00620 +C* summed ICC lines. If CC.LT.0.01 generate PUBjcomment 01 00630 +C* and no 2nd card. If E0 in MR, no 2nd card, old card kept 01 00640 +C* and comment. 01 00650 +C* VERSION 11(7) as of 9-SEP-91. For Mixed trans, when MR supplied, 01 00660 +C* changed the way DICC's calculated for summed variables. 01 00670 +C* When TI exists, but some shell values are not calculated, 01 00680 +C* supply 2nd card with K/T etc. 01 00690 +C* VERSION 11(8) as of 25-NOV-91. Added Gamma uncertainty calc. 01 00700 +C* Created subroutines are: 01 00710 +C* HSICAL contains core of HSICC calculation 01 00720 +C* MIXOUT mixed trans. ICC table output calculation. 01 00730 +C* OUTICC output calculation and report output for both 01 00740 +C* regular and mixed trans. Calls MIXOUT 01 00750 +C* GAMUNC calculation and output of Egamma +- delta. 01 00760 +C* Calls HSICAL and OUTICC. 01 00770 +C* VERSION 11(9) as of 09-SEP-92. 01 00780 +C* a. Commented out pub comment coding of version 11(6) and 01 00790 +C* put CC on "S G" for now. 01 00800 +C* b. Included 3% uncertainty in theory in checking for 01 00810 +C* doing new output. Changed artificial uncertainty 01 00820 +C* from 1% to 3% for obtaining strings for pure 01 00830 +C* multipoles or where calculated DCC=0. 01 00840 +C* c. Specifically typed all variables 01 00850 +C* d. Removed string concatanation because of problems noted01 00860 +C* by Bob Kinsey in MS FORTRAN 5.0. 01 00870 +C* e. Reorganized logic for outputting K/T,... to reduce 01 00880 +C* redundant coding. 01 00890 +C* f. Corrected two array overflow errors affecting 01 00900 +C* derivation of Z for COMMENTS and REFERENCES data sets 01 00910 +C* and for Z>103 and computation of Eg+/-Delta Eg. 01 00920 +C* g. Corrected oversight which caused loss of uncertainty 01 00930 +C* when DATSTR corrected for roundoff error. 01 00940 +C* h. Added check to include 3% uncertainty in theory when 01 00950 +C* determining significant digits to output. 01 00960 +C* i. Patched MIXOUT to handle evaluators who put asymmetric01 00970 +C* uncertainties in backwards 01 00980 +C* j. Initialized logical TO1370 to .FALSE. on entry to 01 00990 +C* OUTCC to solve problem of program sometimes not 01 01000 +C* outputing new cards 01 01010 +C* k. Added XDATE logic for IBM and IPC 01 01020 +C* l. Added terminal output of version number and date 01 01030 +C* VERSION 11(10) as of 03-Aug-93. Changed environment variable for 01 01040 +C* VAX 01 01050 +C* VERSION 11(11) as of 23-Nov-93. 01 01060 +C* a. Corrected logic error in OUTICC which was setting SKIP01 01070 +C* incorrectly 01 01080 +C* b. Implemented F&P subcommittee recomendation to multiply01 01090 +C* L=3,4 coefficients by 0.975 10 and 0.975 5, 01 01100 +C* respectively (Cf. 90Ne01). 01 01110 +C* c. Modified DO 13 loop in SPLINE to avoid optimization 01 01120 +C* dependent problems. 01 01130 +C* VERSION 11(12) as of 15-Aug-94. 01 01140 +C* a. Corrected math library floating overflow in FIT 01 01150 +C* b. Reorganized FIT to reduce calculations and avoid 01 01160 +C* floating overflows 01 01170 +C* Version 11(13) as of 04-Mar-96. 01 01180 +C* Corrected typo error in MIXOUT 01 01190 +C* Version 11.13a as of 08-Feb-1999. 01 01200 +C* Corrected output on "S G" record for nonnumeric 01 01210 +C* uncertainties 01 01220 +C* Corrected for Y2K 01 01230 +C* Version 11.13b as of 12-Apr-1999. 01 01240 +C* Check for Ionized Atom dataset and skip if so 01 01250 +C* Improved ANS FORTRAN 77 compliance 01 01260 +C* Version 11.13c as of 9-Feb-2001 01 01270 +C* Added UNX MDC (Linux and GNU f77) (RRK) 01 01280 +C* Version 11.13d as of 20-Mar-2001 01 01290 +C* Corrected problems introduced in 11.13c (TWB) 01 01300 +C* Version 11.13e as of 17-Sep-2001 01 01310 +C* Added terminal warning if "2 G" record to be replaced 01 01320 +C* has quantities not output by HSICC 01 01330 +C* Version 11.13f as of 9-Oct-2001 01 01340 +C* Missing leading blank on non-numerical DCC when placed 01 01350 +C on "S G" records - fixed. 01 01360 +C* 01 01370 +C* REFER ALL COMMENTS AND INQUIRIES TO 01 01380 +C* NATIONAL NUCLEAR DATA CENTER 01 01390 +C* BUILDING 197D 01 01400 +C* BROOKHAVEN NATIONAL LABORATORY 01 01410 +C* UPTON, NEW YORK 11973 01 01420 +C* TELEPHONE 631-344-2901 COMM 01 01430 +C* 01 01440 +C***********************************************************************01 01450 +C* 01 01460 +C* 01 01470 +C ORNL-NDP HSICC PROGRAM FOR ENSDF DATASETS. 01 01480 +C 01 01490 +C THIS VERSION OF THE HAGER SELTZER PROGRAM REQUIRES STANDARD 01 01500 +C DATA BANK CARDS AS INPUT. 01 01510 +C 01 01520 +C FIRST CARD MUST BE AN I D RECORD, BLANK IN COL. 6-8. 01 01530 +C 01 01540 +C CARDS ARE SKIPPED UNLESS THERE ARE BLANKS IN COLUMNS 6 AND 7 01 01550 +C AND A G IN COLUMN 8. 01 01560 +C 01 01570 +C ENERGIES ARE PICKED UP BY FORMAT (F10.6) FROM COLS 10-19. 01 01580 +C 01 01590 +C 01 01600 +C WRITTEN BY W.B.EWBANK, MODIFIED BY W.B.E. AND J.BELL (10/76) 01 01610 +C 01 01620 +C******************** 01 01630 + PROGRAM HSICC 01 01640 +C 01 01650 + INTEGER IPCDIM 01 01660 + PARAMETER(IPCDIM=13004) 01 01670 +C 01 01680 + INTEGER MP1,MPSW 01 01690 + REAL DATM(10, 8),RKL(8),RML(8),TCC(8),TCL(8),TCM(8),TLE(8), 01 01700 + 1 TME(8) 01 01710 + COMMON /OUTDAT/ DATM,TCL,RKL,TLE,TCM,RML,TME,TCC,MP1,MPSW 01 01720 + CHARACTER*11 XDATE 01 01730 + CHARACTER*10 STRMUL 01 01740 + CHARACTER*10 STRGE 01 01750 + CHARACTER*2 STRDGE 01 01760 + CHARACTER*5 NUCID 01 01770 + CHARACTER*6 STRDMR 01 01780 + CHARACTER*8 STRMR 01 01790 + COMMON/OUTDAC/ XDATE,STRMUL,STRGE,STRDGE,NUCID,STRMR,STRDMR 01 01800 +C 01 01810 +C Common HSCAL for subroutine HSICAL 01 01820 +C 01 01830 + REAL ALFTAB(23, 10, 8) 01 01840 + REAL ETAB(23, 10) 01 01850 + INTEGER NETAB(10) 01 01860 + INTEGER Z 01 01870 + COMMON /HSCAL/ Z,NETAB,ALFTAB,ETAB 01 01880 +C 01 01890 +C common MROUTN and MROUTC for subroutine MIXOUT, OUTICC 01 01900 +C 01 01910 + CHARACTER*2 OST(2) 01 01920 + CHARACTER*6 DMRSTR 01 01930 + COMMON /MROUTC/ OST,DMRSTR 01 01940 + INTEGER MPOL(2) 01 01950 + INTEGER NMP 01 01960 + LOGICAL MISMP2, E0MR 01 01970 + LOGICAL SKIP(10) 01 01980 + COMMON /MROUTN/ MPOL,NMP,MISMP2,E0MR,SKIP 01 01990 +C 01 02000 + REAL DATA(9) 01 02010 + REAL E(100) 01 02020 + REAL EK(100) 01 02030 + REAL ALPHE(23, 10, 8) 01 02040 + INTEGER CRDSEQ 01 02050 + INTEGER QRDSEQ(100) 01 02060 + INTEGER TBLKEY 01 02070 + INTEGER TYPSTR 01 02080 + INTEGER ZTAB 01 02090 + LOGICAL EOF5 01 02100 + LOGICAL SKPRD 01 02110 + LOGICAL MOREG 01 02120 + CHARACTER*2 EL 01 02130 + CHARACTER*80 CARD 01 02140 + CHARACTER*45 LINE 01 02150 + CHARACTER*2 SHOLD 01 02160 + CHARACTER*2 SHTAB 01 02170 + CHARACTER*5 STR 01 02180 + CHARACTER*10 STRA 01 02190 + CHARACTER*2 STRB 01 02200 + CHARACTER*5 STRZ 01 02210 +CTWB CHARACTER*80 PUBCOM 01 02220 + CHARACTER*160 QARD(100) 01 02230 + CHARACTER*7 TMPCC 01 02240 + CHARACTER*2 DTMPCC 01 02250 + LOGICAL MPFLAG, MPIGNR, TO1370 01 02260 +C 01 02270 +C-SKIP(K) TRUE INDICATES THAT NO CC CAN BE CALCULATED FOR THE KTH SUBSH 01 02280 +C SCOMNT(K) 1=too close to binding energy 01 02290 + DOUBLE PRECISION CCI,DXKC,DXLC,DXMC,DXNC 01 02300 + DOUBLE PRECISION DCC,DDKC,DDLC,DDMC,DDNC 01 02310 + REAL DUM1 01 02320 + REAL DUM2 01 02330 + REAL TCCP1,TI,XKC,XLC,XMC,XNC,DKC,DLC,DMC,DNC,DE,BEOFK 01 02340 +C 01 02350 + INTEGER dgcnt,I,J,K,l,IR,NE,IE,ISH,ISHELL,IQ,NP,NPOLD,JJ,KNP 01 02360 + Logical outdg 01 02370 + Character*2 outchr(2) 01 02380 +C 01 02390 + LOGICAL DOOUT 01 02400 + INTEGER LENSTR 01 02410 + REAL TUNCER 01 02420 + EXTERNAL DOOUT,LENSTR,TUNCER 01 02430 +C 01 02440 + Integer INDEX 01 02450 + REAL SNGL 01 02460 + INTRINSIC INDEX,SNGL 01 02470 + CHARACTER*7 VERSION 01 02480 + CHARACTER*11 VERDATE 01 02490 + DATA VERSION/'11.13f '/,VERDATE/'9-Oct-2001'/ 01 02500 +C 01 02510 +C-FILE 21 IS HS TABLE ENTRIES, FILE 22 IS AN ACCESS ROUTE TO FILE 21. 01 02520 +C 01 02530 + 9080 FORMAT(A, I5) 01 02540 + 9081 FORMAT('+', 90X,A) 01 02550 + 9082 FORMAT('+',99X,A) 01 02560 + 9100 FORMAT(A,//) 01 02570 + 9200 FORMAT(1X, I5, ': ', A) 01 02580 + 9201 FORMAT(///1X, I5, ': ', A) 01 02590 + 9300 FORMAT(1X, I5, ': ', 4X, A) 01 02600 + 9901 FORMAT(A,/,A) 01 02610 + 9900 FORMAT(A) 01 02620 +C 01 02630 + WRITE(6,FMT='(A)')' HSICC Version '//version//'['//verdate//']' 01 02640 + WRITE(6,9901) 'INPUT FILES -',' DATA DECK (DEF: data.tst): ' 01 02650 + READ(5, 9900) LINE 01 02660 + IF(LINE.EQ.' ') LINE='data.tst' 01 02670 +C+++MDC+++ 01 02680 +C...UNX,ANS 01 02690 + OPEN(UNIT=35, STATUS='OLD', FILE=LINE,ERR=1520) 01 02700 +C...VAX,DVF 01 02710 +C/ OPEN(UNIT=35,STATUS='OLD',READONLY,FILE=LINE,ERR=1520) 01 02720 +C...VAX 01 02730 +C/ WRITE(6, 9902)' ICC INDEX (DEF: ICCNDX.DAT): ' 01 02740 +C/ 9902 FORMAT(A,$) 01 02750 +C/ READ(5,9900) LINE 01 02760 +C/ IF(LINE.EQ.' ') LINE='ANALENSDF:ICCNDX.DAT' 01 02770 +C/ OPEN(UNIT=22, ACCESS='DIRECT', FORM='UNFORMATTED',READONLY, 01 02780 +C/ + RECL=1, 01 02790 +C/ 1 FILE=LINE, 01 02800 +C/ + STATUS='OLD') 01 02810 +C/ WRITE(6,9902)' ICC TABLE (DEF: ICCTBL.DAT): ' 01 02820 +C/ READ(5,9900) LINE 01 02830 +C/ IF(LINE.EQ.' ') LINE='ANALENSDF:ICCTBL.DAT' 01 02840 +C/ OPEN(UNIT=21, ACCESS='DIRECT', FORM='UNFORMATTED',READONLY, 01 02850 +C/ + RECL=11, 01 02860 +C/ 1 FILE=LINE, 01 02870 +C/ 1 STATUS='OLD') 01 02880 +C...DVF, UNX 01 02890 + WRITE(6, 9902)' ICC INDEX (DEF: iccndx.dat): ' 01 02900 + 9902 FORMAT(A,$) 01 02910 + READ(5,9900) LINE 01 02920 + IF(LINE.EQ.' ') LINE='iccndx.dat' 01 02930 + OPEN(UNIT=22, ACCESS='DIRECT', FORM='UNFORMATTED',RECL=4, 01 02940 + 1 FILE=LINE, 01 02950 + + STATUS='OLD') 01 02960 + WRITE(6,9902)' ICC TABLE (DEF: icctbl.dat): ' 01 02970 + READ(5,9900) LINE 01 02980 + IF(LINE.EQ.' ') LINE='icctbl.dat' 01 02990 + OPEN(UNIT=21, ACCESS='DIRECT', FORM='UNFORMATTED',RECL=44, 01 03000 + 1 FILE=LINE, 01 03010 + 1 STATUS='OLD') 01 03020 +C...ANS 01 03030 +C/ WRITE(6, 9900)' ICC INDEX (DEF: ICCNDX.DAT): ' 01 03040 +C/ LINE=' ' 01 03050 +C/ READ(5,9900) LINE 01 03060 +C/ IF(LINE.EQ.' ') LINE='ICCNDX.DAT' 01 03070 +C/ OPEN(UNIT=22, ACCESS='DIRECT', FORM='UNFORMATTED', 01 03080 +C/ + RECL=4, 01 03090 +C/ 1 FILE=LINE, 01 03100 +C/ + STATUS='OLD') 01 03110 +C/ WRITE(6,9900)' ICC TABLE (DEF: ICCTBL.DAT): ' 01 03120 +C/ LINE=' ' 01 03130 +C/ READ(5,9900) LINE 01 03140 +C/ IF(LINE.EQ.' ') LINE='ICCTBL.DAT' 01 03150 +C/ OPEN(UNIT=21, ACCESS='DIRECT', FORM='UNFORMATTED', 01 03160 +C/ + RECL=44, 01 03170 +C/ 1 FILE=LINE, 01 03180 +C/ 1 STATUS='OLD') 01 03190 +C---MDC--- 01 03200 + WRITE(6,9901)'OUTPUT FILES -', 01 03210 + + ' COMPLETE H.S. CALCULATIONS REPORT (DEF: hscalc.lst): ' 01 03220 + LINE=' ' 01 03230 + READ(5,9900) LINE 01 03240 + IF(LINE.EQ.' ')LINE='hscalc.lst' 01 03250 + OPEN(UNIT=36, FILE=LINE,STATUS='UNKNOWN') 01 03260 + WRITE(6,9900)' NEW G/SG CARD DECK (DEF: cards.new): ' 01 03270 + LINE=' ' 01 03280 + READ(5,9900) LINE 01 03290 + IF(LINE.EQ.' ') LINE='cards.new' 01 03300 +C+++MDC+++ 01 03310 +C...DVF,ANS,UNX 01 03320 + OPEN(UNIT=37,FILE=LINE,STATUS='UNKNOWN') 01 03330 +C...VAX 01 03340 +C/ OPEN(UNIT=37, CARRIAGECONTROL='LIST', FILE=LINE, STATUS='NEW') 01 03350 +C---MDC--- 01 03360 + WRITE(6,9900) 01 03370 + 1 ' G/2G (NEW/OLD) COMPARISON REPORT (DEF: compar.lst): ' 01 03380 + LINE=' ' 01 03390 + READ(5,9900) LINE 01 03400 + IF(LINE.EQ.' ') LINE='compar.lst' 01 03410 + OPEN(UNIT=38, ACCESS='SEQUENTIAL', FILE=LINE,STATUS='UNKNOWN') 01 03420 + WRITE(6,9900) 01 03430 + 1 ' CALC CONV. COEFS. ONLY IF MULTIPOL. KNOWN (Y OR CR): ' 01 03440 + LINE=' ' 01 03450 + READ(5,9900) LINE 01 03460 + MPFLAG = .FALSE. 01 03470 + IF (LINE(1:1) .EQ. 'Y' .OR. LINE(1:1) .EQ. 'y') MPFLAG = .TRUE. 01 03480 + MPIGNR = .FALSE. 01 03490 + XDATE=' ' 01 03500 +C 01 03510 +C+++MDC+++ 01 03520 +C...DVF,VAX,UNX 01 03530 + CALL DATE_20(XDATE) 01 03540 +C...ANS 01 03550 +C---MDC--- 01 03560 + WRITE(36, 9100) 01 03570 + 2 '1PROGRAM H S I C C VERSION '//version//' AS OF '//verdate 01 03580 + WRITE(38, 9100) 01 03590 + 2 '1PROGRAM H S I C C VERSION '//version//' AS OF '//verdate 01 03600 +C 01 03610 +C-PREPARE MISC. CONSTANTS. 01 03620 +C 01 03630 + DO 110 I = 1, 100 01 03640 + QARD(I)=' ' 01 03650 + QRDSEQ(I) = 0 01 03660 + 110 CONTINUE 01 03670 + CRDSEQ = 0 01 03680 +C 01 03690 +C-INITIALIZE READ AND CALCULATIONAL VARIABLES 01 03700 +C 01 03710 + 120 DO 130 J = 1, 10 01 03720 + NETAB(J) = 0 01 03730 + DO 130 I = 1, 23 01 03740 + ETAB(I, J) = 0.0 01 03750 + DO 130 K = 1, 8 01 03760 + ALFTAB(I, J, K) = 0.0 01 03770 + ALPHE(I, J, K) = 0.0 01 03780 + 130 CONTINUE 01 03790 + DO 150 I = 1, 100 01 03800 + E(I) = 0.0 01 03810 + 150 CONTINUE 01 03820 +C 01 03830 + SHOLD =' ' 01 03840 + IR = -1 01 03850 + NE = 0 01 03860 + EL = ' ' 01 03870 + EOF5 = .FALSE. 01 03880 + SKPRD = .FALSE. 01 03890 +C 01 03900 +C-READ IN Z VALUE FROM FIRST CARD 01 03910 +C 01 03920 + IR = IR + 1 01 03930 + IF (.NOT.SKPRD) THEN 01 03940 +155 Continue 01 03950 + READ(35, 9900, END=1600) CARD 01 03960 + CRDSEQ = CRDSEQ + 1 01 03970 +C Check to see if this is an Ionized Atom and skip if so 01 03980 + If(INDEX(card(10:39),' DECAY').GT.0 .AND. 01 03990 + 2 (INDEX(card(10:39),'[').GT.0 01 04000 + 3 .AND. INDEX(card(10:39),'[') 01 04010 + 4 .LT.INDEX(card(10:39),' DECAY')))Then 01 04020 + Write(36,9200)crdseq,card 01 04030 + Write(36,FMT='(8X,A)')'Ionized Atom - Skipping' 01 04040 +160 Continue 01 04050 + Read(35,9900,END=1600)card 01 04060 + crdseq=crdseq+1 01 04070 + If(card(1:8) .EQ. ' ')Then 01 04080 + GoTo 155 01 04090 + Else 01 04100 + GoTo 160 01 04110 + EndIf 01 04120 + EndIf 01 04130 + ENDIF 01 04140 + WRITE(36, 9200) CRDSEQ, CARD 01 04150 + IF (CARD(4:4).NE.' ') WRITE(38, 9201) CRDSEQ, CARD 01 04160 + IF (EOF5) GOTO 1600 01 04170 + SKPRD = .FALSE. 01 04180 + IF (IR .LE. 0) THEN 01 04190 + STRZ=CARD(1:5) 01 04200 + DO 220 I = 1, 4 01 04210 + IF(TYPSTR(STRZ(I:I)).EQ.2) GO TO 230 01 04220 + 220 CONTINUE 01 04230 +C Either a COMMENTS or REFERENCES data set or numeric symbol 01 04240 +C for Z 01 04250 + IF(STRZ(4:5) .EQ. ' ')THEN 01 04260 + GOTO 120 01 04270 + ELSE 01 04280 + I=4 01 04290 + ENDIF 01 04300 + 230 EL=STRZ(I:I+1) 01 04310 +C-IZEL YIELDS Z NUMBER FROM CHEMICAL SYMBOL 01 04320 + CALL IZEL(EL,Z) 01 04330 + IF (Z .LT. 0) GOTO 120 01 04340 + STR=CARD(6:8) 01 04350 +C 01 04360 + IF(STR.NE.' ') GO TO 120 01 04370 + ENDIF 01 04380 +C 01 04390 +C-TABLE RANGE IS Z = 2 TO Z = 103 01 04400 +C 01 04410 + IF (Z .GT. 103) GOTO 1500 01 04420 + IF (Z .LT. 14) THEN 01 04430 + IF(Z .NE. 10 .OR. Z.NE.6 .OR. Z.NE.3) GO TO 1500 01 04440 + ENDIF 01 04450 +C 01 04460 + READ(22,REC=Z) TBLKEY 01 04470 + IF (TBLKEY .EQ. 0) GOTO 1500 01 04480 + IE = 0 01 04490 +C 01 04500 +C-READ DATA FROM TABLES, ORDERED BY Z, SUBSHELL, AND MULTIPOLARITY 01 04510 +C-DATA HOLDS TABLE GAMMA ENERGY AND ICC VALUES FOR THE CURRENT SUBSHEL 01 04520 +C Read data logic below changed to simplify (9/25/90) elim ASSIGN etc 01 04530 +C 01 04540 + 250 READ(21,REC=TBLKEY) ZTAB, SHTAB, DATA 01 04550 + TBLKEY=TBLKEY+1 01 04560 +C 01 04570 +C-EXIT FROM FILE READ LOOP WHEN TABLE VALUES FOR GIVEN Z EXHAUSTED 01 04580 +C 01 04590 + IF (ZTAB .EQ. Z) THEN 01 04600 + IF (SHOLD .NE. SHTAB) THEN 01 04610 + SHOLD = SHTAB 01 04620 + IF (IE .NE. 0) NETAB(ISH) = IE 01 04630 + IE = 0 01 04640 + IF(SHTAB(1:1).EQ.'K') THEN 01 04650 + ISH = 1 01 04660 + ELSE IF(SHTAB(1:1).EQ.'L') THEN 01 04670 + READ(SHTAB(2:2),'(I1)') ISHELL 01 04680 + ISH = ISHELL + 1 01 04690 + ELSE IF(SHTAB(1:1).EQ.'M') THEN 01 04700 + READ(SHTAB(2:2),'(I1)') ISHELL 01 04710 + ISH = ISHELL + 4 01 04720 + ELSE IF(SHTAB(1:1).EQ.'N') THEN 01 04730 + ISH=10 01 04740 + ELSE 01 04750 + ENDIF 01 04760 + ENDIF 01 04770 +C 01 04780 + IE = IE + 1 01 04790 +C-ETAB IS TABLE GAMMA ENERGY, ALFTAB IS TABULAR ICC FOR THE 8 MULTIPO 01 04800 + ETAB(IE, ISH) = DATA(1) 01 04810 + DO 350 I = 1, 8 01 04820 + ALFTAB(IE, ISH, I) = DATA(I + 1) 01 04830 + 350 CONTINUE 01 04840 + IF (TBLKEY .LE. 13004) GOTO 250 01 04850 +C 01 04860 + ENDIF 01 04870 + IF (IE .NE. 0) NETAB(ISH) = IE 01 04880 +C 01 04890 +C-READ IN GAMMA ENERGIES 01 04900 +C 01 04910 + WRITE(36, 9300) CRDSEQ, CARD 01 04920 +C 01 04930 +C-RETURN HERE IF MORE THAN 100 GAMMA ENERGIES 01 04940 +C 01 04950 + 400 MOREG = .FALSE. 01 04960 + NE = 0 01 04970 + DO 450 I = 1, 100 01 04980 + 410 READ(35, 9900, END=460) CARD 01 04990 + CRDSEQ = CRDSEQ + 1 01 05000 + WRITE(36, 9300) CRDSEQ, CARD 01 05010 + IF(CARD(1:3).EQ.'END') GO TO 500 01 05020 + IF(CARD(1:8).EQ.' ') THEN 01 05030 + SKPRD=.FALSE. 01 05040 +C-NO GAMMAS IN DATA SET, GO BACK TO READ THE NEXT SET 01 05050 + IF(NE.EQ.0) GO TO 120 01 05060 + GO TO 500 01 05070 + ENDIF 01 05080 + STR=CARD(6:10) 01 05090 +C-IF NOT GAMMA RECORD, READ NEXT CARD 01 05100 + IF(STR(1:3).EQ.'2 G' .OR. STR(1:3).EQ.'S G') THEN 01 05110 +C 01 05120 +C-SAVE SECOND CARD FOR LATER COMPARISON 01 05130 +C 01 05140 + IF (NE .LE. 0) GOTO 410 01 05150 + CARD(6:6)='S' 01 05160 + IF (MPIGNR) GOTO 410 01 05170 + QARD(NE)(81:160)=CARD 01 05180 + GOTO 410 01 05190 + ENDIF 01 05200 + IF(STR(1:3).NE.' G' .AND. STR(1:3).NE.'1 G') THEN 01 05210 + IF(STR(1:3).NE.' ') THEN 01 05220 + GO TO 410 01 05230 + ELSE 01 05240 +C 01 05250 +C end of a set 01 05260 +C 01 05270 + IQ = INDEX(CARD, STRZ(1:2)) 01 05280 + IF ((IQ .NE. 0) .AND. (IQ .LE. 4)) GOTO 410 01 05290 + IF(CARD(1:5).EQ.' ') GO TO 410 01 05300 + SKPRD = .TRUE. 01 05310 +C-NO GAMMAS IN DATA SET, GO BACK TO READ THE NEXT SET 01 05320 + IF(NE.EQ.0) GO TO 120 01 05330 + GO TO 500 01 05340 + ENDIF 01 05350 + ENDIF 01 05360 +C 01 05370 +C gamma record 01 05380 +C-PREPARE ALPHAMERIC INPUT TO YIELD GAMMA ENERGY, MULTIPOLES, AND MIXI 01 05390 +C 01 05400 + IF (MPFLAG) THEN 01 05410 + STRA=CARD(32:41) 01 05420 + MPIGNR = .FALSE. 01 05430 + IF(LENSTR(STRA).LE.0) THEN 01 05440 + MPIGNR = .TRUE. 01 05450 + GOTO 410 01 05460 + ENDIF 01 05470 + ENDIF 01 05480 + STRA=CARD(10:19) 01 05490 + STRB=CARD(20:21) 01 05500 + QARD(I)=CARD 01 05510 + QRDSEQ(I) = CRDSEQ 01 05520 + CALL CNVS2U(STRA, STRB, DUM1, DUM2) 01 05530 + E(I) = DUM1 01 05540 +C 01 05550 +C 01 05560 + NE = I 01 05570 + 450 CONTINUE 01 05580 + MOREG = .TRUE. 01 05590 + GOTO 500 01 05600 +C 01 05610 +C end of file 01 05620 +C 01 05630 + 460 EOF5 = .TRUE. 01 05640 + SKPRD = .FALSE. 01 05650 +C-NO GAMMAS IN DATA SET, GO BACK TO READ THE NEXT SET 01 05660 + IF (NE .EQ. 0) GOTO 120 01 05670 +C 01 05680 +C-ARRANGE GAMMAS IN ORDER OF INCREASING ENERGY, CARRYING MULTIPOLE AND 01 05690 +C-DATA WITH THEM 01 05700 +C 01 05710 + 500 CALL SORT_LOCAL(E, NE, QARD, QRDSEQ) 01 05720 +C 01 05730 + WRITE(36, 9900) Char(12) 01 05740 +C 01 05750 +C-'FIT' CAN ONLY HANDLE 23 ENERGIES IN ONE PASS 01 05760 +C 01 05770 + 510 NP = 23 01 05780 + IF (NE .LT. 24) NP = NE 01 05790 + NPOLD = NP 01 05800 + DO 520 I = 1, NP 01 05810 + EK(I) = E(I) 01 05820 + 520 CONTINUE 01 05830 +C 01 05840 +C calculate icc's 01 05850 +C 01 05860 + CALL HSICAL(NPOLD,EK,ALPHE) 01 05870 +C 01 05880 +C-OUTPUT LOOP 01 05890 +C 01 05900 + DO 1400 I = 1, NP 01 05910 +C 01 05920 + STRMUL=QARD(I)(32:41) 01 05930 + STRGE=QARD(I)(10:19) 01 05940 + STRDGE=QARD(I)(20:21) 01 05950 + NUCID=QARD(I)(1:5) 01 05960 + STRMR=QARD(I)(42:49) 01 05970 + STRDMR=QARD(I)(50:55) 01 05980 +C 01 05990 +C Do OUTPUT 01 06000 +C 01 06010 + CALL OUTICC(I,EK,TO1370,ALPHE) 01 06020 +C 01 06030 +C for both multi and pure multiples 01 06040 +C For single ones, DCC values will never be used. 01 06050 +C 01 06060 + IF(TO1370) GO TO 1370 01 06070 + CCI = TCC(MP1) 01 06080 + IF (CCI .NE. 0.0) THEN 01 06090 + DCC = AMAX1(ABS(TCC(4)), ABS(TCC(5))) 01 06100 + ELSE 01 06110 + CCI = TME(MP1) 01 06120 + IF (CCI .NE. 0.0) THEN 01 06130 + DCC = AMAX1(ABS(TME(4)), ABS(TME(5))) 01 06140 + ELSE 01 06150 + CCI = TLE(MP1) 01 06160 + IF (CCI .NE. 0.0) DCC = AMAX1(ABS(TLE(4)), ABS(TLE(5))) 01 06170 + ENDIF 01 06180 + ENDIF 01 06190 +C 01 06200 + TCCP1 = 1.0 + CCI 01 06210 +C-ARTIFICIAL UNCERTAINTY SET AT 1 PER CENT FOR RIGHT NUMBER OF DIGITS 01 06220 +C Changed to 3% (TWB 03-Sep-92) 01 06230 + IF (MPSW .EQ. 1) DCC = 0.03 * CCI 01 06240 +C 01 06250 +C get TI value from old G card (before it gets written over) 01 06260 +C 01 06270 + STRA=QARD(I)(65:74) 01 06280 + STRB=QARD(I)(75:76) 01 06290 + CALL CNVS2U(STRA,STRB,TI,DUM2) 01 06300 + DUM2=0. 01 06310 +C 01 06320 +C if E0 in MR, warning (9/91) 01 06330 +C 01 06340 + IF(E0MR) WRITE(36, '(A)') 01 06350 + 1 ' No conversion coefficient calculated' 01 06360 +C 01 06370 +C-PRINT OLD G-CARD FOR COMPARISON 01 06380 +C 01 06390 + WRITE(36, 9900)' COMPARE OLD/NEW CARDS' 01 06400 + WRITE(38, 9900)' COMPARE OLD/NEW CARDS' 01 06410 + WRITE(36, 9200) QRDSEQ(I), QARD(I)(1:80) 01 06420 + WRITE(38, 9200) QRDSEQ(I), QARD(I)(1:80) 01 06430 + WRITE(36, 9081)'OLD CARD' 01 06440 + WRITE(38, 9081)'OLD CARD' 01 06450 +C 01 06460 +C If DE is a limit, or if No 2nd MP given though MR exists, 01 06470 +C then no new card 01 06480 +C When no MR but 2 multipoles, get 2nd card (9/91) 01 06490 +C ALSO if cci/tccp1 too small, no 2nd card 01 06500 +C 01 06510 +C Take into account 3% uncertainty in theory in determining 01 06520 +C suppression of output (TWB 03-Sep-92) 01 06530 +C 01 06540 + IF(STRDGE.EQ.'LG' .OR. MISMP2 .OR. E0MR .OR. 01 06550 + 1 .NOT.DOOUT(SNGL(CCI),SNGL(DCC),TCCP1,1.E-4)) THEN 01 06560 + WRITE(36,9082) 'KEPT' 01 06570 + WRITE(38,9082) 'KEPT' 01 06580 + IF(QARD(I)(81:88).NE.' ') THEN 01 06590 + WRITE(36, 9200) QRDSEQ(I), QARD(I)(81:160) 01 06600 + WRITE(38, 9200) QRDSEQ(I), QARD(I)(81:160) 01 06610 + WRITE(36, 9081)'OLD CARD' 01 06620 + WRITE(38, 9081)'OLD CARD' 01 06630 + Call GivWarn(qrdseq(i),qard(i)(81:160),qard(i)(1:80)) 01 06640 + ENDIF 01 06650 + GO TO 1370 01 06660 + ENDIF 01 06670 +C 01 06680 + CALL DATSTR(CCI, DCC, STRA, 7, STRB, 2, MPSW) 01 06690 + IF(.NOT.(MPSW .EQ. 1 .OR. DCC .EQ. 0.D0)) 01 06700 + 2 CALL CHKTHE(CCI,DCC,STRA,STRB) 01 06710 + CALL CENTER(STRA,7) 01 06720 + QARD(I)(56:62)=STRA 01 06730 + QARD(I)(63:64)=' ' 01 06740 + IF (MPSW .NE. 1) QARD(I)(63:64)=STRB 01 06750 + IF (STRDGE .EQ. 'AP' .OR. DMRSTR.EQ.'AP') QARD(I)(63:64)='AP' 01 06760 +C 01 06770 +C Following section implementing publication comment commented out 01 06780 +C since no resources available to implement full publication 01 06790 +C comment format (TWB 03-Sep-92) 01 06800 +CTWBC 01 06810 +CTWBC WRITE NEW G CARD 01 06820 +CTWBC 01 06830 +CTWB WRITE(36, 9200) QRDSEQ(I), QARD(I)(1:80) 01 06840 +CTWB WRITE(37, 9080) QARD(I)(1:80), QRDSEQ(I) 01 06850 +CTWB WRITE(38, 9200) QRDSEQ(I), QARD(I)(1:80) 01 06860 +CTWB 01 06870 +CTWBC if CC .LT. 0.01 write pubcomment (9/91) 01 06880 +CTWBC 01 06890 +CTWB IF((CCI/TCCP1).LT.0.01) THEN 01 06900 +CTWB PUBCOM=QARD(I)(1:5)//' PG PUB=''CC'' ' 01 06910 +CTWB WRITE(36,9200) QRDSEQ(I),PUBCOM 01 06920 +CTWB WRITE(37,9080) PUBCOM,QRDSEQ(I) 01 06930 +CTWB WRITE(38,9200) QRDSEQ(I),PUBCOM 01 06940 +CTWB GO TO 1370 01 06950 +CTWB ENDIF 01 06960 +C Temporary expedient will be to retain CC on the "S G" continuation 01 06970 +C record if .LT. 1% . Also, take into account the 3% uncertainty in 01 06980 +C theory (TWB 03-Sep-92) 01 06990 +C Test for outputting DG record on change in L=3,4 coefficients 01 07000 + outdg=.FALSE. 01 07010 + dgcnt=0 01 07020 + Do 900 l=1,2 01 07030 + If(ost(l)(2:2) .EQ. '3' .OR. ost(l)(2:2) .EQ. '4')Then 01 07040 + outdg=.TRUE. 01 07050 + dgcnt=dgcnt+1 01 07060 + outchr(dgcnt)=ost(l) 01 07070 + Endif 01 07080 +900 Continue 01 07090 + IF(.NOT.DOOUT(SNGL(CCI),SNGL(DCC),TCCP1,0.01)) THEN 01 07100 +C Save CC and DCC 01 07110 + TMPCC=QARD(I)(56:62) 01 07120 + CALL LBSUP(TMPCC) 01 07130 + DTMPCC=QARD(I)(63:64) 01 07140 + CALL LBSUP(DTMPCC) 01 07150 +C Blank out CC and DCC fields on new record and output 01 07160 + QARD(I)(56:64)=' ' 01 07170 + WRITE(36, 9200) QRDSEQ(I), QARD(I)(1:80) 01 07180 + WRITE(37, 9080) QARD(I)(1:80), QRDSEQ(I) 01 07190 + WRITE(38, 9200) QRDSEQ(I), QARD(I)(1:80) 01 07200 +C Put CC and DCC on "S G" record 01 07210 + QARD(I)(6:6)='S' 01 07220 + If(Typstr(dtmpcc).EQ.0 .OR. Typstr(dtmpcc).EQ.1)Then 01 07230 + QARD(I)(10:80)='CC=' 01 07240 + J=LENSTR(QARD(I)(1:80))+1 01 07250 + QARD(I)(J:80)=TMPCC 01 07260 + J=LENSTR(QARD(I)(1:80))+2 01 07270 + QARD(I)(J:80)=DTMPCC 01 07280 + Else 01 07290 + QARD(i)(10:80)='CC '//dtmpcc 01 07300 + j=Lenstr(qard(i)(1:80))+2 01 07310 + qard(i)(j:80)=tmpcc 01 07320 + EndIf 01 07330 + J=LENSTR(QARD(I)(1:80))+1 01 07340 + QARD(I)(J:80)='$' 01 07350 + ELSE 01 07360 + WRITE(36, 9200) QRDSEQ(I), QARD(I)(1:80) 01 07370 + WRITE(37, 9080) QARD(I)(1:80), QRDSEQ(I) 01 07380 + WRITE(38, 9200) QRDSEQ(I), QARD(I)(1:80) 01 07390 + QARD(I)(9:80)=' ' 01 07400 + QARD(I)(6:6)='S' 01 07410 + ENDIF 01 07420 +C 01 07430 +C make new 2nd card 01 07440 +C if TI exists, use K/T etc. 01 07450 +C 01 07460 + XKC = DATM(1, MP1) 01 07470 + XLC = TCL(MP1) 01 07480 + XMC = TCM(MP1) 01 07490 + XNC = DATM(10, MP1) 01 07500 + IF(MPSW .EQ. 1)THEN 01 07510 + DKC=0. 01 07520 + DLC=0. 01 07530 + DMC=0. 01 07540 + DNC=0. 01 07550 + ELSE 01 07560 + DKC = AMAX1(ABS(DATM(1, 4)), ABS(DATM(1, 5))) 01 07570 + DLC = AMAX1(ABS(TCL(4)), ABS(TCL(5))) 01 07580 + DMC = AMAX1(ABS(TCM(4)), ABS(TCM(5))) 01 07590 + DNC = AMAX1(ABS(DATM(10, 4)), ABS(DATM(10, 5))) 01 07600 + ENDIF 01 07610 +C-IF ENERGY IS OUT OF DRAGOUN'S RANGE, USE 1/3 * TOTAL M 01 07620 + IF (XNC .EQ. 0.0)THEN 01 07630 + XNC = 0.33 * TCM(MP1) 01 07640 + DNC=0.0 01 07650 + ENDIF 01 07660 +C 01 07670 + IF (.NOT.SKIP(1)) THEN 01 07680 +C-PUT K-COEFFICIENTS ONTO SECOND G-CARD 01 07690 + IF(DOOUT(XKC,DKC,TCCP1,1.E-4)) THEN 01 07700 + J=LENSTR(QARD(I)(1:80)) 01 07710 + IF(J.LT.9) J=9 01 07720 + IF(TI.EQ.0.) THEN 01 07730 + DXKC=XKC 01 07740 + DDKC=DKC 01 07750 + CALL DATSTR(DXKC, DDKC, STRA, 7, STRB, 2, MPSW) 01 07760 + IF(.NOT.(MPSW .EQ. 1 .OR. DCC .EQ. 0.D0)) 01 07770 + 2 CALL CHKTHE(DXKC,DDKC,STRA,STRB) 01 07780 + QARD(I)(J+1:80)='KC' 01 07790 + ELSE 01 07800 +C Output K/T since TI exists 01 07810 + CCI=XKC/TCCP1 01 07820 + DCC=0. 01 07830 + IF(MPSW.NE.1) DCC=TUNCER(XKC,TCCP1,XLC,XMC,XNC,DKC, 01 07840 + 2 DLC,DMC,DNC) 01 07850 + CALL DATSTR(CCI,DCC,STRA,7,STRB,2,MPSW) 01 07860 + QARD(I)(J+1:80)='K/T' 01 07870 + ENDIF 01 07880 + IF(STRDGE.EQ.'AP'.OR. DMRSTR.EQ.'AP') STRB='AP' 01 07890 + CALL LBSUP(STRA) 01 07900 + JJ=LENSTR(STRA) 01 07910 + J=LENSTR(QARD(I)(1:80)) 01 07920 + CALL LBSUP(STRB) 01 07930 + If(Typstr(strb).EQ.0 .OR. Typstr(strb).EQ.1)Then 01 07940 + qard(i)(j+1:80)='=' 01 07950 + j=Lenstr(qard(i)(1:80)) 01 07960 + qard(i)(j+1:80)=stra(1:jj) 01 07970 + j=Lenstr(qard(i)(1:80)) 01 07980 + qard(i)(j+2:80)=strb 01 07990 + Else 01 08000 + qard(i)(j+1:80)=' '//strb(1:lenstr(strb)) 01 08010 + j=Lenstr(qard(i)(1:80)) 01 08020 + qard(i)(j+2:80)=stra(1:jj) 01 08030 + EndIf 01 08040 + J=LENSTR(QARD(I)(1:80)) 01 08050 + QARD(I)(J+1:80)='$' 01 08060 + ENDIF 01 08070 + ENDIF 01 08080 +C-PUT L-COEFFICIENTS ONTO SECOND G-CARD 01 08090 + DO 1320 K = 2, 4 01 08100 + IF (SKIP(K)) GOTO 1330 01 08110 + 1320 CONTINUE 01 08120 + IF(DOOUT(XLC,DLC,TCCP1,1.E-4)) THEN 01 08130 + J=LENSTR(QARD(I)(1:80)) 01 08140 + IF(J.LT.9) J=9 01 08150 + IF(TI.EQ.0.) THEN 01 08160 + DXLC=XLC 01 08170 + DDLC=DLC 01 08180 + CALL DATSTR(DXLC, DDLC, STRA, 7, STRB, 2, MPSW) 01 08190 + IF(.NOT.(MPSW .EQ. 1 .OR. DCC .EQ. 0.D0)) 01 08200 + 2 CALL CHKTHE(DXLC,DDLC,STRA,STRB) 01 08210 + QARD(I)(J+1:80)='LC' 01 08220 + ELSE 01 08230 +C Output L/T since TI exists 01 08240 + CCI=XLC/TCCP1 01 08250 + DCC=0. 01 08260 + IF(MPSW.NE.1) DCC=TUNCER(XLC,TCCP1,XKC,XMC,XNC,DLC,DKC, 01 08270 + 2 DMC,DNC) 01 08280 + CALL DATSTR(CCI,DCC,STRA,7,STRB,2,MPSW) 01 08290 + QARD(I)(J+1:80)='L/T' 01 08300 + ENDIF 01 08310 + IF(STRDGE.EQ.'AP'.OR. DMRSTR.EQ.'AP') STRB='AP' 01 08320 + CALL LBSUP(STRA) 01 08330 + JJ=LENSTR(STRA) 01 08340 + J=LENSTR(QARD(I)(1:80)) 01 08350 + CALL LBSUP(STRB) 01 08360 + If(Typstr(strb).EQ.0 .OR. Typstr(strb).EQ.1)Then 01 08370 + qard(i)(j+1:80)='=' 01 08380 + j=Lenstr(qard(i)(1:80)) 01 08390 + qard(i)(j+1:80)=stra(1:jj) 01 08400 + j=Lenstr(qard(i)(1:80)) 01 08410 + qard(i)(j+2:80)=strb 01 08420 + Else 01 08430 + qard(i)(j+1:80)=' '//strb(1:lenstr(strb)) 01 08440 + j=Lenstr(qard(i)(1:80)) 01 08450 + qard(i)(j+2:80)=stra(1:jj) 01 08460 + EndIf 01 08470 + J=LENSTR(QARD(I)(1:80)) 01 08480 + QARD(I)(J+1:80)='$' 01 08490 + ENDIF 01 08500 +C-PUT M-COEFFICIENTS ONTO SECOND G-CARD 01 08510 + 1330 DO 1340 K = 5, 9 01 08520 + IF (SKIP(K)) GOTO 1350 01 08530 + 1340 CONTINUE 01 08540 + IF(DOOUT(XMC,DMC,TCCP1,1.E-4)) THEN 01 08550 + J=LENSTR(QARD(I)(1:80)) 01 08560 + IF(J.LT.9) J=9 01 08570 + IF(TI.EQ.0.) THEN 01 08580 + DXMC=XMC 01 08590 + DDMC=DMC 01 08600 + CALL DATSTR(DXMC, DDMC, STRA, 7, STRB, 2, MPSW) 01 08610 + IF(.NOT.(MPSW .EQ. 1 .OR. DCC .EQ. 0.D0)) 01 08620 + 2 CALL CHKTHE(DXMC,DDMC,STRA,STRB) 01 08630 + QARD(I)(J+1:80)='MC' 01 08640 + ELSE 01 08650 + CCI=XMC/TCCP1 01 08660 + DCC=0. 01 08670 + IF(MPSW.NE.1) DCC=TUNCER(XMC,TCCP1,XKC,XLC,XNC,DMC,DKC, 01 08680 + 1 DLC,DNC) 01 08690 + CALL DATSTR(CCI,DCC,STRA,7,STRB,2,MPSW) 01 08700 + QARD(I)(J+1:80)='M/T' 01 08710 + ENDIF 01 08720 + IF(STRDGE.EQ.'AP'.OR. DMRSTR.EQ.'AP') STRB='AP' 01 08730 + CALL LBSUP(STRA) 01 08740 + JJ=LENSTR(STRA) 01 08750 + J=LENSTR(QARD(I)(1:80)) 01 08760 + CALL LBSUP(STRB) 01 08770 + If(Typstr(strb).EQ.0 .OR. Typstr(strb).EQ.1)Then 01 08780 + qard(i)(j+1:80)='=' 01 08790 + j=Lenstr(qard(i)(1:80)) 01 08800 + qard(i)(j+1:80)=stra(1:jj) 01 08810 + j=Lenstr(qard(i)(1:80)) 01 08820 + qard(i)(j+2:80)=strb 01 08830 + Else 01 08840 + qard(i)(j+1:80)=' '//strb(1:lenstr(strb)) 01 08850 + j=Lenstr(qard(i)(1:80)) 01 08860 + qard(i)(j+2:80)=stra(1:jj) 01 08870 + EndIf 01 08880 + J=LENSTR(QARD(I)(1:80)) 01 08890 + QARD(I)(J+1:80)='$' 01 08900 + ENDIF 01 08910 +C-PUT N+COEFFICIENT ONTO SECOND G-CARD 01 08920 + 1350 IF (.NOT.SKIP(10)) THEN 01 08930 + IF(DOOUT(XNC,DNC,TCCP1,1.E-4)) THEN 01 08940 + J=LENSTR(QARD(I)(1:80)) 01 08950 + IF(J.LT.9) J=9 01 08960 + IF(TI.EQ.0.) THEN 01 08970 + DXNC=XNC 01 08980 + DDNC=DNC 01 08990 + CALL DATSTR(DXNC, DDNC, STRA, 7, STRB, 2, MPSW) 01 09000 + IF(.NOT.(MPSW .EQ. 1 .OR. DCC .EQ. 0.D0)) 01 09010 + 2 CALL CHKTHE(DXNC,DDNC,STRA,STRB) 01 09020 + QARD(I)(J+1:80)='NC+' 01 09030 + ELSE 01 09040 +C Output N/T since TI exists 01 09050 + CCI=XNC/TCCP1 01 09060 + DCC=0. 01 09070 + IF(MPSW.NE.1) DCC=TUNCER(XNC,TCCP1,XKC,XLC,XMC,DNC, 01 09080 + 2 DKC,DLC,DMC) 01 09090 + CALL DATSTR(CCI,DCC,STRA,7,STRB,2,MPSW) 01 09100 + QARD(I)(J+1:80)='N/T' 01 09110 + ENDIF 01 09120 + IF(STRDGE.EQ.'AP'.OR. DMRSTR.EQ.'AP') STRB='AP' 01 09130 + CALL LBSUP(STRA) 01 09140 + JJ=LENSTR(STRA) 01 09150 + J=LENSTR(QARD(I)(1:80)) 01 09160 + CALL LBSUP(STRB) 01 09170 + If(Typstr(strb).EQ.0 .OR. Typstr(strb).EQ.1)Then 01 09180 + qard(i)(j+1:80)='=' 01 09190 + j=Lenstr(qard(i)(1:80)) 01 09200 + qard(i)(j+1:80)=stra(1:jj) 01 09210 + j=Lenstr(qard(i)(1:80)) 01 09220 + qard(i)(j+2:80)=strb 01 09230 + Else 01 09240 + qard(i)(j+1:80)=' '//strb(1:lenstr(strb)) 01 09250 + j=Lenstr(qard(i)(1:80)) 01 09260 + qard(i)(j+2:80)=stra(1:jj) 01 09270 + EndIf 01 09280 + J=LENSTR(QARD(I)(1:80)) 01 09290 + QARD(I)(J+1:80)='$' 01 09300 + ENDIF 01 09310 + ENDIF 01 09320 + IF(QARD(I)(10:80).NE.' ') THEN 01 09330 + JJ=LENSTR(QARD(I)(1:80)) 01 09340 + IF(QARD(I)(JJ:JJ).EQ.'$') QARD(I)(JJ:JJ)=' ' 01 09350 +C 01 09360 +C WRITE 2ND CARD 01 09370 +C 01 09380 + WRITE(36, 9200) QRDSEQ(I), QARD(I)(1:80) 01 09390 + WRITE(37, 9080) QARD(I)(1:80), QRDSEQ(I) 01 09400 + WRITE(38, 9200) QRDSEQ(I), QARD(I)(1:80) 01 09410 + ENDIF 01 09420 +C 01 09430 +C-PRINT OUT OLD SECOND CARD (IF ANY) 01 09440 + WRITE(36, 9200) QRDSEQ(I), QARD(I)(81:160) 01 09450 + WRITE(38, 9200) QRDSEQ(I), QARD(I)(81:160) 01 09460 + IF(QARD(I)(81:88).EQ.' ') THEN 01 09470 + WRITE(36, 9081)'NO OLD SECOND CARD' 01 09480 + WRITE(38, 9081)'NO OLD SECOND CARD' 01 09490 + ELSE 01 09500 + WRITE(36, 9081)'OLD CARD' 01 09510 + WRITE(38, 9081)'OLD CARD' 01 09520 + Call GivWarn(qrdseq(i),qard(i)(81:160),qard(i)(1:80)) 01 09530 + ENDIF 01 09540 +C Write DG card if necessary 01 09550 + If(dgcnt .GT. 0)Then 01 09560 + qard(i)(6:)=' DG CC' 01 09570 + Call Addstr(qard(i),20,outchr(1)) 01 09580 + If(dgcnt .GT. 1)Then 01 09590 + Call Addstr(qard(i),Lenstr(qard(i))+1,',') 01 09600 + Call Addstr(qard(i),Lenstr(qard(i))+1,outchr(2)) 01 09610 + EndIf 01 09620 + Call Addstr(qard(i),Lenstr(qard(i))+2, 01 09630 + 2 'CC(THEORY)''S MULT. BY') 01 09640 + If(outchr(1)(2:2) .EQ. '3')Then 01 09650 + Call Addstr(qard(i),Lenstr(qard(i))+2,'0.975 10') 01 09660 + Else 01 09670 + Call Addstr(qard(i),Lenstr(qard(i))+2,'0.975 5') 01 09680 + EndIf 01 09690 + If(dgcnt .GT. 1)Then 01 09700 + Call Addstr(qard(i),Lenstr(qard(i))+1,',') 01 09710 + If(outchr(2)(2:2) .EQ. '3')Then 01 09720 + Call Addstr(qard(i),Lenstr(qard(i))+1,'0.975 10') 01 09730 + Else 01 09740 + Call Addstr(qard(i),Lenstr(qard(i))+1,'0.975 5') 01 09750 + EndIf 01 09760 + EndIf 01 09770 + Call Addstr(qard(i),Lenstr(qard(i))+2,'(Cf. 90NE01)') 01 09780 + WRITE(36, 9200) QRDSEQ(I), QARD(I)(1:80) 01 09790 + WRITE(37, 9080) QARD(I)(1:80), QRDSEQ(I) 01 09800 + WRITE(38, 9200) QRDSEQ(I), QARD(I)(1:80) 01 09810 + EndIf 01 09820 + 1370 CONTINUE 01 09830 +C following section commented out since later ones may have 01 09840 +C table values though first one may have all SKIP set. (11/91) 01 09850 +C-SUPPRESS REMAINING CALCULATION IF REMAINING ENERGIES ARE 01 09860 +C-ENTIRELY OUTSIDE TABLE RANGE. LIST THE REMAINING GAMMAS. 01 09870 +C 1370 NGT = 0 01 09880 +C DO 1380 II = 1, 10 01 09890 +C IF (SKIP(II)) NGT = NGT + 1 01 09900 +C IF (NGT .GE. 10) THEN 01 09910 +C WRITE(36, 9900) 01 09920 +C 1 ' THE FOLLOWING GAMMA ENERGIES ARE OUTSIDE TABLE RANGE'01 09930 +C WRITE(36, 9200) (QRDSEQ(KK),QARD(KK)(1:80), 01 09940 +C 1 KK=I+1, NE) 01 09950 +C IF (MOREG) GOTO 400 01 09960 +C GOTO 120 01 09970 +C ENDIF 01 09980 +C 1380 CONTINUE 01 09990 +C 01 10000 +C under certain conditions, uncertainties on E-gamma should be 01 10010 +C considered. First get uncertainty then compare. 01 10020 +C 01 10030 + CALL CNVS2U(STRGE,STRDGE,DUM1,DE) 01 10040 + IF(DE.EQ.0.) GO TO 1400 01 10050 + BEOFK=ETAB(1,1)-1. 01 10060 + IF((DE/EK(I)).GT.0.001 .AND. EK(I).LE. 100.) THEN 01 10070 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10080 + WRITE(36,FMT='(//,A,A,A,A,A)') 01 10090 + 1 ' E-Gamma +/- Delta E-Gamma calculation', 01 10100 + 1 ' E-Gamma=',STRGE, ' ', STRDGE 01 10110 + CALL GAMUNC(EK(I),DE) 01 10120 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10130 + ELSE IF((DE/EK(I)).GT.0.002 .AND. EK(I).LE. 200.) THEN 01 10140 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10150 + WRITE(36,FMT='(//,A,A,A,A,A)') 01 10160 + 1 ' E-Gamma +/- Delta E-Gamma calculation', 01 10170 + 1 ' E-Gamma=',STRGE, ' ', STRDGE 01 10180 + CALL GAMUNC(EK(I),DE) 01 10190 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10200 + ELSE IF((DE/EK(I)).GT.0.003 .AND. EK(I).LE. 300.) THEN 01 10210 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10220 + WRITE(36,FMT='(//,A,A,A,A,A)') 01 10230 + 1 ' E-Gamma +/- Delta E-Gamma calculation', 01 10240 + 1 ' E-Gamma=',STRGE, ' ', STRDGE 01 10250 + CALL GAMUNC(EK(I),DE) 01 10260 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10270 + ELSE IF((DE/EK(I)).GT.0.004 .AND. EK(I).LE. 400.) THEN 01 10280 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10290 + WRITE(36,FMT='(//,A,A,A,A,A)') 01 10300 + 1 ' E-Gamma +/- Delta E-Gamma calculation', 01 10310 + 1 ' E-Gamma=',STRGE, ' ', STRDGE 01 10320 + CALL GAMUNC(EK(I),DE) 01 10330 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10340 + ELSE IF((DE/EK(I)).GT.0.005 .AND. EK(I).LE. 500.) THEN 01 10350 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10360 + WRITE(36,FMT='(//,A,A,A,A,A)') 01 10370 + 1 ' E-Gamma +/- Delta E-Gamma calculation', 01 10380 + 1 ' E-Gamma=',STRGE, ' ', STRDGE 01 10390 + CALL GAMUNC(EK(I),DE) 01 10400 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10410 + ELSE IF((DE/EK(I)).GT.0.006 .AND. EK(I).LE. 600.) THEN 01 10420 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10430 + WRITE(36,FMT='(//,A,A,A,A,A)') 01 10440 + 1 ' E-Gamma +/- Delta E-Gamma calculation', 01 10450 + 1 ' E-Gamma=',STRGE, ' ', STRDGE 01 10460 + CALL GAMUNC(EK(I),DE) 01 10470 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10480 + ELSE IF((DE/EK(I)).GT.0.007 .AND. EK(I).LE. 700.) THEN 01 10490 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10500 + WRITE(36,FMT='(//,A,A,A,A,A)') 01 10510 + 1 ' E-Gamma +/- Delta E-Gamma calculation', 01 10520 + 1 ' E-Gamma=',STRGE, ' ', STRDGE 01 10530 + CALL GAMUNC(EK(I),DE) 01 10540 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10550 + ELSE IF((DE/EK(I)).GT.0.008 .AND. EK(I).LE. 800.) THEN 01 10560 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10570 + WRITE(36,FMT='(//,A,A,A,A,A)') 01 10580 + 1 ' E-Gamma +/- Delta E-Gamma calculation', 01 10590 + 1 ' E-Gamma=',STRGE, ' ', STRDGE 01 10600 + CALL GAMUNC(EK(I),DE) 01 10610 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10620 + ELSE IF((DE/EK(I)).GT.0.009 ) THEN 01 10630 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10640 + WRITE(36,FMT='(//,A,A,A,A,A)') 01 10650 + 1 ' E-Gamma +/- Delta E-Gamma calculation', 01 10660 + 1 ' E-Gamma=',STRGE, ' ', STRDGE 01 10670 + CALL GAMUNC(EK(I),DE) 01 10680 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10690 + ELSE IF(Z.GE.80 .AND. (EK(I)-BEOFK).LT.30) THEN 01 10700 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10710 + WRITE(36,FMT='(//,A,A,A,A,2F8.2)') 01 10720 + 1 ' E-Gamma +/- Delta E-Gamma calculation', 01 10730 + 1 ' E-Gamma=',STRGE, ' BEofK=', BEOFK,ETAB(1,1) 01 10740 + CALL GAMUNC(EK(I),DE) 01 10750 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10760 + ELSE IF(Z.GE.60 .AND. Z.LT.80 .AND. 01 10770 + 1 (EK(I)-BEOFK).GT.20) THEN 01 10780 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10790 + WRITE(36,FMT='(//,A,A,A,A,F8.2)') 01 10800 + 1 ' E-Gamma +/- Delta E-Gamma calculation', 01 10810 + 1 ' E-Gamma=',STRGE, ' BEofK=', BEOFK 01 10820 + CALL GAMUNC(EK(I),DE) 01 10830 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10840 + ELSE IF(Z.LT.60 .AND.(EK(I)-BEOFK).LT.10) THEN 01 10850 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10860 + WRITE(36,FMT='(//,A,A,A,A,F8.2)') 01 10870 + 1 ' E-Gamma +/- Delta E-Gamma calculation', 01 10880 + 1 ' E-Gamma=',STRGE, ' BEofK=', BEOFK 01 10890 + CALL GAMUNC(EK(I),DE) 01 10900 + WRITE(36,FMT='(/,2X,128(''=''))') 01 10910 + ENDIF 01 10920 + 1400 CONTINUE 01 10930 +C 01 10940 +C end if output loop 01 10950 +C 01 10960 + IF (NE .GE. (NP + 1)) THEN 01 10970 +C 01 10980 +C-REPLACE LAST 23 GAMMA DATA FIT WITH NEXT 23 DATA TO BE FIT 01 10990 +C 01 11000 + DO 1410 K = NP+1, NE 01 11010 + KNP = K - NP 01 11020 + E(KNP) = E(K) 01 11030 + EK(KNP) = EK(K) 01 11040 + QARD(KNP)=QARD(K) 01 11050 + QRDSEQ(KNP) = QRDSEQ(K) 01 11060 + 1410 CONTINUE 01 11070 + NE = NE - NP 01 11080 + GOTO 510 01 11090 + ENDIF 01 11100 +C 01 11110 + WRITE(36, 9900)Char(12) 01 11120 + IF (EOF5) GOTO 1600 01 11130 + IF (MOREG) GOTO 400 01 11140 + GOTO 120 01 11150 +C 01 11160 + 1500 WRITE(36, 9900)' REQUESTED Z IS OUTSIDE TABLE RANGE' 01 11170 + 1510 READ(35, 9900, END=1600) CARD 01 11180 + CRDSEQ = CRDSEQ + 1 01 11190 + IF (CARD(1:8).EQ.' ') GO TO 1510 01 11200 + SKPRD = .TRUE. 01 11210 + GOTO 120 01 11220 + 1520 WRITE(6,9900) ' INPUT FILE OPEN ERROR' 01 11230 + GO TO 1610 01 11240 +C 01 11250 + 1600 WRITE(6,9900)' END OF REQUEST LIST ' 01 11260 + 1610 CONTINUE 01 11270 +C+++MDC+++ 01 11280 +C...VAX 01 11290 +C/ CALL EXIT 01 11300 +C...IPC,DVF,ANS 01 11310 +C/ STOP 01 11320 +C---MDC--- 01 11330 + END 01 11340 + 02 00010 + SUBROUTINE OUTCC(NMP,MPORS,SKIP,NETAB,SCOMNT) 02 00020 +C 02 00030 +C outputs CC values 02 00040 +C 02 00050 +C MPORS 1 when mixed transition 02 00060 +C 0 single 02 00070 +C 02 00080 + INTEGER MP1,MPSW 02 00090 + REAL DATM(10, 8),RKL(8),RML(8),TCC(8),TCL(8),TCM(8),TLE(8), 02 00100 + 1 TME(8) 02 00110 + COMMON /OUTDAT/ DATM,TCL,RKL,TLE,TCM,RML,TME,TCC,MP1,MPSW 02 00120 + LOGICAL SKIP(10) 02 00130 + INTEGER NETAB(10),SCOMNT(10) 02 00140 + CHARACTER*10 LABEL 02 00150 +C 02 00160 + INTEGER K,IL,MPORS,J,NMP,M,MM 02 00170 +C 02 00180 + 9850 FORMAT (A, 2(10X,A41,10X)) 02 00190 + 9086 FORMAT(A, 5X, 5(2X, 1PE11.3, 1X)) 02 00200 + 9089 FORMAT(///A,5X, 5(2X, 1PE11.3, 1X)) 02 00210 + 9186 FORMAT(A, 2(5X, 4(2X, 1PE11.3, 1X))) 02 00220 + 9187 FORMAT(A, 2(5X, 4(4X, F5.2, 5X))) 02 00230 + 9189 FORMAT(///A, 2(5X, 4(2X, 1PE11.3, 1X))) 02 00240 +C 02 00250 +C K IL=1 02 00260 +C 02 00270 + K = 1 02 00280 + IL = 1 02 00290 + Write(36,'(/)') 02 00300 + IF (SKIP(K)) THEN 02 00310 + IF (NETAB(K) .EQ. 0) WRITE(36, 9850) ' K ', 02 00320 + 1 'Z IS OUTSIDE TABLE RANGE FOR THIS SHELL ', 02 00330 + 1 'Z IS OUTSIDE TABLE RANGE FOR THIS SHELL ' 02 00340 + IF (NETAB(K) .NE. 0) THEN 02 00350 + IF(SCOMNT(K).EQ.1) WRITE(36, 9850) ' K ', 02 00360 + 1 'TOO CLOSE TO BINDING ENERGY ', 02 00370 + 1 'TOO CLOSE TO BINDING ENERGY ' 02 00380 + IF(SCOMNT(K).NE.1) WRITE(36, 9850) ' K ', 02 00390 + 1 'ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL', 02 00400 + 1 'ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL' 02 00410 + ENDIF 02 00420 + ELSE 02 00430 + IF (MPORS.EQ.0) WRITE(36, 9186) 02 00440 + 1 ' K ',(DATM(K, J), J = 1, NMP) 02 00450 + IF(MPORS.GT.0) WRITE(36, 9086) 02 00460 + 1 ' K ',(DATM(K, J), J = 1, NMP) 02 00470 + ENDIF 02 00480 +C 02 00490 +C L1,L2,L3 IL=2,3,4 02 00500 +C THOUGH ANY OF THIS IS SKIPPED,CONTINUE TO THE OTHER L'S 02 00510 +C 02 00520 + WRITE(36,FMT='(A)') ' ' 02 00530 + LABEL=' L ' 02 00540 + DO 1180 K = 2, 4 02 00550 + IL = K 02 00560 + WRITE(LABEL(10:10),FMT='(I1)') K-1 02 00570 + IF (SKIP(K)) THEN 02 00580 + IF (NETAB(K) .EQ. 0) WRITE(36, 9850) LABEL, 02 00590 + 1 'Z IS OUTSIDE TABLE RANGE FOR THIS SHELL ', 02 00600 + 1 'Z IS OUTSIDE TABLE RANGE FOR THIS SHELL ' 02 00610 + IF (NETAB(K) .NE. 0) THEN 02 00620 + IF(SCOMNT(K).EQ.1) WRITE(36, 9850) LABEL, 02 00630 + 1 'TOO CLOSE TO BINDING ENERGY ', 02 00640 + 1 'TOO CLOSE TO BINDING ENERGY ' 02 00650 + IF(SCOMNT(K).NE.1) WRITE(36, 9850) LABEL, 02 00660 + 1 'ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL', 02 00670 + 1 'ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL' 02 00680 + ENDIF 02 00690 + ELSE 02 00700 + IF(MPORS.EQ.0) WRITE(36, 9186) 02 00710 + 1 LABEL,(DATM(K, J), J = 1, NMP) 02 00720 + IF(MPORS.GT.0) WRITE(36, 9086) 02 00730 + 1 LABEL,(DATM(K, J), J = 1, NMP) 02 00740 + ENDIF 02 00750 + 1180 CONTINUE 02 00760 +C 02 00770 +C TOTAL L IL=10 02 00780 +C 02 00790 + IL = 10 02 00800 + IF(.NOT.SKIP(2) .AND. .NOT.SKIP(3) .AND. .NOT.SKIP(4)) 02 00810 + 1 THEN 02 00820 + Write(36,'(/)') 02 00830 + IF(MPORS.EQ.0) WRITE(36, 9186) 02 00840 + 1 ' TOTAL-L ',(TCL(J), J = 1, NMP) 02 00850 + IF(MPORS.GT.0) WRITE(36, 9086) 02 00860 + 1 ' TOTAL-L ',(TCL(J), J = 1, NMP) 02 00870 + ENDIF 02 00880 +C 02 00890 +C K/L IL=11 02 00900 +C 02 00910 + IF (.NOT.SKIP(1)) THEN 02 00920 + IL = IL + 1 02 00930 + IF (RKL(1) .NE. 0.) THEN 02 00940 + IF(MPORS.EQ.0) WRITE(36, 9187) 02 00950 + 1 ' K/L ',(RKL(J), J = 1, NMP) 02 00960 + IF(MPORS.GT.0) WRITE(36, 9187) 02 00970 + 1 ' K/L ',(RKL(J), J = 1, 3) 02 00980 + ENDIF 02 00990 +C 02 01000 +C K+1.33L IL=12 02 01010 +C 02 01020 + IL = IL + 1 02 01030 + IF(MPORS.EQ.0) WRITE(36, 9186) 02 01040 + 1 ' K+1.33L ',(TLE(J), J = 1, NMP) 02 01050 + IF(MPORS.GT.0) WRITE(36, 9086) 02 01060 + 1 ' K+1.33L ',(TLE(J), J = 1, NMP) 02 01070 + ENDIF 02 01080 +C 02 01090 +C M1,M2,M3,M4,M5 IL=5,6,7,8,9 02 01100 +C 02 01110 + WRITE(36,FMT='(A)') ' ' 02 01120 + LABEL=' M ' 02 01130 + DO 1190 K = 5, 9 02 01140 + IL = K 02 01150 + WRITE(LABEL(10:10),FMT='(I1)') K-4 02 01160 + IF (SKIP(K)) THEN 02 01170 + IF (NETAB(K) .EQ. 0) WRITE(36, 9850) LABEL, 02 01180 + 1 'Z IS OUTSIDE TABLE RANGE FOR THIS SHELL ', 02 01190 + 1 'Z IS OUTSIDE TABLE RANGE FOR THIS SHELL ' 02 01200 + IF (NETAB(K) .NE. 0) THEN 02 01210 + IF(SCOMNT(K).EQ.1) WRITE(36, 9850) LABEL, 02 01220 + 1 'TOO CLOSE TO BINDING ENERGY ', 02 01230 + 1 'TOO CLOSE TO BINDING ENERGY ' 02 01240 + IF(SCOMNT(K).NE.1) WRITE(36, 9850) LABEL, 02 01250 + 1 'ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL', 02 01260 + 1 'ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL' 02 01270 + ENDIF 02 01280 + ELSE 02 01290 + IF(MPORS.EQ.0) WRITE(36, 9186) 02 01300 + 1 LABEL,(DATM(K, J), J = 1, NMP) 02 01310 + IF(MPORS.GT.0) WRITE(36, 9086) 02 01320 + 1 LABEL,(DATM(K, J), J = 1, NMP) 02 01330 + ENDIF 02 01340 + 1190 CONTINUE 02 01350 +C 02 01360 +C TOTAL M,M/L AND K+L+1.33M 02 01370 +C 02 01380 + DO 1200 M = 5, 9 02 01390 + IF (SKIP(M)) GOTO 1210 02 01400 + 1200 CONTINUE 02 01410 +C 02 01420 +C TOTAL M IL=13 02 01430 +C 02 01440 + IL = 13 02 01450 + Write(36,'(/)') 02 01460 + IF(MPORS.EQ.0) WRITE(36, 9186) ' TOTAL-M ', 02 01470 + 1 (TCM(J), J = 1, NMP) 02 01480 + IF(MPORS.GT.0) WRITE(36, 9086) ' TOTAL-M ', 02 01490 + 1 (TCM(J), J = 1, NMP) 02 01500 +C 02 01510 +C M/L IL=14 02 01520 +C 02 01530 + IF (.NOT.SKIP(2)) THEN 02 01540 + IL = IL + 1 02 01550 + IF (RML(1) .NE. 0.) THEN 02 01560 + IF(MPORS.EQ.0) WRITE(36, 9187) 02 01570 + 1 ' M/L ',(RML(J), J = 1, NMP) 02 01580 + IF(MPORS.GT.0) WRITE(36, 9187) 02 01590 + 1 ' M/L ',(RML(J), J = 1, 3) 02 01600 + ENDIF 02 01610 +C 02 01620 +C K+L+1.33M IL=15 02 01630 +C 02 01640 + IF(.NOT.SKIP(1)) THEN 02 01650 + IL = IL + 1 02 01660 + IF(MPORS.EQ.0) WRITE(36, 9186) 02 01670 + 1 ' K+L+1.33M',(TME(J), J = 1, NMP) 02 01680 + IF(MPORS.GT.0) WRITE(36, 9086) 02 01690 + 1 ' K+L+1.33M',(TME(J), J = 1, NMP) 02 01700 + ENDIF 02 01710 + ENDIF 02 01720 + 1210 K = 10 02 01730 + IL = 16 02 01740 + Write(36,'(/)') 02 01750 + WRITE(36, FMT='(A)') ' N+O+ FROM' 02 01760 + IL = IL + 1 02 01770 + IF (SKIP(K)) THEN 02 01780 + IF (NETAB(K) .EQ. 0) WRITE(36, 9850) ' DRAGOUN ', 02 01790 + 1 'Z IS OUTSIDE TABLE RANGE FOR THIS SHELL ', 02 01800 + 1 'Z IS OUTSIDE TABLE RANGE FOR THIS SHELL ' 02 01810 + IF (NETAB(K) .NE. 0) THEN 02 01820 + IF(SCOMNT(K).EQ.1) WRITE(36, 9850) ' DRAGOUN ', 02 01830 + 1 'TOO CLOSE TO BINDING ENERGY ', 02 01840 + 1 'TOO CLOSE TO BINDING ENERGY ' 02 01850 + IF(SCOMNT(K).NE.1) WRITE(36, 9850) ' DRAGOUN ', 02 01860 + 1 'ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL', 02 01870 + 1 'ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL' 02 01880 + ENDIF 02 01890 + ELSE 02 01900 +C 02 01910 +C N+O+FROM DRAGOUM 02 01920 +C 02 01930 + IF(MPORS.EQ.0)WRITE(36, 9186) 02 01940 + 1 ' DRAGOUN ',(DATM(K, J), J = 1, NMP) 02 01950 + IF(MPORS.GT.0)WRITE(36, 9086) 02 01960 + 1 ' DRAGOUN ',(DATM(K, J), J = 1, NMP) 02 01970 + DO 1230 MM = 1, 9 02 01980 + IF (SKIP(MM)) GOTO 1240 02 01990 +1230 CONTINUE 02 02000 + IL = IL + 1 02 02010 +C 02 02020 +C K+L+M+NO+ 02 02030 +C 02 02040 + IF(MPORS.EQ.0) WRITE(36, 9189) 02 02050 + 1 ' K+L+M+NO+',(TCC(J), J = 1, NMP) 02 02060 + IF(MPORS.GT.0) WRITE(36, 9089) 02 02070 + 1 ' K+L+M+NO+',(TCC(J), J = 1, NMP) 02 02080 + ENDIF 02 02090 + 1240 CONTINUE 02 02100 + Write(36,FMT='(/,2A)') 02 02110 + 2 ' L=3, 4 CC''s multiplied by 0.975 10, 0.975 5, respectively', 02 02120 + 3 ' (Cf. 90Ne01).' 02 02130 + RETURN 02 02140 + END 02 02150 + 03 00010 + BLOCK DATA 03 00020 + REAL A(23) 03 00030 + REAL B(4) 03 00040 + REAL C(23) 03 00050 + REAL D(4, 23) 03 00060 + REAL E(23) 03 00070 + REAL F(23) 03 00080 + REAL H(23) 03 00090 + REAL S(23) 03 00100 + REAL T(23) 03 00110 + REAL X(23) 03 00120 + REAL Y(23) 03 00130 + COMMON /C1/ A, B, C, D, E, F, H, S, T, X, Y 03 00140 +C 03 00150 + REAL E1 03 00160 + REAL E2 03 00170 + INTEGER NS 03 00180 + INTEGER L 03 00190 + INTEGER N 03 00200 + REAL ALPHA(23) 03 00210 + INTEGER NP 03 00220 + REAL EE(23) 03 00230 + COMMON /C2/ E1, E2, NS, L, N, ALPHA, NP, EE 03 00240 +C 03 00250 + DATA A, B, C, D, E, F, H, S, T, X, Y /303 * 0.0/ 03 00260 + DATA E1, E2, ALPHA, EE /48 * 0.0/ 03 00270 + DATA NS, L, N, NP / 4 * 0/ 03 00280 + END 03 00290 + 04 00010 + SUBROUTINE FIT 04 00020 +C 04 00030 + REAL A(23), B(4), C(23), D(4, 23), E(23), F(23), H(23), 04 00040 + + S(23), T(23), X(23), Y(23) 04 00050 + COMMON /C1/ A, B, C, D, E, F, H, S, T, X, Y 04 00060 +C 04 00070 + INTEGER NS, L, N, NP 04 00080 + REAL E1, E2, ALPHA(23), EE(23) 04 00090 + COMMON /C2/ E1, E2, NS, L, N, ALPHA, NP, EE 04 00100 +C 04 00110 + INTEGER NE2,NN,I,M,J,L1,M1 04 00120 + REAL W 04 00130 + Double Precision dalpha 04 00140 +C 04 00150 + Double Precision DABS,DBLE,DEXP 04 00160 + Intrinsic DABS,DBLE,DEXP 04 00170 +C 04 00180 + REAL ERG(23, 5), EN(23) 04 00190 + DATA ERG/ 04 00200 + A 1.0, 1.7, 3.0, 6.2, 10.0, 14.0, 20.0, 04 00210 + B 28.0, 40.0, 53.0, 70.0, 83.0, 100.0, 123.0, 04 00220 + C 150.0, 215.0, 300.0, 390.0, 500.0, 730.0, 1000.0, 04 00230 + D 1250.0, 1500.0, 04 00240 + E 1.0, 1.7, 3.0, 6.2, 10.0, 14.0, 20.0, 04 00250 + F 28.0, 40.0, 53.0, 70.0, 83.0, 100.0, 123.0, 04 00260 + G 150.0, 215.0, 300.0, 390.0, 500.0, 730.0, 1000.0, 04 00270 + H 1500.0, 0.0, 04 00280 + I 1.0, 2.0, 4.0, 8.0, 15.0, 25.0, 40.0, 04 00290 + J 52.0, 70.0, 103.0, 150.0, 280.0, 500.0, 0.0, 04 00300 + K 9* 0.0, 04 00310 + L 50.0, 70.0, 100.0, 150.0, 200.0, 500.0, 0.0, 04 00320 + M 16* 0.0, 04 00330 + N 15.0, 17.0, 20.0, 25.0, 32.0, 40.0, 50.0, 04 00340 + O 65.0, 80.0, 100.0, 120.0, 150.0, 200.0, 300.0, 04 00350 + P 450.0, 650.0, 1000.0, 2000.0, 6000.0, 4* 0.0/ 04 00360 +C 04 00370 +C ALL ENTRIES GIVEN FOR A PARTICULAR CASE MUST BE USED 04 00380 +C E1 = LOWEST TABULATED ENERGY OF SUBSHELL TO BE INTERPOLATED, EXCEP04 00390 +C *TOTAL* L- OR M-SHELLS IN WHICH CASE E1=-1.0 WE DO NOT INTERPOLA 04 00400 +C IN TOTAL L OR M SHELL , WE INTERPOLATE IN SUBSHELLS AND THEN 04 00410 +C SUM THE SEPARATE SUBSHELL VALUES 04 00420 +C E2 = LOWEST TABULATED ENERGY OF THE K, L2, M5 SUBSHELLS FOR THE 04 00430 +C INTERPOLATION IN THE K, L, M SHELLS, RESPECTIVELY 04 00440 +C NS = 1, 2, 3 FOR THE K, L, M SHELLS, RESPECTIVELY 04 00450 +C L = MULTIPOLE ORDER FOR THE CASE TO BE INTERPOLATED 04 00460 +C N = NUMBER OF VALUES GIVEN IN EACH CASE IN THE TABLE 04 00470 +C ALPHA = LIST OF CONVERSION COEFFICIENTS FROM THE TABLE 04 00480 +C NP = NUMBER OF CONVERSION COEFFICIENTS TO BE INTERPOLATED, MUST BE04 00490 +C THAN 24 04 00500 +C EE = LIST OF GAMMA RAY ENERGIES OF THE VALUES TO BE DETERMINED 04 00510 +C 04 00520 + l1=1 04 00530 + m1=n 04 00540 +C 04 00550 + IF (NS .GE. 4) GOTO 21 04 00560 +C 04 00570 + IF (NS .EQ. 1) E2 = E1 04 00580 + E1 = -E1 + 1. 04 00590 + E2 = -E2 + 1. 04 00600 + NE2 = -E2 + 0.501 04 00610 + NN = N 04 00620 + IF (NN .LT. 6) GOTO 10 04 00630 + DO 15 I = 6, NN 04 00640 + M = ERG(I, NS) + 0.01 04 00650 + J = M + NE2 04 00660 + IF (.NOT. (M .LT. 150)) GOTO 11 04 00670 + J = (10 * J + 5) / 10 04 00680 + GOTO 14 04 00690 + 11 IF (.NOT. (M .LT. 390)) GOTO 12 04 00700 + J = 5 * ((10 * J + 25) / 50) 04 00710 + GOTO 14 04 00720 + 12 IF (.NOT. (M .LT. 1000)) GOTO 13 04 00730 + J = 10 * ((J + 5) / 10) 04 00740 + GOTO 14 04 00750 +C (M .GE. 1000) 04 00760 + 13 J = 50 * ((J + 25) / 50) 04 00770 +C 04 00780 + 14 EN(I) = J 04 00790 + C(I) = EN(I) + E1 04 00800 + 15 CONTINUE 04 00810 +C 04 00820 + 10 DO 16 I = 1, 5 04 00830 + C(I) = ERG(I, NS) 04 00840 + EN(I) = ERG(I, NS) - E1 04 00850 + 16 CONTINUE 04 00860 + DO 17 I = 1, N 04 00870 + C(I) = ALOG(SQRT((1021.952 + C(I)) * C(I))) 04 00880 + 17 CONTINUE 04 00890 + DO 18 I = 1, NP 04 00900 + W = EE(I) + E1 04 00910 + IF (W .LT. 0) GOTO 18 04 00920 + X(I) = ALOG(SQRT((1021.952 + W) * W)) 04 00930 + 18 CONTINUE 04 00940 + M = 2 * L + 1 04 00950 + DO 19 I = 1, N 04 00960 + A(I) = ALOG(ALPHA(I) * EN(I) ** M) 04 00970 + 19 CONTINUE 04 00980 + CALL SPLINE(N, NP) 04 00990 + DO 20 I = 1, NP 04 01000 + If((ee(i).LT.en(l1)) .OR. (ee(i).GT.en(m1)))Then 04 01010 + alpha(i)=-1. 04 01020 + Else 04 01030 + dalpha=DEXP(DBLE(y(i))) 04 01040 + If(m .GT. 0)Then 04 01050 + Do 100 j=1,m 04 01060 + If(DABS(dalpha) .EQ. 0.0)GoTo 110 04 01070 + dalpha=dalpha/DBLE(ee(i)) 04 01080 +100 Continue 04 01090 + EndIf 04 01100 +110 Continue 04 01110 + alpha(i)=dalpha 04 01120 + EndIf 04 01130 + 20 CONTINUE 04 01140 + GOTO 33 04 01150 +C 04 01160 +C-NEW SECTION TO INTERPOLATE ICC FROM TABLES OTHER THAN HAGER-SELTZER 04 01170 +C-NS=4 IS THE N+O+... FROM DRAGOUN ET AL. 04 01180 +C-NS=5 IS THE K,L FOR Z < 30 FROM BAND ET AL. 04 01190 +C 04 01200 + 21 DO 22 I = 1, N 04 01210 + EN(I) = ERG(I, NS) 04 01220 + C(I) = ERG(I, NS) 04 01230 + C(I) = ALOG(SQRT((1021.952 + C(I)) * C(I))) 04 01240 + 22 CONTINUE 04 01250 + DO 23 I = 1, NP 04 01260 + IF (EE(I) .LT. E1) GOTO 23 04 01270 + X(I) = ALOG(SQRT((1021.952 + EE(I)) * EE(I))) 04 01280 + 23 CONTINUE 04 01290 + M = 2 * L + 1 04 01300 + DO 24 I = 1, N 04 01310 + A(I) = ALOG(ALPHA(I) * EN(I) **M) 04 01320 + 24 CONTINUE 04 01330 + CALL SPLINE(N, NP) 04 01340 + DO 25 I = 1, NP 04 01350 + If((ee(i).LT.en(l1)) .OR. (ee(i).GT.en(m1)))Then 04 01360 + alpha(i)=-1. 04 01370 + Else 04 01380 + dalpha=DEXP(DBLE(y(i))) 04 01390 + If(m .GT. 0)Then 04 01400 + Do 200 j=1,m 04 01410 + If(DABS(dalpha) .EQ. 0.0)GoTo 210 04 01420 + dalpha=dalpha/DBLE(ee(i)) 04 01430 +200 Continue 04 01440 + EndIf 04 01450 +210 Continue 04 01460 + alpha(i)=dalpha 04 01470 + EndIf 04 01480 + 25 CONTINUE 04 01490 +C 04 01500 + 33 Continue 04 01510 + RETURN 04 01520 + END 04 01530 + 05 00010 + SUBROUTINE SPLINE(N, NP) 05 00020 +C 05 00030 + REAL A(23), B(4), C(23), D(4, 23), E(23), F(23), H(23), 05 00040 + + S(23), T(23), X(23), Y(23) 05 00050 + COMMON /C1/ A, B, C, D, E, F, H, S, T, X, Y 05 00060 +C 05 00070 + INTEGER I,M,N,MS,L,K,NP,K1 05 00080 + REAL AA,Z,ZP 05 00090 +C 05 00100 + M = N - 1 05 00110 + DO 7 I = 1, M 05 00120 + E(I) = C(I + 1) - C(I) 05 00130 + F(I) = A(I + 1) - A(I) 05 00140 + 7 CONTINUE 05 00150 + MS = N - 2 05 00160 + DO 8 I = 1, MS 05 00170 + D(1, I) = E(I + 1) 05 00180 + D(2, I) = 2. * (E(I) + E(I + 1)) 05 00190 + D(3, I) = E(I) 05 00200 + D(4, I)= 3. * (E(I + 1) * F(I) / E(I) + E(I) * F(I + 1) / 05 00210 + + E(I + 1)) 05 00220 + 8 CONTINUE 05 00230 + S(1) = -1. 05 00240 + T(1) = 2. * F(1) / E(1) 05 00250 + DO 9 I = 2, M 05 00260 + L = I - 1 05 00270 + S(I) = -(D(1, L) + D(2, L) * S(L)) / (D(3, L) * S(L)) 05 00280 + T(I) = (-T(L) * (D(2, L) + D(3, L) * S(I)) + D(4, L)) / 05 00290 + + D(3, L) 05 00300 + 9 CONTINUE 05 00310 + AA = 2. * F(M) / E(M) 05 00320 + H(N) = (T(M) + AA * S(M)) / (S(M) + 1.) 05 00330 + DO 10 I = 1, M 05 00340 + K = N - I 05 00350 + H(K) = (H(K + 1) - T(K)) / S(K) 05 00360 + 10 CONTINUE 05 00370 + DO 12 I = 1, NP 05 00380 + DO 13 K = 1, M 05 00390 + k1=k 05 00400 + IF (X(I) .LT. C(K + 1)) GOTO 14 05 00410 + 13 CONTINUE 05 00420 + k1=k1-1 05 00430 + 14 Continue 05 00440 + Z = (C(K1 + 1) - C(K1)) / 2. 05 00450 + B(3) = (H(K1 + 1) - H(K1)) / (4. * Z) 05 00460 + B(4) = .25 * ((H(K1 + 1) + H(K1)) * Z - A(K1 + 1) + A(K1)) / 05 00470 + + Z ** 3 05 00480 + B(1) = (A(K1 + 1) + A(K1) - 2. * B(3) * Z ** 2) / 2. 05 00490 + B(2) = (H(K1 + 1) + H(K1) - 6. * B(4) * Z ** 2) / 2. 05 00500 + ZP = X(I) - (C(K1 + 1) + C(K1)) / 2. 05 00510 + Y(I) = B(1) + ZP * (B(2) + ZP * (B(3) + ZP * B(4))) 05 00520 + 12 CONTINUE 05 00530 + RETURN 05 00540 + END 05 00550 + SUBROUTINE SORT_LOCAL(BASE, N, QARD, QRDSEQ) 06 00010 +C 06 00020 +C... SORTS THE FIRST N ELEMENTS OF BASE IN ASCENDING ORDER 06 00030 +C... CARRYING ALONG QARD AND QRDSEQ. 06 00040 +C 06 00050 +C... BASE IS SORTED BY A BUBBLE SORT AND A TAG ARRAY GOES WITH IT. 06 00060 +C... THEN QARD, QRDSEQ ARE PERMUTED BY USE OF THE TAG ARRAY. 06 00070 +C 06 00080 + REAL BASE(100) 06 00090 + INTEGER N 06 00100 + INTEGER QRDSEQ(100) 06 00110 + INTEGER TAG(100) 06 00120 + REAL XBASE 06 00130 + INTEGER XTAG 06 00140 + INTEGER XQRDSQ 06 00150 + INTEGER IEND, ISTART 06 00160 + CHARACTER*160 QARD(100),XQARD 06 00170 +C 06 00180 + INTEGER I,J,JJ 06 00190 +C 06 00200 +C... MAKE SURE N > 1. 06 00210 +C 06 00220 + IF (N .LE. 1) GOTO 99 06 00230 +C 06 00240 +C... INITIALIZE TAG ARRAY. 06 00250 +C 06 00260 + DO 10 I = 1, N 06 00270 + TAG(I) = I 06 00280 + 10 CONTINUE 06 00290 +C 06 00300 +C... SORT BASE AND TAG ARRAYS. 06 00310 +C 06 00320 + DO 30 I = 2, N 06 00330 + DO 20 J = 2, I 06 00340 + JJ = I + 2 - J 06 00350 + IF (.NOT. (BASE(JJ) .LT. BASE(JJ - 1))) GOTO 30 06 00360 + XBASE = BASE(JJ) 06 00370 + XTAG = TAG(JJ) 06 00380 + BASE(JJ) = BASE(JJ - 1) 06 00390 + TAG(JJ) = TAG(JJ - 1) 06 00400 + BASE(JJ - 1) = XBASE 06 00410 + TAG(JJ - 1) = XTAG 06 00420 + 20 CONTINUE 06 00430 + 30 CONTINUE 06 00440 +C 06 00450 +C... PERMUTE THE STRING ARRAYS BY FOLLOWING THE TAG CHAINS. 06 00460 +C... IEND HOLDS THE START (END) OF THE CHAIN. 06 00470 +C... SET ALL USED CHAINS TO ZERO AS YOU GO TO BE ABLE TO 06 00480 +C... PICK UP THE NEXT CHAIN. 06 00490 +C 06 00500 +C... FIND START OF CHAIN. 06 00510 +C 06 00520 + ISTART = 1 06 00530 + 40 DO 50 IEND = ISTART, N 06 00540 + IF (TAG(IEND) .NE. 0) GOTO 60 06 00550 + 50 CONTINUE 06 00560 +C... ALL TAGS ZERO, NO MORE CHAINS, RETURN. 06 00570 + GOTO 99 06 00580 +C 06 00590 +C... SAVE FIRST ELEMENT OF CHAIN. 06 00600 +C 06 00610 + 60 XQARD=QARD(IEND) 06 00620 + XQRDSQ = QRDSEQ(IEND) 06 00630 +C 06 00640 +C... LOOP THROUGH CHAIN UNTIL WE COME BACK TO IEND. 06 00650 +C 06 00660 + I = IEND 06 00670 + J = TAG(I) 06 00680 + 70 IF (.NOT. (J .NE. IEND)) GOTO 80 06 00690 + TAG(I) = 0 06 00700 + QARD(I)=QARD(J) 06 00710 + QRDSEQ(I)= QRDSEQ(J) 06 00720 + I = J 06 00730 + J = TAG(I) 06 00740 + GOTO 70 06 00750 +C 06 00760 +C... STORE SAVED ELEMENT. 06 00770 +C 06 00780 + 80 TAG(I) = 0 06 00790 + QARD(I)=XQARD 06 00800 + QRDSEQ(I) = XQRDSQ 06 00810 +C 06 00820 +C... FIND NEXT CHAIN. 06 00830 +C 06 00840 + ISTART = IEND + 1 06 00850 + IF (ISTART .LE. N) GOTO 40 06 00860 +C 06 00870 +C... RETURN WHEN NO MORE CHAINS FOUND. 06 00880 +C 06 00890 + 99 RETURN 06 00900 + END 06 00910 + 07 00010 + SUBROUTINE ILOOP 07 00020 +C 07 00030 + INTEGER NS, L, N, NP 07 00040 + REAL E1, E2, ALPHA(23), EE(23) 07 00050 + COMMON /C2/ E1, E2, NS, L, N, ALPHA, NP, EE 07 00060 +C 07 00070 + INTEGER I,M 07 00080 +C 07 00090 + I = 1 07 00100 + 10 IF (I .GT. NP) RETURN 07 00110 + IF (EE(I) .GE. E1) GOTO 30 07 00120 + IF (NP .LE. 1) GOTO 30 07 00130 + NP = NP - 1 07 00140 + DO 20 M = I, NP 07 00150 + EE(M) = EE(M + 1) 07 00160 + 20 CONTINUE 07 00170 + I = I - 1 07 00180 + 30 I = I + 1 07 00190 + GOTO 10 07 00200 + END 07 00210 + 08 00010 + SUBROUTINE DATSTR(X, DX, SX, LENX, SDX, LENDX, MPSW) 08 00020 +C 08 00030 +C... X, DX ARE DOUBLE PRECISION DATA VALUE AND UNCERTAINTY. 08 00040 +C... SX, SDX ARE OUTPUT STRINGS FOR X, DX IN ENSDF FORMAT. 08 00050 +C... LENX, LENDX ARE THE DESIRED LENGTH OF SX, SDX. 08 00060 +C... MPSW IS THE MULTIPOLE SWITCH: 08 00070 +C... 1 FOR THEORECTICAL VALUES; I.E., NO UNCERTAINTY NEEDED. 08 00080 +C... 3,4 FOR MIXED TRANSITION, WHERE UNCERTAINTY COMES FROM 08 00090 +C... UNCERTAINTY IN DELTA. 08 00100 +C 08 00110 + DOUBLE PRECISION X, DX 08 00120 + INTEGER LENX, LENDX, MPSW 08 00130 + CHARACTER*(*) SX,SDX 08 00140 +C 08 00150 + INTEGER IPFLG,I,IDX 08 00160 + DOUBLE PRECISION LOCX,LOCDX 08 00170 + CHARACTER*2 SAVSDX 08 00180 +C 08 00190 + INTEGER IVLSTR 08 00200 + EXTERNAL IVLSTR 08 00210 +C 08 00220 + INTEGER LEN 08 00230 + INTRINSIC LEN 08 00240 +C 08 00250 + IPFLG = 0 08 00260 + LOCX=X 08 00270 + LOCDX=DX 08 00280 +C Change artificial uncertainty from 1% to 3% (TWB 03-Sep-92) 08 00290 + IF (MPSW .EQ. 1) LOCDX = 0.03 * LOCX 08 00300 + IF (DX .EQ. 0.0) LOCDX = 0.03 * LOCX 08 00310 +C 08 00320 + 10 CALL DCNVUS(LOCX, LOCDX, SX, LENX, SDX, LENDX) 08 00330 + IF(SX(1:1).NE.'*') GOTO 100 08 00340 + IF(IPFLG .EQ. 0)THEN 08 00350 + CALL DCNVUS(LOCX,LOCDX,SX,LEN(SX),SAVSDX,LEN(SAVSDX)) 08 00360 + ENDIF 08 00370 +C... IF DCNVUS RETURNS *'S; INCREASE DX UNTIL IT WORKS 08 00380 + WRITE(36, 1001) LOCX, LOCDX 08 00390 + 1001 FORMAT(' UNCERTAINTY IS BEING INCREASED FOR ROUNDOFF. ', 08 00400 + + 'ORIGINAL VALUES: X= ', E10.3, ' DX= ', E10.3) 08 00410 + IPFLG = IPFLG + 1 08 00420 + LOCDX = 10.0D0 * LOCDX 08 00430 + GOTO 10 08 00440 +C 08 00450 + 100 IF (IPFLG .EQ. 0) RETURN 08 00460 + IDX=IVLSTR(SAVSDX) 08 00470 + DO 110 I=1,IPFLG 08 00480 + IDX=NINT(FLOAT(IDX)/10.) 08 00490 +110 CONTINUE 08 00500 + IF(IDX .LE. 0)THEN 08 00510 + SDX=' ' 08 00520 + ELSE 08 00530 + CALL NUMSTR(IDX,SDX) 08 00540 + ENDIF 08 00550 + RETURN 08 00560 + END 08 00570 + 09 00010 + SUBROUTINE CENTER(STR,IFIELD) 09 00020 +C 09 00030 +C Take STR and center its characters in STR(1:IFIELD) 09 00040 +C 09 00050 + CHARACTER*(*) STR 09 00060 + INTEGER IFIELD 09 00070 +C 09 00080 + INTEGER I,LAST 09 00090 +C 09 00100 + INTEGER LENSTR 09 00110 + EXTERNAL LENSTR 09 00120 +C 09 00130 + CALL LBSUP(STR) 09 00140 + LAST=LENSTR(STR) 09 00150 + IF(LAST.GE.IFIELD) RETURN 09 00160 + I=IFIELD - (IFIELD-LAST)/2 09 00170 + CALL PADLFT(STR,I) 09 00180 + RETURN 09 00190 + END 09 00200 + 10 00010 + REAL FUNCTION TUNCER(CCX,TCCP1,CC1,CC2,CC3,DCCX,DCC1,DCC2,DCC3) 10 00020 +C 10 00030 +C FINDS UNCERTAINTIES OF K/T, L/T, ETC ACCORDING TO THE FORMULA BY 10 00040 +C T.BURROWS. 10 00050 +C 10 00060 +C CCX - value of K coefficient(alpha-K, or KC), L coeff, M, or N+ 10 00070 +C coeff. For uncertainty of K/T, KC should be CCX, For 10 00080 +C uncertainty of L/T, CCX should be LC, etc. 10 00090 +C CC1, CC2, CC3 - other coefficients. 10 00100 +C DCCX- uncertainty of coefficients CCX 10 00110 +C DCC1, DCC2, DCC3 - uncertainties of other coefficients. 10 00120 +C TCCP1-total coeffecient(CC) + 1 10 00130 +C 10 00140 +C (uncertainty of K/T)**2= 10 00150 +C (d(K/T)/dKC)**2 * DKC + (d(K/T)/dLC)**2 * DLC + 10 00160 +C (d(K/T)/dMC)**2 * DMC + (d(K/T)/dNC)**2 * DNC 10 00170 +C 10 00180 +C d(K/T)/dKC=(TCCP1 - KC)/(TCCP1**2) 10 00190 +C d(K/T)/dLC=(-KC)/(TCCP1**2) =d(K/T)/dMC=d(K/T)/dNC 10 00200 +C 10 00210 + REAL CCX,TCCP1,CC1,CC2,CC3,DCCX,DCC1,DCC2,DCC3 10 00220 +C 10 00230 + REAL P1,P2 10 00240 +C 10 00250 + P1=(TCCP1-CCX)/TCCP1/TCCP1 10 00260 + P2=-CCX/TCCP1/TCCP1 10 00270 + TUNCER=P1*P1*DCCX*DCCX + P2*P2*DCC1*DCC1 + 10 00280 + 1 P2*P2*DCC2*DCC2 + P2*P2*DCC3*DCC3 10 00290 + TUNCER=TUNCER**.5 10 00300 + RETURN 10 00310 + END 10 00320 + 11 00010 + SUBROUTINE HSICAL(NPOLD,EK,ALPHE) 11 00020 +C 11 00030 +C Calculation section to obtain ICC's 11 00040 +C 11 00050 +C-'FIT' CALLED FOR EACH GAMMA ENERGY > BINDING ENERGY 11 00060 +C-ENERGIES < BINDING ENERGY ARE TAKEN OUT FOR 'FIT', 11 00070 +C-THEN PUT BACK IN FOR OUTPUT 11 00080 +C 11 00090 + INTEGER NPOLD 11 00100 + REAL EK(100) 11 00110 + REAL ALPHE(23, 10, 8) 11 00120 +C 11 00130 +C Common HSCAL for subroutine HSICAL 11 00140 +C 11 00150 + REAL ALFTAB(23, 10, 8) 11 00160 + REAL ETAB(23, 10) 11 00170 + INTEGER NETAB(10) 11 00180 + INTEGER Z 11 00190 + COMMON /HSCAL/ Z,NETAB,ALFTAB,ETAB 11 00200 +C 11 00210 +C-COMMON C2 DIMENSIONED FOR SUBROUTINE FIT 11 00220 +C 11 00230 + INTEGER NS, L, N, NP 11 00240 + REAL E1, E2, ALPHA(23), EE(23) 11 00250 + COMMON /C2/ E1, E2, NS, L, N, ALPHA, NP, EE 11 00260 +C 11 00270 + INTEGER I,J,K,NPOLMJ,ME,M 11 00280 +C 11 00290 + DO 140 I = 1, 23 11 00300 + ALPHA(I) = 0.0 11 00310 + EE(I) = 0.0 11 00320 + 140 CONTINUE 11 00330 + NP=NPOLD 11 00340 + DO 200 I=1,NP 11 00350 + EE(I)=EK(I) 11 00360 + 200 CONTINUE 11 00370 +C 11 00380 +C-GET K-SHELL ICC (LOOP ENDS AT 69) 11 00390 +C 11 00400 + N = NETAB(1) 11 00410 + IF (N .NE. 0) THEN 11 00420 + E1 = ETAB(1, 1) 11 00430 + E2 = E1 11 00440 + NS = 1 11 00450 + IF (Z .LT. 30) NS = 5 11 00460 + K = 1 11 00470 + CALL ILOOP 11 00480 +C 11 00490 + DO 580 I = 1, 8 11 00500 + L = I 11 00510 + IF (L .GT. 4) L = I - 4 11 00520 + DO 550 J = 1, N 11 00530 + ALPHA(J) = ALFTAB(J, 1, I) 11 00540 + 550 CONTINUE 11 00550 + CALL FIT 11 00560 +C-RESET FOR NEXT CALL TO 'FIT' 11 00570 + E1 = ETAB(1, 1) 11 00580 + DO 570 J = 1, NPOLD 11 00590 + IF (EK(J) .LT. E1) THEN 11 00600 + NPOLMJ = NPOLD - J 11 00610 + DO 560 ME = 1, NPOLMJ 11 00620 + M = NPOLD + 1 - ME 11 00630 + IF (M .GT. 1) ALPHA(M) = ALPHA(M - 1) 11 00640 + 560 CONTINUE 11 00650 + ALPHA(J) = -1. 11 00660 + ENDIF 11 00670 + ALPHE(J, 1, I) = ALPHA(J) 11 00680 + 570 CONTINUE 11 00690 + 580 CONTINUE 11 00700 + NP = NPOLD 11 00710 + DO 590 M = 1, NP 11 00720 + EE(M) = EK(M) 11 00730 + 590 CONTINUE 11 00740 + ENDIF 11 00750 +C 11 00760 +C-GET L-SUBSHELL ICC 11 00770 +C 11 00780 + NS = 2 11 00790 + IF (Z .LT. 30) NS = 5 11 00800 + DO 650 K = 2, 4 11 00810 + N = NETAB(K) 11 00820 + IF (N .EQ. 0) GOTO 700 11 00830 + E1 = ETAB(1, K) 11 00840 + CALL ILOOP 11 00850 +C 11 00860 + DO 640 I = 1, 8 11 00870 + E2 = ETAB(1, 3) 11 00880 + L = I 11 00890 + IF (L .GT. 4) L = I - 4 11 00900 + DO 610 J = 1, N 11 00910 + ALPHA(J) = ALFTAB(J, K, I) 11 00920 + 610 CONTINUE 11 00930 + CALL FIT 11 00940 + E1 = ETAB(1, K) 11 00950 + DO 630 J = 1, NPOLD 11 00960 + IF (EK(J) .LT. E1) THEN 11 00970 + NPOLMJ = NPOLD - J 11 00980 + DO 620 ME = 1, NPOLMJ 11 00990 + M = NPOLD + 1 - ME 11 01000 + IF (M .GT. 1) ALPHA(M) = ALPHA(M - 1) 11 01010 + 620 CONTINUE 11 01020 + ALPHA(J) = -1.0 11 01030 + ENDIF 11 01040 + ALPHE(J, K, I) = ALPHA(J) 11 01050 + 630 CONTINUE 11 01060 + 640 CONTINUE 11 01070 + NP = NPOLD 11 01080 + DO 650 M = 1, NP 11 01090 + EE(M) = EK(M) 11 01100 + 650 CONTINUE 11 01110 +C 11 01120 +C-GET M-SUBSHELL ICC 11 01130 +C 11 01140 + 700 NS = 3 11 01150 + DO 750 K = 5, 9 11 01160 + N = NETAB(K) 11 01170 + IF (N .EQ. 0) GOTO 800 11 01180 + E1 = ETAB(1, K) 11 01190 + CALL ILOOP 11 01200 +C 11 01210 + DO 740 I = 1, 8 11 01220 + E2 = ETAB(1, 9) 11 01230 + L = I 11 01240 + IF (L .GT. 4) L = I - 4 11 01250 + DO 710 J = 1, N 11 01260 + ALPHA(J) = ALFTAB(J, K, I) 11 01270 + 710 CONTINUE 11 01280 + CALL FIT 11 01290 + E1 = ETAB(1, K) 11 01300 + DO 730 J = 1, NPOLD 11 01310 + IF (EK(J) .LT. E1) THEN 11 01320 + NPOLMJ = NPOLD - J 11 01330 + DO 720 ME = 1, NPOLMJ 11 01340 + M = NPOLD + 1 - ME 11 01350 + IF (M .GT. 1) ALPHA(M) = ALPHA(M - 1) 11 01360 + 720 CONTINUE 11 01370 + ALPHA(J) = -1.0 11 01380 + ENDIF 11 01390 + ALPHE(J, K, I) = ALPHA(J) 11 01400 + 730 CONTINUE 11 01410 + 740 CONTINUE 11 01420 + NP = NPOLD 11 01430 + DO 750 M = 1, NP 11 01440 + EE(M) = EK(M) 11 01450 + 750 CONTINUE 11 01460 +C 11 01470 +C-GET N+O+... SHELL ICC 11 01480 +C 11 01490 + 800 N = NETAB(10) 11 01500 + IF (N .NE. 0) THEN 11 01510 + NS = 4 11 01520 + E1 = ETAB(1, 10) 11 01530 + K = 10 11 01540 +C 11 01550 + CALL ILOOP 11 01560 +C 11 01570 + DO 840 I = 1, 8 11 01580 + L = I 11 01590 + IF (L .GT. 4) L = I - 4 11 01600 + DO 810 J = 1, N 11 01610 + ALPHA(J) = ALFTAB(J, K, I) 11 01620 + 810 CONTINUE 11 01630 + CALL FIT 11 01640 + E1 = ETAB(1, K) 11 01650 + DO 830 J = 1, NPOLD 11 01660 + IF (EK(J) .LT. E1) THEN 11 01670 + NPOLMJ = NPOLD - J 11 01680 + DO 820 ME = 1, NPOLMJ 11 01690 + M = NPOLD + 1 - ME 11 01700 + IF (M .GT. 1) ALPHA(M) = ALPHA(M - 1) 11 01710 + 820 CONTINUE 11 01720 + ALPHA(J) = -1.0 11 01730 + ENDIF 11 01740 + ALPHE(J, K, I) = ALPHA(J) 11 01750 + 830 CONTINUE 11 01760 + 840 CONTINUE 11 01770 + NP = NPOLD 11 01780 + DO 850 M = 1, NP 11 01790 + EE(M) = EK(M) 11 01800 + 850 CONTINUE 11 01810 + ENDIF 11 01820 + RETURN 11 01830 + END 11 01840 + 12 00010 + SUBROUTINE MIXOUT(I,ALPHE) 12 00020 +C 12 00030 +C subroutine to calculate Mixed transition output table 12 00040 +C 12 00050 + INTEGER I 12 00060 + REAL ALPHE(23, 10, 8) 12 00070 +C 12 00080 + INTEGER MP1,MPSW 12 00090 + REAL DATM(10, 8),RKL(8),RML(8),TCC(8),TCL(8),TCM(8),TLE(8), 12 00100 + 1 TME(8) 12 00110 + COMMON /OUTDAT/ DATM,TCL,RKL,TLE,TCM,RML,TME,TCC,MP1,MPSW 12 00120 + CHARACTER*11 XDATE 12 00130 + CHARACTER*10 STRMUL 12 00140 + CHARACTER*10 STRGE 12 00150 + CHARACTER*2 STRDGE 12 00160 + CHARACTER*5 NUCID 12 00170 + CHARACTER*6 STRDMR 12 00180 + CHARACTER*8 STRMR 12 00190 + COMMON/OUTDAC/ XDATE,STRMUL,STRGE,STRDGE,NUCID,STRMR,STRDMR 12 00200 + REAL ALFTAB(23, 10, 8) 12 00210 + REAL ETAB(23, 10) 12 00220 + INTEGER NETAB(10) 12 00230 + INTEGER Z 12 00240 + COMMON /HSCAL/ Z,NETAB,ALFTAB,ETAB 12 00250 + CHARACTER*2 OST(2) 12 00260 + CHARACTER*6 DMRSTR 12 00270 + COMMON /MROUTC/ OST,DMRSTR 12 00280 + INTEGER MPOL(2) 12 00290 + INTEGER NMP 12 00300 + LOGICAL MISMP2, E0MR 12 00310 + LOGICAL SKIP(10) 12 00320 + COMMON /MROUTN/ MPOL,NMP,MISMP2,E0MR,SKIP 12 00330 +C 12 00340 + CHARACTER*6 STRH 12 00350 + CHARACTER*6 STRL 12 00360 + CHARACTER*2 OTEMP 12 00370 +C 12 00380 + INTEGER K,MTEMP,IP,IM,J,N 12 00390 + REAL DEL,DELL,DELH,DELSQ,TEMP1 12 00400 + Real adjust(2),dadjst(2) 12 00410 +C 12 00420 +C Mixed transition case 12 00430 +C ===================== 12 00440 +C 12 00450 + IF(INDEX(STRMUL,'D').EQ.0 .AND. INDEX(STRMUL,'Q').EQ.0) 12 00460 + 1 THEN 12 00470 +C 12 00480 +C 12 00490 + adjust(1)=1.0 12 00500 + dadjst(1)=0.0 12 00510 + adjust(2)=1.0 12 00520 + dadjst(2)=0.0 12 00530 + K = 1 12 00540 + IF (INDEX(STRMUL, 'M4') .NE. 0) THEN 12 00550 + OST(K)='M4' 12 00560 + MPOL(K) = 8 12 00570 + K = 2 12 00580 + ENDIF 12 00590 + IF (INDEX(STRMUL, 'M3') .NE. 0) THEN 12 00600 + OST(K)='M3' 12 00610 + MPOL(K) = 7 12 00620 + K = 2 12 00630 + ENDIF 12 00640 + IF (INDEX(STRMUL, 'M2') .NE. 0) THEN 12 00650 + OST(K)='M2' 12 00660 + MPOL(K) = 6 12 00670 + K = 2 12 00680 + ENDIF 12 00690 + IF (INDEX(STRMUL, 'M1') .NE. 0) THEN 12 00700 + OST(K)='M1' 12 00710 + MPOL(K) = 5 12 00720 + K = 2 12 00730 + ENDIF 12 00740 + IF (INDEX(STRMUL, 'E4') .NE. 0) THEN 12 00750 + OST(K)='E4' 12 00760 + MPOL(K) = 4 12 00770 + K = 2 12 00780 + ENDIF 12 00790 + IF (INDEX(STRMUL, 'E3') .NE. 0) THEN 12 00800 + OST(K)='E3' 12 00810 + MPOL(K) = 3 12 00820 + K = 2 12 00830 + ENDIF 12 00840 + IF (INDEX(STRMUL, 'E2') .NE. 0) THEN 12 00850 + OST(K)='E2' 12 00860 + MPOL(K) = 2 12 00870 + K = 2 12 00880 + ENDIF 12 00890 + IF (INDEX(STRMUL, 'E1') .NE. 0) THEN 12 00900 + OST(K)='E1' 12 00910 + MPOL(K) = 1 12 00920 + ENDIF 12 00930 +C 12 00940 +C flag if E0 is present (9/91) 12 00950 +C 12 00960 + IF (INDEX(STRMUL, 'E0') .NE. 0) THEN 12 00970 + E0MR=.TRUE. 12 00980 + MPOL(2)=0 12 00990 + OST(2)=' ' 12 01000 + ENDIF 12 01010 +C 12 01020 +C-MPOL(1) HAS M OR E ORDER; MPOL(2) HAS E OR NONE 12 01030 +C-IF ORDER 1 HIGHER THAN ORDER 2, SWAP MPOL AND OST 12 01040 +C 12 01050 + IF (MPOL(2) .NE. 0) THEN 12 01060 + IF ((MPOL(1) - 4) .GT. MPOL(2)) THEN 12 01070 + MTEMP = MPOL(1) 12 01080 + MPOL(1) = MPOL(2) 12 01090 + MPOL(2) = MTEMP 12 01100 + OTEMP=OST(1) 12 01110 + OST(1)=OST(2) 12 01120 + OST(2)=OTEMP 12 01130 + ENDIF 12 01140 + ENDIF 12 01150 + Do 100 j=1,2 12 01160 + If(INDEX(ost(j),'3') .GT. 0)Then 12 01170 + adjust(j)=0.975 12 01180 + dadjst(j)=0.010 12 01190 + EndIf 12 01200 + If(INDEX(ost(j),'4') .GT. 0)Then 12 01210 + adjust(j)=0.975 12 01220 + dadjst(j)=0.005 12 01230 + EndIf 12 01240 +100 Continue 12 01250 + ENDIF 12 01260 +C 12 01270 +C-DECODE MIXING RATIO - DMR 12 01280 +C 12 01290 + CALL LBSUP(STRDMR) 12 01300 + DMRSTR=' ' 12 01310 +C 12 01320 +C IF DMR is GT, GE, LT, LE, AP, save this info in DMRSTR 12 01330 +C 12 01340 + IF(STRDMR(1:2).EQ.'GT' .OR. STRDMR(1:2).EQ.'GE' .OR. 12 01350 + 1 STRDMR(1:2).EQ.'LT'.OR. 12 01360 + 1 STRDMR(1:2).EQ.'LE' .OR. STRDMR(1:2).EQ.'AP') 12 01370 + 1 DMRSTR=STRDMR(1:2) 12 01380 + IP = INDEX(STRDMR, '+') 12 01390 + IM = INDEX(STRDMR, '-') 12 01400 +C Patch for people who put asymmetric uncertainties in backwards 12 01410 + IF(IM .EQ. 0 .OR. IM .GT. IP)THEN 12 01420 + STRL=STRDMR(IM+1:6) 12 01430 + ELSE 12 01440 + STRL=STRDMR(IM+1:IP-1) 12 01450 + ENDIF 12 01460 + CALL SQZSTR(STRL, ' ') 12 01470 + IF (IM .EQ. 0) THEN 12 01480 + STRH=STRL 12 01490 + ELSE 12 01500 + IF(IP .LT. IM)THEN 12 01510 + STRH=STRDMR(IP+1:IM-1) 12 01520 + ELSE 12 01530 + STRH=STRDMR(IP+1:6) 12 01540 + ENDIF 12 01550 + CALL SQZSTR(STRH, ' ') 12 01560 + ENDIF 12 01570 + CALL SQZSTR(STRMR, ' ') 12 01580 + CALL CNVS2U(STRMR, STRL, DEL, DELL) 12 01590 + CALL CNVS2U(STRMR, STRH, DEL, DELH) 12 01600 +C 12 01610 +C IF MULT GIVEN IS SINGLE BUT MR IS GIVEN, THEN MAKE M1 TO BE 12 01620 +C (M1+E2) AND E1 TO BE (E1+M2), AND SET MISMP2 FLAG TRUE 12 01630 +C 12 01640 + IF(MPOL(2).EQ.0 .AND. DEL.NE.0.) THEN 12 01650 + IF(MPOL(1).EQ.5) THEN 12 01660 + MPOL(2)=2 12 01670 + OST(2)='E2' 12 01680 + ENDIF 12 01690 + IF(MPOL(1).EQ.1) THEN 12 01700 + MPOL(2)=6 12 01710 + OST(2)='M2' 12 01720 + ENDIF 12 01730 + MISMP2=.TRUE. 12 01740 + ENDIF 12 01750 +C 12 01760 +C WHEN MULTIPOLARITY FIELD CONTAINS TWO MULTS, CALCULATE CC 12 01770 +C BASED ON BOTH EVEN THOUGH MR IS NOT GIVEN 12 01780 +C 12 01790 + IF (MPOL(2).EQ.0) RETURN 12 01800 +C 12 01810 +C MULT FIELD CONTAINS 2 MULTS. APPLY MR IF SUPPLIED 12 01820 +C IF NO MR IS GIEVN, DO CALCULATION AS IF MR(DELTA)=1. 12 01830 +C 12 01840 + IF(DEL.EQ.0.) THEN 12 01850 + DEL=1. 12 01860 + DMRSTR='NOMR' 12 01870 + ENDIF 12 01880 +C 12 01890 +C DATM(K,1) 1ST MULT 12 01900 +C 2 2ND MULT 12 01910 +C 3 CC 12 01920 +C 4 DICC(+DMR) 12 01930 +C 5 DICC(-DMR) 12 01940 +C 12 01950 + DO 950 K = 1, 10 12 01960 + DO 940 J = 1, 8 12 01970 + IF (SKIP(K)) GOTO 950 12 01980 + IF (J .EQ. MPOL(1)) DATM(K, 1) = ALPHE(I, K, J) 12 01990 + IF (J .EQ. MPOL(2)) DATM(K, 2) = ALPHE(I, K, J) 12 02000 + 940 CONTINUE 12 02010 + DELSQ = DEL * DEL 12 02020 +C 12 02030 +C when DMR is not limits 12 02040 +C 12 02050 + IF(DMRSTR.EQ.' ' .OR. DMRSTR.EQ.'AP') THEN 12 02060 + DATM(K, 3) = (DATM(K, 1) + DATM(K, 2) * DELSQ) / 12 02070 + + (1.0 + DELSQ) 12 02080 + DELSQ = (DEL + DELH) ** 2 12 02090 + DATM(K, 4) = (DATM(K, 1) + DATM(K, 2) * DELSQ) / 12 02100 + + (1.0 + DELSQ) 12 02110 + If(adjust(1) .NE. 1.0 .OR. adjust(2) .NE. 1.0)Then 12 02120 + If(datm(k,4) .LT. datm(k,3))Then 12 02130 + datm(k,4)=((adjust(1)-dadjst(1))*datm(k,1)+ 12 02140 + 2 (adjust(2)-dadjst(2))*datm(k,2)*delsq)/ 12 02150 + 3 (1.0+delsq) 12 02160 + Else If(datm(k,4) .GT. datm(k,3))Then 12 02170 + datm(k,4)=((adjust(1)+dadjst(1))*datm(k,1)+ 12 02180 + 2 (adjust(2)+dadjst(2))*datm(k,2)*delsq)/ 12 02190 + 3 (1.0+delsq) 12 02200 + Else 12 02210 + datm(k,4)=((adjust(1)-dadjst(1))*datm(k,1)+ 12 02220 + 2 (adjust(2)-dadjst(2))*datm(k,2)*delsq)/ 12 02230 + 3 (1.0+delsq) 12 02240 + Endif 12 02250 + EndIf 12 02260 + DELSQ = (DEL - DELL) ** 2 12 02270 + DATM(K, 5) = (DATM(K, 1) + DATM(K, 2) * DELSQ) / 12 02280 + + (1.0 + DELSQ) 12 02290 + If(adjust(1) .NE. 1.0 .OR. adjust(2) .NE. 1.0)Then 12 02300 + If(datm(k,5) .LT. datm(k,3))Then 12 02310 + datm(k,5)=((adjust(1)-dadjst(1))*datm(k,1)+ 12 02320 + 2 (adjust(2)-dadjst(2))*datm(k,2)*delsq)/ 12 02330 + 3 (1.0+delsq) 12 02340 + Else If(datm(k,5) .GT. datm(k,3))Then 12 02350 + datm(k,5)=((adjust(1)+dadjst(1))*datm(k,1)+ 12 02360 + 2 (adjust(2)+dadjst(2))*datm(k,2)*delsq)/ 12 02370 + 3 (1.0+delsq) 12 02380 + Else 12 02390 + datm(k,5)=((adjust(1)+dadjst(1))*datm(k,1)+ 12 02400 + 2 (adjust(2)+dadjst(2))*datm(k,2)*delsq)/ 12 02410 + 3 (1.0+delsq) 12 02420 + Endif 12 02430 + EndIf 12 02440 + datm(k,3)=(adjust(1)*datm(k,1)+adjust(2)*datm(k,2) 12 02450 + 2 *del*del)/(1.0+del*del) 12 02460 + datm(k,4)=datm(k,4)-datm(k,3) 12 02470 + datm(k,5)=datm(k,5)-datm(k,3) 12 02480 +C 12 02490 +C DMR is a limit 12 02500 +C 12 02510 + ELSE IF(DMRSTR.EQ.'GT' .OR. DMRSTR.EQ.'GE') THEN 12 02520 + If(adjust(1) .EQ. 1.0 .AND. adjust(2) .EQ. 1)Then 12 02530 + TEMP1 = (DATM(K, 1) + DATM(K, 2) * DELSQ) / 12 02540 + + (1.0 + DELSQ) 12 02550 + DATM(K,3)=(TEMP1+DATM(K,2))*0.5 12 02560 + DATM(K,4)=ABS(DATM(K,2)-DATM(K,3)) 12 02570 + Else 12 02580 + If(adjust(1)*datm(k,1) 12 02590 + 2 .GE. adjust(2)*datm(k,2)*delsq)Then 12 02600 + temp1=((adjust(1)+dadjst(1))*datm(k,1)+ 12 02610 + 2 (adjust(2)+dadjst(2))*datm(k,2)*delsq)/ 12 02620 + 3 (1.0+delsq) 12 02630 + datm(k,3)=(temp1+ 12 02640 + 2 (adjust(2)-dadjst(2))*datm(k,2))*0.5 12 02650 + datm(k,4)=datm(k,3)- 12 02660 + 2 (adjust(2)-dadjst(2))*datm(k,2) 12 02670 + Else 12 02680 + temp1=((adjust(1)-dadjst(1))*datm(k,1)+ 12 02690 + 2 (adjust(2)-dadjst(2))*datm(k,2)*delsq)/ 12 02700 + 3 (1.0+delsq) 12 02710 + datm(k,3)=(temp1+ 12 02720 + 2 (adjust(2)+dadjst(2))*datm(k,2))*0.5 12 02730 + datm(k,4)=(adjust(2)+dadjst(2))*datm(k,2)- 12 02740 + 3 datm(k,3) 12 02750 + EndIf 12 02760 + EndIf 12 02770 + DATM(K,5)=DATM(K,4) 12 02780 + ELSE IF(DMRSTR.EQ.'LT' .OR. DMRSTR.EQ.'LE') THEN 12 02790 + If(adjust(1) .EQ. 1.0 .AND. adjust(2) .EQ. 1)Then 12 02800 + TEMP1 = (DATM(K, 1) + DATM(K, 2) * DELSQ) / 12 02810 + + (1.0 + DELSQ) 12 02820 + DATM(K,3)=(TEMP1+DATM(K,1))*0.5 12 02830 + DATM(K,4)=ABS(TEMP1-DATM(K,3)) 12 02840 + Else 12 02850 + If(adjust(1)*datm(k,1) 12 02860 + 2 .GE. adjust(2)*datm(k,2)*delsq)Then 12 02870 + temp1=((adjust(1)-dadjst(1))*datm(k,1)+ 12 02880 + 2 (adjust(2)-dadjst(2))*datm(k,2)*delsq)/ 12 02890 + 3 (1.0+delsq) 12 02900 + datm(k,3)=(temp1+ 12 02910 + 2 (adjust(1)+dadjst(1))*datm(k,1))*0.5 12 02920 + datm(k,4)=(adjust(1)+dadjst(1))*datm(k,1)- 12 02930 + 3 datm(k,3) 12 02940 + Else 12 02950 + temp1=((adjust(1)+dadjst(1))*datm(k,1)+ 12 02960 + 2 (adjust(2)+dadjst(2))*datm(k,2)*delsq)/ 12 02970 + 3 (1.0+delsq) 12 02980 + datm(k,3)=(temp1+ 12 02990 + 2 (adjust(1)-dadjst(1))*datm(k,1))*0.5 12 03000 + datm(k,4)=datm(k,3)- 12 03010 + 2 (adjust(1)-dadjst(1))*datm(k,1) 12 03020 + Endif 12 03030 + Endif 12 03040 + DATM(K,5)=DATM(K,4) 12 03050 + 12 03060 +C MR not given 12 03070 +C 12 03080 + ELSE IF(DMRSTR.EQ.'NOMR') THEN 12 03090 + If(adjust(1) .EQ. 1.0 .AND. adjust(2) .EQ. 1)Then 12 03100 + DATM(K,3)=(DATM(K,1)+DATM(K,2))*.5 12 03110 + DATM(K,4)=ABS(DATM(K,1)-DATM(K,3)) 12 03120 + Else 12 03130 + If(adjust(1)*datm(k,1) .GE. adjust(2)*datm(k,2)) 12 03140 + 2 Then 12 03150 + datm(k,3)=((adjust(1)+dadjst(1))*datm(k,1)+ 12 03160 + 2 (adjust(2)-dadjst(2))*datm(k,2))*0.5 12 03170 + datm(k,4)=(adjust(1)+dadjst(1))*datm(k,1)- 12 03180 + 2 datm(k,3) 12 03190 + Else 12 03200 + datm(k,3)=((adjust(1)-dadjst(1))*datm(k,1)+ 12 03210 + 2 (adjust(2)+dadjst(2))*datm(k,2))*0.5 12 03220 + datm(k,4)=(adjust(2)+dadjst(2))*datm(k,2)- 12 03230 + 2 datm(k,3) 12 03240 + EndIf 12 03250 + Endif 12 03260 + DATM(K,5)=DATM(K,4) 12 03270 + ENDIF 12 03280 +C 12 03290 +C IF DE IS LIMIT, NO UNCERTAINTY CALCULATION WILL BE GIVEN 12 03300 +C 12 03310 + IF(STRDGE.EQ.'LG') THEN 12 03320 + DATM(K,4)=0. 12 03330 + DATM(K,5)=0. 12 03340 + ENDIF 12 03350 + datm(k,1)=adjust(1)*datm(k,1) 12 03360 + datm(k,2)=adjust(2)*datm(k,2) 12 03370 + 950 CONTINUE 12 03380 + NMP = 5 12 03390 + IF (DELH .EQ. 0 .AND.(DMRSTR.EQ.' '.OR.DMRSTR.EQ.'AP')) 12 03400 + 1 NMP = 3 12 03410 + IF(STRDGE.EQ.'LG') NMP=3 12 03420 +C 12 03430 +C-SUMMING ICC'S FOR MIXED TRANSITIONS 12 03440 +C DICC'S will follow (9/91) 12 03450 +C 12 03460 + DO 970 N = 1, 3 12 03470 + DO 960 K=2,4 12 03480 + IF(.NOT.SKIP(K))TCL(N)=TCL(N)+DATM(K,N) 12 03490 + 960 CONTINUE 12 03500 + IF (.NOT.SKIP(1)) THEN 12 03510 + TLE(N) = DATM(1, N) + 1.33 * TCL(N) 12 03520 + IF(TCL(N).NE.0.) RKL(N)=DATM(1,N)/TCL(N) 12 03530 + ENDIF 12 03540 + DO 962 K=5,9 12 03550 + IF(.NOT.SKIP(K)) TCM(N)=TCM(N)+DATM(K,N) 12 03560 + 962 CONTINUE 12 03570 + IF(TCL(N).NE.0. .AND. TCM(N).NE.0.) RML(N)=TCM(N)/TCL(N) 12 03580 +C 12 03590 +C DO NOT CALCULATE TOTAL IF L'S AND M'S ARE TO SKIP 12 03600 +C 12 03610 + DO 964 K=1,9 12 03620 + IF(SKIP(K)) GO TO 966 12 03630 + 964 CONTINUE 12 03640 + TME(N)=DATM(1,N)+TCL(N)+1.33*TCM(N) 12 03650 + IF(.NOT.SKIP(10)) TCC(N)=DATM(1,N)+TCL(N)+TCM(N)+ 12 03660 + 1 DATM(10,N) 12 03670 + 966 CONTINUE 12 03680 + 970 CONTINUE 12 03690 +C 12 03700 +C DICC's for the summed ICC's (9/91) 12 03710 +C 12 03720 + IF(NMP.GT.3) THEN 12 03730 +C 12 03740 +C When MR information is available, (modified 10/91) 12 03750 +C 12 03760 + IF(DEL.GT.0. .AND. DELH.GT.0. .AND. DMRSTR.EQ.' ') THEN 12 03770 + DELSQ=(DEL+DELH)**2 12 03780 + TCL(4)=(TCL(1)+TCL(2)*DELSQ)/(1.0+DELSQ) - TCL(3) 12 03790 + TLE(4)=(TLE(1)+TLE(2)*DELSQ)/(1.0+DELSQ) - TLE(3) 12 03800 + TCM(4)=(TCM(1)+TCM(2)*DELSQ)/(1.0+DELSQ) - TCM(3) 12 03810 + TME(4)=(TME(1)+TME(2)*DELSQ)/(1.0+DELSQ) - TME(3) 12 03820 + TCC(4)=(TCC(1)+TCC(2)*DELSQ)/(1.0+DELSQ) - TCC(3) 12 03830 + DELSQ=(DEL-DELL)**2 12 03840 + TCL(5)=(TCL(1)+TCL(2)*DELSQ)/(1.0+DELSQ) - TCL(3) 12 03850 + TLE(5)=(TLE(1)+TLE(2)*DELSQ)/(1.0+DELSQ) - TLE(3) 12 03860 + TCM(5)=(TCM(1)+TCM(2)*DELSQ)/(1.0+DELSQ) - TCM(3) 12 03870 + TME(5)=(TME(1)+TME(2)*DELSQ)/(1.0+DELSQ) - TME(3) 12 03880 + TCC(5)=(TCC(1)+TCC(2)*DELSQ)/(1.0+DELSQ) - TCC(3) 12 03890 +C 12 03900 +C if MR info is not all given, then 12 03910 +C 12 03920 + ELSE 12 03930 + IF(DMRSTR.EQ.'AP'.OR. DMRSTR.EQ.' ') 12 03940 + 1 THEN 12 03950 + DELSQ=(DEL+DELH)**2 12 03960 + TCL(4)=(TCL(1)+TCL(2)*DELSQ)/(1.0+DELSQ) - TCL(3) 12 03970 + TLE(4)=(TLE(1)+TLE(2)*DELSQ)/(1.0+DELSQ) - TLE(3) 12 03980 + TCM(4)=(TCM(1)+TCM(2)*DELSQ)/(1.0+DELSQ) - TCM(3) 12 03990 + TME(4)=(TME(1)+TME(2)*DELSQ)/(1.0+DELSQ) - TME(3) 12 04000 + TCC(4)=(TCC(1)+TCC(2)*DELSQ)/(1.0+DELSQ) - TCC(3) 12 04010 + DELSQ=(DEL-DELH)**2 12 04020 + TCL(5)=(TCL(1)+TCL(2)*DELSQ)/(1.0+DELSQ) - TCL(3) 12 04030 + TLE(5)=(TLE(1)+TLE(2)*DELSQ)/(1.0+DELSQ) - TLE(3) 12 04040 + TCM(5)=(TCM(1)+TCM(2)*DELSQ)/(1.0+DELSQ) - TCM(3) 12 04050 + TME(5)=(TME(1)+TME(2)*DELSQ)/(1.0+DELSQ) - TME(3) 12 04060 + TCC(5)=(TCC(1)+TCC(2)*DELSQ)/(1.0+DELSQ) - TCC(3) 12 04070 + ELSE IF(DMRSTR.EQ.'GT' .OR. DMRSTR.EQ.'GE') THEN 12 04080 + TCL(4)=ABS(TCL(2)-TCL(3)) 12 04090 + TCL(5)=TCL(4) 12 04100 + TLE(4)=ABS(TLE(2)-TLE(3)) 12 04110 + TLE(5)=TLE(4) 12 04120 + TCM(4)=ABS(TCM(2)-TCM(3)) 12 04130 + TCM(5)=TCM(4) 12 04140 + TME(4)=ABS(TME(2)-TME(3)) 12 04150 + TME(5)=TME(4) 12 04160 + TCC(4)=ABS(TCC(2)-TCC(3)) 12 04170 + TCC(5)=TCC(4) 12 04180 + ELSE IF(DMRSTR.EQ.'LT' .OR. DMRSTR.EQ.'LE') THEN 12 04190 + TCL(4)=ABS(TCL(1)-TCL(3)) 12 04200 + TCL(5)=TCL(4) 12 04210 + TLE(4)=ABS(TLE(1)-TLE(3)) 12 04220 + TLE(5)=TLE(4) 12 04230 + TCM(4)=ABS(TCM(1)-TCM(3)) 12 04240 + TCM(5)=TCM(4) 12 04250 + TME(4)=ABS(TME(1)-TME(3)) 12 04260 + TME(5)=TME(4) 12 04270 + TCC(4)=ABS(TCC(1)-TCC(3)) 12 04280 + TCC(5)=TCC(4) 12 04290 + ELSE IF(DMRSTR.EQ.'NOMR') THEN 12 04300 + TCL(4)=ABS(TCL(1)-TCL(3)) 12 04310 + TCL(5)=TCL(4) 12 04320 + TLE(4)=ABS(TLE(1)-TLE(3)) 12 04330 + TLE(5)=TLE(4) 12 04340 + TCM(4)=ABS(TCM(1)-TCM(3)) 12 04350 + TCM(5)=TCM(4) 12 04360 + TME(4)=ABS(TME(1)-TME(3)) 12 04370 + TME(5)=TME(4) 12 04380 + TCC(4)=ABS(TCC(1)-TCC(3)) 12 04390 + TCC(5)=TCC(4) 12 04400 + ENDIF 12 04410 + ENDIF 12 04420 + ENDIF 12 04430 + RETURN 12 04440 + END 12 04450 + 13 00010 + SUBROUTINE OUTICC(I,EK,TO1370,ALPHE) 13 00020 +C 13 00030 +C Subroutine to output ICC tables. 13 00040 +C 13 00050 + INTEGER I 13 00060 + REAL ALPHE(23, 10, 8) 13 00070 + REAL EK(100) 13 00080 + LOGICAL TO1370 13 00090 +C 13 00100 + INTEGER MP1,MPSW 13 00110 + REAL DATM(10, 8),RKL(8),RML(8),TCC(8),TCL(8),TCM(8),TLE(8), 13 00120 + 1 TME(8) 13 00130 + COMMON /OUTDAT/ DATM,TCL,RKL,TLE,TCM,RML,TME,TCC,MP1,MPSW 13 00140 + CHARACTER*11 XDATE 13 00150 + CHARACTER*10 STRMUL 13 00160 + CHARACTER*10 STRGE 13 00170 + CHARACTER*2 STRDGE 13 00180 + CHARACTER*5 NUCID 13 00190 + CHARACTER*6 STRDMR 13 00200 + CHARACTER*8 STRMR 13 00210 + COMMON/OUTDAC/ XDATE,STRMUL,STRGE,STRDGE,NUCID,STRMR,STRDMR 13 00220 + REAL ALFTAB(23, 10, 8) 13 00230 + REAL ETAB(23, 10) 13 00240 + INTEGER NETAB(10) 13 00250 + INTEGER Z 13 00260 + COMMON /HSCAL/ Z,NETAB,ALFTAB,ETAB 13 00270 + CHARACTER*2 OST(2) 13 00280 + CHARACTER*6 DMRSTR 13 00290 + COMMON /MROUTC/ OST,DMRSTR 13 00300 + INTEGER MPOL(2) 13 00310 + INTEGER NMP 13 00320 + LOGICAL MISMP2, E0MR 13 00330 + LOGICAL SKIP(10) 13 00340 + COMMON /MROUTN/ MPOL,NMP,MISMP2,E0MR,SKIP 13 00350 +C 13 00360 + INTEGER SCOMNT(10),II,JJ,KK,LL,K,MPORS,N 13 00370 +C 13 00380 + 9083 FORMAT(///' ICC (HAGER-SELTZER), Z = ', I3, ' (', 13 00390 + + A, '); ', 'EG= ', A, 'KEV; MULT.= ', A, 5X,A) 13 00400 + 9085 FORMAT(/, 20X, 'E1', 12X, 'E2', 12X, 'E3', 12X, 'E4', 13 00410 + + 17X, 'M1', 12X, 'M2', 12X, 'M3', 12X, 'M4'/ 13 00420 + + 10X, (5X, 4(3X, '-----------')), 13 00430 + + (5X, 4(3X, '-----------'))) 13 00440 + 9088 FORMAT(/20X, A, 12X, A, 12X, 'MIXED ICC', 4X, 13 00450 + + 'DICC(+DMR)', 4X, 'DICC(-DMR)'/50X, 'MR=', A, A/ 13 00460 + + /, 15X, 5(3X, '-----------')) 13 00470 +C-INITIALIZE OUTPUT VARIABLES 13 00480 + TO1370=.FALSE. 13 00490 + DO 870 KK = 1, 8 13 00500 + TCL(KK) = 0.0 13 00510 + TLE(KK) = 0.0 13 00520 + TCM(KK) = 0.0 13 00530 + TME(KK) = 0.0 13 00540 + TCC(KK) = 0.0 13 00550 + RKL(KK) = 0.0 13 00560 + RML(KK) = 0.0 13 00570 + IF (KK .GT. 5) GOTO 870 13 00580 + DO 860 LL = 1, 10 13 00590 + DATM(LL, KK) = 0.0 13 00600 + 860 CONTINUE 13 00610 + 870 CONTINUE 13 00620 + DO 880 II = 1, 2 13 00630 + OST(II)=' ' 13 00640 + MPOL(II) = 0 13 00650 + 880 CONTINUE 13 00660 + DO 890 JJ = 1, 10 13 00670 + SKIP(JJ) = .FALSE. 13 00680 + SCOMNT(JJ)=0 13 00690 + 890 CONTINUE 13 00700 + MISMP2=.FALSE. 13 00710 + E0MR=.FALSE. 13 00720 +C 13 00730 +C Get non numeric DE value here 13 00740 +C 13 00750 + IF(STRDGE.EQ.'LE' .OR. STRDGE.EQ.'LT' .OR. 13 00760 + 1 STRDGE.EQ.'GE' .OR. STRDGE.EQ.'GT') STRDGE='LG' 13 00770 +C 13 00780 +C-IF GAMMA ENERGY < BINDING ENERGY, ICC = 0 13 00790 +C If gamma energy too close to binding energy, set SCOMNT(k)=1 13 00800 +C Compare EK(g energy from dataset) to ETAB(1,k)(from ICC table) 13 00810 +C 13 00820 + DO 910 K = 1, 10 13 00830 + IF (ALPHE(I, K, 1) .LT. 0.0) SKIP(K) = .TRUE. 13 00840 + IF (K .NE. 10 .AND. Z .GE. 30) THEN 13 00850 + If(ek(i) .GE. etab(1,k) 13 00860 + 2 .AND. ek(i) .LE. (etab(1,k)-1.0))scomnt(k)=1 13 00870 + ENDIF 13 00880 + 910 CONTINUE 13 00890 +C-DRAGOUN ET AL LIST NO ICC FOR Z < 37 13 00900 + IF (Z .LT. 37) SKIP(10) = .TRUE. 13 00910 + IF (Z .LT. 30) THEN 13 00920 + SKIP(5) = .TRUE. 13 00930 + SKIP(6) = .TRUE. 13 00940 + SKIP(7) = .TRUE. 13 00950 + SKIP(8) = .TRUE. 13 00960 + SKIP(9) = .TRUE. 13 00970 + ENDIF 13 00980 +C-SKIP(K) TRUE INDICATES THAT NO CC CAN BE CALCULATED FOR THE KTH SUBSH 13 00990 +C-TEXT OUTPUT SHOWS WHY 13 01000 +C 13 01010 +C-CHECK MULTIPOLARITY FIELDS 13 01020 +C Multiporarity field can consist of En, Mn, D, or Q. In case D 13 01030 +C or Q is present along with En or Mn( for example D,E2 or E1,Q), 13 01040 +C the program will treat as no En or Mn. 13 01050 +C 13 01060 + IF(STRMUL.EQ.' ') GO TO 1100 13 01070 +C 13 01080 +C calculate mixed transition output table avlues 13 01090 +C 13 01100 + CALL MIXOUT(I,ALPHE) 13 01110 + IF(MPOL(2).EQ.0) GO TO 1100 13 01120 + 13 01130 +C-MIXED TRANSITION OUTPUT 13 01140 +C 13 01150 + WRITE(36, 9083) Z, NUCID,STRGE,STRMUL,XDATE 13 01160 + IF(MISMP2) WRITE(36,FMT='(A)') 13 01170 + 1 ' Warning - Single multi given' 13 01180 + 13 01190 + WRITE(36, 9088) (OST(JJ), JJ = 1, 2),STRMR, STRDMR 13 01200 +C 13 01210 +C-OUTPUT COMMENT 13 01220 +C-IF SKIP(K) IS TRUE, NO NUMERIC OUTPUT FOR KTH SUBSHELL 13 01230 +C-NETAB(K) = 0 MEANS Z OUTSIDE TABLE 13 01240 +C-NETAB(K) NOT 0, SKIP(K) TRUE MEANS ENERGY OUTSIDE TABLE 13 01250 +C 13 01260 + MPORS=1 13 01270 + CALL OUTCC(NMP,MPORS,SKIP,NETAB,SCOMNT) 13 01280 +C 13 01290 +C-SET UP FOR PUNCHING NEW G-RECORDS FOR MIXED TRANSITIONS 13 01300 +C CC info for gamma card is in 3rd column of output 13 01310 +C 13 01320 + MP1 = 3 13 01330 +C-TAKE LARGER OF TOTAL ICC UNCERTAINTIES FOR PUNH 13 01340 + IF (ABS(TCC(5)) .GT. ABS(TCC(4))) THEN 13 01350 + MPSW= 5 13 01360 + ELSE 13 01370 + MPSW = 4 13 01380 + ENDIF 13 01390 +C-IF NO UNCERTAINTY ON MR THEN TREAT AS PURE MULTIPOLE 13 01400 + IF (NMP .EQ. 3) MPSW = 1 13 01410 +C 13 01420 +C IF ONE SIDED OR NOMR, WHAT GAMMACARD SHOULD BE GENERATED?????? 13 01430 +C GO TO 1370 OR MPSW=1 AND CONTINUE 13 01440 +C 13 01450 + RETURN 13 01460 +C 13 01470 +C-SUMMING REGULAR ICC'S 13 01480 +C =========== 13 01490 +C 13 01500 + 1100 NMP = 8 13 01510 + DO 1150 N = 1, NMP 13 01520 +C 13 01530 +C transfer ALPHE values to corresponding DATM for output 13 01540 +C 13 01550 + DO 1105 K=1,10 13 01560 + DATM(K,N)=ALPHE(I,K,N) 13 01570 + If(n .EQ. 3 .OR. n .EQ. 4 .OR. n .EQ. 7 .OR. n .EQ. 8) 13 01580 + 2 datm(k,n)=0.975*datm(k,n) 13 01590 + 1105 CONTINUE 13 01600 +C 13 01610 +C TOTAL-L 13 01620 +C TOTAL L IS CALCULATED THOUGH SOME OF THE L'S SHOULD BE SKIPPED 13 01630 +C 13 01640 + DO 1110 K = 2, 4 13 01650 + IF (.NOT.SKIP(K)) TCL(N) = TCL(N) + datm(k,n) 13 01660 + 1110 CONTINUE 13 01670 + IF (.NOT.SKIP(1)) THEN 13 01680 + TLE(N) = datm(1,n) + 1.33 * TCL(N) 13 01690 + IF (TCL(N) .NE. 0.0) RKL(N) = datm(1,n)/TCL(N) 13 01700 + ENDIF 13 01710 +C 13 01720 +C TOTAL-M 13 01730 + DO 1120 K = 5, 9 13 01740 + IF (.NOT.SKIP(K)) TCM(N) = TCM(N) + datm(k,n) 13 01750 + 1120 CONTINUE 13 01760 + IF(TCL(N).NE.0. .AND. TCM(N).NE.0.) RML(N)=TCM(N)/TCL(N) 13 01770 +C 13 01780 +C Do not CALCULATE TOTAL if L's and M's are to skip 13 01790 +C 13 01800 + DO 1130 KK=1,9 13 01810 + IF(SKIP(KK)) GO TO 1150 13 01820 + 1130 CONTINUE 13 01830 + TME(N)=datm(1,n) + TCL(N)+1.33*TCM(N) 13 01840 +C 13 01850 +C TO AVOID TME VALUE SET TO -1. WHEN EVERYHING ENEGY OUTSIDE RANGE 13 01860 +C 13 01870 + IF(TME(N).LT.0.) TME(N)=0. 13 01880 + IF(.NOT.SKIP(10)) 13 01890 + 1 TCC(N) = datm(1,n)+ TCL(N)+ TCM(N)+datm(10,n) 13 01900 + 1150 CONTINUE 13 01910 +C 13 01920 +C-GENERAL OUTPUT 13 01930 +C 13 01940 + WRITE(36, 9083) Z, NUCID,STRGE,STRMUL,XDATE 13 01950 + WRITE(36, 9085) 13 01960 +C 13 01970 + MPORS=0 13 01980 +C 13 01990 + CALL OUTCC(NMP,MPORS,SKIP,NETAB,SCOMNT) 13 02000 +C 13 02010 +C-SET UP TO PUNCH NEW G-CARDS FOR PURE MULTIPOLES 13 02020 +C 13 02030 + MPSW = 1 13 02040 + IF ((MPOL(1) .EQ. 0) .OR. (MPOL(2) .NE. 0)) TO1370=.TRUE. 13 02050 + MP1 = MPOL(1) 13 02060 + RETURN 13 02070 + END 13 02080 + 14 00010 + SUBROUTINE GAMUNC(EVAL,DEVAL) 14 00020 +C 14 00030 +C produces ICC tables for gamma E(EVAL) +/- uncertainty(DEVAL) values14 00040 +C 14 00050 + REAL EVAL,DEVAL 14 00060 +C 14 00070 + CHARACTER*11 XDATE 14 00080 + CHARACTER*10 STRMUL 14 00090 + CHARACTER*10 STRGE 14 00100 + CHARACTER*2 STRDGE 14 00110 + CHARACTER*5 NUCID 14 00120 + CHARACTER*6 STRDMR 14 00130 + CHARACTER*8 STRMR 14 00140 + COMMON/OUTDAC/ XDATE,STRMUL,STRGE,STRDGE,NUCID,STRMR,STRDMR 14 00150 +C 14 00160 + REAL ALPHE2(23, 10, 8),EDGAM(100),X 14 00170 + CHARACTER*2 DX 14 00180 + CHARACTER*10 STR 14 00190 + LOGICAL DUM 14 00200 + INTEGER I,NPHERE 14 00210 +C 14 00220 + NPHERE=2 14 00230 + X=0.0 14 00240 + EDGAM(1)=EVAL+DEVAL 14 00250 + EDGAM(2)=EVAL-DEVAL 14 00260 + IF(EDGAM(2).LT.0.) THEN 14 00270 + EDGAM(2)=0 14 00280 + NPHERE=1 14 00290 + ENDIF 14 00300 + CALL HSICAL(NPHERE,EDGAM,ALPHE2) 14 00310 + DO 100 I=1,NPHERE 14 00320 + CALL CNVU2S(EDGAM(I),X,STR,10,DX,2) 14 00330 + STRGE=STR 14 00340 + CALL OUTICC(I,EDGAM,DUM,ALPHE2) 14 00350 + 100 CONTINUE 14 00360 + RETURN 14 00370 + END 14 00380 + 15 00010 + LOGICAL FUNCTION DOOUT(CC,DCC,TOTAL,LIMIT) 15 00020 +C Determines if CC/TOTAL is greater than the limit within the 15 00030 +C uncertainty DCC and 3% uncertainty in theory 15 00040 +C 15 00050 + REAL CC,DCC,TOTAL,LIMIT 15 00060 +C 15 00070 + REAL X,DX 15 00080 +C 15 00090 + REAL SQRT 15 00100 + INTRINSIC SQRT 15 00110 +C 15 00120 + DOOUT=.TRUE. 15 00130 + X=CC/TOTAL 15 00140 + IF(X .GT. LIMIT)RETURN 15 00150 + DX=9E-4 15 00160 + IF(CC .GT. 0.)DX=DX+(DCC/CC)**2 15 00170 + DX=SQRT(DX) 15 00180 + IF(((1+DX)*X) .LE. LIMIT)DOOUT=.FALSE. 15 00190 + RETURN 15 00200 + END 15 00210 + 16 00010 + SUBROUTINE CHKTHE(XCC,XDCC,STRCC,STRDCC) 16 00020 +C Checks the number of significant digits on STRCC assuming a 3% 16 00030 +C theoretical uncertainty on CC combined in quadrature with the 16 00040 +C experimental uncertainty DCC and adjusts the strings STRCC and 16 00050 +C STRDCC if necessary. 16 00060 +C 16 00070 + DOUBLE PRECISION XCC,XDCC 16 00080 + CHARACTER*(*) STRCC,STRDCC 16 00090 +C 16 00100 + INTEGER MPSW,CHKLEN,THEDCC,POINT,NEWLEN,OLDLEN 16 00110 + CHARACTER*7 LOCCC 16 00120 + CHARACTER*2 LOCDCC 16 00130 + DOUBLE PRECISION DCC,DDCC 16 00140 +C 16 00150 + INTEGER INDEX 16 00160 + REAL FLOAT 16 00170 + DOUBLE PRECISION DSQRT 16 00180 + INTRINSIC DSQRT,FLOAT,INDEX 16 00190 +C 16 00200 + INTEGER IVLSTR,LENSTR,ATLST1 16 00210 + EXTERNAL IVLSTR,LENSTR,ATLST1 16 00220 +C 16 00230 + MPSW=2 16 00240 + DCC=XCC 16 00250 + DDCC=9.D-4*DCC*DCC 16 00260 + DDCC=DDCC+XDCC*XDCC 16 00270 + DDCC=DSQRT(DDCC) 16 00280 + CALL DATSTR(DCC,DDCC,LOCCC,7,LOCDCC,2,MPSW) 16 00290 + CALL LBSUP(STRCC) 16 00300 + CALL LBSUP(LOCCC) 16 00310 + IF(LOCCC(1:LENSTR(LOCCC)) .EQ. STRCC(1:LENSTR(STRCC)))RETURN 16 00320 +C String is different 16 00330 + IF(INDEX(LOCCC,'E') .EQ. 0 .AND. INDEX(STRCC,'E') .EQ. 0)THEN 16 00340 + CHKLEN=LENSTR(STRCC)-LENSTR(LOCCC) 16 00350 + ELSE 16 00360 + POINT=INDEX(LOCCC,'E') 16 00370 + IF(POINT .GT. 0)THEN 16 00380 + NEWLEN=LEN(LOCCC(1:POINT-1)) 16 00390 + ELSE 16 00400 + NEWLEN=LENSTR(LOCCC) 16 00410 + ENDIF 16 00420 + POINT=INDEX(STRCC,'E') 16 00430 + IF(POINT .GT. 0)THEN 16 00440 + OLDLEN=LEN(STRCC(1:POINT-1)) 16 00450 + ELSE 16 00460 + OLDLEN=LENSTR(STRCC) 16 00470 + ENDIF 16 00480 + CHKLEN=OLDLEN-NEWLEN 16 00490 + ENDIF 16 00500 + IF(CHKLEN .EQ. 0)RETURN 16 00510 + IF(CHKLEN .GT. 0)THEN 16 00520 + THEDCC=IVLSTR(STRDCC) 16 00530 +100 CONTINUE 16 00540 + THEDCC=NINT(FLOAT(THEDCC)/10.) 16 00550 + IF(THEDCC .EQ. 0)THEN 16 00560 + WRITE(36,2) STRCC(1:ATLST1(STRCC)),STRDCC(1:ATLST1(STRDCC)),16 00570 + 2 LOCCC(1:ATLST1(LOCCC)),' ' 16 00580 +2 FORMAT(' Changing ',A,' ',A,' to ',A,' ',A, 16 00590 + 3 ' due to 3% uncer in theory') 16 00600 + STRCC=LOCCC 16 00610 + STRDCC=' ' 16 00620 + RETURN 16 00630 + ENDIF 16 00640 + CHKLEN=CHKLEN-1 16 00650 + IF(CHKLEN .GT. 0)THEN 16 00660 + GOTO 100 16 00670 + ELSE 16 00680 + CALL KNVI2S(THEDCC,LOCDCC,2) 16 00690 + WRITE(36,2) STRCC(1:ATLST1(STRCC)),STRDCC(1:ATLST1(STRDCC)),16 00700 + 2 LOCCC(1:ATLST1(LOCCC)),LOCDCC(1:ATLST1(LOCDCC)) 16 00710 + STRCC=LOCCC 16 00720 + STRDCC=LOCDCC 16 00730 + ENDIF 16 00740 + ELSE 16 00750 +C Problem. Note it and return 16 00760 + WRITE(36,1)LOCCC(1:ATLST1(LOCCC)),LOCDCC(1:ATLST1(LOCDCC)), 16 00770 + 2 STRCC(1:ATLST1(STRCC)),STRDCC(1:ATLST1(STRDCC)) 16 00780 +1 FORMAT(' Check results: Theory=',A, 16 00790 + 2 ' assuming 3% uncer. Exper=',A,' ',A) 16 00800 + ENDIF 16 00810 + RETURN 16 00820 + END 16 00830 + 17 00010 + INTEGER FUNCTION ATLST1(STR) 17 00020 + CHARACTER*(*) STR 17 00030 +C 17 00040 + INTEGER LENSTR 17 00050 + EXTERNAL LENSTR 17 00060 +C 17 00070 + ATLST1=LENSTR(STR) 17 00080 + IF(ATLST1 .LT. 1)ATLST1=1 17 00090 + RETURN 17 00100 + END 17 00110 + 18 00010 +C+++MDC+++ 18 00020 +C...VAX, DVF, UNX 18 00030 +C SUBROUTINE DATE_20(DATE) 18 00040 + 18 00050 +C CHARACTER DATE*(*) 18 00060 +C 18 00070 +C RETURNS DATE AS A CHARACTER STRING OF 11 CHARACTERS IN THE 18 00080 +C FORM DD-MMM-YYYY 18 00090 +C 18 00100 +C Character*3 mon(12) 18 00110 +C Data mon/'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep', 18 00120 +C +'Oct','Nov','Dec'/ 18 00130 +C...VAX, DVF 18 00140 +C/ Integer im 18 00150 +C/ Character*4 ccyy 18 00160 +C/ Character*2 dd 18 00170 +C/ CHARACTER DAY*8 18 00180 +C/C 18 00190 +C/C GET THE DATE AS A CHARACTER STRING CCYYMMDD 18 00200 +C/C 18 00210 +C/ CALL DATE_AND_TIME(DAY) 18 00220 +C/ Read(day,'(A4,I2,A2)') ccyy,im,dd 18 00230 +C/ date=dd//'-'//mon(im)//'-'//ccyy 18 00240 +C...UNX 18 00250 +C INTEGER IYMD(3) 18 00260 +C CALL IDATE(IYMD) 18 00270 +C WRITE(DATE,FMT='(I2,''-'',A3,''-'',I4)') IYMD(1),MON(IYMD(2)), 18 00280 +C + IYMD(3) 18 00290 +C...VAX, DVF, UNX 18 00300 +C RETURN 18 00310 +C END 18 00320 +C---MDC--- 19 00010 + 19 00020 + Subroutine GivWarn(seq,record,newrec) 19 00030 +C Checks old record and gives a warning on the terminal if it 19 00040 +C contains quantities not generated by HSICC 19 00050 +C 19 00060 + Integer seq 19 00070 + Character*(*) record,newrec 19 00080 +C 19 00090 + Integer i 19 00100 + Integer maxchk 19 00110 + Parameter (maxchk=9) 19 00120 + Character*71 tmpstr 19 00130 + Logical dowarn 19 00140 +C 19 00150 + Integer Lenstr 19 00160 + External Lenstr 19 00170 +C 19 00180 + Integer INDEX 19 00190 + Intrinsic INDEX 19 00200 +C 19 00210 + Character*4 check(maxchk) 19 00220 + Data check/'KC', 'LC', 'MC','NC+', 19 00230 + 2 'K/T','L/T','M/T','N/T','CC'/ 19 00240 +C 19 00250 + If(record.EQ.' ' .OR. record(6:6).EQ. ' ')Return 19 00260 + dowarn=.FALSE. 19 00270 + tmpstr=record(10:) 19 00280 +100 Continue 19 00290 + Call Lbsup(tmpstr) 19 00300 + Do 200 i=1,maxchk 19 00310 + If(tmpstr(1:Lenstr(check(i))) 19 00320 + 2 .EQ. check(i)(1:Lenstr(check(i))))GoTo 300 19 00330 +200 Continue 19 00340 + dowarn=.TRUE. 19 00350 +300 Continue 19 00360 + If(dowarn)Then 19 00370 + Write(6,FMT='('' *****'')') 19 00380 + Write(6, 19 00390 + 2 FMT='(X,I8,'' The following record will be replaced: '')')seq 19 00400 + Write(6,FMT='(X,A)')record(1:Lenstr(record)) 19 00410 + Write(6,FMT='(10X,''by'')') 19 00420 + Write(6,FMT='(X,A)')newrec(1:Lenstr(newrec)) 19 00430 + Write(6,FMT='(10X,''Please check before running HSMRG'')') 19 00440 + Write(6,FMT='('' *****'')') 19 00450 + Return 19 00460 + EndIf 19 00470 + i=INDEX(tmpstr,'$') 19 00480 + If(i .EQ. 0)Return 19 00490 + tmpstr=tmpstr(i+1:) 19 00500 + If(Lenstr(tmpstr) .GT. 0)GoTo 100 19 00510 + Return 19 00520 + End 19 00530 diff --git a/src/ensdf_processing/HSICC/hsmrg.for b/src/ensdf_processing/HSICC/hsmrg.for new file mode 100644 index 0000000000..a60b0c91b1 --- /dev/null +++ b/src/ensdf_processing/HSICC/hsmrg.for @@ -0,0 +1,416 @@ +C PROGRAM HSMRG 01 00010 +C***********************************************************************01 00020 +C 01 00030 +C REVISION HISTORY: 01 00040 +C VERSION 1( 0) AS OF 20-JUL-78. INITIAL VERSION. 01 00050 +C VERSION 2( 1) AS OF 25-JUL-78. REWRITE FOR INCR. FLEXIBILITY. 01 00060 +C VERSION 2( 2) AS OF 10-APR-79. HANDLE MISSING '2 G' CARDS. 01 00070 +C VERSION 3( 3) AS OF 9-JUN-81. USE DIALOG=LINE FOR DEC. 01 00080 +C VERSION 3( 4) AS OF 24-SEP-81. INCREASE TABLES FOR 500 G'S. 01 00090 +C VERSION 4( 5) AS OF 3-FEB-82. REWRITE PROGRAM TO USE SEQ #'S 01 00100 +C INSTEAD OF MATCHING ENERGIES. 01 00110 +C VERSION 5( 6) AS OF 30-MAR-82. PERFORM SORT INTERNALLY. 01 00120 +C VERSION 6 AS OF 24-FEB-86. CONVERT TO FORTRAN 77. 01 00130 +C VERSION 6( 1) AS OF 5-AUG-86. ADD VAX MDC. 01 00140 +C VERSION 6( 2) AS OF 27-FEB-87. ADD Ibm PC MDC. 2 G to S G. 01 00150 +C VERSION 6( 3) AS OF 2-NOV-87. VAX mdc, READONLY for OPEN added01 00160 +C VERSION 6( 4) AS OF 16-OCT-92. Add ANS MDC 01 00170 +C VERSION 7.0 As of 23-Nov-93. 1) Implemented F&P subcommittee 01 00180 +C recommendations on L=3,4 01 00190 +C coefficients (See HSICC) 01 00200 +C 2) Set dimensions for GCARD same01 00210 +C for all machines 01 00220 +C 3) "S G" and "DG" records from 01 00230 +C CARDS.NEW are now placed at 01 00240 +C end instead of beginning. 01 00250 +C 4) Some code clean up. 01 00260 +C Version 7.0a As of 12-Apr-99. 1) Added check for COMTRANSed 01 00270 +C version of DG card 01 00280 +C Version 7.1 As of 9-Feb-01 Added UNX MDC (RRK) 01 00290 +C Version 7.1a As of 17-Sep-2001 Increased tables to 2000 gammas01 00300 +C Added check on "S G" records 01 00310 +C for quantities not output by 01 00320 +C HSICC 01 00330 +C 01 00340 +C REFER ALL COMMENTS AND INQUIRIES TO 01 00350 +C NATIONAL NUCLEAR DATA CENTER 01 00360 +C BROOKHAVEN NATIONAL LABORATORY 01 00370 +C UPTON, NEW YORK 11973 01 00380 +C TELEPHONE 631-344-2901 COMM 01 00390 +C 01 00400 +C***********************************************************************01 00410 +C 01 00420 +C MERGE THE NEW (CORRECTION) G-CARDS CREATED BY HSICC 01 00430 +C WITH THE INPUT DATA SET DECK TO CREATE AN UPDATED 01 00440 +C DATA SET DECK. 01 00450 +C 01 00460 +C UNIT 35 IS THE INPUT DATA SET DECK. 01 00470 +C UNIT 6 IS THE PRINT. 01 00480 +C UNIT 37 IS THE CORRECTION DECK OF G-CARDS. 01 00490 +C UNIT 38 IS THE UPDATED DATA SET DECK. 01 00500 +C 01 00510 + PROGRAM MERGE 01 00520 +C 01 00530 + Integer Lenstr 01 00540 + Logical ChkRec 01 00550 + External ChkRec,Lenstr 01 00560 +C 01 00570 + Integer INDEX 01 00580 + Intrinsic INDEX 01 00590 +C 01 00600 +C LOCAL VARIABLES. 01 00610 +C 01 00620 + Integer maxrec 01 00630 + Parameter (maxrec=2000) 01 00640 + Character*(1) ans 01 00650 + CHARACTER*80 CARD 01 00660 + CHARACTER*80 GCARD(3,maxrec) 01 00670 + CHARACTER*80 LINE 01 00680 + INTEGER GSEQ(maxrec),SEQ 01 00690 + INTEGER IG, NG 01 00700 + INTEGER INP, PRT, COR, UPD 01 00710 + INTEGER I, J, K 01 00720 + LOGICAL IEND 01 00730 +C 01 00740 +C INITIAL VALUES. 01 00750 +C 01 00760 + DATA INP, PRT, COR, UPD /35, 6, 37, 38/ 01 00770 +C 01 00780 +C FILE SPECIFICATIONS. 01 00790 +C 01 00800 + WRITE(6, 99901) 01 00810 + LINE=' ' 01 00820 +99901 FORMAT('0INPUT FILES -'/' DATA DECK (DEF: data.tst): ') 01 00830 + READ(5, 99900) LINE 01 00840 + IF(LINE.EQ.' ') LINE='data.tst' 01 00850 +99900 FORMAT(A) 01 00860 +C+++MDC+++ 01 00870 +C...UNX,ANS 01 00880 + OPEN(UNIT=INP,FILE=LINE, 01 00890 + 1 STATUS='OLD') 01 00900 +C...VAX,DVF 01 00910 +C/ OPEN(UNIT=INP,FILE=LINE,STATUS='OLD',READONLY) 01 00920 +C---MDC--- 01 00930 + WRITE(6,99902) 01 00940 + LINE=' ' 01 00950 +99902 FORMAT(' NEW G/2G CARD DECK (DEF: cards.new): ') 01 00960 + READ(5, 99900) LINE 01 00970 + IF(LINE.EQ.' ') LINE='cards.new' 01 00980 + OPEN(UNIT=COR,FILE=LINE, 01 00990 + 1 STATUS='OLD') 01 01000 + WRITE(6,99903) 01 01010 + LINE=' ' 01 01020 +99903 FORMAT('0OUTPUT FILES -'/ 01 01030 + + ' MERGED DATA DECK (DEF: cards.mrg): ') 01 01040 + READ(5,99900) LINE 01 01050 + IF(LINE.EQ.' ') LINE='cards.mrg' 01 01060 +C+++MDC+++ 01 01070 +C...ANS,UNX,DVF 01 01080 + OPEN(UNIT=UPD,FILE=LINE, 01 01090 + 1 STATUS='UNKNOWN') 01 01100 +C...VAX 01 01110 +C/ OPEN(UNIT=UPD,FILE=LINE, 01 01120 +C/ 1 CARRIAGECONTROL='LIST', 01 01130 +C/ 1 STATUS='NEW') 01 01140 +C---MDC--- 01 01150 + WRITE (PRT, 1000) 01 01160 + 1000 FORMAT('0PROGRAM H S M R G VERSION 7.1a AS OF 17-Feb-2001.'//)01 01170 +C 01 01180 +C READ IN CORRECTION DECK, SORTING AS WE GO. 01 01190 +C 01 01200 +C -- READ 1G-CARD OF FIRST PAIR. 01 01210 + CALL READC(CARD, SEQ, IEND) 01 01220 +C -- IF NO CORRECTION CARDS... 01 01230 + IF (IEND) GOTO 70 01 01240 +C -- SET UP CARD COUNTER/POINTER. 01 01250 + IG = 1 01 01260 + K = 1 01 01270 +C -- STORE CARD AND ITS SEQ. 01 01280 + GCARD(1,K)=CARD 01 01290 + GSEQ(K) = SEQ 01 01300 +C -- READ 2G-CARD. 01 01310 + CALL READC(CARD, SEQ, IEND) 01 01320 +C -- IF NO 2G-CARD AND END OF DECK... 01 01330 + IF (IEND) GOTO 80 01 01340 +C -- CHECK IF SEQ MATCHES GSEQ(K). 01 01350 + IF (SEQ .NE. GSEQ(K)) GOTO 10 01 01360 +C -- IF PROPER 2G-CARD, STORE IT. 01 01370 + GCARD(2,K)=CARD 01 01380 + GOTO 20 01 01390 +C ELSE 01 01400 +C -- IF NO 2G-CARD, ZERO OUT 2G-CARD STORAGE 01 01410 + 10 GCARD(2,K)=' ' 01 01420 +C -- AND ALLOW NEXT PASS TO REREAD CARD. 01 01430 + BACKSPACE COR 01 01440 +C ENDIF 01 01450 +20 Continue 01 01460 +C Read "DG" card 01 01470 + gcard(3,k)=' ' 01 01480 + If(gcard(2,k) .NE. ' ')Then 01 01490 + Call Readc(card,seq,iend) 01 01500 + If(iend)GoTo 85 01 01510 + If(seq .EQ. gseq(k))Then 01 01520 + gcard(3,k)=card 01 01530 + Else 01 01540 + Backspace cor 01 01550 + EndIf 01 01560 + EndIf 01 01570 +C 01 01580 +C -- CONTINUE READING AND SORT IN. 01 01590 + DO 60 IG = 2, maxrec 01 01600 +C -- READ 1G-CARD. 01 01610 + CALL READC(CARD, SEQ, IEND) 01 01620 +C -- IF END OF DECK... 01 01630 + IF (IEND) GOTO 90 01 01640 +C -- SCAN ARRAY BACKWARDS TO FIND PROPER SPOT FOR THIS CARD. 01 01650 +C -- K POINTS TO WHERE CARD SHOULD GO. 01 01660 + K = IG 01 01670 + DO 30 J = 2, IG 01 01680 +C -- J IS USED ONLY AS A COUNTER. 01 01690 +C -- IF CURRENT CARD SHOULD PRECEDE EXISTING CARD... 01 01700 + IF (SEQ .GE. GSEQ(K-1)) GOTO 40 01 01710 +C -- SLIDE DOWN EXISTING CARD. 01 01720 + GCARD(1,K)=GCARD(1,K-1) 01 01730 + GCARD(2,K)=GCARD(2,K-1) 01 01740 + gcard(3,k)=gcard(3,k-1) 01 01750 + GSEQ(K) = GSEQ(K-1) 01 01760 +C -- AND KEEP LOOKING FOR SPOT. 01 01770 + K = K - 1 01 01780 + 30 CONTINUE 01 01790 +C -- FOUND SPOT, STORE CARD AND ITS SEQ. 01 01800 + 40 GCARD(1,K)=CARD 01 01810 + GSEQ(K) = SEQ 01 01820 +C -- READ 2G-CARD. 01 01830 + CALL READC(CARD, SEQ, IEND) 01 01840 +C -- IF NO 2G-CARD AND END OF DECK... 01 01850 + IF (IEND) GOTO 80 01 01860 +C -- CHECK IF SEQ MATCHES GSEQ(K). 01 01870 + If(seq .EQ. gseq(k))Then 01 01880 +C -- IF PROPER 2G-CARD, STORE IT. 01 01890 + gcard(2,k)=card 01 01900 + Else 01 01910 +C -- IF NO 2G-CARD, ZERO OUT 2G-CARD STORAGE 01 01920 + gcard(2,k)=' ' 01 01930 + gcard(3,k)=' ' 01 01940 +C -- AND ALLOW NEXT PASS TO REREAD CARD. 01 01950 + backspace cor 01 01960 + GoTo 60 01 01970 + EndIf 01 01980 +C -- Get "DG" card if present 01 01990 + Call Readc(card,seq,iend) 01 02000 + If(iend)GoTo 85 01 02010 + If(seq .EQ. gseq(k))Then 01 02020 + gcard(3,k)=card 01 02030 + Else 01 02040 + gcard(3,k)=' ' 01 02050 + Backspace cor 01 02060 + EndIf 01 02070 + 60 CONTINUE 01 02080 +C -- IF MORE THAN maxrec PAIRS, STOP AND REPORT ERROR. 01 02090 + WRITE (PRT, 2000)maxrec 01 02100 + 2000 FORMAT('0*** MORE THAN ',I4, 01 02110 + 2 'CORRECTIONS, MODIFY PROGRAM ***') 01 02120 + Write(prt,FMT='('' First '',I4,'' changed'')') 01 02130 + GOTO 999 01 02140 +C 01 02150 +C ERROR HANDLING SECTION. 01 02160 +C 01 02170 +C -- NO CORRECTIONS. 01 02180 + 70 WRITE (PRT, 3000) 01 02190 + 3000 FORMAT('0*** NO CORRECTIONS, DATA DECK STANDS AS IS ***') 01 02200 + GOTO 999 01 02210 +C 01 02220 +C -- NO SECOND CARD AND END OF DECK. 01 02230 + 80 GCARD(2,K)=' ' 01 02240 +C -- No third card and end of deck 01 02250 +85 Continue 01 02260 + gcard(3,k)=' ' 01 02270 + IG = IG + 1 01 02280 +C 01 02290 +C -- END OF DECK. 01 02300 + 90 NG = IG - 1 01 02310 +C 01 02320 +C FIND MATCHING INPUT CARD. 01 02330 +C 01 02340 +C -- SEQ IS SEQUENCE NUMBER OF CARD IN INPUT DATA DECK. 01 02350 + SEQ = 0 01 02360 +C -- IG IS POINTER TO NEXT CORRECTION PAIR. 01 02370 + IG = 1 01 02380 +C -- READ INPUT CARD AND ADJUST SEQ. 01 02390 + 100 CALL READI(CARD, IEND) 01 02400 + IF (IEND) GOTO 999 01 02410 + SEQ = SEQ + 1 01 02420 +C -- IF NO MATCH WITH NEXT CORRECTION PAIR, WRITE CARD AND LOOP. 01 02430 + 110 IF (SEQ .EQ. GSEQ(IG)) GOTO 120 01 02440 + WRITE (UPD, 4000) CARD 01 02450 + 4000 FORMAT(A) 01 02460 + GOTO 100 01 02470 +C 01 02480 +C MATCH, REPLACE 1G-CARD AND INSERT 2G-CARD, IF PRESENT. 01 02490 +C 01 02500 + 120 WRITE (UPD, 4000) GCARD(1, IG) 01 02510 +C 01 02520 +C COPY CG-CARDS, DELETE 2G-CARDS, COPY NG-CARDS (N > 2). 01 02530 +C STOP WHEN NON-G- OR NEW 1G-CARD FOUND. 01 02540 +C 01 02550 +C -- READ INPUT CARD AND ADJUST SEQ. 01 02560 + 130 CALL READI(CARD, IEND) 01 02570 + If(iend)Then 01 02580 + If(gcard(2,ig) .NE. ' ')Then 01 02590 + Write(upd,4000)gcard(2,ig) 01 02600 + If(gcard(3,ig) .NE. ' ')Write(upd,4000)gcard(3,ig) 01 02610 + EndIf 01 02620 + GOTO 999 01 02630 + EndIf 01 02640 + SEQ = SEQ + 1 01 02650 +C -- IF NON-G-CARD, MOVE ON TO NEXT PAIR. 01 02660 + If(card(8:8) .NE. 'G')Then 01 02670 + If(gcard(2,ig) .NE. ' ')Then 01 02680 + Write(upd,4000)gcard(2,ig) 01 02690 + If(gcard(3,ig) .NE. ' ')Write(upd,4000)gcard(3,ig) 01 02700 + EndIf 01 02710 + GOTO 150 01 02720 + EndIf 01 02730 +C -- IF CG-CARD, COPY IT AND CONTINUE LOOP. 01 02740 + If(card(7:11).EQ.'DG CC' .OR. card(7:11).EQ.'dG CC')Then 01 02750 +C -- Check for old HSICC generated docmentation commentes 01 02760 + If(INDEX(card,'CC(THEORY)''S MULT. BY') .GT. 0 .AND. 01 02770 + 2 INDEX(card,'(Cf. 90NE01)') .GT. 0)GoTo 130 01 02780 + If(INDEX(card,'|a(theory)''s mult. ').GT.0 .AND. 01 02790 + 2 INDEX(card,'(Cf. 1990Ne01)').GT.0)GoTo 130 01 02800 + EndIf 01 02810 + If(card(7:7) .NE. 'C')Then 01 02820 +C -- IF NEW 1G-CARD, MOVE ON TO NEXT PAIR. 01 02830 + If(card(6:6) .EQ. ' ' .OR. card(6:6) .EQ. '1')Then 01 02840 + If(gcard(2,ig) .NE. ' ')Then 01 02850 + Write(upd,4000)gcard(2,ig) 01 02860 + If(gcard(3,ig) .NE. ' ')Write(upd,4000)gcard(3,ig) 01 02870 + EndIf 01 02880 + GoTo 150 01 02890 + EndIf 01 02900 +C -- DELETE (DON'T COPY) 2G-CARDS BUT CONTINUE LOOP. 01 02910 + If(card(6:7) .EQ. '2 ' .OR. card(6:7) .EQ. 'S ')Then 01 02920 + If(ChkRec(card))Then 01 02930 + Write(6,99900) 01 02940 + 2 ' ***** The following has quantities not from HSICC:' 01 02950 + Write(6,FMT='(X,A)')card(1:Lenstr(card)) 01 02960 + Write(6,99900) 01 02970 + 2 ' Keep (Y: default) or Delete (N)?' 01 02980 + Read(5,99900)ans 01 02990 + If(ans.EQ.'N' .OR. ans.EQ.'n')GoTo 130 01 03000 + Else 01 03010 + GoTo 130 01 03020 + EndIf 01 03030 + EndIf 01 03040 + EndIf 01 03050 + WRITE (UPD, 4000) CARD 01 03060 + GOTO 130 01 03070 +C 01 03080 +C MOVE ON TO NEXT G/2G PAIR. 01 03090 +C 01 03100 + 150 IG = IG + 1 01 03110 + IF (IG .LE. NG) GOTO 110 01 03120 +C -- NOTE: NO NEED TO REREAD CARD, THEREFORE GOTO 110 NOT 100. 01 03130 +C 01 03140 +C END OF FILE - COR. 01 03150 +C 01 03160 +C -- WRITE CURRENT INPUT CARD STILL IN BUFFER. 01 03170 + WRITE (UPD, 4000) CARD 01 03180 +C -- BLIND COPY REST OF INPUT DATA DECK. 01 03190 + 160 CALL READI(CARD, IEND) 01 03200 + IF (IEND) GOTO 999 01 03210 + WRITE (UPD, 4000) CARD 01 03220 + GOTO 160 01 03230 +C 01 03240 +C END OF FILE - INP. 01 03250 +C 01 03260 +C -- ALL DONE. 01 03270 + 999 STOP 01 03280 + END 01 03290 + SUBROUTINE READC (CARD, SEQ, IEND) 02 00010 +C 02 00020 +C READ A CARD FROM THE CORRECTION FILE. 02 00030 +C 02 00040 +C CARD IS THE 80 CHARACTERS FORMAT. 02 00050 +C SEQ IS A BINARY INTEGER FROM COLUMNS 81-85 OF IMAGE. 02 00060 +C IEND IS A LOGICAL VARIABLE, .TRUE. IF END OF FILE FOUND. 02 00070 +C 02 00080 + INTEGER SEQ 02 00090 + CHARACTER*80 CARD 02 00100 + LOGICAL IEND 02 00110 +C 02 00120 + INTEGER COR 02 00130 +C 02 00140 + DATA COR /37/ 02 00150 +C 02 00160 + IEND = .FALSE. 02 00170 + READ (COR, 1000, END=10) CARD, SEQ 02 00180 + 1000 FORMAT(A, I5) 02 00190 + GOTO 999 02 00200 +C 02 00210 + 10 IEND = .TRUE. 02 00220 + 999 RETURN 02 00230 + END 02 00240 + SUBROUTINE READI (CARD, IEND) 03 00010 +C 03 00020 +C READ A CARD FROM THE INPUT DATA SET DECK FILE. 03 00030 +C 03 00040 +C CARD IS THE 80 CHARACTERS FORMAT. 03 00050 +C IEND IS A LOGICAL VARIABLE, .TRUE. IF END OF FILE FOUND. 03 00060 +C 03 00070 + CHARACTER*80 CARD 03 00080 + LOGICAL IEND 03 00090 +C 03 00100 + INTEGER INP 03 00110 +C 03 00120 + DATA INP /35/ 03 00130 +C 03 00140 + IEND = .FALSE. 03 00150 + READ (INP, 1000, END=10) CARD 03 00160 + 1000 FORMAT(A) 03 00170 + GOTO 999 03 00180 +C 03 00190 + 10 IEND = .TRUE. 03 00200 + 999 RETURN 03 00210 + END 03 00220 + 04 00010 + Logical Function ChkRec(record) 04 00020 +C Checks for quantities on "S G" records not output by HSICC 04 00030 +C Returns .TRUE. if found, else .FALSE. 04 00040 +C 04 00050 + Character*(*) record 04 00060 +C 04 00070 + Integer i 04 00080 + Integer maxchk 04 00090 + Parameter (maxchk=9) 04 00100 + Character*71 tmpstr 04 00110 +C 04 00120 +C 04 00130 + Integer Lenstr 04 00140 + External Lenstr 04 00150 +C 04 00160 + Integer INDEX 04 00170 + Intrinsic INDEX 04 00180 +C 04 00190 + Character*4 check(maxchk) 04 00200 + Data check/'KC', 'LC', 'MC','NC+', 04 00210 + 2 'K/T','L/T','M/T','N/T','CC'/ 04 00220 +C 04 00230 + ChkRec=.FALSE. 04 00240 + If(record.EQ.' ')return 04 00250 + tmpstr=record(10:) 04 00260 +100 Continue 04 00270 + Call Lbsup(tmpstr) 04 00280 + Do 200 i=1,maxchk 04 00290 + If(tmpstr(1:Lenstr(check(i))) 04 00300 + 2 .EQ. check(i)(1:Lenstr(check(i))))GoTo 300 04 00310 +200 Continue 04 00320 + ChkRec=.TRUE. 04 00330 + Return 04 00340 +300 Continue 04 00350 + i=INDEX(tmpstr,'$') 04 00360 + If(i .EQ. 0)Return 04 00370 + tmpstr=tmpstr(i+1:) 04 00380 + If(Lenstr(tmpstr) .GT. 0)GoTo 100 04 00390 + Return 04 00400 + End 04 00410 diff --git a/src/ensdf_processing/HSICC/seqhst.for b/src/ensdf_processing/HSICC/seqhst.for new file mode 100644 index 0000000000..abf491918a --- /dev/null +++ b/src/ensdf_processing/HSICC/seqhst.for @@ -0,0 +1,142 @@ +C***********************************************************************01 00010 +C* 01 00020 +C* PROGRAM SEQHST 01 00030 +C* 01 00040 +C* VERSION 1(0) AS OF 7-NOV-80. FOR DEC AND IBM MACHINES ONLY. 01 00050 +C* VERSION 2(1) AS OF 16-JUN-81. USE DIALOG=LINE FOR DEC. 01 00060 +C* VERSION 3 AS OF 24-FEB-86. CONVERT TO FORTRAN 77. 01 00070 +C* VERSION 3(1) AS OF 6-AUG-86. ADD VAX MDC. 01 00080 +C* VERSION 3(2) AS OF 1-APR-87. ADD Ibm PC. 01 00090 +C* VERSION 3(3) AS OF 16-Oct-92. Added ANS MDC. 01 00100 +C* Version 3.4 as of 9-Feb-01. Added UNX MDC (Linux and GNU f77)RRK01 00105 +C* 01 00110 +C* 01 00120 +C* REFER ALL COMMENTS AND INQUIRES TO 01 00130 +C* NATIONAL NUCLEAR DATA CENTER 01 00140 +C* BUILDING 197D 01 00150 +C* BROOKHAVEN NATIONAL LABORATORY 01 00160 +C* UPTON, NEW YORK 11973 01 00170 +C* TELEPHONE 631-344-2901 COMM 01 00180 +C* 01 00200 +C***********************************************************************01 00210 +C* 01 00220 +C* 01 00230 +C CONVERT HAGER-SELTZER DIRECT ACCESS TABLE TO SEQUENTIAL 01 00240 +C TEXT FILE FORMAT. 01 00250 +C 01 00260 +C DIRECT ACCESS TABLE IS A BINARY FILE OF 11 WORD RECORDS. 01 00270 +C 13004 RECORDS IN THE FILE. 01 00280 +C 01 00290 +C TEXT FILE IS A SEQUENTIAL ACCESS SYMBOLIC FILE OF 80 01 00300 +C CHARACTER RECORDS (Z, SHELL, EG, E1, E2, E3, E4, 01 00310 +C M1, M2, M3, M4) = (I3, A2, F7.2, 8E8.2). 01 00320 +C 01 00330 +C WRITTEN BY: 01 00340 +C BRUCE J. BARTON 01 00350 +C NOVEMBER, 1977 01 00360 +C 01 00370 + PROGRAM SEQHST 01 00380 +C 01 00390 + INTEGER Z, KNT 01 00400 + CHARACTER*2 SHELL 01 00410 + CHARACTER*90 LINE 01 00420 + REAL EG, E(4), M(4) 01 00430 + CHARACTER*8 ECHAR(4),MCHAR(4) 01 00440 + INTEGER TBLKEY,I 01 00450 +C 01 00460 +C... OPEN INPUT AND OUTPUT FILES. 01 00470 +C 01 00480 +C+++MDC+++ 01 00490 +C...VAX,DVF 01 00640 +C/ WRITE(6, 99901) 01 00650 +C/99901 FORMAT(' ENTER BINARY TABLE FILE NAME (DEF: ICCTBL.DAT): ') 01 00660 +C/ READ(5, 99900) LINE 01 00670 +C/ IF(LINE.EQ.' ') LINE='ICCTBL.DAT' 01 00680 +C/99900 FORMAT(A) 01 00690 +C/ OPEN(UNIT=20,ACCESS='DIRECT',RECL=11, 01 00700 +C/ 1 FILE=LINE,STATUS='OLD') 01 00710 +C/ WRITE(6,99902) 01 00720 +C/99902 FORMAT(' ENTER SEQUENTIAL OUTPUT FILE NAME (DEF: ICCSEQ.DAT): ')01 00730 +C/ READ(5,99900) LINE 01 00740 +C/ IF(LINE.EQ.' ') LINE='ICCSEQ.DAT' 01 00750 +C/ OPEN(UNIT=21,ACCESS='SEQUENTIAL',RECL=80, 01 00760 +C/ 1 CARRIAGECONTROL='LIST', 01 00770 +C/ 1 FILE=LINE,STATUS='NEW') 01 00780 +C...UNX, ANS 01 00790 + WRITE(6, 99901) 01 00800 +99901 FORMAT(' ENTER BINARY TABLE FILE NAME (DEF: icctbl.dat): ') 01 00810 + READ(5, 99900) LINE 01 00820 + IF(LINE.EQ.' ') LINE='icctbl.dat' 01 00830 +99900 FORMAT(A) 01 00840 + OPEN(UNIT=20,ACCESS='DIRECT',RECL=44, 01 00850 + 1 FILE=LINE,STATUS='OLD') 01 00860 + WRITE(6,99902) 01 00870 +99902 FORMAT(' ENTER SEQUENTIAL OUTPUT FILE NAME (DEF: iccseq.dat): ') 01 00880 + READ(5,99900) LINE 01 00890 + IF(LINE.EQ.' ') LINE='iccseq.dat' 01 00900 + OPEN(UNIT=21,ACCESS='SEQUENTIAL',FILE=LINE,STATUS='UNKNOWN') 01 00920 +C---MDC--- 01 00960 +C 01 00970 +C... INITIALIZE VARIABLE TBLKEY AND KNT. 01 00980 +C 01 00990 + WRITE (6, 300) 01 01000 + 300 FORMAT('0PROGRAM S E Q H S T VERSION 3.4 AS OF 9-Feb-01.'/) 01 01010 + TBLKEY = 1 01 01020 + KNT = 0 01 01030 +C 01 01040 +C... READ/WRITE LOOP. 01 01050 +C 01 01060 + 10 READ (20,REC=TBLKEY, ERR=99) Z, SHELL, EG, E, M 01 01070 + IF(Z.EQ.0) GO TO 99 01 01080 + TBLKEY=TBLKEY+1 01 01090 +C 01 01100 +C CHANGE E AND M TO CHAR STRING SO THAT THE NUMBERS ON THE 01 01110 +C SEQUENTIAL FILE WILL BE AS 1.23E-00. 01 01120 +C 01 01130 + DO 80 I=1,4 01 01140 + CALL TOCHAR(E(I),ECHAR(I)) 01 01150 + CALL TOCHAR(M(I),MCHAR(I)) 01 01160 + 80 CONTINUE 01 01170 + WRITE (21, 100) Z, SHELL, EG, ECHAR, MCHAR 01 01180 + 100 FORMAT(I3, A, F7.2, 8A8) 01 01190 + KNT = KNT + 1 01 01200 + GOTO 10 01 01210 +C 01 01220 +C... ON RANDOM ACCESS READ ERROR (END OF FILE), 01 01230 +C... CLOSE FILES AND RETURN. 01 01240 +C 01 01250 + 99 WRITE (6, 200) KNT 01 01260 + 200 FORMAT(I6, ' RECORDS HAVE BEEN WRITTEN.') 01 01270 + CLOSE (UNIT=20) 01 01280 + CLOSE (UNIT=21) 01 01290 + CLOSE (UNIT=6) 01 01300 + STOP 01 01310 + END 01 01320 + SUBROUTINE TOCHAR(X,XSTR) 02 00010 +C 02 00020 +C THIS SUBROUTINE CONVERTS NUMBER X TO 02 00030 +C A CHARACTER STRING WHICH IS FORMATTED LIKE 02 00040 +C 1.34E-00 (PDP10'S FORTRAN66 E FORMAT) 02 00050 + REAL X 02 00060 + CHARACTER*8 XSTR 02 00070 + CHARACTER*9 TEMP 02 00080 + INTEGER IPOS,I 02 00090 +C 02 00100 + 9000 FORMAT(E9.3) 02 00110 + 9001 FORMAT(I3.2) 02 00120 +C 02 00130 + XSTR='******' 02 00140 + WRITE(TEMP,9000) X 02 00150 + IF(TEMP(1:1) .EQ. '*') RETURN 02 00160 + IF(TEMP(2:2) .NE. '.') RETURN 02 00170 + IF(TEMP(6:6) .NE. 'E') RETURN 02 00180 + XSTR(1:1)=TEMP(3:3) 02 00190 + XSTR(2:2)='.' 02 00200 + XSTR(3:4)=TEMP(4:5) 02 00210 + XSTR(5:5)='E' 02 00220 + READ(TEMP(7:9),9001) I 02 00230 + I=I-1 02 00240 + WRITE(XSTR(6:8),9001) I 02 00250 + IF(XSTR(6:6) .EQ. ' ')XSTR(6:6)='+' 02 00260 + RETURN 02 00270 + END 02 00280 diff --git a/tests/ensdf_processing/bldhst/ref_bldhst_iccseq.dat b/tests/ensdf_processing/bldhst/ref_bldhst_iccseq.dat new file mode 100644 index 0000000000..c2ab79e7ab --- /dev/null +++ b/tests/ensdf_processing/bldhst/ref_bldhst_iccseq.dat @@ -0,0 +1,13004 @@ + 3K1 15.006.55E-025.65E+004.10E+022.83E+042.85E-031.87E-011.25E+018.37E+02 + 3K1 17.004.30E-023.29E+002.12E+021.30E+042.07E-031.21E-017.12E+004.23E+02 + 3K1 20.002.48E-021.63E+008.99E+014.72E+031.37E-036.84E-023.45E+001.75E+02 + 3K1 25.001.17E-026.20E-012.77E+011.17E+037.82E-043.15E-021.28E+005.23E+01 + 3K1 32.005.06E-032.12E-017.50E+002.52E+024.22E-041.34E-024.30E-011.38E+01 + 3K1 40.002.37E-038.07E-022.31E+006.28E+012.42E-046.22E-031.61E-014.20E+00 + 3K1 50.001.11E-033.07E-027.12E-011.57E+011.39E-042.91E-036.10E-021.28E+00 + 3K1 65.004.56E-049.86E-031.79E-013.10E+007.33E-051.20E-031.96E-023.23E-01 + 3K1 80.002.26E-044.03E-036.05E-028.64E-014.43E-055.98E-048.10E-031.10E-01 + 3K1 100.001.06E-041.55E-031.90E-022.21E-012.59E-052.86E-043.16E-033.50E-02 + 3K1 120.005.77E-057.12E-047.42E-037.35E-021.68E-051.58E-041.48E-031.39E-02 + 3K1 150.002.74E-052.78E-042.38E-031.94E-029.95E-067.69E-055.94E-044.59E-03 + 3K1 200.001.07E-058.41E-055.65E-043.61E-035.13E-063.11E-051.89E-041.14E-03 + 3K1 300.002.97E-061.66E-058.01E-053.69E-042.08E-069.15E-064.01E-051.76E-04 + 3K1 450.009.07E-073.65E-061.30E-054.42E-058.79E-072.89E-069.42E-063.07E-05 + 3K1 650.003.50E-071.06E-062.93E-067.80E-064.21E-071.09E-062.81E-067.22E-06 + 3K11000.001.38E-073.11E-076.61E-071.37E-061.89E-073.86E-077.84E-071.59E-06 + 3K12000.004.41E-086.99E-081.08E-071.66E-076.01E-089.20E-081.40E-072.13E-07 + 3K16000.001.15E-081.36E-081.61E-081.90E-081.34E-081.58E-081.86E-082.19E-08 + 3L1 15.009.58E-048.23E-025.95E+004.09E+024.17E-052.74E-031.82E-011.22E+01 + 3L1 17.006.29E-044.80E-023.08E+001.88E+023.03E-051.77E-031.04E-016.19E+00 + 3L1 20.003.64E-042.38E-021.31E+006.85E+012.01E-051.00E-035.05E-022.56E+00 + 3L1 25.001.71E-049.05E-034.03E-011.71E+011.15E-054.61E-041.87E-027.65E-01 + 3L1 32.007.41E-053.10E-031.09E-013.67E+006.18E-061.96E-046.29E-032.03E-01 + 3L1 40.003.48E-051.18E-033.37E-029.16E-013.55E-069.12E-052.36E-036.15E-02 + 3L1 50.001.63E-054.49E-041.04E-022.29E-012.04E-064.26E-058.93E-041.88E-02 + 3L1 65.006.69E-061.44E-042.62E-034.53E-021.07E-061.75E-052.88E-044.74E-03 + 3L1 80.003.31E-065.90E-058.86E-041.26E-026.49E-078.76E-061.19E-041.61E-03 + 3L1 100.001.56E-062.27E-052.78E-043.24E-033.80E-074.19E-064.63E-055.13E-04 + 3L1 120.008.45E-071.04E-051.09E-041.08E-032.46E-072.31E-062.17E-052.04E-04 + 3L1 150.004.02E-074.07E-063.49E-052.84E-041.46E-071.13E-068.71E-066.73E-05 + 3L1 200.001.57E-071.23E-068.28E-065.28E-057.52E-084.56E-072.76E-061.67E-05 + 3L1 300.004.35E-082.43E-071.17E-065.40E-063.05E-081.34E-075.88E-072.57E-06 + 3L1 450.001.33E-085.35E-081.90E-076.47E-071.29E-084.23E-081.38E-074.50E-07 + 3L1 650.005.13E-091.56E-084.29E-081.14E-076.17E-091.60E-084.12E-081.06E-07 + 3L11000.002.02E-094.57E-099.69E-092.01E-082.77E-095.66E-091.15E-082.33E-08 + 3L12000.006.46E-101.02E-091.59E-092.43E-098.81E-101.35E-092.05E-093.12E-09 + 6K1 15.004.38E-013.51E+012.36E+031.52E+052.81E-021.80E+001.16E+027.57E+03 + 6K1 17.002.91E-012.08E+011.25E+037.17E+042.02E-021.15E+006.58E+013.80E+03 + 6K1 20.001.71E-011.05E+015.45E+022.69E+041.32E-026.43E-013.15E+011.56E+03 + 6K1 25.008.19E-024.12E+001.74E+026.97E+037.42E-032.91E-011.15E+014.62E+02 + 6K1 32.003.62E-021.45E+004.87E+011.56E+033.94E-031.22E-013.83E+001.21E+02 + 6K1 40.001.73E-025.63E-011.54E+014.01E+022.23E-035.62E-021.43E+003.65E+01 + 6K1 50.008.21E-032.18E-014.87E+001.03E+021.27E-032.60E-025.36E-011.11E+01 + 6K1 65.003.42E-037.16E-021.26E+002.10E+016.63E-041.06E-021.72E-012.79E+00 + 6K1 80.001.71E-032.97E-024.33E-015.99E+003.97E-045.28E-037.04E-029.45E-01 + 6K1 100.008.16E-041.16E-021.38E-011.57E+002.31E-042.51E-032.74E-023.00E-01 + 6K1 120.004.46E-045.38E-035.48E-025.29E-011.49E-041.38E-031.28E-021.19E-01 + 6K1 150.002.14E-042.12E-031.78E-021.42E-018.76E-056.71E-045.13E-033.94E-02 + 6K1 200.008.43E-056.53E-044.30E-032.70E-024.49E-052.71E-041.63E-039.78E-03 + 6K1 300.002.37E-051.31E-046.23E-042.83E-031.80E-057.92E-053.45E-041.50E-03 + 6K1 450.007.33E-062.92E-051.03E-043.46E-047.56E-062.49E-058.11E-052.64E-04 + 6K1 650.002.85E-068.61E-062.36E-056.23E-053.59E-069.38E-062.42E-056.20E-05 + 6K11000.001.12E-062.55E-065.40E-061.12E-051.60E-063.30E-066.73E-061.36E-05 + 6K12000.003.58E-075.75E-078.94E-071.37E-064.99E-077.74E-071.19E-061.81E-06 + 6K16000.009.29E-081.11E-071.32E-071.57E-071.09E-071.30E-071.54E-071.83E-07 + 6L1 15.002.30E-021.82E+001.22E+027.74E+031.50E-039.70E-026.32E+004.17E+02 + 6L1 17.001.53E-021.08E+006.45E+013.67E+031.08E-036.18E-023.57E+002.08E+02 + 6L1 20.009.00E-035.51E-012.83E+011.38E+037.07E-043.45E-021.70E+008.50E+01 + 6L1 25.004.33E-032.16E-019.05E+003.61E+023.96E-041.56E-026.22E-012.50E+01 + 6L1 32.001.92E-037.63E-022.55E+008.12E+012.10E-046.55E-032.06E-016.54E+00 + 6L1 40.009.15E-042.97E-028.10E-012.10E+011.19E-043.01E-037.66E-021.97E+00 + 6L1 50.004.36E-041.15E-022.57E-015.43E+006.80E-051.39E-032.87E-025.97E-01 + 6L1 65.001.82E-043.80E-036.65E-021.11E+003.54E-055.68E-042.19E-031.49E-01 + 6L1 80.009.11E-051.58E-032.29E-023.17E-012.12E-052.82E-043.77E-035.06E-02 + 6L1 100.004.34E-056.15E-047.33E-038.30E-021.23E-051.34E-041.47E-031.61E-02 + 6L1 120.002.37E-052.86E-042.91E-032.81E-027.95E-067.37E-056.85E-046.38E-03 + 6L1 150.001.14E-051.13E-049.47E-047.55E-034.68E-063.58E-052.74E-042.10E-03 + 6L1 200.004.49E-063.48E-052.29E-041.43E-032.40E-061.45E-058.69E-055.23E-04 + 6L1 300.001.27E-066.97E-063.32E-051.50E-049.62E-074.23E-061.84E-058.04E-05 + 6L1 450.003.91E-071.56E-065.47E-061.84E-054.03E-071.33E-064.33E-061.41E-05 + 6L1 650.001.52E-074.59E-071.26E-063.32E-061.92E-075.00E-071.29E-063.31E-06 + 6L11000.006.00E-081.36E-072.88E-075.95E-078.51E-081.76E-073.59E-077.27E-07 + 6L12000.001.91E-083.06E-084.77E-087.33E-082.66E-084.13E-086.34E-089.67E-08 + 10K1 15.001.55E+001.11E+026.67E+033.83E+051.66E-011.05E+016.42E+023.96E+04 + 10K1 17.001.04E+006.75E+013.64E+031.88E+051.18E-016.58E+003.60E+021.98E+04 + 10K1 20.006.24E-013.51E+011.65E+037.40E+047.60E-023.62E+001.70E+028.07E+03 + 10K1 25.003.06E-011.42E+015.49E+022.03E+044.17E-021.60E+006.14E+012.37E+03 + 10K1 32.001.38E-015.17E+001.61E+024.81E+032.17E-026.59E-012.00E+016.15E+02 + 10K1 40.006.73E-022.06E+005.29E+011.30E+031.21E-022.98E-017.36E+001.84E+02 + 10K1 50.003.26E-028.21E-011.73E+013.47E+026.77E-031.36E-012.73E+005.54E+01 + 10K1 65.001.38E-022.77E-014.62E+007.36E+013.46E-035.46E-028.64E-011.38E+01 + 10K1 80.007.02E-031.17E-011.63E+002.16E+012.05E-032.68E-023.52E-014.64E+00 + 10K1 100.003.39E-034.64E-025.33E-015.82E+001.18E-031.27E-021.36E-011.47E+00 + 10K1 120.001.87E-032.19E-022.15E-012.01E+007.54E-046.91E-036.32E-025.81E-01 + 10K1 150.009.09E-048.77E-037.13E-025.51E-014.40E-043.34E-032.52E-021.91E-01 + 10K1 200.003.63E-042.74E-031.76E-021.07E-012.23E-041.34E-037.95E-034.74E-02 + 10K1 300.001.04E-045.62E-042.62E-031.17E-028.83E-053.88E-041.68E-037.27E-03 + 10K1 450.003.25E-051.28E-044.43E-041.47E-033.66E-051.21E-043.94E-041.27E-03 + 10K1 650.001.28E-053.83E-051.04E-042.72E-041.72E-054.53E-051.17E-042.99E-04 + 10K11000.005.06E-061.15E-052.43E-055.01E-057.52E-061.58E-053.24E-056.57E-05 + 10K12000.001.60E-062.61E-064.09E-066.31E-062.30E-063.63E-065.63E-068.65E-06 + 10K16000.004.11E-074.97E-075.97E-077.14E-074.88E-075.90E-077.07E-078.45E-07 + 10L1 15.008.71E-026.12E+003.60E+022.02E+049.81E-036.43E-014.13E+012.68E+03 + 10L1 17.005.89E-023.74E+001.98E+021.00E+046.96E-034.02E-012.29E+011.32E+03 + 10L1 20.003.54E-021.96E+009.05E+014.00E+034.47E-032.19E-011.07E+015.25E+02 + 10L1 25.001.75E-027.99E-013.05E+011.12E+032.45E-039.66E-023.79E+001.51E+02 + 10L1 32.007.94E-032.93E-019.06E+002.67E+021.27E-033.94E-021.22E+003.83E+01 + 10L1 40.003.88E-031.18E-013.00E+007.27E+017.09E-041.77E-024.45E-011.13E+01 + 10L1 50.001.88E-034.71E-029.85E-011.96E+013.98E-048.05E-031.64E-013.37E+00 + 10L1 65.008.03E-041.60E-022.65E-014.20E+002.03E-043.23E-035.16E-028.29E-01 + 10L1 80.004.08E-046.76E-039.39E-021.24E+001.21E-041.59E-032.09E-022.78E-01 + 10L1 100.001.97E-042.69E-033.08E-023.35E-016.92E-057.46E-048.06E-038.74E-02 + 10L1 120.001.09E-041.27E-031.24E-021.16E-014.43E-054.07E-043.74E-033.45E-02 + 10L1 150.005.31E-055.11E-044.14E-033.20E-022.58E-051.97E-041.49E-031.13E-02 + 10L1 200.002.12E-051.60E-041.03E-036.25E-031.31E-057.87E-054.69E-042.80E-03 + 10L1 300.006.08E-063.29E-051.53E-046.80E-045.18E-062.28E-059.89E-054.28E-04 + 10L1 450.001.91E-067.49E-062.59E-058.60E-052.14E-067.11E-062.31E-057.49E-05 + 10L1 650.007.48E-072.24E-066.08E-061.59E-051.01E-062.66E-066.87E-061.76E-05 + 10L11000.002.96E-076.74E-071.43E-062.93E-064.41E-079.26E-071.90E-063.86E-06 + 10L12000.009.40E-081.53E-072.40E-073.70E-071.35E-072.13E-073.31E-075.08E-07 + 10L2 15.001.08E-032.63E-014.83E+016.40E+031.82E-042.50E-022.71E+002.62E+02 + 10L2 17.006.51E-041.37E-012.22E+012.60E+031.20E-041.46E-021.41E+001.21E+02 + 10L2 20.003.34E-045.88E-028.06E+008.08E+027.02E-057.27E-036.00E-014.41E+01 + 10L2 25.001.34E-041.84E-022.01E+001.62E+023.35E-052.78E-031.86E-011.11E+01 + 10L2 32.004.83E-055.09E-034.34E-012.76E+011.47E-059.63E-045.09E-022.40E+00 + 10L2 40.001.92E-051.60E-031.09E-015.59E+007.00E-063.69E-041.58E-026.03E-01 + 10L2 50.007.63E-065.04E-042.74E-021.14E+003.33E-061.42E-044.91E-031.52E-01 + 10L2 65.002.59E-061.30E-045.48E-031.77E-011.39E-064.61E-051.25E-033.04E-02 + 10L2 80.001.10E-064.50E-051.55E-034.11E-026.97E-071.90E-054.26E-048.54E-03 + 10L2 100.004.43E-071.45E-054.01E-048.67E-033.33E-077.37E-061.35E-042.21E-03 + 10L2 120.002.12E-075.80E-061.35E-042.47E-031.82E-073.42E-065.30E-057.38E-04 + 10L2 150.008.66E-081.91E-063.61E-055.40E-048.76E-081.34E-061.71E-051.96E-04 + 10L2 200.002.80E-084.71E-076.81E-067.91E-053.43E-084.09E-074.07E-063.65E-05 + 10L2 300.005.99E-096.97E-087.05E-075.82E-069.31E-097.92E-085.66E-073.66E-06 + 10L2 450.001.39E-091.14E-088.23E-084.94E-072.61E-091.62E-088.54E-084.09E-07 + 10L2 650.004.07E-102.48E-091.33E-086.14E-088.54E-104.08E-091.67E-086.26E-08 + 10L21000.001.10E-104.82E-101.90E-096.61E-092.45E-108.87E-102.81E-098.16E-09 + 10L22000.001.84E-115.11E-111.31E-103.12E-103.86E-119.62E-112.17E-104.56E-10 + 10L3 15.002.12E-035.00E-019.09E+011.20E+049.64E-052.41E-024.83E+006.60E+02 + 10L3 17.001.27E-032.60E-014.14E+014.83E+036.42E-051.34E-022.34E+002.83E+02 + 10L3 20.006.51E-041.11E-011.49E+011.49E+033.78E-056.29E-039.18E-019.45E+01 + 10L3 25.002.60E-043.43E-023.68E+002.95E+021.83E-052.23E-032.56E-012.11E+01 + 10L3 32.009.37E-059.39E-037.79E-014.91E+018.17E-067.17E-046.29E-024.08E+00 + 10L3 40.003.72E-052.91E-031.92E-019.71E+003.94E-062.58E-041.79E-029.34E-01 + 10L3 50.001.48E-059.02E-044.71E-021.92E+001.91E-069.38E-055.13E-032.16E-01 + 10L3 65.005.00E-062.28E-049.10E-032.88E-018.12E-072.88E-051.20E-033.92E-02 + 10L3 80.002.13E-067.72E-052.48E-036.43E-024.15E-071.14E-053.82E-041.03E-02 + 10L3 100.008.60E-072.43E-056.19E-041.29E-022.02E-074.25E-061.13E-042.48E-03 + 10L3 120.004.13E-079.48E-062.00E-043.51E-031.13E-071.91E-064.23E-057.84E-04 + 10L3 150.001.70E-073.04E-065.08E-057.20E-045.60E-087.26E-071.29E-051.95E-04 + 10L3 200.005.59E-087.17E-078.86E-069.58E-052.30E-082.13E-072.84E-063.34E-05 + 10L3 300.001.25E-081.01E-078.09E-075.98E-066.83E-093.99E-083.56E-072.97E-06 + 10L3 450.003.16E-091.59E-088.34E-084.24E-072.17E-098.16E-094.85E-082.93E-07 + 10L3 650.001.03E-093.47E-091.25E-084.58E-088.23E-102.15E-098.79E-093.97E-08 + 10L31000.003.27E-107.30E-101.76E-094.51E-092.95E-105.34E-101.41E-094.50E-09 + 10L32000.007.46E-111.04E-101.54E-102.44E-107.29E-119.05E-111.32E-102.33E-10 + 14K1 15.003.30E+002.09E+021.09E+045.49E+055.79E-013.62E+012.07E+031.17E+05 + 14K1 17.002.25E+001.29E+026.16E+032.82E+054.06E-012.25E+011.15E+035.91E+04 + 14K1 20.001.36E+006.92E+012.91E+031.17E+052.58E-011.22E+015.43E+022.42E+04 + 14K1 25.006.82E-012.89E+011.02E+033.44E+041.39E-015.28E+001.94E+027.12E+03 + 14K1 32.003.15E-011.09E+013.13E+028.64E+037.06E-022.13E+006.24E+011.84E+03 + 14K1 40.001.56E-014.47E+001.07E+022.44E+033.87E-029.44E-012.27E+015.48E+02 + 14K1 50.007.65E-021.82E+003.60E+016.81E+022.14E-024.24E-018.31E+001.64E+02 + 14K1 65.003.31E-026.29E-019.97E+001.51E+021.08E-021.68E-012.60E+004.05E+01 + 14K1 80.001.70E-022.71E-013.60E+004.56E+016.30E-038.15E-021.05E+001.36E+01 + 14K1 100.008.30E-031.09E-011.21E+001.26E+013.57E-033.80E-024.02E-014.27E+00 + 14K1 120.004.63E-035.23E-024.94E-014.45E+002.27E-032.06E-021.86E-011.68E+00 + 14K1 150.002.27E-032.13E-021.67E-011.25E+001.31E-039.87E-037.36E-025.51E-01 + 14K1 200.009.19E-046.77E-034.22E-022.51E-016.56E-043.92E-032.31E-021.36E-01 + 14K1 300.002.68E-041.42E-036.47E-032.82E-022.56E-041.13E-034.84E-032.08E-02 + 14K1 450.008.49E-053.29E-041.12E-033.67E-031.04E-043.48E-041.13E-033.63E-03 + 14K1 650.003.36E-051.00E-042.69E-046.96E-044.84E-051.29E-043.34E-048.52E-04 + 14K11000.001.34E-053.05E-056.43E-051.32E-042.09E-054.46E-059.18E-051.87E-04 + 14K12000.004.22E-066.97E-061.10E-051.71E-056.23E-061.00E-051.57E-052.43E-05 + 14K16000.001.07E-061.31E-061.59E-061.92E-061.28E-061.57E-061.91E-062.30E-06 + 14L1 15.002.22E-011.36E+016.84E+023.29E+044.24E-022.91E+001.86E+021.19E+04 + 14L1 17.001.52E-018.51E+003.92E+021.73E+042.97E-021.79E+001.01E+025.74E+03 + 14L1 20.009.33E-024.60E+001.88E+027.35E+031.88E-029.54E-014.62E+012.24E+03 + 14L1 25.004.72E-021.95E+006.72E+012.21E+031.01E-024.08E-011.59E+016.26E+02 + 14L1 32.002.20E-027.47E-012.11E+015.69E+025.15E-031.62E-014.99E+001.55E+02 + 14L1 40.001.09E-023.09E-017.28E+001.64E+022.82E-037.12E-021.77E+004.46E+01 + 14L1 50.005.42E-031.27E-012.49E+004.64E+011.56E-033.17E-026.40E-011.30E+01 + 14L1 65.002.36E-034.44E-026.96E-011.04E+017.83E-041.25E-021.97E-013.15E+00 + 14L1 80.001.21E-031.92E-022.53E-013.18E+004.58E-046.03E-037.89E-021.04E+00 + 14L1 100.005.96E-047.80E-038.53E-028.88E-012.60E-042.80E-033.00E-023.23E-01 + 14L1 120.003.33E-043.74E-033.52E-023.14E-011.65E-041.51E-031.38E-021.27E-01 + 14L1 150.001.64E-041.53E-031.20E-028.90E-029.52E-057.23E-045.44E-034.11E-02 + 14L1 200.006.64E-054.88E-043.03E-031.79E-024.77E-052.87E-041.70E-031.01E-02 + 14L1 300.001.94E-051.03E-044.67E-042.03E-031.86E-058.22E-053.55E-041.53E-03 + 14L1 450.006.17E-062.39E-058.13E-052.65E-047.60E-062.54E-058.26E-052.67E-04 + 14L1 650.002.44E-067.27E-061.95E-055.05E-053.53E-069.43E-062.44E-056.24E-05 + 14L11000.009.71E-072.22E-064.68E-069.59E-061.52E-063.25E-066.70E-061.36E-05 + 14L12000.003.07E-075.07E-078.01E-071.24E-064.53E-077.31E-071.15E-061.77E-06 + 14L2 15.006.97E-031.92E+003.64E+024.74E+041.42E-031.93E-012.04E+011.90E+03 + 14L2 17.004.25E-031.01E+001.68E+021.94E+049.41E-041.14E-011.07E+018.83E+02 + 14L2 20.002.23E-034.37E-016.17E+016.10E+035.53E-045.70E-024.59E+003.27E+02 + 14L2 25.009.12E-041.39E-011.56E+011.24E+032.66E-042.21E-021.44E+008.35E+01 + 14L2 32.003.38E-043.89E-023.40E+002.14E+021.18E-047.72E-034.00E-011.84E+01 + 14L2 40.001.37E-041.24E-028.62E-014.39E+015.68E-052.99E-031.26E-014.70E+00 + 14L2 50.005.57E-053.95E-032.20E-019.05E+002.73E-051.16E-033.95E-021.20E+00 + 14L2 65.001.93E-051.03E-034.44E-021.43E+001.15E-053.81E-041.02E-022.43E-01 + 14L2 80.008.33E-063.61E-041.26E-023.35E-015.81E-061.58E-043.50E-036.93E-02 + 14L2 100.003.40E-061.17E-043.31E-037.13E-022.80E-066.19E-051.12E-031.81E-02 + 14L2 120.001.65E-064.73E-051.12E-032.04E-021.54E-062.89E-054.44E-046.11E-03 + 14L2 150.006.82E-071.58E-053.02E-044.51E-037.45E-071.14E-051.44E-041.64E-03 + 14L2 200.002.23E-073.92E-065.77E-056.70E-042.94E-073.51E-063.47E-053.09E-04 + 14L2 300.004.88E-085.89E-076.05E-065.00E-058.07E-086.89E-074.90E-063.15E-05 + 14L2 450.001.15E-089.77E-087.14E-074.30E-062.28E-081.43E-077.49E-073.56E-06 + 14L2 650.003.40E-092.13E-081.17E-075.40E-077.50E-093.62E-081.48E-075.53E-07 + 14L21000.009.22E-104.17E-091.68E-085.86E-082.15E-097.91E-092.51E-087.28E-08 + 14L22000.001.54E-104.42E-101.16E-092.78E-093.36E-108.57E-101.95E-094.11E-09 + 14L3 15.001.35E-023.61E+006.76E+028.74E+046.99E-042.49E-015.53E+017.57E+03 + 14L3 17.008.19E-031.89E+003.10E+023.56E+044.69E-041.37E-012.64E+013.20E+03 + 14L3 20.004.28E-038.12E-011.13E+021.11E+042.78E-046.33E-021.01E+011.05E+03 + 14L3 25.001.75E-032.55E-012.80E+012.22E+031.36E-042.20E-022.75E+002.29E+02 + 14L3 32.006.47E-047.06E-026.00E+003.74E+026.15E-056.93E-036.60E-014.32E+01 + 14L3 40.002.62E-042.21E-021.49E+007.49E+013.00E-052.46E-031.84E-019.69E+00 + 14L3 50.001.06E-046.93E-033.70E-011.50E+011.46E-058.79E-045.17E-022.20E+00 + 14L3 65.003.66E-051.77E-037.21E-022.27E+006.30E-062.65E-041.18E-023.92E-01 + 14L3 80.001.58E-056.05E-041.98E-025.11E-013.24E-061.04E-043.72E-031.02E-01 + 14L3 100.006.47E-061.92E-044.97E-031.04E-011.59E-063.82E-051.09E-032.41E-02 + 14L3 120.003.13E-067.54E-051.62E-032.83E-028.95E-071.70E-054.02E-047.56E-03 + 14L3 150.001.31E-062.43E-054.13E-045.84E-034.45E-076.41E-061.21E-041.86E-03 + 14L3 200.004.35E-075.78E-067.25E-057.83E-041.84E-071.86E-062.63E-053.15E-04 + 14L3 300.009.88E-088.17E-076.66E-064.93E-055.49E-083.44E-073.24E-062.76E-05 + 14L3 450.002.52E-081.30E-076.90E-073.52E-061.74E-086.91E-084.34E-072.68E-06 + 14L3 650.008.23E-092.84E-081.03E-073.81E-076.63E-091.79E-087.72E-083.59E-07 + 14L31000.002.62E-095.96E-091.45E-083.76E-082.37E-094.39E-091.21E-083.99E-08 + 14L32000.005.96E-108.42E-101.25E-092.00E-095.82E-107.29E-101.08E-091.96E-09 + 15K1 15.003.82E+002.33E+021.17E+045.66E+057.54E-014.70E+012.62E+031.45E+05 + 15K1 17.002.61E+001.45E+026.68E+032.95E+055.28E-012.92E+011.47E+037.33E+04 + 15K1 20.001.59E+007.82E+013.18E+031.25E+053.34E-011.57E+016.90E+023.02E+04 + 15K1 25.007.98E-013.30E+011.13E+033.72E+041.79E-016.80E+002.46E+028.90E+03 + 15K1 32.003.70E-011.25E+013.53E+029.51E+039.07E-022.72E+007.92E+012.31E+03 + 15K1 40.001.84E-015.18E+001.21E+022.72E+034.95E-021.20E+002.87E+016.87E+02 + 15K1 50.009.06E-022.12E+004.13E+017.68E+022.72E-025.39E-011.05E+012.06E+02 + 15K1 65.003.93E-027.38E-011.15E+011.72E+021.36E-022.12E-013.27E+005.07E+01 + 15K1 80.002.03E-023.19E-014.19E+005.24E+017.97E-031.03E-011.32E+001.70E+01 + 15K1 100.009.93E-031.30E-011.41E+001.46E+014.51E-034.79E-025.04E-015.33E+00 + 15K1 120.005.55E-036.21E-025.81E-015.18E+002.85E-032.59E-022.33E-012.10E+00 + 15K1 150.002.73E-032.53E-021.98E-011.47E+001.64E-031.24E-029.20E-026.87E-01 + 15K1 200.001.11E-038.10E-035.02E-022.96E-018.21E-044.90E-032.88E-021.69E-01 + 15K1 300.003.24E-041.71E-037.75E-033.35E-023.19E-041.40E-036.03E-032.59E-02 + 15K1 450.001.03E-043.98E-041.35E-034.40E-031.30E-044.34E-041.40E-034.51E-03 + 15K1 650.004.09E-051.22E-043.26E-048.41E-046.00E-051.61E-044.15E-041.06E-03 + 15K11000.001.63E-053.72E-057.84E-051.60E-042.58E-055.52E-051.14E-042.31E-04 + 15K12000.005.14E-068.51E-061.35E-052.09E-057.64E-061.24E-051.95E-053.01E-05 + 15K16000.001.30E-061.59E-061.94E-062.34E-061.56E-061.92E-062.34E-062.82E-06 + 15L1 15.002.64E-011.55E+017.48E+023.43E+045.73E-023.99E+002.54E+021.62E+04 + 15L1 17.001.82E-019.79E+004.33E+021.83E+044.01E-022.44E+001.38E+027.79E+03 + 15L1 20.001.12E-015.34E+002.11E+027.94E+032.53E-021.30E+006.27E+013.03E+03 + 15L1 25.005.68E-022.29E+007.65E+012.44E+031.36E-025.51E-012.15E+018.41E+02 + 15L1 32.002.66E-028.84E-012.43E+016.41E+026.87E-032.17E-016.68E+002.07E+02 + 15L1 40.001.33E-023.70E-018.51E+001.87E+023.75E-039.49E-022.36E+005.93E+01 + 15L1 50.006.63E-031.53E-012.93E+005.38E+012.06E-034.21E-028.48E-011.73E+01 + 15L1 65.002.90E-035.38E-028.30E-011.22E+011.03E-031.64E-022.60E-014.14E+00 + 15L1 80.001.50E-032.34E-023.04E-013.77E+006.02E-047.92E-031.04E-011.36E+00 + 15L1 100.007.37E-049.55E-031.03E-011.06E+003.41E-043.67E-033.92E-024.22E-01 + 15L1 120.004.13E-044.59E-034.27E-023.78E-012.15E-041.98E-031.80E-021.65E-01 + 15L1 150.002.04E-041.88E-031.46E-021.08E-011.24E-049.43E-047.09E-035.35E-02 + 15L1 200.008.30E-056.05E-043.73E-032.19E-026.20E-053.73E-042.21E-031.31E-02 + 15L1 300.002.43E-051.28E-045.79E-042.50E-032.41E-051.07E-044.60E-041.98E-03 + 15L1 450.007.77E-062.99E-051.02E-043.30E-049.80E-063.29E-051.07E-043.44E-04 + 15L1 650.003.08E-069.16E-062.45E-056.33E-054.53E-061.22E-053.15E-058.05E-05 + 15L11000.001.23E-062.80E-065.91E-061.21E-051.94E-064.17E-068.62E-061.75E-05 + 15L12000.003.87E-076.42E-071.02E-061.58E-065.76E-079.35E-071.47E-062.28E-06 + 15L2 15.009.84E-032.80E+005.35E+026.92E+042.09E-032.85E-012.98E+012.75E+03 + 15L2 17.006.02E-031.47E+002.47E+022.84E+041.39E-031.68E-011.56E+011.28E+03 + 15L2 20.003.17E-036.40E-019.08E+018.94E+038.20E-048.44E-026.75E+004.77E+02 + 15L2 25.001.31E-032.04E-012.30E+011.83E+033.96E-043.28E-022.13E+001.22E+02 + 15L2 32.004.87E-045.73E-025.03E+003.16E+021.76E-041.15E-025.92E-012.71E+01 + 15L2 40.001.99E-041.83E-021.28E+006.50E+018.49E-054.46E-031.87E-016.94E+00 + 15L2 50.008.09E-055.84E-033.27E-011.34E+014.08E-051.73E-035.88E-021.78E+00 + 15L2 65.002.81E-051.54E-036.62E-022.13E+001.73E-055.71E-041.52E-023.62E-01 + 15L2 80.001.22E-055.38E-041.89E-025.00E-018.74E-062.38E-045.24E-031.03E-01 + 15L2 100.005.01E-061.75E-044.96E-031.07E-014.21E-069.32E-051.68E-032.71E-02 + 15L2 120.002.43E-067.08E-051.68E-033.07E-022.32E-064.36E-056.67E-049.16E-03 + 15L2 150.001.01E-062.36E-054.55E-046.79E-031.13E-061.73E-052.18E-042.46E-03 + 15L2 200.003.32E-075.89E-068.70E-051.01E-034.45E-075.32E-065.25E-054.65E-04 + 15L2 300.007.28E-088.88E-079.15E-067.57E-051.22E-071.05E-067.44E-064.76E-05 + 15L2 450.001.73E-081.48E-071.08E-066.53E-063.47E-082.17E-071.14E-065.42E-06 + 15L2 650.005.11E-093.23E-081.78E-078.21E-071.14E-085.52E-082.26E-078.42E-07 + 15L21000.001.39E-096.33E-092.55E-088.94E-083.27E-091.21E-083.83E-081.11E-07 + 15L22000.002.32E-106.70E-101.77E-094.25E-095.11E-101.31E-092.98E-096.30E-09 + 15L3 15.001.89E-025.25E+009.88E+021.27E+051.02E-033.95E-018.97E+011.23E+04 + 15L3 17.001.16E-022.75E+004.54E+025.18E+046.82E-042.17E-014.26E+015.17E+03 + 15L3 20.006.07E-031.18E+001.65E+021.61E+044.06E-049.97E-021.63E+011.69E+03 + 15L3 25.002.49E-033.73E-014.12E+013.25E+031.99E-043.46E-024.41E+003.67E+02 + 15L3 32.009.27E-041.04E-018.84E+005.50E+029.02E-051.08E-021.05E+006.89E+01 + 15L3 40.003.77E-043.25E-022.20E+001.10E+024.41E-053.82E-032.91E-011.54E+01 + 15L3 50.001.53E-041.02E-025.47E-012.21E+012.15E-051.36E-038.15E-023.48E+00 + 15L3 65.005.32E-052.62E-031.07E-013.36E+009.29E-064.10E-041.85E-026.17E-01 + 15L3 80.002.31E-058.95E-042.94E-027.58E-014.79E-061.60E-045.82E-031.59E-01 + 15L3 100.009.46E-062.84E-047.40E-031.54E-012.36E-065.86E-051.69E-033.77E-02 + 15L3 120.004.60E-061.12E-042.41E-034.21E-021.33E-062.61E-056.25E-041.18E-02 + 15L3 150.001.92E-063.61E-056.16E-048.71E-036.61E-079.79E-061.87E-042.89E-03 + 15L3 200.006.41E-078.61E-061.08E-041.17E-032.73E-072.83E-064.06E-054.87E-04 + 15L3 300.001.46E-071.22E-069.98E-067.38E-058.16E-085.21E-074.98E-064.26E-05 + 15L3 450.003.73E-081.94E-071.03E-065.28E-062.60E-081.04E-076.64E-074.12E-06 + 15L3 650.001.22E-084.24E-081.55E-075.72E-079.86E-092.70E-081.18E-075.50E-07 + 15L31000.003.90E-098.89E-092.18E-085.64E-083.52E-096.57E-091.83E-086.08E-08 + 15L32000.008.85E-101.25E-091.87E-092.99E-098.64E-101.08E-091.62E-092.96E-09 + 16K1 15.004.37E+002.56E+021.24E+045.75E+059.68E-016.03E+013.28E+031.76E+05 + 16K1 17.002.99E+001.61E+027.13E+033.04E+056.77E-013.73E+011.84E+038.95E+04 + 16K1 20.001.83E+008.73E+013.44E+031.31E+054.26E-012.01E+018.65E+023.70E+04 + 16K1 25.009.22E-013.72E+011.24E+033.97E+042.28E-018.65E+003.08E+021.10E+04 + 16K1 32.004.29E-011.42E+013.92E+021.03E+041.15E-013.45E+009.91E+012.85E+03 + 16K1 40.002.14E-015.92E+001.36E+022.99E+036.25E-021.52E+003.58E+018.49E+02 + 16K1 50.001.06E-012.44E+004.67E+018.55E+023.43E-026.76E-011.31E+012.55E+02 + 16K1 65.004.61E-028.55E-011.32E+011.94E+021.71E-022.66E-014.07E+006.27E+01 + 16K1 80.002.38E-023.71E-014.81E+005.94E+019.96E-031.28E-011.64E+002.10E+01 + 16K1 100.001.17E-021.51E-011.63E+001.67E+015.62E-035.95E-026.24E-016.57E+00 + 16K1 120.006.56E-037.27E-026.74E-015.95E+003.55E-033.21E-022.88E-012.59E+00 + 16K1 150.003.24E-032.98E-022.31E-011.70E+002.04E-031.53E-021.14E-018.45E-01 + 16K1 200.001.32E-039.57E-035.89E-023.44E-011.02E-036.06E-033.55E-022.08E-01 + 16K1 300.003.87E-042.03E-039.15E-033.94E-023.93E-041.73E-037.42E-033.17E-02 + 16K1 450.001.24E-044.75E-041.61E-035.21E-031.59E-045.33E-041.72E-035.53E-03 + 16K1 650.004.91E-051.46E-043.89E-041.00E-037.33E-051.97E-045.08E-041.30E-03 + 16K11000.001.96E-054.47E-059.42E-051.93E-043.14E-056.75E-051.39E-042.83E-04 + 16K12000.006.17E-061.03E-051.63E-052.53E-059.24E-061.51E-052.37E-053.68E-05 + 16K16000.001.55E-061.91E-062.33E-062.83E-061.88E-062.32E-062.83E-063.42E-06 + 16L1 15.003.08E-011.74E+018.00E+023.49E+047.59E-025.37E+003.42E+022.16E+04 + 16L1 17.002.13E-011.11E+014.69E+021.89E+045.31E-023.28E+001.85E+021.04E+04 + 16L1 20.001.32E-016.09E+002.31E+028.38E+033.34E-021.73E+008.36E+014.03E+03 + 16L1 25.006.73E-022.64E+008.54E+012.64E+031.79E-027.31E-012.85E+011.11E+03 + 16L1 32.003.17E-021.03E+002.76E+017.08E+029.00E-032.86E-018.80E+002.72E+02 + 16L1 40.001.59E-024.33E-019.75E+002.10E+024.89E-031.24E-013.09E+007.75E+01 + 16L1 50.007.96E-031.81E-013.40E+006.11E+012.68E-035.49E-021.11E+002.24E+01 + 16L1 65.003.50E-036.39E-029.72E-011.41E+011.34E-032.13E-023.37E-015.36E+00 + 16L1 80.001.82E-032.80E-023.59E-014.38E+007.77E-041.02E-021.34E-011.76E+00 + 16L1 100.008.96E-041.15E-021.22E-011.24E+004.38E-044.73E-035.05E-025.42E-01 + 16L1 120.005.04E-045.54E-035.10E-024.46E-012.77E-042.54E-032.31E-022.11E-01 + 16L1 150.002.49E-042.28E-031.75E-021.28E-011.59E-041.21E-039.07E-036.83E-02 + 16L1 200.001.02E-047.36E-044.51E-032.62E-027.91E-054.76E-042.81E-031.67E-02 + 16L1 300.003.00E-051.57E-047.05E-043.03E-033.06E-051.36E-045.85E-042.52E-03 + 16L1 450.009.60E-063.69E-051.25E-044.03E-041.24E-054.17E-051.35E-044.36E-04 + 16L1 650.003.82E-061.13E-053.03E-057.79E-055.72E-061.54E-053.99E-051.02E-04 + 16L11000.001.52E-063.48E-067.34E-061.50E-052.44E-065.27E-061.09E-052.22E-05 + 16L12000.004.80E-077.99E-071.27E-061.97E-067.20E-071.17E-061.85E-062.87E-06 + 16L2 15.001.34E-023.96E+007.61E+029.79E+043.00E-034.08E-014.23E+013.87E+03 + 16L2 17.008.25E-032.09E+003.52E+024.03E+042.00E-032.41E-012.22E+011.81E+03 + 16L2 20.004.36E-039.08E-011.30E+021.27E+041.18E-031.21E-019.62E+006.75E+02 + 16L2 25.001.81E-032.89E-013.29E+012.61E+035.70E-044.71E-023.04E+001.74E+02 + 16L2 32.006.78E-048.18E-027.22E+004.52E+022.55E-041.66E-028.50E-013.86E+01 + 16L2 40.002.78E-042.61E-021.84E+009.33E+011.23E-046.45E-032.68E-019.93E+00 + 16L2 50.001.14E-048.38E-034.71E-011.93E+015.92E-052.51E-038.49E-022.56E+00 + 16L2 65.003.98E-052.21E-039.57E-023.07E+002.51E-058.29E-042.20E-025.22E-01 + 16L2 80.001.74E-057.75E-042.73E-027.23E-011.27E-053.46E-047.61E-031.49E-01 + 16L2 100.007.14E-062.53E-047.20E-031.55E-016.14E-061.36E-042.44E-033.92E-02 + 16L2 120.003.47E-061.03E-042.44E-034.45E-023.39E-066.36E-059.72E-041.33E-02 + 16L2 150.001.45E-063.43E-056.62E-049.88E-031.65E-062.53E-053.18E-043.58E-03 + 16L2 200.004.78E-078.58E-061.27E-041.47E-036.52E-077.80E-067.68E-056.79E-04 + 16L2 300.001.05E-071.30E-061.34E-051.11E-041.80E-071.54E-061.09E-056.98E-05 + 16L2 450.002.51E-082.16E-071.59E-069.59E-065.11E-083.20E-071.68E-067.97E-06 + 16L2 650.007.43E-094.74E-082.62E-071.21E-061.68E-088.16E-083.34E-071.24E-06 + 16L21000.002.02E-099.30E-093.77E-081.32E-074.83E-091.79E-085.67E-081.65E-07 + 16L22000.003.38E-109.83E-102.61E-096.29E-097.52E-101.94E-094.42E-099.34E-09 + 16L3 15.002.58E-027.39E+001.40E+031.79E+051.43E-036.06E-011.41E+021.93E+04 + 16L3 17.001.58E-023.87E+006.44E+027.32E+049.62E-043.32E-016.68E+018.09E+03 + 16L3 20.008.33E-031.67E+002.35E+022.28E+045.74E-041.52E-012.54E+012.63E+03 + 16L3 25.003.44E-035.28E-015.86E+014.61E+032.82E-045.26E-026.83E+005.70E+02 + 16L3 32.001.29E-031.47E-011.26E+017.82E+021.28E-041.64E-021.62E+001.06E+02 + 16L3 40.005.26E-044.62E-023.15E+001.57E+026.27E-055.76E-034.46E-012.36E+01 + 16L3 50.002.15E-041.46E-027.84E-013.17E+013.07E-052.04E-031.24E-015.32E+00 + 16L3 65.007.49E-053.74E-031.54E-014.82E+001.33E-056.12E-042.82E-029.39E-01 + 16L3 80.003.26E-051.28E-034.24E-021.09E+006.85E-062.38E-048.80E-032.41E-01 + 16L3 100.001.34E-054.08E-041.07E-022.22E-013.38E-068.71E-052.56E-035.70E-02 + 16L3 120.006.53E-061.61E-043.48E-036.07E-021.90E-063.87E-059.41E-041.78E-02 + 16L3 150.002.74E-065.20E-058.90E-041.26E-029.49E-071.45E-052.81E-044.35E-03 + 16L3 200.009.16E-071.24E-051.57E-041.69E-033.93E-074.17E-066.06E-057.31E-04 + 16L3 300.002.10E-071.76E-061.45E-051.07E-041.18E-077.64E-077.41E-066.37E-05 + 16L3 450.005.37E-082.81E-071.50E-067.67E-063.74E-081.52E-079.83E-076.14E-06 + 16L3 650.001.76E-086.13E-082.25E-078.32E-071.42E-083.92E-081.73E-078.16E-07 + 16L31000.005.61E-091.29E-083.16E-088.19E-085.06E-099.51E-092.67E-088.99E-08 + 16L32000.001.27E-091.81E-092.70E-094.34E-091.24E-091.56E-092.34E-094.32E-09 + 17K1 15.004.94E+002.79E+021.29E+045.73E+051.23E+007.64E+014.04E+032.10E+05 + 17K1 17.003.40E+001.76E+027.50E+033.08E+058.56E-014.71E+012.27E+031.07E+05 + 17K1 20.002.08E+009.63E+013.67E+031.35E+055.38E-012.53E+011.07E+034.47E+04 + 17K1 25.001.05E+004.14E+011.34E+034.18E+042.86E+011.09E+013.81E+021.33E+04 + 17K1 32.004.93E-011.60E+014.29E+021.11E+041.44E-014.31E+001.22E+023.48E+03 + 17K1 40.002.46E-016.69E+001.51E+023.25E+037.80E-021.89E+004.42E+011.04E+03 + 17K1 50.001.22E-012.78E+005.22E+019.39E+024.26E-028.39E-011.61E+013.11E+02 + 17K1 65.005.35E-029.78E-011.48E+012.15E+022.12E-023.28E-015.00E+007.65E+01 + 17K1 80.002.77E-024.27E-015.46E+006.66E+011.23E-021.58E-012.01E+002.56E+01 + 17K1 100.001.37E-021.75E-011.86E+001.89E+016.92E-037.32E-027.63E-018.01E+00 + 17K1 120.007.67E-038.42E-027.73E-016.75E+004.36E-033.94E-023.52E-013.15E+00 + 17K1 150.003.80E-033.47E-022.66E-011.94E+002.50E-031.88E-021.39E-011.03E+00 + 17K1 200.001.55E-031.12E-026.82E-023.96E-011.24E-037.40E-034.32E-022.53E-01 + 17K1 300.004.57E-042.38E-031.07E-024.57E-024.78E-042.11E-039.02E-033.85E-02 + 17K1 450.001.46E-045.60E-041.89E-036.10E-031.93E-046.47E-042.09E-036.70E-03 + 17K1 650.005.83E-051.73E-044.60E-041.18E-038.86E-052.38E-046.16E-041.57E-03 + 17K11000.002.33E-055.32E-051.12E-042.29E-043.78E-058.16E-051.69E-043.43E-04 + 17K12000.007.32E-061.22E-051.94E-053.02E-051.11E-051.81E-052.86E-054.44E-05 + 17K16000.001.84E-062.27E-062.78E-063.37E-062.23E-062.76E-063.38E-064.10E-06 + 17L1 15.003.54E-011.92E+018.40E+023.45E+049.90E-027.12E+004.53E+022.85E+04 + 17L1 17.002.46E-011.23E+014.99E+021.92E+046.91E-024.33E+002.44E+021.36E+04 + 17L1 20.001.53E-016.82E+002.49E+028.67E+034.34E-022.28E+001.10E+025.27E+03 + 17L1 25.007.85E-022.99E+009.36E+012.80E+032.31E-029.56E-013.72E+011.45E+03 + 17L1 32.003.72E-021.18E+003.08E+017.68E+021.16E-023.72E-011.14E+013.52E+02 + 17L1 40.001.88E-025.00E-011.10E+012.31E+026.28E-031.61E-013.99E+009.97E+01 + 17L1 50.009.42E-032.10E-013.87E+006.83E+013.43E-037.05E-021.42E+002.87E+01 + 17L1 65.004.16E-037.49E-021.12E+001.60E+011.70E-032.72E-024.30E-016.82E+00 + 17L1 80.002.17E-033.29E-024.16E-015.01E+009.88E-041.30E-021.70E-012.23E+00 + 17L1 100.001.07E-031.36E-021.43E-011.44E+005.55E-045.99E-036.39E-026.86E-01 + 17L1 120.006.04E-046.58E-035.99E-025.18E-013.50E-043.22E-032.92E-022.67E-01 + 17L1 150.003.00E-042.72E-032.07E-021.50E-012.00E-041.52E-031.14E-028.60E-02 + 17L1 200.001.23E-048.82E-045.36E-033.09E-029.95E-055.99E-043.54E-032.09E-02 + 17L1 300.003.64E-051.89E-048.45E-043.60E-033.84E-051.70E-047.33E-043.15E-03 + 17L1 450.001.17E-054.47E-051.50E-044.85E-041.55E-055.21E-051.69E-045.45E-04 + 17L1 650.004.66E-061.38E-053.67E-059.43E-057.11E-061.92E-054.97E-051.27E-04 + 17L11000.001.86E-064.26E-068.96E-061.83E-053.03E-066.55E-061.36E-052.76E-05 + 17L12000.005.86E-079.78E-071.56E-062.42E-068.86E-071.45E-062.30E-063.57E-06 + 17L2 15.001.79E-025.45E+001.05E+031.35E+054.19E-035.69E-015.85E+015.29E+03 + 17L2 17.001.10E-022.88E+004.89E+025.56E+042.79E-033.36E-013.08E+012.48E+03 + 17L2 20.005.85E-031.25E+001.80E+021.76E+041.65E-031.69E-011.33E+019.28E+02 + 17L2 25.002.44E-034.01E-014.58E+013.62E+038.00E-046.60E-024.23E+002.40E+02 + 17L2 32.009.21E-041.14E-011.01E+016.30E+023.58E-042.33E-021.19E+005.36E+01 + 17L2 40.003.80E-043.64E-022.57E+001.30E+021.73E-049.07E-033.76E-011.38E+01 + 17L2 50.001.56E-041.17E-026.61E-012.71E+018.35E-053.54E-031.19E-013.57E+00 + 17L2 65.005.48E-053.10E-031.35E-014.31E+003.55E-051.17E-033.10E-027.31E-01 + 17L2 80.002.40E-051.09E-033.85E-021.02E+001.80E-054.90E-041.07E-022.10E-01 + 17L2 100.009.90E-063.57E-041.02E-022.18E-018.72E-061.93E-043.46E-035.53E-02 + 17L2 120.004.83E-061.44E-043.46E-036.30E-024.83E-069.04E-051.38E-031.88E-02 + 17L2 150.002.02E-064.84E-059.39E-041.40E-022.35E-063.60E-054.51E-045.07E-03 + 17L2 200.006.70E-071.21E-051.81E-042.09E-039.31E-071.11E-051.09E-049.65E-04 + 17L2 300.001.48E-071.84E-061.91E-051.58E-042.58E-072.20E-061.56E-059.96E-05 + 17L2 450.003.54E-083.08E-072.28E-061.37E-057.32E-084.59E-072.41E-061.14E-05 + 17L2 650.001.05E-086.76E-083.75E-071.74E-062.42E-081.17E-074.80E-071.78E-06 + 17L21000.002.87E-091.33E-085.41E-081.90E-076.92E-092.58E-088.18E-082.37E-07 + 17L22000.004.79E-101.41E-093.74E-099.05E-091.08E-092.79E-096.38E-091.35E-08 + 17L3 15.003.42E-021.01E+011.93E+032.46E+051.97E-039.05E-012.16E+022.95E+04 + 17L3 17.002.10E-025.32E+008.90E+021.01E+051.32E-034.94E-011.02E+021.23E+04 + 17L3 20.001.11E-022.30E+003.25E+023.15E+047.90E-042.26E-013.86E+013.99E+03 + 17L3 25.004.63E-037.28E-018.13E+016.37E+033.89E-047.78E-021.03E+018.60E+02 + 17L3 32.001.74E-032.03E-011.75E+011.08E+031.77E-042.41E-022.43E+001.59E+02 + 17L3 40.007.14E-046.41E-024.38E+002.19E+028.68E-058.46E-036.66E-013.53E+01 + 17L3 50.002.93E-042.02E-021.09E+004.41E+014.26E-052.99E-031.85E-017.91E+00 + 17L3 65.001.03E-045.21E-032.15E-016.72E+001.85E-058.91E-044.17E-021.39E+00 + 17L3 80.004.48E-051.79E-035.93E-021.52E+009.54E-063.45E-041.30E-023.57E-01 + 17L3 100.001.85E-055.70E-041.50E-023.10E-014.71E-061.26E-043.75E-038.40E-02 + 17L3 120.009.03E-062.25E-044.88E-038.52E-022.66E-065.58E-051.38E-032.61E-02 + 17L3 150.003.80E-067.29E-051.25E-031.77E-021.33E-062.08E-054.10E-046.37E-03 + 17L3 200.001.27E-061.74E-052.21E-042.38E-035.50E-075.99E-068.83E-051.07E-03 + 17L3 300.002.93E-072.48E-062.04E-051.51E-041.65E-071.09E-061.07E-059.26E-05 + 17L3 450.007.50E-083.95E-072.12E-061.08E-055.25E-082.17E-071.42E-068.90E-06 + 17L3 650.002.46E-088.63E-083.18E-071.18E-061.99E-085.55E-082.49E-071.18E-06 + 17L31000.007.85E-091.81E-084.46E-081.16E-077.09E-091.34E-083.81E-081.29E-07 + 17L32000.001.78E-092.53E-093.80E-096.11E-091.74E-092.19E-093.30E-096.13E-09 + 18K1 15.005.53E+002.99E+021.32E+045.60E+051.54E+009.56E+014.91E+032.46E+05 + 18K1 17.003.81E+001.91E+027.78E+033.07E+051.07E+005.89E+012.76E+031.27E+05 + 18K1 20.002.34E+001.05E+023.86E+031.37E+056.71E-013.15E+011.30E+035.31E+04 + 18K1 25.001.19E+004.55E+011.43E+034.34E+043.56E-011.35E+014.65E+021.59E+04 + 18K1 32.005.60E-011.78E+014.65E+021.17E+041.78E-015.33E+001.49E+024.18E+03 + 18K1 40.002.81E-017.48E+001.65E+023.49E+039.63E-022.33E+005.39E+011.25E+03 + 18K1 50.001.40E-013.12E+005.77E+011.02E+035.24E-021.03E+001.96E+013.75E+02 + 18K1 65.006.15E-021.11E+001.66E+012.36E+022.60E-024.02E-016.07E+009.23E+01 + 18K1 80.003.19E-024.85E-016.13E+007.38E+011.50E-021.93E-012.43E+003.08E+01 + 18K1 100.001.58E-022.00E-012.10E+002.11E+018.44E-038.91E-029.25E-019.65E+00 + 18K1 120.008.88E-039.66E-028.77E-017.58E+005.30E-034.79E-024.25E-013.79E+00 + 18K1 150.004.41E-033.99E-023.03E-012.19E+003.03E-032.27E-021.67E-011.24E+00 + 18K1 200.001.80E-031.29E-027.82E-024.50E-011.50E-038.94E-035.21E-023.04E-01 + 18K1 300.005.34E-042.76E-031.23E-025.24E-025.77E-042.54E-031.09E-024.62E-02 + 18K1 450.001.72E-046.54E-042.20E-037.06E-032.32E-047.78E-042.51E-038.04E-03 + 18K1 650.006.85E-052.03E-045.38E-041.38E-031.06E-042.86E-047.39E-041.88E-03 + 18K11000.002.73E-056.26E-051.32E-042.69E-044.50E-059.76E-052.02E-044.10E-04 + 18K12000.008.60E-061.44E-052.30E-053.57E-051.31E-052.16E-053.42E-055.31E-05 + 18K16000.002.15E-062.67E-063.27E-063.98E-062.61E-063.25E-064.00E-064.86E-06 + 18L1 15.004.03E-012.09E+018.64E+023.34E+041.27E-019.32E+005.91E+023.70E+04 + 18L1 17.002.81E-011.35E+015.21E+021.89E+048.86E-025.64E+003.17E+021.77E+04 + 18L1 20.001.75E-017.53E+002.64E+028.78E+035.56E-022.96E+001.42E+026.80E+03 + 18L1 25.009.03E-023.34E+001.01E+022.91E+032.95E-021.23E+004.78E+011.86E+03 + 18L1 32.004.30E-021.33E+003.37E+018.18E+021.47E-024.76E-011.46E+014.49E+02 + 18L1 40.002.18E-025.69E-011.22E+012.51E+027.95E-032.05E-015.08E+001.27E+02 + 18L1 50.001.10E-022.41E-014.35E+007.51E+014.33E-038.94E-021.80E+003.64E+01 + 18L1 65.004.87E-038.64E-021.27E+001.78E+012.14E-033.44E-025.42E-018.59E+00 + 18L1 80.002.55E-033.82E-024.76E-015.64E+001.24E-031.64E-022.13E-012.80E+00 + 18L1 100.001.27E-031.58E-021.65E-011.63E+006.95E-047.51E-038.00E-028.57E-01 + 18L1 120.007.15E-047.71E-036.93E-025.93E-014.36E-044.02E-033.64E-023.32E-01 + 18L1 150.003.56E-043.20E-032.41E-021.73E-012.49E-041.90E-031.42E-021.07E-01 + 18L1 200.001.46E-041.04E-036.28E-033.60E-021.23E-047.43E-044.39E-032.59E-02 + 18L1 300.004.35E-052.25E-049.99E-044.23E-034.74E-052.10E-049.07E-043.89E-03 + 18L1 450.001.40E-055.34E-051.79E-045.74E-041.91E-056.43E-052.09E-046.72E-04 + 18L1 650.005.61E-061.66E-054.40E-051.13E-048.72E-062.36E-056.12E-051.57E-04 + 18L11000.002.24E-065.14E-061.08E-052.21E-053.70E-068.04E-061.67E-053.40E-05 + 18L12000.007.05E-071.18E-061.89E-062.94E-061.08E-061.77E-062.81E-064.37E-06 + 18L2 15.002.33E-027.34E+001.43E+031.81E+055.71E-037.74E-017.88E+017.06E+03 + 18L2 17.001.44E-023.88E+006.62E+027.49E+043.82E-034.58E-014.16E+013.32E+03 + 18L2 20.007.68E-031.69E+002.45E+022.37E+042.26E-032.31E-011.81E+011.25E+03 + 18L2 25.003.22E-035.43E-016.23E+014.90E+031.10E-039.03E-025.75E+003.23E+02 + 18L2 32.001.22E-031.54E-011.37E+018.56E+024.92E-043.19E-021.62E+007.26E+01 + 18L2 40.005.06E-044.95E-023.52E+001.78E+022.38E-041.25E-025.14E-011.88E+01 + 18L2 50.002.09E-041.60E-029.05E-013.70E+011.15E-044.87E-031.63E-014.87E+00 + 18L2 65.007.37E-054.24E-031.85E-015.91E+004.91E-051.62E-034.26E-021.00E+00 + 18L2 80.003.24E-051.49E-035.31E-021.40E+002.50E-056.78E-041.48E-022.88E-01 + 18L2 100.001.34E-054.90E-041.40E-023.01E-011.21E-052.67E-044.77E-037.62E-02 + 18L2 120.006.56E-061.99E-044.78E-038.69E-026.70E-061.25E-041.91E-032.59E-02 + 18L2 150.002.75E-066.68E-051.30E-031.94E-023.26E-065.01E-056.26E-047.02E-03 + 18L2 200.009.16E-071.68E-052.51E-042.91E-031.30E-061.55E-051.52E-041.34E-03 + 18L2 300.002.04E-072.56E-062.66E-052.20E-043.60E-073.08E-062.18E-051.39E-04 + 18L2 450.004.88E-084.29E-073.18E-061.92E-051.02E-076.44E-073.37E-061.59E-05 + 18L2 650.001.46E-089.43E-085.25E-072.43E-063.39E-081.65E-076.74E-072.50E-06 + 18L21000.003.97E-091.85E-087.59E-082.67E-079.71E-093.62E-081.15E-073.33E-07 + 18L22000.006.63E-101.96E-095.25E-091.27E-081.51E-093.93E-098.99E-091.90E-08 + 18L3 15.004.43E-021.36E+012.61E+033.29E+052.64E-031.32E+003.21E+024.39E+04 + 18L3 17.002.73E-027.15E+001.20E+031.35E+051.78E-037.18E-011.51E+021.83E+04 + 18L3 20.001.46E-023.10E+004.39E+024.23E+041.06E-033.28E-015.71E+015.91E+03 + 18L3 25.006.08E-039.81E-011.10E+028.58E+035.24E-041.12E-011.52E+011.27E+03 + 18L3 32.002.30E-032.75E-012.38E+011.47E+032.39E-043.47E-023.55E+002.34E+02 + 18L3 40.009.48E-048.68E-025.96E+002.96E+021.17E-041.21E-029.70E-015.14E+01 + 18L3 50.003.90E-042.74E-021.49E+005.99E+015.77E-054.27E-032.68E-011.15E+01 + 18L3 65.001.37E-047.09E-032.93E-019.16E+002.51E-051.27E-036.01E-022.01E+00 + 18L3 80.006.01E-052.44E-038.11E-022.08E+001.30E-054.90E-041.87E-025.14E-01 + 18L3 100.002.49E-057.77E-042.05E-024.25E-016.42E-061.78E-045.38E-031.21E-01 + 18L3 120.001.22E-053.07E-046.69E-031.17E-013.63E-067.87E-051.97E-033.74E-02 + 18L3 150.005.14E-069.97E-051.72E-032.42E-021.81E-062.93E-055.85E-049.11E-03 + 18L3 200.001.73E-062.39E-053.04E-043.27E-037.52E-078.40E-061.25E-041.52E-03 + 18L3 300.003.99E-073.40E-062.81E-052.08E-042.26E-071.52E-061.52E-051.32E-04 + 18L3 450.001.02E-075.43E-072.92E-061.50E-057.18E-083.01E-072.00E-061.26E-05 + 18L3 650.003.36E-081.19E-074.38E-071.62E-062.73E-087.68E-083.49E-071.66E-06 + 18L31000.001.07E-082.48E-086.14E-081.60E-079.70E-091.85E-085.31E-081.81E-07 + 18L32000.002.43E-093.47E-095.21E-098.41E-092.37E-093.00E-094.54E-098.51E-09 + 19K1 15.006.15E+003.18E+021.33E+045.40E+051.91E+001.18E+025.89E+032.84E+05 + 19K1 17.004.25E+002.04E+027.98E+033.01E+051.33E+007.29E+013.32E+031.48E+05 + 19K1 20.002.62E+001.13E+024.01E+031.37E+058.30E-013.89E+011.57E+036.24E+04 + 19K1 25.001.34E+004.97E+011.51E+034.45E+044.39E-011.66E+015.62E+021.89E+04 + 19K1 32.006.31E-011.95E+014.99E+021.23E+042.19E-016.53E+001.81E+024.98E+03 + 19K1 40.003.17E-018.29E+001.79E+023.70E+031.18E-012.85E+006.51E+011.49E+03 + 19K1 50.001.59E-013.48E+006.32E+011.10E+036.40E-021.26E+002.37E+014.48E+02 + 19K1 65.007.00E-021.24E+001.83E+012.57E+023.16E-024.88E-017.32E+001.10E+02 + 19K1 80.003.65E-025.47E-016.81E+008.09E+011.82E-022.34E-012.93E+003.69E+01 + 19K1 100.001.81E-022.26E-012.35E+002.33E+011.02E-021.08E-011.11E+001.15E+01 + 19K1 120.001.02E-021.10E-019.85E-018.43E+006.40E-035.77E-025.10E-014.53E+00 + 19K1 150.005.07E-034.54E-023.42E-012.45E+003.65E-032.73E-022.01E-011.48E+00 + 19K1 200.002.08E-031.48E-028.88E-025.08E-011.80E-031.07E-026.23E-023.62E-01 + 19K1 300.006.18E-043.18E-031.41E-025.96E-026.89E-043.04E-031.30E-025.51E-02 + 19K1 450.001.99E-047.57E-042.53E-038.10E-032.76E-049.28E-042.99E-039.57E-03 + 19K1 650.007.97E-052.35E-046.23E-041.59E-031.26E-043.41E-048.80E-042.24E-03 + 19K11000.003.19E-057.30E-051.53E-043.13E-045.31E-051.16E-042.40E-044.87E-04 + 19K12000.001.00E-051.68E-052.69E-054.19E-051.54E-052.54E-054.04E-056.29E-05 + 19K16000.002.49E-063.10E-063.82E-064.66E-063.04E-063.80E-064.68E-065.71E-06 + 19L1 15.004.53E-012.24E+018.76E+023.15E+041.61E-011.20E+017.62E+024.75E+04 + 19L1 17.003.16E-011.46E+015.36E+021.84E+041.12E-017.26E+004.08E+022.26E+04 + 19L1 20.001.98E-018.23E+002.76E+028.75E+037.03E-023.79E+001.82E+028.68E+03 + 19L1 25.001.03E-013.68E+001.08E+022.99E+033.72E-021.57E+006.09E+012.36E+03 + 19L1 32.004.93E-021.48E+003.66E+018.60E+021.85E-026.04E-011.85E+015.67E+02 + 19L1 40.002.51E-026.39E-011.34E+012.69E+029.96E-032.58E-016.40E+001.59E+02 + 19L1 50.001.27E-022.72E-014.83E+008.16E+015.40E-031.12E-012.25E+004.55E+01 + 19L1 65.005.65E-039.87E-021.43E+001.96E+012.66E-034.29E-026.75E-011.07E+01 + 19L1 80.002.97E-034.38E-025.38E-016.28E+001.54E-032.04E-022.65E-013.47E+00 + 19L1 100.001.48E-031.83E-021.88E-011.83E+008.59E-049.30E-039.90E-021.06E+00 + 19L1 120.008.37E-048.92E-037.93E-026.71E-015.38E-044.97E-034.50E-024.10E-01 + 19L1 150.004.18E-043.72E-032.78E-021.97E-013.07E-042.34E-031.75E-021.31E-01 + 19L1 200.001.73E-041.22E-037.28E-034.13E-021.51E-049.13E-045.38E-033.18E-02 + 19L1 300.005.15E-052.64E-041.17E-034.92E-035.80E-052.58E-041.11E-034.76E-03 + 19L1 450.001.67E-056.32E-052.11E-046.73E-042.32E-057.85E-052.55E-048.19E-04 + 19L1 650.006.68E-061.97E-055.21E-051.33E-041.06E-052.88E-057.46E-051.91E-04 + 19L11000.002.67E-066.13E-061.29E-052.63E-054.47E-069.75E-062.03E-054.13E-05 + 19L12000.008.39E-071.41E-062.26E-063.52E-061.29E-062.14E-063.40E-065.30E-06 + 19L2 15.002.97E-029.70E+001.90E+032.40E+057.65E-031.03E+001.04E+029.26E+03 + 19L2 17.001.84E-025.13E+008.82E+029.91E+045.11E-036.12E-015.52E+014.37E+03 + 19L2 20.009.87E-032.24E+003.26E+023.15E+043.03E-033.10E-012.40E+011.64E+03 + 19L2 25.004.16E-037.21E-018.32E+016.52E+031.47E-031.21E-017.67E+004.28E+02 + 19L2 32.001.59E-032.05E-011.84E+011.14E+036.63E-044.30E-022.16E+009.65E+01 + 19L2 40.006.61E-046.62E-024.72E+002.38E+023.22E-041.68E-026.89E-012.51E+01 + 19L2 50.002.74E-042.14E-021.22E+004.97E+011.56E-046.58E-032.20E-016.52E+00 + 19L2 65.009.73E-055.68E-032.49E-017.96E+006.65E-052.19E-035.75E-021.34E+00 + 19L2 80.004.29E-052.01E-037.17E-021.89E+003.39E-059.20E-042.00E-023.88E-01 + 19L2 100.001.78E-056.61E-041.90E-024.07E-011.65E-053.63E-046.47E-031.03E-01 + 19L2 120.008.74E-062.69E-046.48E-031.18E-019.13E-061.71E-042.59E-033.51E-02 + 19L2 150.003.68E-069.04E-051.77E-032.63E-024.45E-066.83E-058.52E-049.52E-03 + 19L2 200.001.23E-062.28E-053.41E-043.96E-031.77E-062.12E-052.08E-041.82E-03 + 19L2 300.002.74E-073.48E-063.64E-053.01E-044.93E-074.22E-062.98E-051.90E-04 + 19L2 450.006.61E-085.85E-074.36E-062.63E-051.41E-078.85E-074.63E-062.19E-05 + 19L2 650.001.97E-081.29E-077.20E-073.34E-064.65E-082.27E-079.28E-073.44E-06 + 19L21000.005.39E-092.54E-081.04E-073.67E-071.34E-084.99E-081.59E-074.59E-07 + 19L22000.009.00E-102.69E-097.23E-091.76E-082.07E-095.42E-091.24E-082.63E-08 + 19L3 15.005.64E-021.79E+013.45E+034.33E+053.47E-031.88E+004.70E+026.42E+04 + 19L3 17.003.49E-029.42E+001.59E+031.78E+052.34E-031.02E+002.20E+022.67E+04 + 19L3 20.001.86E-024.09E+005.83E+025.59E+041.40E-034.66E-018.30E+018.58E+03 + 19L3 25.007.82E-031.30E+001.46E+021.14E+046.92E-041.59E-012.19E+011.83E+03 + 19L3 32.002.97E-033.64E-013.17E+011.95E+033.17E-044.90E-025.11E+003.36E+02 + 19L3 40.001.23E-031.15E-017.95E+003.94E+021.56E-041.70E-021.39E+007.36E+01 + 19L3 50.005.09E-043.65E-021.99E+007.99E+017.68E-055.98E-033.82E-011.64E+01 + 19L3 65.001.80E-049.45E-033.93E-011.22E+013.34E-051.77E-038.52E-022.85E+00 + 19L3 80.007.91E-053.25E-031.09E-012.78E+001.73E-056.82E-042.64E-027.27E-01 + 19L3 100.003.29E-051.04E-032.75E-025.70E-018.58E-062.47E-047.57E-031.70E-01 + 19L3 120.001.61E-054.12E-049.00E-031.57E-014.85E-061.09E-042.77E-035.27E-02 + 19L3 150.006.82E-061.34E-042.31E-033.26E-022.43E-064.04E-058.18E-041.28E-02 + 19L3 200.002.30E-063.21E-054.09E-044.41E-031.01E-061.15E-051.75E-042.13E-03 + 19L3 300.005.32E-074.58E-063.80E-052.81E-043.03E-072.08E-062.11E-051.83E-04 + 19L3 450.001.37E-077.32E-073.95E-062.02E-059.64E-084.10E-072.76E-061.75E-05 + 19L3 650.004.51E-081.60E-075.93E-072.20E-063.66E-081.04E-074.79E-072.30E-06 + 19L31000.001.44E-083.34E-088.29E-082.16E-071.30E-082.49E-087.25E-082.50E-07 + 19L32000.003.25E-094.66E-097.02E-091.13E-083.17E-094.02E-096.13E-091.16E-08 + 20K1 15.006.78E+003.35E+021.33E+045.12E+052.34E+001.45E+026.98E+033.22E+05 + 20K1 17.004.69E+002.16E+028.08E+032.92E+051.63E+008.93E+013.95E+031.69E+05 + 20K1 20.002.90E+001.21E+024.13E+031.36E+051.02E+004.76E+011.88E+037.23E+04 + 20K1 25.001.49E+005.37E+011.59E+034.51E+045.36E-012.02E+016.73E+022.21E+04 + 20K1 32.007.05E-012.13E+015.31E+021.27E+042.67E-017.94E+002.16E+025.86E+03 + 20K1 40.003.56E-019.11E+001.92E+023.90E+031.43E-013.45E+007.80E+011.76E+03 + 20K1 50.001.79E-013.85E+006.85E+011.17E+037.74E-021.52E+002.84E+015.31E+02 + 20K1 65.007.90E-021.38E+002.00E+012.77E+023.81E-025.87E-018.74E+001.31E+02 + 20K1 80.004.13E-026.11E-017.51E+008.80E+012.19E-022.80E-013.49E+004.37E+01 + 20K1 100.002.05E-022.54E-012.61E+002.55E+011.22E-021.29E-011.32E+001.37E+01 + 20K1 120.001.16E-021.23E-011.10E+009.29E+007.65E-036.89E-026.07E-015.37E+00 + 20K1 150.005.78E-035.14E-023.83E-012.71E+004.36E-033.26E-022.38E-011.75E+00 + 20K1 200.002.38E-031.68E-021.00E-015.67E-012.14E-031.27E-027.39E-024.28E-01 + 20K1 300.007.09E-043.63E-031.60E-026.73E-028.17E-043.60E-031.53E-026.50E-02 + 20K1 450.002.30E-048.69E-042.89E-039.21E-033.26E-041.10E-033.54E-031.13E-02 + 20K1 650.009.21E-052.71E-047.16E-041.82E-031.48E-044.02E-041.04E-032.64E-03 + 20K11000.003.68E-058.45E-051.77E-043.61E-046.23E-051.36E-042.83E-045.74E-04 + 20K12000.001.16E-051.95E-053.12E-054.87E-051.79E-052.98E-054.74E-057.39E-05 + 20K16000.002.87E-063.58E-064.42E-065.41E-063.51E-064.41E-065.45E-066.66E-06 + 20L1 15.005.04E-012.38E+018.74E+022.91E+042.03E-011.54E+019.73E+026.03E+04 + 20L1 17.003.54E-011.56E+015.43E+021.74E+041.41E-019.26E+005.19E+022.86E+04 + 20L1 20.002.22E-018.88E+002.85E+028.56E+038.79E-024.81E+002.31E+021.10E+04 + 20L1 25.001.16E-014.02E+001.13E+023.02E+034.64E-021.98E+007.69E+012.96E+03 + 20L1 32.005.58E-021.63E+003.91E+018.92E+022.30E-027.58E-012.32E+017.09E+02 + 20L1 40.002.86E-027.12E-011.46E+012.84E+021.24E-023.23E-017.99E+001.98E+02 + 20L1 50.001.45E-023.05E-015.30E+008.76E+016.68E-031.39E-012.80E+005.64E+01 + 20L1 65.006.49E-031.11E-011.58E+002.14E+013.28E-035.31E-028.34E-011.32E+01 + 20L1 80.003.42E-034.98E-026.01E-016.92E+001.89E-032.51E-023.26E-014.27E+00 + 20L1 100.001.71E-032.08E-022.11E-012.04E+001.05E-031.14E-021.21E-011.30E+00 + 20L1 120.009.70E-041.02E-028.98E-027.51E-016.58E-046.08E-035.50E-025.01E-01 + 20L1 150.004.86E-044.28E-033.16E-022.22E-013.74E-042.86E-032.13E-021.60E-01 + 20L1 200.002.01E-041.41E-038.34E-034.70E-021.84E-041.11E-036.54E-033.86E-02 + 20L1 300.006.03E-053.07E-041.35E-035.65E-037.01E-053.12E-041.34E-035.76E-03 + 20L1 450.001.96E-057.40E-052.45E-047.81E-042.80E-059.49E-053.08E-049.89E-04 + 20L1 650.007.87E-062.32E-056.12E-051.56E-041.27E-053.47E-059.00E-052.30E-04 + 20L11000.003.15E-067.23E-061.52E-053.10E-055.34E-061.17E-052.44E-054.97E-05 + 20L12000.009.89E-071.67E-062.68E-064.18E-061.53E-062.56E-064.08E-066.37E-06 + 20L2 15.003.73E-021.26E+012.48E+033.11E+051.01E-021.36E+001.36E+021.19E+04 + 20L2 17.002.32E-026.68E+001.15E+031.29E+056.74E-038.05E-017.20E+015.65E+03 + 20L2 20.001.25E-022.93E+004.27E+024.11E+044.00E-034.08E-013.14E+012.13E+03 + 20L2 25.005.29E-039.42E-011.09E+028.53E+031.95E-031.60E-011.01E+015.58E+02 + 20L2 32.002.03E-032.69E-012.42E+011.50E+038.78E-045.68E-022.85E+001.26E+02 + 20L2 40.008.49E-048.69E-026.23E+003.13E+024.27E-042.23E-029.09E-013.29E+01 + 20L2 50.003.54E-042.81E-021.61E+006.55E+012.07E-048.74E-032.91E-018.58E+00 + 20L2 65.001.26E-047.50E-033.30E-011.05E+018.86E-052.92E-037.63E-021.78E+00 + 20L2 80.005.58E-052.65E-039.52E-022.50E+004.53E-051.23E-032.66E-025.13E-01 + 20L2 100.002.33E-058.75E-042.53E-025.41E-012.20E-054.86E-048.62E-031.37E-01 + 20L2 120.001.14E-053.57E-048.64E-031.57E-011.22E-052.29E-043.45E-034.66E-02 + 20L2 150.004.84E-061.20E-042.36E-033.51E-025.97E-069.15E-051.14E-031.27E-02 + 20L2 200.001.62E-063.04E-054.57E-045.29E-032.38E-062.85E-052.78E-042.44E-03 + 20L2 300.003.63E-074.66E-064.89E-054.04E-046.64E-075.69E-064.01E-052.55E-04 + 20L2 450.008.78E-087.85E-075.87E-063.54E-051.90E-071.20E-066.25E-062.95E-05 + 20L2 650.002.63E-081.73E-079.72E-074.51E-066.28E-083.07E-071.26E-064.65E-06 + 20L21000.007.20E-093.42E-081.41E-074.97E-071.81E-086.78E-082.15E-076.23E-07 + 20L22000.001.20E-093.62E-099.78E-092.38E-082.79E-097.35E-091.69E-083.58E-08 + 20L3 15.007.05E-022.32E+014.50E+035.60E+054.50E-032.63E+006.75E+029.21E+04 + 20L3 17.004.38E-021.22E+012.08E+032.30E+053.04E-031.43E+003.16E+023.82E+04 + 20L3 20.002.35E-025.31E+007.61E+027.25E+041.82E-036.50E-011.18E+021.22E+04 + 20L3 25.009.90E-031.69E+001.91E+021.48E+049.00E-042.21E-013.11E+012.59E+03 + 20L3 32.003.78E-034.74E-014.15E+012.54E+034.12E-046.79E-027.20E+004.74E+02 + 20L3 40.001.58E-031.50E-011.04E+015.16E+022.03E-042.35E-021.95E+001.03E+02 + 20L3 50.006.54E-044.77E-022.62E+001.05E+021.00E-048.24E-035.34E-012.29E+01 + 20L3 65.002.32E-041.24E-025.17E-011.61E+014.37E-052.43E-031.19E-013.98E+00 + 20L3 80.001.02E-044.27E-031.43E-013.66E+002.27E-059.32E-043.66E-021.01E+00 + 20L3 100.004.26E-051.37E-033.63E-027.51E-011.13E-053.37E-041.05E-022.36E-01 + 20L3 120.002.10E-055.42E-041.19E-022.07E-016.37E-061.48E-043.81E-037.28E-02 + 20L3 150.008.89E-061.76E-043.06E-034.31E-023.19E-065.49E-051.12E-031.76E-02 + 20L3 200.003.01E-064.24E-055.43E-045.84E-031.33E-061.56E-052.39E-042.93E-03 + 20L3 300.006.99E-076.06E-065.04E-053.73E-043.99E-072.80E-062.87E-052.51E-04 + 20L3 450.001.80E-079.69E-075.25E-062.69E-051.27E-075.49E-073.74E-062.39E-05 + 20L3 650.005.94E-082.12E-077.88E-072.92E-064.83E-081.39E-076.48E-073.13E-06 + 20L31000.001.89E-084.43E-081.10E-072.88E-071.71E-083.31E-089.74E-083.38E-07 + 20L32000.004.28E-096.15E-099.28E-091.50E-084.18E-095.31E-098.13E-091.55E-08 + 21K1 15.007.42E+003.48E+021.31E+044.76E+052.86E+001.77E+028.16E+033.59E+05 + 21K1 17.005.15E+002.27E+028.07E+032.77E+051.98E+001.09E+024.64E+031.91E+05 + 21K1 20.003.19E+001.29E+024.20E+031.32E+051.24E+005.77E+012.21E+038.26E+04 + 21K1 25.001.65E+005.75E+011.64E+034.52E+046.50E-012.45E+017.97E+022.55E+04 + 21K1 32.007.82E-012.31E+015.58E+021.30E+043.22E-019.57E+002.57E+026.83E+03 + 21K1 40.003.96E-019.93E+002.05E+024.06E+031.72E-014.15E+009.26E+012.06E+03 + 21K1 50.002.00E-014.22E+007.37E+011.23E+039.29E-021.82E+003.36E+016.23E+02 + 21K1 65.008.86E-021.53E+002.18E+012.96E+024.56E-027.01E-011.04E+011.54E+02 + 21K1 80.004.64E-026.78E-018.21E+009.49E+012.62E-023.34E-014.14E+005.14E+01 + 21K1 100.002.31E-022.82E-012.87E+002.77E+011.46E-021.53E-011.56E+001.61E+01 + 21K1 120.001.31E-021.38E-011.21E+001.02E+019.09E-038.17E-027.17E-016.31E+00 + 21K1 150.006.54E-035.76E-024.25E-012.99E+005.16E-033.86E-022.81E-012.05E+00 + 21K1 200.002.70E-031.89E-021.12E-016.29E-012.53E-031.51E-028.70E-025.03E-01 + 21K1 300.008.09E-044.11E-031.80E-027.53E-029.61E-044.24E-031.80E-027.62E-02 + 21K1 450.002.63E-049.89E-043.28E-031.04E-023.82E-041.29E-034.15E-031.32E-02 + 21K1 650.001.06E-043.10E-048.17E-042.07E-031.73E-044.71E-041.22E-033.09E-03 + 21K11000.004.23E-059.70E-052.04E-044.14E-047.25E-051.59E-043.30E-046.71E-04 + 21K12000.001.32E-052.25E-053.60E-055.62E-052.07E-053.46E-055.53E-058.62E-05 + 21K16000.003.28E-064.11E-065.09E-066.23E-064.02E-065.07E-066.29E-067.70E-06 + 21L1 15.005.57E-012.49E+018.57E+022.60E+042.52E-011.95E+011.23E+037.57E+04 + 21L1 17.003.92E-011.65E+015.42E+021.61E+041.75E-011.17E+016.54E+023.59E+04 + 21L1 20.002.47E-019.49E+002.90E+028.20E+031.09E-016.06E+002.90E+021.37E+04 + 21L1 25.001.30E-014.35E+001.18E+023.00E+035.73E-022.48E+009.61E+013.69E+03 + 21L1 32.006.27E-021.79E+004.14E+019.12E+022.84E-029.43E-012.88E+018.79E+02 + 21L1 40.003.23E-027.84E-011.56E+012.96E+021.52E-024.00E-019.88E+002.45E+02 + 21L1 50.001.65E-023.39E-015.75E+009.29E+018.19E-031.72E-013.45E+006.93E+01 + 21L1 65.007.39E-031.25E-011.74E+002.31E+014.01E-036.51E-021.02E+001.61E+01 + 21L1 80.003.90E-035.60E-026.65E-017.53E+002.30E-033.07E-023.98E-015.20E+00 + 21L1 100.001.96E-032.36E-022.36E-012.24E+001.28E-031.39E-021.48E-011.58E+00 + 21L1 120.001.11E-031.16E-021.01E-018.32E-017.98E-047.38E-036.68E-026.07E-01 + 21L1 150.005.60E-044.88E-033.57E-022.48E-014.53E-043.46E-032.58E-021.93E-01 + 21L1 200.002.33E-041.61E-039.48E-035.29E-022.22E-041.34E-037.89E-034.65E-02 + 21L1 300.007.00E-053.55E-041.55E-036.43E-038.42E-053.75E-041.61E-036.92E-03 + 21L1 450.002.28E-058.58E-052.83E-048.98E-043.35E-051.14E-043.69E-041.19E-03 + 21L1 650.009.19E-062.70E-057.11E-051.80E-041.51E-054.14E-051.07E-042.74E-04 + 21L11000.003.68E-068.46E-061.78E-053.62E-056.34E-061.40E-052.91E-055.94E-05 + 21L12000.001.15E-061.96E-063.15E-064.92E-061.81E-063.03E-064.85E-067.58E-06 + 21L2 15.004.62E-021.62E+013.20E+033.98E+051.31E-021.76E+001.74E+021.51E+04 + 21L2 17.002.88E-028.58E+001.49E+031.65E+058.76E-031.04E+009.25E+017.18E+03 + 21L2 20.001.56E-023.76E+005.52E+025.27E+045.20E-035.29E-014.05E+012.72E+03 + 21L2 25.006.63E-031.21E+001.41E+021.10E+042.54E-032.08E-011.30E+017.14E+02 + 21L2 32.002.56E-033.48E-013.14E+011.94E+031.15E-037.41E-023.69E+001.62E+02 + 21L2 40.001.07E-031.12E-018.10E+004.05E+025.59E-042.91E-021.18E+004.24E+01 + 21L2 50.004.50E-043.65E-022.10E+008.51E+012.72E-041.14E-023.79E-011.11E+01 + 21L2 65.001.61E-049.76E-034.31E-011.37E+011.16E-043.83E-039.97E-022.31E+00 + 21L2 80.007.15E-053.46E-031.25E-013.27E+005.96E-051.61E-033.48E-026.70E-01 + 21L2 100.003.00E-051.14E-033.31E-027.08E-012.90E-056.39E-041.13E-021.78E-01 + 21L2 120.001.48E-054.67E-041.13E-022.06E-011.61E-053.02E-044.54E-036.11E-02 + 21L2 150.006.26E-061.58E-043.10E-034.61E-027.90E-061.21E-041.50E-031.67E-02 + 21L2 200.002.11E-064.00E-056.03E-046.98E-033.16E-063.77E-053.68E-043.21E-03 + 21L2 300.004.74E-076.14E-066.46E-055.34E-048.82E-077.56E-065.32E-053.37E-04 + 21L2 450.001.15E-071.04E-067.78E-064.70E-052.52E-071.59E-068.31E-063.91E-05 + 21L2 650.003.45E-082.29E-071.29E-066.00E-068.37E-084.10E-071.67E-066.19E-06 + 21L21000.009.48E-094.53E-081.88E-076.63E-072.40E-089.05E-082.88E-078.32E-07 + 21L22000.001.58E-094.80E-091.30E-083.19E-083.72E-099.84E-092.26E-084.80E-08 + 21L3 15.008.69E-022.97E+015.77E+037.14E+055.75E-033.63E+009.54E+021.30E+05 + 21L3 17.005.41E-021.56E+012.67E+032.94E+053.88E-031.97E+004.45E+025.37E+04 + 21L3 20.002.91E-026.80E+009.79E+029.27E+042.33E-038.94E-011.66E+021.72E+04 + 21L3 25.001.24E-022.17E+002.47E+021.90E+041.15E-033.04E-014.34E+013.62E+03 + 21L3 32.004.74E-036.10E-015.36E+013.26E+035.30E-049.28E-021.00E+016.58E+02 + 21L3 40.001.98E-031.94E-011.35E+016.64E+022.62E-043.21E-022.69E+001.43E+02 + 21L3 50.008.27E-046.16E-023.39E+001.35E+021.29E-041.12E-027.35E-013.16E+01 + 21L3 65.002.95E-041.60E-026.70E-012.08E+015.65E-053.28E-031.63E-015.46E+00 + 21L3 80.001.30E-045.53E-031.86E-014.75E+002.94E-051.26E-035.00E-021.38E+00 + 21L3 100.005.45E-051.77E-034.73E-029.75E-011.46E-054.53E-041.43E-023.22E-01 + 21L3 120.002.69E-057.04E-041.55E-022.69E-018.26E-061.99E-045.18E-039.91E-02 + 21L3 150.001.14E-052.29E-043.99E-035.62E-024.14E-067.33E-051.52E-032.39E-02 + 21L3 200.003.88E-065.52E-057.09E-047.62E-031.72E-062.08E-053.23E-043.96E-03 + 21L3 300.009.03E-077.90E-066.59E-054.87E-045.19E-073.72E-063.86E-053.39E-04 + 21L3 450.002.34E-071.26E-066.87E-063.52E-051.65E-077.24E-075.01E-063.21E-05 + 21L3 650.007.70E-082.76E-071.03E-063.83E-066.27E-081.83E-078.63E-074.20E-06 + 21L31000.002.46E-085.77E-081.44E-073.77E-072.23E-084.33E-081.29E-074.51E-07 + 21L32000.005.54E-098.00E-091.21E-081.96E-085.41E-096.90E-091.06E-082.04E-08 + 22K1 15.008.07E+003.59E+021.27E+044.34E+053.45E+002.13E+029.41E+033.94E+05 + 22K1 17.005.62E+002.37E+027.98E+032.60E+052.39E+001.30E+025.38E+032.12E+05 + 22K1 20.003.50E+001.35E+024.22E+031.27E+051.49E+006.93E+012.58E+039.30E+04 + 22K1 25.001.81E+006.12E+011.69E+034.48E+047.79E-012.93E+019.33E+022.91E+04 + 22K1 32.008.63E-012.48E+015.83E+021.32E+043.85E-011.14E+013.02E+027.86E+03 + 22K1 40.004.39E-011.08E+012.17E+024.19E+032.05E-014.94E+001.09E+022.38E+03 + 22K1 50.002.22E-014.60E+007.87E+011.29E+031.11E-012.16E+003.95E+017.23E+02 + 22K1 65.009.87E-021.68E+002.35E+013.15E+025.40E-028.30E-011.22E+011.79E+02 + 22K1 80.005.18E-027.47E-018.91E+001.02E+023.09E-023.95E-014.85E+005.98E+01 + 22K1 100.002.59E-023.13E-013.13E+002.99E+011.72E-021.80E-011.83E+001.87E+01 + 22K1 120.001.47E-021.53E-011.33E+001.10E+011.07E-029.61E-028.39E-017.34E+00 + 22K1 150.007.36E-036.42E-024.69E-013.26E+006.06E-034.52E-023.28E-012.39E+00 + 22K1 200.003.05E-032.11E-021.24E-016.93E-012.96E-031.76E-021.01E-015.85E-01 + 22K1 300.009.16E-044.63E-032.02E-028.37E-021.12E-034.95E-032.10E-028.85E-02 + 22K1 450.002.99E-041.12E-033.69E-031.17E-024.44E-041.50E-034.82E-031.53E-02 + 22K1 650.001.20E-043.52E-049.26E-042.34E-032.01E-045.48E-041.41E-033.58E-03 + 22K11000.004.82E-051.11E-042.32E-044.71E-048.38E-051.85E-043.84E-047.80E-04 + 22K12000.001.51E-052.57E-054.12E-056.45E-052.38E-054.00E-056.40E-059.99E-05 + 22K16000.003.72E-064.68E-065.81E-067.13E-064.57E-065.80E-067.21E-068.85E-06 + 22L1 15.006.10E-012.59E+018.26E+022.25E+043.10E-012.45E+011.54E+039.42E+04 + 22L1 17.004.30E-011.73E+015.33E+021.46E+042.15E-011.46E+018.17E+024.46E+04 + 22L1 20.002.72E-011.00E+012.91E+027.72E+031.34E-017.55E+003.61E+021.70E+04 + 22L1 25.001.44E-014.66E+001.21E+022.93E+037.02E-023.08E+001.19E+024.55E+03 + 22L1 32.006.99E-021.93E+004.34E+019.21E+023.47E-021.16E+003.55E+011.08E+03 + 22L1 40.003.61E-028.57E-011.66E+013.05E+021.85E-024.91E-011.21E+012.99E+02 + 22L1 50.001.85E-023.73E-016.18E+009.75E+019.95E-032.10E-014.21E+008.45E+01 + 22L1 65.008.34E-031.38E-011.89E+002.46E+014.85E-037.92E-021.24E+001.96E+01 + 22L1 80.004.42E-036.25E-027.30E-018.12E+002.78E-033.72E-024.82E-016.29E+00 + 22L1 100.002.23E-032.64E-022.60E-012.44E+001.54E-031.68E-021.78E-011.90E+00 + 22L1 120.001.27E-031.31E-021.12E-019.13E-019.59E-048.89E-038.03E-027.29E-01 + 22L1 150.006.40E-045.52E-033.99E-022.74E-015.42E-044.15E-033.10E-022.32E-01 + 22L1 200.002.67E-041.83E-031.07E-025.91E-022.65E-041.61E-039.44E-035.55E-02 + 22L1 300.008.06E-054.05E-041.76E-037.25E-031.00E-044.48E-041.92E-038.24E-03 + 22L1 450.002.64E-059.87E-053.25E-041.02E-033.97E-051.35E-044.38E-041.41E-03 + 22L1 650.001.06E-053.12E-058.19E-052.07E-041.79E-054.90E-051.27E-043.25E-04 + 22L11000.004.27E-069.82E-062.06E-054.19E-057.45E-061.65E-053.44E-057.03E-05 + 22L12000.001.34E-062.28E-063.67E-065.74E-062.11E-063.56E-065.72E-068.95E-06 + 22L2 15.005.63E-022.05E+014.07E+035.03E+051.67E-022.25E+002.21E+021.90E+04 + 22L2 17.003.53E-021.09E+011.90E+032.09E+051.12E-021.34E+001.17E+029.02E+03 + 22L2 20.001.91E-024.77E+007.04E+026.68E+046.68E-036.78E-015.14E+013.43E+03 + 22L2 25.008.19E-031.54E+001.81E+021.40E+043.27E-032.67E-011.66E+019.03E+02 + 22L2 32.003.18E-034.43E-014.02E+012.47E+031.48E-039.53E-024.71E+002.06E+02 + 22L2 40.001.34E-031.44E-011.04E+015.18E+027.21E-043.75E-021.51E+005.41E+01 + 22L2 50.005.64E-044.66E-022.69E+001.09E+023.51E-041.48E-024.86E-011.42E+01 + 22L2 65.002.03E-041.25E-025.56E-011.76E+011.51E-044.95E-031.28E-012.96E+00 + 22L2 80.009.04E-054.44E-031.61E-014.21E+007.73E-052.09E-034.50E-028.61E-01 + 22L2 100.003.80E-051.47E-034.28E-029.14E-013.77E-058.30E-041.46E-022.30E-01 + 22L2 120.001.88E-056.02E-041.47E-022.66E-012.10E-053.92E-045.89E-037.89E-02 + 22L2 150.007.99E-062.04E-044.03E-035.98E-021.03E-051.58E-041.95E-032.16E-02 + 22L2 200.002.70E-065.18E-057.84E-049.07E-034.13E-064.93E-054.79E-044.17E-03 + 22L2 300.006.10E-077.98E-068.43E-056.97E-041.15E-069.90E-066.96E-054.39E-04 + 22L2 450.001.49E-071.35E-061.02E-056.15E-053.32E-072.09E-061.09E-055.12E-05 + 22L2 650.004.47E-083.00E-071.69E-067.88E-061.10E-075.39E-072.20E-068.13E-06 + 22L21000.001.23E-085.93E-082.47E-078.72E-073.16E-081.19E-073.79E-071.10E-06 + 22L22000.002.05E-096.28E-091.72E-084.20E-084.88E-091.30E-082.99E-086.34E-08 + 22L3 15.001.06E-013.74E+017.31E+038.97E+057.24E-034.94E+001.33E+031.81E+05 + 22L3 17.006.60E-021.97E+013.38E+033.70E+054.89E-032.68E+006.17E+027.45E+04 + 22L3 20.003.57E-028.59E+001.24E+031.17E+052.94E-031.21E+002.30E+022.37E+04 + 22L3 25.001.52E-022.74E+003.13E+022.40E+041.46E-034.10E-015.98E+014.98E+03 + 22L3 32.005.87E-037.73E-016.82E+014.14E+036.71E-041.25E-011.37E+019.01E+02 + 22L3 40.002.46E-032.46E-011.72E+018.44E+023.32E-044.31E-023.68E+001.95E+02 + 22L3 50.001.03E-037.83E-024.33E+001.72E+021.64E-041.50E-029.99E-014.29E+01 + 22L3 65.003.69E-042.04E-028.58E-012.66E+017.18E-054.38E-032.20E-017.39E+00 + 22L3 80.001.64E-047.06E-032.39E-016.07E+003.74E-051.67E-036.74E-021.87E+00 + 22L3 100.006.87E-052.27E-036.06E-021.25E+001.86E-056.01E-041.92E-024.33E-01 + 22L3 120.003.39E-059.01E-041.99E-023.45E-011.05E-052.63E-046.95E-031.33E-01 + 22L3 150.001.45E-052.94E-045.13E-037.21E-025.29E-069.68E-052.04E-033.20E-02 + 22L3 200.004.93E-067.08E-059.12E-049.80E-032.21E-062.73E-054.31E-045.29E-03 + 22L3 300.001.15E-061.01E-058.50E-056.28E-046.64E-074.86E-065.11E-054.50E-04 + 22L3 450.002.99E-071.63E-068.87E-064.55E-052.12E-079.41E-076.59E-064.24E-05 + 22L3 650.009.85E-083.55E-071.33E-064.95E-068.03E-082.36E-071.13E-065.54E-06 + 22L31000.003.14E-087.42E-081.86E-074.88E-072.85E-085.58E-081.68E-075.93E-07 + 22L32000.007.08E-091.02E-081.55E-082.53E-086.92E-098.84E-091.37E-082.65E-08 + 23K1 15.008.74E+003.67E+021.21E+043.88E+054.14E+002.55E+021.08E+044.25E+05 + 23K1 17.006.10E+002.44E+027.78E+032.40E+052.86E+001.56E+026.19E+032.33E+05 + 23K1 20.003.80E+001.41E+024.21E+031.21E+051.78E+008.28E+012.99E+031.04E+05 + 23K1 25.001.97E+006.46E+011.72E+034.39E+049.31E-013.49E+011.09E+033.29E+04 + 23K1 32.009.46E-012.65E+016.04E+021.33E+044.59E-011.36E+013.52E+028.99E+03 + 23K1 40.004.83E-011.16E+012.27E+024.29E+032.44E-015.86E+001.27E+022.74E+03 + 23K1 50.002.45E-014.98E+008.34E+011.34E+031.31E-012.55E+004.62E+018.35E+02 + 23K1 65.001.09E-011.83E+002.51E+013.31E+026.38E-029.79E-011.42E+012.07E+02 + 23K1 80.005.76E-028.18E-019.61E+001.08E+023.65E-024.64E-015.67E+006.93E+01 + 23K1 100.002.88E-023.44E-013.40E+003.21E+012.02E-022.11E-012.14E+002.17E+01 + 23K1 120.001.64E-021.69E-011.45E+001.19E+011.26E-021.13E-019.77E-018.51E+00 + 23K1 150.008.23E-037.11E-025.14E-013.54E+007.09E-035.29E-023.82E-012.77E+00 + 23K1 200.003.42E-032.35E-021.37E-017.58E-013.46E-032.05E-021.18E-016.77E-01 + 23K1 300.001.03E-035.18E-032.24E-029.24E-021.30E-035.75E-032.43E-021.02E-01 + 23K1 450.003.37E-041.26E-034.13E-031.30E-025.14E-041.74E-035.59E-031.77E-02 + 23K1 650.001.36E-043.98E-041.04E-032.63E-032.31E-046.34E-041.63E-034.14E-03 + 23K11000.005.46E-051.25E-042.63E-045.33E-049.63E-052.13E-044.43E-049.00E-04 + 23K12000.001.71E-052.92E-054.70E-057.35E-052.71E-054.59E-057.37E-051.15E-04 + 23K16000.004.19E-065.29E-066.59E-068.11E-065.17E-066.59E-068.22E-061.01E-05 + 23L1 15.006.63E-012.66E+017.84E+021.89E+043.78E-013.05E+011.91E+031.16E+05 + 23L1 17.004.70E-011.79E+015.17E+021.28E+042.62E-011.82E+011.01E+035.49E+04 + 23L1 20.002.98E-011.05E+012.89E+027.12E+031.63E-019.34E+004.46E+022.08E+04 + 23L1 25.001.58E-014.94E+001.23E+022.83E+038.53E-023.79E+001.46E+025.57E+03 + 23L1 32.007.74E-022.08E+004.50E+019.18E+024.20E-021.43E+004.34E+011.32E+03 + 23L1 40.004.01E-029.28E-011.75E+013.12E+022.24E-025.98E-011.48E+013.64E+02 + 23L1 50.002.06E-024.08E-016.59E+001.01E+021.20E-022.55E-015.10E+001.02E+02 + 23L1 65.009.35E-031.52E-012.04E+002.60E+015.83E-039.56E-021.50E+002.36E+01 + 23L1 80.004.97E-036.91E-027.94E-018.69E+003.33E-034.48E-025.80E-017.55E+00 + 23L1 100.002.51E-032.94E-022.86E-012.64E+001.84E-032.01E-022.13E-012.27E+00 + 23L1 120.001.44E-031.46E-021.23E-019.93E-011.14E-031.06E-029.60E-028.70E-01 + 23L1 150.007.25E-046.19E-034.42E-023.01E-016.46E-044.95E-033.69E-022.76E-01 + 23L1 200.003.03E-042.07E-031.19E-026.54E-023.14E-041.91E-031.12E-026.59E-02 + 23L1 300.009.21E-054.60E-041.98E-038.12E-031.18E-045.30E-042.28E-039.74E-03 + 23L1 450.003.03E-051.13E-043.69E-041.16E-034.67E-051.59E-045.17E-041.66E-03 + 23L1 650.001.22E-053.58E-059.37E-052.37E-042.09E-055.77E-051.50E-043.83E-04 + 23L11000.004.92E-061.13E-052.37E-054.82E-058.70E-061.94E-054.05E-058.26E-05 + 23L12000.001.54E-062.63E-064.25E-066.65E-062.45E-064.16E-066.69E-061.05E-05 + 23L2 15.006.79E-022.56E+015.11E+036.26E+052.12E-022.84E+002.76E+022.34E+04 + 23L2 17.004.27E-021.36E+012.38E+032.61E+051.42E-021.69E+001.47E+021.12E+04 + 23L2 20.002.32E-025.98E+008.86E+028.36E+048.46E-038.57E-016.45E+014.26E+03 + 23L2 25.001.00E-021.94E+002.28E+021.75E+044.15E-033.39E-012.08E+011.13E+03 + 23L2 32.003.90E-035.57E-015.09E+013.11E+031.88E-031.21E-015.95E+002.58E+02 + 23L2 40.001.65E-031.81E-011.32E+016.53E+029.19E-044.77E-021.92E+006.80E+01 + 23L2 50.006.98E-045.89E-023.42E+001.38E+024.49E-041.88E-026.17E-011.79E+01 + 23L2 65.002.52E-041.58E-027.07E-012.24E+011.93E-046.32E-031.63E-013.75E+00 + 23L2 80.001.13E-045.64E-032.05E-015.35E+009.90E-052.67E-035.73E-021.09E+00 + 23L2 100.004.76E-051.87E-035.46E-021.16E+004.84E-051.06E-031.87E-022.93E-01 + 23L2 120.002.36E-057.67E-041.88E-023.39E-012.70E-055.03E-047.54E-031.01E-01 + 23L2 150.001.01E-052.60E-045.16E-037.65E-021.32E-052.03E-042.50E-032.76E-02 + 23L2 200.003.41E-066.62E-051.01E-031.16E-025.32E-066.35E-056.16E-045.35E-03 + 23L2 300.007.75E-071.02E-051.09E-048.97E-041.49E-061.28E-058.98E-055.66E-04 + 23L2 450.001.89E-071.74E-061.32E-057.94E-054.29E-072.71E-061.41E-056.62E-05 + 23L2 650.005.72E-083.86E-072.19E-061.02E-051.43E-077.00E-072.86E-061.05E-05 + 23L21000.001.57E-087.66E-083.20E-071.13E-064.10E-081.55E-074.93E-071.42E-06 + 23L22000.002.62E-098.10E-092.23E-085.46E-086.31E-091.69E-083.90E-088.26E-08 + 23L3 15.001.27E-014.66E+019.14E+031.11E+069.01E-036.61E+001.83E+032.48E+05 + 23L3 17.007.95E-022.46E+014.23E+034.60E+056.09E-033.58E+008.46E+021.02E+05 + 23L3 20.004.31E-021.07E+011.56E+031.46E+053.66E-031.62E+003.14E+023.23E+04 + 23L3 25.001.85E-023.42E+003.93E+022.99E+041.82E-035.47E-018.12E+016.76E+03 + 23L3 32.007.16E-039.67E-018.58E+015.18E+038.38E-041.66E-011.85E+011.22E+03 + 23L3 40.003.02E-033.08E-012.16E+011.06E+034.16E-045.70E-024.95E+002.63E+02 + 23L3 50.001.27E-039.83E-025.46E+002.16E+022.06E-041.98E-021.34E+005.76E+01 + 23L3 65.004.56E-042.57E-021.08E+003.35E+019.02E-055.76E-032.94E-019.87E+00 + 23L3 80.002.03E-048.90E-033.02E-017.66E+004.70E-052.19E-038.96E-022.49E+00 + 23L3 100.008.55E-052.86E-037.68E-021.58E+002.34E-057.86E-042.54E-025.75E-01 + 23L3 120.004.23E-051.14E-032.52E-024.37E-011.33E-053.43E-049.19E-031.76E-01 + 23L3 150.001.81E-053.72E-046.51E-039.14E-026.68E-061.26E-042.69E-034.23E-02 + 23L3 200.006.18E-068.97E-051.16E-031.24E-022.79E-063.54E-055.66E-046.97E-03 + 23L3 300.001.45E-061.29E-051.08E-047.99E-048.40E-076.27E-066.69E-055.91E-04 + 23L3 450.003.76E-072.07E-061.13E-055.79E-052.68E-071.21E-068.60E-065.56E-05 + 23L3 650.001.24E-074.51E-071.70E-066.31E-061.02E-073.02E-071.47E-067.22E-06 + 23L31000.003.97E-089.41E-082.36E-076.22E-073.60E-087.10E-082.17E-077.69E-07 + 23L32000.008.93E-091.30E-081.97E-083.22E-088.72E-091.12E-081.74E-083.40E-08 + 24K1 15.009.40E+003.71E+021.14E+043.38E+054.93E+003.03E+021.21E+044.49E+05 + 24K1 17.006.58E+002.50E+027.47E+032.16E+053.41E+001.85E+027.03E+032.51E+05 + 24K1 20.004.12E+001.46E+024.13E+031.13E+052.12E+009.83E+013.42E+031.14E+05 + 24K1 25.002.15E+006.77E+011.73E+034.25E+041.11E+004.14E+011.25E+033.68E+04 + 24K1 32.001.03E+002.80E+016.20E+021.32E+045.44E-011.61E+014.08E+021.02E+04 + 24K1 40.005.28E-011.24E+012.36E+024.35E+032.88E-016.91E+001.48E+023.13E+03 + 24K1 50.002.69E-015.36E+008.78E+011.38E+031.54E-013.00E+005.37E+019.56E+02 + 24K1 65.001.20E-011.98E+002.67E+013.46E+027.50E-021.15E+001.65E+012.38E+02 + 24K1 80.006.36E-028.90E-011.03E+011.14E+024.27E-025.43E-016.58E+007.98E+01 + 24K1 100.003.19E-023.76E-013.67E+003.42E+012.36E-022.47E-012.48E+002.50E+01 + 24K1 120.001.82E-021.85E-011.57E+001.27E+011.47E-021.31E-011.13E+009.81E+00 + 24K1 150.009.15E-037.83E-025.61E-013.82E+008.26E-036.15E-024.42E-013.19E+00 + 24K1 200.003.81E-032.60E-021.50E-018.23E-014.01E-032.38E-021.36E-017.80E-01 + 24K1 300.001.15E-035.76E-032.47E-021.01E-011.51E-036.65E-032.81E-021.18E-01 + 24K1 450.003.79E-041.41E-034.59E-031.44E-025.93E-042.01E-036.44E-032.04E-02 + 24K1 650.001.53E-044.47E-041.17E-032.94E-032.66E-047.29E-041.88E-034.76E-03 + 24K11000.006.15E-051.42E-042.96E-046.00E-041.10E-042.45E-045.09E-041.03E-03 + 24K12000.001.92E-053.30E-055.32E-058.33E-053.08E-055.24E-058.43E-051.32E-04 + 24K16000.004.70E-065.96E-067.45E-069.19E-065.81E-067.45E-069.33E-061.15E-05 + 24L1 15.007.17E-012.71E+017.30E+021.51E+044.58E-013.77E+012.36E+031.42E+05 + 24L1 17.005.09E-011.84E+014.93E+021.09E+043.17E-012.24E+011.24E+036.70E+04 + 24L1 20.003.24E-011.10E+012.82E+026.40E+031.97E-011.15E+015.46E+022.54E+04 + 24L1 25.001.73E-015.21E+001.23E+022.68E+031.03E-014.64E+001.79E+026.77E+03 + 24L1 32.008.51E-022.21E+004.62E+019.03E+025.06E-021.73E+005.28E+011.59E+03 + 24L1 40.004.43E-029.98E-011.82E+013.14E+022.69E-027.25E-011.79E+014.38E+02 + 24L1 50.002.29E-024.42E-016.96E+001.04E+021.44E-023.08E-016.15E+001.23E+02 + 24L1 65.001.04E-021.66E-012.18E+002.72E+016.97E-031.15E-011.80E+002.82E+01 + 24L1 80.005.55E-037.60E-028.57E-019.20E+003.97E-035.36E-026.93E-019.01E+00 + 24L1 100.002.81E-033.25E-023.11E-012.83E+002.19E-032.40E-022.54E-012.71E+00 + 24L1 120.001.61E-031.62E-021.35E-011.07E+001.36E-031.26E-021.14E-011.03E+00 + 24L1 150.008.17E-046.90E-034.87E-023.27E-017.64E-045.87E-034.37E-023.27E-01 + 24L1 200.003.43E-042.32E-031.32E-027.18E-023.71E-042.25E-031.32E-027.77E-02 + 24L1 300.001.05E-045.19E-042.22E-039.03E-031.39E-046.23E-042.68E-031.14E-02 + 24L1 450.003.45E-051.28E-044.16E-041.30E-035.46E-051.87E-046.06E-041.94E-03 + 24L1 650.001.40E-054.08E-051.06E-042.68E-042.45E-056.76E-051.76E-044.49E-04 + 24L11000.005.62E-061.29E-052.72E-055.51E-051.01E-052.26E-054.73E-059.66E-05 + 24L12000.001.76E-063.02E-064.88E-067.66E-062.82E-064.82E-067.78E-061.22E-05 + 24L2 15.008.11E-023.17E+016.34E+037.71E+052.65E-023.54E+003.40E+022.86E+04 + 24L2 17.005.11E-021.69E+012.96E+033.22E+051.78E-022.11E+001.81E+021.37E+04 + 24L2 20.002.79E-027.42E+001.10E+031.03E+051.06E-021.07E+007.99E+015.22E+03 + 24L2 25.001.21E-022.41E+002.84E+022.17E+045.21E-034.24E-012.59E+011.39E+03 + 24L2 32.004.73E-036.94E-016.36E+013.87E+032.37E-031.52E-017.42E+003.19E+02 + 24L2 40.002.02E-032.26E-011.65E+018.15E+021.16E-036.00E-022.39E+008.44E+01 + 24L2 50.008.55E-047.37E-024.29E+001.72E+025.67E-042.37E-027.74E-012.23E+01 + 24L2 65.003.11E-041.99E-028.89E-012.80E+012.44E-047.99E-032.05E-014.69E+00 + 24L2 80.001.39E-047.08E-032.58E-016.72E+001.26E-043.38E-037.22E-021.37E+00 + 24L2 100.005.90E-052.36E-036.90E-021.47E+006.14E-051.35E-032.36E-023.68E-01 + 24L2 120.002.93E-059.66E-042.37E-024.28E-013.43E-056.39E-049.54E-031.27E-01 + 24L2 150.001.25E-053.29E-046.53E-039.68E-021.69E-052.58E-043.17E-033.49E-02 + 24L2 200.004.26E-068.38E-051.28E-031.48E-026.79E-068.10E-057.83E-046.78E-03 + 24L2 300.009.74E-071.30E-051.38E-041.14E-031.91E-061.64E-051.15E-047.20E-04 + 24L2 450.002.39E-072.22E-061.68E-051.01E-045.50E-073.47E-061.81E-058.46E-05 + 24L2 650.007.23E-084.93E-072.81E-061.31E-051.83E-079.00E-073.67E-061.35E-05 + 24L21000.001.99E-089.78E-084.10E-071.45E-065.26E-082.00E-076.35E-071.83E-06 + 24L22000.003.32E-091.03E-082.86E-087.02E-088.09E-092.17E-085.02E-081.07E-07 + 24L3 15.001.51E-015.74E+011.13E+041.36E+061.11E-028.76E+002.48E+033.35E+05 + 24L3 17.009.49E-023.03E+015.24E+035.64E+057.51E-034.74E+001.14E+031.38E+05 + 24L3 20.005.16E-021.32E+011.93E+031.79E+054.52E-032.14E+004.23E+024.35E+04 + 24L3 25.002.22E-024.23E+004.88E+023.69E+042.25E-037.20E-011.09E+029.06E+03 + 24L3 32.008.66E-031.20E+001.07E+026.40E+031.04E-032.18E-012.48E+011.63E+03 + 24L3 40.003.67E-033.83E-012.69E+011.31E+035.15E-047.47E-026.58E+003.49E+02 + 24L3 50.001.55E-031.22E-016.81E+002.69E+022.55E-042.58E-021.77E+007.63E+01 + 24L3 65.005.58E-043.20E-021.35E+004.16E+011.12E-047.50E-033.87E-011.30E+01 + 24L3 80.002.49E-041.11E-023.77E-019.55E+005.85E-052.85E-031.18E-013.27E+00 + 24L3 100.001.05E-043.57E-039.61E-021.97E+002.92E-051.02E-033.33E-027.54E-01 + 24L3 120.005.22E-051.42E-033.16E-025.46E-011.66E-054.43E-041.20E-022.31E-01 + 24L3 150.002.24E-054.65E-048.17E-031.15E-018.34E-061.62E-043.50E-035.53E-02 + 24L3 200.007.66E-061.12E-041.46E-031.56E-023.48E-064.55E-057.36E-049.08E-03 + 24L3 300.001.80E-061.62E-051.36E-041.01E-031.05E-068.01E-068.65E-057.68E-04 + 24L3 450.004.69E-072.59E-061.42E-057.30E-053.35E-071.54E-061.11E-057.19E-05 + 24L3 650.001.55E-075.67E-072.14E-067.96E-061.27E-073.83E-071.88E-069.32E-06 + 24L31000.004.95E-081.18E-072.97E-077.84E-074.49E-088.93E-082.76E-079.88E-07 + 24L32000.001.11E-081.62E-082.47E-084.04E-081.09E-081.40E-082.19E-084.32E-08 + 25K1 15.001.01E+013.72E+021.06E+042.91E+055.84E+003.58E+021.36E+044.70E+05 + 25K1 17.007.07E+002.54E+027.12E+031.93E+054.04E+002.19E+027.95E+032.68E+05 + 25K1 20.004.44E+001.50E+024.04E+031.05E+052.50E+001.16E+023.90E+031.24E+05 + 25K1 25.002.32E+007.06E+011.73E+034.09E+041.31E+004.88E+011.44E+034.09E+04 + 25K1 32.001.12E+002.96E+016.34E+021.31E+046.40E-011.89E+014.70E+021.15E+04 + 25K1 40.005.75E-011.31E+012.45E+024.39E+033.39E-018.10E+001.71E+023.55E+03 + 25K1 50.002.93E-015.74E+009.20E+011.42E+031.81E-013.52E+006.21E+011.09E+03 + 25K1 65.001.32E-012.13E+002.83E+013.60E+028.76E-021.34E+001.91E+012.72E+02 + 25K1 80.006.98E-029.64E-011.10E+011.20E+024.98E-026.33E-017.60E+009.14E+01 + 25K1 100.003.52E-024.09E-013.94E+003.62E+012.75E-022.87E-012.86E+002.86E+01 + 25K1 120.002.01E-022.02E-011.70E+001.36E+011.70E-021.52E-011.31E+001.12E+01 + 25K1 150.001.01E-028.58E-026.08E-014.10E+009.57E-037.12E-025.10E-013.66E+00 + 25K1 200.004.23E-032.86E-021.64E-018.91E-014.64E-032.75E-021.57E-018.94E-01 + 25K1 300.001.29E-036.37E-032.72E-021.11E-011.73E-037.65E-033.22E-021.35E-01 + 25K1 450.004.23E-041.56E-035.09E-031.59E-026.79E-042.30E-037.38E-032.34E-02 + 25K1 650.001.71E-044.99E-041.30E-033.27E-033.04E-048.35E-042.15E-035.45E-03 + 25K11000.006.90E-051.59E-043.32E-046.72E-041.25E-042.80E-045.82E-041.18E-03 + 25K12000.002.15E-053.71E-055.99E-059.39E-053.48E-055.95E-059.60E-051.50E-04 + 25K16000.005.25E-066.67E-068.36E-061.03E-056.50E-068.38E-061.05E-051.30E-05 + 25L1 15.007.71E-012.74E+016.70E+021.15E+045.50E-014.63E+012.89E+031.73E+05 + 25L1 17.005.49E-011.88E+014.64E+029.04E+033.81E-012.75E+011.52E+038.14E+04 + 25L1 20.003.51E-011.13E+012.74E+025.65E+032.36E-011.40E+016.66E+023.08E+04 + 25L1 25.001.88E-015.45E+001.23E+022.50E+031.23E-015.64E+002.17E+028.17E+03 + 25L1 32.009.29E-022.34E+004.71E+018.80E+026.05E-022.10E+006.37E+011.92E+03 + 25L1 40.004.86E-021.07E+001.89E+013.14E+023.20E-028.72E-012.15E+015.26E+02 + 25L1 50.002.52E-024.76E-017.31E+001.06E+021.71E-023.69E-017.36E+001.47E+02 + 25L1 65.001.15E-021.81E-012.32E+002.83E+018.26E-031.37E-012.14E+003.36E+01 + 25L1 80.006.16E-038.29E-029.19E-019.68E+004.70E-036.36E-028.23E-011.07E+01 + 25L1 100.003.13E-033.56E-023.36E-013.01E+002.58E-032.84E-023.01E-013.20E+00 + 25L1 120.001.80E-031.78E-021.47E-011.15E+001.60E-031.49E-021.35E-011.22E+00 + 25L1 150.009.14E-047.63E-035.33E-023.54E-018.98E-046.92E-035.15E-023.84E-01 + 25L1 200.003.85E-042.58E-031.46E-027.84E-024.35E-042.65E-031.55E-029.11E-02 + 25L1 300.001.18E-045.80E-042.46E-039.97E-031.62E-047.28E-043.12E-031.33E-02 + 25L1 450.003.90E-051.44E-044.66E-041.45E-036.35E-052.18E-047.06E-042.26E-03 + 25L1 650.001.58E-054.61E-051.20E-043.02E-042.83E-057.86E-052.04E-045.21E-04 + 25L11000.006.38E-061.47E-053.08E-056.25E-051.17E-052.62E-055.49E-051.12E-04 + 25L12000.001.99E-063.44E-065.57E-068.75E-063.23E-065.55E-068.98E-061.41E-05 + 25L2 15.009.56E-023.89E+017.80E+039.41E+053.28E-024.37E+004.16E+023.46E+04 + 25L2 17.006.04E-022.07E+013.65E+033.93E+052.21E-022.60E+002.22E+021.66E+04 + 25L2 20.003.31E-029.11E+001.36E+031.27E+051.32E-021.33E+009.81E+016.35E+03 + 25L2 25.001.44E-022.96E+003.51E+022.67E+046.47E-035.26E-013.19E+011.70E+03 + 25L2 32.005.69E-038.54E-017.84E+014.74E+032.95E-031.88E-019.11E+003.89E+02 + 25L2 40.002.43E-032.78E-012.04E+011.01E+031.44E-037.47E-022.96E+001.04E+02 + 25L2 50.001.03E-039.10E-025.32E+002.13E+027.07E-042.96E-029.59E-012.75E+01 + 25L2 65.003.78E-042.46E-021.10E+003.48E+013.06E-049.98E-032.55E-015.80E+00 + 25L2 80.001.70E-048.78E-033.21E-018.36E+001.57E-044.23E-039.00E-021.70E+00 + 25L2 100.007.22E-052.93E-038.61E-021.83E+007.71E-051.69E-032.95E-024.58E-01 + 25L2 120.003.60E-051.20E-032.97E-025.35E-014.31E-058.02E-041.19E-021.58E-01 + 25L2 150.001.54E-054.10E-048.18E-031.21E-012.12E-053.24E-043.98E-034.36E-02 + 25L2 200.005.27E-061.05E-041.60E-031.85E-028.56E-061.02E-049.84E-048.50E-03 + 25L2 300.001.21E-061.63E-051.74E-041.44E-032.41E-062.07E-051.44E-049.07E-04 + 25L2 450.002.98E-072.79E-062.12E-051.28E-046.96E-074.40E-062.28E-051.07E-04 + 25L2 650.009.03E-086.21E-073.55E-061.65E-052.32E-071.14E-064.65E-061.71E-05 + 25L21000.002.50E-081.23E-075.20E-071.84E-066.67E-082.54E-078.07E-072.33E-06 + 25L22000.004.16E-091.31E-083.62E-088.93E-081.02E-082.77E-086.40E-081.36E-07 + 25L3 15.001.77E-017.00E+011.38E+041.66E+061.35E-021.15E+013.32E+034.50E+05 + 25L3 17.001.12E-013.70E+016.42E+036.87E+059.15E-036.19E+001.53E+031.84E+05 + 25L3 20.006.10E-021.62E+012.36E+032.18E+055.51E-032.79E+005.64E+025.80E+04 + 25L3 25.002.64E-025.18E+005.99E+024.51E+042.75E-039.38E-011.45E+021.20E+04 + 25L3 32.001.03E-021.47E+001.31E+027.84E+031.27E-032.83E-013.27E+012.15E+03 + 25L3 40.004.39E-034.69E-013.32E+011.61E+036.30E-049.68E-028.66E+004.60E+02 + 25L3 50.001.86E-031.50E-018.39E+003.30E+023.13E-043.34E-022.33E+001.00E+02 + 25L3 65.006.74E-043.93E-021.67E+005.13E+011.38E-049.66E-035.05E-011.70E+01 + 25L3 80.003.02E-041.37E-024.67E-011.18E+017.19E-053.66E-031.53E-014.26E+00 + 25L3 100.001.28E-044.41E-031.19E-012.44E+003.59E-051.30E-034.32E-029.79E-01 + 25L3 120.006.36E-051.76E-033.92E-026.76E-012.04E-055.66E-041.55E-022.99E-01 + 25L3 150.002.73E-055.75E-041.01E-021.42E-011.03E-052.07E-044.52E-037.15E-02 + 25L3 200.009.38E-061.39E-041.81E-031.94E-024.29E-065.77E-059.45E-041.17E-02 + 25L3 300.002.21E-062.00E-051.69E-041.25E-031.30E-061.01E-051.11E-049.85E-04 + 25L3 450.005.78E-073.22E-061.77E-059.09E-054.14E-071.93E-061.41E-059.21E-05 + 25L3 650.001.91E-077.03E-072.66E-069.92E-061.57E-074.79E-072.39E-061.19E-05 + 25L31000.006.10E-081.46E-073.70E-079.77E-075.54E-081.11E-073.47E-071.25E-06 + 25L32000.001.37E-082.00E-083.06E-085.02E-081.34E-081.73E-082.72E-085.41E-08 + 26K1 15.001.08E+013.70E+029.65E+032.42E+056.89E+004.21E+021.50E+044.79E+05 + 26K1 17.007.56E+002.55E+026.68E+031.68E+054.76E+002.57E+028.87E+032.81E+05 + 26K1 20.004.76E+001.53E+023.89E+039.54E+042.95E+001.36E+024.39E+031.33E+05 + 26K1 25.002.50E+007.31E+011.71E+033.88E+041.53E+005.72E+011.63E+034.49E+04 + 26K1 32.001.21E+003.10E+016.42E+021.28E+047.50E-012.21E+015.38E+021.28E+04 + 26K1 40.006.24E-011.39E+012.52E+024.40E+033.96E-019.46E+001.96E+023.99E+03 + 26K1 50.003.19E-016.11E+009.57E+011.44E+032.11E-014.09E+007.14E+011.23E+03 + 26K1 65.001.44E-012.29E+002.98E+013.72E+021.02E-011.56E+002.20E+013.09E+02 + 26K1 80.007.64E-021.04E+001.16E+011.25E+025.79E-027.33E-018.74E+001.04E+02 + 26K1 100.003.86E-024.43E-014.20E+003.81E+013.18E-023.32E-013.29E+003.27E+01 + 26K1 120.002.20E-022.20E-011.82E+001.44E+011.97E-021.76E-011.50E+001.28E+01 + 26K1 150.001.11E-029.35E-026.55E-014.38E+001.10E-028.20E-025.85E-014.17E+00 + 26K1 200.004.67E-033.13E-021.78E-019.58E-015.33E-033.16E-021.80E-011.02E+00 + 26K1 300.001.42E-037.01E-032.98E-021.20E-011.99E-038.77E-033.69E-021.54E-01 + 26K1 450.004.71E-041.73E-035.61E-031.74E-027.75E-042.63E-038.42E-032.66E-02 + 26K1 650.001.91E-045.55E-041.44E-033.61E-033.45E-049.53E-042.45E-036.20E-03 + 26K11000.007.70E-051.77E-043.71E-047.50E-041.42E-043.18E-046.63E-041.35E-03 + 26K12000.002.40E-054.15E-056.72E-051.05E-043.91E-056.74E-051.09E-041.71E-04 + 26K16000.005.83E-067.44E-069.35E-061.16E-057.24E-069.39E-061.18E-051.47E-05 + 26L1 15.008.24E-012.75E+016.01E+028.21E+036.57E-015.65E+013.52E+032.09E+05 + 26L1 17.005.89E-011.91E+014.30E+027.13E+034.54E-013.34E+011.85E+039.81E+04 + 26L1 20.003.78E-011.16E+012.61E+024.84E+032.82E-011.70E+018.06E+023.70E+04 + 26L1 25.002.03E-015.66E+001.21E+022.29E+031.47E-016.81E+002.61E+029.80E+03 + 26L1 32.001.01E-012.46E+004.75E+018.45E+027.19E-022.52E+007.65E+012.29E+03 + 26L1 40.005.30E-021.13E+001.94E+013.11E+023.80E-021.04E+002.56E+016.26E+02 + 26L1 50.002.76E-025.09E-017.61E+001.08E+022.02E-024.39E-018.76E+001.74E+02 + 26L1 65.001.27E-021.95E-012.45E+002.92E+019.75E-031.62E-012.54E+003.97E+01 + 26L1 80.006.79E-038.99E-029.78E-011.01E+015.53E-037.52E-029.72E-011.26E+01 + 26L1 100.003.46E-033.89E-023.60E-013.18E+003.03E-033.35E-023.54E-013.76E+00 + 26L1 120.002.00E-031.95E-021.58E-011.22E+001.87E-031.76E-021.58E-011.43E+00 + 26L1 150.001.02E-038.40E-035.79E-023.80E-011.05E-038.11E-036.02E-024.49E-01 + 26L1 200.004.30E-042.85E-031.60E-028.50E-025.07E-043.09E-031.81E-021.06E-01 + 26L1 300.001.32E-046.46E-042.72E-031.09E-021.88E-048.47E-043.63E-031.55E-02 + 26L1 450.004.39E-051.61E-045.20E-041.61E-037.34E-052.52E-048.18E-042.62E-03 + 26L1 650.001.79E-055.19E-051.35E-043.38E-043.26E-059.08E-052.36E-046.03E-04 + 26L11000.007.21E-061.66E-053.49E-057.06E-051.34E-053.02E-056.33E-051.29E-04 + 26L12000.002.25E-063.90E-066.33E-069.95E-063.68E-066.36E-061.03E-051.62E-05 + 26L2 15.001.12E-014.72E+019.50E+031.14E+064.03E-025.35E+005.04E+024.13E+04 + 26L2 17.007.09E-022.51E+014.45E+034.76E+052.71E-023.19E+002.69E+021.99E+04 + 26L2 20.003.90E-021.11E+011.66E+031.53E+051.62E-021.63E+001.19E+027.64E+03 + 26L2 25.001.71E-023.61E+004.29E+023.24E+047.97E-036.46E-013.88E+012.05E+03 + 26L2 32.006.76E-031.04E+009.63E+015.81E+033.63E-032.32E-011.12E+014.75E+02 + 26L2 40.002.90E-033.41E-012.50E+011.23E+031.78E-039.21E-023.63E+001.26E+02 + 26L2 50.001.24E-031.12E-016.54E+002.62E+028.76E-043.65E-021.18E+003.36E+01 + 26L2 65.004.55E-043.02E-021.36E+004.28E+013.79E-041.24E-023.15E-017.12E+00 + 26L2 80.002.06E-041.08E-023.97E-011.03E+011.95E-045.25E-031.11E-012.09E+00 + 26L2 100.008.76E-053.61E-031.06E-012.26E+009.59E-052.10E-033.65E-025.65E-01 + 26L2 120.004.38E-051.49E-033.67E-026.61E-015.37E-059.98E-041.48E-021.96E-01 + 26L2 150.001.88E-055.07E-041.02E-021.50E-012.65E-054.04E-044.94E-035.40E-02 + 26L2 200.006.45E-061.30E-041.99E-032.30E-021.07E-051.27E-041.23E-031.06E-02 + 26L2 300.001.49E-062.03E-052.17E-041.79E-033.02E-062.59E-051.81E-041.13E-03 + 26L2 450.003.68E-073.47E-062.65E-051.60E-048.73E-075.52E-062.86E-051.34E-04 + 26L2 650.001.12E-077.76E-074.45E-062.07E-052.91E-071.44E-065.85E-062.15E-05 + 26L21000.003.10E-081.54E-076.54E-072.32E-068.39E-083.20E-071.02E-062.93E-06 + 26L22000.005.16E-091.63E-084.56E-081.13E-071.28E-083.49E-088.09E-081.72E-07 + 26L3 15.002.07E-018.47E+011.68E+041.99E+061.63E-021.48E+014.40E+035.95E+05 + 26L3 17.001.31E-014.48E+017.78E+038.25E+051.11E-028.00E+002.02E+032.43E+05 + 26L3 20.007.16E-021.96E+012.87E+032.63E+056.67E-033.60E+007.43E+027.63E+04 + 26L3 25.003.11E-026.28E+007.29E+025.44E+043.33E-031.21E+001.90E+021.58E+04 + 26L3 32.001.22E-021.78E+001.60E+029.49E+031.54E-033.64E-014.28E+012.80E+03 + 26L3 40.005.22E-035.70E-014.04E+011.95E+037.65E-041.24E-011.13E+015.98E+02 + 26L3 50.002.22E-031.83E-011.02E+014.02E+023.81E-044.27E-023.02E+001.30E+02 + 26L3 65.008.08E-044.80E-022.04E+006.26E+011.68E-041.23E-026.53E-012.20E+01 + 26L3 80.003.63E-041.67E-025.71E-011.44E+018.77E-054.65E-031.97E-015.49E+00 + 26L3 100.001.54E-045.39E-031.46E-012.98E+004.38E-051.65E-035.55E-021.26E+00 + 26L3 120.007.68E-052.15E-034.81E-028.28E-012.49E-057.17E-041.99E-023.84E-01 + 26L3 150.003.31E-057.05E-041.25E-021.74E-011.26E-052.61E-045.77E-039.15E-02 + 26L3 200.001.14E-051.71E-042.23E-032.38E-025.25E-067.26E-051.20E-031.49E-02 + 26L3 300.002.70E-062.46E-052.09E-041.54E-031.59E-061.27E-051.40E-041.25E-03 + 26L3 450.007.06E-073.96E-062.19E-051.12E-045.07E-072.41E-061.78E-051.17E-04 + 26L3 650.002.34E-078.65E-073.28E-061.23E-051.92E-075.93E-073.00E-061.50E-05 + 26L31000.007.46E-081.80E-074.56E-071.21E-066.78E-081.37E-074.34E-071.58E-06 + 26L32000.001.67E-082.45E-083.76E-086.18E-081.64E-082.12E-083.36E-086.73E-08 + 27K1 15.001.14E+013.63E+028.61E+031.95E+058.07E+004.92E+021.64E+044.80E+05 + 27K1 17.008.05E+002.55E+026.17E+031.43E+055.57E+003.01E+029.81E+032.90E+05 + 27K1 20.005.09E+001.55E+023.71E+038.55E+043.45E+001.59E+024.92E+031.42E+05 + 27K1 25.002.68E+007.53E+011.69E+033.64E+041.79E+006.67E+011.85E+034.89E+04 + 27K1 32.001.30E+003.23E+016.46E+021.25E+048.75E-012.57E+016.12E+021.42E+04 + 27K1 40.006.74E-011.46E+012.58E+024.37E+034.62E-011.10E+012.24E+024.47E+03 + 27K1 50.003.46E-016.48E+009.91E+011.46E+032.45E-014.75E+008.17E+011.39E+03 + 27K1 65.001.57E-012.44E+003.12E+013.82E+021.18E-011.80E+002.52E+013.50E+02 + 27K1 80.008.32E-021.11E+001.23E+011.30E+026.69E-028.46E-011.00E+011.18E+02 + 27K1 100.004.21E-024.77E-014.46E+003.99E+013.67E-023.82E-013.76E+003.71E+01 + 27K1 120.002.41E-022.38E-011.94E+001.52E+012.26E-022.02E-011.72E+001.46E+01 + 27K1 150.001.22E-021.01E-017.04E-014.65E+001.27E-029.41E-026.68E-014.74E+00 + 27K1 200.005.14E-033.42E-021.92E-011.03E+006.11E-033.62E-022.05E-011.16E+00 + 27K1 300.001.57E-037.69E-033.24E-021.30E-012.27E-031.00E-024.20E-021.75E-01 + 27K1 450.005.21E-041.91E-036.15E-031.90E-028.81E-043.00E-039.58E-033.02E-02 + 27K1 650.002.12E-046.15E-041.59E-033.98E-033.91E-041.08E-032.79E-037.04E-03 + 27K11000.008.55E-051.97E-044.12E-048.32E-041.60E-043.61E-047.52E-041.53E-03 + 27K12000.002.66E-054.62E-057.51E-051.18E-044.38E-057.60E-051.23E-041.93E-04 + 27K16000.006.44E-068.26E-061.04E-051.29E-058.02E-061.05E-051.32E-051.65E-05 + 27L1 15.008.77E-012.73E+015.27E+025.33E+037.80E-016.86E+014.26E+032.51E+05 + 27L1 17.006.28E-011.92E+013.91E+025.34E+035.39E-014.04E+012.23E+031.18E+05 + 27L1 20.004.05E-011.18E+012.46E+024.02E+033.34E-012.05E+019.70E+024.43E+04 + 27L1 25.002.19E-015.84E+001.18E+022.06E+031.74E-018.18E+003.13E+021.17E+04 + 27L1 32.001.09E-012.58E+004.76E+018.02E+028.49E-023.01E+009.13E+012.72E+03 + 27L1 40.005.76E-021.19E+001.97E+013.05E+024.48E-021.24E+003.05E+017.42E+02 + 27L1 50.003.01E-025.41E-017.87E+001.08E+022.38E-025.21E-011.04E+012.06E+02 + 27L1 65.001.39E-022.09E-012.57E+002.99E+011.14E-021.92E-013.00E+004.68E+01 + 27L1 80.007.46E-039.70E-021.03E+001.05E+016.47E-038.86E-021.14E+001.48E+01 + 27L1 100.003.82E-034.22E-023.84E-013.33E+003.55E-033.93E-024.15E-014.40E+00 + 27L1 120.002.20E-032.13E-021.70E-011.29E+002.19E-032.05E-021.85E-011.67E+00 + 27L1 150.001.13E-039.19E-036.26E-024.05E-011.22E-039.46E-037.02E-025.23E-01 + 27L1 200.004.77E-043.13E-031.74E-029.16E-025.88E-043.59E-032.10E-021.23E-01 + 27L1 300.001.47E-047.16E-042.99E-031.19E-022.18E-049.82E-044.21E-031.79E-02 + 27L1 450.004.92E-051.79E-045.76E-041.78E-038.43E-052.91E-049.42E-043.02E-03 + 27L1 650.002.01E-055.81E-051.51E-043.76E-043.74E-051.04E-042.71E-046.93E-04 + 27L11000.008.10E-061.87E-053.92E-057.93E-051.53E-053.46E-057.26E-051.48E-04 + 27L12000.002.52E-064.39E-067.15E-061.13E-054.17E-067.26E-061.18E-051.86E-05 + 27L2 15.001.30E-015.69E+011.15E+041.36E+064.91E-026.49E+006.05E+024.90E+04 + 27L2 17.008.25E-023.03E+015.38E+035.71E+053.30E-023.87E+003.24E+022.36E+04 + 27L2 20.004.56E-021.34E+012.01E+031.85E+051.98E-021.98E+001.44E+029.12E+03 + 27L2 25.002.00E-024.36E+005.20E+023.91E+049.74E-037.87E-014.69E+012.45E+03 + 27L2 32.007.97E-031.26E+001.17E+027.02E+034.45E-032.83E-011.36E+015.71E+02 + 27L2 40.003.44E-034.13E-013.05E+011.49E+032.19E-031.13E-014.41E+001.53E+02 + 27L2 50.001.48E-031.36E-017.98E+003.18E+021.07E-034.48E-021.44E+004.07E+01 + 27L2 65.005.44E-043.68E-021.66E+005.21E+014.66E-041.52E-023.85E-018.65E+00 + 27L2 80.002.46E-041.32E-024.85E-011.26E+012.41E-046.45E-031.36E-012.55E+00 + 27L2 100.001.05E-044.41E-031.31E-012.76E+001.18E-042.59E-034.48E-026.90E-01 + 27L2 120.005.28E-051.82E-034.51E-028.11E-016.64E-051.23E-031.82E-022.39E-01 + 27L2 150.002.28E-056.22E-041.25E-021.84E-013.28E-054.99E-046.09E-036.63E-02 + 27L2 200.007.83E-061.60E-042.46E-032.83E-021.33E-051.58E-041.51E-031.30E-02 + 27L2 300.001.81E-062.50E-052.69E-042.22E-033.75E-063.22E-052.24E-041.40E-03 + 27L2 450.004.50E-074.29E-063.29E-051.99E-041.09E-066.88E-063.56E-051.66E-04 + 27L2 650.001.37E-079.61E-075.53E-062.58E-053.63E-071.79E-067.29E-062.67E-05 + 27L21000.003.81E-081.92E-078.14E-072.89E-061.05E-074.00E-071.27E-063.66E-06 + 27L22000.006.35E-092.03E-085.68E-081.41E-071.60E-084.36E-081.01E-072.15E-07 + 27L3 15.002.39E-011.02E+022.02E+042.38E+061.96E-021.90E+015.79E+037.83E+05 + 27L3 17.001.51E-015.37E+019.38E+039.87E+051.33E-021.03E+012.66E+033.18E+05 + 27L3 20.008.32E-022.35E+013.46E+033.15E+058.00E-034.61E+009.72E+029.98E+04 + 27L3 25.003.63E-027.55E+008.80E+026.53E+043.99E-031.54E+002.47E+022.05E+04 + 27L3 32.001.43E-022.15E+001.93E+021.14E+041.85E-034.65E-015.54E+013.63E+03 + 27L3 40.006.15E-036.88E-014.89E+012.35E+039.21E-041.58E-011.46E+017.73E+02 + 27L3 50.002.62E-032.21E-011.24E+014.85E+024.59E-045.42E-023.88E+001.67E+02 + 27L3 65.009.58E-045.80E-022.48E+007.57E+012.02E-041.56E-028.37E-012.82E+01 + 27L3 80.004.32E-042.02E-026.94E-011.74E+011.06E-045.87E-032.52E-017.01E+00 + 27L3 100.001.84E-046.53E-031.77E-013.62E+005.30E-052.08E-037.06E-021.60E+00 + 27L3 120.009.19E-052.61E-035.85E-021.01E+003.02E-058.99E-042.53E-024.88E-01 + 27L3 150.003.96E-058.56E-041.52E-022.12E-011.52E-053.27E-047.31E-031.16E-01 + 27L3 200.001.37E-052.08E-042.72E-032.90E-026.37E-069.06E-051.52E-031.88E-02 + 27L3 300.003.26E-063.00E-052.55E-041.88E-031.93E-061.57E-051.76E-041.58E-03 + 27L3 450.008.54E-074.83E-062.67E-051.37E-046.15E-072.97E-062.23E-051.47E-04 + 27L3 650.002.83E-071.05E-064.01E-061.50E-052.33E-077.29E-073.74E-061.88E-05 + 27L31000.009.03E-082.19E-075.57E-071.48E-068.22E-081.67E-075.37E-071.97E-06 + 27L32000.002.02E-082.98E-084.58E-087.54E-081.98E-082.57E-084.10E-088.29E-08 + 28K1 15.001.21E+013.53E+027.51E+031.52E+059.41E+005.72E+021.76E+044.67E+05 + 28K1 17.008.55E+002.52E+025.60E+031.19E+056.50E+003.49E+021.07E+042.94E+05 + 28K1 20.005.41E+001.56E+023.50E+037.52E+044.02E+001.85E+025.45E+031.48E+05 + 28K1 25.002.86E+007.71E+011.64E+033.37E+042.09E+007.74E+012.07E+035.26E+04 + 28K1 32.001.40E+003.35E+016.46E+021.20E+041.02E+002.98E+016.92E+021.55E+04 + 28K1 40.007.25E-011.53E+012.62E+024.31E+035.35E-011.27E+012.54E+024.96E+03 + 28K1 50.003.73E-016.84E+001.02E+021.46E+032.84E-015.48E+009.29E+011.55E+03 + 28K1 65.001.69E-012.59E+003.25E+013.91E+021.36E-012.07E+002.87E+013.94E+02 + 28K1 80.009.03E-021.19E+001.29E+011.34E+027.71E-029.73E-011.14E+011.33E+02 + 28K1 100.004.58E-025.12E-014.72E+004.16E+014.22E-024.38E-014.29E+004.19E+01 + 28K1 120.002.63E-022.56E-012.07E+001.59E+012.60E-022.31E-011.95E+001.65E+01 + 28K1 150.001.34E-021.10E-017.52E-014.91E+001.45E-021.08E-017.60E-015.37E+00 + 28K1 200.005.63E-033.71E-022.06E-011.09E+006.97E-034.13E-022.33E-011.31E+00 + 28K1 300.001.73E-038.39E-033.51E-021.40E-012.58E-031.14E-024.76E-021.98E-01 + 28K1 450.005.75E-042.10E-036.72E-032.07E-029.99E-043.40E-031.09E-023.42E-02 + 28K1 650.002.35E-046.78E-041.75E-034.36E-034.42E-041.23E-033.15E-037.95E-03 + 28K11000.009.47E-052.18E-044.56E-049.20E-041.80E-044.07E-048.49E-041.72E-03 + 28K12000.002.94E-055.13E-058.35E-051.31E-044.89E-058.53E-051.39E-042.18E-04 + 28K16000.007.10E-069.13E-061.16E-051.44E-058.86E-061.16E-051.48E-051.84E-05 + 28L1 15.009.30E-012.69E+014.50E+023.07E+039.20E-018.27E+015.12E+032.99E+05 + 28L1 17.006.68E-011.91E+013.49E+023.73E+036.35E-014.86E+012.68E+031.40E+05 + 28L1 20.004.32E-011.19E+012.28E+023.22E+033.93E-012.46E+011.16E+035.26E+04 + 28L1 25.002.34E-015.99E+001.14E+021.82E+032.05E-019.77E+003.73E+021.39E+04 + 28L1 32.001.18E-012.68E+004.72E+017.51E+029.98E-023.58E+001.08E+023.22E+03 + 28L1 40.006.22E-021.25E+002.00E+012.95E+025.25E-021.47E+003.61E+018.75E+02 + 28L1 50.003.26E-025.73E-018.08E+001.07E+022.79E-026.15E-011.22E+012.42E+02 + 28L1 65.001.51E-022.23E-012.67E+003.04E+011.34E-022.25E-013.52E+005.48E+01 + 28L1 80.008.15E-031.04E-011.09E+001.08E+017.55E-031.04E-011.34E+001.73E+01 + 28L1 100.004.18E-034.55E-024.08E-013.47E+004.12E-034.59E-024.84E-015.13E+00 + 28L1 120.002.42E-032.30E-021.82E-011.36E+002.54E-032.39E-022.15E-011.94E+00 + 28L1 150.001.24E-031.00E-026.73E-024.30E-011.42E-031.10E-028.15E-026.06E-01 + 28L1 200.005.28E-043.43E-031.88E-029.83E-026.79E-044.16E-032.43E-021.42E-01 + 28L1 300.001.64E-047.89E-043.27E-031.30E-022.51E-041.13E-034.85E-032.07E-02 + 28L1 450.005.48E-051.99E-046.36E-041.95E-039.66E-053.34E-041.08E-033.46E-03 + 28L1 650.002.24E-056.48E-051.67E-044.17E-044.27E-051.20E-043.11E-047.94E-04 + 28L11000.009.07E-062.09E-054.39E-058.87E-051.74E-053.95E-058.30E-051.70E-04 + 28L12000.002.82E-064.93E-068.04E-061.27E-054.71E-068.24E-061.34E-052.12E-05 + 28L2 15.001.49E-016.80E+011.38E+041.62E+065.93E-027.81E+007.20E+025.76E+04 + 28L2 17.009.52E-023.63E+016.46E+036.80E+054.00E-024.67E+003.87E+022.79E+04 + 28L2 20.005.28E-021.60E+012.41E+032.20E+052.39E-022.39E+001.72E+021.08E+04 + 28L2 25.002.33E-025.23E+006.26E+024.68E+041.18E-029.51E-015.63E+012.92E+03 + 28L2 32.009.32E-031.52E+001.41E+028.42E+035.40E-033.43E-011.63E+016.82E+02 + 28L2 40.004.04E-034.97E-013.68E+011.79E+032.66E-031.37E-015.32E+001.83E+02 + 28L2 50.001.74E-031.63E-019.65E+003.83E+021.31E-035.44E-021.74E+004.89E+01 + 28L2 65.006.44E-044.44E-022.02E+006.30E+015.69E-041.85E-024.66E-011.04E+01 + 28L2 80.002.93E-041.60E-025.89E-011.52E+012.94E-047.87E-031.65E-013.08E+00 + 28L2 100.001.26E-045.35E-031.59E-013.35E+001.45E-043.16E-035.45E-028.37E-01 + 28L2 120.006.31E-052.21E-035.50E-029.86E-018.13E-051.51E-032.22E-022.91E-01 + 28L2 150.002.73E-057.56E-041.52E-022.25E-014.02E-056.12E-047.44E-038.07E-02 + 28L2 200.009.43E-061.95E-043.01E-033.46E-021.63E-051.94E-041.86E-031.59E-02 + 28L2 300.002.20E-063.06E-053.30E-042.72E-034.63E-063.96E-052.75E-041.71E-03 + 28L2 450.005.47E-075.27E-064.05E-052.44E-041.34E-068.50E-064.39E-052.04E-04 + 28L2 650.001.67E-071.18E-066.83E-063.18E-054.48E-072.22E-069.01E-063.30E-05 + 28L21000.004.65E-082.36E-071.01E-063.58E-061.29E-074.96E-071.58E-064.53E-06 + 28L22000.007.75E-092.49E-087.03E-081.74E-071.97E-085.42E-081.26E-072.67E-07 + 28L3 15.002.74E-011.21E+022.41E+042.80E+062.33E-022.41E+017.54E+031.02E+06 + 28L3 17.001.74E-016.40E+011.12E+041.17E+061.58E-021.30E+013.45E+034.13E+05 + 28L3 20.009.60E-022.80E+014.13E+033.73E+059.52E-035.85E+001.26E+031.29E+05 + 28L3 25.004.21E-029.01E+001.05E+037.76E+044.76E-031.96E+003.19E+022.64E+04 + 28L3 32.001.67E-022.56E+002.31E+021.36E+042.21E-035.87E-017.12E+014.66E+03 + 28L3 40.007.19E-038.23E-015.87E+012.81E+031.10E-031.99E-011.86E+019.88E+02 + 28L3 50.003.08E-032.64E-011.49E+015.80E+025.49E-046.82E-024.95E+002.13E+02 + 28L3 65.001.13E-036.96E-022.98E+009.07E+012.42E-041.96E-021.06E+003.58E+01 + 28L3 80.005.10E-042.43E-028.36E-012.09E+011.27E-047.35E-033.19E-018.89E+00 + 28L3 100.002.18E-047.85E-032.14E-014.35E+006.35E-052.60E-038.92E-022.03E+00 + 28L3 120.001.09E-043.14E-037.06E-021.21E+003.62E-051.12E-033.19E-026.15E-01 + 28L3 150.004.72E-051.03E-031.83E-022.55E-011.83E-054.06E-049.19E-031.46E-01 + 28L3 200.001.64E-052.51E-043.29E-033.51E-027.66E-061.12E-041.90E-032.37E-02 + 28L3 300.003.90E-063.62E-053.09E-042.28E-032.32E-061.93E-052.20E-041.98E-03 + 28L3 450.001.02E-065.84E-063.24E-051.66E-047.41E-073.64E-062.77E-051.83E-04 + 28L3 650.003.40E-071.27E-064.86E-061.82E-052.80E-078.90E-074.62E-062.34E-05 + 28L31000.001.09E-072.64E-076.75E-071.79E-069.88E-082.03E-076.60E-072.44E-06 + 28L32000.002.43E-083.58E-085.52E-089.12E-082.37E-083.09E-084.97E-081.01E-07 + 29K1 15.001.28E+013.40E+026.39E+031.14E+051.09E+016.62E+021.88E+044.44E+05 + 29K1 17.009.04E+002.47E+025.00E+039.64E+047.54E+004.04E+021.16E+042.92E+05 + 29K1 20.005.74E+001.56E+023.26E+036.51E+044.66E+002.14E+026.00E+031.53E+05 + 29K1 25.003.05E+007.85E+011.59E+033.10E+042.42E+008.94E+012.31E+035.62E+04 + 29K1 32.001.50E+003.46E+016.42E+021.15E+041.18E+003.44E+017.79E+021.69E+04 + 29K1 40.007.78E-011.60E+012.65E+024.23E+036.18E-011.46E+012.87E+025.48E+03 + 29K1 50.004.01E-017.18E+001.05E+021.46E+033.27E-016.31E+001.05E+021.73E+03 + 29K1 65.001.83E-012.75E+003.37E+013.97E+021.57E-012.38E+003.25E+014.41E+02 + 29K1 80.009.77E-021.27E+001.35E+011.37E+028.84E-021.11E+001.29E+011.50E+02 + 29K1 100.004.97E-025.47E-014.97E+004.32E+014.83E-025.01E-014.87E+004.72E+01 + 29K1 120.002.86E-022.74E-012.19E+001.66E+012.97E-022.64E-012.22E+001.86E+01 + 29K1 150.001.45E-021.18E-018.01E-015.17E+001.65E-021.23E-018.61E-016.05E+00 + 29K1 200.006.14E-034.01E-022.21E-011.16E+007.93E-034.69E-022.64E-011.48E+00 + 29K1 300.001.89E-039.13E-033.80E-021.50E-012.92E-031.29E-025.38E-022.23E-01 + 29K1 450.006.32E-042.29E-037.31E-032.24E-021.13E-033.85E-031.22E-023.85E-02 + 29K1 650.002.58E-047.45E-041.92E-034.76E-034.97E-041.38E-033.56E-038.96E-03 + 29K11000.001.04E-042.41E-045.03E-041.01E-032.02E-044.58E-049.56E-041.94E-03 + 29K12000.003.24E-055.68E-059.26E-051.46E-045.44E-059.54E-051.55E-042.44E-04 + 29K16000.007.79E-061.01E-051.28E-051.60E-059.75E-061.29E-051.64E-052.05E-05 + 29L1 15.009.82E-012.63E+013.73E+021.59E+031.08E+009.93E+016.13E+033.54E+05 + 29L1 17.007.07E-011.89E+013.05E+022.39E+037.46E-015.83E+013.20E+031.66E+05 + 29L1 20.004.59E-011.20E+012.09E+022.46E+034.61E-012.94E+011.38E+036.23E+04 + 29L1 25.002.50E-016.10E+001.08E+021.57E+032.40E-011.16E+014.43E+021.64E+04 + 29L1 32.001.26E-012.77E+004.65E+016.93E+021.17E-014.24E+001.28E+023.79E+03 + 29L1 40.006.70E-021.31E+002.01E+012.83E+026.14E-021.74E+004.25E+011.03E+03 + 29L1 50.003.53E-026.03E-018.25E+001.06E+023.25E-027.23E-011.44E+012.83E+02 + 29L1 65.001.64E-022.37E-012.77E+003.06E+011.56E-022.64E-014.11E+006.39E+01 + 29L1 80.008.87E-031.11E-011.14E+001.11E+018.76E-031.21E-011.56E+002.01E+01 + 29L1 100.004.57E-034.89E-024.31E-013.60E+004.78E-035.34E-025.63E-015.95E+00 + 29L1 120.002.65E-032.49E-021.93E-011.42E+002.93E-032.77E-022.49E-012.24E+00 + 29L1 150.001.36E-031.08E-027.20E-024.54E-011.63E-031.27E-029.42E-027.00E-01 + 29L1 200.005.81E-043.74E-032.03E-021.05E-017.81E-044.79E-032.80E-021.64E-01 + 29L1 300.001.81E-048.65E-043.57E-031.40E-022.87E-041.30E-035.56E-032.37E-02 + 29L1 450.006.08E-052.20E-046.99E-042.13E-031.10E-043.82E-041.24E-033.96E-03 + 29L1 650.002.49E-057.19E-051.85E-044.60E-044.85E-051.36E-043.55E-049.06E-04 + 29L11000.001.01E-052.34E-054.89E-059.88E-051.96E-054.49E-059.45E-051.93E-04 + 29L12000.003.14E-065.51E-069.01E-061.42E-055.29E-069.32E-061.52E-052.41E-05 + 29L2 15.001.71E-018.09E+011.64E+041.91E+067.12E-029.35E+008.52E+026.73E+04 + 29L2 17.001.09E-014.31E+017.70E+038.04E+054.80E-025.59E+004.58E+023.26E+04 + 29L2 20.006.08E-021.91E+012.88E+032.61E+052.88E-022.86E+002.04E+021.27E+04 + 29L2 25.002.69E-026.23E+007.49E+025.56E+041.42E-021.14E+006.70E+013.44E+03 + 29L2 32.001.08E-021.81E+001.69E+021.00E+046.52E-034.13E-011.95E+018.08E+02 + 29L2 40.004.72E-035.94E-014.42E+012.14E+033.21E-031.65E-016.37E+002.17E+02 + 29L2 50.002.04E-031.96E-011.16E+014.59E+021.58E-036.56E-022.08E+005.84E+01 + 29L2 65.007.58E-045.33E-022.43E+007.56E+016.89E-042.23E-025.61E-011.25E+01 + 29L2 80.003.46E-041.92E-027.11E-011.83E+013.57E-049.54E-031.99E-013.70E+00 + 29L2 100.001.49E-046.44E-031.92E-014.04E+001.76E-043.84E-036.59E-021.01E+00 + 29L2 120.007.50E-052.66E-036.65E-021.19E+009.90E-051.83E-032.68E-023.51E-01 + 29L2 150.003.26E-059.14E-041.85E-022.72E-014.90E-057.45E-049.03E-039.76E-02 + 29L2 200.001.13E-052.36E-043.66E-034.20E-021.99E-052.36E-042.26E-031.93E-02 + 29L2 300.002.64E-063.72E-054.02E-043.31E-035.67E-064.85E-053.36E-042.09E-03 + 29L2 450.006.59E-076.41E-064.95E-052.99E-041.65E-061.04E-055.38E-052.50E-04 + 29L2 650.002.02E-071.44E-068.36E-063.90E-055.51E-072.73E-061.11E-054.05E-05 + 29L21000.005.63E-082.88E-071.23E-064.39E-061.59E-076.11E-071.94E-065.58E-06 + 29L22000.009.39E-093.05E-088.64E-082.15E-072.42E-086.67E-081.55E-073.30E-07 + 29L3 15.003.12E-011.43E+022.86E+043.30E+062.75E-023.04E+019.76E+031.31E+06 + 29L3 17.001.99E-017.58E+011.33E+041.37E+061.86E-021.64E+014.46E+035.32E+05 + 29L3 20.001.10E-013.32E+014.91E+034.40E+051.13E-027.36E+001.62E+031.66E+05 + 29L3 25.004.84E-021.07E+011.25E+039.18E+045.63E-032.46E+004.09E+023.39E+04 + 29L3 32.001.93E-023.04E+002.75E+021.61E+042.61E-037.37E-019.09E+015.95E+03 + 29L3 40.008.34E-039.78E-017.00E+013.34E+031.30E-032.49E-012.37E+011.26E+03 + 29L3 50.003.58E-033.14E-011.78E+016.90E+026.51E-048.52E-026.27E+002.70E+02 + 29L3 65.001.32E-038.29E-023.56E+001.08E+022.88E-042.44E-021.34E+004.52E+01 + 29L3 80.005.98E-042.89E-021.00E+002.50E+011.51E-049.13E-034.02E-011.12E+01 + 29L3 100.002.56E-049.38E-032.56E-015.20E+007.57E-053.22E-031.12E-012.54E+00 + 29L3 120.001.29E-043.75E-038.47E-021.45E+004.32E-051.39E-033.99E-027.71E-01 + 29L3 150.005.57E-051.23E-032.20E-023.06E-012.18E-055.00E-041.15E-021.82E-01 + 29L3 200.001.94E-053.00E-043.95E-034.21E-029.15E-061.38E-042.37E-032.95E-02 + 29L3 300.004.63E-064.35E-053.72E-042.74E-032.77E-062.37E-052.72E-042.45E-03 + 29L3 450.001.22E-067.01E-063.90E-052.00E-048.85E-074.43E-063.41E-052.26E-04 + 29L3 650.004.05E-071.53E-065.86E-062.19E-053.35E-071.08E-065.68E-062.89E-05 + 29L31000.001.29E-073.17E-078.12E-072.16E-061.18E-072.44E-078.05E-072.99E-06 + 29L32000.002.89E-084.28E-086.62E-081.10E-072.83E-083.70E-085.98E-081.23E-07 + 30K1 15.001.34E+013.20E+025.22E+038.01E+041.26E+017.60E+021.95E+044.04E+05 + 30K1 17.009.52E+002.39E+024.34E+037.50E+048.71E+004.65E+021.24E+042.82E+05 + 30K1 20.006.07E+001.55E+022.98E+035.49E+045.38E+002.46E+026.52E+031.55E+05 + 30K1 25.003.24E+007.93E+011.52E+032.79E+042.79E+001.03E+022.55E+035.91E+04 + 30K1 32.001.59E+003.56E+016.32E+021.08E+041.36E+003.95E+018.69E+021.83E+04 + 30K1 40.008.31E-011.66E+012.66E+024.11E+037.11E-011.68E+013.22E+025.99E+03 + 30K1 50.004.30E-017.51E+001.06E+021.45E+033.76E-017.22E+001.19E+021.91E+03 + 30K1 65.001.97E-012.89E+003.48E+014.01E+021.80E-012.72E+003.67E+014.90E+02 + 30K1 80.001.05E-011.34E+001.40E+011.40E+021.01E-011.27E+001.46E+011.67E+02 + 30K1 100.005.36E-025.82E-015.21E+004.46E+015.51E-025.70E-015.49E+005.28E+01 + 30K1 120.003.09E-022.93E-012.31E+001.73E+013.38E-023.00E-012.50E+002.08E+01 + 30K1 150.001.58E-021.27E-018.49E-015.42E+001.88E-021.39E-019.72E-016.78E+00 + 30K1 200.006.68E-034.32E-022.36E-011.23E+008.99E-035.31E-022.97E-011.66E+00 + 30K1 300.002.07E-039.90E-034.08E-021.61E-013.30E-031.46E-026.06E-022.50E-01 + 30K1 450.006.93E-042.50E-037.93E-032.42E-021.27E-034.33E-031.38E-024.32E-02 + 30K1 650.002.84E-048.16E-042.10E-035.19E-035.57E-041.55E-033.99E-031.00E-02 + 30K11000.001.15E-042.65E-045.53E-041.11E-032.25E-045.13E-041.07E-032.17E-03 + 30K12000.003.56E-056.26E-051.02E-041.61E-046.03E-051.06E-041.74E-042.73E-04 + 30K16000.008.52E-061.10E-051.41E-051.76E-051.07E-051.42E-051.82E-052.27E-05 + 30L1 15.001.03E+002.55E+012.98E+021.04E+031.26E+001.19E+027.29E+034.18E+05 + 30L1 17.007.46E-011.86E+012.59E+021.40E+038.71E-016.94E+013.80E+031.95E+05 + 30L1 20.004.85E-011.19E+011.88E+021.78E+035.39E-013.49E+011.64E+037.32E+04 + 30L1 25.002.66E-016.18E+001.02E+021.31E+032.79E-011.38E+015.23E+021.92E+04 + 30L1 32.001.35E-012.84E+004.53E+016.29E+021.36E-015.00E+001.51E+024.44E+03 + 30L1 40.007.18E-021.36E+002.00E+012.69E+027.13E-022.04E+004.98E+011.20E+03 + 30L1 50.003.79E-026.32E-018.37E+001.03E+023.77E-028.46E-011.68E+013.30E+02 + 30L1 65.001.77E-022.50E-012.86E+003.07E+011.80E-023.08E-014.79E+007.42E+01 + 30L1 80.009.61E-031.18E-011.19E+001.12E+011.01E-021.41E-011.81E+002.33E+01 + 30L1 100.004.96E-035.23E-024.52E-013.71E+005.51E-036.18E-026.51E-016.87E+00 + 30L1 120.002.89E-032.67E-022.04E-011.48E+003.38E-033.21E-022.88E-012.59E+00 + 30L1 150.001.49E-031.17E-027.66E-024.77E-011.88E-031.46E-021.08E-018.05E-01 + 30L1 200.006.37E-044.05E-032.18E-021.11E-018.95E-045.51E-033.22E-021.88E-01 + 30L1 300.001.99E-049.45E-043.87E-031.51E-023.28E-041.49E-036.36E-032.71E-02 + 30L1 450.006.72E-052.42E-047.65E-042.32E-031.25E-044.35E-041.41E-034.51E-03 + 30L1 650.002.76E-057.95E-052.04E-045.06E-045.49E-051.55E-044.04E-041.03E-03 + 30L11000.001.12E-052.59E-055.43E-051.10E-042.22E-055.09E-051.07E-042.19E-04 + 30L12000.003.48E-066.13E-061.01E-051.59E-055.92E-061.05E-051.72E-052.72E-05 + 30L2 15.001.94E-019.55E+011.94E+042.24E+068.50E-021.11E+019.99E+027.77E+04 + 30L2 17.001.24E-015.10E+019.12E+039.42E+055.73E-026.64E+005.38E+023.78E+04 + 30L2 20.006.95E-022.26E+013.42E+033.07E+053.44E-023.41E+002.40E+021.48E+04 + 30L2 25.003.09E-027.38E+008.89E+026.55E+041.70E-021.36E+007.92E+014.02E+03 + 30L2 32.001.25E-022.15E+002.01E+021.19E+047.80E-034.93E-012.31E+019.49E+02 + 30L2 40.005.46E-037.06E-015.26E+012.54E+033.85E-031.97E-017.57E+002.56E+02 + 30L2 50.002.37E-032.33E-011.38E+015.45E+021.90E-037.86E-022.48E+006.91E+01 + 30L2 65.008.86E-046.35E-022.90E+009.01E+018.30E-042.68E-026.70E-011.48E+01 + 30L2 80.004.05E-042.29E-028.51E-012.19E+014.30E-041.15E-022.39E-014.40E+00 + 30L2 100.001.75E-047.70E-032.30E-014.84E+002.13E-044.62E-037.91E-021.20E+00 + 30L2 120.008.84E-053.19E-037.99E-021.43E+001.20E-042.21E-033.23E-024.20E-01 + 30L2 150.003.85E-051.10E-032.22E-023.27E-015.93E-058.99E-041.09E-021.17E-01 + 30L2 200.001.34E-052.84E-044.41E-035.06E-022.41E-052.86E-042.72E-032.32E-02 + 30L2 300.003.14E-064.48E-054.86E-044.00E-036.87E-065.88E-054.07E-042.52E-03 + 30L2 450.007.89E-077.75E-066.00E-053.62E-042.00E-061.27E-056.54E-053.03E-04 + 30L2 650.002.43E-071.74E-061.02E-054.74E-056.71E-073.33E-061.35E-054.93E-05 + 30L21000.006.77E-083.49E-071.50E-065.36E-061.94E-077.47E-072.37E-066.81E-06 + 30L22000.001.13E-083.70E-081.05E-072.62E-072.94E-088.17E-081.90E-074.04E-07 + 30L3 15.003.53E-011.68E+023.36E+043.83E+063.22E-023.81E+011.25E+041.67E+06 + 30L3 17.002.25E-018.92E+011.56E+041.60E+062.19E-022.05E+015.69E+036.77E+05 + 30L3 20.001.25E-013.91E+015.79E+035.13E+051.32E-029.19E+002.06E+032.11E+05 + 30L3 25.005.53E-021.26E+011.48E+031.07E+056.62E-033.07E+005.19E+024.29E+04 + 30L3 32.002.22E-023.59E+003.25E+021.89E+043.07E-039.17E-011.15E+027.50E+03 + 30L3 40.009.61E-031.15E+008.28E+013.92E+031.54E-033.10E-012.98E+011.58E+03 + 30L3 50.004.14E-033.71E-012.11E+018.13E+027.68E-041.06E-017.87E+003.38E+02 + 30L3 65.001.53E-039.81E-024.23E+001.28E+023.40E-043.01E-021.68E+005.65E+01 + 30L3 80.006.96E-043.43E-021.19E+002.96E+011.78E-041.13E-025.01E-011.39E+01 + 30L3 100.002.99E-041.11E-023.05E-016.16E+008.95E-053.96E-031.39E-013.16E+00 + 30L3 120.001.50E-044.45E-031.01E-011.72E+005.11E-051.70E-034.95E-029.57E-01 + 30L3 150.006.54E-051.47E-032.62E-023.64E-012.58E-056.13E-041.42E-022.26E-01 + 30L3 200.002.28E-053.57E-044.71E-035.01E-021.08E-051.68E-042.92E-033.65E-02 + 30L3 300.005.46E-065.18E-054.44E-043.26E-033.29E-062.87E-053.35E-043.02E-03 + 30L3 450.001.44E-068.35E-064.66E-052.39E-041.05E-065.35E-064.18E-052.78E-04 + 30L3 650.004.80E-071.82E-067.00E-062.62E-053.97E-071.29E-066.91E-063.54E-05 + 30L31000.001.53E-073.77E-079.69E-072.58E-061.40E-072.92E-079.75E-073.65E-06 + 30L32000.003.42E-085.08E-087.87E-081.31E-073.34E-084.38E-087.15E-081.49E-07 + 30K 10.663.34E+014.62E+022.22E+038.36E+033.47E+012.91E+034.52E+042.83E+05 + 30K 11.362.82E+014.75E+023.73E+032.52E+042.87E+012.27E+034.24E+044.32E+05 + 30K 12.662.11E+014.37E+025.30E+035.83E+042.08E+011.48E+033.35E+045.21E+05 + 30K 15.861.15E+012.86E+024.99E+038.21E+041.06E+016.08E+021.62E+043.55E+05 + 30K 19.666.34E+001.63E+023.16E+035.84E+045.63E+002.61E+027.01E+031.67E+05 + 30K 24.003.62E+009.03E+011.75E+033.25E+043.13E+001.20E+023.04E+037.15E+04 + 30K 30.001.91E+004.41E+018.07E+021.42E+041.63E+005.04E+011.15E+032.51E+04 + 30K 38.009.60E-011.98E+013.27E+025.20E+038.19E-012.03E+014.03E+027.77E+03 + 30K 50.004.28E-017.48E+001.06E+021.46E+033.74E-017.18E+001.18E+021.91E+03 + 30K 63.002.15E-013.23E+003.97E+014.69E+021.95E-013.03E+004.19E+015.75E+02 + 30K 80.001.05E-011.33E+001.40E+011.40E+021.00E-011.26E+001.45E+011.66E+02 + 30K 93.006.64E-027.60E-017.17E+006.47E+016.66E-027.34E-017.50E+007.63E+01 + 30K 110.004.00E-024.04E-013.39E+002.71E+014.24E-024.05E-013.61E+003.22E+01 + 30K 133.002.25E-021.98E-011.45E+001.01E+012.56E-022.09E-011.60E+001.23E+01 + 30K 160.001.29E-029.87E-026.32E-013.86E+001.58E-021.11E-017.38E-014.90E+00 + 30K 225.004.70E-032.78E-021.40E-016.69E-016.65E-033.60E-021.84E-019.41E-01 + 30K 310.001.87E-038.75E-033.53E-021.36E-013.03E-031.31E-025.32E-022.15E-01 + 30K 400.009.35E-043.65E-031.25E-024.08E-021.66E-036.07E-032.08E-027.04E-02 + 30K 510.005.02E-041.67E-034.91E-031.39E-029.49E-043.01E-038.88E-032.57E-02 + 30K 740.002.11E-045.65E-041.36E-033.14E-034.19E-041.09E-032.63E-036.17E-03 + 30K 1000.001.14E-042.63E-045.49E-041.10E-032.24E-045.10E-041.06E-032.16E-03 + 30K 1250.007.55E-051.58E-043.02E-045.55E-041.44E-042.99E-045.70E-041.05E-03 + 30K 1500.005.53E-051.08E-041.93E-043.33E-041.01E-041.97E-043.52E-046.07E-04 + 30L1 2.197.33E+012.68E+041.80E+073.46E+093.87E+027.29E+052.54E+083.82E+10 + 30L1 2.894.39E+013.90E+034.37E+061.09E+091.69E+021.96E+055.41E+078.57E+09 + 30L1 4.192.07E+017.14E+014.44E+051.34E+085.56E+013.45E+046.89E+069.78E+08 + 30L1 7.395.84E+006.98E+013.45E+032.25E+061.02E+012.59E+033.09E+053.11E+07 + 30L1 11.192.14E+004.79E+011.95E+023.85E+042.95E+004.11E+023.33E+042.44E+06 + 30L1 15.001.02E+002.55E+013.09E+021.07E+031.24E+001.16E+027.12E+034.09E+05 + 30L1 21.004.20E-011.03E+011.68E+021.82E+034.57E-012.77E+011.25E+035.35E+04 + 30L1 29.001.74E-013.86E+006.35E+018.85E+021.77E-017.29E+002.41E+027.77E+03 + 30L1 41.006.59E-021.23E+001.81E+012.43E+026.51E-021.81E+004.31E+011.02E+03 + 30L1 54.002.99E-024.76E-016.08E+007.25E+012.97E-026.13E-011.13E+012.08E+02 + 30L1 71.001.34E-021.79E-011.95E+001.99E+011.38E-022.15E-013.09E+004.42E+01 + 30L1 84.008.18E-039.75E-029.49E-018.75E+008.68E-031.15E-011.41E+001.74E+01 + 30L1 101.004.73E-034.96E-024.27E-013.49E+005.25E-035.83E-026.09E-016.36E+00 + 30L1 124.002.57E-032.32E-021.74E-011.24E+003.03E-032.79E-022.43E-012.13E+00 + 30L1 150.001.46E-031.15E-027.54E-024.70E-011.84E-031.43E-021.06E-017.87E-01 + 30L1 215.005.07E-043.06E-031.56E-027.62E-027.31E-044.24E-032.34E-021.29E-01 + 30L1 300.001.96E-049.28E-043.80E-031.48E-023.21E-041.46E-036.23E-032.65E-02 + 30L1 390.009.59E-053.78E-041.31E-034.33E-031.72E-046.53E-042.32E-038.19E-03 + 30L1 500.005.06E-051.70E-045.06E-041.44E-039.69E-053.16E-049.59E-042.86E-03 + 30L1 730.002.09E-055.65E-051.37E-043.20E-044.21E-051.12E-042.74E-046.55E-04 + 30L11000.001.10E-052.54E-055.32E-051.07E-042.18E-055.01E-051.05E-042.16E-04 + 30L2 2.041.26E+022.16E+063.18E+091.07E+124.11E+013.57E+049.18E+061.61E+09 + 30L2 2.745.22E+014.86E+055.42E+081.85E+111.65E+011.09E+042.87E+065.71E+08 + 30L2 4.041.56E+016.82E+045.22E+071.56E+104.94E+002.27E+035.22E+059.66E+07 + 30L2 7.242.32E+003.59E+031.54E+063.17E+088.01E-012.11E+023.38E+044.56E+06 + 30L2 11.045.51E-014.29E+021.20E+051.78E+072.14E-013.76E+014.37E+034.35E+05 + 30L2 15.001.88E-019.22E+011.88E+042.17E+068.19E-021.07E+019.68E+027.56E+04 + 30L2 21.005.65E-021.70E+012.46E+032.12E+052.84E-022.69E+001.82E+021.08E+04 + 30L2 29.001.74E-023.39E+003.50E+022.27E+041.03E-027.12E-013.65E+011.64E+03 + 30L2 41.004.82E-036.02E-014.37E+012.07E+033.44E-031.71E-016.45E+002.14E+02 + 30L2 54.001.72E-031.53E-018.42E+003.10E+021.44E-035.52E-021.63E+004.24E+01 + 30L2 71.006.14E-043.97E-021.66E+004.75E+016.05E-041.80E-024.16E-018.53E+00 + 30L2 84.003.26E-041.74E-026.15E-011.51E+013.55E-049.05E-031.80E-013.19E+00 + 30L2 101.001.63E-047.07E-032.09E-014.36E+001.98E-044.27E-037.25E-021.09E+00 + 30L2 124.007.55E-052.62E-036.37E-021.11E+001.04E-041.86E-032.65E-023.35E-01 + 30L2 150.003.72E-051.06E-032.14E-023.14E-015.71E-058.66E-041.05E-021.13E-01 + 30L2 215.009.96E-061.95E-042.84E-033.07E-021.86E-052.07E-041.86E-031.49E-02 + 30L2 300.003.03E-064.31E-054.68E-043.85E-036.63E-065.67E-053.92E-042.43E-03 + 30L2 390.001.21E-061.37E-051.19E-048.00E-042.98E-062.09E-051.19E-046.08E-04 + 30L2 500.005.31E-074.82E-063.43E-051.92E-041.41E-068.29E-063.97E-051.71E-04 + 30L2 730.001.66E-071.07E-065.73E-062.48E-054.62E-072.13E-068.04E-062.74E-05 + 30L21000.006.52E-083.36E-071.45E-065.16E-061.87E-077.20E-072.29E-066.56E-06 + 30L3 2.022.50E+024.29E+066.43E+092.19E+121.53E+017.93E+056.26E+095.54E+12 + 30L3 2.721.02E+029.45E+051.06E+093.68E+116.10E+001.80E+058.36E+085.63E+11 + 30L3 4.022.99E+011.30E+059.96E+072.99E+101.82E+002.56E+046.10E+072.86E+10 + 30L3 7.224.35E+006.64E+032.83E+065.83E+082.98E-011.38E+031.29E+063.48E+08 + 30L3 11.021.02E+007.77E+022.14E+053.18E+078.08E-021.69E+028.46E+041.53E+07 + 30L3 15.003.42E-011.63E+023.25E+043.73E+063.11E-023.66E+011.20E+041.61E+06 + 30L3 21.001.01E-012.94E+014.15E+033.54E+051.10E-026.95E+001.46E+031.43E+05 + 30L3 29.003.09E-025.71E+005.74E+023.66E+044.03E-031.43E+002.01E+021.44E+04 + 30L3 41.008.47E-039.82E-016.86E+013.19E+031.37E-032.65E-012.47E+011.28E+03 + 30L3 54.002.99E-032.42E-011.27E+014.56E+025.83E-047.02E-024.79E+001.92E+02 + 30L3 71.001.06E-036.05E-022.38E+006.61E+012.49E-041.91E-029.63E-012.98E+01 + 30L3 84.005.59E-042.58E-028.50E-012.02E+011.48E-048.62E-033.64E-019.67E+00 + 30L3 101.002.78E-041.02E-022.76E-015.54E+008.37E-053.64E-031.26E-012.85E+00 + 30L3 124.001.28E-043.65E-037.96E-021.32E+004.45E-051.41E-033.96E-027.43E-01 + 30L3 150.006.30E-051.41E-032.53E-023.51E-012.49E-055.90E-041.36E-022.17E-01 + 30L3 215.001.69E-052.43E-042.96E-032.95E-028.42E-061.17E-041.90E-032.23E-02 + 30L3 300.005.26E-064.99E-054.27E-043.14E-033.17E-062.77E-053.22E-042.90E-03 + 30L3 390.002.18E-061.51E-059.79E-055.70E-041.50E-069.22E-068.29E-056.12E-04 + 30L3 500.009.99E-075.12E-062.57E-051.20E-047.60E-073.39E-062.38E-051.46E-04 + 30L3 730.003.40E-071.12E-063.85E-061.31E-052.85E-078.18E-073.86E-061.81E-05 + 30L31000.001.50E-073.64E-079.35E-072.49E-061.35E-072.81E-079.39E-073.51E-06 + 30M1 1.143.56E+016.02E+042.94E+079.86E+084.16E+022.89E+063.57E+091.90E+12 + 30M1 2.141.20E+011.95E+032.23E+065.83E+086.27E+011.36E+057.46E+072.52E+10 + 30M1 4.143.16E+002.09E+004.82E+041.70E+078.66E+005.93E+031.51E+062.97E+08 + 30M1 8.146.78E-011.18E+018.40E+011.18E+051.14E+002.67E+023.29E+043.56E+06 + 30M1 15.141.45E-013.69E+004.75E+012.16E+021.80E-011.73E+011.13E+036.92E+04 + 30M1 25.003.83E-028.95E-011.49E+011.93E+024.09E-022.07E+008.18E+013.14E+03 + 30M1 40.001.04E-021.96E-012.89E+003.88E+011.04E-023.04E-017.62E+001.88E+02 + 30M1 52.004.91E-037.97E-021.03E+001.24E+014.94E-031.08E-012.10E+004.07E+01 + 30M1 70.002.07E-032.78E-023.02E-013.10E+002.15E-033.44E-025.07E-017.46E+00 + 30M1 103.006.62E-046.83E-035.81E-024.71E-017.45E-048.19E-038.49E-028.81E-01 + 30M1 150.002.17E-041.70E-031.11E-026.93E-022.75E-042.15E-031.61E-021.20E-01 + 30M2 1.096.10E+017.10E+062.86E+102.61E+133.86E+019.12E+046.37E+073.22E+10 + 30M2 2.091.20E+012.64E+054.78E+082.84E+115.25E+005.59E+032.55E+069.23E+08 + 30M2 4.091.76E+008.90E+037.54E+062.71E+096.64E-013.36E+029.28E+042.13E+07 + 30M2 8.092.05E-012.88E+021.16E+052.39E+078.03E-021.99E+013.17E+034.28E+05 + 30M2 15.092.49E-021.27E+012.64E+033.13E+051.15E-021.53E+001.42E+021.14E+04 + 30M2 25.004.16E-031.01E+001.24E+029.35E+032.36E-031.91E-011.13E+015.87E+02 + 30M2 40.007.46E-049.77E-027.36E+003.59E+025.37E-042.76E-021.07E+003.67E+01 + 30M2 52.002.82E-042.66E-021.53E+005.87E+012.34E-049.39E-032.88E-017.82E+00 + 30M2 70.009.27E-056.14E-032.62E-017.65E+009.17E-052.78E-036.53E-021.36E+00 + 30M2 103.002.19E-059.35E-042.72E-025.60E-012.71E-055.76E-049.63E-031.43E-01 + 30M2 150.005.40E-061.53E-043.12E-034.59E-028.32E-061.26E-041.53E-031.65E-02 + 30M3 1.091.19E+021.33E+075.35E+104.82E+131.38E+012.56E+066.91E+102.01E+14 + 30M3 2.092.29E+014.92E+058.85E+085.21E+111.87E+009.84E+047.92E+089.82E+11 + 30M3 4.093.30E+001.64E+041.38E+074.89E+092.37E-013.43E+038.52E+064.79E+09 + 30M3 8.093.78E-015.20E+022.07E+054.21E+072.92E-021.15E+029.49E+042.55E+07 + 30M3 15.094.51E-022.22E+014.54E+035.33E+054.30E-035.18E+001.74E+032.46E+05 + 30M3 25.007.40E-031.72E+002.06E+021.52E+049.06E-044.29E-017.44E+016.36E+03 + 30M3 40.001.31E-031.59E-011.15E+015.52E+022.12E-044.34E-024.25E+002.30E+02 + 30M3 52.004.89E-044.21E-022.31E+008.65E+019.39E-051.22E-028.86E-013.73E+01 + 30M3 70.001.59E-049.34E-033.74E-011.06E+013.74E-052.96E-031.54E-014.90E+00 + 30M3 103.003.71E-051.34E-033.56E-027.02E-011.14E-054.83E-041.66E-023.70E-01 + 30M3 150.009.06E-062.04E-043.66E-035.09E-023.60E-068.57E-052.00E-033.20E-02 + 30M4 1.014.68E+011.37E+059.01E+091.50E+141.18E+002.16E+042.98E+087.12E+11 + 30M4 2.013.46E+003.84E+036.82E+074.15E+111.10E-016.58E+023.26E+064.33E+09 + 30M4 4.012.13E-011.01E+025.00E+051.21E+099.47E-031.95E+013.78E+042.68E+07 + 30M4 8.011.10E-022.40E+003.62E+033.67E+067.42E-045.67E-014.56E+021.69E+05 + 30M4 15.016.63E-047.48E-024.14E+011.98E+046.85E-052.26E-028.56E+001.74E+03 + 30M4 25.006.31E-054.28E-031.10E+002.91E+029.48E-061.64E-033.44E-014.25E+01 + 30M4 40.006.94E-062.95E-043.95E-026.12E+001.47E-061.45E-041.81E-021.42E+00 + 30M5 1.016.84E+011.95E+051.34E+102.19E+147.72E-013.13E+031.23E+098.20E+13 + 30M5 2.015.05E+005.45E+031.01E+086.02E+117.46E-021.01E+029.94E+061.83E+11 + 30M5 4.013.08E-011.42E+027.41E+051.74E+096.69E-033.22E+007.96E+044.34E+08 + 30M5 8.011.59E-023.36E+005.31E+035.20E+065.50E-041.03E-016.39E+021.13E+06 + 30M5 15.019.51E-041.03E-015.98E+012.75E+045.31E-054.57E-038.13E+005.73E+03 + 30M5 25.009.01E-055.84E-031.56E+003.94E+027.64E-063.62E-042.40E-018.54E+01 + 30M5 40.009.85E-063.95E-045.45E-027.98E+001.23E-063.48E-059.59E-031.89E+00 + 31K 11.372.94E+013.73E+021.58E+035.11E+033.30E+012.59E+033.69E+042.04E+05 + 31K 12.072.51E+013.86E+022.68E+031.58E+042.76E+012.05E+033.50E+043.16E+05 + 31K 13.371.91E+013.61E+023.91E+033.81E+042.04E+011.37E+032.84E+043.95E+05 + 31K 16.571.07E+012.46E+023.91E+035.84E+041.08E+015.87E+021.45E+042.90E+05 + 31K 20.376.06E+001.46E+022.61E+034.45E+045.84E+002.61E+026.56E+031.46E+05 + 31K 24.003.83E+009.06E+011.65E+032.87E+043.60E+001.37E+023.34E+037.42E+04 + 31K 30.002.03E+004.49E+017.85E+021.32E+041.87E+005.77E+011.28E+032.68E+04 + 31K 38.001.02E+002.04E+013.25E+025.00E+039.40E-012.32E+014.51E+028.44E+03 + 31K 50.004.57E-017.80E+001.08E+021.44E+034.28E-018.19E+001.33E+022.10E+03 + 31K 63.002.30E-013.39E+004.08E+014.71E+022.23E-013.46E+004.72E+016.37E+02 + 31K 80.001.12E-011.41E+001.45E+011.43E+021.15E-011.44E+001.64E+011.85E+02 + 31K 93.007.15E-028.06E-017.48E+006.64E+017.59E-028.35E-018.44E+008.51E+01 + 31K 110.004.31E-024.30E-013.55E+002.80E+014.82E-024.59E-014.07E+003.60E+01 + 31K 133.002.43E-022.11E-011.52E+001.05E+012.91E-022.37E-011.81E+001.38E+01 + 31K 160.001.40E-021.06E-016.69E-014.04E+001.79E-021.26E-018.30E-015.48E+00 + 31K 225.005.10E-032.99E-021.49E-017.08E-017.51E-034.06E-022.07E-011.05E+00 + 31K 310.002.04E-039.46E-033.79E-021.45E-013.41E-031.47E-025.97E-022.40E-01 + 31K 400.001.02E-033.96E-031.35E-024.38E-021.86E-036.83E-032.33E-027.88E-02 + 31K 510.005.48E-041.81E-035.32E-031.50E-021.06E-033.38E-039.95E-032.88E-02 + 31K 740.002.31E-046.18E-041.48E-033.42E-034.68E-041.23E-032.95E-036.90E-03 + 31K 1000.001.25E-042.88E-046.01E-041.21E-032.49E-045.70E-041.19E-032.41E-03 + 31K 1250.008.28E-051.74E-043.32E-046.10E-041.60E-043.34E-046.37E-041.18E-03 + 31K 1500.006.07E-051.19E-042.12E-043.66E-041.12E-042.20E-043.93E-046.78E-04 + 31L1 2.306.73E+012.55E+041.52E+072.59E+093.93E+027.17E+052.38E+083.28E+10 + 31L1 3.004.12E+014.17E+034.04E+069.14E+081.77E+022.03E+055.39E+077.97E+09 + 31L1 4.302.00E+011.22E+024.61E+051.26E+086.01E+013.74E+047.27E+069.83E+08 + 31L1 7.505.83E+005.44E+015.09E+032.56E+061.14E+012.93E+033.43E+053.36E+07 + 31L1 11.302.18E+004.33E+011.02E+025.81E+043.34E+004.72E+023.79E+042.72E+06 + 31L1 15.001.07E+002.46E+012.39E+021.41E+031.44E+001.38E+028.46E+034.81E+05 + 31L1 21.004.43E-011.03E+011.52E+021.32E+035.31E-013.28E+011.47E+036.27E+04 + 31L1 29.001.85E-013.93E+006.08E+017.72E+022.06E-018.58E+002.83E+029.08E+03 + 31L1 41.007.05E-021.28E+001.80E+012.30E+027.54E-022.11E+005.04E+011.18E+03 + 31L1 54.003.21E-024.98E-016.17E+007.11E+013.43E-027.14E-011.32E+012.41E+02 + 31L1 71.001.45E-021.89E-012.01E+002.00E+011.59E-022.50E-013.58E+005.11E+01 + 31L1 84.008.84E-031.03E-019.86E-018.89E+001.00E-021.33E-011.63E+002.01E+01 + 31L1 101.005.13E-035.29E-024.47E-013.59E+006.04E-036.74E-027.02E-017.33E+00 + 31L1 124.002.80E-032.49E-021.84E-011.28E+003.48E-033.22E-022.80E-012.44E+00 + 31L1 150.001.59E-031.24E-028.00E-024.92E-012.11E-031.65E-021.22E-019.03E-01 + 31L1 215.005.54E-043.31E-031.68E-028.09E-028.35E-044.86E-032.68E-021.47E-01 + 31L1 300.002.14E-041.01E-034.10E-031.59E-023.66E-041.66E-037.10E-033.02E-02 + 31L1 390.001.05E-044.14E-041.42E-034.68E-031.95E-047.43E-042.64E-039.31E-03 + 31L1 500.005.57E-051.87E-045.53E-041.57E-031.10E-043.59E-041.09E-033.25E-03 + 31L1 730.002.32E-056.24E-051.51E-043.51E-044.75E-051.27E-043.10E-047.42E-04 + 31L11000.001.22E-052.82E-055.89E-051.19E-042.45E-055.66E-051.19E-042.44E-04 + 31L2 2.141.18E+022.00E+062.79E+098.52E+114.19E+013.45E+048.07E+061.26E+09 + 31L2 2.845.09E+014.76E+055.11E+081.63E+111.74E+011.11E+042.71E+064.94E+08 + 31L2 4.141.58E+017.08E+045.28E+071.50E+105.41E+002.42E+035.27E+059.19E+07 + 31L2 7.342.47E+003.93E+031.66E+063.33E+089.09E-012.35E+023.65E+044.75E+06 + 31L2 11.146.00E-014.82E+021.33E+051.95E+072.47E-014.28E+014.86E+034.72E+05 + 31L2 15.002.13E-011.08E+022.21E+042.53E+069.72E-021.27E+011.13E+038.72E+04 + 31L2 21.006.43E-022.01E+012.90E+032.48E+053.38E-023.19E+002.14E+021.25E+04 + 31L2 29.001.99E-024.00E+004.15E+022.66E+041.22E-028.46E-014.30E+011.91E+03 + 31L2 41.005.56E-037.12E-015.18E+012.44E+034.10E-032.04E-017.64E+002.52E+02 + 31L2 54.001.99E-031.81E-011.00E+013.67E+021.72E-036.59E-021.93E+005.01E+01 + 31L2 71.007.15E-044.71E-021.97E+005.64E+017.25E-042.15E-024.95E-011.01E+01 + 31L2 84.003.80E-042.06E-027.33E-011.80E+014.26E-041.08E-022.15E-013.79E+00 + 31L2 101.001.91E-048.42E-032.50E-015.19E+002.38E-045.12E-038.66E-021.30E+00 + 31L2 124.008.88E-053.13E-037.61E-021.32E+001.25E-042.24E-033.16E-023.99E-01 + 31L2 150.004.39E-051.26E-032.56E-023.76E-016.88E-051.04E-031.25E-021.35E-01 + 31L2 215.001.17E-052.34E-043.41E-033.68E-022.24E-052.50E-042.24E-031.79E-02 + 31L2 300.003.59E-065.18E-055.63E-044.63E-038.02E-066.85E-054.72E-042.92E-03 + 31L2 390.001.47E-061.65E-051.44E-049.64E-043.61E-062.53E-051.44E-047.34E-04 + 31L2 500.006.47E-075.80E-064.14E-052.32E-041.71E-061.00E-054.81E-052.07E-04 + 31L2 730.001.95E-071.29E-066.95E-063.00E-055.60E-072.58E-069.76E-063.32E-05 + 31L21000.007.82E-084.06E-071.75E-066.25E-062.27E-078.76E-072.78E-067.97E-06 + 31L3 2.122.35E+023.96E+065.66E+091.76E+121.55E+017.85E+056.01E+095.08E+12 + 31L3 2.829.94E+019.27E+051.01E+093.24E+116.40E+001.88E+058.68E+085.64E+11 + 31L3 4.123.04E+011.35E+051.01E+082.88E+101.98E+002.84E+046.80E+073.11E+10 + 31L3 7.324.62E+007.26E+033.05E+066.11E+083.34E-011.61E+031.53E+064.07E+08 + 31L3 11.121.10E+008.69E+022.38E+053.46E+079.18E-022.01E+021.03E+051.83E+07 + 31L3 15.003.85E-011.90E+023.81E+044.32E+063.63E-024.55E+011.53E+042.05E+06 + 31L3 21.001.15E-013.45E+014.87E+034.12E+051.28E-028.63E+001.85E+031.80E+05 + 31L3 29.003.53E-026.70E+006.75E+024.28E+044.71E-031.77E+002.53E+021.81E+04 + 31L3 41.009.71E-031.15E+008.08E+013.73E+031.61E-033.27E-013.10E+011.60E+03 + 31L3 54.003.45E-032.85E-011.50E+015.36E+026.84E-048.65E-025.98E+002.39E+02 + 31L3 71.001.22E-037.12E-022.80E+007.78E+012.93E-042.34E-021.20E+003.71E+01 + 31L3 84.006.48E-043.05E-021.00E+002.38E+011.74E-041.06E-024.51E-011.20E+01 + 31L3 101.003.23E-041.20E-023.27E-016.54E+009.85E-054.45E-031.56E-013.53E+00 + 31L3 124.001.49E-044.31E-039.43E-021.56E+005.24E-051.72E-034.88E-029.18E-01 + 31L3 150.007.36E-051.67E-032.99E-024.15E-012.93E-057.19E-041.68E-022.68E-01 + 31L3 215.001.99E-052.87E-043.51E-033.49E-029.94E-061.43E-042.33E-032.75E-02 + 31L3 300.006.22E-065.91E-055.08E-043.73E-033.74E-063.34E-053.94E-043.56E-03 + 31L3 390.002.62E-061.79E-051.16E-046.77E-041.77E-061.11E-051.01E-047.49E-04 + 31L3 500.001.19E-066.08E-063.05E-051.43E-048.98E-074.07E-062.89E-051.79E-04 + 31L3 730.003.89E-071.33E-064.57E-061.56E-053.37E-079.77E-074.67E-062.21E-05 + 31L31000.001.75E-074.30E-071.11E-062.96E-061.59E-073.35E-071.13E-064.26E-06 + 31M1 1.163.43E+016.29E+042.57E+074.09E+084.63E+023.29E+064.10E+092.10E+12 + 31M1 2.161.20E+012.34E+032.30E+065.29E+087.17E+011.61E+058.92E+072.95E+10 + 31M1 4.163.22E+005.51E+005.76E+041.84E+071.00E+017.15E+031.83E+063.55E+08 + 31M1 8.167.07E-011.02E+011.77E+021.55E+051.34E+003.22E+023.98E+044.27E+06 + 31M1 15.161.53E-013.61E+003.84E+012.29E+022.11E-012.08E+011.36E+038.28E+04 + 31M1 25.004.11E-029.14E-011.41E+011.68E+024.81E-022.47E+009.81E+013.76E+03 + 31M1 40.001.12E-022.05E-012.90E+003.69E+011.23E-023.61E-019.05E+002.24E+02 + 31M1 52.005.34E-038.43E-021.06E+001.22E+015.79E-031.28E-012.49E+004.81E+01 + 31M1 70.002.26E-032.97E-023.15E-013.15E+002.51E-034.05E-025.96E-018.77E+00 + 31M1 103.007.28E-047.37E-036.16E-024.96E-018.68E-049.59E-039.94E-021.03E+00 + 31M1 150.002.39E-041.85E-031.20E-027.34E-023.19E-042.51E-031.87E-021.40E-01 + 31M2 1.116.09E+017.73E+063.12E+102.72E+134.38E+011.03E+056.92E+073.27E+10 + 31M2 2.111.25E+013.00E+055.46E+083.16E+116.13E+006.53E+032.90E+061.01E+09 + 31M2 4.111.91E+001.04E+048.82E+063.11E+097.88E-013.98E+021.08E+052.42E+07 + 31M2 8.112.30E-013.41E+021.38E+052.79E+079.62E-022.38E+013.73E+034.97E+05 + 31M2 15.112.85E-021.51E+013.15E+033.71E+051.39E-021.84E+001.69E+021.34E+04 + 31M2 25.004.84E-031.22E+001.50E+021.12E+042.87E-032.32E-011.36E+017.02E+02 + 31M2 40.008.77E-041.18E-018.91E+004.34E+026.54E-043.36E-021.30E+004.41E+01 + 31M2 52.003.33E-043.21E-021.86E+007.10E+012.86E-041.14E-023.49E-019.43E+00 + 31M2 70.001.10E-047.44E-033.19E-019.28E+001.12E-043.39E-037.94E-021.65E+00 + 31M2 103.002.61E-051.13E-033.32E-026.82E-013.33E-057.05E-041.18E-021.74E-01 + 31M2 150.006.44E-061.87E-043.81E-035.61E-021.02E-051.55E-041.87E-032.02E-02 + 31M3 1.101.20E+021.47E+075.95E+105.17E+131.56E+013.03E+068.44E+102.50E+14 + 31M3 2.102.41E+015.63E+051.02E+095.86E+112.16E+001.20E+051.01E+091.27E+12 + 31M3 4.103.60E+001.91E+041.61E+075.64E+092.79E-014.28E+031.11E+076.29E+09 + 31M3 8.104.23E-016.13E+022.46E+054.92E+073.46E-021.44E+021.24E+053.34E+07 + 31M3 15.105.14E-022.64E+015.41E+036.30E+055.11E-036.54E+002.26E+033.20E+05 + 31M3 25.008.56E-032.06E+002.47E+021.82E+041.08E-035.44E-019.62E+018.24E+03 + 31M3 40.001.53E-031.91E-011.39E+016.61E+022.53E-045.48E-025.45E+002.95E+02 + 31M3 52.005.73E-045.05E-022.78E+001.04E+021.12E-041.54E-021.13E+004.77E+01 + 31M3 70.001.88E-041.12E-024.51E-011.28E+014.48E-053.72E-031.96E-016.24E+00 + 31M3 103.004.40E-051.60E-034.30E-028.46E-011.36E-056.04E-042.10E-024.69E-01 + 31M3 150.001.08E-052.47E-044.43E-036.15E-024.32E-061.07E-042.52E-034.04E-02 + 31M4 1.025.70E+011.72E+051.20E+102.06E+141.54E+002.93E+044.16E+089.80E+11 + 31M4 2.024.39E+004.97E+039.37E+075.86E+111.47E-019.16E+024.66E+066.13E+09 + 31M4 4.022.78E-011.33E+027.01E+051.73E+091.28E-022.75E+015.44E+043.85E+07 + 31M4 8.021.48E-023.24E+005.12E+035.28E+061.02E-038.07E-016.60E+022.44E+05 + 31M4 15.029.05E-041.03E-015.89E+012.85E+049.54E-053.23E-021.24E+012.51E+03 + 31M4 25.008.75E-055.95E-031.58E+004.23E+021.33E-052.35E-035.01E-016.18E+01 + 31M4 40.009.66E-064.13E-045.66E-028.89E+002.08E-062.09E-042.63E-022.06E+00 + 31M5 1.028.35E+012.45E+051.78E+103.00E+141.00E+004.20E+031.75E+091.22E+14 + 31M5 2.026.40E+007.05E+031.40E+088.51E+119.90E-021.38E+021.46E+072.83E+11 + 31M5 4.024.03E-011.88E+021.04E+062.48E+099.03E-034.48E+001.19E+056.76E+08 + 31M5 8.022.13E-024.53E+007.53E+037.49E+067.54E-041.45E-019.59E+021.76E+06 + 31M5 15.021.30E-031.42E-018.52E+013.97E+047.36E-056.42E-031.22E+018.87E+03 + 31M5 25.001.25E-048.10E-032.24E+005.71E+021.07E-055.12E-043.61E-011.32E+02 + 31M5 40.001.38E-055.52E-047.82E-021.16E+011.73E-064.93E-051.44E-022.89E+00 + 32K 12.102.59E+013.03E+021.14E+033.17E+033.14E+012.31E+033.03E+041.49E+05 + 32K 12.802.24E+013.15E+021.94E+031.00E+042.66E+011.85E+032.90E+042.33E+05 + 32K 14.101.73E+012.99E+022.90E+032.51E+041.99E+011.26E+032.41E+043.01E+05 + 32K 17.309.97E+002.12E+023.07E+034.17E+041.09E+015.65E+021.29E+042.37E+05 + 32K 21.105.78E+001.30E+022.15E+033.39E+046.03E+002.59E+026.12E+031.26E+05 + 32K 25.003.60E+008.00E+011.36E+032.22E+043.65E+001.34E+023.06E+036.40E+04 + 32K 31.001.95E+004.10E+016.77E+021.07E+041.94E+005.80E+011.22E+032.43E+04 + 32K 39.001.01E+001.92E+012.92E+024.27E+039.97E-012.40E+014.47E+028.01E+03 + 32K 51.004.60E-017.56E+001.01E+021.29E+034.61E-018.66E+001.36E+022.08E+03 + 32K 64.002.35E-013.35E+003.90E+014.37E+022.43E-013.70E+004.93E+016.48E+02 + 32K 81.001.16E-011.42E+001.42E+011.36E+021.26E-011.56E+001.74E+011.92E+02 + 32K 94.007.43E-028.18E-017.41E+006.43E+018.37E-029.10E-019.05E+008.95E+01 + 32K 111.004.51E-024.41E-013.56E+002.75E+015.33E-025.03E-014.40E+003.83E+01 + 32K 134.002.56E-022.18E-011.55E+001.05E+013.22E-022.60E-011.96E+001.48E+01 + 32K 160.001.51E-021.13E-017.06E-014.21E+002.02E-021.42E-019.32E-016.11E+00 + 32K 225.005.52E-033.20E-021.58E-017.46E-018.46E-034.57E-022.32E-011.17E+00 + 32K 310.002.21E-031.02E-024.06E-021.54E-013.83E-031.66E-026.69E-022.68E-01 + 32K 400.001.11E-034.28E-031.45E-024.69E-022.09E-037.66E-032.61E-028.79E-02 + 32K 510.005.98E-041.97E-035.75E-031.61E-021.19E-033.79E-031.11E-023.21E-02 + 32K 740.002.52E-046.74E-041.61E-033.71E-035.22E-041.37E-033.29E-037.70E-03 + 32K 1000.001.36E-043.15E-046.57E-041.32E-032.77E-046.36E-041.33E-032.69E-03 + 32K 1250.009.06E-051.90E-043.63E-046.68E-041.77E-043.71E-047.10E-041.31E-03 + 32K 1500.006.64E-051.30E-042.33E-044.02E-041.24E-042.44E-044.38E-047.55E-04 + 32L1 2.416.11E+012.36E+041.25E+071.88E+093.92E+026.89E+052.17E+082.72E+10 + 32L1 3.113.84E+014.31E+033.64E+067.41E+081.83E+022.05E+055.24E+077.18E+09 + 32L1 4.411.92E+011.78E+024.66E+051.16E+086.44E+013.99E+047.52E+069.63E+08 + 32L1 7.615.79E+004.08E+016.86E+032.81E+061.26E+013.27E+033.77E+053.56E+07 + 32L1 11.412.21E+003.86E+016.02E+018.02E+043.76E+005.37E+024.25E+042.99E+06 + 32L1 15.001.12E+002.34E+011.74E+022.90E+031.67E+001.63E+029.99E+035.63E+05 + 32L1 21.004.67E-011.02E+011.34E+029.04E+026.15E-013.87E+011.73E+037.31E+04 + 32L1 29.001.96E-013.98E+005.76E+016.57E+022.38E-011.01E+013.32E+021.06E+04 + 32L1 41.007.51E-021.32E+001.78E+012.15E+028.71E-022.47E+005.87E+011.37E+03 + 32L1 54.003.44E-025.19E-016.22E+006.90E+013.96E-028.30E-011.53E+012.79E+02 + 32L1 71.001.56E-021.99E-012.06E+002.00E+011.83E-022.89E-014.13E+005.89E+01 + 32L1 84.009.54E-031.09E-011.02E+008.98E+001.15E-021.53E-011.88E+002.31E+01 + 32L1 101.005.55E-035.62E-024.66E-013.66E+006.93E-037.75E-028.08E-018.42E+00 + 32L1 124.003.03E-032.66E-021.93E-011.33E+003.98E-033.69E-023.21E-012.80E+00 + 32L1 150.001.73E-031.32E-028.46E-025.13E-012.41E-031.89E-021.39E-011.03E+00 + 32L1 215.006.05E-043.57E-031.79E-028.55E-029.50E-045.54E-033.05E-021.68E-01 + 32L1 300.002.35E-041.10E-034.42E-031.70E-024.15E-041.89E-038.07E-033.43E-02 + 32L1 390.001.16E-044.51E-041.54E-035.04E-032.21E-048.43E-043.00E-031.05E-02 + 32L1 500.006.13E-052.04E-046.02E-041.71E-031.24E-044.07E-041.23E-033.68E-03 + 32L1 730.002.55E-056.86E-051.66E-043.85E-045.34E-051.43E-043.51E-048.38E-04 + 32L11000.001.34E-053.11E-056.50E-051.31E-042.75E-056.38E-051.35E-042.75E-04 + 32L2 2.251.10E+021.82E+062.42E+096.75E+114.23E+013.30E+047.05E+069.80E+08 + 32L2 2.954.93E+014.62E+054.76E+081.41E+111.83E+011.11E+042.53E+064.22E+08 + 32L2 4.251.60E+017.28E+045.28E+071.42E+105.88E+002.55E+035.27E+058.64E+07 + 32L2 7.452.61E+004.28E+031.78E+063.46E+081.02E+002.60E+023.91E+044.90E+06 + 32L2 11.256.49E-015.37E+021.47E+052.11E+072.83E-014.84E+015.37E+035.08E+05 + 32L2 15.002.40E-011.27E+022.59E+042.93E+061.15E-011.49E+011.31E+039.98E+04 + 32L2 21.007.28E-022.35E+013.40E+032.89E+054.00E-023.75E+002.50E+021.45E+04 + 32L2 29.002.27E-024.69E+004.88E+023.11E+041.45E-029.99E-015.03E+012.22E+03 + 32L2 41.006.38E-038.36E-016.11E+012.86E+034.87E-032.41E-018.98E+002.94E+02 + 32L2 54.002.30E-032.14E-011.18E+014.31E+022.05E-037.82E-022.28E+005.87E+01 + 32L2 71.008.28E-045.55E-022.34E+006.65E+018.64E-042.56E-025.85E-011.19E+01 + 32L2 84.004.42E-042.44E-028.69E-012.13E+015.08E-041.29E-022.55E-014.47E+00 + 32L2 101.002.22E-049.96E-032.96E-016.15E+002.85E-046.11E-031.03E-011.54E+00 + 32L2 124.001.04E-043.71E-039.05E-021.56E+001.50E-042.67E-033.76E-024.73E-01 + 32L2 150.005.12E-051.50E-033.05E-024.47E-018.24E-051.24E-031.49E-021.60E-01 + 32L2 215.001.38E-052.79E-044.08E-034.39E-022.69E-053.00E-042.67E-032.13E-02 + 32L2 300.004.26E-066.18E-056.74E-045.54E-039.64E-068.23E-055.66E-043.49E-03 + 32L2 390.001.74E-061.97E-051.72E-041.15E-034.34E-063.04E-051.73E-048.79E-04 + 32L2 500.007.63E-076.94E-064.97E-052.78E-042.06E-061.21E-055.79E-052.49E-04 + 32L2 730.002.31E-071.55E-068.36E-063.62E-056.76E-073.12E-061.18E-054.00E-05 + 32L21000.009.19E-084.88E-072.12E-067.55E-062.74E-071.06E-063.36E-069.62E-06 + 32L3 2.222.20E+023.63E+064.94E+091.40E+121.55E+017.69E+055.70E+094.59E+12 + 32L3 2.929.65E+019.01E+059.43E+082.83E+116.65E+001.95E+058.88E+085.56E+11 + 32L3 4.223.07E+011.38E+051.01E+082.74E+102.13E+003.11E+047.48E+073.33E+10 + 32L3 7.424.87E+007.87E+033.26E+066.34E+083.72E-011.86E+031.80E+064.69E+08 + 32L3 11.221.19E+009.66E+022.62E+053.73E+071.04E-012.38E+021.23E+052.18E+07 + 32L3 15.004.32E-012.21E+024.45E+044.98E+064.22E-025.62E+011.93E+042.59E+06 + 32L3 21.001.30E-014.02E+015.69E+034.77E+051.49E-021.06E+012.33E+032.27E+05 + 32L3 29.004.00E-027.81E+007.89E+024.97E+045.49E-032.18E+003.17E+022.27E+04 + 32L3 41.001.11E-021.35E+009.46E+014.35E+031.87E-034.01E-013.86E+011.99E+03 + 32L3 54.003.95E-033.33E-011.75E+016.25E+027.98E-041.06E-017.43E+002.96E+02 + 32L3 71.001.41E-038.34E-023.29E+009.11E+013.42E-042.86E-021.48E+004.59E+01 + 32L3 84.007.46E-043.57E-021.18E+002.79E+012.03E-041.29E-025.56E-011.48E+01 + 32L3 101.003.73E-041.41E-023.85E-017.67E+001.15E-045.42E-031.93E-014.34E+00 + 32L3 124.001.73E-045.06E-031.11E-011.83E+006.14E-052.09E-036.00E-021.13E+00 + 32L3 150.008.53E-051.96E-033.53E-024.88E-013.44E-058.71E-042.06E-023.28E-01 + 32L3 215.002.30E-053.38E-044.14E-034.12E-021.16E-051.72E-042.84E-033.36E-02 + 32L3 300.007.17E-066.96E-056.00E-044.40E-034.39E-064.02E-054.79E-044.34E-03 + 32L3 390.002.99E-062.11E-051.38E-047.99E-042.08E-061.33E-051.23E-049.11E-04 + 32L3 500.001.37E-067.17E-063.61E-051.69E-041.05E-064.86E-063.50E-052.17E-04 + 32L3 730.004.57E-071.57E-065.40E-061.85E-053.94E-071.16E-065.62E-062.67E-05 + 32L31000.002.02E-075.06E-071.31E-063.50E-061.86E-073.96E-071.35E-065.15E-06 + 32M1 1.183.32E+016.56E+042.24E+072.70E+085.16E+023.75E+064.71E+092.34E+12 + 32M1 2.181.20E+012.76E+032.36E+064.75E+088.19E+011.90E+051.07E+083.45E+10 + 32M1 4.183.29E+001.26E+016.77E+041.96E+071.16E+018.59E+032.22E+064.25E+08 + 32M1 8.187.36E-018.68E+003.17E+021.96E+051.56E+003.88E+024.81E+045.12E+06 + 32M1 15.181.62E-013.51E+003.00E+013.85E+022.47E-012.49E+011.63E+039.89E+04 + 32M1 25.004.41E-029.32E-011.33E+011.31E+025.66E-022.96E+001.17E+024.49E+03 + 32M1 40.001.21E-022.15E-012.90E+003.48E+011.44E-024.28E-011.08E+012.65E+02 + 32M1 52.005.79E-038.90E-021.08E+001.20E+016.77E-031.51E-012.94E+005.68E+01 + 32M1 70.002.46E-033.16E-023.27E-013.18E+002.93E-034.76E-027.01E-011.03E+01 + 32M1 103.007.98E-047.94E-036.52E-025.09E-011.01E-031.12E-021.16E-011.20E+00 + 32M1 150.002.63E-042.01E-031.28E-027.75E-023.70E-042.92E-032.17E-021.62E-01 + 32M2 1.136.08E+018.37E+063.38E+102.83E+134.94E+011.17E+057.48E+073.32E+10 + 32M2 2.131.31E+013.41E+056.21E+083.49E+117.12E+007.59E+033.27E+061.09E+09 + 32M2 4.132.08E+001.21E+041.03E+073.56E+099.31E-014.69E+021.25E+052.73E+07 + 32M2 8.132.56E-014.01E+021.63E+053.26E+071.15E-012.84E+014.39E+035.75E+05 + 32M2 15.133.25E-021.79E+013.76E+034.39E+051.67E-022.20E+002.01E+021.58E+04 + 32M2 25.005.60E-031.46E+001.81E+021.35E+043.47E-032.80E-011.64E+018.36E+02 + 32M2 40.001.03E-031.42E-011.08E+015.21E+027.95E-044.07E-021.56E+005.29E+01 + 32M2 52.003.91E-043.87E-022.25E+008.56E+013.48E-041.39E-024.22E-011.13E+01 + 32M2 70.001.30E-048.98E-033.86E-011.12E+011.37E-044.12E-039.62E-021.99E+00 + 32M2 103.003.11E-051.37E-034.03E-028.27E-014.07E-058.60E-041.43E-022.11E-01 + 32M2 150.007.73E-062.27E-044.65E-036.83E-021.25E-051.90E-042.28E-032.45E-02 + 32M3 1.121.21E+021.61E+076.55E+105.49E+131.75E+013.54E+061.02E+113.05E+14 + 32M3 2.122.53E+016.41E+051.17E+096.54E+112.50E+001.46E+051.28E+091.63E+12 + 32M3 4.123.90E+002.23E+041.88E+076.47E+093.26E-015.31E+031.43E+078.18E+09 + 32M3 8.124.71E-017.21E+022.90E+055.74E+074.07E-021.81E+021.60E+054.34E+07 + 32M3 15.125.84E-023.12E+016.42E+037.41E+056.04E-038.23E+002.92E+034.14E+05 + 32M3 25.009.88E-032.46E+002.96E+022.17E+041.29E-036.87E-011.24E+021.06E+04 + 32M3 40.001.78E-032.28E-011.66E+017.90E+023.02E-046.89E-026.97E+003.78E+02 + 32M3 52.006.70E-046.04E-023.34E+001.24E+021.34E-041.94E-021.44E+006.08E+01 + 32M3 70.002.21E-041.35E-025.43E-011.53E+015.36E-054.66E-032.48E-017.92E+00 + 32M3 103.005.21E-051.93E-035.18E-021.02E+001.63E-057.53E-042.65E-025.93E-01 + 32M3 150.001.29E-052.97E-045.34E-037.41E-025.19E-061.32E-043.16E-035.08E-02 + 32M4 1.036.75E+012.10E+051.53E+102.71E+141.95E+003.84E+045.62E+081.30E+12 + 32M4 2.035.42E+006.27E+031.25E+088.02E+111.91E-011.24E+036.47E+068.41E+09 + 32M4 4.033.55E-011.72E+029.55E+052.40E+091.70E-023.79E+017.63E+045.36E+07 + 32M4 8.031.93E-024.28E+007.06E+037.41E+061.37E-031.12E+009.31E+023.43E+05 + 32M4 15.031.21E-031.37E-018.17E+014.02E+041.30E-044.51E-021.75E+013.54E+03 + 32M4 25.001.18E-048.08E-032.21E+005.99E+021.83E-053.31E-037.12E-018.78E+01 + 32M4 40.001.32E-055.66E-047.93E-021.26E+012.88E-062.94E-043.75E-022.93E+00 + 32M5 1.039.90E+012.98E+052.29E+103.95E+141.26E+005.46E+032.39E+091.74E+14 + 32M5 2.037.91E+008.87E+031.87E+081.16E+121.28E-011.85E+022.07E+074.21E+11 + 32M5 4.035.14E-012.42E+021.42E+063.46E+091.19E-026.06E+001.72E+051.02E+09 + 32M5 8.032.78E-025.96E+001.04E+041.05E+071.01E-031.97E-011.40E+032.67E+06 + 32M5 15.031.72E-031.89E-011.19E+025.59E+049.95E-058.80E-031.79E+011.34E+04 + 32M5 25.001.68E-041.10E-023.14E+008.09E+021.46E-057.06E-045.31E-011.98E+02 + 32M5 40.001.86E-057.53E-041.10E-011.64E+012.38E-066.82E-052.11E-024.31E+00 + 33K 12.872.30E+012.48E+028.27E+022.00E+032.99E+012.06E+032.50E+041.09E+05 + 33K 13.572.00E+012.59E+021.42E+036.42E+032.56E+011.67E+032.42E+041.74E+05 + 33K 14.871.57E+012.49E+022.16E+031.67E+041.95E+011.17E+032.05E+042.30E+05 + 33K 18.079.28E+001.82E+022.41E+032.97E+041.09E+015.43E+021.15E+041.94E+05 + 33K 21.875.50E+001.15E+021.77E+032.58E+046.20E+002.57E+025.69E+031.09E+05 + 33K 26.003.39E+007.10E+011.13E+031.72E+043.72E+001.31E+022.83E+035.55E+04 + 33K 32.001.88E+003.75E+015.85E+028.76E+032.02E+005.83E+011.17E+032.21E+04 + 33K 40.009.92E-011.80E+012.62E+023.65E+031.06E+002.47E+014.43E+027.60E+03 + 33K 52.004.61E-017.32E+009.37E+011.15E+034.97E-019.13E+001.39E+022.05E+03 + 33K 65.002.39E-013.31E+003.73E+014.04E+022.64E-013.96E+005.14E+016.57E+02 + 33K 82.001.20E-011.42E+001.39E+011.30E+021.38E-011.69E+001.84E+012.00E+02 + 33K 95.007.71E-028.29E-017.33E+006.20E+019.20E-029.90E-019.67E+009.38E+01 + 33K 112.004.71E-024.51E-013.56E+002.70E+015.88E-025.50E-014.73E+004.05E+01 + 33K 135.002.69E-022.25E-011.57E+001.04E+013.57E-022.86E-012.13E+001.58E+01 + 33K 160.001.62E-021.20E-017.42E-014.38E+002.28E-021.59E-011.04E+006.80E+00 + 33K 225.005.96E-033.43E-021.68E-017.83E-019.51E-035.13E-022.60E-011.31E+00 + 33K 310.002.40E-031.09E-024.33E-021.63E-014.30E-031.85E-027.47E-022.98E-01 + 33K 400.001.21E-034.62E-031.55E-025.00E-022.33E-038.56E-032.91E-029.79E-02 + 33K 510.006.50E-042.13E-036.20E-031.73E-021.33E-034.23E-031.24E-023.57E-02 + 33K 740.002.74E-047.32E-041.75E-034.02E-035.80E-041.53E-033.66E-038.56E-03 + 33K 1000.001.48E-043.44E-047.16E-041.44E-033.07E-047.07E-041.48E-032.99E-03 + 33K 1250.009.85E-052.08E-043.97E-047.30E-041.96E-044.13E-047.90E-041.46E-03 + 33K 1500.007.22E-051.42E-042.55E-044.40E-041.37E-042.71E-044.86E-048.39E-04 + 33L1 2.535.62E+012.21E+041.06E+071.41E+093.96E+026.72E+052.03E+082.33E+10 + 33L1 3.233.60E+014.45E+033.32E+066.14E+081.90E+022.10E+055.16E+076.61E+09 + 33L1 4.531.84E+012.40E+024.71E+051.07E+086.90E+014.27E+047.83E+069.55E+08 + 33L1 7.735.76E+002.96E+018.80E+033.05E+061.39E+013.66E+034.14E+053.80E+07 + 33L1 11.532.24E+003.42E+016.84E+011.05E+054.22E+006.11E+024.77E+043.28E+06 + 33L1 15.001.17E+002.22E+011.20E+025.66E+031.92E+001.93E+021.18E+046.56E+05 + 33L1 21.004.91E-011.00E+011.16E+026.00E+027.10E-014.55E+012.03E+038.51E+04 + 33L1 29.002.07E-014.01E+005.41E+015.48E+022.74E-011.18E+013.87E+021.23E+04 + 33L1 41.007.99E-021.35E+001.75E+011.98E+021.00E-012.87E+006.81E+011.59E+03 + 33L1 54.003.67E-025.40E-016.25E+006.66E+014.55E-029.61E-011.77E+013.21E+02 + 33L1 71.001.67E-022.09E-012.10E+001.98E+012.10E-023.33E-014.76E+006.77E+01 + 33L1 84.001.02E-021.15E-011.05E+009.03E+001.31E-021.76E-012.16E+002.65E+01 + 33L1 101.005.97E-035.94E-024.84E-013.73E+007.92E-038.90E-029.26E-019.63E+00 + 33L1 124.003.27E-032.83E-022.02E-011.36E+004.55E-034.23E-023.67E-013.20E+00 + 33L1 150.001.87E-031.41E-028.90E-025.33E-012.74E-032.15E-021.59E-011.18E+00 + 33L1 215.006.56E-043.84E-031.90E-029.00E-021.08E-036.31E-033.47E-021.91E-01 + 33L1 300.002.56E-041.19E-034.74E-031.81E-024.70E-042.14E-039.15E-033.88E-02 + 33L1 390.001.26E-044.90E-041.66E-035.42E-032.49E-049.54E-043.39E-031.19E-02 + 33L1 500.006.72E-052.23E-046.54E-041.85E-031.40E-044.59E-041.39E-034.15E-03 + 33L1 730.002.80E-057.52E-051.81E-044.20E-046.00E-051.61E-043.95E-049.45E-04 + 33L11000.001.47E-053.42E-057.15E-051.44E-043.08E-057.17E-051.51E-043.10E-04 + 33L2 2.361.03E+021.66E+062.09E+095.33E+114.26E+013.15E+046.14E+067.59E+08 + 33L2 3.064.76E+014.45E+054.41E+081.21E+111.91E+011.11E+042.35E+063.59E+08 + 33L2 4.361.60E+017.42E+045.24E+071.34E+106.35E+002.67E+035.23E+058.06E+07 + 33L2 7.562.74E+004.61E+031.89E+063.56E+081.15E+002.85E+024.15E+045.01E+06 + 33L2 11.366.98E-015.95E+021.62E+052.26E+073.22E-015.43E+015.88E+035.42E+05 + 33L2 15.002.68E-011.48E+023.02E+043.37E+061.35E-011.74E+011.52E+031.14E+05 + 33L2 21.008.21E-022.74E+013.97E+033.34E+054.71E-024.40E+002.90E+021.66E+04 + 33L2 29.002.57E-025.47E+005.70E+023.62E+041.71E-021.17E+005.87E+012.56E+03 + 33L2 41.007.28E-039.78E-017.17E+013.34E+035.76E-032.84E-011.05E+013.41E+02 + 33L2 54.002.63E-032.50E-011.39E+015.05E+022.42E-039.22E-022.67E+006.84E+01 + 33L2 71.009.52E-046.52E-022.75E+007.80E+011.02E-033.02E-026.89E-011.39E+01 + 33L2 84.005.09E-042.87E-021.02E+002.50E+016.04E-041.53E-023.00E-015.24E+00 + 33L2 101.002.57E-041.17E-023.50E-017.24E+003.38E-047.24E-031.21E-011.81E+00 + 33L2 124.001.20E-044.37E-031.07E-011.85E+001.78E-043.17E-034.45E-025.57E-01 + 33L2 150.005.97E-051.77E-033.61E-025.28E-019.82E-051.48E-031.77E-021.89E-01 + 33L2 215.001.62E-053.30E-044.84E-035.20E-023.21E-053.57E-043.18E-032.53E-02 + 33L2 300.004.95E-067.33E-058.02E-046.58E-031.15E-059.84E-056.75E-044.15E-03 + 33L2 390.002.00E-062.34E-052.05E-041.38E-035.20E-063.64E-052.06E-041.05E-03 + 33L2 500.008.86E-078.26E-065.94E-053.32E-042.47E-061.45E-056.93E-052.97E-04 + 33L2 730.002.79E-071.85E-061.00E-054.33E-058.12E-073.75E-061.41E-054.79E-05 + 33L21000.001.09E-075.82E-072.54E-069.05E-063.30E-071.28E-064.04E-061.16E-05 + 33L3 2.322.05E+023.31E+064.29E+091.11E+121.55E+017.48E+055.35E+094.11E+12 + 33L3 3.029.31E+018.69E+058.75E+082.44E+116.87E+002.01E+058.98E+085.43E+11 + 33L3 4.323.08E+011.41E+051.00E+082.58E+102.27E+003.37E+048.12E+073.52E+10 + 33L3 7.525.10E+008.47E+033.46E+066.51E+084.10E-012.13E+032.08E+065.35E+08 + 33L3 11.321.28E+001.07E+032.87E+053.99E+071.16E-012.79E+021.47E+052.56E+07 + 33L3 15.004.81E-012.56E+025.15E+045.71E+064.87E-026.90E+012.43E+043.25E+06 + 33L3 21.001.45E-014.66E+016.60E+035.49E+051.72E-021.30E+012.92E+032.83E+05 + 33L3 29.004.51E-029.06E+009.17E+025.73E+046.35E-032.66E+003.95E+022.82E+04 + 33L3 41.001.26E-021.57E+001.10E+025.04E+032.17E-034.90E-014.78E+012.46E+03 + 33L3 54.004.49E-033.88E-012.04E+017.26E+029.26E-041.29E-019.16E+003.65E+02 + 33L3 71.001.61E-039.72E-023.84E+001.06E+023.97E-043.48E-021.82E+005.64E+01 + 33L3 84.008.54E-044.16E-021.38E+003.25E+012.36E-041.56E-026.82E-011.81E+01 + 33L3 101.004.28E-041.65E-024.50E-018.95E+001.34E-046.56E-032.36E-015.31E+00 + 33L3 124.001.99E-045.91E-031.30E-012.14E+007.14E-052.52E-037.32E-021.38E+00 + 33L3 150.009.83E-052.30E-034.13E-025.70E-014.00E-051.05E-032.51E-024.00E-01 + 33L3 215.002.68E-053.95E-044.86E-034.82E-021.36E-052.06E-043.45E-034.08E-02 + 33L3 300.008.42E-068.15E-057.04E-045.17E-035.11E-064.80E-055.79E-045.26E-03 + 33L3 390.003.51E-062.47E-051.62E-049.39E-042.43E-061.58E-051.48E-041.10E-03 + 33L3 500.001.60E-068.39E-064.24E-051.98E-041.23E-065.77E-064.21E-052.62E-04 + 33L3 730.005.41E-071.84E-066.35E-062.17E-054.60E-071.37E-066.73E-063.22E-05 + 33L31000.002.38E-075.94E-071.54E-064.12E-062.16E-074.65E-071.61E-066.17E-06 + 33M1 1.203.21E+016.78E+041.94E+074.57E+085.70E+024.23E+065.35E+092.57E+12 + 33M1 2.201.19E+013.19E+032.40E+064.20E+089.30E+012.23E+051.26E+084.01E+10 + 33M1 4.203.36E+002.33E+017.80E+042.07E+071.34E+011.03E+042.67E+065.05E+08 + 33M1 8.207.65E-017.20E+005.06E+022.42E+051.82E+004.65E+025.78E+046.12E+06 + 33M1 15.201.71E-013.39E+002.26E+016.97E+022.89E-012.98E+011.95E+031.18E+05 + 33M1 25.004.71E-029.46E-011.23E+011.04E+026.63E-023.53E+001.40E+025.35E+03 + 33M1 40.001.31E-022.24E-012.88E+003.25E+011.68E-025.07E-011.27E+013.13E+02 + 33M1 52.006.27E-039.37E-021.10E+001.17E+017.90E-031.78E-013.46E+006.69E+01 + 33M1 70.002.68E-033.36E-023.39E-013.19E+003.41E-035.58E-028.23E-011.21E+01 + 33M1 103.008.73E-048.54E-036.87E-025.25E-011.17E-031.31E-021.36E-011.40E+00 + 33M1 150.002.89E-042.18E-031.37E-028.16E-024.28E-043.39E-032.52E-021.88E-01 + 33M2 1.156.10E+019.14E+063.71E+103.01E+135.60E+011.33E+058.23E+073.46E+10 + 33M2 2.151.38E+013.87E+057.10E+083.90E+118.27E+008.85E+033.73E+061.20E+09 + 33M2 4.152.25E+001.40E+041.20E+074.08E+091.10E+005.54E+021.45E+053.09E+07 + 33M2 8.152.85E-014.72E+021.92E+053.80E+071.37E-013.38E+015.15E+036.65E+05 + 33M2 15.153.68E-022.12E+014.46E+035.17E+052.00E-022.63E+002.37E+021.85E+04 + 33M2 25.006.46E-031.74E+002.17E+021.60E+044.19E-033.37E-011.95E+019.91E+02 + 33M2 40.001.19E-031.69E-011.29E+016.24E+029.61E-044.91E-021.88E+006.30E+01 + 33M2 52.004.58E-044.66E-022.70E+001.03E+024.22E-041.68E-025.07E-011.35E+01 + 33M2 70.001.53E-041.08E-024.66E-011.35E+011.66E-044.99E-031.16E-012.39E+00 + 33M2 103.003.68E-051.56E-034.88E-029.97E-014.95E-051.04E-031.73E-022.54E-01 + 33M2 150.009.21E-062.74E-045.64E-038.27E-021.53E-052.31E-042.77E-032.97E-02 + 33M3 1.141.21E+021.74E+077.12E+105.75E+131.96E+014.09E+061.20E+113.66E+14 + 33M3 2.142.65E+017.24E+051.33E+097.23E+112.86E+001.76E+051.59E+092.06E+12 + 33M3 4.144.22E+002.57E+042.18E+077.37E+093.79E-016.53E+031.83E+071.05E+10 + 33M3 8.145.22E-018.44E+023.40E+056.65E+074.77E-022.25E+022.06E+055.61E+07 + 33M3 15.146.60E-023.68E+017.58E+038.68E+057.11E-031.03E+013.74E+035.32E+05 + 33M3 25.001.13E-022.92E+003.52E+022.57E+041.52E-038.62E-011.59E+021.37E+04 + 33M3 40.002.06E-032.71E-011.98E+019.38E+023.58E-048.63E-028.86E+004.81E+02 + 33M3 52.007.80E-047.20E-023.99E+001.48E+021.59E-042.42E-021.82E+007.70E+01 + 33M3 70.002.58E-041.61E-026.49E-011.83E+016.37E-055.80E-033.13E-011.00E+01 + 33M3 103.006.12E-052.30E-036.20E-021.22E+001.94E-059.34E-043.32E-027.45E-01 + 33M3 150.001.51E-053.55E-046.42E-038.88E-026.19E-061.64E-043.95E-036.35E-02 + 33M4 1.047.82E+012.50E+051.90E+103.46E+142.41E+004.92E+047.37E+081.67E+12 + 33M4 2.046.55E+007.74E+031.63E+081.07E+122.43E-011.64E+038.75E+061.13E+10 + 33M4 4.044.43E-012.18E+021.27E+063.27E+092.21E-025.09E+011.05E+057.31E+07 + 33M4 8.042.47E-025.52E+009.53E+031.02E+071.81E-031.52E+001.28E+034.72E+05 + 33M4 15.041.57E-031.80E-011.11E+025.54E+041.73E-046.17E-022.43E+014.89E+03 + 33M4 25.001.56E-041.07E-023.02E+008.30E+022.45E-054.55E-039.91E-011.22E+02 + 33M4 40.001.76E-057.58E-041.09E-011.75E+013.89E-064.06E-045.22E-024.08E+00 + 33M4 52.005.14E-061.72E-041.71E-022.06E+001.38E-061.05E-041.01E-026.17E-01 + 33M4 70.001.27E-063.22E-052.14E-031.85E-014.22E-072.29E-051.60E-037.35E-02 + 33M4 103.002.06E-073.71E-061.48E-048.36E-039.01E-083.17E-061.48E-044.73E-03 + 33M4 150.003.79E-084.64E-071.14E-054.29E-042.00E-084.66E-071.49E-053.38E-04 + 33M5 1.041.15E+023.54E+052.85E+105.05E+141.55E+006.92E+033.18E+092.39E+14 + 33M5 2.049.56E+001.09E+042.43E+081.55E+121.62E-012.41E+022.87E+076.08E+11 + 33M5 4.046.42E-013.05E+021.89E+064.70E+091.53E-028.03E+002.43E+051.51E+09 + 33M5 8.043.56E-027.67E+001.41E+041.44E+071.32E-032.63E-012.00E+033.95E+06 + 33M5 15.042.25E-032.47E-011.61E+027.69E+041.32E-041.18E-022.57E+011.97E+04 + 33M5 25.002.22E-041.44E-024.29E+001.12E+031.94E-059.50E-047.62E-012.90E+02 + 33M5 40.002.49E-051.00E-031.50E-012.27E+013.20E-069.23E-053.02E-026.30E+00 + 33M5 52.007.26E-062.25E-042.33E-022.60E+001.16E-062.52E-055.05E-037.65E-01 + 33M5 70.001.79E-064.14E-052.82E-032.24E-013.66E-075.81E-066.76E-047.21E-02 + 33M5 103.002.89E-074.62E-061.85E-049.41E-038.21E-088.80E-075.13E-053.50E-03 + 33M5 150.005.26E-085.59E-071.34E-054.41E-041.93E-081.43E-074.36E-061.94E-04 + 34K 13.662.04E+012.04E+026.07E+021.28E+032.85E+011.84E+032.08E+048.13E+04 + 34K 14.361.79E+012.13E+021.05E+034.16E+032.46E+011.52E+032.03E+041.30E+05 + 34K 15.661.42E+012.08E+021.62E+031.12E+041.90E+011.08E+031.75E+041.77E+05 + 34K 18.868.62E+001.57E+021.90E+032.13E+041.09E+015.20E+021.02E+041.58E+05 + 34K 22.665.22E+001.02E+021.46E+031.96E+046.36E+002.53E+025.26E+039.40E+04 + 34K 27.003.21E+006.32E+019.43E+021.35E+043.79E+001.28E+022.61E+034.82E+04 + 34K 33.001.82E+003.44E+015.07E+027.16E+032.10E+005.87E+011.12E+032.01E+04 + 34K 41.009.77E-011.70E+012.35E+023.12E+031.12E+002.55E+014.38E+027.21E+03 + 34K 53.004.63E-017.07E+008.71E+011.03E+035.33E-019.61E+001.41E+022.02E+03 + 34K 66.002.43E-013.26E+003.56E+013.73E+022.86E-014.23E+005.35E+016.65E+02 + 34K 83.001.23E-011.42E+001.35E+011.23E+021.51E-011.82E+001.95E+012.06E+02 + 34K 96.007.97E-028.37E-017.23E+005.97E+011.01E-011.07E+001.03E+019.81E+01 + 34K 113.004.90E-024.60E-013.56E+002.64E+016.48E-026.00E-015.08E+004.29E+01 + 34K 136.002.82E-022.32E-011.58E+001.03E+013.94E-023.13E-012.30E+001.69E+01 + 34K 165.001.59E-021.14E-016.80E-013.88E+002.37E-021.61E-011.02E+006.47E+00 + 34K 230.006.02E-033.38E-021.61E-017.36E-011.01E-025.35E-022.65E-011.31E+00 + 34K 315.002.48E-031.11E-024.31E-021.60E-014.62E-031.97E-027.84E-023.08E-01 + 34K 400.001.30E-034.97E-031.66E-025.32E-022.60E-039.55E-033.24E-021.09E-01 + 34K 510.007.03E-042.30E-036.66E-031.85E-021.48E-034.71E-031.38E-023.97E-02 + 34K 740.002.98E-047.94E-041.89E-034.34E-036.43E-041.70E-034.07E-039.50E-03 + 34K 1000.001.61E-043.74E-047.78E-041.56E-033.40E-047.85E-041.64E-033.32E-03 + 34K 1250.001.07E-042.26E-044.32E-047.96E-042.16E-044.57E-048.76E-041.61E-03 + 34K 1500.007.85E-051.55E-042.78E-044.81E-041.51E-043.00E-045.39E-049.30E-04 + 34L1 2.655.10E+012.02E+048.67E+061.02E+093.93E+026.40E+051.83E+081.93E+10 + 34L1 3.353.34E+014.46E+032.94E+064.92E+081.95E+022.10E+054.95E+075.88E+09 + 34L1 4.651.76E+013.00E+024.62E+059.64E+077.31E+014.50E+047.98E+069.20E+08 + 34L1 7.855.68E+002.04E+011.07E+043.21E+061.53E+014.03E+034.47E+053.97E+07 + 34L1 11.652.25E+002.97E+011.23E+021.30E+054.70E+006.87E+025.29E+043.56E+06 + 34L1 15.001.21E+002.08E+017.63E+019.77E+032.21E+002.27E+021.38E+047.60E+05 + 34L1 21.005.14E-019.80E+009.80E+014.21E+028.16E-015.32E+012.36E+039.85E+04 + 34L1 29.002.18E-014.03E+005.02E+014.44E+023.15E-011.37E+014.49E+021.42E+04 + 34L1 41.008.46E-021.38E+001.70E+011.81E+021.15E-013.32E+007.88E+011.83E+03 + 34L1 54.003.91E-025.58E-016.24E+006.37E+015.20E-021.11E+002.03E+013.69E+02 + 34L1 71.001.78E-022.18E-012.14E+001.95E+012.40E-023.83E-015.47E+007.76E+01 + 34L1 84.001.10E-021.21E-011.08E+009.02E+001.50E-022.02E-012.48E+003.03E+01 + 34L1 101.006.41E-036.27E-025.00E-013.77E+009.02E-031.02E-011.06E+001.10E+01 + 34L1 124.003.52E-033.00E-022.10E-011.40E+005.17E-034.83E-024.19E-013.64E+00 + 34L1 150.002.02E-031.50E-029.34E-025.51E-013.11E-032.45E-021.81E-011.34E+00 + 34L1 215.007.12E-044.12E-032.02E-029.45E-021.22E-037.15E-033.93E-022.16E-01 + 34L1 300.002.79E-041.28E-035.07E-031.92E-025.30E-042.42E-031.03E-024.39E-02 + 34L1 390.001.38E-045.30E-041.79E-035.80E-032.81E-041.08E-033.83E-031.34E-02 + 34L1 500.007.34E-052.42E-047.08E-041.99E-031.57E-045.17E-041.57E-034.68E-03 + 34L1 730.003.07E-058.23E-051.98E-044.58E-046.71E-051.81E-044.44E-041.06E-03 + 34L11000.001.61E-053.75E-057.84E-051.58E-043.44E-058.03E-051.70E-043.48E-04 + 34L2 2.489.51E+011.50E+061.80E+094.17E+114.26E+012.99E+045.31E+065.84E+08 + 34L2 3.184.57E+014.26E+054.04E+081.03E+111.97E+011.10E+042.16E+063.02E+08 + 34L2 4.481.60E+017.51E+045.14E+071.24E+106.81E+002.77E+035.14E+057.43E+07 + 34L2 7.682.86E+004.94E+031.99E+063.62E+081.27E+003.11E+024.36E+045.08E+06 + 34L2 11.487.47E-016.54E+021.76E+052.40E+073.64E-016.05E+016.40E+035.74E+05 + 34L2 15.002.98E-011.71E+023.50E+043.87E+061.58E-012.03E+011.74E+031.28E+05 + 34L2 21.009.20E-023.18E+014.62E+033.85E+055.51E-025.13E+003.35E+021.89E+04 + 34L2 29.002.90E-026.35E+006.64E+024.18E+042.01E-021.37E+006.80E+012.94E+03 + 34L2 41.008.26E-031.14E+008.36E+013.87E+036.77E-033.33E-011.22E+013.94E+02 + 34L2 54.003.00E-032.92E-011.62E+015.87E+022.85E-031.08E-013.12E+007.94E+01 + 34L2 71.001.09E-037.62E-023.22E+009.11E+011.21E-033.55E-028.06E-011.62E+01 + 34L2 84.005.85E-043.35E-021.20E+002.92E+017.13E-041.80E-023.52E-016.11E+00 + 34L2 101.002.95E-041.37E-024.11E-018.48E+004.00E-048.54E-031.42E-012.11E+00 + 34L2 124.001.38E-045.12E-031.26E-012.17E+002.11E-043.74E-035.24E-026.52E-01 + 34L2 150.006.90E-052.07E-034.25E-026.20E-011.16E-041.75E-032.09E-022.22E-01 + 34L2 215.001.88E-053.88E-045.71E-036.14E-023.81E-054.24E-043.76E-032.98E-02 + 34L2 300.005.84E-068.65E-059.50E-047.79E-031.37E-051.17E-048.00E-044.91E-03 + 34L2 390.002.39E-062.76E-052.44E-041.63E-036.20E-064.34E-052.45E-041.24E-03 + 34L2 500.001.06E-069.78E-067.06E-053.94E-042.95E-061.73E-058.26E-053.53E-04 + 34L2 730.003.29E-072.20E-061.19E-055.16E-059.70E-074.48E-061.69E-055.72E-05 + 34L21000.001.30E-076.91E-073.02E-061.08E-053.94E-071.53E-064.83E-061.38E-05 + 34L3 2.441.90E+023.00E+063.69E+098.78E+111.54E+017.21E+054.98E+093.64E+12 + 34L3 3.148.95E+018.31E+058.05E+082.09E+117.04E+002.04E+058.97E+085.21E+11 + 34L3 4.443.07E+011.43E+059.86E+072.41E+102.41E+003.62E+048.71E+073.67E+10 + 34L3 7.645.32E+009.05E+033.64E+066.63E+084.50E-012.42E+032.39E+066.03E+08 + 34L3 11.441.36E+001.17E+033.11E+054.23E+071.29E-013.24E+021.73E+052.98E+07 + 34L3 15.005.33E-012.95E+025.95E+046.51E+065.61E-028.41E+013.04E+044.05E+06 + 34L3 21.001.62E-015.37E+017.63E+036.29E+051.98E-021.59E+013.63E+033.52E+05 + 34L3 29.005.06E-021.05E+011.06E+036.59E+047.31E-033.24E+004.88E+023.48E+04 + 34L3 41.001.42E-021.81E+001.28E+025.81E+032.51E-035.95E-015.88E+013.03E+03 + 34L3 54.005.09E-034.49E-012.37E+018.38E+021.07E-031.56E-011.12E+014.48E+02 + 34L3 71.001.83E-031.13E-014.46E+001.23E+024.59E-044.20E-022.22E+006.89E+01 + 34L3 84.009.74E-044.83E-021.60E+003.77E+012.73E-041.89E-028.32E-012.21E+01 + 34L3 101.004.89E-041.91E-025.23E-011.04E+011.55E-047.91E-032.87E-016.46E+00 + 34L3 124.002.28E-046.86E-031.51E-012.48E+008.27E-053.03E-038.89E-021.67E+00 + 34L3 150.001.13E-042.67E-034.81E-026.63E-014.64E-051.26E-033.04E-024.85E-01 + 34L3 215.003.06E-054.60E-045.68E-035.62E-021.57E-052.47E-044.17E-034.93E-02 + 34L3 300.009.61E-069.50E-058.23E-046.03E-035.94E-065.71E-056.97E-046.34E-03 + 34L3 390.004.07E-062.88E-051.89E-041.10E-032.82E-061.88E-051.77E-041.33E-03 + 34L3 500.001.87E-069.79E-064.95E-052.32E-041.42E-066.82E-065.04E-053.15E-04 + 34L3 730.006.21E-072.14E-067.42E-062.54E-055.33E-071.61E-068.02E-063.86E-05 + 34L31000.002.76E-076.91E-071.80E-064.82E-062.50E-075.45E-071.91E-067.37E-06 + 34M1 1.233.08E+016.86E+041.63E+078.51E+086.22E+024.66E+065.90E+092.73E+12 + 34M1 2.231.18E+013.61E+032.39E+063.60E+081.05E+022.58E+051.47E+084.56E+10 + 34M1 4.233.41E+003.77E+018.80E+042.14E+071.54E+011.22E+043.17E+065.93E+08 + 34M1 8.237.92E-015.79E+007.43E+022.89E+052.10E+005.54E+026.91E+047.25E+06 + 34M1 15.231.80E-013.25E+001.63E+011.18E+033.36E-013.54E+012.32E+031.39E+05 + 34M1 25.005.03E-029.55E-011.13E+018.06E+017.74E-024.19E+001.67E+026.35E+03 + 34M1 40.001.41E-022.32E-012.85E+003.00E+011.96E-025.98E-011.50E+013.69E+02 + 34M1 52.006.78E-039.82E-021.11E+001.13E+019.20E-032.09E-014.07E+007.85E+01 + 34M1 70.002.91E-033.57E-023.49E-013.19E+003.96E-036.53E-029.63E-011.41E+01 + 34M1 103.009.52E-049.14E-037.22E-025.40E-011.36E-031.52E-021.58E-011.63E+00 + 34M1 150.003.18E-042.36E-031.46E-028.57E-024.93E-043.92E-032.92E-022.18E-01 + 34M2 1.176.06E+019.81E+063.99E+103.12E+136.27E+011.49E+058.88E+073.51E+10 + 34M2 2.171.43E+014.35E+058.01E+084.29E+119.52E+001.02E+044.19E+061.30E+09 + 34M2 4.172.42E+001.62E+041.39E+074.64E+091.28E+006.49E+021.66E+053.47E+07 + 34M2 8.173.15E-015.51E+022.25E+054.40E+071.62E-013.98E+016.00E+037.62E+05 + 34M2 15.174.15E-022.49E+015.26E+036.05E+052.38E-023.13E+002.79E+022.15E+04 + 34M2 25.007.41E-032.07E+002.58E+021.90E+045.02E-034.03E-012.32E+011.17E+03 + 34M2 40.001.38E-032.02E-011.54E+017.43E+021.16E-035.89E-022.24E+007.48E+01 + 34M2 52.005.33E-045.53E-023.24E+001.23E+025.09E-042.02E-026.07E-011.61E+01 + 34M2 70.001.79E-041.29E-025.58E-011.61E+012.01E-046.02E-031.39E-012.85E+00 + 34M2 103.004.34E-051.98E-035.87E-021.20E+006.00E-051.26E-032.08E-023.05E-01 + 34M2 150.001.09E-053.30E-046.80E-039.96E-021.86E-052.80E-043.35E-033.57E-02 + 34M3 1.161.20E+021.87E+077.64E+105.94E+132.17E+014.67E+061.40E+114.30E+14 + 34M3 2.162.75E+018.11E+051.49E+097.92E+113.26E+002.10E+051.96E+092.57E+12 + 34M3 4.164.53E+002.95E+042.52E+078.34E+094.38E-017.97E+032.31E+071.34E+10 + 34M3 8.165.76E-019.82E+023.96E+057.66E+075.56E-022.78E+022.63E+057.18E+07 + 34M3 15.167.41E-024.31E+018.90E+031.01E+068.33E-031.28E+014.76E+036.78E+05 + 34M3 25.001.29E-023.45E+004.17E+023.02E+041.79E-031.08E+002.03E+021.74E+04 + 34M3 40.002.37E-033.21E-012.35E+011.11E+034.22E-041.07E-011.12E+016.09E+02 + 34M3 52.009.02E-048.53E-024.74E+001.75E+021.88E-043.00E-022.30E+009.71E+01 + 34M3 70.003.00E-041.90E-027.73E-012.16E+017.54E-057.19E-033.93E-011.25E+01 + 34M3 103.007.15E-052.73E-037.40E-021.45E+002.30E-051.15E-034.14E-029.31E-01 + 34M3 150.001.78E-054.23E-047.66E-031.06E-017.34E-062.01E-044.90E-037.90E-02 + 34M4 1.068.84E+012.90E+052.29E+104.24E+142.91E+006.10E+049.32E+082.06E+12 + 34M4 2.067.75E+009.33E+032.06E+081.38E+123.03E-012.11E+031.15E+071.46E+10 + 34M4 4.065.42E-012.70E+021.66E+064.34E+092.81E-026.71E+011.41E+059.73E+07 + 34M4 8.063.11E-026.99E+001.26E+041.37E+072.34E-032.03E+001.74E+036.35E+05 + 34M4 15.062.01E-032.32E-011.48E+027.49E+042.26E-048.28E-023.30E+016.63E+03 + 34M4 25.002.03E-041.39E-024.06E+001.13E+033.24E-056.15E-031.35E+001.67E+02 + 34M4 40.002.30E-059.98E-041.46E-012.39E+015.17E-065.50E-047.13E-025.58E+00 + 34M4 52.006.78E-062.28E-042.31E-022.81E+001.84E-061.43E-041.39E-028.45E-01 + 34M4 70.001.69E-064.28E-052.89E-032.52E-015.64E-073.11E-052.19E-031.01E-01 + 34M4 103.002.74E-074.95E-062.00E-041.14E-021.21E-074.31E-062.03E-046.48E-03 + 34M4 150.004.88E-086.21E-071.54E-055.87E-042.69E-086.35E-072.04E-054.64E-04 + 34M5 1.061.30E+024.09E+053.43E+106.17E+141.87E+008.49E+034.06E+093.15E+14 + 34M5 2.061.13E+011.31E+043.08E+082.01E+122.00E-013.07E+023.86E+078.50E+11 + 34M5 4.067.85E-013.77E+022.47E+066.24E+091.93E-021.04E+013.35E+052.17E+09 + 34M5 8.064.47E-029.68E+001.86E+041.94E+071.69E-033.45E-012.80E+035.72E+06 + 34M5 15.062.87E-033.17E-012.15E+021.04E+051.71E-041.55E-023.61E+012.84E+04 + 34M5 25.002.88E-041.87E-025.78E+001.53E+032.54E-051.26E-031.08E+004.19E+02 + 34M5 40.003.26E-051.32E-032.03E-013.10E+014.22E-061.23E-044.24E-029.02E+00 + 34M5 52.009.57E-062.96E-043.14E-023.54E+001.53E-063.35E-057.08E-031.09E+00 + 34M5 70.002.38E-065.47E-053.81E-033.05E-014.86E-077.75E-069.47E-041.02E-01 + 34M5 103.003.89E-076.15E-062.50E-041.28E-021.09E-071.18E-067.15E-054.95E-03 + 34M5 150.007.04E-087.50E-071.82E-056.02E-042.59E-081.92E-076.04E-062.73E-04 + 35K 14.471.81E+011.69E+024.51E+028.28E+022.73E+011.66E+031.74E+046.12E+04 + 35K 15.171.60E+011.77E+027.79E+022.73E+032.37E+011.38E+031.71E+049.84E+04 + 35K 16.471.29E+011.74E+021.23E+037.53E+031.86E+019.97E+021.49E+041.37E+05 + 35K 19.678.02E+001.35E+021.50E+031.53E+041.10E+014.97E+029.12E+031.29E+05 + 35K 23.474.95E+009.09E+011.20E+031.49E+046.50E+002.49E+024.87E+038.08E+04 + 35K 27.003.36E+006.26E+018.70E+021.15E+044.30E+001.45E+022.81E+034.87E+04 + 35K 33.001.91E+003.46E+014.84E+026.49E+032.38E+006.63E+011.23E+032.10E+04 + 35K 41.001.03E+001.73E+012.30E+022.94E+031.27E+002.88E+014.82E+027.68E+03 + 35K 53.004.90E-017.29E+008.71E+011.00E+036.04E-011.08E+011.56E+022.19E+03 + 35K 66.002.58E-013.38E+003.60E+013.69E+023.23E-014.76E+005.93E+017.26E+02 + 35K 83.001.31E-011.49E+001.38E+011.23E+021.70E-012.04E+002.16E+012.26E+02 + 35K 96.008.49E-028.77E-017.44E+006.04E+011.14E-011.21E+001.15E+011.08E+02 + 35K 113.005.23E-024.83E-013.68E+002.69E+017.29E-026.73E-015.65E+004.72E+01 + 35K 136.003.02E-022.44E-011.65E+001.06E+014.42E-023.51E-012.56E+001.86E+01 + 35K 165.001.70E-021.20E-017.11E-014.02E+002.65E-021.80E-011.14E+007.16E+00 + 35K 230.006.47E-033.59E-021.70E-017.69E-011.13E-025.98E-022.95E-011.45E+00 + 35K 315.002.67E-031.19E-024.58E-021.69E-015.15E-032.20E-028.71E-023.41E-01 + 35K 400.001.41E-035.33E-031.77E-025.64E-022.89E-031.06E-023.60E-021.20E-01 + 35K 510.007.61E-042.47E-037.14E-031.98E-021.64E-035.24E-031.53E-024.39E-02 + 35K 740.003.23E-048.59E-042.04E-034.67E-037.12E-041.88E-034.51E-031.05E-02 + 35K 1000.001.75E-044.06E-048.44E-041.69E-033.75E-048.69E-041.82E-033.67E-03 + 35K 1250.001.16E-042.46E-044.70E-048.65E-042.38E-045.05E-049.69E-041.79E-03 + 35K 1500.008.50E-051.68E-043.03E-045.23E-041.66E-043.31E-045.95E-041.03E-03 + 35L1 2.784.66E+011.86E+047.19E+067.56E+083.91E+026.13E+051.67E+081.61E+10 + 35L1 3.483.12E+014.44E+032.62E+063.97E+082.00E+022.11E+054.76E+075.27E+09 + 35L1 4.781.68E+013.60E+024.52E+058.66E+077.73E+014.72E+048.12E+068.88E+08 + 35L1 7.985.61E+001.34E+011.26E+043.35E+061.67E+014.44E+034.82E+054.14E+07 + 35L1 11.782.27E+002.56E+012.21E+021.56E+055.22E+007.70E+025.85E+043.84E+06 + 35L1 16.001.07E+001.72E+016.06E+017.51E+032.10E+002.01E+021.15E+045.93E+05 + 35L1 22.004.76E-018.49E+007.75E+013.41E+028.15E-015.09E+012.16E+038.58E+04 + 35L1 30.002.10E-013.65E+004.22E+013.38E+023.27E-011.38E+014.38E+021.33E+04 + 35L1 42.008.37E-021.31E+001.52E+011.51E+021.22E-013.48E+008.06E+011.82E+03 + 35L1 55.003.94E-025.41E-015.79E+005.62E+015.64E-021.19E+002.14E+013.80E+02 + 35L1 72.001.83E-022.16E-012.04E+001.80E+012.63E-024.16E-015.86E+008.19E+01 + 35L1 85.001.13E-021.21E-011.05E+008.50E+001.65E-022.21E-012.68E+003.23E+01 + 35L1 102.006.67E-036.36E-024.94E-013.63E+009.98E-031.12E-011.15E+001.19E+01 + 35L1 125.003.69E-033.07E-022.11E-011.37E+005.74E-035.34E-024.60E-013.96E+00 + 35L1 150.002.17E-031.60E-029.76E-025.67E-013.53E-032.79E-022.05E-011.51E+00 + 35L1 215.007.68E-044.40E-032.13E-029.88E-021.38E-038.10E-034.45E-022.44E-01 + 35L1 300.003.02E-041.37E-035.41E-032.03E-025.97E-042.73E-031.17E-024.94E-02 + 35L1 390.001.50E-045.73E-041.92E-036.19E-033.16E-041.21E-034.31E-031.51E-02 + 35L1 500.008.01E-052.63E-047.64E-042.14E-031.76E-045.81E-041.76E-035.25E-03 + 35L1 730.003.35E-058.96E-052.15E-044.97E-047.50E-052.03E-044.98E-041.19E-03 + 35L11000.001.76E-054.10E-058.57E-051.73E-043.82E-058.98E-051.90E-043.89E-04 + 35L2 2.608.83E+011.36E+061.55E+093.30E+114.26E+012.84E+044.62E+064.54E+08 + 35L2 3.304.38E+014.06E+053.71E+088.85E+102.04E+011.09E+041.99E+062.55E+08 + 35L2 4.601.59E+017.57E+045.04E+071.16E+107.28E+002.87E+035.04E+056.84E+07 + 35L2 7.802.97E+005.27E+032.09E+063.68E+081.41E+003.37E+024.58E+045.12E+06 + 35L2 11.607.95E-017.16E+021.91E+052.54E+074.10E-016.71E+016.93E+036.05E+05 + 35L2 16.002.65E-011.43E+022.74E+042.84E+061.50E-011.81E+011.46E+031.01E+05 + 35L2 22.008.71E-022.91E+014.04E+033.21E+055.56E-024.93E+003.06E+021.65E+04 + 35L2 30.002.89E-026.21E+006.28E+023.82E+042.11E-021.39E+006.64E+012.77E+03 + 35L2 42.008.54E-031.17E+008.41E+013.80E+037.35E-033.52E-011.26E+013.94E+02 + 35L2 55.003.18E-033.10E-011.69E+016.01E+023.16E-031.17E-013.31E+008.23E+01 + 35L2 72.001.18E-038.27E-023.46E+009.63E+011.36E-033.93E-028.76E-011.73E+01 + 35L2 85.006.40E-043.69E-021.31E+003.14E+018.08E-042.01E-023.87E-016.63E+00 + 35L2 102.003.27E-041.53E-024.53E-019.25E+004.57E-049.63E-031.59E-012.32E+00 + 35L2 125.001.55E-045.76E-031.41E-012.40E+002.42E-044.26E-035.90E-027.27E-01 + 35L2 150.007.94E-052.43E-034.99E-027.26E-011.37E-042.06E-032.45E-022.59E-01 + 35L2 215.002.16E-054.55E-046.72E-037.21E-024.51E-055.00E-044.42E-033.50E-02 + 35L2 300.006.71E-061.02E-041.12E-039.17E-031.63E-051.38E-049.45E-045.78E-03 + 35L2 390.002.76E-063.26E-052.88E-041.92E-037.35E-065.14E-052.90E-041.47E-03 + 35L2 500.001.23E-061.15E-058.35E-054.66E-043.50E-062.06E-059.79E-054.18E-04 + 35L2 730.003.79E-072.59E-061.41E-056.12E-051.15E-065.34E-062.01E-056.78E-05 + 35L21000.001.50E-078.18E-073.59E-061.28E-054.68E-071.82E-065.76E-061.64E-05 + 35L3 2.551.77E+022.73E+063.20E+097.00E+111.52E+016.97E+054.64E+093.24E+12 + 35L3 3.258.60E+017.95E+057.42E+081.80E+117.21E+002.08E+058.96E+085.02E+11 + 35L3 4.553.06E+011.44E+059.68E+072.24E+102.55E+003.88E+049.30E+073.82E+10 + 35L3 7.755.52E+009.64E+033.81E+066.73E+084.92E-012.72E+032.72E+066.77E+08 + 35L3 11.551.45E+001.28E+033.36E+054.47E+071.44E-013.74E+022.02E+053.45E+07 + 35L3 16.004.70E-012.45E+024.61E+044.73E+065.26E-027.41E+012.51E+043.14E+06 + 35L3 22.001.53E-014.88E+016.60E+035.18E+051.97E-021.53E+013.36E+033.11E+05 + 35L3 30.004.99E-021.01E+019.93E+025.94E+047.55E-033.32E+004.88E+023.37E+04 + 35L3 42.001.45E-021.84E+001.27E+025.62E+032.67E-036.39E-016.23E+013.13E+03 + 35L3 55.005.35E-034.72E-012.45E+018.47E+021.16E-031.73E-011.23E+014.81E+02 + 35L3 72.001.96E-031.21E-014.74E+001.28E+025.05E-044.73E-022.49E+007.62E+01 + 35L3 85.001.06E-035.25E-021.73E+004.00E+013.03E-042.14E-029.43E-012.48E+01 + 35L3 102.005.36E-042.10E-025.71E-011.12E+011.73E-049.05E-033.28E-017.33E+00 + 35L3 125.002.52E-047.62E-031.67E-012.71E+009.30E-053.49E-031.03E-011.92E+00 + 35L3 150.001.29E-043.09E-035.58E-027.67E-015.35E-051.50E-033.67E-025.86E-01 + 35L3 215.003.53E-055.33E-046.59E-036.51E-021.82E-052.93E-045.00E-035.93E-02 + 35L3 300.001.11E-051.10E-049.57E-047.00E-036.85E-066.76E-058.35E-047.61E-03 + 35L3 390.004.65E-063.34E-052.20E-041.27E-033.25E-062.21E-052.12E-041.59E-03 + 35L3 500.002.13E-061.13E-055.77E-052.70E-041.64E-068.02E-066.00E-053.76E-04 + 35L3 730.007.18E-072.48E-068.63E-062.96E-056.15E-071.88E-069.51E-064.60E-05 + 35L31000.003.16E-077.97E-072.09E-065.61E-062.89E-076.34E-072.26E-068.76E-06 + 35M1 1.262.98E+017.01E+041.39E+071.40E+096.83E+025.19E+066.61E+092.96E+12 + 35M1 2.261.17E+014.06E+032.38E+063.09E+081.18E+023.00E+051.72E+085.23E+10 + 35M1 4.263.46E+005.60E+019.86E+042.21E+071.76E+011.44E+043.78E+066.98E+08 + 35M1 8.268.20E-014.52E+001.03E+033.41E+052.43E+006.59E+028.25E+048.59E+06 + 35M1 15.261.89E-013.09E+001.16E+011.84E+033.89E-014.20E+012.75E+031.65E+05 + 35M1 25.005.35E-029.60E-011.02E+016.28E+019.01E-024.97E+001.98E+027.52E+03 + 35M1 40.001.51E-022.40E-012.79E+002.73E+012.28E-027.04E-011.77E+014.34E+02 + 35M1 52.007.30E-031.03E-011.11E+001.08E+011.07E-022.45E-014.77E+009.19E+01 + 35M1 70.003.15E-033.77E-023.58E-013.17E+004.59E-037.62E-021.12E+001.65E+01 + 35M1 103.001.04E-039.76E-037.55E-025.53E-011.57E-031.77E-021.83E-011.89E+00 + 35M1 150.003.46E-042.54E-031.55E-028.95E-025.68E-044.53E-033.38E-022.52E-01 + 35M2 1.196.03E+011.05E+074.30E+103.26E+137.01E+011.66E+059.62E+073.59E+10 + 35M2 2.191.48E+014.87E+059.02E+084.72E+111.09E+011.18E+044.70E+061.41E+09 + 35M2 4.192.59E+001.85E+041.60E+075.26E+091.50E+007.57E+021.91E+053.89E+07 + 35M2 8.193.47E-016.40E+022.63E+055.07E+071.90E-014.69E+016.96E+038.71E+05 + 35M2 15.194.66E-022.92E+016.18E+037.05E+052.82E-023.70E+003.27E+022.49E+04 + 35M2 25.008.45E-032.45E+003.06E+022.25E+045.99E-034.80E-012.75E+011.37E+03 + 35M2 40.001.59E-032.39E-011.84E+018.80E+021.38E-037.03E-022.66E+008.82E+01 + 35M2 52.006.17E-046.57E-023.85E+001.45E+026.10E-042.41E-027.22E-011.91E+01 + 35M2 70.002.09E-041.53E-026.66E-011.92E+012.41E-047.21E-031.66E-013.38E+00 + 35M2 103.005.08E-052.36E-037.02E-021.43E+007.22E-051.52E-032.49E-023.63E-01 + 35M2 150.001.28E-053.95E-048.16E-031.19E-012.24E-053.37E-044.02E-034.27E-02 + 35M3 1.181.20E+022.01E+078.27E+106.23E+132.41E+015.34E+061.64E+115.10E+14 + 35M3 2.182.86E+019.08E+051.68E+098.73E+113.70E+002.50E+052.42E+093.20E+12 + 35M3 4.184.85E+003.38E+042.89E+079.43E+095.05E-019.69E+032.91E+071.71E+10 + 35M3 8.186.33E-011.14E+034.61E+058.79E+076.45E-023.41E+023.33E+059.16E+07 + 35M3 15.188.29E-025.02E+011.04E+041.17E+069.71E-031.58E+016.02E+038.61E+05 + 35M3 25.001.47E-024.05E+004.92E+023.55E+042.10E-031.33E+002.57E+022.21E+04 + 35M3 40.002.72E-033.78E-012.78E+011.30E+034.96E-041.33E-011.41E+017.67E+02 + 35M3 52.001.04E-031.00E-015.60E+002.06E+022.21E-043.71E-022.88E+001.22E+02 + 35M3 70.003.47E-042.25E-029.15E-012.55E+018.87E-058.86E-034.90E-011.57E+01 + 35M3 103.008.31E-053.23E-038.77E-021.71E+002.71E-051.41E-035.14E-021.16E+00 + 35M3 150.002.08E-055.01E-049.10E-031.25E-018.66E-062.46E-046.06E-039.78E-02 + 35M4 1.079.92E+013.35E+052.74E+105.21E+143.48E+007.55E+041.18E+092.56E+12 + 35M4 2.079.07E+001.12E+042.59E+081.78E+123.73E-012.70E+031.51E+071.89E+10 + 35M4 4.076.55E-013.31E+022.14E+065.71E+093.52E-028.73E+011.86E+051.28E+08 + 35M4 8.073.85E-028.73E+001.65E+041.81E+072.98E-032.67E+002.32E+038.45E+05 + 35M4 15.072.54E-032.94E-011.95E+029.99E+042.91E-041.10E-014.42E+018.86E+03 + 35M4 25.002.59E-041.79E-025.37E+001.52E+034.21E-058.19E-031.82E+002.24E+02 + 35M4 40.002.96E-051.29E-031.94E-013.20E+016.76E-067.34E-049.60E-027.51E+00 + 35M4 52.008.81E-062.97E-043.07E-023.77E+002.41E-061.91E-041.87E-021.14E+00 + 35M4 70.002.22E-065.60E-053.84E-033.39E-017.42E-074.16E-052.96E-031.36E-01 + 35M4 103.003.62E-076.50E-062.66E-041.54E-021.59E-075.78E-062.74E-048.75E-03 + 35M4 150.006.25E-088.20E-072.06E-057.91E-043.56E-088.53E-072.76E-056.27E-04 + 35M5 1.071.46E+024.73E+054.15E+107.66E+142.23E+001.04E+045.23E+094.19E+14 + 35M5 2.071.32E+011.57E+043.89E+082.59E+122.45E-013.88E+025.17E+071.18E+12 + 35M5 4.079.48E-014.61E+023.19E+068.22E+092.41E-021.33E+014.58E+053.08E+09 + 35M5 8.075.53E-021.21E+012.43E+042.57E+072.14E-034.46E-013.85E+038.16E+06 + 35M5 15.073.61E-034.01E-012.83E+021.38E+052.18E-042.02E-024.99E+014.04E+04 + 35M5 25.003.68E-042.40E-027.66E+002.05E+033.28E-051.64E-031.49E+005.95E+02 + 35M5 40.004.20E-051.70E-032.69E-014.15E+015.48E-061.61E-045.88E-021.27E+01 + 35M5 52.001.24E-053.84E-044.17E-024.74E+002.00E-064.39E-059.79E-031.53E+00 + 35M5 70.003.08E-067.11E-055.06E-034.09E-016.35E-071.02E-051.30E-031.43E-01 + 35M5 103.005.06E-078.04E-063.33E-041.72E-021.43E-071.55E-069.80E-056.89E-03 + 35M5 150.009.37E-089.89E-072.42E-058.08E-043.40E-082.53E-078.25E-063.79E-04 + 36K 15.331.62E+011.40E+023.37E+025.40E+022.61E+011.49E+031.46E+044.62E+04 + 36K 16.031.44E+011.47E+025.82E+021.81E+032.28E+011.25E+031.44E+047.46E+04 + 36K 17.331.17E+011.46E+029.28E+025.10E+031.81E+019.20E+021.28E+041.06E+05 + 36K 20.537.45E+001.17E+021.18E+031.10E+041.10E+014.74E+028.09E+031.05E+05 + 36K 24.334.69E+008.04E+019.81E+021.13E+046.63E+002.44E+024.48E+036.92E+04 + 36K 28.003.18E+005.57E+017.25E+028.98E+034.37E+001.41E+022.60E+034.23E+04 + 36K 34.001.85E+003.16E+014.18E+025.29E+032.47E+006.65E+011.17E+031.90E+04 + 36K 42.001.01E+001.63E+012.06E+022.51E+031.33E+002.95E+014.75E+027.25E+03 + 36K 54.004.90E-017.02E+008.07E+018.91E+026.46E-011.13E+011.59E+022.15E+03 + 36K 67.002.61E-013.32E+003.42E+013.38E+023.49E-015.06E+006.14E+017.30E+02 + 36K 84.001.34E-011.48E+001.34E+011.16E+021.85E-012.20E+002.28E+012.33E+02 + 36K 97.008.75E-028.83E-017.30E+005.79E+011.24E-011.30E+001.21E+011.12E+02 + 36K 114.005.42E-024.90E-013.66E+002.61E+017.98E-027.30E-016.04E+004.96E+01 + 36K 137.003.15E-022.50E-011.66E+001.05E+014.86E-023.83E-012.76E+001.98E+01 + 36K 165.001.82E-021.27E-017.42E-014.14E+002.97E-022.02E-011.26E+007.89E+00 + 36K 230.006.94E-033.81E-021.79E-018.01E-011.26E-026.66E-023.27E-011.60E+00 + 36K 315.002.87E-031.27E-024.84E-021.77E-015.73E-032.45E-029.65E-023.77E-01 + 36K 400.001.52E-035.70E-031.88E-025.97E-023.21E-031.18E-023.99E-021.33E-01 + 36K 510.008.21E-042.66E-037.63E-032.11E-021.82E-035.81E-031.70E-024.85E-02 + 36K 740.003.49E-049.28E-042.20E-035.02E-037.86E-042.08E-034.99E-031.16E-02 + 36K 1000.001.89E-044.39E-049.13E-041.83E-034.13E-049.60E-042.01E-034.05E-03 + 36K 1250.001.26E-042.67E-045.10E-049.38E-042.61E-045.58E-041.07E-031.97E-03 + 36K 1500.009.20E-051.83E-043.29E-045.69E-041.82E-043.65E-046.57E-041.13E-03 + 36L1 2.924.24E+011.68E+045.88E+065.49E+083.86E+025.80E+051.50E+081.33E+10 + 36L1 3.622.89E+014.35E+032.29E+063.15E+082.03E+022.08E+054.51E+074.64E+09 + 36L1 4.921.60E+014.15E+024.34E+057.63E+078.10E+014.90E+048.15E+068.43E+08 + 36L1 8.125.51E+008.26E+001.44E+043.41E+061.81E+014.84E+035.14E+054.27E+07 + 36L1 11.922.27E+002.17E+013.55E+021.81E+055.76E+008.58E+026.41E+044.11E+06 + 36L1 16.001.11E+001.59E+013.89E+011.15E+042.40E+002.34E+021.33E+046.82E+05 + 36L1 22.004.96E-018.23E+006.37E+013.63E+029.31E-015.92E+012.50E+039.86E+04 + 36L1 30.002.20E-013.63E+003.85E+012.66E+023.73E-011.60E+015.06E+021.53E+04 + 36L1 42.008.83E-021.33E+001.46E+011.35E+021.40E-014.01E+009.26E+012.08E+03 + 36L1 55.004.17E-025.56E-015.73E+005.30E+016.42E-021.36E+002.45E+014.34E+02 + 36L1 72.001.94E-022.24E-012.06E+001.75E+012.99E-024.76E-016.69E+009.32E+01 + 36L1 85.001.21E-021.26E-011.07E+008.41E+001.87E-022.53E-013.06E+003.68E+01 + 36L1 102.007.13E-036.67E-025.07E-013.64E+001.13E-021.28E-011.31E+001.34E+01 + 36L1 125.003.95E-033.24E-022.18E-011.39E+006.50E-036.06E-025.22E-014.48E+00 + 36L1 150.002.33E-031.69E-021.02E-015.82E-013.98E-033.16E-022.33E-011.71E+00 + 36L1 215.008.29E-044.69E-032.25E-021.03E-011.55E-039.14E-035.02E-022.75E-01 + 36L1 300.003.27E-041.47E-035.75E-032.15E-026.71E-043.08E-031.31E-025.56E-02 + 36L1 390.001.62E-046.17E-042.06E-036.59E-033.54E-041.36E-034.83E-031.70E-02 + 36L1 500.008.67E-052.84E-048.23E-042.30E-031.97E-046.52E-041.97E-035.88E-03 + 36L1 730.003.65E-059.74E-052.33E-045.39E-048.35E-052.27E-045.57E-041.33E-03 + 36L11000.001.92E-054.47E-059.35E-051.88E-044.25E-051.00E-042.12E-044.34E-04 + 36L2 2.738.13E+011.22E+061.31E+092.56E+114.23E+012.66E+043.96E+063.45E+08 + 36L2 3.434.17E+013.83E+053.35E+087.41E+102.09E+011.07E+041.81E+062.11E+08 + 36L2 4.731.58E+017.53E+044.86E+071.05E+107.71E+002.93E+034.87E+056.19E+07 + 36L2 7.933.07E+005.56E+032.16E+063.68E+081.55E+003.62E+024.74E+045.09E+06 + 36L2 11.738.41E-017.78E+022.05E+052.66E+074.59E-017.39E+017.43E+036.30E+05 + 36L2 16.002.93E-011.64E+023.15E+043.23E+061.74E-012.09E+011.66E+031.13E+05 + 36L2 22.009.69E-023.35E+014.65E+033.66E+056.46E-025.70E+003.50E+021.86E+04 + 36L2 30.003.23E-027.16E+007.25E+024.37E+042.45E-021.61E+007.62E+013.15E+03 + 36L2 42.009.62E-031.35E+009.73E+014.37E+038.57E-034.09E-011.45E+014.51E+02 + 36L2 55.003.60E-033.58E-011.96E+016.93E+023.69E-031.37E-013.83E+009.46E+01 + 36L2 72.001.34E-039.58E-024.02E+001.11E+021.59E-034.59E-021.02E+001.99E+01 + 36L2 85.007.28E-044.27E-021.52E+003.64E+019.46E-042.34E-024.50E-017.66E+00 + 36L2 102.003.72E-041.77E-025.28E-011.07E+015.35E-041.13E-021.85E-012.69E+00 + 36L2 125.001.77E-046.70E-031.64E-012.79E+002.84E-044.99E-036.88E-028.44E-01 + 36L2 150.009.10E-052.82E-035.82E-028.46E-011.61E-042.42E-032.86E-023.01E-01 + 36L2 215.002.51E-055.31E-047.86E-038.42E-025.31E-055.88E-045.18E-034.08E-02 + 36L2 300.007.84E-061.19E-041.31E-031.07E-021.92E-051.63E-041.11E-036.77E-03 + 36L2 390.003.22E-063.82E-053.38E-042.26E-038.69E-066.07E-053.41E-041.72E-03 + 36L2 500.001.43E-061.35E-059.83E-055.49E-044.14E-062.43E-051.15E-044.92E-04 + 36L2 730.004.48E-073.05E-061.67E-057.21E-051.37E-066.32E-062.37E-058.01E-05 + 36L21000.001.77E-079.62E-074.24E-061.52E-055.55E-072.16E-066.83E-061.94E-05 + 36L3 2.671.63E+022.44E+062.72E+095.46E+111.50E+016.63E+054.24E+092.82E+12 + 36L3 3.378.19E+017.50E+056.71E+081.52E+117.31E+002.08E+058.76E+084.71E+11 + 36L3 4.673.02E+011.43E+059.35E+072.05E+102.67E+004.09E+049.76E+073.88E+10 + 36L3 7.875.69E+001.02E+043.95E+066.73E+085.34E-013.04E+033.06E+067.47E+08 + 36L3 11.671.53E+001.38E+033.60E+054.67E+071.58E-014.28E+022.35E+053.95E+07 + 36L3 16.005.17E-012.80E+025.27E+045.35E+066.00E-028.94E+013.10E+043.87E+06 + 36L3 22.001.69E-015.58E+017.56E+035.88E+052.24E-021.85E+014.13E+033.81E+05 + 36L3 30.005.55E-021.16E+011.14E+036.76E+048.62E-034.00E+005.98E+024.12E+04 + 36L3 42.001.63E-022.11E+001.46E+026.42E+033.05E-037.68E-017.60E+013.82E+03 + 36L3 55.006.01E-035.41E-012.82E+019.69E+021.33E-032.07E-011.49E+015.84E+02 + 36L3 72.002.21E-031.39E-015.46E+001.47E+025.79E-045.66E-023.02E+009.21E+01 + 36L3 85.001.19E-036.04E-021.99E+004.59E+013.47E-042.56E-021.14E+002.99E+01 + 36L3 102.006.05E-042.42E-026.58E-011.28E+011.99E-041.08E-023.96E-018.84E+00 + 36L3 125.002.86E-048.78E-031.93E-013.12E+001.07E-044.16E-031.23E-012.31E+00 + 36L3 150.001.46E-043.56E-036.45E-028.83E-016.14E-051.79E-034.40E-027.03E-01 + 36L3 215.004.01E-056.15E-047.62E-037.52E-022.09E-053.47E-045.99E-037.10E-02 + 36L3 300.001.26E-051.27E-041.11E-038.09E-037.88E-067.97E-059.95E-049.09E-03 + 36L3 390.005.32E-063.86E-052.54E-041.47E-033.74E-062.60E-052.52E-041.89E-03 + 36L3 500.002.45E-061.31E-056.68E-053.13E-041.89E-069.39E-067.11E-054.48E-04 + 36L3 730.008.26E-072.86E-061.00E-053.43E-057.06E-072.19E-061.12E-055.45E-05 + 36L31000.003.64E-079.22E-072.41E-066.50E-063.31E-077.35E-072.66E-061.04E-05 + 36M1 1.292.84E+016.98E+041.14E+071.95E+097.37E+025.62E+067.13E+093.07E+12 + 36M1 2.291.16E+014.46E+032.33E+062.55E+081.32E+023.41E+051.97E+085.84E+10 + 36M1 4.293.50E+007.77E+011.08E+052.23E+072.00E+011.68E+044.44E+068.08E+08 + 36M1 8.298.45E-013.38E+001.37E+033.94E+052.79E+007.78E+029.75E+041.01E+07 + 36M1 15.291.98E-012.92E+008.61E+002.68E+034.49E-014.95E+013.25E+031.93E+05 + 36M1 25.005.68E-029.62E-019.10E+005.08E+011.04E-015.87E+002.34E+028.87E+03 + 36M1 40.001.62E-022.47E-012.72E+002.46E+012.64E-028.26E-012.08E+015.08E+02 + 36M1 52.007.84E-031.07E-011.11E+001.03E+011.23E-022.86E-015.58E+001.07E+02 + 36M1 70.003.39E-033.96E-023.66E-013.12E+005.29E-038.87E-021.31E+001.91E+01 + 36M1 103.001.12E-031.04E-027.82E-025.53E-011.80E-032.04E-022.12E-012.19E+00 + 36M1 150.003.78E-042.73E-031.64E-029.32E-026.52E-045.22E-033.89E-022.90E-01 + 36M1 280.006.44E-053.03E-041.23E-034.78E-031.30E-046.31E-042.85E-031.28E-02 + 36M1 500.001.42E-054.63E-051.34E-043.74E-043.22E-051.07E-043.25E-049.71E-04 + 36M2 1.225.81E+011.07E+074.31E+103.10E+137.58E+011.77E+059.70E+073.35E+10 + 36M2 2.221.50E+015.28E+059.74E+084.93E+111.23E+011.31E+045.07E+061.45E+09 + 36M2 4.222.74E+002.09E+041.80E+075.78E+091.72E+008.67E+022.14E+054.23E+07 + 36M2 8.223.78E-017.35E+023.02E+055.75E+072.22E-015.45E+017.97E+039.79E+05 + 36M2 15.225.19E-023.39E+017.19E+038.12E+053.32E-024.33E+003.79E+022.85E+04 + 36M2 25.009.59E-032.88E+003.62E+022.64E+047.12E-035.69E-013.23E+011.60E+03 + 36M2 40.001.83E-032.82E-012.17E+011.04E+031.65E-038.35E-023.14E+001.04E+02 + 36M2 52.007.11E-047.75E-024.56E+001.72E+027.28E-042.87E-028.55E-012.24E+01 + 36M2 70.002.42E-041.81E-027.91E-012.27E+012.88E-048.60E-031.97E-013.99E+00 + 36M2 103.005.93E-052.80E-038.36E-021.70E+008.66E-051.81E-032.96E-024.31E-01 + 36M2 150.001.50E-054.70E-049.74E-031.42E-012.69E-054.04E-044.80E-035.08E-02 + 36M3 1.211.16E+022.05E+078.29E+105.94E+132.58E+015.78E+061.78E+115.48E+14 + 36M3 2.212.90E+019.84E+051.81E+099.10E+114.11E+002.87E+052.84E+093.77E+12 + 36M3 4.215.13E+003.80E+043.25E+071.03E+105.73E-011.15E+043.57E+072.11E+10 + 36M3 8.216.88E-011.30E+035.27E+059.92E+077.42E-024.14E+024.16E+051.15E+08 + 36M3 15.219.21E-025.81E+011.20E+041.34E+061.12E-021.93E+017.54E+031.08E+06 + 36M3 25.001.66E-024.74E+005.77E+024.14E+042.45E-031.65E+003.23E+022.79E+04 + 36M3 40.003.10E-034.43E-013.27E+011.53E+035.79E-041.63E-011.76E+019.60E+02 + 36M3 52.001.19E-031.18E-016.59E+002.41E+022.59E-044.56E-023.59E+001.52E+02 + 36M3 70.003.98E-042.64E-021.08E+003.00E+011.04E-041.09E-026.08E-011.95E+01 + 36M3 103.009.60E-053.80E-031.03E-012.01E+003.17E-051.73E-036.35E-021.43E+00 + 36M3 150.002.41E-055.91E-041.07E-021.48E-011.02E-052.99E-047.45E-031.20E-01 + 36M4 1.091.08E+023.73E+053.14E+106.05E+144.05E+008.99E+041.42E+093.01E+12 + 36M4 2.091.04E+011.30E+043.15E+082.21E+124.49E-013.36E+031.91E+072.36E+10 + 36M4 4.097.77E-013.97E+022.69E+067.32E+094.34E-021.11E+022.42E+051.65E+08 + 36M4 8.094.69E-021.07E+012.11E+042.36E+073.74E-033.45E+003.04E+031.10E+06 + 36M4 15.093.15E-033.67E-012.52E+021.31E+053.69E-041.43E-015.82E+011.16E+04 + 36M4 25.003.28E-042.27E-027.02E+002.01E+035.41E-051.08E-022.42E+002.98E+02 + 36M4 40.003.78E-051.66E-032.54E-014.24E+018.73E-069.66E-041.28E-019.97E+00 + 36M4 52.001.12E-053.81E-044.02E-025.00E+003.12E-062.52E-042.49E-021.51E+00 + 36M4 70.002.79E-067.22E-055.04E-034.50E-019.63E-075.49E-053.94E-031.80E-01 + 36M4 103.004.60E-078.44E-063.50E-042.04E-022.08E-077.64E-063.65E-041.17E-02 + 36M4 150.008.39E-081.07E-062.71E-051.05E-034.64E-081.13E-063.68E-058.37E-04 + 36M5 1.091.59E+025.23E+054.72E+108.81E+142.58E+001.22E+046.32E+095.16E+14 + 36M5 2.091.51E+011.82E+044.72E+083.20E+122.94E-014.75E+026.64E+071.57E+12 + 36M5 4.091.12E+005.52E+024.01E+061.05E+102.95E-021.68E+016.08E+054.24E+09 + 36M5 8.096.73E-021.48E+013.12E+043.34E+072.66E-035.66E-015.20E+031.14E+07 + 36M5 15.094.48E-034.98E-013.66E+021.81E+052.75E-042.58E-026.78E+015.64E+04 + 36M5 25.004.63E-043.04E-021.00E+012.70E+034.19E-052.12E-032.04E+008.33E+02 + 36M5 40.005.31E-052.16E-033.52E-015.48E+017.02E-062.07E-048.02E-021.77E+01 + 36M5 52.001.57E-054.91E-045.46E-026.27E+002.57E-065.68E-051.33E-022.12E+00 + 36M5 70.003.91E-069.12E-056.64E-035.41E-018.19E-071.32E-051.77E-031.98E-01 + 36M5 103.006.47E-071.04E-054.37E-042.28E-021.85E-072.01E-061.33E-049.46E-03 + 36M5 150.001.20E-071.27E-063.18E-051.07E-034.40E-083.29E-071.11E-055.18E-04 + 37K 16.201.45E+011.17E+022.57E+023.66E+022.50E+011.34E+031.23E+043.57E+04 + 37K 16.901.30E+011.23E+024.42E+021.22E+032.20E+011.14E+031.22E+045.76E+04 + 37K 18.201.07E+011.23E+027.11E+023.51E+031.77E+018.52E+021.10E+048.30E+04 + 37K 21.406.92E+001.01E+029.34E+027.96E+031.09E+014.53E+027.21E+038.63E+04 + 37K 25.204.44E+007.13E+018.07E+028.60E+036.74E+002.39E+024.12E+035.93E+04 + 37K 29.003.02E+004.98E+016.07E+027.04E+034.45E+001.39E+022.41E+033.69E+04 + 37K 35.001.78E+002.90E+013.62E+024.33E+032.56E+006.68E+011.12E+031.73E+04 + 37K 43.009.95E-011.53E+011.84E+022.14E+031.40E+003.03E+014.68E+026.85E+03 + 37K 55.004.90E-016.76E+007.47E+017.93E+026.90E-011.19E+011.61E+022.10E+03 + 37K 68.002.64E-013.25E+003.24E+013.11E+023.76E-015.36E+006.34E+017.34E+02 + 37K 85.001.37E-011.48E+001.30E+011.10E+022.01E-012.35E+002.39E+012.39E+02 + 37K 98.009.01E-028.87E-017.16E+005.54E+011.35E-011.40E+001.28E+011.16E+02 + 37K 115.005.62E-024.97E-013.63E+002.53E+018.73E-027.91E-016.44E+005.20E+01 + 37K 138.003.28E-022.56E-011.66E+001.03E+015.33E-024.16E-012.96E+002.09E+01 + 37K 165.001.94E-021.34E-017.72E-014.26E+003.32E-022.25E-011.40E+008.67E+00 + 37K 230.007.42E-034.04E-021.88E-018.32E-011.40E-027.41E-023.62E-011.76E+00 + 37K 315.003.08E-031.35E-025.12E-021.86E-016.37E-032.72E-021.07E-014.16E-01 + 37K 410.001.53E-035.62E-031.82E-025.65E-023.36E-031.22E-024.04E-021.32E-01 + 37K 520.008.44E-042.69E-037.60E-032.07E-021.92E-036.09E-031.75E-024.95E-02 + 37K 750.003.67E-049.64E-042.27E-035.13E-038.41E-042.22E-035.28E-031.22E-02 + 37K 1000.002.05E-044.74E-049.86E-041.97E-034.53E-041.06E-032.21E-034.47E-03 + 37K 1250.001.36E-042.89E-045.52E-041.02E-032.86E-046.14E-041.18E-032.17E-03 + 37K 1500.009.93E-051.98E-043.57E-046.17E-041.99E-044.01E-047.23E-041.25E-03 + 37L1 3.073.87E+011.52E+044.86E+064.08E+083.81E+025.47E+051.34E+081.10E+10 + 37L1 3.772.69E+014.21E+032.01E+062.52E+082.06E+022.05E+054.26E+074.10E+09 + 37L1 5.071.52E+014.63E+024.14E+056.72E+078.48E+015.06E+048.16E+068.00E+08 + 37L1 8.275.40E+005.02E+001.61E+043.45E+061.96E+015.25E+035.47E+054.38E+07 + 37L1 12.072.27E+001.82E+015.21E+022.06E+056.33E+009.51E+027.00E+044.38E+06 + 37L1 16.001.15E+001.47E+012.98E+011.66E+042.73E+002.73E+021.55E+047.82E+05 + 37L1 22.005.17E-017.94E+005.09E+015.21E+021.06E+006.87E+012.89E+031.13E+05 + 37L1 30.002.30E-013.60E+003.48E+012.06E+024.25E-011.85E+015.82E+021.75E+04 + 37L1 42.009.29E-021.34E+001.40E+011.19E+021.59E-014.61E+001.06E+022.38E+03 + 37L1 55.004.40E-025.70E-015.64E+004.97E+017.29E-021.56E+002.80E+014.94E+02 + 37L1 72.002.06E-022.32E-012.07E+001.70E+013.39E-025.44E-017.63E+001.06E+02 + 37L1 85.001.28E-021.31E-011.08E+008.29E+002.12E-022.88E-013.48E+004.17E+01 + 37L1 102.007.60E-036.97E-025.19E-013.64E+001.28E-021.45E-011.49E+001.52E+01 + 37L1 125.004.22E-033.40E-022.25E-011.41E+007.34E-036.87E-025.91E-015.07E+00 + 37L1 150.002.49E-031.78E-021.06E-015.95E-014.49E-033.57E-022.63E-011.93E+00 + 37L1 215.008.91E-044.98E-032.36E-021.07E-011.75E-031.03E-025.65E-023.09E-01 + 37L1 300.003.53E-041.58E-036.10E-032.26E-027.52E-043.46E-031.47E-026.23E-02 + 37L1 390.001.76E-046.63E-042.20E-037.00E-033.96E-041.53E-035.42E-031.90E-02 + 37L1 500.009.41E-053.06E-048.84E-042.46E-032.19E-047.29E-042.21E-036.57E-03 + 37L1 730.003.96E-051.06E-042.53E-045.83E-049.29E-052.53E-046.21E-041.48E-03 + 37L11000.002.09E-054.87E-051.02E-042.05E-044.70E-051.11E-042.36E-044.84E-04 + 37L2 2.867.49E+011.09E+061.11E+092.00E+114.18E+012.49E+043.42E+062.69E+08 + 37L2 3.563.96E+013.59E+053.01E+086.22E+102.13E+011.04E+041.64E+061.76E+08 + 37L2 4.861.55E+017.46E+044.67E+079.59E+098.13E+002.99E+034.70E+055.60E+07 + 37L2 8.063.15E+005.84E+032.23E+063.66E+081.69E+003.88E+024.89E+045.05E+06 + 37L2 11.868.86E-018.40E+022.18E+052.77E+075.11E-018.09E+017.93E+036.54E+05 + 37L2 16.003.23E-011.88E+023.61E+043.65E+062.02E-012.40E+011.88E+031.26E+05 + 37L2 22.001.07E-013.84E+015.34E+034.17E+057.48E-026.57E+003.99E+022.10E+04 + 37L2 30.003.60E-028.21E+008.33E+024.99E+042.84E-021.86E+008.72E+013.57E+03 + 37L2 42.001.08E-021.55E+001.12E+025.00E+039.95E-034.73E-011.66E+015.14E+02 + 37L2 55.004.05E-034.12E-012.27E+017.96E+024.29E-031.58E-014.41E+001.08E+02 + 37L2 72.001.51E-031.10E-014.64E+001.28E+021.85E-035.33E-021.17E+002.29E+01 + 37L2 85.008.25E-044.94E-021.76E+004.20E+011.10E-032.73E-025.21E-018.81E+00 + 37L2 102.004.23E-042.05E-026.12E-011.24E+016.25E-041.31E-022.14E-013.10E+00 + 37L2 125.002.02E-047.75E-031.90E-013.23E+003.32E-045.82E-037.99E-029.76E-01 + 37L2 150.001.04E-043.27E-036.77E-029.81E-011.89E-042.82E-033.32E-023.49E-01 + 37L2 215.002.87E-056.17E-049.17E-039.80E-026.23E-056.88E-046.05E-034.75E-02 + 37L2 300.008.99E-061.38E-041.53E-031.25E-022.26E-051.91E-041.30E-037.91E-03 + 37L2 390.003.70E-064.45E-053.96E-042.65E-031.02E-057.14E-054.00E-042.02E-03 + 37L2 500.001.64E-061.58E-051.15E-046.43E-044.88E-062.86E-051.36E-045.77E-04 + 37L2 730.005.06E-073.57E-061.96E-058.48E-051.61E-067.46E-062.80E-059.43E-05 + 37L21000.002.04E-071.13E-064.99E-061.79E-056.55E-072.55E-068.06E-062.29E-05 + 37L3 2.801.50E+022.19E+062.32E+094.31E+111.47E+016.30E+053.86E+092.45E+12 + 37L3 3.507.79E+017.05E+056.07E+081.28E+117.38E+002.07E+058.52E+084.41E+11 + 37L3 4.802.97E+011.42E+059.01E+071.88E+102.79E+004.29E+041.02E+083.93E+10 + 37L3 8.005.84E+001.07E+044.07E+066.71E+085.76E-013.37E+033.41E+068.19E+08 + 37L3 11.801.60E+001.49E+033.83E+054.85E+071.74E-014.87E+022.70E+054.48E+07 + 37L3 16.005.67E-013.19E+026.01E+046.02E+066.81E-021.07E+023.81E+044.75E+06 + 37L3 22.001.86E-016.36E+018.63E+036.65E+052.55E-022.22E+015.06E+034.66E+05 + 37L3 30.006.15E-021.32E+011.30E+037.67E+049.80E-034.79E+007.29E+025.01E+04 + 37L3 42.001.81E-022.41E+001.67E+027.30E+033.47E-039.20E-019.22E+014.63E+03 + 37L3 55.006.72E-036.19E-013.22E+011.11E+031.51E-032.47E-011.81E+017.06E+02 + 37L3 72.002.48E-031.59E-016.25E+001.68E+026.60E-046.75E-023.64E+001.11E+02 + 37L3 85.001.34E-036.91E-022.28E+005.25E+013.96E-043.05E-021.37E+003.60E+01 + 37L3 102.006.82E-042.77E-027.55E-011.47E+012.27E-041.28E-024.75E-011.06E+01 + 37L3 125.003.22E-041.01E-022.21E-013.58E+001.22E-044.93E-031.48E-012.76E+00 + 37L3 150.001.66E-044.08E-037.41E-021.01E+007.01E-052.11E-035.26E-028.41E-01 + 37L3 215.004.57E-057.07E-048.77E-038.64E-022.39E-054.09E-047.13E-038.46E-02 + 37L3 300.001.44E-051.46E-041.28E-039.32E-039.01E-069.36E-051.18E-031.08E-02 + 37L3 390.006.05E-064.44E-052.93E-041.70E-034.28E-063.05E-052.98E-042.25E-03 + 37L3 500.002.77E-061.51E-057.70E-053.60E-042.16E-061.10E-058.40E-055.31E-04 + 37L3 730.009.29E-073.29E-061.15E-053.95E-058.07E-072.55E-061.32E-056.44E-05 + 37L31000.004.13E-071.06E-062.78E-067.51E-063.78E-078.49E-073.11E-061.22E-05 + 37M1 1.322.72E+016.91E+049.59E+062.40E+097.89E+026.02E+067.60E+093.17E+12 + 37M1 2.321.14E+014.84E+032.26E+062.10E+081.46E+023.86E+052.23E+086.48E+10 + 37M1 4.323.53E+001.02E+021.17E+052.24E+072.27E+011.95E+045.19E+069.31E+08 + 37M1 8.328.69E-012.45E+001.75E+034.47E+053.19E+009.14E+021.15E+051.18E+07 + 37M1 15.322.07E-012.73E+007.78E+003.71E+035.17E-015.82E+013.82E+032.26E+05 + 37M1 25.006.02E-029.57E-017.96E+004.77E+011.21E-016.92E+002.77E+021.04E+04 + 37M1 40.001.73E-022.53E-012.63E+002.19E+013.04E-029.66E-012.43E+015.94E+02 + 37M1 52.008.41E-031.11E-011.11E+009.72E+001.42E-023.33E-016.51E+001.25E+02 + 37M1 70.003.65E-034.16E-023.72E-013.06E+006.10E-031.03E-011.52E+002.22E+01 + 37M1 103.001.21E-031.10E-028.10E-025.61E-012.07E-032.36E-022.44E-012.52E+00 + 37M1 150.004.11E-042.92E-031.72E-029.67E-027.47E-046.01E-034.47E-023.33E-01 + 37M1 280.007.03E-053.28E-041.32E-035.10E-031.48E-047.21E-043.25E-031.46E-02 + 37M1 500.001.56E-055.07E-051.46E-044.07E-043.64E-051.21E-043.69E-041.10E-03 + 37M2 1.255.75E+011.13E+074.55E+103.19E+138.35E+011.95E+051.04E+083.42E+10 + 37M2 2.251.54E+015.83E+051.08E+095.36E+111.39E+011.49E+045.65E+061.56E+09 + 37M2 4.252.91E+002.37E+042.04E+076.48E+091.99E+001.00E+032.43E+054.70E+07 + 37M2 8.254.12E-018.46E+023.48E+056.56E+072.59E-016.34E+019.16E+031.11E+06 + 37M2 15.255.77E-023.93E+018.36E+039.37E+053.89E-025.07E+004.39E+023.27E+04 + 37M2 25.001.08E-023.37E+004.25E+023.08E+048.42E-036.71E-013.79E+011.86E+03 + 37M2 40.002.08E-033.31E-012.56E+011.22E+031.95E-039.88E-023.69E+001.21E+02 + 37M2 52.008.15E-049.12E-025.38E+002.02E+028.64E-043.40E-021.01E+002.63E+01 + 37M2 70.002.79E-042.14E-029.35E-012.68E+013.43E-041.02E-022.33E-014.69E+00 + 37M2 103.006.87E-053.31E-039.90E-022.01E+001.03E-042.16E-033.51E-025.09E-01 + 37M2 150.001.75E-055.57E-041.16E-021.69E-013.22E-054.83E-045.71E-036.03E-02 + 37M3 1.241.15E+022.15E+078.72E+106.07E+132.80E+016.43E+062.00E+116.23E+14 + 37M3 2.242.98E+011.08E+062.00E+099.83E+114.60E+003.34E+053.40E+094.57E+12 + 37M3 4.245.44E+004.29E+043.68E+071.15E+106.52E-011.38E+044.41E+072.63E+10 + 37M3 8.247.48E-011.49E+036.06E+051.13E+088.52E-025.01E+025.19E+051.44E+08 + 37M3 15.241.02E-016.70E+011.39E+041.54E+061.30E-022.35E+019.42E+031.35E+06 + 37M3 25.001.87E-025.53E+006.75E+024.80E+042.85E-032.02E+004.05E+023.51E+04 + 37M3 40.003.51E-035.17E-013.82E+011.78E+036.73E-042.00E-012.19E+011.20E+03 + 37M3 52.001.35E-031.38E-017.72E+002.82E+023.01E-045.57E-024.45E+001.89E+02 + 37M3 70.004.56E-043.09E-021.26E+003.50E+011.21E-041.32E-027.51E-012.41E+01 + 37M3 103.001.11E-044.46E-031.21E-012.35E+003.71E-052.10E-037.80E-021.76E+00 + 37M3 150.002.80E-056.93E-041.26E-021.73E-011.19E-053.62E-049.12E-031.47E-01 + 37M4 1.111.16E+024.05E+053.48E+106.76E+144.62E+001.04E+051.66E+093.43E+12 + 37M4 2.111.17E+011.49E+043.74E+082.68E+125.32E-014.10E+032.37E+072.88E+10 + 37M4 4.119.09E-014.71E+023.33E+069.21E+095.28E-021.40E+023.08E+052.08E+08 + 37M4 8.115.64E-021.30E+012.66E+043.03E+074.63E-034.40E+003.93E+031.42E+06 + 37M4 15.113.87E-034.53E-013.21E+021.69E+054.63E-041.84E-017.58E+011.51E+04 + 37M4 25.004.09E-042.85E-029.07E+002.63E+036.86E-051.40E-023.18E+003.90E+02 + 37M4 40.004.78E-052.09E-033.29E-015.56E+011.11E-051.26E-031.68E-011.31E+01 + 37M4 52.001.42E-054.84E-045.21E-026.55E+003.99E-063.28E-043.27E-021.99E+00 + 37M4 70.003.59E-069.21E-056.54E-035.90E-011.24E-067.17E-055.18E-032.37E-01 + 37M4 103.005.89E-071.08E-054.54E-042.68E-022.67E-079.99E-064.80E-041.54E-02 + 37M4 150.001.04E-071.38E-063.52E-051.38E-035.99E-081.48E-064.85E-051.10E-03 + 37M5 1.111.71E+025.70E+055.28E+109.94E+142.95E+001.41E+047.49E+096.21E+14 + 37M5 2.111.71E+012.08E+045.64E+083.89E+123.47E-015.75E+028.39E+072.05E+12 + 37M5 4.111.31E+006.52E+024.98E+061.32E+103.57E-022.08E+017.96E+055.75E+09 + 37M5 8.118.08E-021.78E+013.95E+044.28E+073.27E-037.10E-016.93E+031.57E+07 + 37M5 15.115.49E-036.13E-014.68E+022.34E+053.43E-043.26E-029.09E+017.77E+04 + 37M5 25.005.76E-043.79E-021.29E+013.54E+035.27E-052.70E-032.76E+001.15E+03 + 37M5 40.006.68E-052.72E-034.56E-017.17E+018.90E-062.65E-041.08E-012.43E+01 + 37M5 52.001.99E-056.20E-047.07E-028.19E+003.26E-067.26E-051.79E-022.91E+00 + 37M5 70.005.01E-061.16E-048.61E-037.07E-011.04E-061.69E-052.38E-032.70E-01 + 37M5 103.008.38E-071.32E-055.68E-042.98E-022.37E-072.58E-061.77E-041.28E-02 + 37M5 150.001.55E-071.63E-064.13E-051.40E-035.64E-084.24E-071.48E-057.00E-04 + 37N+ 50.001.58E-034.80E-022.05E+007.50E+012.48E-037.26E-022.13E+006.35E+01 + 37N+ 70.005.96E-041.16E-022.99E-017.51E+009.42E-041.84E-023.60E-017.29E+00 + 37N+ 100.002.10E-042.72E-034.23E-026.97E-013.46E-044.53E-035.95E-028.13E-01 + 37N+ 150.006.39E-055.56E-045.17E-035.25E-021.14E-049.92E-048.57E-037.68E-02 + 37N+ 200.002.77E-051.87E-041.27E-039.27E-035.31E-053.56E-042.34E-031.58E-02 + 37N+ 500.002.34E-067.94E-062.49E-057.85E-055.44E-061.86E-055.89E-051.87E-04 + 38K 17.101.30E+019.87E+011.97E+022.50E+022.39E+011.22E+031.05E+042.77E+04 + 38K 17.801.17E+011.04E+023.38E+028.35E+022.13E+011.04E+031.04E+044.47E+04 + 38K 19.109.71E+001.04E+025.47E+022.44E+031.72E+017.89E+029.47E+036.53E+04 + 38K 22.306.43E+008.71E+017.42E+025.78E+031.09E+014.31E+026.41E+037.07E+04 + 38K 26.104.20E+006.32E+016.64E+026.55E+036.84E+002.34E+023.79E+035.07E+04 + 38K 30.002.87E+004.46E+015.09E+025.53E+034.54E+001.36E+022.24E+033.23E+04 + 38K 36.001.72E+002.66E+013.14E+023.55E+032.65E+006.72E+011.08E+031.57E+04 + 38K 44.009.77E-011.43E+011.65E+021.82E+031.48E+003.11E+014.62E+026.46E+03 + 38K 56.004.89E-016.50E+006.91E+017.06E+027.36E-011.24E+011.63E+022.06E+03 + 38K 69.002.67E-013.19E+003.07E+012.85E+024.05E-015.68E+006.54E+017.36E+02 + 38K 86.001.40E-011.47E+001.26E+011.03E+022.18E-012.52E+002.50E+012.44E+02 + 38K 99.009.26E-028.89E-017.00E+005.28E+011.47E-011.51E+001.36E+011.21E+02 + 38K 116.005.81E-025.03E-013.59E+002.45E+019.53E-028.55E-016.85E+005.44E+01 + 38K 139.003.41E-022.61E-011.66E+001.01E+015.84E-024.52E-013.17E+002.21E+01 + 38K 165.002.06E-021.40E-018.01E-014.36E+003.70E-022.50E-011.55E+009.51E+00 + 38K 230.007.92E-034.27E-021.96E-018.62E-011.56E-028.22E-024.00E-011.93E+00 + 38K 315.003.29E-031.43E-025.39E-021.95E-017.06E-033.01E-021.18E-014.57E-01 + 38K 410.001.64E-035.99E-031.93E-025.96E-023.72E-031.35E-024.45E-021.45E-01 + 38K 520.009.06E-042.88E-038.09E-032.19E-022.12E-036.73E-031.93E-025.44E-02 + 38K 750.003.94E-041.04E-032.43E-035.49E-039.26E-042.45E-035.82E-031.34E-02 + 38K 1000.002.21E-045.11E-041.06E-032.12E-034.97E-041.17E-032.44E-034.91E-03 + 38K 1250.001.46E-043.11E-045.97E-041.10E-033.13E-046.75E-041.30E-032.39E-03 + 38K 1500.001.07E-042.14E-043.86E-046.68E-042.17E-044.40E-047.95E-041.37E-03 + 38L1 3.223.53E+011.36E+044.00E+063.03E+083.75E+025.15E+051.20E+089.15E+09 + 38L1 3.922.49E+014.05E+031.76E+062.01E+082.08E+022.01E+054.01E+073.60E+09 + 38L1 5.221.44E+015.04E+023.92E+055.87E+078.82E+015.20E+048.11E+067.53E+08 + 38L1 8.425.29E+003.36E+001.76E+043.43E+062.11E+015.66E+035.77E+054.47E+07 + 38L1 12.222.26E+001.50E+017.12E+022.28E+056.94E+001.05E+037.60E+044.64E+06 + 38L1 16.001.19E+001.33E+013.44E+012.27E+043.10E+003.17E+021.79E+048.94E+05 + 38L1 22.005.37E-017.61E+003.96E+018.25E+021.21E+007.94E+013.33E+031.29E+05 + 38L1 30.002.40E-013.56E+003.10E+011.62E+024.82E-012.13E+016.69E+022.00E+04 + 38L1 42.009.76E-021.35E+001.33E+011.04E+021.80E-015.29E+001.22E+022.71E+03 + 38L1 55.004.64E-025.82E-015.52E+004.61E+018.26E-021.78E+003.19E+015.61E+02 + 38L1 72.002.18E-022.40E-012.07E+001.64E+013.83E-026.19E-018.67E+001.20E+02 + 38L1 85.001.36E-021.36E-011.09E+008.13E+002.40E-023.27E-013.94E+004.72E+01 + 38L1 102.008.08E-037.26E-025.29E-013.62E+001.44E-021.64E-011.69E+001.72E+01 + 38L1 125.004.51E-033.56E-022.32E-011.42E+008.27E-037.77E-026.67E-015.71E+00 + 38L1 150.002.67E-031.87E-021.09E-016.06E-015.06E-034.03E-022.96E-012.17E+00 + 38L1 215.009.56E-045.28E-032.48E-021.11E-011.96E-031.16E-026.35E-023.47E-01 + 38L1 300.003.80E-041.68E-036.45E-032.37E-028.41E-043.88E-031.65E-026.98E-02 + 38L1 390.001.89E-047.11E-042.34E-037.41E-034.42E-041.71E-036.06E-032.12E-02 + 38L1 500.001.02E-043.30E-049.47E-042.63E-032.44E-048.14E-042.47E-037.33E-03 + 38L1 730.004.29E-051.14E-042.73E-046.29E-041.03E-042.82E-046.92E-041.65E-03 + 38L11000.002.27E-055.29E-051.11E-042.23E-045.20E-051.24E-042.63E-045.38E-04 + 38L2 3.016.89E+019.67E+059.41E+081.57E+114.12E+012.33E+042.95E+062.09E+08 + 38L2 3.713.75E+013.36E+052.70E+085.20E+102.16E+011.01E+041.49E+061.46E+08 + 38L2 5.011.52E+017.35E+044.45E+078.67E+098.53E+003.03E+034.51E+055.04E+07 + 38L2 8.213.22E+006.09E+032.28E+063.62E+081.85E+004.12E+025.02E+044.97E+06 + 38L2 12.019.29E-019.02E+022.32E+052.87E+075.67E-018.83E+018.42E+036.75E+05 + 38L2 16.003.54E-012.15E+024.13E+044.12E+062.32E-012.75E+012.13E+031.40E+05 + 38L2 22.001.18E-014.39E+016.11E+034.72E+058.63E-027.55E+004.53E+022.35E+04 + 38L2 30.003.99E-029.40E+009.55E+025.68E+043.29E-022.14E+009.94E+014.02E+03 + 38L2 42.001.20E-021.78E+001.29E+025.71E+031.15E-025.46E-011.90E+015.83E+02 + 38L2 55.004.54E-034.73E-012.61E+019.11E+024.97E-031.83E-015.06E+001.23E+02 + 38L2 72.001.71E-031.27E-015.35E+001.47E+022.15E-036.16E-021.35E+002.62E+01 + 38L2 85.009.32E-045.68E-022.03E+004.83E+011.28E-033.16E-026.00E-011.01E+01 + 38L2 102.004.79E-042.36E-027.06E-011.43E+017.28E-041.52E-022.47E-013.56E+00 + 38L2 125.002.29E-048.95E-032.20E-013.73E+003.87E-046.76E-039.24E-021.12E+00 + 38L2 150.001.18E-043.78E-037.84E-021.13E+002.20E-043.28E-033.85E-024.03E-01 + 38L2 215.003.28E-057.15E-041.06E-021.14E-017.29E-058.03E-047.03E-035.50E-02 + 38L2 300.001.03E-051.61E-041.79E-031.46E-022.64E-052.24E-041.51E-039.19E-03 + 38L2 390.004.26E-065.18E-054.62E-043.08E-031.20E-058.36E-054.68E-042.35E-03 + 38L2 500.001.90E-061.84E-051.35E-047.51E-045.73E-063.36E-051.59E-046.74E-04 + 38L2 730.005.91E-074.16E-062.29E-059.92E-051.89E-068.78E-063.28E-051.10E-04 + 38L21000.002.39E-071.32E-065.85E-062.10E-057.71E-073.00E-069.48E-062.69E-05 + 38L3 2.941.39E+021.95E+061.98E+093.40E+111.43E+015.96E+053.51E+092.12E+12 + 38L3 3.647.38E+016.60E+055.46E+081.08E+117.43E+002.05E+058.22E+084.10E+11 + 38L3 4.942.91E+011.40E+058.62E+071.70E+102.89E+004.47E+041.05E+083.94E+10 + 38L3 8.145.96E+001.11E+044.17E+066.64E+086.19E-013.71E+033.78E+068.90E+08 + 38L3 11.941.68E+001.59E+034.06E+055.01E+071.90E-015.50E+023.08E+055.06E+07 + 38L3 16.006.20E-013.62E+026.83E+046.76E+067.71E-021.28E+024.67E+045.81E+06 + 38L3 22.002.04E-017.22E+019.81E+037.49E+052.89E-022.65E+016.17E+035.67E+05 + 38L3 30.006.78E-021.50E+011.48E+038.66E+041.11E-025.72E+008.85E+026.08E+04 + 38L3 42.002.01E-022.75E+001.90E+028.27E+033.94E-031.10E+001.11E+025.59E+03 + 38L3 55.007.48E-037.05E-013.68E+011.25E+031.72E-032.94E-012.18E+018.49E+02 + 38L3 72.002.77E-031.81E-017.14E+001.91E+027.50E-048.01E-024.36E+001.33E+02 + 38L3 85.001.50E-037.88E-022.61E+005.98E+014.50E-043.62E-021.64E+004.31E+01 + 38L3 102.007.66E-043.16E-028.64E-011.68E+012.58E-041.52E-025.68E-011.27E+01 + 38L3 125.003.62E-041.15E-022.53E-014.08E+001.39E-045.83E-031.76E-013.30E+00 + 38L3 150.001.86E-044.67E-038.49E-021.16E+007.99E-052.49E-036.27E-021.00E+00 + 38L3 215.005.13E-058.09E-041.01E-029.89E-022.72E-054.81E-048.46E-031.00E-01 + 38L3 300.001.62E-051.67E-041.46E-031.07E-021.03E-051.10E-041.40E-031.28E-02 + 38L3 390.006.87E-065.08E-053.37E-041.95E-034.87E-063.55E-053.52E-042.66E-03 + 38L3 500.003.17E-061.73E-058.85E-054.14E-042.46E-061.27E-059.89E-056.26E-04 + 38L3 730.001.06E-063.77E-061.32E-054.54E-059.19E-072.94E-061.55E-057.59E-05 + 38L31000.004.67E-071.21E-063.19E-068.63E-064.30E-079.77E-073.63E-061.43E-05 + 38M1 1.362.61E+016.81E+048.08E+062.78E+098.41E+026.41E+068.05E+093.25E+12 + 38M1 2.361.12E+015.20E+032.19E+061.72E+081.61E+024.33E+052.51E+087.15E+10 + 38M1 4.363.56E+001.30E+021.26E+052.23E+072.55E+012.26E+046.02E+061.07E+09 + 38M1 8.368.92E-011.74E+002.17E+035.01E+053.64E+001.07E+031.35E+051.37E+07 + 38M1 15.362.16E-012.53E+009.30E+004.94E+035.92E-016.81E+014.48E+032.64E+05 + 38M1 25.006.36E-029.47E-016.87E+005.43E+011.39E-018.13E+003.25E+021.23E+04 + 38M1 40.001.84E-022.58E-012.52E+001.94E+013.51E-021.13E+002.84E+016.92E+02 + 38M1 52.008.98E-031.14E-011.09E+009.09E+001.64E-023.87E-017.57E+001.45E+02 + 38M1 70.003.92E-034.34E-023.76E-012.99E+007.01E-031.19E-011.76E+002.57E+01 + 38M1 103.001.31E-031.17E-028.37E-025.67E-012.37E-032.72E-022.82E-012.90E+00 + 38M1 150.004.46E-043.12E-031.81E-021.00E-018.54E-046.89E-035.13E-023.81E-01 + 38M1 280.007.68E-053.55E-041.42E-035.42E-031.69E-048.22E-043.70E-031.66E-02 + 38M1 500.001.71E-055.53E-051.59E-044.41E-044.12E-051.38E-044.19E-041.25E-03 + 38M2 1.285.59E+011.15E+074.60E+103.12E+139.00E+012.08E+051.07E+083.32E+10 + 38M2 2.281.57E+016.30E+051.17E+095.64E+111.56E+011.66E+046.13E+061.63E+09 + 38M2 4.283.05E+002.65E+042.29E+077.13E+092.27E+001.14E+032.71E+055.12E+07 + 38M2 8.284.46E-019.65E+023.98E+057.40E+073.00E-017.32E+011.04E+041.24E+06 + 38M2 15.286.37E-024.53E+019.65E+031.07E+064.54E-025.90E+005.06E+023.72E+04 + 38M2 25.001.22E-023.93E+004.97E+023.59E+049.92E-037.88E-014.42E+012.16E+03 + 38M2 40.002.37E-033.87E-013.00E+011.42E+032.31E-031.16E-014.32E+001.41E+02 + 38M2 52.009.31E-041.07E-016.32E+002.36E+021.02E-034.01E-021.18E+003.07E+01 + 38M2 70.003.20E-042.51E-021.10E+003.14E+014.06E-041.20E-022.73E-015.49E+00 + 38M2 103.007.91E-053.89E-031.16E-012.36E+001.23E-042.55E-034.14E-025.97E-01 + 38M2 150.002.04E-056.56E-041.37E-021.99E-013.83E-055.73E-046.76E-037.11E-02 + 38M2 280.002.25E-063.80E-054.49E-043.89E-035.68E-065.08E-053.64E-042.33E-03 + 38M2 500.003.26E-073.22E-062.36E-051.32E-041.00E-065.88E-062.78E-051.18E-04 + 38M3 1.271.13E+022.20E+078.85E+105.96E+132.99E+016.96E+062.18E+116.76E+14 + 38M3 2.273.03E+011.17E+062.16E+091.04E+125.08E+003.82E+053.97E+095.38E+12 + 38M3 4.275.71E+004.79E+044.11E+071.27E+107.36E-011.63E+045.36E+073.22E+10 + 38M3 8.278.07E-011.70E+036.89E+051.27E+089.72E-026.02E+026.42E+051.79E+08 + 38M3 15.271.12E-017.69E+011.60E+041.75E+061.49E-022.84E+011.17E+041.68E+06 + 38M3 25.002.09E-026.41E+007.85E+025.56E+043.29E-032.47E+005.05E+024.38E+04 + 38M3 40.003.96E-036.00E-014.45E+012.06E+037.79E-042.44E-012.71E+011.48E+03 + 38M3 52.001.54E-031.60E-018.99E+003.27E+023.48E-046.78E-025.49E+002.33E+02 + 38M3 70.005.19E-043.60E-021.47E+004.07E+011.40E-041.61E-029.23E-012.96E+01 + 38M3 103.001.26E-045.20E-031.42E-012.74E+004.32E-052.54E-039.54E-022.15E+00 + 38M3 150.003.20E-058.09E-041.48E-022.02E-011.38E-054.37E-041.11E-021.80E-01 + 38M4 1.131.23E+024.37E+053.81E+107.47E+145.22E+001.20E+051.92E+093.88E+12 + 38M4 2.131.31E+011.69E+044.40E+083.20E+126.24E-014.95E+032.90E+073.49E+10 + 38M4 4.131.05E+005.52E+024.07E+061.15E+106.35E-021.74E+023.89E+052.61E+08 + 38M4 8.136.72E-021.56E+013.33E+043.84E+075.67E-035.56E+005.03E+031.81E+06 + 38M4 15.134.69E-035.54E-014.06E+022.17E+055.75E-042.34E-019.76E+011.94E+04 + 38M4 25.005.04E-043.54E-021.16E+013.41E+038.61E-051.80E-024.13E+005.07E+02 + 38M4 40.005.92E-052.62E-034.21E-017.21E+011.40E-051.62E-032.18E-011.70E+01 + 38M4 52.001.77E-056.08E-046.68E-028.49E+005.05E-064.23E-044.25E-022.58E+00 + 38M4 70.004.46E-061.16E-048.39E-037.65E-011.57E-069.26E-056.74E-033.09E-01 + 38M4 103.007.34E-071.37E-055.83E-043.47E-023.41E-071.29E-056.25E-042.00E-02 + 38M4 150.001.30E-071.76E-064.53E-051.79E-037.66E-081.92E-066.33E-051.44E-03 + 38M5 1.131.81E+026.13E+055.81E+101.10E+153.32E+001.61E+048.72E+097.32E+14 + 38M5 2.131.91E+012.36E+046.65E+084.66E+124.06E-016.86E+021.05E+082.63E+12 + 38M5 4.131.52E+007.62E+026.10E+061.65E+104.27E-022.54E+011.03E+067.68E+09 + 38M5 8.139.61E-022.14E+014.94E+045.43E+073.99E-038.81E-019.11E+032.13E+07 + 38M5 15.136.65E-037.46E-015.92E+023.00E+054.23E-044.07E-021.21E+021.06E+05 + 38M5 25.007.10E-044.69E-021.66E+014.57E+036.58E-053.40E-033.70E+001.58E+03 + 38M5 40.008.32E-053.39E-035.84E-019.27E+011.11E-053.35E-041.44E-013.30E+01 + 38M5 52.002.49E-057.74E-049.06E-021.06E+014.10E-069.19E-052.39E-023.94E+00 + 38M5 70.006.32E-061.45E-041.10E-029.15E-011.31E-062.14E-053.16E-033.64E-01 + 38M5 103.001.06E-061.66E-057.29E-043.86E-023.00E-073.27E-062.35E-041.72E-02 + 38M5 150.001.97E-072.06E-065.31E-051.81E-037.16E-085.39E-071.95E-059.36E-04 + 38N+ 50.001.91E-036.02E-022.67E+009.83E+013.18E-039.50E-022.84E+008.59E+01 + 38N+ 70.007.20E-041.44E-023.85E-019.81E+001.21E-032.39E-024.76E-019.76E+00 + 38N+ 100.002.54E-043.34E-035.38E-029.04E-014.42E-045.86E-037.79E-021.08E+00 + 38N+ 150.007.77E-056.79E-046.48E-036.72E-021.45E-041.28E-031.11E-021.01E-01 + 38N+ 200.003.38E-052.28E-041.57E-031.17E-026.76E-054.56E-043.01E-032.06E-02 + 38N+ 500.002.87E-069.73E-063.07E-059.75E-056.87E-062.35E-057.49E-052.38E-04 + 39K 18.041.17E+018.33E+011.52E+021.72E+022.30E+011.10E+038.93E+032.17E+04 + 39K 18.741.06E+018.74E+012.59E+025.73E+022.05E+019.49E+028.89E+033.49E+04 + 39K 20.048.86E+008.84E+014.23E+021.70E+031.68E+017.31E+028.18E+035.15E+04 + 39K 23.245.97E+007.54E+015.91E+024.21E+031.08E+014.10E+025.71E+035.80E+04 + 39K 27.043.97E+005.59E+015.46E+024.99E+036.93E+002.28E+023.47E+034.33E+04 + 39K 31.002.73E+004.00E+014.28E+024.35E+034.63E+001.34E+022.09E+032.83E+04 + 39K 37.001.67E+002.45E+012.73E+022.91E+032.75E+006.75E+011.03E+031.43E+04 + 39K 45.009.60E-011.35E+011.48E+021.56E+031.55E+003.18E+014.55E+026.10E+03 + 39K 57.004.88E-016.25E+006.39E+016.27E+027.84E-011.30E+011.65E+022.01E+03 + 39K 70.002.69E-013.11E+002.90E+012.60E+024.36E-016.00E+006.74E+017.37E+02 + 39K 87.001.43E-011.46E+001.21E+019.69E+012.36E-012.69E+002.61E+012.50E+02 + 39K 100.009.50E-028.90E-016.84E+005.03E+011.60E-011.62E+001.43E+011.25E+02 + 39K 117.005.99E-025.08E-013.55E+002.37E+011.04E-019.23E-017.28E+005.68E+01 + 39K 140.003.54E-022.66E-011.66E+009.94E+006.38E-024.90E-013.39E+002.33E+01 + 39K 165.002.19E-021.47E-018.29E-014.46E+004.11E-022.77E-011.70E+001.04E+01 + 39K 230.008.43E-034.50E-022.05E-018.91E-011.73E-029.11E-024.41E-012.12E+00 + 39K 315.003.52E-031.51E-025.67E-022.03E-017.82E-033.33E-021.30E-015.02E-01 + 39K 410.001.76E-036.37E-032.04E-026.27E-024.11E-031.49E-024.91E-021.59E-01 + 39K 520.009.73E-043.07E-038.60E-032.32E-022.34E-037.42E-032.13E-025.97E-02 + 39K 750.004.24E-041.11E-032.60E-035.87E-031.02E-032.70E-036.40E-031.47E-02 + 39K 1000.002.37E-045.50E-041.14E-032.28E-035.45E-041.28E-032.68E-035.39E-03 + 39K 1250.001.57E-043.36E-046.44E-041.18E-033.42E-047.41E-041.42E-032.62E-03 + 39K 1500.001.15E-042.31E-044.17E-047.22E-042.37E-044.83E-048.72E-041.51E-03 + 39L1 3.373.23E+011.23E+043.30E+062.25E+083.69E+024.84E+051.08E+087.59E+09 + 39L1 4.072.31E+013.87E+031.53E+061.59E+082.10E+021.97E+053.76E+073.16E+09 + 39L1 5.371.37E+015.41E+023.68E+055.10E+079.16E+015.32E+048.02E+067.06E+08 + 39L1 8.575.17E+003.11E+001.89E+043.38E+062.26E+016.08E+036.06E+054.53E+07 + 39L1 12.372.25E+001.22E+019.23E+022.49E+057.57E+001.15E+038.21E+044.89E+06 + 39L1 16.001.22E+001.19E+015.46E+012.98E+043.52E+003.67E+022.07E+041.02E+06 + 39L1 22.005.56E-017.24E+002.99E+011.29E+031.37E+009.16E+013.83E+031.47E+05 + 39L1 30.002.50E-013.50E+002.72E+011.36E+025.47E-012.44E+017.66E+022.27E+04 + 39L1 42.001.02E-011.36E+001.26E+018.99E+012.04E-016.05E+001.39E+023.07E+03 + 39L1 55.004.89E-025.93E-015.38E+004.25E+019.34E-022.03E+003.63E+016.36E+02 + 39L1 72.002.30E-022.46E-012.06E+001.57E+014.32E-027.03E-019.83E+001.36E+02 + 39L1 85.001.44E-021.41E-011.10E+007.94E+002.71E-023.71E-014.46E+005.33E+01 + 39L1 102.008.57E-037.55E-025.37E-013.59E+001.63E-021.86E-011.90E+001.94E+01 + 39L1 125.004.79E-033.73E-022.37E-011.43E+009.31E-038.78E-027.52E-016.43E+00 + 39L1 150.002.84E-031.97E-021.13E-016.16E-015.68E-034.54E-023.34E-012.44E+00 + 39L1 215.001.02E-035.58E-032.59E-021.15E-012.20E-031.30E-027.12E-023.89E-01 + 39L1 300.004.08E-041.79E-036.81E-032.48E-029.40E-044.34E-031.85E-027.80E-02 + 39L1 390.002.04E-047.60E-042.49E-037.84E-034.92E-041.91E-036.76E-032.37E-02 + 39L1 500.001.10E-043.54E-041.01E-032.80E-032.72E-049.07E-042.75E-038.17E-03 + 39L1 730.004.63E-051.24E-042.94E-046.77E-041.14E-043.13E-047.69E-041.83E-03 + 39L11000.002.46E-055.73E-051.20E-042.41E-045.75E-051.37E-042.92E-045.97E-04 + 39L2 3.166.34E+018.61E+057.95E+081.22E+114.06E+012.17E+042.55E+061.62E+08 + 39L2 3.863.55E+013.13E+052.41E+084.33E+102.19E+019.79E+031.34E+061.21E+08 + 39L2 5.161.49E+017.21E+044.23E+077.79E+098.92E+003.06E+034.30E+054.50E+07 + 39L2 8.363.29E+006.33E+032.33E+063.56E+082.00E+004.37E+025.12E+044.86E+06 + 39L2 12.169.70E-019.65E+022.45E+052.95E+076.26E-019.58E+018.89E+036.91E+05 + 39L2 16.003.87E-012.44E+024.70E+044.63E+062.67E-013.14E+012.39E+031.55E+05 + 39L2 22.001.30E-015.00E+016.96E+035.33E+059.92E-028.63E+005.13E+022.62E+04 + 39L2 30.004.42E-021.07E+011.09E+036.43E+043.78E-022.45E+001.13E+024.52E+03 + 39L2 42.001.34E-022.03E+001.47E+026.49E+031.33E-026.27E-012.17E+016.60E+02 + 39L2 55.005.07E-035.41E-012.99E+011.04E+035.74E-032.11E-015.79E+001.40E+02 + 39L2 72.001.91E-031.45E-016.14E+001.68E+022.49E-037.11E-021.55E+002.98E+01 + 39L2 85.001.05E-036.51E-022.33E+005.53E+011.48E-033.65E-026.89E-011.15E+01 + 39L2 102.005.40E-042.71E-028.13E-011.64E+018.44E-041.76E-022.84E-014.08E+00 + 39L2 125.002.59E-041.03E-022.54E-014.29E+004.50E-047.82E-031.06E-011.29E+00 + 39L2 150.001.34E-044.36E-039.04E-021.30E+002.56E-043.80E-034.45E-024.63E-01 + 39L2 215.003.75E-058.25E-041.23E-021.31E-018.49E-059.33E-048.14E-036.35E-02 + 39L2 300.001.18E-051.86E-042.07E-031.69E-023.08E-052.61E-041.76E-031.06E-02 + 39L2 390.004.87E-066.00E-055.36E-043.58E-031.40E-059.76E-055.45E-042.73E-03 + 39L2 500.002.16E-062.14E-051.57E-048.74E-046.70E-063.93E-051.85E-047.85E-04 + 39L2 730.006.80E-074.84E-062.68E-051.16E-042.22E-061.03E-053.84E-051.29E-04 + 39L21000.002.77E-071.53E-066.83E-062.45E-059.03E-073.52E-061.11E-053.15E-05 + 39L3 3.081.28E+021.74E+061.68E+092.68E+111.40E+015.63E+053.17E+091.83E+12 + 39L3 3.786.99E+016.16E+054.90E+089.04E+107.45E+002.03E+057.90E+083.79E+11 + 39L3 5.082.85E+011.37E+058.21E+071.54E+102.99E+004.64E+041.08E+083.92E+10 + 39L3 8.286.07E+001.15E+044.24E+066.53E+086.62E-014.06E+034.15E+069.60E+08 + 39L3 12.081.75E+001.70E+034.27E+055.15E+072.07E-016.19E+023.50E+055.66E+07 + 39L3 16.006.75E-014.10E+027.73E+047.55E+068.69E-021.53E+025.69E+047.06E+06 + 39L3 22.002.24E-018.18E+011.11E+048.40E+053.26E-023.15E+017.49E+036.87E+05 + 39L3 30.007.46E-021.70E+011.68E+039.75E+041.25E-026.80E+001.07E+037.33E+04 + 39L3 42.002.22E-023.12E+002.16E+029.33E+034.45E-031.30E+001.34E+026.71E+03 + 39L3 55.008.30E-038.00E-014.18E+011.42E+031.94E-033.49E-012.61E+011.02E+03 + 39L3 72.003.09E-032.06E-018.13E+002.16E+028.48E-049.48E-025.22E+001.59E+02 + 39L3 85.001.68E-038.96E-022.97E+006.78E+015.10E-044.27E-021.96E+005.14E+01 + 39L3 102.008.57E-043.60E-029.84E-011.90E+012.92E-041.79E-026.77E-011.51E+01 + 39L3 125.004.07E-041.31E-022.89E-014.64E+001.57E-046.86E-032.10E-013.92E+00 + 39L3 150.002.10E-045.32E-039.69E-021.32E+009.06E-052.93E-037.43E-021.19E+00 + 39L3 215.005.80E-059.23E-041.15E-021.13E-013.09E-055.63E-041.00E-021.19E-01 + 39L3 300.001.84E-051.91E-041.67E-031.22E-021.17E-051.28E-041.65E-031.51E-02 + 39L3 390.007.77E-065.80E-053.86E-042.23E-035.54E-064.13E-054.14E-043.13E-03 + 39L3 500.003.59E-061.97E-051.01E-044.74E-042.79E-061.47E-051.16E-047.37E-04 + 39L3 730.001.21E-064.29E-061.51E-055.20E-051.04E-063.39E-061.81E-058.90E-05 + 39L31000.005.28E-071.38E-063.65E-069.88E-064.88E-071.12E-064.22E-061.68E-05 + 39M1 1.392.49E+016.68E+046.74E+063.09E+098.93E+026.77E+068.45E+093.29E+12 + 39M1 2.391.10E+015.54E+032.10E+061.37E+081.77E+024.83E+052.81E+087.81E+10 + 39M1 4.393.57E+001.61E+021.34E+052.19E+072.86E+012.60E+046.95E+061.21E+09 + 39M1 8.399.14E-011.25E+002.64E+035.54E+054.13E+001.25E+031.57E+051.59E+07 + 39M1 15.392.24E-012.32E+001.34E+016.35E+036.76E-017.94E+015.23E+033.07E+05 + 39M1 25.006.70E-029.33E-015.83E+007.22E+011.60E-019.52E+003.82E+021.43E+04 + 39M1 40.001.95E-022.62E-012.40E+001.70E+014.03E-021.31E+003.30E+018.04E+02 + 39M1 52.009.58E-031.18E-011.08E+008.43E+001.88E-024.49E-018.78E+001.68E+02 + 39M1 70.004.20E-034.52E-023.79E-012.90E+008.03E-031.38E-012.03E+002.96E+01 + 39M1 103.001.41E-031.23E-028.63E-025.70E-012.71E-033.13E-023.24E-013.33E+00 + 39M1 150.004.82E-043.32E-031.90E-021.03E-019.73E-047.88E-035.87E-024.36E-01 + 39M1 280.008.36E-053.83E-041.51E-035.74E-031.91E-049.34E-044.21E-031.89E-02 + 39M1 500.001.88E-056.03E-051.73E-044.77E-044.65E-051.56E-044.74E-041.41E-03 + 39M2 1.315.42E+011.17E+074.65E+103.04E+139.69E+012.22E+051.10E+083.21E+10 + 39M2 2.311.58E+016.78E+051.26E+095.92E+111.73E+011.85E+046.63E+061.69E+09 + 39M2 4.313.20E+002.95E+042.56E+077.81E+092.59E+001.30E+033.03E+055.56E+07 + 39M2 8.314.80E-011.10E+034.53E+058.31E+073.46E-018.42E+011.18E+041.38E+06 + 39M2 15.317.00E-025.20E+011.11E+041.22E+065.28E-026.83E+005.80E+024.21E+04 + 39M2 25.001.36E-024.56E+005.79E+024.16E+041.16E-029.22E-015.13E+012.48E+03 + 39M2 40.002.68E-034.50E-013.50E+011.65E+032.71E-031.36E-015.03E+001.63E+02 + 39M2 52.001.06E-031.24E-017.39E+002.75E+021.20E-034.71E-021.38E+003.56E+01 + 39M2 70.003.65E-042.93E-021.29E+003.67E+014.79E-041.42E-023.20E-016.40E+00 + 39M2 103.009.07E-054.56E-031.37E-012.76E+001.45E-043.01E-034.86E-026.98E-01 + 39M2 150.002.35E-057.70E-041.61E-022.34E-014.55E-056.78E-047.96E-038.34E-02 + 39M2 280.002.64E-064.48E-055.31E-044.59E-036.76E-066.04E-054.31E-042.75E-03 + 39M2 500.003.87E-073.81E-062.80E-051.56E-041.19E-067.01E-063.31E-051.40E-04 + 39M3 1.301.10E+022.24E+078.95E+105.81E+133.18E+017.51E+062.35E+117.30E+14 + 39M3 2.303.07E+011.26E+062.33E+091.09E+125.60E+004.34E+054.61E+096.28E+12 + 39M3 4.305.99E+005.33E+044.58E+071.38E+108.26E-011.91E+046.47E+073.91E+10 + 39M3 8.308.68E-011.92E+037.81E+051.41E+081.10E-017.18E+027.88E+052.20E+08 + 39M3 15.301.23E-018.78E+011.83E+041.98E+061.70E-023.42E+011.44E+042.08E+06 + 39M3 25.002.33E-027.40E+009.09E+026.39E+043.78E-033.00E+006.26E+025.45E+04 + 39M3 40.004.45E-036.94E-015.16E+012.38E+038.97E-042.96E-013.35E+011.83E+03 + 39M3 52.001.73E-031.85E-011.04E+013.78E+024.02E-048.21E-026.74E+002.86E+02 + 39M3 70.005.89E-044.17E-021.71E+004.71E+011.62E-041.94E-021.13E+003.62E+01 + 39M3 103.001.44E-046.04E-031.65E-013.18E+004.98E-053.06E-031.16E-012.62E+00 + 39M3 150.003.67E-059.40E-041.72E-022.35E-011.60E-055.24E-041.35E-022.18E-01 + 39M3 280.004.11E-064.68E-054.42E-043.43E-032.52E-063.09E-054.29E-044.18E-03 + 39M3 500.006.38E-073.51E-061.81E-058.46E-054.97E-072.63E-062.08E-051.33E-04 + 39M4 1.161.29E+024.65E+054.12E+108.12E+145.84E+001.36E+052.18E+094.30E+12 + 39M4 2.161.44E+011.90E+045.11E+083.77E+127.25E-015.91E+033.51E+074.15E+10 + 39M4 4.161.21E+006.41E+024.92E+061.41E+107.57E-022.14E+024.86E+053.22E+08 + 39M4 8.167.92E-021.86E+014.12E+044.82E+076.88E-036.95E+006.37E+032.27E+06 + 39M4 15.165.64E-036.70E-015.07E+022.75E+057.06E-042.95E-011.24E+022.47E+04 + 39M4 25.006.18E-044.36E-021.47E+014.38E+031.07E-042.29E-025.32E+006.52E+02 + 39M4 40.007.33E-053.25E-035.34E-019.25E+011.76E-052.07E-032.81E-012.19E+01 + 39M4 52.002.20E-057.57E-048.47E-021.09E+016.32E-065.41E-045.48E-023.33E+00 + 39M4 70.005.59E-061.45E-041.07E-029.83E-011.97E-061.18E-048.69E-033.98E-01 + 39M4 103.009.36E-071.72E-057.42E-044.47E-024.30E-071.66E-058.07E-042.58E-02 + 39M4 150.001.72E-072.21E-065.77E-052.31E-039.68E-082.46E-068.17E-051.86E-03 + 39M5 1.161.90E+026.51E+056.29E+101.20E+153.70E+001.81E+049.99E+098.46E+14 + 39M5 2.162.10E+012.64E+047.74E+085.50E+124.69E-018.09E+021.28E+083.31E+12 + 39M5 4.161.74E+008.82E+027.39E+062.02E+105.06E-023.08E+011.31E+061.01E+10 + 39M5 8.161.13E-012.53E+016.12E+046.81E+074.80E-031.08E+001.18E+042.85E+07 + 39M5 15.167.98E-038.98E-017.41E+023.79E+055.16E-045.04E-021.58E+021.42E+05 + 39M5 25.008.67E-045.74E-022.10E+015.86E+038.12E-054.25E-034.90E+002.14E+03 + 39M5 40.001.02E-044.18E-037.41E-011.19E+021.38E-054.19E-041.91E-014.44E+01 + 39M5 52.003.06E-059.59E-041.15E-011.36E+015.10E-061.15E-043.15E-025.28E+00 + 39M5 70.007.77E-061.80E-041.40E-021.17E+001.64E-062.68E-054.16E-034.86E-01 + 39M5 103.001.31E-062.07E-059.27E-044.94E-023.75E-074.11E-063.08E-042.29E-02 + 39M5 150.002.43E-072.57E-066.75E-052.33E-038.98E-086.79E-072.55E-051.24E-03 + 39N+ 50.002.19E-037.26E-023.35E+001.26E+023.89E-031.18E-013.63E+001.12E+02 + 39N+ 70.008.29E-041.71E-024.79E-011.24E+011.47E-032.96E-026.00E-011.25E+01 + 39N+ 100.002.93E-043.93E-036.58E-021.13E+005.38E-047.22E-039.72E-021.36E+00 + 39N+ 150.008.98E-057.93E-047.79E-038.29E-021.76E-041.56E-031.37E-021.26E-01 + 39N+ 200.003.91E-052.65E-041.87E-031.43E-028.19E-055.56E-043.70E-032.55E-02 + 39N+ 500.003.35E-061.13E-053.60E-051.15E-048.24E-062.84E-059.05E-052.89E-04 + 40K 19.001.05E+017.06E+011.18E+021.19E+022.21E+011.00E+037.65E+031.70E+04 + 40K 19.709.57E+007.41E+012.00E+023.97E+021.98E+018.70E+027.63E+032.74E+04 + 40K 21.008.09E+007.53E+013.28E+021.19E+031.64E+016.78E+027.09E+034.08E+04 + 40K 24.205.55E+006.54E+014.71E+023.08E+031.08E+013.90E+025.08E+034.77E+04 + 40K 28.003.75E+004.96E+014.49E+023.80E+037.01E+002.21E+023.18E+033.70E+04 + 40K 32.002.60E+003.60E+013.61E+023.43E+034.72E+001.32E+021.95E+032.48E+04 + 40K 38.001.61E+002.25E+012.37E+022.39E+032.85E+006.79E+019.89E+021.30E+04 + 40K 46.009.44E-011.27E+011.32E+021.33E+031.63E+003.26E+014.48E+025.75E+03 + 40K 58.004.87E-016.01E+005.90E+015.56E+028.34E-011.35E+011.66E+021.96E+03 + 40K 71.002.72E-013.04E+002.74E+012.38E+024.68E-016.34E+006.93E+017.36E+02 + 40K 88.001.46E-011.45E+001.17E+019.08E+012.55E-012.87E+002.73E+012.55E+02 + 40K 101.009.74E-028.90E-016.66E+004.79E+011.74E-011.74E+001.50E+011.28E+02 + 40K 118.006.18E-025.12E-013.50E+002.29E+011.13E-019.94E-017.71E+005.92E+01 + 40K 141.003.67E-022.71E-011.66E+009.73E+006.96E-025.30E-013.62E+002.45E+01 + 40K 170.002.13E-021.38E-017.55E-013.94E+004.22E-022.78E-011.66E+009.82E+00 + 40K 235.008.43E-034.39E-021.95E-018.30E-011.81E-029.39E-024.45E-012.10E+00 + 40K 320.003.59E-031.52E-025.59E-021.97E-018.31E-033.50E-021.35E-015.12E-01 + 40K 410.001.87E-036.77E-032.15E-026.58E-024.53E-031.64E-025.39E-021.74E-01 + 40K 520.001.04E-033.27E-039.13E-032.46E-022.58E-038.18E-032.34E-026.55E-02 + 40K 750.004.54E-041.19E-032.78E-036.26E-031.12E-032.97E-037.03E-031.61E-02 + 40K 1000.002.54E-045.91E-041.23E-032.45E-035.96E-041.41E-032.94E-035.91E-03 + 40K 1250.001.69E-043.61E-046.93E-041.27E-033.73E-048.12E-041.56E-032.87E-03 + 40K 1500.001.23E-042.48E-044.50E-047.79E-042.58E-045.28E-049.55E-041.65E-03 + 40L1 3.532.96E+011.11E+042.74E+061.69E+083.64E+024.56E+059.68E+076.33E+09 + 40L1 4.232.15E+013.70E+031.34E+061.27E+082.12E+021.93E+053.53E+072.77E+09 + 40L1 5.531.30E+015.73E+023.46E+054.43E+079.50E+015.43E+047.92E+066.61E+08 + 40L1 8.735.04E+004.10E+002.01E+043.32E+062.43E+016.50E+036.34E+054.57E+07 + 40L1 12.532.24E+009.70E+001.15E+032.68E+058.25E+001.26E+038.85E+045.13E+06 + 40L1 16.001.26E+001.05E+019.17E+013.81E+043.98E+004.24E+022.38E+041.16E+06 + 40L1 22.005.76E-016.85E+002.24E+011.92E+031.55E+001.05E+024.40E+031.67E+05 + 40L1 30.002.61E-013.42E+002.35E+011.31E+026.18E-012.80E+018.76E+022.58E+04 + 40L1 42.001.07E-011.36E+001.18E+017.70E+012.30E-016.90E+001.58E+023.48E+03 + 40L1 55.005.13E-026.01E-015.21E+003.88E+011.05E-012.31E+004.13E+017.19E+02 + 40L1 72.002.43E-022.53E-012.04E+001.50E+014.87E-027.97E-011.11E+011.53E+02 + 40L1 85.001.52E-021.45E-011.10E+007.71E+003.05E-024.20E-015.04E+006.00E+01 + 40L1 102.009.08E-037.83E-025.44E-013.54E+001.83E-022.10E-012.15E+002.18E+01 + 40L1 125.005.09E-033.88E-022.43E-011.43E+001.04E-029.89E-028.47E-017.22E+00 + 40L1 150.003.02E-032.06E-021.16E-016.24E-016.37E-035.11E-023.75E-012.74E+00 + 40L1 215.001.09E-035.89E-032.70E-021.18E-012.46E-031.46E-027.97E-024.34E-01 + 40L1 300.004.37E-041.90E-037.17E-032.60E-021.05E-034.85E-032.06E-028.70E-02 + 40L1 390.002.19E-048.11E-042.64E-038.27E-035.48E-042.13E-037.53E-032.64E-02 + 40L1 500.001.18E-043.79E-041.08E-032.98E-033.02E-041.01E-033.06E-039.08E-03 + 40L1 730.005.02E-051.33E-043.17E-047.28E-041.26E-043.47E-048.54E-042.03E-03 + 40L11000.002.65E-056.20E-051.30E-042.61E-046.33E-051.52E-043.23E-046.62E-04 + 40L2 3.315.84E+017.70E+056.77E+089.64E+104.01E+012.04E+042.21E+061.27E+08 + 40L2 4.013.36E+012.92E+052.16E+083.62E+102.22E+019.49E+031.21E+061.00E+08 + 40L2 5.311.45E+017.06E+044.01E+077.00E+099.31E+003.08E+034.10E+054.02E+07 + 40L2 8.513.34E+006.56E+032.36E+063.49E+082.16E+004.61E+025.21E+044.74E+06 + 40L2 12.311.01E+001.03E+032.57E+053.02E+076.89E-011.04E+029.36E+037.06E+05 + 40L2 16.004.22E-012.77E+025.33E+045.18E+063.05E-013.58E+012.68E+031.71E+05 + 40L2 22.001.43E-015.67E+017.91E+035.99E+051.14E-019.85E+005.78E+022.92E+04 + 40L2 30.004.87E-021.22E+011.24E+037.27E+044.34E-022.80E+001.28E+025.07E+03 + 40L2 42.001.48E-022.31E+001.68E+027.36E+031.53E-027.18E-012.47E+017.44E+02 + 40L2 55.005.65E-036.17E-013.41E+011.18E+036.62E-032.41E-016.59E+001.59E+02 + 40L2 72.002.14E-031.66E-017.02E+001.92E+022.87E-038.17E-021.77E+003.39E+01 + 40L2 85.001.17E-037.45E-022.67E+006.31E+011.71E-034.20E-027.89E-011.31E+01 + 40L2 102.006.07E-043.10E-029.32E-011.88E+019.75E-042.02E-023.26E-014.65E+00 + 40L2 125.002.91E-041.18E-022.91E-014.91E+005.20E-049.03E-031.22E-011.47E+00 + 40L2 150.001.51E-045.00E-031.04E-011.50E+002.97E-044.40E-035.12E-025.31E-01 + 40L2 215.004.23E-059.50E-041.42E-021.51E-019.86E-051.08E-039.40E-037.31E-02 + 40L2 300.001.34E-052.15E-042.39E-031.95E-023.59E-053.03E-042.04E-031.23E-02 + 40L2 390.005.55E-066.93E-056.21E-044.14E-031.63E-051.13E-046.32E-043.16E-03 + 40L2 500.002.50E-062.47E-051.82E-041.01E-037.81E-064.58E-052.15E-049.10E-04 + 40L2 730.007.91E-075.60E-063.11E-051.35E-042.59E-061.20E-054.48E-051.50E-04 + 40L21000.003.11E-071.78E-067.97E-062.86E-051.05E-064.12E-061.30E-053.68E-05 + 40L3 3.221.18E+021.56E+061.44E+092.13E+111.37E+015.34E+052.89E+091.59E+12 + 40L3 3.926.62E+015.76E+054.40E+087.62E+107.46E+002.00E+057.59E+083.50E+11 + 40L3 5.222.79E+011.35E+057.81E+071.39E+103.08E+004.79E+041.10E+083.90E+10 + 40L3 8.426.17E+001.19E+044.31E+066.40E+087.06E-014.42E+034.55E+061.03E+09 + 40L3 12.221.82E+001.81E+034.49E+055.27E+072.24E-016.92E+023.95E+056.31E+07 + 40L3 16.007.32E-014.62E+028.72E+048.40E+069.77E-021.81E+026.92E+048.56E+06 + 40L3 22.002.44E-019.23E+011.25E+049.38E+053.67E-023.74E+019.06E+038.30E+05 + 40L3 30.008.18E-021.93E+011.90E+031.09E+051.41E-028.06E+001.29E+038.82E+04 + 40L3 42.002.44E-023.52E+002.44E+021.05E+045.01E-031.54E+001.61E+028.04E+03 + 40L3 55.009.17E-039.05E-014.73E+011.60E+032.19E-034.12E-013.12E+011.22E+03 + 40L3 72.003.42E-032.33E-019.21E+002.44E+029.57E-041.12E-016.22E+001.89E+02 + 40L3 85.001.86E-031.01E-013.37E+007.66E+015.76E-045.03E-022.33E+006.11E+01 + 40L3 102.009.53E-044.08E-021.12E+002.15E+013.30E-042.11E-028.03E-011.79E+01 + 40L3 125.004.53E-041.48E-023.28E-015.26E+001.78E-048.06E-032.48E-014.64E+00 + 40L3 150.002.34E-046.04E-031.10E-011.49E+001.02E-043.43E-038.79E-021.40E+00 + 40L3 215.006.51E-051.05E-031.31E-021.28E-013.49E-056.57E-041.18E-021.40E-01 + 40L3 300.002.08E-052.17E-041.91E-031.39E-021.32E-051.48E-041.93E-031.78E-02 + 40L3 390.008.80E-066.60E-054.39E-042.54E-036.26E-064.78E-054.85E-043.67E-03 + 40L3 500.004.05E-062.24E-051.15E-045.40E-043.16E-061.70E-051.35E-048.63E-04 + 40L3 730.001.35E-064.88E-061.73E-055.94E-051.18E-063.89E-062.10E-051.04E-04 + 40L31000.006.03E-071.57E-064.16E-061.13E-055.51E-071.28E-064.89E-061.95E-05 + 40M1 1.432.39E+016.59E+045.69E+063.38E+099.50E+027.19E+068.92E+093.37E+12 + 40M1 2.431.08E+015.89E+032.02E+061.09E+081.94E+025.38E+053.14E+088.55E+10 + 40M1 4.433.59E+001.95E+021.42E+052.15E+073.21E+012.98E+048.02E+061.38E+09 + 40M1 8.439.35E-011.04E+003.15E+036.08E+054.68E+001.45E+031.83E+051.83E+07 + 40M1 15.432.32E-012.11E+002.04E+017.97E+037.71E-019.24E+016.10E+033.55E+05 + 40M1 25.007.04E-029.13E-014.89E+001.03E+021.84E-011.11E+014.46E+021.67E+04 + 40M1 40.002.07E-022.66E-012.27E+001.49E+014.62E-021.52E+003.84E+019.32E+02 + 40M1 52.001.02E-021.21E-011.05E+007.77E+002.15E-025.19E-011.02E+011.94E+02 + 40M1 70.004.48E-034.70E-023.80E-012.79E+009.18E-031.59E-012.34E+003.41E+01 + 40M1 103.001.51E-031.29E-028.85E-025.70E-013.10E-033.58E-023.71E-013.82E+00 + 40M1 150.005.19E-043.52E-031.98E-021.06E-011.11E-039.00E-036.69E-024.97E-01 + 40M1 280.009.09E-054.11E-041.61E-036.07E-032.16E-041.06E-034.77E-032.14E-02 + 40M1 500.002.04E-056.55E-051.87E-045.15E-045.24E-051.76E-045.35E-041.60E-03 + 40M2 1.345.27E+011.20E+074.71E+102.98E+131.04E+022.36E+051.13E+083.12E+10 + 40M2 2.341.60E+017.30E+051.35E+096.21E+111.93E+012.05E+047.17E+061.76E+09 + 40M2 4.343.34E+003.28E+042.85E+078.54E+092.94E+001.47E+033.36E+056.03E+07 + 40M2 8.345.15E-011.24E+035.13E+059.30E+073.98E-019.65E+011.34E+041.54E+06 + 40M2 15.347.67E-025.94E+011.27E+041.39E+066.12E-027.88E+006.62E+024.75E+04 + 40M2 25.001.52E-025.28E+006.72E+024.80E+041.36E-021.07E+005.94E+012.85E+03 + 40M2 40.003.01E-035.21E-014.07E+011.91E+033.18E-031.59E-015.84E+001.88E+02 + 40M2 52.001.19E-031.44E-018.61E+003.19E+021.41E-035.50E-021.60E+004.12E+01 + 40M2 70.004.14E-043.40E-021.50E+004.26E+015.63E-041.66E-023.73E-017.42E+00 + 40M2 103.001.04E-045.32E-031.60E-013.22E+001.71E-043.54E-035.69E-028.13E-01 + 40M2 150.002.70E-059.01E-041.89E-022.74E-015.37E-057.98E-049.34E-039.75E-02 + 40M2 280.003.05E-065.26E-056.26E-045.40E-038.01E-067.14E-055.08E-043.23E-03 + 40M2 500.004.51E-074.48E-063.31E-051.85E-041.42E-068.33E-063.92E-051.66E-04 + 40M3 1.331.07E+022.29E+079.09E+105.71E+133.39E+018.11E+062.55E+117.91E+14 + 40M3 2.333.11E+011.35E+062.51E+091.14E+126.14E+004.93E+055.34E+097.33E+12 + 40M3 4.336.25E+005.91E+045.09E+071.51E+109.25E-012.23E+047.78E+074.74E+10 + 40M3 8.339.30E-012.17E+038.83E+051.58E+081.25E-018.54E+029.64E+052.71E+08 + 40M3 15.331.34E-011.00E+022.09E+042.24E+061.93E-024.10E+011.77E+042.55E+06 + 40M3 25.002.58E-028.51E+001.05E+037.33E+044.33E-033.62E+007.72E+026.74E+04 + 40M3 40.004.98E-037.99E-015.96E+012.73E+031.03E-033.57E-014.10E+012.25E+03 + 40M3 52.001.95E-032.14E-011.20E+014.34E+024.61E-049.89E-028.23E+003.50E+02 + 40M3 70.006.64E-044.81E-021.98E+005.43E+011.86E-042.34E-021.37E+004.41E+01 + 40M3 103.001.63E-046.98E-031.91E-013.67E+005.74E-053.67E-031.41E-013.18E+00 + 40M3 150.004.19E-051.09E-032.00E-022.72E-011.84E-056.26E-041.62E-022.63E-01 + 40M3 280.004.73E-065.42E-055.14E-043.98E-032.91E-063.66E-055.15E-045.02E-03 + 40M3 500.007.24E-074.06E-062.10E-059.83E-055.73E-073.10E-062.48E-051.59E-04 + 40M4 1.181.36E+024.97E+054.47E+108.90E+146.51E+001.54E+052.49E+094.80E+12 + 40M4 2.181.59E+012.13E+045.92E+084.45E+128.38E-017.03E+034.24E+074.94E+10 + 40M4 4.181.37E+007.41E+025.92E+061.72E+108.95E-022.61E+026.03E+053.97E+08 + 40M4 8.189.26E-022.20E+015.05E+046.01E+078.27E-038.63E+008.01E+032.84E+06 + 40M4 15.186.72E-038.04E-016.29E+023.45E+058.60E-043.69E-011.57E+023.11E+04 + 40M4 25.007.48E-045.32E-021.84E+015.57E+031.32E-042.89E-026.78E+008.30E+02 + 40M4 40.008.96E-053.99E-036.71E-011.18E+022.17E-052.62E-033.58E-012.79E+01 + 40M4 52.002.70E-059.33E-041.07E-011.39E+017.85E-066.85E-046.99E-024.24E+00 + 40M4 70.006.90E-061.80E-041.34E-021.25E+002.45E-061.50E-041.11E-025.08E-01 + 40M4 103.001.16E-062.15E-059.35E-045.69E-025.36E-072.10E-051.03E-033.30E-02 + 40M4 150.002.08E-072.78E-067.29E-052.94E-031.21E-073.13E-061.05E-042.38E-03 + 40M5 1.182.00E+026.93E+056.84E+101.31E+154.12E+002.03E+041.15E+109.83E+14 + 40M5 2.182.31E+012.94E+048.98E+086.47E+125.40E-019.50E+021.57E+084.15E+12 + 40M5 4.181.98E+001.02E+038.90E+062.47E+105.95E-023.71E+011.66E+061.32E+10 + 40M5 8.181.32E-012.97E+017.52E+048.47E+075.74E-031.32E+001.53E+043.79E+07 + 40M5 15.189.49E-031.07E+009.21E+024.75E+056.24E-046.18E-022.05E+021.90E+05 + 40M5 25.001.05E-036.96E-022.64E+017.44E+039.93E-055.26E-036.42E+002.86E+03 + 40M5 40.001.25E-045.10E-039.32E-011.51E+021.70E-055.19E-042.50E-015.92E+01 + 40M5 52.003.75E-051.17E-031.45E-011.72E+016.29E-061.43E-044.12E-027.01E+00 + 40M5 70.009.56E-062.22E-041.77E-021.49E+002.03E-063.33E-055.42E-036.42E-01 + 40M5 103.001.60E-062.57E-051.17E-036.28E-024.66E-075.12E-064.00E-043.01E-02 + 40M5 150.002.92E-073.21E-068.51E-052.96E-031.12E-078.46E-073.29E-051.62E-03 + 40N+ 50.002.46E-038.48E-024.03E+001.53E+024.64E-031.44E-014.49E+001.41E+02 + 40N+ 70.009.31E-041.98E-025.72E-011.51E+011.76E-033.58E-027.36E-011.56E+01 + 40N+ 100.003.30E-044.50E-037.78E-021.36E+006.41E-048.68E-031.18E-011.67E+00 + 40N+ 150.001.01E-049.03E-049.09E-039.87E-022.10E-041.87E-031.66E-021.53E-01 + 40N+ 200.004.44E-053.02E-042.17E-031.69E-029.70E-056.62E-044.43E-033.07E-02 + 40N+ 500.003.82E-061.29E-054.12E-051.33E-049.68E-063.35E-051.07E-043.43E-04 + 41K 19.999.50E+006.00E+019.18E+018.27E+012.13E+019.12E+026.57E+031.34E+04 + 41K 20.698.69E+006.29E+011.55E+022.75E+021.92E+017.98E+026.57E+032.16E+04 + 41K 21.997.40E+006.42E+012.56E+028.38E+021.60E+016.29E+026.16E+033.25E+04 + 41K 25.195.16E+005.68E+013.77E+022.25E+031.07E+013.71E+024.53E+033.92E+04 + 41K 28.993.54E+004.39E+013.70E+022.90E+037.08E+002.15E+022.91E+033.16E+04 + 41K 33.002.48E+003.24E+013.05E+022.71E+034.83E+001.30E+021.82E+032.18E+04 + 41K 39.001.56E+002.07E+012.06E+021.96E+032.95E+006.84E+019.50E+021.19E+04 + 41K 47.009.27E-011.19E+011.19E+021.13E+031.71E+003.34E+014.41E+025.42E+03 + 41K 59.004.86E-015.77E+005.44E+014.93E+028.86E-011.41E+011.68E+021.91E+03 + 41K 72.002.74E-012.97E+002.59E+012.17E+025.01E-016.68E+007.12E+017.34E+02 + 41K 89.001.48E-011.43E+001.13E+018.50E+012.75E-013.05E+002.84E+012.59E+02 + 41K 102.009.97E-028.89E-016.49E+004.54E+011.88E-011.86E+001.58E+011.32E+02 + 41K 119.006.36E-025.15E-013.44E+002.20E+011.23E-011.07E+008.16E+006.15E+01 + 41K 142.003.80E-022.75E-011.65E+009.50E+007.59E-025.73E-013.86E+002.58E+01 + 41K 170.002.25E-021.45E-017.78E-014.01E+004.68E-023.07E-011.82E+001.07E+01 + 41K 235.008.95E-034.61E-022.03E-018.55E-012.01E-021.04E-014.89E-012.29E+00 + 41K 320.003.83E-031.60E-025.86E-022.05E-019.17E-033.86E-021.48E-015.60E-01 + 41K 410.002.00E-037.17E-032.27E-026.90E-024.99E-031.81E-025.92E-021.91E-01 + 41K 520.001.11E-033.48E-039.67E-032.59E-022.83E-038.99E-032.57E-027.16E-02 + 41K 750.004.87E-041.27E-032.97E-036.67E-031.22E-033.26E-037.71E-031.77E-02 + 41K 1000.002.73E-046.33E-041.32E-032.62E-036.51E-041.54E-033.22E-036.47E-03 + 41K 1250.001.80E-043.88E-047.45E-041.37E-034.07E-048.89E-041.71E-033.14E-03 + 41K 1500.001.32E-042.67E-044.84E-048.39E-042.80E-045.77E-041.04E-031.80E-03 + 41L1 3.702.71E+019.97E+032.27E+061.25E+083.58E+024.29E+058.66E+075.25E+09 + 41L1 4.402.00E+013.51E+031.16E+061.00E+082.13E+021.87E+053.29E+072.42E+09 + 41L1 5.701.23E+015.99E+023.22E+053.81E+079.81E+015.51E+047.77E+066.13E+08 + 41L1 8.904.91E+006.16E+002.11E+043.21E+062.59E+016.92E+036.60E+054.58E+07 + 41L1 12.702.22E+007.56E+001.39E+032.84E+058.95E+001.37E+039.48E+045.35E+06 + 41L1 16.001.29E+009.17E+001.48E+024.73E+044.49E+004.89E+022.73E+041.31E+06 + 41L1 22.005.95E-016.42E+001.75E+012.73E+031.74E+001.21E+025.03E+031.89E+05 + 41L1 30.002.71E-013.33E+002.00E+011.49E+026.97E-013.20E+019.99E+022.92E+04 + 41L1 42.001.12E-011.36E+001.09E+016.56E+012.60E-017.86E+001.79E+023.93E+03 + 41L1 55.005.38E-026.08E-015.02E+003.52E+011.19E-012.63E+004.67E+018.11E+02 + 41L1 72.002.56E-022.58E-012.02E+001.42E+015.48E-029.02E-011.26E+011.72E+02 + 41L1 85.001.61E-021.50E-011.10E+007.46E+003.42E-024.74E-015.69E+006.75E+01 + 41L1 102.009.60E-038.10E-025.49E-013.49E+002.05E-022.37E-012.42E+002.45E+01 + 41L1 125.005.39E-034.04E-022.47E-011.43E+001.17E-021.11E-019.51E-018.09E+00 + 41L1 150.003.21E-032.15E-021.19E-016.30E-017.13E-035.74E-024.20E-013.07E+00 + 41L1 215.001.17E-036.20E-032.81E-021.22E-012.74E-031.63E-028.91E-024.85E-01 + 41L1 300.004.68E-042.01E-037.53E-032.71E-021.17E-035.41E-032.30E-029.68E-02 + 41L1 390.002.36E-048.63E-042.79E-038.71E-036.09E-042.37E-038.38E-032.93E-02 + 41L1 500.001.27E-044.06E-041.15E-033.16E-033.35E-041.12E-033.39E-031.01E-02 + 41L1 730.005.39E-051.43E-043.40E-047.82E-041.40E-043.85E-049.46E-042.25E-03 + 41L11000.002.87E-056.70E-051.40E-042.82E-046.97E-051.68E-043.57E-047.32E-04 + 41L2 3.465.38E+016.87E+055.73E+087.55E+103.95E+011.90E+041.90E+069.85E+07 + 41L2 4.163.17E+012.71E+051.92E+083.01E+102.24E+019.16E+031.09E+068.24E+07 + 41L2 5.461.41E+016.89E+043.78E+076.24E+099.68E+003.09E+033.89E+053.56E+07 + 41L2 8.663.39E+006.76E+032.39E+063.39E+082.33E+004.84E+025.26E+044.59E+06 + 41L2 12.461.05E+001.09E+032.69E+053.08E+077.56E-011.12E+029.79E+037.16E+05 + 41L2 16.004.59E-013.14E+026.02E+045.78E+063.49E-014.06E+013.00E+031.87E+05 + 41L2 22.001.56E-016.43E+018.96E+036.72E+051.30E-011.12E+016.49E+023.23E+04 + 41L2 30.005.35E-021.38E+011.41E+038.18E+044.97E-023.19E+001.44E+025.66E+03 + 41L2 42.001.64E-022.63E+001.91E+028.31E+031.75E-028.19E-012.79E+018.35E+02 + 41L2 55.006.27E-037.01E-013.88E+011.34E+037.60E-032.76E-017.49E+001.79E+02 + 41L2 72.002.38E-031.89E-018.01E+002.18E+023.30E-039.35E-022.01E+003.84E+01 + 41L2 85.001.31E-038.49E-023.05E+007.18E+011.97E-034.81E-029.00E-011.49E+01 + 41L2 102.006.80E-043.54E-021.07E+002.14E+011.12E-032.33E-023.72E-015.29E+00 + 41L2 125.003.27E-041.35E-023.34E-015.61E+006.01E-041.04E-021.40E-011.68E+00 + 41L2 150.001.70E-045.72E-031.19E-011.71E+003.43E-045.06E-035.87E-026.06E-01 + 41L2 215.004.79E-051.09E-031.63E-021.73E-011.14E-041.25E-031.08E-028.38E-02 + 41L2 300.001.52E-052.47E-042.76E-032.25E-024.16E-053.50E-042.35E-031.41E-02 + 41L2 390.006.34E-067.98E-057.17E-044.78E-031.90E-051.32E-047.31E-043.64E-03 + 41L2 500.002.84E-062.85E-052.10E-041.17E-039.08E-065.32E-052.50E-041.05E-03 + 41L2 730.008.87E-076.47E-063.61E-051.56E-043.01E-061.40E-055.20E-051.74E-04 + 41L21000.003.58E-072.06E-069.25E-063.32E-051.23E-064.81E-061.51E-054.28E-05 + 41L3 3.371.09E+021.40E+061.22E+091.68E+111.33E+015.04E+052.61E+091.37E+12 + 41L3 4.076.26E+015.37E+053.94E+086.37E+107.45E+001.97E+057.25E+083.22E+11 + 41L3 5.372.71E+011.32E+057.39E+071.24E+103.17E+004.93E+041.12E+083.84E+10 + 41L3 8.576.24E+001.23E+044.35E+066.23E+087.50E-014.79E+034.94E+061.10E+09 + 41L3 12.371.88E+001.91E+034.68E+055.36E+072.42E-017.71E+024.43E+056.98E+07 + 41L3 16.007.92E-015.20E+029.80E+049.31E+061.09E-012.14E+028.37E+041.03E+07 + 41L3 22.002.65E-011.04E+021.41E+041.05E+064.11E-024.41E+011.09E+049.98E+05 + 41L3 30.008.94E-022.17E+012.14E+031.22E+051.58E-029.51E+001.55E+031.06E+05 + 41L3 42.002.68E-023.97E+002.76E+021.18E+045.63E-031.81E+001.92E+029.59E+03 + 41L3 55.001.01E-021.02E+005.34E+011.79E+032.46E-034.85E-013.72E+011.45E+03 + 41L3 72.003.78E-032.63E-011.04E+012.74E+021.08E-031.31E-017.39E+002.25E+02 + 41L3 85.002.06E-031.15E-013.81E+008.63E+016.48E-045.90E-022.76E+007.24E+01 + 41L3 102.001.06E-034.61E-021.26E+002.43E+013.71E-042.47E-029.50E-012.12E+01 + 41L3 125.005.04E-041.68E-023.72E-015.93E+002.00E-049.42E-032.93E-015.47E+00 + 41L3 150.002.61E-046.83E-031.25E-011.69E+001.15E-044.01E-031.04E-011.66E+00 + 41L3 215.007.23E-051.19E-031.48E-021.45E-013.94E-057.64E-041.38E-021.65E-01 + 41L3 300.002.31E-052.46E-042.17E-031.57E-021.49E-051.72E-042.26E-032.08E-02 + 41L3 390.009.86E-067.48E-054.99E-042.88E-037.06E-065.52E-055.66E-044.30E-03 + 41L3 500.004.57E-062.54E-051.31E-046.13E-043.56E-061.96E-051.58E-041.01E-03 + 41L3 730.001.53E-065.53E-061.96E-056.75E-051.33E-064.46E-062.44E-051.21E-04 + 41L31000.006.70E-071.77E-064.72E-061.28E-056.20E-071.46E-065.64E-062.27E-05 + 41M1 1.472.28E+016.45E+044.75E+063.58E+091.01E+037.57E+069.31E+093.39E+12 + 41M1 2.471.06E+016.21E+031.92E+068.56E+072.12E+025.96E+053.48E+089.26E+10 + 41M1 4.473.59E+002.31E+021.49E+052.08E+073.58E+013.40E+049.18E+061.56E+09 + 41M1 8.479.53E-011.11E+003.69E+036.59E+055.28E+001.67E+032.13E+052.11E+07 + 41M1 15.472.40E-011.89E+003.05E+019.77E+038.75E-011.07E+027.07E+034.10E+05 + 41M1 25.007.39E-028.88E-014.08E+001.48E+022.10E-011.29E+015.21E+021.95E+04 + 41M1 40.002.18E-022.68E-012.12E+001.33E+015.27E-021.76E+004.44E+011.08E+03 + 41M1 52.001.08E-021.24E-011.02E+007.11E+002.46E-025.99E-011.17E+012.23E+02 + 41M1 70.004.77E-034.86E-023.79E-012.68E+001.05E-021.82E-012.69E+003.91E+01 + 41M1 103.001.62E-031.35E-029.05E-025.69E-013.52E-034.10E-024.24E-014.36E+00 + 41M1 150.005.59E-043.72E-032.06E-021.08E-011.26E-031.02E-027.62E-025.65E-01 + 41M1 280.009.82E-054.41E-041.71E-036.40E-032.44E-041.20E-035.40E-032.42E-02 + 41M1 500.002.22E-057.10E-052.02E-045.54E-045.88E-051.98E-046.02E-041.80E-03 + 41M2 1.385.09E+011.21E+074.72E+102.87E+131.12E+022.50E+051.15E+082.98E+10 + 41M2 2.381.61E+017.80E+051.44E+096.45E+112.13E+012.26E+047.67E+061.80E+09 + 41M2 4.383.47E+003.62E+043.15E+079.27E+093.32E+001.66E+033.71E+056.48E+07 + 41M2 8.385.51E-011.40E+035.79E+051.04E+084.55E-011.10E+021.50E+041.70E+06 + 41M2 15.388.36E-026.76E+011.45E+041.56E+067.06E-029.05E+007.52E+025.33E+04 + 41M2 25.001.69E-026.08E+007.77E+025.51E+041.58E-021.25E+006.84E+013.26E+03 + 41M2 40.003.37E-036.02E-014.71E+012.20E+033.71E-031.85E-016.75E+002.16E+02 + 41M2 52.001.34E-031.67E-019.98E+003.69E+021.65E-036.41E-021.86E+004.74E+01 + 41M2 70.004.69E-043.94E-021.74E+004.93E+016.59E-041.94E-024.33E-018.56E+00 + 41M2 103.001.18E-046.17E-031.86E-013.74E+002.00E-044.13E-036.62E-029.42E-01 + 41M2 150.003.10E-051.05E-032.20E-023.19E-016.31E-059.36E-041.09E-021.13E-01 + 41M2 280.003.50E-066.15E-057.34E-046.33E-039.46E-068.41E-055.96E-043.79E-03 + 41M2 500.005.23E-075.26E-063.90E-052.17E-041.68E-069.84E-064.63E-051.96E-04 + 41M3 1.361.04E+022.31E+079.12E+105.51E+133.58E+018.66E+062.72E+118.41E+14 + 41M3 2.363.13E+011.44E+062.67E+091.18E+126.70E+005.54E+056.12E+098.44E+12 + 41M3 4.366.50E+006.51E+045.61E+071.63E+101.03E+002.59E+049.27E+075.68E+10 + 41M3 8.369.92E-012.43E+039.91E+051.75E+081.41E-011.01E+031.17E+063.30E+08 + 41M3 15.361.46E-011.13E+022.36E+042.51E+062.19E-024.88E+012.15E+043.12E+06 + 41M3 25.002.85E-029.75E+001.20E+038.36E+044.95E-034.36E+009.49E+028.29E+04 + 41M3 40.005.55E-039.17E-016.85E+013.12E+031.18E-034.29E-015.01E+012.74E+03 + 41M3 52.002.18E-032.45E-011.39E+014.97E+025.27E-041.19E-011.00E+014.26E+02 + 41M3 70.007.46E-045.53E-022.28E+006.22E+012.13E-042.80E-021.67E+005.35E+01 + 41M3 103.001.84E-048.04E-032.20E-014.22E+006.57E-054.38E-031.70E-013.83E+00 + 41M3 150.004.74E-051.25E-032.31E-023.13E-012.11E-057.45E-041.95E-023.17E-01 + 41M3 280.005.36E-066.26E-055.95E-044.60E-033.34E-064.33E-056.15E-046.00E-03 + 41M3 500.008.42E-074.70E-062.43E-051.14E-046.57E-073.63E-062.95E-051.89E-04 + 41M4 1.211.41E+025.24E+054.78E+109.55E+147.19E+001.73E+052.80E+095.25E+12 + 41M4 2.211.73E+012.36E+046.77E+085.16E+129.59E-018.26E+035.05E+075.78E+10 + 41M4 4.211.55E+008.48E+027.04E+062.08E+101.05E-013.16E+027.39E+054.81E+08 + 41M4 8.211.07E-012.57E+016.14E+047.41E+079.87E-031.06E+019.96E+033.51E+06 + 41M4 15.217.94E-039.56E-017.73E+024.30E+051.04E-034.58E-011.97E+023.88E+04 + 41M4 25.008.99E-046.43E-022.29E+017.02E+031.61E-043.62E-028.57E+001.05E+03 + 41M4 40.001.08E-044.86E-038.36E-011.48E+022.67E-053.28E-034.53E-013.53E+01 + 41M4 52.003.28E-051.14E-031.33E-011.75E+019.66E-068.60E-048.84E-025.36E+00 + 41M4 70.008.42E-062.21E-041.67E-021.58E+003.03E-061.89E-041.40E-026.43E-01 + 41M4 103.001.42E-062.65E-051.17E-037.18E-026.64E-072.65E-051.31E-034.18E-02 + 41M4 150.002.59E-073.43E-069.12E-053.72E-031.50E-073.94E-061.33E-043.02E-03 + 41M5 1.202.08E+027.29E+057.34E+101.41E+154.54E+002.25E+041.30E+101.12E+15 + 41M5 2.202.52E+013.25E+041.03E+097.52E+126.15E-011.10E+031.89E+085.13E+12 + 41M5 4.202.23E+001.16E+031.06E+072.99E+106.94E-024.42E+012.07E+061.70E+10 + 41M5 8.201.53E-013.47E+019.15E+041.04E+086.81E-031.59E+001.95E+044.97E+07 + 41M5 15.201.12E-021.27E+001.13E+035.91E+057.48E-047.52E-022.64E+022.50E+05 + 41M5 25.001.25E-038.37E-023.28E+019.36E+031.20E-046.46E-038.34E+003.80E+03 + 41M5 40.001.50E-046.18E-031.16E+001.90E+022.07E-056.38E-043.24E-017.81E+01 + 41M5 52.004.55E-051.43E-031.80E-012.17E+017.69E-061.76E-045.33E-029.21E+00 + 41M5 70.001.17E-052.70E-042.20E-021.87E+002.48E-064.11E-057.00E-038.42E-01 + 41M5 103.001.98E-063.14E-051.46E-037.90E-025.72E-076.32E-065.15E-043.94E-02 + 41M5 150.003.60E-073.94E-061.06E-043.72E-031.37E-071.05E-064.22E-052.11E-03 + 41N+ 50.002.68E-039.79E-024.82E+001.84E+025.38E-031.70E-015.44E+001.73E+02 + 41N+ 70.001.02E-032.25E-026.78E-011.80E+012.04E-034.21E-028.83E-011.90E+01 + 41N+ 100.003.61E-045.06E-039.11E-021.62E+007.40E-041.02E-021.40E-012.02E+00 + 41N+ 150.001.11E-041.00E-031.05E-021.16E-012.41E-042.17E-031.94E-021.81E-01 + 41N+ 200.004.88E-053.34E-042.47E-031.97E-021.11E-047.66E-045.17E-033.62E-02 + 41N+ 500.004.23E-061.43E-054.60E-051.51E-041.10E-053.83E-051.23E-043.95E-04 + 42K 21.008.61E+005.12E+017.22E+015.83E+012.05E+018.34E+025.67E+031.07E+04 + 42K 21.707.90E+005.37E+011.21E+021.94E+021.86E+017.34E+025.68E+031.71E+04 + 42K 23.006.78E+005.50E+012.01E+025.95E+021.57E+015.86E+025.37E+032.60E+04 + 42K 26.204.80E+004.94E+013.02E+021.66E+031.06E+013.53E+024.04E+033.24E+04 + 42K 30.003.34E+003.89E+013.05E+022.22E+037.14E+002.09E+022.66E+032.70E+04 + 42K 34.002.38E+002.93E+012.58E+022.14E+034.93E+001.29E+021.71E+031.92E+04 + 42K 40.001.52E+001.91E+011.80E+021.61E+033.06E+006.88E+019.13E+021.08E+04 + 42K 48.009.11E-011.12E+011.06E+029.66E+021.80E+003.42E+014.34E+025.11E+03 + 42K 60.004.84E-015.54E+005.02E+014.37E+029.41E-011.47E+011.69E+021.86E+03 + 42K 73.002.76E-012.90E+002.44E+011.98E+025.36E-017.04E+007.30E+017.32E+02 + 42K 90.001.51E-011.42E+001.08E+017.94E+012.97E-013.25E+002.96E+012.64E+02 + 42K 103.001.02E-018.86E-016.31E+004.31E+012.03E-011.99E+001.66E+011.36E+02 + 42K 120.006.54E-025.18E-013.38E+002.12E+011.33E-011.15E+008.62E+006.39E+01 + 42K 143.003.93E-022.78E-011.64E+009.27E+008.26E-026.18E-014.10E+002.70E+01 + 42K 170.002.38E-021.51E-018.01E-014.07E+005.19E-023.39E-011.99E+001.16E+01 + 42K 235.009.50E-034.83E-022.11E-018.79E-012.22E-021.14E-015.36E-012.50E+00 + 42K 320.004.07E-031.69E-026.12E-022.13E-011.01E-024.25E-021.62E-016.11E-01 + 42K 410.002.13E-037.59E-032.38E-027.21E-025.49E-031.99E-026.49E-022.08E-01 + 42K 520.001.19E-033.69E-031.02E-022.73E-023.11E-039.87E-032.81E-027.82E-02 + 42K 750.005.21E-041.36E-033.16E-037.09E-031.34E-033.57E-038.43E-031.93E-02 + 42K 1000.002.92E-046.78E-041.41E-032.80E-037.10E-041.69E-033.52E-037.06E-03 + 42K 1250.001.93E-044.16E-047.99E-041.47E-034.42E-049.71E-041.87E-033.43E-03 + 42K 1500.001.41E-042.86E-045.21E-049.02E-043.04E-046.30E-041.14E-031.97E-03 + 42L1 3.872.49E+019.03E+031.90E+069.50E+073.53E+024.05E+057.82E+074.41E+09 + 42L1 4.571.86E+013.34E+031.01E+068.03E+072.15E+021.83E+053.09E+072.13E+09 + 42L1 5.871.16E+016.21E+023.00E+053.29E+071.01E+025.59E+047.64E+065.72E+08 + 42L1 9.074.78E+009.12E+002.19E+043.10E+062.76E+017.36E+036.86E+054.60E+07 + 42L1 12.872.20E+005.80E+001.64E+032.99E+059.70E+001.49E+031.01E+055.58E+06 + 42L1 17.001.15E+007.79E+001.19E+023.54E+044.23E+004.30E+022.26E+041.03E+06 + 42L1 23.005.50E-015.55E+001.50E+012.44E+031.72E+001.14E+024.55E+031.64E+05 + 42L1 31.002.58E-012.98E+001.65E+011.50E+027.12E-013.18E+019.60E+022.71E+04 + 42L1 43.001.09E-011.27E+009.51E+005.44E+012.73E-018.11E+001.81E+023.86E+03 + 42L1 56.005.36E-025.81E-014.56E+003.02E+011.27E-012.77E+004.83E+018.22E+02 + 42L1 73.002.58E-022.52E-011.89E+001.28E+015.91E-029.66E-011.33E+011.79E+02 + 42L1 86.001.64E-021.48E-011.05E+006.86E+003.71E-025.11E-016.06E+007.09E+01 + 42L1 103.009.85E-038.09E-025.32E-013.28E+002.24E-022.57E-012.60E+002.60E+01 + 42L1 126.005.57E-034.08E-022.44E-011.38E+001.28E-021.21E-011.03E+008.68E+00 + 42L1 155.003.10E-032.00E-021.07E-015.48E-017.30E-035.72E-024.07E-012.88E+00 + 42L1 220.001.16E-036.02E-032.66E-021.12E-012.88E-031.68E-029.03E-024.82E-01 + 42L1 305.004.79E-042.02E-037.42E-032.62E-021.24E-035.71E-032.39E-029.96E-02 + 42L1 390.002.52E-049.18E-042.95E-039.16E-036.75E-042.63E-039.31E-033.25E-02 + 42L1 500.001.37E-044.33E-041.23E-033.35E-033.70E-041.24E-033.76E-031.12E-02 + 42L1 730.005.82E-051.54E-043.65E-048.38E-041.54E-044.26E-041.05E-032.49E-03 + 42L11000.003.08E-057.22E-051.51E-043.04E-047.67E-051.85E-043.95E-048.08E-04 + 42L2 3.634.98E+016.16E+054.90E+086.00E+103.90E+011.78E+041.66E+067.78E+07 + 42L2 4.333.00E+012.53E+051.72E+082.52E+102.26E+018.86E+039.87E+056.85E+07 + 42L2 5.631.38E+016.71E+043.57E+075.59E+091.01E+013.10E+033.69E+053.17E+07 + 42L2 8.833.43E+006.96E+032.40E+063.30E+082.50E+005.08E+025.31E+044.44E+06 + 42L2 12.631.08E+001.16E+032.81E+053.13E+078.27E-011.20E+021.02E+047.25E+05 + 42L2 17.004.06E-012.62E+024.73E+044.27E+063.29E-013.60E+012.50E+031.48E+05 + 42L2 23.001.46E-015.82E+017.76E+035.56E+051.29E-011.06E+015.87E+022.79E+04 + 42L2 31.005.23E-021.33E+011.31E+037.34E+045.13E-023.18E+001.38E+025.23E+03 + 42L2 43.001.66E-022.65E+001.88E+027.99E+031.86E-028.48E-012.81E+018.18E+02 + 42L2 56.006.51E-037.28E-013.96E+011.34E+038.23E-032.93E-017.77E+001.81E+02 + 42L2 73.002.52E-032.01E-018.41E+002.25E+023.63E-031.01E-012.14E+004.00E+01 + 42L2 86.001.40E-039.12E-023.25E+007.53E+012.19E-035.25E-029.67E-011.58E+01 + 42L2 103.007.33E-043.84E-021.15E+002.28E+011.25E-032.56E-024.05E-015.68E+00 + 42L2 126.003.56E-041.48E-023.64E-016.06E+006.75E-041.15E-021.54E-011.83E+00 + 42L2 155.001.71E-045.60E-031.13E-011.58E+003.57E-045.11E-035.74E-025.76E-01 + 42L2 220.005.00E-051.12E-031.65E-021.72E-011.23E-041.31E-031.11E-028.46E-02 + 42L2 305.001.63E-052.63E-042.91E-032.33E-024.58E-053.80E-042.51E-031.49E-02 + 42L2 390.007.19E-069.16E-058.26E-045.49E-032.20E-051.52E-048.43E-044.19E-03 + 42L2 500.003.23E-063.28E-052.43E-041.35E-031.05E-056.16E-052.88E-041.21E-03 + 42L2 730.001.02E-067.46E-064.17E-051.80E-043.50E-061.62E-056.03E-052.01E-04 + 42L21000.004.14E-072.37E-061.07E-053.84E-051.43E-065.59E-061.76E-054.96E-05 + 42L3 3.521.01E+021.26E+061.05E+091.35E+111.30E+014.78E+052.38E+091.20E+12 + 42L3 4.225.93E+015.02E+053.54E+085.38E+107.45E+001.93E+056.95E+082.97E+11 + 42L3 5.522.64E+011.28E+057.00E+071.12E+103.25E+005.07E+041.13E+083.79E+10 + 42L3 8.726.31E+001.26E+044.39E+066.07E+087.94E-015.18E+035.35E+061.17E+09 + 42L3 12.521.94E+002.02E+034.88E+055.44E+072.60E-018.55E+024.96E+057.70E+07 + 42L3 17.006.96E-014.30E+027.60E+046.81E+061.02E-011.87E+026.82E+047.94E+06 + 42L3 23.002.47E-019.32E+011.21E+048.54E+054.01E-024.17E+019.88E+038.64E+05 + 42L3 31.008.67E-022.06E+011.97E+031.08E+051.60E-029.51E+001.51E+039.96E+04 + 42L3 43.002.70E-023.96E+002.69E+021.12E+045.86E-031.90E+001.98E+029.66E+03 + 42L3 56.001.04E-021.05E+005.39E+011.77E+032.60E-035.21E-013.96E+011.51E+03 + 42L3 73.003.97E-032.77E-011.08E+012.79E+021.16E-031.44E-018.05E+002.42E+02 + 42L3 86.002.18E-031.22E-014.00E+008.93E+017.01E-046.53E-023.05E+007.90E+01 + 42L3 103.001.13E-034.95E-021.35E+002.55E+014.04E-042.75E-021.06E+002.34E+01 + 42L3 126.005.44E-041.82E-024.00E-016.32E+002.19E-041.06E-023.29E-016.11E+00 + 42L3 155.002.58E-046.56E-031.16E-011.52E+001.17E-044.01E-031.01E-011.57E+00 + 42L3 220.007.49E-051.20E-031.47E-021.40E-014.13E-057.99E-041.43E-021.67E-01 + 42L3 305.002.46E-052.58E-042.23E-031.60E-021.60E-051.85E-042.42E-032.20E-02 + 42L3 390.001.10E-058.45E-055.66E-043.26E-037.94E-066.36E-056.59E-045.01E-03 + 42L3 500.005.09E-062.87E-051.49E-046.95E-044.01E-062.25E-051.83E-041.17E-03 + 42L3 730.001.71E-066.24E-062.22E-057.66E-051.49E-065.09E-062.82E-051.41E-04 + 42L31000.007.58E-072.00E-065.34E-061.45E-056.96E-071.66E-066.50E-062.63E-05 + 42M1 1.502.18E+016.35E+044.08E+063.74E+091.07E+037.99E+069.77E+093.45E+12 + 42M1 2.501.04E+016.54E+031.83E+066.83E+072.31E+026.59E+053.86E+081.01E+11 + 42M1 4.503.60E+002.71E+021.56E+052.01E+073.98E+013.87E+041.05E+071.76E+09 + 42M1 8.509.72E-011.50E+004.28E+037.10E+055.95E+001.93E+032.46E+052.42E+07 + 42M1 15.502.48E-011.68E+004.38E+011.18E+049.92E-011.24E+028.19E+034.72E+05 + 42M1 25.007.73E-028.59E-013.46E+002.09E+022.40E-011.50E+016.06E+022.26E+04 + 42M1 40.002.30E-022.69E-011.97E+001.22E+016.01E-022.03E+005.13E+011.24E+03 + 42M1 52.001.14E-021.26E-019.86E-016.51E+002.80E-026.89E-011.35E+012.57E+02 + 42M1 70.005.07E-035.01E-023.77E-012.55E+001.19E-022.09E-013.08E+004.47E+01 + 42M1 103.001.73E-031.41E-029.22E-025.65E-014.00E-034.68E-024.84E-014.97E+00 + 42M1 150.006.00E-043.93E-032.13E-021.10E-011.42E-031.16E-028.66E-026.42E-01 + 42M1 280.001.06E-044.72E-041.82E-036.73E-032.75E-041.35E-036.10E-032.73E-02 + 42M1 500.002.41E-057.68E-052.17E-045.95E-046.60E-052.23E-046.77E-042.02E-03 + 42M2 1.414.94E+011.24E+074.79E+102.82E+131.20E+022.66E+051.19E+082.90E+10 + 42M2 2.411.62E+018.35E+051.54E+096.75E+112.35E+012.49E+048.27E+061.87E+09 + 42M2 4.413.61E+004.00E+043.48E+071.01E+103.74E+001.87E+034.11E+056.99E+07 + 42M2 8.415.87E-011.57E+036.52E+051.15E+085.20E-011.25E+021.69E+041.88E+06 + 42M2 15.419.08E-027.68E+011.65E+041.76E+068.11E-021.04E+018.53E+025.97E+04 + 42M2 25.001.86E-026.98E+008.95E+026.31E+041.83E-021.44E+007.85E+013.71E+03 + 42M2 40.003.76E-036.92E-015.43E+012.53E+034.31E-032.14E-017.77E+002.47E+02 + 42M2 52.001.51E-031.92E-011.15E+014.24E+021.92E-037.43E-022.14E+005.44E+01 + 42M2 70.005.28E-044.55E-022.02E+005.69E+017.68E-042.25E-025.01E-019.85E+00 + 42M2 103.001.34E-047.14E-032.16E-014.32E+002.34E-044.82E-037.68E-021.09E+00 + 42M2 150.003.52E-051.22E-032.56E-023.70E-017.39E-051.09E-031.27E-021.32E-01 + 42M2 280.004.07E-067.17E-058.57E-047.38E-031.11E-059.87E-056.98E-044.42E-03 + 42M2 500.006.07E-076.16E-064.57E-052.55E-041.98E-061.16E-055.44E-052.29E-04 + 42M3 1.391.01E+022.37E+079.29E+105.46E+133.81E+019.35E+062.95E+119.13E+14 + 42M3 2.393.16E+011.54E+062.86E+091.24E+127.32E+006.25E+057.04E+099.79E+12 + 42M3 4.396.75E+007.18E+046.20E+071.77E+101.14E+003.01E+041.11E+086.83E+10 + 42M3 8.391.05E+002.73E+031.11E+061.94E+081.58E-011.19E+031.42E+064.02E+08 + 42M3 15.391.58E-011.28E+022.67E+042.82E+062.47E-025.80E+012.62E+043.80E+06 + 42M3 25.003.14E-021.11E+011.38E+039.51E+045.62E-035.22E+001.16E+031.02E+05 + 42M3 40.006.15E-031.05E+007.84E+013.56E+031.34E-035.13E-016.08E+013.34E+03 + 42M3 52.002.43E-032.81E-011.59E+015.67E+026.01E-041.42E-011.21E+015.16E+02 + 42M3 70.008.36E-046.33E-022.61E+007.11E+012.43E-043.34E-022.01E+006.46E+01 + 42M3 103.002.07E-049.21E-032.53E-014.83E+007.50E-055.21E-032.04E-014.61E+00 + 42M3 150.005.36E-051.44E-032.65E-023.59E-012.41E-058.83E-042.34E-023.79E-01 + 42M3 280.006.13E-067.20E-056.85E-045.29E-033.82E-065.10E-057.31E-047.15E-03 + 42M3 500.009.59E-075.40E-062.80E-051.31E-047.52E-074.24E-063.48E-052.24E-04 + 42M4 1.231.46E+025.54E+055.12E+101.03E+157.93E+001.94E+053.15E+095.79E+12 + 42M4 2.231.88E+012.61E+047.72E+085.98E+121.09E+009.68E+035.99E+076.78E+10 + 42M4 4.231.74E+009.65E+028.32E+062.51E+101.22E-013.80E+029.02E+055.83E+08 + 42M4 8.231.23E-012.99E+017.42E+049.08E+071.17E-021.29E+011.23E+044.32E+06 + 42M4 15.239.31E-031.13E+009.44E+025.32E+051.24E-035.64E-012.45E+024.81E+04 + 42M4 25.001.07E-037.71E-022.83E+018.78E+031.95E-044.50E-021.08E+011.31E+03 + 42M4 40.001.30E-045.87E-031.03E+001.85E+023.25E-054.09E-035.68E-014.42E+01 + 42M4 52.003.97E-051.38E-031.64E-012.19E+011.18E-051.07E-031.11E-016.73E+00 + 42M4 70.001.02E-052.69E-042.07E-021.97E+003.71E-062.35E-041.76E-028.07E-01 + 42M4 103.001.75E-063.25E-051.45E-038.99E-028.16E-073.31E-051.64E-035.26E-02 + 42M4 150.003.26E-074.23E-061.13E-044.66E-031.85E-074.94E-061.67E-043.81E-03 + 42M5 1.232.15E+027.68E+057.89E+101.53E+154.99E+002.49E+041.47E+101.28E+15 + 42M5 2.232.73E+013.58E+041.18E+098.71E+126.98E-011.28E+032.27E+086.32E+12 + 42M5 4.232.50E+001.31E+031.26E+073.60E+108.05E-025.24E+012.58E+062.18E+10 + 42M5 8.231.76E-014.01E+011.11E+051.28E+088.01E-031.91E+002.46E+046.48E+07 + 42M5 15.231.31E-021.49E+001.38E+037.30E+058.90E-049.09E-023.37E+023.28E+05 + 42M5 25.001.49E-039.99E-024.06E+011.17E+041.45E-047.86E-031.08E+015.01E+03 + 42M5 40.001.80E-047.43E-031.44E+002.37E+022.51E-057.78E-044.16E-011.02E+02 + 42M5 52.005.48E-051.72E-032.23E-012.70E+019.32E-062.15E-046.85E-021.20E+01 + 42M5 70.001.41E-053.27E-042.73E-022.34E+003.02E-065.02E-058.98E-031.09E+00 + 42M5 103.002.38E-063.82E-051.81E-039.87E-026.98E-077.74E-066.58E-045.10E-02 + 42M5 150.004.32E-074.80E-061.32E-044.65E-031.68E-071.28E-065.37E-052.72E-03 + 42N+ 50.002.94E-031.13E-015.69E+002.18E+026.28E-032.02E-016.59E+002.13E+02 + 42N+ 70.001.12E-032.56E-027.96E-012.13E+012.37E-034.99E-021.06E+002.30E+01 + 42N+ 100.003.98E-045.70E-031.06E-011.91E+008.62E-041.20E-021.67E-012.42E+00 + 42N+ 150.001.23E-041.12E-031.20E-021.36E-012.80E-042.54E-032.29E-022.16E-01 + 42N+ 200.005.40E-053.73E-042.81E-032.28E-021.29E-048.94E-046.07E-034.28E-02 + 42N+ 500.004.72E-061.60E-055.17E-051.71E-041.27E-054.42E-051.42E-044.59E-04 + 43K 22.047.81E+004.39E+015.73E+014.18E+011.98E+017.63E+024.92E+038.60E+03 + 43K 22.747.19E+004.60E+019.57E+011.38E+021.80E+016.76E+024.94E+031.37E+04 + 43K 24.046.22E+004.73E+011.58E+024.27E+021.53E+015.45E+024.70E+032.09E+04 + 43K 27.244.47E+004.30E+012.43E+021.23E+031.06E+013.36E+023.61E+032.68E+04 + 43K 31.043.15E+003.45E+012.52E+021.70E+037.19E+002.03E+022.44E+032.31E+04 + 43K 35.002.27E+002.64E+012.18E+021.69E+035.05E+001.28E+021.60E+031.70E+04 + 43K 41.001.47E+001.76E+011.56E+021.32E+033.17E+006.93E+018.78E+029.88E+03 + 43K 49.008.96E-011.05E+019.51E+018.24E+021.88E+003.50E+014.27E+024.81E+03 + 43K 61.004.82E-015.31E+004.63E+013.87E+029.99E-011.53E+011.71E+021.81E+03 + 43K 74.002.78E-012.82E+002.30E+011.80E+025.74E-017.40E+007.47E+017.28E+02 + 43K 91.001.53E-011.40E+001.04E+017.41E+013.19E-013.45E+003.07E+012.68E+02 + 43K 104.001.04E-018.82E-016.12E+004.08E+012.20E-012.12E+001.73E+011.39E+02 + 43K 121.006.71E-025.20E-013.32E+002.03E+011.44E-011.23E+009.09E+006.62E+01 + 43K 144.004.05E-022.82E-011.63E+009.02E+008.97E-026.65E-014.36E+002.82E+01 + 43K 170.002.51E-021.57E-018.22E-014.13E+005.73E-023.74E-012.18E+001.26E+01 + 43K 235.001.00E-025.06E-022.18E-019.01E-012.44E-021.26E-015.87E-012.71E+00 + 43K 320.004.32E-031.78E-026.39E-022.20E-011.11E-024.67E-021.77E-016.66E-01 + 43K 410.002.26E-038.01E-032.50E-027.53E-026.03E-032.18E-027.10E-022.27E-01 + 43K 520.001.26E-033.92E-031.08E-022.87E-023.41E-031.08E-023.08E-028.53E-02 + 43K 750.005.55E-041.45E-033.36E-037.53E-031.46E-033.91E-039.22E-032.10E-02 + 43K 1000.003.11E-047.26E-041.50E-032.99E-037.73E-041.84E-033.85E-037.70E-03 + 43K 1250.002.07E-044.45E-048.57E-041.57E-034.81E-041.06E-032.04E-033.74E-03 + 43K 1500.001.51E-043.07E-045.59E-049.69E-043.30E-046.87E-041.24E-032.15E-03 + 43L1 4.042.29E+018.13E+031.58E+067.22E+073.47E+023.81E+057.01E+073.70E+09 + 43L1 4.741.73E+013.15E+038.82E+056.41E+072.15E+021.78E+052.88E+071.86E+09 + 43L1 6.041.10E+016.35E+022.77E+052.82E+071.04E+025.64E+047.46E+065.29E+08 + 43L1 9.244.65E+001.28E+012.26E+042.97E+062.93E+017.78E+037.08E+054.58E+07 + 43L1 13.042.18E+004.39E+001.88E+033.10E+051.05E+011.62E+031.08E+055.77E+06 + 43L1 17.001.18E+006.70E+001.78E+024.29E+044.75E+004.93E+022.58E+041.16E+06 + 43L1 23.005.66E-015.17E+001.41E+013.28E+031.94E+001.31E+025.18E+031.84E+05 + 43L1 31.002.67E-012.89E+001.38E+011.99E+028.00E-013.63E+011.09E+033.05E+04 + 43L1 43.001.14E-011.26E+008.73E+004.78E+013.06E-019.21E+002.05E+024.34E+03 + 43L1 56.005.60E-025.85E-014.35E+002.73E+011.42E-013.13E+005.46E+019.24E+02 + 43L1 73.002.71E-022.57E-011.85E+001.20E+016.63E-021.09E+001.49E+012.01E+02 + 43L1 86.001.72E-021.51E-011.04E+006.59E+004.16E-025.75E-016.81E+007.95E+01 + 43L1 103.001.04E-028.32E-025.34E-013.21E+002.51E-022.89E-012.91E+002.91E+01 + 43L1 126.005.89E-034.22E-022.47E-011.37E+001.43E-021.36E-011.15E+009.69E+00 + 43L1 155.003.28E-032.08E-021.10E-015.52E-018.14E-036.40E-024.55E-013.22E+00 + 43L1 220.001.23E-036.32E-032.76E-021.15E-013.20E-031.88E-021.01E-015.36E-01 + 43L1 305.005.10E-042.13E-037.77E-032.73E-021.38E-036.35E-032.66E-021.11E-01 + 43L1 390.002.70E-049.74E-043.11E-039.62E-037.48E-042.92E-031.03E-023.60E-02 + 43L1 500.001.46E-044.62E-041.30E-033.55E-034.10E-041.38E-034.17E-031.23E-02 + 43L1 730.006.24E-051.65E-043.91E-048.97E-041.70E-044.70E-041.16E-032.75E-03 + 43L11000.003.31E-057.77E-051.63E-043.28E-048.42E-052.04E-044.35E-048.91E-04 + 43L2 3.794.59E+015.51E+054.18E+084.77E+103.84E+011.67E+041.45E+066.17E+07 + 43L2 4.492.83E+012.34E+051.53E+082.10E+102.28E+018.53E+038.91E+055.69E+07 + 43L2 5.791.33E+016.51E+043.35E+074.97E+091.04E+013.10E+033.49E+052.80E+07 + 43L2 8.993.45E+007.12E+032.41E+063.18E+082.68E+005.30E+025.34E+044.27E+06 + 43L2 12.791.12E+001.22E+032.92E+053.16E+079.02E-011.28E+021.06E+047.30E+05 + 43L2 17.004.40E-012.95E+025.32E+044.74E+063.74E-014.07E+012.79E+031.61E+05 + 43L2 23.001.59E-016.56E+018.74E+036.19E+051.47E-011.20E+016.56E+023.08E+04 + 43L2 31.005.72E-021.50E+011.48E+038.22E+045.85E-023.60E+001.55E+025.80E+03 + 43L2 43.001.83E-022.99E+002.13E+028.97E+032.13E-029.63E-013.17E+019.13E+02 + 43L2 56.007.18E-038.23E-014.49E+011.51E+039.40E-033.33E-018.77E+002.03E+02 + 43L2 73.002.79E-032.27E-019.53E+002.54E+024.15E-031.15E-012.42E+004.50E+01 + 43L2 86.001.56E-031.03E-013.69E+008.52E+012.50E-035.99E-021.10E+001.78E+01 + 43L2 103.008.16E-044.36E-021.31E+002.58E+011.44E-032.93E-024.60E-016.42E+00 + 43L2 126.003.98E-041.68E-024.14E-016.88E+007.74E-041.32E-021.75E-012.07E+00 + 43L2 155.001.91E-046.37E-031.29E-011.80E+004.11E-045.86E-036.55E-026.54E-01 + 43L2 220.005.59E-051.28E-031.89E-021.96E-011.42E-041.51E-031.28E-029.64E-02 + 43L2 305.001.83E-053.00E-043.33E-032.67E-025.29E-054.37E-042.88E-031.70E-02 + 43L2 390.008.16E-061.05E-049.48E-046.30E-032.54E-051.75E-049.69E-044.80E-03 + 43L2 500.003.70E-063.76E-052.79E-041.55E-031.22E-057.11E-053.32E-041.39E-03 + 43L2 730.001.16E-068.56E-064.80E-052.08E-044.05E-061.88E-056.96E-052.32E-04 + 43L21000.004.66E-072.73E-061.24E-054.43E-051.65E-066.48E-062.03E-055.73E-05 + 43L3 3.689.32E+011.13E+069.04E+081.08E+111.27E+014.52E+052.16E+091.04E+12 + 43L3 4.385.60E+014.66E+053.17E+084.52E+107.42E+001.89E+056.61E+082.72E+11 + 43L3 5.682.57E+011.25E+056.60E+071.00E+103.33E+005.17E+041.14E+083.70E+10 + 43L3 8.886.35E+001.29E+044.40E+065.87E+088.38E-015.57E+035.75E+061.23E+09 + 43L3 12.682.00E+002.12E+035.06E+055.49E+072.79E-019.43E+025.51E+058.43E+07 + 43L3 17.007.50E-014.81E+028.50E+047.51E+061.13E-012.19E+028.19E+049.51E+06 + 43L3 23.002.67E-011.04E+021.35E+049.46E+054.47E-024.89E+011.18E+041.03E+06 + 43L3 31.009.42E-022.31E+012.20E+031.20E+051.79E-021.11E+011.80E+031.18E+05 + 43L3 43.002.95E-024.44E+003.01E+021.24E+046.54E-032.22E+002.35E+021.15E+04 + 43L3 56.001.14E-021.18E+006.05E+011.98E+032.91E-036.10E-014.68E+011.79E+03 + 43L3 73.004.36E-033.11E-011.21E+013.12E+021.29E-031.68E-019.50E+002.85E+02 + 43L3 86.002.40E-031.37E-014.50E+009.99E+017.84E-047.62E-023.59E+009.29E+01 + 43L3 103.001.25E-035.56E-021.51E+002.86E+014.52E-043.21E-021.24E+002.75E+01 + 43L3 126.006.01E-042.05E-024.51E-017.09E+002.45E-041.23E-023.86E-017.16E+00 + 43L3 155.002.86E-047.38E-031.31E-011.71E+001.31E-044.65E-031.18E-011.84E+00 + 43L3 220.008.33E-051.35E-031.66E-021.58E-014.63E-059.24E-041.67E-021.95E-01 + 43L3 305.002.75E-052.91E-042.52E-031.80E-021.79E-052.13E-042.82E-032.56E-02 + 43L3 390.001.23E-059.53E-056.39E-043.68E-038.90E-067.31E-057.66E-045.83E-03 + 43L3 500.005.70E-063.24E-051.68E-047.84E-044.49E-062.58E-052.12E-041.36E-03 + 43L3 730.001.90E-067.04E-062.51E-058.65E-051.67E-065.79E-063.25E-051.63E-04 + 43L31000.008.48E-072.25E-066.03E-061.64E-057.77E-071.88E-067.47E-063.04E-05 + 43M1 1.542.09E+016.23E+043.59E+063.78E+091.12E+038.35E+061.01E+103.48E+12 + 43M1 2.541.02E+016.84E+031.75E+065.57E+072.51E+027.24E+054.25E+081.08E+11 + 43M1 4.543.60E+003.13E+021.62E+051.94E+074.42E+014.39E+041.20E+071.97E+09 + 43M1 8.549.88E-012.21E+004.90E+037.59E+056.68E+002.22E+032.83E+052.76E+07 + 43M1 15.542.56E-011.48E+006.06E+011.39E+041.12E+001.43E+029.45E+035.41E+05 + 43M1 25.008.08E-028.27E-013.05E+002.87E+022.73E-011.74E+017.03E+022.61E+04 + 43M1 40.002.42E-022.70E-011.82E+001.19E+016.83E-022.34E+005.92E+011.43E+03 + 43M1 52.001.21E-021.28E-019.47E-015.99E+003.18E-027.91E-011.55E+012.94E+02 + 43M1 70.005.38E-035.15E-023.73E-012.43E+001.35E-022.39E-013.53E+005.11E+01 + 43M1 103.001.84E-031.47E-029.36E-025.60E-014.53E-035.33E-025.51E-015.65E+00 + 43M1 150.006.41E-044.13E-032.20E-021.12E-011.61E-031.32E-029.82E-027.27E-01 + 43M1 280.001.14E-045.03E-041.92E-037.06E-033.10E-041.53E-036.87E-033.07E-02 + 43M1 500.002.62E-058.29E-052.33E-046.38E-047.38E-052.50E-047.59E-042.26E-03 + 43M2 1.444.78E+011.25E+074.78E+102.73E+131.28E+022.80E+051.21E+082.80E+10 + 43M2 2.441.62E+018.85E+051.64E+096.99E+112.58E+012.73E+048.84E+061.92E+09 + 43M2 4.443.73E+004.39E+043.83E+071.09E+104.19E+002.09E+034.52E+057.49E+07 + 43M2 8.446.23E-011.76E+037.30E+051.28E+085.90E-011.42E+021.89E+042.06E+06 + 43M2 15.449.83E-028.68E+011.86E+041.98E+069.29E-021.18E+019.63E+026.67E+04 + 43M2 25.002.05E-027.99E+001.03E+037.21E+042.12E-021.66E+008.98E+014.21E+03 + 43M2 40.004.18E-037.94E-016.25E+012.90E+034.99E-032.47E-018.91E+002.81E+02 + 43M2 52.001.68E-032.21E-011.33E+014.86E+022.23E-038.59E-022.46E+006.21E+01 + 43M2 70.005.93E-045.23E-022.32E+006.54E+018.92E-042.61E-025.77E-011.13E+01 + 43M2 103.001.51E-048.23E-032.49E-014.98E+002.73E-045.59E-038.88E-021.25E+00 + 43M2 150.004.01E-051.40E-032.97E-024.28E-018.63E-051.27E-031.47E-021.52E-01 + 43M2 280.004.62E-068.31E-059.97E-048.58E-031.30E-051.15E-048.13E-045.13E-03 + 43M2 500.007.03E-077.17E-065.34E-052.98E-042.32E-061.36E-056.37E-052.68E-04 + 43M3 1.429.87E+012.39E+079.32E+105.31E+134.01E+019.95E+063.14E+119.69E+14 + 43M3 2.423.18E+011.64E+063.04E+091.28E+127.94E+006.98E+057.99E+091.12E+13 + 43M3 4.426.98E+007.86E+046.80E+071.91E+101.26E+003.46E+041.30E+088.12E+10 + 43M3 8.421.12E+003.04E+031.24E+062.13E+081.77E-011.39E+031.70E+064.86E+08 + 43M3 15.421.70E-011.44E+023.01E+043.14E+062.78E-026.85E+013.16E+044.61E+06 + 43M3 25.003.44E-021.27E+011.57E+031.08E+056.37E-036.23E+001.41E+031.24E+05 + 43M3 40.006.80E-031.19E+008.95E+014.04E+031.52E-036.11E-017.37E+014.05E+03 + 43M3 52.002.69E-033.20E-011.81E+016.45E+026.81E-041.69E-011.46E+016.24E+02 + 43M3 70.009.31E-047.22E-022.99E+008.09E+012.75E-043.97E-022.42E+007.77E+01 + 43M3 103.002.32E-041.05E-022.89E-015.51E+008.52E-056.18E-032.44E-015.52E+00 + 43M3 150.006.03E-051.65E-033.04E-024.11E-012.74E-051.04E-032.78E-024.52E-01 + 43M3 280.006.86E-068.24E-057.87E-046.07E-034.35E-065.98E-058.66E-048.49E-03 + 43M3 500.001.07E-066.18E-063.22E-051.51E-048.56E-074.94E-064.11E-052.65E-04 + 43M4 1.261.50E+025.77E+055.38E+101.09E+158.63E+002.13E+053.49E+096.26E+12 + 43M4 2.262.02E+012.86E+048.67E+086.81E+121.23E+001.12E+047.01E+077.82E+10 + 43M4 4.261.93E+001.09E+039.74E+062.98E+101.41E-014.53E+021.09E+066.97E+08 + 43M4 8.261.41E-013.45E+018.88E+041.10E+081.37E-021.57E+011.51E+045.27E+06 + 43M4 15.261.08E-021.32E+001.14E+036.52E+051.48E-036.89E-013.02E+025.92E+04 + 43M4 25.001.27E-039.19E-023.47E+011.09E+042.35E-045.56E-021.34E+011.64E+03 + 43M4 40.001.55E-047.05E-031.27E+002.30E+023.93E-055.05E-037.08E-015.51E+01 + 43M4 52.004.75E-051.67E-032.02E-012.72E+011.43E-051.33E-031.38E-018.39E+00 + 43M4 70.001.23E-053.25E-042.55E-022.45E+004.51E-062.92E-042.20E-021.01E+00 + 43M4 103.002.13E-063.93E-051.78E-031.12E-019.94E-074.10E-052.05E-036.56E-02 + 43M4 150.003.89E-075.15E-061.40E-045.81E-032.27E-076.13E-062.09E-044.76E-03 + 43M4 280.002.44E-081.98E-072.38E-065.00E-051.97E-082.73E-075.06E-066.78E-05 + 43M4 500.002.28E-091.15E-087.04E-087.80E-072.11E-091.63E-081.79E-071.54E-06 + 43M5 1.252.21E+027.97E+058.30E+101.61E+155.42E+002.72E+041.63E+101.43E+15 + 43M5 2.252.93E+013.90E+041.32E+099.92E+127.83E-011.46E+032.69E+087.64E+12 + 43M5 4.252.78E+001.47E+031.47E+074.27E+109.24E-026.14E+013.17E+062.76E+10 + 43M5 8.252.00E-014.61E+011.33E+051.55E+089.35E-032.28E+003.09E+048.36E+07 + 43M5 15.251.52E-021.74E+001.68E+038.93E+051.05E-031.09E-014.27E+024.25E+05 + 43M5 25.001.76E-031.18E-014.98E+011.45E+041.73E-049.51E-031.38E+016.55E+03 + 43M5 40.002.14E-048.86E-031.77E+002.93E+023.01E-059.42E-045.32E-011.33E+02 + 43M5 52.006.52E-052.06E-032.75E-013.35E+011.12E-052.60E-048.74E-021.56E+01 + 43M5 70.001.68E-053.93E-043.36E-022.90E+003.64E-066.09E-051.14E-021.41E+00 + 43M5 103.002.91E-064.60E-052.22E-031.22E-018.43E-079.39E-068.34E-046.55E-02 + 43M5 150.005.37E-075.83E-061.62E-045.77E-032.04E-071.56E-066.79E-053.48E-03 + 43M5 280.003.68E-082.15E-072.39E-063.99E-052.05E-088.86E-081.21E-063.05E-05 + 43M5 500.003.73E-091.28E-086.34E-084.89E-072.77E-097.47E-093.87E-084.53E-07 + 43N+ 50.003.31E-031.32E-016.85E+002.64E+027.53E-032.46E-018.17E+002.67E+02 + 43N+ 70.001.26E-032.97E-029.52E-012.57E+012.84E-036.05E-021.30E+002.86E+01 + 43N+ 100.004.50E-046.57E-031.26E-012.30E+001.03E-031.44E-022.04E-012.98E+00 + 43N+ 150.001.40E-041.29E-031.41E-021.62E-013.34E-043.05E-032.78E-022.63E-01 + 43N+ 200.006.15E-054.26E-043.27E-032.70E-021.54E-041.07E-037.31E-035.19E-02 + 43N+ 500.005.40E-061.83E-055.97E-051.99E-041.50E-055.24E-051.69E-045.48E-04 + 44K 23.127.10E+003.77E+014.54E+012.96E+011.91E+017.00E+024.27E+036.91E+03 + 44K 23.826.56E+003.95E+017.53E+019.77E+011.75E+016.23E+024.29E+031.10E+04 + 44K 25.125.71E+004.07E+011.25E+023.06E+021.50E+015.08E+024.11E+031.68E+04 + 44K 28.324.16E+003.75E+011.96E+029.07E+021.05E+013.19E+023.22E+032.22E+04 + 44K 32.122.97E+003.06E+012.08E+021.30E+037.24E+001.96E+022.23E+031.97E+04 + 44K 36.002.18E+002.39E+011.85E+021.34E+035.17E+001.26E+021.51E+031.50E+04 + 44K 42.001.43E+001.62E+011.36E+021.09E+033.29E+006.99E+018.44E+029.01E+03 + 44K 50.008.80E-019.88E+008.51E+017.02E+021.97E+003.59E+014.20E+024.53E+03 + 44K 62.004.80E-015.09E+004.26E+013.42E+021.06E+001.59E+011.72E+021.76E+03 + 44K 75.002.79E-012.74E+002.16E+011.64E+026.13E-017.78E+007.64E+017.23E+02 + 44K 92.001.55E-011.38E+009.96E+006.91E+013.43E-013.66E+003.19E+012.71E+02 + 44K 105.001.06E-018.77E-015.93E+003.85E+012.37E-012.26E+001.81E+011.42E+02 + 44K 122.006.88E-025.21E-013.25E+001.95E+011.56E-011.32E+009.57E+006.84E+01 + 44K 145.004.18E-022.85E-011.61E+008.77E+009.73E-027.15E-014.62E+002.95E+01 + 44K 170.002.65E-021.63E-018.42E-014.17E+006.33E-024.12E-012.38E+001.37E+01 + 44K 235.001.06E-025.28E-022.26E-019.23E-012.69E-021.38E-016.41E-012.95E+00 + 44K 320.004.58E-031.87E-026.66E-022.28E-011.22E-025.13E-021.94E-017.24E-01 + 44K 410.002.40E-038.45E-032.62E-027.85E-026.62E-032.39E-027.75E-022.47E-01 + 44K 520.001.34E-034.15E-031.14E-023.01E-023.73E-031.19E-023.36E-029.29E-02 + 44K 750.005.92E-041.54E-033.57E-037.98E-031.59E-034.27E-031.01E-022.29E-02 + 44K 1000.003.33E-047.74E-041.61E-033.19E-038.42E-042.01E-034.20E-038.39E-03 + 44K 1250.002.21E-044.76E-049.17E-041.68E-035.22E-041.15E-032.22E-034.07E-03 + 44K 1500.001.61E-043.28E-045.99E-041.04E-033.57E-047.48E-041.35E-032.34E-03 + 44L1 4.222.10E+017.35E+031.32E+065.43E+073.42E+023.58E+056.30E+073.09E+09 + 44L1 4.921.61E+012.98E+037.66E+055.08E+072.16E+021.72E+052.68E+071.62E+09 + 44L1 6.221.04E+016.46E+022.55E+052.41E+071.07E+025.68E+047.26E+064.87E+08 + 44L1 9.424.51E+001.70E+012.30E+042.82E+063.10E+018.19E+037.29E+054.53E+07 + 44L1 13.222.15E+003.29E+002.12E+033.19E+051.13E+011.74E+031.14E+055.95E+06 + 44L1 17.001.20E+005.64E+002.52E+025.11E+045.33E+005.64E+022.94E+041.30E+06 + 44L1 23.005.83E-014.76E+001.59E+014.27E+032.17E+001.49E+025.88E+032.07E+05 + 44L1 31.002.76E-012.78E+001.15E+012.73E+028.98E-014.12E+011.23E+033.43E+04 + 44L1 43.001.18E-011.24E+007.95E+004.37E+013.43E-011.04E+012.31E+024.88E+03 + 44L1 56.005.84E-025.87E-014.14E+002.46E+011.59E-013.53E+006.15E+011.04E+03 + 44L1 73.002.84E-022.61E-011.81E+001.13E+017.42E-021.23E+001.68E+012.25E+02 + 44L1 86.001.80E-021.54E-011.03E+006.31E+004.65E-026.47E-017.64E+008.88E+01 + 44L1 103.001.09E-028.55E-025.34E-013.13E+002.80E-023.24E-013.26E+003.25E+01 + 44L1 126.006.20E-034.36E-022.50E-011.36E+001.60E-021.52E-011.29E+001.08E+01 + 44L1 155.003.47E-032.17E-021.12E-015.54E-019.07E-037.15E-025.07E-013.58E+00 + 44L1 220.001.31E-036.62E-032.85E-021.18E-013.56E-032.09E-021.12E-015.95E-01 + 44L1 305.005.43E-042.25E-038.12E-032.83E-021.53E-037.05E-032.95E-021.22E-01 + 44L1 390.002.88E-041.03E-033.28E-031.01E-028.28E-043.24E-031.14E-023.99E-02 + 44L1 500.001.56E-044.92E-041.38E-033.76E-034.52E-041.52E-034.61E-031.36E-02 + 44L1 730.006.69E-051.77E-044.19E-049.59E-041.87E-045.19E-041.28E-033.04E-03 + 44L11000.003.56E-058.36E-051.75E-043.53E-049.23E-052.25E-044.80E-049.81E-04 + 44L11500.001.73E-053.55E-056.54E-051.15E-043.91E-058.28E-051.52E-042.67E-04 + 44L2 3.974.24E+014.93E+053.56E+083.77E+103.78E+011.56E+041.25E+064.82E+07 + 44L2 4.672.66E+012.17E+051.36E+081.74E+102.29E+018.20E+037.99E+054.67E+07 + 44L2 5.971.29E+016.30E+043.13E+074.39E+091.08E+013.08E+033.28E+052.46E+07 + 44L2 9.173.47E+007.27E+032.40E+063.05E+082.86E+005.51E+025.33E+044.08E+06 + 44L2 12.971.15E+001.28E+033.01E+053.18E+079.80E-011.36E+021.10E+047.30E+05 + 44L2 17.004.75E-013.31E+025.97E+045.24E+064.25E-014.58E+013.09E+031.75E+05 + 44L2 23.001.73E-017.37E+019.82E+036.88E+051.67E-011.35E+017.31E+023.38E+04 + 44L2 31.006.24E-021.68E+011.66E+039.17E+046.65E-024.07E+001.74E+026.42E+03 + 44L2 43.002.00E-023.37E+002.40E+021.01E+042.42E-021.09E+003.56E+011.02E+03 + 44L2 56.007.91E-039.29E-015.07E+011.69E+031.07E-023.78E-019.88E+002.27E+02 + 44L2 73.003.09E-032.57E-011.08E+012.86E+024.74E-031.31E-012.74E+005.05E+01 + 44L2 86.001.72E-031.17E-014.17E+009.61E+012.86E-036.81E-021.24E+002.00E+01 + 44L2 103.009.06E-044.94E-021.48E+002.91E+011.64E-033.33E-025.21E-017.23E+00 + 44L2 126.004.43E-041.90E-024.71E-017.78E+008.87E-041.50E-021.99E-012.34E+00 + 44L2 155.002.13E-047.23E-031.47E-012.04E+004.71E-046.69E-037.45E-027.40E-01 + 44L2 220.006.27E-051.46E-032.15E-022.23E-011.63E-041.73E-031.46E-021.10E-01 + 44L2 305.002.06E-053.43E-043.81E-033.05E-026.09E-055.02E-043.30E-031.94E-02 + 44L2 390.009.19E-061.20E-041.08E-037.20E-032.92E-052.02E-041.11E-035.49E-03 + 44L2 500.004.17E-064.30E-053.20E-041.78E-031.41E-058.20E-053.82E-041.60E-03 + 44L2 730.001.32E-069.81E-065.52E-052.39E-044.68E-062.17E-058.03E-052.67E-04 + 44L21000.005.33E-073.13E-061.42E-055.11E-051.91E-067.49E-062.35E-056.61E-05 + 44L21500.001.83E-078.06E-072.87E-068.35E-066.20E-072.03E-065.30E-061.24E-05 + 44L3 3.848.62E+011.01E+067.75E+088.63E+101.24E+014.27E+051.96E+099.04E+11 + 44L3 4.545.29E+014.33E+052.83E+083.79E+107.37E+001.85E+056.27E+082.49E+11 + 44L3 5.842.49E+011.21E+056.20E+078.92E+093.39E+005.27E+041.14E+083.60E+10 + 44L3 9.046.38E+001.32E+044.39E+065.65E+088.81E-015.95E+036.15E+061.29E+09 + 44L3 12.842.05E+002.22E+035.22E+055.52E+072.99E-011.04E+036.08E+059.17E+07 + 44L3 17.008.05E-015.37E+029.49E+048.26E+061.26E-012.56E+029.80E+041.13E+07 + 44L3 23.002.88E-011.17E+021.51E+041.04E+064.97E-025.71E+011.41E+041.23E+06 + 44L3 31.001.02E-012.58E+012.46E+031.33E+051.99E-021.30E+012.13E+031.40E+05 + 44L3 43.003.21E-024.97E+003.37E+021.38E+047.28E-032.59E+002.78E+021.35E+04 + 44L3 56.001.24E-021.31E+006.78E+012.20E+033.24E-037.11E-015.52E+012.10E+03 + 44L3 73.004.78E-033.48E-011.36E+013.48E+021.44E-031.96E-011.12E+013.35E+02 + 44L3 86.002.64E-031.53E-015.04E+001.12E+028.74E-048.86E-024.21E+001.09E+02 + 44L3 103.001.37E-036.24E-021.70E+003.19E+015.05E-043.73E-021.46E+003.21E+01 + 44L3 126.006.63E-042.29E-025.06E-017.93E+002.74E-041.43E-024.52E-018.37E+00 + 44L3 155.003.16E-048.28E-031.47E-011.91E+001.47E-045.38E-031.38E-012.15E+00 + 44L3 220.009.21E-051.52E-031.86E-021.77E-015.17E-051.06E-031.94E-022.27E-01 + 44L3 305.003.04E-053.26E-042.84E-032.02E-022.00E-052.45E-043.27E-032.97E-02 + 44L3 390.001.37E-051.07E-047.20E-044.14E-039.94E-068.38E-058.87E-046.76E-03 + 44L3 500.006.36E-063.64E-051.89E-048.83E-045.01E-062.94E-052.45E-041.58E-03 + 44L3 730.002.15E-067.89E-062.83E-059.75E-051.86E-066.57E-063.74E-051.88E-04 + 44L31000.009.40E-072.52E-066.78E-061.85E-058.67E-072.12E-068.55E-063.50E-05 + 44L31500.003.68E-077.01E-071.37E-062.83E-063.55E-075.99E-071.51E-064.59E-06 + 44M1 1.581.99E+016.06E+043.09E+063.76E+091.18E+038.68E+061.04E+103.45E+12 + 44M1 2.589.92E+007.10E+031.64E+064.56E+072.72E+027.90E+054.64E+081.15E+11 + 44M1 4.583.59E+003.56E+021.67E+051.84E+074.88E+014.94E+041.35E+072.20E+09 + 44M1 8.581.00E+003.28E+005.54E+038.03E+057.48E+002.53E+033.25E+053.14E+07 + 44M1 15.582.63E-011.28E+008.09E+011.63E+041.26E+001.64E+021.09E+046.18E+05 + 44M1 25.008.42E-027.90E-012.90E+003.83E+023.10E-012.01E+018.14E+023.02E+04 + 44M1 40.002.54E-022.69E-011.67E+001.23E+017.75E-022.69E+006.80E+011.64E+03 + 44M1 52.001.27E-021.29E-019.04E-015.56E+003.60E-029.06E-011.77E+013.36E+02 + 44M1 70.005.69E-035.28E-023.67E-012.31E+001.53E-022.73E-014.02E+005.82E+01 + 44M1 103.001.96E-031.53E-029.46E-025.52E-015.12E-036.06E-026.26E-016.41E+00 + 44M1 150.006.86E-044.34E-032.27E-021.14E-011.81E-031.49E-021.11E-018.21E-01 + 44M1 280.001.23E-045.36E-042.02E-037.39E-033.48E-041.72E-037.73E-033.45E-02 + 44M1 500.002.84E-058.92E-052.50E-046.83E-048.25E-052.80E-048.50E-042.53E-03 + 44M2 1.484.58E+011.24E+074.70E+102.58E+131.35E+022.91E+051.21E+082.62E+10 + 44M2 2.481.61E+019.31E+051.72E+097.13E+112.82E+012.96E+049.31E+061.94E+09 + 44M2 4.483.83E+004.78E+044.17E+071.16E+104.68E+002.33E+034.92E+057.92E+07 + 44M2 8.486.58E-011.96E+038.13E+051.40E+086.68E-011.60E+022.10E+042.25E+06 + 44M2 15.481.06E-019.76E+012.10E+042.21E+061.06E-011.34E+011.08E+037.39E+04 + 44M2 25.002.25E-029.11E+001.17E+038.19E+042.44E-021.91E+001.02E+024.75E+03 + 44M2 40.004.63E-039.07E-017.15E+013.30E+035.76E-032.85E-011.02E+013.19E+02 + 44M2 52.001.87E-032.52E-011.52E+015.56E+022.57E-039.90E-022.82E+007.07E+01 + 44M2 70.006.64E-045.99E-022.67E+007.49E+011.03E-033.01E-026.62E-011.29E+01 + 44M2 103.001.70E-049.45E-032.87E-015.72E+003.16E-046.47E-031.02E-011.43E+00 + 44M2 150.004.53E-051.62E-033.43E-024.93E-011.00E-041.47E-031.70E-021.75E-01 + 44M2 280.005.29E-069.62E-051.16E-039.94E-031.52E-051.34E-049.44E-045.94E-03 + 44M2 500.008.09E-078.32E-066.21E-053.46E-042.72E-061.59E-057.43E-053.12E-04 + 44M3 1.469.51E+012.39E+079.20E+105.05E+134.18E+011.05E+073.28E+111.01E+15 + 44M3 2.463.17E+011.72E+063.19E+091.31E+128.55E+007.72E+058.95E+091.26E+13 + 44M3 4.467.18E+008.55E+047.40E+072.03E+101.39E+003.96E+041.53E+089.54E+10 + 44M3 8.461.18E+003.37E+031.38E+062.33E+081.96E-011.62E+032.03E+065.82E+08 + 44M3 15.461.83E-011.61E+023.37E+043.48E+063.11E-028.05E+013.80E+045.55E+06 + 44M3 25.003.76E-021.44E+011.78E+031.22E+057.18E-037.40E+001.71E+031.51E+05 + 44M3 40.007.49E-031.35E+001.02E+024.56E+031.71E-037.25E-018.88E+014.89E+03 + 44M3 52.002.98E-033.63E-012.06E+017.30E+027.70E-042.00E-011.76E+017.50E+02 + 44M3 70.001.03E-038.20E-023.40E+009.18E+013.12E-044.69E-022.89E+009.31E+01 + 44M3 103.002.58E-041.20E-023.30E-016.25E+009.65E-057.29E-032.91E-016.58E+00 + 44M3 150.006.75E-051.88E-033.47E-024.67E-013.11E-051.23E-033.31E-025.37E-01 + 44M3 280.007.79E-069.41E-058.99E-046.92E-034.94E-066.99E-051.02E-031.00E-02 + 44M3 500.001.21E-067.06E-063.69E-051.72E-049.71E-075.73E-064.82E-053.12E-04 + 44M4 1.281.53E+025.97E+055.60E+101.14E+159.34E+002.33E+053.81E+096.64E+12 + 44M4 2.282.15E+013.10E+049.65E+087.68E+121.38E+001.29E+048.13E+078.91E+10 + 44M4 4.282.13E+001.22E+031.13E+073.51E+101.62E-015.36E+021.30E+068.26E+08 + 44M4 8.281.60E-013.95E+011.05E+051.33E+081.60E-021.89E+011.84E+046.37E+06 + 44M4 15.281.25E-021.54E+001.37E+037.93E+051.75E-038.36E-013.71E+027.22E+04 + 44M4 25.001.49E-031.09E-014.23E+011.35E+042.81E-046.81E-021.66E+012.02E+03 + 44M4 40.001.84E-048.40E-031.55E+002.84E+024.72E-056.21E-038.77E-016.81E+01 + 44M4 52.005.64E-052.00E-032.46E-013.35E+011.72E-051.63E-031.71E-011.04E+01 + 44M4 70.001.47E-053.91E-043.11E-023.03E+005.44E-063.59E-042.73E-021.25E+00 + 44M4 103.002.52E-064.75E-052.18E-031.38E-011.20E-065.05E-052.54E-038.13E-02 + 44M4 150.004.57E-076.26E-061.71E-047.18E-032.75E-077.57E-062.59E-045.91E-03 + 44M4 280.002.98E-082.41E-072.92E-066.19E-052.39E-083.37E-076.30E-068.44E-05 + 44M4 500.002.82E-091.42E-088.71E-089.69E-072.57E-092.02E-082.23E-071.92E-06 + 44M5 1.282.26E+028.22E+058.68E+101.69E+155.85E+002.94E+041.79E+101.57E+15 + 44M5 2.283.13E+014.22E+041.48E+091.12E+138.75E-011.65E+033.15E+089.13E+12 + 44M5 4.283.07E+001.65E+031.71E+075.03E+101.06E-017.16E+013.86E+063.45E+10 + 44M5 8.282.27E-015.26E+011.58E+051.87E+081.08E-022.69E+003.84E+041.07E+08 + 44M5 15.281.75E-022.02E+002.02E+031.09E+061.23E-031.30E-015.36E+025.47E+05 + 44M5 25.002.06E-031.39E-016.08E+011.78E+042.05E-041.14E-021.75E+018.50E+03 + 44M5 40.002.53E-041.05E-022.15E+003.61E+023.59E-051.13E-036.74E-011.72E+02 + 44M5 52.007.74E-052.45E-033.35E-014.13E+011.34E-053.13E-041.11E-012.00E+01 + 44M5 70.002.01E-054.69E-044.10E-023.57E+004.37E-067.35E-051.44E-021.81E+00 + 44M5 103.003.50E-065.50E-052.71E-031.51E-011.01E-061.13E-051.05E-038.36E-02 + 44M5 150.006.54E-076.99E-061.99E-047.11E-032.46E-071.89E-068.52E-054.43E-03 + 44M5 280.004.59E-082.57E-072.93E-064.92E-052.47E-081.07E-071.51E-063.85E-05 + 44M5 500.004.66E-091.55E-087.69E-086.02E-073.35E-099.08E-094.77E-085.69E-07 + 44N+ 50.003.52E-031.48E-017.89E+003.05E+028.49E-032.83E-019.60E+003.19E+02 + 44N+ 70.001.34E-033.30E-021.09E+002.97E+013.20E-036.92E-021.52E+003.38E+01 + 44N+ 100.004.80E-047.22E-031.43E-012.64E+001.16E-031.64E-022.35E-013.48E+00 + 44N+ 150.001.49E-041.40E-031.58E-021.85E-013.75E-043.45E-033.17E-023.04E-01 + 44N+ 200.006.58E-054.61E-043.64E-033.07E-021.72E-041.21E-038.30E-035.94E-02 + 44N+ 500.005.82E-061.98E-056.50E-052.20E-041.66E-055.85E-051.89E-046.15E-04 + 45K 24.226.47E+003.25E+013.62E+012.13E+011.85E+016.44E+023.73E+035.59E+03 + 45K 24.925.99E+003.40E+015.98E+017.00E+011.70E+015.76E+023.75E+038.86E+03 + 45K 26.225.25E+003.51E+019.93E+012.21E+021.46E+014.73E+023.61E+031.37E+04 + 45K 29.423.88E+003.28E+011.58E+026.74E+021.04E+013.03E+022.88E+031.84E+04 + 45K 33.222.80E+002.72E+011.72E+029.98E+027.27E+001.90E+022.04E+031.68E+04 + 45K 37.002.09E+002.17E+011.56E+021.06E+035.30E+001.25E+021.42E+031.32E+04 + 45K 43.001.39E+001.49E+011.19E+028.92E+023.41E+007.04E+018.12E+028.22E+03 + 45K 51.008.66E-019.28E+007.62E+015.97E+022.07E+003.67E+014.13E+024.26E+03 + 45K 63.004.78E-014.88E+003.92E+013.03E+021.12E+001.65E+011.73E+021.71E+03 + 45K 76.002.81E-012.67E+002.03E+011.49E+026.54E-018.17E+007.81E+017.17E+02 + 45K 93.001.57E-011.36E+009.54E+006.43E+013.69E-013.88E+003.30E+012.74E+02 + 45K 106.001.08E-018.71E-015.74E+003.63E+012.55E-012.41E+001.89E+011.46E+02 + 45K 123.007.05E-025.22E-013.18E+001.86E+011.69E-011.41E+001.01E+017.06E+01 + 45K 146.004.31E-022.87E-011.60E+008.51E+001.05E-017.69E-014.89E+003.07E+01 + 45K 175.002.57E-021.53E-017.66E-013.68E+006.46E-024.10E-012.31E+001.28E+01 + 45K 240.001.06E-025.13E-022.14E-018.56E-012.81E-021.42E-016.44E-012.90E+00 + 45K 325.004.65E-031.86E-026.53E-022.20E-011.29E-025.35E-021.99E-017.34E-01 + 45K 410.002.55E-038.90E-032.75E-028.18E-027.25E-032.62E-028.46E-022.69E-01 + 45K 520.001.43E-034.38E-031.20E-023.16E-024.08E-031.30E-023.66E-021.01E-01 + 45K 750.006.30E-041.64E-033.79E-038.45E-031.74E-034.66E-031.10E-022.49E-02 + 45K 1000.003.54E-048.26E-041.71E-033.40E-039.15E-042.19E-034.57E-039.13E-03 + 45K 1250.002.35E-045.09E-049.80E-041.80E-035.66E-041.26E-032.42E-034.43E-03 + 45K 1500.001.72E-043.51E-046.41E-041.11E-033.87E-048.13E-041.47E-032.54E-03 + 45L1 4.411.93E+016.63E+031.11E+064.13E+073.36E+023.37E+055.65E+072.59E+09 + 45L1 5.111.50E+012.80E+036.65E+054.05E+072.16E+021.67E+052.49E+071.41E+09 + 45L1 6.419.85E+006.51E+022.34E+052.05E+071.10E+025.69E+047.04E+064.48E+08 + 45L1 9.614.37E+002.17E+012.33E+042.67E+063.27E+018.60E+037.47E+054.47E+07 + 45L1 13.412.12E+002.52E+002.36E+033.24E+051.21E+011.87E+031.21E+056.10E+06 + 45L1 17.001.23E+004.66E+003.44E+026.00E+045.97E+006.45E+023.34E+041.45E+06 + 45L1 23.005.99E-014.35E+002.09E+015.41E+032.43E+001.70E+026.67E+032.33E+05 + 45L1 31.002.85E-012.66E+009.68E+003.73E+021.00E+004.68E+011.40E+033.85E+04 + 45L1 43.001.23E-011.22E+007.19E+004.25E+013.84E-011.18E+012.60E+025.47E+03 + 45L1 56.006.09E-025.87E-013.91E+002.23E+011.78E-013.99E+006.91E+011.16E+03 + 45L1 73.002.96E-022.64E-011.76E+001.06E+018.29E-021.38E+001.88E+012.51E+02 + 45L1 86.001.89E-021.57E-011.01E+006.02E+005.19E-027.26E-018.55E+009.92E+01 + 45L1 103.001.15E-028.77E-025.33E-013.04E+003.12E-023.63E-013.65E+003.63E+01 + 45L1 126.006.54E-034.50E-022.52E-011.34E+001.78E-021.70E-011.44E+001.20E+01 + 45L1 155.003.67E-032.25E-021.14E-015.56E-011.01E-027.98E-025.65E-013.98E+00 + 45L1 220.001.39E-036.92E-032.94E-021.21E-013.95E-032.33E-021.24E-016.60E-01 + 45L1 305.005.77E-042.36E-038.48E-032.94E-021.70E-037.82E-033.27E-021.36E-01 + 45L1 390.003.07E-041.09E-033.45E-031.06E-029.15E-043.58E-031.26E-024.40E-02 + 45L1 500.001.67E-045.23E-041.46E-033.97E-034.99E-041.68E-035.09E-031.51E-02 + 45L1 730.007.17E-051.89E-044.47E-041.02E-032.05E-045.72E-041.41E-033.34E-03 + 45L11000.003.81E-058.96E-051.88E-043.79E-041.01E-042.47E-045.28E-041.08E-03 + 45L11500.001.85E-053.82E-057.06E-051.24E-044.26E-059.08E-051.67E-042.93E-04 + 45L2 4.153.92E+014.42E+053.04E+083.00E+103.72E+011.46E+041.09E+063.81E+07 + 45L2 4.852.51E+012.01E+051.20E+081.45E+102.30E+017.88E+037.19E+053.86E+07 + 45L2 6.151.25E+016.08E+042.92E+073.88E+091.11E+013.06E+033.08E+052.16E+07 + 45L2 9.353.48E+007.39E+032.39E+062.92E+083.04E+005.71E+025.31E+043.89E+06 + 45L2 13.151.18E+001.34E+033.10E+053.18E+071.06E+001.45E+021.13E+047.28E+05 + 45L2 17.005.11E-013.71E+026.68E+045.78E+064.81E-015.15E+013.41E+031.90E+05 + 45L2 23.001.87E-018.27E+011.10E+047.63E+051.89E-011.53E+018.12E+023.70E+04 + 45L2 31.006.79E-021.89E+011.87E+031.02E+057.54E-024.59E+001.94E+027.08E+03 + 45L2 43.002.19E-023.79E+002.70E+021.12E+042.75E-021.23E+003.99E+011.13E+03 + 45L2 56.008.68E-031.04E+005.71E+011.90E+031.22E-024.27E-011.11E+012.53E+02 + 45L2 73.003.40E-032.90E-011.22E+013.22E+025.40E-031.48E-013.08E+005.65E+01 + 45L2 86.001.90E-031.32E-014.72E+001.08E+023.26E-037.73E-021.40E+002.24E+01 + 45L2 103.001.00E-035.58E-021.67E+003.28E+011.88E-033.79E-025.89E-018.13E+00 + 45L2 126.004.91E-042.15E-025.33E-018.79E+001.01E-031.71E-022.25E-012.63E+00 + 45L2 155.002.37E-048.19E-031.67E-012.31E+005.39E-047.62E-038.45E-028.36E-01 + 45L2 220.007.02E-051.65E-032.45E-022.53E-011.86E-041.97E-031.66E-021.24E-01 + 45L2 305.002.32E-053.90E-044.34E-033.47E-026.99E-055.75E-043.76E-032.21E-02 + 45L2 390.001.03E-051.36E-041.24E-038.21E-033.36E-052.31E-041.27E-036.26E-03 + 45L2 500.004.68E-064.90E-053.66E-042.03E-031.62E-059.42E-054.38E-041.83E-03 + 45L2 730.001.48E-061.12E-056.33E-052.74E-045.40E-062.50E-059.23E-053.06E-04 + 45L21000.006.02E-073.58E-061.63E-055.86E-052.20E-068.65E-062.70E-057.61E-05 + 45L21500.002.08E-079.25E-073.30E-069.62E-067.15E-072.34E-066.12E-061.43E-05 + 45L3 4.007.98E+019.12E+056.66E+086.93E+101.20E+014.04E+051.78E+097.85E+11 + 45L3 4.704.99E+014.02E+052.53E+083.18E+107.32E+001.81E+055.94E+082.27E+11 + 45L3 6.002.41E+011.17E+055.80E+077.94E+093.45E+005.34E+041.14E+083.49E+10 + 45L3 9.206.39E+001.34E+044.37E+065.42E+089.24E-016.35E+036.54E+061.34E+09 + 45L3 13.002.10E+002.32E+035.37E+055.52E+073.18E-011.13E+036.69E+059.94E+07 + 45L3 17.008.63E-015.98E+021.06E+059.06E+061.40E-012.99E+021.17E+051.35E+07 + 45L3 23.003.10E-011.30E+021.68E+041.15E+065.52E-026.66E+011.67E+041.45E+06 + 45L3 31.001.10E-012.88E+012.74E+031.47E+052.21E-021.52E+012.53E+031.66E+05 + 45L3 43.003.48E-025.54E+003.76E+021.53E+048.09E-033.02E+003.28E+021.59E+04 + 45L3 56.001.36E-021.47E+007.56E+012.44E+033.60E-038.27E-016.50E+012.47E+03 + 45L3 73.005.22E-033.88E-011.52E+013.87E+021.60E-032.27E-011.31E+013.92E+02 + 45L3 86.002.89E-031.71E-015.64E+001.24E+029.72E-041.03E-014.93E+001.28E+02 + 45L3 103.001.50E-036.97E-021.90E+003.56E+015.61E-044.32E-021.70E+003.75E+01 + 45L3 126.007.29E-042.57E-025.66E-018.85E+003.05E-041.65E-025.27E-019.76E+00 + 45L3 155.003.47E-049.27E-031.65E-012.13E+001.63E-046.21E-031.61E-012.50E+00 + 45L3 220.001.01E-041.70E-032.09E-021.98E-015.77E-051.23E-032.25E-022.63E-01 + 45L3 305.003.35E-053.66E-043.19E-032.27E-022.23E-052.81E-043.78E-033.45E-02 + 45L3 390.001.51E-051.20E-048.08E-044.64E-031.11E-059.57E-051.02E-037.82E-03 + 45L3 500.007.01E-064.07E-052.13E-049.91E-045.58E-063.35E-052.83E-041.82E-03 + 45L3 730.002.34E-068.84E-063.18E-051.10E-042.07E-067.44E-064.30E-052.17E-04 + 45L31000.001.05E-062.82E-067.61E-062.08E-059.64E-072.39E-069.77E-064.02E-05 + 45L31500.004.09E-077.83E-071.53E-063.17E-063.94E-076.71E-071.71E-065.25E-06 + 45M1 1.631.90E+015.91E+042.76E+063.69E+091.23E+039.00E+061.07E+103.42E+12 + 45M1 2.639.67E+007.35E+031.55E+063.97E+072.93E+028.60E+055.04E+081.23E+11 + 45M1 4.633.57E+004.02E+021.71E+051.75E+075.38E+015.55E+041.52E+072.44E+09 + 45M1 8.631.01E+004.72E+006.20E+038.45E+058.35E+002.89E+033.72E+053.55E+07 + 45M1 15.632.70E-011.10E+001.05E+021.87E+041.42E+001.88E+021.25E+047.05E+05 + 45M1 25.008.76E-027.50E-013.19E+005.00E+023.51E-012.32E+019.41E+023.48E+04 + 45M1 40.002.66E-022.67E-011.53E+001.37E+018.77E-023.09E+007.80E+011.88E+03 + 45M1 52.001.34E-021.30E-018.55E-015.27E+004.08E-021.04E+002.03E+013.84E+02 + 45M1 70.006.01E-035.40E-023.60E-012.19E+001.73E-023.11E-014.58E+006.62E+01 + 45M1 103.002.08E-031.58E-029.61E-025.44E-015.77E-036.87E-027.10E-017.26E+00 + 45M1 150.007.31E-044.54E-032.34E-021.15E-012.04E-031.69E-021.25E-019.27E-01 + 45M1 280.001.32E-045.69E-042.13E-037.73E-033.90E-041.93E-038.68E-033.87E-02 + 45M1 500.003.07E-059.58E-052.68E-047.30E-049.20E-053.13E-049.50E-042.83E-03 + 45M2 1.524.40E+011.24E+074.63E+102.46E+131.42E+023.03E+051.21E+082.48E+10 + 45M2 2.521.60E+019.78E+051.80E+097.27E+113.08E+013.21E+049.82E+061.96E+09 + 45M2 4.523.93E+005.20E+044.53E+071.24E+105.21E+002.58E+035.35E+058.39E+07 + 45M2 8.526.93E-012.17E+039.03E+051.54E+087.54E-011.80E+022.33E+042.45E+06 + 45M2 15.521.14E-011.10E+022.35E+042.45E+061.21E-011.52E+011.21E+038.18E+04 + 45M2 25.002.46E-021.04E+011.34E+039.29E+042.80E-022.18E+001.16E+025.36E+03 + 45M2 40.005.11E-031.03E+008.17E+013.75E+036.63E-033.26E-011.16E+013.61E+02 + 45M2 52.002.08E-032.88E-011.74E+016.33E+022.97E-031.14E-013.22E+008.03E+01 + 45M2 70.007.39E-046.84E-023.06E+008.54E+011.19E-033.46E-027.57E-011.47E+01 + 45M2 103.001.91E-041.08E-023.29E-016.55E+003.66E-047.46E-031.17E-011.64E+00 + 45M2 150.005.11E-051.86E-033.94E-025.66E-011.16E-041.70E-031.96E-022.00E-01 + 45M2 280.005.98E-061.11E-041.34E-031.15E-021.77E-051.56E-041.09E-036.86E-03 + 45M2 500.009.22E-079.63E-067.21E-054.02E-043.18E-061.85E-058.64E-053.62E-04 + 45M3 1.509.19E+012.39E+079.10E+104.82E+134.37E+011.10E+073.44E+111.05E+15 + 45M3 2.503.16E+011.81E+063.34E+091.34E+129.19E+008.52E+051.00E+101.41E+13 + 45M3 4.507.37E+009.28E+048.03E+072.17E+101.52E+004.51E+041.78E+081.12E+11 + 45M3 8.501.24E+003.73E+031.52E+062.54E+082.18E-011.88E+032.42E+066.95E+08 + 45M3 15.501.96E-011.80E+023.77E+043.85E+063.48E-029.43E+014.55E+046.66E+06 + 45M3 25.004.09E-021.62E+012.02E+031.37E+058.08E-038.76E+002.07E+031.83E+05 + 45M3 40.008.22E-031.53E+001.15E+025.14E+031.93E-038.58E-011.07E+025.88E+03 + 45M3 52.003.28E-034.11E-012.34E+018.24E+028.68E-042.36E-012.10E+018.99E+02 + 45M3 70.001.14E-039.29E-023.86E+001.04E+023.51E-045.54E-023.45E+001.11E+02 + 45M3 103.002.87E-041.36E-023.74E-017.08E+001.09E-048.58E-033.46E-017.82E+00 + 45M3 150.007.52E-052.13E-033.95E-025.30E-013.51E-051.44E-033.92E-026.36E-01 + 45M3 280.008.71E-061.07E-041.02E-037.88E-035.58E-068.15E-051.20E-031.18E-02 + 45M3 500.001.37E-068.03E-064.20E-051.97E-041.10E-066.63E-065.65E-053.66E-04 + 45M4 1.311.56E+026.14E+055.79E+101.17E+151.00E+012.54E+054.13E+097.02E+12 + 45M4 2.312.29E+013.35E+041.07E+098.59E+121.54E+001.47E+049.35E+071.01E+11 + 45M4 4.312.34E+001.36E+031.30E+074.10E+101.85E-016.29E+021.55E+069.72E+08 + 45M4 8.311.80E-014.51E+011.24E+051.59E+081.86E-022.26E+012.22E+047.65E+06 + 45M4 15.311.44E-021.78E+001.64E+039.59E+052.05E-031.01E+004.51E+028.76E+04 + 45M4 25.001.74E-031.28E-015.12E+011.65E+043.33E-048.31E-022.04E+012.49E+03 + 45M4 40.002.16E-049.96E-031.88E+003.49E+025.63E-057.58E-031.08E+008.38E+01 + 45M4 52.006.67E-052.37E-032.99E-014.11E+012.06E-051.99E-032.11E-011.28E+01 + 45M4 70.001.74E-054.67E-043.78E-023.72E+006.53E-064.39E-043.36E-021.53E+00 + 45M4 103.003.01E-065.70E-052.65E-031.69E-011.45E-066.19E-053.14E-031.00E-01 + 45M4 150.005.49E-077.54E-062.08E-048.82E-033.32E-079.29E-063.20E-047.29E-03 + 45M4 280.003.63E-082.94E-073.56E-067.63E-052.90E-084.14E-077.79E-061.04E-04 + 45M4 500.003.14E-091.72E-081.06E-071.19E-063.12E-092.48E-082.76E-072.38E-06 + 45M5 1.312.30E+028.43E+059.00E+101.75E+156.28E+003.16E+041.95E+101.72E+15 + 45M5 2.313.33E+014.54E+041.64E+091.25E+139.70E-011.86E+033.67E+081.08E+13 + 45M5 4.313.37E+001.83E+031.98E+075.88E+101.20E-018.29E+014.66E+064.28E+10 + 45M5 8.312.55E-015.96E+011.87E+052.23E+081.25E-023.16E+004.74E+041.36E+08 + 45M5 15.312.01E-022.32E+002.41E+031.31E+061.44E-031.53E-016.68E+026.98E+05 + 45M5 25.002.41E-031.63E-017.37E+012.18E+042.42E-041.37E-022.20E+011.10E+04 + 45M5 40.002.98E-041.24E-022.61E+004.42E+024.26E-051.36E-038.49E-012.20E+02 + 45M5 52.009.08E-052.89E-034.07E-015.05E+011.59E-053.75E-041.39E-012.56E+01 + 45M5 70.002.36E-055.56E-044.98E-024.36E+005.20E-068.80E-051.81E-022.31E+00 + 45M5 103.004.18E-066.55E-053.30E-031.84E-011.21E-061.36E-051.32E-031.06E-01 + 45M5 150.007.86E-078.34E-062.42E-048.70E-032.94E-072.27E-061.06E-045.59E-03 + 45M5 280.005.03E-083.08E-073.55E-066.02E-052.97E-081.29E-071.87E-064.83E-05 + 45M5 500.005.88E-091.85E-089.45E-087.35E-074.02E-091.09E-085.85E-087.10E-07 + 45N+ 50.003.80E-031.68E-019.15E+003.55E+029.77E-033.31E-011.14E+013.85E+02 + 45N+ 70.001.45E-033.71E-021.26E+003.45E+013.68E-038.06E-021.79E+004.04E+01 + 45N+ 100.005.22E-048.03E-031.64E-013.06E+001.33E-031.90E-022.75E-014.12E+00 + 45N+ 150.001.63E-041.54E-031.79E-022.13E-014.29E-043.98E-033.69E-023.56E-01 + 45N+ 200.007.19E-055.08E-044.10E-033.51E-021.96E-041.39E-039.60E-036.92E-02 + 45N+ 500.006.40E-062.18E-057.22E-052.47E-041.89E-056.66E-052.16E-047.05E-04 + 46K 25.355.90E+002.81E+012.89E+011.53E+011.80E+015.93E+023.26E+034.54E+03 + 46K 26.055.48E+002.94E+014.76E+015.03E+011.65E+015.33E+023.28E+037.17E+03 + 46K 27.354.83E+003.04E+017.91E+011.60E+021.43E+014.42E+023.17E+031.11E+04 + 46K 30.553.61E+002.87E+011.28E+025.02E+021.03E+012.89E+022.58E+031.53E+04 + 46K 34.352.64E+002.41E+011.42E+027.67E+027.31E+001.84E+021.86E+031.44E+04 + 46K 38.002.01E+001.96E+011.32E+028.33E+025.43E+001.25E+021.33E+031.17E+04 + 46K 44.001.35E+001.38E+011.03E+027.31E+023.53E+007.10E+017.81E+027.49E+03 + 46K 52.008.51E-018.72E+006.81E+015.08E+022.17E+003.75E+014.06E+024.00E+03 + 46K 64.004.76E-014.67E+003.61E+012.67E+021.19E+001.71E+011.73E+021.65E+03 + 46K 77.002.82E-012.59E+001.91E+011.35E+026.97E-018.57E+007.96E+017.10E+02 + 46K 94.001.59E-011.34E+009.12E+005.97E+013.95E-014.10E+003.42E+012.77E+02 + 46K 107.001.10E-018.64E-015.55E+003.42E+012.75E-012.56E+001.97E+011.48E+02 + 46K 124.007.21E-025.21E-013.11E+001.78E+011.82E-011.51E+001.06E+017.28E+01 + 46K 147.004.43E-022.90E-011.58E+008.24E+001.14E-018.24E-015.17E+003.20E+01 + 46K 175.002.70E-021.58E-017.82E-013.71E+007.12E-024.50E-012.51E+001.38E+01 + 46K 240.001.11E-025.34E-022.21E-018.74E-013.09E-021.55E-017.01E-013.13E+00 + 46K 325.004.91E-031.95E-026.78E-022.27E-011.42E-025.86E-022.17E-017.96E-01 + 46K 410.002.70E-039.36E-032.87E-028.50E-027.94E-032.86E-029.22E-022.92E-01 + 46K 520.001.51E-034.63E-031.26E-023.31E-024.46E-031.42E-023.99E-021.10E-01 + 46K 750.006.70E-041.74E-034.01E-038.94E-031.89E-035.08E-031.19E-022.71E-02 + 46K 1000.003.77E-048.79E-041.82E-033.62E-039.94E-042.39E-034.97E-039.92E-03 + 46K 1250.002.50E-045.42E-041.05E-031.92E-036.13E-041.37E-032.63E-034.81E-03 + 46K 1500.001.83E-043.75E-046.86E-041.19E-034.18E-048.83E-041.60E-032.76E-03 + 46L1 4.601.78E+016.00E+039.26E+053.13E+073.31E+023.17E+055.08E+072.17E+09 + 46L1 5.301.39E+012.63E+035.78E+053.22E+072.17E+021.61E+052.31E+071.23E+09 + 46L1 6.609.31E+006.54E+022.15E+051.74E+071.12E+025.70E+046.81E+064.10E+08 + 46L1 9.804.23E+002.68E+012.34E+042.51E+063.45E+019.00E+037.63E+054.39E+07 + 46L1 13.602.08E+002.05E+002.59E+033.28E+051.30E+012.01E+031.27E+056.24E+06 + 46L1 17.001.26E+003.77E+004.53E+026.94E+046.68E+007.35E+023.80E+041.62E+06 + 46L1 23.006.15E-013.94E+002.93E+016.71E+032.72E+001.93E+027.55E+032.60E+05 + 46L1 31.002.94E-012.53E+008.32E+005.01E+021.12E+005.30E+011.58E+034.30E+04 + 46L1 43.001.27E-011.20E+006.45E+004.45E+014.29E-011.33E+012.93E+026.11E+03 + 46L1 56.006.33E-025.86E-013.68E+002.04E+011.99E-014.49E+007.76E+011.30E+03 + 46L1 73.003.10E-022.67E-011.71E+009.86E+009.24E-021.55E+002.11E+012.80E+02 + 46L1 86.001.98E-021.60E-019.97E-015.73E+005.79E-028.14E-019.56E+001.11E+02 + 46L1 103.001.20E-028.97E-025.31E-012.95E+003.48E-024.06E-014.07E+004.03E+01 + 46L1 126.006.87E-034.63E-022.54E-011.32E+001.98E-021.90E-011.60E+001.34E+01 + 46L1 155.003.86E-032.32E-021.16E-015.56E-011.12E-028.89E-026.29E-014.42E+00 + 46L1 220.001.47E-037.22E-033.03E-021.23E-014.38E-032.59E-021.38E-017.31E-01 + 46L1 305.006.12E-042.48E-038.83E-033.05E-021.88E-038.67E-033.62E-021.50E-01 + 46L1 390.003.26E-041.15E-033.62E-031.10E-021.01E-033.96E-031.40E-024.86E-02 + 46L1 500.001.78E-045.54E-041.54E-034.19E-035.50E-041.86E-035.61E-031.66E-02 + 46L1 730.007.66E-052.02E-044.77E-041.09E-032.25E-046.30E-041.55E-033.68E-03 + 46L11000.004.08E-059.61E-052.02E-044.07E-041.11E-042.72E-045.80E-041.18E-03 + 46L11500.001.99E-054.11E-057.60E-051.34E-044.64E-059.94E-051.83E-043.21E-04 + 46L2 4.333.62E+013.97E+052.60E+082.39E+103.66E+011.37E+049.49E+053.00E+07 + 46L2 5.032.36E+011.86E+051.07E+081.21E+102.31E+017.56E+036.45E+053.18E+07 + 46L2 6.331.21E+015.85E+042.72E+073.42E+091.14E+013.03E+032.88E+051.89E+07 + 46L2 9.533.48E+007.49E+032.37E+062.78E+083.23E+005.90E+025.28E+043.69E+06 + 46L2 13.331.21E+001.40E+033.19E+053.17E+071.15E+001.53E+021.16E+047.23E+05 + 46L2 17.005.49E-014.15E+027.46E+046.35E+065.43E-015.77E+013.76E+032.05E+05 + 46L2 23.002.02E-019.26E+011.23E+048.43E+052.14E-011.71E+019.00E+024.04E+04 + 46L2 31.007.36E-022.12E+012.09E+031.13E+058.53E-025.16E+002.16E+027.78E+03 + 46L2 43.002.39E-024.25E+003.03E+021.25E+043.12E-021.39E+004.45E+011.25E+03 + 46L2 56.009.50E-031.17E+006.41E+012.12E+031.38E-024.82E-011.24E+012.82E+02 + 46L2 73.003.74E-033.26E-011.37E+013.60E+026.13E-031.68E-013.46E+006.31E+01 + 46L2 86.002.10E-031.48E-015.31E+001.21E+023.71E-038.75E-021.57E+002.51E+01 + 46L2 103.001.11E-036.28E-021.89E+003.69E+012.14E-034.29E-026.63E-019.11E+00 + 46L2 126.005.45E-042.43E-026.02E-019.90E+001.15E-031.94E-022.54E-012.96E+00 + 46L2 155.002.63E-049.25E-031.89E-012.60E+006.15E-048.66E-039.57E-029.42E-01 + 46L2 220.007.84E-051.87E-032.77E-022.87E-012.13E-042.25E-031.88E-021.40E-01 + 46L2 305.002.60E-054.42E-044.93E-033.94E-028.01E-056.56E-044.28E-032.50E-02 + 46L2 390.001.16E-051.55E-041.41E-039.34E-033.86E-052.65E-041.45E-037.12E-03 + 46L2 500.005.29E-065.58E-054.17E-042.31E-031.86E-051.08E-045.00E-042.08E-03 + 46L2 730.001.70E-061.28E-057.23E-053.13E-046.21E-062.87E-051.06E-043.51E-04 + 46L21000.006.80E-074.09E-061.87E-056.72E-052.54E-069.95E-063.11E-058.72E-05 + 46L21500.002.35E-071.05E-063.78E-061.10E-058.22E-072.70E-067.05E-061.65E-05 + 46L3 4.177.40E+018.21E+055.74E+085.57E+101.17E+013.82E+051.61E+096.83E+11 + 46L3 4.874.71E+013.74E+052.26E+082.67E+107.26E+001.76E+055.62E+082.07E+11 + 46L3 6.172.33E+011.13E+055.43E+077.04E+093.50E+005.41E+041.14E+083.37E+10 + 46L3 9.376.40E+001.36E+044.34E+065.18E+089.66E-016.74E+036.93E+061.40E+09 + 46L3 13.172.14E+002.42E+035.51E+055.51E+073.39E-011.24E+037.33E+051.07E+08 + 46L3 17.009.23E-016.65E+021.17E+059.90E+061.55E-013.48E+021.39E+051.60E+07 + 46L3 23.003.33E-011.44E+021.87E+041.26E+066.11E-027.74E+011.98E+041.72E+06 + 46L3 31.001.19E-013.20E+013.05E+031.62E+052.44E-021.76E+012.98E+031.95E+05 + 46L3 43.003.77E-026.17E+004.18E+021.69E+048.96E-033.51E+003.86E+021.87E+04 + 46L3 56.001.47E-021.63E+008.42E+012.70E+033.99E-039.59E-017.62E+012.89E+03 + 46L3 73.005.69E-034.33E-011.69E+014.29E+021.78E-032.63E-011.53E+014.58E+02 + 46L3 86.003.15E-031.91E-016.29E+001.38E+021.08E-031.19E-015.76E+001.49E+02 + 46L3 103.001.65E-037.77E-022.12E+003.95E+016.23E-044.99E-021.99E+004.37E+01 + 46L3 126.007.98E-042.86E-026.33E-019.85E+003.38E-041.90E-026.14E-011.13E+01 + 46L3 155.003.82E-041.03E-021.84E-012.38E+001.81E-047.16E-031.87E-012.90E+00 + 46L3 220.001.12E-041.90E-032.34E-022.21E-016.41E-051.41E-032.60E-023.04E-01 + 46L3 305.003.73E-054.09E-043.57E-032.53E-022.47E-053.21E-044.37E-033.98E-02 + 46L3 390.001.67E-051.34E-049.05E-045.19E-031.23E-051.09E-041.18E-039.02E-03 + 46L3 500.007.75E-064.56E-052.38E-041.11E-036.21E-063.81E-053.25E-042.10E-03 + 46L3 730.002.63E-069.88E-063.56E-051.23E-042.30E-068.41E-064.92E-052.49E-04 + 46L31000.001.16E-063.14E-068.52E-062.33E-051.07E-062.68E-061.11E-054.61E-05 + 46L31500.004.54E-078.66E-071.71E-063.55E-064.37E-077.49E-071.94E-066.00E-06 + 46M1 1.671.80E+015.75E+042.48E+063.57E+091.29E+039.31E+061.09E+103.37E+12 + 46M1 2.679.41E+007.58E+031.46E+063.64E+073.16E+029.32E+055.46E+081.30E+11 + 46M1 4.673.55E+004.49E+021.75E+051.65E+075.92E+016.20E+041.71E+072.69E+09 + 46M1 8.671.03E+006.54E+006.88E+038.83E+059.30E+003.28E+034.23E+054.01E+07 + 46M1 15.672.77E-019.40E-011.33E+022.13E+041.59E+002.15E+021.42E+048.01E+05 + 46M1 25.009.09E-027.06E-013.58E+006.38E+023.96E-012.67E+011.08E+033.99E+04 + 46M1 40.002.79E-022.63E-011.39E+001.62E+019.91E-023.53E+008.93E+012.14E+03 + 46M1 52.001.40E-021.31E-018.11E-015.14E+004.60E-021.18E+002.31E+014.37E+02 + 46M1 70.006.33E-035.50E-023.52E-012.09E+001.95E-023.53E-015.21E+007.51E+01 + 46M1 103.002.20E-031.63E-029.59E-025.34E-016.50E-037.78E-028.03E-018.20E+00 + 46M1 150.007.77E-044.74E-032.39E-021.16E-012.29E-031.90E-021.41E-011.04E+00 + 46M1 280.001.42E-046.03E-042.24E-038.06E-034.36E-042.16E-039.72E-034.34E-02 + 46M1 500.003.30E-051.03E-042.86E-047.78E-041.02E-043.49E-041.06E-033.16E-03 + 46M2 1.564.22E+011.24E+074.56E+102.34E+131.50E+023.15E+051.22E+082.33E+10 + 46M2 2.561.59E+011.03E+061.88E+097.40E+113.34E+013.47E+041.03E+071.97E+09 + 46M2 4.564.02E+005.64E+044.92E+071.32E+105.79E+002.86E+035.81E+058.85E+07 + 46M2 8.567.28E-012.41E+031.00E+061.68E+088.49E-012.02E+022.57E+042.66E+06 + 46M2 15.561.22E-011.23E+022.64E+042.72E+061.37E-011.72E+011.35E+039.02E+04 + 46M2 25.002.69E-021.18E+011.52E+031.05E+053.21E-022.49E+001.32E+026.02E+03 + 46M2 40.005.63E-031.17E+009.30E+014.25E+037.61E-033.73E-011.32E+014.08E+02 + 46M2 52.002.30E-033.27E-011.98E+017.18E+023.41E-031.30E-013.66E+009.08E+01 + 46M2 70.008.22E-047.79E-023.49E+009.72E+011.37E-033.96E-028.64E-011.66E+01 + 46M2 103.002.13E-041.23E-023.77E-017.47E+004.22E-048.57E-031.34E-011.87E+00 + 46M2 150.005.73E-052.12E-034.52E-026.47E-011.35E-041.96E-032.25E-022.29E-01 + 46M2 280.006.80E-061.27E-041.54E-031.32E-022.06E-051.80E-041.26E-037.89E-03 + 46M2 500.001.04E-061.11E-058.34E-054.64E-043.70E-062.16E-051.00E-044.18E-04 + 46M3 1.538.86E+012.39E+079.00E+104.61E+134.55E+011.16E+073.59E+111.09E+15 + 46M3 2.533.14E+011.90E+063.49E+091.36E+129.85E+009.38E+051.11E+101.58E+13 + 46M3 4.537.55E+001.01E+058.69E+072.30E+101.67E+005.12E+042.06E+081.30E+11 + 46M3 8.531.30E+004.12E+031.68E+062.77E+082.41E-012.18E+032.86E+068.27E+08 + 46M3 15.532.09E-012.01E+024.20E+044.24E+063.87E-021.10E+025.42E+047.95E+06 + 46M3 25.004.44E-021.83E+012.28E+031.53E+059.06E-031.03E+012.49E+032.21E+05 + 46M3 40.008.98E-031.73E+001.30E+025.78E+032.16E-031.01E+001.28E+027.04E+03 + 46M3 52.003.60E-034.64E-012.64E+019.26E+029.74E-042.78E-012.51E+011.07E+03 + 46M3 70.001.26E-031.05E-014.36E+001.17E+023.95E-046.51E-024.10E+001.32E+02 + 46M3 103.003.19E-041.54E-024.24E-017.99E+001.23E-041.01E-024.10E-019.27E+00 + 46M3 150.008.41E-052.41E-034.47E-025.99E-013.96E-051.68E-034.62E-027.51E-01 + 46M3 280.009.82E-061.21E-041.16E-038.93E-036.29E-069.47E-051.41E-031.39E-02 + 46M3 500.001.55E-069.10E-064.78E-052.23E-041.24E-067.65E-066.59E-054.29E-04 + 46M4 1.341.58E+026.30E+055.96E+101.21E+151.08E+012.75E+054.45E+097.37E+12 + 46M4 2.342.42E+013.60E+041.17E+099.55E+121.70E+001.66E+041.07E+081.13E+11 + 46M4 4.342.56E+001.51E+031.49E+074.77E+102.10E-017.35E+021.83E+061.14E+09 + 46M4 8.342.02E-015.11E+011.46E+051.89E+082.15E-022.68E+012.67E+049.14E+06 + 46M4 15.341.64E-022.06E+001.95E+031.15E+062.39E-031.21E+005.47E+021.06E+05 + 46M4 25.002.02E-031.50E-016.17E+012.01E+043.94E-041.01E-012.50E+013.04E+03 + 46M4 40.002.54E-041.17E-022.26E+004.25E+026.69E-059.20E-031.32E+001.02E+02 + 46M4 52.007.85E-052.81E-033.61E-015.01E+012.45E-052.42E-032.58E-011.56E+01 + 46M4 70.002.06E-055.55E-044.56E-024.53E+007.79E-065.34E-044.11E-021.88E+00 + 46M4 103.003.58E-066.80E-053.20E-032.07E-011.73E-067.54E-053.85E-031.23E-01 + 46M4 150.006.64E-079.04E-062.52E-041.08E-023.99E-071.13E-053.93E-048.95E-03 + 46M4 280.004.69E-083.53E-074.33E-069.33E-053.49E-085.06E-079.57E-061.28E-04 + 46M4 500.004.76E-092.08E-081.30E-071.46E-063.76E-093.04E-083.40E-072.93E-06 + 46M5 1.332.33E+028.62E+059.31E+101.80E+156.72E+003.39E+042.12E+101.86E+15 + 46M5 2.333.52E+014.86E+041.81E+091.39E+131.07E+002.08E+034.24E+081.27E+13 + 46M5 4.333.68E+002.02E+032.27E+076.83E+101.35E-019.54E+015.60E+065.27E+10 + 46M5 8.332.86E-016.73E+012.19E+052.65E+081.43E-023.70E+005.82E+041.71E+08 + 46M5 15.332.29E-022.66E+002.87E+031.57E+061.67E-031.81E-018.28E+028.86E+05 + 46M5 25.002.79E-031.90E-018.88E+012.66E+042.84E-041.62E-022.76E+011.41E+04 + 46M5 40.003.47E-041.45E-023.15E+005.37E+025.01E-051.61E-031.06E+002.80E+02 + 46M5 52.001.07E-043.40E-034.91E-016.14E+011.88E-054.46E-041.74E-013.25E+01 + 46M5 70.002.78E-056.55E-046.01E-025.31E+006.16E-061.05E-042.26E-022.92E+00 + 46M5 103.004.87E-067.76E-053.98E-032.24E-011.44E-061.62E-051.64E-031.34E-01 + 46M5 150.009.19E-079.92E-062.92E-041.06E-023.50E-072.71E-061.32E-047.03E-03 + 46M5 280.006.47E-083.66E-074.30E-067.33E-053.55E-081.55E-072.30E-066.03E-05 + 46M5 500.005.96E-092.26E-081.11E-078.95E-074.82E-091.31E-087.13E-088.81E-07 + 46N+ 50.003.91E-031.89E-011.06E+014.11E+021.05E-023.67E-011.32E+014.53E+02 + 46N+ 70.001.49E-034.10E-021.45E+003.98E+013.97E-038.88E-022.04E+004.69E+01 + 46N+ 100.005.36E-048.71E-031.86E-013.52E+001.43E-032.08E-023.09E-014.72E+00 + 46N+ 150.001.67E-041.64E-032.00E-022.43E-014.61E-044.33E-034.08E-024.01E-01 + 46N+ 200.007.39E-055.35E-044.51E-033.96E-022.11E-041.50E-031.05E-027.71E-02 + 46N+ 500.006.60E-062.27E-057.64E-052.66E-042.00E-057.11E-052.32E-047.64E-04 + 47K 26.515.39E+002.44E+012.34E+011.13E+011.74E+015.48E+022.86E+033.72E+03 + 47K 27.215.03E+002.54E+013.82E+013.68E+011.61E+014.94E+022.88E+035.85E+03 + 47K 28.514.45E+002.63E+016.34E+011.17E+021.40E+014.13E+022.80E+039.06E+03 + 47K 31.713.37E+002.51E+011.04E+023.76E+021.02E+012.74E+022.32E+031.28E+04 + 47K 35.512.49E+002.14E+011.18E+025.91E+027.34E+001.78E+021.70E+031.23E+04 + 47K 40.001.81E+001.69E+011.09E+026.58E+025.17E+001.12E+021.15E+039.69E+03 + 47K 46.001.24E+001.20E+018.59E+015.80E+023.43E+006.59E+016.92E+026.34E+03 + 47K 54.007.94E-017.77E+005.78E+014.11E+022.15E+003.58E+013.70E+023.49E+03 + 47K 66.004.53E-014.27E+003.15E+012.23E+021.20E+001.68E+011.63E+021.50E+03 + 47K 79.002.73E-012.41E+001.71E+011.16E+027.16E-018.56E+007.69E+016.62E+02 + 47K 96.001.57E-011.27E+008.38E+005.30E+014.12E-014.17E+003.38E+012.65E+02 + 47K 109.001.09E-018.30E-015.17E+003.09E+012.88E-012.63E+001.97E+011.45E+02 + 47K 126.007.21E-025.07E-012.94E+001.64E+011.92E-011.56E+001.07E+017.20E+01 + 47K 149.004.47E-022.85E-011.51E+007.74E+001.21E-018.63E-015.30E+003.22E+01 + 47K 175.002.83E-021.64E-017.97E-013.73E+007.84E-024.94E-012.73E+001.49E+01 + 47K 240.001.17E-025.56E-022.27E-018.91E-013.39E-021.70E-017.63E-013.39E+00 + 47K 325.005.19E-032.04E-027.04E-022.34E-011.55E-026.41E-022.36E-018.61E-01 + 47K 420.002.69E-039.13E-032.75E-028.00E-028.19E-032.91E-029.20E-022.85E-01 + 47K 530.001.53E-034.62E-031.24E-023.22E-024.65E-031.46E-024.07E-021.10E-01 + 47K 760.006.91E-041.78E-034.09E-039.04E-032.00E-035.35E-031.25E-022.80E-02 + 47K 1050.003.65E-048.39E-041.71E-033.34E-039.69E-042.29E-034.69E-039.15E-03 + 47K 1300.002.48E-045.33E-041.02E-031.84E-036.10E-041.35E-032.56E-034.62E-03 + 47K 1550.001.84E-043.75E-046.81E-041.17E-034.22E-048.87E-041.59E-032.72E-03 + 47L1 4.811.64E+015.41E+037.79E+052.41E+073.25E+022.97E+054.56E+071.83E+09 + 47L1 5.511.30E+012.46E+035.02E+052.57E+072.16E+021.55E+052.14E+071.07E+09 + 47L1 6.818.80E+006.51E+021.96E+051.48E+071.15E+025.68E+046.56E+063.75E+08 + 47L1 10.014.09E+003.18E+012.33E+042.34E+063.62E+019.38E+037.76E+054.30E+07 + 47L1 13.812.05E+001.87E+002.80E+033.29E+051.39E+012.14E+031.33E+056.35E+06 + 47L1 18.001.12E+003.31E+003.63E+025.27E+046.29E+006.48E+023.16E+041.28E+06 + 47L1 24.005.69E-013.41E+002.83E+015.79E+032.68E+001.82E+026.81E+032.25E+05 + 47L1 32.002.80E-012.25E+007.32E+004.99E+021.14E+005.23E+011.51E+033.97E+04 + 47L1 44.001.24E-011.11E+005.57E+004.44E+014.48E-011.36E+012.93E+025.96E+03 + 47L1 57.006.28E-025.54E-013.29E+001.82E+012.10E-014.69E+007.96E+011.30E+03 + 47L1 74.003.11E-022.58E-011.58E+008.86E+009.91E-021.64E+002.20E+012.89E+02 + 47L1 87.002.00E-021.56E-019.40E-015.24E+006.24E-028.71E-011.01E+011.15E+02 + 47L1 104.001.22E-028.88E-025.09E-012.75E+003.77E-024.37E-014.34E+004.25E+01 + 47L1 127.007.05E-034.63E-022.47E-011.26E+002.15E-022.06E-011.72E+001.42E+01 + 47L1 155.004.06E-032.40E-021.18E-015.56E-011.24E-029.90E-026.99E-014.90E+00 + 47L1 220.001.55E-037.52E-033.12E-021.26E-014.86E-032.87E-021.53E-018.09E-01 + 47L1 305.006.50E-042.61E-039.19E-033.15E-022.07E-039.59E-034.00E-021.65E-01 + 47L1 390.003.47E-041.21E-033.80E-031.15E-021.11E-034.38E-031.54E-025.36E-02 + 47L1 500.001.90E-045.87E-041.63E-034.41E-036.05E-042.05E-036.19E-031.83E-02 + 47L1 730.008.16E-052.15E-045.08E-041.16E-032.47E-046.93E-041.70E-034.04E-03 + 47L11000.004.36E-051.03E-042.16E-044.36E-041.21E-042.98E-046.36E-041.30E-03 + 47L11500.002.11E-054.41E-058.18E-051.44E-045.05E-051.09E-042.01E-043.52E-04 + 47L2 4.523.35E+013.55E+052.22E+081.91E+103.60E+011.28E+048.29E+052.39E+07 + 47L2 5.222.22E+011.72E+059.45E+071.00E+102.31E+017.23E+035.79E+052.63E+07 + 47L2 6.521.16E+015.61E+042.52E+073.00E+091.17E+012.99E+032.69E+051.65E+07 + 47L2 9.723.47E+007.56E+032.33E+062.64E+083.42E+006.08E+025.22E+043.48E+06 + 47L2 13.521.23E+001.45E+033.25E+053.14E+071.24E+001.62E+021.19E+047.15E+05 + 47L2 18.004.89E-013.49E+025.91E+044.77E+065.13E-015.13E+013.16E+031.63E+05 + 47L2 24.001.89E-018.38E+011.07E+046.99E+052.12E-011.62E+018.12E+023.48E+04 + 47L2 32.007.16E-022.03E+011.94E+031.01E+058.74E-025.10E+002.06E+027.16E+03 + 47L2 44.002.40E-024.25E+002.96E+021.19E+043.29E-021.42E+004.44E+011.21E+03 + 47L2 57.009.76E-031.21E+006.49E+012.10E+031.48E-025.06E-011.28E+012.83E+02 + 47L2 74.003.91E-033.42E-011.42E+013.68E+026.67E-031.79E-013.63E+006.51E+01 + 47L2 87.002.21E-031.58E-015.59E+001.26E+024.07E-039.45E-021.67E+002.62E+01 + 47L2 104.001.18E-036.75E-022.01E+003.89E+012.36E-034.67E-027.13E-019.65E+00 + 47L2 127.005.85E-042.63E-026.49E-011.06E+011.28E-032.13E-022.76E-013.18E+00 + 47L2 155.002.92E-041.04E-022.13E-012.93E+007.01E-049.83E-031.08E-011.06E+00 + 47L2 220.008.70E-052.11E-033.14E-023.24E-012.43E-042.56E-032.13E-021.58E-01 + 47L2 305.002.90E-055.01E-045.60E-034.46E-029.16E-057.48E-044.87E-032.83E-02 + 47L2 390.001.30E-051.76E-041.60E-031.06E-024.42E-053.02E-041.65E-038.08E-03 + 47L2 500.005.92E-066.33E-054.75E-042.63E-032.13E-051.23E-045.71E-042.37E-03 + 47L2 730.001.88E-061.45E-058.26E-053.57E-047.13E-063.29E-051.21E-044.00E-04 + 47L21000.007.84E-074.65E-062.14E-057.68E-052.91E-061.14E-053.56E-059.99E-05 + 47L21500.002.67E-071.20E-064.33E-061.26E-059.45E-073.11E-068.10E-061.90E-05 + 47L3 4.356.85E+017.37E+054.93E+084.50E+101.14E+013.60E+051.46E+095.92E+11 + 47L3 5.054.44E+013.46E+052.01E+082.23E+107.17E+001.71E+055.28E+081.87E+11 + 47L3 6.352.25E+011.08E+055.05E+076.23E+093.54E+005.45E+041.12E+083.23E+10 + 47L3 9.556.38E+001.37E+044.28E+064.93E+081.01E+007.12E+037.30E+061.44E+09 + 47L3 13.352.18E+002.51E+035.62E+055.46E+073.59E-011.34E+037.97E+051.15E+08 + 47L3 18.008.14E-015.53E+029.17E+047.33E+061.43E-013.03E+021.14E+051.24E+07 + 47L3 24.003.09E-011.29E+021.60E+041.03E+065.92E-027.27E+011.78E+041.48E+06 + 47L3 32.001.15E-013.03E+012.79E+031.43E+052.45E-021.75E+012.87E+031.83E+05 + 47L3 44.003.76E-026.10E+004.04E+021.59E+049.23E-033.63E+003.93E+021.86E+04 + 47L3 57.001.50E-021.66E+008.41E+012.64E+034.18E-031.02E+008.00E+012.99E+03 + 47L3 74.005.89E-034.50E-011.73E+014.32E+021.88E-032.84E-011.65E+014.86E+02 + 47L3 87.003.30E-032.00E-016.52E+001.41E+021.15E-031.30E-016.27E+001.60E+02 + 47L3 104.001.74E-038.25E-022.23E+004.10E+016.70E-045.49E-022.18E+004.76E+01 + 47L3 127.008.50E-043.07E-026.72E-011.03E+013.66E-042.11E-026.80E-011.25E+01 + 47L3 155.004.19E-041.15E-022.05E-012.64E+002.01E-048.23E-032.16E-013.35E+00 + 47L3 220.001.24E-042.12E-032.61E-022.46E-017.10E-051.61E-033.01E-023.52E-01 + 47L3 305.004.11E-054.56E-043.99E-032.82E-022.74E-053.66E-045.03E-034.59E-02 + 47L3 390.001.85E-051.50E-041.01E-035.80E-031.36E-051.24E-041.36E-031.04E-02 + 47L3 500.008.60E-065.08E-052.66E-041.24E-036.88E-064.32E-053.73E-042.41E-03 + 47L3 730.002.91E-061.10E-053.97E-051.37E-042.55E-069.48E-065.62E-052.85E-04 + 47L31000.001.26E-063.50E-069.51E-062.61E-051.18E-063.01E-061.27E-055.28E-05 + 47L31500.004.97E-079.68E-071.90E-063.97E-064.82E-078.36E-072.19E-066.83E-06 + 47M1 1.721.72E+015.55E+042.31E+063.36E+091.34E+039.50E+061.10E+103.28E+12 + 47M1 2.729.14E+007.75E+031.37E+063.57E+073.38E+021.00E+065.84E+081.35E+11 + 47M1 4.723.52E+004.96E+021.77E+051.55E+076.48E+016.89E+041.90E+072.95E+09 + 47M1 8.721.04E+008.72E+007.56E+039.17E+051.03E+013.72E+034.80E+054.50E+07 + 47M1 15.722.83E-018.00E-011.64E+022.41E+041.78E+002.44E+021.62E+049.06E+05 + 47M1 25.009.43E-026.62E-014.50E+007.98E+024.47E-013.07E+011.25E+034.58E+04 + 47M1 40.002.91E-022.59E-011.27E+001.99E+011.12E-014.03E+001.02E+022.44E+03 + 47M1 52.001.47E-021.31E-017.64E-015.21E+005.19E-021.35E+002.63E+014.96E+02 + 47M1 70.006.66E-035.58E-023.42E-012.00E+002.19E-024.01E-015.91E+008.51E+01 + 47M1 103.002.33E-031.68E-029.61E-025.25E-017.30E-038.79E-029.07E-019.26E+00 + 47M1 150.008.26E-044.94E-032.45E-021.17E-012.57E-032.14E-021.59E-011.17E+00 + 47M1 280.001.52E-046.38E-042.34E-038.40E-034.87E-042.42E-031.09E-024.85E-02 + 47M1 500.003.55E-051.10E-043.06E-048.29E-041.14E-043.89E-041.18E-033.51E-03 + 47M2 1.604.03E+011.22E+074.41E+102.18E+131.57E+023.23E+051.20E+082.17E+10 + 47M2 2.601.57E+011.06E+061.93E+097.44E+113.61E+013.71E+041.08E+071.97E+09 + 47M2 4.604.10E+006.08E+045.29E+071.39E+106.39E+003.14E+036.26E+059.28E+07 + 47M2 8.607.61E-012.65E+031.10E+061.82E+089.52E-012.26E+022.83E+042.87E+06 + 47M2 15.601.30E-011.37E+022.94E+043.00E+061.55E-011.94E+011.51E+039.91E+04 + 47M2 25.002.92E-021.33E+011.73E+031.18E+053.67E-022.84E+001.49E+026.74E+03 + 47M2 40.006.17E-031.33E+001.06E+024.80E+038.72E-034.26E-011.49E+014.59E+02 + 47M2 52.002.53E-033.71E-012.25E+018.13E+023.91E-031.48E-014.16E+001.02E+02 + 47M2 70.009.09E-048.85E-023.97E+001.10E+021.58E-034.53E-029.82E-011.88E+01 + 47M2 103.002.38E-041.41E-024.30E-018.50E+004.86E-049.82E-031.53E-012.12E+00 + 47M2 150.006.45E-052.42E-035.17E-027.39E-011.55E-042.26E-032.57E-022.61E-01 + 47M2 280.007.69E-061.46E-041.77E-031.51E-022.38E-052.08E-041.45E-039.04E-03 + 47M2 500.001.20E-061.28E-059.62E-055.35E-044.30E-062.50E-051.16E-044.82E-04 + 47M3 1.578.53E+012.36E+078.75E+104.34E+134.70E+011.20E+073.68E+111.11E+15 + 47M3 2.573.11E+011.97E+063.61E+091.37E+121.05E+011.02E+061.22E+101.73E+13 + 47M3 4.577.70E+001.08E+059.34E+072.42E+101.81E+005.77E+042.37E+081.51E+11 + 47M3 8.571.36E+004.52E+031.85E+062.99E+082.66E-012.50E+033.37E+069.76E+08 + 47M3 15.572.22E-012.23E+024.66E+044.66E+064.29E-021.28E+026.43E+049.45E+06 + 47M3 25.004.80E-022.06E+012.57E+031.72E+051.01E-021.21E+012.99E+032.65E+05 + 47M3 40.009.80E-031.94E+001.47E+026.47E+032.42E-031.19E+001.52E+028.41E+03 + 47M3 52.003.95E-035.22E-012.98E+011.04E+031.09E-033.26E-012.99E+011.28E+03 + 47M3 70.001.39E-031.18E-014.92E+001.31E+024.42E-047.63E-024.87E+001.57E+02 + 47M3 103.003.52E-041.73E-024.79E-018.99E+001.37E-041.18E-024.84E-011.09E+01 + 47M3 150.009.31E-052.72E-035.06E-026.75E-014.44E-051.96E-035.43E-028.84E-01 + 47M3 280.001.09E-051.37E-041.32E-031.01E-027.07E-061.10E-041.65E-031.62E-02 + 47M3 500.001.73E-061.03E-055.41E-052.53E-041.39E-068.79E-067.66E-055.00E-04 + 47M4 1.371.58E+026.34E+055.99E+101.21E+151.14E+012.92E+054.69E+097.56E+12 + 47M4 2.372.53E+013.83E+041.27E+091.04E+131.87E+001.86E+041.20E+081.25E+11 + 47M4 4.372.78E+001.66E+031.69E+075.47E+102.36E-018.51E+022.14E+061.31E+09 + 47M4 8.372.25E-015.76E+011.70E+052.23E+082.46E-023.16E+013.18E+041.08E+07 + 47M4 15.371.86E-022.35E+002.30E+031.38E+062.78E-031.44E+006.57E+021.26E+05 + 47M4 25.002.33E-031.75E-017.39E+012.44E+044.63E-041.22E-013.05E+013.69E+03 + 47M4 40.002.95E-041.38E-022.71E+005.15E+027.90E-051.11E-021.61E+001.25E+02 + 47M4 52.009.18E-053.30E-034.33E-016.08E+012.90E-052.93E-033.15E-011.90E+01 + 47M4 70.002.42E-056.55E-045.48E-025.50E+009.24E-066.47E-045.01E-022.29E+00 + 47M4 103.004.25E-068.07E-053.85E-032.51E-012.06E-069.14E-054.69E-031.50E-01 + 47M4 150.007.85E-071.08E-053.03E-041.31E-024.76E-071.37E-054.80E-041.09E-02 + 47M4 280.005.22E-084.26E-075.21E-061.14E-044.18E-086.16E-071.17E-051.57E-04 + 47M4 500.005.02E-092.51E-081.56E-071.79E-064.51E-093.70E-084.17E-073.59E-06 + 47M5 1.372.33E+028.65E+059.39E+101.81E+157.09E+003.56E+042.24E+101.96E+15 + 47M5 2.373.68E+015.14E+041.96E+091.52E+131.17E+002.30E+034.81E+081.46E+13 + 47M5 4.373.99E+002.21E+032.58E+077.83E+101.51E-011.09E+026.64E+066.40E+10 + 47M5 8.373.18E-017.53E+012.55E+053.12E+081.63E-024.29E+007.07E+042.13E+08 + 47M5 15.372.60E-023.02E+003.39E+031.87E+061.92E-032.11E-011.02E+031.12E+06 + 47M5 25.003.21E-032.20E-011.07E+023.22E+043.32E-041.92E-023.44E+011.79E+04 + 47M5 40.004.03E-041.68E-023.78E+006.50E+025.88E-051.91E-031.32E+003.55E+02 + 47M5 52.001.25E-043.97E-035.90E-017.43E+012.21E-055.28E-042.16E-014.11E+01 + 47M5 70.003.27E-057.69E-047.22E-026.42E+007.26E-061.24E-042.81E-023.68E+00 + 47M5 103.005.74E-069.12E-054.79E-032.72E-011.70E-061.93E-052.03E-031.68E-01 + 47M5 150.001.07E-061.17E-053.51E-041.28E-024.15E-073.22E-061.63E-048.78E-03 + 47M5 280.007.49E-084.44E-075.16E-068.88E-054.21E-081.84E-072.82E-067.50E-05 + 47M5 500.008.28E-092.73E-081.36E-071.09E-065.71E-091.56E-088.64E-081.09E-06 + 47N+ 50.004.42E-032.17E-011.23E+014.79E+021.28E-024.50E-011.61E+015.58E+02 + 47N+ 70.001.70E-034.69E-021.68E+004.64E+014.81E-031.08E-012.49E+005.74E+01 + 47N+ 100.006.11E-049.96E-032.15E-014.09E+001.73E-032.54E-023.76E-015.75E+00 + 47N+ 150.001.92E-041.88E-032.31E-022.82E-015.58E-045.26E-034.95E-024.86E-01 + 47N+ 200.008.51E-056.13E-045.20E-034.60E-022.55E-041.82E-031.28E-029.33E-02 + 47N+ 500.007.68E-062.63E-058.86E-053.10E-042.41E-058.56E-052.80E-049.19E-04 + 48K 27.714.93E+002.12E+011.90E+018.38E+001.69E+015.06E+022.52E+033.07E+03 + 48K 28.414.61E+002.21E+013.08E+012.70E+011.57E+014.58E+022.53E+034.79E+03 + 48K 29.714.11E+002.29E+015.10E+018.62E+011.37E+013.86E+022.47E+037.44E+03 + 48K 32.913.14E+002.21E+018.47E+012.82E+021.01E+012.61E+022.08E+031.07E+04 + 48K 36.712.35E+001.90E+019.76E+014.56E+027.36E+001.71E+021.55E+031.05E+04 + 48K 41.001.75E+001.54E+019.28E+015.22E+025.32E+001.12E+021.09E+038.60E+03 + 48K 47.001.20E+001.11E+017.50E+014.77E+023.56E+006.66E+016.68E+025.80E+03 + 48K 55.007.82E-017.31E+005.18E+013.50E+022.25E+003.66E+013.64E+023.28E+03 + 48K 67.004.51E-014.09E+002.90E+011.97E+021.27E+001.74E+011.64E+021.45E+03 + 48K 80.002.74E-012.34E+001.60E+011.05E+027.63E-018.97E+007.84E+016.55E+02 + 48K 97.001.59E-011.25E+008.00E+004.92E+014.41E-014.41E+003.49E+012.67E+02 + 48K 110.001.11E-018.22E-014.98E+002.91E+013.09E-012.79E+002.05E+011.47E+02 + 48K 127.007.37E-025.06E-012.87E+001.56E+012.07E-011.66E+001.12E+017.40E+01 + 48K 150.004.59E-022.86E-011.49E+007.48E+001.31E-019.24E-015.59E+003.34E+01 + 48K 175.002.97E-021.69E-018.11E-013.74E+008.62E-025.41E-012.96E+001.60E+01 + 48K 240.001.23E-025.77E-022.33E-019.06E-013.72E-021.86E-018.29E-013.65E+00 + 48K 325.005.46E-032.13E-027.29E-022.41E-011.70E-027.00E-022.57E-019.31E-01 + 48K 420.002.84E-039.58E-032.87E-028.30E-028.95E-033.18E-021.00E-013.09E-01 + 48K 530.001.62E-034.87E-031.30E-023.37E-025.08E-031.60E-024.42E-021.19E-01 + 48K 760.007.33E-041.89E-034.32E-039.55E-032.17E-035.82E-031.35E-023.03E-02 + 48K 1050.003.87E-048.91E-041.82E-033.55E-031.05E-032.49E-035.09E-039.92E-03 + 48K 1300.002.63E-045.67E-041.08E-031.97E-036.60E-041.47E-032.78E-035.01E-03 + 48K 1550.001.95E-043.99E-047.26E-041.25E-034.55E-049.61E-041.73E-032.94E-03 + 48L1 5.021.51E+014.86E+036.52E+051.85E+073.18E+022.78E+054.06E+071.53E+09 + 48L1 5.721.20E+012.29E+034.34E+052.04E+072.15E+021.49E+051.96E+079.25E+08 + 48L1 7.028.29E+006.42E+021.78E+051.25E+071.17E+025.63E+046.28E+063.40E+08 + 48L1 10.223.95E+003.69E+012.30E+042.17E+063.80E+019.72E+037.83E+054.18E+07 + 48L1 14.022.01E+001.94E+002.98E+033.27E+051.48E+012.28E+031.38E+056.43E+06 + 48L1 18.001.14E+002.67E+004.64E+026.02E+047.02E+007.36E+023.57E+041.43E+06 + 48L1 24.005.82E-013.06E+003.93E+017.00E+032.98E+002.06E+027.68E+032.51E+05 + 48L1 32.002.88E-012.13E+006.93E+006.46E+021.27E+005.91E+011.69E+034.43E+04 + 48L1 44.001.28E-011.08E+004.99E+005.18E+014.99E-011.53E+013.29E+026.64E+03 + 48L1 57.006.51E-025.51E-013.08E+001.74E+012.34E-015.27E+008.91E+011.45E+03 + 48L1 74.003.24E-022.59E-011.52E+008.33E+001.10E-011.84E+002.46E+013.21E+02 + 48L1 87.002.09E-021.58E-019.19E-015.00E+006.94E-029.73E-011.13E+011.28E+02 + 48L1 104.001.28E-029.04E-025.04E-012.67E+004.18E-024.88E-014.83E+004.72E+01 + 48L1 127.007.39E-034.75E-022.48E-011.24E+002.39E-022.29E-011.91E+001.58E+01 + 48L1 155.004.27E-032.47E-021.19E-015.55E-011.38E-021.10E-017.75E-015.43E+00 + 48L1 220.001.64E-037.82E-033.21E-021.28E-015.37E-033.18E-021.69E-018.94E-01 + 48L1 305.006.88E-042.73E-039.56E-033.26E-022.29E-031.06E-024.42E-021.82E-01 + 48L1 390.003.68E-041.28E-033.98E-031.21E-021.23E-034.83E-031.70E-025.90E-02 + 48L1 500.002.02E-046.22E-041.72E-034.65E-036.65E-042.26E-036.81E-032.01E-02 + 48L1 730.008.74E-052.29E-045.42E-041.24E-032.71E-047.61E-041.87E-034.44E-03 + 48L11000.004.66E-051.10E-042.31E-044.67E-041.32E-043.27E-046.98E-041.43E-03 + 48L11500.002.27E-054.73E-058.79E-051.55E-045.49E-051.19E-042.19E-043.85E-04 + 48L2 4.733.08E+013.17E+051.88E+081.51E+103.52E+011.19E+047.20E+051.91E+07 + 48L2 5.432.08E+011.58E+058.32E+078.28E+092.31E+016.89E+035.17E+052.17E+07 + 48L2 6.731.12E+015.36E+042.32E+072.62E+091.19E+012.94E+032.50E+051.44E+07 + 48L2 9.933.45E+007.59E+032.29E+062.49E+083.60E+006.23E+025.13E+043.27E+06 + 48L2 13.731.25E+001.50E+033.31E+053.10E+071.33E+001.70E+021.21E+047.03E+05 + 48L2 18.005.23E-013.89E+026.58E+045.22E+065.78E-015.73E+013.47E+031.76E+05 + 48L2 24.002.03E-019.35E+011.19E+047.69E+052.39E-011.81E+018.96E+023.78E+04 + 48L2 32.007.73E-022.26E+012.16E+031.12E+059.86E-025.71E+002.28E+027.84E+03 + 48L2 44.002.61E-024.75E+003.30E+021.32E+043.71E-021.60E+004.94E+011.33E+03 + 48L2 57.001.06E-021.35E+007.26E+012.33E+031.68E-025.69E-011.42E+013.13E+02 + 48L2 74.004.28E-033.83E-011.59E+014.10E+027.55E-032.02E-014.06E+007.23E+01 + 48L2 87.002.43E-031.77E-016.27E+001.41E+024.61E-031.06E-011.87E+002.92E+01 + 48L2 104.001.30E-037.57E-022.26E+004.35E+012.67E-035.27E-028.00E-011.08E+01 + 48L2 127.006.45E-042.96E-027.30E-011.18E+011.46E-032.41E-023.10E-013.55E+00 + 48L2 155.003.23E-041.17E-022.40E-013.29E+007.96E-041.11E-021.22E-011.19E+00 + 48L2 220.009.66E-052.38E-033.55E-023.65E-012.77E-042.90E-032.41E-021.78E-01 + 48L2 305.003.22E-055.65E-046.34E-035.04E-021.04E-048.51E-045.51E-033.20E-02 + 48L2 390.001.45E-051.99E-041.82E-031.20E-025.05E-053.45E-041.87E-039.15E-03 + 48L2 500.006.60E-067.18E-055.40E-042.99E-032.44E-051.41E-046.50E-042.69E-03 + 48L2 730.002.11E-061.65E-059.41E-054.07E-048.16E-063.76E-051.38E-044.56E-04 + 48L21000.008.77E-075.28E-062.44E-058.76E-053.34E-061.31E-054.08E-051.14E-04 + 48L21500.002.94E-071.37E-064.95E-061.45E-051.08E-063.56E-069.29E-062.17E-05 + 48L3 4.546.32E+016.59E+054.21E+083.60E+101.10E+013.37E+051.31E+095.08E+11 + 48L3 5.244.17E+013.18E+051.78E+081.86E+107.06E+001.65E+054.93E+081.69E+11 + 48L3 6.542.16E+011.03E+054.68E+075.47E+093.57E+005.46E+041.10E+083.07E+10 + 48L3 9.746.33E+001.37E+044.20E+064.66E+081.04E+007.48E+037.63E+061.47E+09 + 48L3 13.542.21E+002.59E+035.71E+055.39E+073.79E-011.45E+038.63E+051.22E+08 + 48L3 18.008.68E-016.12E+021.01E+057.98E+061.58E-013.51E+021.34E+051.46E+07 + 48L3 24.003.30E-011.43E+021.77E+041.13E+066.52E-028.40E+012.10E+041.74E+06 + 48L3 32.001.23E-013.36E+013.09E+031.57E+052.70E-022.02E+013.37E+032.14E+05 + 48L3 44.004.05E-026.76E+004.47E+021.74E+041.02E-024.19E+004.60E+022.17E+04 + 48L3 57.001.62E-021.84E+009.32E+012.91E+034.61E-031.17E+009.34E+013.48E+03 + 48L3 74.006.39E-034.99E-011.92E+014.77E+022.08E-033.28E-011.92E+015.64E+02 + 48L3 87.003.58E-032.22E-017.24E+001.56E+021.27E-031.49E-017.28E+001.85E+02 + 48L3 104.001.89E-039.16E-022.47E+004.53E+017.40E-046.31E-022.53E+005.51E+01 + 48L3 127.009.28E-043.41E-027.47E-011.15E+014.05E-042.43E-027.88E-011.44E+01 + 48L3 155.004.58E-041.28E-022.28E-012.93E+002.22E-049.43E-032.50E-013.88E+00 + 48L3 220.001.35E-042.36E-032.90E-022.73E-017.86E-051.84E-033.47E-024.05E-01 + 48L3 305.004.49E-055.07E-044.44E-033.14E-023.03E-054.17E-045.78E-035.27E-02 + 48L3 390.002.03E-051.66E-041.13E-036.45E-031.51E-051.41E-041.55E-031.19E-02 + 48L3 500.009.46E-065.65E-052.97E-041.38E-037.61E-064.89E-054.27E-042.77E-03 + 48L3 730.003.18E-061.22E-054.43E-051.53E-042.81E-061.07E-056.41E-053.26E-04 + 48L31000.001.41E-063.89E-061.06E-052.91E-051.30E-063.37E-061.44E-056.02E-05 + 48L31500.005.57E-071.07E-062.12E-064.42E-065.31E-079.29E-072.46E-067.76E-06 + 48M1 1.771.62E+015.31E+042.16E+063.07E+091.38E+039.56E+061.08E+103.12E+12 + 48M1 2.778.83E+007.85E+031.28E+063.61E+073.59E+021.06E+066.16E+081.39E+11 + 48M1 4.773.48E+005.42E+021.78E+051.44E+077.06E+017.60E+042.09E+073.20E+09 + 48M1 8.771.04E+001.13E+018.23E+039.44E+051.14E+014.18E+035.41E+055.02E+07 + 48M1 15.772.89E-016.85E-011.99E+022.68E+041.98E+002.77E+021.84E+041.02E+06 + 48M1 25.009.76E-026.16E-015.88E+009.82E+025.04E-013.51E+011.43E+035.24E+04 + 48M1 40.003.03E-022.54E-011.17E+002.50E+011.26E-014.60E+001.16E+022.78E+03 + 48M1 52.001.54E-021.31E-017.18E-015.51E+005.83E-021.53E+002.99E+015.63E+02 + 48M1 70.007.00E-035.66E-023.32E-011.94E+002.46E-024.54E-016.69E+009.62E+01 + 48M1 103.002.45E-031.73E-029.61E-025.16E-018.20E-039.92E-021.02E+001.04E+01 + 48M1 150.008.75E-045.13E-032.50E-021.18E-012.88E-032.41E-021.79E-011.32E+00 + 48M1 280.001.62E-046.73E-042.45E-038.74E-035.43E-042.71E-031.21E-025.41E-02 + 48M1 500.003.82E-051.17E-043.26E-048.83E-041.26E-044.33E-041.31E-033.91E-03 + 48M2 1.653.83E+011.18E+074.18E+102.00E+131.63E+023.26E+051.17E+081.98E+10 + 48M2 2.651.54E+011.09E+061.97E+097.36E+113.87E+013.93E+041.11E+071.94E+09 + 48M2 4.654.16E+006.49E+045.64E+071.46E+107.03E+003.43E+036.69E+059.63E+07 + 48M2 8.657.93E-012.90E+031.21E+061.97E+081.06E+002.51E+023.09E+043.08E+06 + 48M2 15.651.38E-011.52E+023.26E+043.30E+061.74E-012.17E+011.67E+031.08E+05 + 48M2 25.003.16E-021.50E+011.95E+031.33E+054.18E-023.22E+001.68E+027.53E+03 + 48M2 40.006.75E-031.50E+001.20E+025.41E+039.96E-034.84E-011.69E+015.14E+02 + 48M2 52.002.78E-034.20E-012.55E+019.17E+024.47E-031.69E-014.70E+001.15E+02 + 48M2 70.001.00E-031.00E-014.51E+001.25E+021.81E-035.17E-021.11E+002.12E+01 + 48M2 103.002.64E-041.60E-024.89E-019.64E+005.58E-041.12E-021.74E-012.40E+00 + 48M2 150.007.19E-052.76E-035.90E-028.41E-011.79E-042.59E-032.93E-022.97E-01 + 48M2 280.008.65E-061.67E-042.03E-031.73E-022.75E-052.40E-041.66E-031.03E-02 + 48M2 500.001.35E-061.46E-051.11E-046.15E-044.98E-062.89E-051.33E-045.55E-04 + 48M3 1.628.15E+012.29E+078.33E+103.98E+134.79E+011.22E+073.69E+111.09E+15 + 48M3 2.623.07E+012.02E+063.68E+091.36E+121.11E+011.10E+061.32E+101.87E+13 + 48M3 4.627.82E+001.15E+059.94E+072.53E+101.96E+006.44E+042.68E+081.71E+11 + 48M3 8.621.41E+004.94E+032.01E+063.22E+082.91E-012.86E+033.93E+061.14E+09 + 48M3 15.622.35E-012.46E+025.14E+045.08E+064.74E-021.48E+027.57E+041.12E+07 + 48M3 25.005.18E-022.31E+012.89E+031.91E+051.13E-021.42E+013.57E+033.18E+05 + 48M3 40.001.06E-022.18E+001.65E+027.22E+032.70E-031.39E+001.81E+021.00E+04 + 48M3 52.004.30E-035.87E-013.35E+011.16E+031.22E-033.82E-013.54E+011.52E+03 + 48M3 70.001.52E-031.33E-015.53E+001.47E+024.94E-048.91E-025.75E+001.85E+02 + 48M3 103.003.88E-041.95E-025.39E-011.01E+011.54E-041.37E-025.70E-011.29E+01 + 48M3 150.001.03E-043.06E-035.70E-027.59E-014.97E-052.28E-036.37E-021.04E+00 + 48M3 280.001.21E-051.54E-041.49E-031.14E-027.92E-061.27E-041.93E-031.90E-02 + 48M3 500.001.94E-061.16E-056.12E-052.86E-041.56E-061.01E-058.89E-055.81E-04 + 48M4 1.411.56E+026.27E+055.87E+101.17E+151.19E+013.04E+054.82E+097.53E+12 + 48M4 2.412.62E+014.01E+041.35E+091.11E+132.03E+002.05E+041.33E+081.36E+11 + 48M4 4.412.99E+001.81E+031.89E+076.19E+102.64E-019.75E+022.47E+061.50E+09 + 48M4 8.412.49E-016.44E+011.96E+052.60E+082.80E-023.71E+013.76E+041.27E+07 + 48M4 15.412.10E-022.68E+002.69E+031.63E+063.20E-031.71E+007.85E+021.50E+05 + 48M4 25.002.68E-032.03E-018.81E+012.95E+045.41E-041.46E-013.69E+014.47E+03 + 48M4 40.003.43E-041.61E-023.23E+006.22E+029.28E-051.34E-021.95E+001.51E+02 + 48M4 52.001.07E-043.87E-035.17E-017.34E+013.42E-053.53E-033.81E-012.30E+01 + 48M4 70.002.82E-057.71E-046.55E-026.64E+001.09E-057.80E-046.08E-022.77E+00 + 48M4 103.004.95E-069.54E-054.60E-033.03E-012.45E-061.10E-045.69E-031.81E-01 + 48M4 150.009.22E-071.28E-053.63E-041.58E-025.65E-071.66E-055.83E-041.33E-02 + 48M4 280.006.34E-085.05E-076.26E-061.38E-044.98E-087.45E-071.43E-051.91E-04 + 48M4 500.005.71E-092.98E-081.87E-072.16E-065.39E-094.48E-085.08E-074.38E-06 + 48M5 1.402.30E+028.53E+059.24E+101.76E+157.39E+003.67E+042.31E+102.00E+15 + 48M5 2.403.82E+015.37E+042.09E+091.62E+131.27E+002.51E+035.36E+081.64E+13 + 48M5 4.404.28E+002.39E+032.89E+078.86E+101.68E-011.23E+027.78E+067.64E+10 + 48M5 8.403.51E-018.38E+012.95E+053.63E+081.85E-024.94E+008.52E+042.63E+08 + 48M5 15.402.92E-023.42E+003.98E+032.22E+062.20E-032.46E-011.24E+031.39E+06 + 48M5 25.003.68E-032.53E-011.27E+023.88E+043.85E-042.26E-024.27E+012.27E+04 + 48M5 40.004.65E-041.95E-024.52E+007.83E+026.86E-052.24E-031.64E+004.47E+02 + 48M5 52.001.44E-044.62E-037.05E-018.95E+012.59E-056.23E-042.68E-015.16E+01 + 48M5 70.003.81E-058.97E-048.63E-027.73E+008.51E-061.47E-043.47E-024.60E+00 + 48M5 103.006.78E-061.07E-045.73E-033.27E-011.99E-062.27E-052.50E-032.09E-01 + 48M5 150.001.29E-061.38E-054.20E-041.54E-024.89E-073.81E-062.00E-041.09E-02 + 48M5 280.009.05E-085.17E-076.17E-061.07E-044.97E-082.18E-073.43E-069.26E-05 + 48M5 500.009.31E-093.26E-081.62E-071.31E-066.75E-091.85E-081.04E-071.34E-06 + 48N+ 50.004.87E-032.49E-011.44E+015.64E+021.50E-025.35E-011.95E+016.82E+02 + 48N+ 70.001.87E-035.36E-021.96E+005.44E+015.63E-031.28E-012.99E+006.95E+01 + 48N+ 100.006.76E-041.13E-022.50E-014.78E+002.03E-032.99E-024.48E-016.90E+00 + 48N+ 150.002.13E-042.12E-032.67E-023.29E-016.50E-046.18E-035.85E-025.78E-01 + 48N+ 200.009.46E-056.88E-045.95E-035.34E-022.96E-042.13E-031.50E-021.10E-01 + 48N+ 500.008.60E-062.95E-051.00E-043.54E-042.79E-059.94E-053.25E-041.07E-03 + 49K 28.944.53E+001.85E+011.56E+016.27E+001.64E+014.69E+022.23E+032.56E+03 + 49K 29.644.24E+001.92E+012.50E+012.01E+011.53E+014.26E+022.24E+033.95E+03 + 49K 30.943.79E+002.00E+014.13E+016.39E+011.34E+013.61E+022.19E+036.13E+03 + 49K 34.142.93E+001.94E+016.92E+012.13E+021.01E+012.48E+021.87E+038.92E+03 + 49K 37.942.21E+001.69E+018.11E+013.52E+027.37E+001.65E+021.42E+039.02E+03 + 49K 42.001.69E+001.40E+017.89E+014.13E+025.47E+001.12E+021.03E+037.63E+03 + 49K 48.001.17E+001.03E+016.54E+013.92E+023.70E+006.73E+016.45E+025.30E+03 + 49K 56.007.70E-016.88E+004.64E+012.98E+022.36E+003.75E+013.58E+023.08E+03 + 49K 68.004.49E-013.91E+002.66E+011.74E+021.34E+001.80E+011.65E+021.40E+03 + 49K 81.002.75E-012.27E+001.50E+019.51E+018.11E-019.39E+007.98E+016.47E+02 + 49K 98.001.60E-011.23E+007.63E+004.55E+014.72E-014.65E+003.59E+012.69E+02 + 49K 111.001.13E-018.13E-014.80E+002.73E+013.32E-012.96E+002.13E+011.50E+02 + 49K 128.007.52E-025.04E-012.79E+001.49E+012.23E-011.77E+001.17E+017.60E+01 + 49K 151.004.71E-022.88E-011.47E+007.22E+001.41E-019.88E-015.89E+003.46E+01 + 49K 180.002.87E-021.58E-017.38E-013.31E+008.77E-025.37E-012.86E+001.50E+01 + 49K 245.001.22E-025.59E-022.21E-018.40E-013.86E-021.90E-018.29E-013.58E+00 + 49K 330.005.53E-032.12E-027.13E-022.32E-011.79E-027.29E-022.63E-019.40E-01 + 49K 420.003.00E-031.00E-022.99E-028.61E-029.77E-033.46E-021.08E-013.34E-01 + 49K 530.001.72E-035.12E-031.36E-023.52E-025.53E-031.74E-024.80E-021.29E-01 + 49K 760.007.76E-042.00E-034.56E-031.01E-022.36E-036.33E-031.47E-023.28E-02 + 49K 1050.004.10E-049.46E-041.93E-033.76E-031.14E-032.71E-035.52E-031.07E-02 + 49K 1300.002.79E-046.02E-041.15E-032.09E-037.13E-041.59E-033.01E-035.42E-03 + 49K 1550.002.06E-044.25E-047.74E-041.34E-034.90E-041.04E-031.87E-033.19E-03 + 49L1 5.241.39E+014.36E+035.49E+051.44E+073.11E+022.59E+053.62E+071.28E+09 + 49L1 5.941.12E+012.13E+033.75E+051.63E+072.14E+021.43E+051.80E+078.01E+08 + 49L1 7.247.82E+006.30E+021.61E+051.05E+071.19E+025.57E+046.00E+063.08E+08 + 49L1 10.443.81E+004.19E+012.26E+042.00E+063.97E+011.00E+047.89E+054.04E+07 + 49L1 14.241.97E+002.23E+003.15E+033.22E+051.57E+012.41E+031.44E+056.48E+06 + 49L1 18.001.17E+002.13E+005.79E+026.80E+047.81E+008.35E+024.03E+041.58E+06 + 49L1 24.005.96E-012.71E+005.36E+018.33E+033.32E+002.33E+028.65E+032.79E+05 + 49L1 32.002.96E-012.00E+007.17E+008.20E+021.42E+006.66E+011.90E+034.93E+04 + 49L1 44.001.32E-011.05E+004.47E+006.30E+015.55E-011.72E+013.68E+027.38E+03 + 49L1 57.006.75E-025.45E-012.86E+001.73E+012.61E-015.91E+009.96E+011.61E+03 + 49L1 74.003.37E-022.60E-011.46E+007.90E+001.22E-012.06E+002.75E+013.57E+02 + 49L1 87.002.18E-021.60E-018.96E-014.77E+007.71E-021.09E+001.25E+011.42E+02 + 49L1 104.001.34E-029.20E-024.98E-012.58E+004.65E-025.44E-015.37E+005.23E+01 + 49L1 127.007.74E-034.86E-022.48E-011.22E+002.65E-022.55E-012.12E+001.75E+01 + 49L1 155.004.48E-032.55E-021.21E-015.53E-011.53E-021.22E-018.60E-016.00E+00 + 49L1 220.001.73E-038.12E-033.29E-021.30E-015.94E-033.52E-021.87E-019.86E-01 + 49L1 305.007.28E-042.86E-039.92E-033.37E-022.52E-031.17E-024.87E-022.01E-01 + 49L1 390.003.91E-041.35E-034.16E-031.26E-021.35E-035.32E-031.87E-026.49E-02 + 49L1 500.002.15E-046.57E-041.81E-034.89E-037.31E-042.49E-037.49E-032.21E-02 + 49L1 730.009.30E-052.44E-045.76E-041.32E-032.96E-048.35E-042.05E-034.87E-03 + 49L11000.004.96E-051.17E-042.47E-045.00E-041.44E-043.58E-047.64E-041.56E-03 + 49L11500.002.41E-055.06E-059.44E-051.67E-045.96E-051.30E-042.40E-044.21E-04 + 49L2 4.942.84E+012.82E+051.60E+081.21E+103.45E+011.10E+046.29E+051.53E+07 + 49L2 5.641.95E+011.45E+057.31E+076.85E+092.30E+016.56E+034.63E+051.79E+07 + 49L2 6.941.07E+015.10E+042.13E+072.28E+091.22E+012.88E+032.32E+051.25E+07 + 49L2 10.143.42E+007.60E+032.23E+062.33E+083.79E+006.36E+025.03E+043.06E+06 + 49L2 13.941.27E+001.55E+033.35E+053.04E+071.42E+001.78E+021.23E+046.89E+05 + 49L2 18.005.59E-014.33E+027.30E+045.70E+066.49E-016.39E+013.80E+031.88E+05 + 49L2 24.002.18E-011.04E+021.32E+048.44E+052.68E-012.02E+019.86E+024.10E+04 + 49L2 32.008.34E-022.52E+012.40E+031.23E+051.11E-016.39E+002.52E+028.56E+03 + 49L2 44.002.82E-025.30E+003.68E+021.46E+044.18E-021.79E+005.48E+011.47E+03 + 49L2 57.001.16E-021.51E+008.10E+012.59E+031.89E-026.39E-011.58E+013.45E+02 + 49L2 74.004.68E-034.28E-011.78E+014.57E+028.54E-032.27E-014.54E+008.01E+01 + 49L2 87.002.66E-031.98E-017.02E+001.57E+025.21E-031.20E-012.09E+003.24E+01 + 49L2 104.001.42E-038.48E-022.53E+004.85E+013.03E-035.94E-028.95E-011.20E+01 + 49L2 127.007.09E-043.32E-028.19E-011.33E+011.65E-032.72E-023.48E-013.96E+00 + 49L2 155.003.55E-041.32E-022.70E-013.69E+009.04E-041.26E-021.37E-011.33E+00 + 49L2 220.001.07E-042.68E-034.00E-024.10E-013.15E-043.29E-032.71E-022.00E-01 + 49L2 305.003.60E-056.38E-047.16E-035.68E-021.19E-049.66E-046.24E-033.61E-02 + 49L2 390.001.62E-052.24E-042.06E-031.36E-025.76E-053.92E-042.12E-031.03E-02 + 49L2 500.007.40E-068.12E-056.12E-043.38E-032.78E-051.61E-047.38E-043.05E-03 + 49L2 730.002.41E-061.87E-051.07E-044.62E-049.33E-064.30E-051.57E-045.18E-04 + 49L21000.009.65E-076.00E-062.78E-059.98E-053.82E-061.50E-054.65E-051.30E-04 + 49L21500.003.42E-071.55E-065.64E-061.65E-051.24E-064.08E-061.06E-052.48E-05 + 49L3 4.735.84E+015.89E+053.60E+082.91E+101.06E+013.16E+051.17E+094.37E+11 + 49L3 5.433.92E+012.93E+051.57E+081.56E+106.94E+001.59E+054.60E+081.51E+11 + 49L3 6.732.07E+019.87E+044.32E+074.80E+093.58E+005.45E+041.08E+082.91E+10 + 49L3 9.936.28E+001.37E+044.11E+064.38E+081.08E+007.83E+037.93E+061.50E+09 + 49L3 13.732.24E+002.66E+035.77E+055.30E+073.99E-011.56E+039.29E+051.30E+08 + 49L3 18.009.23E-016.77E+021.12E+058.66E+061.73E-014.05E+021.58E+051.71E+07 + 49L3 24.003.52E-011.58E+021.95E+041.23E+067.17E-029.69E+012.47E+042.04E+06 + 49L3 32.001.32E-013.71E+013.41E+031.72E+052.97E-022.33E+013.95E+032.50E+05 + 49L3 44.004.36E-027.48E+004.94E+021.91E+041.12E-024.82E+005.37E+022.53E+04 + 49L3 57.001.75E-022.04E+001.03E+023.20E+035.08E-031.35E+001.09E+024.04E+03 + 49L3 74.006.93E-035.52E-012.13E+015.25E+022.29E-033.77E-012.23E+016.54E+02 + 49L3 87.003.89E-032.46E-018.02E+001.72E+021.40E-031.72E-018.44E+002.15E+02 + 49L3 104.002.06E-031.01E-012.74E+005.00E+018.16E-047.25E-022.93E+006.37E+01 + 49L3 127.001.01E-033.78E-028.29E-011.27E+014.46E-042.78E-029.10E-011.67E+01 + 49L3 155.005.00E-041.42E-022.53E-013.24E+002.45E-041.08E-022.88E-014.46E+00 + 49L3 220.001.48E-042.62E-033.23E-023.03E-018.67E-052.10E-033.99E-024.66E-01 + 49L3 305.004.93E-055.64E-044.94E-033.48E-023.35E-054.75E-046.63E-036.05E-02 + 49L3 390.002.23E-051.85E-041.25E-037.17E-031.67E-051.60E-041.78E-031.36E-02 + 49L3 500.001.04E-056.27E-053.30E-041.54E-038.39E-065.52E-054.87E-043.16E-03 + 49L3 730.003.51E-061.36E-054.93E-051.70E-043.10E-061.20E-057.29E-053.73E-04 + 49L31000.001.56E-064.30E-061.18E-053.24E-051.44E-063.77E-061.63E-056.85E-05 + 49L31500.005.98E-071.18E-062.34E-064.92E-065.84E-071.03E-062.77E-068.80E-06 + 49M1 1.831.54E+015.06E+042.05E+062.77E+091.41E+039.57E+061.06E+102.96E+12 + 49M1 2.838.53E+007.92E+031.19E+063.75E+073.81E+021.12E+066.46E+081.42E+11 + 49M1 4.833.43E+005.87E+021.79E+051.34E+077.66E+018.34E+042.30E+073.45E+09 + 49M1 8.831.05E+001.41E+018.90E+039.67E+051.26E+014.69E+036.07E+055.57E+07 + 49M1 15.832.94E-016.02E-012.38E+022.97E+042.20E+003.13E+022.08E+041.15E+06 + 49M1 25.001.01E-015.70E-017.76E+001.19E+035.66E-014.02E+011.64E+035.99E+04 + 49M1 40.003.15E-022.48E-011.09E+003.17E+011.41E-015.23E+001.33E+023.16E+03 + 49M1 52.001.61E-021.30E-016.75E-016.09E+006.55E-021.74E+003.40E+016.37E+02 + 49M1 70.007.34E-035.71E-023.21E-011.91E+002.77E-025.14E-017.57E+001.09E+02 + 49M1 103.002.58E-031.77E-029.58E-025.08E-019.18E-031.12E-011.15E+001.17E+01 + 49M1 150.009.26E-045.33E-032.54E-021.19E-013.22E-032.71E-022.00E-011.47E+00 + 49M1 280.001.73E-047.09E-042.56E-039.09E-036.05E-043.02E-031.36E-026.04E-02 + 49M1 500.004.09E-051.25E-043.47E-049.38E-041.40E-044.81E-041.46E-034.34E-03 + 49M2 1.703.63E+011.13E+073.93E+101.81E+131.67E+023.27E+051.13E+081.80E+10 + 49M2 2.701.51E+011.11E+061.99E+097.23E+114.13E+014.14E+041.13E+071.90E+09 + 49M2 4.704.20E+006.90E+045.97E+071.51E+107.69E+003.74E+037.13E+059.95E+07 + 49M2 8.708.24E-013.17E+031.32E+062.11E+081.18E+002.78E+023.37E+043.29E+06 + 49M2 15.701.46E-011.68E+023.61E+043.61E+061.96E-012.43E+011.84E+031.18E+05 + 49M2 25.003.42E-021.69E+012.20E+031.49E+054.75E-023.65E+001.89E+028.39E+03 + 49M2 40.007.36E-031.69E+001.35E+026.08E+031.13E-025.49E-011.90E+015.76E+02 + 49M2 52.003.05E-034.74E-012.89E+011.03E+035.10E-031.92E-015.31E+001.29E+02 + 49M2 70.001.11E-031.13E-015.10E+001.41E+022.06E-035.88E-021.26E+002.39E+01 + 49M2 103.002.93E-041.81E-025.55E-011.09E+016.39E-041.28E-021.97E-012.71E+00 + 49M2 150.008.01E-053.13E-036.71E-029.54E-012.05E-042.96E-033.34E-023.36E-01 + 49M2 280.009.72E-061.90E-042.32E-031.97E-023.17E-052.75E-041.90E-031.18E-02 + 49M2 500.001.52E-061.68E-051.27E-047.05E-045.75E-063.33E-051.53E-046.36E-04 + 49M3 1.667.77E+012.21E+077.87E+103.63E+134.87E+011.23E+073.66E+111.06E+15 + 49M3 2.663.01E+012.06E+063.72E+091.34E+121.16E+011.17E+061.41E+101.99E+13 + 49M3 4.667.91E+001.22E+051.05E+082.62E+102.11E+007.15E+043.03E+081.94E+11 + 49M3 8.661.47E+005.37E+032.19E+063.44E+083.19E-013.25E+034.56E+061.33E+09 + 49M3 15.662.49E-012.71E+025.66E+045.53E+065.23E-021.70E+028.89E+041.31E+07 + 49M3 25.005.57E-022.58E+013.23E+032.13E+051.26E-021.66E+014.25E+033.80E+05 + 49M3 40.001.15E-022.44E+001.85E+028.05E+033.01E-031.62E+002.15E+021.19E+04 + 49M3 52.004.68E-036.57E-013.75E+011.30E+031.36E-034.45E-014.19E+011.79E+03 + 49M3 70.001.66E-031.49E-016.20E+001.64E+025.51E-041.04E-016.78E+002.19E+02 + 49M3 103.004.26E-042.19E-026.05E-011.13E+011.71E-041.59E-026.69E-011.51E+01 + 49M3 150.001.14E-043.44E-036.40E-028.50E-015.55E-052.64E-037.45E-021.21E+00 + 49M3 280.001.35E-051.74E-041.68E-031.28E-028.85E-061.46E-042.24E-032.21E-02 + 49M3 500.002.15E-061.30E-056.89E-053.22E-041.74E-061.15E-051.03E-046.74E-04 + 49M4 1.451.53E+026.15E+055.69E+101.12E+151.23E+013.14E+054.90E+097.41E+12 + 49M4 2.452.70E+014.17E+041.42E+091.17E+132.19E+002.25E+041.46E+081.46E+11 + 49M4 4.453.19E+001.96E+032.10E+076.93E+102.93E-011.11E+032.84E+061.69E+09 + 49M4 8.452.74E-017.16E+012.24E+053.01E+083.17E-024.32E+014.42E+041.48E+07 + 49M4 15.452.36E-023.03E+003.13E+031.92E+063.68E-032.02E+009.33E+021.78E+05 + 49M4 25.003.07E-032.34E-011.05E+023.55E+046.30E-041.75E-014.46E+015.38E+03 + 49M4 40.003.94E-041.87E-023.84E+007.47E+021.08E-041.60E-022.35E+001.81E+02 + 49M4 52.001.23E-044.51E-036.14E-018.82E+014.01E-054.23E-034.60E-012.77E+01 + 49M4 70.003.27E-059.02E-047.79E-027.99E+001.28E-059.35E-047.33E-023.34E+00 + 49M4 103.005.84E-061.12E-045.48E-033.65E-012.88E-061.32E-046.87E-032.19E-01 + 49M4 150.001.12E-061.51E-054.33E-041.91E-026.68E-072.00E-057.04E-041.60E-02 + 49M4 280.007.72E-086.02E-077.48E-061.66E-045.90E-088.97E-071.73E-052.32E-04 + 49M4 500.005.92E-093.59E-082.24E-072.61E-066.39E-095.40E-086.17E-075.33E-06 + 49M5 1.442.27E+028.33E+058.99E+101.69E+157.64E+003.75E+042.35E+102.00E+15 + 49M5 2.443.93E+015.56E+042.20E+091.71E+131.36E+002.71E+035.92E+081.82E+13 + 49M5 4.444.58E+002.58E+033.21E+079.93E+101.86E-011.38E+029.04E+069.04E+10 + 49M5 8.443.86E-019.26E+013.39E+054.21E+082.08E-025.65E+001.02E+053.21E+08 + 49M5 15.443.27E-023.85E+004.64E+032.61E+062.51E-032.84E-011.51E+031.72E+06 + 49M5 25.004.20E-032.91E-011.51E+024.65E+044.45E-042.64E-025.27E+012.86E+04 + 49M5 40.005.35E-042.25E-025.38E+009.38E+027.96E-052.63E-032.02E+005.61E+02 + 49M5 52.001.66E-045.34E-038.38E-011.07E+023.01E-057.30E-043.30E-016.46E+01 + 49M5 70.004.40E-051.04E-031.03E-019.27E+009.92E-061.72E-044.27E-025.74E+00 + 49M5 103.007.77E-061.25E-046.82E-033.92E-012.33E-062.67E-053.07E-032.60E-01 + 49M5 150.001.46E-061.61E-055.00E-041.85E-025.73E-074.49E-062.44E-041.35E-02 + 49M5 280.001.04E-076.04E-077.35E-061.28E-045.84E-082.57E-074.17E-061.14E-04 + 49M5 500.001.25E-083.69E-081.95E-071.56E-067.93E-092.18E-081.25E-071.63E-06 + 49N+ 50.005.39E-032.95E-011.73E+016.82E+021.76E-026.39E-012.39E+018.51E+02 + 49N+ 70.002.08E-036.29E-022.35E+006.57E+016.59E-031.53E-013.63E+008.59E+01 + 49N+ 100.007.51E-041.31E-022.99E-015.77E+002.37E-033.54E-025.39E-018.42E+00 + 49N+ 150.002.37E-042.42E-033.15E-023.94E-017.58E-047.27E-036.98E-026.98E-01 + 49N+ 200.001.05E-047.82E-046.98E-036.37E-023.45E-042.50E-031.78E-021.32E-01 + 49N+ 500.009.62E-063.32E-051.15E-044.11E-043.22E-051.15E-043.79E-041.26E-03 + 50K 30.204.15E+001.62E+011.28E+014.74E+001.60E+014.35E+021.97E+032.14E+03 + 50K 30.903.90E+001.68E+012.03E+011.50E+011.49E+013.96E+021.98E+033.27E+03 + 50K 32.203.50E+001.74E+013.35E+014.76E+011.32E+013.38E+021.95E+035.07E+03 + 50K 35.402.73E+001.70E+015.66E+011.61E+029.97E+002.36E+021.68E+037.49E+03 + 50K 39.202.09E+001.51E+016.74E+012.73E+027.39E+001.60E+021.30E+037.73E+03 + 50K 43.001.63E+001.28E+016.70E+013.26E+025.63E+001.12E+029.76E+026.76E+03 + 50K 49.001.15E+009.54E+005.71E+013.22E+023.84E+006.81E+016.22E+024.84E+03 + 50K 57.007.58E-016.46E+004.15E+012.53E+022.47E+003.84E+013.52E+022.90E+03 + 50K 69.004.46E-013.74E+002.44E+011.53E+021.42E+001.87E+011.65E+021.35E+03 + 50K 82.002.75E-012.20E+001.40E+018.59E+018.63E-019.82E+008.12E+016.38E+02 + 50K 99.001.62E-011.21E+007.27E+004.21E+015.04E-014.91E+003.70E+012.70E+02 + 50K 112.001.14E-018.04E-014.62E+002.56E+013.56E-013.13E+002.21E+011.52E+02 + 50K 129.007.67E-025.02E-012.71E+001.41E+012.40E-011.88E+001.23E+017.79E+01 + 50K 152.004.83E-022.89E-011.44E+006.96E+001.52E-011.05E+006.19E+003.58E+01 + 50K 180.003.00E-021.63E-017.49E-013.31E+009.62E-025.87E-013.09E+001.61E+01 + 50K 245.001.28E-025.79E-022.26E-018.53E-014.23E-022.08E-018.99E-013.85E+00 + 50K 330.005.81E-032.20E-027.37E-022.38E-011.95E-027.94E-022.86E-011.01E+00 + 50K 420.003.16E-031.05E-023.11E-028.91E-021.06E-023.77E-021.18E-013.61E-01 + 50K 530.001.81E-035.38E-031.43E-023.67E-026.02E-031.89E-025.20E-021.40E-01 + 50K 760.008.21E-042.11E-034.82E-031.06E-022.56E-036.87E-031.59E-023.55E-02 + 50K 1050.004.34E-041.00E-032.05E-033.99E-031.23E-032.94E-035.98E-031.16E-02 + 50K 1300.002.95E-046.40E-041.23E-032.23E-037.69E-041.72E-033.26E-035.87E-03 + 50K 1550.002.19E-044.51E-048.25E-041.42E-035.28E-041.13E-032.03E-033.45E-03 + 50L1 5.461.28E+013.92E+034.63E+051.12E+073.05E+022.42E+053.23E+071.08E+09 + 50L1 6.161.04E+011.98E+033.25E+051.31E+072.13E+021.36E+051.65E+076.93E+08 + 50L1 7.467.37E+006.16E+021.46E+058.85E+061.20E+025.50E+045.71E+062.78E+08 + 50L1 10.663.67E+004.67E+012.21E+041.84E+064.14E+011.03E+047.91E+053.90E+07 + 50L1 14.461.93E+002.73E+003.30E+033.16E+051.67E+012.55E+031.49E+056.50E+06 + 50L1 18.001.19E+001.73E+007.09E+027.62E+048.69E+009.46E+024.54E+041.75E+06 + 50L1 24.006.09E-012.38E+007.16E+019.78E+033.69E+002.63E+029.72E+033.10E+05 + 50L1 32.003.04E-011.87E+008.11E+001.02E+031.58E+007.50E+012.13E+035.48E+04 + 50L1 44.001.37E-011.02E+004.03E+007.83E+016.17E-011.94E+014.12E+028.20E+03 + 50L1 57.006.99E-025.38E-012.66E+001.79E+012.90E-016.61E+001.11E+021.79E+03 + 50L1 74.003.50E-022.61E-011.40E+007.57E+001.36E-012.30E+003.06E+013.95E+02 + 50L1 87.002.26E-021.61E-018.71E-014.58E+008.55E-021.21E+001.40E+011.57E+02 + 50L1 104.001.40E-029.33E-024.91E-012.50E+005.15E-026.06E-015.97E+005.79E+01 + 50L1 127.008.09E-034.97E-022.48E-011.20E+002.94E-022.84E-012.35E+001.93E+01 + 50L1 155.004.70E-032.62E-021.22E-015.52E-011.69E-021.36E-019.52E-016.63E+00 + 50L1 220.001.82E-038.42E-033.37E-021.32E-016.56E-033.90E-022.06E-011.09E+00 + 50L1 305.007.68E-042.99E-031.03E-023.48E-022.78E-031.29E-025.37E-022.21E-01 + 50L1 390.004.13E-041.41E-034.35E-031.31E-021.49E-035.86E-032.06E-027.13E-02 + 50L1 500.002.28E-046.94E-041.91E-035.15E-038.02E-042.73E-038.22E-032.42E-02 + 50L1 730.009.89E-052.59E-046.12E-041.40E-033.24E-049.16E-042.25E-035.33E-03 + 50L11000.005.29E-051.25E-042.64E-045.35E-041.57E-043.92E-048.37E-041.71E-03 + 50L11500.002.57E-055.41E-051.01E-041.79E-046.47E-051.42E-042.62E-044.59E-04 + 50L2 5.162.62E+012.52E+051.36E+089.69E+093.38E+011.03E+045.50E+051.23E+07 + 50L2 5.861.83E+011.33E+056.42E+075.67E+092.29E+016.24E+034.14E+051.48E+07 + 50L2 7.161.03E+014.84E+041.96E+071.98E+091.24E+012.82E+032.15E+051.08E+07 + 50L2 10.363.39E+007.58E+032.17E+062.18E+083.98E+006.48E+024.92E+042.85E+06 + 50L2 14.161.28E+001.59E+033.38E+052.98E+071.52E+001.86E+021.24E+046.72E+05 + 50L2 18.005.96E-014.81E+028.08E+046.20E+067.28E-017.11E+014.15E+032.01E+05 + 50L2 24.002.34E-011.16E+021.47E+049.24E+053.01E-012.25E+011.08E+034.43E+04 + 50L2 32.008.98E-022.80E+012.67E+031.36E+051.25E-017.13E+002.78E+029.32E+03 + 50L2 44.003.06E-025.90E+004.10E+021.62E+044.71E-022.00E+006.07E+011.61E+03 + 50L2 57.001.26E-021.68E+009.03E+012.87E+032.13E-027.15E-011.76E+013.80E+02 + 50L2 74.005.09E-034.78E-011.99E+015.07E+029.63E-032.54E-015.05E+008.86E+01 + 50L2 87.002.90E-032.21E-017.84E+001.74E+025.89E-031.34E-012.34E+003.59E+01 + 50L2 104.001.56E-039.48E-022.83E+005.41E+013.42E-036.68E-021.00E+001.33E+01 + 50L2 127.007.79E-043.71E-029.18E-011.48E+011.87E-033.06E-023.90E-014.41E+00 + 50L2 155.003.91E-041.47E-023.03E-014.13E+001.02E-031.42E-021.53E-011.48E+00 + 50L2 220.001.18E-043.01E-034.50E-024.60E-013.58E-043.72E-033.05E-022.25E-01 + 50L2 305.003.99E-057.17E-048.07E-036.39E-021.35E-041.09E-037.04E-034.06E-02 + 50L2 390.001.80E-052.53E-042.32E-031.53E-026.56E-054.45E-042.40E-031.17E-02 + 50L2 500.008.28E-069.16E-056.92E-043.82E-033.17E-051.82E-048.36E-043.44E-03 + 50L2 730.002.68E-062.12E-051.21E-045.24E-041.07E-054.90E-051.79E-045.87E-04 + 50L21000.001.09E-066.79E-063.16E-051.13E-044.36E-061.71E-055.30E-051.48E-04 + 50L21500.003.77E-071.76E-066.42E-061.88E-051.41E-064.67E-061.21E-052.83E-05 + 50L3 4.935.40E+015.27E+053.08E+082.35E+101.03E+012.96E+051.05E+093.76E+11 + 50L3 5.633.68E+012.69E+051.39E+081.30E+106.82E+001.53E+054.28E+081.36E+11 + 50L3 6.931.99E+019.39E+043.98E+074.20E+093.60E+005.42E+041.05E+082.75E+10 + 50L3 10.136.21E+001.37E+044.01E+064.12E+081.12E+008.16E+038.21E+061.52E+09 + 50L3 13.932.26E+002.73E+035.82E+055.19E+074.19E-011.67E+039.95E+051.37E+08 + 50L3 18.009.79E-017.47E+021.23E+059.38E+061.90E-014.66E+021.86E+052.00E+07 + 50L3 24.003.76E-011.75E+022.15E+041.34E+067.87E-021.12E+022.89E+042.38E+06 + 50L3 32.001.41E-014.10E+013.76E+031.87E+053.26E-022.68E+014.61E+032.91E+05 + 50L3 44.004.68E-028.26E+005.45E+022.09E+041.23E-025.54E+006.25E+022.94E+04 + 50L3 57.001.89E-022.25E+001.14E+023.51E+035.58E-031.55E+001.26E+024.68E+03 + 50L3 74.007.48E-036.10E-012.35E+015.77E+022.52E-034.32E-012.58E+017.56E+02 + 50L3 87.004.21E-032.72E-018.87E+001.89E+021.54E-031.97E-019.76E+002.48E+02 + 50L3 104.002.23E-031.12E-013.03E+005.51E+018.97E-048.30E-023.38E+007.35E+01 + 50L3 127.001.10E-034.18E-029.17E-011.39E+014.91E-043.18E-021.05E+001.92E+01 + 50L3 155.005.43E-041.57E-022.80E-013.57E+002.70E-041.23E-023.32E-015.13E+00 + 50L3 220.001.62E-042.90E-033.58E-023.35E-019.55E-052.39E-034.57E-025.34E-01 + 50L3 305.005.41E-056.24E-045.48E-033.85E-023.69E-055.38E-047.58E-036.93E-02 + 50L3 390.002.45E-052.05E-041.39E-037.94E-031.83E-051.81E-042.03E-031.56E-02 + 50L3 500.001.14E-056.95E-053.67E-041.70E-039.24E-066.23E-055.55E-043.61E-03 + 50L3 730.003.85E-061.50E-055.47E-051.89E-043.41E-061.34E-058.28E-054.24E-04 + 50L31000.001.69E-064.75E-061.30E-053.59E-051.58E-064.20E-061.84E-057.79E-05 + 50L31500.006.68E-071.30E-062.60E-065.45E-066.41E-071.14E-063.11E-069.95E-06 + 50M1 1.881.45E+014.82E+041.97E+062.48E+091.44E+039.53E+061.03E+102.78E+12 + 50M1 2.888.23E+007.95E+031.11E+063.94E+074.02E+021.18E+066.72E+081.44E+11 + 50M1 4.883.38E+006.32E+021.79E+051.24E+078.30E+019.11E+042.50E+073.70E+09 + 50M1 8.881.05E+001.74E+019.56E+039.85E+051.39E+015.24E+036.79E+056.16E+07 + 50M1 15.882.99E-015.51E-012.80E+023.25E+042.45E+003.53E+022.35E+041.29E+06 + 50M1 25.001.04E-015.25E-011.02E+011.42E+036.35E-014.59E+011.88E+036.83E+04 + 50M1 40.003.28E-022.42E-011.05E+004.01E+011.58E-015.94E+001.51E+023.58E+03 + 50M1 52.001.68E-021.29E-016.35E-016.99E+007.35E-021.97E+003.85E+017.20E+02 + 50M1 70.007.68E-035.76E-023.10E-011.92E+003.10E-025.80E-018.54E+001.22E+02 + 50M1 103.002.72E-031.81E-029.53E-025.02E-011.03E-021.26E-011.29E+001.32E+01 + 50M1 150.009.79E-045.51E-032.58E-021.20E-013.60E-033.03E-022.24E-011.65E+00 + 50M1 280.001.84E-047.46E-042.67E-039.45E-036.74E-043.37E-031.51E-026.72E-02 + 50M1 500.004.37E-051.33E-043.68E-049.97E-041.55E-045.34E-041.62E-034.81E-03 + 50M2 1.763.44E+011.08E+073.67E+101.63E+131.72E+023.27E+051.09E+081.63E+10 + 50M2 2.761.47E+011.13E+061.99E+097.04E+114.39E+014.34E+041.15E+071.85E+09 + 50M2 4.764.23E+007.31E+046.30E+071.56E+108.40E+004.05E+037.55E+051.02E+08 + 50M2 8.768.53E-013.45E+031.43E+062.26E+081.31E+003.06E+023.66E+043.50E+06 + 50M2 15.761.55E-011.86E+023.98E+043.94E+062.20E-012.71E+012.03E+031.28E+05 + 50M2 25.003.69E-021.90E+012.48E+031.67E+055.40E-024.13E+002.12E+029.33E+03 + 50M2 40.008.01E-031.90E+001.52E+026.82E+031.29E-026.22E-012.14E+016.43E+02 + 50M2 52.003.33E-035.34E-013.25E+011.16E+035.81E-032.18E-015.98E+001.45E+02 + 50M2 70.001.22E-031.28E-015.77E+001.58E+022.35E-036.67E-021.42E+002.68E+01 + 50M2 103.003.24E-042.04E-026.28E-011.23E+017.31E-041.46E-022.24E-013.05E+00 + 50M2 150.008.92E-053.55E-037.61E-021.08E+002.35E-043.37E-033.79E-023.80E-01 + 50M2 280.001.09E-052.16E-042.64E-032.25E-023.64E-053.15E-042.17E-031.34E-02 + 50M2 500.001.71E-061.91E-051.45E-048.07E-046.63E-063.83E-051.76E-047.27E-04 + 50M3 1.717.40E+012.12E+077.39E+103.29E+134.93E+011.24E+073.61E+111.03E+15 + 50M3 2.712.96E+012.09E+063.74E+091.31E+121.22E+011.25E+061.50E+102.11E+13 + 50M3 4.717.99E+001.29E+051.11E+082.70E+102.26E+007.91E+043.39E+082.18E+11 + 50M3 8.711.52E+005.82E+032.37E+063.67E+083.47E-013.68E+035.26E+061.54E+09 + 50M3 15.712.62E-012.98E+026.21E+046.00E+065.74E-021.95E+021.04E+051.54E+07 + 50M3 25.005.98E-022.88E+013.61E+032.36E+051.39E-021.94E+015.05E+034.53E+05 + 50M3 40.001.25E-022.73E+002.06E+028.94E+033.34E-031.89E+002.54E+021.41E+04 + 50M3 52.005.09E-037.34E-014.19E+011.44E+031.51E-035.18E-014.94E+012.12E+03 + 50M3 70.001.81E-031.66E-016.94E+001.82E+026.12E-041.21E-017.96E+002.57E+02 + 50M3 103.004.66E-042.45E-026.77E-011.26E+011.91E-041.85E-027.83E-011.77E+01 + 50M3 150.001.25E-043.85E-037.18E-029.50E-016.18E-053.06E-038.69E-021.41E+00 + 50M3 280.001.49E-051.95E-041.88E-031.43E-029.86E-061.68E-042.60E-032.56E-02 + 50M3 500.002.37E-061.46E-057.75E-053.61E-041.94E-061.32E-051.19E-047.79E-04 + 50M4 1.491.50E+025.99E+055.46E+101.06E+151.27E+013.22E+054.92E+097.22E+12 + 50M4 2.492.76E+014.32E+041.48E+091.22E+132.34E+002.45E+041.58E+081.55E+11 + 50M4 4.493.40E+002.11E+032.31E+077.71E+103.23E-011.26E+033.23E+061.90E+09 + 50M4 8.493.00E-017.93E+012.55E+053.47E+083.58E-025.00E+015.16E+041.71E+07 + 50M4 15.492.63E-023.41E+003.63E+032.25E+064.20E-032.37E+001.10E+032.09E+05 + 50M4 25.003.50E-032.69E-011.24E+024.25E+047.30E-042.08E-015.36E+016.45E+03 + 50M4 40.004.54E-042.16E-024.54E+008.94E+021.26E-041.91E-022.82E+002.18E+02 + 50M4 52.001.43E-045.24E-037.27E-011.06E+024.68E-055.04E-035.53E-013.33E+01 + 50M4 70.003.81E-051.05E-039.23E-029.56E+001.50E-051.12E-038.81E-024.01E+00 + 50M4 103.006.75E-061.31E-046.50E-034.37E-013.38E-061.58E-048.27E-032.63E-01 + 50M4 150.001.26E-061.78E-055.14E-042.29E-027.86E-072.39E-058.48E-041.93E-02 + 50M4 280.008.57E-087.15E-078.89E-061.99E-046.96E-081.08E-062.08E-052.80E-04 + 50M4 500.008.10E-094.23E-082.68E-073.13E-067.56E-096.48E-087.46E-076.44E-06 + 50M5 1.482.22E+028.08E+058.66E+101.60E+157.86E+003.80E+042.37E+101.99E+15 + 50M5 2.484.03E+015.72E+042.30E+091.79E+131.46E+002.91E+036.47E+082.00E+13 + 50M5 4.484.87E+002.76E+033.55E+071.10E+112.05E-011.53E+021.04E+071.06E+11 + 50M5 8.484.22E-011.02E+023.86E+054.84E+082.34E-026.43E+001.21E+053.90E+08 + 50M5 15.483.65E-024.31E+005.38E+033.05E+062.85E-033.27E-011.82E+032.12E+06 + 50M5 25.004.78E-033.32E-011.79E+025.56E+045.12E-043.08E-026.47E+013.59E+04 + 50M5 40.006.13E-042.59E-026.37E+001.12E+039.20E-053.07E-032.48E+007.00E+02 + 50M5 52.001.91E-046.16E-039.93E-011.28E+023.49E-058.53E-044.04E-018.03E+01 + 50M5 70.005.08E-051.20E-031.22E-011.11E+011.15E-052.01E-045.23E-027.12E+00 + 50M5 103.009.09E-061.45E-048.08E-034.68E-012.72E-063.13E-053.75E-033.21E-01 + 50M5 150.001.72E-061.87E-055.93E-042.21E-026.68E-075.26E-062.98E-041.66E-02 + 50M5 280.001.15E-077.11E-078.70E-061.53E-046.83E-083.02E-075.03E-061.39E-04 + 50M5 500.001.27E-084.50E-082.27E-071.87E-069.29E-092.56E-081.50E-071.99E-06 + 50N+ 50.005.93E-033.43E-012.04E+018.08E+022.04E-027.58E-012.90E+011.04E+03 + 50N+ 70.002.29E-037.25E-022.77E+007.77E+017.67E-031.80E-014.36E+001.04E+02 + 50N+ 100.008.28E-041.50E-023.50E-016.81E+002.75E-034.17E-026.42E-011.01E+01 + 50N+ 150.002.61E-042.74E-033.67E-024.64E-018.80E-048.50E-038.24E-028.31E-01 + 50N+ 200.001.17E-048.80E-048.07E-037.46E-024.00E-042.91E-032.09E-021.56E-01 + 50N+ 500.001.07E-053.71E-051.30E-044.72E-043.70E-051.33E-044.39E-041.46E-03 + 51K 31.493.82E+001.42E+011.06E+013.61E+001.56E+014.04E+021.75E+031.79E+03 + 51K 32.193.59E+001.47E+011.66E+011.13E+011.45E+013.69E+021.76E+032.72E+03 + 51K 33.493.24E+001.53E+012.73E+013.57E+011.29E+013.17E+021.73E+034.22E+03 + 51K 36.692.55E+001.50E+014.65E+011.23E+029.89E+002.24E+021.51E+036.30E+03 + 51K 40.491.97E+001.34E+015.62E+012.12E+027.40E+001.54E+021.19E+036.63E+03 + 51K 44.001.58E+001.16E+015.68E+012.56E+025.79E+001.12E+029.25E+025.98E+03 + 51K 50.001.12E+008.83E+004.97E+012.63E+023.98E+006.89E+016.00E+024.41E+03 + 51K 58.007.46E-016.08E+003.70E+012.15E+022.58E+003.93E+013.46E+022.72E+03 + 51K 70.004.44E-013.58E+002.24E+011.34E+021.50E+001.93E+011.65E+021.31E+03 + 51K 83.002.76E-012.13E+001.31E+017.75E+019.17E-011.03E+018.24E+016.28E+02 + 51K 100.001.64E-011.18E+006.91E+003.89E+015.39E-015.17E+003.81E+012.71E+02 + 51K 113.001.16E-017.94E-014.44E+002.39E+013.82E-013.31E+002.29E+011.54E+02 + 51K 130.007.82E-024.99E-012.64E+001.34E+012.58E-012.00E+001.28E+017.97E+01 + 51K 153.004.94E-022.89E-011.42E+006.70E+001.64E-011.13E+006.51E+003.70E+01 + 51K 180.003.14E-021.68E-017.59E-013.31E+001.05E-016.40E-013.34E+001.72E+01 + 51K 245.001.34E-025.99E-022.32E-018.64E-014.63E-022.26E-019.73E-014.13E+00 + 51K 330.006.11E-032.29E-027.61E-022.44E-012.13E-028.65E-023.09E-011.09E+00 + 51K 420.003.33E-031.10E-023.23E-029.22E-021.16E-024.10E-021.27E-013.89E-01 + 51K 530.001.91E-035.65E-031.49E-023.82E-026.56E-032.06E-025.64E-021.51E-01 + 51K 760.008.68E-042.23E-035.08E-031.12E-022.78E-037.46E-031.72E-023.84E-02 + 51K 1050.004.60E-041.06E-032.17E-034.23E-031.33E-033.18E-036.47E-031.25E-02 + 51K 1300.003.12E-046.79E-041.30E-032.37E-038.30E-041.86E-033.53E-036.34E-03 + 51K 1550.002.31E-044.79E-048.77E-041.52E-035.69E-041.22E-032.19E-033.72E-03 + 51L1 5.701.18E+013.53E+033.92E+058.71E+062.99E+022.26E+052.88E+079.11E+08 + 51L1 6.409.69E+001.83E+032.81E+051.05E+072.12E+021.30E+051.52E+076.00E+08 + 51L1 7.706.94E+006.00E+021.32E+057.46E+061.22E+025.41E+045.43E+062.51E+08 + 51L1 10.903.53E+005.13E+012.15E+041.69E+064.31E+011.06E+047.92E+053.75E+07 + 51L1 14.701.88E+003.42E+003.43E+033.08E+051.76E+012.68E+031.53E+056.51E+06 + 51L1 18.001.20E+001.47E+008.54E+028.45E+049.65E+001.07E+035.10E+041.94E+06 + 51L1 24.006.22E-012.06E+009.33E+011.14E+044.10E+002.96E+021.09E+043.43E+05 + 51L1 32.003.12E-011.73E+009.81E+001.25E+031.75E+008.44E+012.39E+036.08E+04 + 51L1 44.001.41E-019.83E-013.70E+009.81E+016.85E-012.17E+014.60E+029.10E+03 + 51L1 57.007.23E-025.30E-012.46E+001.93E+013.21E-017.40E+001.24E+021.98E+03 + 51L1 74.003.63E-022.60E-011.34E+007.37E+001.51E-012.57E+003.40E+014.38E+02 + 51L1 87.002.35E-021.62E-018.45E-014.42E+009.48E-021.35E+001.55E+011.74E+02 + 51L1 104.001.45E-029.46E-024.83E-012.43E+005.71E-026.74E-016.62E+006.40E+01 + 51L1 127.008.46E-035.07E-022.47E-011.18E+003.25E-023.15E-012.61E+002.13E+01 + 51L1 155.004.92E-032.69E-021.22E-015.50E-011.87E-021.50E-011.05E+007.32E+00 + 51L1 220.001.91E-038.72E-033.45E-021.35E-017.24E-034.31E-022.28E-011.20E+00 + 51L1 305.008.10E-043.12E-031.06E-023.59E-023.06E-031.42E-025.91E-022.43E-01 + 51L1 390.004.36E-041.48E-034.54E-031.37E-021.63E-036.45E-032.26E-027.83E-02 + 51L1 500.002.41E-047.32E-042.01E-035.41E-038.80E-043.00E-039.02E-032.66E-02 + 51L1 730.001.05E-042.75E-046.50E-041.49E-033.54E-041.00E-032.46E-035.84E-03 + 51L11000.005.62E-051.34E-042.82E-045.72E-041.71E-044.29E-049.15E-041.87E-03 + 51L11500.002.73E-055.79E-051.08E-041.92E-047.02E-051.54E-042.86E-045.01E-04 + 51L2 5.382.42E+012.25E+051.16E+087.80E+093.31E+019.57E+034.83E+059.97E+06 + 51L2 6.081.72E+011.22E+055.64E+074.70E+092.28E+015.93E+033.71E+051.23E+07 + 51L2 7.389.81E+004.60E+041.79E+071.72E+091.26E+012.76E+031.99E+059.36E+06 + 51L2 10.583.35E+007.55E+032.11E+062.03E+084.16E+006.59E+024.80E+042.65E+06 + 51L2 14.381.29E+001.63E+033.40E+052.90E+071.62E+001.94E+021.25E+046.54E+05 + 51L2 18.006.35E-015.34E+028.94E+046.74E+068.16E-017.90E+014.52E+032.14E+05 + 51L2 24.002.50E-011.28E+021.62E+041.01E+063.38E-012.50E+011.19E+034.77E+04 + 51L2 32.009.65E-023.11E+012.96E+031.49E+051.40E-017.94E+003.05E+021.01E+04 + 51L2 44.003.30E-026.56E+004.56E+021.78E+045.29E-022.23E+006.71E+011.76E+03 + 51L2 57.001.36E-021.87E+001.01E+023.17E+032.40E-027.99E-011.95E+014.18E+02 + 51L2 74.005.54E-035.33E-012.22E+015.62E+021.08E-022.85E-015.62E+009.78E+01 + 51L2 87.003.16E-032.46E-018.75E+001.93E+026.64E-031.51E-012.60E+003.98E+01 + 51L2 104.001.70E-031.06E-013.17E+006.01E+013.86E-037.49E-021.12E+001.48E+01 + 51L2 127.008.54E-044.15E-021.03E+001.65E+012.11E-033.44E-024.35E-014.91E+00 + 51L2 155.004.30E-041.65E-023.39E-014.61E+001.16E-031.59E-021.72E-011.65E+00 + 51L2 220.001.31E-043.38E-035.05E-025.15E-014.06E-044.19E-033.43E-022.51E-01 + 51L2 305.004.42E-058.06E-049.09E-037.18E-021.54E-041.24E-037.93E-034.56E-02 + 51L2 390.002.00E-052.85E-042.62E-031.72E-027.45E-055.04E-042.71E-031.31E-02 + 51L2 500.009.21E-061.03E-047.82E-044.31E-033.61E-052.07E-049.46E-043.88E-03 + 51L2 730.002.97E-062.39E-051.37E-045.92E-041.21E-055.57E-052.03E-046.65E-04 + 51L21000.001.24E-067.67E-063.58E-051.28E-044.98E-061.95E-056.03E-051.68E-04 + 51L21500.004.24E-071.99E-067.30E-062.14E-051.61E-065.33E-061.38E-053.22E-05 + 51L3 5.134.99E+014.73E+052.65E+081.91E+109.91E+002.78E+059.47E+083.24E+11 + 51L3 5.833.45E+012.48E+051.23E+081.09E+106.70E+001.47E+053.98E+081.21E+11 + 51L3 7.131.91E+018.93E+043.66E+073.68E+093.60E+005.39E+041.02E+082.59E+10 + 51L3 10.336.14E+001.37E+043.90E+063.85E+081.15E+008.49E+038.48E+061.53E+09 + 51L3 14.132.28E+002.80E+035.86E+055.06E+074.39E-011.78E+031.06E+061.43E+08 + 51L3 18.001.04E+008.23E+021.35E+051.01E+072.08E-015.35E+022.18E+052.34E+07 + 51L3 24.003.99E-011.93E+022.36E+041.45E+068.62E-021.28E+023.38E+042.78E+06 + 51L3 32.001.51E-014.51E+014.13E+032.04E+053.57E-023.07E+015.38E+033.38E+05 + 51L3 44.005.02E-029.10E+006.00E+022.29E+041.35E-026.36E+007.26E+023.40E+04 + 51L3 57.002.03E-022.48E+001.25E+023.84E+036.12E-031.78E+001.46E+025.41E+03 + 51L3 74.008.06E-036.73E-012.59E+016.33E+022.76E-034.95E-012.98E+018.72E+02 + 51L3 87.004.54E-033.01E-019.78E+002.07E+021.69E-032.25E-011.13E+012.86E+02 + 51L3 104.002.41E-031.24E-013.35E+006.05E+019.85E-049.49E-023.90E+008.45E+01 + 51L3 127.001.19E-034.62E-021.01E+001.53E+015.39E-043.63E-021.21E+002.20E+01 + 51L3 155.005.90E-041.74E-023.10E-013.93E+002.96E-041.40E-023.81E-015.89E+00 + 51L3 220.001.76E-043.20E-033.96E-023.69E-011.05E-042.72E-035.24E-026.12E-01 + 51L3 305.005.90E-056.91E-046.07E-034.26E-024.05E-056.10E-048.66E-037.91E-02 + 51L3 390.002.68E-052.27E-041.54E-038.78E-032.02E-052.04E-042.32E-031.78E-02 + 51L3 500.001.25E-057.69E-054.06E-041.89E-031.01E-057.01E-056.32E-044.11E-03 + 51L3 730.004.22E-061.66E-056.06E-052.10E-043.74E-061.50E-059.39E-054.82E-04 + 51L31000.001.84E-065.25E-061.44E-053.98E-051.73E-064.68E-062.08E-058.83E-05 + 51L31500.007.28E-071.43E-062.87E-066.04E-067.01E-071.26E-063.49E-061.12E-05 + 51M1 1.941.38E+014.59E+041.90E+062.20E+091.47E+039.47E+061.00E+102.61E+12 + 51M1 2.947.93E+007.98E+031.05E+064.15E+074.24E+021.23E+066.97E+081.46E+11 + 51M1 4.943.32E+006.77E+021.78E+051.15E+078.97E+019.92E+042.72E+073.95E+09 + 51M1 8.941.05E+002.10E+011.02E+041.00E+061.52E+015.84E+037.57E+056.80E+07 + 51M1 15.943.04E-015.38E-013.26E+023.55E+042.71E+003.97E+022.64E+041.44E+06 + 51M1 26.009.78E-024.64E-019.92E+001.27E+036.34E-014.39E+011.73E+036.05E+04 + 51M1 41.003.20E-022.22E-019.84E-014.19E+011.65E-016.07E+001.50E+023.48E+03 + 51M1 53.001.66E-021.22E-015.78E-017.36E+007.78E-022.05E+003.95E+017.25E+02 + 51M1 71.007.73E-035.56E-022.88E-011.88E+003.33E-026.18E-018.97E+001.27E+02 + 51M1 104.002.78E-031.80E-029.17E-024.81E-011.12E-021.36E-011.39E+001.40E+01 + 51M1 150.001.03E-035.70E-032.62E-021.21E-014.01E-033.40E-022.51E-011.84E+00 + 51M1 280.001.95E-047.84E-042.78E-039.81E-037.49E-043.75E-031.68E-027.47E-02 + 51M1 500.004.68E-051.42E-043.91E-041.06E-031.72E-045.92E-041.79E-035.33E-03 + 51M2 1.813.25E+011.04E+073.42E+101.47E+131.76E+023.26E+051.05E+081.48E+10 + 51M2 2.811.43E+011.14E+061.99E+096.85E+114.66E+014.54E+041.17E+071.80E+09 + 51M2 4.814.26E+007.72E+046.62E+071.61E+109.14E+004.37E+037.98E+051.05E+08 + 51M2 8.818.82E-013.74E+031.55E+062.41E+081.46E+003.37E+023.97E+043.72E+06 + 51M2 15.811.63E-012.04E+024.38E+044.29E+062.46E-013.01E+012.23E+031.39E+05 + 51M2 26.003.51E-021.76E+012.21E+031.43E+055.43E-023.98E+001.96E+028.28E+03 + 51M2 41.008.01E-031.90E+001.48E+026.46E+031.36E-026.36E-012.13E+016.22E+02 + 51M2 53.003.41E-035.47E-013.28E+011.14E+036.23E-032.28E-016.13E+001.45E+02 + 51M2 71.001.27E-031.34E-015.99E+001.62E+022.57E-037.15E-021.50E+002.77E+01 + 51M2 104.003.45E-042.20E-026.72E-011.30E+018.09E-041.59E-022.41E-013.25E+00 + 51M2 150.009.87E-054.01E-038.62E-021.22E+002.69E-043.84E-034.29E-024.29E-01 + 51M2 280.001.22E-052.45E-043.00E-032.55E-024.17E-053.61E-042.47E-031.52E-02 + 51M2 500.001.93E-062.18E-051.66E-049.20E-047.63E-064.39E-052.01E-048.30E-04 + 51M3 1.777.05E+012.03E+076.93E+102.98E+134.98E+011.24E+073.55E+119.93E+14 + 51M3 2.772.89E+012.12E+063.75E+091.28E+121.27E+011.32E+061.59E+102.22E+13 + 51M3 4.778.05E+001.36E+051.16E+082.78E+102.42E+008.71E+043.78E+082.43E+11 + 51M3 8.771.57E+006.29E+032.55E+063.89E+083.77E-014.16E+036.05E+061.78E+09 + 51M3 15.772.76E-013.27E+026.79E+046.49E+066.29E-022.23E+021.21E+051.80E+07 + 51M3 26.005.63E-022.64E+013.17E+031.99E+051.37E-021.85E+014.65E+034.01E+05 + 51M3 41.001.24E-022.69E+001.98E+028.34E+033.43E-031.94E+002.56E+021.39E+04 + 51M3 53.005.16E-037.44E-014.17E+011.40E+031.58E-035.47E-015.16E+012.17E+03 + 51M3 71.001.87E-031.73E-017.11E+001.84E+026.50E-041.30E-018.56E+002.73E+02 + 51M3 104.004.94E-042.61E-027.14E-011.31E+012.06E-042.04E-028.64E-011.94E+01 + 51M3 150.001.37E-044.31E-038.03E-021.06E+006.86E-053.53E-031.01E-011.65E+00 + 51M3 280.001.63E-052.18E-042.11E-031.60E-021.10E-051.93E-043.01E-032.97E-02 + 51M3 500.002.64E-061.63E-058.69E-054.05E-042.15E-061.50E-051.37E-048.99E-04 + 51M4 1.541.46E+025.82E+055.22E+109.98E+141.30E+013.29E+054.93E+097.02E+12 + 51M4 2.542.82E+014.45E+041.53E+091.27E+132.51E+002.65E+041.71E+081.63E+11 + 51M4 4.543.60E+002.27E+032.53E+078.53E+103.56E-011.42E+033.66E+062.13E+09 + 51M4 8.543.27E-018.74E+012.89E+053.97E+084.02E-025.78E+016.00E+041.97E+07 + 51M4 15.542.93E-023.83E+004.18E+032.62E+064.78E-032.77E+001.30E+032.45E+05 + 51M4 26.003.36E-032.50E-011.10E+023.66E+047.30E-042.02E-015.01E+015.80E+03 + 51M4 41.004.65E-042.18E-024.50E+008.71E+021.33E-042.00E-022.90E+002.18E+02 + 51M4 53.001.50E-045.47E-037.50E-011.08E+025.06E-055.45E-035.88E-013.47E+01 + 51M4 71.004.11E-051.13E-039.87E-021.02E+011.66E-051.24E-039.67E-024.34E+00 + 51M4 104.007.55E-061.45E-047.19E-034.83E-013.81E-061.80E-049.34E-032.95E-01 + 51M4 150.001.49E-062.08E-056.08E-042.73E-029.21E-072.85E-051.02E-032.31E-02 + 51M4 280.009.76E-088.40E-071.05E-052.38E-048.19E-081.29E-062.50E-053.36E-04 + 51M4 500.008.38E-095.03E-083.17E-073.76E-068.90E-097.75E-088.97E-077.76E-06 + 51M5 1.532.17E+027.82E+058.33E+101.51E+158.06E+003.84E+042.38E+101.96E+15 + 51M5 2.534.11E+015.87E+042.40E+091.86E+131.55E+003.11E+037.03E+082.18E+13 + 51M5 4.535.16E+002.95E+033.90E+071.22E+112.24E-011.70E+021.19E+071.23E+11 + 51M5 8.534.60E-011.12E+024.39E+055.54E+082.61E-027.30E+001.43E+054.71E+08 + 51M5 15.534.05E-024.81E+006.22E+033.55E+063.22E-033.75E-012.18E+032.60E+06 + 51M5 26.004.57E-033.06E-011.60E+024.77E+045.10E-042.95E-026.03E+013.21E+04 + 51M5 41.006.26E-042.59E-026.31E+001.09E+039.67E-053.16E-032.55E+007.09E+02 + 51M5 53.002.01E-046.37E-031.02E+001.30E+023.75E-059.04E-044.33E-018.51E+01 + 51M5 71.005.45E-051.28E-031.30E-011.17E+011.26E-052.18E-045.79E-027.84E+00 + 51M5 104.001.00E-051.59E-048.93E-035.14E-013.04E-063.48E-054.27E-033.66E-01 + 51M5 150.002.00E-062.18E-057.00E-042.63E-027.77E-076.13E-063.61E-042.04E-02 + 51M5 280.001.38E-078.28E-071.03E-051.82E-047.95E-083.53E-076.06E-061.70E-04 + 51M5 500.001.67E-085.07E-082.71E-072.21E-061.08E-083.00E-081.78E-072.41E-06 + 51N+ 50.006.45E-033.96E-012.39E+019.48E+022.36E-028.90E-013.48E+011.27E+03 + 51N+ 70.002.49E-038.30E-023.23E+009.09E+018.83E-032.11E-015.19E+001.26E+02 + 51N+ 100.009.04E-041.70E-024.07E-017.95E+003.17E-034.85E-027.58E-011.21E+01 + 51N+ 150.002.86E-043.07E-034.24E-025.40E-011.01E-039.85E-039.64E-029.81E-01 + 51N+ 200.001.28E-049.82E-049.25E-038.66E-024.58E-043.36E-032.43E-021.83E-01 + 51N+ 500.001.18E-054.12E-051.46E-045.38E-044.22E-051.52E-045.04E-041.68E-03 + 52K 32.813.51E+001.24E+018.79E+002.77E+001.52E+013.75E+021.56E+031.51E+03 + 52K 33.513.31E+001.29E+011.37E+018.54E+001.42E+013.45E+021.56E+032.28E+03 + 52K 34.813.00E+001.34E+012.23E+012.69E+011.27E+012.98E+021.55E+033.52E+03 + 52K 38.012.39E+001.33E+013.82E+019.34E+019.80E+002.13E+021.36E+035.32E+03 + 52K 41.811.86E+001.19E+014.69E+011.65E+027.40E+001.48E+021.09E+035.70E+03 + 52K 46.001.44E+001.02E+014.78E+012.07E+025.59E+001.03E+028.17E+025.10E+03 + 52K 52.001.03E+007.82E+004.21E+012.13E+023.91E+006.48E+015.41E+023.81E+03 + 52K 60.007.01E-015.46E+003.18E+011.76E+022.57E+003.77E+013.19E+022.40E+03 + 52K 72.004.25E-013.28E+001.97E+011.13E+021.52E+001.90E+011.56E+021.19E+03 + 52K 85.002.68E-011.99E+001.18E+016.71E+019.41E-011.03E+017.97E+015.87E+02 + 52K 102.001.61E-011.12E+006.35E+003.46E+015.60E-015.25E+003.76E+012.59E+02 + 52K 115.001.15E-017.61E-014.13E+002.16E+013.99E-013.39E+002.29E+011.49E+02 + 52K 132.007.79E-024.84E-012.49E+001.23E+012.71E-012.07E+001.29E+017.86E+01 + 52K 155.004.97E-022.83E-011.36E+006.27E+001.74E-011.17E+006.65E+003.70E+01 + 52K 180.003.28E-021.72E-017.68E-013.30E+001.15E-016.98E-013.61E+001.84E+01 + 52K 245.001.41E-026.19E-022.37E-018.74E-015.06E-022.47E-011.05E+004.43E+00 + 52K 330.006.41E-032.38E-027.85E-022.50E-012.33E-029.41E-023.35E-011.17E+00 + 52K 420.003.50E-031.15E-023.36E-029.52E-021.26E-024.46E-021.38E-014.19E-01 + 52K 530.002.02E-035.92E-031.56E-023.98E-027.13E-032.23E-026.10E-021.62E-01 + 52K 760.009.18E-042.35E-035.35E-031.17E-023.02E-038.09E-031.87E-024.14E-02 + 52K 1050.004.86E-041.12E-032.30E-034.48E-031.44E-033.45E-037.00E-031.35E-02 + 52K 1300.003.30E-047.20E-041.38E-032.52E-038.94E-042.02E-033.81E-036.84E-03 + 52K 1550.002.44E-045.09E-049.33E-041.61E-036.11E-041.32E-032.37E-034.02E-03 + 52L1 5.941.09E+013.19E+033.35E+056.81E+062.94E+022.12E+052.59E+077.76E+08 + 52L1 6.649.02E+001.70E+032.44E+058.43E+062.10E+021.24E+051.39E+075.20E+08 + 52L1 7.946.54E+005.82E+021.19E+056.27E+061.23E+025.32E+045.15E+062.27E+08 + 52L1 11.143.39E+005.58E+012.08E+041.54E+064.48E+011.09E+047.90E+053.59E+07 + 52L1 14.941.84E+004.25E+003.54E+032.99E+051.86E+012.82E+031.58E+056.49E+06 + 52L1 19.001.08E+001.37E+006.93E+026.53E+049.12E+009.47E+024.28E+041.55E+06 + 52L1 25.005.76E-011.81E+008.60E+019.70E+034.03E+002.79E+029.83E+032.97E+05 + 52L1 33.002.96E-011.54E+001.00E+011.19E+031.77E+008.29E+012.27E+035.60E+04 + 52L1 45.001.37E-019.01E-013.35E+001.03E+027.11E-012.21E+014.57E+028.82E+03 + 52L1 58.007.13E-024.98E-012.21E+001.98E+013.39E-017.69E+001.26E+021.98E+03 + 52L1 75.003.63E-022.50E-011.23E+007.01E+001.61E-012.71E+003.54E+014.48E+02 + 52L1 88.002.37E-021.58E-017.91E-014.15E+001.02E-011.44E+001.63E+011.80E+02 + 52L1 105.001.48E-029.29E-024.60E-012.30E+006.15E-027.21E-017.01E+006.70E+01 + 52L1 128.008.64E-035.03E-022.39E-011.13E+003.52E-023.39E-012.78E+002.25E+01 + 52L1 155.005.14E-032.75E-021.23E-015.48E-012.07E-021.66E-011.16E+008.06E+00 + 52L1 220.002.01E-039.02E-033.53E-021.37E-017.98E-034.75E-022.51E-011.32E+00 + 52L1 305.008.55E-043.25E-031.10E-023.71E-023.37E-031.57E-026.50E-022.67E-01 + 52L1 400.004.34E-041.44E-034.35E-031.29E-021.68E-036.55E-032.26E-027.67E-02 + 52L1 510.002.44E-047.31E-041.99E-035.30E-039.19E-043.11E-039.22E-032.68E-02 + 52L1 740.001.08E-042.83E-046.64E-041.51E-033.75E-041.06E-032.57E-036.06E-03 + 52L11000.005.98E-051.42E-043.01E-046.11E-041.87E-044.68E-049.99E-042.04E-03 + 52L11500.002.91E-056.19E-051.16E-042.07E-047.60E-051.68E-043.12E-045.47E-04 + 52L2 5.612.24E+012.02E+059.93E+076.33E+093.25E+018.96E+034.28E+058.07E+06 + 52L2 6.311.61E+011.12E+054.96E+073.90E+092.27E+015.64E+033.32E+051.02E+07 + 52L2 7.619.38E+004.36E+041.64E+071.49E+091.28E+012.69E+031.84E+058.11E+06 + 52L2 10.813.30E+007.50E+032.04E+061.89E+084.35E+006.69E+024.66E+042.46E+06 + 52L2 14.611.30E+001.67E+033.41E+052.82E+071.73E+002.01E+021.26E+046.34E+05 + 52L2 19.005.68E-014.52E+027.16E+045.13E+067.73E-017.06E+013.83E+031.73E+05 + 52L2 25.002.34E-011.16E+021.41E+048.41E+053.34E-012.36E+011.07E+034.13E+04 + 52L2 33.009.34E-022.97E+012.74E+031.33E+051.43E-017.81E+002.90E+029.28E+03 + 52L2 45.003.29E-026.53E+004.43E+021.69E+045.54E-022.28E+006.65E+011.70E+03 + 52L2 58.001.39E-021.91E+001.01E+023.12E+032.56E-028.33E-011.99E+014.16E+02 + 52L2 75.005.74E-035.56E-012.28E+015.69E+021.17E-023.02E-015.85E+001.00E+02 + 52L2 88.003.31E-032.59E-019.13E+001.99E+027.22E-031.61E-012.74E+004.12E+01 + 52L2 105.001.80E-031.13E-013.34E+006.27E+014.23E-038.09E-021.19E+001.55E+01 + 52L2 128.009.09E-044.46E-021.10E+001.74E+012.33E-033.75E-024.68E-015.21E+00 + 52L2 155.004.71E-041.84E-023.79E-015.13E+001.31E-031.79E-021.92E-011.84E+00 + 52L2 220.001.44E-043.78E-035.66E-025.76E-014.59E-044.72E-033.85E-022.80E-01 + 52L2 305.004.88E-059.04E-041.02E-028.05E-021.74E-041.40E-038.92E-035.11E-02 + 52L2 400.002.04E-052.88E-042.60E-031.68E-027.86E-055.20E-042.74E-031.30E-02 + 52L2 510.009.60E-061.07E-048.02E-044.36E-033.87E-052.19E-049.84E-043.98E-03 + 52L2 740.003.17E-062.56E-051.46E-046.25E-041.33E-056.04E-052.18E-047.07E-04 + 52L21000.001.38E-068.66E-064.05E-051.45E-045.67E-062.22E-056.85E-051.90E-04 + 52L21500.004.71E-072.25E-068.28E-062.42E-051.84E-066.08E-061.58E-053.66E-05 + 52L3 5.344.64E+014.26E+052.28E+081.57E+109.60E+002.62E+058.54E+082.81E+11 + 52L3 6.043.24E+012.28E+051.09E+089.11E+096.57E+001.42E+053.70E+081.09E+11 + 52L3 7.341.83E+018.48E+043.36E+073.22E+093.60E+005.35E+049.88E+072.44E+10 + 52L3 10.546.05E+001.36E+043.79E+063.60E+081.18E+008.81E+038.71E+061.54E+09 + 52L3 14.342.29E+002.85E+035.87E+054.93E+074.58E-011.90E+031.13E+061.50E+08 + 52L3 19.009.19E-016.88E+021.07E+057.61E+061.93E-014.68E+021.79E+051.82E+07 + 52L3 25.003.70E-011.72E+022.03E+041.19E+068.32E-021.20E+023.03E+042.39E+06 + 52L3 33.001.45E-014.25E+013.77E+031.80E+053.55E-023.02E+015.14E+033.14E+05 + 52L3 45.004.96E-028.95E+005.76E+022.14E+041.38E-026.51E+007.32E+023.35E+04 + 52L3 58.002.05E-022.51E+001.24E+023.72E+036.35E-031.87E+001.52E+025.53E+03 + 52L3 75.008.27E-036.94E-012.63E+016.31E+022.91E-035.30E-013.17E+019.15E+02 + 52L3 88.004.70E-033.13E-011.01E+012.10E+021.79E-032.43E-011.21E+013.04E+02 + 52L3 105.002.52E-031.30E-013.48E+006.21E+011.05E-031.03E-014.24E+009.10E+01 + 52L3 128.001.25E-034.90E-021.07E+001.60E+015.77E-043.98E-021.32E+002.40E+01 + 52L3 155.006.40E-041.92E-023.42E-014.32E+003.25E-041.60E-024.37E-016.74E+00 + 52L3 220.001.91E-043.54E-034.37E-024.06E-011.15E-043.09E-035.99E-026.99E-01 + 52L3 305.006.44E-057.62E-046.71E-034.69E-024.45E-056.90E-049.88E-039.02E-02 + 52L3 400.002.71E-052.23E-041.48E-038.26E-032.06E-052.06E-042.31E-031.74E-02 + 52L3 510.001.29E-057.80E-054.05E-041.85E-031.05E-057.24E-056.48E-044.17E-03 + 52L3 740.004.41E-061.73E-056.27E-052.15E-043.96E-061.59E-059.93E-055.08E-04 + 52L31000.002.02E-065.78E-061.59E-054.41E-051.89E-065.20E-062.35E-051.00E-04 + 52L31500.007.92E-071.57E-063.16E-066.67E-067.65E-071.40E-063.91E-061.27E-05 + 52M1 2.011.30E+014.36E+041.85E+061.94E+091.50E+039.37E+069.71E+092.44E+12 + 52M1 3.017.64E+007.97E+039.81E+054.35E+074.45E+021.29E+067.19E+081.46E+11 + 52M1 5.013.27E+007.20E+021.77E+051.07E+079.66E+011.08E+052.95E+074.20E+09 + 52M1 9.011.05E+002.50E+011.09E+041.01E+061.67E+016.49E+038.41E+057.46E+07 + 52M1 16.013.08E-015.66E-013.75E+023.85E+043.00E+004.46E+022.97E+041.60E+06 + 52M1 26.001.01E-014.26E-011.28E+011.50E+037.09E-015.00E+011.97E+036.87E+04 + 52M1 41.003.31E-022.15E-011.01E+005.21E+011.85E-016.87E+001.70E+023.93E+03 + 52M1 53.001.73E-021.20E-015.53E-018.77E+008.70E-022.32E+004.46E+018.17E+02 + 52M1 71.008.08E-035.57E-022.78E-011.98E+003.72E-026.96E-011.01E+011.42E+02 + 52M1 104.002.92E-031.83E-029.10E-024.80E-011.25E-021.53E-011.56E+001.56E+01 + 52M1 150.001.09E-035.88E-032.66E-021.22E-014.47E-033.80E-022.81E-012.06E+00 + 52M1 280.002.07E-048.22E-042.90E-031.02E-028.32E-044.17E-031.87E-028.29E-02 + 52M1 500.005.00E-051.51E-044.15E-041.12E-031.90E-046.55E-041.98E-035.89E-03 + 52M2 1.873.08E+019.88E+063.18E+101.32E+131.80E+023.24E+051.00E+081.33E+10 + 52M2 2.871.39E+011.15E+061.98E+096.64E+114.93E+014.73E+041.18E+071.74E+09 + 52M2 4.874.27E+008.12E+046.93E+071.65E+109.93E+004.71E+038.41E+051.07E+08 + 52M2 8.879.09E-014.05E+031.67E+062.57E+081.61E+003.71E+024.28E+043.94E+06 + 52M2 15.871.72E-012.24E+024.80E+044.66E+062.75E-013.34E+012.45E+031.50E+05 + 52M2 26.003.77E-021.97E+012.47E+031.59E+056.14E-024.48E+002.19E+029.17E+03 + 52M2 41.008.69E-032.13E+001.66E+027.21E+031.54E-027.17E-012.38E+016.92E+02 + 52M2 53.003.71E-036.14E-013.68E+011.28E+037.07E-032.57E-016.87E+001.61E+02 + 52M2 71.001.39E-031.51E-016.73E+001.81E+022.92E-038.08E-021.68E+003.09E+01 + 52M2 104.003.80E-042.48E-027.58E-011.46E+019.21E-041.80E-022.72E-013.64E+00 + 52M2 150.001.09E-044.53E-039.74E-021.38E+003.06E-044.36E-034.85E-024.83E-01 + 52M2 280.001.35E-052.78E-043.41E-032.89E-024.78E-054.11E-042.81E-031.72E-02 + 52M2 500.002.16E-062.48E-051.89E-041.05E-038.76E-065.03E-052.30E-049.45E-04 + 52M3 1.826.71E+011.95E+076.47E+102.69E+135.02E+011.24E+073.47E+119.53E+14 + 52M3 2.822.83E+012.14E+063.74E+091.24E+121.33E+011.39E+061.67E+102.32E+13 + 52M3 4.828.09E+001.43E+051.22E+082.85E+102.59E+009.56E+044.20E+082.70E+11 + 52M3 8.821.62E+006.79E+032.75E+064.13E+084.09E-014.68E+036.93E+062.04E+09 + 52M3 15.822.89E-013.57E+027.41E+046.99E+066.88E-022.54E+021.41E+052.09E+07 + 52M3 26.006.02E-022.93E+013.53E+032.20E+051.51E-022.15E+015.49E+034.75E+05 + 52M3 41.001.33E-022.99E+002.20E+029.23E+033.80E-032.25E+003.01E+021.63E+04 + 52M3 53.005.57E-038.28E-014.64E+011.55E+031.74E-036.34E-016.05E+012.55E+03 + 52M3 71.002.03E-031.93E-017.92E+002.04E+027.20E-041.51E-011.00E+013.19E+02 + 52M3 104.005.37E-042.90E-027.96E-011.45E+012.28E-042.36E-021.01E+002.26E+01 + 52M3 150.001.50E-044.81E-038.96E-021.18E+007.60E-054.07E-031.17E-011.91E+00 + 52M3 280.001.81E-052.43E-042.36E-031.78E-021.21E-052.21E-043.47E-033.43E-02 + 52M3 500.002.93E-061.82E-059.72E-054.52E-042.38E-061.71E-051.57E-041.03E-03 + 52M4 1.581.42E+025.62E+054.96E+109.32E+141.33E+013.35E+054.91E+096.77E+12 + 52M4 2.582.87E+014.56E+041.58E+091.31E+132.66E+002.85E+041.83E+081.72E+11 + 52M4 4.583.80E+002.42E+032.76E+079.37E+103.90E-011.59E+034.11E+062.36E+09 + 52M4 8.583.55E-019.60E+013.26E+054.53E+084.49E-026.64E+016.94E+042.26E+07 + 52M4 15.583.25E-024.29E+004.80E+033.04E+065.42E-033.22E+001.52E+032.85E+05 + 52M4 26.003.80E-032.86E-011.30E+024.35E+048.40E-042.39E-015.97E+016.90E+03 + 52M4 41.005.30E-042.50E-025.29E+001.03E+031.54E-042.37E-023.45E+002.59E+02 + 52M4 53.001.72E-046.30E-038.81E-011.28E+025.85E-056.45E-037.01E-014.13E+01 + 52M4 71.004.73E-051.31E-031.16E-011.21E+011.92E-051.47E-031.15E-015.16E+00 + 52M4 104.008.74E-061.69E-048.45E-035.74E-014.43E-062.14E-041.11E-023.51E-01 + 52M4 150.001.73E-062.43E-057.16E-043.24E-021.07E-063.39E-051.21E-032.76E-02 + 52M4 280.001.16E-079.82E-071.24E-052.84E-049.60E-081.53E-063.00E-054.02E-04 + 52M4 500.001.15E-085.88E-083.76E-074.47E-061.04E-089.23E-081.08E-069.31E-06 + 52M5 1.572.11E+027.53E+057.95E+101.41E+158.22E+003.85E+042.38E+101.92E+15 + 52M5 2.574.18E+015.99E+042.48E+091.92E+131.65E+003.30E+037.59E+082.36E+13 + 52M5 4.575.44E+003.13E+034.26E+071.34E+112.44E-011.88E+021.36E+071.43E+11 + 52M5 8.574.99E-011.22E+024.96E+056.31E+082.90E-028.24E+001.68E+055.65E+08 + 52M5 15.574.48E-025.34E+007.15E+034.11E+063.63E-034.28E-012.61E+033.17E+06 + 52M5 26.005.16E-033.47E-011.88E+025.65E+045.83E-043.42E-027.34E+014.00E+04 + 52M5 41.007.11E-042.95E-027.41E+001.29E+031.11E-043.66E-033.11E+008.77E+02 + 52M5 53.002.29E-047.28E-031.20E+001.54E+024.31E-051.05E-035.26E-011.05E+02 + 52M5 71.006.25E-051.47E-031.53E-011.38E+011.46E-052.53E-047.03E-029.65E+00 + 52M5 104.001.14E-051.83E-041.05E-026.09E-013.51E-064.04E-055.17E-034.48E-01 + 52M5 150.002.29E-062.52E-058.24E-043.12E-028.99E-077.13E-064.36E-042.49E-02 + 52M5 280.001.70E-079.60E-071.21E-052.16E-049.23E-084.11E-077.26E-062.07E-04 + 52M5 500.001.71E-086.10E-083.14E-072.62E-061.26E-083.49E-082.12E-072.91E-06 + 52N+ 50.007.04E-034.56E-012.79E+011.11E+032.72E-021.05E+004.17E+011.54E+03 + 52N+ 70.002.72E-039.50E-023.77E+001.06E+021.02E-022.47E-016.17E+001.51E+02 + 52N+ 100.009.89E-041.92E-024.73E-019.27E+003.65E-035.65E-028.94E-011.44E+01 + 52N+ 150.003.14E-043.46E-034.89E-026.29E-011.16E-031.14E-021.13E-011.16E+00 + 52N+ 200.001.41E-041.10E-031.06E-021.00E-015.27E-043.89E-032.83E-022.15E-01 + 52N+ 500.001.31E-054.58E-051.64E-046.14E-044.82E-051.75E-045.80E-041.94E-03 + 53K 34.173.24E+001.09E+017.32E+002.13E+001.48E+013.50E+021.39E+031.28E+03 + 53K 34.873.06E+001.13E+011.13E+016.49E+001.39E+013.22E+021.40E+031.91E+03 + 53K 36.172.78E+001.17E+011.83E+012.03E+011.25E+012.80E+021.38E+032.94E+03 + 53K 39.372.23E+001.17E+013.15E+017.15E+019.72E+002.03E+021.23E+034.49E+03 + 53K 43.171.75E+001.07E+013.92E+011.29E+027.41E+001.43E+029.93E+024.90E+03 + 53K 47.001.40E+009.29E+004.06E+011.63E+025.78E+001.04E+027.77E+024.52E+03 + 53K 53.001.01E+007.24E+003.67E+011.74E+024.06E+006.57E+015.23E+023.48E+03 + 53K 61.006.91E-015.14E+002.84E+011.50E+022.70E+003.86E+013.14E+022.25E+03 + 53K 73.004.22E-013.13E+001.80E+019.95E+011.60E+001.97E+011.56E+021.15E+03 + 53K 86.002.68E-011.93E+001.10E+016.04E+011.00E+001.07E+018.09E+015.77E+02 + 53K 103.001.62E-011.10E+006.03E+003.19E+015.98E-015.52E+003.86E+012.60E+02 + 53K 116.001.16E-017.50E-013.97E+002.02E+014.27E-013.59E+002.36E+011.51E+02 + 53K 133.007.93E-024.80E-012.41E+001.17E+012.91E-012.20E+001.34E+018.02E+01 + 53K 156.005.08E-022.84E-011.33E+006.02E+001.87E-011.25E+006.97E+003.82E+01 + 53K 185.003.17E-021.61E-016.99E-012.92E+001.17E-016.92E-013.48E+001.73E+01 + 53K 250.001.39E-025.99E-022.24E-018.11E-015.24E-022.51E-011.05E+004.33E+00 + 53K 335.006.47E-032.36E-027.66E-022.41E-012.44E-029.76E-023.42E-011.18E+00 + 53K 420.003.68E-031.20E-023.48E-029.83E-021.38E-024.85E-021.49E-014.50E-01 + 53K 530.002.12E-036.20E-031.63E-024.14E-027.75E-032.43E-026.60E-021.75E-01 + 53K 760.009.67E-042.47E-035.63E-031.23E-023.27E-038.78E-032.02E-024.46E-02 + 53K 1050.005.13E-041.19E-032.43E-034.74E-031.55E-033.73E-037.57E-031.46E-02 + 53K 1300.003.49E-047.63E-041.47E-032.67E-039.64E-042.18E-034.12E-037.38E-03 + 53K 1550.002.58E-045.39E-049.91E-041.72E-036.58E-041.42E-032.56E-034.34E-03 + 53L1 6.191.01E+012.88E+032.85E+055.36E+062.88E+021.98E+052.31E+076.57E+08 + 53L1 6.898.40E+001.57E+032.12E+056.78E+062.09E+021.19E+051.27E+074.50E+08 + 53L1 8.196.16E+005.64E+021.07E+055.27E+061.25E+025.22E+044.87E+062.04E+08 + 53L1 11.393.26E+005.99E+012.01E+041.40E+064.65E+011.11E+047.86E+053.43E+07 + 53L1 15.191.79E+005.22E+003.63E+032.89E+051.97E+012.95E+031.62E+056.45E+06 + 53L1 19.001.10E+001.30E+008.22E+027.18E+041.01E+011.07E+034.80E+041.70E+06 + 53L1 25.005.87E-011.57E+001.09E+021.11E+044.47E+003.14E+021.10E+043.28E+05 + 53L1 33.003.03E-011.42E+001.26E+011.42E+031.97E+009.31E+012.54E+036.19E+04 + 53L1 45.001.41E-018.65E-013.24E+001.28E+027.88E-012.47E+015.09E+029.75E+03 + 53L1 58.007.36E-024.88E-012.07E+002.26E+013.75E-018.58E+001.41E+022.19E+03 + 53L1 75.003.76E-022.49E-011.18E+007.11E+001.78E-013.02E+003.93E+014.95E+02 + 53L1 88.002.46E-021.58E-017.66E-014.10E+001.12E-011.60E+001.81E+011.99E+02 + 53L1 105.001.54E-029.38E-024.51E-012.26E+006.80E-028.01E-017.76E+007.39E+01 + 53L1 128.009.01E-035.12E-022.38E-011.12E+003.89E-023.76E-013.08E+002.48E+01 + 53L1 155.005.37E-032.81E-021.24E-015.48E-012.28E-021.84E-011.28E+008.88E+00 + 53L1 220.002.10E-039.32E-033.60E-021.39E-018.80E-035.25E-022.77E-011.45E+00 + 53L1 305.008.99E-043.38E-031.14E-023.82E-023.71E-031.73E-027.15E-022.93E-01 + 53L1 400.004.58E-041.51E-034.55E-031.35E-021.85E-037.20E-032.48E-028.40E-02 + 53L1 510.002.59E-047.70E-042.09E-035.57E-031.01E-033.41E-031.01E-022.93E-02 + 53L1 740.001.15E-043.00E-047.04E-041.61E-034.10E-041.16E-032.82E-036.63E-03 + 53L11000.006.35E-051.51E-043.21E-046.52E-042.03E-045.12E-041.09E-032.23E-03 + 53L11500.003.09E-056.60E-051.24E-042.21E-048.24E-051.83E-043.40E-045.96E-04 + 53L2 5.852.07E+011.81E+058.48E+075.11E+093.19E+018.35E+033.77E+056.56E+06 + 53L2 6.551.51E+011.02E+054.35E+073.23E+092.25E+015.35E+032.97E+058.48E+06 + 53L2 7.858.96E+004.12E+041.49E+071.29E+091.29E+012.62E+031.70E+057.01E+06 + 53L2 11.053.25E+007.43E+031.97E+061.75E+084.54E+006.76E+024.52E+042.27E+06 + 53L2 14.851.31E+001.70E+033.40E+052.73E+071.84E+002.09E+021.26E+046.13E+05 + 53L2 19.006.03E-015.00E+027.89E+045.55E+068.64E-017.82E+014.16E+031.83E+05 + 53L2 25.002.49E-011.29E+021.56E+049.15E+053.73E-012.62E+011.17E+034.43E+04 + 53L2 33.001.00E-013.29E+013.02E+031.45E+051.60E-018.67E+003.18E+021.01E+04 + 53L2 45.003.54E-027.23E+004.90E+021.85E+046.21E-022.53E+007.33E+011.85E+03 + 53L2 58.001.50E-022.12E+001.12E+023.43E+032.87E-029.28E-012.19E+014.56E+02 + 53L2 75.006.22E-036.17E-012.53E+016.28E+021.32E-023.37E-016.48E+001.10E+02 + 53L2 88.003.60E-032.88E-011.01E+012.20E+028.12E-031.80E-013.04E+004.54E+01 + 53L2 105.001.96E-031.25E-013.72E+006.95E+014.76E-039.05E-021.32E+001.71E+01 + 53L2 128.009.93E-044.97E-021.22E+001.93E+012.62E-034.20E-025.21E-015.78E+00 + 53L2 155.005.16E-042.05E-024.23E-015.71E+001.48E-032.01E-022.14E-012.04E+00 + 53L2 220.001.58E-044.22E-036.33E-026.42E-015.19E-045.31E-034.31E-023.13E-01 + 53L2 305.005.39E-051.01E-031.14E-029.00E-021.97E-041.58E-031.00E-025.71E-02 + 53L2 400.002.25E-053.23E-042.92E-031.88E-028.91E-055.88E-043.09E-031.46E-02 + 53L2 510.001.06E-051.20E-049.03E-044.90E-034.40E-052.48E-041.11E-034.47E-03 + 53L2 740.003.57E-062.88E-051.65E-047.05E-041.51E-056.86E-052.47E-047.98E-04 + 53L21000.001.53E-069.76E-064.58E-051.64E-046.45E-062.52E-057.77E-052.15E-04 + 53L21500.005.28E-072.54E-069.37E-062.74E-052.09E-066.92E-061.79E-054.16E-05 + 53L3 5.564.30E+013.82E+051.96E+081.28E+109.27E+002.46E+057.68E+082.43E+11 + 53L3 6.263.05E+012.10E+059.62E+077.63E+096.43E+001.36E+053.43E+089.72E+10 + 53L3 7.561.75E+018.04E+043.09E+072.81E+093.60E+005.30E+049.55E+072.28E+10 + 53L3 10.765.96E+001.34E+043.66E+063.35E+081.21E+009.11E+038.92E+061.54E+09 + 53L3 14.562.30E+002.91E+035.87E+054.78E+074.78E-012.02E+031.20E+061.56E+08 + 53L3 19.009.72E-017.56E+021.17E+058.19E+062.11E-015.36E+022.09E+052.12E+07 + 53L3 25.003.92E-011.89E+022.22E+041.29E+069.08E-021.37E+023.52E+042.77E+06 + 53L3 33.001.54E-014.67E+014.13E+031.95E+053.88E-023.45E+015.97E+033.63E+05 + 53L3 45.005.30E-029.83E+006.32E+022.32E+041.50E-027.44E+008.46E+023.87E+04 + 53L3 58.002.19E-022.76E+001.36E+024.05E+036.94E-032.13E+001.76E+026.36E+03 + 53L3 75.008.89E-037.63E-012.89E+016.89E+023.18E-036.04E-013.65E+011.05E+03 + 53L3 88.005.06E-033.44E-011.10E+012.29E+021.96E-032.77E-011.39E+013.48E+02 + 53L3 105.002.71E-031.43E-013.83E+006.80E+011.15E-031.18E-014.86E+001.04E+02 + 53L3 128.001.35E-035.39E-021.17E+001.75E+016.31E-044.53E-021.52E+002.74E+01 + 53L3 155.006.93E-042.11E-023.76E-014.74E+003.56E-041.82E-024.99E-017.71E+00 + 53L3 220.002.07E-043.90E-034.82E-024.46E-011.26E-043.50E-036.83E-027.97E-01 + 53L3 305.006.97E-058.40E-047.40E-035.16E-024.87E-057.79E-041.12E-021.03E-01 + 53L3 400.002.93E-052.46E-041.64E-039.10E-032.25E-052.32E-042.62E-031.98E-02 + 53L3 510.001.39E-058.59E-054.47E-042.04E-031.15E-058.13E-057.34E-044.73E-03 + 53L3 740.004.82E-061.91E-056.93E-052.37E-044.33E-061.78E-051.12E-045.75E-04 + 53L31000.002.23E-066.34E-061.76E-054.86E-052.06E-065.77E-062.64E-051.13E-04 + 53L31500.008.66E-071.72E-063.48E-067.36E-068.34E-071.54E-064.37E-061.43E-05 + 53M1 2.071.23E+014.13E+041.79E+061.69E+091.52E+039.22E+069.30E+092.25E+12 + 53M1 3.077.34E+007.94E+039.20E+054.50E+074.67E+021.33E+067.36E+081.46E+11 + 53M1 5.073.20E+007.62E+021.75E+059.92E+061.04E+021.16E+053.17E+074.43E+09 + 53M1 9.071.05E+002.93E+011.15E+041.02E+061.83E+017.19E+039.31E+058.16E+07 + 53M1 16.073.12E-016.37E-014.27E+024.14E+043.31E+004.99E+023.32E+041.78E+06 + 53M1 26.001.04E-013.90E-011.62E+011.74E+037.93E-015.68E+012.24E+037.80E+04 + 53M1 41.003.43E-022.08E-011.07E+006.43E+012.06E-017.77E+001.92E+024.43E+03 + 53M1 53.001.79E-021.18E-015.36E-011.06E+019.72E-022.62E+005.03E+019.19E+02 + 53M1 71.008.41E-035.58E-022.69E-012.13E+004.15E-027.83E-011.14E+011.60E+02 + 53M1 104.003.06E-031.86E-029.02E-024.84E-011.39E-021.71E-011.74E+001.75E+01 + 53M1 150.001.15E-036.05E-032.69E-021.23E-014.98E-034.24E-023.13E-012.29E+00 + 53M1 280.002.20E-048.61E-043.01E-031.06E-029.23E-044.64E-032.07E-029.20E-02 + 53M1 500.005.32E-051.60E-044.39E-041.19E-032.10E-047.25E-042.19E-036.51E-03 + 53M2 1.932.90E+019.38E+062.93E+101.17E+131.84E+023.20E+059.55E+071.19E+10 + 53M2 2.931.35E+011.16E+061.96E+096.38E+115.20E+014.90E+041.19E+071.68E+09 + 53M2 4.934.27E+008.51E+047.22E+071.68E+101.08E+015.05E+038.82E+051.09E+08 + 53M2 8.939.34E-014.37E+031.80E+062.72E+081.78E+004.06E+024.61E+044.16E+06 + 53M2 15.931.80E-012.46E+025.26E+045.04E+063.06E-013.70E+012.67E+031.62E+05 + 53M2 26.004.04E-022.20E+012.77E+031.77E+056.93E-025.04E+002.44E+021.01E+04 + 53M2 41.009.39E-032.38E+001.86E+028.04E+031.74E-028.07E-012.66E+017.67E+02 + 53M2 53.004.03E-036.88E-014.13E+011.43E+038.01E-032.90E-017.69E+001.80E+02 + 53M2 71.001.52E-031.69E-017.56E+002.03E+023.31E-039.11E-021.88E+003.45E+01 + 53M2 104.004.17E-042.78E-028.52E-011.64E+011.05E-032.04E-023.06E-014.08E+00 + 53M2 150.001.21E-045.10E-031.10E-011.55E+003.49E-044.94E-035.47E-025.42E-01 + 53M2 280.001.51E-053.14E-043.86E-033.27E-025.46E-054.68E-043.19E-031.95E-02 + 53M2 500.002.41E-062.81E-052.15E-041.19E-031.00E-055.75E-052.62E-041.07E-03 + 53M3 1.876.38E+011.85E+076.00E+102.41E+135.04E+011.24E+073.37E+119.05E+14 + 53M3 2.872.76E+012.15E+063.71E+091.19E+121.38E+011.46E+061.75E+102.40E+13 + 53M3 4.878.11E+001.50E+051.27E+082.90E+102.75E+001.04E+054.63E+082.98E+11 + 53M3 8.871.66E+007.29E+032.94E+064.35E+084.42E-015.25E+037.90E+062.33E+09 + 53M3 15.873.03E-013.89E+028.06E+047.52E+067.50E-022.89E+021.63E+052.42E+07 + 53M3 26.006.42E-023.26E+013.92E+032.42E+051.67E-022.48E+016.47E+035.62E+05 + 53M3 41.001.43E-023.32E+002.45E+021.02E+044.19E-032.60E+003.53E+021.92E+04 + 53M3 53.006.01E-039.20E-015.15E+011.71E+031.92E-037.32E-017.08E+012.98E+03 + 53M3 71.002.20E-032.14E-018.80E+002.25E+027.94E-041.74E-011.17E+013.72E+02 + 53M3 104.005.84E-043.23E-028.86E-011.61E+012.51E-042.71E-021.17E+002.62E+01 + 53M3 150.001.64E-045.35E-039.98E-021.31E+008.40E-054.67E-031.36E-012.22E+00 + 53M3 280.001.98E-052.71E-042.63E-031.98E-021.34E-052.52E-044.00E-033.95E-02 + 53M3 500.003.20E-062.03E-051.08E-045.04E-042.64E-061.94E-051.80E-041.19E-03 + 53M4 1.631.38E+025.39E+054.66E+108.59E+141.35E+013.37E+054.83E+096.44E+12 + 53M4 2.632.90E+014.64E+041.61E+091.33E+132.82E+003.05E+041.94E+081.78E+11 + 53M4 4.633.99E+002.57E+032.98E+071.02E+114.24E-011.77E+034.60E+062.60E+09 + 53M4 8.633.84E-011.05E+023.66E+055.13E+085.00E-027.59E+017.98E+042.58E+07 + 53M4 15.633.58E-024.77E+005.48E+033.51E+066.11E-033.74E+001.77E+033.30E+05 + 53M4 26.004.28E-033.25E-011.51E+025.14E+049.63E-042.82E-017.10E+018.18E+03 + 53M4 41.006.03E-042.87E-026.18E+001.22E+031.78E-042.80E-024.10E+003.07E+02 + 53M4 53.001.96E-047.24E-031.03E+001.51E+026.75E-057.62E-038.33E-014.90E+01 + 53M4 71.005.38E-051.51E-031.36E-011.43E+012.22E-051.73E-031.37E-016.13E+00 + 53M4 104.009.93E-061.96E-049.90E-036.79E-015.14E-062.53E-041.33E-024.17E-01 + 53M4 150.001.99E-062.83E-058.40E-043.84E-021.25E-064.02E-051.45E-033.28E-02 + 53M4 280.001.41E-071.15E-061.46E-053.36E-041.12E-071.82E-063.57E-054.79E-04 + 53M4 500.001.37E-086.99E-084.43E-075.32E-061.22E-081.10E-071.29E-061.11E-05 + 53M5 1.622.04E+027.19E+057.52E+101.31E+158.35E+003.84E+042.35E+101.85E+15 + 53M5 2.624.23E+016.07E+042.54E+091.96E+131.74E+003.49E+038.12E+082.52E+13 + 53M5 4.625.71E+003.31E+034.63E+071.46E+112.65E-012.06E+021.54E+071.63E+11 + 53M5 8.625.39E-011.33E+025.58E+057.14E+083.21E-029.25E+001.97E+056.72E+08 + 53M5 15.624.93E-025.90E+008.19E+034.74E+064.07E-034.86E-013.10E+033.85E+06 + 53M5 26.005.80E-033.92E-012.20E+026.67E+046.63E-043.94E-028.91E+014.95E+04 + 53M5 41.008.06E-043.35E-028.68E+001.52E+031.27E-044.23E-033.77E+001.08E+03 + 53M5 53.002.60E-048.29E-031.41E+001.82E+024.93E-051.21E-036.38E-011.29E+02 + 53M5 71.007.11E-051.68E-031.79E-011.63E+011.67E-052.93E-048.50E-021.18E+01 + 53M5 104.001.31E-052.09E-041.23E-027.18E-014.04E-064.67E-056.24E-035.47E-01 + 53M5 150.002.63E-062.89E-059.66E-043.68E-021.04E-068.25E-065.25E-043.03E-02 + 53M5 280.001.97E-071.11E-061.42E-052.55E-041.07E-074.76E-078.68E-062.50E-04 + 53M5 500.002.16E-086.81E-083.69E-073.08E-061.46E-084.05E-082.51E-073.51E-06 + 53N+ 50.007.63E-035.22E-013.24E+011.29E+033.12E-021.22E+004.97E+011.86E+03 + 53N+ 70.002.95E-031.08E-014.36E+001.23E+021.17E-022.87E-017.30E+001.81E+02 + 53N+ 100.001.07E-032.17E-025.46E-011.08E+014.18E-036.55E-021.05E+001.71E+01 + 53N+ 150.003.42E-043.87E-035.61E-027.28E-011.33E-031.32E-021.31E-011.36E+00 + 53N+ 200.001.53E-041.22E-031.21E-021.16E-016.02E-044.47E-033.28E-022.51E-01 + 53N+ 500.001.44E-055.06E-051.84E-046.97E-045.47E-051.99E-046.62E-042.23E-03 + 54K 35.562.99E+009.62E+006.11E+001.65E+001.45E+013.26E+021.24E+031.09E+03 + 54K 36.262.83E+009.93E+009.30E+004.96E+001.36E+013.02E+021.25E+031.61E+03 + 54K 37.562.58E+001.03E+011.50E+011.54E+011.22E+012.63E+021.24E+032.47E+03 + 54K 40.762.09E+001.03E+012.60E+015.48E+019.64E+001.93E+021.11E+033.80E+03 + 54K 44.561.65E+009.51E+003.27E+011.01E+027.42E+001.38E+029.09E+024.22E+03 + 54K 49.001.28E+008.17E+003.43E+011.33E+025.61E+009.61E+016.93E+023.88E+03 + 54K 55.009.42E-016.44E+003.12E+011.42E+024.00E+006.21E+014.74E+023.02E+03 + 54K 63.006.52E-014.64E+002.45E+011.23E+022.69E+003.72E+012.90E+022.00E+03 + 54K 75.004.05E-012.88E+001.59E+018.42E+011.63E+001.94E+011.48E+021.05E+03 + 54K 88.002.60E-011.80E+009.90E+005.24E+011.03E+001.07E+017.83E+015.40E+02 + 54K 105.001.59E-011.04E+005.54E+002.84E+016.20E-015.61E+003.81E+012.49E+02 + 54K 118.001.15E-017.19E-013.69E+001.83E+014.46E-013.67E+002.36E+011.47E+02 + 54K 135.007.90E-024.65E-012.27E+001.07E+013.06E-012.27E+001.36E+017.90E+01 + 54K 158.005.10E-022.78E-011.27E+005.63E+001.98E-011.30E+007.11E+003.81E+01 + 54K 185.003.30E-021.65E-017.06E-012.91E+001.28E-017.53E-013.75E+001.84E+01 + 54K 250.001.46E-026.18E-022.29E-018.19E-015.72E-022.73E-011.13E+004.63E+00 + 54K 335.006.78E-032.45E-027.88E-022.46E-012.66E-021.06E-013.69E-011.26E+00 + 54K 430.003.65E-031.16E-023.33E-029.27E-021.41E-024.90E-021.48E-014.39E-01 + 54K 540.002.14E-036.17E-031.60E-024.03E-028.04E-032.49E-026.68E-021.75E-01 + 54K 770.009.93E-042.52E-035.71E-031.24E-023.43E-039.17E-032.09E-024.59E-02 + 54K 1050.005.42E-041.26E-032.57E-035.01E-031.68E-034.04E-038.17E-031.57E-02 + 54K 1300.003.68E-048.08E-041.56E-032.83E-031.04E-032.36E-034.45E-037.96E-03 + 54K 1550.002.73E-045.71E-041.05E-031.82E-037.07E-041.53E-032.76E-034.67E-03 + 54L1 6.459.29E+002.58E+032.41E+054.19E+062.81E+021.84E+052.05E+075.52E+08 + 54L1 7.157.79E+001.45E+031.83E+055.42E+062.07E+021.12E+051.16E+073.86E+08 + 54L1 8.455.78E+005.42E+029.55E+044.39E+061.25E+025.09E+044.58E+061.81E+08 + 54L1 11.653.12E+006.35E+011.93E+041.26E+064.81E+011.13E+047.75E+053.25E+07 + 54L1 15.451.74E+006.28E+003.68E+032.77E+052.07E+013.07E+031.65E+056.36E+06 + 54L1 19.001.11E+001.40E+009.63E+027.84E+041.12E+011.20E+035.36E+041.87E+06 + 54L1 25.005.98E-011.35E+001.35E+021.26E+044.95E+003.52E+021.23E+043.61E+05 + 54L1 33.003.10E-011.30E+001.61E+011.68E+032.18E+001.04E+022.83E+036.82E+04 + 54L1 45.001.45E-018.26E-013.25E+001.57E+028.73E-012.76E+015.66E+021.08E+04 + 54L1 58.007.59E-024.76E-011.94E+002.65E+014.15E-019.57E+001.56E+022.42E+03 + 54L1 75.003.89E-022.47E-011.12E+007.39E+001.97E-013.36E+004.35E+015.46E+02 + 54L1 88.002.55E-021.58E-017.40E-014.10E+001.24E-011.77E+002.00E+012.20E+02 + 54L1 105.001.59E-029.45E-024.42E-012.23E+007.52E-028.88E-018.59E+008.14E+01 + 54L1 128.009.37E-035.20E-022.36E-011.11E+004.30E-024.16E-013.40E+002.73E+01 + 54L1 155.005.61E-032.87E-021.24E-015.48E-012.52E-022.04E-011.42E+009.76E+00 + 54L1 220.002.21E-039.61E-033.67E-021.41E-019.69E-035.79E-023.04E-011.59E+00 + 54L1 305.009.47E-043.52E-031.18E-023.95E-024.08E-031.90E-027.85E-023.21E-01 + 54L1 400.004.84E-041.59E-034.74E-031.41E-022.03E-037.90E-032.72E-029.20E-02 + 54L1 510.002.73E-048.10E-042.19E-035.86E-031.10E-033.74E-031.11E-023.20E-02 + 54L1 740.001.22E-043.17E-047.46E-041.70E-034.47E-041.27E-033.08E-037.23E-03 + 54L11000.006.74E-051.61E-043.41E-046.96E-042.21E-045.58E-041.19E-032.43E-03 + 54L11500.003.28E-057.03E-051.33E-042.37E-048.93E-051.99E-043.70E-046.49E-04 + 54L2 6.101.91E+011.61E+057.22E+074.11E+093.12E+017.76E+033.31E+055.31E+06 + 54L2 6.801.41E+019.34E+043.81E+072.66E+092.24E+015.07E+032.65E+057.02E+06 + 54L2 8.108.54E+003.88E+041.36E+071.11E+091.31E+012.54E+031.56E+056.03E+06 + 54L2 11.303.19E+007.33E+031.89E+061.61E+084.73E+006.81E+024.37E+042.09E+06 + 54L2 15.101.31E+001.73E+033.38E+052.63E+071.95E+002.15E+021.26E+045.89E+05 + 54L2 19.006.39E-015.52E+028.68E+045.99E+069.64E-018.64E+014.50E+031.93E+05 + 54L2 25.002.65E-011.42E+021.71E+049.94E+054.17E-012.90E+011.28E+034.74E+04 + 54L2 33.001.07E-013.63E+013.34E+031.59E+051.79E-019.62E+003.48E+021.08E+04 + 54L2 45.003.81E-028.01E+005.42E+022.03E+046.96E-022.81E+008.06E+012.01E+03 + 54L2 58.001.62E-022.35E+001.24E+023.77E+033.22E-021.03E+002.42E+014.98E+02 + 54L2 75.006.74E-036.84E-012.81E+016.93E+021.48E-023.76E-017.16E+001.21E+02 + 54L2 88.003.90E-033.20E-011.13E+012.43E+029.11E-032.01E-013.36E+004.99E+01 + 54L2 105.002.13E-031.39E-014.13E+007.69E+015.35E-031.01E-011.46E+001.89E+01 + 54L2 128.001.08E-035.52E-021.36E+002.14E+012.95E-034.69E-025.80E-016.38E+00 + 54L2 155.005.64E-042.29E-024.71E-016.34E+001.66E-032.25E-022.38E-012.26E+00 + 54L2 220.001.74E-044.71E-037.07E-027.16E-015.86E-045.97E-034.81E-023.48E-01 + 54L2 305.005.94E-051.13E-031.28E-021.01E-012.23E-041.77E-031.12E-026.38E-02 + 54L2 400.002.50E-053.62E-043.28E-032.11E-021.01E-046.63E-043.47E-031.63E-02 + 54L2 510.001.18E-051.35E-041.01E-035.50E-034.99E-052.80E-041.25E-035.02E-03 + 54L2 740.003.94E-063.24E-051.86E-047.93E-041.72E-057.77E-052.79E-048.99E-04 + 54L21000.001.69E-061.10E-055.17E-051.86E-047.32E-062.86E-058.80E-052.43E-04 + 54L21500.005.96E-072.85E-061.06E-053.10E-052.37E-067.87E-062.03E-054.71E-05 + 54L3 5.783.98E+013.43E+051.68E+081.04E+108.94E+002.30E+056.88E+082.08E+11 + 54L3 6.482.85E+011.92E+058.47E+076.37E+096.29E+001.30E+053.16E+088.64E+10 + 54L3 7.781.67E+017.60E+042.82E+072.44E+093.58E+005.23E+049.18E+072.12E+10 + 54L3 10.985.85E+001.33E+043.53E+063.10E+081.24E+009.38E+039.09E+061.53E+09 + 54L3 14.782.30E+002.95E+035.84E+054.62E+074.97E-012.13E+031.26E+061.62E+08 + 54L3 19.001.02E+008.29E+021.28E+058.79E+062.30E-016.11E+022.43E+052.46E+07 + 54L3 25.004.15E-012.08E+022.43E+041.39E+069.90E-021.56E+024.09E+043.21E+06 + 54L3 33.001.63E-015.13E+014.52E+032.11E+054.23E-023.94E+016.91E+034.19E+05 + 54L3 45.005.65E-021.08E+016.92E+022.52E+041.64E-028.48E+009.77E+024.45E+04 + 54L3 58.002.34E-023.02E+001.49E+024.41E+037.57E-032.43E+002.02E+027.31E+03 + 54L3 75.009.53E-038.38E-013.17E+017.51E+023.47E-036.88E-014.20E+011.21E+03 + 54L3 88.005.43E-033.78E-011.21E+012.50E+022.13E-033.15E-011.60E+013.99E+02 + 54L3 105.002.92E-031.57E-014.20E+007.43E+011.25E-031.34E-015.57E+001.19E+02 + 54L3 128.001.46E-035.93E-021.29E+001.91E+016.89E-045.15E-021.73E+003.13E+01 + 54L3 155.007.48E-042.32E-024.14E-015.19E+003.89E-042.06E-025.70E-018.79E+00 + 54L3 220.002.25E-044.28E-035.30E-024.89E-011.38E-043.95E-037.78E-029.07E-01 + 54L3 305.007.58E-059.24E-048.15E-035.67E-025.32E-058.78E-041.28E-021.17E-01 + 54L3 400.003.19E-052.71E-041.81E-031.00E-022.46E-052.61E-042.97E-032.25E-02 + 54L3 510.001.52E-059.45E-054.93E-042.24E-031.26E-059.11E-058.31E-045.36E-03 + 54L3 740.005.25E-062.10E-057.63E-052.61E-044.73E-061.98E-051.27E-046.50E-04 + 54L31000.002.42E-066.94E-061.93E-055.36E-052.25E-066.40E-062.97E-051.28E-04 + 54L31500.009.34E-071.89E-063.82E-068.10E-069.08E-071.69E-064.87E-061.60E-05 + 54M1 2.141.15E+013.89E+041.72E+061.45E+091.53E+039.00E+068.80E+092.05E+12 + 54M1 3.147.02E+007.85E+038.61E+054.59E+074.86E+021.37E+067.46E+081.44E+11 + 54M1 5.143.13E+008.02E+021.73E+059.17E+061.11E+021.25E+053.38E+074.64E+09 + 54M1 9.141.05E+003.39E+011.21E+041.02E+061.99E+017.93E+031.03E+068.87E+07 + 54M1 16.143.16E-017.55E-014.83E+024.43E+043.65E+005.57E+023.70E+041.96E+06 + 54M1 26.001.06E-013.57E-012.02E+012.02E+038.85E-016.44E+012.55E+038.83E+04 + 54M1 41.003.55E-022.00E-011.19E+007.84E+012.30E-018.77E+002.17E+024.99E+03 + 54M1 53.001.86E-021.16E-015.29E-011.28E+011.08E-012.95E+005.66E+011.03E+03 + 54M1 71.008.77E-035.57E-022.61E-012.36E+004.63E-028.80E-011.28E+011.79E+02 + 54M1 104.003.20E-031.89E-028.93E-024.93E-011.55E-021.92E-011.95E+001.95E+01 + 54M1 150.001.20E-036.22E-032.72E-021.25E-015.54E-034.74E-023.49E-012.55E+00 + 54M1 280.002.33E-048.99E-043.13E-031.10E-021.02E-035.15E-032.30E-021.02E-01 + 54M1 500.005.67E-051.70E-044.65E-041.26E-032.32E-048.02E-042.42E-037.19E-03 + 54M2 2.002.72E+018.76E+062.65E+101.02E+131.86E+023.11E+058.90E+071.04E+10 + 54M2 3.001.31E+011.15E+061.91E+096.01E+115.44E+015.02E+041.18E+071.58E+09 + 54M2 5.004.25E+008.84E+047.43E+071.69E+101.16E+015.37E+039.15E+051.09E+08 + 54M2 9.009.57E-014.68E+031.92E+062.85E+081.95E+004.42E+024.93E+044.35E+06 + 54M2 16.001.89E-012.68E+025.72E+045.42E+063.41E-014.08E+012.91E+031.73E+05 + 54M2 26.004.32E-022.45E+013.09E+031.96E+057.81E-025.65E+002.71E+021.12E+04 + 54M2 41.001.01E-022.66E+002.08E+028.94E+031.97E-029.07E-012.97E+018.49E+02 + 54M2 53.004.37E-037.69E-014.62E+011.59E+039.06E-033.26E-018.59E+001.99E+02 + 54M2 71.001.65E-031.89E-018.47E+002.26E+023.75E-031.03E-012.11E+003.84E+01 + 54M2 104.004.57E-043.12E-029.57E-011.83E+011.19E-032.30E-023.43E-014.55E+00 + 54M2 150.001.33E-045.73E-031.24E-011.73E+003.97E-045.59E-036.16E-026.07E-01 + 54M2 280.001.68E-053.55E-044.36E-033.69E-026.23E-055.32E-043.61E-032.20E-02 + 54M2 500.002.71E-063.18E-052.44E-041.35E-031.15E-056.56E-052.98E-041.22E-03 + 54M3 1.946.01E+011.74E+075.46E+102.11E+135.01E+011.21E+073.20E+118.37E+14 + 54M3 2.942.68E+012.14E+063.62E+091.13E+121.41E+011.52E+061.80E+102.44E+13 + 54M3 4.948.09E+001.56E+051.31E+082.92E+102.91E+001.13E+055.05E+083.24E+11 + 54M3 8.941.70E+007.80E+033.13E+064.55E+084.76E-015.85E+038.93E+062.64E+09 + 54M3 15.943.16E-014.23E+028.73E+048.04E+068.15E-023.27E+021.87E+052.78E+07 + 54M3 26.006.84E-023.61E+014.34E+032.66E+051.84E-022.87E+017.61E+036.62E+05 + 54M3 41.001.54E-023.68E+002.71E+021.12E+044.61E-033.00E+004.13E+022.25E+04 + 54M3 53.006.47E-031.02E+005.71E+011.89E+032.12E-038.43E-018.26E+013.49E+03 + 54M3 71.002.38E-032.38E-019.76E+002.48E+028.75E-042.00E-011.36E+014.33E+02 + 54M3 104.006.35E-043.58E-029.83E-011.78E+012.77E-043.12E-021.36E+003.04E+01 + 54M3 150.001.78E-045.94E-031.11E-011.44E+009.27E-055.36E-031.57E-012.56E+00 + 54M3 280.002.17E-053.01E-042.92E-032.20E-021.48E-052.88E-044.60E-034.55E-02 + 54M3 500.003.52E-062.26E-051.21E-045.61E-042.91E-062.19E-052.06E-041.36E-03 + 54M4 1.681.33E+025.16E+054.37E+107.89E+141.37E+013.39E+054.73E+096.11E+12 + 54M4 2.682.93E+014.71E+041.63E+091.35E+132.97E+003.25E+042.05E+081.84E+11 + 54M4 4.684.18E+002.73E+033.21E+071.11E+114.61E-011.96E+035.11E+062.85E+09 + 54M4 8.684.14E-011.14E+024.08E+055.78E+085.54E-028.64E+019.14E+042.93E+07 + 54M4 15.683.94E-025.30E+006.24E+034.03E+066.88E-034.32E+002.06E+033.82E+05 + 54M4 26.004.81E-033.69E-011.76E+026.07E+041.10E-033.32E-018.41E+019.67E+03 + 54M4 41.006.81E-043.27E-027.21E+001.44E+032.04E-043.29E-024.86E+003.63E+02 + 54M4 53.002.23E-048.29E-031.20E+001.78E+027.77E-058.97E-039.86E-015.79E+01 + 54M4 71.006.17E-051.73E-031.58E-011.68E+012.56E-052.04E-031.62E-017.25E+00 + 54M4 104.001.15E-052.26E-041.16E-028.01E-015.94E-062.98E-041.57E-024.94E-01 + 54M4 150.002.29E-063.28E-059.82E-044.54E-021.45E-064.74E-051.72E-033.89E-02 + 54M4 280.001.57E-071.35E-061.71E-053.98E-041.30E-072.15E-064.25E-055.70E-04 + 54M4 500.001.47E-088.24E-085.20E-076.30E-061.42E-081.30E-071.53E-061.33E-05 + 54M5 1.671.96E+026.77E+056.96E+101.18E+158.39E+003.76E+042.27E+101.74E+15 + 54M5 2.674.24E+016.08E+042.57E+091.96E+131.82E+003.63E+038.55E+082.64E+13 + 54M5 4.675.95E+003.47E+034.97E+071.57E+112.86E-012.24E+021.72E+071.84E+11 + 54M5 8.675.79E-011.43E+026.22E+058.01E+083.54E-021.03E+012.28E+057.93E+08 + 54M5 15.675.41E-026.50E+009.32E+035.42E+064.55E-035.50E-013.66E+034.63E+06 + 54M5 26.006.50E-034.41E-012.56E+027.84E+047.52E-044.53E-021.08E+026.10E+04 + 54M5 41.009.09E-043.79E-021.01E+011.78E+031.44E-044.86E-034.55E+001.33E+03 + 54M5 53.002.95E-049.41E-031.65E+002.13E+025.63E-051.39E-037.69E-011.58E+02 + 54M5 71.008.10E-051.91E-032.09E-011.92E+011.91E-053.37E-041.02E-011.44E+01 + 54M5 104.001.51E-052.39E-041.44E-028.44E-014.63E-065.38E-057.51E-036.66E-01 + 54M5 150.003.04E-063.32E-051.13E-034.32E-021.19E-069.52E-066.30E-043.67E-02 + 54M5 280.002.10E-071.28E-061.65E-053.00E-041.23E-075.50E-071.03E-053.02E-04 + 54M5 500.002.32E-087.75E-084.28E-073.62E-061.67E-084.68E-082.96E-074.21E-06 + 54N+ 50.008.25E-035.96E-013.73E+011.49E+033.58E-021.42E+005.90E+012.24E+03 + 54N+ 70.003.20E-031.23E-015.02E+001.42E+021.34E-023.34E-018.60E+002.16E+02 + 54N+ 100.001.17E-032.45E-026.27E-011.24E+014.80E-037.58E-021.23E+002.02E+01 + 54N+ 150.003.72E-044.32E-036.41E-028.37E-011.52E-031.52E-021.53E-011.59E+00 + 54N+ 200.001.67E-041.36E-031.38E-021.33E-016.88E-045.13E-033.79E-022.92E-01 + 54N+ 500.001.58E-055.59E-052.06E-047.90E-046.22E-052.27E-047.57E-042.55E-03 + 55K 36.982.76E+008.49E+005.14E+001.30E+001.41E+013.05E+021.11E+039.29E+02 + 55K 37.682.62E+008.76E+007.74E+003.84E+001.33E+012.83E+021.12E+031.36E+03 + 55K 38.982.39E+009.10E+001.24E+011.18E+011.20E+012.48E+021.11E+032.09E+03 + 55K 42.181.95E+009.17E+002.16E+014.23E+019.56E+001.84E+021.01E+033.23E+03 + 55K 45.981.56E+008.49E+002.74E+017.88E+017.42E+001.33E+028.33E+023.64E+03 + 55K 50.001.25E+007.48E+002.92E+011.04E+025.81E+009.67E+016.60E+023.45E+03 + 55K 56.009.22E-015.98E+002.72E+011.16E+024.17E+006.31E+014.59E+022.76E+03 + 55K 64.006.43E-014.36E+002.19E+011.05E+022.82E+003.82E+012.86E+021.87E+03 + 55K 76.004.03E-012.75E+001.46E+017.39E+011.72E+002.01E+011.49E+021.01E+03 + 55K 89.002.61E-011.74E+009.23E+004.71E+011.09E+001.12E+017.94E+015.30E+02 + 55K 106.001.61E-011.02E+005.25E+002.61E+016.62E-015.90E+003.91E+012.48E+02 + 55K 119.001.16E-017.08E-013.53E+001.70E+014.77E-013.88E+002.44E+011.48E+02 + 55K 136.008.03E-024.61E-012.20E+001.01E+013.28E-012.40E+001.41E+018.05E+01 + 55K 159.005.21E-022.77E-011.24E+005.40E+002.13E-011.38E+007.44E+003.92E+01 + 55K 185.003.44E-021.69E-017.11E-012.89E+001.40E-018.19E-014.03E+001.95E+01 + 55K 250.001.52E-026.36E-022.33E-018.27E-016.24E-022.97E-011.22E+004.94E+00 + 55K 335.007.09E-032.54E-028.10E-022.51E-012.90E-021.15E-013.98E-011.36E+00 + 55K 430.003.82E-031.21E-023.45E-029.56E-021.54E-025.32E-021.60E-014.71E-01 + 55K 540.002.24E-036.46E-031.67E-024.19E-028.73E-032.70E-027.22E-021.88E-01 + 55K 770.001.05E-032.66E-036.01E-031.31E-023.72E-039.93E-032.26E-024.94E-02 + 55K 1050.005.71E-041.33E-032.72E-035.29E-031.81E-034.36E-038.82E-031.70E-02 + 55K 1300.003.89E-048.54E-041.65E-033.00E-031.12E-032.54E-034.80E-038.57E-03 + 55K 1550.002.87E-046.05E-041.12E-031.94E-037.59E-041.65E-032.97E-035.03E-03 + 55L1 6.718.61E+002.34E+032.08E+053.38E+062.77E+021.72E+051.84E+074.74E+08 + 55L1 7.417.27E+001.35E+031.60E+054.43E+062.06E+021.07E+051.06E+073.37E+08 + 55L1 8.715.45E+005.23E+028.63E+043.72E+061.27E+024.99E+044.33E+061.64E+08 + 55L1 11.913.00E+006.70E+011.85E+041.15E+064.98E+011.15E+047.69E+053.10E+07 + 55L1 15.711.70E+007.44E+003.74E+032.66E+052.18E+013.21E+031.68E+056.30E+06 + 55L1 19.001.13E+001.67E+001.12E+038.51E+041.24E+011.35E+036.00E+042.05E+06 + 55L1 25.006.08E-011.18E+001.65E+021.41E+045.48E+003.95E+021.37E+043.97E+05 + 55L1 33.003.17E-011.18E+002.05E+011.97E+032.41E+001.17E+023.15E+037.53E+04 + 55L1 45.001.48E-017.87E-013.42E+001.92E+029.66E-013.08E+016.30E+021.19E+04 + 55L1 58.007.82E-024.64E-011.85E+003.14E+014.59E-011.07E+011.73E+022.67E+03 + 55L1 75.004.02E-022.44E-011.07E+007.89E+002.18E-013.73E+004.82E+016.02E+02 + 55L1 88.002.64E-021.58E-017.16E-014.18E+001.37E-011.97E+002.21E+012.42E+02 + 55L1 105.001.65E-029.51E-024.33E-012.23E+008.30E-029.85E-019.49E+008.96E+01 + 55L1 128.009.75E-035.27E-022.34E-011.11E+004.74E-024.60E-013.75E+003.01E+01 + 55L1 155.005.84E-032.93E-021.25E-015.50E-012.78E-022.25E-011.56E+001.07E+01 + 55L1 220.002.31E-039.91E-033.75E-021.44E-011.07E-026.38E-023.35E-011.74E+00 + 55L1 305.009.94E-043.66E-031.22E-024.08E-024.48E-032.09E-028.61E-023.51E-01 + 55L1 400.005.09E-041.66E-034.94E-031.47E-022.22E-038.67E-032.98E-021.01E-01 + 55L1 510.002.88E-048.52E-042.30E-036.16E-031.21E-034.09E-031.21E-023.50E-02 + 55L1 740.001.29E-043.36E-047.90E-041.81E-034.88E-041.38E-033.36E-037.89E-03 + 55L11000.007.14E-051.71E-043.63E-047.42E-042.41E-046.09E-041.30E-032.65E-03 + 55L11500.003.47E-057.49E-051.42E-042.54E-049.67E-052.17E-044.03E-047.06E-04 + 55L2 6.361.77E+011.45E+056.19E+073.36E+093.06E+017.25E+032.94E+054.40E+06 + 55L2 7.061.32E+018.56E+043.34E+072.22E+092.22E+014.81E+032.39E+055.89E+06 + 55L2 8.368.14E+003.66E+041.23E+079.63E+081.33E+012.47E+031.44E+055.23E+06 + 55L2 11.563.13E+007.23E+031.81E+061.49E+084.92E+006.87E+024.22E+041.93E+06 + 55L2 15.361.32E+001.75E+033.36E+052.53E+072.06E+002.22E+021.26E+045.66E+05 + 55L2 19.006.77E-016.09E+029.54E+046.46E+061.08E+009.54E+014.87E+032.04E+05 + 55L2 25.002.82E-011.57E+021.89E+041.08E+064.65E-013.21E+011.39E+035.06E+04 + 55L2 33.001.14E-014.01E+013.68E+031.73E+052.00E-011.06E+013.81E+021.17E+04 + 55L2 45.004.08E-028.85E+005.98E+022.22E+047.78E-023.12E+008.84E+012.18E+03 + 55L2 58.001.74E-022.60E+001.37E+024.14E+033.60E-021.15E+002.66E+015.44E+02 + 55L2 75.007.28E-037.58E-013.11E+017.62E+021.66E-024.18E-017.91E+001.32E+02 + 55L2 88.004.22E-033.55E-011.25E+012.68E+021.02E-022.24E-013.72E+005.48E+01 + 55L2 105.002.31E-031.54E-014.59E+008.49E+016.01E-031.13E-011.62E+002.08E+01 + 55L2 128.001.18E-036.14E-021.51E+002.37E+013.31E-035.24E-026.44E-017.05E+00 + 55L2 155.006.15E-042.54E-025.24E-017.02E+001.87E-032.52E-022.65E-012.50E+00 + 55L2 220.001.90E-045.25E-037.89E-027.96E-016.60E-046.69E-035.37E-023.86E-01 + 55L2 305.006.54E-051.26E-031.43E-021.12E-012.52E-041.99E-031.26E-027.11E-02 + 55L2 400.002.77E-054.04E-043.67E-032.36E-021.14E-047.47E-043.89E-031.83E-02 + 55L2 510.001.31E-051.51E-041.14E-036.17E-035.64E-053.16E-041.41E-035.63E-03 + 55L2 740.004.38E-063.63E-052.09E-048.92E-041.94E-058.78E-053.14E-041.01E-03 + 55L21000.001.89E-061.23E-055.82E-052.09E-048.31E-063.24E-059.94E-052.74E-04 + 55L21500.006.53E-073.21E-061.20E-053.51E-052.69E-068.93E-062.30E-055.33E-05 + 55L3 6.013.68E+013.08E+051.45E+088.57E+098.63E+002.16E+056.18E+081.80E+11 + 55L3 6.712.68E+011.76E+057.48E+075.35E+096.14E+001.25E+052.92E+087.70E+10 + 55L3 8.011.59E+017.18E+042.58E+072.13E+093.56E+005.15E+048.82E+071.98E+10 + 55L3 11.215.74E+001.31E+043.39E+062.87E+081.27E+009.64E+039.23E+061.52E+09 + 55L3 15.012.30E+002.99E+035.81E+054.45E+075.16E-012.25E+031.33E+061.67E+08 + 55L3 19.001.08E+009.08E+021.40E+059.43E+062.50E-016.97E+022.82E+052.85E+07 + 55L3 25.004.39E-012.27E+022.65E+041.50E+061.08E-011.78E+024.74E+043.71E+06 + 55L3 33.001.73E-015.62E+014.94E+032.28E+054.61E-024.48E+017.98E+034.83E+05 + 55L3 45.006.02E-021.18E+017.57E+022.73E+041.79E-029.66E+001.13E+035.12E+04 + 55L3 58.002.50E-023.31E+001.63E+024.79E+038.25E-032.76E+002.32E+028.39E+03 + 55L3 75.001.02E-029.18E-013.47E+018.17E+023.78E-037.82E-014.81E+011.38E+03 + 55L3 88.005.83E-034.15E-011.33E+012.72E+022.33E-033.58E-011.83E+014.56E+02 + 55L3 105.003.14E-031.73E-014.61E+008.10E+011.36E-031.52E-016.37E+001.36E+02 + 55L3 128.001.57E-036.50E-021.41E+002.09E+017.51E-045.84E-021.98E+003.57E+01 + 55L3 155.008.07E-042.55E-024.54E-015.67E+004.24E-042.33E-026.50E-011.00E+01 + 55L3 220.002.43E-044.70E-035.83E-025.36E-011.50E-044.47E-038.84E-021.03E+00 + 55L3 305.008.21E-051.02E-038.96E-036.22E-025.80E-059.89E-041.45E-021.32E-01 + 55L3 400.003.46E-052.98E-041.99E-031.10E-022.69E-052.93E-043.36E-032.54E-02 + 55L3 510.001.66E-051.04E-045.42E-042.46E-031.37E-051.02E-049.39E-046.06E-03 + 55L3 740.005.75E-062.30E-058.39E-052.87E-045.15E-062.20E-051.42E-047.34E-04 + 55L31000.002.60E-067.62E-062.13E-055.90E-052.45E-067.08E-063.33E-051.44E-04 + 55L31500.001.02E-062.06E-064.19E-068.90E-069.86E-071.86E-065.43E-061.80E-05 + 55M1 2.221.09E+013.66E+041.68E+061.24E+091.54E+038.75E+068.31E+091.87E+12 + 55M1 3.226.73E+007.76E+038.13E+054.63E+075.06E+021.40E+067.53E+081.41E+11 + 55M1 5.223.06E+008.39E+021.70E+058.55E+061.19E+021.33E+053.60E+074.84E+09 + 55M1 9.221.04E+003.88E+011.26E+041.02E+062.17E+018.72E+031.13E+069.62E+07 + 55M1 16.223.19E-019.23E-015.41E+024.72E+044.01E+006.21E+024.12E+042.17E+06 + 55M1 26.001.09E-013.28E-012.50E+012.32E+039.87E-017.30E+012.89E+039.99E+04 + 55M1 41.003.66E-021.91E-011.37E+009.48E+012.57E-019.90E+002.45E+025.62E+03 + 55M1 53.001.93E-021.13E-015.34E-011.55E+011.21E-013.32E+006.37E+011.16E+03 + 55M1 71.009.12E-035.54E-022.55E-012.66E+005.16E-029.87E-011.43E+012.00E+02 + 55M1 104.003.34E-031.92E-028.85E-025.08E-011.72E-022.14E-012.18E+002.18E+01 + 55M1 150.001.26E-036.38E-032.75E-021.27E-016.16E-035.28E-023.89E-012.84E+00 + 55M1 280.002.46E-049.40E-043.25E-031.14E-021.13E-035.71E-032.55E-021.13E-01 + 55M1 500.006.02E-051.80E-044.92E-041.34E-032.56E-048.85E-042.67E-037.93E-03 + 55M2 2.062.57E+018.26E+062.43E+109.02E+121.88E+023.06E+058.46E+079.41E+09 + 55M2 3.061.27E+011.14E+061.88E+095.75E+115.71E+015.17E+041.18E+071.52E+09 + 55M2 5.064.24E+009.21E+047.69E+071.72E+101.25E+015.73E+039.55E+051.11E+08 + 55M2 9.069.80E-015.02E+032.05E+063.01E+082.14E+004.82E+025.29E+044.57E+06 + 55M2 16.061.97E-012.93E+026.23E+045.84E+063.78E-014.49E+013.17E+031.86E+05 + 55M2 26.004.61E-022.73E+013.45E+032.17E+058.80E-026.33E+003.01E+021.23E+04 + 55M2 41.001.09E-022.96E+002.32E+029.92E+032.22E-021.02E+003.31E+019.39E+02 + 55M2 53.004.72E-038.58E-015.16E+011.77E+031.02E-023.66E-019.58E+002.21E+02 + 55M2 71.001.79E-032.12E-019.48E+002.52E+024.24E-031.15E-012.36E+004.26E+01 + 55M2 104.005.00E-043.50E-021.07E+002.05E+011.35E-032.59E-023.84E-015.08E+00 + 55M2 150.001.46E-046.42E-031.39E-011.94E+004.51E-046.31E-036.92E-026.79E-01 + 55M2 280.001.86E-053.99E-044.92E-034.15E-027.10E-056.03E-044.07E-032.47E-02 + 55M2 500.003.02E-063.60E-052.77E-041.53E-031.31E-057.47E-053.38E-041.38E-03 + 55M3 2.005.72E+011.64E+075.02E+101.88E+135.00E+011.20E+073.08E+117.85E+14 + 55M3 3.002.60E+012.13E+063.56E+091.08E+121.46E+011.58E+061.85E+102.50E+13 + 55M3 5.008.09E+001.62E+051.35E+082.95E+103.07E+001.23E+055.51E+083.53E+11 + 55M3 9.001.74E+008.33E+033.34E+064.77E+085.12E-016.51E+031.01E+072.98E+09 + 55M3 16.003.29E-014.59E+029.44E+048.59E+068.85E-023.70E+022.15E+053.20E+07 + 55M3 26.007.26E-023.99E+014.81E+032.92E+052.02E-023.30E+018.92E+037.79E+05 + 55M3 41.001.64E-024.07E+003.00E+021.23E+045.07E-033.45E+004.83E+022.63E+04 + 55M3 53.006.95E-031.13E+006.32E+012.07E+032.33E-039.70E-019.62E+014.06E+03 + 55M3 71.002.56E-032.63E-011.08E+012.73E+029.62E-042.30E-011.58E+015.04E+02 + 55M3 104.006.87E-043.97E-021.09E+001.96E+013.05E-043.58E-021.57E+003.52E+01 + 55M3 150.001.94E-046.59E-031.23E-011.60E+001.02E-046.14E-031.81E-012.95E+00 + 55M3 280.002.37E-053.34E-043.25E-032.44E-021.63E-053.28E-045.29E-035.22E-02 + 55M3 500.003.89E-062.51E-051.34E-046.23E-043.20E-062.48E-052.36E-041.56E-03 + 55M4 1.741.27E+024.83E+053.97E+106.96E+141.37E+013.33E+054.50E+095.60E+12 + 55M4 2.742.92E+014.71E+041.62E+091.33E+133.09E+003.40E+042.12E+081.85E+11 + 55M4 4.744.34E+002.86E+033.41E+071.18E+114.96E-012.15E+035.60E+063.07E+09 + 55M4 8.744.43E-011.24E+024.51E+056.44E+086.11E-029.77E+011.04E+053.29E+07 + 55M4 15.744.31E-025.85E+007.05E+034.60E+067.69E-034.96E+002.38E+034.38E+05 + 55M4 26.005.38E-034.18E-012.05E+027.13E+041.25E-033.89E-019.93E+011.14E+04 + 55M4 41.007.68E-043.72E-028.38E+001.69E+032.33E-043.86E-025.73E+004.28E+02 + 55M4 53.002.52E-049.46E-031.40E+002.10E+028.90E-051.05E-021.16E+006.82E+01 + 55M4 71.006.99E-051.98E-031.84E-011.98E+012.94E-052.40E-031.92E-018.55E+00 + 55M4 104.001.30E-052.60E-041.35E-029.42E-016.85E-063.50E-041.86E-025.83E-01 + 55M4 150.002.60E-063.78E-051.14E-035.34E-021.67E-065.58E-052.03E-034.60E-02 + 55M4 280.001.79E-071.56E-062.00E-054.69E-041.51E-072.53E-065.03E-056.75E-04 + 55M4 500.001.73E-089.50E-086.08E-077.43E-061.65E-081.53E-071.82E-061.57E-05 + 55M5 1.731.88E+026.38E+056.45E+101.06E+158.41E+003.69E+042.19E+101.63E+15 + 55M5 2.734.25E+016.08E+042.58E+091.96E+131.90E+003.77E+038.97E+082.76E+13 + 55M5 4.736.19E+003.62E+035.31E+071.69E+113.07E-012.43E+021.91E+072.07E+11 + 55M5 8.736.19E-011.54E+026.92E+058.95E+083.88E-021.15E+012.63E+059.32E+08 + 55M5 15.735.91E-027.13E+001.06E+046.19E+065.06E-036.20E-014.31E+035.55E+06 + 55M5 26.007.25E-034.95E-012.98E+029.20E+048.51E-045.20E-021.30E+027.49E+04 + 55M5 41.001.02E-034.28E-021.18E+012.09E+031.64E-045.58E-035.48E+001.62E+03 + 55M5 53.003.32E-041.06E-021.92E+002.50E+026.40E-051.60E-039.25E-011.93E+02 + 55M5 71.009.17E-052.17E-032.44E-012.25E+012.18E-053.87E-041.23E-011.76E+01 + 55M5 104.001.70E-052.73E-041.67E-029.89E-015.29E-066.18E-059.00E-038.07E-01 + 55M5 150.003.40E-063.79E-051.31E-035.07E-021.36E-061.09E-057.53E-044.44E-02 + 55M5 280.002.45E-071.48E-061.93E-053.51E-041.41E-076.34E-071.23E-053.63E-04 + 55M5 500.002.70E-089.01E-084.99E-074.24E-061.92E-085.39E-083.47E-075.03E-06 + 55N+ 50.008.97E-036.80E-014.29E+011.72E+034.14E-021.67E+007.03E+012.69E+03 + 55N+ 70.003.49E-031.39E-015.77E+001.64E+021.55E-023.90E-011.02E+012.57E+02 + 55N+ 100.001.28E-032.77E-027.20E-011.43E+015.54E-038.83E-021.44E+002.39E+01 + 55N+ 150.004.08E-044.85E-037.34E-029.62E-011.76E-031.76E-021.78E-011.87E+00 + 55N+ 200.001.84E-041.52E-031.57E-021.53E-017.93E-045.94E-034.41E-023.41E-01 + 55N+ 500.001.74E-056.22E-052.32E-048.99E-047.12E-052.61E-048.71E-042.95E-03 + 56K 38.442.55E+007.51E+004.34E+001.03E+001.38E+012.85E+029.95E+027.98E+02 + 56K 39.142.43E+007.74E+006.46E+002.99E+001.31E+012.65E+021.00E+031.16E+03 + 56K 40.442.22E+008.04E+001.03E+019.11E+001.18E+012.34E+029.96E+021.77E+03 + 56K 43.641.83E+008.14E+001.79E+013.28E+019.49E+001.76E+029.12E+022.75E+03 + 56K 47.441.47E+007.59E+002.30E+016.19E+017.42E+001.28E+027.64E+023.15E+03 + 56K 51.001.21E+006.84E+002.47E+018.14E+016.00E+009.74E+016.28E+023.05E+03 + 56K 57.009.03E-015.55E+002.37E+019.46E+014.34E+006.40E+014.44E+022.52E+03 + 56K 65.006.35E-014.10E+001.96E+018.85E+012.96E+003.91E+012.81E+021.75E+03 + 56K 77.004.00E-012.63E+001.33E+016.47E+011.81E+002.08E+011.49E+029.68E+02 + 56K 90.002.61E-011.68E+008.60E+004.23E+011.16E+001.17E+018.04E+015.20E+02 + 56K 107.001.62E-019.96E-014.98E+002.40E+017.05E-016.19E+004.01E+012.48E+02 + 56K 120.001.18E-016.96E-013.38E+001.59E+015.10E-014.09E+002.51E+011.49E+02 + 56K 137.008.16E-024.57E-012.13E+009.59E+003.51E-012.55E+001.46E+018.19E+01 + 56K 160.005.32E-022.77E-011.22E+005.18E+002.28E-011.47E+007.78E+004.03E+01 + 56K 185.003.57E-021.73E-017.16E-012.87E+001.53E-018.90E-014.33E+002.07E+01 + 56K 250.001.59E-026.55E-022.37E-018.33E-016.81E-023.22E-011.31E+005.27E+00 + 56K 335.007.42E-032.63E-028.33E-022.56E-013.16E-021.25E-014.29E-011.45E+00 + 56K 430.004.01E-031.26E-023.58E-029.86E-021.67E-025.76E-021.72E-015.05E-01 + 56K 540.002.36E-036.75E-031.74E-024.35E-029.47E-032.93E-027.78E-022.02E-01 + 56K 770.001.10E-032.79E-036.31E-031.37E-024.02E-031.07E-022.43E-025.31E-02 + 56K 1050.006.01E-041.40E-032.87E-035.59E-031.95E-034.71E-039.51E-031.83E-02 + 56K 1300.004.09E-049.03E-041.74E-033.18E-031.20E-032.74E-035.17E-039.22E-03 + 56K 1550.003.03E-046.40E-041.18E-032.05E-038.15E-041.78E-033.20E-035.42E-03 + 56L1 6.997.97E+002.11E+031.78E+052.71E+062.71E+021.61E+051.65E+074.04E+08 + 56L1 7.696.78E+001.24E+031.39E+053.60E+062.04E+021.02E+059.70E+062.93E+08 + 56L1 8.995.13E+005.02E+027.75E+043.13E+061.28E+024.87E+044.08E+061.47E+08 + 56L1 12.192.88E+007.00E+011.77E+041.03E+065.14E+011.17E+047.58E+052.94E+07 + 56L1 15.991.65E+008.66E+003.76E+032.53E+052.29E+013.33E+031.71E+056.20E+06 + 56L1 20.001.02E+001.55E+009.18E+026.68E+041.18E+011.20E+035.07E+041.65E+06 + 56L1 26.005.65E-011.06E+001.50E+021.21E+045.40E+003.72E+021.24E+043.45E+05 + 56L1 34.003.01E-011.05E+002.07E+011.84E+032.44E+001.15E+023.00E+036.93E+04 + 56L1 46.001.44E-017.19E-013.44E+001.96E+021.00E+003.13E+016.25E+021.15E+04 + 56L1 59.007.71E-024.34E-011.73E+003.35E+014.83E-011.10E+011.76E+022.66E+03 + 56L1 76.004.01E-022.33E-019.98E-018.10E+002.31E-013.93E+005.00E+016.14E+02 + 56L1 89.002.65E-021.52E-016.73E-014.16E+001.47E-012.09E+002.31E+012.50E+02 + 56L1 106.001.67E-029.29E-024.13E-012.18E+008.92E-021.05E+001.00E+019.35E+01 + 56L1 129.009.93E-035.21E-022.27E-011.08E+005.12E-024.94E-013.99E+003.17E+01 + 56L1 155.006.09E-032.99E-021.25E-015.53E-013.06E-022.48E-011.72E+001.18E+01 + 56L1 220.002.41E-031.02E-023.82E-021.47E-011.17E-027.02E-023.68E-011.91E+00 + 56L1 305.001.04E-033.80E-031.26E-024.21E-024.92E-032.29E-029.45E-023.85E-01 + 56L1 400.005.36E-041.73E-035.15E-031.53E-022.44E-039.51E-033.26E-021.10E-01 + 56L1 510.003.04E-048.94E-042.42E-036.48E-031.32E-034.48E-031.32E-023.82E-02 + 56L1 740.001.36E-043.55E-048.36E-041.92E-035.32E-041.51E-033.67E-038.61E-03 + 56L11000.007.57E-051.81E-043.87E-047.91E-042.62E-046.64E-041.41E-032.88E-03 + 56L11500.003.68E-057.98E-051.52E-042.72E-041.05E-042.36E-044.38E-047.68E-04 + 56L2 6.621.64E+011.30E+055.30E+072.74E+093.00E+016.76E+032.60E+053.64E+06 + 56L2 7.321.24E+017.83E+042.93E+071.85E+092.21E+014.56E+032.14E+054.94E+06 + 56L2 8.627.75E+003.45E+041.12E+078.31E+081.34E+012.40E+031.33E+054.53E+06 + 56L2 11.823.07E+007.11E+031.73E+061.36E+085.10E+006.90E+024.07E+041.77E+06 + 56L2 15.621.31E+001.77E+033.33E+052.43E+072.18E+002.29E+021.25E+045.42E+05 + 56L2 20.006.09E-015.21E+027.73E+044.99E+061.02E+008.58E+014.17E+031.67E+05 + 56L2 26.002.64E-011.43E+021.65E+049.03E+054.60E-013.03E+011.26E+034.41E+04 + 56L2 34.001.10E-013.83E+013.40E+031.55E+052.03E-011.05E+013.61E+021.07E+04 + 56L2 46.004.07E-028.78E+005.80E+022.10E+048.13E-023.17E+008.74E+012.10E+03 + 56L2 59.001.77E-022.64E+001.37E+024.06E+033.83E-021.19E+002.70E+015.39E+02 + 56L2 76.007.51E-037.87E-013.19E+017.68E+021.78E-024.41E-018.19E+001.34E+02 + 56L2 89.004.39E-033.72E-011.29E+012.74E+021.11E-022.38E-013.90E+005.65E+01 + 56L2 106.002.42E-031.64E-014.82E+008.81E+016.55E-031.21E-011.72E+002.17E+01 + 56L2 129.001.24E-036.56E-021.61E+002.49E+013.64E-035.67E-026.88E-017.44E+00 + 56L2 155.006.69E-042.82E-025.82E-017.78E+002.10E-032.81E-022.94E-012.76E+00 + 56L2 220.002.08E-045.84E-038.79E-028.84E-017.43E-047.49E-035.98E-024.29E-01 + 56L2 305.007.17E-051.41E-031.60E-021.25E-012.84E-042.24E-031.40E-027.92E-02 + 56L2 400.003.05E-054.52E-044.11E-032.63E-021.29E-048.40E-044.36E-032.04E-02 + 56L2 510.001.45E-051.69E-041.28E-036.90E-036.38E-053.56E-041.58E-036.30E-03 + 56L2 740.004.81E-064.07E-052.35E-041.00E-032.20E-059.92E-053.54E-041.14E-03 + 56L21000.002.12E-061.38E-056.55E-052.35E-049.42E-063.67E-051.12E-043.09E-04 + 56L21500.007.20E-073.61E-061.35E-053.95E-053.05E-061.01E-052.61E-056.03E-05 + 56L3 6.253.42E+012.77E+051.25E+087.07E+098.33E+002.03E+055.57E+081.56E+11 + 56L3 6.952.51E+011.62E+056.61E+074.50E+096.00E+001.20E+052.70E+086.87E+10 + 56L3 8.251.52E+016.78E+042.35E+071.86E+093.54E+005.07E+048.46E+071.84E+10 + 56L3 11.455.63E+001.29E+043.26E+062.66E+081.29E+009.89E+039.35E+061.51E+09 + 56L3 15.252.30E+003.02E+035.76E+054.28E+075.34E-012.37E+031.39E+061.72E+08 + 56L3 20.009.62E-017.67E+021.12E+057.18E+062.32E-016.14E+022.34E+052.24E+07 + 56L3 26.004.07E-012.04E+022.28E+041.24E+061.04E-011.67E+024.25E+043.20E+06 + 56L3 34.001.66E-015.29E+014.50E+032.01E+054.57E-024.40E+017.61E+034.47E+05 + 56L3 46.005.93E-021.16E+017.23E+022.55E+041.82E-029.84E+001.13E+035.01E+04 + 56L3 59.002.51E-023.33E+001.61E+024.62E+038.51E-032.88E+002.40E+028.51E+03 + 56L3 76.001.04E-029.41E-013.51E+018.10E+023.95E-038.32E-015.08E+011.44E+03 + 56L3 89.006.00E-034.29E-011.36E+012.74E+022.45E-033.85E-011.96E+014.82E+02 + 56L3 106.003.26E-031.81E-014.77E+008.26E+011.44E-031.64E-016.88E+001.45E+02 + 56L3 129.001.64E-036.86E-021.48E+002.16E+017.99E-046.36E-022.16E+003.86E+01 + 56L3 155.008.68E-042.79E-024.97E-016.18E+004.61E-042.64E-027.40E-011.14E+01 + 56L3 220.002.63E-045.16E-036.39E-025.85E-011.63E-045.04E-031.00E-011.17E+00 + 56L3 305.008.91E-051.11E-039.83E-036.81E-026.32E-051.11E-031.64E-021.50E-01 + 56L3 400.003.76E-053.26E-042.18E-031.20E-022.93E-053.28E-043.80E-032.87E-02 + 56L3 510.001.79E-051.14E-045.95E-042.70E-031.49E-051.14E-041.06E-036.85E-03 + 56L3 740.006.19E-062.52E-059.21E-053.16E-045.59E-062.45E-051.60E-048.27E-04 + 56L31000.002.82E-068.34E-062.33E-056.48E-052.66E-067.82E-063.73E-051.62E-04 + 56L31500.001.11E-062.24E-064.58E-069.77E-061.07E-062.04E-066.04E-062.02E-05 + 56M1 2.291.03E+013.45E+041.63E+061.06E+091.56E+038.50E+067.83E+091.71E+12 + 56M1 3.296.45E+007.66E+037.70E+054.63E+075.25E+021.44E+067.58E+081.38E+11 + 56M1 5.292.99E+008.76E+021.68E+058.00E+061.27E+021.42E+053.81E+075.03E+09 + 56M1 9.291.04E+004.40E+011.32E+041.01E+062.35E+019.56E+031.23E+061.04E+08 + 56M1 16.293.22E-011.14E+006.02E+025.01E+044.41E+006.90E+024.58E+042.39E+06 + 56M1 26.001.12E-013.04E-013.05E+012.64E+031.10E+008.25E+013.28E+031.13E+05 + 56M1 41.003.78E-021.83E-011.62E+001.14E+022.86E-011.11E+012.76E+026.31E+03 + 56M1 53.002.00E-021.11E-015.54E-011.88E+011.35E-013.73E+007.16E+011.30E+03 + 56M1 71.009.47E-035.51E-022.51E-013.04E+005.74E-021.11E+001.60E+012.24E+02 + 56M1 104.003.49E-031.94E-028.78E-025.31E-011.92E-022.39E-012.43E+002.42E+01 + 56M1 150.001.32E-036.54E-032.77E-021.31E-016.83E-035.88E-024.33E-013.15E+00 + 56M1 280.002.60E-049.80E-043.37E-031.19E-021.25E-036.33E-032.82E-021.25E-01 + 56M1 500.006.41E-051.90E-045.20E-041.42E-032.82E-049.77E-042.95E-038.73E-03 + 56M2 2.142.42E+017.72E+062.19E+107.87E+121.90E+022.97E+057.94E+078.34E+09 + 56M2 3.141.22E+011.13E+061.82E+095.41E+115.96E+015.28E+041.17E+071.44E+09 + 56M2 5.144.21E+009.52E+047.89E+071.72E+101.34E+016.07E+039.88E+051.11E+08 + 56M2 9.149.99E-015.37E+032.18E+063.15E+082.35E+005.23E+025.64E+044.77E+06 + 56M2 16.142.05E-013.18E+026.76E+046.26E+064.19E-014.94E+013.43E+031.99E+05 + 56M2 26.004.91E-023.04E+013.84E+032.40E+059.89E-027.09E+003.34E+021.35E+04 + 56M2 41.001.17E-023.30E+002.59E+021.10E+042.50E-021.14E+003.68E+011.04E+03 + 56M2 53.005.10E-039.56E-015.76E+011.96E+031.15E-024.10E-011.07E+012.44E+02 + 56M2 71.001.95E-032.36E-011.06E+012.80E+024.78E-031.29E-012.63E+004.73E+01 + 56M2 104.005.45E-043.91E-021.20E+002.28E+011.52E-032.91E-024.30E-015.65E+00 + 56M2 150.001.60E-047.20E-031.56E-012.17E+005.11E-047.11E-037.76E-027.59E-01 + 56M2 280.002.06E-054.49E-045.54E-034.67E-028.08E-056.83E-044.59E-032.78E-02 + 56M2 500.003.35E-064.06E-053.13E-041.72E-031.50E-058.49E-053.83E-041.56E-03 + 56M3 2.065.43E+011.55E+074.59E+101.67E+134.98E+011.18E+072.93E+117.30E+14 + 56M3 3.062.53E+012.11E+063.48E+091.03E+121.50E+011.63E+061.90E+102.53E+13 + 56M3 5.068.06E+001.67E+051.38E+082.97E+103.24E+001.32E+055.98E+083.83E+11 + 56M3 9.061.78E+008.88E+033.54E+064.98E+085.49E-017.23E+031.14E+073.36E+09 + 56M3 16.063.42E-014.97E+021.02E+059.16E+069.58E-024.17E+022.46E+053.67E+07 + 56M3 26.007.71E-024.41E+015.31E+033.20E+052.21E-023.79E+011.04E+049.14E+05 + 56M3 41.001.76E-024.50E+003.31E+021.35E+045.56E-033.96E+005.62E+023.07E+04 + 56M3 53.007.44E-031.25E+006.98E+012.28E+032.55E-031.11E+001.12E+024.73E+03 + 56M3 71.002.76E-032.91E-011.19E+013.01E+021.06E-032.64E-011.83E+015.84E+02 + 56M3 104.007.42E-044.39E-021.20E+002.16E+013.35E-044.10E-021.81E+004.06E+01 + 56M3 150.002.11E-047.29E-031.36E-011.76E+001.12E-047.01E-032.09E-013.40E+00 + 56M3 280.002.59E-053.70E-043.60E-032.70E-021.80E-053.73E-046.06E-035.99E-02 + 56M3 500.004.22E-062.77E-051.49E-046.90E-043.52E-062.80E-052.69E-041.78E-03 + 56M4 1.801.22E+024.56E+053.66E+106.27E+141.38E+013.31E+054.34E+095.24E+12 + 56M4 2.802.92E+014.72E+041.62E+091.32E+133.23E+003.58E+042.21E+081.88E+11 + 56M4 4.804.50E+003.00E+033.62E+071.26E+115.34E-012.36E+036.16E+063.32E+09 + 56M4 8.804.73E-011.34E+024.99E+057.18E+086.72E-021.10E+021.18E+053.69E+07 + 56M4 15.804.70E-026.45E+007.96E+035.24E+068.59E-035.69E+002.74E+035.01E+05 + 56M4 26.006.02E-034.72E-012.37E+028.36E+041.42E-034.54E-011.17E+021.34E+04 + 56M4 41.008.64E-044.22E-029.70E+001.98E+032.65E-044.52E-026.75E+005.02E+02 + 56M4 53.002.84E-041.08E-021.62E+002.46E+021.02E-041.23E-021.37E+008.01E+01 + 56M4 71.007.90E-052.27E-032.14E-012.32E+013.37E-052.81E-032.26E-011.00E+01 + 56M4 104.001.48E-052.98E-041.56E-021.10E+007.86E-064.11E-042.19E-026.86E-01 + 56M4 150.003.01E-064.36E-051.33E-036.26E-021.92E-066.55E-052.39E-035.42E-02 + 56M4 280.002.08E-071.81E-062.33E-055.51E-041.74E-072.97E-065.95E-057.97E-04 + 56M4 500.001.91E-081.11E-077.09E-078.75E-061.90E-081.80E-072.15E-061.86E-05 + 56M5 1.781.81E+026.00E+055.98E+109.58E+148.42E+003.61E+042.12E+101.53E+15 + 56M5 2.784.25E+016.07E+042.59E+091.95E+131.97E+003.91E+039.37E+082.86E+13 + 56M5 4.786.42E+003.77E+035.66E+071.80E+113.29E-012.62E+022.12E+072.32E+11 + 56M5 8.786.61E-011.65E+027.66E+059.97E+084.25E-021.27E+013.03E+051.09E+09 + 56M5 15.786.44E-027.79E+001.20E+047.04E+065.61E-036.96E-015.05E+036.62E+06 + 56M5 26.008.09E-035.54E-013.46E+021.08E+059.59E-045.94E-021.56E+029.17E+04 + 56M5 41.001.14E-034.81E-021.37E+012.44E+031.85E-046.37E-036.57E+001.98E+03 + 56M5 53.003.73E-041.20E-022.23E+002.92E+027.26E-051.82E-031.11E+002.35E+02 + 56M5 71.001.03E-042.45E-032.83E-012.63E+012.47E-054.42E-041.47E-012.13E+01 + 56M5 104.001.94E-053.10E-041.94E-021.15E+006.03E-067.08E-051.08E-029.76E-01 + 56M5 150.003.95E-064.32E-051.53E-035.92E-021.56E-061.25E-058.98E-045.35E-02 + 56M5 280.002.77E-071.68E-062.23E-054.11E-041.61E-077.27E-071.45E-054.35E-04 + 56M5 500.003.18E-081.03E-075.78E-074.94E-062.21E-086.20E-084.07E-076.00E-06 + 56N+ 50.009.79E-037.81E-014.98E+012.00E+034.80E-021.96E+008.40E+013.25E+03 + 56N+ 70.003.81E-031.60E-016.69E+001.90E+021.79E-024.57E-011.21E+013.09E+02 + 56N+ 100.001.40E-033.14E-028.32E-011.65E+016.41E-031.03E-011.71E+002.85E+01 + 56N+ 150.004.48E-045.47E-038.45E-021.11E+002.03E-032.05E-022.09E-012.21E+00 + 56N+ 200.002.02E-041.70E-031.80E-021.77E-019.15E-046.89E-035.14E-024.00E-01 + 56N+ 500.001.93E-056.93E-052.63E-041.03E-038.17E-053.00E-041.00E-033.41E-03 + 57K 39.922.36E+006.66E+003.67E+008.16E-011.36E+012.67E+028.96E+026.88E+02 + 57K 40.622.25E+006.86E+005.41E+002.33E+001.28E+012.49E+029.02E+029.89E+02 + 57K 41.922.07E+007.12E+008.60E+007.05E+001.17E+012.21E+028.98E+021.50E+03 + 57K 45.121.71E+007.23E+001.50E+012.54E+019.42E+001.68E+028.29E+022.35E+03 + 57K 48.921.39E+006.79E+001.94E+014.88E+017.43E+001.23E+027.01E+022.72E+03 + 57K 53.001.12E+006.07E+002.11E+016.68E+015.88E+009.13E+015.67E+022.65E+03 + 57K 59.008.46E-014.97E+002.03E+017.76E+014.30E+006.10E+014.06E+022.21E+03 + 57K 67.006.01E-013.72E+001.70E+017.35E+012.97E+003.79E+012.62E+021.57E+03 + 57K 79.003.85E-012.42E+001.18E+015.50E+011.84E+002.05E+011.41E+028.87E+02 + 57K 92.002.53E-011.57E+007.75E+003.68E+011.19E+001.17E+017.80E+014.87E+02 + 57K 109.001.59E-019.45E-014.57E+002.14E+017.32E-016.29E+003.95E+012.37E+02 + 57K 122.001.16E-016.67E-013.14E+001.43E+015.32E-014.19E+002.51E+011.45E+02 + 57K 139.008.13E-024.42E-012.00E+008.80E+003.69E-012.63E+001.48E+018.05E+01 + 57K 162.005.33E-022.70E-011.16E+004.84E+002.41E-011.53E+007.93E+004.02E+01 + 57K 190.003.45E-021.62E-016.53E-012.55E+001.56E-018.81E-014.17E+001.94E+01 + 57K 255.001.57E-026.33E-022.24E-017.74E-017.04E-023.27E-011.31E+005.14E+00 + 57K 340.007.47E-032.60E-028.12E-022.47E-013.31E-021.29E-014.37E-011.46E+00 + 57K 430.004.20E-031.31E-023.70E-021.01E-011.81E-026.24E-021.86E-015.41E-01 + 57K 540.002.47E-037.05E-031.81E-024.52E-021.03E-023.17E-028.39E-022.16E-01 + 57K 770.001.16E-032.93E-036.62E-031.44E-024.35E-031.16E-022.62E-025.71E-02 + 57K 1050.006.34E-041.48E-033.03E-035.90E-032.10E-035.09E-031.02E-021.96E-02 + 57K 1300.004.31E-049.54E-041.85E-033.36E-031.29E-032.96E-035.57E-039.92E-03 + 57K 1550.003.19E-046.76E-041.25E-032.18E-038.75E-041.92E-033.45E-035.83E-03 + 57L1 7.277.40E+001.92E+031.54E+052.19E+062.67E+021.51E+051.48E+073.47E+08 + 57L1 7.976.33E+001.16E+031.22E+052.95E+062.03E+029.75E+048.90E+062.56E+08 + 57L1 9.274.84E+004.83E+026.98E+042.65E+061.29E+024.76E+043.85E+061.32E+08 + 57L1 12.472.76E+007.29E+011.69E+049.34E+055.31E+011.18E+047.48E+052.79E+07 + 57L1 16.271.61E+009.94E+003.78E+032.41E+052.40E+013.46E+031.74E+056.10E+06 + 57L1 20.001.03E+001.96E+001.05E+037.21E+041.30E+011.35E+035.65E+041.81E+06 + 57L1 26.005.75E-019.58E-011.80E+021.35E+045.96E+004.16E+021.38E+043.79E+05 + 57L1 34.003.07E-019.58E-012.58E+012.12E+032.69E+001.28E+023.33E+037.62E+04 + 57L1 46.001.48E-016.82E-013.86E+002.35E+021.10E+003.49E+016.93E+021.26E+04 + 57L1 59.007.93E-024.21E-011.70E+003.99E+015.33E-011.23E+011.95E+022.92E+03 + 57L1 76.004.14E-022.30E-019.63E-018.98E+002.55E-014.36E+005.53E+016.75E+02 + 57L1 89.002.75E-021.52E-016.53E-014.39E+001.62E-012.31E+002.56E+012.74E+02 + 57L1 106.001.73E-029.32E-024.05E-012.23E+009.83E-021.16E+001.10E+011.03E+02 + 57L1 129.001.03E-025.27E-022.25E-011.09E+005.64E-025.46E-014.39E+003.48E+01 + 57L1 155.006.34E-033.04E-021.25E-015.59E-013.37E-022.74E-011.89E+001.29E+01 + 57L1 220.002.52E-031.05E-023.89E-021.50E-011.29E-027.73E-024.04E-012.09E+00 + 57L1 305.001.09E-033.94E-031.30E-024.36E-025.40E-032.52E-021.03E-014.21E-01 + 57L1 400.005.63E-041.81E-035.36E-031.60E-022.67E-031.04E-023.57E-021.20E-01 + 57L1 510.003.20E-049.39E-042.54E-036.81E-031.45E-034.91E-031.45E-024.17E-02 + 57L1 740.001.44E-043.75E-048.85E-042.03E-035.80E-041.65E-034.00E-039.38E-03 + 57L11000.008.01E-051.92E-044.11E-048.43E-042.85E-047.24E-041.54E-033.14E-03 + 57L11500.003.91E-058.49E-051.62E-042.91E-041.13E-042.56E-044.77E-048.34E-04 + 57L2 6.891.52E+011.17E+054.57E+072.25E+092.96E+016.34E+032.32E+053.04E+06 + 57L2 7.591.16E+017.20E+042.59E+071.55E+092.20E+014.34E+031.94E+054.17E+06 + 57L2 8.897.40E+003.26E+041.02E+077.21E+081.36E+012.33E+031.23E+053.93E+06 + 57L2 12.093.01E+007.00E+031.66E+061.26E+085.30E+006.94E+023.92E+041.63E+06 + 57L2 15.891.31E+001.79E+033.30E+052.33E+072.30E+002.35E+021.24E+045.19E+05 + 57L2 20.006.43E-015.74E+028.48E+045.37E+061.14E+009.45E+014.50E+031.76E+05 + 57L2 26.002.80E-011.57E+021.81E+049.77E+055.13E-013.34E+011.37E+034.69E+04 + 57L2 34.001.18E-014.22E+013.73E+031.68E+052.27E-011.16E+013.94E+021.15E+04 + 57L2 46.004.35E-029.69E+006.39E+022.29E+049.07E-023.51E+009.57E+012.27E+03 + 57L2 59.001.90E-022.92E+001.51E+024.44E+034.27E-021.32E+002.97E+015.87E+02 + 57L2 76.008.09E-038.70E-013.52E+018.43E+021.99E-024.90E-019.02E+001.47E+02 + 57L2 89.004.74E-034.12E-011.43E+013.01E+021.24E-022.65E-014.30E+006.19E+01 + 57L2 106.002.62E-031.81E-015.33E+009.70E+017.34E-031.35E-011.90E+002.38E+01 + 57L2 129.001.35E-037.27E-021.78E+002.75E+014.08E-036.32E-027.62E-018.19E+00 + 57L2 155.007.28E-043.13E-026.46E-018.59E+002.36E-033.13E-023.27E-013.04E+00 + 57L2 220.002.28E-046.49E-039.77E-029.80E-018.36E-048.38E-036.65E-024.75E-01 + 57L2 305.007.87E-051.57E-031.78E-021.39E-013.20E-042.51E-031.57E-028.80E-02 + 57L2 400.003.33E-055.04E-044.59E-032.93E-021.45E-049.43E-044.88E-032.27E-02 + 57L2 510.001.58E-051.89E-041.43E-037.71E-037.21E-054.00E-041.77E-037.04E-03 + 57L2 740.005.37E-064.56E-052.63E-041.12E-032.49E-051.12E-043.98E-041.27E-03 + 57L21000.002.33E-061.55E-057.36E-052.64E-041.07E-054.14E-051.27E-043.47E-04 + 57L21500.008.12E-074.05E-061.52E-054.46E-053.45E-061.15E-052.95E-056.80E-05 + 57L3 6.483.18E+012.51E+051.09E+085.88E+098.06E+001.92E+055.04E+081.36E+11 + 57L3 7.182.36E+011.49E+055.88E+073.82E+095.88E+001.15E+052.51E+086.17E+10 + 57L3 8.481.45E+016.42E+042.16E+071.63E+093.52E+005.01E+048.14E+071.72E+10 + 57L3 11.685.52E+001.27E+043.13E+062.46E+081.31E+001.01E+049.48E+061.49E+09 + 57L3 15.482.29E+003.05E+035.71E+054.12E+075.53E-012.49E+031.46E+061.77E+08 + 57L3 20.001.01E+008.38E+021.21E+057.68E+062.52E-016.97E+022.70E+052.59E+07 + 57L3 26.004.29E-012.23E+022.48E+041.33E+061.13E-011.89E+024.91E+043.68E+06 + 57L3 34.001.75E-015.78E+014.90E+032.16E+054.96E-024.99E+018.77E+035.13E+05 + 57L3 46.006.29E-021.27E+017.89E+022.75E+041.97E-021.12E+011.30E+035.74E+04 + 57L3 59.002.67E-023.64E+001.76E+025.00E+039.24E-033.27E+002.75E+029.72E+03 + 57L3 76.001.11E-021.03E+003.83E+018.79E+024.28E-039.43E-015.81E+011.64E+03 + 57L3 89.006.41E-034.69E-011.48E+012.98E+022.66E-034.36E-012.23E+015.49E+02 + 57L3 106.003.48E-031.97E-015.21E+008.98E+011.57E-031.86E-017.84E+001.66E+02 + 57L3 129.001.76E-037.51E-021.62E+002.35E+018.68E-047.20E-022.45E+004.39E+01 + 57L3 155.009.32E-043.06E-025.44E-016.74E+005.01E-042.98E-028.41E-011.29E+01 + 57L3 220.002.83E-045.65E-037.00E-026.39E-011.78E-045.67E-031.14E-011.32E+00 + 57L3 305.009.62E-051.22E-031.08E-027.44E-026.87E-051.25E-031.85E-021.69E-01 + 57L3 400.004.07E-053.57E-042.39E-031.32E-023.18E-053.68E-044.29E-033.25E-02 + 57L3 510.001.95E-051.24E-046.52E-042.96E-031.62E-051.27E-041.19E-037.72E-03 + 57L3 740.006.72E-062.75E-051.01E-043.46E-046.07E-062.72E-051.80E-049.31E-04 + 57L31000.003.07E-069.10E-062.55E-057.10E-052.88E-068.64E-064.18E-051.82E-04 + 57L31500.001.19E-062.44E-065.01E-061.07E-051.16E-062.24E-066.72E-062.26E-05 + 57M1 2.369.79E+003.33E+041.63E+069.42E+081.59E+038.43E+067.59E+091.61E+12 + 57M1 3.366.23E+007.67E+037.47E+054.72E+075.50E+021.49E+067.76E+081.38E+11 + 57M1 5.362.94E+009.20E+021.67E+057.63E+061.36E+021.53E+054.08E+075.30E+09 + 57M1 9.361.04E+004.98E+011.38E+041.02E+062.56E+011.05E+041.36E+061.13E+08 + 57M1 16.363.25E-011.42E+006.69E+025.32E+044.85E+007.68E+025.10E+042.64E+06 + 57M1 26.001.15E-012.87E-013.68E+013.00E+031.22E+009.33E+013.71E+031.27E+05 + 57M1 41.003.90E-021.74E-011.93E+001.35E+023.18E-011.25E+013.11E+027.09E+03 + 57M1 53.002.07E-021.08E-015.91E-012.26E+011.50E-014.19E+008.04E+011.45E+03 + 57M1 71.009.83E-035.47E-022.50E-013.53E+006.39E-021.24E+001.79E+012.50E+02 + 57M1 104.003.64E-031.96E-028.72E-025.63E-012.13E-022.67E-012.71E+002.70E+01 + 57M1 150.001.39E-036.69E-032.80E-021.35E-017.58E-036.54E-024.81E-013.50E+00 + 57M1 280.002.74E-041.02E-033.49E-031.24E-021.39E-037.01E-033.12E-021.38E-01 + 57M1 500.006.79E-052.01E-045.49E-041.50E-033.11E-041.08E-033.25E-039.62E-03 + 57M2 2.202.29E+017.32E+062.03E+107.06E+121.94E+022.94E+057.59E+077.59E+09 + 57M2 3.201.18E+011.12E+061.79E+095.18E+116.25E+015.44E+041.17E+071.39E+09 + 57M2 5.204.19E+009.90E+048.14E+071.74E+101.44E+016.46E+031.03E+061.13E+08 + 57M2 9.201.02E+005.74E+032.32E+063.31E+082.57E+005.68E+026.03E+045.00E+06 + 57M2 16.202.14E-013.46E+027.33E+046.72E+064.64E-015.43E+013.73E+032.13E+05 + 57M2 26.005.23E-023.37E+014.27E+032.66E+051.11E-017.92E+003.71E+021.49E+04 + 57M2 41.001.26E-023.67E+002.88E+021.22E+042.81E-021.27E+004.08E+011.14E+03 + 57M2 53.005.50E-031.06E+006.41E+012.17E+031.30E-024.59E-011.19E+012.69E+02 + 57M2 71.002.11E-032.63E-011.18E+013.11E+025.39E-031.45E-012.93E+005.23E+01 + 57M2 104.005.94E-044.36E-021.34E+002.54E+011.72E-033.27E-024.80E-016.27E+00 + 57M2 150.001.75E-048.05E-031.74E-012.43E+005.78E-048.00E-038.69E-028.46E-01 + 57M2 280.002.27E-055.04E-046.23E-035.24E-029.18E-057.72E-045.17E-033.12E-02 + 57M2 500.003.73E-064.57E-053.53E-041.94E-031.71E-059.64E-054.34E-041.76E-03 + 57M3 2.125.18E+011.47E+074.26E+101.50E+134.98E+011.17E+072.84E+116.91E+14 + 57M3 3.122.46E+012.10E+063.42E+099.87E+111.54E+011.70E+061.96E+102.59E+13 + 57M3 5.128.04E+001.74E+051.43E+083.00E+103.41E+001.43E+056.50E+084.16E+11 + 57M3 9.121.81E+009.46E+033.76E+065.21E+085.88E-018.02E+031.28E+073.79E+09 + 57M3 16.123.55E-015.37E+021.10E+059.76E+061.04E-014.69E+022.81E+054.20E+07 + 57M3 26.008.16E-024.86E+015.86E+033.51E+052.42E-024.35E+011.22E+041.07E+06 + 57M3 41.001.87E-024.96E+003.65E+021.48E+046.08E-034.54E+006.54E+023.57E+04 + 57M3 53.007.96E-031.38E+007.70E+012.50E+032.80E-031.28E+001.30E+025.49E+03 + 57M3 71.002.96E-033.21E-011.32E+013.30E+021.16E-033.02E-012.12E+016.76E+02 + 57M3 104.008.01E-044.85E-021.33E+002.37E+013.67E-044.69E-022.09E+004.69E+01 + 57M3 150.002.28E-048.06E-031.50E-011.94E+001.23E-048.00E-032.40E-013.91E+00 + 57M3 280.002.81E-054.10E-043.98E-032.98E-021.97E-054.24E-046.93E-036.85E-02 + 57M3 500.004.62E-063.07E-051.65E-047.63E-043.86E-063.16E-053.06E-042.03E-03 + 57M4 1.851.17E+024.37E+053.43E+105.76E+141.39E+013.31E+054.24E+094.99E+12 + 57M4 2.852.93E+014.77E+041.64E+091.33E+133.38E+003.78E+042.31E+081.94E+11 + 57M4 4.854.67E+003.15E+033.85E+071.35E+115.74E-012.60E+036.78E+063.61E+09 + 57M4 8.855.05E-011.45E+025.51E+058.01E+087.38E-021.25E+021.33E+054.15E+07 + 57M4 15.855.12E-027.09E+008.96E+035.96E+069.56E-036.51E+003.16E+035.73E+05 + 57M4 26.006.68E-035.31E-012.74E+029.77E+041.61E-035.30E-011.37E+021.57E+04 + 57M4 41.009.68E-044.78E-021.12E+012.32E+033.02E-045.27E-027.92E+005.88E+02 + 57M4 53.003.20E-041.22E-021.87E+002.87E+021.16E-041.44E-021.61E+009.38E+01 + 57M4 71.008.97E-052.58E-032.47E-012.71E+013.85E-053.28E-032.65E-011.18E+01 + 57M4 104.001.68E-053.41E-041.81E-021.29E+009.00E-064.80E-042.57E-028.05E-01 + 57M4 150.003.37E-065.00E-051.54E-037.32E-022.21E-067.67E-052.81E-036.36E-02 + 57M4 280.002.36E-072.08E-062.70E-056.45E-042.00E-073.49E-067.00E-059.38E-04 + 57M4 500.002.19E-081.29E-078.23E-071.02E-052.19E-082.11E-072.54E-062.20E-05 + 57M5 1.831.75E+025.71E+055.64E+108.86E+148.50E+003.58E+042.08E+101.47E+15 + 57M5 2.834.26E+016.09E+042.63E+091.97E+132.06E+004.08E+039.89E+083.01E+13 + 57M5 4.836.66E+003.94E+036.06E+071.93E+113.53E-012.84E+022.36E+072.60E+11 + 57M5 8.837.05E-011.77E+028.49E+051.11E+094.64E-021.41E+013.48E+051.27E+09 + 57M5 15.837.00E-028.51E+001.35E+048.00E+066.21E-037.81E-015.91E+037.88E+06 + 57M5 26.008.97E-036.19E-014.00E+021.26E+051.08E-036.77E-021.86E+021.12E+05 + 57M5 41.001.28E-035.40E-021.58E+012.84E+032.09E-047.26E-037.86E+002.40E+03 + 57M5 53.004.18E-041.35E-022.58E+003.40E+028.21E-052.08E-031.33E+002.84E+02 + 57M5 71.001.16E-042.77E-033.28E-013.06E+012.80E-055.04E-041.76E-012.58E+01 + 57M5 104.002.18E-053.50E-042.25E-021.35E+006.85E-068.08E-051.28E-021.17E+00 + 57M5 150.004.47E-064.90E-051.77E-036.89E-021.77E-061.43E-051.07E-036.42E-02 + 57M5 280.003.33E-071.92E-062.59E-054.78E-041.84E-078.32E-071.72E-055.20E-04 + 57M5 500.003.56E-081.18E-076.66E-075.76E-062.51E-087.09E-084.76E-077.13E-06 + 57N+ 50.001.05E-028.84E-015.69E+012.30E+035.42E-022.25E+009.86E+013.87E+03 + 57N+ 70.004.08E-031.80E-017.63E+002.18E+022.03E-025.23E-011.41E+013.64E+02 + 57N+ 100.001.50E-033.52E-029.47E-011.89E+017.23E-031.18E-011.97E+003.33E+01 + 57N+ 150.004.81E-046.06E-039.58E-021.27E+002.29E-032.33E-022.39E-012.55E+00 + 57N+ 200.002.17E-041.87E-032.03E-022.01E-011.03E-037.80E-035.86E-024.60E-01 + 57N+ 500.002.09E-057.56E-052.91E-041.15E-039.14E-053.36E-041.13E-033.85E-03 + 58K 41.442.19E+005.90E+003.09E+006.36E-011.33E+012.51E+028.07E+025.91E+02 + 58K 42.142.09E+006.08E+004.53E+001.80E+001.26E+012.35E+028.14E+028.44E+02 + 58K 43.441.93E+006.30E+007.15E+005.43E+001.15E+012.08E+028.10E+021.28E+03 + 58K 46.641.61E+006.43E+001.25E+011.98E+019.36E+001.60E+027.53E+022.01E+03 + 58K 50.441.31E+006.08E+001.63E+013.84E+017.44E+001.19E+026.44E+022.36E+03 + 58K 54.001.10E+005.56E+001.78E+015.19E+016.09E+009.21E+015.40E+022.35E+03 + 58K 60.008.29E-014.61E+001.77E+016.31E+014.48E+006.21E+013.93E+022.02E+03 + 58K 68.005.93E-013.50E+001.51E+016.20E+013.11E+003.89E+012.57E+021.47E+03 + 58K 80.003.82E-012.31E+001.08E+014.81E+011.94E+002.12E+011.41E+028.52E+02 + 58K 93.002.54E-011.52E+007.21E+003.30E+011.26E+001.22E+017.89E+014.76E+02 + 58K 110.001.60E-019.23E-014.33E+001.96E+017.80E-016.60E+004.05E+012.36E+02 + 58K 123.001.18E-016.55E-013.00E+001.33E+015.69E-014.41E+002.58E+011.45E+02 + 58K 140.008.25E-024.37E-011.93E+008.31E+003.95E-012.78E+001.53E+018.18E+01 + 58K 163.005.44E-022.70E-011.13E+004.63E+002.59E-011.63E+008.27E+004.12E+01 + 58K 190.003.58E-021.65E-016.55E-012.53E+001.70E-019.56E-014.47E+002.06E+01 + 58K 255.001.63E-026.50E-022.28E-017.78E-017.67E-023.55E-011.40E+005.48E+00 + 58K 340.007.80E-032.69E-028.33E-022.52E-013.60E-021.40E-014.71E-011.55E+00 + 58K 430.004.39E-031.36E-023.82E-021.04E-011.97E-026.76E-022.00E-015.80E-01 + 58K 540.002.59E-037.35E-031.88E-024.68E-021.11E-023.43E-029.03E-022.32E-01 + 58K 770.001.22E-033.08E-036.95E-031.50E-024.70E-031.26E-022.83E-026.13E-02 + 58K 1050.006.66E-041.56E-033.19E-036.22E-032.27E-035.49E-031.10E-022.11E-02 + 58K 1300.004.53E-041.01E-031.95E-033.56E-031.39E-033.19E-036.00E-031.07E-02 + 58K 1550.003.35E-047.15E-041.33E-032.31E-039.39E-042.07E-033.72E-036.26E-03 + 58L1 7.556.87E+001.75E+031.33E+051.74E+062.63E+021.42E+051.34E+072.97E+08 + 58L1 8.255.91E+001.07E+031.07E+052.39E+062.02E+029.32E+048.17E+062.23E+08 + 58L1 9.554.56E+004.65E+026.29E+042.23E+061.30E+024.65E+043.63E+061.18E+08 + 58L1 12.752.65E+007.56E+011.61E+048.41E+055.49E+011.20E+047.37E+052.64E+07 + 58L1 16.551.56E+001.13E+013.79E+032.29E+052.52E+013.59E+031.76E+055.99E+06 + 58L1 20.001.04E+002.55E+001.20E+037.72E+041.43E+011.51E+036.29E+041.97E+06 + 58L1 26.005.83E-018.98E-012.13E+021.49E+046.58E+004.66E+021.53E+044.15E+05 + 58L1 34.003.14E-018.69E-013.19E+012.42E+032.97E+001.43E+023.70E+038.36E+04 + 58L1 46.001.51E-016.44E-014.46E+002.78E+021.22E+003.89E+017.68E+021.39E+04 + 58L1 59.008.15E-024.08E-011.72E+004.76E+015.89E-011.36E+012.16E+023.21E+03 + 58L1 76.004.27E-022.27E-019.35E-011.01E+012.82E-014.83E+006.11E+017.41E+02 + 58L1 89.002.84E-021.51E-016.36E-014.72E+001.79E-012.56E+002.82E+013.01E+02 + 58L1 106.001.80E-029.34E-023.97E-012.31E+001.08E-011.29E+001.22E+011.13E+02 + 58L1 129.001.07E-025.32E-022.23E-011.11E+006.22E-026.03E-014.83E+003.81E+01 + 58L1 155.006.60E-033.09E-021.25E-015.68E-013.72E-023.02E-012.08E+001.42E+01 + 58L1 220.002.63E-031.08E-023.96E-021.54E-011.42E-028.50E-024.43E-012.29E+00 + 58L1 305.001.15E-034.08E-031.34E-024.51E-025.93E-032.77E-021.13E-014.60E-01 + 58L1 400.005.92E-041.89E-035.59E-031.67E-022.93E-031.14E-023.90E-021.31E-01 + 58L1 510.003.38E-049.85E-042.66E-037.17E-031.58E-035.37E-031.58E-024.55E-02 + 58L1 740.001.53E-043.96E-049.37E-042.16E-036.33E-041.80E-034.37E-031.02E-02 + 58L11000.008.48E-052.04E-044.37E-048.98E-043.10E-047.89E-041.68E-033.41E-03 + 58L11500.004.13E-059.03E-051.73E-043.11E-041.22E-042.78E-045.18E-049.07E-04 + 58L2 7.161.41E+011.06E+053.95E+071.85E+092.91E+015.95E+032.07E+052.49E+06 + 58L2 7.861.09E+016.63E+042.29E+071.30E+092.19E+014.13E+031.74E+053.49E+06 + 58L2 9.167.06E+003.08E+049.28E+066.24E+081.37E+012.27E+031.13E+053.40E+06 + 58L2 12.362.94E+006.88E+031.59E+061.15E+085.50E+006.97E+023.77E+041.49E+06 + 58L2 16.161.31E+001.81E+033.26E+052.23E+072.43E+002.42E+021.23E+044.96E+05 + 58L2 20.006.79E-016.31E+029.28E+045.76E+061.27E+001.04E+024.84E+031.84E+05 + 58L2 26.002.97E-011.73E+021.98E+041.06E+065.71E-013.68E+011.48E+034.98E+04 + 58L2 34.001.25E-014.64E+014.10E+031.82E+052.53E-011.28E+014.29E+021.24E+04 + 58L2 46.004.65E-021.07E+017.03E+022.50E+041.01E-013.88E+001.05E+022.46E+03 + 58L2 59.002.03E-023.22E+001.66E+024.85E+034.77E-021.46E+003.25E+016.37E+02 + 58L2 76.008.70E-039.60E-013.88E+019.24E+022.23E-025.43E-019.91E+001.60E+02 + 58L2 89.005.11E-034.55E-011.58E+013.31E+021.39E-022.94E-014.73E+006.76E+01 + 58L2 106.002.84E-032.00E-015.89E+001.07E+028.21E-031.49E-012.09E+002.61E+01 + 58L2 129.001.46E-038.05E-021.97E+003.03E+014.57E-037.03E-028.42E-019.00E+00 + 58L2 155.007.91E-043.47E-027.16E-019.49E+002.65E-033.49E-023.62E-013.35E+00 + 58L2 220.002.48E-047.20E-031.09E-011.09E+009.40E-049.36E-037.39E-025.25E-01 + 58L2 305.008.59E-051.74E-031.99E-021.54E-013.61E-042.81E-031.75E-029.77E-02 + 58L2 400.003.66E-055.62E-045.13E-033.27E-021.64E-041.06E-035.45E-032.53E-02 + 58L2 510.001.75E-052.11E-041.60E-038.61E-038.14E-054.50E-041.98E-037.86E-03 + 58L2 740.005.94E-065.09E-052.95E-041.26E-032.82E-051.26E-044.47E-041.43E-03 + 58L21000.002.57E-061.74E-058.27E-052.97E-041.21E-054.68E-051.42E-043.90E-04 + 58L21500.009.10E-074.53E-061.71E-055.01E-053.91E-061.30E-053.33E-057.67E-05 + 58L3 6.722.96E+012.28E+059.48E+074.88E+097.80E+001.81E+054.58E+081.19E+11 + 58L3 7.422.23E+011.38E+055.23E+073.23E+095.75E+001.11E+052.34E+085.54E+10 + 58L3 8.721.39E+016.08E+041.98E+071.42E+093.50E+004.94E+047.83E+071.60E+10 + 58L3 11.925.41E+001.25E+043.01E+062.28E+081.34E+001.04E+049.59E+061.47E+09 + 58L3 15.722.29E+003.08E+035.65E+053.95E+075.71E-012.62E+031.52E+061.81E+08 + 58L3 20.001.06E+009.14E+021.32E+058.19E+062.73E-017.90E+023.12E+052.97E+07 + 58L3 26.004.52E-012.43E+022.70E+041.42E+061.22E-012.14E+025.65E+044.22E+06 + 58L3 34.001.85E-016.30E+015.33E+032.33E+055.38E-025.66E+011.01E+045.87E+05 + 58L3 46.006.67E-021.38E+018.59E+022.97E+042.14E-021.26E+011.48E+036.56E+04 + 58L3 59.002.84E-023.98E+001.92E+025.40E+031.00E-023.70E+003.14E+021.11E+04 + 58L3 76.001.18E-021.12E+004.17E+019.52E+024.65E-031.07E+006.63E+011.87E+03 + 58L3 89.006.84E-035.13E-011.62E+013.23E+022.88E-034.93E-012.55E+016.24E+02 + 58L3 106.003.72E-032.16E-015.68E+009.75E+011.70E-032.10E-018.92E+001.88E+02 + 58L3 129.001.88E-038.21E-021.76E+002.55E+019.43E-048.13E-022.79E+004.98E+01 + 58L3 155.009.99E-043.34E-025.95E-017.33E+005.44E-043.36E-029.55E-011.46E+01 + 58L3 220.003.04E-046.18E-037.65E-026.96E-011.93E-046.39E-031.29E-011.50E+00 + 58L3 305.001.04E-041.33E-031.18E-028.12E-027.46E-051.40E-032.10E-021.91E-01 + 58L3 400.004.40E-053.91E-042.62E-031.44E-023.45E-054.11E-044.83E-033.66E-02 + 58L3 510.002.10E-051.36E-047.14E-043.24E-031.76E-051.42E-041.34E-038.70E-03 + 58L3 740.007.23E-063.01E-051.10E-043.79E-046.58E-063.01E-052.02E-041.05E-03 + 58L31000.003.34E-069.90E-062.79E-057.78E-053.12E-069.53E-064.67E-052.04E-04 + 58L31500.001.28E-062.66E-065.47E-061.17E-051.25E-062.45E-067.46E-062.53E-05 + 58M1 2.439.23E+003.17E+041.59E+068.16E+081.61E+038.28E+067.25E+091.49E+12 + 58M1 3.435.97E+007.61E+037.11E+054.72E+075.73E+021.53E+067.86E+081.36E+11 + 58M1 5.432.87E+009.60E+021.65E+057.18E+061.45E+021.63E+054.33E+075.51E+09 + 58M1 9.431.03E+005.58E+011.44E+041.01E+062.79E+011.15E+041.48E+061.22E+08 + 58M1 16.433.27E-011.76E+007.38E+025.62E+045.32E+008.53E+025.65E+042.90E+06 + 58M1 26.001.18E-012.78E-014.39E+013.37E+031.36E+001.05E+024.20E+031.44E+05 + 58M1 41.004.01E-021.66E-012.34E+001.59E+023.54E-011.41E+013.50E+027.95E+03 + 58M1 53.002.13E-021.05E-016.48E-012.70E+011.66E-014.70E+009.02E+011.63E+03 + 58M1 71.001.02E-025.41E-022.52E-014.13E+007.10E-021.39E+002.01E+012.79E+02 + 58M1 104.003.79E-031.97E-028.69E-026.04E-012.37E-022.98E-013.02E+003.00E+01 + 58M1 150.001.45E-036.84E-032.83E-021.40E-018.41E-037.28E-025.34E-013.88E+00 + 58M1 280.002.89E-041.06E-033.62E-031.30E-021.53E-037.76E-033.45E-021.52E-01 + 58M1 500.007.21E-052.12E-045.80E-041.59E-033.43E-041.19E-033.58E-031.06E-02 + 58M2 2.272.16E+016.94E+061.87E+106.27E+121.97E+022.89E+057.20E+076.75E+09 + 58M2 3.271.14E+011.12E+061.75E+094.93E+116.55E+015.59E+041.17E+071.32E+09 + 58M2 5.274.16E+001.03E+058.37E+071.75E+101.55E+016.86E+031.07E+061.13E+08 + 58M2 9.271.04E+006.13E+032.47E+063.46E+082.81E+006.16E+026.43E+045.21E+06 + 58M2 16.272.22E-013.76E+027.94E+047.19E+065.14E-015.96E+014.04E+032.27E+05 + 58M2 26.005.55E-023.74E+014.75E+032.93E+051.25E-018.85E+004.10E+021.63E+04 + 58M2 41.001.35E-024.08E+003.20E+021.35E+043.16E-021.42E+004.53E+011.26E+03 + 58M2 53.005.91E-031.18E+007.13E+012.41E+031.46E-025.14E-011.32E+012.97E+02 + 58M2 71.002.28E-032.93E-011.31E+013.45E+026.08E-031.62E-013.26E+005.78E+01 + 58M2 104.006.45E-044.86E-021.50E+002.83E+011.94E-033.67E-025.35E-016.96E+00 + 58M2 150.001.91E-048.99E-031.95E-012.70E+006.54E-049.00E-039.72E-029.42E-01 + 58M2 280.002.50E-055.66E-047.00E-035.87E-021.04E-048.72E-045.81E-033.49E-02 + 58M2 500.004.16E-065.15E-053.98E-042.19E-031.94E-051.09E-044.90E-041.98E-03 + 58M3 2.184.92E+011.40E+073.94E+101.34E+134.98E+011.16E+072.74E+116.53E+14 + 58M3 3.182.39E+012.10E+063.36E+099.43E+111.58E+011.76E+062.02E+102.65E+13 + 58M3 5.188.01E+001.80E+051.47E+083.02E+103.60E+001.54E+057.05E+084.50E+11 + 58M3 9.181.85E+001.01E+043.99E+065.43E+086.29E-018.88E+031.43E+074.26E+09 + 58M3 16.183.68E-015.80E+021.18E+051.04E+071.12E-015.27E+023.21E+054.80E+07 + 58M3 26.008.62E-025.36E+016.45E+033.83E+052.65E-024.98E+011.42E+041.25E+06 + 58M3 41.001.99E-025.47E+004.02E+021.62E+046.65E-035.19E+007.59E+024.15E+04 + 58M3 53.008.51E-031.52E+008.48E+012.73E+033.06E-031.46E+001.50E+026.36E+03 + 58M3 71.003.17E-033.54E-011.45E+013.61E+021.27E-033.46E-012.45E+017.81E+02 + 58M3 104.008.63E-045.35E-021.47E+002.60E+014.02E-045.35E-022.41E+005.40E+01 + 58M3 150.002.47E-048.90E-031.66E-012.13E+001.35E-049.12E-032.76E-014.49E+00 + 58M3 280.003.07E-054.52E-044.40E-033.28E-022.16E-054.81E-047.92E-037.83E-02 + 58M3 500.005.00E-063.39E-051.82E-048.43E-044.23E-063.56E-053.49E-042.31E-03 + 58M4 1.901.14E+024.20E+053.24E+105.35E+141.41E+013.34E+054.18E+094.77E+12 + 58M4 2.902.94E+014.82E+041.65E+091.34E+133.54E+004.00E+042.43E+081.99E+11 + 58M4 4.904.85E+003.31E+034.11E+071.44E+116.18E-012.86E+037.46E+063.92E+09 + 58M4 8.905.39E-011.56E+026.08E+058.92E+088.11E-021.40E+021.51E+054.66E+07 + 58M4 15.905.57E-027.80E+001.01E+046.78E+061.06E-027.45E+003.63E+036.55E+05 + 58M4 26.007.43E-035.97E-013.15E+021.14E+051.82E-036.17E-011.61E+021.83E+04 + 58M4 41.001.08E-035.40E-021.29E+012.70E+033.42E-046.14E-029.28E+006.88E+02 + 58M4 53.003.58E-041.38E-022.16E+003.34E+021.32E-041.68E-021.88E+001.10E+02 + 58M4 71.001.01E-042.93E-032.85E-013.16E+014.38E-053.83E-033.10E-011.38E+01 + 58M4 104.001.91E-053.90E-042.09E-021.51E+001.03E-055.61E-043.01E-029.42E-01 + 58M4 150.003.90E-065.74E-051.78E-038.55E-022.53E-068.96E-053.30E-037.46E-02 + 58M4 280.002.78E-072.41E-063.13E-057.54E-042.30E-074.08E-068.23E-051.10E-03 + 58M4 500.002.74E-081.48E-079.58E-071.20E-052.52E-082.47E-072.99E-062.59E-05 + 58M5 1.881.69E+025.47E+055.35E+108.22E+148.59E+003.56E+042.05E+101.42E+15 + 58M5 2.884.28E+016.12E+042.67E+091.98E+132.15E+004.25E+031.04E+093.17E+13 + 58M5 4.886.91E+004.11E+036.48E+072.07E+113.78E-013.07E+022.62E+072.92E+11 + 58M5 8.887.51E-011.90E+029.40E+051.24E+095.07E-021.56E+014.00E+051.49E+09 + 58M5 15.887.59E-029.28E+001.53E+049.08E+066.87E-038.75E-016.91E+039.38E+06 + 58M5 26.009.93E-036.89E-014.62E+021.46E+051.21E-037.70E-022.23E+021.36E+05 + 58M5 41.001.42E-036.04E-021.83E+013.31E+032.36E-048.27E-039.38E+002.91E+03 + 58M5 53.004.68E-041.52E-022.98E+003.95E+029.26E-052.37E-031.58E+003.44E+02 + 58M5 71.001.30E-043.12E-033.79E-013.56E+013.17E-055.74E-042.10E-013.11E+01 + 58M5 104.002.46E-053.96E-042.60E-021.56E+007.76E-069.21E-051.53E-021.41E+00 + 58M5 150.005.04E-065.56E-052.05E-038.02E-022.01E-061.63E-051.27E-037.70E-02 + 58M5 280.003.76E-072.18E-062.99E-055.56E-042.09E-079.51E-072.03E-056.20E-04 + 58M5 500.004.21E-081.36E-077.71E-076.69E-062.86E-088.10E-085.56E-078.46E-06 + 58N+ 50.001.08E-029.55E-016.18E+012.49E+035.98E-022.51E+001.11E+024.39E+03 + 58N+ 70.004.23E-031.93E-018.28E+002.36E+022.23E-025.82E-011.58E+014.10E+02 + 58N+ 100.001.56E-033.77E-021.03E+002.05E+017.97E-031.30E-012.20E+003.73E+01 + 58N+ 150.005.02E-046.46E-031.04E-011.38E+002.52E-032.57E-022.66E-012.84E+00 + 58N+ 200.002.28E-041.99E-032.20E-022.19E-011.13E-038.61E-036.49E-025.11E-01 + 58N+ 500.002.20E-058.02E-053.12E-041.25E-031.00E-043.69E-041.24E-034.23E-03 + 59K 42.992.04E+005.24E+002.60E+004.90E-011.31E+012.36E+027.28E+025.06E+02 + 59K 43.691.95E+005.39E+003.78E+001.38E+001.24E+012.21E+027.34E+027.19E+02 + 59K 44.991.80E+005.59E+005.95E+004.18E+001.13E+011.97E+027.32E+021.08E+03 + 59K 48.191.51E+005.72E+001.04E+011.53E+019.31E+001.53E+026.85E+021.72E+03 + 59K 51.991.24E+005.45E+001.37E+013.03E+017.45E+001.15E+025.92E+022.04E+03 + 59K 56.001.02E+004.95E+001.53E+014.27E+015.99E+008.69E+014.90E+022.05E+03 + 59K 62.007.79E-014.14E+001.52E+015.19E+014.45E+005.94E+013.61E+021.78E+03 + 59K 70.005.64E-013.18E+001.31E+015.16E+013.13E+003.78E+012.40E+021.31E+03 + 59K 82.003.68E-012.13E+009.54E+004.09E+011.98E+002.10E+011.35E+027.82E+02 + 59K 95.002.47E-011.42E+006.50E+002.87E+011.30E+001.22E+017.65E+014.46E+02 + 59K 112.001.57E-018.76E-013.97E+001.75E+018.10E-016.70E+003.99E+012.26E+02 + 59K 125.001.16E-016.27E-012.79E+001.21E+015.94E-014.51E+002.57E+011.41E+02 + 59K 142.008.21E-024.22E-011.82E+007.63E+004.15E-012.86E+001.54E+018.03E+01 + 59K 165.005.45E-022.63E-011.08E+004.33E+002.73E-011.69E+008.42E+004.10E+01 + 59K 190.003.72E-021.68E-016.57E-012.50E+001.85E-011.04E+004.79E+002.17E+01 + 59K 255.001.70E-026.67E-022.31E-017.82E-018.36E-023.84E-011.51E+005.82E+00 + 59K 340.008.14E-032.78E-028.54E-022.56E-013.92E-021.51E-015.06E-011.66E+00 + 59K 430.004.59E-031.42E-023.95E-021.07E-012.14E-027.31E-022.15E-016.20E-01 + 59K 540.002.72E-037.67E-031.96E-024.86E-021.21E-023.71E-029.72E-022.49E-01 + 59K 770.001.28E-033.23E-037.29E-031.58E-025.08E-031.36E-023.04E-026.58E-02 + 59K 1050.007.00E-041.64E-033.37E-036.55E-032.44E-035.93E-031.19E-022.26E-02 + 59K 1300.004.76E-041.06E-032.06E-033.76E-031.50E-033.44E-036.46E-031.14E-02 + 59K 1550.003.52E-047.55E-041.40E-032.45E-031.01E-032.23E-034.00E-036.73E-03 + 59L1 7.836.39E+001.60E+031.14E+051.38E+062.60E+021.34E+051.21E+072.55E+08 + 59L1 8.535.53E+001.00E+039.34E+041.94E+062.01E+028.92E+047.52E+061.94E+08 + 59L1 9.834.31E+004.48E+025.67E+041.87E+061.32E+024.56E+043.43E+061.06E+08 + 59L1 13.032.54E+007.83E+011.53E+047.56E+055.67E+011.22E+047.26E+052.49E+07 + 59L1 16.831.52E+001.27E+013.79E+032.17E+052.65E+013.72E+031.79E+055.87E+06 + 59L1 20.001.05E+003.35E+001.35E+038.22E+041.58E+011.70E+037.00E+042.15E+06 + 59L1 26.005.92E-018.89E-012.50E+021.64E+047.27E+005.21E+021.70E+044.54E+05 + 59L1 34.003.19E-017.90E-013.90E+012.75E+033.28E+001.59E+024.10E+039.17E+04 + 59L1 46.001.55E-016.06E-015.27E+003.27E+021.35E+004.32E+018.50E+021.52E+04 + 59L1 59.008.37E-023.93E-011.79E+005.65E+016.50E-011.52E+012.39E+023.53E+03 + 59L1 76.004.40E-022.23E-019.18E-011.15E+013.11E-015.35E+006.74E+018.13E+02 + 59L1 89.002.93E-021.50E-016.22E-015.15E+001.97E-012.84E+003.11E+013.30E+02 + 59L1 106.001.86E-029.34E-023.91E-012.43E+001.19E-011.42E+001.34E+011.24E+02 + 59L1 129.001.11E-025.36E-022.21E-011.14E+006.85E-026.66E-015.32E+004.18E+01 + 59L1 155.006.85E-033.14E-021.26E-015.80E-014.09E-023.33E-012.29E+001.55E+01 + 59L1 220.002.75E-031.11E-024.03E-021.58E-011.56E-029.34E-024.86E-012.51E+00 + 59L1 305.001.20E-034.23E-031.38E-024.67E-026.51E-033.03E-021.24E-015.03E-01 + 59L1 400.006.23E-041.97E-035.82E-031.75E-023.21E-031.25E-024.26E-021.43E-01 + 59L1 510.003.56E-041.03E-032.79E-037.54E-031.73E-035.87E-031.72E-024.97E-02 + 59L1 740.001.61E-044.18E-049.91E-042.29E-036.90E-041.97E-034.76E-031.11E-02 + 59L11000.008.96E-052.16E-044.65E-049.57E-043.37E-048.60E-041.83E-033.71E-03 + 59L11500.004.35E-059.60E-051.84E-043.33E-041.33E-043.03E-045.63E-049.85E-04 + 59L2 7.441.32E+019.61E+043.43E+071.52E+092.88E+015.60E+031.84E+052.03E+06 + 59L2 8.141.03E+016.12E+042.03E+071.09E+092.19E+013.94E+031.57E+052.90E+06 + 59L2 9.446.74E+002.91E+048.47E+065.41E+081.39E+012.21E+031.05E+052.93E+06 + 59L2 12.642.88E+006.77E+031.52E+061.06E+085.71E+007.00E+023.63E+041.36E+06 + 59L2 16.441.31E+001.83E+033.22E+052.13E+072.56E+002.48E+021.22E+044.72E+05 + 59L2 20.007.15E-016.93E+021.01E+056.16E+061.41E+001.14E+025.20E+031.92E+05 + 59L2 26.003.14E-011.90E+022.17E+041.14E+066.35E-014.05E+011.60E+035.28E+04 + 59L2 34.001.33E-015.11E+014.49E+031.97E+052.81E-011.41E+014.66E+021.32E+04 + 59L2 46.004.96E-021.18E+017.72E+022.71E+041.13E-014.28E+001.14E+022.65E+03 + 59L2 59.002.18E-023.54E+001.83E+025.30E+035.32E-021.61E+003.56E+016.91E+02 + 59L2 76.009.35E-031.06E+004.28E+011.01E+032.49E-026.01E-011.09E+011.74E+02 + 59L2 89.005.51E-035.02E-011.74E+013.62E+021.55E-023.26E-015.21E+007.38E+01 + 59L2 106.003.06E-032.21E-016.51E+001.17E+029.19E-031.66E-012.31E+002.86E+01 + 59L2 129.001.58E-038.90E-022.18E+003.34E+015.12E-037.82E-029.30E-019.88E+00 + 59L2 155.008.58E-043.84E-027.93E-011.05E+012.97E-033.89E-024.00E-013.69E+00 + 59L2 220.002.70E-047.99E-031.20E-011.20E+001.06E-031.04E-028.21E-025.80E-01 + 59L2 305.009.42E-051.94E-032.21E-021.71E-014.06E-043.14E-031.94E-021.08E-01 + 59L2 400.004.02E-056.25E-045.72E-033.63E-021.85E-041.19E-036.09E-032.81E-02 + 59L2 510.001.93E-052.35E-041.78E-039.60E-039.19E-055.05E-042.22E-038.76E-03 + 59L2 740.006.58E-065.69E-053.30E-041.40E-033.18E-051.42E-045.02E-041.60E-03 + 59L21000.002.85E-061.94E-059.28E-053.33E-041.36E-055.28E-051.60E-044.38E-04 + 59L21500.001.00E-065.07E-061.92E-055.64E-054.42E-061.47E-053.75E-058.63E-05 + 59L3 6.962.77E+012.08E+058.30E+074.06E+097.58E+001.72E+054.18E+081.04E+11 + 59L3 7.662.10E+011.28E+054.67E+072.74E+095.64E+001.07E+052.18E+085.00E+10 + 59L3 8.961.33E+015.78E+041.82E+071.25E+093.48E+004.89E+047.55E+071.50E+10 + 59L3 12.165.30E+001.23E+042.89E+062.10E+081.36E+001.07E+049.70E+061.46E+09 + 59L3 15.962.28E+003.11E+035.59E+053.79E+075.90E-012.75E+031.59E+061.86E+08 + 59L3 20.001.11E+009.97E+021.43E+058.72E+062.95E-018.95E+023.60E+053.41E+07 + 59L3 26.004.75E-012.65E+022.93E+041.52E+061.32E-012.43E+026.50E+044.84E+06 + 59L3 34.001.96E-016.88E+015.79E+032.50E+055.82E-026.40E+011.16E+046.72E+05 + 59L3 46.007.06E-021.51E+019.34E+023.20E+042.31E-021.43E+011.70E+037.49E+04 + 59L3 59.003.02E-024.34E+002.08E+025.83E+031.08E-024.19E+003.59E+021.26E+04 + 59L3 76.001.26E-021.23E+004.54E+011.03E+035.04E-031.21E+007.56E+012.12E+03 + 59L3 89.007.29E-035.60E-011.76E+013.49E+023.12E-035.57E-012.90E+017.09E+02 + 59L3 106.003.98E-032.36E-016.19E+001.06E+021.84E-032.37E-011.01E+012.13E+02 + 59L3 129.002.02E-038.96E-021.92E+002.77E+011.02E-039.17E-023.17E+005.64E+01 + 59L3 155.001.07E-033.65E-026.49E-017.96E+005.90E-043.79E-021.08E+001.66E+01 + 59L3 220.003.27E-046.76E-038.36E-027.57E-012.09E-047.18E-031.46E-011.69E+00 + 59L3 305.001.12E-041.46E-031.29E-028.84E-028.09E-051.57E-032.36E-022.16E-01 + 59L3 400.004.71E-054.27E-042.86E-031.57E-023.74E-054.60E-045.44E-034.12E-02 + 59L3 510.002.25E-051.49E-047.82E-043.53E-031.91E-051.58E-041.51E-039.78E-03 + 59L3 740.007.88E-063.28E-051.21E-044.14E-047.13E-063.34E-052.26E-041.17E-03 + 59L31000.003.60E-061.08E-053.05E-058.51E-053.38E-061.05E-055.22E-052.28E-04 + 59L31500.001.40E-062.88E-065.96E-061.28E-051.35E-062.68E-068.28E-062.82E-05 + 59M1 2.518.66E+003.02E+041.54E+067.00E+081.63E+038.12E+066.91E+091.36E+12 + 59M1 3.515.70E+007.54E+036.74E+054.68E+075.97E+021.57E+067.92E+081.33E+11 + 59M1 5.512.80E+001.00E+031.62E+056.73E+061.55E+021.74E+054.58E+075.71E+09 + 59M1 9.511.02E+006.23E+011.49E+041.00E+063.03E+011.26E+041.62E+061.32E+08 + 59M1 16.513.29E-012.17E+008.10E+025.90E+045.83E+009.45E+026.25E+043.18E+06 + 59M1 26.001.20E-012.77E-015.20E+013.78E+031.51E+001.19E+024.74E+031.62E+05 + 59M1 41.004.13E-021.58E-012.83E+001.86E+023.93E-011.59E+013.94E+028.91E+03 + 59M1 53.002.20E-021.02E-017.27E-013.22E+011.85E-015.27E+001.01E+021.82E+03 + 59M1 71.001.06E-025.34E-022.58E-014.84E+007.88E-021.55E+002.24E+013.11E+02 + 59M1 104.003.95E-031.99E-028.70E-026.58E-012.63E-023.32E-013.37E+003.33E+01 + 59M1 150.001.52E-036.98E-032.87E-021.46E-019.33E-038.09E-025.93E-014.30E+00 + 59M1 280.003.04E-041.11E-033.76E-031.35E-021.70E-038.58E-033.81E-021.68E-01 + 59M1 500.007.62E-052.24E-046.13E-041.69E-033.77E-041.31E-033.94E-031.16E-02 + 59M2 2.342.04E+016.68E+061.75E+105.69E+122.02E+022.88E+056.93E+076.06E+09 + 59M2 3.341.11E+011.12E+061.73E+094.74E+116.90E+015.78E+041.17E+071.26E+09 + 59M2 5.344.14E+001.07E+058.66E+071.78E+101.67E+017.31E+031.11E+061.14E+08 + 59M2 9.341.06E+006.56E+032.64E+063.64E+083.08E+006.70E+026.87E+045.44E+06 + 59M2 16.342.31E-014.08E+028.61E+047.71E+065.69E-016.55E+014.37E+032.42E+05 + 59M2 26.005.89E-024.15E+015.27E+033.23E+051.40E-019.87E+004.54E+021.78E+04 + 59M2 41.001.44E-024.52E+003.56E+021.49E+043.55E-021.59E+005.01E+011.38E+03 + 59M2 53.006.35E-031.31E+007.93E+012.66E+031.64E-025.74E-011.46E+013.27E+02 + 59M2 71.002.46E-033.26E-011.46E+013.82E+026.85E-031.82E-013.62E+006.39E+01 + 59M2 104.007.01E-045.42E-021.67E+003.14E+012.19E-034.11E-025.96E-017.71E+00 + 59M2 150.002.09E-041.00E-022.18E-013.01E+007.40E-041.01E-021.09E-011.05E+00 + 59M2 280.002.76E-056.34E-047.85E-036.57E-021.18E-049.83E-046.53E-033.90E-02 + 59M2 500.004.61E-065.79E-054.49E-042.46E-032.21E-051.24E-045.53E-042.23E-03 + 59M3 2.244.70E+011.35E+073.72E+101.23E+135.02E+011.16E+072.70E+116.32E+14 + 59M3 3.242.33E+012.11E+063.34E+099.10E+111.64E+011.84E+062.10E+102.74E+13 + 59M3 5.247.99E+001.87E+051.52E+083.06E+103.79E+001.67E+057.69E+084.91E+11 + 59M3 9.241.88E+001.08E+044.24E+065.68E+086.74E-019.85E+031.61E+074.79E+09 + 59M3 16.243.82E-016.28E+021.28E+051.11E+071.21E-015.92E+023.66E+055.48E+07 + 59M3 26.009.10E-025.90E+017.09E+034.18E+052.89E-025.69E+011.65E+041.46E+06 + 59M3 41.002.12E-026.02E+004.42E+021.77E+047.26E-035.94E+008.80E+024.82E+04 + 59M3 53.009.07E-031.67E+009.33E+012.98E+033.34E-031.67E+001.74E+027.36E+03 + 59M3 71.003.40E-033.90E-011.60E+013.95E+021.38E-033.95E-012.82E+019.01E+02 + 59M3 104.009.29E-045.90E-021.61E+002.85E+014.39E-046.10E-022.77E+006.20E+01 + 59M3 150.002.67E-049.81E-031.83E-012.34E+001.47E-041.04E-023.16E-015.14E+00 + 59M3 280.003.33E-054.99E-044.86E-033.61E-022.36E-055.44E-049.03E-038.93E-02 + 59M3 500.005.51E-063.73E-052.01E-049.30E-044.63E-064.01E-053.96E-042.63E-03 + 59M4 1.951.11E+024.08E+053.09E+105.02E+141.43E+013.40E+054.16E+094.60E+12 + 59M4 2.952.96E+014.90E+041.68E+091.36E+133.71E+004.26E+042.56E+082.05E+11 + 59M4 4.955.04E+003.49E+034.39E+071.55E+116.66E-013.15E+038.22E+064.25E+09 + 59M4 8.955.75E-011.69E+026.71E+059.94E+088.90E-021.58E+021.71E+055.22E+07 + 59M4 15.956.05E-028.58E+001.13E+047.70E+061.18E-028.51E+004.17E+037.47E+05 + 59M4 26.008.24E-036.70E-013.63E+021.33E+052.05E-037.17E-011.88E+022.14E+04 + 59M4 41.001.21E-036.09E-021.49E+013.14E+033.88E-047.15E-021.08E+018.02E+02 + 59M4 53.004.02E-041.57E-022.49E+003.89E+021.49E-041.95E-022.20E+001.28E+02 + 59M4 71.001.13E-043.33E-033.28E-013.67E+014.99E-054.46E-033.63E-011.61E+01 + 59M4 104.002.16E-054.44E-042.41E-021.75E+001.17E-056.54E-043.53E-021.10E+00 + 59M4 150.004.44E-066.56E-052.05E-039.96E-022.89E-061.05E-043.87E-038.73E-02 + 59M4 280.003.15E-072.76E-063.62E-058.80E-042.64E-074.77E-069.67E-051.29E-03 + 59M4 500.002.98E-081.71E-071.11E-061.40E-052.90E-082.89E-073.51E-063.04E-05 + 59M5 1.931.65E+025.28E+055.14E+107.76E+148.74E+003.57E+042.06E+101.40E+15 + 59M5 2.934.31E+016.19E+042.73E+092.02E+132.25E+004.45E+031.11E+093.36E+13 + 59M5 4.937.18E+004.31E+036.96E+072.23E+114.06E-013.33E+022.92E+073.28E+11 + 59M5 8.938.00E-012.04E+021.04E+061.38E+095.54E-021.73E+014.59E+051.73E+09 + 59M5 15.938.24E-021.01E+011.72E+041.03E+077.59E-039.80E-018.07E+031.11E+07 + 59M5 26.001.10E-027.67E-015.32E+021.70E+051.36E-038.75E-022.65E+021.66E+05 + 59M5 41.001.59E-036.75E-022.11E+013.84E+032.65E-049.39E-031.12E+013.53E+03 + 59M5 53.005.23E-041.70E-023.44E+004.59E+021.04E-042.69E-031.88E+004.15E+02 + 59M5 71.001.46E-043.50E-034.37E-014.13E+013.58E-056.53E-042.50E-013.74E+01 + 59M5 104.002.77E-054.46E-043.00E-021.81E+008.78E-061.05E-041.81E-021.70E+00 + 59M5 150.005.72E-066.29E-052.36E-039.31E-022.28E-061.86E-051.50E-039.22E-02 + 59M5 280.004.25E-072.47E-063.45E-056.46E-042.38E-071.08E-062.38E-057.39E-04 + 59M5 500.004.47E-081.53E-078.79E-077.75E-063.25E-089.25E-086.48E-071.00E-05 + 59N+ 50.001.14E-021.06E+006.93E+012.80E+036.66E-022.84E+001.28E+025.11E+03 + 59N+ 70.004.45E-032.15E-019.28E+002.65E+022.49E-026.56E-011.81E+014.75E+02 + 59N+ 100.001.64E-034.16E-021.15E+002.30E+018.87E-031.47E-012.50E+004.28E+01 + 59N+ 150.005.31E-047.07E-031.16E-011.55E+002.80E-032.88E-023.00E-013.24E+00 + 59N+ 200.002.41E-042.17E-032.45E-022.45E-011.26E-039.61E-037.30E-025.78E-01 + 59N+ 500.002.35E-058.63E-053.42E-041.39E-031.11E-044.08E-041.38E-034.72E-03 + 60K 44.571.89E+004.64E+002.20E+003.86E-011.28E+012.21E+026.56E+024.36E+02 + 60K 45.271.81E+004.79E+003.18E+001.08E+001.22E+012.09E+026.64E+026.17E+02 + 60K 46.571.68E+004.96E+004.97E+003.25E+001.12E+011.87E+026.63E+029.26E+02 + 60K 49.771.42E+005.10E+008.70E+001.20E+019.26E+001.46E+026.25E+021.48E+03 + 60K 53.571.17E+004.88E+001.16E+012.40E+017.46E+001.11E+025.45E+021.77E+03 + 60K 58.009.51E-014.43E+001.31E+013.51E+015.91E+008.24E+014.46E+021.79E+03 + 60K 64.007.34E-013.73E+001.31E+014.28E+014.44E+005.70E+013.33E+021.57E+03 + 60K 72.005.36E-012.89E+001.15E+014.31E+013.15E+003.68E+012.25E+021.18E+03 + 60K 84.003.54E-011.97E+008.47E+003.49E+012.02E+002.08E+011.29E+027.19E+02 + 60K 97.002.40E-011.33E+005.87E+002.50E+011.33E+001.23E+017.43E+014.19E+02 + 60K 114.001.55E-018.32E-013.65E+001.56E+018.41E-016.81E+003.94E+012.17E+02 + 60K 127.001.15E-016.01E-012.60E+001.09E+016.20E-014.62E+002.56E+011.37E+02 + 60K 144.008.17E-024.08E-011.71E+007.01E+004.35E-012.95E+001.55E+017.89E+01 + 60K 167.005.46E-022.57E-011.03E+004.04E+002.88E-011.75E+008.57E+004.09E+01 + 60K 195.003.60E-021.58E-016.01E-012.23E+001.88E-011.03E+004.62E+002.04E+01 + 60K 260.001.68E-026.44E-022.19E-017.29E-018.64E-023.90E-011.50E+005.67E+00 + 60K 345.008.19E-032.75E-028.33E-022.47E-014.10E-021.57E-015.15E-011.66E+00 + 60K 430.004.80E-031.47E-024.08E-021.10E-012.32E-027.91E-022.31E-016.62E-01 + 60K 540.002.84E-037.99E-032.04E-025.04E-021.31E-024.01E-021.05E-012.66E-01 + 60K 770.001.34E-033.38E-037.64E-031.65E-025.49E-031.46E-023.27E-027.05E-02 + 60K 1050.007.35E-041.72E-033.55E-036.90E-032.63E-036.39E-031.28E-022.43E-02 + 60K 1300.005.01E-041.12E-032.18E-033.98E-031.61E-033.70E-036.95E-031.23E-02 + 60K 1550.003.70E-047.97E-041.49E-032.59E-031.08E-032.40E-034.30E-037.22E-03 + 60L1 8.135.95E+001.47E+039.95E+041.11E+062.57E+021.27E+051.10E+072.21E+08 + 60L1 8.835.18E+009.38E+028.24E+041.59E+062.01E+028.56E+046.94E+061.71E+08 + 60L1 10.134.07E+004.32E+025.12E+041.59E+061.33E+024.46E+043.25E+069.59E+07 + 60L1 13.332.44E+008.06E+011.46E+046.80E+055.86E+011.23E+047.15E+052.36E+07 + 60L1 17.131.47E+001.41E+013.77E+032.05E+052.77E+013.85E+031.81E+055.75E+06 + 60L1 21.009.59E-013.04E+001.13E+036.57E+041.51E+011.52E+035.97E+041.75E+06 + 60L1 27.005.52E-018.55E-012.27E+021.41E+047.17E+004.91E+021.55E+043.96E+05 + 60L1 35.003.04E-017.16E-013.86E+012.54E+033.32E+001.56E+023.90E+038.45E+04 + 60L1 47.001.50E-015.54E-015.55E+003.27E+021.39E+004.38E+018.42E+021.47E+04 + 60L1 60.008.23E-023.67E-011.80E+005.96E+016.82E-011.57E+012.42E+023.51E+03 + 60L1 77.004.38E-022.12E-018.83E-011.23E+013.30E-015.62E+006.97E+018.27E+02 + 60L1 90.002.93E-021.44E-015.95E-015.40E+002.10E-013.00E+003.25E+013.40E+02 + 60L1 107.001.87E-029.10E-023.76E-012.48E+001.28E-011.51E+001.41E+011.29E+02 + 60L1 130.001.13E-025.28E-022.15E-011.15E+007.37E-027.13E-015.64E+004.39E+01 + 60L1 155.007.12E-033.18E-021.26E-015.96E-014.50E-023.67E-012.51E+001.70E+01 + 60L1 220.002.87E-031.13E-024.11E-021.62E-011.71E-021.03E-015.33E-012.74E+00 + 60L1 305.001.26E-034.38E-031.42E-024.85E-027.14E-033.33E-021.36E-015.49E-01 + 60L1 400.006.53E-042.05E-036.06E-031.83E-023.51E-031.37E-024.66E-021.56E-01 + 60L1 510.003.74E-041.08E-032.93E-037.94E-031.89E-036.42E-031.88E-025.41E-02 + 60L1 740.001.70E-044.42E-041.05E-032.43E-037.52E-042.15E-035.18E-031.21E-02 + 60L11000.009.46E-052.29E-044.94E-041.02E-033.66E-049.36E-041.99E-034.04E-03 + 60L11500.004.60E-051.02E-041.97E-043.56E-041.43E-043.29E-046.11E-041.07E-03 + 60L2 7.721.23E+018.74E+042.99E+071.26E+092.85E+015.28E+031.65E+051.68E+06 + 60L2 8.429.66E+005.66E+041.80E+079.18E+082.19E+013.77E+031.42E+052.45E+06 + 60L2 9.726.44E+002.76E+047.74E+064.70E+081.41E+012.15E+039.67E+042.55E+06 + 60L2 12.922.82E+006.66E+031.45E+069.71E+075.92E+007.03E+023.49E+041.25E+06 + 60L2 16.721.30E+001.85E+033.18E+052.03E+072.70E+002.54E+021.21E+044.50E+05 + 60L2 21.006.47E-015.98E+028.31E+044.83E+061.35E+001.04E+024.49E+031.59E+05 + 60L2 27.002.94E-011.74E+021.90E+049.58E+056.29E-013.84E+011.45E+034.62E+04 + 60L2 35.001.28E-014.87E+014.16E+031.77E+052.87E-011.38E+014.42E+021.21E+04 + 60L2 47.004.92E-021.16E+017.47E+022.56E+041.18E-014.34E+001.13E+022.54E+03 + 60L2 60.002.20E-023.60E+001.82E+025.17E+035.64E-021.67E+003.60E+016.83E+02 + 60L2 77.009.61E-031.10E+004.37E+011.02E+032.67E-026.32E-011.12E+011.77E+02 + 60L2 90.005.70E-035.25E-011.80E+013.69E+021.67E-023.46E-015.43E+007.58E+01 + 60L2 107.003.20E-032.34E-016.81E+001.21E+029.99E-031.77E-012.43E+002.97E+01 + 60L2 130.001.67E-039.49E-022.30E+003.49E+015.60E-038.43E-029.89E-011.04E+01 + 60L2 155.009.30E-044.25E-028.76E-011.15E+013.32E-034.32E-024.42E-014.05E+00 + 60L2 220.002.94E-048.85E-031.34E-011.33E+001.18E-031.16E-029.10E-026.40E-01 + 60L2 305.001.03E-042.15E-032.46E-021.90E-014.56E-043.51E-032.16E-021.20E-01 + 60L2 400.004.41E-056.95E-046.36E-034.04E-022.08E-041.33E-036.78E-033.13E-02 + 60L2 510.002.11E-052.62E-041.99E-031.07E-021.03E-045.67E-042.48E-039.75E-03 + 60L2 740.007.17E-066.34E-053.70E-041.57E-033.59E-051.60E-045.63E-041.79E-03 + 60L21000.003.17E-062.17E-051.04E-043.72E-041.54E-055.94E-051.80E-044.90E-04 + 60L21500.001.09E-065.67E-062.16E-056.33E-054.99E-061.66E-054.23E-059.71E-05 + 60L3 7.212.59E+011.90E+057.30E+073.42E+097.36E+001.64E+053.83E+089.23E+10 + 60L3 7.911.99E+011.19E+054.19E+072.34E+095.54E+001.03E+052.04E+084.52E+10 + 60L3 9.211.27E+015.49E+041.67E+071.10E+093.47E+004.83E+047.29E+071.41E+10 + 60L3 12.415.19E+001.21E+042.78E+061.95E+081.38E+001.09E+049.81E+061.44E+09 + 60L3 16.212.27E+003.14E+035.53E+053.63E+076.09E-012.88E+031.66E+061.90E+08 + 60L3 21.009.97E-018.49E+021.16E+056.73E+062.75E-017.93E+023.01E+052.72E+07 + 60L3 27.004.41E-012.39E+022.53E+041.27E+061.27E-012.27E+025.85E+044.19E+06 + 60L3 35.001.87E-016.47E+015.28E+032.20E+055.76E-026.27E+011.10E+046.21E+05 + 60L3 47.006.94E-021.47E+018.91E+022.97E+042.34E-021.45E+011.70E+037.31E+04 + 60L3 60.003.02E-024.34E+002.05E+025.60E+031.11E-024.35E+003.69E+021.28E+04 + 60L3 77.001.28E-021.25E+004.57E+011.02E+035.24E-031.28E+007.94E+012.20E+03 + 60L3 90.007.47E-035.77E-011.79E+013.50E+023.27E-035.95E-013.08E+017.44E+02 + 60L3 107.004.11E-032.45E-016.38E+001.07E+021.94E-032.56E-011.09E+012.27E+02 + 60L3 130.002.10E-039.41E-022.00E+002.84E+011.08E-039.94E-023.43E+006.05E+01 + 60L3 155.001.15E-033.98E-027.07E-018.63E+006.39E-044.26E-021.22E+001.87E+01 + 60L3 220.003.50E-047.37E-039.11E-028.22E-012.27E-048.06E-031.64E-011.91E+00 + 60L3 305.001.19E-041.59E-031.41E-029.62E-028.76E-051.76E-032.66E-022.43E-01 + 60L3 400.005.07E-054.66E-043.13E-031.71E-024.05E-055.13E-046.12E-034.63E-02 + 60L3 510.002.44E-051.62E-048.53E-043.85E-032.07E-051.76E-041.69E-031.10E-02 + 60L3 740.008.51E-063.57E-051.32E-044.52E-047.70E-063.69E-052.53E-041.32E-03 + 60L31000.003.86E-061.17E-053.33E-059.29E-053.65E-061.15E-055.82E-052.55E-04 + 60L31500.001.51E-063.12E-066.49E-061.40E-051.45E-062.93E-069.18E-063.15E-05 + 60M1 2.578.29E+002.96E+041.56E+066.33E+081.68E+038.18E+066.84E+091.32E+12 + 60M1 3.575.52E+007.62E+036.63E+054.77E+076.28E+021.63E+068.19E+081.35E+11 + 60M1 5.572.75E+001.05E+031.62E+056.53E+061.66E+021.87E+054.92E+076.03E+09 + 60M1 9.571.02E+006.95E+011.56E+041.01E+063.29E+011.39E+041.78E+061.43E+08 + 60M1 16.573.32E-012.65E+008.89E+026.23E+046.40E+001.05E+036.94E+043.51E+06 + 60M1 26.001.23E-012.87E-016.11E+014.22E+031.68E+001.34E+025.36E+031.82E+05 + 60M1 41.004.24E-021.51E-013.42E+002.16E+024.37E-011.78E+014.42E+029.98E+03 + 60M1 53.002.27E-029.85E-028.31E-013.80E+012.05E-015.90E+001.13E+022.03E+03 + 60M1 71.001.09E-025.27E-022.68E-015.69E+008.75E-021.73E+002.50E+013.46E+02 + 60M1 104.004.10E-032.00E-028.75E-027.24E-012.91E-023.70E-013.74E+003.70E+01 + 60M1 150.001.58E-037.12E-032.91E-021.54E-011.03E-028.98E-026.58E-014.76E+00 + 60M1 280.003.20E-041.15E-033.90E-031.42E-021.87E-039.49E-034.21E-021.85E-01 + 60M1 500.008.08E-052.36E-046.48E-041.80E-034.15E-041.44E-034.34E-031.28E-02 + 60M2 2.401.94E+016.41E+061.64E+105.17E+122.07E+022.87E+056.68E+075.50E+09 + 60M2 3.401.07E+011.12E+061.71E+094.56E+117.26E+015.97E+041.18E+071.21E+09 + 60M2 5.404.11E+001.11E+058.94E+071.80E+101.80E+017.78E+031.16E+061.15E+08 + 60M2 9.401.08E+007.00E+032.81E+063.81E+083.37E+007.26E+027.33E+045.68E+06 + 60M2 16.402.39E-014.43E+029.32E+048.25E+066.28E-017.18E+014.73E+032.58E+05 + 60M2 26.006.24E-024.60E+015.84E+033.56E+051.57E-011.10E+015.01E+021.95E+04 + 60M2 41.001.54E-025.01E+003.94E+021.64E+043.98E-021.77E+005.54E+011.52E+03 + 60M2 53.006.81E-031.46E+008.80E+012.94E+031.84E-026.40E-011.62E+013.60E+02 + 60M2 71.002.65E-033.62E-011.62E+014.22E+027.70E-032.03E-014.01E+007.04E+01 + 60M2 104.007.60E-046.02E-021.86E+003.48E+012.47E-034.60E-026.63E-018.53E+00 + 60M2 150.002.28E-041.12E-022.43E-013.35E+008.35E-041.13E-021.21E-011.16E+00 + 60M2 280.003.02E-057.09E-048.80E-037.34E-021.34E-041.11E-037.32E-034.36E-02 + 60M2 500.005.08E-066.49E-055.05E-042.77E-032.51E-051.40E-046.23E-042.50E-03 + 60M3 2.304.52E+011.31E+073.55E+101.14E+135.07E+011.18E+072.69E+116.19E+14 + 60M3 3.302.28E+012.13E+063.33E+098.88E+111.69E+011.94E+062.20E+102.85E+13 + 60M3 5.307.98E+001.95E+051.58E+083.11E+104.00E+001.81E+058.40E+085.37E+11 + 60M3 9.301.92E+001.15E+044.50E+065.95E+087.21E-011.09E+041.81E+075.40E+09 + 60M3 16.303.95E-016.78E+021.37E+051.18E+071.30E-016.65E+024.17E+056.26E+07 + 60M3 26.009.59E-026.48E+017.79E+034.55E+053.15E-026.50E+011.92E+041.70E+06 + 60M3 41.002.25E-026.62E+004.86E+021.93E+047.92E-036.77E+001.02E+035.59E+04 + 60M3 53.009.66E-031.84E+001.02E+023.26E+033.64E-031.90E+002.01E+028.50E+03 + 60M3 71.003.63E-034.29E-011.75E+014.31E+021.51E-034.50E-013.25E+011.04E+03 + 60M3 104.009.94E-046.49E-021.77E+003.12E+014.79E-046.95E-023.18E+007.12E+01 + 60M3 150.002.86E-041.08E-022.01E-012.56E+001.61E-041.18E-023.62E-015.88E+00 + 60M3 280.003.62E-055.50E-045.35E-033.96E-022.58E-056.16E-041.03E-021.02E-01 + 60M3 500.005.96E-064.10E-052.22E-041.02E-035.05E-064.50E-054.49E-042.98E-03 + 60M4 2.001.08E+023.97E+052.96E+104.75E+141.46E+013.46E+054.16E+094.48E+12 + 60M4 3.002.98E+014.98E+041.71E+091.38E+133.89E+004.52E+042.71E+082.13E+11 + 60M4 5.005.22E+003.67E+034.68E+071.67E+117.15E-013.46E+039.06E+064.62E+09 + 60M4 9.006.11E-011.82E+027.39E+051.11E+099.73E-021.78E+021.94E+055.85E+07 + 60M4 16.006.55E-029.40E+001.27E+048.72E+061.31E-029.70E+004.78E+038.51E+05 + 60M4 26.009.11E-037.50E-014.16E+021.54E+052.31E-038.30E-012.20E+022.48E+04 + 60M4 41.001.34E-036.85E-021.71E+013.65E+034.37E-048.29E-021.26E+019.33E+02 + 60M4 53.004.49E-041.77E-022.85E+004.51E+021.69E-042.26E-022.57E+001.49E+02 + 60M4 71.001.27E-043.77E-033.77E-014.26E+015.65E-055.18E-034.23E-011.87E+01 + 60M4 104.002.42E-055.05E-042.77E-022.03E+001.33E-057.60E-044.11E-021.28E+00 + 60M4 150.004.94E-067.48E-052.36E-031.16E-013.29E-061.22E-044.52E-031.02E-01 + 60M4 280.003.52E-073.18E-064.16E-051.02E-033.01E-075.55E-061.13E-041.51E-03 + 60M4 500.003.37E-081.97E-071.28E-061.63E-053.32E-083.36E-074.11E-063.57E-05 + 60M5 1.981.61E+025.12E+054.97E+107.38E+148.89E+003.59E+042.07E+101.38E+15 + 60M5 2.984.34E+016.26E+042.79E+092.06E+132.35E+004.66E+031.18E+093.57E+13 + 60M5 4.987.44E+004.50E+037.45E+072.40E+114.34E-013.59E+023.25E+073.69E+11 + 60M5 8.988.49E-012.18E+021.15E+061.53E+096.02E-021.91E+015.26E+052.02E+09 + 60M5 15.988.90E-021.10E+011.93E+041.17E+078.35E-031.09E+009.39E+031.32E+07 + 60M5 26.001.21E-028.50E-016.12E+021.96E+051.51E-039.90E-023.15E+022.01E+05 + 60M5 41.001.76E-037.52E-022.43E+014.44E+032.97E-041.06E-021.33E+014.25E+03 + 60M5 53.005.82E-041.89E-023.95E+005.30E+021.17E-043.04E-032.23E+005.00E+02 + 60M5 71.001.63E-043.92E-035.03E-014.77E+014.02E-057.39E-042.96E-014.49E+01 + 60M5 104.003.09E-055.01E-043.46E-022.10E+009.89E-061.19E-042.14E-022.03E+00 + 60M5 150.006.31E-067.08E-052.71E-031.08E-012.57E-062.11E-051.77E-031.10E-01 + 60M5 280.004.68E-072.80E-063.96E-057.47E-042.69E-071.23E-062.80E-058.76E-04 + 60M5 500.005.07E-081.79E-071.01E-068.98E-063.68E-081.05E-077.53E-071.18E-05 + 60N+ 50.001.28E-021.22E+007.66E+012.99E+037.70E-023.17E+001.37E+025.17E+03 + 60N+ 70.004.92E-032.42E-011.02E+012.83E+022.84E-027.26E-011.93E+014.84E+02 + 60N+ 100.001.83E-034.74E-021.30E+002.54E+011.03E-021.66E-012.74E+004.53E+01 + 60N+ 150.005.87E-047.96E-031.30E-011.72E+003.23E-033.25E-023.30E-013.47E+00 + 60N+ 200.002.63E-042.40E-032.71E-022.69E-011.43E-031.07E-027.98E-026.19E-01 + 60N+ 500.002.51E-059.28E-053.71E-041.52E-031.23E-044.54E-041.53E-035.25E-03 + 61K 46.181.75E+004.13E+001.86E+003.04E-011.26E+012.09E+025.94E+023.77E+02 + 61K 46.881.69E+004.26E+002.68E+008.44E-011.21E+011.97E+026.02E+025.30E+02 + 61K 48.181.57E+004.41E+004.17E+002.53E+001.11E+011.77E+026.01E+027.94E+02 + 61K 51.381.33E+004.55E+007.30E+009.39E+009.21E+001.40E+025.70E+021.27E+03 + 61K 55.181.11E+004.38E+009.79E+001.90E+017.47E+001.07E+025.01E+021.54E+03 + 61K 59.009.30E-014.06E+001.11E+012.72E+016.15E+008.34E+014.27E+021.59E+03 + 61K 65.007.21E-013.46E+001.14E+013.47E+014.64E+005.82E+013.23E+021.43E+03 + 61K 73.005.30E-012.72E+001.02E+013.63E+013.31E+003.78E+012.21E+021.10E+03 + 61K 85.003.53E-011.88E+007.73E+003.05E+012.13E+002.15E+011.29E+026.89E+02 + 61K 98.002.40E-011.28E+005.45E+002.24E+011.41E+001.28E+017.51E+014.09E+02 + 61K 115.001.56E-018.11E-013.45E+001.43E+018.96E-017.14E+004.03E+012.15E+02 + 61K 128.001.16E-015.89E-012.48E+001.01E+016.62E-014.86E+002.64E+011.37E+02 + 61K 145.008.29E-024.03E-011.65E+006.60E+004.66E-013.12E+001.60E+017.99E+01 + 61K 168.005.56E-022.56E-011.01E+003.86E+003.09E-011.86E+008.92E+004.18E+01 + 61K 195.003.72E-021.61E-016.02E-012.20E+002.05E-011.11E+004.94E+002.15E+01 + 61K 260.001.75E-026.60E-022.22E-017.32E-019.40E-024.22E-011.61E+006.02E+00 + 61K 345.008.53E-032.84E-028.53E-022.52E-014.45E-021.69E-015.52E-011.77E+00 + 61K 440.004.75E-031.43E-023.91E-021.05E-012.38E-027.97E-022.29E-016.44E-01 + 61K 550.002.86E-037.94E-032.00E-024.91E-021.35E-024.10E-021.06E-012.65E-01 + 61K 780.001.37E-033.44E-037.74E-031.66E-025.75E-031.53E-023.38E-027.21E-02 + 61K 1050.007.72E-041.81E-033.74E-037.27E-032.84E-036.89E-031.37E-022.61E-02 + 61K 1300.005.25E-041.18E-032.30E-034.20E-031.73E-033.99E-037.47E-031.32E-02 + 61K 1550.003.89E-048.40E-041.57E-032.74E-031.16E-032.58E-034.62E-037.75E-03 + 61L1 8.435.54E+001.35E+038.65E+048.91E+052.54E+021.20E+059.94E+061.91E+08 + 61L1 9.134.85E+008.76E+027.25E+041.30E+062.00E+028.20E+046.40E+061.50E+08 + 61L1 10.433.84E+004.16E+024.62E+041.34E+061.34E+024.36E+043.06E+068.62E+07 + 61L1 13.632.33E+008.26E+011.39E+046.10E+056.04E+011.24E+047.02E+052.22E+07 + 61L1 17.431.43E+001.55E+013.74E+031.93E+052.90E+013.98E+031.82E+055.61E+06 + 61L1 21.009.68E-013.93E+001.26E+036.96E+041.67E+011.70E+036.62E+041.90E+06 + 61L1 27.005.59E-019.16E-012.63E+021.54E+047.90E+005.48E+021.71E+044.32E+05 + 61L1 35.003.09E-016.61E-014.63E+012.85E+033.66E+001.74E+024.32E+039.24E+04 + 61L1 47.001.54E-015.21E-016.63E+003.79E+021.54E+004.87E+019.30E+021.61E+04 + 61L1 60.008.44E-023.53E-011.95E+007.01E+017.51E-011.74E+012.67E+023.84E+03 + 61L1 77.004.51E-022.08E-018.88E-011.42E+013.64E-016.22E+007.68E+019.06E+02 + 61L1 90.003.02E-021.42E-015.90E-016.04E+002.32E-013.31E+003.57E+013.72E+02 + 61L1 107.001.94E-029.08E-023.73E-012.68E+001.41E-011.67E+001.55E+011.41E+02 + 61L1 130.001.17E-025.31E-022.15E-011.20E+008.12E-027.86E-016.20E+004.80E+01 + 61L1 155.007.39E-033.22E-021.27E-016.16E-014.95E-024.04E-012.76E+001.86E+01 + 61L1 220.002.99E-031.16E-024.19E-021.68E-011.88E-021.13E-015.84E-012.99E+00 + 61L1 305.001.31E-034.53E-031.47E-025.05E-027.82E-033.65E-021.49E-015.99E-01 + 61L1 400.006.86E-042.14E-036.32E-031.92E-023.85E-031.50E-025.09E-021.70E-01 + 61L1 510.003.94E-041.13E-033.07E-038.36E-032.07E-037.01E-032.05E-025.89E-02 + 61L1 740.001.79E-044.66E-041.11E-032.58E-038.20E-042.34E-035.65E-031.32E-02 + 61L11000.009.99E-052.42E-045.25E-041.08E-033.98E-041.02E-032.16E-034.39E-03 + 61L11500.004.87E-051.08E-042.10E-043.80E-041.55E-043.57E-046.64E-041.16E-03 + 61L2 8.011.15E+017.96E+042.61E+071.04E+092.82E+014.98E+031.48E+051.39E+06 + 61L2 8.719.10E+005.23E+041.60E+077.75E+082.18E+013.60E+031.29E+052.06E+06 + 61L2 10.016.14E+002.61E+047.07E+064.08E+081.43E+012.09E+038.93E+042.21E+06 + 61L2 13.212.76E+006.54E+031.39E+068.89E+076.14E+007.04E+023.35E+041.14E+06 + 61L2 17.011.29E+001.86E+033.13E+051.93E+072.84E+002.60E+021.20E+044.27E+05 + 61L2 21.006.81E-016.56E+029.07E+045.16E+061.50E+001.14E+024.82E+031.66E+05 + 61L2 27.003.11E-011.90E+022.08E+041.03E+066.99E-014.22E+011.57E+034.88E+04 + 61L2 35.001.36E-015.35E+014.55E+031.91E+053.19E-011.52E+014.79E+021.29E+04 + 61L2 47.005.24E-021.28E+018.19E+022.78E+041.31E-014.78E+001.23E+022.74E+03 + 61L2 60.002.35E-023.96E+002.00E+025.63E+036.29E-021.84E+003.93E+017.38E+02 + 61L2 77.001.03E-021.21E+004.80E+011.11E+032.98E-026.99E-011.23E+011.92E+02 + 61L2 90.006.13E-035.79E-011.98E+014.04E+021.87E-023.82E-015.96E+008.25E+01 + 61L2 107.003.44E-032.58E-017.50E+001.33E+021.12E-021.97E-012.67E+003.24E+01 + 61L2 130.001.80E-031.05E-012.54E+003.83E+016.26E-039.35E-021.09E+001.14E+01 + 61L2 155.001.01E-034.69E-029.68E-011.27E+013.72E-034.80E-024.88E-014.44E+00 + 61L2 220.003.19E-049.80E-031.48E-011.46E+001.33E-031.30E-021.01E-017.05E-01 + 61L2 305.001.12E-042.39E-032.73E-022.10E-015.12E-043.92E-032.40E-021.33E-01 + 61L2 400.004.84E-057.72E-047.08E-034.48E-022.34E-041.49E-037.56E-033.47E-02 + 61L2 510.002.33E-052.91E-042.22E-031.19E-021.17E-046.35E-042.76E-031.08E-02 + 61L2 740.007.89E-067.07E-054.13E-041.75E-034.05E-051.79E-046.30E-041.99E-03 + 61L21000.003.50E-062.42E-051.16E-044.17E-041.74E-056.69E-052.02E-045.49E-04 + 61L21500.001.21E-066.34E-062.42E-057.10E-055.64E-061.87E-054.76E-051.09E-04 + 61L3 7.462.43E+011.74E+056.42E+072.87E+097.15E+001.56E+053.51E+088.15E+10 + 61L3 8.161.88E+011.10E+053.75E+072.00E+095.43E+009.98E+041.91E+084.09E+10 + 61L3 9.461.22E+015.21E+041.54E+079.63E+083.44E+004.77E+047.02E+071.31E+10 + 61L3 12.665.08E+001.19E+042.66E+061.80E+081.41E+001.12E+049.89E+061.42E+09 + 61L3 16.462.26E+003.16E+035.46E+053.48E+076.27E-013.01E+031.72E+061.94E+08 + 61L3 21.001.04E+009.23E+021.25E+057.15E+062.97E-018.96E+023.45E+053.11E+07 + 61L3 27.004.63E-012.60E+022.74E+041.35E+061.37E-012.57E+026.70E+044.78E+06 + 61L3 35.001.97E-017.04E+015.72E+032.36E+056.22E-027.07E+011.26E+047.08E+05 + 61L3 47.007.33E-021.60E+019.67E+023.19E+042.53E-021.64E+011.94E+038.32E+04 + 61L3 60.003.20E-024.73E+002.22E+026.03E+031.20E-024.91E+004.20E+021.45E+04 + 61L3 77.001.36E-021.36E+004.96E+011.10E+035.66E-031.44E+009.03E+012.49E+03 + 61L3 90.007.94E-036.29E-011.95E+013.77E+023.53E-036.70E-013.49E+018.42E+02 + 61L3 107.004.37E-032.67E-016.93E+001.16E+022.10E-032.88E-011.23E+012.56E+02 + 61L3 130.002.24E-031.02E-012.18E+003.08E+011.17E-031.12E-013.88E+006.84E+01 + 61L3 155.001.22E-034.34E-027.69E-019.34E+006.91E-044.79E-021.38E+002.11E+01 + 61L3 220.003.76E-048.03E-039.92E-028.92E-012.45E-049.04E-031.85E-012.15E+00 + 61L3 305.001.28E-041.73E-031.53E-021.04E-019.47E-051.97E-033.00E-022.73E-01 + 61L3 400.005.45E-055.08E-043.41E-031.86E-024.38E-055.72E-046.88E-035.20E-02 + 61L3 510.002.61E-051.77E-049.31E-044.20E-032.23E-051.95E-041.90E-031.23E-02 + 61L3 740.009.11E-063.88E-051.44E-044.93E-048.31E-064.08E-052.83E-041.47E-03 + 61L31000.004.14E-061.27E-053.62E-051.01E-043.93E-061.27E-056.49E-052.86E-04 + 61L31500.001.61E-063.38E-067.05E-061.52E-051.56E-063.20E-061.02E-053.51E-05 + 61M1 2.657.85E+002.84E+041.53E+065.51E+081.71E+038.07E+066.57E+091.22E+12 + 61M1 3.655.29E+007.58E+036.42E+054.71E+076.54E+021.67E+068.28E+081.32E+11 + 61M1 5.652.68E+001.09E+031.60E+056.27E+061.77E+021.99E+055.20E+076.25E+09 + 61M1 9.651.01E+007.68E+011.62E+041.00E+063.57E+011.51E+041.94E+061.54E+08 + 61M1 16.653.34E-013.20E+009.69E+026.52E+047.01E+001.16E+037.67E+043.84E+06 + 61M1 26.001.26E-013.09E-017.12E+014.69E+031.86E+001.51E+026.04E+032.04E+05 + 61M1 41.004.36E-021.44E-014.13E+002.49E+024.84E-012.00E+014.96E+021.12E+04 + 61M1 53.002.34E-029.53E-029.63E-014.47E+012.28E-016.61E+001.27E+022.27E+03 + 61M1 71.001.13E-025.19E-022.84E-016.69E+009.70E-021.93E+002.79E+013.85E+02 + 61M1 104.004.26E-032.00E-028.86E-028.06E-013.23E-024.12E-014.16E+004.10E+01 + 61M1 150.001.65E-037.25E-032.95E-021.63E-011.14E-029.97E-027.29E-015.26E+00 + 61M1 280.003.36E-041.19E-034.05E-031.49E-022.07E-031.05E-024.64E-022.04E-01 + 61M1 500.008.55E-052.48E-046.84E-041.91E-034.57E-041.59E-034.76E-031.40E-02 + 61M2 2.471.84E+016.15E+061.53E+104.68E+122.12E+022.86E+056.43E+074.97E+09 + 61M2 3.471.04E+011.12E+061.69E+094.38E+117.63E+016.15E+041.18E+071.16E+09 + 61M2 5.474.08E+001.15E+059.21E+071.81E+101.93E+018.25E+031.20E+061.15E+08 + 61M2 9.471.09E+007.46E+032.98E+063.99E+083.68E+007.86E+027.80E+045.92E+06 + 61M2 16.472.48E-014.80E+021.01E+058.80E+066.94E-017.85E+015.11E+032.74E+05 + 61M2 26.006.59E-025.08E+016.46E+033.91E+051.75E-011.22E+015.52E+022.13E+04 + 61M2 41.001.64E-025.55E+004.37E+021.80E+044.46E-021.97E+006.12E+011.66E+03 + 61M2 53.007.29E-031.61E+009.75E+013.24E+032.07E-027.13E-011.79E+013.95E+02 + 61M2 71.002.85E-034.01E-011.80E+014.66E+028.65E-032.26E-014.44E+007.75E+01 + 61M2 104.008.21E-046.69E-022.06E+003.85E+012.78E-035.14E-027.36E-019.42E+00 + 61M2 150.002.48E-041.24E-022.71E-013.72E+009.41E-041.27E-021.35E-011.29E+00 + 61M2 280.003.33E-057.92E-049.84E-038.19E-021.51E-041.24E-038.20E-034.86E-02 + 61M2 500.005.61E-067.28E-055.67E-043.10E-032.85E-051.58E-047.01E-042.81E-03 + 61M3 2.364.33E+011.26E+073.34E+101.04E+135.09E+011.18E+072.63E+115.95E+14 + 61M3 3.362.23E+012.13E+063.30E+098.56E+111.74E+012.02E+062.28E+102.92E+13 + 61M3 5.367.95E+002.02E+051.62E+083.14E+104.20E+001.95E+059.10E+085.81E+11 + 61M3 9.361.95E+001.22E+044.76E+066.20E+087.69E-011.21E+042.02E+076.05E+09 + 61M3 16.364.08E-017.30E+021.48E+051.25E+071.40E-017.44E+024.74E+057.12E+07 + 61M3 26.001.01E-017.11E+018.54E+034.95E+053.43E-027.40E+012.23E+041.98E+06 + 61M3 41.002.38E-027.26E+005.32E+022.10E+048.61E-037.71E+001.18E+036.46E+04 + 61M3 53.001.03E-022.02E+001.12E+023.55E+033.96E-032.16E+002.31E+029.80E+03 + 61M3 71.003.88E-034.71E-011.92E+014.70E+021.64E-035.12E-013.73E+011.19E+03 + 61M3 104.001.07E-037.13E-021.95E+003.40E+015.22E-047.89E-023.64E+008.15E+01 + 61M3 150.003.09E-041.19E-022.21E-012.80E+001.75E-041.34E-024.13E-016.71E+00 + 61M3 280.003.90E-056.04E-045.88E-034.34E-022.82E-056.95E-041.17E-021.16E-01 + 61M3 500.006.46E-064.51E-052.44E-041.12E-035.50E-065.05E-055.08E-043.38E-03 + 61M4 2.051.05E+023.84E+052.82E+104.45E+141.48E+013.51E+054.12E+094.32E+12 + 61M4 3.052.98E+015.04E+041.73E+091.39E+134.06E+004.78E+042.84E+082.18E+11 + 61M4 5.055.39E+003.85E+034.96E+071.78E+117.65E-013.79E+039.92E+064.99E+09 + 61M4 9.056.47E-011.96E+028.10E+051.22E+091.06E-012.00E+022.18E+056.52E+07 + 61M4 16.057.07E-021.03E+011.42E+049.84E+061.45E-021.10E+015.45E+039.64E+05 + 61M4 26.001.00E-028.37E-014.75E+021.78E+052.59E-039.60E-012.56E+022.88E+04 + 61M4 41.001.49E-037.68E-021.95E+014.22E+034.92E-049.59E-021.47E+011.08E+03 + 61M4 53.005.00E-041.99E-023.27E+005.22E+021.90E-042.62E-022.99E+001.73E+02 + 61M4 71.001.42E-044.25E-034.32E-014.93E+016.39E-056.00E-034.92E-012.17E+01 + 61M4 104.002.72E-055.72E-043.17E-022.35E+001.51E-058.81E-044.79E-021.49E+00 + 61M4 150.005.60E-068.52E-052.71E-031.34E-013.74E-061.41E-045.26E-031.18E-01 + 61M4 280.004.02E-073.63E-064.79E-051.19E-033.43E-076.45E-061.32E-041.76E-03 + 61M4 500.003.64E-082.27E-071.47E-061.90E-053.78E-083.91E-074.81E-064.17E-05 + 61M5 2.031.57E+024.94E+054.77E+106.97E+149.01E+003.59E+042.06E+101.35E+15 + 61M5 3.034.36E+016.30E+042.84E+092.08E+132.45E+004.86E+031.25E+093.77E+13 + 61M5 5.037.68E+004.68E+037.95E+072.56E+114.63E-013.87E+023.59E+074.12E+11 + 61M5 9.038.99E-012.33E+021.27E+061.70E+096.54E-022.10E+016.00E+052.34E+09 + 61M5 16.039.59E-021.19E+012.17E+041.31E+079.16E-031.22E+001.09E+041.56E+07 + 61M5 26.001.33E-029.40E-017.01E+022.27E+051.68E-031.12E-013.73E+022.42E+05 + 61M5 41.001.95E-038.35E-022.78E+015.12E+033.31E-041.20E-021.57E+015.11E+03 + 61M5 53.006.46E-042.11E-024.53E+006.12E+021.31E-043.44E-032.64E+005.99E+02 + 61M5 71.001.82E-044.38E-035.77E-015.50E+014.51E-058.35E-043.50E-015.37E+01 + 61M5 104.003.46E-055.62E-043.97E-022.42E+001.11E-051.34E-042.53E-022.42E+00 + 61M5 150.007.13E-067.97E-053.11E-031.24E-012.90E-062.39E-052.09E-031.31E-01 + 61M5 280.005.34E-073.18E-064.54E-058.62E-043.04E-071.39E-063.27E-051.04E-03 + 61M5 500.005.38E-081.99E-071.15E-061.03E-054.16E-081.19E-078.73E-071.39E-05 + 61N+ 50.001.34E-021.34E+008.48E+013.31E+038.57E-023.57E+001.57E+025.96E+03 + 61N+ 70.005.16E-032.65E-011.13E+013.13E+023.16E-028.15E-012.19E+015.54E+02 + 61N+ 100.001.93E-035.19E-021.43E+002.81E+011.14E-021.85E-013.10E+005.15E+01 + 61N+ 150.006.19E-048.65E-031.44E-011.90E+003.59E-033.63E-023.71E-013.92E+00 + 61N+ 200.002.78E-042.59E-032.99E-022.98E-011.59E-031.20E-028.93E-026.95E-01 + 61N+ 500.002.65E-059.94E-054.07E-041.68E-031.34E-044.98E-041.69E-035.81E-03 + 62K 47.831.63E+003.68E+001.58E+002.39E-011.24E+011.97E+025.39E+023.27E+02 + 62K 48.531.58E+003.80E+002.26E+006.61E-011.19E+011.87E+025.46E+024.57E+02 + 62K 49.831.46E+003.93E+003.50E+001.97E+001.09E+011.68E+025.46E+026.82E+02 + 62K 53.031.25E+004.06E+006.13E+007.38E+009.17E+001.34E+025.21E+021.09E+03 + 62K 56.831.05E+003.94E+008.29E+001.51E+017.49E+001.03E+024.62E+021.34E+03 + 62K 61.008.71E-013.64E+009.50E+002.24E+016.09E+007.94E+013.91E+021.40E+03 + 62K 67.006.81E-013.13E+009.82E+002.87E+014.63E+005.61E+012.99E+021.27E+03 + 62K 75.005.06E-012.49E+008.92E+003.04E+013.34E+003.69E+012.08E+029.95E+02 + 62K 87.003.40E-011.74E+006.87E+002.61E+012.17E+002.13E+011.23E+026.35E+02 + 62K 100.002.34E-011.20E+004.93E+001.96E+011.46E+001.28E+017.30E+013.84E+02 + 62K 117.001.53E-017.70E-013.18E+001.28E+019.31E-017.26E+003.98E+012.06E+02 + 62K 130.001.15E-015.64E-012.30E+009.17E+006.90E-014.97E+002.63E+011.33E+02 + 62K 147.008.24E-023.89E-011.55E+006.06E+004.89E-013.21E+001.61E+017.84E+01 + 62K 170.005.57E-022.49E-019.59E-013.61E+003.26E-011.93E+009.07E+004.15E+01 + 62K 195.003.86E-021.63E-016.02E-012.17E+002.23E-011.20E+005.27E+002.27E+01 + 62K 260.001.81E-026.76E-022.25E-017.34E-011.02E-014.56E-011.72E+006.38E+00 + 62K 345.008.88E-032.92E-028.73E-022.56E-014.84E-021.83E-015.92E-011.88E+00 + 62K 440.004.96E-031.48E-024.04E-021.08E-012.58E-028.61E-022.46E-016.86E-01 + 62K 550.002.99E-038.27E-032.08E-025.09E-021.47E-024.43E-021.13E-012.83E-01 + 62K 780.001.43E-033.61E-038.10E-031.74E-026.21E-031.65E-023.63E-027.72E-02 + 62K 1050.008.09E-041.91E-033.93E-037.65E-033.05E-037.43E-031.48E-022.79E-02 + 62K 1300.005.51E-041.24E-032.43E-034.44E-031.86E-034.29E-038.02E-031.41E-02 + 62K 1550.004.07E-048.85E-041.66E-032.90E-031.24E-032.78E-034.96E-038.31E-03 + 62L1 8.745.17E+001.24E+037.54E+047.19E+052.51E+021.13E+059.02E+061.65E+08 + 62L1 9.444.54E+008.19E+026.39E+041.07E+061.99E+027.86E+045.89E+061.31E+08 + 62L1 10.743.63E+004.00E+024.17E+041.13E+061.36E+024.26E+042.89E+067.75E+07 + 62L1 13.942.24E+008.43E+011.31E+045.47E+056.22E+011.25E+046.88E+052.09E+07 + 62L1 17.741.39E+001.70E+013.70E+031.81E+053.03E+014.10E+031.84E+055.47E+06 + 62L1 21.009.76E-015.03E+001.41E+037.34E+041.84E+011.90E+037.34E+042.06E+06 + 62L1 27.005.66E-011.04E+003.02E+021.67E+048.70E+006.11E+021.90E+044.70E+05 + 62L1 35.003.15E-016.21E-015.50E+013.18E+034.04E+001.94E+024.78E+031.01E+05 + 62L1 47.001.57E-014.90E-017.94E+004.35E+021.69E+005.40E+011.03E+031.76E+04 + 62L1 60.008.64E-023.39E-012.16E+008.19E+018.27E-011.93E+012.95E+024.20E+03 + 62L1 77.004.63E-022.03E-019.08E-011.65E+014.00E-016.88E+008.45E+019.91E+02 + 62L1 90.003.12E-021.41E-015.92E-016.81E+002.55E-013.66E+003.93E+014.07E+02 + 62L1 107.002.00E-029.04E-023.71E-012.91E+001.55E-011.84E+001.71E+011.54E+02 + 62L1 130.001.21E-025.34E-022.15E-011.27E+008.92E-028.66E-016.80E+005.25E+01 + 62L1 155.007.66E-033.26E-021.27E-016.42E-015.44E-024.45E-013.02E+002.03E+01 + 62L1 220.003.11E-031.19E-024.28E-021.74E-012.07E-021.24E-016.39E-013.27E+00 + 62L1 305.001.37E-034.68E-031.52E-025.26E-028.57E-034.00E-021.62E-016.53E-01 + 62L1 400.007.17E-042.22E-036.58E-032.01E-024.21E-031.64E-025.55E-021.85E-01 + 62L1 510.004.13E-041.19E-033.22E-038.81E-032.26E-037.66E-032.24E-026.41E-02 + 62L1 740.001.89E-044.91E-041.17E-032.73E-038.93E-042.55E-036.15E-031.43E-02 + 62L11000.001.05E-042.56E-045.57E-041.16E-034.32E-041.11E-032.35E-034.76E-03 + 62L11500.005.15E-051.15E-042.23E-044.06E-041.68E-043.87E-047.20E-041.26E-03 + 62L2 8.311.07E+017.25E+042.28E+078.69E+082.79E+014.70E+031.32E+051.15E+06 + 62L2 9.018.57E+004.84E+041.42E+076.54E+082.18E+013.43E+031.17E+051.73E+06 + 62L2 10.315.86E+002.47E+046.44E+063.55E+081.45E+012.03E+038.25E+041.91E+06 + 62L2 13.512.69E+006.41E+031.32E+068.12E+076.35E+007.05E+023.21E+041.04E+06 + 62L2 17.311.29E+001.87E+033.07E+051.84E+072.99E+002.66E+021.18E+044.05E+05 + 62L2 21.007.15E-017.19E+029.88E+045.50E+061.66E+001.24E+025.15E+031.72E+05 + 62L2 27.003.28E-012.09E+022.26E+041.11E+067.76E-014.63E+011.69E+035.14E+04 + 62L2 35.001.44E-015.87E+014.97E+032.06E+053.54E-011.67E+015.19E+021.38E+04 + 62L2 47.005.57E-021.40E+018.96E+023.01E+041.46E-015.26E+001.33E+022.94E+03 + 62L2 60.002.51E-024.35E+002.19E+026.12E+037.00E-022.03E+004.29E+017.97E+02 + 62L2 77.001.10E-021.33E+005.27E+011.21E+033.32E-027.72E-011.35E+012.08E+02 + 62L2 90.006.57E-036.37E-012.18E+014.41E+022.08E-024.23E-016.53E+008.97E+01 + 62L2 107.003.70E-032.84E-018.25E+001.45E+021.24E-022.18E-012.93E+003.53E+01 + 62L2 130.001.94E-031.15E-012.80E+004.20E+016.99E-031.04E-011.20E+001.24E+01 + 62L2 155.001.09E-035.18E-021.07E+001.39E+014.16E-035.33E-025.38E-014.87E+00 + 62L2 220.003.47E-041.08E-021.64E-011.61E+001.49E-031.44E-021.11E-017.76E-01 + 62L2 305.001.22E-042.65E-033.02E-022.32E-015.75E-044.37E-032.66E-021.46E-01 + 62L2 400.005.28E-058.57E-047.86E-034.97E-022.63E-041.66E-038.40E-033.84E-02 + 62L2 510.002.54E-053.24E-042.47E-031.32E-021.31E-047.11E-043.08E-031.20E-02 + 62L2 740.008.71E-067.88E-054.61E-041.95E-034.56E-052.01E-047.05E-042.22E-03 + 62L21000.003.84E-062.70E-051.30E-044.65E-041.96E-057.52E-052.27E-046.14E-04 + 62L21500.001.35E-067.08E-062.71E-057.95E-056.36E-062.10E-055.35E-051.22E-04 + 62L3 7.722.27E+011.59E+055.65E+072.42E+096.95E+001.49E+053.22E+087.21E+10 + 62L3 8.421.77E+011.02E+053.36E+071.71E+095.32E+009.64E+041.79E+083.70E+10 + 62L3 9.721.16E+014.95E+041.41E+078.46E+083.42E+004.71E+046.75E+071.23E+10 + 62L3 12.924.96E+001.17E+042.55E+061.66E+081.42E+001.14E+049.94E+061.40E+09 + 62L3 16.722.24E+003.18E+035.37E+053.32E+076.45E-013.15E+031.78E+061.98E+08 + 62L3 21.001.09E+001.00E+031.35E+057.58E+063.20E-011.01E+033.96E+053.55E+07 + 62L3 27.004.86E-012.83E+022.97E+041.44E+061.48E-012.89E+027.66E+045.46E+06 + 62L3 35.002.07E-017.66E+016.20E+032.52E+056.71E-027.97E+011.44E+048.05E+05 + 62L3 47.007.73E-021.74E+011.05E+033.42E+042.73E-021.85E+012.20E+039.45E+04 + 62L3 60.003.38E-025.14E+002.41E+026.48E+031.30E-025.53E+004.78E+021.64E+04 + 62L3 77.001.44E-021.48E+005.38E+011.18E+036.10E-031.62E+001.03E+022.82E+03 + 62L3 90.008.43E-036.84E-012.11E+014.07E+023.81E-037.54E-013.96E+019.52E+02 + 62L3 107.004.65E-032.91E-017.52E+001.25E+022.26E-033.24E-011.40E+012.89E+02 + 62L3 130.002.38E-031.12E-012.36E+003.32E+011.26E-031.26E-014.39E+007.71E+01 + 62L3 155.001.31E-034.72E-028.36E-011.01E+017.46E-045.38E-021.56E+002.38E+01 + 62L3 220.004.02E-048.75E-031.08E-019.66E-012.65E-041.01E-022.09E-012.41E+00 + 62L3 305.001.38E-041.89E-031.67E-021.13E-011.02E-042.20E-033.37E-023.06E-01 + 62L3 400.005.88E-055.53E-043.71E-032.02E-024.73E-056.37E-047.71E-035.83E-02 + 62L3 510.002.83E-051.92E-041.01E-034.56E-032.41E-052.17E-042.13E-031.38E-02 + 62L3 740.009.84E-064.22E-051.56E-045.36E-048.96E-064.51E-053.16E-041.65E-03 + 62L31000.004.46E-061.38E-053.94E-051.10E-044.23E-061.40E-057.22E-053.19E-04 + 62L31500.001.72E-063.66E-067.65E-061.66E-051.68E-063.48E-061.12E-053.90E-05 + 62M1 2.727.47E+002.77E+041.53E+064.88E+081.74E+038.03E+066.40E+091.16E+12 + 62M1 3.725.10E+007.61E+036.30E+054.69E+076.84E+021.73E+068.44E+081.32E+11 + 62M1 5.722.62E+001.14E+031.60E+056.10E+061.89E+022.12E+055.52E+076.52E+09 + 62M1 9.721.00E+008.47E+011.68E+041.00E+063.87E+011.65E+042.11E+061.66E+08 + 62M1 16.723.36E-013.83E+001.05E+036.83E+047.67E+001.28E+038.47E+044.21E+06 + 62M1 26.001.28E-013.44E-018.24E+015.19E+032.06E+001.69E+026.80E+032.29E+05 + 62M1 41.004.47E-021.39E-014.95E+002.85E+025.37E-012.24E+015.55E+021.25E+04 + 62M1 53.002.41E-029.24E-021.13E+005.22E+012.52E-017.38E+001.42E+022.52E+03 + 62M1 71.001.17E-025.11E-023.07E-017.84E+001.07E-012.16E+003.11E+014.28E+02 + 62M1 104.004.42E-032.01E-029.05E-029.04E-013.57E-024.58E-014.62E+004.55E+01 + 62M1 150.001.72E-037.37E-033.01E-021.74E-011.26E-021.10E-018.07E-015.81E+00 + 62M1 280.003.53E-041.24E-034.20E-031.57E-022.28E-031.16E-025.11E-022.25E-01 + 62M1 500.009.02E-052.61E-047.22E-042.03E-035.02E-041.74E-035.23E-031.54E-02 + 62M2 2.541.75E+015.89E+061.43E+104.24E+122.17E+022.83E+056.17E+074.49E+09 + 62M2 3.541.00E+011.12E+061.66E+094.19E+118.00E+016.32E+041.18E+071.11E+09 + 62M2 5.544.04E+001.19E+059.45E+071.83E+102.07E+018.74E+031.24E+061.16E+08 + 62M2 9.541.11E+007.94E+033.15E+064.16E+084.02E+008.50E+028.28E+046.16E+06 + 62M2 16.542.56E-015.19E+021.09E+059.38E+067.65E-018.58E+015.51E+032.91E+05 + 62M2 26.006.96E-025.61E+017.14E+034.29E+051.96E-011.36E+016.08E+022.32E+04 + 62M2 41.001.74E-026.13E+004.83E+021.98E+045.00E-022.19E+006.75E+011.82E+03 + 62M2 53.007.80E-031.79E+001.08E+023.56E+032.32E-027.93E-011.97E+014.33E+02 + 62M2 71.003.06E-034.44E-012.00E+015.14E+029.70E-032.52E-014.92E+008.52E+01 + 62M2 104.008.88E-047.42E-022.29E+004.26E+013.12E-035.74E-028.16E-011.04E+01 + 62M2 150.002.69E-041.38E-023.01E-014.12E+001.06E-031.42E-021.50E-011.43E+00 + 62M2 280.003.64E-058.83E-041.10E-029.13E-021.71E-041.40E-039.16E-035.41E-02 + 62M2 500.006.21E-068.15E-056.36E-043.47E-033.23E-051.78E-047.88E-043.14E-03 + 62M3 2.424.13E+011.21E+073.12E+109.43E+125.10E+011.18E+072.56E+115.68E+14 + 62M3 3.422.16E+012.12E+063.24E+098.19E+111.79E+012.09E+062.34E+102.97E+13 + 62M3 5.427.89E+002.09E+051.66E+083.15E+104.40E+002.09E+059.80E+086.24E+11 + 62M3 9.421.98E+001.29E+045.02E+066.43E+088.18E-011.33E+042.25E+076.74E+09 + 62M3 16.424.21E-017.85E+021.58E+051.32E+071.50E-018.30E+025.36E+058.06E+07 + 62M3 26.001.06E-017.79E+019.36E+035.37E+053.72E-028.42E+012.58E+042.30E+06 + 62M3 41.002.52E-027.96E+005.82E+022.28E+049.36E-038.77E+001.35E+037.46E+04 + 62M3 53.001.09E-022.21E+001.23E+023.85E+034.31E-032.46E+002.66E+021.13E+04 + 62M3 71.004.13E-035.16E-012.10E+015.12E+021.79E-035.81E-014.28E+011.37E+03 + 62M3 104.001.14E-037.82E-022.13E+003.71E+015.68E-048.95E-024.16E+009.32E+01 + 62M3 150.003.32E-041.30E-022.42E-013.05E+001.91E-041.52E-024.71E-017.65E+00 + 62M3 280.004.20E-056.63E-046.46E-034.75E-023.06E-057.84E-041.33E-021.31E-01 + 62M3 500.006.99E-064.95E-052.68E-041.23E-035.98E-065.66E-055.75E-043.82E-03 + 62M4 2.111.02E+023.71E+052.67E+104.14E+141.50E+013.54E+054.06E+094.14E+12 + 62M4 3.112.98E+015.08E+041.74E+091.39E+134.23E+005.04E+042.96E+082.23E+11 + 62M4 5.115.55E+004.02E+035.24E+071.89E+118.16E-014.13E+031.08E+075.36E+09 + 62M4 9.116.84E-012.10E+028.85E+051.35E+091.15E-012.23E+022.44E+057.24E+07 + 62M4 16.117.61E-021.12E+011.58E+041.11E+071.59E-021.25E+016.20E+031.09E+06 + 62M4 26.001.10E-029.33E-015.42E+022.06E+052.89E-031.11E+002.97E+023.33E+04 + 62M4 41.001.65E-038.60E-022.23E+014.87E+035.53E-041.11E-011.71E+011.25E+03 + 62M4 53.005.55E-042.23E-023.73E+006.02E+022.14E-043.03E-023.46E+002.00E+02 + 62M4 71.001.58E-044.79E-034.93E-015.69E+017.20E-056.93E-035.71E-012.51E+01 + 62M4 104.003.07E-056.47E-043.62E-022.72E+001.71E-051.02E-035.56E-021.73E+00 + 62M4 150.006.35E-069.66E-053.10E-031.55E-014.24E-061.63E-046.11E-031.37E-01 + 62M4 280.004.42E-074.14E-065.48E-051.37E-033.90E-077.48E-061.53E-042.05E-03 + 62M4 500.004.59E-082.59E-071.69E-062.20E-054.31E-084.53E-075.61E-064.86E-05 + 62M5 2.081.52E+024.73E+054.54E+106.48E+149.08E+003.56E+042.03E+101.31E+15 + 62M5 3.084.35E+016.30E+042.87E+092.09E+132.54E+005.02E+031.31E+093.92E+13 + 62M5 5.087.91E+004.85E+038.42E+072.72E+114.92E-014.14E+023.95E+074.56E+11 + 62M5 9.089.48E-012.47E+021.39E+061.87E+097.07E-022.30E+016.81E+052.69E+09 + 62M5 16.081.03E-011.29E+012.42E+041.47E+071.00E-021.35E+001.26E+041.83E+07 + 62M5 26.001.46E-021.04E+008.02E+022.61E+051.87E-031.26E-014.41E+022.91E+05 + 62M5 41.002.15E-039.25E-023.18E+015.89E+033.69E-041.35E-021.85E+016.13E+03 + 62M5 53.007.14E-042.34E-025.18E+007.04E+021.46E-043.87E-033.12E+007.17E+02 + 62M5 71.002.02E-044.87E-036.60E-016.33E+015.04E-059.41E-044.12E-016.40E+01 + 62M5 104.003.90E-056.28E-044.54E-022.78E+001.25E-051.51E-042.98E-022.88E+00 + 62M5 150.008.06E-068.92E-053.57E-031.43E-013.26E-062.69E-052.45E-031.55E-01 + 62M5 280.005.77E-073.56E-065.19E-059.91E-043.42E-071.57E-063.82E-051.22E-03 + 62M5 500.006.86E-082.25E-071.32E-061.19E-054.68E-081.34E-071.01E-061.64E-05 + 62N+ 50.001.41E-021.48E+009.40E+013.67E+039.53E-024.02E+001.79E+026.87E+03 + 62N+ 70.005.42E-032.92E-011.25E+013.48E+023.51E-029.16E-012.50E+016.35E+02 + 62N+ 100.002.03E-035.68E-021.59E+003.11E+011.27E-022.08E-013.50E+005.86E+01 + 62N+ 150.006.53E-049.42E-031.59E-012.11E+003.98E-034.05E-024.17E-014.42E+00 + 62N+ 200.002.93E-042.81E-033.30E-023.31E-011.76E-031.33E-029.98E-027.80E-01 + 62N+ 500.002.84E-051.07E-044.43E-041.85E-031.50E-045.56E-041.88E-036.49E-03 + 63K 49.521.52E+003.29E+001.35E+001.89E-011.22E+011.86E+024.90E+022.84E+02 + 63K 50.221.47E+003.40E+001.92E+005.19E-011.18E+011.77E+024.98E+023.96E+02 + 63K 51.521.37E+003.51E+002.95E+001.55E+001.08E+011.60E+024.97E+025.87E+02 + 63K 54.721.18E+003.63E+005.16E+005.81E+009.13E+001.28E+024.77E+029.44E+02 + 63K 58.529.91E-013.54E+007.02E+001.20E+017.50E+009.99E+014.26E+021.17E+03 + 63K 63.008.18E-013.27E+008.17E+001.85E+016.05E+007.59E+013.59E+021.23E+03 + 63K 69.006.45E-012.83E+008.49E+002.38E+014.64E+005.42E+012.78E+021.13E+03 + 63K 77.004.83E-012.27E+007.80E+002.55E+013.38E+003.61E+011.96E+028.98E+02 + 63K 89.003.28E-011.61E+006.11E+002.23E+012.22E+002.12E+011.18E+025.86E+02 + 63K 102.002.28E-011.13E+004.46E+001.71E+011.50E+001.29E+017.10E+013.61E+02 + 63K 119.001.50E-017.32E-012.92E+001.14E+019.67E-017.38E+003.93E+011.98E+02 + 63K 132.001.14E-015.41E-012.14E+008.31E+007.21E-015.09E+002.62E+011.29E+02 + 63K 149.008.20E-023.76E-011.46E+005.58E+005.13E-013.31E+001.62E+017.70E+01 + 63K 172.005.58E-022.43E-019.15E-013.38E+003.44E-012.00E+009.21E+004.13E+01 + 63K 200.003.73E-021.53E-015.52E-011.95E+002.27E-011.19E+005.09E+002.13E+01 + 63K 265.001.79E-026.53E-022.13E-016.86E-011.06E-014.63E-011.71E+006.21E+00 + 63K 350.008.92E-032.89E-028.52E-022.47E-015.06E-021.89E-016.02E-011.88E+00 + 63K 440.005.17E-031.53E-024.16E-021.11E-012.80E-029.30E-022.64E-017.32E-01 + 63K 550.003.12E-038.61E-032.16E-025.27E-021.59E-024.78E-021.22E-013.02E-01 + 63K 780.001.50E-033.78E-038.48E-031.82E-026.70E-031.77E-023.90E-028.27E-02 + 63K 1050.008.48E-042.00E-034.14E-038.05E-033.29E-038.00E-031.59E-022.99E-02 + 63K 1300.005.78E-041.31E-032.56E-034.68E-031.99E-034.62E-038.62E-031.52E-02 + 63K 1550.004.27E-049.33E-041.75E-033.06E-031.33E-032.98E-035.33E-038.91E-03 + 63L1 9.054.82E+001.14E+036.60E+045.81E+052.49E+021.07E+058.20E+061.44E+08 + 63L1 9.754.26E+007.67E+025.65E+048.76E+051.99E+027.54E+045.44E+061.15E+08 + 63L1 11.053.43E+003.84E+023.77E+049.59E+051.37E+024.17E+042.73E+066.98E+07 + 63L1 14.252.14E+008.59E+011.24E+044.90E+056.41E+011.26E+046.74E+051.97E+07 + 63L1 18.051.34E+001.84E+013.65E+031.70E+053.17E+014.23E+031.85E+055.32E+06 + 63L1 22.008.92E-014.57E+001.19E+035.95E+041.76E+011.71E+036.31E+041.70E+06 + 63L1 28.005.29E-011.03E+002.74E+021.44E+048.61E+005.78E+021.73E+044.13E+05 + 63L1 36.003.00E-015.81E-015.38E+012.94E+034.09E+001.90E+024.55E+039.32E+04 + 63L1 48.001.52E-014.50E-018.33E+004.31E+021.75E+005.48E+011.02E+031.70E+04 + 63L1 61.008.50E-023.16E-012.27E+008.53E+018.68E-011.99E+012.99E+024.17E+03 + 63L1 78.004.61E-021.93E-019.08E-011.76E+014.24E-017.21E+008.73E+011.01E+03 + 63L1 91.003.12E-021.35E-015.81E-017.27E+002.72E-013.87E+004.10E+014.18E+02 + 63L1 108.002.01E-028.79E-023.63E-013.07E+001.66E-011.96E+001.79E+011.60E+02 + 63L1 131.001.22E-025.25E-022.11E-011.32E+009.60E-029.26E-017.20E+005.50E+01 + 63L1 160.007.30E-033.01E-021.17E-015.97E-015.47E-024.34E-012.87E+001.87E+01 + 63L1 225.003.05E-031.14E-024.07E-021.66E-012.13E-021.25E-016.34E-013.18E+00 + 63L1 310.001.38E-034.62E-031.49E-025.17E-029.00E-034.14E-021.66E-016.58E-01 + 63L1 400.007.51E-042.32E-036.85E-032.11E-024.60E-031.79E-026.06E-022.02E-01 + 63L1 510.004.33E-041.24E-033.38E-039.30E-032.47E-038.36E-032.44E-026.98E-02 + 63L1 740.001.99E-045.18E-041.24E-032.90E-039.73E-042.78E-036.69E-031.55E-02 + 63L11000.001.11E-042.71E-045.92E-041.23E-034.69E-041.21E-032.55E-035.17E-03 + 63L11500.005.43E-051.22E-042.38E-044.34E-041.81E-044.20E-047.81E-041.36E-03 + 63L2 8.621.00E+016.63E+041.99E+077.25E+082.77E+014.45E+031.19E+059.57E+05 + 63L2 9.328.08E+004.48E+041.26E+075.54E+082.18E+013.28E+031.06E+051.46E+06 + 63L2 10.625.60E+002.33E+045.88E+063.08E+081.46E+011.97E+037.63E+041.66E+06 + 63L2 13.822.63E+006.27E+031.26E+067.42E+076.58E+007.05E+023.08E+049.47E+05 + 63L2 17.621.28E+001.88E+033.02E+051.74E+073.14E+002.72E+021.16E+043.83E+05 + 63L2 22.006.51E-016.26E+028.19E+044.36E+061.60E+001.14E+024.49E+031.44E+05 + 63L2 28.003.08E-011.91E+022.00E+049.38E+057.72E-014.40E+011.54E+034.52E+04 + 63L2 36.001.39E-015.61E+014.60E+031.85E+053.61E-011.64E+014.93E+021.27E+04 + 63L2 48.005.53E-021.39E+018.68E+022.84E+041.52E-015.33E+001.31E+022.82E+03 + 63L2 61.002.53E-024.41E+002.19E+025.97E+037.41E-022.10E+004.33E+017.87E+02 + 63L2 78.001.13E-021.37E+005.38E+011.21E+033.55E-028.10E-011.39E+012.10E+02 + 63L2 91.006.79E-036.65E-012.25E+014.48E+022.25E-024.47E-016.79E+009.18E+01 + 63L2 108.003.86E-032.99E-018.61E+001.49E+021.35E-022.32E-013.08E+003.66E+01 + 63L2 131.002.04E-031.23E-012.95E+004.39E+017.63E-031.11E-011.27E+001.30E+01 + 63L2 160.001.06E-034.94E-029.90E-011.25E+014.23E-035.24E-025.13E-014.51E+00 + 63L2 225.003.49E-041.08E-021.61E-011.55E+001.56E-031.48E-021.11E-017.59E-01 + 63L2 310.001.26E-042.73E-033.09E-022.34E-016.15E-044.60E-032.75E-021.49E-01 + 63L2 400.005.75E-059.50E-048.73E-035.50E-022.95E-041.85E-039.34E-034.25E-02 + 63L2 510.002.78E-053.60E-042.74E-031.46E-021.47E-047.95E-043.43E-031.34E-02 + 63L2 740.009.61E-068.77E-055.14E-042.17E-035.14E-052.26E-047.87E-042.48E-03 + 63L21000.004.20E-063.01E-051.45E-045.19E-042.21E-058.46E-052.54E-046.86E-04 + 63L21500.001.50E-067.89E-063.03E-058.90E-057.17E-062.37E-056.01E-051.37E-04 + 63L3 7.982.13E+011.46E+054.99E+072.04E+096.75E+001.42E+052.95E+086.39E+10 + 63L3 8.681.67E+019.53E+043.01E+071.47E+095.22E+009.33E+041.67E+083.35E+10 + 63L3 9.981.11E+014.70E+041.30E+077.44E+083.39E+004.64E+046.49E+071.15E+10 + 63L3 13.184.85E+001.15E+042.44E+061.53E+081.44E+001.16E+049.99E+061.37E+09 + 63L3 16.982.22E+003.19E+035.28E+053.16E+076.62E-013.28E+031.85E+062.01E+08 + 63L3 22.009.82E-018.62E+021.11E+055.92E+062.99E-019.02E+023.34E+052.86E+07 + 63L3 28.004.52E-012.56E+022.58E+041.20E+061.43E-012.72E+026.92E+044.74E+06 + 63L3 36.001.98E-017.22E+015.65E+032.23E+056.63E-027.80E+011.37E+047.45E+05 + 63L3 48.007.59E-021.70E+019.98E+023.18E+042.76E-021.88E+012.20E+039.20E+04 + 63L3 61.003.38E-025.14E+002.36E+026.22E+031.33E-025.73E+004.89E+021.65E+04 + 63L3 78.001.46E-021.51E+005.40E+011.16E+036.33E-031.71E+001.07E+022.92E+03 + 63L3 91.008.60E-037.04E-012.14E+014.06E+023.97E-038.02E-014.19E+019.96E+02 + 63L3 108.004.78E-033.02E-017.72E+001.26E+022.37E-033.47E-011.49E+013.06E+02 + 63L3 131.002.47E-031.17E-012.45E+003.40E+011.33E-031.36E-014.73E+008.25E+01 + 63L3 160.001.25E-034.40E-027.52E-018.80E+007.32E-045.18E-021.46E+002.17E+01 + 63L3 225.003.98E-048.55E-031.03E-019.01E-012.67E-041.02E-022.07E-012.35E+00 + 63L3 310.001.40E-041.91E-031.66E-021.11E-011.05E-042.27E-033.46E-023.11E-01 + 63L3 400.006.29E-056.01E-044.04E-032.19E-025.10E-057.09E-048.64E-036.54E-02 + 63L3 510.003.02E-052.09E-041.10E-034.95E-032.60E-052.41E-042.38E-031.54E-02 + 63L3 740.001.05E-054.57E-051.70E-045.83E-049.64E-064.98E-053.52E-041.84E-03 + 63L31000.004.80E-061.50E-054.28E-051.20E-044.55E-061.53E-058.03E-053.55E-04 + 63L31500.001.85E-063.94E-068.29E-061.80E-051.80E-063.80E-061.24E-054.34E-05 + 63M1 2.807.09E+002.68E+041.51E+064.27E+081.78E+037.94E+066.17E+091.08E+12 + 63M1 3.804.90E+007.60E+036.16E+054.60E+077.13E+021.77E+068.54E+081.30E+11 + 63M1 5.802.56E+001.19E+031.59E+055.94E+062.01E+022.25E+055.82E+076.75E+09 + 63M1 9.809.95E-019.29E+011.74E+049.95E+054.19E+011.80E+042.30E+061.78E+08 + 63M1 16.803.37E-014.53E+001.14E+037.12E+048.38E+001.42E+039.33E+044.59E+06 + 63M1 26.001.31E-013.94E-019.48E+015.73E+032.29E+001.90E+027.65E+032.57E+05 + 63M1 41.004.58E-021.35E-015.91E+003.25E+025.95E-012.50E+016.22E+021.39E+04 + 63M1 53.002.48E-028.96E-021.32E+006.06E+012.80E-018.25E+001.58E+022.81E+03 + 63M1 71.001.20E-025.03E-023.36E-019.17E+001.19E-012.40E+003.46E+014.75E+02 + 63M1 104.004.58E-032.01E-029.32E-021.02E+003.95E-025.09E-015.13E+005.03E+01 + 63M1 150.001.79E-037.49E-033.07E-021.88E-011.40E-021.22E-018.92E-016.42E+00 + 63M1 280.003.70E-041.28E-034.36E-031.66E-022.52E-031.28E-025.63E-022.47E-01 + 63M1 500.009.52E-052.75E-047.62E-042.16E-035.52E-041.92E-035.74E-031.69E-02 + 63M2 2.611.66E+015.62E+061.33E+103.81E+122.22E+022.80E+055.90E+074.03E+09 + 63M2 3.619.70E+001.11E+061.62E+093.99E+118.37E+016.48E+041.17E+071.05E+09 + 63M2 5.613.99E+001.23E+059.67E+071.83E+102.22E+019.23E+031.28E+061.16E+08 + 63M2 9.611.12E+008.42E+033.33E+064.32E+084.38E+009.17E+028.78E+046.38E+06 + 63M2 16.612.64E-015.60E+021.17E+059.97E+068.42E-019.36E+015.93E+033.09E+05 + 63M2 26.007.33E-026.19E+017.89E+034.70E+052.19E-011.51E+016.69E+022.53E+04 + 63M2 41.001.85E-026.78E+005.33E+022.18E+045.59E-022.43E+007.44E+011.98E+03 + 63M2 53.008.32E-031.97E+001.19E+023.92E+032.60E-028.81E-012.18E+014.74E+02 + 63M2 71.003.28E-034.91E-012.21E+015.66E+021.09E-022.80E-015.43E+009.35E+01 + 63M2 104.009.59E-048.22E-022.54E+004.70E+013.51E-036.40E-029.04E-011.14E+01 + 63M2 150.002.92E-041.54E-023.34E-014.56E+001.19E-031.59E-021.67E-011.58E+00 + 63M2 280.003.97E-059.85E-041.23E-021.02E-011.93E-041.57E-031.02E-026.02E-02 + 63M2 500.006.84E-069.12E-057.12E-043.89E-033.66E-052.01E-048.84E-043.52E-03 + 63M3 2.483.96E+011.17E+072.94E+108.64E+125.12E+011.18E+072.52E+115.47E+14 + 63M3 3.482.11E+012.12E+063.20E+097.89E+111.83E+012.17E+062.42E+103.05E+13 + 63M3 5.487.85E+002.16E+051.71E+083.17E+104.61E+002.25E+051.06E+096.73E+11 + 63M3 9.482.01E+001.37E+045.30E+066.67E+088.70E-011.46E+042.50E+077.51E+09 + 63M3 16.484.34E-018.43E+021.69E+051.39E+071.61E-019.25E+026.06E+059.12E+07 + 63M3 26.001.11E-018.53E+011.02E+045.83E+054.04E-029.56E+012.97E+042.66E+06 + 63M3 41.002.66E-028.72E+006.37E+022.47E+041.02E-029.95E+001.56E+038.59E+04 + 63M3 53.001.15E-022.42E+001.34E+024.18E+034.68E-032.79E+003.05E+021.30E+04 + 63M3 71.004.38E-035.65E-012.30E+015.56E+021.94E-036.60E-014.91E+011.57E+03 + 63M3 104.001.22E-038.57E-022.33E+004.03E+016.17E-041.01E-014.75E+001.06E+02 + 63M3 150.003.55E-041.43E-022.65E-013.32E+002.07E-041.71E-025.36E-018.71E+00 + 63M3 280.004.55E-057.28E-047.08E-035.19E-023.33E-058.83E-041.50E-021.49E-01 + 63M3 500.007.53E-065.42E-052.94E-041.35E-036.50E-066.34E-056.49E-044.32E-03 + 63M4 2.169.85E+013.58E+052.52E+103.85E+141.51E+013.57E+054.00E+093.97E+12 + 63M4 3.162.98E+015.11E+041.74E+091.39E+134.39E+005.29E+043.08E+082.27E+11 + 63M4 5.165.71E+004.19E+035.52E+072.00E+118.68E-014.49E+031.18E+075.74E+09 + 63M4 9.167.21E-012.25E+029.64E+051.48E+091.25E-012.49E+022.73E+058.02E+07 + 63M4 16.168.17E-021.22E+011.76E+041.24E+071.75E-021.41E+017.04E+031.23E+06 + 63M4 26.001.21E-021.04E+006.17E+022.37E+053.23E-031.27E+003.44E+023.85E+04 + 63M4 41.001.82E-039.61E-022.54E+015.60E+036.19E-041.27E-011.98E+011.45E+03 + 63M4 53.006.15E-042.50E-024.25E+006.93E+022.40E-043.49E-024.01E+002.31E+02 + 63M4 71.001.76E-045.38E-035.62E-016.55E+018.10E-058.00E-036.61E-012.90E+01 + 63M4 104.003.41E-057.30E-044.13E-023.13E+001.92E-051.18E-036.44E-022.00E+00 + 63M4 150.007.06E-061.09E-043.54E-031.78E-014.79E-061.89E-047.09E-031.59E-01 + 63M4 280.005.07E-074.72E-066.27E-051.58E-034.42E-078.65E-061.78E-042.38E-03 + 63M4 500.005.17E-082.98E-071.94E-062.54E-054.89E-085.24E-076.52E-065.65E-05 + 63M5 2.131.48E+024.55E+054.35E+106.10E+149.18E+003.55E+042.03E+101.28E+15 + 63M5 3.134.35E+016.32E+042.91E+092.10E+132.64E+005.21E+031.37E+094.11E+13 + 63M5 5.138.13E+005.03E+038.93E+072.89E+115.22E-014.44E+024.34E+075.05E+11 + 63M5 9.139.99E-012.63E+021.52E+062.06E+097.63E-022.51E+017.72E+053.10E+09 + 63M5 16.131.10E-011.39E+012.70E+041.65E+071.09E-021.49E+001.45E+042.14E+07 + 63M5 26.001.59E-021.14E+009.15E+023.00E+052.07E-031.41E-015.19E+023.49E+05 + 63M5 41.002.36E-031.02E-013.63E+016.76E+034.10E-041.52E-022.18E+017.32E+03 + 63M5 53.007.87E-042.60E-025.92E+008.08E+021.63E-044.35E-033.67E+008.55E+02 + 63M5 71.002.23E-045.41E-037.54E-017.26E+015.63E-051.06E-034.85E-017.62E+01 + 63M5 104.004.28E-056.99E-045.18E-023.19E+001.39E-051.70E-043.50E-023.41E+00 + 63M5 150.008.88E-069.97E-054.07E-031.64E-013.65E-063.03E-052.87E-031.83E-01 + 63M5 280.006.63E-074.02E-065.92E-051.14E-033.84E-071.77E-064.46E-051.44E-03 + 63M5 500.007.06E-082.50E-071.49E-061.36E-055.26E-081.51E-071.16E-061.92E-05 + 63N+ 50.001.47E-021.63E+001.04E+024.06E+031.06E-014.52E+002.05E+027.90E+03 + 63N+ 70.005.68E-033.20E-011.38E+013.83E+023.91E-021.03E+002.83E+017.25E+02 + 63N+ 100.002.13E-036.21E-021.75E+003.43E+011.41E-022.32E-013.95E+006.64E+01 + 63N+ 150.006.87E-041.02E-021.75E-012.33E+004.42E-034.51E-024.67E-014.98E+00 + 63N+ 200.003.09E-043.04E-033.63E-023.65E-011.95E-031.48E-021.11E-018.75E-01 + 63N+ 500.003.00E-051.15E-044.86E-042.05E-031.64E-046.10E-042.07E-037.18E-03 + 64K 51.241.42E+002.94E+001.16E+001.52E-011.21E+011.76E+024.47E+022.49E+02 + 64K 51.941.38E+003.04E+001.63E+004.13E-011.16E+011.68E+024.54E+023.44E+02 + 64K 53.241.28E+003.13E+002.49E+001.22E+001.07E+011.52E+024.53E+025.08E+02 + 64K 56.441.11E+003.25E+004.36E+004.60E+009.10E+001.23E+024.37E+028.18E+02 + 64K 60.249.39E-013.18E+005.96E+009.64E+007.52E+009.65E+013.93E+021.02E+03 + 64K 64.008.02E-013.00E+006.89E+001.42E+016.30E+007.71E+013.44E+021.09E+03 + 64K 70.006.35E-012.63E+007.37E+001.92E+014.86E+005.53E+012.70E+021.03E+03 + 64K 78.004.78E-012.14E+006.94E+002.14E+013.55E+003.71E+011.93E+028.39E+02 + 64K 90.003.27E-011.54E+005.57E+001.95E+012.35E+002.19E+011.18E+025.60E+02 + 64K 103.002.28E-011.09E+004.13E+001.53E+011.59E+001.34E+017.17E+013.52E+02 + 64K 120.001.51E-017.12E-012.76E+001.04E+011.03E+007.73E+004.01E+011.96E+02 + 64K 133.001.15E-015.29E-012.04E+007.71E+007.69E-015.35E+002.69E+011.29E+02 + 64K 150.008.31E-023.71E-011.41E+005.25E+005.48E-013.49E+001.68E+017.77E+01 + 64K 173.005.67E-022.42E-018.90E-013.22E+003.68E-012.12E+009.58E+004.21E+01 + 64K 200.003.86E-021.56E-015.51E-011.92E+002.47E-011.29E+005.42E+002.24E+01 + 64K 265.001.86E-026.67E-022.16E-016.88E-011.15E-015.00E-011.83E+006.57E+00 + 64K 350.009.28E-032.97E-028.71E-022.51E-015.49E-022.04E-016.45E-012.00E+00 + 64K 440.005.39E-031.59E-024.29E-021.14E-013.03E-021.00E-012.82E-017.79E-01 + 64K 550.003.26E-038.95E-032.24E-025.46E-021.72E-025.16E-021.31E-013.22E-01 + 64K 780.001.57E-033.95E-038.88E-031.90E-027.23E-031.91E-024.19E-028.84E-02 + 64K 1050.008.89E-042.10E-034.35E-038.47E-033.54E-038.61E-031.70E-023.20E-02 + 64K 1300.006.05E-041.38E-032.70E-034.94E-032.14E-034.97E-039.25E-031.62E-02 + 64K 1550.004.48E-049.82E-041.85E-033.24E-031.43E-033.21E-035.72E-039.55E-03 + 64L1 9.384.51E+001.05E+035.80E+044.78E+052.46E+021.02E+057.47E+061.25E+08 + 64L1 10.084.00E+007.18E+025.02E+047.28E+051.99E+027.23E+045.03E+061.02E+08 + 64L1 11.383.24E+003.69E+023.41E+048.16E+051.38E+024.07E+042.57E+066.29E+07 + 64L1 14.582.05E+008.71E+011.18E+044.39E+056.60E+011.27E+046.59E+051.85E+07 + 64L1 18.381.30E+001.98E+013.60E+031.60E+053.31E+014.35E+031.86E+055.17E+06 + 64L1 22.008.99E-015.73E+001.32E+036.25E+041.94E+011.91E+036.98E+041.84E+06 + 64L1 28.005.35E-011.22E+003.11E+021.56E+049.47E+006.43E+021.91E+044.49E+05 + 64L1 36.003.04E-015.69E-016.31E+013.25E+034.50E+002.11E+025.02E+031.02E+05 + 64L1 48.001.55E-014.26E-019.93E+004.90E+021.93E+006.07E+011.12E+031.86E+04 + 64L1 61.008.70E-023.04E-012.58E+009.86E+019.55E-012.20E+013.29E+024.56E+03 + 64L1 78.004.73E-021.89E-019.58E-012.04E+014.67E-017.96E+009.60E+011.10E+03 + 64L1 91.003.21E-021.33E-015.96E-018.27E+002.99E-014.26E+004.50E+014.57E+02 + 64L1 108.002.07E-028.74E-023.67E-013.40E+001.83E-012.16E+001.97E+011.74E+02 + 64L1 131.001.26E-025.27E-022.12E-011.42E+001.05E-011.02E+007.90E+006.00E+01 + 64L1 160.007.57E-033.05E-021.18E-016.30E-016.01E-024.77E-013.14E+002.04E+01 + 64L1 225.003.18E-031.17E-024.16E-021.74E-012.34E-021.38E-016.94E-013.47E+00 + 64L1 310.001.44E-034.77E-031.54E-025.41E-029.86E-034.54E-021.81E-017.17E-01 + 64L1 400.007.86E-042.41E-037.15E-032.21E-025.04E-031.96E-026.61E-022.20E-01 + 64L1 510.004.55E-041.30E-033.55E-039.81E-032.69E-039.13E-032.66E-027.59E-02 + 64L1 740.002.09E-045.45E-041.31E-033.08E-031.06E-033.03E-037.27E-031.69E-02 + 64L11000.001.17E-042.87E-046.28E-041.31E-035.09E-041.31E-032.77E-035.61E-03 + 64L11500.005.71E-051.29E-042.53E-044.64E-041.96E-044.56E-048.47E-041.48E-03 + 64L2 8.939.38E+006.06E+041.75E+076.08E+082.74E+014.21E+031.08E+058.08E+05 + 64L2 9.637.62E+004.16E+041.13E+074.71E+082.18E+013.14E+039.66E+041.25E+06 + 64L2 10.935.34E+002.21E+045.37E+062.69E+081.48E+011.92E+037.07E+041.45E+06 + 64L2 14.132.56E+006.14E+031.20E+066.78E+076.80E+007.05E+022.95E+048.65E+05 + 64L2 17.931.27E+001.88E+032.96E+051.65E+073.30E+002.77E+021.14E+043.63E+05 + 64L2 22.006.83E-016.86E+028.91E+044.64E+061.77E+001.24E+024.80E+031.49E+05 + 64L2 28.003.25E-012.10E+022.17E+041.00E+068.56E-014.82E+011.66E+034.76E+04 + 64L2 36.001.47E-016.15E+015.02E+031.99E+054.01E-011.80E+015.33E+021.35E+04 + 64L2 48.005.86E-021.53E+019.48E+023.07E+041.69E-015.86E+001.43E+023.02E+03 + 64L2 61.002.69E-024.84E+002.39E+026.48E+038.24E-022.31E+004.72E+018.48E+02 + 64L2 78.001.21E-021.51E+005.89E+011.32E+033.96E-028.93E-011.51E+012.28E+02 + 64L2 91.007.27E-037.31E-012.47E+014.88E+022.50E-024.93E-017.43E+009.96E+01 + 64L2 108.004.14E-033.29E-019.45E+001.63E+021.51E-022.56E-013.38E+003.98E+01 + 64L2 131.002.19E-031.35E-013.25E+004.80E+018.51E-031.23E-011.40E+001.42E+01 + 64L2 160.001.14E-035.45E-021.09E+001.37E+014.73E-035.80E-025.64E-014.93E+00 + 64L2 225.003.79E-041.20E-021.77E-011.71E+001.75E-031.64E-021.23E-018.34E-01 + 64L2 310.001.37E-043.03E-033.41E-022.58E-016.90E-045.12E-033.05E-021.64E-01 + 64L2 400.006.26E-051.05E-039.68E-036.08E-023.32E-042.07E-031.04E-024.70E-02 + 64L2 510.003.03E-053.99E-043.05E-031.62E-021.66E-048.89E-043.82E-031.48E-02 + 64L2 740.001.05E-059.74E-055.72E-042.41E-035.78E-052.53E-048.79E-042.76E-03 + 64L21000.004.63E-063.35E-051.62E-045.79E-042.49E-059.49E-052.84E-047.65E-04 + 64L21500.001.65E-068.80E-063.39E-059.95E-058.07E-062.67E-056.75E-051.54E-04 + 64L3 8.242.00E+011.34E+054.42E+071.74E+096.57E+001.35E+052.72E+085.68E+10 + 64L3 8.941.58E+018.87E+042.71E+071.26E+095.11E+009.02E+041.56E+083.04E+10 + 64L3 10.241.06E+014.46E+041.20E+076.56E+083.37E+004.58E+046.24E+071.07E+10 + 64L3 13.444.73E+001.13E+042.33E+061.41E+081.46E+001.18E+041.00E+071.34E+09 + 64L3 17.242.20E+003.20E+035.19E+053.01E+076.79E-013.41E+031.91E+062.03E+08 + 64L3 22.001.02E+009.35E+021.19E+056.27E+063.22E-011.01E+033.81E+053.25E+07 + 64L3 28.004.73E-012.77E+022.78E+041.28E+061.54E-013.06E+027.89E+045.39E+06 + 64L3 36.002.08E-017.83E+016.11E+032.38E+057.13E-028.77E+011.56E+048.45E+05 + 64L3 48.007.99E-021.85E+011.08E+033.40E+042.97E-022.11E+012.49E+031.04E+05 + 64L3 61.003.56E-025.58E+002.55E+026.67E+031.43E-026.44E+005.55E+021.87E+04 + 64L3 78.001.54E-021.64E+005.84E+011.25E+036.81E-031.92E+001.21E+023.29E+03 + 64L3 91.009.11E-037.64E-012.32E+014.37E+024.28E-039.00E-014.74E+011.12E+03 + 64L3 108.005.07E-033.28E-018.36E+001.36E+022.55E-033.90E-011.69E+013.45E+02 + 64L3 131.002.62E-031.27E-012.66E+003.67E+011.43E-031.52E-015.34E+009.29E+01 + 64L3 160.001.33E-034.78E-028.16E-019.50E+007.88E-045.80E-021.65E+002.44E+01 + 64L3 225.004.25E-049.29E-031.12E-019.73E-012.88E-041.14E-022.32E-012.63E+00 + 64L3 310.001.50E-042.07E-031.80E-021.20E-011.13E-042.53E-033.88E-023.48E-01 + 64L3 400.006.77E-056.52E-044.38E-032.37E-025.49E-057.89E-049.68E-037.31E-02 + 64L3 510.003.25E-052.26E-041.20E-035.37E-032.80E-052.67E-042.66E-031.73E-02 + 64L3 740.001.12E-054.96E-051.85E-046.33E-041.04E-055.49E-053.93E-042.06E-03 + 64L31000.005.17E-061.62E-054.65E-051.30E-044.89E-061.68E-058.92E-053.96E-04 + 64L31500.002.00E-064.25E-068.98E-061.95E-051.93E-064.13E-061.37E-054.82E-05 + 64M1 2.886.74E+002.59E+041.50E+063.73E+081.81E+037.82E+065.92E+091.01E+12 + 64M1 3.884.70E+007.57E+036.07E+054.48E+077.41E+021.81E+068.58E+081.28E+11 + 64M1 5.882.49E+001.23E+031.58E+055.83E+062.13E+022.38E+056.11E+076.96E+09 + 64M1 9.889.86E-011.01E+021.79E+049.91E+054.52E+011.95E+042.48E+061.90E+08 + 64M1 16.883.38E-015.31E+001.23E+037.41E+049.15E+001.56E+031.03E+055.00E+06 + 64M1 26.001.33E-014.62E-011.09E+026.31E+032.53E+002.14E+028.60E+032.88E+05 + 64M1 41.004.69E-021.32E-017.01E+003.69E+026.58E-012.80E+016.95E+021.55E+04 + 64M1 53.002.54E-028.71E-021.56E+006.99E+013.09E-019.20E+001.76E+023.12E+03 + 64M1 71.001.24E-024.94E-023.74E-011.07E+011.32E-012.68E+003.85E+015.27E+02 + 64M1 104.004.74E-032.01E-029.67E-021.16E+004.37E-025.65E-015.68E+005.56E+01 + 64M1 150.001.86E-037.60E-033.15E-022.04E-011.54E-021.35E-019.86E-017.08E+00 + 64M1 280.003.88E-041.33E-034.54E-031.75E-022.77E-031.41E-026.20E-022.71E-01 + 64M1 500.001.00E-042.90E-048.05E-042.29E-036.06E-042.10E-036.30E-031.85E-02 + 64M2 2.691.58E+015.37E+061.24E+103.45E+122.27E+022.78E+055.68E+073.68E+09 + 64M2 3.699.38E+001.11E+061.58E+093.81E+118.76E+016.64E+041.17E+071.01E+09 + 64M2 5.693.94E+001.27E+059.89E+071.83E+102.37E+019.75E+031.33E+061.16E+08 + 64M2 9.691.14E+008.92E+033.52E+064.50E+084.76E+009.88E+029.30E+046.62E+06 + 64M2 16.692.72E-016.03E+021.25E+051.06E+079.26E-011.02E+026.38E+033.27E+05 + 64M2 26.007.71E-026.83E+018.70E+035.15E+052.44E-011.67E+017.35E+022.76E+04 + 64M2 41.001.97E-027.48E+005.88E+022.39E+046.25E-022.70E+008.18E+012.17E+03 + 64M2 53.008.87E-032.18E+001.32E+024.30E+032.91E-029.78E-012.40E+015.18E+02 + 64M2 71.003.52E-035.43E-012.44E+016.22E+021.22E-023.11E-015.99E+001.03E+02 + 64M2 104.001.03E-039.10E-022.81E+005.18E+013.94E-037.12E-021.00E+001.26E+01 + 64M2 150.003.17E-041.70E-023.71E-015.04E+001.34E-031.77E-021.85E-011.74E+00 + 64M2 280.004.35E-051.10E-031.36E-021.13E-012.18E-041.76E-031.14E-026.68E-02 + 64M2 500.007.52E-061.02E-047.97E-044.34E-034.14E-052.26E-049.91E-043.93E-03 + 64M3 2.543.81E+011.12E+072.77E+107.93E+125.13E+011.18E+072.46E+115.26E+14 + 64M3 3.542.06E+012.12E+063.15E+097.60E+111.88E+012.25E+062.48E+103.11E+13 + 64M3 5.547.80E+002.23E+051.75E+083.19E+104.82E+002.41E+051.14E+097.23E+11 + 64M3 9.542.03E+001.44E+045.58E+066.92E+089.23E-011.60E+042.78E+078.34E+09 + 64M3 16.544.46E-019.04E+021.81E+051.47E+071.73E-011.03E+036.83E+051.03E+08 + 64M3 26.001.16E-019.33E+011.12E+046.31E+054.37E-021.08E+023.43E+043.08E+06 + 64M3 41.002.80E-029.53E+006.95E+022.68E+041.10E-021.13E+011.79E+039.88E+04 + 64M3 53.001.22E-022.65E+001.47E+024.54E+035.07E-033.16E+003.50E+021.49E+04 + 64M3 71.004.65E-036.18E-012.51E+016.03E+022.10E-037.47E-015.61E+011.79E+03 + 64M3 104.001.30E-039.37E-022.55E+004.38E+016.69E-041.15E-015.42E+001.21E+02 + 64M3 150.003.80E-041.56E-022.90E-013.62E+002.25E-041.94E-026.10E-019.89E+00 + 64M3 280.004.88E-057.96E-047.75E-035.66E-023.61E-059.94E-041.70E-021.68E-01 + 64M3 500.008.17E-065.93E-053.22E-041.48E-037.05E-067.09E-057.31E-044.87E-03 + 64M4 2.229.53E+013.45E+052.38E+103.58E+141.52E+013.59E+053.93E+093.81E+12 + 64M4 3.222.96E+015.14E+041.74E+091.38E+134.55E+005.55E+043.20E+082.31E+11 + 64M4 5.225.85E+004.36E+035.79E+072.10E+119.21E-014.88E+031.27E+076.13E+09 + 64M4 9.227.57E-012.40E+021.05E+061.62E+091.35E-012.77E+023.05E+058.85E+07 + 64M4 16.228.75E-021.32E+011.94E+041.39E+071.92E-021.59E+017.96E+031.38E+06 + 64M4 26.001.32E-021.15E+007.01E+022.72E+053.59E-031.46E+003.97E+024.43E+04 + 64M4 41.002.01E-031.07E-012.88E+016.43E+036.91E-041.46E-012.28E+011.67E+03 + 64M4 53.006.79E-042.79E-024.82E+007.96E+022.69E-044.01E-024.63E+002.66E+02 + 64M4 71.001.95E-046.03E-036.39E-017.52E+019.08E-059.20E-037.63E-013.35E+01 + 64M4 104.003.81E-058.21E-044.70E-023.60E+002.16E-051.35E-037.44E-022.30E+00 + 64M4 150.007.95E-061.24E-044.02E-032.05E-015.40E-062.17E-048.19E-031.83E-01 + 64M4 280.005.75E-075.35E-067.15E-051.82E-035.00E-079.98E-062.06E-042.75E-03 + 64M4 500.005.79E-083.37E-072.21E-062.93E-055.54E-086.05E-077.57E-066.56E-05 + 64M5 2.181.43E+024.36E+054.13E+105.69E+149.23E+003.51E+042.00E+101.23E+15 + 64M5 3.184.34E+016.30E+042.92E+092.10E+132.73E+005.37E+031.43E+094.26E+13 + 64M5 5.188.33E+005.19E+039.42E+073.05E+115.52E-014.72E+024.74E+075.56E+11 + 64M5 9.181.05E+002.78E+021.66E+062.25E+098.21E-022.74E+018.70E+053.54E+09 + 64M5 16.181.18E-011.49E+013.00E+041.84E+071.19E-021.65E+001.66E+042.49E+07 + 64M5 26.001.74E-021.25E+001.04E+033.44E+052.29E-031.59E-016.10E+024.18E+05 + 64M5 41.002.59E-031.13E-014.14E+017.74E+034.55E-041.70E-022.56E+018.73E+03 + 64M5 53.008.68E-042.87E-026.74E+009.25E+021.81E-044.87E-034.31E+001.02E+03 + 64M5 71.002.47E-046.00E-038.58E-018.31E+016.26E-051.18E-035.69E-019.04E+01 + 64M5 104.004.77E-057.78E-045.91E-023.66E+001.55E-051.91E-044.10E-024.03E+00 + 64M5 150.009.89E-061.11E-044.64E-031.88E-014.07E-063.40E-053.36E-032.16E-01 + 64M5 280.007.36E-074.48E-066.74E-051.30E-034.29E-071.99E-065.18E-051.69E-03 + 64M5 500.008.04E-082.89E-071.70E-061.56E-055.89E-081.70E-071.34E-062.24E-05 + 64N+ 50.001.57E-021.82E+001.17E+024.62E+031.19E-015.17E+002.38E+029.29E+03 + 64N+ 70.006.05E-033.58E-011.55E+014.34E+024.41E-021.17E+003.27E+018.46E+02 + 64N+ 100.002.27E-036.91E-021.97E+003.87E+011.59E-022.64E-014.53E+007.68E+01 + 64N+ 150.007.35E-041.13E-021.97E-012.62E+004.98E-035.11E-025.32E-015.71E+00 + 64N+ 200.003.32E-043.35E-034.08E-024.12E-012.20E-031.68E-021.27E-011.00E+00 + 64N+ 500.003.19E-051.24E-045.31E-042.26E-031.81E-046.76E-042.30E-037.98E-03 + 65K 53.001.33E+002.63E+009.90E-011.21E-011.19E+011.67E+024.07E+022.17E+02 + 65K 53.701.29E+002.71E+001.38E+003.27E-011.15E+011.59E+024.14E+022.98E+02 + 65K 55.001.21E+002.81E+002.10E+009.71E-011.07E+011.45E+024.15E+024.37E+02 + 65K 58.201.05E+002.91E+003.68E+003.65E+009.07E+001.18E+024.00E+027.08E+02 + 65K 62.008.89E-012.86E+005.07E+007.71E+007.54E+009.33E+013.63E+028.92E+02 + 65K 66.007.56E-012.70E+005.93E+001.17E+016.28E+007.40E+013.17E+029.58E+02 + 65K 72.006.03E-012.39E+006.39E+001.59E+014.88E+005.37E+012.51E+029.16E+02 + 65K 80.004.57E-011.96E+006.08E+001.80E+013.59E+003.64E+011.82E+027.59E+02 + 65K 92.003.16E-011.43E+004.96E+001.67E+012.40E+002.18E+011.13E+025.17E+02 + 65K 105.002.22E-011.02E+003.74E+001.34E+011.64E+001.35E+016.98E+013.31E+02 + 65K 122.001.49E-016.77E-012.54E+009.33E+001.07E+007.85E+003.96E+011.88E+02 + 65K 135.001.13E-015.07E-011.90E+006.99E+008.03E-015.47E+002.68E+011.25E+02 + 65K 152.008.27E-023.58E-011.33E+004.83E+005.75E-013.60E+001.69E+017.62E+01 + 65K 175.005.68E-022.36E-018.49E-013.02E+003.88E-012.20E+009.72E+004.18E+01 + 65K 200.003.99E-021.58E-015.50E-011.89E+002.68E-011.39E+005.77E+002.35E+01 + 65K 265.001.93E-026.82E-022.18E-016.89E-011.25E-015.40E-011.95E+006.94E+00 + 65K 350.009.64E-033.06E-028.90E-022.55E-015.96E-022.20E-016.90E-012.12E+00 + 65K 440.005.61E-031.64E-024.42E-021.17E-013.29E-021.08E-013.03E-018.29E-01 + 65K 550.003.40E-039.31E-032.33E-025.65E-021.86E-025.56E-021.40E-013.44E-01 + 65K 780.001.64E-034.14E-039.28E-031.99E-027.81E-032.06E-024.49E-029.44E-02 + 65K 1050.009.30E-042.21E-034.57E-038.91E-033.81E-039.27E-031.83E-023.43E-02 + 65K 1300.006.35E-041.45E-032.84E-035.21E-032.30E-035.35E-039.93E-031.74E-02 + 65K 1550.004.69E-041.03E-031.96E-033.42E-031.53E-033.45E-036.14E-031.02E-02 + 65L1 9.714.21E+009.72E+025.08E+043.88E+052.44E+029.65E+046.80E+061.09E+08 + 65L1 10.413.75E+006.73E+024.44E+046.00E+051.99E+026.93E+044.64E+068.96E+07 + 65L1 11.713.06E+003.55E+023.09E+046.92E+051.40E+023.97E+042.42E+065.65E+07 + 65L1 14.911.97E+008.81E+011.11E+043.92E+056.79E+011.28E+046.44E+051.74E+07 + 65L1 18.711.26E+002.11E+013.53E+031.49E+053.45E+014.46E+031.86E+055.01E+06 + 65L1 22.009.06E-017.12E+001.45E+036.52E+042.13E+012.13E+037.71E+041.99E+06 + 65L1 28.005.41E-011.47E+003.52E+021.67E+041.04E+017.15E+022.11E+044.87E+05 + 65L1 36.003.09E-015.74E-017.33E+013.57E+034.96E+002.35E+025.54E+031.11E+05 + 65L1 48.001.58E-014.05E-011.18E+015.54E+022.12E+006.73E+011.23E+032.02E+04 + 65L1 61.008.90E-022.92E-012.97E+001.14E+021.05E+002.43E+013.62E+024.97E+03 + 65L1 78.004.85E-021.84E-011.03E+002.35E+015.14E-018.79E+001.05E+021.20E+03 + 65L1 91.003.30E-021.31E-016.18E-019.44E+003.29E-014.70E+004.94E+014.99E+02 + 65L1 108.002.14E-028.69E-023.74E-013.79E+002.01E-012.38E+002.16E+011.90E+02 + 65L1 131.001.31E-025.28E-022.15E-011.54E+001.16E-011.12E+008.65E+006.55E+01 + 65L1 160.007.84E-033.08E-021.20E-016.69E-016.60E-025.24E-013.44E+002.23E+01 + 65L1 225.003.30E-031.19E-024.27E-021.82E-012.57E-021.51E-017.58E-013.78E+00 + 65L1 310.001.50E-034.93E-031.60E-025.68E-021.08E-024.96E-021.98E-017.80E-01 + 65L1 400.008.23E-042.51E-037.46E-032.33E-025.51E-032.14E-027.20E-022.39E-01 + 65L1 510.004.78E-041.36E-033.72E-031.04E-022.94E-039.96E-032.89E-028.25E-02 + 65L1 740.002.19E-045.75E-041.38E-033.27E-031.15E-033.30E-037.91E-031.83E-02 + 65L11000.001.24E-043.03E-046.67E-041.40E-035.53E-041.43E-033.01E-036.09E-03 + 65L11500.006.02E-051.37E-042.70E-044.95E-042.12E-044.95E-049.18E-041.60E-03 + 65L2 9.258.78E+005.54E+041.53E+075.09E+082.73E+013.98E+039.71E+046.73E+05 + 65L2 9.957.19E+003.85E+041.00E+073.99E+082.18E+013.00E+038.78E+041.05E+06 + 65L2 11.255.10E+002.09E+044.89E+062.33E+081.50E+011.86E+036.53E+041.25E+06 + 65L2 14.452.49E+006.00E+031.13E+066.18E+077.03E+007.03E+022.82E+047.86E+05 + 65L2 18.251.25E+001.89E+032.89E+051.56E+073.46E+002.82E+021.12E+043.42E+05 + 65L2 22.007.15E-017.50E+029.68E+044.93E+061.97E+001.36E+025.11E+031.54E+05 + 65L2 28.003.41E-012.29E+022.37E+041.07E+069.49E-015.28E+011.78E+034.99E+04 + 65L2 36.001.55E-016.73E+015.47E+032.14E+054.45E-011.97E+015.75E+021.43E+04 + 65L2 48.006.22E-021.67E+011.04E+033.32E+041.88E-016.43E+001.55E+023.23E+03 + 65L2 61.002.87E-025.31E+002.61E+027.02E+039.16E-022.54E+005.13E+019.12E+02 + 65L2 78.001.29E-021.65E+006.45E+011.43E+034.40E-029.83E-011.65E+012.46E+02 + 65L2 91.007.78E-038.02E-012.70E+015.31E+022.79E-025.44E-018.12E+001.08E+02 + 65L2 108.004.44E-033.61E-011.04E+011.78E+021.68E-022.83E-013.70E+004.32E+01 + 65L2 131.002.36E-031.49E-013.57E+005.24E+019.50E-031.36E-011.53E+001.55E+01 + 65L2 160.001.23E-036.00E-021.20E+001.50E+015.28E-036.42E-026.20E-015.38E+00 + 65L2 225.004.09E-041.32E-021.96E-011.88E+001.95E-031.82E-021.36E-019.15E-01 + 65L2 310.001.49E-043.34E-033.77E-022.84E-017.73E-045.69E-033.37E-021.81E-01 + 65L2 400.006.84E-051.17E-031.07E-026.72E-023.72E-042.30E-031.15E-025.19E-02 + 65L2 510.003.32E-054.43E-043.38E-031.80E-021.86E-049.93E-044.24E-031.64E-02 + 65L2 740.001.15E-051.08E-046.37E-042.68E-036.51E-052.83E-049.80E-043.06E-03 + 65L21000.005.10E-063.73E-051.81E-046.45E-042.80E-051.06E-043.18E-048.53E-04 + 65L21500.001.81E-069.80E-063.79E-051.11E-049.09E-063.00E-057.57E-051.72E-04 + 65L3 8.511.88E+011.23E+053.91E+071.47E+096.39E+001.30E+052.50E+085.05E+10 + 65L3 9.211.50E+018.26E+042.44E+071.09E+095.01E+008.73E+041.47E+082.75E+10 + 65L3 10.511.02E+014.23E+041.10E+075.77E+083.34E+004.52E+045.99E+079.99E+09 + 65L3 13.714.62E+001.10E+042.22E+061.29E+081.48E+001.20E+041.00E+071.31E+09 + 65L3 17.512.18E+003.21E+035.09E+052.86E+076.96E-013.55E+031.96E+062.06E+08 + 65L3 22.001.07E+001.01E+031.29E+056.62E+063.46E-011.14E+034.35E+053.70E+07 + 65L3 28.004.94E-013.01E+023.00E+041.36E+061.65E-013.43E+028.99E+046.12E+06 + 65L3 36.002.18E-018.49E+016.59E+032.53E+057.67E-029.85E+011.77E+049.57E+05 + 65L3 48.008.39E-022.01E+011.17E+033.63E+043.19E-022.36E+012.83E+031.18E+05 + 65L3 61.003.75E-026.05E+002.76E+027.14E+031.54E-027.23E+006.28E+022.11E+04 + 65L3 78.001.63E-021.78E+006.31E+011.34E+037.32E-032.15E+001.37E+023.71E+03 + 65L3 91.009.64E-038.29E-012.51E+014.69E+024.60E-031.01E+005.35E+011.27E+03 + 65L3 108.005.38E-033.56E-019.04E+001.46E+022.75E-034.37E-011.90E+013.88E+02 + 65L3 131.002.79E-031.38E-012.88E+003.95E+011.54E-031.71E-016.01E+001.04E+02 + 65L3 160.001.41E-035.19E-028.84E-011.02E+018.48E-046.49E-021.86E+002.74E+01 + 65L3 225.004.53E-041.01E-021.21E-011.05E+003.10E-041.27E-022.61E-012.95E+00 + 65L3 310.001.60E-042.25E-031.95E-021.29E-011.22E-042.82E-034.34E-023.89E-01 + 65L3 400.007.21E-057.08E-044.76E-032.57E-025.91E-058.76E-041.08E-028.17E-02 + 65L3 510.003.47E-052.45E-041.30E-035.82E-033.01E-052.96E-042.97E-031.93E-02 + 65L3 740.001.20E-055.37E-052.01E-046.87E-041.11E-056.05E-054.37E-042.29E-03 + 65L31000.005.48E-061.75E-055.04E-051.41E-045.24E-061.84E-059.90E-054.41E-04 + 65L31500.002.15E-064.59E-069.72E-062.12E-052.07E-064.49E-061.51E-055.35E-05 + 65M1 2.976.35E+002.48E+041.46E+063.19E+081.83E+037.65E+065.61E+099.26E+11 + 65M1 3.974.49E+007.50E+035.90E+054.29E+077.67E+021.84E+068.55E+081.23E+11 + 65M1 5.972.42E+001.27E+031.56E+055.67E+062.26E+022.50E+056.37E+077.10E+09 + 65M1 9.979.73E-011.10E+021.84E+049.80E+054.87E+012.11E+042.68E+062.02E+08 + 65M1 16.973.38E-016.18E+001.32E+037.68E+049.97E+001.71E+031.12E+055.43E+06 + 65M1 26.001.35E-015.50E-011.24E+026.90E+032.80E+002.39E+029.66E+033.22E+05 + 65M1 41.004.80E-021.32E-018.26E+004.17E+027.28E-013.13E+017.77E+021.73E+04 + 65M1 53.002.61E-028.50E-021.84E+008.03E+013.42E-011.03E+011.96E+023.47E+03 + 65M1 71.001.28E-024.86E-024.21E-011.24E+011.46E-012.98E+004.28E+015.83E+02 + 65M1 104.004.91E-032.01E-021.01E-011.32E+004.83E-026.27E-016.29E+006.15E+01 + 65M1 150.001.94E-037.71E-033.25E-022.23E-011.71E-021.50E-011.09E+007.80E+00 + 65M1 280.004.06E-041.38E-034.72E-031.86E-023.06E-031.55E-026.82E-022.98E-01 + 65M1 500.001.06E-043.04E-048.50E-042.44E-036.66E-042.31E-036.91E-032.02E-02 + 65M2 2.771.48E+015.10E+061.14E+103.07E+122.31E+022.73E+055.38E+073.26E+09 + 65M2 3.779.02E+001.09E+061.53E+093.58E+119.13E+016.75E+041.15E+079.44E+08 + 65M2 5.773.88E+001.30E+051.00E+081.82E+102.53E+011.02E+041.36E+061.15E+08 + 65M2 9.771.15E+009.42E+033.69E+064.64E+085.17E+001.06E+039.80E+046.81E+06 + 65M2 16.772.80E-016.48E+021.34E+051.12E+071.02E+001.11E+026.83E+033.45E+05 + 65M2 26.008.10E-027.52E+019.58E+035.63E+052.73E-011.85E+018.07E+022.99E+04 + 65M2 41.002.08E-028.24E+006.48E+022.61E+046.98E-022.99E+008.99E+012.36E+03 + 65M2 53.009.44E-032.40E+001.45E+024.71E+033.25E-021.08E+002.64E+015.66E+02 + 65M2 71.003.76E-035.99E-012.69E+016.83E+021.36E-023.46E-016.60E+001.12E+02 + 65M2 104.001.11E-031.01E-013.10E+005.71E+014.41E-037.92E-021.10E+001.38E+01 + 65M2 150.003.42E-041.89E-024.11E-015.57E+001.51E-031.97E-022.05E-011.92E+00 + 65M2 280.004.75E-051.22E-031.52E-021.25E-012.46E-041.97E-031.27E-027.41E-02 + 65M2 500.008.26E-061.14E-048.91E-044.84E-034.68E-052.54E-041.11E-034.38E-03 + 65M3 2.613.63E+011.07E+072.58E+107.17E+125.13E+011.17E+072.39E+115.00E+14 + 65M3 3.612.00E+012.11E+063.08E+097.23E+111.92E+012.33E+062.53E+103.14E+13 + 65M3 5.617.72E+002.29E+051.78E+083.18E+105.03E+002.57E+051.21E+097.70E+11 + 65M3 9.612.05E+001.52E+045.85E+067.13E+089.77E-011.75E+043.07E+079.21E+09 + 65M3 16.614.58E-019.68E+021.93E+051.55E+071.85E-011.14E+037.67E+051.16E+08 + 65M3 26.001.22E-011.02E+021.22E+046.83E+054.73E-021.23E+023.95E+043.56E+06 + 65M3 41.002.95E-021.04E+017.58E+022.90E+041.19E-021.28E+012.05E+031.14E+05 + 65M3 53.001.29E-022.89E+001.60E+024.91E+035.48E-033.58E+004.00E+021.70E+04 + 65M3 71.004.93E-036.76E-012.74E+016.53E+022.27E-038.45E-016.41E+012.05E+03 + 65M3 104.001.38E-031.02E-012.78E+004.75E+017.24E-041.30E-016.17E+001.38E+02 + 65M3 150.004.06E-041.71E-023.16E-013.93E+002.44E-042.19E-026.92E-011.12E+01 + 65M3 280.005.23E-058.71E-048.47E-036.17E-023.92E-051.12E-031.93E-021.90E-01 + 65M3 500.008.80E-066.48E-053.53E-041.61E-037.63E-067.92E-058.24E-045.49E-03 + 65M4 2.279.21E+013.31E+052.24E+103.31E+141.53E+013.61E+053.86E+093.63E+12 + 65M4 3.272.95E+015.15E+041.73E+091.37E+134.70E+005.80E+043.30E+082.34E+11 + 65M4 5.275.99E+004.53E+036.06E+072.21E+119.76E-015.28E+031.38E+076.52E+09 + 65M4 9.277.95E-012.55E+021.13E+061.77E+091.46E-013.07E+023.39E+059.74E+07 + 65M4 16.279.36E-021.43E+012.15E+041.55E+072.09E-021.79E+018.99E+031.55E+06 + 65M4 26.001.44E-021.27E+007.94E+023.12E+053.99E-031.68E+004.58E+025.10E+04 + 65M4 41.002.21E-031.19E-013.27E+017.37E+037.71E-041.68E-012.63E+011.91E+03 + 65M4 53.007.50E-043.11E-025.47E+009.12E+023.00E-044.61E-025.34E+003.06E+02 + 65M4 71.002.16E-046.74E-037.25E-018.62E+011.02E-041.06E-028.80E-013.85E+01 + 65M4 104.004.20E-059.22E-045.34E-024.12E+002.43E-051.56E-038.58E-022.65E+00 + 65M4 150.008.78E-061.39E-044.57E-032.35E-016.08E-062.50E-049.46E-032.11E-01 + 65M4 280.006.55E-076.08E-068.14E-052.10E-035.64E-071.15E-052.39E-043.18E-03 + 65M4 500.006.15E-083.82E-072.51E-063.37E-056.26E-086.97E-078.76E-067.59E-05 + 65M5 2.241.38E+024.16E+053.92E+105.27E+149.27E+003.47E+041.96E+101.19E+15 + 65M5 3.244.32E+016.26E+042.93E+092.08E+132.81E+005.52E+031.49E+094.39E+13 + 65M5 5.248.52E+005.34E+039.90E+073.20E+115.82E-015.02E+025.16E+076.08E+11 + 65M5 9.241.10E+002.93E+021.80E+062.46E+098.82E-022.98E+019.79E+054.03E+09 + 65M5 16.241.26E-011.60E+013.32E+042.05E+071.30E-021.81E+001.91E+042.90E+07 + 65M5 26.001.89E-021.37E+001.18E+033.94E+052.52E-031.77E-017.15E+024.98E+05 + 65M5 41.002.84E-031.24E-014.70E+018.85E+035.03E-041.90E-023.00E+011.04E+04 + 65M5 53.009.54E-043.16E-027.67E+001.06E+032.00E-045.45E-035.05E+001.21E+03 + 65M5 71.002.73E-046.63E-039.76E-019.50E+016.95E-051.33E-036.66E-011.07E+02 + 65M5 104.005.31E-058.63E-046.72E-024.18E+001.73E-052.13E-044.79E-024.76E+00 + 65M5 150.001.11E-051.24E-045.28E-032.14E-014.54E-063.81E-053.92E-032.54E-01 + 65M5 280.008.22E-074.99E-067.66E-051.49E-034.80E-072.23E-066.01E-051.98E-03 + 65M5 500.008.78E-083.21E-071.92E-061.78E-056.58E-081.91E-071.54E-062.61E-05 + 65N+ 50.001.61E-021.97E+001.26E+024.96E+031.30E-015.70E+002.65E+021.04E+04 + 65N+ 70.006.22E-033.86E-011.68E+014.67E+024.81E-021.29E+003.63E+019.43E+02 + 65N+ 100.002.34E-037.43E-022.13E+004.18E+011.74E-022.89E-015.01E+008.52E+01 + 65N+ 150.007.59E-041.21E-022.13E-012.84E+005.43E-035.59E-025.85E-016.30E+00 + 65N+ 200.003.43E-043.57E-034.41E-024.46E-012.40E-031.83E-021.39E-011.10E+00 + 65N+ 500.003.30E-051.30E-045.66E-042.43E-031.95E-047.28E-042.48E-038.63E-03 + 66K 54.791.24E+002.35E+008.45E-019.50E-021.18E+011.58E+023.71E+021.89E+02 + 66K 55.491.21E+002.44E+001.18E+002.56E-011.14E+011.52E+023.79E+022.60E+02 + 66K 56.791.13E+002.51E+001.77E+007.64E-011.06E+011.39E+023.79E+023.77E+02 + 66K 59.999.85E-012.61E+003.11E+002.89E+009.05E+001.13E+023.67E+026.14E+02 + 66K 63.798.42E-012.58E+004.31E+006.17E+007.56E+009.02E+013.35E+027.79E+02 + 66K 68.007.14E-012.44E+005.11E+009.65E+006.28E+007.13E+012.93E+028.46E+02 + 66K 74.005.73E-012.17E+005.54E+001.32E+014.91E+005.22E+012.35E+028.18E+02 + 66K 82.004.38E-011.79E+005.34E+001.51E+013.65E+003.58E+011.72E+026.87E+02 + 66K 94.003.06E-011.32E+004.43E+001.43E+012.46E+002.17E+011.08E+024.78E+02 + 66K 107.002.17E-019.57E-013.39E+001.17E+011.69E+001.36E+016.80E+013.11E+02 + 66K 124.001.46E-016.43E-012.34E+008.34E+001.11E+007.99E+003.91E+011.80E+02 + 66K 137.001.12E-014.85E-011.77E+006.34E+008.39E-015.60E+002.67E+011.21E+02 + 66K 154.008.22E-023.46E-011.25E+004.44E+006.04E-013.70E+001.70E+017.47E+01 + 66K 177.005.69E-022.30E-018.10E-012.82E+004.09E-012.28E+009.87E+004.15E+01 + 66K 205.003.86E-021.48E-015.06E-011.71E+002.73E-011.38E+005.58E+002.21E+01 + 66K 270.001.90E-026.59E-022.07E-016.45E-011.29E-015.47E-011.94E+006.75E+00 + 66K 355.009.68E-033.02E-028.70E-022.47E-016.23E-022.27E-017.00E-012.12E+00 + 66K 440.005.84E-031.70E-024.55E-021.20E-013.56E-021.17E-013.24E-018.81E-01 + 66K 550.003.55E-039.67E-032.41E-025.85E-022.01E-025.99E-021.50E-013.66E-01 + 66K 780.001.72E-034.32E-039.71E-032.08E-028.43E-032.22E-024.82E-021.01E-01 + 66K 1050.009.74E-042.32E-034.81E-039.36E-034.10E-039.98E-031.96E-023.66E-02 + 66K 1300.006.65E-041.52E-033.00E-035.49E-032.47E-035.75E-031.06E-021.86E-02 + 66K 1550.004.91E-041.09E-032.06E-033.61E-031.64E-033.70E-036.58E-031.09E-02 + 66L1 10.053.93E+009.00E+024.46E+043.11E+052.43E+029.16E+046.20E+069.46E+07 + 66L1 10.753.52E+006.32E+023.94E+044.92E+051.99E+026.66E+044.29E+067.88E+07 + 66L1 12.052.89E+003.41E+022.79E+045.84E+051.41E+023.88E+042.29E+065.08E+07 + 66L1 15.251.88E+008.91E+011.05E+043.49E+056.99E+011.28E+046.28E+051.63E+07 + 66L1 19.051.22E+002.25E+013.46E+031.39E+053.60E+014.58E+031.86E+054.85E+06 + 66L1 23.008.31E-016.49E+001.24E+035.35E+042.06E+011.93E+036.69E+041.66E+06 + 66L1 29.005.07E-011.47E+003.20E+021.45E+041.03E+016.79E+021.93E+044.29E+05 + 66L1 37.002.94E-015.62E-017.13E+013.29E+035.03E+002.31E+025.28E+031.02E+05 + 66L1 49.001.54E-013.78E-011.22E+015.44E+022.20E+006.81E+011.22E+031.95E+04 + 66L1 62.008.74E-022.73E-013.16E+001.17E+021.10E+002.51E+013.66E+024.93E+03 + 66L1 79.004.82E-021.75E-011.07E+002.50E+015.44E-019.20E+001.09E+021.22E+03 + 66L1 92.003.29E-021.26E-016.27E-011.01E+013.50E-014.96E+005.14E+015.11E+02 + 66L1 109.002.15E-028.43E-023.74E-014.05E+002.15E-012.52E+002.26E+011.97E+02 + 66L1 132.001.32E-025.19E-022.14E-011.62E+001.25E-011.20E+009.15E+006.85E+01 + 66L1 160.008.11E-033.11E-021.22E-017.16E-017.25E-025.76E-013.76E+002.43E+01 + 66L1 225.003.43E-031.22E-024.38E-021.92E-012.82E-021.65E-018.28E-014.11E+00 + 66L1 310.001.56E-035.09E-031.66E-025.97E-021.18E-025.43E-022.16E-018.49E-01 + 66L1 400.008.60E-042.61E-037.78E-032.45E-026.03E-032.34E-027.85E-022.60E-01 + 66L1 510.005.00E-041.42E-033.91E-031.09E-023.21E-031.09E-023.15E-028.96E-02 + 66L1 740.002.31E-046.05E-041.46E-033.47E-031.26E-033.59E-038.60E-031.99E-02 + 66L11000.001.30E-043.21E-047.08E-041.49E-036.01E-041.55E-033.27E-036.60E-03 + 66L11500.006.34E-051.45E-042.87E-045.28E-042.29E-045.37E-049.96E-041.74E-03 + 66L2 9.588.22E+005.08E+041.35E+074.25E+082.71E+013.77E+038.72E+045.53E+05 + 66L2 10.286.78E+003.58E+048.94E+063.38E+082.19E+012.87E+037.96E+048.84E+05 + 66L2 11.584.86E+001.97E+044.46E+062.03E+081.52E+011.81E+036.02E+041.08E+06 + 66L2 14.782.43E+005.86E+031.08E+065.61E+077.27E+007.01E+022.69E+047.12E+05 + 66L2 18.581.24E+001.89E+032.82E+051.47E+073.63E+002.87E+021.10E+043.21E+05 + 66L2 23.006.54E-016.59E+028.10E+043.95E+061.90E+001.25E+024.49E+031.30E+05 + 66L2 29.003.22E-012.11E+022.10E+049.16E+059.46E-015.03E+011.63E+034.40E+04 + 66L2 37.001.50E-016.44E+015.08E+031.92E+054.54E-011.94E+015.47E+021.32E+04 + 66L2 49.006.16E-021.66E+011.00E+033.13E+041.96E-016.51E+001.52E+023.10E+03 + 66L2 62.002.89E-025.38E+002.60E+026.83E+039.69E-022.62E+005.17E+018.98E+02 + 66L2 79.001.32E-021.71E+006.56E+011.43E+034.71E-021.03E+001.70E+012.48E+02 + 66L2 92.008.01E-038.36E-012.78E+015.39E+023.00E-025.75E-018.43E+001.10E+02 + 66L2 109.004.61E-033.80E-011.08E+011.83E+021.82E-023.01E-013.88E+004.47E+01 + 66L2 132.002.47E-031.58E-013.76E+005.46E+011.04E-021.46E-011.62E+001.62E+01 + 66L2 160.001.32E-036.60E-021.32E+001.64E+015.89E-037.10E-026.81E-015.88E+00 + 66L2 225.004.42E-041.46E-022.15E-012.06E+002.18E-032.02E-021.49E-011.00E+00 + 66L2 310.001.62E-043.69E-034.17E-023.13E-018.66E-046.33E-033.73E-021.99E-01 + 66L2 400.007.42E-051.29E-031.19E-027.42E-024.17E-042.57E-031.27E-025.73E-02 + 66L2 510.003.62E-054.90E-043.75E-031.99E-022.09E-041.11E-034.71E-031.82E-02 + 66L2 740.001.27E-051.20E-047.08E-042.98E-037.32E-053.17E-041.09E-033.40E-03 + 66L21000.005.59E-064.14E-052.01E-047.18E-043.15E-051.19E-043.55E-049.51E-04 + 66L21500.001.97E-061.09E-054.23E-051.24E-041.02E-053.37E-058.48E-051.92E-04 + 66L3 8.791.77E+011.14E+053.47E+071.25E+096.22E+001.24E+052.31E+084.50E+10 + 66L3 9.491.42E+017.71E+042.19E+079.33E+084.91E+008.46E+041.37E+082.50E+10 + 66L3 10.799.75E+004.02E+041.01E+075.07E+083.31E+004.45E+045.76E+079.32E+09 + 66L3 13.994.51E+001.08E+042.12E+061.19E+081.49E+001.22E+041.00E+071.28E+09 + 66L3 17.792.16E+003.21E+034.99E+052.72E+077.13E-013.68E+032.02E+062.08E+08 + 66L3 23.009.67E-018.78E+021.06E+055.23E+063.24E-011.03E+033.70E+053.01E+07 + 66L3 29.004.61E-012.73E+022.62E+041.14E+061.59E-013.24E+028.14E+045.34E+06 + 66L3 37.002.08E-018.02E+016.02E+032.24E+057.58E-029.64E+011.69E+048.86E+05 + 66L3 49.008.23E-021.96E+011.11E+033.37E+043.22E-022.39E+012.81E+031.15E+05 + 66L3 62.003.73E-026.05E+002.70E+026.83E+031.58E-027.48E+006.42E+022.12E+04 + 66L3 79.001.65E-021.81E+006.32E+011.32E+037.57E-032.27E+001.43E+023.82E+03 + 66L3 92.009.81E-038.51E-012.54E+014.67E+024.78E-031.07E+005.65E+011.32E+03 + 66L3 109.005.52E-033.68E-019.25E+001.48E+022.87E-034.68E-012.03E+014.09E+02 + 66L3 132.002.88E-031.44E-012.97E+004.03E+011.62E-031.84E-016.47E+001.11E+02 + 66L3 160.001.50E-035.63E-029.56E-011.10E+019.12E-047.25E-022.08E+003.07E+01 + 66L3 225.004.82E-041.09E-021.31E-011.13E+003.33E-041.42E-022.92E-013.30E+00 + 66L3 310.001.71E-042.44E-032.11E-021.40E-011.31E-043.14E-034.86E-024.35E-01 + 66L3 400.007.68E-057.67E-045.16E-032.78E-026.35E-059.73E-041.21E-029.12E-02 + 66L3 510.003.70E-052.66E-041.41E-036.30E-033.23E-053.27E-043.31E-032.15E-02 + 66L3 740.001.30E-055.81E-052.17E-047.44E-041.19E-056.66E-054.86E-042.55E-03 + 66L31000.005.85E-061.89E-055.45E-051.53E-045.61E-062.02E-051.10E-044.90E-04 + 66L31500.002.30E-064.94E-061.05E-052.30E-052.21E-064.88E-061.67E-055.93E-05 + 66M1 3.056.02E+002.42E+041.44E+062.79E+081.87E+037.60E+065.44E+098.70E+11 + 66M1 4.054.31E+007.51E+035.80E+054.18E+078.00E+021.88E+068.64E+081.21E+11 + 66M1 6.052.36E+001.31E+031.55E+055.57E+062.40E+022.65E+056.70E+077.32E+09 + 66M1 10.059.63E-011.19E+021.90E+049.75E+055.27E+012.29E+042.90E+062.15E+08 + 66M1 17.053.39E-017.16E+001.42E+037.96E+041.09E+011.88E+031.23E+055.90E+06 + 66M1 26.001.37E-016.59E-011.40E+027.54E+033.10E+002.68E+021.08E+043.60E+05 + 66M1 41.004.91E-021.33E-019.69E+004.69E+028.06E-013.49E+018.68E+021.92E+04 + 66M1 53.002.68E-028.34E-022.17E+009.18E+013.78E-011.14E+012.19E+023.85E+03 + 66M1 71.001.31E-024.78E-024.78E-011.44E+011.61E-013.31E+004.75E+016.46E+02 + 66M1 104.005.08E-032.01E-021.08E-011.51E+005.34E-026.95E-016.97E+006.79E+01 + 66M1 150.002.01E-037.82E-033.36E-022.45E-011.88E-021.66E-011.20E+008.60E+00 + 66M1 280.004.25E-041.42E-034.93E-031.98E-023.37E-031.71E-027.50E-023.27E-01 + 66M1 500.001.11E-043.20E-048.98E-042.60E-037.31E-042.54E-037.57E-032.22E-02 + 66M2 2.841.41E+014.90E+061.07E+102.78E+122.37E+022.71E+055.16E+072.91E+09 + 66M2 3.848.70E+001.09E+061.50E+093.41E+119.58E+016.92E+041.15E+078.93E+08 + 66M2 5.843.83E+001.34E+051.03E+081.82E+102.71E+011.08E+041.40E+061.14E+08 + 66M2 9.841.16E+009.98E+033.89E+064.81E+085.63E+001.14E+031.04E+057.03E+06 + 66M2 16.842.88E-016.98E+021.44E+051.19E+071.12E+001.21E+027.33E+033.64E+05 + 66M2 26.008.51E-028.28E+011.06E+046.15E+053.04E-012.05E+018.85E+023.25E+04 + 66M2 41.002.21E-029.08E+007.14E+022.86E+047.80E-023.31E+009.88E+012.57E+03 + 66M2 53.001.00E-022.65E+001.60E+025.17E+033.63E-021.20E+002.90E+016.18E+02 + 66M2 71.004.02E-036.62E-012.97E+017.50E+021.53E-023.83E-017.27E+001.23E+02 + 66M2 104.001.19E-031.11E-013.43E+006.28E+014.95E-038.80E-021.22E+001.52E+01 + 66M2 150.003.70E-042.09E-024.55E-016.14E+001.69E-032.20E-022.27E-012.11E+00 + 66M2 280.005.17E-051.35E-031.69E-021.39E-012.77E-042.20E-031.41E-028.22E-02 + 66M2 500.009.03E-061.27E-049.95E-045.39E-035.29E-052.86E-041.24E-034.88E-03 + 66M3 2.683.47E+011.04E+072.43E+106.52E+125.14E+011.18E+072.34E+114.79E+14 + 66M3 3.681.94E+012.10E+063.02E+096.90E+111.96E+012.41E+062.60E+103.18E+13 + 66M3 5.687.65E+002.36E+051.82E+083.17E+105.24E+002.75E+051.30E+098.21E+11 + 66M3 9.682.07E+001.61E+046.13E+067.35E+081.03E+001.92E+043.39E+071.02E+10 + 66M3 16.684.70E-011.04E+032.05E+051.63E+071.97E-011.27E+038.61E+051.30E+08 + 66M3 26.001.27E-011.11E+021.33E+047.38E+055.11E-021.39E+024.54E+044.10E+06 + 66M3 41.003.10E-021.14E+018.25E+023.13E+041.29E-021.44E+012.35E+031.30E+05 + 66M3 53.001.36E-023.16E+001.74E+025.31E+035.93E-034.05E+004.58E+021.95E+04 + 66M3 71.005.22E-037.38E-012.98E+017.07E+022.46E-039.55E-017.31E+012.33E+03 + 66M3 104.001.47E-031.12E-013.03E+005.15E+017.84E-041.46E-017.01E+001.57E+02 + 66M3 150.004.34E-041.87E-023.45E-014.26E+002.64E-042.46E-027.85E-011.27E+01 + 66M3 280.005.63E-059.53E-049.25E-036.71E-024.24E-051.25E-032.18E-022.14E-01 + 66M3 500.009.48E-067.08E-053.85E-041.76E-038.26E-068.84E-059.27E-046.18E-03 + 66M4 2.338.92E+013.20E+052.12E+103.07E+141.55E+013.63E+053.79E+093.45E+12 + 66M4 3.332.93E+015.17E+041.73E+091.36E+134.86E+006.07E+043.41E+082.36E+11 + 66M4 5.336.13E+004.70E+036.33E+072.32E+111.03E+005.71E+031.48E+076.92E+09 + 66M4 9.338.34E-012.72E+021.23E+061.93E+091.57E-013.41E+023.76E+051.07E+08 + 66M4 16.339.99E-021.55E+012.37E+041.72E+072.29E-022.02E+011.01E+041.73E+06 + 66M4 26.001.57E-021.41E+008.99E+023.58E+054.43E-031.92E+005.27E+025.85E+04 + 66M4 41.002.42E-031.32E-013.70E+018.44E+038.58E-041.93E-013.03E+012.20E+03 + 66M4 53.008.25E-043.47E-026.20E+001.04E+033.35E-045.29E-026.14E+003.51E+02 + 66M4 71.002.39E-047.54E-038.21E-019.86E+011.14E-041.21E-021.01E+004.42E+01 + 66M4 104.004.68E-051.03E-036.05E-024.72E+002.72E-051.79E-039.88E-023.05E+00 + 66M4 150.009.82E-061.57E-045.19E-032.69E-016.82E-062.88E-041.09E-022.43E-01 + 66M4 280.007.28E-076.87E-069.25E-052.40E-036.36E-071.32E-052.76E-043.67E-03 + 66M4 500.007.13E-084.36E-072.86E-063.87E-057.06E-088.02E-071.01E-058.78E-05 + 66M5 2.291.34E+024.00E+053.75E+104.94E+149.35E+003.45E+041.95E+101.15E+15 + 66M5 3.294.30E+016.25E+042.95E+092.08E+132.90E+005.68E+031.55E+094.56E+13 + 66M5 5.298.73E+005.50E+031.04E+083.37E+116.15E-015.33E+025.63E+076.67E+11 + 66M5 9.291.15E+003.09E+021.96E+062.68E+099.47E-023.23E+011.10E+064.59E+09 + 66M5 16.291.34E-011.71E+013.68E+042.28E+071.41E-021.99E+002.18E+043.36E+07 + 66M5 26.002.06E-021.50E+001.34E+034.50E+052.78E-031.98E-018.38E+025.94E+05 + 66M5 41.003.10E-031.36E-015.34E+011.01E+045.56E-042.13E-023.51E+011.23E+04 + 66M5 53.001.05E-033.48E-028.70E+001.21E+032.22E-046.09E-035.90E+001.43E+03 + 66M5 71.003.00E-047.32E-031.11E+001.08E+027.70E-051.48E-037.78E-011.27E+02 + 66M5 104.005.80E-059.55E-047.63E-024.76E+001.92E-052.39E-045.59E-025.61E+00 + 66M5 150.001.21E-051.37E-045.99E-032.44E-015.06E-064.26E-054.57E-032.99E-01 + 66M5 280.009.33E-075.59E-068.69E-051.70E-035.35E-072.50E-066.96E-052.32E-03 + 66M5 500.001.02E-073.52E-072.18E-062.02E-057.35E-082.14E-071.77E-063.05E-05 + 66N+ 50.001.68E-022.16E+001.39E+025.47E+031.44E-016.39E+003.02E+021.19E+04 + 66N+ 70.006.50E-034.24E-011.85E+015.15E+025.33E-021.44E+004.11E+011.07E+03 + 66N+ 100.002.45E-038.12E-022.35E+004.60E+011.92E-023.23E-015.63E+009.64E+01 + 66N+ 150.007.96E-041.32E-022.35E-013.12E+006.01E-036.22E-026.54E-017.08E+00 + 66N+ 200.003.62E-043.87E-034.85E-024.92E-012.65E-032.03E-021.55E-011.23E+00 + 66N+ 500.003.55E-051.42E-046.29E-042.73E-032.18E-048.15E-042.78E-039.71E-03 + 67K 56.621.16E+002.11E+007.25E-017.59E-021.17E+011.50E+023.40E+021.66E+02 + 67K 57.321.13E+002.18E+001.01E+002.04E-011.13E+011.45E+023.46E+022.26E+02 + 67K 58.621.06E+002.25E+001.50E+006.07E-011.05E+011.32E+023.47E+023.28E+02 + 67K 61.829.29E-012.34E+002.64E+002.30E+009.03E+001.09E+023.37E+025.34E+02 + 67K 65.627.98E-012.32E+003.67E+004.96E+007.59E+008.73E+013.10E+026.83E+02 + 67K 70.006.75E-012.20E+004.41E+007.95E+006.29E+006.88E+012.71E+027.50E+02 + 67K 76.005.46E-011.97E+004.81E+001.09E+014.95E+005.09E+012.20E+027.31E+02 + 67K 84.004.21E-011.64E+004.69E+001.27E+013.71E+003.53E+011.63E+026.24E+02 + 67K 96.002.96E-011.23E+003.95E+001.23E+012.52E+002.17E+011.04E+024.42E+02 + 67K 109.002.12E-018.99E-013.07E+001.03E+011.75E+001.37E+016.62E+012.93E+02 + 67K 126.001.44E-016.11E-012.15E+007.48E+001.16E+008.13E+003.86E+011.72E+02 + 67K 139.001.11E-014.65E-011.65E+005.76E+008.77E-015.73E+002.66E+011.17E+02 + 67K 156.008.18E-023.34E-011.18E+004.10E+006.34E-013.82E+001.70E+017.33E+01 + 67K 179.005.69E-022.24E-017.73E-012.64E+004.32E-012.36E+001.00E+014.12E+01 + 67K 205.003.99E-021.50E-015.04E-011.68E+002.97E-011.48E+005.93E+002.31E+01 + 67K 270.001.97E-026.72E-022.09E-016.46E-011.40E-015.90E-012.07E+007.12E+00 + 67K 355.001.00E-023.11E-028.89E-022.51E-016.76E-022.45E-017.48E-012.25E+00 + 67K 450.005.77E-031.66E-024.39E-021.14E-013.64E-021.17E-013.20E-018.56E-01 + 67K 560.003.56E-039.62E-032.38E-025.73E-022.08E-026.12E-021.51E-013.64E-01 + 67K 790.001.75E-034.40E-039.84E-032.10E-028.82E-032.31E-024.97E-021.03E-01 + 67K 1050.001.02E-032.43E-035.05E-039.84E-034.42E-031.07E-022.10E-023.92E-02 + 67K 1300.006.95E-041.60E-033.16E-035.79E-032.65E-036.18E-031.14E-021.99E-02 + 67K 1550.005.14E-041.14E-032.18E-033.82E-031.76E-033.98E-037.06E-031.17E-02 + 67L1 10.393.68E+008.34E+023.92E+042.54E+052.41E+028.71E+045.66E+068.26E+07 + 67L1 11.093.30E+005.94E+023.50E+044.07E+051.99E+026.39E+043.96E+066.94E+07 + 67L1 12.392.73E+003.28E+022.52E+044.95E+051.43E+023.78E+042.15E+064.57E+07 + 67L1 15.591.80E+008.97E+019.87E+033.11E+057.19E+011.29E+046.12E+051.52E+07 + 67L1 19.391.18E+002.38E+013.38E+031.29E+053.76E+014.69E+031.86E+054.68E+06 + 67L1 23.008.36E-017.93E+001.35E+035.56E+042.26E+012.15E+037.38E+041.78E+06 + 67L1 29.005.12E-011.79E+003.59E+021.55E+041.14E+017.54E+022.12E+044.64E+05 + 67L1 37.002.99E-015.98E-018.19E+013.60E+035.53E+002.56E+025.82E+031.11E+05 + 67L1 49.001.56E-013.65E-011.44E+016.09E+022.42E+007.54E+011.34E+032.13E+04 + 67L1 62.008.93E-022.64E-013.67E+001.33E+021.21E+002.77E+014.02E+025.37E+03 + 67L1 79.004.94E-021.71E-011.17E+002.86E+015.98E-011.01E+011.19E+021.33E+03 + 67L1 92.003.38E-021.24E-016.67E-011.15E+013.85E-015.46E+005.63E+015.57E+02 + 67L1 109.002.21E-028.37E-023.88E-014.55E+002.36E-012.78E+002.48E+012.15E+02 + 67L1 132.001.36E-025.20E-022.20E-011.78E+001.37E-011.32E+001.00E+017.46E+01 + 67L1 160.008.38E-033.14E-021.25E-017.70E-017.96E-026.32E-014.12E+002.64E+01 + 67L1 225.003.56E-031.25E-024.51E-022.02E-013.09E-021.81E-019.04E-014.48E+00 + 67L1 310.001.63E-035.25E-031.72E-026.28E-021.29E-025.94E-022.35E-019.24E-01 + 67L1 400.009.00E-042.71E-038.13E-032.59E-026.59E-032.56E-028.55E-022.83E-01 + 67L1 510.005.25E-041.49E-034.10E-031.16E-023.51E-031.19E-023.43E-029.73E-02 + 67L1 740.002.42E-046.37E-041.55E-033.69E-031.37E-033.91E-039.34E-032.16E-02 + 67L11000.001.37E-043.39E-047.51E-041.58E-036.53E-041.69E-033.55E-037.16E-03 + 67L11500.006.69E-051.54E-043.06E-045.64E-042.48E-045.82E-041.08E-031.88E-03 + 67L2 9.927.71E+004.67E+041.19E+073.57E+082.70E+013.58E+037.89E+044.62E+05 + 67L2 10.626.40E+003.32E+047.98E+062.88E+082.19E+012.75E+037.25E+047.50E+05 + 67L2 11.924.64E+001.87E+044.07E+061.76E+081.54E+011.76E+035.56E+049.39E+05 + 67L2 15.122.36E+005.73E+031.02E+065.11E+077.51E+006.99E+022.57E+046.46E+05 + 67L2 18.921.23E+001.89E+032.75E+051.38E+073.81E+002.91E+021.08E+043.02E+05 + 67L2 23.006.85E-017.20E+028.79E+044.19E+062.11E+001.36E+024.77E+031.34E+05 + 67L2 29.003.38E-012.31E+022.28E+049.78E+051.05E+005.50E+011.75E+034.61E+04 + 67L2 37.001.58E-017.05E+015.53E+032.06E+055.04E-012.13E+015.89E+021.39E+04 + 67L2 49.006.52E-021.81E+011.09E+033.38E+042.17E-017.14E+001.65E+023.30E+03 + 67L2 62.003.07E-025.89E+002.84E+027.39E+031.08E-012.88E+005.61E+019.64E+02 + 67L2 79.001.40E-021.87E+007.17E+011.55E+035.24E-021.13E+001.85E+012.68E+02 + 67L2 92.008.55E-039.17E-013.04E+015.85E+023.34E-026.33E-019.19E+001.19E+02 + 67L2 109.004.93E-034.17E-011.18E+011.99E+022.03E-023.32E-014.24E+004.84E+01 + 67L2 132.002.65E-031.73E-014.12E+005.95E+011.15E-021.61E-011.78E+001.76E+01 + 67L2 160.001.42E-037.26E-021.45E+001.80E+016.57E-037.85E-027.47E-016.40E+00 + 67L2 225.004.77E-041.61E-022.37E-012.26E+002.44E-032.23E-021.65E-011.10E+00 + 67L2 310.001.75E-044.08E-034.60E-023.44E-019.69E-047.03E-034.12E-022.19E-01 + 67L2 400.008.11E-051.43E-031.31E-028.19E-024.68E-042.86E-031.41E-026.31E-02 + 67L2 510.003.97E-055.43E-044.16E-032.20E-022.35E-041.23E-035.23E-032.01E-02 + 67L2 740.001.37E-051.33E-047.87E-043.31E-038.23E-053.55E-041.22E-033.78E-03 + 67L21000.006.13E-064.60E-052.24E-047.98E-043.55E-051.34E-043.96E-041.06E-03 + 67L21500.002.16E-061.21E-054.72E-051.38E-041.15E-053.78E-059.50E-052.14E-04 + 67L3 9.071.66E+011.05E+053.08E+071.06E+096.05E+001.19E+052.13E+084.02E+10 + 67L3 9.771.34E+017.19E+041.97E+078.05E+084.82E+008.20E+041.29E+082.27E+10 + 67L3 11.079.33E+003.82E+049.31E+064.47E+083.28E+004.39E+045.53E+078.70E+09 + 67L3 14.274.39E+001.06E+042.02E+061.09E+081.50E+001.24E+041.00E+071.25E+09 + 67L3 18.072.14E+003.21E+034.88E+052.57E+077.29E-013.82E+032.07E+062.09E+08 + 67L3 23.001.01E+009.50E+021.14E+055.51E+063.48E-011.15E+034.21E+053.41E+07 + 67L3 29.004.81E-012.96E+022.82E+041.21E+061.71E-013.63E+029.24E+046.04E+06 + 67L3 37.002.18E-018.68E+016.49E+032.38E+058.13E-021.08E+021.91E+041.00E+06 + 67L3 49.008.63E-022.12E+011.20E+033.60E+043.45E-022.68E+013.18E+031.29E+05 + 67L3 62.003.93E-026.55E+002.91E+027.30E+031.69E-028.38E+007.25E+022.39E+04 + 67L3 79.001.73E-021.96E+006.81E+011.41E+038.12E-032.54E+001.62E+024.29E+03 + 67L3 92.001.04E-029.21E-012.74E+015.00E+025.13E-031.20E+006.36E+011.48E+03 + 67L3 109.005.83E-033.99E-019.99E+001.58E+023.08E-035.23E-012.28E+014.59E+02 + 67L3 132.003.05E-031.56E-013.21E+004.33E+011.74E-032.06E-017.27E+001.25E+02 + 67L3 160.001.59E-036.10E-021.03E+001.18E+019.79E-048.10E-022.34E+003.43E+01 + 67L3 225.005.13E-041.18E-021.42E-011.22E+003.58E-041.58E-023.28E-013.69E+00 + 67L3 310.001.82E-042.64E-032.29E-021.51E-011.41E-043.50E-035.43E-024.85E-01 + 67L3 400.008.19E-058.31E-045.58E-033.00E-026.81E-051.08E-031.35E-021.02E-01 + 67L3 510.003.95E-052.88E-041.53E-036.81E-033.46E-053.62E-043.69E-032.39E-02 + 67L3 740.001.38E-056.28E-052.35E-048.05E-041.28E-057.33E-055.40E-042.84E-03 + 67L31000.006.26E-062.03E-055.90E-051.66E-046.01E-062.21E-051.22E-045.44E-04 + 67L31500.002.42E-065.31E-061.13E-052.49E-052.36E-065.30E-061.84E-056.57E-05 + 67M1 3.135.73E+002.36E+041.44E+062.45E+081.91E+037.54E+065.27E+098.19E+11 + 67M1 4.134.14E+007.53E+035.76E+054.06E+078.34E+021.93E+068.72E+081.20E+11 + 67M1 6.132.30E+001.36E+031.55E+055.54E+062.55E+022.80E+057.03E+077.54E+09 + 67M1 10.139.52E-011.29E+021.96E+049.73E+055.68E+012.48E+043.13E+062.30E+08 + 67M1 17.133.39E-018.23E+001.52E+038.26E+041.19E+012.06E+031.35E+056.41E+06 + 67M1 26.001.40E-017.92E-011.58E+028.21E+033.43E+003.00E+021.22E+044.02E+05 + 67M1 41.005.01E-021.38E-011.13E+015.25E+028.91E-013.90E+019.68E+022.14E+04 + 67M1 53.002.74E-028.26E-022.55E+001.05E+024.18E-011.27E+012.44E+024.28E+03 + 67M1 71.001.35E-024.72E-025.46E-011.65E+011.78E-013.68E+005.28E+017.15E+02 + 67M1 104.005.25E-032.01E-021.15E-011.73E+005.90E-027.70E-017.71E+007.50E+01 + 67M1 150.002.09E-037.92E-033.50E-022.71E-012.08E-021.83E-011.33E+009.47E+00 + 67M1 280.004.44E-041.47E-035.14E-032.12E-023.71E-031.88E-028.24E-023.59E-01 + 67M1 500.001.17E-043.36E-049.50E-042.78E-038.03E-042.78E-038.29E-032.42E-02 + 67M2 2.921.33E+014.67E+069.90E+092.50E+122.42E+022.67E+054.92E+072.60E+09 + 67M2 3.928.37E+001.08E+061.46E+093.22E+119.99E+017.05E+041.14E+078.41E+08 + 67M2 5.923.77E+001.37E+051.04E+081.80E+102.89E+011.13E+041.43E+061.13E+08 + 67M2 9.921.16E+001.05E+044.08E+064.96E+086.11E+001.22E+031.09E+057.23E+06 + 67M2 16.922.95E-017.49E+021.54E+051.25E+071.23E+001.31E+027.84E+033.83E+05 + 67M2 26.008.92E-029.11E+011.16E+046.72E+053.39E-012.27E+019.69E+023.52E+04 + 67M2 41.002.33E-021.00E+017.85E+023.13E+048.70E-023.67E+001.08E+022.80E+03 + 67M2 53.001.06E-022.92E+001.76E+025.65E+034.06E-021.33E+003.19E+016.73E+02 + 67M2 71.004.28E-037.29E-013.27E+018.22E+021.71E-024.25E-018.00E+001.34E+02 + 67M2 104.001.28E-031.23E-013.79E+006.90E+015.54E-039.77E-021.34E+001.66E+01 + 67M2 150.003.99E-042.31E-025.03E-016.77E+001.90E-032.44E-022.51E-012.32E+00 + 67M2 280.005.63E-051.50E-031.88E-021.54E-013.12E-042.46E-031.57E-029.09E-02 + 67M2 500.009.95E-061.41E-041.11E-036.00E-035.97E-053.21E-041.39E-035.43E-03 + 67M3 2.743.33E+019.99E+062.29E+105.98E+125.15E+011.18E+072.29E+114.61E+14 + 67M3 3.741.89E+012.09E+062.97E+096.62E+112.01E+012.49E+062.66E+103.23E+13 + 67M3 5.747.58E+002.43E+051.85E+083.17E+105.46E+002.93E+051.39E+098.76E+11 + 67M3 9.742.09E+001.69E+046.43E+067.59E+081.09E+002.09E+043.73E+071.12E+10 + 67M3 16.744.82E-011.11E+032.18E+051.71E+072.10E-011.41E+039.66E+051.46E+08 + 67M3 26.001.33E-011.21E+021.45E+047.96E+055.52E-021.57E+025.21E+044.72E+06 + 67M3 41.003.25E-021.24E+018.97E+023.38E+041.39E-021.63E+012.69E+031.49E+05 + 67M3 53.001.43E-023.44E+001.89E+025.73E+036.40E-034.57E+005.22E+022.23E+04 + 67M3 71.005.53E-038.05E-013.24E+017.64E+022.65E-031.08E+008.32E+012.66E+03 + 67M3 104.001.56E-031.22E-013.30E+005.57E+018.46E-041.65E-017.96E+001.78E+02 + 67M3 150.004.62E-042.04E-023.76E-014.62E+002.85E-042.77E-028.90E-011.44E+01 + 67M3 280.006.04E-051.04E-031.01E-027.29E-024.58E-051.41E-032.45E-022.42E-01 + 67M3 500.001.02E-057.71E-054.20E-041.91E-038.92E-069.86E-051.04E-036.94E-03 + 67M4 2.398.63E+013.08E+052.00E+102.85E+141.55E+013.65E+053.72E+093.30E+12 + 67M4 3.392.91E+015.17E+041.72E+091.35E+135.01E+006.34E+043.52E+082.38E+11 + 67M4 5.396.25E+004.87E+036.60E+072.42E+111.09E+006.17E+031.60E+077.33E+09 + 67M4 9.398.72E-012.89E+021.32E+062.10E+091.69E-013.77E+024.16E+051.17E+08 + 67M4 16.391.06E-011.68E+012.60E+041.91E+072.49E-022.26E+011.14E+041.93E+06 + 67M4 26.001.71E-021.56E+001.01E+034.09E+054.90E-032.20E+006.06E+026.70E+04 + 67M4 41.002.65E-031.47E-014.18E+019.64E+039.53E-042.21E-013.48E+012.51E+03 + 67M4 53.009.05E-043.86E-027.00E+001.19E+033.73E-046.05E-027.05E+004.02E+02 + 67M4 71.002.63E-048.41E-039.28E-011.13E+021.27E-041.39E-021.16E+005.06E+01 + 67M4 104.005.18E-051.16E-036.84E-025.39E+003.04E-052.05E-031.13E-013.49E+00 + 67M4 150.001.09E-051.76E-045.87E-033.08E-017.64E-063.30E-041.25E-022.79E-01 + 67M4 280.007.99E-077.74E-061.05E-042.75E-037.14E-071.52E-053.17E-044.22E-03 + 67M4 500.007.63E-084.93E-073.25E-064.43E-057.95E-089.21E-071.17E-051.01E-04 + 67M5 2.351.30E+023.83E+053.57E+104.61E+149.39E+003.41E+041.92E+101.11E+15 + 67M5 3.354.28E+016.21E+042.96E+092.07E+132.99E+005.83E+031.61E+094.70E+13 + 67M5 5.358.91E+005.65E+031.09E+083.54E+116.47E-015.65E+026.11E+077.27E+11 + 67M5 9.351.20E+003.25E+022.12E+062.91E+091.01E-013.50E+011.23E+065.20E+09 + 67M5 16.351.43E-011.83E+014.07E+042.53E+071.52E-022.18E+002.49E+043.89E+07 + 67M5 26.002.23E-021.64E+001.52E+035.13E+053.06E-032.21E-019.78E+027.05E+05 + 67M5 41.003.38E-031.49E-016.05E+011.15E+046.13E-042.37E-024.10E+011.46E+04 + 67M5 53.001.14E-033.82E-029.86E+001.37E+032.45E-046.79E-036.89E+001.69E+03 + 67M5 71.003.29E-048.06E-031.26E+001.23E+028.52E-051.65E-039.07E-011.49E+02 + 67M5 104.006.42E-051.05E-038.64E-025.42E+002.13E-052.66E-046.51E-026.60E+00 + 67M5 150.001.35E-051.52E-046.79E-032.78E-015.61E-064.75E-055.31E-033.51E-01 + 67M5 280.001.02E-066.21E-069.84E-051.93E-035.95E-072.79E-068.05E-052.71E-03 + 67M5 500.001.14E-074.00E-072.45E-062.31E-058.17E-082.39E-072.03E-063.54E-05 + 67N+ 50.001.75E-022.37E+001.53E+026.02E+031.60E-017.16E+003.42E+021.36E+04 + 67N+ 70.006.79E-034.64E-012.04E+015.66E+025.91E-021.61E+004.64E+011.22E+03 + 67N+ 100.002.56E-038.87E-022.58E+005.05E+012.13E-023.59E-016.32E+001.09E+02 + 67N+ 150.008.36E-041.43E-022.58E-013.43E+006.65E-036.91E-027.31E-017.93E+00 + 67N+ 200.003.80E-044.19E-035.33E-025.41E-012.93E-032.25E-021.72E-011.37E+00 + 67N+ 500.003.72E-051.51E-046.78E-042.96E-032.38E-048.90E-043.04E-031.06E-02 + 68K 58.481.09E+001.89E+006.24E-016.08E-021.16E+011.43E+023.11E+021.46E+02 + 68K 59.181.06E+001.94E+008.54E-011.64E-011.12E+011.37E+023.15E+021.96E+02 + 68K 60.481.00E+002.02E+001.28E+004.84E-011.05E+011.26E+023.18E+022.85E+02 + 68K 63.688.77E-012.10E+002.24E+001.84E+009.02E+001.05E+023.10E+024.65E+02 + 68K 67.487.56E-012.09E+003.13E+004.00E+007.62E+008.44E+012.87E+025.99E+02 + 68K 71.006.64E-012.02E+003.69E+006.02E+006.57E+007.01E+012.60E+026.57E+02 + 68K 77.005.38E-011.83E+004.15E+008.76E+005.19E+005.21E+012.13E+026.62E+02 + 68K 85.004.17E-011.55E+004.15E+001.06E+013.90E+003.63E+011.60E+025.80E+02 + 68K 97.002.95E-011.17E+003.59E+001.07E+012.67E+002.24E+011.04E+024.22E+02 + 68K 110.002.12E-018.64E-012.84E+009.17E+001.86E+001.43E+016.68E+012.85E+02 + 68K 127.001.45E-015.94E-012.03E+006.83E+001.23E+008.51E+003.93E+011.70E+02 + 68K 140.001.12E-014.54E-011.56E+005.33E+009.36E-016.02E+002.72E+011.17E+02 + 68K 157.008.28E-023.29E-011.13E+003.85E+006.77E-014.02E+001.76E+017.37E+01 + 68K 180.005.78E-022.22E-017.50E-012.52E+004.62E-012.50E+001.04E+014.18E+01 + 68K 205.004.12E-021.52E-015.02E-011.65E+003.22E-011.60E+006.29E+002.42E+01 + 68K 270.002.04E-026.85E-022.11E-016.47E-011.52E-016.36E-012.20E+007.50E+00 + 68K 355.001.04E-023.19E-029.07E-022.55E-017.33E-022.64E-017.99E-012.38E+00 + 68K 450.006.00E-031.71E-024.52E-021.17E-013.95E-021.26E-013.43E-019.08E-01 + 68K 560.003.71E-039.99E-032.47E-025.93E-022.25E-026.59E-021.62E-013.87E-01 + 68K 790.001.83E-034.59E-031.03E-022.19E-029.52E-032.48E-025.32E-021.10E-01 + 68K 1050.001.07E-032.55E-035.31E-031.03E-024.75E-031.15E-022.25E-024.18E-02 + 68K 1300.007.27E-041.68E-033.33E-036.10E-032.85E-036.65E-031.22E-022.13E-02 + 68K 1550.005.38E-041.20E-032.30E-034.03E-031.88E-034.27E-037.56E-031.25E-02 + 68L1 10.753.44E+007.74E+023.46E+042.07E+052.40E+028.28E+045.17E+067.22E+07 + 68L1 11.453.10E+005.58E+023.11E+043.37E+051.99E+026.14E+043.66E+066.13E+07 + 68L1 12.752.58E+003.15E+022.28E+044.20E+051.44E+023.69E+042.03E+064.11E+07 + 68L1 15.951.72E+009.02E+019.29E+032.77E+057.39E+011.29E+045.95E+051.42E+07 + 68L1 19.751.14E+002.51E+013.30E+031.20E+053.91E+014.80E+031.86E+054.51E+06 + 68L1 23.008.41E-019.59E+001.48E+035.75E+042.49E+012.39E+038.12E+041.91E+06 + 68L1 29.005.17E-012.19E+004.00E+021.64E+041.25E+018.37E+022.34E+045.02E+05 + 68L1 37.003.03E-016.56E-019.36E+013.91E+036.08E+002.83E+026.40E+031.20E+05 + 68L1 49.001.59E-013.57E-011.68E+016.79E+022.66E+008.34E+011.48E+032.31E+04 + 68L1 62.009.11E-022.55E-014.26E+001.51E+021.33E+003.06E+014.42E+025.85E+03 + 68L1 79.005.06E-021.67E-011.30E+003.27E+016.58E-011.12E+011.31E+021.44E+03 + 68L1 92.003.47E-021.22E-017.18E-011.32E+014.23E-016.02E+006.18E+016.07E+02 + 68L1 109.002.27E-028.31E-024.06E-015.13E+002.60E-013.06E+002.72E+012.34E+02 + 68L1 132.001.40E-025.21E-022.27E-011.97E+001.50E-011.45E+001.10E+018.13E+01 + 68L1 160.008.66E-033.17E-021.28E-018.34E-018.74E-026.94E-014.50E+002.88E+01 + 68L1 225.003.70E-031.27E-024.64E-022.15E-013.39E-021.98E-019.87E-014.87E+00 + 68L1 310.001.70E-035.42E-031.78E-026.64E-021.42E-026.50E-022.56E-011.00E+00 + 68L1 400.009.39E-042.81E-038.50E-032.74E-027.21E-032.79E-029.31E-023.07E-01 + 68L1 510.005.48E-041.55E-034.31E-031.23E-023.83E-031.29E-023.73E-021.06E-01 + 68L1 740.002.54E-046.70E-041.64E-033.92E-031.49E-034.26E-031.01E-022.34E-02 + 68L11000.001.43E-043.58E-047.97E-041.69E-037.10E-041.83E-033.86E-037.76E-03 + 68L11500.007.05E-051.63E-043.26E-046.02E-042.68E-046.31E-041.17E-032.04E-03 + 68L2 10.267.24E+004.29E+041.05E+073.01E+082.69E+013.40E+037.14E+043.87E+05 + 68L2 10.966.05E+003.09E+047.13E+062.45E+082.20E+012.64E+036.60E+046.36E+05 + 68L2 12.264.43E+001.77E+043.72E+061.53E+081.56E+011.71E+035.14E+048.15E+05 + 68L2 15.462.30E+005.58E+039.64E+054.64E+077.76E+006.96E+022.45E+045.85E+05 + 68L2 19.261.21E+001.88E+032.68E+051.30E+073.99E+002.96E+021.05E+042.84E+05 + 68L2 23.007.16E-017.86E+029.52E+044.43E+062.33E+001.48E+025.07E+031.38E+05 + 68L2 29.003.54E-012.52E+022.47E+041.04E+061.16E+006.00E+011.87E+034.81E+04 + 68L2 37.001.67E-017.70E+016.01E+032.21E+055.59E-012.33E+016.33E+021.47E+04 + 68L2 49.006.89E-021.98E+011.19E+033.64E+042.41E-017.82E+001.78E+023.52E+03 + 68L2 62.003.25E-026.45E+003.09E+027.98E+031.20E-013.15E+006.08E+011.03E+03 + 68L2 79.001.49E-022.05E+007.83E+011.68E+035.83E-021.24E+002.01E+012.88E+02 + 68L2 92.009.12E-031.00E+003.33E+016.35E+023.72E-026.96E-011.00E+011.29E+02 + 68L2 109.005.26E-034.58E-011.29E+012.16E+022.26E-023.66E-014.63E+005.25E+01 + 68L2 132.002.83E-031.90E-014.51E+006.49E+011.29E-021.78E-011.94E+001.91E+01 + 68L2 160.001.53E-037.98E-021.59E+001.96E+017.33E-038.67E-028.19E-016.97E+00 + 68L2 225.005.16E-041.77E-022.61E-012.47E+002.73E-032.47E-021.81E-011.20E+00 + 68L2 310.001.90E-044.50E-035.08E-023.79E-011.08E-037.80E-034.55E-022.40E-01 + 68L2 400.008.80E-051.58E-031.45E-029.02E-025.24E-043.18E-031.56E-026.95E-02 + 68L2 510.004.31E-056.00E-044.61E-032.43E-022.63E-041.38E-035.80E-032.22E-02 + 68L2 740.001.51E-051.48E-048.74E-043.66E-039.24E-053.96E-041.35E-034.19E-03 + 68L21000.006.74E-065.10E-052.49E-048.87E-043.99E-051.50E-044.42E-041.18E-03 + 68L21500.002.38E-061.35E-055.26E-051.54E-041.30E-054.24E-051.06E-042.39E-04 + 68L3 9.361.56E+019.67E+042.74E+079.09E+085.89E+001.14E+051.97E+083.59E+10 + 68L3 10.061.27E+016.72E+041.78E+076.95E+084.72E+007.95E+041.21E+082.06E+10 + 68L3 11.368.93E+003.63E+048.57E+063.94E+083.25E+004.33E+045.31E+078.12E+09 + 68L3 14.564.28E+001.04E+041.93E+061.00E+081.52E+001.26E+049.99E+061.22E+09 + 68L3 18.362.11E+003.21E+034.77E+052.44E+077.44E-013.95E+032.13E+062.10E+08 + 68L3 23.001.05E+001.03E+031.23E+055.80E+063.73E-011.29E+034.79E+053.85E+07 + 68L3 29.005.01E-013.20E+023.03E+041.28E+061.83E-014.06E+021.05E+056.83E+06 + 68L3 37.002.28E-019.39E+016.98E+032.53E+058.71E-021.21E+022.17E+041.13E+06 + 68L3 49.009.05E-022.30E+011.29E+033.83E+043.70E-023.00E+013.60E+031.46E+05 + 68L3 62.004.13E-027.09E+003.13E+027.79E+031.81E-029.38E+008.18E+022.68E+04 + 68L3 79.001.83E-022.12E+007.34E+011.51E+038.71E-032.84E+001.82E+024.82E+03 + 68L3 92.001.09E-029.97E-012.96E+015.35E+025.50E-031.34E+007.16E+011.66E+03 + 68L3 109.006.16E-034.32E-011.08E+011.69E+023.31E-035.85E-012.56E+015.15E+02 + 68L3 132.003.22E-031.69E-013.46E+004.64E+011.86E-032.30E-018.16E+001.40E+02 + 68L3 160.001.69E-036.60E-021.11E+001.27E+011.05E-039.04E-022.62E+003.84E+01 + 68L3 225.005.45E-041.28E-021.53E-011.31E+003.84E-041.76E-023.67E-014.12E+00 + 68L3 310.001.94E-042.86E-032.47E-021.62E-011.51E-043.89E-036.07E-025.41E-01 + 68L3 400.008.73E-059.00E-046.04E-033.23E-027.31E-051.20E-031.50E-021.13E-01 + 68L3 510.004.22E-053.11E-041.65E-037.35E-033.71E-054.01E-044.11E-032.66E-02 + 68L3 740.001.48E-056.77E-052.55E-048.71E-041.37E-058.06E-056.00E-043.15E-03 + 68L31000.006.69E-062.19E-056.38E-051.80E-046.42E-062.41E-051.35E-046.04E-04 + 68L31500.002.58E-065.70E-061.22E-052.69E-052.52E-065.75E-062.03E-057.27E-05 + 68M1 3.215.47E+002.32E+041.44E+062.18E+081.96E+037.52E+065.14E+097.78E+11 + 68M1 4.213.99E+007.58E+035.77E+053.96E+078.71E+021.98E+068.84E+081.19E+11 + 68M1 6.212.24E+001.42E+031.56E+055.55E+062.72E+022.97E+057.40E+077.80E+09 + 68M1 10.219.42E-011.40E+022.03E+049.74E+056.14E+012.69E+043.38E+062.45E+08 + 68M1 17.213.39E-019.42E+001.63E+038.57E+041.29E+012.27E+031.48E+056.97E+06 + 68M1 26.001.42E-019.51E-011.78E+028.93E+033.79E+003.36E+021.36E+044.48E+05 + 68M1 41.005.12E-021.45E-011.31E+015.87E+029.84E-014.35E+011.08E+032.38E+04 + 68M1 53.002.81E-028.26E-022.98E+001.19E+024.62E-011.42E+012.71E+024.74E+03 + 68M1 71.001.39E-024.68E-026.28E-011.90E+011.97E-014.09E+005.85E+017.92E+02 + 68M1 104.005.41E-032.01E-021.25E-011.97E+006.51E-028.53E-018.53E+008.27E+01 + 68M1 150.002.17E-038.03E-033.67E-023.01E-012.30E-022.03E-011.46E+001.04E+01 + 68M1 280.004.64E-041.53E-035.38E-032.27E-024.08E-032.07E-029.05E-023.94E-01 + 68M1 500.001.23E-043.53E-041.00E-032.97E-038.81E-043.05E-039.08E-032.65E-02 + 68M2 3.011.26E+014.45E+069.16E+092.23E+122.47E+022.63E+054.68E+072.31E+09 + 68M2 4.018.04E+001.06E+061.41E+093.04E+111.04E+027.17E+041.12E+077.90E+08 + 68M2 6.013.70E+001.41E+051.05E+081.79E+103.08E+011.19E+041.47E+061.12E+08 + 68M2 10.011.17E+001.11E+044.27E+065.11E+086.63E+001.31E+031.15E+057.42E+06 + 68M2 17.013.02E-018.03E+021.64E+051.32E+071.35E+001.42E+028.38E+034.02E+05 + 68M2 26.009.33E-021.00E+021.28E+047.33E+053.78E-012.51E+011.06E+033.81E+04 + 68M2 41.002.46E-021.10E+018.63E+023.41E+049.71E-024.05E+001.19E+023.04E+03 + 68M2 53.001.13E-023.21E+001.94E+026.18E+034.53E-021.47E+003.50E+017.33E+02 + 68M2 71.004.56E-038.03E-013.60E+019.00E+021.91E-024.70E-018.79E+001.46E+02 + 68M2 104.001.37E-031.36E-014.17E+007.57E+016.21E-031.08E-011.48E+001.82E+01 + 68M2 150.004.31E-042.55E-025.56E-017.45E+002.13E-032.72E-022.77E-012.55E+00 + 68M2 280.006.12E-051.67E-032.08E-021.70E-013.51E-042.75E-031.74E-021.00E-01 + 68M2 500.001.09E-051.57E-041.24E-036.68E-036.74E-053.59E-041.55E-036.04E-03 + 68M3 2.813.18E+019.54E+062.13E+105.40E+125.13E+011.17E+072.22E+114.36E+14 + 68M3 3.811.83E+012.07E+062.89E+096.27E+112.04E+012.56E+062.70E+103.24E+13 + 68M3 5.817.49E+002.48E+051.88E+083.14E+105.67E+003.11E+051.47E+099.26E+11 + 68M3 9.812.11E+001.78E+046.71E+067.78E+081.15E+002.28E+044.09E+071.23E+10 + 68M3 16.814.93E-011.18E+032.31E+051.79E+072.24E-011.55E+031.08E+061.63E+08 + 68M3 26.001.38E-011.32E+021.57E+048.57E+055.95E-021.77E+025.97E+045.43E+06 + 68M3 41.003.41E-021.35E+019.75E+023.64E+041.50E-021.84E+013.07E+031.71E+05 + 68M3 53.001.51E-023.75E+002.06E+026.18E+036.90E-035.15E+005.96E+022.54E+04 + 68M3 71.005.84E-038.77E-013.52E+018.24E+022.86E-031.21E+009.47E+013.03E+03 + 68M3 104.001.66E-031.33E-013.58E+006.02E+019.13E-041.86E-019.03E+002.02E+02 + 68M3 150.004.92E-042.22E-024.09E-015.00E+003.07E-043.12E-021.01E+001.63E+01 + 68M3 280.006.45E-051.13E-031.10E-027.91E-024.95E-051.58E-032.76E-022.72E-01 + 68M3 500.001.09E-058.40E-054.58E-042.08E-039.62E-061.10E-041.17E-037.80E-03 + 68M4 2.458.33E+012.96E+051.88E+102.63E+141.56E+013.66E+053.63E+093.13E+12 + 68M4 3.452.89E+015.17E+041.71E+091.33E+135.16E+006.60E+043.62E+082.39E+11 + 68M4 5.456.37E+005.04E+036.85E+072.53E+111.15E+006.64E+031.71E+077.73E+09 + 68M4 9.459.10E-013.07E+021.42E+062.27E+091.82E-014.16E+024.59E+051.28E+08 + 68M4 16.451.13E-011.81E+012.86E+042.11E+072.71E-022.54E+011.28E+042.15E+06 + 68M4 26.001.86E-021.72E+001.14E+034.66E+055.42E-032.51E+006.95E+027.66E+04 + 68M4 41.002.89E-031.63E-014.71E+011.10E+041.06E-032.52E-013.98E+012.87E+03 + 68M4 53.009.91E-044.28E-027.89E+001.36E+034.14E-046.91E-028.08E+004.59E+02 + 68M4 71.002.89E-049.36E-031.05E+001.28E+021.41E-041.59E-021.33E+005.79E+01 + 68M4 104.005.76E-051.29E-037.72E-026.14E+003.39E-052.34E-031.30E-014.00E+00 + 68M4 150.001.22E-051.98E-046.63E-033.51E-018.55E-063.78E-041.44E-023.20E-01 + 68M4 280.008.87E-078.76E-061.18E-043.14E-038.01E-071.74E-053.65E-044.84E-03 + 68M4 500.008.50E-085.59E-073.68E-065.07E-058.93E-081.06E-061.35E-051.16E-04 + 68M5 2.411.26E+023.66E+053.38E+104.28E+149.41E+003.36E+041.89E+101.07E+15 + 68M5 3.414.24E+016.16E+042.95E+092.04E+133.07E+005.96E+031.67E+094.82E+13 + 68M5 5.419.07E+005.79E+031.14E+083.69E+116.79E-015.97E+026.61E+077.89E+11 + 68M5 9.411.25E+003.41E+022.29E+063.16E+091.08E-013.78E+011.38E+065.87E+09 + 68M5 16.411.51E-011.95E+014.48E+042.80E+071.65E-022.39E+002.83E+044.48E+07 + 68M5 26.002.41E-021.79E+001.72E+035.83E+053.35E-032.46E-011.14E+038.36E+05 + 68M5 41.003.68E-031.63E-016.84E+011.31E+046.74E-042.63E-024.78E+011.72E+04 + 68M5 53.001.25E-034.19E-021.11E+011.56E+032.69E-047.55E-038.02E+001.99E+03 + 68M5 71.003.60E-048.86E-031.42E+001.40E+029.40E-051.84E-031.06E+001.76E+02 + 68M5 104.007.05E-051.16E-039.78E-026.15E+002.35E-052.96E-047.57E-027.74E+00 + 68M5 150.001.49E-051.68E-047.68E-033.16E-016.22E-065.29E-056.16E-034.10E-01 + 68M5 280.001.14E-066.87E-061.11E-042.19E-036.60E-073.11E-069.29E-053.16E-03 + 68M5 500.001.20E-074.41E-072.75E-062.61E-059.07E-082.66E-072.32E-064.11E-05 + 68N+ 50.001.82E-022.60E+001.68E+026.63E+031.77E-018.01E+003.88E+021.56E+04 + 68N+ 70.007.08E-035.08E-012.24E+016.21E+026.55E-021.80E+005.24E+011.39E+03 + 68N+ 100.002.68E-039.68E-022.84E+005.54E+012.36E-024.00E-017.10E+001.23E+02 + 68N+ 150.008.76E-041.56E-022.84E-013.77E+007.37E-037.67E-028.16E-018.89E+00 + 68N+ 200.003.99E-044.54E-035.86E-025.95E-013.25E-032.49E-021.91E-011.53E+00 + 68N+ 500.003.90E-051.60E-047.32E-043.22E-032.60E-049.72E-043.33E-031.16E-02 + 69K 60.391.02E+001.70E+005.37E-014.88E-021.15E+011.36E+022.85E+021.28E+02 + 69K 61.099.91E-011.74E+007.31E-011.32E-011.11E+011.30E+022.89E+021.72E+02 + 69K 62.399.40E-011.81E+001.09E+003.87E-011.04E+011.21E+022.92E+022.48E+02 + 69K 65.598.28E-011.89E+001.91E+001.47E+009.02E+001.01E+022.86E+024.06E+02 + 69K 69.397.17E-011.89E+002.68E+003.23E+007.65E+008.17E+012.66E+025.26E+02 + 69K 73.006.30E-011.83E+003.18E+004.95E+006.60E+006.79E+012.42E+025.82E+02 + 69K 79.005.14E-011.67E+003.61E+007.28E+005.25E+005.09E+012.00E+025.93E+02 + 69K 87.004.00E-011.42E+003.65E+008.97E+003.97E+003.58E+011.52E+025.26E+02 + 69K 99.002.86E-011.09E+003.21E+009.22E+002.74E+002.24E+011.00E+023.90E+02 + 69K 112.002.07E-018.12E-012.58E+008.05E+001.92E+001.44E+016.51E+012.68E+02 + 69K 129.001.43E-015.64E-011.87E+006.13E+001.28E+008.66E+003.89E+011.63E+02 + 69K 142.001.11E-014.35E-011.46E+004.85E+009.78E-016.16E+002.71E+011.13E+02 + 69K 159.008.23E-023.17E-011.06E+003.55E+007.11E-014.14E+001.77E+017.22E+01 + 69K 182.005.78E-022.16E-017.16E-012.36E+004.88E-012.59E+001.05E+014.15E+01 + 69K 210.003.99E-021.43E-014.63E-011.49E+003.28E-011.59E+006.09E+002.28E+01 + 69K 275.002.01E-026.63E-022.01E-016.09E-011.57E-016.46E-012.19E+007.30E+00 + 69K 360.001.05E-023.16E-028.88E-022.48E-017.67E-022.72E-018.11E-012.38E+00 + 69K 450.006.24E-031.77E-024.65E-021.20E-014.28E-021.36E-013.66E-019.64E-01 + 69K 560.003.86E-031.04E-022.56E-026.14E-022.44E-027.10E-021.73E-014.12E-01 + 69K 790.001.91E-034.80E-031.07E-022.29E-021.03E-022.67E-025.70E-021.17E-01 + 69K 1050.001.11E-032.67E-035.57E-031.09E-025.12E-031.24E-022.41E-024.47E-02 + 69K 1300.007.61E-041.76E-033.50E-036.42E-033.06E-037.14E-031.31E-022.27E-02 + 69K 1550.005.63E-041.27E-032.42E-034.25E-032.02E-034.59E-038.11E-031.34E-02 + 69L1 11.123.22E+007.19E+023.06E+041.69E+052.39E+027.88E+044.73E+066.32E+07 + 69L1 11.822.91E+005.25E+022.77E+042.80E+051.99E+025.90E+043.39E+065.41E+07 + 69L1 13.122.44E+003.02E+022.07E+043.57E+051.46E+023.60E+041.91E+063.69E+07 + 69L1 16.321.65E+009.05E+018.74E+032.47E+057.60E+011.29E+045.79E+051.33E+07 + 69L1 20.121.10E+002.63E+013.21E+031.11E+054.07E+014.90E+031.85E+054.34E+06 + 69L1 24.007.74E-018.78E+001.27E+034.78E+042.41E+012.19E+037.10E+041.61E+06 + 69L1 30.004.85E-012.18E+003.65E+021.44E+041.24E+017.97E+022.14E+044.45E+05 + 69L1 38.002.89E-016.68E-019.06E+013.61E+036.18E+002.79E+026.11E+031.12E+05 + 69L1 50.001.54E-013.44E-011.73E+016.63E+022.75E+008.45E+011.46E+032.23E+04 + 69L1 63.008.95E-022.42E-014.53E+001.54E+021.40E+003.16E+014.47E+025.80E+03 + 69L1 80.005.02E-021.60E-011.38E+003.45E+016.97E-011.17E+011.35E+021.46E+03 + 69L1 93.003.47E-021.18E-017.50E-011.41E+014.51E-016.34E+006.42E+016.21E+02 + 69L1 110.002.28E-028.08E-024.17E-015.51E+002.78E-013.24E+002.85E+012.42E+02 + 69L1 133.001.42E-025.11E-022.30E-012.10E+001.62E-011.54E+001.16E+018.49E+01 + 69L1 160.008.94E-033.20E-021.32E-019.08E-019.59E-027.62E-014.92E+003.13E+01 + 69L1 225.003.83E-031.30E-024.80E-022.29E-013.72E-022.17E-011.08E+005.30E+00 + 69L1 310.001.77E-035.59E-031.86E-027.03E-021.55E-027.10E-022.79E-011.09E+00 + 69L1 400.009.80E-042.92E-038.89E-032.90E-027.89E-033.05E-021.01E-013.33E-01 + 69L1 510.005.74E-041.62E-034.54E-031.30E-024.19E-031.41E-024.06E-021.15E-01 + 69L1 740.002.68E-047.05E-041.73E-034.17E-031.63E-034.63E-031.10E-022.54E-02 + 69L11000.001.51E-043.78E-048.47E-041.80E-037.71E-041.99E-034.18E-038.41E-03 + 69L11500.007.43E-051.73E-043.47E-046.43E-042.90E-046.85E-041.27E-032.20E-03 + 69L2 10.626.79E+003.95E+049.23E+062.54E+082.68E+013.23E+036.47E+043.24E+05 + 69L2 11.325.71E+002.88E+046.38E+062.09E+082.21E+012.53E+036.03E+045.41E+05 + 69L2 12.624.23E+001.67E+043.39E+061.34E+081.59E+011.66E+034.76E+047.08E+05 + 69L2 15.822.24E+005.45E+039.12E+054.21E+078.01E+006.92E+022.33E+045.30E+05 + 69L2 19.621.20E+001.88E+032.60E+051.22E+074.18E+003.00E+021.03E+042.66E+05 + 69L2 24.006.58E-016.96E+028.05E+043.60E+062.27E+001.37E+024.49E+031.17E+05 + 69L2 30.003.35E-012.33E+022.20E+048.94E+051.16E+005.74E+011.72E+034.27E+04 + 69L2 38.001.61E-017.39E+015.59E+031.99E+055.72E-012.29E+016.04E+021.36E+04 + 69L2 50.006.83E-021.97E+011.15E+033.43E+042.52E-017.92E+001.75E+023.38E+03 + 69L2 63.003.28E-026.53E+003.08E+027.77E+031.27E-013.25E+006.13E+011.02E+03 + 69L2 80.001.52E-022.12E+007.96E+011.68E+036.24E-021.30E+002.06E+012.90E+02 + 69L2 93.009.38E-031.05E+003.42E+016.43E+024.00E-027.34E-011.04E+011.31E+02 + 69L2 110.005.46E-034.81E-011.35E+012.22E+022.44E-023.89E-014.84E+005.41E+01 + 69L2 133.002.96E-032.02E-014.74E+006.74E+011.40E-021.90E-012.05E+001.99E+01 + 69L2 160.001.64E-038.76E-021.74E+002.14E+018.18E-039.57E-028.97E-017.59E+00 + 69L2 225.005.55E-041.95E-022.87E-012.71E+003.05E-032.74E-021.99E-011.31E+00 + 69L2 310.002.06E-044.96E-035.60E-024.16E-011.21E-038.65E-035.01E-022.64E-01 + 69L2 400.009.56E-051.74E-031.60E-029.93E-025.87E-043.53E-031.73E-027.65E-02 + 69L2 510.004.70E-056.64E-045.10E-032.68E-022.95E-041.53E-036.43E-032.45E-02 + 69L2 740.001.64E-051.64E-049.70E-044.06E-031.04E-044.43E-041.50E-034.64E-03 + 69L21000.007.39E-065.66E-052.77E-049.85E-044.49E-051.68E-044.93E-041.31E-03 + 69L21500.002.63E-061.50E-055.87E-051.72E-041.46E-054.76E-051.19E-042.67E-04 + 69L3 9.651.47E+018.96E+042.45E+077.80E+085.74E+001.09E+051.83E+083.22E+10 + 69L3 10.351.21E+016.29E+041.61E+076.02E+084.63E+007.72E+041.14E+081.88E+10 + 69L3 11.658.55E+003.45E+047.90E+063.48E+083.22E+004.27E+045.10E+077.59E+09 + 69L3 14.854.17E+001.01E+041.84E+069.19E+071.53E+001.27E+049.96E+061.19E+09 + 69L3 18.652.09E+003.20E+034.66E+052.31E+077.59E-014.09E+032.18E+062.11E+08 + 69L3 24.009.52E-018.97E+021.02E+054.64E+063.50E-011.17E+034.10E+053.16E+07 + 69L3 30.004.69E-012.91E+022.65E+041.08E+061.77E-013.84E+029.53E+045.99E+06 + 69L3 38.002.18E-018.88E+016.39E+032.24E+058.60E-021.19E+022.06E+041.05E+06 + 69L3 50.008.86E-022.24E+011.23E+033.55E+043.73E-023.04E+013.58E+031.42E+05 + 69L3 63.004.11E-027.07E+003.06E+027.45E+031.85E-029.69E+008.35E+022.69E+04 + 69L3 80.001.84E-022.16E+007.33E+011.48E+038.98E-032.98E+001.90E+024.95E+03 + 69L3 93.001.11E-021.02E+002.99E+015.31E+025.70E-031.42E+007.54E+011.73E+03 + 69L3 110.006.30E-034.47E-011.10E+011.70E+023.44E-036.25E-012.73E+015.42E+02 + 69L3 133.003.32E-031.76E-013.57E+004.72E+011.95E-032.47E-018.75E+001.48E+02 + 69L3 160.001.79E-037.14E-021.20E+001.36E+011.12E-031.01E-012.94E+004.29E+01 + 69L3 225.005.78E-041.39E-021.65E-011.41E+004.11E-041.96E-024.10E-014.60E+00 + 69L3 310.002.06E-043.09E-032.67E-021.75E-011.62E-044.32E-036.77E-026.03E-01 + 69L3 400.009.31E-059.74E-046.53E-033.48E-027.83E-051.33E-031.68E-021.26E-01 + 69L3 510.004.50E-053.37E-041.79E-037.92E-033.97E-054.43E-044.57E-032.96E-02 + 69L3 740.001.57E-057.30E-052.75E-049.40E-041.46E-058.86E-056.66E-043.50E-03 + 69L31000.007.18E-062.36E-056.89E-051.94E-046.86E-062.64E-051.49E-046.70E-04 + 69L31500.002.74E-066.11E-061.31E-052.90E-052.69E-066.23E-062.23E-058.04E-05 + 69M1 3.315.13E+002.22E+041.39E+061.83E+081.97E+037.28E+064.81E+097.02E+11 + 69M1 4.313.79E+007.47E+035.61E+053.70E+078.97E+021.99E+068.67E+081.13E+11 + 69M1 6.312.17E+001.45E+031.54E+055.42E+062.86E+023.09E+057.61E+077.82E+09 + 69M1 10.319.26E-011.50E+022.06E+049.60E+056.59E+012.88E+043.60E+062.57E+08 + 69M1 17.313.38E-011.07E+011.73E+038.80E+041.40E+012.47E+031.61E+057.49E+06 + 69M1 26.001.44E-011.14E+001.99E+029.67E+034.19E+003.76E+021.53E+044.99E+05 + 69M1 41.005.22E-021.56E-011.51E+016.52E+021.09E+004.85E+011.20E+032.64E+04 + 69M1 53.002.87E-028.34E-023.48E+001.34E+025.11E-011.58E+013.01E+025.25E+03 + 69M1 71.001.43E-024.64E-027.23E-012.17E+012.17E-014.54E+006.49E+018.75E+02 + 69M1 104.005.59E-032.01E-021.36E-012.26E+007.19E-029.45E-019.42E+009.11E+01 + 69M1 150.002.25E-038.14E-033.87E-023.36E-012.53E-022.24E-011.61E+001.14E+01 + 69M1 280.004.85E-041.58E-035.64E-032.44E-024.50E-032.28E-029.94E-024.31E-01 + 69M1 500.001.29E-043.71E-041.06E-033.17E-039.68E-043.35E-039.94E-032.90E-02 + 69M2 3.091.19E+014.25E+068.49E+092.01E+122.52E+022.60E+054.46E+072.06E+09 + 69M2 4.097.73E+001.05E+061.37E+092.86E+111.09E+027.29E+041.11E+077.43E+08 + 69M2 6.093.63E+001.44E+051.06E+081.77E+103.28E+011.24E+041.50E+061.10E+08 + 69M2 10.091.17E+001.17E+044.46E+065.26E+087.19E+001.40E+031.20E+057.61E+06 + 69M2 17.093.09E-018.61E+021.75E+051.39E+071.48E+001.54E+028.95E+034.23E+05 + 69M2 26.009.76E-021.10E+021.40E+047.98E+054.21E-012.77E+011.16E+034.13E+04 + 69M2 41.002.59E-021.21E+019.48E+023.73E+041.08E-014.48E+001.30E+023.30E+03 + 69M2 53.001.20E-023.53E+002.13E+026.75E+035.06E-021.63E+003.83E+017.97E+02 + 69M2 71.004.86E-038.84E-013.96E+019.84E+022.13E-025.21E-019.65E+001.60E+02 + 69M2 104.001.47E-031.49E-014.60E+008.30E+016.95E-031.20E-011.63E+001.99E+01 + 69M2 150.004.63E-042.82E-026.14E-018.19E+002.39E-033.02E-023.06E-012.80E+00 + 69M2 280.006.66E-051.85E-032.31E-021.88E-013.95E-043.06E-031.94E-021.11E-01 + 69M2 500.001.19E-051.75E-041.38E-037.42E-037.61E-054.03E-041.72E-036.72E-03 + 69M3 2.883.03E+019.12E+061.98E+104.86E+125.10E+011.16E+072.14E+114.12E+14 + 69M3 3.881.77E+012.05E+062.80E+095.92E+112.07E+012.63E+062.73E+103.23E+13 + 69M3 5.887.39E+002.54E+051.90E+083.10E+105.88E+003.30E+051.56E+099.74E+11 + 69M3 9.882.12E+001.86E+046.98E+067.96E+081.21E+002.48E+044.48E+071.35E+10 + 69M3 16.885.04E-011.26E+032.45E+051.87E+072.38E-011.71E+031.20E+061.82E+08 + 69M3 26.001.44E-011.44E+021.71E+049.22E+056.41E-021.99E+026.82E+046.23E+06 + 69M3 41.003.57E-021.47E+011.06E+033.92E+041.61E-022.07E+013.51E+031.95E+05 + 69M3 53.001.58E-024.08E+002.23E+026.66E+037.44E-035.80E+006.78E+022.89E+04 + 69M3 71.006.15E-039.55E-013.83E+018.88E+023.09E-031.37E+001.08E+023.44E+03 + 69M3 104.001.75E-031.45E-013.89E+006.49E+019.84E-042.09E-011.02E+012.29E+02 + 69M3 150.005.23E-042.42E-024.44E-015.40E+003.31E-043.51E-021.14E+001.84E+01 + 69M3 280.006.87E-051.23E-031.19E-028.57E-025.33E-051.77E-033.11E-023.06E-01 + 69M3 500.001.16E-059.15E-054.99E-042.26E-031.04E-051.22E-041.31E-038.74E-03 + 69M4 2.518.04E+012.85E+051.77E+102.43E+141.57E+013.67E+053.55E+092.98E+12 + 69M4 3.512.86E+015.16E+041.69E+091.30E+135.30E+006.87E+043.71E+082.40E+11 + 69M4 5.516.48E+005.20E+037.10E+072.62E+111.21E+007.14E+031.83E+078.14E+09 + 69M4 9.519.47E-013.25E+021.52E+062.46E+091.95E-014.58E+025.06E+051.39E+08 + 69M4 16.511.20E-011.95E+013.13E+042.33E+072.94E-022.83E+011.43E+042.39E+06 + 69M4 26.002.01E-021.89E+001.29E+035.31E+055.97E-032.86E+007.96E+028.74E+04 + 69M4 41.003.15E-031.80E-015.30E+011.25E+041.17E-032.88E-014.56E+013.28E+03 + 69M4 53.001.09E-034.75E-028.88E+001.54E+034.59E-047.89E-029.25E+005.24E+02 + 69M4 71.003.18E-041.04E-021.18E+001.46E+021.56E-041.81E-021.53E+006.61E+01 + 69M4 104.006.32E-051.44E-038.70E-026.99E+003.78E-052.68E-031.49E-014.56E+00 + 69M4 150.001.34E-052.21E-047.48E-034.00E-019.54E-064.32E-041.65E-023.66E-01 + 69M4 280.001.00E-069.85E-061.34E-043.58E-038.96E-071.99E-054.19E-045.55E-03 + 69M4 500.001.03E-076.29E-074.17E-065.79E-051.00E-071.21E-061.55E-051.34E-04 + 69M5 2.471.22E+023.49E+053.21E+103.97E+149.42E+003.32E+041.85E+101.03E+15 + 69M5 3.474.21E+016.10E+042.94E+092.02E+133.15E+006.09E+031.72E+094.93E+13 + 69M5 5.479.23E+005.92E+031.19E+083.84E+117.11E-016.28E+027.13E+078.53E+11 + 69M5 9.471.31E+003.58E+022.47E+063.41E+091.15E-014.08E+011.53E+066.60E+09 + 69M5 16.471.60E-012.08E+014.92E+043.09E+071.77E-022.61E+003.21E+045.15E+07 + 69M5 26.002.61E-021.94E+001.94E+036.62E+053.67E-032.73E-011.33E+039.89E+05 + 69M5 41.004.00E-031.78E-017.72E+011.48E+047.39E-042.93E-025.55E+012.03E+04 + 69M5 53.001.36E-034.59E-021.26E+011.77E+032.96E-048.38E-039.32E+002.35E+03 + 69M5 71.003.93E-049.71E-031.60E+001.59E+021.04E-042.04E-031.23E+002.06E+02 + 69M5 104.007.79E-051.28E-031.10E-016.97E+002.60E-053.29E-048.79E-029.07E+00 + 69M5 150.001.66E-051.86E-048.67E-033.58E-016.88E-065.88E-057.14E-034.79E-01 + 69M5 280.001.24E-067.65E-061.25E-042.49E-037.32E-073.46E-061.07E-043.67E-03 + 69M5 500.001.32E-074.91E-073.09E-062.96E-051.01E-072.96E-072.65E-064.76E-05 + 69N+ 50.001.89E-022.85E+001.84E+027.28E+031.96E-018.95E+004.39E+021.77E+04 + 69N+ 70.007.37E-035.56E-012.45E+016.81E+027.24E-022.00E+005.90E+011.57E+03 + 69N+ 100.002.80E-031.06E-013.11E+006.07E+012.61E-024.45E-017.95E+001.38E+02 + 69N+ 150.009.17E-041.69E-023.11E-014.14E+008.14E-038.50E-029.09E-019.95E+00 + 69N+ 200.004.19E-044.92E-036.43E-026.55E-013.59E-032.76E-022.13E-011.71E+00 + 69N+ 500.004.19E-051.75E-048.14E-043.61E-032.90E-041.09E-033.73E-031.31E-02 + 70K 62.339.57E-011.53E+004.64E-013.93E-021.14E+011.30E+022.62E+021.13E+02 + 70K 63.039.31E-011.57E+006.27E-011.06E-011.10E+011.24E+022.65E+021.51E+02 + 70K 64.338.84E-011.63E+009.30E-013.10E-011.04E+011.16E+022.68E+022.17E+02 + 70K 67.537.82E-011.70E+001.63E+001.19E+009.02E+009.67E+012.64E+023.55E+02 + 70K 71.336.80E-011.70E+002.29E+002.62E+007.69E+007.92E+012.47E+024.62E+02 + 70K 75.005.98E-011.65E+002.74E+004.07E+006.64E+006.59E+012.25E+025.16E+02 + 70K 81.004.91E-011.52E+003.14E+006.05E+005.32E+004.98E+011.88E+025.31E+02 + 70K 89.003.85E-011.31E+003.21E+007.57E+004.05E+003.54E+011.44E+024.78E+02 + 70K 101.002.77E-011.01E+002.87E+007.95E+002.81E+002.24E+019.64E+013.62E+02 + 70K 114.002.02E-017.63E-012.34E+007.08E+001.99E+001.45E+016.35E+012.52E+02 + 70K 131.001.40E-015.36E-011.72E+005.50E+001.34E+008.82E+003.84E+011.56E+02 + 70K 144.001.10E-014.17E-011.36E+004.41E+001.02E+006.31E+002.70E+011.10E+02 + 70K 161.008.19E-023.07E-011.00E+003.28E+007.47E-014.27E+001.77E+017.07E+01 + 70K 184.005.79E-022.11E-016.83E-012.22E+005.14E-012.68E+001.07E+014.11E+01 + 70K 210.004.11E-021.45E-014.61E-011.47E+003.57E-011.71E+006.45E+002.38E+01 + 70K 275.002.08E-026.75E-022.03E-016.09E-011.71E-016.95E-012.33E+007.67E+00 + 70K 360.001.08E-023.24E-029.07E-022.52E-018.31E-022.93E-018.65E-012.51E+00 + 70K 450.006.49E-031.82E-024.79E-021.24E-014.63E-021.47E-013.91E-011.02E+00 + 70K 560.004.02E-031.08E-022.65E-026.35E-022.64E-027.64E-021.85E-014.38E-01 + 70K 790.001.99E-035.01E-031.12E-022.39E-021.11E-022.87E-026.11E-021.25E-01 + 70K 1050.001.16E-032.80E-035.85E-031.14E-025.51E-031.33E-022.59E-024.77E-02 + 70K 1300.007.95E-041.85E-033.69E-036.77E-033.29E-037.68E-031.41E-022.43E-02 + 70K 1550.005.88E-041.33E-032.55E-034.49E-032.16E-034.93E-038.68E-031.43E-02 + 70L1 11.493.02E+006.71E+022.71E+041.39E+052.38E+027.51E+044.34E+065.55E+07 + 70L1 12.192.74E+004.95E+022.48E+042.33E+052.00E+025.68E+043.14E+064.80E+07 + 70L1 13.492.31E+002.91E+021.88E+043.04E+051.47E+023.52E+041.80E+063.33E+07 + 70L1 16.691.58E+009.07E+018.23E+032.20E+057.81E+011.30E+045.63E+051.24E+07 + 70L1 20.491.07E+002.75E+013.13E+031.03E+054.24E+015.01E+031.84E+054.18E+06 + 70L1 24.007.78E-011.05E+011.38E+034.92E+042.65E+012.43E+037.81E+041.73E+06 + 70L1 30.004.89E-012.64E+004.05E+021.52E+041.37E+018.83E+022.36E+044.80E+05 + 70L1 38.002.92E-017.59E-011.03E+023.90E+036.79E+003.09E+026.72E+031.21E+05 + 70L1 50.001.57E-013.47E-012.00E+017.33E+023.03E+009.33E+011.60E+032.42E+04 + 70L1 63.009.12E-022.37E-015.25E+001.72E+021.54E+003.49E+014.90E+026.30E+03 + 70L1 80.005.13E-021.57E-011.56E+003.92E+017.66E-011.29E+011.48E+021.59E+03 + 70L1 93.003.55E-021.16E-018.23E-011.60E+014.95E-016.98E+007.02E+016.75E+02 + 70L1 110.002.35E-028.03E-024.46E-016.21E+003.05E-013.56E+003.11E+012.63E+02 + 70L1 133.001.46E-025.12E-022.41E-012.34E+001.78E-011.69E+001.26E+019.23E+01 + 70L1 160.009.23E-033.23E-021.37E-019.93E-011.05E-018.35E-015.37E+003.40E+01 + 70L1 225.003.97E-031.33E-024.97E-022.45E-014.07E-022.38E-011.17E+005.76E+00 + 70L1 310.001.84E-035.77E-031.93E-027.46E-021.70E-027.77E-023.04E-011.19E+00 + 70L1 400.001.02E-033.04E-039.32E-033.08E-028.63E-033.33E-021.10E-013.62E-01 + 70L1 510.005.99E-041.70E-034.78E-031.38E-024.57E-031.54E-024.41E-021.24E-01 + 70L1 740.002.80E-047.43E-041.83E-034.44E-031.77E-035.04E-031.20E-022.75E-02 + 70L11000.001.59E-044.00E-048.99E-041.92E-038.38E-042.16E-034.54E-039.11E-03 + 70L11500.007.81E-051.83E-043.69E-046.86E-043.14E-047.43E-041.37E-032.38E-03 + 70L2 10.986.39E+003.65E+048.17E+062.15E+082.68E+013.07E+035.88E+042.72E+05 + 70L2 11.685.40E+002.68E+045.72E+061.79E+082.22E+012.43E+035.51E+044.60E+05 + 70L2 12.984.04E+001.59E+043.10E+061.17E+081.61E+011.61E+034.41E+046.15E+05 + 70L2 16.182.17E+005.31E+038.63E+053.82E+078.28E+006.89E+022.22E+044.80E+05 + 70L2 19.981.18E+001.87E+032.53E+051.15E+074.38E+003.04E+021.00E+042.49E+05 + 70L2 24.006.87E-017.59E+028.71E+043.79E+062.52E+001.49E+024.76E+031.20E+05 + 70L2 30.003.51E-012.55E+022.38E+049.51E+051.29E+006.26E+011.84E+034.44E+04 + 70L2 38.001.70E-018.07E+016.07E+032.13E+056.33E-012.50E+016.48E+021.43E+04 + 70L2 50.007.21E-022.15E+011.25E+033.69E+042.79E-018.67E+001.89E+023.59E+03 + 70L2 63.003.47E-027.14E+003.35E+028.38E+031.40E-013.56E+006.63E+011.09E+03 + 70L2 80.001.62E-022.31E+008.68E+011.82E+036.93E-021.43E+002.24E+013.12E+02 + 70L2 93.009.99E-031.15E+003.74E+016.97E+024.45E-028.07E-011.13E+011.41E+02 + 70L2 110.005.82E-035.27E-011.47E+012.41E+022.72E-024.28E-015.28E+005.85E+01 + 70L2 133.003.17E-032.21E-015.19E+007.33E+011.56E-022.10E-012.24E+002.16E+01 + 70L2 160.001.76E-039.62E-021.91E+002.33E+019.11E-031.05E-019.82E-018.25E+00 + 70L2 225.005.98E-042.14E-023.15E-012.96E+003.40E-033.03E-022.19E-011.43E+00 + 70L2 310.002.22E-045.47E-036.16E-024.56E-011.36E-039.59E-035.52E-022.89E-01 + 70L2 400.001.04E-041.92E-031.77E-021.09E-016.58E-043.92E-031.91E-028.41E-02 + 70L2 510.005.10E-057.34E-045.64E-032.96E-023.31E-041.71E-037.12E-032.70E-02 + 70L2 740.001.79E-051.81E-041.08E-034.49E-031.17E-044.94E-041.67E-035.14E-03 + 70L21000.008.04E-066.28E-053.08E-041.09E-035.04E-051.87E-045.49E-041.45E-03 + 70L21500.002.89E-061.66E-056.53E-051.91E-041.64E-055.34E-051.33E-042.98E-04 + 70L3 9.941.39E+018.30E+042.19E+076.69E+085.60E+001.05E+051.69E+082.89E+10 + 70L3 10.641.14E+015.89E+041.46E+075.22E+084.54E+007.50E+041.07E+081.71E+10 + 70L3 11.948.19E+003.29E+047.28E+063.08E+083.19E+004.22E+044.90E+077.08E+09 + 70L3 15.144.06E+009.90E+031.75E+068.43E+071.54E+001.29E+049.92E+061.16E+09 + 70L3 18.942.06E+003.20E+034.54E+052.18E+077.74E-014.23E+032.23E+062.12E+08 + 70L3 24.009.88E-019.69E+021.09E+054.87E+063.75E-011.30E+034.65E+053.57E+07 + 70L3 30.004.88E-013.15E+022.85E+041.14E+061.89E-014.29E+021.08E+056.75E+06 + 70L3 38.002.28E-019.59E+016.86E+032.38E+059.20E-021.33E+022.33E+041.18E+06 + 70L3 50.009.27E-022.43E+011.32E+033.78E+043.99E-023.40E+014.03E+031.59E+05 + 70L3 63.004.31E-027.64E+003.30E+027.93E+031.98E-021.08E+019.40E+023.02E+04 + 70L3 80.001.94E-022.33E+007.89E+011.57E+039.61E-033.33E+002.13E+025.55E+03 + 70L3 93.001.17E-021.10E+003.21E+015.68E+026.11E-031.59E+008.46E+011.93E+03 + 70L3 110.006.63E-034.83E-011.18E+011.82E+023.69E-036.97E-013.06E+016.06E+02 + 70L3 133.003.51E-031.90E-013.85E+005.05E+012.09E-032.76E-019.80E+001.66E+02 + 70L3 160.001.89E-037.72E-021.30E+001.46E+011.20E-031.12E-013.29E+004.79E+01 + 70L3 225.006.12E-041.50E-021.78E-011.51E+004.40E-042.18E-024.58E-015.12E+00 + 70L3 310.002.18E-043.34E-032.88E-021.88E-011.73E-044.79E-037.54E-026.71E-01 + 70L3 400.009.90E-051.05E-037.05E-033.75E-028.37E-051.47E-031.87E-021.40E-01 + 70L3 510.004.79E-053.63E-041.93E-038.54E-034.25E-054.89E-045.08E-033.29E-02 + 70L3 740.001.67E-057.87E-052.97E-041.01E-031.56E-059.73E-057.38E-043.88E-03 + 70L31000.007.68E-062.54E-057.43E-052.10E-047.31E-062.88E-051.65E-047.42E-04 + 70L31500.002.93E-066.54E-061.42E-053.13E-052.86E-066.76E-062.45E-058.88E-05 + 70M1 3.404.86E+002.16E+041.37E+061.59E+082.01E+037.17E+064.61E+096.52E+11 + 70M1 4.403.62E+007.46E+035.55E+053.53E+079.30E+022.02E+068.65E+081.09E+11 + 70M1 6.402.10E+001.49E+031.53E+055.39E+063.03E+023.24E+057.90E+077.96E+09 + 70M1 10.409.13E-011.61E+022.12E+049.57E+057.09E+013.10E+043.86E+062.72E+08 + 70M1 17.403.38E-011.20E+011.83E+039.07E+041.53E+012.70E+031.75E+058.08E+06 + 70M1 27.001.34E-011.11E+001.81E+028.45E+034.13E+003.53E+021.38E+044.34E+05 + 70M1 42.005.03E-021.59E-011.51E+016.25E+021.12E+004.85E+011.18E+032.51E+04 + 70M1 54.002.81E-028.20E-023.64E+001.34E+025.34E-011.62E+013.03E+025.18E+03 + 70M1 72.001.42E-024.51E-027.78E-012.27E+012.30E-014.75E+006.69E+018.88E+02 + 70M1 105.005.62E-031.97E-021.44E-012.44E+007.72E-021.01E+009.93E+009.50E+01 + 70M1 150.002.32E-038.26E-034.10E-023.75E-012.79E-022.47E-011.78E+001.26E+01 + 70M1 280.005.05E-041.63E-035.92E-032.63E-024.95E-032.50E-021.09E-014.72E-01 + 70M1 500.001.36E-043.89E-041.13E-033.40E-031.06E-033.67E-031.09E-023.17E-02 + 70M2 3.171.13E+014.07E+067.92E+091.82E+122.58E+022.57E+054.28E+071.86E+09 + 70M2 4.177.44E+001.04E+061.33E+092.71E+111.14E+027.43E+041.10E+077.02E+08 + 70M2 6.173.57E+001.47E+051.08E+081.75E+103.50E+011.30E+041.53E+061.09E+08 + 70M2 10.171.18E+001.23E+044.67E+065.41E+087.79E+001.50E+031.26E+057.81E+06 + 70M2 17.173.16E-019.22E+021.87E+051.47E+071.62E+001.67E+029.55E+034.44E+05 + 70M2 27.009.16E-021.00E+021.23E+046.73E+054.19E-012.63E+011.06E+033.62E+04 + 70M2 42.002.54E-021.18E+019.03E+023.46E+041.12E-014.50E+001.27E+023.13E+03 + 70M2 54.001.19E-023.55E+002.10E+026.51E+035.34E-021.67E+003.84E+017.82E+02 + 70M2 72.004.94E-039.11E-014.02E+019.82E+022.28E-025.45E-019.92E+001.61E+02 + 70M2 105.001.52E-031.58E-014.80E+008.56E+017.56E-031.28E-011.72E+002.07E+01 + 70M2 150.004.98E-043.11E-026.77E-019.00E+002.68E-033.35E-023.37E-013.07E+00 + 70M2 280.007.21E-052.05E-032.56E-022.08E-014.44E-043.41E-032.15E-021.23E-01 + 70M2 500.001.29E-051.94E-041.53E-038.24E-038.58E-054.51E-041.92E-037.45E-03 + 70M3 2.952.92E+018.86E+061.88E+104.51E+125.12E+011.17E+072.12E+113.99E+14 + 70M3 3.951.73E+012.05E+062.76E+095.70E+112.12E+012.72E+062.81E+103.29E+13 + 70M3 5.957.32E+002.61E+051.94E+083.11E+106.11E+003.52E+051.66E+091.04E+12 + 70M3 9.952.14E+001.96E+047.30E+068.20E+081.28E+002.70E+044.92E+071.48E+10 + 70M3 16.955.15E-011.34E+032.60E+051.95E+072.53E-011.89E+031.34E+062.04E+08 + 70M3 27.001.34E-011.30E+021.47E+047.63E+056.15E-021.86E+026.08E+045.34E+06 + 70M3 42.003.47E-021.42E+019.91E+023.57E+041.61E-022.07E+013.42E+031.86E+05 + 70M3 54.001.57E-024.05E+002.16E+026.30E+037.56E-035.95E+006.85E+022.87E+04 + 70M3 72.006.19E-039.70E-013.81E+018.69E+023.18E-031.44E+001.12E+023.53E+03 + 70M3 105.001.80E-031.50E-013.98E+006.56E+011.03E-032.24E-011.09E+012.42E+02 + 70M3 150.005.56E-042.63E-024.82E-015.83E+003.57E-043.94E-021.28E+002.07E+01 + 70M3 280.007.37E-051.34E-031.30E-029.27E-025.74E-051.98E-033.50E-023.44E-01 + 70M3 500.001.25E-059.94E-055.42E-042.45E-031.12E-051.36E-041.47E-039.79E-03 + 70M4 2.587.78E+012.75E+051.67E+102.26E+141.57E+013.69E+053.49E+092.85E+12 + 70M4 3.582.84E+015.16E+041.67E+091.29E+135.45E+007.15E+043.81E+082.42E+11 + 70M4 5.586.58E+005.37E+037.36E+072.73E+111.27E+007.68E+031.96E+078.58E+09 + 70M4 9.589.86E-013.44E+021.63E+062.65E+092.08E-015.04E+025.57E+051.52E+08 + 70M4 16.581.27E-012.10E+013.42E+042.57E+073.18E-023.17E+011.60E+042.65E+06 + 70M4 27.001.87E-021.71E+001.11E+034.41E+055.75E-032.70E+007.17E+027.57E+04 + 70M4 42.003.11E-031.75E-015.03E+011.16E+041.18E-032.90E-014.48E+013.14E+03 + 70M4 54.001.10E-034.77E-028.77E+001.51E+034.74E-048.19E-029.41E+005.23E+02 + 70M4 72.003.29E-041.07E-021.20E+001.48E+021.65E-041.93E-021.60E+006.82E+01 + 70M4 105.006.69E-051.53E-039.17E-027.36E+004.05E-052.91E-031.61E-014.87E+00 + 70M4 150.001.48E-052.47E-048.41E-034.54E-011.06E-054.93E-041.88E-024.17E-01 + 70M4 280.001.12E-061.10E-051.51E-044.08E-031.00E-062.28E-054.80E-046.35E-03 + 70M4 500.001.11E-077.05E-074.71E-066.59E-051.12E-071.38E-061.78E-051.53E-04 + 70M5 2.531.18E+023.33E+053.04E+103.69E+149.43E+003.26E+041.82E+109.87E+14 + 70M5 3.534.16E+016.03E+042.93E+091.99E+133.22E+006.21E+031.77E+095.03E+13 + 70M5 5.539.37E+006.05E+031.24E+083.99E+117.44E-016.61E+027.67E+079.20E+11 + 70M5 9.531.36E+003.74E+022.66E+063.68E+091.23E-014.38E+011.70E+067.41E+09 + 70M5 16.531.69E-012.21E+015.40E+043.40E+071.91E-022.84E+003.63E+045.91E+07 + 70M5 27.002.41E-021.73E+001.67E+035.47E+053.51E-032.51E-011.18E+038.44E+05 + 70M5 42.003.92E-031.71E-017.34E+011.37E+047.44E-042.88E-025.45E+011.95E+04 + 70M5 54.001.37E-034.54E-021.24E+011.71E+033.04E-048.48E-039.49E+002.36E+03 + 70M5 72.004.06E-049.87E-031.64E+001.60E+021.08E-042.11E-031.29E+002.15E+02 + 70M5 105.008.15E-051.34E-031.16E-017.30E+002.77E-053.48E-049.53E-029.81E+00 + 70M5 150.001.79E-052.04E-049.77E-034.05E-017.59E-066.52E-058.25E-035.58E-01 + 70M5 280.001.39E-068.48E-061.41E-042.82E-038.09E-073.84E-061.23E-044.26E-03 + 70M5 500.001.59E-075.45E-073.50E-063.34E-051.11E-073.28E-073.02E-065.50E-05 + 70N+ 50.001.97E-023.12E+002.02E+028.01E+032.17E-011.00E+014.98E+022.02E+04 + 70N+ 70.007.69E-036.08E-012.69E+017.47E+028.01E-022.24E+006.66E+011.78E+03 + 70N+ 100.002.92E-031.15E-013.42E+006.66E+012.89E-024.95E-018.92E+001.56E+02 + 70N+ 150.009.01E-041.77E-023.36E-014.54E+008.50E-039.21E-021.03E+001.18E+01 + 70N+ 200.004.40E-045.34E-037.07E-027.20E-013.97E-033.06E-022.36E-011.90E+00 + 70N+ 500.004.57E-051.92E-049.00E-043.99E-033.33E-041.23E-034.13E-031.42E-02 + 71K 64.318.98E-011.37E+004.03E-013.22E-021.13E+011.24E+022.41E+021.00E+02 + 71K 65.018.74E-011.41E+005.41E-018.63E-021.10E+011.19E+022.44E+021.33E+02 + 71K 66.318.32E-011.46E+007.98E-012.51E-011.03E+011.11E+022.47E+021.91E+02 + 71K 69.517.39E-011.53E+001.39E+009.59E-019.03E+009.31E+012.43E+023.11E+02 + 71K 73.316.45E-011.54E+001.97E+002.13E+007.73E+007.67E+012.29E+024.08E+02 + 71K 77.005.70E-011.50E+002.37E+003.34E+006.70E+006.42E+012.10E+024.58E+02 + 71K 83.004.70E-011.39E+002.73E+005.03E+005.39E+004.89E+011.77E+024.77E+02 + 71K 91.003.71E-011.20E+002.83E+006.40E+004.13E+003.50E+011.37E+024.35E+02 + 71K 103.002.69E-019.42E-012.57E+006.87E+002.89E+002.24E+019.30E+013.35E+02 + 71K 116.001.98E-017.18E-012.13E+006.24E+002.06E+001.46E+016.20E+012.38E+02 + 71K 133.001.38E-015.10E-011.59E+004.95E+001.39E+008.99E+003.80E+011.50E+02 + 71K 146.001.08E-013.99E-011.27E+004.02E+001.07E+006.46E+002.69E+011.06E+02 + 71K 163.008.15E-022.96E-019.46E-013.03E+007.85E-014.40E+001.78E+016.92E+01 + 71K 186.005.79E-022.05E-016.52E-012.08E+005.43E-012.78E+001.08E+014.07E+01 + 71K 215.003.99E-021.37E-014.27E-011.34E+003.63E-011.70E+006.25E+002.24E+01 + 71K 280.002.06E-026.54E-021.94E-015.76E-011.77E-017.06E-012.32E+007.47E+00 + 71K 365.001.09E-023.21E-028.89E-022.45E-018.70E-023.02E-018.77E-012.51E+00 + 71K 450.006.73E-031.88E-024.93E-021.27E-015.02E-021.58E-014.18E-011.08E+00 + 71K 560.004.18E-031.12E-022.75E-026.58E-022.86E-028.23E-021.98E-014.65E-01 + 71K 790.002.08E-035.24E-031.17E-022.50E-021.20E-023.09E-026.54E-021.33E-01 + 71K 1050.001.22E-032.94E-036.14E-031.20E-025.93E-031.43E-022.77E-025.09E-02 + 71K 1300.008.31E-041.95E-033.88E-037.13E-033.53E-038.25E-031.51E-022.59E-02 + 71K 1550.006.15E-041.40E-032.69E-034.73E-032.32E-035.29E-039.30E-031.53E-02 + 71L1 11.872.83E+006.25E+022.41E+041.16E+052.37E+027.16E+043.97E+064.89E+07 + 71L1 12.572.58E+004.67E+022.22E+041.95E+052.00E+025.46E+042.91E+064.25E+07 + 71L1 13.872.18E+002.79E+021.71E+042.60E+051.49E+023.43E+041.70E+063.00E+07 + 71L1 17.071.51E+009.07E+017.73E+031.96E+058.03E+011.30E+045.46E+051.16E+07 + 71L1 20.871.03E+002.86E+013.04E+039.51E+044.41E+015.11E+031.83E+054.01E+06 + 71L1 24.007.81E-011.24E+011.49E+035.05E+042.91E+012.69E+038.59E+041.85E+06 + 71L1 30.004.93E-013.19E+004.46E+021.60E+041.50E+019.79E+022.59E+045.17E+05 + 71L1 38.002.96E-018.79E-011.16E+024.20E+037.47E+003.41E+027.37E+031.31E+05 + 71L1 50.001.59E-013.57E-012.30E+018.07E+023.33E+001.03E+021.76E+032.63E+04 + 71L1 63.009.30E-022.34E-016.07E+001.93E+021.69E+003.84E+015.37E+026.84E+03 + 71L1 80.005.25E-021.54E-011.77E+004.43E+018.42E-011.42E+011.62E+021.73E+03 + 71L1 93.003.64E-021.15E-019.11E-011.81E+015.44E-017.68E+007.69E+017.34E+02 + 71L1 110.002.41E-027.99E-024.80E-017.00E+003.36E-013.92E+003.41E+012.86E+02 + 71L1 133.001.51E-025.13E-022.54E-012.60E+001.95E-011.86E+001.38E+011.00E+02 + 71L1 160.009.52E-033.26E-021.43E-011.09E+001.16E-019.16E-015.87E+003.70E+01 + 71L1 225.004.12E-031.36E-025.17E-022.63E-014.47E-022.61E-011.28E+006.26E+00 + 71L1 310.001.91E-035.95E-032.02E-027.94E-021.86E-028.49E-023.32E-011.29E+00 + 71L1 400.001.07E-033.16E-039.77E-033.27E-029.44E-033.63E-021.20E-013.93E-01 + 71L1 510.006.27E-041.77E-035.03E-031.47E-025.00E-031.68E-024.80E-021.35E-01 + 71L1 740.002.94E-047.81E-041.94E-034.73E-031.93E-035.49E-031.30E-022.98E-02 + 71L11000.001.67E-044.22E-049.55E-042.04E-039.11E-042.35E-034.92E-039.87E-03 + 71L11500.008.20E-051.94E-043.93E-047.33E-043.39E-048.06E-041.49E-032.58E-03 + 71L2 11.356.01E+003.37E+047.24E+061.83E+082.67E+012.93E+035.36E+042.32E+05 + 71L2 12.055.11E+002.50E+045.13E+061.53E+082.23E+012.33E+035.05E+043.96E+05 + 71L2 13.353.85E+001.50E+042.83E+061.02E+081.64E+011.57E+034.09E+045.37E+05 + 71L2 16.552.11E+005.17E+038.15E+053.47E+078.55E+006.85E+022.12E+044.35E+05 + 71L2 20.351.16E+001.86E+032.46E+051.07E+074.58E+003.08E+029.80E+032.33E+05 + 71L2 24.007.16E-018.28E+029.42E+044.00E+062.79E+001.62E+025.03E+031.23E+05 + 71L2 30.003.67E-012.78E+022.58E+041.01E+061.42E+006.83E+011.96E+034.62E+04 + 71L2 38.001.78E-018.81E+016.59E+032.28E+057.02E-012.73E+016.95E+021.50E+04 + 71L2 50.007.60E-022.35E+011.36E+033.96E+043.10E-019.48E+002.04E+023.81E+03 + 71L2 63.003.67E-027.81E+003.65E+029.03E+031.56E-013.90E+007.18E+011.16E+03 + 71L2 80.001.72E-022.53E+009.46E+011.97E+037.70E-021.57E+002.43E+013.35E+02 + 71L2 93.001.06E-021.25E+004.08E+017.55E+024.95E-028.86E-011.23E+011.52E+02 + 71L2 110.006.21E-035.78E-011.61E+012.61E+023.02E-024.70E-015.75E+006.32E+01 + 71L2 133.003.39E-032.43E-015.68E+007.97E+011.74E-022.31E-012.45E+002.34E+01 + 71L2 160.001.88E-031.05E-012.09E+002.54E+011.02E-021.16E-011.07E+008.96E+00 + 71L2 225.006.45E-042.35E-023.46E-013.24E+003.80E-033.34E-022.40E-011.56E+00 + 71L2 310.002.41E-046.02E-036.78E-025.01E-011.52E-031.06E-026.08E-023.17E-01 + 71L2 400.001.12E-042.12E-031.95E-021.20E-017.37E-044.36E-032.10E-029.25E-02 + 71L2 510.005.53E-058.11E-046.23E-033.26E-023.71E-041.90E-037.88E-032.97E-02 + 71L2 740.001.97E-052.01E-041.19E-034.97E-031.31E-045.51E-041.86E-035.68E-03 + 71L21000.008.75E-066.96E-053.42E-041.21E-035.67E-052.10E-046.12E-041.61E-03 + 71L21500.003.18E-061.85E-057.27E-052.13E-041.84E-055.98E-051.49E-043.32E-04 + 71L3 10.241.31E+017.71E+041.96E+075.79E+085.46E+001.01E+051.57E+082.60E+10 + 71L3 10.941.09E+015.52E+041.32E+074.55E+084.46E+007.29E+041.01E+081.57E+10 + 71L3 12.247.85E+003.13E+046.71E+062.73E+083.16E+004.16E+044.71E+076.62E+09 + 71L3 15.443.95E+009.68E+031.66E+067.74E+071.55E+001.31E+049.87E+061.13E+09 + 71L3 19.242.03E+003.19E+034.43E+052.06E+077.88E-014.37E+032.27E+062.12E+08 + 71L3 24.001.03E+001.05E+031.17E+055.11E+064.00E-011.45E+035.27E+054.03E+07 + 71L3 30.005.07E-013.40E+023.06E+041.20E+062.02E-014.79E+021.22E+057.60E+06 + 71L3 38.002.37E-011.04E+027.37E+032.52E+059.83E-021.48E+022.63E+041.32E+06 + 71L3 50.009.69E-022.62E+011.42E+034.01E+044.26E-023.79E+014.54E+031.79E+05 + 71L3 63.004.51E-028.25E+003.54E+028.44E+032.11E-021.21E+011.06E+033.38E+04 + 71L3 80.002.03E-022.52E+008.48E+011.68E+031.03E-023.71E+002.39E+026.21E+03 + 71L3 93.001.23E-021.19E+003.45E+016.05E+026.53E-031.77E+009.50E+012.16E+03 + 71L3 110.006.98E-035.21E-011.27E+011.95E+023.94E-037.77E-013.43E+016.77E+02 + 71L3 133.003.70E-032.05E-014.14E+005.40E+012.23E-033.07E-011.10E+011.85E+02 + 71L3 160.002.00E-038.35E-021.39E+001.56E+011.29E-031.25E-013.68E+005.34E+01 + 71L3 225.006.49E-041.62E-021.92E-011.62E+004.71E-042.42E-025.11E-015.71E+00 + 71L3 310.002.32E-043.61E-033.11E-022.02E-011.85E-045.31E-038.40E-027.46E-01 + 71L3 400.001.05E-041.13E-037.60E-034.03E-028.95E-051.63E-032.08E-021.56E-01 + 71L3 510.005.11E-053.92E-042.08E-039.19E-034.54E-055.40E-045.65E-033.65E-02 + 71L3 740.001.78E-058.47E-053.20E-041.09E-031.67E-051.07E-048.18E-044.30E-03 + 71L31000.008.13E-062.73E-058.00E-052.26E-047.79E-063.15E-051.82E-048.21E-04 + 71L31500.003.12E-067.01E-061.52E-053.38E-053.04E-067.32E-062.70E-059.81E-05 + 71M1 3.494.63E+002.11E+041.36E+061.40E+082.04E+037.06E+064.42E+096.08E+11 + 71M1 4.493.48E+007.45E+035.54E+053.37E+079.65E+022.05E+068.62E+081.06E+11 + 71M1 6.492.04E+001.54E+031.54E+055.39E+063.20E+023.39E+058.19E+078.10E+09 + 71M1 10.499.00E-011.72E+022.18E+049.57E+057.62E+013.33E+044.13E+062.87E+08 + 71M1 17.493.37E-011.35E+011.95E+039.36E+041.66E+012.95E+031.91E+058.72E+06 + 71M1 27.001.36E-011.33E+002.02E+029.14E+034.56E+003.95E+021.54E+044.83E+05 + 71M1 42.005.13E-021.76E-011.73E+016.93E+021.23E+005.40E+011.31E+032.78E+04 + 71M1 54.002.87E-028.50E-024.21E+001.50E+025.90E-011.80E+013.36E+025.73E+03 + 71M1 72.001.45E-024.53E-028.97E-012.58E+012.54E-015.27E+007.41E+019.80E+02 + 71M1 105.005.79E-031.98E-021.60E-012.77E+008.52E-021.11E+001.10E+011.05E+02 + 71M1 150.002.41E-038.38E-034.38E-024.20E-013.08E-022.73E-011.96E+001.38E+01 + 71M1 280.005.27E-041.69E-036.24E-032.85E-025.45E-032.75E-021.20E-015.17E-01 + 71M1 500.001.43E-044.08E-041.19E-033.64E-031.17E-034.02E-031.19E-023.46E-02 + 71M2 3.261.07E+013.87E+067.30E+091.63E+122.63E+022.53E+054.07E+071.67E+09 + 71M2 4.267.15E+001.02E+061.28E+092.54E+111.18E+027.52E+041.08E+076.59E+08 + 71M2 6.263.50E+001.50E+051.09E+081.73E+103.72E+011.36E+041.56E+061.07E+08 + 71M2 10.261.18E+001.29E+044.85E+065.54E+088.43E+001.60E+031.32E+057.99E+06 + 71M2 17.263.23E-019.85E+021.99E+051.54E+071.77E+001.80E+021.02E+044.65E+05 + 71M2 27.009.56E-021.10E+021.35E+047.33E+054.66E-012.90E+011.16E+033.92E+04 + 71M2 42.002.68E-021.30E+019.90E+023.77E+041.25E-014.96E+001.39E+023.40E+03 + 71M2 54.001.26E-023.90E+002.30E+027.10E+035.95E-021.84E+004.21E+018.49E+02 + 71M2 72.005.25E-031.00E+004.41E+011.07E+032.55E-026.03E-011.09E+011.75E+02 + 71M2 105.001.63E-031.73E-015.28E+009.37E+018.45E-031.42E-011.89E+002.26E+01 + 71M2 150.005.35E-043.43E-027.46E-019.87E+003.00E-033.71E-023.71E-013.36E+00 + 71M2 280.007.80E-052.27E-032.83E-022.29E-014.99E-043.80E-032.38E-021.35E-01 + 71M2 500.001.42E-052.16E-041.70E-039.13E-039.67E-055.04E-042.14E-038.27E-03 + 71M3 3.022.80E+018.49E+061.76E+104.10E+125.10E+011.16E+072.05E+113.79E+14 + 71M3 4.021.68E+012.03E+062.69E+095.41E+112.15E+012.79E+062.84E+103.29E+13 + 71M3 6.027.22E+002.66E+051.96E+083.07E+106.32E+003.72E+051.75E+091.09E+12 + 71M3 10.022.15E+002.05E+047.59E+068.38E+081.34E+002.92E+045.36E+071.61E+10 + 71M3 17.025.25E-011.43E+032.75E+052.04E+072.68E-012.08E+031.49E+062.26E+08 + 71M3 27.001.39E-011.41E+021.59E+048.20E+056.61E-022.09E+026.94E+046.11E+06 + 71M3 42.003.63E-021.54E+011.07E+033.84E+041.73E-022.33E+013.89E+032.11E+05 + 71M3 54.001.64E-024.40E+002.34E+026.77E+038.13E-036.69E+007.78E+023.26E+04 + 71M3 72.006.51E-031.05E+004.13E+019.34E+023.42E-031.61E+001.27E+023.99E+03 + 71M3 105.001.90E-031.64E-014.32E+007.06E+011.11E-032.52E-011.23E+012.73E+02 + 71M3 150.005.90E-042.86E-025.22E-016.29E+003.84E-044.42E-021.45E+002.33E+01 + 71M3 280.007.84E-051.46E-031.41E-021.00E-016.18E-052.21E-033.93E-023.86E-01 + 71M3 500.001.34E-051.08E-045.89E-042.66E-031.20E-051.51E-041.64E-031.09E-02 + 71M4 2.647.52E+012.65E+051.58E+102.10E+141.58E+013.71E+053.42E+092.73E+12 + 71M4 3.642.80E+015.15E+041.66E+091.26E+135.59E+007.43E+043.91E+082.43E+11 + 71M4 5.646.68E+005.54E+037.61E+072.83E+111.33E+008.23E+032.09E+079.02E+09 + 71M4 9.641.02E+003.63E+021.74E+062.86E+092.22E-015.54E+026.12E+051.65E+08 + 71M4 16.641.34E-012.25E+013.73E+042.83E+073.44E-023.53E+011.79E+042.94E+06 + 71M4 27.002.02E-021.88E+001.24E+035.00E+056.32E-033.06E+008.19E+028.61E+04 + 71M4 42.003.37E-031.93E-015.64E+011.32E+041.30E-033.30E-015.11E+013.57E+03 + 71M4 54.001.19E-035.27E-029.83E+001.71E+035.23E-049.31E-021.07E+015.94E+02 + 71M4 72.003.59E-041.19E-021.35E+001.68E+021.82E-042.19E-021.82E+007.76E+01 + 71M4 105.007.32E-051.70E-031.03E-018.34E+004.49E-053.32E-031.83E-015.54E+00 + 71M4 150.001.63E-052.76E-049.45E-035.15E-011.18E-055.62E-042.15E-024.76E-01 + 71M4 280.001.23E-061.24E-051.70E-044.63E-031.12E-062.60E-055.49E-047.25E-03 + 71M4 500.001.18E-078.01E-075.30E-067.49E-051.25E-071.58E-062.04E-051.76E-04 + 71M5 2.591.14E+023.18E+052.88E+103.42E+149.42E+003.21E+041.78E+109.46E+14 + 71M5 3.594.12E+015.95E+042.91E+091.95E+133.29E+006.31E+031.82E+095.12E+13 + 71M5 5.599.49E+006.16E+031.29E+084.13E+117.77E-016.93E+028.23E+079.89E+11 + 71M5 9.591.40E+003.91E+022.86E+063.96E+091.30E-014.70E+011.89E+068.29E+09 + 71M5 16.591.78E-012.35E+015.92E+043.73E+072.05E-023.09E+004.10E+046.75E+07 + 71M5 27.002.59E-021.88E+001.88E+036.18E+053.83E-032.78E-011.37E+039.93E+05 + 71M5 42.004.25E-031.86E-018.26E+011.55E+048.13E-043.19E-026.31E+012.29E+04 + 71M5 54.001.49E-034.94E-021.40E+011.93E+033.33E-049.38E-031.10E+012.76E+03 + 71M5 72.004.42E-041.08E-021.84E+001.81E+021.19E-042.33E-031.49E+002.52E+02 + 71M5 105.008.92E-051.46E-031.31E-018.24E+003.04E-053.85E-041.10E-011.14E+01 + 71M5 150.001.98E-052.25E-041.10E-024.57E-018.35E-067.21E-059.52E-036.49E-01 + 71M5 280.001.54E-069.30E-061.58E-043.18E-038.92E-074.25E-061.41E-044.93E-03 + 71M5 500.001.72E-075.96E-073.91E-063.77E-051.23E-073.64E-073.43E-066.34E-05 + 71N+ 50.002.06E-023.45E+002.24E+028.99E+032.41E-011.12E+015.69E+022.34E+04 + 71N+ 70.008.07E-036.74E-012.99E+018.35E+028.91E-022.51E+007.58E+012.05E+03 + 71N+ 100.003.07E-031.27E-013.79E+007.41E+013.21E-025.54E-011.01E+011.78E+02 + 71N+ 150.009.37E-041.92E-023.68E-014.98E+009.34E-031.02E-011.15E+001.32E+01 + 71N+ 200.004.63E-045.84E-037.84E-028.00E-014.40E-033.40E-022.64E-012.14E+00 + 71N+ 500.004.86E-052.08E-049.91E-044.42E-033.68E-041.36E-034.58E-031.58E-02 + 72K 66.358.43E-011.24E+003.50E-012.65E-021.13E+011.18E+022.22E+028.91E+01 + 72K 67.058.22E-011.27E+004.67E-017.04E-021.09E+011.14E+022.24E+021.17E+02 + 72K 68.357.83E-011.32E+006.85E-012.03E-011.03E+011.06E+022.27E+021.67E+02 + 72K 71.556.98E-011.38E+001.19E+007.77E-019.03E+008.97E+012.25E+022.72E+02 + 72K 75.356.12E-011.39E+001.69E+001.74E+007.77E+007.43E+012.12E+023.59E+02 + 72K 79.005.43E-011.36E+002.04E+002.73E+006.77E+006.26E+011.96E+024.06E+02 + 72K 85.004.51E-011.27E+002.38E+004.18E+005.48E+004.80E+011.66E+024.27E+02 + 72K 93.003.58E-011.11E+002.49E+005.41E+004.23E+003.47E+011.31E+023.96E+02 + 72K 105.002.62E-018.77E-012.30E+005.93E+002.98E+002.24E+018.98E+013.11E+02 + 72K 118.001.93E-016.76E-011.93E+005.50E+002.13E+001.48E+016.06E+012.24E+02 + 72K 135.001.36E-014.85E-011.47E+004.45E+001.45E+009.16E+003.76E+011.43E+02 + 72K 148.001.07E-013.82E-011.18E+003.66E+001.12E+006.62E+002.68E+011.03E+02 + 72K 165.008.11E-022.86E-018.92E-012.80E+008.25E-014.53E+001.79E+016.77E+01 + 72K 188.005.79E-022.00E-016.23E-011.96E+005.73E-012.89E+001.10E+014.03E+01 + 72K 215.004.11E-021.38E-014.24E-011.32E+003.95E-011.83E+006.62E+002.33E+01 + 72K 280.002.13E-026.66E-021.95E-015.76E-011.92E-017.59E-012.46E+007.84E+00 + 72K 365.001.13E-023.29E-029.07E-022.49E-019.43E-023.25E-019.34E-012.64E+00 + 72K 460.006.65E-031.84E-024.78E-021.22E-015.14E-021.59E-014.13E-011.05E+00 + 72K 570.004.19E-031.11E-022.72E-026.46E-022.95E-028.41E-022.00E-014.61E-01 + 72K 800.002.11E-035.32E-031.19E-022.53E-021.25E-023.21E-026.72E-021.35E-01 + 72K 1050.001.27E-033.08E-036.45E-031.26E-026.39E-031.54E-022.97E-025.42E-02 + 72K 1300.008.69E-042.04E-034.08E-037.50E-033.80E-038.86E-031.61E-022.77E-02 + 72K 1550.006.43E-041.47E-032.84E-034.99E-032.49E-035.68E-039.96E-031.63E-02 + 72L1 12.272.65E+005.81E+022.14E+049.61E+042.36E+026.80E+043.62E+064.28E+07 + 72L1 12.972.42E+004.39E+021.98E+041.64E+052.00E+025.23E+042.68E+063.76E+07 + 72L1 14.272.06E+002.68E+021.54E+042.21E+051.50E+023.33E+041.59E+062.69E+07 + 72L1 17.471.44E+009.03E+017.24E+031.74E+058.23E+011.29E+045.28E+051.07E+07 + 72L1 21.279.94E-012.97E+012.93E+038.76E+044.58E+015.19E+031.81E+053.83E+06 + 72L1 25.007.22E-011.14E+011.30E+034.24E+042.84E+012.48E+037.56E+041.57E+06 + 72L1 31.004.63E-013.15E+004.09E+021.41E+041.50E+019.35E+022.38E+044.60E+05 + 72L1 39.002.82E-019.09E-011.12E+023.88E+037.60E+003.37E+027.05E+031.21E+05 + 72L1 51.001.55E-013.57E-012.34E+017.85E+023.45E+001.05E+021.74E+032.54E+04 + 72L1 64.009.12E-022.27E-016.42E+001.95E+021.77E+003.97E+015.43E+026.78E+03 + 72L1 81.005.20E-021.49E-011.89E+004.63E+018.92E-011.48E+011.66E+021.75E+03 + 72L1 94.003.63E-021.11E-019.69E-011.92E+015.80E-018.09E+007.98E+017.51E+02 + 72L1 111.002.42E-027.80E-025.04E-017.51E+003.59E-014.15E+003.56E+012.96E+02 + 72L1 134.001.52E-025.06E-022.64E-012.80E+002.10E-011.98E+001.46E+011.05E+02 + 72L1 160.009.81E-033.29E-021.50E-011.20E+001.27E-011.00E+006.40E+004.02E+01 + 72L1 225.004.26E-031.39E-025.39E-022.83E-014.90E-022.85E-011.40E+006.79E+00 + 72L1 310.001.98E-036.15E-032.11E-028.47E-022.04E-029.27E-023.61E-011.40E+00 + 72L1 400.001.11E-033.28E-031.03E-023.48E-021.03E-023.96E-021.31E-014.26E-01 + 72L1 510.006.55E-041.86E-035.30E-031.56E-025.46E-031.83E-025.22E-021.46E-01 + 72L1 740.003.08E-048.22E-042.06E-035.04E-032.10E-035.97E-031.41E-023.23E-02 + 72L11000.001.75E-044.46E-041.01E-032.18E-039.90E-042.56E-035.34E-031.07E-02 + 72L11500.008.62E-052.05E-044.18E-047.82E-043.67E-048.74E-041.61E-032.79E-03 + 72L2 11.745.64E+003.10E+046.38E+061.55E+082.67E+012.78E+034.87E+041.97E+05 + 72L2 12.444.82E+002.32E+044.58E+061.31E+082.24E+012.23E+034.61E+043.38E+05 + 72L2 13.743.67E+001.42E+042.58E+068.84E+071.66E+011.52E+033.78E+044.67E+05 + 72L2 16.942.05E+005.02E+037.67E+053.13E+078.81E+006.79E+022.01E+043.93E+05 + 72L2 20.741.14E+001.85E+032.37E+051.00E+074.79E+003.11E+029.52E+032.17E+05 + 72L2 25.006.61E-017.38E+028.03E+043.28E+062.73E+001.51E+024.49E+031.06E+05 + 72L2 31.003.48E-012.58E+022.31E+048.72E+051.43E+006.55E+011.81E+034.12E+04 + 72L2 39.001.73E-018.47E+016.15E+032.06E+057.20E-012.70E+016.64E+021.39E+04 + 72L2 51.007.52E-022.33E+011.32E+033.74E+043.24E-019.60E+002.01E+023.66E+03 + 72L2 64.003.69E-027.91E+003.63E+028.79E+031.65E-014.02E+007.22E+011.14E+03 + 72L2 81.001.75E-022.61E+009.61E+011.96E+038.25E-021.64E+002.49E+013.37E+02 + 72L2 94.001.09E-021.31E+004.19E+017.63E+025.33E-029.34E-011.27E+011.55E+02 + 72L2 111.006.42E-036.06E-011.67E+012.68E+023.28E-024.99E-016.01E+006.50E+01 + 72L2 134.003.53E-032.57E-015.96E+008.26E+011.89E-022.47E-012.58E+002.44E+01 + 72L2 160.002.01E-031.16E-012.29E+002.77E+011.13E-021.28E-011.17E+009.72E+00 + 72L2 225.006.93E-042.59E-023.80E-013.54E+004.24E-033.69E-022.63E-011.70E+00 + 72L2 310.002.60E-046.63E-037.46E-025.49E-011.70E-031.18E-026.69E-023.47E-01 + 72L2 400.001.21E-042.34E-032.15E-021.32E-018.25E-044.83E-032.32E-021.01E-01 + 72L2 510.006.01E-058.96E-046.88E-033.59E-024.16E-042.11E-038.71E-033.27E-02 + 72L2 740.002.14E-052.22E-041.32E-035.49E-031.47E-046.15E-042.06E-036.28E-03 + 72L21000.009.61E-067.72E-053.80E-041.34E-036.37E-052.34E-046.81E-041.79E-03 + 72L21500.003.48E-062.05E-058.09E-052.37E-042.07E-056.70E-051.66E-043.69E-04 + 72L3 10.561.24E+017.13E+041.74E+074.96E+085.31E+009.71E+041.45E+082.32E+10 + 72L3 11.261.03E+015.16E+041.19E+073.94E+084.36E+007.06E+049.41E+071.42E+10 + 72L3 12.567.50E+002.97E+046.16E+062.41E+083.11E+004.09E+044.49E+076.14E+09 + 72L3 15.763.84E+009.43E+031.58E+067.06E+071.55E+001.32E+049.76E+061.09E+09 + 72L3 19.562.00E+003.17E+034.30E+051.94E+078.00E-014.49E+032.31E+062.11E+08 + 72L3 25.009.36E-019.19E+029.81E+044.12E+063.77E-011.32E+034.55E+053.33E+07 + 72L3 31.004.75E-013.11E+022.69E+041.02E+061.95E-014.54E+021.11E+056.70E+06 + 72L3 39.002.27E-019.81E+016.75E+032.24E+059.70E-021.45E+022.51E+041.23E+06 + 72L3 51.009.48E-022.56E+011.35E+033.72E+044.29E-023.83E+014.51E+031.73E+05 + 72L3 64.004.48E-028.24E+003.46E+028.06E+032.15E-021.25E+011.08E+033.38E+04 + 72L3 81.002.05E-022.55E+008.45E+011.64E+031.06E-023.89E+002.49E+026.36E+03 + 72L3 94.001.24E-021.22E+003.48E+016.00E+026.75E-031.87E+009.97E+012.24E+03 + 72L3 111.007.12E-035.38E-011.30E+011.95E+024.10E-038.28E-013.63E+017.10E+02 + 72L3 134.003.80E-032.14E-014.26E+005.48E+012.33E-033.30E-011.17E+011.96E+02 + 72L3 160.002.10E-039.01E-021.50E+001.67E+011.38E-031.39E-014.11E+005.95E+01 + 72L3 225.006.87E-041.75E-022.07E-011.73E+005.03E-042.69E-025.69E-016.35E+00 + 72L3 310.002.46E-043.90E-033.35E-022.16E-011.98E-045.89E-039.35E-028.29E-01 + 72L3 400.001.12E-041.22E-038.19E-034.33E-029.56E-051.80E-032.31E-021.73E-01 + 72L3 510.005.40E-054.23E-042.24E-039.88E-034.85E-055.95E-046.27E-034.05E-02 + 72L3 740.001.88E-059.12E-053.45E-041.18E-031.78E-051.17E-049.06E-044.77E-03 + 72L31000.008.59E-062.93E-058.61E-052.43E-048.29E-063.44E-052.01E-049.09E-04 + 72L31500.003.33E-067.50E-061.64E-053.64E-053.23E-067.92E-062.96E-051.08E-04 + 72M1 3.604.35E+002.02E+041.31E+061.18E+082.06E+036.81E+064.11E+095.46E+11 + 72M1 4.603.30E+007.33E+035.41E+053.13E+079.91E+022.05E+068.39E+081.00E+11 + 72M1 6.601.97E+001.57E+031.52E+055.30E+063.36E+023.51E+058.35E+078.06E+09 + 72M1 10.608.83E-011.83E+022.22E+049.46E+058.16E+013.55E+044.37E+062.98E+08 + 72M1 17.603.35E-011.51E+012.05E+039.57E+041.80E+013.20E+032.06E+059.31E+06 + 72M1 27.001.38E-011.57E+002.24E+029.85E+035.04E+004.40E+021.72E+045.37E+05 + 72M1 42.005.22E-021.97E-011.98E+017.65E+021.36E+006.01E+011.45E+033.08E+04 + 72M1 54.002.93E-028.94E-024.86E+001.68E+026.51E-012.00E+013.73E+026.33E+03 + 72M1 72.001.49E-024.58E-021.03E+002.92E+012.80E-015.84E+008.19E+011.08E+03 + 72M1 105.005.96E-032.00E-021.78E-013.16E+009.40E-021.23E+001.21E+011.15E+02 + 72M1 150.002.49E-038.51E-034.71E-024.71E-013.40E-023.01E-012.15E+001.52E+01 + 72M1 280.005.49E-041.75E-036.58E-033.08E-025.99E-033.03E-021.31E-015.66E-01 + 72M1 500.001.49E-044.29E-041.27E-033.91E-031.28E-034.41E-031.30E-023.77E-02 + 72M2 3.361.00E+013.63E+066.62E+091.42E+122.66E+022.45E+053.80E+071.47E+09 + 72M2 4.366.83E+009.93E+051.22E+092.34E+111.22E+027.53E+041.05E+076.09E+08 + 72M2 6.363.41E+001.52E+051.08E+081.68E+103.93E+011.40E+041.57E+061.04E+08 + 72M2 10.361.18E+001.34E+045.02E+065.62E+089.09E+001.70E+031.38E+058.10E+06 + 72M2 17.363.28E-011.05E+032.10E+051.61E+071.94E+001.94E+021.08E+044.84E+05 + 72M2 27.009.96E-021.21E+021.47E+047.96E+055.19E-013.20E+011.26E+034.23E+04 + 72M2 42.002.81E-021.42E+011.09E+034.10E+041.39E-015.47E+001.52E+023.68E+03 + 72M2 54.001.33E-024.28E+002.52E+027.73E+036.64E-022.03E+004.60E+019.21E+02 + 72M2 72.005.57E-031.10E+004.84E+011.17E+032.85E-026.65E-011.19E+011.91E+02 + 72M2 105.001.74E-031.91E-015.80E+001.02E+029.45E-031.57E-012.07E+002.46E+01 + 72M2 150.005.74E-043.78E-028.21E-011.08E+013.36E-034.11E-024.09E-013.68E+00 + 72M2 280.008.46E-052.51E-033.13E-022.52E-015.61E-044.23E-032.63E-021.49E-01 + 72M2 500.001.55E-052.39E-041.89E-031.01E-021.09E-045.64E-042.38E-039.16E-03 + 72M3 3.112.67E+018.02E+061.61E+103.63E+125.03E+011.14E+071.94E+113.50E+14 + 72M3 4.111.62E+011.98E+062.57E+095.03E+112.17E+012.83E+062.82E+103.22E+13 + 72M3 6.117.10E+002.69E+051.95E+083.00E+106.50E+003.90E+051.83E+091.13E+12 + 72M3 10.112.15E+002.14E+047.83E+068.49E+081.40E+003.15E+045.80E+071.74E+10 + 72M3 17.115.34E-011.51E+032.89E+052.11E+072.84E-012.28E+031.65E+062.50E+08 + 72M3 27.001.44E-011.53E+021.73E+048.79E+057.09E-022.35E+027.91E+046.98E+06 + 72M3 42.003.79E-021.67E+011.16E+034.12E+041.86E-022.61E+014.42E+032.40E+05 + 72M3 54.001.72E-024.78E+002.53E+027.26E+038.73E-037.51E+008.82E+023.70E+04 + 72M3 72.006.85E-031.14E+004.47E+011.00E+033.68E-031.81E+001.44E+024.52E+03 + 72M3 105.002.00E-031.78E-014.67E+007.59E+011.19E-032.83E-011.39E+013.08E+02 + 72M3 150.006.23E-043.11E-025.66E-016.77E+004.12E-044.95E-021.63E+002.63E+01 + 72M3 280.008.36E-051.59E-031.53E-021.08E-016.64E-052.47E-034.41E-024.33E-01 + 72M3 500.001.43E-051.17E-046.39E-042.88E-031.29E-051.68E-041.84E-031.22E-02 + 72M4 2.727.16E+012.49E+051.44E+101.86E+141.56E+013.64E+053.23E+092.50E+12 + 72M4 3.722.74E+015.04E+041.59E+091.20E+135.66E+007.57E+043.90E+082.36E+11 + 72M4 5.726.71E+005.63E+037.72E+072.86E+111.38E+008.71E+032.19E+079.28E+09 + 72M4 9.721.05E+003.81E+021.84E+063.03E+092.36E-016.03E+026.64E+051.77E+08 + 72M4 16.721.41E-012.41E+014.03E+043.09E+073.70E-023.91E+011.98E+043.22E+06 + 72M4 27.002.18E-022.07E+001.39E+035.66E+056.93E-033.48E+009.33E+029.77E+04 + 72M4 42.003.66E-032.13E-016.31E+011.49E+041.43E-033.75E-015.82E+014.05E+03 + 72M4 54.001.30E-035.82E-021.10E+011.93E+035.77E-041.06E-011.22E+016.74E+02 + 72M4 72.003.91E-041.32E-021.51E+001.90E+022.01E-042.49E-022.08E+008.80E+01 + 72M4 105.008.08E-051.89E-031.15E-019.44E+004.97E-053.77E-032.09E-016.30E+00 + 72M4 150.001.81E-053.08E-041.06E-025.83E-011.31E-056.40E-042.45E-025.41E-01 + 72M4 280.001.35E-061.39E-051.90E-045.25E-031.24E-062.96E-056.27E-048.26E-03 + 72M4 500.001.38E-078.99E-075.96E-068.51E-051.39E-071.80E-062.33E-052.01E-04 + 72M5 2.661.08E+022.96E+052.65E+103.05E+149.29E+003.09E+041.70E+108.73E+14 + 72M5 3.664.03E+015.77E+042.83E+091.87E+133.33E+006.31E+031.83E+095.06E+13 + 72M5 5.669.55E+006.20E+031.32E+084.20E+118.04E-017.18E+028.69E+071.04E+12 + 72M5 9.661.45E+004.05E+023.03E+064.20E+091.37E-015.01E+012.07E+069.15E+09 + 72M5 16.661.87E-012.48E+016.43E+044.06E+072.19E-023.34E+004.60E+047.65E+07 + 72M5 27.002.79E-022.03E+002.11E+036.98E+054.17E-033.07E-011.58E+031.17E+06 + 72M5 42.004.59E-032.02E-019.27E+011.75E+048.88E-043.52E-027.29E+012.68E+04 + 72M5 54.001.61E-035.38E-021.57E+012.18E+033.64E-041.04E-021.27E+013.23E+03 + 72M5 72.004.79E-041.18E-022.07E+002.04E+021.30E-042.58E-031.72E+002.94E+02 + 72M5 105.009.71E-051.60E-031.47E-019.28E+003.34E-054.25E-041.27E-011.33E+01 + 72M5 150.002.15E-052.47E-041.23E-025.15E-019.18E-067.96E-051.10E-027.54E-01 + 72M5 280.001.66E-061.02E-051.78E-043.58E-039.83E-074.70E-061.62E-045.70E-03 + 72M5 500.001.86E-076.56E-074.36E-064.24E-051.35E-074.02E-073.90E-067.30E-05 + 72N+ 50.002.17E-023.82E+002.48E+021.00E+042.71E-011.27E+016.52E+022.71E+04 + 72N+ 70.008.52E-037.45E-013.32E+019.27E+021.00E-012.84E+008.65E+012.35E+03 + 72N+ 100.003.24E-031.41E-014.21E+008.22E+013.60E-026.24E-011.14E+012.03E+02 + 72N+ 150.001.07E-032.23E-024.21E-015.60E+001.12E-021.18E-011.29E+001.43E+01 + 72N+ 200.004.93E-046.42E-038.71E-028.89E-014.94E-033.82E-022.98E-012.42E+00 + 72N+ 500.005.19E-052.26E-041.10E-034.92E-034.11E-041.52E-035.11E-031.77E-02 + 73K 68.427.92E-011.11E+003.05E-012.19E-021.12E+011.13E+022.04E+027.93E+01 + 73K 69.127.73E-011.14E+004.05E-015.78E-021.09E+011.09E+022.07E+021.04E+02 + 73K 70.427.38E-011.19E+005.90E-011.66E-011.03E+011.02E+022.09E+021.47E+02 + 73K 73.626.60E-011.24E+001.02E+006.33E-019.05E+008.64E+012.08E+022.40E+02 + 73K 77.425.81E-011.26E+001.45E+001.42E+007.81E+007.20E+011.97E+023.17E+02 + 73K 81.005.18E-011.24E+001.76E+002.24E+006.85E+006.12E+011.83E+023.60E+02 + 73K 87.004.32E-011.16E+002.07E+003.48E+005.57E+004.73E+011.57E+023.84E+02 + 73K 95.003.46E-011.02E+002.20E+004.58E+004.32E+003.44E+011.24E+023.61E+02 + 73K 107.002.55E-018.17E-012.06E+005.14E+003.07E+002.25E+018.67E+012.88E+02 + 73K 120.001.89E-016.36E-011.76E+004.85E+002.21E+001.49E+015.92E+012.11E+02 + 73K 137.001.34E-014.62E-011.36E+004.01E+001.52E+009.33E+003.72E+011.37E+02 + 73K 150.001.06E-013.66E-011.10E+003.35E+001.17E+006.79E+002.68E+019.93E+01 + 73K 167.008.07E-022.76E-018.42E-012.60E+008.67E-014.67E+001.80E+016.63E+01 + 73K 190.005.79E-021.95E-015.96E-011.84E+006.04E-012.99E+001.11E+013.99E+01 + 73K 215.004.23E-021.39E-014.21E-011.29E+004.29E-011.96E+007.00E+002.43E+01 + 73K 280.002.19E-026.77E-021.97E-015.77E-012.08E-018.17E-012.61E+008.22E+00 + 73K 365.001.17E-023.37E-029.26E-022.53E-011.02E-013.49E-019.95E-012.79E+00 + 73K 460.006.90E-031.90E-024.92E-021.25E-015.56E-021.71E-014.41E-011.11E+00 + 73K 570.004.35E-031.15E-022.82E-026.69E-023.19E-029.04E-022.13E-014.89E-01 + 73K 800.002.20E-035.56E-031.24E-022.64E-021.35E-023.45E-027.19E-021.44E-01 + 73K 1050.001.33E-033.23E-036.77E-031.32E-026.88E-031.66E-023.17E-025.78E-02 + 73K 1300.009.07E-042.14E-034.30E-037.90E-034.08E-039.52E-031.73E-022.95E-02 + 73K 1550.006.71E-041.54E-032.99E-035.26E-032.67E-036.10E-031.07E-021.74E-02 + 73L1 12.682.48E+005.41E+021.90E+048.01E+042.35E+026.47E+043.31E+063.76E+07 + 73L1 13.382.28E+004.13E+021.77E+041.37E+052.01E+025.02E+042.47E+063.32E+07 + 73L1 14.681.95E+002.56E+021.40E+041.89E+051.52E+023.24E+041.49E+062.42E+07 + 73L1 17.881.38E+008.98E+016.78E+031.54E+058.44E+011.29E+045.10E+059.96E+06 + 73L1 21.689.58E-013.06E+012.83E+038.05E+044.76E+015.27E+031.79E+053.66E+06 + 73L1 25.007.24E-011.34E+011.40E+034.33E+043.12E+012.74E+038.29E+041.67E+06 + 73L1 31.004.66E-013.77E+004.48E+021.48E+041.65E+011.04E+032.61E+044.94E+05 + 73L1 39.002.85E-011.06E+001.25E+024.15E+038.35E+003.72E+027.73E+031.31E+05 + 73L1 51.001.57E-013.80E-012.67E+018.58E+023.79E+001.15E+021.90E+032.75E+04 + 73L1 64.009.29E-022.28E-017.38E+002.17E+021.95E+004.37E+015.94E+027.35E+03 + 73L1 81.005.31E-021.48E-012.15E+005.21E+019.80E-011.63E+011.82E+021.90E+03 + 73L1 94.003.71E-021.10E-011.08E+002.16E+016.37E-018.89E+008.72E+018.15E+02 + 73L1 111.002.48E-027.78E-025.51E-018.45E+003.94E-014.56E+003.89E+013.21E+02 + 73L1 134.001.56E-025.08E-022.82E-013.12E+002.30E-012.17E+001.59E+011.14E+02 + 73L1 160.001.01E-023.32E-021.59E-011.32E+001.39E-011.10E+006.98E+004.36E+01 + 73L1 225.004.40E-031.42E-025.64E-023.06E-015.37E-023.12E-011.52E+007.38E+00 + 73L1 310.002.06E-036.35E-032.21E-029.06E-022.24E-021.01E-013.93E-011.52E+00 + 73L1 400.001.16E-033.41E-031.08E-023.71E-021.13E-024.32E-021.42E-014.62E-01 + 73L1 510.006.85E-041.94E-035.59E-031.66E-025.97E-031.99E-025.67E-021.59E-01 + 73L1 740.003.23E-048.65E-042.18E-035.37E-032.29E-036.50E-031.53E-023.50E-02 + 73L11000.001.84E-044.71E-041.08E-032.33E-031.08E-032.78E-035.79E-031.16E-02 + 73L11500.009.06E-052.17E-044.45E-048.35E-043.98E-049.48E-041.74E-033.02E-03 + 73L2 12.145.30E+002.86E+045.65E+061.31E+082.66E+012.64E+034.43E+041.68E+05 + 73L2 12.844.56E+002.16E+044.09E+061.12E+082.25E+012.14E+034.22E+042.90E+05 + 73L2 14.143.50E+001.34E+042.35E+067.70E+071.68E+011.48E+033.49E+044.07E+05 + 73L2 17.341.98E+004.88E+037.22E+052.83E+079.09E+006.73E+021.91E+043.54E+05 + 73L2 21.141.13E+001.84E+032.29E+059.32E+065.00E+003.14E+029.25E+032.02E+05 + 73L2 25.006.89E-018.05E+028.67E+043.45E+063.02E+001.64E+024.74E+031.08E+05 + 73L2 31.003.63E-012.81E+022.50E+049.24E+051.58E+007.14E+011.92E+034.27E+04 + 73L2 39.001.81E-019.24E+016.66E+032.20E+057.97E-012.94E+017.10E+021.46E+04 + 73L2 51.007.92E-022.54E+011.43E+034.01E+043.59E-011.05E+012.16E+023.87E+03 + 73L2 64.003.90E-028.64E+003.94E+029.45E+031.83E-014.40E+007.80E+011.22E+03 + 73L2 81.001.85E-022.85E+001.05E+022.11E+039.16E-021.80E+002.70E+013.61E+02 + 73L2 94.001.16E-021.43E+004.56E+018.25E+025.92E-021.02E+001.38E+011.67E+02 + 73L2 111.006.84E-036.64E-011.82E+012.90E+023.65E-025.48E-016.53E+007.01E+01 + 73L2 134.003.77E-032.81E-016.51E+008.97E+012.11E-022.72E-012.81E+002.64E+01 + 73L2 160.002.15E-031.27E-012.50E+003.01E+011.26E-021.41E-011.28E+001.05E+01 + 73L2 225.007.44E-042.84E-024.16E-013.86E+004.73E-034.08E-022.89E-011.86E+00 + 73L2 310.002.79E-047.30E-038.21E-026.01E-011.90E-031.30E-027.36E-023.79E-01 + 73L2 400.001.31E-042.57E-032.37E-021.45E-019.23E-045.36E-032.56E-021.11E-01 + 73L2 510.006.50E-059.88E-047.59E-033.95E-024.66E-042.34E-039.63E-033.60E-02 + 73L2 740.002.34E-052.46E-041.46E-036.07E-031.65E-046.85E-042.29E-036.94E-03 + 73L21000.001.06E-058.55E-054.22E-041.49E-037.15E-052.62E-047.57E-041.98E-03 + 73L21500.003.80E-062.27E-059.00E-052.63E-042.33E-057.50E-051.85E-044.11E-04 + 73L3 10.881.16E+016.61E+041.56E+074.28E+085.16E+009.33E+041.35E+082.08E+10 + 73L3 11.589.76E+004.83E+041.07E+073.42E+084.27E+006.84E+048.83E+071.29E+10 + 73L3 12.887.17E+002.82E+045.66E+062.12E+083.08E+004.02E+044.30E+075.71E+09 + 73L3 16.083.73E+009.18E+031.49E+066.45E+071.56E+001.33E+049.66E+061.05E+09 + 73L3 19.881.97E+003.15E+034.17E+051.82E+078.12E-014.62E+032.34E+062.10E+08 + 73L3 25.009.70E-019.91E+021.05E+054.31E+064.03E-011.48E+035.14E+053.75E+07 + 73L3 31.004.93E-013.35E+022.88E+041.07E+062.09E-015.06E+021.25E+057.52E+06 + 73L3 39.002.37E-011.06E+027.24E+032.36E+051.03E-011.62E+022.83E+041.38E+06 + 73L3 51.009.90E-022.76E+011.45E+033.94E+044.58E-024.27E+015.07E+031.94E+05 + 73L3 64.004.69E-028.88E+003.71E+028.56E+032.30E-021.39E+011.21E+033.78E+04 + 73L3 81.002.14E-022.75E+009.07E+011.75E+031.13E-024.34E+002.79E+027.11E+03 + 73L3 94.001.30E-021.32E+003.74E+016.39E+027.21E-032.08E+001.12E+022.50E+03 + 73L3 111.007.49E-035.81E-011.39E+012.08E+024.37E-039.22E-014.06E+017.92E+02 + 73L3 134.004.00E-032.31E-014.57E+005.85E+012.49E-033.67E-011.31E+012.19E+02 + 73L3 160.002.22E-039.72E-021.61E+001.78E+011.47E-031.55E-014.58E+006.63E+01 + 73L3 225.007.25E-041.89E-022.23E-011.86E+005.37E-042.99E-026.34E-017.05E+00 + 73L3 310.002.60E-044.21E-033.60E-022.32E-012.11E-046.52E-031.04E-019.20E-01 + 73L3 400.001.19E-041.32E-038.82E-034.64E-021.02E-041.99E-032.56E-021.92E-01 + 73L3 510.005.75E-054.55E-042.41E-031.06E-025.17E-056.56E-046.95E-034.48E-02 + 73L3 740.002.01E-059.81E-053.72E-041.27E-031.90E-051.29E-041.00E-035.27E-03 + 73L31000.009.14E-063.14E-059.26E-052.62E-048.82E-063.75E-052.22E-041.00E-03 + 73L31500.003.54E-068.02E-061.75E-053.91E-053.43E-068.57E-063.25E-051.19E-04 + 73M1 3.714.11E+001.95E+041.27E+061.02E+082.08E+036.62E+063.87E+094.97E+11 + 73M1 4.713.15E+007.26E+035.34E+052.93E+071.02E+032.05E+068.22E+089.56E+10 + 73M1 6.711.91E+001.60E+031.51E+055.24E+063.54E+023.64E+058.55E+078.06E+09 + 73M1 10.718.66E-011.95E+022.26E+049.41E+058.74E+013.79E+044.63E+063.11E+08 + 73M1 17.713.33E-011.68E+012.17E+039.81E+041.95E+013.48E+032.23E+059.96E+06 + 73M1 27.001.40E-011.86E+002.49E+021.06E+045.56E+004.91E+021.92E+045.97E+05 + 73M1 42.005.31E-022.24E-012.25E+018.42E+021.50E+006.68E+011.62E+033.41E+04 + 73M1 54.002.99E-029.54E-025.58E+001.87E+027.18E-012.22E+014.13E+027.00E+03 + 73M1 72.001.52E-024.68E-021.19E+003.30E+013.09E-016.47E+009.06E+011.19E+03 + 73M1 105.006.13E-032.02E-021.99E-013.59E+001.04E-011.36E+001.33E+011.27E+02 + 73M1 150.002.57E-038.65E-035.09E-025.29E-013.74E-023.32E-012.37E+001.66E+01 + 73M1 280.005.71E-041.81E-036.97E-033.35E-026.59E-033.32E-021.44E-016.19E-01 + 73M1 500.001.57E-044.50E-041.34E-034.20E-031.40E-034.83E-031.42E-024.12E-02 + 73M2 3.479.45E+003.41E+065.99E+091.25E+122.70E+022.38E+053.56E+071.29E+09 + 73M2 4.476.51E+009.65E+051.15E+092.15E+111.27E+027.54E+041.01E+075.62E+08 + 73M2 6.473.32E+001.53E+051.07E+081.63E+104.16E+011.45E+041.58E+061.01E+08 + 73M2 10.471.17E+001.40E+045.18E+065.70E+089.81E+001.80E+031.43E+058.19E+06 + 73M2 17.473.34E-011.11E+032.22E+051.67E+072.12E+002.09E+021.14E+045.03E+05 + 73M2 27.001.04E-011.32E+021.61E+048.65E+055.77E-013.53E+011.38E+034.56E+04 + 73M2 42.002.95E-021.56E+011.19E+034.46E+041.55E-016.03E+001.66E+023.98E+03 + 73M2 54.001.41E-024.70E+002.76E+028.41E+037.40E-022.24E+005.03E+019.98E+02 + 73M2 72.005.90E-031.21E+005.31E+011.28E+033.18E-027.34E-011.30E+012.07E+02 + 73M2 105.001.85E-032.10E-016.37E+001.12E+021.06E-021.74E-012.27E+002.68E+01 + 73M2 150.006.15E-044.17E-029.03E-011.19E+013.76E-034.56E-024.50E-014.03E+00 + 73M2 280.009.14E-052.77E-033.46E-022.78E-016.29E-044.71E-032.91E-021.64E-01 + 73M2 500.001.68E-052.65E-042.10E-031.12E-021.23E-046.30E-042.65E-031.01E-02 + 73M3 3.192.54E+017.58E+061.47E+103.22E+124.96E+011.11E+071.84E+113.23E+14 + 73M3 4.191.56E+011.94E+062.45E+094.67E+112.18E+012.86E+062.80E+103.14E+13 + 73M3 6.196.96E+002.72E+051.95E+082.92E+106.68E+004.08E+051.90E+091.16E+12 + 73M3 10.192.15E+002.22E+048.07E+068.58E+081.47E+003.39E+046.26E+071.87E+10 + 73M3 17.195.43E-011.60E+033.04E+052.19E+072.99E-012.50E+031.82E+062.76E+08 + 73M3 27.001.50E-011.66E+021.87E+049.42E+057.61E-022.64E+029.00E+047.97E+06 + 73M3 42.003.95E-021.82E+011.26E+034.41E+042.00E-022.93E+015.02E+032.73E+05 + 73M3 54.001.80E-025.19E+002.74E+027.79E+039.36E-038.43E+009.99E+024.19E+04 + 73M3 72.007.19E-031.24E+004.83E+011.08E+033.94E-032.03E+001.62E+025.11E+03 + 73M3 105.002.11E-031.93E-015.05E+008.16E+011.28E-033.17E-011.57E+013.47E+02 + 73M3 150.006.60E-043.38E-026.12E-017.28E+004.43E-045.54E-021.83E+002.95E+01 + 73M3 280.008.87E-051.72E-031.66E-021.17E-017.12E-052.75E-034.94E-024.84E-01 + 73M3 500.001.52E-051.27E-046.92E-043.11E-031.38E-051.87E-042.05E-031.37E-02 + 73M4 2.796.83E+012.35E+051.31E+101.66E+141.54E+013.57E+053.07E+092.30E+12 + 73M4 3.792.68E+014.95E+041.54E+091.14E+135.74E+007.73E+043.90E+082.31E+11 + 73M4 5.796.75E+005.73E+037.83E+072.90E+111.43E+009.22E+032.29E+079.54E+09 + 73M4 9.791.09E+003.99E+021.94E+063.21E+092.50E-016.56E+027.20E+051.89E+08 + 73M4 16.791.48E-012.57E+014.36E+043.36E+073.97E-024.33E+012.19E+043.53E+06 + 73M4 27.002.34E-022.27E+001.55E+036.40E+057.59E-033.94E+001.06E+031.11E+05 + 73M4 42.003.96E-032.34E-017.05E+011.69E+041.57E-034.25E-016.62E+014.59E+03 + 73M4 54.001.41E-036.41E-021.23E+012.18E+036.35E-041.20E-011.39E+017.63E+02 + 73M4 72.004.27E-041.46E-021.69E+002.14E+022.22E-042.83E-022.36E+009.98E+01 + 73M4 105.008.80E-052.10E-031.29E-011.07E+015.50E-054.29E-032.37E-017.14E+00 + 73M4 150.001.98E-053.42E-041.19E-026.59E-011.45E-057.27E-042.79E-026.14E-01 + 73M4 280.001.53E-061.55E-052.13E-045.94E-031.38E-063.36E-057.14E-049.40E-03 + 73M4 500.001.55E-071.00E-066.70E-069.64E-051.55E-072.04E-062.66E-052.29E-04 + 73M5 2.731.03E+022.77E+052.45E+102.74E+149.16E+002.98E+041.62E+108.10E+14 + 73M5 3.733.94E+015.61E+042.75E+091.78E+133.36E+006.32E+031.84E+095.01E+13 + 73M5 5.739.59E+006.25E+031.35E+084.26E+118.32E-017.44E+029.18E+071.10E+12 + 73M5 9.731.49E+004.19E+023.22E+064.46E+091.45E-015.33E+012.27E+061.01E+10 + 73M5 16.731.96E-012.61E+016.99E+044.42E+072.34E-023.61E+005.15E+048.66E+07 + 73M5 27.002.99E-022.20E+002.37E+037.87E+054.53E-033.39E-011.83E+031.37E+06 + 73M5 42.004.95E-032.19E-011.04E+021.97E+049.68E-043.88E-028.41E+013.13E+04 + 73M5 54.001.74E-035.84E-021.76E+012.45E+033.97E-041.14E-021.46E+013.76E+03 + 73M5 72.005.20E-041.28E-022.32E+002.29E+021.42E-042.84E-031.99E+003.42E+02 + 73M5 105.001.06E-041.75E-031.65E-011.04E+013.65E-054.69E-041.46E-011.54E+01 + 73M5 150.002.38E-052.70E-041.39E-025.80E-011.01E-058.78E-051.26E-028.74E-01 + 73M5 280.001.85E-061.13E-051.99E-044.03E-031.08E-065.18E-061.86E-046.58E-03 + 73M5 500.002.03E-077.40E-074.87E-064.78E-051.49E-074.44E-074.43E-068.39E-05 + 73N+ 50.002.27E-024.22E+002.75E+021.11E+043.01E-011.43E+017.43E+023.11E+04 + 73N+ 70.008.91E-038.23E-013.67E+011.03E+031.11E-013.18E+009.81E+012.69E+03 + 73N+ 100.003.40E-031.55E-014.65E+009.08E+014.00E-026.97E-011.29E+012.30E+02 + 73N+ 150.001.12E-032.45E-024.66E-016.20E+001.25E-021.32E-011.44E+001.61E+01 + 73N+ 200.005.19E-047.03E-039.64E-029.84E-015.48E-034.25E-023.33E-012.71E+00 + 73N+ 500.005.49E-052.45E-041.21E-035.46E-034.55E-041.68E-035.66E-031.96E-02 + 74K 70.527.45E-011.01E+002.66E-011.82E-021.11E+011.08E+021.89E+027.07E+01 + 74K 71.227.28E-011.03E+003.51E-014.77E-021.08E+011.04E+021.91E+029.20E+01 + 74K 72.526.96E-011.07E+005.09E-011.36E-011.03E+019.74E+011.93E+021.30E+02 + 74K 75.726.24E-011.12E+008.80E-015.17E-019.07E+008.34E+011.92E+022.11E+02 + 74K 79.525.52E-011.14E+001.25E+001.17E+007.86E+006.99E+011.83E+022.80E+02 + 74K 84.004.81E-011.11E+001.58E+002.02E+006.71E+005.74E+011.68E+023.27E+02 + 74K 90.004.04E-011.04E+001.84E+003.04E+005.50E+004.48E+011.44E+023.45E+02 + 74K 98.003.25E-019.25E-011.94E+003.97E+004.30E+003.30E+011.15E+023.25E+02 + 74K 110.002.42E-017.48E-011.83E+004.46E+003.09E+002.18E+018.14E+012.62E+02 + 74K 123.001.82E-015.88E-011.58E+004.26E+002.24E+001.47E+015.63E+011.94E+02 + 74K 140.001.30E-014.32E-011.24E+003.58E+001.55E+009.28E+003.58E+011.28E+02 + 74K 153.001.04E-013.45E-011.01E+003.02E+001.21E+006.80E+002.60E+019.39E+01 + 74K 170.007.91E-022.63E-017.84E-012.38E+008.97E-014.71E+001.77E+016.34E+01 + 74K 193.005.72E-021.87E-015.62E-011.71E+006.29E-013.05E+001.11E+013.87E+01 + 74K 220.004.11E-021.32E-013.92E-011.19E+004.37E-011.95E+006.79E+002.29E+01 + 74K 285.002.17E-026.57E-021.89E-015.47E-012.15E-018.29E-012.60E+008.00E+00 + 74K 370.001.17E-023.34E-029.10E-022.47E-011.07E-013.60E-011.01E+002.78E+00 + 74K 460.007.16E-031.96E-025.06E-021.29E-016.03E-021.84E-014.70E-011.18E+00 + 74K 570.004.52E-031.20E-022.92E-026.93E-023.46E-029.73E-022.28E-015.19E-01 + 74K 800.002.29E-035.80E-031.30E-022.76E-021.46E-023.71E-027.69E-021.53E-01 + 74K 1050.001.38E-033.38E-037.10E-031.39E-027.42E-031.78E-023.40E-026.16E-02 + 74K 1300.009.46E-042.25E-034.52E-038.31E-034.39E-031.02E-021.85E-023.15E-02 + 74K 1550.007.00E-041.62E-033.15E-035.55E-032.86E-036.55E-031.14E-021.86E-02 + 74L1 13.102.33E+005.05E+021.70E+046.70E+042.35E+026.16E+043.03E+063.31E+07 + 74L1 13.802.14E+003.89E+021.58E+041.16E+052.01E+024.82E+042.29E+062.94E+07 + 74L1 15.101.84E+002.46E+021.27E+041.61E+051.54E+023.15E+041.40E+062.17E+07 + 74L1 18.301.31E+008.93E+016.34E+031.37E+058.66E+011.28E+044.92E+059.23E+06 + 74L1 22.109.23E-013.15E+012.73E+037.40E+044.94E+015.35E+031.77E+053.49E+06 + 74L1 26.006.72E-011.25E+011.23E+033.67E+043.05E+012.54E+037.36E+041.43E+06 + 74L1 32.004.39E-013.73E+004.13E+021.31E+041.65E+019.93E+022.42E+044.42E+05 + 74L1 40.002.73E-011.10E+001.20E+023.84E+038.52E+003.68E+027.41E+031.22E+05 + 74L1 52.001.52E-013.89E-012.71E+018.34E+023.93E+001.17E+021.89E+032.65E+04 + 74L1 65.009.12E-022.26E-017.76E+002.19E+022.05E+004.51E+016.01E+027.28E+03 + 74L1 82.005.27E-021.44E-012.31E+005.42E+011.04E+001.71E+011.87E+021.92E+03 + 74L1 95.003.70E-021.08E-011.16E+002.29E+016.78E-019.36E+009.05E+018.33E+02 + 74L1 112.002.48E-027.63E-025.86E-019.03E+004.22E-014.83E+004.07E+013.31E+02 + 74L1 135.001.58E-025.02E-022.96E-013.36E+002.47E-012.32E+001.68E+011.18E+02 + 74L1 160.001.04E-023.36E-021.69E-011.46E+001.53E-011.21E+007.62E+004.73E+01 + 74L1 225.004.55E-031.45E-025.92E-023.32E-015.89E-023.41E-011.66E+008.00E+00 + 74L1 310.002.14E-036.55E-032.32E-029.71E-022.45E-021.11E-014.28E-011.64E+00 + 74L1 400.001.20E-033.55E-031.13E-023.96E-021.24E-024.72E-021.54E-015.01E-01 + 74L1 510.007.15E-042.03E-035.91E-031.77E-026.52E-032.17E-026.16E-021.72E-01 + 74L1 740.003.38E-049.10E-042.31E-035.72E-032.50E-037.07E-031.66E-023.79E-02 + 74L11000.001.93E-044.97E-041.14E-032.48E-031.17E-033.02E-036.28E-031.25E-02 + 74L11500.009.51E-052.30E-044.74E-048.92E-044.31E-041.03E-031.89E-033.27E-03 + 74L2 12.544.98E+002.64E+045.00E+061.11E+082.67E+012.52E+034.04E+041.44E+05 + 74L2 13.244.31E+002.02E+043.66E+069.59E+072.26E+012.05E+033.86E+042.49E+05 + 74L2 14.543.34E+001.27E+042.14E+066.70E+071.71E+011.43E+033.23E+043.54E+05 + 74L2 17.741.92E+004.73E+036.78E+052.55E+079.37E+006.67E+021.81E+043.19E+05 + 74L2 21.541.10E+001.82E+032.21E+058.67E+065.22E+003.16E+028.97E+031.88E+05 + 74L2 26.006.39E-017.23E+027.45E+042.86E+062.97E+001.53E+024.26E+039.32E+04 + 74L2 32.003.45E-012.63E+022.25E+048.03E+051.59E+006.87E+011.79E+033.83E+04 + 74L2 40.001.76E-018.91E+016.23E+031.99E+058.20E-012.91E+016.80E+021.35E+04 + 74L2 52.007.85E-022.53E+011.39E+033.79E+043.76E-011.06E+012.13E+023.72E+03 + 74L2 65.003.92E-028.77E+003.92E+029.20E+031.94E-014.54E+007.85E+011.20E+03 + 74L2 82.001.89E-022.94E+001.06E+022.11E+039.82E-021.88E+002.76E+013.63E+02 + 74L2 95.001.19E-021.49E+004.68E+018.33E+026.38E-021.08E+001.43E+011.69E+02 + 74L2 112.007.07E-036.97E-011.89E+012.97E+023.95E-025.82E-016.82E+007.21E+01 + 74L2 135.003.92E-032.98E-016.82E+009.29E+012.30E-022.91E-012.97E+002.74E+01 + 74L2 160.002.30E-031.39E-012.74E+003.27E+011.41E-021.55E-011.40E+001.14E+01 + 74L2 225.007.98E-043.12E-024.56E-014.21E+005.28E-034.50E-023.16E-012.02E+00 + 74L2 310.003.01E-048.03E-039.02E-026.57E-012.12E-031.44E-028.09E-024.14E-01 + 74L2 400.001.42E-042.84E-032.61E-021.59E-011.03E-035.95E-032.82E-021.22E-01 + 74L2 510.007.05E-051.09E-038.38E-034.35E-025.23E-042.60E-031.06E-023.96E-02 + 74L2 740.002.54E-052.71E-041.62E-036.70E-031.85E-047.63E-042.53E-037.67E-03 + 74L21000.001.15E-059.46E-054.67E-041.65E-038.03E-052.92E-048.42E-042.20E-03 + 74L21500.004.16E-062.52E-051.00E-042.92E-042.62E-058.40E-052.06E-044.57E-04 + 74L3 11.211.10E+016.13E+041.39E+073.69E+085.03E+008.97E+041.25E+081.87E+10 + 74L3 11.919.25E+004.52E+049.69E+062.98E+084.18E+006.64E+048.28E+071.17E+10 + 74L3 13.216.85E+002.68E+045.20E+061.88E+083.04E+003.96E+044.11E+075.31E+09 + 74L3 16.413.62E+008.94E+031.41E+065.89E+071.56E+001.34E+049.54E+061.01E+09 + 74L3 20.211.93E+003.12E+034.04E+051.71E+078.24E-014.75E+032.37E+062.09E+08 + 74L3 26.008.89E-018.76E+028.87E+043.51E+063.81E-011.35E+034.48E+053.14E+07 + 74L3 32.004.63E-013.08E+022.54E+049.16E+052.02E-014.81E+021.15E+056.66E+06 + 74L3 40.002.27E-011.01E+026.65E+032.11E+051.02E-011.59E+022.70E+041.28E+06 + 74L3 52.009.68E-022.70E+011.38E+033.66E+044.60E-024.32E+015.03E+031.89E+05 + 74L3 65.004.65E-028.86E+003.62E+028.18E+032.34E-021.43E+011.23E+033.78E+04 + 74L3 82.002.15E-022.79E+009.04E+011.71E+031.16E-024.54E+002.89E+027.27E+03 + 74L3 95.001.32E-021.35E+003.76E+016.32E+027.44E-032.20E+001.17E+022.59E+03 + 74L3 112.007.63E-035.99E-011.42E+012.08E+024.54E-039.81E-014.30E+018.29E+02 + 74L3 135.004.10E-032.40E-014.70E+005.93E+012.60E-033.93E-011.40E+012.31E+02 + 74L3 160.002.34E-031.05E-011.73E+001.90E+011.57E-031.72E-015.11E+007.37E+01 + 74L3 225.007.65E-042.04E-022.39E-011.98E+005.73E-043.32E-027.06E-017.83E+00 + 74L3 310.002.75E-044.53E-033.87E-022.48E-012.25E-047.22E-031.16E-011.02E+00 + 74L3 400.001.25E-041.42E-039.49E-034.98E-021.09E-042.20E-032.84E-022.12E-01 + 74L3 510.006.10E-054.90E-042.60E-031.14E-025.51E-057.23E-047.70E-034.96E-02 + 74L3 740.002.13E-051.05E-044.00E-041.36E-032.02E-051.41E-041.11E-035.83E-03 + 74L31000.009.66E-063.37E-059.96E-052.82E-049.37E-064.09E-052.45E-041.11E-03 + 74L31500.003.73E-068.57E-061.88E-054.21E-053.63E-069.27E-063.57E-051.31E-04 + 74M1 3.823.88E+001.88E+041.23E+068.74E+072.10E+036.42E+063.62E+094.51E+11 + 74M1 4.823.00E+007.18E+035.25E+052.73E+071.05E+032.05E+068.02E+089.06E+10 + 74M1 6.821.84E+001.63E+031.50E+055.18E+063.72E+023.76E+058.71E+078.03E+09 + 74M1 10.828.49E-012.06E+022.31E+049.35E+059.35E+014.04E+044.89E+063.23E+08 + 74M1 17.823.31E-011.86E+012.28E+031.00E+052.11E+013.77E+032.41E+051.06E+07 + 74M1 27.001.41E-012.18E+002.75E+021.14E+046.14E+005.47E+022.14E+046.62E+05 + 74M1 42.005.40E-022.57E-012.55E+019.25E+021.66E+007.43E+011.79E+033.77E+04 + 74M1 54.003.05E-021.03E-016.40E+002.08E+027.92E-012.46E+014.58E+027.72E+03 + 74M1 72.001.56E-024.82E-021.37E+003.71E+013.41E-017.17E+001.00E+021.31E+03 + 74M1 105.006.30E-032.04E-022.24E-014.07E+001.14E-011.50E+001.47E+011.39E+02 + 74M1 150.002.65E-038.81E-035.53E-025.94E-014.13E-023.66E-012.60E+001.83E+01 + 74M1 280.005.94E-041.87E-037.39E-033.65E-027.25E-033.65E-021.57E-016.76E-01 + 74M1 500.001.64E-044.73E-041.43E-034.51E-031.54E-035.29E-031.55E-024.49E-02 + 74M2 3.578.90E+003.20E+065.44E+091.09E+122.73E+022.31E+053.33E+071.14E+09 + 74M2 4.576.22E+009.39E+051.09E+091.98E+111.31E+027.55E+049.81E+065.19E+08 + 74M2 6.573.23E+001.54E+051.06E+081.57E+104.40E+011.50E+041.59E+069.81E+07 + 74M2 10.571.17E+001.45E+045.33E+065.76E+081.06E+011.91E+031.48E+058.28E+06 + 74M2 17.573.39E-011.18E+032.34E+051.74E+072.31E+002.25E+021.21E+045.23E+05 + 74M2 27.001.08E-011.45E+021.76E+049.38E+056.42E-013.88E+011.50E+034.91E+04 + 74M2 42.003.10E-021.71E+011.30E+034.84E+041.73E-016.64E+001.81E+024.30E+03 + 74M2 54.001.48E-025.15E+003.02E+029.15E+038.25E-022.47E+005.49E+011.08E+03 + 74M2 72.006.24E-031.33E+005.81E+011.39E+033.54E-028.10E-011.43E+012.25E+02 + 74M2 105.001.97E-032.31E-016.99E+001.22E+021.18E-021.92E-012.49E+002.92E+01 + 74M2 150.006.58E-044.59E-029.93E-011.30E+014.21E-035.04E-024.94E-014.40E+00 + 74M2 280.009.86E-053.06E-033.82E-023.06E-017.07E-045.23E-033.21E-021.80E-01 + 74M2 500.001.83E-052.94E-042.33E-031.24E-021.38E-047.03E-042.94E-031.12E-02 + 74M3 3.282.42E+017.17E+061.35E+102.86E+124.89E+011.09E+071.75E+112.98E+14 + 74M3 4.281.51E+011.89E+062.34E+094.34E+112.19E+012.90E+062.78E+103.06E+13 + 74M3 6.286.83E+002.75E+051.94E+082.84E+106.85E+004.27E+051.98E+091.20E+12 + 74M3 10.282.15E+002.31E+048.30E+068.67E+081.53E+003.64E+046.75E+072.01E+10 + 74M3 17.285.51E-011.69E+033.19E+052.26E+073.16E-012.73E+032.00E+063.03E+08 + 74M3 27.001.55E-011.80E+022.02E+041.01E+068.15E-022.96E+021.02E+059.08E+06 + 74M3 42.004.11E-021.97E+011.36E+034.72E+042.14E-023.29E+015.69E+033.10E+05 + 74M3 54.001.88E-025.63E+002.95E+028.34E+031.00E-029.45E+001.13E+034.75E+04 + 74M3 72.007.54E-031.35E+005.21E+011.15E+034.23E-032.27E+001.83E+025.77E+03 + 74M3 105.002.23E-032.09E-015.46E+008.75E+011.37E-033.55E-011.77E+013.91E+02 + 74M3 150.006.97E-043.67E-026.61E-017.82E+004.74E-046.20E-022.06E+003.31E+01 + 74M3 280.009.42E-051.87E-031.79E-021.26E-017.64E-053.07E-035.53E-025.42E-01 + 74M3 500.001.62E-051.37E-047.50E-043.36E-031.48E-052.07E-042.29E-031.52E-02 + 74M4 2.876.52E+012.22E+051.20E+101.48E+141.52E+013.51E+052.92E+092.12E+12 + 74M4 3.872.62E+014.85E+041.48E+091.09E+135.80E+007.88E+043.88E+082.24E+11 + 74M4 5.876.77E+005.83E+037.92E+072.93E+111.49E+009.73E+032.40E+079.79E+09 + 74M4 9.871.12E+004.17E+022.05E+063.40E+092.64E-017.13E+027.79E+052.02E+08 + 74M4 16.871.55E-012.74E+014.70E+043.65E+074.26E-024.79E+012.42E+043.86E+06 + 74M4 27.002.52E-022.48E+001.73E+037.22E+058.29E-034.47E+001.21E+031.25E+05 + 74M4 42.004.28E-032.57E-017.87E+011.90E+041.73E-034.82E-017.51E+015.19E+03 + 74M4 54.001.53E-037.06E-021.37E+012.46E+036.97E-041.36E-011.58E+018.64E+02 + 74M4 72.004.65E-041.61E-021.89E+002.42E+022.44E-043.21E-022.68E+001.13E+02 + 74M4 105.009.61E-052.32E-031.44E-011.20E+016.06E-054.87E-032.70E-018.08E+00 + 74M4 150.002.16E-053.80E-041.32E-027.44E-011.60E-058.25E-043.17E-026.96E-01 + 74M4 280.001.65E-061.73E-052.39E-046.71E-031.53E-063.82E-058.13E-041.07E-02 + 74M4 500.001.67E-071.12E-067.50E-061.09E-041.72E-072.32E-063.03E-052.61E-04 + 74M5 2.819.89E+012.60E+052.27E+102.46E+149.04E+002.88E+041.55E+107.52E+14 + 74M5 3.813.86E+015.45E+042.68E+091.71E+133.40E+006.32E+031.85E+094.96E+13 + 74M5 5.819.63E+006.28E+031.37E+084.32E+118.60E-017.70E+029.68E+071.15E+12 + 74M5 9.811.53E+004.33E+023.41E+064.72E+091.53E-015.65E+012.48E+061.11E+10 + 74M5 16.812.05E-012.74E+017.58E+044.80E+072.50E-023.89E+005.76E+049.78E+07 + 74M5 27.003.21E-022.37E+002.65E+038.85E+054.92E-033.73E-012.11E+031.60E+06 + 74M5 42.005.33E-032.37E-011.17E+022.21E+041.05E-034.27E-029.69E+013.66E+04 + 74M5 54.001.88E-036.34E-021.98E+012.76E+034.33E-041.26E-021.69E+014.39E+03 + 74M5 72.005.63E-041.39E-022.60E+002.57E+021.55E-043.13E-032.29E+003.98E+02 + 74M5 105.001.15E-041.91E-031.85E-011.17E+013.99E-055.16E-041.68E-011.79E+01 + 74M5 150.002.58E-052.95E-041.55E-026.51E-011.10E-059.67E-051.45E-021.01E+00 + 74M5 280.002.05E-061.24E-052.23E-044.53E-031.18E-065.71E-062.12E-047.59E-03 + 74M5 500.002.23E-078.08E-075.44E-065.36E-051.63E-074.89E-075.02E-069.63E-05 + 74N+ 50.002.38E-024.67E+003.04E+021.23E+043.37E-011.62E+018.51E+023.59E+04 + 74N+ 70.009.38E-039.10E-014.06E+011.14E+031.25E-013.59E+001.12E+023.08E+03 + 74N+ 100.003.58E-031.71E-015.15E+001.00E+024.48E-027.85E-011.46E+012.62E+02 + 74N+ 150.001.19E-032.70E-025.17E-016.86E+001.40E-021.48E-011.63E+001.82E+01 + 74N+ 200.005.50E-047.73E-031.07E-011.09E+006.14E-034.76E-023.74E-013.06E+00 + 74N+ 500.005.89E-052.67E-041.34E-036.07E-035.09E-041.87E-036.32E-032.19E-02 + 75K 72.687.01E-019.09E-012.33E-011.52E-021.11E+011.03E+021.74E+026.32E+01 + 75K 73.386.86E-019.32E-013.05E-013.95E-021.08E+019.97E+011.77E+028.17E+01 + 75K 74.686.56E-019.65E-014.40E-011.12E-011.03E+019.36E+011.79E+021.15E+02 + 75K 77.885.91E-011.01E+007.58E-014.24E-019.10E+008.05E+011.78E+021.86E+02 + 75K 81.685.24E-011.03E+001.08E+009.62E-017.92E+006.78E+011.71E+022.48E+02 + 75K 86.004.61E-011.01E+001.36E+001.65E+006.82E+005.63E+011.58E+022.90E+02 + 75K 92.003.89E-019.57E-011.60E+002.54E+005.62E+004.43E+011.37E+023.10E+02 + 75K 100.003.15E-018.54E-011.72E+003.37E+004.42E+003.28E+011.10E+022.96E+02 + 75K 112.002.36E-016.98E-011.65E+003.88E+003.19E+002.19E+017.88E+012.43E+02 + 75K 125.001.78E-015.54E-011.44E+003.78E+002.33E+001.48E+015.51E+011.83E+02 + 75K 142.001.28E-014.11E-011.14E+003.24E+001.62E+009.47E+003.55E+011.23E+02 + 75K 155.001.03E-013.31E-019.48E-012.76E+001.26E+006.97E+002.60E+019.09E+01 + 75K 172.007.87E-022.54E-017.41E-012.21E+009.44E-014.86E+001.78E+016.21E+01 + 75K 195.005.72E-021.83E-015.38E-011.62E+006.64E-013.16E+001.12E+013.83E+01 + 75K 220.004.23E-021.33E-013.89E-011.16E+004.76E-012.10E+007.17E+002.38E+01 + 75K 285.002.24E-026.68E-021.90E-015.48E-012.34E-018.91E-012.76E+008.38E+00 + 75K 370.001.21E-023.43E-029.29E-022.51E-011.16E-013.87E-011.07E+002.93E+00 + 75K 460.007.42E-032.02E-025.21E-021.32E-016.53E-021.98E-015.01E-011.24E+00 + 75K 570.004.70E-031.24E-023.03E-027.17E-023.74E-021.05E-012.43E-015.50E-01 + 75K 800.002.39E-036.05E-031.36E-022.88E-021.58E-023.99E-028.22E-021.63E-01 + 75K 1050.001.44E-033.54E-037.46E-031.45E-027.99E-031.91E-023.63E-026.56E-02 + 75K 1300.009.87E-042.36E-034.75E-038.75E-034.72E-031.10E-021.98E-023.36E-02 + 75K 1550.007.31E-041.70E-033.32E-035.85E-033.07E-037.03E-031.22E-021.99E-02 + 75L1 13.532.18E+004.72E+021.52E+045.63E+042.34E+025.88E+042.78E+062.92E+07 + 75L1 14.232.01E+003.68E+021.42E+049.76E+042.02E+024.64E+042.12E+062.61E+07 + 75L1 15.531.74E+002.36E+021.16E+041.38E+051.55E+023.07E+041.32E+061.95E+07 + 75L1 18.731.25E+008.87E+015.94E+031.22E+058.89E+011.28E+044.75E+058.57E+06 + 75L1 22.538.90E-013.24E+012.64E+036.80E+045.13E+015.43E+031.75E+053.33E+06 + 75L1 26.006.73E-011.45E+011.32E+033.73E+043.35E+012.81E+038.06E+041.53E+06 + 75L1 32.004.42E-014.41E+004.51E+021.36E+041.81E+011.10E+032.65E+044.74E+05 + 75L1 40.002.76E-011.30E+001.34E+024.09E+039.36E+004.06E+028.12E+031.31E+05 + 75L1 52.001.54E-014.26E-013.07E+019.07E+024.32E+001.29E+022.06E+032.87E+04 + 75L1 65.009.27E-022.33E-018.87E+002.41E+022.25E+004.96E+016.57E+027.88E+03 + 75L1 82.005.38E-021.45E-012.63E+006.05E+011.14E+001.88E+012.04E+022.08E+03 + 75L1 95.003.78E-021.08E-011.30E+002.56E+017.46E-011.03E+019.89E+019.03E+02 + 75L1 112.002.55E-027.65E-026.47E-011.01E+014.64E-015.31E+004.45E+013.59E+02 + 75L1 135.001.62E-025.05E-023.20E-013.75E+002.72E-012.54E+001.83E+011.29E+02 + 75L1 160.001.07E-023.40E-021.80E-011.62E+001.68E-011.32E+008.31E+005.13E+01 + 75L1 225.004.70E-031.48E-026.24E-023.61E-016.46E-023.74E-011.81E+008.68E+00 + 75L1 310.002.22E-036.77E-032.44E-021.04E-012.68E-021.21E-014.65E-011.78E+00 + 75L1 400.001.26E-033.69E-031.20E-024.23E-021.35E-025.15E-021.68E-015.43E-01 + 75L1 510.007.47E-042.12E-036.24E-031.89E-027.13E-032.37E-026.69E-021.86E-01 + 75L1 740.003.54E-049.58E-042.45E-036.11E-032.73E-037.70E-031.80E-024.11E-02 + 75L11000.002.03E-045.25E-041.22E-032.65E-031.27E-033.28E-036.81E-031.35E-02 + 75L11500.001.00E-042.44E-045.04E-049.53E-044.67E-041.11E-032.05E-033.53E-03 + 75L2 12.964.69E+002.44E+044.44E+069.51E+072.67E+012.40E+033.70E+041.23E+05 + 75L2 13.664.07E+001.88E+043.29E+068.24E+072.28E+011.97E+033.54E+042.15E+05 + 75L2 14.963.18E+001.20E+041.95E+065.85E+071.73E+011.39E+033.00E+043.10E+05 + 75L2 18.161.86E+004.60E+036.38E+052.30E+079.67E+006.61E+021.72E+042.88E+05 + 75L2 21.961.08E+001.80E+032.13E+058.06E+065.46E+003.19E+028.70E+031.75E+05 + 75L2 26.006.65E-017.88E+028.04E+043.00E+063.29E+001.66E+024.48E+039.46E+04 + 75L2 32.003.60E-012.86E+022.43E+048.49E+051.77E+007.48E+011.90E+033.95E+04 + 75L2 40.001.84E-019.71E+016.74E+032.12E+059.08E-013.17E+017.27E+021.41E+04 + 75L2 52.008.25E-022.76E+011.51E+034.06E+044.17E-011.16E+012.29E+023.93E+03 + 75L2 65.004.13E-029.57E+004.25E+029.88E+032.16E-014.96E+008.46E+011.28E+03 + 75L2 82.002.00E-023.21E+001.16E+022.27E+031.09E-012.06E+002.99E+013.88E+02 + 75L2 95.001.26E-021.62E+005.10E+018.99E+027.10E-021.18E+001.55E+011.82E+02 + 75L2 112.007.51E-037.62E-012.06E+013.21E+024.39E-026.39E-017.41E+007.76E+01 + 75L2 135.004.18E-033.26E-017.44E+001.01E+022.56E-023.19E-013.23E+002.96E+01 + 75L2 160.002.46E-031.52E-012.99E+003.55E+011.57E-021.71E-011.52E+001.24E+01 + 75L2 225.008.55E-043.42E-025.00E-014.59E+005.90E-034.96E-023.46E-012.20E+00 + 75L2 310.003.24E-048.83E-039.90E-027.19E-012.37E-031.59E-028.89E-024.53E-01 + 75L2 400.001.53E-043.12E-032.87E-021.74E-011.16E-036.59E-033.11E-021.34E-01 + 75L2 510.007.67E-051.20E-039.24E-034.78E-025.86E-042.89E-031.17E-024.35E-02 + 75L2 740.002.76E-053.00E-041.79E-037.39E-032.08E-048.50E-042.81E-038.46E-03 + 75L21000.001.26E-051.05E-045.18E-041.82E-039.03E-053.26E-049.35E-042.43E-03 + 75L21500.004.55E-062.80E-051.11E-043.24E-042.94E-059.40E-052.30E-045.08E-04 + 75L3 11.531.04E+015.71E+041.25E+073.20E+084.90E+008.65E+041.16E+081.68E+10 + 75L3 12.238.79E+004.24E+048.79E+062.60E+084.09E+006.46E+047.79E+071.07E+10 + 75L3 13.536.56E+002.55E+044.79E+061.66E+083.00E+003.90E+043.94E+074.94E+09 + 75L3 16.733.52E+008.72E+031.34E+065.39E+071.56E+001.35E+049.44E+069.81E+08 + 75L3 20.531.90E+003.10E+033.92E+051.60E+078.35E-014.88E+032.41E+062.08E+08 + 75L3 26.009.20E-019.44E+029.48E+043.67E+064.06E-011.51E+035.04E+053.52E+07 + 75L3 32.004.80E-013.32E+022.72E+049.62E+052.15E-015.36E+021.29E+057.46E+06 + 75L3 40.002.36E-011.08E+027.12E+032.22E+051.09E-011.77E+023.03E+041.43E+06 + 75L3 52.001.01E-012.91E+011.47E+033.87E+044.90E-024.81E+015.65E+032.11E+05 + 75L3 65.004.86E-029.55E+003.88E+028.66E+032.49E-021.59E+011.38E+034.22E+04 + 75L3 82.002.25E-023.01E+009.68E+011.81E+031.23E-025.05E+003.24E+028.11E+03 + 75L3 95.001.38E-021.45E+004.03E+016.72E+027.93E-032.45E+001.31E+022.89E+03 + 75L3 112.008.01E-036.46E-011.52E+012.22E+024.84E-031.09E+004.80E+019.23E+02 + 75L3 135.004.31E-032.58E-015.04E+006.32E+012.77E-034.37E-011.56E+012.57E+02 + 75L3 160.002.46E-031.13E-011.86E+002.03E+011.67E-031.91E-015.70E+008.19E+01 + 75L3 225.008.09E-042.20E-022.57E-012.12E+006.10E-043.68E-027.85E-018.69E+00 + 75L3 310.002.91E-044.88E-034.16E-022.65E-012.40E-048.00E-031.28E-011.13E+00 + 75L3 400.001.32E-041.53E-031.02E-025.33E-021.16E-042.43E-033.15E-022.35E-01 + 75L3 510.006.42E-055.27E-042.79E-031.22E-025.86E-057.97E-048.53E-035.49E-02 + 75L3 740.002.26E-051.13E-044.30E-041.46E-032.14E-051.55E-041.22E-036.44E-03 + 75L31000.001.03E-053.60E-051.07E-043.03E-049.95E-064.46E-052.70E-041.22E-03 + 75L31500.003.94E-069.14E-062.01E-054.52E-053.85E-061.00E-053.92E-051.45E-04 + 75M1 3.933.67E+001.82E+041.20E+067.58E+072.12E+036.24E+063.41E+094.11E+11 + 75M1 4.932.86E+007.12E+035.18E+052.56E+071.08E+032.06E+067.84E+088.62E+10 + 75M1 6.931.78E+001.67E+031.50E+055.13E+063.91E+023.90E+058.88E+078.01E+09 + 75M1 10.938.33E-012.18E+022.35E+049.32E+051.00E+024.30E+045.17E+063.36E+08 + 75M1 17.933.29E-012.05E+012.40E+031.03E+052.29E+014.09E+032.60E+051.13E+07 + 75M1 27.001.43E-012.56E+003.04E+021.23E+046.77E+006.09E+022.39E+047.35E+05 + 75M1 42.005.49E-022.97E-012.87E+011.01E+031.83E+008.25E+011.99E+034.17E+04 + 75M1 54.003.11E-021.13E-017.30E+002.31E+028.75E-012.73E+015.08E+028.52E+03 + 75M1 72.001.59E-025.03E-021.57E+004.16E+013.77E-017.94E+001.11E+021.45E+03 + 75M1 105.006.48E-032.08E-022.52E-014.60E+001.26E-011.66E+001.62E+011.53E+02 + 75M1 150.002.74E-038.99E-036.04E-026.68E-014.55E-024.03E-012.86E+002.00E+01 + 75M1 280.006.18E-041.94E-037.87E-033.98E-027.98E-034.01E-021.73E-017.39E-01 + 75M1 500.001.72E-044.96E-041.52E-034.86E-031.69E-035.79E-031.69E-024.90E-02 + 75M2 3.688.39E+003.02E+064.95E+099.64E+112.78E+022.25E+053.13E+071.02E+09 + 75M2 4.685.94E+009.14E+051.04E+091.83E+111.36E+027.56E+049.52E+064.81E+08 + 75M2 6.683.15E+001.55E+051.06E+081.53E+104.65E+011.55E+041.60E+069.52E+07 + 75M2 10.681.16E+001.51E+045.50E+065.83E+081.14E+012.02E+031.54E+058.38E+06 + 75M2 17.683.44E-011.26E+032.47E+051.81E+072.52E+002.42E+021.28E+045.43E+05 + 75M2 27.001.12E-011.59E+021.93E+041.02E+067.14E-014.28E+011.63E+035.29E+04 + 75M2 42.003.24E-021.88E+011.42E+035.26E+041.93E-017.31E+001.97E+024.65E+03 + 75M2 54.001.56E-025.65E+003.30E+029.95E+039.20E-022.72E+006.00E+011.17E+03 + 75M2 72.006.60E-031.46E+006.36E+011.51E+033.96E-028.93E-011.56E+012.44E+02 + 75M2 105.002.10E-032.53E-017.66E+001.33E+021.32E-022.12E-012.73E+003.18E+01 + 75M2 150.007.04E-045.05E-021.09E+001.42E+014.71E-035.58E-025.43E-014.80E+00 + 75M2 280.001.06E-043.38E-034.21E-023.36E-017.93E-045.81E-033.55E-021.98E-01 + 75M2 500.001.99E-053.26E-042.58E-031.37E-021.55E-047.85E-043.26E-031.24E-02 + 75M3 3.372.31E+016.82E+061.24E+102.56E+124.84E+011.07E+071.67E+112.78E+14 + 75M3 4.371.45E+011.85E+062.25E+094.05E+112.21E+012.94E+062.77E+103.00E+13 + 75M3 6.376.71E+002.78E+051.93E+082.77E+107.03E+004.47E+052.05E+091.24E+12 + 75M3 10.372.15E+002.40E+048.54E+068.76E+081.60E+003.92E+047.27E+072.16E+10 + 75M3 17.375.59E-011.79E+033.34E+052.34E+073.33E-012.99E+032.21E+063.34E+08 + 75M3 27.001.60E-011.95E+022.18E+041.08E+068.73E-023.31E+021.16E+051.03E+07 + 75M3 42.004.28E-022.14E+011.46E+035.05E+042.29E-023.68E+016.44E+033.52E+05 + 75M3 54.001.96E-026.10E+003.19E+028.92E+031.07E-021.06E+011.28E+035.37E+04 + 75M3 72.007.90E-031.46E+005.63E+011.24E+034.53E-032.55E+002.07E+026.51E+03 + 75M3 105.002.34E-032.27E-015.89E+009.38E+011.46E-033.97E-011.99E+014.39E+02 + 75M3 150.007.37E-043.98E-027.14E-018.39E+005.08E-046.93E-022.32E+003.72E+01 + 75M3 280.001.00E-042.03E-031.94E-021.35E-018.18E-053.42E-036.19E-026.05E-01 + 75M3 500.001.73E-051.49E-048.11E-043.63E-031.58E-052.30E-042.55E-031.70E-02 + 75M4 2.956.24E+012.11E+051.11E+101.33E+141.50E+013.47E+052.79E+091.97E+12 + 75M4 3.952.56E+014.77E+041.43E+091.04E+135.88E+008.06E+043.89E+082.20E+11 + 75M4 5.956.79E+005.93E+038.03E+072.97E+111.54E+001.03E+042.51E+071.01E+10 + 75M4 9.951.15E+004.37E+022.15E+063.60E+092.79E-017.75E+028.43E+052.16E+08 + 75M4 16.951.62E-012.92E+015.07E+043.96E+074.57E-025.29E+012.67E+044.23E+06 + 75M4 27.002.70E-022.71E+001.92E+038.13E+059.05E-035.06E+001.37E+031.41E+05 + 75M4 42.004.62E-032.82E-018.77E+012.14E+041.89E-035.46E-018.51E+015.86E+03 + 75M4 54.001.65E-037.77E-021.53E+012.77E+037.64E-041.54E-011.79E+019.75E+02 + 75M4 72.005.04E-041.77E-022.10E+002.72E+022.68E-043.64E-023.04E+001.28E+02 + 75M4 105.001.05E-042.57E-031.61E-011.35E+016.68E-055.52E-033.06E-019.14E+00 + 75M4 150.002.37E-054.22E-041.48E-028.38E-011.77E-059.36E-043.60E-027.88E-01 + 75M4 280.001.82E-061.93E-052.67E-047.57E-031.69E-064.34E-059.24E-041.21E-02 + 75M4 500.001.82E-071.25E-068.39E-061.23E-041.91E-072.63E-063.45E-052.97E-04 + 75M5 2.889.46E+012.44E+052.11E+102.22E+148.93E+002.78E+041.49E+107.01E+14 + 75M5 3.883.78E+015.30E+042.61E+091.63E+133.43E+006.32E+031.86E+094.91E+13 + 75M5 5.889.66E+006.32E+031.40E+084.38E+118.88E-017.95E+021.02E+081.21E+12 + 75M5 9.881.57E+004.47E+023.61E+064.99E+091.61E-015.99E+012.71E+061.22E+10 + 75M5 16.882.15E-012.88E+018.21E+045.21E+072.66E-024.18E+006.43E+041.10E+08 + 75M5 27.003.43E-022.56E+002.96E+039.95E+055.33E-034.10E-012.42E+031.87E+06 + 75M5 42.005.73E-032.56E-011.30E+022.49E+041.14E-034.69E-021.12E+024.26E+04 + 75M5 54.002.03E-036.86E-022.21E+013.09E+034.71E-041.38E-021.94E+015.10E+03 + 75M5 72.006.09E-041.51E-022.91E+002.89E+021.69E-043.43E-032.63E+004.62E+02 + 75M5 105.001.25E-042.08E-032.07E-011.32E+014.36E-055.66E-041.93E-012.08E+01 + 75M5 150.002.80E-053.22E-041.74E-027.30E-011.21E-051.06E-041.66E-021.17E+00 + 75M5 280.002.22E-061.35E-052.49E-045.08E-031.30E-066.28E-062.42E-048.73E-03 + 75M5 500.002.42E-078.77E-076.05E-066.00E-051.79E-075.38E-075.69E-061.10E-04 + 75N+ 50.002.49E-025.15E+003.36E+021.37E+043.75E-011.81E+019.68E+024.12E+04 + 75N+ 70.009.81E-031.01E+004.48E+011.26E+031.38E-014.01E+001.27E+023.52E+03 + 75N+ 100.003.76E-031.89E-015.69E+001.11E+024.98E-028.76E-011.65E+012.97E+02 + 75N+ 150.001.25E-032.97E-025.71E-017.58E+001.55E-021.65E-011.82E+002.05E+01 + 75N+ 200.005.79E-048.47E-031.18E-011.21E+006.82E-035.29E-024.17E-013.43E+00 + 75N+ 500.006.24E-052.90E-041.47E-036.72E-035.63E-042.07E-036.99E-032.43E-02 + 76K 74.876.61E-018.22E-012.05E-011.28E-021.11E+019.89E+011.61E+025.66E+01 + 76K 75.576.46E-018.42E-012.66E-013.28E-021.08E+019.56E+011.63E+027.26E+01 + 76K 76.876.20E-018.72E-013.81E-019.22E-021.03E+019.00E+011.66E+021.02E+02 + 76K 80.075.60E-019.18E-016.55E-013.49E-019.13E+007.77E+011.65E+021.64E+02 + 76K 83.874.98E-019.35E-019.38E-017.96E-017.98E+006.58E+011.59E+022.20E+02 + 76K 88.004.42E-019.24E-011.18E+001.35E+006.94E+005.54E+011.48E+022.57E+02 + 76K 94.003.74E-018.77E-011.40E+002.11E+005.74E+004.38E+011.30E+022.79E+02 + 76K 102.003.05E-017.90E-011.52E+002.87E+004.54E+003.27E+011.06E+022.70E+02 + 76K 114.002.30E-016.52E-011.48E+003.37E+003.30E+002.20E+017.63E+012.26E+02 + 76K 127.001.74E-015.22E-011.31E+003.35E+002.42E+001.50E+015.40E+011.73E+02 + 76K 144.001.27E-013.92E-011.06E+002.93E+001.69E+009.67E+003.51E+011.18E+02 + 76K 157.001.02E-013.18E-018.88E-012.54E+001.33E+007.15E+002.59E+018.80E+01 + 76K 174.007.83E-022.45E-017.01E-012.05E+009.93E-015.01E+001.79E+016.07E+01 + 76K 197.005.72E-021.78E-015.15E-011.53E+007.02E-013.28E+001.13E+013.79E+01 + 76K 225.004.11E-021.26E-013.64E-011.07E+004.86E-012.09E+006.96E+002.25E+01 + 76K 290.002.21E-026.49E-021.83E-015.22E-012.42E-019.05E-012.74E+008.16E+00 + 76K 375.001.21E-023.40E-029.15E-022.45E-011.21E-013.99E-011.09E+002.92E+00 + 76K 460.007.69E-032.08E-025.37E-021.36E-017.08E-022.13E-015.33E-011.31E+00 + 76K 570.004.88E-031.28E-023.14E-027.42E-024.05E-021.12E-012.59E-015.82E-01 + 76K 800.002.49E-036.32E-031.42E-023.01E-021.70E-024.29E-028.78E-021.73E-01 + 76K 1050.001.50E-033.70E-037.82E-031.53E-028.61E-032.06E-023.88E-026.99E-02 + 76K 1300.001.03E-032.47E-035.00E-039.21E-035.07E-031.18E-022.11E-023.58E-02 + 76K 1550.007.64E-041.79E-033.49E-036.17E-033.29E-037.55E-031.31E-022.12E-02 + 76L1 13.972.05E+004.42E+021.35E+044.74E+042.34E+025.61E+042.55E+062.58E+07 + 76L1 14.671.89E+003.47E+021.28E+048.25E+042.02E+024.45E+041.96E+062.32E+07 + 76L1 15.971.64E+002.27E+021.05E+041.18E+051.57E+022.98E+041.23E+061.76E+07 + 76L1 19.171.20E+008.80E+015.55E+031.08E+059.12E+011.27E+044.58E+057.93E+06 + 76L1 22.978.57E-013.32E+012.54E+036.24E+045.32E+015.50E+031.72E+053.16E+06 + 76L1 26.006.75E-011.67E+011.41E+033.77E+043.68E+013.11E+038.82E+041.62E+06 + 76L1 32.004.44E-015.19E+004.90E+021.42E+041.99E+011.21E+032.90E+045.07E+05 + 76L1 40.002.78E-011.53E+001.48E+024.35E+031.03E+014.48E+028.88E+031.41E+05 + 76L1 52.001.56E-014.75E-013.46E+019.83E+024.75E+001.42E+022.26E+033.10E+04 + 76L1 65.009.42E-022.44E-011.01E+012.65E+022.47E+005.46E+017.18E+028.53E+03 + 76L1 82.005.48E-021.47E-012.98E+006.73E+011.25E+002.07E+012.23E+022.25E+03 + 76L1 95.003.87E-021.09E-011.47E+002.86E+018.19E-011.13E+011.08E+029.78E+02 + 76L1 112.002.61E-027.70E-027.18E-011.13E+015.09E-015.82E+004.85E+013.89E+02 + 76L1 135.001.66E-025.10E-023.49E-014.18E+002.98E-012.79E+001.99E+011.39E+02 + 76L1 160.001.10E-023.45E-021.93E-011.79E+001.84E-011.45E+009.05E+005.57E+01 + 76L1 225.004.86E-031.52E-026.60E-023.93E-017.09E-024.09E-011.97E+009.41E+00 + 76L1 310.002.30E-037.00E-032.58E-021.12E-012.94E-021.32E-015.06E-011.93E+00 + 76L1 400.001.31E-033.84E-031.26E-024.53E-021.48E-025.62E-021.82E-015.89E-01 + 76L1 510.007.78E-042.22E-036.60E-032.03E-027.79E-032.58E-027.27E-022.02E-01 + 76L1 740.003.70E-041.01E-032.60E-036.52E-032.97E-038.38E-031.96E-024.45E-02 + 76L11000.002.12E-045.55E-041.29E-032.83E-031.39E-033.57E-037.38E-031.47E-02 + 76L11500.001.05E-042.58E-045.37E-041.02E-035.06E-041.21E-032.22E-033.82E-03 + 76L2 13.384.41E+002.26E+043.95E+068.12E+072.68E+012.29E+033.38E+041.06E+05 + 76L2 14.083.85E+001.76E+042.95E+067.09E+072.30E+011.89E+033.25E+041.86E+05 + 76L2 15.383.03E+001.13E+041.78E+065.10E+071.76E+011.35E+032.78E+042.71E+05 + 76L2 18.581.80E+004.46E+035.99E+052.08E+079.98E+006.55E+021.63E+042.60E+05 + 76L2 22.381.06E+001.79E+032.05E+057.49E+065.70E+003.21E+028.43E+031.62E+05 + 76L2 26.006.91E-018.57E+028.66E+043.14E+063.64E+001.81E+024.72E+039.57E+04 + 76L2 32.003.75E-013.12E+022.62E+048.96E+051.96E+008.13E+012.01E+034.07E+04 + 76L2 40.001.93E-011.06E+027.29E+032.25E+051.01E+003.45E+017.76E+021.48E+04 + 76L2 52.008.67E-023.01E+011.63E+034.34E+044.63E-011.27E+012.46E+024.15E+03 + 76L2 65.004.35E-021.04E+014.62E+021.06E+042.39E-015.42E+009.12E+011.36E+03 + 76L2 82.002.11E-023.51E+001.26E+022.45E+031.21E-012.25E+003.23E+014.15E+02 + 76L2 95.001.33E-021.77E+005.54E+019.70E+027.89E-021.30E+001.68E+011.95E+02 + 76L2 112.007.97E-038.33E-012.24E+013.47E+024.89E-027.01E-018.04E+008.35E+01 + 76L2 135.004.45E-033.57E-018.12E+001.09E+022.85E-023.51E-013.51E+003.19E+01 + 76L2 160.002.62E-031.67E-013.26E+003.85E+011.74E-021.88E-011.66E+001.34E+01 + 76L2 225.009.17E-043.76E-025.47E-015.00E+006.58E-035.47E-023.79E-012.39E+00 + 76L2 310.003.49E-049.71E-031.09E-017.86E-012.65E-031.76E-029.76E-024.94E-01 + 76L2 400.001.66E-043.44E-033.16E-021.91E-011.29E-037.30E-033.42E-021.47E-01 + 76L2 510.008.30E-051.33E-031.02E-025.25E-026.56E-043.21E-031.30E-024.78E-02 + 76L2 740.002.99E-053.32E-041.98E-038.15E-032.33E-049.46E-043.11E-039.33E-03 + 76L21000.001.36E-051.16E-045.74E-042.01E-031.01E-043.64E-041.04E-032.69E-03 + 76L21500.004.98E-063.10E-051.23E-043.60E-043.30E-051.05E-042.57E-045.64E-04 + 76L3 11.879.82E+005.32E+041.12E+072.78E+084.77E+008.34E+041.08E+081.51E+10 + 76L3 12.578.34E+003.98E+047.97E+062.27E+084.01E+006.27E+047.33E+079.77E+09 + 76L3 13.876.28E+002.42E+044.41E+061.47E+082.96E+003.84E+043.77E+074.60E+09 + 76L3 17.073.41E+008.49E+031.27E+064.92E+071.57E+001.36E+049.32E+069.46E+08 + 76L3 20.871.87E+003.08E+033.79E+051.51E+078.46E-015.01E+032.43E+062.06E+08 + 76L3 26.009.52E-011.02E+031.01E+053.83E+064.32E-011.68E+035.68E+053.94E+07 + 76L3 32.004.98E-013.58E+022.91E+041.01E+062.29E-015.96E+021.45E+058.35E+06 + 76L3 40.002.45E-011.17E+027.60E+032.34E+051.16E-011.97E+023.41E+041.60E+06 + 76L3 52.001.05E-013.13E+011.58E+034.09E+045.22E-025.35E+016.33E+032.35E+05 + 76L3 65.005.07E-021.03E+014.15E+029.17E+032.65E-021.77E+011.54E+034.71E+04 + 76L3 82.002.36E-023.24E+001.04E+021.92E+031.31E-025.62E+003.62E+029.03E+03 + 76L3 95.001.45E-021.57E+004.32E+017.13E+028.44E-032.72E+001.46E+023.22E+03 + 76L3 112.008.40E-036.96E-011.63E+012.36E+025.15E-031.21E+005.36E+011.03E+03 + 76L3 135.004.53E-032.78E-015.40E+006.72E+012.95E-034.85E-011.74E+012.86E+02 + 76L3 160.002.59E-031.22E-011.99E+002.16E+011.78E-032.12E-016.35E+009.09E+01 + 76L3 225.008.53E-042.37E-022.75E-012.26E+006.50E-044.08E-028.73E-019.63E+00 + 76L3 310.003.08E-045.26E-034.47E-022.83E-012.56E-048.84E-031.42E-011.25E+00 + 76L3 400.001.40E-041.65E-031.09E-025.71E-021.23E-042.68E-033.49E-022.60E-01 + 76L3 510.006.81E-055.67E-043.00E-031.31E-026.24E-058.78E-049.44E-036.07E-02 + 76L3 740.002.39E-051.21E-044.61E-041.57E-032.28E-051.69E-041.35E-037.11E-03 + 76L31000.001.09E-053.86E-051.15E-043.25E-041.05E-054.86E-052.98E-041.35E-03 + 76L31500.004.16E-069.74E-062.16E-054.85E-054.07E-061.08E-054.30E-051.59E-04 + 76M1 4.053.47E+001.76E+041.17E+066.55E+072.15E+036.05E+063.20E+093.73E+11 + 76M1 5.052.72E+007.04E+035.11E+052.39E+071.11E+032.05E+067.64E+088.15E+10 + 76M1 7.051.71E+001.70E+031.49E+055.07E+064.10E+024.02E+059.03E+077.95E+09 + 76M1 11.058.16E-012.31E+022.40E+049.28E+051.07E+024.57E+045.45E+063.48E+08 + 76M1 18.053.26E-012.26E+012.52E+031.05E+052.48E+014.42E+032.80E+051.21E+07 + 76M1 27.001.44E-012.98E+003.35E+021.32E+047.47E+006.78E+022.66E+048.15E+05 + 76M1 42.005.57E-023.44E-013.23E+011.11E+032.02E+009.17E+012.21E+034.61E+04 + 76M1 54.003.17E-021.26E-018.31E+002.56E+029.65E-013.03E+015.62E+029.40E+03 + 76M1 72.001.63E-025.29E-021.80E+004.66E+014.16E-018.79E+001.22E+021.59E+03 + 76M1 105.006.65E-032.13E-022.85E-015.19E+001.39E-011.83E+001.78E+011.68E+02 + 76M1 150.002.82E-039.20E-036.63E-027.50E-015.01E-024.45E-013.15E+002.19E+01 + 76M1 280.006.43E-042.01E-038.39E-034.36E-028.78E-034.40E-021.89E-018.08E-01 + 76M1 500.001.79E-045.22E-041.62E-035.24E-031.86E-036.34E-031.85E-025.34E-02 + 76M2 3.797.91E+002.85E+064.51E+098.49E+112.82E+022.19E+052.94E+079.05E+08 + 76M2 4.795.67E+008.89E+059.84E+081.68E+111.40E+027.57E+049.23E+064.45E+08 + 76M2 6.793.06E+001.57E+051.05E+081.48E+104.92E+011.60E+041.61E+069.22E+07 + 76M2 10.791.16E+001.57E+045.65E+065.89E+081.23E+012.13E+031.59E+058.46E+06 + 76M2 17.793.48E-011.33E+032.60E+051.88E+072.75E+002.60E+021.35E+045.64E+05 + 76M2 27.001.16E-011.74E+022.11E+041.10E+067.95E-014.71E+011.78E+035.70E+04 + 76M2 42.003.40E-022.05E+011.55E+035.71E+042.15E-018.05E+002.15E+025.02E+03 + 76M2 54.001.64E-026.19E+003.61E+021.08E+041.02E-013.00E+006.54E+011.27E+03 + 76M2 72.006.98E-031.60E+006.97E+011.65E+034.41E-029.84E-011.70E+012.64E+02 + 76M2 105.002.23E-032.78E-018.40E+001.45E+021.47E-022.34E-012.99E+003.46E+01 + 76M2 150.007.52E-045.56E-021.20E+001.55E+015.27E-036.17E-025.96E-015.24E+00 + 76M2 280.001.15E-043.73E-034.65E-023.70E-018.91E-046.46E-033.91E-022.17E-01 + 76M2 500.002.17E-053.61E-042.85E-031.51E-021.75E-048.75E-043.62E-031.37E-02 + 76M3 3.462.21E+016.47E+061.14E+102.28E+124.77E+011.05E+071.59E+112.57E+14 + 76M3 4.461.40E+011.81E+062.14E+093.76E+112.22E+012.97E+062.75E+102.92E+13 + 76M3 6.466.58E+002.81E+051.92E+082.69E+107.20E+004.67E+052.13E+091.27E+12 + 76M3 10.462.14E+002.49E+048.77E+068.83E+081.66E+004.20E+047.81E+072.32E+10 + 76M3 17.465.67E-011.89E+033.50E+052.41E+073.51E-013.26E+032.42E+063.66E+08 + 76M3 27.001.66E-012.11E+022.35E+041.15E+069.33E-023.71E+021.32E+051.18E+07 + 76M3 42.004.45E-022.32E+011.58E+035.40E+042.45E-024.12E+017.29E+033.98E+05 + 76M3 54.002.05E-026.61E+003.44E+029.54E+031.15E-021.18E+011.45E+036.06E+04 + 76M3 72.008.27E-031.58E+006.07E+011.32E+034.84E-032.85E+002.33E+027.34E+03 + 76M3 105.002.46E-032.46E-016.35E+001.01E+021.57E-034.44E-012.24E+014.93E+02 + 76M3 150.007.77E-044.31E-027.70E-019.00E+005.44E-047.74E-022.60E+004.17E+01 + 76M3 280.001.06E-042.19E-032.09E-021.45E-018.76E-053.81E-036.92E-026.76E-01 + 76M3 500.001.84E-051.61E-048.76E-043.91E-031.69E-052.54E-042.85E-031.89E-02 + 76M4 3.035.95E+011.99E+051.01E+101.19E+141.48E+013.41E+052.65E+091.82E+12 + 76M4 4.032.50E+014.67E+041.37E+099.85E+125.93E+008.20E+043.87E+082.13E+11 + 76M4 6.036.80E+006.02E+038.09E+072.98E+111.59E+001.09E+042.61E+071.03E+10 + 76M4 10.031.18E+004.56E+022.26E+063.78E+092.94E-018.40E+029.09E+052.30E+08 + 76M4 17.031.70E-013.11E+015.44E+044.29E+074.88E-025.83E+012.93E+044.61E+06 + 76M4 27.002.89E-022.97E+002.14E+039.15E+059.87E-035.72E+001.55E+031.60E+05 + 76M4 42.004.97E-033.10E-019.75E+012.41E+042.07E-036.17E-019.64E+016.61E+03 + 76M4 54.001.79E-038.53E-021.70E+013.11E+038.37E-041.74E-012.02E+011.10E+03 + 76M4 72.005.47E-041.95E-022.34E+003.06E+022.94E-044.12E-023.44E+001.44E+02 + 76M4 105.001.14E-042.84E-031.79E-011.52E+017.34E-056.25E-033.46E-011.03E+01 + 76M4 150.002.58E-054.68E-041.65E-029.43E-011.95E-051.06E-034.08E-028.90E-01 + 76M4 280.002.02E-062.15E-052.98E-048.53E-031.87E-064.92E-051.05E-031.37E-02 + 76M4 500.002.03E-071.40E-069.38E-061.39E-042.11E-072.99E-063.92E-053.37E-04 + 76M5 2.969.04E+012.28E+051.95E+102.00E+148.80E+002.68E+041.43E+106.50E+14 + 76M5 3.963.69E+015.13E+042.53E+091.56E+133.45E+006.30E+031.87E+094.84E+13 + 76M5 5.969.68E+006.33E+031.43E+084.42E+119.15E-018.19E+021.07E+081.26E+12 + 76M5 9.961.61E+004.60E+023.82E+065.26E+091.68E-016.34E+012.95E+061.33E+10 + 76M5 16.962.24E-013.02E+018.88E+045.63E+072.83E-024.49E+007.15E+041.24E+08 + 76M5 27.003.66E-022.75E+003.31E+031.12E+065.77E-034.51E-012.79E+032.18E+06 + 76M5 42.006.15E-032.77E-011.46E+022.79E+041.24E-035.15E-021.28E+024.96E+04 + 76M5 54.002.18E-037.42E-022.47E+013.47E+035.11E-041.51E-022.23E+015.92E+03 + 76M5 72.006.58E-041.64E-023.26E+003.23E+021.84E-043.77E-033.02E+005.35E+02 + 76M5 105.001.36E-042.26E-032.31E-011.47E+014.75E-056.21E-042.22E-012.40E+01 + 76M5 150.003.05E-053.50E-041.94E-028.18E-011.32E-051.17E-041.90E-021.35E+00 + 76M5 280.002.38E-061.48E-052.78E-045.69E-031.42E-066.89E-062.76E-041.00E-02 + 76M5 500.002.70E-079.61E-076.72E-066.72E-051.95E-075.91E-076.43E-061.26E-04 + 76N+ 50.002.61E-025.68E+003.70E+021.52E+044.20E-012.05E+011.10E+034.73E+04 + 76N+ 70.001.03E-021.11E+004.95E+011.39E+031.55E-014.53E+001.44E+024.02E+03 + 76N+ 100.003.95E-032.08E-016.28E+001.22E+025.58E-029.85E-011.87E+013.38E+02 + 76N+ 150.001.32E-033.27E-026.32E-018.37E+001.74E-021.85E-012.05E+002.32E+01 + 76N+ 200.006.13E-049.31E-031.31E-011.34E+007.64E-035.93E-024.69E-013.86E+00 + 76N+ 500.006.64E-053.16E-041.63E-037.46E-036.29E-042.31E-037.79E-032.71E-02 + 77K 77.116.23E-017.44E-011.80E-011.07E-021.11E+019.48E+011.49E+025.07E+01 + 77K 77.816.09E-017.61E-012.33E-012.74E-021.08E+019.18E+011.51E+026.47E+01 + 77K 79.115.85E-017.88E-013.31E-017.64E-021.03E+018.66E+011.53E+029.00E+01 + 77K 82.315.30E-018.30E-015.67E-012.88E-019.17E+007.51E+011.54E+021.45E+02 + 77K 86.114.74E-018.48E-018.13E-016.60E-018.05E+006.39E+011.48E+021.95E+02 + 77K 90.004.24E-018.42E-011.01E+001.10E+007.08E+005.46E+011.39E+022.28E+02 + 77K 96.003.61E-018.05E-011.22E+001.76E+005.88E+004.34E+011.23E+022.51E+02 + 77K 104.002.95E-017.30E-011.35E+002.44E+004.67E+003.26E+011.01E+022.47E+02 + 77K 116.002.24E-016.09E-011.33E+002.94E+003.41E+002.22E+017.40E+012.10E+02 + 77K 129.001.71E-014.93E-011.20E+002.98E+002.52E+001.52E+015.28E+011.63E+02 + 77K 146.001.25E-013.74E-019.85E-012.66E+001.77E+009.87E+003.48E+011.13E+02 + 77K 159.001.01E-013.05E-018.32E-012.33E+001.39E+007.34E+002.58E+018.52E+01 + 77K 176.007.79E-022.37E-016.64E-011.91E+001.05E+005.17E+001.80E+015.94E+01 + 77K 199.005.73E-021.74E-014.94E-011.44E+007.42E-013.40E+001.15E+013.75E+01 + 77K 225.004.22E-021.27E-013.61E-011.06E+005.28E-012.25E+007.34E+002.33E+01 + 77K 290.002.28E-026.59E-021.85E-015.23E-012.63E-019.73E-012.90E+008.53E+00 + 77K 375.001.25E-023.48E-029.34E-022.50E-011.32E-014.29E-011.16E+003.07E+00 + 77K 470.007.61E-032.05E-025.23E-021.31E-017.25E-022.14E-015.28E-011.27E+00 + 77K 580.004.89E-031.28E-023.12E-027.33E-024.19E-021.15E-012.61E-015.78E-01 + 77K 810.002.53E-036.43E-031.44E-023.04E-021.78E-024.46E-029.03E-021.76E-01 + 77K 1100.001.44E-033.55E-037.44E-031.43E-028.26E-031.95E-023.63E-026.41E-02 + 77K 1350.001.01E-032.42E-034.87E-038.88E-034.97E-031.15E-022.04E-023.40E-02 + 77K 1600.007.54E-041.77E-033.45E-036.06E-033.27E-037.48E-031.28E-022.06E-02 + 77L1 14.421.92E+004.14E+021.21E+044.00E+042.34E+025.35E+042.34E+062.28E+07 + 77L1 15.121.78E+003.28E+021.15E+046.99E+042.03E+024.28E+041.81E+062.06E+07 + 77L1 16.421.55E+002.18E+029.55E+031.01E+051.59E+022.90E+041.16E+061.58E+07 + 77L1 19.621.14E+008.73E+015.20E+039.56E+049.36E+011.26E+044.41E+057.34E+06 + 77L1 23.428.25E-013.40E+012.44E+035.72E+045.53E+015.56E+031.69E+053.01E+06 + 77L1 27.006.27E-011.56E+011.25E+033.23E+043.62E+012.90E+037.87E+041.40E+06 + 77L1 33.004.19E-015.12E+004.52E+021.26E+042.00E+011.17E+032.69E+044.56E+05 + 77L1 41.002.66E-011.58E+001.43E+024.03E+031.05E+014.43E+028.53E+031.32E+05 + 77L1 53.001.52E-014.98E-013.50E+019.53E+024.94E+001.44E+022.24E+032.99E+04 + 77L1 66.009.24E-022.49E-011.05E+012.66E+022.60E+005.64E+017.26E+028.44E+03 + 77L1 83.005.43E-021.46E-013.19E+006.96E+011.33E+002.16E+012.30E+022.28E+03 + 77L1 96.003.85E-021.08E-011.58E+003.01E+018.73E-011.19E+011.12E+029.99E+02 + 77L1 113.002.61E-027.63E-027.70E-011.21E+015.46E-016.17E+005.07E+014.02E+02 + 77L1 136.001.67E-025.08E-023.71E-014.49E+003.21E-012.97E+002.10E+011.45E+02 + 77L1 165.001.05E-023.26E-021.88E-011.72E+001.85E-011.41E+008.57E+005.12E+01 + 77L1 230.004.76E-031.48E-026.56E-023.92E-017.32E-024.13E-011.95E+009.12E+00 + 77L1 315.002.30E-036.98E-032.60E-021.14E-013.09E-021.37E-015.16E-011.94E+00 + 77L1 400.001.36E-034.00E-031.34E-024.87E-021.62E-026.13E-021.98E-016.38E-01 + 77L1 510.008.13E-042.32E-037.00E-032.17E-028.52E-032.81E-027.89E-022.19E-01 + 77L1 740.003.88E-041.06E-032.76E-036.97E-033.25E-039.12E-032.12E-024.82E-02 + 77L11000.002.22E-045.86E-041.37E-033.03E-031.51E-033.88E-038.01E-031.59E-02 + 77L11500.001.10E-042.73E-045.72E-041.09E-035.48E-041.31E-032.40E-034.13E-03 + 77L2 13.824.16E+002.10E+043.51E+066.93E+072.69E+012.19E+033.09E+049.14E+04 + 77L2 14.523.65E+001.64E+042.65E+066.09E+072.32E+011.81E+032.99E+041.61E+05 + 77L2 15.822.89E+001.07E+041.62E+064.45E+071.79E+011.31E+032.57E+042.37E+05 + 77L2 19.021.74E+004.32E+035.62E+051.87E+071.03E+016.49E+021.54E+042.34E+05 + 77L2 22.821.04E+001.77E+031.97E+056.94E+065.96E+003.23E+028.16E+031.50E+05 + 77L2 27.006.43E-017.76E+027.51E+042.62E+063.60E+001.70E+024.26E+038.36E+04 + 77L2 33.003.57E-012.92E+022.37E+047.83E+051.98E+007.86E+011.87E+033.67E+04 + 77L2 41.001.87E-011.02E+026.84E+032.05E+051.04E+003.42E+017.44E+021.37E+04 + 77L2 53.008.58E-022.99E+011.59E+034.11E+044.85E-011.28E+012.42E+023.99E+03 + 77L2 66.004.37E-021.06E+014.59E+021.03E+042.54E-015.59E+009.18E+011.34E+03 + 77L2 83.002.15E-023.62E+001.27E+022.44E+031.30E-012.35E+003.31E+014.17E+02 + 77L2 96.001.37E-021.85E+005.69E+019.79E+028.51E-021.36E+001.73E+011.98E+02 + 77L2 113.008.23E-038.74E-012.32E+013.54E+025.30E-027.43E-018.39E+008.57E+01 + 77L2 136.004.62E-033.78E-018.50E+001.13E+023.10E-023.75E-013.70E+003.31E+01 + 77L2 165.002.54E-031.59E-013.02E+003.47E+011.78E-021.85E-011.58E+001.24E+01 + 77L2 230.009.17E-043.75E-025.35E-014.79E+006.90E-035.58E-023.77E-012.33E+00 + 77L2 315.003.58E-049.99E-031.10E-017.85E-012.84E-031.84E-021.00E-014.99E-01 + 77L2 400.001.79E-043.79E-033.47E-022.09E-011.45E-038.09E-033.76E-021.60E-01 + 77L2 510.008.99E-051.46E-031.12E-025.77E-027.36E-043.56E-031.43E-025.25E-02 + 77L2 740.003.26E-053.66E-042.18E-038.98E-032.62E-041.05E-033.45E-031.03E-02 + 77L21000.001.49E-051.28E-046.36E-042.23E-031.14E-044.06E-041.15E-032.98E-03 + 77L21500.005.46E-063.43E-051.37E-043.99E-043.71E-051.18E-042.86E-046.27E-04 + 77L3 12.219.28E+004.95E+041.01E+072.41E+084.65E+008.05E+041.00E+081.36E+10 + 77L3 12.917.92E+003.74E+047.22E+061.98E+083.92E+006.10E+046.89E+078.91E+09 + 77L3 14.216.01E+002.30E+044.06E+061.31E+082.92E+003.78E+043.60E+074.28E+09 + 77L3 17.413.31E+008.26E+031.20E+064.49E+071.57E+001.37E+049.19E+069.10E+08 + 77L3 21.211.83E+003.05E+033.67E+051.41E+078.56E-015.13E+032.46E+062.04E+08 + 77L3 27.008.76E-019.05E+028.61E+043.14E+064.09E-011.54E+034.98E+053.32E+07 + 77L3 33.004.68E-013.30E+022.58E+048.66E+052.22E-015.69E+021.33E+057.43E+06 + 77L3 41.002.35E-011.11E+027.00E+032.09E+051.14E-011.93E+023.26E+041.49E+06 + 77L3 53.001.03E-013.07E+011.50E+033.80E+045.24E-025.41E+016.28E+032.29E+05 + 77L3 66.005.02E-021.03E+014.05E+028.75E+032.69E-021.83E+011.57E+034.70E+04 + 77L3 83.002.37E-023.29E+001.03E+021.88E+031.35E-025.88E+003.75E+029.22E+03 + 77L3 96.001.46E-021.60E+004.34E+017.05E+028.71E-032.87E+001.53E+023.32E+03 + 77L3 113.008.54E-037.17E-011.65E+012.36E+025.34E-031.29E+005.66E+011.07E+03 + 77L3 136.004.63E-032.89E-015.54E+006.80E+013.07E-035.20E-011.85E+013.02E+02 + 77L3 165.002.46E-031.13E-011.78E+001.87E+011.73E-032.03E-015.89E+008.21E+01 + 77L3 230.008.36E-042.29E-022.60E-012.09E+006.48E-044.06E-028.55E-019.25E+00 + 77L3 315.003.08E-045.26E-034.38E-022.73E-012.60E-049.07E-031.44E-011.25E+00 + 77L3 400.001.48E-041.77E-031.18E-026.10E-021.31E-042.95E-033.87E-022.87E-01 + 77L3 510.007.19E-056.09E-043.22E-031.40E-026.63E-059.66E-041.04E-026.70E-02 + 77L3 740.002.54E-051.30E-044.95E-041.68E-032.42E-051.85E-041.49E-037.84E-03 + 77L31000.001.15E-054.13E-051.23E-043.49E-041.12E-055.30E-053.28E-041.49E-03 + 77L31500.004.38E-061.04E-052.31E-055.21E-054.31E-061.17E-054.71E-051.75E-04 + 77M1 4.173.26E+001.69E+041.12E+065.62E+072.16E+035.84E+062.97E+093.35E+11 + 77M1 5.172.58E+006.94E+035.00E+052.21E+071.14E+032.04E+067.38E+087.63E+10 + 77M1 7.171.65E+001.73E+031.48E+054.97E+064.29E+024.13E+059.11E+077.83E+09 + 77M1 11.177.97E-012.43E+022.44E+049.21E+051.14E+024.83E+045.71E+063.59E+08 + 77M1 18.173.23E-012.47E+012.64E+031.07E+052.68E+014.77E+033.01E+051.28E+07 + 77M1 27.001.45E-013.45E+003.68E+021.41E+048.25E+007.55E+022.97E+049.03E+05 + 77M1 42.005.65E-024.00E-013.63E+011.21E+032.23E+001.02E+022.45E+035.09E+04 + 77M1 54.003.22E-021.41E-019.42E+002.82E+021.06E+003.36E+016.22E+021.04E+04 + 77M1 72.001.66E-025.63E-022.05E+005.20E+014.59E-019.73E+001.35E+021.75E+03 + 77M1 105.006.82E-032.19E-023.22E-015.83E+001.53E-012.02E+001.96E+011.84E+02 + 77M1 150.002.91E-039.44E-037.31E-028.42E-015.53E-024.90E-013.46E+002.40E+01 + 77M1 280.006.67E-042.09E-038.98E-034.77E-029.67E-034.84E-022.07E-018.82E-01 + 77M1 500.001.88E-045.48E-041.73E-035.66E-032.04E-036.94E-032.02E-025.82E-02 + 77M2 3.917.43E+002.67E+064.07E+097.42E+112.86E+022.12E+052.74E+077.98E+08 + 77M2 4.915.40E+008.60E+059.26E+081.54E+111.45E+027.54E+048.89E+064.09E+08 + 77M2 6.912.97E+001.57E+051.03E+081.42E+105.20E+011.64E+041.61E+068.88E+07 + 77M2 10.911.15E+001.63E+045.79E+065.92E+081.32E+012.25E+031.64E+058.50E+06 + 77M2 17.913.52E-011.41E+032.73E+051.95E+073.00E+002.79E+021.42E+045.83E+05 + 77M2 27.001.21E-011.90E+022.30E+041.20E+068.85E-015.19E+011.94E+036.13E+04 + 77M2 42.003.55E-022.25E+011.70E+036.19E+042.39E-018.86E+002.34E+025.41E+03 + 77M2 54.001.72E-026.79E+003.95E+021.17E+041.14E-013.30E+007.13E+011.37E+03 + 77M2 72.007.37E-031.75E+007.62E+011.79E+034.92E-021.08E+001.86E+012.86E+02 + 77M2 105.002.37E-033.06E-019.20E+001.58E+021.65E-022.58E-013.27E+003.76E+01 + 77M2 150.008.03E-046.11E-021.32E+001.70E+015.90E-036.82E-026.54E-015.72E+00 + 77M2 280.001.24E-044.11E-035.12E-024.06E-011.00E-037.17E-034.31E-022.38E-01 + 77M2 500.002.35E-054.00E-043.16E-031.67E-021.97E-049.76E-044.01E-031.51E-02 + 77M3 3.552.10E+016.11E+061.04E+102.02E+124.70E+011.03E+071.51E+112.37E+14 + 77M3 4.551.35E+011.77E+062.04E+093.47E+112.22E+013.00E+062.71E+102.83E+13 + 77M3 6.556.45E+002.83E+051.90E+082.60E+107.36E+004.86E+052.19E+091.30E+12 + 77M3 10.552.14E+002.57E+048.98E+068.86E+081.73E+004.50E+048.36E+072.47E+10 + 77M3 17.555.74E-011.99E+033.66E+052.48E+073.69E-013.55E+032.65E+064.00E+08 + 77M3 27.001.72E-012.29E+022.54E+041.23E+069.98E-024.15E+021.49E+051.34E+07 + 77M3 42.004.63E-022.51E+011.70E+035.76E+042.62E-024.61E+018.24E+034.50E+05 + 77M3 54.002.14E-027.16E+003.70E+021.02E+041.23E-021.32E+011.63E+036.85E+04 + 77M3 72.008.64E-031.72E+006.53E+011.41E+035.18E-033.19E+002.63E+028.26E+03 + 77M3 105.002.58E-032.67E-016.84E+001.08E+021.68E-034.96E-012.52E+015.54E+02 + 77M3 150.008.17E-044.67E-028.31E-019.64E+005.82E-048.64E-022.91E+004.67E+01 + 77M3 280.001.12E-042.38E-032.26E-021.56E-019.36E-054.24E-037.73E-027.54E-01 + 77M3 500.001.95E-051.74E-049.46E-044.21E-031.81E-052.82E-043.17E-032.10E-02 + 77M4 3.125.67E+011.88E+059.25E+091.06E+141.46E+013.35E+052.51E+091.67E+12 + 77M4 4.122.44E+014.56E+041.31E+099.29E+125.98E+008.32E+043.84E+082.06E+11 + 77M4 6.126.79E+006.09E+038.13E+072.99E+111.64E+001.14E+042.71E+071.05E+10 + 77M4 10.121.21E+004.75E+022.36E+063.97E+093.10E-019.08E+029.77E+052.44E+08 + 77M4 17.121.77E-013.30E+015.83E+044.62E+075.21E-026.42E+013.22E+045.01E+06 + 77M4 27.003.09E-023.24E+002.38E+031.03E+061.07E-026.46E+001.75E+031.80E+05 + 77M4 42.005.35E-033.39E-011.08E+022.70E+042.26E-036.98E-011.09E+027.44E+03 + 77M4 54.001.93E-039.37E-021.89E+013.49E+039.16E-041.97E-012.29E+011.24E+03 + 77M4 72.005.93E-042.15E-022.60E+003.43E+023.22E-044.66E-023.89E+001.62E+02 + 77M4 105.001.25E-043.14E-031.99E-011.71E+018.07E-057.07E-033.92E-011.16E+01 + 77M4 150.002.85E-055.18E-041.83E-021.06E+002.14E-051.20E-034.61E-021.00E+00 + 77M4 280.002.21E-062.39E-053.31E-049.60E-032.06E-065.57E-051.19E-031.55E-02 + 77M4 500.002.25E-071.56E-061.05E-051.57E-042.33E-073.38E-064.46E-053.82E-04 + 77M5 3.048.63E+012.13E+051.80E+101.79E+148.65E+002.58E+041.36E+106.00E+14 + 77M5 4.043.60E+014.96E+042.45E+091.48E+133.47E+006.26E+031.86E+094.74E+13 + 77M5 6.049.67E+006.33E+031.45E+084.44E+119.40E-018.42E+021.12E+081.31E+12 + 77M5 10.041.65E+004.73E+024.02E+065.53E+091.76E-016.68E+013.20E+061.45E+10 + 77M5 17.042.33E-013.16E+019.57E+046.07E+073.00E-024.82E+007.95E+041.39E+08 + 77M5 27.003.90E-022.96E+003.69E+031.25E+066.23E-034.94E-013.20E+032.54E+06 + 77M5 42.006.59E-032.98E-011.63E+023.12E+041.34E-035.64E-021.47E+025.76E+04 + 77M5 54.002.35E-038.01E-022.76E+013.88E+035.55E-041.66E-022.55E+016.87E+03 + 77M5 72.007.09E-041.77E-023.64E+003.62E+022.00E-044.13E-033.46E+006.19E+02 + 77M5 105.001.46E-042.45E-032.58E-011.65E+015.17E-056.81E-042.54E-012.77E+01 + 77M5 150.003.30E-053.81E-042.16E-029.15E-011.43E-051.28E-042.18E-021.55E+00 + 77M5 280.002.64E-061.62E-053.09E-046.37E-031.55E-067.56E-063.15E-041.15E-02 + 77M5 500.003.02E-071.06E-067.47E-067.51E-052.13E-076.48E-077.26E-061.44E-04 + 77N+ 50.002.72E-026.26E+004.08E+021.68E+044.66E-012.29E+011.25E+035.42E+04 + 77N+ 70.001.08E-021.22E+005.45E+011.53E+031.72E-015.06E+001.63E+024.58E+03 + 77N+ 100.004.14E-032.29E-016.92E+001.35E+026.19E-021.10E+002.10E+013.82E+02 + 77N+ 150.001.39E-033.59E-026.97E-019.22E+001.93E-022.05E-012.29E+002.60E+01 + 77N+ 200.006.45E-041.02E-021.45E-011.47E+008.48E-036.58E-025.22E-014.32E+00 + 77N+ 500.007.04E-053.42E-041.79E-038.25E-036.95E-042.55E-038.60E-032.99E-02 + 78K 79.395.87E-016.73E-011.58E-019.04E-031.11E+019.10E+011.39E+024.54E+01 + 78K 80.095.75E-016.88E-012.03E-012.29E-021.08E+018.82E+011.40E+025.77E+01 + 78K 81.395.53E-017.13E-012.88E-016.35E-021.03E+018.34E+011.42E+027.98E+01 + 78K 84.595.02E-017.52E-014.92E-012.39E-019.22E+007.26E+011.43E+021.29E+02 + 78K 88.394.50E-017.69E-017.06E-015.49E-018.12E+006.21E+011.38E+021.73E+02 + 78K 92.004.08E-017.67E-018.72E-018.93E-017.23E+005.39E+011.31E+022.02E+02 + 78K 98.003.48E-017.38E-011.07E+001.46E+006.03E+004.31E+011.16E+022.25E+02 + 78K 106.002.86E-016.75E-011.19E+002.07E+004.81E+003.26E+019.67E+012.25E+02 + 78K 118.002.19E-015.69E-011.20E+002.56E+003.54E+002.23E+017.17E+011.95E+02 + 78K 131.001.68E-014.65E-011.10E+002.65E+002.62E+001.54E+015.18E+011.54E+02 + 78K 148.001.23E-013.56E-019.14E-012.41E+001.85E+001.01E+013.45E+011.08E+02 + 78K 161.009.98E-022.93E-017.80E-012.14E+001.46E+007.53E+002.58E+018.24E+01 + 78K 178.007.76E-022.29E-016.30E-011.78E+001.10E+005.33E+001.80E+015.80E+01 + 78K 201.005.73E-021.69E-014.74E-011.37E+007.84E-013.52E+001.16E+013.71E+01 + 78K 230.004.11E-021.20E-013.39E-019.80E-015.40E-012.24E+007.13E+002.21E+01 + 78K 295.002.25E-026.42E-021.78E-015.00E-012.73E-019.88E-012.89E+008.31E+00 + 78K 380.001.26E-023.46E-029.22E-022.45E-011.38E-014.42E-011.17E+003.06E+00 + 78K 470.007.88E-032.11E-025.39E-021.35E-017.86E-022.30E-015.62E-011.34E+00 + 78K 580.005.07E-031.33E-023.24E-027.59E-024.54E-021.23E-012.78E-016.12E-01 + 78K 810.002.63E-036.71E-031.51E-023.18E-021.93E-024.79E-029.64E-021.87E-01 + 78K 1100.001.50E-033.72E-037.81E-031.50E-028.90E-032.10E-023.88E-026.82E-02 + 78K 1350.001.05E-032.54E-035.12E-039.35E-035.34E-031.23E-022.18E-023.62E-02 + 78K 1600.007.87E-041.86E-033.64E-036.38E-033.51E-038.03E-031.37E-022.20E-02 + 78L1 14.881.80E+003.89E+021.09E+043.37E+042.34E+025.11E+042.15E+062.01E+07 + 78L1 15.581.68E+003.11E+021.03E+045.91E+042.04E+024.12E+041.67E+061.83E+07 + 78L1 16.881.47E+002.09E+028.68E+038.70E+041.61E+022.82E+041.08E+061.42E+07 + 78L1 20.081.09E+008.64E+014.85E+038.46E+049.60E+011.26E+044.24E+056.78E+06 + 78L1 23.887.93E-013.47E+012.34E+035.23E+045.73E+015.63E+031.67E+052.85E+06 + 78L1 27.006.28E-011.79E+011.32E+033.25E+043.98E+013.20E+038.60E+041.48E+06 + 78L1 33.004.21E-015.97E+004.90E+021.30E+042.20E+011.29E+032.94E+044.87E+05 + 78L1 41.002.68E-011.86E+001.57E+024.26E+031.16E+014.89E+029.32E+031.41E+05 + 78L1 53.001.54E-015.64E-013.91E+011.03E+035.43E+001.59E+022.44E+033.23E+04 + 78L1 66.009.39E-022.67E-011.19E+012.91E+022.85E+006.20E+017.93E+029.12E+03 + 78L1 83.005.53E-021.51E-013.61E+007.70E+011.46E+002.38E+012.51E+022.46E+03 + 78L1 96.003.93E-021.10E-011.78E+003.34E+019.60E-011.31E+011.22E+021.08E+03 + 78L1 113.002.67E-027.75E-028.59E-011.34E+016.00E-016.77E+005.53E+014.35E+02 + 78L1 136.001.72E-025.16E-024.08E-015.00E+003.53E-013.26E+002.29E+011.57E+02 + 78L1 165.001.08E-023.32E-022.03E-011.90E+002.04E-011.55E+009.33E+005.55E+01 + 78L1 230.004.92E-031.52E-026.98E-024.28E-018.03E-024.51E-012.12E+009.88E+00 + 78L1 315.002.39E-037.23E-032.76E-021.23E-013.38E-021.49E-015.61E-012.10E+00 + 78L1 400.001.41E-034.17E-031.42E-025.23E-021.78E-026.69E-022.16E-016.91E-01 + 78L1 510.008.46E-042.43E-037.42E-032.32E-029.33E-033.07E-028.57E-022.37E-01 + 78L1 740.004.06E-041.12E-032.94E-037.45E-033.54E-039.92E-032.30E-025.21E-02 + 78L11000.002.33E-046.19E-041.46E-033.24E-031.64E-034.22E-038.68E-031.72E-02 + 78L11500.001.16E-042.89E-046.09E-041.16E-035.95E-041.42E-032.60E-034.47E-03 + 78L2 14.273.92E+001.94E+043.12E+065.93E+072.70E+012.09E+032.83E+047.85E+04 + 78L2 14.973.45E+001.54E+042.38E+065.24E+072.34E+011.74E+032.74E+041.39E+05 + 78L2 16.272.75E+001.02E+041.47E+063.88E+071.82E+011.27E+032.38E+042.07E+05 + 78L2 19.471.69E+004.19E+035.28E+051.68E+071.06E+016.42E+021.46E+042.11E+05 + 78L2 23.271.02E+001.75E+031.90E+056.43E+066.23E+003.25E+027.89E+031.39E+05 + 78L2 27.006.68E-018.44E+028.08E+042.74E+063.99E+001.84E+024.47E+038.41E+04 + 78L2 33.003.72E-013.18E+022.56E+048.25E+052.19E+008.54E+011.98E+033.77E+04 + 78L2 41.001.95E-011.12E+027.38E+032.17E+051.15E+003.72E+017.92E+021.43E+04 + 78L2 53.009.01E-023.26E+011.72E+034.38E+045.39E-011.40E+012.60E+024.20E+03 + 78L2 66.004.60E-021.15E+014.98E+021.11E+042.82E-016.10E+009.88E+011.42E+03 + 78L2 83.002.27E-023.95E+001.38E+022.62E+031.44E-012.57E+003.57E+014.45E+02 + 78L2 96.001.45E-022.02E+006.18E+011.05E+039.46E-021.49E+001.87E+012.12E+02 + 78L2 113.008.73E-039.55E-012.53E+013.82E+025.90E-028.15E-019.10E+009.20E+01 + 78L2 136.004.92E-034.13E-019.26E+001.22E+023.46E-024.11E-014.02E+003.57E+01 + 78L2 165.002.71E-031.74E-013.30E+003.76E+011.98E-022.03E-011.72E+001.34E+01 + 78L2 230.009.82E-044.11E-025.85E-015.21E+007.71E-036.15E-024.12E-012.53E+00 + 78L2 315.003.85E-041.10E-021.21E-018.57E-013.17E-032.04E-021.10E-015.44E-01 + 78L2 400.001.93E-044.17E-033.82E-022.29E-011.62E-038.95E-034.14E-021.76E-01 + 78L2 510.009.74E-051.61E-031.23E-026.33E-028.24E-043.95E-031.58E-025.76E-02 + 78L2 740.003.52E-054.05E-042.41E-039.90E-032.94E-041.17E-033.81E-031.13E-02 + 78L21000.001.62E-051.42E-047.04E-042.46E-031.28E-044.53E-041.28E-033.29E-03 + 78L21500.005.98E-063.80E-051.52E-044.43E-044.17E-051.32E-043.18E-046.96E-04 + 78L3 12.568.78E+004.62E+049.06E+062.09E+084.53E+007.77E+049.35E+071.23E+10 + 78L3 13.267.52E+003.52E+046.55E+061.73E+083.84E+005.93E+046.48E+078.13E+09 + 78L3 14.565.74E+002.19E+043.74E+061.16E+082.88E+003.72E+043.44E+073.97E+09 + 78L3 17.763.21E+008.05E+031.14E+064.09E+071.57E+001.38E+049.06E+068.76E+08 + 78L3 21.561.80E+003.03E+033.55E+051.32E+078.66E-015.26E+032.48E+062.02E+08 + 78L3 27.009.05E-019.74E+029.18E+043.28E+064.35E-011.72E+035.59E+053.71E+07 + 78L3 33.004.84E-013.55E+022.75E+049.06E+052.36E-016.32E+021.50E+058.29E+06 + 78L3 41.002.44E-011.19E+027.47E+032.20E+051.21E-012.15E+023.65E+041.66E+06 + 78L3 53.001.07E-013.30E+011.60E+034.01E+045.57E-026.01E+017.03E+032.55E+05 + 78L3 66.005.23E-021.10E+014.32E+029.25E+032.86E-022.03E+011.75E+035.23E+04 + 78L3 83.002.47E-023.54E+001.10E+021.99E+031.43E-026.53E+004.19E+021.03E+04 + 78L3 96.001.53E-021.72E+004.64E+017.47E+029.26E-033.19E+001.71E+023.69E+03 + 78L3 113.008.94E-037.72E-011.77E+012.50E+025.68E-031.43E+006.31E+011.19E+03 + 78L3 136.004.86E-033.11E-015.92E+007.22E+013.26E-035.77E-012.06E+013.35E+02 + 78L3 165.002.58E-031.22E-011.91E+001.99E+011.84E-032.25E-016.55E+009.09E+01 + 78L3 230.008.79E-042.47E-022.79E-012.22E+006.89E-044.50E-029.49E-011.02E+01 + 78L3 315.003.25E-045.66E-034.70E-022.91E-012.76E-041.00E-021.60E-011.38E+00 + 78L3 400.001.56E-041.91E-031.26E-026.52E-021.39E-043.26E-034.28E-023.17E-01 + 78L3 510.007.59E-056.55E-043.45E-031.50E-027.04E-051.06E-031.15E-027.40E-02 + 78L3 740.002.68E-051.39E-045.31E-041.80E-032.56E-052.03E-041.65E-038.64E-03 + 78L31000.001.22E-054.41E-051.32E-043.74E-041.18E-055.78E-053.61E-041.64E-03 + 78L31500.004.61E-061.10E-052.47E-055.58E-054.55E-061.26E-055.16E-051.93E-04 + 78M1 4.303.08E+001.64E+041.09E+064.89E+072.19E+035.67E+062.79E+093.04E+11 + 78M1 5.302.46E+006.88E+034.92E+052.06E+071.18E+032.04E+067.18E+087.21E+10 + 78M1 7.301.59E+001.76E+031.48E+054.90E+064.50E+024.25E+059.23E+077.74E+09 + 78M1 11.307.79E-012.57E+022.48E+049.18E+051.22E+025.12E+045.99E+063.70E+08 + 78M1 18.303.20E-012.71E+012.76E+031.09E+052.89E+015.16E+033.23E+051.36E+07 + 78M1 27.001.47E-013.99E+004.04E+021.51E+049.10E+008.40E+023.30E+049.99E+05 + 78M1 42.005.73E-024.65E-014.06E+011.32E+032.46E+001.13E+022.72E+035.62E+04 + 78M1 54.003.28E-021.60E-011.06E+013.11E+021.17E+003.72E+016.88E+021.14E+04 + 78M1 72.001.70E-026.07E-022.34E+005.79E+015.06E-011.08E+011.49E+021.93E+03 + 78M1 105.007.00E-032.27E-023.65E-016.56E+001.69E-012.24E+002.16E+012.02E+02 + 78M1 150.002.99E-039.71E-038.08E-029.45E-016.09E-025.40E-013.80E+002.63E+01 + 78M1 280.006.93E-042.17E-039.64E-035.24E-021.06E-025.31E-022.26E-019.63E-01 + 78M1 500.001.97E-045.77E-041.84E-036.11E-032.24E-037.60E-032.21E-026.34E-02 + 78M2 4.036.99E+002.51E+063.70E+096.51E+112.91E+022.06E+052.57E+077.06E+08 + 78M2 5.035.14E+008.35E+058.75E+081.41E+111.50E+027.52E+048.59E+063.76E+08 + 78M2 7.032.88E+001.58E+051.02E+081.36E+105.49E+011.69E+041.61E+068.55E+07 + 78M2 11.031.14E+001.69E+045.93E+065.95E+081.42E+012.38E+031.69E+058.54E+06 + 78M2 18.033.56E-011.50E+032.87E+052.02E+073.28E+002.99E+021.50E+046.02E+05 + 78M2 27.001.25E-012.08E+022.52E+041.29E+069.85E-015.71E+012.11E+036.59E+04 + 78M2 42.003.71E-022.46E+011.85E+036.71E+042.67E-019.75E+002.55E+025.84E+03 + 78M2 54.001.81E-027.43E+004.31E+021.27E+041.27E-013.63E+007.77E+011.48E+03 + 78M2 72.007.77E-031.92E+008.33E+011.94E+035.50E-021.19E+002.03E+013.10E+02 + 78M2 105.002.51E-033.36E-011.01E+011.73E+021.84E-022.84E-013.58E+004.09E+01 + 78M2 150.008.58E-046.72E-021.44E+001.85E+016.60E-037.54E-027.17E-016.23E+00 + 78M2 280.001.33E-044.54E-035.64E-024.46E-011.12E-037.96E-034.76E-022.61E-01 + 78M2 500.002.55E-054.43E-043.50E-031.84E-022.22E-041.09E-034.45E-031.67E-02 + 78M3 3.642.00E+015.80E+069.55E+091.79E+124.63E+011.01E+071.43E+112.19E+14 + 78M3 4.641.30E+011.72E+061.94E+093.21E+112.23E+013.03E+062.68E+102.75E+13 + 78M3 6.646.31E+002.85E+051.88E+082.51E+107.53E+005.06E+052.26E+091.32E+12 + 78M3 10.642.13E+002.66E+049.18E+068.89E+081.80E+004.81E+048.94E+072.63E+10 + 78M3 17.645.80E-012.10E+033.82E+052.55E+073.87E-013.87E+032.90E+064.37E+08 + 78M3 27.001.77E-012.48E+022.74E+041.31E+061.06E-014.64E+021.69E+051.52E+07 + 78M3 42.004.81E-022.72E+011.83E+036.15E+042.80E-025.15E+019.30E+035.09E+05 + 78M3 54.002.22E-027.76E+003.99E+021.09E+041.31E-021.48E+011.84E+037.72E+04 + 78M3 72.009.03E-031.86E+007.03E+011.51E+035.53E-033.56E+002.96E+029.29E+03 + 78M3 105.002.71E-032.89E-017.37E+001.15E+021.79E-035.54E-012.83E+016.21E+02 + 78M3 150.008.60E-045.05E-028.95E-011.03E+016.21E-049.64E-023.27E+005.22E+01 + 78M3 280.001.19E-042.57E-032.43E-021.67E-011.00E-044.72E-038.63E-028.41E-01 + 78M3 500.002.08E-051.88E-041.02E-034.53E-031.93E-053.12E-043.53E-032.34E-02 + 78M4 3.205.41E+011.77E+058.45E+099.43E+131.44E+013.29E+052.38E+091.53E+12 + 78M4 4.202.37E+014.46E+041.26E+098.77E+126.02E+008.45E+043.80E+081.99E+11 + 78M4 6.206.78E+006.16E+038.16E+072.99E+111.69E+001.20E+042.81E+071.06E+10 + 78M4 10.201.23E+004.95E+022.46E+064.16E+093.25E-019.81E+021.05E+062.58E+08 + 78M4 17.201.84E-013.50E+016.24E+044.98E+075.55E-027.06E+013.53E+045.43E+06 + 78M4 27.003.30E-023.54E+002.63E+031.15E+061.17E-027.29E+001.98E+032.02E+05 + 78M4 42.005.74E-033.71E-011.20E+023.03E+042.46E-037.88E-011.23E+028.37E+03 + 78M4 54.002.08E-031.03E-012.10E+013.91E+031.00E-032.23E-012.58E+011.39E+03 + 78M4 72.006.41E-042.36E-022.89E+003.85E+023.53E-045.26E-024.39E+001.82E+02 + 78M4 105.001.35E-043.46E-032.21E-011.92E+018.85E-057.99E-034.42E-011.31E+01 + 78M4 150.003.09E-055.73E-042.04E-021.19E+002.36E-051.36E-035.21E-021.13E+00 + 78M4 280.002.42E-062.65E-053.69E-041.08E-022.28E-066.30E-051.35E-031.75E-02 + 78M4 500.002.45E-071.73E-061.17E-051.76E-042.58E-073.83E-065.06E-054.33E-04 + 78M5 3.128.23E+011.99E+051.66E+101.60E+148.50E+002.47E+041.29E+105.53E+14 + 78M5 4.123.50E+014.78E+042.36E+091.40E+133.49E+006.20E+031.86E+094.63E+13 + 78M5 6.129.65E+006.32E+031.46E+084.45E+119.65E-018.63E+021.17E+081.36E+12 + 78M5 10.121.69E+004.86E+024.22E+065.79E+091.85E-017.03E+013.47E+061.58E+10 + 78M5 17.122.43E-013.31E+011.03E+056.53E+073.18E-025.15E+008.81E+041.55E+08 + 78M5 27.004.16E-023.17E+004.11E+031.40E+066.73E-035.41E-013.66E+032.95E+06 + 78M5 42.007.05E-033.21E-011.81E+023.49E+041.45E-036.18E-021.68E+026.67E+04 + 78M5 54.002.52E-038.64E-023.07E+014.33E+036.01E-041.81E-022.93E+017.95E+03 + 78M5 72.007.65E-041.91E-024.05E+004.04E+022.17E-044.52E-033.96E+007.15E+02 + 78M5 105.001.59E-042.65E-032.88E-011.84E+015.62E-057.45E-042.90E-013.19E+01 + 78M5 150.003.60E-054.14E-042.41E-021.02E+001.56E-051.40E-042.49E-021.78E+00 + 78M5 280.002.86E-061.77E-053.44E-047.11E-031.69E-068.27E-063.58E-041.32E-02 + 78M5 500.003.23E-071.16E-068.28E-068.39E-052.33E-077.09E-078.20E-061.65E-04 + 78N+ 50.002.84E-026.89E+004.48E+021.85E+045.21E-012.58E+011.42E+036.19E+04 + 78N+ 70.001.13E-021.34E+005.99E+011.69E+031.93E-015.68E+001.84E+025.21E+03 + 78N+ 100.004.33E-032.52E-017.61E+001.48E+026.92E-021.23E+002.36E+014.31E+02 + 78N+ 150.001.46E-033.94E-027.68E-011.01E+012.15E-022.30E-012.57E+002.93E+01 + 78N+ 200.006.80E-041.12E-021.59E-011.62E+009.47E-037.35E-025.84E-014.83E+00 + 78N+ 500.007.47E-053.72E-041.98E-039.13E-037.75E-042.84E-039.57E-033.33E-02 + 79K 81.725.54E-016.10E-011.40E-017.68E-031.11E+018.74E+011.29E+024.08E+01 + 79K 82.425.43E-016.23E-011.78E-011.93E-021.08E+018.48E+011.30E+025.15E+01 + 79K 83.725.23E-016.45E-012.52E-015.31E-021.03E+018.03E+011.32E+027.09E+01 + 79K 86.924.76E-016.81E-014.27E-011.99E-019.28E+007.03E+011.33E+021.14E+02 + 79K 90.724.28E-016.99E-016.15E-014.59E-018.19E+006.04E+011.29E+021.54E+02 + 79K 95.003.82E-016.97E-017.85E-018.06E-017.17E+005.13E+011.21E+021.84E+02 + 79K 101.003.28E-016.71E-019.52E-011.29E+006.01E+004.13E+011.08E+022.04E+02 + 79K 109.002.72E-016.17E-011.06E+001.82E+004.83E+003.16E+019.05E+012.04E+02 + 79K 121.002.09E-015.24E-011.08E+002.25E+003.58E+002.18E+016.78E+011.78E+02 + 79K 134.001.62E-014.32E-019.96E-012.35E+002.68E+001.53E+014.95E+011.43E+02 + 79K 151.001.20E-013.34E-018.40E-012.18E+001.91E+001.01E+013.34E+011.02E+02 + 79K 164.009.74E-022.77E-017.23E-011.95E+001.51E+007.57E+002.51E+017.81E+01 + 79K 181.007.62E-022.19E-015.90E-011.65E+001.14E+005.40E+001.78E+015.56E+01 + 79K 204.005.66E-021.63E-014.50E-011.28E+008.19E-013.59E+001.16E+013.60E+01 + 79K 230.004.22E-021.21E-013.37E-019.64E-015.87E-012.40E+007.51E+002.29E+01 + 79K 295.002.32E-026.52E-021.80E-015.02E-012.97E-011.06E+003.06E+008.67E+00 + 79K 380.001.30E-023.54E-029.42E-022.49E-011.50E-014.75E-011.24E+003.21E+00 + 79K 470.008.15E-032.18E-025.55E-021.39E-018.52E-022.48E-015.97E-011.42E+00 + 79K 580.005.26E-031.38E-023.36E-027.86E-024.92E-021.33E-012.96E-016.47E-01 + 79K 810.002.74E-037.00E-031.57E-023.32E-022.08E-025.15E-021.03E-011.98E-01 + 79K 1100.001.56E-033.90E-038.20E-031.58E-029.60E-032.26E-024.15E-027.26E-02 + 79K 1350.001.09E-032.66E-035.39E-039.84E-035.75E-031.33E-022.33E-023.86E-02 + 79K 1600.008.21E-041.95E-033.83E-036.73E-033.77E-038.62E-031.47E-022.34E-02 + 79L1 15.351.69E+003.65E+029.76E+032.86E+042.35E+024.89E+041.97E+061.78E+07 + 79L1 16.051.58E+002.95E+029.32E+035.03E+042.06E+023.97E+041.55E+061.62E+07 + 79L1 17.351.39E+002.01E+027.90E+037.47E+041.63E+022.75E+041.02E+061.27E+07 + 79L1 20.551.04E+008.56E+014.54E+037.50E+049.85E+011.25E+044.08E+056.27E+06 + 79L1 24.357.63E-013.54E+012.25E+034.78E+045.95E+015.69E+031.64E+052.70E+06 + 79L1 28.005.85E-011.68E+011.18E+032.81E+043.93E+013.00E+037.73E+041.29E+06 + 79L1 34.003.98E-015.89E+004.54E+021.16E+042.21E+011.25E+032.74E+044.39E+05 + 79L1 42.002.57E-011.92E+001.52E+023.95E+031.18E+014.85E+028.97E+031.32E+05 + 79L1 54.001.49E-015.96E-013.95E+019.95E+025.65E+001.61E+022.42E+033.12E+04 + 79L1 67.009.21E-022.77E-011.24E+012.91E+023.00E+006.41E+018.02E+029.03E+03 + 79L1 84.005.48E-021.53E-013.85E+007.93E+011.55E+002.48E+012.58E+022.49E+03 + 79L1 97.003.91E-021.10E-011.91E+003.50E+011.02E+001.38E+011.27E+021.10E+03 + 79L1 114.002.67E-027.76E-029.24E-011.43E+016.43E-017.17E+005.78E+014.48E+02 + 79L1 137.001.73E-025.17E-024.37E-015.36E+003.80E-013.47E+002.41E+011.63E+02 + 79L1 165.001.11E-023.39E-022.21E-012.11E+002.24E-011.69E+001.02E+016.01E+01 + 79L1 230.005.09E-031.56E-027.46E-024.68E-018.82E-024.94E-012.30E+001.07E+01 + 79L1 315.002.48E-037.50E-032.93E-021.33E-013.71E-021.63E-016.10E-012.28E+00 + 79L1 400.001.47E-034.35E-031.50E-025.63E-021.95E-027.30E-022.34E-017.48E-01 + 79L1 510.008.81E-042.55E-037.88E-032.49E-021.02E-023.34E-029.31E-022.56E-01 + 79L1 740.004.25E-041.18E-033.12E-037.97E-033.87E-031.08E-022.50E-025.64E-02 + 79L11000.002.44E-046.55E-041.56E-033.46E-031.79E-034.58E-039.41E-031.86E-02 + 79L11500.001.21E-043.06E-046.49E-041.24E-036.46E-041.55E-032.82E-034.83E-03 + 79L2 14.733.69E+001.81E+042.78E+065.08E+072.72E+011.99E+032.59E+046.78E+04 + 79L2 15.433.27E+001.44E+042.13E+064.51E+072.37E+011.68E+032.52E+041.20E+05 + 79L2 16.732.63E+009.62E+031.34E+063.39E+071.85E+011.23E+032.21E+041.81E+05 + 79L2 19.931.63E+004.06E+034.95E+051.51E+071.10E+016.35E+021.38E+041.90E+05 + 79L2 23.731.00E+001.73E+031.82E+055.95E+066.51E+003.27E+027.62E+031.29E+05 + 79L2 28.006.24E-017.70E+027.05E+042.31E+063.97E+001.74E+024.07E+037.40E+04 + 79L2 34.003.55E-013.00E+022.32E+047.24E+052.23E+008.28E+011.85E+033.40E+04 + 79L2 42.001.90E-011.08E+026.95E+031.99E+051.19E+003.70E+017.61E+021.33E+04 + 79L2 54.008.92E-023.25E+011.67E+034.16E+045.66E-011.42E+012.56E+024.04E+03 + 79L2 67.004.62E-021.17E+014.95E+021.08E+043.00E-016.29E+009.94E+011.39E+03 + 79L2 84.002.31E-024.08E+001.40E+022.61E+031.55E-012.69E+003.66E+014.46E+02 + 79L2 97.001.48E-022.10E+006.34E+011.06E+031.02E-011.57E+001.93E+012.15E+02 + 79L2 114.009.01E-031.00E+002.62E+013.91E+026.40E-028.64E-019.48E+009.44E+01 + 79L2 137.005.11E-034.37E-019.70E+001.26E+023.77E-024.39E-014.23E+003.71E+01 + 79L2 165.002.88E-031.91E-013.60E+004.08E+012.21E-022.23E-011.88E+001.44E+01 + 79L2 230.001.05E-034.51E-026.40E-015.67E+008.61E-036.78E-024.50E-012.74E+00 + 79L2 315.004.14E-041.21E-021.33E-019.35E-013.55E-032.25E-021.20E-015.93E-01 + 79L2 400.002.08E-044.58E-034.19E-022.51E-011.82E-039.91E-034.55E-021.92E-01 + 79L2 510.001.05E-041.78E-031.36E-026.95E-029.24E-044.39E-031.74E-026.32E-02 + 79L2 740.003.85E-054.47E-042.66E-031.09E-023.30E-041.30E-034.22E-031.25E-02 + 79L21000.001.76E-051.57E-047.80E-042.72E-031.44E-045.05E-041.42E-033.64E-03 + 79L21500.006.53E-064.21E-051.69E-044.91E-044.69E-051.47E-043.55E-047.73E-04 + 79L3 12.928.31E+004.32E+048.15E+061.82E+084.42E+007.51E+048.72E+071.11E+10 + 79L3 13.627.15E+003.31E+045.95E+061.52E+083.76E+005.78E+046.11E+077.43E+09 + 79L3 14.925.50E+002.09E+043.44E+061.03E+082.84E+003.66E+043.30E+073.70E+09 + 79L3 18.123.11E+007.83E+031.07E+063.74E+071.57E+001.39E+048.92E+068.42E+08 + 79L3 21.921.76E+003.00E+033.42E+051.23E+078.75E-015.38E+032.50E+061.99E+08 + 79L3 28.008.35E-018.73E+027.87E+042.71E+064.13E-011.59E+034.94E+053.15E+07 + 79L3 34.004.56E-013.29E+022.45E+047.81E+052.28E-016.05E+021.38E+057.41E+06 + 79L3 42.002.34E-011.14E+026.90E+031.97E+051.20E-012.12E+023.50E+041.55E+06 + 79L3 54.001.04E-013.24E+011.53E+033.73E+045.59E-026.08E+016.98E+032.48E+05 + 79L3 67.005.19E-021.10E+014.22E+028.83E+032.91E-022.09E+011.78E+035.23E+04 + 79L3 84.002.48E-023.59E+001.10E+021.94E+031.47E-026.83E+004.33E+021.05E+04 + 79L3 97.001.54E-021.76E+004.66E+017.38E+029.53E-033.36E+001.78E+023.81E+03 + 79L3 114.009.08E-037.95E-011.79E+012.50E+025.87E-031.52E+006.65E+011.24E+03 + 79L3 137.004.96E-033.23E-016.07E+007.29E+013.39E-036.17E-012.20E+013.53E+02 + 79L3 165.002.70E-031.31E-012.04E+002.11E+011.95E-032.49E-017.27E+001.01E+02 + 79L3 230.009.23E-042.66E-022.99E-012.36E+007.33E-044.98E-021.05E+001.13E+01 + 79L3 315.003.42E-046.08E-035.04E-023.11E-012.93E-041.11E-021.77E-011.53E+00 + 79L3 400.001.65E-042.05E-031.35E-026.96E-021.48E-043.59E-034.74E-023.50E-01 + 79L3 510.008.02E-057.03E-043.70E-031.60E-027.47E-051.17E-031.28E-028.16E-02 + 79L3 740.002.82E-051.49E-045.69E-041.93E-032.72E-052.22E-041.81E-039.52E-03 + 79L31000.001.28E-054.72E-051.41E-044.01E-041.25E-056.29E-053.97E-041.80E-03 + 79L31500.004.86E-061.17E-052.64E-055.98E-054.80E-061.37E-055.65E-052.12E-04 + 79M1 4.422.91E+001.59E+041.05E+064.25E+072.22E+035.50E+062.61E+092.74E+11 + 79M1 5.422.33E+006.80E+034.83E+051.91E+071.21E+032.02E+066.94E+086.76E+10 + 79M1 7.421.53E+001.79E+031.47E+054.81E+064.72E+024.36E+059.30E+077.62E+09 + 79M1 11.427.61E-012.70E+022.53E+049.14E+051.30E+025.42E+046.27E+063.80E+08 + 79M1 18.423.17E-012.95E+012.89E+031.12E+053.13E+015.56E+033.46E+051.44E+07 + 79M1 27.001.48E-014.60E+004.43E+021.62E+041.00E+019.35E+023.67E+041.11E+06 + 79M1 42.005.81E-025.40E-014.53E+011.44E+032.72E+001.25E+023.02E+036.20E+04 + 79M1 54.003.33E-021.82E-011.20E+013.42E+021.30E+004.12E+017.61E+021.26E+04 + 79M1 72.001.73E-026.60E-022.66E+006.43E+015.58E-011.19E+011.65E+022.12E+03 + 79M1 105.007.17E-032.37E-024.13E-017.35E+001.87E-012.47E+002.38E+012.22E+02 + 79M1 150.003.08E-031.00E-028.96E-021.06E+006.72E-025.95E-014.17E+002.88E+01 + 79M1 280.007.18E-042.26E-031.04E-025.76E-021.17E-025.83E-022.48E-011.05E+00 + 79M1 500.002.05E-046.07E-041.97E-036.62E-032.46E-038.33E-032.41E-026.91E-02 + 79M2 4.156.59E+002.37E+063.36E+095.71E+112.96E+022.00E+052.40E+076.27E+08 + 79M2 5.154.89E+008.09E+058.24E+081.29E+111.55E+027.49E+048.27E+063.46E+08 + 79M2 7.152.79E+001.58E+059.99E+071.31E+105.80E+011.73E+041.60E+068.22E+07 + 79M2 11.151.13E+001.75E+046.06E+065.96E+081.53E+012.50E+031.75E+058.56E+06 + 79M2 18.153.60E-011.58E+033.01E+052.08E+073.57E+003.20E+021.58E+046.22E+05 + 79M2 27.001.30E-012.27E+022.75E+041.40E+061.10E+006.28E+012.29E+037.08E+04 + 79M2 42.003.87E-022.69E+012.02E+037.27E+042.97E-011.07E+012.77E+026.29E+03 + 79M2 54.001.89E-028.14E+004.71E+021.38E+041.42E-014.00E+008.47E+011.60E+03 + 79M2 72.008.18E-032.10E+009.10E+012.11E+036.14E-021.31E+002.21E+013.36E+02 + 79M2 105.002.66E-033.68E-011.10E+011.88E+022.06E-023.14E-013.91E+004.44E+01 + 79M2 150.009.14E-047.39E-021.58E+002.02E+017.39E-038.33E-027.86E-016.79E+00 + 79M2 280.001.43E-045.01E-036.21E-024.89E-011.26E-038.83E-035.24E-022.87E-01 + 79M2 500.002.77E-054.90E-043.87E-032.03E-022.49E-041.21E-034.93E-031.84E-02 + 79M3 3.741.91E+015.50E+068.75E+091.59E+124.57E+019.94E+061.36E+112.02E+14 + 79M3 4.741.26E+011.68E+061.84E+092.96E+112.23E+013.05E+062.64E+102.65E+13 + 79M3 6.746.18E+002.86E+051.86E+082.42E+107.68E+005.26E+052.33E+091.35E+12 + 79M3 10.742.12E+002.75E+049.37E+068.90E+081.87E+005.14E+049.54E+072.80E+10 + 79M3 17.745.87E-012.21E+033.98E+052.61E+074.06E-014.20E+033.17E+064.76E+08 + 79M3 27.001.83E-012.68E+022.95E+041.40E+061.14E-015.19E+021.91E+051.72E+07 + 79M3 42.004.99E-022.94E+011.97E+036.55E+042.99E-025.76E+011.05E+045.75E+05 + 79M3 54.002.31E-028.39E+004.29E+021.16E+041.40E-021.65E+012.07E+038.70E+04 + 79M3 72.009.43E-032.01E+007.57E+011.61E+035.90E-033.98E+003.33E+021.04E+04 + 79M3 105.002.84E-033.13E-017.93E+001.23E+021.91E-036.18E-013.18E+016.96E+02 + 79M3 150.009.06E-045.47E-029.63E-011.10E+016.64E-041.07E-013.66E+005.84E+01 + 79M3 280.001.25E-042.78E-032.62E-021.80E-011.07E-045.25E-039.63E-029.37E-01 + 79M3 500.002.20E-052.03E-041.10E-034.87E-032.06E-053.46E-043.92E-032.60E-02 + 79M4 3.295.16E+011.68E+057.72E+098.39E+131.42E+013.23E+052.25E+091.41E+12 + 79M4 4.292.31E+014.35E+041.20E+098.24E+126.05E+008.56E+043.76E+081.91E+11 + 79M4 6.296.76E+006.23E+038.16E+072.97E+111.74E+001.26E+042.90E+071.08E+10 + 79M4 10.291.26E+005.14E+022.56E+064.34E+093.41E-011.06E+031.12E+062.72E+08 + 79M4 17.291.92E-013.71E+016.66E+045.35E+075.91E-027.76E+013.86E+045.88E+06 + 79M4 27.003.52E-023.86E+002.92E+031.29E+061.27E-028.22E+002.24E+032.27E+05 + 79M4 42.006.17E-034.06E-011.33E+023.39E+042.68E-038.89E-011.39E+029.40E+03 + 79M4 54.002.24E-031.13E-012.33E+014.38E+031.09E-032.51E-012.91E+011.57E+03 + 79M4 72.006.91E-042.60E-023.20E+004.31E+023.85E-045.94E-024.95E+002.05E+02 + 79M4 105.001.46E-043.81E-032.45E-012.15E+019.69E-059.02E-034.99E-011.47E+01 + 79M4 150.003.35E-056.33E-042.26E-021.33E+002.59E-051.53E-035.89E-021.27E+00 + 79M4 280.002.62E-062.94E-054.10E-041.21E-022.51E-067.13E-051.52E-031.98E-02 + 79M4 500.002.66E-071.93E-061.30E-051.98E-042.84E-074.33E-065.73E-054.90E-04 + 79M5 3.217.86E+011.86E+051.53E+101.43E+148.37E+002.38E+041.23E+105.11E+14 + 79M5 4.213.41E+014.61E+042.28E+091.32E+133.50E+006.14E+031.85E+094.51E+13 + 79M5 6.219.63E+006.30E+031.48E+084.44E+119.89E-018.83E+021.22E+081.41E+12 + 79M5 10.211.72E+004.97E+024.43E+066.05E+091.93E-017.39E+013.75E+061.71E+10 + 79M5 17.212.52E-013.45E+011.11E+057.01E+073.36E-025.50E+009.74E+041.73E+08 + 79M5 27.004.42E-023.40E+004.58E+031.56E+067.25E-035.92E-014.19E+033.42E+06 + 79M5 42.007.54E-033.45E-012.02E+023.89E+041.57E-036.75E-021.93E+027.73E+04 + 79M5 54.002.70E-039.31E-023.42E+014.84E+036.50E-041.98E-023.35E+019.19E+03 + 79M5 72.008.22E-042.07E-024.52E+004.51E+022.35E-044.93E-034.53E+008.25E+02 + 79M5 105.001.71E-042.87E-033.21E-012.05E+016.10E-058.14E-043.32E-013.68E+01 + 79M5 150.003.91E-054.50E-042.69E-021.14E+001.70E-051.53E-042.84E-022.05E+00 + 79M5 280.003.16E-061.92E-053.83E-047.94E-031.84E-069.04E-064.07E-041.51E-02 + 79M5 500.003.39E-071.27E-069.16E-069.35E-052.53E-077.75E-079.24E-061.88E-04 + 79N+ 50.002.97E-027.65E+004.97E+022.06E+045.79E-012.89E+011.63E+037.14E+04 + 79N+ 70.001.18E-021.49E+006.66E+011.87E+032.14E-016.36E+002.09E+025.97E+03 + 79N+ 100.004.54E-032.80E-018.45E+001.64E+027.68E-021.37E+002.67E+014.91E+02 + 79N+ 150.001.53E-034.36E-028.54E-011.12E+012.39E-022.56E-012.89E+003.31E+01 + 79N+ 200.007.15E-041.24E-021.78E-011.80E+001.05E-028.16E-026.53E-015.44E+00 + 79N+ 500.007.93E-054.06E-042.19E-031.02E-028.58E-043.14E-031.06E-023.69E-02 + 80K 84.105.23E-015.53E-011.24E-016.59E-031.11E+018.41E+011.19E+023.68E+01 + 80K 84.805.13E-015.65E-011.57E-011.64E-021.08E+018.16E+011.21E+024.61E+01 + 80K 86.104.94E-015.85E-012.20E-014.47E-021.04E+017.74E+011.23E+026.32E+01 + 80K 89.304.52E-016.18E-013.73E-011.67E-019.34E+006.80E+011.23E+021.01E+02 + 80K 93.104.08E-016.35E-015.37E-013.85E-018.27E+005.87E+011.20E+021.37E+02 + 80K 97.003.68E-016.36E-016.76E-016.53E-017.35E+005.08E+011.14E+021.63E+02 + 80K 103.003.18E-016.17E-018.32E-011.08E+006.18E+004.11E+011.03E+021.83E+02 + 80K 111.002.64E-015.71E-019.44E-011.55E+004.99E+003.16E+018.69E+011.86E+02 + 80K 123.002.04E-014.90E-019.75E-011.97E+003.72E+002.20E+016.58E+011.66E+02 + 80K 136.001.59E-014.08E-019.12E-012.10E+002.79E+001.55E+014.86E+011.34E+02 + 80K 153.001.18E-013.19E-017.82E-011.98E+002.00E+001.03E+013.31E+019.75E+01 + 80K 166.009.66E-022.66E-016.79E-011.80E+001.59E+007.78E+002.51E+017.55E+01 + 80K 183.007.58E-022.12E-015.61E-011.54E+001.21E+005.57E+001.79E+015.43E+01 + 80K 206.005.66E-021.59E-014.33E-011.22E+008.66E-013.73E+001.17E+013.56E+01 + 80K 235.004.11E-021.15E-013.18E-018.99E-016.01E-012.40E+007.32E+002.17E+01 + 80K 300.002.30E-026.36E-021.74E-014.81E-013.08E-011.08E+003.04E+008.45E+00 + 80K 385.001.30E-023.52E-029.32E-022.45E-011.57E-014.90E-011.26E+003.20E+00 + 80K 470.008.44E-032.24E-025.72E-021.43E-019.24E-022.66E-016.35E-011.49E+00 + 80K 580.005.45E-031.43E-023.48E-028.14E-025.33E-021.43E-013.16E-016.83E-01 + 80K 810.002.84E-037.30E-031.65E-023.47E-022.25E-025.53E-021.10E-012.11E-01 + 80K 1100.001.63E-034.08E-038.61E-031.66E-021.03E-022.42E-024.43E-027.72E-02 + 80K 1350.001.14E-032.80E-035.67E-031.04E-026.19E-031.42E-022.49E-024.11E-02 + 80K 1600.008.56E-042.05E-034.04E-037.09E-034.04E-039.26E-031.57E-022.50E-02 + 80L1 15.841.59E+003.44E+028.79E+032.44E+042.35E+024.67E+041.81E+061.58E+07 + 80L1 16.541.49E+002.79E+028.42E+034.29E+042.07E+023.82E+041.44E+061.44E+07 + 80L1 17.841.31E+001.93E+027.21E+036.44E+041.65E+022.67E+049.54E+051.15E+07 + 80L1 21.049.90E-018.46E+014.24E+036.66E+041.01E+021.24E+043.92E+055.78E+06 + 80L1 24.847.34E-013.60E+012.15E+034.37E+046.17E+015.74E+031.60E+052.56E+06 + 80L1 28.005.85E-011.92E+011.25E+032.81E+044.32E+013.31E+038.44E+041.36E+06 + 80L1 34.004.00E-016.82E+004.89E+021.20E+042.43E+011.37E+032.99E+044.68E+05 + 80L1 42.002.59E-012.24E+001.66E+024.16E+031.30E+015.35E+029.80E+031.42E+05 + 80L1 54.001.51E-016.82E-014.39E+011.07E+036.21E+001.78E+022.64E+033.36E+04 + 80L1 67.009.34E-023.04E-011.39E+013.17E+023.30E+007.05E+018.75E+029.75E+03 + 80L1 84.005.57E-021.61E-014.35E+008.73E+011.71E+002.73E+012.81E+022.69E+03 + 80L1 97.003.99E-021.14E-012.16E+003.87E+011.13E+001.51E+011.38E+021.19E+03 + 80L1 114.002.73E-027.97E-021.03E+001.58E+017.06E-017.86E+006.30E+014.85E+02 + 80L1 137.001.77E-025.29E-024.82E-015.95E+004.17E-013.80E+002.63E+011.77E+02 + 80L1 165.001.14E-023.48E-022.41E-012.33E+002.46E-011.86E+001.11E+016.51E+01 + 80L1 230.005.24E-031.61E-028.00E-025.13E-019.68E-025.40E-012.51E+001.16E+01 + 80L1 315.002.57E-037.78E-033.12E-021.45E-014.07E-021.78E-016.63E-012.46E+00 + 80L1 400.001.52E-034.54E-031.60E-026.06E-022.13E-027.96E-022.54E-018.10E-01 + 80L1 510.009.18E-042.67E-038.37E-032.67E-021.12E-023.64E-021.01E-012.78E-01 + 80L1 740.004.44E-041.24E-033.32E-038.54E-034.23E-031.18E-022.71E-026.11E-02 + 80L11000.002.56E-046.92E-041.66E-033.70E-031.95E-034.98E-031.02E-022.01E-02 + 80L11500.001.27E-043.25E-046.92E-041.33E-037.01E-041.68E-033.05E-035.22E-03 + 80L2 15.213.48E+001.68E+042.47E+064.35E+072.74E+011.91E+032.38E+045.89E+04 + 80L2 15.913.09E+001.34E+041.92E+063.89E+072.39E+011.61E+032.32E+041.04E+05 + 80L2 17.212.50E+009.11E+031.23E+062.96E+071.89E+011.20E+032.05E+041.59E+05 + 80L2 20.411.58E+003.94E+034.63E+051.36E+071.13E+016.28E+021.31E+041.71E+05 + 80L2 24.219.79E-011.70E+031.74E+055.50E+066.80E+003.28E+027.35E+031.19E+05 + 80L2 28.006.48E-018.37E+027.58E+042.40E+064.40E+001.88E+024.26E+037.42E+04 + 80L2 34.003.69E-013.26E+022.50E+047.62E+052.47E+008.99E+011.96E+033.49E+04 + 80L2 42.001.98E-011.18E+027.50E+032.10E+051.32E+004.02E+018.10E+021.38E+04 + 80L2 54.009.35E-023.54E+011.80E+034.43E+046.28E-011.55E+012.75E+024.25E+03 + 80L2 67.004.86E-021.28E+015.36E+021.15E+043.34E-016.87E+001.07E+021.48E+03 + 80L2 84.002.44E-024.45E+001.52E+022.80E+031.73E-012.94E+003.95E+014.76E+02 + 80L2 97.001.57E-022.29E+006.88E+011.15E+031.14E-011.72E+002.09E+012.30E+02 + 80L2 114.009.54E-031.09E+002.85E+014.21E+027.13E-029.47E-011.03E+011.01E+02 + 80L2 137.005.42E-034.78E-011.06E+011.36E+024.20E-024.82E-014.59E+003.99E+01 + 80L2 165.003.07E-032.09E-013.92E+004.41E+012.47E-022.45E-012.04E+001.56E+01 + 80L2 230.001.13E-034.95E-027.00E-016.16E+009.62E-037.46E-024.92E-012.98E+00 + 80L2 315.004.45E-041.32E-021.45E-011.02E+003.97E-032.48E-021.32E-016.47E-01 + 80L2 400.002.24E-045.04E-034.61E-022.74E-012.04E-031.10E-025.00E-022.10E-01 + 80L2 510.001.13E-041.96E-031.50E-027.62E-021.04E-034.86E-031.91E-026.93E-02 + 80L2 740.004.18E-054.94E-042.94E-031.20E-023.70E-041.45E-034.67E-031.38E-02 + 80L21000.001.92E-051.73E-048.63E-043.00E-031.61E-045.63E-041.57E-034.02E-03 + 80L21500.007.10E-064.66E-051.87E-045.44E-045.27E-051.65E-043.95E-048.57E-04 + 80L3 13.287.86E+004.03E+047.34E+061.59E+084.31E+007.25E+048.12E+071.00E+10 + 80L3 13.986.79E+003.11E+045.40E+061.33E+083.68E+005.62E+045.74E+076.78E+09 + 80L3 15.285.26E+001.99E+043.17E+069.08E+072.80E+003.60E+043.15E+073.43E+09 + 80L3 18.483.02E+007.62E+031.01E+063.40E+071.57E+001.40E+048.77E+068.08E+08 + 80L3 22.281.73E+002.97E+033.30E+051.15E+078.83E-015.50E+032.52E+061.96E+08 + 80L3 28.008.62E-019.39E+028.38E+042.82E+064.39E-011.77E+035.54E+053.52E+07 + 80L3 34.004.72E-013.54E+022.61E+048.17E+052.43E-016.72E+021.55E+058.26E+06 + 80L3 42.002.42E-011.22E+027.35E+032.06E+051.27E-012.35E+023.92E+041.73E+06 + 80L3 54.001.09E-013.48E+011.63E+033.92E+045.93E-026.75E+017.79E+032.75E+05 + 80L3 67.005.40E-021.19E+014.50E+029.31E+033.09E-022.32E+011.99E+035.80E+04 + 80L3 84.002.58E-023.86E+001.17E+022.05E+031.56E-027.58E+004.83E+021.16E+04 + 80L3 97.001.61E-021.89E+004.98E+017.80E+021.01E-023.73E+001.99E+024.23E+03 + 80L3 114.009.49E-038.56E-011.91E+012.64E+026.24E-031.68E+007.40E+011.38E+03 + 80L3 137.005.19E-033.48E-016.48E+007.73E+013.60E-036.83E-012.44E+013.91E+02 + 80L3 165.002.83E-031.41E-012.18E+002.24E+012.07E-032.76E-018.08E+001.11E+02 + 80L3 230.009.70E-042.86E-023.20E-012.51E+007.78E-045.51E-021.17E+001.25E+01 + 80L3 315.003.60E-046.54E-035.39E-023.31E-013.11E-041.22E-021.96E-011.69E+00 + 80L3 400.001.74E-042.20E-031.45E-027.42E-021.57E-043.96E-035.24E-023.86E-01 + 80L3 510.008.48E-057.54E-043.97E-031.71E-027.92E-051.29E-031.41E-029.00E-02 + 80L3 740.002.98E-051.60E-046.09E-042.06E-032.88E-052.43E-042.00E-031.05E-02 + 80L31000.001.36E-055.04E-051.51E-044.29E-041.32E-056.85E-054.36E-041.98E-03 + 80L31500.005.13E-061.25E-052.82E-056.40E-055.07E-061.47E-056.19E-052.32E-04 + 80M1 4.562.74E+001.53E+041.01E+063.68E+072.24E+035.29E+062.41E+092.46E+11 + 80M1 5.562.21E+006.69E+034.72E+051.76E+071.24E+032.00E+066.67E+086.30E+10 + 80M1 7.561.47E+001.82E+031.46E+054.71E+064.93E+024.46E+059.32E+077.44E+09 + 80M1 11.567.42E-012.83E+022.56E+049.08E+051.39E+025.71E+046.53E+063.89E+08 + 80M1 18.563.13E-013.21E+013.01E+031.13E+053.38E+015.98E+033.69E+051.51E+07 + 80M1 27.001.49E-015.28E+004.85E+021.73E+041.11E+011.04E+034.09E+041.22E+06 + 80M1 42.005.89E-026.27E-015.04E+011.56E+033.00E+001.39E+023.34E+036.84E+04 + 80M1 54.003.39E-022.07E-011.35E+013.75E+021.43E+004.57E+018.42E+021.39E+04 + 80M1 72.001.77E-027.24E-023.01E+007.13E+016.16E-011.32E+011.82E+022.33E+03 + 80M1 105.007.34E-032.49E-024.68E-018.23E+002.06E-012.72E+002.62E+012.43E+02 + 80M1 150.003.17E-031.04E-029.97E-021.19E+007.41E-026.55E-014.58E+003.15E+01 + 80M1 280.007.46E-042.36E-031.12E-026.33E-021.29E-026.40E-022.71E-011.15E+00 + 80M1 500.002.14E-046.39E-042.11E-037.16E-032.70E-039.11E-032.63E-027.53E-02 + 80M2 4.286.18E+002.21E+063.02E+094.95E+113.00E+021.92E+052.23E+075.52E+08 + 80M2 5.284.64E+007.79E+057.69E+081.16E+111.60E+027.42E+047.91E+063.15E+08 + 80M2 7.282.70E+001.58E+059.76E+071.24E+106.10E+011.77E+041.59E+067.85E+07 + 80M2 11.281.11E+001.80E+046.17E+065.94E+081.64E+012.63E+031.79E+058.54E+06 + 80M2 18.283.62E-011.67E+033.15E+052.14E+073.89E+003.42E+021.66E+046.39E+05 + 80M2 27.001.34E-012.48E+023.00E+041.52E+061.22E+006.91E+012.49E+037.60E+04 + 80M2 42.004.04E-022.95E+012.21E+037.87E+043.31E-011.18E+013.02E+026.78E+03 + 80M2 54.001.98E-028.91E+005.14E+021.50E+041.59E-014.40E+009.22E+011.72E+03 + 80M2 72.008.61E-032.30E+009.94E+012.29E+036.85E-021.45E+002.41E+013.63E+02 + 80M2 105.002.82E-034.04E-011.21E+012.04E+022.30E-023.46E-014.27E+004.81E+01 + 80M2 150.009.73E-048.12E-021.73E+002.20E+018.27E-039.20E-028.61E-017.39E+00 + 80M2 280.001.54E-045.52E-036.84E-025.36E-011.41E-039.79E-035.77E-023.14E-01 + 80M2 500.003.00E-055.42E-044.28E-032.24E-022.81E-041.35E-035.45E-032.03E-02 + 80M3 3.851.82E+015.18E+067.94E+091.40E+124.48E+019.68E+061.28E+111.84E+14 + 80M3 4.851.21E+011.63E+061.73E+092.71E+112.23E+013.05E+062.58E+102.54E+13 + 80M3 6.856.03E+002.86E+051.82E+082.32E+107.81E+005.44E+052.38E+091.36E+12 + 80M3 10.852.11E+002.83E+049.53E+068.87E+081.93E+005.47E+041.01E+082.95E+10 + 80M3 17.855.92E-012.32E+034.14E+052.67E+074.26E-014.56E+033.45E+065.17E+08 + 80M3 27.001.88E-012.90E+023.17E+041.49E+061.21E-015.79E+022.16E+051.95E+07 + 80M3 42.005.17E-023.18E+012.12E+036.98E+043.18E-026.43E+011.18E+046.49E+05 + 80M3 54.002.41E-029.08E+004.61E+021.24E+041.49E-021.85E+012.33E+039.79E+04 + 80M3 72.009.83E-032.18E+008.13E+011.72E+036.29E-034.44E+003.74E+021.17E+04 + 80M3 105.002.97E-033.38E-018.53E+001.31E+022.04E-036.89E-013.56E+017.80E+02 + 80M3 150.009.51E-045.92E-021.04E+001.18E+017.08E-041.20E-014.09E+006.52E+01 + 80M3 280.001.32E-043.01E-032.83E-021.92E-011.14E-045.84E-031.07E-011.04E+00 + 80M3 500.002.33E-052.19E-041.19E-035.23E-032.19E-053.82E-044.36E-032.89E-02 + 80M4 3.384.90E+011.58E+057.00E+097.39E+131.39E+013.16E+052.12E+091.28E+12 + 80M4 4.382.24E+014.22E+041.14E+097.69E+126.06E+008.64E+043.69E+081.83E+11 + 80M4 6.386.72E+006.27E+038.12E+072.94E+111.78E+001.31E+042.98E+071.08E+10 + 80M4 10.381.28E+005.34E+022.66E+064.51E+093.57E-011.14E+031.20E+062.86E+08 + 80M4 17.381.99E-013.93E+017.09E+045.73E+076.28E-028.50E+014.21E+046.35E+06 + 80M4 27.003.75E-024.21E+003.23E+031.45E+061.38E-029.26E+002.53E+032.55E+05 + 80M4 42.006.61E-034.44E-011.47E+023.79E+042.91E-031.00E+001.57E+021.06E+04 + 80M4 54.002.40E-031.23E-012.58E+014.90E+031.19E-032.83E-013.28E+011.76E+03 + 80M4 72.007.44E-042.85E-023.54E+004.82E+024.21E-046.70E-025.58E+002.30E+02 + 80M4 105.001.58E-044.20E-032.71E-012.40E+011.06E-041.02E-025.63E-011.66E+01 + 80M4 150.003.65E-056.99E-042.50E-021.49E+002.84E-051.73E-036.64E-021.43E+00 + 80M4 280.002.85E-063.27E-054.55E-041.36E-022.75E-068.05E-051.72E-032.23E-02 + 80M4 500.002.91E-072.15E-061.44E-052.22E-043.12E-074.89E-066.48E-055.53E-04 + 80M5 3.297.47E+011.72E+051.40E+101.26E+148.19E+002.27E+041.16E+104.66E+14 + 80M5 4.293.31E+014.42E+042.18E+091.24E+133.49E+006.05E+031.82E+094.36E+13 + 80M5 6.299.57E+006.25E+031.48E+084.41E+111.01E+008.99E+021.26E+081.44E+12 + 80M5 10.291.75E+005.08E+024.63E+066.29E+092.01E-017.74E+014.03E+061.84E+10 + 80M5 17.292.61E-013.59E+011.19E+057.51E+073.55E-025.86E+001.07E+051.91E+08 + 80M5 27.004.70E-023.65E+005.09E+031.75E+067.81E-036.46E-014.79E+033.97E+06 + 80M5 42.008.05E-033.70E-012.24E+024.34E+041.69E-037.37E-022.20E+028.93E+04 + 80M5 54.002.89E-031.00E-013.81E+015.39E+037.02E-042.17E-023.82E+011.06E+04 + 80M5 72.008.82E-042.23E-025.03E+005.02E+022.54E-045.39E-035.17E+009.51E+02 + 80M5 105.001.84E-043.10E-033.57E-012.29E+016.61E-058.88E-043.78E-014.23E+01 + 80M5 150.004.20E-054.87E-042.99E-021.27E+001.84E-051.67E-043.23E-022.35E+00 + 80M5 280.003.35E-062.09E-054.25E-048.85E-032.00E-069.87E-064.62E-041.72E-02 + 80M5 500.003.67E-071.38E-061.01E-051.04E-042.76E-078.46E-071.04E-052.14E-04 + 80N+ 50.003.09E-028.35E+005.43E+022.27E+046.49E-013.25E+011.84E+038.10E+04 + 80N+ 70.001.23E-021.63E+007.26E+012.05E+032.40E-017.14E+002.36E+026.74E+03 + 80N+ 100.004.76E-033.06E-019.22E+001.79E+028.61E-021.54E+002.99E+015.52E+02 + 80N+ 150.001.61E-034.77E-029.33E-011.23E+012.68E-022.86E-013.23E+003.70E+01 + 80N+ 200.007.55E-041.35E-021.95E-011.97E+001.18E-029.15E-027.29E-016.06E+00 + 80N+ 500.008.44E-054.42E-042.41E-031.12E-029.60E-043.50E-031.18E-024.10E-02 + 81K 86.534.94E-015.02E-011.10E-015.71E-031.11E+018.09E+011.11E+023.31E+01 + 81K 87.234.84E-015.13E-011.39E-011.40E-021.09E+017.86E+011.12E+024.14E+01 + 81K 88.534.68E-015.31E-011.93E-013.78E-021.04E+017.46E+011.14E+025.64E+01 + 81K 91.734.29E-015.61E-013.26E-011.40E-019.40E+006.59E+011.15E+029.01E+01 + 81K 95.533.88E-015.78E-014.70E-013.25E-018.36E+005.71E+011.12E+021.22E+02 + 81K 100.003.47E-015.80E-016.10E-015.89E-017.32E+004.86E+011.06E+021.48E+02 + 81K 106.003.00E-015.63E-017.46E-019.54E-016.19E+003.96E+019.61E+011.66E+02 + 81K 114.002.51E-015.24E-018.46E-011.37E+005.03E+003.07E+018.16E+011.69E+02 + 81K 126.001.96E-014.53E-018.80E-011.75E+003.78E+002.16E+016.25E+011.52E+02 + 81K 139.001.53E-013.80E-018.31E-011.88E+002.85E+001.54E+014.66E+011.25E+02 + 81K 156.001.15E-013.00E-017.21E-011.80E+002.06E+001.03E+013.21E+019.16E+01 + 81K 169.009.44E-022.52E-016.32E-011.65E+001.64E+007.83E+002.45E+017.16E+01 + 81K 186.007.45E-022.03E-015.27E-011.43E+001.25E+005.64E+001.76E+015.21E+01 + 81K 209.005.60E-021.54E-014.12E-011.15E+009.04E-013.81E+001.17E+013.45E+01 + 81K 235.004.21E-021.16E-013.15E-018.85E-016.53E-012.57E+007.69E+002.24E+01 + 81K 300.002.36E-026.46E-021.75E-014.83E-013.34E-011.16E+003.22E+008.80E+00 + 81K 385.001.34E-023.61E-029.53E-022.50E-011.70E-015.26E-011.34E+003.36E+00 + 81K 480.008.35E-032.21E-025.61E-021.39E-019.48E-022.68E-016.29E-011.45E+00 + 81K 590.005.46E-031.43E-023.47E-028.07E-025.52E-021.46E-013.18E-016.78E-01 + 81K 820.002.89E-037.44E-031.68E-023.51E-022.36E-025.74E-021.13E-012.14E-01 + 81K 1100.001.69E-034.27E-039.04E-031.74E-021.12E-022.60E-024.74E-028.21E-02 + 81K 1350.001.19E-032.93E-035.96E-031.09E-026.66E-031.53E-022.66E-024.38E-02 + 81K 1600.008.91E-042.15E-034.25E-037.48E-034.35E-039.94E-031.68E-022.66E-02 + 81L1 16.351.49E+003.23E+027.89E+032.08E+042.35E+024.46E+041.66E+061.39E+07 + 81L1 17.051.40E+002.64E+027.58E+033.66E+042.08E+023.66E+041.32E+061.28E+07 + 81L1 18.351.24E+001.85E+026.55E+035.53E+041.67E+022.59E+048.91E+051.03E+07 + 81L1 21.559.43E-018.34E+013.95E+035.88E+041.04E+021.22E+043.75E+055.32E+06 + 81L1 25.357.04E-013.65E+012.06E+033.98E+046.39E+015.78E+031.57E+052.41E+06 + 81L1 29.005.47E-011.81E+011.13E+032.44E+044.28E+013.12E+037.62E+041.19E+06 + 81L1 35.003.78E-016.74E+004.56E+021.07E+042.45E+011.33E+032.80E+044.24E+05 + 81L1 43.002.48E-012.31E+001.60E+023.86E+031.34E+015.31E+029.45E+031.33E+05 + 81L1 55.001.46E-017.23E-014.42E+011.03E+036.48E+001.81E+022.62E+033.25E+04 + 81L1 68.009.16E-023.20E-011.45E+013.16E+023.48E+007.28E+018.86E+029.65E+03 + 81L1 85.005.52E-021.66E-014.62E+008.97E+011.81E+002.85E+012.89E+022.71E+03 + 81L1 98.003.97E-021.17E-012.31E+004.04E+011.20E+001.59E+011.43E+021.22E+03 + 81L1 115.002.73E-028.07E-021.11E+001.67E+017.57E-018.33E+006.58E+015.00E+02 + 81L1 138.001.78E-025.35E-025.19E-016.36E+004.49E-014.05E+002.76E+011.84E+02 + 81L1 165.001.17E-023.57E-022.63E-012.58E+002.70E-012.03E+001.20E+017.04E+01 + 81L1 230.005.40E-031.67E-028.60E-025.62E-011.06E-015.90E-012.73E+001.25E+01 + 81L1 315.002.66E-038.09E-033.33E-021.57E-014.47E-021.94E-017.20E-012.67E+00 + 81L1 410.001.50E-034.49E-031.59E-026.00E-022.19E-028.01E-022.51E-017.84E-01 + 81L1 520.009.20E-042.69E-038.47E-032.70E-021.16E-023.74E-021.02E-012.77E-01 + 81L1 750.004.53E-041.28E-033.43E-038.80E-034.46E-031.23E-022.81E-026.27E-02 + 81L11000.002.68E-047.32E-041.77E-033.96E-032.13E-035.42E-031.11E-022.17E-02 + 81L11500.001.33E-043.44E-047.38E-041.42E-037.61E-041.82E-033.30E-035.65E-03 + 81L2 15.703.28E+001.56E+042.21E+063.73E+072.76E+011.82E+032.19E+045.14E+04 + 81L2 16.402.93E+001.26E+041.72E+063.36E+072.42E+011.55E+032.13E+049.09E+04 + 81L2 17.702.39E+008.62E+031.12E+062.58E+071.93E+011.16E+031.90E+041.39E+05 + 81L2 20.901.52E+003.81E+034.33E+051.22E+071.17E+016.20E+021.24E+041.54E+05 + 81L2 24.709.57E-011.68E+031.67E+055.07E+067.10E+003.29E+027.09E+031.10E+05 + 81L2 29.006.07E-017.68E+026.67E+042.04E+064.40E+001.79E+023.89E+036.56E+04 + 81L2 35.003.53E-013.08E+022.28E+046.72E+052.51E+008.74E+011.84E+033.16E+04 + 81L2 43.001.93E-011.15E+027.07E+031.93E+051.37E+004.00E+017.80E+021.29E+04 + 81L2 55.009.27E-023.54E+011.76E+034.21E+046.62E-011.58E+012.71E+024.08E+03 + 81L2 68.004.88E-021.30E+015.34E+021.12E+043.55E-017.09E+001.08E+021.45E+03 + 81L2 85.002.48E-024.60E+001.55E+022.79E+031.85E-013.08E+004.04E+014.77E+02 + 81L2 98.001.60E-022.39E+007.06E+011.16E+031.23E-011.81E+002.16E+012.33E+02 + 81L2 115.009.83E-031.15E+002.95E+014.30E+027.75E-021.00E+001.07E+011.04E+02 + 81L2 138.005.63E-035.06E-011.10E+011.41E+024.59E-025.15E-014.82E+004.13E+01 + 81L2 165.003.27E-032.29E-014.28E+004.78E+012.75E-022.69E-012.22E+001.68E+01 + 81L2 230.001.20E-035.42E-027.65E-016.69E+001.07E-028.22E-025.37E-013.23E+00 + 81L2 315.004.78E-041.45E-021.59E-011.11E+004.44E-032.74E-021.45E-017.04E-01 + 81L2 410.002.25E-045.03E-034.50E-022.63E-012.13E-031.12E-024.98E-022.04E-01 + 81L2 520.001.16E-042.00E-031.51E-027.56E-021.10E-035.06E-031.96E-026.96E-02 + 81L2 750.004.37E-055.19E-043.07E-031.24E-024.01E-041.55E-034.91E-031.43E-02 + 81L21000.002.08E-051.92E-049.55E-043.31E-031.81E-046.28E-041.75E-034.44E-03 + 81L21500.007.75E-065.16E-052.08E-046.02E-045.93E-051.84E-044.39E-049.51E-04 + 81L3 13.667.44E+003.77E+046.60E+061.38E+084.20E+007.01E+047.56E+079.05E+09 + 81L3 14.366.45E+002.93E+044.90E+061.17E+083.60E+005.47E+045.40E+076.18E+09 + 81L3 15.665.03E+001.89E+042.91E+068.05E+072.76E+003.55E+043.00E+073.19E+09 + 81L3 18.862.92E+007.40E+039.56E+053.10E+071.56E+001.40E+048.61E+067.74E+08 + 81L3 22.661.69E+002.93E+033.18E+051.07E+078.90E-015.62E+032.53E+061.93E+08 + 81L3 29.007.98E-018.46E+027.22E+042.35E+064.18E-011.64E+034.92E+053.01E+07 + 81L3 35.004.45E-013.29E+022.34E+047.07E+052.36E-016.45E+021.43E+057.41E+06 + 81L3 43.002.33E-011.17E+026.80E+031.85E+051.26E-012.32E+023.76E+041.62E+06 + 81L3 55.001.06E-013.41E+011.56E+033.65E+045.95E-026.83E+017.74E+032.68E+05 + 81L3 68.005.35E-021.18E+014.39E+028.89E+033.13E-022.39E+012.02E+035.79E+04 + 81L3 85.002.59E-023.91E+001.16E+022.00E+031.60E-027.92E+005.00E+021.19E+04 + 81L3 98.001.62E-021.94E+005.00E+017.70E+021.04E-023.93E+002.08E+024.36E+03 + 81L3 115.009.63E-038.81E-011.94E+012.64E+026.45E-031.79E+007.80E+011.44E+03 + 81L3 138.005.30E-033.61E-016.63E+007.80E+013.74E-037.31E-012.60E+014.12E+02 + 81L3 165.002.96E-031.51E-012.33E+002.38E+012.20E-033.05E-018.96E+001.23E+02 + 81L3 230.001.02E-033.07E-023.42E-012.67E+008.25E-046.09E-021.29E+001.38E+01 + 81L3 315.003.79E-047.03E-035.77E-023.52E-013.30E-041.35E-022.17E-011.86E+00 + 81L3 410.001.70E-042.12E-031.35E-026.79E-021.55E-043.89E-035.06E-023.67E-01 + 81L3 520.008.43E-057.44E-043.84E-031.63E-027.96E-051.29E-031.40E-028.84E-02 + 81L3 750.003.01E-051.62E-046.11E-042.05E-032.94E-052.51E-042.06E-031.07E-02 + 81L31000.001.43E-055.37E-051.62E-044.59E-041.40E-057.46E-054.80E-042.18E-03 + 81L31500.005.41E-061.33E-053.01E-056.85E-055.34E-061.59E-056.78E-052.55E-04 + 81M1 4.702.58E+001.48E+049.73E+053.20E+072.25E+035.09E+062.23E+092.19E+11 + 81M1 5.702.10E+006.58E+034.61E+051.63E+071.27E+031.98E+066.39E+085.85E+10 + 81M1 7.701.41E+001.84E+031.45E+054.59E+065.15E+024.55E+059.32E+077.25E+09 + 81M1 11.707.23E-012.96E+022.60E+049.02E+051.48E+026.00E+046.79E+063.96E+08 + 81M1 18.703.09E-013.48E+013.14E+031.15E+053.65E+016.42E+033.94E+051.59E+07 + 81M1 27.001.50E-016.04E+005.30E+021.84E+041.22E+011.16E+034.54E+041.35E+06 + 81M1 42.005.96E-027.27E-015.61E+011.69E+033.31E+001.54E+023.70E+037.54E+04 + 81M1 54.003.44E-022.38E-011.52E+014.10E+021.58E+005.06E+019.31E+021.52E+04 + 81M1 72.001.80E-028.01E-023.41E+007.89E+016.80E-011.46E+012.00E+022.56E+03 + 81M1 105.007.52E-032.64E-025.29E-019.20E+002.27E-013.00E+002.88E+012.66E+02 + 81M1 150.003.26E-031.08E-021.11E-011.33E+008.17E-027.21E-015.02E+003.45E+01 + 81M1 280.007.73E-042.46E-031.21E-026.97E-021.42E-027.03E-022.97E-011.25E+00 + 81M1 500.002.24E-046.74E-042.26E-037.77E-032.97E-039.98E-032.87E-028.20E-02 + 81M2 4.425.79E+002.06E+062.70E+094.27E+113.04E+021.85E+052.06E+074.85E+08 + 81M2 5.424.40E+007.48E+057.16E+081.05E+111.65E+027.33E+047.54E+062.87E+08 + 81M2 7.422.61E+001.57E+059.50E+071.18E+106.42E+011.80E+041.57E+067.47E+07 + 81M2 11.421.10E+001.85E+046.25E+065.90E+081.77E+012.75E+031.83E+058.49E+06 + 81M2 18.423.65E-011.76E+033.28E+052.20E+074.24E+003.65E+021.73E+046.56E+05 + 81M2 27.001.38E-012.71E+023.27E+041.64E+061.36E+007.59E+012.71E+038.15E+04 + 81M2 42.004.21E-023.23E+012.41E+038.51E+043.70E-011.30E+013.28E+027.30E+03 + 81M2 54.002.08E-029.75E+005.61E+021.62E+041.77E-014.84E+001.00E+021.86E+03 + 81M2 72.009.06E-032.52E+001.09E+022.48E+037.65E-021.59E+002.63E+013.92E+02 + 81M2 105.002.99E-034.43E-011.32E+012.22E+022.57E-023.81E-014.67E+005.22E+01 + 81M2 150.001.04E-038.92E-021.90E+002.40E+019.26E-031.02E-019.43E-018.04E+00 + 81M2 280.001.66E-046.08E-037.53E-025.87E-011.59E-031.09E-026.35E-023.44E-01 + 81M2 500.003.25E-056.00E-044.73E-032.47E-023.16E-041.50E-036.04E-032.23E-02 + 81M3 3.961.73E+014.86E+067.17E+091.22E+124.38E+019.39E+061.19E+111.66E+14 + 81M3 4.961.16E+011.57E+061.62E+092.46E+112.21E+013.05E+062.51E+102.41E+13 + 81M3 6.965.88E+002.86E+051.78E+082.21E+107.93E+005.61E+052.42E+091.36E+12 + 81M3 10.962.09E+002.91E+049.65E+068.80E+082.00E+005.80E+041.07E+083.10E+10 + 81M3 17.965.96E-012.43E+034.29E+052.72E+074.45E-014.93E+033.74E+065.59E+08 + 81M3 27.001.94E-013.14E+023.41E+041.58E+061.29E-016.46E+022.44E+052.21E+07 + 81M3 42.005.35E-023.44E+012.28E+037.42E+043.39E-027.17E+011.33E+047.31E+05 + 81M3 54.002.50E-029.82E+004.95E+021.31E+041.59E-022.06E+012.62E+031.10E+05 + 81M3 72.001.02E-022.35E+008.74E+011.83E+036.71E-034.95E+004.20E+021.32E+04 + 81M3 105.003.11E-033.66E-019.16E+001.40E+022.17E-037.68E-013.99E+018.72E+02 + 81M3 150.009.98E-046.40E-021.11E+001.26E+017.55E-041.33E-014.57E+007.28E+01 + 81M3 280.001.40E-043.25E-033.04E-022.06E-011.21E-046.48E-031.20E-011.16E+00 + 81M3 500.002.45E-052.36E-041.28E-035.62E-032.34E-054.23E-044.85E-033.20E-02 + 81M4 3.484.64E+011.47E+056.29E+096.45E+131.36E+013.07E+051.98E+091.16E+12 + 81M4 4.482.16E+014.09E+041.07E+097.11E+126.05E+008.67E+043.60E+081.74E+11 + 81M4 6.486.66E+006.29E+038.03E+072.89E+111.82E+001.36E+043.04E+071.08E+10 + 81M4 10.481.30E+005.52E+022.74E+064.66E+093.73E-011.22E+031.27E+062.99E+08 + 81M4 17.482.06E-014.15E+017.53E+046.11E+076.65E-029.30E+014.58E+046.83E+06 + 81M4 27.003.99E-024.59E+003.57E+031.62E+061.49E-021.04E+012.85E+032.86E+05 + 81M4 42.007.08E-034.86E-011.63E+024.24E+043.16E-031.13E+001.76E+021.18E+04 + 81M4 54.002.58E-031.35E-012.85E+015.47E+031.29E-033.20E-013.70E+011.97E+03 + 81M4 72.008.03E-043.13E-023.92E+005.38E+024.59E-047.56E-026.28E+002.58E+02 + 81M4 105.001.71E-044.62E-033.00E-012.68E+011.16E-041.15E-026.34E-011.86E+01 + 81M4 150.003.94E-057.72E-042.77E-021.67E+003.10E-051.95E-037.48E-021.61E+00 + 81M4 280.003.14E-063.62E-055.04E-041.52E-023.02E-069.09E-051.94E-032.51E-02 + 81M4 500.003.19E-072.38E-061.60E-052.49E-043.43E-075.52E-067.33E-056.25E-04 + 81M5 3.397.08E+011.59E+051.27E+101.11E+147.98E+002.15E+041.09E+104.22E+14 + 81M5 4.393.20E+014.22E+042.07E+091.15E+133.48E+005.93E+031.79E+094.18E+13 + 81M5 6.399.49E+006.18E+031.48E+084.35E+111.03E+009.12E+021.30E+081.47E+12 + 81M5 10.391.78E+005.17E+024.81E+066.51E+092.09E-018.08E+014.32E+061.97E+10 + 81M5 17.392.70E-013.73E+011.27E+058.00E+073.74E-026.23E+001.18E+052.12E+08 + 81M5 27.004.99E-023.90E+005.66E+031.95E+068.40E-037.05E-015.47E+034.59E+06 + 81M5 42.008.59E-033.97E-012.50E+024.83E+041.83E-038.04E-022.51E+021.03E+05 + 81M5 54.003.09E-031.07E-014.24E+016.00E+037.58E-042.36E-024.36E+011.22E+04 + 81M5 72.009.44E-042.40E-025.59E+005.59E+022.74E-045.87E-035.90E+001.09E+03 + 81M5 105.001.98E-043.35E-033.97E-012.54E+017.16E-059.68E-044.31E-014.85E+01 + 81M5 150.004.53E-055.27E-043.32E-021.41E+002.00E-051.82E-043.68E-022.69E+00 + 81M5 280.003.67E-062.27E-054.72E-049.84E-032.17E-061.08E-055.25E-041.97E-02 + 81M5 500.004.15E-071.50E-061.12E-051.16E-042.99E-079.23E-071.17E-052.44E-04 + 81N+ 50.003.26E-029.38E+006.09E+022.55E+047.25E-013.68E+012.12E+039.46E+04 + 81N+ 70.001.30E-021.83E+008.15E+012.30E+032.69E-018.06E+002.71E+027.82E+03 + 81N+ 100.005.02E-033.43E-011.04E+012.01E+029.61E-021.73E+003.42E+016.35E+02 + 81N+ 150.001.70E-035.34E-021.05E+001.38E+012.99E-023.20E-013.66E+004.22E+01 + 81N+ 200.007.99E-041.51E-022.19E-012.22E+001.31E-021.02E-018.21E-016.89E+00 + 81N+ 500.008.93E-054.86E-042.70E-031.26E-021.07E-033.89E-031.31E-024.59E-02 + 82K 89.004.67E-014.56E-019.79E-024.96E-031.12E+017.79E+011.03E+022.99E+01 + 82K 89.704.58E-014.66E-011.23E-011.20E-021.09E+017.58E+011.04E+023.72E+01 + 82K 91.004.43E-014.82E-011.70E-013.22E-021.05E+017.21E+011.06E+025.04E+01 + 82K 94.204.07E-015.10E-012.86E-011.19E-019.48E+006.39E+011.07E+028.02E+01 + 82K 98.003.69E-015.26E-014.12E-012.75E-018.45E+005.56E+011.05E+021.09E+02 + 82K 102.003.35E-015.29E-015.25E-014.76E-017.53E+004.83E+011.01E+021.31E+02 + 82K 108.002.91E-015.18E-016.53E-017.94E-016.39E+003.96E+019.15E+011.49E+02 + 82K 116.002.44E-014.86E-017.52E-011.17E+005.21E+003.08E+017.85E+011.55E+02 + 82K 128.001.92E-014.25E-017.96E-011.53E+003.93E+002.19E+016.07E+011.41E+02 + 82K 141.001.51E-013.59E-017.64E-011.69E+002.98E+001.56E+014.57E+011.18E+02 + 82K 158.001.14E-012.87E-016.73E-011.65E+002.16E+001.06E+013.18E+018.78E+01 + 82K 171.009.37E-022.42E-015.96E-011.53E+001.73E+008.05E+002.45E+016.93E+01 + 82K 188.007.42E-021.96E-015.02E-011.34E+001.32E+005.83E+001.77E+015.09E+01 + 82K 211.005.60E-021.50E-013.97E-011.09E+009.58E-013.95E+001.18E+013.41E+01 + 82K 240.004.11E-021.11E-012.99E-018.30E-016.70E-012.57E+007.50E+002.13E+01 + 82K 305.002.34E-026.31E-021.70E-014.65E-013.47E-011.18E+003.21E+008.59E+00 + 82K 390.001.35E-023.59E-029.44E-022.46E-011.79E-015.43E-011.36E+003.35E+00 + 82K 480.008.63E-032.28E-025.79E-021.43E-011.03E-012.88E-016.68E-011.53E+00 + 82K 590.005.66E-031.48E-023.61E-028.36E-025.98E-021.57E-013.38E-017.16E-01 + 82K 820.003.00E-037.77E-031.75E-023.67E-022.55E-026.17E-021.21E-012.27E-01 + 82K 1100.001.76E-034.48E-039.49E-031.83E-021.20E-022.80E-025.06E-028.72E-02 + 82K 1350.001.24E-033.08E-036.28E-031.15E-027.17E-031.64E-022.85E-024.66E-02 + 82K 1600.009.28E-042.26E-034.48E-037.88E-034.67E-031.07E-021.80E-022.84E-02 + 82L1 16.861.40E+003.04E+027.12E+031.79E+042.36E+024.27E+041.53E+061.23E+07 + 82L1 17.561.31E+002.51E+026.86E+033.14E+042.10E+023.53E+041.23E+061.14E+07 + 82L1 18.861.17E+001.78E+025.98E+034.78E+041.69E+022.52E+048.35E+059.24E+06 + 82L1 22.068.98E-018.24E+013.69E+035.21E+041.06E+021.21E+043.60E+054.90E+06 + 82L1 25.866.76E-013.70E+011.97E+033.63E+046.63E+015.82E+031.53E+052.27E+06 + 82L1 29.005.46E-012.05E+011.19E+032.44E+044.71E+013.44E+038.31E+041.25E+06 + 82L1 35.003.79E-017.75E+004.89E+021.10E+042.70E+011.47E+033.05E+044.51E+05 + 82L1 43.002.49E-012.68E+001.75E+024.05E+031.47E+015.85E+021.03E+041.42E+05 + 82L1 55.001.48E-018.31E-014.89E+011.10E+037.13E+001.99E+022.86E+033.50E+04 + 82L1 68.009.28E-023.57E-011.62E+013.43E+023.83E+008.00E+019.66E+021.04E+04 + 82L1 85.005.61E-021.78E-015.19E+009.83E+012.00E+003.13E+013.15E+022.93E+03 + 82L1 98.004.05E-021.23E-012.60E+004.45E+011.32E+001.74E+011.56E+021.32E+03 + 82L1 115.002.79E-028.39E-021.24E+001.85E+018.33E-019.14E+007.17E+015.40E+02 + 82L1 138.001.82E-025.53E-025.75E-017.04E+004.94E-014.44E+003.01E+011.99E+02 + 82L1 165.001.20E-023.68E-022.89E-012.86E+002.97E-012.22E+001.31E+017.62E+01 + 82L1 230.005.57E-031.72E-029.27E-026.16E-011.17E-016.46E-012.97E+001.36E+01 + 82L1 315.002.75E-038.42E-033.56E-021.71E-014.90E-022.12E-017.83E-012.89E+00 + 82L1 410.001.56E-034.70E-031.70E-026.48E-022.40E-028.74E-022.73E-018.49E-01 + 82L1 520.009.57E-042.83E-039.03E-032.90E-021.27E-024.07E-021.11E-012.99E-01 + 82L1 750.004.73E-041.35E-033.65E-039.43E-034.87E-031.34E-023.05E-026.79E-02 + 82L11000.002.81E-047.74E-041.88E-034.24E-032.32E-035.90E-031.20E-022.35E-02 + 82L11500.001.40E-043.65E-047.87E-041.52E-038.27E-041.98E-033.58E-036.11E-03 + 82L2 16.203.09E+001.45E+041.97E+063.21E+072.78E+011.74E+032.01E+044.50E+04 + 82L2 16.902.77E+001.18E+041.55E+062.90E+072.45E+011.49E+031.97E+047.93E+04 + 82L2 18.202.27E+008.17E+031.02E+062.25E+071.96E+011.13E+031.76E+041.22E+05 + 82L2 21.401.47E+003.69E+034.05E+051.10E+071.21E+016.12E+021.17E+041.38E+05 + 82L2 25.209.35E-011.66E+031.60E+054.67E+067.42E+003.30E+026.83E+031.01E+05 + 82L2 29.006.29E-018.35E+027.17E+042.12E+064.88E+001.94E+024.07E+036.56E+04 + 82L2 35.003.67E-013.36E+022.46E+047.06E+052.79E+009.49E+011.94E+033.23E+04 + 82L2 43.002.01E-011.25E+027.63E+032.04E+051.52E+004.35E+018.29E+021.34E+04 + 82L2 55.009.70E-023.86E+011.90E+034.47E+047.36E-011.72E+012.90E+024.29E+03 + 82L2 68.005.13E-021.42E+015.78E+021.20E+043.95E-017.73E+001.16E+021.53E+03 + 82L2 85.002.61E-025.01E+001.68E+023.00E+032.06E-013.36E+004.35E+015.08E+02 + 82L2 98.001.69E-022.60E+007.66E+011.24E+031.37E-011.98E+002.33E+012.49E+02 + 82L2 115.001.04E-021.26E+003.21E+014.63E+028.63E-021.10E+001.16E+011.11E+02 + 82L2 138.005.97E-035.53E-011.20E+011.52E+025.12E-025.65E-015.23E+004.44E+01 + 82L2 165.003.48E-032.50E-014.66E+005.17E+013.08E-022.96E-012.42E+001.81E+01 + 82L2 230.001.29E-035.94E-028.36E-017.27E+001.20E-029.05E-025.86E-013.50E+00 + 82L2 315.005.12E-041.60E-021.74E-011.21E+004.97E-033.03E-021.59E-017.66E-01 + 82L2 410.002.42E-045.54E-034.94E-022.87E-012.39E-031.24E-025.47E-022.23E-01 + 82L2 520.001.25E-042.21E-031.66E-028.29E-021.24E-035.61E-032.15E-027.63E-02 + 82L2 750.004.75E-055.73E-043.39E-031.36E-024.50E-041.72E-035.43E-031.57E-02 + 82L21000.002.28E-052.12E-041.06E-033.66E-032.04E-047.01E-041.94E-034.90E-03 + 82L21500.008.45E-065.72E-052.31E-046.67E-046.67E-052.06E-044.89E-041.05E-03 + 82L3 14.037.04E+003.53E+045.96E+061.21E+084.09E+006.79E+047.06E+078.20E+09 + 82L3 14.736.14E+002.76E+044.45E+061.02E+083.53E+005.33E+045.09E+075.65E+09 + 82L3 16.034.81E+001.80E+042.68E+067.16E+072.72E+003.49E+042.87E+072.96E+09 + 82L3 19.232.83E+007.20E+039.02E+052.82E+071.56E+001.41E+048.46E+067.42E+08 + 82L3 23.031.66E+002.90E+033.06E+051.00E+078.97E-015.74E+032.54E+061.90E+08 + 82L3 29.008.23E-019.10E+027.68E+042.44E+064.43E-011.82E+035.51E+053.35E+07 + 82L3 35.004.60E-013.53E+022.49E+047.38E+052.50E-017.15E+021.60E+058.24E+06 + 82L3 43.002.41E-011.26E+027.24E+031.94E+051.33E-012.57E+024.20E+041.80E+06 + 82L3 55.001.10E-013.67E+011.66E+033.84E+046.31E-027.58E+018.63E+032.97E+05 + 82L3 68.005.56E-021.27E+014.68E+029.36E+033.32E-022.65E+012.25E+036.43E+04 + 82L3 85.002.69E-024.21E+001.24E+022.11E+031.69E-028.78E+005.56E+021.31E+04 + 82L3 98.001.69E-022.08E+005.33E+018.13E+021.10E-024.35E+002.31E+024.83E+03 + 82L3 115.001.00E-029.47E-012.07E+012.79E+026.84E-031.98E+008.67E+011.59E+03 + 82L3 138.005.54E-033.88E-017.08E+008.26E+013.97E-038.09E-012.88E+014.55E+02 + 82L3 165.003.10E-031.63E-012.49E+002.52E+012.33E-033.38E-019.94E+001.36E+02 + 82L3 230.001.07E-033.30E-023.65E-012.83E+008.75E-046.73E-021.43E+001.53E+01 + 82L3 315.003.98E-047.55E-036.17E-023.75E-013.50E-041.49E-022.40E-012.05E+00 + 82L3 410.001.79E-042.27E-031.45E-027.24E-021.64E-044.28E-035.58E-024.04E-01 + 82L3 520.008.88E-057.98E-044.10E-031.73E-028.43E-051.42E-031.55E-029.73E-02 + 82L3 750.003.18E-051.73E-046.54E-042.19E-033.11E-052.75E-042.26E-031.18E-02 + 82L31000.001.51E-055.73E-051.73E-044.91E-041.48E-058.12E-055.27E-042.40E-03 + 82L31500.005.72E-061.41E-053.21E-057.32E-055.63E-061.72E-057.42E-052.80E-04 + 82M1 4.852.43E+001.42E+049.33E+052.79E+072.27E+034.88E+062.06E+091.96E+11 + 82M1 5.851.99E+006.47E+034.49E+051.50E+071.30E+031.95E+066.10E+085.41E+10 + 82M1 7.851.35E+001.86E+031.43E+054.48E+065.37E+024.63E+059.29E+077.04E+09 + 82M1 11.857.03E-013.10E+022.63E+048.95E+051.57E+026.30E+047.04E+064.03E+08 + 82M1 18.853.05E-013.77E+013.27E+031.17E+053.93E+016.89E+034.19E+051.67E+07 + 82M1 27.001.51E-016.89E+005.78E+021.97E+041.35E+011.28E+035.05E+041.49E+06 + 82M1 42.006.03E-028.41E-016.22E+011.84E+033.66E+001.71E+024.10E+038.30E+04 + 82M1 54.003.49E-022.73E-011.70E+014.48E+021.74E+005.60E+011.03E+031.68E+04 + 82M1 72.001.83E-028.94E-023.85E+008.71E+017.51E-011.61E+012.21E+022.81E+03 + 82M1 105.007.69E-032.82E-025.98E-011.03E+012.51E-013.32E+003.17E+012.92E+02 + 82M1 150.003.35E-031.13E-021.24E-011.48E+009.02E-027.94E-015.51E+003.77E+01 + 82M1 280.008.01E-042.58E-031.31E-027.69E-021.57E-027.71E-023.25E-011.37E+00 + 82M1 500.002.34E-047.10E-042.43E-038.43E-033.26E-031.09E-023.13E-028.92E-02 + 82M2 4.555.44E+001.93E+062.43E+093.71E+113.08E+021.79E+051.92E+074.30E+08 + 82M2 5.554.18E+007.20E+056.68E+089.47E+101.70E+027.25E+047.21E+062.62E+08 + 82M2 7.552.52E+001.56E+059.26E+071.12E+106.76E+011.84E+041.56E+067.13E+07 + 82M2 11.551.08E+001.90E+046.35E+065.87E+081.90E+012.88E+031.87E+058.46E+06 + 82M2 18.553.67E-011.85E+033.42E+052.26E+074.62E+003.90E+021.82E+046.73E+05 + 82M2 27.001.43E-012.97E+023.56E+041.77E+061.52E+008.35E+012.94E+038.74E+04 + 82M2 42.004.38E-023.53E+012.62E+039.21E+044.12E-011.43E+013.57E+027.85E+03 + 82M2 54.002.17E-021.07E+016.12E+021.76E+041.98E-015.32E+001.09E+022.00E+03 + 82M2 72.009.52E-032.76E+001.19E+022.69E+038.55E-021.75E+002.86E+014.24E+02 + 82M2 105.003.16E-034.86E-011.44E+012.41E+022.88E-024.20E-015.10E+005.66E+01 + 82M2 150.001.10E-039.80E-022.08E+002.62E+011.04E-021.12E-011.03E+008.74E+00 + 82M2 280.001.78E-046.70E-038.28E-026.43E-011.78E-031.20E-026.99E-023.76E-01 + 82M2 500.003.52E-056.63E-045.23E-032.72E-023.56E-041.67E-036.68E-032.46E-02 + 82M3 4.071.65E+014.58E+066.51E+091.07E+124.29E+019.14E+061.12E+111.51E+14 + 82M3 5.071.12E+011.52E+061.53E+092.25E+112.21E+013.05E+062.45E+102.30E+13 + 82M3 7.075.74E+002.86E+051.74E+082.11E+108.05E+005.79E+052.46E+091.37E+12 + 82M3 11.072.07E+003.00E+049.78E+068.74E+082.06E+006.16E+041.13E+083.26E+10 + 82M3 18.076.01E-012.55E+034.45E+052.78E+074.65E-015.34E+034.06E+066.05E+08 + 82M3 27.002.00E-013.39E+023.67E+041.68E+061.38E-017.21E+022.75E+052.50E+07 + 82M3 42.005.54E-023.72E+012.45E+037.89E+043.61E-028.00E+011.50E+048.24E+05 + 82M3 54.002.60E-021.06E+015.32E+021.40E+041.69E-022.30E+012.95E+031.24E+05 + 82M3 72.001.07E-022.54E+009.38E+011.94E+037.14E-035.52E+004.71E+021.48E+04 + 82M3 105.003.26E-033.95E-019.83E+001.49E+022.31E-038.56E-014.47E+019.75E+02 + 82M3 150.001.05E-036.92E-021.20E+001.34E+018.04E-041.49E-015.11E+008.11E+01 + 82M3 280.001.47E-043.51E-033.27E-022.20E-011.29E-047.20E-031.33E-011.29E+00 + 82M3 500.002.59E-052.55E-041.37E-036.03E-032.49E-054.68E-045.38E-033.55E-02 + 82M4 3.594.40E+011.38E+055.67E+095.65E+131.33E+012.99E+051.85E+091.05E+12 + 82M4 4.592.09E+013.96E+041.01E+096.58E+126.04E+008.71E+043.51E+081.65E+11 + 82M4 6.596.60E+006.31E+037.94E+072.84E+111.86E+001.42E+043.11E+071.08E+10 + 82M4 10.591.32E+005.71E+022.83E+064.81E+093.89E-011.31E+031.35E+063.13E+08 + 82M4 17.592.13E-014.38E+017.98E+046.51E+077.04E-021.02E+024.97E+047.33E+06 + 82M4 27.004.24E-025.00E+003.94E+031.81E+061.61E-021.17E+013.20E+033.20E+05 + 82M4 42.007.56E-035.30E-011.80E+024.73E+043.43E-031.27E+001.98E+021.32E+04 + 82M4 54.002.77E-031.48E-013.15E+016.11E+031.40E-033.60E-014.16E+012.21E+03 + 82M4 72.008.65E-043.43E-024.33E+006.01E+024.99E-048.52E-027.07E+002.89E+02 + 82M4 105.001.85E-045.08E-033.32E-013.00E+011.26E-041.29E-027.13E-012.08E+01 + 82M4 150.004.27E-058.51E-043.07E-021.86E+003.39E-052.20E-038.43E-021.81E+00 + 82M4 280.003.44E-064.01E-055.58E-041.70E-023.32E-061.02E-042.19E-032.82E-02 + 82M4 500.003.50E-072.64E-061.78E-052.79E-043.77E-076.23E-068.28E-057.04E-04 + 82M5 3.486.72E+011.47E+051.16E+109.78E+137.79E+002.05E+041.03E+103.83E+14 + 82M5 4.483.10E+014.03E+041.98E+091.07E+133.46E+005.82E+031.76E+094.01E+13 + 82M5 6.489.40E+006.11E+031.48E+084.28E+111.05E+009.24E+021.33E+081.50E+12 + 82M5 10.481.80E+005.26E+025.01E+066.73E+092.17E-018.42E+014.63E+062.11E+10 + 82M5 17.482.79E-013.87E+011.35E+058.52E+073.94E-026.61E+001.30E+052.34E+08 + 82M5 27.005.29E-024.17E+006.28E+032.17E+069.02E-037.69E-016.24E+035.30E+06 + 82M5 42.009.16E-034.26E-012.77E+025.38E+041.96E-038.76E-022.86E+021.19E+05 + 82M5 54.003.30E-031.15E-014.70E+016.67E+038.17E-042.57E-024.97E+011.41E+04 + 82M5 72.001.01E-032.58E-026.21E+006.21E+022.96E-046.39E-036.72E+001.26E+03 + 82M5 105.002.13E-043.61E-034.41E-012.83E+017.74E-051.05E-034.91E-015.56E+01 + 82M5 150.004.89E-055.69E-043.69E-021.57E+002.16E-051.98E-044.19E-023.08E+00 + 82M5 280.003.91E-062.46E-055.23E-041.09E-022.36E-061.17E-055.95E-042.24E-02 + 82M5 500.004.61E-071.63E-061.24E-051.29E-043.25E-071.00E-061.32E-052.77E-04 + 82N+ 50.003.41E-021.02E+016.66E+022.81E+048.10E-014.11E+012.38E+031.07E+05 + 82N+ 70.001.36E-022.00E+008.91E+012.53E+033.00E-018.98E+003.03E+028.82E+03 + 82N+ 100.005.27E-033.74E-011.13E+012.20E+021.07E-011.92E+003.81E+017.12E+02 + 82N+ 150.001.79E-035.82E-021.15E+001.51E+013.35E-023.55E-014.06E+004.71E+01 + 82N+ 200.008.40E-041.64E-022.40E-012.42E+001.47E-021.13E-019.11E-017.66E+00 + 82N+ 500.009.49E-055.27E-042.95E-031.38E-021.19E-034.28E-031.44E-025.06E-02 + 83K 91.534.42E-014.15E-018.75E-024.35E-031.12E+017.51E+019.62E+012.71E+01 + 83K 92.234.33E-014.24E-011.09E-011.04E-021.10E+017.31E+019.72E+013.35E+01 + 83K 93.534.19E-014.38E-011.51E-012.75E-021.05E+016.96E+019.88E+014.52E+01 + 83K 96.733.86E-014.64E-012.51E-011.01E-019.56E+006.19E+011.00E+027.16E+01 + 83K 100.533.52E-014.79E-013.63E-012.34E-018.55E+005.41E+019.84E+019.73E+01 + 83K 105.003.16E-014.84E-014.74E-014.29E-017.54E+004.65E+019.39E+011.19E+02 + 83K 111.002.76E-014.74E-015.87E-017.06E-016.43E+003.83E+018.58E+011.35E+02 + 83K 119.002.33E-014.47E-016.78E-011.03E+005.27E+003.01E+017.40E+011.41E+02 + 83K 131.001.84E-013.93E-017.22E-011.37E+004.00E+002.15E+015.78E+011.30E+02 + 83K 144.001.46E-013.36E-016.99E-011.52E+003.06E+001.55E+014.39E+011.09E+02 + 83K 161.001.11E-012.71E-016.23E-011.50E+002.23E+001.06E+013.09E+018.26E+01 + 83K 174.009.16E-022.30E-015.57E-011.41E+001.79E+008.12E+002.39E+016.58E+01 + 83K 191.007.30E-021.88E-014.74E-011.25E+001.38E+005.92E+001.75E+014.88E+01 + 83K 214.005.54E-021.45E-013.79E-011.03E+001.00E+004.04E+001.18E+013.31E+01 + 83K 240.004.21E-021.12E-012.97E-018.18E-017.29E-012.76E+007.88E+002.19E+01 + 83K 305.002.41E-026.41E-021.72E-014.68E-013.77E-011.26E+003.38E+008.92E+00 + 83K 390.001.39E-023.68E-029.67E-022.51E-011.94E-015.83E-011.44E+003.50E+00 + 83K 480.008.92E-032.35E-025.97E-021.47E-011.12E-013.09E-017.10E-011.61E+00 + 83K 590.005.86E-031.54E-023.74E-028.67E-026.48E-021.68E-013.60E-017.56E-01 + 83K 820.003.12E-038.11E-031.83E-023.84E-022.76E-026.63E-021.29E-012.41E-01 + 83K 1100.001.84E-034.69E-039.97E-031.92E-021.30E-023.01E-025.41E-029.27E-02 + 83K 1350.001.29E-033.23E-036.61E-031.21E-027.73E-031.76E-023.04E-024.96E-02 + 83K 1600.009.67E-042.38E-034.72E-038.31E-035.02E-031.15E-021.92E-023.02E-02 + 83L1 17.391.32E+002.87E+026.43E+031.54E+042.37E+024.09E+041.40E+061.10E+07 + 83L1 18.091.24E+002.38E+026.22E+032.70E+042.11E+023.40E+041.14E+061.02E+07 + 83L1 19.391.11E+001.71E+025.46E+034.13E+041.72E+022.45E+047.83E+058.32E+06 + 83L1 22.598.56E-018.13E+013.44E+034.63E+041.09E+021.20E+043.45E+054.51E+06 + 83L1 26.396.49E-013.75E+011.88E+033.31E+046.87E+015.86E+031.50E+052.14E+06 + 83L1 30.005.12E-011.95E+011.07E+032.13E+044.69E+013.26E+037.56E+041.10E+06 + 83L1 36.003.59E-017.67E+004.57E+029.91E+032.74E+011.43E+032.87E+044.10E+05 + 83L1 44.002.39E-012.77E+001.69E+023.77E+031.51E+015.83E+029.96E+031.33E+05 + 83L1 56.001.44E-018.82E-014.92E+011.07E+037.44E+002.03E+022.84E+033.39E+04 + 83L1 69.009.10E-023.80E-011.67E+013.42E+024.04E+008.27E+019.78E+021.03E+04 + 83L1 86.005.55E-021.86E-015.50E+001.01E+022.13E+003.28E+013.24E+022.96E+03 + 83L1 99.004.02E-021.27E-012.78E+004.62E+011.41E+001.84E+011.62E+021.34E+03 + 83L1 116.002.79E-028.61E-021.34E+001.95E+018.94E-019.68E+007.49E+015.56E+02 + 83L1 139.001.83E-025.65E-026.20E-017.51E+005.32E-014.73E+003.17E+012.07E+02 + 83L1 165.001.23E-023.81E-023.17E-013.16E+003.27E-012.44E+001.43E+018.24E+01 + 83L1 230.005.74E-031.79E-021.00E-016.77E-011.28E-017.06E-013.23E+001.47E+01 + 83L1 315.002.84E-038.78E-033.82E-021.86E-015.38E-022.32E-018.51E-013.13E+00 + 83L1 410.001.62E-034.92E-031.81E-027.00E-022.63E-029.54E-022.96E-019.19E-01 + 83L1 520.009.98E-042.97E-039.64E-033.13E-021.39E-024.44E-021.20E-013.24E-01 + 83L1 750.004.94E-041.42E-033.89E-031.01E-025.33E-031.46E-023.31E-027.34E-02 + 83L11000.002.95E-048.19E-042.01E-034.55E-032.53E-036.42E-031.30E-022.54E-02 + 83L11500.001.47E-043.87E-048.40E-041.63E-038.99E-042.15E-033.88E-036.60E-03 + 83L2 16.712.92E+001.35E+041.76E+062.77E+072.81E+011.67E+031.85E+043.95E+04 + 83L2 17.412.63E+001.11E+041.40E+062.51E+072.49E+011.44E+031.82E+046.95E+04 + 83L2 18.712.17E+007.75E+039.28E+051.97E+072.00E+011.10E+031.64E+041.08E+05 + 83L2 21.911.42E+003.57E+033.79E+059.85E+061.25E+016.05E+021.11E+041.24E+05 + 83L2 25.719.13E-011.63E+031.53E+054.30E+067.76E+003.31E+026.58E+039.32E+04 + 83L2 30.005.92E-017.71E+026.35E+041.82E+064.90E+001.85E+023.74E+035.84E+04 + 83L2 36.003.52E-013.19E+022.25E+046.26E+052.85E+009.26E+011.83E+032.94E+04 + 83L2 44.001.96E-011.22E+027.22E+031.87E+051.58E+004.33E+017.99E+021.25E+04 + 83L2 56.009.62E-023.86E+011.85E+034.26E+047.76E-011.75E+012.87E+024.13E+03 + 83L2 69.005.15E-021.44E+015.77E+021.17E+044.22E-017.98E+001.16E+021.51E+03 + 83L2 86.002.65E-025.18E+001.70E+022.99E+032.22E-013.52E+004.45E+015.09E+02 + 83L2 99.001.73E-022.71E+007.86E+011.25E+031.48E-012.09E+002.41E+012.52E+02 + 83L2 116.001.07E-021.32E+003.32E+014.73E+029.39E-021.17E+001.21E+011.14E+02 + 83L2 139.006.19E-035.85E-011.26E+011.57E+025.60E-026.03E-015.50E+004.60E+01 + 83L2 165.003.69E-032.74E-015.08E+005.59E+013.43E-023.25E-012.63E+001.95E+01 + 83L2 230.001.37E-036.51E-029.13E-017.89E+001.34E-029.97E-026.40E-013.79E+00 + 83L2 315.005.49E-041.75E-021.91E-011.32E+005.57E-033.34E-021.74E-018.34E-01 + 83L2 410.002.60E-046.09E-035.43E-023.14E-012.68E-031.37E-026.01E-022.44E-01 + 83L2 520.001.35E-042.43E-031.83E-029.08E-021.39E-036.22E-032.37E-028.35E-02 + 83L2 750.005.14E-056.33E-043.74E-031.50E-025.06E-041.91E-036.00E-031.73E-02 + 83L21000.002.48E-052.34E-041.17E-034.03E-032.30E-047.81E-042.15E-035.41E-03 + 83L21500.009.22E-066.34E-052.56E-047.39E-047.51E-052.30E-045.44E-041.17E-03 + 83L3 14.426.68E+003.31E+045.38E+061.06E+083.99E+006.58E+046.60E+077.43E+09 + 83L3 15.125.84E+002.61E+044.05E+069.01E+073.45E+005.20E+044.80E+075.17E+09 + 83L3 16.424.60E+001.72E+042.47E+066.37E+072.68E+003.44E+042.75E+072.76E+09 + 83L3 19.622.74E+007.00E+038.51E+052.57E+071.55E+001.42E+048.30E+067.11E+08 + 83L3 23.421.62E+002.87E+032.94E+059.32E+069.04E-015.86E+032.54E+061.86E+08 + 83L3 30.007.65E-018.24E+026.67E+042.05E+064.24E-011.71E+034.93E+052.89E+07 + 83L3 36.004.35E-013.30E+022.23E+046.42E+052.43E-016.89E+021.49E+057.43E+06 + 83L3 44.002.32E-011.21E+026.72E+031.75E+051.32E-012.54E+024.04E+041.69E+06 + 83L3 56.001.08E-013.61E+011.59E+033.58E+046.33E-027.68E+018.58E+032.89E+05 + 83L3 69.005.51E-021.27E+014.57E+028.94E+033.37E-022.73E+012.28E+036.42E+04 + 83L3 86.002.70E-024.27E+001.23E+022.06E+031.73E-029.18E+005.75E+021.34E+04 + 83L3 99.001.71E-022.13E+005.35E+018.02E+021.13E-024.58E+002.41E+024.98E+03 + 83L3 116.001.02E-029.76E-012.10E+012.78E+027.06E-032.10E+009.14E+011.66E+03 + 83L3 139.005.66E-034.02E-017.24E+008.33E+014.11E-038.64E-013.06E+014.79E+02 + 83L3 165.003.24E-031.75E-012.66E+002.67E+012.47E-033.74E-011.10E+011.50E+02 + 83L3 230.001.12E-033.55E-023.90E-013.01E+009.27E-047.44E-021.58E+001.68E+01 + 83L3 315.004.18E-048.11E-036.59E-023.98E-013.71E-041.64E-022.65E-012.26E+00 + 83L3 410.001.88E-042.44E-031.55E-027.70E-021.74E-044.72E-036.16E-024.45E-01 + 83L3 520.009.38E-058.55E-044.39E-031.85E-028.92E-051.56E-031.70E-021.07E-01 + 83L3 750.003.36E-051.86E-046.99E-042.34E-033.28E-053.01E-042.49E-031.29E-02 + 83L31000.001.58E-056.11E-051.85E-045.25E-041.56E-058.84E-055.79E-042.63E-03 + 83L31500.006.02E-061.50E-053.42E-057.82E-055.92E-061.85E-058.12E-053.07E-04 + 83M1 5.002.29E+001.37E+048.99E+052.46E+072.29E+034.71E+061.91E+091.75E+11 + 83M1 6.001.89E+006.39E+034.39E+051.39E+071.33E+031.92E+065.85E+085.03E+10 + 83M1 8.001.29E+001.88E+031.42E+054.37E+065.61E+024.72E+059.27E+076.84E+09 + 83M1 12.006.84E-013.24E+022.67E+048.92E+051.67E+026.62E+047.30E+064.10E+08 + 83M1 19.003.01E-014.07E+013.40E+031.19E+054.25E+017.39E+034.46E+051.75E+07 + 83M1 28.001.41E-016.60E+005.27E+021.74E+041.34E+011.21E+034.55E+041.30E+06 + 83M1 43.005.80E-028.71E-016.11E+011.75E+033.77E+001.71E+023.98E+037.86E+04 + 83M1 55.003.40E-022.90E-011.73E+014.42E+021.82E+005.73E+011.03E+031.64E+04 + 83M1 73.001.81E-029.54E-024.05E+008.88E+017.96E-011.68E+012.26E+022.83E+03 + 83M1 106.007.70E-032.95E-026.46E-011.08E+012.69E-013.52E+003.32E+013.02E+02 + 83M1 155.003.19E-031.10E-021.21E-011.40E+009.06E-027.70E-015.17E+003.44E+01 + 83M1 285.007.96E-042.60E-031.35E-027.86E-021.64E-027.95E-023.29E-011.36E+00 + 83M1 500.002.44E-047.50E-042.61E-039.16E-033.59E-031.20E-023.42E-029.72E-02 + 83M2 4.705.11E+001.81E+062.18E+093.23E+113.13E+021.72E+051.78E+073.82E+08 + 83M2 5.703.97E+006.92E+056.23E+088.56E+101.76E+027.18E+046.89E+062.40E+08 + 83M2 7.702.43E+001.55E+059.01E+071.06E+107.13E+011.87E+041.54E+066.79E+07 + 83M2 11.701.07E+001.96E+046.43E+065.82E+082.04E+013.02E+031.92E+058.41E+06 + 83M2 18.703.68E-011.95E+033.57E+052.32E+075.04E+004.16E+021.90E+046.90E+05 + 83M2 28.001.34E-012.72E+023.13E+041.50E+061.52E+007.93E+012.68E+037.69E+04 + 83M2 43.004.27E-023.45E+012.49E+038.52E+044.30E-011.43E+013.47E+027.43E+03 + 83M2 55.002.15E-021.07E+016.00E+021.68E+042.09E-015.44E+001.09E+021.96E+03 + 83M2 73.009.61E-032.84E+001.20E+022.67E+039.18E-021.83E+002.93E+014.25E+02 + 83M2 106.003.25E-035.11E-011.50E+012.47E+023.13E-024.46E-015.33E+005.83E+01 + 83M2 155.001.06E-039.31E-021.92E+002.33E+011.06E-021.10E-019.77E-018.03E+00 + 83M2 285.001.82E-046.87E-038.34E-026.37E-011.91E-031.25E-027.14E-023.78E-01 + 83M2 500.003.80E-057.34E-045.77E-033.00E-024.01E-041.86E-037.39E-032.71E-02 + 83M3 4.181.57E+014.32E+065.91E+099.45E+114.20E+018.92E+061.05E+111.38E+14 + 83M3 5.181.07E+011.47E+061.44E+092.06E+112.20E+013.05E+062.38E+102.19E+13 + 83M3 7.185.60E+002.85E+051.71E+082.01E+108.16E+005.97E+052.50E+091.37E+12 + 83M3 11.182.06E+003.08E+049.91E+068.67E+082.13E+006.54E+041.20E+083.42E+10 + 83M3 18.186.05E-012.67E+034.61E+052.83E+074.86E-015.77E+034.40E+066.53E+08 + 83M3 28.001.85E-013.06E+023.15E+041.39E+061.31E-016.71E+022.44E+052.12E+07 + 83M3 43.005.34E-023.58E+012.27E+037.13E+043.58E-027.93E+011.45E+047.75E+05 + 83M3 55.002.55E-021.05E+015.10E+021.31E+041.71E-022.34E+012.94E+031.21E+05 + 83M3 73.001.06E-022.57E+009.26E+011.88E+037.30E-035.74E+004.84E+021.49E+04 + 83M3 106.003.30E-034.08E-019.98E+001.48E+022.40E-039.10E-014.72E+011.02E+03 + 83M3 155.009.91E-046.38E-021.06E+001.15E+017.77E-041.41E-014.69E+007.23E+01 + 83M3 285.001.47E-043.49E-033.18E-022.10E-011.31E-047.35E-031.34E-011.28E+00 + 83M3 500.002.75E-052.75E-041.48E-036.46E-032.64E-055.17E-045.97E-033.93E-02 + 83M4 3.694.17E+011.30E+055.12E+094.97E+131.30E+012.92E+051.73E+099.53E+11 + 83M4 4.692.02E+013.84E+049.52E+086.10E+126.03E+008.76E+043.43E+081.57E+11 + 83M4 6.696.53E+006.33E+037.85E+072.79E+111.90E+001.47E+043.17E+071.08E+10 + 83M4 10.691.34E+005.90E+022.91E+064.96E+094.05E-011.40E+031.43E+063.26E+08 + 83M4 17.692.21E-014.63E+018.44E+046.93E+077.45E-021.11E+025.39E+047.87E+06 + 83M4 28.003.92E-024.53E+003.37E+031.49E+061.54E-021.10E+012.86E+032.75E+05 + 83M4 43.007.35E-035.14E-011.69E+024.35E+043.43E-031.27E+001.93E+021.25E+04 + 83M4 55.002.76E-031.47E-013.06E+015.87E+031.43E-033.70E-014.17E+012.17E+03 + 83M4 73.008.79E-043.50E-024.35E+005.99E+025.17E-048.95E-027.30E+002.94E+02 + 83M4 106.001.92E-045.33E-033.44E-013.10E+011.33E-041.39E-027.57E-012.18E+01 + 83M4 155.004.08E-057.96E-042.73E-021.61E+003.28E-052.11E-037.80E-021.62E+00 + 83M4 285.003.49E-064.06E-055.53E-041.67E-023.40E-061.06E-042.23E-032.83E-02 + 83M4 500.003.83E-072.92E-061.97E-053.12E-044.14E-077.02E-069.34E-057.93E-04 + 83M5 3.586.38E+011.36E+051.06E+108.64E+137.61E+001.95E+049.68E+093.48E+14 + 83M5 4.583.00E+013.85E+041.88E+099.95E+123.45E+005.71E+031.73E+093.85E+13 + 83M5 6.589.31E+006.03E+031.48E+084.22E+111.07E+009.36E+021.37E+081.52E+12 + 83M5 10.581.83E+005.35E+025.20E+066.95E+092.25E-018.77E+014.95E+062.25E+10 + 83M5 17.582.88E-014.01E+011.44E+059.06E+074.14E-027.01E+001.42E+052.58E+08 + 83M5 28.004.85E-023.69E+005.39E+031.78E+068.54E-037.00E-015.51E+034.47E+06 + 83M5 43.008.86E-034.03E-012.60E+024.91E+041.95E-038.50E-022.77E+021.12E+05 + 83M5 55.003.27E-031.12E-014.59E+016.37E+038.24E-042.56E-024.98E+011.39E+04 + 83M5 73.001.02E-032.58E-026.25E+006.16E+023.04E-046.50E-036.95E+001.29E+03 + 83M5 106.002.19E-043.70E-034.58E-012.91E+018.08E-051.10E-035.23E-015.89E+01 + 83M5 155.004.58E-055.19E-043.26E-021.34E+002.08E-051.85E-043.80E-022.71E+00 + 83M5 285.004.04E-062.45E-055.15E-041.06E-022.40E-061.18E-055.98E-042.23E-02 + 83M5 500.004.86E-071.77E-061.37E-051.43E-043.51E-071.09E-061.48E-053.14E-04 + 83N+ 50.003.57E-021.15E+017.43E+023.15E+049.15E-014.69E+012.75E+031.25E+05 + 83N+ 70.001.43E-022.25E+009.95E+012.82E+033.39E-011.02E+013.50E+021.02E+04 + 83N+ 100.005.56E-034.20E-011.26E+012.45E+021.21E-012.19E+004.37E+018.20E+02 + 83N+ 150.001.89E-036.53E-021.29E+001.68E+013.77E-024.04E-014.64E+005.39E+01 + 83N+ 200.008.93E-041.84E-022.69E-012.71E+001.66E-021.28E-011.04E+008.73E+00 + 83N+ 500.001.02E-045.85E-043.32E-031.56E-021.34E-034.85E-031.63E-025.70E-02 + 84K 94.104.18E-013.78E-017.84E-023.82E-031.13E+017.25E+018.97E+012.45E+01 + 84K 94.804.10E-013.85E-019.74E-029.04E-031.10E+017.06E+019.06E+013.02E+01 + 84K 96.103.97E-013.99E-011.33E-012.37E-021.06E+016.73E+019.21E+014.05E+01 + 84K 99.303.67E-014.22E-012.22E-018.61E-029.66E+006.01E+019.34E+016.39E+01 + 84K 103.103.35E-014.37E-013.20E-012.00E-018.66E+005.27E+019.21E+018.70E+01 + 84K 107.003.06E-014.42E-014.08E-013.45E-017.78E+004.63E+018.88E+011.05E+02 + 84K 113.002.68E-014.37E-015.14E-015.87E-016.66E+003.84E+018.18E+011.21E+02 + 84K 121.002.27E-014.15E-016.03E-018.86E-015.47E+003.03E+017.12E+011.28E+02 + 84K 133.001.80E-013.69E-016.55E-011.20E+004.18E+002.18E+015.63E+011.21E+02 + 84K 146.001.43E-013.18E-016.44E-011.36E+003.20E+001.58E+014.31E+011.03E+02 + 84K 163.001.10E-012.59E-015.83E-011.38E+002.34E+001.08E+013.07E+017.91E+01 + 84K 176.009.09E-022.22E-015.26E-011.31E+001.89E+008.35E+002.39E+016.36E+01 + 84K 193.007.27E-021.82E-014.53E-011.18E+001.46E+006.11E+001.76E+014.77E+01 + 84K 216.005.55E-021.42E-013.67E-019.85E-011.06E+004.19E+001.19E+013.26E+01 + 84K 245.004.11E-021.07E-012.83E-017.71E-017.50E-012.76E+007.69E+002.09E+01 + 84K 310.002.39E-026.28E-021.67E-014.52E-013.93E-011.29E+003.38E+008.71E+00 + 84K 395.001.39E-023.67E-029.61E-022.48E-012.04E-016.01E-011.46E+003.49E+00 + 84K 480.009.22E-032.43E-026.16E-021.51E-011.21E-013.32E-017.54E-011.69E+00 + 84K 590.006.07E-031.60E-023.89E-028.99E-027.04E-021.81E-013.83E-017.98E-01 + 84K 820.003.24E-038.46E-031.92E-024.01E-022.99E-027.13E-021.37E-012.55E-01 + 84K 1100.001.91E-034.91E-031.05E-022.02E-021.41E-023.23E-025.78E-029.85E-02 + 84K 1350.001.34E-033.39E-036.95E-031.27E-028.34E-031.90E-023.25E-025.28E-02 + 84K 1600.001.01E-032.50E-034.97E-038.76E-035.41E-031.23E-022.06E-023.22E-02 + 84L1 17.941.23E+002.70E+025.79E+031.32E+042.38E+023.90E+041.29E+069.68E+06 + 84L1 18.641.16E+002.26E+025.62E+032.31E+042.13E+023.26E+041.05E+069.01E+06 + 84L1 19.941.04E+001.64E+024.97E+033.56E+041.74E+022.38E+047.31E+057.44E+06 + 84L1 23.148.14E-018.01E+013.20E+034.08E+041.12E+021.19E+043.29E+054.14E+06 + 84L1 26.946.22E-013.78E+011.79E+033.00E+047.12E+015.89E+031.46E+052.01E+06 + 84L1 30.005.10E-012.20E+011.13E+032.11E+045.17E+013.60E+038.22E+041.16E+06 + 84L1 36.003.60E-018.76E+004.89E+021.01E+043.01E+011.57E+033.12E+044.35E+05 + 84L1 44.002.40E-013.19E+001.84E+023.93E+031.67E+016.42E+021.09E+041.42E+05 + 84L1 56.001.45E-011.01E+005.42E+011.14E+038.20E+002.23E+023.10E+033.64E+04 + 84L1 69.009.22E-024.28E-011.86E+013.68E+024.45E+009.10E+011.07E+031.11E+04 + 84L1 86.005.64E-022.03E-016.16E+001.10E+022.34E+003.60E+013.53E+023.19E+03 + 84L1 99.004.10E-021.36E-013.12E+005.07E+011.56E+002.02E+011.76E+021.45E+03 + 84L1 116.002.85E-029.07E-021.50E+002.15E+019.85E-011.06E+018.16E+016.01E+02 + 84L1 139.001.88E-025.89E-026.89E-018.30E+005.86E-015.19E+003.45E+012.24E+02 + 84L1 165.001.26E-023.97E-023.50E-013.49E+003.60E-012.67E+001.55E+018.91E+01 + 84L1 230.005.91E-031.86E-021.09E-017.43E-011.41E-017.73E-013.51E+001.59E+01 + 84L1 315.002.94E-039.17E-034.10E-022.02E-015.92E-022.53E-019.25E-013.38E+00 + 84L1 410.001.68E-035.16E-031.94E-027.58E-022.89E-021.04E-013.22E-019.94E-01 + 84L1 520.001.04E-033.13E-031.03E-023.37E-021.53E-024.85E-021.31E-013.51E-01 + 84L1 750.005.16E-041.50E-034.16E-031.09E-025.84E-031.59E-023.59E-027.95E-02 + 84L11000.003.08E-048.68E-042.15E-034.88E-032.77E-036.99E-031.41E-022.75E-02 + 84L11500.001.54E-044.10E-048.97E-041.75E-039.79E-042.34E-034.21E-037.14E-03 + 84L2 17.242.75E+001.26E+041.57E+062.38E+072.84E+011.60E+031.70E+043.47E+04 + 84L2 17.942.48E+001.04E+041.25E+062.16E+072.52E+011.38E+031.67E+046.07E+04 + 84L2 19.242.07E+007.34E+038.44E+051.72E+072.05E+011.06E+031.52E+049.44E+04 + 84L2 22.441.37E+003.45E+033.54E+058.81E+061.29E+015.97E+021.04E+041.12E+05 + 84L2 26.248.91E-011.61E+031.46E+053.95E+068.11E+003.31E+026.32E+038.56E+04 + 84L2 30.006.13E-018.38E+026.81E+041.89E+065.45E+002.00E+023.90E+035.81E+04 + 84L2 36.003.65E-013.47E+022.42E+046.56E+053.17E+001.00E+021.92E+033.00E+04 + 84L2 44.002.04E-011.32E+027.77E+031.97E+051.75E+004.71E+018.48E+021.30E+04 + 84L2 56.001.01E-014.20E+012.00E+034.52E+048.64E-011.90E+013.06E+024.32E+03 + 84L2 69.005.40E-021.57E+016.23E+021.25E+044.70E-018.71E+001.25E+021.59E+03 + 84L2 86.002.79E-025.65E+001.84E+023.20E+032.48E-013.84E+004.80E+015.41E+02 + 84L2 99.001.83E-022.96E+008.53E+011.34E+031.65E-012.28E+002.60E+012.69E+02 + 84L2 116.001.13E-021.44E+003.61E+015.09E+021.05E-011.28E+001.30E+011.22E+02 + 84L2 139.006.56E-036.40E-011.37E+011.69E+026.25E-026.62E-015.96E+004.94E+01 + 84L2 165.003.92E-033.00E-015.53E+006.04E+013.84E-023.57E-012.85E+002.10E+01 + 84L2 230.001.47E-037.14E-029.97E-018.56E+001.50E-021.10E-016.98E-014.10E+00 + 84L2 315.005.89E-041.93E-022.09E-011.44E+006.25E-033.69E-021.90E-019.07E-01 + 84L2 410.002.80E-046.70E-035.96E-023.43E-013.00E-031.51E-026.60E-022.66E-01 + 84L2 520.001.46E-042.68E-032.01E-029.95E-021.56E-036.90E-032.61E-029.15E-02 + 84L2 750.005.57E-056.99E-044.13E-031.65E-025.69E-042.13E-036.63E-031.91E-02 + 84L21000.002.70E-052.59E-041.29E-034.45E-032.58E-048.71E-042.38E-035.98E-03 + 84L21500.001.00E-057.02E-052.84E-048.18E-048.46E-052.57E-046.06E-041.30E-03 + 84L3 14.816.32E+003.10E+044.85E+069.28E+073.89E+006.37E+046.17E+076.72E+09 + 84L3 15.515.55E+002.46E+043.68E+067.92E+073.38E+005.07E+044.52E+074.73E+09 + 84L3 16.814.40E+001.64E+042.28E+065.65E+072.64E+003.39E+042.62E+072.56E+09 + 84L3 20.012.65E+006.80E+038.02E+052.34E+071.55E+001.42E+048.13E+066.80E+08 + 84L3 23.811.58E+002.83E+032.83E+058.67E+069.09E-015.98E+032.55E+061.83E+08 + 84L3 30.007.88E-018.86E+027.08E+042.12E+064.49E-011.89E+035.51E+053.21E+07 + 84L3 36.004.49E-013.54E+022.38E+046.69E+052.57E-017.64E+021.66E+058.25E+06 + 84L3 44.002.40E-011.30E+027.14E+031.83E+051.40E-012.82E+024.51E+041.87E+06 + 84L3 56.001.12E-013.88E+011.69E+033.75E+046.71E-028.51E+019.56E+033.21E+05 + 84L3 69.005.71E-021.37E+014.86E+029.40E+033.57E-023.02E+012.54E+037.11E+04 + 84L3 86.002.80E-024.59E+001.31E+022.17E+031.83E-021.02E+016.39E+021.48E+04 + 84L3 99.001.78E-022.29E+005.70E+018.46E+021.20E-025.08E+002.68E+025.50E+03 + 84L3 116.001.06E-021.05E+002.24E+012.94E+027.48E-032.33E+001.01E+021.83E+03 + 84L3 139.005.90E-034.33E-017.72E+008.80E+014.36E-039.57E-013.39E+015.29E+02 + 84L3 165.003.39E-031.88E-012.83E+002.82E+012.62E-034.13E-011.22E+011.66E+02 + 84L3 230.001.17E-033.81E-024.16E-013.19E+009.82E-048.22E-021.75E+001.85E+01 + 84L3 315.004.38E-048.70E-037.04E-024.23E-013.93E-041.81E-022.93E-012.49E+00 + 84L3 410.001.98E-042.61E-031.66E-028.19E-021.84E-045.19E-036.80E-024.89E-01 + 84L3 520.009.86E-059.16E-044.69E-031.97E-029.43E-051.72E-031.88E-021.18E-01 + 84L3 750.003.53E-051.98E-047.47E-042.50E-033.47E-053.29E-042.74E-031.42E-02 + 84L31000.001.67E-056.51E-051.97E-045.61E-041.64E-059.62E-056.36E-042.89E-03 + 84L31500.006.36E-061.59E-053.64E-058.36E-056.23E-062.00E-058.88E-053.37E-04 + 84M1 5.152.16E+001.33E+048.68E+052.18E+072.32E+034.54E+061.78E+091.58E+11 + 84M1 6.151.79E+006.31E+034.31E+051.30E+071.36E+031.90E+065.62E+084.68E+10 + 84M1 8.151.24E+001.91E+031.42E+054.27E+065.87E+024.81E+059.26E+076.66E+09 + 84M1 12.156.66E-013.39E+022.71E+048.89E+051.78E+026.95E+047.57E+064.17E+08 + 84M1 19.152.96E-014.40E+013.54E+031.21E+054.58E+017.93E+034.74E+051.84E+07 + 84M1 28.001.42E-017.50E+005.75E+021.86E+041.48E+011.34E+035.05E+041.43E+06 + 84M1 43.005.86E-021.00E+006.76E+011.89E+034.16E+001.89E+024.41E+038.66E+04 + 84M1 55.003.45E-023.34E-011.93E+014.82E+022.02E+006.34E+011.14E+031.81E+04 + 84M1 73.001.84E-021.07E-014.55E+009.78E+018.80E-011.86E+012.50E+023.11E+03 + 84M1 106.007.87E-033.19E-027.30E-011.20E+012.98E-013.88E+003.65E+013.31E+02 + 84M1 155.003.28E-031.16E-021.35E-011.56E+001.00E-018.48E-015.68E+003.76E+01 + 84M1 285.008.25E-042.73E-031.47E-028.68E-021.81E-028.73E-023.60E-011.49E+00 + 84M1 500.002.54E-047.93E-042.81E-039.96E-033.95E-031.31E-023.73E-021.06E-01 + 84M2 4.854.76E+001.67E+061.93E+092.74E+113.16E+021.64E+051.63E+073.32E+08 + 84M2 5.853.74E+006.59E+055.72E+087.58E+101.80E+027.03E+046.49E+062.15E+08 + 84M2 7.852.33E+001.53E+058.66E+079.91E+097.47E+011.89E+041.51E+066.38E+07 + 84M2 11.851.05E+002.00E+046.46E+065.72E+082.18E+013.14E+031.94E+058.27E+06 + 84M2 18.853.69E-012.04E+033.69E+052.36E+075.48E+004.42E+021.98E+047.03E+05 + 84M2 28.001.38E-012.97E+023.41E+041.62E+061.70E+008.72E+012.91E+038.23E+04 + 84M2 43.004.44E-023.77E+012.72E+039.21E+044.80E-011.57E+013.77E+027.99E+03 + 84M2 55.002.25E-021.17E+016.54E+021.82E+042.34E-015.99E+001.19E+022.11E+03 + 84M2 73.001.01E-023.11E+001.31E+022.89E+031.03E-012.01E+003.19E+014.59E+02 + 84M2 106.003.43E-035.60E-011.63E+012.68E+023.51E-024.92E-015.82E+006.32E+01 + 84M2 155.001.13E-031.02E-012.10E+002.54E+011.19E-021.21E-011.07E+008.73E+00 + 84M2 285.001.95E-047.57E-039.17E-026.97E-012.15E-031.39E-027.86E-024.13E-01 + 84M2 500.004.11E-058.11E-046.38E-033.30E-024.52E-042.08E-038.17E-032.98E-02 + 84M3 4.301.48E+014.02E+065.27E+098.12E+114.09E+018.58E+069.73E+101.23E+14 + 84M3 5.301.03E+011.41E+061.33E+091.84E+112.17E+013.02E+062.29E+102.05E+13 + 84M3 7.305.43E+002.82E+051.65E+081.89E+108.23E+006.11E+052.51E+091.36E+12 + 84M3 11.302.03E+003.14E+049.95E+068.51E+082.19E+006.90E+041.25E+083.56E+10 + 84M3 18.306.07E-012.79E+034.75E+052.86E+075.06E-016.22E+034.74E+067.01E+08 + 84M3 28.001.91E-013.31E+023.38E+041.48E+061.39E-017.47E+022.74E+052.40E+07 + 84M3 43.005.52E-023.86E+012.44E+037.57E+043.81E-028.84E+011.63E+048.71E+05 + 84M3 55.002.64E-021.13E+015.47E+021.39E+041.82E-022.60E+013.30E+031.36E+05 + 84M3 73.001.11E-022.78E+009.93E+012.00E+037.76E-036.40E+005.42E+021.67E+04 + 84M3 106.003.44E-034.41E-011.07E+011.58E+022.55E-031.01E+005.27E+011.14E+03 + 84M3 155.001.04E-036.90E-021.14E+001.22E+018.26E-041.57E-015.23E+008.05E+01 + 84M3 285.001.54E-043.77E-033.42E-022.24E-011.39E-048.15E-031.49E-011.42E+00 + 84M3 500.002.92E-052.96E-041.59E-036.92E-032.81E-055.72E-046.62E-034.36E-02 + 84M4 3.803.94E+011.21E+054.58E+094.31E+131.27E+012.82E+051.61E+098.55E+11 + 84M4 4.801.95E+013.70E+048.89E+085.59E+125.99E+008.76E+043.32E+081.47E+11 + 84M4 6.806.45E+006.32E+037.70E+072.71E+111.93E+001.53E+043.21E+071.07E+10 + 84M4 10.801.36E+006.08E+022.98E+065.08E+094.21E-011.49E+031.51E+063.38E+08 + 84M4 17.802.27E-014.88E+018.90E+047.34E+077.86E-021.21E+025.83E+048.41E+06 + 84M4 28.004.16E-024.93E+003.71E+031.66E+061.66E-021.24E+013.22E+033.08E+05 + 84M4 43.007.84E-035.61E-011.86E+024.85E+043.71E-031.43E+002.16E+021.40E+04 + 84M4 55.002.95E-031.61E-013.37E+016.53E+031.55E-034.16E-014.68E+012.42E+03 + 84M4 73.009.43E-043.84E-024.80E+006.67E+025.61E-041.01E-018.20E+003.28E+02 + 84M4 106.002.07E-045.85E-033.79E-013.45E+011.45E-041.57E-028.50E-012.44E+01 + 84M4 155.004.40E-058.77E-043.01E-021.80E+003.58E-052.38E-038.77E-021.82E+00 + 84M4 285.003.75E-064.49E-056.11E-041.86E-023.72E-061.19E-042.51E-033.17E-02 + 84M4 500.004.16E-073.24E-062.17E-053.49E-044.53E-077.91E-061.05E-048.92E-04 + 84M5 3.686.04E+011.25E+059.63E+097.54E+137.40E+001.84E+049.04E+093.13E+14 + 84M5 4.682.89E+013.65E+041.78E+099.16E+123.42E+005.56E+031.68E+093.66E+13 + 84M5 6.689.19E+005.93E+031.46E+084.12E+111.08E+009.43E+021.40E+081.54E+12 + 84M5 10.681.85E+005.42E+025.38E+067.13E+092.32E-019.10E+015.27E+062.39E+10 + 84M5 17.682.96E-014.15E+011.54E+059.60E+074.34E-027.41E+001.56E+052.82E+08 + 84M5 28.005.13E-023.94E+005.97E+031.97E+069.16E-037.61E-016.28E+035.15E+06 + 84M5 43.009.42E-034.31E-012.89E+025.45E+042.09E-039.24E-023.15E+021.29E+05 + 84M5 55.003.48E-031.20E-015.09E+017.07E+038.86E-042.78E-025.67E+011.59E+04 + 84M5 73.001.09E-032.76E-026.94E+006.83E+023.27E-047.07E-037.91E+001.48E+03 + 84M5 106.002.36E-043.98E-035.08E-013.23E+018.72E-051.19E-035.95E-016.74E+01 + 84M5 155.004.95E-055.60E-043.62E-021.49E+002.25E-052.01E-044.31E-023.09E+00 + 84M5 285.004.31E-062.65E-055.70E-041.17E-022.59E-061.28E-056.76E-042.54E-02 + 84M5 500.005.06E-071.92E-061.50E-051.58E-043.80E-071.19E-061.66E-053.57E-04 + 84N+ 50.003.73E-021.27E+018.24E+023.51E+041.02E+005.27E+013.14E+031.44E+05 + 84N+ 70.001.50E-022.50E+001.10E+023.13E+033.78E-011.15E+013.97E+021.17E+04 + 84N+ 100.005.82E-034.67E-011.40E+012.71E+021.35E-012.45E+004.94E+019.33E+02 + 84N+ 150.001.99E-037.26E-021.43E+001.86E+014.21E-024.50E-015.21E+006.09E+01 + 84N+ 200.009.39E-042.04E-023.00E-013.01E+001.85E-021.43E-011.16E+009.81E+00 + 84N+ 500.001.08E-046.42E-043.69E-031.74E-021.49E-035.37E-031.81E-026.34E-02 + 85K 96.733.95E-013.44E-017.05E-023.38E-031.13E+017.00E+018.37E+012.23E+01 + 85K 97.433.88E-013.51E-018.71E-027.89E-031.11E+016.82E+018.46E+012.72E+01 + 85K 98.733.76E-013.63E-011.19E-012.05E-021.07E+016.52E+018.59E+013.63E+01 + 85K 101.933.49E-013.85E-011.96E-017.39E-029.76E+005.84E+018.73E+015.71E+01 + 85K 105.733.19E-013.99E-012.83E-011.72E-018.78E+005.14E+018.63E+017.79E+01 + 85K 110.002.90E-014.05E-013.69E-013.10E-017.83E+004.48E+018.32E+019.53E+01 + 85K 116.002.55E-014.01E-014.63E-015.23E-016.73E+003.73E+017.69E+011.10E+02 + 85K 124.002.17E-013.82E-015.45E-017.88E-015.56E+002.96E+016.73E+011.17E+02 + 85K 136.001.74E-013.43E-015.97E-011.08E+004.27E+002.16E+015.37E+011.11E+02 + 85K 149.001.39E-012.98E-015.92E-011.23E+003.29E+001.58E+014.15E+019.59E+01 + 85K 166.001.07E-012.45E-015.43E-011.26E+002.42E+001.09E+012.99E+017.46E+01 + 85K 179.008.90E-022.11E-014.94E-011.21E+001.96E+008.44E+002.34E+016.05E+01 + 85K 196.007.16E-021.75E-014.29E-011.10E+001.52E+006.21E+001.73E+014.58E+01 + 85K 219.005.49E-021.38E-013.52E-019.35E-011.11E+004.29E+001.19E+013.17E+01 + 85K 245.004.21E-021.08E-012.81E-017.60E-018.16E-012.96E+008.07E+002.14E+01 + 85K 310.002.45E-026.38E-021.69E-014.55E-014.28E-011.38E+003.56E+009.04E+00 + 85K 395.001.44E-023.77E-029.84E-022.53E-012.22E-016.46E-011.54E+003.65E+00 + 85K 490.009.14E-032.40E-026.08E-021.48E-011.25E-013.36E-017.48E-011.64E+00 + 85K 600.006.08E-031.60E-023.89E-028.94E-027.31E-021.85E-013.87E-017.92E-01 + 85K 830.003.29E-038.64E-031.95E-024.07E-023.14E-027.41E-021.41E-012.59E-01 + 85K 1100.001.98E-035.15E-031.10E-022.12E-021.52E-023.47E-026.17E-021.05E-01 + 85K 1350.001.40E-033.55E-037.32E-031.34E-029.00E-032.04E-023.48E-025.62E-02 + 85K 1600.001.05E-032.62E-035.24E-039.24E-035.82E-031.32E-022.20E-023.43E-02 + 85L1 18.491.16E+002.56E+025.25E+031.15E+042.40E+023.74E+041.18E+068.61E+06 + 85L1 19.191.10E+002.15E+025.10E+031.99E+042.15E+023.15E+049.72E+058.05E+06 + 85L1 20.499.86E-011.58E+024.55E+033.09E+041.77E+022.31E+046.85E+056.70E+06 + 85L1 23.697.75E-017.90E+012.99E+033.62E+041.15E+021.18E+043.15E+053.81E+06 + 85L1 27.495.97E-013.82E+011.71E+032.73E+047.39E+015.92E+031.43E+051.89E+06 + 85L1 31.004.79E-012.11E+011.03E+031.86E+045.17E+013.42E+037.52E+041.02E+06 + 85L1 37.003.41E-018.69E+004.58E+029.13E+033.06E+011.54E+032.94E+043.97E+05 + 85L1 45.002.31E-013.28E+001.78E+023.67E+031.72E+016.41E+021.05E+041.34E+05 + 85L1 57.001.41E-011.08E+005.44E+011.10E+038.58E+002.27E+023.08E+033.53E+04 + 85L1 70.009.04E-024.58E-011.92E+013.67E+024.70E+009.41E+011.08E+031.10E+04 + 85L1 87.005.58E-022.15E-016.51E+001.12E+022.49E+003.77E+013.63E+023.22E+03 + 85L1 100.004.07E-021.43E-013.33E+005.26E+011.66E+002.13E+011.83E+021.48E+03 + 85L1 117.002.85E-029.43E-021.61E+002.26E+011.06E+001.13E+018.52E+016.19E+02 + 85L1 140.001.89E-026.08E-027.44E-018.82E+006.32E-015.53E+003.63E+012.32E+02 + 85L1 165.001.29E-024.14E-023.86E-013.85E+003.96E-012.92E+001.69E+019.63E+01 + 85L1 230.006.08E-031.94E-021.18E-018.16E-011.55E-018.45E-013.82E+001.72E+01 + 85L1 315.003.04E-039.60E-034.41E-022.20E-016.51E-022.77E-011.00E+003.66E+00 + 85L1 410.001.74E-035.42E-032.08E-028.21E-023.18E-021.14E-013.50E-011.08E+00 + 85L1 520.001.08E-033.30E-031.10E-023.63E-021.68E-025.29E-021.42E-013.79E-01 + 85L1 750.005.38E-041.59E-034.44E-031.17E-026.39E-031.73E-023.90E-028.60E-02 + 85L11000.003.22E-049.19E-042.29E-035.23E-033.03E-037.61E-031.53E-022.98E-02 + 85L11500.001.62E-044.35E-049.58E-041.87E-031.07E-032.54E-034.56E-037.73E-03 + 85L2 17.782.60E+001.18E+041.40E+062.05E+072.88E+011.54E+031.57E+043.05E+04 + 85L2 18.482.35E+009.73E+031.13E+061.88E+072.57E+011.33E+031.54E+045.32E+04 + 85L2 19.781.97E+006.96E+037.70E+051.51E+072.09E+011.03E+031.41E+048.31E+04 + 85L2 22.981.32E+003.34E+033.30E+057.90E+061.34E+015.90E+029.86E+031.00E+05 + 85L2 26.788.69E-011.58E+031.39E+053.63E+068.49E+003.32E+026.08E+037.87E+04 + 85L2 31.005.79E-017.78E+026.07E+041.62E+065.50E+001.91E+023.60E+035.19E+04 + 85L2 37.003.50E-013.31E+022.23E+045.84E+053.25E+009.83E+011.82E+032.74E+04 + 85L2 45.001.99E-011.29E+027.38E+031.82E+051.83E+004.70E+018.19E+021.21E+04 + 85L2 57.009.98E-024.21E+011.96E+034.31E+049.14E-011.94E+013.03E+024.16E+03 + 85L2 70.005.43E-021.60E+016.22E+021.22E+045.02E-019.00E+001.26E+021.57E+03 + 85L2 87.002.83E-025.85E+001.87E+023.19E+032.67E-014.02E+004.91E+015.43E+02 + 85L2 100.001.87E-023.09E+008.75E+011.36E+031.79E-012.41E+002.68E+012.73E+02 + 85L2 117.001.17E-021.51E+003.74E+015.19E+021.14E-011.36E+001.36E+011.25E+02 + 85L2 140.006.80E-036.78E-011.43E+011.75E+026.84E-027.07E-016.27E+005.12E+01 + 85L2 165.004.16E-033.28E-016.02E+006.53E+014.29E-023.92E-013.10E+002.27E+01 + 85L2 230.001.56E-037.83E-021.09E+009.29E+001.68E-021.21E-017.61E-014.44E+00 + 85L2 315.006.31E-042.12E-022.29E-011.57E+007.00E-034.08E-022.08E-019.86E-01 + 85L2 410.003.01E-047.38E-036.54E-023.75E-013.37E-031.68E-027.24E-022.90E-01 + 85L2 520.001.57E-042.95E-032.21E-021.09E-011.75E-037.65E-032.88E-021.00E-01 + 85L2 750.006.03E-057.72E-044.55E-031.81E-026.40E-042.37E-037.33E-032.10E-02 + 85L21000.002.92E-052.87E-041.43E-034.91E-032.91E-049.71E-042.64E-036.59E-03 + 85L21500.001.09E-057.78E-053.15E-049.05E-049.52E-052.88E-046.74E-041.44E-03 + 85L3 15.216.00E+002.91E+044.39E+068.14E+073.79E+006.18E+045.77E+076.10E+09 + 85L3 15.915.28E+002.32E+043.36E+066.98E+073.31E+004.94E+044.26E+074.33E+09 + 85L3 17.214.21E+001.56E+042.10E+065.03E+072.60E+003.34E+042.51E+072.38E+09 + 85L3 20.412.57E+006.62E+037.55E+052.13E+071.54E+001.43E+047.97E+066.50E+08 + 85L3 24.211.55E+002.80E+032.72E+058.06E+069.14E-016.10E+032.55E+061.79E+08 + 85L3 31.007.34E-018.07E+026.18E+041.79E+064.30E-011.78E+034.96E+052.79E+07 + 85L3 37.004.26E-013.32E+022.14E+045.84E+052.50E-017.39E+021.55E+057.47E+06 + 85L3 45.002.31E-011.24E+026.63E+031.65E+051.38E-012.79E+024.35E+041.76E+06 + 85L3 57.001.09E-013.81E+011.62E+033.50E+046.73E-028.63E+019.51E+033.12E+05 + 85L3 70.005.66E-021.37E+014.75E+028.97E+033.61E-023.12E+012.58E+037.09E+04 + 85L3 87.002.81E-024.66E+001.30E+022.11E+031.88E-021.06E+016.61E+021.51E+04 + 85L3 100.001.79E-022.34E+005.72E+018.33E+021.23E-025.35E+002.79E+025.67E+03 + 85L3 117.001.08E-021.08E+002.26E+012.93E+027.71E-032.47E+001.07E+021.90E+03 + 85L3 140.006.02E-034.49E-017.88E+008.87E+014.51E-031.02E+003.60E+015.56E+02 + 85L3 165.003.54E-032.02E-013.02E+002.98E+012.77E-034.57E-011.35E+011.83E+02 + 85L3 230.001.23E-034.09E-024.44E-013.38E+001.04E-039.08E-021.94E+002.04E+01 + 85L3 315.004.60E-049.34E-037.52E-024.49E-014.15E-042.00E-023.23E-012.74E+00 + 85L3 410.002.07E-042.80E-031.77E-028.71E-021.95E-045.72E-037.50E-025.38E-01 + 85L3 520.001.03E-049.81E-045.01E-032.10E-029.97E-051.89E-032.07E-021.29E-01 + 85L3 750.003.72E-052.12E-047.97E-042.66E-033.66E-053.60E-043.01E-031.56E-02 + 85L31000.001.74E-056.94E-052.10E-045.99E-041.73E-051.05E-046.98E-043.17E-03 + 85L31500.006.67E-061.68E-053.88E-058.92E-056.54E-062.16E-059.71E-053.69E-04 + 85M1 5.322.02E+001.27E+048.22E+051.89E+072.33E+034.33E+061.62E+091.39E+11 + 85M1 6.321.69E+006.17E+034.16E+051.19E+071.39E+031.86E+065.30E+084.27E+10 + 85M1 8.321.18E+001.92E+031.40E+054.11E+066.11E+024.85E+059.12E+076.37E+09 + 85M1 12.326.45E-013.52E+022.74E+048.78E+051.89E+027.25E+047.77E+064.19E+08 + 85M1 19.322.91E-014.72E+013.66E+031.22E+054.94E+018.46E+035.01E+051.91E+07 + 85M1 28.001.43E-018.51E+006.27E+021.98E+041.64E+011.49E+035.61E+041.58E+06 + 85M1 43.005.92E-021.16E+007.46E+012.04E+034.60E+002.10E+024.88E+039.53E+04 + 85M1 55.003.49E-023.84E-012.14E+015.25E+022.23E+007.02E+011.26E+031.99E+04 + 85M1 73.001.87E-021.21E-015.11E+001.08E+029.73E-012.05E+012.75E+023.41E+03 + 85M1 106.008.04E-033.48E-028.23E-011.34E+013.29E-014.29E+004.02E+013.63E+02 + 85M1 155.003.36E-031.24E-021.51E-011.74E+001.11E-019.34E-016.23E+004.11E+01 + 85M1 285.008.54E-042.88E-031.60E-029.57E-022.00E-029.59E-023.94E-011.62E+00 + 85M1 500.002.65E-048.39E-043.03E-031.08E-024.35E-031.44E-024.07E-021.15E-01 + 85M2 5.014.46E+001.56E+061.73E+092.37E+113.20E+021.58E+051.51E+072.94E+08 + 85M2 6.013.54E+006.32E+055.30E+086.80E+101.86E+026.93E+046.17E+061.95E+08 + 85M2 8.012.24E+001.52E+058.38E+079.32E+097.86E+011.92E+041.48E+066.03E+07 + 85M2 12.011.03E+002.05E+046.51E+065.64E+082.34E+013.28E+031.98E+058.18E+06 + 85M2 19.013.70E-012.14E+033.83E+052.41E+075.97E+004.71E+022.06E+047.18E+05 + 85M2 28.001.43E-013.25E+023.71E+041.74E+061.90E+009.58E+013.16E+038.82E+04 + 85M2 43.004.62E-024.13E+012.96E+039.95E+045.37E-011.73E+014.09E+028.59E+03 + 85M2 55.002.35E-021.28E+017.13E+021.97E+042.61E-016.58E+001.29E+022.27E+03 + 85M2 73.001.06E-023.41E+001.42E+023.13E+031.15E-012.21E+003.47E+014.95E+02 + 85M2 106.003.62E-036.14E-011.79E+012.91E+023.93E-025.42E-016.35E+006.84E+01 + 85M2 155.001.20E-031.12E-012.30E+002.77E+011.33E-021.34E-011.17E+009.48E+00 + 85M2 285.002.09E-048.34E-031.01E-017.63E-012.41E-031.54E-028.64E-024.51E-01 + 85M2 500.004.45E-058.97E-047.04E-033.63E-025.10E-042.31E-039.04E-033.28E-02 + 85M3 4.431.41E+013.77E+064.74E+097.04E+113.98E+018.30E+069.03E+101.10E+14 + 85M3 5.439.82E+001.36E+061.24E+091.66E+112.15E+013.00E+062.20E+101.92E+13 + 85M3 7.435.28E+002.80E+051.60E+081.78E+108.31E+006.26E+052.53E+091.34E+12 + 85M3 11.432.01E+003.22E+041.00E+078.36E+082.25E+007.28E+041.31E+083.69E+10 + 85M3 18.436.10E-012.92E+034.89E+052.90E+075.27E-016.70E+035.11E+067.51E+08 + 85M3 28.001.96E-013.57E+023.63E+041.56E+061.48E-018.33E+023.09E+052.70E+07 + 85M3 43.005.70E-024.18E+012.61E+038.03E+044.05E-029.85E+011.83E+049.79E+05 + 85M3 55.002.73E-021.22E+015.87E+021.48E+041.93E-022.90E+013.70E+031.52E+05 + 85M3 73.001.15E-023.00E+001.06E+022.12E+038.25E-037.13E+006.07E+021.87E+04 + 85M3 106.003.59E-034.76E-011.15E+011.68E+022.71E-031.13E+005.89E+011.27E+03 + 85M3 155.001.08E-037.45E-021.22E+001.30E+018.78E-041.74E-015.83E+008.96E+01 + 85M3 285.001.63E-044.07E-033.67E-022.39E-011.48E-049.05E-031.66E-011.57E+00 + 85M3 500.003.06E-053.19E-041.71E-037.40E-032.98E-056.32E-047.34E-034.82E-02 + 85M4 3.913.73E+011.14E+054.11E+093.75E+131.24E+012.74E+051.50E+097.70E+11 + 85M4 4.911.88E+013.57E+048.32E+085.13E+125.96E+008.76E+043.21E+081.39E+11 + 85M4 6.916.36E+006.31E+037.55E+072.64E+111.97E+001.58E+043.26E+071.06E+10 + 85M4 10.911.37E+006.27E+023.05E+065.20E+094.37E-011.59E+031.59E+063.51E+08 + 85M4 17.912.34E-015.13E+019.37E+047.76E+078.28E-021.32E+026.30E+048.97E+06 + 85M4 28.004.40E-025.36E+004.08E+031.85E+061.79E-021.39E+013.61E+033.43E+05 + 85M4 43.008.35E-036.12E-012.05E+025.39E+044.01E-031.61E+002.43E+021.56E+04 + 85M4 55.003.15E-031.76E-013.71E+017.27E+031.68E-034.68E-015.25E+012.70E+03 + 85M4 73.001.01E-034.20E-025.28E+007.43E+026.09E-041.13E-019.19E+003.67E+02 + 85M4 106.002.23E-046.42E-034.18E-013.84E+011.57E-041.76E-029.54E-012.73E+01 + 85M4 155.004.74E-059.65E-043.32E-022.00E+003.90E-052.68E-039.84E-022.03E+00 + 85M4 285.004.06E-064.96E-056.74E-042.08E-024.07E-061.35E-042.82E-033.56E-02 + 85M4 500.004.51E-073.59E-062.40E-053.90E-044.96E-078.90E-061.19E-041.00E-03 + 85M5 3.795.72E+011.15E+058.75E+096.60E+137.20E+001.74E+048.47E+092.82E+14 + 85M5 4.792.79E+013.47E+041.69E+098.45E+123.39E+005.42E+031.64E+093.48E+13 + 85M5 6.799.07E+005.82E+031.45E+084.02E+111.09E+009.50E+021.43E+081.55E+12 + 85M5 10.791.86E+005.48E+025.56E+067.31E+092.40E-019.43E+015.60E+062.53E+10 + 85M5 17.793.05E-014.28E+011.63E+051.02E+084.55E-027.83E+001.70E+053.09E+08 + 85M5 28.005.42E-024.20E+006.62E+032.19E+069.81E-038.27E-017.14E+035.93E+06 + 85M5 43.009.99E-034.61E-013.20E+026.05E+042.24E-031.00E-013.58E+021.48E+05 + 85M5 55.003.71E-031.29E-015.64E+017.83E+039.52E-043.02E-026.44E+011.83E+04 + 85M5 73.001.17E-032.96E-027.69E+007.57E+023.52E-047.67E-038.99E+001.69E+03 + 85M5 106.002.53E-044.27E-035.63E-013.57E+019.39E-051.29E-036.76E-017.71E+01 + 85M5 155.005.35E-056.03E-044.01E-021.65E+002.42E-052.18E-044.89E-023.52E+00 + 85M5 285.004.71E-062.86E-056.31E-041.30E-022.80E-061.39E-057.64E-042.88E-02 + 85M5 500.005.53E-072.08E-061.66E-051.75E-044.11E-071.29E-061.87E-054.04E-04 + 85N+ 50.003.88E-021.40E+019.03E+023.87E+041.15E+005.93E+013.56E+031.64E+05 + 85N+ 70.001.56E-022.74E+001.21E+023.44E+034.25E-011.29E+014.48E+021.33E+04 + 85N+ 100.006.09E-035.13E-011.54E+012.97E+021.52E-012.75E+005.55E+011.05E+03 + 85N+ 150.002.09E-037.98E-021.57E+002.04E+014.72E-025.04E-015.84E+006.83E+01 + 85N+ 200.009.91E-042.25E-023.30E-013.31E+002.08E-021.60E-011.30E+001.10E+01 + 85N+ 500.001.14E-047.02E-044.08E-031.92E-021.67E-035.99E-032.01E-027.04E-02 + 86K 99.403.75E-013.14E-016.35E-023.01E-031.14E+016.75E+017.81E+012.02E+01 + 86K 100.103.68E-013.20E-017.81E-026.93E-031.12E+016.59E+017.89E+012.45E+01 + 86K 101.403.57E-013.31E-011.06E-011.78E-021.08E+016.30E+018.02E+013.26E+01 + 86K 104.603.32E-013.51E-011.74E-016.37E-029.85E+005.67E+018.16E+015.11E+01 + 86K 108.403.04E-013.65E-012.52E-011.48E-018.88E+005.01E+018.09E+016.97E+01 + 86K 112.002.81E-013.71E-013.17E-012.48E-018.08E+004.48E+017.87E+018.34E+01 + 86K 118.002.48E-013.70E-014.06E-014.34E-016.96E+003.74E+017.33E+019.85E+01 + 86K 126.002.12E-013.56E-014.87E-016.75E-015.77E+002.99E+016.48E+011.07E+02 + 86K 138.001.70E-013.22E-015.43E-019.50E-014.45E+002.18E+015.22E+011.03E+02 + 86K 151.001.37E-012.83E-015.47E-011.11E+003.45E+001.61E+014.08E+019.03E+01 + 86K 168.001.06E-012.35E-015.10E-011.16E+002.55E+001.12E+012.96E+017.13E+01 + 86K 181.008.84E-022.04E-014.68E-011.13E+002.06E+008.68E+002.34E+015.83E+01 + 86K 198.007.13E-021.70E-014.11E-011.04E+001.60E+006.42E+001.74E+014.46E+01 + 86K 221.005.49E-021.35E-013.41E-018.95E-011.18E+004.45E+001.20E+013.12E+01 + 86K 250.004.12E-021.03E-012.69E-017.20E-018.38E-012.96E+007.88E+002.04E+01 + 86K 315.002.43E-026.26E-021.66E-014.41E-014.44E-011.41E+003.55E+008.82E+00 + 86K 400.001.44E-023.76E-029.80E-022.50E-012.32E-016.66E-011.56E+003.64E+00 + 86K 490.009.44E-032.48E-026.27E-021.52E-011.35E-013.60E-017.93E-011.73E+00 + 86K 600.006.30E-031.66E-024.05E-029.26E-027.91E-021.99E-014.11E-018.34E-01 + 86K 830.003.41E-039.02E-032.04E-024.25E-023.39E-027.95E-021.50E-012.74E-01 + 86K 1100.002.06E-035.39E-031.15E-022.22E-021.64E-023.73E-026.58E-021.11E-01 + 86K 1350.001.45E-033.73E-037.70E-031.41E-029.68E-032.19E-023.71E-025.97E-02 + 86K 1600.001.09E-032.75E-035.52E-039.73E-036.25E-031.42E-022.35E-023.65E-02 + 86L1 19.051.09E+002.43E+024.78E+031.00E+042.42E+023.60E+041.10E+067.69E+06 + 86L1 19.751.03E+002.06E+024.65E+031.73E+042.17E+023.04E+049.04E+057.21E+06 + 86L1 21.059.34E-011.53E+024.18E+032.69E+041.80E+022.25E+046.43E+056.05E+06 + 86L1 24.257.39E-017.80E+012.80E+033.22E+041.18E+021.17E+043.02E+053.51E+06 + 86L1 28.055.73E-013.86E+011.63E+032.49E+047.65E+015.96E+031.39E+051.78E+06 + 86L1 31.004.78E-012.36E+011.08E+031.84E+045.69E+013.77E+038.17E+041.08E+06 + 86L1 37.003.42E-019.86E+004.89E+029.30E+033.37E+011.69E+033.20E+044.20E+05 + 86L1 45.002.32E-013.76E+001.92E+023.82E+031.89E+017.05E+021.14E+041.43E+05 + 86L1 57.001.42E-011.24E+005.96E+011.17E+039.43E+002.50E+023.36E+033.78E+04 + 86L1 70.009.15E-025.18E-012.13E+013.94E+025.16E+001.03E+021.17E+031.18E+04 + 86L1 87.005.66E-022.37E-017.25E+001.22E+022.74E+004.14E+013.95E+023.47E+03 + 86L1 100.004.14E-021.55E-013.71E+005.74E+011.83E+002.33E+011.99E+021.59E+03 + 86L1 117.002.90E-021.01E-011.80E+002.48E+011.16E+001.23E+019.27E+016.68E+02 + 86L1 140.001.93E-026.42E-028.26E-019.71E+006.95E-016.05E+003.95E+012.51E+02 + 86L1 165.001.33E-024.34E-024.26E-014.24E+004.35E-013.20E+001.84E+011.04E+02 + 86L1 230.006.25E-032.03E-021.29E-018.95E-011.71E-019.24E-014.14E+001.86E+01 + 86L1 315.003.14E-031.00E-024.76E-022.40E-017.13E-023.02E-011.09E+003.95E+00 + 86L1 410.001.81E-035.69E-032.23E-028.89E-023.48E-021.24E-013.80E-011.16E+00 + 86L1 520.001.12E-033.47E-031.18E-023.92E-021.84E-025.76E-021.54E-014.10E-01 + 86L1 750.005.63E-041.68E-034.75E-031.25E-026.98E-031.89E-024.23E-029.30E-02 + 86L11000.003.37E-049.73E-042.45E-035.61E-033.30E-038.27E-031.66E-023.22E-02 + 86L11500.001.70E-044.62E-041.02E-032.00E-031.16E-032.76E-034.94E-038.35E-03 + 86L2 18.342.46E+001.10E+041.26E+061.77E+072.92E+011.48E+031.45E+042.70E+04 + 86L2 19.042.23E+009.15E+031.02E+061.63E+072.61E+011.29E+031.43E+044.67E+04 + 86L2 20.341.88E+006.61E+037.03E+051.32E+072.14E+011.01E+031.31E+047.33E+04 + 86L2 23.541.27E+003.23E+033.09E+057.09E+061.39E+015.83E+029.32E+039.02E+04 + 86L2 27.348.48E-011.56E+031.33E+053.34E+068.88E+003.32E+025.84E+037.24E+04 + 86L2 31.005.98E-018.46E+026.51E+041.68E+066.11E+002.07E+023.75E+035.15E+04 + 86L2 37.003.64E-013.60E+022.39E+046.11E+053.62E+001.07E+021.91E+032.78E+04 + 86L2 45.002.07E-011.41E+027.94E+031.91E+052.03E+005.11E+018.69E+021.25E+04 + 86L2 57.001.04E-014.59E+012.11E+034.57E+041.02E+002.11E+013.24E+024.35E+03 + 86L2 70.005.69E-021.75E+016.72E+021.30E+045.59E-019.81E+001.35E+021.65E+03 + 86L2 87.002.98E-026.38E+002.03E+023.41E+032.98E-014.39E+005.28E+015.76E+02 + 86L2 100.001.97E-023.37E+009.49E+011.45E+032.00E-012.63E+002.89E+012.91E+02 + 86L2 117.001.23E-021.65E+004.06E+015.58E+021.27E-011.48E+001.47E+011.34E+02 + 86L2 140.007.20E-037.40E-011.56E+011.88E+027.64E-027.75E-016.79E+005.49E+01 + 86L2 165.004.42E-033.59E-016.55E+007.05E+014.79E-024.30E-013.36E+002.44E+01 + 86L2 230.001.67E-038.58E-021.19E+001.01E+011.88E-021.33E-018.29E-014.80E+00 + 86L2 315.006.76E-042.32E-022.51E-011.71E+007.84E-034.50E-022.28E-011.07E+00 + 86L2 410.003.23E-048.11E-037.17E-024.09E-013.78E-031.85E-027.95E-023.17E-01 + 86L2 520.001.70E-043.25E-032.43E-021.19E-011.96E-038.48E-033.16E-021.09E-01 + 86L2 750.006.52E-058.52E-045.02E-031.99E-027.19E-042.63E-038.10E-032.30E-02 + 86L21000.003.19E-053.17E-041.58E-035.41E-033.27E-041.08E-032.92E-037.27E-03 + 86L21500.001.20E-058.61E-053.49E-041.00E-031.07E-043.22E-047.49E-041.59E-03 + 86L3 15.625.69E+002.74E+043.97E+067.16E+073.70E+006.00E+045.40E+075.54E+09 + 86L3 16.325.03E+002.20E+043.06E+066.16E+073.24E+004.82E+044.02E+073.97E+09 + 86L3 17.624.04E+001.49E+041.93E+064.48E+072.56E+003.29E+042.40E+072.21E+09 + 86L3 20.822.49E+006.43E+037.12E+051.94E+071.54E+001.43E+047.81E+066.22E+08 + 86L3 24.621.51E+002.77E+032.61E+057.50E+069.19E-016.21E+032.55E+061.75E+08 + 86L3 31.007.56E-018.67E+026.56E+041.86E+064.54E-011.97E+035.53E+053.10E+07 + 86L3 37.004.39E-013.56E+022.27E+046.08E+052.65E-018.17E+021.73E+058.28E+06 + 86L3 45.002.38E-011.34E+027.05E+031.72E+051.46E-013.09E+024.84E+041.95E+06 + 86L3 57.001.13E-014.09E+011.72E+033.67E+047.12E-029.54E+011.06E+043.46E+05 + 86L3 70.005.87E-021.47E+015.05E+029.42E+033.82E-023.45E+012.87E+037.84E+04 + 86L3 87.002.91E-025.00E+001.39E+022.22E+031.98E-021.18E+017.34E+021.67E+04 + 86L3 100.001.86E-022.51E+006.08E+018.78E+021.31E-025.91E+003.10E+026.26E+03 + 86L3 117.001.12E-021.16E+002.41E+013.08E+028.16E-032.73E+001.18E+022.10E+03 + 86L3 140.006.27E-034.82E-018.40E+009.36E+014.77E-031.13E+003.99E+016.13E+02 + 86L3 165.003.70E-032.17E-013.22E+003.15E+012.93E-035.05E-011.49E+012.02E+02 + 86L3 230.001.29E-034.40E-024.73E-013.58E+001.10E-031.00E-012.14E+002.25E+01 + 86L3 315.004.84E-041.00E-028.02E-024.76E-014.39E-042.20E-023.56E-013.02E+00 + 86L3 410.002.18E-043.00E-031.89E-029.25E-022.06E-046.28E-038.26E-025.91E-01 + 86L3 520.001.08E-041.05E-035.35E-032.23E-021.05E-042.07E-032.28E-021.42E-01 + 86L3 750.003.90E-052.26E-048.51E-042.84E-033.86E-053.93E-043.31E-031.71E-02 + 86L31000.001.84E-057.38E-052.24E-046.39E-041.82E-051.14E-047.66E-043.48E-03 + 86L31500.006.98E-061.78E-054.12E-059.52E-056.87E-062.33E-051.06E-044.04E-04 + 86M1 5.481.90E+001.23E+047.86E+051.67E+072.34E+034.15E+061.49E+091.23E+11 + 86M1 6.481.60E+006.07E+034.04E+051.09E+071.42E+031.83E+065.04E+083.93E+10 + 86M1 8.481.13E+001.94E+031.38E+053.98E+066.36E+024.91E+059.01E+076.13E+09 + 86M1 12.486.25E-013.66E+022.76E+048.70E+052.00E+027.56E+047.99E+064.22E+08 + 86M1 19.482.86E-015.07E+013.80E+031.24E+055.31E+019.03E+035.30E+051.99E+07 + 86M1 28.001.43E-019.62E+006.82E+022.10E+041.81E+011.65E+036.22E+041.74E+06 + 86M1 43.005.98E-021.32E+008.22E+012.20E+035.08E+002.33E+025.39E+031.05E+05 + 86M1 55.003.54E-024.40E-012.38E+015.71E+022.46E+007.77E+011.38E+032.18E+04 + 86M1 73.001.90E-021.37E-015.72E+001.18E+021.07E+002.27E+013.03E+023.74E+03 + 86M1 106.008.20E-033.81E-029.25E-011.48E+013.63E-014.72E+004.41E+013.97E+02 + 86M1 155.003.45E-031.32E-021.69E-011.93E+001.22E-011.03E+006.82E+004.48E+01 + 86M1 285.008.85E-043.03E-031.75E-021.06E-012.20E-021.05E-014.30E-011.77E+00 + 86M1 500.002.76E-048.88E-043.27E-031.18E-024.77E-031.57E-024.44E-021.25E-01 + 86M2 5.164.20E+001.47E+061.56E+092.08E+113.27E+021.53E+051.41E+072.63E+08 + 86M2 6.163.36E+006.09E+054.95E+086.16E+101.92E+026.86E+045.91E+061.79E+08 + 86M2 8.162.16E+001.51E+058.15E+078.82E+098.29E+011.96E+041.47E+065.75E+07 + 86M2 12.161.01E+002.10E+046.58E+065.58E+082.52E+013.43E+032.02E+058.11E+06 + 86M2 19.163.70E-012.25E+033.98E+052.46E+076.51E+005.01E+022.16E+047.34E+05 + 86M2 28.001.47E-013.55E+024.05E+041.88E+062.12E+001.05E+023.43E+039.45E+04 + 86M2 43.004.79E-024.51E+013.23E+031.08E+056.00E-011.90E+014.45E+029.23E+03 + 86M2 55.002.45E-021.40E+017.77E+022.13E+042.92E-017.24E+001.40E+022.44E+03 + 86M2 73.001.11E-023.73E+001.55E+023.39E+031.29E-012.43E+003.78E+015.35E+02 + 86M2 106.003.82E-036.74E-011.95E+013.16E+024.40E-025.97E-016.92E+007.41E+01 + 86M2 155.001.28E-031.23E-012.51E+003.01E+011.50E-021.48E-011.28E+001.03E+01 + 86M2 285.002.23E-049.19E-031.11E-018.35E-012.71E-031.71E-029.50E-024.93E-01 + 86M2 500.004.80E-059.92E-047.77E-033.99E-025.74E-042.57E-039.98E-033.60E-02 + 86M3 4.541.35E+013.59E+064.35E+096.29E+113.92E+018.15E+068.58E+101.02E+14 + 86M3 5.549.49E+001.32E+061.17E+091.53E+112.15E+013.01E+062.16E+101.85E+13 + 86M3 7.545.16E+002.81E+051.57E+081.70E+108.43E+006.46E+052.57E+091.35E+12 + 86M3 11.541.99E+003.31E+041.01E+078.30E+082.32E+007.71E+041.39E+083.87E+10 + 86M3 18.546.13E-013.05E+035.06E+052.95E+075.50E-017.24E+035.52E+068.10E+08 + 86M3 28.002.01E-013.86E+023.89E+041.66E+061.57E-019.26E+023.47E+053.05E+07 + 86M3 43.005.89E-024.51E+012.80E+038.51E+044.30E-021.10E+022.05E+041.10E+06 + 86M3 55.002.83E-021.32E+016.28E+021.57E+042.05E-023.23E+014.15E+031.71E+05 + 86M3 73.001.19E-023.24E+001.14E+022.25E+038.76E-037.92E+006.79E+022.09E+04 + 86M3 106.003.74E-035.15E-011.23E+011.78E+022.88E-031.25E+006.58E+011.41E+03 + 86M3 155.001.14E-038.05E-021.31E+001.38E+019.33E-041.94E-016.50E+009.96E+01 + 86M3 285.001.71E-044.39E-033.93E-022.55E-011.57E-041.00E-021.84E-011.74E+00 + 86M3 500.003.22E-053.43E-041.83E-037.92E-033.17E-056.97E-048.13E-035.33E-02 + 86M4 4.023.53E+011.06E+053.70E+093.27E+131.21E+012.67E+051.39E+096.94E+11 + 86M4 5.021.81E+013.45E+047.78E+084.70E+125.92E+008.77E+043.11E+081.31E+11 + 86M4 7.026.27E+006.30E+037.40E+072.56E+112.00E+001.63E+043.29E+071.05E+10 + 86M4 11.021.38E+006.46E+023.12E+065.31E+094.53E-011.70E+031.67E+063.63E+08 + 86M4 18.022.41E-015.40E+019.86E+048.20E+078.72E-021.43E+026.79E+049.56E+06 + 86M4 28.004.66E-025.84E+004.49E+032.06E+061.93E-021.56E+014.05E+033.83E+05 + 86M4 43.008.89E-036.68E-012.25E+026.00E+044.34E-031.81E+002.72E+021.74E+04 + 86M4 55.003.36E-031.92E-014.09E+018.08E+031.82E-035.26E-015.88E+013.02E+03 + 86M4 73.001.08E-034.60E-025.82E+008.25E+026.60E-041.27E-011.03E+014.09E+02 + 86M4 106.002.39E-047.05E-034.60E-014.27E+011.71E-041.98E-021.07E+003.05E+01 + 86M4 155.005.12E-051.06E-033.66E-022.23E+004.25E-053.01E-031.10E-012.27E+00 + 86M4 285.004.43E-065.47E-057.44E-042.31E-024.44E-061.51E-043.17E-033.99E-02 + 86M4 500.004.97E-073.95E-062.65E-054.35E-045.42E-071.00E-051.34E-041.13E-03 + 86M5 3.895.43E+011.07E+057.98E+095.80E+137.01E+001.65E+047.94E+092.55E+14 + 86M5 4.892.69E+013.30E+041.60E+097.80E+123.36E+005.29E+031.60E+093.31E+13 + 86M5 6.898.95E+005.72E+031.44E+083.92E+111.11E+009.56E+021.46E+081.56E+12 + 86M5 10.891.88E+005.54E+025.74E+067.48E+092.48E-019.76E+015.94E+062.68E+10 + 86M5 17.893.13E-014.42E+011.73E+051.07E+084.76E-028.25E+001.85E+053.38E+08 + 86M5 28.005.73E-024.47E+007.32E+032.43E+061.05E-028.97E-018.10E+036.81E+06 + 86M5 43.001.06E-024.92E-013.54E+026.70E+042.40E-031.09E-014.06E+021.70E+05 + 86M5 55.003.94E-031.38E-016.24E+018.67E+031.02E-033.27E-027.31E+012.09E+04 + 86M5 73.001.24E-033.17E-028.52E+008.38E+023.78E-048.31E-031.02E+011.93E+03 + 86M5 106.002.71E-044.59E-036.24E-013.96E+011.01E-041.40E-037.66E-018.80E+01 + 86M5 155.005.71E-056.49E-044.44E-021.82E+002.61E-052.36E-045.54E-024.01E+00 + 86M5 285.004.95E-063.09E-056.97E-041.44E-023.02E-061.51E-058.62E-043.27E-02 + 86M5 500.006.22E-072.25E-061.83E-051.94E-044.44E-071.40E-062.09E-054.57E-04 + 86N+ 50.004.05E-021.55E+011.00E+034.30E+041.28E+006.65E+014.05E+031.88E+05 + 86N+ 70.001.64E-023.05E+001.34E+023.82E+034.74E-011.45E+015.09E+021.52E+04 + 86N+ 100.006.38E-035.70E-011.70E+013.29E+021.69E-013.07E+006.27E+011.20E+03 + 86N+ 150.002.19E-038.86E-021.74E+002.26E+015.27E-025.62E-016.55E+007.71E+01 + 86N+ 200.001.04E-032.49E-023.67E-013.67E+002.31E-021.78E-011.45E+001.23E+01 + 86N+ 500.001.21E-047.72E-044.54E-032.14E-021.86E-036.64E-032.23E-027.82E-02 + 87K 102.143.55E-012.87E-015.76E-022.71E-031.15E+016.53E+017.31E+011.84E+01 + 87K 102.843.49E-012.93E-017.04E-026.13E-031.13E+016.38E+017.38E+012.22E+01 + 87K 104.143.39E-013.03E-019.50E-021.55E-021.09E+016.11E+017.50E+012.94E+01 + 87K 107.343.15E-013.21E-011.55E-015.53E-029.97E+005.51E+017.64E+014.58E+01 + 87K 111.142.90E-013.34E-012.24E-011.28E-019.01E+004.89E+017.59E+016.25E+01 + 87K 115.002.67E-013.40E-012.87E-012.22E-018.17E+004.35E+017.39E+017.58E+01 + 87K 121.002.37E-013.41E-013.68E-013.87E-017.06E+003.65E+016.91E+018.95E+01 + 87K 129.002.03E-013.29E-014.42E-016.02E-015.88E+002.93E+016.14E+019.72E+01 + 87K 141.001.64E-013.00E-014.97E-018.54E-014.57E+002.16E+014.99E+019.49E+01 + 87K 154.001.33E-012.65E-015.05E-011.01E+003.55E+001.60E+013.93E+018.41E+01 + 87K 171.001.03E-012.23E-014.76E-011.07E+002.64E+001.12E+012.88E+016.72E+01 + 87K 184.008.66E-021.95E-014.41E-011.05E+002.15E+008.77E+002.29E+015.55E+01 + 87K 201.007.02E-021.64E-013.91E-019.80E-011.68E+006.53E+001.72E+014.28E+01 + 87K 224.005.44E-021.31E-013.28E-018.52E-011.24E+004.55E+001.20E+013.03E+01 + 87K 250.004.21E-021.04E-012.68E-017.10E-019.13E-013.17E+008.26E+002.09E+01 + 87K 315.002.50E-026.37E-021.68E-014.44E-014.84E-011.51E+003.74E+009.13E+00 + 87K 400.001.48E-023.86E-021.00E-012.56E-012.53E-017.15E-011.66E+003.80E+00 + 87K 490.009.75E-032.56E-026.48E-021.57E-011.47E-013.87E-018.41E-011.81E+00 + 87K 600.006.52E-031.73E-024.21E-029.61E-028.59E-022.13E-014.37E-018.79E-01 + 87K 830.003.54E-039.42E-032.14E-024.45E-023.67E-028.55E-021.60E-012.90E-01 + 87K 1100.002.15E-035.65E-031.21E-022.33E-021.77E-024.01E-027.03E-021.18E-01 + 87K 1350.001.51E-033.91E-038.11E-031.48E-021.04E-022.35E-023.97E-026.35E-02 + 87K 1600.001.14E-032.89E-035.82E-031.03E-026.74E-031.53E-022.51E-023.88E-02 + 87L1 19.641.03E+002.30E+024.33E+038.73E+032.43E+023.44E+041.01E+066.83E+06 + 87L1 20.349.73E-011.96E+024.23E+031.50E+042.19E+022.93E+048.36E+056.43E+06 + 87L1 21.648.82E-011.47E+023.82E+032.34E+041.82E+022.19E+046.01E+055.44E+06 + 87L1 24.847.02E-017.68E+012.61E+032.86E+041.21E+021.15E+042.89E+053.22E+06 + 87L1 28.645.49E-013.88E+011.56E+032.26E+047.93E+015.98E+031.35E+051.67E+06 + 87L1 32.004.49E-012.27E+019.86E+021.63E+045.71E+013.60E+037.51E+049.55E+05 + 87L1 38.003.25E-019.79E+004.59E+028.43E+033.43E+011.65E+033.03E+043.85E+05 + 87L1 46.002.23E-013.87E+001.86E+023.57E+031.95E+017.05E+021.11E+041.35E+05 + 87L1 58.001.38E-011.31E+005.98E+011.13E+039.88E+002.55E+023.34E+033.67E+04 + 87L1 71.008.97E-025.56E-012.19E+013.92E+025.46E+001.07E+021.19E+031.17E+04 + 87L1 88.005.60E-022.54E-017.64E+001.24E+022.92E+004.34E+014.06E+023.50E+03 + 87L1 101.004.12E-021.64E-013.95E+005.94E+011.96E+002.46E+012.06E+021.62E+03 + 87L1 118.002.90E-021.06E-011.93E+002.60E+011.25E+001.31E+019.68E+016.87E+02 + 87L1 141.001.94E-026.70E-028.92E-011.03E+017.50E-016.45E+004.15E+012.61E+02 + 87L1 170.001.27E-024.27E-024.20E-014.04E+004.40E-013.13E+001.74E+019.59E+01 + 87L1 235.006.13E-032.03E-021.31E-018.94E-011.77E-019.35E-014.10E+001.80E+01 + 87L1 320.003.13E-031.02E-024.90E-022.46E-017.52E-023.13E-011.11E+003.97E+00 + 87L1 410.001.87E-035.99E-032.40E-029.65E-023.82E-021.35E-014.12E-011.26E+00 + 87L1 520.001.17E-033.66E-031.26E-024.24E-022.02E-026.29E-021.67E-014.44E-01 + 87L1 750.005.88E-041.78E-035.08E-031.35E-027.65E-032.06E-024.59E-021.01E-01 + 87L11000.003.53E-041.03E-032.62E-036.02E-033.61E-039.01E-031.80E-023.48E-02 + 87L11500.001.78E-044.90E-041.09E-032.15E-031.26E-033.01E-035.36E-039.03E-03 + 87L2 18.912.32E+001.03E+041.13E+061.53E+072.96E+011.42E+031.34E+042.40E+04 + 87L2 19.612.12E+008.60E+039.20E+051.41E+072.66E+011.24E+031.32E+044.12E+04 + 87L2 20.911.79E+006.27E+036.42E+051.16E+072.20E+019.77E+021.22E+046.48E+04 + 87L2 24.111.23E+003.13E+032.88E+056.35E+061.44E+015.75E+028.81E+038.12E+04 + 87L2 27.918.26E-011.53E+031.26E+053.06E+069.30E+003.33E+025.62E+036.66E+04 + 87L2 32.005.66E-017.89E+025.83E+041.46E+066.20E+001.99E+023.47E+034.62E+04 + 87L2 38.003.50E-013.45E+022.21E+045.46E+053.73E+001.05E+021.81E+032.54E+04 + 87L2 46.002.03E-011.38E+027.55E+031.77E+052.13E+005.12E+018.41E+021.18E+04 + 87L2 58.001.03E-014.60E+012.07E+034.36E+041.08E+002.15E+013.21E+024.20E+03 + 87L2 71.005.71E-021.78E+016.72E+021.27E+045.99E-011.01E+011.36E+021.63E+03 + 87L2 88.003.03E-026.61E+002.06E+023.40E+033.22E-014.60E+005.41E+015.78E+02 + 87L2 101.002.01E-023.52E+009.74E+011.47E+032.17E-012.78E+002.99E+012.94E+02 + 87L2 118.001.27E-021.74E+004.21E+015.69E+021.39E-011.58E+001.53E+011.37E+02 + 87L2 141.007.46E-037.85E-011.63E+011.95E+028.37E-028.28E-017.13E+005.68E+01 + 87L2 170.004.29E-033.45E-016.10E+006.38E+014.93E-024.24E-013.22E+002.26E+01 + 87L2 235.001.67E-038.59E-021.16E+009.65E+001.99E-021.36E-018.27E-014.68E+00 + 87L2 320.006.92E-042.40E-022.54E-011.70E+008.43E-034.71E-022.34E-011.08E+00 + 87L2 410.003.47E-048.93E-037.87E-024.47E-014.25E-032.05E-028.72E-023.46E-01 + 87L2 520.001.83E-043.58E-032.67E-021.30E-012.21E-039.40E-033.48E-021.20E-01 + 87L2 750.007.07E-059.42E-045.53E-032.19E-028.10E-042.93E-038.95E-032.53E-02 + 87L21000.003.45E-053.50E-041.75E-035.96E-033.68E-041.21E-033.24E-038.02E-03 + 87L21500.001.30E-059.54E-053.87E-041.11E-031.21E-043.60E-048.33E-041.76E-03 + 87L3 16.035.40E+002.58E+043.60E+066.31E+073.61E+005.84E+045.07E+075.04E+09 + 87L3 16.734.79E+002.08E+042.79E+065.45E+073.17E+004.72E+043.80E+073.64E+09 + 87L3 18.033.86E+001.43E+041.79E+063.99E+072.52E+003.25E+042.29E+072.06E+09 + 87L3 21.232.41E+006.26E+036.72E+051.76E+071.53E+001.44E+047.65E+065.95E+08 + 87L3 25.031.48E+002.73E+032.51E+056.97E+069.24E-016.33E+032.55E+061.71E+08 + 87L3 32.007.06E-017.94E+025.76E+041.58E+064.36E-011.86E+035.00E+052.71E+07 + 87L3 38.004.16E-013.35E+022.06E+045.33E+052.58E-017.92E+021.62E+057.52E+06 + 87L3 46.002.30E-011.29E+026.56E+031.56E+051.44E-013.06E+024.67E+041.83E+06 + 87L3 58.001.11E-014.03E+011.64E+033.42E+047.14E-029.69E+011.05E+043.37E+05 + 87L3 71.005.81E-021.47E+014.93E+028.99E+033.87E-023.56E+012.91E+037.83E+04 + 87L3 88.002.92E-025.08E+001.38E+022.16E+032.03E-021.23E+017.58E+021.70E+04 + 87L3 101.001.87E-022.57E+006.10E+018.65E+021.34E-026.22E+003.23E+026.44E+03 + 87L3 118.001.13E-021.19E+002.44E+013.07E+028.41E-032.89E+001.24E+022.18E+03 + 87L3 141.006.39E-035.00E-018.57E+009.41E+014.94E-031.20E+004.23E+016.44E+02 + 87L3 170.003.50E-032.01E-012.88E+002.73E+012.83E-034.82E-011.38E+011.82E+02 + 87L3 235.001.26E-034.26E-024.46E-013.29E+001.09E-039.96E-022.09E+002.15E+01 + 87L3 320.004.83E-041.00E-027.83E-024.57E-014.44E-042.25E-023.60E-013.00E+00 + 87L3 410.002.28E-043.22E-032.01E-029.82E-022.17E-046.92E-039.10E-026.50E-01 + 87L3 520.001.14E-041.12E-035.70E-032.37E-021.11E-042.27E-032.51E-021.56E-01 + 87L3 750.004.09E-052.42E-049.07E-043.02E-034.07E-054.30E-043.64E-031.88E-02 + 87L31000.001.93E-057.86E-052.39E-046.81E-041.92E-051.24E-048.40E-043.81E-03 + 87L31500.007.35E-061.88E-054.39E-051.01E-047.21E-062.51E-051.16E-044.42E-04 + 87M1 5.651.79E+001.19E+047.53E+051.49E+072.37E+033.99E+061.38E+091.10E+11 + 87M1 6.651.51E+005.97E+033.93E+051.01E+071.45E+031.80E+064.79E+083.62E+10 + 87M1 8.651.08E+001.96E+031.37E+053.86E+066.63E+024.97E+058.90E+075.90E+09 + 87M1 12.656.06E-013.81E+022.80E+048.64E+052.13E+027.89E+048.21E+064.24E+08 + 87M1 19.652.82E-015.44E+013.94E+031.26E+055.73E+019.64E+035.60E+052.08E+07 + 87M1 28.001.44E-011.09E+017.42E+022.24E+042.00E+011.83E+036.91E+041.92E+06 + 87M1 43.006.03E-021.52E+009.06E+012.37E+035.62E+002.58E+025.96E+031.15E+05 + 87M1 55.003.58E-025.05E-012.64E+016.21E+022.72E+008.60E+011.53E+032.39E+04 + 87M1 73.001.93E-021.56E-016.40E+001.29E+021.19E+002.51E+013.34E+024.10E+03 + 87M1 106.008.37E-034.20E-021.04E+001.64E+014.01E-015.21E+004.85E+014.34E+02 + 87M1 155.003.54E-031.41E-021.89E-012.15E+001.35E-011.13E+007.49E+004.90E+01 + 87M1 285.009.15E-043.21E-031.92E-021.17E-012.43E-021.15E-014.71E-011.93E+00 + 87M1 500.002.88E-049.42E-043.53E-031.29E-025.26E-031.72E-024.85E-021.36E-01 + 87M2 5.333.93E+001.37E+061.39E+091.78E+113.32E+021.47E+051.30E+072.33E+08 + 87M2 6.333.17E+005.82E+054.56E+085.48E+101.98E+026.73E+045.58E+061.62E+08 + 87M2 8.332.07E+001.49E+057.83E+078.24E+098.72E+011.98E+041.43E+065.41E+07 + 87M2 12.339.91E-012.14E+046.59E+065.47E+082.70E+013.57E+032.05E+057.98E+06 + 87M2 19.333.70E-012.36E+034.12E+052.50E+077.09E+005.32E+022.24E+047.47E+05 + 87M2 28.001.51E-013.88E+024.41E+042.03E+062.37E+001.16E+023.72E+031.01E+05 + 87M2 43.004.97E-024.94E+013.51E+031.16E+056.71E-012.08E+014.83E+029.92E+03 + 87M2 55.002.55E-021.54E+018.47E+022.31E+043.27E-017.96E+001.53E+022.63E+03 + 87M2 73.001.16E-024.09E+001.69E+023.68E+031.44E-012.68E+004.11E+015.77E+02 + 87M2 106.004.03E-037.39E-012.13E+013.43E+024.94E-026.57E-017.55E+008.01E+01 + 87M2 155.001.35E-031.36E-012.75E+003.28E+011.68E-021.63E-011.40E+001.12E+01 + 87M2 285.002.40E-041.01E-021.22E-019.13E-013.05E-031.89E-021.04E-015.39E-01 + 87M2 500.005.18E-051.10E-038.58E-034.39E-026.48E-042.86E-031.10E-023.96E-02 + 87M3 4.661.28E+013.38E+063.94E+095.51E+113.83E+017.92E+068.03E+109.22E+13 + 87M3 5.669.11E+001.27E+061.09E+091.39E+112.13E+013.00E+062.09E+101.74E+13 + 87M3 7.665.02E+002.79E+051.52E+081.61E+108.51E+006.63E+052.59E+091.34E+12 + 87M3 11.661.97E+003.38E+041.02E+078.16E+082.38E+008.14E+041.45E+084.02E+10 + 87M3 18.666.15E-013.19E+035.21E+052.98E+075.72E-017.79E+035.94E+068.67E+08 + 87M3 28.002.07E-014.17E+024.18E+041.76E+061.67E-011.03E+033.90E+053.43E+07 + 87M3 43.006.08E-024.87E+013.00E+039.02E+044.57E-021.22E+022.30E+041.23E+06 + 87M3 55.002.93E-021.43E+016.73E+021.66E+042.18E-023.59E+014.65E+031.91E+05 + 87M3 73.001.24E-023.50E+001.22E+022.39E+039.30E-038.82E+007.60E+022.34E+04 + 87M3 106.003.90E-035.56E-011.31E+011.89E+023.06E-031.39E+007.35E+011.58E+03 + 87M3 155.001.19E-038.69E-021.40E+001.47E+019.91E-042.15E-017.24E+001.11E+02 + 87M3 285.001.80E-044.74E-034.22E-022.72E-011.67E-041.11E-022.04E-011.93E+00 + 87M3 500.003.39E-053.69E-041.96E-038.46E-033.36E-057.70E-049.01E-035.90E-02 + 87M4 4.143.35E+011.00E+053.33E+092.87E+131.18E+012.60E+051.30E+096.29E+11 + 87M4 5.141.75E+013.33E+047.29E+084.32E+125.89E+008.79E+043.02E+081.23E+11 + 87M4 7.146.18E+006.30E+037.25E+072.49E+112.03E+001.69E+043.33E+071.04E+10 + 87M4 11.141.39E+006.65E+023.18E+065.42E+094.69E-011.81E+031.75E+063.75E+08 + 87M4 18.142.48E-015.68E+011.04E+058.65E+079.17E-021.56E+027.32E+041.02E+07 + 87M4 28.004.93E-026.35E+004.93E+032.29E+062.08E-021.75E+014.54E+034.27E+05 + 87M4 43.009.45E-037.28E-012.47E+026.66E+044.68E-032.03E+003.05E+021.94E+04 + 87M4 55.003.58E-032.10E-014.49E+018.97E+031.96E-035.91E-016.59E+013.36E+03 + 87M4 73.001.16E-035.03E-026.39E+009.16E+027.15E-041.43E-011.15E+014.56E+02 + 87M4 106.002.57E-047.73E-035.06E-014.75E+011.86E-042.23E-021.20E+003.40E+01 + 87M4 155.005.52E-051.17E-034.03E-022.48E+004.62E-053.39E-031.24E-012.54E+00 + 87M4 285.004.77E-066.04E-058.19E-042.57E-024.84E-061.70E-043.56E-034.46E-02 + 87M4 500.005.29E-074.37E-062.93E-054.84E-045.93E-071.13E-051.50E-041.26E-03 + 87M5 4.005.14E+019.83E+047.26E+095.09E+136.82E+001.57E+047.45E+092.31E+14 + 87M5 5.002.60E+013.13E+041.52E+097.19E+123.33E+005.14E+031.56E+093.14E+13 + 87M5 7.008.82E+005.60E+031.42E+083.82E+111.12E+009.60E+021.49E+081.56E+12 + 87M5 11.001.90E+005.59E+025.91E+067.64E+092.55E-011.01E+026.30E+062.83E+10 + 87M5 18.003.21E-014.55E+011.83E+051.13E+084.98E-028.69E+002.01E+053.69E+08 + 87M5 28.006.04E-024.75E+008.10E+032.69E+061.12E-029.73E-019.20E+037.82E+06 + 87M5 43.001.12E-025.24E-013.92E+027.41E+042.57E-031.18E-014.61E+021.94E+05 + 87M5 55.004.18E-031.47E-016.91E+019.60E+031.09E-033.55E-028.30E+012.39E+04 + 87M5 73.001.33E-033.39E-029.43E+009.27E+024.06E-049.00E-031.16E+012.21E+03 + 87M5 106.002.89E-044.92E-036.90E-014.37E+011.09E-041.51E-038.68E-011.00E+02 + 87M5 155.006.11E-056.97E-044.91E-022.02E+002.81E-052.55E-046.28E-024.57E+00 + 87M5 285.005.40E-063.32E-057.69E-041.59E-023.26E-061.63E-059.74E-043.71E-02 + 87M5 500.006.73E-072.43E-062.01E-052.14E-044.78E-071.51E-062.34E-055.17E-04 + 87N+ 50.004.23E-021.71E+011.10E+034.75E+041.44E+007.49E+014.59E+032.14E+05 + 87N+ 70.001.71E-023.36E+001.47E+024.20E+035.32E-011.63E+015.75E+021.72E+04 + 87N+ 100.006.69E-036.28E-011.87E+013.61E+021.90E-013.45E+007.06E+011.35E+03 + 87N+ 150.002.30E-039.77E-021.92E+002.48E+015.91E-026.30E-017.35E+008.66E+01 + 87N+ 200.001.10E-032.75E-024.04E-014.04E+002.60E-021.99E-011.62E+001.38E+01 + 87N+ 500.001.29E-048.47E-045.02E-032.37E-022.08E-037.40E-032.48E-028.69E-02 + 88K 104.923.36E-012.63E-015.23E-022.45E-031.16E+016.32E+016.83E+011.67E+01 + 88K 105.623.31E-012.68E-016.37E-025.46E-031.14E+016.17E+016.90E+012.01E+01 + 88K 106.923.22E-012.77E-018.54E-021.37E-021.10E+015.92E+017.02E+012.65E+01 + 88K 110.123.00E-012.94E-011.39E-014.81E-021.01E+015.36E+017.16E+014.12E+01 + 88K 113.922.77E-013.06E-012.01E-011.12E-019.15E+004.77E+017.12E+015.62E+01 + 88K 118.002.54E-013.13E-012.60E-011.99E-018.27E+004.23E+016.94E+016.88E+01 + 88K 124.002.26E-013.14E-013.33E-013.45E-017.18E+003.57E+016.52E+018.14E+01 + 88K 132.001.95E-013.05E-014.02E-015.38E-016.00E+002.89E+015.82E+018.88E+01 + 88K 144.001.58E-012.80E-014.56E-017.70E-014.69E+002.15E+014.78E+018.75E+01 + 88K 157.001.29E-012.50E-014.68E-019.21E-013.67E+001.60E+013.80E+017.83E+01 + 88K 174.001.01E-012.12E-014.46E-019.91E-012.74E+001.13E+012.81E+016.34E+01 + 88K 187.008.50E-021.86E-014.17E-019.80E-012.24E+008.88E+002.25E+015.28E+01 + 88K 204.006.92E-021.58E-013.73E-019.23E-011.75E+006.64E+001.70E+014.11E+01 + 88K 227.005.39E-021.28E-013.16E-018.13E-011.30E+004.66E+001.20E+012.94E+01 + 88K 255.004.12E-021.00E-012.57E-016.76E-019.41E-013.19E+008.08E+001.99E+01 + 88K 320.002.47E-026.27E-021.64E-014.32E-015.04E-011.54E+003.73E+008.93E+00 + 88K 405.001.49E-023.87E-021.00E-012.53E-012.66E-017.38E-011.68E+003.79E+00 + 88K 490.001.01E-022.65E-026.70E-021.62E-011.60E-014.15E-018.92E-011.90E+00 + 88K 600.006.75E-031.79E-024.37E-029.97E-029.33E-022.29E-014.64E-019.25E-01 + 88K 830.003.68E-039.84E-032.24E-024.65E-023.98E-029.19E-021.71E-013.07E-01 + 88K 1100.002.23E-035.92E-031.28E-022.45E-021.92E-024.31E-027.51E-021.25E-01 + 88K 1350.001.57E-034.11E-038.53E-031.56E-021.13E-022.53E-024.25E-026.75E-02 + 88K 1600.001.18E-033.04E-036.14E-031.08E-027.26E-031.64E-022.69E-024.13E-02 + 88L1 20.249.65E-012.18E+023.94E+037.65E+032.45E+023.31E+049.28E+056.09E+06 + 88L1 20.949.16E-011.87E+023.85E+031.30E+042.22E+022.82E+047.76E+055.74E+06 + 88L1 22.248.33E-011.42E+023.51E+032.04E+041.86E+022.13E+045.63E+054.90E+06 + 88L1 25.446.68E-017.57E+012.44E+032.54E+041.24E+021.14E+042.76E+052.96E+06 + 88L1 29.245.26E-013.91E+011.48E+032.06E+048.23E+016.00E+031.32E+051.57E+06 + 88L1 32.004.47E-012.54E+011.03E+031.60E+046.30E+013.97E+038.16E+049.99E+05 + 88L1 38.003.24E-011.11E+014.88E+028.53E+033.79E+011.82E+033.29E+044.07E+05 + 88L1 46.002.23E-014.41E+002.01E+023.69E+032.15E+017.76E+021.21E+041.43E+05 + 88L1 58.001.39E-011.50E+006.53E+011.19E+031.09E+012.81E+023.64E+033.93E+04 + 88L1 71.009.06E-026.32E-012.42E+014.19E+026.02E+001.18E+021.30E+031.26E+04 + 88L1 88.005.68E-022.83E-018.48E+001.35E+023.22E+004.76E+014.42E+023.77E+03 + 88L1 101.004.18E-021.80E-014.40E+006.46E+012.16E+002.70E+012.24E+021.75E+03 + 88L1 118.002.95E-021.15E-012.15E+002.84E+011.38E+001.43E+011.05E+027.41E+02 + 88L1 141.001.98E-027.15E-029.91E-011.13E+018.27E-017.07E+004.52E+012.81E+02 + 88L1 170.001.30E-024.52E-024.64E-014.44E+004.85E-013.43E+001.90E+011.04E+02 + 88L1 235.006.30E-032.13E-021.43E-019.81E-011.95E-011.02E+004.46E+001.95E+01 + 88L1 320.003.24E-031.07E-025.30E-022.68E-018.27E-023.42E-011.21E+004.29E+00 + 88L1 410.001.94E-036.32E-032.58E-021.05E-014.20E-021.48E-014.48E-011.36E+00 + 88L1 520.001.22E-033.87E-031.36E-024.58E-022.22E-026.86E-021.82E-014.80E-01 + 88L1 750.006.13E-041.88E-035.44E-031.45E-028.39E-032.24E-024.98E-021.09E-01 + 88L11000.003.69E-041.09E-032.80E-036.47E-033.95E-039.81E-031.95E-023.77E-02 + 88L11500.001.87E-045.21E-041.17E-032.30E-031.38E-033.27E-035.81E-039.77E-03 + 88L2 19.482.20E+009.64E+031.01E+061.33E+073.02E+011.37E+031.24E+042.14E+04 + 88L2 20.182.01E+008.11E+038.33E+051.23E+072.72E+011.20E+031.23E+043.65E+04 + 88L2 21.481.71E+005.97E+035.87E+051.02E+072.25E+019.52E+021.14E+045.75E+04 + 88L2 24.681.18E+003.03E+032.69E+055.71E+061.49E+015.69E+028.34E+037.32E+04 + 88L2 28.488.05E-011.51E+031.20E+052.81E+069.75E+003.34E+025.40E+036.13E+04 + 88L2 32.005.85E-018.59E+026.25E+041.51E+066.91E+002.16E+023.62E+034.57E+04 + 88L2 38.003.62E-013.75E+022.38E+045.71E+054.16E+001.14E+021.90E+032.58E+04 + 88L2 46.002.11E-011.50E+028.13E+031.86E+052.37E+005.56E+018.91E+021.21E+04 + 88L2 58.001.08E-015.02E+012.23E+034.62E+041.20E+002.34E+013.42E+024.38E+03 + 88L2 71.005.98E-021.95E+017.26E+021.35E+046.69E-011.11E+011.46E+021.71E+03 + 88L2 88.003.18E-027.21E+002.23E+023.64E+033.60E-015.02E+005.82E+016.13E+02 + 88L2 101.002.12E-023.84E+001.06E+021.57E+032.42E-013.04E+003.22E+013.13E+02 + 88L2 118.001.34E-021.90E+004.56E+016.12E+021.55E-011.72E+001.65E+011.46E+02 + 88L2 141.007.90E-038.58E-011.77E+012.10E+029.37E-029.08E-017.73E+006.09E+01 + 88L2 170.004.56E-033.77E-016.64E+006.88E+015.52E-024.66E-013.49E+002.43E+01 + 88L2 235.001.78E-039.42E-021.27E+001.05E+012.23E-021.50E-019.01E-015.07E+00 + 88L2 320.007.40E-042.63E-022.78E-011.85E+009.46E-035.20E-022.56E-011.18E+00 + 88L2 410.003.74E-049.82E-038.63E-024.87E-014.78E-032.27E-029.57E-023.77E-01 + 88L2 520.001.97E-043.95E-032.94E-021.43E-012.49E-031.04E-023.83E-021.31E-01 + 88L2 750.007.63E-051.04E-036.11E-032.41E-029.12E-043.26E-039.89E-032.78E-02 + 88L21000.003.76E-053.88E-041.93E-036.57E-034.15E-041.35E-033.59E-038.85E-03 + 88L21500.001.43E-051.06E-044.30E-041.23E-031.36E-044.03E-049.27E-041.95E-03 + 88L3 16.445.14E+002.44E+043.28E+065.58E+073.53E+005.69E+044.77E+074.61E+09 + 88L3 17.144.57E+001.98E+042.56E+064.84E+073.11E+004.62E+043.60E+073.35E+09 + 88L3 18.443.70E+001.37E+041.65E+063.57E+072.48E+003.21E+042.20E+071.92E+09 + 88L3 21.642.33E+006.10E+036.34E+051.61E+071.52E+001.45E+047.51E+065.70E+08 + 88L3 25.441.45E+002.70E+032.41E+056.50E+069.29E-016.46E+032.55E+061.68E+08 + 88L3 32.007.26E-018.53E+026.10E+041.63E+064.61E-012.06E+035.58E+053.00E+07 + 88L3 38.004.29E-013.60E+022.18E+045.54E+052.73E-018.76E+021.80E+058.33E+06 + 88L3 46.002.37E-011.38E+026.96E+031.63E+051.52E-013.39E+025.20E+042.03E+06 + 88L3 58.001.14E-014.33E+011.75E+033.58E+047.54E-021.07E+021.17E+043.73E+05 + 88L3 71.006.01E-021.58E+015.24E+029.44E+034.09E-023.93E+013.23E+038.65E+04 + 88L3 88.003.02E-025.45E+001.46E+022.27E+032.14E-021.36E+018.41E+021.87E+04 + 88L3 101.001.94E-022.76E+006.48E+019.10E+021.42E-026.88E+003.58E+027.11E+03 + 88L3 118.001.18E-021.28E+002.59E+013.23E+028.88E-033.20E+001.38E+022.41E+03 + 88L3 141.006.65E-035.37E-019.12E+009.93E+015.22E-031.33E+004.68E+017.09E+02 + 88L3 170.003.65E-032.16E-013.06E+002.89E+013.00E-035.32E-011.53E+012.00E+02 + 88L3 235.001.31E-034.57E-024.75E-013.48E+001.15E-031.10E-012.30E+002.37E+01 + 88L3 320.005.05E-041.07E-028.35E-024.84E-014.68E-042.48E-023.97E-013.30E+00 + 88L3 410.002.39E-043.45E-032.15E-021.04E-012.30E-047.61E-031.00E-017.13E-01 + 88L3 520.001.19E-041.20E-036.08E-032.52E-021.17E-042.49E-032.76E-021.71E-01 + 88L3 750.004.32E-052.58E-049.67E-043.22E-034.29E-054.70E-044.00E-032.06E-02 + 88L31000.002.03E-058.36E-052.55E-047.25E-042.02E-051.35E-049.21E-044.18E-03 + 88L31500.007.68E-061.99E-054.66E-051.08E-047.56E-062.71E-051.27E-044.84E-04 + 88M1 5.821.69E+001.15E+047.26E+051.35E+072.40E+033.85E+061.27E+099.86E+10 + 88M1 6.821.43E+005.90E+033.84E+059.47E+061.49E+031.77E+064.57E+083.35E+10 + 88M1 8.821.03E+001.98E+031.36E+053.75E+066.92E+025.04E+058.82E+075.69E+09 + 88M1 12.825.88E-013.97E+022.84E+048.61E+052.26E+028.24E+048.44E+064.28E+08 + 88M1 19.822.77E-015.83E+014.08E+031.28E+056.18E+011.03E+045.92E+052.16E+07 + 88M1 28.001.44E-011.23E+018.07E+022.39E+042.21E+012.04E+037.66E+042.11E+06 + 88M1 43.006.08E-021.73E+009.97E+012.56E+036.21E+002.86E+026.59E+031.27E+05 + 88M1 55.003.62E-025.79E-012.93E+016.74E+023.01E+009.52E+011.69E+032.63E+04 + 88M1 73.001.96E-021.78E-017.15E+001.42E+021.31E+002.77E+013.68E+024.50E+03 + 88M1 106.008.54E-034.65E-021.17E+001.81E+014.44E-015.75E+005.33E+014.75E+02 + 88M1 155.003.63E-031.53E-022.12E-012.39E+001.49E-011.25E+008.21E+005.35E+01 + 88M1 285.009.45E-043.41E-032.10E-021.29E-012.68E-021.27E-015.15E-012.10E+00 + 88M1 500.003.00E-041.00E-033.82E-031.40E-025.79E-031.89E-025.29E-021.48E-01 + 88M2 5.493.69E+001.28E+061.26E+091.55E+113.39E+021.42E+051.21E+072.09E+08 + 88M2 6.493.01E+005.59E+054.24E+084.95E+102.05E+026.66E+045.33E+061.48E+08 + 88M2 8.491.99E+001.48E+057.57E+077.76E+099.19E+012.01E+041.41E+065.14E+07 + 88M2 12.499.72E-012.19E+046.63E+065.38E+082.90E+013.73E+032.08E+057.88E+06 + 88M2 19.493.70E-012.47E+034.27E+052.55E+077.74E+005.66E+022.34E+047.61E+05 + 88M2 28.001.55E-014.24E+024.80E+042.19E+062.65E+001.28E+024.04E+031.08E+05 + 88M2 43.005.16E-025.40E+013.83E+031.26E+057.52E-012.29E+015.25E+021.07E+04 + 88M2 55.002.66E-021.68E+019.23E+022.49E+043.67E-018.75E+001.66E+022.83E+03 + 88M2 73.001.22E-024.48E+001.85E+023.98E+031.62E-012.95E+004.48E+016.22E+02 + 88M2 106.004.25E-038.11E-012.33E+013.72E+025.54E-027.24E-018.24E+008.67E+01 + 88M2 155.001.43E-031.49E-013.01E+003.56E+011.89E-021.80E-011.53E+001.21E+01 + 88M2 285.002.57E-041.12E-021.34E-019.99E-013.44E-032.10E-021.15E-015.89E-01 + 88M2 500.005.60E-051.21E-039.47E-034.83E-027.31E-043.19E-031.22E-024.36E-02 + 88M3 4.791.22E+013.18E+063.56E+094.82E+113.74E+017.70E+067.50E+108.33E+13 + 88M3 5.798.75E+001.23E+061.02E+091.25E+112.11E+012.99E+062.02E+101.64E+13 + 88M3 7.794.88E+002.77E+051.47E+081.52E+108.58E+006.79E+052.61E+091.33E+12 + 88M3 11.791.95E+003.46E+041.02E+078.01E+082.44E+008.57E+041.52E+084.17E+10 + 88M3 18.796.17E-013.33E+035.35E+053.01E+075.94E-018.38E+036.37E+069.26E+08 + 88M3 28.002.12E-014.50E+024.47E+041.86E+061.77E-011.15E+034.38E+053.86E+07 + 88M3 43.006.27E-025.26E+013.21E+039.55E+044.85E-021.36E+022.58E+041.38E+06 + 88M3 55.003.03E-021.54E+017.20E+021.76E+042.31E-023.99E+015.21E+032.14E+05 + 88M3 73.001.28E-023.78E+001.31E+022.53E+039.87E-039.81E+008.50E+022.61E+04 + 88M3 106.004.06E-036.00E-011.41E+012.01E+023.24E-031.55E+008.20E+011.76E+03 + 88M3 155.001.24E-039.38E-021.50E+001.56E+011.05E-032.39E-018.06E+001.23E+02 + 88M3 285.001.89E-045.12E-034.52E-022.90E-011.77E-041.23E-022.27E-012.14E+00 + 88M3 500.003.57E-053.98E-042.11E-039.04E-033.56E-058.51E-049.98E-036.52E-02 + 88M4 4.253.19E+019.46E+043.02E+092.54E+131.16E+012.55E+051.23E+095.76E+11 + 88M4 5.251.69E+013.24E+046.86E+084.00E+125.86E+008.84E+042.94E+081.17E+11 + 88M4 7.256.10E+006.32E+037.12E+072.42E+112.06E+001.75E+043.38E+071.04E+10 + 88M4 11.251.41E+006.86E+023.25E+065.54E+094.86E-011.93E+031.85E+063.89E+08 + 88M4 18.252.55E-015.99E+011.09E+059.13E+079.64E-021.70E+027.90E+041.09E+07 + 88M4 28.005.21E-026.91E+005.42E+032.54E+062.24E-021.97E+015.09E+034.76E+05 + 88M4 43.001.00E-027.94E-012.72E+027.39E+045.05E-032.28E+003.41E+022.16E+04 + 88M4 55.003.82E-032.29E-014.93E+019.95E+032.12E-036.64E-017.38E+013.74E+03 + 88M4 73.001.24E-035.51E-027.03E+001.02E+037.74E-041.61E-011.29E+015.08E+02 + 88M4 106.002.75E-048.48E-035.57E-015.27E+012.01E-042.51E-021.34E+003.79E+01 + 88M4 155.005.93E-051.28E-034.43E-022.75E+005.02E-053.81E-031.39E-012.83E+00 + 88M4 285.005.23E-066.66E-059.02E-042.86E-025.27E-061.92E-043.99E-034.99E-02 + 88M4 500.005.78E-074.82E-063.23E-055.39E-046.47E-071.27E-051.69E-041.42E-03 + 88M5 4.104.90E+019.13E+046.68E+094.52E+136.66E+001.49E+047.05E+092.11E+14 + 88M5 5.102.51E+012.99E+041.44E+096.68E+123.30E+005.03E+031.53E+093.01E+13 + 88M5 7.108.70E+005.51E+031.42E+083.73E+111.13E+009.67E+021.52E+081.58E+12 + 88M5 11.101.91E+005.65E+026.10E+067.83E+092.63E-011.04E+026.68E+062.99E+10 + 88M5 18.103.30E-014.69E+011.94E+051.19E+085.21E-029.15E+002.19E+054.03E+08 + 88M5 28.006.36E-025.05E+008.95E+032.98E+061.20E-021.05E+001.04E+048.97E+06 + 88M5 43.001.19E-025.58E-014.34E+028.20E+042.75E-031.28E-015.23E+022.23E+05 + 88M5 55.004.44E-031.57E-017.64E+011.06E+041.17E-033.84E-029.40E+012.74E+04 + 88M5 73.001.41E-033.62E-021.04E+011.02E+034.35E-049.74E-031.31E+012.52E+03 + 88M5 106.003.08E-045.26E-037.64E-014.83E+011.17E-041.64E-039.83E-011.14E+02 + 88M5 155.006.55E-057.48E-045.43E-022.23E+003.02E-052.76E-047.10E-025.19E+00 + 88M5 285.005.81E-063.58E-058.49E-041.76E-023.51E-061.76E-051.10E-034.21E-02 + 88M5 500.007.26E-072.62E-062.21E-052.36E-045.15E-071.63E-062.63E-055.84E-04 + 88N+ 50.004.41E-021.90E+011.22E+035.28E+041.61E+008.42E+015.23E+032.46E+05 + 88N+ 70.001.79E-023.74E+001.63E+024.65E+035.95E-011.83E+016.53E+021.97E+04 + 88N+ 100.007.00E-036.99E-012.08E+013.99E+022.13E-013.86E+007.98E+011.53E+03 + 88N+ 150.002.42E-031.09E-012.13E+002.75E+016.61E-027.04E-018.26E+009.77E+01 + 88N+ 200.001.16E-033.06E-024.50E-014.48E+002.90E-022.22E-011.82E+001.55E+01 + 88N+ 500.001.37E-049.33E-045.59E-032.64E-022.32E-038.22E-032.75E-029.66E-02 + 89K 107.753.19E-012.41E-014.77E-022.22E-031.17E+016.13E+016.40E+011.53E+01 + 89K 108.453.14E-012.46E-015.78E-024.88E-031.15E+015.99E+016.47E+011.83E+01 + 89K 109.753.05E-012.54E-017.72E-021.21E-021.11E+015.75E+016.57E+012.39E+01 + 89K 112.952.86E-012.70E-011.25E-014.22E-021.02E+015.22E+016.71E+013.70E+01 + 89K 116.752.64E-012.81E-011.80E-019.78E-029.30E+004.66E+016.69E+015.05E+01 + 89K 121.002.42E-012.88E-012.36E-011.78E-018.40E+004.13E+016.54E+016.25E+01 + 89K 127.002.16E-012.90E-013.03E-013.08E-017.31E+003.50E+016.16E+017.40E+01 + 89K 135.001.87E-012.83E-013.67E-014.82E-016.14E+002.85E+015.53E+018.11E+01 + 89K 147.001.53E-012.62E-014.19E-016.97E-014.82E+002.13E+014.58E+018.08E+01 + 89K 160.001.25E-012.36E-014.35E-018.42E-013.79E+001.60E+013.67E+017.30E+01 + 89K 177.009.85E-022.01E-014.20E-019.18E-012.85E+001.14E+012.74E+015.99E+01 + 89K 190.008.34E-021.78E-013.95E-019.16E-012.33E+009.00E+002.21E+015.02E+01 + 89K 207.006.82E-021.52E-013.57E-018.72E-011.83E+006.76E+001.68E+013.95E+01 + 89K 230.005.34E-021.24E-013.06E-017.77E-011.37E+004.78E+001.19E+012.86E+01 + 89K 255.004.22E-021.01E-012.57E-016.67E-011.03E+003.41E+008.46E+002.04E+01 + 89K 320.002.54E-026.38E-021.67E-014.35E-015.49E-011.65E+003.93E+009.23E+00 + 89K 405.001.53E-023.98E-021.03E-012.59E-012.90E-017.92E-011.78E+003.95E+00 + 89K 500.009.98E-032.63E-026.64E-021.59E-011.65E-014.20E-018.86E-011.85E+00 + 89K 610.006.76E-031.81E-024.40E-029.94E-029.70E-022.35E-014.68E-019.19E-01 + 89K 840.003.74E-031.01E-022.29E-024.73E-024.19E-029.56E-021.75E-013.13E-01 + 89K 1100.002.32E-036.21E-031.34E-022.57E-022.07E-024.63E-028.01E-021.33E-01 + 89K 1350.001.63E-034.32E-038.99E-031.64E-021.22E-022.72E-024.54E-027.18E-02 + 89K 1600.001.23E-033.19E-036.47E-031.14E-027.84E-031.76E-022.87E-024.40E-02 + 89L1 20.849.09E-012.08E+023.60E+036.73E+032.48E+023.19E+048.60E+055.46E+06 + 89L1 21.548.64E-011.79E+023.53E+031.14E+042.25E+022.73E+047.22E+055.16E+06 + 89L1 22.847.88E-011.37E+023.23E+031.78E+041.89E+022.08E+045.29E+054.43E+06 + 89L1 26.046.37E-017.48E+012.28E+032.26E+041.28E+021.13E+042.64E+052.73E+06 + 89L1 29.845.04E-013.94E+011.42E+031.87E+048.55E+016.03E+031.28E+051.47E+06 + 89L1 33.004.21E-012.45E+019.48E+021.42E+046.35E+013.81E+037.53E+048.94E+05 + 89L1 39.003.09E-011.10E+014.61E+027.77E+033.87E+011.79E+033.12E+043.74E+05 + 89L1 47.002.15E-014.53E+001.95E+023.46E+032.23E+017.78E+021.18E+041.36E+05 + 89L1 59.001.35E-011.59E+006.56E+011.15E+031.14E+012.87E+023.63E+033.82E+04 + 89L1 72.008.89E-026.79E-012.48E+014.17E+026.38E+001.22E+021.31E+031.25E+04 + 89L1 89.005.62E-023.04E-018.91E+001.37E+023.44E+004.99E+014.55E+023.81E+03 + 89L1 102.004.16E-021.93E-014.68E+006.67E+012.32E+002.84E+012.32E+021.79E+03 + 89L1 119.002.95E-021.22E-012.31E+002.97E+011.48E+001.52E+011.10E+027.64E+02 + 89L1 142.001.99E-027.54E-021.07E+001.20E+018.94E-017.54E+004.75E+012.92E+02 + 89L1 170.001.33E-024.80E-025.13E-014.88E+005.35E-013.75E+002.06E+011.12E+02 + 89L1 235.006.49E-032.25E-021.56E-011.08E+002.15E-011.12E+004.85E+002.10E+01 + 89L1 320.003.34E-031.13E-025.75E-022.93E-019.11E-023.74E-011.31E+004.64E+00 + 89L1 410.002.01E-036.68E-032.78E-021.14E-014.63E-021.62E-014.87E-011.47E+00 + 89L1 520.001.26E-034.10E-031.46E-024.96E-022.44E-027.50E-021.97E-015.19E-01 + 89L1 750.006.40E-042.00E-035.83E-031.57E-029.21E-032.45E-025.41E-021.18E-01 + 89L11000.003.86E-041.16E-033.00E-036.96E-034.32E-031.07E-022.12E-024.07E-02 + 89L11500.001.96E-045.53E-041.25E-032.47E-031.50E-033.56E-036.30E-031.06E-02 + 89L2 20.082.08E+009.03E+039.11E+051.15E+073.07E+011.32E+031.15E+041.90E+04 + 89L2 20.781.91E+007.64E+037.53E+051.07E+072.77E+011.16E+031.14E+043.23E+04 + 89L2 22.081.63E+005.67E+035.36E+058.90E+062.32E+019.27E+021.06E+045.09E+04 + 89L2 25.281.14E+002.93E+032.51E+055.12E+061.55E+015.62E+027.88E+036.58E+04 + 89L2 29.087.84E-011.49E+031.15E+052.58E+061.02E+013.34E+025.19E+035.63E+04 + 89L2 33.005.55E-018.06E+025.64E+041.31E+067.04E+002.09E+023.36E+034.12E+04 + 89L2 39.003.49E-013.61E+022.21E+045.13E+054.30E+001.12E+021.81E+032.37E+04 + 89L2 47.002.06E-011.48E+027.76E+031.72E+052.48E+005.58E+018.64E+021.14E+04 + 89L2 59.001.07E-015.05E+012.18E+034.41E+041.28E+002.39E+013.39E+024.23E+03 + 89L2 72.006.01E-021.99E+017.26E+021.32E+047.18E-011.15E+011.47E+021.69E+03 + 89L2 89.003.23E-027.47E+002.27E+023.63E+033.89E-015.27E+005.96E+016.14E+02 + 89L2 102.002.16E-024.01E+001.08E+021.59E+032.63E-013.20E+003.33E+013.17E+02 + 89L2 119.001.37E-022.00E+004.73E+016.24E+021.70E-011.83E+001.72E+011.50E+02 + 89L2 142.008.18E-039.10E-011.85E+012.16E+021.03E-019.71E-018.12E+006.30E+01 + 89L2 170.004.83E-034.13E-017.22E+007.43E+016.19E-025.12E-013.79E+002.62E+01 + 89L2 235.001.89E-031.03E-011.39E+001.13E+012.50E-021.65E-019.82E-015.48E+00 + 89L2 320.007.91E-042.89E-023.05E-012.01E+001.06E-025.74E-022.80E-011.28E+00 + 89L2 410.004.01E-041.08E-029.47E-025.32E-015.37E-032.51E-021.05E-014.11E-01 + 89L2 520.002.13E-044.35E-033.23E-021.56E-012.80E-031.16E-024.21E-021.43E-01 + 89L2 750.008.28E-051.15E-036.74E-032.65E-021.03E-033.63E-031.09E-023.06E-02 + 89L21000.004.06E-054.29E-042.14E-037.24E-034.68E-041.50E-033.98E-039.76E-03 + 89L21500.001.56E-051.17E-044.77E-041.36E-031.53E-044.51E-041.03E-032.17E-03 + 89L3 16.874.88E+002.30E+042.98E+064.92E+073.45E+005.54E+044.48E+074.20E+09 + 89L3 17.574.35E+001.87E+042.34E+064.28E+073.05E+004.52E+043.41E+073.08E+09 + 89L3 18.873.55E+001.31E+041.52E+063.19E+072.45E+003.17E+042.10E+071.79E+09 + 89L3 22.072.25E+005.94E+035.98E+051.47E+071.51E+001.45E+047.35E+065.44E+08 + 89L3 25.871.41E+002.67E+032.31E+056.03E+069.32E-016.58E+032.54E+061.64E+08 + 89L3 33.006.80E-017.85E+025.38E+041.39E+064.43E-011.96E+035.07E+052.64E+07 + 89L3 39.004.08E-013.39E+021.98E+044.88E+052.66E-018.52E+021.69E+057.60E+06 + 89L3 47.002.29E-011.33E+026.50E+031.47E+051.51E-013.37E+025.03E+041.92E+06 + 89L3 59.001.12E-014.27E+011.67E+033.35E+047.57E-021.09E+021.16E+043.64E+05 + 89L3 72.005.95E-021.58E+015.11E+029.01E+034.14E-024.06E+013.28E+038.63E+04 + 89L3 89.003.02E-025.54E+001.46E+022.21E+032.19E-021.42E+018.69E+021.91E+04 + 89L3 102.001.95E-022.82E+006.50E+018.95E+021.45E-027.25E+003.73E+027.31E+03 + 89L3 119.001.19E-021.32E+002.62E+013.22E+029.15E-033.39E+001.45E+022.50E+03 + 89L3 142.006.76E-035.57E-019.30E+009.98E+015.40E-031.42E+004.96E+017.44E+02 + 89L3 170.003.81E-032.32E-013.26E+003.04E+013.16E-035.88E-011.69E+012.20E+02 + 89L3 235.001.37E-034.91E-025.06E-013.68E+001.22E-031.21E-012.54E+002.60E+01 + 89L3 320.005.28E-041.15E-028.89E-025.12E-014.95E-042.73E-024.37E-013.63E+00 + 89L3 410.002.50E-043.70E-032.29E-021.10E-012.42E-048.37E-031.10E-017.83E-01 + 89L3 520.001.25E-041.29E-036.48E-032.67E-021.24E-042.74E-033.03E-021.88E-01 + 89L3 750.004.53E-052.75E-041.03E-033.42E-034.52E-055.13E-044.39E-032.26E-02 + 89L31000.002.13E-058.90E-052.71E-047.73E-042.12E-051.47E-041.01E-034.58E-03 + 89L31500.008.06E-062.11E-054.95E-051.15E-047.93E-062.92E-051.38E-045.29E-04 + 89M1 6.001.59E+001.11E+046.94E+051.21E+072.42E+033.69E+061.17E+098.77E+10 + 89M1 7.001.35E+005.81E+033.73E+058.78E+061.53E+031.74E+064.33E+083.07E+10 + 89M1 9.009.88E-012.00E+031.34E+053.63E+067.21E+025.09E+058.68E+075.44E+09 + 89M1 13.005.69E-014.13E+022.87E+048.53E+052.41E+028.58E+048.64E+064.28E+08 + 89M1 20.002.71E-016.24E+014.23E+031.29E+056.66E+011.10E+046.24E+052.24E+07 + 89M1 28.001.44E-011.38E+018.76E+022.54E+042.45E+012.26E+038.50E+042.33E+06 + 89M1 43.006.13E-021.98E+001.10E+022.76E+036.88E+003.17E+027.29E+031.39E+05 + 89M1 55.003.66E-026.63E-013.24E+017.31E+023.33E+001.05E+021.86E+032.89E+04 + 89M1 73.001.99E-022.02E-017.97E+001.55E+021.45E+003.06E+014.05E+024.93E+03 + 89M1 106.008.71E-035.17E-021.31E+002.00E+014.91E-016.35E+005.86E+015.20E+02 + 89M1 155.003.72E-031.65E-022.37E-012.65E+001.65E-011.37E+009.01E+005.85E+01 + 89M1 285.009.77E-043.63E-032.31E-021.42E-012.96E-021.39E-015.63E-012.29E+00 + 89M1 500.003.12E-041.06E-034.14E-031.53E-026.39E-032.07E-025.78E-021.62E-01 + 89M2 5.663.47E+001.21E+061.13E+091.36E+113.47E+021.38E+051.13E+071.88E+08 + 89M2 6.662.85E+005.39E+053.95E+084.47E+102.13E+026.59E+045.10E+061.36E+08 + 89M2 8.661.92E+001.47E+057.32E+077.30E+099.71E+012.04E+041.39E+064.88E+07 + 89M2 12.669.53E-012.25E+046.67E+065.30E+083.13E+013.89E+032.12E+057.79E+06 + 89M2 19.663.70E-012.59E+034.42E+052.60E+078.45E+006.02E+022.43E+047.76E+05 + 89M2 28.001.59E-014.64E+025.23E+042.36E+062.97E+001.40E+024.39E+031.16E+05 + 89M2 43.005.34E-025.91E+014.17E+031.36E+058.43E-012.52E+015.70E+021.15E+04 + 89M2 55.002.77E-021.84E+011.01E+032.69E+044.11E-019.63E+001.80E+023.05E+03 + 89M2 73.001.27E-024.91E+002.01E+024.31E+031.81E-013.24E+004.87E+016.71E+02 + 89M2 106.004.47E-038.90E-012.54E+014.04E+026.23E-027.98E-018.98E+009.38E+01 + 89M2 155.001.52E-031.64E-013.29E+003.88E+012.12E-021.99E-011.67E+001.32E+01 + 89M2 285.002.75E-041.23E-021.47E-011.09E+003.88E-032.32E-021.26E-016.44E-01 + 89M2 500.006.03E-051.34E-031.05E-025.30E-028.26E-043.55E-031.35E-024.79E-02 + 89M3 4.911.18E+013.04E+063.28E+094.33E+113.68E+017.59E+067.15E+107.73E+13 + 89M3 5.918.46E+001.20E+069.67E+081.16E+112.10E+013.01E+061.98E+101.58E+13 + 89M3 7.914.77E+002.77E+051.44E+081.45E+108.69E+007.01E+052.65E+091.33E+12 + 89M3 11.911.93E+003.55E+041.03E+077.93E+082.51E+009.08E+041.60E+084.36E+10 + 89M3 18.916.19E-013.48E+035.53E+053.06E+076.18E-019.04E+036.87E+069.95E+08 + 89M3 28.002.17E-014.86E+024.80E+041.97E+061.88E-011.28E+034.92E+054.35E+07 + 89M3 43.006.46E-025.69E+013.44E+031.01E+055.14E-021.51E+022.89E+041.55E+06 + 89M3 55.003.13E-021.67E+017.70E+021.86E+042.45E-024.44E+015.83E+032.40E+05 + 89M3 73.001.33E-024.09E+001.40E+022.68E+031.05E-021.09E+019.50E+022.91E+04 + 89M3 106.004.23E-036.48E-011.50E+012.13E+023.44E-031.72E+009.14E+011.95E+03 + 89M3 155.001.30E-031.01E-011.60E+001.66E+011.11E-032.66E-018.97E+001.37E+02 + 89M3 285.001.98E-045.52E-034.84E-023.08E-011.88E-041.37E-022.52E-012.37E+00 + 89M3 500.003.78E-054.28E-042.26E-039.65E-033.77E-059.40E-041.10E-027.20E-02 + 89M4 4.373.02E+018.88E+042.71E+092.21E+131.13E+012.48E+051.14E+095.19E+11 + 89M4 5.371.62E+013.13E+046.40E+083.65E+125.81E+008.83E+042.84E+081.10E+11 + 89M4 7.375.99E+006.30E+036.93E+072.34E+112.08E+001.81E+043.41E+071.02E+10 + 89M4 11.371.41E+007.05E+023.30E+065.62E+095.02E-012.05E+031.93E+064.00E+08 + 89M4 18.372.61E-016.29E+011.14E+059.59E+071.01E-011.84E+028.48E+041.15E+07 + 89M4 28.005.50E-027.52E+005.94E+032.82E+062.41E-022.21E+015.70E+035.30E+05 + 89M4 43.001.07E-028.66E-012.98E+028.19E+045.44E-032.56E+003.82E+022.41E+04 + 89M4 55.004.06E-032.50E-015.41E+011.10E+042.29E-037.46E-018.25E+014.17E+03 + 89M4 73.001.32E-036.02E-027.71E+001.13E+038.36E-041.81E-011.44E+015.65E+02 + 89M4 106.002.95E-049.29E-036.11E-015.84E+012.18E-042.82E-021.50E+004.22E+01 + 89M4 155.006.37E-051.41E-034.86E-023.05E+005.45E-054.29E-031.55E-013.15E+00 + 89M4 285.005.63E-067.34E-059.91E-043.18E-025.74E-062.16E-044.48E-035.58E-02 + 89M4 500.006.34E-075.32E-063.55E-056.00E-047.05E-071.42E-051.90E-041.59E-03 + 89M5 4.224.64E+018.41E+046.08E+093.96E+136.47E+001.41E+046.60E+091.90E+14 + 89M5 5.222.42E+012.83E+041.36E+096.13E+123.27E+004.88E+031.49E+092.84E+13 + 89M5 7.228.55E+005.38E+031.40E+083.61E+111.14E+009.67E+021.54E+081.58E+12 + 89M5 11.221.92E+005.69E+026.27E+067.95E+092.71E-011.07E+027.05E+063.14E+10 + 89M5 18.223.37E-014.82E+012.05E+051.25E+085.43E-029.60E+002.38E+054.38E+08 + 89M5 28.006.70E-025.37E+009.89E+033.30E+061.28E-021.14E+001.18E+041.03E+07 + 89M5 43.001.26E-025.94E-014.79E+029.06E+042.94E-031.38E-015.92E+022.55E+05 + 89M5 55.004.70E-031.67E-018.45E+011.17E+041.25E-034.15E-021.07E+023.13E+04 + 89M5 73.001.50E-033.87E-021.15E+011.13E+034.66E-041.05E-021.48E+012.88E+03 + 89M5 106.003.29E-045.63E-038.44E-015.34E+011.25E-041.77E-031.11E+001.30E+02 + 89M5 155.007.01E-058.02E-046.00E-022.46E+003.25E-052.98E-048.03E-025.90E+00 + 89M5 285.006.19E-063.86E-059.37E-041.94E-023.78E-061.91E-051.24E-034.76E-02 + 89M5 500.007.59E-072.83E-062.43E-052.61E-045.54E-071.76E-062.94E-056.60E-04 + 89N+ 50.004.59E-022.08E+011.33E+035.86E+041.81E+009.48E+015.92E+032.80E+05 + 89N+ 70.001.87E-024.11E+001.79E+025.14E+036.70E-012.05E+017.36E+022.23E+04 + 89N+ 100.007.32E-037.69E-012.28E+014.39E+022.39E-014.33E+008.96E+011.73E+03 + 89N+ 150.002.54E-031.20E-012.34E+003.02E+017.43E-027.88E-019.25E+001.10E+02 + 89N+ 200.001.22E-033.37E-024.95E-014.92E+003.26E-022.48E-012.03E+001.74E+01 + 89N+ 500.001.45E-041.02E-036.19E-032.92E-022.60E-039.17E-033.06E-021.07E-01 + 90K 110.653.03E-012.22E-014.37E-022.02E-031.18E+015.94E+016.00E+011.39E+01 + 90K 111.352.98E-012.26E-015.27E-024.38E-031.16E+015.80E+016.06E+011.66E+01 + 90K 112.652.90E-012.33E-016.99E-021.07E-021.12E+015.58E+016.16E+012.16E+01 + 90K 115.852.72E-012.48E-011.13E-013.71E-021.04E+015.08E+016.29E+013.33E+01 + 90K 119.652.52E-012.59E-011.62E-018.59E-029.45E+004.55E+016.29E+014.54E+01 + 90K 124.002.31E-012.66E-012.14E-011.59E-018.53E+004.03E+016.15E+015.65E+01 + 90K 130.002.07E-012.69E-012.75E-012.75E-017.45E+003.44E+015.82E+016.71E+01 + 90K 138.001.80E-012.63E-013.35E-014.32E-016.29E+002.81E+015.26E+017.41E+01 + 90K 150.001.48E-012.46E-013.87E-016.31E-014.96E+002.12E+014.39E+017.45E+01 + 90K 163.001.22E-012.23E-014.05E-017.71E-013.92E+001.60E+013.55E+016.81E+01 + 90K 180.009.63E-021.92E-013.95E-018.51E-012.96E+001.15E+012.68E+015.65E+01 + 90K 193.008.18E-021.71E-013.75E-018.58E-012.43E+009.12E+002.17E+014.78E+01 + 90K 210.006.72E-021.47E-013.42E-018.24E-011.92E+006.89E+001.67E+013.80E+01 + 90K 233.005.29E-021.21E-012.96E-017.44E-011.44E+004.90E+001.19E+012.78E+01 + 90K 260.004.13E-029.80E-022.48E-016.37E-011.06E+003.43E+008.28E+001.95E+01 + 90K 325.002.52E-026.30E-021.64E-014.24E-015.73E-011.68E+003.92E+009.01E+00 + 90K 410.001.54E-023.99E-021.03E-012.57E-013.05E-018.18E-011.80E+003.93E+00 + 90K 500.001.03E-022.73E-026.87E-021.64E-011.79E-014.50E-019.39E-011.94E+00 + 90K 610.006.99E-031.88E-024.57E-021.03E-011.05E-012.52E-014.97E-019.67E-01 + 90K 840.003.87E-031.05E-022.40E-024.94E-024.54E-021.03E-011.87E-013.30E-01 + 90K 1100.002.41E-036.51E-031.41E-022.70E-022.24E-024.98E-028.55E-021.41E-01 + 90K 1350.001.70E-034.53E-039.47E-031.73E-021.32E-022.92E-024.84E-027.63E-02 + 90K 1600.001.28E-033.36E-036.82E-031.20E-028.45E-031.89E-023.07E-024.68E-02 + 90L1 21.478.54E-011.98E+023.27E+035.90E+032.51E+023.06E+047.92E+054.86E+06 + 90L1 22.178.13E-011.71E+023.21E+039.89E+032.28E+022.63E+046.69E+054.60E+06 + 90L1 23.477.44E-011.32E+022.96E+031.55E+041.92E+022.02E+044.95E+053.98E+06 + 90L1 26.676.05E-017.36E+012.13E+032.00E+041.32E+021.12E+042.52E+052.50E+06 + 90L1 30.474.82E-013.96E+011.35E+031.70E+048.87E+016.04E+031.25E+051.38E+06 + 90L1 34.003.97E-012.37E+018.74E+021.27E+046.41E+013.67E+036.98E+048.02E+05 + 90L1 40.002.94E-011.10E+014.36E+027.09E+033.96E+011.76E+032.97E+043.44E+05 + 90L1 48.002.06E-014.66E+001.90E+023.24E+032.31E+017.80E+021.15E+041.28E+05 + 90L1 60.001.31E-011.68E+006.58E+011.12E+031.20E+012.93E+023.62E+033.72E+04 + 90L1 73.008.71E-027.29E-012.55E+014.14E+026.76E+001.26E+021.33E+031.24E+04 + 90L1 90.005.55E-023.28E-019.35E+001.39E+023.67E+005.23E+014.68E+023.85E+03 + 90L1 103.004.13E-022.08E-014.96E+006.87E+012.48E+003.00E+012.41E+021.82E+03 + 90L1 120.002.95E-021.30E-012.47E+003.10E+011.60E+001.61E+011.15E+027.86E+02 + 90L1 143.002.00E-027.98E-021.15E+001.26E+019.66E-018.04E+005.00E+013.04E+02 + 90L1 170.001.36E-025.13E-025.68E-015.36E+005.90E-014.11E+002.24E+011.21E+02 + 90L1 235.006.66E-032.38E-021.71E-011.18E+002.36E-011.22E+005.27E+002.27E+01 + 90L1 320.003.45E-031.20E-026.24E-023.20E-011.00E-014.09E-011.43E+005.01E+00 + 90L1 410.002.08E-037.06E-033.00E-021.24E-015.09E-021.77E-015.29E-011.59E+00 + 90L1 520.001.31E-034.34E-031.57E-025.37E-022.68E-028.18E-022.14E-015.62E-01 + 90L1 750.006.68E-042.12E-036.25E-031.69E-021.01E-022.67E-025.87E-021.27E-01 + 90L11000.004.04E-041.23E-033.21E-037.48E-034.73E-031.17E-022.30E-024.41E-02 + 90L11500.002.05E-045.88E-041.34E-032.65E-031.64E-033.88E-036.84E-031.14E-02 + 90L2 20.691.97E+008.48E+038.20E+051.00E+073.13E+011.27E+031.07E+041.70E+04 + 90L2 21.391.81E+007.21E+036.82E+059.33E+062.84E+011.12E+031.06E+042.86E+04 + 90L2 22.691.55E+005.40E+034.90E+057.82E+062.38E+019.03E+029.89E+034.51E+04 + 90L2 25.891.10E+002.84E+032.35E+054.59E+061.61E+015.55E+027.45E+035.93E+04 + 90L2 29.697.64E-011.46E+031.09E+052.36E+061.07E+013.34E+024.98E+035.17E+04 + 90L2 34.005.28E-017.59E+025.11E+041.15E+067.19E+002.02E+023.14E+033.72E+04 + 90L2 40.003.37E-013.48E+022.06E+044.62E+054.45E+001.10E+021.72E+032.18E+04 + 90L2 48.002.02E-011.46E+027.42E+031.60E+052.61E+005.60E+018.39E+021.07E+04 + 90L2 60.001.06E-015.08E+012.14E+034.22E+041.36E+002.45E+013.37E+024.09E+03 + 90L2 73.006.04E-022.03E+017.26E+021.29E+047.71E-011.19E+011.48E+021.66E+03 + 90L2 90.003.28E-027.75E+002.31E+023.62E+034.22E-015.52E+006.10E+016.16E+02 + 90L2 103.002.21E-024.19E+001.11E+021.60E+032.87E-013.38E+003.44E+013.22E+02 + 90L2 120.001.41E-022.10E+004.91E+016.37E+021.86E-011.95E+001.79E+011.53E+02 + 90L2 143.008.47E-039.65E-011.94E+012.23E+021.13E-011.04E+008.53E+006.52E+01 + 90L2 170.005.12E-034.52E-017.86E+008.02E+016.94E-025.62E-014.11E+002.81E+01 + 90L2 235.002.02E-031.13E-011.51E+001.23E+012.81E-021.82E-011.07E+005.92E+00 + 90L2 320.008.47E-043.18E-023.33E-012.19E+001.19E-026.34E-023.06E-011.39E+00 + 90L2 410.004.30E-041.19E-021.04E-015.80E-016.05E-032.78E-021.15E-014.48E-01 + 90L2 520.002.29E-044.80E-033.55E-021.71E-013.15E-031.28E-024.64E-021.57E-01 + 90L2 750.008.96E-051.27E-037.43E-032.91E-021.16E-034.04E-031.21E-023.36E-02 + 90L21000.004.41E-054.75E-042.36E-037.98E-035.28E-041.68E-034.41E-031.08E-02 + 90L21500.001.70E-051.30E-045.29E-041.50E-031.73E-045.04E-041.15E-032.40E-03 + 90L3 17.304.65E+002.18E+042.71E+064.36E+073.37E+005.41E+044.22E+073.84E+09 + 90L3 18.004.15E+001.78E+042.14E+063.80E+072.99E+004.44E+043.23E+072.84E+09 + 90L3 19.303.40E+001.25E+041.41E+062.85E+072.41E+003.13E+042.02E+071.67E+09 + 90L3 22.502.18E+005.79E+035.64E+051.34E+071.51E+001.46E+047.20E+065.21E+08 + 90L3 26.301.38E+002.64E+032.22E+055.61E+069.36E-016.70E+032.54E+061.60E+08 + 90L3 34.006.38E-017.25E+024.77E+041.20E+064.27E-011.87E+034.64E+052.33E+07 + 90L3 40.003.88E-013.21E+021.81E+044.31E+052.60E-018.31E+021.60E+056.96E+06 + 90L3 48.002.21E-011.29E+026.07E+031.34E+051.49E-013.36E+024.88E+041.81E+06 + 90L3 60.001.10E-014.22E+011.61E+033.13E+047.59E-021.11E+021.16E+043.55E+05 + 90L3 73.005.89E-021.59E+015.00E+028.62E+034.19E-024.19E+013.34E+038.63E+04 + 90L3 90.003.02E-025.63E+001.45E+022.16E+032.23E-021.49E+018.98E+021.94E+04 + 90L3 103.001.96E-022.89E+006.51E+018.81E+021.49E-027.63E+003.89E+027.52E+03 + 90L3 120.001.20E-021.36E+002.65E+013.20E+029.42E-033.59E+001.52E+022.60E+03 + 90L3 143.006.88E-035.78E-019.49E+001.00E+025.58E-031.52E+005.26E+017.80E+02 + 90L3 170.003.96E-032.49E-013.47E+003.21E+013.34E-036.49E-011.87E+012.42E+02 + 90L3 235.001.43E-035.27E-025.38E-013.88E+001.28E-031.34E-012.80E+002.86E+01 + 90L3 320.005.51E-041.23E-029.47E-025.42E-015.22E-043.01E-024.82E-013.98E+00 + 90L3 410.002.61E-043.96E-032.44E-021.17E-012.56E-049.20E-031.21E-018.59E-01 + 90L3 520.001.31E-041.38E-036.91E-032.84E-021.30E-043.00E-033.34E-022.06E-01 + 90L3 750.004.73E-052.93E-041.10E-033.64E-034.75E-055.61E-044.82E-032.47E-02 + 90L31000.002.22E-059.47E-052.88E-048.23E-042.23E-051.60E-041.11E-035.01E-03 + 90L31500.008.43E-062.23E-055.26E-051.23E-048.31E-063.15E-051.51E-045.79E-04 + 90M1 6.181.50E+001.08E+046.67E+051.09E+072.46E+033.56E+061.09E+097.85E+10 + 90M1 7.181.28E+005.73E+033.63E+058.19E+061.57E+031.71E+064.12E+082.83E+10 + 90M1 9.189.44E-012.02E+031.33E+053.52E+067.52E+025.15E+058.57E+075.23E+09 + 90M1 13.185.51E-014.29E+022.90E+048.48E+052.56E+028.94E+048.85E+064.30E+08 + 90M1 20.182.66E-016.68E+014.38E+031.31E+057.18E+011.17E+046.57E+052.32E+07 + 90M1 28.001.45E-011.55E+019.52E+022.71E+042.71E+012.51E+039.43E+042.56E+06 + 90M1 43.006.18E-022.25E+001.20E+022.97E+037.61E+003.51E+028.06E+031.53E+05 + 90M1 55.003.70E-027.58E-013.58E+017.92E+023.69E+001.17E+022.06E+033.17E+04 + 90M1 73.002.02E-022.31E-018.88E+001.69E+021.61E+003.39E+014.46E+025.40E+03 + 90M1 106.008.87E-035.78E-021.47E+002.20E+015.43E-017.01E+006.44E+015.69E+02 + 90M1 155.003.81E-031.80E-022.65E-012.93E+001.82E-011.51E+009.88E+006.39E+01 + 90M1 285.001.01E-033.87E-032.54E-021.57E-013.27E-021.53E-016.16E-012.50E+00 + 90M1 500.003.25E-041.13E-034.49E-031.67E-027.04E-032.27E-026.31E-021.76E-01 + 90M2 5.833.26E+001.14E+061.02E+091.18E+113.54E+021.33E+051.05E+071.69E+08 + 90M2 6.832.70E+005.17E+053.66E+084.01E+102.21E+026.50E+044.85E+061.24E+08 + 90M2 8.831.84E+001.45E+057.06E+076.84E+091.02E+022.07E+041.37E+064.61E+07 + 90M2 12.839.32E-012.29E+046.69E+065.20E+083.36E+014.05E+032.15E+057.67E+06 + 90M2 19.833.69E-012.71E+034.57E+052.63E+079.22E+006.40E+022.53E+047.89E+05 + 90M2 28.001.63E-015.07E+025.70E+042.55E+063.33E+001.55E+024.76E+031.24E+05 + 90M2 43.005.53E-026.47E+014.54E+031.46E+059.45E-012.77E+016.20E+021.23E+04 + 90M2 55.002.88E-022.02E+011.10E+032.91E+044.61E-011.06E+011.96E+023.28E+03 + 90M2 73.001.33E-025.38E+002.20E+024.66E+032.04E-013.57E+005.30E+017.24E+02 + 90M2 106.004.70E-039.76E-012.78E+014.38E+027.00E-028.79E-019.80E+001.02E+02 + 90M2 155.001.61E-031.80E-013.60E+004.21E+012.39E-022.19E-011.83E+001.43E+01 + 90M2 285.002.94E-041.36E-021.62E-011.19E+004.37E-032.58E-021.39E-017.03E-01 + 90M2 500.006.52E-051.48E-031.15E-025.83E-029.33E-043.95E-031.49E-025.26E-02 + 90M3 5.051.12E+012.86E+062.96E+093.77E+113.59E+017.36E+066.66E+106.95E+13 + 90M3 6.058.11E+001.15E+068.97E+081.04E+112.08E+012.98E+061.90E+101.48E+13 + 90M3 8.054.63E+002.75E+051.39E+081.36E+108.74E+007.16E+052.65E+091.31E+12 + 90M3 12.051.90E+003.62E+041.03E+077.74E+082.57E+009.54E+041.66E+084.48E+10 + 90M3 19.056.20E-013.63E+035.67E+053.07E+076.41E-019.69E+037.35E+061.06E+09 + 90M3 28.002.23E-015.25E+025.13E+042.09E+061.99E-011.42E+035.52E+054.88E+07 + 90M3 43.006.65E-026.14E+013.68E+031.07E+055.45E-021.68E+023.23E+041.74E+06 + 90M3 55.003.23E-021.80E+018.24E+021.97E+042.60E-024.94E+016.52E+032.68E+05 + 90M3 73.001.38E-024.41E+001.49E+022.84E+031.11E-021.21E+011.06E+033.25E+04 + 90M3 106.004.39E-037.00E-011.61E+012.25E+023.65E-031.91E+001.02E+022.17E+03 + 90M3 155.001.35E-031.09E-011.71E+001.76E+011.18E-032.95E-019.98E+001.52E+02 + 90M3 285.002.08E-045.95E-035.18E-023.28E-011.99E-041.51E-022.79E-012.62E+00 + 90M3 500.003.98E-054.60E-042.42E-031.03E-023.99E-051.04E-031.22E-027.95E-02 + 90M4 4.492.86E+018.38E+042.45E+091.94E+131.10E+012.42E+051.07E+094.71E+11 + 90M4 5.491.56E+013.03E+045.98E+083.35E+125.76E+008.85E+042.75E+081.04E+11 + 90M4 7.495.90E+006.29E+036.77E+072.26E+112.11E+001.87E+043.43E+071.01E+10 + 90M4 11.491.42E+007.26E+023.36E+065.71E+095.18E-012.18E+032.02E+064.12E+08 + 90M4 18.492.68E-016.61E+011.19E+051.01E+081.06E-012.00E+029.10E+041.22E+07 + 90M4 28.005.81E-028.18E+006.51E+033.13E+062.59E-022.48E+016.38E+035.89E+05 + 90M4 43.001.13E-029.44E-013.27E+029.08E+045.86E-032.88E+004.27E+022.67E+04 + 90M4 55.004.32E-032.73E-015.93E+011.22E+042.47E-038.38E-019.22E+014.63E+03 + 90M4 73.001.41E-036.59E-028.46E+001.25E+039.03E-042.03E-011.61E+016.29E+02 + 90M4 106.003.16E-041.02E-026.70E-016.47E+012.36E-043.17E-021.68E+004.70E+01 + 90M4 155.006.88E-051.55E-035.34E-023.38E+005.91E-054.82E-031.74E-013.51E+00 + 90M4 285.006.08E-068.07E-051.09E-033.53E-026.24E-062.42E-045.02E-036.23E-02 + 90M4 500.006.81E-075.87E-063.91E-056.67E-047.67E-071.60E-052.13E-041.78E-03 + 90M5 4.334.40E+017.78E+045.56E+093.50E+136.30E+001.34E+046.21E+091.72E+14 + 90M5 5.332.33E+012.68E+041.29E+095.65E+123.23E+004.75E+031.45E+092.70E+13 + 90M5 7.338.41E+005.27E+031.38E+083.51E+111.15E+009.69E+021.57E+081.58E+12 + 90M5 11.331.93E+005.72E+026.44E+068.09E+092.78E-011.11E+027.45E+063.30E+10 + 90M5 18.333.45E-014.95E+012.17E+051.32E+085.66E-021.01E+012.58E+054.75E+08 + 90M5 28.007.04E-025.70E+001.09E+043.64E+061.36E-021.23E+001.34E+041.18E+07 + 90M5 43.001.33E-026.32E-015.29E+021.00E+053.14E-031.49E-016.70E+022.91E+05 + 90M5 55.004.99E-031.78E-019.34E+011.29E+041.34E-034.48E-021.21E+023.57E+04 + 90M5 73.001.59E-034.12E-021.27E+011.25E+034.99E-041.14E-021.68E+013.28E+03 + 90M5 106.003.49E-046.02E-039.33E-015.88E+011.34E-041.91E-031.26E+001.48E+02 + 90M5 155.007.45E-058.60E-046.63E-022.71E+003.49E-053.22E-049.07E-026.69E+00 + 90M5 285.006.77E-064.15E-051.03E-032.14E-024.06E-062.06E-051.39E-035.39E-02 + 90M5 500.007.94E-073.05E-062.66E-052.88E-045.95E-071.90E-063.29E-057.44E-04 + 90N+ 50.004.79E-022.31E+011.48E+036.50E+042.03E+001.07E+026.74E+033.21E+05 + 90N+ 70.001.95E-024.56E+001.98E+025.68E+037.54E-012.31E+018.36E+022.55E+04 + 90N+ 100.007.68E-038.54E-012.52E+014.85E+022.69E-014.87E+001.01E+021.96E+03 + 90N+ 150.002.67E-031.33E-012.60E+003.33E+018.36E-028.85E-011.04E+011.24E+02 + 90N+ 200.001.28E-033.75E-025.50E-015.45E+003.67E-022.78E-012.28E+001.95E+01 + 90N+ 500.001.55E-041.13E-036.90E-033.25E-022.92E-031.02E-023.42E-021.20E-01 + 91K 113.602.87E-012.04E-014.00E-021.83E-031.20E+015.76E+015.62E+011.26E+01 + 91K 114.302.83E-012.07E-014.81E-023.91E-031.18E+015.63E+015.68E+011.50E+01 + 91K 115.602.76E-012.14E-016.35E-029.50E-031.14E+015.43E+015.77E+011.95E+01 + 91K 118.802.59E-012.28E-011.02E-013.26E-021.05E+014.95E+015.91E+012.99E+01 + 91K 122.602.40E-012.39E-011.47E-017.56E-029.63E+004.45E+015.92E+014.08E+01 + 91K 127.002.21E-012.46E-011.95E-011.41E-018.70E+003.95E+015.80E+015.11E+01 + 91K 133.001.99E-012.49E-012.51E-012.45E-017.63E+003.38E+015.51E+016.09E+01 + 91K 141.001.73E-012.45E-013.07E-013.88E-016.46E+002.78E+015.01E+016.77E+01 + 91K 153.001.43E-012.31E-013.58E-015.72E-015.12E+002.11E+014.21E+016.88E+01 + 91K 166.001.18E-012.11E-013.78E-017.07E-014.06E+001.61E+013.43E+016.35E+01 + 91K 183.009.43E-021.83E-013.73E-017.91E-013.09E+001.16E+012.62E+015.34E+01 + 91K 196.008.04E-021.64E-013.57E-018.04E-012.54E+009.25E+002.13E+014.55E+01 + 91K 213.006.63E-021.43E-013.28E-017.81E-012.01E+007.03E+001.65E+013.65E+01 + 91K 236.005.25E-021.18E-012.87E-017.13E-011.51E+005.03E+001.19E+012.70E+01 + 91K 265.004.04E-029.52E-022.40E-016.11E-011.10E+003.45E+008.13E+001.86E+01 + 91K 330.002.50E-026.23E-021.62E-014.15E-016.00E-011.72E+003.92E+008.82E+00 + 91K 415.001.54E-024.01E-021.03E-012.56E-013.21E-018.46E-011.83E+003.92E+00 + 91K 500.001.06E-022.82E-027.11E-021.69E-011.95E-014.84E-019.96E-012.03E+00 + 91K 610.007.23E-031.95E-024.76E-021.07E-011.15E-012.71E-015.28E-011.02E+00 + 91K 840.004.02E-031.10E-022.51E-025.17E-024.93E-021.10E-011.99E-013.49E-01 + 91K 1100.002.50E-036.84E-031.48E-022.84E-022.43E-025.35E-029.13E-021.49E-01 + 91K 1350.001.77E-034.76E-039.98E-031.82E-021.42E-023.14E-025.18E-028.11E-02 + 91K 1600.001.33E-033.53E-037.20E-031.27E-029.13E-032.04E-023.29E-024.99E-02 + 91L1 22.108.04E-011.89E+022.99E+035.13E+032.54E+022.95E+047.34E+054.34E+06 + 91L1 22.807.67E-011.64E+022.94E+038.59E+032.32E+022.55E+046.23E+054.13E+06 + 91L1 24.107.03E-011.28E+022.72E+031.36E+041.97E+021.97E+044.65E+053.59E+06 + 91L1 27.305.76E-017.27E+011.99E+031.78E+041.36E+021.11E+042.41E+052.30E+06 + 91L1 31.104.62E-013.99E+011.28E+031.54E+049.23E+016.07E+031.21E+051.29E+06 + 91L1 34.003.95E-012.64E+019.11E+021.24E+047.09E+014.05E+037.58E+048.37E+05 + 91L1 40.002.93E-011.23E+014.61E+027.14E+034.38E+011.94E+033.22E+043.63E+05 + 91L1 48.002.07E-015.28E+002.04E+023.34E+032.56E+018.59E+021.25E+041.36E+05 + 91L1 60.001.32E-011.92E+007.15E+011.18E+031.33E+013.23E+023.93E+033.97E+04 + 91L1 73.008.79E-028.29E-012.80E+014.41E+027.48E+001.39E+021.45E+031.33E+04 + 91L1 90.005.62E-023.69E-011.03E+011.50E+024.06E+005.75E+015.09E+024.14E+03 + 91L1 103.004.19E-022.31E-015.50E+007.45E+012.75E+003.30E+012.62E+021.96E+03 + 91L1 120.003.00E-021.43E-012.75E+003.38E+011.77E+001.77E+011.25E+028.47E+02 + 91L1 143.002.03E-028.66E-021.28E+001.38E+011.07E+008.83E+005.44E+013.27E+02 + 91L1 170.001.39E-025.51E-026.29E-015.88E+006.51E-014.51E+002.44E+011.30E+02 + 91L1 235.006.84E-032.54E-021.88E-011.30E+002.61E-011.34E+005.73E+002.46E+01 + 91L1 320.003.56E-031.27E-026.79E-023.50E-011.11E-014.47E-011.55E+005.42E+00 + 91L1 410.002.16E-037.49E-033.25E-021.35E-015.61E-021.93E-015.75E-011.72E+00 + 91L1 520.001.36E-034.60E-031.69E-025.82E-022.95E-028.94E-022.33E-016.08E-01 + 91L1 750.006.97E-042.25E-036.72E-031.82E-021.11E-022.91E-026.38E-021.38E-01 + 91L11000.004.22E-041.31E-033.45E-038.05E-035.20E-031.27E-022.50E-024.78E-02 + 91L11500.002.15E-046.26E-041.43E-032.85E-031.79E-034.23E-037.42E-031.24E-02 + 91L2 21.311.87E+007.99E+037.39E+058.70E+063.21E+011.23E+039.87E+031.50E+04 + 91L2 22.011.72E+006.82E+036.18E+058.13E+062.91E+011.09E+039.79E+032.51E+04 + 91L2 23.311.48E+005.15E+034.49E+056.87E+062.46E+018.81E+029.22E+033.98E+04 + 91L2 26.511.06E+002.76E+032.20E+054.12E+061.68E+015.49E+027.05E+035.33E+04 + 91L2 30.317.44E-011.44E+031.04E+052.16E+061.13E+013.35E+024.78E+034.74E+04 + 91L2 34.005.45E-018.27E+025.47E+041.19E+068.04E+002.19E+023.26E+033.66E+04 + 91L2 40.003.49E-013.79E+022.21E+044.81E+054.98E+001.20E+021.80E+032.20E+04 + 91L2 48.002.09E-011.59E+027.98E+031.68E+052.92E+006.09E+018.87E+021.10E+04 + 91L2 60.001.11E-015.54E+012.31E+034.46E+041.52E+002.67E+013.59E+024.25E+03 + 91L2 73.006.32E-022.22E+017.84E+021.37E+048.64E-011.30E+011.59E+021.75E+03 + 91L2 90.003.44E-028.47E+002.50E+023.87E+034.73E-016.03E+006.56E+016.52E+02 + 91L2 103.002.32E-024.58E+001.21E+021.71E+033.22E-013.70E+003.70E+013.42E+02 + 91L2 120.001.49E-022.30E+005.33E+016.84E+022.08E-012.13E+001.94E+011.63E+02 + 91L2 143.008.94E-031.06E+002.11E+012.40E+021.27E-011.14E+009.23E+006.98E+01 + 91L2 170.005.42E-034.96E-018.55E+008.65E+017.80E-026.18E-014.46E+003.02E+01 + 91L2 235.002.15E-031.24E-011.65E+001.33E+013.16E-022.00E-011.17E+006.40E+00 + 91L2 320.009.06E-043.50E-023.65E-012.38E+001.35E-027.01E-023.35E-011.50E+00 + 91L2 410.004.62E-041.31E-021.14E-016.33E-016.81E-033.08E-021.26E-014.88E-01 + 91L2 520.002.46E-045.29E-033.90E-021.87E-013.56E-031.42E-025.10E-021.71E-01 + 91L2 750.009.67E-051.40E-038.20E-033.19E-021.31E-034.49E-031.33E-023.69E-02 + 91L21000.004.79E-055.26E-042.61E-038.80E-035.96E-041.87E-034.88E-031.19E-02 + 91L21500.001.85E-051.44E-045.87E-041.66E-031.95E-045.65E-041.28E-032.66E-03 + 91L3 17.734.42E+002.06E+042.47E+063.86E+073.30E+005.29E+043.98E+073.51E+09 + 91L3 18.433.96E+001.70E+041.96E+063.37E+072.93E+004.36E+043.07E+072.62E+09 + 91L3 19.733.26E+001.20E+041.31E+062.55E+072.38E+003.11E+041.94E+071.56E+09 + 91L3 22.932.11E+005.65E+035.32E+051.22E+071.50E+001.47E+047.06E+064.99E+08 + 91L3 26.731.35E+002.61E+032.13E+055.21E+069.39E-016.84E+032.54E+061.57E+08 + 91L3 34.006.56E-017.79E+025.05E+041.24E+064.51E-012.06E+035.16E+052.58E+07 + 91L3 40.003.99E-013.45E+021.91E+044.47E+052.74E-019.19E+021.78E+057.69E+06 + 91L3 48.002.27E-011.38E+026.44E+031.39E+051.58E-013.71E+025.42E+042.00E+06 + 91L3 60.001.13E-014.53E+011.70E+033.27E+048.01E-021.23E+021.29E+043.92E+05 + 91L3 73.006.09E-021.71E+015.30E+029.02E+034.43E-024.63E+013.70E+039.51E+04 + 91L3 90.003.13E-026.05E+001.53E+022.26E+032.35E-021.64E+019.94E+022.14E+04 + 91L3 103.002.04E-023.10E+006.91E+019.25E+021.57E-028.44E+004.30E+028.29E+03 + 91L3 120.001.25E-021.46E+002.81E+013.36E+029.94E-033.97E+001.68E+022.86E+03 + 91L3 143.007.15E-036.21E-011.01E+011.06E+025.89E-031.68E+005.81E+018.58E+02 + 91L3 170.004.12E-032.68E-013.68E+003.38E+013.52E-037.17E-012.06E+012.66E+02 + 91L3 235.001.49E-035.65E-025.72E-014.10E+001.35E-031.48E-013.09E+003.14E+01 + 91L3 320.005.76E-041.32E-021.01E-015.73E-015.50E-043.31E-025.30E-014.37E+00 + 91L3 410.002.74E-044.25E-032.59E-021.24E-012.69E-041.01E-021.34E-019.42E-01 + 91L3 520.001.37E-041.47E-037.35E-033.01E-021.37E-043.30E-033.67E-022.26E-01 + 91L3 750.004.95E-053.13E-041.17E-033.87E-035.00E-056.14E-045.29E-032.71E-02 + 91L31000.002.33E-051.01E-043.07E-048.76E-042.34E-051.74E-041.21E-035.49E-03 + 91L31500.008.82E-062.36E-055.59E-051.31E-048.70E-063.40E-051.65E-046.33E-04 + 91M1 6.371.41E+001.05E+046.38E+059.77E+062.49E+033.44E+061.01E+097.01E+10 + 91M1 7.371.21E+005.66E+033.53E+057.58E+061.61E+031.68E+063.92E+082.60E+10 + 91M1 9.379.00E-012.04E+031.32E+053.39E+067.86E+025.21E+058.44E+075.00E+09 + 91M1 13.375.32E-014.46E+022.94E+048.39E+052.72E+029.31E+049.06E+064.30E+08 + 91M1 20.372.61E-017.14E+014.53E+031.33E+057.75E+011.25E+046.92E+052.41E+07 + 91M1 28.001.45E-011.74E+011.03E+032.88E+043.01E+012.79E+031.05E+052.82E+06 + 91M1 43.006.22E-022.56E+001.32E+023.19E+038.44E+003.89E+028.91E+031.68E+05 + 91M1 55.003.74E-028.66E-013.96E+018.58E+024.09E+001.29E+022.27E+033.48E+04 + 91M1 73.002.04E-022.63E-019.87E+001.85E+021.78E+003.75E+014.92E+025.92E+03 + 91M1 106.009.04E-036.48E-021.64E+002.43E+016.02E-017.74E+007.08E+016.23E+02 + 91M1 155.003.90E-031.97E-022.96E-013.25E+002.02E-011.67E+001.08E+016.98E+01 + 91M1 285.001.04E-034.15E-032.80E-021.73E-013.62E-021.68E-016.74E-012.72E+00 + 91M1 500.003.38E-041.21E-034.88E-031.83E-027.78E-032.49E-026.89E-021.92E-01 + 91M2 6.003.06E+001.07E+069.29E+081.04E+113.64E+021.29E+059.83E+061.51E+08 + 91M2 7.002.55E+005.00E+053.42E+083.62E+102.30E+026.45E+044.64E+061.13E+08 + 91M2 9.001.77E+001.44E+056.84E+076.44E+091.09E+022.10E+041.34E+064.36E+07 + 91M2 13.009.12E-012.35E+046.73E+065.11E+083.63E+014.22E+032.18E+057.55E+06 + 91M2 20.003.68E-012.84E+034.73E+052.68E+071.01E+016.80E+022.63E+048.03E+05 + 91M2 28.001.68E-015.55E+026.21E+042.75E+063.73E+001.70E+025.17E+031.33E+05 + 91M2 43.005.72E-027.09E+014.95E+031.58E+051.06E+003.05E+016.73E+021.32E+04 + 91M2 55.002.99E-022.21E+011.19E+033.15E+045.19E-011.16E+012.13E+023.53E+03 + 91M2 73.001.39E-025.90E+002.39E+025.04E+032.29E-013.93E+005.77E+017.80E+02 + 91M2 106.004.95E-031.07E+003.03E+014.75E+027.88E-029.69E-011.07E+011.10E+02 + 91M2 155.001.70E-031.98E-013.94E+004.58E+012.69E-022.42E-012.00E+001.55E+01 + 91M2 285.003.14E-041.50E-021.77E-011.31E+004.94E-032.86E-021.52E-017.68E-01 + 91M2 500.007.02E-051.64E-031.27E-026.41E-021.06E-034.40E-031.65E-025.78E-02 + 91M3 5.171.07E+012.72E+062.70E+093.34E+113.52E+017.23E+066.30E+106.38E+13 + 91M3 6.177.80E+001.12E+068.43E+089.49E+102.06E+012.99E+061.85E+101.41E+13 + 91M3 8.174.50E+002.74E+051.35E+081.29E+108.82E+007.36E+052.67E+091.30E+12 + 91M3 12.171.88E+003.71E+041.04E+077.60E+082.64E+001.01E+051.74E+084.65E+10 + 91M3 19.176.21E-013.79E+035.82E+053.10E+076.65E-011.04E+047.89E+061.13E+09 + 91M3 28.002.28E-015.68E+025.50E+042.20E+062.11E-011.58E+036.19E+055.49E+07 + 91M3 43.006.84E-026.64E+013.93E+031.13E+055.77E-021.87E+023.62E+041.94E+06 + 91M3 55.003.33E-021.95E+018.80E+022.08E+042.75E-025.49E+017.29E+032.99E+05 + 91M3 73.001.43E-024.77E+001.60E+023.00E+031.18E-021.35E+011.18E+033.62E+04 + 91M3 106.004.57E-037.57E-011.72E+012.39E+023.86E-032.13E+001.14E+022.42E+03 + 91M3 155.001.41E-031.18E-011.83E+001.86E+011.25E-033.28E-011.11E+011.68E+02 + 91M3 285.002.17E-046.42E-035.54E-023.48E-012.11E-041.68E-023.10E-012.90E+00 + 91M3 500.004.18E-054.95E-042.59E-031.10E-024.23E-051.15E-031.35E-028.77E-02 + 91M4 4.612.72E+017.96E+042.23E+091.72E+131.08E+012.38E+051.01E+094.29E+11 + 91M4 5.611.51E+012.94E+045.62E+083.09E+125.73E+008.91E+042.68E+089.82E+10 + 91M4 7.615.80E+006.30E+036.62E+072.19E+112.14E+001.93E+043.47E+079.96E+09 + 91M4 11.611.43E+007.48E+023.41E+065.80E+095.35E-012.32E+032.12E+064.24E+08 + 91M4 18.612.74E-016.96E+011.25E+051.06E+081.11E-012.17E+029.78E+041.29E+07 + 91M4 28.006.12E-028.91E+007.13E+033.46E+062.78E-022.79E+017.13E+036.54E+05 + 91M4 43.001.20E-021.03E+003.58E+021.01E+056.31E-033.23E+004.77E+022.97E+04 + 91M4 55.004.59E-032.99E-016.50E+011.35E+042.66E-039.42E-011.03E+025.14E+03 + 91M4 73.001.50E-037.20E-029.27E+001.38E+039.75E-042.28E-011.80E+016.99E+02 + 91M4 106.003.39E-041.12E-027.35E-017.17E+012.55E-043.56E-021.87E+005.23E+01 + 91M4 155.007.39E-051.70E-035.85E-023.75E+006.41E-055.42E-031.94E-013.91E+00 + 91M4 285.006.57E-068.88E-051.20E-033.91E-026.78E-062.72E-045.62E-036.95E-02 + 91M4 500.007.49E-076.46E-064.29E-057.41E-048.35E-071.80E-052.39E-041.99E-03 + 91M5 4.444.20E+017.25E+045.14E+093.12E+136.15E+001.28E+045.90E+091.58E+14 + 91M5 5.442.25E+012.56E+041.23E+095.25E+123.21E+004.64E+031.43E+092.58E+13 + 91M5 7.448.29E+005.17E+031.37E+083.42E+111.17E+009.73E+021.60E+081.58E+12 + 91M5 11.441.94E+005.77E+026.64E+068.25E+092.86E-011.14E+027.88E+063.48E+10 + 91M5 18.443.53E-015.08E+012.30E+051.38E+085.90E-021.06E+012.80E+055.16E+08 + 91M5 28.007.40E-026.04E+001.21E+044.02E+061.45E-021.33E+001.52E+041.35E+07 + 91M5 43.001.40E-026.71E-015.85E+021.10E+053.35E-031.61E-017.59E+023.32E+05 + 91M5 55.005.27E-031.89E-011.03E+021.43E+041.43E-034.84E-021.36E+024.07E+04 + 91M5 73.001.69E-034.40E-021.41E+011.38E+035.34E-041.23E-021.90E+013.73E+03 + 91M5 106.003.72E-046.43E-031.03E+006.49E+011.44E-042.06E-031.42E+001.68E+02 + 91M5 155.007.97E-059.21E-047.32E-022.99E+003.74E-053.47E-041.02E-017.59E+00 + 91M5 285.007.15E-064.46E-051.14E-032.36E-024.36E-062.22E-051.57E-036.09E-02 + 91M5 500.008.74E-073.28E-062.92E-053.17E-046.40E-072.05E-063.68E-058.39E-04 + 91N+ 50.004.94E-022.53E+011.61E+037.12E+042.26E+001.19E+027.55E+033.62E+05 + 91N+ 70.002.02E-025.00E+002.15E+026.20E+038.38E-012.57E+019.34E+022.86E+04 + 91N+ 100.007.95E-039.36E-012.75E+015.28E+022.99E-015.40E+001.13E+022.19E+03 + 91N+ 150.002.78E-031.46E-012.84E+003.63E+019.30E-029.79E-011.15E+011.38E+02 + 91N+ 200.001.33E-034.11E-026.03E-015.94E+004.08E-023.08E-012.52E+002.16E+01 + 91N+ 500.001.62E-041.24E-037.58E-033.58E-023.24E-031.13E-023.76E-021.32E-01 + 92K 116.612.73E-011.88E-013.69E-021.66E-031.21E+015.59E+015.27E+011.15E+01 + 92K 117.312.69E-011.91E-014.41E-023.52E-031.19E+015.47E+015.32E+011.36E+01 + 92K 118.612.62E-011.98E-015.80E-028.47E-031.15E+015.28E+015.41E+011.76E+01 + 92K 121.812.47E-012.10E-019.27E-022.89E-021.07E+014.83E+015.55E+012.69E+01 + 92K 125.612.30E-012.20E-011.33E-016.68E-029.80E+004.35E+015.57E+013.68E+01 + 92K 130.002.12E-012.27E-011.77E-011.25E-018.88E+003.88E+015.47E+014.61E+01 + 92K 136.001.91E-012.31E-012.29E-012.18E-017.80E+003.33E+015.22E+015.52E+01 + 92K 144.001.67E-012.29E-012.82E-013.48E-016.63E+002.75E+014.77E+016.18E+01 + 92K 156.001.39E-012.17E-013.32E-015.19E-015.28E+002.11E+014.05E+016.35E+01 + 92K 169.001.15E-012.00E-013.54E-016.49E-014.21E+001.61E+013.33E+015.93E+01 + 92K 186.009.23E-021.76E-013.53E-017.36E-013.21E+001.17E+012.56E+015.04E+01 + 92K 199.007.90E-021.58E-013.40E-017.55E-012.66E+009.39E+002.10E+014.33E+01 + 92K 216.006.55E-021.38E-013.16E-017.41E-012.11E+007.17E+001.63E+013.51E+01 + 92K 239.005.21E-021.16E-012.79E-016.85E-011.59E+005.15E+001.19E+012.62E+01 + 92K 265.004.13E-029.60E-022.40E-016.03E-011.19E+003.69E+008.49E+001.90E+01 + 92K 330.002.56E-026.36E-021.64E-014.18E-016.53E-011.84E+004.12E+009.09E+00 + 92K 415.001.59E-024.13E-021.06E-012.62E-013.50E-019.07E-011.93E+004.08E+00 + 92K 510.001.05E-022.82E-027.08E-021.66E-012.01E-014.90E-019.89E-011.98E+00 + 92K 620.007.25E-031.97E-024.80E-021.07E-011.19E-012.78E-015.33E-011.01E+00 + 92K 850.004.08E-031.13E-022.57E-025.26E-025.19E-021.15E-012.05E-013.55E-01 + 92K 1100.002.60E-037.17E-031.56E-022.98E-022.63E-025.76E-029.74E-021.58E-01 + 92K 1350.001.84E-035.00E-031.05E-021.91E-021.54E-023.38E-025.53E-028.61E-02 + 92K 1600.001.39E-033.71E-037.59E-031.34E-029.84E-032.19E-023.51E-025.30E-02 + 92L1 22.767.56E-011.80E+022.73E+034.49E+032.58E+022.85E+046.80E+053.88E+06 + 92L1 23.467.23E-011.58E+022.69E+037.48E+032.35E+022.47E+045.80E+053.70E+06 + 92L1 24.766.65E-011.24E+022.51E+031.18E+042.01E+021.92E+044.36E+053.24E+06 + 92L1 27.965.48E-017.18E+011.86E+031.58E+041.40E+021.09E+042.30E+052.11E+06 + 92L1 31.764.42E-014.01E+011.22E+031.40E+049.58E+016.09E+031.18E+051.21E+06 + 92L1 35.003.73E-012.56E+018.44E+021.11E+047.18E+013.91E+037.05E+047.54E+05 + 92L1 41.002.79E-011.23E+014.38E+026.53E+034.50E+011.91E+033.07E+043.35E+05 + 92L1 49.001.99E-015.42E+001.98E+023.14E+032.66E+018.63E+021.21E+041.29E+05 + 92L1 61.001.28E-012.02E+007.17E+011.14E+031.40E+013.31E+023.93E+033.87E+04 + 92L1 74.008.62E-028.90E-012.87E+014.37E+027.93E+001.44E+021.47E+031.32E+04 + 92L1 91.005.56E-023.99E-011.08E+011.52E+024.34E+006.03E+015.24E+024.18E+03 + 92L1 104.004.17E-022.49E-015.82E+007.66E+012.95E+003.48E+012.72E+022.00E+03 + 92L1 121.002.99E-021.53E-012.93E+003.52E+011.90E+001.88E+011.31E+028.71E+02 + 92L1 144.002.04E-029.24E-021.38E+001.46E+011.15E+009.41E+005.73E+013.40E+02 + 92L1 170.001.42E-025.94E-026.96E-016.44E+007.18E-014.94E+002.65E+011.41E+02 + 92L1 235.007.03E-032.70E-022.06E-011.42E+002.88E-011.47E+006.23E+002.65E+01 + 92L1 320.003.68E-031.35E-027.39E-023.82E-011.22E-014.89E-011.68E+005.86E+00 + 92L1 410.002.23E-037.94E-033.52E-021.46E-016.17E-022.11E-016.24E-011.86E+00 + 92L1 520.001.41E-034.88E-031.82E-026.31E-023.24E-029.76E-022.53E-016.57E-01 + 92L1 750.007.28E-042.39E-037.22E-031.96E-021.22E-023.18E-026.92E-021.49E-01 + 92L11000.004.43E-041.40E-033.70E-038.67E-035.69E-031.39E-022.71E-025.17E-02 + 92L11500.002.25E-046.66E-041.53E-033.06E-031.95E-034.60E-038.05E-031.34E-02 + 92L2 21.951.77E+007.53E+036.68E+057.57E+063.28E+011.18E+039.16E+031.33E+04 + 92L2 22.651.63E+006.46E+035.62E+057.10E+062.99E+011.06E+039.10E+032.22E+04 + 92L2 23.951.42E+004.92E+034.12E+056.04E+062.54E+018.61E+028.61E+033.53E+04 + 92L2 27.151.02E+002.67E+032.05E+053.70E+061.75E+015.44E+026.67E+034.80E+04 + 92L2 30.957.24E-011.42E+039.90E+041.98E+061.19E+013.35E+024.59E+034.35E+04 + 92L2 35.005.20E-017.83E+024.98E+041.04E+068.26E+002.13E+023.05E+033.32E+04 + 92L2 41.003.37E-013.67E+022.06E+044.36E+055.18E+001.19E+021.72E+032.03E+04 + 92L2 49.002.05E-011.57E+027.65E+031.56E+053.08E+006.13E+018.64E+021.04E+04 + 92L2 61.001.10E-015.60E+012.27E+034.28E+041.63E+002.73E+013.57E+024.11E+03 + 92L2 74.006.35E-022.28E+017.86E+021.34E+049.30E-011.35E+011.60E+021.72E+03 + 92L2 91.003.50E-028.79E+002.55E+023.87E+035.14E-016.33E+006.72E+016.54E+02 + 92L2 104.002.38E-024.79E+001.24E+021.73E+033.51E-013.91E+003.83E+013.46E+02 + 92L2 121.001.53E-022.42E+005.53E+016.98E+022.28E-012.27E+002.02E+011.67E+02 + 92L2 144.009.26E-031.12E+002.20E+012.48E+021.40E-011.22E+009.70E+007.23E+01 + 92L2 170.005.74E-035.43E-019.30E+009.32E+018.76E-026.78E-014.84E+003.24E+01 + 92L2 235.002.28E-031.37E-011.80E+001.44E+013.55E-022.20E-011.27E+006.91E+00 + 92L2 320.009.68E-043.85E-023.99E-012.59E+001.51E-027.74E-023.66E-011.63E+00 + 92L2 410.004.96E-041.44E-021.25E-016.90E-017.67E-033.41E-021.39E-015.31E-01 + 92L2 520.002.66E-045.84E-034.29E-022.05E-014.01E-031.58E-025.61E-021.87E-01 + 92L2 750.001.05E-041.55E-039.04E-033.51E-021.47E-035.00E-031.47E-024.05E-02 + 92L21000.005.21E-055.82E-042.89E-039.70E-036.73E-042.09E-035.41E-031.31E-02 + 92L21500.002.02E-051.60E-046.51E-041.84E-032.20E-046.33E-041.42E-032.94E-03 + 92L3 18.174.22E+001.96E+042.27E+063.43E+073.23E+005.18E+043.77E+073.23E+09 + 92L3 18.873.79E+001.62E+041.81E+063.01E+072.88E+004.29E+042.92E+072.43E+09 + 92L3 20.173.13E+001.16E+041.21E+062.29E+072.34E+003.08E+041.86E+071.46E+09 + 92L3 23.372.05E+005.52E+035.04E+051.12E+071.49E+001.48E+046.94E+064.78E+08 + 92L3 27.171.32E+002.59E+032.05E+054.86E+069.43E-016.97E+032.54E+061.53E+08 + 92L3 35.006.17E-017.24E+024.50E+041.07E+064.35E-011.97E+034.74E+052.29E+07 + 92L3 41.003.81E-013.27E+021.75E+043.97E+052.69E-018.98E+021.68E+057.07E+06 + 92L3 49.002.20E-011.34E+026.03E+031.27E+051.56E-013.70E+025.26E+041.90E+06 + 92L3 61.001.11E-014.49E+011.64E+033.06E+048.04E-021.25E+021.29E+043.83E+05 + 92L3 74.006.03E-021.71E+015.19E+028.62E+034.48E-024.78E+013.76E+039.50E+04 + 92L3 91.003.13E-026.15E+001.52E+022.20E+032.40E-021.72E+011.03E+032.18E+04 + 92L3 104.002.05E-023.18E+006.93E+019.10E+021.61E-028.88E+004.48E+028.52E+03 + 92L3 121.001.26E-021.51E+002.84E+013.34E+021.02E-024.21E+001.77E+022.97E+03 + 92L3 144.007.26E-036.44E-011.03E+011.06E+026.09E-031.79E+006.15E+018.99E+02 + 92L3 170.004.29E-032.88E-013.91E+003.55E+013.72E-037.91E-012.28E+012.93E+02 + 92L3 235.001.55E-036.07E-026.08E-014.32E+001.43E-031.63E-013.40E+003.44E+01 + 92L3 320.006.02E-041.42E-021.07E-016.05E-015.80E-043.65E-025.84E-014.79E+00 + 92L3 410.002.87E-044.55E-032.76E-021.31E-012.84E-041.11E-021.47E-011.03E+00 + 92L3 520.001.44E-041.58E-037.83E-033.19E-021.45E-043.62E-034.03E-022.47E-01 + 92L3 750.005.20E-053.33E-041.24E-034.11E-035.25E-056.70E-045.80E-032.97E-02 + 92L31000.002.44E-051.07E-043.26E-049.32E-042.46E-051.89E-041.33E-036.00E-03 + 92L31500.009.23E-062.49E-055.93E-051.39E-049.10E-063.67E-051.81E-046.92E-04 + 92M1 6.551.33E+001.03E+046.17E+058.92E+062.54E+033.34E+069.41E+086.34E+10 + 92M1 7.551.15E+005.62E+033.46E+057.11E+061.66E+031.66E+063.75E+082.42E+10 + 92M1 9.558.60E-012.07E+031.31E+053.29E+068.22E+025.28E+058.36E+074.82E+09 + 92M1 13.555.16E-014.65E+022.98E+048.36E+052.89E+029.70E+049.29E+064.32E+08 + 92M1 20.552.56E-017.63E+014.70E+031.35E+058.35E+011.33E+047.29E+052.50E+07 + 92M1 29.001.36E-011.67E+019.50E+022.58E+043.00E+012.63E+039.45E+042.46E+06 + 92M1 44.005.97E-022.62E+001.29E+023.04E+038.73E+003.89E+028.65E+031.59E+05 + 92M1 56.003.63E-029.12E-013.99E+018.43E+024.29E+001.32E+022.27E+033.40E+04 + 92M1 74.002.01E-022.83E-011.03E+011.87E+021.90E+003.90E+015.03E+025.97E+03 + 92M1 107.009.02E-037.03E-021.76E+002.54E+016.48E-018.21E+007.41E+016.44E+02 + 92M1 155.004.00E-032.16E-023.31E-013.59E+002.23E-011.83E+001.19E+017.62E+01 + 92M1 285.001.07E-034.45E-033.08E-021.91E-014.00E-021.85E-017.37E-012.97E+00 + 92M1 500.003.51E-041.29E-035.30E-032.00E-028.57E-032.73E-027.52E-022.08E-01 + 92M2 6.182.87E+001.01E+068.39E+089.04E+103.74E+021.25E+059.15E+061.34E+08 + 92M2 7.182.41E+004.81E+053.18E+083.26E+102.39E+026.37E+044.41E+061.03E+08 + 92M2 9.181.69E+001.43E+056.58E+076.03E+091.15E+022.13E+041.32E+064.11E+07 + 92M2 13.188.91E-012.40E+046.74E+065.00E+083.90E+014.39E+032.21E+057.41E+06 + 92M2 20.183.66E-012.98E+034.88E+052.71E+071.10E+017.22E+022.73E+048.14E+05 + 92M2 29.001.58E-015.13E+025.49E+042.34E+063.78E+001.62E+024.74E+031.18E+05 + 92M2 44.005.57E-026.96E+014.71E+031.47E+051.11E+003.07E+016.56E+021.25E+04 + 92M2 56.002.96E-022.23E+011.17E+033.02E+045.53E-011.20E+012.13E+023.44E+03 + 92M2 74.001.40E-026.07E+002.42E+025.00E+032.47E-014.11E+005.90E+017.82E+02 + 92M2 107.005.07E-031.13E+003.14E+014.85E+028.63E-021.03E+001.12E+011.13E+02 + 92M2 155.001.80E-032.18E-014.31E+004.98E+013.03E-022.67E-012.19E+001.68E+01 + 92M2 285.003.35E-041.65E-021.95E-011.43E+005.57E-033.17E-021.67E-018.38E-01 + 92M2 500.007.57E-051.82E-031.41E-027.04E-021.19E-034.90E-031.82E-026.35E-02 + 92M3 5.301.02E+012.59E+062.48E+092.97E+113.46E+017.10E+065.98E+105.88E+13 + 92M3 6.307.52E+001.09E+067.94E+088.68E+102.05E+013.00E+061.81E+101.34E+13 + 92M3 8.304.39E+002.73E+051.31E+081.22E+108.90E+007.56E+052.70E+091.29E+12 + 92M3 12.301.86E+003.80E+041.04E+077.47E+082.70E+001.06E+051.81E+084.81E+10 + 92M3 19.306.21E-013.96E+035.98E+053.13E+076.90E-011.12E+048.46E+061.21E+09 + 92M3 29.002.12E-015.14E+024.73E+041.82E+062.01E-011.47E+035.48E+054.67E+07 + 92M3 44.006.59E-026.39E+013.65E+031.02E+055.71E-021.85E+023.48E+041.82E+06 + 92M3 56.003.26E-021.92E+018.43E+021.94E+042.76E-025.58E+017.24E+032.91E+05 + 92M3 74.001.42E-024.81E+001.57E+022.89E+031.20E-021.40E+011.21E+033.65E+04 + 92M3 107.004.60E-037.80E-011.74E+012.37E+023.98E-032.26E+001.19E+022.51E+03 + 92M3 155.001.47E-031.28E-011.96E+001.98E+011.33E-033.63E-011.23E+011.87E+02 + 92M3 285.002.27E-046.93E-035.93E-023.70E-012.23E-041.86E-023.43E-013.20E+00 + 92M3 500.004.37E-055.32E-042.77E-031.17E-024.47E-051.26E-031.49E-029.68E-02 + 92M4 4.732.60E+017.60E+042.04E+091.54E+131.06E+012.35E+059.55E+083.96E+11 + 92M4 5.731.46E+012.88E+045.31E+082.87E+125.71E+009.00E+042.62E+089.36E+10 + 92M4 7.735.72E+006.33E+036.50E+072.14E+112.17E+002.01E+043.52E+079.89E+09 + 92M4 11.731.44E+007.72E+023.48E+065.91E+095.53E-012.47E+032.22E+064.38E+08 + 92M4 18.732.81E-017.33E+011.30E+051.11E+081.16E-012.36E+021.05E+051.37E+07 + 92M4 29.005.65E-028.13E+006.10E+032.86E+062.64E-022.62E+016.38E+035.63E+05 + 92M4 44.001.16E-021.00E+003.34E+029.21E+046.26E-033.23E+004.61E+022.80E+04 + 92M4 56.004.53E-032.98E-016.29E+011.29E+042.69E-039.66E-011.03E+025.03E+03 + 92M4 74.001.51E-037.36E-029.25E+001.37E+031.00E-032.40E-011.85E+017.06E+02 + 92M4 107.003.49E-041.17E-027.56E-017.36E+012.67E-043.82E-021.98E+005.45E+01 + 92M4 155.007.93E-051.87E-036.41E-024.15E+006.94E-056.09E-032.17E-014.35E+00 + 92M4 285.007.00E-069.78E-051.31E-034.34E-027.36E-063.06E-046.29E-037.74E-02 + 92M4 500.007.96E-077.12E-064.72E-058.23E-049.08E-072.02E-052.68E-042.22E-03 + 92M5 4.524.09E+016.99E+044.99E+092.97E+136.14E+001.26E+045.89E+091.55E+14 + 92M5 5.522.22E+012.51E+041.23E+095.14E+123.23E+004.66E+031.46E+092.60E+13 + 92M5 7.528.28E+005.17E+031.40E+083.46E+111.19E+009.97E+021.68E+081.65E+12 + 92M5 11.521.97E+005.89E+026.96E+068.61E+092.97E-011.19E+028.49E+063.74E+10 + 92M5 18.523.63E-015.26E+012.46E+051.47E+086.17E-021.12E+013.07E+055.69E+08 + 92M5 29.006.79E-025.35E+001.04E+043.31E+061.37E-021.21E+001.34E+041.13E+07 + 92M5 44.001.35E-026.33E-015.49E+021.01E+053.30E-031.55E-017.30E+023.11E+05 + 92M5 56.005.18E-031.83E-011.00E+021.35E+041.43E-034.78E-021.36E+023.98E+04 + 92M5 74.001.69E-034.36E-021.41E+011.36E+035.43E-041.24E-021.95E+013.79E+03 + 92M5 107.003.81E-046.54E-031.07E+006.62E+011.49E-042.13E-031.50E+001.77E+02 + 92M5 155.008.52E-059.84E-048.08E-023.29E+004.01E-053.74E-041.15E-018.60E+00 + 92M5 285.007.66E-064.78E-051.25E-032.60E-024.67E-062.39E-051.76E-036.88E-02 + 92M5 500.009.30E-073.54E-063.21E-053.49E-046.86E-072.21E-064.11E-059.45E-04 + 92N+ 50.005.07E-022.77E+011.75E+037.78E+042.49E+001.31E+028.45E+034.08E+05 + 92N+ 70.002.07E-025.47E+002.34E+026.76E+039.24E-012.83E+011.04E+033.20E+04 + 92N+ 100.008.18E-031.03E+002.99E+015.74E+023.30E-015.94E+001.25E+022.44E+03 + 92N+ 150.002.86E-031.60E-013.10E+003.95E+011.02E-011.08E+001.28E+011.52E+02 + 92N+ 200.001.38E-034.50E-026.59E-016.47E+004.50E-023.38E-012.78E+002.39E+01 + 92N+ 500.001.68E-041.34E-038.31E-033.92E-023.56E-031.23E-024.10E-021.44E-01 + 93K 119.672.59E-011.74E-013.41E-021.52E-031.23E+015.43E+014.95E+011.05E+01 + 93K 120.372.55E-011.77E-014.06E-023.18E-031.21E+015.32E+015.00E+011.24E+01 + 93K 121.672.49E-011.83E-015.31E-027.58E-031.17E+015.14E+015.08E+011.59E+01 + 93K 124.872.35E-011.94E-018.46E-022.57E-021.09E+014.71E+015.21E+012.43E+01 + 93K 128.672.19E-012.04E-011.21E-015.93E-021.00E+014.26E+015.24E+013.31E+01 + 93K 133.002.03E-012.11E-011.61E-011.10E-019.09E+003.82E+015.17E+014.15E+01 + 93K 139.001.83E-012.15E-012.09E-011.94E-018.02E+003.29E+014.95E+015.00E+01 + 93K 147.001.61E-012.14E-012.60E-013.12E-016.84E+002.74E+014.55E+015.65E+01 + 93K 159.001.35E-012.05E-013.08E-014.72E-015.47E+002.11E+013.89E+015.86E+01 + 93K 172.001.12E-011.90E-013.32E-015.97E-014.38E+001.62E+013.23E+015.53E+01 + 93K 189.009.04E-021.68E-013.35E-016.87E-013.36E+001.19E+012.50E+014.76E+01 + 93K 202.007.77E-021.53E-013.25E-017.11E-012.78E+009.54E+002.07E+014.13E+01 + 93K 219.006.46E-021.35E-013.05E-017.04E-012.22E+007.32E+001.62E+013.37E+01 + 93K 242.005.16E-021.14E-012.72E-016.58E-011.68E+005.29E+001.18E+012.55E+01 + 93K 270.004.05E-029.36E-022.33E-015.80E-011.24E+003.72E+008.34E+001.82E+01 + 93K 335.002.54E-026.31E-021.63E-014.09E-016.84E-011.88E+004.12E+008.89E+00 + 93K 420.001.59E-024.16E-021.07E-012.61E-013.70E-019.39E-011.96E+004.07E+00 + 93K 510.001.09E-022.92E-027.33E-021.72E-012.19E-015.26E-011.05E+002.07E+00 + 93K 620.007.49E-032.06E-025.00E-021.11E-011.30E-012.99E-015.66E-011.06E+00 + 93K 850.004.23E-031.18E-022.70E-025.50E-025.64E-021.24E-012.18E-013.76E-01 + 93K 1100.002.70E-037.53E-031.64E-023.13E-022.86E-026.20E-021.04E-011.68E-01 + 93K 1350.001.92E-035.26E-031.11E-022.02E-021.67E-023.64E-025.91E-029.16E-02 + 93K 1600.001.44E-033.91E-038.01E-031.41E-021.06E-022.36E-023.76E-025.64E-02 + 93L1 23.427.13E-011.73E+022.50E+033.94E+032.62E+022.75E+046.31E+053.48E+06 + 93L1 24.126.82E-011.52E+022.47E+036.54E+032.40E+022.40E+045.41E+053.32E+06 + 93L1 25.426.29E-011.20E+022.31E+031.04E+042.05E+021.88E+044.10E+052.93E+06 + 93L1 28.625.21E-017.09E+011.75E+031.41E+041.44E+021.08E+042.20E+051.94E+06 + 93L1 32.424.23E-014.04E+011.16E+031.27E+049.98E+016.12E+031.14E+051.13E+06 + 93L1 36.003.52E-012.50E+017.86E+029.98E+037.31E+013.79E+036.60E+046.84E+05 + 93L1 42.002.66E-011.24E+014.17E+025.99E+034.64E+011.89E+032.94E+043.11E+05 + 93L1 50.001.91E-015.58E+001.94E+022.95E+032.77E+018.70E+021.19E+041.23E+05 + 93L1 62.001.25E-012.14E+007.20E+011.10E+031.47E+013.39E+023.93E+033.77E+04 + 93L1 75.008.45E-029.57E-012.95E+014.34E+028.44E+001.50E+021.50E+031.31E+04 + 93L1 92.005.49E-024.32E-011.13E+011.55E+024.65E+006.34E+015.40E+024.23E+03 + 93L1 105.004.14E-022.70E-016.16E+007.88E+013.17E+003.67E+012.82E+022.04E+03 + 93L1 122.002.99E-021.65E-013.14E+003.67E+012.06E+002.00E+011.37E+028.98E+02 + 93L1 145.002.05E-029.92E-021.48E+001.54E+011.25E+001.01E+016.03E+013.53E+02 + 93L1 170.001.45E-026.44E-027.70E-017.05E+007.95E-015.42E+002.88E+011.52E+02 + 93L1 235.007.21E-032.89E-022.26E-011.56E+003.18E-011.61E+006.78E+002.87E+01 + 93L1 320.003.79E-031.44E-028.06E-024.17E-011.35E-015.35E-011.83E+006.34E+00 + 93L1 410.002.31E-038.46E-033.81E-021.59E-016.81E-022.31E-016.78E-012.01E+00 + 93L1 520.001.47E-035.20E-031.97E-026.85E-023.58E-021.07E-012.75E-017.11E-01 + 93L1 750.007.59E-042.55E-037.77E-032.12E-021.34E-023.48E-027.52E-021.61E-01 + 93L11000.004.63E-041.49E-033.97E-039.34E-036.25E-031.52E-022.95E-025.59E-02 + 93L11500.002.36E-047.09E-041.65E-033.29E-032.14E-035.02E-038.75E-031.45E-02 + 93L2 22.601.68E+007.11E+036.04E+056.60E+063.37E+011.15E+038.52E+031.18E+04 + 93L2 23.301.55E+006.13E+035.11E+056.21E+063.08E+011.02E+028.45E+031.97E+04 + 93L2 24.601.35E+004.70E+033.78E+055.32E+062.62E+018.41E+028.04E+033.13E+04 + 93L2 27.809.89E-012.59E+031.92E+053.32E+061.82E+015.38E+026.30E+034.32E+04 + 93L2 31.607.05E-011.40E+039.43E+041.82E+061.25E+013.36E+024.41E+033.99E+04 + 93L2 36.004.97E-017.44E+024.56E+049.23E+058.50E+002.08E+022.87E+033.02E+04 + 93L2 42.003.26E-013.56E+021.93E+043.96E+055.41E+001.18E+021.65E+031.88E+04 + 93L2 50.002.01E-011.55E+027.34E+031.46E+053.25E+006.20E+018.44E+029.79E+03 + 93L2 62.001.10E-015.67E+012.24E+034.11E+041.74E+002.81E+013.55E+023.98E+03 + 93L2 75.006.37E-022.33E+017.88E+021.32E+041.01E+001.40E+011.62E+021.70E+03 + 93L2 92.003.55E-029.14E+002.60E+023.87E+035.59E-016.66E+006.91E+016.58E+02 + 93L2 105.002.43E-025.02E+001.27E+021.75E+033.83E-014.14E+003.96E+013.51E+02 + 93L2 122.001.57E-022.56E+005.74E+017.13E+022.51E-012.42E+002.11E+011.71E+02 + 93L2 145.009.58E-031.19E+002.31E+012.56E+021.54E-011.31E+001.02E+017.47E+01 + 93L2 170.006.07E-035.96E-011.00E+011.01E+029.85E-027.46E-015.25E+003.48E+01 + 93L2 235.002.43E-031.50E-011.97E+001.56E+014.00E-022.43E-011.38E+007.46E+00 + 93L2 320.001.04E-034.24E-024.37E-012.82E+001.71E-028.57E-024.01E-011.77E+00 + 93L2 410.005.32E-041.59E-021.37E-017.53E-018.66E-033.78E-021.52E-015.79E-01 + 93L2 520.002.86E-046.45E-034.72E-022.24E-014.53E-031.76E-026.18E-022.05E-01 + 93L2 750.001.14E-041.72E-039.99E-033.86E-021.67E-035.58E-031.63E-024.46E-02 + 93L21000.005.66E-056.46E-043.20E-031.07E-027.61E-042.33E-036.00E-031.44E-02 + 93L21500.002.20E-051.78E-047.23E-042.04E-032.50E-047.09E-041.58E-033.27E-03 + 93L3 18.614.02E+001.87E+042.08E+063.05E+073.16E+005.09E+043.57E+072.98E+09 + 93L3 19.313.63E+001.55E+041.67E+062.69E+072.83E+004.23E+042.79E+072.25E+09 + 93L3 20.613.01E+001.12E+041.13E+062.06E+072.31E+003.06E+041.79E+071.37E+09 + 93L3 23.811.99E+005.40E+034.76E+051.02E+071.49E+001.49E+046.81E+064.59E+08 + 93L3 27.611.29E+002.56E+031.97E+054.52E+069.47E-017.12E+032.54E+061.50E+08 + 93L3 36.005.82E-016.75E+024.02E+049.25E+054.21E-011.90E+034.37E+052.05E+07 + 93L3 42.003.64E-013.12E+021.60E+043.53E+052.63E-018.81E+021.59E+056.52E+06 + 93L3 50.002.13E-011.30E+025.66E+031.16E+051.55E-013.70E+025.12E+041.80E+06 + 93L3 62.001.09E-014.44E+011.57E+032.87E+048.06E-021.27E+021.28E+043.75E+05 + 93L3 75.005.97E-021.72E+015.08E+028.25E+034.54E-024.95E+013.83E+039.51E+04 + 93L3 92.003.13E-026.26E+001.51E+022.15E+032.45E-021.80E+011.06E+032.22E+04 + 93L3 105.002.06E-023.26E+006.95E+018.96E+021.65E-029.37E+004.67E+028.77E+03 + 93L3 122.001.28E-021.56E+002.88E+013.32E+021.05E-024.47E+001.86E+023.09E+03 + 93L3 145.007.37E-036.69E-011.05E+011.06E+026.28E-031.91E+006.52E+019.43E+02 + 93L3 170.004.46E-033.09E-014.15E+003.74E+013.92E-038.73E-012.51E+013.21E+02 + 93L3 235.001.62E-036.51E-026.46E-014.55E+001.51E-031.79E-013.75E+003.78E+01 + 93L3 320.006.29E-041.52E-021.14E-016.39E-016.11E-044.02E-026.43E-015.25E+00 + 93L3 410.003.00E-044.87E-032.93E-021.39E-012.99E-041.22E-021.62E-011.13E+00 + 93L3 520.001.50E-041.69E-038.33E-033.38E-021.52E-043.97E-034.43E-022.71E-01 + 93L3 750.005.43E-053.56E-041.32E-034.37E-035.52E-057.33E-046.37E-033.25E-02 + 93L31000.002.55E-051.14E-043.47E-049.91E-042.58E-052.06E-041.46E-036.56E-03 + 93L31500.009.66E-062.64E-056.29E-051.48E-049.53E-063.96E-051.97E-047.57E-04 + 93M1 6.721.27E+001.02E+046.05E+058.32E+062.61E+033.28E+068.94E+085.85E+10 + 93M1 7.721.10E+005.65E+033.43E+056.79E+061.72E+031.66E+063.65E+082.28E+10 + 93M1 9.728.26E-012.12E+031.32E+053.24E+068.66E+025.40E+058.36E+074.70E+09 + 93M1 13.725.00E-014.87E+023.05E+048.41E+053.09E+021.02E+059.60E+064.37E+08 + 93M1 20.722.51E-018.19E+014.90E+031.38E+059.05E+011.42E+047.72E+052.60E+07 + 93M1 29.001.36E-011.87E+011.03E+032.75E+043.33E+012.92E+031.05E+052.71E+06 + 93M1 44.006.01E-022.97E+001.42E+023.28E+039.70E+004.31E+029.57E+031.75E+05 + 93M1 56.003.67E-021.04E+004.41E+019.13E+024.76E+001.46E+022.51E+033.74E+04 + 93M1 74.002.04E-023.23E-011.14E+012.04E+022.10E+004.32E+015.55E+026.54E+03 + 93M1 107.009.18E-037.92E-021.96E+002.79E+017.19E-019.07E+008.15E+017.05E+02 + 93M1 155.004.09E-032.38E-023.70E-013.97E+002.48E-012.02E+001.30E+018.33E+01 + 93M1 285.001.11E-034.79E-033.40E-022.12E-014.44E-022.03E-018.06E-013.24E+00 + 93M1 500.003.66E-041.38E-035.77E-032.19E-029.48E-033.00E-028.22E-022.27E-01 + 93M2 6.362.70E+009.62E+057.68E+088.00E+103.86E+021.23E+058.63E+061.22E+08 + 93M2 7.362.29E+004.67E+052.98E+082.96E+102.50E+026.34E+044.24E+069.50E+07 + 93M2 9.361.63E+001.42E+056.39E+075.69E+091.22E+022.17E+041.30E+063.91E+07 + 93M2 13.368.71E-012.46E+046.78E+064.92E+084.22E+014.59E+032.25E+057.32E+06 + 93M2 20.363.65E-013.12E+035.05E+052.76E+071.21E+017.68E+022.85E+048.29E+05 + 93M2 29.001.62E-015.61E+025.98E+042.53E+064.25E+001.79E+025.15E+031.26E+05 + 93M2 44.005.76E-027.62E+015.14E+031.58E+051.25E+003.38E+017.13E+021.35E+04 + 93M2 56.003.08E-022.44E+011.28E+033.27E+046.23E-011.32E+012.32E+023.71E+03 + 93M2 74.001.46E-026.66E+002.64E+025.41E+032.79E-014.53E+006.43E+018.44E+02 + 93M2 107.005.32E-031.24E+003.43E+015.26E+029.73E-021.14E+001.22E+011.22E+02 + 93M2 155.001.91E-032.39E-014.72E+005.41E+013.42E-022.95E-012.39E+001.83E+01 + 93M2 285.003.58E-041.82E-022.14E-011.56E+006.30E-033.51E-021.84E-019.15E-01 + 93M2 500.008.16E-052.01E-031.55E-027.74E-021.35E-035.46E-032.01E-026.98E-02 + 93M3 5.439.80E+002.49E+062.29E+092.66E+113.41E+017.03E+065.71E+105.46E+13 + 93M3 6.437.26E+001.07E+067.52E+087.99E+102.04E+013.02E+061.77E+101.28E+13 + 93M3 8.434.28E+002.74E+051.28E+081.16E+109.00E+007.80E+052.73E+091.29E+12 + 93M3 12.431.84E+003.90E+041.05E+077.35E+082.77E+001.12E+051.90E+085.00E+10 + 93M3 19.436.22E-014.14E+036.15E+053.16E+077.16E-011.21E+049.08E+061.29E+09 + 93M3 29.002.17E-015.56E+025.06E+041.93E+062.13E-011.64E+036.14E+055.24E+07 + 93M3 44.006.78E-026.91E+013.90E+031.08E+056.04E-022.06E+023.89E+042.04E+06 + 93M3 56.003.36E-022.08E+019.00E+022.05E+042.92E-026.20E+018.09E+033.25E+05 + 93M3 74.001.47E-025.20E+001.68E+023.05E+031.27E-021.55E+011.35E+034.07E+04 + 93M3 107.004.78E-038.43E-011.85E+012.50E+024.21E-032.51E+001.33E+022.79E+03 + 93M3 155.001.53E-031.38E-012.09E+002.09E+011.40E-034.04E-011.37E+012.07E+02 + 93M3 285.002.39E-047.47E-036.34E-023.93E-012.36E-042.06E-023.80E-013.54E+00 + 93M3 500.004.57E-055.73E-042.96E-031.25E-024.72E-051.40E-031.65E-021.07E-01 + 93M4 4.852.48E+017.27E+041.87E+091.37E+131.04E+012.33E+059.08E+083.66E+11 + 93M4 5.851.41E+012.81E+045.02E+082.67E+125.69E+009.10E+042.56E+088.93E+10 + 93M4 7.855.64E+006.36E+036.37E+072.08E+112.20E+002.08E+043.57E+079.81E+09 + 93M4 11.851.45E+007.98E+023.54E+066.01E+095.71E-012.64E+032.33E+064.52E+08 + 93M4 18.852.87E-017.72E+011.36E+051.17E+081.22E-012.56E+021.13E+051.46E+07 + 93M4 29.005.95E-028.85E+006.67E+033.17E+062.83E-022.94E+017.12E+036.25E+05 + 93M4 44.001.23E-021.09E+003.66E+021.02E+056.72E-033.63E+005.15E+023.10E+04 + 93M4 56.004.81E-033.25E-016.88E+011.43E+042.89E-031.08E+001.15E+025.58E+03 + 93M4 74.001.61E-038.05E-021.01E+011.52E+031.08E-032.69E-012.07E+017.83E+02 + 93M4 107.003.72E-041.28E-028.27E-018.14E+012.88E-044.29E-022.21E+006.05E+01 + 93M4 155.008.47E-052.05E-037.02E-024.59E+007.51E-056.84E-032.42E-014.84E+00 + 93M4 285.007.57E-061.08E-041.44E-034.80E-027.99E-063.44E-047.03E-038.63E-02 + 93M4 500.008.63E-077.83E-065.18E-059.12E-049.87E-072.26E-053.00E-042.48E-03 + 93M5 4.663.83E+016.33E+044.44E+092.52E+135.90E+001.17E+045.38E+091.35E+14 + 93M5 5.662.11E+012.34E+041.13E+094.57E+123.16E+004.44E+031.38E+092.38E+13 + 93M5 7.668.06E+004.98E+031.35E+083.26E+111.19E+009.82E+021.67E+081.60E+12 + 93M5 11.661.96E+005.86E+027.05E+068.57E+093.02E-011.21E+028.82E+063.85E+10 + 93M5 18.663.69E-015.36E+012.57E+051.53E+086.39E-021.16E+013.30E+056.08E+08 + 93M5 29.007.13E-025.67E+001.15E+043.64E+061.46E-021.31E+001.52E+041.29E+07 + 93M5 44.001.42E-026.72E-016.06E+021.11E+053.52E-031.68E-018.26E+023.54E+05 + 93M5 56.005.47E-031.95E-011.11E+021.49E+041.53E-035.16E-021.54E+024.52E+04 + 93M5 74.001.79E-034.64E-021.56E+011.49E+035.80E-041.34E-022.20E+014.30E+03 + 93M5 107.004.06E-046.97E-031.18E+007.28E+011.59E-042.29E-031.70E+002.00E+02 + 93M5 155.009.12E-051.05E-038.92E-023.62E+004.29E-054.03E-041.30E-019.73E+00 + 93M5 285.008.24E-065.12E-051.38E-032.86E-025.01E-062.58E-051.99E-037.77E-02 + 93M5 500.001.03E-063.79E-063.52E-053.84E-047.35E-072.38E-064.60E-051.06E-03 + 93N+ 50.005.30E-023.07E+011.93E+038.64E+042.83E+001.49E+029.61E+034.66E+05 + 93N+ 70.002.17E-026.08E+002.59E+027.48E+031.05E+003.21E+011.18E+033.65E+04 + 93N+ 100.008.61E-031.14E+003.31E+016.34E+023.75E-016.72E+001.42E+022.77E+03 + 93N+ 150.003.02E-031.78E-013.43E+004.36E+011.16E-011.22E+001.44E+011.72E+02 + 93N+ 200.001.46E-035.01E-027.32E-017.16E+005.11E-023.81E-013.13E+002.69E+01 + 93N+ 500.001.80E-041.50E-039.29E-034.37E-024.04E-031.39E-024.60E-021.61E-01 + 94K 122.812.46E-011.61E-013.15E-021.38E-031.25E+015.28E+014.64E+019.55E+00 + 94K 123.512.43E-011.63E-013.74E-022.87E-031.23E+015.17E+014.69E+011.12E+01 + 94K 124.812.37E-011.69E-014.88E-026.79E-031.19E+015.00E+014.77E+011.44E+01 + 94K 128.012.24E-011.80E-017.73E-022.28E-021.11E+014.60E+014.89E+012.18E+01 + 94K 131.812.09E-011.89E-011.11E-015.28E-021.02E+014.17E+014.93E+012.98E+01 + 94K 136.001.95E-011.96E-011.46E-019.64E-029.31E+003.76E+014.88E+013.72E+01 + 94K 142.001.77E-012.01E-011.91E-011.72E-018.23E+003.26E+014.70E+014.52E+01 + 94K 150.001.56E-012.01E-012.39E-012.79E-017.04E+002.72E+014.34E+015.14E+01 + 94K 162.001.31E-011.93E-012.87E-014.28E-015.66E+002.11E+013.74E+015.40E+01 + 94K 175.001.09E-011.81E-013.12E-015.49E-014.55E+001.63E+013.13E+015.15E+01 + 94K 192.008.86E-021.62E-013.19E-016.40E-013.50E+001.20E+012.45E+014.49E+01 + 94K 205.007.64E-021.48E-013.11E-016.68E-012.91E+009.70E+002.03E+013.93E+01 + 94K 222.006.38E-021.31E-012.94E-016.69E-012.33E+007.48E+001.60E+013.24E+01 + 94K 245.005.12E-021.11E-012.65E-016.33E-011.77E+005.43E+001.18E+012.47E+01 + 94K 270.004.14E-029.45E-022.33E-015.72E-011.35E+003.98E+008.69E+001.84E+01 + 94K 335.002.61E-026.44E-021.65E-014.12E-017.45E-012.01E+004.32E+009.15E+00 + 94K 420.001.64E-024.28E-021.10E-012.66E-014.02E-011.01E+002.07E+004.22E+00 + 94K 510.001.12E-023.03E-027.60E-021.77E-012.38E-015.64E-011.11E+002.16E+00 + 94K 620.007.74E-032.14E-025.21E-021.15E-011.41E-013.21E-016.01E-011.11E+00 + 94K 850.004.38E-031.23E-022.83E-025.75E-026.12E-021.33E-012.32E-013.96E-01 + 94K 1100.002.81E-037.90E-031.72E-023.28E-023.10E-026.66E-021.11E-011.78E-01 + 94K 1350.001.99E-035.53E-031.17E-022.12E-021.80E-023.91E-026.31E-029.72E-02 + 94K 1600.001.50E-034.11E-038.45E-031.49E-021.15E-022.54E-024.02E-026.00E-02 + 94L1 24.106.71E-011.66E+022.29E+033.43E+032.66E+022.66E+045.85E+053.11E+06 + 94L1 24.806.43E-011.46E+022.27E+035.69E+032.44E+022.32E+045.04E+052.98E+06 + 94L1 26.105.94E-011.17E+022.13E+039.07E+032.10E+021.83E+043.85E+052.64E+06 + 94L1 29.304.95E-017.00E+011.64E+031.25E+041.49E+021.07E+042.10E+051.78E+06 + 94L1 33.104.05E-014.06E+011.11E+031.16E+041.04E+026.13E+031.11E+051.06E+06 + 94L1 36.003.50E-012.78E+018.15E+029.67E+038.08E+014.18E+037.14E+047.10E+05 + 94L1 42.002.66E-011.38E+014.39E+026.00E+035.12E+012.08E+033.19E+043.27E+05 + 94L1 50.001.91E-016.28E+002.07E+023.03E+033.06E+019.58E+021.29E+041.30E+05 + 94L1 62.001.25E-012.42E+007.79E+011.15E+031.63E+013.73E+024.27E+034.02E+04 + 94L1 75.008.52E-021.08E+003.22E+014.60E+029.32E+001.65E+021.63E+031.41E+04 + 94L1 92.005.55E-024.86E-011.25E+011.66E+025.14E+006.96E+015.87E+024.54E+03 + 94L1 105.004.19E-023.02E-016.80E+008.49E+013.50E+004.03E+013.07E+022.19E+03 + 94L1 122.003.04E-021.83E-013.47E+003.98E+012.27E+002.19E+011.49E+029.66E+02 + 94L1 145.002.09E-021.09E-011.64E+001.68E+011.38E+001.10E+016.55E+013.80E+02 + 94L1 170.001.48E-026.99E-028.51E-017.70E+008.77E-015.94E+003.13E+011.64E+02 + 94L1 235.007.40E-033.10E-022.49E-011.70E+003.51E-011.76E+007.36E+003.09E+01 + 94L1 320.003.91E-031.53E-028.78E-024.55E-011.48E-015.85E-011.99E+006.84E+00 + 94L1 410.002.39E-039.01E-034.14E-021.74E-017.50E-022.52E-017.37E-012.17E+00 + 94L1 520.001.52E-035.53E-032.13E-027.43E-023.93E-021.17E-012.98E-017.69E-01 + 94L1 750.007.90E-042.71E-038.36E-032.29E-021.47E-023.79E-028.17E-021.75E-01 + 94L11000.004.84E-041.58E-034.27E-031.01E-026.85E-031.65E-023.20E-026.05E-02 + 94L11500.002.48E-047.56E-041.76E-033.54E-032.34E-035.47E-039.50E-031.57E-02 + 94L2 23.261.59E+006.72E+035.47E+055.75E+063.47E+011.11E+037.91E+031.05E+04 + 94L2 23.961.48E+005.82E+034.65E+055.43E+063.17E+019.98E+027.88E+031.74E+04 + 94L2 25.261.29E+004.49E+033.47E+054.69E+062.72E+018.23E+027.51E+032.78E+04 + 94L2 28.469.53E-012.52E+031.80E+052.98E+061.91E+015.33E+025.97E+033.89E+04 + 94L2 32.266.86E-011.38E+038.97E+041.66E+061.32E+013.37E+024.23E+033.66E+04 + 94L2 36.005.12E-018.12E+024.88E+049.49E+059.55E+002.25E+022.97E+032.95E+04 + 94L2 42.003.37E-013.89E+022.08E+044.11E+056.07E+001.28E+021.72E+031.88E+04 + 94L2 50.002.09E-011.70E+027.90E+031.53E+053.65E+006.73E+018.89E+021.00E+04 + 94L2 62.001.14E-016.18E+012.41E+034.34E+041.95E+003.06E+013.78E+024.14E+03 + 94L2 75.006.67E-022.55E+018.51E+021.40E+041.13E+001.53E+011.73E+021.78E+03 + 94L2 92.003.72E-029.99E+002.81E+024.12E+036.28E-017.27E+007.40E+016.94E+02 + 94L2 105.002.55E-025.49E+001.38E+021.87E+034.31E-014.52E+004.26E+013.73E+02 + 94L2 122.001.66E-022.80E+006.22E+017.64E+022.81E-012.64E+002.27E+011.83E+02 + 94L2 145.001.01E-021.30E+002.51E+012.75E+021.73E-011.43E+001.10E+017.99E+01 + 94L2 170.006.43E-036.52E-011.10E+011.08E+021.11E-018.19E-015.70E+003.74E+01 + 94L2 235.002.58E-031.65E-012.14E+001.69E+014.51E-022.68E-011.51E+008.05E+00 + 94L2 320.001.10E-034.65E-024.78E-013.06E+001.92E-029.46E-024.38E-011.92E+00 + 94L2 410.005.69E-041.75E-021.50E-018.21E-019.77E-034.18E-021.67E-016.30E-01 + 94L2 520.003.07E-047.11E-035.19E-022.45E-015.11E-031.95E-026.79E-022.24E-01 + 94L2 750.001.23E-041.90E-031.10E-024.23E-021.88E-036.20E-031.80E-024.89E-02 + 94L21000.006.12E-057.15E-043.54E-031.18E-028.60E-042.60E-036.65E-031.59E-02 + 94L21500.002.40E-051.97E-048.02E-042.25E-032.82E-047.94E-041.76E-033.62E-03 + 94L3 19.053.84E+001.78E+041.90E+062.72E+073.10E+005.00E+043.39E+072.74E+09 + 94L3 19.753.47E+001.48E+041.53E+062.40E+072.78E+004.17E+042.66E+072.09E+09 + 94L3 21.052.89E+001.08E+041.05E+061.85E+072.28E+003.04E+041.73E+071.28E+09 + 94L3 24.251.92E+005.28E+034.50E+059.34E+061.48E+001.50E+046.69E+064.40E+08 + 94L3 28.051.26E+002.54E+031.89E+054.20E+069.50E-017.26E+032.53E+061.47E+08 + 94L3 36.005.97E-017.25E+024.25E+049.54E+054.43E-012.10E+034.86E+052.26E+07 + 94L3 42.003.74E-013.35E+021.70E+043.65E+052.77E-019.73E+021.77E+057.19E+06 + 94L3 50.002.19E-011.40E+025.99E+031.21E+051.63E-014.09E+025.68E+041.99E+06 + 94L3 62.001.12E-014.78E+011.67E+033.00E+048.50E-021.41E+021.42E+044.13E+05 + 94L3 75.006.17E-021.85E+015.38E+028.62E+034.78E-025.46E+014.24E+031.05E+05 + 94L3 92.003.23E-026.72E+001.61E+022.25E+032.58E-021.99E+011.17E+032.44E+04 + 94L3 105.002.13E-023.50E+007.36E+019.39E+021.74E-021.03E+015.17E+029.63E+03 + 94L3 122.001.32E-021.67E+003.05E+013.49E+021.11E-024.93E+002.05E+023.39E+03 + 94L3 145.007.65E-037.19E-011.11E+011.12E+026.62E-032.10E+007.19E+011.04E+03 + 94L3 170.004.63E-033.32E-014.41E+003.93E+014.13E-039.63E-012.77E+013.53E+02 + 94L3 235.001.69E-036.99E-026.86E-014.80E+001.59E-031.98E-014.13E+004.14E+01 + 94L3 320.006.55E-041.63E-021.21E-016.74E-016.43E-044.42E-027.07E-015.75E+00 + 94L3 410.003.12E-045.22E-033.12E-021.46E-013.15E-041.34E-021.78E-011.24E+00 + 94L3 520.001.57E-041.80E-038.86E-033.58E-021.60E-044.36E-034.86E-022.96E-01 + 94L3 750.005.66E-053.79E-041.41E-034.63E-035.80E-058.00E-046.98E-033.55E-02 + 94L31000.002.69E-051.21E-043.68E-041.05E-032.70E-052.24E-041.59E-037.18E-03 + 94L31500.001.01E-052.79E-056.67E-051.57E-049.95E-064.27E-052.15E-048.26E-04 + 94M1 6.931.18E+009.82E+035.72E+057.38E+062.64E+033.14E+068.18E+085.14E+10 + 94M1 7.931.03E+005.54E+033.29E+056.20E+061.76E+031.62E+063.42E+082.07E+10 + 94M1 9.937.84E-012.13E+031.29E+053.07E+069.00E+025.41E+058.14E+074.43E+09 + 94M1 13.934.81E-015.03E+023.06E+048.24E+053.28E+021.05E+059.72E+064.32E+08 + 94M1 20.932.45E-018.70E+015.03E+031.39E+059.73E+011.50E+048.06E+052.67E+07 + 94M1 29.001.35E-012.09E+011.12E+032.92E+043.69E+013.24E+031.16E+052.97E+06 + 94M1 44.006.04E-023.36E+001.55E+023.51E+031.07E+014.78E+021.06E+041.92E+05 + 94M1 56.003.70E-021.18E+004.85E+019.85E+025.28E+001.62E+022.76E+034.09E+04 + 94M1 74.002.06E-023.67E-011.26E+012.21E+022.33E+004.78E+016.11E+027.16E+03 + 94M1 107.009.33E-038.92E-022.19E+003.06E+017.97E-011.00E+018.95E+017.70E+02 + 94M1 155.004.17E-032.63E-024.12E-014.38E+002.74E-012.23E+001.43E+019.09E+01 + 94M1 285.001.14E-035.17E-033.75E-022.33E-014.90E-022.23E-018.82E-013.52E+00 + 94M1 500.003.81E-041.48E-036.28E-032.40E-021.05E-023.29E-028.97E-022.47E-01 + 94M2 6.542.53E+009.12E+056.97E+087.01E+103.99E+021.19E+058.07E+061.08E+08 + 94M2 7.542.16E+004.50E+052.78E+082.67E+102.61E+026.28E+044.05E+068.65E+07 + 94M2 9.541.56E+001.41E+056.16E+075.33E+091.29E+022.20E+041.28E+063.68E+07 + 94M2 13.548.50E-012.51E+046.79E+064.81E+084.55E+014.78E+032.27E+057.18E+06 + 94M2 20.543.63E-013.27E+035.20E+052.79E+071.32E+018.16E+022.95E+048.40E+05 + 94M2 29.001.65E-016.14E+026.51E+042.72E+064.79E+001.97E+025.59E+031.34E+05 + 94M2 44.005.95E-028.35E+015.60E+031.71E+051.41E+003.72E+017.74E+021.44E+04 + 94M2 56.003.19E-022.68E+011.39E+033.53E+047.01E-011.45E+012.52E+023.98E+03 + 94M2 74.001.52E-027.31E+002.88E+025.85E+033.14E-014.98E+006.99E+019.09E+02 + 94M2 107.005.59E-031.36E+003.75E+015.70E+021.10E-011.25E+001.33E+011.32E+02 + 94M2 155.002.02E-032.63E-015.16E+005.88E+013.86E-023.26E-012.61E+001.98E+01 + 94M2 285.003.82E-042.01E-022.35E-011.70E+007.12E-033.90E-022.02E-019.99E-01 + 94M2 500.008.77E-052.23E-031.71E-028.50E-021.53E-036.08E-032.22E-027.67E-02 + 94M3 5.569.39E+002.39E+062.12E+092.38E+113.35E+016.94E+065.45E+105.07E+13 + 94M3 6.567.00E+001.04E+067.11E+087.33E+102.03E+013.04E+061.73E+101.23E+13 + 94M3 8.564.17E+002.74E+051.25E+081.10E+109.09E+008.03E+052.76E+091.28E+12 + 94M3 12.561.81E+004.00E+041.05E+077.22E+082.84E+001.18E+051.99E+085.18E+10 + 94M3 19.566.23E-014.33E+036.32E+053.18E+077.42E-011.30E+049.73E+061.37E+09 + 94M3 29.002.22E-016.01E+025.41E+042.03E+062.25E-011.82E+036.87E+055.87E+07 + 94M3 44.006.96E-027.47E+014.17E+031.14E+056.39E-022.28E+024.35E+042.28E+06 + 94M3 56.003.46E-022.24E+019.61E+022.17E+043.09E-026.88E+019.03E+033.63E+05 + 94M3 74.001.52E-025.62E+001.79E+023.22E+031.34E-021.73E+011.51E+034.52E+04 + 94M3 107.004.96E-039.11E-011.98E+012.65E+024.45E-032.78E+001.48E+023.10E+03 + 94M3 155.001.59E-031.49E-012.23E+002.21E+011.49E-034.47E-011.52E+012.29E+02 + 94M3 285.002.49E-048.06E-036.77E-024.17E-012.49E-042.28E-024.21E-013.91E+00 + 94M3 500.004.81E-056.16E-043.17E-031.33E-024.99E-051.54E-031.82E-021.18E-01 + 94M4 4.972.37E+016.96E+041.72E+091.23E+131.02E+012.30E+058.62E+083.37E+11 + 94M4 5.971.37E+012.75E+044.74E+082.48E+125.66E+009.19E+042.50E+088.49E+10 + 94M4 7.975.55E+006.39E+036.24E+072.02E+112.23E+002.16E+043.61E+079.70E+09 + 94M4 11.971.46E+008.23E+023.60E+066.10E+095.89E-012.81E+032.44E+064.65E+08 + 94M4 18.972.94E-018.13E+011.42E+051.22E+081.27E-012.78E+021.21E+051.54E+07 + 94M4 29.006.25E-029.64E+007.29E+033.50E+063.03E-023.30E+017.95E+036.93E+05 + 94M4 44.001.30E-021.19E+004.00E+021.13E+057.22E-034.08E+005.74E+023.44E+04 + 94M4 56.005.10E-033.55E-017.52E+011.58E+043.11E-031.22E+001.28E+026.19E+03 + 94M4 74.001.71E-038.80E-021.11E+011.67E+031.16E-033.02E-012.30E+018.68E+02 + 94M4 107.003.97E-041.40E-029.05E-018.99E+013.11E-044.82E-022.46E+006.71E+01 + 94M4 155.009.08E-052.25E-037.69E-025.07E+008.12E-057.68E-032.70E-015.38E+00 + 94M4 285.008.17E-061.18E-041.57E-035.32E-028.65E-063.86E-047.86E-039.61E-02 + 94M4 500.009.36E-078.60E-065.68E-051.01E-031.07E-062.54E-053.36E-042.77E-03 + 94M5 4.773.66E+015.92E+044.13E+092.26E+135.78E+001.12E+045.14E+091.25E+14 + 94M5 5.772.05E+012.23E+041.09E+094.26E+123.14E+004.34E+031.36E+092.28E+13 + 94M5 7.777.94E+004.89E+031.34E+083.18E+111.20E+009.85E+021.70E+081.61E+12 + 94M5 11.771.97E+005.89E+027.25E+068.72E+093.10E-011.24E+029.31E+064.04E+10 + 94M5 18.773.77E-015.49E+012.71E+051.60E+086.65E-021.22E+013.57E+056.59E+08 + 94M5 29.007.48E-026.00E+001.26E+044.02E+061.55E-021.41E+001.71E+041.47E+07 + 94M5 44.001.50E-027.13E-016.68E+021.22E+053.74E-031.81E-019.32E+024.03E+05 + 94M5 56.005.78E-032.07E-011.22E+021.64E+041.63E-035.55E-021.73E+025.14E+04 + 94M5 74.001.90E-034.94E-021.72E+011.64E+036.19E-041.44E-022.49E+014.88E+03 + 94M5 107.004.31E-047.43E-031.30E+008.01E+011.70E-042.46E-031.91E+002.27E+02 + 94M5 155.009.68E-051.12E-039.83E-023.98E+004.59E-054.34E-041.47E-011.10E+01 + 94M5 285.008.66E-065.49E-051.52E-033.15E-025.37E-062.77E-052.23E-038.76E-02 + 94M5 500.001.10E-064.07E-063.85E-054.22E-047.87E-072.56E-065.13E-051.20E-03 + 94N+ 50.005.46E-023.36E+012.10E+039.39E+043.15E+001.66E+021.07E+045.23E+05 + 94N+ 70.002.24E-026.65E+002.82E+028.11E+031.17E+003.57E+011.32E+034.08E+04 + 94N+ 100.008.90E-031.25E+003.60E+016.87E+024.17E-017.46E+001.58E+023.08E+03 + 94N+ 150.003.13E-031.95E-013.75E+004.74E+011.29E-011.35E+001.59E+011.91E+02 + 94N+ 200.001.52E-035.51E-028.01E-017.80E+005.68E-024.22E-013.45E+002.97E+01 + 94N+ 500.001.89E-041.63E-031.02E-024.80E-024.49E-031.53E-025.06E-021.77E-01 + 95K 126.032.34E-011.49E-012.93E-021.27E-031.27E+015.13E+014.36E+018.71E+00 + 95K 126.732.31E-011.52E-013.47E-022.61E-031.25E+015.03E+014.40E+011.02E+01 + 95K 128.032.26E-011.57E-014.50E-026.12E-031.21E+014.87E+014.48E+011.30E+01 + 95K 131.232.13E-011.67E-017.10E-022.04E-021.13E+014.49E+014.60E+011.97E+01 + 95K 135.032.00E-011.76E-011.02E-014.71E-021.04E+014.08E+014.64E+012.69E+01 + 95K 139.001.87E-011.82E-011.33E-018.41E-029.57E+003.71E+014.61E+013.33E+01 + 95K 145.001.70E-011.87E-011.75E-011.52E-018.49E+003.23E+014.46E+014.08E+01 + 95K 153.001.51E-011.89E-012.20E-012.50E-017.29E+002.70E+014.15E+014.68E+01 + 95K 165.001.27E-011.83E-012.67E-013.89E-015.88E+002.11E+013.60E+014.98E+01 + 95K 178.001.07E-011.72E-012.94E-015.06E-014.75E+001.64E+013.03E+014.80E+01 + 95K 195.008.69E-021.56E-013.04E-015.98E-013.67E+001.22E+012.39E+014.24E+01 + 95K 208.007.51E-021.43E-012.99E-016.30E-013.06E+009.87E+002.00E+013.74E+01 + 95K 225.006.30E-021.28E-012.85E-016.37E-012.45E+007.65E+001.59E+013.11E+01 + 95K 248.005.09E-021.10E-012.59E-016.09E-011.87E+005.59E+001.18E+012.40E+01 + 95K 275.004.06E-029.25E-022.28E-015.52E-011.40E+004.02E+008.54E+001.77E+01 + 95K 340.002.59E-026.41E-021.64E-014.04E-017.83E-012.06E+004.32E+008.95E+00 + 95K 425.001.64E-024.33E-021.11E-012.66E-014.26E-011.04E+002.10E+004.21E+00 + 95K 520.001.11E-023.03E-027.59E-021.75E-012.47E-015.73E-011.10E+002.12E+00 + 95K 630.007.76E-032.17E-025.27E-021.16E-011.48E-013.29E-016.07E-011.11E+00 + 95K 860.004.45E-031.27E-022.90E-025.86E-026.46E-021.38E-012.39E-014.03E-01 + 95K 1150.002.71E-037.69E-031.67E-023.14E-023.00E-026.38E-021.05E-011.65E-01 + 95K 1400.001.95E-035.47E-031.15E-022.07E-021.78E-023.84E-026.12E-029.30E-02 + 95K 1650.001.49E-034.10E-038.42E-031.47E-021.15E-022.53E-023.97E-025.87E-02 + 95L1 24.776.34E-011.60E+022.11E+033.04E+032.72E+022.58E+045.47E+052.81E+06 + 95L1 25.476.08E-011.42E+022.10E+035.02E+032.50E+022.27E+044.73E+052.70E+06 + 95L1 26.775.63E-011.14E+021.98E+038.01E+032.16E+021.80E+043.64E+052.41E+06 + 95L1 29.974.72E-016.95E+011.54E+031.12E+041.54E+021.07E+042.02E+051.65E+06 + 95L1 33.773.88E-014.09E+011.06E+031.06E+041.08E+026.18E+031.08E+059.93E+05 + 95L1 37.003.32E-012.72E+017.63E+028.75E+038.26E+014.08E+036.72E+046.47E+05 + 95L1 43.002.54E-011.39E+014.20E+025.53E+035.30E+012.07E+033.07E+043.05E+05 + 95L1 51.001.84E-016.47E+002.02E+022.86E+033.20E+019.68E+021.27E+041.24E+05 + 95L1 63.001.22E-012.56E+007.82E+011.12E+031.72E+013.84E+024.28E+033.93E+04 + 95L1 76.008.35E-021.16E+003.30E+014.57E+029.94E+001.71E+021.66E+031.40E+04 + 95L1 93.005.49E-025.27E-011.30E+011.68E+025.52E+007.32E+016.06E+024.59E+03 + 95L1 106.004.16E-023.28E-017.19E+008.73E+013.78E+004.26E+013.19E+022.24E+03 + 95L1 123.003.03E-021.99E-013.70E+004.14E+012.46E+002.33E+011.56E+029.95E+02 + 95L1 146.002.09E-021.17E-011.77E+001.76E+011.50E+001.18E+016.90E+013.96E+02 + 95L1 175.001.42E-027.06E-028.39E-017.32E+008.95E-015.83E+002.99E+011.52E+02 + 95L1 240.007.27E-033.18E-022.54E-011.70E+003.66E-011.79E+007.31E+003.01E+01 + 95L1 325.003.91E-031.59E-029.14E-024.68E-011.57E-016.08E-012.03E+006.88E+00 + 95L1 410.002.47E-039.62E-034.50E-021.89E-018.29E-022.76E-018.02E-012.35E+00 + 95L1 520.001.58E-035.91E-032.30E-028.07E-024.34E-021.28E-013.25E-018.32E-01 + 95L1 750.008.24E-042.89E-039.01E-032.48E-021.62E-024.15E-028.88E-021.89E-01 + 95L11000.005.06E-041.69E-034.59E-031.09E-027.54E-031.81E-023.48E-026.56E-02 + 95L11500.002.60E-048.06E-041.90E-033.81E-032.57E-035.98E-031.03E-021.70E-02 + 95L2 23.941.51E+006.36E+034.96E+055.02E+063.57E+011.08E+037.36E+039.32E+03 + 95L2 24.641.41E+005.53E+034.23E+054.75E+063.28E+019.71E+027.34E+031.54E+04 + 95L2 25.941.23E+004.30E+033.19E+054.13E+062.82E+018.05E+027.03E+032.47E+04 + 95L2 29.149.19E-012.45E+031.68E+052.67E+062.00E+015.28E+025.66E+033.50E+04 + 95L2 32.946.68E-011.36E+038.54E+041.52E+061.39E+013.38E+024.06E+033.36E+04 + 95L2 37.004.91E-017.77E+024.49E+048.44E+059.89E+002.21E+022.81E+032.69E+04 + 95L2 43.003.27E-013.79E+021.96E+043.75E+056.37E+001.27E+021.65E+031.75E+04 + 95L2 51.002.05E-011.69E+027.62E+031.43E+053.87E+006.80E+018.69E+029.48E+03 + 95L2 63.001.14E-016.26E+012.38E+034.17E+042.10E+003.14E+013.76E+024.01E+03 + 95L2 76.006.71E-022.62E+018.55E+021.37E+041.22E+001.59E+011.75E+021.76E+03 + 95L2 93.003.78E-021.04E+012.87E+024.12E+036.85E-017.65E+007.60E+016.97E+02 + 95L2 106.002.61E-025.75E+001.42E+021.89E+034.72E-014.78E+004.41E+013.78E+02 + 95L2 123.001.70E-022.96E+006.46E+017.81E+023.10E-012.81E+002.37E+011.87E+02 + 95L2 146.001.05E-021.39E+002.63E+012.84E+021.91E-011.53E+001.16E+018.27E+01 + 95L2 175.006.26E-036.31E-011.03E+019.87E+011.15E-018.14E-015.48E+003.49E+01 + 95L2 240.002.59E-031.66E-012.11E+001.63E+014.80E-022.75E-011.51E+007.88E+00 + 95L2 325.001.13E-034.82E-024.86E-013.06E+002.08E-029.93E-024.51E-011.95E+00 + 95L2 410.006.11E-041.93E-021.65E-018.95E-011.10E-024.64E-021.83E-016.87E-01 + 95L2 520.003.30E-047.86E-035.71E-022.68E-015.78E-032.16E-027.47E-022.45E-01 + 95L2 750.001.33E-042.10E-031.22E-024.65E-022.13E-036.92E-031.99E-025.38E-02 + 95L21000.006.65E-057.93E-043.91E-031.30E-029.74E-042.91E-037.38E-031.75E-02 + 95L21500.002.61E-052.19E-048.91E-042.50E-033.19E-048.91E-041.96E-034.01E-03 + 95L3 19.503.67E+001.70E+041.75E+062.42E+073.04E+004.92E+043.22E+072.53E+09 + 95L3 20.203.32E+001.42E+041.42E+062.15E+072.73E+004.12E+042.54E+071.94E+09 + 95L3 21.502.77E+001.04E+049.75E+051.67E+072.25E+003.02E+041.67E+071.20E+09 + 95L3 24.701.86E+005.17E+034.26E+058.55E+061.47E+001.51E+046.58E+064.22E+08 + 95L3 28.501.23E+002.52E+031.81E+053.91E+069.53E-017.42E+032.53E+061.44E+08 + 95L3 37.005.64E-016.79E+023.82E+048.31E+054.30E-012.02E+034.50E+052.03E+07 + 95L3 43.003.58E-013.20E+021.56E+043.26E+052.72E-019.57E+021.68E+056.66E+06 + 95L3 51.002.12E-011.36E+025.64E+031.10E+051.62E-014.10E+025.54E+041.89E+06 + 95L3 63.001.10E-014.74E+011.60E+032.81E+048.53E-021.44E+021.42E+044.05E+05 + 95L3 76.006.11E-021.86E+015.27E+028.25E+034.84E-025.66E+014.31E+031.05E+05 + 95L3 93.003.23E-026.85E+001.60E+022.19E+032.63E-022.08E+011.21E+032.49E+04 + 95L3 106.002.14E-023.59E+007.38E+019.24E+021.78E-021.09E+015.38E+029.91E+03 + 95L3 123.001.33E-021.73E+003.08E+013.46E+021.14E-025.23E+002.16E+023.52E+03 + 95L3 146.007.77E-037.47E-011.13E+011.12E+026.83E-032.25E+007.61E+011.08E+03 + 95L3 175.004.39E-033.09E-013.95E+003.42E+013.99E-039.22E-012.57E+013.19E+02 + 95L3 240.001.64E-036.79E-026.47E-014.41E+001.57E-031.97E-014.03E+003.96E+01 + 95L3 325.006.52E-041.63E-021.18E-016.46E-016.47E-044.52E-027.12E-015.72E+00 + 95L3 410.003.26E-045.59E-033.32E-021.55E-013.31E-041.48E-021.95E-011.36E+00 + 95L3 520.001.64E-041.93E-039.41E-033.79E-021.68E-044.79E-035.34E-023.24E-01 + 95L3 750.005.93E-054.04E-041.50E-034.92E-036.09E-058.76E-047.66E-033.88E-02 + 95L31000.002.80E-051.28E-043.91E-041.12E-032.83E-052.44E-041.75E-037.85E-03 + 95L31500.001.05E-052.94E-057.07E-051.67E-041.04E-054.61E-052.35E-049.02E-04 + 95M1 7.121.12E+009.66E+035.54E+056.80E+062.70E+033.06E+067.68E+084.67E+10 + 95M1 8.129.76E-015.52E+033.23E+055.84E+061.83E+031.61E+063.29E+081.92E+10 + 95M1 10.127.49E-012.17E+031.29E+052.98E+069.45E+025.50E+058.05E+074.27E+09 + 95M1 14.124.65E-015.24E+023.11E+048.21E+053.50E+021.10E+059.95E+064.32E+08 + 95M1 21.122.40E-019.29E+015.22E+031.41E+051.05E+021.60E+048.48E+052.76E+07 + 95M1 29.001.35E-012.34E+011.22E+033.11E+044.10E+013.61E+031.29E+053.27E+06 + 95M1 44.006.06E-023.80E+001.70E+023.78E+031.19E+015.30E+021.17E+042.11E+05 + 95M1 56.003.73E-021.34E+005.33E+011.07E+035.87E+001.80E+023.05E+034.49E+04 + 95M1 74.002.09E-024.18E-011.40E+012.41E+022.59E+005.29E+016.73E+027.85E+03 + 95M1 107.009.48E-031.01E-012.44E+003.35E+018.85E-011.11E+019.84E+018.43E+02 + 95M1 155.004.26E-032.92E-024.61E-014.84E+003.04E-012.46E+001.57E+019.93E+01 + 95M1 285.001.18E-035.60E-034.15E-022.58E-015.44E-022.46E-019.65E-013.84E+00 + 95M1 500.003.96E-041.59E-036.86E-032.63E-021.16E-023.61E-029.80E-022.69E-01 + 95M2 6.712.40E+008.80E+056.50E+086.36E+104.16E+021.19E+057.75E+061.00E+08 + 95M2 7.712.06E+004.42E+052.65E+082.48E+102.75E+026.33E+043.95E+068.12E+07 + 95M2 9.711.50E+001.41E+056.05E+075.11E+091.38E+022.26E+041.28E+063.55E+07 + 95M2 13.718.33E-012.59E+046.88E+064.77E+084.95E+015.02E+032.33E+057.15E+06 + 95M2 20.713.62E-013.44E+035.41E+052.86E+071.46E+018.71E+023.09E+048.60E+05 + 95M2 29.001.69E-016.73E+027.10E+042.94E+065.40E+002.18E+026.08E+031.44E+05 + 95M2 44.006.14E-029.16E+016.10E+031.85E+051.59E+004.10E+018.42E+021.55E+04 + 95M2 56.003.31E-022.94E+011.52E+033.81E+047.92E-011.60E+012.74E+024.29E+03 + 95M2 74.001.59E-028.03E+003.14E+026.33E+033.55E-015.50E+007.62E+019.81E+02 + 95M2 107.005.87E-031.50E+004.09E+016.18E+021.24E-011.39E+001.45E+011.43E+02 + 95M2 155.002.13E-032.90E-015.65E+006.40E+014.37E-023.61E-012.86E+002.15E+01 + 95M2 285.004.08E-042.22E-022.59E-011.86E+008.06E-034.33E-022.22E-011.09E+00 + 95M2 500.009.46E-052.47E-031.89E-029.35E-021.74E-036.78E-032.45E-028.43E-02 + 95M3 5.679.12E+002.34E+062.01E+092.21E+113.34E+017.00E+065.35E+104.88E+13 + 95M3 6.676.83E+001.04E+066.88E+086.94E+102.04E+013.11E+061.74E+101.21E+13 + 95M3 8.674.10E+002.78E+051.24E+081.07E+109.24E+008.39E+052.84E+091.31E+12 + 95M3 12.671.80E+004.14E+041.07E+077.20E+082.93E+001.26E+052.10E+085.45E+10 + 95M3 19.676.26E-014.55E+036.54E+053.24E+077.72E-011.40E+041.05E+071.48E+09 + 95M3 29.002.27E-016.49E+025.79E+042.15E+062.38E-012.02E+037.69E+056.58E+07 + 95M3 44.007.16E-028.07E+014.45E+031.20E+056.76E-022.54E+024.86E+042.55E+06 + 95M3 56.003.57E-022.43E+011.03E+032.29E+043.27E-027.65E+011.01E+044.05E+05 + 95M3 74.001.57E-026.08E+001.91E+023.40E+031.42E-021.92E+011.68E+035.04E+04 + 95M3 107.005.14E-039.84E-012.11E+012.80E+024.71E-033.09E+001.64E+023.44E+03 + 95M3 155.001.65E-031.61E-012.38E+002.34E+011.57E-034.97E-011.69E+012.54E+02 + 95M3 285.002.60E-048.69E-037.23E-024.42E-012.64E-042.53E-024.66E-014.32E+00 + 95M3 500.005.04E-056.63E-043.38E-031.41E-025.27E-051.70E-032.02E-021.30E-01 + 95M4 5.092.27E+016.68E+041.58E+091.10E+131.00E+012.29E+058.20E+083.11E+11 + 95M4 6.091.32E+012.70E+044.48E+082.30E+125.64E+009.30E+042.45E+088.09E+10 + 95M4 8.095.47E+006.43E+036.11E+071.96E+112.25E+002.24E+043.65E+079.61E+09 + 95M4 12.091.46E+008.50E+023.65E+066.19E+096.07E-012.99E+032.55E+064.78E+08 + 95M4 19.093.00E-018.56E+011.48E+051.28E+081.33E-013.02E+021.30E+051.63E+07 + 95M4 29.006.57E-021.05E+017.96E+033.87E+063.24E-023.71E+018.87E+037.68E+05 + 95M4 44.001.37E-021.30E+004.36E+021.24E+057.74E-034.58E+006.40E+023.81E+04 + 95M4 56.005.40E-033.88E-018.22E+011.74E+043.34E-031.37E+001.43E+026.85E+03 + 95M4 74.001.82E-039.62E-021.21E+011.85E+031.25E-033.40E-012.57E+019.63E+02 + 95M4 107.004.24E-041.53E-029.89E-019.93E+013.35E-045.41E-022.74E+007.44E+01 + 95M4 155.009.72E-052.47E-038.41E-025.60E+008.77E-058.63E-033.02E-015.97E+00 + 95M4 285.008.77E-061.30E-041.72E-035.88E-029.37E-064.34E-048.78E-031.07E-01 + 95M4 500.001.00E-069.48E-066.22E-051.12E-031.16E-062.85E-053.76E-043.09E-03 + 95M5 4.893.50E+015.55E+043.86E+092.04E+135.67E+001.08E+044.94E+091.16E+14 + 95M5 5.891.98E+012.14E+041.04E+093.99E+123.12E+004.25E+031.34E+092.20E+13 + 95M5 7.897.82E+004.80E+031.34E+083.10E+111.21E+009.88E+021.74E+081.62E+12 + 95M5 11.891.98E+005.93E+027.47E+068.88E+093.18E-011.28E+029.84E+064.24E+10 + 95M5 18.893.85E-015.63E+012.86E+051.68E+086.91E-021.27E+013.87E+057.13E+08 + 95M5 29.007.83E-026.34E+001.39E+044.42E+061.64E-021.52E+001.93E+041.68E+07 + 95M5 44.001.57E-027.55E-017.37E+021.34E+053.98E-031.94E-011.05E+034.58E+05 + 95M5 56.006.09E-032.19E-011.35E+021.80E+041.74E-035.98E-021.96E+025.84E+04 + 95M5 74.002.01E-035.24E-021.90E+011.80E+036.60E-041.55E-022.81E+015.54E+03 + 95M5 107.004.57E-047.91E-031.43E+008.80E+011.81E-042.65E-032.16E+002.57E+02 + 95M5 155.001.03E-041.20E-031.08E-014.38E+004.90E-054.66E-041.65E-011.24E+01 + 95M5 285.009.27E-065.87E-051.67E-033.46E-025.74E-062.98E-052.51E-039.87E-02 + 95M5 500.001.18E-064.36E-064.22E-054.63E-048.42E-072.75E-065.73E-051.34E-03 + 95N+ 50.005.67E-023.72E+012.32E+031.04E+053.55E+001.87E+021.22E+045.97E+05 + 95N+ 70.002.33E-027.37E+003.11E+028.94E+031.32E+004.01E+011.49E+034.63E+04 + 95N+ 100.009.28E-031.39E+003.97E+017.56E+024.69E-018.36E+001.78E+023.48E+03 + 95N+ 150.003.28E-032.17E-014.14E+005.22E+011.46E-011.51E+001.79E+012.14E+02 + 95N+ 200.001.59E-036.12E-028.87E-018.60E+006.39E-024.71E-013.86E+003.33E+01 + 95N+ 500.001.99E-041.81E-031.14E-025.34E-025.03E-031.71E-025.62E-021.96E-01 + 96K 129.272.23E-011.39E-012.75E-021.18E-031.29E+015.00E+014.11E+017.97E+00 + 96K 129.972.20E-011.41E-013.24E-022.39E-031.27E+014.90E+014.14E+019.30E+00 + 96K 131.272.15E-011.46E-014.18E-025.56E-031.23E+014.75E+014.22E+011.18E+01 + 96K 134.472.04E-011.56E-016.57E-021.84E-021.15E+014.39E+014.33E+011.78E+01 + 96K 138.271.91E-011.64E-019.41E-024.23E-021.06E+014.00E+014.38E+012.43E+01 + 96K 142.001.80E-011.70E-011.21E-017.34E-029.85E+003.67E+014.36E+012.98E+01 + 96K 148.001.64E-011.76E-011.60E-011.34E-018.75E+003.20E+014.24E+013.68E+01 + 96K 156.001.46E-011.78E-012.04E-012.24E-017.54E+002.70E+013.96E+014.27E+01 + 96K 168.001.23E-011.74E-012.50E-013.54E-016.11E+002.11E+013.47E+014.60E+01 + 96K 181.001.04E-011.65E-012.78E-014.67E-014.95E+001.66E+012.94E+014.48E+01 + 96K 198.008.53E-021.50E-012.90E-015.59E-013.84E+001.24E+012.35E+014.00E+01 + 96K 211.007.40E-021.39E-012.88E-015.95E-013.21E+001.00E+011.97E+013.56E+01 + 96K 228.006.23E-021.25E-012.76E-016.07E-012.58E+007.82E+001.58E+012.99E+01 + 96K 251.005.05E-021.08E-012.54E-015.87E-011.98E+005.75E+001.18E+012.33E+01 + 96K 280.003.99E-029.08E-022.23E-015.33E-011.46E+004.06E+008.41E+001.70E+01 + 96K 345.002.57E-026.39E-021.63E-013.97E-018.21E-012.11E+004.32E+008.76E+00 + 96K 430.001.65E-024.37E-021.12E-012.66E-014.50E-011.08E+002.13E+004.20E+00 + 96K 520.001.14E-023.15E-027.88E-021.80E-012.69E-016.15E-011.17E+002.21E+00 + 96K 630.008.02E-032.26E-025.50E-021.20E-011.61E-013.54E-016.44E-011.16E+00 + 96K 860.004.62E-031.33E-023.05E-026.13E-027.03E-021.49E-012.55E-014.26E-01 + 96K 1150.002.81E-038.08E-031.76E-023.30E-023.25E-026.87E-021.12E-011.75E-01 + 96K 1400.002.03E-035.75E-031.21E-022.18E-021.93E-024.13E-026.54E-029.88E-02 + 96K 1650.001.55E-034.32E-038.90E-031.55E-021.24E-022.72E-024.24E-026.24E-02 + 96L1 25.525.94E-011.53E+021.93E+032.66E+032.75E+022.48E+045.04E+052.50E+06 + 96L1 26.225.71E-011.36E+021.91E+034.36E+032.54E+022.19E+044.38E+052.40E+06 + 96L1 27.525.31E-011.10E+021.82E+036.98E+032.20E+021.75E+043.40E+052.15E+06 + 96L1 30.724.47E-016.83E+011.43E+039.93E+031.59E+021.05E+041.92E+051.50E+06 + 96L1 34.523.70E-014.09E+011.00E+039.51E+031.12E+026.17E+031.04E+059.20E+05 + 96L1 38.003.14E-012.68E+017.13E+027.88E+038.45E+013.98E+036.32E+045.88E+05 + 96L1 44.002.42E-011.39E+014.01E+025.08E+035.48E+012.06E+032.95E+042.83E+05 + 96L1 52.001.77E-016.66E+001.98E+022.69E+033.35E+019.78E+021.24E+041.18E+05 + 96L1 64.001.19E-012.70E+007.85E+011.09E+031.82E+013.94E+024.29E+033.84E+04 + 96L1 77.008.18E-021.25E+003.38E+014.53E+021.06E+011.78E+021.68E+031.39E+04 + 96L1 94.005.42E-025.71E-011.36E+011.71E+025.92E+007.69E+016.24E+024.64E+03 + 96L1 107.004.13E-023.56E-017.58E+008.95E+014.07E+004.51E+013.31E+022.28E+03 + 96L1 124.003.02E-022.16E-013.94E+004.29E+012.66E+002.48E+011.63E+021.02E+03 + 96L1 147.002.10E-021.27E-011.90E+001.85E+011.63E+001.26E+017.27E+014.10E+02 + 96L1 175.001.45E-027.72E-029.26E-017.98E+009.90E-016.39E+003.24E+011.64E+02 + 96L1 240.007.46E-033.44E-022.79E-011.85E+004.05E-011.96E+007.94E+003.25E+01 + 96L1 325.004.03E-031.70E-029.98E-025.10E-011.74E-016.65E-012.21E+007.43E+00 + 96L1 410.002.56E-031.03E-024.89E-022.06E-019.16E-023.02E-018.71E-012.54E+00 + 96L1 520.001.64E-036.31E-032.49E-028.76E-024.79E-021.40E-013.53E-019.00E-01 + 96L1 750.008.60E-043.08E-039.72E-032.68E-021.79E-024.53E-029.65E-022.05E-01 + 96L11000.005.29E-041.80E-034.94E-031.17E-028.29E-031.97E-023.78E-027.10E-02 + 96L11500.002.73E-048.60E-042.04E-034.10E-032.81E-036.53E-031.12E-021.85E-02 + 96L2 24.651.43E+006.01E+034.49E+054.38E+063.68E+011.04E+036.84E+038.32E+03 + 96L2 25.351.34E+005.25E+033.85E+054.15E+063.38E+019.44E+026.83E+031.36E+04 + 96L2 26.651.18E+004.11E+032.92E+053.64E+062.92E+017.87E+026.56E+032.19E+04 + 96L2 29.858.85E-012.38E+031.57E+052.39E+062.09E+015.23E+025.34E+033.15E+04 + 96L2 33.656.49E-011.34E+038.11E+041.39E+061.47E+013.38E+023.89E+033.07E+04 + 96L2 38.004.71E-017.45E+024.15E+047.53E+051.03E+012.17E+022.65E+032.46E+04 + 96L2 44.003.18E-013.71E+021.85E+043.42E+056.69E+001.27E+021.59E+031.62E+04 + 96L2 52.002.01E-011.68E+027.35E+031.34E+054.11E+006.89E+018.50E+028.97E+03 + 96L2 64.001.13E-016.35E+012.35E+034.01E+042.25E+003.23E+013.75E+023.88E+03 + 96L2 77.006.75E-022.70E+018.60E+021.35E+041.32E+001.65E+011.77E+021.73E+03 + 96L2 94.003.84E-021.08E+012.93E+024.12E+037.48E-018.05E+007.80E+016.99E+02 + 96L2 107.002.66E-026.03E+001.47E+021.91E+035.18E-015.06E+004.56E+013.83E+02 + 96L2 124.001.75E-023.12E+006.71E+017.98E+023.41E-013.00E+002.47E+011.91E+02 + 96L2 147.001.08E-021.47E+002.76E+012.93E+022.11E-011.64E+001.22E+018.56E+01 + 96L2 175.006.62E-036.93E-011.12E+011.06E+021.30E-018.95E-015.94E+003.75E+01 + 96L2 240.002.75E-031.82E-012.30E+001.76E+015.42E-023.03E-011.64E+008.50E+00 + 96L2 325.001.21E-035.31E-025.33E-013.33E+002.35E-021.10E-014.93E-012.11E+00 + 96L2 410.006.55E-042.13E-021.81E-019.76E-011.25E-025.14E-022.01E-017.48E-01 + 96L2 520.003.55E-048.68E-036.28E-022.93E-016.54E-032.40E-028.22E-022.67E-01 + 96L2 750.001.44E-042.33E-031.34E-025.11E-022.42E-037.71E-032.20E-025.90E-02 + 96L21000.007.23E-058.80E-044.33E-031.43E-021.10E-033.25E-038.18E-031.93E-02 + 96L21500.002.85E-052.43E-049.90E-042.76E-033.61E-049.99E-042.18E-034.44E-03 + 96L3 19.973.50E+001.62E+041.60E+062.16E+072.98E+004.83E+043.05E+072.33E+09 + 96L3 20.673.17E+001.36E+041.30E+061.92E+072.68E+004.06E+042.42E+071.80E+09 + 96L3 21.972.66E+001.00E+049.05E+051.50E+072.22E+003.00E+041.60E+071.13E+09 + 96L3 25.171.80E+005.06E+034.02E+057.80E+061.47E+001.52E+046.44E+064.04E+08 + 96L3 28.971.20E+002.50E+031.74E+053.63E+069.54E-017.56E+032.52E+061.40E+08 + 96L3 38.005.34E-016.39E+023.44E+047.26E+054.17E-011.96E+034.19E+051.84E+07 + 96L3 44.003.42E-013.06E+021.44E+042.92E+052.67E-019.43E+021.60E+056.18E+06 + 96L3 52.002.05E-011.33E+025.31E+031.01E+051.61E-014.11E+025.41E+041.81E+06 + 96L3 64.001.08E-014.71E+011.54E+032.64E+048.56E-021.47E+021.42E+043.97E+05 + 96L3 77.006.05E-021.88E+015.16E+027.90E+034.90E-025.86E+014.39E+031.05E+05 + 96L3 94.003.23E-026.98E+001.59E+022.13E+032.68E-022.18E+011.25E+032.53E+04 + 96L3 107.002.14E-023.68E+007.40E+019.08E+021.82E-021.15E+015.61E+021.02E+04 + 96L3 124.001.35E-021.78E+003.11E+013.44E+021.17E-025.55E+002.27E+023.65E+03 + 96L3 147.007.88E-037.76E-011.15E+011.12E+027.05E-032.40E+008.06E+011.14E+03 + 96L3 175.004.56E-033.32E-014.19E+003.59E+014.20E-031.02E+002.83E+013.49E+02 + 96L3 240.001.71E-037.29E-026.86E-014.64E+001.65E-032.17E-014.43E+004.34E+01 + 96L3 325.006.78E-041.75E-021.25E-016.81E-016.81E-044.97E-027.83E-016.26E+00 + 96L3 410.003.41E-045.99E-033.52E-021.63E-013.48E-041.63E-022.14E-011.48E+00 + 96L3 520.001.71E-042.06E-031.00E-024.00E-021.77E-045.25E-035.86E-023.55E-01 + 96L3 750.006.19E-054.31E-041.59E-035.21E-036.39E-059.57E-048.40E-034.25E-02 + 96L31000.002.92E-051.36E-044.15E-041.19E-032.97E-052.65E-041.91E-038.57E-03 + 96L31500.001.10E-053.11E-057.49E-051.77E-041.09E-054.97E-052.57E-049.85E-04 + 96M1 7.331.05E+009.44E+035.32E+056.23E+062.76E+032.96E+067.14E+084.19E+10 + 96M1 8.339.24E-015.47E+033.14E+055.46E+061.88E+031.58E+063.12E+081.77E+10 + 96M1 10.337.13E-012.19E+031.28E+052.88E+069.88E+025.55E+057.90E+074.07E+09 + 96M1 14.334.48E-015.44E+023.15E+048.13E+053.72E+021.14E+051.01E+074.30E+08 + 96M1 21.332.34E-019.89E+015.40E+031.43E+051.14E+021.70E+048.88E+052.84E+07 + 96M1 29.001.35E-012.61E+011.32E+033.31E+044.56E+014.00E+031.43E+053.59E+06 + 96M1 44.006.09E-024.28E+001.86E+024.06E+031.33E+015.88E+021.29E+042.31E+05 + 96M1 56.003.75E-021.52E+005.86E+011.15E+036.51E+001.99E+023.36E+034.93E+04 + 96M1 74.002.11E-024.75E-011.54E+012.62E+022.88E+005.85E+017.41E+028.59E+03 + 96M1 107.009.64E-031.14E-012.71E+003.68E+019.82E-011.22E+011.08E+029.22E+02 + 96M1 155.004.36E-033.25E-025.13E-015.33E+003.38E-012.71E+001.72E+011.09E+02 + 96M1 285.001.22E-036.07E-034.59E-022.84E-016.03E-022.71E-011.06E+004.19E+00 + 96M1 500.004.11E-041.70E-037.48E-032.88E-021.28E-023.96E-021.07E-012.93E-01 + 96M2 6.942.21E+008.15E+055.72E+085.35E+104.24E+021.13E+057.03E+068.67E+07 + 96M2 7.941.92E+004.18E+052.40E+082.15E+102.84E+026.14E+043.66E+067.16E+07 + 96M2 9.941.42E+001.38E+055.69E+074.64E+091.45E+022.26E+041.22E+063.25E+07 + 96M2 13.948.05E-012.61E+046.76E+064.56E+085.31E+015.16E+032.32E+056.86E+06 + 96M2 20.943.57E-013.57E+035.51E+052.84E+071.59E+019.18E+023.17E+048.59E+05 + 96M2 29.001.73E-017.37E+027.73E+043.16E+066.09E+002.40E+026.58E+031.53E+05 + 96M2 44.006.32E-021.00E+026.64E+031.99E+051.80E+004.51E+019.14E+021.66E+04 + 96M2 56.003.43E-023.22E+011.66E+034.11E+048.94E-011.76E+012.97E+024.60E+03 + 96M2 74.001.65E-028.81E+003.42E+026.84E+034.01E-016.06E+008.28E+011.06E+03 + 96M2 107.006.15E-031.64E+004.47E+016.70E+021.40E-011.53E+001.58E+011.54E+02 + 96M2 155.002.25E-033.19E-016.18E+006.95E+014.94E-023.99E-013.13E+002.33E+01 + 96M2 285.004.36E-042.45E-022.84E-012.03E+009.14E-034.80E-022.44E-011.19E+00 + 96M2 500.001.02E-042.74E-032.09E-021.03E-011.97E-037.56E-032.71E-029.25E-02 + 96M3 5.848.59E+002.18E+061.78E+091.87E+113.23E+016.71E+064.89E+104.28E+13 + 96M3 6.846.49E+009.86E+056.26E+086.07E+102.00E+013.05E+061.64E+101.10E+13 + 96M3 8.843.95E+002.72E+051.17E+089.77E+099.20E+008.45E+052.79E+091.25E+12 + 96M3 12.841.76E+004.18E+041.05E+076.89E+082.97E+001.31E+052.15E+085.49E+10 + 96M3 19.846.22E-014.71E+036.62E+053.20E+077.94E-011.49E+041.11E+071.54E+09 + 96M3 29.002.32E-017.02E+026.18E+042.26E+062.52E-012.25E+038.60E+057.36E+07 + 96M3 44.007.34E-028.73E+014.75E+031.26E+057.14E-022.82E+025.42E+042.84E+06 + 96M3 56.003.67E-022.62E+011.09E+032.41E+043.45E-028.50E+011.12E+044.50E+05 + 96M3 74.001.62E-026.57E+002.04E+023.59E+031.50E-022.13E+011.87E+035.60E+04 + 96M3 107.005.32E-031.06E+002.25E+012.95E+024.98E-033.43E+001.83E+023.81E+03 + 96M3 155.001.72E-031.74E-012.54E+002.47E+011.66E-035.51E-011.88E+012.81E+02 + 96M3 285.002.72E-049.38E-037.72E-024.69E-012.79E-042.80E-025.16E-014.77E+00 + 96M3 500.005.30E-057.13E-043.62E-031.50E-025.56E-051.87E-032.23E-021.43E-01 + 96M4 5.222.16E+016.38E+041.44E+099.80E+129.82E+002.25E+057.75E+082.85E+11 + 96M4 6.221.28E+012.63E+044.20E+082.12E+125.60E+009.37E+042.38E+087.65E+10 + 96M4 8.225.37E+006.44E+035.95E+071.89E+112.28E+002.32E+043.67E+079.45E+09 + 96M4 12.221.46E+008.76E+023.69E+066.25E+096.24E-013.18E+032.66E+064.89E+08 + 96M4 19.223.06E-019.00E+011.54E+051.34E+081.39E-013.28E+021.38E+051.72E+07 + 96M4 29.006.90E-021.14E+018.69E+034.27E+063.47E-024.16E+019.89E+038.51E+05 + 96M4 44.001.44E-021.42E+004.76E+021.37E+058.29E-035.14E+007.13E+024.22E+04 + 96M4 56.005.72E-034.24E-018.97E+011.92E+043.58E-031.54E+001.59E+027.59E+03 + 96M4 74.001.93E-031.05E-011.32E+012.04E+031.34E-033.81E-012.86E+011.07E+03 + 96M4 107.004.51E-041.68E-021.08E+001.10E+023.61E-046.08E-023.06E+008.25E+01 + 96M4 155.001.04E-042.71E-039.18E-026.18E+009.46E-059.70E-033.36E-016.62E+00 + 96M4 285.009.49E-061.43E-041.88E-036.50E-021.01E-054.87E-049.80E-031.19E-01 + 96M4 500.001.08E-061.04E-056.81E-051.24E-031.26E-063.20E-054.20E-043.44E-03 + 96M5 5.003.35E+015.19E+043.59E+091.84E+135.54E+001.03E+044.72E+091.07E+14 + 96M5 6.001.92E+012.04E+049.99E+083.71E+123.09E+004.15E+031.32E+092.10E+13 + 96M5 8.007.69E+004.69E+031.33E+083.01E+111.22E+009.89E+021.77E+081.62E+12 + 96M5 12.001.98E+005.95E+027.67E+069.00E+093.26E-011.31E+021.04E+074.43E+10 + 96M5 19.003.92E-015.76E+013.02E+051.75E+087.17E-021.33E+014.17E+057.70E+08 + 96M5 29.008.20E-026.71E+001.53E+044.86E+061.74E-021.63E+002.18E+041.91E+07 + 96M5 44.001.66E-027.99E-018.12E+021.47E+054.23E-032.09E-011.19E+035.21E+05 + 96M5 56.006.42E-032.32E-011.49E+021.98E+041.85E-036.43E-022.21E+026.63E+04 + 96M5 74.002.12E-035.56E-022.09E+011.98E+037.02E-041.66E-023.16E+016.28E+03 + 96M5 107.004.83E-048.41E-031.58E+009.66E+011.93E-042.85E-032.43E+002.91E+02 + 96M5 155.001.09E-041.28E-031.19E-014.81E+005.23E-055.01E-041.86E-011.41E+01 + 96M5 285.001.00E-056.27E-051.84E-033.80E-026.14E-063.20E-052.81E-031.11E-01 + 96M5 500.001.22E-064.67E-064.62E-055.09E-048.99E-072.95E-066.40E-051.51E-03 + 96N+ 50.005.72E-024.08E+012.53E+031.17E+053.97E+002.08E+021.37E+046.82E+05 + 96N+ 70.002.39E-028.11E+003.40E+029.97E+031.47E+004.47E+011.67E+035.25E+04 + 96N+ 100.009.57E-031.53E+004.35E+018.33E+025.25E-019.31E+001.98E+023.92E+03 + 96N+ 150.003.41E-032.39E-014.54E+005.73E+011.63E-011.67E+001.99E+012.40E+02 + 96N+ 200.001.66E-036.75E-029.75E-019.44E+007.15E-025.23E-014.29E+003.71E+01 + 96N+ 500.002.11E-041.99E-031.26E-025.89E-025.61E-031.89E-026.20E-022.16E-01 + 97K 132.602.12E-011.30E-012.58E-021.09E-031.31E+014.87E+013.86E+017.28E+00 + 97K 133.302.09E-011.32E-013.03E-022.19E-031.29E+014.78E+013.90E+018.47E+00 + 97K 134.602.05E-011.36E-013.90E-025.05E-031.26E+014.63E+013.97E+011.07E+01 + 97K 137.801.94E-011.45E-016.09E-021.66E-021.18E+014.29E+014.08E+011.61E+01 + 97K 141.601.83E-011.53E-018.71E-023.81E-021.09E+013.93E+014.13E+012.20E+01 + 97K 146.001.71E-011.60E-011.16E-017.17E-029.97E+003.55E+014.12E+012.78E+01 + 97K 152.001.56E-011.65E-011.53E-011.28E-018.89E+003.11E+014.00E+013.40E+01 + 97K 160.001.39E-011.68E-011.93E-012.11E-017.68E+002.64E+013.76E+013.93E+01 + 97K 172.001.18E-011.65E-012.37E-013.32E-016.26E+002.08E+013.31E+014.24E+01 + 97K 185.001.01E-011.57E-012.64E-014.37E-015.09E+001.64E+012.82E+014.16E+01 + 97K 202.008.28E-021.45E-012.78E-015.27E-013.98E+001.23E+012.27E+013.75E+01 + 97K 215.007.21E-021.34E-012.77E-015.63E-013.34E+001.01E+011.92E+013.35E+01 + 97K 232.006.10E-021.22E-012.68E-015.79E-012.70E+007.90E+001.54E+012.84E+01 + 97K 255.004.97E-021.06E-012.48E-015.65E-012.07E+005.84E+001.17E+012.24E+01 + 97K 280.004.07E-029.19E-022.24E-015.26E-011.60E+004.34E+008.75E+001.72E+01 + 97K 345.002.64E-026.55E-021.66E-014.00E-018.98E-012.26E+004.53E+009.00E+00 + 97K 430.001.70E-024.52E-021.15E-012.71E-014.92E-011.16E+002.25E+004.35E+00 + 97K 520.001.18E-023.27E-028.18E-021.86E-012.94E-016.61E-011.24E+002.31E+00 + 97K 630.008.28E-032.36E-025.74E-021.25E-011.76E-013.80E-016.84E-011.22E+00 + 97K 860.004.78E-031.39E-023.20E-026.42E-027.66E-021.60E-012.71E-014.50E-01 + 97K 1150.002.92E-038.50E-031.85E-023.47E-023.54E-027.40E-021.19E-011.86E-01 + 97K 1400.002.11E-036.06E-031.28E-022.30E-022.09E-024.45E-027.00E-021.05E-01 + 97K 1650.001.61E-034.56E-039.40E-031.64E-021.35E-022.94E-024.54E-026.64E-02 + 97L1 26.255.59E-011.47E+021.77E+032.34E+032.81E+022.40E+044.68E+052.24E+06 + 97L1 26.955.38E-011.31E+021.76E+033.82E+032.60E+022.13E+044.09E+052.16E+06 + 97L1 28.255.01E-011.07E+021.68E+036.13E+032.26E+021.71E+043.19E+051.95E+06 + 97L1 31.454.25E-016.76E+011.34E+038.84E+031.64E+021.04E+041.83E+051.37E+06 + 97L1 35.253.53E-014.11E+019.55E+028.63E+031.17E+026.18E+031.01E+058.58E+05 + 97L1 38.003.11E-012.96E+017.37E+027.58E+039.38E+014.39E+036.84E+046.08E+05 + 97L1 44.002.41E-011.55E+014.21E+025.05E+036.08E+012.27E+033.19E+042.97E+05 + 97L1 52.001.77E-017.47E+002.10E+022.74E+033.72E+011.08E+031.35E+041.25E+05 + 97L1 64.001.19E-013.05E+008.46E+011.13E+032.02E+014.34E+024.66E+034.08E+04 + 97L1 77.008.23E-021.41E+003.68E+014.79E+021.18E+011.96E+021.83E+031.49E+04 + 97L1 94.005.47E-026.45E-011.49E+011.82E+026.57E+008.46E+016.78E+024.98E+03 + 97L1 107.004.18E-024.01E-018.33E+009.61E+014.51E+004.95E+013.60E+022.45E+03 + 97L1 124.003.06E-022.41E-014.35E+004.64E+012.95E+002.72E+011.77E+021.10E+03 + 97L1 147.002.14E-021.41E-012.09E+002.01E+011.81E+001.38E+017.90E+014.42E+02 + 97L1 175.001.48E-028.48E-021.02E+008.69E+001.10E+007.02E+003.53E+011.76E+02 + 97L1 240.007.65E-033.72E-023.07E-012.03E+004.49E-012.15E+008.64E+003.51E+01 + 97L1 325.004.15E-031.83E-021.09E-015.58E-011.92E-017.29E-012.40E+008.03E+00 + 97L1 410.002.65E-031.10E-025.33E-022.25E-011.01E-013.31E-019.47E-012.75E+00 + 97L1 520.001.70E-036.76E-032.71E-029.53E-025.30E-021.53E-013.84E-019.74E-01 + 97L1 750.008.95E-043.30E-031.05E-022.90E-021.97E-024.96E-021.05E-012.22E-01 + 97L11000.005.54E-041.93E-035.32E-031.26E-029.13E-032.16E-024.11E-027.70E-02 + 97L11500.002.87E-049.18E-042.19E-034.42E-033.09E-037.13E-031.22E-022.00E-02 + 97L2 25.381.36E+005.70E+034.07E+053.82E+063.80E+011.01E+036.37E+037.40E+03 + 97L2 26.081.27E+004.99E+033.51E+053.63E+063.51E+019.19E+026.37E+031.21E+04 + 97L2 27.381.13E+003.94E+032.68E+053.20E+063.04E+017.70E+026.14E+031.94E+04 + 97L2 30.588.53E-012.31E+031.47E+052.15E+062.19E+015.18E+025.06E+032.83E+04 + 97L2 34.386.30E-011.32E+037.70E+041.27E+061.55E+013.39E+023.73E+032.81E+04 + 97L2 38.004.85E-018.13E+024.44E+047.71E+051.16E+012.35E+022.74E+032.38E+04 + 97L2 44.003.28E-014.05E+021.98E+043.55E+057.54E+001.38E+021.66E+031.62E+04 + 97L2 52.002.09E-011.84E+027.90E+031.40E+054.63E+007.50E+018.96E+029.14E+03 + 97L2 64.001.18E-016.94E+012.54E+034.23E+042.54E+003.53E+013.99E+024.02E+03 + 97L2 77.007.04E-022.95E+019.28E+021.43E+041.49E+001.80E+011.89E+021.81E+03 + 97L2 94.004.02E-021.19E+013.17E+024.39E+038.44E-018.81E+008.37E+017.38E+02 + 97L2 107.002.79E-026.61E+001.59E+022.04E+035.84E-015.55E+004.90E+014.06E+02 + 97L2 124.001.84E-023.42E+007.28E+018.55E+023.85E-013.29E+002.67E+012.04E+02 + 97L2 147.001.14E-021.62E+003.00E+013.15E+022.39E-011.81E+001.32E+019.14E+01 + 97L2 175.007.01E-037.60E-011.22E+011.15E+021.47E-019.85E-016.45E+004.02E+01 + 97L2 240.002.93E-032.00E-012.51E+001.90E+016.13E-023.34E-011.79E+009.17E+00 + 97L2 325.001.29E-035.85E-025.83E-013.62E+002.67E-021.22E-015.39E-012.29E+00 + 97L2 410.007.02E-042.35E-021.99E-011.06E+001.41E-025.70E-022.20E-018.14E-01 + 97L2 520.003.82E-049.60E-036.91E-023.20E-017.41E-032.67E-029.05E-022.92E-01 + 97L2 750.001.55E-042.58E-031.48E-025.62E-022.74E-038.60E-032.43E-026.49E-02 + 97L21000.007.86E-059.77E-044.80E-031.58E-021.25E-033.64E-039.07E-032.13E-02 + 97L21500.003.11E-052.71E-041.10E-033.06E-034.10E-041.12E-032.43E-034.93E-03 + 97L3 20.443.34E+001.55E+041.47E+061.93E+072.92E+004.76E+042.90E+072.16E+09 + 97L3 21.143.04E+001.31E+041.21E+061.72E+072.63E+004.02E+042.31E+071.67E+09 + 97L3 22.442.56E+009.69E+038.42E+051.35E+072.19E+002.99E+041.55E+071.06E+09 + 97L3 25.641.75E+004.96E+033.81E+057.14E+061.46E+001.54E+046.33E+063.87E+08 + 97L3 29.441.17E+002.48E+031.67E+053.38E+069.56E-017.72E+032.52E+061.37E+08 + 97L3 38.005.48E-016.87E+023.64E+047.48E+054.39E-012.16E+034.65E+052.02E+07 + 97L3 44.003.52E-013.29E+021.52E+043.02E+052.81E-011.04E+031.78E+056.81E+06 + 97L3 52.002.11E-011.43E+025.61E+031.05E+051.69E-014.54E+026.00E+041.99E+06 + 97L3 64.001.11E-015.06E+011.63E+032.75E+049.01E-021.62E+021.58E+044.37E+05 + 97L3 77.006.24E-022.02E+015.46E+028.24E+035.15E-026.47E+014.86E+031.15E+05 + 97L3 94.003.33E-027.51E+001.68E+022.23E+032.83E-022.41E+011.39E+032.78E+04 + 97L3 107.002.22E-023.96E+007.83E+019.50E+021.92E-021.27E+016.19E+021.12E+04 + 97L3 124.001.39E-021.92E+003.30E+013.60E+021.23E-026.13E+002.50E+024.01E+03 + 97L3 147.008.17E-038.34E-011.22E+011.18E+027.42E-032.65E+008.88E+011.25E+03 + 97L3 175.004.73E-033.57E-014.45E+003.77E+014.42E-031.12E+003.12E+013.83E+02 + 97L3 240.001.77E-037.82E-027.28E-014.88E+001.74E-032.39E-014.88E+004.75E+01 + 97L3 325.007.06E-041.87E-021.33E-017.17E-017.16E-045.48E-028.61E-016.85E+00 + 97L3 410.003.55E-046.42E-033.74E-021.73E-013.66E-041.79E-022.35E-011.62E+00 + 97L3 520.001.79E-042.21E-031.06E-024.23E-021.86E-045.76E-036.43E-023.88E-01 + 97L3 750.006.45E-054.59E-041.69E-035.53E-036.70E-051.05E-039.20E-034.64E-02 + 97L31000.003.05E-051.44E-044.41E-041.26E-033.11E-052.89E-042.09E-039.37E-03 + 97L31500.001.15E-053.28E-057.93E-051.89E-041.13E-055.37E-052.81E-041.07E-03 + 97M1 7.549.93E-019.25E+035.13E+055.72E+062.82E+032.88E+066.66E+083.78E+10 + 97M1 8.548.73E-015.44E+033.06E+055.11E+061.94E+031.57E+062.98E+081.63E+10 + 97M1 10.546.80E-012.22E+031.27E+052.77E+061.04E+035.61E+057.77E+073.89E+09 + 97M1 14.544.32E-015.66E+023.19E+048.05E+053.96E+021.18E+051.03E+074.28E+08 + 97M1 21.542.29E-011.05E+025.58E+031.45E+051.23E+021.81E+049.30E+052.93E+07 + 97M1 29.001.35E-012.92E+011.43E+033.53E+045.07E+014.45E+031.58E+053.95E+06 + 97M1 44.006.11E-024.83E+002.03E+024.36E+031.48E+016.52E+021.43E+042.54E+05 + 97M1 56.003.78E-021.72E+006.44E+011.24E+037.25E+002.21E+023.71E+035.40E+04 + 97M1 74.002.13E-025.40E-011.71E+012.85E+023.20E+006.48E+018.17E+029.41E+03 + 97M1 107.009.78E-031.29E-013.02E+004.03E+011.09E+001.35E+011.19E+021.01E+03 + 97M1 155.004.45E-033.62E-025.73E-015.87E+003.75E-012.99E+001.89E+011.19E+02 + 97M1 285.001.25E-036.61E-035.08E-023.14E-016.69E-022.98E-011.16E+004.57E+00 + 97M1 500.004.27E-041.84E-038.18E-033.15E-021.42E-024.36E-021.17E-013.19E-01 + 97M2 7.142.07E+007.73E+055.21E+084.70E+104.40E+021.10E+056.58E+067.78E+07 + 97M2 8.141.81E+004.04E+052.23E+081.94E+102.98E+026.09E+043.50E+066.54E+07 + 97M2 10.141.36E+001.37E+055.48E+074.33E+091.55E+022.29E+041.20E+063.06E+07 + 97M2 14.147.83E-012.66E+046.76E+064.45E+085.75E+015.36E+032.34E+056.72E+06 + 97M2 21.143.54E-013.73E+035.67E+052.87E+071.75E+019.74E+023.28E+048.68E+05 + 97M2 29.001.76E-018.08E+028.43E+043.41E+066.88E+002.65E+027.15E+031.64E+05 + 97M2 44.006.51E-021.10E+027.24E+032.15E+052.03E+004.98E+019.93E+021.78E+04 + 97M2 56.003.55E-023.53E+011.80E+034.44E+041.01E+001.94E+013.24E+024.95E+03 + 97M2 74.001.72E-029.68E+003.73E+027.40E+034.53E-016.68E+009.02E+011.14E+03 + 97M2 107.006.45E-031.81E+004.88E+017.26E+021.59E-011.69E+001.72E+011.67E+02 + 97M2 155.002.37E-033.52E-016.77E+007.55E+015.60E-024.41E-013.42E+002.53E+01 + 97M2 285.004.65E-042.71E-023.13E-012.22E+001.04E-025.33E-022.69E-011.30E+00 + 97M2 500.001.10E-043.04E-032.31E-021.13E-012.24E-038.43E-033.00E-021.02E-01 + 97M3 5.988.23E+002.09E+061.64E+091.67E+113.18E+016.63E+064.66E+103.96E+13 + 97M3 6.986.26E+009.63E+055.90E+085.56E+101.99E+013.06E+061.60E+101.05E+13 + 97M3 8.983.84E+002.72E+051.13E+089.23E+099.27E+008.69E+052.81E+091.24E+12 + 97M3 12.981.74E+004.28E+041.05E+076.73E+083.04E+001.38E+052.23E+085.65E+10 + 97M3 19.986.21E-014.91E+036.78E+053.22E+078.22E-011.60E+041.18E+071.64E+09 + 97M3 29.002.37E-017.59E+026.60E+042.38E+062.66E-012.50E+039.61E+058.24E+07 + 97M3 44.007.54E-029.43E+015.06E+031.33E+057.54E-023.13E+026.05E+043.17E+06 + 97M3 56.003.78E-022.83E+011.17E+032.54E+043.65E-029.44E+011.25E+045.02E+05 + 97M3 74.001.67E-027.10E+002.17E+023.78E+031.58E-022.37E+012.08E+036.22E+04 + 97M3 107.005.51E-031.15E+002.40E+013.11E+025.26E-033.81E+002.03E+024.23E+03 + 97M3 155.001.78E-031.88E-012.71E+002.61E+011.75E-036.11E-012.08E+013.11E+02 + 97M3 285.002.83E-041.01E-028.24E-024.97E-012.94E-043.10E-025.71E-015.26E+00 + 97M3 500.005.53E-057.67E-043.86E-031.60E-025.87E-052.07E-032.46E-021.57E-01 + 97M4 5.352.06E+016.13E+041.32E+098.78E+129.64E+002.24E+057.37E+082.63E+11 + 97M4 6.351.23E+012.58E+043.96E+081.97E+125.57E+009.48E+042.32E+087.27E+10 + 97M4 8.355.28E+006.48E+035.81E+071.83E+112.30E+002.41E+043.71E+079.32E+09 + 97M4 12.351.47E+009.04E+023.74E+066.32E+096.42E-013.38E+032.77E+065.01E+08 + 97M4 19.353.12E-019.48E+011.61E+051.39E+081.45E-013.56E+021.48E+051.81E+07 + 97M4 29.007.24E-021.25E+019.47E+034.71E+063.71E-024.67E+011.10E+049.42E+05 + 97M4 44.001.52E-021.55E+005.20E+021.51E+058.88E-035.77E+007.94E+024.67E+04 + 97M4 56.006.04E-034.63E-019.79E+012.12E+043.84E-031.72E+001.77E+028.40E+03 + 97M4 74.002.04E-031.15E-011.44E+012.24E+031.44E-034.28E-013.19E+011.18E+03 + 97M4 107.004.78E-041.84E-021.18E+001.21E+023.88E-046.83E-023.41E+009.14E+01 + 97M4 155.001.10E-042.97E-031.00E-016.82E+001.02E-041.09E-023.75E-017.34E+00 + 97M4 285.001.02E-051.57E-042.06E-037.18E-021.10E-055.47E-041.09E-021.32E-01 + 97M4 500.001.16E-061.15E-057.45E-051.37E-031.36E-063.59E-054.70E-043.83E-03 + 97M5 5.123.20E+014.86E+043.35E+091.65E+135.42E+009.88E+034.52E+099.92E+13 + 97M5 6.121.86E+011.95E+049.58E+083.46E+123.06E+004.05E+031.30E+092.02E+13 + 97M5 8.127.57E+004.59E+031.32E+082.93E+111.23E+009.89E+021.80E+081.62E+12 + 97M5 12.121.99E+005.97E+027.88E+069.12E+093.34E-011.34E+021.09E+074.63E+10 + 97M5 19.123.99E-015.89E+013.18E+051.83E+087.43E-021.39E+014.51E+058.30E+08 + 97M5 29.008.57E-027.08E+001.69E+045.35E+061.85E-021.75E+002.46E+042.17E+07 + 97M5 44.001.74E-028.45E-018.95E+021.62E+054.49E-032.25E-011.34E+035.91E+05 + 97M5 56.006.77E-032.46E-011.64E+022.17E+041.96E-036.91E-022.49E+027.52E+04 + 97M5 74.002.24E-035.90E-022.30E+012.17E+037.47E-041.79E-023.56E+017.11E+03 + 97M5 107.005.13E-048.93E-031.74E+001.06E+022.06E-043.06E-032.74E+003.29E+02 + 97M5 155.001.16E-041.36E-031.32E-015.27E+005.58E-055.37E-042.09E-011.59E+01 + 97M5 285.001.06E-056.71E-052.02E-034.17E-026.55E-063.43E-053.16E-031.25E-01 + 97M5 500.001.29E-065.00E-065.06E-055.58E-049.61E-073.17E-067.14E-051.70E-03 + 97N+ 50.005.89E-024.48E+012.77E+031.29E+054.44E+002.32E+021.53E+047.68E+05 + 97N+ 70.002.46E-028.91E+003.71E+021.09E+041.65E+004.98E+011.87E+035.89E+04 + 97N+ 100.009.90E-031.68E+004.75E+019.10E+025.87E-011.03E+012.21E+024.38E+03 + 97N+ 150.003.53E-032.63E-014.97E+006.25E+011.82E-011.86E+002.21E+012.66E+02 + 97N+ 200.001.73E-037.44E-021.07E+001.03E+017.99E-025.80E-014.75E+004.11E+01 + 97N+ 500.002.21E-042.19E-031.39E-026.48E-026.27E-032.09E-026.84E-022.38E-01 + 98K 136.002.02E-011.22E-012.43E-021.01E-031.34E+014.74E+013.63E+016.65E+00 + 98K 136.701.99E-011.24E-012.84E-022.01E-031.31E+014.65E+013.67E+017.71E+00 + 98K 138.001.95E-011.28E-013.64E-024.59E-031.28E+014.52E+013.73E+019.72E+00 + 98K 141.201.85E-011.36E-015.66E-021.50E-021.20E+014.20E+013.84E+011.45E+01 + 98K 145.001.75E-011.44E-018.09E-023.43E-021.11E+013.85E+013.90E+011.98E+01 + 98K 149.001.64E-011.50E-011.06E-016.17E-021.03E+013.52E+013.89E+012.47E+01 + 98K 155.001.51E-011.56E-011.40E-011.12E-019.20E+003.10E+013.80E+013.06E+01 + 98K 163.001.35E-011.59E-011.79E-011.88E-017.97E+002.63E+013.59E+013.58E+01 + 98K 175.001.15E-011.58E-012.22E-013.01E-016.52E+002.09E+013.19E+013.91E+01 + 98K 188.009.84E-021.51E-012.51E-014.03E-015.33E+001.66E+012.74E+013.88E+01 + 98K 205.008.13E-021.40E-012.66E-014.93E-014.17E+001.25E+012.22E+013.54E+01 + 98K 218.007.10E-021.31E-012.67E-015.32E-013.51E+001.03E+011.89E+013.19E+01 + 98K 235.006.03E-021.19E-012.61E-015.53E-012.84E+008.09E+001.53E+012.73E+01 + 98K 258.004.94E-021.05E-012.44E-015.45E-012.19E+006.01E+001.16E+012.17E+01 + 98K 285.004.00E-029.07E-022.20E-015.09E-011.66E+004.39E+008.61E+001.65E+01 + 98K 350.002.62E-026.55E-021.66E-013.94E-019.43E-012.32E+004.54E+008.81E+00 + 98K 435.001.70E-024.58E-021.16E-012.71E-015.21E-011.20E+002.28E+004.34E+00 + 98K 530.001.17E-023.29E-028.20E-021.84E-013.05E-016.71E-011.23E+002.26E+00 + 98K 640.008.31E-032.40E-025.81E-021.25E-011.84E-013.91E-016.91E-011.21E+00 + 98K 870.004.86E-031.43E-023.29E-026.55E-028.09E-021.67E-012.79E-014.57E-01 + 98K 1150.003.03E-038.94E-031.95E-023.64E-023.84E-027.97E-021.27E-011.97E-01 + 98K 1400.002.19E-036.38E-031.35E-022.42E-022.27E-024.80E-027.48E-021.11E-01 + 98K 1650.001.67E-034.80E-039.93E-031.73E-021.46E-023.16E-024.86E-027.07E-02 + 98L1 27.015.27E-011.41E+021.63E+032.06E+032.87E+022.33E+044.35E+052.00E+06 + 98L1 27.715.07E-011.27E+021.62E+033.35E+032.65E+022.07E+043.81E+051.94E+06 + 98L1 29.014.73E-011.04E+021.55E+035.38E+032.32E+021.67E+043.00E+051.76E+06 + 98L1 32.214.03E-016.68E+011.26E+037.87E+031.70E+021.03E+041.75E+051.26E+06 + 98L1 36.013.37E-014.13E+019.09E+027.82E+031.22E+026.19E+039.79E+047.99E+05 + 98L1 39.002.95E-012.92E+016.92E+026.86E+039.64E+014.31E+036.46E+045.56E+05 + 98L1 45.002.30E-011.56E+014.03E+024.66E+036.31E+012.26E+033.08E+042.77E+05 + 98L1 53.001.71E-017.69E+002.06E+022.59E+033.90E+011.09E+031.32E+041.19E+05 + 98L1 65.001.16E-013.21E+008.49E+011.10E+032.14E+014.47E+024.67E+033.99E+04 + 98L1 78.008.06E-021.51E+003.76E+014.74E+021.25E+012.04E+021.86E+031.48E+04 + 98L1 95.005.40E-026.98E-011.55E+011.84E+027.06E+008.90E+017.00E+025.03E+03 + 98L1 108.004.14E-024.35E-018.77E+009.85E+014.87E+005.24E+013.74E+022.50E+03 + 98L1 125.003.05E-022.63E-014.62E+004.81E+013.19E+002.89E+011.85E+021.13E+03 + 98L1 148.002.14E-021.53E-012.25E+002.11E+011.96E+001.48E+018.32E+014.59E+02 + 98L1 175.001.51E-029.33E-021.13E+009.46E+001.21E+007.70E+003.84E+011.90E+02 + 98L1 240.007.84E-034.04E-023.38E-012.21E+004.97E-012.35E+009.39E+003.78E+01 + 98L1 325.004.27E-031.97E-021.19E-016.09E-012.13E-017.99E-012.61E+008.68E+00 + 98L1 420.002.61E-031.13E-025.40E-022.24E-011.05E-013.35E-019.38E-012.67E+00 + 98L1 530.001.71E-036.97E-032.79E-029.69E-025.55E-021.57E-013.89E-019.72E-01 + 98L1 760.009.12E-043.44E-031.10E-023.02E-022.10E-025.22E-021.09E-012.28E-01 + 98L11050.005.34E-041.88E-035.13E-031.19E-028.82E-032.06E-023.83E-027.03E-02 + 98L11550.002.85E-049.25E-042.20E-034.40E-033.10E-037.15E-031.21E-021.96E-02 + 98L2 26.121.29E+005.40E+033.69E+053.34E+063.93E+019.84E+025.93E+036.59E+03 + 98L2 26.821.21E+004.75E+033.20E+053.18E+063.64E+018.95E+025.93E+031.07E+04 + 98L2 28.121.08E+003.77E+032.46E+052.82E+063.17E+017.55E+025.74E+031.73E+04 + 98L2 31.328.22E-012.25E+031.37E+051.92E+062.30E+015.13E+024.78E+032.54E+04 + 98L2 35.126.13E-011.30E+037.32E+041.16E+061.64E+013.39E+023.57E+032.57E+04 + 98L2 39.004.66E-017.84E+024.12E+046.90E+051.21E+012.32E+022.60E+032.18E+04 + 98L2 45.003.19E-013.97E+021.88E+043.25E+057.96E+001.38E+021.60E+031.50E+04 + 98L2 53.002.05E-011.83E+027.65E+031.31E+054.94E+007.61E+018.77E+028.66E+03 + 98L2 65.001.17E-017.06E+012.51E+034.07E+042.74E+003.63E+013.98E+023.90E+03 + 98L2 78.007.08E-023.04E+019.34E+021.40E+041.62E+001.88E+011.92E+021.79E+03 + 98L2 95.004.09E-021.24E+013.24E+024.39E+039.24E-019.28E+008.59E+017.41E+02 + 98L2 108.002.85E-026.94E+001.64E+022.06E+036.42E-015.88E+005.08E+014.11E+02 + 98L2 125.001.89E-023.62E+007.57E+018.73E+024.25E-013.50E+002.78E+012.09E+02 + 98L2 148.001.18E-021.72E+003.14E+013.25E+022.65E-011.94E+001.39E+019.46E+01 + 98L2 175.007.41E-038.35E-011.33E+011.23E+021.66E-011.08E+006.99E+004.31E+01 + 98L2 240.003.11E-032.21E-012.74E+002.06E+016.93E-023.69E-011.95E+009.90E+00 + 98L2 325.001.38E-036.45E-026.39E-013.93E+003.02E-021.35E-015.90E-012.48E+00 + 98L2 420.007.07E-042.37E-021.96E-011.03E+001.50E-025.85E-022.21E-017.98E-01 + 98L2 530.003.92E-049.90E-037.00E-023.19E-017.98E-032.80E-029.29E-022.95E-01 + 98L2 760.001.62E-042.73E-031.55E-025.81E-023.00E-039.22E-032.56E-026.76E-02 + 98L21050.007.63E-059.24E-044.42E-031.42E-021.24E-033.52E-038.56E-031.96E-02 + 98L21550.003.15E-052.73E-041.09E-032.99E-034.24E-041.15E-032.45E-034.88E-03 + 98L3 20.913.20E+001.49E+041.36E+061.72E+072.86E+004.69E+042.77E+072.00E+09 + 98L3 21.612.91E+001.26E+041.11E+061.54E+072.59E+003.98E+042.21E+071.56E+09 + 98L3 22.912.46E+009.39E+037.85E+051.22E+072.16E+002.98E+041.49E+079.96E+08 + 98L3 26.111.69E+004.87E+033.61E+056.54E+061.45E+001.55E+046.22E+063.71E+08 + 98L3 29.911.14E+002.46E+031.60E+053.14E+069.59E-017.88E+032.51E+061.34E+08 + 98L3 39.005.19E-016.48E+023.29E+046.57E+054.27E-012.10E+034.34E+051.83E+07 + 98L3 45.003.37E-013.17E+021.40E+042.71E+052.76E-011.03E+031.70E+056.34E+06 + 98L3 53.002.04E-011.40E+025.30E+039.61E+041.68E-014.57E+025.87E+041.90E+06 + 98L3 65.001.09E-015.04E+011.58E+032.59E+049.04E-021.66E+021.58E+044.29E+05 + 98L3 78.006.18E-022.03E+015.35E+027.89E+035.21E-026.70E+014.95E+031.15E+05 + 98L3 95.003.33E-027.66E+001.67E+022.17E+032.88E-022.52E+011.43E+032.83E+04 + 98L3 108.002.23E-024.07E+007.85E+019.34E+021.96E-021.34E+016.45E+021.15E+04 + 98L3 125.001.41E-021.98E+003.33E+013.58E+021.26E-026.50E+002.63E+024.16E+03 + 98L3 148.008.28E-038.67E-011.24E+011.18E+027.65E-032.82E+009.40E+011.30E+03 + 98L3 175.004.91E-033.84E-014.71E+003.95E+014.65E-031.24E+003.44E+014.20E+02 + 98L3 240.001.84E-038.40E-027.72E-015.13E+001.83E-032.63E-015.36E+005.21E+01 + 98L3 325.007.35E-042.01E-021.41E-017.56E-017.53E-046.02E-029.46E-017.49E+00 + 98L3 420.003.45E-046.16E-033.49E-021.57E-013.59E-041.75E-022.26E-011.53E+00 + 98L3 530.001.77E-042.17E-031.02E-024.01E-021.85E-045.78E-036.37E-023.79E-01 + 98L3 760.006.51E-054.63E-041.68E-035.46E-036.78E-051.08E-039.41E-034.70E-02 + 98L31050.002.80E-051.27E-043.76E-041.05E-032.86E-052.54E-041.79E-037.84E-03 + 98L31550.001.12E-053.09E-057.38E-051.73E-041.09E-055.10E-052.61E-049.90E-04 + 98M1 7.759.36E-019.07E+034.93E+055.25E+062.89E+032.80E+066.21E+083.40E+10 + 98M1 8.758.26E-015.41E+032.98E+054.78E+062.01E+031.55E+062.84E+081.50E+10 + 98M1 10.756.47E-012.25E+031.26E+052.67E+061.09E+035.66E+057.63E+073.71E+09 + 98M1 14.754.16E-015.87E+023.23E+047.97E+054.22E+021.23E+051.05E+074.25E+08 + 98M1 21.752.23E-011.12E+025.77E+031.46E+051.33E+021.92E+049.73E+053.01E+07 + 98M1 29.001.34E-013.26E+011.55E+033.75E+045.64E+014.94E+031.75E+054.33E+06 + 98M1 44.006.12E-025.43E+002.21E+024.67E+031.64E+017.24E+021.58E+042.79E+05 + 98M1 56.003.80E-021.95E+007.06E+011.34E+038.06E+002.44E+024.10E+035.92E+04 + 98M1 74.002.15E-026.12E-011.88E+013.09E+023.56E+007.17E+019.00E+021.03E+04 + 98M1 107.009.93E-031.45E-013.35E+004.40E+011.21E+001.49E+011.31E+021.10E+03 + 98M1 155.004.54E-034.05E-026.38E-016.46E+004.17E-013.30E+002.07E+011.29E+02 + 98M1 285.001.29E-037.21E-035.62E-023.46E-017.43E-023.28E-011.27E+004.98E+00 + 98M1 500.004.43E-041.98E-038.95E-033.46E-021.57E-024.78E-021.28E-013.48E-01 + 98M2 7.351.94E+007.35E+054.74E+084.13E+104.57E+021.07E+056.17E+066.99E+07 + 98M2 8.351.71E+003.91E+052.08E+081.74E+103.12E+026.04E+043.34E+065.96E+07 + 98M2 10.351.29E+001.35E+055.27E+074.04E+091.65E+022.32E+041.17E+062.88E+07 + 98M2 14.357.61E-012.72E+046.74E+064.33E+086.23E+015.58E+032.36E+056.56E+06 + 98M2 21.353.51E-013.90E+035.83E+052.89E+071.92E+011.03E+033.40E+048.77E+05 + 98M2 29.001.80E-018.86E+029.19E+043.67E+067.79E+002.92E+027.76E+031.75E+05 + 98M2 44.006.71E-021.21E+027.89E+032.31E+052.30E+005.49E+011.08E+031.91E+04 + 98M2 56.003.67E-023.88E+011.97E+034.80E+041.14E+002.14E+013.52E+025.32E+03 + 98M2 74.001.79E-021.06E+014.07E+028.00E+035.13E-017.37E+009.82E+011.23E+03 + 98M2 107.006.76E-031.99E+005.34E+017.87E+021.80E-011.86E+001.88E+011.80E+02 + 98M2 155.002.50E-033.87E-017.41E+008.21E+016.34E-024.88E-013.74E+002.75E+01 + 98M2 285.004.96E-043.00E-023.44E-012.43E+001.18E-025.92E-022.95E-011.42E+00 + 98M2 500.001.18E-043.37E-032.55E-021.24E-012.54E-039.40E-033.31E-021.12E-01 + 98M3 6.127.89E+002.01E+061.51E+091.49E+113.12E+016.56E+064.45E+103.67E+13 + 98M3 7.126.04E+009.42E+055.56E+085.08E+101.98E+013.08E+061.56E+101.00E+13 + 98M3 9.123.74E+002.72E+051.10E+088.71E+099.33E+008.93E+052.82E+091.22E+12 + 98M3 13.121.71E+004.38E+041.05E+076.58E+083.10E+001.45E+052.32E+085.82E+10 + 98M3 20.126.20E-015.13E+036.93E+053.23E+078.49E-011.72E+041.26E+071.74E+09 + 98M3 29.002.42E-018.20E+027.05E+042.51E+062.81E-012.77E+031.07E+069.22E+07 + 98M3 44.007.73E-021.02E+025.40E+031.40E+057.97E-023.48E+026.75E+043.53E+06 + 98M3 56.003.88E-023.07E+011.24E+032.67E+043.85E-021.05E+021.40E+045.58E+05 + 98M3 74.001.72E-027.68E+002.31E+023.98E+031.67E-022.63E+012.32E+036.91E+04 + 98M3 107.005.70E-031.24E+002.56E+013.28E+025.56E-034.22E+002.26E+024.69E+03 + 98M3 155.001.85E-032.03E-012.89E+002.76E+011.85E-036.78E-012.31E+013.43E+02 + 98M3 285.002.95E-041.09E-028.79E-025.26E-013.11E-043.43E-026.32E-015.80E+00 + 98M3 500.005.80E-058.25E-044.12E-031.70E-026.19E-052.28E-032.71E-021.73E-01 + 98M4 5.481.97E+015.90E+041.21E+097.88E+129.47E+002.22E+057.01E+082.43E+11 + 98M4 6.481.19E+012.53E+043.74E+081.82E+125.53E+009.60E+042.26E+086.91E+10 + 98M4 8.485.19E+006.52E+035.67E+071.77E+112.32E+002.50E+043.74E+079.19E+09 + 98M4 12.481.47E+009.33E+023.78E+066.38E+096.60E-013.60E+032.89E+065.13E+08 + 98M4 19.483.18E-019.99E+011.67E+051.45E+081.51E-013.86E+021.58E+051.91E+07 + 98M4 29.007.59E-021.36E+011.03E+045.19E+063.96E-025.24E+011.23E+041.04E+06 + 98M4 44.001.60E-021.69E+005.67E+021.66E+059.51E-036.48E+008.84E+025.17E+04 + 98M4 56.006.38E-035.06E-011.07E+022.33E+044.12E-031.94E+001.97E+029.29E+03 + 98M4 74.002.16E-031.26E-011.57E+012.47E+031.55E-034.81E-013.55E+011.31E+03 + 98M4 107.005.09E-042.02E-021.29E+001.33E+024.18E-047.67E-023.79E+001.01E+02 + 98M4 155.001.18E-043.26E-031.09E-017.52E+001.10E-041.22E-024.17E-018.13E+00 + 98M4 285.001.09E-051.73E-042.25E-037.93E-021.18E-056.14E-041.22E-021.47E-01 + 98M4 500.001.25E-061.26E-058.15E-051.52E-031.47E-064.03E-055.25E-044.27E-03 + 98M5 5.243.06E+014.55E+043.13E+091.49E+135.31E+009.47E+034.34E+099.21E+13 + 98M5 6.241.80E+011.86E+049.20E+083.23E+123.03E+003.96E+031.28E+091.94E+13 + 98M5 8.247.44E+004.50E+031.31E+082.85E+111.24E+009.89E+021.83E+081.62E+12 + 98M5 12.241.99E+005.99E+028.09E+069.24E+093.42E-011.38E+021.15E+074.84E+10 + 98M5 19.244.06E-016.02E+013.35E+051.91E+087.70E-021.44E+014.86E+058.94E+08 + 98M5 29.008.96E-027.48E+001.86E+045.88E+061.96E-021.89E+002.77E+042.47E+07 + 98M5 44.001.82E-028.93E-019.86E+021.78E+054.76E-032.41E-011.51E+036.71E+05 + 98M5 56.007.12E-032.60E-011.80E+022.39E+042.08E-037.41E-022.80E+028.52E+04 + 98M5 74.002.36E-036.25E-022.54E+012.38E+037.94E-041.92E-024.01E+018.05E+03 + 98M5 107.005.42E-049.49E-031.92E+001.16E+022.19E-043.28E-033.08E+003.72E+02 + 98M5 155.001.23E-041.45E-031.45E-015.78E+005.95E-055.76E-042.36E-011.79E+01 + 98M5 285.001.13E-057.16E-052.22E-034.58E-026.99E-063.68E-053.54E-031.41E-01 + 98M5 500.001.38E-065.36E-065.53E-056.12E-041.02E-063.39E-067.96E-051.90E-03 + 98N+ 50.006.10E-024.96E+013.05E+031.42E+055.00E+002.61E+021.74E+048.73E+05 + 98N+ 70.002.56E-029.88E+004.09E+021.20E+041.86E+005.59E+012.11E+036.68E+04 + 98N+ 100.001.03E-021.86E+005.23E+011.00E+036.61E-011.16E+012.48E+024.94E+03 + 98N+ 150.003.69E-032.93E-015.49E+006.88E+012.05E-012.08E+002.47E+012.99E+02 + 98N+ 200.001.81E-038.28E-021.18E+001.14E+018.99E-026.49E-015.31E+004.59E+01 + 98N+ 500.002.33E-042.43E-031.54E-027.19E-027.04E-032.33E-027.60E-022.64E-01 + 99K 139.471.92E-011.14E-012.30E-029.44E-041.36E+014.63E+013.42E+016.08E+00 + 99K 140.171.90E-011.16E-012.68E-021.85E-031.34E+014.54E+013.45E+017.02E+00 + 99K 141.471.86E-011.20E-013.42E-024.19E-031.31E+014.41E+013.51E+018.83E+00 + 99K 144.671.77E-011.28E-015.29E-021.36E-021.23E+014.11E+013.62E+011.31E+01 + 99K 148.471.67E-011.36E-017.55E-023.10E-021.14E+013.78E+013.68E+011.79E+01 + 99K 152.001.59E-011.41E-019.60E-025.26E-021.06E+013.50E+013.68E+012.19E+01 + 99K 158.001.46E-011.47E-011.29E-019.79E-029.54E+003.09E+013.62E+012.74E+01 + 99K 166.001.31E-011.51E-011.66E-011.68E-018.29E+002.64E+013.44E+013.24E+01 + 99K 178.001.12E-011.51E-012.09E-012.73E-016.81E+002.10E+013.08E+013.60E+01 + 99K 191.009.62E-021.46E-012.38E-013.71E-015.58E+001.68E+012.67E+013.61E+01 + 99K 208.007.99E-021.36E-012.56E-014.61E-014.39E+001.28E+012.18E+013.34E+01 + 99K 221.007.00E-021.28E-012.59E-015.02E-013.70E+001.05E+011.86E+013.04E+01 + 99K 238.005.97E-021.18E-012.54E-015.27E-013.01E+008.29E+001.52E+012.62E+01 + 99K 261.004.91E-021.04E-012.40E-015.26E-012.32E+006.19E+001.16E+012.10E+01 + 99K 290.003.94E-028.96E-022.16E-014.94E-011.73E+004.45E+008.49E+001.58E+01 + 99K 355.002.61E-026.57E-021.66E-013.88E-019.93E-012.38E+004.54E+008.63E+00 + 99K 440.001.71E-024.65E-021.18E-012.71E-015.52E-011.24E+002.32E+004.33E+00 + 99K 530.001.21E-023.43E-028.52E-021.90E-013.33E-017.21E-011.30E+002.35E+00 + 99K 640.008.58E-032.51E-026.07E-021.30E-012.00E-014.20E-017.33E-011.27E+00 + 99K 870.005.03E-031.51E-023.45E-026.85E-028.81E-021.80E-012.97E-014.82E-01 + 99K 1150.003.15E-039.41E-032.06E-023.83E-024.18E-028.59E-021.36E-012.08E-01 + 99K 1400.002.28E-036.73E-031.43E-022.55E-022.46E-025.17E-027.99E-021.18E-01 + 99K 1650.001.74E-035.06E-031.05E-021.83E-021.58E-023.41E-025.20E-027.52E-02 + 99L1 27.784.94E-011.36E+021.50E+031.82E+032.91E+022.25E+044.05E+051.80E+06 + 99L1 28.484.78E-011.23E+021.49E+032.94E+032.72E+022.01E+043.55E+051.74E+06 + 99L1 29.784.47E-011.02E+021.44E+034.72E+032.38E+021.63E+042.82E+051.59E+06 + 99L1 32.983.83E-016.60E+011.18E+037.00E+031.76E+021.02E+041.67E+051.15E+06 + 99L1 36.783.22E-014.14E+018.64E+027.09E+031.27E+026.20E+039.47E+047.44E+05 + 99L1 40.002.80E-012.89E+016.52E+026.22E+039.93E+014.24E+036.13E+045.10E+05 + 99L1 46.002.20E-011.58E+013.87E+024.30E+036.57E+012.26E+032.98E+042.59E+05 + 99L1 54.001.64E-017.93E+002.02E+022.44E+034.09E+011.11E+031.30E+041.14E+05 + 99L1 66.001.12E-013.39E+008.53E+011.06E+032.27E+014.61E+024.69E+033.90E+04 + 99L1 79.007.90E-021.62E+003.85E+014.70E+021.34E+012.13E+021.90E+031.47E+04 + 99L1 96.005.33E-027.56E-011.62E+011.86E+027.60E+009.38E+017.22E+025.09E+03 + 99L1 109.004.11E-024.74E-019.24E+001.01E+025.26E+005.55E+013.88E+022.55E+03 + 99L1 126.003.04E-022.86E-014.91E+004.98E+013.46E+003.08E+011.93E+021.17E+03 + 99L1 149.002.15E-021.66E-012.41E+002.21E+012.13E+001.58E+018.77E+014.77E+02 + 99L1 175.001.54E-021.03E-011.25E+001.03E+011.35E+008.46E+004.17E+012.05E+02 + 99L1 240.008.02E-034.40E-023.72E-012.42E+005.50E-012.58E+001.02E+014.08E+01 + 99L1 325.004.39E-032.13E-021.31E-016.64E-012.35E-018.75E-012.84E+009.38E+00 + 99L1 420.002.70E-031.21E-025.89E-022.44E-011.16E-013.67E-011.02E+002.89E+00 + 99L1 530.001.77E-037.48E-033.03E-021.05E-016.14E-021.72E-014.23E-011.05E+00 + 99L1 760.009.51E-043.69E-031.19E-023.27E-022.31E-025.71E-021.19E-012.47E-01 + 99L11050.005.58E-042.01E-035.53E-031.29E-029.71E-032.25E-024.17E-027.61E-02 + 99L11550.003.00E-049.89E-042.36E-034.74E-033.40E-037.82E-031.31E-022.12E-02 + 99L2 26.881.23E+005.13E+033.36E+052.93E+064.06E+019.58E+025.54E+035.89E+03 + 99L2 27.581.15E+004.53E+032.91E+052.79E+063.78E+018.73E+025.53E+039.51E+03 + 99L2 28.881.03E+003.62E+032.27E+052.49E+063.30E+017.40E+025.37E+031.53E+04 + 99L2 32.087.91E-012.18E+031.28E+051.72E+062.42E+015.08E+024.52E+032.29E+04 + 99L2 35.885.95E-011.28E+036.95E+041.06E+061.74E+013.40E+023.42E+032.35E+04 + 99L2 40.004.49E-017.59E+023.83E+046.21E+051.27E+012.29E+022.47E+032.00E+04 + 99L2 46.003.10E-013.91E+021.78E+042.98E+058.43E+001.38E+021.54E+031.40E+04 + 99L2 54.002.02E-011.84E+027.42E+031.23E+055.29E+007.74E+018.61E+028.22E+03 + 99L2 66.001.17E-017.20E+012.49E+033.92E+042.96E+003.75E+013.98E+023.78E+03 + 99L2 79.007.13E-023.14E+019.41E+021.38E+041.77E+001.96E+011.95E+021.77E+03 + 99L2 96.004.15E-021.29E+013.31E+024.40E+031.01E+009.78E+008.83E+017.44E+02 + 99L2 109.002.92E-027.30E+001.69E+022.09E+037.08E-016.23E+005.26E+014.17E+02 + 99L2 126.001.95E-023.83E+007.88E+018.92E+024.70E-013.74E+002.90E+012.14E+02 + 99L2 149.001.22E-021.84E+003.30E+013.36E+022.94E-012.08E+001.46E+019.78E+01 + 99L2 175.007.83E-039.18E-011.45E+011.33E+021.88E-011.19E+007.58E+004.62E+01 + 99L2 240.003.31E-032.43E-013.00E+002.23E+017.85E-024.07E-012.13E+001.07E+01 + 99L2 325.001.47E-037.11E-026.99E-014.28E+003.42E-021.49E-016.45E-012.69E+00 + 99L2 420.007.57E-042.62E-022.15E-011.12E+001.70E-026.50E-022.42E-018.69E-01 + 99L2 530.004.21E-041.09E-027.70E-023.49E-019.06E-033.11E-021.02E-013.22E-01 + 99L2 760.001.76E-043.03E-031.71E-026.39E-023.40E-031.03E-022.84E-027.43E-02 + 99L21050.008.26E-051.03E-034.90E-031.56E-021.41E-033.95E-039.51E-032.16E-02 + 99L21550.003.44E-053.04E-041.21E-033.32E-034.82E-041.29E-032.73E-035.41E-03 + 99L3 21.393.06E+001.42E+041.25E+061.55E+072.81E+004.61E+042.64E+071.86E+09 + 99L3 22.092.79E+001.22E+041.03E+061.38E+072.55E+003.95E+042.12E+071.45E+09 + 99L3 23.392.37E+009.10E+037.33E+051.10E+072.13E+002.97E+041.44E+079.38E+08 + 99L3 26.591.64E+004.78E+033.41E+055.99E+061.44E+001.57E+046.11E+063.56E+08 + 99L3 30.391.11E+002.44E+031.54E+052.92E+069.60E-018.04E+032.51E+061.30E+08 + 99L3 40.004.93E-016.14E+022.99E+045.79E+054.15E-012.05E+034.07E+051.67E+07 + 99L3 46.003.24E-013.05E+021.30E+042.44E+052.71E-011.02E+031.63E+055.93E+06 + 99L3 54.001.98E-011.37E+025.01E+038.84E+041.67E-014.60E+025.75E+041.82E+06 + 99L3 66.001.07E-015.03E+011.52E+032.43E+049.08E-021.70E+021.58E+044.22E+05 + 99L3 79.006.12E-022.05E+015.25E+027.56E+035.28E-026.95E+015.04E+031.16E+05 + 99L3 96.003.33E-027.82E+001.66E+022.11E+032.93E-022.64E+011.48E+032.89E+04 + 99L3 109.002.23E-024.18E+007.87E+019.19E+022.00E-021.41E+016.73E+021.18E+04 + 99L3 126.001.42E-022.05E+003.37E+013.55E+021.30E-026.89E+002.76E+024.31E+03 + 99L3 149.008.40E-039.02E-011.27E+011.18E+027.88E-033.01E+009.94E+011.36E+03 + 99L3 175.005.09E-034.13E-014.99E+004.14E+014.89E-031.37E+003.79E+014.60E+02 + 99L3 240.001.92E-039.02E-028.18E-015.39E+001.92E-032.90E-015.90E+005.70E+01 + 99L3 325.007.64E-042.15E-021.50E-017.96E-017.91E-046.63E-021.04E+008.19E+00 + 99L3 420.003.59E-046.60E-033.70E-021.66E-013.77E-041.92E-022.48E-011.68E+00 + 99L3 530.001.84E-042.32E-031.08E-024.24E-021.94E-046.34E-036.98E-024.14E-01 + 99L3 760.006.80E-054.94E-041.78E-035.78E-037.10E-051.18E-031.03E-025.14E-02 + 99L31050.002.92E-051.35E-043.99E-041.12E-032.99E-052.76E-041.96E-038.56E-03 + 99L31550.001.16E-053.26E-057.81E-051.84E-041.14E-055.50E-052.85E-041.08E-03 + 99M1 7.978.82E-018.91E+034.74E+054.82E+062.96E+032.72E+065.79E+083.06E+10 + 99M1 8.977.81E-015.38E+032.90E+054.47E+062.08E+031.53E+062.70E+081.38E+10 + 99M1 10.976.16E-012.28E+031.24E+052.57E+061.14E+035.72E+057.49E+073.53E+09 + 99M1 14.974.01E-016.10E+023.26E+047.88E+054.50E+021.27E+051.07E+074.21E+08 + 99M1 21.972.17E-011.19E+025.96E+031.48E+051.43E+022.03E+041.02E+063.08E+07 + 99M1 29.001.34E-013.63E+011.68E+033.99E+046.28E+015.49E+031.94E+054.76E+06 + 99M1 44.006.13E-026.11E+002.42E+025.01E+031.83E+018.03E+021.74E+043.06E+05 + 99M1 56.003.82E-022.20E+007.75E+011.44E+038.97E+002.71E+024.52E+036.49E+04 + 99M1 74.002.17E-026.94E-012.08E+013.35E+023.96E+007.94E+019.91E+021.13E+04 + 99M1 107.001.01E-021.64E-013.72E+004.80E+011.35E+001.65E+011.44E+021.21E+03 + 99M1 155.004.62E-034.53E-027.10E-017.10E+004.63E-013.64E+002.27E+011.41E+02 + 99M1 285.001.33E-037.89E-036.22E-023.81E-018.25E-023.61E-011.39E+005.43E+00 + 99M1 500.004.60E-042.14E-039.80E-033.79E-021.74E-025.26E-021.40E-013.79E-01 + 99M2 7.561.81E+006.99E+054.32E+083.63E+104.75E+021.05E+055.79E+066.28E+07 + 99M2 8.561.61E+003.78E+051.94E+081.57E+103.28E+025.99E+043.19E+065.44E+07 + 99M2 10.561.23E+001.34E+055.07E+073.77E+091.75E+022.35E+041.15E+062.71E+07 + 99M2 14.567.39E-012.77E+046.72E+064.21E+086.75E+015.80E+032.38E+056.41E+06 + 99M2 21.563.47E-014.08E+035.99E+052.91E+072.11E+011.10E+033.52E+048.84E+05 + 99M2 29.001.83E-019.72E+021.00E+053.96E+068.82E+003.22E+028.43E+031.87E+05 + 99M2 44.006.90E-021.33E+028.60E+032.50E+052.61E+006.06E+011.17E+032.05E+04 + 99M2 56.003.80E-024.26E+012.15E+035.18E+041.30E+002.36E+013.83E+025.72E+03 + 99M2 74.001.86E-021.17E+014.44E+028.65E+035.82E-018.14E+001.07E+021.32E+03 + 99M2 107.007.08E-032.19E+005.83E+018.53E+022.04E-012.06E+002.05E+011.95E+02 + 99M2 155.002.64E-034.27E-018.11E+008.92E+017.20E-025.40E-014.09E+002.98E+01 + 99M2 285.005.28E-043.32E-023.78E-012.65E+001.34E-026.58E-023.25E-011.55E+00 + 99M2 500.001.27E-043.74E-032.82E-021.36E-012.89E-031.05E-023.66E-021.23E-01 + 99M3 6.267.57E+001.94E+061.39E+091.34E+113.07E+016.49E+064.25E+103.40E+13 + 99M3 7.265.82E+009.21E+055.24E+084.65E+101.96E+013.10E+061.52E+109.56E+12 + 99M3 9.263.64E+002.72E+051.07E+088.22E+099.39E+009.18E+052.84E+091.21E+12 + 99M3 13.261.69E+004.49E+041.05E+076.42E+083.17E+001.53E+052.41E+085.98E+10 + 99M3 20.266.19E-015.36E+037.09E+053.23E+078.77E-011.84E+041.34E+071.84E+09 + 99M3 29.002.47E-018.88E+027.52E+042.64E+062.96E-013.08E+031.20E+061.03E+08 + 99M3 44.007.92E-021.10E+025.76E+031.47E+058.41E-023.86E+027.53E+043.93E+06 + 99M3 56.003.99E-023.32E+011.33E+032.81E+044.07E-021.16E+021.56E+046.21E+05 + 99M3 74.001.77E-028.31E+002.46E+024.19E+031.76E-022.91E+012.58E+037.67E+04 + 99M3 107.005.90E-031.34E+002.73E+013.46E+025.87E-034.69E+002.51E+025.19E+03 + 99M3 155.001.93E-032.19E-013.08E+002.91E+011.96E-037.52E-012.56E+013.80E+02 + 99M3 285.003.08E-041.18E-029.37E-025.57E-013.28E-043.80E-026.99E-016.39E+00 + 99M3 500.006.03E-058.87E-044.40E-031.80E-026.53E-052.52E-033.00E-021.90E-01 + 99M4 5.621.88E+015.69E+041.11E+097.07E+129.30E+002.21E+056.68E+082.25E+11 + 99M4 6.621.15E+012.49E+043.53E+081.69E+125.50E+009.73E+042.21E+086.57E+10 + 99M4 8.625.10E+006.56E+035.54E+071.71E+112.35E+002.59E+043.77E+079.06E+09 + 99M4 12.621.47E+009.64E+023.82E+066.43E+096.78E-013.83E+033.01E+065.25E+08 + 99M4 19.623.24E-011.05E+021.73E+051.51E+081.57E-014.18E+021.69E+052.01E+07 + 99M4 29.007.95E-021.48E+011.12E+045.72E+064.23E-025.88E+011.37E+041.15E+06 + 99M4 44.001.69E-021.85E+006.17E+021.83E+051.02E-027.28E+009.84E+025.71E+04 + 99M4 56.006.73E-035.53E-011.16E+022.57E+044.41E-032.18E+002.19E+021.03E+04 + 99M4 74.002.29E-031.38E-011.71E+012.72E+031.66E-035.41E-013.94E+011.44E+03 + 99M4 107.005.41E-042.21E-021.40E+001.47E+024.49E-048.62E-024.22E+001.12E+02 + 99M4 155.001.26E-043.58E-031.19E-018.28E+001.18E-041.37E-024.65E-019.00E+00 + 99M4 285.001.16E-051.90E-042.46E-038.74E-021.28E-056.90E-041.36E-021.63E-01 + 99M4 500.001.35E-061.39E-058.90E-051.68E-031.59E-064.52E-055.87E-044.75E-03 + 99M5 5.362.93E+014.27E+042.94E+091.35E+135.20E+009.08E+034.16E+098.55E+13 + 99M5 6.361.74E+011.78E+048.84E+083.01E+123.01E+003.87E+031.26E+091.86E+13 + 99M5 8.367.32E+004.40E+031.30E+082.77E+111.24E+009.89E+021.86E+081.62E+12 + 99M5 12.361.99E+006.00E+028.31E+069.35E+093.49E-011.41E+021.21E+075.05E+10 + 99M5 19.364.13E-016.14E+013.53E+051.99E+087.97E-021.50E+015.24E+059.61E+08 + 99M5 29.009.36E-027.89E+002.05E+046.45E+062.07E-022.03E+003.12E+042.80E+07 + 99M5 44.001.91E-029.44E-011.09E+031.95E+055.05E-032.59E-011.70E+037.60E+05 + 99M5 56.007.48E-032.75E-011.99E+022.62E+042.21E-037.96E-023.15E+029.65E+04 + 99M5 74.002.49E-036.62E-022.80E+012.61E+038.44E-042.06E-024.51E+019.11E+03 + 99M5 107.005.71E-041.01E-022.11E+001.27E+022.33E-043.51E-033.47E+004.19E+02 + 99M5 155.001.30E-041.54E-031.60E-016.34E+006.34E-056.18E-042.65E-012.02E+01 + 99M5 285.001.22E-057.63E-052.44E-035.01E-027.45E-063.94E-053.97E-031.58E-01 + 99M5 500.001.51E-065.72E-066.05E-056.70E-041.09E-063.63E-068.87E-052.13E-03 + 99N+ 50.006.28E-025.45E+013.33E+031.57E+055.60E+002.91E+021.94E+049.85E+05 + 99N+ 70.002.64E-021.09E+014.46E+021.32E+042.08E+006.23E+012.35E+037.50E+04 + 99N+ 100.001.07E-022.05E+005.72E+011.09E+037.40E-011.29E+012.77E+025.52E+03 + 99N+ 150.003.83E-033.23E-016.01E+007.51E+012.30E-012.31E+002.75E+013.32E+02 + 99N+ 200.001.88E-039.14E-021.30E+001.24E+011.01E-017.19E-015.88E+005.09E+01 + 99N+ 500.002.44E-042.67E-031.70E-027.92E-027.86E-032.58E-028.37E-022.91E-01 +100K 143.011.83E-011.08E-012.18E-028.80E-041.39E+014.52E+013.23E+015.56E+00 +100K 143.711.81E-011.10E-012.53E-021.71E-031.37E+014.44E+013.25E+016.40E+00 +100K 145.011.77E-011.13E-013.22E-023.84E-031.34E+014.31E+013.31E+018.02E+00 +100K 148.211.69E-011.21E-014.96E-021.23E-021.26E+014.03E+013.42E+011.19E+01 +100K 152.011.60E-011.28E-017.07E-022.81E-021.17E+013.71E+013.48E+011.62E+01 +100K 156.001.51E-011.34E-019.24E-025.05E-021.09E+013.41E+013.48E+012.03E+01 +100K 162.001.39E-011.40E-011.23E-019.25E-029.75E+003.03E+013.43E+012.52E+01 +100K 170.001.25E-011.44E-011.59E-011.57E-018.51E+002.59E+013.27E+012.98E+01 +100K 182.001.08E-011.44E-011.99E-012.56E-017.02E+002.08E+012.94E+013.32E+01 +100K 195.009.31E-021.41E-012.28E-013.48E-015.78E+001.67E+012.56E+013.36E+01 +100K 212.007.77E-021.32E-012.46E-014.36E-014.56E+001.28E+012.11E+013.13E+01 +100K 225.006.84E-021.25E-012.51E-014.77E-013.86E+001.06E+011.82E+012.87E+01 +100K 242.005.85E-021.15E-012.48E-015.04E-013.15E+008.40E+001.49E+012.49E+01 +100K 265.004.84E-021.03E-012.35E-015.08E-012.44E+006.31E+001.15E+012.02E+01 +100K 290.004.01E-029.11E-022.17E-014.86E-011.90E+004.76E+008.82E+001.60E+01 +100K 355.002.67E-026.75E-021.69E-013.90E-011.09E+002.55E+004.76E+008.83E+00 +100K 440.001.76E-024.82E-021.21E-012.77E-016.05E-011.34E+002.44E+004.48E+00 +100K 530.001.24E-023.57E-028.86E-021.96E-013.65E-017.75E-011.38E+002.45E+00 +100K 640.008.86E-032.63E-026.34E-021.35E-012.19E-014.52E-017.77E-011.33E+00 +100K 870.005.21E-031.58E-023.63E-027.16E-029.63E-021.94E-013.16E-015.09E-01 +100K 1150.003.27E-039.91E-032.17E-024.02E-024.55E-029.26E-021.45E-012.21E-01 +100K 1400.002.37E-037.09E-031.51E-022.69E-022.68E-025.58E-028.55E-021.26E-01 +100K 1650.001.81E-035.34E-031.11E-021.93E-021.72E-023.68E-025.57E-028.00E-02 +100L1 28.574.65E-011.32E+021.39E+031.61E+032.98E+022.19E+043.77E+051.62E+06 +100L1 29.274.51E-011.19E+021.38E+032.58E+032.79E+021.96E+043.32E+051.56E+06 +100L1 30.574.22E-019.90E+011.33E+034.15E+032.45E+021.60E+042.65E+051.43E+06 +100L1 33.773.63E-016.53E+011.11E+036.24E+031.82E+021.01E+041.59E+051.06E+06 +100L1 37.573.07E-014.16E+018.22E+026.42E+031.33E+026.22E+039.16E+046.93E+05 +100L1 41.002.66E-012.87E+016.16E+025.66E+031.03E+024.18E+035.83E+044.69E+05 +100L1 47.002.10E-011.60E+013.73E+023.98E+036.86E+012.27E+032.89E+042.43E+05 +100L1 55.001.58E-018.19E+001.98E+022.31E+034.32E+011.13E+031.29E+041.09E+05 +100L1 67.001.09E-013.58E+008.58E+011.03E+032.42E+014.76E+024.72E+033.82E+04 +100L1 80.007.74E-021.73E+003.95E+014.66E+021.44E+012.22E+021.94E+031.47E+04 +100L1 97.005.26E-028.20E-011.69E+011.89E+028.21E+009.89E+017.46E+025.15E+03 +100L1 110.004.07E-025.16E-019.72E+001.03E+025.70E+005.88E+014.04E+022.61E+03 +100L1 127.003.03E-023.12E-015.22E+005.16E+013.76E+003.28E+012.03E+021.20E+03 +100L1 150.002.15E-021.81E-012.58E+002.32E+012.33E+001.69E+019.24E+014.95E+02 +100L1 175.001.56E-021.14E-011.38E+001.12E+011.50E+009.29E+004.54E+012.21E+02 +100L1 240.008.21E-034.81E-024.10E-012.64E+006.11E-012.84E+001.11E+014.41E+01 +100L1 325.004.52E-032.31E-021.43E-017.26E-012.61E-019.61E-013.09E+001.01E+01 +100L1 420.002.79E-031.31E-026.43E-022.66E-011.29E-014.02E-011.11E+003.13E+00 +100L1 530.001.84E-038.05E-033.29E-021.15E-016.80E-021.89E-014.60E-011.14E+00 +100L1 760.009.91E-043.96E-031.28E-023.55E-022.56E-026.26E-021.29E-012.68E-01 +100L11050.005.84E-042.16E-035.97E-031.40E-021.07E-022.47E-024.54E-028.26E-02 +100L11550.003.14E-041.06E-032.55E-035.12E-033.75E-038.56E-031.43E-022.30E-02 +100L2 27.661.17E+004.88E+033.05E+052.56E+064.22E+019.33E+025.17E+035.25E+03 +100L2 28.361.10E+004.32E+032.66E+052.44E+063.94E+018.52E+025.16E+038.44E+03 +100L2 29.669.82E-013.48E+032.08E+052.19E+063.45E+017.26E+025.03E+031.36E+04 +100L2 32.867.62E-012.13E+031.20E+051.54E+062.55E+015.04E+024.28E+032.06E+04 +100L2 36.665.78E-011.26E+036.60E+049.63E+051.85E+013.41E+023.28E+032.14E+04 +100L2 41.004.33E-017.38E+023.58E+045.60E+051.33E+012.28E+022.35E+031.83E+04 +100L2 47.003.03E-013.86E+021.70E+042.75E+058.96E+001.39E+021.49E+031.30E+04 +100L2 55.001.99E-011.84E+027.22E+031.16E+055.68E+007.89E+018.46E+027.81E+03 +100L2 67.001.17E-017.35E+012.47E+033.79E+043.21E+003.88E+013.98E+023.67E+03 +100L2 80.007.18E-023.25E+019.50E+021.36E+041.93E+002.05E+011.98E+021.75E+03 +100L2 97.004.22E-021.35E+013.39E+024.41E+031.12E+001.03E+019.08E+017.47E+02 +100L2 110.002.98E-027.69E+001.74E+022.11E+037.82E-016.62E+005.45E+014.23E+02 +100L2 127.002.00E-024.06E+008.20E+019.13E+025.22E-013.99E+003.03E+012.19E+02 +100L2 150.001.26E-021.96E+003.46E+013.47E+023.27E-012.24E+001.54E+011.01E+02 +100L2 175.008.28E-031.01E+001.58E+011.43E+022.13E-011.31E+008.23E+004.95E+01 +100L2 240.003.51E-032.68E-013.27E+002.42E+018.91E-024.50E-012.32E+001.15E+01 +100L2 325.001.57E-037.85E-027.66E-014.65E+003.89E-021.65E-017.07E-012.92E+00 +100L2 420.008.12E-042.90E-022.36E-011.22E+001.94E-027.22E-022.66E-019.47E-01 +100L2 530.004.53E-041.21E-028.49E-023.82E-011.03E-023.47E-021.13E-013.52E-01 +100L2 760.001.90E-043.37E-031.90E-027.03E-023.87E-031.15E-023.14E-028.17E-02 +100L21050.009.00E-051.14E-035.43E-031.73E-021.60E-034.42E-031.06E-022.39E-02 +100L21550.003.75E-053.38E-041.35E-033.68E-035.48E-041.45E-033.05E-036.01E-03 +100L3 21.872.93E+001.37E+041.16E+061.39E+072.75E+004.56E+042.52E+071.72E+09 +100L3 22.572.68E+001.17E+049.56E+051.24E+072.50E+003.92E+042.04E+071.35E+09 +100L3 23.872.28E+008.83E+036.84E+059.93E+062.11E+002.96E+041.40E+078.84E+08 +100L3 27.071.59E+004.70E+033.23E+055.49E+061.44E+001.58E+046.01E+063.42E+08 +100L3 30.871.09E+002.43E+031.48E+052.72E+069.62E-018.22E+032.50E+061.27E+08 +100L3 41.004.69E-015.84E+022.72E+045.12E+054.05E-012.00E+033.84E+051.53E+07 +100L3 47.003.11E-012.95E+021.21E+042.20E+052.67E-011.01E+031.57E+055.56E+06 +100L3 55.001.93E-011.34E+024.74E+038.14E+041.66E-014.64E+025.65E+041.75E+06 +100L3 67.001.05E-015.02E+011.47E+032.29E+049.12E-021.74E+021.59E+044.15E+05 +100L3 80.006.06E-022.08E+015.15E+027.25E+035.34E-027.21E+015.14E+031.16E+05 +100L3 97.003.32E-028.00E+001.65E+022.06E+032.99E-022.78E+011.53E+032.94E+04 +100L3 110.002.24E-024.30E+007.89E+019.04E+022.05E-021.49E+017.01E+021.22E+04 +100L3 127.001.43E-022.12E+003.40E+013.52E+021.33E-027.32E+002.90E+024.48E+03 +100L3 150.008.51E-039.39E-011.29E+011.19E+028.12E-033.22E+001.05E+021.43E+03 +100L3 175.005.27E-034.44E-015.28E+004.34E+015.13E-031.51E+004.17E+015.03E+02 +100L3 240.001.99E-039.70E-028.67E-015.66E+002.02E-033.20E-016.49E+006.23E+01 +100L3 325.007.96E-042.31E-021.59E-018.37E-018.31E-047.30E-021.14E+008.96E+00 +100L3 420.003.74E-047.08E-033.93E-021.75E-013.96E-042.12E-022.73E-011.83E+00 +100L3 530.001.92E-042.49E-031.15E-024.47E-022.04E-046.96E-037.66E-024.52E-01 +100L3 760.007.07E-055.27E-041.89E-036.12E-037.44E-051.29E-031.13E-025.61E-02 +100L31050.003.06E-051.43E-044.23E-041.18E-033.13E-053.01E-042.14E-039.34E-03 +100L31550.001.21E-053.44E-058.26E-051.95E-041.19E-055.93E-053.12E-041.18E-03 +100M1 8.198.31E-018.75E+034.57E+054.44E+063.04E+032.65E+065.41E+082.76E+10 +100M1 9.197.38E-015.35E+032.83E+054.18E+062.15E+031.51E+062.58E+081.27E+10 +100M1 11.195.86E-012.32E+031.23E+052.47E+061.19E+035.78E+057.35E+073.36E+09 +100M1 15.193.85E-016.33E+023.30E+047.79E+054.80E+021.32E+051.08E+074.17E+08 +100M1 22.192.11E-011.27E+026.15E+031.50E+051.55E+022.15E+041.06E+063.16E+07 +100M1 29.001.33E-014.05E+011.82E+034.25E+047.00E+016.11E+032.15E+055.23E+06 +100M1 44.006.14E-026.87E+002.64E+025.38E+032.04E+018.92E+021.93E+043.35E+05 +100M1 56.003.84E-022.48E+008.50E+011.56E+031.00E+013.01E+024.99E+037.12E+04 +100M1 74.002.19E-027.86E-012.29E+013.63E+024.41E+008.80E+011.09E+031.24E+04 +100M1 107.001.02E-021.86E-014.12E+005.25E+011.50E+001.83E+011.58E+021.32E+03 +100M1 155.004.71E-035.08E-027.90E-017.81E+005.17E-014.03E+002.50E+011.54E+02 +100M1 285.001.37E-038.65E-036.89E-024.20E-019.18E-023.98E-011.52E+005.93E+00 +100M1 500.004.78E-042.32E-031.07E-024.16E-021.94E-025.79E-021.53E-014.13E-01 +100M2 7.781.70E+006.66E+053.94E+083.19E+104.95E+021.03E+055.43E+065.64E+07 +100M2 8.781.51E+003.66E+051.81E+081.41E+103.45E+025.95E+043.04E+064.96E+07 +100M2 10.781.18E+001.33E+054.87E+073.52E+091.87E+022.39E+041.12E+062.55E+07 +100M2 14.787.17E-012.83E+046.70E+064.09E+087.33E+016.03E+032.40E+056.25E+06 +100M2 21.783.43E-014.26E+036.15E+052.93E+072.33E+011.16E+033.64E+048.92E+05 +100M2 29.001.86E-011.07E+031.09E+054.27E+061.00E+013.56E+029.16E+032.00E+05 +100M2 44.007.09E-021.46E+029.38E+032.70E+052.96E+006.69E+011.28E+032.20E+04 +100M2 56.003.92E-024.69E+012.34E+035.60E+041.47E+002.61E+014.17E+026.15E+03 +100M2 74.001.94E-021.29E+014.85E+029.36E+036.61E-018.99E+001.17E+021.42E+03 +100M2 107.007.41E-032.41E+006.38E+019.25E+022.32E-012.28E+002.24E+012.11E+02 +100M2 155.002.78E-034.71E-018.89E+009.70E+018.19E-025.99E-014.48E+003.23E+01 +100M2 285.005.62E-043.67E-024.16E-012.90E+001.52E-027.32E-023.57E-011.69E+00 +100M2 500.001.36E-044.15E-033.11E-021.50E-013.30E-031.17E-024.05E-021.35E-01 +100M3 6.407.26E+001.87E+061.29E+091.20E+113.02E+016.44E+064.06E+103.16E+13 +100M3 7.405.62E+009.03E+054.95E+084.26E+101.95E+013.12E+061.49E+109.12E+12 +100M3 9.403.54E+002.72E+051.04E+087.76E+099.45E+009.45E+052.86E+091.20E+12 +100M3 13.401.67E+004.60E+041.05E+076.26E+083.23E+001.61E+052.51E+086.14E+10 +100M3 20.406.18E-015.59E+037.24E+053.23E+079.06E-011.98E+041.43E+071.94E+09 +100M3 29.002.52E-019.61E+028.02E+042.77E+063.13E-013.42E+031.34E+061.15E+08 +100M3 44.008.12E-021.20E+026.14E+031.55E+058.88E-024.29E+028.39E+044.38E+06 +100M3 56.004.10E-023.59E+011.41E+032.96E+044.29E-021.29E+021.73E+046.91E+05 +100M3 74.001.82E-028.99E+002.62E+024.41E+031.86E-023.24E+012.87E+038.52E+04 +100M3 107.006.10E-031.45E+002.90E+013.64E+026.19E-035.20E+002.78E+025.75E+03 +100M3 155.002.00E-032.37E-013.28E+003.07E+012.06E-038.34E-012.84E+014.20E+02 +100M3 285.003.22E-041.27E-029.99E-025.89E-013.46E-044.21E-027.73E-017.04E+00 +100M3 500.006.31E-059.55E-044.69E-031.91E-026.88E-052.78E-033.31E-022.09E-01 +100M4 5.751.80E+015.49E+041.02E+096.36E+129.14E+002.20E+056.37E+082.08E+11 +100M4 6.751.12E+012.45E+043.33E+081.57E+125.47E+009.87E+042.16E+086.25E+10 +100M4 8.755.01E+006.61E+035.40E+071.65E+112.37E+002.69E+043.80E+078.93E+09 +100M4 12.751.47E+009.96E+023.85E+066.48E+096.95E-014.07E+033.13E+065.37E+08 +100M4 19.753.29E-011.11E+021.80E+051.57E+081.64E-014.54E+021.80E+052.11E+07 +100M4 29.008.32E-021.62E+011.22E+046.30E+064.51E-026.61E+011.52E+041.27E+06 +100M4 44.001.77E-022.02E+006.72E+022.02E+051.09E-028.18E+001.10E+036.31E+04 +100M4 56.007.09E-036.05E-011.27E+022.83E+044.72E-032.44E+002.44E+021.13E+04 +100M4 74.002.42E-031.51E-011.87E+012.99E+031.78E-036.08E-014.39E+011.60E+03 +100M4 107.005.74E-042.43E-021.53E+001.61E+024.82E-049.69E-024.69E+001.24E+02 +100M4 155.001.34E-043.93E-031.30E-019.12E+001.27E-041.55E-025.17E-019.97E+00 +100M4 285.001.24E-052.09E-042.68E-039.64E-021.38E-057.75E-041.52E-021.81E-01 +100M4 500.001.44E-061.52E-059.72E-051.85E-031.72E-065.07E-056.55E-045.28E-03 +100M5 5.492.81E+014.01E+042.75E+091.22E+135.10E+008.72E+034.01E+097.96E+13 +100M5 6.491.68E+011.70E+048.50E+082.81E+122.98E+003.78E+031.24E+091.78E+13 +100M5 8.497.19E+004.30E+031.29E+082.69E+111.25E+009.87E+021.89E+081.62E+12 +100M5 12.491.99E+006.01E+028.52E+069.45E+093.57E-011.44E+021.27E+075.26E+10 +100M5 19.494.20E-016.27E+013.72E+052.07E+088.25E-021.57E+015.65E+051.03E+09 +100M5 29.009.77E-028.32E+002.26E+047.08E+062.19E-022.17E+003.51E+043.18E+07 +100M5 44.002.01E-029.97E-011.20E+032.14E+055.35E-032.78E-011.91E+038.61E+05 +100M5 56.007.86E-032.91E-012.19E+022.87E+042.34E-038.53E-023.55E+021.09E+05 +100M5 74.002.62E-037.01E-023.08E+012.86E+038.96E-042.20E-025.08E+011.03E+04 +100M5 107.006.04E-041.07E-022.33E+001.40E+022.48E-043.76E-033.90E+004.73E+02 +100M5 155.001.38E-041.63E-031.76E-016.94E+006.74E-056.61E-042.98E-012.27E+01 +100M5 285.001.28E-058.14E-052.69E-035.49E-027.94E-064.22E-054.45E-031.78E-01 +100M5 500.001.63E-066.11E-066.62E-057.34E-041.16E-063.89E-069.90E-052.39E-03 +100N+ 50.006.47E-025.99E+013.65E+031.75E+056.28E+003.25E+022.18E+041.11E+06 +100N+ 70.002.72E-021.19E+014.88E+021.46E+042.33E+006.94E+012.63E+038.43E+04 +100N+ 100.001.10E-022.26E+006.26E+011.20E+038.29E-011.43E+013.08E+026.17E+03 +100N+ 150.003.97E-033.56E-016.59E+008.23E+012.57E-012.56E+003.05E+013.69E+02 +100N+ 200.001.96E-031.01E-011.43E+001.36E+011.13E-017.98E-016.51E+005.64E+01 +100N+ 500.002.58E-042.95E-031.88E-028.73E-028.79E-032.86E-029.23E-023.20E-01 +101K 146.631.74E-011.02E-012.08E-028.22E-041.42E+014.41E+013.04E+015.08E+00 +101K 147.331.72E-011.04E-012.41E-021.58E-031.40E+014.33E+013.06E+015.84E+00 +101K 148.631.69E-011.07E-013.04E-023.52E-031.37E+014.22E+013.12E+017.29E+00 +101K 151.831.61E-011.15E-014.67E-021.12E-021.29E+013.94E+013.22E+011.08E+01 +101K 155.631.53E-011.22E-016.64E-022.56E-021.20E+013.64E+013.28E+011.47E+01 +101K 160.001.44E-011.28E-018.87E-024.81E-021.11E+013.34E+013.30E+011.87E+01 +101K 166.001.33E-011.34E-011.18E-018.70E-029.98E+002.97E+013.25E+012.32E+01 +101K 174.001.20E-011.38E-011.51E-011.47E-018.74E+002.55E+013.11E+012.74E+01 +101K 186.001.04E-011.39E-011.91E-012.39E-017.24E+002.07E+012.81E+013.07E+01 +101K 199.009.02E-021.36E-012.19E-013.27E-015.98E+001.67E+012.47E+013.12E+01 +101K 216.007.57E-021.29E-012.38E-014.12E-014.75E+001.28E+012.05E+012.93E+01 +101K 229.006.68E-021.22E-012.43E-014.53E-014.03E+001.07E+011.77E+012.70E+01 +101K 246.005.75E-021.14E-012.42E-014.82E-013.30E+008.51E+001.46E+012.37E+01 +101K 269.004.77E-021.02E-012.32E-014.90E-012.57E+006.43E+001.14E+011.94E+01 +101K 295.003.95E-029.05E-022.15E-014.72E-011.99E+004.82E+008.70E+001.53E+01 +101K 360.002.65E-026.80E-021.69E-013.85E-011.15E+002.62E+004.77E+008.65E+00 +101K 445.001.77E-024.91E-021.23E-012.77E-016.42E-011.39E+002.48E+004.46E+00 +101K 540.001.24E-023.61E-028.91E-021.95E-013.79E-017.88E-011.37E+002.40E+00 +101K 650.008.90E-032.68E-026.44E-021.35E-012.30E-014.66E-017.87E-011.33E+00 +101K 880.005.30E-031.63E-023.73E-027.32E-021.02E-012.02E-013.26E-015.18E-01 +101K 1150.003.40E-031.04E-022.29E-024.23E-024.96E-029.98E-021.55E-012.34E-01 +101K 1400.002.46E-037.48E-031.59E-022.83E-022.91E-026.01E-029.14E-021.33E-01 +101K 1650.001.89E-035.64E-031.17E-022.03E-021.86E-023.97E-025.96E-028.51E-02 +101L1 29.384.37E-011.27E+021.28E+031.42E+033.04E+022.12E+043.51E+051.45E+06 +101L1 30.084.24E-011.15E+021.27E+032.27E+032.86E+021.90E+043.10E+051.40E+06 +101L1 31.383.98E-019.66E+011.23E+033.65E+032.52E+021.56E+042.49E+051.29E+06 +101L1 34.583.45E-016.46E+011.04E+035.55E+031.89E+021.00E+041.51E+059.67E+05 +101L1 38.382.92E-014.17E+017.82E+025.81E+031.39E+026.23E+038.85E+046.44E+05 +101L1 41.002.63E-013.16E+016.33E+025.37E+031.14E+024.62E+036.30E+044.82E+05 +101L1 47.002.08E-011.77E+013.89E+023.93E+037.63E+012.50E+033.12E+042.53E+05 +101L1 55.001.58E-019.13E+002.10E+022.34E+034.80E+011.24E+031.40E+041.15E+05 +101L1 67.001.09E-014.01E+009.19E+011.07E+032.69E+015.24E+025.12E+034.05E+04 +101L1 80.007.76E-021.95E+004.27E+014.89E+021.60E+012.45E+022.10E+031.56E+04 +101L1 97.005.30E-029.23E-011.84E+012.00E+029.12E+001.09E+028.10E+025.51E+03 +101L1 110.004.11E-025.80E-011.06E+011.10E+026.33E+006.47E+014.39E+022.79E+03 +101L1 127.003.07E-023.50E-015.73E+005.55E+014.18E+003.61E+012.20E+021.29E+03 +101L1 150.002.18E-022.02E-012.84E+002.51E+012.59E+001.86E+011.01E+025.33E+02 +101L1 175.001.59E-021.26E-011.51E+001.21E+011.66E+001.02E+014.93E+012.38E+02 +101L1 240.008.40E-035.27E-024.51E-012.88E+006.79E-013.11E+001.21E+014.76E+01 +101L1 325.004.65E-032.51E-021.57E-017.92E-012.90E-011.05E+003.36E+001.09E+01 +101L1 420.002.89E-031.41E-027.02E-022.90E-011.42E-014.41E-011.21E+003.38E+00 +101L1 530.001.91E-038.66E-033.58E-021.25E-017.53E-022.07E-015.01E-011.23E+00 +101L1 760.001.03E-034.25E-031.39E-023.85E-022.83E-026.86E-021.41E-012.90E-01 +101L11050.006.10E-042.31E-036.45E-031.51E-021.18E-022.70E-024.94E-028.95E-02 +101L11550.003.29E-041.13E-032.75E-035.52E-034.12E-039.37E-031.56E-022.50E-02 +101L2 28.461.11E+004.63E+032.78E+052.25E+064.38E+019.08E+024.83E+034.69E+03 +101L2 29.161.05E+004.13E+032.43E+052.14E+064.11E+018.33E+024.82E+037.49E+03 +101L2 30.469.38E-013.34E+031.92E+051.93E+063.61E+017.12E+024.71E+031.21E+04 +101L2 33.667.34E-012.07E+031.12E+051.38E+062.69E+015.00E+024.05E+031.85E+04 +101L2 37.465.61E-011.24E+036.26E+048.77E+051.97E+013.41E+023.14E+031.96E+04 +101L2 41.004.45E-018.06E+023.83E+045.71E+051.51E+012.47E+022.42E+031.76E+04 +101L2 47.003.12E-014.22E+021.82E+042.84E+051.01E+011.51E+021.55E+031.29E+04 +101L2 55.002.06E-012.02E+027.75E+031.21E+056.43E+008.59E+018.90E+027.90E+03 +101L2 67.001.21E-018.04E+012.66E+033.99E+043.64E+004.23E+014.22E+023.79E+03 +101L2 80.007.48E-023.56E+011.03E+031.44E+042.19E+002.24E+012.11E+021.82E+03 +101L2 97.004.41E-021.48E+013.67E+024.69E+031.26E+001.13E+019.74E+017.86E+02 +101L2 110.003.12E-028.44E+001.89E+022.25E+038.86E-017.26E+005.86E+014.47E+02 +101L2 127.002.10E-024.46E+008.90E+019.77E+025.92E-014.39E+003.27E+012.32E+02 +101L2 150.001.33E-022.15E+003.76E+013.73E+023.71E-012.46E+001.66E+011.08E+02 +101L2 175.008.74E-031.11E+001.72E+011.54E+022.42E-011.45E+008.92E+005.30E+01 +101L2 240.003.73E-032.95E-013.57E+002.61E+011.01E-014.98E-012.52E+001.24E+01 +101L2 325.001.68E-038.67E-028.40E-015.05E+004.42E-021.83E-017.73E-013.17E+00 +101L2 420.008.70E-043.20E-022.60E-011.33E+002.20E-028.02E-022.92E-011.03E+00 +101L2 530.004.88E-041.34E-029.35E-024.18E-011.17E-023.86E-021.24E-013.85E-01 +101L2 760.002.05E-043.74E-032.10E-027.73E-024.41E-031.29E-023.47E-028.99E-02 +101L21050.009.75E-051.27E-036.03E-031.91E-021.82E-034.96E-031.17E-022.64E-02 +101L21550.004.11E-053.77E-041.50E-034.08E-036.23E-041.63E-033.40E-036.67E-03 +101L3 22.362.81E+001.31E+041.07E+061.25E+072.70E+004.50E+042.40E+071.60E+09 +101L3 23.062.57E+001.13E+048.87E+051.12E+072.46E+003.89E+041.96E+071.26E+09 +101L3 24.362.19E+008.59E+036.38E+058.97E+062.08E+002.96E+041.35E+078.33E+08 +101L3 27.561.54E+004.62E+033.07E+055.03E+061.43E+001.60E+045.91E+063.29E+08 +101L3 31.361.06E+002.41E+031.42E+052.53E+069.63E-018.40E+032.50E+061.24E+08 +101L3 41.004.81E-016.29E+022.87E+045.26E+054.26E-012.21E+034.25E+051.68E+07 +101L3 47.003.19E-013.17E+021.28E+042.27E+052.81E-011.12E+031.74E+056.10E+06 +101L3 55.001.98E-011.45E+025.01E+038.43E+041.74E-015.12E+026.25E+041.92E+06 +101L3 67.001.08E-015.40E+011.55E+032.38E+049.59E-021.92E+021.76E+044.56E+05 +101L3 80.006.24E-022.24E+015.44E+027.55E+035.61E-027.97E+015.68E+031.27E+05 +101L3 97.003.43E-028.61E+001.75E+022.15E+033.14E-023.06E+011.69E+033.23E+04 +101L3 110.002.31E-024.63E+008.34E+019.43E+022.15E-021.64E+017.73E+021.33E+04 +101L3 127.001.48E-022.28E+003.60E+013.68E+021.40E-028.08E+003.19E+024.90E+03 +101L3 150.008.80E-031.01E+001.36E+011.24E+028.53E-033.55E+001.16E+021.56E+03 +101L3 175.005.46E-034.77E-015.59E+004.55E+015.39E-031.66E+004.59E+015.51E+02 +101L3 240.002.06E-031.04E-019.19E-015.94E+002.12E-033.53E-017.13E+006.82E+01 +101L3 325.008.27E-042.48E-021.68E-018.81E-018.73E-048.04E-021.25E+009.79E+00 +101L3 420.003.89E-047.58E-034.16E-021.85E-014.15E-042.33E-022.99E-012.00E+00 +101L3 530.002.00E-042.66E-031.22E-024.72E-022.13E-047.64E-038.40E-024.94E-01 +101L3 760.007.37E-055.61E-042.01E-036.48E-037.79E-051.41E-031.24E-026.13E-02 +101L31050.003.18E-051.52E-044.48E-041.26E-033.27E-053.27E-042.35E-031.02E-02 +101L31550.001.26E-053.62E-058.73E-052.07E-041.24E-056.40E-053.40E-041.28E-03 +101M1 8.427.83E-018.60E+034.39E+054.09E+063.12E+032.58E+065.05E+082.49E+10 +101M1 9.426.98E-015.33E+032.75E+053.91E+062.23E+031.49E+062.45E+081.17E+10 +101M1 11.425.57E-012.35E+031.22E+052.37E+061.25E+035.83E+057.19E+073.19E+09 +101M1 15.423.70E-016.57E+023.34E+047.69E+055.11E+021.37E+051.10E+074.12E+08 +101M1 22.422.06E-011.35E+026.35E+031.51E+051.68E+022.28E+041.11E+063.23E+07 +101M1 30.001.24E-013.91E+011.69E+033.84E+047.06E+015.80E+031.95E+054.57E+06 +101M1 45.005.88E-027.01E+002.59E+025.14E+032.12E+018.94E+021.88E+043.18E+05 +101M1 57.003.72E-022.60E+008.57E+011.53E+031.06E+013.08E+024.99E+036.97E+04 +101M1 75.002.15E-028.43E-012.37E+013.67E+024.73E+009.20E+011.12E+031.25E+04 +101M1 108.001.01E-022.03E-014.38E+005.46E+011.63E+001.94E+011.66E+021.37E+03 +101M1 155.004.80E-035.70E-028.78E-018.57E+005.75E-014.45E+002.74E+011.69E+02 +101M1 285.001.41E-039.51E-037.64E-024.63E-011.02E-014.39E-011.66E+006.46E+00 +101M1 510.004.79E-042.41E-031.11E-024.23E-022.04E-025.97E-021.55E-014.12E-01 +101M2 8.001.58E+006.35E+053.60E+082.81E+105.17E+021.00E+055.10E+065.07E+07 +101M2 9.001.42E+003.55E+051.69E+081.27E+103.64E+025.91E+042.90E+064.53E+07 +101M2 11.001.12E+001.32E+054.68E+073.27E+092.00E+022.42E+041.10E+062.39E+07 +101M2 15.006.94E-012.88E+046.67E+063.96E+087.97E+016.26E+032.42E+056.08E+06 +101M2 22.003.39E-014.45E+036.31E+052.95E+072.57E+011.23E+033.76E+048.98E+05 +101M2 30.001.76E-019.96E+029.75E+043.67E+061.03E+013.43E+028.47E+031.78E+05 +101M2 45.006.90E-021.44E+028.99E+032.51E+053.15E+006.77E+011.25E+032.10E+04 +101M2 57.003.88E-024.75E+012.31E+035.40E+041.59E+002.69E+014.18E+026.02E+03 +101M2 75.001.94E-021.33E+014.91E+029.30E+037.24E-019.45E+001.20E+021.43E+03 +101M2 108.007.57E-032.55E+006.63E+019.47E+022.57E-012.44E+002.35E+012.17E+02 +101M2 155.002.93E-035.20E-019.74E+001.06E+029.32E-026.63E-014.90E+003.51E+01 +101M2 285.006.00E-044.07E-024.57E-013.17E+001.73E-028.14E-023.93E-011.84E+00 +101M2 510.001.40E-044.29E-033.16E-021.49E-013.56E-031.23E-024.17E-021.36E-01 +101M3 6.556.97E+001.81E+061.19E+091.07E+112.98E+016.39E+063.88E+102.94E+13 +101M3 7.555.42E+008.85E+054.67E+083.90E+101.94E+013.14E+061.45E+108.70E+12 +101M3 9.553.45E+002.72E+051.00E+087.31E+099.51E+009.71E+052.87E+091.18E+12 +101M3 13.551.64E+004.71E+041.05E+076.10E+083.30E+001.69E+052.60E+086.30E+10 +101M3 20.556.16E-015.84E+037.39E+053.23E+079.35E-012.12E+041.52E+072.05E+09 +101M3 30.002.35E-018.78E+026.93E+042.30E+062.98E-013.21E+031.19E+069.83E+07 +101M3 45.007.81E-021.16E+025.70E+031.39E+058.75E-024.26E+028.07E+044.10E+06 +101M3 57.004.00E-023.56E+011.35E+032.75E+044.29E-021.32E+021.72E+046.71E+05 +101M3 75.001.80E-029.10E+002.58E+024.23E+031.89E-023.36E+012.93E+038.55E+04 +101M3 108.006.13E-031.50E+002.92E+013.60E+026.35E-035.52E+002.92E+025.95E+03 +101M3 155.002.07E-032.56E-013.49E+003.23E+012.18E-039.25E-013.15E+014.64E+02 +101M3 285.003.34E-041.37E-021.06E-016.23E-013.65E-044.66E-028.55E-017.76E+00 +101M3 510.006.24E-059.40E-044.51E-031.81E-026.85E-052.79E-033.28E-022.04E-01 +101M4 5.891.73E+015.32E+049.45E+085.73E+128.99E+002.20E+056.08E+081.93E+11 +101M4 6.891.08E+012.41E+043.14E+081.46E+125.44E+001.00E+052.11E+085.95E+10 +101M4 8.894.91E+006.67E+035.26E+071.59E+112.39E+002.79E+043.83E+078.79E+09 +101M4 12.891.47E+001.03E+033.89E+066.53E+097.13E-014.34E+033.26E+065.48E+08 +101M4 19.893.35E-011.17E+021.86E+051.64E+081.70E-014.92E+021.92E+052.22E+07 +101M4 30.007.69E-021.49E+011.05E+045.23E+064.29E-026.26E+011.37E+041.10E+06 +101M4 45.001.71E-021.97E+006.26E+021.84E+051.07E-028.21E+001.06E+035.93E+04 +101M4 57.006.98E-036.07E-011.22E+022.69E+044.75E-032.51E+002.43E+021.11E+04 +101M4 75.002.43E-031.55E-011.85E+012.96E+031.82E-036.39E-014.49E+011.60E+03 +101M4 108.005.89E-042.54E-021.56E+001.65E+025.00E-041.04E-014.93E+001.28E+02 +101M4 155.001.43E-044.32E-031.42E-011.00E+011.37E-041.74E-025.75E-011.10E+01 +101M4 285.001.32E-052.30E-042.92E-031.06E-011.49E-058.71E-041.69E-022.00E-01 +101M4 510.001.46E-061.52E-059.50E-051.78E-031.73E-065.17E-056.56E-045.21E-03 +101M5 5.612.69E+013.76E+042.59E+091.11E+135.00E+008.37E+033.86E+097.41E+13 +101M5 6.611.63E+011.62E+048.18E+082.63E+122.95E+003.69E+031.22E+091.71E+13 +101M5 8.617.07E+004.21E+031.28E+082.61E+111.26E+009.86E+021.93E+081.62E+12 +101M5 12.611.99E+006.02E+028.74E+069.54E+093.64E-011.47E+021.33E+075.47E+10 +101M5 19.614.26E-016.39E+013.91E+052.15E+088.53E-021.63E+016.08E+051.11E+09 +101M5 30.008.98E-027.38E+001.96E+045.83E+062.07E-021.97E+003.12E+042.68E+07 +101M5 45.001.93E-029.38E-011.12E+031.94E+055.25E-032.67E-011.84E+038.03E+05 +101M5 57.007.69E-032.81E-012.13E+022.71E+042.34E-038.38E-023.53E+021.06E+05 +101M5 75.002.61E-036.92E-023.09E+012.81E+039.07E-042.21E-025.20E+011.04E+04 +101M5 108.006.14E-041.08E-022.40E+001.42E+022.55E-043.86E-034.11E+004.94E+02 +101M5 155.001.46E-041.73E-031.94E-017.60E+007.17E-057.08E-043.34E-012.56E+01 +101M5 285.001.36E-058.66E-052.95E-036.01E-028.45E-064.51E-054.98E-031.99E-01 +101M5 510.001.62E-065.98E-066.38E-056.92E-041.16E-063.84E-069.67E-052.31E-03 +102K 150.331.66E-019.75E-021.99E-027.69E-041.46E+014.31E+012.87E+014.65E+00 +102K 151.031.64E-019.91E-022.29E-021.47E-031.44E+014.24E+012.89E+015.33E+00 +102K 152.331.61E-011.02E-012.89E-023.24E-031.40E+014.13E+012.95E+016.63E+00 +102K 155.531.54E-011.09E-014.41E-021.02E-021.32E+013.87E+013.04E+019.77E+00 +102K 159.331.46E-011.16E-016.26E-022.33E-021.23E+013.58E+013.10E+011.33E+01 +102K 163.001.39E-011.21E-018.03E-024.02E-021.16E+013.33E+013.12E+011.64E+01 +102K 169.001.29E-011.27E-011.08E-017.50E-021.04E+012.97E+013.09E+012.07E+01 +102K 177.001.17E-011.32E-011.41E-011.30E-019.16E+002.57E+012.98E+012.48E+01 +102K 189.001.02E-011.34E-011.80E-012.16E-017.61E+002.09E+012.72E+012.82E+01 +102K 202.008.84E-021.32E-012.09E-013.01E-016.31E+001.69E+012.40E+012.90E+01 +102K 219.007.45E-021.26E-012.30E-013.85E-015.02E+001.31E+012.01E+012.77E+01 +102K 232.006.59E-021.21E-012.36E-014.28E-014.27E+001.09E+011.75E+012.57E+01 +102K 249.005.69E-021.13E-012.37E-014.61E-013.50E+008.75E+001.45E+012.28E+01 +102K 272.004.75E-021.02E-012.29E-014.73E-012.74E+006.64E+001.14E+011.88E+01 +102K 300.003.89E-029.01E-022.12E-014.59E-012.09E+004.90E+008.60E+001.48E+01 +102K 365.002.64E-026.86E-021.70E-013.80E-011.21E+002.69E+004.78E+008.48E+00 +102K 450.001.77E-025.01E-021.25E-012.78E-016.84E-011.44E+002.53E+004.45E+00 +102K 540.001.27E-023.77E-029.28E-022.01E-014.16E-018.48E-011.45E+002.50E+00 +102K 650.009.19E-032.81E-026.74E-021.41E-012.52E-015.01E-018.35E-011.39E+00 +102K 880.005.49E-031.72E-023.93E-027.66E-021.11E-012.18E-013.47E-015.46E-01 +102K 1150.003.53E-031.10E-022.42E-024.45E-025.42E-021.08E-011.65E-012.48E-01 +102K 1400.002.56E-037.90E-031.68E-022.99E-023.18E-026.50E-029.78E-021.42E-01 +102K 1650.001.96E-035.96E-031.24E-022.15E-022.03E-024.29E-026.38E-029.06E-02 +102L1 30.224.13E-011.23E+021.17E+031.25E+033.15E+022.06E+043.26E+051.30E+06 +102L1 30.924.00E-011.12E+021.17E+031.99E+032.94E+021.86E+042.90E+051.26E+06 +102L1 32.223.76E-019.43E+011.14E+033.21E+032.60E+021.53E+042.34E+051.17E+06 +102L1 35.423.27E-016.39E+019.72E+024.95E+031.97E+029.93E+031.44E+058.85E+05 +102L1 39.222.79E-014.19E+017.43E+025.26E+031.45E+026.24E+038.56E+045.98E+05 +102L1 42.002.49E-013.14E+015.99E+024.89E+031.19E+024.58E+036.02E+044.45E+05 +102L1 48.001.99E-011.80E+013.75E+023.64E+038.00E+012.51E+033.03E+042.38E+05 +102L1 56.001.52E-019.43E+002.06E+022.21E+035.08E+011.27E+031.38E+041.10E+05 +102L1 68.001.06E-014.23E+009.24E+011.04E+032.87E+015.42E+025.16E+033.98E+04 +102L1 81.007.60E-022.09E+004.37E+014.85E+021.72E+012.56E+022.15E+031.56E+04 +102L1 98.005.22E-021.00E+001.92E+012.03E+029.87E+001.15E+028.38E+025.58E+03 +102L1 111.004.07E-026.31E-011.12E+011.13E+026.88E+006.87E+014.57E+022.85E+03 +102L1 128.003.05E-023.82E-016.08E+005.74E+014.55E+003.85E+012.31E+021.33E+03 +102L1 151.002.18E-022.21E-013.04E+002.63E+012.83E+001.99E+011.06E+025.54E+02 +102L1 180.001.53E-021.29E-011.49E+001.15E+011.71E+001.01E+014.73E+012.21E+02 +102L1 245.008.26E-035.49E-024.61E-012.86E+007.13E-013.17E+001.20E+014.64E+01 +102L1 330.004.65E-032.64E-021.64E-018.13E-013.09E-011.10E+003.44E+001.10E+01 +102L1 420.002.98E-031.53E-027.68E-023.16E-011.58E-014.84E-011.31E+003.66E+00 +102L1 530.001.98E-039.36E-033.90E-021.36E-018.37E-022.27E-015.45E-011.33E+00 +102L1 760.001.08E-034.57E-031.51E-024.18E-023.14E-027.52E-021.53E-013.15E-01 +102L11050.006.39E-042.48E-036.98E-031.64E-021.31E-022.96E-025.39E-029.71E-02 +102L11550.003.46E-041.22E-032.96E-035.97E-034.55E-031.03E-021.70E-022.72E-02 +102L2 29.281.05E+004.43E+032.52E+051.95E+064.60E+018.85E+024.47E+034.16E+03 +102L2 29.989.96E-013.95E+032.22E+051.88E+064.30E+018.14E+024.50E+036.65E+03 +102L2 31.288.97E-013.21E+031.76E+051.71E+063.79E+017.00E+024.41E+031.07E+04 +102L2 34.487.07E-012.02E+031.05E+051.24E+062.85E+014.96E+023.83E+031.66E+04 +102L2 38.285.44E-011.22E+035.94E+047.99E+052.10E+013.42E+023.00E+031.78E+04 +102L2 42.004.30E-017.87E+023.59E+045.16E+051.60E+012.46E+022.31E+031.62E+04 +102L2 48.003.04E-014.19E+021.74E+042.62E+051.08E+011.52E+021.51E+031.20E+04 +102L2 56.002.03E-012.03E+027.56E+031.14E+056.93E+008.77E+018.75E+027.51E+03 +102L2 68.001.21E-018.23E+012.65E+033.85E+043.96E+004.38E+014.23E+023.68E+03 +102L2 81.007.53E-023.69E+011.04E+031.42E+042.40E+002.35E+012.14E+021.80E+03 +102L2 98.004.48E-021.55E+013.76E+024.70E+031.40E+001.20E+011.00E+027.90E+02 +102L2 111.003.19E-028.90E+001.95E+022.28E+039.83E-017.72E+006.07E+014.54E+02 +102L2 128.002.16E-024.74E+009.28E+019.99E+026.58E-014.69E+003.42E+012.38E+02 +102L2 151.001.38E-022.30E+003.96E+013.86E+024.15E-012.65E+001.75E+011.12E+02 +102L2 180.008.55E-031.08E+001.62E+011.42E+022.55E-011.45E+008.65E+004.99E+01 +102L2 245.003.75E-032.99E-013.53E+002.53E+011.09E-015.14E-012.54E+001.22E+01 +102L2 330.001.72E-039.02E-028.58E-015.07E+004.83E-021.93E-017.99E-013.21E+00 +102L2 420.009.32E-043.55E-022.85E-011.45E+002.51E-028.93E-023.21E-011.13E+00 +102L2 530.005.25E-041.49E-021.03E-014.58E-011.34E-024.31E-021.37E-014.22E-01 +102L2 760.002.22E-044.16E-032.32E-028.50E-025.03E-031.44E-023.85E-029.89E-02 +102L21050.001.06E-041.42E-036.69E-032.11E-022.08E-035.56E-031.31E-022.92E-02 +102L21550.004.48E-054.21E-041.68E-034.53E-037.11E-041.84E-033.80E-037.41E-03 +102L3 22.852.68E+001.28E+049.86E+051.12E+072.66E+004.50E+042.30E+071.49E+09 +102L3 23.552.46E+001.10E+048.24E+051.01E+072.43E+003.87E+041.88E+071.18E+09 +102L3 24.852.11E+008.36E+035.97E+058.12E+062.05E+002.96E+041.31E+077.86E+08 +102L3 28.051.50E+004.55E+032.91E+054.61E+061.42E+001.62E+045.82E+063.16E+08 +102L3 31.851.04E+002.40E+031.36E+052.35E+069.65E-018.59E+032.50E+061.21E+08 +102L3 42.004.58E-016.00E+022.63E+044.67E+054.15E-012.17E+034.01E+051.54E+07 +102L3 48.003.07E-013.08E+021.19E+042.05E+052.77E-011.12E+031.67E+055.73E+06 +102L3 56.001.92E-011.42E+024.75E+037.78E+041.73E-015.18E+026.15E+041.85E+06 +102L3 68.001.06E-015.40E+011.50E+032.25E+049.63E-021.97E+021.76E+044.49E+05 +102L3 81.006.18E-022.26E+015.34E+027.24E+035.68E-028.28E+015.79E+031.28E+05 +102L3 98.003.42E-028.81E+001.74E+022.09E+033.20E-023.22E+011.75E+033.29E+04 +102L3 111.002.32E-024.76E+008.36E+019.27E+022.20E-021.74E+018.06E+021.37E+04 +102L3 128.001.49E-022.36E+003.63E+013.65E+021.44E-028.59E+003.35E+025.09E+03 +102L3 151.008.91E-031.05E+001.39E+011.24E+028.78E-033.80E+001.23E+021.64E+03 +102L3 180.005.17E-034.48E-015.03E+003.96E+015.21E-031.60E+004.27E+014.99E+02 +102L3 245.002.01E-031.01E-018.66E-015.47E+002.10E-033.52E-016.96E+006.52E+01 +102L3 330.008.22E-042.48E-021.64E-018.42E-018.76E-048.23E-021.26E+009.72E+00 +102L3 420.004.05E-048.14E-034.41E-021.94E-014.36E-042.56E-023.28E-012.19E+00 +102L3 530.002.08E-042.85E-031.29E-024.98E-022.24E-048.39E-039.21E-025.40E-01 +102L3 760.007.71E-055.98E-042.13E-036.85E-038.15E-051.54E-031.36E-026.69E-02 +102L31050.003.31E-051.61E-044.75E-041.33E-033.42E-053.56E-042.57E-031.11E-02 +102L31550.001.31E-053.81E-059.23E-052.20E-041.29E-056.92E-053.71E-041.40E-03 +102M1 8.667.38E-018.47E+034.22E+053.77E+063.21E+032.51E+064.72E+082.24E+10 +102M1 9.666.59E-015.31E+032.68E+053.66E+062.31E+031.47E+062.34E+081.08E+10 +102M1 11.665.30E-012.38E+031.21E+052.27E+061.32E+035.89E+057.05E+073.03E+09 +102M1 15.663.55E-016.83E+023.38E+047.59E+055.47E+021.41E+051.11E+074.07E+08 +102M1 22.662.00E-011.43E+026.56E+031.53E+051.82E+022.42E+041.16E+063.31E+07 +102M1 30.001.24E-014.36E+011.84E+034.09E+047.90E+016.45E+032.17E+055.02E+06 +102M1 45.005.88E-027.88E+002.83E+025.52E+032.38E+019.94E+022.08E+043.49E+05 +102M1 57.003.73E-022.93E+009.39E+011.65E+031.18E+013.42E+025.51E+037.64E+04 +102M1 75.002.16E-029.54E-012.61E+013.98E+025.28E+001.02E+021.24E+031.37E+04 +102M1 108.001.03E-022.30E-014.85E+005.96E+011.82E+002.15E+011.83E+021.49E+03 +102M1 155.004.89E-036.41E-029.77E-019.41E+006.43E-014.92E+003.01E+011.84E+02 +102M1 285.001.44E-031.05E-028.47E-025.11E-011.14E-014.85E-011.82E+007.06E+00 +102M1 510.004.97E-042.62E-031.22E-024.65E-022.27E-026.58E-021.70E-014.50E-01 +102M2 8.231.48E+006.06E+053.29E+082.47E+105.41E+029.83E+044.79E+064.56E+07 +102M2 9.231.34E+003.44E+051.57E+081.15E+103.84E+025.87E+042.77E+064.13E+07 +102M2 11.231.06E+001.31E+054.50E+073.05E+092.14E+022.46E+041.07E+062.24E+07 +102M2 15.236.72E-012.94E+046.63E+063.84E+088.68E+016.51E+032.44E+055.92E+06 +102M2 22.233.34E-014.65E+036.47E+052.96E+072.83E+011.31E+033.88E+049.04E+05 +102M2 30.001.78E-011.10E+031.06E+053.95E+061.17E+013.80E+029.21E+031.90E+05 +102M2 45.007.08E-021.59E+029.81E+032.71E+053.60E+007.48E+011.36E+032.25E+04 +102M2 57.004.00E-025.23E+012.52E+035.83E+041.81E+002.98E+014.55E+026.48E+03 +102M2 75.002.02E-021.47E+015.37E+021.01E+048.25E-011.04E+011.30E+021.54E+03 +102M2 108.007.92E-032.81E+007.25E+011.03E+032.93E-012.70E+002.56E+012.35E+02 +102M2 155.003.09E-035.75E-011.07E+011.15E+021.06E-017.36E-015.36E+003.80E+01 +102M2 285.006.39E-044.51E-025.03E-013.47E+001.98E-029.06E-024.33E-012.02E+00 +102M2 510.001.51E-044.77E-033.49E-021.64E-014.07E-031.38E-024.61E-021.50E-01 +102M3 6.706.69E+001.75E+061.10E+099.60E+102.93E+016.35E+063.72E+102.73E+13 +102M3 7.705.23E+008.69E+054.41E+083.57E+101.92E+013.17E+061.42E+108.30E+12 +102M3 9.703.36E+002.73E+059.72E+076.89E+099.56E+001.00E+062.89E+091.17E+12 +102M3 13.701.62E+004.83E+041.04E+075.93E+083.36E+001.78E+052.70E+086.47E+10 +102M3 20.706.14E-016.10E+037.54E+053.23E+079.64E-012.27E+041.62E+072.17E+09 +102M3 30.002.39E-019.51E+027.39E+042.42E+063.14E-013.57E+031.33E+061.10E+08 +102M3 45.007.99E-021.25E+026.07E+031.46E+059.23E-024.74E+028.99E+044.57E+06 +102M3 57.004.11E-023.86E+011.44E+032.89E+044.53E-021.46E+021.91E+047.46E+05 +102M3 75.001.86E-029.86E+002.74E+024.45E+031.99E-023.74E+013.25E+039.49E+04 +102M3 108.006.32E-031.63E+003.11E+013.79E+026.70E-036.13E+003.24E+026.59E+03 +102M3 155.002.14E-032.77E-013.72E+003.41E+012.29E-031.03E+003.49E+015.12E+02 +102M3 285.003.49E-041.48E-021.13E-016.58E-013.85E-045.16E-029.45E-018.55E+00 +102M3 510.006.54E-051.01E-034.81E-031.92E-027.21E-053.09E-033.61E-022.25E-01 +102M4 6.021.65E+015.15E+048.71E+085.17E+128.83E+002.20E+055.81E+081.79E+11 +102M4 7.021.04E+012.38E+042.97E+081.35E+125.40E+001.02E+052.06E+085.66E+10 +102M4 9.024.82E+006.73E+035.13E+071.54E+112.41E+002.90E+043.85E+078.65E+09 +102M4 13.021.47E+001.07E+033.92E+066.56E+097.31E-014.62E+033.39E+065.60E+08 +102M4 20.023.40E-011.23E+021.93E+051.70E+081.77E-015.34E+022.04E+052.33E+07 +102M4 30.008.05E-021.63E+011.14E+045.75E+064.57E-027.04E+011.52E+041.21E+06 +102M4 45.001.80E-022.16E+006.81E+022.03E+051.15E-029.23E+001.18E+036.55E+04 +102M4 57.007.35E-036.64E-011.33E+022.96E+045.07E-032.83E+002.70E+021.22E+04 +102M4 75.002.56E-031.70E-012.02E+013.25E+031.95E-037.18E-014.99E+011.77E+03 +102M4 108.006.23E-042.79E-021.70E+001.81E+025.37E-041.17E-015.48E+001.42E+02 +102M4 155.001.52E-044.74E-031.54E-011.10E+011.47E-041.95E-026.40E-011.22E+01 +102M4 285.001.41E-052.52E-043.18E-031.17E-011.60E-059.79E-041.88E-022.22E-01 +102M4 510.001.53E-061.67E-051.04E-041.97E-031.87E-065.80E-057.32E-045.78E-03 +102M5 5.732.58E+013.54E+042.43E+091.00E+134.90E+008.04E+033.72E+096.91E+13 +102M5 6.731.58E+011.55E+047.88E+082.45E+122.92E+003.60E+031.21E+091.64E+13 +102M5 8.736.94E+004.11E+031.27E+082.53E+111.26E+009.84E+021.96E+081.62E+12 +102M5 12.731.99E+006.02E+028.97E+069.63E+093.72E-011.50E+021.40E+075.69E+10 +102M5 19.734.33E-016.51E+014.11E+052.24E+088.81E-021.69E+016.55E+051.19E+09 +102M5 30.009.36E-027.77E+002.15E+046.39E+062.18E-022.11E+003.51E+043.04E+07 +102M5 45.002.02E-029.89E-011.24E+032.12E+055.55E-032.86E-012.07E+039.09E+05 +102M5 57.008.07E-032.96E-012.35E+022.97E+042.47E-038.98E-023.97E+021.20E+05 +102M5 75.002.74E-037.31E-023.41E+013.07E+039.61E-042.37E-025.85E+011.17E+04 +102M5 108.006.48E-041.14E-022.64E+001.55E+022.70E-044.13E-034.62E+005.57E+02 +102M5 155.001.55E-041.84E-032.13E-018.31E+007.62E-057.57E-043.75E-012.88E+01 +102M5 285.001.45E-059.20E-053.24E-036.58E-028.99E-064.82E-055.59E-032.24E-01 +102M5 510.001.68E-066.38E-066.98E-057.57E-041.23E-064.10E-061.08E-042.58E-03 +103K 154.101.58E-019.32E-021.90E-027.21E-041.49E+014.21E+012.70E+014.26E+00 +103K 154.801.56E-019.47E-022.19E-021.36E-031.47E+014.15E+012.73E+014.86E+00 +103K 156.101.54E-019.78E-022.75E-022.98E-031.44E+014.04E+012.78E+016.03E+00 +103K 159.301.47E-011.04E-014.18E-029.36E-031.36E+013.80E+012.87E+018.85E+00 +103K 163.101.40E-011.11E-015.92E-022.12E-021.27E+013.52E+012.93E+011.20E+01 +103K 167.001.33E-011.16E-017.70E-023.78E-021.18E+013.27E+012.96E+011.50E+01 +103K 173.001.24E-011.22E-011.03E-016.99E-021.07E+012.93E+012.94E+011.89E+01 +103K 181.001.12E-011.27E-011.34E-011.21E-019.44E+002.54E+012.83E+012.28E+01 +103K 193.009.83E-021.30E-011.72E-012.02E-017.87E+002.08E+012.60E+012.60E+01 +103K 206.008.57E-021.29E-012.01E-012.82E-016.55E+001.69E+012.32E+012.70E+01 +103K 223.007.26E-021.24E-012.23E-013.64E-015.24E+001.32E+011.95E+012.59E+01 +103K 236.006.45E-021.19E-012.30E-014.07E-014.47E+001.10E+011.71E+012.43E+01 +103K 253.005.59E-021.11E-012.32E-014.41E-013.68E+008.87E+001.43E+012.17E+01 +103K 276.004.68E-021.02E-012.26E-014.57E-012.88E+006.77E+001.13E+011.81E+01 +103K 305.003.84E-029.00E-022.10E-014.46E-012.19E+004.98E+008.50E+001.42E+01 +103K 370.002.63E-026.93E-021.70E-013.75E-011.28E+002.77E+004.80E+008.31E+00 +103K 455.001.78E-025.12E-021.27E-012.78E-017.27E-011.50E+002.57E+004.44E+00 +103K 540.001.31E-023.93E-029.65E-022.07E-014.56E-019.11E-011.53E+002.60E+00 +103K 650.009.48E-032.94E-027.04E-021.46E-012.76E-015.39E-018.84E-011.45E+00 +103K 880.005.68E-031.81E-024.13E-028.01E-021.22E-012.35E-013.69E-015.75E-01 +103K 1150.003.66E-031.16E-022.55E-024.67E-025.91E-021.16E-011.76E-012.62E-01 +103K 1400.002.66E-038.35E-031.78E-023.15E-023.46E-027.01E-021.05E-011.50E-01 +103K 1650.002.04E-036.30E-031.32E-022.27E-022.21E-024.63E-026.83E-029.63E-02 +103L1 31.073.88E-011.19E+021.08E+031.10E+033.23E+022.00E+043.03E+051.16E+06 +103L1 31.773.76E-011.09E+021.09E+031.75E+033.02E+021.81E+042.71E+051.13E+06 +103L1 33.073.55E-019.22E+011.06E+032.82E+032.68E+021.50E+042.20E+051.05E+06 +103L1 36.273.10E-016.33E+019.11E+024.40E+032.04E+029.83E+031.38E+058.09E+05 +103L1 40.072.65E-014.20E+017.06E+024.76E+031.52E+026.25E+038.26E+045.55E+05 +103L1 43.002.37E-013.14E+015.69E+024.45E+031.23E+024.54E+035.76E+044.10E+05 +103L1 49.001.91E-011.82E+013.62E+023.37E+038.38E+012.53E+032.95E+042.24E+05 +103L1 57.001.46E-019.75E+002.03E+022.10E+035.36E+011.29E+031.37E+041.05E+05 +103L1 69.001.03E-014.46E+009.29E+011.01E+033.06E+015.61E+025.19E+033.90E+04 +103L1 82.007.44E-022.23E+004.47E+014.80E+021.85E+012.68E+022.19E+031.55E+04 +103L1 99.005.15E-021.08E+001.99E+012.05E+021.07E+011.21E+028.65E+025.65E+03 +103L1 112.004.03E-026.86E-011.17E+011.15E+027.45E+007.29E+014.75E+022.91E+03 +103L1 129.003.04E-024.17E-016.44E+005.93E+014.95E+004.10E+012.42E+021.37E+03 +103L1 152.002.18E-022.42E-013.25E+002.74E+013.09E+002.14E+011.12E+025.75E+02 +103L1 180.001.55E-021.43E-011.64E+001.25E+011.90E+001.11E+015.14E+012.38E+02 +103L1 245.008.44E-036.03E-025.07E-013.12E+007.92E-013.49E+001.31E+015.01E+01 +103L1 330.004.78E-032.87E-021.80E-018.86E-013.43E-011.20E+003.74E+001.19E+01 +103L1 420.003.08E-031.66E-028.39E-023.44E-011.76E-015.31E-011.43E+003.96E+00 +103L1 530.002.05E-031.01E-024.25E-021.48E-019.27E-022.49E-015.94E-011.44E+00 +103L1 760.001.12E-034.92E-031.64E-024.53E-023.47E-028.25E-021.67E-013.41E-01 +103L11050.006.68E-042.67E-037.55E-031.77E-021.44E-023.25E-025.86E-021.05E-01 +103L11550.003.63E-041.30E-033.20E-036.45E-035.00E-031.12E-021.85E-022.95E-02 +103L2 30.121.00E+004.22E+032.30E+051.71E+064.81E+018.63E+024.18E+033.71E+03 +103L2 30.829.48E-013.78E+032.03E+051.65E+064.50E+017.96E+024.20E+035.91E+03 +103L2 32.128.58E-013.10E+031.63E+051.51E+063.98E+016.88E+024.13E+039.51E+03 +103L2 35.326.81E-011.97E+039.77E+041.11E+063.01E+014.93E+023.62E+031.49E+04 +103L2 39.125.28E-011.21E+035.64E+047.27E+052.23E+013.43E+022.88E+031.63E+04 +103L2 43.004.16E-017.71E+023.38E+044.68E+051.70E+012.45E+022.21E+031.48E+04 +103L2 49.002.97E-014.16E+021.67E+042.42E+051.16E+011.54E+021.46E+031.12E+04 +103L2 57.002.00E-012.05E+027.38E+031.08E+057.49E+008.97E+018.62E+027.14E+03 +103L2 69.001.21E-018.44E+012.64E+033.73E+044.32E+004.54E+014.24E+023.57E+03 +103L2 82.007.59E-023.83E+011.05E+031.40E+042.64E+002.46E+012.17E+021.78E+03 +103L2 99.004.56E-021.63E+013.86E+024.71E+031.54E+001.27E+011.03E+027.94E+02 +103L2 112.003.26E-029.39E+002.02E+022.31E+031.09E+008.21E+006.30E+014.60E+02 +103L2 129.002.22E-025.03E+009.67E+011.02E+037.33E-015.02E+003.57E+012.44E+02 +103L2 152.001.42E-022.46E+004.16E+013.99E+024.63E-012.85E+001.85E+011.16E+02 +103L2 180.009.03E-031.19E+001.77E+011.52E+022.90E-011.60E+009.38E+005.35E+01 +103L2 245.003.98E-033.30E-013.86E+002.73E+011.24E-015.68E-012.77E+001.32E+01 +103L2 330.001.84E-039.97E-029.41E-015.51E+005.50E-022.14E-018.75E-013.49E+00 +103L2 420.009.99E-043.93E-023.14E-011.59E+002.86E-029.93E-023.53E-011.22E+00 +103L2 530.005.64E-041.65E-021.14E-015.01E-011.52E-024.80E-021.51E-014.61E-01 +103L2 760.002.40E-044.62E-032.57E-029.35E-025.73E-031.61E-024.26E-021.09E-01 +103L21050.001.15E-041.58E-037.43E-032.33E-022.37E-036.24E-031.45E-023.22E-02 +103L21550.004.91E-054.70E-041.87E-035.03E-038.09E-042.07E-034.25E-038.23E-03 +103L3 23.362.57E+001.23E+049.12E+051.00E+072.61E+004.46E+042.21E+071.38E+09 +103L3 24.062.37E+001.06E+047.65E+059.06E+062.39E+003.85E+041.81E+071.11E+09 +103L3 25.362.04E+008.14E+035.59E+057.35E+062.03E+002.96E+041.27E+077.43E+08 +103L3 28.561.45E+004.48E+032.76E+054.23E+061.41E+001.64E+045.72E+063.03E+08 +103L3 32.361.01E+002.39E+031.31E+052.19E+069.66E-018.78E+032.49E+061.19E+08 +103L3 43.004.37E-015.75E+022.41E+044.15E+054.06E-012.13E+033.80E+051.42E+07 +103L3 49.002.95E-012.99E+021.11E+041.86E+052.73E-011.11E+031.62E+055.40E+06 +103L3 57.001.87E-011.40E+024.51E+037.19E+041.72E-015.24E+026.06E+041.78E+06 +103L3 69.001.04E-015.41E+011.46E+032.12E+049.67E-022.03E+021.77E+044.43E+05 +103L3 82.006.12E-022.29E+015.24E+026.95E+035.75E-028.60E+015.92E+031.28E+05 +103L3 99.003.42E-029.02E+001.73E+022.04E+033.26E-023.38E+011.81E+033.35E+04 +103L3 112.002.33E-024.91E+008.39E+019.12E+022.25E-021.83E+018.40E+021.41E+04 +103L3 129.001.50E-022.45E+003.67E+013.62E+021.47E-029.12E+003.52E+025.28E+03 +103L3 152.009.02E-031.10E+001.41E+011.24E+029.04E-034.06E+001.30E+021.71E+03 +103L3 180.005.35E-034.82E-015.32E+004.15E+015.47E-031.76E+004.69E+015.46E+02 +103L3 245.002.08E-031.09E-019.16E-015.73E+002.20E-033.88E-017.64E+007.13E+01 +103L3 330.008.53E-042.67E-021.74E-018.85E-019.20E-049.05E-021.39E+001.06E+01 +103L3 420.004.21E-048.72E-034.68E-022.05E-014.57E-042.81E-023.60E-012.39E+00 +103L3 530.002.17E-043.05E-031.37E-025.26E-022.34E-049.21E-031.01E-015.89E-01 +103L3 760.008.04E-056.38E-042.26E-037.25E-038.53E-051.68E-031.48E-027.30E-02 +103L31050.003.45E-051.71E-045.03E-041.41E-033.57E-053.88E-042.81E-031.21E-02 +103L31550.001.36E-054.02E-059.76E-052.33E-041.34E-057.46E-054.05E-041.53E-03 +103M1 8.906.96E-018.33E+034.06E+053.48E+063.30E+032.44E+064.41E+082.02E+10 +103M1 9.906.23E-015.28E+032.60E+053.42E+062.40E+031.45E+062.22E+089.93E+09 +103M1 11.905.03E-012.42E+031.19E+052.17E+061.38E+035.93E+056.89E+072.87E+09 +103M1 15.903.41E-017.08E+023.41E+047.47E+055.83E+021.46E+051.12E+074.01E+08 +103M1 22.901.94E-011.52E+026.76E+031.54E+051.97E+022.56E+041.20E+063.37E+07 +103M1 30.001.23E-014.86E+011.99E+034.36E+048.81E+017.17E+032.40E+055.51E+06 +103M1 45.005.87E-028.83E+003.08E+025.92E+032.65E+011.10E+032.29E+043.82E+05 +103M1 57.003.74E-023.30E+001.03E+021.78E+031.32E+013.80E+026.08E+038.37E+04 +103M1 75.002.17E-021.08E+002.87E+014.31E+025.89E+001.13E+021.36E+031.49E+04 +103M1 108.001.04E-022.60E-015.37E+006.50E+012.03E+002.38E+012.01E+021.63E+03 +103M1 155.004.97E-037.20E-021.08E+001.03E+017.16E-015.44E+003.31E+012.01E+02 +103M1 285.001.48E-031.16E-029.38E-025.62E-011.27E-015.34E-012.00E+007.70E+00 +103M1 510.005.16E-042.84E-031.34E-025.10E-022.52E-027.25E-021.86E-014.90E-01 +103M2 8.471.38E+005.79E+053.00E+082.18E+105.67E+029.64E+044.50E+064.10E+07 +103M2 9.471.25E+003.34E+051.47E+081.03E+104.06E+025.84E+042.64E+063.76E+07 +103M2 11.471.01E+001.30E+054.32E+072.83E+092.30E+022.49E+041.05E+062.10E+07 +103M2 15.476.49E-012.99E+046.59E+063.72E+089.44E+016.76E+032.45E+055.76E+06 +103M2 22.473.29E-014.86E+036.63E+052.97E+073.13E+011.39E+034.01E+049.08E+05 +103M2 30.001.81E-011.20E+031.16E+054.26E+061.34E+014.20E+021.00E+042.03E+05 +103M2 45.007.27E-021.75E+021.07E+042.93E+054.10E+008.28E+011.48E+032.41E+04 +103M2 57.004.13E-025.76E+012.75E+036.30E+042.07E+003.29E+014.96E+026.97E+03 +103M2 75.002.09E-021.62E+015.86E+021.09E+049.41E-011.16E+011.42E+021.66E+03 +103M2 108.008.28E-033.11E+007.93E+011.11E+033.34E-012.99E+002.80E+012.54E+02 +103M2 155.003.25E-036.35E-011.17E+011.25E+021.21E-018.16E-015.88E+004.13E+01 +103M2 285.006.80E-045.00E-025.54E-013.79E+002.26E-021.01E-014.76E-012.20E+00 +103M2 510.001.62E-045.30E-033.86E-021.81E-014.65E-031.54E-025.11E-021.65E-01 +103M3 6.856.42E+001.69E+061.02E+098.62E+102.88E+016.31E+063.57E+102.54E+13 +103M3 7.855.05E+008.54E+054.16E+083.27E+101.91E+013.19E+061.39E+107.92E+12 +103M3 9.853.27E+002.74E+059.42E+076.49E+099.62E+001.03E+062.90E+091.15E+12 +103M3 13.851.59E+004.96E+041.04E+075.77E+083.43E+001.88E+052.80E+086.62E+10 +103M3 20.856.12E-016.37E+037.69E+053.23E+079.94E-012.43E+041.72E+072.29E+09 +103M3 30.002.43E-011.03E+037.88E+042.54E+063.31E-013.97E+031.48E+061.23E+08 +103M3 45.008.18E-021.36E+026.46E+031.54E+059.73E-025.26E+021.00E+055.08E+06 +103M3 57.004.21E-024.18E+011.53E+033.04E+044.77E-021.62E+022.13E+048.29E+05 +103M3 75.001.91E-021.07E+012.92E+024.68E+032.10E-024.15E+013.61E+031.05E+05 +103M3 108.006.53E-031.76E+003.31E+013.98E+027.06E-036.80E+003.59E+027.29E+03 +103M3 155.002.22E-033.00E-013.96E+003.59E+012.42E-031.14E+003.86E+015.65E+02 +103M3 285.003.63E-041.60E-021.21E-016.95E-014.05E-045.71E-021.04E+009.41E+00 +103M3 510.006.83E-051.09E-035.12E-032.04E-027.59E-053.41E-033.99E-022.47E-01 +103M4 6.171.58E+015.01E+048.05E+084.66E+128.69E+002.20E+055.56E+081.66E+11 +103M4 7.171.01E+012.35E+042.80E+081.26E+125.37E+001.03E+052.02E+085.39E+10 +103M4 9.174.73E+006.80E+034.99E+071.49E+112.43E+003.02E+043.88E+078.51E+09 +103M4 13.171.47E+001.10E+033.95E+066.60E+097.49E-014.91E+033.52E+065.71E+08 +103M4 20.173.45E-011.30E+021.99E+051.76E+081.84E-015.79E+022.17E+052.44E+07 +103M4 30.008.41E-021.79E+011.24E+046.32E+064.86E-027.91E+011.69E+041.34E+06 +103M4 45.001.89E-022.36E+007.40E+022.23E+051.22E-021.04E+011.31E+037.22E+04 +103M4 57.007.74E-037.28E-011.44E+023.25E+045.42E-033.18E+003.00E+021.35E+04 +103M4 75.002.71E-031.86E-012.19E+013.57E+032.08E-038.07E-015.55E+011.95E+03 +103M4 108.006.60E-043.06E-021.85E+001.99E+025.75E-041.31E-016.09E+001.56E+02 +103M4 155.001.61E-045.21E-031.68E-011.21E+011.58E-042.20E-027.11E-011.35E+01 +103M4 285.001.51E-052.77E-043.46E-031.29E-011.72E-051.10E-032.09E-022.46E-01 +103M4 510.001.65E-061.84E-051.13E-042.17E-032.01E-066.50E-058.17E-046.42E-03 +103M5 5.862.47E+013.33E+042.29E+099.13E+124.80E+007.72E+033.59E+096.45E+13 +103M5 6.861.53E+011.48E+047.59E+082.29E+122.90E+003.52E+031.19E+091.58E+13 +103M5 8.866.82E+004.02E+031.26E+082.45E+111.27E+009.81E+021.99E+081.61E+12 +103M5 12.861.99E+006.02E+029.20E+069.71E+093.79E-011.53E+021.47E+075.90E+10 +103M5 19.864.39E-016.63E+014.33E+052.33E+089.09E-021.75E+017.04E+051.27E+09 +103M5 30.009.76E-028.18E+002.37E+047.01E+062.30E-022.26E+003.94E+043.44E+07 +103M5 45.002.11E-021.04E+001.36E+032.32E+055.87E-033.06E-012.32E+031.03E+06 +103M5 57.008.45E-033.13E-012.58E+023.25E+042.62E-039.61E-024.46E+021.36E+05 +103M5 75.002.88E-037.72E-023.75E+013.36E+031.02E-032.53E-026.57E+011.32E+04 +103M5 108.006.84E-041.21E-022.91E+001.69E+022.87E-044.41E-035.19E+006.27E+02 +103M5 155.001.64E-041.95E-032.35E-019.09E+008.09E-058.09E-044.21E-013.23E+01 +103M5 285.001.54E-059.78E-053.56E-037.19E-029.55E-065.15E-056.25E-032.51E-01 +103M5 510.001.80E-066.79E-067.62E-058.28E-041.31E-064.38E-061.20E-042.89E-03 diff --git a/tests/ensdf_processing/bldhst/ref_iccndx.dat b/tests/ensdf_processing/bldhst/ref_iccndx.dat new file mode 100644 index 0000000000000000000000000000000000000000..b056261850bc356836e5ecefb619a087cc4ce3b7 GIT binary patch literal 448 zcma*jyD|en7(n3@mx#CraTk{)#3dmfK#g~>Z$PQsT4&Ixw(t8+L^~yYBYkpy|K;W4-~#syN;N literal 0 HcmV?d00001 diff --git a/tests/ensdf_processing/bldhst/ref_icctbl.dat b/tests/ensdf_processing/bldhst/ref_icctbl.dat new file mode 100644 index 0000000000000000000000000000000000000000..0b27e3127e3392d33266aa79bfa61122e2491f06 GIT binary patch literal 572176 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 yr#iPy^q`oov^H=oi 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

QV-MbFA{eeG}#ihuVx6XHw@`(F-s-)SdS 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

|& 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 QDC-j{}e(T{acc6DgU&qaPL0jaW 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�sP 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%0A4jdnDeZY9_@=kM#?^~Sgj$i+W{R_bnWaplsF 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�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

    QV-MbFA{eeG}#ihuVx6XHw@`(F-s-)SdS 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

    |& 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 QDC-j{}e(T{acc6DgU&qaPL0jaW zVGFEr)83vOIVZmF`S4Dn9#DY1cF(CI|EG_Oeo>Ww5_LR>sZtzrgMQ%HF|XRtgozj2 zGP>=9Y3XZHEC-s?&-R3BL6TSxu8Py$skXUeuAt83*uBwa6f#) z?S|I9?whd9ajJ0~Fp3>p#0ECE_RR?C34fc6wTS*Vfz4OnnFLG-uuizouY3cUm)C)J7`&FE#|_wQ-QQq)USkz9O?O{$9sU9nv;4Oo%zqZxNis z3mG^R=u=-s?z1_brJJCbtEw&Ilr zra!DdTdD#+F3WG8a&~IKlf#y}>pZVGHlHInF8mmICG+gAC2Zh;uus@!it6`zj)k1b zX^Yp`87~BFQGcUW3hG#bKazI_Y6&0fy4uQG1u@Y@wuK6M+Dz8ln_W(aO^vIwNw2^n-Wdl2#f7w34IB0(oHLA?0t)u=XY|(o* z2k&~89QfVf+g9VgzsLF(;GaajJMRE|vU^r9!EZhnaULY)KR zd6j>Xwfj|5;y4c#Qw;sZQ#a$1wr z(WA#T{p?0AXg;((l2CsuC%9g-_WTe>UJy~w26r_1*7P~hk9kLuq+;-uanKtY?}HD) zSAqGeGACBrwol(5Fs=k{`TO|UW8ebXyQNL#z3jKdeGz{*Xt;Rw+33gQu)-Y&@A-`A zcN<}?6-i%{0w+*chklXv9_Yv9V5K&Z!GQXk)XYsiB4BKB{$wGR!5$d2T`W_Flo&Eq z!}wc;I1uRg;u(NTgdS0m?Jm^RdN3Zud3+x8sHm{s&0O)-^?CSv=qtA8Wn#I2Z9%=Q z5`NZHCcf*^&3?%Ll}D@+t?v(b4=>oSXCog9?t$2QnmXC5@qebS1U{y#eP6`BE3w29 zYF{Ih$!wWq=H8jiOg0IjN=hhcixw@amKyt(+9|QcR!cRF)>f1dRIMq#Qni+%wyL7U z_C3$J_fGtN|L<4+d7Yel?|IL8&-=d5^W6MxBQfcivsd?d*oG+NO6C~|enP>`!ZU?B zN7VU7?+kvI{?5`^`$CD=N0+~g{leU10^=eV1Wrj4bi>6RmKwr&=dL3M zZ4?^h%v%O*aURnbS?B&@d{f|9D_hX>5*b&afhlf#e>3n4x*uZ>BV6u!>y6~=Y5YY4 zQ>TBI^oo)U^ z{f+O8IJNWGM^S$OE-mjxg}5nhFZd_dy3!w2iQo9wo5?3`N2ltx?DHCIuSPB}w?AsF z&)cpHd}h7Ey2q5L@<~BMpQY%w#IiAufSR)cU1IO$aRcIUw#m|*Ngm+d<3IXeyAHZ7 zdqP<+;(tYN&E=k`zpUYRKuuqHsZT^ zcH*Twh)-vpWPAM|ac*wV{DR|xQ~kSI)5 z|Ax5lP8E;;NMo)3CgvN?UQ1CU0GC1Y zqrQar&<@E0=j?E~rT^9Pfe%Dq58=pRfO9}b{jG@`x}Ls;v)d$6Zv}XK^e9}2&1=<8 zyJscB_A~ZG;v1BOCMJ0OLrih(t3b~n?ti;n(u}?OdO%!q$ccB4yk#oZ%2}be`D4dm z;t;VO(070y5B=G=cDA-T49p30yQlFz7r4IXF|Ja11SYC$Enu4|Kk|KK9UZd;_p;CNv-7N>SU=CS*t_)^iM6&sUk{k?ahdgg zYQn&$F?Jc}FUMY5s$L5fcM-KGLZ3sh0=_{rzkjd%PN?PCW7s2v9Dt3OWNHNz%{Nm? z2r7o0XKhQ@S2wKW)2RE^Pr#pav#^JVd4nR`LWQvd`+}Z$r|I1{>14Yao=Zc z{Z@x|qnCFQS}&zO^CcZICQsTk66;Ppn_;k>n9|4Kwm9h--sC&<>}^gKoM(M{c~VRE zPBgBl&{4N#k2txQfPr`WPhatsnmZ#AyzZ#K)pa{^6XTM0P{+ zp6G>%^bpg+9x?c{BDEgrsS;jAiwRg$JH-4GdT>^w?i1?f{e`tG(I3dOxbIl)9-!9W zfE&ZPPW|*Z6e;Ymo8Lv%gR6!9f)d&}Pupaf{3_&m%E-8fZ$HjO3?gxs2E*U@d$tza z(>7Bk&fz&U5va#OZFcsIwNaL!+^`sbho5TijBAH?G~#kc$2>xhdu1ojBI47K8^aoI ztFJSR8?1aAoe!K$IC@q(;2B%Tpx$a`?e?1wda(B#&!K(`=D~4?G;u8AS@;fqwcZ8a z+;zbi~8Hob$m6O^c3|s z5qm;M`}~3F9r~0yub)}K%GJbrIP8>`)bMob`(;wew`z74IT^%HPkNbSA)1e$;U znxacOQ0rZRb-hsk#;`^0px6;nLjiUQYdqI6reug|;Nlk6b;d;052|7Ph;Izr<1%V* zk)!PEMZK-scz-kyYvP45#;tJ{~phx zqH!~oapCEPSDUXz%={$>_`1K%3nt^ObZ=s;AMY~t$Zo9fC745@^6sdO?ME#>6aLWO zEaLB&`^H|6vw&%;ZzzBHQpC>NgYQvN=0tSdEzr7Gn;=+{dg zcj}_P?*J=T6X(zyvUJGnAwIib*gKuYxr%RiviqNj_Mxfzz5}e>bmaQRIHb^W?(ARp z$G?4cb_)3v1xNd;!*R{~f26N7VC72U%vy;!1id%Vyt#j1ULt#Lay(NVQt&hnbttv> z0NbHX_KpeOi_4wde)lyWF%85lO41k?v{v&{veySc`xSY~XR*}yh8{Tf zp0cPT;y$8&H`s>Cdwi$R4>lEX^A>qNOyqwd&a7y@h)C7r>S+;G8h?ZSv>oQbzeE_I4;VrI2)qw1R%UInP&pM-DZIj((xmVk(|$1U@9G@X`rB9kn`I+LhWzA`|8H=Iq`ol^`-_B zE2I9l1bO~9U$fmO@Nb9{a5hNzxl7)A_zLbJU*KDo$NVQ^9_lw{tVwR!g&%bU4rV#t z^G%WGNShgs--Eb@u}Z-9rCj>{0z0)Ns^^$6)@M%kVW{~C18nEv8TE0472d7cf6#IJ zZjAl6gZC)%7BN>Sdh!Cc?G)-j5L3-Q#};V=9obWJp|f2MH9@=fy!yC<6!xC|+GT+K zi!VQlUIs0I(miY0SPE-@`cCBb7ADLG&(^SL@~)#+VyC`NP?wMJ ze)MrqD%7VK_^7VHzukDY-p)P|>V4z>1H2q_Kl->quC`rHi##AXCrgwqXD6PGywsJ; z8=*t~FZ@j(H`;Zysl!Ul8+w{;S)bO80vDO>`z^c4l@difPrw%SH}XQhn*D*mzX4Cj zJ0kZB8#(S&{F^?9l`i5AcC4%}IO@pZ1q~6wC&`%OZp+oUziGBu`?rQCST2YCVkw&v z&3Zn^w=BColAM0{HxA7<0X#X`_%?&ld;2Bx*gkN($4e6Uc6U$q4!T??;m>!sA~xc< z)O6d1ckOUWp@?;Eo$}_bS`1tC$BwJ&bxfTfKXGbW!1m0l%jmTXg5QR^q|;`2Dlfhws%s} zoy4(i?P2L{sw*L{vOT?_*j=Tq`b#J zGY4m^ZkvbmxH@We3jDYp{Og=s)#pSWUb>HZ<50x*x~)V#HRQ+3fLGxH&e(>~hg^xh z1%1fSdXg%%LENX?hVhI=jcgixXt~%U?u~kdb7ctTyc+xJ32lF1ZKjXRK00c`lY5T6 z53C`RhsR(*uW(?0pzS>Q!j>Srn%CHe9_NyRgA4l~@^1SvcDClnw9S#p8^wJ00;NBE zAltE^;SBra;Ll(i0YAoFCotavnP&)kYV4?GiFZd`N5rYfpJZXbz+En2`%bm&LGWn0=nqbHF#n*!p`2QMy9|aot;op>h5%?!A>_7~iVAVX>$meuM9#+omb( zLm~eZdt>?jPCfqCM&IO~(e6SY&5v25TBv|))q3o&a2tBxqUKF5Df*R}lc#SIuUj;3 zz5>o4_MceU7gRkaHj13zg|20cQBW5gtobqDSs^&LI$5?=eA7xj57yiJc52Iev28%p zOEz*B1ja?aZ(`gw^Y#XV1U{9y!D2OLSk8|2Sc&~XjW6JD%=h&eqKG^U`SQp`K@Owv z!CzZmJdL!nKc{Hioi6sxym&X({IJV*oZXEqAG$Ko|Nj)+d41V8i&$B_GiZB!$@{TW z0&aCsoFVaEv0lKmp~nohEa^}?U+(tV@ITd-?;8E7PI9E9_LcB%{$p^_p}#!&j9VJ~ z+*>eXO~AHA+8L}p?Dgp>9^_}@OSh~G{982gDkkResQc|20)GRJ zUrL8Yw_+{!floZreG|4}GIP&}HSn`FIIELl z$$`LJS=J&qd=nUY?fue^x&D|pG#F4XfW8Xjan|=mjm^JA_cx3?54f~U^h)l>o%3_d z@tE?m?|(L8_$J;Si#>6c?r*TokWLdCUYB)g=rmgB zZ))F)J_oh`tn=Ij(2A>Qz5K6Y%gQ-w%J}UK))1}i!6}+Uq-)ZmiUN;DZ4F{m|Gr+v zv}toabFIx)EUYO6Y~jbx`t>(LFD{bfUE8wFoZmP-61vJJ;#+yI4cKChlhcDdK;VIo zmg*nLw%{)cN8FxDBw(O%gcC@K1 z#V&^CV~fOZ=S_nq%N2*zsG*lNvmg7^3)m6^gZ1c?TL0_`ogAKUIA~ReE99~Bb`~1< zSv#*K>*JO?69T@9!?-)6{?^(bw?E=yqQHIR{pC*o?PlDWsBiUi-f(6W>*y5)7Ty0| zdEfRWi3xEP_954{#pU1B(MP<7J}&(jcP#APwMDHvZ}Pu!q6X_n%zVDM*YQ&ieJ?>i zDi8gA>##m5qZTkN)_;Gh4|i#-0o1{uF(kcrTHhaFD+!Kg}Z z4Vvf4`u+ghFd5n-Sf^)kZeKzjeR3@N8(IHiPzSq-zgzVE0k#D)V@dSt;>@g%z1S$veD1W)wT?xPSVQdNY5M*E zTg2<`PppGCmbdq@#o#@gorqg4#I^R=;lndz=spkI5M_IV`{KS$on+S0Hy(Q5;`7(R z9_L4FGaT~}J_Oq|;PWb?PEdy!0im%~>DSfNBNbXTEz(ZtevBH`LZx`8D0BGDAaU-o z?!LG6OX$9zvoy>2QS3iO3eH%>BVnU93o^?{UQ#SHZ(l^R5gC*z0l<4i;b!3 zxYS;2kD6LVoWD44&=YoZOIh$wey^~m0^Yx*c0-D3eoS7=h2W~}fwfy&#ML~1g$}@= zd7k7U%i|GechJYB1~>gy#CQv(SZR2MPvldx$GQF0gM5R=#Av>mh~BzUxZBO8-Z<8c z2lw({Vpk7(firg+?$XeFKu%sCm-#5*OYP7TM(t`B<}%d9Sdsb?Qr>qiDK|koV_A0! zm3ikOj#{l<9dg1JXUbfxubZ%MqxleRlV$cn@!t5`aTB;ravjf(e1tR$c`K0z&#R#M z5N$JM)bY@l@tz%bH>}quG0fBEetZ-CYQMrS@-)Ao?QxkJE6jtFe-ip~G3cX;!Wu)) za~$T~RPzhk1}o?nx6Z7+PGGK?X9p%poLB6L5jiyB7h(>|^ouPlt^r|Ij&BaH97Qc+ zYOXN0eEj7*+L=Y$LWMly*WY<0)*tl?FV+vTc!I84sCCR*k@kL3Cp(4bt&JK=MErtn zAt^T|%0R993Lf>%Hhn#yu2;@kp*Z+r97eZ) z^IYHNOSVL{e;>T|@Bb4ky|8JqTq0~oKo7ej_5jp1a$m;!`}yM7zn`@TdIEU`=y^J+ zuLqpn=&Oc)gU~SmW`#YIykC$b615-nKY(jQeZQ~`rB(*sOCHwbeeC<|-OQ!2cA;X7 zC4D`>7TSTh2V=2d9!F7s>+7oi*&M;!MxJK1$54F_Ts!3E<~?849WRur@yD7O`y|!; zmu`Dp20q=wyFPos&=2ioUXI)y>ND2H*t%`7;H4tJ4DS*@#lIEvV3W=AVpj{>j8gZb zdRJMf?UO40ja=2_k!MbnYZLVo^ zK6+rfHMBgiz*V(7Ln5@-PT*awl4otriJ#hhamuR0Rk~y?iV?M3>*=pG{F|7sp?Xd; z#Fwa<&wq?QneH0?4LL8=TZxVQwDJ_JJJq(_nYri@D0E0mE_=u+eP_(BWbc(i=zWd! z6Ql=Lg}v z3+zRf95=S9jP(H?rgL*W!1!u0fm(mFw@yX;in|K2=aZ~n;0(btjlQ+eo^HlL z`h2-|7=yD%1${H9>t1n_??~mVFd}}htDW;|{VnK5rj5GmqK6SW58!RKj-8*6HCz$< z2ymL(d*Irk4r;UZWw00IV(d4RpT-okRvEDsbKZ`>>t{E|JuZ(JaKu7f?u}<%dcmeJ4rZcVHW=5F6{A<^^Z!2dKBnF;9jhqgSMct;x`Ff`j+9IVd5;;!PZj zSP<$^HNG5VB9>C+*j%iy9gJJ35SvZD2!B_h!LG!#hYi4%1)bw}#%!(i`K=k{quIt%(FFWanNew$syj{!z zKB8D^ww+6Pk)q8vf_camX)zAT@rR3iDT5bgq);~l+T^ahy}|6o*5b*;h_sodoWDQ) zoOySdecR-6!9I^%e09WM)xdq?)Yk)ShdJAq*@$o4${~d|cl)0n^dWZv{M$L~TP~M0 zs+ztYBDn9MZ^_2Hp}~*~4)g1=fBsU@T54w5`okITF(jH-GFxVr_mUm7ir&gs`!)L5x| zs^YYS55YEA@YAwBUp8g8g*?l^!WpSEHT-lfYxK>x_4U9xC=;7bF?5+(8rsz-BYCgM zx!T!K;?jp$V?N9Oi*yL%_<{$fa zX8w#le7W;qCFXzik-qO3!C?U&ttmL8YPgd}pN~ISdQFO2KYA=XKD--;K4X2I84>@3 z2ZKD==)EmJ%R8y&H;Kt#e2Lh8nFDx!&+~#2TFx;Mw!=gpi0BW_8xHNA(s9Jdv$sre zcYL#6k9Uk*JLE7jO&yD$y+r-3riZx~;?9m8ML&AiP5NE}Tkvfk`B(V7=!wo#TwO2B zM6IP7_8#=c^Uk5YGp-%>R1-UKWkdwt-}mxq1dOYW=O?p9bO8gDMy-586b?r@l3=xO+qJQ7-Os$x!j!_jo3bE9zM?du-|V z>K&ybxCw^>Ygz{HWC`w4Ew%lZwwXfbmA&#je}H2U7Sym@W8PD1Xi7TQ%B0(GLgdy`56mxKiGc}9-{u% zVB!tjd1qlx^H8JWxp)Zoz43VdTZqTYV}C-=iDtXK{$1eICSwoAT@&k*+RG}>%Kxyw zDj+8|EMVJU;(xf$e~fXnQ73DH+SVA<&AMRR&EU2u1N_^bfNk2$GU#Qs;rA{^U2huR zWoNbiCJo0u;4jq4%44mo^PRb`rp&uPV=;qaC2Vt1C%cW`gY%Y}Zuct$Y!TbZxO3wj zremHEY7!GSpd&pHWtwuUY#d(CUM z=`wQVxQCp_&n>W>k8x{a++h3}cPPK(HQOn;`~Qg;ZUpw9(|B)fQ7 zvq{oQ!3&w=sfw`%;rVvUtW^!R2jklS3zLU=1Z?*M-|{B#Zc8zbhp>;7ac{u-nuj?7 zhv%P!vDJ4*t~qG2+Yf{$W9=?N?0(M4`wQz{s@@-XE&{faGPHP>op&qN=h$;ruUjAF z-2TA*z=k<5#53yS)>Q7@cGy{$pk9W(+zki$I)IA-kH{|k+j6hjMkvIxF!zG%yuc?> z6M!1C_HriiyhY;tWk;?w?NnFo2XqS z=YU(}!)S83vKB`kAeCE1w>_yKZwGGqH>2o};hl5sm7-lE2E>zR+J-(`=+8HaV%~yWDeUdUy$^AkHZJOK zs54leKmXLqxC#1h{5RtMhWrA0F56+>(C4tywI>!@-6!f<*(=@qNg3Pnn^u8m8=$yt z&a6$ir)ajQzilqo6};mYEz0#cEBWQoM+L5}DWV=gT@KYYp*?eW0zc-M;`Wy*^FC$PK|HzG&*3* zypo95{q%|lDuh|v|4Gv;Je}DQCzq^S8wQixAQSQvw z`2H!HA9LK7@~P!7Y~*cZ{f!!Ts0Dz3avbuCrSYtp*dt(uwZnWLwC1Tx^0@mIx)`5C}ND*TT4B1`W?Bk#`GHnd(9U4KIfTe)U9lyUd?v` z-bZM6#6+$A%mXZ8qUM{NL%u@oW9Vzq7X+6q{|ruO+wQPMQSrAXXue6?LWOv?N!Hfj zs=RBBkIJ@D7lgHO>UyhsRQenuU9ZaIn;qxISP)NH*^|ig7p zJPa{%*e9%v!5(bdDX{3!57EwJ%mMj6_R4gzrJBM0Ei~UsJp0Uyysm}!^bJ3pN31O7 z5Y8CWV7Tg(zMJaxFQ}DBPD#PxN)5DGwSCz`KY;(KwyNe3;+m|A-n0*=Cv;R^2zl?d5tRCP2*1KAE|zyx_ozSM_FqT_4^?_qC>=n0obA>Jsd#Si2>3?tSP_pkMM9{4SE z^_Vvz=Qw(aa2{{deG|5Qz)>EJIBYN0DdLjL4c*jV96SF__~|J4CbTHEZ$Uo>J{k9` z-?2x`z|XFsPF)`H-}}Im&c?gX*8L6R=E$f4vmXm**=5Y5p7Pc94T$+3p?{p(w#8nv zEs*0I?6Bf26nT0)s{G%aSR1v0ab{v(=%WbC;icT}yoK7qz=@||j;T)K$Z&oj$MhXy zgVFe1>NlnzV_e|Ox`Ml78hn0$137Ukd6~&MrPfe&+cbrD0N#7C_h25sM1#A>Qf}#6 zHu5kN{}UJ&ehfb_4~=OCJ;qz)cDA$5+|oAM3ZJkoyzqwZn|KfT3b{0ZS+P(Tn`bg| z*(MSb%0aS z?Y~&TSI{OdVTbQ1zH7eAf4sME*2Dkwvm3dfSsMRj3-D>2^Mp1IivO!=d*I)ILqjhB z`SbKS(2rGIReeS3x-iz?WP$IKGjou8+bc^?@=yLW{Hx4(JLC?jpwU9ku;Zg zg`iH*%2q5f2s+G*qqm&gVkYM!`PaYr@}BO;qW<>TPf2Ff&;*8v+||@*BleWqO}`!g zRQF@dAzz_39O{V{_K0Gw* zn29-3`TMl_!jIqjqJJc@besz?1s0sS;D_{?u3cFu@Nz}tj&Ly_Nj%BYCvFq)sAh8Y zgh-=>t|K%ckyFse-RX*%6lx?sj{0&Vg4aa0*3Ce$5gI{YTA@6WfCq0qbCx zQ(EWt_@fJbXX`Wp|75PKpj5T^!~fPx22WtBI&LB~n2peMD}y!ipWCm@_SLFb8TGf_ z3VX1(2GvO#6ceQRJnMQ{;A85J7`B>AI^Ncs_h|y^Z{S0@w$gL?vv1>1u1v&P&iS&g zR}pvUN%-!)pl4h@)?Z@)^xu3=Y1SOKzkPMzlo6?#Z_;+O;8Z97uq1s1EXvJT^zYy- zN3V!~rO;p0$K`#W>ybHR)V(m5c`j;Q9XlF|wRp@WJ^w&EV_A0!m2rO*@gd{QtVJ(? zfvtk|wifHFB*q4QU7IiSQOtQV-Xs3Qdu1PbI47YW<|5`)2Io2Ah=6UT+wCe>!7y*7-DTBx z#yrf4-5*=MYjbSulV-2js#2W-=N0d^ugyW}{GQRmvy+%^%f0GRz}Q&Z-*$^L3795r zt*iC7a+$4&H?fePs@}Ds*6MvyTEVIhqv+@&*iHgEhbRwZ{IfQ1DyMD^b7mkQt@Oj<4(aB3T{#< z^9Svmr){V_2H0+Bp5ptUCN}Gtn|TtoK8f>{eTmw$aqTb$Z`Pi=;>g>9XNLG|;D2#% zKu#j>lD^I`Zl=uoD0^j~^?>G) z>A)wE7V=YaEe;z|U0^Ah=P$aO@;!+BFLl98?|(kaT=(QU%Y&(Z8NrWaV!bc@+c16Y zM3B!7y-|w4NwBZllTIn~*L@EDN#IdBF7lQsGpEC`b!YT5D*|yRp7pF#y4J|^ICg!~ zb!W@Y)Zhe9Lo6`ciS?eA*4IM>xzALc&_}LpQ+7NxjcW%jK>cl+OM0tK+?HWK>+2!H zU?`0kF%v#K6Yss7x8>xSiRaH0L)_OI+9j<$Dvy$Q53v2zc{p`1a7Iptl&!dd>GrWs zlH)0cSndP0KSh0K5!`nwh5MLGhYy~VrH$o0)Q3Pm3*RvuapOAu9D;4AOm0f%1dvb1 z{%CcneD&j1teu4VZD8DFnOqv=p(Dq4Mne!`^XEav z;SFX3Py30MQ&9EaF1>%G{qV3lhP4w0MGS4$F0$;*-`lUa`<~(U@+QV^XTL-JP0ZIQ zFo)8+ioZv^Z~Z50Q$A~$hx!|G(W9z)HU)pH)!$TG`lRS_4}06wrD2HEkBLeE+SU<=9$H?gHQYRhGv*H&Gjwy@v+FSUrZpxS7DxnsKk3B6On3T}#eL z+)XXv*V}@3W}CitV0&EtvwLw9V~wN{mx$w!uJumc$bzSrO!NWf42$LvtdLi9bfw9( zx3XTT6x22zU$-EV`7B~aifl6#*3M=%YGf>#{Wy|br6W&`FcdtU8d3Vrbb+NTvZd}> zm+)sJ>l@nlN{L{MJua$D_!fC*IR0Hk`oVLUC*Olwe_OOH7rirI!WX9@E@f;`g_g!>Zi3g=NLb|Y?Vb0xs>LcYWW36p1_iTy(&agMk4cGQxF<*tepN(E6 zSVwKYCi)}T`->ch4LVv;%=Z?}w@{(pyUkIa{fg#MBhOgaXUsoO+abBfRd!t@lC;S;48|;A^v@BrDeiL#KQY#`Oqc_%HL)54mz;*!k zypx*tnmS+R9@MDMOwl2(XF7nj1Fo!<)`3i;mu+VoyF9f)zUbF23eJ2^;@;Jt73fs{N`&3cm$DecY z-i)u=PLu0(yN0{RK#Y}-dDOByeIL#PgDmQ@4%4b3cM6d{gMT#fbXb*q{T@I1C03#*H~)%>`_S3M?x1s-_Qk zFWT6nTg-mBjU70&=nIWAc*n&v>f^3a3VQ8^uG8iy;`YFof$^6|4PUZS;PO=NZ{7B! z!aF|MSF0w`a zt(W;ND>=7n{<9Rdz&265oAJzK+(jHfU|iJSKA(1#y>%i_Pre@Fafna5{BJ(AvZAr~ z>2p}=A|@VVS!vV0Ni`d>$gB(gu%@%E;oEt*ziGC}X%in4KI9Jbq*mr(iD_n!G3)=p z9ci`+(1^&v`=(C}6}flOZ-!i`lsdqB|HH@e&v*L~8*$tOyLi%_IYJvsw@sVb5_$W6n1>ZH z*2Y-$*db4VJLLV)SbsgI@BV@6xEHG9wn%#qoQ(frePNGqB)KKzB}HB-y@9yPIo>&l zd!cH}d>`=`f&<>s9`V>bkG&kYc>Dug)P4o;7IJvHZJzVP8zIOi)WTXt>{n1Lmbqog zKOQ{-;HK^IC1QKsR)W6MV)*gjSg*zK?#2L1dl>uk0>p9HBdc^l{z1151CF%DvljDL3=d3*_Hw{F`<-q~y>_WrWSA++Q?&__5Az3Hd0#xH930Nr*T za)XtjF)$J5^!Fm?09|?f`3<~B@G1BYXg<$c5^yu<)oFL3arEy`d!Uv+#{teBEv8S$ zJjj`$k6R$4Mkg@T6W{3>d0%u`a+o^vLz&Ew{$H9zLKX$o;IrU$JK}w?Zm5lmwTir&z_l>%&U_#HU?+9!6gA~xcTuws*dpI|XYyI08HL(8=F%mK z{e#gZ^K6~>t`jx;BHKdThXx{7VziPw06({Nuy+(VJL-B@k2$FMChKI8t|{-IF!wn; z*}@z@bE(rWuD1XWXQkE^b2&xhj&S{R`5lpmVP7p{HRkqNJ7~~P<)IDOqW+e;;Edo6 zd3@rOnZ2}`-%d7Da|GJDmiue&BUTpgA)K0Jq93u=FfVn6`}e7mjJu5RA<0w9$NRT# z+hF2Oe49B=_8uqS7?SXH;X2gRh)vITOHB`JT(SDNe_}l~M*hz3A;$H1nL9~B!^{!p zrmmyP2cp_Ss}yp*GA-mM%}E9?wio7>y4WGD%9T&x}Z`<#kq9fgl(R{ zjEdfRXn{)$digfi&B8j~jOUxIVN=!lVpEf={Iw1H@nziSn}Rbt2;)eoDP6;yk!Q-T zs{1DXL704QVyBvP|LTUO_J%JY>zo5aeN%uDlp2NDHjrvRI{lYxjD&)K) zpS!BZpr5g<7Z%8@<&JH-5A`-9zIRu-dZTpYfu>;2e#|3P_f6Qol#d$|gr;$Y;{EZn z0Z!t`_`Kkn7C8E%`G$xZHhW2!hkx9BfGCe;GZ1!pP6|NXsV-L za66iH=IA4z*w8D0yKIJbZeqUhYUie^ z|F-4j0u#A(n7d*ff9IU3X5NXwWhZLyMe{9GQg4+rk;@XfQuy)+8}nSK*;`69>yGoY zm+qUQ{zl!WwZCo>+8X8GDQhKW2HMKP_sB(CH0}r&IW*S&?`mZ9v>|4w;MRa2cXtmwyA>Rh2k|bR!{_H{u|2VJ^VpYZLv8^- z+l8^KxY!4RUM`%4$QMd>eSd&0_@Ez76}&JLZv*!v*%fMxGM|fokG~Js_XpS($c*(^ zD`1|9csKUIlCJ?AzL?iseSd)MOXyt9va&B=d|p4q#yy-vwn|pw#??9udnNU65uy;Q z1HNnWL!f@q#{s?up>xE3yvNN~V{F|P`ftGbaPI*}1pN5xXlTcoskL&aolWRz1#IER zzj2_Bc}|&%)~|X!v9-8MZE}6we1%#m%u$omi~7s|j$34+4jtoE zaAfOeES{}UA-C(~yxHcPALOyO%u4R2%4^4&iT}u(KS1|mfq!$f8!KwzIUn{lC$^2X zbU)K4a#lgQ>95t_n4#sU`zFR6;d*rH4rg9@(yHYh#__iv*V}wI5Ym;?$_+^1f5@MtR8ZcJ!AwP#4?mn$@pr zeD9I9ldZorOx10%H#(~4lpwzr`miVaW+en8-u+oY4>xtUl7NBjsN15)3EU6-?)63e zP33I;N|x?z@`Uc%O%4kD9?mxr{c@FXSDb`%68G-(8nONngMfeQf!f3>xBoyBpW}Hy zEv}~R=T7D*$i2Y)u5|MS>Th)s|Kbk2a9gZ@_)_gWW-aLuxtp-2N@46bab|4-{{!^~ zO<0S!T~fwGE&f&OZ|pfl-BsKLGcrQK&C(DUwcU6I}TY7)pIU6 zptB5LeU3Q+(0F_(Eb#V;_|z+)o+`p8agC}Q{!7vqdRg}LaqnF@LS zBWEgBV#`tYj$%IB{Ck>>e1douZLM<-h04S@6Sz~$Tgbt1;G1#OEVfYlhukWvezzDG z+PGKnF3ZY{t$y29CdC&1VQ1FpS$|u1{Y1j-s~>B7bs~7j!?3UScM>1W`Wv`Sq2bj| zmZr2oJ+>Xz!+CA5P7KFg2so6<4(Z?w&!A3&6436SANwz2x8WgJ?}OsV)phJB^7DBw z@XZSK^?(OF_JymM%F1-}Wb@;ms(6R;jqfq~LvF4m|*<@Bf$z&HJi-&+eY z*Z-*Rm;G2Dou|xIs0NZ5nk#<9_kv;Rp@$F~3migx|A-)Ou zMl~lV)yLhWj;(ms6y(6SVBh>zUk~^P$7ROy)U;T#KUCyB*oQ~$33WXv7+W7VnEeE1 z^4O%DTWn{~3VLcSTn}aJA?O(fE<9kXatM-xo;4QcYoXC)W`7d-a)`AlvMp4ajsMdK z{TLJC9m~1QPFB~a7bBBbhnmU3-DF<07MCRAJU)l#pC>zZuZVYjH8rJlufIDR3~r$% zIHS(Gj@R1vL;X$67h1Dz5WC)S`a@s&F5T|Yq5Rl|sNE_~oWs6h6M7~WOk9L@r`mSh zz5sjFD~I&(na8~CR6@U&KPQWG|MM)*uWME$I!ecP)NNa&l}B&gKHyol2p#C-uW}Nf zuiu1c&v55W%#N!zf1AE0(Qh=;i5fe8HXprpAB)~xrEY($4+Y=*hzEO=789uTx3l+$ zVBfj!l(Kudf#>y7>rC9G3zoX2_7}8sUah|&uL1lL@&x3P&n+KIeUFLILYAb@fwN50 z&UxATTGk+uuF_UWFk1-HlvZkiJL3HdA0FZ#-*(J?tXJjuiUi)LQAd z{U!EGzrN03dt4rt^3Xya+e;nVU@V`L_#)=Gb3gXt?_cQa47S1ShavvNcBTAW)P+BZ zS)Mgk;Nez0*@T`zV$;-b!TlM1n8Zy9zBJ~fdJSk|YThD@oDMedlIm**;}$C5U5+Gn z61*(tEZ2_~;^DxnY+`>K<9==22=Z2O9)5c@-?EJO6xM3l!^0lu<=JyOv~PG)KeND9 z*#K+jJbbXZC+MTxr0G-IgF~(CO8B$hOJ3t%)!1RX_ilDoa*x}cji+k zIrFI*B3gNz_RSXm6XgyT=N7QR;IoYp=zGUmc4>u#8^Xq#FY>&&R`9I9+{dNp zN2hv69^2T&^5^HJg`TSZ9{A13p>0f=Z+i4&DRL!5jeF72cz)C&-bJisLze05fpbva zD7W44;k_86+_Z+^5GnTQd;|G75Z7=nT5P1&-`X@UAKvvFqha-xnGr85bd0oJDHh(Q z`EjAu$Gm%GJjBn7|{iJ_s-cwS@m(JX| zw5fjlkAn`R=yO2Nx3hPZv-sIjSsJm+TjucfMCujK+;r^HcVW zAf}$`VC@xL&vC$!3apsqzv`0u7Sqo+BiBymiX}G2#gb$|fAHHL)R3&+uU$LnKHT8!SQHipFO$xSVJdgJo^>UE1<6(*dCXiV{3`Cf?5pV(2j;y zd1QTW2{ZEdz-g|=bExl^YX>~;MrxSP_$0*2+C5|3N@H>(sfqH#^U3WS4)I#`LUMh*=mgax1qNG(l%H* z{p%FVoY@8&^ZV2SJ@##e75T|1dor(D>U??cW{#ZwJ$OFY`W2x)%=^6KJ&e2KHCr$H zUcu>B5#z?<{2i|_k9h3pRQ$VO;Ap14X8XPjYBuDw_u==l*7cS`%!sJ(OW)vK6uk$o z9rV{D=I49+9?w(?KhMMbnWtv`ZB^j?O43&{wO5GU$y$_xpD&hqr&cj}tMPk)D+)Z@ zA?V6Aqn;pYZWmx5BD21`de9oIPvCsnTNJSUL#C!QHS5@0!1^+A_SDEybFg@K0o&qA z$7b2UoV)^dvpL4<;-ub`Byx@k_?E!o1#D|8>)whJ^*1esb#P9=;G(8cpuHRYTSO@2 zr6G=(ID7tXY#{i*H&M^%jQLN+^Xj%k6~>~Q-ySOPY>3rks5ix09QpIqxLvnhqx6kD zWaIh6`1j4eIc~)>YeJ$I&)=DO zevi;SqMkDFJkl?BkW}hQ|u61Zq7cw~UoWu0<@T+e$L(y2v$O zKuxVKa&1fCi;Kl+@9+(`Q$GUBp$PHdyGm?32JmY@sE$y%mft!VVS7DWK572G< z$fc^yLoZ8d_-;M;TNd!9t8tIzo`#r_byVuOqE}e@ zUGrnL{)Sv;6l?Uz-C*o59L&qBef+~QkG8Mb7GQt)Flx<@d%>UbAI1)Gu*cXny)}Nv zDU9vcd|s`;6)Y|nb$mkyq5r1tKPA~iioK{A<_{b|V7?&=>c%!|uQPr?UqKA}%gAHS z9Ffq`3)rS9qUHsy2h{0sk1ZFC`nN56Y8WuGA0RGSgtJh4XUO-p?UD+NOoFI&Un&2F zog5zQ>pxTNW7N@yYkti6<}1`&oB4dN)w_S54IJ!I)OI8973-6E-Lo~{q%C+mHjlF8 zUX8Iv>?mRD8N12G^Ol&|<%iygioW?9;u3uhkuLVbuy>W1b=LHVGiO~LTroEEHwXNU z`95mU025%z_-(EQvAdN$k<`Ina(?YsKrfJgdYWi(Xdp5H+us z3EQpUzxu%~HQVAGTS=F+B*){(JrEskxGpTm0wPsFZ1?TqdcQ^8ET6}_kV-fXx_EL!i0>!x;`YdW=cmf&~&qWc@hohM(N zvc;DBaT)9ho3M{na8W;-I;!Q)e2?#xulpNpb7c06s2mv;Fpg6}FRqP#uj;@wc+Ivz z@T8NQ(t9NizBov(^kkH+b>Btk7n#Yu2>)K6?@Rf~#h%FNx4;=Z9&?=FWdBIejS9pb zAYNIDXVz^)fD6510e?)?`?J5n{xH`;y+ihv5Wl15Cw1F2h4)8d&cLUMu}j2coIh=G zB}}z7|GWb7p!`mnE#5aZ-1hi7S&1WH4ub2PT(1ASQ!I*l9>^SS{MYiB>novjd`m$f`hV=_u^?o(Yh|2};e39pK-8V)3Ei%~?$$KlcH4rCT zSs&}a`~!2w`BV$}XN$%i;Ub1DBS$hlY8Gt9eau2mD4fwI>QFNm60k+yzW&Oq;?6PY z!9$@Jhr6rjA0_Vx`{6WO1M41Hi#)RQ=(^Akr;cOVOvJz7gN{GcE9u0g1s!$Uw3$2b zUBD|4_OW+i)~y7?fJVrt{_2osRQ3YPkeJZxN{VjFn)0!u$a(h5@q{fapFqATQGd(q z=waS9^+_Iby5d`a1G5S40sB?{$+90YUzW&zG-+K>EbgW8DkrsSJFc1bO`5w9xkwPDECHAOaj^sK=W<-j>#CxTAtw zi+#K5s;9AEfUO7`KlcmhcsFc=hpoh48IG zZs-65%Xt+(QVn~+dhH&d*57JY3IYbSHF7Q|5EImQk%tT%e(=qE_+8!f{Q=|V$UJ}8 z7jR_+_ExEb@?zWtE9=qfJ!+=DKfo4z(9kxchOF3IrH|$MA!Dugy6wX=e1>_Eqo1#U zb9gBqe7YF=1$LalW8vdNoZrM(v@%Xm`{#3YpNDOT0$v6yIUHEOfc}?*m~HmnkT;2( z6-DEwDa`Yd+lgA^v+wST=6T1O27Jwqx;x&7HV63efnlGTseyd%`ay8Px3!~oXQo#1 z#y=`XwSC1Jsy^R*Wmdsu({H6d5_mRhO|<%Cy$Sd}QCDX#X_0Lq`|wQZ?iKLG(-v}a zl0$24@wsN?q^xbfnWX!%sJ~5G^hG53m-e>)-2Aa2&9e3R2vLt~duP9Wj%Nd6;~PHqc@rZY=C2a}w0Mo=GIwgG>bBI@p1JP@IF_Ee z!T0Lx+Mzz`Ag6&tSl}DmrfHIjB~ZsD&Ry^_I9iDQe%4qrGQLM|7Bsddo`^RO>W})H zYHKf7S=8Ua*^2sG1Mo@=@gc8^GiIyXUtsoyem@q!N4Fj0WKS7;zu22fe1O3A_z&Wa zejFUu-)iSEYe@yp9`T1njsm`cb9I^PR3htdsQXaUD|LY8L$qy7{&hRKR&j2@rWy1l zngb`j59gk4nRv7PAid>qYt8GFA}KDukeBMK0Q+aWfU>z|o&!uUXtd0F;O zk%Qs;zo%K*yUsHPcyEEX)5Zli_YM3G)R2&0>~!K~^8UX%cgDV@NZ_AjuLNqW+FqR) zUha$m`+6TIa7Cj2)^2nI=)WOvg8oAA49BmY`>S>*OAM#h_nnj}4(ZSW&!8!z60&a& zM88Hg;322DrBkwxW9xIse^kM__i!)7XTZi8fAn4ZUtehXB1h_9rwD!PitlRsZ(?}< zqft)w(qaz+hN+b&`}Vjv#wY??Mc$;{rM3N+HMIg~$pe)UbK%YgO&@ZnP~S@J({f?2 zFQ&y@v~B!a{jECsAb)lu4Rp}qzFj(@M)1}iOI95-{l@T?*q$ec1?kgLK*O|z?Oeuuqoo2if=mzZPTDaZ>_ z_C{M#ANk=@LmT+$w7rk-0Xe*h#aQnbT)n{fShI>tCRanV(1B(iKpPi$vOh4#FXTa& zvjooQ)XB4`zj;LcEuq7jj>bd1kOvoYz&YO@u`95GeT&7R-qzu1@%gB~q22<#WA5Dn z$v;e5fpw?ak~0N;^iKAu@qQ5>dIJ2DbsSRt4IXGnCvNM|yQ6MP-dpO>NwfC5^Hzn# zbsPOdB5~lzqq?(KY>$g;e_CIY2J+rA&n5Y>=PaAx39WoEj@SmF2Zx+Fd3E%0xpq!x zWne!zg|!na?jO9vA%@1?Wwu*7manffOuDg5eeuW5TjTr0;!aUK_T10u$kRT-`|&e} zuCFuLrUDZ{3;G;f)SQ^)n0HkBtzgUU5QO z#KU+n?1Z`VnN^_vaiuZIZMutcnRxuUyDslD-$e=JK`iJpJsgkI_k>@`n1GPP&DI~rHY#R#> zL2?EmX2t#WZ5R6{&@YO7g$3W7^*7x%Ri=JzuKjzA?ZEpxE0eDV{}!00V5}$de(APY zJJ7~uAH4O=!+54Qos3a<$N8$GO>7PwM=s-Ek6)1o!zx7<->PZ)4Xu;@q+SN24##jk8xj-%v{` zaNgfD9~i487&{c$1gmG_rjpcvL|tbv`T+~|y#%(6<)(ESi~8Hd+dn&~ZPowCVKeXT zqOL(4fco8Fn<}$@HgIQwrYVhlyRRO4IR{u(Ex`@?+JWs18UAj@y;tZ&lYfpn;@ks> zO;P)C)py2y2RIEAaM6}V9jXaVfMdlIB2hClQv;@3pPl;J!MMQ+?yll&K};kx;LFZU zHYVmCi)5{ydsWeVGnHm-sz>ZldI&v9_OLGaVT0k{@jpfsd+SIfc_xZ%p;`LL%y9eO zw+)X*&yE=1p?c(vX_jzkp&4AEF%jgMQEf#%OJ)vkeBNQ?4~RYg&_!G;xX!RgmPc&6 zOnYav&6M5Xpkn_axnYkT-6C)Px(c|RyCQG%75oQ%k>dT*_K?hXNo|>=-UaaUmyUyb zI@qYo%i5mM4Gq|$hK-yW>!iTUFy|OUE|EWbHH?B*2Ji~!Q{nEBjA+HAXH_g;~Wgp_rS7B!A1~Xql{4)B=Fm8P4V0#H* z#L}@>#v;dE0eV6_pBb<3#D0^H`r9tN2i4YIt`s;AJHa*y^{no&FT=VPY&WX5)ME;a zi+3nFVA}=vf$v~<2LHo3&z=|ZPf5uA2ga?1_`DY0Ybt7AwSWQJf&cN23Y?9!!6iAq z3fK;|Hv^a3J)Duz$g|tSIdj)83lg}P*{6-$l; zmz2KzHQQu7+j!)J3o+;Bu7F1A&WjC(F;~rtr-SvH^}78LQf6$@F>iA5?Wvf;m?in z4pH|a|46|0s7!1N^J)ge5zM0;u`yUL>+omJV=U&OemC-hYJxD&LEM5` zf2;ADZIDuS+H&+R{)e&I@8WWf&zpw3c@W0scL$GWVB8ReI2dYp6H83)Qu3p#Jf5fV zo>`mJ=MbT=CzAO(#GaUQCvd9V78p;~e39$HyU}fjD%3vyecEXJ{A1wRdd5(n7QB}5 zr%9;SeSxuc+cipIxsx_Px$${M+(G&#tOJpxd5Qu#ZzaF$z37cKjPV zF$<$}BJJd|7d_nixTwFOkHCh!z39p9RPs&x!Igj6M(1qBUGXzJ>l#IKh<4pyGswz* zI%sx_UVQSA5GTZXLxs65FfVNmsJ~Imnf)(|b_UzX&)0kRE-UeA_}D@(E?|pzg1kF8 zf33I=SlL_Mse3;w=hc4GXSV8%F5~Rb#)VH2JN&^%C9QMj4Y95&b;>#cI+XbLR^o3X zc8u3-RZdBv1Dx)0lLs#J)CrtBbCKif;Jv@-K)e?aW_8?z_T;O+lTrmfej0t_A9-_E zNb!=?5wYw8&*fUF@!*=m`NlbL+?UX__{AaltAgwCrYF7Y9*p}KxUvqO^p;EG?u_gj zupMj<7q}UNp(obrN@xr0M4rGPi@Mh(hi~Bn>d~v?+RF{(8H=?&1!vnkZt2x*)ZY+) z6ORK9E5`4-Eqg54gDA9N9c^4v^)cX|MBXhA__wfT#L*z9ppMJ@Jg`dWx#it=BRQU9 zg+{y|IGBaCW2KU_5zFbeL4to$jaNfOUZ3}#V@KD3Ypx=6q`D#hpxZ_W{M-Gt#A9z|*{Y|WK@Xp>z zx$NK`z?_N7S$|pcW7d*#Wz^dQ-)rILaroU69JueH-)cMNG>*RZn(ayX`;i|2MM6I11k({&8TNaoj-8KYw+;xbJuS9)# zK28U*gd>?Q< z>|+zPbZT<3-;{m*sQsWfAG+UxaStiPo6^UKe`7B#&p%-DME#9e-y+*r3Vn#ZuIu|1 zC#S8ATB(hHiMNfaTr+Cp^xqMe=<~G*eu`y1=UKof0RAENPVN^u7T)Xsn{zPWZ>+!N z|1v`4VWyr~YN20#RKsOKKaJ(e{c%>rbw#$w_fe0gL%~=xb=FxkK%c(I?Xwo2*{8C0 zb|-{4nD{;R&F`J)Kl7$${FqSnt6j*$6~~?n4(8_t-pjF%b-zF!=4b5XeyrPb@Busf zpgUwO+5#WSbxUc8`|_tyuhhS zKIBq+mL4?MeKVYXta6Op#Qu>M z>+hK8BbP96Yj|GN-BTOtz6skP+3($hJoa5Ydn-5bfD1pWhPC??emWaI!Cq|jJ>b7G zxlr>T6<|-hfcPwMEH&X_YWNK%3B zZh9%Ph(&i|>_ghQN!(Yiyx>k(a4Jo}o`Ad=bb9jU z-?6D@e>;3r+-U-HI4Kw2y=^7O5_?*X9UURFzvFt&8uT$KZu-Z<39b!p=|A~r9O3{52@8OX0b?Db7 zVBkc*FLRyLqXI80FgFJ9grw@e3ENi+`t3~QlO%o>cskpOltw~7an@76(19$Puf^4F zS8C+^J--SrAM^uRtG?OO1YQ?2?>SF8TLS(@KOSWM!Pq~ps)_Xl-jnY+c2koYwY!;S z@=689g&*&^@H_(VB9d4_wLPVgPd({C?%a!>Wb~vT!QE6J z_ZH3*U|zG=c>JxUgv7fsYW?kbvM220T?t7?wjigg+MZd}9P#vCtn<{^ypHe1kq48# z71Fx0vFy)L``1<5)r0z?HeStveigUBLuKETDp3iApWi}m<*tjE4BW5va~_wMg-%s} zv^6;D3Ou3qn{h{0xUmLqDdf_-d~TY)@4)sDbme};&w%?_xD0r=*}nWf8?Xj|q2GQd z7CKt`UIN=78MqhNwnWcPe>e0lz2q4npNEv4?IwSc{%rU!^K!_2RL1(Rf;eDpEOkiL z9x;;(I&}K}fN|ePU)$O!kyjG^FYmj-Ne2!q*42T>DA=gQ_N;v^klB~~e0_WP@k#78 z^<36=HJxP zQ7w;eM6J9lG%;!le)qt*@Z;(qb~WML6FEd^Ra%)p8uGs{&G0|#nAKDCa}(oQTuYzM zjU=BE`6|gH-T3l^$QS7oP2QLSGjwuvKZflH7qn0!PyVx4{5{^lR(8-BkD_$Mza#GH8sw9@Kt z>bQ4OvJqFO@Y}egbFICXU2lSaaxZZ1Cp}?Ruf!AAs*n4)c@>lRy614N zCLoU8=_)nWh~L9J=3|%Cc9P~pYW?lv+|sB;q=8R)EPNvwnh|#Nmi&&fTLNPa-VN=Y zF&{-8EMm@x9bg_G{Kvq4RL8mpM;Pzv0oxhiS`CUKA6-zF8Hjsd2wia8IpJ^gsY;p; ziTTRFI@tdBYd$o*cHlgG#CZ$6Ht^lB|4j1>+6F7cT>qb`>yD42`o2RC0b*#Ogesv( zCuM6k*`3+VZh9d!36ihU6jV?^48^6l5Rl#t9Tg!|gCK_9A<}!1u2d<~l%lU42Q@NbF~z7Txh+Y-KR6{GFdiNNZNcsCz7y#LFNB{#v4IW>Wypl4^7$u0Eb z`W)5nZ^Y{6L6du&9s8;KdW%sB!!Hd0h64Pw^)#^_&@-*C2gHaK9OezZqD61q`Gc_` z)dwUFu5tuxV>9l1xI3Z8O`q@RzlJ(^mzP*0%{nVXP8{M0>}BZvs8_?K>M)6ShV!`4 zL5>-b|H!QAB3JUa!v?b^2=5i#eV%u;m`laqyqN*moBi-_jewzCbx|KMWs(u^XB)m5 z?sV$6z_{u1*A2cD9B`s1T*`G0`0=*A zu6;Y4NCDpk`saUP|9oP}0fV);BoSPd6~IY-G+JtX!c}mlah(5yU5Q`z`W<=gsjl21 z$Kx)vdaSQW*bWuClR_`ymnrVd)RS?jr-I+0M{QkM4>c|IIdJX7Odp6klt0ya;WO<$ z>@&rE9T@VDF4Q?_=R7egU?|YNQZ<1xz%v~f156V>7KpfJCi>xq>FW%(>2mg{P1d9T zw8dV4*bDiSO@Y@ftSOLC?}FL|eUE}|j?CU{#x2-$@a+>6=47~*kekO|$ef@0&X@-u zxVyYX)l7}YSiKzNRAFvet&brmhi)6h+`E~5u!woF4rfL4uD7_$X!M0Vz#hoEgl?Oy z;M_C*et4MBWM!QS>%=0r_B220^^vG;E3$p5lw9OAgs+-yJa_sac^b^s^6Lto2J)`3 z)$dDMm^0y!(Jd3-w5q4C2ViwmnMcMwu$s$0^;rDUv8z+bt3mD)@|$n_p}c-( z0jnzuj;)P&mjyEG4bBxilNfl%hS;`&@PTf`ddVuZMsOMt6?|6KNncyEa$5Dqx z)so!iL`{Oe9`ND{9sK^l*fDl-MY{W*8~JjJstx`b;>OeZH->G93>_%yL*hGq5B$yR zWGx_bC_>-dmro@|l`gZ60>mQF2SdFAVz8TC2AGH^FfS~)fYt8?+Z>r%?z}It2ZFI) z-aCtoIBP7-e+rz*XIm(jTwKWr{VMaNe*Td^JgOA^@v`aA+{!dlYnwV}`nTYj#hM{} zUn4kjEEhMHv{9q>Y^wm%#n}syPy9o>4{^TP%1^;B!j!`!Bf!aRJauEbd2*8@VLjeI z9D#mv^iv(v?ky_*HvU^zXzauxVdXFG4=?`j48xiqLqi7|_K1GDhM~3ecqc;O?NVFC zd&(G_Q)PN;&xBm`zm;%Eh$D!3reEz;mihqPl)H@hSK`J1KY11z?*(@?8f)p87TZ%#Er*(=Cax9o%&@kLJ+0(``QpW7 z?1?q?y@d0X$rXXxakJoe1FskP*io-$s`>Hv%q{C{2ev`Vt)FTbW_3HxxZ4sk>rLd* zw0;qhQ4b8PRS$Y~P+vQ+%~sGy7vAZtH-h^Od$+k3K3;Jl{NCKh2F60#nuP63CE?oC z(BL;C!cIj)v!8?KML<1s{nt)a@6=I$#DZ-KIA+u@PlZHNe!B2Pxx%f}Dy_!`H7?py54+l;b4z9|hA`T>1 zqtG!cxbL&AvN}*^K9-m*a{ww|r3cTRjd*Ppa6KdTK7HKU;GbkoxfTEZ8vjiOUWA?- zDIRl}1sPlerTF(+Ebc4RTje()2QE1=RV+0ZbJA^VDc@I4v5|X@ z8Zf7q6xgZNgf#=+y2}{5`dhYUg`CdJ8}jb%xoWX9#z0LGa7^YHCSV@=xLFEwnY`z- z?tvP3thr_FJpD6c@&vp~&DOg@Vc!_zn}Jv6+gP6lo$yF%g)_$>a!9(ZbW9;vG;)T5 zvuJ#Ku)_@0*yrK5j`Tbr}(ZTc?j5Eig3HBMYn>eE`VigcaF>e==s+Q05w} z7YFBC$!+vaVtXrVdlBCYe9t#7@VB#Br7f&kUSh9nmD1+%Z&*rx+26Xe!gDJ*E_}AY z-~N5E$sAbH!@Hs2J3)UA@`(Xf#8B3I#~&fK)aHx$vAJ`snYGXTt`8R+m5YZq7d({6 zxmZ=L0ooEL+k-X0`zrLD7_UrQf^%nzg1$2kxdLh|t%Wm7wY{2k0pF%Ha>TokPfzv~ z+&%)^R7K!x(8WcqC30=5t%JE#-qK5o-y!*<+>2Z14vd^}k%>ev9 z1@rh^mi!jPNH>4LT^}`^eOtsxH=<*!pDB)ep+4@H821L&)CxN}2UsJe-sMa#DZGv+ z_tY-@9o3fkKKg{n^LrD)d6n%J&&oVJ?un=u#^2Fx_ko8s2>ye*J!(hbZ>xH3@L_0Z zL01^DoNilECij}k9Sc1T)N!#7H!SQI><@KZ(xHAhk9FH{(f_uzZx`Tz$#@@<0-h=O z{BHc-f6%t6j(dP^+e=1X8-1HE1jY^CYJ8UhpM4r zsRi0`&$P7SNePvP(xf#h?e&TPaF^&ZOjr;Ku>_q`@*=8uzmicpC^+@FGkzWaj0b%+A*rmiE;Z)i1Gse4moo8?Su zHd^FiuE(!5zxuPOg}pW8Ghp6_Tw^|4(1=@eH`mYd-Rx(wK&2hZ3@+W6Sn(QJqhZ46nq(j z`pVezFScRL{EmHVs>VMlzA!0e`EHcgYz1mUbQ!C+h`nfC1ocECbssxWBh|QSTIerSQEq7#p~| zy3SxbQx5t4Ao^RV9dH2uR@+H!HRr@t$PFFE?_bdU4Yql})OzDyHx19jJv&1|E&%x{ z6ZpDh%p>A0+hZ~`Ke3i1V0E8ioQdp>fo}I^k&8ckXdHfDe>O>()Odu2^)sy5X5TIQ z$`HHb%q@jIk#Ul48>}>Uma!0*7%=S&-qj{M>QXG*S1tt~WoOKz_*=Fa3i(p*xhGgZ zTQXd5K6oqmSw_71N%XQ3fAEb9KVDPmLlb?BevH}x+x~BppzCxLIvfom*@Nq|g&zY$ zH@5BgJ@^}66l;OnsM-nZL>?6 zsq~+?oL|2~@59_^sbfG4bR9MPO|?b-5tw^roW&6Wf6MD&NFbN0KWke9>r;tqjWuV}t`a_1wW>FFZ&lP))h#UHB;m5B1PmRFA%{VV{ zCRdH5UsHpG`_KHa#rheG`My!ghktA|G~8fn+xbs3>r}|UGw+)pz(;Af)cJ3&?#Hk- zL&tHEfqZR^+kI=Iu0!v*Zw=&UqMizB-E=>OZI-jvimHZITTej0Z5ncv@uqQ6{)W5r zwu7VVqLI9^zWKtBD}L20Lh$vB|JVQw-B9jI*N8W3k3^JQJk{X$=jX^r@jWD>R;?sr zC8vY+9^T>SVpWZsZO+^^<>S{(_fJ{yPx163Tc_P~^-o~f&t1~|Oz1u~1O9eL@xH$} z7X57+{-%!G&$bxjCSa{bIl&e0kv^yfpTQcK@`pR{+@p9?=}|b#RonbJ6$Sn#^3{1^ z&`kUqyb{3R^RBqO@gKz&ESaap)zp>qI>_npd8Gz8lTSi>uD+Y~wUYM*a@ED$QtVmn zJQjGC;Gbj;m0A_hr*M`p9*_0)5!NE^yB%k1K1ACPnZ3^Jb0sD`caB#khxq9w&#}Jj z@a+kj579PVW*rCDHhPm_`81H4c=GoRHHEeC^|Lr}ne6 zf1A8+J$e|h&g*GDB<3rV6QNAk*#iG%Jt^;$xiwp1ol{#5`=a*Fcz>sVfnQv3HLzC9 z)oO{TiRO7FY7Kn0*$Oxj%v(16&%(YF=3)jv?Po#UXJu^}HI$3SeW{?91NG~T&Ey^8 zoew@jPFKN6ays>-wtf?#jmta#Z3p>zQxngnP+N(8HsIOtaIe0Z)<)Z_6Hy;!#e3`s zE#FD8{g>ZK+BvaGTf|_p)GOM}{s3Sj+Wjptl-$Mwe={t1-`+T$9K_%@ZjPQNaQC(A z5KC@LZN8zNs{zp5{Tw|^<6PiDVXtJO+V^`9{cquJ>Gn`<|4oGLF!21Fu$K)4|74Q=>JyCrQ&a+&eT9GP#ynf z!Slazv0r!6tR&o9P9O%2*4G2h`EzbBK{RNmAd1KkLqT3eA2XoH}4b4@x-pAM@9n6oiFM!VoT><>Q zZX2ZhZ~MO{{2S{GkrUk$%{%+%%ZseR6*9pI?62*Ue700Q zcHpZJ_}jR9^V1&ePDCDD%r}hKEja`W%q8M#z1t;u=eP;L-!dGMd0p(>4@aa7`EGSP z-Imy`&{`N$$&+vWJE2y^GgyN-7r_ykv*$wM2fHSu>9)jfsY53fUUPZ-g~iS6b2RaI z;vZ2`;8IsX(4)AQSN!!o3h~ZR2k+97cL(wa3*6GM8*#`*+axb?5H0I^&@ZRO1frkJ z5jS`w-fMAuAK>=T$N--@^0c^Twm#q@ZluqF`wn>-RSow63j2S_yFi`@!Ko|F)b8CJ zH(eh8U>EeddgJ>fVeOoBB3`thj{$oSYW(aLeUE}|4mh3zk*Dv>JQ((k|0#V#QY@@B zS96xX=<5u&g)({`EaX?ZQTQR&tkgyr=S(E9wLw;kIa_hOMGtlkd zUsJ)$0X+7i6LkY|=bqQp*F*T=D*g`Cu3|3%_ONN4r_#bFi8$|&tC%HA7v{N<-_h3t zY_lBXretrXWdG4sU~L~q{wwPHaBTE(>iZ57{e=$r3BLbwjEx-qK9BoUzaf^S52xVg z9N=$n^luE?5P4apIu_p9ChtHF%RAeN8Y09yH_-1i5EoWk39B_yU4MHKB4!+y6FqaKEBj(HL>V{26tIkSq!eW}>G^bWlrJTq*-$$R1bN31h6o1Gd8 z9(~a-*T7=Y;~nrs0&fQv?H%7L7JNFXrS4Dfi24ioN088e3raht?>pdr|M8Tfx`!20Xb_ z;)r$scj7s4VTTK2>*pH=FLdBN3LQ1xxuuv9?iPnzur~_1-*qx_rFy&r+Yp%?E{I=% z?J%z|w?w9Lkt_Z=&PeQE>dZBVFJOw9CoTf|{Pvs8UHuAMQ# zGZ0r_u9&P3F(2qF2tN6KA}^I&6E=r-jhY(vqUN6PH*1p&(25H+|J@?2#r84b!~@lF ziBWmvDy3ecrlAz}#A4WQ7deRoG8dup58l?^nTo$b8x^^`i@5(x#2)mFdIGptOhqhu zhkK;vo3z~rExv3^*sisaEBBPcSj`(55%CCl>b= z^VLlT3pw#u{*Yp>IH84>@58GQ{ci!l-=giK|Ehr=lb!Gpa-H|WcSUcwG!J)G^pr`e ztHf2mR}rWmW6F8=*qEYpa9<+byVIj-m=Y*?=vpJrX{a&o0f9ZP0qijF0$cEem^7<7q zZZijCPX2H8TZ8}0H*OsToM56BF=O&#jJ?4=vLFugUygZP)8?Vi!K^^j33NOyV$?o7k`KSZ@O)kLLBN%{h_v(!#;_6{e5aQ;wsz9JrhO04bOI;E%3LU zO)qhujD()CjT{)PVI&6^Idc%>V|;zw(;Qc5tdY0mo3p>#*k{MuVf2(@E?3|~x@{RJ zbegQ2S{x9){tGHLw4pyIlC=TU(^2s^&DLvoGMCAk=EN#29qwxCFI!!9Wn ziSt0S#rG~&H2}8DEbNoH*L10s`zvyg*00W&iewLu&ldO_bpxIqZ40iwLzdBBnXS~~ z1cwkcAFb%oDY6Cr*026#^LuNmT6kBWmKJOG!JUNOxo|6EI(1y~PaeUY4Cj-*zDs() zx2It1H*t~|xHx)S0(;Jn?=`Ok&MeNC{FB#Fd;0>h%|<74-UU6E;fzX#Kb&)Wr8e;) z@8l!brrJ_RSLAKISf^utabI~p8n!QG=|qg%zI$R^{{_u`w%|)aF5ZprI1Ihqh>MTT zL7u>loI>ju^ykE)uP(l5+^?{MeWWOB(F$8U#r+8@YI1lW<^CVvok zE6ZY^U99;$$CZ>tqiP5Z#Mj^V!x@zmjr%WhEhlgmc7o5J)BKpW!Ai9gKU*2o>i8RK z#v-w22pm(@z0u!8hO+!*pjG*@w$NInw$G6rbt2hkPmUyTg=v0_agpz?mpg+&DlK*(FZ!uN`Gf9qx5;PNY>k^`4ZjsjY1zHx2520 zg+?6fU7(e0W&IgBm5Sb(8U3bjOr^q>3oQ_8(=bO!jvL^2)+KlD`uvUgz8ak-K?l2u zIeOnZGkSb1#MOR_sZ@l+>)!(TzAaPBno55*P4GoCk2o!6i#WT1d6-w!Z;HE~bu})&&HO~6g__rUSYwi%eE7a3@*5nZ8p{_IfF>1er#=xCM zj}SK;uv3qo`X$s`6`CMETj;-`hpl7#xz_g%P63~-G5X+w8kT>*+i4wM(q%($gLcLO zCxah5L%tT=EYy?dJlPl1@y#vhDHm?#LkwP9hIchyJF%yjUiSJ-|J6KKYf3IZ7L_YtcxNiGc*c-9bDJXW7y7=^BdHPq>j4U?`Cy!EixZ0N#M}1&(ik?*uszR zuSLD|cAS$A_+gepUqyThfAHda?$!4P*d7zTJJ23NyfFsfa60cXf;+9BZ5`%uU*8{K zE1{3$H_PPfU$B-M`^jua@rB{&l}od+x41`-m%7ixHdsO5HTrh8MIQaqZa_%V^ka~Z;yX)h11>Ur8?7usn0Z|bTF^ok5z zrTGwTLuB@%B8Q5Yb~e`JeB3{K<9~B~byB2<^E4l#ZMsa1jQNa-eagT#!NEKWa!ZIM zKg1dB)qIGyIdb{DcSQdiHIQxo)$G(IfbN+1J#YnSJ|yNVW9T9CDbGHw(oWz{=Vy8Rwtt_%Goi@V4%<}G|28e}T2ipZGg?c4BlrAZBOMK z3T5w{2WI92`97F0A!fnvOTC)8bH3Hr18jp7^3-kKu|@C&bInG(f{`Qt`5n$*(0%b za4*Q-92-+>Ov=P@Yq9QBTk_tD{x`(@XD+-*n4WVMz4jKnwBdq##NmgDDlfKb%XkIr z7kBQ*F1vqp+<#BcB=Sxx6>f4B%6{?ToonlRRG7{G8?o<5-s6fi;s>`k<7phe8Sppq zQ5rl~s-Mte0u_HtteTD7X&_?ivEZv1?ja9@=))?!hkH(aeUHK!5F+YGvDf(4)sS~) z!N=_Q`3UfrHTpV(ZMw|5ZN?@&dUV5CeOJ_5pFPq6vG6ik0xqDx2dZ!E@RO+z^#;Zyk)Wa~vs_Z^c?tx3<1KXEMh`EoU z{)}IRrg7!K$`kjlbnQKa*B#vqYv)gg^xEiNk-Q_R_m|FggR4X__KZ2~ zQ&-BZC-L_Rj-m>~s}89}ov_d@FnTr2@&t8a90n_!bWK7BUYgYNvqx@IFsX zuduL{*e|Q;>j4;5h}>XwsD+q#TK-Lpy}?ONZ1SIonkVl@{TstJUFJQ77>e4%6sqvP zaQj&$z zL&{#E$;G_jxA$J-IfTE#R_$S8u7I3)?>{x$zFV*(qRY`3)B#?#Fi%uuo2{Ij)+Bs+ zn~f3Fs$Tg+p}GFda^d78#o1)4(5I?zJ#g)y_bv45>DbR!8hN=&?!tQCr~FX3Ti15Rcecyqu+zhOtp3Q3l*Cp1{PWhoh9}|1Cd5)nzP+w=T&7lsdiMlK`O18&d zGsnUDvdlGkX2uz6FPB&koG-XbhZ-x-&oU!!CpTkskIwT9#D2dBdS-n&tSQFUZP70T zZc3}YoVa`QY_697T?Be$jmTkJsD)N!o2`JiH2kYWKLVedU}U}d>xw1AH!Z0w_$arx zTd2j#?ALp#bco$6xJrT1h1YxVg@JsO4U5Hw-M_OiJXe{732+Vq&ys-$pq{rn_S>r1 ze}8du&t!jtB=v#+u!l*v%@(m7>!MCC$%VfJ2z@GY96>V|`)Nn*ovHZSn)l~`4`d(m zDfO`b#yBu%XtB=2eP{uE6S1pr+#uzR-%c~~Al3^pBf(MLKAJT;j558OV@rQOyu1ExL*wF zcpBqOf*S#U8~s;h;6bgScUT5@-=$dh%P~is$GB4o?91K@Ye%(B%MX%?V^gQM%Ibfx zzYai-Cmptv@ch}Z16QPP++e{eNzDbm0~M>aCFVOI}Qpi=O08{(OXDhfd(2IroAo%_r zj8}-Byv=yV?fAY8ozxlD=O9U$avQ%su>B3TXJLCAy5bPN@FpuVM*?Q&W^Fn|z zO+?;=we81{Zx6@2Anr98&v(c79*}>KOSV74{U76gjOUvMtnLEh#a#Rz?)Q8??LA1+ zI%w037WH{mR#(P*i^RQUBGzXZeh;`8I1!6%PYC`=k=p?0rG;)x(4+Cc-{+W-l7vdQ-Ti|cjwzsX|2!httGJ!+0 z|CqhqEB74KFl>F?)6kg8vJ$_h#?*uTJ8kUyL2U`bkOooAE&9d<*2(*Ruhqu^8H|f; z|6Ma%jNd!p@V*#1`{FeG9ea^2@Hb*!(2B9LrixlL)LZMj_T5NoOi?4xH!kouVr0bG z*;BiQiHiikJYd(?v!#? zx+S3(@SiN*mEHA1M#Tm8tmU%>4H?#w9p7;b^s1)BkV}P}^}qmQyxXj?S4P}L%%#qO zdd-aOMZG$-2^fRp?|_fO<6@6_fn0z&skY4bQGZa44X`Jn?vwkEm_NA0y-_a_uj{t^ zpnnmJzB=%1QHv4Wb>OW;tiBsMFYRNbv)d8N>9!^1rU*6K3kkk!LcJO?C&4(hdUDInTq`J=ZjqE+NqIF^UfXMoFpNO2lZ(P*dlizN8$F71KmKwRNOX^i> zjMy`Jy-e)^`M=A8e7k7{^pSp18XLkqxB+hx(%;c8$WX}7}XN!FtbsU%J1c7JC5j`IU%up(`7>)I(hWmD}k9fxk(u{C&3c zW9pYncI4^Pe{mOt?2aR^?BPS(pnWx4=soH0fq8qirm?mnt(+Dkof;X-`jH+zB;;g% za!M;*x^E(1Qc?!z0bx1d=u-`iQg63W;vOM zuaS{t+!Nei*thIm&PeR;dH+HaI4E%!(cT&S`1jaW5&!Gm!2k_MV+T`Z)7jDChIfut zHKL}**f*!ENwY=%jQjG>v^HNn!uG|w*`DkpVZ(l|}G<=M^r8Tzw5 zeSgeJQ2KqBEOgtDiys#`F>zp@$*H<6abwneu?L(r#MImXzrI~+9_#L9S(z|=^fcsj z#e7jiABLFzXSguA^4a-qI`wnbNqF$~I&Xi2#|L3~M$JzOKBc(hN(u;(UYa!s7$li-&geSg5Xz1SZM{+hN}(+!aSo#Em= zQSFE81+AkJ`u+ghnSuwUeDU7!WAsmeE04UZjoYvv$By$DJRjOSqaV*K`x`XGPhig2 zOQmrNdcC3X@iX=*^e2h_SoQt#JRYzw(W>grOv5}D%e?m?RzXhgAbv()o^M=98L;m# z^dUxrFJ%MH)D?~$mz);Vnc=?qFXk1X?+=)7uyQWDt%Y?td0*T{j(Vd#HQ|z(eC^n` z5ZBbx_XpT!D8!S=nfdDAXQDTWTv_ZLgD;xcERgD|kkBX?h>_tS!uuTTU z3zz`sKt9I+_-0FSZc0@S#{$DnlE9;rH?mZ`Yvn)59oL<0TV$Jr`_E~_nt!{zLtX3 zZWi}maIQ49v)7XI5PE2mNAn9YU-{Ox_jykO2lPhjdq-0$V`=JinMosX^J0jq7>icCLoV}avJ{c(Z&)K(4Z6DTM(yw^d7TLa3@ zMBsXtxADiZrk{`N>j9c>fez%ikrSQo;ytP9*vW}1rVMO$X_C9%R}=O15PCJs>tOAl zR>x_R(!v1^F$=HZmH>=$> zu-3Zh>jAdl@&ey4Y6)=nsD^(VqCk%ibrpXBf2)S|&{W$eRs0RLb{59_DyQ#K;D>oa z--mrVI2ZNxfN_HqYP?+h;Fzd;A{G|f|E{^tt|R2*KyCyvtnb;fmC!QtjaOR#Zl*3a zdpE%aXJX$C`!H5^IN)0k%;AOq7>E5O$VB{xb+n9WKuoo*1O}6x8a7Y4w``95}E{J`6 za(qhtn;Y@Fx^1qCzoD1$^)@MS|AF%jx#0u4XPxE3yp~HL_BZ;xXRy z@o^Kryq1V}7%lZZ=%VIpoA27_dlcs2b>w}q5^D!}wak2XUZoQ8^ifILtVqvNJ*X?t zVgeO^OI|Y_F*xdzcvqR8;~}RI&wnYiT#UC>ly+yJZHUaentrwsct&+yMZLQm`SlE} zGpyl3hxK&^+jQ{7U$Zh-aQF~%e3`{uJdcqR!&)l9Ivc9*QLxRSwi5V6$KdR4j=R7( z<(HO2z#rHfKM%oLdabWB*cQqMs)bty&3~7@8W?-N16ZkGuQ?xS$*Qo z_a2^xzVj=@Cx@bWwgrUl2WN#DV@KjS^ly=^bUC`mxVhFEGj$ip@kBkiPyYGQ%pB5> zN89Q94#s_{oEbC1aC*`)BQ?j5r!=t4_^rL*GR0YEW-YfiZn)YDj2sQ(rOVeVLn*S3 zioeZS>;WE|Y=5;lUAKjXJ@%+O0)NY@vt9JRP2SJ zgYLp&uk`f*+rbWM!i!q5lnXBQ(sh6R%F134si2BWx^z>HpS&xd9T9xtVr@i z^mi|@a8I8*XAi~>)z<@TLuAD1mNH$dqaG0$lKr@obrxlV>)`J6Grq$q{TstJUFJQd z&VR&EQ0EOUaqtM3$oogmx*k2o>E9T(IkJ1!R1^7z$@@cnky5$OfMe7q4;Q|%AJ&if z#+ zpO{!*jK8I?2iRsS4a4l=ZT|Or1U0m4Uw>+z^6tCgmG-}9AfGMp7vFl|+Nn8jdMJ4E z!}>)uh%hFAoA{A+8aO{8XzNvLf_Uo828SgG6 z(EXt4l9Z_A&HBCr?5ic-A@*3{Z$Ir-@wc$B$G9`}c8$N#E~)tM`}BPWeRZ?IKe-2S z$cL^$lj9P8?N&Q2xYYuD!!MP*{BPrz?X&Ca41IOw9Qy~>!8~dzxXZ_W^S_m)K14tAWb^ab)-*MYw^jLE#UHIAGV>|2rY#<<9_qdyzh4svor%UNh< z<*j!wtJ;-kKHh6_MT(oM$2$>RJB)piuTt+Az&6;|`uUkn=*wh2@qm72!8Tov4P0$z z-#j?6G4CvBv5hgIwiI|i;xP6cY44Y7Cos9dG}#bfRrxnJIH(7z+&o}b_ls&h`i-&-2`(>FcCQsaLK@49y-05z^16@MdMJ-A9s#D~q`FQ=W zSvwKFI2<^|YOGJ)_N8Kc_N|ea8|$se)de07Q4@HqZ8r<+oPllOJ;c|WyrTyC$r_-( z?xEN(*-tC_(Y-mqk-+EZbz|+Qwi%Oa0S^jBJogX!LyzG85RLs9b@AR&c>XNdF;>>c ztq+~H0Oal^U`HX~_pONk8;SMu32eVcF8`v>He+&2^t=6uo+$RIO~!vEQ18hYsWoi7 z0e^!|i*H;T@T;xJYyXY!kdM6lR~r5%!8RJU$c1aRz#3$7=y`PQc&r!uAqyvf6Lij(~>SySVF)#8~q&&$XC? z4KW<>CNKJkm|yhGVJ`3Uz`B~iHXZqp;lK}XVUK1m4EUS$#ap%;1pdaF6ymzXA-SKk z#~pYb=284D+f#yn5?pk^48OxX3xJ=71Ebi3dDMd~@i+BbP(R}}_&vyze>b%w{(Tr~ zl8fWLjKG|Dm*PBh+p@^-t+3sCbq90yL;O|4!F)E?h>9OB!PvTOJ%!j6Idq7NP2RE0 zu4*4|1-|wicZB+H*_xH6mP+KCj3ORD9t5so>MfE_QuH(V#?4aLkHel(>c6q4yTqW0 z$O|q-?7RZ`zm<4iZ4SWSzHac?TI0*pk!|MuU_(D_6na~*f1rjD+Q%wyoj%{w3U!j1 z+haU*=>C2i_bSv22wl3>?qb;gblWmc_L(97BQz=S?riTg2^Ji5%)wH_)n^O*jdeAj zpD|b&cT*pjdTYcFsLlA%H=QsaZCv1QpJvxaegDsv`9YCZ*2$sH&cc3ylShLi)jXp9 zY>S;0K0jq9hZecX$!&!Dq|mz|r!O_BeB%OtdvSiD8F3=|aN<_A zF7LCo`77ivfi3o0&x9D(=FXjiT6X5Y-!aEtNxXuXOPz!N>2Kf*$FWY>+YPOkN?&<| zZecz2ul(1@15G#l9o1Hnaz(v8c|asDxN8QDaI5%Snu}$hMC>@8$w%$X`M}jPXoqS=9_^jlY5Y&)!Je zcZlQ6mTyLf2u%9^kZ&-LVh-oTKFB8w#^1nw%UeU+A85M{oLgrjnX~&Pws|!2b9QJ0 zBbQJLKA(@VvoxQl?FpHFK>fF^{f~?M1auA&|58V!9&ER0eoWh93UOuP?s;GIqJ~T~ z))#v6UgNy_27df6?Dh8$tbCWV*LvpR6RcAyiuxYsR=q?o+)(TntU=&;pxb6B)gILr zdK%=DGi~>yx2dZKZx9u|4*rb6!RB zH9O7o0?e#sMc&>*?h@9ql4pYWz|+7Ans0L4ENA`g3r)Wtu$dV<)$W{ZA%_fga*9#`zo4PEyVdfn{n*;JN$Fawbbg=gY_n(BSsSR+a z0sd(}?gCekM{4$g?iZotmKHel{n?_PaP;^Kz|`_^cIUXH*D0QY?K6G08IB4s* zy@6+Re?uNYo%18^;Uip9Py^jJkpn4o06)ezM-ALGuAs5KH{ffj4V-|Rqqn9iWKD1hv z?ASlm^$XiR;HsPwiT-Xp5AZkK-v?f)rRlDn0sdcF_f6Q&mRXZVd|vQ{N_Hpp99U~d z4qxm6x^KdEo&4|F$(%(cL);Hf`3N^ryufTot2@hu!@Lyp++rN&n?fn`ia@@I#Eyi6$dk^sA(lL&Rbma>JIP;C* znL~Mxb^Ytez};0 zo)tUKLFROg)y5+itIi=T%!splgI$^u8{>Tu6W8mfp^5CLlE&4H>HA|q{KR4#aF5mJ z+aKdrM!o}_5V_@Jp+}Vv<9Q%3cf{uCnJ=h)J`R`+a&I`R zMs@Qb7o(r^uq_0RUWoO9_@dsr7{m~?p6gBhkDKVS~Q&_eylG9l-BB>NS~v($Cn zBQxuC*dwoU`03v`Ls71cH&X+n*rgG;7gvo2Z!&v$kk34%ab0S*IFHE%OK#WV0revp ztE2u?{LFkP>S=VJ#~k)4Yd6$3z54S9^ne5iE_m`$GLOjfoW1fz@8OL?u2$mg=s&O^ zPh>6e>TB^ca_5$R22lT4pRd`uZv9cg1zXr~yTIDFe!IocY4l+u`TzV5cGS;J%puEZ zjkX!e+%0GPp#M(b=VML%M}!)dg_bZ*{h}7N<#ay|<9ST(o!eJ+cDU;7rv1_=}n{OZ_L>sw-PzDa6NFtGSS51sQtqnhT4;^KUafgOBSsE1}V( z=lVB>tp|I8;vk-iKBFYd-B)QndVGd>1Q^-a(0FKfYI}7eaI&Sy)r>)X)Mj_Lp)&>k zCStj~UtN-+pN7AQXG4rw34EmAfI|?yaRH^`8imhH6#e`Kh`~}a+_~R=tL?vuq3oT6 zrajgIIJ^Bu;jZ^v9QD)Z&T+})-j>?S+WxEJZ&ho@BIaW6PhXdm`H81$_5s9Ef8f2Y zKtE)fwx`lIL~u(9O<`&-K?i{K5L~08MnxK-uLszsqyAxq72g!=rU%yHQz!Dyu>D=D zU+k~12iWF-N8k-OeEVUJ?_nOe{!MCK z?(F%OnK?nPC)$Sn!_>K4m}OJXnO4>&7TLa3(3cAi!KS80HJ6&%(=uY^U}J~!>rCAa z@6#|8F>V;K+pw@s@|6*N;#d6JG__O7FQKjEmZ=4p)^}Xm>{kstYU9FI!M=0AQLs+} zM`UvH{=(0(C-rr3zsj9FDdldJ{C2u6v0I_hjaVC;IEfC=#T22Za9i?}o)(bQq|>@I z-Imy`;3_TfkMRa}j4S!oy+r3k^p&74&;GatI8i3bCR>Ou$a$31%BTz|OCMLt&4f8b21hP~n47^z`b?arX$Z_J%S zOT#XCmx*Qt{{e(rteX( z&5_9=L>(5Cj^ds$lh`eAoU!3t}i^=1elMUJZH$z-q%S?1#hH#;Jaj%*+XCw&CR3653fSFL?%c^h*t&5&-?T z42J~%l&KwtCzl&O8~c!0XW^)A!X5?u4RspC->6ZUmY-yo&XjXk*_oEOHmH@p9>U=_ zm^;6N)itG>f5PCkf2N8U(OVhk-IlnP*IfE~2nQw!&CkEFm*C#B;;|>HRkI}2v*UR# z$kL#j?j}3S>+1owLmZVx+OZyvApU&r^4|F_uF|jNk;mU;7kb`{p6L4ya3|=$DZ8QJ z#k%@Wp)TT8`X)`&|*DYv;zopv-DZSpr8i1LYSj+!exYyR{ ztYqN5BzsXU>oMsAeLY|f*~+~3UD1#9cLd{|*L?#m+fP`+4JmHJlF472cHK+ytp~21 zjun@N-uU2tSgo|E2;9Yt{UVlx;w~flg`-*D#+51zMl6n|FVZ`tVq%j%oS8 z-%3_+lUw7$!=Lnh2i%Ws@D72$p$E~KSu=UY)k*EB-y&u9cRlLfHEBh)LVe$XuH0PcXiRc{Eg{64uxX8$L|}rh{*Y`jp4h zJnuamuAhal9pY$oeI#-|FSssaq%)`D$j`*QIQf_hN*~bAH{w~2zb2Lh&rAi3{S)?* zWA2{a2U|W#{1WfA7Bn%|>+ue3Lr@nq!$N)+(L3s`?wb7CVg7teA^I|p;cxw;?+>s| zm+7X(!g_Sq)#m8pAAZ+)G?Hb>r2?2L)`gv=XLu-6=OoDDq+&Bt42=Er*U z_(5MgoUhEfQQYZ?Cjl3p7M;}YfMH5bSBQ}dX z9?quT7St%|YX`R3%B)S(!!w3ljkp%LMXbe+mz#&b(^!e%9UFOREml_h-v&+h3p?BT zV%UYo!4d8q%M72K`Ze@I$mp;Y!_S4!Z@VA(8`rOjzeV<_7rF3(8~%d63vdSFoggN7 ziFvLB{uZz8zbgLLX6@JD0BV4m<5PHNQ3~rPiBSkH5${~>ovHX6bL+7SB=VnQtWl1a z{>Mb0J8&TUd|i8Iv<*_QCz|tY>#gkreiCscv1{sVaQ|J}w*vl_Z@vn6=*;A~q7E#2 znW9ktZyB-ss`bdYG}cbQmv!5h3b9J^;PVbez0LRA|0uL-m|vit4e}0n57d9FE3^J5 zzs^bEZ=cvRZ=~Qn!u`-Y8qbu8b%Q*bW_vY@XGfsD?&$Nd{|Wz9#eE|I&jYSQ@Be_Q zedV)7pB%8GlBnCehCRD1a5C24TVacuBrnFry{2f~a9~~MfFs?)^Rl+~AZlrXVA}-w zXYkfsL7$Fqz6yHS)`D~KEXJD$TLs*e_wakq5P!D9m`#1QTu1}6d9K79MiaZk ze4t-mPyzT`!?$ev$OEQzL@&&Dh))({+{Ec^tqB;Da+}iU5vC)ah)(Oi6Hy^dX8CO$Np1fN{ zwx<=G>!Lpm{Yk*kj@bIgOpj!5-Tr}5Q7?y)t6iT%87KAJaHq1;hUaj*?M))7VYl=6 zk2ch&z~3}m;BVA@iYjHd&b)iZ%Kl&ULI|EqVn zk_VOx?4jk9T*Qz1xQm^q|G8>DUp0%m8ltZT`4IfB!%A(cZ^ph`WDERlK=cYTv|GXH zvqWgbkt2b)0QzOEti4vpO@L1PZG4-%c!v+2&`R}y^91-C{C!|$kN3p?;(H8ShWr`l zkbv6TH+E5{NNnA6pY@eEqv93mvu*C&!)4;7kp4bfYSwTKh+4DsaqN$SZ84l(W;eN& z>+ODpI7%J2?r1l#uhy8yx6pqZ6(g1D2L8!(+}%tu;Gl?YeSsVls_nBTBfu$n1io1p z`LaI1x_TqVD!~8l=z^xM$KK=@{2kSn`99VVhuL}(v3HN~94!{97`pK-pp)F!R?2jc~ z`rjtaYKb|21)JW`hs?&lS`K?u3+!j8OZM6Jk*T+sGU+tVlC!X>E9ZUThdi1SzNTQW zG-&${ah%yQYeZOg*KF)S;D+xIYeYVQeYjn)r!~>`656gK&LHqN`rFm4Y&(6=|8!-% z^FtVWyyo+?Jt0#&4R!FS^*Sp0->8j9pGF=BwnsESrfo5We!%`W_OY?X51fwZb15hO zMpzi0(f4e@%AVhjTKklJfpscH<<@*Bx8AoW^w}ccN8PkK!6MfgiF#QZ>QjNm9T8eHe3w33I^7sp5>aPF-C?^G&|9EN8~66((S3X2#NcUT0VkubF|zfva-Ag}n~GIpADO zdegwfdp7fc8Q;z}Q;&vq)90(cG#|`;AF;BSFLEmv@ZFJLhpy7?^p?oQmq!2FU58X} zk4u{Jp@-Vkx-IKfME*H9+x>9P?)d0E`G`w_zme0Wzs+MGHOyz*&lZ4s59|+l|HTw6 z36Ae{vl;j&5fkKAbg}l;e(7_c?b5yu_^};#p>r;2$${9uZ678GZV)fldA%AU52??g zpKX|mzZF~-JpF|`*T#!HKKw)A-M#-Z<4@W)39l#&?sK@ZPZMwf|4YE^*ID9j?+=N<4HJ=8wyTZ)~4`hp2^IE7TIPf z)SIvP!wKudpnZs^v!aPlI}^%+vw^(L;3U$=g&%J#x6H);9paDV&7}Vo4hymJ{AZ24 z&lY~n-V|t1iCh(XYT<9@@58>bpuX4&oiN?s@N91c|3hNS81t#mwpf}ieQoU?K8rPm zg4>e1&qd>!osU~>Fn}jg#LDa)?|7w9XhsR17Vyay*=9Mbcd2E7j+_x%3MTMzm>Z1> zGu~O+!bFa{N%uD5g=y~$er$Z+DFV5D13C1r1zJtO?a-fNN59QKM&RlQ)`cy4�sP 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%0A4jdnDeZY9_@=kM#?^~Sgj$i+W{R_bnWaplsF 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�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

      QV-MbFA{eeG}#ihuVx6XHw@`(F-s-)SdS zAKd8{VxH3D?&)g>wuQ=np9PHQy%qe3#8yihd6F8>98n~5s&CTEa{3+>!9Fl@9tsZc2lG7- zJM2s#HdNpgsF(N6RDC_bcC?dsW>o`dxJ&x6n2&d3)GhHG?GJ zJa=kyOM_ecY}8#Q{~bBC`MZc`ZIyae|HiOQm$!$uF)u7L*UDa9o`=c*j1}5ANox# zHNEnlBiqswGbaAmMdkF&ay=N|!@vEH16{N^7}cCsDE9RAt{mABA6u_Yw*M_Zi*MW*z1pT&@{!t4Nr-U~XU|`$`#kD6 zq0|Yorhf2*_(H6g5z5uM7tMPg$J>C9g0G#`zcFl+Waw6bZ{n5>I+6IItq3 z^jhFMIJCH$b4ZuVWehhHL&@`>eZvvk<4oj?p=RSN=LKx@+0YAQM-1DxL(D1^SjX&`x)-!yrc8yL0fRTp@-=d_Wmf?k=N-8>P}-2>y&|p^+Mni*9UFW?tcf{42;_rwxdz! z$y94e64q{3f6U=R&=z-N)H8grMU7SZ2;*LMsdI|QpKBuq-xstc=P&#G)q8p`)Q2u% z+_m_(I7h*Wq4M{s&&EDnRf8`b&r=US--uo#YFEt0x!4=ehdZ+N9wf;nqppqbPHsSO zcu9%ixC8!^9K(1{DQPKuNFR5M%sePLh71NPett~(;K(HGk9ZeS8_elP?5Vo#VrZX| z^DP2%-HT$UaB>6*K;tBTYN^m?)XrwV}%--D^G+*FCUqL9Q!oKo1YGi z0&W{;e0kXVUa=jfkn5fNpX9B5xOs34xlefKVZ6OzR6D#MecUW!Ozq_7D0XuSV%7f9 z%x?v}F;Np@jM0S?TjRUvw&xV$FS(E6J|Fp$X+>1xvXl0EOZHNGB5L=$Z^GYn+u|#iZO~JPruuX2QJO7kNsNttPW;u%_?J3q z)IJ8!rH!?0^x_uTqL##(@wb0wS&8$TP;w&so~&nTMc8=WQ?FeeHz5q1R9FMRid1>w z2G@=6m;JL)OWLVOWe<6$?Mq8Yo0W=M66e6W(=x1q*-pXP(Y3p8OWGLRe{eQlZs(N_ zU5np)=mz2v)pnQX7`{tK>>UkUl5>VPwE5L|4ZG}dZ2c)NJmxuKTGbXDQ>f!CMr@s+ z>J7&l!EtvFeG*UH()Vq(z9iN5>iQ()w#$RJp7Hg47xZFrp0z}Ldq(7@LPK`P>Ekjd z#=c^K_maXDX>kk0H_MR=c#2vQc<2PjojNXktl#Y_SWg?V{`zD6`N5Zo+#C4on45zp z1%8ii`^-sg7iyP_oV?`0enzc^s>oxZC&T-@wm+z~B-TBNRVJ68!4LyqU8(Ww__3$W z(DnzlmV~_o8hte})*QU+@12aPkq5+|d%@?2Xg;sjlGua88V~ja%+ukF&zm9cS86W< zYWBhT?vTj?&3ZFAS9qo&*M^v}I%-AV;XSUw*!r{Oi@aR!z->|FE8Z~5@1UVit!nh(w0Dj9D>Z>5Hfcxez zg1@53HdSH$2DKIYpx1vCdP&G%+sWV0{Fz!q*5-?x7&RtAn-BZM00-ML5_{V#wuQ>#TCZD|Ssqhom3&@y#F6N) z*k_xxVW!55}ey!?9KVg!qSgYOrl)1#Y?>wX4Uau3P3O4p|D6bVpoCpe|R zwU-m}D4uDS&Z+3M^5hFnFqll(dC z>67M{i48QY<)hY~8b>yT=Hf%$-(dU9$@-+otw{&L@si~McRu3V!C2?$pLXom{SCHl zW#&?Z9t~r>mK9=|!)i0*edILI<3-$v_I{bKHpbq!H`<+opBZo;KI|f=Tj9iQ@XrcZ z=ZHCiwhLwUz3~jWHLf;(Hc>&%O7u6VF<*r4ZR;HYQ^+1d z^dRd#1lxQW>qPL5Q`dpLzSMSQKV8GL`#6`+;ThHSK;LBS$@=Tpe_ui_@w$WhrRa|W z?$m&Jm3+k(`D$oQkaLnXI$~kS9mL!{`CI1Woco=nL!;|_0a6xqxE*TL^29~Jbmkdu2wVSc*6f}FG#|Ejel@*I>mn!!PmWX{dES{A%_!+2`s zcP4Ou3ym{vzNq62!?!vl2OiGy<<01xIJEU?=#zoxc;9vJb4~MFw>qnaXlQ*vA zGUz3>Ocq=|=yfI6D>2KuE$~3_dEi2u{^Z^;x)l>*VQ5Y=_5B%0yH_0ClKEl zIOs|^PrhOJso1pZbb6$#jfHQWI{~O@@D&buYL){k|Q9;{&A`h-|h`fuq`fnF&m(bwDIckTm z{-FCY=DQH}p?UU!_BC3rYNcYSxs~`m>?iQmz&zcLVY`F)NjtSVSVuT__LK}9x{W;& zj%w_uGMUjq31)$pI|x*x;#xy*bS`+YzB^$zZs zKROUwTFLqN)!LIdqi^fJ30s_-zyvYh$=)gU3^FIh`z+oM&inhiZ^AZJ>A7c@g|$`I z$eAZ3b{@K!)TXBP6rMwSzwk})X_(1_$+|anu>WeY)J&Xr&es-dd+NT4adT03N;IFn zcFHn;N(;oN@7RsWHO-1YQ{WeumOZNbCTt58;B!%{eNFV*@_prRSqff^Z_Uu9V&AUr zn+E#k{s{fp+VL-t#8n-&-kdXAfz$Km-HoG)rg4b}}XQrkYU>lxIMXPL_` zN-}op^4xfSQ=tjtpq9jE^M{cK(O}r@lu}1~a_aYvvnKXO44dxickuyW-qZZeA9i(p8P-@4KUH){p_%T0-wKYqE6Dehb4wj&dmRfe#_Qu=T|d@| zI0*aq7ueIWemnMLe=NRhWpGVbj}6o)shyjwx8ym&X&Ob0hNx!-G8AHy5HI2xIv`(2 zT&DVL%-OI%2RV4b_dxE99}4C$zQo!Ek4(;9%`Z4^5^Q4;kCnik>|MmFM;+OY;!%YY z<1ml0Si3luN2Dye;fIVJ(vwBJ$Vq%&J-cG_Zj-ZLQNbT_Mi@__Y!?)-8y;!`;T} zotP#;+C&34dyqp*py+-x0S5I~Zs`T((4&)|oI@%b$CHYQr9)N>5 z9-8O+dO)wyJmhpoI=EJP)Tx$W7~VK(e2wW2q1B8t!*zWg)}1;oxDK7af7B4qdfg>r zCgl6j$AZ6C!g^Q)4BWr^dZ13Gb87Nw?6*777rH=b-t?A_V2_Q&dH}91c8a#AsSH~O)z<@T)8%=i>)MF-p*|S33{cavZU6cT z^xUdrJw#~xBFMlj1ze($@oQLzD_(E!p#I8|r^T zyjt|rfA?9)1<$nyJgT<$aolueQmKzk|G0NqPVSsyYqY3BBspx^?>VJmS6jyGTY~F> z``K6fBaK&A{}ryQdHzvE+lo#6}!m1kYNi9GRgd>^bUV8DSN0*?1K) zJ8NaukH@ZT41Q?7&yV$W2HSj@u^n;wyt_U~-t8E&bFYQH5E|}L-*;dOEGV?p*h>el z0q{*-jIQ|IZECFGJpYM3ZTi~b9F#xX-+|ud4$IEOM3HYr9BInEFwWvBIl#8z_43-e z$zHBP<-y7f6xyA)ivVTSE=@?{iu+yVsg9Y`W_YWv}H-B_!;x5qjm~TWpJI~zAzs8NyB0b zE@kQK0k&hP&x~GYaH9q0iJCWcURCVDGTgI<=<5OXmOLl@u&U`W_9cvses$ETt&EkR zDT8keOt3azuANCU8e4alxN8^vFw$U!I;c4F>{!QGKkP?PpN(q=+Q$~^Ju+8M?dmf3 z-Zq01(?Vsa(`CjmxXW9q0Ym-VkGm{05zEc9MsTwS$IX`;KB^@2SCMbC@f=$G zR+@3>-)$`MJxfyu1AC7?2k?VmJs*MfU?LaE`Tj@jzAr{cu-=HeC$%p0y#((eU1_uY zLinZ3E)lF_5R-S@vNimh`3obeo!)BtuERWF)%0--l@7b=h0R*v4*$CSGDBGZWaHGA zRl;hNOb>5na73WCjT(or#s6|2?4tx0%f62?S0uM7d!WaLQ9BVgUyfxDUC3JXRw_Ke0LbmiUY0!f4}(KRU0Ow zZx3h9d$MD^Gw$NLbNX2b+mgr=B;f97kx^Ilp1n}rf28B<(B`X(Uff5qNn_UN=NoLt z2(DF?_vfN3P_mbgToQu&fI0KDueH0sTB9QG8)IF8t3~f^*C9shm9OjK8>WH-@T|U< zU|j6AgZf!#wW^9ogZitfFyoxbpO|FT$Z|-Ve*io~L0Jh3FYtTFkd9aGc zO;=v4)WDGQ{osh7284pYqlKlg*6#2=t|JC&jyk>%#=jW1P#MuG5ccv;@9?zdGYyxN z62{)WqQlU*&7gnAFuVNb~}j&nXuduOyw z2S#?IIA6h`h?wD=lN#vYw}2mS5_g`War2Cch$~ZJ@o;}4@up2*78*xzCMQ# zg}%dk7%@le`(U3GG+gc6f5{&FLY{$XcNN|9}$!a6>4 z5CaB}vuxRxWQ88Hnf%7oi=n;+azJ-GTac{$bqV(L-A zf<3&7b*9>;W*kAC>;m3Z1K2J_{VNxH5^6;`=$oiA-7OWgK@6^so99f)CP!Ce*c9Tw zOuWxg7#CRVQ2{r4GK02Qv*6K6!?+=^bK%bW2KGhfw%1@k^?@gQXVCW6I0-sT(HQqn zjFp6X*E$zCJMeGu@A{Po*I#DPmiTPu%mwc^YV*WFGtbR?DDzmN*Ik=0xq8Si#kf{* zuHxLFUb@hGmO8tnJn#YqZN01=fqS6=-rY8w^Br8Q(XYsaPK9()b8x(yE ztx_9e9<$}Wt3JWrKNQdV67LSUzu>qRW!7PQ6s=)UkkDZU&R|TileF}INGiq#$@NXaB8PxS4 zq4q_*%7?!;k7l3bhEZt_Vq?h1&t5m7lMu8WrVw9>`wwz(L!uA)hQ|!-b6sddEvnrV z{uYU`^>MS5OVyX!k95q8Try~8)RnPsMNtOE%aup(%Uu0X{MH~?Gm)z^f{aJGK81!Gsk=zS;*9h98_60s4!K=sKDQfMd z4>@n^eSePN@lrMD^f`=kOGis1n*g4X z8F+tN$Ri8>yS2U^O*$oTT}t`8yrVjgN)S5BVh#ymh_A3l0*Fs-ZmERb*YC6ww%}%X z)&d+qXXD2;IEFZi^X0gwu*QMq3p8>8%j!+Kc_3bJj1=_o>_3p9``lHC><$mlH_ocvhE@)DD`Yqm% z_)N9sc_G?IQu8>R$GYt^Cwm-4TtM7lU?%FmgRmBx!Y?yj((_V?`*d58!xQ;0+;#B&+6&(l z?*@2XQBK*3;$R?T}^PLqc)CC3} z#m0IUF{R99@(%Y=P<>ffPKY@n**8`~^AXd6}TDEuK2{f+N?*cVm)%9KuO|A7O&g<0N$U7y3R#dixQ z_od*S>G+fAxdK<2ANxOI=dvm{3^47wZNs!qIHwljJ7&40e-=VJ{c${aIq>%~s5K*Y z5Op$jT>3HkC!(dmM&umd@_HJO*tTVE8+oJd_}M7b z>*~icuSjf`s)apC_f6RLlOHcH7Ww$%2>3u8@n=%2tQB5IhiAWGtzD^F?NoYU(dq7*WX#b zyf!dGXrMBu%9=GXfJ+9I5$AcURK`iV?Q?mI{EPLcjUR(!?-BB(&m8m9-n0Rq4-MUT zq1jPnTUTLzeEqKv?5saRd)6`c;Zy4w^EEp)s=(Q!`zD?(Rmq<)Rd60qD}*>W=Ci2{ zO|3TKV*=M0>vhDA*od{m*$A$(JS%eiy1$`TXL4O@y~ntANmDcV#;UIz zXT4o!m5KcFhX-%5yy|cCm__I}~V zTPC_9?)2_qw61WN3PUOgJ~48SZ~kVFsIzId$e+Cjf7>CmPZ@lCi4~4!q30^rDNQ=> z9kc1z#LRIiopoF0;#XvLmZcGwymuZ=_p`^U+|~OIX50RHK+gM3*_`u5@v*C;;w?T3Ys;qT&JKm# ze_6xZ>U)WSevC5s~Y-3onwfNfiu^(fK5K`dxi_gM5{*fWkdgFnnce-`R@>UV=}Kb&vz@cGS% z=fQb}dL7S-*GrniGD6xO9#8x|Z3fz7(l!*+*E zeL>>Ykn_UtEs&enA7r~fdO!SlI{yB>?(?wCmlrPh)W&@Zdmi%gFP-T7u>EwZHu8Ok zu=hx>*glurooi=fjA@=#4DtPcjxC!rti+=*f0uS2+$h0ktE-&bvC#?*Zq)iiPz(Pv zrbN>^R@O9_H)4!cWSgp-Z+49Rk2ciYpwnZFCXSN0D{_3OI5Dx-QO{Zq9?qBMfA4Lx z@?K2sIryEKwLRWdnU^jaH&+2h*4z=g;i!cRO}E0_=H|RFKCy8B0iS^G$9NBg%JU&t zOc6V3TganBjQgUxTTG?0o{F)7lhOTH)YP)QRZQ{!D``G6=r=R41(y07|1thB`nu`y zje3@wjokXViE+odI(7NTNWJ&tlYTOd?)b6!^yhB^>t4z9?48PH+{tx6#<-umW-T}w z(F^o*R|^gp%iNDLfx9Q-?=zvsi0x;L=Sr+Fsn6yI=fD|!t2It3d$`Au2`GO3ex0ZZ z=y(_WT+ixgyuV;~F7ux1e3_48&kOMv zxa(owdmO|gt^Q*Oe$QMy3;Z=`n=ZE>eF&PIJNi`XhGPWR zbftDF+WDr|--uU6uaD@(I^W{4{p9G+tURM1#s5b?(#|*97An-#{;A66qUP4Syn%Q` z_9I&nOWJzpH`CTS^_{-J+5zSXy#nv}`@xx<0p9cX98$K;v!zb&-#}u@KLO9_ta8;#8LQrD75xA#5%f^)nYk+IJh{R z%qf8H1--QR8MH_FcQvmK-p6k9wU|q-zmbC|<2X1o91FqawZ=m%EB7CPpC7eY+f&v0 zoAbajdyB9)@v{uiJ%o7#ahA5MzXrcGfa$*H&bUcqnd;!gu92;>y#2gjbrYpw+drbcxIc*_6?u~1W zBgtRPzA^BILl63Ra6NGCRBqi9x_0HwpV+5ZfDy39%rcqK$7-H(;bZU&uh;f7KWb`+ zuy&4!`dg_!+mp{6FoPGch0H$BO^27Ke6ev5^5Eh<;OwrC_yHKNrx$#)n?!diKY4j) z@c%fW*X*0!r&Q9GUS_O2)ix!29`>Ev4(Y`v&-tcvS#Lux7y8C_*YOZ*=i0kR-=hqz zQeP98Qz_o`b}v2G0HMd;d6lchqrPrG7vyNxYXvinO7GM;g*4Zp6tK zI3utJjjG}4_rITO_=LFsi>uNCenVZCzdWc6O9$auCyt?z`vpdpB*9Wa{@expokH7iu1nwfY|P~&FOI+4^*su<>0+&* zhK%#LC*I!yneX3R#{mqd1u@nkeVxHJUuK^&dl`^3!!zbN%J(~C`Lp16@aZl_?0iw* zcVHVrT&4whN!!v!m7=oh{1Ht(Qer@FE_w~QEOG{^?+kNL&h9C0p4a`Pa}0G6F^33I)1cOO$H%e1RU4f6{AzVjk0?@oe0iu?lFvvKW^&k?yj^pKIyaGrwxEQ@o(SI{)<2mj)^ zrM?HQ9o#3dr&hCUu6?l`FDH@B|}Y|_sbj2oh?==m2kr7oJ-+d`iJ z??Xg>u@|O+XJ%Mcop^oRbmey8%kVRAOpdVprIjJmUaGq_=fqe<`GN%cdwPy z_Z=hGj?ins&qlpJCH_Kxd$M}gWXOT#!{Sb)N%}f7a_uk{9XvQimJ;fC6S{@_S)Wy7 zjSx@mkh2NecZ2O1;&gEbErxaZ+{HRDeGPpcVqFI2l+xoJBi9aVWF@;*;@Kj2Y>+=f zPm>LPhW+7uNj=_yZKxcwahj;Pix@hvPobtUITl=V+R}&hGYhs!^4H1hEbZrq0vEd- zV>gqjhupl*2CItM*6;IbkJ#{)Tg>FMC7iYx6Wgp;B z6S$9|YZYcE=Dl0S3?nsBSz{!Jul^pmc4p7(VB9$8o{6=gV*mbPe_nN3#4p?bGZHI6 zji(~pbY)2sx8eLhvm#2ab(v60wiL9v9R9sq<&V|^`>dz)}|W` zp_z@0myCnMloxfw_uWh|yzxbC*lbdW zzcCk2jWy<8s8dE<{O8$og>I?A@S5hEw9S*5Q_ETMz)pQ|aFRQC)>4Pz>iSWrzxCDj zU)qK!sO0GC*@^3REGI-P3>xLVqMjO=d{`#bIj-m7xx(QxPqq>Z2oA9CoSZ=wHU7h)sT7MK%o;U9%<8T6>Vjb~2Bf5@LpRanbHova+zq(1Hi z{Qq0va}`jl`x172pq~X?N#FtQzx}m7HGSOs$i{DwAUO?<&0pJ;=2sig& zeO&LYlK9;QoPpnAe5~uhhv@tI1#^mq?Ms(h*Hgy@w<>C1rC_@gw&*7dOhfP4R@kB* z7}x{b#NfCXOJ;1L_HcmzO!}Yeov2=j)A)?IUyPDou}zTM?d^j+b`A88qb}yC=_0QC z+}UavH(!xLQMc6I18M;B(8GTM2fh+NuZN#6Q&gM~xzNCsDfkri`7Q^)USh~0hseFybs;>GWlVE8SD#u z;Q_qos^Dy#f?8c2{26B)d#QuAPi6FyAx~cl{bTW%^I~vyw}X$6>!A_m!I)Mbx0;eQ zt0QV?3lX!NML$^?tfi|_9d5YrZdT&GvjMORRME#95G;%25zZh}{vL~m*ji#6f?tl8YfprS<19s*J$Th>>GwS+MBZYay5qGH> zuFv6|0{%7hsa0hjFp|38;0_f$XyjtzeX+>4xQm>uX`?v z9$jL8xuj;1E$VN?>%29x6no$Vk301Uhy@_;jJi*1<04PM{a|?MY%8&x%tpOe-2LZbeXT$o^|jzVD3e|vXB6(ab2mUwxO;-DUme`%Ic@^D``6=Lvu@tO z9q85Amp8EvY*Bwh9^m}5FXB(v+=4htwdI{wa8l$nh6cw#ZXVrK#*H>v^<3POts~H#ClYAgC&^v4%Fm_dRR{&zD*ii+{6BzBHL`I%KtwH zegNEZm91`KYFR6mMxA#v1}(CE2JFEC_)KdDFmKqK4#8&vh|7R;2ai28Q4#m)b7(7* z8vs6!8vPxPCu3iSj{qAgO+mhIo3=l&=F?C1y!)Z3zr7PR4&P-j_)JWw!B4`RW@GFH zn$OdAq5SFi$KdCffgIi~_(3b@xKmrf=dc_57B~)wpAODphs-_^?h(XTU0t6ecte|9 zvmzf-2KyHGWPQFuuRF5x%1_aMSq8cbvIF|JsAC<(S@@RNFN$oR%j^dr9|7;Z)TUpKf-&3``d?t7ZGQo z;6bBi1I|&+k6EKyu3T`|ve~!Qv48qUxk%ar_lRCkDe~=yrJ~peS2S*}!hTHZ=<-}; zU7!B;_UfT_`>4c7_^0N_e81o?0T02$*UO?e?Wm31SJVSx-Mi$OP4*XqKG1xVb1=Ec ziNd^K=ic|MyaO>lgGQF%C%yYqub{s%-#7nULkl%znFmbU_a(RsFIlJ?M1B|66N2-F zA2T1wUi*;Bi!I>%w+`7EZh`&>IE*`3zgm@vd$)LJ;kZMnXUfH^-hO}0_v1bU9z*EC zgboy%Sk$D`Z4HKxVVmca;#^+fqruJ71Noe6W8O9PjBp$`qeR_CxHvnFzDeI3%nJ3>EeX5<_{*N>D_$wkgX$A}TS zZ-ygAR`2M*!LWan^*6P5zbY^*9b=`#>Q;4L zb=z#3Zv=j}O>Dqp^HG~h?eE6fJ+q4Lo2U;xbGEEJ2lp}F?XZ7C+@GuaCdTb2Q}>j8o}yk5_{~Ke z$dNVQ!-w$hqzSrj!ge8Wx_!wFj`&-_&(?h1bB&_+R8-L1rKNl_M+mtZ(>~3-#(LU ztdY^@udc6v9RD<%zh*k_pM&AcE%Ceb_ghy%Z$ceEVe65lxD(#Ro_GAa ze|wNbE+q8Lcz;}7F|p)Zol|sMNy>rG=QyE<<;imNNf@~H0qW?f4)%|-r!BHXar_=J zUxd`vowvrFbx;F0D>W^ylC@Z(YtHZ(Y1EhQoF%8?=6$h7Kj$&uB%B|mu|BH0srkkF z+wJqvkRXSCmnOcJ%f8U}64=f}KTazAxTes*%8D)*Pp&;Futed!SU=F`!2O6hecVOh zhf`xwXYgUq#yU?6_TCoRK4Tv%@^W{uFF|i(US%)Wi^#*W)=;mpes*IHZRK}oS3+#K z2Xj7*T=Lto_ve&E4Cut)H{h%vtHt)@G3-a*#Qps+{AU^B_1bRSb)g&A8RyRw#3yz1 z{Qe4H= z`HUBA1xKh`{RI0-CAoT)>eQbT^*G!c_5A_kK9~E{iLo)ZW*_~E%!*F%dRfUg`r)so z5tG-`eIB-TmASv|w;FEM5?WczkFhq+924Sdy!TMu=V6CR8l&$Pe^=xN zd7i7-P<8F_Jf_|dm6&U}mn1T4ZWXLbHV*7wzwz-#5kYZw=h(|E%x)JlXb*{c{t4*XsW*7F>2gTb#%At*M=AfNQZ7?!0#_ zUG9}Lp#~@F@YJ;l+QN^iZD5ayG7ahZ(zJE_E;Djd#-D)iz4B`l^YE1|bw3vMx0#Et zMfB>BVx*Q=hr?Y=Po`grIN2b=NIpjBuOlDDXJhZ#d90D;PU-q!kMv&4xZfZ42A5){ z3w4Wl<(-B}|5WvK(QUcEreq_I1O_f({K7Z$om$|3ScpE)WFPdC{Lkv#)_jwCUyG5C z8i;RmT9IBf_k!yb^|$WeBvrnQyE&R)&^BG3^~VYF+d(5W8+Ymo4&-1W*;C3IrOJzn~r%Hfw^POK(`H1$VcWqu^3#7M+NTzxjm>QB_Xju{p%vz zbcMV|k6YFh+y|_=@%*av?77fA|9NTy?R?{W3zdRg$rAZXp6FKs-+?XkVUC5lw&7(z zv{7SO8yB1d$MHKliuzl_@okf<{kONP=sSC|NYvkAzRX6vCguyC=|-4)z$u*^>7xeM zVpl8lzdeQ4QekYrt2N_^+0bplIp%1XHr^qH#(Riqq~2mm_9h4JL+-$;;=Z$`*?+8# zi~Rt+7hy3{)@$y-d#S!HH>&xYm8QNabRBRy4#e5}piJ>Z;A65p7Z4bg|`XyBqIHRlD)2hPbXZJ!jqXY%NSPR2J#Q7AYU zw?V`7W83H16@dkGVvP>d_DR~JhJwC)=5fg}3!M!I_qLLw|Fjbag`9=H9$*`y5Qh`} z)f1tq!aevk_Y<*iwx6GcUWo+ktLpp3`c=N(oM)o`2=j@Pz%Tv&xW#5-{&+w6{&Ycb zJ#g)$PWr$&Yknj1ponFb8Mzm&&xdpsSOLT*mJ4UT(DpOdTXJxxJ0R+B?E_nrb9#2@ zM$Bi|%5f3~pK@z>^ikUuDdz5aef6!0Nf$f1IsaqyVE7Sr8QU2rQRKM&1;#`-$r z9F*3LstMc*@0y6GBY74A^CCEm!O^dsn`-@ySdpdKrOn{_wwzv&Xhm(t==$I$c=v{j zb6T4NxCuAocOW-_tDjk@)m29>-~i6I;-1xY zCnZjh3cH9p*zQ5G3ElQ4sQka;*-)#Sh1zXRJnJ@>qfadAz_r1>0Bt=-eHYKWwnv8O z>jAa8lF0vBaDM|o2l^RP*VXbfpQm#2?~KiQ?^k_2z;=w2wTE(7f5N=axdM%b`q&#L z`p5#e6lh}T=MZX1c~0ix*jo)h6r8WbzIW}o4g1u3oQZYy^#EJya=l@7cW8n*1Kj}(&`Rteb|e*R@HaLwL|S*U-h>w$W!2M)h-(MBO~i&@8$VX zS3awsEf_aMdC|AJv99!=iQF2wldD7?j@la$bG@#am_ycki^fe?Vt=V?sCac%1hq;X zC9*6#>;4l?{&v=M!3nL!J8J#ygHzqZ3`ZA*H(2+Rp;q=9wu#iD;s z8yB31Tswo6z}J3XkM*0A_dWTtNA6#F4)(An_!cBBo1LrgJE+xh?Ua(G9$_B#Y&W`N z?20o4@A(&3{>xo{@B!=l4r+C?90K#2^Ro;1ka+MtCZmT1zP3?znC8VHmeThf)apt) znaf7rUZ$pY>h>;vynpoG$2p{yR`l%_^Xv2F+Bvpm18^TT98y+@8<<`n@p8;bOHvCL zdw_LYuAN$s>f_vLjH_GMBNSnV|u-_6Li!~SIA_QH+ zRTH@WEn{LA!w0JCdkJjw<=>p?rt*De;qKi7+VGLltiiKi8kip&>z75(7NSh~FU9!U zgYwXzonXb@8_Bf+jcF5kqS@zNWSg$MT^424-Wwx;IW@_XKC--M@G{&nwOqt!&kK#8 zFNxFF4(0&dYuPhlzyG>A{I@^O7%n8Zjq#zg!}iPe@R82(254HthVP6uDlhUHAKJ

      |& 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 QDC-j{}e(T{acc6DgU&qaPL0jaW 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�sP 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%0A4jdnDeZY9_@=kM#?^~Sgj$i+W{R_bnWaplsF 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�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

        QV-MbFA{eeG}#ihuVx6XHw@`(F-s-)SdS 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

        |& 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 QDC-j{}e(T{acc6DgU&qaPL0jaW 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�sP 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%0A4jdnDeZY9_@=kM#?^~Sgj$i+W{R_bnWaplsF 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�o7yApRzh|^pOut%^~X_d)KzYrVoe@O+5OX@AoSYtF@-sTRD8{ zmYI)hTRkj(7nrq=JS94{`GHaUKH=P&1y?nfn!Fm7w&eTNCrbK|GtT+IXbL^`Q&WSd zpL*_wL>;R;?(lHklFvLkzm@Og4n?oXXAFKQY(>35l5c#Pwgs z{S5BnWMb(IQwu}>h;_?dBwmj@)hTeYc+z(J`~&PeG49H%$=U6R#)n;;XLJ;VzjYzz zJwhKD=Ub33sS$!7!d;hKU+>~*{NM|@++Fyteef^%g{EH5ykBfvkc(dq{zl$j^>2@! zj)4(ji+`#9t^K>nXVW@<{eMNQ`6ld3$Bk~CFp1REoA5< zz}lD4(xbQc34x8u&wUm5L9NQi22_J_QUnm!!npzXvdG31SJsb@=JSU5v z1$dqoswH489b)es&pf~!ljGL62i2@a4ngO@G=A3K)YCsObr^a4YWy3{LejRQeL6hP zxAy+8IV*o*f0!29`P8H0-I)6cS`FB{^Bqin@(-`hVsTm>KF}uqPW!CuZW*Eb0ng#u zmf06y-^;t~gCpP&b9jC$DF3!w3=W8|-5A`!vY|8zI zK9^r5&dmbeL-jCvk{-gY;#hJnuR4*=Wj_OpEk0r;Y zn%3lcQ{Bwr+>V)p4)5_~^{D4V*VZSTLF-d}uLm7yS!v5U{$SUr48=e@&p+(}qxY8G zo#N?s{}EFMJ2AaJcV{z))b%IFsxJYU+FK^h0~;?8U(XuUKPt`0Lst(czwX!;Pn^JA z>1o#dlt}!m`gyG50;9_@sY`TYlj;SHr)MN>*Pon$?ahpfX6%G_bC;Ii}AK&U^*qZo93|uh3 z(zb=_8Cb`xE#Zr?qcL%*sNV@&buNopzy0Fg2~xF=mH(jLf^+Zl9E&;;Q)3ZdXj_kj z6ZJUm9PU(1Mx4-*^|K|+o)(>5`+3&&cdYBQh_!Z^d(JcNB%3FUiy8`+IrDOV~91>pWki7Uecn9ZGBt!R3~54gnR!d+Arwu z{xEq z>x|^u1RDzv@tmD;;LOqt^{l7QUFHRKYi6hqB(<=f=N8o=r=U3qZz)&L8|paFL%62{ zdh3~BY8T`LGY8~J>uuh3^T|)TwtKh(Edt+uJ4g8Mo`F5?e((~_?tU!S@!7ir^rV=Ob;8*vJ-!UzY#-A&$@pz^lD#EtWAyU;%~)#ckpn- zm)n4!pPPfOMKqXRKe0At+bQ(+`6KA9^)GYg{uu9+V{m4jRa^Eun(@hJD-KCN>&Df} zT~=dVq=yYJUfP7Jk=?jAv4%A6l#uS8>R%YBa|WMkZadmPCpeEkgHJO%u`Xo0HFWce z`u+jy`xQmlr3!gOjo@!MU?ftaTbMPbZ68zPxH1m*@x1oxq;2uUI_M#u?4kX!%e-j7Gv-2Y=ghX^!>P zc5yJ!C_kI;&=h{ddxo3ojw|0$tj%6Wj=X>#;|U__IP_-5USSJ5|2 zJezz++5qZdW%!dz$L4^i@r`@24nz1|JJ%n$KWq&(d3XvMf;Y1-!sE0)vvWH?9$1}Q z04J~kd+Zw5AFyq%zSUmwgo`H@v8OgSd?|6gC$9U3-|x%sC*~{cmiyatBXC{>PY|&^3zO&HiPmUZj zwfBs}w_a6g`!6`}OoP8k2d+h<{=HQz5^r;PF8#X__?t5>*EM)}fAp{x)rppLyf}Yv z!$8mN^HYN8NJr!Jj!V6>6@SOEm2StU4_?9^b#0C`sHv~d?~%s8gXc!}y!vI{-=4b? zcMS)Bliq`6{cf;ZFyLHg-!BVW{$sIW$1ZdImwmkx_v$CencvL!xyIC0ZXQ>}d%A#g zd~YP4_Ff|P*SN)@ySrQ1j=^_=#2Aw!;zE<7WG`F^SND#@oj|rzzYbfp%RWvlx+2QoIPtq$f9Rmr$Z|X^!|vmSnn@K6$88T)xLvn2syiB=3X1Wq*I>w zb%r;RvYgt>YOX&R{7w9!E0!zQHQlyOy$}_z7EF%);sf$sYu#^b@Hb(s7QJqaUJ2)= z`nvD@D~sQK+1a-oU&nSz=)1EPdn3~x1m`#vlok>_Aidgqj7|)=QRRHMhTzb9nx-{F zQ?vzp-tE*d-6B0o?k?r{M|*eQVch2S;u&Kyh0lE6FiM`$4q}@rof2L&?K$USC&q0)I39 zfbFZ;ewb}F`#!>brDuad%lj>f_Tlb3Ge_FoE$44`_Z@71VLz+Qxw9~5>FAn;&t9~U z+DUQ@;BO1RZ=As2oN-%@Np;RQ_`W6mKge79>yci%(}-J_(sp~^2geV(ewH?I-DGsM z77;rKL+~79?FSz%5dH*Ko^9PZD7NXlEv}z|QSHf=#*=*B8g~)=#oRmxgJ&M(`?SZo z&!&AxdP#;u5dRIG+@;YPi-SgEk~~9LSazjtaR@C2pQ+)sUNihZ<$1tv`3BoUst>HR zof0y+A8JcX9s%EZu+IsP_8#eJbH=&n8}r>7dg;+cp6^Gj^1(00cdiQQ?%e;(FJ4Ex zvwGrgPfs^|=hf;{GkXP!yzqLtr(H~M=h~V3{Bu10?q9%OwAS?x*=0xmSDf z0k1fO2i|xz{a9vMhPVTcey8&-IeLcYRlWA13};$=<%x7N4Pb;!~W>Z-uPjj>LMCZBzTw2ip=WouvNle6tVE z>Nr!mKE`gs*vftC+01-x#Xo1AQ%Cn&dV0(aPJ6PZbREHosxkJ{*t@o;!Rnfs{xOey z^BK9s-=tgT`zX-V!&3}|mtExz(x!n35mSUK)5 z;v1R%Z0ggXnnvNhsj2zkQzO8$$TKD8P*Lz(Nau}k7TsT^bA*03W2GD0*|XA;w$f@r z7su2?ec9^zEZqV34zJC)mtrGKZD1AK>bC0K)tiiZ5%VAY$@wPdFxNo|9ME|W;-Cuq zQyvUnf~n7168)4tV-GlB5w^nWT-&C$cy7WhrE{1u{!(c)GVW`<<14WPe@NQ4wv_`{ zoeh1Qsn5uv{%tru7w7rvGw!%5w%zUDGCu-u3L8wV_0DTeFEy>x($a0%SADi@d)?Sq zO)VDtc$PTt(mi+hvWs~iJ*tdbWW&LMhuSnt^(5pf(TqAt{o5|)%w2_AgUb2dZi~mK zn4CT==xb(y)2W7Z4)H-2^Vp5O`yNKws=-o^Hu~L-4(h}D``O@im2)_)8a%)90yCCR zFk^p`pTRl!b5_rRLzw%Yth>ax@n+$h>iuMNYs3N8*vj+C_oO4*`x#R|X4Vk-;IL|D zv@fz>`lVGNd`!P1oK~ER%5les)pL1!pKnY*H|i^rH8awy>^ZPur7idySey6OA=7-~ zz)_dzr*D*B>)G7F>^bbq?t9n>9`GvtsEU0(hyNgLYX9zg>-fdRoBY_{{_B_ZNZ1y1 zow)7|^gyoTStHb`6>!&F#XdfQ`1Q94eYSJUdru?I(zpfmv{;t?5p|80bvgSUoHEWL z%en+yIYD~+)-`bprI=nV#T-E4{ zb8Yz9@$1MFM9`Fs6K~#{WAz&srTqwZF4s0Cq?%iUzggdb{e2In#@`S}t@Z(GchsNP zwGEoQy;Iwn#T`5ktZo%PYbRpD)8yq`+aV!oD9T@r=DRh4JwM1<05+xCo!*VA*iH#O zGGIBq%cOg-iSfQ*Z`r|`|A(`Jb4hhf$#GY}mADzdeU;}sAKSXN>SI$=`!MH2d>`r) zleU{fT5r^nfM3sJJ&q4?FJs(e{2uuj)%YcCj~V<;I&J7=V)G~1x#9usJ3o^LA$OXz zZD4a>V7<*}-<`_ycq5xwdcWHNWVb^-G&!%p<)6;!r+)=h@7Kd|7hb>S1yIrTeZP9pg@19}u@$ zd#BD1=|U%M$@iiE;T7+VzwO(7?^Ax^@6x+d{~+<9leXmh)F(#xxO9uq!}MM9-)tXi z()5>dctD9~Bj1;E@@kK?Efsr%NBDB!Fey%_m$t#x6XSMkIp$?Y^CezGbu+oFnS7Hk zQIBu&gjpx9?W#-OKz|Z_-QIh1tdVVVd*4u>e93;^DZVL8&FH_HIWX?q?A`D+Rg)I_ zEheo6r#H(0IL561PF-C8B^UGszA}MWx@(U0*sZaW^CqAviQkmhVVxeJzU;Q7ZObvg zW{aC;#aD*KT~rP4F@0!ON3Rhi2 zM zc5R2y=k;6sJfEMjN9||>M{5Z_K;BV#{xa1JxVBTs#XrQo<>Sx19tTgKYN~^-DKgfPJH~F`_A8tT^5>g>9a;BU29qQo=V%ns)dm)Iu0MQhlI2L>iV;E zT{s8FaYuQN=WyRynJtY5#e>ouIMu#hP<=LbZ66sBpT}s@ByB6mW9;?l=hA9|OVFc9 zkB<$eF7CK$Su4k_9$wXQh=Dpil4yXjP7*OmUWCieI^>R-r|RT_o<(k zaB}kSMjyIe**WgH$@?81uJLDP=AGyK<)M$PZ^HZ4{lXp819JVyNv7t!a@;jx&-2e_ zu=ki8z2YdeHa)v9sXKP|uQvOGAv1?u-__3Ilwb~>ei zdKdERj;%CQxMx$-_H+d9c%C#TI~4bzuJwxOvAa&?pNe!y+Lo5i=8kzSNc zajZLsln@*z@V7E*=AVgJL%)hix56s#1)kj^1~%c|3CLXqLthsTe4~#qK$e?UY0hnaA+y(~Mm! zA}-bJS?$;ZdMEHVcfKnO{&uSU3Va$|4E;&fdYby*cnQxZ%_7%!v#H&YhGc3gYb#hB zmTtqT_9w_etmAhNyL$<9I7ZwZX3cA_*~&c1Y-yWMTz4yfrx|B=t17k)v@U#K{Ba(9 zGsQt0L-*`h=~L~ZsRPjcBsqtU_WpGv$rC-sIe#PT*b0fq@_n1Ooa58^-TU1AfjJB| zbsdWHr0;R0&#<8Gm#W(!j$_ULh`sx4W%fTq8hVvi7B)V*yiSj;+iH_@I_1~Bt!UL_ z?wV)Z3R`ix<{@s2^!wh+80(?V+pjp{u3xTq&sc1$hwI*Oj&hFP*j@YRWqd$7E~a-J zeNeeyi${@|1MB$Tnooc3hBLo5J6w-hFO{e*V?G;><~ZS)R^=>t?WyGu1z(_Qngm z&bWo#t3Tp7%Q>^!N8;OCTW{r9J(k5v zj{TLV+UEFsTXO%re?y_8o8;KW_BIAnyO(qGAJaG0+M(Xa{xJP)Vk;h)U$FN3=M!tb zuxo5@QTEmK&&75d_t||Ba1+)+oZ68k(cX2=&iB`;NUY7muBwSwu9vtD%xxTN=nTEK zCYqd3yfh^@ZnU5ht2rz+5FxQs!>R+3kQE2-nWs#xg3twQuH?J;>W^0 zw7}K-q2(A~Q0JA-FX_h5p7nU*EM#1AnFgaJ-V;Z34m@`CKoQ559>Mr-O2XG2{Ehs& z>6!Cg%2Yzyaej1%P0jXH??~~i6aHHW_O%+Uqj%8i@U*E*`t-A%_{uWdqE9aM#Q7U8 zztsJ1*nY<|bP8Jc{u5g}W=Y{S1EuYE13dvAjh0oPmPb!bFbU&3;AH2ruOIGV%|17_ zaN*d32H$>;uWUl+>cxn(F30V>vWjhCw&776SRN_suqkiSi9f*KYK2TcmQ#IVdm5=P zxHInd`SZYp*HZu1A;-Gxhgg?aH|Dn-a~{5tg6{Z7k$71!vHv>tZ_;D5;{U>rx>5B} zc@DeHY1UcRxoV$`Tft06H5VJP&l1v7b(JJ)!F zgQ&I|{1n?Tdl`I*q^*OYoNB*_?*q@EY;ult`}PjMg@5vMS9Bj9gl4%mK(E?~86-KWRzx{5x7ANElW zRP`NY6QAi_aN{*sxwhyl5MOXFiH?n_hugka^Lp3WPF>38&IW(0J91{-YTezfeE&eL?HHMbWD-9bG72sL<>HN2=O zQ0MHRcw^EGy*J(zT*Q1gu(}K|l(#vvSc6Rp^LAYRdaqZWhwCcN-?`JP9tb8*4qoi;JJ@awRV;ehqrMu# z7qkbeCztwvDVHS9nfo5(JF8-oGSL|Dim#w}u+6@QGIiIfe?>Q9$r9He4E|P8eN*}) zf!8vn!LxQo!$8*oU#5%qq@LH}7F3RV+Ww;=J?-$R4e344w9cISZD;TH{e@}V(K5to zl(tF2HcglYz7n!dJQqbXx!3fC|4}>nX;8f{o@)GVuOIGi0sdybF}AO>H&RPn@?~W4 zC$oBPyk|kbqE$VKTc+ha`rV?QgNJT#_Z@5x1&b%v%C?p+$QktfS%nYYHy=L1RQ%z- zu=-Fs^>5C&OQLBG?r${+$H#5RtGMugy`-h0yFI$Lc_Vk9bp0%C`}`@2TliTdWF6`o zOZn*Ug4@2ijs4=%Z0p2`Sn1>Y+%q;!zQa9|b7&>;Q^$yP`Hgwnw@t4Np0E7e?yjF< z+sWYb(y+3EHOM!tk3O)m&}ZV2IJ}Mvo^|&UY>PwfM$h-D7N%m;>X7mT%JaYv zyT5KC2O^woN=SI8bmPcD7~kppMRl~;z4-80_J`#8hAsOJea6+>TC))%a5nKtsQGilBL zJIC}MbZi~`O&k&@hx#si=%Z1i^(qXqjCzpw<|N*kY$q7*A{Z?5B4-_6mUCIHZ1zj# zU&+~Iev(+5vfUUOweWAB^4kt)=Qwpr3?u`x8)42 ziDuXv@CygB_S!P`pNaKm=4<-Ag4HtTdi;DzP(7yPYoqpWY zlej1JH5!rXOC_u>HFW^k(9O(Md=GcrU+97K4E^7(R}Gx%sqh)qW?jp;rPvB@amW3Y zc=HML8EQYI{wL zF6>KMX2Ld1U8||#5@uLX#kQucb6v4%g)+6UWqH8#=~ zRL-Di)n@jW-MqIL_D@!^z0ellS~0^X`R`Ew)|fb1wYUqhZO^#ltJt=+|Dpev^szF= zf0%XR-|leHM`Ek~Z|7k5SQXn0yEx^;z;(Cyj85d~$MV3*ayTD7#0y{Y-&Iv?!!|u+ z4Bn)gHfrYJ>9xWiRX6xL?=HQH?Nzqcq~@$V|GeL#%B{l(+=KlS*fy?Wd#8;itEu&n z4@o;lG0XasWxNaJ9f{A}ZxMe&+K&P55BT2$S>ksnZ!4bnh$hvQf2y>#UN-&TbS~(g zDt$=R^NT|yJkrtKPJH9|7Y2V*|1{xU>i;H<-v_4lH+6dse(CzdXgT4Mg8B!rP6Chry*l9JkP>qMYZ89}jd0U*`SNDdu^;5m zoofYj2U~Z+E6H`NysWf>)n|a1gxIjR|IGCB{l8rNs=wX3S^=lVT;mqdr(!9(Glk4Q zKs@XvmtDqv;W03^pH1KF;C)XJXF0aw5L|p+7~3|)O4PVy)?%+41h@8+Nc_TPxxw=u zN!nIyDu+L*7{X$&r#DQzAGSHfg|i~ox%*@44_!I#cha+AADhg5_fK@+R4Z2-9yr`# zG_B$T>LqO}HvI{2MR8S2e6I|=Uvx1Ynz`JgocSu>ry5VwOQQT{gI`r_ zdd7(%>rIQs`xjKPO$n)X%IVia{aeZpIjN~vf;Sx}clI|LLgK}{;|4?8_rOx|kpkXD zZ}2zpGU?-~M$Oc}xwb=u9l(EtcWO;!ys6=eP5p=w$(5HqK%cAToUyL$l+d9XD~QGW zVM`u6zKdAzH~vOl^73zkVf5m?xV9@y{hQ)mr|()*Tl<4*icKHVl97Bz*LHJAc|+|x z=wx9doWBeITZ8`{&G*qcvwJN*sE>HflT6WtY^K8ljF`|uq}K^IgQ5f z+KCB!i03BVg$~8c>4xVb2oWQJt9p{DB(s6hAiee-Ek{ybftWY z?>=eHLDeN*{OPTxE)b5W*;6WQtA|ymLVn!fX(>0~t-Z~E?FH|kwRbnXh30&t#JJ@9 zq@Rrs`^dlhv^Eu!DStopwNU}}|4Z7E@7veodylX^;f8I0JPSU|>t_D=kpH(&?Zi5k zuH~9A_aaZ*i`vlZVU6xuzI)~!@`_XWaO>aEk5(T7Gly<_hrgbUuk^5%{*@CS+&#CX zyaxE2#rK-Uodle$F@NiWlR59E9j^>6Pv^>5!FighS{0UsduXYHj1_KoDTDQ|yajjQ=KE%}>&QKQ=? z=JZhHd@sKNTe$zpafg5%?B{-d1NePI_P)+h<+W$e`i42b1+PH$Z|)qXgvgCxy9_@C zuSWCFsT=Oizxi86@71+k5u&dj=Lzu`eNnAF_vX~U;y8PYG^|H6=hp6e>t09zX zJ*KAcJlxOGv6Qa2(G@hh0O(*Q=Wr~f+>G?$jK-FAd06|kY^>wKpMR#FZq&WjV(nHBXq_rwD$eu$ZKQASzK7vq|AAPhz5g8V_ zzt7*otNxPGf)F;Cv}GL+?eaV^NK?-*doEP(W$&S31>z%ng=5^>x3e!{n_6f4Gpsjq zJLoExf7monno35SWkJtqm#;4FJSAT-*VeOYZWM8tlosm zW1ZcxMbfs;_PNBHy~!W=BB~#iMwscz^5^jgdD?vSU8o%Q9pc!t$(Jn6A?K^SR=#=v zOK*(?@86!+^nbq+n>ur-v;7SeI;J*&pM}C! zI45e|_+0M82Y&`rvs7;rE8Dh#zvGOnb-X%v6S=iT+%Kpdv%ib2&Yghmtzm2H6|s~h z%Ky5y!H{&9j2@$Ur@eo6Oq%Id{9XFE_Km{JanE`3QA5y{{{??crdZTy{g-F*k!6$uXghxjzuHnl*F zN0+nyM)SMF$Q8fp?j_i64(TpNO&V+QDUB5t$AfpydfIMVqXf1 zLVMuOR^V~MvB)KscXRh0#%*AuCj_Q;3HuUx1mf^ttPkl;vYortAfA`|N%Ea_w27g8 z%3rCTP3L^Yo29F^uo1NEI>RzIw+l0aS0V?q^ACjz56Z7 z=yTQ7D{h#$=;F$;HoUv1o=xr1*~B|fyKA0tE6`?{=#jpga$(vhrqq7M^h6T2cd#uu zQ*zwuVd=QkSX}N!N7g4iPygoc_!Rq!2b#2H9jiXA?L`Yb((@4?4!k{c$B7iL_JOag z-R|0C4#UGY-oHLWz1()3DD&Jf|5mU1Q+zZu-Sl#N;HS5ImE*1n&;9GXjJbb)lyUik zcVr3=%sAC311;H1_`IHjzg;S!>wrJjQ8o98xca(=#5);tGIiM&x2 zLwe>;8AX25wLOfE{%ms4thXB$#mbAQ?G!fLq#}3H;nm7zk~eZ}#~eOi@i_1040#GG zR(_yop5a8%JL%ZzvVy;=Pfx7*LbTrcL9Y6&VfJxd-4tOKlvez5TOxz8SNpWA!)JBhVfiN6`1uhDhi3;uSDd|GGjvlUU* z7P#|OKI*QI9>WD&^WEXp(dWtdxp3ypx)GhZmA1ujn=hoE;|BZ{?i>E<^ysR_xp*#h z?q?^~o8~aZtReAU#~i*G|MS2F+t0H$<*Yh|@4}l-yfdu>_FB{Dd(7c48GBu}`m{?U zk$WxYsPqP%_n>@~dN%zu;6=Z9q?Xk?D2|Tmm%zEIoP`elCaq%hQ_z$A$*(+s^fTdJ z661FQuj`!fbq9Z&nYPUMl+K5J2dDdQ`t3g-Jrw=-Hh;!&XA^Va%qj$;5cOoeREAo!M_IqJ!Y9ny4 z(K*(S{bD79es;gH&hG5T?*M-j@9N~wvGRvDp^>2dr=!sfjn@q)_Fo5o)B7=;tZDZ} z%XhTPbNcgk1S5Vi;dka+Fm9*NguFZ0fB8mBsb?&>2z_wwm(~gHluTJT~Njn+N1<&b@ij6wB|5j1H)dlAN%q(^UOr!j?P1 z%luvDRika*nxiSbetGiwB65VGk_Ef+Ml8Fd&wz^tfxnq?vHb}D|4TZ6x%2;t_561I zQuHSm82!oLzZu_qX6M4IT-%~m;1<@Tp!M09*gx-Eg)=?D-X{05G&T3nHZ6PAyym&S zm9`=78pnEAM;b=0WtZfy>Xz1%8d5a0KZ;VLR=Cr1g}e8qb|{{et@Fy-b7ziv7=jnW z3+hM=(JE55@mQYfKizQ^6DuzW|D3wYtD{!5R-Vz1r;l2^f=INFN%_2z+B|*o>Wczw(`9A58as_*pi7D9wp`?D~H`0*+Ig z-~Ewu{{q)18MnEu`X%N3q*0+97%?@ql;YQR<###j-Er|9^-2By#;<(RLal$r@~nM5 zZt$qrApBbFJ&f;sW95HuFS;^wKQ-w8uI*s*QqjR(jmCrS*A3>p<@!!{G|KUZZ?mmo z&qpshT%*^2dBdrH>tyPIbY^|J;gh1oxY)jh?Y-b4KSkF4TeIhLyHfipHn(ami7uV~ zc;W2_SGwOA+uyN$H>mozA>$q?c;jS#kRcF zveCvOpN>}0mfbn=&VBQwfs>m0gZa1hMoZTpuwW)3YMFg3q^_@t>DnGxP1=(=8PMtlaX!eCe*)k{%6A5dPz%9YfXB|yXRMPeKJjY z{CBKff$zYlol_DMwg=uy%no0JdaGEyQ|=iHp0y{NyMQ>Pa2*4Yc<}>y(yNfJyA{7H z;%JLIbCB;yTUvcetzcvJscljEKv09#hBGe^wpzU8?j?+icIlgo=O{O1z)zJu+Q5ZV^1S!Ip`jPJDir>^0-8Qn(dLMPs@eCJH<^`7$OUs1C;n!RLX zNU>+5YG)fQj4FEx<2JYFws|#ETI<|N@U0%fHb`_O-J!4&yYhI%6@R!Z99J73SaBkiw?i_@hKQ8V=w&qJFoPg^tPobs$b+R?i^cvK(w%78!BM?Ro_InwK*2Yo=fVf+Bw{FI{1gCXJgjmdc`*PuLscpbB6 z-9!vn#Cq2}9NSg%4uymz!eP%6XJ4_KaF&Wq*J0ZaEa}>$ZBgd0)PRhY4j}!q?h1%& zt+B`}fKTf z;X666R@ezsbLZQ^7RIAo)uTP$re3Zs`K__o3V*A~xNt3!wqASV+3y(+o%WQ+@9>j% zE@Zww=CFzHms`a)N)NghO;0!WL3n-HU{f9GG2N8+wve%}sAAjS=DV5vv3j~)u{=QC z+1bGbLw*8N8$}#guZrzGw)At+K}A>cS!(vKH1#Ch=M4VlXy+uJ4g5{@IPky?{w5z5 z|4Up)Y1BLYpxpQHvVFljU;3rLD_w^RYitAaYRA}ziRDK#mqtl{u)yEc6H;S~2P2S9ll=mmS6xX&n`ar*$n2dX| z!QUb)e>Zsd()((IH;k;bMFX63(yTA(Ns61+Y=esd1 zKElJThx*39{io5kR6jcDA=Uh-f%*g{Yzw-MXtFY!{h#?uqXV3*_XPH&k>sv-N4Uf1 zT3_BtoTYIKx;9y|Ci}^z^lz~)0iSB018*JM!SuQnmpV|vqYj}~u0 zyjbZns#lsdBSO7P%=$1VY1?GU58R{bv4;wuIzZn0L2S`>5Z8pW(dj4Q%wa^6|FXX> z+y^F;g6&K&wd=s&J|Is(ubN>$N2S@~&R2S|>RV{AF$>%XJkR`%lKbKHkB?gCXI8Oo zLoJN@4u$cjoz(wr;@P?rn;+#2r514Ne9i!84&>C?C-bR0UW`A%!Jr1GV$)XcPuFmE z1R{!)D{b#r?KkVJ8tXvM_bhj;63&X3dEdkZoi3Hz!&2saJNw5} z)>%{j_g2P!ow40HbhMT8zN2s`@j^Gwtj$4b@{MRRkLTmvS?5-<9c&-E{%3mAeD4>p zU3@t1tn906!QVbf*t_GF+3L5bSYluQ=csvIulzgb;%QTJXf)}QbEvS@Z}H=%)zM;Y z7|>bU=G{jO$AR2Db2*B?y5m+4D;`p=M0lDw%HO|TLmHHczLM=LZOQj#Z_n~hc(H}A zeEJce`jUuSs9GNN&vbBfciiFO`$Gq~SHI(x?$*3|_5GcPuBLY9X20@+!t0ZBAaBoJ z;2Alivp4qCM*fSjPnAXWTh!PnpZox}{fWa{Rk6L_)XlJV+0V!Yc4@~QaSL(L zcf7ad%sK9^H*z-9)N59JIerHI21jm0le_U3Vsypqnn&VWkXH){bJ{+?9zT2B;BO=h=pI|Z?&sp+tAK_=K}RZVUA1r*)VYb2CTO^#CgrRKTKk5$9Kr7*>jq% zMKhx=_j+-5R);uOIQOrB4>Oywt5vZbOs}}}eeCV**FW>FO0!jiru&-u!8twr+;Pin zIGA4Q2F#u|aouG>@p*q7Jr7>d8aSNzYjO@1HrjJu)&~A>@v|;H%KH87yLVAt&gA;= zgs7EF+Ex!Adf;i#!#8~3JNV9(=wSBA>Qg#eJs17L-c^&Hv}GNGpBo;j^0hiEmG9S? zo3mqxcRhYFofbUp~b-32_l#`x7{NDt=nQSieQYN8=1M{8Q_!HSRf&?X*y7lgfsPJ4w9oR8V;W)v>6i zQo10OxuFZ>1H9fiO9leVnm*-JLjAAV2f--llJJlN-c?}f#iGt^&4F*e^Yxi-azneg33 z8U6Qc$xy$QC(9dox-V*$(f8`J^tOhtZ%{%P@-n&y@_ubpp| zUy>8wnV)z5btOGdbiR{ZkZb!t_GmcWWpCzK#}~%-oZbPZMve6R&vI|vvb=Cx;R^DT zj%~%JW^iYUdsrpaOpRJ_a}3);VR5;=?|-3S$;%THYrYU}UH@!)l5xf!fFFW}!$sh4 z@kzFI|9jDfAD)|E@}KJ8oN-G_7oY(@n(sN2^KD8Fd>GcjtK^@1MdGKsO7|#a4Q4cfn7ipOUl`O4{UDQ&vUemo-hSP1$w{{rlwoV6W}??%-%vR!);8b@@H; zxAtd8tVr|3dXsHQsMniK0>XU^zplI}yd*lF-vhVPnY*P%V!g?BT8MQEhhh@<-!`lp zpKWSx(4V&Ae}m<$POJ;rZVSDz@jU;1e@zq*l6CZXHhVdD$+Ot!rs2DnCf0>)n@baw z`sJl?J6_}Nd23KLH_D0YenP!Y!q>4SAC=W(g16_FlMVMnIRo*Q7Yqr|litsLGArTh z8uzq)XRTF6KNX#E@?z*l++NS6E;n@9a*(pI&T=xOw@ z=uf?++K7VS+i&43KZn$l+iLYh_xn?*nfq;9mqD^2+$bo{;Q+XO?G-| zwPN3+{*4&UeKz^do0r|feoKD6%T%K)Ed4A;SG|qHbxgbm`Hr+dO&@^Z6u1(HBZDSW z`zfsv;cwC)OxjK}InsLr>-awR5x>pJ(f;9RTHT5N*seb?-)*6+RT_E zoYmf>Ix|aoyyUpeZTPNU<%`A~9?zPNn!aM572~)|)zf_rd*{2!cc^vnNas|%Uttat zo>=KqeT(u*$|)vo@tsRQoR`_?nWJ858mJZn9mULZ*hEQLuS;ve0Q#Tu9(>PvzocXF6-v{FScDmsxvb6swua?m-{5T zZ13&7Cl7G}I6lAY&OyE-oIOmH@t-5-O8XfxJK5#+RtT^-4zN52k%we5l#0_QL zIp@QE#vmqoF6{Kqc5SzX#NXum;ww+{?eDUsO`gmxD=(59x4Esmrg8=3pxA5XW$XND zz4P5fP6FJ}wZ(V7t#!Aj{`vcT6Mwvq{pP)_=HJ}zIs2xWbIkYX=M<-+USm54;P-iW{LZavHe5+P2q`s zlr!nXLj_X{qeZd3b%N?U35Hs5{Y~e&=Nol(KK7_peE)3pm;2?td+E|%W*yU8GXD74 zd5$iidB4=kP0v>Eq1m(GJ0AEqn)%Mx1U`W9^Lm=bZJUO0)P9N9LRTx`0r|lJsu1dT5z|r)%f97OL8zA?+ zp=pX`t{XK0eSk)ZyHO$aWRviR)*)-`xag9V(|S#6w&N<(hiOkZ(rWyhy~_Wr2mWTh z8@5ZaU55VT27|x-^W1c&{*5|h#UUSede7Z=us!BzqJh6jfAWq?UMy0s*a|)zR&VKV z&M$ZOoit(}?neLcv-70go%eKs)q7yWnY`Php@tKx#N%ahit;Y<^MH2@ zb}NpUbU>|mdf3|eoV%B#$#?!;`N3niRC)TEHH-^+# z!#S&!-)az+{+#eK>^SF}CEl5Ao1*dIlg2DQ5#i^TK&jdS7vd>msRG7U{jt7_ z@E+CgtL`h3w5@Z^@8rQBqvwY&>*mL=4G0GmHZ*%yA-UarY#&S7-uvEPq3!dBP)8QY z+7MbC5QZUb<XC%q5YLc{?ulL7Dzxv1&Aow9tSi^{jIEw7(r@f_$&A29 zDP8EzR>HTg#abSV?pBQ|w#~z;nYrr2g>dEy=wG!TZLXSG!qQ8AYG|}GljDNFsXj%V zDB%avoaWAq&gQ=X-OJ%bC)bFmi@u$OTk3_i%7G}?x@5s9CBQLgSlt}QhgXp(fsmc2;5wo8Oj4I$UGCK7K_ zBiEXrm$dCr{5gHvsKHj5WM$bBUguL5N5$D`=$Bl&)YZp&k zj*oQ{tI?oW{xfOY$W|Va z+?-+n*3E<1lo20a%02=P7+=cR?i@PW;tY{zWbNc&vzPuT`KCUN+&sUh^Ubv#Y=579 z#3$~BcC9PFRl=w)(z-;gV*qxYStdHsy{ z?v7hw-+1!{zAew!@qbXih3WZt*085dU7+xT?encFw$;Omhg6#;E;Ky5fVeB#SKy17 zeKR>O`Mwwbhc zM%9@E<8I)Lq`pNtxhbn+@#|j7Gcik$I5miVl+h@6$K6eT$VZ)AeB2k)eqi?Ucr7sX z4dC_dU0-M1e~9P1md>x~UzE}<8oy=$>$Wzw zy;*yyIm)$E+O`ipeDD=)!NlNKTE!oNsV(Na9$}Bz%skkClH;d6#Xlz(Hyr-V< zX~oeXMz>nAmZ`f*j=L%(OzPf1V}3Tu;BRFYH2|CXhC76E^W>S5wqJ!*A5E`6=J=o4 zE2lQwKu!1)ob{>~K+`K}dm^No8r2=lo&^>j>=t%v`7bi}4Wl8Pv~6VHbFu|}QFp!Z&dSh+9Vd-ddbIt(Gj$KbU-pj}{U-dM3ieuf z`^j-DY~>TgwGp;AXG5^ZqJ8J0uY8f|Romawq>63zaL)1Rp0U?`tur|QH!(}`GC3^2 zbkQ9AH8Ee-aqfA)p~bP+d*R~NetKmD=oRUeh97dV$D>j2q2Z1)bIO|D{4P}W0S_^pWkOb@uoZO`)ES_ z2j0EV^rc55%)#Hb42qOFvi$wNktpVS}8s0XCIMx|gT-vl7SF?`i;M2n+stZ!B zi?kY*vycDvv3q|Y#}o^xuePb7Rt?dleXLF5UEyz5EQ)5Pd(LA!EF_I5)7u4&Ka0Lt zIycOEf~#vae}`Dlox==+9XQNv$09 zkm1Z{e|Um>iZ~6f?N=e)B~3k|MQ+(D2`dk)+9oT0keKtFDz+y=(n{4C=$wmz;IByYKL9jqEz{|M_OvaBoelhIZP<3ZL|@jD~FaV0SOUmi}*-O(8!skNd+D z>=EaO`VWo!jy`e|dw}jsW$s>r?O>apYu>hf$FP1bV;xTpDvu<+c5$uI{CC$pwq^G4 z{cXHD&lC%coZh;}6PKrWKU~-bzFiyUwa{Jj*jCu+!qP+j1>du^j+wq$7pF26aGo^BrXTam8Ygt50} zZfYC!-m_+lseP{;cX;@l1K(t5-HY?9o+wT3+L5uMT7O~oUTRK~Yg2cyfsI;aOn%_| zjLru~XAbSs+*42UDcBwIOKv{+dtTo(QQ_}>4;Zjd(ywax8Z1jzmbnBobbbI6a8c8i^Mbg1^nC?(7q^UmNGIE>VvY zXIwZc**YI8Hq8%#{pYCHm}R}qUHOKHHQb-8o?fo4@=*@{Hl2J)TpVxi)ipVP(oOxF zbaN|hyO>_64i;4(pDILGqB;JhI?wYXVEc*nCXA{iq*_Ml9+#GO;mo=v%$bD0H0E3+ zHfh#4aVL=NG*kZ;DtVbZdpgfqU`uP6JU{0mdelj&&fHgxw_&t zW)YjA#oQ~a#??K+_j>U=?i^0rOZR_Z^iy*hzvmMd(kg0>j_gVQ!~GZ1>rnN(#um-* z&-EN&YIo#_de{vsc`x)z`=3H~-*%<8HCNFVR0hd$lc%xL9z?SJb~{^KOIaPwtMyZ^=vS zzYhMUwQU9I2|V-mXmIdFj5Ch+L@yU@t*-7f z%2&GYLB6BeWWF}eVNA~{D*qw#5umbVtl7XcJTBCd1a5)?$v+IL*Q?!g;Orm+O<*mV~4&Zu$>d1Lz%C7ExZv!~t9W$zg4{ zdla_QLgHd!i|@22hR@1TO(M4Jg$u)$sabK}gZ7;XFV69OyZIWvCHM;Kvd)R|;BP7X zZcXk8)C(uxui|%cETxq)aa~Q$)K{~`(WHhP{6zbBuf%x_4vFum{^*yFPk`5s3>0L1 znx!~VcM3E)xGN82e0L6~ZEH!7%mHaly%Yb*Mx(62FDyl4>&~HgHeuUcz158#l9m=kVg_RYrU5sheX*M)dDF`|j6^Ds9)WRtC`jZD*w5rr!!Lx}$kNxZFYd=b|@o zf8oTdUU9!MTD;Y({uPaRf0yN`uPF7r?wQrSV$+OlX>Ebw!V{?xJJ9}z0&#B@zo_0Z_{oj# znFU65AX~kBXU{qpd~r)oa71?AZQuODesP$yh`Z_xdYn4%4BIXt<;T^N(X!xia$ZW; z#@w~bEpjWz-F*k!l2G@#bE!Rfg`CuQQ^O=ap7QpF+fcH^{l?f%3rU|A%@XEuDc|({ zFxr(~@ye8YHT=@#9JZMnCf)raEBkUMdx;vR86I&67YsR%=;|fzMulnW#bP+1;fJE5i=ODU@Va-X ze_IRYnjUF$by=^-q?7KxgYDbwQ46U%Tp3Y)YrAS=`k5G~{HdJKs0BSwbX@H2JJ_B? zZ_NTTeLhEZx8BXqIrv-rf$$@COZJl0eG~IVtJ2FkbQ<4j99F-#gSVaO_5KU9IhT%y zQl{6+fAG!*u1}^diB30~$)%-Nhpf}XW8w)`+dYc!;>m`K5<|=1-FLu}4rH&bIfeKB zHvO|xjsB$057jKI{>`bgH0ur9E(V{cwu7Ht5Vkh$h^jWp)O^Q#hS6tr_Y!PNLQ4a0 z37=<){6UR#5w|&!y_0;~vJCp5% zQ0j(d+UM9mMv`|qNS~mw+!rm*=BWw(gT94qH-=6&JeRm?GCv0kieJLHUM^lf>w&vy z$`y%sCflZV*TXqR3siluz??$D^2I?GZV;Aos|hg8rU;(A!%N zP84Gus7B14!)bfq`+n0GUcDThzHUz#zCGuBA~$#=^UY6LHSc6d`i#mKqT>_LJLX%F zOYIAu*Y~f?7 z-xMYS&dhn+nmM%P@8@89G-<1PPWicKMJ!8o5A@y)tUoFKc2jI^=Fx=x%$b9}jcVkS zn^T@$*i4fpXJK0%8$Y()tJpTR#kG~K?p?aaf$ecNeaks=1#>Q}V%v&(vRYZ6znDWW zwJBhBJIRMTdy(Q_`0-V2ue6mXP;X9Qdf}&4A2b=i7{xqJ^IXCV-T4OX!$aRT`iy_} zoi7d^Ypetx3u3o{d5G)l+7{Z>PSK<70_yr+$bxG{p4yAgG-uqG_|_L!vAxljewya2 z-dKw3S6y;GJ$rv+>^S3At77{Ab!vSKHYMGB;s45+Irl;J5d5ghw|LSP9)PZm^W7LG2j~^=SAE~a zb7HOgg<~oY0^cTKEB(pxY*Q<3wPinQ0H$^|d(s$k;9o@GCgzrZ86ZB=xCLExH*<0* ziigEVU54%bHrj}2)}4w;H{P|a*tCThS2@~4#Pjq^T6HdWmLh89o{d=lu8CQ#E=}5& zmLAGhAItwUb>?wePHh~&+ZUC}l=h~ww4lA2XPch=d1h@VDJDy@mnErqpVF?4(xzpk zMI<3iB$Jf1kdUO9Y=w}JM0&r!b3gYp^M{YuJJ*~!_kEvpo$Fk`-}SrXTMZ{&nm6*j z>RXkTAGfkUCpL2CP?>s>4~e;26IV|sx7{7veQ?*o5;*I)bEa&S?^FGw(d{qEMU&)W z>ffH`E;k`!-Tzq3y5`Dqwl@AI4Mp|oB-cVsTORYN2zT!9sP+7E&H#H3@>}u?+y30i z8X+z&^kMr4zjqJZxoq%@bDW!wt#bJmF_7}!==p$$Xb)S7H{j||qL+E|a<<@a53f&h zE;vuD??dc2*7v2HGrN8}?-@FsHkMcLRaArBS?L*R7RsT=*rv&fu*MGE-y|aZqEPr-MIomt1 zJtf^buXr1Z8C2&Z?lOCix%`E_Gj35xIJ0Vf9^Ur~KK(fT7^REV0Dtlyxci~xK2~43 zy&=`8tzUMLSN=yl6F85)OX=e%zOv!urN*ro7XL*1jc?*rFV-4=r~A~SMqD@bbWP2H zd|!n|z1)GtojugQc)`NGx}#P1HTCuHyGER-|BgBP-Bl`HtG=2o=tG?Gqz|yzQLV$H*?w_ zNjz31yY!(K!QX1yd!*A}(pF@j*tYb-X1~1!PWEaXel2 z*tA`CeqD93_pFT>%vx-7h}pbnp}x`sR=tiBTY$rzS_sU8=j3ltbR@#Zq2r1 zk)hmwssE5xZpyZ8vi|KI*6NC=_2SOB&2zR`U*t3m{^pDu58C>ZXdjjG-1MS>)5+OA zIcWK>=Up@_H}2@5^2w&2y{I9$V>|le{LQ(=zPH}O2aI?25c!h%!HSEg@*Uxvl=LT_ z928Y9dGDV4v4!W5_|n-!*cJz?-Oz}TkRA_-8SL{!WXZefoNvcjxAWMaSC+HgFHRP5 z|BL(#Jp}q@RbO{ld204hdu;J3srT?l5M3%ep(o?6cDJMXN0NV*opeaU@((9{$CyH-6`Ut?^=F^=sWq09#D;NS_% zm+s}1z zy`fWW8=zG=o7k{1nge}%4yvE-9n+(O;f|vLQO>qvSh{i*{yFYZ9lEr{-ygZgXi1CH zs8};KF8f$Lo$!CAH~qW8D}4iQKMlulx9Wtv*XPEay~%eQ6HW|FWWt#<`%-)xY3Qq- zJ?r@A9$|xJ^z4}~Br*_!qb6q1Y>23D4YIu^i^nY7Oz3Bsfqrt4Ytw|rE zBOCPtHOEHxsgT#8PaATk<~@)LS_aSjdcW$@67Rl2uJ-j@ajC3tTgTFW+m-v)rGImW zv~7nCdzSoJCOMF{(Zm&r?0uKa#I_!Hn4hC{&pn!(n7=S(YgzBueax*@_tYAwL$Gvka+eJnnp^y`RntKyY9w%W(yk#S~+sjZJ$ zKMc?QZr|7BVkcdjE};yhd1;4kCehBFHPSo)f-m*c1Q&&2jV?yy(HOYiu? zi63|m@u0X<;NpfiBOPkpORU5m_Vtih;-^#2Igjn=pm=SjhOJ~DdHNrzO!oWMuHu`Zi$vFRaW-|brAmuf}8eA$1?@qbU? zx3)OGgmF2KIaBO2crHHr_VB&aXTiguj>lht+%b2~)O+|NC@n|n-x=Mt#QKoKoSgY!=ucZ7s{>Fk!z=FIe~7lo~}ChSg}J;$~vRIsswTX?lNk<#I_ zX18@;ctLk~MdDi&JLfU;-5dI4?lZ1wwVqd9w^#Qvc=;~n6cqa^=Up~##qjk-m$+14 zGOb-buedO(C#8ppXLsG0={cRUWgiP0pR{p@OEv6z&T5hSGP$3)#}$8T`aq^^*~h)s z9L?ZN&P+d9;!+-h+*HP6M{jrO8M{Y+O6^VIZyoMym$AF%j~O{fAIsEy=&h6SUZbw+ zpW!+&Wgz!uy$AJlJHlON0W~0vqtqK^`!kQSUN4O#R`<+#r)sF+@R*+Df*jj(=zcuf z(@K9KVy!BQC%V6d?cuPsb$hln1zWfmlb^J0<40QrxWi&gOpVS$NudYZp<(gg8U>%q z%d9#v=^xbp?fSrq$Z7V$KdSGhS8F!=V5O-IDCwP+tben|T{&V6xvMc*^i8GK2+lql zu8SAF19uMH>i5FgBR1|%?oDA|$I-T^NnUsjYmA<;>E9ApqcuYxWMSX_sB;gHZ70(U zReVt8daT0hz~4IXd%vzPV(8<52pW{d2d#bGkBEv%KTny&de*o1Y0Ken~lFI z-+b4xH;Li08E=SUW!7;|_ERIy+^>@RLbeBjUmR`(f8sUrDYe)Oe*`*L&tq++^Lwu_ zZ-4TPm2K0||5i@*G`{aMv={cn8=2vk##!IuI{e3Y2v+*dK{HTPv=m#2+rWx{steGyDENq#_Wmt-GAB9+e%D8JLG|wzw?7R{r_E= zvK7ZxI6gf+N1 zu@N*<$yL+4v&^U#E-Jync^z(11A0S1K(#3=gVuvTt#U1Eaw|@fAZhttOv$D5bS%! z>mJSs#%jpltwT-bQRY;{Jo+rBea8g){cLc@Z5g$x_g;mp(ngeU+ zir7w<@H6qvb;qHflF`VP-syu|{+IN9HvTs6r`I#3-C;OMoL9=zazBBK`>OZbw580) zJX=@#rFmlNLfZ^804L;6w|9#q}BzgljeI`?Lh2X|~g;`vMc(vvv; zQ>W7ZZAHME;mT?KU7~mWb6o~Fw#0AT873M0jataObw9M}E&jT+MS~MA=>nI~>=)-PvEryyr4>)}bXak%fp z%~gKg^sAS)M!O5}o6fj}!8eO*6BE3``8xuQjkVG9ts zWM^JDwv~Iw+r5mAdU0-_%#S~R-!1GH&Zo0>y7_7@=PZ9K!2K^qZ_omLf8|pxG>8f& z<`+!;c?oODjEn8ttZ#5ZxEKAae4T%EP~HB@Wm=EC5^H{>(1l;GFNMiYb z9OeGlzhGu(B8g7z93O>kCwOB04IhylzQOXOYh(1YsG)&d<$Pmo3&jJGt{-`(`S4Xn zMKAd%*Q30>rQRzewmRP!+j&7SG42){!5WCqh(Fa|+Qx{AnIHV^-Y#;SkrZfZ5)%T5VSuf*)!d))UdzLqC-@B>xpfl_4z}W7^@wyq)ymx1+ z*XfBRv%5E}|7k|sb{kx(r%cX)I<5x({aca$2z_=d^d^SPl2%No3+v?4XV6)b)W6NAK42?r z2aVZ&6XVjdRKG~Wspzvl-l0YF^GSbFJP4gd*1}2jsVsEX z8Md9&6AS$Y)ihjA{r4}iT}>YFD35Ph=p(-Ou5-R&3+_McEsuKH7#>G@BD!hSr*7r- zOrBsT+(G*rV=KS&w_7@mHXm?r_@;1cqXE;k>wEZ?h0Z#|_CWBnzmB>F)5BbM`mSAz zg4KduTxg&fE}muG`f;|lZNmaoqX;?fBUJ4Mn~%)_JjG|pOf!Qwr4}q z($II6Zi(=2^|MgE@>HOg!5u8?2HtOO`rr%yB`0)v8hRk*B&W(<||Bg39MYbzdMHV2NWGMWg)H~3gJ;(m%qfj$%fuG`Udpx}y_~PglD%@LdPeCY zs_tyqur7MGa<+{_Tb4I57@)0zlOVVB18d_Te_J@9r=0Djrmu=}+tMVc*x@~V<7Q&M zXR#Gl5G!ZfB_wW&us@wK8Ph7Th8E&?A7##`u=kg<4TYXQ^Af!Amdy1j>arS>OTHc3 z5OaQ;ch|0*ZSPRE4;Go8ZmQo>u1dKsTSLDHTjkH3cQ!OcZW>&-5;c2|XWdi34d*~J z-CyvvkMRA@lzYFULzBk!Hn^Ai_uX}@Dg3`*na9i6tNyK|%$EF~Y9`6)NNXeu&JRA~ z6>^RV>hP*FhnZ!zXxOPYgzBoLKPf)YhI`}8xe{@v^!6?+vrT+r@V9HO>um5V;cx4j z9U>MMpR%go*6eYftzuYt44uKFMm~k#?V2SG3iYcH7nNQWe8Z$|qIq~x>_3liclDqb zF0LH^hI^l-rn6}he{;sYCaf4soG9$Pv#O5psfJLzCgHP{ul@j^mb3+nQO^FBfB!N4 zxU=cyCO)JvPx3fm3EWd0Tk1rlJ*V8eur$@+@^`#&f(^bWt=g0=bsmb{z#=_0|EOWG z0R7IXz=z(^OIrJGyJtkwHm~#PwmZ;sq*hwGXr=f*^kIx9A(}GEf11RxPL=i>B6HymH;)t%G2E z#5r)>5_jL5vZcm9sQi+R7i7^VzB)YJRjlv-MJ)fLvBaOv%h_Hb%{XGH>se3xxs$D9 zzWupxR-l&^xr?9YaR%6P;9UfHpWLZFWR2tyN2>>m#klvHdOY}1oSTmAxS%*$szVtz zYza0q!uI)D!ta5A7wc44qq#piuT$IRos5f>)DrT&e)yw!oT;zM!@gLqbF+&4`9 z+e1H8#a8~aZAf+fa4h+~i!p7wB*O8eb4!@9^Ji>*eYkgoO7jCIos1l zGe!EE>MNz(n&LgXmZzESv3wtA-1-K86DB3B-PRE<;osWt(|Oh%jP2NVH2Ra9=g;wN z+2>th|pE8U&vus^y!=EZYq5n>1gTBYN0KiD~G^*}rG%*~s_7mp3|e!uH75tJjDZOF?W2 zA8qQ4i7m`KgERd$dGM{=TXv|2eY~X0BJelGBvbfa-$$&Xdd}MELJcIfXT*+LhVbJBKOp6^3h*_la-`wi(C8vFa8eh z&W%kkwUX1V+2cig+sfcxaQlm^J8K=?q)M!H)oDBjM{IQrEjRAc+I!T6mORY6Ve96OF{@5N_DEj~Y=_`axR-dF*N*C&!S#DroKh> zZ_=_$zBBD(yZ)&iw!cKA%apeML2RcI2XYrmPb+6T&fssuhK(VPOQQ!$>zK|IyZ6y% z<}t?EL*!u=2H&`28gcSR+_46rad&mp=20n*>&Tus?Cc?I-w3L1%kWGSvw8MJMB2?d zV>OQDzp9+=CqZ#h>>Rdy@QJYe=C(g|_n}@uIAH48P6xF<(86Ml;~6Iu)?K9LXIVGr!*XS0m{cFoVW5nH;5H{>(zb*A}CizQ=PE9Q6!KiiH5xcDf& zIq%hz{ep6~BSPvqA#G>rR*QF__*3x$f&V z`v1@U%BxwPpFjSM`qbH}y{UcN@3%u4^pvWv#y25Wh<_f z(T`F;o{IbE6;v@-+P~JxJEHy%cIK>ey-yCr8TVV;KL~Swr&GLS)!jJ;gD*X1@Hc<| z8s%)$g5oz>CGDs?YY>%^KCUEdM3>$VM{fO{~27hzr`-Z{a(7j+y zE0(GrQ4XK80$;g+zw?gcOBnZ)ptxMpwp+Xi{LQ*mF(bBDagPS)JJ_V0?P=4`edUNF z>`m1uzYtQ-^>%~T@OOx(tig`oVchy5)n7x&WN&uEwlvuJgRi)k)x`(kOUzl|%(r9c z+~>2C^>5=iQ>zDOY?%O0_fGb_dMPL_aBN3})O$#H_3o!Hg@ZTKuiVY`Z)D?p66|Yg zZyj6q@jpMdH~5=!d#aba=c#sX`W^Vd)X>Cu-P!ZZcQ3Zjxs>1D^lvrp{w=cVO@F~9 zo{qSZcFx1F>i_l)JVo?;PlBZe zstHHW0sD?5-gW1wrfI<$^+2+1iBrHY9ugNNV!ggJ4%UqAx8cOpce7g`U6Rk8wY6gEZoHzfSVRXE*S59A)SN+jPlKw&c--c=*^IllH^m$B-h_eq~l(vO> zNha|(dt7iX;r_&Yn~0^KL7%+_`(QucmDwu!lXbGtj17MZUfWO` z6MQn3+?&FkIuTEf=6-b_-yNQd|4#VIS^OR`0o-`b^5lM#ZDH`6_Zq3+C-=btoU@bY zkNqaUCvAN0B|7_)??L$}alh1$fZt=Sk3_5eQub3n&N}LAd;gi-7aI3KP_<_2M|iqz zGsdfmcF&Eh^UmC1-{tT0O`fr`Z5kTA;4zQtUpiMmVQL3-r?zvRW4W8|NUn8k$wzsf zTkIwuq%+Ppx6#C`Y5TADiNoxx`5@d=coeDmo(*L#`_N#zhu$wW_?|S*79P0>4Wpet zqpfS(cIjJufahrJNBblD(3vI$8-A8n={_5On{XlrEl_X<^WCsL4R%|}Z|(mq9^N!A zzvqr(@V99pi#mjoh9h(EsVUobgT-Y>e~NEgeb=zO?l}utEAV*cY={bfJ99_1a<wh(*Pa@GU3oq~@)GM2UTI%|uc zJ=ZO6bIe$43BDP1-_Co`+EI^5Q_n(OiSzE> zOS$W9Cx@rL5V}7p=6b+c56s~}u+_CC_|Ov83wfVJld!aG6f4=--i1j&Y2$B-7r4K% zk2dm5iJoKd=CH+}G^<=M-%K;Zd*K@#ApoX87}Y}uRo`G9&#o{qNbb;02LTLyy72YUyhv4dwK-_=ZjI(@2p?W zfWlyVcYSQ%Va+Bu=UOIy9)$sb%}fb&>6z8Rr`S1$&uiLe&LH@(JLlh`&5N#jJd59-U?wd%OIqD~&{I9jJ zW)vQX7i->=rrTN#tP=hSMMal^<72BXP)>8b8$1!R2LYP)OE z_#FJAvF#3y&flmNwDt^){ak-ouhVzU8(`|i;QRG(&F%G?^|9l3u-%NGT^3MJWb{Z2 zR`eX+pLkDqp2)1Xmb31P9KVC@zvOw(GWL9fza1Sk2klaNOAlPJ*BY&=g?Va*mg4hL4BPp ze`Z*G5^2s#Lyw$e*jn+G<4dqDH2Uz<40o^^G0u#r{QAL@_p?sJh(9>Wz4l7Ca6qHMBkor6TWIYh7X9ivwXgy@jj!{rHUy=Qjhp(7cWYb6(Ei3cv#y=oG-Fk_QJK<(5of`*xTHs= zfBw$c_sAt4cbi?zEosZzd8BYzclC!me!f$tG@tfXxv~4o8JRtX4;X^`Mmm6Gh-bT{KDUKFWtL`9CymLZRoCJ|CqW9Vl&g%t>vU`eCubKM@{T9%h`4h zNrO;(fS#CWF8<11ScdIH;-H`Sr)xReXh=B(alsY)Nxw?5zrA-hGjG;rY7YHE>Lsaf ztlkft^`=*x&RJobXnL2ky*ZS9)&JO27WwI!25TyAajEf#d-sfE4$7N5?_q2R-j?+6 zOwN2oq+zm$S}}9>GOo0^9NQV8j(4~54f=DF;R>pUnm8|$ei~0aSQWdeWwwcRA!(3m zeT&mPKeXHM-IdQ%oB^M)%$DBus;O7ZD~_|RC-}YM5&Fwj=Y34(yEt>G7}kCehOd6g zS{u3panIu2J;~f_m)U~9^%+*li^iwXlLR9(b))LbN4!LBo$wN8+-t(u-?YH+jKE#I zuQnL#Q{Mq$+R|$k9++LlmQFDJS*1hiqt{&0R`}bVWSv@L z?#91`E&pX`MRH#$*=pCc&2L1Us&R$CeH5^@0LXKxFPeWU{)>3F5&X$7KaHblld>hR z7O?y991e<~W~Cp(cCg*crSj^yV&}4P{|t!dwRjPE?~<3%e`w0RswJ@tH9O+RHhmrc zYtLb9T21hvx3J|dMDD~|s2q7IadL_A+iw0`iefU$z9Db}#u1Nqz_vZMJNO%In8*JZ+Zp#F^7iY{x~@nZ^E-P$ z+G+ckPd5Agappn(GiBS+=ufg{;f&lxuKv7#<%oybJA3#W6|mKP#2I%)sPcV(cq$*O zWqL{O-E#u_56Oj`1?&Eg`B%g~X-mHE;yM%2|9Q;&+f94G0W0=2`pNVj)E=Jw&d=C8 zQ8b5!5uhX3qV??m6OE@5Kd3&GJhvQCC2 z_dK{B`99UYeEfN~2faPCC%=H7|AhCE87}gb+mjl1&K$;s7p$uZZ|Ntu`mIafedqpa zUTItkhY{x_HDB_5BU{ZTP9ADB>x8GvUo83iQ;%wQ@#CD0W?Xu&ZRd_dthMjWh~@ht zUh>=|Fg2Z16Ihd<@_j2hYX|MeUDV1wkH*W&h-y(wav#RF8n)!|Mqr!hpR(=R^;5tHW>LG1nH9QN+{g?>~wa(4!w>f1Oj4zA(ImsI3lx?0*o zDci-1s?rnoGIEYkYWKjP` zt%&+;7hMY8SW?cmQ_#fR3AE>?&WT$8t&WdPJHU7SkG;GDKlE@p+ulk2$+pCC;Eu$~ z>H)HM&ouT0b!%;Fm9tHN>mB3UJVFkte#BbYjD4%THfuNWCVS{!XAhCHSPdj`JLY~`_;<79po3(s7zp7X@dep4+vxr5ZW7lqJ4 z_6lR!yXUZ(hjhAC(`s{gxZkF1JBCzKbKmgJ{H!bEe4^fb1_QHo)f<+x9T5T-^N91r zTI9XX2*_uB)cPqiwyhzWd^Yy+k%i0L(kE9uP~2hw^|2+Kw@1-q`j@!28qe&!hrOo8 zMm0p@6)JZvU7Zi6_Vr1JK<}^2wqlqbYp&Tn>Zo4S*SPZhEa~E_{y@54;z6Zs*~jWJ zB@Ib&nx!dmWMKVp{XNp0 z*V$Y)?wiuJ%=l>UBd%}W8Sid!w3}yf_$}AblM~znzO3Ux!;E{Zc{cQ;sF$(|{brr^ z-j{sjq(ynQv?e)I+qT`{RpcsixQDP`(GRo6J(1gTQU|}autiL`-O9NK zxI;SQzNmhze${j)P7Tg3IeK%hw8T~agOGHXcAK-c~J_lb!0VdEV2Y;bI~k6jz9;~!dr z^H+^oJv(QMk7!wchOGsA;)$U%a?5Nx1&f-z$j_+HR-FUB$9yYkDEgbl{fjm`@dG)g z-boz23L0js&~)A&Gn&5%&L8pQ>5W%5Zi4;{N65Q)*%Kv<^+6OYjPJ^R5{^lqxiZ_u ziV3it&o`-n4?B&fWSsxL-R^^A@HhKCSk`8PzqK3umEXiJ)Fp5}RHIlhEBbX4t*sec=rHW{CAVUXG{alE<9evJ=U&wF>C zZA3`C?S*+yn))~5UB7aL(gK_P&P;yyN@vfL8(b0k@XgMqHr3+ZQ2FYsdbXL=#qE9~ zmwg>44&TW$JLB#R_1yWgYg_DH^kD0n_om;9Z9K8{OTa_Z4lHm-DJGs#6&%v^EN(oFsROTX%oapwNs znSZ`D+0~-ycybDwLw@JMvwzfmgY)g8sP%P)?9!H7a!d`^bKP>9c-j~I(Xbi0Alr6* ztV%#VEUc5yac(Y(`-@hywtos+UzKE^+&(W~T5x5ym)d&qMzi2-j5>2{9}LqQCp&Zf z{JiLbdz1blzw`RoEdlO9yqD@|Kb(#x#;Fh28|v*GOK;vJml}uU-pud(*)z`t#J%0S zXFF%kvxbXexO1vK-7`=Gh`i)*H+#0)X=ptJyV*b$Nev@q>_v^;QaPP1N*<;*~PW0Kw@5MrBXApn*ld-aF z=LL^{zK;6R--*RWF^@-ezsHu}^Si+Jt0wo5Y!3u4{;j#uLtQ!IO7_A<@Oj3Xv(0e# z62p@FLbgpqs;SgH>`XuPVSUc8z8?BLn>TkTxz@2IA4Pv)xAd5wA=O3fmZg4?kCseF zFJ}s|>SX3qXlXqt4>NA;XD;qwZu<0~PyCZt+G0z(wlG-Y+T!)_&b{2 ztgw24a1+j1Q->iP!GDLW0%tJeV*4L4F16uJ_Qdh&`R6+pu~ue*G29bN+;l?@+QKPY zarx9sS=yq*>s*_6b9_2$rJjwy{X8#w&L4j{-?)pf<_%!C1wF0fyQ7J`4|3{`_&k5u zu>QQ;r>SwgFgXIq{?K_)Q;!BH~Fj2+C~X6x}nPy}A?M^aVO~&qf^B~)cknzv`!phr>q$Rt zh_Slxv&+M}1BjcX9EjnGrfi#rRD&W7BK7bSpH%e<>d`G- zs87C#Ul#1<|%w^;L{ox_wX13+;RKd1_-*^5Et@V0(x@ zgCF{>O(U`^`WqBfPrs3MRuu5Jb?4L=dVg;lf3a;@kL0MvDMxN}{uVx2uQ&TBkjN{@ zu9|mQuVWJ*@8^uWazs8{pQAmkcpFpy=89ZWVDx7XpQo-WKficl9)HIk7fzV1KdJtH z%UflGq2$gF<#LZ19xWtkQUA%;lW~cSzez*LN^}I*9Z9c=8adJ~QLVW!Ug8I5t>f1_ zp=GNaAN9N=<{4en_UvX0#`Zb(I$U75LC$>T zcf_q6>D$lu&7+>T5bX8=&iUuK6aBzlYmnok7}wS=l`pWYjjY4Dp-9JPJkmF_Ec7SR z?{?NCwoOCALv(l5JybC|=aKvBI<;Bv#2?beNWL?z9oJK{Tu-cTtT@xBobubzC&U-= zs^6z-ky5t!oj!TjXD&bPc1veLbFJ0wHq$GNdSEZwQ;y%EPHhb_`a0^89*Xr|`+UK{ zr|JwSZqYm-z1f~SG7DC}HnDGVTx{RNHV>?BZ**#8Xa0#jr~3)_u`0eE8~yi<`4>Dg z%lXFCv{gcP{&`~0_apo)uX&YDeU0`4x=9DmUy%3hzFN-thHc2k->mDx{>-5{=nM8D z7fj3;jU)!O&bjf5ADlCb`nN@a>g$#;|BXTG=7w?AM=7sqYP|7rC9X#ue+Hg)JU|YU z*sVvv+F31H*lR+L>PFx_g55QVCbso*d=$1u_ttBCrS(h5+Epd4JG%6RjPC8hOPp_v zZDEj}U7jfoKj$2Jh4nH&de5@kIX|}Z&B{%^jFmKl*#4P4Uppf7)VcV=svd z7~S&Rj9%|N{f^^zuq|PIFA7+N%cCu?y1Ss)@7MG;cxe}P2z8bm}w4v8-FWF3zydWF$ewq-gYmFN+Ii| z7P&jBUFxh!Y!{*c^T=MIXfv9+a1o24TvUwR3dK zGu_o6?yDVv%-im+;{LGj$nI$0Vm~=k`t`Q0!Lx$gpLs5Fy6G*bN%%G<-EZ!7@||hihM|HnH+WPdvp)7XG2$)sF}aL${8Qea?&Kq|cjgce$u}#< zgBB>9!ixh7?|uRfU==hErg6@vCHJO{zkS_vh)ddao)HD!bZ+4nfAYHF(U6x1FByWr z8p^ZfrY~MpIV2vb@+s0zAr5uZM~!ng2tL&$h_;vCvE7?j#b`f*8Dy!3sLA9DsdX#> zlR^K1KD{j`Rb$T1xK%^qnM*SsU+RN*!JRN0TWMOh0MC*hg>AccPmPeUVtRsQDQ>sd zm-GueVAlrwM9LN|-;nsu)z>x48aMQ1pL+U;LnZ@6 zzmLgbNZYb`Iom5j|H28?xYFZPZI14v;>b#$)UH!=#&v;bec)5gAh9Cv?JM%nD;W1t z-o;VuIX6;s$U)C>Ep;<#2CGv|jOs|G2Wo3gDJSNPdrheQ+PUz+YoN_I6K&19;7tSY zhpm)H;T_;ZQ?|oH#DeI>{cU*T>Z>9gf&I>$NAaG&!QL77e<9tmIfu|td>Bovx<>O+ z@t}JBncDu8?TpX`uU_V>*JCp{(=Ddw8a zrAt)*l%@G_e@N{&-7g;+(o?+yOfFsVz=HF2rKRJOFVvjM-tUXypJO#We?76oqkEfb zaukb$`+^C~HuZ8TTktpOOe??gK*c8LT22<8LLJ;mulkp;r+5agtN zZ28G8E7qf@8-6fO%?fdQ!#Dq&9PJeDH{|2f;Ufu;QO~&7y2KOSH7Q$k zqJlR50SB_=Zn)yQXa9)b-fHr0)8(-1kaP(5LN9J9oBlQjGr4 zXRwb;nR9JyJC(B?VRW>l%h$ByQgb)$|IK&A0yV(g zYvTLhSvlj9?_)iCzW(7!ql0j?F}m}@F`PN<4T%G!TA3z&260vl zQ#~y;xNEaa&mxLU%4{o!l`El6&D?QUU9nC5Jxt$Ba`#zv2f|l(#wFiJ%uSEBfztUl zb+5wHxIUVFX*5$DTk?Iq-Symx!_`+pXY%>7 z%vldzh#SGlR*>&wjokFS$(fsXT0*`=w)9>o8}|z^)j8zTM}bdGh!YZlsr}9#@w1=U z({mQ2Y(IPEk3je92lcen?~%Au7`xFeO^~}*F2B){lx@pNHK;>r#XDR@P22ofqS{mJ zMeRM|Z?~cE_(jTA&vBv;I;(!-*%4R95*}~1>ax_ANPEvZxv89Or=aRQt;8-9&r%l@ zxA`#eyp@+R_?!LCl()C_Co{>tgUuILkJFc#H87v`Rmgs;Q*PWuP-pkvJ=5_!#EA6R z(mmO%U1>x4$EMz|@Hem+z9W9e8qS<=i1sbs!n4ldzkS$#?d+j0%G*m5*scj!#(iyC zgcyPtu@>um4c`yHmHfu?rPF79i>9&eQ{3(7+X(lEbhCo>A|2dPEOm z?}CL>hbO+D`YSJ9^eOWocaR$QqGV0Yhs^OL-(YD-acJ85WB8$d?9T*Lzis) zjy!#kpM@Cb`=E3x!0PcsAK(KN9}Tq_AKMY3tSWx>oFE=ZXO0U4;-gUGON{v)=WKm` zKWWQ8&TO#OO%51Mh6dE1-|GK!(;=^7k7NJTAP-uf-*?8{8`9lF_?+r=mERDrms)!2 z@5Kr0?d(nFP%$i>CooR0_>JtDtoa|FqGsk0*xe?yd!9_5vCNl!Oiu%sG&5C$BYv84 zUhn|C>bsZw<3wj~GVYjgodYW~*Vjq7(aA(ZdOUIdGwymb@Ah21IL&M83p&sCW>`7< z3Jqqtgwe&P$30;Crq%|$-gDrwr@6-(+paAqJwuLkfZz0V8~I9h@1ApW<44`xV_h*c zRdVTpK+e>*EpD-veH=vBCyyRebF-CiIMJuAUz*09d>eAFOM8zyq%-a->b>W;hF=`D z9?#D%{4bxHwpw6yKSWC>+?h-5M9Q|f1zcRKly``KsPRVJ|J~>0NYMnME;jwjtvNlW z6_W#T#{G%;K8bD9h}E!7oP1mkYX^Vvo5A10YbvH}wU6o7M=qrUToUwUm-WbA@@^^b zznam(O>eIHH+x*&V@>bY#7g$0Nd0Ajk`D~u97*g6JQu6Rus+# zdv!ce2sO>`~qvP9yuaVNmCbYPP5~#Rmw>cg6)r zKYz^K_wphiSUPp9OZ?*L%17vbi$|HVWgj1|?{cHp;}sXZ_soo*r(W{7;gf@-4`yCp zVDF5(HzaIaISBPIP+nd=vcz4HCL5d^XCE`)iebiat^Tww{Z+5@ifehkddNi&6OZy0 z;-9C+WglM=o|1WT)k)JYP8!mKCd|l`w&bEW8=5-Vlr8(%f9QOMaQ7-bj=9jkbZf7k zn7F`oJ@H=n4Hc_e>zrgUXmJ?YCh=^2`NRlm8ete!K-Dd^dR zef{R|+5M58@baV9!)N1(+3R!YGbUZ;oZH`TQ9#a-T##)m%@6h6BcA~N@MOI7x2JNf z#Hny%_1oF%>Gk+G_mZDCg!i#j(sp8oH$)Q`~I%;@-`g4HR&IO zsST$e>k-bv+Tc-tgPn&tV|Rqa4=ZfnJhxH9J;}Y9-}ywJb%C>w+|E0s=1o0o7T0DU zoDN#UXGX2sH)YS6{#9~s3QMx_H=Bp^veEk6yNCUxIum+ysqV^|ulBKONC(ee%y-Y_ z?3+rgd}jbImpK=$TBDQuP2(1tT5z~~+%prbsi#=4$N4>SQR?4yvTt&~$#$O6a3vnZ z7QQCAAr?&?KZUsjxE^vQMS9O-+4x!d1Oxy&

          QV-MbFA{eeG}#ihuVx6XHw@`(F-s-)SdS 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

          |& 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 QDC-j{}e(T{acc6DgU&qaPL0jaW zVGFEr)83vOIVZmF`S4Dn9#DY1cF(CI|EG_Oeo>Ww5_LR>sZtzrgMQ%HF|XRtgozj2 zGP>=9Y3XZHEC-s?&-R3BL6TSxu8Py$skXUeuAt83*uBwa6f#) z?S|I9?whd9ajJ0~Fp3>p#0ECE_RR?C34fc6wTS*Vfz4OnnFLG-uuizouY3cUm)C)J7`&FE#|_wQ-QQq)USkz9O?O{$9sU9nv;4Oo%zqZxNis z3mG^R=u=-s?z1_brJJCbtEw&Ilr zra!DdTdD#+F3WG8a&~IKlf#y}>pZVGHlHInF8mmICG+gAC2Zh;uus@!it6`zj)k1b zX^Yp`87~BFQGcUW3hG#bKazI_Y6&0fy4uQG1u@Y@wuK6M+Dz8ln_W(aO^vIwNw2^n-Wdl2#f7w34IB0(oHLA?0t)u=XY|(o* z2k&~89QfVf+g9VgzsLF(;GaajJMRE|vU^r9!EZhnaULY)KR zd6j>Xwfj|5;y4c#Qw;sZQ#a$1wr z(WA#T{p?0AXg;((l2CsuC%9g-_WTe>UJy~w26r_1*7P~hk9kLuq+;-uanKtY?}HD) zSAqGeGACBrwol(5Fs=k{`TO|UW8ebXyQNL#z3jKdeGz{*Xt;Rw+33gQu)-Y&@A-`A zcN<}?6-i%{0w+*chklXv9_Yv9V5K&Z!GQXk)XYsiB4BKB{$wGR!5$d2T`W_Flo&Eq z!}wc;I1uRg;u(NTgdS0m?Jm^RdN3Zud3+x8sHm{s&0O)-^?CSv=qtA8Wn#I2Z9%=Q z5`NZHCcf*^&3?%Ll}D@+t?v(b4=>oSXCog9?t$2QnmXC5@qebS1U{y#eP6`BE3w29 zYF{Ih$!wWq=H8jiOg0IjN=hhcixw@amKyt(+9|QcR!cRF)>f1dRIMq#Qni+%wyL7U z_C3$J_fGtN|L<4+d7Yel?|IL8&-=d5^W6MxBQfcivsd?d*oG+NO6C~|enP>`!ZU?B zN7VU7?+kvI{?5`^`$CD=N0+~g{leU10^=eV1Wrj4bi>6RmKwr&=dL3M zZ4?^h%v%O*aURnbS?B&@d{f|9D_hX>5*b&afhlf#e>3n4x*uZ>BV6u!>y6~=Y5YY4 zQ>TBI^oo)U^ z{f+O8IJNWGM^S$OE-mjxg}5nhFZd_dy3!w2iQo9wo5?3`N2ltx?DHCIuSPB}w?AsF z&)cpHd}h7Ey2q5L@<~BMpQY%w#IiAufSR)cU1IO$aRcIUw#m|*Ngm+d<3IXeyAHZ7 zdqP<+;(tYN&E=k`zpUYRKuuqHsZT^ zcH*Twh)-vpWPAM|ac*wV{DR|xQ~kSI)5 z|Ax5lP8E;;NMo)3CgvN?UQ1CU0GC1Y zqrQar&<@E0=j?E~rT^9Pfe%Dq58=pRfO9}b{jG@`x}Ls;v)d$6Zv}XK^e9}2&1=<8 zyJscB_A~ZG;v1BOCMJ0OLrih(t3b~n?ti;n(u}?OdO%!q$ccB4yk#oZ%2}be`D4dm z;t;VO(070y5B=G=cDA-T49p30yQlFz7r4IXF|Ja11SYC$Enu4|Kk|KK9UZd;_p;CNv-7N>SU=CS*t_)^iM6&sUk{k?ahdgg zYQn&$F?Jc}FUMY5s$L5fcM-KGLZ3sh0=_{rzkjd%PN?PCW7s2v9Dt3OWNHNz%{Nm? z2r7o0XKhQ@S2wKW)2RE^Pr#pav#^JVd4nR`LWQvd`+}Z$r|I1{>14Yao=Zc z{Z@x|qnCFQS}&zO^CcZICQsTk66;Ppn_;k>n9|4Kwm9h--sC&<>}^gKoM(M{c~VRE zPBgBl&{4N#k2txQfPr`WPhatsnmZ#AyzZ#K)pa{^6XTM0P{+ zp6G>%^bpg+9x?c{BDEgrsS;jAiwRg$JH-4GdT>^w?i1?f{e`tG(I3dOxbIl)9-!9W zfE&ZPPW|*Z6e;Ymo8Lv%gR6!9f)d&}Pupaf{3_&m%E-8fZ$HjO3?gxs2E*U@d$tza z(>7Bk&fz&U5va#OZFcsIwNaL!+^`sbho5TijBAH?G~#kc$2>xhdu1ojBI47K8^aoI ztFJSR8?1aAoe!K$IC@q(;2B%Tpx$a`?e?1wda(B#&!K(`=D~4?G;u8AS@;fqwcZ8a z+;zbi~8Hob$m6O^c3|s z5qm;M`}~3F9r~0yub)}K%GJbrIP8>`)bMob`(;wew`z74IT^%HPkNbSA)1e$;U znxacOQ0rZRb-hsk#;`^0px6;nLjiUQYdqI6reug|;Nlk6b;d;052|7Ph;Izr<1%V* zk)!PEMZK-scz-kyYvP45#;tJ{~phx zqH!~oapCEPSDUXz%={$>_`1K%3nt^ObZ=s;AMY~t$Zo9fC745@^6sdO?ME#>6aLWO zEaLB&`^H|6vw&%;ZzzBHQpC>NgYQvN=0tSdEzr7Gn;=+{dg zcj}_P?*J=T6X(zyvUJGnAwIib*gKuYxr%RiviqNj_Mxfzz5}e>bmaQRIHb^W?(ARp z$G?4cb_)3v1xNd;!*R{~f26N7VC72U%vy;!1id%Vyt#j1ULt#Lay(NVQt&hnbttv> z0NbHX_KpeOi_4wde)lyWF%85lO41k?v{v&{veySc`xSY~XR*}yh8{Tf zp0cPT;y$8&H`s>Cdwi$R4>lEX^A>qNOyqwd&a7y@h)C7r>S+;G8h?ZSv>oQbzeE_I4;VrI2)qw1R%UInP&pM-DZIj((xmVk(|$1U@9G@X`rB9kn`I+LhWzA`|8H=Iq`ol^`-_B zE2I9l1bO~9U$fmO@Nb9{a5hNzxl7)A_zLbJU*KDo$NVQ^9_lw{tVwR!g&%bU4rV#t z^G%WGNShgs--Eb@u}Z-9rCj>{0z0)Ns^^$6)@M%kVW{~C18nEv8TE0472d7cf6#IJ zZjAl6gZC)%7BN>Sdh!Cc?G)-j5L3-Q#};V=9obWJp|f2MH9@=fy!yC<6!xC|+GT+K zi!VQlUIs0I(miY0SPE-@`cCBb7ADLG&(^SL@~)#+VyC`NP?wMJ ze)MrqD%7VK_^7VHzukDY-p)P|>V4z>1H2q_Kl->quC`rHi##AXCrgwqXD6PGywsJ; z8=*t~FZ@j(H`;Zysl!Ul8+w{;S)bO80vDO>`z^c4l@difPrw%SH}XQhn*D*mzX4Cj zJ0kZB8#(S&{F^?9l`i5AcC4%}IO@pZ1q~6wC&`%OZp+oUziGBu`?rQCST2YCVkw&v z&3Zn^w=BColAM0{HxA7<0X#X`_%?&ld;2Bx*gkN($4e6Uc6U$q4!T??;m>!sA~xc< z)O6d1ckOUWp@?;Eo$}_bS`1tC$BwJ&bxfTfKXGbW!1m0l%jmTXg5QR^q|;`2Dlfhws%s} zoy4(i?P2L{sw*L{vOT?_*j=Tq`b#J zGY4m^ZkvbmxH@We3jDYp{Og=s)#pSWUb>HZ<50x*x~)V#HRQ+3fLGxH&e(>~hg^xh z1%1fSdXg%%LENX?hVhI=jcgixXt~%U?u~kdb7ctTyc+xJ32lF1ZKjXRK00c`lY5T6 z53C`RhsR(*uW(?0pzS>Q!j>Srn%CHe9_NyRgA4l~@^1SvcDClnw9S#p8^wJ00;NBE zAltE^;SBra;Ll(i0YAoFCotavnP&)kYV4?GiFZd`N5rYfpJZXbz+En2`%bm&LGWn0=nqbHF#n*!p`2QMy9|aot;op>h5%?!A>_7~iVAVX>$meuM9#+omb( zLm~eZdt>?jPCfqCM&IO~(e6SY&5v25TBv|))q3o&a2tBxqUKF5Df*R}lc#SIuUj;3 zz5>o4_MceU7gRkaHj13zg|20cQBW5gtobqDSs^&LI$5?=eA7xj57yiJc52Iev28%p zOEz*B1ja?aZ(`gw^Y#XV1U{9y!D2OLSk8|2Sc&~XjW6JD%=h&eqKG^U`SQp`K@Owv z!CzZmJdL!nKc{Hioi6sxym&X({IJV*oZXEqAG$Ko|Nj)+d41V8i&$B_GiZB!$@{TW z0&aCsoFVaEv0lKmp~nohEa^}?U+(tV@ITd-?;8E7PI9E9_LcB%{$p^_p}#!&j9VJ~ z+*>eXO~AHA+8L}p?Dgp>9^_}@OSh~G{982gDkkResQc|20)GRJ zUrL8Yw_+{!floZreG|4}GIP&}HSn`FIIELl z$$`LJS=J&qd=nUY?fue^x&D|pG#F4XfW8Xjan|=mjm^JA_cx3?54f~U^h)l>o%3_d z@tE?m?|(L8_$J;Si#>6c?r*TokWLdCUYB)g=rmgB zZ))F)J_oh`tn=Ij(2A>Qz5K6Y%gQ-w%J}UK))1}i!6}+Uq-)ZmiUN;DZ4F{m|Gr+v zv}toabFIx)EUYO6Y~jbx`t>(LFD{bfUE8wFoZmP-61vJJ;#+yI4cKChlhcDdK;VIo zmg*nLw%{)cN8FxDBw(O%gcC@K1 z#V&^CV~fOZ=S_nq%N2*zsG*lNvmg7^3)m6^gZ1c?TL0_`ogAKUIA~ReE99~Bb`~1< zSv#*K>*JO?69T@9!?-)6{?^(bw?E=yqQHIR{pC*o?PlDWsBiUi-f(6W>*y5)7Ty0| zdEfRWi3xEP_954{#pU1B(MP<7J}&(jcP#APwMDHvZ}Pu!q6X_n%zVDM*YQ&ieJ?>i zDi8gA>##m5qZTkN)_;Gh4|i#-0o1{uF(kcrTHhaFD+!Kg}Z z4Vvf4`u+ghFd5n-Sf^)kZeKzjeR3@N8(IHiPzSq-zgzVE0k#D)V@dSt;>@g%z1S$veD1W)wT?xPSVQdNY5M*E zTg2<`PppGCmbdq@#o#@gorqg4#I^R=;lndz=spkI5M_IV`{KS$on+S0Hy(Q5;`7(R z9_L4FGaT~}J_Oq|;PWb?PEdy!0im%~>DSfNBNbXTEz(ZtevBH`LZx`8D0BGDAaU-o z?!LG6OX$9zvoy>2QS3iO3eH%>BVnU93o^?{UQ#SHZ(l^R5gC*z0l<4i;b!3 zxYS;2kD6LVoWD44&=YoZOIh$wey^~m0^Yx*c0-D3eoS7=h2W~}fwfy&#ML~1g$}@= zd7k7U%i|GechJYB1~>gy#CQv(SZR2MPvldx$GQF0gM5R=#Av>mh~BzUxZBO8-Z<8c z2lw({Vpk7(firg+?$XeFKu%sCm-#5*OYP7TM(t`B<}%d9Sdsb?Qr>qiDK|koV_A0! zm3ikOj#{l<9dg1JXUbfxubZ%MqxleRlV$cn@!t5`aTB;ravjf(e1tR$c`K0z&#R#M z5N$JM)bY@l@tz%bH>}quG0fBEetZ-CYQMrS@-)Ao?QxkJE6jtFe-ip~G3cX;!Wu)) za~$T~RPzhk1}o?nx6Z7+PGGK?X9p%poLB6L5jiyB7h(>|^ouPlt^r|Ij&BaH97Qc+ zYOXN0eEj7*+L=Y$LWMly*WY<0)*tl?FV+vTc!I84sCCR*k@kL3Cp(4bt&JK=MErtn zAt^T|%0R993Lf>%Hhn#yu2;@kp*Z+r97eZ) z^IYHNOSVL{e;>T|@Bb4ky|8JqTq0~oKo7ej_5jp1a$m;!`}yM7zn`@TdIEU`=y^J+ zuLqpn=&Oc)gU~SmW`#YIykC$b615-nKY(jQeZQ~`rB(*sOCHwbeeC<|-OQ!2cA;X7 zC4D`>7TSTh2V=2d9!F7s>+7oi*&M;!MxJK1$54F_Ts!3E<~?849WRur@yD7O`y|!; zmu`Dp20q=wyFPos&=2ioUXI)y>ND2H*t%`7;H4tJ4DS*@#lIEvV3W=AVpj{>j8gZb zdRJMf?UO40ja=2_k!MbnYZLVo^ zK6+rfHMBgiz*V(7Ln5@-PT*awl4otriJ#hhamuR0Rk~y?iV?M3>*=pG{F|7sp?Xd; z#Fwa<&wq?QneH0?4LL8=TZxVQwDJ_JJJq(_nYri@D0E0mE_=u+eP_(BWbc(i=zWd! z6Ql=Lg}v z3+zRf95=S9jP(H?rgL*W!1!u0fm(mFw@yX;in|K2=aZ~n;0(btjlQ+eo^HlL z`h2-|7=yD%1${H9>t1n_??~mVFd}}htDW;|{VnK5rj5GmqK6SW58!RKj-8*6HCz$< z2ymL(d*Irk4r;UZWw00IV(d4RpT-okRvEDsbKZ`>>t{E|JuZ(JaKu7f?u}<%dcmeJ4rZcVHW=5F6{A<^^Z!2dKBnF;9jhqgSMct;x`Ff`j+9IVd5;;!PZj zSP<$^HNG5VB9>C+*j%iy9gJJ35SvZD2!B_h!LG!#hYi4%1)bw}#%!(i`K=k{quIt%(FFWanNew$syj{!z zKB8D^ww+6Pk)q8vf_camX)zAT@rR3iDT5bgq);~l+T^ahy}|6o*5b*;h_sodoWDQ) zoOySdecR-6!9I^%e09WM)xdq?)Yk)ShdJAq*@$o4${~d|cl)0n^dWZv{M$L~TP~M0 zs+ztYBDn9MZ^_2Hp}~*~4)g1=fBsU@T54w5`okITF(jH-GFxVr_mUm7ir&gs`!)L5x| zs^YYS55YEA@YAwBUp8g8g*?l^!WpSEHT-lfYxK>x_4U9xC=;7bF?5+(8rsz-BYCgM zx!T!K;?jp$V?N9Oi*yL%_<{$fa zX8w#le7W;qCFXzik-qO3!C?U&ttmL8YPgd}pN~ISdQFO2KYA=XKD--;K4X2I84>@3 z2ZKD==)EmJ%R8y&H;Kt#e2Lh8nFDx!&+~#2TFx;Mw!=gpi0BW_8xHNA(s9Jdv$sre zcYL#6k9Uk*JLE7jO&yD$y+r-3riZx~;?9m8ML&AiP5NE}Tkvfk`B(V7=!wo#TwO2B zM6IP7_8#=c^Uk5YGp-%>R1-UKWkdwt-}mxq1dOYW=O?p9bO8gDMy-586b?r@l3=xO+qJQ7-Os$x!j!_jo3bE9zM?du-|V z>K&ybxCw^>Ygz{HWC`w4Ew%lZwwXfbmA&#je}H2U7Sym@W8PD1Xi7TQ%B0(GLgdy`56mxKiGc}9-{u% zVB!tjd1qlx^H8JWxp)Zoz43VdTZqTYV}C-=iDtXK{$1eICSwoAT@&k*+RG}>%Kxyw zDj+8|EMVJU;(xf$e~fXnQ73DH+SVA<&AMRR&EU2u1N_^bfNk2$GU#Qs;rA{^U2huR zWoNbiCJo0u;4jq4%44mo^PRb`rp&uPV=;qaC2Vt1C%cW`gY%Y}Zuct$Y!TbZxO3wj zremHEY7!GSpd&pHWtwuUY#d(CUM z=`wQVxQCp_&n>W>k8x{a++h3}cPPK(HQOn;`~Qg;ZUpw9(|B)fQ7 zvq{oQ!3&w=sfw`%;rVvUtW^!R2jklS3zLU=1Z?*M-|{B#Zc8zbhp>;7ac{u-nuj?7 zhv%P!vDJ4*t~qG2+Yf{$W9=?N?0(M4`wQz{s@@-XE&{faGPHP>op&qN=h$;ruUjAF z-2TA*z=k<5#53yS)>Q7@cGy{$pk9W(+zki$I)IA-kH{|k+j6hjMkvIxF!zG%yuc?> z6M!1C_HriiyhY;tWk;?w?NnFo2XqS z=YU(}!)S83vKB`kAeCE1w>_yKZwGGqH>2o};hl5sm7-lE2E>zR+J-(`=+8HaV%~yWDeUdUy$^AkHZJOK zs54leKmXLqxC#1h{5RtMhWrA0F56+>(C4tywI>!@-6!f<*(=@qNg3Pnn^u8m8=$yt z&a6$ir)ajQzilqo6};mYEz0#cEBWQoM+L5}DWV=gT@KYYp*?eW0zc-M;`Wy*^FC$PK|HzG&*3* zypo95{q%|lDuh|v|4Gv;Je}DQCzq^S8wQixAQSQvw z`2H!HA9LK7@~P!7Y~*cZ{f!!Ts0Dz3avbuCrSYtp*dt(uwZnWLwC1Tx^0@mIx)`5C}ND*TT4B1`W?Bk#`GHnd(9U4KIfTe)U9lyUd?v` z-bZM6#6+$A%mXZ8qUM{NL%u@oW9Vzq7X+6q{|ruO+wQPMQSrAXXue6?LWOv?N!Hfj zs=RBBkIJ@D7lgHO>UyhsRQenuU9ZaIn;qxISP)NH*^|ig7p zJPa{%*e9%v!5(bdDX{3!57EwJ%mMj6_R4gzrJBM0Ei~UsJp0Uyysm}!^bJ3pN31O7 z5Y8CWV7Tg(zMJaxFQ}DBPD#PxN)5DGwSCz`KY;(KwyNe3;+m|A-n0*=Cv;R^2zl?d5tRCP2*1KAE|zyx_ozSM_FqT_4^?_qC>=n0obA>Jsd#Si2>3?tSP_pkMM9{4SE z^_Vvz=Qw(aa2{{deG|5Qz)>EJIBYN0DdLjL4c*jV96SF__~|J4CbTHEZ$Uo>J{k9` z-?2x`z|XFsPF)`H-}}Im&c?gX*8L6R=E$f4vmXm**=5Y5p7Pc94T$+3p?{p(w#8nv zEs*0I?6Bf26nT0)s{G%aSR1v0ab{v(=%WbC;icT}yoK7qz=@||j;T)K$Z&oj$MhXy zgVFe1>NlnzV_e|Ox`Ml78hn0$137Ukd6~&MrPfe&+cbrD0N#7C_h25sM1#A>Qf}#6 zHu5kN{}UJ&ehfb_4~=OCJ;qz)cDA$5+|oAM3ZJkoyzqwZn|KfT3b{0ZS+P(Tn`bg| z*(MSb%0aS z?Y~&TSI{OdVTbQ1zH7eAf4sME*2Dkwvm3dfSsMRj3-D>2^Mp1IivO!=d*I)ILqjhB z`SbKS(2rGIReeS3x-iz?WP$IKGjou8+bc^?@=yLW{Hx4(JLC?jpwU9ku;Zg zg`iH*%2q5f2s+G*qqm&gVkYM!`PaYr@}BO;qW<>TPf2Ff&;*8v+||@*BleWqO}`!g zRQF@dAzz_39O{V{_K0Gw* zn29-3`TMl_!jIqjqJJc@besz?1s0sS;D_{?u3cFu@Nz}tj&Ly_Nj%BYCvFq)sAh8Y zgh-=>t|K%ckyFse-RX*%6lx?sj{0&Vg4aa0*3Ce$5gI{YTA@6WfCq0qbCx zQ(EWt_@fJbXX`Wp|75PKpj5T^!~fPx22WtBI&LB~n2peMD}y!ipWCm@_SLFb8TGf_ z3VX1(2GvO#6ceQRJnMQ{;A85J7`B>AI^Ncs_h|y^Z{S0@w$gL?vv1>1u1v&P&iS&g zR}pvUN%-!)pl4h@)?Z@)^xu3=Y1SOKzkPMzlo6?#Z_;+O;8Z97uq1s1EXvJT^zYy- zN3V!~rO;p0$K`#W>ybHR)V(m5c`j;Q9XlF|wRp@WJ^w&EV_A0!m2rO*@gd{QtVJ(? zfvtk|wifHFB*q4QU7IiSQOtQV-Xs3Qdu1PbI47YW<|5`)2Io2Ah=6UT+wCe>!7y*7-DTBx z#yrf4-5*=MYjbSulV-2js#2W-=N0d^ugyW}{GQRmvy+%^%f0GRz}Q&Z-*$^L3795r zt*iC7a+$4&H?fePs@}Ds*6MvyTEVIhqv+@&*iHgEhbRwZ{IfQ1DyMD^b7mkQt@Oj<4(aB3T{#< z^9Svmr){V_2H0+Bp5ptUCN}Gtn|TtoK8f>{eTmw$aqTb$Z`Pi=;>g>9XNLG|;D2#% zKu#j>lD^I`Zl=uoD0^j~^?>G) z>A)wE7V=YaEe;z|U0^Ah=P$aO@;!+BFLl98?|(kaT=(QU%Y&(Z8NrWaV!bc@+c16Y zM3B!7y-|w4NwBZllTIn~*L@EDN#IdBF7lQsGpEC`b!YT5D*|yRp7pF#y4J|^ICg!~ zb!W@Y)Zhe9Lo6`ciS?eA*4IM>xzALc&_}LpQ+7NxjcW%jK>cl+OM0tK+?HWK>+2!H zU?`0kF%v#K6Yss7x8>xSiRaH0L)_OI+9j<$Dvy$Q53v2zc{p`1a7Iptl&!dd>GrWs zlH)0cSndP0KSh0K5!`nwh5MLGhYy~VrH$o0)Q3Pm3*RvuapOAu9D;4AOm0f%1dvb1 z{%CcneD&j1teu4VZD8DFnOqv=p(Dq4Mne!`^XEav z;SFX3Py30MQ&9EaF1>%G{qV3lhP4w0MGS4$F0$;*-`lUa`<~(U@+QV^XTL-JP0ZIQ zFo)8+ioZv^Z~Z50Q$A~$hx!|G(W9z)HU)pH)!$TG`lRS_4}06wrD2HEkBLeE+SU<=9$H?gHQYRhGv*H&Gjwy@v+FSUrZpxS7DxnsKk3B6On3T}#eL z+)XXv*V}@3W}CitV0&EtvwLw9V~wN{mx$w!uJumc$bzSrO!NWf42$LvtdLi9bfw9( zx3XTT6x22zU$-EV`7B~aifl6#*3M=%YGf>#{Wy|br6W&`FcdtU8d3Vrbb+NTvZd}> zm+)sJ>l@nlN{L{MJua$D_!fC*IR0Hk`oVLUC*Olwe_OOH7rirI!WX9@E@f;`g_g!>Zi3g=NLb|Y?Vb0xs>LcYWW36p1_iTy(&agMk4cGQxF<*tepN(E6 zSVwKYCi)}T`->ch4LVv;%=Z?}w@{(pyUkIa{fg#MBhOgaXUsoO+abBfRd!t@lC;S;48|;A^v@BrDeiL#KQY#`Oqc_%HL)54mz;*!k zypx*tnmS+R9@MDMOwl2(XF7nj1Fo!<)`3i;mu+VoyF9f)zUbF23eJ2^;@;Jt73fs{N`&3cm$DecY z-i)u=PLu0(yN0{RK#Y}-dDOByeIL#PgDmQ@4%4b3cM6d{gMT#fbXb*q{T@I1C03#*H~)%>`_S3M?x1s-_Qk zFWT6nTg-mBjU70&=nIWAc*n&v>f^3a3VQ8^uG8iy;`YFof$^6|4PUZS;PO=NZ{7B! z!aF|MSF0w`a zt(W;ND>=7n{<9Rdz&265oAJzK+(jHfU|iJSKA(1#y>%i_Pre@Fafna5{BJ(AvZAr~ z>2p}=A|@VVS!vV0Ni`d>$gB(gu%@%E;oEt*ziGC}X%in4KI9Jbq*mr(iD_n!G3)=p z9ci`+(1^&v`=(C}6}flOZ-!i`lsdqB|HH@e&v*L~8*$tOyLi%_IYJvsw@sVb5_$W6n1>ZH z*2Y-$*db4VJLLV)SbsgI@BV@6xEHG9wn%#qoQ(frePNGqB)KKzB}HB-y@9yPIo>&l zd!cH}d>`=`f&<>s9`V>bkG&kYc>Dug)P4o;7IJvHZJzVP8zIOi)WTXt>{n1Lmbqog zKOQ{-;HK^IC1QKsR)W6MV)*gjSg*zK?#2L1dl>uk0>p9HBdc^l{z1151CF%DvljDL3=d3*_Hw{F`<-q~y>_WrWSA++Q?&__5Az3Hd0#xH930Nr*T za)XtjF)$J5^!Fm?09|?f`3<~B@G1BYXg<$c5^yu<)oFL3arEy`d!Uv+#{teBEv8S$ zJjj`$k6R$4Mkg@T6W{3>d0%u`a+o^vLz&Ew{$H9zLKX$o;IrU$JK}w?Zm5lmwTir&z_l>%&U_#HU?+9!6gA~xcTuws*dpI|XYyI08HL(8=F%mK z{e#gZ^K6~>t`jx;BHKdThXx{7VziPw06({Nuy+(VJL-B@k2$FMChKI8t|{-IF!wn; z*}@z@bE(rWuD1XWXQkE^b2&xhj&S{R`5lpmVP7p{HRkqNJ7~~P<)IDOqW+e;;Edo6 zd3@rOnZ2}`-%d7Da|GJDmiue&BUTpgA)K0Jq93u=FfVn6`}e7mjJu5RA<0w9$NRT# z+hF2Oe49B=_8uqS7?SXH;X2gRh)vITOHB`JT(SDNe_}l~M*hz3A;$H1nL9~B!^{!p zrmmyP2cp_Ss}yp*GA-mM%}E9?wio7>y4WGD%9T&x}Z`<#kq9fgl(R{ zjEdfRXn{)$digfi&B8j~jOUxIVN=!lVpEf={Iw1H@nziSn}Rbt2;)eoDP6;yk!Q-T zs{1DXL704QVyBvP|LTUO_J%JY>zo5aeN%uDlp2NDHjrvRI{lYxjD&)K) zpS!BZpr5g<7Z%8@<&JH-5A`-9zIRu-dZTpYfu>;2e#|3P_f6Qol#d$|gr;$Y;{EZn z0Z!t`_`Kkn7C8E%`G$xZHhW2!hkx9BfGCe;GZ1!pP6|NXsV-L za66iH=IA4z*w8D0yKIJbZeqUhYUie^ z|F-4j0u#A(n7d*ff9IU3X5NXwWhZLyMe{9GQg4+rk;@XfQuy)+8}nSK*;`69>yGoY zm+qUQ{zl!WwZCo>+8X8GDQhKW2HMKP_sB(CH0}r&IW*S&?`mZ9v>|4w;MRa2cXtmwyA>Rh2k|bR!{_H{u|2VJ^VpYZLv8^- z+l8^KxY!4RUM`%4$QMd>eSd&0_@Ez76}&JLZv*!v*%fMxGM|fokG~Js_XpS($c*(^ zD`1|9csKUIlCJ?AzL?iseSd)MOXyt9va&B=d|p4q#yy-vwn|pw#??9udnNU65uy;Q z1HNnWL!f@q#{s?up>xE3yvNN~V{F|P`ftGbaPI*}1pN5xXlTcoskL&aolWRz1#IER zzj2_Bc}|&%)~|X!v9-8MZE}6we1%#m%u$omi~7s|j$34+4jtoE zaAfOeES{}UA-C(~yxHcPALOyO%u4R2%4^4&iT}u(KS1|mfq!$f8!KwzIUn{lC$^2X zbU)K4a#lgQ>95t_n4#sU`zFR6;d*rH4rg9@(yHYh#__iv*V}wI5Ym;?$_+^1f5@MtR8ZcJ!AwP#4?mn$@pr zeD9I9ldZorOx10%H#(~4lpwzr`miVaW+en8-u+oY4>xtUl7NBjsN15)3EU6-?)63e zP33I;N|x?z@`Uc%O%4kD9?mxr{c@FXSDb`%68G-(8nONngMfeQf!f3>xBoyBpW}Hy zEv}~R=T7D*$i2Y)u5|MS>Th)s|Kbk2a9gZ@_)_gWW-aLuxtp-2N@46bab|4-{{!^~ zO<0S!T~fwGE&f&OZ|pfl-BsKLGcrQK&C(DUwcU6I}TY7)pIU6 zptB5LeU3Q+(0F_(Eb#V;_|z+)o+`p8agC}Q{!7vqdRg}LaqnF@LS zBWEgBV#`tYj$%IB{Ck>>e1douZLM<-h04S@6Sz~$Tgbt1;G1#OEVfYlhukWvezzDG z+PGKnF3ZY{t$y29CdC&1VQ1FpS$|u1{Y1j-s~>B7bs~7j!?3UScM>1W`Wv`Sq2bj| zmZr2oJ+>Xz!+CA5P7KFg2so6<4(Z?w&!A3&6436SANwz2x8WgJ?}OsV)phJB^7DBw z@XZSK^?(OF_JymM%F1-}Wb@;ms(6R;jqfq~LvF4m|*<@Bf$z&HJi-&+eY z*Z-*Rm;G2Dou|xIs0NZ5nk#<9_kv;Rp@$F~3migx|A-)Ou zMl~lV)yLhWj;(ms6y(6SVBh>zUk~^P$7ROy)U;T#KUCyB*oQ~$33WXv7+W7VnEeE1 z^4O%DTWn{~3VLcSTn}aJA?O(fE<9kXatM-xo;4QcYoXC)W`7d-a)`AlvMp4ajsMdK z{TLJC9m~1QPFB~a7bBBbhnmU3-DF<07MCRAJU)l#pC>zZuZVYjH8rJlufIDR3~r$% zIHS(Gj@R1vL;X$67h1Dz5WC)S`a@s&F5T|Yq5Rl|sNE_~oWs6h6M7~WOk9L@r`mSh zz5sjFD~I&(na8~CR6@U&KPQWG|MM)*uWME$I!ecP)NNa&l}B&gKHyol2p#C-uW}Nf zuiu1c&v55W%#N!zf1AE0(Qh=;i5fe8HXprpAB)~xrEY($4+Y=*hzEO=789uTx3l+$ zVBfj!l(Kudf#>y7>rC9G3zoX2_7}8sUah|&uL1lL@&x3P&n+KIeUFLILYAb@fwN50 z&UxATTGk+uuF_UWFk1-HlvZkiJL3HdA0FZ#-*(J?tXJjuiUi)LQAd z{U!EGzrN03dt4rt^3Xya+e;nVU@V`L_#)=Gb3gXt?_cQa47S1ShavvNcBTAW)P+BZ zS)Mgk;Nez0*@T`zV$;-b!TlM1n8Zy9zBJ~fdJSk|YThD@oDMedlIm**;}$C5U5+Gn z61*(tEZ2_~;^DxnY+`>K<9==22=Z2O9)5c@-?EJO6xM3l!^0lu<=JyOv~PG)KeND9 z*#K+jJbbXZC+MTxr0G-IgF~(CO8B$hOJ3t%)!1RX_ilDoa*x}cji+k zIrFI*B3gNz_RSXm6XgyT=N7QR;IoYp=zGUmc4>u#8^Xq#FY>&&R`9I9+{dNp zN2hv69^2T&^5^HJg`TSZ9{A13p>0f=Z+i4&DRL!5jeF72cz)C&-bJisLze05fpbva zD7W44;k_86+_Z+^5GnTQd;|G75Z7=nT5P1&-`X@UAKvvFqha-xnGr85bd0oJDHh(Q z`EjAu$Gm%GJjBn7|{iJ_s-cwS@m(JX| zw5fjlkAn`R=yO2Nx3hPZv-sIjSsJm+TjucfMCujK+;r^HcVW zAf}$`VC@xL&vC$!3apsqzv`0u7Sqo+BiBymiX}G2#gb$|fAHHL)R3&+uU$LnKHT8!SQHipFO$xSVJdgJo^>UE1<6(*dCXiV{3`Cf?5pV(2j;y zd1QTW2{ZEdz-g|=bExl^YX>~;MrxSP_$0*2+C5|3N@H>(sfqH#^U3WS4)I#`LUMh*=mgax1qNG(l%H* z{p%FVoY@8&^ZV2SJ@##e75T|1dor(D>U??cW{#ZwJ$OFY`W2x)%=^6KJ&e2KHCr$H zUcu>B5#z?<{2i|_k9h3pRQ$VO;Ap14X8XPjYBuDw_u==l*7cS`%!sJ(OW)vK6uk$o z9rV{D=I49+9?w(?KhMMbnWtv`ZB^j?O43&{wO5GU$y$_xpD&hqr&cj}tMPk)D+)Z@ zA?V6Aqn;pYZWmx5BD21`de9oIPvCsnTNJSUL#C!QHS5@0!1^+A_SDEybFg@K0o&qA z$7b2UoV)^dvpL4<;-ub`Byx@k_?E!o1#D|8>)whJ^*1esb#P9=;G(8cpuHRYTSO@2 zr6G=(ID7tXY#{i*H&M^%jQLN+^Xj%k6~>~Q-ySOPY>3rks5ix09QpIqxLvnhqx6kD zWaIh6`1j4eIc~)>YeJ$I&)=DO zevi;SqMkDFJkl?BkW}hQ|u61Zq7cw~UoWu0<@T+e$L(y2v$O zKuxVKa&1fCi;Kl+@9+(`Q$GUBp$PHdyGm?32JmY@sE$y%mft!VVS7DWK572G< z$fc^yLoZ8d_-;M;TNd!9t8tIzo`#r_byVuOqE}e@ zUGrnL{)Sv;6l?Uz-C*o59L&qBef+~QkG8Mb7GQt)Flx<@d%>UbAI1)Gu*cXny)}Nv zDU9vcd|s`;6)Y|nb$mkyq5r1tKPA~iioK{A<_{b|V7?&=>c%!|uQPr?UqKA}%gAHS z9Ffq`3)rS9qUHsy2h{0sk1ZFC`nN56Y8WuGA0RGSgtJh4XUO-p?UD+NOoFI&Un&2F zog5zQ>pxTNW7N@yYkti6<}1`&oB4dN)w_S54IJ!I)OI8973-6E-Lo~{q%C+mHjlF8 zUX8Iv>?mRD8N12G^Ol&|<%iygioW?9;u3uhkuLVbuy>W1b=LHVGiO~LTroEEHwXNU z`95mU025%z_-(EQvAdN$k<`Ina(?YsKrfJgdYWi(Xdp5H+us z3EQpUzxu%~HQVAGTS=F+B*){(JrEskxGpTm0wPsFZ1?TqdcQ^8ET6}_kV-fXx_EL!i0>!x;`YdW=cmf&~&qWc@hohM(N zvc;DBaT)9ho3M{na8W;-I;!Q)e2?#xulpNpb7c06s2mv;Fpg6}FRqP#uj;@wc+Ivz z@T8NQ(t9NizBov(^kkH+b>Btk7n#Yu2>)K6?@Rf~#h%FNx4;=Z9&?=FWdBIejS9pb zAYNIDXVz^)fD6510e?)?`?J5n{xH`;y+ihv5Wl15Cw1F2h4)8d&cLUMu}j2coIh=G zB}}z7|GWb7p!`mnE#5aZ-1hi7S&1WH4ub2PT(1ASQ!I*l9>^SS{MYiB>novjd`m$f`hV=_u^?o(Yh|2};e39pK-8V)3Ei%~?$$KlcH4rCT zSs&}a`~!2w`BV$}XN$%i;Ub1DBS$hlY8Gt9eau2mD4fwI>QFNm60k+yzW&Oq;?6PY z!9$@Jhr6rjA0_Vx`{6WO1M41Hi#)RQ=(^Akr;cOVOvJz7gN{GcE9u0g1s!$Uw3$2b zUBD|4_OW+i)~y7?fJVrt{_2osRQ3YPkeJZxN{VjFn)0!u$a(h5@q{fapFqATQGd(q z=waS9^+_Iby5d`a1G5S40sB?{$+90YUzW&zG-+K>EbgW8DkrsSJFc1bO`5w9xkwPDECHAOaj^sK=W<-j>#CxTAtw zi+#K5s;9AEfUO7`KlcmhcsFc=hpoh48IG zZs-65%Xt+(QVn~+dhH&d*57JY3IYbSHF7Q|5EImQk%tT%e(=qE_+8!f{Q=|V$UJ}8 z7jR_+_ExEb@?zWtE9=qfJ!+=DKfo4z(9kxchOF3IrH|$MA!Dugy6wX=e1>_Eqo1#U zb9gBqe7YF=1$LalW8vdNoZrM(v@%Xm`{#3YpNDOT0$v6yIUHEOfc}?*m~HmnkT;2( z6-DEwDa`Yd+lgA^v+wST=6T1O27Jwqx;x&7HV63efnlGTseyd%`ay8Px3!~oXQo#1 z#y=`XwSC1Jsy^R*Wmdsu({H6d5_mRhO|<%Cy$Sd}QCDX#X_0Lq`|wQZ?iKLG(-v}a zl0$24@wsN?q^xbfnWX!%sJ~5G^hG53m-e>)-2Aa2&9e3R2vLt~duP9Wj%Nd6;~PHqc@rZY=C2a}w0Mo=GIwgG>bBI@p1JP@IF_Ee z!T0Lx+Mzz`Ag6&tSl}DmrfHIjB~ZsD&Ry^_I9iDQe%4qrGQLM|7Bsddo`^RO>W})H zYHKf7S=8Ua*^2sG1Mo@=@gc8^GiIyXUtsoyem@q!N4Fj0WKS7;zu22fe1O3A_z&Wa zejFUu-)iSEYe@yp9`T1njsm`cb9I^PR3htdsQXaUD|LY8L$qy7{&hRKR&j2@rWy1l zngb`j59gk4nRv7PAid>qYt8GFA}KDukeBMK0Q+aWfU>z|o&!uUXtd0F;O zk%Qs;zo%K*yUsHPcyEEX)5Zli_YM3G)R2&0>~!K~^8UX%cgDV@NZ_AjuLNqW+FqR) zUha$m`+6TIa7Cj2)^2nI=)WOvg8oAA49BmY`>S>*OAM#h_nnj}4(ZSW&!8!z60&a& zM88Hg;322DrBkwxW9xIse^kM__i!)7XTZi8fAn4ZUtehXB1h_9rwD!PitlRsZ(?}< zqft)w(qaz+hN+b&`}Vjv#wY??Mc$;{rM3N+HMIg~$pe)UbK%YgO&@ZnP~S@J({f?2 zFQ&y@v~B!a{jECsAb)lu4Rp}qzFj(@M)1}iOI95-{l@T?*q$ec1?kgLK*O|z?Oeuuqoo2if=mzZPTDaZ>_ z_C{M#ANk=@LmT+$w7rk-0Xe*h#aQnbT)n{fShI>tCRanV(1B(iKpPi$vOh4#FXTa& zvjooQ)XB4`zj;LcEuq7jj>bd1kOvoYz&YO@u`95GeT&7R-qzu1@%gB~q22<#WA5Dn z$v;e5fpw?ak~0N;^iKAu@qQ5>dIJ2DbsSRt4IXGnCvNM|yQ6MP-dpO>NwfC5^Hzn# zbsPOdB5~lzqq?(KY>$g;e_CIY2J+rA&n5Y>=PaAx39WoEj@SmF2Zx+Fd3E%0xpq!x zWne!zg|!na?jO9vA%@1?Wwu*7manffOuDg5eeuW5TjTr0;!aUK_T10u$kRT-`|&e} zuCFuLrUDZ{3;G;f)SQ^)n0HkBtzgUU5QO z#KU+n?1Z`VnN^_vaiuZIZMutcnRxuUyDslD-$e=JK`iJpJsgkI_k>@`n1GPP&DI~rHY#R#> zL2?EmX2t#WZ5R6{&@YO7g$3W7^*7x%Ri=JzuKjzA?ZEpxE0eDV{}!00V5}$de(APY zJJ7~uAH4O=!+54Qos3a<$N8$GO>7PwM=s-Ek6)1o!zx7<->PZ)4Xu;@q+SN24##jk8xj-%v{` zaNgfD9~i487&{c$1gmG_rjpcvL|tbv`T+~|y#%(6<)(ESi~8Hd+dn&~ZPowCVKeXT zqOL(4fco8Fn<}$@HgIQwrYVhlyRRO4IR{u(Ex`@?+JWs18UAj@y;tZ&lYfpn;@ks> zO;P)C)py2y2RIEAaM6}V9jXaVfMdlIB2hClQv;@3pPl;J!MMQ+?yll&K};kx;LFZU zHYVmCi)5{ydsWeVGnHm-sz>ZldI&v9_OLGaVT0k{@jpfsd+SIfc_xZ%p;`LL%y9eO zw+)X*&yE=1p?c(vX_jzkp&4AEF%jgMQEf#%OJ)vkeBNQ?4~RYg&_!G;xX!RgmPc&6 zOnYav&6M5Xpkn_axnYkT-6C)Px(c|RyCQG%75oQ%k>dT*_K?hXNo|>=-UaaUmyUyb zI@qYo%i5mM4Gq|$hK-yW>!iTUFy|OUE|EWbHH?B*2Ji~!Q{nEBjA+HAXH_g;~Wgp_rS7B!A1~Xql{4)B=Fm8P4V0#H* z#L}@>#v;dE0eV6_pBb<3#D0^H`r9tN2i4YIt`s;AJHa*y^{no&FT=VPY&WX5)ME;a zi+3nFVA}=vf$v~<2LHo3&z=|ZPf5uA2ga?1_`DY0Ybt7AwSWQJf&cN23Y?9!!6iAq z3fK;|Hv^a3J)Duz$g|tSIdj)83lg}P*{6-$l; zmz2KzHQQu7+j!)J3o+;Bu7F1A&WjC(F;~rtr-SvH^}78LQf6$@F>iA5?Wvf;m?in z4pH|a|46|0s7!1N^J)ge5zM0;u`yUL>+omJV=U&OemC-hYJxD&LEM5` zf2;ADZIDuS+H&+R{)e&I@8WWf&zpw3c@W0scL$GWVB8ReI2dYp6H83)Qu3p#Jf5fV zo>`mJ=MbT=CzAO(#GaUQCvd9V78p;~e39$HyU}fjD%3vyecEXJ{A1wRdd5(n7QB}5 zr%9;SeSxuc+cipIxsx_Px$${M+(G&#tOJpxd5Qu#ZzaF$z37cKjPV zF$<$}BJJd|7d_nixTwFOkHCh!z39p9RPs&x!Igj6M(1qBUGXzJ>l#IKh<4pyGswz* zI%sx_UVQSA5GTZXLxs65FfVNmsJ~Imnf)(|b_UzX&)0kRE-UeA_}D@(E?|pzg1kF8 zf33I=SlL_Mse3;w=hc4GXSV8%F5~Rb#)VH2JN&^%C9QMj4Y95&b;>#cI+XbLR^o3X zc8u3-RZdBv1Dx)0lLs#J)CrtBbCKif;Jv@-K)e?aW_8?z_T;O+lTrmfej0t_A9-_E zNb!=?5wYw8&*fUF@!*=m`NlbL+?UX__{AaltAgwCrYF7Y9*p}KxUvqO^p;EG?u_gj zupMj<7q}UNp(obrN@xr0M4rGPi@Mh(hi~Bn>d~v?+RF{(8H=?&1!vnkZt2x*)ZY+) z6ORK9E5`4-Eqg54gDA9N9c^4v^)cX|MBXhA__wfT#L*z9ppMJ@Jg`dWx#it=BRQU9 zg+{y|IGBaCW2KU_5zFbeL4to$jaNfOUZ3}#V@KD3Ypx=6q`D#hpxZ_W{M-Gt#A9z|*{Y|WK@Xp>z zx$NK`z?_N7S$|pcW7d*#Wz^dQ-)rILaroU69JueH-)cMNG>*RZn(ayX`;i|2MM6I11k({&8TNaoj-8KYw+;xbJuS9)# zK28U*gd>?Q< z>|+zPbZT<3-;{m*sQsWfAG+UxaStiPo6^UKe`7B#&p%-DME#9e-y+*r3Vn#ZuIu|1 zC#S8ATB(hHiMNfaTr+Cp^xqMe=<~G*eu`y1=UKof0RAENPVN^u7T)Xsn{zPWZ>+!N z|1v`4VWyr~YN20#RKsOKKaJ(e{c%>rbw#$w_fe0gL%~=xb=FxkK%c(I?Xwo2*{8C0 zb|-{4nD{;R&F`J)Kl7$${FqSnt6j*$6~~?n4(8_t-pjF%b-zF!=4b5XeyrPb@Busf zpgUwO+5#WSbxUc8`|_tyuhhS zKIBq+mL4?MeKVYXta6Op#Qu>M z>+hK8BbP96Yj|GN-BTOtz6skP+3($hJoa5Ydn-5bfD1pWhPC??emWaI!Cq|jJ>b7G zxlr>T6<|-hfcPwMEH&X_YWNK%3B zZh9%Ph(&i|>_ghQN!(Yiyx>k(a4Jo}o`Ad=bb9jU z-?6D@e>;3r+-U-HI4Kw2y=^7O5_?*X9UURFzvFt&8uT$KZu-Z<39b!p=|A~r9O3{52@8OX0b?Db7 zVBkc*FLRyLqXI80FgFJ9grw@e3ENi+`t3~QlO%o>cskpOltw~7an@76(19$Puf^4F zS8C+^J--SrAM^uRtG?OO1YQ?2?>SF8TLS(@KOSWM!Pq~ps)_Xl-jnY+c2koYwY!;S z@=689g&*&^@H_(VB9d4_wLPVgPd({C?%a!>Wb~vT!QE6J z_ZH3*U|zG=c>JxUgv7fsYW?kbvM220T?t7?wjigg+MZd}9P#vCtn<{^ypHe1kq48# z71Fx0vFy)L``1<5)r0z?HeStveigUBLuKETDp3iApWi}m<*tjE4BW5va~_wMg-%s} zv^6;D3Ou3qn{h{0xUmLqDdf_-d~TY)@4)sDbme};&w%?_xD0r=*}nWf8?Xj|q2GQd z7CKt`UIN=78MqhNwnWcPe>e0lz2q4npNEv4?IwSc{%rU!^K!_2RL1(Rf;eDpEOkiL z9x;;(I&}K}fN|ePU)$O!kyjG^FYmj-Ne2!q*42T>DA=gQ_N;v^klB~~e0_WP@k#78 z^<36=HJxP zQ7w;eM6J9lG%;!le)qt*@Z;(qb~WML6FEd^Ra%)p8uGs{&G0|#nAKDCa}(oQTuYzM zjU=BE`6|gH-T3l^$QS7oP2QLSGjwuvKZflH7qn0!PyVx4{5{^lR(8-BkD_$Mza#GH8sw9@Kt z>bQ4OvJqFO@Y}egbFICXU2lSaaxZZ1Cp}?Ruf!AAs*n4)c@>lRy614N zCLoU8=_)nWh~L9J=3|%Cc9P~pYW?lv+|sB;q=8R)EPNvwnh|#Nmi&&fTLNPa-VN=Y zF&{-8EMm@x9bg_G{Kvq4RL8mpM;Pzv0oxhiS`CUKA6-zF8Hjsd2wia8IpJ^gsY;p; ziTTRFI@tdBYd$o*cHlgG#CZ$6Ht^lB|4j1>+6F7cT>qb`>yD42`o2RC0b*#Ogesv( zCuM6k*`3+VZh9d!36ihU6jV?^48^6l5Rl#t9Tg!|gCK_9A<}!1u2d<~l%lU42Q@NbF~z7Txh+Y-KR6{GFdiNNZNcsCz7y#LFNB{#v4IW>Wypl4^7$u0Eb z`W)5nZ^Y{6L6du&9s8;KdW%sB!!Hd0h64Pw^)#^_&@-*C2gHaK9OezZqD61q`Gc_` z)dwUFu5tuxV>9l1xI3Z8O`q@RzlJ(^mzP*0%{nVXP8{M0>}BZvs8_?K>M)6ShV!`4 zL5>-b|H!QAB3JUa!v?b^2=5i#eV%u;m`laqyqN*moBi-_jewzCbx|KMWs(u^XB)m5 z?sV$6z_{u1*A2cD9B`s1T*`G0`0=*A zu6;Y4NCDpk`saUP|9oP}0fV);BoSPd6~IY-G+JtX!c}mlah(5yU5Q`z`W<=gsjl21 z$Kx)vdaSQW*bWuClR_`ymnrVd)RS?jr-I+0M{QkM4>c|IIdJX7Odp6klt0ya;WO<$ z>@&rE9T@VDF4Q?_=R7egU?|YNQZ<1xz%v~f156V>7KpfJCi>xq>FW%(>2mg{P1d9T zw8dV4*bDiSO@Y@ftSOLC?}FL|eUE}|j?CU{#x2-$@a+>6=47~*kekO|$ef@0&X@-u zxVyYX)l7}YSiKzNRAFvet&brmhi)6h+`E~5u!woF4rfL4uD7_$X!M0Vz#hoEgl?Oy z;M_C*et4MBWM!QS>%=0r_B220^^vG;E3$p5lw9OAgs+-yJa_sac^b^s^6Lto2J)`3 z)$dDMm^0y!(Jd3-w5q4C2ViwmnMcMwu$s$0^;rDUv8z+bt3mD)@|$n_p}c-( z0jnzuj;)P&mjyEG4bBxilNfl%hS;`&@PTf`ddVuZMsOMt6?|6KNncyEa$5Dqx z)so!iL`{Oe9`ND{9sK^l*fDl-MY{W*8~JjJstx`b;>OeZH->G93>_%yL*hGq5B$yR zWGx_bC_>-dmro@|l`gZ60>mQF2SdFAVz8TC2AGH^FfS~)fYt8?+Z>r%?z}It2ZFI) z-aCtoIBP7-e+rz*XIm(jTwKWr{VMaNe*Td^JgOA^@v`aA+{!dlYnwV}`nTYj#hM{} zUn4kjEEhMHv{9q>Y^wm%#n}syPy9o>4{^TP%1^;B!j!`!Bf!aRJauEbd2*8@VLjeI z9D#mv^iv(v?ky_*HvU^zXzauxVdXFG4=?`j48xiqLqi7|_K1GDhM~3ecqc;O?NVFC zd&(G_Q)PN;&xBm`zm;%Eh$D!3reEz;mihqPl)H@hSK`J1KY11z?*(@?8f)p87TZ%#Er*(=Cax9o%&@kLJ+0(``QpW7 z?1?q?y@d0X$rXXxakJoe1FskP*io-$s`>Hv%q{C{2ev`Vt)FTbW_3HxxZ4sk>rLd* zw0;qhQ4b8PRS$Y~P+vQ+%~sGy7vAZtH-h^Od$+k3K3;Jl{NCKh2F60#nuP63CE?oC z(BL;C!cIj)v!8?KML<1s{nt)a@6=I$#DZ-KIA+u@PlZHNe!B2Pxx%f}Dy_!`H7?py54+l;b4z9|hA`T>1 zqtG!cxbL&AvN}*^K9-m*a{ww|r3cTRjd*Ppa6KdTK7HKU;GbkoxfTEZ8vjiOUWA?- zDIRl}1sPlerTF(+Ebc4RTje()2QE1=RV+0ZbJA^VDc@I4v5|X@ z8Zf7q6xgZNgf#=+y2}{5`dhYUg`CdJ8}jb%xoWX9#z0LGa7^YHCSV@=xLFEwnY`z- z?tvP3thr_FJpD6c@&vp~&DOg@Vc!_zn}Jv6+gP6lo$yF%g)_$>a!9(ZbW9;vG;)T5 zvuJ#Ku)_@0*yrK5j`Tbr}(ZTc?j5Eig3HBMYn>eE`VigcaF>e==s+Q05w} z7YFBC$!+vaVtXrVdlBCYe9t#7@VB#Br7f&kUSh9nmD1+%Z&*rx+26Xe!gDJ*E_}AY z-~N5E$sAbH!@Hs2J3)UA@`(Xf#8B3I#~&fK)aHx$vAJ`snYGXTt`8R+m5YZq7d({6 zxmZ=L0ooEL+k-X0`zrLD7_UrQf^%nzg1$2kxdLh|t%Wm7wY{2k0pF%Ha>TokPfzv~ z+&%)^R7K!x(8WcqC30=5t%JE#-qK5o-y!*<+>2Z14vd^}k%>ev9 z1@rh^mi!jPNH>4LT^}`^eOtsxH=<*!pDB)ep+4@H821L&)CxN}2UsJe-sMa#DZGv+ z_tY-@9o3fkKKg{n^LrD)d6n%J&&oVJ?un=u#^2Fx_ko8s2>ye*J!(hbZ>xH3@L_0Z zL01^DoNilECij}k9Sc1T)N!#7H!SQI><@KZ(xHAhk9FH{(f_uzZx`Tz$#@@<0-h=O z{BHc-f6%t6j(dP^+e=1X8-1HE1jY^CYJ8UhpM4r zsRi0`&$P7SNePvP(xf#h?e&TPaF^&ZOjr;Ku>_q`@*=8uzmicpC^+@FGkzWaj0b%+A*rmiE;Z)i1Gse4moo8?Su zHd^FiuE(!5zxuPOg}pW8Ghp6_Tw^|4(1=@eH`mYd-Rx(wK&2hZ3@+W6Sn(QJqhZ46nq(j z`pVezFScRL{EmHVs>VMlzA!0e`EHcgYz1mUbQ!C+h`nfC1ocECbssxWBh|QSTIerSQEq7#p~| zy3SxbQx5t4Ao^RV9dH2uR@+H!HRr@t$PFFE?_bdU4Yql})OzDyHx19jJv&1|E&%x{ z6ZpDh%p>A0+hZ~`Ke3i1V0E8ioQdp>fo}I^k&8ckXdHfDe>O>()Odu2^)sy5X5TIQ z$`HHb%q@jIk#Ul48>}>Uma!0*7%=S&-qj{M>QXG*S1tt~WoOKz_*=Fa3i(p*xhGgZ zTQXd5K6oqmSw_71N%XQ3fAEb9KVDPmLlb?BevH}x+x~BppzCxLIvfom*@Nq|g&zY$ zH@5BgJ@^}66l;OnsM-nZL>?6 zsq~+?oL|2~@59_^sbfG4bR9MPO|?b-5tw^roW&6Wf6MD&NFbN0KWke9>r;tqjWuV}t`a_1wW>FFZ&lP))h#UHB;m5B1PmRFA%{VV{ zCRdH5UsHpG`_KHa#rheG`My!ghktA|G~8fn+xbs3>r}|UGw+)pz(;Af)cJ3&?#Hk- zL&tHEfqZR^+kI=Iu0!v*Zw=&UqMizB-E=>OZI-jvimHZITTej0Z5ncv@uqQ6{)W5r zwu7VVqLI9^zWKtBD}L20Lh$vB|JVQw-B9jI*N8W3k3^JQJk{X$=jX^r@jWD>R;?sr zC8vY+9^T>SVpWZsZO+^^<>S{(_fJ{yPx163Tc_P~^-o~f&t1~|Oz1u~1O9eL@xH$} z7X57+{-%!G&$bxjCSa{bIl&e0kv^yfpTQcK@`pR{+@p9?=}|b#RonbJ6$Sn#^3{1^ z&`kUqyb{3R^RBqO@gKz&ESaap)zp>qI>_npd8Gz8lTSi>uD+Y~wUYM*a@ED$QtVmn zJQjGC;Gbj;m0A_hr*M`p9*_0)5!NE^yB%k1K1ACPnZ3^Jb0sD`caB#khxq9w&#}Jj z@a+kj579PVW*rCDHhPm_`81H4c=GoRHHEeC^|Lr}ne6 zf1A8+J$e|h&g*GDB<3rV6QNAk*#iG%Jt^;$xiwp1ol{#5`=a*Fcz>sVfnQv3HLzC9 z)oO{TiRO7FY7Kn0*$Oxj%v(16&%(YF=3)jv?Po#UXJu^}HI$3SeW{?91NG~T&Ey^8 zoew@jPFKN6ays>-wtf?#jmta#Z3p>zQxngnP+N(8HsIOtaIe0Z)<)Z_6Hy;!#e3`s zE#FD8{g>ZK+BvaGTf|_p)GOM}{s3Sj+Wjptl-$Mwe={t1-`+T$9K_%@ZjPQNaQC(A z5KC@LZN8zNs{zp5{Tw|^<6PiDVXtJO+V^`9{cquJ>Gn`<|4oGLF!21Fu$K)4|74Q=>JyCrQ&a+&eT9GP#ynf z!Slazv0r!6tR&o9P9O%2*4G2h`EzbBK{RNmAd1KkLqT3eA2XoH}4b4@x-pAM@9n6oiFM!VoT><>Q zZX2ZhZ~MO{{2S{GkrUk$%{%+%%ZseR6*9pI?62*Ue700Q zcHpZJ_}jR9^V1&ePDCDD%r}hKEja`W%q8M#z1t;u=eP;L-!dGMd0p(>4@aa7`EGSP z-Imy`&{`N$$&+vWJE2y^GgyN-7r_ykv*$wM2fHSu>9)jfsY53fUUPZ-g~iS6b2RaI z;vZ2`;8IsX(4)AQSN!!o3h~ZR2k+97cL(wa3*6GM8*#`*+axb?5H0I^&@ZRO1frkJ z5jS`w-fMAuAK>=T$N--@^0c^Twm#q@ZluqF`wn>-RSow63j2S_yFi`@!Ko|F)b8CJ zH(eh8U>EeddgJ>fVeOoBB3`thj{$oSYW(aLeUE}|4mh3zk*Dv>JQ((k|0#V#QY@@B zS96xX=<5u&g)({`EaX?ZQTQR&tkgyr=S(E9wLw;kIa_hOMGtlkd zUsJ)$0X+7i6LkY|=bqQp*F*T=D*g`Cu3|3%_ONN4r_#bFi8$|&tC%HA7v{N<-_h3t zY_lBXretrXWdG4sU~L~q{wwPHaBTE(>iZ57{e=$r3BLbwjEx-qK9BoUzaf^S52xVg z9N=$n^luE?5P4apIu_p9ChtHF%RAeN8Y09yH_-1i5EoWk39B_yU4MHKB4!+y6FqaKEBj(HL>V{26tIkSq!eW}>G^bWlrJTq*-$$R1bN31h6o1Gd8 z9(~a-*T7=Y;~nrs0&fQv?H%7L7JNFXrS4Dfi24ioN088e3raht?>pdr|M8Tfx`!20Xb_ z;)r$scj7s4VTTK2>*pH=FLdBN3LQ1xxuuv9?iPnzur~_1-*qx_rFy&r+Yp%?E{I=% z?J%z|w?w9Lkt_Z=&PeQE>dZBVFJOw9CoTf|{Pvs8UHuAMQ# zGZ0r_u9&P3F(2qF2tN6KA}^I&6E=r-jhY(vqUN6PH*1p&(25H+|J@?2#r84b!~@lF ziBWmvDy3ecrlAz}#A4WQ7deRoG8dup58l?^nTo$b8x^^`i@5(x#2)mFdIGptOhqhu zhkK;vo3z~rExv3^*sisaEBBPcSj`(55%CCl>b= z^VLlT3pw#u{*Yp>IH84>@58GQ{ci!l-=giK|Ehr=lb!Gpa-H|WcSUcwG!J)G^pr`e ztHf2mR}rWmW6F8=*qEYpa9<+byVIj-m=Y*?=vpJrX{a&o0f9ZP0qijF0$cEem^7<7q zZZijCPX2H8TZ8}0H*OsToM56BF=O&#jJ?4=vLFugUygZP)8?Vi!K^^j33NOyV$?o7k`KSZ@O)kLLBN%{h_v(!#;_6{e5aQ;wsz9JrhO04bOI;E%3LU zO)qhujD()CjT{)PVI&6^Idc%>V|;zw(;Qc5tdY0mo3p>#*k{MuVf2(@E?3|~x@{RJ zbegQ2S{x9){tGHLw4pyIlC=TU(^2s^&DLvoGMCAk=EN#29qwxCFI!!9Wn ziSt0S#rG~&H2}8DEbNoH*L10s`zvyg*00W&iewLu&ldO_bpxIqZ40iwLzdBBnXS~~ z1cwkcAFb%oDY6Cr*026#^LuNmT6kBWmKJOG!JUNOxo|6EI(1y~PaeUY4Cj-*zDs() zx2It1H*t~|xHx)S0(;Jn?=`Ok&MeNC{FB#Fd;0>h%|<74-UU6E;fzX#Kb&)Wr8e;) z@8l!brrJ_RSLAKISf^utabI~p8n!QG=|qg%zI$R^{{_u`w%|)aF5ZprI1Ihqh>MTT zL7u>loI>ju^ykE)uP(l5+^?{MeWWOB(F$8U#r+8@YI1lW<^CVvok zE6ZY^U99;$$CZ>tqiP5Z#Mj^V!x@zmjr%WhEhlgmc7o5J)BKpW!Ai9gKU*2o>i8RK z#v-w22pm(@z0u!8hO+!*pjG*@w$NInw$G6rbt2hkPmUyTg=v0_agpz?mpg+&DlK*(FZ!uN`Gf9qx5;PNY>k^`4ZjsjY1zHx2520 zg+?6fU7(e0W&IgBm5Sb(8U3bjOr^q>3oQ_8(=bO!jvL^2)+KlD`uvUgz8ak-K?l2u zIeOnZGkSb1#MOR_sZ@l+>)!(TzAaPBno55*P4GoCk2o!6i#WT1d6-w!Z;HE~bu})&&HO~6g__rUSYwi%eE7a3@*5nZ8p{_IfF>1er#=xCM zj}SK;uv3qo`X$s`6`CMETj;-`hpl7#xz_g%P63~-G5X+w8kT>*+i4wM(q%($gLcLO zCxah5L%tT=EYy?dJlPl1@y#vhDHm?#LkwP9hIchyJF%yjUiSJ-|J6KKYf3IZ7L_YtcxNiGc*c-9bDJXW7y7=^BdHPq>j4U?`Cy!EixZ0N#M}1&(ik?*uszR zuSLD|cAS$A_+gepUqyThfAHda?$!4P*d7zTJJ23NyfFsfa60cXf;+9BZ5`%uU*8{K zE1{3$H_PPfU$B-M`^jua@rB{&l}od+x41`-m%7ixHdsO5HTrh8MIQaqZa_%V^ka~Z;yX)h11>Ur8?7usn0Z|bTF^ok5z zrTGwTLuB@%B8Q5Yb~e`JeB3{K<9~B~byB2<^E4l#ZMsa1jQNa-eagT#!NEKWa!ZIM zKg1dB)qIGyIdb{DcSQdiHIQxo)$G(IfbN+1J#YnSJ|yNVW9T9CDbGHw(oWz{=Vy8Rwtt_%Goi@V4%<}G|28e}T2ipZGg?c4BlrAZBOMK z3T5w{2WI92`97F0A!fnvOTC)8bH3Hr18jp7^3-kKu|@C&bInG(f{`Qt`5n$*(0%b za4*Q-92-+>Ov=P@Yq9QBTk_tD{x`(@XD+-*n4WVMz4jKnwBdq##NmgDDlfKb%XkIr z7kBQ*F1vqp+<#BcB=Sxx6>f4B%6{?ToonlRRG7{G8?o<5-s6fi;s>`k<7phe8Sppq zQ5rl~s-Mte0u_HtteTD7X&_?ivEZv1?ja9@=))?!hkH(aeUHK!5F+YGvDf(4)sS~) z!N=_Q`3UfrHTpV(ZMw|5ZN?@&dUV5CeOJ_5pFPq6vG6ik0xqDx2dZ!E@RO+z^#;Zyk)Wa~vs_Z^c?tx3<1KXEMh`EoU z{)}IRrg7!K$`kjlbnQKa*B#vqYv)gg^xEiNk-Q_R_m|FggR4X__KZ2~ zQ&-BZC-L_Rj-m>~s}89}ov_d@FnTr2@&t8a90n_!bWK7BUYgYNvqx@IFsX zuduL{*e|Q;>j4;5h}>XwsD+q#TK-Lpy}?ONZ1SIonkVl@{TstJUFJQ77>e4%6sqvP zaQj&$z zL&{#E$;G_jxA$J-IfTE#R_$S8u7I3)?>{x$zFV*(qRY`3)B#?#Fi%uuo2{Ij)+Bs+ zn~f3Fs$Tg+p}GFda^d78#o1)4(5I?zJ#g)y_bv45>DbR!8hN=&?!tQCr~FX3Ti15Rcecyqu+zhOtp3Q3l*Cp1{PWhoh9}|1Cd5)nzP+w=T&7lsdiMlK`O18&d zGsnUDvdlGkX2uz6FPB&koG-XbhZ-x-&oU!!CpTkskIwT9#D2dBdS-n&tSQFUZP70T zZc3}YoVa`QY_697T?Be$jmTkJsD)N!o2`JiH2kYWKLVedU}U}d>xw1AH!Z0w_$arx zTd2j#?ALp#bco$6xJrT1h1YxVg@JsO4U5Hw-M_OiJXe{732+Vq&ys-$pq{rn_S>r1 ze}8du&t!jtB=v#+u!l*v%@(m7>!MCC$%VfJ2z@GY96>V|`)Nn*ovHZSn)l~`4`d(m zDfO`b#yBu%XtB=2eP{uE6S1pr+#uzR-%c~~Al3^pBf(MLKAJT;j558OV@rQOyu1ExL*wF zcpBqOf*S#U8~s;h;6bgScUT5@-=$dh%P~is$GB4o?91K@Ye%(B%MX%?V^gQM%Ibfx zzYai-Cmptv@ch}Z16QPP++e{eNzDbm0~M>aCFVOI}Qpi=O08{(OXDhfd(2IroAo%_r zj8}-Byv=yV?fAY8ozxlD=O9U$avQ%su>B3TXJLCAy5bPN@FpuVM*?Q&W^Fn|z zO+?;=we81{Zx6@2Anr98&v(c79*}>KOSV74{U76gjOUvMtnLEh#a#Rz?)Q8??LA1+ zI%w037WH{mR#(P*i^RQUBGzXZeh;`8I1!6%PYC`=k=p?0rG;)x(4+Cc-{+W-l7vdQ-Ti|cjwzsX|2!httGJ!+0 z|CqhqEB74KFl>F?)6kg8vJ$_h#?*uTJ8kUyL2U`bkOooAE&9d<*2(*Ruhqu^8H|f; z|6Ma%jNd!p@V*#1`{FeG9ea^2@Hb*!(2B9LrixlL)LZMj_T5NoOi?4xH!kouVr0bG z*;BiQiHiikJYd(?v!#? zx+S3(@SiN*mEHA1M#Tm8tmU%>4H?#w9p7;b^s1)BkV}P}^}qmQyxXj?S4P}L%%#qO zdd-aOMZG$-2^fRp?|_fO<6@6_fn0z&skY4bQGZa44X`Jn?vwkEm_NA0y-_a_uj{t^ zpnnmJzB=%1QHv4Wb>OW;tiBsMFYRNbv)d8N>9!^1rU*6K3kkk!LcJO?C&4(hdUDInTq`J=ZjqE+NqIF^UfXMoFpNO2lZ(P*dlizN8$F71KmKwRNOX^i> zjMy`Jy-e)^`M=A8e7k7{^pSp18XLkqxB+hx(%;c8$WX}7}XN!FtbsU%J1c7JC5j`IU%up(`7>)I(hWmD}k9fxk(u{C&3c zW9pYncI4^Pe{mOt?2aR^?BPS(pnWx4=soH0fq8qirm?mnt(+Dkof;X-`jH+zB;;g% za!M;*x^E(1Qc?!z0bx1d=u-`iQg63W;vOM zuaS{t+!Nei*thIm&PeR;dH+HaI4E%!(cT&S`1jaW5&!Gm!2k_MV+T`Z)7jDChIfut zHKL}**f*!ENwY=%jQjG>v^HNn!uG|w*`DkpVZ(l|}G<=M^r8Tzw5 zeSgeJQ2KqBEOgtDiys#`F>zp@$*H<6abwneu?L(r#MImXzrI~+9_#L9S(z|=^fcsj z#e7jiABLFzXSguA^4a-qI`wnbNqF$~I&Xi2#|L3~M$JzOKBc(hN(u;(UYa!s7$li-&geSg5Xz1SZM{+hN}(+!aSo#Em= zQSFE81+AkJ`u+ghnSuwUeDU7!WAsmeE04UZjoYvv$By$DJRjOSqaV*K`x`XGPhig2 zOQmrNdcC3X@iX=*^e2h_SoQt#JRYzw(W>grOv5}D%e?m?RzXhgAbv()o^M=98L;m# z^dUxrFJ%MH)D?~$mz);Vnc=?qFXk1X?+=)7uyQWDt%Y?td0*T{j(Vd#HQ|z(eC^n` z5ZBbx_XpT!D8!S=nfdDAXQDTWTv_ZLgD;xcERgD|kkBX?h>_tS!uuTTU z3zz`sKt9I+_-0FSZc0@S#{$DnlE9;rH?mZ`Yvn)59oL<0TV$Jr`_E~_nt!{zLtX3 zZWi}maIQ49v)7XI5PE2mNAn9YU-{Ox_jykO2lPhjdq-0$V`=JinMosX^J0jq7>icCLoV}avJ{c(Z&)K(4Z6DTM(yw^d7TLa3@ zMBsXtxADiZrk{`N>j9c>fez%ikrSQo;ytP9*vW}1rVMO$X_C9%R}=O15PCJs>tOAl zR>x_R(!v1^F$=HZmH>=$> zu-3Zh>jAdl@&ey4Y6)=nsD^(VqCk%ibrpXBf2)S|&{W$eRs0RLb{59_DyQ#K;D>oa z--mrVI2ZNxfN_HqYP?+h;Fzd;A{G|f|E{^tt|R2*KyCyvtnb;fmC!QtjaOR#Zl*3a zdpE%aXJX$C`!H5^IN)0k%;AOq7>E5O$VB{xb+n9WKuoo*1O}6x8a7Y4w``95}E{J`6 za(qhtn;Y@Fx^1qCzoD1$^)@MS|AF%jx#0u4XPxE3yp~HL_BZ;xXRy z@o^Kryq1V}7%lZZ=%VIpoA27_dlcs2b>w}q5^D!}wak2XUZoQ8^ifILtVqvNJ*X?t zVgeO^OI|Y_F*xdzcvqR8;~}RI&wnYiT#UC>ly+yJZHUaentrwsct&+yMZLQm`SlE} zGpyl3hxK&^+jQ{7U$Zh-aQF~%e3`{uJdcqR!&)l9Ivc9*QLxRSwi5V6$KdR4j=R7( z<(HO2z#rHfKM%oLdabWB*cQqMs)bty&3~7@8W?-N16ZkGuQ?xS$*Qo z_a2^xzVj=@Cx@bWwgrUl2WN#DV@KjS^ly=^bUC`mxVhFEGj$ip@kBkiPyYGQ%pB5> zN89Q94#s_{oEbC1aC*`)BQ?j5r!=t4_^rL*GR0YEW-YfiZn)YDj2sQ(rOVeVLn*S3 zioeZS>;WE|Y=5;lUAKjXJ@%+O0)NY@vt9JRP2SJ zgYLp&uk`f*+rbWM!i!q5lnXBQ(sh6R%F134si2BWx^z>HpS&xd9T9xtVr@i z^mi|@a8I8*XAi~>)z<@TLuAD1mNH$dqaG0$lKr@obrxlV>)`J6Grq$q{TstJUFJQd z&VR&EQ0EOUaqtM3$oogmx*k2o>E9T(IkJ1!R1^7z$@@cnky5$OfMe7q4;Q|%AJ&if z#+ zpO{!*jK8I?2iRsS4a4l=ZT|Or1U0m4Uw>+z^6tCgmG-}9AfGMp7vFl|+Nn8jdMJ4E z!}>)uh%hFAoA{A+8aO{8XzNvLf_Uo828SgG6 z(EXt4l9Z_A&HBCr?5ic-A@*3{Z$Ir-@wc$B$G9`}c8$N#E~)tM`}BPWeRZ?IKe-2S z$cL^$lj9P8?N&Q2xYYuD!!MP*{BPrz?X&Ca41IOw9Qy~>!8~dzxXZ_W^S_m)K14tAWb^ab)-*MYw^jLE#UHIAGV>|2rY#<<9_qdyzh4svor%UNh< z<*j!wtJ;-kKHh6_MT(oM$2$>RJB)piuTt+Az&6;|`uUkn=*wh2@qm72!8Tov4P0$z z-#j?6G4CvBv5hgIwiI|i;xP6cY44Y7Cos9dG}#bfRrxnJIH(7z+&o}b_ls&h`i-&-2`(>FcCQsaLK@49y-05z^16@MdMJ-A9s#D~q`FQ=W zSvwKFI2<^|YOGJ)_N8Kc_N|ea8|$se)de07Q4@HqZ8r<+oPllOJ;c|WyrTyC$r_-( z?xEN(*-tC_(Y-mqk-+EZbz|+Qwi%Oa0S^jBJogX!LyzG85RLs9b@AR&c>XNdF;>>c ztq+~H0Oal^U`HX~_pONk8;SMu32eVcF8`v>He+&2^t=6uo+$RIO~!vEQ18hYsWoi7 z0e^!|i*H;T@T;xJYyXY!kdM6lR~r5%!8RJU$c1aRz#3$7=y`PQc&r!uAqyvf6Lij(~>SySVF)#8~q&&$XC? z4KW<>CNKJkm|yhGVJ`3Uz`B~iHXZqp;lK}XVUK1m4EUS$#ap%;1pdaF6ymzXA-SKk z#~pYb=284D+f#yn5?pk^48OxX3xJ=71Ebi3dDMd~@i+BbP(R}}_&vyze>b%w{(Tr~ zl8fWLjKG|Dm*PBh+p@^-t+3sCbq90yL;O|4!F)E?h>9OB!PvTOJ%!j6Idq7NP2RE0 zu4*4|1-|wicZB+H*_xH6mP+KCj3ORD9t5so>MfE_QuH(V#?4aLkHel(>c6q4yTqW0 z$O|q-?7RZ`zm<4iZ4SWSzHac?TI0*pk!|MuU_(D_6na~*f1rjD+Q%wyoj%{w3U!j1 z+haU*=>C2i_bSv22wl3>?qb;gblWmc_L(97BQz=S?riTg2^Ji5%)wH_)n^O*jdeAj zpD|b&cT*pjdTYcFsLlA%H=QsaZCv1QpJvxaegDsv`9YCZ*2$sH&cc3ylShLi)jXp9 zY>S;0K0jq9hZecX$!&!Dq|mz|r!O_BeB%OtdvSiD8F3=|aN<_A zF7LCo`77ivfi3o0&x9D(=FXjiT6X5Y-!aEtNxXuXOPz!N>2Kf*$FWY>+YPOkN?&<| zZecz2ul(1@15G#l9o1Hnaz(v8c|asDxN8QDaI5%Snu}$hMC>@8$w%$X`M}jPXoqS=9_^jlY5Y&)!Je zcZlQ6mTyLf2u%9^kZ&-LVh-oTKFB8w#^1nw%UeU+A85M{oLgrjnX~&Pws|!2b9QJ0 zBbQJLKA(@VvoxQl?FpHFK>fF^{f~?M1auA&|58V!9&ER0eoWh93UOuP?s;GIqJ~T~ z))#v6UgNy_27df6?Dh8$tbCWV*LvpR6RcAyiuxYsR=q?o+)(TntU=&;pxb6B)gILr zdK%=DGi~>yx2dZKZx9u|4*rb6!RB zH9O7o0?e#sMc&>*?h@9ql4pYWz|+7Ans0L4ENA`g3r)Wtu$dV<)$W{ZA%_fga*9#`zo4PEyVdfn{n*;JN$Fawbbg=gY_n(BSsSR+a z0sd(}?gCekM{4$g?iZotmKHel{n?_PaP;^Kz|`_^cIUXH*D0QY?K6G08IB4s* zy@6+Re?uNYo%18^;Uip9Py^jJkpn4o06)ezM-ALGuAs5KH{ffj4V-|Rqqn9iWKD1hv z?ASlm^$XiR;HsPwiT-Xp5AZkK-v?f)rRlDn0sdcF_f6Q&mRXZVd|vQ{N_Hpp99U~d z4qxm6x^KdEo&4|F$(%(cL);Hf`3N^ryufTot2@hu!@Lyp++rN&n?fn`ia@@I#Eyi6$dk^sA(lL&Rbma>JIP;C* znL~Mxb^Ytez};0 zo)tUKLFROg)y5+itIi=T%!splgI$^u8{>Tu6W8mfp^5CLlE&4H>HA|q{KR4#aF5mJ z+aKdrM!o}_5V_@Jp+}Vv<9Q%3cf{uCnJ=h)J`R`+a&I`R zMs@Qb7o(r^uq_0RUWoO9_@dsr7{m~?p6gBhkDKVS~Q&_eylG9l-BB>NS~v($Cn zBQxuC*dwoU`03v`Ls71cH&X+n*rgG;7gvo2Z!&v$kk34%ab0S*IFHE%OK#WV0revp ztE2u?{LFkP>S=VJ#~k)4Yd6$3z54S9^ne5iE_m`$GLOjfoW1fz@8OL?u2$mg=s&O^ zPh>6e>TB^ca_5$R22lT4pRd`uZv9cg1zXr~yTIDFe!IocY4l+u`TzV5cGS;J%puEZ zjkX!e+%0GPp#M(b=VML%M}!)dg_bZ*{h}7N<#ay|<9ST(o!eJ+cDU;7rv1_=}n{OZ_L>sw-PzDa6NFtGSS51sQtqnhT4;^KUafgOBSsE1}V( z=lVB>tp|I8;vk-iKBFYd-B)QndVGd>1Q^-a(0FKfYI}7eaI&Sy)r>)X)Mj_Lp)&>k zCStj~UtN-+pN7AQXG4rw34EmAfI|?yaRH^`8imhH6#e`Kh`~}a+_~R=tL?vuq3oT6 zrajgIIJ^Bu;jZ^v9QD)Z&T+})-j>?S+WxEJZ&ho@BIaW6PhXdm`H81$_5s9Ef8f2Y zKtE)fwx`lIL~u(9O<`&-K?i{K5L~08MnxK-uLszsqyAxq72g!=rU%yHQz!Dyu>D=D zU+k~12iWF-N8k-OeEVUJ?_nOe{!MCK z?(F%OnK?nPC)$Sn!_>K4m}OJXnO4>&7TLa3(3cAi!KS80HJ6&%(=uY^U}J~!>rCAa z@6#|8F>V;K+pw@s@|6*N;#d6JG__O7FQKjEmZ=4p)^}Xm>{kstYU9FI!M=0AQLs+} zM`UvH{=(0(C-rr3zsj9FDdldJ{C2u6v0I_hjaVC;IEfC=#T22Za9i?}o)(bQq|>@I z-Imy`;3_TfkMRa}j4S!oy+r3k^p&74&;GatI8i3bCR>Ou$a$31%BTz|OCMLt&4f8b21hP~n47^z`b?arX$Z_J%S zOT#XCmx*Qt{{e(rteX( z&5_9=L>(5Cj^ds$lh`eAoU!3t}i^=1elMUJZH$z-q%S?1#hH#;Jaj%*+XCw&CR3653fSFL?%c^h*t&5&-?T z42J~%l&KwtCzl&O8~c!0XW^)A!X5?u4RspC->6ZUmY-yo&XjXk*_oEOHmH@p9>U=_ zm^;6N)itG>f5PCkf2N8U(OVhk-IlnP*IfE~2nQw!&CkEFm*C#B;;|>HRkI}2v*UR# z$kL#j?j}3S>+1owLmZVx+OZyvApU&r^4|F_uF|jNk;mU;7kb`{p6L4ya3|=$DZ8QJ z#k%@Wp)TT8`X)`&|*DYv;zopv-DZSpr8i1LYSj+!exYyR{ ztYqN5BzsXU>oMsAeLY|f*~+~3UD1#9cLd{|*L?#m+fP`+4JmHJlF472cHK+ytp~21 zjun@N-uU2tSgo|E2;9Yt{UVlx;w~flg`-*D#+51zMl6n|FVZ`tVq%j%oS8 z-%3_+lUw7$!=Lnh2i%Ws@D72$p$E~KSu=UY)k*EB-y&u9cRlLfHEBh)LVe$XuH0PcXiRc{Eg{64uxX8$L|}rh{*Y`jp4h zJnuamuAhal9pY$oeI#-|FSssaq%)`D$j`*QIQf_hN*~bAH{w~2zb2Lh&rAi3{S)?* zWA2{a2U|W#{1WfA7Bn%|>+ue3Lr@nq!$N)+(L3s`?wb7CVg7teA^I|p;cxw;?+>s| zm+7X(!g_Sq)#m8pAAZ+)G?Hb>r2?2L)`gv=XLu-6=OoDDq+&Bt42=Er*U z_(5MgoUhEfQQYZ?Cjl3p7M;}YfMH5bSBQ}dX z9?quT7St%|YX`R3%B)S(!!w3ljkp%LMXbe+mz#&b(^!e%9UFOREml_h-v&+h3p?BT zV%UYo!4d8q%M72K`Ze@I$mp;Y!_S4!Z@VA(8`rOjzeV<_7rF3(8~%d63vdSFoggN7 ziFvLB{uZz8zbgLLX6@JD0BV4m<5PHNQ3~rPiBSkH5${~>ovHX6bL+7SB=VnQtWl1a z{>Mb0J8&TUd|i8Iv<*_QCz|tY>#gkreiCscv1{sVaQ|J}w*vl_Z@vn6=*;A~q7E#2 znW9ktZyB-ss`bdYG}cbQmv!5h3b9J^;PVbez0LRA|0uL-m|vit4e}0n57d9FE3^J5 zzs^bEZ=cvRZ=~Qn!u`-Y8qbu8b%Q*bW_vY@XGfsD?&$Nd{|Wz9#eE|I&jYSQ@Be_Q zedV)7pB%8GlBnCehCRD1a5C24TVacuBrnFry{2f~a9~~MfFs?)^Rl+~AZlrXVA}-w zXYkfsL7$Fqz6yHS)`D~KEXJD$TLs*e_wakq5P!D9m`#1QTu1}6d9K79MiaZk ze4t-mPyzT`!?$ev$OEQzL@&&Dh))({+{Ec^tqB;Da+}iU5vC)ah)(Oi6Hy^dX8CO$Np1fN{ zwx<=G>!Lpm{Yk*kj@bIgOpj!5-Tr}5Q7?y)t6iT%87KAJaHq1;hUaj*?M))7VYl=6 zk2ch&z~3}m;BVA@iYjHd&b)iZ%Kl&ULI|EqVn zk_VOx?4jk9T*Qz1xQm^q|G8>DUp0%m8ltZT`4IfB!%A(cZ^ph`WDERlK=cYTv|GXH zvqWgbkt2b)0QzOEti4vpO@L1PZG4-%c!v+2&`R}y^91-C{C!|$kN3p?;(H8ShWr`l zkbv6TH+E5{NNnA6pY@eEqv93mvu*C&!)4;7kp4bfYSwTKh+4DsaqN$SZ84l(W;eN& z>+ODpI7%J2?r1l#uhy8yx6pqZ6(g1D2L8!(+}%tu;Gl?YeSsVls_nBTBfu$n1io1p z`LaI1x_TqVD!~8l=z^xM$KK=@{2kSn`99VVhuL}(v3HN~94!{97`pK-pp)F!R?2jc~ z`rjtaYKb|21)JW`hs?&lS`K?u3+!j8OZM6Jk*T+sGU+tVlC!X>E9ZUThdi1SzNTQW zG-&${ah%yQYeZOg*KF)S;D+xIYeYVQeYjn)r!~>`656gK&LHqN`rFm4Y&(6=|8!-% z^FtVWyyo+?Jt0#&4R!FS^*Sp0->8j9pGF=BwnsESrfo5We!%`W_OY?X51fwZb15hO zMpzi0(f4e@%AVhjTKklJfpscH<<@*Bx8AoW^w}ccN8PkK!6MfgiF#QZ>QjNm9T8eHe3w33I^7sp5>aPF-C?^G&|9EN8~66((S3X2#NcUT0VkubF|zfva-Ag}n~GIpADO zdegwfdp7fc8Q;z}Q;&vq)90(cG#|`;AF;BSFLEmv@ZFJLhpy7?^p?oQmq!2FU58X} zk4u{Jp@-Vkx-IKfME*H9+x>9P?)d0E`G`w_zme0Wzs+MGHOyz*&lZ4s59|+l|HTw6 z36Ae{vl;j&5fkKAbg}l;e(7_c?b5yu_^};#p>r;2$${9uZ678GZV)fldA%AU52??g zpKX|mzZF~-JpF|`*T#!HKKw)A-M#-Z<4@W)39l#&?sK@ZPZMwf|4YE^*ID9j?+=N<4HJ=8wyTZ)~4`hp2^IE7TIPf z)SIvP!wKudpnZs^v!aPlI}^%+vw^(L;3U$=g&%J#x6H);9paDV&7}Vo4hymJ{AZ24 z&lY~n-V|t1iCh(XYT<9@@58>bpuX4&oiN?s@N91c|3hNS81t#mwpf}ieQoU?K8rPm zg4>e1&qd>!osU~>Fn}jg#LDa)?|7w9XhsR17Vyay*=9Mbcd2E7j+_x%3MTMzm>Z1> zGu~O+!bFa{N%uD5g=y~$er$Z+DFV5D13C1r1zJtO?a-fNN59QKM&RlQ)`cy4�sP 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%0A4jdnDeZY9_@=kM#?^~Sgj$i+W{R_bnWaplsF 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�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

            ' + +class S(object): + def __init__(self): + pass + def __repr__(self): + return '' + +class Slash(object): + def __init__(self): + self.repeat = None + pass + def __repr__(self): + return '' + +class SP(object): + def __init__(self): + pass + def __repr__(self): + return '' + +class SS(object): + def __init__(self): + pass + def __repr__(self): + return '' + +class T(object): + def __init__(self): + self.num_chars = None + def __repr__(self): + return '' + +class TL(object): + def __init__(self): + self.num_chars = None + def __repr__(self): + return '' + +class TR(object): + def __init__(self): + self.num_chars = None + def __repr__(self): + return '' + +class X(object): + def __init__(self): + self.num_chars = None + def __repr__(self): + return '' + +# Only in F95 +class Z(object): + def __init__(self): + self.repeat = None + self.width = None + self.min_digits = None + def __repr__(self): + return '' + +# Categorise the edit descriptors depnding on how they should be parsed + +ED1 = ['BN', 'BZ', 'SP', 'SS', 'S'] # Of form X only +ED2 = ['X'] # Of form nX only +ED3 = ['T', 'TR', 'TL', 'L'] # Of form Xn only +ED4 = ['A'] # Of form X or Xn +ED5 = ['D', 'F'] # Of form Xn.m only +ED6 = ['B', 'I', 'O', 'Z'] # Of form Xn or Xn.m +ED7 = ['E', 'EN', 'ES', 'G'] # Of form Xn.m or Xn.mEe +ED8 = ['P'] # Of form kX only, where k is a signed integer, may omit comma if followed by Type 5 or 7 edit descriptor +ED9 = [':'] # Of form X only, may omit comma either side +ED10 = ['/'] # Of form X only, may omit following comma and leading comma if no repeat +REPEATABLE_EDS = ['L', 'A', 'D', 'F', 'B', 'I', 'O', 'Z', 'E', 'EN', 'ES', 'G', '/'] +OUTPUT_EDS = (L, A, D, F, B, I, O, Z, E, EN, ES, G) +CONTROL_EDS = (BN, BZ, P, SP, SS, S, X, T, TR, TL, Colon, Slash) +NON_REVERSION_EDS = (P, S, SP, SS, BN, BZ) +ALL_ED = ED1 + ED2 + ED3 + ED4 + ED5 + ED6 + ED7 + ED8 + ED9 + ED10 + diff --git a/pyne/fortranformat/_exceptions.py b/pyne/fortranformat/_exceptions.py new file mode 100644 index 0000000000..82338f1cd8 --- /dev/null +++ b/pyne/fortranformat/_exceptions.py @@ -0,0 +1,3 @@ + +class InvalidFormat(Exception): + pass diff --git a/pyne/fortranformat/_input.py b/pyne/fortranformat/_input.py new file mode 100644 index 0000000000..81a45b09d9 --- /dev/null +++ b/pyne/fortranformat/_input.py @@ -0,0 +1,357 @@ +import re +import pdb +import sys +IS_PYTHON3 = sys.version_info[0] >= 3 + +if IS_PYTHON3: + exec('from ._edit_descriptors import *') + exec('from ._misc import expand_edit_descriptors, has_next_iterator') + exec('from . import config') +else: + exec('from _edit_descriptors import *') + exec('from _misc import expand_edit_descriptors, has_next_iterator') + exec('import config') + +WIDTH_OPTIONAL_EDS = [A] +NON_WIDTH_EDS = [BN, BZ, P, SP, SS, S, X, T, TR, TL, Colon, Slash] +FORBIDDEN_EDS = [QuotedString, H] + +# Some problems without pre written input vars: +# Cannot say when reversion conditions are met +# Cannot determine width of A edit descriptor +# Cannot determine complex input +# Cannot determine proper input for G edit descriptors + + +def input(eds, reversion_eds, records, num_vals=None): + + state = { \ + 'position' : 0, + 'scale' : 0, + 'incl_plus' : False, + 'blanks_as_zeros' : config.PROC_BLANKS_AS_ZEROS, + # TODO: Implement halt if no more record input + 'halt_if_no_vals' : False, + 'exception_on_fail' : True, + } + + # pdb.set_trace() + + for ed in eds + reversion_eds: + if isinstance(ed, tuple(FORBIDDEN_EDS)): + raise InvalidFormat("%d edit descriptr not permitted on input") + + # Expand repeated edit decriptors + eds = expand_edit_descriptors(eds) + reversion_eds = expand_edit_descriptors(reversion_eds) + # Assume one-to-one correspondance between edit descriptors and output + # values if number of output values is not defined + num_out_eds = 0 + for ed in eds: + if isinstance(ed, OUTPUT_EDS): + num_out_eds += 1 + num_rev_out_eds = 0 + if num_vals is None: + num_vals = num_out_eds + for ed in reversion_eds: + if isinstance(ed, OUTPUT_EDS): + num_rev_out_eds += 1 + + + # Will loop forever is no output edit descriptors + if (num_out_eds == 0): + return [] + # Will loop forever if no output eds in reversion format and is more values + # requested than in the format + if (num_vals > num_out_eds) and (num_rev_out_eds == 0): + raise ValueError('Not enough output edit descriptors in reversion format to output %d values' % num_vals) + + # May need to process multiple records, down to a higher function to supply + # appropriate string for format + if not hasattr(records, 'next'): + records = iter(re.split('\r\n|\r|\n', records)) + record = _next(records, None) + if record is None: + return [] + + # if a_widths is not None: + # a_widths = itertools.cycle(a_widths) + + vals = [] + finish_up = False + ed_ind = -1 + while True: + ed_ind += 1 + # Signal to stop when Colon edit descriptor or end of format or end of + # reversion format reached. Also not to output any more data + if len(vals) >= num_vals: + finish_up = True + # Select the appropriate edit descriptor + if ed_ind < len(eds): + ed = eds[ed_ind] + else: + rev_ed_ind = (ed_ind - len(eds)) % len(reversion_eds) + # Reversion begun and has been instructed to halt + if finish_up and (rev_ed_ind == 0): + break + ed = reversion_eds[rev_ed_ind] + + if isinstance(ed, QuotedString): + raise InvalidFormat('Cannot have string literal in an input format') + elif isinstance(ed, BN): + state['blanks_as_zeros'] = False + elif isinstance(ed, BZ): + state['blanks_as_zeros'] = True + elif isinstance(ed, P): + state['scale'] = ed.scale + elif isinstance(ed, SP): + state['incl_plus'] = True + elif isinstance(ed, SS): + state['incl_plus'] = False + elif isinstance(ed, S): + state['incl_plus'] = config.PROC_INCL_PLUS + elif isinstance(ed, (X, TR)): + state['position'] = min(state['position'] + ed.num_chars, len(record)) + elif isinstance(ed, TL): + state['position'] = max(state['position'] - ed.num_chars, 0) + elif isinstance(ed, T): + if (ed.num_chars - 1) < 0: + state['position'] = 0 + elif ed.num_chars > len(record): + state['position'] = len(record) + else: + state['position'] = ed.num_chars - 1 + elif isinstance(ed, Slash): + # End of record + record = _next(records, None) + state['position'] = 0 + if record is None: + break + elif isinstance(ed, Colon): + # Break if input value satisfied + if finish_up: + break + elif isinstance(ed, (Z, O, B, I)): + val, state = read_integer(ed, state, record) + vals.append(val) + elif isinstance(ed, A): + val, state = read_string(ed, state, record) + vals.append(val) + elif isinstance(ed, L): + val, state = read_logical(ed, state, record) + vals.append(val) + elif isinstance(ed, (F, E, D, EN, ES)): + val, state = read_float(ed, state, record) + vals.append(val) + elif isinstance(ed, G): + # Difficult to know what wanted since do not know type of input variable + # Use the G_INPUT_TRIAL_EDS variable to try the variables + # until one sticks + # n.b. vals and state do not get written to if + # exception id raised + resolved = False + g_trial_eds = iter(config.G_INPUT_TRIAL_EDS) + while not resolved: + ed_name = _next(g_trial_eds, '') + if ed_name.upper() in ('F', 'E', 'D', 'EN', 'ES'): + trial_ed = F() + trial_ed.width = ed.width + trial_ed.decimal_places = ed.decimal_places + # pdb.set_trace() + try: + val, state = read_float(trial_ed, state.copy(), record) + vals.append(val) + resolved = True + except ValueError: + continue + elif ed_name.upper() in ('Z', 'O', 'B', 'I'): + trial_ed = globals()[ed_name]() + trial_ed.width = ed.width + trial_ed.min_digits = ed.decimal_places + try: + val, state = read_integer(trial_ed, state.copy(), record) + vals.append(val) + resolved = True + except ValueError: + continue + elif ed_name.upper() in ('L'): + trial_ed = L() + trial_ed.width = ed.width + try: + val, state = read_logical(trial_ed, state.copy(), record) + vals.append(val) + resolved = True + except ValueError: + continue + elif ed_name.upper() in ('A'): + trial_ed = A() + trial_ed.width = ed.width + try: + val, state = read_string(trial_ed, state.copy(), record) + vals.append(val) + resolved = True + except ValueError: + continue + elif ed_name in ('G'): + raise ValueError('G edit descriptor not permitted in config.G_INPUT_TRIAL_EDS') + else: + raise ValueError('Unrecognised trial edit descriptor string in config.G_INPUT_TRIAL_EDS') + + if config.RET_WRITTEN_VARS_ONLY: + vals = [val for val in vals if val is not None] + return vals[:num_vals] + +def _interpret_blanks(substr, state): + # Save leading blanks + len_str = len(substr) + if state['blanks_as_zeros']: + # TODO: Are tabs blank characters? + substr = substr.replace(' ', '0') + else: + substr = substr.replace(' ', '') + # If were blanks but have been stripped away, replace with a zero + if len(substr) == 0 and (len_str > 0): + substr = '0' + return substr + +def _get_substr(w, record, state): + start = max(state['position'], 0) + end = start + w + # if end > len(record): + # substr = '' + # # TODO: test if no chars transmitted, then poition does not change + # w = 0 + # else: + substr = record[start:end] + state['position'] = min(state['position'] + w, len(record)) + return substr, state + + +def _next(it, default=None): + try: + if IS_PYTHON3: + val = next(it) + else: + val = it.next() + except StopIteration: + val = default + return val + + +def read_string(ed, state, record): + if ed.width is None: + # Will assume rest of record is fair game for the + # unsized A edit descriptor + ed.width = len(record) - state['position'] + substr, state = _get_substr(ed.width, record, state) + val = substr.ljust(ed.width, config.PROC_PAD_CHAR) + return (val, state) + + +def read_integer(ed, state, record): + substr, state = _get_substr(ed.width, record, state) + if ('-' in substr) and (not config.PROC_ALLOW_NEG_BOZ) and isinstance(ed, (Z, O, B)): + if state['exception_on_fail']: + raise ValueError('Negative numbers not permitted for binary, octal or hex') + else: + return (None, state) + if isinstance(ed, Z): + base = 16 + elif isinstance(ed, I): + base = 10 + elif isinstance(ed, O): + base = 8 + elif isinstance(ed, B): + base = 2 + # If a negative is followed by blanks, Gfortran and ifort + # interpret as a zero + if re.match(r'^ *- +$', substr): + substr = '0' + # If a negative or negative and blanks, ifort interprets as + # zero for an I edit descriptor + if config.PROC_NEG_AS_ZERO and isinstance(ed, I) and re.match(r'^( *- *| +)$', substr): + substr = '0' + # If string is zero length (reading off end of record?), + # interpret as zero so as to match what would be found in an + # unwritten FORTRAN variable + if substr == '': + if config.RET_UNWRITTEN_VARS_NONE or config.RET_WRITTEN_VARS_ONLY: + return (None, state) + else: + substr = '0' + teststr = _interpret_blanks(substr, state) + try: + val = int(teststr, base) + except ValueError: + if state['exception_on_fail']: + raise ValueError('%s is not a valid input for one of integer, octal, hex or binary' % substr) + else: + return (None, state) + return (val, state) + + +def read_logical(ed, state, record): + substr, state = _get_substr(ed.width, record, state) + # Deal with case where there is no more input to read from + if (substr == '') and (config.RET_UNWRITTEN_VARS_NONE or config.RET_WRITTEN_VARS_ONLY): + return (None, state) + # Remove preceding whitespace and take the first two letters as + # uppercase for testing + teststr = substr.upper().lstrip().lstrip('.') + if len(teststr): + teststr = teststr[0] + else: + # This is case where just a preceding period is read in + raise ValueError('%s is not a valid boolean input' % substr) + if teststr == 'T': + val = True + elif teststr == 'F': + val = False + else: + if state['exception_on_fail']: + raise ValueError('%s is not a valid boolean input' % substr) + else: + val = None + return (val, state) + + +def read_float(ed, state, record): + substr, state = _get_substr(ed.width, record, state) + teststr = _interpret_blanks(substr, state) + # When reading off end of record, get empty string, + # interpret as 0 + if teststr == '': + if config.RET_UNWRITTEN_VARS_NONE or config.RET_WRITTEN_VARS_ONLY: + return (None, state) + else: + teststr = '0' + # Python only understands 'E' as an exponential letter + teststr = teststr.upper().replace('D', 'E') + # Prepend an exponential letter if only a '-' or '+' denotes an exponent + if 'E' not in teststr: + teststr = teststr[0] + teststr[1:].replace('+', 'E+').replace('-', 'E-') + # ifort allows '.' to be interpreted as 0 + if re.match(r'^ *\. *$', teststr): + teststr = '0' + # ifort allows '-' to be interpreted as 0 + if re.match(r'^ *- *$', teststr): + teststr = '0' + # ifort allows numbers to end with 'E', 'E+', 'E-' and 'D' + # equivalents + res = re.match(r'(.*)(E|E\+|E\-)$', teststr) + if res: + teststr = res.group(1) + try: + val = float(teststr) + except ValueError: + if state['exception_on_fail']: + raise ValueError('%s is not a valid input as for an E, ES, EN or D edit descriptor' % substr) + else: + return (None, state) + # Special cases: insert a decimal if none specified + if ('.' not in teststr) and (ed.decimal_places is not None): + val = val / 10 ** ed.decimal_places + # Apply scale factor if exponent not supplied + if 'E' not in teststr: + val = val / 10 ** state['scale'] + return (val, state) diff --git a/pyne/fortranformat/_lexer.py b/pyne/fortranformat/_lexer.py new file mode 100644 index 0000000000..03a734d58a --- /dev/null +++ b/pyne/fortranformat/_lexer.py @@ -0,0 +1,185 @@ +import sys +IS_PYTHON3 = sys.version_info[0] >= 3 + +if IS_PYTHON3: + exec('from ._edit_descriptors import *') + exec('from ._exceptions import *') +else: + exec('from _edit_descriptors import *') + exec('from _exceptions import *') + +# Some lexer tokens to look out for +DIGITS = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'] +SIGNS = ['+', '-'] +COMMA = [','] +DOT = ['.'] +WHITESPACE = [' ', '\t', '\n'] +QUOTE_CHARS = ['"', "'"] +DOUBLE_EDIT_DESCRIPTORS = ['EN', 'ES', 'TR', 'TL', 'BN', 'BZ', 'SP', 'SS'] +SINGLE_EDIT_DESCRIPTORS = ['A', 'B', 'D', 'E', 'F', 'G', 'I', 'L', 'O', 'P', 'S', 'T', 'X', 'Z', ':', '/'] +H_EDIT_DESCRIPTOR = ['H'] +LEFT_PARENS = ['('] +RIGHT_PARENS = [')'] +COLON = ':' +SLASH = '/' + + +def lexer(format): + '''Lex the FORTRAN format statement into tokens''' + tokens = [] + s = -1 + h_chars = None + while True: + # Get the next set of characters + s = s + 1 + c0, c1, c2 = _get_chars(format, s) + # If at end of format, end it all - aieee! + if c0 is None: + break + # Read in an H edit descriptor string + elif h_chars is not None: + buff = format[s:s+h_chars] + tokens.append(Token('QUOTED_STRING', buff)) + s = s + (h_chars - 1) + h_chars = None + # Skip whitespace + elif c0 in WHITESPACE: + continue + # Read in a quoted string + elif c0 in QUOTE_CHARS: + buff = '' + delim = c0 + while True: + s = s + 1 + c0, c1, c2 = _get_chars(format, s) + # Check if an escaped delimiter + if (c0 == delim) and (c1 == delim): + s = s + 1 + buff = buff + delim + elif (c0 == delim): + break + elif c0 is None: + # Premature end of format + raise InvalidFormat('Premature end of quoted string in format') + else: + buff = buff + c0 + tokens.append(Token('QUOTED_STRING', buff)) + # Read in an integer + elif c0 in DIGITS + SIGNS: + # Check sign followed by at least one digit + if (c0 in SIGNS) and (c1 not in DIGITS): + # TODO: Is whitesapce allowed between sign and digit? + raise InvalidFormat("Orphaned sign '%s' with no digits at position %d" % (c0, s)) + buff = c0 + while True: + s = s + 1 + c0, c1, c2 = _get_chars(format, s) + if (c0 not in DIGITS) or (c0 is None): + break + else: + buff = buff + c0 + s = s - 1 + val = int(buff) + if buff[0] in SIGNS: + tokens.append(Token('INT', val)) + elif val == 0: + tokens.append(Token('UINT', val)) + else: + tokens.append(Token('NZUINT', val)) + # Read in a comma + elif c0 in COMMA: + tokens.append(Token('COMMA', None)) + # Read in a dot + elif c0 in DOT: + tokens.append(Token('DOT', None)) + # Read in double lettered edit descriptors + elif (c1 is not None) and ((c0 + c1).upper() in DOUBLE_EDIT_DESCRIPTORS): + ed_type = _get_ed_type((c0 + c1).upper()) + tokens.append(Token(ed_type, (c0 + c1).upper())) + s = s + 1 + # Read in an H edit descriptor + elif c0.upper() in H_EDIT_DESCRIPTOR: + if (len(tokens) > 0) and (tokens[-1].type in ('NZUINT', 'UINT')): + h_chars = tokens[-1].value + tokens = tokens[:-1] + else: + raise InvalidFormat("Missing H descriptor number argument at position %d" % s) + # Read in single lettered edit descriptors + elif c0.upper() in SINGLE_EDIT_DESCRIPTORS: + ed_type = _get_ed_type(c0.upper()) + tokens.append(Token(ed_type, c0.upper())) + # Read in left parens + elif c0 in LEFT_PARENS: + tokens.append(Token('LEFT_PARENS', None)) + # Read in right parens + elif c0 in RIGHT_PARENS: + tokens.append(Token('RIGHT_PARENS', None)) + else: + raise InvalidFormat('Character %s not recognised at position %d' % (c0, s)) + return tokens + +def _get_ed_type(ed_string): + if ed_string in ED1: + ed_type = 'ED1' + elif ed_string in ED2: + ed_type = 'ED2' + elif ed_string in ED3: + ed_type = 'ED3' + elif ed_string in ED4: + ed_type = 'ED4' + elif ed_string in ED5: + ed_type = 'ED5' + elif ed_string in ED6: + ed_type = 'ED6' + elif ed_string in ED7: + ed_type = 'ED7' + elif ed_string in ED8: + ed_type = 'ED8' + elif ed_string in ED9: + ed_type = 'ED9' + elif ed_string in ED10: + ed_type = 'ED10' + else: + ed_type = None + return ed_type + +def _get_chars(format, s): + try: + c0 = format[s] + except IndexError: + c0 = None + try: + c1 = format[s+1] + except IndexError: + c1 = None + try: + c2 = format[s+2] + except IndexError: + c2 = None + return (c0, c1, c2) + + +class InvalidFormat(Exception): + def __init__(self, value): + self.value = value + def __str__(self): + return repr(self.value) + + +class Token(object): + def __init__(self, type, value): + self.type = type + self.value = value + def __repr__(self): + return "\n Token: type=%s,\tvalue=%s" % (self.type, str(self.value)) + +# Do some testing when run as a module + +#if __name__ == '__main__': +# import doctest +# import os +# globs = {'lexer' : lexer} +# # Need to normalize whitespace since pasting into VIM converts tabs to +# # spaces +# doctest.testfile(os.path.join('tests', 'lexer_test.txt'), \ +# globs=globs, optionflags=doctest.NORMALIZE_WHITESPACE) diff --git a/pyne/fortranformat/_misc.py b/pyne/fortranformat/_misc.py new file mode 100644 index 0000000000..5afa31f755 --- /dev/null +++ b/pyne/fortranformat/_misc.py @@ -0,0 +1,56 @@ +''' +Miscellaneous functions, classes etc +''' +import sys +IS_PYTHON3 = sys.version_info[0] >= 3 + +class has_next_iterator(object): + ''' + A wrapper class for iterators so that the .has_next() method is implemented + + See - http://stackoverflow.com/questions/1966591/hasnext-in-python-iterators + ''' + def __init__(self, it): + self.it = iter(it) + self._has_next = None + def __iter__(self): return self + def __next__(self): + if self._has_next: + result = self._the_next + else: + if IS_PYTHON3: + result = next(self.it) + else: + result = self.it.next() + self._has_next = None + return result + def next(self): + if self._has_next: + result = self._the_next + else: + if IS_PYTHON3: + result = next(self.it) + else: + result = self.it.next() + self._has_next = None + return result + def has_next(self): + if self._has_next is None: + try: + if IS_PYTHON3: + self._the_next = next(self.it) + else: + self._the_next = self.it.next() + except StopIteration: self._has_next = False + else: self._has_next = True + return self._has_next + + +def expand_edit_descriptors(eds): + expanded_eds = [] + for ed in eds: + if hasattr(ed, 'repeat') and (ed.repeat is not None): + expanded_eds.extend(ed.repeat * [ed]) + else: + expanded_eds.append(ed) + return expanded_eds diff --git a/pyne/fortranformat/_output.py b/pyne/fortranformat/_output.py new file mode 100644 index 0000000000..f9298f89f0 --- /dev/null +++ b/pyne/fortranformat/_output.py @@ -0,0 +1,722 @@ +import math +import itertools +import sys +IS_PYTHON3 = sys.version_info[0] >= 3 + +if IS_PYTHON3: + exec('from ._edit_descriptors import *') + exec('from ._misc import expand_edit_descriptors, has_next_iterator') + exec('from . import config') +else: + exec('from _edit_descriptors import *') + exec('from _misc import expand_edit_descriptors, has_next_iterator') + exec('import fortranformat.config as config') + + +PROC_SIGN_ZERO = config.PROC_SIGN_ZERO +PROC_MIN_FIELD_WIDTH = config.PROC_MIN_FIELD_WIDTH +PROC_DECIMAL_CHAR = config.PROC_DECIMAL_CHAR +G0_NO_BLANKS = config.G0_NO_BLANKS +PROC_NO_LEADING_BLANK = config.PROC_NO_LEADING_BLANK + +def output(eds, reversion_eds, values): + ''' + a function to take a list of valid f77 edit descriptors and respective values + and output the corresponding string + ''' + record = '' + state = { + 'position' : 0, + 'scale' : 0, + 'incl_plus' : False, + 'blanks_as_zeros' : False, + 'halt_if_no_vals' : False, + } + + # if format is empty with no values specified, then output blank record - + # see section 13.3 + + # check that if there is a reversion, that values can be output + reversion_contains_output_ed = False + for ed in reversion_eds: + if isinstance(ed, OUTPUT_EDS): + reversion_contains_output_ed = True + break + # Get full list of edit descriptors + eds = expand_edit_descriptors(eds) + reversion_eds = expand_edit_descriptors(reversion_eds) + # use iterators + get_ed = has_next_iterator(eds) + get_value = has_next_iterator(values) + tmp_reversion_eds = [] + # continue until out of edit descriptors or values + while True: + # no more edit descriptors, no more values, stop output, + # todo: this will cut short a reversion edit descriptor section - is this right? + if not get_ed.has_next() and not get_value.has_next(): + break + # take a edit descriptor off the queue if there is any + if get_ed.has_next(): + if IS_PYTHON3: + ed = next(get_ed) + else: + ed = get_ed.next() + else: + if reversion_contains_output_ed == True: + # take from reversion edit descriptors if there is a value + # requiring output still + while True: + if len(tmp_reversion_eds): + ed = tmp_reversion_eds.pop() + # these edit descriptors are ignored in reversion state + if not isinstance(ed, NON_REVERSION_EDS): + break + else: + # Regardless of where cursor is, is moved to the + # next record + record = record + config.RECORD_SEPARATOR + state['position'] = len(record) + tmp_reversion_eds = reversion_eds[::-1] + else: + # ignore the revsion edit descriptors as cannot output the + # final value + break + # check if edit descriptor requires a value + if isinstance(ed, OUTPUT_EDS): + if get_value.has_next(): + if IS_PYTHON3: + val = next(get_value) + else: + val = get_value.next() + else: + # is a edit descriptor that requires a value but no value + # todo: does it stop gracefully or raise error? + break + if isinstance(ed, I): + sub_string = _compose_i_string(ed.width, ed.min_digits, state, val) + elif isinstance(ed, B): + w = ed.width + m = ed.min_digits + sub_string = _compose_boz_string(w, m, state, val, 'B') + if isinstance(ed, O): + w = ed.width + m = ed.min_digits + sub_string = _compose_boz_string(w, m, state, val, 'O') + if isinstance(ed, Z): + w = ed.width + m = ed.min_digits + sub_string = _compose_boz_string(w, m, state, val, 'Z') + elif isinstance(ed, F): + w = ed.width + e = None + d = ed.decimal_places + sub_string = _compose_float_string(w, e, d, state, val, 'F') + elif isinstance(ed, E): + w = ed.width + e = ed.exponent + d = ed.decimal_places + sub_string = _compose_float_string(w, e, d, state, val, 'E') + elif isinstance(ed, D): + w = ed.width + e = None + d = ed.decimal_places + sub_string = _compose_float_string(w, e, d, state, val, 'D') + elif isinstance(ed, G): + w = ed.width + e = ed.exponent + d = ed.decimal_places + sub_string = _compose_float_string(w, e, d, state, val, 'G') + elif isinstance(ed, EN): + w = ed.width + e = ed.exponent + d = ed.decimal_places + sub_string = _compose_float_string(w, e, d, state, val, 'EN') + elif isinstance(ed, ES): + w = ed.width + e = ed.exponent + d = ed.decimal_places + sub_string = _compose_float_string(w, e, d, state, val, 'ES') + elif isinstance(ed, L): + sub_string = _compose_l_string(ed.width, state, val) + elif isinstance(ed, A): + sub_string = _compose_a_string(ed.width, state, val) + state['position'], record = _write_string(record, sub_string, state['position']) + else: + # token does not require a value + if isinstance(ed, (S, SS)): + state['incl_plus'] = False + if isinstance(ed, SP): + state['incl_plus'] = True + elif isinstance(ed, P): + state['scale'] = ed.scale + elif isinstance(ed, BN): + # This is moot since for output, this does not do anything + state['blanks_as_zeros'] = False + elif isinstance(ed, BZ): + state['blanks_as_zeros'] = True + elif isinstance(ed, Colon): + state['halt_if_no_vals'] = True + elif isinstance(ed, Slash): + state['position'], record = _write_string(record, config.RECORD_SEPARATOR, state['position']) + elif isinstance(ed, (X, TR)): + state['position'] = state['position'] + ed.num_chars + elif isinstance(ed, TL): + state['position'] = state['position'] - ed.num_chars + elif isinstance(ed, T): + state['position'] = ed.num_chars - 1 + elif isinstance(ed, QuotedString): + sub_string = ed.char_string + state['position'], record = _write_string(record, sub_string, state['position']) + # output the final record + return record + +def _compose_nan_string(w, ftype): + if ftype in ['B', 'O', 'Z']: + return '' + else: + # Allow at least 'NaN' to be printed + if w == 0: + w = 4 # n.b. this is what is set in Gfortran 4.4.0 + if w < 3: + return '*' * w + return 'NaN'.rjust(w) + +def _compose_inf_string(w, ftype, sign_bit): + if ftype in ['B', 'O', 'Z']: + return '' + else: + sign = '+' + # Allow at least 'Inf' to be printed + if w == 0: + w = 4 + if w < 3: + return '*' * w + # Change sign if negative + if sign_bit: + sign = '-' + # Require sign if negative, if no space then overflow + if w == 3: + return '*' * w + # Output long version if long enough + if w > 8: + return (sign + 'Infinity').rjust(w) + # Output shortened version with sign if long enough + elif w > 3: + return (sign + 'Inf').rjust(w) + # Should only output short version with no sign if positive + else: + return 'Inf' + + +def _compose_float_string(w, e, d, state, val, ftype): + ''' + Adapted from code in glibfortran which is written in C so is somwhat + 'bit-pushy' in nature. Writes the value to an initial string (buffer) + and then pulls the subsequent strings from that + ''' + if (d < 0) or (d is None): + raise InvalidFormat('Unspecified precision') + # Make sure they are ints + d = int(round(d)) + if e is not None: + e = int(round(e)) + if w is not None: + w = int(round(w)) + # ==== write_float ==== (function) + edigits = 4 # Largest number of exponent digits expected + if (ftype in ['F', 'EN', 'G']) or \ + ((ftype in ['D', 'E']) and (state['scale'] != 0)): + # Convert with full possible precision + ndigits = PROC_MIN_FIELD_WIDTH - 4 - edigits + else: + # Otherwise convert knowing what the required precision is (i.e. knowing d) + if ftype == 'ES': + ndigits = d + 1 + else: + ndigits = d + if ndigits > (PROC_MIN_FIELD_WIDTH - 4 - edigits): + ndigits = PROC_MIN_FIELD_WIDTH - 4 - edigits + # ==== WRITE_FLOAT ==== (macro) + # Determine sign of value + if val == 0.0: + sign_bit = '-' in str(val) + else: + sign_bit = val < 0 + # handle the nan and inf cases + if type(val) is float and val != val : + return _compose_nan_string(w, ed) + Infinity = 1e1000000 + if val in (-Infinity, Infinity): + return _compose_inf_string(w, ed, sign_bit) + tmp = abs(val) + # Round the input if the input is less than 1 + if (ftype == 'F') and (d == state['scale']) and (d == 0): + if tmp < 1.0: + tmp = round(tmp) + zero_flag = (tmp == 0) + # === DTOA === (macro) + # write the tmp value to the string buffer + # sprintf seems to allow negative number of decimal places, need to correct for this + if ndigits <= 0: + fmt = '%+-#' + str(PROC_MIN_FIELD_WIDTH) + 'e' + else: + fmt = '%+-#' + str(PROC_MIN_FIELD_WIDTH) + '.' + str(ndigits - 1) + 'e' + buff = fmt % tmp + # === WRITE_FLOAT === (macro) + if ftype != 'G': + return _output_float(w, d, e, state, ftype, buff, sign_bit, zero_flag, ndigits, edigits) + else: + # Perform different actions for G edit descriptors depending on value + # + # Generate corresponding I/O format for FMT_G and output. + # The rules to translate FMT_G to FMT_E or FMT_F from DEC fortran + # LRM (table 11-2, Chapter 11, "I/O Formatting", P11-25) is: + # + # Data Magnitude Equivalent Conversion + # 0< m < 0.1-0.5*10**(-d-1) Ew.d[Ee] + # m = 0 F(w-n).(d-1), n' ' + # 0.1-0.5*10**(-d-1)<= m < 1-0.5*10**(-d) F(w-n).d, n' ' + # 1-0.5*10**(-d)<= m < 10-0.5*10**(-d+1) F(w-n).(d-1), n' ' + # 10-0.5*10**(-d+1)<= m < 100-0.5*10**(-d+2) F(w-n).(d-2), n' ' + # ................ .......... + # 10**(d-1)-0.5*10**(-1)<= m <10**d-0.5 F(w-n).0,n(' ') + # m >= 10**d-0.5 Ew.d[Ee] + # + # notes: for Gw.d , n' ' means 4 blanks + # for Gw.dEe, n' ' means e+2 blanks + nb = 0 + save_scale_factor = state['scale'] + exp_d = 10 ** d + if (0.0 <= tmp < (0.1 - 0.05 / exp_d)) or \ + (tmp >= (exp_d - 0.5)): + ftype = 'E' + else: + mag = int(abs(round(math.log10(tmp)))) + low = lambda mag, d : 10 ** (mag - 1) - 5 * 10 ** (-d - 1 + mag) + high = lambda mag, d : 10 ** mag - 0.5 * 10 ** (-d + mag) + while tmp < low(mag, d): + mag = mag - 1 + while tmp >= high(mag, d): + mag = mag + 1 + assert(low(mag, d) <= tmp < high(mag, d)) + if e < 0: + nb = 4 + else: + nb = e + 2 + ftype = 'F' + w = w - nb + if tmp == 0.0: + d = d - 1 + else: + d = d - mag + # d = -(mid - d - 1) + state['scale'] = 0 + out = _output_float(w, d, e, state, ftype, buff, sign_bit, zero_flag, ndigits, edigits) + state['scale'] = save_scale_factor + # TODO: this may not be right ... + if nb > 0: + if '*' in out: + out = out + ('*' * nb) + else: + out = out + (' ' * nb) + if len(out) > (w + nb): + out = '*' * (w + nb) + return out + + +def _output_float(w, d, e, state, ft, buff, sign_bit, zero_flag, ndigits, edigits): + + # nbefore - number of digits before the decimal point + # nzero - number of zeros after the decimal point + # nafter - number of digits after the decimal point + # nzero_real - number of zeros after the decimal point regardles of the precision + + # Some hacks to change None to -1 (C convention) + if w is None: + w = -1 + if e is None: + e = -1 + nzero_real = -1 + sign = _calculate_sign(state, sign_bit) + # Some debug + if d != 0: + assert(buff[2] in ['.', ',']) + assert(buff[ndigits + 2] == 'e') + # Read in the exponent + ex = int(buff[ndigits + 3:]) + 1 + # Handle zero case + if zero_flag: + ex = 0 + if PROC_SIGN_ZERO: + sign = _calculate_sign(state, sign_bit) + else: + sign = _calculate_sign(state, False) + # Handle special case + if w == 0: + w = d + 2 + # This case does not include a decimal point + if (w == 1) and (ft == 'F'): + if state['incl_plus']: + return '*' # This is ifort behaviour + else: + return '.' # CHANGED: Was '0' + # Get rid of the decimal and the initial sign i.e. normalise the digits + digits = buff[1] + buff[3:] + # Find out where to place the decimal point + if ft == 'F': + nbefore = ex + state['scale'] + if nbefore < 0: + nzero = -nbefore + nzero_real = nzero + if nzero > d: + nzero = d + nafter = d - nzero + nbefore = 0 + else: + nzero = 0 + nafter = d + expchar = None + elif ft in ['E', 'D']: + i = state['scale'] + if (d <= 0) and (i == 0): + raise InvalidFormat("Precision not greater than zero in format specifier 'E' or 'D'") + if (i <= -d) or (i >= (d + 2)): + raise InvalidFormat("Scale factor out of range in format specifier 'E' or 'D'") + if not zero_flag: + ex = ex - i + if i < 0: + nbefore = 0 + nzero = -i; + nafter = d + i + elif i > 0: + nbefore = i + nzero = 0 + nafter = (d - i) + 1 + else: + nbefore = 0 + nzero = 0 + nafter = d + expchar = ft + elif ft == 'EN': + # Exponent must be a multiple of 3 with 1-3 digits before the d.p + if not zero_flag: + ex = ex - 1 + if ex >= 0: + nbefore = ex % 3 + else: + nbefore = (-ex) % 3 + if nbefore != 0: + nbefore = 3 - nbefore + ex = ex - nbefore + nbefore = nbefore + 1 + nzero = 0 + nafter = d + expchar = 'E' + elif ft == 'ES': + if not zero_flag: + ex = ex - 1 + nbefore = 1 + nzero = 0 + nafter = d + expchar = 'E' + # Round the value + if (nbefore + nafter) == 0: + ndigits = 0 + if (nzero_real == d) and (int(digits[0]) >= 5): # n.b. character comparison not very pythonic! + # We rounded to zero but shouldn't have + nzero = nzero - 1 + nafter = 1 + digits = '1' + digits[1:] + ndigits = 1 + elif (nbefore + nafter) < ndigits: + ndigits = nbefore + nafter + i = ndigits + if int(digits[i]) >= 5: + # Propagate the carry + i = i - 1 + while i >= 0: + digit = int(digits[i]) + if digit != 9: + digits = _swapchar(digits, i, str(digit + 1)) + break + else: + digits = _swapchar(digits, i, '0') + i = i - 1 + # Did the carry overflow? + if i < 0: + digits = '1' + digits + if ft == 'F': + if nzero > 0: + nzero = nzero - 1 + nafter = nafter + 1 + else: + nbefore = nbefore + 1 + elif ft == 'EN': + nbefore = nbefore + 1 + if nbefore == 4: + nbefore = 1 + ex = ex + 3 + else: + ex = ex + 1 + # Calculate the format of the exponent field + if expchar is not None: + # i = abs(ex) + # while i >= 10: + # edigits = edigits + 1 + # i = i / 10.0 + if e < 0: + # Width not specified, must be no more than 3 digits + if (ex > 999) or (ex < -999): + edigits = -1 + else: + edigits = 4 + if (ex > 99) or (ex < -99): + expchar = ' ' + else: + assert(isinstance(ex, int)) + edigits = len(str(abs(ex))) + # Exponenet width specified, check it is wide enough + if edigits > e: + edigits = -1 + else: + edigits = e + 2 + else: + edigits = 0 + # Zero values always output as positive, even if the value was egative before rounding + i = 0 + while i < ndigits: + if digits[i] != '0': + break + i = i + 1 + if i == ndigits: + # The output is zero so set sign accordingly + if PROC_SIGN_ZERO: + sign = _calculate_sign(state, sign_bit) + else: + sign = _calculate_sign(state, False) + # Pick a field size if none was specified + if w <= 0: + w = nbefore + nzero + nafter + 1 + len(sign) + # Work out how much padding is needed + nblanks = w - (nbefore + nzero + nafter + edigits + 1) + if sign != '': + nblanks = nblanks - 1 + # TODO: Find out what this is + if G0_NO_BLANKS: # dtp->u.p.g0_no_blanks + w = w - nblanks + nblanks = 0 + # Check value fits in specified width + if (nblanks < 0) or (edigits == -1): + return '*' * w + # See if we have space for a zero before the decimal point + if (nbefore == 0) and (nblanks > 0): + leadzero = True + nblanks = nblanks - 1 + else: + leadzero = False + out = '' + # Pad to full field width + if (nblanks > 0) and not PROC_NO_LEADING_BLANK: # dtp->u.p.no_leading_blank + out = out + ' ' * nblanks + # Attach the sign + out = out + sign + # Add the lead zero if necessary + if leadzero: + out = out + '0' + # Output portion before the decimal point padded with zeros + if nbefore > 0: + if nbefore > ndigits: + out = out + digits[:ndigits] + (' ' * (nbefore - ndigits)) + digits = digits[ndigits:] + ndigits = 0 + else: + i = nbefore + out = out + digits[:i] + digits = digits[i:] + ndigits = ndigits - i + # Output the decimal point + out = out + PROC_DECIMAL_CHAR + # Output the leading zeros after the decimal point + if nzero > 0: + out = out + ('0' * nzero) + # Output the digits after the decimal point, padded with zeros + if nafter > 0: + if nafter > ndigits: + i = ndigits + else: + i = nafter + zeros = '0' * (nafter - i) + out = out + digits[:i] + zeros + digits = digits[nafter:] + ndigits = ndigits - nafter + # Output the exponent + if expchar is not None: + if expchar != ' ': + out = out + expchar + edigits = edigits - 1 + fmt = '%+0' + str(edigits) + 'd' + tmp_buff = fmt % ex + # if not state['blanks_as_zeros']: + if PROC_NO_LEADING_BLANK: + tmp_buf = tmp_buff + (nblanks * ' ') + out = out + tmp_buff + return out + + +def _calculate_sign(state, negative_flag): + s = '' + if negative_flag: + s = '-' + elif state['incl_plus']: + s = '+' + else: + s = '' + return s + +def _swapchar(s, ind, newch): + ''' + Helper function to make chars in a string mutableish + ''' + if 0 < ind >= len(s): + raise IndexError('index out of range') + return s[:ind] + newch + s[ind+1:] + + +def _compose_a_string(w, state, val): + # f77 spec 13.5.11 covers a editing + val = str(val) + if w is None: + output = val + elif w >= len(val): + output = val.rjust(w) + else: + output = val[:w] + return output + + +def _compose_l_string(w, state, val): + # f77 spec 13.5.10 covers l editing + try: + val = bool(val) + except ValueError: + raise ValueError("cannot convert '%s' to a boolean" % str(val)) + # single t or f + if val == True: + sub_string = 'T' + else: + sub_string = 'F' + # now pad to the specified width + sub_string = sub_string.rjust(w) + return sub_string + + +def _compose_i_string(w, m, state, val): + # f77 spec 13.5.9.1 covers integer editing + null_field = False + # be pythonic in what values to accept, if it looks like an integer, then + # so be it + try: + val = int(val) + except ValueError: + raise ValueError("cannot convert '%s' to a integer" % str(val)) + # get the basic string without sign etc. + int_string = '%d' % int(round(math.fabs(val))) + # pad if necessary + if m is not None: + int_string = left_pad(int_string, m, '0') + # weird case where if zero width specified and is zero, can have zero space + if (val == 0) and (m == 0): + int_string = '' + # prepend the sign + if int_string != '': + int_string = _get_sign(val, state['incl_plus']) + int_string + # fill the field with blanks if the number takes more room than the width + # see f77 spec 13.5.9 remark 5. + if len(int_string) > w: + int_string = '*' * w + else: + int_string = int_string.rjust(w) + return int_string + +def _get_sign(val, incl_plus): + if val >= 0: + if incl_plus == True: + return '+' + else: + return '' + else: + return '-' + +def _compose_boz_string(w, m, state, val, ftype): + try: + val = int(val) + except ValueError: + raise ValueError("Cannot convert %s to an integer" % str(val)) + # Special case for zero + if val == 0: + if m is None: + return '0'.rjust(w) + elif w == m == 0: + return ' ' + elif m == 0: + return w * ' ' + else: + s = left_pad('0', m, '0').rjust(w) + if len(s) > w: + return w * '*' + # Normal cases + s = '' + if ftype == 'B': + # Binary case + if val < 0: + return '*' * w + while val > 0: + s = str(val % 2) + s + val = val >> 1 + elif ftype == 'O': + # Octal case + if val < 0: + return '*' * w + s = '%o' % val + elif ftype == 'Z': + # Hex case + # Fortran uses Two's complement to represent negative numbers, this + # restricts hex values to sys.maxint, if greater than this overflow, + # however this is not perfoect as sys.maxint is Pythons build maximum + # rather than the systems bit size which is difficult to find reliably + # across platforms + if abs(val) > config.PROC_MAXINT: + return '*' * w + if val < 0: + s = '%X' % ((config.PROC_MAXINT * 2) + 2 + val) + else: + s = '%X' % val + if m is None: + s = s.rjust(w) + else: + s = left_pad(s, m, '0').rjust(w) + if len(s) > w: + return w * '*' + else: + return s + +def _write_string(record, sub_string, pos): + '''Function that actually writes the generated strings to a 'stream''''' + new_pos = pos + len(sub_string) + # pad if required with blanks - i.e. input after a tr edit descriptor - see + # f77 format sec. 13.5.3 + if pos > len(record): + record = record.ljust(pos) + out = record + sub_string + elif pos == len(record): + out = record + sub_string + elif pos < len(record): + out = record[:pos] + sub_string + record[new_pos:] + return (new_pos, out) + + +def left_pad(sub_string, width, pad_char): + # Python 2.3 does not have the character argument to rjust + padding = pad_char * (width - len(sub_string)) + return padding + sub_string + diff --git a/pyne/fortranformat/_parser.py b/pyne/fortranformat/_parser.py new file mode 100644 index 0000000000..f191ac71ea --- /dev/null +++ b/pyne/fortranformat/_parser.py @@ -0,0 +1,393 @@ +import sys +IS_PYTHON3 = sys.version_info[0] >= 3 + +if IS_PYTHON3: + exec('from ._lexer import Token') + exec('from ._edit_descriptors import *') + exec('from ._exceptions import *') + exec('from . import config') +else: + exec('from _lexer import Token') + exec('from _edit_descriptors import *') + exec('from _exceptions import *') + exec('import config') + +def parser(tokens, version=None): + # Parse the full edit descriptors + eds = _parse_tokens(tokens, reversion=False, version=None) + # Parse the edit descriptors used for the reversion of format control + # (F95 format 12.2.2) + reversion_eds = _parse_tokens(tokens, reversion=True, version=None) + return eds, reversion_eds + +def _parse_tokens(tokens, reversion=False, version=None): + # Remove outer parens is there are any + tokens = _remove_outer_parens(tokens) + # Get only the reversion tokens + if reversion == True: + tokens = _get_reversion_tokens(tokens) + # First expand the parentheses + tokens = _expand_parens(tokens) + # Split on commas + token_sets = _split_on_commas(tokens) + # Split on ED9 (i.e. :) + token_sets = _split_on_ed9(token_sets) + # Split the ED10 (i.e. /) + token_sets = _split_on_ed10(token_sets) + # Split the ED8 (i.e. P edit descriptors) + token_sets = _split_on_ed8(token_sets) + # Process each set of edit descriptors + eds = [] + for token_set in token_sets: + # Assume first edit descriptor is the one to process + ed_type = None + ed_value = None + for token in token_set: + if token.type in ['ED1', 'ED2', 'ED3', 'ED4', 'ED5', 'ED6', 'ED7', 'ED8', 'ED9', 'ED10', 'QUOTED_STRING']: + ed_type = token.type + ed_value = token.value + break + # TODO: something more responsible here ... + if ed_type is None: + continue + # If repeatable and first token is repeat number then cache + repeat = None + if ed_value in REPEATABLE_EDS and (token_set[0].type in ['NZUINT', 'UINT']): + repeat = token_set[0].value + token_set = token_set[1:] + # Process the edit descriptor + if ed_type == 'QUOTED_STRING': + ed = _read_quoted_string(token_set) + elif ed_type == 'ED1': + ed = _read_ed1(token_set) + elif ed_type == 'ED2': + ed = _read_ed2(token_set) + elif ed_type == 'ED3': + ed = _read_ed3(token_set) + elif ed_type == 'ED4': + ed = _read_ed4(token_set) + elif ed_type == 'ED5': + ed = _read_ed5(token_set) + elif ed_type == 'ED6': + ed = _read_ed6(token_set) + elif ed_type == 'ED7': + ed = _read_ed7(token_set) + elif ed_type == 'ED8': + ed = _read_ed8(token_set) + elif ed_type == 'ED9': + ed = _read_ed9(token_set) + elif ed_type == 'ED10': + ed = _read_ed10(token_set) + else: + raise InvalidFormat('Could not identify edit descriptor in sequence $s' % str(token_set)) + # If there is a repeat number cached, then apply + if repeat is not None: + ed.repeat = repeat + # Add to the list + eds.append(ed) + return eds + + +# Functions that group the tokens into sets + +def _expand_parens(tokens): + new_tokens = [] + get_tokens = iter(tokens) + for t0 in get_tokens: + if t0.type != 'LEFT_PARENS': + new_tokens.append(t0) + else: + # Read in all tokens in subformat and recurse back to self + paren_tokens = [] + nesting = 1 + while nesting > 0: + try: + if IS_PYTHON3: + t1 = next(get_tokens) + else: + t1 = get_tokens.next() + except StopIteration: + raise InvalidFormat('Open parens in format') + if t1.type == 'LEFT_PARENS': + nesting = nesting + 1 + elif t1.type == 'RIGHT_PARENS': + nesting = nesting - 1 + paren_tokens.append(t1) + # Remove last right paren + paren_tokens = paren_tokens[:-1] + # If repeated, then repeat the tokens accordingly + if (len(new_tokens) > 0) and (new_tokens[-1].type in ['NZUINT', 'UINT']): + repeat = new_tokens[-1].value + # Remove the repeat NZUINT, UINT + new_tokens = new_tokens[:-1] + new_tokens.extend(repeat * (_expand_parens(paren_tokens) + [Token('COMMA', None)])) + else: + new_tokens.extend(_expand_parens(paren_tokens)) + return new_tokens + + +def _split_on_commas(tokens): + token_sets = [] + set_buff = [] + for t0 in tokens: + if t0.type == 'COMMA': + token_sets.append(set_buff) + set_buff = [] + else: + set_buff.append(t0) + token_sets.append(set_buff) + return token_sets + + +def _split_on_ed9(token_sets): + '''Splits on :''' + new_token_sets = [] + for token_set in token_sets: + if 'ED9' not in [t.type for t in token_set]: + new_token_sets.append(token_set) + else: + buff = [] + for token in token_set: + if token.type == 'ED9': + if len(buff) > 0: + new_token_sets.append(buff) + buff = [] + new_token_sets.append([token]) + else: + buff.append(token) + if len(buff) > 0: + new_token_sets.append([token]) + return new_token_sets + + +def _split_on_ed10(token_sets): + '''Splits on /''' + new_token_sets = [] + for token_set in token_sets: + # May have a repeat on the slash if preceded by a comma + if (len(token_set) > 2) and ((token_set[0].type in ['UINT', 'NZUINT']) and (token_set[1].type == 'ED10')): + new_token_sets.append(token_set[:2]) + token_set = token_set[2:] + buff = [] + for token in token_set: + if token.type == 'ED10': + if len(buff) > 0: + new_token_sets.append(buff) + buff = [] + new_token_sets.append([token]) + else: + buff.append(token) + if len(buff) > 0: + new_token_sets.append(buff) + return new_token_sets + + +def _split_on_ed8(token_sets): + '''Splits on ED8 (i.e. P edit descriptors)''' + new_token_sets = [] + for token_set in token_sets: + # Append to new list if no ED8 + if 'ED8' not in [t.type for t in token_set]: + new_token_sets.append(token_set) + # Otherwise split string on ED9 + elif (token_set[0].type in ['INT', 'UINT', 'NZUINT']) and (token_set[1].type == 'ED8'): + new_token_sets.append(token_set[:2]) + new_token_sets.append(token_set[2:]) + else: + raise InvalidFormat('P edit descriptor in invalid position') + return new_token_sets + +# Function to extract only the tokens for the reversion of control + +def _get_reversion_tokens(tokens): + reversion_tokens = [] + # Easier to work backwards + nesting = None + for token in tokens[::-1]: + # End of loop condition + if (nesting is not None) and (nesting < 1): + # Parens may have a repeat number + if token.type in ['UINT', 'NZUINT']: + reversion_tokens.append(token) + break + # Read till the first right parens + if token.type == 'RIGHT_PARENS': + if nesting is None: + nesting = 1 + else: + nesting = nesting + 1 + elif token.type == 'LEFT_PARENS': + if nesting is None: + raise InvalidFormat('Unbalanced parens in format') + else: + nesting = nesting - 1 + reversion_tokens.append(token) + # Tokens are in reverse order + reversion_tokens.reverse() + return reversion_tokens + +# The functions that read particular edit descriptors sequences + +def _read_quoted_string(tokens): + # Of form X only + type_string = ",".join([t.type for t in tokens]) + if type_string != "QUOTED_STRING": + raise InvalidFormat('Token %s has invalid neighbouring token' % tokens[0]) + ed = QuotedString() + ed.char_string = tokens[0].value + return ed + +def _read_ed1(tokens): + # Of form X only + type_string = ",".join([t.type for t in tokens]) + if type_string != "ED1": + raise InvalidFormat('Token %s has invalid neighbouring token' % tokens[0]) + ed = get_edit_descriptor_obj(tokens[0].value) + return ed + +def _read_ed2(tokens): + # Of form nX only + type_string = ",".join([t.type for t in tokens]) + if type_string != "NZUINT,ED2": + raise InvalidFormat('Token %s has invalid neighbouring token' % tokens[0]) + ed = get_edit_descriptor_obj(tokens[1].value) + ed.num_chars = tokens[0].value + return ed + +def _read_ed3(tokens): + # Of form Xn only + type_string = ",".join([t.type for t in tokens]) + if type_string != "ED3,NZUINT": + raise InvalidFormat('Token %s has invalid neighbouring token' % tokens[0]) + ed = get_edit_descriptor_obj(tokens[0].value) + # L edit descriptor has a width rather than num_chars + if hasattr(ed, 'width'): + ed.width = tokens[1].value + else: + ed.num_chars = tokens[1].value + return ed + +def _read_ed4(tokens): + # Of form X or Xn + type_string = ",".join([t.type for t in tokens]) + if type_string in ["ED4", "ED4,NZUINT"] or \ + (config.ALLOW_ZERO_WIDTH_EDS and (type_string == "ED4,UINT")): + ed = get_edit_descriptor_obj(tokens[0].value) + if len(tokens) > 1: + ed.width = tokens[1].value + else: + raise InvalidFormat('Token %s has invalid neighbouring token' % tokens[0]) + return ed + +def _read_ed5(tokens): + # Of form Xn.m only + type_string = ",".join([t.type for t in tokens]) + if type_string in ["ED5,NZUINT,DOT,UINT", "ED5,NZUINT,DOT,NZUINT"] or \ + (config.ALLOW_ZERO_WIDTH_EDS and (type_string in \ + ["ED5,UINT,DOT,UINT", "ED5,UINT,DOT,NZUINT"])): + ed = get_edit_descriptor_obj(tokens[0].value) + ed.width = tokens[1].value + ed.decimal_places = tokens[3].value + else: + raise InvalidFormat('%s has invalid neighbouring token' % tokens[0]) + return ed + +def _read_ed6(tokens): + # Of form Xn or Xn.m + type_string = ",".join([t.type for t in tokens]) + if type_string == "ED6,NZUINT" or \ + (config.ALLOW_ZERO_WIDTH_EDS and (type_string == "ED6,UINT")): + ed = get_edit_descriptor_obj(tokens[0].value) + ed.width = tokens[1].value + ed.min_digits = None + elif type_string in ["ED6,NZUINT,DOT,UINT", "ED6,NZUINT,DOT,NZUINT"] or \ + (config.ALLOW_ZERO_WIDTH_EDS and (type_string in \ + ["ED6,UINT,DOT,UINT", "ED6,UINT,DOT,NZUINT"])): + ed = get_edit_descriptor_obj(tokens[0].value) + ed.width = tokens[1].value + ed.min_digits = tokens[3].value + else: + raise InvalidFormat('%s has invalid neighbouring token' % tokens[0]) + return ed + +def _read_ed7(tokens): + # Of form Xn.m or Xn.mEe + type_string = ",".join([t.type for t in tokens]) + if type_string in ["ED7,NZUINT,DOT,UINT", "ED7,NZUINT,DOT,NZUINT"] or \ + (config.ALLOW_ZERO_WIDTH_EDS and (type_string in \ + ["ED7,UINT,DOT,UINT", "ED7,UINT,DOT,NZUINT"])): + ed = get_edit_descriptor_obj(tokens[0].value) + ed.width = tokens[1].value + ed.decimal_places = tokens[3].value + ed.exponent = None + elif type_string in ['ED7,NZUINT,DOT,NZUINT,ED7,NZUINT', \ + 'ED7,NZUINT,DOT,NZUINT,ED7,UINT', \ + 'ED7,NZUINT,DOT,NZUINT,ED7,INT', \ + 'ED7,NZUINT,DOT,UINT,ED7,NZUINT', \ + 'ED7,NZUINT,DOT,UINT,ED7,UINT', \ + 'ED7,NZUINT,DOT,UINT,ED7,INT'] or \ + (config.ALLOW_ZERO_WIDTH_EDS and (type_string in \ + ['ED7,UINT,DOT,NZUINT,ED7,NZUINT', \ + 'ED7,UINT,DOT,NZUINT,ED7,UINT', \ + 'ED7,UINT,DOT,NZUINT,ED7,INT', \ + 'ED7,UINT,DOT,UINT,ED7,NZUINT', \ + 'ED7,UINT,DOT,UINT,ED7,UINT', \ + 'ED7,UINT,DOT,UINT,ED7,INT'])): + ed = get_edit_descriptor_obj(tokens[0].value) + ed.width = tokens[1].value + ed.decimal_places = tokens[3].value + ed.exponent = tokens[5].value + else: + raise InvalidFormat('%s has invalid neighbouring token' % tokens[0]) + return ed + +def _read_ed8(tokens): + # Of form kX only, where k is a signed integer, may omit comma if followed + # by Type 5 or 7 edit descriptor + type_string = ",".join([t.type for t in tokens]) + if type_string in ["NZUINT,ED8", "UINT,ED8", "INT,ED8"]: + ed = get_edit_descriptor_obj(tokens[1].value) + ed.scale = tokens[0].value + else: + raise InvalidFormat('%s has invalid neighbouring token' % tokens[0]) + return ed + +def _read_ed9(tokens): + # Of form X only, may omit comma either side + type_string = ",".join([t.type for t in tokens]) + if type_string == "ED9": + ed = get_edit_descriptor_obj(tokens[0].value) + else: + raise InvalidFormat('%s has invalid neighbouring token' % tokens[0]) + return ed + +def _read_ed10(tokens): + # Of form X only, may omit following comma and leading comma if no repeat + type_string = ",".join([t.type for t in tokens]) + if type_string == "ED10": + ed = get_edit_descriptor_obj(tokens[0].value) + else: + raise InvalidFormat('%s has invalid neighbouring token' % tokens[0]) + return ed + + +# Functions that pre-process the token list + +def _remove_outer_parens(tokens): + # Finally, remove outer parens is there are any + if (tokens[0].type == 'LEFT_PARENS') and (tokens[-1].type == 'RIGHT_PARENS'): + tokens = tokens[1:-1] + return tokens + + +# Run some tests if run as a script + +#if __name__ == '__main__': +# import doctest +# import os +# from _lexer import lexer +# globs = {'lexer' : lexer, 'parser' : parser} +# # Need to normalize whitespace since pasting into VIM converts tabs to +# # spaces +# doctest.testfile(os.path.join('tests', 'parser_test.txt'), \ +# globs=globs, optionflags=doctest.NORMALIZE_WHITESPACE) diff --git a/pyne/fortranformat/check_version.txt b/pyne/fortranformat/check_version.txt new file mode 100644 index 0000000000..f904e43186 --- /dev/null +++ b/pyne/fortranformat/check_version.txt @@ -0,0 +1,3 @@ +F95 - H edit descriptor no longer exists +F95 - B, O, Z, QuoteMark edit descriptors introduced +F95 - Slash is now repeatable \ No newline at end of file diff --git a/pyne/fortranformat/config.py b/pyne/fortranformat/config.py new file mode 100644 index 0000000000..ae76bcf47d --- /dev/null +++ b/pyne/fortranformat/config.py @@ -0,0 +1,64 @@ +import sys +import os + +# Should all edit descriptor values be returned even if they were not +# written to? +RET_WRITTEN_VARS_ONLY = False +# Should 'None' values be returned when no record is available to read +# from or the FORTRAN 'default'? +RET_UNWRITTEN_VARS_NONE = True +# The order in which edit desciptors are tried by default when G edit +# descriptor encountered on input +G_INPUT_TRIAL_EDS = ['F', 'L', 'A'] +# Contrary to specification, many compilers allow zero width edit +# descriptors +ALLOW_ZERO_WIDTH_EDS = True +# Set the characters that separate the records +RECORD_SEPARATOR = '\n' + +# The maximum size for an integer +if sys.version_info[0] >= 3: + PROC_MAXINT = sys.maxsize +else: + PROC_MAXINT = sys.maxint +# Processor dependant default for including leading plus or not +PROC_INCL_PLUS = False +# Option to allow signed binary, octal and hex on input (not a FORTRAN feature) +PROC_ALLOW_NEG_BOZ = False +# Prcessor dependant padding character +PROC_PAD_CHAR = ' ' +# Interpret blanks or jsut a negative as a zero, as in ifort behaviour +PROC_NEG_AS_ZERO = True +# Show a sign for zero? +PROC_SIGN_ZERO = False +PROC_MIN_FIELD_WIDTH = 46 +PROC_DECIMAL_CHAR = '.' +G0_NO_BLANKS = False +PROC_NO_LEADING_BLANK = False +# The default value if BN, BZ edit descriptors are not specified +PROC_BLANKS_AS_ZEROS = False + +def reset(): + global RET_WRITTEN_VARS_ONLY, RET_UNWRITTEN_VARS_NONE, PROC_INCL_PLUS, \ + PROC_ALLOW_NEG_BOZ, PROC_PAD_CHAR, PROC_NEG_AS_ZERO, PROC_SIGN_ZERO, \ + PROC_MIN_FIELD_WIDTH, PROC_DECIMAL_CHAR, G0_NO_BLANKS, \ + PROC_NO_LEADING_BLANK, PROC_BLANKS_AS_ZEROS, PROC_MAXINT, G_INPUT_TRIAL_EDS, \ + ALLOW_ZERO_WIDTH_EDS + G_INPUT_TRIAL_EDS = ['F', 'L', 'A'] + if sys.version_info[0] >= 3: + PROC_MAXINT = sys.maxsize + else: + PROC_MAXINT = sys.maxint + RET_WRITTEN_VARS_ONLY = False + RET_UNWRITTEN_VARS_NONE = True + PROC_INCL_PLUS = False + PROC_ALLOW_NEG_BOZ = False + PROC_PAD_CHAR = ' ' + PROC_NEG_AS_ZERO = True + PROC_SIGN_ZERO = False + PROC_MIN_FIELD_WIDTH = 46 + PROC_DECIMAL_CHAR = '.' + G0_NO_BLANKS = False + PROC_NO_LEADING_BLANK = False + PROC_BLANKS_AS_ZEROS = False + ALLOW_ZERO_WIDTH_EDS = True diff --git a/pyne/fortranformat/spec/examples/Note.txt b/pyne/fortranformat/spec/examples/Note.txt new file mode 100644 index 0000000000..38df5b1554 --- /dev/null +++ b/pyne/fortranformat/spec/examples/Note.txt @@ -0,0 +1,5 @@ +See followinf files: + +gcc-4.4.0/libgfortran/io/read.f +gcc-4.4.0/libgfortran/io/write.f +gcc-4.4.0/libgfortran/io/format.f diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog new file mode 100644 index 0000000000..b3c667c490 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog @@ -0,0 +1,274 @@ +2009-04-21 Release Manager + + * GCC 4.4.0 released. + +2009-04-08 Janus Weil + + PR fortran/38152 + * trans-decl.c (gfc_get_symbol_decl): Correctly set decl location for + procedure pointer decls. + +2009-04-04 Paul Thomas + + Backport from mainline: + PR fortran/39519 + * parse.c (parse_derived): Do not break on finding pointer, + allocatable or private components. + +2009-04-03 Tobias Burnus + + PR fortran/39594 + * resolve.c (resolve_common_vars): Add FL_VARIABLE to symbol + if it is not a procedure pointer. + * primary.c (match_actual_arg): Ditto. + +2009-03-30 Jakub Jelinek + + * trans-types.c (gfc_sym_type, gfc_return_by_reference): For + sym->attr.result check sym->ns->proc_name->attr.is_bind_c. + +2009-03-18 Ralf Wildenhues + + * lang.opt: Unify help texts for -I, -Wconversion, -d, -fopenmp, + and -fpreprocessed. + +2009-03-06 Alexandre Oliva + + * simplify.c (gfc_simplify_transfer): Zero-initialize the + buffer. + +2009-02-27 Tobias Burnus + + PR fortran/39309 + * module.c (read_md5_from_module_file): Add missing quote. + +2009-02-27 Tobias Burnus + + PR fortran/39309 + * module.c (read_md5_from_module_file): Include mod version + in had-changed test. + +2009-02-26 Paul Thomas + + PR fortran/39295 + * interface.c (compare_type_rank_if): Return 1 if the symbols + are the same and deal with external procedures where one is + identified to be a function or subroutine by usage but the + other is not. + +2009-02-26 Paul Thomas + + PR fortran/39292 + * trans-array.c (gfc_conv_array_initializer): Convert all + expressions rather than ICEing. + +2009-02-21 Thomas Koenig + + PR fortran/38914 + * array.c (ref_dimen_size): Rename to gfc_ref_dimen_size, + make global. Change function name in error messages. + (ref_size): Change ref_dimen_size to gfc_ref_dimen_size. + (gfc_array_ref_shape): Likewise. + * gfortran.h: Add prototype for gfc_ref_dimen_size. + * simplify.c (simplify_bound_dim): Add ref argument. + If the reference isn't a full array, return one for + the lower bound and the extent for the upper bound. + (simplify_bound): For array sections, take as from the + argument. Add reference to all to simplify_bound_dim. + +2009-02-19 Daniel Franke + + * scanner.c (load_line): At end of line, skip '\r' without setting + the truncation flag. + +2009-02-18 Daniel Kraft + + * gfortran.texi: New chapter about compiler characteristics. + (Compiler Characteristics): Document KIND type parameters here. + +2009-02-18 Tobias Burnus + + * intrinsic.texi (MALLOC): Make example more portable. + +2009-02-13 Mikael Morin + + PR fortran/38259 + * module.c (gfc_dump_module,gfc_use_module): Add module + version number. + +2009-02-13 Paul Thomas + + PR fortran/36703 + PR fortran/36528 + * trans-expr.c (gfc_conv_function_val): Stabilize Cray-pointer + function references to ensure that a valid expression is used. + (gfc_conv_function_call): Pass Cray pointers to procedures. + +2009-02-03 Jakub Jelinek + + * gfortranspec.c (lang_specific_driver): Update copyright notice + dates. + +2009-01-28 Paul Thomas + + PR fortran/38852 + PR fortran/39006 + * trans-intrinsic.c (gfc_conv_intrinsic_bound): Use the array + descriptor ubound for UBOUND, when the array lbound == 1. + +2009-01-27 Daniel Kraft + + PR fortran/38883 + * trans-stmt.c (gfc_conv_elemental_dependencies): Create temporary + for the real type needed to make it work for subcomponent-references. + +2009-01-21 Daniel Kraft + + * trans-stmt.c (gfc_conv_elemental_dependencies): Cleaned up comment. + +2009-01-20 Paul Thomas + + PR fortran/38907 + * resolve.c (check_host_association): Remove the matching to + correct an incorrect host association and use manipulation of + the expression instead. + +2009-01-20 Tobias Burnus + + * invoke.texi (RANGE): RANGE also takes INTEGER arguments. + +2009-01-19 Mikael Morin + + PR fortran/38859 + * simplify.c (simplify_bound): Don't use array specification + if variable or component has subsequent references. + +2009-01-17 Paul Thomas + + PR fortran/38657 + * module.c (write_common_0): Add argument 'this_module' and + check that non-use associated common blocks are written first. + (write_common): Call write_common_0 twice, once with true and + then with false. + +2009-01-17 Paul Thomas + + PR fortran/34955 + * trans-intrinsic.c (gfc_conv_intrinsic_array_transfer): Has + been absorbed into gfc_conv_intrinsic_transfer. All + references to it in trans-intrinsic.c have been changed + accordingly. PR fixed by using a temporary for scalar + character transfer, when the source is shorter than the + destination. + +2009-01-17 Paul Thomas + + PR fortran/38657 + * module.c (write_common_0): Revert patch of 2009-01-05. + +2009-01-16 Janus Weil + + PR fortran/38152 + * expr.c (gfc_check_pointer_assign): Allow use-associated procedure + pointers as lvalue. + * trans-decl.c (get_proc_pointer_decl,gfc_create_module_variable): + Enable procedure pointers as module variables. + +2009-01-14 Steven G. Kargl + + * ChangeLog-2007: Clean out svn merge droppings. + +2009-01-10 Paul Thomas + + PR fortran/38763 + * target-memory.c (encode_derived): Encode NULL. + +2009-01-10 Paul Thomas + + PR fortran/38765 + * resolve.c (check_host_association): Use the symtree name to + search for a potential contained procedure, since this is the + name by which it would be referenced. + +2009-01-06 Thomas Koenig + + PR fortran/38220 + * interface.c (gfc_procedure_use): Don't warn about functions + from ISO_C_BINDING. + * symbol.c (generate_isocbinding_symbol): Mark c_loc and + c_funloc as pure. + +2009-01-05 Paul Thomas + + PR fortran/38657 + * module.c (write_common_0): Use the name of the symtree rather + than the common block, to determine if the common has been + written. + +2009-01-05 Daniel Franke + + PR fortran/37159 + * check.c (gfc_check_random_seed): Added size check for GET + dummy argument, reworded error messages to follow common pattern. + +2009-01-05 Thomas Koenig + + PR fortran/38672 + * trans-types.c (gfc_get_derived_type): Check for the + presence of derived->ns->proc_name before + accessing derived->ns->proc_name->attr.flavor . + * resolve.c (resolve_symbol): Likewise. + +2009-01-05 Paul Thomas + + PR fortran/38665 + * gfortran.h : Add bit to gfc_expr 'user_operator' + * interface.c (gfc_extend_expr): Set the above if the operator + is substituted by a function. + * resolve.c (check_host_association): Return if above is set. + +2009-01-04 Mikael Morin + + PR fortran/35681 + * ChangeLog-2008: Fix function name. + + PR fortran/38487 + * dependency.c (gfc_check_argument_var_dependency): + Move the check for pointerness inside the if block + so that it doesn't affect the return value. + + PR fortran/38669 + * trans-stmt.c (gfc_trans_call): + Add the dependency code after the loop bounds calculation one. + +2009-01-04 Daniel Franke + + * intrinsic.c (do_simplify): Removed already implemented TODO. + +2009-01-04 Daniel Franke + + PR fortran/38718 + * simplify.c (gfc_simplify_merge): New. + * intrinsic.h (gfc_simplify_merge): New prototype. + * intrinsic.c (add_functions): Added simplification for MERGE. + +2009-01-04 Mikael Morin + + PR fortran/38536 + * gfortran.h (gfc_is_data_pointer): Added prototype + * resolve.c (gfc_iso_c_func_interface): + Use gfc_is_data_pointer to test for pointer attribute. + * dependency.c (gfc_is_data_pointer): + Support pointer-returning functions. + +2009-01-03 Daniel Franke + + * symbol.c (save_symbol): Don't SAVE function results. + +2009-01-03 Paul Thomas + + PR fortran/38594 + * resolve.c (resolve_call): When searching for proper host + association, use symtree rather than symbol. For everything + except generic subroutines, substitute the symtree in the call + rather than the symbol. diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2002 b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2002 new file mode 100644 index 0000000000..222dc0bf15 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2002 @@ -0,0 +1,333 @@ +2002-12-29 Paul Brook + + * trans-array.c: Document calling convention for arrays. + +2002-12-19 Paul Brook + + * trans-intrinsic.c (g95_conv_intrsinsic_function): Remove incorrect + assertion. Remove intrinsic subroutine G95_ISYM_* cases. Always pass + optional parameters for some intrinsics. + (g95_is_intrinsic_libcall): Add G95_ISYM_RESHAPE. + * trans-expr.c (g95_conv_function_call): Pass NULL for absent + optional parameters. + * trans.h (g95_se): Add ignore_optional flag. + +2002-12-15 Paul Brook + + * trans-array.c (g95_conv_array_parameter): Fix partial rank sections. + * trans-decl.c (g95_generate_function_code): Use TDI_original. + +2002-12-14 Paul Brook + + * trans-stmt.c (g95_trans_call): Use resolved symbol name. + +2002-12-12 Paul Brook + + * trans-array.c (g95_trans_array_constructor_subarray): Fully + initialize the scalarizer. + (various): Update to new format of g95_expr->value.constructor. + +2002-12-08 Paul Brook + + * trans-array.c (g95_put_offset_into_var): New function. + (g95_trans_array_constructor_subarray): New function. + (g95_trans_array_constructor_value): Use it. + (g95_array_cons_size): Don't abort() on array components. + +2002-12-08 Paul Brook + + * Make-lang.in (F95_ADDITIONAL_OBJS): Remove tree-dchain.o. + * support.c: Update #includes. + (statement_code_p, c_size_in_bytes, s_size_type_node): Remove. + * trans-array.c: Update #includes. + * trans.c: Ditto. + * trans-const.c: Ditto. + * trans-io.c: Ditto. + * trans-types.c: Ditto. + (g95_init_types): Set size_type_node. + * trans-decl.c: Update #includes. + (gfor_fndecl_adjust{l,r}): Declare and initialize. + * trans-stmt.c: Update #includes. + (g95_trans_do_while): Generate LABEL_EXPR, not GOTO_EXPR. + (g95_trans_select): Fix check for unbounded ranges. + * trans-expr.c: Update #includes. + (g95_conv_string_tmp): New function. + (g95_conv_concat_op): Use it. + * trans.h (g95_conv_string_tmp, gfor_fndecl_adjust{l,r}): Declare. + * Trans-intrisic.c: Update #includes. + (g95_conv_intrinsic_strcmp): New function. + (g95_conv_intrinsic_adjust): Ditto. + (g95_conv_intrinsic_function: Use them. + +2002-11-30 Paul Brook + + * trans-array.c (g95_walk_function_expr): Handle non-array return by + reference. + * trans-dec.c (g95_build_function_decl): Handle character return + parammeters. + (g95_get_fake_result_decl): Ditto. + (g95_trans_deferred_vars): Ditto. + * trans-expr.c (g95_conv_function_call): Ditto. + (g95_trans_arrayfunc_assign) Limit to array valued functions. + * trans-intrinsic.c (g95_conv_intrinsic_char): New function. + (g95_conv_intrinsic_function): Use it. + * trans-types.c (g95_sym_type): Handle functions returning strings. + (g95_return_by_reference): Ditto. + (g95_get_function_type): Ditto. + +2002-11-18 Paul Brook + + * trans-stmt.c (g95_trans_if): Fix IF statements when the condition + requires a temporary. + (g95_trans_select): Handle computed gotos. + * trans-types.c (g95_build_array_type): Warn about non-functional + assumed shape arrays. + * trans-expr.c (g95_trans_scalar_assign): Correctly handle post + blocks. + * trans-intrinsic.c (g95_conv_intrinsic_round): New function. + (g95_conv_intrinsic_int): New function. + (g95_conv_intrinsic_mod): New function. + (g95_conv_intrinsic_ichar): New function. + (g95_conv_intrinsic_function): Use them. + (g95_conv_intrinsic_dim): Use g95_evaluate_now. + +2002-11-17 Toon Moene + + * trans-types.c (g95_build_array_type): Assumed + sized arrays can have rank > 1. + * trans.c (g95_trans_code): Remove erroneous + warning about CONTINUE. + * trans-expr.c (g95_conv_variable): Remove + erroneous assert. + +2002-11-15 Paul Brook + + * trans-array.c (g95_conv_array_parameter): Check for NULL stride. + +2002-10-31 Paul Brook + + * f95-tree.c: Remove tree copying stuff that's now in gimple.c + * trans-expr.c (g95_conv_component_ref): Handle character string + components. + (g95_conv_string_parameter): Ditto. + * trans-types.c (g95_get_derived_type): Add length decl to caracter + string components. + +2002-10-10 Paul Brook + + * trans-decl.c (gfor_fndecl_size?): Declare and initialize. + * trans-expr.c (g95_conv_function_call): Remove unreliable return value + check. + * trans-intrinsic.c (g95_conv_intrinsic_size): New function. + (g95_conv_intrinsic_function): Handle size and shape intrinsics. + (g95_is_intrinsic_libcall): Add G95_ISYM_SHAPE. + * trans-types.c (pvoid_type_node): Declare and initialize. + * trans-array.c: Fix typo COMPONENT_REF->REF_COMPONENT + (g95_array_allocate): Fix when base==data. + (g95_conv_array_parameter): Correctly handle reduced rank sections. + * trans-io.c (g95_trans_write): Correctly handle string modifiers. + +2002-10-09 Paul Brook + + * (g95_conv_expr_reference): Handle character strings correctly. + +2002-10-07 Paul Brook + + (g95_expand_decl): Rename from f95_expand_decl_stmt and use as + langhook. + * trans-array.c (g95_build_array_initializer): Remove. + (g95_conv_array_initializer): New Function. + (g95_trans_auto_arry_allocation): Cleanup. + (g95_trans_init_character_array): Remove. + * g95spec.c: Link in libgforbegin. + * trans.c (g95_generate_code): Rename main function to MAIN__. + (g95_create_var): New function. + (g95_create_var_np): New function. + (g95_evaluate_now): New function. + (g95_start_block): New function. + (g95_finish_block): New function. + (g95_add_expr_to_block): New function. + (g95_add_block_to_block): New function. + * trans-expr.c (g95_conv_componen_ref): New function. + * Make-lang.in (F95_ADDITIONAL_OBJS): Add gimplify.o. + (F95_OBJS): Add dependency.o. + * f95-lang.c (g95_is_simple_stmt): Remove. + * f95-tree.c (mark_not_simple): New function. + (unshare_all_trees): New function. + (create_tmp_var, create_tmp_alias_var): Remove. + * support.c (declare_tmp_vars, tree_last_decl): Remove. + * trans*: Convert to new IR using GENERIC trees. Don't bother about + SIMPLE/GIMPLE rules, this is now done by Lang-independant code. + +2002-10-01 Paul Brook + + * trans-array.c: Add support for descriptorless arrays. + (g95_conv_array_data): New function. + (g95_conv_array_base): New function. + * trans-array.h: Declare these here. + * trans-decl.c(g95_create_mopdule_variable): Perform variable + initialization and creation here. + (g95_create_module_vars): Instead of here. + * trans.h (G95_TYPE_ARRAY_*: Rename from G95_TYPE_DESCRIPTOR_*. + * trans-intrinsic.c: Ditto. + * trans-types.c (g95_is_nodesc_array): New function. + (g95_get_nodesc_array_type): New function. + (g95_sym_type, g95_get_derived_type): Use them. + * trans-const.c (g95_conv_mpf_to_tree): Remove workaround. + +2002-09-28 Paul Brook + + * trans-const.c (g95_conv_mpf_to_tree): Work around backend bug. + * trans-intrinsic.c (g95_conv_intrinsic_abs): Correctly detect complex + parameters. + +2002-09-24 Paul Brook + + * f95-lang.c (listify): Remove declaration. + (expand_function_body): Use optimize >=1 instead of flag_tree_saa. + (listify) + * f95-tree.c (get_name): New function. + * trans.c (module_namespace): Remove. + * trans-decl.c: Use g95_chainon_list rather than chainon(listify()). + * trans-types.c: Ditto. + +2002-09-19 Paul Brook + + * trans-array.c (g95_get_array_cons_size): New Function. + (g95_con_ss_startstride): Handle Array constructors. + (g95_conv_loop_setup): Ditto. + (g95_conv_array_parameter): Ditto. + * tras-decl.c (g95_finish_var_decl): Make initializes variables + static. + +2002-09-19 Paul Brook + + * trans.c (g95_simple_fold_tmp): Detect variables inside + NON_LVALUE_EXPR. + * trans-stmt.c (g95_trans_arithmetic_if): Implement this. + +2002-09-18 Steven Bosscher + + * Make-lang.in (F95_ADDITIONAL_OBJS): Add tree-ssa-dce.o + +2002-09-14 Paul Brook + + * trans.c (g95_create_module_variable): Move to trans-decl.c. + * trans-const.c (g95_conv_string_init): New Function. + * trans-const.h: Declare it. + * trans-decl.c (g95_get_symbol_decl): Handle initializers for static + variables. Don't bail on intrinsic symbols. + (get_extern_function_decl): Handle specific intrinsic functions. + * trans-types.c (g95_sym_type): Dummy functions don't return + reference types. + * trans-array.c (g95_build_array_initializer): New Function. + (g95_trans_auto_array_allocation): Build initializer for static decls. + Don't use mpz_addmul, it's GMP4 only. + +2002-09-12 Paul Brook + + * trans-decl.c (g95_generate_code): Fix thinko with return variable. + (g95_get_extern_function_decl, g95_build_function_decl): Mangle + assembler names for module procedures. + +2002-09-11 Tobias Schlueter + + * trans-array.c,h trans-expr.c, trans-stmt.c: Correct spelling of + dependency/ + +2002-09-10 Paul Brook + + * trans-array.c: Change format of G95_SS_TEMP strictures. + (g95_check_fncall_dependancy): New function. + (trans_dummy_array_bias): stride[n], not stride[n-1]. for calculating + offsets. + * trans-decl.c (g95_get_symbol_decl): move assertion after handling of + result variables. + (g95_build_function_decl): Don't assume result arrays are packed. + (g95_trans-deferred-vars): Handle array result variables. + (g95_generate_fuction_code): Clear saved_function_decls. + * trans-expr.c (g95_conv_fnction_call): Handle direct array return by + reference. + (g95_trans_arrayfunc_assign): New function. + (g95_trans_assignment): Use it. + * trans.h (g95_ss): Add temp struct for G95_SS_TEMP. + (g95_se): Add direct_byref. + * trans-types.c: Use sym->result rather than sym where appropriate. + * trans-intrinsic.c (g95_conv_intrinsic_funcall): New function. + Update other functions to use this. + (g95_is_intrinsic_libcall): New function. + (g95_conv_intrinsic_function): Add MATMUL and PRODUCT intrinsics. + (g95_walk_intrinsic_function): Ditto. + +2002-09-08 Paul Brook + + * trans-types.c: Change rank field to dtype field in array descriptor. + * trans-array.c: Implement filling of dtype array descriptor field. + * trans-intrinsic.c: Fix broken LEN intrinsic. + +2002-09-07 Paul Brook + + * trans-intrinsic.c: Remove outdated todo intrinsic list. + (g95_get_symbol_for_expr): Remove hack for fortran based intrinsics. + (g95_walk_intrinsic_function): Add MINLOC and MAXLOC. + +2002-09-06 Paul Brook + + * Make-lang.in (F95_ADDITIONAL_OBJS): Add tree_alias_comon.o. + (gt-f95-trans-types.h): Add dependancy information. + * config-lang.in (gtfiles): Add trans-types.c + * f95-lang.c (g95_be_parse_file): Pass error and warning counts + back to top-level code. + * trans-array.c, trans-types.c: Change format of array descriptor. + (g95_conv_descriptor_dimension): New function. + * trans-types.h (g95_conv_descriptor_rank): define. + * trans-intrinsic.c: Implement PRODUCT, COUNT. MINLOC and MAXLOC + intrinsics. + +2002-09-02 Steven Bosscher + + * trans-array.c, trans-types.c: Add rank information to descriptor. + +2002-09-06 Tobias Schlueter + + * trans-stmt.c (g95_trans_allocate): Fix when ref==NULL. + +2002-09-04 Paul Brook + + * f95-lang.c (g95_create_decls): New function. + (g95_init): Move initialization of external decls to above, and call + from g95_be_parse_file. + * trans.c (g95_finish_stmt): Don't amputate the decl chain. + * trans-types.c (g95_init_types): Always name integer and char types. + (g95_get_array_type_bounds): TYPE_NAME may be a TYPE_DECL. + +2002-09-02 Steven Bosscher + + * Make-lang.in: Add options.c to F95_PARSER_OBJS + +2002-09-02 Paul Brook + + * g95_generate_code: Clear the attr for __fortran_main. + * trans-types.c (g95_finish_type): New function. + * g95_init_io_state_type: Use g95_finish_type. + * g95_conv_intrinsic_anyall: Fix thinko in result initialization. + +2002-09-01 Paul Brook + + * README.backend: Warn about the dangers of extra config.h files. + Remove obsolete libgfor stuff. + * config-lang.in: Add target-libgfor dependancy. + * g95_conv_mpf_to_tree: Use & free allocated buffer p rather than buff. + +2002-09-01 Toon Moene + + * g95_conv_mpz_to_tree: Free storage pointed to by q, + not by buff. + +2002-08-30 Paul Brook + + * trans-intrinsic.c (g95_conv_intrinsic_function, + g95_walk_intrinsic_function): Added ANY and ALL. + (g95_conv_intrinsic_anyall): New function. + * iresolve.c (g95_resolve_any, g95_resolve_all): Include rank in + mangled name diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2003 b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2003 new file mode 100644 index 0000000000..127de310ba --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2003 @@ -0,0 +1,2339 @@ +2003-12-26 Feng Wang + + * dump-parse-tree.c (gfc_show_code_node): Add ASSIGN and ASSIGNED GOTO + dumping. + * gfortran.h (gfc_statement): New ST_LABEL_ASSIGNMENT. + (gfc_exec_op): New EXEC_LABEL_ASSIGN. + (symbol_attribute):New variable attribute: assign. + * io.c (resolve_tag):Integer variable is allowed. + (match_dt_format): Add ASSIGN statement. Set assign flag. + * match.c (gfc_match_if): Change ST_NONE to ST_LABEL_ASSIGNMENT. + (gfc_match_assign): Add ASSIGN statement. Set assign flag. + (gfc_match_goto): Add ASSIGNED GOTO statement. Set assign flag. + * parse.c (decode_statement): Add ST_LABEL_ASSIGNMENT. + (next_statement): Add ST_LABEL_ASSIGNMENT. + (gfc_ascii_statement): Add ST_LABEL_ASSIGNMENT. + * resolve.c (resolve_code): Resolve ASSIGN and ASSIGNED GOTO statement. + (resolve_blocks): Resolve ASSIGNED GOTO statement label list. + * st.c (gfc_free_statement): Add EXEC_LABEL_ASSIGN. + * trans-decl.c (gfc_get_symbol_decl): Create the shadow variable for + assign. Put them into the stuct lang_decl. + * trans-io.c (set_string): Add the assign statement. + * trans-stmt.c (gfc_trans_label_assign): New function. + (gfc_trans_goto): Translate ASSIGNED GOTO statement. + * trans-stmt.h (gfc_trans_label_assign): Added function prototype. + * trans.c (gfc_trans_code): Add EXEC_LABEL_ASSIGN. + * trans.h (lang_decl):Add shadow variable decl tree needed by assign. + (GFC_DECL_ASSIGN_ADDR(node)): New macro to access this. + (GFC_DECL_ASSIGN(node)): New macro to access flag. + +2003-12-31 Huang Chun + + PR fortran/13434 + * trans-intrinsic.c (gfc_conv_intrinsic_minmaxval): Fixed bug in + minval/maxval. + +2003-12-22 Toon Moene + + * options.c (gfc_init_options): Set flag_argument_noalias to 2, to indicate + that arguments to subroutines/functions can't alias themselves, nor global + memory. + +2003-12-20 Steven Bosscher + + * trans-expr.c (gfc_conv_expr_op): Fold the result expression. + * trans.c (gfc_add_modify_expr, gfc_add_expr_to_block): Likewise. + +2003-12-12 Huang Chun + + * primary.c (match_substring): Fix substring bug for start point + or end point is NULL. + * trans-expr.c (gfc_conv_substring): Ditto + * trans-types.c (gfc_sym_type): Get correct type of scalar + character variables. + * trans-intrinsic.c (gfc_conv_intrinsic_len): Handle character in + derived type. + +2003-12-10 Richard Henderson + + * options.c (gfc_post_options): Don't ever use rtl inlining. + +2003-12-05 Canqun Yang + + * trans-common.c: Re-implement COMMON blocks and EQUIVALENCE lists. + * trans-equivalence.c: Remove. + * trans-decl.c (gfc_get_symbol_decl): Update to match. + (gfc_generate_function_code): Ditto. + * trans-array.c (gfc_conv_array_parameter): Ditto. + * Make-lang.in (F95_OBJS): Remove fortran/trans-equivalence.o + (F95_ADDITIONAL_OBJS): Add stor-layout.o + * trans.h (gfc_trans_equivalence): Remove. + * gfortran.h (struct gfc_equiv): Add used field. + (struct gfc_symbol): Remove addr_base, addr_offset, equiv_ring, + equiv_offset fields. + +2003-12-05 Richard Henderson + + * trans.c (gfc_build_addr_expr): New. + (gfc_build_indirect_ref, gfc_build_array_ref): New. + * trans.h: Declare them. + * trans-array.c, trans-expr.c, trans-intrinsic.c, trans-io.c, + trans-stmt.c, trans.c (*): Use them. + + * f95-lang.c (gfc_post_options): Remove dead prototype. + * trans-array.c (gfc_trans_deferred_vars): Remove unused variable. + * trans-stmt.c (gfc_evaluate_where_mask): Fix temporary_list + allocation size. + +2003-12-01 Feng Wang + + * io.c (gfc_match_format): Check for missing format label. + +2003-11-30 Huang Chun + + PR fortran/13155 + * trans-decl.c (gfc_sym_mangled_function_id): Don't mangle symbols + from interfaces in modules. + +2003-11-30 Paul Brook + + * trans-array.c (gfc_trans_g77_array): Make non-static. + (gfc_trans_assumed_size): Remove. + (gfc_trans_dummy_array_bias): Explicitly free temporary. + * trans-array.h (gfc_trans_g77_array): Add prototype. + (gfc_trans_assumed_size): Remove. + * trans-decls.c (gfor_fndecl_push_context): Remove. + (gfor_fndecl_pop_context): Remove. + (gfc_build_function)decls): Don't create them. + (gfc_trans_deferred_vars): Update to match. Remove dead code. + * trans-stmt.c (gfc_trans_pointer_assign_need_temp): Free temp. + +2003-11-30 Kejia Zhao + + * trans-array.c (gfc_conv_array_parameter): Simplify + array argument passing for array name actual argument. + * trans-expr.c (gfc_conv_function_call): Ditto + * trans-types.c (gfc_is_nodesc_array):Ditto. + +2003-11-30 Paul Brook + + * f95-lang.c (gfc_post_options): Move ... + * options.c (gfc_post_options): .. to here. Handle inlining options. + * gfortran.h (gfc_post_options): Add prototype. + +2003-11-28 Richard Henderson + + * trans.c (gfc_create_var_np): Use create_tmp_var_raw. + +2003-11-28 Huang Chun + + * trans.h (has_alternate_specifier): New global variable. + * match.c (gfc_match_call): Handle actual arguments associated with + alternate return indicators. + * trans-expr.c (gfc_conv_function_call): Ditto + * trans-stmt.c (gfc_trans_call): Ditto + (gfc_trans_return): Handle return statement with value. + * trans-decl.c (gfc_generate_function_code): Handle functions with + asterisk dummy. + (gfc_get_fake_result_decl): Ditto + * trans-types.c (gfc_get_function_type): Ditto + * resolve.c (resolve_actual_arglist): Check alternate return indicators. + (resolve_formal_arglist): Check asterisk dummy. + +2003-11-27 Paul Brook + + * trans-array.c (gfc_tran_allocate_array_storage): Use new memory + allocation interface. + (gfc_conv_ array_parameter): Ditto. + (gfc_trans_auto_array_allocation): Ditto. Also free the memory. + * trans-array.c: Update prototype. + * trans-decl.c (gfc_build_builtin_function_decls): Update prototypes. + (gfc_trans_auto_character_variable): Use new memory alloc interface. + * trans-expr.c (gfc_conv_string_tmp): Ditto. + (gfc_conv_function_call): Use gfc_conv_string_tmp. + * trans-stmt.c (gfc_do_allocate): Use new memory alloc interface. + * trans-intrinsic.c (gfc_conv_intrinsic_trim): Ditto. + * trans.h (gfc_ss_info): Remove unused pdata field. + * trans.c (gfc_create_var_np): Change T to V. + +2003-11-26 Richard Henderson + + * mathbuiltins.def: Move acos, asin, cosh, log10, sinh, tanh from ... + * trans-intrinsic.c (gfc_intrinsic_map): ... here. Add SCALE, + FRACTION, NEAREST, SET_EXPONENT. + (gfc_intrinsic_map_t): Add libm_name, complex_available, is_constant. + Fix GTY marking. Remove unnecessary const's. + (LIBM_FUNCTION): Rename from I_LIB. + (LIBF_FUNCTION): New. + (gfc_get_intrinsic_lib_fndecl): Handle libm and libgfortran naming + conventions. Assume the expr signature is correct. Mark const. + (gfc_conv_intrinsic_exponent): Use library functions. + (gfc_conv_intrinsic_set_exponent): Remove. + (gfc_conv_intrinsic_scale): Remove. + (gfc_conv_intrinsic_nearest): Remove. + (gfc_conv_intrinsic_fraction): Remove. + (gfc_conv_intrinsic_function): Update. + * trans-decl.c (gfor_fndecl_math_exponent4): New. + (gfor_fndecl_math_exponent8): New. + (gfc_build_intrinsic_function_decls): Set them. + * trans.h: Declare them. + +2003-11-25 Canqun Yang + + * trans-common.c (gfc_layout_global_equiv): Locate the error for + underflow COMMON block. + (gfc_trans_one_common): Fix bug for size of COMMON block containing + EQUIVALENCE object. Also fix typo in an error message. + +2003-11-25 Diego Novillo + + * Make-lang.in: Add check-gfortran to lang_checks. + (check-f95): Alias for check-gfortran. + +2003-11-25 Jason Merrill + + * Make-lang.in (f95.tags): Create TAGS.sub files in each + directory and TAGS files that include them for each front end. + +2003-11-24 Paul Brook + + PR fortran/13154 + * trans-decl.c (gfc_greate_module_variable): Skip COMMON blocks. + +2003-11-24 Paul Brook + + * expr.c (simplify_const_ref): Return SUCCESS for things we don't + handle. + * resolve.c (gfc_resolve_expr): Resolve contents before rank/shape. + +2003-11-24 Paul Brook + + PR fortran/13105 + * array.c (gfc_array_ref_shape): Handle elemental dimensions. + * trans-array.c (gfc_trans_preloop_setup): Use correct dim lookup. + +2003-11-20 Richard Henderson + + * trans-array.c (gfc_trans_allocate_array_storage): Use convert. + (gfc_conv_array_base): Likewise. + * trans-decl.c (gfc_trans_auto_character_variable): Likewise. + * trans-expr.c (gfc_conv_string_tmp): Likewise. + * trans-intrinsic.c (gfc_conv_intrinsic_trim): Likewise. + * trans-stmt.c (gfc_trans_character_select): Likewise. + +2003-11-13 Paul Brook + + * trans-decl.c (gfc_sym_mangled_function_id): Dont mangle externals. + +2003-11-13 Canqun Yang + + * resolve.c (gfc_resolve): Also resolve EQUIVALENCE objects. + (resolve_equivalence): New function. + (resolve_equivalence_derived): New function. + +2003-11-12 Richard Henderson + + * trans.c (gfc_trans_code): Use annotate_with_locus instead of + annotate_all_with_locus. + +2003-11-11 Canqun Yang + + * options.c (gfc_init_options): Set flag_max_stack_var_size as 32768. + * trans-decl.c (gfc_finish_var_decl): Modified. + +2003-11-08 Paul Brook + + PR fortran/12704 + * trans-intrinsic.c (gfc_conv_intrinsics_minmaxloc): Handle zero-size + arrays. + +2003-11-06 Paul Brook + + * trans-intrinsic.c (gfc_conv_intrinsics_minmaxloc): Initialize pos. + +2003-11-02 Canqun Yang + + * match.c (gfc_match_stopcode): Assign '0' to stop_code. + +2003-10-27 Anthony Green + + * Make-lang.in (f95.stageprofile): Use tabs, not spaces. + (f95.stagefeedback): Ditto. + +2003-10-27 Andrew Pinski + + PR fortran/12682 + * Make-lang.in (f95.stageprofile): Add. + (f95.stagefeedback): Add. + +2003-10-23 Richard Henderson + + * f96-lang.c (gfc_gimplify_expr): Remove. + (LANG_HOOKS_GIMPLIFY_EXPR): Remove. + (LANG_HOOKS_GIMPLE_BEFORE_INLINING): New. + +2003-10-23 Richard Henderson + + * f95-lang.c (gfc_gimplify_expr): Return gimplify_status. + +2003-10-20 Paul Brook + + * trans-expr.c (gfc_conv_integer_power): Use boolean_type_node. + * trans-stmt.c (gfc_trans_do_while): Ditto. + +2003-10-17 Paul Brook + + * simplify.c (gfc_simplify_shape): Use gfc_array_dimen_size. + +2003-10-17 Paul Brook + + * trans-io.c (gfc_build_io_library_fndecls): Set TREE_PUBLIC. + +2003-10-17 Feng Wang + + * iresolve.c (gfc_resolve_maxloc): Change the result's kind and type. + (gfc_resolve_minloc): Ditto. + * trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc): Use correct types. + Return the value after subtracting the lower bound. + +2003-10-16 Richard Henderson + + * f95-lang.c (expand_function_body): Don't check flag_disable_gimple. + +2003-10-16 Steven Bosscher + + * lang.c: Remove -M option for now, it's in the way for C. + +2003-10-14 Jason Merrill + + * Make-lang.in (f95.tags): New rule. + +2003-10-13 Richard Henderson + + * trans.c (gfc_trans_code): Use annotate_all_with_locus. + +2003-10-13 Paul Brook + + * trans-decl.c (generate_local_decl): Don't create junk variables. + +2003-10-13 Paul Brook + + * resolve.c (resolve_formal_arglist): Use function result decl in + preference to function decl. + +2003-10-12 Richard Henderson + + * f95-lang.c (gfc_define_builtin): New const_p argument. Set + TREE_READONLY. Update all callers. + +2003-10-12 Feng Wang + + * iresolve.c (gfc_resolve_cshift): Change to match implementation. + * trans-intrinsic.c (gfc_conv_intrinsic_function): Remove CSHIFT. + (gfc_is_intrinsic_libcall): Add CSHIFT. + +2003-10-12 Richard Henderson + + * trans-array.c (gfc_trans_static_array_pointer): Set TREE_INVARIANT. + (gfc_trans_array_constructor_value): Likewise. + (gfc_conv_array_initializer): Likewise. + * trans-stmt.c (gfc_trans_character_select): Likewise. + +2003-11-12 Kejia Zhao + + * trans-intrinsic.c (integer_kind_info, real_kind_info): Remove. + +2003-10-11 Huang Chun + + * check.c (gfc_check_repeat): Check arguments are scalar. + (gfc_check_trim): New function. + * intrinsic.h (gfc_check_trim): Add prototype. + * intrinsic.c (add_functions): Use it. + * trans.h (gfor_fndecl_string_trim, gfor_fndecl_string_repeat): + Decalare. + * trans-decl.c: Ditto. + (gfc_build_intrinsic_fucntion_decls): Set them. + * trans-intrinsic.c (gfc_conv_intrinsic_len): Handle result vars. + (gfc_conv_intrinsic_trim): New function. + (gfc_conv_intrinsic_repeat): New function. + (gfc_conv_intrinsic_function): Use them. + +2003-10-11 Huang Chun + + * trans-types.c (gfc_sym_type): Handle result variables. + +2003-10-11 Huang Chun + + * trans-intrinsic.c (gfc_conv_intrinsic_char): Don't use + gfc_get_character_type. + +2003-10-11 Feng Wang + + * trans-expr.c (gfc_conv_variable): Check sym->ts, not the decl. + +2003-10-11 Paul Brook + + * iresolve.c (gfc_resolve_dint, gfc_resolve_dnint): New functions. + (gfc_resolve_dprod): New function. + (gfc_resolve_aint, gfc_resolve_anint): Only base name on arg type. + * intrinsic.h (gfc_resolve_dint, gfc_resolve_dnint): Declare. + (gfc_resolve_dprod): Declare. + * intrinsic.c (add_functions): Use them. + * trans-decl.c (gfc_get_extern_function_decl): Only pass one arg. + +2003-10-06 Richard Henderson + + * f95-lang.c (gfc_init_builtin_functions): Add clzll. + * trans-intrinsic.c (call_builtin_clz): Use it. + +2003-10-05 Paul Brook + + * f95-lang.c (expand_function_body): Call (push|pop)_function_context. + * trans-decl.c (gfc_generate_function_code): Set + cfun->function_end_locus. + +2003-09-24 Jason Merrill + + * f95-lang.c, trans-decl.c: Use DECL_SOURCE_LOCATION instead of + TREE_LOCUS. + +2003-09-21 Lifang Zeng + Paul Brook + + * Make-lang.in (F95_OBJS): Add fortran/data.o. + * array.c (gfc_inser_constructor): New function. + (gfc_get_constructor): New function. + (gfc_free_constructor): Initialize offset and repeat. + (iterator_stack): Remove. + (expand_info): Add offset, component and repeat fields. + (expand_constructor): Set them. + (expand): Set new fields. + (gfc_copy_constructor): Ditto. Avoid recursion. + * gfortran.h: Add prototypes for new functions. + (gfc_constructor): Add offset, component and repeat. + (iteratio_stack): Move to here. + * resolve.c (check_data_variable): Convert data values into variable + initializers. + (traverse_data_list): Build implicit loop chain. + (gfc_resolve): Ditto. + * trans-array.c (gfc_conv_array_intializer): Handle repeat count. + * trans-decl.c (gfc_get_symbol_decl): Use gfc_conv_structure. + * trans-expr.c (gfc_conv_structure): Handle array initializers. + (gfc_conv_expr): Update to match. + * trans.h (gfc_conv_structure): Declare. + * data.c: New file. + +2003-09-20 Kejia Zhao + + * trans.h: Add declarations for gfor_fndecl_si_kind and + gfor_fndecl_sr_kind. + * trans-decl.c (g95_build_intrinsic_function_decls): Build them. + * trans-intrinsic.c (g95_conv_intrinsic_si_kind): New function. + (g95_conv_intrinsic_sr_kind): New function. + (g95_conv_intrinsic_function): Add SELECTED_INT_KIND and + SELECTED_REAL_KIND. + +2003-09-17 Lars Segerlund + + * iresolve.c (gfc_resolve_random_number): Generate _r4 & _r8 + instead of _4 and _8 as postfix for libgfortran calls. + +2003-09-16 Paul Brook + + * array.c (compare_bounds): New function. + (gfc_compare_array_spec): Use it. + +2003-09-14 Paul Brook + + * primary.c (gfc_match_rvalue): Make sure sym->result is set. + * trans-expr.c (gfc_conv_string_parameter): Also allow PRAM_DECLs. + +2003-09-14 Paul Brook + + * check.c (dim_rank_check): Allow assumed bounds if requested. + (gfc_check_lbound): Call it. + (gfc_check_ubound): Ditto. + (gfc_check_size): Change to match. + * simplify.c (gfc_simplify_bound): New function. + (gfc_simplify_lbound): New function. + (gfc_simplify_ubound): New function. + * intrinsic.h: Declare them. + * intrinsic.c (add_functions): Use them. + +2003-09-14 Paul Brook + + * io.c (format_lex): Initialize negative_flag. + (check_format): Intialize repeat. + * trans-io.c (gfc_new_nml_name_expr): Declare static. + (gfc_new_var_expr): Ditto. + +2003-09-14 Paul Brook + + * trans-array.c (gfc_conv_array_initializer): Handle derived types. + * trans-decl.c (gfc_get_symbol_decl): Only do local scalar values. + +2003-09-12 Paul Brook + + * trans-intrinsic.c (gfc_conv_intrinsic_sign): Call fold. + +2003-09-12 Zdenek Dvorak + + * fortran/trans.c (gfc_finish_block): Call rationalize_compound_expr + for a correct expression. + +2003-09-10 Kejia Zhao + + * trans-intrinsic.c (real_compnt_info): New struct. + (prepare_arg_info): New function. + (gfc_conv_intrinsic_set_exponent): New function. + (gfc_conv_intrinsic_scale): New function. + (gfc_conv_intrinsic_nearest): New function. + (gfc_conv_intrinsic_fraction): New function. + (gfc_conv_intrinsic_exponent): New function. + (gfc_conv_intrinsic_spacing): New function. + (gfc_conv_intrinsic_rrspacing): New function. + (gfc_conv_intrinsic_function): Use them. + +2003-08-24 XiaoQiang Zhang (zhangapache@yahoo.com> + + * trans-const.c (gfc_conv_mpz_to_tree): Fix bug, parameter for + build_int_2 changed from (high, low) to (low, high). + * trans-io.c (ioparm_namelist_name, ioparm_namelist_name_len, + ioparm_namelist_read_mode, iocall_set_nml_val_int, + iocall_set_nml_val_float, iocall_set_nml_val_char, + iocall_set_nml_val_complex, iocall_set_nml_val_log): New declaration. + (gfc_build_io_library_fndecls): Add variable initialization. + (gfc_new_nml_name_expr, get_new_var_expr): New function. + (build_dt): Add namelist support. + * io.c (value): New variable. + (check_format): Support FMT_H now. + +2003-09-07 Paul Brook + + * io.c (gfc_resolve_dt): Error if format label is not defined. + +2003-09-07 Kejia Zhao + + * trans-intrinsic.c (gfc_conv_intrinsic_aint): Fix two bugs. One is + about case_switch's break. The other is about building the condition + statement tree, which judges the argument in the range of the + corresponding integer type. + * trans-intrinsic.c (gfc_conv_intrinsic_mod): MOD and MODULO can work + for the large values. + +2003-09-05 Paul Brook + + * f95-lang.c (expand_function_body): Gimplify the function. + +2003-09-04 Jeff Law + + * f95-lang.c (DEFINE_MATH_BUILTIN): C arrays start at + index zero! + +2003-09-04 Paul Brook + + * f95-lang.c (gfc_define_builtin): Also set implicit_built_in_decls. + (gfc_expand_stmt): New function. + (LANG_HOOKS_RTL_EXPAND_STMT): Define. + (expand_function_body): Use tree_rest_of_compilation. + * trans-decl.c (gfc_generate_function_code): Don't free cfun. + +2003-09-03 Jeff Law + + * f95-lang.c (gfc_init_builtin_functions): C arrays start at + index zero! + +2003-08-30 Paul Brook + + * f95-lang.c (builtin_function): Remove #if 0 code. + (gfc_define_builtin): New function. + (gfc_init_builtin_functions): Use mathbuiltins.def not ../builtins.def. + * mathbuiltins.def: New file. + * trans-intrinsic.c (gfc_intrinsic_map_t): Add builtin code fields. + (gfc_intrinsic_map): Use mathbuiltins.def. + (gfc_intrinsic_builtin_t): Remove. + (gfc_build_intrinsic_lib_fndecls): Update. + * trans-types.c (gfc_init_types): Remove redundant initilaization of + signed_size_type_node. + +2003-08-29 Paul Brook + + * arith.c (gfc_real_kinds): Use correct minimum exponents. + +2003-08-22 Kejia Zhao + + * trans-instinsic.c (gfc_conv_intrinsic_mod): Also do MODULO. + (gfc_conv_intrinsic_function): Add MODULO. + +2003-08-22 Jason Merrill + + * trans-array.c (gfc_conv_expr_descriptor): Update use of predicates. + +2003-08-22 Andreas Jaeger + + * Make-lang.in (f95.install-common): Add DESTDIR support. + * (f95.install-info): Likewise. + (f95.uninstall): Likewise. + +2003-08-19 Diego Novillo + + * trans-types.c (gfc_init_types): Initialize + signed_size_type_node with size_type_node. + +2003-08-18 Paul Brook + + * dependency.c (gfc_dependency): New enum. + (check_another_array_ref): Remove. + (gfc_get_array_from_component): Remove. + (get_x): Remove. + (get_range): Remove. + (get_no_of_elements): Use mpz_t, not mpf_t. + (transform_sections): New function. + (gfc_check_range_range): Rename ... + (gfc_check_section_vs_section): ... to this. Use new function. + (gfc_is_inside_range): Rewrite to match. + (gfc_check_element_vs_section): Ditto. + (gfc_check_element_vs_element): Ditto. + (get_deps): Ditto. + (gfc_dep_resolver): Ditto. Remove unused parameter. + * Dependency.h (gfc_check_range_range, gfc_check_element_vs_section, + gfc_check_element_vs_element, gfc_is_inside_range, + gfc_get_array_from_component): Remove prototypes for static functions. + (gfc_dep_resolver): Update prototype. + * trans-array.c (gfc_conv_resolve_dependencies): Change to match. + +2003-08-15 Paul Brook + + * trans-decl.c (gfc_build_qualified_array): Don't add symbols for + return values to parent scope. + (gfc_build_dummy_array_decl): Ditto. + +2003-08-14 Paul Brook + + * trans-stmt.c (gfc_trans_allocate): Handle NULL refs. Allocate the + size of the type, not the pointer. + * resolve.c (resolve_symbol): Give more accurate error message. + +2003-08-10 Paul Brook + + * trans-decl.c (gfc_build_function_decl): Only mangle global symbols. + +2003-08-10 Paul Brook + + * trans-stmt.c (gfc_trans_allocate): Correctly handle non-array derived + type components. + +2003-08-10 Chun Huang + + * resolve.c (resolve_formal_arglist): Resolve STATEMENT function. + (resolve_symbol): Ditto. + * trans-expr.c (gfc_conv_statement_function): New function. + (gfc_conv_function_expr): Use it. + +2003-08-10 Paul Brook + + * trans-array.c (gfc_conv_ss_startstride): Handle functions. + (walk_function_expr): Set section rank. + * trans-intrinsic.c (gfc_walk_intrinsic_libfunc): Ditto. + +2003-08-10 Paul Brook + + * intrinsic.c (add_sym): Prefix names with correct string. + (add_sym_0s): New function. + (add_subroutines): Register abort. + +2003-08-10 Erik Schnetter + + * gfortran.h: Introduce options to control the mangling. + * lang.opt: Likewise. + * options.c (gfc_init_options): Handle the options. + * trans-common.c (gfc_sym_mangled_common_id): New function. + (gfc_build_common_decl): Call it. + * trans-decl.c (gfc_sym_mangled_function_id): New function. + (gfc_get_extern_function_decl, gfc_build_function_decl): Call it. + +2003-08-09 Paul Brook + + * module.c (mio_symbol): Always ouput a namespace for formal args. + (load_needed): Namespace now belong to their proper symbol. + (gfc_dump_module): Change G95=>GFORTRAN. + +2003-08-05 Paul Brook + + * options.c: Force -fg77-calls. + +2003-08-02 Paul Brook + + * Makelang.in: Rename G95_* to GFORTRAN_*. + * All sources: Rename G95_* to GFC_*. + +2003-08-01 Paul Brook + + * fortran/Make-lang.in: Use GMPLIBS. + * fortran/config-lang.in: Set need_gmp. + * trans-expr.c (gfc_conv_variable): Remove incorrect assertion. + +2003-07-27 Andreas Jaeger + + * trans-decl.c (gfc_generate_constructors): Convert prototype to + ISO C90. + * trans-const.c (gfc_init_constants): Likewise. + * trans-intrinsic.c (gfc_build_intrinsic_lib_fndecls): Likewise. + + * gfortranspec.c: Convert to ISO C90. + (lang_specific_driver): Correct copyright, remove ALT_LIBM usage. + +2003-07-26 Paul Brook + + * lang.opt: Add -fdump-parse-tree. + * options.c (gfc_handle_option): Ditto. + * resolve.c (resolve_forall_iterators): Convert to proper type. + * trans-stmt.c (gfc_trans_forall_1): Create temp var with correct type. + +2003-07-26 Paul Brook + + * Makefile.in: Add build dependencies on files common with rest of gcc. + +2003-07-26 Lifang Zeng + + * trans.h: Declare g95_trans_pointer_assignment. + * trans-expr.c (g95_trans_pointer_assignment): New function. + (g95_trans_pointer_assign): Use it. + * trans-stmt.c (g95_trans_forall_1): Handle pointer assignment. + (g95_trans_pointer_assign_need_temp): New function. + +2003-07-26 Paul Brook + + * gfortran.texi: Replace references to g95. + +2003-07-26 Paul Brook + + Rename g95_* to gfc_*. + +2003-07-25 Paul Brook + + * gfortran.h: Rename from g95.h. + * trans-types.c (boolean_type_node, booelan_true_node, + boolean_false_node): Remove. + * trans-types.h: Ditto. + +2003-07-25 Chun Huang + + * parse.c (accept_statement): Implement BLOCK DATA statement. + * trans-expr.c (g95_conv_variable): Fix bug for dereference pointer + variables. + +2003-07-24 Lifang Zeng + + * trans-stmt.c (temporary_list): Define. + (g95_trans_assign_need_temp): New function. + (g95_trans_forall_1): Modified for WHERE. + (g95_trans_where_assign): Modified. + (g95_trans_where_2): Modified. + (g95_evaluate_where_mask): Modified. + (g95_trans_where): Modified. + (g95_get_temp_expr): Removed. + (g95_add_to_where_stmt_list): Removed. + (compute_overall_iter_number): Modified for WHERE. + * trans.h: Remove where_stmt_list. + +2003-07-24 Arnaud Desitter + + * lang.opt: Correct description of options -J and -M. + +2003-07-23 Steven Bosscher + + * lang.opt: Move help text to here. + * lang-options.h: Remove. + +2003-07-23 Arnaud Desitter + * iresolve.c (g95_resolve_transpose): Proper variable in switch. + * simplify.c (g95_simplify_nearest): Fix typo and use a correct test + on kind. + +2003-07-22 Steven Bosscher + Paul Brook + + * check.c (check_rest): Use global pedantic flag. + * io.c (data_desc): Ditto. + * error.c (g95_warning, g95_warning_now): Use global flag. + * f95-lang.c (LANG_HOOKS_HANDLE_OPTION): Rename from DECODE. + (expand_function_body): Update to new prototypes. + (g95_init): Use new option names. + * g95.h (g95_option_t): Standardize names. + (g95_init_options, g95_handle_option): Update prototypes. + * interface.c: Use new option names. + * match.c: Ditto. + * module.c: Ditto. + * parse.c: Ditto. + * primary.c: Ditto. + * resolve.c: Ditto. + * scanner.c: Ditto. + * simplify.c: Ditto. + * symbol.c: Ditto. + * trans-array.c: Ditto. + * trans-expr.c: Ditto. + * trans-types.c: Ditto. + * trans-decl.c: Ditto. + (g95_build_library_function_decl): Remove obsolete VPARAMS. + * trans.h: Ditto. + * options.c (g95_display_help): Remove. + (g95_init_options): Convert to new scheme. + (set_Wall): Ditto + (g95module_option): Ditto, rename from g95_parse_arg. + (g95_handle_module_path_options): New function. + * trans-equivalence.c: Fix error message. + * lang.opt: Corrections. + +2003-07-21 Steven Bosscher + + * lang.opt: New file. + +2003-07-21 Arnaud Desitter + + * decl.c (match_attr_spec): Set colon_seen. + +2003-07-14 Paul Brook + + * trans-array.c: Update comment. + (g95_trans_array_constructor_subarray): Cleanup loopinfo data. + * trans-intrinsic.c (g95_conv_intrinsic_anyall,count,arith, + minmaxloc,minmaxval): Ditto. + * trans-io.c (g95_trans_transfer): Ditto. + * trans-stmt.c: Remove unneeded prototypes. + (generate_loop_for_lhs_to_rhs): Rename vars. Add loop post chain. + (generate_loop_for_rhs_to_temp): Rename vars. Don't share loopinfo. + (compute_inner_temp_size): Remove bits of dead code. Add comments. + Don't share loopinfo. + (compute_overall_iter_number): Declare as static. + (allocate_temp_for_forall_nest): Ditto. + (g95_trans_forall_1): Don't pass shared loopinfo. + * trans.c (g95_start_block): Expand comment. + +2003-07-12 Paul Brook + + * arith.c (g95_index_integer_kind): Remove unused initializer. + * trans-stmt.c (generate_loop_for_temp_to_lhs): Don't multiply array + index by size of element. + (generate_loop_for_rhs_to_temp): Ditto. + (allocate_temp_for_forall_nest): Use element size, not index size. + +2003-07-11 Arnaud Desitter + + * arith.c (g95_index_integer_kind): Add a TODO. + * simplify.c (g95_simplify_nearest): Add a TODO. + +2003-07-09 Chun Huang + + * trans.h: Add declarations for gfor_fndecl_string_scan and + gfor_fndecl_string_verify. + * trans-decl.c (g95_build_intrinsic_function_decls): Build them. + * trans-intrinsic.c (g95_conv_intrinsic_scan): New function. + (g95_conv_intrinsic_verify): New function. + (g95_conv_intrinsic_function): Add SCAN and VERIFY. + * simplify.c (g95_simplify_scan, g95_simplify_verify): Fix bug in case + of parameter 'BACK=.TRUE.' + +2003-07-05 Lifang Zeng + + * trans-stmt.c (iter_info, forall_info): Define. + (g95_trans_forall_block): Remove. + (g95_trans_forall_loop): Use forall info blocks. + (g95_trans_nested_forall_loop): New function. + (g95_do_allocate): Handle things other than logical masks. + (generate_loop_for_temp_to_lhs): New function. + (generate_loop_for_rsh_to_temp): New function. + (compute_inner_temp_size): New function. + (compute_overall_iter_number): New function. + (allocate_temp_for_forall_nest): New function. + (g95_trans_forall): Move body ... + (g95_trans_forall_1): ... to here. Handle loops with temporaries. + +2003-07-02 Paul Brook + + * trans-decl.c (create_index_var, g95_build_qualified_array): Put vars + in correct scope. Change callers to match. + * trans-types.c (g95_get_dtype_cst): Allow rank 7 arrays. + * iresolve.c (g95_resolve_reshape): Only use constant shapes. + +2003-07-02 Paul Brook + + * trans-array.c (g95_conv_loop_setup): Remove dead var. Use + expression shape for all expressions. + * trans-decl.c (g95_symbol_init): Allow adding at very end of list. + +2003-07-03 Arnaud Desitter + + * g95.h (g95_option_t), lang-options.h, options.c (g95_init_options, + g95_parse_arg), intrinsic.c (g95_convert_type): support of + -Wconversion. + * intrinsic.c, g95.h: Add g95_convert_type_warn, + * resolve.c (g95_resolve_index): Call it. + +2003-07-02 Paul Brook + + * iresolve.c (g95_resolve_reshape): Set expression shape. + (g95_resolve_shape): Ditto. + * simplify.c (g95_simplify_shape): Move common code outside condition. + * trans-array.c (g95_conv_array_initializer): Teach it how to count. + +2003-07-01 Arnaud Desitter + + * array.c (g95_array_dimen_size): Deal with EXPR_ARRAY to improve + conformance checks. + +2003-06-29 Paul Brook + + * array.c (g95_simplify_iterator_var): Don't bother with return value. + * expr.c (find_array_element, find_component_ref): New functions. + (remove_subobject_ref): New function. + (simplify_const_ref): Use them. Rename from simplify_component_ref. + (simplify_ref_chain): New function. + (g95_simplify_expr): Use it. Simplify parameter variable subobjects. + (g95_specification_expr): Simplify the expression. + * resolve.c (resolve_operator): Check simplifications return code. + (g95_resolve_expr): Ditto. + +2003-06-26 Paul Brook + + * expr.c (simplify_component_ref): New function. + (g95_simplify_expr): Use it. + * resolve.c (resolve_structure_cons): Handle references. + +2003-06-25 Paul Brook + + * trans-io.c (build_dt): Handle internal units. + +2003-06-25 Canqun Yang + + * trans-common.c (g95_build_common_decl): Array index range starts at 0. + (g95_build_common_decl, g95_layout_global_equiv, g95_trans_one_common): + Use g95_array_index_type instead of integer_type_node. + (g95_build_common_decl, g95_set_common_master_type): Use + g95_character1_type_node instead of char_type_node. + * trans-equivalence.c (g95_layout_local_equiv): As above. + +2003-06-24 Steven G. Kargl + + * g95.h (g95_option_t), options.c (g95_init_options, g95_parse_arg): + remove last remains of -fquiet. + +2003-06-22 Paul Brook + + * resolve.c (resolve_operator): Don't fail if we can't simplify. + (g95_resolve_expr): Ditto. + (resolce_code): Mark as static. + * trans-stmt.c (g95_trans_chaaracter_select): Mark labels because the + gimplifer doesn't (yet). + +2003-06-20 Paul Brook + + * g95.h: Add ST_PAUSE and EXEC_PAUSE. + * match.c (g95_match_if): Add ST_PAUSE. + (g95_match_stopcode): New function. + (g95_match_pause, g95_match_stop): Use it. + * parse.c (g95_ascii_statement): Handle ST_PAUSE. + (decode_stmt, next_statement, parse_executable): Ditto. + * resolve.c (resolve_code): Ditto. + * st.c (g95_free_statement): Ditto. + * trans-stmt.c (g95_trans_pause): New function. + * trans-stmt.h: Declare it. + * trans.c (g95_trans_code): Use it. + * trans-decl.c (gfor_fndecl_pause_numeric, gfor_fndecl_pause_string): + Declare. + (g95_build_builtin_function_decls): Initialize them. + * trans.h: Ditto. + * dump-parse-tree.c (g95_show_code_node): Handle EXEC_PAUSE. + +2003-06-18 Arnaud Desitter + + * io.c (g95_match_open , g95_match_close, g95_match_inquire, + match_filepos): Fix error handling. + +2003-06-18 Arnaud Desitter + + * array.c (spec_dimen_size, ref_dimen_size, g95_array_dimen_size): + Add assertions on arguments. + * resolve.c (expression_shape): Remove useless &. + * simplify.c (get_kind, g95_simplify_bit_size, g95_simplify_digits, + g95_simplify_ibclr, g95_simplify_ibits, g95_simplify_ibset, + g95_simplify_ishft,g95_simplify_ishftc, g95_simplify_maxexponent, + g95_simplify_minexponent, g95_simplify_radix, g95_simplify_range + g95_simplify_rrspacing, g95_simplify_scale, g95_simplify_spacing, + g95_simplify_tan, g95_simplify_tiny): Clean predicates and assertions. + (g95_simplify_not, g95_simplify_scale): Add assertions. + +2003-06-15 Paul Brook + + Clean up stuff to work with the ssa optimizers. + * convert.c (convert): Handle BOOLEAN_TYPEs. + * f95-lang.c (g95_truthvalue_conversion): Implement. + * trans-array.c (g95_trans_array_constructor_value): Group multiple + scalar values. + * trans.h (g95_truthvalue_conversion): Declare. + * trans-intrinsic.c (g95_conv_intrinsic_anyall): Use bool constants. + * trans-stmt.c (g95_trans_character_select): Don't create array + assignments. Mark labels as indirect jump targets. + * trans-types.h (g95_init_types): Use BOOLEAN_TYPE nodes. + (g95_get_dtype_cst): Handle LOGICAL types. + +2003-06-14 Paul Brook + + * f95-lang.c (g95_gimplify_expr): New function. + * trans-array.c (g95_trans_array_constructor_value): Don't create + array assignments. + (g95_conv_expr_descriptor): Rename simple->gimple. + * trans-expr.c (conv_expr_op): Use proper logical operators. + * trans-intrinsic.c (build_fixbound_expr): New function. + (build_fix_expr): Ditto. + (g95_conv_intinsic_aint): Use them. Use builtin functions. + (g95_conv_intrinsic_function): Add FLOOR and CEILING. + +2003-06-10 Arnaud Desitter + + * array.c (g95_compare_array_spec): Remove unreachable code. + * expr.c (g95_copy_expr): Likewise. + * intrinsic.c (g95_convert_type): Likewise. + * misc.c (g95_code2string): Likewise. + * simplify.c (g95_simplify_ishft, g95_simplify_real, + g95_simplify_reshape, g95_simplify_sign, g95_simplify_sqrt): Likewise. + * trans-stmt.c (g95_trans_select): Likewise. + * primary.c (extend_ref): Add an assertion. + * simplify.c (g95_convert_constant): Add const. + * intrinsic.h: Remove g95_check_x_ni. + * f95-lang.c (g95_finish): Call g95_release_include_path. + +2003-06-10 Arnaud Desitter + + * resolve.c (resolve_contained_functions): Fix typo introduced on + 2003-01-13. + +2003-06-09 Paul Brook + + * g95.h: Include system.h not hwint.h. + * many: use safe-ctype.h not ctype.h. Change isalpha -> ISALPHA, etc. + * misc.c (g95_getmem): Use xmalloc/memset instead of calloc. + +2003-06-09 Paul Brook + + * g95.h (g95_symbol): Add fields for COMMON and EQUIVALENCE variables. + * Make-lang.in (F95_OBJS): Add files for COMMON and EQUIVALENCE. + * trans-decl.c (g95_add_decl_to_functions): Make non-static. + (g95_get_symbol_decl): Handle COMMON and EQUIVALENCE objects. + (g95_generate_function_code): Translate COMMON and EQUIVALENCE + objects. + * trans.h (g95_trans_equivalence, g95_trans_common, + g95_add_decl_to_function): Declare. + * trans-common.c, trans-equivalence.c: New files. + +2003-06-08 Steven Bosscher + + * intrinsic.c (g95_intrinsic_extension): Remove. + (add_functions): Substitute g95_check_x for g95_check_x_ni + everywhere. + (g95_init_expr_extensions): New function. + (g95_intrinsic_func_interface): Use it. + * intrinsic.h: Remove extern decl for g95_intrinsic_extension. + * check.c (g95_check_digit, g95_check_huge, g95_check_kind, + g95_check_precision, g95_check_present, g95_check_radix, + g95_check_range, g95_check_selected_real_kind): Do not set + g95_intrinsic_extension. + (g95_check_x_ni): Remove now duplicate of g95_check_x. + + * expr.c (check_inquiry): Add FIXME, fixup some code style. + +2003-06-06 Arnaud Desitter + + * g95.h (ref_type): Name this type explicitly. + * module.c (MIO_NAME): Add specialisations of mio_name. + (mio_symbol_attribute, mio_typespec, mio_array_ref, + mio_array_spec, mio_ref, mio_expr, mio_symbol): Use them. + (ab_attribute): Name this type explicitly. + (mio_symbol_attribute, mio_expr): Add cast to call to find_enum. + +2003-06-05 Kejia Zhao + + * trans-intrinsic.c (g95_conv_allocated): New function. + (g95_conv_intrinsic_function): Make G95_ISYM_ALLOCATED work. + +2003-06-05 Steven Bosscher + + * f95-lang.c: Don't include g95-support.h + (g95_mark_addressable): Add prototype. + (g95_init_decl_processing): Remove C front end hack. + * f95-tree.c: Remove file. + * support.c: Remove file. + * g95-support.h: Remove file. + * trans-types.c (g95_init_types): Set up boolean + type related tree nodes. + * Make-lang.in: Remove rules for dead files and + dependencies on them. + +2003-06-05 Steven Bosscher + + * Make-lang.in (F95_ADDITIONAL_OBJS): Remove the final + C front end dependency. Also, convert.c does not depend on + g95-support.h anymore. + * convert.c: Don't include c-common.h and g95-support.h + * f95-lang.c: Don't inlude c-common.h and c-common.def (3x). + (g95_stmt_tree, g95_scope_stmt_stack, anon_aggr_type_p, + stmts_are_full_exprs_p, current_stmt_tree, + current_scope_stmt_stack): Remove. + * g95-support.h (unsigned_conversion_warning): Kill proto. + (boolean_type_node, boolean_true_node, boolean_false_node): + Don't define here. Instead, make then true tree nodes in + trans-types. + * support.c (c_global_trees): Die, C front end, die!!! + (g95_init_c_decl_hacks): Don't touch intmax_type_node, + uintmax_type_node, string_type_node and const_string_type_node. + (decl_constant_value, overflow_warning): Make static functions. + They are in death row too, though. + (default_conversion, c_expand_asm_operands): Remove. + * trans-array.c, trans-expr.c, trans-intrinsic.c, trans-stmt.c, + trans.c: Don't include c-common.h. + * trans-types.c (boolean_type_node, boolean_true_node, + boolean_false_node): Make them real tree nodes. + * trans-types.h (intmax_type_node, string_type_node, + const_string_type_node): Hack to work around C dependencies + in builtin-types.def. + +2003-06-04 Arnaud Desitter + + * decl.c (decl_types): Add some iterators-like sentinels. + * decl.c (match_attr_spec): Use them. + Use "decl_types" instead of "int". + Add cast in call to g95_match_strings. + * dump-parse-tree.c (g95_show_namespace): Use "g95_intrinsic_op" + instead of "int". + * g95.h (g95_intrinsic_op): Add some iterators-like sentinels. + (g95_interface_info): Use "g95_intrinsic_op". + * dump-parse-tree.c (g95_show_namespace): Use them. + * interface.c (g95_check_interfaces): Use them. + * module.c (read_module, write_module): Use them. + * symbol.c (g95_get_namespace, g95_free_namespace): Use them. + Use "g95_intrinsic_op". + * interface.c (check_operator_interface): Use "g95_intrinsic_op". + Add a default case in switch statement. + * intrinsic.h (g95_generic_isym_id): Moved to... + * g95.h (g95_generic_isym_id): here. + (g95_intrinsic_sym): Use "g95_generic_isym_id". + * intrinsic.c (make_generic): Use "g95_generice_isym_id". + * trans-intrinsic.c (g95_intrinsic_map_t, + g95_conv_intrinsic_lib_funtion): Use "g95_generice_isym_id". + * match.c (g95_match_intrinsic_op): Add cast in call to + g95_match_strings. + +2003-06-03 Steven Bosscher + + * support.c (skip_evaluation, warn_conversion, lvalue_p, + lvalue_or_else, pedantic_lvalue_warning, warn_for_assignment, + constant_fits_type_p, convert_and_check, + unsigned_conversion_warning): Remove these ugly remnants + we inherited from the C front end. + (function_types_compatible): Remove '#if 0'-edcode. + (build_modify_expr): Likewise. + (convert_for_assignment): Don't use the deceased functions. + The parameter fundecl is now unused. + (decl_constant_value): Always just return decl. In fact + this function is not used at present, but it might be in + the future, when we start using the tree inliner. + (overflow_warning, default_conversion, c_expand_asm_operands): + Abort when these are called, they are part of the C type + checking implementation and therefore poison to Fortran. + +2003-06-04 Steven Bosscher + + * Make-lang.in (F95_ADDITIONAL_OBJS): Don't depend on + c-pretty-print.o and c-dump.o. Add a comment on why we + depend on c-semantics.c. + * f95-lang.c (LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN): + Don't use the C front end tree dumper hook to dump the + language specific tree representation -- we don't have + one. So instead, inherit the default langhook. + +2003-06-02 Paul Brook + + * trans-expr.c (g95_conv_variable): Remove incorrent assertion. + +2003-06-02 Arnaud Desitter + + * check.c (g95_check_associated): Use proper types. Remove + extraneous argument in call to g95_error(). + +2003-06-02 Kejia Zhao + + * resolve.c (resolve_operator): Make logical operands convert to the + type with higher kind. + +2003-06-02 Kejia Zhao + + * check.c (g95_check_associated): Make sure both pointer and target has + the same type and rank. Null pointer or array section with vector + subscript as target are not allowed. + * trans.h: Declare gfor_fndecl_associated. + * trans-decl.c: (g95_build_builtin_function_decls): Initialize + gfor_fndecl_associated. + * trans-intrinsic.c (g95_conv_associated): New function. + (g95_conv_intrinsic_function): Make G95_ISYM_ASSOCIATED work. + +2003-06-02 Kejia Zhao + + * trans-array.c (g95_conv_expr_descriptor): Set the base of POINTER + according to POINTER itself rather than TARGET. + (g95_conv_expr_descriptor): Make lbound start at 1. + * trans-expr.c (g95_trans_pointer_assign): Fix a bug for Nullify. + +2003-06-01 Paul Brook + + * expr.c (g95_type_convert_binary): Make it match the standard. + * g95.texi: Remove dead link. + +2003-06-01 Steven Bosscher + + * g95.texi: Cleanup somewhat in preparation for inclusion + in GCC CVS. + +2003-05-23 Arnaud Desitter + Canqun Yang + + * resolve.c (compare_bound_int, resolve_where_shape): Proper return + type. + (g95_find_forall_index): Return proper value. + (g95_resolve_assign_in_forall, g95_resolve_forall): Use proper type to + compare the return value from g95_find_forall_index. + +2003-05-23 Arnaud Desitter + * g95.h, io.c (g95_st_label): Remove "length". + (g95_symtree): Remove "link". + (g95_case): Remove "code". + * arith.c, arith.h (g95_compare_string, g95_convert_integer, + g95_convert_real): Make an argument pointer to const. + * decl.c (colon_seen): Add a TODO. + * interface.c (g95_compare_types): Fix typo. + * interface.c (compare_interfaces): Preserve value of "p". + * intrinsic.c (sort_actual): Remove "i". + * match.c (g95_match_assign): Proper type in call to g95_match(). + * parse.c (next_free): Avoid duplicate call due to macro. + * parse.c (check_statement_label): wrong type in call to g95_error. + * primary.c (match_real_constant): Add a TODO. + * resolve.c (resolve_select): Remove useless conditional. + * simplify.c (g95_simplify_repeat): Proper assignment to + "value.character.string". + * simplify.c (g95_simplify_reshape): Wrong variable in call to + g95_error. + +2003-05-20 Canqun Yang + + * trans-stmt.c: Remove unnecessary include file defaults.h. + +2003-05-19 Lifang Zeng + + * trans-stmt.c (g95_trans_forall_loop): Handle FORALL with negative + stride. + (g95_trans_forall): Allow arbitrary number of FORALL indexes and + actual variables used as FORALL indexes. + +2003-05-15 Paul Brook + + * trans-array.c (g95_trans_static_array_pointer): Use + null_pointer_node. + (g95_trans_deferred_array): Initialize static array pointers. + * trans-expr.c (g95_conv_function_call): Use formal arglist to + correctly pass POINTER and absent CHARACTER arguments. + +2003-05-14 Lifang Zeng + + * resolve.c (g95_resolve_forall): Resolve FORALL construct/statement. + (g95_resolve_forall_body): Resolve FORALL body. + (g95_resolve_where_code_in_forall): Resolve WHERE inside FORALL. + (g95_resolve_assign_in_forall): Resolve assignment inside FORALL. + (g95_find_forall_index): Check whether the FORALL index appears in + the expression or not. + (resolve_code): Modified. + +2003-05-14 Paul Brook + + * iresolve.c (g95_resolve_spread): Convert ncopies to index_type. + +2003-05-13 Paul Brook + + * trans-types.c (g95_max_array_element_size): Now a tree node. + (g95_init_types): Work out max size properly. + (g95_get_dtype_cst): Modify to match. + +2003-05-11 Paul Brook + + * trans-io.c (add_case): Create a label decl for case labels. + +2003-05-11 Paul Brook + + * arith.c (g95_integer_index_kind): New variable. + * f95-lang.c (g95_init): Move frontend initialization here ... + (g95_post_options): ... from here. + * g95.h (g95_index_integer_kind, g95_resolve_index): Declare. + * intrinsic.c (add_functions): Use index kinds. + * iresolve.c: Convert to index_kind where needed. + * resolve.c (g95_resolve_index): Make public, use index_kind. + (resolve_array_ref): Adjust to match. + * trans-array.c: Rename g95_array_index_kind to g95_index_integer_kind. + * trans-stmt.c: Ditto. + * trans-types.c: Ditto. + * trans-types.h (g95_array_index_kind): Remove declaration. + * trans-expr.c (g95_conv_expr_present): Use null_pointer_node. + +2003-05-07 Paul Brook + + * trans-const.c (g95_conv_mpz_to_tree): Typecast constant. + * trans-intrinsic.c (g95_conv_intrinsic_bound): Convert type + of bound indices. + +2003-05-07 Paul Brook + + * trans-array.c (trans_static_array_pointer, + g95_trans_array_constructor_value, g95_conv_array_initializer, + g95_conv_structure): CONSTRUCTOR nodes only have one operand. + (g95_add_loop_ss_code): Convert subscripts to the correct type. + * trans-stmt.c (g95_trans_character_select): Ditto. + * trans-types.c (g95_init_types): Ditto. + +2003-05-07 Steven Bosscher + + * f95-lang.c (expand_function_body): Use input_line, not lineno. + * trans-decl.c (g95_generate_function_code, + g95_generate_constructors): Likewise. + * trans.c (g95_trans_runtime_check, g95_add_block_to_block, + g95_get_backend_locus, g95_set_backend_locus, g95_trans_code): + Likewise. + +2003-05-07 Kejia Zhao + * trans-types.c (g95_get_derived_type): Fix bug for DERIVED type + with components point to the DERIVED type itself, and two DERIVED + type with components point to each other. + * trans-expr.c (g95_conv_componet_ref): Modified + +2003-05-07 Kejia Zhao + * trans-expr.c (g95_conv_expr): Translate EXPR_NULL into + null_pointer_node. + (g95_trans_pointer_assign): Implement Nullify. + +2003-05-01 Paul Brook + + * trans-array.c (g95_walk_function_expr): Cope with NULL esym. + * trans-decl.c (g95_get_symbol_decl): Don't mangle dummy functions. + +2003-05-01 Paul Brook + + * trans-array.c, trans.c, trans-expr.c, trans-intrinsic.c, + trans-stmt.c: Replace empty_stmt_node with build_empty_stmt () and + IS_EMPTY_STMT. + +2003-05-01 Canqun Yang + + * trans-stmt.c (g95_trans_integer_select): Add a parameter to build + CASE_LABEL_EXPR. + +2003-04-28 Paul Brook + + * iresolve.c (g95_resolve_transpose): COMPLEX types are twice as big + as their kind suggests. + (g95_resolve_reshape): Ditto. + +2003-04-28 Chun Huang + + * trans-expr.c (g95_conv_substring_expr): New function. + (g95_conv_expr): Use it. + +2003-04-28 Paul Brook + + * iresolve.c (g95_resolve_transpose): Make it match the + implementation. + * trans-intrinsic.c (g95_is_intrinsic_libcall): Add TRANSPOSE. + +2003-04-18 Steven Bosscher + + * trans-types.c (g95_add_field_to_struct): New function to + add a field to a UNION_TYPE or RECORD_TYPE. + * trans-types.h (g95_add_field_to_struct): Prototype. + (g95_get_derived_type): Use g95_add_field_to_struct to add + components. + * trans-io.c (g95_add_field): Remove. + (ADD_FIELD): Use new g95_add_field_to_struct function. + (ADD_STRING): Likewise. + * trans-stmt.c (g95_trans_select): Likewise. + (g95_add_field): Remove duplicated function. + +2003-04-18 Canqun Yang + + Port implementation for CHARACTER SELECT from Andy's tree. + * trans-stmt.c (g95_trans_character_select): Implement character + select. (g95_add_field): New function. + * trans-decl.c: Declare 'gfor_gndecl_select_string'. + (g95_build_builtin_function_decls): Add 'gfor_fndecl_select_string'. + * g95.h (struct g95_case): Add field 'int n'. + * trans.h: Declare 'gfor_fndecl_select_string'. + +2003-04-18 Steven Bosscher + + * bbt.c (duplicate_key, g95_insert_bbt_with_overlap): Remove. + (g95_insert_bbd): Die on duplicates. + * g95.h (g95_insert_bbt_with_overlap): Delete prototype. + +2003-04-14 Steven Bosscher + + * g95.texi: Require GMP 4.0 -- like we actually + do. Explain the testsuite and what-goes-where. + Don't use undefined texinfo symbol. Break very + long line. Remove finished item from the list + of open projects. + +2003-04-11 Canqun Yang + + * trans-stmt.c (g95_evaluate_where_mask): Give mask temporaries + LOGICAL type. + +2003-04-10 Canqun Yang + + * trans-stmt.c (g95_trans_forall): Implement WHERE inside FORALL. + (g95_trans_forall_body): New function. + +2003-04-10 Canqun Yang + + * resolve.c (resove_where): New function. + (resolve_where_shape): New function. + (resolve_code): Add call to 'resolve_where' + * trans-stmt.c (g95_trans_where): Modified. + (g95_trans_where_2): New function. + (g95_trans_where_assign): New function. + (g95_evaluate_where_mask): New function. + (g95_add_to_stmt_list): New function. + (g95_get_temp_expr): New function. + * trans.h (where_stmt_list): New structure. + +2003-04-10 Paul Brook + + * g95spec.c (DEFAULT_SWITCH_TAKES_ARG): Remove. + (DEFAULT_WORD_SWITCH_TAKES_ARG): Ditto. + +2003-04-10 Steven Bosscher + + Update after mainline -> tree-ssa-branch merge. + * f95-lang.c (g95_mark_addressable): Update put_var_into_stack + call. + (g95_init): Update for new lang_hooks definition. + (g95_post_options): New langhook. + (LANG_HOOK_POST_OPTIONS): Clear, then define to g95_post_options. + * scanner.c (g95_new_file): Comment update. + +2003-04-09 Arnaud Desitter + + * g95.h, lang-options.h: Add -Wimplicit-interface. + * options.c (g95_init_options, g95_parse_arg): Set it. + * interface.c (check_intents): Warn about call with implicit + interface. + * resolve.c (resolve_unknown_f, resolve_unknown_s): Call + g95_procedure_use. + +2003-04-05 Paul Brook + + * iresolve.c (g95_resolve_spread): Don't resole based on type. + * trans-intrinsic.c (g95_is_intrinsic_libcall): Add G95_ISYM_SPREAD. + +2003-03-29 Paul Brook + + * iresolve.c (g95_resolve_pack): Don't bother resolving based on type. + (g95_resolve_unpack): Ditto. + * trans-intrinsic.c (g95_conv_intrinsic_merge): New Function. + (g95_conv_intrinsic_function): Use it. Remove PACK and UNPACK. + (g95_is_intrinsic_libcall): Add PACK and UNPACK. + +2003-03-25 Paul Brook + + * arith.c (g95_unary_user, g95_user): Remove dead functions. + * arith.h: Ditto. + * array.c (g95_free_array_ref): Ditto. + * g95.h: Ditto. + * symbol.c (g95_use_derived_tree): Ditto. + * intrinsic.c (add_functions): Use simplification for SCALE. + * primary.c (g95_match_rvalue): Test sym, not symtree. + +2003-03-25 Paul Brook + + * trans-decl.c (build_function_decl): Add parameter before it gets + turned into a constant. + * iresolve.c (g95_resolve_eoshift): Resolve to a useful name. + * trans-intrinsic.c (g95_is_intrinsic_libcall): Add G95_ISYM_EOSHIFT. + * trans-decl.c (g95_create_module_variable): Don't pushdecl constants. + +2003-03-22 Paul Brook + + * trans-array.c (g95_conv_array_initializer): Allow scalar + expressions. + * trans-decl.c (g95_finish_var_decl): Result variables are not + module variables. + * trans-intrinsic.c (g95_conv_intrinsic_transfer): New function. + (g95_conv_intrinsic_function): Use it. + * trans-types.h (g95_type_spec): Remove dead declaration. + +2003-03-21 Paul Brook + + * trans-decl.c (g95_build_function_decl): Mark string parameters. + +2003-03-20 Paul Brook + + * trans-decl.c (g95_build_function_decl): Put character length + parameters at the end of the function declaration. + * trans-expr.c (g95_conv_function_call): Ditto. + * trans-types.c (g95_get_function_type): Ditto. + +2003-03-20 Arnaud Desitter + + * resolve.c (resolve_formal_arglist): Don't impose intent for + procedure arguments of pure functions. + (resolve_select): Remove redundant assignment. + +2003-03-19 Arnaud Desitter + + * arith.c (validate_logical), g95.h, options.c (g95_init_options): + Remove option l1. + * g95.h, intrinsic.c(g95_get_intrinsic_sub_symbol): Add const. + * iresolve.c(g95_resolve_cpu_time, g95_resolve_random_number): Add + const. + * lang-options.h: Remove -finline-repack-arrays. Add -fg77-calls. + Order list. + * symbol.c (g95_add_type): Fix typo in comment. + + +2003-03-16 Paul Brook + + * dump-parse-tree.c (g95_show_code_node): Print resolved sym name. + * expr.c (g95_build_call): Remove. + * f95-lang.c (puchdecl_top_level): New function. + * g95.h (g95_code): Store resolved symbol, not just the name. + * intrinsic.c (g95_intrinsic_namespace): New global namespace. + (g95_intirinsic_init_1, g95_intrinsic_done_1): Use it. + (g95_get_intrinsic_sub_symbol): New function. + * iresolve.c (g95_resolve_cpu_time): Use it. + (g95_resolve_random_number): Ditto. + * resolve.c: Set code->resolved_sym instead of code->sub_name. + * trans-decl.c (g95_get_extern_function_decl): Give external decls + the correct DECL_CONTEXT. Add global symbold to the global scope. + * trans-stmt.c (g95_trans_code): Remove hacks now the fronted is + fixed. + +2003-03-16 Paul Brook + + * g95.h (g95_option_t): Add g77_calls. Remove inline_repack_arrays. + * options.c (g95_parse_arg): Ditto. + * module.c (mio_symbol_attribute): Handle the always_explicit bit. + * resolve.c (resolve_formal_arglist): The always_explicit sould be set + for the procedure, not the parameter. + * trans-array.c (g95_trans_g77_array): New function. + (g95_trans_assumed_size): Use it. + (g95_trans_dummy_array_bias): Ditto. + (g95_conv_array_parameter): Handle g77 arrays. Move existing body ... + (g95_conv_expr_descriptor): ... to here. Update callers. + * trans-decl.c (g95_build_dummy_array_decl): Handle g77 arrays. + (g95_get_symbol_decl): Avoid processing g77 arrays multiple times. + * trans-expr.c (g95_conv_function_call): Handle g77 arrays. + * trans-intrinsic.c (g95_get_symbol_for_expr): Never use g77 arrays. + * trans-types.c (g95_is_nodesc_array): Handle g77 arrays. + (g95_sym_type): Ditto. + +2003-03-15 Paul Brook + + * trans-array.c (g95_walk_elemental_function_args): Don't amputate the + first chain. + * trans-expr.c (g95_conv_function_call): Use the resolved symbol. + +2003-03-14 Paul Brook + + * trans-array.c (g95_array_is_packed): Remove. + (g95_conv_array_base): Correctly handle all descriptorless cases. + (g95_conv_array_stride): Use descriptorless strides. + (g95_trans_dummy_array_bias): Don't always repack the array. + (g95_build_dummy_array_decl): Automatic dummy arrays are only partial + packed. + * trans-types.c (g95_get_nodesc_array_type): Differentiate between + dummy and non-dummy arrays... + (g95_sym_type, g95_get_derived_type): ... like these. + (g95_get_array_type_bounds): Allow discontiguous arrays. + +2003-03-12 Paul Brook + + * array.c (g95_resolve_array_spec): Fix comment. + * g95.h (symbol_attributes): New flag always_explicit. + * resolve.c (resolve_formal_arglist): Set it always_explicit. + * iresolve.c (g95_resolve_lbound, g95_resolve_ubound): Simplify. + * trans-array.c (g95_conv_descriptor_dimension): Remove dead assert. + (g95_trans_array_bounds): Allow assumed shape arrays. + (g95_trans_repack_array): Remove. + (g95_trans_dummy_array_bias): Rewite to use descriptorless arrays. + * trans-decl.c (g95_build_qualified_array): Only ignore absent + bounds for assumed size arrays. + (g95_build_dummy_array_decl): Use descriptorless arrays. + * trans-expr.c (g95_conv_expr_present): Allow descriptorless arrays. + (g95_trans_pointer_assign): Fix typo. + * trans-intrinsic.c (g95_conv_intrinsic_function_args): Remove dead + code. + (g95_conv_intrinsic_bound): Rewrite to handle descriptorless arrays. + * trans-types.c (g95_get_nodesc_array_type): Allow non-packed arrays. + Also modify callers. + * trans-types.h (g95_get_nodesc_array_type): Modify prototype. + +2003-03-08 Paul Brook + + * trans-array.c (g95_walk_elemental_functions): Don't reverse the SS. + (g95_conv_array_ubound): Provide dummy value for assumed size arrays. + * resolve.c (compare_spec_to_ref): Allow full array sections. + +2003-03-08 Paul Brook + + * expr.c (g95_simplify_expr): Also simplify array index and + substring expressions. + * resolve.c (compare_spec_to_ref): Check for assumed size bounds. + * trans-array.c (g95_trans_array_bounds): New function. + (g95_trans_auto_array_allocation): Use it. + (g95_trans_assumed_size): Rewrite. + * trans-decl.c (gfor_fndecl_in_pack, gfor_fndecl_in_unpack): Declare. + (gfor_fndecl_repack): Remove. + (g95_build_qualified_array): Handle absent upper bounds. + (g95_build_dummy_array_decl): Assumed shape arrays are descriptorless. + (g95_get_symbol_decl): Update. + (g95_build_intrinsic_function_decls): Initialize new decls. + * trans.h (gfor_fndecl_in_pack, gfor_fndecl_in_unpack): Declare. + (gfor_fndecl_repack): Remove. + * trans-io.c (g95_build_io_library_fndecls): Correct prototypes. + * trans-types.c: (g95_build_array_type): Merge duplicated code.. + (g95_get_nodesc_array_type): Handle absent bounds. + * trans-types.h (g95_get_nodesc_array_type): Declare. + +2003-03-04 Paul Brook + + * f95-lang.c (DEF_FUNCTION_TYPE_VAR_3): Define before including + builtin-types.def. + +2003-03-02 Paul Brook + + * options.c (g95_init_options): Drfault to 1. + (g95_pasrse_arg): Add -frepack-arrays, use strcmp. + * trans-array.c (g95_conv_array_data, g95_conv_array_base, + g95_conv_array_stride,g95_conv_array_lbound, g95_conv_array_ubound): + Handle non-constant size automatic arrays. + (g95_conv_section_upper_bound, g95_conv_section_startstride): Use + generic bound functions. + (g95_trans_auto_array_allocation): Don't create a descriptor. + (g95_trans_assumed_size): New function (broken). + (g95_trans_dummy_array_bias): Remove unused var. + * trans-array.h (g95_trans_assumed_size): Declare. + * trans-decl.c (create_index_var): New fuction. + (g95_build_qualified_array): New function. + (g95_get_symbol_decl): Use it. + (g95_trans_deferred_vars): Handle assumed shape seperately. + * trans-types.c (get_element_type): Handle heap allocated arrays. + (g95_is_nodesc_array): Include non-const size arrays. + (g95_get_nodesc_array_type): Ditto. + +2003-02-23 Paul Brook + + * trans-array.c (g95_array_init_size): Should use stride, not size of + last dimension. + +2003-02-18 Paul Brook + + * trans-expr.c (g95_trans_arrayfunc_assign): Nove elemental check + after intrinsic function check. + +2003-02-18 Arnaud Desitter + + * io.c (match_io): Fix missing return value and remove useless + assignment. + * match.c (g95_match): Remove useless assignment. + * module.c (parse_string): Remove useless post increment. + * simplify.c (g95_simplify_verify): Remove useless assignment. + +2003-02-15 Paul Brook + + * expr.c (restricted_intrinsic): Handle bad values gracefully. + * g95.h (symbol_attribute): Add referenced member. + (g95_symbol): Add dummy_order member. + (g95_set_sym_referenced): Declare. + * match.c (g95_match_assignment, g95_match_call): Use it + * primary.c (match_actual_arg, g95_match_rvalue, + g95_match_variable): Ditto. + * symbol.c (next_dummy_order): New variable. + (g95_set_sym_referenced): New function. + (check_done): New function. + (g95_add_*): Use it. + * trans-decl.c: Make formatting conform to GCC standards. + (g95_defer_symbol_init): Add dummy variables in the right order. + (g95_get_symbol_decl): Only accept referenced variables. + (g95_create_module_variable): Module variables are always required. + (generatr_local_decls): New function. + (generate_local_vars): New function. + (g95_generate_function_code): Use it. + +2003-02-13 Paul Brook + + * trans-decl.c (g95_conv_struct_cons): Remove. + (g95_get_symbol_decl): Use g95_conv_expr for structure initializers. + * trans-expr.c (g95_conv_structure): New function. + (g95_conv_expr): Use it. + +2003-02-09 Paul Brook + + * trans-array.c (g95_array_init_size): Don't evaluate the linit + expressions multiple times. + (g95_trans_auto_arry_allocation): Use pointer not tmp. + +2003-02-08 Paul Brook + + * module.c (mio_symtree_ref): Declare as static. + (mio_expr): Remove dead code. + (read_module): Set the symtree link for fixups. + * trans-intrinsic.c (g95_conv_intrinsic_round): Rename... + (build_round_expr): ... to this. + (g95_conv_intrinsic_aint): New function. + (g95_conv_intrinsic_function): Use it. + +2003-02-08 Paul Brook + + * trans-array.c (g95_trans_array_constructor_value): Use the acutal + offset after modificaton, not the increment expression. + * dependency.c: Kill excess whitespace. + +2003-02-07 Sanjiv Gupta + + * dependency.h: Remove some function declarations. + * dependency.c (get_no_of_elements): Change this function not to + return int. + * other: Add comments for all modified functions. + +2003-02-06 Paul Brook + + * g95spec.c (lang_specific_functions): Fix initializer warning. + * dump-parse-tree.c (g95_show_expr): Use typespec instead of symtree + for structure type names. + * trans-decl.c (g95_cons_structure_cons): New function. + (g95_get_symbol_decl): Use it. + * trans-expr.c (g95_conv_component_ref): Remove duplicate pointer + referencing code. + +2003-02-06 Arnaud Desitter + + * resolve.c (compare_cases): Add const to casts. + +2003-01-30 Arnaud Desitter + + * g95.h (g95_check_f): Change a1 to f1m. + * intrinsic.c (add_sym_1m, check_specific, + g95_intrinsic_func_interface): Use it. + + * module.c (init_pi_tree): Remove useless cast. + (fp2): Fix argument type. + + * parse.c (parse_select_block): Add comment. + +2003-02-05 Toon Moene + + * lang-options.h: Fix warning involving C90 concatenated + strings. + +2003-02-06 Steven Bosscher + Arnaud Desitter + + * io.c (format_asterisk): Complete initializer to kill warning. + * arith.c (DEF_G95_INTEGER_KIND, DEF_G95_LOGICAL_KIND, + DEF_G95_REAL_KIND, MPZ_NULL, MPF_NULL): New #defines. + (g95_integer_kinds, g95_logical_kinds, g95_real_kinds): Use the + new defines to complete initializers. Kills all warnings. + + * Make-lang.in: Comment cleanup. + +2003-02-05 Paul Brook + + * array.c (g95_free_constructor): Handle NULL expressions. + * resolve.c (resolve_structure_cons): Ditto. + * decl.c (g95_match_null): New Function. + (variable_decl): Use it. + * module.c (mio_expr): Don't bother saving symtree for EXPR_STRUCTURE. + * primary.c (g95_match_runtime): Don't use symtree for EXPR_STRUCTURE. + * trans-types.c (g95_set_decl_attributes): Remove empty function. + +2003-02-05 Paul Brook + + * trans.h (build1_v): New macro. + (build_v): Remove pointless and incorrect prototype. + * various: Use build1_v for GOTO_EXPR and LABEL_EXPRs. + * f95-lang.c (g95_init_builtin_decls): DEF_BUILTIN takes 10 args. + +2003-02-01 Steven Bosscher + + * Make-lang.in (F95_OBJS): Remove one more dead file. + +2003-02-01 Paul Brook + + * lang-specs.h: Don't pass -ffixed-form to the linker. + * trans-decl.c (g95_generate_function_code): Clear saved decl chain. + +2003-02-01 Paul Brook + + * Make-lang.in (F95_OBJS): Remove dead files. + * trans-array.c (g95_array_init_size): Do the right thing when + ubound=NULL. + * trans-decl.c (g95_generate_function_code): Initialize deffered + symbol list before translating contained subroutines. + * trans-expr.c (g95_conv_expr, g95_conv_expr_reference): Substitute + scalar invariant values here... + (g95_conv_variable, g95_conv_function_call): ... instead of here ... + * trans-intrinsic.c (g95_conv_intrinsic_function_args): .. and here. + +2003-01-29 Paul Brook + + * trans-array.c (g95_add_loop_code): Put pre code in the right block. + (g95_walk_elemental_function_args): Reverse chains before adding. + (g95_reverse_ss): Move about a bit. + * trans-expr.c (g95_conv_function_call): Handle scalar intrinsic + function arguments. + +2003-01-28 Paul Brook + + * intrinsic.c (resolve_intrinsic): Use correct union member. + * trans-array.c (g95_trans_dummy_array_bias): Don't touch absent + parameters. + * trans-decl.c (g95_get_symbol_decl): Don't translate initializers for + use associated variables. + * trans-intrinsic.c (g95_conv_intrinsic_present): Move body ... + * trans-expr.c (g95_conv_expr_present): ... to here. + * trans.h: Declare it. + * trans-types.c (g95_sym_type): Assume subroutine if not specified. + +2003-01-28 Arnaud Desitter + + * array.c (expand_iterator): Suppress useless assignment. + * decl.c (match_char_spec): Ditto. + * io.c (match_io_iterator): Ditto. + * primary.c (match_real_constant): Ditto. + * interface.c (fold_unary, g95_free_interface, g95_extend_expr): + Ditto. Also, use g95_intrinsic_op not int for intrinsic operators. + * matchexp.c (match_add_operand, match_level_5): Likewise. + * module.c (parse_atom, find_enum): Likewise. + * resolve.c: move #include + (resolve_select): Fix serious typo. + +2003-01-28 Steven Bosscher + + * Make-lang.in: Don't build with broken tree-ssa-pre. + +2003-01-28 Steven Bosscher + + * resolve.c (resolve_index): Add a TODO. + * symbol.c: Remove useless "#include ". + +2003-01-27 Paul Brook + + * check.c (check_rest): Allow different type kinds as an extension. + * g95.h (g95_resolve_f): Add f1m. + * intrinsic.c (add_sym_1m, resolve_intrinsic): Use it. + * intrinsic.h: Chenge prototypes for MIN and MAX. + * iresolve.c (g95_resolve_minmax): New function. + (g95_resolve_min, g95_resolve_max): Use it. + * trans-intrinsic.c (g95_trans_intrinsic_minmax): Only evaluate + arguments once. + (g95_conv_intrinsic_present): Fix logic. + +2003-01-27 Steven Bossche + + * g95.h (g95_case): Don't be a tree, be a double linked list. + * match.c (match_case_selector): Remove redundant semantics check. + Clean up a few goto's to make it a tiny little bit faster. + * resolve.c (case_tree): Die. + (compare_cases): Accept and compare unbounded cases too. + (check_case_overlap): Don't build a tree. Instead, merge-sort the + whole list of g95_cases passed from resolve_select. + (sane_logical_select): Die. + (check_case_expr): Return FAILURE if a CASE label is of the wrong + type kind. + (resolve_select): Fixup case expression for computed GOTOs, put it + in expr, not expr2, for easier handing in the parse tree dumper and + the code generator. Rewrite the rest of the function: Kill + unreachable case labels and unreachable case blocks. + * dump-parse-tree.c (g95_show_code_node): Always dump expr for + an EXEC_SELECT, not case2 anymore. + * trans-const.c (g95_conv_constant_to_tree): New function. + (g95_conv_constant): Use it. + * trans-const.h: Declare prototype for the new function. + * trans-stmt.c (g95_trans_integer_select, g95_trans_logical_select, + g95_trans_character_select): New static functions. + (g95_trans_select): Rewrite. + +2003-01-26 Paul Brook + + * intrinsic.c (add_fnctions): Properly add dreal. + * trans-intrinsic.c (g95_conv_intrinsic_present): New function. + (g95_conv_intrinsic_function): Use it. + * trans-io.c (build_dt): Abort on internal files (unimplemented). + +2003-01-26 Paul Brook + + Widespread changes to the handling of symbols in expressions. These + are now linked via g95_symtree nodes. + * parse.c (g95_fixup_sibling symbols): New function. + (parse_contained): Use it. + * g95.h (symbol_attribute): Add contained. Indicates a symbol is a + contained procedure that has bee correctly fixed up. + (g95_code, g95_expr): Point to a g95_symtree, not a g95_symbol. + +2003-01-24 Paul Brook + + * trans-array.c (g95_walk_expr): Function result attributes are in + sym->result. + * trans-expr.c (g95_conv_function_call, + g95_trans_arrayfunc_assign): Ditto. + * trans-decl.c (g95_get_symbol_for_expr): Set sym->result. + +2003-01-23 Steven Bosscher + + * expr.c (check_restricted): Fix error message. + * symbol.c (free_st_labels): Plug memleak. + +2003-01-22 Steven Bosscher + + * arith.c (reduce_unary, reduce_binary_ac, reduce_binary_ca, + reduce_binary_aa, reduce_binary, eval_intrinsic, + eval_intrinsic_f2): Use typesafe prototypes for eval functions. + * g95.h (g95_check_f, g95_simplify_f, g95_resolve_f): New unions + for typesafe intrinsics helper functions. + (g95_intrinsic_sym): Use them. + * intrinsic.c (do_check, add_sym, add_sym_0, add_sym_1, + add_sym_1s, add_sym_1m, add_sym_2, add_sym_3, add_sym_4, + add_sym_5, add_conv, resolve_intrinsic, do_simplify, + check_specific, g95_intrinsic_func_interface, + g95_intrinsic_sub_interface): Adjust all calls to intrinsics + helper functions. + * trans-decl.c (g95_get_extern_function_decl): Likewise. + * Make-lang.in: Don't disable warnings for strict prototypes + any longer, everything is typesafe now. + +2003-01-22 Steven Bosscher + + * bbt.c (duplicate_node): Make static. + * module.c (module_name): Make static. + * scanner.c (include_dirs): Make static. + +2003-01-20 Steven Bosscher + + Hard coded _gfor_'s should not show up anymore. + * g95.h (PREFIX): New macro. + * iresolve.c (g95_resolve_cpu_time): Use PREFIX, not + hard-coded "_gfor". + (g95_resolve_random_number): Likewise. + * trans-decl.c (g95_build_intrinsic_function_decls): Likewise. + * trans-io.c: Remove 'prefix' macro. Replace all uses with + the new PREFIX macro from g95.h. + +2003-01-20 Steven Bosscher + + The troubles of forking... Andy implemented this just now too. + Let's stick to that and keep the trees close. + * g95.h (g95_st_label): 'format' member is now a g95_expr. + * io.c: Revert previous changes. + (g95_match_format): Match the format string as a character + literal expression. + * match.h (g95_statement_label): Declare external. + * parse.c: Revert previous changes. + * symbol.c (g95_free_st_label): Free a g95_expr instead + if a 'char *'. + * trans-io.c: Revert previous changes. + (build_dt): Use set_string to set the format string. + +2003-01-20 Steven Bosscher + + * io.c (format_string): Make non-static. + (g95_match_format): Remember the format string. + (terminate_io): Add I/O termination for empty I/O lists. + * match.h: Declare external format_string. + * parse.c (check_statement_label): Attack the format string + to a format label for FORMAT statements. + * trans-io.c (g95_add_field): Define prefix macro. Replace + all uses of PREFIX define with a use of this macro. + (build_dt): Implement formatted I/O for format labels. + +2003-01-20 Steven Bosscher + + * lang-options.h: Kill "-std=F". + * options.c: Remove unimplemented "-std=F". Modify + web address. + * misc.c (g95_terminal_width): New function. + * error.c (g95_error_init_1): Use g95_terminal_width. + * g95.h: Add prototype for g95_terminal_width, remove + fmode flag. + +2003-01-19 Steven Bosscher + + * Make-lang.in: Fix typo. + +2003-01-18 Steven Bosscher + + * g95.h (struct g95_case): Remove unused cruft, new member + 'where' to keep track of the locus of the default case. + * match.c (g95_match_case): Add locus to the current case. + (match_case_selector): Likewise. + * parse.c (parse_select_block): Move semantics check for + multiple DEFAULT cases out of here to... + * resolve.c (check_case_overlap): ...here. Return sooner + when possible. + (check_case_expr): Take two g95_cases now, use to sure the + expression kinds are the same. + (resolve_select): Cleanup. + +2003-01-18 Paul Brook + + * trans-io.c: Fix typos in ported IO work (set_fla[tg]). + * trans-decl.c (g95_set_symbol_decl): Handle non-array result + variables. + (g95_get_extern_function_decl): Put decls in the correct context. + +2003-01-18 Steven Bosscher + + * trans-io.c: Port changes from Andy to set ERR flag. + +2003-01-17 Paul Brook + + * trans-array.c: Add various comments. + (g95_ss_terminator): Declare as const. + (g95_walk_expr): Remove first parameter and update all callers. + (g95_walk_op_expr): Initialize scalar SS properly. + * trans-array.h (g95_walk_expr): Update prototype. + * trans-expr.c: Update for new g95_walk_expr. + * trans-intrinsic.c: Ditto. + * trans-io.c: Ditto. + * trans.h: Various comments for SS chains. + +2003-01-17 Paul Brook + + * intrinsic.h (g95_generic_isym_id): Add G95_ISYM_S?_KIND, SPACING + and RRSPACING. + * intrinsic.c (add_functions): Use them. + * trans-intrinsic.c (g95_conv_intrinsic_function): Ditto. + * trans-expr.c (g95_conv_expr_lhs): Abort on impossible error. + +2003-01-17 Steven Bosscher + + Fallout of a small merge conflict: + * intrinsic.c: Un-revert lost patch (G95_ISYM_SCALE). + +2003-01-17 Steven Bosscher + + * initrinsic.c: New add_sym_* functions for strong typing. + (add_conv): Make prototype strict. + * dump-parse-tree.c, dependency.c: Include config.h + * resolve.c, trans-io.c: Fix typos. + +2003-01-17 Steven Bosscher + + * dump-parse-tree.c (g95_show_code_node): Show the + condition for a computed GOTO that was transformed + to a SELECT CASE construct. + * resolve.c (check_case_overlap): Revert previous switch + to treaps, it was too slow and didn't catch all trouble. + (resolve_symbol): Be more flexible about module procedures. + * symbol.c (check_conflict): Point to relevant section in + the standard for dubious conflict. Allow procedure + dummy arguments to be optional again. + * trans-io (add_field): Rename to g95_add_field. Change + all callers. + * trans-stmt (trans_select): Handle unbounded cases for + integer SELECT CASE constructs. Fix/add more comment. + +2003-01-17 Steven Bosscher + + * g95.h: Uses GCC's function attribute macros. + * error.c, module.c, parse.c, g95.h: More function attributes. + +2003-01-16 Steven Bosscher + Forgot a file... + * trans-decl.c (get_label_decl): Use TREE_LINENO instead + of DECL_SOURCE_LINE, and TREE_FILENAME instead of + DECL_SOURCE_FILE. + +2003-01-16 Steven Bosscher + + * f95-lang.c (pushdecl): Use TREE_LINENO instead of + DECL_SOURCE_LINE. + * trans.c (g95_trans_code): Use annotate_all_with_file_line + instead of nowdead wrap_all_with_wfl. + +2003-01-14 Steven Bosscher + + * parse.c (g95_parse_file): In verbose mode, dump the parse tree + before generating code, so we can still see it even if the code + generation phase dies. + +2003-01-14 Steven Bosscher + + * decl.c (build_sym): Split out initialization expression parts... + (add_init_expr_to_sym): ...to here. + (variable_decl): Add the symbol following an attribute list to the + symbol tree before parsing the optional initialization expression + if the symbol is not of a derived type. + * primary.c (g95_match_rvalue): Don't assume a symbol always has + a value if it is a PARAMETER. + +2003-01-14 Steven Bosscher + + * misc.c: Don't #include + * module.c: Ditto. Kill uses of mtrace, muntrace. If there + ever was a glibc bug, then either this was never reported to + glibc people, or it has been fixed for so long that there's + no information you can find about it, anywhere. + +2003-01-14 Steven Bosscher + + Fix warnings: + * module.c (attr_bits, bt_types, array_spec_types): + Switch 'const' and 'static'. + * iresolve.c (g95_resolve_reshape): Make __resolve0 non-'const'. + + GNU'ify source code: + * trans-io.c: Numerous fixes, one fixed warning and a few + TODO markers so that we don't forget about them. + +2003-01-13 Paul Brook + + * intrinsic.c (add_functions): Add G95_ISYM_SCALE. + * intrinsic.h (g95_generic_isym_id): Remove bogus G95_ISYM_ANINIT. + Add G95_ISYM_SCALE. + * trans-intrinsic.c (g95_conv_intrinsic_function): Ditto + * match.c (g95_match_stop): Fix dumb == -> != error. + +2003-01-13 Steven Bosscher + + * dump-parse-tree.c (show_indent): Add line breaks. This + whole dumping process needs cleanups. + * f95-lang.c (g95_mark_addressable): Fix prototype to match + the langhook. Fix 'return's accordingly. + * g95-support.h: Adjust prototype. + * g95.h: Add 'no_backend' member to 'g95_option_t' struct. + * lang-options.h: Add '-fsyntax-only'. + * options.c (g95_init_options): Init 'no_backend'. + (g95_parse_arg): Deal with '-fsyntax-only'. + * parse.c (g95_parse_file): Do not generate code if 'no_backend' + is set. + +2003-01-13 Steven Bosscher + Patch from Arnaud + * resolve.c (resolve_symbol): Assumed shape arrays must be dummy + arguments. Also make sure that if a symbol is marked INTRINSIC, + an intrinsic with the symbol's name actually exists. + (check_conflict): Make EXTERNAL and DIMENSION attributes conflict. + Do not allow PROCEDURES to have the SAVE, POINTER, TARGET, + ALLOCATABLE, RESULT, IN_NAMESPACE, OPTIONAL or FUNCTION attribute. + +2003-01-13 Steven Bosscher + + * resolve.c (resolve_contained_functions): Fix condition, don't + throw internal_error if a child namespace has no name. Apparently + this can be the case? + +2003-01-11 Paul Brook + + Port changes from Andy's tree: + * g95.h (g95_code): Add stop_code. + * match.c (g95_match_stop): Detter syntax checking. + * resolve.c (resolve_generic_f0): Return match type. + (resolve_generic_f): Remove dead/duplicated code. + (resolve_specific_f): Ditto. + * dump-parse-tree.c (g95_show_code_node): Handle new STOP format. + * trans-decl.c (gfor_fndel_stop_*): New fndecl nodes. + * trans-stmt.c (g95_trans_stop): Handle new STOP format. + +2003-01-11 Paul Brook + + * trans-array.c: Various documentation/comment changes. + * trans-stmt.c: Ditto. + + +2003-01-10 Paul Brook + + * options.c/h: Add -fdump-parse-tree as alias of -v. + +2003-01-10 Steven Bosscher + + * dump-parse-tree.c (g95_show_namespace): Fixed another + typo. Sorry, it's Friday... + +2003-01-10 Steven Bosscher + + Spotted by Tobi: + * trans-array.c, trans-array.h, trans.c, trans-const.c, + trans-const.h, trans-decl.c, trans-expr.c, trans.h + trans-intrinsic.c, trans-io.c, trans-stmt.c, trans-stmt.h + trans-types.c: Fix bogus copyright years, add 2003. + * trans-types.h: Give copyright header. + +2003-01-10 Steven Bosscher + + * dump-parse-tree.c (g95_show_namespace): Fixed typo. + * expr.c, options.c, scanner.c: Add some more 'const' markers. + * intrinsic.c: Some constant strings moved to read-only memory. + * io.c (format_asterisk): Move to... + * g95.h: ...here. + +2003-01-10 Steven Bosscher + + * dump-parse-tree.c (g95_show_namespace): Dump implicit + types for ranges instead of per-letter. Indent the + 'CONTAINS' just like everything else. + * resolve.c (resolve_contained_functions): Clarify comment. + Explain non-obvious conditional expression. Improve + diagnostics if tyoe cannot be resolved. + Port semi-fix from Andy's tree: + (was_declared): Move up before first use. + (generic_sym, specific_sym): New functions. Code moved + out if procedure_kind. + (procedure_kind): Simplify using new functions. + (resolve_generic_f): Make sure the functions we find in + a parent namespace is generic. + (resolve_specific_f): Ditto for specific functions. + +2003-01-10 Steven Bosscher + + * trans-stmt.c, trans.c: Fix some code style issues. Add + some more comment (but still not enough!). + +2003-01-10 Steven Bosscher + + * symbol.c (flavors, procedures, intents, acces_types, + access_types, ifsrc_types): Make const. + * misc.c (g95_string2code): Make 'm' param 'const'. + * module.c (find_enum, write_atom, mio_name): Make + 'm' param 'const'. + (attr_bits, bt_types, array_spec_types, array_ref_types, + ref_types, expr_types): Make const. + * g95.h: Adjust external decls. + +2003-01-09 Paul Brook + + * Testsuite: Add a load of new cases. + +2003-01-08 Steven Bosscher + + * Make-file.in: Add dependency on back end header files; + a parallel build should work now. + * f95-lang-c (lang_identifier): Remove bogus comment. + (g95_be_parse_file): Fix prototype. + (g95_init): Make static. + (g95_finish): Make static. + * error.c (g95_syntax_error): Kill. Make define in... + * g95.h (g95_syntax_error): Define. + (g95.options): Make 'source' member 'const'. + * interface.c (g95_match_interface): Explain + hard-to-read condition. + (g95_match_end_interface): Ditto. + * trans_const.c (g95_build_string_const): Make 's' parameter + 'const'. + * trans_const.h: Adjust protoype accordingly. + * trans-decl.c: Include tree-dump.h + (g95_generate_function_code): Build fixes for recent changes + in the tree-ssa branch. + +2003-01-08 Steven Bosscher + + * format.c: Kill, move code from here... + * io.c: ...to here. + * Make-lang.in: Adjust. + * MANIFEST: Ditto. + * match.h: Ditto. + * BUGS: Mention where to submit bugs. Move old content... + * TODO: ...to here. New file. + +2003-01-08 Steven Bosscher + Fix most warnings, and suppress the ones we can't fix for now. + * Make-lang.in: Suppress warnings about bad proto's in g95.h, + these warnings just clutter the screen and there's not much + we can do about them for now anyway. + * check.c, iresolve.c: Mark unused function parameters. + * dump-parse-tree.c (g95_show_array_spec): Punt on AS_UNKNOWN, + they should be resolved before they get here. + * error.c: Remove unused FILE *status_out. + * f95-lang.c (g95_init): Remove bogus cast. + * Many files: Make things 'const' where required. + * g95.h: Fix prototypes for all modified functions above. + (g95_options): Remove 'object' member. + +2003-01-07 Steven Bosscher + + * Make-file.in: Cleanup bogus targets. Add more comment. + * lang-options.h: New option '-w'. + * g95.h: add no_options field to struct g95_options. + * options.c (g95_init_options): Default no_warnings to off. + (g95_parse_arg): Recognise the '-w' switch and its alias, + '-fno-warnings'. + * error.c (g95_warning, g95_warning_now): Don't emit warning if + no_warning option is set. + * iresolve.c (g95_resolve_shape): Fix warning. + +2003-01-07 Steven Bosscher + + * primary.c (g95_next_string_char): Rename next_string_char, and + make static. Adjust callers accordingly. + * resolve.c (resolve_generic_f0): Return try, not match. Adjust + callers accordingly. + * g95.h: Split out all g95_match* functions to... + * match.h: ...here. New file. + * array.c, decl.c, expr.c, format.c, interface.c, io.c, match.c, + matchexp.c, module.c, parse.c, primary.c: Inlcude match.h + +2003-01-07 Steven Bosscher + + * symbol.c (g95_clear_new_implicit, g95_add_new_implicit_range, + g95_merge_new_implicit): New functions. + (g95_match_implicit_none, g95_match_implicit): Move from here... + * match.c (g95_match_implicit_none, g95_match_implicit): ... to here. + Modify to use the new functions in symbol.c. + * g95.h: Add and move prototypes. + +2003-01-06 Steven Bosscher + + * bbt.c (insert): Use a typedef'ed compare_fn prototype for the + node compare function. + (g95_insert_bbt): Likewise. + (g95_insert_bbt_with_overlap): Likewise. + (g95_delete_bbt): Likewise. + (delete_treap): Likewise. Also fix a potential bug when calling it. + * module.c (compare_pointers): Change proto to compare_fn. + (compare_integers): Likewise. + (compare_true_names): Likewise. + (find_true_name): Adjust call to compare_true_names to match proto. + (require_atom, write_atom, mio_name): Fix 'const' warnings. + (init_pi_tree): Make compare a compare_fn instead of (int *). + * resolve.c (compare_cases): Change proto to compare_fn. + * symbol.c (g95_compare_symtree): Change proto to compare_fn, make + it static, and rename to compare_symtree. + (delete_symtree, g95_undo_symbols, g95_new_symtree): Use renamed + function. + * g95.h: Kill g95_compare_symtree prototype. Adjust prototypes + of g95_insert_bbt, g95_insert_bbt_with_overlap, and g95_delete_bbt. + +2003-01-06 Steven Bosscher + * Make-lang.in: Fix spaces/tabs issues from previous patch. + * patch.options: Blow away Paul's checkin mistake :-) + * io.c (terminate_io): Fix memory leak (Arnaud). + +2003-01-06 Steven Bosscher + + * Make-lang.in: Teach about building DVI, info manual. + * g95.texi: New file. + +2003-01-02 Paul Brook + + * trans-array.c (g95_reverse_ss): Make static and don't use. + (g95_conv_ss_descriptor): Don't use g95_loopinfo + (g95_conv_array_parameters): Modify for pointer assignments. + (g95_walk_subexpr): New function. + (g95_walk_expr*): Use it. + * trans-array.h (g95_reverse_ss): Remove prototype. + * trans-expr.c (g95_trans_pointer_assign): Implement. + (Many): Set se.want_pointer before calling g95_conv_array_parameter. + * trans-intrinsic.c: Sync with scalarizer changes. + * trans-io.c: Ditto. diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2004 b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2004 new file mode 100644 index 0000000000..27b966a20f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2004 @@ -0,0 +1,2846 @@ +2004-12-29 Steven G. Kargl + + * gfortran.h (gfc_case): fix typo in comment. + +2004-12-27 Tobias Schlueter + + * trans-intrinsic.c (gfc_conv_intrinsic_ishft): Change to + logical shift. Call fold. Remove 0-bit shift shortcut. + (gfc_conv_intrinsic_ishftc): Convert first argument to at least + 4 bytes bits. Convert 2nd and 3rd argument to 4 bytes. Convert + result if width(arg 1) < 4 bytes. Call fold. + + PR fortran/19032 + * trans-intrinsic.c (gfc_conv_intrinsic_mod): Update comment + in front of function to match the standard. Correct handling + of MODULO. + +2004-12-27 Andrew Pinski + + * trans-expr.c (gfc_conv_cst_int_power): Only check for + flag_unsafe_math_optimizations if we have a float type. + +2004-12-23 Steven G. Kargl + + * gfortran.texi: Fix typo. + +2004-12-16 Tobias Schlueter + + * trans-intrinsic.c (build_fixbound_expr): Clarify comment, fix + comment typo. + +2004-12-15 Tobias Schlueter + + PR fortran/18993 + * match.c (gfc_match_if): Don't explicitly skip optional whitespace. + (gfc_match_nullify): Make sure that ')' is in front of the end of + statement. + + * scanner.c (skip_fixed_comments): Fix typo in comment preceding + function. + +2004-12-14 Richard Henderson + + * gfortran.h (gfc_expr.function.name): Make const. + (gfc_iresolve_init_1, gfc_iresolve_done_1): Remove. + (gfc_get_string): Update prototype. + * iresolve.c: Include tree.h. + (string_node, HASH_SIZE, string_head, hash): Remove. + (gfc_get_string): Use vsnprintf, get_identifier. + (free_strings, gfc_iresolve_init_1, gfc_iresolve_done_1): Remove. + * misc.c (gfc_init_1): Don't call gfc_iresolve_init_1. + (gfc_done_1): Don't call gfc_iresolve_done_1. + * module.c (mio_allocated_string): Take and return const char *, + instead of modifying char**. + (mio_expr): Update to match. + * resolve.c (pure_function): Constify name argument. + (resolve_function): Constify name. + * trans-intrinsic.c (gfc_conv_intrinsic_function): Likewise. + +2004-12-12 Richard Henderson + + * iresolve.c (gfc_resolve_all, gfc_resolve_any, gfc_resolve_count, + gfc_resolve_cshift, gfc_resolve_dot_product, gfc_resolve_eoshift, + gfc_resolve_matmul, gfc_resolve_maxloc, gfc_resolve_maxval, + gfc_resolve_minloc, gfc_resolve_minval, gfc_resolve_pack, + gfc_resolve_product, gfc_resolve_reshape, gfc_resolve_shape, + gfc_resolve_spread, gfc_resolve_sum, gfc_resolve_transpose, + gfc_resolve_unpack: Use PREFIX. + +2004-12-12 Tobias Schlueter + + PR fortran/18869 + * match.c (gfc_match_common): Skip whitespace. + +2004-12-12 Steven G. Kargl + + PR fortran/16581 + * check.c (gfc_check_iand, gfc_check_ibclr, gfc_check_ibits, + gfc_check_ibset, gfc_check_ieor, gfc_check_ior): Remove default + integer kind check; Issue error for -std=f95 when needed. + * intrinsic.c (add_functions): Change ieor from GFC_STD_GNU to + GFC_STD_F95. + * iresolve.c (gfc_resolve_iand, gfc_resolve_ieor, gfc_resolve_ior): + Promote arguments to same kind. + +2004-12-12 Steven G. Kargl + Paul Brook + + PR fortran/16222 + * resolve.c (gfc_resolve_iterator_expr): New function. + (gfc_resolve_iterator): Use it. Add real_ok argument. Convert + start, end and stride to correct type. + (resolve_code): Pass extra argument. + * array.c (resolve_array_list): Pass extra argument. + * gfortran.h (gfc_resolve): Add prototype. + * trans-stmt.c (gfc_trans_do): Remove redundant type conversions. + Handle real type iterators. + +2004-12-11 Tobias Schlueter + + PR fortran/17175 + * iresolve.c (gfc_resolve_scale): Convert 'I' argument if not of + same kind as C's 'int'. + (gfc_resolve_set_exponent): Convert 'I' argument if not of kind 4. + +2004-12-08 Richard Henderson + + * intrinsic.c (gfc_convert_type_warn): Propagate the input shape + to the output expression. + * iresolve.c (gfc_resolve_cshift, gfc_resolve_eoshift): Suppress + warning conversion. + (gfc_resolve_reshape): Force convert SHAPE and ORDER parameters + to index kind. + +2004-12-08 Tobias Schlueter + + PR fortran/18826 + * resolve.c (resolve_code): Impose correct restrictions on + assigned variable. + + * decl.c (gfc_match_end): Use locus of END when eos is an error. + +2004-12-02 Steven G. Kargl + Paul Brook + + * check.c (gfc_check_flush, gfc_check_fnum): New functions. + (gfc_check_fstat, gfc_check_fstat_sub): New functions. + (gfc_check_stat, gfc_check_stat_sub): New functions. + * gfortran.h (GFC_ISYM_FNUM,GFC_ISYM_FSTAT,GFC_ISYM_STAT): New symbols + * intrinsic.c (add_functions,add_subroutines): Add flush, fnum, + fstat, and stat to intrinsics symbol tables. + * intrinsic.h (gfc_check_flush, gfc_resolve_stat_sub): Add prototypes. + (gfc_resolve_fstat_sub, gfc_resolve_stat): Ditto. + * iresolve.c (gfc_resolve_fnum, gfc_resolve_fstat): New functions. + (gfc_resolve_stat, gfc_resolve_flush): New functions. + (gfc_resolve_stat_sub,gfc_resolve_fstat_sub): New functions + * trans-intrinsic.c (gfc_conv_intrinsic_function): Add new intrinsics. + +2004-12-02 Steven G. Kargl + + * intrinsic.c: Fix and add comments, fix function declarations + (OPTIONAL,REQUIRED): New symbols + (add_functions,add_subroutines): Use symbols + (gmp.h): Remove unused include + +2004-11-25 Joseph S. Myers + + * f95-lang.c, gfortranspec.c, trans-decl.c: Avoid ` as left quote + in diagnostics. + +2004-11-24 Steven Bosscher + + * options.c (gfc_post_options): Don't clear flag_inline_functions. + +2004-11-20 Steven G. Kargl + + * check.c (gfc_check_getcwd_sub): Fix seg fault. + + * check.c (gfc_check_exit,gfc_check_umask,gfc_check_umask_sub, + gfc_check_unlink,gfc_check_unlink_sub): New functions + * gfortran.h (GFC_ISYM_UMASK,GFC_ISYM_UNLINK): New symbols + * intrinsic.c (add_functions,add_subroutines): Add umask, unlink, + exit to intrinsics symbol tables. + * intrinsic.h (gfc_check_umask,gfc_check_unlink,gfc_check_exit, + gfc_check_umask_sub,gfc_check_unlink_sub,gfc_resolve_umask, + gfc_resolve_unlink,gfc_resolve_exit,gfc_resolve_umask_sub, + gfc_resolve_unlink_sub): Add and sort prototypes. + * iresolve.c (gfc_resolve_umask,gfc_resolve_unlink,gfc_resolve_exit, + gfc_resolve_umask_sub,gfc_resolve_unlink_sub): New functions + * trans-intrinsic.c (gfc_conv_intrinsic_function): Use symbols + +2004-11-16 Paul Brook + + PR fortran/13010 + * trans-array.c (gfc_trans_allocate_temp_array): Use gfc_get_dtype. + (gfc_array_init_size, gfc_conv_expr_descriptor): Ditto. + * trans-types.c (gfc_get_dtype): Accept array type rather than element + type. + (gfc_get_nodesc_array_type): Don't set GFC_TYPE_ARRAY_DTYPE. + (gfc_get_array_type_bounds): Ditto. + (gfc_get_derived_type): Recurse into derived type pointers. + * trans-types.h (gfc_get_dtype): Add prototype. + * trans.h (GFC_TYPE_ARRAY_DTYPE): Add comment. + +2004-11-15 Paul Brook + + * trans-types.c (gfc_get_dtype): Remove obsolete TODO. + +2004-11-10 Paul Brook + + PR fortran/18375 + * trans-expr.c (gfc_trans_subarray_assign): Free shape before ss. + * trans-io.c (transfer_array_component): Ditto. + +2004-11-10 Paul Brook + + * invoke.texi: Fix typo. + +2004-11-08 Kazu Hirata + + * arith.c, array.c, decl.c, expr.c, f95-lang.c, gfortran.h, + gfortranspec.c, interface.c, intrinsic.c, iresolve.c, match.c, + module.c, parse.c, parse.h, primary.c, resolve.c, scanner.c, + trans-array.c, trans-array.h, trans-expr.c, trans-intrinsic.c, + trans-io.c, trans-stmt.c, trans.h: Fix comment formatting. + +2004-11-06 Tobias Schlueter + + PR fortran/18023 + * io.c (resolve_tag): Tighten up exception for assigned FORMAT. + +2004-11-06 Kazu Hirata + + * gfortranspec.c: Replace GNU CC with GCC. + +2004-11-05 Tobias Schlueter + + * gfortranspec.c (lang_specific_driver): Change year to 2004. + +2004-11-05 Tobias Schlueter + + PR fortran/18111 + * trans-decl.c (create_function_arglist): Set DECL_ARTIFICIAL for + hidden parameters. + +2004-11-05 Tobias Schlueter + + PR fortran/15164 + * trans-decl.c (gfc_finish_var_decl): Don't declare arguments to + module procedures as if they were module variables. + +2004-11-03 Tobias Schlueter + + PR fortran/17535 + PR fortran/17583 + PR fortran/17713 + * module.c (write_symbol1): Set module_name for dummy arguments. + +2004-11-02 Paul Brook + + * intrinsic.c (check_intrinsic_standard): Include error locus. + Remove VLA. + (gfc_intrinsic_func_interface, gfc_intrinsic_sub_interface): Pass + locus to check_intrinsic_standard. + +2004-10-31 Janne Blomqvist + + PR fortran/17590 + * gfortran.h: Change GFC_STD_* flags to more appropriate + ones. (struct gfc_intrinsic_isym): Add field for standard. (struct + gfc_option_t): Add field for warning about use of nonstandard + intrinsics. + * intrinsic.c (add_sym): Add parameter for standard version, check + this against current standard. + (add_sym_0): Pass standard parameter to add_sym. + (add_sym_1, add_sym_0s, add_sym_1s, add_sym_1m, add_sym_2): Ditto. + (add_sym_2s, add_sym_3, add_sym_3ml, add_sym_3red, add_sym_3s): Ditto. + (add_sym_4, add_sym_4s, add_sym_5, add_sym_5s): Ditto. + (make_generic): Add parameter for standard, check this + against currently selected standard. + (add_functions, add_subroutines): Add parameter to tell which + standard an intrinsic belongs to. + (check_intrinsic_standard): New function. + (gfc_intrinsic_func_interface): Add call to check_intrinsic_standard. + (gfc_intrinsic_sub_interface): Ditto. + * lang.opt: Add Wnonstd-intrinsics option. + * options.c (gfc_init_options): Change to use new GFC_STD_* flags, + init new warning. + (set_Wall): Add warning about nonstd intrinsics. + (gfc_handle_option): Change to use new GFC_STD_* flags, + handle new warning. + * invoke.texi: Update manual to include -Wnonstd-intrinsics. + +2004-10-30 Andrew Pinski + + * f95-lang.c (lang_tree_node): Add chain_next to be the TREE_CHAIN. + +2004-10-30 Tobias Schlueter + + * simplify.c (twos_complement): Calculate mask in GMP arithmetic. + +2004-10-30 Tobias Schlueter + + * trans.c (gfc_trans_code): Set global locus after recursing. Fix + comment typo. + +2004-10-30 Canqun Yang + + * check.c (gfc_check_rand): Allow missing optional argument. + (gfc_check_irand): Ditto. + * intrinsic.c (add_functions): Set arg optional flag for {i,}rand. + +2004-10-28 Scott Robert Ladd + + PR fortran/13490, PR fortran/17912 + * gcc/fortran/gfortran.h: Added pedantic_min_int to gfc_integer_info + * gcc/fortran/gfortran.h: Added ARITH_ASYMMETRIC to arith + * gcc/fortran/arith.c: Added support for an "asymmetric integer" + warning when compiling with pedantic. + * gcc/fortran/arith.c: Set minimum integer values to reflect + realities of two's complement signed integers. Added + pedantic minimum. + +2004-10-17 Andrew Pinski + + * Make-lang.in (F95_ADDITIONAL_OBJS): Kill. + (f951): Do not depend on F95_ADDITIONAL_OBJS and don't + link it in. + +2004-10-14 Tobias Schlueter + + * trans-decl.c (generate_local_decl): Simplify logic, fix comment + typo. + (gfc_generate_function_code): Fix formatting issue. + +2004-10-10 Tobias Schlueter + + * module.c: Fix formatting issues. + +2004-10-09 Tobias Schlueter + + * module.c (mio_interface_rest): Set where member of interface + while loading. + +2004-10-08 Andrew Pinski + + PR fortran/17901 + * options.c (gfc_handle_option): Add break after handing the + J/M option. + +2004-10-08 Tobias Schlueter + + * arith.c: Fix formatting issues. + +2004-10-07 Tobias Schlueter + + PR fortran/17676 + * resolve.c (resolve_operator): Use correct operator name in message. + +2004-10-07 Tobias Schlueter + + * primary.c (match_boz_constant): Allow kind parameter suffixes. + Move standard warning further to the front. + +2004-10-07 Kazu Hirata + + * trans-stmt.c: Fix a comment typo. + +2004-10-07 Paul Brook + + PR fortran/17678 + * trans-array.c (gfc_trans_deferred_array): Leave use associated + variables alone. + +2004-10-06 Tobias Schlueter + + PR fortran/17568 + * simplify.c (twos_complement): New function. + (gfc_simplify_ishft, gfc_simplify_ishftc): Revise. + + * simplify.c (gfc_simplify_abs): Use mpfr_hypot for CABS. + +2004-10-06 Paul Brook + + * trans-stmt.c (gfc_trans_simple_do): New function. + (gfc_trans_do): Use it. Evaluate iteration bounds before entering + loop. Update comments. + +2004-10-04 Tobias Schlueter + + PR fortran/17283 + * iresolve.c (gfc_resolve_pack): Choose function depending if mask + is scalar. + + PR fortran/17631 + * intrinsic.c (add_sym_5): Remove. + (add_subroutines): Add resolution function for MVBITS. + * intrinsic.h (gfc_resolve_mvbits): Declare resolution function for + MVBITS + * iresolve.c (gfc_resolve_mvbits): New function. + (gfc_resolve_random_number): Remove empty line at end of function. + + * trans-const.c (gfc_build_cstring_const): New function. + (gfc_init_cst): Use new function. + * trans-const.h (gfc_build_cstring_const): Add prototype. + * trans-io.c (set_string, set_error_locus): Use new function. + * trans-stmt.c (gfc_trans_goto): Use new function. + + PR fortran/17708 + * parse.c (accept_statement): Don't treat END DO like END IF and + END SELECT. + (parse_do_block): Generate possible END DO label inside END DO + block. + + PR fortran/17776 + * check.c (gfc_check_system_sub): New function. + * gfortran.h (gfc_generic_isym_id): Add GFC_ISYM_SYSTEM. + * intrinsic.c (add_functions): Add 'system'. + (add_subroutines): Add 'system'. + * intrinsic.h (gfc_check_etime_sub, gfc_check_getcwd_sub): + Move prototypes to other suborutines. + (gfc_check_system_sub, gfc_resolve_system, gfc_resolve_system_sub): + Add prototype. + (gfc_resolve_system_clock): Fix formatting of prototype. + * iresolve.c (gfc_resolve_system, gfc_resolve_system_sub): New + functions. + * trans-intrinsic.c (gfc_conv_intrinsic_function): Deal with + GFC_ISYM_SYSTEM. + +2004-10-04 Erik Schnetter + + * scanner.c (preprocessor_line): Accept preprocessor lines without + file names. Check file names for closing quotes. Handle escaped + quotes in file names. + +2004-10-04 Tobias Schlueter + Paul Brook + + * trans-array.c (gfc_conv_expr_descriptor): Check for substriungs. + Use gfc_get_expr_charlen. + * trans-expr.c (gfc_get_expr_charlen): New function. + * trans.h (gfc_get_expr_charlen): Add prototype. + +2004-10-04 Kazu Hirata + + * trans-intrinsic.c: Fix a comment typo. + +2004-10-03 Tobias Schlueter + + * simplify.c (range_check): Remove blank line at beginning of function. + (gfc_simplify_dint): Same at end of function. + (gfc_simplify_exponent, gfc_simplify_fraction): Simplify calculations. + (gfc_simplify_bound): Fix indentation. + (gfc_simplify_log10): Simplify calculation. + (gfc_simplify_min, gfc_simplify_max): Remove blank line at beginning + of function. + (gfc_simplify_nearest): Same at end of function. + (gfc_simplify_nint, gfc_simplify_idnint): Same at beginning of + function. + (gfc_simplify_rrspacing, gfc_simplify_set_exponent, + gfc_simplify_spacing): Simplify calulations. + +2004-10-03 Feng Wang + + * trans-intrinsic.c: Fix comments on spacing and rrspacing + (gfc_conv_intrinsic_rrspacing): Add fold on constant trees. + +2004-10-01 Jan Hubicka + + * f95-lang.c (gfc_expand_function): Update call of + tree_rest_of_compilation. + * trans-decl.c (gfc_generate_constructors): Likewise. + +2004-09-26 Tobias Schlueter + + * trans-intrinsic.c: Comment fixes. + +2004-09-25 Tobias Schlueter + + * decl.c (add_init_expr_to_sym, variable_decl): Comment fixes. + +2004-09-24 Tobias Schlueter + + * trans-types.c (gfc_return_by_reference): Remove superfluous + assertion. + + * intrinsic.h (gfc_resolve_getcwd): Update prototype. + * iresolve.c (gfc_resolve_getcwd): Add second argument to function. + + PR fortran/17615 + * trans-expr.c (gfc_trans_arrayfunc_assign): Look at resolved + function to determine return type. + +2004-09-20 Jan Hubicka + + * trans-decl.c (build_entry_thunks): Finalize the function; do not lower + tree. + (gfc_generate_function_code): Likewise. + +2004-09-20 Tobias Schlueter + + PR fortran/15957 + * simplify.c (gfc_simplify_reshape): Set shape of return value + correctly. + +2004-09-17 Jeffrey D. Oldham + Zack Weinberg + + * f95-lang.c, trans-expr.c, trans.c: Update for new tree-class + enumeration constants. + +2004-09-17 Paul Brook + + * gfortran.h (struct gfc_linebuf): Don't use C99 empty arrays. + (gfc_linebuf_header_size): Define. + * scanner.c (load_file): Use it. + +2004-09-16 Kazu Hirata + + * array.c, data.c, decl.c, dependency.c, error.c, f95-lang.c, + interface.c, intrinsic.c, io.c, misc.c, module.c, parse.h, + resolve.c, scanner.c, trans-array.c, trans-array.h, + trans-common.c, trans-const.h, trans-decl.c, trans-expr.c, + trans-intrinsic.c, trans-stmt.c, trans-types.c, trans.c, + trans.h: Fix comment typos. Follow spelling conventions. + +2004-09-16 Victor Leikehman + + PR/15364 + * trans-io.c (transfer_array_component): New function. + (transfer_expr): For array fields, call transfer_array_component. + +2004-09-16 Kazu Hirata + + * gfortran.texi: Fix a typo. + +2004-09-15 Aaron W. LaFramboise + + * parse.c (eof_buf): Rename eof to eof_buf. + (unexpected_eof): Same. + (gfc_parse_file): Same. + +2004-09-15 Steven G. Kargl + + * check.c (gfc_check_getcwd_sub): New function. + * gfortran.h (GFC_ISYM_GETCWD): New symbol. + * intrinsic.c (add_functions): Add function definition; + Use symbol. + * intrinsic.c (add_subroutines): Add subroutine definitions. + * intrinsic.h: Add prototypes. + * iresolve.c (gfc_resolve_getcwd, gfc_resolve_getcwd_sub): + New functions. + * trans-intrinsic.c (gfc_conv_intrinsic_function): Use symbol. + +2004-09-15 Tobias Schlueter + + PR fortran/16485 + * module.c (write_symbol): Don't fill in module name here. + (write_symbol0): Fill in here instead. + +2004-09-14 Kazu Hirata + + * data.c, decl.c, f95-lang.c, gfortran.h, match.c, + trans-array.c, trans-common.c, trans-expr.c, + trans-intrinsic.c, trans-stmt.c, trans-types.c, trans.h: Fix + comment typos. Follow spelling conventions. + +2004-09-09 Paul Brook + + * scanner.c (get_file): Add ATTRIBUTE_UNUSED. + +2004-09-08 Paul Brook + + * array.c: Don't include assert.h. + * data.c: Don't include assert.h. Replace assert and abort with + gcc_assert and gcc_unreachable. + * dependency.c: Ditto. + * f95-lang.c: Ditto. + * iresolve.c: Ditto. + * resolve.c: Ditto. + * simplify.c: Ditto. + * symbol.c: Ditto. + * trans-array.c: Ditto. + * trans-common.c: Ditto. + * trans-const.c: Ditto. + * trans-decl.c: Ditto. + * trans-expr.c: Ditto. + * trans-intrinsic.c: Ditto. + * trans-io.c: Ditto. + * trans-stmt.c: Ditto. + * trans-types.c: Ditto. + * trans.c: Ditto. + +2004-09-07 Per Bothner + Paul Brook + + * error.c (show_locus): Handle mapped locations. + * f95-lang.c (gfc_be_parse_file): Initialize mapped locations. + * gfortran.h: Include input.h. + (struct gfc_linebuf): Use source_location. + * scanner.c (get_file): Initialize linemap. + (preprocessor_line): Pass extra argument to get_file. + (load_file): Ditto. Setup linemap. + (gfc_new_file): Handle mapped locations. + * trans-common.c (build_field, build_equiv_decl, build_common_decl): + Set decl source locations. + (gfc_trans_common): Set blank common block location. + * trans-decl.c (gfc_set_decl_location): New function. + (gfc_get_label_decl, gfc_get_symbol_decl): Use it. + (trans_function_start): Move call to gfc_set_backend_locus.. + (build_function_decl): ... to here. + (build_entry_thunks): Set and restore the backend locus. + (gfc_generate_constructors): Remove excess arguments to + init_function_start. + (gfc_generate_block_data): Add comments. Set the decl locus. + * trans-io.c (set_error_locus): Handle mapped locations. + * trans.c (gfc_get_backend_locus, gfc_get_backend_locus): Ditto. + (gfc_trans_code): Use SET_EXPR_LOCATION. + (gfc_generate_code): Override the location of the new symbol. + * trans.h (gfc_set_decl_location): Add prototype. + +2004-08-31 Paul Brook + + * trans-types.c (gfc_type_for_mode): Return NULL for unknown modes. + +2004-09-01 Tobias Schlueter + + PR fortran/15327 + * trans-intrinsic.c (gfc_conv_intrinsic_merge): Do the right thing for + strings. + +2004-09-01 Tobias Schlueter + + PR fortran/16400 + PR fortran/16404 + (port from g95) + * resolve.c (resolve_transfer): New function. + (resolve_code): Call resolve_transfer in case of EXEC_TRANSFER. + +2004-08-31 Tobias Schlueter + + PR fortran/16579 + * trans-types.c (gfc_init_types): Make gfc_character1_type_node an + unsigned char. + +2004-08-31 Tobias Schlueter + + * CONTRIB, NEWS, README, TODO: Remove obsolete files. + +2004-08-31 Tobias Schlueter + + PR fortran/17244 + * trans-types.c (gfc_return_by_reference): Remove TODO error, + add comment pointing out possible issue WRT compatibility with g77. + +2004-08-31 Tobias Schlueter + + * trans-decl.c, trans-expr.c, trans-io.c, trans-types.c: Replace + all occurences of 'gfc_strlen_type_node' by + 'gfc_charlen_type_node'. + * trans-types.h: Same. Also update comment accordingly. + +2004-08-31 Tobias Schlueter + + * primary.c: Update copyright boilerplate to say GCC. + * f95-lang.c: Change initial comment to say gfortran. + +2004-08-31 Paul Brook + + * trans-types.h: Add comments. + (intmax_type_node, string_type_node, const_string_type_node): Remove. + +2004-08-30 Richard Henderson + + * Make-lang.in (fortran/f95-lang.o): Update dependencies. + (fortran/trans-decl.o, fortran/trans-types.o): Likewise. + * gfortran.h (gfc_integer_info): Add c_char, c_short, c_int, + c_long, c_long_long. + (gfc_logical_info): Add c_bool. + (gfc_real_info): Add mode_precision, c_float, c_double, c_long_double. + * trans-array.c (gfc_array_allocate): Use TYPE_PRECISION + rather than gfc_int[48]_type_node for allocate choice. + * trans-decl.c (gfc_build_intrinsic_function_decls): Cache + local copies of some kind type nodes. + (gfc_build_builtin_function_decls): Likewise. + * trans-expr.c (gfc_conv_power_op): Likewise. + * trans-intrinsic.c (gfc_conv_intrinsic_index, + gfc_conv_intrinsic_scan, gfc_conv_intrinsic_verify, + gfc_conv_intrinsic_trim, gfc_conv_intrinsic_repeat): Likewise. + * trans-stmt.c (gfc_trans_pause, gfc_trans_stop, + gfc_trans_character_select, gfc_trans_allocate): Likewise. + * trans-io.c (gfc_pint4_type_node): Move into ... + (gfc_build_io_library_fndecls): ... here. Cache local copies of + some kind type nodes. + * trans-types.c (gfc_type_nodes): Remove. + (gfc_character1_type_node, gfc_strlen_type_node): New. + (gfc_integer_types, gfc_logical_types): New. + (gfc_real_types, gfc_complex_types): New. + (gfc_init_kinds): Fill in real mode_precision. + (gfc_build_int_type, gfc_build_real_type): New. + (gfc_build_complex_type, gfc_build_logical_type): New. + (c_size_t_size): New. + (gfc_init_types): Loop over kinds. + (gfc_get_int_type, gfc_get_real_type): Use gfc_validate_kind. + (gfc_get_complex_type, gfc_get_logical_type): Likewise. + (gfc_get_character_type_len): Likewise. + (gfc_type_for_size): Loop over kinds; use a reduced set of + unsigned type nodes. + (gfc_type_for_mode): Loop over kinds. + (gfc_signed_or_unsigned_type): Use gfc_type_for_size. + (gfc_unsigned_type, gfc_signed_type): Use gfc_signed_or_unsigned_type. + * trans-types.h (F95_INT1_TYPE, F95_INT2_TYPE, F95_INT4_TYPE, + F95_INT8_TYPE, F95_INT16_TYPE, F95_REAL4_TYPE, F95_REAL8_TYPE, + F95_REAl16_TYPE, F95_COMPLEX4_TYPE, F95_COMPLEX8_TYPE, + F95_COMPLEX16_TYPE, F95_LOGICAL1_TYPE, F95_LOGICAL2_TYPE, + F95_LOGICAL4_TYPE, F95_LOGICAL8_TYPE, F95_LOGICAL16_TYPE, + F95_CHARACTER1_TYPE, NUM_F95_TYPES, gfc_type_nodes, + gfc_int1_type_node, gfc_int2_type_node, gfc_int4_type_node, + gfc_int8_type_node, gfc_int16_type_node, gfc_real4_type_node, + gfc_real8_type_node, gfc_real16_type_node, gfc_complex4_type_node, + gfc_complex8_type_node, gfc_complex16_type_node, + gfc_logical1_type_node, gfc_logical2_type_node, + gfc_logical4_type_node, gfc_logical8_type_node, + gfc_logical16_type_node, gfc_strlen_kind): Remove. + (gfc_character1_type_node): Turn in to a variable. + (gfc_strlen_type_node): Likewise. + +2004-08-30 Tobias Schlueter + + * gfortran.h (gfc_namespace): Add new field is_block_data. + * parse.c (accept_statement): Remove special handling for BLOCK DATA. + (parse_block_data): Record BLOCK DATA name, set is_block_data field. + * trans.c (gfc_generate_code): Handle BLOCK DATA units. + * trans.h (gfc_generate_block_data): Add prototype. + * trans-decl.c (gfc_generate_block_data): New function. + +2004-08-29 Richard Henderson + + * trans-const.c (gfc_conv_mpz_to_tree): Use mpz_export. + * trans-types.c (gfc_init_kinds): Reject integer kinds larger + than two HOST_WIDE_INT. + +2004-08-29 Tobias Schlueter + + PR fortran/13910 + * decl.c (free_variable, free_value, gfc_free_data, var_list, + var_element, top_var_list, match_data_constant, top_val_list, + gfc_match_data): Move here from match.c. + (match_old_style_init): New function. + (variable_decl): Match old-style initialization. + * expr.c (gfc_get_variable_expr): New function. + * gfortran.h (gfc_get_variable_expr): Add prototype. + * gfortran.texi: Start documentation for supported extensions. + * match.c: Remove the functions moved to decl.c. + * match.h (gfc_match_data): Move prototype to under decl.c. + * symbol.c (gfc_find_sym_tree, gfc_find_symbol): Add/correct + comments. + +2004-08-29 Steven G. Kargl + Paul Brook + + * check.c (gfc_check_besn, gfc_check_g77_math1): New functions. + * f95-lang.c (DO_DEFINE_MATH_BUILTIN): Define. + (DEFINE_MATH_BUILTIN, DEFINE_MATH_BUILTIN_C): Use it. + (build_builtin_fntypes): New function. + (gfc_init_builtin_functions): Use it. + * gfortran.h (enum gfc_generic_isym_id): Add GFC_ISYM_{J,Y}{0,1,N} + and GFC_ISYM_ERF{,C}. + (gfc_c_int_kind): Declare. + * intrinsic.c (add_functions): Add [d]bes* and [d]erf*. + * intrinsic.h (gfc_check_besn, gfc_check_g77_math1, gfc_resolve_besn, + gfc_resolve_g77_math1): Add prototypes. + * resolve.c (gfc_resolve_besn, gfc_resolve_g77_math1): New functions. + * mathbuiltins.def: Add comment. Change third argument. Use + DEFINE_MATH_BUILTIN_C. Add bessel and error functions. + * trans-intrinsic.c (BUILT_IN_FUNCTION): Define. + (DEFINE_MATH_BUILTIN, DEFINE_MATH_BUILTIN_C): Use it. + * trans-types.c (gfc_c_int_kind): Declare. + (gfc_init_kinds): Set it. + +2004-08-29 Steven G. Kargl + Paul Brook + + * gfortran.h (enum gfc_generic_isym_id): Add GFC_ISYM_GET?ID. + (gfc_check_f, gfc_simplify_f): Add f0. + * intrinsic.c (do_check): Call f0. Flatten. + (add_sym_0): Fix prototype. Set f0. + (add_functions): Add getgid, getgid and getuid. + (resolve_intrinsic): Remove obsolete comment. + (do_simplify): Call f0. + * intrinsic.h (gfc_resolve_getgid, gfc_resolve_getpid, + gfc_resolve_getuid): Add prototypes. + * iresolve.c (gfc_resolve_getgid, gfc_resolve_getpid, + gfc_resolve_getuid): New functions. + * trans-intrinsic.c (gfc_conv_intrinsic_function): Handle + GFC_ISYM_GET?ID. + +2004-08-28 Tobias Schlueter + + * error.c (gfc_error_init_1): Remove blank line in front of + function body. Add missing blank. + (gfc_buffer_error, error_char, error_string): Remove blank line in + front of function body. + (show_locus): Add comma in comment. + (gfc_clear_warning, gfc_warning_check, gfc_clear_error, + gfc_push_error, gfc_pop_error): Remove blank line in front of + function body. + (gfc_get_errors): Typo fix in comment in front of function. Remove + blank line in front of function body. + +2004-08-27 Tobias Schlueter + + * gfortran.h (gfc_default_*_kind): Remove prototypes, add extern + variable declaration of same name. + * arith.c, check.c, decl.c, dump_parse_tree.c, expr.c, + intrinsic.c, io.c, iresolve.c, match.c, options.c, primary.c, + resolve.c, simplify.c, symbol.c, trans-const.c, trans-io.c: + Replace all calls to gfc_default_*_kind with variable accesses. + * trans-types.c: Same as above. + (gfc_default_*_kind_1): Rename to gfc_default_*_kind, remove + static qualifier. Replace all occurences. + (gfc_default_*_kind): Remove functions. + +2004-08-26 Richard Henderson + + * arith.c: Include system.h, not real system headers. + (MPZ_NULL, MPF_NULL, DEF_GFC_INTEGER_KIND, DEF_GFC_LOGICAL_KIND, + DEF_GFC_REAL_KIND, GFC_SP_KIND, GFC_SP_PREC, GFC_SP_EMIN, GFC_SP_EMAX, + GFC_DP_KIND, GFC_DP_PREC, GFC_DP_EMIN, GFC_DP_EMAX, GFC_QP_KIND, + GFC_QP_PREC, GFC_QP_EMIN, GFC_QP_EMAX): Remove. + (gfc_integer_kinds, gfc_logical_kinds, gfc_real_kinds, + gfc_index_integer_kind, gfc_default_integer_kind, + gfc_default_real_kind,gfc_default_double_kind, + gfc_default_character_kind, gfc_default_logical_kind, + gfc_default_complex_kind, validate_integer, validate_real, + validate_logical, validate_character, + gfc_validate_kind): Move to trans-types.c. + (gfc_set_model_kind): Use gfc_validate_kind. + (gfc_set_model): Just copy the current precision to default. + (gfc_arith_init_1): Use mpfr precision 128 for integer setup. + * f95-lang.c (gfc_init_decl_processing): Invoke gfc_init_kinds. + * gfortran.h: Update file commentary. + * trans-types.c (MAX_INT_KINDS, MAX_REAL_KINDS): New. + (gfc_default_integer_kind_1, gfc_default_real_kind_1, + gfc_default_double_kind_1, gfc_default_character_kind_1, + gfc_default_logical_kind_1, gfc_default_complex_kind_1): New. + (gfc_init_kinds): New. + (gfc_init_types): Don't set gfc_index_integer_kind here. + * trans-types.h (gfc_init_kinds): Declare. + * doc/invoke.texi: Clarify DOUBLE PRECISION behaviour wrt -r8. + +2004-08-26 Tobias Schlueter + + * check.c (gfc_check_atan2): New function. + * intrinsic.c (add_functions): Use gfc_check_atan2 for ATAN2 + * intrinsic.h (gfc_check_atan2): Add prototype. + +2004-08-25 Richard Henderson + + * arith.c (gfc_validate_kind): Add may_fail argument; abort if + false and we don't validate the kind. + (gfc_check_integer_range, gfc_check_real_range): Update to match. + * check.c (kind_check): Likewise. + * decl.c (gfc_match_old_kind_spec, gfc_match_kind_spec): Likewise. + (match_char_spec, match_logical_spec): Likewise. + * gfortran.h (gfc_validate_kind): Likewise. + * options.c (gfc_handle_option): Likewise. + * primary.c (match_integer_constant, match_real_constant, + match_string_constant, match_logical_constant, + match_const_complex_part): Likewise. + * simplify.c (get_kind, gfc_simplify_bit_size, gfc_simplify_digits, + gfc_simplify_epsilon, gfc_simplify_huge, gfc_simplify_ibclr, + gfc_simplify_ibset, gfc_simplify_ishft, gfc_simplify_ishftc, + gfc_simplify_maxexponent, gfc_simplify_minexponent, + gfc_simplify_nearest, gfc_simplify_not, gfc_simplify_precision, + gfc_simplify_radix, gfc_simplify_range, gfc_simplify_rrspacing, + gfc_simplify_scale, gfc_simplify_spacing, gfc_simplify_tan, + gfc_simplify_tiny): Likewise. + * trans-intrinsic.c (gfc_conv_intrinsic_aint, gfc_conv_intrinsic_mod, + gfc_conv_intrinsic_minmaxloc, gfc_conv_intrinsic_minmaxval, + prepare_arg_info): Likewise. + +2004-08-25 Tobias Schlueter + + * expr.c (gfc_check_assign): Add comment. Add new warning. + * trans-expr.c (gfc_conv_function_call): Correctly dereference + result of pointer valued function when not in pointer assignment. + +2004-08-25 Paul Brook + + * config-lang.in: Remove dead commented line. + * module.c: Replace g95 with gfortran in comment. + +2004-08-25 Paul Brook + + PR fortran/17190 + * arith.c (gfc_mpfr_to_mpz): Workaround mpfr bug. + +2004-08-25 Paul Brook + + PR fortran/17144 + * trans-array.c (gfc_trans_allocate_temp_array): Remove + string_length argument. + (gfc_trans_array_ctor_element): New function. + (gfc_trans_array_constructor_subarray): Use it. + (gfc_trans_array_constructor_value): Ditto. Handle constant + character arrays. + (get_array_ctor_var_strlen, get_array_ctor_strlen): New functions. + (gfc_trans_array_constructor): Use them. + (gfc_add_loop_ss_code): Update to new gfc_ss layout. + (gfc_conv_ss_descriptor): Remember section string length. + (gfc_conv_scalarized_array_ref): Ditto. Remove dead code. + (gfc_conv_resolve_dependencies): Update to new gfc_ss layout. + (gfc_conv_expr_descriptor): Ditto. + (gfc_conv_loop_setup): Ditto. Spelling fixes. + * trans-array.h (gfc_trans_allocate_temp_array): Update prototype. + * trans-const.c (gfc_conv_constant): Update to new gfc_ss layout. + * trans-expr.c (gfc_conv_component_ref): Turn error into ICE. + (gfc_conv_variable): Set string_length from section. + (gfc_conv_function_call): Remove extra argument. + (gfc_conv_expr, gfc_conv_expr_reference): Update to new gfc_ss layout. + * trans-types.c (gfc_get_character_type_len): New function. + (gfc_get_character_type): Use it. + (gfc_get_dtype): Return zero for internal types. + * trans-types.h (gfc_get_character_type_len): Add prototype. + * trans.h (struct gfc_ss): Move string_length out of union. + +2004-08-25 Tobias Schlueter + + * trans.h (build2_v, build3_v): New macros. + (build_v): Remove. + * f95-lang.c (gfc_truthvalue_conversion): Use build2 instead of + build. + * trans-array.c (gfc_conv_descriptor_data, + gfc_conv_descriptor_offset, gfc_conv_descriptor_dimension, + gfc_conv_descriptor_stride, gfc_conv_descriptor_lbound, + gfc_conv_descriptor_ubound, gfc_trans_allocate_array_storage, + gfc_trans_allocate_temp_array, + gfc_trans_array_constructor_subarray, + gfc_trans_array_constructor_value, gfc_conv_array_index_ref, + gfc_trans_array_bound_check, gfc_conv_array_index_offset, + gfc_conv_scalarized_array_ref, gfc_conv_array_ref, + gfc_conv_array_ref, gfc_trans_preloop_setup, + gfc_trans_scalarized_loop_end, gfc_conv_ss_startstride, + gfc_conv_loop_setup, gfc_array_init_size, + gfc_conv_array_initializer, gfc_trans_array_bounds, + gfc_trans_auto_array_allocation, gfc_trans_dummy_array_bias, + gfc_conv_expr_descriptor, gfc_conv_array_parameter, + gfc_trans_deferred_array): Use buildN and buildN_v macros instead + of build and build_v as appropriate. + * trans-common.c (create_common): Same. + * trans-decl.c (gfc_trans_auto_character_variable, + gfc_trans_entry_master_switch, gfc_generate_function_code): Same. + * trans-expr.c (gfc_conv_expr_present, gfc_conv_substring, + gfc_conv_component_ref, gfc_conv_unary_op, gfc_conv_powi, + gfc_conv_cst_int_power, gfc_conv_string_tmp, gfc_conv_concat_op, + gfc_conv_expr_op, gfc_conv_function_call, + gfc_trans_structure_assign): Same. + * trans-intrinsic.c (build_fixbound_expr, build_round_expr, + gfc_conv_intrinsic_aint, gfc_conv_intrinsic_bound, + gfc_conv_intrinsic_cmplx, gfc_conv_intrinsic_mod, + gfc_conv_intrinsic_dim, gfc_conv_intrinsic_sign, + gfc_conv_intrinsic_dprod, gfc_conv_intrinsic_minmax, + gfc_conv_intrinsic_anyall, gfc_conv_intrinsic_count, + gfc_conv_intrinsic_arith, gfc_conv_intrinsic_minmaxloc, + gfc_conv_intrinsic_minmaxval, gfc_conv_intrinsic_btest, + gfc_conv_intrinsic_bitop, gfc_conv_intrinsic_singlebitop, + gfc_conv_intrinsic_ibits, gfc_conv_intrinsic_ishft, + gfc_conv_intrinsic_merge, gfc_conv_intrinsic_strcmp, + gfc_conv_allocated, gfc_conv_associated, prepare_arg_info, + gfc_conv_intrinsic_spacing, gfc_conv_intrinsic_rrspacing, + gfc_conv_intrinsic_trim, gfc_conv_intrinsic_repeat, + gfc_conv_intrinsic_iargc): Same. + * trans-io.c (set_parameter_value, set_parameter_ref, set_string, + set_flag, add_case, io_result, transfer_namelist_element, + transfer_expr): Same. + * trans-stmt.c (gfc_trans_goto, gfc_trans_return, gfc_trans_if_1, + gfc_trans_arithmetic_if, gfc_trans_do, gfc_trans_do_while, + gfc_trans_integer_select, gfc_trans_logical_select, + gfc_trans_character_select, gfc_trans_forall_loop, + gfc_trans_nested_forall_loop, gfc_do_allocate, + generate_loop_for_temp_to_lhs, generate_loop_for_rhs_to_temp, + compute_inner_temp_size, compute_overall_iter_number, + allocate_temp_for_forall_nest, gfc_trans_pointer_assign_need_temp, + gfc_trans_forall_1, gfc_evaluate_where_mask, + gfc_trans_where_assign, gfc_trans_allocate): Same. + * trans-types.c (gfc_get_dtype, gfc_get_array_type_bounds): Same. + * trans.c (gfc_add_modify_expr, gfc_finish_block, + gfc_build_array_ref, gfc_build_function_call, + gfc_trans_runtime_check): Same. + +2004-08-25 Tobias Schlueter + + * trans-const.c (gfc_conv_mpz_to_tree): Change call to + build_int_cst to build_int_cst_wide in accordance to Nathan's + previous patch. + +2004-08-25 Nathan Sidwell + + * trans-array.c (gfc_trans_array_constructor_value): Adjust + build_int_cst calls. + * trans-const.c (gfc_build_string_const, gfc_init_constants, + gfc_conv_mpz_to_tree, gfc_conv_constant_to_tree): Likewise. + * trans-decl.c (gfc_get_symbol_decl, build_entry_thunks, + gfc_trans_entry_master_switch): Likewise. + * trans-intrinsic.c (gfc_conv_intrinsic_ibits, + gfc_conv_intrinsic_len, prepare_arg_info): Likewise. + * trans-io.c (add_case, set_error_locus, + transfer_namelist_element, transfer_expr): Likewise. + * trans-stmt.c (gfc_trans_label_assign, gfc_trans_pause, + gfc_trans_stop, gfc_trans_character_select): Likewise. + * trans-types.c (gfc_init_types, gfc_get_dtype): Likewise. + * trans.c (gfc_trans_runtime_check): Likewise. + +2004-08-24 Tobias Schlueter + + * trans-decl.c, trans-types.c: Add and remove blank lines as + required. + +2004-08-24 Richard Henderson + + * trans-const.c (gfc_conv_mpz_to_tree): Fix 64-bit shift warning. + +2004-08-24 Tobias Schlueter + + * resolve.c (merge_argument_lists): Revert unintentionally + committed change. + +2004-08-24 Tobias Schlueter + + * trans-decl.c (build_function_decl): Fix spelling in comment. + (build_entry_thunks): Remove code with no function. + (gfc_build_intrinsic_function_decls): Remove empty line. + + * resolve.c (resolve_entries): Fix a bunch of comment typos. + +2004-08-24 Nathan Sidwell + + * f95-lang.c (gfc_init_decl_processing): Adjust + build_common_tree_nodes call. + +2004-08-24 Tobias Schlueter + + * trans-types.c: Spelling and formatting fixes. + +2004-08-23 Richard Henderson + + * trans-const.c (gfc_conv_mpz_to_tree): Use mpz_getlimbn instead + of going through an intermediate string. Fix 32/64 int/long bug. + +2004-08-23 Eric Christopher + + * trans-types.c (gfc_type_for_mode): Remove VECTOR_TYPE_SUPPORTED_P + usage. Use build_vector_type_for_mode for vector types. + +2004-08-22 Richard Henderson + + PR 13465 + * data.c (find_con_by_offset): Search ordered list; handle + elements with repeat counts. + (gfc_assign_data_value_range): New. + * gfortran.h (struct gfc_data_value): Make repeat unsigned. + (gfc_assign_data_value_range): Declare. + * match.c (top_val_list): Extract repeat count into a temporary. + * resolve.c (values): Make left unsigned. + (next_data_value): Don't decrement left. + (check_data_variable): Use gfc_assign_data_value_range. + +2004-08-22 Tobias Schlueter + + * trans-const.c, trans-decl.c, trans-expr.c: Spelling fixes. + +2004-08-22 Tobias Schlueter + + * check.c (gfc_check_reduction): Rename to ... + (check_reduction): ... this. Make static. Don't check type of + first argument. + (gfc_check_minval_maxval, gfc_check_prodcut_sum): New functions. + * intrinsic.c (add_functions): Change MAXVAL, MINVAL, PRODUCT and + SUM to use new check functions. + (check_specific): Change logic to call new functions. + * intrinsic.h (gfc_check_minval_maxval, gfc_check_product_sum): + Add prototypes. + (gfc_check_reduction): Remove prototype. + +2004-08-20 Paul Brook + Canqun Yang + + PR fortran/17077 + * trans-array.c (gfc_conv_array_parameter): Pass correct pointer + for automatic arrays. + * trans-types.c (gfc_get_nodesc_array_type): Add comment. + +2004-08-19 Tobias Schlueter + (Port from g95) + + PR fortran/17074 + * match.c (match_simple_forall, match_simple_where): Forward-declare. + (gfc_match_if): Order statement list alphabetically, add WHERE and + FORALL, remove double PAUSE. + (gfc_match_simple_where, match_forall_header, + gfc_match_simple_forall): New functions. + (gfc_match_forall): Use match_forall_header. + +2004-08-19 Paul Brook + + PR fortran/17091 + * gfortran.h (gfc_access): Give ACCESS_UNKNOWN value 0. + * symbol.c (gfc_clear_attr): Use memset. + +2004-08-19 Paul Brook + + PR fortran/14976 + PR fortran/16228 + * data.c (assign_substring_data_value): Remove. + (create_character_intializer): New function. + (gfc_assign_data_value): Track the typespec for the current + subobject. Use create_character_intializer. + +2004-08-19 Erik Schnetter + + PR fortran/16946 + * check.c (gfc_check_reduction): New function. + (gfc_check_minval_maxval): Removed. + (gfc_check_product): Removed. + (gfc_check_sum): Removed. + * intrinsic.h: Add/remove declarations for these. + * gfortran.h: Add field f3red to union gfc_check_f. + * intrinsic.c (add_sym_3red): New function. + (add_functions): Register maxval, minval, product, and sum intrinsics + through add_sym_3red. + (check_specific): Handle f3red union field. + * iresolve.c: Whitespace change. + +2004-08-18 Paul Brook + + * trans-types.c (gfc_sym_type): Use pointer types for optional args. + +2004-08-18 Victor Leikehman + + PR fortran/13278 + * trans-io.c (transfer_namelist_element): New. Recursively handle + derived-type variables. Pass string lengths. + (build_dt): Code moved to build_namelist, with some + changes and additions. + (gfc_build_io_library_fndecls): Declare the fifth + argument in st_set_nml_var_char -- string_length. + +2004-08-17 Paul Brook + Tobias Schlueter + + PR fortran/13082 + * decl.c (get_proc_name): Update mystery comment. + (gfc_match_entry): Check for errors earlier. Add entry point to list. + * dump-parse-tree.c (gfc_show_code_node): Print EXEC_ENTRY nodes. + * gfortran.h (symbol_attribute): Add entry_master. Document entry. + (struct gfc_entry_list): Define. + (gfc_get_entry_list): Define. + (struct gfc_namespace): Add refs and entries. + (enum gfc_exec_op): Add EXEC_ENTRY. + (struct gfc_code): Add ext.entry. + * module.c (ab_attribute, attr_bits): Remove AB_ENTRY. + (mio_symbol_attribute): Don't save/reture addr->entry. + (mio_namespace_ref): Refcount namespaces. + * parse.c (accept_statement): Handle ST_ENTRY. + (gfc_fixup_sibling_symbols): Mark symbol as referenced. + (parse_contained): Fixup sibling references to entry points + after parsing the procedure body. + * resolve.c (resolve_contained_fntype): New function. + (merge_argument_lists, resolve_entries): New functions. + (resolve_contained_functions): Use them. + (resolve_code): Handle EXEC_ENTRY. + (gfc_resolve): Call resolve_entries. + * st.c (gfc_free_statement): Handle EXEC_ENTRY. + * symbol.c (gfc_get_namespace): Refcount namespaces. + (gfc_free_namespace): Ditto. + * trans-array.c (gfc_trans_dummy_array_bias): Treat all args as + optional when multiple entry points are present. + * trans-decl.c (gfc_get_symbol_decl): Remove incorrect check. + (gfc_get_extern_function_decl): Add assertion. Fix coment. + (create_function_arglist, trans_function_start, build_entry_thunks): + New functions. + (gfc_build_function_decl): Rename ... + (build_function_decl): ... to this. + (gfc_create_function_decl): New function. + (gfc_generate_contained_functions): Use it. + (gfc_trans_entry_master_switch): New function. + (gfc_generate_function_code): Use new functions. + * trans-stmt.c (gfc_trans_entry): New function. + * trans-stmt.h (gfc_trans_entry): Add prototype. + * trans-types.c (gfc_get_function_type): Add entry point argument. + * trans.c (gfc_trans_code): Handle EXEC_ENTRY. + (gfc_generate_module_code): Call gfc_create_function_decl. + * trans.h (gfc_build_function_decl): Remove. + (gfc_create_function_decl): Add prototype. + +2004-08-15 Andrew Pinski + + PR fortran/17030 + * f95-lang.c (gfc_init_builtin_functions): Initialize the builtins + for cabs{,f} and copysign{,f}. + * trans-decl.c (gfor_fndecl_math_cabsf): Delete. + (gfor_fndecl_math_cabs): Delete. + (gfor_fndecl_math_sign4): Delete. + (gfor_fndecl_math_sign8): Delete. + (gfc_build_intrinsic_function_decls): Remove the + initializing of cabs{,f} and copysign{,f} functions. + * trans-intrinsic.c (gfc_conv_intrinsic_abs): Use the builtins + instead of the functions definitions. + (gfc_conv_intrinsic_sign): Likewise. + * trans.h (gfor_fndecl_math_cabsf): Delete. + (gfor_fndecl_math_cabs): Delete. + (gfor_fndecl_math_sign4): Delete. + (gfor_fndecl_math_sign8): Delete. + +2004-08-15 Nathan Sidwell + + * trans-array.c (gfc_trans_array_constructor_value): Use + build_int_cst. + * trans-const.c (gfc_build_string_const, + gfc_init_constants, gfc_conv_mpz_to_tree, + gfc_conv_constant_to_tree): Likewise. + * trans-decl.c (gfc_get_symbol_decl): Likewise. + * trans-intrinsic.c (gfc_conv_intrinsic_ibits, + gfc_conv_intrinsic_len, prepare_arg_info): Likewise. + * trans-io.c (add_case, set_error_locus, build_dt, + transfer_expr): Likewise. + * trans-stmt.c (gfc_trans_label_assign, gfc_trans_pause, + gfc_trans_stop, gfc_trans_character_select): Likewise. + * trans-types.c (gfc_init_types, gfc_get_dtype): Likewise. + * trans.c (gfc_trans_runtime_check): Likewise. + +2004-08-14 Paul Brook + + * trans-decl.c (gfc_build_function_decl): Remove dead code. + +2004-08-14 Paul Brook + + * trans-arry.c (gfc_trans_auto_array_allocation): Remove unused var. + +2004-08-13 Tobias Schlueter + + * gfortran.h: Add comments. + * parse.c (parse_contained): Fix comment typo. + * resolve.c (was_declared): Ditto. + * symbol.c: Ditto. + +2004-08-11 Paul Brook + + PR fortran/16917 + * intrinsic.c (add_functions): Add dfloat as an alias for dble. + +2004-08-10 Richard Henderson + + * f95-lang.c (gfc_init_builtin_functions): Remove + __builtin_stack_alloc, add __builtin_alloca. + * trans-array.c (gfc_trans_auto_array_allocation): Use DECL_EXPR. + * trans-decl.c (gfc_trans_auto_character_variable): Likewise. + +2004-08-10 Paul Brook + + * trans-io.c (transfer_expr): Handle pointters. + +2004-08-10 Paul Brook + + PR fortran/16919 + * trans-array.c (gfc_add_loop_ss_code): Handle GFC_SS_COMPONENT. + (gfc_conv_array_index_offset): Allow "temporary" with nonzero delta. + (gfc_trans_preloop_setup, gfc_trans_scalarized_loop_boundary): + Handle GFC_SS_COMPONENT. + (gfc_conv_ss_startstride): Ditto. Set ss->shape. + (gfc_conv_loop_setup): Tweak commends. Remove dead code. + Use ss->shape. + (gfc_conv_array_initializer): Call specific initializer routines. + * trans-expr.c (gfc_trans_structure_assign): New function. + (gfc_trans_subarray_assign): New function. + (gfc_trans_subcomponent_assign): New fucntion + (gfc_conv_structure): Use them. + * trans.h (gfc_ss_type): Add GFC_SS_COMPONENT. + (gfc_ss): Add shape. + +2004-08-08 Victor Leikehman + + * simplify.c (gfc_simplify_shape): Bugfix. + * expr.c (gfc_copy_shape_excluding): New function. + * gfortran.h (gfc_get_shape): Bugfix. + (gfc_copy_shape_excluding): Added declaration. + * iresolve.c (gfc_resolve_all, gfc_resolve_any, gfc_resolve_count, + gfc_resolve_cshift, gfc_resolve_eoshift, gfc_resolve_lbound, + gfc_resolve_ubound, gfc_resolve_transpose): Added compile + time resolution of shape. + +2004-08-06 Janne Blomqvist + + * intrinsic.c (add_subroutines): Add getenv and + get_environment_variable. (add_sym_5s): New function. + * intrinsic.h (gfc_resolve_get_environment_variable): Add + prototype. + * iresolve.c (gfc_resolve_get_environment_variable): New + function. + +2004-08-06 Feng Wang + + * f95-lang.c (gfc_init_builtin_functions): Fix the number of + __builtin_pow[f] arguments. + +2004-08-06 Steven G. Kargl + + * arith.c: Add #define for model numbers. Remove global GMP variables. + (natural_logarithm,common_logarithm,exponential,sine, + cosine,arctangent,hypercos,hypersine ): Remove. + (gfc_mpfr_to_mpz,gfc_set_model_kind,gfc_set_model): New functions. + (arctangent2,gfc_arith_init_1,gfc_arith_done_1 + gfc_check_real_range, gfc_constant_result, gfc_range_check, + gfc_arith_uminus,gfc_arith_plus, gfc_arith_minus, gfc_arith_times, + gfc_arith_divide,complex_reciprocal,complex_pow_ui, + gfc_arith_power,gfc_compare_expr,compare_complex,gfc_convert_real, + gfc_convert_complex,gfc_int2real,gfc_int2complex, + gfc_real2int,gfc_real2real,gfc_real2complex, + gfc_complex2int,gfc_complex2real,gfc_complex2complex): Convert GMP + to MPFR, use new functions. + * arith.h: Remove extern global variables. + (natural_logarithm,common_logarithm,exponential, sine, cosine, + arctangent,hypercos,hypersine): Remove prototypes. + (arctangent2): Update prototype from GMP to MPFR. + (gfc_mpfr_to_mpz, gfc_set_model_kind,gfc_set_model): Add prototypes. + * dump-parse-tree.c (gfc_show_expr): Convert GMP to MPFR. + * expr.c (free_expr0,gfc_copy_expr): Convert GMP to MPFR. + * gfortran.h (GFC_REAL_BITS): Remove. + (arith): Add ARITH_NAN. + Include mpfr.h. Define GFC_RND_MODE. + Rename GCC_GFORTRAN_H GFC_GFC_H. + (gfc_expr): Convert GMP to MPFR. + * module.c: Add arith.h, correct type in comment. + (mio_gmp_real): Convert GMP to MPFR. + (mio_expr): Use gfc_set_model_kind(). + * primary.c: Update copyright date with 2004. + (match_real_constant,match_const_complex_part): Convert GMP to MPFR. + * simplify.c: Remove global GMP variables + (gfc_simplify_abs,gfc_simplify_acos,gfc_simplify_aimag, + gfc_simplify_aint,gfc_simplify_dint,gfc_simplify_anint, + gfc_simplify_dnint,gfc_simplify_asin,gfc_simplify_atan, + gfc_simplify_atan2,gfc_simplify_ceiling,simplify_cmplx, + gfc_simplify_conjg,gfc_simplify_cos,gfc_simplify_cosh, + gfc_simplify_dim,gfc_simplify_dprod,gfc_simplify_epsilon, + gfc_simplify_exp,gfc_simplify_exponent,gfc_simplify_floor, + gfc_simplify_fraction,gfc_simplify_huge,gfc_simplify_int, + gfc_simplify_ifix,gfc_simplify_idint,gfc_simplify_log, + gfc_simplify_log10,simplify_min_max,gfc_simplify_mod, + gfc_simplify_modulo,gfc_simplify_nearest,simplify_nint, + gfc_simplify_rrspacing,gfc_simplify_scale, + gfc_simplify_set_exponent,gfc_simplify_sign,gfc_simplify_sin, + gfc_simplify_sinh,gfc_simplify_spacing,gfc_simplify_sqrt, + gfc_simplify_tan,gfc_simplify_tanh,gfc_simplify_tiny, + gfc_simplify_init_1,gfc_simplify_done_1): Convert GMP to MPFR. + Use new functions. + * trans-const.c (gfc_conv_mpfr_to_tree): Rename from + gfc_conv_mpf_to_tree. Convert it to use MPFR + (gfc_conv_constant_to_tree): Use it. + * trans-const.h: Update prototype for gfc_conv_mpfr_to_tree(). + * trans-intrinsic.c: Add arith.h, remove gmp.h + (gfc_conv_intrinsic_aint,gfc_conv_intrinsic_mod): Convert GMP to MPFR. + +2004-08-06 Victor Leikehman + Paul Brook + + * trans-array.c (gfc_trans_allocate_array_storage, + gfc_trans_allocate_temp_array, gfc_add_loop_ss_code, + gfc_conv_loop_setup): For functions, if the shape of the result + is not known in compile-time, generate an empty array descriptor for + the result and let the callee to allocate the memory. + (gfc_trans_dummy_array_bias): Do nothing for pointers. + (gfc_conv_expr_descriptor): Use function return values directly. + * trans-expr.c (gfc_conv_function_call): Always add byref call + insn to pre chain. + (gfc_trans_pointer_assignment): Add comments. + (gfc_trans_arrayfunc_assign): Don't chain on expression. + +2004-08-01 Roger Sayle + + * options.c (gfc_init_options): Don't warn about the use GNU + extensions by default. + (gfc_post_options): Warn about GNU extensions with -pedantic. + (gfc_handle_option): Don't warn about GNU extensions with -std=gnu. + +2004-07-30 Richard Henderson + + * trans-expr.c (gfc_conv_expr_reference): Create a CONST_DECL + for TREE_CONSTANTs. + +2004-07-25 Richard Henderson + + * trans-decl.c (gfc_build_function_decl): Set DECL_ARTIFICIAL + and DECL_IGNORED_P on RESULT_DECL. + (gfc_generate_constructors): Likewise. + +2004-07-18 Tobias Schlueter + + PR fortran/16465 + * lang.opt (ffixed-line-length-none, ffixed-line-length-): New + options. + (ffixed-line-length-80, ffixed-line-length-132): Remove. + * options.c (gfc_handle_options): Deal with changed options. + * scanner.c (load_line): Change second arg to 'char **', + allocate if pointing to NULL. Keep track of buffer's length. + Adapt buffer size to overlong lines. Pad lines to full length + in fixed form. + (load_file): Adapt to new interface of load_line. + +2004-07-17 Joseph S. Myers + + * trans.h (builtin_function): Declare. + +2004-07-16 Tobias Schlueter + + PR fortran/16404 + (parts ported from g95) + * parse.h (gfc_state_data): New field do_variable. + (gfc_check_do_variable): Add prototype. + * parse.c (push_state): Initialize field 'do_variable'. + (gfc_check_do_variable): New function. + (parse_do_block): Remember do iterator variable. + (parse_file): Initialize field 'do_variable'. + * match.c (gfc_match_assignment, gfc_match_do, + gfc_match_allocate, gfc_match_nullify, gfc_match_deallocate): + Add previously missing checks. + (gfc_match_return): Reformat error message. + * io.c (match_out_tag): New function. + (match_open_element, match_close_element, + match_file_element, match_dt_element): Call match_out_tag + instead of match_vtag where appropriate. + (match_io_iterator, match_io_element): Add missing check. + (match_io): Reformat error message. + (match_inquire_element): Call match_out_tag where appropriate. + + * parse.c (gfc_check_do_variable): Fix error locus. + +2004-07-15 Tobias Schlueter + + PR fortran/15129 + * trans-decl.c (gfc_build_function_decl): Create a new chardecl + for every assumed length character dummy argument. + + PR fortran/15140 + * trans-decl.c (gfc_trans_deferred_vars): Remove bogus assertion. + + PR fortran/13792 + * simplify.c (gfc_simplify_bound): Copy the bound expression. + +2004-07-15 Tobias Schlueter + + PR fortran/15324 + * trans-array.c gfc_trans_g77_array, + gfc_trans_dummy_array_bias): Don't call gfc_trans_string_init + for assumed length characters. + (gfc_conv_expr_descriptor): Set se->string_length if dealing + with a character expression. + (gfc_cvonv_array_parameter): Pass string length when passing + character array according to g77 conventions. + +2004-07-12 Paul Brook + + * expr.c (gfc_check_assign_symbol): Handle pointer assignments. + * trans-array.c (gfc_trans_auto_array_allocation): Remove + initialization code. + * trans-common.c (create_common): Use gfc_conv_initializer. + * trans-decl.c (gfc_get_symbol_decl): Use gfc_conv_initializer. + * trans-expr.c (gfc_conv_initializer): New function. + (gfc_conv_structure): Use it. + * trans.h (gfc_conv_initializer): Add prototype. + +2004-07-11 Paul Brook + + PR fortran/15986 + * parse.c (gfc_fixup_sibling_symbols): Also look for untyped + variables. + (parse_contained): Mark contained symbols as referenced. + +2004-07-11 Tobias Schlueter + + PR fortran/16455 + * module.c (gfc_dump_module, gfc_use_module): Print locus + when opening of module file fails. + + PR fortran/16404 + * io.c (match_io): Flag 'WRITE(...), ...' as extension. + + PR fortran/16404 + * match.c (gfc_match_program): A program name is obligatory. + (gfc_match_return): RETURN in main program is an extension. + (gfc_match_block_data): A space is required before a block data + name. + + PR fortran/16433 + * primary.c (match_boz_constant): Call gfc_notify_std only if + we actually have a non-standard boz-literal-constant. + + PR fortran/15754 + * expr.c (gfc_check_assign): Print ranks if incompatible. Issue + warning if assigning NULL(). + +2004-07-11 Joseph S. Myers + + * f95-lang.c (set_block): Remove. + (gfc_clear_binding_stack): New. + (LANG_HOOKS_CLEAR_BINDING_STACK): Define. + (struct binding_level): Remove block_created_by_back_end. + (clear_binding_level): Likewise. + (poplevel): Don't handle block_created_by_back_end. + +2004-07-10 Tobias Schlueter + + * trans-decl.c (gfc_create_module_variable): Nothing to do if + symbol is in common, because we ... + (gfc_generate_module_vars): Call gfc_trans_common. + +2004-07-10 Paul Brook + + * trans-array.c (gfc_build_null_descriptor): New function. + (gfc_trans_static_array_pointer): Use it. + * trans-array.h (gfc_build_null_descriptor): Add prototype. + * trans-expr.c (gfc_conv_structure): Handle array pointers. + +2004-07-10 Tobias Schlueter + + PR fortran/16336 + * decl.c (gfc_match_save): Use-associated common block + doesn't collide. + * gfortran.h (gfc_common_head): Add new field 'name'. + Fix typo in comment after #endif. + * match.c (gfc_get_common): Add new argument from_common, + mangle name if flag is set, fill in new field in structure + gfc_common_head. + (match_common): Set new arg in call to gfc_get_common, + use-associated common block doesn't collide. + * match.h (gfc_get_common): Adapt prototype. + * module.c (load_commons): Set new arg in call to + gfc_get_common. + * symbol.c (free_common_tree): New function. + (gfc_free_namespace): Call new function. + * trans-common.c (several functions): Remove argument + 'name', use name from gfc_common_head instead. + +2004-07-10 Tobias Schlueter + + * expr.c (gfc_check_pointer_assign): Verify that rank of the LHS + and RHS match. Return early if the RHS is NULL(). + + PR fortran/16336 + * match.c (match_common): Fix error reporting for used common. + + PR fortran/15969 + * trans-expr.c (gfc_conv_structure): Handle initialization + of scalar pointer components. + + * parse.c (decode_statement): Fix matching of BLOCK DATA. + + * trans-decl.c (generate_local_decl): Remove workaround obsoleted + by fix for PR 15481. + +2004-07-10 Tobias Schlueter + + * trans-common.c: Fix whitespace issues, make variable names + more readable. + (create_common): Additionally, make loop logic more obvious. + +2004-07-10 Tobias Schlueter + Paul Brook + + PR fortran/13415 + * trans-common.c (calculate_length): Remove ... + (get_segment_info): Merge into here. Save field type. + (build_field): Use saved type. + (create_common, new_condition, new_segment, finish_equivalences): + Use new get_segment_info. + * trans-types.c: Update comment. + +2004-07-09 Tobias Schlueter + + PR fortran/14077 + * moduele.c (mio_symbol): Don't I/O initial values unless + symbol is a parameter. + +2004-07-09 Tobias Schlueter + + PR fortran/13201 + * resolve.c (resolve_symbol): Verify that the shape of a + parameter array is not only explicit, but also constant. + * array.c (gfc_is_compile_time_shape): New function. + * gfortran.h (gfc_is_compile_time_shape): Add prototype. + +2004-07-09 Tobias Schlueter + + PR fortran/15481 + PR fortran/13372 + PR fortran/13575 + PR fortran/15978 + * module.c (write_symbol, write_symtree): Remove workaround. + * primary.c (match_actual_arglist): Enhance comment. + (gfc_match_rvalue): Handle function call with first argument + a keyword argument correctly. + * resolve.c (resolve_symbol): Change call to + gfc_set_default_type to issue error if no implicit type + can be found. + * trans-decl.c (gfc_create_module_variable): Remove workaround. + +2004-07-08 Paul Brook + + * intrinsic.c (add_sym_4s): New function. + (add_subroutines): Change gfc_add_sym_? to gfc_add_sym_?s. + +2004-07-04 Janne Blomqvist + Paul Brook + + PR fortran/15280 + PR fortran/15665 + * gfortran.h (enum gfc_generic_isym_id): Add GFC_ISYM_IARGC and + GFC_ISYM_COMMAND_ARGUMENT_COUNT. + * intrinsic.c (add_functions): Identify iargc. Add + command_argument_count. + (add_subroutines): Resolve getarg. Add get_command and + get_command_argument. + * intrinsic.h (gfc_resolve_getarg, gfc_resolve_get_command, + gfc_resolve_get_command_argument): Add prototypes. + * iresolve.c (gfc_resolve_getarg, gfc_resolve_get_command, + gfc_resolve_get_command_argument): New functions. + * trans-decl.c (gfor_fndecl_iargc): New variable. + (gfc_build_intrinsic_function_decls): Set it. + * trans-intrinsic.c (gfc_conv_intrinsic_iargc): New function. + (gfc_conv_intrinsic_function): Use it. + * trans.h (gfor_fndecl_iargc): Declare. + +2004-07-04 Matthias Klose + + * Make-lang.in: Generate and install gfortran man page. + * invoke.texi: Remove extra '@c man end'. + +2004-07-04 Richard Henderson + + * f95-lang.c (gfc_mark_addressable): Don't put_var_into_stack. + +2004-07-04 Paul Brook + + * decl.c (gfc_match_implicit_range): Don't use typespec. + (gfc_match_implicit): Handle character selectors. + * gfortran.h (gfc_set_implicit): Remove prototype. + (gfc_add_new_implicit_range, gfc_merge_new_implicit): Update. + * parse.c (accept_statement): Don't call gfc_set_implicit. + * symbol.c (new_ts): Remove. + (gfc_set_implicit_none): Use same loop bounds as other functions. + (gfc_set_implicit): Remove. + (gfc_clear_new_implicit, gfc_add_new_implicit_range): Only set flags. + (gfc_merge_new_implicit): Combine with gfc_set_implicit. + +2004-06-30 Richard Henderson + + * match.c (var_element): Remove unused variable. + + * trans-decl.c (gfc_generate_function_code): Don't set + x_whole_function_mode_p. + (gfc_generate_constructors): Likewise. + +2004-06-30 Richard Henderson + + * trans-decl.c (gfc_generate_function_code): Don't set + immediate_size_expand. + (gfc_generate_constructors): Likewise. + +2004-06-30 Tobias Schlueter + + PR fortran/16161 + * decl.c (gfc_match_type_spec): Rename second argument to + 'implicit_flag', reverse meaning. Don't match_char_spec if + 'implicit_flag' is set. Rename to ... + (match_type_spec): ... this. + (gfc_match_implicit_none, match_implicit_range): Move here + from match.c. + (gfc_match_implicit): Move here from match.c, try to + match_char_len if match_implicit_range doesn't succeed for + CHARACTER implicits. Call renamed fucntion match_type_spec. + (gfc_match_data_decl, match_prefix): Call renamed function + match_type_spec. + * match.c (gfc_match_implicit_none, match_implicit_range, + gfc_match_implicit): Move to decl.c. + * match.h (gfc_match_implicit_none, gfc_match_implicit): + Move protoypes to section 'decl.c'. + (gfc_match_type_spec): Remove prototype. + +2004-06-29 Tobias Schlueter + + * decl.c, interface.c, symbol.c, trans-common.c: Add 2004 to + copyright years. + +2004-06-29 Steven Bosscher + + Make sure types in assignments are compatible. Mostly mechanical. + * trans-const.h (gfc_index_one_node): New define. + * trans-array.c (gfc_trans_allocate_array_storage, + gfc_trans_allocate_temp_array, gfc_trans_array_constructor_subarray, + gfc_trans_array_constructor_value, gfc_trans_array_constructor, + gfc_conv_array_ubound, gfc_conv_array_ref, + gfc_trans_scalarized_loop_end, gfc_conv_section_startstride, + gfc_conv_ss_startstride, gfc_conv_loop_setup, gfc_array_init_size, + gfc_trans_array_bounds, gfc_trans_dummy_array_bias, + gfc_conv_expr_descriptor, gfc_trans_deferred_array): Use the correct + types in assignments, conversions and conditionals for expressions. + * trans-expr.c (gfc_conv_expr_present, gfc_conv_substring, + gfc_conv_unary_op, gfc_conv_cst_int_power, gfc_conv_string_tmp, + gfc_conv_function_call, gfc_trans_pointer_assignment, + gfc_trans_scalar_assign): Likewise. + * trans-intrinsic.c (build_fixbound_expr, gfc_conv_intrinsic_bound, + gfc_conv_intrinsic_anyall, gfc_conv_intrinsic_count, + gfc_conv_intrinsic_minmaxloc, gfc_conv_intrinsic_btest, + gfc_conv_intrinsic_singlebitop, gfc_conv_intrinsic_ishft, + gfc_conv_intrinsic_ishftc, gfc_conv_intrinsic_strcmp, + gfc_conv_allocated, gfc_conv_associated, + gfc_conv_intrinsic_rrspacing, gfc_conv_intrinsic_trim): Likewise. + * trans-io.c (set_string): Likewise. + * trans-stmt.c (gfc_trans_do, gfc_trans_forall_loop, + gfc_do_allocate, generate_loop_for_temp_to_lhs, + generate_loop_for_rhs_to_temp, compute_inner_temp_size, + compute_overall_iter_number, gfc_trans_assign_need_temp, + gfc_trans_pointer_assign_need_temp, gfc_trans_forall_1, + gfc_evaluate_where_mask, gfc_trans_where_assign, + gfc_trans_where_2): Likewise. + * trans-types.c (gfc_get_character_type, gfc_build_array_type, + gfc_get_nodesc_array_type, gfc_get_array_type_bounds): Likewise. + + * trans.c (gfc_add_modify_expr): Add sanity check that types + for the lhs and rhs are the same for scalar assignments. + +2004-06-29 Tobias Schlueter + + * dump-parse-tree.c (show_common): New function. + (gfc_show_namespace): Show commons. + +2004-06-29 Tobias Schlueter + Andrew Vaught + + PR fortran/13249 + PR fortran/15481 + * decl.c (gfc_match_save): Adapt to new common structures, + don't allow saving USE-associated common. + * dump-parse-tree (gfc_show_attr): (saved_)common are not + symbol attributes any longer. + (gfc_show_symbol): Don't show old-style commons any longer. + (gfc_show_namespace): Adapt call to gfc_traverse_symtree to new + interface. + * gfortran.h (symbol_attribute): Remove common and saved_common + attributes. + (gfc_symbol): Remove common_head element. + (gfc_common_head): New struct. + (gfc_get_common_head): New macro. + (gfc_symtree): Add field 'common' to union. + (gfc_namespace): Add field 'common_root'; change type of field + 'blank_common' to blank_common. + (gfc_add_data): New prototype. + (gfc_traverse_symtree): Expect a symtree as first argument + instead of namespace. + * match.c (gfc_get_common): New function. + (match_common_name): Change to take char * as argument, adapt, + fix bug with empty name. + (gfc_match_common): Adapt to new data structures. Disallow + redeclaration of USE-associated COMMON-block. Fix bug with + empty common. + (var_element): Adapt to new common structures. + * match.h (gfc_get_common): Declare. + * module.c: Add 2004 to copyright years, add commons to module + file layout description. + (ab_attribute, attr_bits, mio_symbol_attributes): Remove code + for removed attributes. + (mio_symbol): Adapt to new way of storing common relations. + (load_commons): New function. + (read_module): Skip common list on first pass, load_commons at + second. + (write_commons): New function. + (write_module): Call write_commons(). + * symbol.c (gfc_add_saved_comon, gfc_add_common): Remove + functions related to removed attributes. + (gfc_add_data): New function. + (gfc_clear_attr): Don't set removed attributes. + (gfc_copy_attr): Don't copy removed attributes. + (traverse_symtree): Remove. + (gfc_traverse_symtree): Don't traverse symbol + tree of the passed namespace, but require a symtree to be passed + instead. Unify with traverse_symtree. + (gfc_traverse_ns): Call gfc_traverse_symtree according to new + interface. + (save_symbol): Remove setting of removed attribute. + * trans-common.c (gfc_sym_mangled_common_id): Change to + take 'char *' argument instead of 'gfc_symbol'. + (build_common_decl, new_segment, translate_common): Adapt to new + data structures, add new + argument name. + (create_common): Adapt to new data structures, add new + argument name. Fix typo in intialization of derived types. + (finish_equivalences): Add second argument in call to + create_common. + (named_common): take 'gfc_symtree' instead of 'gfc_symbol'. + (gfc_trans_common): Adapt to new data structures. + * trans-decl.c (gfc_create_module_variables): Remove test for + removed attribute. + +2004-06-29 Tobias Schlueter + + * io.c: Add 2004 to copyright years. + +2004-06-29 Tobias Schlueter + Andrew Vaught + + * gfortran.h (gfc_gsymbol): New typedef. + (gfc_gsym_root): New variable. + (gfc_get_gsymbol, gfc_find_gsym): New prototypes. + * parse.c (global_used): New function. + (parse_block_data): Check for double empty BLOCK DATA, + use global symbol table. + (parse_module): Use global symbol table. + (add_global_procedure, add_global_program): New functions. + (gfc_parse_file): Use global symbol table. + * symbol.c (gfc_gsym_root): New variable. + (gfc_find_gsym, gsym_compare, gfc_get_gsymbol): New + functions. + +2004-06-29 Tobias Schlueter + + * module.c (mio_gmp_real): Correct writing of negative numbers. + +2004-06-29 Tobias Schlueter + + PR fortran/15963 + * expr.c (check_intrinsic_op): Allow comparison of characters. + Make logic easier. + +2004-06-26 Tobias Schlueter + Andrew Vaught + + * decl.c (contained_procedure): New function. + (match_end): Verify correctness of END STATEMENT in + all cases. + +2004-06-26 Tobias Schlueter + Andrew Vaught + + PR fortran/15190 + * decl.c (gfc_match_type_spec), io.c (match_io), parse.c + (decode_statement): Enforce required space in free-form. + +2004-06-22 Richard Kenner + + * f95-lang.c (LANG_HOOKS_GIMPLE_BEFORE_INLINING): Deleted. + * trans-array.c (gfc_conv_descriptor_data): Add operand + for COMPONENT_REF. + (gfc_conv_descriptor_offset, gfc_conv_descriptor_dtype): Likewise. + (gfc_conv_descriptor_dimension, gfc_conv_descriptor_stride): Likewise. + (gfc_conv_descriptor_lbound, gfc_conv_descriptor_ubound): Likewise. + * trans-common.c (create_common): Likewise. + * trans-expr.c (gfc_conv_component_ref): Likewise. + * trans-io.c (set_parameter_value): Likewise. + (set_parameter_ref, set_string, set_flag, io_result): Likewise. + (transfer_expr): Likewise. + * trans-decl.c (gfc_trans_auto_character_variable): + Set up to get DECL_SIZE and DECL_SIZE_UNIT gimplified. + (gfc_gimplify_function): New function. + (gfc_generate_function-code): Properly handle nested functions. + * trans.c (gfc_build_array_ref): Add two new operands for ARRAY_REF. + +2004-06-22 Janne Blomqvist + + PR fortran/15750 + * io.c (gfc_match_inquire): Bugfix for iolength related stuff. + (gfc_resolve_inquire): Resolve the iolength tag. Return + SUCCESS at end of function if no failure has occured. + * resolve.c (resolve_code): Resolve if iolength is encountered. + * trans-io.c: (ioparm_iolength, iocall_iolength, + iocall_iolength_done): New variables. + (last_dt): Add IOLENGTH. + (gfc_build_io_library_fndecls ): Set iolength related variables. + (gfc_trans_iolength): Implement. + (gfc_trans_dt_end): Treat iolength as a third form of data transfer. + +2004-06-21 Tobias Schlueter + + * resolve.c (resolve_symbol): Add comment in function body. + (check_data_variable): Change type of mark to ar_type, adapt code + accordingly. + +2004-06-21 Tobias Schlueter + + * array.c (gfc_insert_constructor): Avoid redundant call to + mpz_comp. Add 2004 to copyright years. + +2004-06-21 Joseph S. Myers + + * trans.h (stmtblock_t): Change has_scope to unsigned int. + +2004-06-20 Steven G. Kargl + + * arith.c (gfc_range_check): correct complex underflow. + +2004-06-15 Tobias Schlueter + + PR fortran/15962 + * match.c (match_case_selector): Call gfc_match_init_expr + instead of gfc_match_expr. + * resolve.c (validate_case_label_expr): No need to check for + constant, since it wouldn't have been matched with the fix to + match.c. + +2004-06-14 Tobias Schlueter + + PR fortran/15211 + * trans-intrinsic.c (gfc_conv_intrinsic_len): Deal with arrays + of strings. + +2004-06-14 Tobias Schlueter + + PR fortran/15510 + * trans-deecl.c (generate_local_decl): Do not issue warning for + unused variables if they're use associated. + +2004-06-14 Tobias Schlueter + Andrew Vaught + + PR fortran/14928 + * gfortran.h (gfc_check_f): Add new field f3ml. + * check.c (gfc_check_minloc_maxloc): Take argument list instead + of individual arguments, reorder if necessary. + * intrinsic.h (gfc_check_minloc_maxloc): ... adapt prototype. + * intrinsic.c (add_sym_3ml): New function. + (add_functions): Change to add_sym_3ml for MINLOC, MAXLOC. + (check_specific): Catch special case MINLOC, MAXLOC. + +2004-06-14 Paul Brook + + * intrinsic.c (add_sym_2s): Use correct function types. + +2004-06-12 Tobias Schlueter + + * Make-lang.in (F95_OBJS, F95_PARSER_OBJS): Alphabetize. Move data.c + * data.c (gfc_get_section_index): Remove dependency on trans.h. + +2004-06-12 Steven G. Kargl + + * check.c (gfc_check_second_sub, gfc_check_irand, gfc_check_rand + gfc_check_srand, gfc_check_etime, gfc_check_etime_sub): New functions. + * gfortran.h (gfc_generic_isym_id): New symbols GFC_ISYM_ETIME, + GFC_ISYM_IRAND, GFC_ISYM_RAND, GFC_ISYM_SECOND. + * trans-intrinsic.c: Use symbols. + * intrinsic.c (add_sym_2s): New function. + * intrinsic.c: Add etime, dtime, irand, rand, second, srand. + * intrinsic.h: Function prototypes. + * iresolve.c (gfc_resolve_etime_sub, gfc_resolve_second_sub + gfc_resolve_srand): New functions. + +2004-06-12 Tobias Schlueter + + PR fortran/14957 + * decl.c (gfc_match_end): Require END {SUBROUTINE|FUNCTION} for + contained procedure. + +2004-06-12 Tobias Schlueter + + PR fortran/12841 + * interface.c (compare_parameter, compare_actual_formal): Don't + check types and array shapes for NULL() + * trans-expr.c (conv_function_call): No double indirection for + NULL() + +2004-06-09 Toon Moene + + * trans-expr.c (gfc_conv_cst_int_power): Compute + x**(-n) by converting it to (1/x)**n instead of + 1/x**n. + +2004-06-09 Tobias Schlueter + + PR fortran/13372 + * module.c (write_symbol, write_symtree): Don't write symbols + wrongly added to namespace. + * trans-decl.c (gfc_create_module_variable): Don't create a + backend decl for a symbol incorrectly added to namespace. + +2004-06-09 Tobias Schlueter + + PR fortran/13201 + * resolve.c (resolve_symbol): Verify that parameter array has an + explicit shape. Fix typos and coding style issues in surrounding + lines. + +2004-06-05 Tobias Schlueter + + PR fortran/15478 + * gfortran.texi: The documentation doesn't contain infomration on + how to report bugs, and shouldn't, so remove the line which + says it does. + +2004-06-05 Tobias Schlueter + + * intrinsic.c (sort_actual): Keep track of type of missing + arguments. (Missing from previous commit.) + +2004-06-03 Tobias Schlueter + + * gfortran.h (gfc_actual_arglist): New field missing_arg_type. + * interface.c (compare_actual_formal): Keep type of omitted + optional arguments. + * trans-expr.c (gfc_conv_function_call): Add string length + argument for omitted string argument. + +2004-06-03 Paul Brook + + * trans.c (gfc_finish_block, gfc_add_expr_to_block): Build statement + lists instead of compound expr chains. + (gfc_trans_code): Annotate statement lists. + +2004-06-03 Tobias Schlueter + + * trans-array.c: Fix spelling in comments. + +2004-06-02 Tobias Schlueter + + PR fortran/15557 + * data.c (assign_substring_data_value): New function. + (gfc_assign_data_value): Call the new function if we're dealing + with a substring LHS. + +2004-06-01 Tobias Schlueter + + PR fortran/15477 + * gfortran.h (GFC_VERSION): Remove. + * gfortran.texi (version-gfortran): Remove, replace by version-GCC + where used. + +2004-05-31 Tobias Schlueter + + * trans-types.c: Fix spelling & layout in comments. + +2004-05-30 Tobias Schlueter + + PR fortran/14067 + * trans-const.c (gfc_conv_string_init): Allow variable string + length lower than initialization string length. + +2004-05-30 Paul Brook + + PR fortran/15620 + * trans-decl.c (gfc_shadow_sym, gfc_restore_sym): New functions. + * trans-expr.c (gfc_trans_string_copy): New function. + (gfc_conv_statement_function): Use them. Create temp vars. Enforce + character lengths. + (gfc_conv_string_parameter): Use gfc_trans_string_copy. + * trans-stmt.c (gfc_trans_forall_1): Use gfc_{shadow,restore}_sym. + * trans.h (struct gfc_saved_var): Define. + (gfc_shadow_sym, gfc_restore_sym): Add prototypes. + +2004-05-30 Steven G. Kargl + + * iresolve.c (gfc_resolve_random_number): Clean up conditional. + +2004-05-29 Steven G. Kargl + + * simplify.c (gfc_simplify_log): Remove useless line of code. + +2004-05-29 Paul Brook + + * trans-common.c (find_equivalence): Find multiple rules. + +2004-05-27 Tobias Schlueter + + * gfortran.h (gfc_current_locus, gfc_set_locus): Remove. + (gfc_current_locus): Declare new global variable. + * scanner.c (gfc_current_locus, gfc_set_locus): Remove. + (gfc_current_locus1): Rename ... + (gfc_current_locus): ... to this. + (gfc_at_eof, gfc_at_bol, gfc_at_eol, gfc_advance_line, next_char, + skip_fixed_comments, skip_free_comments, gfc_next_char_literal, + gfc_peek_char, gfc_gobble_whitespace, gfc_new_file): Use + gfc_current_locus instead of gfc_current_locus1, gfc_set_locus() + and gfc_current_locus(), respectively. + * array.c (match_subscript, gfc_match_array_ref, match_array_list, + match_array_cons_element, gfc_match_array_constructor): + Read/modify gfc_current_locus instead of calling gfc_set_locus() + and gfc_current_locus(). + * decl.c (gfc_match_null, variable_decl, gfc_match_kind_spec, + match_attr_spec, gfc_match_function_decl, gfc_match_end, + attr_decl1, gfc_match_save): Likewise. + * error.c (error_print, gfc_internal_error): Likewise. + * expr.c (gfc_int_expr, gfc_default_logical_kind): Likewise. + * interface.c (gfc_add_interface): Likewise. + * io.c (gfc_match_format, match_dt_format, match_dt_element, + match_io_iterator, match_io): Likewise. + * match.c (gfc_match_space, gfc_match_eos, + gfc_match_small_literal_int, gfc_match_st_label, + gfc_match_strings, gfc_match_name, gfc_match_iterator, + gfc_match_char, gfc_match, gfc_match_assignment, + gfc_match_pointer_assignment, gfc_match_if, gfc_match_do, + gfc_match_nullify, gfc_match_call, match_implicit_range, + gfc_match_implicit, gfc_match_data, match_case_selector, + gfc_match_case, match_forall_iterator): Likewise. + * matchexp.c (gfc_match_defined_op_name, next_operator, + match_level_1, match_mult_operand, match_ext_mult_operand, + match_add_operand, match_ext_add_operand, match_level_2, + match_level_3, match_level_4, match_and_operand, match_or_operand, + match_equiv_operand, match_level_5, gfc_match_expr): Likewise. + * module.c (gfc_match_use, mio_array_ref, mio_expr): Likewise. + * parse.c (match_word, decode_statement, next_free, next_fixed, + add_statement, verify_st_order, parse_if_block, gfc_parse_file): + Likewise. + * primary.c (match_digits, match_integer_constant, + match_boz_constant, match_real_constant, match_substring, + next_string_char, match_charkind_name, match_string_constant, + match_logical_constant, match_const_complex_part, + match_complex_constant, match_actual_arg, match_keyword_arg, + gfc_match_actual_arglist, gfc_match_structure_constructor, + gfc_match_rvalue, gfc_match_variable): Likewise. + * st.c (gfc_get_code): Likewise. + * symbol.c (check_conflict, check_used, check_done, + duplicate_attr, add_flavor, gfc_add_procedure, gfc_add_intent, + gfc_add_access, gfc_add_explicit_interface, gfc_add_type, + gfc_add_component, gfc_reference_st_label, gfc_new_symbol): Likewise. + +2004-05-26 Roger Sayle + + * io.c (format_asterisk): Silence compiler warnings by correcting + the number of elements of a "locus" initializer. + +2004-05-25 Roger Sayle + + PR fortran/13912 + * matchexp.c: Allow unary operators after arithmetic operators + as a GNU extension. + (match_ext_mult_operand, match_ext_add_operand): New functions. + (match_mult_operand): Tweak to call match_ext_mult_operand. + (match_add_operand): Tweak to call match_ext_mult_operand. + (match_level_2): Rearrange to call match_ext_add_operand. + +2004-05-25 Paul Brook + + * expr.c (check_inquiry): Remove bogus tests. + +2004-05-23 Paul Brook + + PR fortran/13773 + * expr.c (restricted_args): Remove redundant checks/argument. + (external_spec_function): Update to match. + (restricted_intrinsic): Rewrite. + +2004-05-23 Paul Brook + Victor Leikehman + + * gfortran.h (struct gfc_symbol): Add equiv_built. + * trans-common.c: Change int to HOST_WIDE_INT. Capitalize error + messages. + (current_length): Remove. + (add_segments): New function. + (build_equiv_decl): Create initialized common blocks. + (build_common_decl): Always add decl to bindings. + (create_common): Create initializers. + (find_segment_info): Reformat to match coding conventions. + (new_condition): Use add_segments. + (add_condition, find_equivalence, add_equivalences): Move iteration + inside functions. Only process each segment once. + (new_segment, finish_equivalences, translate_common): Simplify. + +2004-05-23 Steven G. Kargl + + * check.c (gfc_check_random_seed): Issue for too many arguments. + +2004-05-22 Steven G. Kargl + + * intrinsic.c (add_subroutines): Use add_sym_3s for random_seed. + +2004-05-22 Paul Brook + + * dump-parse-tree.c (gfc_show_equiv): New function. + (gfc_show_namespace): Use it. + +2004-05-22 Victor Leikehman + + PR fortran/13249 + * symbol.c (gfc_add_common): Disable checks to work around other more + fundamental inadequacies. + +2004-05-22 Tobias Schlüter + + * trans-decl.c (gfc_get_extern_function_decl): Set DECL_IS_PURE + only for functions. + (gfc_build_function_decl): Likewise. + +2004-05-22 Steven G. Kargl + + * check.c (gfc_check_system_clock): New function. + * intrinsic.c (add_sym_3s): New function. + (add_subroutines): Use it. + * intrinsic.h (gfc_check_system_clock, gfc_resolve_system_clock): + Add prototypes. + * iresolve.c (gfc_resolve_system_clock): New function. + +2004-05-22 Steven G. Kargl + + * invoke.texi: Document -Wunderflow and spell check. + * lang.opt: Add Wunderflow. + * gfortran.h (gfc_option_t): Add warn_underflow option. + * options.c (gfc_init_options, set_Wall): Use it. + * primary.c (match_real_constant): Explicitly handle UNDERFLOW. + * arith.c (gfc_arith_uminus, gfc_arith_plus, gfc_arith_minus, + gfc_arith_times, gfc_arith_divide, gfc_arith_power, gfc_real2real, + gfc_real2complex, gfc_complex2real, gfc_complex2complex): Ditto. + * arith.c (common_logarithm): Fix typo in comment. + +2004-05-21 Roger Sayle + + * io.c (check_format): As a GNU extension, allow the comma after a + string literal to be optional in a format. Use gfc_notify_std to + issue an error/warning as appropriate. + +2004-05-21 Roger Sayle + + * io.c (check_format): Use gfc_notify_std to determine whether to + issue an error/warning for omitting the digits from the X format. + +2004-05-20 Roger Sayle + + * io.c (check_format): Allow the number before the X format to + be optional when not -pedantic. + +2004-05-18 Feng Wang + Paul Brook + + * f95-lang.c (gfc_init_builtin_functions): Use vold_list_node. + Create decls for __builtin_pow{,f}. + * gfortran.h (PREFIX_LEN): Define. + * trans-decl.c (gfor_fndecl_math_powi): Add. + (gfor_fndecl_math_powf, gfor_fndecl_math_pow): Remove. + (gfc_build_intrinsic_function_decls): Create decls for powi. + * trans-expr.c (powi_table): Add. + (gfc_conv_integer_power): Remove. + (gfc_conv_powi): New function. + (gfc_conv_cst_int_power): New function. + (gfc_conv_power_op): Use new powi routines. + * trans.h (struct gfc_powdecl_list): Add. + (gfor_fndecl_math_powi): Add. + (gfor_fndecl_math_powf, gfor_fndecl_math_pow): Remove. + +2004-05-18 Tobias Schlueter + + * trans.c, trans-decl.c: Fix comment typos. + +2004-05-18 Tobias Schlueter + + * trans-const.c (gfc_conv_mpf_to_tree): Fix typo. + +2004-05-18 Steve Kargl + + * arith.c (gfc_int2complex): Fix incorrect range checking. + +2004-05-18 Paul Brook + + PR fortran/13930 + * decl.c (add_init_expr_to_sym): Remove incorrect check. + (default_initializer): Move to expr.c. + (variable_decl): Don't assign default initializer to variables. + * expr.c (gfc_default_initializer): Move to here. + * gfortran.h (gfc_default_initializer): Add prototype. + * resolve.c (resolve_symbol): Check for illegal initializers. + Assign default initializer. + +2004-05-17 Steve Kargl + + * arith.c (gfc_arith_power): Complex number raised to 0 power is 1. + +2004-05-17 Steve Kargl + + * arith.c (gfc_real2complex): Range checking wrong part of complex + number. + +2004-05-16 Paul Brook + + * options.c (gfc_handle_module_path_options): Fix buffer overrun. + +2004-05-16 Paul Brook + + * arith.c (gfc_range_check): Fix logic error. + +2004-05-16 Steve Kargl + + * arith.c: Fix comment typos. + +2004-05-15 Tobias Schlueter + + PR fortran/13742 + * decl.c (add_init_expr_to_sym): Verify that COMMON variable is + not initialized in a disallowed fashion. + * match.c (gfc_match_common): Likewise. + (var_element): Verify that variable is not in the blank COMMON, + if it is in a common. + +2004-05-15 Joseph S. Myers + + * Make-lang.in (f95.generated-manpages): Remove. + (f95.srcextra): New. + (f95.info, fortran/gfortran.info, fortran/gfortran.dvi, + f95.maintainer-clean): Generate info and dvi files in objdir/doc. + (f95.dvi): Remove. + (dvi): New. + (f95.install-info): Remove. + (install-info): New. + +2004-05-15 Victor Leikehman + + * decl.c (add_init_expr_to_sym): Check for variable size arrays. + +2004-05-15 Tobias Schlueter + + * primary.c (match_boz_constant): Use gfc_notify_std() for + issuing a warning or an error. + +2004-05-15 Tobias Schlueter + + PR fortran/13826 + * primary.c (match_structure_constructor): Rename ... + (gfc_match_structure_constructor): ... to this. Make non-static. + (gfc_match_rvalue): Call renamed function. + * match.h (gfc_match_structure_constructor): Declare. + * match.c (gfc_match_data_constant): Handle structure + constructor. + +2004-05-15 Tobias Schlueter + + PR fortran/13702 + (Port from g95) + * gfortran.h (gfc_linebuf): New typedef. + (linebuf): Remove. + (gfc_file): Revamped, use new gfc_linebuf. + (locus): Revamped, use new types. + (gfc_current_file): Remove. + (gfc_current_form, gfc_source_file): New global variables. + * match.c (gfc_match_space, gfc_match_strings): Use + gfc_current_form to find source form. + * module.c (gfc_dump_module): Use gfc_source_file when printing + module header. + * error.c (show_locus, show_loci) Use new data structures to print + locus. + * scanner.c (first_file, first_duplicated_file, gfc_current_file): + Remove. + (file_head, current_file, gfc_current_form, line_head, line_tail, + gfc_current_locus1, gfc_source_file): New global variables. + (gfc_scanner_init1): Set new global variables. + (gfc_scanner_done1): Free new data structures. + (gfc_current_locus): Return pointer to gfc_current_locus1. + (gfc_set_locus): Set gfc_current_locus1. + (gfc_at_eof): Set new variables. + (gfc_at_bol, gfc_at_eol, gfc_advance_line, gfc_next_char): Adapt + to new locus structure. + (gfc_check_include): Remove. + (skip_free_comments, skip_fixed_comments): Use gfc_current_locus1. + (gfc_skip_comments): Use gfc_current_form, find locus with + gfc_current_locus1. + (gfc_next_char): Use gfc_current_form. + (gfc_peek_char, gfc_gobble_whitespace): Use gfc_current_locus1. + (load_line): Use gfc_current_form. Recognize ^Z as EOF. Fix + comment formatting. + (get_file): New function. + (preprocessor_line, include_line): New functions. + (load_file): Move down, rewrite to match new data structures. + (gfc_new_file): Rewrite to match new data structures. + * parse.c (next_statement): Remove code which is now useless. Use + gfc_source_form and gfc_source_file where appropriate. + * trans-decl.c (gfc_get_label_decl): adapt to new data structures + when determining locus of frontend code. + * trans-io.c (set_error_locus): Same. + * trans.c (gfc_get_backend_locus, gfc_set_backend_locus): Likewise. + * lang-specs.h (@f77-cpp-input, @f95-cpp-input): Remove '-P' from + preprocessor flags. + (all): Add missing initializers. + +2004-05-15 Tobias Schlueter + + * Make-lang.in (trans-common.o): Remove redundant dependency. + (data.c): Replace object file name ... + (data.o): ... by the correct one. + +2004-05-14 Tobias Schlueter + + * dump-parse-tree.c (gfc_show_array_ref): Print colon only + for ranges when dumping array references. + +2004-05-14 Victor Leikehman + + * decl.c (variable_decl): Always apply default initializer. + +2004-05-08 Tobias Schlüter + + PR fortran/15206 + * trans-intrinsic.c (gfc_conv_intrinsic_rrspacing): Fixed to + handle zero correctly. + +2004-05-14 Tobias Schlueter + + * match.c (gfc_match): Eliminate dead code. + +2004-05-14 Tobias Schlueter + + * parse.c (gfc_statement_next_fixed): (Change from Andy's tree) + Detect bad continuation line in fixed form sources. + +2004-05-14 Tobias Schlueter + + PR fortran/15205 + * iresolve.c (gfc_resolve_nearest): Add new function. + * intrinsic.h: ... declare it here. + * intrinsic.c (add_functions): ... add it as resolving function + for NEAREST. + +2004-05-14 Tobias Schlueter + + PR fortran/14066 + * match.c (gfc_match_do): Allow infinite loops with + label-do-stmt. Do not enforce space after comma. + +2004-05-14 Tobias Schlueter + + PR fortran/15051 + * parse.c (parse_interface): Allow empty INTERFACE, remove + seen_body. + +2004-05-14 Tobias Schlueter + + * Make-lang.in, arith.c, arith.h, array.c, bbt.c, check.c, + decl.c, dependency.c, dependency.h, dump-parse-tree.c, error.c, + expr.c, f95-lang.c, gfortran.h, interface.c, intrinsic.c, + intrinsic.h, io.c, iresolve.c, lang-specs.h, match.c, match.h, + matchexp.c, misc.c, module.c, options.c, parse.c, parse.h, + primary.c, resolve.c, scanner.c, simplify.c, st.c, symbol.c, + trans-array.c, trans-array.h, trans-common.c, trans-const.c, + trans-const.h, trans-decl.c, trans-expr.c, trans-intrinsic.c, + trans-io.c, trans-stmt.c, trans-stmt.h, trans-types.c, + trans-types.h, trans.c, trans.h: Update copyright years and + boilerplate. + * data.c: Likewise, also removed two whitespace-only lines. + * gfortranspec.c, lang.opt: Update copyright years. + +2004-05-14 Tobias Schlueter + + PR fortran/14568 + * trans-decl.c (generate_local_decl): Don't warn for unused + variables which are in common blocks. + +2004-05-13 Diego Novillo + + * Make-lang.in, f95-lang.c, trans-array.c, trans-decl.c, + trans-expr.c, trans-intrinsic.c, trans-io.c, trans-stmt.c, + trans.c: Rename tree-simple.[ch] to tree-gimple.[ch]. + +2004-05-13 Victor Leikehman + + PR fortran/15314 + * trans-expr.c (gfc_conv_structure): Use field type, not expr type. + +2004-05-13 Joseph S. Myers + + * gfortran.texi: Use @table @emph instead of @itemize @emph. + Remove "set DEVELOPMENT". + (Compiling GFORTRAN): Remove. + +2004-05-09 Tobias Schlüter + + * array.c (match_subscript, match_array_ref): Add comments + explaining argument 'init'. + * decl.c, f95-lang.c, match.c, resolve.c, trans-array.c, + trans-expr.c, trans.c: Fix some typos in comments. + * dump-parse-tree.c (gfc_show_expr): Remove wrong comment. + * primary.c (match_digits, match_integer_constant): Add comment + explaining signflag. + +2004-05-01 Tobias Schlüter + + PR fortran/13940 + * primary.c: Include system.h and flags.h, needed for pedantic. + (match_boz_constant): Allow "x" for hexadecimal constants, warn if + pedantic is set. + +2004-05-01 Tobias Schlüter + + PR fortran/13940 + * match.c (match_data_constant): Handle case where + gfc_find_symbol sets sym to NULL + +2004-04-28 Tobias Schlüter + + * Make-lang.in (f95-lang.o, trans-intrinsic.o): Add missing + dependency on mathbuiltins.def + +2004-04-24 Victor Leikehman + + * trans-io.c (transfer_expr): Implemented recursive printing + of derived types. + +2004-04-24 Andrew Pinski + + * gfortranspec.c: Do not include multilib.h. + +2004-04-24 Tobias Schlüter + + * trans-intrinsic.c: Fix comment, this is not trans-expr.c. Add + 2004 to copyright years. + * trans-expr.c, trans-decl.c: Comment update, we now generate + GENERIC, not SIMPLE. Add 2004 to copyright years. + +2004-04-24 Paul Brook + + * Make-lang.in (gfortranspec.o): Add dependency on $(TM_H). + +2004-04-24 Feng Wang + + PR 14817 + * arith.c (gfc_arith_divide): Fix complex divide. + +2004-04-23 Andrew Pinski + + * gfortranspec.c: Include the target headers. + +2004-04-18 Feng Wang + + PR fortran/14921 + PR fortran/14540 + * arith.c (arctangent2): New function. + * arith.h (arctangent2): Add function prototype. + * simplify.c (gfc_simplify_atan2): Use it. + (gfc_simplify_log): Use it. + +2004-04-12 Diego Novillo + + * fortran/f95-lang.c (gfc_expand_stmt): Remove. + (LANG_HOOKS_RTL_EXPAND_STMT): Remove. + +2004-04-11 Bud Davis + + PR fortran/14872 + * trans-io.c (build_dt): Change REC to value. + +2004-04-11 Feng Wang + + PR 14394 + * trans-const.c (gfc_conv_mpf_to_tree): Loosen the maximum digits of + the real value when converting mpf to string. + +2004-04-11 Feng Wang + + PR 14395 + * trans-intrinsic.c (gfc_conv_intrinsic_cmplx): Fix the imag part of + the result. + +2004-04-11 Feng Wang + + PR fortran/14377 + * simplify.c (simplify_min_max): Convert the type of the result. + +2004-04-11 Paul Brook + + * gfortran.texi: Use full target triplet. + +2004-04-11 Paul Brook + + * Make-lang.in (GFORTRAN_TEXI): Set it. + (fortran/dfortran.dvi): Use it. Add fortran to include paths. + (fortran/gfortran.info): Ditto. + * gfortran.texi: Major update. + * invoke.texi: New file. + +2004-04-10 Paul Brook + + * trans-array.c (gfc_trans_allocate_temp_array, + gfc_conv_tmp_array_ref): Don't use GFC_DECL_STRING. + * trans-decl.c (gfc_build_dummy_array_decl, + gfc_get_symbol_decl, gfc_build_function_decl, + gfc_create_module_variable): Ditto. + * trans-expr.c (gfc_conv_variable): Ditto. + * trans-intrinsic.c (gfc_conv_intrinsic_len): Ditto. + * trans.h (GFC_DECL_STRING): Remove. + (GFC_DECL_PACKED_ARRAY, GFC_DECL_PARTIAL_PACKED_ARRAY, + GFC_DECL_ASSIGN): Renumber flags. + +2004-04-05 Paul Brook + + PR 13252 + PR 14081 + * f95-lang.c (gfc_init_builtin_functions): Add stack_alloc, stack_save + and stack_restore. + * gfortran.h (struct gfc_charlen): Add backend_decl. + * trans-array.c (gfc_trans_allocate_temp_array, + gfc_conv_temp_array_ref, gfc_conv_resolve_dependencies, + (gfc_conv_loop_setup, gfc_array_allocate, gfc_conv_array_init_size): + Remove old, broken string handling. + (gfc_trans_auto_array_allocation, gfc_trans_g77_array, + gfc_trans_dummy_array_bias, gfc_conv_expr_descriptor, + gfc_trans_deferred_array): Handle character arrays. + * trans-const.c (gfc_conv_const_charlen): New function. + * trans-const.h (gfc_conv_const_charlen): Add prototype. + * trans-decl.c (gfc_finish_var_decl): Don't mark automatic variables + as static. + (gfc_build_dummy_array_decl): Handle arrays with unknown element size. + (gfc_create_string_length): New function. + (gfc_get_symbol_decl): Create lengths for character variables. + (gfc_get_fake_result_decl): Ditto. + (gfc_build_function_decl): Only set length for assumed length + character arguments. + (gfc_trans_dummy_character): New function. + (gfc_trans_auto_character_variable): Rewrite. + (gfc_trans_deferred_vars): Handle more types of character variable. + (gfc_create_module_variable): String lengths have moved. + (gfc_generate_function_code): Initialize deferred var chain earlier. + * trans-expr.c (gfc_conv_init_string_length): Rename ... + (gfc_trans_init_string_length): ... to this. + (gfc_conv_component_ref, gfc_conv_variable, gfc_conv_concat_op, + gfc_conv_function_call): Update to new format for character variables. + (gfc_conv_string_length): Remove. + (gfc_conv_string_parameter): Update assertion. + * trans-intrinsic.c (gfc_conv_intrinsic_len): Use new location. + * trans-io.c (set_string): Use new macro names. + * trans-stmt.c (gfc_trans_label_assign. gfc_trans_goto): Ditto. + * trans-types.c (gfc_get_character_type): Use existing length expr. + (gfc_is_nodesc_array): Make public. + (gfc_get_dtype_cst): Rename ... + (gfc_get_dtype): ... to this. Handle unknown size arrays. + (gfc_get_nodesc_array_type): Use new name. + (gfc_sym_type): New character variable code. + (gfc_get_derived_type): Ditto. + (gfc_get_function_type): Evaluate character variable lengths. + * trans-types.h (gfc_strlen_kind): Define. + (gfc_is_nodesc_array): Add prototype. + * trans.h: Update prototypes. + (struct lang_type): Update comments. + (GFC_DECL_STRING_LEN): New name for GFC_DECL_STRING_LENGTH. + (GFC_KNOWN_SIZE_STRING_TYPE): Remove. + +2004-04-04 Paul Brook + + * gfortran.h (struct gfc_option_t): Remove flag_g77_calls. + * options.c (gfc_init.options, gfc_handle_option): Ditto. + * trans-expr.c (gfc_conv_function_call): Ditto. + * trans-types.c (gfc_is_nodesc_array): Ditto + * lang.opt (fg77-calls): Remove. + +2004-04-04 Paul Brook + + * trans-array.c (OFFSET_FIELD): Rename from BASE_FIELD. + (gfc_conv_descriptor_base): Rename ... + (gfc_conv_descriptor_offset): ... to this. + (gfc_trans_allocate_array_storage): Set offset to zero. + (gfc_conv_array_base): Rename ... + (gfc_conv_array_offset): ... to this. + (gfc_conv_array_index_ref): Add offset parameter. + (gfc_conv_array_ref): Include offset. + (gfc_trans_preloop_setup): Use existing offset. + (gfc_trans_allocate_temp_array, gfc_array_allocate, + gfc_trans_auto_array_allocation, gfc_trans_g77_array, + gfc_trans_dummy_array_bias, gfc_conv_expr_descriptor, + gfc_conf_ss_descriptor): Set offset. + * trans-array.h: Rename prototypes. + * trans-const.h (gfc_index_zero_node): Define. + * trans-decl.c (gfc_build_qualified_array): Change base to offset. + * trans-types.c (gfc_get_array_type_bounds): Ditto. + (gfc_get_nodesc_array_type): Calculate offset before upper bound. + +2004-03-25 Diego Novillo + + * convert.c (convert): Don't handle WITH_RECORD_EXPR. + +2004-03-24 Bud Davis + + PR 14055 + * arith.c (gfc_convert_integer,gfc_convert_real): Removed leading '+' + before conversion by gmp library call. + +2004-03-24 Bud Davis + + PR 12921 + * trans-io.c (gfc_trans_open): Change RECL= to a value parameter. + +2004-02-24 Richard Henderson + + * trans-array.c (gfc_trans_dummy_array_bias): Fix typo. + +2004-02-19 Loren J. Rittle + + * Make-lang.in ($(srcdir)/fortran/gfortran.info): Move... + (fortran/gfortran.info): ... to here. + (f95.srcinfo): New. + +2004-02-16 Richard Henderson + + * Make-lang.in (f95-lang.o, trans-decl.o): Depend on cgraph.h. + * f95-lang.c (LANG_HOOKS_EXPAND_DECL): Remove. + (LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION): New. + (gfc_expand_function): Rename from expand_function_body, make static, + don't do anything except invoke tree_rest_of_compilation. + (gfc_be_parse_file): Invoke cgraph. + (gfc_expand_decl): Remove. + (gfc_init_builtin_functions): Add __builtin_init_trampoline and + __builtin_adjust_trampoline. + * trans-decl.c (gfc_get_extern_function_decl): Don't set DECL_CONTEXT. + (gfc_finalize): New. + (gfc_generate_function_code): Use it. Lower nested functions. + * trans-expr.c (gfc_conv_function_call): Add static chain operand + to call_expr. + * trans.c (gfc_build_function_call): Likewise. + * trans.h (expand_function_body): Remove. + +2004-02-15 Victor Leikehman + + PR gfortran/13433 + * trans-decl.c (gfc_build_function_decl) For functions + returning CHARACTER pass an extra length argument, + following g77 calling conventions. + * trans-types.c (gfc_get_function_type) Ditto. + * trans-expr.c (gfc_conv_function_call) Ditto. + +2004-02-14 Paul Brook + + * f95-lang.c (gfc_init_builtin_functions): Build chain properly. + +2004-02-12 Paul Brook + + * BUGS: Remove. + +2004-02-08 Steve Kargl + + * gfortran.texi: Fix typos. + +2004-02-07 Bud Davis + + PR gfortran/13909 + * intrinsic.c (add_conversions) Use logical conversion instead + of real. + * trans-types.c (gfc_get_logical_type) implemented logical*1 + and logical*2. + +2004-01-17 Paul Brook + + * lang-specs.h: Remove % + + * lang-specs.h: Enable preprocessing of source files + ending in .F, .fpp, .FPP, .F90 and .F95. + +2004-01-13 Toon Moene + + PR fortran/12912 + * lang-specs.h: Enable compilation of files ending + in .f, .for and .FOR. + +2004-01-11 Paul Brook + + * trans-stmt.c (gfc_trans_if_1): New function. + (gfc_trans_if): Use it. + +2004-01-11 Erik Schnetter + + * gfortran.h (GFC_MAX_SYMBOL_LEN): Increase. + (gfc_option_t): Add max_identifier_length. + * lang.opt: Add fmax-identifier-length. + * match.c (parse_name): Use limit. + * options.c (gfc_init_options): Set max_identifier_length. + (gfc_handle_option): Ditto. + +2004-01-11 Feng Wang + + * intrinsic.c (add_functions): Add resolve function to dcmplx. + * intrinsic.h (gfc_resolve_dcmplx): Add prototype. + * iresolve.c (gfc_resolve_dcmplx): New function. + +2004-01-10 Paul Brook + + * trans-decl.c (gfc_get_symbol_decl): Don't set subroutine attr. + * trans-types.c (gfc_sym_type): Handle external dummy procedures. + (gfc_return_by_reference): Correct condition. + (gfc_get_function_type): Ditto. + +2004-01-10 Paul Brook + + * trans-intrinsic.c (gfc_conv_intrinsic_minmax): Convert mismatched + types. + +2004-01-10 Huang Chun + + * iresolve.c: Use correct kind. + +2004-01-10 Huang Chun + + PR fortran/13467 + * trans-decl.c (gfc_create_module_variable): Output array valued + parameters. + +2004-01-10 Paul Brook + + * resolve.c (resolve_branch): Get error message right way round. + +2004-01-10 Canqun Yang + + * trans-array (gfc_conv_loop_setup): Adjust comment to track + reality. + (gfc_array_allocate): Don't count size of element twice. + +2004-01-04 Paul Brook + + * lang.opt (i8, r8, std=*): Remove RejectNegative. + +2004-01-04 Paul Brook + + * error.c (gfc_notify_std): New function. + * gfortran.h (gfc_notify_std): Declare. + (GFC_STD_*): Define. + (gfc_option_t): Add warn_std and allow_std. + * intrinsic.c (gfc_init_expr_extensions): Fix logic. + (gfc_intrinsic_func_interface): Use gfc_notify_std. + * check.c (check_rest): Use gfc_notify_std. + * match.c (gfc_match_pause): Ditto. + (gfc_match_assign): Ditto. + (gfc_match_goto): Ditto. + * resolve.c (resolve_branch): Ditto. + * lang.opt: Add std= and w. + * options.c (gfc_init_options): Set allow_std and warn_std. + (gfc_handle_option): Handle OPT_std_* and OPT_w. + +2004-01-01 Paul Brook + + * array.c (gfc_append_constructor): Take constructor, not expression. + * data.c (struct gfc_expr_stack): Remove. + (expr_stack): Remove. + (find_con_by_offset): Rename from find_expr_in_con. + (find_con_by_component): Rename from find_component_in_con. + (gfc_get_expr_stack): Remove. + (gfc_assign_data_value): Rewrite. + (gfc_expr_push): Remove. + (gfc_expr_pop): Remove. + (gfc_advance_section): Rename from + gfc_modify_index_and_calculate_offset. Handle unbounded sections. + (gfc_get_section_index): Handle unbounded sections. + * gfortran.h: Update prototypes. + * resolve.c (check_data_variable): Array section maight not be the + last ref. + +2004-01-01 Paul Brook + + PR fortran/13432 + * resolve.c (resolve_symbol): Allow assumed length function results. + +2004-01-01 Steve Kargl + + * match.c (gfc_match_pause): Fix spelling. + +2004-01-01 Steven Bosscher + + PR fortran/13251 + * trans-expr.c (gfc_conv_variable): Take the type kind of a substring + reference from the expression. diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2005 b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2005 new file mode 100644 index 0000000000..71fbf68cee --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2005 @@ -0,0 +1,3723 @@ +2005-12-30 Erik Edelmann + + PR fortran/22607 + * trans-decl.c(gfc_get_extern_function_decl): Don't set + DECL_IS_PURE (fndecl) = 1 for return-by-reference + functions. + + fortran/PR 25396 + * interface.c (gfc_extend_expr): Initialize + e->value.function.name to NULL. + +2005-12-29 Paul Thomas + + PR fortran/25532 + * trans-types.c (copy_dt_decls_ifequal): Copy declarations for + components of derived type components by recursing into + gfc_get_derived_type. + +2005-12-28 Andrew Pinski + + PR fortran/25587 + * trans-io.c (gfc_build_st_parameter): Correct off by one error. + +2005-12-28 Rafael Ãvila de Espíndola + + * Make-lang.in: Remove distdir from comment. + +2005-12-24 Paul Thomas + + PR fortran/25029 + PR fortran/21256 + * resolve.c (check_assumed_size_reference, resolve_assumed_size_actual): + Remove because of regressions caused by patch. + (resolve_function, resolve_call, resolve_variable): Remove assumed size + checks because of regressionscaused by patch. + +2005-12-23 Paul Thomas + + PR fortran/25029 + PR fortran/21256 + *resolve.c(resolve_function): Remove assumed size checking for SIZE + and UBOUND and rely on their built-in checking. + +2005-12-22 Tobias Schl"uter + + PR fortran/18990 + * gfortran.h (gfc_charlen): Add resolved field. + * expr.c (gfc_specification_expr): Accept NULL argument. + * resolve.c (gfc_resolve_charlen, gfc_resolve_derived): New. + (gfc_resolve_symbol): Resolve derived type definitions. Use + resolve_charlen to resolve character lengths. + +2005-12-22 Paul Thomas + + PR fortran/20889 + *resolve.c(resolve_structure_cons): Do not attempt to convert + the type of mismatched pointer type components, except when + the constructor component is BT_UNKNOWN; emit error instead. + + PR fortran/25029 + PR fortran/21256 + *resolve.c(check_assumed_size_reference): New function to check for upper + bound in assumed size array references. + (resolve_assumed_size_actual): New function to do a very restricted scan + of actual argument expressions of those procedures for which incomplete + assumed size array references are not allowed. + (resolve_function, resolve_call): Switch off assumed size checking of + actual arguments, except for elemental procedures and array valued + intrinsics; excepting LBOUND. + (resolve_variable): Call check_assumed_size_reference. + + PR fortran/19362 + PR fortran/20244 + PR fortran/20864 + PR fortran/25391 + *interface.c(gfc_compare_types): Broken into two. + (gfc_compare_derived_types): Second half of gfc_compare_types with + corrections for a missing check that module name is non-NULL and + a check for private components. + *symbol.c(gfc_free_dt_list): New function. + (gfc_free_namespace): Call gfc_free_dt_list. + *resolve.c(resolve_symbol): Build the list of derived types in the + symbols namespace. + *gfortran.h: Define the structure type gfc_dt_list. Add a new field, + derived_types to gfc_namespace. Provide a prototye for the new + function gfc_compare_derived_types. + *trans_types.c(gfc_get_derived_type): Test for the derived type being + available in the host namespace. In this case, the host backend + declaration is used for the structure and its components. If an + unbuilt, equal structure that is not use associated is found in the + host namespace, build it there and then. On exit,traverse the + namespace of the derived type to see if there are equal but unbuilt. + If so, copy the structure and its component declarations. + (copy_dt_decls_ifequal): New functions to copy declarations to other + equal structure types. + + PR fortran/20862 + * io.c (gfc_match_format): Make the appearance of a format statement + in a module specification block an error. + + PR fortran/23152 + * match.c (gfc_match_namelist): Set assumed shape arrays in + namelists as std=GFC_STD_GNU and assumed size arrays as an + unconditional error. + + PR fortran/25069 + * match.c (gfc_match_namelist): Set the respecification of a USE + associated namelist group as std=GFC_STD_GNU. Permit the concatenation + on no error. + + PR fortran/25053 + PR fortran/25063 + PR fortran/25064 + PR fortran/25066 + PR fortran/25067 + PR fortran/25068 + PR fortran/25307 + * io.c (resolve_tag): Change std on IOSTAT != default integer to + GFC_STD_GNU and change message accordingly. Add same error for + SIZE. + (match_dt_element, gfortran.h): Add field err_where to gfc_dt and + set it when tags are being matched. + (gfc_resolve_dt): Remove tests that can be done before resolution + and add some of the new ones here. + (check_io_constraints): New function that checks for most of the + data transfer constraints. Some of these were previously done in + match_io, from where this function is called, and some were done + in gfc_resolve_dt. + (match_io): Remove most of the tests of constraints and add the + call to check_io_constraints. + +2005-12-21 Erik Edelmann + + PR fortran/25423 + * parse.c (parse_where_block): break instead of "fall + through" after parsing nested WHERE construct. + +2005-12-18 Paul Thomas + + PR fortran/25018 + *expr.c(check_inquiry): Return FAILURE if there is no symtree to + provide a name. Error/warning for assumed character length argument + to LEN for an initialization expression, using GFC_GNU_STD. Add an + argument to flag that the expression is not restricted. + (check_init_expr): Improve the message for a failing variable. + (gfc_match_init_expr): Call check_enquiry again to make sure that + unsimplified expressions are not causing unnecessary errors. + +2005-12-17 Steven G. Kargl + Tobias Schlueter + + PR fortran/25458 + * simplify.c (gfc_simplify_ibset, gfc_simplify_not): Add call to + twos_complement. + +2005-12-17 Steven G. Kargl + + * decl.c (gfc_match_old_kind_spec,match_type_spec): Use gfc_std_notify + to report nonstandard intrinsic type declarations. + +2005-12-16 Jerry DeLisle + + PR fortran/24268 + * io.c (format_lex): Allow whitespace within text of format specifier. + +2005-12-16 Steven G. Kargl + + PR fortran/25106 + PR fortran/25055 + * match.c (gfc_match_small_literal_int): Add cnt argument; + (gfc_match_st_label,gfc_match_stopcode): Account for cnt argument. + * match.h (gfc_match_small_literal_int): Update prototype. + * decl.c (match_char_length,gfc_match_old_kind_spec): Account for cnt. + * parse.c (next_free): Ditto. + * primary.c (match_kind_param): Ditto. + +2005-12-16 Richard Guenther + + * trans.h (tree): Remove declaration of gfc_build_function_call. + * trans.c (gfc_build_function_call): Remove. + (gfc_build_array_ref): Use build_function_call_expr. + (gfc_trans_runtime_check): Likewise. + * trans-array.c (gfc_trans_allocate_array_storage): Likewise. + (gfc_grow_array): Likewise. + (gfc_trans_array_ctor_element): Likewise. + (gfc_trans_array_constructor_value): Likewise. + (gfc_array_allocate): Likewise. + (gfc_array_deallocate): Likewise. + (gfc_trans_auto_array_allocation): Likewise. + (gfc_trans_dummy_array_bias): Likewise. + (gfc_conv_array_parameter): Likewise. + * trans-expr.c (gfc_conv_power_op): Likewise. + (gfc_conv_string_tmp): Likewise. + (gfc_conv_concat_op): Likewise. + (gfc_conv_expr_op): Likewise. + (gfc_trans_string_copy): Likewise. + * trans-decl.c (build_entry_thunks): Likewise. + (gfc_generate_function_code): Likewise. + (gfc_generate_constructors): Likewise. + * trans-io.c (gfc_trans_open): Likewise. + (gfc_trans_close): Likewise. + (build_filepos): Likewise. + (gfc_trans_inquire): Likewise. + (transfer_namelist_element): Likewise. + (build_dt): Likewise. + (gfc_trans_dt_end): Likewise. + (transfer_expr): Likewise. + (transfer_array_desc): Likewise. + * trans-stmt.c (gfc_trans_pause): Likewise. + (gfc_trans_stop): Likewise. + (gfc_trans_character_select): Likewise. + (gfc_do_allocate): Likewise. + (gfc_trans_assign_need_temp): Likewise. + (gfc_trans_pointer_assign_need_temp): Likewise. + (gfc_trans_forall_1): Likewise. + (gfc_trans_where): Likewise. + (gfc_trans_allocate): Likewise. + (gfc_trans_deallocate): Likewise. + * trans-intrinsic.c (gfc_conv_intrinsic_aint): Likewise. + (gfc_conv_intrinsic_lib_function): Likewise. + (gfc_conv_intrinsic_exponent): Likewise. + (gfc_conv_intrinsic_abs): Likewise. + (gfc_conv_intrinsic_sign): Likewise. + (gfc_conv_intrinsic_ctime): Likewise. + (gfc_conv_intrinsic_fdate): Likewise. + (gfc_conv_intrinsic_ttynam): Likewise. + (gfc_conv_intrinsic_ishftc): Likewise. + (gfc_conv_intrinsic_len_trim): Likewise. + (gfc_conv_intrinsic_index): Likewise. + (gfc_conv_intrinsic_size): Likewise. + (gfc_conv_intrinsic_strcmp): Likewise. + (gfc_conv_intrinsic_adjust): Likewise. + (gfc_conv_associated): Likewise. + (gfc_conv_intrinsic_scan): Likewise. + (gfc_conv_intrinsic_verify): Likewise. + (call_builtin_clz): Likewise. + (gfc_conv_intrinsic_si_kind): Likewise. + (gfc_conv_intrinsic_sr_kind): Likewise. + (gfc_conv_intrinsic_trim): Likewise. + (gfc_conv_intrinsic_repeat): Likewise. + (gfc_conv_intrinsic_iargc): Likewise. + +2005-12-16 Richard Guenther + + * trans.h (gfc_build_indirect_ref): Remove declaration. + * trans.c (gfc_build_indirect_ref): Remove. + * trans-array.c (gfc_trans_array_ctor_element): Use + build_fold_indirect_ref instead of gfc_build_indirect_ref. + (gfc_trans_array_constructor_value): Likewise. + (gfc_conv_array_index_offset): Likewise. + (gfc_conv_scalarized_array_ref): Likewise. + (gfc_conv_array_ref): Likewise. + (gfc_trans_dummy_array_bias): Likewise. + (gfc_conv_expr_descriptor): Likewise. + (gfc_conv_array_parameter): Likewise. + * trans-decl.c (gfc_finish_cray_pointee): Likewise. + (gfc_get_symbol_decl): Likewise. + * trans-expr.c (gfc_conv_substring): Likewise. + (gfc_conv_component_ref): Likewise. + (gfc_conv_variable): Likewise. + (gfc_add_interface_mapping): Likewise. + (gfc_conv_function_call): Likewise. + * trans-intrinsic.c (gfc_conv_intrinsic_ichar): Likewise. + (gfc_conv_intrinsic_transfer): Likewise. + * trans-io.c (nml_get_addr_expr): Likewise. + (transfer_namelist_element): Likewise. + (transfer_expr): Likewise. + * trans-stmt.c (gfc_trans_nested_forall_loop): Likewise. + (allocate_temp_for_forall_nest_1): Likewise. + (gfc_trans_forall_1): Likewise. + +2005-12-16 Richard Guenther + + * trans-array.c (gfc_conv_descriptor_data_addr): Use + build_fold_addr_expr where appropriate. + (gfc_trans_allocate_array_storage): Likewise. + (gfc_trans_array_constructor_value): Likewise. + (gfc_conv_array_data): Likewise. + (gfc_conv_expr_descriptor): Likewise. + (gfc_conv_array_parameter): Likewise. + * trans-expr.c (gfc_conv_variable): Likewise. + (gfc_conv_function_val): Likewise. + (gfc_conv_function_call): Likewise. + (gfc_conv_expr_reference): Likewise. + * trans-intrinsic.c (gfc_conv_intrinsic_ctime): Likewise. + (gfc_conv_intrinsic_fdate): Likewise. + (gfc_conv_intrinsic_ttynam): Likewise. + (gfc_conv_intrinsic_si_kind): Likewise. + (gfc_conv_intrinsic_trim): Likewise. + * trans-io.c (set_parameter_ref): Likewise. + (gfc_convert_array_to_string): Likewise. + (gfc_trans_open): Likewise. + (gfc_trans_close): Likewise. + (build_filepos): Likewise. + (gfc_trans_inquire): Likewise. + (nml_get_addr_expr): Likewise. + (transfer_namelist_element): Likewise. + (build_dt): Likewise. + (gfc_trans_dt_end): Likewise. + (transfer_array_component): Likewise. + (transfer_expr): Likewise. + (transfer_array_desc): Likewise. + (gfc_trans_transfer): Likewise. + * trans-stmt.c (gfc_trans_allocate): Likewise. + (gfc_trans_deallocate): Likewise. + +2005-12-16 Kazu Hirata + + * dependency.c, resolve.c, trans-array.c: Fix comment typos. + * gfortran.texi: Fix typos. + +2005-12-14 Erik Edelmann + + PR fortran/18197 + * resolve.c (resolve_formal_arglist): Remove code to set + the type of a function symbol from it's result symbol. + +2005-12-13 Richard Guenther + + * trans-expr.c (gfc_conv_substring): Use fold_build2 and + build_int_cst. + +2005-12-13 Richard Sandiford + + * Make-lang.in (fortran/trans-resolve.o): Depend on + fortran/dependency.h. + * gfortran.h (gfc_expr): Add an "inline_noncopying_intrinsic" flag. + * dependency.h (gfc_get_noncopying_intrinsic_argument): Declare. + (gfc_check_fncall_dependency): Change prototype. + * dependency.c (gfc_get_noncopying_intrinsic_argument): New function. + (gfc_check_argument_var_dependency): New function, split from + gfc_check_fncall_dependency. + (gfc_check_argument_dependency): New function. + (gfc_check_fncall_dependency): Replace the expression parameter with + separate symbol and argument list parameters. Generalize the function + to handle dependencies for any type of expression, not just variables. + Accept a further argument giving the intent of the expression being + tested. Ignore intent(in) arguments if that expression is also + intent(in). + * resolve.c: Include dependency.h. + (find_noncopying_intrinsics): New function. + (resolve_function, resolve_call): Call it on success. + * trans-array.h (gfc_conv_array_transpose): Declare. + (gfc_check_fncall_dependency): Remove prototype. + * trans-array.c (gfc_conv_array_transpose): New function. + * trans-intrinsic.c (gfc_conv_intrinsic_function): Don't use the + libcall handling if the expression is to be evaluated inline. + Add a case for handling inline transpose()s. + * trans-expr.c (gfc_trans_arrayfunc_assign): Adjust for the new + interface provided by gfc_check_fncall_dependency. + +2005-12-12 Steven G. Kargl + + PR fortran/25078 + * match.c (gfc_match_equivalence): Count number of objects. + +2005-12-11 Aldy Hernandez + + * lang.opt: Add RejectNegative to ffixed-form and ffree-form. + +2005-12-10 Francois-Xavier Coudert + + PR fortran/25068 + * io.c (resolve_tag): Add correct diagnostic for F2003 feature. + +2005-12-10 Thomas Koenig + + PR fortran/23815 + * io.c (top level): Add convert to io_tag. + (resolve_tag): convert is GFC_STD_GNU. + (match_open_element): Add convert. + (gfc_free_open): Likewise. + (gfc_resolve_open): Likewise. + (gfc_free_inquire): Likewise. + (match_inquire_element): Likewise. + * dump-parse-tree.c (gfc_show_code_node): Add + convet for open and inquire. + gfortran.h: Add convert to gfc_open and gfc_inquire. + * trans-io.c (gfc_trans_open): Add convert. + (gfc_trans_inquire): Likewise. + * ioparm.def: Add convert to open and inquire. + * gfortran.texi: Document CONVERT. + +2005-12-09 Roger Sayle + + PR fortran/22527 + * f95-lang.c (gfc_truthvalue_conversion): Use a zero of the correct + integer type when building an inequality. + +2005-12-09 Richard Guenther + + * f95-lang.c (build_builtin_fntypes): Use correct + return types, as indicated by comments. + +2005-12-08 Erik Edelmann + + PR fortran/25292 + * check.c (gfc_check_associated): Allow function results + as actual arguments to ASSOCIATED. Moved a misplaced + comment. + +2005-12-07 Rafael Ãvila de Espíndola + + * Make-lang.in (fortran.all.build, fortran.install-normal): Remove. + +2005-12-07 Rafael Ãvila de Espíndola + + * Make-lang.in: Remove all dependencies on s-gtype, except for + gt-fortran-trans.h. + +2005-12-03 Francois-Xavier Coudert + + PR fortran/25106 + * parse.c (next_free): Use new prototype for gfc_match_st_label. + Correctly emit hard error if a label is zero. + * match.c (gfc_match_st_label): Never allow zero as a valid + label. + (gfc_match, gfc_match_do, gfc_match_goto): Use new prototype for + gfc_match_st_label. + * primary.c (): Use new prototype for gfc_match_st_label. + * io.c (): Likewise. + * match.h: Likewise. + +2005-12-02 Richard Guenther + + * trans.h (build1_v): Use build1, not build to build the + void typed tree. + +2005-12-01 Erik Schnetter + + * decl.c (gfc_match_old_kind_spec): Improve handling of old style + COMPLEX*N + +2005-12-01 Paul Thomas + + PR fortran/24789 + * trans-decl.c (gfc_get_symbol_decl): Move the expression for + unit size of automatic character length, dummy pointer array + elements down a few lines from the version that fixed PR15809. + +2005-11-30 Bernhard Fischer + + PR fortran/21302 + * lang.opt: New options -ffree-line-length- and -ffree-line-length-none. + * gfortran.h: Add free_line_length and add description of + free_line_length and fixed_line_length. + * options.c (gfc_init_options, gfc_handle_option): Initialize + and set free_line_length and fixed_line_length. + * scanner.c (load_line): Set free_line_length to 132 and + fixed_line_length to 72 or user requested values. + * scanner.c: Typo in comment. + * invoke.texi: Document -ffree-line-length- and + -ffree-line-length-none + +2005-11-30 Paul Thomas + + PR fortran/15809 + * trans-decl.c (gfc_get_symbol_decl): In the case of automatic + character length, dummy pointer arrays, build an expression for + unit size of the array elements, to be picked up and used in the + descriptor dtype. + * trans-io.c (gfc_trans_transfer): Modify the detection of + components of derived type arrays to use the gfc_expr references + instead of the array descriptor dtype. This allows the latter + to contain expressions. + +2005-11-30 Erik Edelmann + + PR fortran/15809 + * trans-array.c (gfc_trans_deferred_array): Allow PARM_DECLs past + in addition to VAR_DECLs. + +2005-11-29 Jakub Jelinek + + * io.c (gfc_resolve_open): RESOLVE_TAG access field as well. + +2005-11-27 Bernhard Fischer + + * gfortran.h: remove superfluous whitespace and use GNU + comment-style for the documentation of backend_decl. + +2005-11-27 Steven G. Kargl + + PR fortran/24917 + * primary.c (match_boz_constant): Implement postfix BOZ constants; + (match_string_constant): Peek for b, o, z, and x + +2005-11-27 Francois-Xavier Coudert + + PR fortran/23912 + * iresolve.c (gfc_resolve_dim, gfc_resolve_mod, + gfc_resolve_modulo): When arguments have different kinds, fold + the lower one to the largest kind. + * check.c (gfc_check_a_p): Arguments of different kinds is not + a hard error, but an extension. + * simplify.c (gfc_simplify_dim, gfc_simplify_mod, + gfc_simplify_modulo): When arguments have different kinds, fold + the lower one to the largest kind. + +2005-11-21 Jakub Jelinek + + PR fortran/14943 + PR fortran/21647 + * Make-lang.in (fortran/trans-io.o): Depend on fortran/ioparm.def. + * dump-parse-tree.c (gfc_show_code_node): Dump c->block for + EXEC_{READ,WRITE,IOLENGTH} nodes. + * io.c (terminate_io, match_io, gfc_match_inquire): Put data + transfer commands into EXEC_{READ,WRITE,IOLENGTH}'s code->block. + * resolve.c (resolve_blocks): Handle EXEC_{READ,WRITE,IOLENGTH}. + * trans-io.c (ioparm_unit, ioparm_err, ioparm_end, ioparm_eor, + ioparm_list_format, ioparm_library_return, ioparm_iostat, + ioparm_exist, ioparm_opened, ioparm_number, ioparm_named, + ioparm_rec, ioparm_nextrec, ioparm_size, ioparm_recl_in, + ioparm_recl_out, ioparm_iolength, ioparm_file, ioparm_file_len, + ioparm_status, ioparm_status_len, ioparm_access, ioparm_access_len, + ioparm_form, ioparm_form_len, ioparm_blank, ioparm_blank_len, + ioparm_position, ioparm_position_len, ioparm_action, + ioparm_action_len, ioparm_delim, ioparm_delim_len, ioparm_pad, + ioparm_pad_len, ioparm_format, ioparm_format_len, ioparm_advance, + ioparm_advance_len, ioparm_name, ioparm_name_len, + ioparm_internal_unit, ioparm_internal_unit_len, + ioparm_internal_unit_desc, ioparm_sequential, ioparm_sequential_len, + ioparm_direct, ioparm_direct_len, ioparm_formatted, + ioparm_formatted_len, ioparm_unformatted, ioparm_unformatted_len, + ioparm_read, ioparm_read_len, ioparm_write, ioparm_write_len, + ioparm_readwrite, ioparm_readwrite_len, ioparm_namelist_name, + ioparm_namelist_name_len, ioparm_namelist_read_mode, ioparm_iomsg, + ioparm_iomsg_len, ioparm_var): Remove. + (enum ioparam_type, enum iofield_type, enum iofield, + enum iocall): New enums. + (gfc_st_parameter_field, gfc_st_parameter): New typedefs. + (st_parameter, st_parameter_field, iocall): New variables. + (ADD_FIELD, ADD_STRING): Remove. + (dt_parm, dt_post_end_block): New variables. + (gfc_build_st_parameter): New function. + (gfc_build_io_library_fndecls): Use it. Initialize iocall + array rather than ioparm_*, add extra first arguments to + the function types. + (set_parameter_const): New function. + (set_parameter_value): Add type argument, return a bitmask. + Changed to set a field in automatic structure variable rather + than set a field in a global _gfortran_ioparm variable. + (set_parameter_ref): Likewise. If requested var has different + size than what field should point to, call with a temporary and + then copy into the user variable. Add postblock argument. + (set_string): Remove var_len argument, add type argument, return + a bitmask. Changed to set fields in automatic structure variable + rather than set a field in a global _gfortran_ioparm variable. + (set_internal_unit): Remove iunit, iunit_len, iunit_desc arguments, + add var argument. Return a bitmask. Changed to set fields in + automatic structure variable rather than set a field in a global + _gfortran_ioparm variable. + (set_flag): Removed. + (io_result): Add var argument. Changed to read common.flags field + from automatic structure variable and bitwise AND it with 3. + (set_error_locus): Add var argument. Changed to set fields in + automatic structure variable rather than set a field in a global + _gfortran_{filename,line} variables. + (gfc_trans_open): Use gfc_start_block rather than gfc_init_block. + Create a temporary st_parameter_* structure. Adjust callers of + all above mentioned functions. Pass address of the temporary + variable as first argument to the generated function call. + Use iocall array rather than ioparm_* separate variables. + (gfc_trans_close, build_filepos, gfc_trans_inquire): Likewise. + (build_dt): Likewise. Change first argument to tree from tree *. + Don't dereference code->ext.dt if last_dt == INQUIRE. Emit + IOLENGTH argument setup here. Set dt_parm/dt_post_end_block + variables and gfc_trans_code the nested data transfer commands + in code->block. + (gfc_trans_iolength): Just set last_dt and call build_dt immediately. + (transfer_namelist_element): Pass address of dt_parm variable + to generated functions. Use iocall array rather than ioparm_* + separate variables. + (gfc_trans_backspace, gfc_trans_endfile, gfc_trans_rewind, + gfc_trans_flush, gfc_trans_read, gfc_trans_write): Use iocall array + rather than ioparm_* separate variables. + (gfc_trans_dt_end): Likewise. Pass address of dt_parm variable + as first argument to generated function. Adjust io_result caller. + Prepend dt_post_end_block before io_result code. + (transfer_expr): Use iocall array rather than ioparm_* separate + variables. Pass address of dt_parm variables as first argument + to generated functions. + * ioparm.def: New file. + +2005-11-21 Paul Thomas + + PR fortran/24223 + * resolve.c (resolve_contained_fntype) Error if an internal + function is assumed character length. + + PR fortran/24705 + * trans-decl.c (gfc_create_module_variable) Skip ICE in + when backend decl has been built and the symbol is marked + as being in an equivalence statement. + +2005-11-20 Toon Moene + + * invoke.texi: Remove superfluous @item. + +2005-11-19 Janne Blomqvist + + PR fortran/24862 + * trans-io.c (gfc_trans_transfer): Handle arrays of derived type. + +2005-11-17 Francois-Xavier Coudert + + PR fortran/20811 + * scanner.c (gfc_open_included_file): Add an extra include_cwd + argument. Only include files in the current working directory if + its value is true. + * gfortran.h: Change prototype for gfc_open_included_file. + (load_file): Don't search for include files in the current working + directory. + * options.c (gfc_post_options): Add the directory of the source file + to the list of paths for included files. + * module.c (gfc_use_module): Look for module files in the current + directory. + +2005-11-16 Alan Modra + + PR fortran/24096 + * trans-types.c (gfc_init_kinds): Use one less for max_exponent + of IBM extended double format. + +2005-11-13 Francois-Xavier Coudert + + * intrinsic.c (add_functions): Add COMPLEX, FTELL, FGETC, FGET, + FPUTC, FPUT, AND, XOR and OR intrinsic functions. + (add_subroutines): Add FGETC, FGET, FPUTC, FPUT and FTELL intrinsic + subroutines. + * gfortran.h: Add GFC_ISYM_AND, GFC_ISYM_COMPLEX, GFC_ISYM_FGET, + GFC_ISYM_FGETC, GFC_ISYM_FPUT, GFC_ISYM_FPUTC, GFC_ISYM_FTELL, + GFC_ISYM_OR, GFC_ISYM_XOR. + * iresolve.c (gfc_resolve_and, gfc_resolve_complex, + gfc_resolve_or, gfc_resolve_fgetc, gfc_resolve_fget, + gfc_resolve_fputc, gfc_resolve_fput, gfc_resolve_ftell, + gfc_resolve_xor, gfc_resolve_fgetc_sub, gfc_resolve_fget_sub, + gfc_resolve_fputc_sub, gfc_resolve_fput_sub, gfc_resolve_ftell_sub): + New functions. + * check.c (gfc_check_complex, gfc_check_fgetputc_sub, + gfc_check_fgetputc, gfc_check_fgetput_sub, gfc_check_fgetput, + gfc_check_ftell, gfc_check_ftell_sub, gfc_check_and): New functions. + * simplify.c (gfc_simplify_and, gfc_simplify_complex, gfc_simplify_or, + gfc_simplify_xor): New functions. + * trans-intrinsic.c (gfc_conv_intrinsic_function): Add cases for + GFC_ISYM_AND, GFC_ISYM_COMPLEX, GFC_ISYM_FGET, GFC_ISYM_FGETC, + GFC_ISYM_FPUT, GFC_ISYM_FPUTC, GFC_ISYM_FTELL, GFC_ISYM_OR and + GFC_ISYM_XOR. + * intrinsic.h: Add prototypes for all functions added to iresolve.c, + simplify.c and check.c. + +2005-11-10 Paul Thomas + Steven G. Kargl + + PR fortran/15976 + * resolve.c (resolve_symbol): Disallow automatic arrays in module scope. + +2005-11-10 Paul Thomas + + PR fortran/24655 + PR fortran/24755 + * match.c (recursive_stmt_fcn): Add checks that symtree exists + for the expression to weed out inline intrinsic functions and + parameters. + + PR fortran/24409 + * module.c (mio_symtree_ref): Correct the patch of 0923 so that + a symbol is not substituted for by a the symbol for the module + itself and to prevent the promotion of a formal argument. + +2005-11-10 Tobias Schl"uter + + PR fortran/24643 + * primary.c (match_varspec): Check for implicitly typed CHARACTER + variables before matching substrings. + +2005-11-09 Steven G. Kargl + + * trans-intrinsic.c: Typo in comment. + +2005-11-09 Erik Edelmann + + PR fortran/22607 + * trans-decl.c(build_function_decl): Don't set + DECL_IS_PURE (fndecl) = 1 for return-by-reference + functions. + +2005-11-08 Tobias Schl"uter + + * dump-parse-tree.c: Fix comment typo, add a few blank lines. + +2005-11-07 Steven G. Kargl + + * error.c: Use flag_fatal_error. + * invoke.texi: Remove -Werror from list of options. + +2005-11-06 Paul Thomas + + PR fortran/24534 + * resolve.c (resolve_symbol): Exclude case of PRIVATE declared + within derived type from error associated with PRIVATE type + components within derived type. + + PR fortran/20838 + PR fortran/20840 + * gfortran.h: Add prototype for gfc_has_vector_index. + * io.c (gfc_resolve_dt): Error if internal unit has a vector index. + * expr.c (gfc_has_vector_index): New function to check if any of + the array references of an expression have vector inidices. + (gfc_check_pointer_assign): Error if internal unit has a vector index. + + PR fortran/17737 + * data.c (gfc_assign_data_value): Remove gcc_assert that caused the ICE + and replace by a standard dependent warning/error if overwriting an + existing initialization. + * decl.c (gfc_data_variable): Remove old error for already initialized + variable and the unused error check for common block variables. Add + error for hots associated variable and standard dependent error for + common block variables, outside of blockdata. + * symbol.c (check_conflict): Add constraints for DATA statement. + +2005-11-06 Janne Blomqvist + + PR fortran/24174 + PR fortran/24305 + * fortran/trans-io.c (gfc_build_io_library_fndecls): Add kind + argument to transfer_array. + (transfer_array_desc): Add kind argument. + +2005-11-06 Francois-Xavier Coudert + + * intrinsic.c (add_functions): Add ctime and fdate intrinsics. + (add_subroutines): Likewise. + * intrinsic.h: Prototypes for gfc_check_ctime, + gfc_check_ctime_sub, gfc_check_fdate_sub, gfc_resolve_ctime, + gfc_resolve_fdate, gfc_resolve_ctime_sub, gfc_resolve_fdate_sub. + * gfortran.h: Add GFC_ISYM_CTIME and GFC_ISYM_FDATE. + * iresolve.c (gfc_resolve_ctime, gfc_resolve_fdate, + gfc_resolve_ctime_sub, gfc_resolve_fdate_sub): New functions. + * trans-decl.c (gfc_build_intrinsic_function_decls): Add + gfor_fndecl_fdate and gfor_fndecl_ctime. + * check.c (gfc_check_ctime, gfc_check_ctime_sub, + gfc_check_fdate_sub): New functions. + * trans-intrinsic.c (gfc_conv_intrinsic_ctime, + gfc_conv_intrinsic_fdate): New functions. + (gfc_conv_intrinsic_function): Add cases for GFC_ISYM_CTIME + and GFC_ISYM_FDATE. + * intrinsic.texi: Documentation for the new CTIME and FDATE + intrinsics. + * trans.h: Declarations for gfor_fndecl_ctime and gfor_fndecl_fdate. + +2005-11-05 Kazu Hirata + + * decl.c, trans-decl.c: Fix comment typos. + * gfortran.texi: Fix a typo. + +2005-11-05 Francois-Xavier Coudert + + * intrinsic.c (add_functions): Add function version of TTYNAM. + * intrinsic.h: Add prototypes for gfc_check_ttynam and + gfc_resolve_ttynam. + * gfortran.h: Add case for GFC_ISYM_TTYNAM. + * iresolve.c (gfc_resolve_ttynam): New function. + * trans-decl.c (gfc_build_intrinsic_function_decls): Add a tree + for function call to library ttynam. + * check.c (gfc_check_ttynam): New function. + * trans-intrinsic.c (gfc_conv_intrinsic_ttynam): New function. + (): Call gfc_conv_intrinsic_ttynam. + * trans.h: Add prototype for gfor_fndecl_ttynam. + +2005-11-04 Steven G. Kargl + + PR fortran/24636 + * match.c (gfc_match_stopcode): Set stop_code = -1. + +2005-11-04 Francois-Xavier Coudert + + PR fortran/18452 + * lang-specs.h: Pass -lang-fortran to the preprocessor. + +2005-11-02 Andrew Pinski + + PR fortran/18157 + * trans-array.c (gfc_conv_resolve_dependencies): Use the correct + type for the temporary array. + * trans-expr.c (gfc_trans_assignment): Pass lss + instead of lss_section + to gfc_conv_resolve_dependencies to get the + correct type. + +2005-11-02 Tobias Schl"uter + + * decl.c (gfc_match_entry): Function entries don't need an argument + list if there's no RESULT clause. + +2005-11-01 Tobias Schl"uter + + PR fortran/24008 + * decl.c (gfc_match_entry): Function entries need an argument list. + +2005-11-01 Erik Edelmann + + PR 24245 + * trans.c (gfc_generate_code): Move code to create a main + program symbol from here ... + * parse.c (main_program_symbol): ... to this new + function, setting the locus from gfc_current_locus + instead of ns->code->loc. + (gfc_parse_file): Call main_program_symbol for main programs. + +2005-11-01 Tobias Schl"uter + + PR fortran/24404 + * resolve.c (resolve_symbol): Output symbol names in more error + messages, clarify error message. + +2005-11-01 Tobias Schl"uter + + * dump-parse-tree.c (show_symtree): Revert change unintentionally + committed in r106246. + +2005-11-01 Paul Thomas + + PR fortran/21565 + * symbol.c (check_conflict): An object cannot be in a namelist and in + block data. + + PR fortran/18737 + * resolve.c (resolve_symbol): Set the error flag to + gfc_set_default_type, in the case of an external symbol, so that + an error message is emitted if IMPLICIT NONE is set. + + PR fortran/14994 + * gfortran.h (gfc_generic_isym_id): Add GFC_ISYM_SECNDS to enum. + * check.c (gfc_check_secnds): New function. + * intrinsic.c (add_functions): Add call to secnds. + * iresolve.c (gfc_resolve_secnds): New function. + * trans-intrinsic (gfc_conv_intrinsic_function): Add call to + secnds via case GFC_ISYM_SECNDS. + * intrinsic.texi: Add documentation for secnds. + +2005-10-31 Andreas Schwab + + * Make-lang.in (GFORTRAN_TARGET_INSTALL_NAME): Define. + (GFORTRAN_CROSS_NAME): Remove. + (fortran.install-common): Correctly install a cross compiler. + (fortran.uninstall): Use GFORTRAN_TARGET_INSTALL_NAME instead of + GFORTRAN_CROSS_NAME. + +2005-10-30 Erik Edelmann + + * gfortran.texi: Update contributors. + +2005-10-30 Erik Edelmann + + PR fortran/18883 + * trans-decl.c (gfc_finish_var_decl): Add decl to the + current function, rather than the parent. Make + assertion accept fake result variables. + * trans-expr.c (gfc_conv_variable): If the character + length of an ENTRY isn't set, get the length from + the master function instead. + +2005-10-30 Thomas Koenig + + * gfortran.texi: Remove reservations about I/O usability. Document + that array intrinsics mostly work. + +2005-10-30 Tobias Schl"uter + + * gfortran.texi: Move license stuff to back. Add information + on ENUM and ENUMERATOR. + * invoke.texi: Document -fshort-enums. + +2005-10-30 Gaurav Gautam + Tobias Schl"uter + + * arith.c (gfc_enum_initializer): New function. + (gfc_check_integer_range): Made extern. + * decl.c (enumerator_history): New typedef. + (last_initializer, enum_history, max_enum): New variables. + (create_enum_history, gfc_free_enum_history): New functions. + (add_init_expr_to_sym): Call create_enum_history if parsing ENUM. + (variable_decl): Modified to parse enumerator definition. + (match_attr_spec): Add PARAMETER attribute to ENUMERATORs. + (gfc_match_data_decl): Issues error, if match_type_spec do not + return desired return values. + (set_enum_kind, gfc_match_enum, gfc_match_enumerator_def): New + functions. + (gfc_match_end): Deal with END ENUM. + * gfortran.h (gfc_statement): ST_ENUM, ST_ENUMERATOR, ST_END_ENUM + added. + (symbol_attribute): Bit field for enumerator added. + (gfc_options): Add fshort_enums. + (gfc_enum_initializer, gfc_check_integer_range): Add prototypes. + * options.c: Include target.h + (gfc_init_options): Initialize fshort_enums. + (gfc_handle_option): Deal with fshort_enums. + * parse.c (decode_statement): Match ENUM and ENUMERATOR statement. + (gfc_ascii_statement): Deal with the enumerator statements. + (parse_enum): New function to parse enum construct. + (parse_spec): Added case ST_ENUM. + * parse.h (gfc_compile_state): COMP_ENUM added. + (gfc_match_enum, gfc_match_enumerator_def, gfc_free_enum_history): + Prototype added. + * symbol.c (gfc_copy_attr): Copy enumeration attribute. + * lang.opt (fshort-enums): Option added. + +2005-10-30 Francois-Xavier Coudert + + * check.c (gfc_check_malloc, gfc_check_free): New functions. + * gfortran.h (gfc_generic_isym_id): Add GFC_ISYM_MALLOC. + * intrinsic.c (add_functions): Add symbols for MALLOC function. + (add_subroutines): Add symbol for FREE subroutine. + * intrinsic.h: Prototypes for gfc_check_malloc, gfc_check_free, + gfc_resolve_malloc and gfc_resolve_free. + * intrinsic.texi: Add doc for FREE and MALLOC intrinsics. + * iresolve.c (gfc_resolve_malloc, gfc_resolve_free): New + functions. + * trans-intrinsic.c (gfc_conv_intrinsic_function): Add case for + GFC_ISYM_MALLOC. + +2005-10-30 Steven Bosscher + + * gfortran.texi: Update contributors. + +2005-10-29 Steven Bosscher + + * interface.c: Fix previous checkin (an incomplete patch + was commited for me). + +2005-10-29 Joseph S. Myers + + * intrinsic.texi: Remove empty @cindex line. + +2005-10-28 Francois-Xavier Coudert + + * check.c (gfc_check_alarm_sub, gfc_check_signal, + gfc_check_signal_sub): New functions. + * gfortran.h (gfc_generic_isym_id): Add GFC_ISYM_SIGNAL. + * intrinsic.c (add_functions): Add signal intrinsic. + (add_subroutines): Add signal and alarm intrinsics. + * intrinsic.texi: Document the new intrinsics. + * iresolve.c (gfc_resolve_signal, gfc_resolve_alarm_sub, + gfc_resolve_signal_sub): New functions. + * trans-intrinsic.c (gfc_conv_intrinsic_function): Add case + for GFC_ISYM_SIGNAL. + * intrinsic.h: Add prototypes for gfc_check_alarm_sub, + gfc_check_signal, gfc_check_signal_sub, gfc_resolve_signal, + gfc_resolve_alarm_sub, gfc_resolve_signal_sub. + +2005-10-28 Steven Bosscher + + PR fortran/24545 + * interface.c (gfc_match_end_interface): Fix typo in + INTERFACE_USER_OP case. + +2005-10-26 Francois-Xavier Coudert + + PR fortran/15586 + * resolve.c (resolve_symbol): Remove the use of whynot, so that + error messages are not built from pieces. + +2005-10-26 Paul Thomas + + PR fortran/24158 + * decl.c (gfc_match_data_decl): Correct broken bit of code + that prevents undefined derived types from being used as + components of another derived type. + * resolve.c (resolve_symbol): Add backstop error when derived + type variables arrive here with a type that has no components. + +2005-10-25 Jakub Jelinek + + * trans.h (gfc_conv_cray_pointee): Remove. + * trans-expr.c (gfc_conv_variable): Revert 2005-10-24 change. + * trans-array.c (gfc_conv_array_parameter): Likewise. + * trans-decl.c (gfc_conv_cray_pointee): Remove. + (gfc_finish_cray_pointee): New function. + (gfc_finish_var_decl): Use it. Don't return early for Cray + pointees. + (gfc_create_module_variable): Revert 2005-10-24 change. + * decl.c (cray_pointer_decl): Update comment. + * gfortran.texi: Don't mention Cray pointees aren't visible in the + debugger. + + * symbol.c (check_conflict): Add conflict between cray_pointee + and in_common resp. in_equivalence. + * resolve.c (resolve_equivalence): Revert 2005-10-24 change. + + * module.c (ab_attribute): Add AB_CRAY_POINTER and AB_CRAY_POINTEE. + (attr_bits): Likewise. + (mio_symbol_attribute): Save and restore cray_pointe{r,e} attributes. + (mio_symbol): For cray_pointee write/read cp_pointer reference. + +2005-10-25 Feng Wang + + PR fortran/22290 + * trans-decl.c (gfc_add_assign_aux_vars): New function. Add two + auxiliary variables. + (gfc_get_symbol_decl): Use it when a variable, including dummy + argument, is assigned a label. + (gfc_trans_assign_aux_var): New function. Set initial value of + the auxiliary variable explicitly. + (gfc_trans_deferred_vars): Use it. + * trans-stmt.c (gfc_conv_label_variable): Handle dummy argument. + +2005-10-24 Asher Langton + + PR fortran/17031 + PR fortran/22282 + * check.c (gfc_check_loc): New function. + * decl.c (variable_decl): New variables cp_as and sym. Added a + check for variables that have already been declared as Cray + Pointers, so we can get the necessary attributes without adding + a new symbol. + (attr_decl1): Added code to catch pointee symbols and "fix" + their array specs. + (cray_pointer_decl): New method. + (gfc_match_pointer): Added Cray pointer parsing code. + (gfc_mod_pointee_as): New method. + * expr.c (gfc_check_assign): Added a check to catch vector-type + assignments to pointees with an unspecified final dimension. + * gfortran.h: (GFC_ISYM_LOC): New. + (symbol_attribute): Added cray_pointer and cray_pointee bits. + (gfc_array_spec): Added cray_pointee and cp_was_assumed bools. + (gfc_symbol): Added gfc_symbol *cp_pointer. + (gfc_option): Added flag_cray_pointer. + (gfc_add_cray_pointee): Declare. + (gfc_add_cray_pointer ): Declare. + (gfc_mod_pointee_as): Declare. + * intrinsic.c (add_functions): Add code for loc() intrinsic. + * intrinsic.h (gfc_check_loc): Declare. + (gfc_resolve_loc): Declare. + * iresolve.c (gfc_resolve_loc): New. + * lang.opt: Added fcray-pointer flag. + * options.c (gfc_init_options): Initialized. + gfc_match_option.flag_cray_pointer. + (gfc_handle_option): Deal with -fcray-pointer. + * parse.c:(resolve_equivalence): Added code prohibiting Cray + pointees in equivalence statements. + * resolve.c (resolve_array_ref): Added code to prevent bounds + checking for Cray Pointee arrays. + (resolve_equivalence): Prohibited pointees in equivalence + statements. + * symbol.c (check_conflict): Added Cray pointer/pointee + attribute checking. + (gfc_add_cray_pointer): New. + (gfc_add_cray_pointee): New. + (gfc_copy_attr): New code for Cray pointers and pointees. + * trans-array.c (gfc_trans_auto_array_allocation): Added code to + prevent space from being allocated for pointees. + (gfc_conv_array_parameter): Added code to catch pointees and + correctly set their base address. + * trans-decl.c (gfc_finish_var_decl): Added code to prevent + pointee declarations from making it to the back end. + (gfc_create_module_variable): Same. + * trans-expr.c (gfc_conv_variable): Added code to detect and + translate pointees. + (gfc_conv_cray_pointee): New. + * trans-intrinsic.c (gfc_conv_intrinsic_loc): New. + (gfc_conv_intrinsic_function): Added entry point for loc + translation. + * trans.h (gfc_conv_cray_pointee): Declare. + + * gfortran.texi: Added section on Cray pointers, removed Cray + pointers from list of proposed extensions. + * intrinsic.texi: Added documentation for loc intrinsic. + * invoke.texi: Documented -fcray-pointer flag. + +2005-10-24 Asher Langton + + * decl.c (gfc_match_save): Changed duplicate SAVE errors to + warnings in the absence of strict standard conformance + * symbol.c (gfc_add_save): Same. + +2005-10-24 Francois-Xavier Coudert + + PR fortran/15586 + * arith.c (gfc_arith_error): Change message to include locus. + (check_result, eval_intrinsic, gfc_int2int, gfc_real2real, + gfc_real2complex, gfc_complex2real, gfc_complex2complex): Use + the new gfc_arith_error. + (arith_error): Rewrite full error messages instead of building + them from pieces. + * check.c (must_be): Removed. + (type_check, numeric_check, int_or_real_check, real_or_complex_check, + kind_check, double_check, logical_array_check, array_check, + scalar_check, same_type_check, rank_check, kind_value_check, + variable_check, gfc_check_allocated, gfc_check_associated, + gfc_check_cmplx, gfc_check_dcmplx, gfc_check_dot_product, + gfc_check_index, gfc_check_kind, gfc_check_matmul, gfc_check_null, + gfc_check_pack, gfc_check_precision, gfc_check_present, + gfc_check_spread): Rewrite full error messages instead of + building them from pieces. + * decl.c (gfc_match_entry): Rewrite full error messages instead + of building them from pieces. + * parse.c (gfc_state_name): Remove. + * parse.h: Remove prototype for gfc_state_name. + +2005-10-23 Andrew Pinski + + PR fortran/23635 + * check.c (gfc_check_ichar_iachar): Move the code around so + that the check on the length is after check for + references. + +2005-10-23 Asher Langton + + * decl.c (match_type_spec): Add a BYTE type as an extension. + +2005-10-23 Paul Thomas + + PR fortran/18022 + * trans-expr.c (gfc_trans_arrayfunc_assign): Return NULL + if there is a component ref during an array ref to force + use of temporary in assignment. + + PR fortran/24311 + PR fortran/24384 + * fortran/iresolve.c (check_charlen_present): New function to + add a charlen to the typespec, in the case of constant + expressions. + (gfc_resolve_merge, gfc_resolve_spread): Call.the above. + (gfc_resolve_spread): Make calls to library functions that + handle the case of the spread intrinsic with a scalar source. + +2005-10-22 Erik Edelmann + + PR fortran/24426 + * decl.c (variable_decl): Don't assign default initializers to + pointers. + +2005-10-21 Jakub Jelinek + + * interface.c (compare_actual_formal): Issue error when attempting + to pass an assumed-size array as assumed-shape array argument. + +2005-10-20 Erik Edelmann + + PR fortran/21625 + * resolve.c (expr_to_initialize): New function. + (resolve_allocate_expr): Take current statement as new + argument. Add default initializers to variables of + derived types, if they need it. + (resolve_code): Provide current statement as argument to + resolve_allocate_expr(). + +2005-10-19 Paul Thomas + + PR fortran/24440 + * resolve.c (resolve_symbol): Correct error in check for + assumed size array with default initializer by testing + for arrayspec before dereferencing it. + +2005-10-17 Paul Thomas + + PR fortran/23446 + * gfortran.h: Primitive for gfc_is_formal_arg. + * resolve.c(gfc_is_formal_arg): New function to signal across + several function calls that formal argument lists are being + processed. + (resolve_formal_arglist): Set/reset the flag for gfc_is_formal_arg. + *expr.c(check_restricted): Add check, via gfc_is_formal_arg, if + symbol is part of an formal argument declaration. + + PR fortran/21459 + * decl.c (add_init_expr_to_sym): Make a new character + length for each variable, when the expression is NULL + and link to cl_list. + + PR fortran/20866 + * match.c (recursive_stmt_fcn): New function that tests if + a statement function resurses through itself or other other + statement functions. + (gfc_match_st_function): Call recursive_stmt_fcn to check + if this is recursive and to raise error if so. + + PR fortran/20849 + PR fortran/20853 + * resolve.c (resolve_symbol): Errors for assumed size arrays + with default initializer and for external objects with an + initializer. + + PR fortran/20837 + * decl.c (match_attr_spec): Prevent PUBLIC from being used + outside a module. + +2005-10-16 Erik Edelmann + + PR 22273 + * expr.c (check_inquiry): Add "len" to inquiry_function. + +2005-10-14 Jakub Jelinek + + * primary.c (match_boz_constant): Add missing break after gfc_error. + +2005-10-12 Paul Thomas + + PR fortran/24092 + * trans-types.c (gfc_get_derived_type): Insert code to obtain backend + declaration for derived types, building if necessary. Return the + derived type if the fields have been built by this process. Otherwise, + continue as before but using the already obtained backend_decls for the + derived type components. Change the gcc_assert to act on the field. + +2005-10-12 Paul Thomas + + PR fortran/18082 + * decl.c (variable_decl): Make a new copy of the character + length for each variable, when the expression is not a + constant. + +2005-10-12 Francois-Xavier Coudert + + * gfortran.h: Add bitmasks for different FPE traps. Add fpe + member to options_t. + * invoke.texi: Document the new -ffpe-trap option. + * lang.opt: Add -ffpe-trap option. + * options.c (gfc_init_options): Initialize the FPE option. + (gfc_handle_fpe_trap_option): New function to parse the argument + of the -ffpe-trap option. + (gfc_handle_option): Add case for -ffpe-trap. + * trans-decl.c: Declare a tree for the set_fpe library function. + (gfc_build_builtin_function_decls): Build this tree. + (gfc_generate_function_code): Generate a call to set_fpe at + the beginning of the main program. + * trans.h: New tree for the set_fpe library function. + +2005-10-12 Paul Thomas + + PR fortran/20847 + PR fortran/20856 + * symbol.c (check_conflict): Prevent common variables and + function results from having the SAVE attribute,as required + by the standard. + +2005-10-12 Paul Thomas + + PR fortran/24207 + * resolve.c (resolve_symbol): Exclude use and host associated + symbols from the test for private objects in a public namelist. + +2005-10-12 Jakub Jelinek + + * trans-common.c (build_field): Fix comment typo. + (create_common): Set backend_decl of COMMON or EQUIVALENCEd + variables to a VAR_DECL with the COMPONENT_REF in + DECL_HAS_VALUE_EXPR rather than COMPONENT_REF directly. + * f95-lang.c (gfc_expand_function): Emit debug info for + EQUIVALENCEd variables if the equiv union is going to be output. + +2005-10-11 Steven G. Kargl + + PR fortran/20786 + * iresolve.c (gfc_resolve_aint, gfc_resolve_anint): Type conversion + of the argument. + +2005-10-11 Jakub Jelinek + + * f95-lang.c (gfc_init_decl_processing): Initialize + void_list_node. + +2005-10-07 Erik Edelmann + + PR 18568 + * resolve.c (find_array_spec): Search through the list of + components in the symbol of the type instead of the symbol of the + variable. + +2005-10-05 Richard Guenther + + PR fortran/24176 + * parse.c (gfc_parse_file): Exit early for empty files. + +2005-10-03 Steve Ellcey + + * fortran/trans-types.c (gfc_init_kinds): Only pass float, double, + and long double floating point types through to Fortran compiler. + +2005-10-03 Francois-Xavier Coudert + + PR fortran/20120 + * f95-lang.c (DO_DEFINE_MATH_BUILTIN): Add support for long + double builtin function. + (gfc_init_builtin_functions): Add mfunc_longdouble, + mfunc_clongdouble and func_clongdouble_longdouble trees. Build + them for round, trunc, cabs, copysign and pow functions. + * iresolve.c (gfc_resolve_reshape, gfc_resolve_transpose): Add + case for kind 10 and 16. + * trans-decl.c: Add trees for cpowl10, cpowl16, ishftc16, + exponent10 and exponent16. + (gfc_build_intrinsic_function_decls): Build nodes for int16, + real10, real16, complex10 and complex16 types. Build all possible + combinations for function _gfortran_pow_?n_?n. Build function + calls cpowl10, cpowl16, ishftc16, exponent10 and exponent16. + * trans-expr.c (gfc_conv_power_op): Add case for integer(16), + real(10) and real(16). + * trans-intrinsic.c: Add suppport for long double builtin + functions in BUILT_IN_FUNCTION, LIBM_FUNCTION and LIBF_FUNCTION + macros. + (gfc_conv_intrinsic_aint): Add case for integer(16), real(10) and + real(16) kinds. + (gfc_build_intrinsic_lib_fndecls): Add support for real10_decl + and real16_decl in library functions. + (gfc_get_intrinsic_lib_fndecl): Add cases for real and complex + kinds 10 and 16. + (gfc_conv_intrinsic_exponent): Add cases for real(10) and real(16) + kinds. + (gfc_conv_intrinsic_sign): Likewise. + (gfc_conv_intrinsic_ishftc): Add case for integer(16) kind. + * trans-types.c (gfc_get_int_type, gfc_get_real_type, + gfc_get_complex_type, gfc_get_logical_type): Doesn't error out in + the case of kinds not available. + * trans.h: Declare trees for cpowl10, cpowl16, ishftc16, + exponent10 and exponent16. + +2005-10-01 Paul Thomas + + PR fortran/16404 + PR fortran/20835 + PR fortran/20890 + PR fortran/20899 + PR fortran/20900 + PR fortran/20901 + PR fortran/20902 + * gfortran.h: Prototype for gfc_add_in_equivalence. + * match.c (gfc_match_equivalence): Make a structure component + an explicit,rather than a syntax, error in an equivalence + group. Call gfc_add_in_equivalence to add the constraints + imposed in check_conflict. + * resolve.c (resolve_symbol): Add constraints: No public + structures with private-type components and no public + procedures with private-type dummy arguments. + (resolve_equivalence_derived): Add constraint that prevents + a structure equivalence member from having a default + initializer. + (sequence_type): New static function to determine whether an + object is default numeric, default character, non-default + or mixed sequence. Add corresponding enum typespec. + (resolve_equivalence): Add constraints to equivalence groups + or their members: No more than one initialized member and + that different types are not equivalenced for std=f95. All + the simple constraints have been moved to check_conflict. + * symbol.c (check_conflict): Simple equivalence constraints + added, including those removed from resolve_symbol. + (gfc_add_in_equivalence): New function to interface calls + match_equivalence to check_conflict. + +2005-09-27 Jakub Jelinek + + PR fortran/18518 + * trans-common.c (build_equiv_decl): Add IS_SAVED argument. + If it is true, set TREE_STATIC on the decl. + (create_common): If any symbol in equivalence has SAVE attribute, + pass true as last argument to build_equiv_decl. + +2005-09-24 Janne Blomqvist + + * trans-io.c (gfc_build_io_library_fndecls): Add entry + iocall_x_array for transfer_array. + (transfer_array_desc): New function. + (gfc_trans_transfer): Add code to call transfer_array_desc. + +2005-09-26 Jakub Jelinek + + PR fortran/23677 + * symbol.c (gfc_is_var_automatic): Return true if character length + is non-constant rather than constant. + * resolve.c (gfc_resolve): Don't handle !gfc_option.flag_automatic + here. + * options.c (gfc_post_options): Set gfc_option.flag_max_stack_var_size + to 0 for -fno-automatic. + +2005-09-23 Paul Thomas + + PR fortran/16861 + * module.c (mio_component_ref): Return if the symbol is NULL + and wait for another iteration during module reads. + (mio_symtree_ref): Suppress the writing of contained symbols, + when a symbol is available in the main namespace. + (read_module): Restrict scope of special treatment of contained + symbols to variables only and suppress redundant call to + find_true_name. + +2005-09-22 Steven G. Kargl + + PR fortran/24005 + * interface.c (check_interface1): Fix NULL dereference. + +2005-09-22 Erik Edelmann + + PR fortran/23843 + * resolve.c (derived_inaccessible): New function. + (resolve_transfer): Use it to check for private + components. + +2005-09-22 Steven G. Kargl + + PR fortran/23516 + * intrinsic.c (add_function): Add IMAG, IMAGPART, and REALPART + intrinsics. + * intrinsic.h: Prototypes for gfc_simplify_realpart and + gfc_resolve_realpart. + * intrinsic.texi: Document intrinsic procedures. + * simplify.c (gfc_simplify_realpart): New function. + * irseolve.c (gfc_resolve_realpart): New function. + +2005-09-21 Erik Edelmann + + PR fortran/19929 + * trans-stmt.c (gfc_trans_deallocate): Check if the + object to be deallocated is an array by looking at + expr->rank instead of expr->symtree->n.sym->attr.dimension. + +2005-09-20 Tobias Schl"uter + + PR fortran/23420 + * io.c (resolve_tag): Don't allow non-CHARACTER constants as formats. + (match_io): Fix usage of gfc_find_symbol. + +2005-09-20 Jakub Jelinek + + PR fortran/23663 + * primary.c (match_actual_arg): Handle ENTRY the same way + as FUNCTION. + +2005-09-18 Francois-Xavier Coudert + + * Make-lang.in: Make check-fortran alias for check-gfortran. + +2005-09-18 Andreas Jaeger + + * module.c (read_module): Add missed line from last patch. + +2005-09-18 Erik Edelmann + + PR fortran/15975 + * resolve.c (resolve_symbol): Don't assign default + initializer to pointers. + +2005-09-18 Paul Thomas + + PR fortran/16861 + * module.c (read_module): Give symbols from module procedures + different true_name entries to those from the module proper. + +2005-09-17 Francois-Xavier Coudert + + PR fortran/15586 + * arith.c (gfc_arith_error): Add translation support for error + messages. + * array.c (gfc_match_array_ref): Likewise. + (gfc_match_array_spec): Likewise. + * check.c (must_be): Add msgid convention to third argument. + (same_type_check): Add translation support for error message. + (rank_check): Likewise. + (kind_value_check): Likewise. + (gfc_check_associated): Correct typo. + (gfc_check_reshape): Add translation support for error message. + (gfc_check_spread): Likewise. + * error.c (error_printf): Add nocmsgid convention to argument. + (gfc_warning, gfc_notify_std, gfc_warning_now, gfc_warning_check) + (gfc_error, gfc_error_now): Likewise. + (gfc_status): Add cmsgid convention to argument. + * expr.c (gfc_extract_int): Add translation support for error + messages. + (gfc_check_conformance): Add msgid convention to argument. + (gfc_check_pointer_assign): Correct tabbing. + * gfortran.h: Include intl.h header. Remove prototype for gfc_article. + * gfortranspec.c: Include intl.h header. + (lang_specific_driver): Add translation support for --version. + * io.c (check_format): Add translation support for error message. + (format_item_1): Likewise. + (data_desc): Likewise. + * matchexp.c: Likewise. + * misc.c (gfc_article): Remove function. + * module.c (bad_module): Use msgid convention. Add translation support + for error messages. + (require_atom): Add translation support for error messages. + * parse.c (gfc_ascii_statement): Likewise. + (gfc_state_name): Likewise. + * primary.c (match_boz_constant): Reorganise error messages for + translations. + * resolve.c (resolve_entries): Likewise. + (resolve_operator): Add translation support for error messages. + (gfc_resolve_expr): Use msgid convention. Reorganise error messages + for translations. + (resolve_symbol): Add translation support for error messages. + * symbol.c (gfc_add_procedure): Remove use of gfc_article function. + * trans-const.c (gfc_build_string_const): Use msgid convention. + +2005-09-16 Paul Brook + + PR fortran/23906 + * dependency.c (transform_sections): Divide by correct value. + Elaborate comment. + +2005-09-14 Paul Thomas + + PR fortran/21875 Internal Unit Array I/O, NIST + * fortran/trans-io.c (gfc_build_io_library_fndecls): Add field for + array descriptor to IOPARM structure. + * fortran/trans-io.c (set_internal_unit): New function to generate code + to store the character (array) and the character length for an internal + unit. + * fortran/trans-io (build_dt): Use the new function set_internal_unit. + +2005-09-14 Paul Thomas + + PR fortran/19358 + * trans-array.c (gfc_trans_dummy_array_bias): correct the typo + which uses dim[i].upper for lbound, rather than dim[i].lower. + +2005-09-13 Erik Edelmann + + PR fortran/17740 + * trans-expr.c (gfc_trans_arrayfunc_assign): Check value + of attr.elemental for specific function instead of generic name. + +2005-09-13 Richard Sandiford + + PR fortran/18899 + * trans-intrinsic.c (gfc_conv_intrinsic_bound): Move initialization + of argse. Remove now-redundant want_pointer assignment. + * trans-array.c (gfc_conv_expr_descriptor): When not assigning to + a pointer, keep the original bounds of a full array reference. + +2005-09-13 Richard Sandiford + + PR target/19269 + * iresolve.c (gfc_resolve_cshift, gfc_resolve_eoshift) + (gfc_resolve_pack, gfc_resolve_reshape, gfc_resolve_spread) + (gfc_resolve_transpose, gfc_resolve_unpack): Add "_char" to the name + for character-based operations. + (gfc_resolve_pack): Remove ATTRIBUTE_UNUSED from array argument. + (gfc_resolve_unpack): Copy the whole typespec from the vector. + * trans-array.c (gfc_conv_expr_descriptor): In the EXPR_FUNCTION + case, get the string length from the scalarization state. + +2005-09-14 Francois-Xavier Coudert + + * Make-lang.in: Change targets prefixes from f95 to fortran. + * config-lang.in: Change language name to "fortran". + * lang.opt: Change language name to "fortran". + * options.c: Change CL_F95 to CL_Fortran. + +2005-09-09 Thomas Koenig + + gfortran.texi: Document IOSTAT= specifier. + +2005-09-09 Thomas Koenig + + * gfortran.h: Add iomsg to gfc_open, gfc_close, gfc_filepos, + gfc_inquire and gfc_dt. + * dump-parse-tree.c (gfc_show_code_node): Add iomsg + for open, close, file positioning, inquire and namelist. + * io.c (io_tag): Add tag_iomsg. + (resolve_tag): Add standards warning for iomsg. + (match_open_element): Add iomsg. + (gfc_free_open): Add iomsg. + (gfc_resolve_open): Add iomsg. + (gfc_free_close): Add iomsg. + (match_close_element): Add iomsg. + (gfc_resolve_close): Add iomsg. + (gfc_free_filepos): Add iomsg. + (match_file_element): Add iomsg. + (gfc_resolve_filepos): Add iostat and iomsg. + (match-dt_element): Add iomsg. + (gfc_free_dt): Add iomsg. + (gfc_resolve_dt): Add iomsg. + (gfc_free_inquire): Add iomsg. + (match_inquire_element): Add iomsg. + (gfc_resolve_inquire): Add iomsg. + * trans_io.c: Add ioparm_iomsg and ioparm_iomsg_len. + (gfc_build_io_library_fndecls): Add iomsg as last field. + (gfc_trans_open): Add iomsg. + (gfc_trans_close): Add iomsg. + (build_fileos): Call set_string for iomsg. + (gfc_trans_inquire): Add iomsg. + (build_dt): Add iomsg. + +2005-09-09 Richard Sandiford + + * match.h (gfc_match_equiv_variable): Declare. + +2005-09-09 Richard Sandiford + + PR fortran/19239 + * Makefile.in (fortran/trans-expr.o): Depend on dependency.h. + * dependency.h (gfc_ref_needs_temporary_p): Declare. + * dependency.c (gfc_ref_needs_temporary_p): New function. + (gfc_check_fncall_dependency): Use it instead of inlined check. + By so doing, take advantage of the fact that character substrings + within an array reference also need a temporary. + * trans.h (GFC_SS_VECTOR): Adjust comment. + * trans-array.c (gfc_free_ss): Remove GFC_SS_VECTOR case. + (gfc_set_vector_loop_bounds): New function. + (gfc_add_loop_ss_code): Call it after evaluating the subscripts of + a GFC_SS_SECTION. Deal with the GFC_SS_VECTOR case by evaluating + the vector expression and caching its descriptor for use within + the loop. + (gfc_conv_array_index_ref, gfc_conv_vector_array_index): Delete. + (gfc_conv_array_index_offset): Handle scalar, vector and range + dimensions as separate cases of a switch statement. In the vector + case, use the loop variable to calculate a vector index and use the + referenced element as the dimension's index. Perform bounds checking + on this final index. + (gfc_conv_section_upper_bound): Return null for vector indexes. + (gfc_conv_section_startstride): Give vector indexes a start value + of 0 and a stride of 1. + (gfc_conv_ss_startstride): Adjust for new GFC_SS_VECTOR representation. + (gfc_conv_expr_descriptor): Expand comments. Generalize the + handling of the !want_pointer && !direct_byref case. Use + gfc_ref_needs_temporary_p to decide whether the variable case + needs a temporary. + (gfc_walk_variable_expr): Handle DIMEN_VECTOR by creating a + GFC_SS_VECTOR index. + * trans-expr.c: Include dependency.h. + (gfc_trans_arrayfunc_assign): Fail if the target needs a temporary. + +2005-09-09 Richard Sandiford + + PR fortran/21104 + * trans.h (gfc_interface_sym_mapping, gfc_interface_mapping): Moved + from trans-expr.c. + (gfc_init_interface_mapping, gfc_free_interface_mapping) + (gfc_add_interface_mapping, gfc_finish_interface_mapping) + (gfc_apply_interface_mapping): Declare. + * trans-array.h (gfc_set_loop_bounds_from_array_spec): Declare. + (gfc_trans_allocate_temp_array): Add pre and post block arguments. + * trans-array.c (gfc_set_loop_bounds_from_array_spec): New function. + (gfc_trans_allocate_array_storage): Replace loop argument with + separate pre and post blocks. + (gfc_trans_allocate_temp_array): Add pre and post block arguments. + Update call to gfc_trans_allocate_array_storage. + (gfc_trans_array_constructor, gfc_conv_loop_setup): Adjust for new + interface to gfc_trans_allocate_temp_array. + * trans-expr.c (gfc_interface_sym_mapping, gfc_interface_mapping): + Moved to trans.h. + (gfc_init_interface_mapping, gfc_free_interface_mapping) + (gfc_add_interface_mapping, gfc_finish_interface_mapping) + (gfc_apply_interface_mapping): Make extern. + (gfc_conv_function_call): Build an interface mapping for array + return values too. Call gfc_set_loop_bounds_from_array_spec. + Adjust call to gfc_trans_allocate_temp_array so that code is + added to SE rather than LOOP. + +2005-09-09 Richard Sandiford + + PR fortran/12840 + * trans.h (gfor_fndecl_internal_realloc): Declare. + (gfor_fndecl_internal_realloc64): Declare. + * trans-decl.c (gfor_fndecl_internal_realloc): New variable. + (gfor_fndecl_internal_realloc64): New variable. + (gfc_build_builtin_function_decls): Initialize them. + * trans-array.h (gfc_trans_allocate_temp_array): Add a fourth argument. + * trans-array.c (gfc_trans_allocate_array_storage): Add an argument + to say whether the array can grow later. Don't allocate the array + on the stack if so. Don't call malloc for zero-sized arrays. + (gfc_trans_allocate_temp_array): Add a similar argument here. + Pass it along to gfc_trans_allocate_array_storage. + (gfc_get_iteration_count, gfc_grow_array): New functions. + (gfc_iterator_has_dynamic_bounds): New function. + (gfc_get_array_constructor_element_size): New function. + (gfc_get_array_constructor_size): New function. + (gfc_trans_array_ctor_element): Replace pointer argument with + a descriptor tree. + (gfc_trans_array_constructor_subarray): Likewise. Take an extra + argument to say whether the variable-sized part of the constructor + must be allocated using realloc. Grow the array when this + argument is true. + (gfc_trans_array_constructor_value): Likewise. + (gfc_get_array_cons_size): Delete. + (gfc_trans_array_constructor): If the loop bound has not been set, + split the allocation into a static part and a dynamic part. Set + loop->to to the bounds for static part before allocating the + temporary. Adjust call to gfc_trans_array_constructor_value. + (gfc_conv_loop_setup): Allow any constructor to determine the + loop bounds. Check whether the constructor has a dynamic size + and prefer to use something else if so. Expect the loop bound + to be set later. Adjust call to gfc_trans_allocate_temp_array. + * trans-expr.c (gfc_conv_function_call): Adjust another call here. + +2005-09-09 Paul Thomas + + PR fortran/18878 + * module.c (find_use_name_n): Based on original + find_use_name. Either counts number of use names for a + given real name or returns use name n. + (find_use_name, number_use_names): Interfaces to the + function find_use_name_n. + (read_module): Add the logic and calls to these functions, + so that mutiple reuses of the same real name are loaded. + +2005-09-09 Paul Thomas + + PR fortran/22304 + PR fortran/23270 + PR fortran/18870 + PR fortran/16511 + PR fortran/17917 + * gfortran.h: Move definition of BLANK_COMMON_NAME from trans- + common.c so that it is accessible to module.c. Add common_head + field to gfc_symbol structure. Add field for the equivalence + name AND new attr field, in_equivalence. + * match.c (gfc_match_common, gfc_match_equivalence): In loops + that flag common block equivalences, emit an error if the + common blocks are different, using sym->common_head as the + common block identifier. Ensure that symbols that are equivalence + associated with a common block are marked as being in_common. + * module.c (write_blank_common): New. + (write_common): Use unmangled common block name. + (load_equiv): New function ported from g95. + (read_module): Call load_equiv. + (write_equiv): New function ported from g95. Correct + string referencing for gfc functions. Give module + equivalences a unique name. + (write_module): Call write_equiv and write_blank_common. + * primary.c (match_variable) Old gfc_match_variable, made + static and third argument provided to indicate if parent + namespace to be visited or not. + (gfc_match_variable) New. Interface to match_variable. + (gfc_match_equiv_variable) New. Interface to match_variable. + * trans-common.c (finish_equivalences): Provide the call + to create_common with a gfc_common_header so that + module equivalences are made external, rather than local. + (find_equivalences): Ensure that all members in common block + equivalences are marked as used. This prevents the subsequent + call to this function from making local unions. + * trans-decl.c (gfc_generate_function_code): Move the call to + gfc_generate_contained_functions to after the call to + gfc_trans_common so the use-associated, contained common + blocks produce the correct references. + (gfc_create_module_variable): Return for equivalenced symbols + with existing backend declaration. + +2005-09-08 Tobias Schl"uter + + PR fortran/23765 + * match.c (gfc_match_common): Remove unnecessary / wrong special + cases for end-of-statement. + +2005-09-08 Janne Blomqvist + + * gfortran.texi: Add section about implemented F2003 features. + +2005-09-08 Richard Sandiford + + PR fortran/15326 + * trans-array.c (gfc_add_loop_ss_code): Set ss->string_length in + the GFC_SS_FUNCTION case too. + * trans-expr.c (gfc_conv_function_val): Allow symbols to be bound + to function pointers as well as function decls. + (gfc_interface_sym_mapping, gfc_interface_mapping): New structures. + (gfc_init_interface_mapping, gfc_free_interface_mapping) + (gfc_get_interface_mapping_charlen, gfc_get_interface_mapping_array) + (gfc_set_interface_mapping_bounds, gfc_add_interface_mapping) + (gfc_finish_interface_mapping, gfc_apply_interface_mapping_to_cons) + (gfc_apply_interface_mapping_to_ref) + (gfc_apply_interface_mapping_to_expr) + (gfc_apply_interface_mapping): New functions. + (gfc_conv_function_call): Evaluate the arguments before working + out where the result should go. Make the null pointer case provide + the string length in parmse.string_length. Cope with non-constant + string lengths, using the above functions to evaluate such lengths. + Use a temporary typespec; don't assign to sym->cl->backend_decl. + Don't assign to se->string_length when returning a cached array + descriptor. + +2005-09-08 Richard Sandiford + + PR fortran/19928 + * trans-array.c (gfc_conv_array_ref): Call gfc_advance_se_ss_chain + after handling scalarized references. Make "indexse" inherit from + "se" when handling AR_ELEMENTs. + (gfc_walk_variable_expr): Add GFC_SS_SCALAR entries for each + substring or scalar reference that follows an array section. + * trans-expr.c (gfc_conv_variable): When called from within a + scalarization loop, start out with "ref" pointing to the scalarized + part of the reference. Don't call gfc_advance_se_ss_chain here. + +2005-09-07 Richard Sandiford + + PR fortran/23373 + * trans-expr.c (gfc_trans_pointer_assignment): Assign to a temporary + descriptor if the rhs is not a null pointer or variable. + +2005-09-07 Thomas Koenig + + PR fortran/20848 + * symbol.c(check_conflict): Add conflict for parameter/save, + +2005-09-06 Richard Sandiford + + PR fortran/19269 + * simplify.c (gfc_simplify_transpose): Set the result's typespec from + the source, not the first element of the return value. + +2005-09-04 Tobias Schl"uter + + PR fortran/23661 + * io.c (match_io): Correctly backup if PRINT followed by + symbol which is not a namelist. Force blank between PRINT + and namelist in free form. + +2005-08-31 Francois-Xavier Coudert + + PR fortran/20592 + * gfortran.h (gfc_option_t): Add flag_automatic. + * invoke.texi: Document the -fno-automatic option. + * lang.opt: Add a -fautomatic option. + * options.c (gfc_init_options): Default for -fautomatic is on. + (gfc_handle_option): Add handling of -fautomatic option. + * resolve.c (gfc_resolve): When -fno-automatic is used, mark + needed variables as SAVE. + +2005-08-27 Erik Edelmann + + * trans-array.c (gfc_trans_deferred_array): Fix comments. + +2005-08-27 Erik Schnetter + + * primary.c (match_charkind_name): Fix typo in comment leading to + function. + +2005-08-25 Erik Edelmann + + PR fortran/20363 + * symbol.c (find_special): Remove. + (build_sym, add_init_expr, attr_decl1): Remove calls to + find_special in favor of calls to gfc_get_symbol. + +2005-08-24 Thomas Koenig + + PR fortran/17758 + * gfortran.h (symbol_attribute): Add noreturn to the structure. + (gfc_intrinsic_sym): Add noreturn to the structure. + * intrinsic.c (make_noreturn): New function. + (add_subroutines): Mark subroutines abort and exit as noreturn. + (gfc_intrinsic_sub_interface): Copy noreturn attribute from + isym to the resolved symbol. + * trans-decl.c (gfc_get_extern_function_decl): Set function + as VOLATILE (== noreturn) if the noreturn attribute is set. + +2005-08-21 Steven G. Kargl + + * decl.c: Typo in comment. + +2005-08-21 Steven G. Kargl + + * array.c: Bump GFC_MAX_AC_EXPAND from 100 to 65535. + +2005-08-21 Tobias Schl"uter + + * gfortran.h (gfc_option_t): Remove source field. Add + flag_d_lines field. + (gfc_new_file): Remove arguments in prototype. + (gfc_source_file): Make 'const char *'. + * f95-lang.c (gfc_init): Use gfc_source_file instead of + gfc_option.source. Call gfc_new_file without arguments. + * invoke.texi: Document new options '-fd-lines-as-code' and + '-fd-lines-as-comment'. + * lang.opt: Add new options. Alphabetize. + * options.c (gfc_init_options): Initialize gfc_source_file instead + of gfc_option.source. Initialize gfc_option.flag_d_lines. + (form_from_filename): Move here from scanner.c. Make + 'filename' argument 'const'. + (gfc_post_options): Set gfc_source_file. Determine source form. + Warn if 'd-lines*' are used in free form. + * scanner.c (gfc_source_file): Constify. + (skip_fixed_comments): Deal with d-lines. + (get_file): Constify argument 'name'. + (load_file): Constify argument 'filename'. + (form_from_filename): Moved to options.c. + (gfc_new_file): Remove arguments. Don't initialize + gfc_source_file, don't determine source form. + * trans-const.c (gfc_init_constants): Use gfc_source_file instead + of gfc_option.source. + +2005-08-19 Steven G. Kargl + + PR fortran/23065 + * gfortran.h: Remove PATH_MAX definition. + * module.c (write_module, gfc_dump_module): Use alloca to allocate + buffers. + * scanner.c (gfc_release_include_path, form_from_filename): Ditto. + +2005-08-16 Huang Chun + + * trans-expr.c (gfc_conv_power_op): Evaluate the expression before + expand. + +2005-08-14 Asher Langton + + * parse.c (match): Enclose macro in do...while(0) and braces. + +2005-08-14 Paul Thomas + + PR fortran/21432. + * gfortran.texi: Document PRINT namelist. + +2005-08-14 Paul Thomas + + PR fortran/21432. + * io.c (match_io): Add code to implement PRINT namelist. + +2005-08-14 Canqun Yang + + * trans-stmt.c (gfc_trans_arithmetic_if): Optimized in case of equal + labels. + +2005-08-11 Francois-Xavier Coudert + Steven Bosscher + + PR libfortran/20006 + * gfortran.h: Add is_main_program member to symbol_attribute. + * trans-decl: Add a gfor_fndecl_set_std tree. + (gfc_build_builtin_function_decls): Create it. + (gfc_generate_function_code): Add this call at the beginning of + the main program. + * trans.c (gfc_generate_code): Move main_program and attr. + * trans.h: Add declaration for gfor_fndecl_set_std. + +2005-08-10 Thomas Koenig + + PR libfortran/22143 + gfortran.h: Declare new function gfc_resolve_dim_arg. + resolve.c: New function gfc_resolve_dim_arg. + iresolve.c (gfc_resolve_all): Use gfc_resolve_dim_arg. + (gfc_resolve_any): Likewise. + (gfc_resolve_count): Likewise. + (gfc_resolve_cshift): Likewise. If the kind of shift is less + gfc_default_integer_kind, convert it to default integer type. + (gfc_resolve_eoshift): Likewise. + (gfc_resolve_maxloc): Use gfc_resolve_dim_arg. + (gfc_resolve_maxval): Likewise. + (gfc_resolve_minloc): Likewise. + (gfc_resolve_minval): Likewise. + (gfc_resolve_product): Likewise. + (gfc_resolve_spread): Likewise. + (gfc_resolve_sum): Likewise. + +2005-08-09 Francois-Xavier Coudert + + * check.c (gfc_check_ttynam_sub, gfc_check_isatty): Add check + functions for new intrinsics TTYNAM and ISATTY. + * intrinsic.c (add_functions, add_subroutines): Add new + intrinsics. + * intrinsic.h: Add prototypes for new check and resolve + functions. + * iresolve.c (gfc_resolve_isatty, gfc_resolve_ttynam_sub): New + resolve functions for intrinsics TTYNAM and ISATTY. + * gfortran.h (gfc_generic_isym_id): Add symbol for ISATTY. + * trans-intrinsic.c: Add case for GFC_ISYM_ISATTY. + +2005-08-09 Jakub Jelinek + + * scanner.c (preprocessor_line): Don't write beyond the end of flag + buffer. + +2005-08-07 Janne Blomqvist + + PR fortran/22390 + * dump-parse-tree.c (gfc_show_code_node): Add case for FLUSH. + * gfortran.h: Add enums for FLUSH. + * io.c (gfc_free_filepos,match_file_element,match_filepos): Modify + comment appropriately. (gfc_match_flush): New function. + * match.c (gfc_match_if): Add match for flush. + * match.h: Add prototype. + * parse.c (decode_statement): Add flush to 'f' case. + (next_statement): Add case for flush. (gfc_ascii_statement): Likewise. + * resolve.c (resolve_code): Add flush case. + * st.c (gfc_free_statement): Add flush case. + * trans-io.c: Add prototype for flush. + (gfc_build_io_library_fndecls): Build fndecl for flush. + (gfc_trans_flush): New function. + * trans-stmt.h: Add prototype. + * trans.c (gfc_trans_code): Add case for flush. + +2005-08-06 Francois-Xavier Coudert + + * primary.c (match_hollerith_constant): Fix typo. + +2005-08-06 Kazu Hirata + + * decl.c, dump-parse-tree.c, gfortran.texi, intrinsic.texi, + invoke.texi, resolve.c, trans-array.c, trans-array.h, + trans-common.c, trans-expr.c, trans-io.c, trans.h: Fix + comment/doc typos. Follow spelling conventions. + +2005-08-06 Jakub Jelinek + + PR fortran/18833 + PR fortran/20850 + * primary.c (match_varspec): If equiv_flag, don't look at sym's + attributes, call gfc_match_array_ref up to twice and don't do any + substring or component processing. + * resolve.c (resolve_equivalence): Transform REF_ARRAY into + REF_SUBSTRING or nothing if needed. Check that substrings + don't have zero length. + +2005-08-05 Thomas Koenig + + * trans-expr.c (gfc_build_builtin_function_decls): Mark + stop_numeric and stop_string as non-returning. + +2005-08-04 Paul Brook + + * trans-expr.c (gfc_conv_expr, gfc_conv_expr_type): Update comments. + (gfc_conv_expr_lhs): Fix assertion. + (gfc_conv_expr_val): Merge post block. Set se.expr to new value. + +2005-08-02 David Edelsohn + + PR fortran/22491 + * expr.c (simplify_parameter_variable): Do not copy the subobject + references if the expression value is a constant. + + * expr.c (gfc_simplify_expr): Evaluate constant substrings. + +2005-07-31 Jerry DeLisle + + * intrinsic.texi: Add documentation for exponent, floor, and fnum and + fix description of ceiling in index. + +2005-07-31 Steven Bosscher + + * trans-decl.c (gfc_build_builtin_function_decls): Give the internal + malloc functions the 'malloc' attribute. Give runtime_error the + 'noreturn' attribute. + +2005-07-31 Steven Bosscher + + * trans-stmt.c (gfc_trans_goto): Jump to the known label instead + of the assigned goto variable. + +2005-07-29 Steven Bosscher + + * trans-types.h (gfc_array_range_type): Add missing GTY decl for this. + +2005-07-28 Andrew Pinski + + * fortran/f95-lang.c (language_function): Remove + named_labels, shadowed_labels, returns_value, returns_abnormally, + warn_about_return_type, and extern_inline fields. + (named_labels): Remove variable. + (gfc_init_decl_processing): Remove setting of named_labels. + +2005-07-27 Volker Reichelt + + PR fortran/22503 + * resolve.c (resolve_operator): Improve diagnostic for comparison + of logicals with invalid operator. + +2005-07-25 Jakub Jelinek + + PR fortran/20063 + * data.c (gfc_assign_data_value_range): Call + create_character_initializer if last_ts is a character type. + +2005-07-22 Manfred Hollstein + + * match.c (gfc_match_symbol): Fix uninitialised warnings. + * matchexp.c (gfc_match_expr): Likewise. + +2005-07-20 Giovanni Bajo + + Make CONSTRUCTOR use VEC to store initializers. + * trans-array.c (gfc_build_null_descriptor, + gfc_trans_array_constructor_value, gfc_conv_array_initializer): + Update to cope with VEC in CONSTRUCTOR_ELTS. + * trans-common.c (create_common): Likewise. + * trans-expr.c (gfc_conv_structure): Likewise. + * trans-stmt.c (gfc_trans_character_select): Use + build_constructor_from_list instead of build_constructor. + +2005-07-19 Paul Thomas + + PR fortran/16940 + * resolve.c (resolve_symbol): A symbol with FL_UNKNOWN + is matched against interfaces in parent namespaces. If there + the symtree is set to point to the interface. + +2005-07-16 David Edelsohn + + PR fortran/21730 + * decl.c (do_parm): Adjust character initializer to character length + of symbol before assigning. + +2005-07-14 Steve Ellcey + + * trans-types.c (MAX_REAL_KINDS): Increase from 4 to 5. + +2005-07-14 Jakub Jelinek + + * gfortran.h (MAX_ERROR_MESSAGE): Remove. + (gfc_error_buf): Add allocated and index fields. Change message + field from array to a pointer. + * error.c (use_warning_buffer, error_ptr, warning_ptr): Remove. + (cur_error_buffer): New variable. + (error_char): Use cur_error_buffer->{message,index} instead of + {warning,error}_{buffer.message,ptr}. Reallocate message buffer + if too small. + (gfc_warning, gfc_notify_std, gfc_error, gfc_error_now): Setup + cur_error_buffer and its index rather than {warning,error}_ptr + and use_warning_buffer. + (gfc_warning_check, gfc_error_check): Don't print anything if + message is NULL. + (gfc_push_error): Allocate saved message with xstrdup. + (gfc_pop_error): Free saved message with gfc_free. + (gfc_free_error): New function. + * primary.c (match_complex_constant): Call gfc_free_error if + gfc_pop_error will not be called. + * match.c (gfc_match_st_function): Likewise. + + PR fortran/22417 + * scanner.c (preprocessor_line): Don't treat flag 3 as the start of a new + file. Fix file left but not entered warning. + +2005-07-14 Feng Wang + Steven G. Kargl + + * array.c (resolve_character_array_constructor): Allocate gfc_charlen + for the array and attach to namespace list for automatic deallocation. + +2005-07-13 Andreas Schwab + + * Make-lang.in (fortran/dependency.o): Depend on + $(GFORTRAN_TRANS_DEPS). + +2005-07-11 Jakub Jelinek + + * trans-stmt.c (gfc_trans_forall_loop): Clear maskindex before + the outermost loop. + (gfc_trans_assign_need_temp, gfc_trans_pointer_assign_need_temp, + gfc_trans_forall_1, gfc_evaluate_where_mask, gfc_trans_where_2): + Don't clear maskindexes here. + +2005-07-08 Daniel Berlin + + * trans-decl.c (create_function_arglist): DECL_ARG_TYPE_AS_WRITTEN + is removed. + +2005-07-08 Jakub Jelinek + + * primary.c (gfc_match_rvalue): Handle ENTRY the same way + as FUNCTION. + +2005-07-07 Jakub Jelinek + + * scanner.c (load_line): Add pbuflen argument, don't make + buflen static. If maxlen == 0 or preprocessor_flag, + don't truncate at buflen, but at maxlen. In xrealloc add + 1 byte at the end for the terminating '\0'. Don't fill + with spaces up to buflen, but gfc_option.fixed_line_length. + (load_file): Adjust load_line caller. Add line_len variable. + + * scanner.c (preprocessor_line): Only set current_file->line when errors + have not been encountered. Warn and don't crash if a file leave + preprocessor line has no corresponding entering line. Formatting. + +2005-07-07 Steven Bosscher + + * primary.c (match_hollerith_constant): Use int, not unsigned int, + for the hollerith length. Fix indentation. + +2005-07-07 Feng Wang + + PR fortran/16531 + PR fortran/15966 + PR fortran/18781 + * arith.c (gfc_hollerith2int, gfc_hollerith2real, + gfc_hollerith2complex, gfc_hollerith2character, gfc_hollerith2logical): + New functions. + (eval_intrinsic): Don't evaluate if Hollerith constant arguments exist. + * arith.h (gfc_hollerith2int, gfc_hollerith2real, + gfc_hollerith2complex, gfc_hollerith2character, gfc_hollerith2logical): + Add prototypes. + * expr.c (free_expr0): Free memery allocated for Hollerith constant. + (gfc_copy_expr): Allocate and copy string if Expr is from Hollerith. + (gfc_check_assign): Enable conversion from Hollerith to other. + * gfortran.h (bt): Add BT_HOLLERITH. + (gfc_expr): Add from_H flag. + * intrinsic.c (gfc_type_letter): Return 'h' for BT_HOLLERITH. + (add_conversions): Add conversions from Hollerith constant to other. + (do_simplify): Don't simplify if Hollerith constant arguments exist. + * io.c (resolve_tag): Enable array in FORMAT tag under GFC_STD_GNU. + * misc.c (gfc_basetype_name): Return "HOLLERITH" for BT_HOLLERITH. + (gfc_type_name): Print "HOLLERITH" for BT_HOLLERITH. + * primary.c (match_hollerith_constant): New function. + (gfc_match_literal_constant): Add match Hollerith before Integer. + * simplify.c (gfc_convert_constant): Add conversion from Hollerith + to other. + * trans-const.c (gfc_conv_constant_to_tree): Use VIEW_CONVERT_EXPR to + convert Hollerith constant to tree. + * trans-io.c (gfc_convert_array_to_string): Get array's address and + length to set string expr. + (set_string): Deal with array assigned Hollerith constant and character + array. + * gfortran.texi: Document Hollerith constants as extention support. + +2005-07-07 Feng Wang + + PR fortran/22327 + * trans-array.c (gfc_trans_array_constructor_value): Fix index of data. + +2005-07-07 Jakub Jelinek + + * decl.c (gfc_match_entry): Allow ENTRY without parentheses + even in FUNCTIONs. + +2005-07-03 Kazu Hirata + + * gfortran.texi, intrinsic.texi: Fix typos. + * symbol.c: Fix a comment typo. + +2005-07-03 Kaveh R. Ghazi + + * error.c (error_printf, error_print): Use ATTRIBUTE_GCC_GFC. + * gfortran.h (ATTRIBUTE_GCC_GFC): New. + (gfc_warning, gfc_warning_now, gfc_error, gfc_error_now, + gfc_fatal_error, gfc_internal_error, gfc_notify_std): Use + ATTRIBUTE_GCC_GFC. + +2005-07-03 Francois-Xavier Coudert + + PR fortran/20842 + * io.c (match_dt_element): Do not allow END tag in PRINT or + WRITE statement. + +2005-07-02 Joseph S. Myers + + * lang.opt: Remove "." from end of help texts. + +2005-07-01 Jerry DeLisle + + * gfortran.texi: Fix typos and grammar. + * invoke.texi: Fix typos and grammar. + * intrinsic.texi: Add documentaion for eoshift, epsilon, etime, and + exit. Fixed alignment of text for dtime syntax. Fixed a few line + lengths. + +2005-06-25 Jakub Jelinek + + * trans-stmt.c (gfc_trans_forall_1): Prefer to use smaller logical + type than boolean_type_node. + +2005-06-25 Kelley Cook + + * all files: Update FSF address in copyright headers. + +2005-06-24 Jerry DeLisle + + PR fortran/21915 + * gfortran.h: Add symbols for new intrinsic functions. + * intrinsic.c: Add new functions acosh, asinh, and atanh. + * intrinsic.h: Add prototypes for the new functions. + * iresolve.c (gfc_resolve_acosh): New function. + (gfc_resolve_asinh): New function. + (gfc_resolve_atanh): New function. + * mathbuiltins.def: Add defines. + * simplify.c (gfc_simplify_acosh): New function. + (gfc_simplify_asinh): New function. + (gfc_simplify_atanh): New function. + +2005-06-24 Feng Wang + + * simplify.c (gfc_simplify_modulo): Don't clear before get result. + +2005-06-22 Paul Brook + + PR fortran/21034 + * symbol.c (gfc_is_var_automatic): New function. + (save_symbol): Use it. + +2005-06-21 Tobias Schlueter + Paul Thomas + + PR fortran/22010 + Port from g95. + * module.c (mio_namelist): New function. Correct to set + namelist_tail and to give error on renaming namelist by use + association. + (mio_symbol): Call mio_namelist. + +2005-06-19 Francois-Xavier Coudert + + * gfortran.h: Add flag_backslash compile-time option. + * lang.opt: Add support for -fbackslash option. + * options.c: Likewise. + * primary.c: Implement behavior for -fno-backslash. + * invoke.texi: Add doc for -fbackslash option. + * gfortran.texi: Remove mention of -fno-backslash as a + possible extension. + +2005-06-20 Steven G. Kargl + (port from g95) + + PR fortran/21257 + * match.c (gfc_match_label): Detect duplicate labels. + + +2005-06-20 Erik Edelmann + + * intrinsic.c (check_intrinsic_standard): Fix spelling error + in a warning message. + +2005-06-18 Erik Edelman + Steven G. Kargl + + PR fortran/19926 + * primary.c (gfc_match_rvalue): expr_type can be EXPR_CONSTANT + for an array; check that sym->as is NULL. + + +2005-06-18 Steven G. Kargl + + * intrinsic.c (gfc_intrinsic_func_interface): Enable errors for generic + functions whose simplification routine return FAILURE. + +2005-06-13 Geoffrey Keating + + * Make-lang.in (fortran.install-man): Doesn't depend on installdirs. + (rule for installing f95.1 manpage): Does depend on installdirs. + +2005-06-13 Jakub Jelinek + + PR fortran/22038 + * trans-stmt.c (gfc_trans_forall_loop): Only increment maskindex + in the innermost loop. + + * trans-expr.c (gfc_conv_function_call): Return int instead of + void. Use a local variable for has_alternate_specifier and + return it. Avoid modification of function type's return value + in place, since it may be shared. + * trans.h (has_alternate_specifier): Remove. + (gfc_conv_function_call): Change return type. + * trans-stmt.c (has_alternate_specifier): Remove. + (gfc_trans_call): Add a local has_alternate_specifier variable, + set it from gfc_conv_function_call return value. + +2005-06-12 Richard Henderson + + * trans-array.c (gfc_conv_descriptor_data_get): Rename from + gfc_conv_descriptor_data. Cast the result to the DATAPTR type. + (gfc_conv_descriptor_data_set, gfc_conv_descriptor_data_addr): New. + (gfc_trans_allocate_array_storage): Use them. + (gfc_array_allocate, gfc_array_deallocate): Likewise. + (gfc_trans_dummy_array_bias, gfc_conv_expr_descriptor): Likewise. + (gfc_trans_deferred_array): Likewise. + * trans-expr.c (gfc_conv_function_call): Likewise. + (gfc_trans_subcomponent_assign): Likewise. + (gfc_trans_pointer_assignment): Likewise. + * trans-intrinsic.c (gfc_conv_allocated): Likewise. + * trans-types.c (gfc_array_descriptor_base): New. + (gfc_get_element_type): Use GFC_TYPE_ARRAY_DATAPTR_TYPE. + (gfc_get_array_descriptor_base): Break out from ... + (gfc_get_array_type_bounds): ... here. Create type variants. + * trans-array.h (gfc_conv_descriptor_data_get): Declare. + (gfc_conv_descriptor_data_set, gfc_conv_descriptor_data_addr): Declare. + +2005-06-12 Tobias Schl"uter + + * trans-expr.c (gfc_conv_variable): POINTER results don't need f2c + calling conventions. Look at sym instead of sym->result. + * trans-types.c (gfc_sym_type): Remove workaround for frontend bug. + Remove condition which is always false with workaround removed. + (gfc_return_by_reference): Always look at sym, never at sym->result. + +2005-06-11 Steven G. Kargl + + PR fortran/17792 + PR fortran/21375 + * trans-array.c (gfc_array_deallocate): pstat is new argument + (gfc_array_allocate): update gfc_array_deallocate() call. + (gfc_trans_deferred_array): ditto. + * trans-array.h: update gfc_array_deallocate() prototype. + * trans-decl.c (gfc_build_builtin_function_decls): update declaration + * trans-stmt.c (gfc_trans_deallocate): Implement STAT= feature. + +2005-06-07 Jerry DeLisle + + * intrinsic.texi: Add documentation for dcmplx, digits, + dim, idim, ddim, dot_product, dprod, dreal, and dtime. + +2005-06-05 Tobias Schl"uter + + PR fortran/21912 + * trans-array.c (gfc_trans_array_constructor_value): Slightly reorder. + Generate correct exit condition in case of negative steps in + implied-do loops. + + * invoke.texi: Fix description of flags required for compatibility + with g77. + +2005-06-04 Tobias Schl"uter + Erik Schnetter + + PR fortran/19195 + * trans.c (gfc_get_backend_locus): Remove unnecessary adjustment, + remove FIXME comment. + +2005-06-04 Tobias Schl"uter + + * match.c (match_forall_iterator): Don't immediately give error if '=' + is not followed by an expression. + +2005-06-04 Tobias Schl"uter + Erik Edelmann + + * array.c (gfc_match_array_constructor): Disallow empty array + constructor. + +2005-06-03 Jerry DeLisle + + * fortran/intrinsic.texi: Add documentation for + command_argument_count, conjg, dconjg, count, + cpu_time, cshift, date_and_time, dble, dfloat. + +2005-06-01 Roger Sayle + + * intrinsic.c (add_conv): No longer take a "simplify" argument as + its always gfc_convert_constant, instead take a "standard" argument. + (add_conversions): Change all existing calls of add_conv to pass + GFC_STD_F77 as appropriate. Additionally, if we're allowing GNU + extensions support integer-logical and logical-integer conversions. + (gfc_convert_type_warn): Warn about use the use of these conversions + as a extension when appropriate, i.e. with -pedantic. + * simplify.c (gfc_convert_constant): Add support for integer to + logical and logical to integer conversions, using gfc_int2log and + gfc_log2int. + * arith.c (gfc_log2int, gfc_int2log): New functions. + * arith.h (gfc_log2int, gfc_int2log): Prototype here. + * gfortran.texi: Document this new GNU extension. + +2005-06-01 Paul Thomas + + * fortran/trans-expr.c (gfc_conv_variable): Clean up bracketting. + * fortran/trans-expr.c (gfc_conv_function_call): Insert spaces. + Correct comments and replace convert of integer_one_node with + build_int_cst. + +2005-06-01 Jakub Jelinek + + PR fortran/21729 + * resolve.c (resolve_contained_fntype): Use sym->attr.untyped + to avoid giving error multiple times. + (resolve_entries): Don't error about BT_UNKNOWN here. + (resolve_unknown_f): Capitalize IMPLICIT for consistency. + (resolve_fntype): New function. + (gfc_resolve): Call resolve_fntype. + +2005-06-01 Feng Wang + + PR fortran/20883 + * fortran/io.c (resolve_tag): Fix error message. + +2005-05-31 Kaveh R. Ghazi + + * fortran/trans-decl.c: Don't include errors.h. + * fortran/Make-lang.in: Updates dependencies. + +2005-05-31 Paul Thomas + + PR fortran/18109 + PR fortran/18283 + PR fortran/19107 + * fortran/trans-array.c (gfc_conv_expr_descriptor): Obtain the + string length from the expression typespec character length value + and set temp_ss->stringlength and backend_decl. Obtain the + tree expression from gfc_conv_expr rather than gfc_conv_expr_val. + Dereference the expression to obtain the character. + * fortran/trans-expr.c (gfc_conv_component_ref): Remove the + dereference of scalar character pointer structure components. + * fortran/trans-expr.c (gfc_trans_subarray_assign): Obtain the + string length for the structure component from the component + expression. + +2005-05-30 Roger Sayle + + * gfortran.h (GFC_STD_LEGACY): New "standard" macro. Reindent. + * options.c (gfc_init_options): By default, allow legacy extensions + but warn about them. + (gfc_post_options): Make -pedantic warn about legacy extensions + even with -std=legacy. + (gfc_handle_option): Make -std=gnu follow the default behaviour + of warning about legacy extensions, but allowing them. Make the + new -std=legacy accept everything and warn about nothing. + * lang.opt (std=legacy): New F95 command line option. + * invoke.texi: Document both -std=f2003 and -std=legacy. + * gfortran.texi: Explain the two types of extensions and document + how they are affected by the various -std= command line options. + +2005-05-30 Kazu Hirata + + * trans-expr.c: Remove trailing ^M. + + * trans-expr.c: Fix comment typos. + +2005-05-29 Paul Thomas + + PR fortran/16939 + PR fortran/17192 + PR fortran/17193 + PR fortran/17202 + PR fortran/18689 + PR fortran/18890 + * fortran/trans-array.c (gfc_conv_resolve_dependencies): Add string + length to temp_ss for character pointer array assignments. + * fortran/trans-expr.c (gfc_conv_variable): Correct errors in + dereferencing of characters and character pointers. + * fortran/trans-expr.c (gfc_conv_function_call): Provide string + length as return argument for various kinds of handling of return. + Return a char[]* temporary for character pointer functions and + dereference the temporary upon return. + +2005-05-29 Janne Blomqvist + Steven G. Kargl + + fortran/PR20846 + * io.c (gfc_match_inquire): Implement constraints on UNIT and FILE usage. + +2005-05-29 Francois-Xavier Coudert + + PR libfortran/20006 + * io.c (format_item_1): Add check and extension warning for + $ edit descriptor. + +2005-05-28 Steven G. Kargl + + * arith.c (gfc_arith_init_1): Fix off by one problem; + (gfc_check_integer_range): Chop extra bits in subnormal numbers. + +2005-05-28 Jerry DeLisle + Steven G. Kargl + + * intrinsic.texi: added documentation for BIT_SIZE, BTEST, CHAR, CEILING + and CMPLX + +2005-05-27 Steven G. Kargl + + * trans-array.c (gfc_trans_deferred_array): Use build_int_cst to force + like types in comparsion. + +2005-05-26 Kazu Hirata + + * data.c, parse.c, trans-array.c, trans-decl.c, + trans-intrinsic.c, trans-stmt.c, trans-types.c, trans.c, + trans.h: Fix comment typos. Follow spelling conventions. + +2005-05-22 Roger Sayle + + * gfortran.texi: Document some more GNU extensions. + +2005-05-22 Francois-Xavier Coudert + + * error.c (gfc_warning): Fix typo in comment. + +2005-05-18 Thomas Koenig + + PR libfortran/21127 + * fortran/iresolve.c (gfc_resolve_reshape): Add + gfc_type_letter (BT_COMPLEX) for complex to + to resolved function name. + +2005-05-18 Erik Edelmann + + * array.c (gfc_match_array_constructor): Support [ ... ] + style array constructors. + +2005-05-18 Tobias Schl"uter + + * f95-lang.c (gfc_init_builtin_functions): Define BUILT_IN_TRUNC + and BUILT_IN_TRUNCF instead of BUILT_IN_FLOOR and BUILT_IN_FLOORF. + * trans-intrinsic.c (build_fix_expr): Change 'op' argument + to correct enum type. + (gfc_conv_intrinsic_aint): Likewise. Clarify comment in front of + function. Add default case to switch, deal with FIX_TRUNC_EXPR + instead of FIX_FLOOR_EXPR. + +2005-05-18 Feng Wang + + PR fortran/20954 + * trans-const.c (gfc_conv_const_charlen): Use gfc_charlen_type_node to + build character length. + +2005-05-17 Zdenek Dvorak + + * trans-types.c (gfc_array_range_type): New variable. + (gfc_init_types): Initialize gfc_array_range_type. + (gfc_get_array_type_bounds): Use gfc_array_range_type. + +2005-05-17 Jakub Jelinek + + PR fortran/15080 + * trans-stmt.c (generate_loop_for_temp_to_lhs): Remove SIZE and COUNT2 + arguments. If LSS is gfc_ss_terminator, increment COUNT1 by 1, instead + of incrementing COUNT2 and using COUNT1+COUNT2 increment COUNT1 and use + just that as index. + (generate_loop_for_rhs_to_temp): Likewise. + (compute_overall_iter_number): Add INNER_SIZE_BODY argument. + It non-NULL, add it to body. + (allocate_temp_for_forall_nest_1): New function, split from + allocate_temp_for_forall_nest. + (allocate_temp_for_forall_nest): Add INNER_SIZE_BODY argument, + propagate it down to compute_overall_iter_number. Use + allocate_temp_for_forall_nest_1. + (gfc_trans_assign_need_temp): Remove COUNT2. Call + compute_inner_temp_size into a new stmtblock_t. Adjust calls to + allocate_temp_for_forall_nest, generate_loop_for_rhs_to_temp + and generate_loop_for_temp_to_lhs. + (gfc_trans_pointer_assign_need_temp): Adjust calls to + allocate_temp_for_forall_nest. + (gfc_evaluate_where_mask): Call compute_inner_temp_size into a new + stmtblock_t. Call compute_overall_iter_number just once, then + allocate_temp_for_forall_nest_1 twice with the same size. + Initialize mask indexes if nested_forall_info != NULL. + (gfc_trans_where_2): Initialize mask indexes before calling + gfc_trans_nested_forall_loop. + +2005-05-15 Feng Wang + Jerry DeLisle + + PR fortran/17432 + * trans-stmt.c (gfc_trans_label_assign): fix pointer type, to + resolve ICE on assign of format label. + * trans-io.c (set_string): add fold-convert to properly + handle assigned format label in write. + +2005-05-13 Paul Brook + + * trans-stmt.c (gfc_trans_forall_1): Fix comment typo. + +2005-05-12 Tobias Schl"uter + + * trans-types.c (gfc_is_nodesc_array): Remove redundant check. + +2005-05-11 Tobias Schl"uter + + PR fortran/21260 + * io.c (check_format): Look for literal characters inside + hollerith constant. + +2005-05-11 Tobias Schl"uter + + * resolve.c (resolve_symbol): Copy 'pointer' and 'dimension' + attribute from result symbol to function symbol. + * trans-expr.c (gfc_conv_function_call): Look at sym->attr.dimension + instead of sym->result->attr.dimension. + +2005-05-10 Tobias Schl"uter + + PR fortran/20178 + * gfortran.h (gfc_option): Add flag_f2c. + * invoke.texi: Document '-ff2c' command line option. Adapt + documentation for '-fno-second-underscore' and '-fno-underscoring'. + * lang.opt (ff2c): New entry. + * options.c (gfc-init_options): Set default calling convention + to -fno-f2c. Mark -fsecond-underscore unset. + (gfc_post_options): Set -fsecond-underscore if not explicitly set + by user. + (handle_options): Set gfc_option.flag_f2c according to requested + calling convention. + * trans-decl.c (gfc_get_extern_function_decl): Use special f2c + intrinsics where necessary. + (gfc_trans_deferred_vars): Change todo error to assertion. + * trans-expr.c (gfc_conv_variable): Dereference access + to hidden result argument. + (gfc_conv_function_call): Add hidden result argument to argument + list if f2c calling conventions requested. Slightly restructure + tests. Convert result of default REAL function to requested type + if f2c calling conventions are used. Dereference COMPLEX result + if f2c cc are used. + * trans-types.c (gfc_sym_type): Return double for default REAL + function if f2c cc are used. + (gfc_return_by_reference): Slightly restructure logic. Return + COMPLEX by reference depending on calling conventions. + (gfc_get_function_type): Correctly make hidden result argument a + pass-by-reference argument for COMPLEX. Remove old code which does + this for derived types. + +2005-05-09 Tobias Schl"uter + + * match.c (gfc_match_return): Only require space after keyword when + it is obligatory. Only give stdwarn to after matching is successful. + * dump-parse-tree.c (gfc_show_symbol): Deal with alternate returns. + +2005-05-08 Kazu Hirata + + * intrinsic.texi: Fix typos. + +2005-05-07 Steven G. Kargl + + * intrinsic.texi: Document ASSOCIATED and ATAN2. Update Bessel function + description to include information about scalar arguments. + +2005-05-03 Kazu Hirata + + * Make-lang.in, dump-parse-tree.c, invoke.texi, lang.opt, + match.h, trans-array.h: Update copyright. + +2005-04-29 Tom Tromey + + * f95-lang.c (poplevel): Updated for change to build_block. + +2005-04-29 Jakub Jelinek + + PR fortran/13082 + PR fortran/18824 + * trans-expr.c (gfc_conv_variable): Handle return values in functions + with alternate entry points. + * resolve.c (resolve_entries): Remove unnecessary string termination + after snprintf. Set result of entry master. + If all entries have the same type, set entry master's type + to that common type, otherwise set mixed_entry_master attribute. + * trans-types.c (gfc_get_mixed_entry_union): New function. + (gfc_get_function_type): Use it for mixed_entry_master functions. + * gfortran.h (symbol_attribute): Add mixed_entry_master bit. + * decl.c (gfc_match_entry): Set entry->result properly for + function ENTRY. + * trans-decl.c (gfc_get_symbol_decl): For entry_master, skip over + __entry argument. + (build_entry_thunks): Handle return values in entry thunks. + Clear BT_CHARACTER's ts.cl->backend_decl, so that it is not + shared between multiple contexts. + (gfc_get_fake_result_decl): Use DECL_ARGUMENTS from + current_function_decl instead of sym->backend_decl. Skip over + entry master's entry id argument. For mixed_entry_master entries or + their results, return a COMPONENT_REF of the fake result. + (gfc_trans_deferred_vars): Don't warn about missing return value if + at least one entry point uses RESULT. + (gfc_generate_function_code): For entry master returning + CHARACTER, copy ts.cl->backend_decl to all entry result syms. + * trans-array.c (gfc_trans_dummy_array_bias): Don't consider return + values optional just because they are in entry master. + +2005-04-29 Francois-Xavier Coudert + + * gfortran.h (gfc_namespace): Add seen_implicit_none field, + Tobias forgot this in previous commit. + +2005-04-29 Paul Brook + + * trans-expr.c (gfc_conv_expr_present): Fix broken assert. Update + comment. + +2005-04-29 Tobias Schl"uter + + * gfortran.h (gfc_namespace): Add seen_implicit_none field. + * symbol.c (gfc_set_implicit_none): Give error if there's a previous + IMPLICIT NONE, set seen_implicit_none. + (gfc_merge_new_implicit): Error if there's an IMPLICIT NONE statement. + +2005-04-28 Tobias Schl"uter + + * gfortran.h (gfc_gsymbol): Make name a const char *. + * symbol.c (gfc_get_gsymbol): Allocate gsymbol name via + gfc_get_string. + +2005-04-28 Francois-Xavier Coudert + + PR fortran/20865 + * resolve.c (resolve_actual_arglist): Issue an error if a statement + functions is used as actual argument. + +2005-04-27 Francois-Xavier Coudert + + PR fortran/21177 + * interface.c (compare_parameter): Ignore type for EXPR_NULL + only if type is BT_UNKNOWN. + +2005-04-25 Paul Brook + Steven G. Kargl + + PR fortran/20879 + * check.c (gfc_check_ichar_iachar): New function. + * instinsic.h (gfc_check_ichar_iachar): Add prototype. + * intrinsic.c (add_functions): Use it. + * primary.c (match_varspec, gfc_match_rvalue): Clear incorrect + character expression lengths. + +2005-04-24 Tobias Schl"uter + + PR fortran/20059 + * trans-common.c (translate_common): Cast offset and + common_segment->offset to type int for warning message. + +2005-04-23 DJ Delorie + + * trans-decl.c: Adjust warning() callers. + +2005-04-23 Tobias Schl"uter + + * trans-const.c (gfc_conv_mpfr_to_tree): Use hexadecimal string as + intermediate representation. Fix typo in comment. + +2005-04-21 Steven G. Kargl + + * trans-const.c (gfc_conv_mpfr_to_tree): Remove unneeded computation; + simplify logic; Add a gcc_assert. + +2005-04-19 Steven G. Kargl + + * trans-const.c (gfc_conv_mpz_to_tree): Fix comment. + +2005-04-19 Arnaud Desitter + Steven G. Kargl + + * invoke.texi: Update -Waliasing description + +2005-04-19 Francois-Xavier Coudert + + PR fortran/16861 + * resolve.c (resolve_variable): If e->symtree is not set, this + ought to be a FAILURE, and not a segfault. + +2005-04-17 Paul Thomas + + PR fortran/17472 + PR fortran/18209 + PR fortran/18396 + PR fortran/19467 + PR fortran/19657 + * fortran/trans-io.c (gfc_build_io_library_fndecls): Create + declaration for st_set_nml_var and st_set_nml_var_dim. Remove + declarations of old namelist functions. + (build_dt): Simplified call to transfer_namelist_element. + (nml_get_addr_expr): Generates address expression for start of + object data. New function. + (nml_full_name): Qualified name for derived type components. New + function. + (transfer_namelist_element): Modified for calls to new functions + and improved derived type handling. + +2005-04-17 Richard Guenther + + * scanner.c (gfc_next_char_literal): Reset truncation flag + for lines ending in a comment for both fixed and free form. + (load_line): Do not set truncated flag if only truncating + the EOL marker. + +2005-04-15 Richard Guenther + + PR fortran/14569 + * gfortran.h (gfc_linebuf): Add truncated field. + * parse.c (next_statement): Handle warning for truncated + lines. + * scanner.c (load_line): Return if line was truncated. + No longer warn for truncated lines. Remove unused parameters. + (load_file): Store load_line return value to linebuf. + (gfc_error_recovery): Do not advance line at the end. + +2005-04-14 Steven G. Kargl + + * gfortran.h (gfc_real_info): Add subnormal struct member. + * arith.c (gfc_arith_init_1): Set it. + (gfc_check_real_range): Use it. + * simplify.c (gfc_simplify_nearest): Fix nearest(0.,1.). + +2005-04-12 Kazu Hirata + + * simplify.c: Fix a comment typo. + +2005-04-11 Richard Sandiford + + * lang.opt: Refer to the GCC internals documentation instead of c.opt. + +2005-04-11 Tobias Schl"uter + + * simplify.c (gfc_simplify_nearest): Overhaul. + +2005-04-10 Kazu Hirata + + * interface.c: Fix a comment typo. + +2005-04-10 Francois-Xavier Coudert + + * match.c (match_arithmetic_if): Arithmetic IF is obsolete in + Fortran 95. + +2005-04-09 Steven G. Kargl + + * simplify.c (gfc_simplify_anint): Use mpfr_round() + (gfc_simplify_dnint): ditto. + (gfc_simplify_nint): ditto. + +2005-04-09 Andrew Pinski + + PR fortran/13257 + * io.c (check_format): Allow an optional comma + between descriptors. + +2005-04-09 Francois-Xavier Coudert + + * match.c (match_arithmetic_if): Remove gfc_ prefix and correct + comment according to GNU coding style. + (gfc_match_if): Remove gfc_ prefix in call to + match_arithmetic_if. + +2005-04-08 Diego Novillo + + * match.c (gfc_match_arithmetic_if): Declare static. + +2005-04-08 Francois-Xavier Coudert + + PR fortran/17229 + * match.c (gfc_match_arithmetic_if): New function to match an + arithmetic IF statement. + (gfc_match_if): Use gfc_match_arithmetic_if to match an + arithmetic IF statement embedded in a simple IF statement. + +2005-04-07 Steven G. Kargl + + * simplify.c (gfc_simplify_exponent): Fix exponent(tiny(x)) + +2005-04-06 Steven G. Kargl + + * invoke.texi: Remove documentation of -std=f90 + +2005-04-06 Tobias Schl"uter + + * expr.c (gfc_check_assign): Don't allow NULL as rhs in a + non-pointer assignment. + +2005-04-05 Feng Wang + + PR fortran/15959 + PR fortran/20713 + + * array.c (resolve_character_array_constructor): New function. Set + constant character array's character length. + (gfc_resolve_array_constructor): Use it. + * decl.c (add_init_expr_to_sym): Set symbol and initializer character + length. + (gfc_set_constant_character_len): New function. Set constant character + expression according the given length. + * match.h (gfc_set_constant_character_len): Add prototype. + +2005-04-04 Francois-Xavier Coudert + + * intrinsic.texi: BES?? functions are not in the f95 standard. + +2005-04-03 Francois-Xavier Coudert + + * intrinsic.texi: Document COS, EXP, LOG, LOG10, SIN, SQRT, TAN. + +2005-04-03 Francois-Xavier Coudert + + * intrinsic.texi: Document BESJ0, BESJ1, BESJN, BESY0, BESY1, + BESYN, ATAN, COSH, ERF, ERC, SINH, TANH. + +2005-04-02 Steven G. Kargl + + * intrinsic.texi: Document ALLOCATED, ANINT, ANY, ASIN; fix typos + +2005-04-01 Kazu Hirata + + * decl.c, f95-lang.c, interface.c, module.c, trans-stmt.c, + trans.h: Fix comment typos. + +2005-03-29 Steven G. Kargl + + * gfortran.h (option_t): Change d8, i8, r8 to flag_default_double, + flag_default_integer, flag_default_real + * invoke.texi: Update documentation + * lang.opt: Remove d8, i8, r8 definitions; Add fdefault-double-8 + fdefault-integer-8, and fdefault-real-8 definitions. + * options.c (gfc_init_options): Set option defaults + (gfc_handle_option): Handle command line options. + * trans-types.c (gfc_init_kinds): Use options. + +2005-03-29 Keith Besaw + + * f95-lang.c (builtin_function): Process the attrs parameter + and apply the "const" attribute to the builtin if found. + +2005-03-27 Steven G. Kargl + + * intrinsic.texi: Document AIMAG, AINT, ALL + +2005-03-26 Steven G. Kargl + + * arith.c (check_result): Fix illogical logic. + +2005-03-26 Canqun Yang + + * trans-common.c (create_common): Build RECORD_NODE for common blocks + contain no equivalence objects. + (add_equivalences): New argument saw_equiv. + (trans_common): New local variable saw_equiv. + (finish_equivalences): Add a local variable dummy, Always pass true + for the 3rd parameter to create_common. + +2005-03-25 Steven G. Kargl + + * intrinsic.texi: Fix "make dvi" + +2005-03-24 Steven G. Kargl + + * intrinsic.texi: New file. + * gfortran.texi: Include it; white space change; fix typo. + +2005-03-23 Joseph S. Myers + + * f95-lang.c (LANG_HOOKS_TRUTHVALUE_CONVERSION): Remove. + +2005-03-23 Steven Bosscher + + * convert.c (convert): Replace fold (buildN (...)) with fold_buildN. + * trans-array.c (gfc_trans_allocate_array_storage, + gfc_trans_allocate_temp_array gfc_trans_array_constructor_value, + gfc_conv_array_index_ref, gfc_trans_array_bound_check, + gfc_conv_array_index_offset, gfc_conv_scalarized_array_ref, + gfc_conv_array_ref, gfc_trans_preloop_setup, gfc_conv_ss_startstride, + gfc_conv_loop_setup, gfc_array_init_size, gfc_trans_array_bounds, + gfc_trans_auto_array_allocation, gfc_trans_dummy_array_bias, + gfc_conv_expr_descriptor): Likewise. + * trans-expr.c (gfc_conv_powi, gfc_conv_string_tmp, + gfc_conv_concat_op, gfc_conv_expr_op): Likewise. + * trans-intrinsic.c (build_round_expr, gfc_conv_intrinsic_bound, + gfc_conv_intrinsic_cmplx, gfc_conv_intrinsic_sign, + gfc_conv_intrinsic_minmaxloc, gfc_conv_intrinsic_minmaxval, + gfc_conv_intrinsic_btest, gfc_conv_intrinsic_bitop, + gfc_conv_intrinsic_singlebitop, gfc_conv_intrinsic_ibits, + gfc_conv_intrinsic_ishft, gfc_conv_intrinsic_ishftc, + gfc_conv_intrinsic_merge, prepare_arg_info, + gfc_conv_intrinsic_rrspacing, gfc_conv_intrinsic_repeat): Likewise. + * trans-stmt.c (gfc_trans_simple_do, gfc_trans_do, gfc_trans_do_while, + gfc_trans_forall_loop, gfc_do_allocate, generate_loop_for_temp_to_lhs, + generate_loop_for_rhs_to_temp, compute_inner_temp_size, + allocate_temp_for_forall_nest, gfc_trans_pointer_assign_need_temp, + gfc_trans_forall_1, gfc_evaluate_where_mask, gfc_trans_where_assign): + Likewise. + * trans-types.c (gfc_get_dtype, gfc_get_array_type_bounds): Likewise. + * trans.c (gfc_add_modify_expr): Likewise. + +2005-03-22 Francois-Xavier Coudert + + * check.c (gfc_check_chdir, gfc_check_chdir_sub, gfc_check_kill, + gfc_check_kill_sub, gfc_check_link, gfc_check_link_sub, + gfc_check_symlnk, gfc_check_symlnk_sub, gfc_check_rename, + gfc_check_rename_sub, gfc_check_sleep_sub, gfc_check_gerror, + gfc_check_getlog, gfc_check_hostnm, gfc_check_hostnm_sub, + gfc_check_perror): new functions to check newly implemented + g77 intrinsics. + * gfortran.h: adding symbols for new intrinsics. + * intrinsic.c (add_functions): adding new intrinsics. + (add_subroutines): adding new intrinsics. + * intrinsic.h: prototype for all checking and resolving + functions. + * iresolve.c (gfc_resolve_chdir, gfc_resolve_chdir_sub, + gfc_resolve_hostnm, gfc_resolve_ierrno, gfc_resolve_kill, + gfc_resolve_link, gfc_resolve_rename, gfc_resolve_symlnk, + gfc_resolve_time, gfc_resolve_time8, gfc_resolve_rename_sub, + gfc_resolve_kill_sub, gfc_resolve_link_sub, + gfc_resolve_symlnk_sub, gfc_resolve_sleep_sub, + gfc_resolve_gerror, gfc_resolve_getlog, gfc_resolve_hostnm_sub, + gfc_resolve_perror): new functions to resolve intrinsics. + * trans-intrinsic.c (gfc_conv_intrinsic_function): add case + for new symbols. + +2005-03-19 Tobias Schl"uter + + * dump-parse-tree.c (gfc_show_expr): Dump name of namespace + in which the variable is declared. + + PR fortran/18525 + * resolve.c (was_declared): Also check for dummy attribute. + +2005-03-19 Tobias Schl"uter + + * gfortran.h (arith): Remove ARITH_0TO0. + * arith.c (gfc_arith_error): Remove handling of ARITH_0TO0. + (gfc_arith_power): Remove special casing of zero to integral + power zero. + +2005-03-18 Kaveh R. Ghazi + + * Make-lang.in (fortran-warn): Remove -Wno-error. + (expr.o-warn, resolve.o-warn, simplify.o-warn, + trans-common.o-warn): Specify -Wno-error. + +2005-03-17 Tobias Schl"uter + + * trans-array.c (gfc_trans_static_array_pointer, + get_array_ctor_var_strlen, gfc_conv_array_index_offset): Fix + comment and formatting typos. + +2005-03-17 Francois-Xavier Coudert + + * invoke.texi: Fix typos. + +2005-03-15 Zack Weinberg + + * Make-lang.in (GFORTRAN_TEXI): Add gcc-vers.texi. + +2005-03-15 Feng Wang + + * trans-stmt.c (gfc_trans_label_assign): Don't set DECL_ARTIFICIAL flag + to zero on label_tree. + +2005-03-15 Feng Wang + + PR fortran/18827 + * io.c (resolve_tag): Add checking on assigned label. + (match_dt_format): Does not set symbol assign attribute. + * match.c (gfc_match_goto):Does not set symbol assign attribute. + * resolve.c (resolve_code): Add checking on assigned label. + * trans-common.c (build_field): Deals with common variable assigned + a label. + * trans-stmt.c (gfc_conv_label_variable): New function. + (gfc_trans_label_assign): Use it. + (gfc_trans_goto): Ditto. + * trans-io.c (set_string): Ditto. + * trans.h (gfc_conv_label_variable): Add prototype. + +2005-03-14 Tobias Schl"uter + + PR fortran/20467 + * symbol.c (check_conflict): A dummy argument can't be a statement + function. + +2005-03-14 Zdenek Dvorak + + * fortran/trans-intrinsic.c (gfc_conv_intrinsic_ishft): Convert + the argument of the shift to the unsigned type. + +2005-03-13 Tobias Schl"uter + + PR fortran/16907 + * resolve.c (gfc_resolve_index): Allow REAL indices as an extension. + +2005-03-13 Tobias Schl"uter + + PR fortran/20323 + * resolve.c (gfc_resolve): Check if character lengths are + specification expressions. + +2005-03-12 Tobias Schl"uter + + PR fortran/20361 + * trans-array.c (gfc_stack_space_left): Remove unused variable. + (gfc_can_put_var_on_stack): Move to trans-decl.c, remove #if 0'ed + code. + * trans-array.h (gfc_stack_space_left, gfc_can_put_var_on_stack): + Remove declaration / prototype. + * trans-common.c (build_equiv_decl): Give union a name. Check if + it can be put on the stack. + * trans-decl.c (gfc_stack_space_left): Move function here. + (gfc_build_qualified_array): Fix comment typo. + * trans.h (gfc_put_var_on_stack): Add prototype. + +2005-03-11 Kaveh R. Ghazi + + * Make-lang.in (fortran-warn): Set to $(STRICT_WARN) -Wno-error. + * decl.c, trans.c: Don't use C++ style comments. + * gfortran.h (sym_flavor, procedure_type, sym_intent, gfc_access, + ifsrc): Give names to enums and use ENUM_BITFIELD. + (gfc_access): Remove trailing comma. + +2005-03-05 Steven G. Kargl + + PR 19936 + * primary.c (match_complex_constant): Mangled complex constant may + be an implied do-loop. Give implied do-loop matcher a chance. + +2005-03-05 Steven G. Kargl + + PR fortran/19754 + * resolve.c (compare_shapes): New function. + (resolve_operator): Use it. + +2005-03-05 Tobias Schl"uter + + * trans-const.c (gfc_conv_constant_to_tree): Use correct tree + type for COMPLEX constants. + +2005-03-04 Tobias Schl"uter + + PR fortran/19673 + * trans-expr.c (gfc_conv_function_call): Correctly dereference + argument from a pointer function also if it has a result clause. + +2005-03-04 Steven G. Kargl + + * expr.c (gfc_copy_shape_excluding): Change && to ||. + +2005-03-04 Tobias Schl"uter + + * trans-intrinsic.c (gfc_get_symbol_for_expr): Fix comment typo, + clarify comment. + +2005-02-28 Tobias Schl"uter + (port from g95) + + PR fortran/19479 + * simplify.c (gfc_simplify_bound): Rename to ... + (simplify_bound): ... this and overhaul. + +2005-02-28 Steven G. Kargl + + * trans-intrinsic.c (gfc_conv_intrinsic_iargc): remove boolean argument. + (gfc_conv_intrinsic_function): update function calls + +2005-02-27 Steven G. Kargl + + PR fortran/20058 + * trans-types.c (gfc_max_integer_kind): Declare + (gfc_init_kinds): Initialize it. + * gfortran.h (gfc_max_integer_kind): extern it. + * primary.c (match_boz_constant): Use it; remove gfortran extension + of kind suffixes on BOZ literal constants + + +2005-02-27 Steven G. Kargl + + * arith.c (gfc_check_real_range): Remove multiple returns + (check_result): New function. + (gfc_arith_uminus,gfc_arith_plus,gfc_arith_times, + gfc_arith_divide,gfc_arith_power,gfc_arith_minus): Use it. + + +2005-02-24 Volker Reichelt + + * decl.c, resolve.c, trans-array.c, trans.h: Fix comment typo(s). + + +2005-02-24 Tobias Schl"uter + + Unrevert previously reverted patch. Adding this fix: + * module.c (find_true_name): Deal with NULL module. + +2005-02-24 Tobias Schl"uter + + Revert yesterday's patch: + 2005-02-23 Tobias Schl"uter + + * gfortran.h (gfc_component, gfc_actual_arglist, ... + ... argument. Copy string instead of pointing to it. + +2005-02-23 Tobias Schl"uter + + * gfortran.h (gfc_get_namespace): Add second argument to prototype. + * intrinsic.c (gfc_intrinsic_init_1): Pass second argument to + gfc_get_namespace. + * module.c (mio_namespace_ref, load_needed): Likewise. + * parse.c (parse_interface, parse_contained): Likewise. Here the + correct second argument matters. + * symbol.c (gfc_get_namespace): Add parent_types argument, only copy + parent's implicit types if this is set. + (gfc_symbol_init_2): Pass second argument to gfc_get_namespace. + * trans-common.c (build_common_decl): Likewise. + + * gfortran.h (symbol_attribute): New 'untyped' field, fix comment + formatting. + * symbol.c (gfc_set_default_type): Issue error only once, by setting + and checking 'untyped' attribute. + + * gfortran.h (gfc_expr): Move 'operator', 'op1', 'op2', and 'uop' + fields into new struct 'op' inside the 'value' union. + * arith.c (eval_intrinsic): Adapt all users. + * dependency.c (gfc_check_dependency): Likewise. + * dump-parse-tree.c (gfc_show_expr): Likewise. + * expr.c (gfc_get_expr): Don't clear removed fields. + (free_expr0, gfc_copy_expr, gfc_type_convert_binary, + gfc_is_constant_expr, simplify_intrinsic_op, check_init_expr, + check_intrinsic_op): Adapt to new field names. + * interface.c (gfc_extend_expr): Likewise. Also explicitly + nullify 'esym' and 'isym' fields of new function call. + * iresolve.c (gfc_resolve_dot_product, gfc_resolve_matmul): + Adapt to renamed structure fields. + * matchexp.c (build_node, match_level_1, match_expr): Likewise. + * module.c (mio_expr): Likewise. + * resolve.c (resolve_operator): Likewise. + (gfc_find_forall_index): Likewise. Only look through operands + if dealing with EXPR_OP + * trans-array.c (gfc_walk_op_expr): Adapt to renamed fields. + * trans-expr.c (gfc_conv_unary_op, gfc_conv_power_op, + gfc_conv_concat_op, gfc_conv_expr_op): Likewise. + + [ Reverted ] + * gfortran.h (gfc_component, gfc_actual_arglist, gfc_user_op): Make + 'name' a 'const char *'. + (gfc_symbol): Likewise, also for 'module'. + (gfc_symtree): Make 'name' a 'const char *'. + (gfc_intrinsic_sym): Likewise, also for 'lib_name'. + (gfc_get_gsymbol, gfc_find_gsymbol): Add 'const' qualifier to + 'char *' argument. + (gfc_intrinsic_symbol): Use 'gfc_get_string' instead of 'strcpy' to + initialize 'SYM->module'. + * check.c (gfc_check_minloc_maxloc, check_reduction): Check for NULL + pointer instead of empty string. + * dump-parse-tree.c (gfc_show_actual_arglist): Likewise. + * interface.c (gfc_compare_types): Adapt check to account for possible + NULL pointer. + (compare_actual_formal): Check for NULL pointer instead of empty + string. + * intrinsic.c (gfc_current_intrinsic, gfc_current_intrinsic_arg): + Add 'const' qualifier. + (conv_name): Return a heap allocated string. + (find_conv): Add 'const' qualifier to 'target'. + (add_sym): Use 'gfc_get_string' instead of 'strcpy'. + (make_generic): Check for NULL pointer instead of empty string. + (make_alias): Use 'gfc_get_string' instead of 'strcpy'. + (add_conv): No need to strcpy result from 'conv_name'. + (sort_actual): Check for NULL pointer instead of empty string. + * intrinsic.h (gfc_current_intrinsic, gfc_current_intrinsic_arg): + Adapt prototype. + * module.c (compare_true_names): Compare pointers instead of strings + for 'module' member. + (find_true_name): Initialize string fields with gfc_get_string. + (mio_pool_string): New function. + (mio_internal_string): Adapt comment. + (mio_component_ref, mio_component, mio_actual_arg): Use + 'mio_pool_string' instead of 'mio_internal_string'. + (mio_symbol_interface): Add 'const' qualifier to string arguments. + Add level of indirection. Use 'mio_pool_string' instead of + 'mio_internal_string'. + (load_needed, read_module): Use 'gfc_get_string' instead of 'strcpy'. + (write_common, write_symbol): Use 'mio_pool_string' instead of + 'mio_internal_string'. + (write_symbol0, write_symbol1): Likewise, also check for NULL pointer + instead of empty string. + (write_operator, write_generic): Pass correct type variable to + 'mio_symbol_interface'. + (write_symtree): Use 'mio_pool_string' instead of + 'mio_internal_string'. + * primary.c (match_keyword_arg): Adapt check to possible + case of NULL pointer. Use 'gfc_get_string' instead of 'strcpy'. + * symbol.c (gfc_add_component, gfc_new_symtree, delete_symtree, + gfc_get_uop, gfc_new_symbol): Use 'gfc_get_string' instead of + 'strcpy'. + (ambiguous_symbol): Check for NULL pointer instead of empty string. + (gfc_find_gsymbol, gfc_get_gsymbol): Add 'const' qualifier on string + arguments. + * trans-array.c (gfc_trans_auto_array_allocation): Check for NULL + pointer instead of empty string. + * trans-decl.c (gfc_sym_mangled_identifier, + gfc_sym_mangled_function_id, gfc_finish_var_decl, gfc_get_symbol_decl, + gfc_get_symbol_decl): Likewise. + * trans-io.c (gfc_new_nml_name_expr): Add 'const' qualifier to + argument. Copy string instead of pointing to it. + +2005-02-23 Kazu Hirata + + * intrinsic.h, st.c: Update copyright. + +2005-02-20 Steven G. Kargl + + * symbol.c: Typos in comments. + +2005-02-20 Steven G. Kargl + + * expr.c (gfc_type_convert_binary): Typo in comment. + +2005-02-19 Steven G. Kargl + + * check.c (gfc_check_selected_int_kind): New function. + * intrinsic.h: Prototype it. + * intrinsic.c (add_function): Use it. + * simplify (gfc_simplify_ceiling,gfc_simplify_floor): Change + BT_REAL to BT_INTEGER and use gfc_default_integer_kind. + +2005-02-19 Steven G. Kargl + + * check.c (gfc_check_int): improve checking of optional kind + * simplify.c (gfc_simplify_int): Change BT_REAL to BT_INTEGER + +2005-02-19 Steven G. Kargl + + * check.c (gfc_check_achar): New function + * intrinsic.h: Prototype it. + * intrinsic.c (add_function): Use it. + +2005-02-13 Tobias Schl"uter + + * trans-stmt.c (generate_loop_for_temp_to_lhs, + generate_loop_for_rhs_to_temp): Remove if whose condition is + always true. + +2005-02-12 Tobias Schl"uter + + * symbol.c (gfc_use_ha_derived): Remove, fold functionality into ... + (gfc_use_derived): ... this function. + +2005-02-09 Richard Henderson + + * f95-lang.c (gfc_init_builtin_functions): Call + build_common_builtin_nodes; do not define any functions handled + by it. + +2005-02-08 Tobias Schl"uter + + * expr.c (gfc_copy_expr): Don't copy 'op1' and 'op2' for + EXPR_SUBSTRING. + (gfc_is_constant_expr): Check 'ref' to determine if substring + reference is constant. + (gfc_simplify_expr): Simplify 'ref' instead of 'op1' and 'op2'. + (check_init_expr, check_restricted): Check 'ref' instead of 'op1' + and 'op2'. + * module.c (mio_expr): Read / write 'ref' instead of 'op1' and 'op2'. + +2005-02-07 Tobias Schl"uter + + * gfortran.h (gfc_add_dimension, gfc_add_result, gfc_add_save, + gfc_add_dummy, gfc_add_generic, gfc_add_in_common, gfc_add_data, + gfc_add_in_namelist, gfc_add_sequence, gfc_add_function, + gfc_add_subroutine, gfc_add_access, gfc_add_flavor, gfc_add_entry, + gfc_add_procedure): Add argument. + * array.c (gfc_set_array_spec), decl.c (var_element, get_proc_name, + gfc_match_null, match_type_spec, match_attr_spec, + gfc_match_formal_arglist, match_result, gfc_match_function_decl): + Update callers to match. + (gfc_match_entry): Likewise, fix comment typo. + (gfc_match_subroutine, attr_decl1, gfc_add_dimension, + access_attr_decl, do_parm, gfc_match_save, gfc_match_modproc, + gfc_match_derived_decl): Update callers. + * interface.c (gfc_match_interface): Likewise. + * match.c (gfc_match_label, gfc_add_flavor, + gfc_match_call, gfc_match_common, gfc_match_block_data, + gfc_match_namelist, gfc_match_module, gfc_match_st_function): + Likewise. + * parse.c (parse_derived, parse_interface, parse_contained), + primary.c (gfc_match_rvalue, gfc_match_variable): Likewise. + * resolve.c (resolve_formal_arglist, resolve_entries): Update callers. + * symbol.c (check_conflict, check_used): Add new 'name' argument, + use when printing error message. + (gfc_add_dimension, gfc_add_result, gfc_add_save, gfc_add_dummy, + gfc_add_generic, gfc_add_in_common, gfc_add_data, + gfc_add_in_namelist, gfc_add_sequence, gfc_add_function, + gfc_add_subroutine, gfc_add_access, gfc_add_flavor, gfc_add_entry, + gfc_add_procedure): Add new 'name' argument. Pass along to + check_conflict and check_used. + (gfc_add_allocatable, gfc_add_external, gfc_add_intrinsic, + gfc_add_optional, gfc_add_pointer, gfc_add_target, gfc_add_elemental, + gfc_add_pure, gfc_add_recursive, gfc_add_intent, + gfc_add_explicit_interface, gfc_copy_attr): Pass NULL for new + argument in calls to any of the modified functions. + +2005-02-06 Joseph S. Myers + + * gfortran.texi: Don't give last update date. + +2006-01-30 Richard Henderson + + * options.c (gfc_init_options): Zero flag_errno_math. + +2005-01-29 Paul Brook + + PR fortran/18565 + * check.c (real_or_complex_check): New function. + (gfc_check_fn_c, gfc_check_fn_r, gfc_check_fn_rc): New functions. + * intrinsic.c (add_functions): Use new check functions. + * intrinsic.h (gfc_check_fn_c, gfc_check_fn_r, gfc_check_fn_rc): + Add prototypes. + +2005-01-29 Steven G. Kargl + + PR fortran/19589 + * expr.c (gfc_check_assign): Check for conformance of logical operands + +2005-01-27 Steven Bosscher + + * trans-decl.c (gfc_build_label_decl): Set DECL_ARTIFICAL and + TREE_USED for all labels. + (gfc_trans_entry_master_switch): Use it instead of building a + label by hand. + * trans-io.c (add_case): Likewise. + * trans-stmt.c (gfc_trans_integer_select): Likewise. + +2005-01-23 Paul Brook + Steven G. Kargl + + PR fortran/17941 + * arith.c (gfc_convert_real): Remove sign handling. + * primary.c (match_digits): Allow whitespace after initial sign. + (match_real_const): Handle signs here. Allow whitespace after + initial sign. Remove dead code. + (match_const_complex_part): Remove. + (match_complex_part): Use match_{real,integer}_const. + (match_complex_constant): Cross-promote integer types. + +2005-01-23 James A. Morrison + + PR fortran/19294 + * iresolve.c (gfc_resolve_transpose): Resolve to transpose_c4 or + transpose_c8 for complex types. + +2005-01-23 Kazu Hirata + + * data.c, dependency.c, f95-lang.c, io.c, trans-array.c, + trans-decl.c, trans-expr.c, trans-intrinsic.c, trans-io.c, + trans-stmt.c, trans-types.c, trans.h: Fix comment typos. + Follow spelling conventions. + +2005-01-22 Bud Davis + + PR fortran/19313 + * trans-io.c (gfc_trans_inquire): Added code to support + pad. + +2005-01-22 Steven G. Kargl + + * intrinsic.c (make_alias): Add standard argument. + (add_functions): Update make_alias calls. + +2005-01-22 Paul Brook + + * trans-expr.c (gfc_conv_function_call): Remove bogus TODO. + +2005-01-22 Paul Brook + + * gfortran.h (gfc_check_access): Add prototype. + * match.c (gfc_match_namelist): Remove TODO. + * module.c (check_access): Rename ... + (gfc_check_access): ... to this. Boolify. Update callers. + * resolve.c (resolve_symbol): Check for private objects in public + namelists. + +2005-01-22 Paul Brook + + * primary.c (gfc_match_rvalue): Only apply implicit type if variable + does not have an explicit type. + (gfc_match_variable): Resolve implicit derived types in all cases. + Resolve contained function types from their own namespace, not the + parent. + * resolve.c (resolve_contained_fntype): Remove duplicate sym->result + checking. Resolve from the contained namespace, not the parent. + +2005-01-22 Tobias Schl"uter + + PR fortran/19543 + * trans-const.c (gfc_conv_constant_to_tree): Give logical + constants the correct type. + + PR fortran/19194 + * trans-io.c (ADD_STRING): Use gfc_charlen_type_node for string + length parameters. + (gfc_build_io_library_fndecls): 'rec' and 'recl_in' are not + pointer fields. + +2005-01-18 Kazu Hirata + + * arith.c, array.c, check.c, decl.c, expr.c, f95-lang.c, + gfortran.h, interface.c, intrinsic.c, io.c, iresolve.c, + match.c, matchexp.c, misc.c, module.c, options.c, parse.c, + scanner.c, simplify.c, symbol.c, trans-array.c, trans-expr.c, + trans-io.c, trans-stmt.c, trans.c: Update copyright. + +2005-01-17 Ira Rosen + + * f95-lang.c (gfc_init_builtin_functions): Call targetm.init_builtins. + +2005-01-16 Tobias Schlueter + + PR fortran/19182 + * error.c (error_char): Line-buffer errors / warnings. + +2005-01-16 Tobias Schlueter + + * trans-intrinsic.c (gfc_conv_intrinsic_ishft): Fix signed / + unsigned issue. Use build_int_cst instead of converting + integer_zero_node. Remove unnecessary conversion. + + * trans-types.c (gfc_get_character_type_len): Use + gfc_charlen_type_node as basic type for the range field. + + * trans-intrinsic.c (build_fixbound_expr, + gfc_conv_intrinsic_bound, gfc_conv_intrinsic_anyall, + gfc_conv_intrinsic_count, gfc_conv_intrinsic_btest, + gfc_conv_intrinsic_singlebitop): Use 'build_int_cst' instead + of converting 'integer_zero_node' or 'integer_one_node' + respectively. + (gfc_conv_intrinsic_ishftc): Same, but store in local variable to + evade re-building. + (gfc_conv_intrinsic_strcmp, gfc_conv_intrinsic_rrspacing, + gfc_conv_intrinsic_trim, gfc_conv_intrinsic_iargc): Use + 'build_int_cst' instead of converting 'integer_zero_node' or + 'integer_one_node' respectively. + + * trans-intrinsic.c (gfc_conv_intrinsic_index, + gfc_conv_intrinsic_scan, gfc_conv_intrinsic_verify): Remove + 'gfc'-prefix from local variable, remove dead code, use correct + type when inserting argument. + + * trans-intrinsic.c, trans-types.c: Update copyright years. + +2005-01-16 Steven G. Kargl + + PR 19168 + * resolve.c (check_case_overlap): Typo in comment. + (validate_case_label_expr): Fix up kinds of case values + (resolve_select): Properly handle kind mismatches. + +2005-01-16 Paul Brook + + PR fortran/17675 + * trans-common.c (translate_common): Remove duplicate function call. + (finish_equivalences): Preserve alignment when biasing offsets. + +2005-01-15 Tobias Schl"uter + + * resolve.c (compare_case): Cleanup. + +2005-01-14 Steven G. Kargl + + * resolve.c (compare_case): Give arguments correct type. + +2005-01-13 Kazu Hirata + + * iresolve.c, trans-common.c, trans-types.c: Fix comment + typos. + +2005-01-09 Paul Brook + + PR fortran/17675 + * trans-common.c (current_common, current_offset): Remove. + (create_common): Add head argument. + (align_segment): New function. + (apply_segment_offset): New function. + (translate_common): Merge code from new_segment. Handle alignment. + (new_segment): Remove. + (finish_equivalences): Ensure proper alignment. + +2005-01-08 Tobias Schl"uter + + * trans-const.c: Don't include unused math.h. + + * trans-intrinsic.c (gfc_get_intrinsic_lib_fndecl, + gfc_conv_intrinsic_bound, gfc_conv_intrinsic_minmaxloc, + gfc_conv_intrinsic_ishft, gfc_conv_intrinsic_len): Remove + trailing whitespace. + (prepare_arg_info): Fix formatting, indenting and remove trailing + whitespace. + (gfc_conv_intrinsic_spacing, gfc_conv_intrinsic_trim): Remove + trailing whitespace. + + * arith.c (arctangent2, gfc_arith_init_1, gfc_arith_done_1, + gfc_constant_result, gfc_range_check, gfc_arith_power, + eval_type_intrinsic0, eval_intrinsic_f2, gfc_real2real, + gfc_real2complex, gfc_complex2int, gfc_complex2real, + gfc_complex2complex): Fix whitespace issues. + * check.c (must_be, type_check, numeric_check, int_or_real_check, + logical_array_check, array_check, scalar_check, nonoptional_check, + variable_check, dim_check, check_a_kind, gfc_check_a_ikind, + gfc_check_a_xkind, gfc_check_abs, gfc_check_all_any, + gfc_check_allocated, gfc_check_a_p, gfc_check_besn, + gfc_check_btest, gfc_check_char, gfc_check_cmplx, gfc_check_count, + gfc_check_cshift, gfc_check_dcmplx, gfc_check_dble, + gfc_check_digits, gfc_check_dot_product, gfc_check_eoshift, + gfc_check_fnum, gfc_check_g77_math1, gfc_check_huge, gfc_check_i, + gfc_check_iand, gfc_check_ibclr, gfc_check_ibits, gfc_check_ibset, + gfc_check_idnint, gfc_check_ieor, gfc_check_index, gfc_check_int, + gfc_check_ior, gfc_check_ishft, gfc_check_ishftc, gfc_check_kind, + gfc_check_lbound, gfc_check_logical, min_max_args, + gfc_check_min_max_integer, gfc_check_min_max_real, + gfc_check_min_max_double, gfc_check_matmul, + gfc_check_minval_maxval, gfc_check_merge, gfc_check_nearest, + gfc_check_pack, gfc_check_precision, gfc_check_radix, + gfc_check_range, gfc_check_real, gfc_check_repeat, + gfc_check_scale, gfc_check_scan, gfc_check_selected_real_kind, + gfc_check_set_exponent): Fix formatting issues. + (gfc_check_size, gfc_check_sign): Alphabetize function order, + remove whitespace-only line. + (gfc_check_fstat, gfc_check_fstat_sub, gfc_check_stat, + gfc_check_stat_sub, gfc_check_transfer, gfc_check_transpose, + gfc_check_ubound, gfc_check_unpack, gfc_check_verify, gfc_check_x, + gfc_check_cpu_time, gfc_check_date_and_time, gfc_check_mvbits, + gfc_check_random_number, gfc_check_random_seed, + gfc_check_second_sub, gfc_check_system_clock, + gfc_check_getcwd_sub, gfc_check_exit, gfc_check_flush, + gfc_check_umask, gfc_check_umask_sub, gfc_check_unlink, + gfc_check_unlink_sub): Fix formatting issues. + +2005-01-08 Tobias Schl"uter + + * gfortran.h: Remove outdated comment. Don't include stdio.h + explicitly. + +2005-01-06 Tobias Schlueter + + * gfortranspec.c (lang_specific_driver): Change year to 2005 in + output of 'gfortran --version'. + +2005-01-03 Steven G. Kargl + + * arith.c: Add system.h; remove string.h + * decl.c: Ditto + * matchexp.c: Ditto + * parse.c: Ditto + * resolve.c: Ditto + * st.c: Ditto + * check.c: Remove stdlib.h and stdarg.h + * error.c: Remove stdlib.h, stdarg.h, stdio.h, string.h + * expr.c: Add system.h; remove stdarg.h, stdio.h, and string.h + * f95-lang.c: Add system.h; remove stdio.h + * interface.c: Add system.h; remove stdlib.h and string.h + * intrinsic.c: Remove stdarg.h, stdio.h, and string.h + * io.c: Remove string.h + * simplify.c: Ditto + * match.c: Remove stdarg.h and string.h + * misc.c: Update copyright; add system.h; remove stdlib.h, + string.h, and sys/stat.h + * module.c: Add system.h; remove string.h, stdio.h, errno.h, + unistd.h, and time.h + * option.c: Remove string.h and stdlib.h + * primary.c: Ditto + * scanner.c: Update copyright; add system.h; remove stdlib.h, + stdio.h, string.h, and strings.h + * symbol.c: Add system.h; remove stdlib.h, stdio.h, and string.h + * trans-array.c: Remove stdio.h and gmp.h + * trans-const.c: Ditto + * trans-expr.c: Ditto + * trans-io.c: Ditto + * trans-stmt.c: Ditto + * trans.c: Ditto + * trans-intrinsic.c: Remove stdio.h and string.h diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2006 b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2006 new file mode 100644 index 0000000000..1a622ee017 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2006 @@ -0,0 +1,4538 @@ +2006-12-31 Paul Thomas + + PR fortran/27900 + * resolve.c (resolve_actual_arglist): If all else fails and a + procedure actual argument has no type, see if a specific + intrinsic matches. + + PR fortran/24325 + * resolve.c (resolve_function): If the function reference is + FL_VARIABLE this is an error. + +2006-12-31 Paul Thomas + + PR fortran/23060 + * intrinsic.c (compare_actual_formal ): Distinguish argument + list functions from keywords. + * intrinsic.c (sort_actual): If formal is NULL, the presence of + an argument list function actual is an error. + * trans-expr.c (conv_arglist_function) : New function to + implement argument list functions %VAL, %REF and %LOC. + (gfc_conv_function_call): Call it. + * resolve.c (resolve_actual_arglist): Add arg ptype and check + argument list functions. + (resolve_function, resolve_call): Set value of ptype before + calls to resolve_actual_arglist. + * primary.c (match_arg_list_function): New function. + (gfc_match_actual_arglist): Call it before trying for a + keyword argument. + +2006-12-28 Paul Thomas + + PR fortran/30034 + * resolve.c (resolve_formal_arglist): Exclude the test for + pointers and procedures for subroutine arguments as well as + functions. + + PR fortran/30237 + * intrinsic.c (remove_nullargs): Do not pass up arguments with + a label. If the actual has a label and the formal has a type + then emit an error. + +2006-12-27 Jerry DeLisle + + PR fortran/30014 + *io.c (resolve_tag): Don't issue error for tag_size type not being + default integer size for -std=F2003. Add similar check for + tag_iolength. + *ioparm.def: Change size and iolength parameters to ioint pointer, which + corresponds to GFC_IO_INT on the library side. + +2006-12-27 Gerald Pfeifer + + * interface.c (compare_actual_formal): Remove unused variable + gsym. + +2006-12-27 Paul Thomas + + PR fortran/20896 + * interface.c (check_sym_interfaces): Try to resolve interface + reference as a global symbol, if it is not a nodule procedure. + (compare_actual_formal): Remove call to gfc_find_symbol; if + the expression is already a variable it is locally declared + and this has precedence. + gfortran.h : Add prototype for resolve_global_procedure. + resolve.c (resolve_global_procedure): Remove static attribute + from function declaration. + (resolve_fl_procedure): Remove symtree declaration and the + redundant check for an ambiguous procedure. + + PR fortran/25135 + * module.c (load_generic_interfaces): If the symbol is present + and is not generic it is ambiguous. + +2006-12-22 Paul Thomas + + PR fortran/25818 + * trans-array.c (gfc_trans_g77_array): If the variable is + optional or not always present, make the statement conditional + on presence of the argument. + * gfortran.h : Add symbol_attribute not_always_present. + * resolve.c (check_argument_lists): New function to check if + arguments are not present in all entries. + + PR fortran/30084 + * module.c (mio_component_ref): Move treatment of unique name + variables, during output, to fix_mio_expr. + (fix_mio_expr): New function that fixes defective expressions + before they are written to the module file. + (mio_expr): Call the new function. + (resolve_entries): Call check_argument_lists. + +2006-12-21 Roger Sayle + + * trans-array.c (gfc_trans_create_temp_array): When the size is known + at compile-time, avoid an unnecessary conditional assignment. + (gfc_array_init_size): Likewise. + +2006-12-22 Kazu Hirata + + * interface.c: Fix a comment typo. + +2006-12-21 Paul Thomas + + PR fortran/30273 + * dependency.c (gfc_check_dependency): There is no dependency + with EXPR_NULL so always return 0. + +2006-12-21 Paul Thomas + + PR fortran/30202 + * trans-array.c (gfc_conv_function_call): Use parmse.expr for + the nullifying of intent(out) arguments rather than the backend + declaration. + +2006-12-20 Tobias Schlüter + + PR fortran/25392 + * trans-stmt.c (gfc_trans_return): Fix comment formatting. + * trans-types.c (gfc_sym_type): Don't return early for functions. + Remove special handling for -ff2c. + (gfc_get_function_type): Add special handling for -ff2c. + * trans-decl.c (gfc_create_function_decl): Fix comment formatting. + (gfc_get_fake_result_decl): Make sure we get the right type for + functions. + (gfc_generate_function_code): Convert type of result variable to + type of function. + +2006-12-20 Paul Thomas + + PR fortran/30190 + * trans-array.c (gfc_conv_array_ref): Remove gfc_evaluate_now + from the -fbounds-check branch. + +2006-12-20 Roger Sayle + + * trans-expr.c (is_zero_initializer_p): Determine whether a given + constant expression is a zero initializer. + (gfc_trans_zero_assign): New function to attempt to optimize + "a(:) = 0.0" as a call to __builtin_memset (a, 0, sizeof(a)); + (gfc_trans_assignment): Special case array assignments to a + zero initializer constant, using gfc_trans_zero_assign. + +2006-12-20 Paul Thomas + + PR fortran/29992 + * interface.c (check_sym_interfaces): Module procedures in a + generic must be use associated or contained in the module. + * decl.c (gfc_match_modproc): Set attribute mod_proc. + * gfortran.h (symbol_attribute): Add mod_proc atribute. + + PR fortran/30081 + * resolve.c (resolve_generic_f, resolve_generic_s): Use + gfc_intrinsic_name to find out if the function is intrinsic + because it does not have to be a generic intrinsic to be + overloaded. + +2006-12-19 Tobias Burnus + + PR fortran/39238 + * trans-intrinsic.c: Check for associated(NULL,NULL). + +2006-12-19 Paul Thomas + + PR fortran/30236 + * interface.c (compare_interfaces): Handle NULL symbols. + (count_types_test): Count NULL symbols, which correspond to + alternate returns. + + (check_interface1): Change final argument from int to bool + in the function and all references. + +2006-12-18 Roger Sayle + + * trans-array.c (gfc_conv_array_index_offset): Avoid multiplying + index by one, or adding zero to it. + +2006-12-17 Roger Sayle + + PR fortran/30207 + * dependency.c (gfc_full_array_ref_p): New function to test whether + the given array ref specifies the entire array. + (gfc_dep_resolver): Use gfc_full_array_ref_p to analyze AR_FULL + array refs against AR_SECTION array refs, and vice versa. + * dependency.h (gfc_full_array_ref_p): Prototype here. + * trans-array.c (gfc_conv_expr_descriptor): Use gfc_full_array_ref_p. + +2006-12-16 Brooks Moses + + * gfortran.texi: Added TeX support for document parts; + rearranged existing text into "About GNU Fortran", + "Invoking GNU Fortran", and "Language Reference" parts. + +2006-12-15 Jerry DeLisle + + PR fortran/30200 + * trans-io.c (build_dt): Move post block for format_expr to end. + +2006-12-14 Richard Guenther + Diego Novillo + + * Make-lang.in (fortran/options.o): Add $(PARAMS_H) dependency. + * options.c (params.h): Include. + (gfc_post_options): Set MAX_ALIASED_VOPS to 50. + +2006-12-13 Richard Guenther + + PR fortran/30115 + * trans-array.c (gfc_array_allocate): Adjust for changed + library interface. + (gfc_array_deallocate): Likewise. + (gfc_trans_dealloc_allocated): Likewise. + * trans-stmt.c (gfc_trans_allocate): Likewise. + (gfc_trans_deallocate): Likewise. + * trans-decl.c (gfc_build_builtin_function_decls): Adjust + function declarations to match the library changes. Mark + allocation functions with DECL_IS_MALLOC. + +2006-12-12 Tobias Schlüter + + * trans-expr.c (gfc_conv_substring): Check for empty substring. + +2006-12-11 Jan Hubicka + + * f95-lang.c (gfc_expand_function): Update for renamed varpool + functions. + +2006-12-10 Tobias Burnus + + * gfortran.texi: Update Fortran 2003 section. + +2006-12-10 Tobias Burnus + + PR fortran/23994 + * interface.c (compare_actual_formal): PROTECTED is incompatible + with intent(out). + * symbol.c (check_conflict): Check for PROTECTED conflicts. + (gfc_add_protected): New function. + (gfc_copy_attr): Copy PROTECTED attribute. + * decl.c (match_attr_spec): Add PROTECTED support. + (gfc_match_protected): New function. + * dump-parse-tree.c (gfc_show_attr): Add PROTECTED support. + * gfortran.h (gfc_symbol): Add protected flag. + Add gfc_add_protected prototype. + * expr.c (gfc_check_pointer_assign): Add PROTECTED support. + * module.c (ab_attribute, attr_bits, mio_symbol_attribute, + mio_symbol_attribute): Add PROTECTED support. + * resolve.c (resolve_equivalence): Add PROTECTED support. + * match.c (gfc_match_assignment,gfc_match_pointer_assignment): + Check PROTECTED attribute. + * match.h: Add gfc_match_protected prototype. + * parse.c (decode_statement): Match PROTECTED statement. + * primary.c (match_variable): Add PROTECTED support. + +2006-12-09 Paul Thomas + + PR fortran/29975 + PR fortran/30068 + PR fortran/30096 + * interface.c (compare_type_rank_if): Reject invalid generic + interfaces. + (check_interface1): Give a warning for nonreferred to ambiguous + interfaces. + (check_sym_interfaces): Check whether an ambiguous interface is + referred to. Do not check host associated interfaces since these + cannot be ambiguous with the local versions. + (check_uop_interface, gfc_check_interfaces): Update call to + check_interface1. + * symbol.c (gfc_get_sym_tree, gfc_get_sym_tree): Allow adding + unambiguous procedures to generic interfaces. + * gfortran.h (symbol_attribute): Added use_only and + ambiguous_interfaces. + * module.c (load_need): Set the use_only flag, if needed. + * resolve.c (resolve_fl_procedure): Warn for nonreferred + interfaces. + * expr.c (find_array_section): Fix initializer array contructor. + +2006-12-09 Paul Thomas + + PR fortran/29464 + * module.c (load_generic_interfaces): Add symbols for all the + local names of an interface. Share the interface amongst the + symbols. + * gfortran.h : Add generic_copy to symbol_attribute. + * symbol.c (free_symbol): Only free interface if generic_copy + is not set. + +2006-12-09 Paul Thomas + + PR fortran/29941 + * resolve.c (resolve_function): Add LEN to the functions not + checked for assumed size actual args. + +2006-12-08 Tobias Burnus + + PR fortran/27546 + * trans-decl.c (gfc_create_module_variable): Allow imported + symbols in interface bodies in modules. + +2006-12-06 Tobias Burnus + + PR fortran/29711 + * error.c (error_print): Fix handling of printf-style position + specifiers of the form "%3$d". + +2006-12-05 Paul Thomas + + PR fortran/30003 + * trans-array.c (gfc_trans_create_temp_array): Set the section + ends to zero. + (gfc_conv_array_transpose): Likewise. + (gfc_conv_section_startstride): Declare an expression for end, + set it from a the array reference and evaluate it for the info + structure. Zero the ends in the ss structure and set end, used + in the bounds check, from the info structure. + trans.h: Add and end array to the gfc_ss_info structure. + +2006-12-05 Paul Thomas + + PR fortran/29912 + * trans-expr.c (gfc_trans_arrayfunc_assign): Return NULL if the + lhs and rhs character lengths are not constant and equal for + character array valued functions. + +2006-12-04 Tobias Burnus + + PR fortran/29962 + * expr.c (check_intrinsic_op): Allow noninteger exponents for F2003. + +2006-12-04 Paul Thomas + + PR fortran/29821 + * resolve.c (resolve_operator): Only return result of + gfc_simplify_expr if expression is constant. + +2006-12-04 Paul Thomas + + PR fortran/29916 + * resolve.c (resolve_symbol): Allow host-associated variables + the specification expression of an array-valued function. + * expr.c (check_restricted): Accept host-associated dummy + array indices. + +2006-12-03 Paul Thomas + + PR fortran/29642 + * trans-expr.c (gfc_conv_variable): A character expression with + the VALUE attribute needs an address expression; otherwise all + other expressions with this attribute must not be dereferenced. + (gfc_conv_function_call): Pass expressions with the VALUE + attribute by value, using gfc_conv_expr. + * symbol.c (check_conflict): Add strings for INTENT OUT, INOUT + and VALUE. Apply all the constraints associated with the VALUE + attribute. + (gfc_add_value): New function. + (gfc_copy_attr): Call it for VALUE attribute. + * decl.c (match_attr_spec): Include the VALUE attribute. + (gfc_match_value): New function. + * dump-parse-tree.c (gfc_show_attr): Include VALUE. + * gfortran.h : Add value to the symbol_attribute structure and + add a prototype for gfc_add_value + * module.c (mio_internal_string): Include AB_VALUE in enum. + (attr_bits): Provide the VALUE string for it. + (mio_symbol_attribute): Read or apply the VLUE attribute. + * trans-types.c (gfc_sym_type): Variables with the VLAUE + attribute are not passed by reference! + * resolve.c (was_declared): Add value to those that return 1. + (resolve_symbol): Value attribute requires dummy attribute. + * match.h : Add prototype for gfc_match_public. + * parse.c (decode_statement): Try to match a VALUE statement. + +2006-12-01 Thomas Koenig + + PR libfortran/29568 + * gfortran.h (gfc_option_t): Add max_subrecord_length. + (top level): Define MAX_SUBRECORD_LENGTH. + * lang.opt: Add option -fmax-subrecord-length=. + * trans-decl.c: Add new function set_max_subrecord_length. + (gfc_generate_function_code): If we are within the main + program and max_subrecord_length has been set, call + set_max_subrecord_length. + * options.c (gfc_init_options): Add defaults for + max_subrecord_lenght, convert and record_marker. + (gfc_handle_option): Add handling for + -fmax_subrecord_length. + * invoke.texi: Document the new default for + -frecord-marker=. + +2006-11-28 Paul Thomas + + PR fortran/29976 + * trans-expr.c (gfc_conv_missing_dummy): Remove build_int_const + and replace with cast to type of se->expr of integer_zero_node. + +2006-11-28 Paul Thomas + + PR fortran/20880 + * resolve.c (resolve_fl_procedure): Error if procedure is + ambiguous modified to require attr.referenced. + +2006-11-26 Francois-Xavier Coudert + + PR fortran/29892 + * trans-intrinsic.c (gfc_conv_intrinsic_bound): Use a locus in + the call to gfc_trans_runtime_check. + * trans-array.c (gfc_trans_array_bound_check): Try harder to find + the variable or function name for the runtime error message. + (gfc_trans_dummy_array_bias): Use a locus in the call to + gfc_trans_runtime_check + +2006-11-26 Andrew Pinski + + * trans-decl.c (gfc_build_intrinsic_function_decls): Mark the + pow functions as constant functions. + +2006-11-25 Andrew Pinski + + PR fortran/29982 + * trans-expr.c (gfc_conv_expr_reference): Strip off NOP_EXPRs. + +2006-11-25 Andrew Pinski + + PR fortran/29951 + * trans-intrinsic.c (gfc_conv_intrinsic_transfer): Change to + call memcpy instead of creating a VIEW_CONVERT_EXRP. + +2006-11-25 Francois-Xavier Coudert + + PR fortran/29711 + * error.c (error_print): Handle printf-style position specifiers, + of the form "%3$d". + +2006-11-24 Paul Thomas + + PR fortran/20880 + * parse.c (parse_interface): Error if procedure name is that of + encompassing scope. + * resolve.c (resolve_fl_procedure): Error if procedure is + ambiguous. + + PR fortran/29387 + * interface.c (compare_actual_formal): Add missing condition + that 'where' be present for error that asserts that actual + arguments be definable. + +2006-11-24 Francois-Xavier Coudert + + * resolve.c (resolve_actual_arglist): Remove the special case for + CHAR. + * intrinsic.c (add_functions): Remove the special case for CHAR. + +2006-11-22 Tobias Schlueter + + PR fortran/29441 + * intrinsic.c (gfc_intrinsic_func_interface): Always check if + intrinsic is allowed in initialization expression. + +2006-11-22 Paul Thomas + + PR fortran/25087 + * resolve.c (resolve_fl_procedure): Add an error if an external + automatic character length function does not have an explicit + interface. + +2006-11-22 Paul Thomas + + PR fortran/29652 + * interface.c (check_interface1): Use a local value, instead of + the dummy, as the inner iterator over interface symbols. + +2006-11-21 Paul Thomas + + PR fortran/29820 + * trans-array.c (gfc_get_derived_type): Once done, spread the + backend_decl to all identical derived types in all sibling + namespaces. + +2006-11-20 Tobias Burnus + + PR fortran/27546 + * primary.c (gfc_match_rvalue): Added IMPORT support. + +2006-11-20 Tobias Burnus + + * symbol.c (check_conflict): Add conflict between VOLATILE + attribute and program name. + +2006-11-20 Bernhard Fischer + + PR fortran/24783 + * resolve.c (resolve_variable): Get the implicit type from the + symbols namespace rather than the default namespace. Fix whitespace. + (resolve_formal_arglist, resolve_equivalence): Fix typo. + +2006-11-19 Erik Edelmann + + * resolve.c (resolve_ref): Check for ALLOCATABLEs to the right of + nonzero rank part references too. + +2006-11-19 Francois-Xavier Coudert + + * module.c (gfc_use_module): Uncomment the ISO_FORTRAN_ENV code. + Check that intrinsic and non-intrinsic modules don't conflict. + (use_iso_fortran_env_module): New function. + (create_int_parameter): New function. + * trans-types.c (gfc_init_kinds): Choose values for + gfc_numeric_storage_size and gfc_character_storage_size. + (gfc_numeric_storage_size, gfc_character_storage_size): New variables. + * resolve.c (resolve_symbol): Do no check intrinsic modules + against the list of intrinsic symbols. + * iso-fortran-env.def: New file. + * gfortran.h (gfc_numeric_storage_size, + gfc_character_storage_size): Add prototypes. + +2006-11-18 Francois-Xavier Coudert + + PR fortran/24285 + * io.c (check_format): Allow dollars everywhere in format, and + issue a warning. + +2006-11-17 Francois-Xavier Coudert + + * gfortran.h (gfc_add_intrinsic_modules_path, + gfc_open_intrinsic_module): New prototypes. + (gfc_add_include_path, gfc_open_included_file): Update prototypes. + * lang.opt: Add -fintrinsic-modules-path option. + * module.c (gfc_match_use): Match the Fortran 2003 form of + USE statement. + (gfc_use_module): Also handle intrinsic modules. + * scanner.c (gfc_directorylist): Add use_for_modules for field. + (intrinsic_modules_dirs): New static variable. + (add_path_to_list, gfc_add_intrinsic_modules_path): New functions. + (gfc_add_include_path): Use the new add_path_to_list helper + function. + (gfc_release_include_path): Free memory for intrinsic_modules_dirs. + (open_included_file, gfc_open_intrinsic_module): New functions. + (gfc_open_included_file): Use the new open_included_file + helper function. + * lang-specs.h: Use the new -fintrinsic-modules-path option. + * parse.c (decode_statement): Do not match the required space + after USE here. + * options.c (gfc_handle_option): Handle the new option. Use new + prototype for gfc_add_include_path. + (gfc_post_options): Use new prototype for gfc_add_include_path. + +2006-11-16 Francois-Xavier Coudert + + PR fortran/29391 + PR fortran/29489 + * simplify.c (simplify_bound): Fix the simplification of + LBOUND/UBOUND intrinsics. + * trans-intrinsic.c (simplify_bound): Fix the logic, and + remove an erroneous assert. + +2006-11-16 Francois-Xavier Coudert + + * trans-decl.c (gfc_get_symbol_decl): Fix formatting. + +2006-11-15 Brooks Moses + + * data.c: Remove trailing periods from error messages. + * decl.c: Likewise. + * expr.c: Likewise. + * io.c: Likewise. + * match.c: Likewise. + * module.c: Likewise. + * options.c: Likewise. + * resolve.c: Likewise. + * symbol.c: Likewise. + * trans-io.c: Likewise. + +2006-11-15 Brooks Moses + + * lang.opt: Rearrange entries back into ASCII order. + +2006-11-15 Tobias Burnus + + * parse.c (parse_contained): Fix indention + of one line. + +2006-11-15 Tobias Burnus + + PR fortran/27546 + * decl.c (gfc_match_import,variable_decl): + Add IMPORT support. + (gfc_match_kind_spec): Fix typo in gfc_error. + * gfortran.h (gfc_namespace, gfc_statement): + Add IMPORT support. + * parse.c (decode_statement,gfc_ascii_statement, + verify_st_order): Add IMPORT support. + * match.h: Add gfc_match_import. + * gfortran.texi: Add IMPORT to the supported + Fortran 2003 features. + +2006-11-15 Tobias Burnus + Francois-Xavier Coudert + + PR fortran/27588 + * trans-expr.c (gfc_conv_substring): Add bounds checking. + (gfc_conv_variable, gfc_conv_substring_expr): Pass more + arguments to gfc_conv_substring. + +2006-11-15 Tobias Burnus + + PR fortran/29806 + * parse.c (parse_contained): Check for empty contains statement. + +2006-11-15 Bud Davis + + PR fortran/28974 + * gfortran.h (gfc_expr): Add element which holds a splay-tree + for the exclusive purpose of quick access to a constructor by + offset. + * data.c (find_con_by_offset): Use the splay tree for the search. + (gfc_assign_data_value): Use the splay tree. + (gfc_assign_data_value_range): ditto. + * expr.c (gfc_get_expr): Initialize new element to null. + (gfc_free_expr): Delete splay tree when deleting gfc_expr. + +2006-11-14 Brooks Moses + + PR fortran/29702 + * error.c (show_loci): Move column-offset calculation to + show_locus. + (show_locus): Remove blank lines before "Included in" + lines, clean up code, calculate column-offsets, print + column number is error-header lines as appropriate. + (error_integer): (new function) Print integer to error + buffer. + (error_print): Use error_integer, avoid possible buffer + overflows from buggy error formats. + +2006-11-14 Brooks Moses + + * gfortran.h (GFC_MAX_LINE): Remove constant definition. + (gfc_option_t): Clarify comments. + * options.c: Set default line length limits to actual default + values, rather than flag values. + * scanner.c: Eliminate checking and handling of the + fixed/free_line_length flag values. + +2006-11-14 Brooks Moses + + * lang.opt: Remove -fno-backend option. + * gfortran.h (gfc_option_t): Remove flag_no_backend. + * options.c (gfc_init_options): Remove flag_no_backend. + (gfc_handle_option): Remove -fno-backend option handler. + * parse.c (gfc_parse_file): Remove references to + gfc_option.flag_no_backend. + +2006-11-14 Tobias Burnus + + * match.c (gfc_match_namelist): Add missing space to + error message. + +2006-11-14 Tobias Burnus + + PR fortran/29657 + * symbol.c (check_conflict): Add further conflicts. + +2006-11-13 Jakub Jelinek + + PR fortran/29759 + * fortran/scanner.c (skip_free_comments): Clear openmp_flag + before returning true. + +2006-11-12 Andrew Pinski + + PR fortran/26994 + * trans-expr.c (gfc_conv_expr_reference): Set TREE_STATIC on the + new CONST_DECL. + +2006-11-11 Tobias Schlüter + + * array.c: Add 2006 to copyright years. + * data.c: Same. + * interface.c: Same. + * misc.c: Same. + * trans-io.c: Same. + +2006-11-11 Richard Guenther + + * trans-intrinsic.c (enum rounding_mode): New enum. + (build_fix_expr, gfc_conv_intrinsic_aint, gfc_conv_intrinsic_mod, + gfc_conv_intrinsic_function): Use it instead of FIX_CEIL_EXPR, + FIX_FLOOR_EXPR, FIX_ROUND_EXPR and FIX_TRUNC_EXPR. + +2006-11-10 Brooks Moses + + * lang.opt (-fmodule-private): Remove option. + * gfortran.h (gfc_option_t): Remove module_access_private flag. + * options.c (gfc_init_options): Remove initialization for it. + (gfc_handle_option): Remove handling for -fmodule-private. + * module.c (gfc_check_access): Add comments, remove check for + gfc_option.flag_module_access_private. + +2006-11-10 Paul Thomas + + PR fortran/29758 + * check.c (gfc_check_reshape): Check that there are enough + elements in the source array as to be able to fill an array + defined by shape, when pad is absent. + +2006-11-10 Paul Thomas + + PR fortran/29315 + * trans-expr.c (is_aliased_array): Treat correctly the case where the + component is itself and array or array reference. + +2006-11-09 Brooks Moses + + * check.c (same_type_check): Typo fix in comment. + +2006-11-09 Paul Thomas + + PR fortran/29431 + * trans-array.c (get_array_ctor_strlen): If we fall through to + default, use a constant character length if it is available. + +2006-11-09 Paul Thomas + + PR fortran/29744 + * trans-types.c (gfc_get_derived_type): Ensure that the + proc_name namespace is not the same as the owner namespace and + that identical derived types in the same namespace share the + same backend_decl. + +2006-11-09 Paul Thomas + + PR fortran/29699 + * trans-array.c (structure_alloc_comps): Detect pointers to + arrays and use indirect reference to declaration. + * resolve.c (resolve_fl_variable): Tidy up condition. + (resolve_symbol): The same and only add initialization code if + the symbol is referenced. + * trans-decl.c (gfc_trans_deferred_vars): Call gfc_trans_ + deferred_array before gfc_trans_auto_array_allocation. + + PR fortran/21370 + * symbol.c (check_done): Remove. + (gfc_add_attribute): Remove reference to check_done and remove + the argument attr_intent. + (gfc_add_allocatable, gfc_add_dimension, gfc_add_external, + gfc_add_intrinsic, gfc_add_optional, gfc_add_pointer, + gfc_add_cray_pointer, gfc_add_cray_pointee, gfc_add_result, + gfc_add_target, gfc_add_in_common, gfc_add_elemental, + gfc_add_pure, gfc_add_recursive, gfc_add_procedure, + gfc_add_type): Remove references to check_done. + * decl.c (attr_decl1): Eliminate third argument in call to + gfc_add_attribute. + * gfortran.h : Change prototype for gfc_add_attribute. + +2006-11-08 Brooks Moses + + * invoke.texi: Added documentation for -fmax-errors option. + +2006-11-08 Brooks Moses + + * lang.opt: Add -fmax-errors= option. + * gfortran.h (gfc_option_t): Add max_errors element. + * options.c (gfc_init_options): Set max_errors default value + to 25. + (gfc_handle_options): Assign -fmax_errors value to + gfc_option.max_errors. + * error.c (gfc_increment_error_count): New function, which + also checks whether the error count exceeds max_errors. + (gfc_warning): Use it. + (gfc_warning_now): Use it. + (gfc_notify_std): Use it. + (gfc_error): Use it. + (gfc_error_now): Use it. + (gfc_error_check): Use it. + +2006-11-08 Brooks Moses + + * lang.opt: Remove non-working -qkind= option. + * gfortran.h (gfc_option_t): Remove q_kind member. + * options.c (gfc_init_options): Remove q_kind initialization. + (gfc_handle_option): Remove -qkind= option handling. + * primary.c: (match_real_constant): Remove 'Q' exponent. + +2006-11-08 Tobias Burnus + + * gfortran.texi: Add volatile and internal-file + namelist to Fortran 2003 status. + * intrinsic.texi: Correct CHMOD entry. + +2006-11-07 Paul Thomas + + PR fortran/29539 + PR fortran/29634 + * decl.c (variable_decl): Add test for presence of proc_name. + * error.c (gfc_error_flag_test): New function. + * gfortran.h : Prototype for gfc_error_flag_test. + +2006-11-07 Tobias Burnus + + PR fortran/29601 + * symbol.c (check_conflict, gfc_add_volatile): Add volatile support. + * decl.c (match_attr_spec, gfc_match_volatile): Add volatile support. + * gfortran.h (symbol_attribute): Add volatile_ to struct. + * resolve.c (was_declared): Add volatile support. + * trans-decl.c (gfc_finish_var_decl): Add volatile support. + * match.h: Declare gfc_match_volatile. + * parse.c (decode_statement): Recognize volatile. + * modules.c (ab_attribute, attr_bits, mio_symbol_attribute): + Add volatile support. + * dump-parse-tree.c (gfc_show_attr): Add volatile support. + +2006-11-06 Tobias Burnus + + * decl.c (match_attr_spec, gfc_match_enum): Unify gfc_notify_std + message for GFC_STD_F2003. + * array.c (gfc_match_array_constructor): Unify gfc_notify_std + message for GFC_STD_F2003. + * io.c (check_io_constraints): Unify gfc_notify_std message for + GFC_STD_F2003. + * resolve.c (resolve_actual_arglist): Unify gfc_notify_std message + for GFC_STD_F2003. + +2006-11-06 Brooks Moses + + * intrinsic.texi: Added documentation for FTELL, GETLOG, and + HOSTNM intrinsics. + +2006-11-06 Erik Edelmann + + PR fortran/29630 + PR fortran/29679 + * expr.c (find_array_section): Support vector subscripts. Don't + add sizes for dimen_type == DIMEN_ELEMENT to the shape array. + +2006-11-05 Bernhard Fischer + + PR fortran/21061 + * error.c (gfc_warning): If warnings_are_errors then treat + warnings as errors with respect to the exit code. + (gfc_notify_std): Ditto. + (gfc_warning_now): Ditto. + +2006-11-05 Francois-Xavier Coudert + Paul Thomas + + PR fortran/24518 + * trans-intrinsic.c (gfc_conv_intrinsic_mod): Use built_in fmod + for both MOD and MODULO, if it is available. + + PR fortran/29565 + * trans-expr.c (gfc_conv_aliased_arg): For an INTENT(OUT), save + the declarations from the unused loops by merging the block + scope for each; this ensures that the temporary is declared. + +2006-11-04 Brooks Moses + + * error.c (show_locus): Add trailing colon in error messages. + (error_print): Avoid leading space in error lines. + +2006-11-04 Francois-Xavier Coudert + + PR fortran/29713 + * expr.c (gfc_simplify_expr): Correct memory allocation. + +2006-11-02 Brooks Moses + + * error.c (show_locus): Remove "In file" from error messages. + +2006-10-31 Geoffrey Keating + + * trans-decl.c (gfc_generate_constructors): Update for removal + of get_file_function_name. + +2006-11-01 Bernhard Fischer + + PR fortran/29537 + * trans-common.c (gfc_trans_common): If the blank common is + in a procedure or program without a name then proc_name is null, so + use the locus of the common. + (gfc_sym_mangled_common_id): Fix whitespace. + * match.c (gfc_match_common): Emit warning about blank common in + block data. + +2006-10-31 Francois-Xavier Coudert + + PR fortran/29067 + * decl.c (gfc_set_constant_character_len): NULL-terminate the + character constant string. + * data.c (create_character_intializer): Likewise. + * expr.c (gfc_simplify_expr): NULL-terminate the substring + character constant. + * primary.c (match_hollerith_constant): NULL-terminate the + character constant string. + +2006-10-31 Paul Thomas + + PR fortran/29387 + * trans-intrinsic.c (gfc_conv_intrinsic_len): Rearrange to have + a specific case for EXPR_VARIABLE and, in default, build an ss + to call gfc_conv_expr_descriptor for array expressions.. + + PR fortran/29490 + * trans-expr.c (gfc_set_interface_mapping_bounds): In the case + that GFC_TYPE_ARRAY_LBOUND is not available, use descriptor + values for it and GFC_TYPE_ARRAY_UBOUND. + + PR fortran/29641 + * trans-types.c (gfc_get_derived_type): If the derived type + namespace has neither a parent nor a proc_name, set NULL for + the search namespace. + +2006-10-30 Tobias Burnus + + PR fortran/29452 + * io.c (check_io_constraints): Fix keyword string comparison. + +2006-10-30 Andrew Pinski + + PR fortran/29410 + * trans-intrinsic.c (gfc_conv_intrinsic_array_transfer): + Change over to create VIEW_CONVERT_EXPR instead of using an + ADDR_EXPR, a cast and then an indirect reference + +2006-10-29 Francois-Xavier Coudert + + * trans-intrinsic.c (gfc_conv_intrinsic_loc): Make LOC return a + signed integer node. + +2006-10-29 Jerry DeLisle + + PR fortran/17741 + * decl.c (get_proc_name): Bump current namespace refs count. + +2006-10-29 Jakub Jelinek + + PR fortran/29629 + * trans-openmp.c (gfc_trans_omp_array_reduction): Set attr.flavor + of init_val_sym and outer_sym to FL_VARIABLE. + +2006-10-29 Kazu Hirata + + * intrinsic.texi: Fix a typo. + +2006-10-27 Steven G. Kargl + + * gfortran.h: Remove GFC_MPFR_TOO_OLD. + * arith.c (arctangent2): Remove function + (gfc_check_real_range): Remove subnormal kludge. + * arith.h: Remove arctangent2 prototype. + * simplify.c: (gfc_simplify_atan2): Remove use of arctangent2. + (gfc_simplify_exponent, gfc_simplify_log, gfc_simplify_nearest, + gfc_simplify_rrspacing, gfc_simplify_spacing): Remove mpfr kludges. + +2006-10-28 Tobias Burnus + + PR fortran/28224 + * io.c (check_io_constraints): Allow namelists + for internal files for Fortran 2003. + +2006-10-27 Jerry DeLisle + + PR fortran/27954 + * decl.c (gfc_free_data_all): New function to free all data structures + after errors in DATA statements and declarations. + (top_var_list): Use new function.(top_val_list): Use new function. + (gfc_match_data_decl): Use new function. + * misc.c (gfc_typename): Fixed incorrect function name in error text. + +2006-10-24 Erik Edelmann + + PR fortran/29393 + * expr.c (simplify_parameter_variable): Keep rank of original + expression. + +2006-10-23 Rafael Ãvila de Espíndola + + * Make-lang.in (f951$(exeext)): Depend on and link with attribs.o. + * trans.h (builtin_function): Rename to gfc_builtin_function. + Change the signature. + * 95-lang.c (LANG_HOOKS_BUILTIN_FUNCTION): Define as + gfc_builtin_function. + (builtin_function): Rename to gfc_builtin_function. Move common + code to builtin_function. + (gfc_define_builtin): Replace calls to builtin_function with + gfc_define_builtin. + +2006-10-22 Francois-Xavier Coudert + + PR fortran/26025 + * lang.opt: Add -fexternal-blas and -fblas-matmul-limit options. + * options.c (gfc_init_options): Initialize new flags. + (gfc_handle_option): Handle new flags. + * gfortran.h (gfc_option): Add flag_external_blas and + blas_matmul_limit flags. + * trans-expr.c (gfc_conv_function_call): Use new argument + append_args, appending it at the end of the argument list + built for a function call. + * trans-stmt.c (gfc_trans_call): Use NULL_TREE for the new + append_args argument to gfc_trans_call. + * trans.h (gfc_conv_function_call): Update prototype. + * trans-decl.c (gfc_build_intrinsic_function_decls): Add + prototypes for BLAS ?gemm routines. + * trans-intrinsic.c (gfc_conv_intrinsic_funcall): Generate the + extra arguments given to the library matmul function, and give + them to gfc_conv_function_call. + * invoke.texi: Add documentation for -fexternal-blas and + -fblas-matmul-limit. + +2006-10-21 Kaveh R. Ghazi + + * Make-lang.in (F95_LIBS): Delete. + * f951$(exeext): Use $(LIBS) instead of $(F95_LIBS). + * config-lang.in (need_gmp): Delete. + +2006-10-19 Brooks Moses + + * invoke.texi: Fixed "denormal" typo. + +2006-10-19 Paul Thomas + + PR fortran/29216 + PR fortran/29314 + * gfortran.h : Add EXEC_INIT_ASSIGN. + * dump-parse-tree.c (gfc_show_code_node): The same. + * trans-openmp.c (gfc_trans_omp_array_reduction): Set new + argument for gfc_trans_assignment to false. + * trans-stmt.c (gfc_trans_forall_1): The same. + * trans-expr.c (gfc_conv_function_call, gfc_trans_assign, + gfc_trans_arrayfunc_assign, gfc_trans_assignment): The + same. In the latter function, use the new flag to stop + the checking of the lhs for deallocation. + (gfc_trans_init_assign): New function. + * trans-stmt.h : Add prototype for gfc_trans_init_assign. + * trans.c (gfc_trans_code): Implement EXEC_INIT_ASSIGN. + * trans.h : Add new boolean argument to the prototype of + gfc_trans_assignment. + * resolve.c (resolve_allocate_exp): Replace EXEC_ASSIGN by + EXEC_INIT_ASSIGN. + (resolve_code): EXEC_INIT_ASSIGN does not need resolution. + (apply_default_init): New function. + (resolve_symbol): Call it for derived types that become + defined but which do not already have an initialization + expression.. + * st.c (gfc_free_statement): Include EXEC_INIT_ASSIGN. + +2006-10-16 Tobias Burnus + + * primary.c: Revert 'significand'-to-'significant' comment change. + * invoke.texi (Warning Options): Minor cleanup for + -Wimplicit-interface. + +2006-10-17 Paul Thomas + + PR fortran/29451 + * trans-array.c (gfc_trans_array_bounds): Test for and set + negative stride of a non-constant bound array to zero. + + PR fortran/29392 + * data.c (create_character_intializer): Copy and simplify + the expressions for the start and end of a sub-string + reference. + +2006-10-16 Kaz Kojima + + * io.c (gfc_match_close): Ensure that status is terminated by + a NULL element. + +2006-10-16 Tobias Burnus + + * trans-stmt.c: Fix a typo + * invoke.texi: Fix typos + * resolve.c: Fix a comment typo + * trans-decl.c: Fix a comment typo + * primary.c: Fix a comment typo + +2006-10-15 Steven G. Kargl + + PR fortran/29403 + * io.c (match_io): Check for a default-char-expr for PRINT format. + +2006-10-15 Bernhard Fischer + + PR fortran/24767 + * lang.opt (Wunused-labels): Remove. + * options.c: Remove references to gfc_option.warn_unused_labels. + * gfortran.h: Remove variable warn_unused_labels. + * resolve.c (warn_unused_fortran_label) : Use warn_unused_label + instead of gfc_option.warn_unused_labels. + * invoke.texi: Remove documentation of -Wunused-labels. + +2006-10-14 Tobias Burnus + + * gfortran.texi: Add link to GFortran apps + * intrinsic.texi: Updated documentation of ACCESS and CHMOD + +2006-10-14 Jerry DeLisle + + PR fortran/19261 + * scanner.c (load_line): Add checks for illegal use of '&' and issue + warnings. Issue errors with -pedantic. + +2006-10-14 Paul Thomas + + PR fortran/29371 + * trans-expr.c (gfc_trans_pointer_assignment): Add the expression + for the assignment of null to the data field to se->pre, rather + than block. + +2006-10-14 Kazu Hirata + + * intrinsic.texi: Fix typos. + * trans-array.c: Fix a comment typo. + +2006-10-13 Brooks Moses + + * intrinsic.texi (STAT): Reverted a format in example code to + octal; noted this in accompanying string. + +2006-10-13 Paul Thomas + + PR fortran/29373 + * decl.c (get_proc_name, gfc_match_function_decl): Add + attr.implicit_type to conditions that throw error for + existing explicit interface and that allow new type- + spec to be applied. + + PR fortran/29407 + * resolve.c (resolve_fl_namelist): Do not check for + namelist/procedure conflict, if the symbol corresponds + to a good local variable declaration. + + PR fortran/27701 + * decl.c (get_proc_name): Replace the detection of a declared + procedure by the presence of a formal argument list by the + attributes of the symbol and the presence of an explicit + interface. + + PR fortran/29232 + * resolve.c (resolve_fl_variable): See if the host association + of a derived type is blocked by the presence of another type I + object in the current namespace. + + PR fortran/29364 + * resolve.c (resolve_fl_derived): Check for the presence of + the derived type for a derived type component. + + PR fortran/24398 + * module.c (gfc_use_module): Check that the first words in a + module file are 'GFORTRAN module'. + + PR fortran/29422 + * resolve.c (resolve_transfer): Test functions for suitability + for IO, as well as variables. + + PR fortran/29428 + * trans-expr.c (gfc_trans_scalar_assign): Remove nullify of + rhs expression. + +2006-10-13 Francois-Xavier Coudert + + PR fortran/29391 + * trans-intrinsic.c (gfc_conv_intrinsic_bound): Generate correct + code for LBOUND and UBOUND intrinsics. + +2006-10-13 Francois-Xavier Coudert + + PR fortran/21435 + * io.c (compare_to_allowed_values): New function. + (gfc_match_open): Add checks for constant values of specifiers. + (gfc_match_close): Add checks for constant values of the STATUS + specifier. + +2006-10-12 Brooks Moses + + * intrinsic.texi (STAT): Fixed a format typo in sample code. + +2006-10-12 Brooks Moses + + * intrinsic.texi (STAT): Shortened lines in sample code. + +2006-10-11 Tobias Schlueter + + * gfortran.h (gfc_show_actual_arglist, gfc_show_array_ref, + gfc_show_array_spec, gfc_show_attr, gfc_show_code, + gfc_show_components, gfc_show_constructor, gfc_show_equiv, + gfc_show_expr, gfc_show_namelist, gfc_show_ref, gfc_show_symbol, + gfc_show_typespec): Add prototypes. + * dump-parse-tree.c (gfc_show_actual_arglist, gfc_show_array_ref, + gfc_show_array_spec, gfc_show_attr, gfc_show_code, + gfc_show_components, gfc_show_constructor, gfc_show_equiv, + gfc_show_expr, gfc_show_namelist, gfc_show_ref, gfc_show_symbol, + gfc_show_typespec): Remove 'static' from declaration. + +2006-10-10 Brooks Moses + + * invoke.texi, gfortran.texi: Corrected erronous dashes. + +2006-10-10 Brooks Moses + + * Make-lang.in: Added "fortran.pdf", "gfortran.pdf" target + support. + +2006-10-10 Daniel Franke + + * intrinsic.texi: added documentation for FSTAT, GETARG,GET_COMMAND, + GET_COMMAND_ARGUMENT, GETENV, GET_ENVIRONMENT_VARIABLE, IAND, IARGC, + LSTAT and STAT, removed the reference to PR19292 from ACCESS, CHMOD, + GMTIME, LSHIFT, LTIME, RSHIFT. + +2006-10-10 Brooks Moses + + * gfortran.texi (Standards): Update to current status. + +2006-10-09 Brooks Moses + + * Make-lang.in: Added intrinsic.texi to GFORTRAN_TEXI + dependences. + +2006-10-09 Brooks Moses + + * intrinsic.texi (MOVE_ALLOC): changed "Options" to "Standards". + +2006-10-09 Steven G. Kargl + + * gfortran.h: Define GFC_MPFR_TOO_OLD via mpfr version info. + * arith.c (arctangent, gfc_check_real_range): Use it. + * simplify.c (gfc_simplify_atan2, gfc_simplify_exponent, + gfc_simplify_log, gfc_simplify_nearest): Use it. + + PR fortran/15441 + PR fortran/29312 + * iresolve.c (gfc_resolve_rrspacing): Give rrspacing library + routine hidden precision argument. + (gfc_resolve_spacing): Give spacing library routine hidden + precision, emin - 1, and tiny(x) arguments. + * simplify.c (gfc_simplify_nearest): Remove explicit subnormalization. + (gfc_simplify_rrspacing): Implement formula from Fortran 95 standard. + (gfc_simplify_spacing): Implement formula from Fortran 2003 standard. + * trans-intrinsic.c (gfc_intrinsic_map_t) Declare rrspacing and + spacing via LIBF_FUNCTION + (prepare_arg_info, call_builtin_clz, gfc_conv_intrinsic_spacing, + gfc_conv_intrinsic_rrspacing): Remove functions. + (gfc_conv_intrinsic_function): Remove calls to + gfc_conv_intrinsic_spacing and gfc_conv_intrinsic_rrspacing. + * f95-lang.c (gfc_init_builtin_functions): Remove __builtin_clz, + __builtin_clzl and __builtin_clzll + +2006-10-09 Richard Henderson + + Revert emutls patch. + +2006-10-09 Francois-Xavier Coudert + + * intrinsic.c (add_sym_0s, add_sym_1s, add_sym_2s, add_sym_3s, + add_sym_4s, add_sym_5s, add_functions): Use macro ACTUAL_NO, + ACTUAL_YES, NOT_ELEMENTAL and ELEMENTAL instead of constants + 0 and 1 as second and third arguments to add_sym* functions. + +2006-10-08 Erik Edelmann + Paul Thomas + + PR fortran/20541 + * interface.c (gfc_compare_derived_types): Add comparison of + the allocatable field. + * intrinsic.c (add_subroutines): Add MOVE_ALLOC. + * trans-expr.c (gfc_conv_aliased_arg, gfc_trans_subarray_assign, + gfc_trans_subcomponent_assign, gfc_conv_string_parameter, + gfc_trans_scalar_assign): Add extra arguments l_is_temp + and r_is_var to references to latter function. + (gfc_conv_function_call): Add enum for types of argument and + an associated variable parm_kind. Deallocate components of + INTENT(OUT) and non-variable arrays. + (gfc_trans_subcomponent_assign): Add block to assign arrays + to allocatable components. + (gfc_trans_scalar_assign): Add block to handle assignments of + derived types with allocatable components, using the above new + arguments to control allocation/deallocation of memory and the + copying of allocated arrays. + * trans-array.c (gfc_array_allocate): Remove old identification + of pointer and replace with that of an allocatable array. Add + nullify of structures with allocatable components. + (gfc_conv_array_initializer): Treat EXPR_NULL. + (gfc_conv_array_parameter): Deallocate allocatable components + of non-variable structures. + (gfc_trans_dealloc_allocated): Use second argument of library + deallocate to inhibit, without error, freeing NULL pointers. + (get_full_array_size): New function to return the size of a + full array. + (gfc_duplicate_allocatable): New function to allocate and copy + allocated data. + (structure_alloc_comps): New recursive function to deallocate, + nullify or copy allocatable components. + (gfc_nullify_alloc_comp, gfc_deallocate_alloc_comp, + gfc_copy_alloc_comp): New interface functions to call previous. + (gfc_trans_deferred_array): Add the code to nullify allocatable + components, when entering scope, and to deallocate them on + leaving. Do not call gfc_trans_static_array_pointer and return + for structures with allocatable components and default + initializers. + * symbol.c (gfc_set_component_attr): Set allocatable field. + (gfc_get_component_attr): Set the allocatable attribute. + * intrinsic.h : Prototype for gfc_check_move_alloc. + * decl.c (build_struct): Apply TR15581 constraints for + allocatable components. + (variable_decl): Default initializer is always NULL for + allocatable components. + (match_attr_spec): Allow, or not, allocatable components, + according to the standard in force. + * trans-array.h : Prototypes for gfc_nullify_alloc_comp, + gfc_deallocate_alloc_comp, gfc_copy_alloc_comp and + gfc_duplicate_allocatable. + * gfortran.texi : Add mention of TR15581 extensions. + * gfortran.h : Add attribute alloc_comp, add + gfc_components field allocatable and add the prototype + for gfc_expr_to_initialize. + * trans-stmt.c (generate_loop_for_temp_to_lhs, + generate_loop_for_rhs_to_temp, gfc_trans_where_assign, + gfc_trans_where_3): Add extra arguments to calls to + gfc_trans_scalar_assign and set appropriately. + (gfc_trans_allocate): Nullify allocatable components. + (gfc_trans_deallocate): Deallocate to ultimate allocatable + components but stop at ultimate pointer components. + * module.c (mio_symbol_attribute, mio_symbol_attribute, + mio_component): Add module support for allocatable + components. + * trans-types.c (gfc_get_derived_type): Treat allocatable + components. + * trans.h : Add two boolean arguments to + gfc_trans_scalar_assign. + * resolve.c (resolve_structure_cons): Check conformance of + constructor element and the component. + (resolve_allocate_expr): Add expression to nullify the + constructor expression for allocatable components. + (resolve_transfer): Inhibit I/O of derived types with + allocatable components. + (resolve_fl_derived): Skip check of bounds of allocatable + components. + * trans-decl.c (gfc_get_symbol_decl): Add derived types + with allocatable components to deferred variable. + (gfc_trans_deferred_vars): Make calls for derived types + with allocatable components to gfc_trans_deferred_array. + (gfc_generate_function_code): Nullify allocatable + component function result on entry. + * parse.c (parse_derived): Set symbol attr.allocatable if + allocatable components are present. + * check.c (gfc_check_allocated): Enforce attr.allocatable + for intrinsic arguments. + (gfc_check_move_alloc): Check arguments of move_alloc. + * primary.c (gfc_variable_attr): Set allocatable attribute. + * intrinsic.texi : Add index entry and section for + for move_alloc. + +2006-10-08 Paul Thomas + + PR fortran/29115 + * resolve.c (resolve_structure_cons): It is an error if the + pointer component elements of a derived type constructor are + not pointer or target. + + + PR fortran/29211 + * trans-stmt.c (generate_loop_for_temp_to_lhs, + generate_loop_for_rhs_to_temp): Provide a string length for + the temporary by copying that of the other side of the scalar + assignment. + +2006-10-08 Tobias Burnus + + PR fortran/28585 + * intrinsic.c (add_functions): Add new_line Fortran 2003 intrinsic. + * intrinsic.h: Add gfc_simplify_new_line and gfc_check_new_line + prototypes. + * check.c (gfc_check_new_line): New function. + * simplify.c (gfc_simplify_new_line): New function. + * intrinsic.texi: Document new_line intrinsic. + +2006-10-07 Francois-Xavier Coudert + + PR fortran/16580 + PR fortran/29288 + * gcc/fortran/intrinsic.c (add_sym): Define the actual_ok when a + gfc_intrinsic_sym structure is filled. + (gfc_intrinsic_actual_ok): New function. + (add_sym_0s, add_sym_1s, add_sym_2s, add_sym_3s, add_sym_4s, + add_sym_5s): Intrinsic subroutines are not allowed as actual + arguments, so we remove argument actual_ok. + (add_functions): Correct the values for actual_ok of all intrinsics. + Add comments for gfc_check_access_func and gfc_resolve_index_func. + (add_subroutines): Remove the actual_ok argument, which was never used. + * gcc/fortran/intrinsic.h (gfc_intrinsic_actual_ok): New prototype. + * gcc/fortran/gfortran.h (gfc_resolve_index_func): New prototype. + * gcc/fortran/resolve.c (resolve_actual_arglist): Check whether + an intrinsic used as an argument list is allowed there. + * gcc/fortran/iresolve.c (gfc_resolve_index_func): New function. + (gfc_resolve_len): Change intrinsic function name to agree with + libgfortran. + * gcc/fortran/trans-decl.c (gfc_get_extern_function_decl): Add + new case, because some specific intrinsics take 3 arguments. + * gcc/fortran/intrinsic.texi: DIMAG is a GNU extension. + +2006-10-06 Jakub Jelinek + + PR fortran/28415 + * trans-decl.c (gfc_finish_var_decl): With -fno-automatic, don't + make artificial variables or pointer to variable automatic array + TREE_STATIC. + + * scanner.c (skip_free_comments): Return bool instead of void. + (gfc_next_char_literal): Don't return ' ' if & is missing after + !$omp or !$. Use skip_{free,fixed}_comments directly instead + of gfc_skip_comments. + +2006-10-04 Brooks Moses + + * gfortran.texi: (Current Status): update and rewrite to reflect + actual status more accurately. + +2006-10-04 Brooks Moses + + * gfortran.texi: Consistently refer to the compiler as "GNU + Fortran". + * intrinsic.texi: Ditto. + * invoke.texi: Ditto. + +2006-10-04 Richard Henderson + Jakub Jelinek + + * f95-lang.c (gfc_init_builtin_functions): Add __emutls_get_address + and __emutls_register_common. + * openmp.c (gfc_match_omp_threadprivate): Don't error if !have_tls. + * trans-common.c (build_common_decl): Don't check have_tls. + * trans-decl.c (gfc_finish_var_decl): Likewise. + * types.def (BT_WORD, BT_FN_PTR_PTR): New. + (BT_FN_VOID_PTR_WORD_WORD_PTR): New. + +2006-10-04 Paul Thomas + + PR fortran/29343 + * resolve.c (resolve_allocate_expr): Exclude derived types from + search for dependences between allocated variables and the + specification expressions for other allocations in the same + statement. + +2006-10-04 Paul Thomas + + PR fortran/29098 + * resolve.c (resolve_structure_cons): Do not return FAILURE if + component expression is NULL. + +2006-10-03 Paul Thomas + + PR fortran/20779 + PR fortran/20891 + * resolve.c (find_sym_in_expr): New function that returns true + if a symbol is found in an expression. + (resolve_allocate_expr): Check whether the STAT variable is + itself allocated in the same statement. Use the call above to + check whether any of the allocated arrays are used in array + specifications in the same statement. + +2006-10-03 Steven G. Kargl + + * arith.c (gfc_check_real_range): Use correct exponent range for + subnormal numbers. + +2006-10-03 Paul Thomas + + PR fortran/29284 + PR fortran/29321 + PR fortran/29322 + * trans-expr.c (gfc_conv_function_call): Check the expression + and the formal symbol are present when testing the actual + argument. + + PR fortran/25091 + PR fortran/25092 + * resolve.c (resolve_entries): It is an error if the entries + of an array-valued function do not have the same shape. + +2006-10-03 Francois-Xavier Coudert + + PR middle-end/27478 + * trans-decl.c (gfc_get_fake_result_decl): Mark var as + TREE_ADDRESSABLE. + +2006-10-02 Jerry DeLisle + + PR fortran/19262 + * gfortran.h (gfc_option_t): Add max_continue_fixed and + max_continue_free. + * options.c (gfc_init_options): Initialize fixed form and free form + consecutive continuation line limits. + * scanner.c (gfc_scanner_init_1): Initialize continue_line + and continue_count. (gfc_next_char_literal): Count the number of + continuation lines in the current statement and warn if limit + is exceeded. + +2006-10-02 Jerry DeLisle + + PR fortran/19260 + * scanner.c (gfc_next_char_literal): Add check for missing '&' + and warn if in_string, otherwise return ' '. + +2006-10-02 Francois-Xavier Coudert + + PR fortran/29210 + * primary.c (match_sym_complex_part): Named constants as real or + imaginary part of complex a named constant are only allowed in + Fortran 2003. + +2006-10-01 Brooks Moses + + * gfortran.texi: Corrected references to MALLOC intrinsic. + * invoke.texi: Minor cleanup and clarification to the Dialect + Options section. + +2006-09-30 Brooks Moses + + * invoke.texi: Add mention of BOZ constants and integer + overflow to -fno-range-check. + * gfortran.texi: Add mention of -fno-range-check to + section on BOZ contants. + +2006-09-30 Bernhard Fischer + + * resolve.c: Fix commentary typo. Fix whitespace. + +2006-09-28 Steven G. Kargl + + fortran/29147 + * arith.c (gfc_check_integer_range): Disable range checking via + -fno-range-check. + +2006-09-28 Steven G. Kargl + + * arith.c: Change conditional test for inclusion of arctangent(). + (gfc_check_real_range): Change conditional test for use of + mpfr_subnormalize. + * simplify.c (gfc_simplify_atan2): Fix conditional for use of + mpfr_atan2() instead of arctangent(). + (gfc_simplify_exponent): Fix conditional for use of mpfr_get_exp(). + (gfc_simplify_log): Fix conditional for use of mpfr_atan2() instead + of arctangent(). + (gfc_simplify_nearest): Fix conditional for use of mpfr_nextafter(). + +2006-09-27 Steven G. Kargl + + * arith.c: Conditionally include arctangent2(). + (gfc_check_real_range): Use mpfr_subnormalize in preference to local + hack. + * trans-intrinsic.c (gfc_get_intrinsic_lib_fndecl): Append + l for long double functions. + * simplify.c: Wrap Copyright to new line. + (gfc_simplify_atan2): Use mpfr_atan2 in preference to arctangent2(). + (gfc_simplify_log): Ditto. + + + PR fortran/28276 + * simplify.c (gfc_simplify_exponent): Use mpfr_get_exp in + preference to broken local hack. + + PR fortran/27021 + * simplify.c (gfc_simplify_nearest): Use mpfr_nexttoward and + mpfr_subnormalize to handle numbers near zero in preference to broken + local hack. + +2006-09-26 Jakub Jelinek + + PR fortran/29097 + * scanner.c (include_line): Handle conditional include. + +2006-09-25 Tobias Schlüter + + PR fortran/21203 + * error.c (show_loci): No need to risk an ICE to output a + slightly nicer error message. + +2006-09-19 Paul Thomas + Steven Bosscher + + PR fortran/29101 + * trans-stmt.c (gfc_trans_character_select): Store the label + from select_string and then clean up any temporaries from the + conversion of the select expression, before branching to the + selected case. + +2006-09-18 Paul Thomas + + PR fortran/28526 + * primary.c (match_variable): If the compiler is in a module + specification block, an interface block or a contains section, + reset host_flag to force the changed symbols mechanism. + + PR fortran/29101 + * trans-stmt.c (gfc_trans_character_select): Add the post block + for the expression to the main block, after the call to + select_string and the last label. + +2006-09-18 Paul Thomas + + PR fortran/29060 + * iresolve.c (resolve_spread): Build shape for result if the + source shape is available and dim and ncopies are constants. + +2006-09-18 Tobias Schlüter + + PR fortran/28817 + PR fortran/21918 + * trans-decl.c (generate_local_decl): Change from 'warning' to + 'gfc_warning' to have line numbers correctly reported. + +2006-09-15 Paul Thomas + + PR fortran/29051 + * decl.c (match_old_style_init): Set the 'where' field of the + gfc_data structure 'newdata'. + + * match.c (match_case_eos): Add a comprehensible error message. + +2006-09-13 Wolfgang Gellerich + + * trans-expr.c (gfc_add_interface_mapping): For characters, dereference + pointer if necessary and then perform the cast. + +2006-09-11 Steven G. Kargl + + * intrinsic.c: Update Copyright date. + * intrinsic.h: Ditto. + +2006-09-11 Paul Thomas + + PR fortran/28890 + * trans-expr.c (gfc_conv_function_call): Obtain the string length + of a dummy character(*) function from the symbol if it is not + already translated. For a call to a character(*) function, use + the passed, hidden string length argument, which is available + from the backend_decl of the formal argument. + * resolve.c (resolve_function): It is an error if a function call + to a character(*) function is other than a dummy procedure or + an intrinsic. + +2006-09-10 Paul Thomas + + PR fortran/28959 + * trans-types.c (gfc_get_derived_type): Use the parent namespace of + the procedure if the type's own namespace does not have a parent. + +2006-09-10 Paul Thomas + + PR fortran/28923 + * expr.c (find_array_section): Only use the array lower and upper + bounds for the start and end of the sections, where the expr is + NULL. + +2006-09-10 Paul Thomas + + PR fortran/28914 + * trans-array.c (gfc_trans_array_constructor_value): Create a temporary + loop variable to hold the current loop variable in case it is modified + by the array constructor. + +2006-09-07 Steven G. Kargl + + * gfortran.h (gfc_integer_info): Eliminate max_int. + * arith.c (gfc_arith_init_1): Remove initialization of max_int. + (gfc_arith_done_1): Remove clearing of max_int. + (gfc_check_integer_range): Fix range chekcing of overflow. + * simplify.c (gfc_simplify_not): Construct mask that was max_int. + +2006-09-05 Paul Thomas + + PR fortran/28908 + * gfortran.h : Restore the gfc_dt_list structure and reference + to it in gfc_namespace. + * resolve.c (resolve_fl_derived): Restore the building of the + list of derived types for the current namespace. Modify the + restored code so that a check is made to see if the symbol is + already in the list. + (resolve_fntype): Make sure that the specification block + version of the derived type is used for a module function that + returns that type. + * symbol.c (gfc_free_dt_list): Restore. + (gfc_free_namespace): Restore call to previous. + * trans-types.c (copy_dt_decls_ifequal): Restore. + (gfc_get_derived_type): Restore all the paraphenalia for + association of derived types, including calls to previous. + Modify the restored code such that all derived types are built + if their symbols are found in the parent namespace; not just + non-module types. Add backend_decls to like derived types in + sibling namespaces, as well as that of the derived type. + +2006-08-30 Kazu Hirata + + * match.c: Fix a comment typo. + +2006-08-30 Paul Thomas + + PR fortran/28885 + * trans-expr.c (gfc_conv_aliased_arg): Ensure that the temp + declaration is retained for INTENT(OUT) arguments. + + PR fortran/28873 + PR fortran/20067 + * resolve.c (resolve_generic_f): Make error message more + comprehensible. + (resolve_generic_s): Restructure search for specific procedures + to be similar to resolve_generic_f and change to similar error + message. Ensure that symbol reference is refreshed, in case + the search produces a NULL. + (resolve_specific_s): Restructure search, as above and as + resolve_specific_f. Ensure that symbol reference is refreshed, + in case the search produces a NULL. + + PR fortran/25077 + PR fortran/25102 + * interface.c (check_operator_interface): Throw error if the + interface assignment tries to change intrinsic type assigments + or has less than two arguments. Also, it is an error if an + interface operator contains an alternate return. + + PR fortran/24866 + * parse.c (gfc_fixup_sibling_symbols): Do not modify the symbol + if it is a dummy in the contained namespace. + +2006-08-29 Steven G. Kargl + + PR fortran/28866 + * match.c: Wrap copyright. + (gfc_match_assignment): Return MATCH_NO for failed lvalue. Remove + gotos. Move error handling of FL_PARAMETER to ... + * gfc_match_if: Deal with MATCH_NO from above. + * primary.c: Wrap copyright. + (match_variable): ... here. Improve error messages. + +2006-08-29 Paul Thomas + + PR fortran/28788 + * symbol.c (gfc_use_derived): Never eliminate the symbol, + following reassociation of use associated derived types. + +2006-08-26 Steven G. Kargl + + * arith.h: Update Copyright dates. Fix whitespace. + * arith.c: Update Copyright dates. Fix whitespace. Fix comments. + (gfc_arith_done_1): Clean up pedantic_min_int and subnormal. + +2006-08-26 Tobias Burnus + + * gfortran.texi: Note variable initialization causes SAVE attribute. + * intrinsic.texi: Clarify support for KIND=16 and KIND=10. + Mention -std=f2003. Cross reference INQUIRE from ACCESS intrinsic. + Add missing ) in ACOS. + +2006-08-26 Daniel Franke + + * intrinsic.texi: Update Copyright date. Added documentation + for ACOSH, AND, ASINH, ATANH, CHDIR, FGET, FGETC, FPUT, FPUTC, + GETCWD, OR and XOR intrinsics, removed inadvertently introduced + doc-stubs for EQV and NEQV, corrected some typographical errors. + +2006-08-24 Daniel Franke , + Brooks Moses + + * intrinsic.texi: Added doc-stubs for undocumented intrinsics, + added a "See Also" section, renamed the "Options" section to + "Standard", improved the index, and made numerous minor + typo corrections and grammatical fixes. + +2006-08-24 Paul Thomas + + PR fortran/28788 + * symbol.c (shift_types): Shift the derived type references in + formal namespaces. + (gfc_use_derived): Return if the derived type symbol is already + in another namspace. Add searches for the derived type in + sibling namespaces. + + PR fortran/28771 + * decl.c (add_init_expr_to_sym): Restore the original but + restricted to parameter arrays to fix a regression. + +2006-08-23 Steven G. Kargl + + * gfortran.texi: Fix last commit where a "no" was deleted and + a grammatical error was introduced. + +2006-08-23 Steven G. Kargl + + * gfortran.texi: Spell check. Add a few contributors to + Chapter 9. Expand the description of BOZ constant handling. + +2006-08-20 Janne Blomqvist + + PR fortran/25828 + * gfortran.texi: Mention STREAM I/O among supported F2003 + features. + +2006-08-20 Paul Thomas + + PR fortran/28601 + PR fortran/28630 + * gfortran.h : Eliminate gfc_dt_list structure and reference + to it in gfc_namespace. + * resolve.c (resolve_fl_derived): Remove the building of the + list of derived types for the current namespace. + * symbol.c (find_renamed_type): New function to find renamed + derived types by symbol name rather than symtree name. + (gfc_use_derived): Search parent namespace for identical + derived type and use it, even if local version is complete, + except in interface bodies. Ensure that renamed derived types + are found by call to find_renamed_type. Recurse for derived + type components. + (gfc_free_dt_list): Remove. + (gfc_free_namespace): Remove call to previous. + * trans-types.c (copy_dt_decls_ifequal): Remove. + (gfc_get_derived_type): Remove all the paraphenalia for + association of derived types, including calls to previous. + * match.c (gfc_match_allocate): Call gfc_use_derived to + associate any derived types that are being allocated. + + PR fortran/20886 + * resolve.c (resolve_actual_arglist): The passing of + a generic procedure name as an actual argument is an + error. + + PR fortran/28735 + * resolve.c (resolve_variable): Check for a symtree before + resolving references. + + PR fortran/28762 + * primary.c (match_variable): Return MATCH_NO if the symbol + is that of the program. + + PR fortran/28425 + * trans-expr.c (gfc_trans_subcomponent_assign): Translate + derived type component expressions other than another derived + type constructor. + + PR fortran/28496 + * expr.c (find_array_section): Correct errors in + the handling of a missing start value for the + index triplet in an array reference. + + PR fortran/18111 + * trans-decl.c (gfc_build_dummy_array_decl): Before resetting + reference to backend_decl, set it DECL_ARTIFICIAL. + (gfc_get_symbol_decl): Likewise for original dummy decl, when + a copy is made of an array. + (create_function_arglist): Likewise for the _entry paramter + in entry_masters. + (build_entry_thunks): Likewise for dummies in entry thunks. + + PR fortran/28600 + * trans-decl.c (gfc_get_symbol_decl): Ensure that the + DECL_CONTEXT of the length of a character dummy is the + same as that of the symbol declaration. + + PR fortran/28771 + * decl.c (add_init_expr_to_sym): Remove setting of charlen for + an initializer of an assumed charlen variable. + + PR fortran/28660 + * trans-decl.c (generate_expr_decls): New function. + (generate_dependency_declarations): New function. + (generate_local_decl): Call previous if not either a dummy or + a declaration in an entry master. + +2006-08-19 Erik Edelmann + + PR fortran/25217 + * resolve.c (resolve_fl_variable): Set a default initializer for + derived types with INTENT(OUT) even if 'flag' is true. + * trans-expr.c (gfc_conv_function_call): Insert code to + reinitialize INTENT(OUT) arguments of derived type with default + initializers. + +2006-08-15 Jerry DeLisle + + PR fortran/25828 + * gfortran.h: Add new pointer for stream position to st_inquire. + Rename gfc_large_io_int_kind to gfc_intio_kind. + * trans-types.c (gfc_init_kinds): use gfc_intio_kind. + * io.c: Add new IO tag for file position going in and another for out. + (match_dt_element): Match new tag_spos. + (gfc_resolve_dt): Resolve new tag_spos. + (gfc_free_inquire): Free inquire->strm_pos. + (match_inquire_element): Match new tag_strm_out. + (gfc_resolve_inquire): Resolve new tag_strm_out. + * trans-io.c: Rename IOPARM_type_large_io_int to IOPARM_type_intio. + (gfc_build_st_parameter): Same. + (gfc_build_io_library_fndecls) Same. and add build pointer type pintio. + (gfc_trans_inquire): Translate strm_pos for inquire. + * ioparm.def: Reorder flags to accomodate addition of new inquire + flag for strm_pos_out and add it in. + +2006-08-06 Paul Thomas + + PR fortran/28590 + * parse.c (parse_derived): Remove the test for sequence type + components of a sequence type. + * resolve.c (resolve_fl_derived): Put the test here so that + pointer components are tested. + +2006-08-05 Steven G. Kargl + + PR fortran/28548 + * resolve.c(resolve_elemental_actual): Add flags.h to use -pedantic + and exclude conversion functions in conditional. Change gfc_error + to gfc_warning. + (warn_unused_label) Rename to ... + (warn_unused_fortran_label) avoid warn_unused_label in flags.h. + +2006-07-30 Francois-Xavier Coudert + + * intrinsic.c (add_functions): Add ACCESS, CHMOD, RSHIFT, LSHIFT. + (add_subroutines): Add LTIME, GMTIME and CHMOD. + * intrinsic.h (gfc_check_access_func, gfc_check_chmod, + gfc_check_chmod_sub, gfc_check_ltime_gmtime, gfc_simplify_rshift, + gfc_simplify_lshift, gfc_resolve_access, gfc_resolve_chmod, + gfc_resolve_rshift, gfc_resolve_lshift, gfc_resolve_chmod_sub, + gfc_resolve_gmtime, gfc_resolve_ltime): Add prototypes. + * gfortran.h (gfc_generic_isym_id): Add GFC_ISYM_ACCESS, + GFC_ISYM_CHMOD, GFC_ISYM_LSHIFT, GFC_ISYM_RSHIFT. + * iresolve.c (gfc_resolve_access, gfc_resolve_chmod, + gfc_resolve_rshift, gfc_resolve_lshift, gfc_resolve_chmod_sub, + gfc_resolve_gmtime, gfc_resolve_ltime): New functions. + * check.c (gfc_check_access_func, gfc_check_chmod, + gfc_check_chmod_sub, gfc_check_ltime_gmtime): New functions. + * trans-intrinsic.c (gfc_conv_intrinsic_rlshift): New function. + (gfc_conv_intrinsic_function): Add cases for the new GFC_ISYM_*. + +2006-07-28 Volker Reichelt + + * Make-lang.in: Use $(HEADER_H) instead of header.h in dependencies. + +2006-07-26 Francois-Xavier Coudert + + * intrinsic.c (add_functions): Add INT2, SHORT, INT8, LONG, + LSTAT, MCLOCK and MCLOCK8 intrinsic functions. + (add_subroutines): Add LSTAT intrinsic subroutine. + * gfortran.h (gfc_generic_isym_id): Add GFC_ISYM_INT2, + GFC_ISYM_INT8, GFC_ISYM_LONG, GFC_ISYM_LSTAT, GFC_ISYM_MCLOCK + and GFC_ISYM_MCLOCK8. + * iresolve.c (gfc_resolve_int2, gfc_resolve_int8, + gfc_resolve_long, gfc_resolve_lstat, gfc_resolve_mclock, + gfc_resolve_mclock8, gfc_resolve_lstat_sub): New functions. + * check.c (gfc_check_intconv): New function. + * trans-intrinsic.c (gfc_conv_intrinsic_function): Add cases for + the added GFC_ISYM_*. + * simplify.c (gfc_simplify_intconv, gfc_simplify_int2, + gfc_simplify_int8, gfc_simplify_long): New functions. + * intrinsic.h (gfc_check_intconv, gfc_simplify_int2, + gfc_simplify_int8, gfc_simplify_long, gfc_resolve_int2, + gfc_resolve_int8, gfc_resolve_long, gfc_resolve_lstat, + gfc_resolve_mclock, gfc_resolve_mclock8, gfc_resolve_lstat_sub): + Add prototypes. + +2006-07-24 Erik Edelmann + + PR fortran/28416 + * trans-array.c (gfc_conv_array_parameter): Give special treatment for + ALLOCATABLEs if they are themselves dummy variables. + +2006-07-23 Jerry DeLisle + + PR fortran/25289 + * gfortran.h: Declare gfc_large_io_int_kind. + * trans-types.c (gfc_init_kinds): Set gfc_large_io_int_kind + to size 8 or 4. + * trans-io.c (enum iofield_type): Add large_io_int type. + (gfc_build_st_parameter): Same. + (gfc_build_io_library_fndecls): Same. + * ioparm_def: Use large_io_int to define rec. + +2006-07-22 Steven Bosscher + + PR fortran/28439 + * trans-stmt.c (gfc_trans_arithmetic_if): Evaluate the condition once. + +2006-07-16 Jakub Jelinek + + PR fortran/28390 + * trans-openmp.c (gfc_trans_omp_do): Look for LASTPRIVATE in + code->exp.omp_clauses rather than in the 3rd function argument. + +2006-07-16 Paul Thomas + + PR fortran/28384 + * trans-common.c (translate_common): If common_segment is NULL + emit error that common block does not exist. + + PR fortran/20844 + * io.c (check_io_constraints): It is an error if an ADVANCE + specifier appears without an explicit format. + + PR fortran/28201 + * resolve.c (resolve_generic_s): For a use_associated function, + do not search for an alternative symbol in the parent name + space. + + PR fortran/20893 + * resolve.c (resolve_elemental_actual): New function t combine + all the checks of elemental procedure actual arguments. In + addition, check of array valued optional args(this PR) has + been added. + (resolve_function, resolve_call): Remove parts that treated + elemental procedure actual arguments and call the above. + +2006-07-14 Steven G. Kargl + + * trans-expr.c (gfc_trans_string_copy): Evaluate the string lengths + +006-07-13 Paul Thomas + + PR fortran/28353 + * trans-expr.c (gfc_conv_aliased_arg): Missing formal arg means + that intent is INOUT (fixes regression). + + PR fortran/25097 + * check.c (check_present): The only permitted reference is a + full array reference. + + PR fortran/20903 + * decl.c (variable_decl): Add error if a derived type is not + from the current namespace if the namespace is an interface + body. + +2006-07-12 Francois-Xavier Coudert + + PR fortran/28163 + * trans-expr.c (gfc_trans_string_copy): Generate inline code + to perform string copying instead of calling a library function. + * trans-decl.c (gfc_build_intrinsic_function_decls): Don't build + decl for copy_string. + * trans.h (gfor_fndecl_copy_string): Remove prototype. + +2006-07-11 Feng Wang + + PR fortran/28213 + * trans-io.c (transfer_expr): Deal with Hollerith constants used in + I/O list. + +2006-07-07 Kazu Hirata + + * intrinsic.texi: Fix typos. + +2006-07-07 Paul Thomas + + PR fortran/28237 + PR fortran/23420 + * io.c (resolve_tag): Any integer that is not an assigned + variable is an error. + +2006-07-06 Francois-Xavier Coudert + + PR fortran/28129 + * trans-array.c (gfc_trans_array_bound_check): Add a locus + argument, and use it in the error messages. + (gfc_conv_array_index_offset): Donc perform bounds checking on + the last dimension of assumed-size arrays. + +2006-07-06 Francois-Xavier Coudert + + PR fortran/27874 + * trans-stmt.c (compute_inner_temp_size): Don't perform bounds + checking when calculating the bounds of scalarization. + +2006-07-05 Francois-Xavier Coudert + + PR fortran/20892 + * interface.c (gfc_match_interface): Don't allow dummy procedures + to have a generic interface. + +2006-07-04 Paul Thomas + + PR fortran/28174 + * trans-array.c (gfc_conv_expr_descriptor): When building temp, + ensure that the substring reference uses a new charlen. + * trans-expr.c (gfc_conv_aliased_arg): Add the formal intent to + the argument list, lift the treatment of missing string lengths + from the above and implement the use of the intent. + (gfc_conv_function_call): Add the extra argument to the call to + the above. + + PR fortran/28167 + * trans-array.c (get_array_ctor_var_strlen): Treat a constant + substring reference. + * array.c (gfc_resolve_character_array_constructor): Remove + static attribute and add the gfc_ prefix, make use of element + charlens for the expression and pick up constant string lengths + for expressions that are not themselves constant. + * gfortran.h : resolve_character_array_constructor prototype + added. + * resolve.c (gfc_resolve_expr): Call resolve_character_array_ + constructor again after expanding the constructor, to ensure + that the character length is passed to the expression. + +2006-07-04 Francois-Xavier Coudert + Daniel Franke + + * intrinsic.c (add_subroutines): Add ITIME and IDATE. + * intrinsic.h (gfc_check_itime_idate,gfc_resolve_idate, + fc_resolve_itime): New protos. + * iresolve.c (gfc_resolve_itime, gfc_resolve_idate): New functions. + * check.c (gfc_check_itime_idate): New function. + * intrinsic.texi: Document the new intrinsics. + +2006-07-03 Francois-Xavier Coudert + + * intrinsics/date_and_time.c (itime0,idate0,itime_i4,itime_i8, + idate_i4,idate_i8): New functions. + + +2006-07-03 Asher Langton + + * decl.c (match_old_style_init): Add data attribute to symbol. + +2006-07-03 Francois-Xavier Coudert + + * iresolve.c (gfc_resolve_cpu_time, gfc_resolve_random_number): + Remove ATTRIBUTE_UNUSED for used argument. + +2006-07-03 Francois-Xavier Coudert + + * intrinsic.texi: Document new intrinsics. + +2006-07-01 Tobias Schlüter + + PR fortran/19259 + * parse.c (next_free): Error out on line starting with semicolon. + (next_fixed): Fix formatting. Error out on line starting with + semicolon. + +2006-06-30 Kazu Hirata + + * check.c: Fix a comment typo. + +2006-06-25 Paul Thomas + + PR fortran/25056 + * interface.c (compare_actual_formal): Signal an error if the formal + argument is a pure procedure and the actual is not pure. + + PR fortran/27554 + * resolve.c (resolve_actual_arglist): If the type of procedure + passed as an actual argument is not already declared, see if it is + an intrinsic. + + PR fortran/25073 + * resolve.c (resolve_select): Use bits 1 and 2 of a new int to + keep track of the appearance of constant logical case expressions. + Signal an error is either value appears more than once. + + PR fortran/20874 + * resolve.c (resolve_fl_procedure): Signal an error if an elemental + function is not scalar valued. + + PR fortran/20867 + * match.c (recursive_stmt_fcn): Perform implicit typing of variables. + + PR fortran/22038 + * match.c (match_forall_iterator): Mark new variables as + FL_UNKNOWN if the match fails. + + PR fortran/28119 + * match.c (gfc_match_forall): Remove extraneous call to + gfc_match_eos. + + PR fortran/25072 + * resolve.c (resolve_code, resolve_function): Rework + forall_flag scheme so that it is set and has a value of + 2, when the code->expr (ie. the forall mask) is resolved. + This is used to change "block" to "mask" in the non-PURE + error message. + +2006-06-24 Francois-Xavier Coudert + + PR fortran/28081 + * resolve.c (resolve_substring): Don't issue out-of-bounds + error messages when the range has zero size. + +2006-06-24 Francois-Xavier Coudert + + PR fortran/23862 + * lang-specs.h (f95-cpp-input): Pass -ffree-form to f951 unless + -ffixed-form is explicitly specified. + +2006-06-24 Paul Thomas + + PR fortran/28118 + * trans-array.c (gfc_conv_expr_descriptor): When building temp, + use the substring reference to calculate the length if the + expression does not have a charlen. + +2006-06-24 Francois-Xavier Coudert + + PR fortran/28094 + * trans-intrinsic.c (gfc_conv_intrinsic_mod): Support cases where + there is no integer kind equal to the resulting real kind. + * intrinsic.c (add_functions): MODULO is not allowed as an actual + argument. + +2006-06-23 Steven G. Kargl + + PR fortran/27981 + * match.c (gfc_match_if): Handle errors in assignment in simple if. + +2006-06-22 Asher Langton + + PR fortran/24748 + * primary.c (gfc_match_rvalue): Don't call match_substring for + implicit non-character types. + +2006-06-22 Francois-Xavier Coudert + + PR libfortran/26769 + * iresolve.c (gfc_resolve_reshape): Call reshape_r4 and + reshape_r8 instead of reshape_4 and reshape_8. + (gfc_resolve_transpose): Likewise for transpose. + +2006-06-21 Francois-Xavier Coudert + + * trans-expr.c (gfc_conv_missing_dummy, gfc_conv_unary_op, + gfc_conv_cst_int_power, gfc_conv_string_tmp, + gfc_conv_function_call): Replace calls to convert on constant + integer nodes by build_int_cst. + * trans-stmt.c (gfc_trans_do): Likewise. + * trans-io.c (set_internal_unit, transfer_namelist_element): + Likewise. + * trans-decl.c (build_entry_thunks): Likewise. + +2006-06-20 Steven G. Kargl + + * simplify.c (gfc_simplify_rrspacing): Initialize and clear mpfr_t + variable. + +2006-06-20 Paul Thomas + + PR fortran/25049 + PR fortran/25050 + * check.c (non_init_transformational): New function. + (find_substring_ref): New function to signal use of disallowed + transformational intrinsic in an initialization expression. + (gfc_check_all_any): Call previous if initialization expr. + (gfc_check_count): The same. + (gfc_check_cshift): The same. + (gfc_check_dot_product): The same. + (gfc_check_eoshift): The same. + (gfc_check_minloc_maxloc): The same. + (gfc_check_minval_maxval): The same. + (gfc_check_gfc_check_product_sum): The same. + (gfc_check_pack): The same. + (gfc_check_spread): The same. + (gfc_check_transpose): The same. + (gfc_check_unpack): The same. + + PR fortran/18769 + *intrinsic.c (add_functions): Add gfc_simplify_transfer. + *intrinsic.h : Add prototype for gfc_simplify_transfer. + *simplify.c (gfc_simplify_transfer) : New function to act as + placeholder for eventual implementation. Emit error for now. + + PR fortran/16206 + * expr.c (find_array_element): Eliminate condition on length of + offset. Add bounds checking. Rearrange exit. Return try and + put gfc_constructor result as an argument. + (find_array_section): New function. + (find_substring_ref): New function. + (simplify_const_ref): Add calls to previous. + (simplify_parameter_variable): Return on NULL expr. + (gfc_simplify_expr): Only call gfc_expand_constructor for full + arrays. + + PR fortran/20876 + * match.c (gfc_match_forall): Add missing locus to gfc_code. + +2006-06-18 Francois-Xavier Coudert + + PR fortran/26801 + * trans-intrinsic.c (gfc_conv_associated): Use pre and post blocks + of the scalarization expression. + +2006-06-18 Jerry DeLisle + + PR fortran/19310 + PR fortran/19904 + * arith.c (gfc_range_check): Return ARITH_OK if -fno-range-check. Add + return of ARITH_NAN, ARITH_UNDERFLOW, and ARITH_OVERFLOW. + (gfc_arith_divide): If -fno-range-check allow mpfr to divide by zero. + * gfortran.h (gfc_option_t): Add new flag. + * invoke.texi: Document new flag. + * lang.opt: Add option -frange-check. + * options.c (gfc_init_options): Initialize new flag. + (gfc_handle_options): Set flag if invoked. + * simplify.c (range_check): Add error messages for + overflow, underflow, and other errors. + * trans-const.c (gfc_conv_mpfr_to_tree): Build NaN and Inf from mpfr + result. + +2006-06-17 Karl Berry + + * gfortran.texi (@dircategory): Use "Software development" + instead of "Programming", following the Free Software Directory. + +2006-06-16 Francois-Xavier Coudert + + PR fortran/27965 + * trans-array.c (gfc_conv_ss_startstride): Correct the runtime + conditions for bounds-checking. Check for nonzero stride. + Don't check the last dimension of assumed-size arrays. Fix the + dimension displayed in the error message. + +2006-06-15 Thomas Koenig + + * trans-array.h (gfc_trans_create_temp_array): Add bool + argument. + * trans-arrray.c (gfc_trans_create_temp_array): Add extra + argument "function" to show if we are translating a function. + If we are translating a function, perform checks whether + the size along any argument is negative. In that case, + allocate size 0. + (gfc_trans_allocate_storage): Add function argument (as + false) to gfc_trans_create_temp_array call. + * trans-expr.c (gfc_conv_function_call): Add function + argument (as true) to gfc_trans_create_temp_array call. + * trans-stmt.c (gfc_conv_elemental_dependencies): Add + function argument (as false) to gfc_trans_create_temp_array + call. + * trans-intrinsic.c: Likewise. + +2006-06-10 Paul Thomas + + PR fortran/24558 + PR fortran/20877 + PR fortran/25047 + * decl.c (get_proc_name): Add new argument to flag that a + module function entry is being treated. If true, correct + error condition, add symtree to module namespace and add + a module procedure. + (gfc_match_function_decl, gfc_match_entry, + gfc_match_subroutine): Use the new argument in calls to + get_proc_name. + * resolve.c (resolve_entries): ENTRY symbol reference to + to master entry namespace if a module function. + * trans-decl.c (gfc_create_module_variable): Return if + the symbol is an entry. + * trans-exp.c (gfc_conv_variable): Check that parent_decl + is not NULL. + +2006-06-09 Jakub Jelinek + + PR fortran/27916 + * trans-openmp.c (gfc_omp_clause_default_ctor): New function. + * trans.h (gfc_omp_clause_default_ctor): New prototype. + * f95-lang.c (LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR): Define. + +2006-06-08 Francois-Xavier Coudert + + PR fortran/27958 + * trans-expr.c (gfc_conv_substring): If the substring start is + greater than its end, the length of the substring is zero, and + not negative. + (gfc_trans_string_copy): Don't generate a call to + _gfortran_copy_string when destination length is zero. + +2006-06-08 Asher Langton + + PR fortran/27786 + * trans-array.c (gfc_conv_array_ref): Eliminate bounds checking + for assumed-size Cray pointees. + +2006-06-08 Steven G. Kargl + + * intrinsic.c (add_subroutine): Make make_noreturn() conditional on + the appropriate symbol name. + +2006-06-07 Paul Thomas + + PR fortran/23091 + * resolve.c (resolve_fl_variable): Error if an automatic + object has the SAVE attribute. + + PR fortran/24168 + * expr.c (simplify_intrinsic_op): Transfer the rank and + the locus to the simplified expression. + + PR fortran/25090 + PR fortran/25058 + * gfortran.h : Add int entry_id to gfc_symbol. + * resolve.c : Add static variables current_entry_id and + specification_expr. + (resolve_variable): During code resolution, check if a + reference to a dummy variable in an executable expression + is preceded by its appearance as a parameter in an entry. + Likewise check its specification expressions. + (resolve_code): Update current_entry_id on EXEC_ENTRY. + (resolve_charlen, resolve_fl_variable): Set and reset + specifiaction_expr. + (is_non_constant_shape_array): Do not return on detection + of a variable but continue to resolve all the expressions. + (resolve_codes): set current_entry_id to an out of range + value. + +2006-06-06 Mike Stump + + * Make-lang.in: Rename to htmldir to build_htmldir to avoid + installing during build. + +2006-06-06 Paul Thomas + + PR fortran/27897 + * match.c (gfc_match_common): Fix code typo. Remove + sym->name, since sym is NULL, and replace with name. + +2006-06-05 Francois-Xavier Coudert + + PR libfortran/27895 + * resolve.c (compute_last_value_for_triplet): New function. + (check_dimension): Correctly handle zero-sized array sections. + Add checking on last element of array sections. + +2006-06-05 Steven G. Kargl + + * data.c (gfc_assign_data_value): Fix comment typo. Remove + a spurious return. + +2006-06-05 Paul Thomas + + PR fortran/14067 + * data.c (create_character_intializer): Add warning message + for truncated string. + + PR fortran/16943 + * symbol.c : Include flags.h. + (gfc_add_type): If a procedure and types are the same do not + throw an error unless standard is less than gnu or pedantic. + + PR fortran/20839 + * parse.c (parse_do_block): Error if named block do construct + does not have a named enddo. + + PR fortran/27655 + * check.c (gfc_check_associated): Pick up EXPR_NULL for pointer + as well as target and put error return at end of function. + +2006-06-03 Francois-Xavier Coudert + + * trans.c (gfc_msg_bounds, gfc_msg_fault, gfc_msg_wrong_return): + Add strings for common runtime error messages. + (gfc_trans_runtime_check): Add a locus argument, use a string + and not a string tree for the message. + * trans.h (gfc_trans_runtime_check): Change prototype accordingly. + (gfc_msg_bounds, gfc_msg_fault, gfc_msg_wrong_return): Add proto. + * trans-const.c (gfc_strconst_bounds, gfc_strconst_fault, + gfc_strconst_wrong_return, gfc_strconst_current_filename): Remove. + (gfc_init_constants): Likewise. + * trans-const.h: Likewise. + * trans-decl.c (gfc_build_builtin_function_decls): Call to + _gfortran_runtime_error has only one argument, the message string. + * trans-array.h (gfc_conv_array_ref): Add a symbol argument and a + locus. + * trans-array.c (gfc_trans_array_bound_check): Build precise + error messages. + (gfc_conv_array_ref): Use the new symbol argument and the locus + to build more precise error messages. + (gfc_conv_ss_startstride): More precise error messages. + * trans-expr.c (gfc_conv_variable): Give symbol reference and + locus to gfc_conv_array_ref. + (gfc_conv_function_call): Use the new prototype for + gfc_trans_runtime_check. + * trans-stmt.c (gfc_trans_goto): Build more precise error message. + * trans-io.c (set_string): Likewise. + * trans-intrinsic.c (gfc_conv_intrinsic_bound): Use new prototype + for gfc_trans_runtime_check. + +2006-06-01 Thomas Koenig + + PR fortran/27715 + * arith.c: Cast the characters from the strings to unsigned + char to avoid values less than 0 for extended ASCII. + +2006-06-01 Per Bothner + + * data.c (gfc_assign_data_value): Handle USE_MAPPED_LOCATION. + * scanner.c (gfc_gobble_whitespace): Likewise. + +2006-06-01 Paul Thomas + + PR fortran/25098 + PR fortran/25147 + * interface.c (compare_parameter): Return 1 if the actual arg + is external and the formal is a procedure. + (compare_actual_formal): If the actual argument is a variable + and the formal a procedure, this an error. If a gsymbol exists + for a procedure of the same name, this is not yet resolved and + the error is cleared. + + * trans-intrinsic.c (gfc_conv_associated): Make provision for + zero array length or zero string length contingent on presence + of target, for consistency with standard. + +2006-05-30 Asher Langton + + * symbol.c (check_conflict): Allow external, function, and + subroutine attributes with Cray pointees. + * trans-expr.c (gfc_conv_function_val): Translate Cray pointees + that point to procedures. + * gfortran.texi: Document new feature. + +2006-05-29 Jerry DeLisle + + PR fortran/27634 + * io.c (check_format): Add error for missing period in format + specifier unless -std=legacy. + * gfortran.texi: Add description of expanded namelist read and + missing period in format extensions. + +2006-05-29 Francois-Xavier Coudert + + PR fortran/19777 + * trans-array.c (gfc_conv_array_ref): Perform out-of-bounds + checking for assumed-size arrrays for all but the last dimension. + +2006-05-29 Francois-Xavier Coudert + + * invoke.texi: Change -fpackderived into -fpack-derived. + +2006-05-29 Kazu Hirata + + * options.c, primary.c, resolve.c, trans-common.c: Fix typos + in error messages. + +2006-05-28 Kazu Hirata + + * check.c, expr.c, resolve.c, trans-common.c, + trans-intrinsic.c, trans-stmt.c, trans-types.c: Fix comment typos. + +2006-05-27 Francois-Xavier Coudert + + PR fortran/19777 + * trans-array.c (gfc_conv_array_ref): Don't perform out-of-bounds + checking for assumed-size arrrays. + +2006-05-27 Paul Thomas + + * trans-intrinsic.c (gfc_conv_associated): If pointer in first + arguments has zero array length of zero string length, return + false. + +2006-05-26 Francois-Xavier Coudert + + PR fortran/27524 + * trans-array.c (gfc_trans_dummy_array_bias): Don't use stride as + a temporary variable when -fbounds-check is enabled, since its + value will be needed later. + +2006-05-26 Thomas Koenig + + PR fortran/23151 + * io.c (match_io): print (1,*) is an error. + +2006-05-26 Paul Thomas + + PR fortran/27709 + * resolve.c (find_array_spec): Add gfc_symbol, derived, and + use to track repeated component references. + + PR fortran/27155 + PR fortran/27449 + * trans-intrinsic.c (gfc_conv_intrinsic_array_transfer): Use + se->string_length throughout and use memcpy to populate the + expression returned to the scalarizer. + (gfc_size_in_bytes): New function. + +2006-05-21 Paul Thomas + + PR fortran/27613 + * primary.c (gfc_match_rvalue): Test if symbol represents a + direct recursive function reference. Error if array valued, + go to function0 otherwise. + +2006-05-21 Paul Thomas + + PR fortran/25746 + * interface.c (gfc_extend_assign): Use new EXEC_ASSIGN_CALL. + * gfortran.h : Put EXEC_ASSIGN_CALL in enum. + * trans-stmt.c (gfc_conv_elemental_dependencies): New function. + (gfc_trans_call): Call it. Add new boolian argument to flag + need for dependency checking. Assert intent OUT and IN for arg1 + and arg2. + (gfc_trans_forall_1): Use new code EXEC_ASSIGN_CALL. + trans-stmt.h : Modify prototype of gfc_trans_call. + trans.c (gfc_trans_code): Add call for EXEC_ASSIGN_CALL. + st.c (gfc_free_statement): Free actual for EXEC_ASSIGN_CALL. + * dependency.c (gfc_check_fncall_dependency): Don't check other + against itself. + + PR fortran/25090 + * resolve.c : Remove resolving_index_expr. + (entry_parameter): Remove. + (gfc_resolve_expr, resolve_charlen, resolve_fl_variable): Lift + calls to entry_parameter and references to resolving_index_expr. + + PR fortran/27584 + * check.c (gfc_check_associated): Replace NULL assert with an + error message, since it is possible to generate bad code that + has us fall through to here.. + + PR fortran/19015 + * iresolve.c (maxloc, minloc): If DIM is not present, pass the + rank of ARRAY as the shape of the result. Otherwise, pass the + shape of ARRAY, less the dimension DIM. + (maxval, minval): The same, when DIM is present, otherwise no + change. + +2006-05-19 H.J. Lu + + PR fortran/27662 + * trans-array.c (gfc_conv_expr_descriptor): Don't zero the + first stride to indicate a temporary. + * trans-expr.c (gfc_conv_function_call): Likewise. + +2006-05-18 Francois-Xavier Coudert + Feng Wang + + PR fortran/27552 + * dump-parse-tree.c (gfc_show_expr): Deal with Hollerith constants. + * data.c (create_character_intializer): Set from_H flag if character is + initialized by Hollerith constant. + +2006-05-17 Francois-Xavier Coudert + + PR fortran/26551 + * resolve.c (resolve_call, resolve_function): Issue an error + if a function or subroutine call is recursive but the function or + subroutine wasn't declared as such. + +2006-05-07 Francois-Xavier Coudert + + PR fortran/26551 + * gfortran.dg/recursive_check_1.f: New test. + + +2006-05-17 Francois-Xavier Coudert + + PR fortran/27320 + * dump-parse-tree.c (gfc_show_code_node): Try harder to find the + called procedure name. + +2006-05-17 Jakub Jelinek + + PR middle-end/27415 + * trans-openmp.c (gfc_trans_omp_parallel_do, + gfc_trans_omp_parallel_sections, gfc_trans_omp_parallel_workshare): Set + OMP_PARALLEL_COMBINED flag. + +2006-05-16 H.J. Lu + + PR driver/26885 + * Make-lang.in (GFORTRAN_D_OBJS): Replace gcc.o with + $(GCC_OBJS). + +2006-05-15 Paul Thomas + + PR fortran/25090 + * resolve.c: Static resolving_index_expr initialized. + (entry_parameter): New function to emit errors for variables + that are not entry parameters. + (gfc_resolve_expr): Call entry_parameter, when resolving + variables, if the namespace has entries and resolving_index_expr + is set. + (resolve_charlen): Set resolving_index_expr before the call to + resolve_index_expr and reset it afterwards. + (resolve_fl_variable): The same before and after the call to + is_non_constant_shape_array, which ultimately makes a call to + gfc_resolve_expr. + + PR fortran/25082 + * resolve.c (resolve_code): Add error condition that the return + expression must be scalar. + + PR fortran/27411 + * matchexp.c (gfc_get_parentheses): New function. + (match_primary): Remove inline code and call above. + * gfortran.h: Provide prototype for gfc_get_parentheses. + * resolve.c (resolve_array_ref): Call the above, when start is a + derived type variable array reference. + +2006-05-15 Jakub Jelinek + + PR fortran/27446 + * trans-openmp.c (gfc_trans_omp_array_reduction): Ensure + OMP_CLAUSE_REDUCTION_{INIT,MERGE} are set to BIND_EXPR. + +2006-05-14 H.J. Lu + + * Make-lang.in (fortran/options.o): Depend on $(TARGET_H). + +2006-05-11 Francois-Xavier Coudert + + PR fortran/27553 + * parse.c (next_free): Return instead of calling decode_statement + upon error. + +2005-05-10 Thomas Koenig + + PR fortran/27470 + * trans-array.c(gfc_array_allocate): If ref->next exists + that is if there is a statement like ALLOCATE(foo%bar(2)), + F95 rules require that bar should be a pointer. + +2006-05-10 Francois-Xavier Coudert + + PR fortran/20460 + * resolve.c (gfc_resolve_index): Make REAL array indices a + GFC_STD_LEGACY feature. + +2006-05-10 Francois-Xavier Coudert + + PR fortran/24549 + * parse.c (reject_statement): Clear gfc_new_block. + +2006-05-09 Steven G. Kargl + + * invoke.texi: Missed file in previous commit. Update + description of -fall-intrinsics + +2006-05-07 Steven Boscher + + PR fortran/27378 + * parse.c (next_statement): Add check to avoid an ICE when + gfc_current_locus.lb is not set. + +2006-05-07 Tobias Schlüter + + PR fortran/27457 + * match.c (match_case_eos): Error out on garbage following + CASE(...). + +2006-05-07 Paul Thomas + + PR fortran/24813 + * trans-array.c (get_array_ctor_strlen): Remove static attribute. + * trans.h: Add prototype for get_array_ctor_strlen. + * trans-intrinsic.c (gfc_conv_intrinsic_len): Switch on EXPR_ARRAY + and call get_array_ctor_strlen. + +2006-05-05 Steven G. Kargl + + * invoke.texi: Update description of -fall-intrinsics + * options.c (gfc_post_options): Disable -Wnonstd-intrinsics if + -fall-intrinsics is used. + (gfc_handle_option): Permit -Wno-nonstd-intrinsics. + +2006-05-04 Tobias Schlüter + + * simplify.c (ascii_table): Fix wrong entry. + +2006-05-02 Steven G. Kargl + + PR fortran/26896 + * lang.opt: Fix -Wtab description + + PR fortran/20248 + * lang.opt: New flag -fall-intrinsics. + * invoke.texi: Document option. + * gfortran.h (options_t): New member flag_all_intrinsics. + * options.c (gfc_init_options, gfc_handle_option): Set new option. + sort nearby misplaced options. + * intrinsic.c (add_sym, make_generic, make_alias): Use it. + +2006-05-02 Paul Thomas + + PR fortran/27269 + * module.c: Add static flag in_load_equiv. + (mio_expr_ref): Return if no symtree and in_load_equiv. + (load_equiv): If any of the equivalence members have no symtree, free + the equivalence and the associated expressions. + + PR fortran/27324 + * trans-common.c (gfc_trans_common): Invert the order of calls to + finish equivalences and gfc_commit_symbols. + +2006-04-29 Francois-Xavier Coudert + + PR fortran/25681 + * simplify.c (simplify_len): Character variables with constant + length can be simplified. + +2006-04-29 H.J. Lu + + PR fortran/27351 + * trans-array.c (gfc_conv_array_transpose): Move gcc_assert + before gfc_conv_expr_descriptor. + +2006-04-23 Paul Thomas + + PR fortran/25099 + * resolve.c (resolve_call): Check conformity of elemental + subroutine actual arguments. + +2006-04-22 Jakub Jelinek + + PR fortran/26769 + * iresolve.c (gfc_resolve_reshape): Use reshape_r16 for real(16). + (gfc_resolve_transpose): Use transpose_r16 for real(16). + +2006-04-21 Paul Thomas + + PR fortran/27122 + * resolve.c (resolve_function): Remove general restriction on auto + character length function interfaces. + (gfc_resolve_uops): Check restrictions on defined operator + procedures. + (resolve_types): Call the check for defined operators. + + PR fortran/27113 + * trans-array.c (gfc_trans_array_constructor_subarray): Remove + redundant gfc_todo_error. + (get_array_ctor_var_strlen): Remove typo in enum. + +2006-04-18 Bernhard Fischer + + * parse.c (next_free): Use consistent error string between + free-form and fixed-form for illegal statement label of zero. + (next_fixed): Use consistent warning string between free-form + and fixed-form for statement labels for empty statements. + +2006-04-18 Steve Ellcey + + * trans-io.c (gfc_build_io_library_fndecls): Align pad. + +2006-04-16 Thomas Koenig + + PR fortran/26017 + * trans-array.c(gfc_array_init_size): Introduce or_expr + which is true if the size along any dimension + is negative. Create a temporary variable with base + name size. If or_expr is true, set the temporary to 0, + to the normal size otherwise. + +2006-04-16 Paul Thomas + + PR fortran/26822 + * intrinsic.c (add_functions): Mark LOGICAL as elemental. + + PR fortran/26787 + * expr.c (gfc_check_assign): Extend scope of error to include + assignments to a procedure in the main program or, from a + module or internal procedure that is not that represented by + the lhs symbol. Use VARIABLE rather than l-value in message. + + PR fortran/27096 + * trans-array.c (gfc_trans_deferred_array): If the backend_decl + is not a descriptor, dereference and then test and use the type. + + PR fortran/25597 + * trans-decl.c (gfc_trans_deferred_vars): Check if an array + result, is also automatic character length. If so, process + the character length. + + PR fortran/18003 + PR fortran/25669 + PR fortran/26834 + * trans_intrinsic.c (gfc_walk_intrinsic_bound): Set + data.info.dimen for bound intrinsics. + * trans_array.c (gfc_conv_ss_startstride): Pick out LBOUND and + UBOUND intrinsics and supply their shape information to the ss + and the loop. + + PR fortran/27124 + * trans_expr.c (gfc_trans_function_call): Add a new block, post, + in to which all the argument post blocks are put. Add this block + to se->pre after a byref call or to se->post, otherwise. + +2006-04-14 Roger Sayle + + * trans-io.c (set_string): Use fold_build2 and build_int_cst instead + of build2 and convert to construct "x < 0" rather than "x <= -1". + +2006-04-13 Richard Henderson + + * trans-openmp.c (gfc_trans_omp_sections): Adjust for changed + number of operands to OMP_SECTIONS. + +2006-04-08 Kazu Hirata + + * gfortran.texi: Fix typos. Follow spelling conventions. + * resolve.c, trans-expr.c, trans-stmt.c: Fix comment typos. + Follow spelling conventions. + +2006-04-05 Roger Sayle + + * dependency.c (get_no_elements): Delete function. + (get_deps): Delete function. + (transform_sections): Delete function. + (gfc_check_section_vs_section): Significant rewrite. + +2006-04-04 H.J. Lu + + PR fortran/25619 + * trans-array.c (gfc_conv_expr_descriptor): Only dereference + character pointer when copying temporary. + + PR fortran/23634 + * trans-array.c (gfc_conv_expr_descriptor): Properly copy + temporary character with non constant size. + +2006-04-03 Paul Thomas + + PR fortran/26891 + * trans.h: Prototype for gfc_conv_missing_dummy. + * trans-expr (gfc_conv_missing_dummy): New function + (gfc_conv_function_call): Call it and tidy up some of the code. + * trans-intrinsic (gfc_conv_intrinsic_function_args): The same. + + PR fortran/26976 + * array.c (gfc_array_dimen_size): If available, return shape[dimen]. + * resolve.c (resolve_function): If available, use the argument + shape for the function expression. + * iresolve.c (gfc_resolve_transfer): Set shape[0] = size. + +2006-04-02 Erik Edelmann + + * trans-array.c (gfc_trans_dealloc_allocated): Take a + tree representation of the array to be deallocated as argument + instead of its gfc_symbol. + (gfc_trans_deferred_array): Update call to + gfc_trans_dealloc_allocated. + * trans-array.h (gfc_trans_dealloc_allocated): Update + prototype. + * trans-expr.c (gfc_conv_function_call): Update call to + gfc_trans_dealloc_allocated, get indirect reference to dummy + arguments. + +2006-04-01 Roger Sayle + + PR fortran/25270 + * trans-array.c (gfc_trans_allocate_array_storage): In array index + calculations use gfc_index_zero_node and gfc_index_one_node instead + of integer_zero_node and integer_one_node respectively. + (gfc_conv_array_transpose): Likewise. + (gfc_conv_ss_startstride): Likewise. + (gfc_trans_dummy_array_bias): Likewise. + +2006-04-01 Roger Sayle + + * dependency.c (gfc_is_inside_range): Delete. + (gfc_check_element_vs_section): Significant rewrite. + +2006-04-01 Roger Sayle + + * dependency.c (gfc_dep_compare_expr): Strip parentheses and unary + plus operators when comparing expressions. Handle comparisons of + the form "X+C vs. X", "X vs. X+C", "X-C vs. X" and "X vs. X-C" where + C is an integer constant. Handle comparisons of the form "P+Q vs. + R+S" and "P-Q vs. R-S". Handle comparisons of integral extensions + specially (increasing functions) so extend(A) > extend(B), when A>B. + (gfc_check_element_vs_element): Move test later, so that we ignore + the fact that "A < B" or "A > B" when A or B contains a forall index. + +2006-03-31 Asher Langton + + PR fortran/25358 + * expr.c (gfc_check_assign): Allow cray pointee to be assumes-size. + +2006-03-30 Paul Thomas + Bud Davis + + PR 21130 + * module.c (load_needed): Traverse entire tree before returning. + +2006-03-30 Roger Sayle + + PR middle-end/22375 + * trans.c (gfc_trans_runtime_check): Promote the arguments of + __builtin_expect to the correct types, and the result back to + boolean_type_node. + +2006-03-29 Carlos O'Donell + + * Make-lang.in: Rename docdir to gcc_docdir. + +2006-03-28 Steven G. Kargl + + * intrinsic.texi: s/floor/float in previous commit. + +2006-03-28 Paul Thomas + + PR fortran/26779 + * resolve.c (resolve_fl_procedure): Do not check the access of + derived types for internal procedures. + +2006-03-27 Jakub Jelinek + + * io.c (check_io_constraints): Don't look at + dt->advance->value.charater.string, unless it is a CHARACTER + constant. + + * f95-lang.c (gfc_get_alias_set): New function. + (LANG_HOOKS_GET_ALIAS_SET): Define. + +2006-03-25 Steven G. Kargl + + PR fortran/26816 + * intrinsic.c (add_functions): Allow FLOAT to accept all integer kinds. + * intrinsic.texi: Document FLOAT. + +2006-03-25 Thomas Koenig + + PR fortran/26769 + * iresolve.c (gfc_resolve_reshape): Remove doubling of + kind for complex. For real(kind=10), call reshape_r10. + (gfc_resolve_transpose): For real(kind=10), call + transpose_r10. + +2006-03-25 Roger Sayle + + * dependency.c (gfc_check_dependency): Improve handling of pointers; + Two variables of different types can't have a dependency, and two + variables with the same symbol are equal, even if pointers. + +2006-03-24 Roger Sayle + + * gfortran.h (gfc_symbol): Add a new "forall_index" bit field. + * match.c (match_forall_iterator): Set forall_index field on + the iteration variable's symbol. + * dependency.c (contains_forall_index_p): New function to + traverse a gfc_expr to check whether it contains a variable + with forall_index set in it's symbol. + (gfc_check_element_vs_element): Return GFC_DEP_EQUAL for scalar + constant expressions that don't variables used as FORALL indices. + +2006-03-22 Volker Reichelt + + PR driver/22600 + * error.c (gfc_fatal_error): Return ICE_EXIT_CODE instead of 4. + +2006-03-22 Thomas Koenig + + PR fortran/19303 + * gfortran.h (gfc_option_t): Add record_marker. + * lang.opt: Add -frecord-marker=4 and -frecord-marker=8. + * trans-decl.c: Add gfor_fndecl_set_record_marker. + (gfc_build_builtin_function_decls): Set + gfor_fndecl_set_record_marker. + (gfc_generate_function_code): If we are in the main program + and -frecord-marker was provided, call set_record_marker. + * options.c (gfc_handle_option): Add handling for + -frecord-marker=4 and -frecord-marker=8. + * invoke.texi: Document -frecord-marker. + +2006-03-22 Paul Thomas + + PR fortran/17298 + * trans-intrinsic.c (gfc_conv_intrinsic_array_transfer): New + function to implement array valued TRANSFER intrinsic. + (gfc_conv_intrinsic_function): Call the new function if TRANSFER + and non-null se->ss. + (gfc_walk_intrinsic_function): Treat TRANSFER as one of the + special cases by calling gfc_walk_intrinsic_libfunc directly. + +2006-03-21 Toon Moene + + * options.c (gfc_init_options): Initialize + flag_argument_noalias to 3. + +2006-03-20 Thomas Koenig + + PR fortran/20935 + * iresolve.c (gfc_resolve_maxloc): If mask is scalar, + prefix the function name with an "s". If the mask is scalar + or if its kind is smaller than gfc_default_logical_kind, + coerce it to default kind. + (gfc_resolve_maxval): Likewise. + (gfc_resolve_minloc): Likewise. + (gfc_resolve_minval): Likewise. + (gfc_resolve_product): Likewise. + (gfc_resolve_sum): Likewise. + +2006-03-19 Paul Thomas + + PR fortran/26741 + *expr.c (external_spec_function): Permit elemental functions. + + PR fortran/26716 + *interface.c (compare_actual_formal): Detect call for procedure + usage and require rank checking, in this case, for assumed shape + and deferred shape arrays. + (gfc_procedure_use): Revert to pre-PR25070 call to + compare_actual_formal that does not require rank checking.. + +2006-03-16 Roger Sayle + + * gfortran.h (gfc_equiv_info): Add length field. + * trans-common.c (copy_equiv_list_to_ns): Set the length field. + * dependency.c (gfc_are_equivalenced_arrays): Use both the offset + and length fields to determine whether the two equivalenced symbols + overlap in memory. + +2006-03-14 Jerry DeLisle + + PR fortran/19101 + * gfortran.h: Add warn_ampersand. + * invoke.texi: Add documentation for new option. + * lang.opt: Add Wampersand. + * options.c (gfc_init_options): Initialize warn_ampersand. + (gfc_post_options): Set the warn if pedantic. + (set_Wall): Set warn_ampersand. + (gfc_handle_option: Add Wampersand for itself, -std=f95, and -std=f2003. + * scanner.c (gfc_next_char_literal): Add test for missing '&' in + continued character constant and give warning if missing. + +2006-03-14 Steven G. Kargl + + PR 18537 + * gfortran.h: Wrap Copyright line. + (gfc_option_t): add warn_tabs member. + * lang.opt: Update Coyright year. Add the Wtabs. + * invoke.texi: Document -Wtabs. + * scanner.c (gfc_gobble_whitespace): Use warn_tabs. Add linenum to + suppress multiple warnings. + (load_line): Use warn_tabs. Add linenum, current_line, seen_comment + to suppress multiple warnings. + * options.c (gfc_init_options): Initialize warn_tabs. + (set_Wall): set warn_tabs for -Wall. + (gfc_post_options): Adjust flag_tabs depending on -pedantic. + (gfc_handle_option): Process command-line option -W[no-]tabs + +2006-03-13 Paul Thomas + + PR fortran/25378 + * trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc): Set the initial position to zero and + modify the condition for updating it, to implement the F2003 requirement for all(mask) + is false. + +2006-03-13 Jakub Jelinek + + * trans-openmp.c (gfc_trans_omp_variable): Handle references + to parent result. + * trans-expr.c (gfc_conv_variable): Remove useless setting + of parent_flag, formatting. + + * trans-decl.c (gfc_get_fake_result_decl): Re-add setting of + GFC_DECL_RESULT flag. + +2003-03-11 Roger Sayle + + * dependency.c (gfc_dep_compare_expr) : Allow unary and + binary operators to compare equal if their operands are equal. + : Allow "constant" intrinsic conversion functions + to compare equal, if their operands are equal. + +2006-03-11 Erik Edelmann + + * symbol.c (check_conflict): Allow allocatable function results, + except for elemental functions. + * trans-array.c (gfc_trans_allocate_temp_array): Rename to ... + (gfc_trans_create_temp_array): ... this, and add new argument + callee_alloc. + (gfc_trans_array_constructor, gfc_conv_loop_setup): Update call + to gfc_trans_allocate_temp_array. + * trans-array.h (gfc_trans_allocate_temp_array): Update prototype. + * trans-expr.c (gfc_conv_function_call): Use new arg of + gfc_trans_create_temp_array avoid pre-allocation of temporary + result variables of pointer AND allocatable functions. + (gfc_trans_arrayfunc_assign): Return NULL for allocatable + functions. + * resolve.c (resolve_symbol): Copy value of 'allocatable' attribute + from sym->result to sym. + +2006-03-09 Erik Edelmann + + * trans-expr.c (gfc_add_interface_mapping): Copy 'allocatable' + attribute from sym to new_sym. Call build_fold_indirect_ref() + for allocatable arguments. + +2006-03-09 Paul Thomas + + PR fortran/26257 + * trans-array.c (gfc_conv_expr_descriptor): Exclude calculation of + the offset and data when se->data_not_needed is set. + * trans.h: Include the data_not_need bit in gfc_se. + * trans-intrinsic.c (gfc_conv_intrinsic_size): Set it for SIZE. + +2006-03-06 Paul Thomas + Erik Edelmann + + * trans-array.c (gfc_trans_dealloc_allocated): New function. + (gfc_trans_deferred_array): Use it, instead of inline code. + * trans-array.h: Prototype for gfc_trans_dealloc_allocated(). + * trans-expr.c (gfc_conv_function_call): Deallocate allocated + ALLOCATABLE, INTENT(OUT) arguments upon procedure entry. + +2006-03-06 Paul Thomas + + PR fortran/26107 + * resolve.c (resolve_function): Add name after test for pureness. + + PR fortran/19546 + * trans-expr.c (gfc_conv_variable): Detect reference to parent result, + store current_function_decl, replace with parent, whilst calls are + made to gfc_get_fake_result_decl, and restore afterwards. Signal this + to gfc_get_fake_result_decl with a new argument, parent_flag. + * trans-stmt.c (gfc_trans_return): gfc_get_fake_result_decl 2nd arg + is set to zero. + * trans.h: Add parent_flag to gfc_get_fake_result_decl prototype. + * trans-decl.c (gfc_get_fake_result_decl): On parent_flag, being set, + add decl to parent function. Replace refs to current_fake_result_decl + with refs to this_result_decl. + (gfc_generate_function_code): Null parent_fake_result_decl before the + translation of code for contained procedures. Set parent_flag to zero + in call to gfc_get_fake_result_decl. + * trans-intrinsic.c (gfc_conv_intrinsic_len): The same. + +2006-03-05 Steven G. Kargl + + * simplify.c (gfc_simplify_verify): Fix return when SET=''. + +2006-03-05 Erik Edelmann + + PR fortran/16136 + * symbol.c (conf_std): New macro. + (check_conflict): Use it to allow ALLOCATABLE dummy + arguments for F2003. + * trans-expr.c (gfc_conv_function_call): Pass the + address of the array descriptor when dummy argument is + ALLOCATABLE. + * interface.c (compare_allocatable): New function. + (compare_actual_formal): Use it. + * resolve.c (resolve_deallocate_expr, + resolve_allocate_expr): Check that INTENT(IN) variables + aren't (de)allocated. + * gfortran.texi (Fortran 2003 status): List ALLOCATABLE + dummy arguments as supported. + +2006-03-03 Roger Sayle + + * dependency.c (gfc_check_element_vs_element): Revert last change. + +2006-03-03 Roger Sayle + + * dependency.c (gfc_check_element_vs_element): Consider two + unordered scalar subscripts as (potentially) equal. + +2006-03-03 Roger Sayle + + * dependency.c (gfc_check_dependency): Call gfc_dep_resolver to + check whether two array references have a dependency. + (gfc_check_element_vs_element): Assume lref and rref must be + REF_ARRAYs. If gfc_dep_compare_expr returns -2, assume these + references could potentially overlap. + (gfc_dep_resolver): Whitespace and comment tweaks. Assume a + dependency if the references have different depths. Rewrite + final term to clarrify we only have a dependency for overlaps. + +2006-03-03 Thomas Koenig + + PR fortran/25031 + * trans-array.h: Adjust gfc_array_allocate prototype. + * trans-array.c (gfc_array_allocate): Change type of + gfc_array_allocatate to bool. Function returns true if + it operates on an array. Change second argument to gfc_expr. + Find last reference in chain. + If the function operates on an allocatable array, emit call to + allocate_array() or allocate64_array(). + * trans-stmt.c (gfc_trans_allocate): Code to follow to last + reference has been moved to gfc_array_allocate. + * trans.h: Add declaration for gfor_fndecl_allocate_array and + gfor_fndecl_allocate64_array. + (gfc_build_builtin_function_decls): Add gfor_fndecl_allocate_array + and gfor_fndecl_allocate64_array. + +2006-03-01 Roger Sayle + + * trans-stmt.c (generate_loop_for_temp_to_lhs): Add an additional + INVERT argument to invert the sense of the WHEREMASK argument. + Remove unneeded code to AND together a list of masks. + (generate_loop_for_rhs_to_temp): Likewise. + (gfc_trans_assign_need_temp): Likewise. + (gfc_trans_forall_1): Likewise. + (gfc_evaluate_where_mask): Likewise, add a new INVERT argument + to specify the sense of the MASK argument. + (gfc_trans_where_assign): Likewise. + (gfc_trans_where_2): Likewise. Restructure code that decides + whether we need to allocate zero, one or two temporary masks. + If this is a top-level WHERE (i.e. the incoming MASK is NULL), + we only need to allocate at most one temporary mask, and can + invert it's sense to provide the complementary pending execution + mask. Only calculate the size of the required temporary arrays + if we need any. + (gfc_trans_where): Update call to gfc_trans_where_2. + +2006-03-01 Paul Thomas + + * iresolve.c (gfc_resolve_dot_product): Remove any difference in + treatment of logical types. + * trans-intrinsic.c (gfc_conv_intrinsic_dot_product): New function. + + PR fortran/26393 + * trans-decl.c (gfc_get_symbol_decl): Extend condition that symbols + must be referenced to include unreferenced symbols in an interface + body. + + PR fortran/20938 + * trans-array.c (gfc_conv_resolve_dependencies): Add call to + gfc_are_equivalenced_arrays. + * symbol.c (gfc_free_equiv_infos, gfc_free_equiv_lists): New + functions. (gfc_free_namespace): Call them. + * trans-common.c (copy_equiv_list_to_ns): New function. + (add_equivalences): Call it. + * gfortran.h: Add equiv_lists to gfc_namespace and define + gfc_equiv_list and gfc_equiv_info. + * dependency.c (gfc_are_equivalenced_arrays): New function. + (gfc_check_dependency): Call it. + * dependency.h: Prototype for gfc_are_equivalenced_arrays. + +2006-03-01 Roger Sayle + + * dependency.c (gfc_is_same_range): Compare the stride, lower and + upper bounds when testing array reference ranges for equality. + (gfc_check_dependency): Fix indentation whitespace. + (gfc_check_element_vs_element): Likewise. + (gfc_dep_resolver): Likewise. + +2006-02-28 Thomas Koenig + + * trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc): + If the mask expression exists and has rank 0, enclose the + generated loop in an "if (mask)". Put the default + initialization into the else branch. + +2006-02-25 Thomas Koenig + + PR fortran/23092 + * trans-intrinsic.c (gfc_conv_intrinsic_arith): If the + mask expression exists and has rank 0, enclose the generated + loop in an "if (mask)". + * (gfc_conv_intrinsic_minmaxloc): Likewise. + +2006-02-24 Paul Thomas + + PR fortran/26409 + * resolve.c (resolve_contained_functions, resolve_types, + gfc_resolve): Revert patch of 2006-02-19. + +2006-02-24 Paul Thomas + + PR fortran/24519 + * dependency.c (gfc_is_same_range): Correct typo. + (gfc_check_section_vs_section): Call gfc_is_same_range. + + PR fortran/25395 + * trans-common.c (add_equivalences): Add a new flag that is set when + an equivalence is seen that prevents more from being reset until the + start of a new traversal of the list, thus ensuring completion of + all the equivalences. + +2006-02-23 Erik Edelmann + + * module.c (read_module): Remove redundant code lines. + +2006-02-20 Rafael Ãvila de Espíndola + * Make-lang.in (FORTRAN): Remove + (.PHONY): Remove F95 and f95. Add fortran + +2006-02-20 Roger Sayle + + * trans-stmt.c (gfc_trans_where_2): Avoid updating unused current + execution mask for empty WHERE/ELSEWHERE clauses. Don't allocate + temporary mask arrays if they won't be used. + +2006-02-20 Roger Sayle + + * trans-stmt.c (gfc_trans_where_assign): Remove code to handle + traversing a linked list of MASKs. The MASK is now always a + single element requiring no ANDing during the assignment. + +2006-02-19 Thomas Koenig + + * gfortran.texi: Document environment variables which + influence runtime behavior. + +2006-02-19 H.J. Lu + + * resolve.c (resolve_contained_functions): Call resolve_entries + first. + (resolve_types): Remove calls to resolve_entries and + resolve_contained_functions. + (gfc_resolve): Call resolve_contained_functions. + +2006-02-19 Erik Edelmann + + PR fortran/26201 + * intrinsic.c (gfc_convert_type_warn): Call + gfc_intrinsic_symbol() on the newly created symbol. + +2006-02-19 Paul Thomas + + PR fortran/25054 + * resolve.c (is_non_constant_shape_array): New function. + (resolve_fl_variable): Remove code for the new function and call it. + (resolve_fl_namelist): New function. Add test for namelist array + with non-constant shape, using is_non_constant_shape_array. + (resolve_symbol): Remove code for resolve_fl_namelist and call it. + + PR fortran/25089 + * match.c (match_namelist): Increment the refs field of an accepted + namelist object symbol. + * resolve.c (resolve_fl_namelist): Test namelist objects for a conflict + with contained or module procedures. + +2006-02-18 Roger Sayle + + * trans-stmt.c (struct temporary_list): Delete. + (gfc_trans_where_2): Major reorganization. Remove no longer needed + TEMP argument. Allocate and deallocate the control mask and + pending control mask locally. + (gfc_trans_forall_1): Delete TEMP local variable, and update + call to gfc_trans_where_2. No need to deallocate arrays after. + (gfc_evaluate_where_mask): Major reorganization. Change return + type to void. Pass in parent execution mask, MASK, and two + already allocated mask arrays CMASK and PMASK. On return + CMASK := MASK & COND, PMASK := MASK & !COND. MASK, CMASK and + CMASK may all be NULL, or refer to the same temporary arrays. + (gfc_trans_where): Update call to gfc_trans_where_2. We no + longer need a TEMP variable or to deallocate temporary arrays + allocated by gfc_trans_where_2. + +2006-02-18 Danny Smith + + * gfortran.h (gfc_add_attribute): Change uint to unsigned int. + * symbol.c (gfc_add_attribute): Likewise for definition. + * resolve.c (resolve_global_procedure): Likewise for variable 'type'. + +2006-02-17 Richard Sandiford + + * trans-common.c: Include rtl.h earlier. + * trans-decl.c: Likewise. + +2006-02-16 Jakub Jelinek + + PR fortran/26224 + * parse.c (parse_omp_do, parse_omp_structured_block): Call + gfc_commit_symbols and gfc_warning_check. + + * openmp.c (resolve_omp_clauses): Add a dummy case label to workaround + PR middle-end/26316. + +2006-02-16 Paul Thomas + + PR fortran/24557 + * trans-expr.c (gfc_add_interface_mapping): Use the actual argument + for character(*) arrays, rather than casting to the type and kind + parameters of the formal argument. + +2006-02-15 Toon Moene + + PR fortran/26054 + * options.c: Do not warn for Fortran 2003 features by default. + +2006-02-15 Tobias Schlüter + + * check.c: Update copyright years. + + * check.c (gfc_check_minloc_maxloc, check_reduction): Don't call + dim_range_check on not-present optional dim argument. + +2006-02-15 Jakub Jelinek + + PR libgomp/25938 + PR libgomp/25984 + * Make-lang.in (install-finclude-dir): New goal. + (fortran.install-common): Depend on install-finclude-dir. + * lang-specs.h: If not -nostdinc, add -I finclude. + +2006-02-14 Thomas Koenig + + PR fortran/25045 + * check.c (dim_check): Perform all checks if dim is optional. + (gfc_check_minloc_maxloc): Use dim_check and dim_rank_check + to check dim argument. + (check_reduction): Likewise. + +2006-02-14 Tobias Schlüter + + PR fortran/26277 + * io.c (match_ltag): Mark label as referenced. + +2006-02-14 Jakub Jelinek + Richard Henderson + Diego Novillo + + * invoke.texi: Document -fopenmp. + * gfortran.texi (Extensions): Document OpenMP. + + Backport from gomp-20050608-branch + * trans-openmp.c: Call build_omp_clause instead of + make_node when creating OMP_CLAUSE_* trees. + (gfc_trans_omp_reduction_list): Remove argument 'code'. + Adjust all callers. + + * trans.h (build4_v): Define. + * trans-openmp.c: Call build4_v to create OMP_PARALLEL nodes. + Call build3_v to create OMP_SECTIONS nodes. + + PR fortran/25162 + * openmp.c (gfc_match_omp_variable_list): Call gfc_set_sym_referenced + on all symbols added to the variable list. + + * openmp.c (gfc_match_omp_clauses): Fix check for non-INTRINSIC + procedure symbol in REDUCTION. + + * trans-openmp.c (gfc_trans_omp_array_reduction): Use gfc_add + for MINUS_EXPR OMP_CLAUSE_REDUCTION_CODE. + + * trans-openmp.c (gfc_trans_omp_do): Add PBLOCK argument. If PBLOCK + is non-NULL, evaluate INIT/COND/INCR and chunk size expressions in + that statement block. + (gfc_trans_omp_parallel_do): Pass non-NULL PBLOCK to gfc_trans_omp_do + for non-ordered non-static combined loops. + (gfc_trans_omp_directive): Pass NULL PBLOCK to gfc_trans_omp_do. + + * openmp.c: Include target.h and toplev.h. + (gfc_match_omp_threadprivate): Emit diagnostic if target does + not support TLS. + * Make-lang.in (fortran/openmp.o): Add dependencies on + target.h and toplev.h. + + * trans-decl.c (gfc_get_fake_result_decl): Set GFC_DECL_RESULT. + * trans-openmp.c (gfc_omp_privatize_by_reference): Make + DECL_ARTIFICIAL vars predetermined shared except GFC_DECL_RESULT. + (gfc_omp_disregard_value_expr): Handle GFC_DECL_RESULT. + (gfc_trans_omp_variable): New function. + (gfc_trans_omp_variable_list, gfc_trans_omp_reduction_list): Use it. + * trans.h (GFC_DECL_RESULT): Define. + + * trans-openmp.c (gfc_omp_firstprivatize_type_sizes): New function. + * f95-lang.c (LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES): Define. + * trans.h (gfc_omp_firstprivatize_type_sizes): New prototype. + + * trans-openmp.c (gfc_omp_privatize_by_reference): Return + true if a pointer has GFC_DECL_SAVED_DESCRIPTOR set. + (gfc_trans_omp_array_reduction, gfc_trans_omp_reduction_list): New + functions. + (gfc_trans_omp_clauses): Add WHERE argument. Call + gfc_trans_omp_reduction_list rather than gfc_trans_omp_variable_list + for reductions. + (gfc_trans_omp_do, gfc_trans_omp_parallel, gfc_trans_omp_parallel_do, + gfc_trans_omp_parallel_sections, gfc_trans_omp_parallel_workshare, + gfc_trans_omp_sections, gfc_trans_omp_single): Adjust + gfc_trans_omp_clauses callers. + + * openmp.c (omp_current_do_code): New var. + (gfc_resolve_omp_do_blocks): New function. + (gfc_resolve_omp_parallel_blocks): Call it. + (gfc_resolve_do_iterator): Add CODE argument. Don't propagate + predetermination if argument is !$omp do or !$omp parallel do + iteration variable. + * resolve.c (resolve_code): Call gfc_resolve_omp_do_blocks + for EXEC_OMP_DO. Adjust gfc_resolve_do_iterator caller. + * fortran.h (gfc_resolve_omp_do_blocks): New prototype. + (gfc_resolve_do_iterator): Add CODE argument. + + * trans.h (gfc_omp_predetermined_sharing, + gfc_omp_disregard_value_expr, gfc_omp_private_debug_clause): New + prototypes. + (GFC_DECL_COMMON_OR_EQUIV, GFC_DECL_CRAY_POINTEE): Define. + * trans-openmp.c (gfc_omp_predetermined_sharing, + gfc_omp_disregard_value_expr, gfc_omp_private_debug_clause): New + functions. + * trans-common.c (build_equiv_decl, build_common_decl, + create_common): Set GFC_DECL_COMMON_OR_EQUIV flag on the decls. + * trans-decl.c (gfc_finish_cray_pointee): Set GFC_DECL_CRAY_POINTEE + on the decl. + * f95-lang.c (LANG_HOOKS_OMP_PREDETERMINED_SHARING, + LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR, + LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE): Define. + + * openmp.c (resolve_omp_clauses): Remove extraneous comma. + + * symbol.c (check_conflict): Add conflict between cray_pointee and + threadprivate. + * openmp.c (gfc_match_omp_threadprivate): Fail if + gfc_add_threadprivate returned FAILURE. + (resolve_omp_clauses): Diagnose Cray pointees in SHARED, + {,FIRST,LAST}PRIVATE and REDUCTION clauses and Cray pointers in + {FIRST,LAST}PRIVATE and REDUCTION clauses. + + * resolve.c (omp_workshare_flag): New variable. + (resolve_function): Diagnose use of non-ELEMENTAL user defined + function in WORKSHARE construct. + (resolve_code): Cleanup forall_save use. Make sure omp_workshare_flag + is set to correct value in different contexts. + + * openmp.c (resolve_omp_clauses): Replace %s with '%s' when printing + variable name. + (resolve_omp_atomic): Likewise. + + PR fortran/24493 + * scanner.c (skip_free_comments): Set at_bol at the beginning of the + loop, not before it. + (skip_fixed_comments): Handle ! comments in the middle of line here + as well. + (gfc_skip_comments): Use skip_fixed_comments for FIXED_FORM even if + not at BOL. + (gfc_next_char_literal): Fix expected canonicalized *$omp string. + + * trans-openmp.c (gfc_trans_omp_do): Use make_node and explicit + initialization to build OMP_FOR instead of build. + + * trans-decl.c (gfc_gimplify_function): Invoke + diagnose_omp_structured_block_errors. + + * trans-openmp.c (gfc_trans_omp_master): Use OMP_MASTER. + (gfc_trans_omp_ordered): Use OMP_ORDERED. + + * gfortran.h (gfc_resolve_do_iterator, gfc_resolve_blocks, + gfc_resolve_omp_parallel_blocks): New prototypes. + * resolve.c (resolve_blocks): Renamed to... + (gfc_resolve_blocks): ... this. Remove static. + (gfc_resolve_forall): Adjust caller. + (resolve_code): Only call gfc_resolve_blocks if code->block != 0 + and not for EXEC_OMP_PARALLEL* directives. Call + gfc_resolve_omp_parallel_blocks for EXEC_OMP_PARALLEL* directives. + Call gfc_resolve_do_iterator if resolved successfully EXEC_DO + iterator. + * openmp.c: Include pointer-set.h. + (omp_current_ctx): New variable. + (gfc_resolve_omp_parallel_blocks, gfc_resolve_do_iterator): New + functions. + * Make-lang.in (fortran/openmp.o): Depend on pointer-set.h. + + * openmp.c (gfc_match_omp_clauses): For max/min/iand/ior/ieor, + look up symbol if it exists, use its name instead and, if it is not + INTRINSIC, issue diagnostics. + + * parse.c (parse_omp_do): Handle implied end do properly. + (parse_executable): If parse_omp_do returned ST_IMPLIED_ENDDO, + return it instead of continuing. + + * trans-openmp.c (gfc_trans_omp_critical): Update for changed + operand numbering. + (gfc_trans_omp_do, gfc_trans_omp_parallel, gfc_trans_omp_parallel_do, + gfc_trans_omp_parallel_sections, gfc_trans_omp_parallel_workshare, + gfc_trans_omp_sections, gfc_trans_omp_single): Likewise. + + * trans.h (gfc_omp_privatize_by_reference): New prototype. + * f95-lang.c (LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE): Redefine + to gfc_omp_privatize_by_reference. + * trans-openmp.c (gfc_omp_privatize_by_reference): New function. + + * trans-stmt.h (gfc_trans_omp_directive): Add comment. + + * openmp.c (gfc_match_omp_variable_list): Add ALLOW_COMMON argument. + Disallow COMMON matching if it is set. + (gfc_match_omp_clauses, gfc_match_omp_flush): Adjust all callers. + (resolve_omp_clauses): Show locus in error messages. Check that + variable types in reduction clauses are appropriate for reduction + operators. + + * resolve.c (resolve_symbol): Don't error if a threadprivate module + variable isn't SAVEd. + + * trans-openmp.c (gfc_trans_omp_do): Put count into BLOCK, not BODY. + Fix typo in condition. Fix DOVAR initialization. + + * openmp.c (gfc_match_omp_clauses): Match min/iand/ior/ieor + rather than .min. etc. + + * trans-openmpc.c (omp_not_yet): Remove. + (gfc_trans_omp_parallel_do): Keep listprivate clause on parallel. + Force creation of BIND_EXPR around the workshare construct. + (gfc_trans_omp_parallel_sections): Likewise. + (gfc_trans_omp_parallel_workshare): Likewise. + + * types.def (BT_I16, BT_FN_I16_VPTR_I16, + BT_FN_BOOL_VPTR_I16_I16, BT_FN_I16_VPTR_I16_I16): Add. + + * trans-openmp.c (gfc_trans_omp_clauses): Create OMP_CLAUSE_DEFAULT. + (gfc_trans_omp_code): New function. + (gfc_trans_omp_do): Use it, remove omp_not_yet uses. + (gfc_trans_omp_parallel, gfc_trans_omp_single): Likewise. + (gfc_trans_omp_sections): Likewise. Only treat empty last section + specially if lastprivate clause is present. + * f95-lang.c (gfc_init_builtin_functions): Create BUILT_IN_TRAP + builtin. + + * trans-openmp.c (gfc_trans_omp_variable_list): Update for + OMP_CLAUSE_DECL name change. + (gfc_trans_omp_do): Likewise. + + * trans-openmp.c (gfc_trans_omp_clauses): Create OMP_CLAUSE_REDUCTION + clauses. + (gfc_trans_omp_atomic): Build OMP_ATOMIC instead of expanding + sync builtins directly. + (gfc_trans_omp_single): Build OMP_SINGLE statement. + + * trans-openmp.c (gfc_trans_add_clause): New. + (gfc_trans_omp_variable_list): Take a tree code and build the clause + node here. Link it to the head of a list. + (gfc_trans_omp_clauses): Update to match. + (gfc_trans_omp_do): Use gfc_trans_add_clause. + + * trans-openmp.c (gfc_trans_omp_clauses): Change second argument to + gfc_omp_clauses *. Use gfc_evaluate_now instead of creating + temporaries by hand. + (gfc_trans_omp_atomic, gfc_trans_omp_critical): Use buildN_v macros. + (gfc_trans_omp_do): New function. + (gfc_trans_omp_master): Dont' check for gfc_trans_code returning NULL. + (gfc_trans_omp_parallel): Adjust gfc_trans_omp_clauses caller. + Use buildN_v macros. + (gfc_trans_omp_parallel_do, gfc_trans_omp_parallel_sections, + gfc_trans_omp_parallel_workshare, gfc_trans_omp_sections, + gfc_trans_omp_single, gfc_trans_omp_workshare): New functions. + (gfc_trans_omp_directive): Use them. + * parse.c (parse_omp_do): Allow new_st.op == EXEC_NOP. + * openmp.c (resolve_omp_clauses): Check for list items present + in multiple clauses. + (resolve_omp_do): Check that iteration variable is not THREADPRIVATE + and is not present in any clause variable lists other than PRIVATE + or LASTPRIVATE. + + * gfortran.h (symbol_attribute): Add threadprivate bit. + (gfc_common_head): Add threadprivate member, change use_assoc + and saved into char to save space. + (gfc_add_threadprivate): New prototype. + * symbol.c (check_conflict): Handle threadprivate. + (gfc_add_threadprivate): New function. + (gfc_copy_attr): Copy threadprivate. + * trans-openmp.c (gfc_trans_omp_clauses): Avoid creating a temporary + if IF or NUM_THREADS is constant. Create OMP_CLAUSE_SCHEDULE and + OMP_CLAUSE_ORDERED. + * resolve.c (resolve_symbol): Complain if a THREADPRIVATE symbol + outside a module and not in COMMON has is not SAVEd. + (resolve_equivalence): Ensure THREADPRIVATE objects don't get + EQUIVALENCEd. + * trans-common.c: Include target.h and rtl.h. + (build_common_decl): Set DECL_TLS_MODEL if THREADPRIVATE. + * trans-decl.c: Include rtl.h. + (gfc_finish_var_decl): Set DECL_TLS_MODEL if THREADPRIVATE. + * dump-parse-tree.c (gfc_show_attr): Handle THREADPRIVATE. + * Make-lang.in (fortran/trans-decl.o): Depend on $(RTL_H). + (fortran/trans-common.o): Depend on $(RTL_H) and $(TARGET_H). + * openmp.c (gfc_match_omp_variable_list): Ensure COMMON block + is from current namespace. + (gfc_match_omp_threadprivate): Rewrite. + (resolve_omp_clauses): Check some clause restrictions. + * module.c (ab_attribute): Add AB_THREADPRIVATE. + (attr_bits): Add THREADPRIVATE. + (mio_symbol_attribute, mio_symbol_attribute): Handle threadprivate. + (load_commons, write_common, write_blank_common): Adjust for type + change of saved, store/load threadprivate bit from the integer + as well. + + * types.def (BT_FN_UINT_UINT): New. + (BT_FN_VOID_UINT_UINT): Remove. + + * trans-openmp.c (gfc_trans_omp_clauses, gfc_trans_omp_barrier, + gfc_trans_omp_critical, gfc_trans_omp_flush, gfc_trans_omp_master, + gfc_trans_omp_ordered, gfc_trans_omp_parallel): New functions. + (gfc_trans_omp_directive): Use them. + + * openmp.c (expr_references_sym): Add SE argument, don't look + into SE tree. + (is_conversion): New function. + (resolve_omp_atomic): Adjust expr_references_sym callers. Handle + promoted expressions. + * trans-openmp.c (gfc_trans_omp_atomic): New function. + (gfc_trans_omp_directive): Call it. + + * f95-lang.c (builtin_type_for_size): New function. + (gfc_init_builtin_functions): Initialize synchronization and + OpenMP builtins. + * types.def: New file. + * Make-lang.in (f95-lang.o): Depend on $(BUILTINS_DEF) and + fortran/types.def. + + * trans-openmp.c: Rename GOMP_* tree codes into OMP_*. + + * dump-parse-tree.c (show_symtree): Don't crash if ns->proc_name + is NULL. + + * dump-parse-tree.c (gfc_show_namelist, gfc_show_omp_node): New + functions. + (gfc_show_code_node): Call gfc_show_omp_node for EXEC_OMP_* nodes. + + * parse.c (parse_omp_do): Call pop_state before next_statement. + * openmp.c (expr_references_sym, resolve_omp_atomic, resolve_omp_do): + New functions. + (gfc_resolve_omp_directive): Call them. + * match.c (match_exit_cycle): Issue error if EXIT or CYCLE statement + leaves an OpenMP structured block or if EXIT terminates !$omp do + loop. + + * Make-lang.in (F95_PARSER_OBJS): Add fortran/openmp.o. + (F95_OBJS): Add fortran/trans-openmp.o. + (fortran/trans-openmp.o): Depend on $(GFORTRAN_TRANS_DEPS). + * lang.opt: Add -fopenmp option. + * options.c (gfc_init_options): Initialize it. + (gfc_handle_option): Handle it. + * gfortran.h (ST_OMP_ATOMIC, ST_OMP_BARRIER, ST_OMP_CRITICAL, + ST_OMP_END_CRITICAL, ST_OMP_END_DO, ST_OMP_END_MASTER, + ST_OMP_END_ORDERED, ST_OMP_END_PARALLEL, ST_OMP_END_PARALLEL_DO, + ST_OMP_END_PARALLEL_SECTIONS, ST_OMP_END_PARALLEL_WORKSHARE, + ST_OMP_END_SECTIONS, ST_OMP_END_SINGLE, ST_OMP_END_WORKSHARE, + ST_OMP_DO, ST_OMP_FLUSH, ST_OMP_MASTER, ST_OMP_ORDERED, + ST_OMP_PARALLEL, ST_OMP_PARALLEL_DO, ST_OMP_PARALLEL_SECTIONS, + ST_OMP_PARALLEL_WORKSHARE, ST_OMP_SECTIONS, ST_OMP_SECTION, + ST_OMP_SINGLE, ST_OMP_THREADPRIVATE, ST_OMP_WORKSHARE): New + statement codes. + (OMP_LIST_PRIVATE, OMP_LIST_FIRSTPRIVATE, OMP_LIST_LASTPRIVATE, + OMP_LIST_COPYPRIVATE, OMP_LIST_SHARED, OMP_LIST_COPYIN, + OMP_LIST_PLUS, OMP_LIST_REDUCTION_FIRST, OMP_LIST_MULT, + OMP_LIST_SUB, OMP_LIST_AND, OMP_LIST_OR, OMP_LIST_EQV, + OMP_LIST_NEQV, OMP_LIST_MAX, OMP_LIST_MIN, OMP_LIST_IAND, + OMP_LIST_IOR, OMP_LIST_IEOR, OMP_LIST_REDUCTION_LAST, OMP_LIST_NUM): + New OpenMP variable list types. + (gfc_omp_clauses): New typedef. + (gfc_get_omp_clauses): Define. + (EXEC_OMP_CRITICAL, EXEC_OMP_DO, EXEC_OMP_FLUSH, EXEC_OMP_MASTER, + EXEC_OMP_ORDERED, EXEC_OMP_PARALLEL, EXEC_OMP_PARALLEL_DO, + EXEC_OMP_PARALLEL_SECTIONS, EXEC_OMP_PARALLEL_WORKSHARE, + EXEC_OMP_SECTIONS, EXEC_OMP_SINGLE, EXEC_OMP_WORKSHARE, + EXEC_OMP_ATOMIC, EXEC_OMP_BARRIER, EXEC_OMP_END_NOWAIT, + EXEC_OMP_END_SINGLE): New OpenMP gfc_exec_op codes. + (struct gfc_code): Add omp_clauses, omp_name, omp_namelist + and omp_bool fields to ext union. + (flag_openmp): Declare. + (gfc_free_omp_clauses, gfc_resolve_omp_directive): New prototypes. + * scanner.c (openmp_flag, openmp_locus): New variables. + (skip_free_comments, skip_fixed_comments, gfc_next_char_literal): + Handle OpenMP directive lines and conditional compilation magic + comments. + * parse.h (COMP_OMP_STRUCTURED_BLOCK): New compile state. + * parse.c (decode_omp_directive, parse_omp_do, parse_omp_atomic, + parse_omp_structured_block): New functions. + (next_free, next_fixed): Parse OpenMP directives. + (case_executable, case_exec_markers, case_decl): Add ST_OMP_* + codes. + (gfc_ascii_statement): Handle ST_OMP_* codes. + (parse_executable): Rearrange the loop slightly, so that + parse_omp_do can return next_statement. + * match.h (gfc_match_omp_eos, gfc_match_omp_atomic, + gfc_match_omp_barrier, gfc_match_omp_critical, gfc_match_omp_do, + gfc_match_omp_flush, gfc_match_omp_master, gfc_match_omp_ordered, + gfc_match_omp_parallel, gfc_match_omp_parallel_do, + gfc_match_omp_parallel_sections, gfc_match_omp_parallel_workshare, + gfc_match_omp_sections, gfc_match_omp_single, + gfc_match_omp_threadprivate, gfc_match_omp_workshare, + gfc_match_omp_end_nowait, gfc_match_omp_end_single): New prototypes. + * resolve.c (resolve_blocks): Ignore EXEC_OMP_* block directives. + (resolve_code): Call gfc_resolve_omp_directive on EXEC_OMP_* + directives. + * trans.c (gfc_trans_code): Call gfc_trans_omp_directive for + EXEC_OMP_* directives. + * st.c (gfc_free_statement): Handle EXEC_OMP_* statement freeing. + * trans-stmt.h (gfc_trans_omp_directive): New prototype. + * openmp.c: New file. + * trans-openmp.c: New file. + +2006-02-13 Andrew Pinski + Jakub Jelinek + + PR fortran/26246 + * trans-decl.c (gfc_get_symbol_decl, gfc_get_fake_result_decl): Use + gfc_add_decl_to_function rather than gfc_finish_var_decl on length. + +2006-02-13 Paul Thomas + + PR fortran/26074 + PR fortran/25103 + * resolve.c (resolve_symbol): Extend the requirement that module + arrays have constant bounds to those in the main program. At the + same time simplify the array bounds, to avoiding trapping parameter + array references, and exclude automatic character length from main + and modules. Rearrange resolve_symbol and resolve_derived to put as + each flavor together, as much as is possible and move all specific + code for flavors FL_VARIABLE, FL_PROCEDURE and FL_PARAMETER into new + functions. + (resolve_fl_var_and_proc, resolve_fl_variable, resolve_fl_procedure): + New functions to do work of resolve_symbol. + (resolve_index_expr): New function that is called from resolved_symbol + and is extracted from resolve_charlen. + (resolve_charlen): Call this new function. + (resolve_fl_derived): Renamed resolve_derived to be consistent with + the naming of the new functions for the other flavours. Change the + charlen checking so that the style is consistent with other similar + checks. Add the generation of the gfc_dt_list, removed from resolve_ + symbol. + + PR fortran/20861 + * resolve.c (resolve_actual_arglist): Prevent internal procedures + from being dummy arguments. + + PR fortran/20871 + * resolve.c (resolve_actual_arglist): Prevent pure but non-intrinsic + procedures from being dummy arguments. + + PR fortran/25083 + * resolve.c (check_data_variable): Add test that data variable is in + COMMON. + + PR fortran/25088 + * resolve.c (resolve_call): Add test that the subroutine does not + have a type. + +2006-02-12 Erik Edelmann + + PR fortran/25806 + * trans-array.c (gfc_trans_allocate_array_storage): New argument + dealloc; free the temporary only if dealloc is true. + (gfc_trans_allocate_temp_array): New argument bool dealloc, to be + passed onwards to gfc_trans_allocate_array_storage. + (gfc_trans_array_constructor, gfc_conv_loop_setup): Update call to + gfc_trans_allocate_temp_array. + * trans-array.h (gfc_trans_allocate_temp_array): Update function + prototype. + * trans-expr.c (gfc_conv_function_call): Set new argument 'dealloc' + to gfc_trans_allocate_temp_array to false in case of functions + returning pointers. + (gfc_trans_arrayfunc_assign): Return NULL for functions returning + pointers. + +2006-02-10 Steven G. Kargl + + PR fortran/20858 + *decl.c (variable_decl): Improve error message. Remove initialization + typespec. Wrap long line. + *expr.c (gfc_check_pointer_assign): Permit checking of type, kind type, + and rank. + *simplify.c (gfc_simplify_null): Ensure type, kind type, and rank + are set. + + +2006-02-10 Tobias Schlüter + + PR fortran/14771 + * arith.c (eval_intrinsic): Accept INTRINSIC_PARENTHESES. + * expr.c (check_intrinsic_op): Likewise. + * module.c (mio_expr): Likewise. + +2006-02-09 Tobias Schlüter + + * dump-parse-tree.c: Update copyright years. + * matchexp.c: Likewise. + * module.c: Likewise. + + PR fortran/14771 + * gfortran.h (gfc_intrinsic_op): Add INTRINSIC_PARENTHESES. + * dump-parse-tree (gfc_show_expr): Handle INTRINSIC_PARENTHESES. + * expr.c (simplify_intrinsic_op): Treat INTRINSIC_PARENTHESES as + if it were INTRINSIC_UPLUS. + * resolve.c (resolve_operator): Handle INTRINSIC_PARENTHESES. + * match.c (intrinsic_operators): Add INTRINSIC_PARENTHESES. + * matchexp.c (match_primary): Record parentheses surrounding + numeric expressions. + * module.c (intrinsics): Add INTRINSIC_PARENTHESES for module + dumping. + * trans-expr.c (gfc_conv_expr_op): Handle INTRINSIC_PARENTHESES. + +2006-02-09 Paul Thomas + + PR fortran/26038 + * trans-stmt.c (gfc_trans_allocate): Provide assumed character length + scalar with missing backend_decl for the hidden dummy charlen. + + PR fortran/25059 + * interface.c (gfc_extend_assign): Remove detection of non-PURE + subroutine in assignment interface, with gfc_error, and put it in + * resolve.c (resolve_code). + + PR fortran/25070 + * interface.c (gfc_procedure_use): Flag rank checking for non- + elemental, contained or interface procedures in call to + (compare_actual_formal), where ranks are checked for assumed + shape arrays.. + +2006-02-08 Francois-Xavier Coudert + + PR libfortran/25425 + * trans-decl.c (gfc_generate_function_code): Add new argument, + pedantic, to set_std call. + +2006-02-06 Thomas Koenig + + PR libfortran/23815 + * gfortran.texi: Document the GFORTRAN_CONVERT_UNIT environment + variable. + * invoke.texi: Mention the "Runtime" chapter. + Document the -fconvert= option. + * gfortran.h: Add options_convert. + * lang.opt: Add fconvert=little-endian, fconvert=big-endian, + fconvert=native and fconvert=swap. + * trans-decl.c (top level): Add gfor_fndecl_set_convert. + (gfc_build_builtin_function_decls): Set gfor_fndecl_set_convert. + (gfc_generate_function_code): If -fconvert was specified, + and this is the main program, add a call to set_convert(). + * options.c: Handle the -fconvert options. + +2006-02-06 Roger Sayle + + * trans-stmt.c (gfc_evaluate_where_mask): Allow the NMASK argument + to be NULL to indicate that the not mask isn't required. + (gfc_trans_where_2): Remove PMASK argument. Avoid calculating the + pending mask for the last clause of a WHERE chain. Update recursive + call. + (gfc_trans_forall_1): Update call to gfc_trans_where_2. + (gfc_trans_where): Likewise. + +2006-02-06 Jakub Jelinek + + Backport from gomp-20050608-branch + * trans-decl.c (create_function_arglist): Handle dummy functions. + + * trans-decl.c (gfc_get_symbol_decl): Revert explicit setting of + TYPE_SIZE_UNIT. + (gfc_trans_vla_type_sizes): Also "gimplify" + GFC_TYPE_ARRAY_DATAPTR_TYPE for GFC_DESCRIPTOR_TYPE_P types. + * trans-array.c (gfc_trans_deferred_array): Call + gfc_trans_vla_type_sizes. + + * trans-decl.c (saved_function_decls, saved_parent_function_decls): + Remove unnecessary initialization. + (create_function_arglist): Make sure __result has complete type. + (gfc_get_fake_result_decl): Change current_fake_result_decl into + a tree chain. For entry master, create a separate variable + for each result name. For BT_CHARACTER results, call + gfc_finish_var_decl on length even if it has been already created, + but not pushdecl'ed. + (gfc_trans_vla_type_sizes): For function/entry result, adjust + result value type, not the FUNCTION_TYPE. + (gfc_generate_function_code): Adjust for current_fake_result_decl + changes. + (gfc_trans_deferred_vars): Likewise. Call gfc_trans_vla_type_sizes + even on result if it is assumed-length character. + + * trans-decl.c (gfc_trans_dummy_character): Add SYM argument. + Call gfc_trans_vla_type_sizes. + (gfc_trans_auto_character_variable): Call gfc_trans_vla_type_sizes. + (gfc_trans_vla_one_sizepos, gfc_trans_vla_type_sizes_1, + gfc_trans_vla_type_sizes): New functions. + (gfc_trans_deferred_vars): Adjust gfc_trans_dummy_character + callers. Call gfc_trans_vla_type_sizes on assumed-length + character parameters. + * trans-array.c (gfc_trans_array_bounds, + gfc_trans_auto_array_allocation, gfc_trans_dummy_array_bias): Call + gfc_trans_vla_type_sizes. + * trans.h (gfc_trans_vla_type_sizes): New prototype. + + * trans-decl.c (gfc_build_qualified_array): For non-assumed-size + arrays without constant size, create also an index var for + GFC_TYPE_ARRAY_SIZE (type). If the type is incomplete, complete + it as 0..size-1. + (gfc_create_string_length): Don't call gfc_defer_symbol_init + if just creating DECL_ARGUMENTS. + (gfc_get_symbol_decl): Call gfc_finish_var_decl and + gfc_defer_symbol_init even if ts.cl->backend_decl is already + set to a VAR_DECL that doesn't have DECL_CONTEXT yet. + (create_function_arglist): Rework, so that hidden length + arguments for CHARACTER parameters are created together with + the parameters. Resolve ts.cl->backend_decl for CHARACTER + parameters. If the argument is a non-constant length array + or CHARACTER, ensure PARM_DECL has different type than + its DECL_ARG_TYPE. + (generate_local_decl): Call gfc_get_symbol_decl even + for non-referenced non-constant length CHARACTER parameters + after optionally issuing warnings. + * trans-array.c (gfc_trans_array_bounds): Set last stride + to GFC_TYPE_ARRAY_SIZE (type) to initialize it as well. + (gfc_trans_dummy_array_bias): Initialize GFC_TYPE_ARRAY_SIZE (type) + variable as well. + + * trans-expr.c (gfc_conv_expr_val): Fix comment typo. + + * trans-stmt.c (gfc_trans_simple_do): Fix comment. + +2006-02-04 Roger Sayle + + * dependency.c (gfc_check_dependency): Remove unused vars and nvars + arguments. Replace with an "identical" argument. A full array + reference to the same symbol is a dependency if identical is true. + * dependency.h (gfc_check_dependency): Update prototype. + * trans-array.h (gfc_check_dependency): Delete duplicate prototype. + * trans-stmt.c: #include dependency.h for gfc_check_dependency. + (gfc_trans_forall_1): Update calls to gfc_check_dependency. + (gfc_trans_where_2): Likewise. Remove unneeded variables. + (gfc_trans_where_3): New function for simple non-dependent WHEREs. + (gfc_trans_where): Call gfc_trans_where_3 to translate simple + F90-style WHERE statements without internal dependencies. + * Make-lang.in (trans-stmt.o): Depend upon dependency.h. + +2006-02-05 H.J. Lu + + PR fortran/26041 + PR fortran/26064 + * resolve.c (resolve_types): New function. + (resolve_codes): Likewise. + (gfc_resolve): Use them. + +2006-02-05 Roger Sayle + + * trans-stmt.c (gfc_evaluate_where_mask): Use LOGICAL*1 for WHERE + masks instead of LOGICAL*4. + +2006-02-05 Jakub Jelinek + + * resolve.c (resolve_symbol): Initialize constructor_expr to NULL. + +2006-02-04 Thomas Koenig + + PR fortran/25075 + check.c (identical_dimen_shape): New function. + (check_dot_product): Use identical_dimen_shape() to check sizes + for dot_product. + (gfc_check_matmul): Likewise. + (gfc_check_merge): Check conformance between tsource and fsource + and between tsource and mask. + (gfc_check_pack): Check conformance between array and mask. + +2006-02-03 Steven G. Kargl + Paul Thomas + + PR fortran/20845 + * resolve.c (resolve_symbol): Default initialization of derived type + component reguires the SAVE attribute. + +2006-02-02 Steven G. Kargl + + PR fortran/24958 + match.c (gfc_match_nullify): Free the list from head not tail. + + PR fortran/25072 + * match.c (match_forall_header): Fix internal error caused by bogus + gfc_epxr pointers. + + +2006-01-31 Thomas Koenig + + PR fortran/26039 + expr.c (gfc_check_conformance): Reorder error message + to avoid plural. + check.c(gfc_check_minloc_maxloc): Call gfc_check_conformance + for checking arguments array and mask. + (check_reduction): Likewise. + +2006-01-30 Erik Edelmann + + PR fortran/24266 + * trans-io.c (set_internal_unit): Check the rank of the + expression node itself instead of its symbol. + +2006-01-29 Paul Thomas + + PR fortran/18578 + PR fortran/18579 + PR fortran/20857 + PR fortran/20885 + * interface.c (compare_actual_formal): Error for INTENT(OUT or INOUT) + if actual argument is not a variable. + +2006-01-28 Paul Thomas + + PR fortran/17911 + * expr.c (gfc_check_assign, gfc_check_pointer_assign): Emit error if + the lvalue is a use associated procedure. + + PR fortran/20895 + PR fortran/25030 + * expr.c (gfc_check_pointer_assign): Emit error if lvalue and rvalue + character lengths are not the same. Use gfc_dep_compare_expr for the + comparison. + * gfortran.h: Add prototype for gfc_dep_compare_expr. + * dependency.h: Remove prototype for gfc_dep_compare_expr. + +2006-01-27 Paul Thomas + + PR fortran/25964 + * resolve.c (resolve_function): Add GFC_ISYM_LOC to the list of + generic_ids exempted from assumed size checking. + +2006-01-27 Jakub Jelinek + + PR fortran/25324 + * Make-lang.in (fortran/scanner.o): Depend on toplev.h. + * lang.opt (fpreprocessed): New option. + * scanner.c: Include toplev.h. + (gfc_src_file, gfc_src_preprocessor_lines): New variables. + (preprocessor_line): Unescape filename if there were any + backslashes. + (load_file): If initial and gfc_src_file is not NULL, + use it rather than opening the file. If gfc_src_preprocessor_lines + has non-NULL elements, pass it to preprocessor_line. + (unescape_filename, gfc_read_orig_filename): New functions. + * gfortran.h (gfc_option_t): Add flag_preprocessed. + (gfc_read_orig_filename): New prototype. + * options.c (gfc_init_options): Clear flag_preprocessed. + (gfc_post_options): If flag_preprocessed, call + gfc_read_orig_filename. + (gfc_handle_option): Handle OPT_fpreprocessed. + * lang-specs.h: Pass -fpreprocessed to f951 if preprocessing + sources. + +2006-01-27 Erik Edelmann + + * symbol.c (free_old_symbol): Fix confusing comment, and add code + to free old_symbol->formal. + +2006-01-26 Paul Thomas + + PR fortran/25964 + * resolve.c (resolve_function): Exclude statement functions from + global reference checking. + + PR fortran/25084 + PR fortran/20852 + PR fortran/25085 + PR fortran/25086 + * resolve.c (resolve_function): Declare a gfc_symbol to replace the + references through the symtree to the symbol associated with the + function expresion. Give error on reference to an assumed character + length function is defined in an interface or an external function + that is not a dummy argument. + (resolve_symbol): Give error if an assumed character length function + is array-valued, pointer-valued, pure or recursive. Emit warning + that character(*) value functions are obsolescent in F95. + + PR fortran/25416 + * trans-expr.c (gfc_conv_function_call): The above patch to resolve.c + prevents any assumed character length function call from getting here + except intrinsics such as SPREAD. In this case, ensure that no + segfault occurs from referencing non-existent charlen->length-> + expr_type and provide a backend_decl for the charlen from the charlen + of the first actual argument. + + Cure temp name confusion. + * trans-expr.c (gfc_get_interface_mapping_array): Change name of + temporary from "parm" to "ifm" to avoid clash with temp coming from + trans-array.c. + +2006-01-25 Erik Edelmann + + PR fortran/25716 + * symbol.c (free_old_symbol): New function. + (gfc_commit_symbols): Use it. + (gfc_commit_symbol): New function. + (gfc_use_derived): Use it. + * gfortran.h: Add prototype for gfc_commit_symbol. + * intrinsic.c (gfc_find_function): Search in 'conversion' + if not found in 'functions'. + (gfc_convert_type_warn): Add a symtree to the new + expression node, and commit the new symtree->n.sym. + * resolve.c (gfc_resolve_index): Make sure typespec is + properly initialized. + +2006-01-23 Paul Thomas + + PR fortran/25901 + * decl.c (get_proc_name): Replace subroutine and function attributes + in "already defined" test by the formal arglist pointer being non-NULL. + + Fix regression in testing of admissability of attributes. + * symbol.c (gfc_add_attribute): If the current_attr has non-zero + intent, do not do the check for a dummy being used. + * decl.c (attr_decl1): Add current_attr.intent as the third argument + in the call to gfc_add_attribute. + * gfortran.h: Add the third argument to the prototype for + gfc_add_attribute. + +2006-01-21 Joseph S. Myers + + * gfortranspec.c (lang_specific_driver): Update copyright notice + date. + +2006-01-21 Paul Thomas + + PR fortran/25124 + PR fortran/25625 + * decl.c (get_proc_name): If there is an existing + symbol in the encompassing namespace, call errors + if it is a procedure of the same name or the kind + field is set, indicating a type declaration. + + PR fortran/20881 + PR fortran/23308 + PR fortran/25538 + PR fortran/25710 + * decl.c (add_global_entry): New function to check + for existing global symbol with this name and to + create new one if none exists. + (gfc_match_entry): Call add_global_entry before + matching argument lists for subroutine and function + entries. + * gfortran.h: Prototype for existing function, + global_used. + * resolve.c (resolve_global_procedure): New function + to check global symbols for procedures. + (resolve_call, resolve_function): Calls to this + new function for non-contained and non-module + procedures. + * match.c (match_common): Add check for existing + global symbol, creat one if none exists and emit + error if there is a clash. + * parse.c (global_used): Remove static and use the + gsymbol name rather than the new_block name, so that + the function can be called from resolve.c. + (parse_block_data, parse_module, add_global_procedure): + Improve checks for existing gsymbols. Emit error if + already defined or if references were to another type. + Set defined flag. + + PR fortran/PR24276 + * trans-expr.c (gfc_conv_aliased_arg): New function called by + gfc_conv_function_call that coverts an expression for an aliased + component reference to a derived type array into a temporary array + of the same type as the component. The temporary is passed as an + actual argument for the procedure call and is copied back to the + derived type after the call. + (is_aliased_array): New function that detects an array reference + that is followed by a component reference. + (gfc_conv_function_call): Detect an aliased actual argument with + is_aliased_array and convert it to a temporary and back again + using gfc_conv_aliased_arg. + +2006-01-19 Tobias Schlüter + + * gfortranspec.c: Update copyright years. + * trans.c: Likewise. + * trans-array.c: Likewise. + * trans-array.h: Likewise. + * trans-decl.c: Likewise. + * trans-stmt.c: Likewise. + * trans-stmt.h: Likewise. + * trans-types.c: Likewise. + +2006-01-18 Tobias Schlüter + + PR fortran/18540 + PR fortran/18937 + * gfortran.h (BBT_HEADER): Move definition up. + (gfc_st_label): Add BBT_HEADER, remove 'prev' and 'next'. + * io.c (format_asterisk): Adapt initializer. + * resolve.c (resolve_branch): Allow FORTRAN 66 cross-block GOTOs + as extension. + (warn_unused_label): Take gfc_st_label label as argument, adapt to + new data structure. + (gfc_resolve): Adapt call to warn_unused_label. + * symbol.c (compare_st_labels): New function. + (gfc_free_st_label, free_st_labels, gfc_get_st_label): Convert to + using balanced binary tree. + * decl.c (match_char_length, gfc_match_old_kind_spec): Do away + with 'cnt'. + (warn_unused_label): Adapt to binary tree. + * match.c (gfc_match_small_literal_int): Only set cnt if non-NULL. + * primary.c (match_kind_param): Do away with cnt. + +2006-01-18 Paul Thomas + + PR fortran/20869 + PR fortran/20875 + PR fortran/25024 + * symbol.c (check_conflict): Add pointer valued elemental + functions and internal procedures with the external attribute + to the list of conflicts. + (gfc_add_attribute): New catch-all function to perform the + checking of symbol attributes for attribute declaration + statements. + * decl.c (attr_decl1): Call gfc_add_attribute for each of - + (gfc_match_external, gfc_match_intent, gfc_match_intrinsic, + gfc_match_pointer, gfc_match_dimension, gfc_match_target): + Remove spurious calls to checks in symbol.c. Set the + attribute directly and use the call to attr_decl() for + checking. + * gfortran.h: Add prototype for gfc_add_attribute. + + PR fortran/25785 + * resolve.c (resolve_function): Exclude PRESENT from assumed size + argument checking. Replace strcmp's with comparisons with generic + codes. + +2006-01-16 Rafael Ãvila de Espíndola + + * gfortranspec.c (lang_specific_spec_functions): Remove. + +2006-01-16 Richard Guenther + + * trans-stmt.c (gfc_trans_if_1): Use fold_buildN and build_int_cst. + (gfc_trans_arithmetic_if): Likewise. + (gfc_trans_simple_do): Likewise. + (gfc_trans_do): Likewise. + (gfc_trans_do_while): Likewise. + (gfc_trans_logical_select): Likewise. + (gfc_trans_forall_loop): Likewise. + (generate_loop_for_temp_to_lhs): Likewise. + (generate_loop_for_rhs_to_temp): Likewise. + (gfc_trans_allocate): Likewise. + * trans.c (gfc_add_expr_to_block): Do not fold expr again. + +2006-01-16 Richard Guenther + + * trans-expr.c (gfc_conv_function_call): Use fold_build2. + * trans-stmt.c (gfc_trans_goto): Likewise. Use build_int_cst. + * trans.c (gfc_trans_runtime_check): Don't fold the condition + again. + +2006-01-13 Steven G. Kargl + + PR fortran/25756 + * symbol.c (gfc_free_st_label): Give variable meaningful name. Remove + unneeded parenthesis. Fix-up the head of the list (2 lines gleaned + from g95). + +2006-01-13 Diego Novillo + + * trans.c (gfc_add_expr_to_block): Do not fold tcc_statement + nodes. + +2006-01-11 Tobias Schlüter + + * parse.c (next_fixed): Remove superfluous string concatenation. + +2006-01-11 Bernhard Fischer + + PR fortran/25486 + * scanner.c (load_line): use maxlen to determine the line-length used + for padding lines in fixed form. + +2006-01-11 Paul Thomas + + PR fortran/25730 + * trans-types.c (copy_dt_decls_ifequal): Copy backend decl for + character lengths. + +2006-01-09 Andrew Pinski + + fortran/24936 + * trans-stmt.c (gfc_trans_pointer_assign_need_temp): Use fold_convert + to avoid type mismatch. + +2006-01-09 Andrew Pinski + + PR fortran/21977 + * trans-decl.c (gfc_generate_function_code): Move the NULLing of + current_fake_result_decl down to below generate_local_vars. + +2006-01-09 Feng Wang + + PR fortran/12456 + * trans-expr.c (gfc_to_single_character): New function that converts + string to single character if its length is 1. + (gfc_build_compare_string):New function that compare string and handle + single character specially. + (gfc_conv_expr_op): Use gfc_build_compare_string. + (gfc_trans_string_copy): Use gfc_to_single_character. + * trans-intrinsic.c (gfc_conv_intrinsic_strcmp): Use + gfc_build_compare_string. + * trans.h (gfc_build_compare_string): Add prototype. + +2006-01-09 Feng Wang + + * simplify.c (gfc_simplify_char): Use UCHAR_MAX instead of literal + constant. + (gfc_simplify_ichar): Get the result from unsinged char and in the + range 0 to UCHAR_MAX instead of CHAR_MIN to CHAR_MAX. + +2006-01-08 Erik Edelmann + + PR fortran/25093 + * resolve.c (resolve_fntype): Check that PUBLIC functions + aren't of PRIVATE type. + +2006-01-07 Tobias Schl"uter + + * decl.c (gfc_match_function_decl): Correctly error out in case of + omitted function argument list. + +2006-01-07 Paul Thomas + + PR fortran/22146 + * trans-array.c (gfc_reverse_ss): Remove static attribute. + (gfc_walk_elemental_function_args): Replace gfc_expr * argument for + the function call with the corresponding gfc_actual_arglist*. Change + code accordingly. + (gfc_walk_function_expr): Call to gfc_walk_elemental_function_args + now requires the actual argument list instead of the expression for + the function call. + * trans-array.h: Modify the prototype for gfc_walk_elemental_function_args + and provide a prototype for gfc_reverse_ss. + * trans-stmt.h (gfc_trans_call): Add the scalarization code for the case + where an elemental subroutine has array valued actual arguments. + + PR fortran/25029 + PR fortran/21256 + PR fortran/20868 + PR fortran/20870 + * resolve.c (check_assumed_size_reference): New function to check for upper + bound in assumed size array references. + (resolve_assumed_size_actual): New function to do a very restricted scan + of actual argument expressions of those procedures for which incomplete + assumed size array references are not allowed. + (resolve_function, resolve_call): Switch off assumed size checking of + actual arguments, except for elemental procedures and intrinsic + inquiry functions, in some circumstances. + (resolve_variable): Call check_assumed_size_reference. + +2006-01-05 Jerry DeLisle + + PR fortran/24268 + * io.c (next_char_not_space): New function that returns the next + character that is not white space. + (format_lex): Use the new function to skip whitespace within + a format string. + +2006-01-05 Erik Edelmann + + PR fortran/23675 + * expr.c (gfc_expr_set_symbols_referenced): New function. + * gfortran.h: Add a function prototype for it. + * resolve.c (resolve_function): Use it for + use associated character functions lengths. + * expr.c, gfortran.h, resolve.c: Updated copyright years. + +2006-01-03 Steven G. Kargl + + PR fortran/25101 + * resolve.c (resolve_forall_iterators): Check for scalar variables; + Check stride is nonzero. + +2006-01-02 Steven G. Kargl + + PR fortran/24640 + * parse.c (next_free): Check for whitespace after the label. + * match.c (gfc_match_small_literal_int): Initialize cnt variable. + +2006-01-01 Steven G. Kargl + + * ChangeLog: Split previous years into ... + * ChangeLog-2002: here. + * ChangeLog-2003: here. + * ChangeLog-2004: here. + * ChangeLog-2005: here. diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2007 b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2007 new file mode 100644 index 0000000000..4597cb58fd --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2007 @@ -0,0 +1,5769 @@ +2007-12-31 Paul Thomas + + PR fortran/34558 + * interface.c (gfc_compare_types): Prevent linked lists from + putting this function into an endless recursive loop. + +2007-12-26 Daniel Franke + + PR fortran/34532 + * gfortran.texi: Fixed section about implicit conversion of + logical and integer variables. + +2007-12-25 Tobias Burnus + + PR fortran/34514 + * decl.c (attr_decl1): Reject specifying the DIMENSION for + already initialized variable. + (do_parm): Reject PARAMETER for already initialized variable. + +2007-12-25 Daniel Franke + + PR fortran/34533 + * intrinsic.h (gfc_check_etime): Renamed to ... + (gfc_check_dtime_etime): ... this. + (gfc_check_etime_sub): Renamed to ... + (gfc_check_dtime_etime_sub): ... this. + (gfc_resolve_dtime_sub): New prototype. + * check.c (gfc_check_etime): Renamed to ... + (gfc_check_dtime_etime): ... this. + (gfc_check_etime_sub): Renamed to ... + (gfc_check_dtime_etime_sub): ... this. + * iresolve.c (gfc_resolve_dtime_sub): New implementation. + * intrinsic.c (add_functions): Removed alias from ETIME to DTIME, + added stand-alone intrinsic DTIME. + (add_subroutines): Adjusted check and resolve function names for + DTIME and ETIME. + * trans-intrinsic.c (gfc_conv_intrinsic_function): Added DTIME + to known functions in switch. + * intrinsic.texi (DTIME): Added paragraph about thread-safety, + fixed return value section. + (CPU_TIME): Clarified intent and added implementation notes. + +2007-12-23 Tobias Burnus + + PR fortran/34421 + * resolve.c (resolve_entries): Add standard error for functions + returning characters with different length. + +2007-12-23 Daniel Franke + + PR fortran/34536 + * matchexp.c (match_ext_mult_operand): Print warning for unary + operators following arithmetic ones by default. + (match_ext_add_operand): Likewise. + +2007-12-22 Daniel Franke + + PR fortran/34559 + * simplify.c (gfc_simplify_repeat): Added safeguard for empty + string literals. + +2007-12-22 Thomas Koenig + + PR fortran/34549 + * check.c (gfc_check_cshift): Add check that shift is + type INTEGER. + +2007-12-21 Jerry DeLisle + + PR fortran/34540 + * iresolve.c (gfc_resolve_cshift): Take optional dim path + only if the argument is an optional itself. + * iresolve.c (gfc_resolve_eoshift): Same. + +2007-12-21 Paul Thomas + + PR fortran/34438 + * trans-decl.c (gfc_finish_var_decl): Do not mark derived types + with default initializers as TREE_STATIC unless they are in the + main program scope. + (gfc_get_symbol_decl): Pass derived types with a default + initializer to gfc_defer_symbol_init. + (init_default_dt): Apply default initializer to a derived type. + (init_intent_out_dt): Call init_default_dt. + (gfc_trans_deferred_vars): Ditto. + + * module.c (read_module): Check sym->module is there before + using it in a string comparison. + +2007-12-20 Tobias Burnus + + PR fortran/34482 + * gfortran.texi (BOZ): Document behavior for complex + numbers. + * target-memory.h (gfc_convert_boz): Update prototype. + * target-memory.c (gfc_convert_boz): Add error check + and convert BOZ to smallest possible bit size. + * resolve.c (resolve_ordinary_assign): Check return value. + * expr.c (gfc_check_assign): Ditto. + * simplify.c (simplify_cmplx, gfc_simplify_dble, + gfc_simplify_float, gfc_simplify_real): Ditto. + +2007-12-19 Jerry DeLisle + + PR fortran/34325 + * match.h: New function declaration. + * match.c (gfc_match_parens): New function to look for mismatched + parenthesis. (gfc_match_if): Use new function to catch missing '('. + +2007-12-19 Daniel Franke + + PR fortran/34495 + * expr.c (check_init_expr): Check whether variables with flavor + FL_PARAMETER do have a value assigned. Added error messages where + appropriate. + * simplify.c (gfc_simplify_transfer): Added check if the MOLD + argument is a constant if working with initialization + expressions. + +2007-12-17 Tobias Burnus + + * intrinsic.c (add_functions): Undo change; mark float and + sngl as STD_F77. + * intrinsic.texi (FLOAT, SNGL): Change standard to F77 and later. + * gfortran.texi (BOZ): Make note about FLOAT etc. clearer. + +2007-12-16 Tobias Burnus + + PR fortran/34495 + * intrinsic.c (add_functions): Mark float and sngl as STD_GNU. + (gfc_intrinsic_func_interface): Reject REAL, DBLE and CMPLX + in initialization expressions for -std=f95. + +2007-12-16 Thomas Koenig + + PR fortran/34305 + * resolve.c (compare_bound): If either of the types of + the arguments isn't INTEGER, return CMP_UNKNOWN. + +2007-12-16 Tobias Burnus + + PR fortran/34246 + * trans-types.c (gfc_init_types): Change build_type_variant + to build_qualified_type. + (gfc_sym_type): Return gfc_character1_type_node for + character-returning bind(C) functions. + * trans-expr.c (gfc_conv_function_call): Do not set + se->string_length for character-returning bind(c) functions. + (gfc_trans_string_copy,gfc_trans_scalar_assign): + Support also single characters. + +2007-12-16 Bernhard Fischer + + * errors.c (gfc_notify_std): As originally stated but improperly + changed, disregard warnings_are_errors for deciding which buffer + to use for warnings. + +2007-12-16 Paul Thomas + + PR fortran/31213 + PR fortran/33888 + PR fortran/33998 + * trans-array.c (gfc_trans_array_constructor_value): If the + iterator variable does not have a backend_decl, use a local + temporary. + (get_elemental_fcn_charlen): New function to map the character + length of an elemental function onto its actual arglist. + (gfc_conv_expr_descriptor): Call the above so that the size of + the temporary can be evaluated. + * trans-expr.c : Include arith.h and change prototype of + gfc_apply_interface_mapping_to_expr to return void. Change all + references to gfc_apply_interface_mapping_to_expr accordingly. + (gfc_free_interface_mapping): Free the 'expr' field. + (gfc_add_interface_mapping): Add an argument for the actual + argument expression. This is copied to the 'expr' field of the + mapping. Only stabilize the backend_decl if the se is present. + Copy the character length expression and only add it's backend + declaration if se is present. Return without working on the + backend declaration for the new symbol if se is not present. + (gfc_map_intrinsic_function) : To simplify intrinsics 'len', + 'size', 'ubound' and 'lbound' and then to map the result. + (gfc_map_fcn_formal_to_actual): Performs the formal to actual + mapping for the case of a function found in a specification + expression in the interface being mapped. + (gfc_apply_interface_mapping_to_ref): Remove seen_result and + all its references. Remove the inline simplification of LEN + and call gfc_map_intrinsic_function instead. Change the + order of mapping of the actual arguments and simplifying + intrinsic functions. Finally, if a function maps to an + actual argument, call gfc_map_fcn_formal_to_actual. + (gfc_conv_function_call): Add 'e' to the call to + gfc_add_interface_mapping. + * dump-parse-tree.c (gfc_show_symbol_n): New function for + diagnostic purposes. + * gfortran.h : Add prototype for gfc_show_symbol_n. + * trans.h : Add 'expr' field to gfc_add_interface_mapping. + Add 'expr' to prototype for gfc_show_symbol_n. + * resolve.c (resolve_generic_f0): Set specific function as + referenced. + +2007-12-14 Tobias Burnus + + PR fortran/34438 + * resolve.c (resolve_symbol): Do not emit public-variable- + of-private-derived-type error for non-module variables. + +2007-12-14 Tobias Burnus + + PR fortran/34398 + * expr.c (gfc_check_assign): Add range checks for assignments of BOZs. + * resolve.c (resolve_ordinary_assign): Ditto. + * arith.c (gfc_range_check): Fix return value for complex numbers. + +2007-12-14 Daniel Franke + + PR fortran/34324 + * module.c (parse_atom): Fixed parsing of modules files whose + lines are terminated by CRLF. + +2007-12-13 Anton Korobeynikov + + * trans-decl.c (gfc_build_builtin_function_decls): Correct decl + construction for select_string() and internal_unpack() + +2007-12-13 Duncan Sands + Anton Korobeynikov + + * trans-expr.c (gfc_conv_structure): Make sure record constructors + for static variables are marked constant. + +2007-12-12 Tobias Burnus + + PR fortran/34254 + * decl.c (match_char_kind): Support use-associated/imported + kind parameters. + (gfc_match_kind_spec): Support als BT_CHARACTER, when + re-scanning kind spec. + +2007-12-11 Aldy Hernandez + + * decl.c (add_global_entry): Make type unsigned. + +2007-12-11 Bernhard Fischer + + * decl.c (match_prefix): Make seen_type a boolean. + (add_global_entry): Cache type distinction. + * trans-decl.c: Whitespace cleanup. + +2007-12-10 Tobias Burnus + + PR fortran/34425 + * interface.c (get_expr_storage_size): Use signed integer when + obtaining the bounds. + +2007-12-09 Jakub Jelinek + + PR fortran/22244 + * trans.h (struct array_descr_info): Forward declaration. + (gfc_get_array_descr_info): New prototype. + (enum gfc_array_kind): New type. + (struct lang_type): Add akind field. + (GFC_TYPE_ARRAY_AKIND): Define. + * trans-types.c: Include dwarf2out.h. + (gfc_build_array_type): Add akind argument. Adjust + gfc_get_array_type_bounds call. + (gfc_get_nodesc_array_type): Include proper debug info even for + assumed-size arrays. + (gfc_get_array_type_bounds): Add akind argument, set + GFC_TYPE_ARRAY_AKIND to it. + (gfc_sym_type, gfc_get_derived_type): Adjust gfc_build_array_type + callers. + (gfc_get_array_descr_info): New function. + * trans-array.c (gfc_trans_create_temp_array, + gfc_conv_expr_descriptor): Adjust gfc_get_array_type_bounds + callers. + * trans-stmt.c (gfc_trans_pointer_assign_need_temp): Likewise. + * trans-types.h (gfc_get_array_type_bounds): Adjust prototype. + * Make-lang.in (fortran/trans-types.o): Depend on dwarf2out.h. + * f95-lang.c (LANG_HOOKS_GET_ARRAY_DESCR_INFO): Define. + +2007-12-09 Paul Thomas + + PR fortran/32129 + * dump-parse-tree.c (gfc_show_expr_n): New function for + debugging. + * gfortran.h : Add prototype for gfc_show_expr_n. + * expr.c (simplify_constructor): Copy the constructor + expression and try to simplify that. If success, replace the + original. Otherwise discard the copy, keep going through + the structure and return success. + + PR fortran/31487 + * decl.c (build_struct): Pad out default initializers with + spaces to the component character length. + +2007-12-08 Tobias Burnus + + PR fortran/34342 + PR fortran/34345 + PR fortran/18026 + PR fortran/29471 + * gfortran.texi (BOZ literal constants): Improve documentation + and adapt for BOZ changes. + * Make-lang.ini (resolve.o): Add target-memory.h dependency. + * gfortran.h (gfc_expr): Add is_boz flag. + * expr.c: Include target-memory.h. + (gfc_check_assign): Support transferring BOZ for real/cmlx. + * resolve.c: Include target-memory.h + (resolve_ordinary_assign): Support transferring BOZ for real/cmlx. + * target-memory.c (gfc_convert_boz): New function. + * target-memory.c (gfc_convert_boz): Add prototype. + * primary.c (match_boz_constant): Set is_boz, enable F95 error + also without -pedantic, and allow for Fortran 2003 BOZ. + (match_real_constant): Fix comment. + * simplify.c (simplify_cmplx,gfc_simplify_dble,gfc_simplify_float, + gfc_simplify_real): Support Fortran 2003 BOZ. + +2007-12-08 Jakub Jelinek + + PR fortran/34359 + * gfortran.h (gfc_file): Remove sibling and down fields. + * scanner.c (file_changes, file_changes_cur, file_changes_count, + file_changes_allocated): New variables. + (add_file_change, report_file_change): New functions. + (change_file): Remove. + (gfc_start_source_files, gfc_end_source_files): Call + report_file_change instead of change_file. + (gfc_advance_line): Call report_file_change instead of change_file, + call it even if lb->file == lb->next->file. + (get_file): Revert last changes. + (preprocessor_line): Call add_file_change when entering or leaving + a file. + (load_file): Likewise. Set file_change[...].lb for all newly added + file changes. + +2007-12-06 Tobias Burnus + + PR fortran/34333 + * primary.c (match_boz_constant): Add gfc_notify_std diagnostics. + +2007-12-06 Paul Thomas + + PR fortran/34335 + * module.c (find_symbol): Do not return symtrees with unique + names, which shows that they are private. + +2007-12-05 Jakub Jelinek + + PR debug/33739 + * gfortran.h (gfc_file): Remove included_by field, add sibling and + down. + (gfc_start_source_files, gfc_end_source_files): New prototypes. + * parse.c (gfc_parse_file): Call gfc_start_source_files and + gfc_end_source_files instead of calling the debugging hooks directly. + * error.c (show_locus): Use up field instead of included_by. + * scanner.c (change_file, gfc_start_source_files, + gfc_end_source_files): New functions. + (gfc_advance_line): Call change_file instead of calling debug hooks + directly. + (get_file): Set up rather than included_by. Initialize down and + sibling. + (preprocessor_line, load_file): Don't set up field here. + +2007-12-05 Tobias Burnus + + PR fortran/34333 + * arith.h (gfc_compare_expr): Add operator argument, needed + for compare_real. + * arith.c (gfc_arith_init_1): Use mpfr_min instead of mpfr_cmp/set + to account for NaN. + (compare_real): New function, as mpfr_cmp but takes NaN into account. + (gfc_compare_expr): Use compare_real. + (compare_complex): Take NaN into account. + (gfc_arith_eq,gfc_arith_ne,gfc_arith_gt,gfc_arith_ge,gfc_arith_lt, + gfc_arith_le): Pass operator to gfc_compare_expr. + * resolve.c (compare_cases,resolve_select): Pass operator + to gfc_compare_expr. + * simplify.c (simplify_min_max): Take NaN into account. + +2007-12-04 Tobias Burnus + + PR fortran/34318 + * module.c (mio_gmp_real): Properly write NaN and Infinity. + +2007-12-02 Tobias Burnus + + PR fortran/34186 + * symbol.c (generate_isocbinding_symbol): Fix setting string length. + +2007-11-30 Tobias Burnus + + PR fortran/34133 + * match.h: Add bool allow_binding_name to gfc_match_bind_c. + * decl.c (match_attr_spec,gfc_match_bind_c_stmt,gfc_match_entry): + Adjust accordingly. + (gfc_match_bind_c): Add allow_binding_name argument, reject + binding name for dummy arguments. + (gfc_match_suffix,gfc_match_subroutine): Make use of + allow_binding_name. + +2007-11-30 Tobias Burnus + + PR fortran/34186 + * symbol.c (generate_isocbinding_symbol): Set string length. + * dump-parse-tree.c (gfc_show_attr): Show BIND(C) attribute. + * misc.c (gfc_basic_typename): Handle BT_VOID. + +2007-11-29 Steven G. Kargl + + PR fortran/34230 + * fortran/arith.c (gfc_check_real_range): Set intermediate values + to +-Inf and 0 when -fno-range-check is in effect. + * fortran/invoke.texi: Improve -fno-range-check description. + + PR fortran/34203 + * fortran/invoke.texi: Document the C escaped characters activated + by -fbackslash. + +2007-11-29 Tobias Burnus + + PR fortran/34248 + * trans-decl.c (generate_dependency_declarations): Check + for NULL pointers before accessing the string length. + +2007-11-29 Tobias Burnus + + PR fortran/34262 + * intrinsic.c (gfc_get_intrinsic_sub_symbol): Add comment. + (gfc_intrinsic_sub_interface): Copy elemental state if needed. + * iresolve.c (gfc_resolve_mvbits): Mark procedure as elemental. + +2007-11-28 Jakub Jelinek + + * trans-expr.c (gfc_trans_string_copy): Convert both dest and + src to void *. + + PR fortran/34247 + * trans-openmp.c (gfc_omp_privatize_by_reference): For REFERENCE_TYPE + pass by reference only PARM_DECLs or non-artificial decls. + +2007-11-27 Jerry DeLisle + + PR fortran/32928 + * decl.c (match_data_constant): Use gfc_match_init_expr to match the + array spec and set the initializer expression. + +2007-11-27 Jerry DeLisle + + PR fortran/34227 + * match.c (gfc_match_common): Add additional check for BLOCK DATA. + +2007-11-27 Paul Thomas + + PR fortran/29389 + *resolve.c (resolve_ordinary_assign): Use find_sym_in_expr to + test if a temporary should be written for a vector subscript + on the lhs. + + PR fortran/33850 + * restore.c (pure_stmt_function): Add prototype and new + function. Calls impure_stmt_fcn. + (pure_function): Call it. + (impure_stmt_fcn): New function. + + * expr.c (gfc_traverse_expr): Call *func for all expression + types, not just variables. Add traversal of character lengths, + iterators and component character lengths and arrayspecs. + (expr_set_symbols_referenced): Return false if not a variable. + * trans-stmt.c (forall_replace, forall_restore): Ditto. + * resolve.c (forall_index): Ditto. + (sym_in_expr): New function. + (find_sym_in_expr): Rewrite to traverse expression calling + sym_in_expr. + *trans-decl.c (expr_decls): New function. + (generate_expr_decls): Rewrite to traverse expression calling + expr_decls. + *match.c (check_stmt_fcn): New function. + (recursive_stmt_fcn): Rewrite to traverse expression calling + check_stmt_fcn. + +2007-11-27 Paul Thomas + + PR fortran/33541 + *interface.c (compare_actual_formal): Exclude assumed size + arrays from the possibility of scalar to array mapping. + * decl.c (get_proc_name): Fix whitespace problem. + + PR fortran/34231 + * gfortran.h : Add 'use_rename' bit to symbol_attribute. + * module.c : Add 'renamed' field to pointer_info.u.rsym. + (load_generic_interfaces): Add 'renamed' that is set after the + number_use_names is called. This is used to set the attribute + use_rename, which, in its turn identifies those symbols that + have not been renamed. + (load_needed): If pointer_info.u.rsym->renamed is set, then + set the use_rename attribute of the symbol. + (read_module): Correct an erroneous use of use_flag. Use the + renamed flag and the use_rename attribute to determine which + symbols are not renamed. + +2007-11-26 Steven G. Kargl + + PR fortran/34203 + * options.c: Change default behavior of backslash processing. + * invoke.texi: Update documentation. + +2007-11-25 Jerry DeLisle + + PR fortran/33152 + * decl.c (add_init_expr_to_sym): Remove error message. + * resolve.c (check_data_variable): Add new check for a data variable + that has an array spec, but no ref and issue an error. + * match.c (gfc_match_common): Remove error message. + +2007-11-25 Tobias Burnus + + PR fortran/34079 + * trans-types.c (gfc_return_by_reference, + gfc_get_function_type): Do not return result of + character-returning bind(C) functions as argument. + * trans-expr.c (gfc_conv_function_call): Ditto. + +2007-11-25 Jerry DeLisle + + PR fortran/34175 + * gfortran.texi: Document default forms assumed for various file + extensions. + +2007-11-25 Paul Thomas + + PR fortran/33499 + * decl.c (get_proc_name): If ENTRY statement occurs before type + specification, set the symbol untyped and ensure that it is in + the procedure namespace. + +2007-11-24 Paul Thomas + + PR fortran/33541 + * module.c (find_symtree_for_symbol): Move to new location. + (find_symbol): New function. + (load_generic_interfaces): Rework completely so that symtrees + have the local name and symbols have the use name. Renamed + generic interfaces exclude the use of the interface without an + ONLY clause (11.3.2). + (read_module): Implement 11.3.2 in the same way as for generic + interfaces. + +2007-11-23 Christopher D. Rickett + + * trans-common.c (build_common_decl): Fix the alignment for + BIND(C) common blocks. + +2007-11-23 Jerry DeLisle + + PR fortran/34209 + * iresolve.c (gfc_resolve_nearest): If sign variable kind does not match + kind of input variable, convert it to match. + + PR fortran/33317 + * trans.h: Modify prototype for gfc_conv_missing_dummy. + * trans-expr.c (gfc_conv_missing_dummy): Modify to pass an integer kind + parameter in. Set the type of the dummy to the kind given. + (gfc_conv_function_call): Pass representation.length to + gfc_conv_missing_dummy. + * iresolve.c (gfc_resolve_cshift): Determine the correct kind to use and + if appropriate set representation.length to this kind value. + (gfc_resolve_eoshift): Likewise. + * check.c (gfc_check_cshift): Enable dim_check to allow DIM as an + optional argument. (gfc_check_eoshift): Likewise. + * trans_intrinsic.c (gfc_conv_intrinsic_function_args): Update call to + gfc_conv_missing_dummy. + +2007-11-23 Tobias Burnus + + PR fortran/34187 + * module.c (load_needed): Ensure binding_label is not lost. + + * decl.c (set_binding_label,gfc_match_bind_c): Replace + strncpy by strcpy. + +2007-11-23 Tobias Burnus + Steven G. Kargl + + PR fortran/34192 + * simplify.c (gfc_simplify_nearest): Fix NEAREST for + subnormal numbers. + +2007-11-23 Aldy Hernandez + + * trans-expr.c (gfc_trans_string_copy): Use "void *" when building a + memset. + +2007-11-22 Tobias Burnus + + * primary.c (gfc_match_structure_constructor): Allow + constructor for types without components. + +2007-11-22 Tobias Burnus + + PR fortran/34079 + * trans-expr.c (gfc_conv_function_call): Do not append + string length arguments when calling bind(c) procedures. + * trans-decl.c (create_function_arglist): Do not append + string length arguments when declaring bind(c) procedures. + +2007-11-21 Francois-Xavier Coudert + + PR fortran/34083 + * resolve.c (resolve_structure_cons): Also check for zero rank. + +2007-11-19 Jerry DeLisle + + PR fortran/33317 + * trans-expr.c (gfc_conv_missing_dummy): Revert. + * iresolve.c (gfc_resolve_cshift): Revert. + (gfc_resolve_eoshift): Likewise. + * check.c (gfc_check_cshift): Revert. + (gfc_check_eoshift): Likewise. + +2007-11-19 Tobias Burnus + + PR fortran/34079 + * decl.c (gfc_match_entry): Support BIND(C). + (gfc_match_subroutine): Fix comment typo. + +2007-11-18 Jerry DeLisle + + PR fortran/33317 + * trans-expr.c (gfc_conv_missing_dummy): Set the type of the dummy + argument to default integer if flagged to do so. Fix typo in comment. + * resolve.c (gfc_resolve_dim_arg): Whitespace cleanup. + * iresolve.c (gfc_resolve_cshift): Do not convert type, mark attribute + for converting the DIM type appropriately in trans-expr.c. + (gfc_resolve_eoshift): Likewise. + * check.c (dim_check): Remove pre-existing dead code. + (gfc_check_cshift): Enable dim_check to allow DIM as an optional. + (gfc_check_eoshift): Likewise. + * trans_intrinsic.c (gfc_conv_intrinsic_function_args): Fix whitespace. + +2007-11-18 Paul Thomas + + PR fortran/31608 + * trans-array.c (gfc_conv_expr_descriptor): Remove exception + for indirect references in the call to gfc_trans_scalar_assign. + * trans-expr.c (gfc_conv_string_parameter): Instead of asserting + that the expression is not an indirect reference, cast it to a + pointer type of the length given by se->string_length. + +2007-11-18 Tobias Burnus + + PR fortran/34137 + * primary.c (match_variable): Reject non-result entry symbols. + * resolve.c (resolve_contained_fntype): Do not check entry master + functions. + +2007-11-17 Francois-Xavier Coudert + + * trans-types.c (gfc_init_types): Use wider buffer. + +2007-11-17 Francois-Xavier Coudert + + * trans-types.c (gfc_init_types): Use Fortran-90-style type + names, with kinds. + +2007-11-17 Tobias Burnus + + PR fortran/34133 + * decl.c (gfc_match_suffix,gfc_match_subroutine): Disallow + bind(c) attribute for internal procedures. + +2007-11-17 Francois-Xavier Coudert + + PR fortran/25252 + * interface.c (gfc_current_interface_head, + gfc_set_current_interface_head): New functions. + * decl.c (gfc_match_modproc): Move check for syntax error earlier. + On syntax error, restore previous state of the interface. + * gfortran.h (gfc_current_interface_head, + gfc_set_current_interface_head): New prototypes. + +2007-11-17 Francois-Xavier Coudert + + PR fortran/30285 + * module.c (struct written_common, written_commons): New structure. + (compare_written_commons, free_written_common, write_common_0): + New functions. + (write_common): Call recursive function write_common_0. + +2007-11-17 Francois-Xavier Coudert + + PR fortran/34108 + * io.c (check_format_string): Only check character expressions. + (match_dt_format): Return MATCH_ERROR if that is what + gfc_match_st_label said. + +2007-11-16 Francois-Xavier Coudert + + PR fortran/33957 + * expr.c (check_inquiry): Don't call gfc_error now. + +2007-11-16 Francois-Xavier Coudert + + PR fortran/33739 + PR fortran/34084 + * scanner.c (start_source_file, end_source_file, + exit_remaining_files, gfc_advance_line): Revert rev. 130016. + +2007-11-16 Paul Thomas + + PR fortran/34008 + * trans-stmt.c (gfc_conv_elemental_dependencies): Add check for + INTENT_INOUT as well as INTENT_OUT. + (gfc_trans_call): Remove redundant gcc_asserts in dependency + check. + +2007-11-16 Paul Thomas + + PR fortran/33986 + * trans-array.c (gfc_conv_array_parameter ): Allow allocatable + function results. + +2007-11-15 Tobias Burnus + + PR fortran/33917 + * decl.c (match_procedure_decl): Pre-resolve interface. + * resolve.c (resolve_symbol): Reject interfaces later + declared in procedure statements. + +2007-11-13 Jerry DeLisle + + PR fortran/33162 + * decl.c (match_procedure_decl): Remove TODO and allow intrinsics in + PROCEDURE declarations. Set attr.untyped to allow the interface to be + resolved later where the symbol type will be set. + * interface.c (compare_intr_interfaces): Remove static from pointer + declarations. Add type and kind checks for dummy function arguments. + (compare_actual_formal_intr): New function to compare an actual + argument with an intrinsic function. (gfc_procedures_use): Add check for + interface that points to an intrinsic function, use the new function. + * resolve.c (resolve_specific_f0): Resolve the intrinsic interface. + (resolve_specific_s0): Ditto. + +2007-11-13 Paul Thomas + + PR fortran/34080 + * iresolve.c (gfc_resolve_transfer): Do not try to convert + to a constant MOLD expression, if it is an assumed size + dummy. + +2007-11-10 Francois-Xavier Coudert + + * trans-common.c: Remove prototype for gfc_get_common. + +2007-11-10 Francois-Xavier Coudert + + PR fortran/33592 + * trans.c (gfc_call_realloc): Fix the logic and rename variables. + +2007-11-08 Francois-Xavier Coudert + + PR fortran/33739 + * scanner.c (start_source_file, end_source_file, + exit_remaining_files): New functions. + (gfc_advance_line): Use the new functions. + +2007-11-08 Francois-Xavier Coudert + + PR fortran/34028 + * trans-intrinsic.c (gfc_conv_intrinsic_ishft): Use correct type. + +2007-11-08 Tobias Burnus + + PR fortran/33917 + * interface.c (check_sym_interfaces): Disallow PROCEDURE-declared + procedures for MODULE PROCEDURE. + * decl.c (match_procedure_in_interface): Do not mark as procedure. + +2007-11-03 Francois-Xavier Coudert + + PR fortran/33881 + * trans-array.c (gfc_conv_array_parameter): Evaluate + se->string_length instead of the expr->ts.cl->backend_decl. + +2007-11-03 Francois-Xavier Coudert + + * gfortran.h: Shorten comment. + * trans-types.c (gfc_get_function_type): Allow argument to have + flavor FL_PROGRAM. + * trans-decl.c (gfc_sym_mangled_function_id): Mangle main program + name into MAIN__. + (build_function_decl): Fix comment. + * parse.c (main_program_symbol): Give the main program its proper + name, if any. Set its flavor to FL_PROGRAM. + (gfc_parse_file): Likewise. + +2007-11-02 Francois-Xavier Coudert + + * intrinsic.texi (ALLOCATED): Fix typo. + +2007-10-31 Tobias Burnus + + PR fortran/33941 + * modules.c (intrinsics): Use only alphabetic names for + intrinsic operators. + +2007-10-31 Jerry DeLisle + + PR fortran/33162 + * interface.c (compare_intr_interfaces): New function to check intrinsic + function arguments against formal arguments. (compare_interfaces): Fix + logic in comparison of function and subroutine attributes. + (compare_parameter): Use new function for intrinsic as argument. + * resolve.c (resolve_actual_arglist): Allow an intrinsic without + function attribute to be checked further. Set function attribute if + intrinsic symbol is found, return FAILURE if not. + +2007-10-31 Paul Thomas + + PR fortran/33897 + * decl.c (gfc_match_entry): Do not make ENTRY name + global for contained procedures. + * parse.c (gfc_fixup_sibling_symbols): Fix code for + determining whether a procedure is external. + +2007-10-30 Francois-Xavier Coudert + + PR fortran/33596 + * trans-intrinsic.c (gfc_conv_intrinsic_isnan): Strip NOP_EXPR + from the result of build_call_expr. + +2007-10-29 Paul Thomas + + PR fortran/31217 + PR fortran/33811 + PR fortran/33686 + + * trans-array.c (gfc_conv_loop_setup): Send a complete type to + gfc_trans_create_temp_array if the temporary is character. + * trans-stmt.c (gfc_trans_assign_need_temp): Do likewise for + allocate_temp_for_forall_nest. + (forall_replace): New function. + (forall_replace_symtree): New function. + (forall_restore): New function. + (forall_restore_symtree): New function. + (forall_make_variable_temp): New function. + (check_forall_dependencies): New function. + (cleanup_forall_symtrees): New function. + gfc_trans_forall_1): Add and initialize pre and post blocks. + Call check_forall_dependencies to check for all dependencies + and either trigger second forall block to copy temporary or + copy lval, outside the forall construct and replace all + dependent references. After assignment clean-up and coalesce + the blocks at the end of the function. + * gfortran.h : Add prototypes for gfc_traverse_expr and + find_forall_index. + expr.c (gfc_traverse_expr): New function to traverse expression + and visit all subexpressions, under control of a logical flag, + a symbol and an integer pointer. The slave function is caller + defined and is only called on EXPR_VARIABLE. + (expr_set_symbols_referenced): Called by above to set symbols + referenced. + (gfc_expr_set_symbols_referenced): Rework of this function to + use two new functions above. + * resolve.c (find_forall_index): Rework with gfc_traverse_expr, + using forall_index. + (forall_index): New function used by previous. + * dependency.c (gfc_check_dependency): Use gfc_dep_resolver for + all references, not just REF_ARRAY. + (gfc_dep_resolver): Correct the logic for substrings so that + overlapping arrays are handled correctly. + +2007-10-28 Tobias Schlüter + + PR fortran/32147 + * module.c (write_symbol): Fix whitespace. + (write_symbol0): Walk symtree from left-to-right instead + breadth-first. + (write_symbol1): Similarly change walk of pointer info tree. + (write_module): Insert linebreak. + * symbol.c (gfc_traverse_symtree): Change to left-to-right order. + (traverse_ns): Likewise. + +2007-10-27 Jerry DeLisle + + PR fortran/31306 + * decl.c (char_len_param_value): Add check for conflicting attributes of + function argument. + +2007-10-27 Tobias Burnus + + PR fortran/33862 + * lang-specs.h: Support .ftn and .FTN extension, use CPP for .FOR. + * options.c (form_from_filename): Support .ftn extension. + * gfortran.texi: Document support of .for and .ftn file extension. + +2007-10-26 Jerry DeLisle + + PR fortran/33162 + * intrinsic.h: Add prototypes for four new functions, gfc_check_datan2, + gfc_check_dprod, gfc_check_fn_d, and gfc_check_x_yd. + * intrinsic.c (add_functions): Add double precision checks for dabs, + dacos, dacosh, dasin, dasinh, datan, datanh, datan2, dbesj0, dbesj1, + dbesy0, dbesy1, dcos, dcosh, ddim, derf, derfc, dexp, dgamma, + dlgama, dlog, dlog10, dmod, dsign, dsin, dsinh, dsqrt, dtan, and dtanh. + Add real check dprod. + * check.c (gfc_check_datan2): New function to check for double precision + argumants. (gfc_check_dprod, gfc_check_fn_d, and gfc_check_x_yd): Ditto. + +2007-10-26 Jerry DeLisle + + * invoke.texi: Fix typo in -fmax-errors=. + +2007-10-26 Francois-Xavier Coudert + + PR fortran/29784 + * gfortran.texi: Document that there is no logical/integer + conversion performed during I/O operations. + +2007-10-22 Jerry DeLisle + + PR fortran/33849 + * resolve.c (resolve_actual_arglist): Fix error message text. + +2007-10-22 Steven G. Kargl + + PR fortran/31244 + * gfortran.h (gfc_data_value): Change repeat from unsigned int + to mpz_t. + * decl.c(top_val_list): Remove msg variable. Use mpz_t for + repeat count. + * resolve.c (values): Change left from unsigned int to mpz_t. + (next_data_value): Change for mpz_t. + (check_data_variable): Change ??? to FIXME in a comment. Use + "mpz_t left". + (resolve_data ): Use "mpz_t left". + +2007-10-21 Paul Thomas + + PR fortran/33749 + * resolve.c (resolve_ordinary_assign): New function that takes + the code to resolve an assignment from resolve_code. In + addition, it makes a temporary of any vector index, on the + lhs, using gfc_get_parentheses. + (resolve_code): On EXEC_ASSIGN call the new function. + +2007-10-20 Tobias Burnus + + PR fortran/33818 + * resolve.c (resolve_variable): Check that symbol is in the same + namespace as the entry function. + +2007-10-20 Paul Thomas + FX Coudert + + PR fortran/31608 + * trans-array.c (gfc_conv_expr_descriptor): For all except + indirect references, use gfc_trans_scalar_assign instead of + gfc_add_modify_expr. + * iresolve.c (check_charlen_present): Separate creation of cl + if necessary and add code to treat an EXPR_ARRAY. + (gfc_resolve_char_achar): New function. + (gfc_resolve_achar, gfc_resolve_char): Call it. + (gfc_resolve_transfer): If the MOLD expression does not have a + character length expression, get it from a constant length. + +2007-10-19 Jerry DeLisle + + PR fortran/33544 + * simplify.c (gfc_simplify_transfer): Only warn for short transfer when + -Wsurprising is given. + * invoke.texi: Document revised behavior. + +2007-10-18 Jerry DeLisle + + PR fortran/33795 + * gfortran.texi: Document GFORTRAN_UNBUFFERED_PRECONNECTED + environment variable. Delete mention of environment variable + GFORTRAN_UNBUFFERED_n. + +2007-10-18 Paul Thomas + + PR fortran/33233 + * resolve.c (check_host_association): Check singly contained + namespaces and start search for symbol in current namespace. + +2007-10-18 Paul Thomas + Dominique d'Humières + + PR fortran/33733 + * simplify.c (gfc_simplify_transfer): Return null if the source + expression is EXPR_FUNCTION. + +2007-10-17 Christopher D. Rickett + + PR fortran/33760 + * symbol.c (gen_special_c_interop_ptr): Remove code to create + constructor for c_null_ptr and c_null_funptr with value of 0. + * expr.c (check_init_expr): Prevent check on constructors for + iso_c_binding derived types. + * resolve.c (resolve_structure_cons): Verify that the user isn't + trying to invoke a structure constructor for one of the + iso_c_binding derived types. + +2007-10-15 Christopher D. Rickett + + PR fortran/32600 + * trans-expr.c (gfc_conv_function_call): Generate code to inline + c_associated. + * symbol.c (get_iso_c_sym): Preserve from_intmod and intmod_sym_id + attributes in the resolved symbol. + * resolve.c (gfc_iso_c_sub_interface): Remove dead code. + +2007-10-15 Jerry DeLisle + + PR fortran/33055 + * trans-io.c (create_dummy_iostat): New function to create a unique + dummy variable expression to use with IOSTAT. + (gfc_trans_inquire): Use the new function to pass unit number error info + to run-time library if a regular IOSTAT variable was not given. + +2007-10-14 Tobias Burnus + + PR fortran/33745 + * trans-array.c (gfc_conv_ss_startstride): Fix dimension check. + (gfc_trans_array_bound_check, gfc_conv_array_ref, + gfc_conv_ss_startstride): Simplify error message. + * resolve.c (check_dimension): Fix dimension-type switch; + improve error message. + +2007-10-13 Tobias Schlüter + Paul Thomas + + PR fortran/33254 + PR fortran/33727 + * trans-array.c (get_array_ctor_var_strlen): Check upper bound for + constness instead of lower bound. + (get_array_ctor_strlen): Add bounds-checking code. + +2007-10-12 Paul Thomas + + PR fortran/33542 + * resolve.c (resolve_actual_arglist): If the actual argument is + ambiguous, then there is an error. + +2007-10-12 Paul Thomas + + PR fortran/33664 + * expr.c (gfc_specification_expr): If a function is not + external, intrinsic or pure is an error. Set the symbol pure + to prevent repeat errors. + +2007-10-10 Francois-Xavier Coudert + + PR fortran/33636 + * expr.c (find_array_section): Check for constructor constantness. + +2007-10-08 Tobias Schlüter + + PR fortran/33689 + * resolve.c (gfc_resolve_expr): Fix indentation. + (resolve_fl_variable_derived): Rename argument. + (resolve_fl_variable): Fix case in message. Clarify logic. + Correctly simplify array bounds. + +2007-10-07 Thomas Koenig + + PR libfortran/33683 + * mathbuiltins.def (GAMMA): Change function name to + "tgamma" instad of "gamma". + +2007-10-07 Tobias Schlüter + + PR fortran/20851 + * expr.c (check_inquiry): Typo fix in error message. + (check_init_expr): Same * 3. + (check_restricted): Verify that no dummy arguments appear in + restricted expressions in ELEMENTAL procedures. + * resolve.c (resolve_fl_variable): Exchange order of checks to + avoid side-effect. + +2007-10-06 Jerry DeLisle + + PR fortran/33609 + * simplify.c (range_check): Return gfc_bad_expr if incoming expression + is NULL. + +2007-10-06 Tobias Schlüter + + * simplify.c (gfc_simplify_size): Fix typo. + +2007-10-06 Tobias Schlüter + + PR fortran/25076 + * resolve.c (gfc_find_forall_index): Move towards top, + renaming to ... + (find_forall_index): ... this. Add check for NULL expr. + (resolve_forall_iterators): Verify additional constraint. + (resolve_forall): Remove checks obsoleted by new code in + resolve_forall_iterators. + +2007-10-05 Francois-Xavier Coudert + + * gfortran.h (gfc_get_data_variable, gfc_get_data_value, + gfc_get_data): Move to decl.c. + (global_used): Rename into gfc_global_used. + (gfc_formalize_init_value, gfc_get_section_index, + gfc_assign_data_value, gfc_assign_data_value_range, + gfc_advance_section): Move to data.h. + (gfc_set_in_match_data): Remove. + * decl.c (gfc_get_data_variable, gfc_get_data_value, + gfc_get_data): Move here. + (gfc_set_in_match_data): Rename into set_in_match_data. + (gfc_match_data): Likewise. + (add_global_entry): Rename global_used into gfc_global_used. + * data.c: Include data.h. + * trans.h (gfc_todo_error): Remove. + * trans-array.c (gfc_trans_array_constructor, + gfc_conv_ss_startstride, gfc_conv_loop_setup): Change + gfc_todo_error into assertions. + * resolve.c (resolve_global_procedure): Rename global_used into + gfc_global_used. + * parse.c (gfc_global_used, parse_module, add_global_procedure, + add_global_program): Likewise. + * trans-intrinsic.c (gfc_walk_intrinsic_function): Rename + global_used into gfc_global_used. + * Make-lang.in: Add dependencies on fortran/data.h. + * data.h: New file. + +2007-10-04 Francois-Xavier Coudert + + PR fortran/33529 + * decl.c (match_char_kind): New function. + (match_char_spec): Use match_char_kind. + +2007-10-04 Francois-Xavier Coudert + + PR fortran/33502 + * scanner.c (gfc_advance_line): Call debug_hooks->end_source_file + and debug_hooks->start_source_file when appropriate, and set + dbg_emitted. + (gfc_define_undef_line): New function. + (load_file): Don't error out on #define and #undef lines. + * parse.c (next_statement): Call gfc_define_undef_line. + (gfc_parse_file): Call debug_hooks->start_source_file and + debug_hooks->end_source_file for the main source file if + required. + * gfortran.h (gfc_linebuf): Add dbg_emitted field. + (gfc_define_undef_line): New prototype. + +2007-10-04 Tobias Schlüter + + PR fortran/33626 + * resolve.c (resolve_operator): Always copy the type for + expressions in parentheses. + +2007-10-04 Paul Thomas + + PR fortran/33646 + PR fortran/33542 + * interface.c (check_interface1): Revert patch of 10-02. + +2007-10-03 Francois-Xavier Coudert + + PR fortran/26682 + * trans-decl.c (build_function_decl): Set "externally_visible" + attribute on the MAIN program decl. + +2007-10-03 Tobias Schlüter + + PR fortran/33198 + * resolve.c (has_default_initializer): Move to top. Make bool. + (resolve_common_blocks): Simplify logic. Add case for derived + type initialization. + (resolve_fl_variable_derived): Split out from ... + (resolve_fl_variable): ... here, while adapting to new h_d_i + interface. + +2007-10-03 Francois-Xavier Coudert + + PR fortran/26682 + * options.c (gfc_post_options): Issue an error when + -fwhole-program is used. + +2007-10-02 Paul Thomas + + PR fortran/33542 + * interface.c (check_interface1): Specific procedures are + always ambiguous if they have the same name. + +2007-10-02 Paul Thomas + + PR fortran/33566 + * primary.c (gfc_match_rvalue): Make all expressions with array + references to structure parameters into variable expressions. + +2007-10-02 Paul Thomas + + PR fortran/33554 + * trans-decl.c (init_intent_out_dt): New function. + (gfc_trans_deferred_vars): Remove the code for default + initialization of INTENT(OUT) derived types and put it + in the new function. Call it earlier than before, so + that array offsets and lower bounds are available. + +2007-10-02 Paul Thomas + + PR fortran/33550 + * decl.c (get_proc_name): Return rc if rc is non-zero; ie. if + the name is a reference to an ambiguous symbol. + +2007-10-02 Paul Thomas + + PR fortran/31154 + PR fortran/31229 + PR fortran/33334 + * decl.c : Declare gfc_function_kind_locs and + gfc_function_type_locus. + (gfc_match_kind_spec): Add second argument kind_expr_only. + Store locus before trying to match the expression. If the + current state corresponds to a function declaration and there + is no match to the expression, read to the parenthesis, return + kind = -1, dump the expression and return. + (gfc_match_type_spec): Renamed from match_type_spec and all + references changed. If an interface or an external function, + store the locus, set kind = -1 and return. Otherwise, if kind + is already = -1, use gfc_find_symbol to try to find a use + associated or imported type. + match.h : Prototype for gfc_match_type_spec. + * parse.c (match_deferred_characteristics): New function. + (parse_spec): If in a function, statement is USE or IMPORT + or DERIVED_DECL and the function kind=-1, call + match_deferred_characteristics. If kind=-1 at the end of the + specification expressions, this is an error. + * parse.h : Declare external gfc_function_kind_locs and + gfc_function_type_locus. + +2007-09-27 Kaveh R. Ghazi + + * module.c (mio_expr): Avoid -Wcast-qual warning. + +2007-09-27 Tobias Schlüter + + * arith.c (reduce_binary_aa): Fix capitalization. + * check.c (gfc_check_dot_product): Likewise. + (gfc_check_matmul): Likewise. + * expr.c (gfc_check_conformance): Likewise. + (gfc_check_assign): Likewise. + (gfc_default_initializer): Simplify logic. + * trans.c (gfc_msg_bounds): Make const. + (gfc_msg_fault): Likewise. + (gfc_msg_wrong_return): Likewise. + * trans.h: Add const to corresponding extern declarations. + +2007-09-27 Paul Thomas + + PR fortran/33568 + * trans-intrinsic.c (gfc_conv_intrinsic_aint): Allow for the + possibility of the optional KIND argument by making arg + an array, counting the number of arguments and using arg[0]. + +2007-09-26 Francois-Xavier Coudert + + PR fortran/30780 + * invoke.texi: Add note to -ffpe-trap option. Fix typos. + +2007-09-23 Tobias Schlüter + + PR fortran/33269 + * io.c (check_format_string): Move NULL and constant checks into + this function. + (check_io_constraints): Call gfc_simplify_expr() before calling + check_format_string(). Remove NULL and constant checks. + +2007-09-24 Francois-Xavier Coudert + + PR fortran/33538 + * scanner.c, parse.c, gfortran.h: Revert revision 128671. + +2007-09-23 Francois-Xavier Coudert + + PR fortran/33528 + * scanner.c (preprocessor_line): Call linemap_add when exiting + a file. + (gfc_new_file): Adjust debug code for USE_MAPPED_LOCATION. + +2007-09-22 Francois-Xavier Coudert + + PR fortran/33522 + * trans-types.c (gfc_get_desc_dim_type): Mark artificial + variables with TREE_NO_WARNING. + (gfc_get_array_descriptor_base): Likewise. + +2007-09-22 Paul Thomas + + PR fortran/33337 + PR fortran/33376 + * trans-decl.c (gfc_create_module_variable): Output + derived type parameters. + * arith.c (gfc_parentheses): Return the argument if + it is a constant expression. + * primary.c (gfc_match_rvalue): Remove the clearing of + the module name and the use_assoc attribute for derived + type parameter expressions. + +2007-09-22 Francois-Xavier Coudert + + PR fortran/33502 + * scanner.c (gfc_advance_line): Call debug_hooks->start_source_file + and debug_hooks->end_source_file when entering and exiting + included files. + (gfc_define_undef_line): New function. + (load_file): Ignore #define and #undef preprocessor lines + while reading source files. + * parse.c (next_statement): Handle #define and #undef + preprocessor lines. + (gfc_parse_file): Call debug_hooks->start_source_file and + debug_hooks->end_source_file for the main source file if + requested by the debug format. + * gfortran.h (gfc_define_undef_line): Add prototype. + +2007-09-22 Tobias Burnus + + PR fortran/33445 + * scanner.c (skip_free_comments): Warn if !$OMP& is used + if no OpenMP directive is to be continued. + +2007-09-21 Paul Thomas + + *trans-expr.c (gfc_trans_pointer_assignment): Convert array + descriptor for subref pointer assignements, rather than using + the loop info version. + +2007-09-21 Tobias Burnus + + PR fortran/33037 + * simplify.c (gfc_simplify_transfer): Warn if source size + is smaller than result size. + +2007-09-20 Asher Langton + + PR fortran/20441 + * gfortran.h : Add init_local_* enums and init_flag_* flags to + gfc_option_t. + * lang.opt: Add -finit-local-zero, -finit-real, -finit-integer, + -finit-character, and -finit-logical flags. + * invoke.texi: Document new options. + * resolve.c (build_init_assign): New function. + (apply_init_assign): Move part of function into build_init_assign. + (build_default_init_expr): Build local initializer (-finit-*). + (apply_default_init_local): Apply local initializer (-finit-*). + (resolve_fl_variable): Try to add local initializer (-finit-*). + * options.c (gfc_init_options, gfc_handle_option, + gfc_post_options): Handle -finit-local-zero, -finit-real, + -finit-integer, -finit-character, and -finit-logical flags. + +2007-09-20 Francois-Xavier Coudert + + PR fortran/33221 + * gfortran.h (symbol_attribute): Add zero_comp field. + * symbol.c (gfc_use_derived): Handle case of emtpy derived types. + * decl.c (gfc_match_data_decl): Likewise. + (gfc_match_derived_decl): Likewise. + * module.c (ab_attribute, attr_bits): Add AB_ZERO_COMP member. + (mio_symbol_attribute): Write and read AB_ZERO_COMP. + * resolve.c (resolve_symbol): Handle case of emtpy derived types. + * parse.c (parse_derived): Likewise. + +2007-09-20 Francois-Xavier Coudert + + PR fortran/33288 + * arith.c (reduce_unary, reduce_binary_ac, reduce_binary_ca, + reduce_binary_aa): Call ourselves recursively if an element of + the constructor is itself a constant array. + +2007-09-20 Tobias Schlüter + + * io.c (resolve_tag_format): New function using code split out + and simplified from ... + (resolve_tag): ... this function. Simplify logic. Unify + IOSTAT, IOLENGTH and SIZE handling. + +2007-09-20 Christopher D. Rickett + + PR fortran/33497 + * resolve.c (gfc_iso_c_func_interface): Use information from + subcomponent if applicable. + +2007-09-20 Tobias Burnus + + PR fortran/33325 + * intrinsic.text: Add documentation of the intrinsic modules. + * gfortran.texi: Link to intrinsic-modules section and to + the GOMP manual. + +2007-09-18 Francois-Xavier Coudert + + PR fortran/31119 + * trans-array.c (gfc_conv_ss_startstride): Only perform bounds + checking for optional args when they are present. + +2007-09-18 Tobias Burnus + + PR fortran/33231 + * resolve.c (resolve_elemental_actual): Check for conformance + of intent out/inout dummies. + +2007-09-17 Tobias Burnus + + PR fortran/33106 + * resolve.c (resolve_symbol): Reject public variable of + private derived-types for Fortran 95. + +2007-09-17 Tobias Burnus + + * resolve.c (resolve_fl_procedure): Allow private dummies + for Fortran 2003. + +2007-09-17 Francois-Xavier Coudert + + * trans-types.c (gfc_get_desc_dim_type): Do not to try + emit debug info. + (gfc_get_array_descriptor_base): Likewise. + (gfc_get_mixed_entry_union): Likewise + (gfc_get_derived_type): Set decl location for fields and + derived type itself. + +2007-09-16 Paul Thomas + + PR fortran/29396 + PR fortran/29606 + PR fortran/30625 + PR fortran/30871 + * trans.h : Add extra argument to gfc_build_array_ref. Rename + gfc_conv_aliased_arg to gfc_conv_subref_array_arg. Move + prototype of is_aliased_array to gfortran.h and rename it + gfc_is_subref_array. Add field span to lang_decl, add a new + decl lang specific flag accessed by GFC_DECL_SUBREF_ARRAY_P + and a new type flag GFC_DECL_SUBREF_ARRAY_P. + * trans.c (gfc_build_array_ref): Add the new argument, decl. + If this is a subreference array pointer, use the lang_decl + field 'span' to calculate the offset in bytes and use pointer + arithmetic to address the element. + * trans-array.c (gfc_conv_scalarized_array_ref, + gfc_conv_array_ref): Add the backend declaration as the third + field, if it is likely to be a subreference array pointer. + (gfc_conv_descriptor_dimension, gfc_trans_array_ctor_element, + gfc_trans_array_constructor_element, structure_alloc_comps, + gfc_conv_array_index_offset): For all other references to + gfc_build_array_ref, set the third argument to NULL. + (gfc_get_dataptr_offset): New function. + (gfc_conv_expr_descriptor): If the rhs of a pointer assignment + is a subreference array, then calculate the offset to the + subreference of the first element and set the descriptor data + pointer to this, using gfc_get_dataptr_offset. + trans-expr.c (gfc_get_expr_charlen): Use the expression for the + character length for a character subreference. + (gfc_conv_substring, gfc_conv_subref_array_arg): Add NULL for + third argument in call to gfc_build_array_ref. + (gfc_conv_aliased_arg): Rename to gfc_conv_subref_array_arg. + (is_aliased_array): Remove. + (gfc_conv_function_call): Change reference to is_aliased_array + to gfc_is_subref_array and reference to gfc_conv_aliased_arg to + gfc_conv_subref_array_arg. + (gfc_trans_pointer_assignment): Add the array element length to + the lang_decl 'span' field. + * gfortran.h : Add subref_array_pointer to symbol_attribute and + add the prototype for gfc_is_subref_array. + * trans-stmt.c : Add NULL for third argument in all references + to gfc_build_array_ref. + * expr.c (gfc_is_subref_array): Renamed is_aliased_array. + If this is a subreference array pointer, return true. + (gfc_check_pointer_assign): If the rhs is a subreference array, + set the lhs subreference_array_pointer attribute. + * trans-decl.c (gfc_get_symbol_decl): Allocate the lang_decl + field if the symbol is a subreference array pointer and set an + initial value of zero for the 'span' field. + * trans-io.c (set_internal_unit): Refer to is_subref_array and + gfc_conv_subref_array_arg. + (nml_get_addr_expr): Add NULL third argument to + gfc_build_array_ref. + (gfc_trans_transfer): Use the scalarizer for a subreference + array. + +2007-09-13 Thomas Koenig + + * iresolve.c (resolve_mask_arg): If a mask is an array + expression, convert it to kind=1. + +2007-09-13 Tobias Burnus + + PR fortran/33343 + * expr.c (gfc_check_conformance): Print ranks in the error message. + * resolve.c (resolve_elemental_actual): Check also conformance of + the actual arguments for elemental functions. + +2007-09-13 Tobias Burnus + + * symbol.c (gfc_add_elemental,gfc_add_pure,gfc_add_recursive): + Allow prefixes only to be specified once. + +2007-09-13 Tobias Burnus + + PR fortran/33412 + * symbol.c (check_conflict): Add conflict of ELEMENTAL with Bind(C). + +2007-09-12 Tobias Burnus + + PR fortran/33297 + * check.c (scalar_check): Move up in the file. + (kind_check): Call scalar_check. + (dim_check): If optional, do not call nonoptional_check; use + bool for optional. + (gfc_check_all_any,gfc_check_count,gfc_check_cshift,gfc_check_eoshift, + gfc_check_lbound,gfc_check_minloc_maxloc,check_reduction, + gfc_check_spread,gfc_check_ubound): Use true/false instead of 0/1 + for dim_check; honor changed meaning of optional. + (gfc_check_int): Replace checks by kind_check. + (gfc_check_size): Replace checks by dim_check. + +2007-09-12 Tobias Burnus + + PR fortran/33284 + PR fortran/33310 + * symbol.c (check_conflict): Add conflict between INTRINSIC and ENTRY + and between BIND(C) and PARAMETER. + +2007-09-12 Tobias Burnus + + * trans-expr.c (gfc_conv_initializer): Fix expr == NULL check. + +2007-09-12 Jan Hubicka + + * f95-lang.c (LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION): Kill. + +2007-09-12 Christopher D. Rickett + + PR fortran/33395 + * trans-expr.c (gfc_conv_initializer): Remove unnecessary test for + intmod_sym_id and use derived symbol to set new kind of C_NULL_PTR + and C_NULL_FUNPTR expressions. + +2007-09-11 Christopher D. Rickett + + PR fortran/33040 + * trans-expr.c (gfc_trans_structure_assign): Convert component + C_NULL_PTR and C_NULL_FUNPTR component initializers to (void *). + * trans-types.c (gfc_get_derived_type): Create a backend_decl for + the c_address field of C_PTR and C_FUNPTR and ensure initializer + is of proper type/kind for (void *). + +2007-09-11 Jan Hubicka + + * f95-lang.c (gfc_expand_function): Kill. + (LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION): Kill. + +2007-09-08 Tobias Burnus + + PR fortran/31547 + * gfortran.texi: Document when CPP is called. + + * intrinsic.texi (IOR): Fix typos. + +2007-09-10 Paul Thomas + + PR fortran/33370 + * trans-expr.c (copyable_array_p): Add tests that expression + is a variable, that it has no subreferences and that it is a + full array. + (gfc_trans_assignment): Change conditions to suit modifications + to copyable_array_p. + +2007-09-06 Tom Tromey + + * scanner.c (get_file): Update. + (load_file): Update. + (gfc_next_char_literal): Use gfc_linebuf_linenum. + * f95-lang.c (gfc_init): Update. + * gfortran.h (gfc_linebuf_linenum): New macro. + +2007-09-05 Sandra Loosemore + + * trans-decl.c (build_entry_thunks): Use set_cfun. + (gfc_generate_function_code): Likewise. + +2007-09-05 Paul Thomas + + PR fortran/31564 + * primary.c (gfc_match_rvalue): Make expressions that refer + to derived type parameters that have array references into + variable expressions. Remove references to use association + from the symbol. + + PR fortran/33241 + * decl.c (add_init_expr_to_sym): Provide assumed character + length parameters with the length of the initialization + expression, if a constant, or that of the first element of + an array. + +2007-09-04 Janus Weil + Paul Thomas + + * decl.c (match_procedure_decl,match_procedure_in_interface, + gfc_match_procedure): Handle PROCEDURE statements. + * gfortran.h (struct gfc_symbol): New member "gfc_symbol *interface". + (enum gfc_statement): New element "ST_PROCEDURE". + (strcut symbol_attribute): New member "unsigned procedure". + * interface.c (check_interface0): Extended error checking. + * match.h: Add gfc_match_procedure prototype. + * parse.c (decode_statement,next_statement,gfc_ascii_statement, + parse_derived,parse_interface): Implement PROCEDURE statements. + * resolve.c (resolve_symbol): Ditto. + * symbol.c (check_conflict): Ditto. + (gfc_add_proc): New function for setting the procedure attribute. + (copy_formal_args): New function for copying formal argument lists. + +2007-09-03 Daniel Jacobowitz + + * Make-lang.in (gfortranspec.o): Remove SHLIB_MULTILIB. + +2007-09-03 Kaveh R. Ghazi + + * gfortranspec.c (lang_specific_driver): Use CONST_CAST2. + * options.c (gfc_post_options): Supply a TYPE for CONST_CAST. + * parse.c (parse_omp_structured_block): Likewise, + * st.c (gfc_free_statement): Likewise, + +2007-09-03 Francois-Xavier Coudert + + PR fortran/31675 + * libgfortran.h: New file. + * iso-fortran-env.def: Use macros in the new header instead of + hardcoded integer constants. + * Make-lang.in (F95_PARSER_OBJS, GFORTRAN_TRANS_DEPS): Add + fortran/libgfortran.h. + * gfortran.h (GFC_STD_*, GFC_FPE_*, options_convert, + ioerror_codes): Remove. + * trans.c (ERROR_ALLOCATION): Remove. + (gfc_call_malloc, gfc_allocate_with_status, + gfc_allocate_array_with_status): Use LIBERROR_ALLOCATION. + * trans-types.h (GFC_DTYPE_*): Remove. + * trans-decl.c (gfc_generate_function_code): Use + GFC_CONVERT_NATIVE instead of CONVERT_NATIVE. + * trans-io.c (set_parameter_value, set_parameter_ref): Use + LIBERROR_* macros instead of IOERROR_ macros. + * trans-intrinsic.c (gfc_conv_intrinsic_function): Use + LIBERROR_END and LIBERROR_EOR instead of hardcoded constants. + * options.c (gfc_init_options): Use GFC_CONVERT_NATIVE instead of + CONVERT_NATIVE. + (gfc_handle_option): Use GFC_CONVERT_* macros instead of CONVERT_*. + +2007-09-02 Steven G. Kargl + + * invoke.texi: Fix the -frange-checking option entry. + +2007-09-02 Roger Sayle + + * decl.c (match_string_p): New helper function to explicitly match + a string of characters. + (match_attr_spec): Remove no longer needed DECL_COLON from decl_types. + Delete decls array and peek_char. Rewrite decl attribute parser to + avoid calling gfc_match_strings. + * match.c (gfc_match_strings): Delete unused function. + * match.h (gfc_match_strings): Delete prototype. + +2007-09-02 Tobias Schlüter + + * dump-parse-tree.c (show_char_const): New function. + (gfc_show_expr): Use it. + * expr.c (find_substring_ref): Rework to not keep characters + dangling beyond end of string. + +2007-09-02 H.J. Lu + + PR fortran/33276 + * array.c (expand_iterator): Initialize frame.prev. + +2007-08-31 Tobias Burnus + + PR fortran/33232 + * io.c (match_io): Also diagnose extra comma for READ. + +2007-08-31 Joseph Myers + + * intrinsic.texi (LGAMMA): Remove empty @cindex line. + +2007-08-31 Paul Thomas + + PR fortran/31879 + PR fortran/31197 + PR fortran/31258 + PR fortran/32703 + * gfortran.h : Add prototype for gfc_resolve_substring_charlen. + * resolve.c (gfc_resolve_substring_charlen): New function. + (resolve_ref): Call gfc_resolve_substring_charlen. + (gfc_resolve_character_operator): New function. + (gfc_resolve_expr): Call the new functions in cases where the + character length is missing. + * iresolve.c (cshift, eoshift, merge, pack, reshape, spread, + transpose, unpack): Call gfc_resolve_substring_charlen for + source expressions that are character and have a reference. + * trans.h (gfc_trans_init_string_length) Change name to + gfc_conv_string_length; modify references in trans-expr.c, + trans-array.c and trans-decl.c. + * trans-expr.c (gfc_trans_string_length): Handle case of no + backend_decl. + (gfc_conv_aliased_arg): Remove code for treating substrings + and replace with call to gfc_trans_string_length. + * trans-array.c (gfc_conv_expr_descriptor): Remove code for + treating strings and call gfc_trans_string_length instead. + +2007-08-30 Tobias Burnus + + PR fortran/33228 + * interface.c (check_interface0): Improve error for external procs. + (check_sym_interfaces): Fix checking of module procedures. + +2007-08-29 Francois-Xavier Coudert + + PR fortran/32989 + * iresolve.c (gfc_resolve_getarg): Handle non-default integer + kinds. + * check.c (gfc_check_getarg): New function + * intrinsic.h: Add prototype for gfc_check_getarg. + * intrinsic.c (add_subroutines): Add reference to gfc_check_getarg. + * intrinsic.texi (GETARG): Adjust documentation. + +2007-08-29 Francois-Xavier Coudert + Tobias Burnus + + PR fortran/33105 + * intrinsic.c (add_functions): Add IS_IOSTAT_END and + IS_IOSTAT_EOR intrinsics. + * gfortran.h (gfc_isym_id): Add GFC_ISYM_IS_IOSTAT_END and + GFC_ISYM_IS_IOSTAT_EOR. + * trans-intrinsic.c (gfc_conv_has_intvalue): New function. + (gfc_conv_intrinsic_function): Call gfc_conv_has_intvalue for + GFC_ISYM_IS_IOSTAT_END and GFC_ISYM_IS_IOSTAT_EOR. + * intrinsic.texi: Add IS_IOSTAT_END and IS_IOSTAT_EOR. + +2007-08-28 Christopher D. Rickett + + PR fortran/33215 + * decl.c (build_sym): Pass number of identifiers on line to + set_binding_label. + (set_binding_label): Verify that only one identifier given if + NAME= specified, even if the given binding label has zero length. + (gfc_match_bind_c): Remove declaration for has_name_equals because + it hides the static global one that is needed. + +2007-08-29 Francois-Xavier Coudert + + * trans-array.c (gfc_grow_array): Use gfc_call_realloc. + (gfc_array_allocate): Use gfc_allocate_with_status and + gfc_allocate_array_with_status. + (gfc_array_deallocate): Use gfc_deallocate_with_status. + (gfc_trans_dealloc_allocated): Use gfc_deallocate_with_status. + * trans-stmt.c (gfc_trans_allocate): Use gfc_allocate_with_status. + (gfc_trans_deallocate): Use gfc_deallocate_with_status. + * trans.c (gfc_allocate_with_status, gfc_allocate_array_with_status, + gfc_deallocate_with_status, gfc_call_realloc): New functions. + * trans.h (gfc_allocate_with_status, gfc_allocate_array_with_status, + gfc_deallocate_with_status, gfc_call_realloc): New prototypes. + (gfor_fndecl_internal_realloc, gfor_fndecl_allocate, + gfor_fndecl_allocate_array, gfor_fndecl_deallocate): Remove. + * f95-lang.c (gfc_init_builtin_functions): Create decl for + BUILT_IN_REALLOC. + * trans-decl.c (gfor_fndecl_internal_realloc, + gfor_fndecl_allocate, gfor_fndecl_allocate_array, + gfor_fndecl_deallocate): Remove function decls. + (gfc_build_builtin_function_decls): Likewise. + +2007-08-28 Jerry DeLisle + + PR fortran/33055 + Revert previous patch. + +2007-08-28 Jakub Jelinek + + PR fortran/22244 + * Make-lang.in (fortran/trans-types.o): Depend on $(FLAGS_H). + * trans-types.c: Include flags.h. + (gfc_get_nodesc_array_type): Add TYPE_DECL TYPE_NAME with + correct bounds and dimensions for packed arrays. + +2007-08-27 Tobias Burnus + + * simplify.c (gfc_simplify_lgamma): Fix mpfr_lgamma call. + +2007-08-26 Jerry DeLisle + + PR fortran/33055 + * trans-io.c (create_dummy_iostat): New function to create a unique + dummy variable expression to use with IOSTAT. + (gfc_trans_inquire): Use the new function to pass unit number error info + to run-time library if a regular IOSTAT variable was not given. + +2007-08-26 H.J. Lu + + * gfortran.h (gfc_isym_id): Add GFC_ISYM_GAMMA and + GFC_ISYM_LGAMMA. + +2007-08-26 Asher Langton + Tobias Burnus + + * gfortran.h (gfc_option_t): Add flag_recursive. + * lang.opt: Add -frecursive option and update -fopenmp. + * invoke.texi (-frecursive): Document new option. + (-fopenmp,-fno-automatic,-fmax-stack-var-size): Update. + * options.c (gfc_init_options, gfc_post_options, + gfc_handle_option): Add -frecursive and modify -fopenmp. + (gfc_post_options): Add warning for conflicting flags. + +2007-08-26 Tobias Burnus + + PR fortran/31298 + * module.c (mio_symbol_ref,mio_interface_rest): Return pointer_info. + (load_operator_interfaces): Support multible loading of an operator. + +2007-08-26 Tobias Burnus + + PR fortran/32985 + * match.c (gfc_match_common): Remove SEQUENCE diagnostics. + * resolve.c (resolve_common_blocks): Add SEQUENCE diagnostics; + fix walking through the tree. + +2007-08-26 Tobias Burnus + + PR fortran/32980 + * intrinsic.h (gfc_simplify_gamma,gfc_simplify_lgamma, + gfc_resolve_gamma,gfc_resolve_lgamma): New function declations. + * mathbuiltins.def: Define GAMMA and LGAMMA. + * intrinsic.c (add_functions): Add GAMMA, DGAMMA, LGAMMA, ALGAMA + and DLGAMA. + * simplify.c (gfc_simplify_gamma,gfc_simplify_lgamma): New functions. + * iresolve.c (gfc_resolve_gamma,gfc_resolve_lgamma): New functions. + * intrinsic.texi: Add documentation for GAMMA and LGAMMA. + +2007-08-26 Tobias Burnus + + PR fortran/33188 + * parse.c (parse_derived): Support empty derived type + definitions for Fortran 2003. + +2007-08-25 Kaveh R. Ghazi + + * trans-openmp.c (gfc_omp_privatize_by_reference): Constify. + * trans.h (gfc_omp_privatize_by_reference): Likewise. + +2007-08-24 Tobias Burnus + + PR fortran/33178 + * intrinsic.c (gfc_intrinsic_func_interface): Fix initialization + expression check. + +2007-08-24 Thomas Koenig + + PR fortran/32972 + * iresolve.c: Don't convert array masks. + +2007-08-24 Tobias Burnus + + PR fortran/33139 + * trans-array.c (gfc_conv_expr_descriptor): Copy bounds for + whole-array pointer assignments. + +2007-08-23 Jakub Jelinek + + * decl.c (variable_decl): Don't share charlen structs if + length == NULL. + * trans-decl.c (create_function_arglist): Assert + f->sym->ts.cl->backend_decl is NULL instead of unsharing + charlen struct here. + +2007-08-23 Francois-Xavier Coudert + + PR fortran/33095 + * trans-intrinsic.c (gfc_conv_intrinsic_minmax): Remove + runtime error checking. + +2007-08-22 Roger Sayle + Tobias Schlüter + + * match.c (intrinsic_operators): Delete. + (gfc_match_intrinsic_op): Rewrite matcher to avoid calling + gfc_match_strings. + +2007-08-22 Christopher D. Rickett + + PR fortran/33020 + * resolve.c (gfc_iso_c_sub_interface): Remove setting of type and + kind for optional SHAPE parameter of C_F_POINTER. + +2007-08-22 Janus Weil + + * decl.c (match_attr_spec): Pass on errors from gfc_match_bind_c. + (gfc_match_bind_c): Bugfix in check for NAME= with abstract interfaces. + (gfc_match_mopdproc): Bugfix to reject module procedures in + abstract interfaces. + +2007-08-22 Kai Tietz + + * f95-lang.c: (gfc_init_decl_processing): Choose sizetype by using + Pmode. + +2007-08-21 Paul Brook + Nathan Sidwell + Mark Mitchell + Joseph Myers + + * gfortranspec.c (lang_specific_driver): Use pkgversion_string. + * Make-lang.in (gfortran.pod): Define BUGURL. + * invoke.texi: Use BUGURL for bug-reporting instructions. + +2007-08-19 Roger Sayle + + * match.c (intrinsic_operators): Make static. + (gfc_op2string): New function for converting a gfc_intrinsic_op to + to a "const char*", replacing the macro of the same name. + * gfortran.h (intrinsic_operators): Delete prototype. + (gfc_op2string): Replace macro with function prototype. + +2007-08-18 Tobias Burnus + + * gfortran.h (gfc_is_intrinsic_typename): Add declaration. + * symbol.c (gfc_is_intrinsic_typename): New function. + * parse.c (decode_statement): Check for space in ABSTRACT INTERFACE. + (parse_interface): Use gfc_is_intrinsic_typename. + * decl.c (gfc_match_derived_decl): Ditto. + * module.c (gfc_match_use): Use gcc_unreachable() for + INTERFACE_ABSTRACT in switch(). + +2007-08-18 Roger Sayle + + * primary.c (match_logical_constant_string): New function to match + a ".true." or a ".false.". + (match_logical_constant): Use it instead of gfc_match_strings. + +2007-08-18 Paul Thomas + Janus Weil + + * interface.c (gfc_match_interface,gfc_match_abstract_interface, + gfc_match_end_interface,gfc_add_interface): Add abstract interface. + * dump-parse-tree.c (gfc_show_attr): Ditto. + * gfortran.h (interface_type,symbol_attribute): Ditto. + * module.c (gfc_match_use,ab_attribute,attr_bits, + mio_symbol_attribute): Ditto. + * resolve.c (resolve_function): Ditto. + * match.h: Ditto. + * parse.c (decode_statement): Ditto. + (parse_interface): Ditto, check for C1203 (name of abstract interface + cannot be the same as an intrinsic type). + * decl.c (gfc_match_bind_c): Check for NAME= with abstract interfaces. + (access_attr_decl): Handle Abstract interfaces. + +2007-08-18 Paul Thomas + + PR fortran/32881 + * expr.c (gfc_check_pointer_assign): If the rhs is the + initialization expression for the rhs, there is no error. + +2007-08-18 Paul Thomas + + PR fortran/32875 + * trans-array.c (get_array_ctor_strlen): Set the character + length of a zero length array to zero. + +2007-08-16 Tobias Burnus + + PR fortran/33072 + * module.c (gfc_match_use): Mark user operators as such. + (find_use_name_n): Distinguish between operators and other symbols. + (find_use_name,number_use_names,mio_namelist, + load_operator_interfaces,load_generic_interfaces,read_module, + write_generic): Update find_use_name_n calls. + +2007-08-15 Francois-Xavier Coudert + + PR fortran/29459 + * trans.c (gfc_create_var_np): Do not emit warnings for + anonymous variables. + +2007-08-15 Francois-Xavier Coudert + + PR fortran/33066 + * decl.c (gfc_get_type_attr_spec): Fix whitespace. + (gfc_match_derived_decl): Fix logic. + +2007-08-14 Francois-Xavier Coudert + + PR fortran/33073 + * trans-intrinsic.c (build_fixbound_expr): Convert to result type + in all cases. + +2007-08-14 Francois-Xavier Coudert + + PR fortran/32594 + * trans-expr.c (gfc_conv_substring_expr): Only call + gfc_conv_substring if expr->ref is not NULL. + * expr.c (gfc_is_constant_expr): If e->ref is NULL, the substring + expression might be a constant. + (gfc_simplify_expr): Handle missing start and end, as well as + missing ref. + +2007-08-13 Paul Thomas + + PR fortran/32926 + * match.c (gfc_match_call): Do not create a new symtree in the + case where the existing symbol is external and not referenced. + +2007-08-13 Paul Thomas + + PR fortran/32827 + * decl.c (variable_decl): Check for an imported symbol + by looking for its symtree and testing for the imported + attribute. + (gfc_match_import): Remove change of symbol's namespace + and set the attribute imported instead. + * symbol.c (gfc_get_sym_tree): It is not an error if a + symbol is imported. + * gfortran.h : Add the 'imported' to symbol_attribute. + +2007-08-13 Paul Thomas + + PR fortran/32962 + * trans-array.c (gfc_conv_array_transpose): Set the offset + of the destination to zero if the loop is zero based. + +2007-08-12 Francois-Xavier Coudert + + PR fortran/29600 + * intrinsic.c (add_functions): Add optional KIND argument to ACHAR. + * iresolve.c (gfc_resolve_achar): Handle the KIND argument. + * check.c (gfc_check_achar): Check for the optional KIND argument. + * simplify.c (gfc_simplify_achar): Use KIND argument. + * intrinsic.h (gfc_check_achar, gfc_simplify_achar, + gfc_resolve_achar): Adjust prototypes. + +2007-08-12 Francois-Xavier Coudert + + PR fortran/30964 + PR fortran/33054 + * trans-expr.c (gfc_conv_function_call): When no formal argument + list is available, we still substitute missing optional arguments. + * check.c (gfc_check_random_seed): Correct the check on the + number of arguments to RANDOM_SEED. + * intrinsic.c (add_subroutines): Add a resolution function to + RANDOM_SEED. + * iresolve.c (gfc_resolve_random_seed): New function. + * intrinsic.h (gfc_resolve_random_seed): New prototype. + +2007-08-12 Francois-Xavier Coudert + + PR fortran/32860 + * error.c (error_uinteger): New function. + (error_integer): Call error_uinteger. + (error_print): Handle %u, %lu, %li and %ld format specifiers. + * interface.c (compare_actual_formal): Use the new %lu specifier. + +2007-08-12 Francois-Xavier Coudert + + PR fortran/31629 + * lang.opt (-fmodule-private): New option. + * gfortran.h (gfc_option_t): Add flag_module_private member. + * invoke.texi (-fmodule-private): Document the new option. + * module.c (gfc_check_access): Allow the -fmodule-private option + to modify the default behaviour. + * options.c (gfc_init_options): Initialize flag_module_private. + (gfc_handle_option): Handle -fmodule-private. + +2007-08-12 Francois-Xavier Coudert + + PR fortran/29600 + * intrinsic.c (add_functions): Add KIND arguments to COUNT, + IACHAR, ICHAR, INDEX, LBOUND, LEN, LEN_TRIM, SCAN, SIZE, UBOUND + and VERIFY. + * iresolve.c (gfc_resolve_count): Add kind argument. + (gfc_resolve_iachar): New function. + (gfc_resolve_ichar): Add kind argument. + (gfc_resolve_index_func): Likewise. + (gfc_resolve_lbound): Likewise. + (gfc_resolve_len): Likewise. + (gfc_resolve_len_trim): Likewise. + (gfc_resolve_scan): Likewise. + (gfc_resolve_size): New function. + (gfc_resolve_ubound): Add kind argument. + (gfc_resolve_verify): Likewise. + * trans-decl.c (gfc_get_extern_function_decl): Allow specific + intrinsics to have 4 arguments. + * check.c (gfc_check_count): Add kind argument. + (gfc_check_ichar_iachar): Likewise. + (gfc_check_index): Likewise. + (gfc_check_lbound): Likewise. + (gfc_check_len_lentrim): New function. + (gfc_check_scan): Add kind argument. + (gfc_check_size): Likewise. + (gfc_check_ubound): Likewise. + (gfc_check_verify): Likewise. + * intrinsic.texi: Update documentation for COUNT, IACHAR, ICHAR, + INDEX, LBOUND, LEN, LEN_TRIM, SCAN, SIZE, UBOUND and VERIFY. + * simplify.c (get_kind): Whitespace fix. + (int_expr_with_kind): New function. + (gfc_simplify_iachar): Add kind argument. + (gfc_simplify_iachar): Likewise. + (gfc_simplify_ichar): Likewise. + (gfc_simplify_index): Likewise. + (simplify_bound_dim): Likewise. + (simplify_bound): Likewise. + (gfc_simplify_lbound): Likewise. + (gfc_simplify_len): Likewise. + (gfc_simplify_len_trim): Likewise. + (gfc_simplify_scan): Likewise. + (gfc_simplify_shape): Pass NULL as kind argument to gfc_simplify_size. + (gfc_simplify_size): Add kind argument. + (gfc_simplify_ubound): Likewise. + (gfc_simplify_verify): Likewise. + * intrinsic.h: Update prototypes and add new ones. + * trans-intrinsic.c (gfc_conv_intrinsic_index): Rename into + gfc_conv_intrinsic_index_scan_verify. + (gfc_conv_intrinsic_scan, gfc_conv_intrinsic_verify): Remove. + (gfc_conv_intrinsic_function): Call + gfc_conv_intrinsic_index_scan_verify to translate the INDEX, + SCAN and VERIFY intrinsics. + +2007-08-11 Francois-Xavier Coudert + + PR fortran/31189 + * invoke.texi (-fbacktrace): Document the new behaviour. + +2007-08-11 Francois-Xavier Coudert + + PR fortran/32937 + * trans-array.c (gfc_conv_expr_descriptor): Use + gfc_conv_const_charlen to generate backend_decl of right type. + * trans-expr.c (gfc_conv_expr_op): Use correct return type. + (gfc_build_compare_string): Use int type instead of default + integer kind for single character comparison. + (gfc_conv_aliased_arg): Give backend_decl the right type. + * trans-decl.c (gfc_build_intrinsic_function_decls): Make + compare_string return an int. + +2007-08-11 Ian Lance Taylor + + * f95-lang.c (gfc_get_alias_set): Change return type to + alias_set_type. + +2007-08-10 Francois-Xavier Coudert + + PR fortran/31270 + * trans.c (gfc_trans_runtime_check): Reorder arguments and + add extra variable arguments. Hand them to the library function. + * trans.h (gfc_trans_runtime_check): Update prototype. + * trans-array.c (gfc_trans_array_bound_check): Issue more + detailled error messages. + (gfc_conv_array_ref): Likewise. + (gfc_conv_ss_startstride): Likewise. + (gfc_trans_dummy_array_bias): Reorder arguments to + gfc_trans_runtime_check. + * trans-expr.c (gfc_conv_substring): Issue more detailled + error messages. + (gfc_conv_function_call): Reorder arguments to gfc_trans_runtime_check. + * trans-stmt.c (gfc_trans_goto): Likewise. + * trans-io.c (set_string): Reorder arguments to + gfc_trans_runtime_check and issue a more detailled error message. + * trans-decl.c (gfc_build_builtin_function_decls): Make + runtime_error and runtime_error_at handle a variable number of + arguments. + * trans-intrinsic.c (gfc_conv_intrinsic_bound): Reorder arguments + to gfc_trans_runtime_check. + (gfc_conv_intrinsic_minmax): Likewise. + (gfc_conv_intrinsic_repeat): Issue more detailled error messages. + +2007-08-10 Kaveh R. Ghazi + + * gfortranspec.c (lang_specific_driver): Use CONST_CAST. + * options.c (gfc_post_options): Likewise. + * parse.c (parse_omp_structured_block): Likewise. + * st.c (gfc_free_statement): Likewise. + +2007-08-10 Francois-Xavier Coudert + + PR fortran/32933 + * trans-decl.c (gfc_build_builtin_function_decls): Change + prototype for associated. + * trans-intrinsic.c (gfc_conv_intrinsic_minmax): Convert the + result of __builtin_isnan into a boolean. + (gfc_conv_intrinsic_strcmp): Cleanup. + (gfc_conv_associated): Convert the result of the associated + function into a boolean. + +2007-08-09 Tobias Burnus + + PR fortran/32987 + * io.c (format_token): Add FMT_ERROR. + (next_char_not_space): Print error/warning when + '\t' are used in format specifications. + (format_lex): Propagate error. + (check_format): Ditto. + +2007-08-09 Tobias Burnus + + PR fortran/33001 + * arith.c (arith_error): Point in the error message + to -fno-range-check. + +2007-08-09 Francois-Xavier Coudert + + PR fortran/32902 + * intrinsic.texi (SIZEOF): Add mention to C_SIZE_T. + +2007-08-06 Christopher D. Rickett + + PR fortran/32732 + * trans-expr.c (gfc_conv_scalar_char_value): Convert the tree and + actual arg expressions for scalar characters passed by-value to + bind(c) routines. + (gfc_conv_function_call): Call gfc_conv_scalar_char_value. + * trans.h: Add prototype for gfc_conv_scalar_char_value. + * trans-decl.c (generate_local_decl): Convert by-value character + dummy args of bind(c) procedures using + gfc_conv_scalar_char_value. + +2007-08-06 Francois-Xavier Coudert + + PR fortran/30947 + * iresolve.c (gfc_resolve_alarm_sub): Suffix the subroutine name + with the kind of the STATUS argument. + +2007-08-06 Francois-Xavier Coudert + + PR fortran/30948 + * intrinsic.c (add_functions): Fix name of argument to CHDIR. + +2007-08-06 Francois-Xavier Coudert + + PR fortran/30933 + * iresolve.c (gfc_resolve_exit): Convert argument to default + integer kind. + +2007-08-06 Daniel Franke + + * resolve.c (derived_pointer): Removed, replaced callers by access + to appropiate attribute bit. + (derived_inaccessable): Shortcut recursion depth. + (resolve_fl_namelist): Fixed checks for private components in namelists. + +2007-08-06 Francois-Xavier Coudert + + PR fortran/29828 + * trans.h (gfor_fndecl_string_minmax): New prototype. + * trans-decl.c (gfor_fndecl_string_minmax): New variable. + (gfc_build_intrinsic_function_decls): Create gfor_fndecl_string_minmax. + * check.c (gfc_check_min_max): Allow for character arguments. + * trans-intrinsic.c (gfc_conv_intrinsic_minmax_char): New function. + (gfc_conv_intrinsic_function): Add special case for MIN and MAX + intrinsics with character arguments. + * simplify.c (simplify_min_max): Add simplification for character + arguments. + +2007-08-06 Francois-Xavier Coudert + + PR fortran/31612 + * invoke.texi: Adjust documentation for option -fsyntax-only. + +2007-08-05 Francois-Xavier Coudert + Tobias Burnus + + PR fortran/32979 + * intrinsic.h (gfc_check_isnan): Add prototype. + * gfortran.h (gfc_isym_id): Add GFC_ISYM_ISNAN. + * intrinsic.c (add_functions): Add ISNAN intrinsic. + * check.c (gfc_check_isnan): New function. + * trans-intrinsic.c (gfc_conv_intrinsic_isnan): New function. + (gfc_conv_intrinsic_function): Call gfc_conv_intrinsic_isnan + to translate ISNAN. + * intrinsic.texi: Document ISNAN. + +2007-08-04 Paul Thomas + + PR fortran/31214 + * symbol.c (get_unique_symtree): Moved from module.c. + * module.c (get_unique_symtree): Moved to symbol.c. + * decl.c (get_proc_name): Transfer the typespec from the local + symbol to the module symbol, in the case that an entry is also + a module procedure. Ensure the local symbol is cleaned up by + pointing to it with a unique symtree. + + * dump_parse_tree (gfc_show_code_node): Add EXEC_ASSIGN_CALL. + +2008-08-04 Steven G. Kargl + + PR fortran/32969 + * iresolve.c (gfc_resolve_rrspacing): Convert argument(s) to + expected KIND. + (gfc_resolve_scale): Ditto. + (gfc_resolve_set_exponent): Ditto. + (gfc_resolve_spacing): Ditto. + + PR fortran/32968 + * trans-intrinsic.c (gfc_conv_intrinsic_si_kind, + gfc_conv_intrinsic_sr_kind): Convert the argument(s) to the + expected KIND, and fold the result to the expected KIND. + +2007-08-03 Francois-Xavier Coudert + + PR fortran/31202 + * f95-lang.c (gfc_init_builtin_functions): Defin builtins for + lround{f,,l} and llround{f,,l}. + * trans-intrinsic.c (build_fix_expr): Generate calls to the + {l,}round{f,,l} functions. + +2007-08-01 Thomas Koenig + + PR libfortran/32954 + * intrinsic.c (resolve_mask_arg): New function. + (gfc_resolve_maxloc): Use resolve_mask_arg for mask resolution. + (gfc_resolve_maxval): Likewise. + (gfc_resolve_minloc): Likewise. + (gfc_resolve_minval): Likewise. + (gfc_resolve_pack): Likewise. + (gfc_resolve_product): Likewise. + (gfc_resolve_sum): Likewise. + (gfc_resolve_unpack): Likewise. + +2007-08-01 Tobias Burnus + + PR fortran/32936 + * match.c (gfc_match_allocate): Better check that STAT is + a variable. + + * check.c (gfc_check_allocated): Reorder checks to improve + error message. + +2007-08-01 Nick Clifton + + * arith.c: Change copyright header to refer to version 3 of the + GNU General Public License and to point readers at the COPYING3 + file and the FSF's license web page. + * openmp.c, interface.c, intrinsic.c, trans-array.c, trans-expr.c, + symbol.c, iso-fortran-env.def, intrinsic.h, decl.c, trans-array.h, + matchexp.c, dump-parse-tree.c, trans-common.c, array.c, + Make-lang.in, trans-openmp.c, gfortran.h, error.c, + iso-c-binding.def, lang.opt, data.c, trans-const.c, trans-stmt.c, + expr.c, trans-const.h, trans-stmt.h, module.c, trans.c, scanner.c, + trans-types.c, trans.h, gfortranspec.c, trans-types.h, + lang-specs.h, io.c, bbt.c, resolve.c, f95-lang.c, st.c, + iresolve.c, match.c, trans-decl.c, trans-io.c, target-memory.c, + match.h, target-memory.h, parse.c, arith.h, check.c, dependency.c, + parse.h, types.def, convert.c, dependency.h, primary.c, + trans-intrinsic.c, options.c, misc.c, simplify.c: Likewise. + +2007-08-01 Daniel Franke + + * trans-decl.c (generate_local_decl): Emit warning on unused parameter + on "-Wall -Wextra" or "-Wunused-parameter" but not on "-Wall", changed + messages that start with lower case to upper case. + * invoke.texi (-Wparameter-unused): Document differences between gcc + and gfortran regarding this option. + +2007-08-01 Daniel Franke + + PR fortran/32945 + * expr.c (check_specification_function): Skip check if no symtree + is available. + +2007-08-01 Paul Thomas + + PR fortran/31609 + * resolve.c (resolve_entries): Entries declared to be module + procedures must point to the function namespace. + +2007-07-31 Francois-Xavier Coudert + + PR fortran/32938 + * trans-stmt.c (gfc_trans_return): Convert to correct type. + +2007-07-31 Steven G. Kargl + + PR fortran/32942 + * trans-intrinsic.c (gfc_conv_intrinsic_exponent): Convert to correct + type. + +2007-07-29 Jerry DeLisle + + * invoke.texi: Document -fsign-zero flag. + +2007-07-29 Paul Thomas + + PR fortran/31211 + * trans-expr.c (gfc_conv_expr_reference): Add block for case of + scalar pointer functions so that NULL result is correctly + handled. + + PR fortran/32682 + * trans-array.c (gfc_trans_array_constructor): On detecting a + multi-dimensional parameter array, set the loop limits. + +2007-07-29 Daniel Franke + + PR fortran/32906 + * resolve.c (resolve_fl_parameter): Check for constant shape arrays, + adjusted error message. + +2007-07-29 Daniel Franke + + * invoke.texi: Removed -w from option summary. + +2007-07-29 Daniel Franke + + PR fortran/32879 + * intrinsic.texi (IRAND, RAND, RANDOM_NUMBER): Document algorithm + used for random number generator. + +2007-07-28 Kazu Hirata + + * gfortran.h, interface.c, resolve.c, symbol.c: Fix comment + typos. + * intrinsic.texi, invoke.texi: Fix typos. + +2007-07-28 Jerry DeLisle + + PR fortran/31609 + * resolve.c (generic_sym): Check for a same symbol and if so, return to + avoid infinite recursion. + +2007-07-28 Daniel Franke + + PR fortran/31818 + PR fortran/32876 + PR fortran/32905 + * gfortran.h (symbol_attribute): Added bits for pointer_comp, + private_comp. + * parse.c (parse_derived): Set pointer_comp/private_comp bits if + the derived type ultimately contains pointer components or private + components. + * module.c (ab_attribute): New values AB_POINTER_COMP, AB_PRIVATE_COMP. + (attr_bits): Added names for new ab_attributes. + (mio_symbol_attribute): Save/restore new attribute bits in modules. + * match.c (gfc_match_namelist): Removed check for namelist objects + of assumed shape. + * resolve.c (resolve_fl_namelist): Added check for pointer or + private components in nested types. Added check for namelist objects + of assumed shape. + +2007-07-28 Paul Thomas + + PR fortran/32880 + * trans-expr.c (gfc_trans_scalar_assign): Revert to fixed order + for lse and rse pre expressions, for derived types with + allocatable components. Instead, assign the lhs to a temporary + and deallocate after the assignment. + +2007-07-28 Janne Blomqvist + + PR fortran/32909 + * trans-stmt.c (gfc_trans_character_select): Replace occurrences + of gfc_c_int_type_node with integer_type_node. + * trans-decl.c (gfc_build_intrinsic_function_decls): Likewise. + (gfc_build_builtin_function_decls): Likewise. + (gfc_generate_function_code): Likewise. + * trans-io.c (gfc_build_io_library_fndecls): Likewise. + +2007-07-27 Janne Blomqvist + + * trans-decl.c (gfc_build_builtin_function_decls): Use existing + gfc_array_index_type rather than creating another typenode for + gfc_index_integer_kind. + +2007-07-27 Janne Blomqvist + + * trans-io.c (gfc_build_io_library_fndecls): Change to use + gfc_array_index_type for array descriptor triplets instead of + gfc_int4_type_node. + +2007-07-26 Steven G. Kargl + + PR fortran/32899 + * resolve.c (resolve_operator): Add INTRINSIC_EQ_OS comparison. + +2007-07-27 Jerry DeLisle + Daniel Franke + + PR fortran/32760 + * primary.c (match_variable): Do not call gfc_add_flavor if symbol has + attribute of ACCESS_PUBLIC or ACCESS_PRIVATE already marked. + +2007-07-27 Francois-Xavier Coudert + + PR fortran/32035 + * trans-stmt.c (gfc_trans_character_select): Replace the + mechanism with labels by a SWITCH_EXPR. + * trans-decl.c (gfc_build_builtin_function_decls): Change + return type for select_string. + +2007-07-27 Paul Thomas + + PR fortran/32903 + * trans-decl.c (gfc_trans_deferred_vars): Set intent(out) + derived types as referenced, if they have the the default + initializer set. + +2007-07-25 Kaveh R. Ghazi + + * gfortran.h (generate_isocbinding_symbol): Constify. + * symbol.c (gen_special_c_interop_ptr, gen_cptr_param, + generate_isocbinding_symbol): Likewise. + +2007-07-24 Paul Thomas + + PR fortran/31205 + PR fortran/32842 + * trans-expr.c (gfc_conv_function_call): Remove the default + initialization of intent(out) derived types. + * symbol.c (gfc_lval_expr_from_sym): New function. + * matchexp.c (gfc_get_parentheses): Return argument, if it is + character and posseses a ref. + * gfortran.h : Add prototype for gfc_lval_expr_from_sym. + * resolve.c (has_default_initializer): Move higher up in file. + (resolve_code): On detecting an interface assignment, check + if the rhs and the lhs are the same symbol. If this is so, + enclose the rhs in parenetheses to generate a temporary and + prevent any possible aliasing. + (apply_default_init): Remove code making the lval and call + gfc_lval_expr_from_sym instead. + (resolve_operator): Give a parentheses expression a type- + spec if it has no type. + * trans-decl.c (gfc_trans_deferred_vars): Apply the a default + initializer, if any, to an intent(out) derived type, using + gfc_lval_expr_from_sym and gfc_trans_assignment. Check if + the dummy is present. + +2007-07-24 Daniel Franke + + PR fortran/32867 + * expr.c (check_init_expr): Simplify matched functions. + +2007-07-24 Daniel Franke + + PR fortran/32778 + * intrinsic.c (add_sym): Do not exclude any symbols, even if not part + of the selected standard. + (make generic): Likewise. + (make alias): Likewise, set standard the alias belongs to. + (add_subroutines): Call make_noreturn unconditionally. + (check_intrinsic_standard): Change return value to try. + (gfc_intrinsic_func_interface): Check return value of above function. + (gfc_intrinsic_sub_interface): Likewise. + +2007-07-24 Thomas Koenig + + PR fortran/30814 + * trans-decl.c (generate_function_code): Add argument + for flag_bounds_check to the array for set_options. + * invoke.texi (-fbounds-check): Document new libarary run-time + behaviour. + +2007-07-23 Daniel Franke + + PR fortran/25104 + PR fortran/31639 + * expr.c (check_transformational): Reject valid transformational + intrinsics to avoid ICE. + (check_inquiry): Report error for assumed character lengths for + all supported standards. + (check_init_expr): Whitespace fix. + +2007-07-23 Christopher D. Rickett + + PR fortran/32797 + PR fortran/32800 + * decl.c (verify_bind_c_sym): Use the result symbol for functions + with a result clause. Warn if implicitly typed. Verify the type + and rank of the SHAPE argument, if given. + * resolve.c (gfc_iso_c_sub_interface): Use gfc_procedure_use to + check the actual args against the formal, sorting them if + necessary. + * symbol.c (gen_shape_param): Initialize type of SHAPE param to + BT_VOID. + +2007-07-23 Christopher D. Rickett + + PR fortran/32732 + * trans-decl.c (generate_local_decl): Convert the TREE_TYPE for by + value character dummy args of BIND(C) procedures. + * trans-expr.c (gfc_conv_variable): Do not build address + expression for BT_CHARACTER dummy args. + +2007-07-23 Christopher D. Rickett + Tobias Burnus + + PR fortran/32600 + * trans-expr.c (gfc_conv_function_call): Handle c_funloc. + * trans-types.c: Add pfunc_type_node. + (gfc_init_types,gfc_typenode_for_spec): Use it. + * resolve.c (gfc_iso_c_func_interface): Fix whitespace and + improve error message. + +2007-07-22 Daniel Franke + + PR fortran/32710 + * parse.c (gfc_fixup_sibling_symbols): No replacement of symbols if + the current is a namelist. + +2007-07-22 Daniel Franke + + PR fortran/29962 + PR fortran/31253 + PR fortran/31265 + PR fortran/31639 + * gfortran.h (gfc_intrinsic_sym): Changed members elemental, pure, + generic, specific, actual_ok, noreturn into bits of a bitfield, + added bits for inquiry, transformational, conversion. + * check.c (non_init_transformational): Removed, removed all callers. + * intrinsic.c (enum class): New. + (add_sym*): Replaced argument elemetal by enum class. Changed all + callers. + (add_functions): Assign appropriate classes to intrinsic functions. + (add_subroutines): Assign appropriate classes to intrinsic subroutines. + (add_conv): Set conversion attribute. + (gfc_init_expr_extensions): Removed, removed all callers. + (gfc_intrinsic_func_interface): Reimplemented check for non-standard + initializatione expressions. + * expr.c (check_specification_function): New. + (gfc_is_constant_expr): Added check for specification functions. + (check_init_expr_arguments): New. + (check_inquiry): Changed return value to MATCH, added checks for + inquiry functions defined by F2003. + (check_transformational): New. + (check_null): New. + (check_elemental): New. + (check_conversion): New. + (check_init_expr): Call new check functions, add more specific error + messages. + +2007-07-21 Christopher D. Rickett + + PR fortran/32627 + * resolve.c (set_name_and_label): Set kind number for character + version of c_f_pointer. + (gfc_iso_c_sub_interface): Set the kind of the SHAPE formal arg to + that of the actual SHAPE arg. + * symbol.c (gen_shape_param): Initialize kind for SHAPE arg. + +2007-07-21 Christopher D. Rickett + + PR fortran/32801 + * symbol.c (generate_isocbinding_symbol): Remove unnecessary + conditional. + + PR fortran/32804 + * resolve.c (gfc_iso_c_func_interface): Reject assumed-shape and + deferred-shape arrays as args to C_LOC. Fix bug in testing + character args to C_LOC. + +2007-07-21 Lee Millward + + PR fortran/32823 + * trans-intrinsic.c (gfc_conv_intrinsic_int): Evaluate all + arguments passed, not just the first one. Adjust code to + refer to "args[0]" instead of "arg" as a result. + +2007-07-19 Christopher D. Rickett + + PR fortran/32600 + * trans-expr.c (gfc_conv_function_call): Inline C_LOC. + +2007-07-18 Christopher D. Rickett + + PR fortran/32801 + * symbol.c (generate_isocbinding_symbol): Fix bug where + ISOCBINDING_FUNPTR was generated for C_LOC instead of the needed + ISOCBINDING_PTR. + +2007-07-17 Janus Weil + + PR fortran/32535 + * resolve.c (resolve_fl_namelist): Check for namelist private + components in contained subprograms. + +2007-07-17 Paul Thomas + + PR fortran/31320 + PR fortran/32665 + * trans-expr.c (gfc_trans_subcomponent_assign): Ensure that + renormalization unity base is done independently of existing + lbound value. + (gfc_trans_scalar_assign): If rhs is not a variable, put + lse->pre after rse->pre to ensure that de-allocation of lhs + occurs after evaluation of rhs. + +2007-07-16 Lee Millward + + PR fortran/32222 + PR fortran/32238 + PR fortran/32242 + * trans-intrinsic.c (gfc_conv_intrinsic_function_args): Adjust + to operate on a stack allocated array for the intrinsic arguments + instead of creating a TREE_LIST. Add two new parameters for the + array and the number of elements. Update all callers to allocate + an array of the correct length to pass in. Update comment. + (gfc_intrinsic_argument_list_length): New function. + (gfc_conv_intrinsic_conversion): Call it. + (gfc_conv_intrinsic_mnimax): Likewise. + (gfc_conv_intrinsic_merge): Likewise. + (gfc_conv_intrinsic_lib_function): Call it. Use new CALL_EXPR + constructors. + (gfc_conv_intrinsic_cmplx): Likewise. + (gfc_conv_intrinsic_ctime): Likewise. + (gfc_covn_intrinsic_fdate): Likewise. + (gfc_conv_intrinsic_ttynam): Likewise. + (gfc_conv_intrinsic_ishftc): Likewise. + (gfc_conv_intrinsic_index): Likewise. + (gfc_conv_intrinsic_scan): Likewise. + (gfc_conv_intrinsic_verify): Likewise. + (gfc_conv_intrinsic_trim): Likewise. + (gfc_conv_intrinsic_aint): Use new CALL_EXPR constructors. + (gfc_conv_intrinsic_exponent): Likewise. + (gfc_conv_intrinsic_bound): Likewise. + (gfc_conv_intrinsic_abs): Likewise. + (gfc_conv_intrinsic_mod): Likewise. + (gfc_conv_intrinsic_sign): Likewise. + (gfc_conv_intrinsic_len): Likewise. + (gfc_conv_intrinsic_adjust): Likewise. + (gfc_conv_intrinsic_si_kind): Likewise. + +2007-07-16 Janne Blomqvist + + PR fortran/32748 + * trans-decl.c (gfc_build_builtin_function_decls): Remove + DECL_IS_MALLOC attribute from internal_realloc, thus reverting + part of my 2007-07-03 patch. + +2007-07-15 Jerry DeLisle + Francois-Xavier Coudert + + PR fortran/32611 + * gfortran.h (gfc_option_t): Add flag_sign_zero field. + * lang.opt (-fsign-zero): New option. + * trans.h: Rename gfor_fndecl_set_std into gfor_fndecl_set_options. + * trans-decl.c (gfc_build_builtin_function_decls): Build the function + declaration to pass an array containing the options to be used by the + runtime library. (gfc_generate_function_code): Build an array that + contains option values to be passed to the runtime library and the call + to the function. + * options.c (gfc_init_options): Initialize the flag_sign_zero field. + (gfc_handle_option): Handle the -fsign-zero option. + +2007-07-15 Francois-Xavier Coudert + + PR fortran/32036 + * trans-array.c (gfc_conv_array_ref): Only evaluate index once. + +2007-07-15 Francois-Xavier Coudert + + PR fortran/32357 + * iresolve.c (gfc_resolve_mvbits): Convert FROMPOS, LEN and TOPOS + to C int. + +2007-07-14 Thomas Koenig + + PR libfortran/32731 + * iresolve.c(gfc_resolve_pack): A scalar mask has + to be kind=4, an array mask with kind<4 is converted + to gfc_default_logical_kind automatically. + (gfc_resolve_unpack): Convert mask to gfc_default_lotical_kind + if it has a kind<4. + +2007-07-14 Paul Thomas + + PR fortran/32724 + * parse.c (parse_spec): Emit error on unexpected statement + function. + +2007-07-13 Daniel Franke + + * invoke.texi: Unified upper- and lower-case in menus. + (-w, -W): Removed, documented by gcc. + * intrinsic.texi: Unified Class-section entries, added + subroutine/function warning where appropiate. + +2007-07-12 Daniel Franke + + PR fortran/31639 + * decl.c (gfc_match_suffix): Removed surplus general error that hides + a more specific message. + * resolve.c (resolve_fl_variable): Reject illegal initializiers only + if not already done. + (resolve_fl_procedure): Added check for initializers of functions. + +2007-07-12 Daniel Franke + + PR fortran/32704 + * invoke.texi (-static-libgfortran): Document new option. + +2007-07-12 Paul Thomas + + PR fortran/32634 + PR fortran/32727 + * module.c (write_generic): Restore patch of 2007-07-10 and use + symbol name if there are no use names. + +2007-07-12 Christopher D. Rickett + + PR fortran/32599 + * decl.c (verify_c_interop_param): Require character string dummy + args to BIND(C) procedures to have length 1. + * resolve.c (resolve_fl_procedure): Modify parameter checking for + BIND(C) procedures. + + PR fortran/32601 + * resolve.c (gfc_iso_c_func_interface): Verify that a valid + expression is given as an argument to C_LOC and C_ASSOCIATED. + * trans-io.c (transfer_expr): Add argument for code block. Add + standards check to determine if an error message should be + reported for printing C_PTR or C_FUNPTR. + (transfer_array_component): Update arguments to transfer_expr. + (gfc_trans_transfer): Ditto. + + * symbol.c (gen_cptr_param): Fix whitespace. + +2007-07-12 Jakub Jelinek + + PR fortran/32550 + * trans.h (GFC_POINTER_TYPE_P): Define. + * trans-types.c (gfc_sym_type): Set it for types on attr->sym.pointer. + * trans-openmp.c (gfc_omp_privatize_by_reference): Return false + if GFC_POINTER_TYPE_P is set on the type. + +2007-07-12 Richard Guenther + + * trans-intrinsic.c (gfc_conv_intrinsic_repeat): Convert + arguments to gfc_charlen_type_node. + * trans-io.c (gfc_convert_array_to_string): Convert type + size to gfc_array_index_type. + +2007-07-12 Daniel Franke + + PR fortran/32634 + PR fortran/32727 + * module.c: Reverted Paul's patch from 2007-07-10. + +2007-07-11 Richard Guenther + + * trans-array.c (gfc_conv_array_parameter): Use correct + types for comparison. + * trans-intrinsic.c (gfc_conv_intrinsic_repeat): Use + correct types for POINTER_PLUS_EXPR. + * trans-stmt.c (gfc_trans_forall_loop): Use correct type + for integer one constant. + +2007-07-10 Paul Thomas + + PR fortran/32157 + * resolve.c (is_external_proc): New function. Adds test that + the symbol is not an intrinsic procedure. + * (resolve_function, resolve_call): Replace logical statements + with call to is_external_proc. + + PR fortran/32689 + * simplify.c (gfc_simplify_transfer): If mold has rank, the + result is an array. + + PR fortran/32634 + * module.c (write_generic): Write the local name of the + interface. + +2007-07-09 Francois-Xavier Coudert + + PR fortran/29459 + * trans-array.c (gfc_trans_array_constructor): Mark offset field + with TREE_NO_WARNING. + * trans-decl.c (gfc_build_qualified_array): Mark lbound, ubound, + stride and size variables with TREE_NO_WARNING. + +2007-07-09 Steven G. Kargl + + * trans-decl.c (set_tree_decl_type_code): Remove function. + (generate_local_decl): Remove reference to set_tree_decl_type_code. + +2007-07-09 Daniel Franke + + PR fortran/31129 + * trans-decl.c (generate_local_decl) Emit a warning if an unused + parameter is found. + +2007-07-08 Daniel Franke + + PR fortran/29876 + * module.c (gfc_match_use): Do not set an non-existant + intrinsic operator if a user-defined operator is found. + +2007-07-08 Daniel Franke + + PR fortran/24784 + PR fortran/28004 + * trans-decl.c (generate_local_decl): Adjusted warning on unused + dummy arguments, tell middle-end not to emit additional warnings. + +2007-07-08 Daniel Franke + Tobias Schlüter + + PR fortran/17711 + * gfortran.h (gfc_intrinsic_op): Added INTRINSIC_EQ_OS, + INTRINSIC_NE_OS, INTRINSIC_GT_OS, INTRINSIC_GE_OS, + INTRINSIC_LT_OS and INTRINSIC_LE_OS. + * arith.c (eval_intrinsic, eval_type_intrinsic0): Likewise. + * arith.h (gfc_eq, gfc_ne, gfc_gt, gfc_ge, gfc_lt, gfc_le): + Added gfc_intrinsic_op as third argument type. + * dump-parse-tree.c (gfc_show_expr): Account for new enum values. + * expr.c (simplify_intrinsic_op, check_intrinsic_op): Likewise. + * interface.c (check_operator_interface): Likewise. + (gfc_check_interfaces): Added cross-checks for FORTRAN 77 and + Fortran 90 style operators using new enum values. + (gfc_extend_expr): Likewise. + (gfc_add_interface): Likewise. + * match.c (intrinsic_operators): Distinguish FORTRAN 77 style + operators from Fortran 90 style operators using new enum values. + * matchexp.c (match_level_4): Account for new enum values. + * module.c (mio_expr): Likewise. + * resolve.c (resolve_operator): Deal with new enum values, fix + inconsistent error messages. + * trans-expr.c (gfc_conv_expr_op): Account for new enum values. + +2007-07-08 Tobias Burnus + + PR fortran/32669 + * interface.c (get_expr_storage_size): Properly obtain lower bound. + (compare_actual_formal): Add space before parenthesis. + +2007-07-08 Daniel Franke + + PR fortran/25094 + * resolve.c (resolve_fl_procedure): Added check for PRIVATE types + in PUBLIC interfaces. + +2007-07-07 Jerry DeLisle + + PR fortran/32644 + * decl.c (match_attr_spec): Don't return MATCH_ERROR if comma found and + gfc_match_bind_c does not return MATCH_YES. + +2007-07-07 Kazu Hirata + + * decl.c, gfortran.h, interface.c, module.c, resolve.c, + trans-array.c, trans-decl.c: Fix comment typos. Follow + spelling conventions. + * intrinsic.texi: Fix typos. Follow spelling conventions. + +2007-05-06 Daniel Franke + + PR fortran/32633 + * symbol.c (save_status): New. + * gfortran.h (save_status): Added external declaration. + (check_conflict): Check for conflicting explicite SAVE statements + only. + (gen_special_c_interop_ptr): Use SAVE_EXPLICIT constant. + * module.c (ab_attribute, attr_bits): Removed enumerator value + AB_SAVE for save attribute. + (mio_symbol_attribute): Import/export the full SAVE status, + removed usage of AB_SAVE. + * dump-parse-tree.c (gfc_show_attr): Dump full SAVE status. + * decl.c (add_init_expr_to_sym): Set SAVE_IMPLICIT only if not + already explicit. + +2007-07-05 Daniel Franke + Tobias Burnus + + PR fortran/32359 + * gfortran.h (symbol_attribute): Change save attribute into an enum. + * decl.c (add_init_expr_to_sym): Set it to SAVE_IMPLICIT. + * symbol.c (gfc_add_save): Check for SAVE_EXPLICIT. + * resolve.c (resolve_fl_variable): Check for SAVE_EXPLICIT. + (resolve_symbol): Allow OMP threadprivate with + initialization SAVEd and save_all variable. + * trans-decl.c (gfc_finish_var_decl): Remove obsolete sym->value check. + +2007-07-05 Paul Thomas + + PR fortran/32526 + * match.c (gfc_match_call): Check, in all cases, that a symbol + is neither generic nor a subroutine before trying to add it as + a subroutine. + + PR fortran/32613 + * match.c (gfc_match_do): Reset the implied_index attribute. + +2007-07-04 Francois-Xavier Coudert + + PR fortran/31198 + * trans-intrinsic.c (trans-intrinsic.c): Handle optional + arguments correctly for MIN and MAX intrinsics. + +2007-07-03 Jerry DeLisle + + PR fortran/32545 + * io.c (check_format): Always call gfc_error for errors. + (check_format_string): Change type of this function to try and + return the result of check_format. + (check_io_constraints): Return MATCH_ERROR if check_format_string + returns FAILURE. + +2007-07-03 Jerry DeLisle + + PR fortran/32612 + * decl.c (get_proc_name): Include attr->mod_proc in check for error. + +2007-07-03 Jerry DeLisle + + PR fortran/32432 + * gfortran.h: Change type of gfc_assign_data_value from void to try. + * data.c (gfc_assign_data_value): Return FAILURE if error found. + * resolve.c (check_data_variable): If gfc_assign_data_value returns + failure, break out of loop and return failure. + +2007-07-03 Christopher D. Rickett + + PR fortran/32579 + * symbol.c (gen_cptr_param): Generate C_PTR and C_FUNPTR if necessary. + (build_formal_args): Pass intrinsic module symbol id to + gen_cptr_param. + +2007-07-03 Tobias Burnus + + PR fortran/25062 + * resolve.c (resolve_common_blocks): New check function. + (resolve_types): Use it. + +2007-07-03 Tobias Burnus + + PR fortran/30940 + * interface.c (get_sym_storage_size): New function. + (get_sym_storage_size): New function. + (compare_actual_formal): Enhance sequence association + support and improve checking. + +2007-07-03 Janne Blomqvist + + * trans-decl.c (gfc_build_builtin_function_decls): Mark + internal_realloc as a malloc function. + +2007-07-03 Tobias Burnus + + PR fortran/20888 + * resolve.c (resolve_operator): Check for NULL as operand. + +2007-07-02 Tobias Burnus + + * gfortran.texi (Fortran 2003): Add ISO Bind C. + * intrinsic.texi (C_ASSOCIATED,C_F_POINTER,C_F_PROCPOINTER, + C_FUNLOC,C_LOC): Document new ISO Bind C intrinsics. + +2007-07-01 Christopher D. Rickett + + * interface.c (gfc_compare_derived_types): Special case for comparing + derived types across namespaces. + (gfc_compare_types): Deal with BT_VOID. + (compare_parameter): Use BT_VOID to accept ISO C Binding pointers. + * trans-expr.c (gfc_conv_function_call): Remove setting parm_kind + to SCALAR + (gfc_conv_initializer): Deal with ISO C Binding NULL_PTR and + NULL_FUNPTR. + (gfc_conv_expr): Convert expressions for ISO C Binding derived types. + * symbol.c (gfc_set_default_type): BIND(C) variables should not be + Implicitly declared. + (check_conflict): Add BIND(C) and check for conflicts. + (gfc_add_explicit_interface): Whitespace. + (gfc_add_is_bind_c): New function. + (gfc_copy_attr): Use it. + (gfc_new_symbol): Initialize ISO C Binding objects. + (get_iso_c_binding_dt): New function. + (verify_bind_c_derived_type): Ditto. + (gen_special_c_interop_ptr): Ditto. + (add_formal_arg): Ditto. + (gen_cptr_param): Ditto. + (gen_fptr_param): Ditto. + (gen_shape_param): Ditto. + (add_proc_interface): Ditto. + (build_formal_args): Ditto. + (generate_isocbinding_symbol): Ditto. + (get_iso_c_sym): Ditto. + * decl.c (num_idents_on_line, has_name_equals): New variables. + (verify_c_interop_param): New function. + (build_sym): Finish binding labels and deal with COMMON blocks. + (add_init_expr_to_sym): Check if the initialized expression is + an iso_c_binding named constants + (variable_decl): Set ISO C Binding type_spec components. + (gfc_match_kind_spec): Check match for C interoperable kind. + (match_char_spec): Fix comment. Chnage gfc_match_small_int + to gfc_match_small_int_expr. Check for C interoperable kind. + (match_type_spec): Clear the current binding label. + (match_attr_spec): Add DECL_IS_BIND_C. If BIND(C) is found, use it + to set attributes. + (set_binding_label): New function. + (set_com_block_bind_c): Ditto. + (verify_c_interop): Ditto. + (verify_com_block_vars_c_interop): Ditto. + (verify_bind_c_sym): Ditto. + (set_verify_bind_c_sym): Ditto. + (set_verify_bind_c_com_block): Ditto. + (get_bind_c_idents): Ditto. + (gfc_match_bind_c_stmt): Ditto. + (gfc_match_data_decl): Use num_idents_on_line. + (match_result): Deal with right paren in BIND(C). + (gfc_match_suffix): New function. + (gfc_match_function_decl): Use it. Code is re-arranged to deal with + ISO C Binding result clauses. + (gfc_match_subroutine): Deal with BIND(C). + (gfc_match_bind_c): New function. + (gfc_get_type_attr_spec): New function. Code is re-arranged in and + taken from gfc_match_derived_decl. + (gfc_match_derived_decl): Add check for BIND(C). + * trans-common.c: Forward declare gfc_get_common. + (gfc_sym_mangled_common_id): Change arg from 'const char *name' to + 'gfc_common_head *com'. Check for ISO C Binding of the common block. + (build_common_decl): 'com->name' to 'com in SET_DECL_ASSEMBLER_NAME. + * gfortran.h: Add GFC_MAX_BINDING_LABEL_LEN + (bt): Add BT_VOID + (sym_flavor): Add FL_VOID. + (iso_fortran_env_symbol, iso_c_binding_symbol, intmod_id): New enum + (CInteropKind_t): New struct. + (c_interop_kinds_table): Use it. Declare an array of structs. + (symbol_attribute): Add is_bind_c, is_c_interop, and is_iso_c + bitfields. + (gfc_typespec): Add is_c_interop; is_iso_c, and f90_type members. + (gfc_symbol): Add from_intmod, intmod_sym_id, binding_label, and + common_block members. + (gfc_common_head): Add binding_label and is_bind_c members. + (gfc_gsymbol): Add sym_name, mod_name, and binding_label members. + Add prototypes for get_c_kind, gfc_validate_c_kind, + gfc_check_any_c_kind, gfc_add_is_bind_c, gfc_add_value, + verify_c_interop, verify_c_interop_param, verify_bind_c_sym, + verify_bind_c_derived_type, verify_com_block_vars_c_interop, + generate_isocbinding_symbol, get_iso_c_sym, gfc_iso_c_sub_interface + * iso-c-binding.def: New file. This file contains the definitions + of the types provided by the Fortran 2003 ISO_C_BINDING intrinsic + module. + * trans-const.c (gfc_conv_constant_to_tree): Deal with C_NULL_PTR + or C_NULL_FUNPTR expressions. + * expr.c (gfc_copy_expr): Add BT_VOID case. For BT_CHARACTER, the + ISO C Binding requires a minimum string length of 1 for '\0'. + * module.c (intmod_sym): New struct. + (pointer_info): Add binding_label member. + (write_atom): Set len to 0 for NULL pointers. Check for NULL p and *p. + (ab_attribute): Add AB_IS_BIND_C, AB_IS_C_INTEROP and AB_IS_ISO_C. + (attr_bits): Add "IS_BIND_C", "IS_C_INTEROP", and "IS_ISO_C". + (mio_symbol_attribute): Deal with ISO C Binding attributes. + (bt_types): Add "VOID". + (mio_typespec): Deal with ISO C Binding components. + (mio_namespace_ref): Add intmod variable. + (mio_symbol): Check for symbols from an intrinsic module. + (load_commons): Check for BIND(C) common block. + (read_module): Read binding_label and use it. + (write_common): Add label. Write BIND(C) info. + (write_blank_common): Blank commons are not BIND(C). Explicitly + set is_bind_c=0. + (write_symbol): Deal with binding_label. + (sort_iso_c_rename_list): New function. + (import_iso_c_binding_module): Ditto. + (create_int_parameter): Add to args. + (use_iso_fortran_env_module): Adjust to deal with iso_c_binding + intrinsic module. + * trans-types.c (c_interop_kinds_table): new array of structs. + (gfc_validate_c_kind): New function. + (gfc_check_any_c_kind): Ditto. + (get_real_kind_from_node): Ditto. + (get_int_kind_from_node): Ditto. + (get_int_kind_from_width): Ditto. + (get_int_kind_from_minimal_width): Ditto. + (init_c_interop_kinds): Ditto. + (gfc_init_kinds): call init_c_interop_kinds. + (gfc_typenode_for_spec): Adjust for BT_VOID and ISO C Binding pointers. + Adjust handling of BT_DERIVED. + (gfc_sym_type): Whitespace. + (gfc_get_derived_type): Account for iso_c_binding derived types + * resolve.c (is_scalar_expr_ptr): New function. + (gfc_iso_c_func_interface): Ditto. + (resolve_function): Use gfc_iso_c_func_interface. + (set_name_and_label): New function. + (gfc_iso_c_sub_interface): Ditto. + (resolve_specific_s0): Use gfc_iso_c_sub_interface. + (resolve_bind_c_comms): New function. + (resolve_bind_c_derived_types): Ditto. + (gfc_verify_binding_labels): Ditto. + (resolve_fl_procedure): Check for ISO C interoperability. + (resolve_symbol): Check C interoperability. + (resolve_types): Walk the namespace. Check COMMON blocks. + * trans-decl.c (gfc_sym_mangled_identifier): Prevent the mangling + of identifiers that have an assigned binding label. + (gfc_sym_mangled_function_id): Use the binding label rather than + the mangled name. + (gfc_finish_var_decl): Put variables that are BIND(C) into a common + segment of the object file, because this is what C would do. + (gfc_create_module_variable): Conver to proper types + (set_tree_decl_type_code): New function. + (generate_local_decl): Check dummy variables and derived types for + ISO C Binding attributes. + * match.c (gfc_match_small_int_expr): New function. + (gfc_match_name_C): Ditto. + (match_common_name): Deal with ISO C Binding in COMMON blocks + * trans-io.c (transfer_expr): Deal with C_NULL_PTR or C_NULL_FUNPTR + expressions + * match.h: Add prototypes for gfc_match_small_int_expr, + gfc_match_name_C, match_common_name, set_com_block_bind_c, + set_binding_label, set_verify_bind_c_sym, + set_verify_bind_c_com_block, get_bind_c_idents, + gfc_match_bind_c_stmt, gfc_match_suffix, gfc_match_bind_c, + gfc_get_type_attr_spec + * parse.c (decode_statement): Use gfc_match_bind_c_stmt + (parse_derived): Init *derived_sym = NULL, and gfc_current_block + later for valiadation. + * primary.c (got_delim): Set ISO C Binding components of ts. + (match_logical_constant): Ditto. + (match_complex_constant): Ditto. + (match_complex_constant): Ditto. + (gfc_match_rvalue): Check for existence of at least one arg for + C_LOC, C_FUNLOC, and C_ASSOCIATED. + * misc.c (gfc_clear_ts): Clear ISO C Bindoing components in ts. + (get_c_kind): New function. + +2007-07-01 Janne Blomqvist + + PR fortran/32239 + * trans-expr.c (gfc_conv_power_op): Use builtin_powi for + real**int4 powers. + * f95-lang.c (gfc_init_builtin_functions): Add builtin_powi to the + builtins table. + +2007-07-01 Janne Blomqvist + + * trans.h: Remove decls for 64-bit allocation functions. + * trans-array.c (gfc_grow_array): Always pick the standard realloc + function decl. + (gfc_array_allocate): Likewise. + * trans-decl.c: Remove trees for 64-bit allocation functions. + (gfc_build_builtin_function_decls): Don't build fndecls for 64-bit + allocations functions, use index_int_type for normal allocation + functions. + +2007-06-30 Daniel Franke + + PR fortran/20373 + * intrinsic.c (add_functions): Additional function types. + (gfc_convert_type_warn): Remove intrinsic-flag from + conversion functions. + * resolve.c (resolve_symbol): Added type checks to + explicitly defined intrinsics. + +2007-06-30 Tobias Burnus + + PR fortran/32555 + * io.c (check_format): Allow zero to precede the + P edit descriptor. + +2007-06-30 Paul Thomas + + PR fortran/32472 + * simplify.c (gfc_simplify_repeat): Add handling of character + literal for first argument. + +2007-06-29 Daniel Franke + + * resolve.c (resolve_operator): Added check whether a user + defined operator is available. + +2007-06-29 Daniel Franke + + * openmp.c (resolve_omp_clauses): Adjust error message to + better reflect the actual requirement. + +2007-06-29 Tobias Burnus + + PR fortran/32483 + * io.c (format_lex): Fix FMT_ZERO. + (check_format,check_format_string,gfc_match_format, + check_io_constraints) Additional checking for READ. + +2007-06-28 Francois-Xavier Coudert + + PR other/31400 + * lang.opt (static-libgfortran): New option. + * gfortranspec.c (ADD_ARG_LIBGFORTRAN): New macro. + (Option): Add OPTION_static and OPTION_static_libgfortran. + (lookup_option): Handle the new -static-libgfortran option. + (lang_specific_driver): Check whether -static is passed. + Handle the new -static-libgfortran option. + * options.c (gfc_handle_option): If -static-libgfortran is + passed and isn't supported on this configuration, error out. + +2007-06-27 Daniel Franke + + PR fortran/32467 + * openmp.c (resolve_omp_clauses): Emit error on allocatable + components in COPYIN, COPYPRIVATE, FIRSTPRIVATE and LASTPRIVATE + clauses. + +2007-06-25 Paul Thomas + + PR fortran/32464 + * resolve.c (check_host_association): Return if the old symbol + is use associated. Introduce retval to reduce the number of + evaluations of the first-order return value. + + PR fortran/31494 + * match.c (gfc_match_call): If a host associated symbol is not + a subroutine, build a new symtree/symbol in the current name + space. + +2007-06-24 Tobias Burnus + + PR fortran/32460 + * interface.c (gfc_compare_derived_types): Add access check. + * symbol.c (gfc_find_component): Ditto. + (gfc_set_component_attr,gfc_get_component_attr) Copy access state. + * dump-parse-tree.c (gfc_show_components): Dump access state. + * gfortran.h (struct gfc_component): Add gfc_access. + * module.c (mio_component): Add access state. + * (gfc_match_structure_constructor): Check for private access state. + +2007-06-24 Paul Thomas + + PR fortran/32298 + PR fortran/31726 + * trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc): Calculate + the offset between the loop counter and the position as + defined. Add the offset within the loop so that the mask acts + correctly. Do not advance the location on the basis that it + is zero. + +2007-06-22 Daniel Franke + + PR fortran/31473 + * symbol.c (gfc_copy_attr): Emit errors for duplicate + EXTERNAL/INTRINSIC statements. + +2007-06-22 Jerry DeLisle + + PR fortran/32360 + * expr.c (gfc_check_assign): If the rvalue expression type is NULL_EXPR, + check to see if the lvalue has attribute pointer and data. + +2007-06-21 Jerry DeLisle + + PR fortran/31162 + * resolve.c (gfc_resolve_iterator_expr): Add check for REAL using + gfc_notify_standard. (gfc_resolve_iterator): Remove check. + (resolve_branch): Change "Obsolete" to "Deleted feature". + * io.c (resolve_tag): Ditto. + * match.c (gfc_match_pause, gfc_match_assign, gfc_match_goto): Ditto. + +2007-06-20 Jerry DeLisle + + PR fortran/32361 + * match.c (gfc_match_common): If the symbol value expression type is + NULL_EXPR, don't error if previously initialized. + +2007-06-20 Jerry DeLisle + + PR fortran/25061 + * decl.c (get_proc_name) Check symbol for generic interface + and issue an error. + +2007-06-20 Andrew Pinski + Richard Guenther + + PR fortran/32140 + * trans.c (gfc_build_addr_expr): Use the correct types. + +2007-06-19 Paul Thomas + + PR fortran/20863 + PR fortran/20882 + * resolve.c (resolve_code): Use gfc_impure_variable as a + condition for rejecting derived types with pointers, in pure + procedures. + (gfc_impure_variable): Add test for dummy arguments of pure + procedures; any for functions and INTENT_IN for subroutines. + + PR fortran/32236 + * data.c (gfc_assign_data_value): Change the ICE on an array + reference initializer not being an array into an error and + clear init to prevent a repetition of the error. + +2007-06-17 Janne Blomqvist + + * gfortran.texi: Add documentation for GFORTRAN_UNBUFFERED_n + environment variables. Fix documentation for + GFORTRAN_UNBUFFERED_ALL environment variable. + +2007-06-15 Andrew Pinski + + * trans-intrinsic.c (gfc_conv_intrinsic_repeat): Use + POINTER_PLUS_EXPR instead of PLUS_EXPR for pointer addition. + * trans-expr.c (gfc_trans_string_copy): Create + POINTER_PLUS_EXPR instead of a PLUS_EXPR + for pointer types. + +2007-06-14 Paul Thomas + + PR fortran/32302 + * trans-common.c (build_common_decl): If resizing of common + decl is needed, update the TREE_TYPE. + +2007-06-13 Tobias Burnus + + PR fortran/32323 + * interface.c (has_vector_section): New. + (compare_actual_formal): Check for array sections with vector subscript. + +2007-06-12 Dirk Mueller + + * trans-stmt.c (gfc_trans_call): fix gcc_assert to + a comparison, not an assignment. + +2007-06-12 Paul Thomas + + * trans-common.c (create_common): Initialize 'field_init'. + +2007-06-12 Paul Thomas + + PR fortran/29786 + PR fortran/30875 + * trans-common.c (get_init_field): New function. + (create_common): Call get_init_field for overlapping + initializers in equivalence blocks. + * resolve.c (resolve_equivalence_derived, resolve_equivalence): + Remove constraints on initializers in equivalence blocks. + * target-memory.c (expr_to_char, gfc_merge_initializers): + New functions. + (encode_derived): Add the bit offset to the byte offset to get + the total offset to the field. + * target-memory.h : Add prototype for gfc_merge_initializers. + +2007-06-11 Rafael Ãvila de Espíndola + + * trans-types.c (gfc_signed_type): Remove. + * trans-types.h (gfc_signed_type): Remove. + * f95-lang.c (LANG_HOOKS_SIGNED_TYPE): Remove. + +2007-06-08 Francois-Xavier Coudert + + * trans-intrinsic.c: Revert Lee's 2007-06-04 patch. + +2007-06-07 Steven G. Kargl + Jerry DeLisle + + PR fortran/32223 + * match.c (gfc_match_special_char): New function. Match special char. + Add handling '\0'. + * match.h: Add prototype. + * io.c (next_char): Use it. + * primary.c (next_string_char): Ditto. + +2007-06-06 Steven G. Kargl + + * decl.c: Miscellaneous whitespace fixes. + * expr.c: Likewise. + * gfortran.h: Likewise. + * interface.c : Likewise. + * io.c: Likewise. + * match.c: Likewise. + * match.h: Likewise. + * module.c: Likewise. + * parse.c: Likewise. + * resolve.c: Likewise. + * symbol.c: Likewise. + * trans-array.c: Likewise. + * trans-common.c: Likewise. + * trans-decl.c: Likewise. + * trans-intrinsic.c: Likewise. + * trans-io.c: Likewise. + * trans-stmt.c: Likewise. + * trans-types.c: Likewise. + +2007-06-05 Jerry DeLisle + + PR fortran/18923 + * parse.c (decode_statement): Don't call gfc_undo_symbols on MATCH_ERROR + for ST_FUNCTION since it is called in reject_statement. + (parse_contained): If error, loop back after reject_statement and try + again. Free the namespace if an error occured. + +2007-06-04 Lee Millward + + * trans-intrinsic.c (gfc_conv_intrinsic_function_args): Adjust + to operate on a stack allocated array for the intrinsic arguments + instead of creating a TREE_LIST. Add two new parameters for the + array and the number of elements. Update all callers to allocate + an array of the correct length to pass in. Update comment. + (gfc_intrinsic_argument_list_length): New function. + (gfc_conv_intrinsic_mnimax): Call it. + (gfc_conv_intrinsic_merge): Likewise. + (gfc_conv_intrinsic_lib_function): Call it. Use new CALL_EXPR + constructors. + (gfc_conv_intrinsic_cmplx): Likewise. + (gfc_conv_intrinsic_ctime): Likewise. + (gfc_covn_intrinsic_fdate): Likewise. + (gfc_conv_intrinsic_ttynam): Likewise. + (gfc_conv_intrinsic_ishftc): Likewise. + (gfc_conv_intrinsic_index): Likewise. + (gfc_conv_intrinsic_scan): Likewise. + (gfc_conv_intrinsic_verify): Likewise. + (gfc_conv_intrinsic_trim): Likewise. + (gfc_conv_intrinsic_aint): Use new CALL_EXPR constructors. + (gfc_conv_intrinsic_exponent): Likewise. + (gfc_conv_intrinsic_bound): Likewise. + (gfc_conv_intrinsic_abs): Likewise. + (gfc_conv_intrinsic_mod): Likewise. + (gfc_conv_intrinsic_sign): Likewise. + (gfc_conv_intrinsic_len): Likewise. + (gfc_conv_intrinsic_adjust): Likewise. + (gfc_conv_intrinsic_si_kind): Likewise. + +2007-06-04 Steve Ellcey + + * trans-array.c (gfc_conv_array_parameter): Initialize tmp. + +2007-05-31 Richard Guenther + + * trans-expr.c (gfc_conv_expr_op): Use zero constant + that matches the lse type. + (gfc_trans_string_copy): Use sizetype zero constant. + * intrinsic.c (add_functions): The sizeof intrinsic has + index type result. + * trans-types.c (gfc_get_dtype): Convert size to index + type before shifting. + * trans-array.c (gfc_trans_array_constructor_value): Use + index type for offset computation. + * trans-intrinsic.c (gfc_conv_associated): Use correct type + for zero constant. + +2007-05-31 Paul Thomas + + PR fortran/32156 + * trans-array.c (gfc_trans_array_constructor): Treat the case + where the ss expression charlen is missing. + +22007-05-31 Paul Thomas + + PR fortran/32103 + * module.c (mio_symtree_ref): If an equivalence group member + is not used, give it a hidden symbol and set the pointer_info. + (load_equiv): Only free the equivalence if none of the members + are used. + +2007-05-29 Daniel Franke + + * gfortran.h: Renamed 'enum gfc_generic_isym_id' to 'enum gfc_isym_id', + added missing GFC_ISYM_* enumerators, ordered alphabetically. + (struct gfc_intrinsic_sym): Renamed 'generic_id' to 'id'. + (gfc_find_subroutine): New prototype. + * intrinsic.c (add_sym, add_sym_*): Added argument 'id' and changed all callers. + (find_subroutine): Renamed to 'gfc_find_subroutine', removed static. + * dependency.c: Changed usage of isym->generic_id to isym->id. + * openmp.c: Likewise. + * resolve.c: Likewise. + * trans-array.c: Likewise. + * trans-expr.c: Likewise. + * trans-intrinsic.c: Likewise. + * trans-openmp.c: Likewise. + +2007-05-28 Tobias Schlüter + + * gfortran.h (gfc_generic_isym_id): Add GFC_ISYM_SIZEOF. + * intrinsic.c (add_functions): Add stuff for SIZEOF intrinsic. + * intrinsic.h (gfc_check_sizeof): Add prototype of ... + * check.c (gfc_check_sizeof): .. new function. + * trans-intrinsic.c (gfc_conv_intrinsic_sizeof): New function. + (gfc_conv_intrinsic_strcmp): Whitespace fix. + (gfc_conv_intrinsic_array_transfer): Remove double initialization, + use fold_build. where appropriate. + (gfc_conv_intrinsic_function): Add case for SIZEOF. + * intrinsic.texi: Add documentation for SIZEOF. + +2007-05-28 Brooks Moses + + * trans-array.c (gfc_conv_expr_descriptor): Edit comment. + +2007-05-28 Brooks Moses + + PR fortran/31972 + * target-memory.c (gfc_target_expr_size): Add handling + for size of BT_HOLLERITH variables. + * check.c (gfc_check_transfer): Reject BT_HOLLERITH + variables in MOLD argument of TRANSFER. + +2007-05-28 Brooks Moses + + * gfortran.h (gfc_expr): Remove from_H, add "representation" + struct. + * primary.c (match_hollerith_constant): Store the representation + of the Hollerith in representation, not in value.character. + * arith.c: Add dependency on target-memory.h. + (eval_intrinsic): Remove check for from_H. + (hollerith2representation): New function. + (gfc_hollerith2int): Determine value of the new constant. + (gfc_hollerith2real): Likewise. + (gfc_hollerith2complex): Likewise. + (gfc_hollerith2logical): Likewise. + (gfc_hollerith2character): Point both representation.string and + value.character.string at the value string. + * data.c (create_character_initializer): For BT_HOLLERITH + rvalues, get the value from the representation rather than + value.character. + * expr.c (free_expr0): Update handling of BT_HOLLERITH values + and values with representation.string. + (gfc_copy_expr): Likewise. + * intrinsic.c (do_simplify): Remove special treatement of + variables resulting from Hollerith constants. + * dump-parse-trees.c (gfc_show_expr): Update handling of + Holleriths. + * trans-const.c (gfc_conv_constant_to_tree): Replace from_H + check with check for representation.string; get Hollerith + representation from representation.string, not value.character. + * trans-expr.c (is_zero_initializer_p): Replace from_H check + with check for representation.string. + * trans-stmt.c (gfc_trans_integer_select): Use + gfc_conv_mpz_to_tree for case values, so as to avoid picking up + the memory representation if the case is given by a transfer + expression. + * target-memory.c (gfc_target_encode_expr): Use the known memory + representation rather than the value, if it exists. + (gfc_target_interpret_expr): Store the memory representation of + the interpreted expression as well as its value. + (interpret_integer): Move to gfc_interpret_integer, make + non-static. + (interpret_float): Move to gfc_interpret_float, make non-static. + (interpret_complex): Move to gfc_interpret_complex, make + non-static. + (interpret_logical): Move to gfc_interpret_logical, make + non-static. + (interpret_character): Move to gfc_interpret_character, make + non-static. + (interpret_derived): Move to gfc_interpret_derived, make + non-static. + * target-memory.h: Add prototypes for newly-exported + gfc_interpret_* functions. + +2007-05-27 Jerry DeLisle + + PR fortran/31812 + * parse.c (next_statement): Warn for truncated lines if source is free + form. + +2007-05-27 Paul Thomas + Tobias Burnus + + PR fortran/32088 + * symbol.c (gfc_check_function_type): Copy dimensions of + result variable. + * resolve.c (resolve_contained_fntype): Improve symbol output in + the error message. + +2007-05-26 Jerry DeLisle + + PR fortran/31813 + * io.c (check_format): Add warning for H specifier in format. + +2007-05-26 Tobias Burnus + + * gfortran.texi: Document the GFORTRAN_ERROR_DUMPCORE and + GFORTRAN_ERROR_BACKTRACE environment variables. + +2007-05-26 Paul Thomas + + PR fortran/31219 + * trans.h : Add no_function_call bitfield to gfc_se structure. + Add stmtblock_t argument to prototype of get_array_ctor_strlen. + * trans-array.c (get_array_ctor_all_strlen): New function. + (get_array_ctor_strlen): Add new stmtblock_t argument and call + new function for character elements that are not constants, + arrays or variables. + (gfc_conv_array_parameter): Call get_array_ctor_strlen to get + good string length. + * trans-intrinsic (gfc_conv_intrinsic_len): Add new argument + to call of get_array_ctor_strlen. + +2007-05-25 Kazu Hirata + + * intrinsic.texi: Fix typos. + +2007-05-25 Paul Thomas + + PR fortran/32047 + * trans-expr.c (gfc_apply_interface_mapping_to_expr): Change + order in logic under EXPR_FUNCTION to handle functions with + no arguments. + +2007-05-23 Jerry DeLisle + + PR fortran/31716 + * array.c (spec_dimen_size): Test for correct BT_INTEGER type. + +2007-05-23 Francois-Xavier Coudert + + PR fortran/32046 + * trans-expr.c (gfc_trans_zero_assign): Convert the result of + TYPE_SIZE_UNIT into a signed type. + (gfc_trans_array_copy): Likewise. + (gfc_trans_array_constructor_copy): Likewise. + * trans-array.c (gfc_trans_create_temp_array): Likewise. + (gfc_grow_array): Likewise. + (gfc_array_init_size): Likewise. + (gfc_duplicate_allocatable): Likewise. + * trans-stmt.c (allocate_temp_for_forall_nest_1): Likewise. + +2007-05-22 Jerry DeLisle + + PR fortran/18923 + * resolve.c (resolve_function): Don't call resolve_global_procedure if + there is no name. Delete duplicated statement in ELSE clause. + +2007-05-22 Francois-Xavier Coudert + + PR fortran/31627 + * trans-array.c (gfc_trans_array_bound_check): Take extra argument to + indicate whether we should check the upper bound in that dimension. + (gfc_conv_array_index_offset): Check only the lower bound of the + last dimension for assumed-size arrays. + (gfc_conv_array_ref): Likewise. + (gfc_conv_ss_startstride): Likewise. + +2007-05-21 Jerry DeLisle + Daniel Franke + + PR fortran/32002 + * resolve.c (resolve_actual_arglist): Resolve actual argument after + being identified as variable. + +2007-05-21 Francois-Xavier Coudert + + PR fortran/32027 + * trans-stmt.c (gfc_trans_do): Fix the value of loop variable + when the loop ends. + +2007-05-21 H.J. Lu + + * trans-stmt.c (gfc_trans_do): Fix a typo in comment. + +2007-05-21 Paul Thomas + + PR fortran/31867 + PR fortran/31994 + * trans-array.c (gfc_conv_expr_descriptor): Obtain the stored + offset for non-descriptor, source arrays and correct for stride + not equal to one before writing to field of output descriptor. + +2007-05-20 Daniel Franke + + PR fortran/32001 + * check.c (check_rest): Improved argument conformance check and + fixed error message generation. + +2007-05-19 Francois-Xavier Coudert + + PR fortran/30820 + * Make-lang.in: Remove use of -Wno-error for expr.o, resolve.o, + simplify.o and trans-common.o. + +2007-05-19 Francois-Xavier Coudert + + PR fortran/31974 + * trans-array.c (gfc_trans_auto_array_allocation): Avoid + multiplication of mismatched types. + +2007-05-18 Daniel Franke + + PR fortran/24633 + * symbol.c (gfc_add_flavor): Add the NAME to error message if + available. + +2007-05-15 Daniel Franke + + PR fortran/31919 + PR fortran/31929 + PR fortran/31930 + * intrinsic.c (check_specific): Check elemental intrinsics for + rank and shape. + (add_functions): Fixed dummy argument names of BESJN and BESYN. + Fixed elemental status of MCLOCK and MCLOCK8. + * check.c (check_rest): Added check for array conformance. + (gfc_check_merge): Removed check for array conformance. + (gfc_check_besn): Removed check for scalarity. + * intrinsic.texi (CSHIFT, EOSHIFT): Fixed typos. + (BESJN, BESYN): Clarified documentation. + +2007-05-17 Tobias Burnus + + * gfortran.texi (GFORTRAN_CONVERT_UNIT): Improve documentation. + +2007-05-16 Brooks Moses + + PR fortran/18769 + PR fortran/30881 + PR fortran/31194 + PR fortran/31216 + PR fortran/31427 + * target-memory.c: New file. + * target-memory.h: New file. + * simplify.c: Add #include "target-memory.h". + (gfc_simplify_transfer): Implement constant- + folding for TRANSFER intrinsic. + * Make-lang.in: Add dependencies on new target-memory.* files. + +2007-05-15 Paul Brook + + * trans-types.c (gfc_type_for_size): Handle signed TImode. + +2007-05-14 Francois-Xavier Coudert + + PR fortran/30723 + * trans.h (gfor_fndecl_internal_malloc, gfor_fndecl_internal_malloc64, + gfor_fndecl_internal_free): Remove prototypes. + (gfor_fndecl_os_error, gfc_call_free, gfc_call_malloc): Add prototypes. + * trans.c (gfc_call_malloc, gfc_call_free): New functions. + * f95-lang.c (gfc_init_builtin_functions): Add __builtin_free + and __builtin_malloc builtins. + * trans-decl.c (gfor_fndecl_internal_malloc, + gfor_fndecl_internal_malloc64, gfor_fndecl_internal_free): Remove. + (gfor_fndecl_os_error): Add. + (gfc_build_builtin_function_decls): Don't create internal_malloc, + internal_malloc64 and internal_free library function declaration. + Create os_error library call function declaration. + * trans-array.c (gfc_trans_allocate_array_storage, + gfc_trans_auto_array_allocation, gfc_trans_dummy_array_bias, + gfc_conv_array_parameter, gfc_duplicate_allocatable): Use + gfc_call_malloc and gfc_call_free instead of building calls to + internal_malloc and internal_free. + * trans-expr.c (gfc_conv_string_tmp): Likewise. + * trans-stmt.c (gfc_do_allocate, gfc_trans_assign_need_temp, + gfc_trans_pointer_assign_need_temp, gfc_trans_forall_1, + gfc_trans_where_2: Likewise. + * trans-intrinsic.c (gfc_conv_intrinsic_ctime, + gfc_conv_intrinsic_fdate, gfc_conv_intrinsic_ttynam, + gfc_conv_intrinsic_array_transfer, gfc_conv_intrinsic_trim): Likewise. + +2007-05-14 Francois-Xavier Coudert + + PR fortran/31725 + * trans-expr.c (gfc_conv_substring): Evaluate substring bounds + only once. + +2007-05-14 Rafael Ãvila de Espíndola + + * f95-lang.c (LANG_HOOKS_UNSIGNED_TYPE): Remove. + * trans-intrinsic.c (gfc_conv_intrinsic_ishft): Use unsigned_type_for + instead of gfc_unsigned_type. + * trans-stmt.c (gfc_trans_do): Use unsigned_type_for instead of + gfc_unsigned_type. + * trans-types.c (gfc_unsigned_type): Remove. + * trans-types.h (gfc_unsigned_type): Remove. + +2007-05-12 Paul Thomas + + PR fortran/30746 + * resolve.c (check_host_association): New function that detects + incorrect host association and corrects it. + (gfc_resolve_expr): Call the new function for variables and + functions. + * match.h : Remove prototype for gfc_match_rvalue. + * gfortran.h : Add prototype for gfc_match_rvalue. + +2007-05-11 Paul Thomas + + PR fortran/30876 + * trans-expr.c (gfc_conv_function_call): Reduce indirection for + direct assignments of recursive array valued functions. + * primary.c (gfc_match_rvalue): Correct error for recursive + function calls such that directly recursive calls of scalar + function without an explicit result are disallowed. + +2007-05-11 Paul Thomas + + PR fortran/30878 + * resolve.c (resolve_fl_namelist): It is not an error if the + namelist element is the result variable of the enclosing + function. Search for the symbol in current and all parent + namespaces for a potential conflict. + * symbol.c (check_conflict): Remove the conflict between + 'in_namelist' and 'FL_PROCEDURE' because the symbol info + is not available to exclude function result variables. + * trans-io.c (nml_get_addr_expr): Use the fake result decl + if the symbol is an implicit result variable. + +2007-05-11 Paul Thomas + + PR fortran/31474 + * decl.c (get_proc_name): If an entry has already been declared + as a module procedure, pick up the symbol and the symtree and + use them for the entry. + +2007-05-08 Paul Thomas + + PR fortran/31630 + * resolve.c (resolve_symbol): Remove the flagging mechanism from the + formal namespace resolution and instead check that the formal + namespace is not the current namespace. + +2007-05-08 Paul Thomas + + PR fortran/31692 + * trans-array.c (gfc_conv_array_parameter): Convert full array + references to the result of the procedure enclusing the call. + +2007-05-08 Paul Thomas + + PR fortran/29397 + PR fortran/29400 + * decl.c (add_init_expr_to_sym): Expand a scalar initializer + for a parameter array into an array expression with the right + shape. + * array.c (spec_dimen_size): Remove static attribute. + * gfortran.h : Prototype for spec_dimen_size. + +2007-05-07 Francois-Xavier Coudert + + PR fortran/31399 + * trans-stmt.c (gfc_trans_do): Handle large loop counts. + +2007-05-07 Francois-Xavier Coudert + + PR fortran/31764 + * simplify.c (gfc_simplify_new_line): NEW_LINE can be simplified + even for non constant arguments. + +2007-05-06 Jerry DeLisle + Francois-Xavier Coudert + + PR fortran/31201 + * gfortran.h: Add runtime error codes from libgfortran.h. Define + MAX_UNIT_NUMBER. + * trans.c (gfc_trans_runtime_check): Update the format of runtime error + messages to match library runtime errors. Use call to new library + function runtime_error_at(). + * trans.h: Add prototype for new function gfc_trans_io_runtime_check. + Add declaration for library functions runtime_error_at and + generate_error. + * trans_io.c (gfc_trans_io_runtime_check): New function. + (set_parameter_value): Add error checking for UNIT numbers. + (set_parameter_ref): Initialize the users variable to zero. + (gfc_trans_open): Move setting of unit number to after setting of common + flags so that runtime error trapping can be detected. + (gfc_trans_close): Likewise. (build_filepos): Likewise. + (gfc_trans_inquire): Likewise. (build_dt): Likewise. + * trans-decl.c: Add declarations for runtime_error_at and + generate_error. (gfc_build_builtin_function_decls): Build function + declarations for runtime_error_at and generate_error. + +2007-05-06 Paul Thomas + + PR fortran/31540 + * resolve.c (resolve_fl_procedure): Resolve constant character + lengths. + +2007-05-05 Jerry DeLisle + + PR fortran/31251 + * decl.c (match_char_spec): Add check for invalid character lengths. + +2007-05-04 Brooks Moses + + * intrinsic.texi (CMPLX): Document result kind. + (COMPLEX): Add documentation. + +2007-05-04 Daniel Franke + + PR fortran/31760 + * intrinsic.c (add_functions): Replaced calls to gfc_check_g77_math1 + by gfc_check_fn_r to avoid checks for scalarity. + * check.c (gfc_check_besn): Removed check for scalarity. + (gfc_check_g77_math1): Removed. + * intrinsic.h (gfc_check_g77_math1): Removed. + +2007-05-04 Daniel Franke + + * check.c (gfc_check_fseek_sub): Fixed typo. + +2007-05-04 Daniel Franke + + PR fortran/22359 + * intrinsic.c (add_subroutines): Added FSEEK. + * intrinsic.h (gfc_resolve_fseek_sub, gfc_check_fseek_sub): New. + * iresolve.c (gfc_resolve_fseek_sub): New. + * check.c (gfc_check_fseek_sub): New. + * intrinsic.texi (FSEEK): Updated. + +2007-05-04 Tobias Burnus + + PR fortran/31803 + * expr.c (gfc_check_pointer_assign): Check for NULL pointer. + +2007-05-04 Jerry DeLisle + + PR fortran/31251 + * simplify.c (gfc_simplify_len): Only simplify integer lengths. + +2007-05-04 Francois-Xavier Coudert + + PR fortran/31781 + * simplify.c (gfc_simplify_repeat): Don't put function call with + side effect in a gcc_assert(). + +2007-05-04 Tobias Burnus + + PR fortran/25071 + * interface.c (compare_actual_formal): Check character length. + +2007-05-01 Thomas Koenig + + PR fortran/31732 + * dependency.c (gfc_full_array_ref_p): If the reference is + to a single element, check that the array has a single + element and that the correct element is referenced. + +2007-05-01 Daniel Franke + + * intrinsic.c (add_functions): Fixed ELEMENTAL specifications. + (add_subroutines): Replaced magic numbers in function calls by + ELEMENTAL and NOT_ELEMENTAL respectively. + * intrinsic.texi (MVBITS): Changed class to elemental subroutine. + (RANDOM_NUMBER): Changed class to subroutine. + (HUGE, TINY): Changed class to inquiry function. + +2007-04-30 Brooks Moses + + * trans-const.c (gfc_conv_mpz_to_tree): Use mpz_get_double_int. + (gfc_conv_tree_to_mpz): New function. + (gfc_conv_mpfr_to_tree): Use real_from_mpfr. + (gfc_conv_tree_to_mpfr): New function. + * trans-const.h: (gfc_conv_tree_to_mpz): New prototype. + (gfc_conv_tree_to_mpfr): New prototype. + +2007-04-30 Daniel Franke + + * intrinsic.texi (IERRNO): Changed class to non-elemental function. + (LOG10): Removed COMPLEX as accepted argument type. + (NEW_LINE): Changed class from elemental to inquiry function. + (SIGN): Removed requirement of scalar arguments. + (SNGL): Changed class to elemental function. + +2007-04-29 Francois-Xavier Coudert + + PR fortran/31591 + * simplify.c (simplify_bound_dim): New function. + (simplify_bound): Use the above. Perform simplification of LBOUND + and UBOUND when DIM argument is not present. + +2007-04-29 Daniel Franke + + * gfortran.texi: Cleaned up keyword index. + * invoke.texi: Likewise. + * intrinsic.texi: Likewise. + +2007-04-29 Francois-Xavier Coudert + + PR fortran/31645 + * scanner.c (load_file): Discard the byte order mark if one is + found on the first non-preprocessor line of a file. + +2007-04-29 Paul Thomas + + PR fortran/31711 + * trans-array.c (gfc_conv_resolve_dependencies): Create a temp + whenever a dependency is found. + +2007-04-28 Tobias Schlüter + + * options.c (gfc_handle_option): Ensure requested free form line + length is not too small. + +2007-04-27 Brooks Moses + + * intrinsic.texi (Transfer): Improve documentation. + +2007-04-27 Brooks Moses + + * gfortran.texi (Option Index): Add @samp as needed. + +2007-04-27 Daniel Franke + + * gfortran.texi: Added node and menu entry for an option index. + * invoke.texi: Moved command line option related entries of the concept + index to the option index. + +2007-04-27 Daniel Franke + + * intrinsic.texi (AND, FPUT, FPUTC, MODULO, OR, SET_EXPONENT, + XOR): Fixed examples. + +2007-04-27 Daniel Franke + + * intrinsic.texi (PRODUCT, RESHAPE, SPACING, SPREAD, SUM, + SYSTEM_CLOCK, TRANSFER, UNPACK): New. + (DATE_AND_TIME, CPU_TIME, RRSPACING): Added cross references. + +2007-04-26 Daniel Franke + + * intrinsic.texi (NULL, PACK, PRESENT, REPEAT, SCAN, SHAPE, + SIZE, TRANSPOSE, TRIM, VERIFY): New. + (ADJUSTL, ADJUSTR, INDEX): Added cross references. + (INT, INT2, INT8, LONG): Enabled section header. + +2007-04-25 Janne Blomqvist + + * module.c (module_char): Replace fgetc() with + getc(). + (write_char): Replace fputc() with putc(). + * scanner.c (load_line): Replace fgetc() with getc(). + (gfc_read_orig_filename): Likewise. + +2007-04-25 Tobias Burnus + + PR fortran/31668 + * error.c (error_print): Fix %% support. + * intrinsic.c (sort_actual): Improve error message. + * resolve.c (resolve_actual_arglist): Allow %VAL for + interfaces defined in the module declaration part. + +2007-04-25 Francois-Xavier Coudert + + PR libfortran/31299 + * intrinsic.texi (GETLOG): Update documentation to reflect + library changes. + +2007-04-24 Francois-Xavier Coudert + + PR fortran/31587 + * module.c (write_char): Add character to the MD5 buffer. + (read_md5_from_module_file): New function. + (gfc_dump_module): Compute MD5 for new module file. Call + read_md5_from_module_file. Only overwrite old module file + if the new MD5 is different. + +2007-04-23 Paul Thomas + + PR fortran/31630 + * resolve.c (resolve_symbol): Allow resolution of formal + namespaces nested within formal namespaces coming from modules. + + PR fortran/31620 + * trans-expr.c (gfc_trans_assignment): Make the call to + gfc_trans_zero_assign conditional on the lhs array ref being + the only reference. + +2007-04-23 Tobias Burnus + + * primary.c (match_integer_constant): Mention -fno-range-check + in the error message. + +2007-04-21 Jerry DeLisle + + PR fortran/31495 + * scanner.c (load_line): Remove check for comment after ampersand and + adjust tracking of ampersand. + +2007-04-21 Andrew Pinski + + * f95-lang.c (lang_tree_node): Use GENERIC_NEXT + instead of checking GIMPLE_STMT_P in chain_next. + +2007-04-17 Tobias Schlüter + + * trans-types.h (gfc_packed): New enum. + (gfc_get_nodesc_array_type): Change prototype to use new enum. + * trans-types.c (gfc_get_nodesc_array): Use gfc_packed for + argument packed. Adapt all references to values accordingly. + (gfc_sym_type): Use enum values in call to gfc_get_nodesc_array. + (gfc_get_derived_type): Likewise. + * trans-array.c (gfc_build_constant_array_constructor): Likewise. + * trans-expr.c (gfc_get_interface_mapping_charlen): Changed packed + argument to type gfc_packed. + (gfc_add_interface_mapping): Use enum values in call to + gfc_get_interface_mapping. + * trans-decl.c (gfc_build_dummy_array_decl): Adapt to use enum + values when determining packing. + + * trans-decl.c (gfc_finish_decl): Remove unused second argument + 'init'. Simplify code accordingly. Remove calls to + gfc_fatal_error in favor of gcc_assert. + (create_function_arglist): Remove second argument from calls to + gfc_finish-decl. + (gfc_trans_dummy_character): Likewise. + + * arith.h: Update copyright years. + * dependency.h: Likewise. + * gfortran.h: Likewise. + * lang-specs.h: Likewise. + * parse.h: Likewise. + * symbol.c: Likewise. + * trans.h: Likewise. + * trans.c: Likewise. + * trans-array.c: Likewise. + * trans-common.c: Likewise. + * trans-const.h: Likewise. + * trans-const.c: Likewise. + * trans-decl.c: Likewise. + * trans-expr.c: Likewise. + * trans-io.c: Likewise. + * trans-openmp.c: Likewise. + * trans-types.h: Likewise. + * types.def: Likewise. + +2007-04-17 Tobias Schlüter + + PR fortran/31144 + * decl.c (gfc_sym_mangled_identifier): Use capital letters in name + mangling. + (gfc_sym_mangled_function_id): Likewise. + +2007-04-15 Paul Thomas + + PR fortran/31204 + * primary.c (check_for_implicit_index): New function to check + that a host associated variable is not an undeclared implied + do loop index. + (gfc_match_rvalue, match_variable): Use it and reset the + implied_index attribute. + * gfortran.h : Add the implied_index field to symbol_attribute. + * match.c (gfc_match_iterator): Mark the iterator variable + with the new attribute. + * decl.c (build_sym): Reset the new attribute. + +2007-04-15 Kazu Hirata + + * gfc-internals.texi: Fix typos. + * simplify.c: Fix a comment typo. + +2007-04-14 Bernhard Fischer + + * primary.c: Commentary typo fix; Add question about redundant (?) + set. + +2007-04-14 Paul Thomas + + PR fortran/29507 + PR fortran/31404 + * expr.c (scalarize_intrinsic_call): New function to + scalarize elemental intrinsic functions in initialization + expressions. + (check_init_expr): Detect elemental intrinsic functions + in initalization expressions and call previous. + +2007-04-13 Tobias Burnus + + PR fortran/31559 + * primary.c (match_variable): External functions + are no variables. + +2007-04-13 Paul Thomas + + PR fortran/31550 + * trans-types.c (copy_dt_decls_ifequal): Do not get pointer + derived type components. + +2007-04-13 Tobias Schlüter + + PR fortran/18937 + * resolve.c: Include obstack.h and bitmap.h. New variable + labels_obstack. + (code_stack): Add tail and reachable_labels fields. + (reachable_labels): New function. + (resolve_branch): Rework to use new fields in code_stack. + (resolve_code): Call reachable_labels. + (resolve_codes): Allocate and free labels_obstack. + +2007-04-12 Tobias Schlüter + + PR fortran/31250 + * decl.c (match_char_spec): Move check for negative CHARACTER + length ... + * resolve.c (resolve_charlen): ... here. + (resolve_types): Resolve CHARACTER lengths earlier. + +2007-04-12 Daniel Franke + + PR fortran/31234 + * intrinsic.texi (RANDOM_SEED, RANDOM_NUMBER): New. + +2007-04-12 Tobias Schlüter + + PR fortran/31266 + * primary.c (gfc_variable_attr): Don't copy string length if it + doesn't make sense. + * resolve.c (resolve_code): Clarify error message. + + PR fortran/31471 + * decl.c (gfc_match_end): Also check for construct name in END + FORALL and END WERE statements. + * match.c (match_case_eos): Use uppercase for statement name in + error message. + (match_elsewhere): Construct name may appear iff construct has a + name. + + * trans-types.c: Update copyright years. Reformat long comment + explaining array descriptor format. Remove obsolete mention of + TYPE_SET. + + * arith.c (gfc_arith_uplus): Rename to ... + (gfc_arith_identity): ... this. + (gfc_parentheses): New function. + (gfc_uplus): Adapt to renamed function. + * arith.h (gfc_parentheses): Add prototype. + * expr.c (gfc_copy_expr): Deal with INTRINSIC_PARENTHESES. + (simplifiy_intrinsic_op): Treat INTRINSIC_UPLUS separately from + INTRINSIC_PARENTHESES. + +2007-04-12 Tobias Burnus + + PR fortran/31472 + * decl.c (match_attr_spec): Allow PRIVATE/PUBLIC + attribute in type definitions. + (gfc_match_private): Allow PRIVATE statement only + in specification part of modules. + (gfc_match_public): Ditto for PUBLIC. + (gfc_match_derived_decl): Allow PRIVATE/PUBLIC attribute only in + specificification part of modules. + +2007-04-07 Paul Thomas + + PR fortran/31257 + * intrinsic.c (add_functions): Add ref. to gfc_resolve_achar. + * intrinsic.h : Add prototype for gfc_resolve_achar. + * iresolve.c (gfc_resolve_achar): New function. + +2007-04-07 Paul Thomas + + PR fortran/30880 + * resolve.c (resolve_fl_variable): Set flag to 2 for automatic + arrays. Make condition for automatic array error explicit. + If a dummy, no error on an INTENT(OUT) derived type. + +2007-04-07 Paul Thomas + + PR fortran/30872 + * expr.c (find_array_element): Correct arithmetic for rank > 1. + +2007-04-07 Paul Thomas + + PR fortran/31222 + * check.c (numeric_check): If an expresson has not got a type, + see if it is a symbol for which a default type applies. + +2007-04-07 Paul Thomas + + PR fortran/31214 + * trans-decl.c (gfc_get_symbol_decl): Allow unreferenced use + associated symbols. + +2007-04-07 Paul Thomas + + PR fortran/31293 + * symbol.c (gfc_check_function_type): New function. + * gfortran.h : Add prototype for previous. + * parse.c (parse_progunit): Call it after parsing specification + statements. + +2007-04-05 Paul Thomas + + PR fortran/31483 + * trans-expr.c (gfc_conv_function_call): Give a dummy + procedure the correct type if it has alternate returns. + +2007-04-05 Paul Thomas + + PR fortran/31292 + * decl.c (gfc_match_modproc): Go up to the top of the namespace + tree to find the module namespace for gfc_get_symbol. + +2007-04-03 Francois-Xavier Coudert + + PR fortran/31304 + * fortran/gfortran.h (gfc_charlen_int_kind): New prototype. + * fortran/trans-types.c (gfc_charlen_int_kind): New variable. + (gfc_init_types): Define gfc_charlen_int_kind. + * fortran/trans.h (gfor_fndecl_string_repeat): Remove prototype. + * fortran/trans-decl.c (gfor_fndecl_string_repeat): Delete. + (gfc_build_intrinsic_function_decls): Don't set + gfor_fndecl_string_repeat. + * fortran/trans-intrinsic.c (gfc_conv_intrinsic_repeat): Rewrite + so that we don't have to call a library function. + * fortran/simplify.c (gfc_simplify_repeat): Perform the necessary + checks on the NCOPIES argument, and work with arbitrary size + arguments. + +2007-03-31 Tobias Burnus + + * intrinsic.c (add_functions): Fix name of dummy argument + for new_line and exit intrinsic. + +2007-03-31 Paul Thomas + + PR fortran/31160 + * gfortran.texi: Add a section for the %VAL, %REF and %LOC + extensions. + +2007-03-30 Rafael Ãvila de Espíndola + + * trans-types.c (gfc_signed_or_unsigned_type): Remove. + (gfc_unsigned_type): Use get_signed_or_unsigned_type instead of + gfc_signed_or_unsigned_type. + (gfc_signed_type): Ditto. + * trans-types.h (gfc_signed_or_unsigned_type): Remove. + * f95-lang.c (LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE): Remove. + +2007-03-30 Tobias Schlüter + + * symbol.c (gfc_find_gsymbol): Simplify, don't unconditionally + descend into all branches. + +2007-03-29 Tobias Schlüter + + * intrinsic.c (conv_name): Let gfc_get_string handle the format. + (find_conv): Compare pointers instead of calling strcmp. + (find_sym): Likewise, but ensure that the compared pointer is in + the global string table. + +2007-03-28 Tobias Schlüter + + * gfc-internals.texi: Fix output filename. Merge type index into + concept index. Start documentation of gfc_code structure. + +2007-03-26 Brooks Moses + + * gfc-internals.texi: New file, + * Make-lang.in: Add rules to convert it to dvi, pdf, and info. + +2007-03-26 Brooks Moses + + * error.c (show_locus): Remove always-false test. + +2007-03-26 Brooks Moses + + * lang.opt: Minor edits to descriptions. + +2007-03-25 Francois-Xavier Coudert + + PR fortran/30877 + * fortran/interface.c (check_operator_interface): Implement + the standard checks on user operators extending intrinsic operators. + * fortran/resolve.c (resolve_operator): If the ranks of operators + don't match, don't error out but try the user-defined ones first. + +2007-03-24 Francois-Xavier Coudert + + PR fortran/30655 + * expr.c (check_dimension): Fix logic of comparisons. + +2007-03-24 Paul Thomas + + PR fortran/31215 + * trans-expr.c (gfc_apply_interface_mapping_to_expr): Return + int result that is non-zero if the expression is the function + result. Only the characteristics of the result expression + can be used in a procedure interface, so simplify LEN in situ + using its character length. + + PR fortran/31209 + PR fortran/31200 + * trans-expr.c (gfc_conv_function_call): Do not use + gfc_conv_expr_reference for actual pointer function with formal + target because a temporary is created that does not transfer + the reference correctly. Do not indirect formal pointer + functions since it is the function reference that is needed. + +2007-03-24 Brooks Moses + + * gfortran.h: Edit comments on GFC_STD_*. + +2007-03-23 Brooks Moses + + * invoke.texi: Misc. small typo fixes. + (-Wcharacter-truncation): Add. + (-Wnonstd-intrinsics): Correct spelling. + (-std=): Edit. + (-fintrinsic-modules-path): Add. + +2007-03-23 Francois-Xavier Coudert + + PR fortran/30834 + * arith.c (complex_pow): Rewrite to handle large power. + (gfc_arith_power): Handle large power in the real and integer + cases. + +2007-03-22 Francois-Xavier Coudert + + PR fortran/31262 + * trans-const.c (gfc_conv_mpz_to_tree): Allow integer constants + larger than twice the width of a HOST_WIDE_INT. + +2006-03-22 Paul Thomas + + PR fortran/31193 + * trans-intrinsic.c (gfc_size_in_bytes): Remove function. + (gfc_conv_intrinsic_array_transfer): Remove calls to previous. + Explicitly extract TREE_TYPEs for source and mold. Use these + to calculate length of source and mold, except for characters, + where the se string_length is used. For mold, the TREE_TYPE is + recalculated using gfc_get_character_type_len so that the + result is correctly cast for character literals and substrings. + Do not use gfc_typenode_for_spec for the final cast. + +2007-03-22 Tobias Schlüter + + PR fortran/20897 + * decl.c (gfc_match_derived_decl): Reliably reject + 'doubleprecision' and 'doublecomplex' as type names. + +2007-03-19 Francois-Xavier Coudert + + PR fortran/31203 + * trans-expr.c (gfc_trans_init_string_length): Length should + never be negative. + (gfc_conv_function_call): Likewise. + +2007-03-18 Paul Thomas + + PR fortran/30531 + PR fortran/31086 + * symbo.c : Add gfc_derived_types. + (gfc_free_dt_list): Free derived type list gfc_derived_types. + (gfc_free_namespace): Remove call to gfc_free_dt_list. + (gfc_symbol_done_2): Call gfc_free_dt_list. + * gfortran.h : Declare gfc_derived_types to be external. Remove + derived types field from gfc_namespace. + * resolve.c (resolve_fl_derived): Refer to gfc_derived types + rather than namespace derived_types. + (resolve_fntype): Remove special treatment for module + derived type functions. + * trans-types.c (gfc_get_derived_type): Remove search for like + derived types. Finish by copying back end declaration to like + derived types in the derived type list gfc_derived_types. + + 2007-03-17 Francois-Xavier Coudert + + PR fortran/31120 + * trans-expr.c (gfc_conv_powi): Make n argument unsigned hwi. + (gfc_conv_cst_int_power): Handle integer exponent with care, + since it might be too large for us. + +2007-03-17 Francois-Xavier Coudert + + PR fortran/31184 + * invoke.texi: Fix typo. + +2007-03-16 Tobias Burnus + + * trans-decl.c (gfc_generate_function_code): Use all arguments of + set_std. + +2007-03-15 Francois-Xavier Coudert + + * gfortran.h (gfc_option_t): Add flag_backtrace field. + * lang.opt: Add -fbacktrace option. + * invoke.texi: Document the new option. + * trans-decl.c (gfc_build_builtin_function_decls): Add new + option to the call to set_std. + * options.c (gfc_init_options, gfc_handle_option): Handle the + new option. + +2007-03-15 Tobias Burnus + Paul Thomas + + PR fortran/30922 + * decl.c (gfc_match_import): If the parent of the current name- + space is null, try looking for an imported symbol in the parent + of the proc_name interface. + * resolve.c (resolve_fl_variable): Do not check for blocking of + host association by a same symbol, if the symbol is in an + interface body. + +2007-03-15 Paul Thomas + + PR fortran/30879 + * decl.c (match_data_constant): Before going on to try to match + a name, try to match a structure component. + + + PR fortran/30870 + * resolve.c (resolve_actual_arglist): Do not reject a generic + actual argument if it has a same name specific interface. + + PR fortran/31163 + * trans-array.c (parse_interface): Do not nullify allocatable + components if the symbol has the saved attribute. + +2007-03-14 Francois-Xavier Coudert + + * trans-array.c (gfc_trans_auto_array_allocation): Replace + fold(convert()) by fold_convert(). + (gfc_duplicate_allocatable): Likewise. + * trans-intrinsic.c (gfc_conv_intrinsic_dot_product): Use + build_int_cst instead of converting an integer_zero_node + to the final type. + +2007-03-14 Jakub Jelinek + + * module.c (mio_typespec): Don't look at ts->cl if not BT_CHARACTER. + +2007-03-13 Brooks Moses + + PR fortran/30933 + PR fortran/30948 + PR fortran/30953 + * intrinsics.texi (CHDIR): Fix argument names, note + that STATUS must be a default integer. + (CTIME): Fix argument names, note that RESULT must + be a default integer. + (EXIT): Note that STATUS must be a default integer. + +2007-03-13 Brooks Moses + + PR fortran/28068 + * intrinsic.texi: General whitespace cleanup, remove + comment about missing intrinsics. + (menu): Add lines for new entries listed below. + (ACOSH): Mention specific function DACOSH, correct + description phrasing. + (ASINH): Mention specific function DASINH, correct + description phrasing. + (ATANH): Mention specific function DATANH, correct + description phrasing. + (COS): Add index entry for CCOS. + (CPU_TIME): Correct "REAL" to "REAL(*)". + (EXP): Add index entry for CEXP. + (INT): Correct argument name to "A". + (INT2): New entry. + (INT8): New entry. + (LONG): New entry. + (MAX): Add index entries for specific variants. + (MCLOCK): New entry. + (MCLOCK8): New entry. + (SECNDS): Adjust to a more standard form. + (SECOND): New entry. + (TIME): Add cross-reference to MCLOCK. + (TIME8): Add cross-reference to MCLOCK8. + +2007-03-11 Paul Thomas + + PR fortran/30883 + * parse.c (parse_interface): Use the default types from the + formal namespace if a function or its result do not have a type + after parsing the specification statements. + +2007-03-08 Brooks Moses + + * intrinsic.texi: (ICHAR) Improve internal I/O note. + (ACHAR): Reference it. + (CHAR): Reference it. + (IACHAR): Reference it. + +2007-03-08 Brooks Moses + + * intrinsic.texi: (LINK) Document function form. + (RENAME): Likewise. + (SYMLNK): Likewise. + (SYSTEM): Likewise. + (UNLINK): Likewise. + +2007-03-08 Brooks Moses + + * intrinsic.texi: minor typo fixes, removed prologue. + (FSEEK): moved to correct place in alphabetical order. + +2007-03-08 Daniel Franke + + PR fortran/30947 + * check.c (gfc_check_alarm_sub): Added check for default integer + kind of status argument. + * iresolve.c (gfc_resolve_alarm_sub): Removed conversion of + status argument. + * intrinsic.texi (ALARM): Extended documentation. + +2007-03-08 Daniel Franke + + * intrinsic.texi (GERROR, ISATTY, TTYNAM): New. + (ABORT, FLUSH, FNUM, IRAND, MALLOC, SIGNAL, SRAND): Fixed typo. + * intrinsic.c (add_subroutines): Adjusted dummy argument names + of GERROR and TTYNAM. + +2007-07-08 Tobias Burnus + + * module.c (gfc_match_use): Support renaming of operators + in USE statements. + * gfortran.texi (Fortran 2003 Status): Document support of + renaming of operators. + +2007-07-08 Tobias Burnus + + PR fortran/30973 + * module.c (read_module): Always import module name as symbol. + (gfc_match_use): Disallow module name in the only clause of + a use statement. + +2007-03-08 Paul Thomas + + PR fortran/31011 + * expr.c (find_array_section): Correct arithmetic for section + size. + +2007-03-07 Brooks Moses + + * iresolve.c (gfc_resolve_ishftc): Correct s_kind value. + +2007-03-06 Daniel Franke + + PR documentation/30950 + * intrinsic.texi (AND, CPU_TIME): Fix dummy argument names. + (FREE): Fix call syntax. + +2007-03-06 Brooks Moses + + * intrinsic.texi: Limit column widths to a total of .85. + +2007-03-05 Brooks Moses + + * gfortran.texi (GFortran and G77): Rewrite completely. + +2007-03-05 Brooks Moses + + * match.c (gfc_match_name): Expanded comment. + +2007-03-05 Brooks Moses + + * gfortran.texi (Old-style kind specifications): Document + special handling of old-style kind specifiers for COMPLEX. + * decl.c (gfc_match_old_kind_spec): Document kind/bytesize + assumptions for COMPLEX in comment. + +2007-03-05 Brooks Moses + + PR 31050 + * gfortranspec.c (lang_specific_driver): Update program + name and copyright date. + +2007-03-03 Paul Thomas + + PR fortran/30882 + * check.c (dim_rank_check): The shape of subsections of + assumed-size arrays is known. + +2007-03-02 Paul Thomas + Tobias Burnus + + PR fortran/30873 + * decl.c (gfc_match_entry): Remove erroneous entry result check. + +2007-03-01 Brooks Moses + + * Make-lang.in: Add install-pdf target as copied from + automake v1.10 rules. + +2007-03-01 Tobias Burnus + + PR fortran/30865 + * trans-intrinsic.c (gfc_conv_intrinsic_size): Compare pointers. + +2007-02-28 Tobias Burnus + Paul Thomas + + PR fortran/30888 + PR fortran/30887 + * resolve.c (resolve_actual_arglist): Allow by-value + arguments and non-default-kind for %VAL(). + * trans-expr.c (conv_arglist_function): Allow + non-default-kind for %VAL(). + +2007-02-28 Tobias Burnus + + PR fortran/30968 + * primary.c (next_string_char): Correct reading a character + after the delimiter. + (match_string_constant): Print warning message only once. + +2007-02-27 Richard Guenther + + * trans-array.c (structure_alloc_comps): Use correct type + for null pointer constant. + +2007-02-26 Brooks Moses + + * gfortran.texi: Standardize title page, remove version number + from copyright page. + +2007-02-26 Thomas Koenig + Paul Thomas + + PR fortran/30865 + * trans-intrinsic.c (gfc_conv_intrinsic_size): + If dim is an optional argument, check for its + presence and call size0 or size1, respectively. + +2007-02-23 Paul Thomas + + PR fortran/30660 + * resolve.c (has_default_initializer): New function. + (resolve_fl_variable): Call has_default_initializer to determine if + the derived type has a default initializer to its ultimate + components. + + +2007-02-22 Jerry DeLisle + + * options.c (set_default_std_flags): New function to consolidate + setting the flags. + (gfc_init_options): Use new function. + (gfc_handle_option): Use new function. + +2007-02-22 Brooks Moses + + * gfortran.texi (Old-style kind specifications): Document + special handling of old-style kind specifiers for COMPLEX. + * decl.c (gfc_match_old_kind_spec): Documented kind/bytesize + assumptions in comment. + +2007-02-21 Bernhard Fischer + + * parse.c (next_free): Gooble spaces after OpenMP sentinel. + +2007-02-20 Thomas Koenig + + PR fortran/30869 + * match.c (gfc_match_iterator): Remove conflict between + loop variable and pointer. + +2007-02-20 Tobias Burnus + + PR fortran/30522 + * symbol.c (gfc_add_volatile): Allow to set VOLATILE + attribute for host-associated variables. + * gfortran.h (symbol_attribute): Save namespace + where VOLATILE has been set. + * trans-decl.c (gfc_finish_var_decl): Move variable + declaration to the top. + +2007-02-20 Tobias Burnus + + PR fortran/30783 + * resolve.c (resolve_symbol): Add character dummy VALUE check. + +2007-02-19 Thomas Koenig + + PR libfortran/30533 + * fortran/iresolve.c (gfc_resolve_maxloc): Remove coercion of + argument to default integer. + (gfc_resolve_minloc): Likewise. + +2007-02-18 Jerry DeLisle + + PR fortran/30681 + * options.c (gfc_init_options): Relax warning level for obsolescent. + * match.c (match_arithmetic_if): Change to obsolescent from deleted. + (gfc_match_if): Same. + +2007-02-18 Roger Sayle + + * trans-array.c (gfc_build_constant_array_constructor): When the + shape of the constructor is known, use that to construct the + gfc_array_spec. + (gfc_trans_constant_array_constructor): Initialize the "info" + information for all of the dimensions of the array constructor. + (constant_array_constructor_loop_size): New function. + (gfc_trans_array_constructor): Use it to determine whether a + loop is suitable for "constant array constructor" optimization. + + * trans-intrinsic.c (gfc_conv_intrinsic_anyall): Use fold_build2 + instead of build2, to avoid conditions like "(a != b) != 0". + +2007-02-18 Roger Sayle + Paul Thomas + + PR fortran/30400 + * match.c (match_forall_iterator): Use gfc_match_expr instead + of gfc_match_variable to match the iterator variable. Return + MATCH_NO if not a variable. Remove the reset of the symbol's + flavor in cleanup. + +2007-02-16 Tobias Burnus + + PR fortran/30793 + * trans-decl.c (gfc_generate_function_code): Do not initialize + pointers to derived components. + +2007-02-15 Sandra Loosemore + Brooks Moses + Lee Millward + + * trans-expr.c (gfc_conv_power_op): Use build_call_expr. + (gfc_conv_string_tmp): Likewise. + (gfc_conv_concat_op): Likewise. + (gfc_build_compare_string): Likewise. + (gfc_conv_function_call): Use build_call_list instead of build3. + + * trans-array.c (gfc_trans_allocate_array_storage): Use + build_call_expr. + (gfc_grow_array): Likewise. + (gfc_trans_array_ctor_element): Likewise. + (gfc_trans_array_constructor_value): Likewise. + (gfc_array_allocate): Likewise. + (gfc_array_deallocate): Likewise. + (gfc_trans_auto_array_allocation): Likewise. + (gfc_trans_dummy_array_bias): Likewise. + (gfc_conv_array_parameter): Likewise. + (gfc_trans_dealloc_allocated): Likewise. + (gfc_duplicate_allocatable): Likewise. + + * trans-openmp.c (gfc_trans_omp_barrier): Use build_call_expr. + (gfc_trans_omp_flush): Likewise. + + * trans-stmt.c (gfc_conv_elementel_dependencies): Use build_call_expr. + (gfc_trans_pause): Likewise. + (gfc_trans_stop): Likewise. + (gfc_trans_character_select): Likewise. + (gfc_do_allocate): Likewise. + (gfc_trans_assign_need_temp): Likewise. + (gfc_trans_pointer_assign_need_temp): Likewise. + (gfc_trans_forall_1): Likewise. + (gfc_trans_where_2): Likewise. + (gfc_trans_allocate): Likewise. + (gfc_trans_deallocate): Likewise. + + * trans.c (gfc_trans_runtime_check): Use build_call_expr. + + * trans-io.c (gfc_trans_open): Use build_call_expr. + (gfc_trans_close): Likewise. + (build_filepos): Likewise. + (gfc_trans_inquire): Likewise. + (NML_FIRST_ARG): Delete. + (NML_ADD_ARG): Delete. + (transfer_namelist_element): Use build_call_expr. + (build_dt): Likewise. + (gfc_trans_dt_end): Likewise. + (transfer_expr): Likewise. + (transfer_array-desc): Likewise. + + * trans-decl.c (gfc_generate_function_code): Use build_call_expr. + (gfc_generate_constructors): Likewise. + + * trans-intrinsic.c (gfc_conv_intrinsic_ctime): Use build_call_expr. + (gfc_conv_intrinsic_fdate): Likewise. + (gfc_conv_intrinsic_ttynam): Likewise. + (gfc_conv_intrinsic_array_transfer): Likewise. + (gfc_conv_associated): Likewise. + (gfc_conv_intrinsic_si_kind): Likewise. + (gfc_conv_intrinsic_trim): Likewise. + (gfc_conv_intrinsic_repeat: Likewise. + (gfc_conv_intrinsic_iargc): Likewise. + +2007-02-14 Jerry DeLisle + + PR fortran/30779 + * scanner.c (gfc_next_char_literal): Add check for end of file after + call to advance_line. + +2007-02-14 Steven G. Kargl + + PR fortran/30799 + * primary.c (match_logical_constant): Return MATCH_ERROR on invalid + kind. + +2007-02-14 Steven G. Kargl + + * misc.c (gfc_typename): Fix potential buffer overflow. + +2007-02-13 Paul Thomas + + PR fortran/30554 + * module.c (read_module): Set pointer_info to referenced if the + symbol has no namespace. + +2007-02-12 Nick Clifton + + * lang.opt: Add Warning attribute to warning options. + +2007-02-11 Daniel Franke + + * intrinsic.texi (HOSTNM): Fix typographical error in syntax. + (SLEEP): Added section and documentation. + +2007-02-11 Tobias Schlüter + + PR fortran/30478 + * decl.c (add_init_expr_to_sym): Remove ENUM specific code. + (variable_decl): Likewise. Rewrap comment. + (match_attr_spec): Remove ENUM specific code. + (gfc_match_enum): Fix typo in error message. + (enumerator_decl): New function. + (gfc_match_enumerator_def): Use enumerator_decl instead of + variable_decl. Adapt code accordingly. + +2007-02-11 Paul Thomas + + PR fortran/30554 + * module.c (find_symtree_for_symbol): New function to return + a symtree that is not a "unique symtree" given a symbol. + (read_module): Do not automatically set pointer_info to + referenced because this inhibits the generation of a unique + symtree. Recycle the existing symtree if possible by calling + find_symtree_for_symbol. + + PR fortran/30319 + * decl.c (add_init_expr_to_sym): Make new charlen for an array + constructor initializer. + +2007-02-10 Richard Henderson , Jakub Jelinek + + * f95-lang.c (gfc_init_builtin_functions): Add __emutls_get_address + and __emutls_register_common. + * openmp.c (gfc_match_omp_threadprivate): Don't error if !have_tls. + * trans-common.c (build_common_decl): Don't check have_tls. + * trans-decl.c (gfc_finish_var_decl): Likewise. + * types.def (BT_WORD, BT_FN_PTR_PTR): New. + (BT_FN_VOID_PTR_WORD_WORD_PTR): New. + +2007-02-09 Tobias Burnus + + PR fortran/30512 + * trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc, + gfc_conv_intrinsic_minmaxval): Use HUGE-1 for most negative integer. + +2007-02-09 Francois-Xavier Coudert + + PR fortran/30720 + * trans-array.c (gfc_trans_create_temp_array): Remove use of the + function argument. Always generate code for negative extent. + Simplify said code. + * trans-array.h (gfc_trans_create_temp_array): Change prototype. + * trans-expr.c (gfc_conv_function_call): Remove use of last argument + of gfc_trans_create_temp_array. + * trans-intrinsic.c (gfc_conv_intrinsic_array_transfer): Likewise. + * trans-stmt.c (gfc_conv_elemental_dependencies): Likewise. + +2007-02-08 Roger Sayle + + * trans-stmt.c (gfc_trans_forall_1): Optimize the cases where the + mask expression is a compile-time constant (".true." or ".false."). + +2007-02-04 Francois-Xavier Coudert + + PR fortran/30611 + * trans-intrinsic.c (gfc_conv_intrinsic_repeat): Evaluate + arguments only once. Generate check that NCOPIES argument is not + negative. + +2007-02-04 Steven G. Kargl + + PR fortran/30605 + * fortran/invoke.texi: Update documentation. + * fortran/options.c (gfc_post_options): Deal with tabs with -std=f2003 + and -pedantic. + +2007-02-03 Kazu Hirata + + * trans-array.c: Fix a comment typo. + +2007-02-03 Paul Thomas + + PR fortran/30514 + * array.c (match_array_element_spec): If the length of an array is + negative, adjust the upper limit to make it zero length. + + PR fortran/30660 + * resolve.c (pure_function, resolve_function): Initialize name to + null to clear up build warnings. + (resolve_fl_variable): Look at components explicitly to check for + default initializer, rather than using gfc_default_initializer. + +2007-02-02 Steven G. Kargl + + PR fortran/30683 + * resolve.c (resolve_generic_f): Check for non-NULL sym. + +2007-02-02 Roger Sayle + + * trans.c (gfc_build_array_ref): Use STRIP_TYPE_NOPS to eliminate + NON_LVALUE_EXPR nodes and useless type conversions. + +2007-02-02 Paul Thomas + + PR fortran/30284 + PR fortran/30626 + * trans-expr.c (gfc_conv_aliased_arg): Remove static attribute + from function and make sure that substring lengths are + translated. + (is_aliased_array): Remove static attribute. + * trans.c : Add prototypes for gfc_conv_aliased_arg and + is_aliased_array. + * trans-io.c (set_internal_unit): Add the post block to the + arguments of the function. Use is_aliased_array to check if + temporary is needed; if so call gfc_conv_aliased_arg. + (build_dt): Pass the post block to set_internal_unit and + add to the block after all io activiy is done. + +2007-02-01 Roger Sayle + + * trans-array.c (gfc_conv_expr_descriptor): We don't need to use + a temporary array to pass a constant non-character array constructor. + Generalize the descriptor generation code to handle scalarizer + "info" without an array reference. + +2007-02-01 Roger Sayle + + * dependency.c (gfc_check_dependency) : Implement + dependency checking for array constructors. + +2007-02-01 Roger Sayle + + * trans-stmt.c (compute_overall_iter_number): Document function + arguments. Generalize "unconditional forall nest with constant + bounds" optimization to eliminate unconditional inner loops with + constant bounds. + +2007-01-31 Tobias Burnus + + PR fortran/30520 + * interface.c (compare_actual_formal): Check conformance between + actual and VOLATILE dummy arguments. + * symbol.c (gfc_add_volatile): Allow setting of VOLATILE + multiple times in different scopes. + * decl.c (gfc_match_volatile): Search symbol in host association. + +2007-01-31 Kazu Hirata + + * simplify.c, trans-array.c: Fix comment typos. + +2007-01-30 Ralf Wildenhues + + * invoke.texi (Code Gen Options): Fix abbreviation typo. + * intrinsic.texi (ACCESS, LSHIFT, RSHIFT): Fix typos. + +2007-01-30 Steve Ellcey + + PR fortran/30432 + * trans-types.c (gfc_get_function_type): Do not add void_type_node + to empty arg list. + * trans-decl.c (create_function_arglist): Change assert. + +2007-01-29 Paul Thomas + + PR fortran/30554 + * module.c (read_module): If a symbol is excluded by an ONLY + clause, check to see if there is a symtree already loaded. If + so, attach the symtree to the pointer_info. + +2007-01-28 Thomas Koenig + + PR libfortran/30389 + * gfortran.h: Remove gfc_simplify_init_1. + * arith.h: Remove third argument from gfc_compare_string. + * arith.c (gfc_compare_expression): Remove third argument + from call to gfc_compare_string. + (gfc_compare_string): Remove third argument xcoll_table. + Remove use of xcoll_table. + * misc.c (gfc_init_1): Remove call to gfc_simplify_init_1. + * simplify.c (ascii_table): Remove. + (xascii_table): Likewise. + (gfc_simplify_achar): ICE if extract_int fails. Remove use of + ascii_table. Warn if -Wsurprising and value < 0 or > 127. + (gfc_simplify_char): ICE if extract_int fails. Error if + value < 0 or value > 255. + (gfc_simplify_iachar): Remove use of xascii_table. + Char values outside of 0..255 are an ICE. + (gfc_simplify_lge): Remove use of xascii_table. + (gfc_simplify_lgt): Likewise. + (gfc_simplify_lle): Likewise. + (gfc_simplify_llt): Likewise. + (invert_table): Remove. + (gfc_simplify_init_1): Remove. + +2007-01-27 Roger Sayle + + * trans-stmt.c (forall_info): Replace the next_nest and outer + fields that previously implemented a doubly-linked list with a + single prev_nest field (singly-linked list). + (gfc_trans_nested_forall_loop): The nested_forall_info argument + now denotes the innermost FORALL in the loop nest. + (compute_overall_iter_number): Use prev_nest instead of next_nest. + (gfc_trans_forall_1): Link/cons the new "info" to the head of the + nested_forall_info linked list. Free the current "info" when done. + +2007-01-27 Paul Thomas + + PR fortran/30407 + * trans-expr.c (gfc_conv_operator_assign): New function. + * trans.h : Add prototype for gfc_conv_operator_assign. + * trans-stmt.c (gfc_trans_where_assign): Add a gfc_symbol for + a potential operator assignment subroutine. If it is non-NULL + call gfc_conv_operator_assign instead of the first assignment. + ( gfc_trans_where_2): In the case of an operator assignment, + extract the argument expressions from the code for the + subroutine call and pass the symbol to gfc_trans_where_assign. + resolve.c (resolve_where, gfc_resolve_where_code_in_forall, + gfc_resolve_forall_body): Resolve the subroutine call for + operator assignments. + +2007-01-26 Steven Bosscher + Steven G. Kargl + + PR fortran/30278 + * fortran/io.c (next_char): Deal with backslash escaped characters. + Issue warnings in non -std=gnu cases. + * fortran/primary.c (next_string_char): Issue warnings in non + +2007-01-26 Tobias Burnus + + * lang-specs.h: Add support for .f03 and .F03 extensions. + * gfortran.texi: Document .f03 extension. + * options.c (form_from_filename): Recognize .f03. + +2007-01-25 Manuel Lopez-Ibanez + + PR fortran/30437 + * lang.opt (Wall): Remove RejectNegative. + * options.c (gfc_handle_option): Wall can be disabled. + (set_Wall): Add a parameter for disabling Wall. + +2007-01-23 Jerry DeLisle + + PR fortran/30532 + * scanner.c (load_line): Remove check fot ctrl-z and don't gobble. + +2007-01-23 Paul Thomas + + PR fortran/30481 + * match.c (gfc_match_namelist): Add check for assumed size character + in namelist and provide error if found. + +2007-01-21 Brooks Moses + + * intrinsic.texi (ACHAR): Added cross-references. + (CHAR): Put cross-references in alphabetical order. + (IACHAR): Added cross-references. + (ICHAR): Added cross-references. + +2007-01-20 Brooks Moses + + * intrinsic.texi: Edited all "Syntax" examples to a consistent form. + (MAXVAL): Corrected description of result characteristics. + (MINVAL): Same. + (UMASK): Added documentation. + +2007-01-20 Steven G. Kargl + + * openmp.c, matchexp.c, module.c, scanner.c, resolve.c, st.c, + parse.c, primary.c, options.c, misc.c, simplify.c: Next installment + in the massive whitespace patch. + +2007-01-20 Roger Sayle + + * module.c (mio_array_ref): The dimen_type fields of an array ref + are an enumerated type and can't be read/written directly with a + call to mio_integer. Instead loop over and cast each element. + +2007-01-20 Roger Sayle + + * dependency.c (gfc_full_array_ref_p): Check that ref->next is NULL, + i.e. that the ARRAY_REF doesn't mention components. + * trans-array.c (gfc_constant_array_constructor_p): Export external + function renamed from constant_array_constructor_p. + (gfc_build_constant_array_constructor): Export. + (gfc_trans_array_constructor): Update call to the renamed function + constant_array_constructor_p. + * trans-array.h (gfc_constant_array_constructor_p): Prototype here. + (gfc_build_constant_array_constructor): Likewise. + * trans-expr.c (gfc_build_memcpy_call): New helper function split + out from gfc_trans_array_copy. + (gfc_trans_array_copy): Use gfc_build_memcpy_call. + (gfc_trans_array_constructor_copy): New function to optimize + assigning an entire array from a constant array constructor. + (gfc_trans_assignment): Call gfc_trans_array_constructor_copy + when appropriate. + +2007-01-20 Roger Sayle + + * trans-intrinsic.c (gfc_conv_intrinsic_sign): New branchless + implementation for the SIGN intrinsic with integral operands. + (gfc_conv_intrinsic_minmax): Fix whitespace. + +2007-01-20 Francois-Xavier Coudert + + * gfortran.h (gfc_options_t): Add flag_allow_leading_underscore. + * lang.opt: Add -fallow-leading-underscore. + * match.c (gfc_match_name): Allow leading underscore in symbol + name if -fallow-leading-underscore is used. + * symbol.c (gfc_get_default_type): Add special case for symbol + names beginning with an underscore. + * trans-decl.c (gfc_get_extern_function_decl, + gfc_build_intrinsic_function_decls): Add _gfortran prefix to + library symbols selected_int_kind, selected_real_kind and + all specifics. + * options.c (gfc_init_options, gfc_handle_option): Handle the + new -fallow-leading-underscore option. + +2007-01-20 Francois-Xavier Coudert + + PR fortran/30446 + * options.c (gfc_handle_module_path_options): Path used in -J + option is now added to the module search path. + +2007-01-20 Richard Guenther + + PR fortran/30223 + * f95-lang.c (gfc_init_builtin_functions): Provide cbrt and + cexpi builtins if we have TARGET_C99_FUNCTIONS. Provide + sincos builtins if the target has sincos. + +2007-01-19 Brooks Moses + + * intrinsic.texi (MATMUL): Corrected a typo. + (MAX): Separated @var arguments. + (MIN): Separated @var arguments. + +2007-01-19 Brooks Moses + + * intrinsic.texi: general whitespace cleanup. + (menu): Added TIME8, removed UNMASK. + (AINT): Clarified argument requirement. + (ANINT): Clarified argument requirement. + (CEILING): Clarified argument requirement. + (CHAR): Clarified argument requirement. + (CMPLX): Clarified argument requirement. + (DCMPLX): Clarified argument requirement. + (FGET): Line rewrapping. + (FLOOR): Clarified argument requirement. + (GMTIME): Added documentation. + (IAND): Added cross-reference. + (IBCLR): Added cross-reference. + (IBSET): Added cross-reference. + (IEOR): Added cross-reference. + (INT): Collapsed examples, clarified argument requirement. + (IOR): Added cross-references. + (LEN_TRIM): Corrected result kind. + (LINK): Added cross-reference. + (LLT): Removed "documentation pending". + (LOGICAL): Added documentation. + (LSHIFT): Added documentation. + (LTIME): Added documentation. + (MATMUL): Added documentation. + (MAX): Added documentation. + (MAXLOC): Added documentation. + (MAXVAL): Added documentation. + (MERGE): Added documentation. + (MIN): Added documentation. + (MINLOC): Added documentation. + (MINVAL): Added documentation. + (MVBITS): Moved to correct place, added documentation. + (NOT): Added documentation. + (PERROR): Added documentation. + (RAN): Moved to correct place, added documentation. + (REAL): Clarified argument requirement. + (RENAME): Added documentation. + (RSHIFT): Clarified argument requirement. + (SIGN): Corrected table specification. + (SYMLNK): Added documentation. + (SYSTEM): Added documentation. + (TIME): Added documentation. + (TIME8): Added section and documentation. + (UNMASK): Removed erroneous section. + +2007-01-18 H.J. Lu + + * trans-stmt.c (compute_overall_iter_number): Fix a typo. + +2007-01-18 Roger Sayle + + * trans-expr.c (copyable_array_p): Consider user derived types without + allocatable components to be copyable. + +2007-01-18 Roger Sayle + + * trans-stmt.c (compute_overall_iter_number): Enhance to precompute + the number of interations in unconditional FORALL nests with constant + bounds. + +2007-01-18 Francois-Xavier Coudert + Tobias Burnus + + PR libfortran/29649 + * gfortran.h (gfc_option_t): Add flag_dump_core. + * lang.opt: Add -fdump-core option. + * invoke.texi: Document the new options. + * trans-decl.c (gfc_build_builtin_function_decls): Add new + options to the call to set_std. + * options.c (gfc_init_options, gfc_handle_option): Set the + new options. + +2007-01-17 Paul Thomas + + PR fortran/30476 + * module.c (load_generic_interfaces): Make the marking of the + symbol as ambiguous conditional on the module names being + different. + (write_generic): Ensure that the generic interface has a + non-NULL module field. + +2007-01-16 Roger Sayle + + PR fortran/30404 + * trans-stmt.c (forall_info): Remove pmask field. + (gfc_trans_forall_loop): Remove NVAR argument, instead assume that + NVAR covers all the interation variables in the current forall_info. + Add an extra OUTER parameter, which specified the loop header in + which to place mask index initializations. + (gfc_trans_nested_forall_loop): Remove NEST_FLAG argument. + Change the semantics of MASK_FLAG to only control the mask in the + innermost loop. + (compute_overall_iter_number): Optimize the trivial case of a + top-level loop having a constant number of iterations. Update + call to gfc_trans_nested_forall_loop. Calculate the number of + times the inner loop will be executed, not to size of the + iteration space. + (allocate_temp_for_forall_nest_1): Reuse SIZE as BYTESIZE when + sizeof(type) == 1. Tidy up. + (gfc_trans_assign_need_temp): Remove NEST_FLAG argument from calls + to gfc_trans_nested_forall_loop. + (gfc_trans_pointer_assign_need_temp): Likewise. + (gfc_trans_forall_1): Remove unused BYTESIZE, TMPVAR, SIZEVAR and + LENVAR local variables. Split mask allocation into a separate + hunk/pass from mask population. Use allocate_temp_for_forall_nest + to allocate the FORALL mask with the correct size. Update calls + to gfc_trans_nested_forall_loop. + (gfc_evaluate_where_mask): Update call to + gfc_trans_nested_forall_loop. + (gfc_trans_where_2): Likewise. + +2007-01-15 Paul Thomas + + PR fortran/28172 + * trans-stmt.c (gfc_trans_call): If it does not have one, get + a backend_decl for an alternate return. + + PR fortran/29389 + * resolve.c (pure_function): Statement functions are pure. Note + that this will have to recurse to comply fully with F95. + + PR fortran/29712 + * resolve.c (resolve_function): Only a reference to the final + dimension of an assumed size array is an error in an inquiry + function. + + PR fortran/30283 + * resolve.c (resolve_function): Make sure that the function + expression has a type. + +2007-01-14 Paul Thomas + + PR fortran/30410 + * trans-decl.c (gfc_sym_mangled_function_id): Module, external + symbols must not have the module name prepended. + +2007-01-11 Thomas Koenig + + PR libfortran/30415 + * iresolve.c (gfc_resolve_maxloc): If the rank + of the return array is nonzero and we process an + integer array smaller than default kind, coerce + the array to default integer. + * iresolve.c (gfc_resolve_minloc): Likewise. + +2007-01-11 Brooks Moses + + * simplify.c: Update copyright to 2007. + * scanner.c: Same. + +2007-01-11 Francois-Xavier Coudert + + PR fortran/30430 + * scanner.c (gfc_release_include_path): Free gfc_option.module_dir + only once! + +2007-01-09 Brooks Moses + + * simplify.c (gfc_simplify_ibclr): Fix POS comparison. + (gfc_simplify_ibset): Same. + +2007-01-09 Brooks Moses + + PR 30381 + PR 30420 + * simplify.c (convert_mpz_to_unsigned): New function. + (convert_mpz_to_signed): New function, largely based on + twos_complement(). + (twos_complement): Removed. + (gfc_simplify_ibclr): Add conversions to and from an + unsigned representation before bit-twiddling. + (gfc_simplify_ibset): Same. + (gfc_simplify_ishftc): Add checks for overly large + constant arguments, only check the third argument if + it's present, carry over high bits into the result as + appropriate, and perform the final conversion back to + a signed representation using the correct sign bit. + (gfc_simplify_not): Removed unnecessary masking. + +2007-01-09 Paul Thomas + + PR fortran/30408 + * resolve.c (resolve_code): Use the code->expr character length + directly to set length of llen. + +2007-01-09 Jerry DeLisle + + PR fortran/30408 + * lang.opt: Add Wcharacter_truncation option. + * options.c (gfc_init_options): Initialize + gfc_option.warn_character_truncation to zero. + (gfc_handle_option): Add case for OPT_Wcharacter_truncation. + +2007-01-08 Steven G. Kargl + + * interface.c, intrinsic.c, gfortranspec.c, io.c, f95-lang.c, + iresolve.c, match.c: Update Copyright years. Whitespace. + +2007-01-08 Richard Guenther + + * trans-io.c (transfer_array_desc): Use build_int_cst instead + of build_int_cstu. + +2007-01-08 Roger Sayle + + * trans-array.c (constant_array_constructor_p): New function to + determine whether an array constructor consists only of constant + elements, and if so return it's size. + (gfc_build_constant_array_constructor): Construct a statically + initialized gfortran array for a given EXPR_ARRAY. + (gfc_trans_constant_array_constructor): Efficiently scalarize + a constant array constructor. + (gfc_trans_array_constructor): Tidy up use of CONST_STRING. + Special case scalarization of constant array constructors, all of + whose elements are specified, using constant_array_constructor_p + and gfc_trans_constant_array_constructor. + (gfc_conv_scalarized_array_ref): Check whetger info->offset is zero + before adding it to index, to avoid creating a NON_LVALUE_EXPR. + +2007-01-08 Kazu Hirata + + gfortran.texi: Fix typos. + +2007-01-07 Steven G. Kargl + + * decl.c, dump-parse-tree.c, error.c, data.c, expr.c, dependency.c, + convert.c: Update Copyright dates. Fix whitespace. + +2007-01-07 Bernhard Fischer + + * data.c (gfc_assign_data_value): Fix whitespace. + +2007-01-07 Bernhard Fischer + + * trans-array.c (gfc_trans_create_temp_array, gfc_array_init_size): + Commentary typo fix. + +2007-01-07 Bernhard Fischer + + PR fortran/27698 + * match.c (gfc_match_name): Print diagnostics for invalid + character in names. + +2007-01-06 Steven G. Kargl + + * array.c: Fix whitespace in comment table. + +2007-01-06 Steven G. Kargl + + * array.c, bbt.c, check.c: Update copyright years. Whitespace. + +2007-01-06 Steven G. Kargl + + * arith.c: Update copyright years. Whitespace. + +2007-01-05 Roger Sayle + + * trans-expr.c (gfc_trans_assignment_1): New subroutine to scalarize + array assignments split out from gfc_trans_assignment. + (gfc_trans_array_copy): New function to implement array to array + copies via calls to __builtin_memcpy. + (copyable_array_p): New helper function to identify an array of + simple/POD types, that may be copied/assigned using memcpy. + (gfc_trans_assignment): Use gfc_trans_array_copy to handle simple + whole array assignments considered suitable by copyable_array_p. + Invoke gfc_trans_assignment_1 to perform the fallback scalarization. + +2007-01-05 Roger Sayle + + * trans-array.c (gfc_trans_array_constructor_value): Make the + static const "data" array as TREE_READONLY. + * trans-stmt.c (gfc_trans_character_select): Likewise. + +2007-01-05 Roger Sayle + + * trans-array.c (gfc_conv_loop_setup): Test whether the loop + stride is one, to avoid fold_build2 introducing a useless + NON_LVALUE_EXPR node. + +2007-01-05 Tobias Burnus + + * symbol.c (check_conflict): Fix error message. + +2007-01-05 Paul Thomas + + PR fortran/23232 + * decl.c (gfc_in_match_data, gfc_set_in_match_data): New + functions to signal that a DATA statement is being matched. + (gfc_match_data): Call gfc_set_in_match_data on entry and on + exit. + * gfortran.h : Add prototypes for above. + * expr.c (check_init_expr): Avoid check on parameter or + variable if gfc_in_match_data is true. + (gfc_match_init_expr): Do not call error on non-reduction of + expression if gfc_in_match_data is true. + + PR fortran/27996 + PR fortran/27998 + * decl.c (gfc_set_constant_character_len): Add boolean arg to + flag array constructor resolution. Warn if string is being + truncated. Standard dependent error if string is padded. Set + new arg to false for all three calls to + gfc_set_constant_character_len. + * match.h : Add boolean arg to prototype for + gfc_set_constant_character_len. + * gfortran.h : Add warn_character_truncation to gfc_options. + * options.c (set_Wall): Set warn_character_truncation if -Wall + is set. + * resolve.c (resolve_code): Warn if rhs string in character + assignment has to be truncated. + * array.c (gfc_resolve_character_array_constructor): Set new + argument to true for call to gfc_set_constant_character_len. + +2007-01-05 Tobias Burnus + + PR fortran/29624 + * interface.c (compare_parameter_intent): New function. + (check_intents): Support pointer intents. + * symbol.c (check_conflict): Support pointer intents, + better conflict_std message. + * expr.c (gfc_check_assign,gfc_check_pointer_assign): + Support pointer intents. + * resolve.c (resolve_deallocate_expr,resolve_allocate_expr): + Support pointer intents. + +2007-01-03 Brooks Moses + + PR 30371 + * check.c (gfc_check_kill_sub): Add checks for non-scalar + arguments. + +2007-01-04 Brooks Moses + + * intrinsic.texi: Minor cleanup, reflowing overlong + paragraphs, and correcting whitespace. + +2007-01-04 Brooks Moses + + * intrinsic.texi (LBOUND): Add documentation. + (LGE): Add documentation. + (LGT): Add documentation. + (LINK): Add documentation. + (LLE): Add documentation. + (LLT): Add documentation. + (LNBLNK): Add documentation. + (UBOUND): Add documentation. + (UNLINK): Add documentation. + +2007-01-04 Brooks Moses + + * intrinsic.texi (IAND): Clarify argument specifications. + (IBCLR): Add documentation. + (IBITS): Add documentation. + (IBSET): Add documentation. + (IEOR): Add documentation. + (IERRNO): Add documentation. + (INDEX): Add documentation. + (IOR): Add documentation. + (ISHFT): Add documentation. + (ISHFTC): Add documentation. + (KILL): Add documentation. + (LEN_TRIM): Add documentation. + +2007-01-04 Brooks Moses + + PR 30235 + * interface.c (compare_actual_formal): check for + alternate returns when iterating over non-present + arguments. + +2007-01-04 Brooks Moses + + * invoke.texi: Update manpage copyright to include 2007. + +2007-01-04 Brooks Moses + + * gfortran.texi: Update copyright to include 2007. + * intrinsic.texi: Update copyright to include 2007. + * invoke.texi: Update copyright to include 2007. + +2007-01-02 Tobias Burnus + Jakub Jelinek + + PR fortran/30276 + * scanner.c (open_included_file): Revert patch. + (gfc_open_included_file): Support absolute pathnames. + (gfc_open_intrinsic_module): Support absolute pathnames. + +2007-01-03 Brooks Moses + + * gfortran.texi (GNU Fortran and GCC): Rewrite + +2007-01-03 Brooks Moses + + * gfortran.texi (Introduction): Lower "Part I: + Introduction" to a chapter, renumber Parts II and III to + Parts I and II. + * intrinsic.texi (Introduction): Rename to "Introduction + to Intrinsics" to avoid conflict with the new chapter. + +2007-01-03 Brooks Moses + + * intrinsic.texi (Introduction): Rewrite first paragraph. + +2007-01-03 Brooks Moses + + * invoke.texi (OpenMP): Added index entry. + * gfortran.texi (title page): Removed erroneous '*'. + +2007-01-03 Brooks Moses + + * gfortran.texi (GFORTRAN_DEFAULT_RECL): Added units + to description. + (Extensions): Miscellaneous minor rewriting and copyediting. + (BOZ-literal constants): Renamed from Hexadecimal constants. + (Hollerith constants support): Added explanation and + suggestions for standard-conforming modern equivalents. + +2007-01-03 Brooks Moses + + * intrinsic.texi: Improvements to index entries; change + @findex entries to @cindex entries. + * invoke.texi: Standardize and improve index entries. + * gfortran.texi: Fix @code in one index entry. + +2007-01-03 Brooks Moses + + * invoke.texi: Change @code-type macros to appropriate + variants (@command, @option, etc.) + * gfortran.texi: Same. + +2007-01-03 Brooks Moses + + * intrinsic.texi: Various minor cleanups. + +2007-01-02 Steven G. Kargl + + * trans-intrinsic.c (gfc_conv_intrinsic_ibits): Fix call to + build_int_cst. + +2007-01-02 Tobias Burnus + + PR fortran/30276 + * scanner.c (open_included_file): Support full-path filenames. + +2007-01-02 Paul Thomas + + PR fortran/20896 + * interface.c (check_sym_interfaces): Remove call to + resolve_global_procedure. + gfortran.h : Remove prototype for resolve_global_procedure. + resolve.c (resolve_global_procedure): Add static attribute + to function declaration. + +2007-01-01 Steven G. Kargl + + * ChangeLog: Copy to ... + * ChangeLog-2006: here. diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2008 b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2008 new file mode 100644 index 0000000000..b4b7f2af89 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2008 @@ -0,0 +1,4135 @@ +2008-12-31 Daniel Franke + + * check.c (dim_rank_check): Fixed checking of dimension argument + if array is of type EXPR_ARRAY. + +2008-12-22 Paul Thomas + + PR fortran/38602 + * trans-decl.c (init_intent_out_dt): Allow for optional args. + +2008-12-21 Jerry DeLisle + + PR fortran/38398 + * io.c: Add error checks for g0 formatting and provide adjustment of + error loci for improved error messages. + +2008-12-21 Arjen Markus + Daniel Kraft + + PR fortran/37605 + * gfortran.texi: Fixed some typos and some minor style improvements. + * intrinsic.texi: Some clarifications and typo-fixes. + * invoke.texi: Better documenation of the behaviour of the + -fdefault-*-8 options and some other fixes. + +2008-12-18 Daniel Kraft + + PR fortran/31822 + * gfortran.h (gfc_check_same_strlen): Made public. + * trans.h (gfc_trans_same_strlen_check): Made public. + * check.c (gfc_check_same_strlen): Made public and adapted error + message output to be useful not only for intrinsics. + (gfc_check_merge): Adapt to gfc_check_same_strlen change. + * expr.c (gfc_check_pointer_assign): Use gfc_check_same_strlen for + string length compile-time check. + * trans-expr.c (gfc_trans_pointer_assignment): Add runtime-check for + equal string lengths using gfc_trans_same_strlen_check. + * trans-intrinsic.c (gfc_trans_same_strlen_check): Renamed and made + public from conv_same_strlen_check. + (gfc_conv_intrinsic_merge): Adapted accordingly. + +2008-12-17 Daniel Kraft + + PR fortran/38137 + * trans-intrinsic.c (conv_same_strlen_check): New method. + (gfc_conv_intrinsic_merge): Call it here to actually do the check. + +2008-12-15 Mikael Morin + + PR fortran/38487 + * dependency.c (gfc_is_data_pointer): New function. + (gfc_check_argument_var_dependency): Disable the warning + in the pointer case. + (gfc_check_dependency): Use gfc_is_data_pointer. + +2008-12-15 Mikael Morin + + PR fortran/38113 + * error.c (show_locus): Start counting columns at 0. + * primary.c (match_actual_arg): Eat spaces + before copying the current locus. + (match_variable): Copy the locus before matching. + +2008-12-14 Paul Thomas + + PR fortran/35937 + * trans-expr.c (gfc_finish_interface_mapping): Fold convert the + character length to gfc_charlen_type_node. + +2008-12-12 Daniel Franke + + PR fortran/36355 + * check.c (gfc_check_matmul): Fixed error message for invalid + types to correctly identify the offending argument, added check + for mismatching types. + +2008-12-11 Richard Guenther + + * Make-lang.in (install-finclude-dir): Use correct mode argument + for mkinstalldirs. + +2008-12-09 Daniel Franke + + PR fortran/36376 + PR fortran/37468 + * lang-specs.h: Pass on -i* options to f951 to (probably) report + them as unknown. Duplicate gcc.c (cpp_options), but omit + -fpch-preprocess on -save-temps. + +2008-12-09 Daniel Franke + + PR fortran/36457 + * lang.opt: Added option idirafter. + * cpp.h (gfc_cpp_add_include_path_after): New prototype. + * cpp.c (gfc_cpp_handle_option): Recognize and handle OPT_dirafter. + (gfc_cpp_add_include_path_after): New, adds user-defined search path + after any other paths. + * invoke.texi (idirafter): New. + (no-range-check): Fixed entry in option-index. + +2008-12-09 Mikael Morin + + PR fortran/37469 + * expr.c (find_array_element): Simplify array bounds. + Assert that both bounds are constant expressions. + +2008-12-09 Mikael Morin + + PR fortran/35983 + * trans-expr.c (gfc_trans_subcomponent_assign): + Add se's pre and post blocks to current block. + (gfc_trans_structure_assign): Remove specific handling + of C_NULL_PTR and C_NULL_FUNPTR. + +2008-12-06 Jerry DeLisle + + PR fortran/38425 + * io.c (check_io_constraints): Check constraints on REC=, POS=, and + internal unit with POS=. Fix punctuation on a few error messages. + +2008-12-06 Janus Weil + + PR fortran/38415 + * expr.c (gfc_check_pointer_assign): Added a check for abstract + interfaces in procedure pointer assignments, removed check involving + gfc_compare_interfaces until PR38290 is fixed completely. + +2008-12-05 Jerry DeLisle + + PR fortran/38291 + * io.c (match_dt_element): Use dt->pos in matcher. + (gfc_free_dt): Free dt->pos after use. + (gfc_resolve_dt): Use dt->pos in resolution of stream position tag. + +2008-12-05 Sebastian Pop + + PR bootstrap/38262 + * Make-lang.in (f951): Add BACKENDLIBS, remove GMPLIBS. + +2008-12-02 Jakub Jelinek + Diego Novillo + + * Make-lang.in (install-finclude-dir): Use mkinstalldirs + and don't remove the finclude directory beforehand. + +2008-12-02 Janus Weil + + PR fortran/36704 + PR fortran/38290 + * decl.c (match_result): Result may be a standard variable or a + procedure pointer. + * expr.c (gfc_check_pointer_assign): Additional checks for procedure + pointer assignments. + * primary.c (gfc_match_rvalue): Bugfix for procedure pointer + assignments. + * resolve.c (resolve_function): Check for attr.subroutine. + * symbol.c (check_conflict): Addtional checks for RESULT statements. + * trans-types.c (gfc_sym_type,gfc_get_function_type): Support procedure + pointers as function result. + +2008-12-01 Mikael Morin + + PR fortran/38252 + * parse.c (parse_spec): Skip statement order check in case + of a CONTAINS statement. + +2008-11-30 Daniel Kraft + + PR fortran/37779 + * gfortran.h (struct gfc_entry_list): Fixed typo in comment. + * resolve.c (is_illegal_recursion): New method. + (resolve_procedure_expression): Use new is_illegal_recursion instead of + direct check and handle function symbols correctly. + (resolve_actual_arglist): Removed useless recursion check. + (resolve_function): Use is_illegal_recursion instead of direct check. + (resolve_call): Ditto. + +2008-11-29 Eric Botcazou + + * trans-array.c (gfc_conv_array_parameter): Guard union access. + +2008-11-29 Janus Weil + Mikael Morin + + PR fortran/38289 + PR fortran/38290 + * decl.c (match_procedure_decl): Handle whitespaces. + * resolve.c (resolve_specific_s0): Bugfix in check for intrinsic + interface. + +2008-11-25 H.J. Lu + + * module.c (gfc_dump_module): Report error on unlink only if + errno != ENOENT. + +2008-11-25 Mikael Morin + + PR fortran/36463 + * expr.c (replace_symbol): Don't replace the symtree + if the expresion is an intrinsic function. Don't create + non-existent symtrees. Use symbol's name instead of symtree's, + different in case of module procedure dummy arguments. + +2008-11-25 Jan Kratochvil + + PR fortran/38248 + * module.c (gfc_dump_module): Check rename/unlink syscalls errors. + +2008-11-25 Eric Botcazou + + PR fortran/37319 + * parse.c (match_deferred_characteristics): Make sure 'name' is + initialized before reading it. + +2008-11-24 Jerry DeLisle + + PR fortran/37803 + * arith.c (gfc_check_real_range): Add mpfr_check_range. + * simplify.c (gfc_simplify_nearest): Add mpfr_check_range. + +2008-11-24 Mikael Morin + + PR fortran/38184 + * simplify.c (is_constant_array_expr): Return true instead of false + if the array constructor is empty. + +2008-11-24 Daniel Kraft + + PR fortran/37779 + * resolve.c (resolve_procedure_expression): New method. + (resolve_variable): Call it. + (resolve_actual_arglist): Call gfc_resolve_expr for procedure arguments. + +2008-11-24 Paul Thomas + + PR fortran/34820 + * trans-expr.c (gfc_conv_function_call): Remove all code to + deallocate intent out derived types with allocatable + components. + (gfc_trans_assignment_1): An assignment from a scalar to an + array of derived types with allocatable components, requires + a deep copy to each array element and deallocation of the + converted rhs expression afterwards. + * trans-array.c : Minor whitespace. + * trans-decl.c (init_intent_out_dt): Add code to deallocate + allocatable components of derived types with intent out. + (generate_local_decl): If these types are unused, set them + referenced anyway but allow the uninitialized warning. + + PR fortran/34143 + * trans-expr.c (gfc_trans_subcomponent_assign): If a conversion + expression has a null data pointer argument, nullify the + allocatable component. + + PR fortran/32795 + * trans-expr.c (gfc_trans_subcomponent_assign): Only nullify + the data pointer if the source is not a variable. + +2008-11-23 Paul Thomas + + PR fortran/37735 + * trans-array.c (structure_alloc_comps): Do not duplicate the + descriptor if this is a descriptorless array! + +2008-11-12 Tobias Burnus + + PR fortran/38160 + * trans-types.c (gfc_validate_c_kind): Remove function. + * decl.c (gfc_match_kind_spec): Add C kind parameter check. + (verify_bind_c_derived_type): Remove gfc_validate_c_kind call. + (verify_c_interop_param): Update call. + * gfortran.h (verify_bind_c_derived_type): Update prototype. + (gfc_validate_c_kind): Remove. + * symbol.c (verify_bind_c_derived_type): Update verify_c_interop call. + * resolve.c (gfc_iso_c_func_interface): Ditto. + +2008-11-22 Jakub Jelinek + + PR libfortran/37839 + * trans-io.c (gfc_build_io_library_fndecls): Decrease pad size back + to 16 pointers plus 32 integers. Don't use max integer kind + alignment, only gfc_intio_kind's alignment. + (gfc_trans_inquire): Only set flags2 if mask2 is non-zero. + * ioparm.def: Fix order, bitmasks and types of inquire round, sign + and pending fields. Move u in dt before id. + * io.c (gfc_free_inquire): Free decimal and size exprs. + (match_inquire_element): Match size instead of matching blank twice. + (gfc_resolve_inquire): Resolve size. + +2008-11-20 Jakub Jelinek + + PR middle-end/29215 + * trans-array.c (trans_array_constructor_value, + gfc_build_constant_array_constructor): Fill in TREE_PURPOSE. + + * trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc): Use + gfc_index_one_node. + (gfc_conv_intrinsic_size): Use gfc_index_{zero,one}_node. + + PR fortran/38181 + * trans-intrinsic.c (gfc_conv_intrinsic_size): Inline 2 argument + size if the second argument is not optional and one argument size + for rank 1 arrays. + +2008-11-19 Paul Thomas + + PR fortran/38171 + * module.c (load_equiv): Regression fix; check that equivalence + members come from the same module only. + +2008-11-16 Mikael Morin + + PR fortran/35681 + * dependency.c (gfc_check_argument_var_dependency): Add + elemental check flag. Issue a warning if we find a dependency + but don't generate a temporary. Add the case of an elemental + function call as actual argument to an elemental procedure. + Add the case of an operator expression as actual argument + to an elemental procedure. + (gfc_check_argument_dependency): Add elemental check flag. + Update calls to gfc_check_argument_var_dependency. + (gfc_check_fncall_dependency): Add elemental check flag. + Update call to gfc_check_argument_dependency. + * trans-stmt.c (gfc_trans_call): Make call to + gfc_conv_elemental_dependencies unconditional, but with a flag + whether we should check dependencies between variables. + (gfc_conv_elemental_dependencies): Add elemental check flag. + Update call to gfc_check_fncall_dependency. + * trans-expr.c (gfc_trans_arrayfunc_assign): Update call to + gfc_check_fncall_dependency. + * resolve.c (find_noncopying_intrinsics): Update call to + gfc_check_fncall_dependency. + * dependency.h (enum gfc_dep_check): New enum. + (gfc_check_fncall_dependency): Update prototype. + +2008-11-16 Mikael Morin + + PR fortran/37992 + * gfortran.h (gfc_namespace): Added member old_cl_list, + backup of cl_list. + (gfc_free_charlen): Added prototype. + * symbol.c (gfc_free_charlen): New function. + (gfc_free_namespace): Use gfc_free_charlen. + * parse.c (next_statement): Backup gfc_current_ns->cl_list. + (reject_statement): Restore gfc_current_ns->cl_list. + Free cl_list's elements before dropping them. + +2008-11-16 Tobias Burnus + + PR fortran/38095 + * trans-expr.c (gfc_map_intrinsic_function): Fix pointer access. + +2008-11-16 Paul Thomas + + PR fortran/38119 + * trans-array.c (gfc_trans_create_temp_array): Set the + loop->from to zero and the renormalisation of loop->to for all + dimensions. + +2008-11-16 Paul Thomas + + PR fortran/37926 + * trans-expr.c (gfc_free_interface_mapping): Null sym->formal + (gfc_add_interface_mapping): Copy the pointer to the formal + arglist, rather than using copy_formal_args - fixes regression. + +2008-11-15 Paul Thomas + + PR fortran/37926 + * trans-expr.c (gfc_add_interface_mapping): Transfer the formal + arglist and the always_explicit attribute if the dummy arg is a + procedure. + +2008-11-14 Jerry DeLisle + + PR fortran/37988 + * io.c (enum format_token): For readability replace FMT_POS with FMT_T, + FMT_TL, and FMT_TR. (format_lex): Use new enumerators. (check_format): + Add check for missing positive integer. + +2008-10-14 Paul Thomas + + PR fortran/38033 + * trans-array.c (gfc_trans_create_temp_array): Stabilize the + 'to' expression. + (gfc_conv_loop_setup): Use the end expression for the loop 'to' + if it is available. + +2008-11-12 Jakub Jelinek + + PR target/35366 + PR fortran/33759 + * trans-const.c (gfc_conv_constant_to_tree): Warn when + converting an integer outside of LOGICAL's range to + LOGICAL. + * trans-intrinsic.c (gfc_conv_intrinsic_function, + gfc_conv_intrinsic_array_transfer, gfc_conv_intrinsic_transfer): + Use INTEGER_TYPE instead of BOOLEAN_TYPE for TRANSFER as + argument of another TRANSFER. + +2008-11-12 Tobias Burnus + + PR fortran/38065 + * resolve.c (resolve_fntype): Fix private derived type checking. + +2008-11-09 Paul Thomas + + PR fortran/37836 + * intrinsic.c (add_functions): Reference gfc_simplify._minval + and gfc_simplify_maxval. + * intrinsic.h : Add prototypes for gfc_simplify._minval and + gfc_simplify_maxval. + * simplify.c (min_max_choose): New function extracted from + simplify_min_max. + (simplify_min_max): Call it. + (simplify_minval_maxval, gfc_simplify_minval, + gfc_simplify_maxval): New functions. + +2008-11-04 Paul Thomas + + PR fortran/37597 + * parse.c (gfc_fixup_sibling_symbols ): Fixup contained, even + when symbol not found. + +2008-11-03 Tobias Burnus + + PR fortran/37821 + * cpp.c (gfc_cpp_add_include_path): Use BRACKET. + * scanner.c (add_path_to_list): Argument to add at head. + (gfc_add_include_path): Add new argument. + (gfc_add_intrinsic_modules_path) Update call. + (load_file): Print filename/line in the error message. + * gfortran.h (gfc_add_include_path): Update prototype. + * options.c (gfc_post_options,gfc_handle_module_path_options, + gfc_handle_option): Update call. + * lang-spec.h (F951_OPTIONS): Don't insert include path twice. + + * arith.c (arith_error): Add -fno-range-error to the message. + +2008-11-03 Paul Thomas + + PR fortran/37445 + * resolve.c (resolve_actual_arglist ): Correct comparison of + FL_VARIABLE with e->expr_type. + (resolve_call): Check that host association is correct. + (resolve_actual_arglist ): Remove return is old_sym is use + associated. Only reparse expression if old and new symbols + have different types. + + PR fortran/PR35769 + * resolve.c (gfc_resolve_assign_in_forall): Change error to a + warning. + +2008-11-01 Janus Weil + + PR fortran/36426 + * expr.c (replace_symbol): Replace all symbols which lie in the + formal namespace of the interface and copy their attributes. + * resolve.c (resolve_symbol): Add charlen to namespace. + +2008-11-01 Steven G. Kargl + + PR fortran/19925 + * trans-array.c (gfc_trans_array_constructor_value): Fix comment. + (gfc_conv_array_initializer): Convert internal_error() to gfc_error_now. + * array.c: Remove GFC_MAX_AC_EXPAND macro. + (gfc_expand_constructor): Use gfc_option.flag_max_array_constructor. + * gfortran.h (gfc_option): Add flag_max_array_constructor member. + * lang.opt: Add -fmax-array-constructor option. + * expr.c (gfc_match_init_expr): Fix error message to mention new option. + * invoke.texi: Document new option. + * options.c (gfc_init_options): Set default value for new option. + (gfc_handle_option): Deal with commandline. + +2008-11-01 Daniel Kraft + + PR fortran/35681 + * gfortran.h (struct gfc_code): New field `resolved_isym'. + * trans.h (gfc_build_memcpy_call): Made public. + * trans-array.h (gfc_trans_create_temp_array): New argument `initial'. + * intrinsic.c (gfc_intrinsic_sub_interface): Set resolved_isym. + * iresolve.c (create_formal_for_intents): New helper method. + (gfc_resolve_mvbits): Put dummy formal arglist on resolved_sym. + * resolve.c (resolve_call): Initialize resolved_isym to NULL. + * trans-array.c (gfc_trans_allocate_array_storage): New argument + `initial' to allow initializing the allocated storage to some initial + value copied from another array. + (gfc_trans_create_temp_array): Allow initialization of the temporary + with a copy of some other array by using the new extension. + (gfc_trans_array_constructor): Pass NULL_TREE for initial argument. + (gfc_conv_loop_setup): Ditto. + * trans-intrinsic.c (gfc_conv_intrinsic_array_transfer): Ditto. + * trans-expr.c (gfc_conv_function_call): Ditto. + (gfc_build_memcpy_call): Made public. + * trans-stmt.c (gfc_conv_elemental_dependencies): Initialize created + temporary for INTENT(INOUT) arguments to the value of the mirrored + array and clean up the temporary as very last intructions in the created + block. + * trans.c (gfc_trans_code): For EXEC_CALL, see if we have a MVBITS call + and enable elemental dependency checking if we have. + +2008-11-01 Janus Weil + + PR fortran/36322 + PR fortran/36463 + * gfortran.h: New function gfc_expr_replace_symbols. + * decl.c (match_procedure_decl): Increase reference count for interface. + * expr.c: New functions replace_symbol and gfc_expr_replace_symbols. + * resolve.c (resolve_symbol): Correctly copy array spec and char len + of PROCEDURE declarations from their interface. + * symbol.c (gfc_get_default_type): Enhanced error message. + (copy_formal_args): Call copy_formal_args recursively for arguments. + * trans-expr.c (gfc_conv_function_call): Bugfix. + +2008-11-01 Dennis Wassel + + PR fortran/37159 + * fortran/check.c (gfc_check_random_seed): Check PUT size + at compile time. + +2008-10-31 Mikael Morin + + PR fortran/35840 + * expr.c (gfc_reduce_init_expr): New function, containing checking code + from gfc_match_init_expr, so that checking can be deferred. + (gfc_match_init_expr): Use gfc_reduce_init_expr. + * io.c (check_io_constraints): Use gfc_reduce_init_expr instead of + checking that the expression is a constant. + * match.h (gfc_reduce_init_expr): Prototype added. + +2008-10-31 Mikael Morin + + PR fortran/35820 + * resolve.c (gfc_count_forall_iterators): New function. + (gfc_resolve_forall): Use gfc_count_forall_iterators to evaluate + the needed memory amount to allocate. Don't forget to free allocated + memory. Add an assertion to check for memory leaks. + +2008-10-30 Steven G. Kargl + + PR fortran/37930 + * fortran/arith.c (gfc_mpfr_to_mpz): Test for NaN and Inf values. + Remove stale comment and kludge code for MPFR 2.0.1 and older. + (gfc_real2int): Error on conversion of NaN or Inf. + (gfc_complex2int): Ditto. + * fortran/arith.h: Update mpfr_to_mpz prototype. + * fortran/simplify.c (gfc_simplify_ceiling, gfc_simplify_floor, + gfc_simplify_ifix, gfc_simplify_idint, simplify_nint): Update function + calls to include locus. + +2008-10-30 Mikael Morin + + PR fortran/37903 + * trans-array.c (gfc_trans_create_temp_array): If n is less + than the temporary dimension, assert that loop->from is + zero (reverts to earlier versions). If there is at least one + null loop->to[n], it is a callee allocated array so set the + size to NULL and break. + (gfc_trans_constant_array_constructor): Set the offset to zero. + (gfc_trans_array_constructor): Remove loop shifting around the + temporary creation. + (gfc_conv_loop_setup): Prefer zero-based descriptors if + possible. Calculate the translation from loop variables to + array indices if an array constructor. + +2008-10-30 Mikael Morin + + PR fortran/37749 + * trans-array.c (gfc_trans_create_temp_array): If size is NULL + use the array bounds for loop->to. + +2008-10-28 Tobias Burnus + + * intrinsic.texi: Update OpenMP section for OMPv3. + +2008-10-24 Jakub Jelinek + + * Make-lang.in (check-f95-subtargets, check-fortran-subtargets): New + aliases for check-gfortran-subtargets. + (lang_checks_parallelized): Add check-gfortran. + (check_gfortran_parallelize): New variable. + +2008-10-19 Paul Thomas + + PR fortran/37723 + * dependency.c (gfc_dep_resolver ): If we find equal array + element references, go on to the next reference. + +2008-10-16 Daniel Kraft + + * resolve.c (resolve_elemental_actual): Handle calls to intrinsic + subroutines correctly. + +2008-10-13 Kaveh R. Ghazi + + * simplify.c: Remove MPFR_VERSION_NUM(2,3,0) conditionals. + +2008-10-12 Daniel Kraft + + PR fortran/37688 + * expr.c (gfc_expr_check_typed): Extend permission of untyped + expressions to both top-level variable and basic arithmetic expressions. + +2008-10-12 Paul Thomas + + PR fortran/37787 + * dependency.c (gfc_are_equivalenced_arrays): Look in symbol + namespace rather than current namespace, if it is available. + +2008-10-12 Steven G. Kargl + + PR fortran/37792 + * fortran/resolve.c (resolve_fl_variable): Simplify the + initializer if there is one. + +2008-10-11 Paul Thomas + + PR fortran/37794 + * module.c (check_for_ambiguous): Remove redundant code. + +2008-10-09 Daniel Kraft + + PR fortran/35723 + * gfortran.h (gfc_suppress_error): Removed from header. + (gfc_push_suppress_errors), (gfc_pop_suppress_errors): New methods. + * array.c (gfc_array_size): Use new gfc_push/pop_suppress_errors + instead of directly changing gfc_suppress_error. + * intrinsic.c (gfc_intrinsic_func_interface): Ditto. + (gfc_intrinsic_sub_interface): Ditto. + * error.c (suppress_errors): Made static from `gfc_suppress_error'. + (gfc_push_suppress_errors), (gfc_pop_suppress_errors): New methods. + (gfc_notify_std), (gfc_error): Use new static name of global. + * expr.c (check_arglist), (check_references): New methods. + (check_restricted): Check arglists and references of EXPR_FUNCTIONs + and EXPR_VARAIBALEs, respectively. Allow PARAMETER symbols. + +2008-10-07 Jakub Jelinek + + * f95-lang.c (poplevel): Don't clear BLOCK_VARS if functionbody. + * trans-decl.c (gfc_build_qualified_array): Build accurate debug type + even if nest. + (build_entry_thunks, gfc_generate_function_code, + gfc_generate_constructors): Ensure DECL_SAVED_TREE is a BIND_EXPR + with DECL_INITIAL as its BLOCK. + +2008-10-05 Paul Thomas + + PR fortran/35680 + * gfortran.h : Add 'error' bit field to gfc_expr structure. + * expr.c (check_inquiry): When checking a restricted expression + check that arguments are either variables or restricted. + (check_restricted): Do not emit error if the expression has + 'error' set. Clean up detection of host-associated variable. + +2008-10-05 Daniel Kraft + + PR fortran/37638 + * gfortran.h (struct gfc_typebound_proc): New flag `error'. + * resolve.c (update_arglist_pass): Added assertion. + (update_compcall_arglist): Fail early for erraneous procedures to avoid + confusion later. + (resolve_typebound_generic_call): Ignore erraneous specific targets + and added assertions. + (resolve_typebound_procedure): Set new `error' flag. + +2008-10-04 Paul Thomas + + PR fortran/37706 + * module.c (load_equiv): Check the module before negating the + unused flag. + +2008-10-02 Steven Bosscher + + PR fortran/37635 + * intrinsic.c (add_functions): Add LEADZ and TRAILZ as generics. + * intrinsic.h (gfc_simplify_leadz, gfc_simplify_trailz): New protos. + * gfortran.h : (GFC_ISYM_LEADZ, GFC_ISYM_TRAILZ): New. + * f95-lang (gfc_init_builtin_functions): Add BUILT_IN_CLZ, + BUILT_IN_CLZL, BUILT_IN_CLZLL, BUILT_IN_CTZ, BUILT_IN_CTZL, and + BUILT_IN_CTZLL. + * trans-intrinsic.c (gfc_conv_intrinsic_leadz, + gfc_conv_intrinsic_trails): New code-generation functions for LEADZ + and TRAILZ intrinsics. + (gfc_conv_intrinsic_function): Use them + * intrinsic.texi: Add documentation for LEADZ and TRAILZ. + * simplify.c (gfc_simplify_leadz, gfc_simplify_trailz): New functions. + +2008-09-30 Janus Weil + + PR fortran/36592 + * symbol.c (check_conflict): If a symbol in a COMMON block is a + procedure, it must be a procedure pointer. + (gfc_add_in_common): Symbols in COMMON blocks may be variables or + procedure pointers. + * trans-types.c (gfc_sym_type): Make procedure pointers in COMMON + blocks work. + +2008-09-25 Jerry DeLisle + + PR fortran/37504 + * expr.c (gfc_check_pointer_assign): Allow assignment of + protected pointers. + * match.c (gfc_match_assignment,gfc_match_pointer_assignment): + Remove unreachable code. + +2008-09-24 Tobias Burnus + + * options.c (set_default_std_flags,gfc_init_options): + Add comment: keep in sync with libgfortran. + +2008-09-24 Tobias Burnus + + PR fortran/37626 + * trans-array.c (gfc_trans_deferred_array): Don't auto-deallocate + result variables. + +2008-09-23 Daniel Kraft + + PR fortran/37588 + * gfortran.h (gfc_compare_actual_formal): Removed, made private. + (gfc_arglist_matches_symbol): New method. + * interface.c (compare_actual_formal): Made static. + (gfc_procedure_use): Use new name of compare_actual_formal. + (gfc_arglist_matches_symbol): New method. + (gfc_search_interface): Moved code partially to new + gfc_arglist_matches_symbol. + * resolve.c (resolve_typebound_generic_call): Resolve actual arglist + before checking against formal and use new gfc_arglist_matches_symbol + for checking. + (resolve_compcall): Set type-spec of generated expression. + +2008-09-23 Tobias Burnus + + PR fortran/37580 + * expr.c (gfc_check_pointer_assign): Add checks for pointer + remapping. + +2008-09-22 Jerry DeLisle + + PR fortran/37486 + * gfortran.h (gfc_option_t): New members flag_align_commons and + warn_align_commons. + * lang.opt: New options falign-commons and Walign-commons. + * invoke.texi: Documentation for new options. + * options.c (gfc_init_options): Initialize new options. + (gfc_handle_options): Handle new options. + * trans-common.c (translate_common): Implement new options. + (gfc_trans_common): Set correct locus. + +2008-09-21 Paul Thomas + + PR fortran/37583 + * decl.c (scalarize_intrinsic_call): Both subroutines and + functions can give a true for get_proc_mame's last argument so + remove the &&gfc_current_ns->proc_name->attr.function. + resolve.c (resolve_actual_arglist): Add check for recursion by + reference to procedure as actual argument. + +2008-09-21 Daniel Kraft + + PR fortran/35846 + * trans.h (gfc_conv_string_length): New argument `expr'. + * trans-expr.c (flatten_array_ctors_without_strlen): New method. + (gfc_conv_string_length): New argument `expr' that is used in a new + special case handling if cl->length is NULL. + (gfc_conv_subref_array_arg): Pass expr to gfc_conv_string_length. + * trans-array.c (gfc_conv_expr_descriptor): Ditto. + (gfc_trans_auto_array_allocation): Pass NULL as new expr. + (gfc_trans_g77_array), (gfc_trans_dummy_array_bias): Ditto. + (gfc_trans_deferred_array): Ditto. + (gfc_trans_array_constructor): Save and restore old values of globals + used for bounds checking. + * trans-decl.c (gfc_trans_dummy_character): Ditto. + (gfc_trans_auto_character_variable): Ditto. + +2008-09-21 Daniel Kraft + + * decl.c (match_procedure_in_type): Changed misleading error message + for not yet implemented PROCEDURE(interface) syntax. + +2008-09-18 Paul Thomas + + PR fortran/35945 + * resolve.c (resolve_fl_variable_derived): Remove derived type + comparison for use associated derived types. Host association + of a derived type will not arise if there is a local derived type + whose use name is the same. + + PR fortran/36700 + * match.c (gfc_match_call): Use the existing symbol even if + it is a function. + +2008-09-18 Daniel Kraft + + PR fortran/37507 + * trans.h (gfc_trans_runtime_error): New method. + (gfc_trans_runtime_error_vararg): New method. + (gfc_allocate_array_with_status): New argument `expr' for locus/varname. + (gfc_deallocate_array_with_status): Ditto. + * trans-array.h (gfc_array_deallocate): Ditto. + * trans.c (gfc_trans_runtime_error): New method. + (gfc_trans_runtime_error_vararg): New method, moved parts of the code + from gfc_trans_runtime_check here. + (gfc_trans_runtime_error_check): Moved code partly to new method. + (gfc_call_malloc): Fix tab-indentation. + (gfc_allocate_array_with_status): New argument `expr' and call + gfc_trans_runtime_error for error reporting to include locus. + (gfc_deallocate_with_status): Ditto. + * trans-stmt.c (gfc_trans_deallocate): Pass expr as new argument. + * trans-array.c (gfc_array_allocate): Ditto. + (gfc_array_deallocate): New argument `expr', passed on. + (gfc_trans_dealloc_allocated): Pass NULL for expr. + * trans-openmp.c (gfc_omp_clause_default): Ditto. + +2008-09-18 Paul Thomas + + PR fortran/37274 + PR fortran/36374 + * module.c (check_for_ambiguous): New function to test loaded + symbol for ambiguity with fixup symbol. + (read_module): Call check_for_ambiguous. + (write_symtree): Do not write the symtree for symbols coming + from an interface body. + + PR fortran/36374 + * resolve.c (count_specific_procs ): New function to count the + number of specific procedures with the same name as the generic + and emit appropriate errors for and actual argument reference. + (resolve_assumed_size_actual): Add new argument no_formal_args. + Correct logic around passing generic procedures as arguments. + Call count_specific_procs from two locations. + (resolve_function): Evaluate and pass no_formal_args. + (resolve call): The same and clean up a bit by using csym more + widely. + + PR fortran/36454 + * symbol.c (gfc_add_access): Access can be updated if use + associated and not private. + +2008-09-17 Jakub Jelinek + + PR fortran/37536 + * trans-stmt.c (gfc_trans_do): Optimize integer type non-simple + do loop initialization. + +2008-09-14 Jerry DeLisle + Tobias Burnus + + PR fortran/35840 + * io.c (match_vtag): Add tag name to error message. + (match_out_tag): Cleanup whitespace. + (gfc_resolve_dt): Resolve id and async tags. + +2008-09-13 Daniel Kraft + + PR fortran/35770 + * primary.c (gfc_match_varspec): Added missing type-spec clearing + after wrong implicit character typing. + +2008-09-12 Richard Guenther + + * trans-intrinsic.c (gfc_conv_intrinsic_transfer): Use + build_fold_addr_expr to properly mark the argument + addressable. + +2008-09-11 Daniel Kraft + + PR fortran/36214 + * simplify.c (simplify_cmplx): Added linebreak to long line. + * target-memory.c (gfc_convert_boz): Fix indentation. + (gfc_interpret_float): Set mpfr precision to right value before + calling mpfr_init. + +2008-09-10 H.J. Lu + + * expr.c (find_array_element): Reformat comment. + +2008-09-10 H.J. Lu + + * expr.c (find_array_element): Reformat. + +2008-09-10 Tobias Burnus + + PR fortran/37420 + * trans-decl.c (get_proc_pointer_decl): Fix -Wunused-variable. + +2008-09-09 Daniel Kraft + + PR fortran/37429 + * resolve.c (expression_rank): Added assertion to guard against + EXPR_COMPCALL expressions. + (resolve_compcall): Set expression's rank from the target procedure's. + +2008-09-09 Daniel Kraft + + PR fortran/37411 + * trans-array.c (gfc_conv_array_parameter): Added assertion that the + symbol has an array spec. + +2008-09-08 Daniel Kraft + + PR fortran/37199 + * trans-expr.c (gfc_add_interface_mapping): Set new_sym->as. + (gfc_map_intrinsic_function): Added checks against NULL bounds in + array specs. + +2008-09-08 Tobias Burnus + + PR fortran/37400 + * symbol.c (gfc_set_default_type): Copy char len. + +2008-09-06 Steven G. Kargl + + PR fortran/36153 + * fortran/resolve.c (resolve_function): Shortcircuit for SIZE and + UBOUND if 2nd argument is KIND. + +2008-09-06 Steven G. Kargl + + PR fortran/33229 + * resolve.c (resolve_function): An intrinsic subroutine should not be + called as a function. + +2008-09-05 Daniel Kraft + + PR fortran/35837 + * resolve.c (resolve_types): Restore gfc_current_ns on exit. + * symbol.c (gfc_save_all): Removed blank line. + +2008-09-05 Daniel Kraft + + PR fortran/36746 + * primary.c (gfc_match_rvalue): Removed logic to handle implicit + typing to a derived-type if a component reference is found. + (gfc_match_varspec): Moved it here. + +2008-09-04 Richard Guenther + + * trans-array.c (gfc_conv_array_parameter): Use correct types + in building COND_EXPRs. + * trans-expr.c (gfc_conv_missing_dummy): Likewise. + * trans-intrinsics.c (gfc_conv_intrinsic_merge): Likewise. + +2008-09-04 Daniel Kraft + + * PR fortran/37099 + * expr.c (simplify_const_ref): Update expression's character length + when pulling out a substring reference. + +2008-09-04 Ian Lance Taylor + + * symbol.c (generate_isocbinding_symbol): Compare + gfc_notification_std with ERROR rather than FAILURE. + * resolve.c (check_assumed_size_reference): Compare array type + with AR_FULL rather than DIMEN_ELEMENT. + (resolve_actual_arglist): Compare with EXPR_VARIABLE rather than + FL_VARIABLE. + +2008-09-01 Jerry DeLisle + + PR fortran/37228 + * io.c (check_format): Allow specifying precision with g0 format. + +2008-09-02 Daniel Kraft + + * gfortran.h (struct gfc_namespace): New member `implicit_loc'. + (gfc_add_abstract): New method. + * decl.c (gfc_get_type_attr_spec): Match ABSTRACT attribute. + (gfc_match_derived_decl): Copy abstract attribute in derived symbol. + * dump-parse-tree.c (show_attr): Show ABSTRACT attribute as `ABSTRACT' + only to allow for ABSTRACT types. + * parse.c (parse_interface): Use new gfc_add_abstract. + * primary.c (gfc_match_structure_constructor): Check that no ABSTRACT + type is constructed. + * resolve.c (resolve_typespec_used): New method. + (resolve_fl_derived): Check type in respect to ABSTRACT attribute and + check that no component is of an ABSTRACT type. + (resolve_symbol): Check that no symbol is of an ABSTRACT type. + (resolve_types): Check IMPLICIT declarations for ABSTRACT types. + * symbol.c (gfc_merge_new_implicit): Remember loci of IMPLICIT's. + (gfc_add_abstract): New method. + +2008-09-01 Daniel Kraft + + PR fortran/37193 + * module.c (read_module): Initialize use_only flag on used symbols. + +2008-09-01 Daniel Kraft + + * gfc-internals.texi (F2003 OOP), (Type-bound Procedures): New chapter + and section to document the internals of type-bound procedures. + (gfc_expr): Document EXPR_COMPCALL. + * gfortran.h (struct gfc_expr): Remove unused `derived' from compcall. + * dump-parse-tree.c (show_compcall): New method. + (show_expr): Call it for EXPR_COMPCALL. + (show_typebound), (show_f2k_derived): New methods. + (show_symbol): Call show_f2k_derived. + (show_code_node): Handle EXEC_COMPCALL. + * primary.c (gfc_match_varspec): Don't initialize removed `derived' in + primary->value.compcall. + +2008-08-31 Richard Guenther + + * trans-expr.c (gfc_trans_string_copy): Use the correct types + to compute slen and dlen. + +2008-08-31 Daniel Kraft + + * gfortran.h (enum gfc_statement): New entry `ST_GENERIC'. + (struct gfc_tbp_generic): New type. + (struct gfc_typebound_proc): Removed `target' and added union with + `specific' and `generic' members; new members `overridden', + `subroutine', `function' and `is_generic'. + (struct gfc_expr): New members `derived' and `name' in compcall union + member and changed type of `tbp' to gfc_typebound_proc. + (gfc_compare_interfaces), (gfc_compare_actual_formal): Made public. + * match.h (gfc_typebound_default_access): New global. + (gfc_match_generic): New method. + * decl.c (gfc_match_generic): New method. + (match_binding_attributes): New argument `generic' and handle it. + (match_procedure_in_type): Mark matched binding as non-generic. + * interface.c (gfc_compare_interfaces): Made public. + (gfc_compare_actual_formal): Ditto. + (check_interface_1), (compare_parameter): Use new public names. + (gfc_procedure_use), (gfc_search_interface): Ditto. + * match.c (match_typebound_call): Set base-symbol referenced. + * module.c (binding_generic): New global array. + (current_f2k_derived): New global. + (mio_typebound_proc): Handle IO of GENERIC bindings. + (mio_f2k_derived): Record current f2k-namespace in current_f2k_derived. + * parse.c (decode_statement): Handle GENERIC statement. + (gfc_ascii_statement): Ditto. + (typebound_default_access), (set_typebound_default_access): Removed. + (gfc_typebound_default_access): New global. + (parse_derived_contains): New default-access implementation and handle + GENERIC statements encountered. + * primary.c (gfc_match_varspec): Adapted to new gfc_typebound_proc + structure and removed check for SUBROUTINE/FUNCTION from here. + * resolve.c (extract_compcall_passed_object): New method. + (update_compcall_arglist): Use it. + (resolve_typebound_static): Adapted to new gfc_typebound_proc structure. + (resolve_typebound_generic_call): New method. + (resolve_typebound_call): Check target is a SUBROUTINE and handle calls + to GENERIC bindings. + (resolve_compcall): Ditto (check for target being FUNCTION). + (check_typebound_override): Handle GENERIC bindings. + (check_generic_tbp_ambiguity), (resolve_typebound_generic): New methods. + (resolve_typebound_procedure): Handle GENERIC bindings and set new + attributes subroutine, function and overridden in gfc_typebound_proc. + (resolve_fl_derived): Ensure extended type is resolved before the + extending one is. + * st.c (gfc_free_statement): Fix bug with free'ing EXEC_COMPCALL's. + * symbol.c (gfc_find_typebound_proc): Adapt for GENERIC changes. + +2008-08-29 Jan Hubicka + + * parse.c (parse_interface): Silence uninitialized var warning. + +2008-08-29 Jakub Jelinek + + * trans.h (struct lang_type): Add span. + (GFC_TYPE_ARRAY_SPAN): Define. + * trans-decl.c (gfc_get_symbol_decl): For subref array pointers, + copy TREE_STATIC from decl to span instead of setting it + unconditionally, set DECL_ARTIFICIAL, fix type of initializer + and set GFC_TYPE_ARRAY_SPAN on decl's type. + * trans-types.c (gfc_get_array_descr_info): If + GFC_TYPE_ARRAY_SPAN is non-NULL, use it as element size. + + * trans-decl.c (check_constant_initializer, + gfc_emit_parameter_debug_info): New functions. + (gfc_generate_module_vars, gfc_generate_function_code): Emit + PARAMETERs and unreferenced variables with initializers into + debug info. + + * gfortran.h (gfc_use_list): Add where field. + * module.c (use_locus): New static variable. + (gfc_match_use): Set it. + (gfc_use_module): Copy it to gfc_use_list's where field. + * trans-decl.c (gfc_generate_module_vars): Call gfc_trans_use_stmts. + (gfc_trans_use_stmts): Set backend locus before calling the debug + hook. Allow non-VAR_DECLs to be created even for non-external + module. Don't emit anything so far for renames from different + modules. + + PR fortran/24790 + * trans-decl.c (create_function_arglist): Set DECL_BY_REFERENCE on + PARM_DECLs with pointer or reference type. + + * trans-decl.c (gfc_build_qualified_array): Build non-flat + array type for debug info purposes. + + PR fortran/29635 + PR fortran/23057 + * f95-lang.c (gfc_init_ts): New function. + (LANG_HOOKS_INIT_TS): Define. + * gfortran.h (gfc_use_rename): New type, moved from module.c. + (gfc_get_use_rename): New macro, moved from module.c. + (gfc_use_list): New type. + (gfc_get_use_list): New macro. + (gfc_namespace): Add use_stmts field. + (gfc_free_use_stmts): New prototype. + * Make-lang.in (fortran/trans-decl.o): Depend on debug.h. + * module.c (gfc_use_rename, gfc_get_use_rename): Moved to + gfortran.h. + (gfc_use_module): Chain the USE statement info to + ns->use_stmts. + (gfc_free_use_stmts): New function. + * symbol.c (gfc_free_namespace): Call gfc_free_use_stmts. + * trans.h (struct module_htab_entry): New type. + (gfc_find_module, gfc_module_add_decl): New functions. + * trans.c (gfc_generate_module_code): Create NAMESPACE_DECL for + the module, adjust DECL_CONTEXTs of module procedures and + call gfc_module_add_decl for them. + * trans-common.c (build_common_decl): Set DECL_IGNORED_P + on the common variable. + (create_common): Set DECL_IGNORED_P for use associated vars. + * trans-decl.c: Include debug.h. + (gfc_get_symbol_decl): Set DECL_IGNORED_P on use_assoc vars from + modules. + (build_function_decl): Allow current_function_decl's context + to be a NAMESPACE_DECL. + (module_htab, cur_module): New variables. + (module_htab_do_hash, module_htab_eq, module_htab_decls_hash, + module_htab_decls_eq, gfc_find_module, gfc_module_add_decl): New + functions. + (gfc_create_module_variable): Adjust DECL_CONTEXTs of module + variables and types and call gfc_module_add_decl for them. + (gfc_generate_module_vars): Temporarily set cur_module. + (gfc_trans_use_stmts): New function. + (gfc_generate_function_code): Call it. + (gfc_generate_block_data): Set DECL_IGNORED_P on decl. + * trans-types.c (gfc_get_derived_type): Adjust DECL_CONTEXT + and TYPE_CONTEXT of module derived types. + +2008-08-28 Daniel Kraft + + * gfortran.h (enum expr_t): New value `EXPR_COMPCALL'. + (gfc_get_typebound_proc): New macro. + (struct gfc_expr): New union-member `compcall' for EXPR_COMPCALL. + (enum gfc_exec_op): New value `EXEC_COMPCALL'. + (gfc_find_typebound_proc): New argument. + (gfc_copy_ref), (gfc_match_varspec): Made public. + * decl.c (match_procedure_in_type): Use gfc_get_typebound_proc. + * expr.c (free_expr0), (gfc_copy_expr): Handle EXPR_COMPCALL. + (gfc_copy_ref): Made public and use new name. + (simplify_const_ref): Use new name of gfc_copy_ref. + (simplify_parameter_variable): Ditto. + (gfc_simplify_expr): gcc_unreachable for EXPR_COMPCALL. + * match.c (match_typebound_call): New method. + (gfc_match_call): Allow for CALL's to typebound procedures. + * module.c (binding_passing), (binding_overriding): New variables. + (expr_types): Add EXPR_COMPCALL. + (mio_expr): gcc_unreachable for EXPR_COMPCALL. + (mio_typebound_proc), (mio_typebound_symtree): New methods. + (mio_f2k_derived): Handle type-bound procedures. + * primary.c (gfc_match_varspec): Made public and parse trailing + references to type-bound procedures; new argument `sub_flag'. + (gfc_match_rvalue): New name and argument of gfc_match_varspec. + (match_variable): Ditto. + * resolve.c (update_arglist_pass): New method. + (update_compcall_arglist), (resolve_typebound_static): New methods. + (resolve_typebound_call), (resolve_compcall): New methods. + (gfc_resolve_expr): Handle EXPR_COMPCALL. + (resolve_code): Handle EXEC_COMPCALL. + (resolve_fl_derived): New argument to gfc_find_typebound_proc. + (resolve_typebound_procedure): Ditto and removed not-implemented error. + * st.c (gfc_free_statement): Handle EXEC_COMPCALL. + * symbol.c (gfc_find_typebound_proc): New argument `noaccess' and + implement access-checking. + * trans-expr.c (gfc_apply_interface_mapping_to_expr): gcc_unreachable + on EXPR_COMPCALL. + * trans-intrinsic.c (gfc_conv_intrinsic_bound): Add missing break. + * trans-openmp.c (gfc_trans_omp_array_reduction): Add missing + intialization of ref->type. + +2008-08-28 Janus Weil + + PR fortran/37253 + * module.c (ab_attribute,attr_bits,mio_symbol_attribute): Take care of + saving attr.procedure and attr.proc_ptr to the module file. + +2008-08-25 Daniel Kraft + + * gfortran.h (gfc_find_component): Add new arguments. + * parse.c (parse_derived_contains): Check if the derived-type containing + the CONTAINS section is SEQUENCE/BIND(C). + * resolve.c (resolve_typebound_procedure): Check for name collision with + components. + (resolve_fl_derived): Check for name collision with inherited + type-bound procedures. + * symbol.c (gfc_find_component): New arguments `noaccess' and `silent'. + (gfc_add_component): Adapt for new arguments. + * primary.c (match_varspec), (gfc_match_structure_constructor): Ditto. + +2008-08-24 Tobias Burnus + + PR fortran/37201 + * decl.c (verify_bind_c_sym): Reject array/string returning + functions. + +2008-08-24 Tobias Burnus + + PR fortran/37201 + * trans-expr.c (gfc_conv_function_call): Add string_length + for character-returning bind(C) functions. + +2008-08-24 Daniel Kraft + + * gfortran.h (gfc_typebound_proc): New struct. + (gfc_symtree): New member typebound. + (gfc_find_typebound_proc): Prototype for new method. + (gfc_get_derived_super_type): Prototype for new method. + * parse.h (gfc_compile_state): New state COMP_DERIVED_CONTAINS. + * decl.c (gfc_match_procedure): Handle PROCEDURE inside derived-type + CONTAINS section. + (gfc_match_end): Handle new context COMP_DERIVED_CONTAINS. + (gfc_match_private): Ditto. + (match_binding_attributes), (match_procedure_in_type): New methods. + (gfc_match_final_decl): Rewrote to make use of new + COMP_DERIVED_CONTAINS parser state. + * parse.c (typebound_default_access): New global helper variable. + (set_typebound_default_access): New callback method. + (parse_derived_contains): New method. + (parse_derived): Extracted handling of CONTAINS to new parser state + and parse_derived_contains. + * resolve.c (resolve_bindings_derived), (resolve_bindings_result): New. + (check_typebound_override), (resolve_typebound_procedure): New methods. + (resolve_typebound_procedures): New method. + (resolve_fl_derived): Call new resolving method for typebound procs. + * symbol.c (gfc_new_symtree): Initialize new member typebound to NULL. + (gfc_find_typebound_proc): New method. + (gfc_get_derived_super_type): New method. + +2008-08-23 Janus Weil + + * gfortran.h (gfc_component): Add field "symbol_attribute attr", remove + fields "pointer", "allocatable", "dimension", "access". + Remove functions "gfc_set_component_attr" and "gfc_get_component_attr". + * interface.c (gfc_compare_derived_types): Ditto. + * trans-array.c (gfc_array_allocate,structure_alloc_comps): Ditto. + * trans-expr.c (gfc_conv_component_ref,gfc_trans_subcomponent_assign, + gfc_conv_structure): Ditto. + * symbol.c (gfc_find_component,free_components,gfc_set_component_attr, + gfc_get_component_attr,verify_bind_c_derived_type, + generate_isocbinding_symbol): Ditto. + * decl.c (build_struct): Ditto. + * dump-parse-tree.c (show_components): Ditto. + * trans-stmt.c (gfc_trans_deallocate): Ditto. + * expr.c (gfc_check_assign,gfc_check_pointer_assign, + gfc_default_initializer): Ditto. + * module.c (mio_component): Ditto. + * trans-types.c (copy_dt_decls_ifequal,gfc_get_derived_type): Ditto. + * resolve.c (has_default_initializer,resolve_structure_cons, + gfc_iso_c_func_interface,find_array_spec,resolve_ref, + resolve_deallocate_expr,resolve_allocate_expr,resolve_fl_derived, + resolve_equivalence_derived): Ditto. + * trans-io.c (transfer_expr): Ditto. + * parse.c (parse_derived): Ditto. + * dependency.c (gfc_check_dependency): Ditto. + * primary.c (gfc_variable_attr): Ditto. + +2008-08-23 Tobias Burnus + + PR fortran/37076 + * arith.c (gfc_arith_concat): Fix concat of kind=4 strings. + +2008-08-23 Tobias Burnus + + PR fortran/37025 + * target-memory.c (gfc_interpret_character): Support + kind=4 characters. + +2008-08-22 Daniel Kraft + + PR fortran/30239 + * symbol.c (gfc_add_type): Warn on -Wsurprising if a function-result + type is re-declared but neither -pedantic nor -std=f* is given and so + this is no error. + * invoke.texi (-Wsurprising): Document this new behaviour. + +2008-08-22 Daniel Kraft + + * gfortran.h (in_prefix): Removed from this header. + * match.h (gfc_matching_prefix): Moved and renamed from `in_prefix'. + * decl.c (in_prefix): Removed from here. + (gfc_match_prefix): Use new name of `gfc_matching_prefix'. + * symbol.c (gfc_check_symbol_typed): Ditto. + * expr.c (check_typed_ns): New helper variable. + (expr_check_typed_help): New helper method. + (gfc_expr_check_typed): Rewrote to use gfc_traverse_expr to do the + work, fixing a minor problem. + * match.c (gfc_matching_prefix): New variable. + +2008-08-22 Daniel Kraft + + PR fortran/32095 + PR fortran/34228 + * gfortran.h (in_prefix): New global. + (gfc_check_symbol_typed), (gfc_check_expr_typed): New methods. + * array.c (match_array_element_spec): Check that bounds-expressions + don't have symbols not-yet-typed in them. + * decl.c (var_element): Check that variable used is already typed. + (char_len_param_value): Check that expression does not contain + not-yet-typed symbols. + (in_prefix): New global. + (gfc_match_prefix): Record using `in_prefix' if we're at the moment + parsing a prefix or not. + * expr.c (gfc_expr_check_typed): New method. + * parse.c (verify_st_order): New argument to disable error output. + (check_function_result_typed): New helper method. + (parse_spec): Check that the function-result declaration, if given in + a prefix, contains no not-yet-typed symbols when the IMPLICIT rules are + parsed. + * symbol.c (gfc_check_symbol_typed): Check that a symbol already has + a type associated to it, otherwise use the IMPLICIT rules or signal + an error. + +2008-08-21 Manuel Lopez-Ibanez + + * f95-lang.c: Update all calls to pedwarn. + +2008-08-18 Daniel Franke + + PR fortran/37032 + * gfortran.texi: Document decision on include file handling in + preprocessed files. + +2008-08-16 Tobias Burnus + + PR fortran/36825 + * libgfortran.h: Reduce GFC_MAX_DIMENSIONS to 7. + +2008-08-15 Jerry DeLisle + + PR fortran/35863 + * io.c (gfc_match_open): Enable UTF-8 in checks. + * simplify.c (gfc_simplify_selected_char_kind): Enable iso_10646. + +2008-08-14 Janus Weil + + PR fortran/36705 + * symbol.c (check_conflict): Move conflict checks for (procedure,save) + and (procedure,intent) to resolve_fl_procedure. + * resolve.c (resolve_fl_procedure): Ditto. + +2008-08-09 Manuel Lopez-Ibanez + + PR 36901 + * f95-lang.c (gfc_mark_addressable): Use "pedwarn (0," instead of + 'pedwarn0'. + +2008-08-09 Paul Thomas + + PR fortran/37011 + * symbol.c (gfc_add_extension): New function. + * decl.c (gfc_get_type_attr_spec): Call it. + (gfc_match_derived_decl): Set symbol extension attribute from + attr.extension. + * gfortran.h : Add prototype for gfc_add_extension. + +2008-08-08 Manuel Lopez-Ibanez + + PR 28875 + * options.c (set_Wall): Replace set_Wunused by warn_unused. + +2008-08-08 Daniel Kraft + + * gfortran.h (gfc_finalizer): Replaced member `procedure' by two + new members `proc_sym' and `proc_tree' to store the symtree after + resolution. + (gfc_find_sym_in_symtree): Made public. + * decl.c (gfc_match_final_decl): Adapted for new member name. + * interface.c (gfc_find_sym_in_symtree): Made public. + (gfc_extend_expr), (gfc_extend_assign): Changed call accordingly. + * module.c (mio_finalizer), (mio_f2k_derived), (mio_full_f2k_derived): + New methods for module-file IO of f2k_derived. + (mio_symbol): Do IO of f2k_derived namespace. + * resolve.c (gfc_resolve_finalizers): Adapted for new member name and + finding the symtree for the symbol here. + * symbol.c (gfc_free_finalizer): Adapted for new members. + +2008-07-30 Ralf Wildenhues + + * gfc-internals.texi: Update to GFDL 1.2. Do not list GPL as + Invariant Section. + * gfortran.texi: Likewise. + * intrinsic.texi: Do not list GPL as Invariant Section. + * invoke.texi: Likewise. Update copyright years. + +2008-07-29 Paul Thomas + + * trans-expr.c (conv_parent_component_references): New function + to build missing parent references. + (gfc_conv_variable): Call it + * symbol.c (gfc_add_component): Check that component name in a + derived type extension does not appear in parent. + (gfc_find_component): For a derived type extension, check if + the component appears in the parent derived type by calling + self. Separate errors for private components and private types. + * decl.c (match_data_constant): Add extra arg to call to + gfc_match_structure_constructor. + (check_extended_derived_type): New function to check that a + parent derived type exists and that it is OK for exension. + (gfc_get_type_attr_spec): Add extra argument 'name' and return + it if extends is specified. + (gfc_match_derived_decl): Match derived type extension and + build a first component of the parent derived type if OK. Add + the f2k namespace if not present. + * gfortran.h : Add the extension attribute. + * module.c : Handle attribute 'extension'. + * match.h : Modify prototypes for gfc_get_type_attr_spec and + gfc_match_structure_constructor. + * primary.c (build_actual_constructor): New function extracted + from gfc_match_structure_constructor and modified to call self + iteratively to build derived type extensions, when f2k named + components are used. + (gfc_match_structure_constructor): Do not throw error for too + many components if a parent type is being handled. Use + gfc_find_component to generate errors for non-existent or + private components. Iteratively call self for derived type + extensions so that parent constructor is built. If extension + and components left over, throw error. + (gfc_match_rvalue): Add extra arg to call to + gfc_match_structure_constructor. + + * trans-array.c (gfc_conv_resolve_dependencies): If lhs and rhs + are the same symbol, aliassing does not matter. + +2008-07-29 Jan Hubicka + + * options.c (gfc_post_options): Do not set flag_no_inline. + +2008-07-29 Daniel Kraft + + PR fortran/36403 + * trans-intrinsic.c (conv_generic_with_optional_char_arg): New method + to append a string-length even if the string argument is missing, e.g. + for EOSHIFT. + (gfc_conv_intrinsic_function): Call the new method for EOSHIFT, PACK + and RESHAPE. + +2008-07-28 Kaveh R. Ghazi + + * gfortran.h (try): Remove macro. Replace try with gfc_try + throughout. + * array.c: Likewise. + * check.c: Likewise. + * cpp.c: Likewise. + * cpp.h: Likewise. + * data.c: Likewise. + * data.h: Likewise. + * decl.c: Likewise. + * error.c: Likewise. + * expr.c: Likewise. + * interface.c: Likewise. + * intrinsic.c: Likewise. + * intrinsic.h: Likewise. + * io.c: Likewise. + * match.h: Likewise. + * parse.c: Likewise. + * parse.h: Likewise. + * resolve.c: Likewise. + * scanner.c: Likewise. + * simplify.c: Likewise. + * symbol.c: Likewise. + * trans-openmp.c: Likewise. + * trans-types.c: Likewise. + +2008-07-28 Tobias Burnus + + * Make-lang.in: Remove -Wno-* from fortran-warn. + +2008-07-28 Richard Guenther + + Merge from gimple-tuples-branch. + + 2008-07-18 Aldy Hernandez + + * trans-expr.c: Include gimple.h instead of tree-gimple.h. + * trans-array.c: Same. + * trans-openmp.c: Same. + * trans-stmt.c: Same. + * f95-lang.c: Same. + * trans-io.c: Same. + * trans-decl.c: Same. + * trans-intrinsic.c: Same. + * trans.c: Same. Include tree-iterator.h. + * Make-lang.in (trans.o): Depend on tree-iterator.h + + 2008-07-14 Aldy Hernandez + + * trans-array.h (gfc_conv_descriptor_data_set_internal): + Rename to gfc_conv_descriptor_data_set. + (gfc_conv_descriptor_data_set_tuples): Remove. + * trans-array.c (gfc_conv_descriptor_data_get): Rename + from gfc_conv_descriptor_data_set_internal. + Remove last argument to gfc_add_modify. + (gfc_trans_allocate_array_storage): Rename gfc_add_modify_expr to + gfc_add_modify. + (gfc_trans_create_temp_array): Same. + (gfc_conv_array_transpose): Same. + (gfc_grow_array): Same. + (gfc_put_offset_into_var): Same. + (gfc_trans_array_ctor_element): Same. + (gfc_trans_array_constructor_subarray): Same. + (gfc_trans_array_constructor_value): Same. + (gfc_trans_scalarized_loop_end): Same. + (gfc_array_init_size): Same. + (gfc_array_allocate): Same. + (gfc_trans_array_bounds): Same. + (gfc_trans_auto_array_allocation): Same. + (gfc_trans_g77_array): Same. + (gfc_trans_dummy_array_bias): Same. + (gfc_conv_expr_descriptor): Same. + (structure_alloc_comps): Same. + * trans-expr.c: Same. + * trans-openmp.c (gfc_omp_clause_default_ctor): Same. + Rename gfc_conv_descriptor_data_set_tuples to + gfc_conv_descriptor_data_set. + (gfc_omp_clause_copy_ctor): Change build_gimple_modify_stmt to + build2_v. + (gfc_omp_clause_assign_op): Same. + (gfc_trans_omp_array_reduction): Rename gfc_add_modify_expr to + gfc_add_modify. + (gfc_trans_omp_atomic): Same. + (gfc_trans_omp_do): Same. Change GIMPLE_MODIFY_STMT to MODIFY_EXPR. + Rename gfc_add_modify_stmt to gfc_add_modify. + * trans-stmt.c: Rename gfc_add_modify_expr to + gfc_add_modify. + * trans.c: Rename gfc_add_modify_expr to + gfc_add_modify. + (gfc_add_modify): Remove last argument. + Rename GIMPLE_MODIFY_STMT to MODIFY_EXPR. + * trans.h: Remove gfc_add_modify_expr, gfc_add_modify_stmt. + Add prototype for gfc_add_modify. + * f95-lang.c (union lang_tree_node): Rename GENERIC_NEXT to TREE_CHAIN. + * trans-decl.c: Rename gfc_add_modify_stmt to gfc_add_modify. + * trans-io.c: Same. + * trans-intrinsic.c: Same. + + 2008-02-25 Aldy Hernandez + + * Make-lang.in (fortran-warn): Add -Wno-format. + + 2008-02-19 Diego Novillo + + http://gcc.gnu.org/ml/gcc-patches/2008-02/msg00804.html + + * fortran/Make-lang.in (fortran-warn): Remove. + + 2007-11-22 Aldy Hernandez + + * trans-expr.c (gfc_trans_string_copy): Use "void *" when building a + memset. + + 2007-11-10 Aldy Hernandez + + * Make-lang.in (fortran-warn): Set to -Wno-format. + * trans.c (gfc_trans_code): Update comment to say GENERIC. + Call tree_annotate_all_with_locus instead of annotate_all_with_locus. + +2008-07-27 Tobias Burnus + + PR fortran/36132 + PR fortran/29952 + PR fortran/36909 + * trans.c (gfc_trans_runtime_check): Allow run-time warning besides + run-time error. + * trans.h (gfc_trans_runtime_check): Update declaration. + * trans-array.c (gfc_trans_array_ctor_element,gfc_trans_array_bound_check, + gfc_conv_array_ref,gfc_conv_ss_startstride,gfc_trans_dummy_array_bias): + Updated gfc_trans_runtime_check calls. + (gfc_conv_array_parameter): Implement flag_check_array_temporaries, + fix packing/unpacking for nonpresent optional actuals to optional + formals. + * trans-array.h (gfc_conv_array_parameter): Update declaration. + * trans-expr.c (gfc_conv_substring,gfc_trans_arrayfunc_assign, + gfc_conv_function_call): Updated gfc_trans_runtime_check calls. + (gfc_conv_function_call): Update gfc_conv_array_parameter calls. + * trans-expr.c (gfc_trans_goto): Updated gfc_trans_runtime_check + calls. + * trans-io.c (set_string,gfc_conv_intrinsic_repeat): Ditto. + (gfc_conv_intrinsic_transfer,gfc_conv_intrinsic_loc): Same for + gfc_conv_array_parameter. + * trans-intrinsics.c (gfc_conv_intrinsic_bound): Ditto. + * trans-decl.c (gfc_build_builtin_function_decls): Add + gfor_fndecl_runtime_warning_at. + * lang.opt: New option fcheck-array-temporaries. + * gfortran.h (gfc_options): New flag_check_array_temporaries. + * options.c (gfc_init_options, gfc_handle_option): Handle flag. + * invoke.texi: New option fcheck-array-temporaries. + +2008-07-24 Jan Hubicka + + * fortran/options.c (gfc_post_options): Remove flag_unline_trees code. + +2008-07-24 Daniel Kraft + + PR fortran/33141 + * lang.opt (Wnonstd-intrinsics): Removed option. + (Wintrinsics-std), (Wintrinsic-shadow): New options. + * invoke.texi (Option Summary): Removed -Wnonstd-intrinsics + from the list and added -Wintrinsics-std and -Wintrinsic-shadow. + (Error and Warning Options): Documented the new options and removed + the documentation for -Wnonstd-intrinsics. + * gfortran.h (gfc_option_t): New members warn_intrinsic_shadow and + warn_intrinsics_std, removed warn_nonstd_intrinsics. + (gfc_is_intrinsic): Renamed from gfc_intrinsic_name. + (gfc_warn_intrinsic_shadow), (gfc_check_intrinsic_standard): New. + * decl.c (match_procedure_decl): Replaced gfc_intrinsic_name by + the new name gfc_is_intrinsic. + (warn_intrinsic_shadow): New helper method. + (gfc_match_function_decl), (gfc_match_subroutine): Call the new method + warn_intrinsic_shadow to check the just-parsed procedure. + * expr.c (check_init_expr): Call new gfc_is_intrinsic to check whether + the function called is really an intrinsic in the selected standard. + * intrinsic.c (gfc_is_intrinsic): Renamed from gfc_intrinsic_name and + extended to take into account the selected standard settings when trying + to find out whether a symbol is an intrinsic or not. + (gfc_check_intrinsic_standard): Made public and extended. + (gfc_intrinsic_func_interface), (gfc_intrinsic_sub_interface): Removed + the calls to check_intrinsic_standard, this check now happens inside + gfc_is_intrinsic. + (gfc_warn_intrinsic_shadow): New method defined. + * options.c (gfc_init_options): Initialize new warning flags to false + and removed intialization of Wnonstd-intrinsics flag. + (gfc_post_options): Removed logic for Wnonstd-intrinsics flag. + (set_Wall): Set new warning flags and removed Wnonstd-intrinsics flag. + (gfc_handle_option): Handle the new flags and removed handling of the + old Wnonstd-intrinsics flag. + * primary.c (gfc_match_rvalue): Replaced call to gfc_intrinsic_name by + the new name gfc_is_intrinsic. + * resolve.c (resolve_actual_arglist): Ditto. + (resolve_generic_f), (resolve_unknown_f): Ditto. + (is_external_proc): Ditto. + (resolve_generic_s), (resolve_unknown_s): Ditto. + (resolve_symbol): Ditto and ensure for symbols declared INTRINSIC that + they are really available in the selected standard setting. + +2008-07-24 Daniel Kraft + + * match.c (gfc_match): Add assertion to catch wrong calls trying to + match upper-case characters. + +2008-07-24 Thomas Koenig + + PR fortran/29952 + * gfortran.h: Add "warn_array_temp" to gfc_option_t. + * lang.opt: Add -Warray-temporaries. + * invoke.texi: Document -Warray-temporaries + * trans-array.h (gfc_trans_create_temp_array): Add argument of + type *locus. + (gfc_conv_loop_setup): Likewise. + * trans-array.c (gfc_trans_create_temp_array): If + -Warray-temporaries is given and locus is present, warn about + creation of array temporaries. + (gfc_trans_array_constructor_subarray): Add locus to call + of gfc_conv_loop_setup. + (gfc_trans_array_constructor): Add where argument. Pass where + argument to call of gfc_trans_create_temp_array. + (gfc_add_loop_ss_code): Add where argument. Pass where argument + to recursive call of gfc_add_loop_ss_code and to call of + gfc_trans_array_constructor. + (gfc_conv_loop_setup): Add where argument. Pass where argument + to calls to gfc_add_loop_ss_code and to gfc_trans_create_temp_array. + (gfc_conv_expr_descriptor): Pass location to call of + gfc_conv_loop_setup. + (gfc_conv_array_parameter): If -Warray-temporaries is given, + warn about creation of temporary arrays. + * trans-expr.c (gfc_conv_subref_array_arg): Add where argument + to call to gfc_conv_loop_setup. + (gfc_conv_function_call): Add where argument to call to + gfc_trans_creat_temp_array. + (gfc_trans_subarray_assign): Likewise. + (gfc_trans_assignment_1): Add where argument to call to + gfc_conv_loop_setup. + * trans-stmt.c (gfc_conv_elemental_dependencies): Add where + argument to call to gfc_trans_create_temp_array. + (gfc_trans_call): Add where argument to call to gfc_conv_loop_setup. + (generate_loop_for_temp_to_lhs): Likewise. + (generate_loop_for_rhs_to_temp): Likewise. + (compute_inner_temp_size): Likewise. + (gfc_trans-pointer_assign_need_temp): Likewise. + (gfc_evaluate_where_mask): Likewise. + (gfc_trans_where_assign): Likewise. + (gfc_trans_where_3): Likewise. + * trans-io.c (transfer_srray_component): Add where argument + to function. Add where argument to call to gfc_conv_loop_setup. + (transfer_expr): Add where argument to call to + transfer_array_component. + (gfc_trans_transfer): Add where expression to call to + gfc_conv_loop_setup. + * trans-intrinsic.c (gfc_conv_intrinsic_anyall): Add + where argument to call to gfc_conv_loop_setup. + (gfc_conv_intrinsic_count): Likewise. + (gfc_conv_intrinsic_arith): Likewise. + (gfc_conv_intrinsic_dot_product): Likewise. + (gfc_conv_intrinsic_minmaxloc): Likewise. + (gfc_conv_intrinsic_minmaxval): Likewise. + (gfc_conv_intrinsic_array_transfer): Warn about + creation of temporary array. + Add where argument to call to gfc_trans_create_temp_array. + * options.c (gfc_init_options): Initialize gfc_option.warn_array_temp. + (gfc_handle_option): Set gfc_option.warn_array_temp. + +2008-07-23 Manuel Lopez-Ibanez + + PR 35058 + * f95-lang.c (gfc_mark_addressable): All calls to pedwarn changed. + +2008-07-22 Daniel Kraft + + PR fortran/29835 + * io.c (error_element), (format_locus): New static globals. + (unexpected_element): Spelled out this message fully. + (next_char): Keep track of locus when not MODE_STRING. + (next_char_not_space): Remember last parsed element in error_element. + (format_lex): Fix two indentation errors. + (check_format): Use format_locus and possibly error_element for a + slightly better error message on invalid format. + (check_format_string): Set format_locus to start of the string + expression used as format. + +2008-07-21 Ralf Wildenhues + + * expr.c (gfc_check_pointer_assign): Fix typo in string. + * io.c (check_format): Fix typo in string. Fix comment typos. + * parse.c (gfc_global_used): Likewise. + * resolve.c (resolve_allocate_expr): Likewise. + * symbol.c (gfc_set_default_type): Likewise. + * arith.c: Fix typos in comments. + * array.c: Likewise. + * data.c: Likewise. + * decl.c: Likewise. + * dependency.c: Likewise. + * f95-lang.c: Likewise. + * gfortran.h: Likewise. + * matchexp.c: Likewise. + * module.c: Likewise. + * primary.c: Likewise. + * scanner.c: Likewise. + * trans-array.c: Likewise. + * trans-common.c: Likewise. + * trans-decl.c: Likewise. + * trans-expr.c: Likewise. + * trans-intrinsic.c: Likewise. + * trans-types.c: Likewise. + * trans.c: Likewise. + * trans.h: Likewise. + +2008-07-19 Tobias Burnus + + PR fortran/36795 + * matchexp.c (gfc_get_parentheses): Remove obsolete workaround, + which caused the generation of wrong code. + +2008-07-19 Tobias Burnus + + PR fortran/36342 + * scanner.c (load_file): Add argument to destinguish between + true filename and displayed filename. + (include_line,gfc_new_file): Adapt accordingly. + +2008-07-19 Tobias Burnus + + * check.c (gfc_check_cshift,gfc_check_eoshift,gfc_check_unpack): Add rank + checks for cshift's shift and eoshift's shift and boundary args. + (gfc_check_unpack): Add rank and shape tests for unpack. + +2008-07-19 Kaveh R. Ghazi + + * gfortran.h (new): Remove macro. + * array.c (gfc_append_constructor, match_array_list, + gfc_match_array_constructor): Likewise. + * bbt.c (insert, gfc_insert_bbt): Likewise. + * decl.c (var_element, top_var_list, top_val_list, gfc_match_data, + get_proc_name): Likewise. + * expr.c (gfc_copy_actual_arglist): Likewise. + * interface.c (compare_actual_formal, check_new_interface, + gfc_add_interface): Likewise. + * intrinsic.c gfc_convert_type_warn, gfc_convert_chartype): + Likewise. + * io.c (match_io_iterator, match_io_list): Likewise. + * match.c (match_forall_header): Likewise. + * matchexp.c (build_node): Likewise. + * module.c (gfc_match_use): Likewise. + * scanner.c (load_file): Likewise. + * st.c (gfc_append_code): Likewise. + * symbol.c (save_symbol_data, gfc_get_sym_tree, gfc_undo_symbols, + gfc_commit_symbols): Likewise. + * trans-common.c (build_field): Likewise. + * trans-decl.c (gfc_finish_var_decl): Likewise. + * trans-expr.c (gfc_free_interface_mapping, + gfc_get_interface_mapping_charlen, gfc_add_interface_mapping, + gfc_finish_interface_mapping, + gfc_apply_interface_mapping_to_expr): Likewise. + * trans.h (gfc_interface_sym_mapping): Likewise. + +2008-07-19 Kaveh R. Ghazi + + * gfortran.h (operator): Remove macro. + (gfc_namespace, gfc_expr): Avoid C++ keywords. + * arith.c (eval_intrinsic, eval_intrinsic_f2, eval_intrinsic_f3): + Likewise. + * decl.c (access_attr_decl): Likewise. + * dependency.c (gfc_dep_compare_expr): Likewise. + * dump-parse-tree.c (show_expr, show_uop, show_namespace): + Likewise. + * expr.c (gfc_copy_expr, gfc_type_convert_binary, + simplify_intrinsic_op, check_intrinsic_op): Likewise. + * interface.c (fold_unary, gfc_match_generic_spec, + gfc_match_interface, gfc_match_end_interface, + check_operator_interface, check_uop_interfaces, + gfc_check_interfaces, gfc_extend_expr, gfc_extend_assign, + gfc_add_interface, gfc_current_interface_head, + gfc_set_current_interface_head): Likewise. + * iresolve.c (gfc_resolve_dot_product, gfc_resolve_matmul): + Likewise. + * matchexp.c (gfc_get_parentheses, build_node): Likewise. + * module.c (gfc_use_rename, gfc_match_use, find_use_name_n, + number_use_names, mio_expr, load_operator_interfaces, read_module, + write_operator, write_module): Likewise. + * openmp.c (resolve_omp_atomic): Likewise. + * resolve.c (resolve_operator, gfc_resolve_character_operator, + gfc_resolve_uops): Likewise. + * symbol.c (free_uop_tree, gfc_free_namespace): Likewise. + * trans-expr.c (gfc_conv_expr_op): Likewise. + * trans-openmp.c (gfc_trans_omp_atomic): Likewise. + +2008-07-19 Kaveh R. Ghazi + + * gfortran.h (protected): Remove macro. + * dump-parse-tree.c (show_attr): Avoid C++ keywords. + * expr.c (gfc_check_pointer_assign): Likewise. + * interface.c (compare_parameter_protected): Likewise. + * intrinsic.c (enum class, add_sym, add_sym_0, add_sym_1, + add_sym_1s, add_sym_1m, add_sym_2, add_sym_2s, add_sym_3, + add_sym_3ml, add_sym_3red, add_sym_3s, add_sym_4, add_sym_4s, + add_sym_5s): Likewise. + * match.c (gfc_match_assignment, gfc_match_pointer_assignment): + Likewise. + * module.c (mio_symbol_attribute): Likewise. + * primary.c (match_variable): Likewise. + * resolve.c (resolve_equivalence): Likewise. + * symbol.c (check_conflict, gfc_add_protected, gfc_copy_attr): + Likewise. + * trans-types.c (gfc_get_array_type_bounds): Likewise. + +2008-07-18 Kaveh R. Ghazi + + * arith.c (eval_type_intrinsic0): Avoid C++ keywords. + * gfortran.h (try, protected, operator, new): Likewise. + +2008-07-17 Tobias Burnus + + PR fortran/36825 + PR fortran/36824 + * array.c (gfc_match_array_spec): Fix array-rank check. + * resolve.c (resolve_fl_derived): Fix constentness check + for the array dimensions. + +2008-07-14 Ralf Wildenhues + + * Make-lang.in (gfortranspec.o): Fix dependencies. + +2008-07-13 Jerry DeLisle + + PR fortran/36725 + * io.c: Add error check for g0 edit descriptor followed by '.'. + +2008-07-12 Daniel Kraft + + * resolve.c (resolve_fl_derived): Allow pointer components to empty + derived types fixing a missing part of PR fortran/33221. + +2008-07-10 Daniel Kraft + + * gfc-internals.texi (section gfc_expr): Created documentation about + the gfc_expr internal data structure. + +2008-07-07 Thomas Koenig + + PR fortran/36670 + * iresolve.c (gfc_resolve_product): Set shape of return + value from array. + (gfc_resolve_sum): Likewise. + +2008-07-07 Jakub Jelinek + + PR middle-end/36726 + * f95-lang.c (poplevel): Don't ever add subblocks to + global_binding_level. + +2008-07-02 Janus Weil + Tobias Burnus + Paul Thomas + + PR fortran/32580 + * gfortran.h (struct gfc_symbol): New member "proc_pointer". + * check.c (gfc_check_associated,gfc_check_null): Implement + procedure pointers. + * decl.c (match_procedure_decl): Ditto. + * expr.c (gfc_check_pointer_assign,gfc_check_assign_symbol): Ditto. + * interface.c (compare_actual_formal): Ditto. + * match.h: Ditto. + * match.c (gfc_match_pointer_assignment): Ditto. + * parse.c (parse_interface): Ditto. + * primary.c (gfc_match_rvalue,match_variable): Ditto. + * resolve.c (resolve_fl_procedure): Ditto. + * symbol.c (check_conflict,gfc_add_external,gfc_add_pointer, + gfc_copy_attr,gen_fptr_param,build_formal_args): Ditto. + * trans-decl.c (get_proc_pointer_decl,gfc_get_extern_function_decl, + create_function_arglist): Ditto. + * trans-expr.c (gfc_conv_variable,gfc_conv_function_val, + gfc_conv_function_call,gfc_trans_pointer_assignment): Ditto. + +2008-07-02 Thomas Koenig + + PR fortran/36590 + PR fortran/36681 + * iresolve.c (resolve_mask_arg): Don't convert mask to + kind=1 logical if it is of that type already. + +2008-06-29 Thomas Koenig + + PR fortran/36341 + * iresolve.c (gfc_resolve_matmul): Copy shapes + from arguments. + +2008-06-29 Jerry DeLisle + + * invoke.texi: Add documentation for runtime behavior of + -fno-range-check. + +2008-06-28 Daniel Kraft + + * gfc-internals.texi (section gfc_code): Extended documentation about + gfc_code in the internal datastructures chapter including details about + how IF, DO and SELECT blocks look like and an example for how the + block-chaining works. + +2008-06-25 Paul Thomas + + PR fortran/36526 + * interface.c (check_intents): Correct error where the actual + arg was checked for a pointer argument, rather than the formal. + +2008-06-24 Paul Thomas + + PR fortran/34371 + * expr.c (gfc_check_assign): Change message and locus for + error when conform == 0. + +2008-06-23 Jakub Jelinek + + PR fortran/36597 + * cpp.c (cpp_define_builtins): Change _OPENMP value to 200805. + +2008-06-20 Laurynas Biveinis + Tobias Burnus + + PR fortran/34908 + PR fortran/36276 + * scanner.c (preprocessor_line): do not call gfc_free for + current_file->filename if it differs from filename. + +2008-06-20 Kaveh R. Ghazi + + * arith.c (hollerith2representation): Fix for -Wc++-compat. + * array.c (gfc_get_constructor): Likewise. + * decl.c (gfc_get_data_variable, gfc_get_data_value, gfc_get_data, + create_enum_history, gfc_match_final_decl): Likewise. + * error.c (error_char): Likewise. + * expr.c (gfc_get_expr, gfc_copy_expr): Likewise. + * gfortran.h (gfc_get_charlen, gfc_get_array_spec, + gfc_get_component, gfc_get_formal_arglist, gfc_get_actual_arglist, + gfc_get_namelist, gfc_get_omp_clauses, gfc_get_interface, + gfc_get_common_head, gfc_get_dt_list, gfc_get_array_ref, + gfc_get_ref, gfc_get_equiv, gfc_get_case, gfc_get_iterator, + gfc_get_alloc, gfc_get_wide_string): Likewise. + * interface.c (count_types_test): Likewise. + * intrinsic.c (add_char_conversions, gfc_intrinsic_init_1): + Likewise. + * io.c (gfc_match_open, gfc_match_close, match_filepos, match_io, + gfc_match_inquire, gfc_match_wait): Likewise. + * match.c (gfc_match, match_forall_iterator): Likewise. + * module.c (gfc_get_pointer_info, gfc_get_use_rename, add_fixup, + add_true_name, parse_string, write_atom, quote_string, + mio_symtree_ref, mio_gmp_real, write_common_0): Likewise. + * options.c (gfc_post_options): Likewise. + * primary.c (match_integer_constant, match_hollerith_constant, + match_boz_constant, match_real_constant, + gfc_get_structure_ctor_component, gfc_match_structure_constructor): Likewise. + * scanner.c (gfc_widechar_to_char, add_path_to_list, + add_file_change, load_line, get_file, preprocessor_line, + load_file, unescape_filename, gfc_read_orig_filename): Likewise. + * simplify.c (gfc_simplify_ibits, gfc_simplify_ishft, + gfc_simplify_ishftc): Likewise. + * symbol.c (gfc_get_st_label, gfc_get_namespace, gfc_new_symtree, + gfc_get_uop, gfc_new_symbol, save_symbol_data, gfc_get_gsymbol): + Likewise. + * target-memory.c (gfc_target_interpret_expr): Likewise. + * trans-const.c (gfc_build_wide_string_const): Likewise. + * trans-expr.c (gfc_add_interface_mapping): Likewise. + * trans-intrinsic.c (gfc_conv_intrinsic_conversion, + gfc_conv_intrinsic_int, gfc_conv_intrinsic_lib_function, + gfc_conv_intrinsic_cmplx, gfc_conv_intrinsic_ctime, + gfc_conv_intrinsic_fdate, gfc_conv_intrinsic_ttynam, + gfc_conv_intrinsic_minmax, gfc_conv_intrinsic_minmax_char, + gfc_conv_intrinsic_ishftc, gfc_conv_intrinsic_index_scan_verify, + gfc_conv_intrinsic_merge, gfc_conv_intrinsic_trim): Likewise. + * trans.c (gfc_get_backend_locus): Likewise. + * trans.h (gfc_get_ss): Likewise. + +2008-06-18 Daniel Kraft + + PR fortran/36517, fortran/36492 + * array.c (gfc_resolve_character_array_constructor): Call + gfc_set_constant_character_len with changed length-chec argument. + * decl.c (gfc_set_constant_character_len): Changed array argument to + be a generic length-checking argument that can be used for correct + checking with typespec and in special cases where the should-be length + is different from the target length. + (build_struct): Call gfc_set_constant_character_len with changed length + checking argument and introduced additional checks for exceptional + conditions on invalid code. + (add_init_expr_to_sym), (do_parm): Call gfc_set_constant_character_len + with changed argument. + * match.h (gfc_set_constant_character_len): Changed third argument to + int for the should-be length rather than bool. + +2008-06-17 Daniel Kraft + + PR fortran/36112 + * array.c (gfc_resolve_character_array_constructor): Check that all + elements with constant character length have the same one rather than + fixing it if no typespec is given, emit an error if they don't. Changed + return type to "try" and return FAILURE for the case above. + (gfc_resolve_array_constructor): Removed unneeded call to + gfc_resolve_character_array_constructor in this function. + * gfortran.h (gfc_resolve_character_array_constructor): Returns try. + * trans-array.c (get_array_ctor_strlen): Return length of first element + rather than last element. + * resolve.c (gfc_resolve_expr): Handle FAILURE return from + gfc_resolve_character_array_constructor. + +2008-06-17 Paul Thomas + + PR fortran/34396 + * resolve.c (add_dt_to_dt_list): New function. + (resolve_fl_derived): Call new function for pointer components + and when derived type resolved. + +2008-06-15 Jerry DeLisle + + PR fortran/36515 + * trans-decl.c (gfc_generate_function_code): Add range_check to options + array. + +2008-06-15 Ralf Wildenhues + + * gfc-internals.texi: Expand TABs, drop indentation outside examples. + * gfortran.texi: Likewise. + * intrinsic.texi: Likewise. + * invoke.texi: Likewise. + +2008-06-13 Jerry DeLisle + + PR fortran/35863 + * trans-io.c (gfc_build_io_library_fndecls): Build declaration for + transfer_character_wide which includes passing in the character kind to + support wide character IO. (transfer_expr): If the kind == 4, create the + argument and build the call. + * gfortran.texi: Fix typo. + +2008-06-13 Tobias Burnus + + PR fortran/36476 + * decl.c (do_parm): Handle init expression for len=*. + +2008-06-12 Tobias Burnus + + PR fortran/36462 + * trans-intrinsic.c (gfc_conv_intrinsic_index_scan_verify): + Fix passing of the BACK= argument. + +2008-06-10 Jerry DeLisle + + * cpp.c: Add copyright notice. + * cpp.h: Add copyright notice. + +2008-06-08 Janus Weil + + PR fortran/36459 + * decl.c (match_procedure_decl): Correctly recognize if the interface + is an intrinsic procedure. + +2008-06-08 Tobias Burnus + + PR fortran/35830 + * resolve.c (resolve_symbol): Copy more attributes for + PROCEDUREs with interfaces. + +2008-06-07 Jerry DeLisle + + PR fortran/36420 + PR fortran/36422 + * io.c (check_format): Add new error message for zero width. + Use new error message for FMT_A and with READ, FMT_G. Allow + FMT_G with WRITE except when -std=F95 and -std=F2003. + +2008-06-07 Tobias Burnus + + PR fortran/36437 + * intrinsic.c (add_functions): Implement c_sizeof. + * trans-intrinsic.c (gfc_conv_intrinsic_sizeof): Do not + create unneeded variable in the scalar case. + * intrinsic.texi: Add C_SIZEOF documentation. + +2008-06-06 Tobias Burnus + + * intrinsic.texi (BESSEL_J1): Fix BES(S)EL_J1 typo. + +2008-06-06 Jakub Jelinek + + * scanner.c (skip_free_comments, skip_fixed_comments): Handle tabs. + * parse.c (next_free): Allow tab after !$omp. + (decode_omp_directive): Handle !$omp task, !$omp taskwait + and !$omp end task. + (case_executable): Add ST_OMP_TASKWAIT. + (case_exec_markers): Add ST_OMP_TASK. + (gfc_ascii_statement): Handle ST_OMP_TASK, ST_OMP_END_TASK and + ST_OMP_TASKWAIT. + (parse_omp_structured_block, parse_executable): Handle ST_OMP_TASK. + * gfortran.h (gfc_find_sym_in_expr): New prototype. + (gfc_statement): Add ST_OMP_TASK, ST_OMP_END_TASK and ST_OMP_TASKWAIT. + (gfc_omp_clauses): Add OMP_SCHED_AUTO to sched_kind, + OMP_DEFAULT_FIRSTPRIVATE to default_sharing. Add collapse and + untied fields. + (gfc_exec_op): Add EXEC_OMP_TASK and EXEC_OMP_TASKWAIT. + * f95-lang.c (LANG_HOOKS_OMP_CLAUSE_COPY_CTOR, + LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP, LANG_HOOKS_OMP_CLAUSE_DTOR, + LANG_HOOKS_OMP_PRIVATE_OUTER_REF): Define. + * trans.h (gfc_omp_clause_default_ctor): Add another argument. + (gfc_omp_clause_copy_ctor, gfc_omp_clause_assign_op, + gfc_omp_clause_dtor, gfc_omp_private_outer_ref): New prototypes. + * types.def (BT_ULONGLONG, BT_PTR_ULONGLONG, + BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, + BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR, + BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR, + BT_FN_VOID_PTR_PTR, BT_PTR_FN_VOID_PTR_PTR, + BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT): New. + (BT_BOOL): Use integer type with BOOL_TYPE_SIZE rather + than boolean_type_node. + * dump-parse-tree.c (gfc_show_omp_node): Handle EXEC_OMP_TASK, + EXEC_OMP_TASKWAIT, OMP_SCHED_AUTO, OMP_DEFAULT_FIRSTPRIVATE, + untied and collapse clauses. + (gfc_show_code_node): Handle EXEC_OMP_TASK and EXEC_OMP_TASKWAIT. + * trans.c (gfc_trans_code): Handle EXEC_OMP_TASK and + EXEC_OMP_TASKWAIT. + * st.c (gfc_free_statement): Likewise. + * resolve.c (gfc_resolve_blocks, resolve_code): Likewise. + (find_sym_in_expr): Rename to... + (gfc_find_sym_in_expr): ... this. No longer static. + (resolve_allocate_expr, resolve_ordinary_assign): Adjust caller. + * match.h (gfc_match_omp_task, gfc_match_omp_taskwait): New + prototypes. + * openmp.c (resolve_omp_clauses): Allow allocatable arrays in + firstprivate, lastprivate, reduction, copyprivate and copyin + clauses. + (omp_current_do_code): Made static. + (omp_current_do_collapse): New variable. + (gfc_resolve_omp_do_blocks): Compute omp_current_do_collapse, + clear omp_current_do_code and omp_current_do_collapse on return. + (gfc_resolve_do_iterator): Handle collapsed do loops. + (resolve_omp_do): Likewise, diagnose errorneous collapsed do loops. + (OMP_CLAUSE_COLLAPSE, OMP_CLAUSE_UNTIED): Define. + (gfc_match_omp_clauses): Handle default (firstprivate), + schedule (auto), untied and collapse (n) clauses. + (OMP_DO_CLAUSES): Add OMP_CLAUSE_COLLAPSE. + (OMP_TASK_CLAUSES): Define. + (gfc_match_omp_task, gfc_match_omp_taskwait): New functions. + * trans-openmp.c (gfc_omp_private_outer_ref): New function. + (gfc_omp_clause_default_ctor): Add outer argument. For allocatable + arrays allocate them with the bounds of the outer var if outer + var is allocated. + (gfc_omp_clause_copy_ctor, gfc_omp_clause_assign_op, + gfc_omp_clause_dtor): New functions. + (gfc_trans_omp_array_reduction): If decl is allocatable array, + allocate it with outer var's bounds in OMP_CLAUSE_REDUCTION_INIT + and deallocate it in OMP_CLAUSE_REDUCTION_MERGE. + (gfc_omp_predetermined_sharing): Return OMP_CLAUSE_DEFAULT_SHARED + for assumed-size arrays. + (gfc_trans_omp_do): Add par_clauses argument. If dovar is + present in lastprivate clause and do loop isn't simple, + set OMP_CLAUSE_LASTPRIVATE_STMT. If dovar is present in + parallel's lastprivate clause, change it to shared and add + lastprivate clause to OMP_FOR_CLAUSES. Handle collapsed do loops. + (gfc_trans_omp_directive): Adjust gfc_trans_omp_do callers. + (gfc_trans_omp_parallel_do): Likewise. Move collapse clause to + OMP_FOR from OMP_PARALLEL. + (gfc_trans_omp_clauses): Handle OMP_SCHED_AUTO, + OMP_DEFAULT_FIRSTPRIVATE, untied and collapse clauses. + (gfc_trans_omp_task, gfc_trans_omp_taskwait): New functions. + (gfc_trans_omp_directive): Handle EXEC_OMP_TASK and + EXEC_OMP_TASKWAIT. + +2008-06-04 Janus Weil + + PR fortran/36322 + PR fortran/36275 + * resolve.c (resolve_symbol): Correctly copy the interface for a + PROCEDURE declaration. + +2008-06-02 Janus Weil + + PR fortran/36361 + * symbol.c (gfc_add_allocatable,gfc_add_dimension, + gfc_add_explicit_interface): Added checks. + * decl.c (attr_decl1): Added missing "var_locus". + * parse.c (parse_interface): Checking for errors. + +2008-06-02 Daniel Kraft + + * gfortran.h: New statement-type ST_FINAL for FINAL declarations. + (struct gfc_symbol): New member f2k_derived. + (struct gfc_namespace): New member finalizers, for use in the above + mentioned f2k_derived namespace. + (struct gfc_finalizer): New type defined for finalizers linked list. + * match.h (gfc_match_final_decl): New function header. + * decl.c (gfc_match_derived_decl): Create f2k_derived namespace on + constructed symbol node. + (gfc_match_final_decl): New function to match a FINAL declaration line. + * parse.c (decode_statement): match-call for keyword FINAL. + (parse_derived): Parse CONTAINS section and accept FINAL statements. + * resolve.c (gfc_resolve_finalizers): New function to resolve (that is + in this case, check) a list of finalizer procedures. + (resolve_fl_derived): Call gfc_resolve_finalizers here. + * symbol.c (gfc_get_namespace): Initialize new finalizers to NULL. + (gfc_free_namespace): Free finalizers list. + (gfc_new_symbol): Initialize new f2k_derived to NULL. + (gfc_free_symbol): Free f2k_derived namespace. + (gfc_free_finalizer): New function to free a single gfc_finalizer node. + (gfc_free_finalizer_list): New function to free a linked list of + gfc_finalizer nodes. + +2008-06-02 Daniel Franke + + PR fortran/36375 + PR fortran/36377 + * cpp.c (gfc_cpp_init): Do not initialize builtins if + processing already preprocessed input. + (gfc_cpp_preprocess): Finalize output with newline. + +2008-05-31 Jerry DeLisle + + * intrinsic.texi: Revert wrong commit. + +2008-05-31 Steven G. Kargl + + * arith.c (gfc_arith_init_1): Remove now unused r and c variables. + Cleanup numerical inquiry function initialization. + (gfc_arith_done_1): Replace multiple mpfr_clear() invocations with + a single mpfr_clears(). + (gfc_check_real_range): Re-arrange logic to eliminate multiple + unnecessary branching and assignments. + (gfc_arith_times): Use mpfr_clears() in preference to multiple + mpfr_clear(). + (gfc_arith_divide): Ditto. + (complex_reciprocal): Eliminate now unused variables a, re, im. + Cleanup the mpfr abuse. Use mpfr_clears() in preference to + multiple mpfr_clear(). + (complex_pow): Fix comment whitespace. Use mpfr_clears() in + preference to multiple mpfr_clear(). + * simplify.c (gfc_simplify_and): Remove blank line. + (gfc_simplify_atan2): Move error checking earlier to eliminate + a now unnecessay gfc_free_expr(). + (gfc_simplify_bessel_j0): Remove unnecessary gfc_set_model_kind(). + (gfc_simplify_bessel_j1): Ditto. + (gfc_simplify_bessel_jn): Ditto. + (gfc_simplify_bessel_y0): Ditto. + (gfc_simplify_bessel_y1): Ditto. + (gfc_simplify_bessel_yn): Ditto. + (only_convert_cmplx_boz): Eliminate unnecessary duplicate code, and + combine nested if statement rational expressions. + (gfc_simplify_cos): Use mpfr_clears() in preference to multiple + mpfr_clear(). + (gfc_simplify_exp): Ditto. + (gfc_simplify_fraction): Move gfc_set_model_kind() to after the + special case of 0. Use mpfr_clears() in preference to multiple + mpfr_clear(). + (gfc_simplify_gamma): Eliminate unnecessary gfc_set_model_kind(). + (gfc_simplify_lgamma): Ditto. + (gfc_simplify_log10): Ditto. + (gfc_simplify_log): Move gfc_set_model_kind () inside switch + statement. Use mpfr_clears() in preference to multiple mpfr_clear(). + (gfc_simplify_mod): Eliminate now unused variables quot, iquot, + and term. Simplify the mpfr magic. + (gfc_simplify_modulo): Ditto. + (gfc_simplify_nearest): Eliminate unnecessary gfc_set_model_kind(). + (gfc_simplify_scale): Use mpfr_clears() in preference to multiple + mpfr_clear(). + (gfc_simplify_sin): Ditto + (gfc_simplify_sqrt): Ditto + (gfc_simplify_set_exponent): Move gfc_set_model_kind() to after the + special case of 0. Use mpfr_clears() in preference to multiple + mpfr_clear(). + +2008-05-29 Daniel Franke + + PR target/36348 + * Make-lang.in (F95_OBJS): Added dependency on FORTRAN_TARGET_OBJS. + +2008-05-29 Francois-Xavier Coudert + + * scanner.c (load_line): Add first_char argument. Don't call ungetc. + (gfc_read_orig_filename): Adjust call to load_line. Don't call + ungetc. + (load_file): Adjust call to load_line. + +2008-05-28 Janus Weil + + PR fortran/36325 + PR fortran/35830 + * interface.c (gfc_procedure_use): Enable argument checking for + external procedures with explicit interface. + * symbol.c (check_conflict): Fix conflict checking for externals. + (copy_formal_args): Fix handling of arrays. + * resolve.c (resolve_specific_f0, resolve_specific_s0): Fix handling + of intrinsics. + * parse.c (parse_interface): Non-abstract INTERFACE statement implies + EXTERNAL attribute. + +2008-05-28 Francois-Xavier Coudert + + PR fortran/36319 + * intrinsic.c (gfc_convert_chartype): Don't mark conversion + function as pure. + * trans-array.c (gfc_trans_array_ctor_element): Divide element + size by the size of one character to obtain length. + * iresolve.c (gfc_resolve_cshift): Call the _char4 variant when + appropriate. + (gfc_resolve_eoshift): Likewise. + * trans-intrinsic.c (gfc_conv_intrinsic_ctime): Minor beautification. + (gfc_conv_intrinsic_fdate): Minor beautification. + (gfc_conv_intrinsic_ttynam): Minor beautification. + (gfc_conv_intrinsic_minmax_char): Allow all character kinds. + (size_of_string_in_bytes): New function. + (gfc_conv_intrinsic_size): Call size_of_string_in_bytes for + character expressions. + (gfc_conv_intrinsic_sizeof): Likewise. + (gfc_conv_intrinsic_array_transfer): Likewise. + (gfc_conv_intrinsic_trim): Allow all character kinds. Minor + beautification. + (gfc_conv_intrinsic_repeat): Fix comment typo. + * simplify.c (gfc_convert_char_constant): Take care of conversion + of array constructors. + +2008-05-27 Tobias Burnus + + PR fortran/36316 + * trans-array.c (gfc_set_loop_bounds_from_array_spec): + Add missing fold_convert. + +2008-05-26 Daniel Franke + + * fortran/cpp.c (cpp_define_builtins): Remove usage of TARGET_* macros, + added FIXME instead. + +2008-05-26 Daniel Franke + + PR fortran/18428 + * lang.opt (A, C, CC, D, E, H, P, U, cpp, d, fworking-directory, + imultilib, iprefix, iquote, isysroot, isystem, nocpp, nostdinc, + o, undef, v): New options. + * options.c (gfc_init_options): Also initialize preprocessor + options. + (gfc_post_options): Also handle post-initialization of preprocessor + options. + (gfc_handle_option): Check if option is a preprocessor option. + If yes, let gfc_cpp_handle_option() handle the option. + * lang-specs.h: Reorganized to handle new options. + * scanner.c (gfc_new_file): Read temporary file instead of + input source if preprocessing is enabled. + * f95-lang.c (gfc_init): Initialize preprocessor. + (gfc_finish): Clean up preprocessor. + * cpp.c: New. + * cpp.h: New. + * Make-lang.in: Added new objects and dependencies. + * gfortran.texi: Updated section "Preprocessing and + conditional compilation". + * invoke.texi: Added new section "Preprocessing Options", + listed and documented the preprocessing options handled + by gfortran. + +2008-05-25 Tobias Burnus + + PR fortran/32600 + * trans-expr.c (gfc_conv_function_call): Remove library + call for c_f_pointer with scalar Fortran pointers and for + c_f_procpointer. + +2008-05-21 Francois-Xavier Coudert + + PR fortran/36257 + * iresolve.c (check_charlen_present): Don't force the rank to 1. + +2008-05-19 Francois-Xavier Coudert + + PR fortran/36265 + * trans-expr.c (gfc_conv_string_tmp): Pick the correct type for + the temporary variable. + +2008-05-19 Francois-Xavier Coudert + + * simplify.c (gfc_simplify_dble, gfc_simplify_real): Initialize + result variable to avoid warnings. + +2008-05-18 Francois-Xavier Coudert + + * intrinsic.c (char_conversions, ncharconv): New static variables. + (find_char_conv): New function. + (add_functions): Add simplification functions for ADJUSTL and + ADJUSTR. Don't check the kind of their argument. Add checking for + LGE, LLE, LGT and LLT. + (add_subroutines): Fix argument type for SLEEP. Fix argument name + for SYSTEM. + (add_char_conversions): New function. + (gfc_intrinsic_init_1): Call add_char_conversions. + (gfc_intrinsic_done_1): Free char_conversions. + (check_arglist): Use kind == 0 as a signal that we don't want + the kind value to be checked. + (do_simplify): Also simplify character functions. + (gfc_convert_chartype): New function + * trans-array.c (gfc_trans_array_ctor_element): Don't force the + use of default character type. + (gfc_trans_array_constructor_value): Likewise. + (get_array_ctor_var_strlen): Use integer kind to build an integer + instead of a character kind! + (gfc_build_constant_array_constructor): Don't force the use of + default character type. + (gfc_conv_loop_setup): Likewise. + * trans-expr.c (gfc_conv_string_tmp): Don't force the use of + default character type. Allocate enough memory for wide strings. + (gfc_conv_concat_op): Make sure operand kind are the same. + (string_to_single_character): Remove gfc_ prefix. Reindent. + Don't force the use of default character type. + (gfc_conv_scalar_char_value): Likewise. + (gfc_build_compare_string): Call string_to_single_character. + (fill_with_spaces): New function + (gfc_trans_string_copy): Add kind arguments. Use them to deal + with wide character kinds. + (gfc_conv_statement_function): Whitespace fix. Call + gfc_trans_string_copy with new kind arguments. + (gfc_conv_substring_expr): Call gfc_build_wide_string_const + instead of using gfc_widechar_to_char. + (gfc_conv_string_parameter): Don't force the use of default + character type. + (gfc_trans_scalar_assign): Pass kind args to gfc_trans_string_copy. + * intrinsic.h (gfc_check_lge_lgt_lle_llt, gfc_convert_char_constant, + gfc_resolve_adjustl, gfc_resolve_adjustr): New prototypes. + * decl.c (gfc_set_constant_character_len): Don't assert the + existence of a single character kind. + * trans-array.h (gfc_trans_string_copy): New prototype. + * gfortran.h (gfc_check_character_range, gfc_convert_chartype): + New prototypes. + * error.c (print_wide_char_into_buffer): New function lifting + code from gfc_print_wide_char. Fix order to output '\x??' instead + of 'x\??'. + (gfc_print_wide_char): Call print_wide_char_into_buffer. + (show_locus): Call print_wide_char_into_buffer with buffer local + to this function. + * trans-const.c (gfc_build_wide_string_const): New function. + (gfc_conv_string_init): Deal with wide characters strings + constructors. + (gfc_conv_constant_to_tree): Call gfc_build_wide_string_const. + * trans-stmt.c (gfc_trans_label_assign): Likewise. + (gfc_trans_character_select): Deal with wide strings. + * expr.c (gfc_check_assign): Allow conversion between character + kinds on assignment. + * trans-const.h (gfc_build_wide_string_const): New prototype. + * trans-types.c (gfc_get_character_type_len_for_eltype, + gfc_get_character_type_len): Create too variants of the old + gfc_get_character_type_len, one getting kind argument and the + other one directly taking a type tree. + * trans.h (gfor_fndecl_select_string_char4, + gfor_fndecl_convert_char1_to_char4, + gfor_fndecl_convert_char4_to_char1): New prototypes. + * trans-types.h (gfc_get_character_type_len_for_eltype): New + prototype. + * resolve.c (resolve_operator): Exit early when kind mismatches + are detected, because that makes us issue an error message later. + (validate_case_label_expr): Fix wording of error message. + * iresolve.c (gfc_resolve_adjustl, gfc_resolve_adjustr): New + functions. + (gfc_resolve_pack): Call _char4 variants of library function + when dealing with wide characters. + (gfc_resolve_reshape): Likewise. + (gfc_resolve_spread): Likewise. + (gfc_resolve_transpose): Likewise. + (gfc_resolve_unpack): Likewise. + * target-memory.c (size_character): Take character kind bit size + correctly into account (not that it changes anything for now, but + it's more generic). + (gfc_encode_character): Added gfc_ prefix. Encoding each + character of a string by calling native_encode_expr for the + corresponding unsigned integer. + (gfc_target_encode_expr): Add gfc_ prefix to encode_character. + * trans-decl.c (gfc_build_intrinsic_function_decls): Build + gfor_fndecl_select_string_char4, gfor_fndecl_convert_char1_to_char4 + and gfor_fndecl_convert_char4_to_char1. + * target-memory.h (gfc_encode_character): New prototype. + * arith.c (gfc_check_character_range): New function. + (eval_intrinsic): Allow non-default character kinds. + * check.c (gfc_check_access_func): Only allow default + character kind arguments. + (gfc_check_chdir): Likewise. + (gfc_check_chdir_sub): Likewise. + (gfc_check_chmod): Likewise. + (gfc_check_chmod_sub): Likewise. + (gfc_check_lge_lgt_lle_llt): New function. + (gfc_check_link): Likewise. + (gfc_check_link_sub): Likewise. + (gfc_check_symlnk): Likewise. + (gfc_check_symlnk_sub): Likewise. + (gfc_check_rename): Likewise. + (gfc_check_rename_sub): Likewise. + (gfc_check_fgetputc_sub): Likewise. + (gfc_check_fgetput_sub): Likewise. + (gfc_check_stat): Likewise. + (gfc_check_stat_sub): Likewise. + (gfc_check_date_and_time): Likewise. + (gfc_check_ctime_sub): Likewise. + (gfc_check_fdate_sub): Likewise. + (gfc_check_gerror): Likewise. + (gfc_check_getcwd_sub): Likewise. + (gfc_check_getarg): Likewise. + (gfc_check_getlog): Likewise. + (gfc_check_hostnm): Likewise. + (gfc_check_hostnm_sub): Likewise. + (gfc_check_ttynam_sub): Likewise. + (gfc_check_perror): Likewise. + (gfc_check_unlink): Likewise. + (gfc_check_unlink_sub): Likewise. + (gfc_check_system_sub): Likewise. + * primary.c (got_delim): Perform correct character range checking + for all kinds. + * trans-intrinsic.c (gfc_conv_intrinsic_conversion): Generate + calls to library functions convert_char4_to_char1 and + convert_char1_to_char4 for character conversions. + (gfc_conv_intrinsic_char): Allow all character kings. + (gfc_conv_intrinsic_strcmp): Fix whitespace. + (gfc_conv_intrinsic_repeat): Take care of all character kinds. + * intrinsic.texi: For all GNU intrinsics accepting character + arguments, mention that they're restricted to the default kind. + * simplify.c (simplify_achar_char): New function. + (gfc_simplify_achar, gfc_simplify_char): Call simplify_achar_char. + gfc_simplify_ichar): Don't error out for wide characters. + (gfc_convert_char_constant): New function. + +2008-05-18 Steven G. Kargl + + PR fortran/36251 + * symbol.c (check_conflict): Issue errors for abuse of PUBLIC, PRIVATE, + and BIND(C). + * resolve.c (gfc_verify_binding_labels): Fix NULL pointer dereference. + +2008-05-17 Tobias Burnus + + * intrinsic.texi: Correct description of GET_COMMAND_ARGUMENT + and GET_ENVIRONMENT_VARIABLE; fix keyword= name for GETENV, + GETLOG, GMTIME, HOSTNM, IRAND, ITIME, KILL. + Move LOG_GAMMA after LOG10. + +2008-05-17 Tobias Burnus + + * intrinsic.c (add_functions): Change FLUSH(C) to FLUSH(UNIT). + * intrinsic.texi: Change INTEGER(*) to INTEGER; fix keyword= name for + ABS, ADJUSTL, AINT, ALLOCATED, ANINT, ASSOCIATED, C_ASSOCIATED, + CEILING, DBLE, DFLOAT, DOT_PRODUCT, DREAL, FLOAT, FLOOR, GET_COMMAND. + +2008-05-16 Paul Thomas + + PR fortran/35756 + PR fortran/35759 + * trans-stmt.c (gfc_trans_where): Tighten up the dependency + check for calling gfc_trans_where_3. + + PR fortran/35743 + * trans-stmt.c (gfc_trans_where_2): Set the mask size to zero + if it is calculated to be negative. + + PR fortran/35745 + * trans-stmt.c (gfc_trans_where_3, gfc_trans_where_assign): Set + ss->where for scalar right hand sides. + * trans-array.c (gfc_add_loop_ss_code): If ss->where is set do + not evaluate scalars outside the loop. Clean up whitespace. + * trans.h : Add a bitfield 'where' to gfc_ss. + +2008-05-16 Tobias Burnus + + * libgfortran.h: Increase GFC_MAX_DIMENSIONS to 15. + * array.c (gfc_match_array_spec): Error with -std=f2003 if rank > 7. + +2008-04-16 Daniel Kraft + + PR fortran/27997 + * gfortran.h: Added field "length_from_typespec" to gfc_charlength. + * aray.c (gfc_match_array_constructor): Added code to parse typespec. + (check_element_type, check_constructor_type, gfc_check_constructor_type): + Extended to support explicit typespec on constructor. + (gfc_resolve_character_array_constructor): Pad strings correctly for + explicit, constant character length. + * trans-array.c: New static global variable "typespec_chararray_ctor" + (gfc_trans_array_constructor): New code to support explicit but dynamic + character lengths. + +2008-05-16 Jerry DeLisle + + PR fortran/34325 + * decl.c (match_attr_spec): Check for matching pairs of parenthesis. + * expr.c (gfc_specification_expr): Supplement the error message with the + type that was found. + * resolve.c (gfc_resolve_index): Likewise. + * match.c (gfc_match_parens): Clarify error message with "at or before". + (gfc_match_do): Check for matching pairs of parenthesis. + +2008-05-16 Tobias Burnus + + * primary.c: New private structure "gfc_structure_ctor_component". + (gfc_free_structure_ctor_component): New helper function. + (gfc_match_structure_constructor): Extended largely to support named + arguments and default initialization for structure constructors. + +2008-05-15 Steven G. Kargl + + * simplify.c (gfc_simplify_dble, gfc_simplify_float, + simplify_bound, gfc_simplify_nearest, gfc_simplify_real): Plug + possible memory leaks. + (gfc_simplify_reshape): Plug possible memory leaks and dereferencing + of NULL pointers. + +2008-05-15 Steven G. Kargl + + PR fortran/36239 + * simplify.c (gfc_simplify_int, gfc_simplify_intconv): Replaced hand + rolled integer conversion with gfc_int2int, gfc_real2int, and + gfc_complex2int. + (gfc_simplify_intconv): Renamed to simplify_intconv. + +2008-05-15 Steven G. Kargl, + * gfortran.dg/and_or_xor.f90: New test + + * fortran/simplify.c (gfc_simplify_and, gfc_simplify_or, + gfc_simplify_xor): Don't range check logical results. + +2008-05-15 Francois-Xavier Coudert + + * trans-expr.c (gfc_conv_concat_op): Take care of nondefault + character kinds. + (gfc_build_compare_string): Add kind argument and use it. + (gfc_conv_statement_function): Fix indentation. + * gfortran.h (gfc_character_info): New structure. + (gfc_character_kinds): New array. + * trans-types.c (gfc_character_kinds, gfc_character_types, + gfc_pcharacter_types): New array. + (gfc_init_kinds): Fill character kinds array. + (validate_character): Take care of nondefault character kinds. + (gfc_build_uint_type): New function. + (gfc_init_types): Take care of nondefault character kinds. + (gfc_get_char_type, gfc_get_pchar_type): New functions. + (gfc_get_character_type_len): Use gfc_get_char_type. + * trans.h (gfc_build_compare_string): Adjust prototype. + (gfor_fndecl_compare_string_char4, gfor_fndecl_concat_string_char4, + gfor_fndecl_string_len_trim_char4, gfor_fndecl_string_index_char4, + gfor_fndecl_string_scan_char4, gfor_fndecl_string_verify_char4, + gfor_fndecl_string_trim_char4, gfor_fndecl_string_minmax_char4, + gfor_fndecl_adjustl_char4, gfor_fndecl_adjustr_char4): New + prototypes. + * trans-types.h (gfc_get_char_type, gfc_get_pchar_type): New + prototypes. + * trans-decl.c (gfor_fndecl_compare_string_char4, + gfor_fndecl_string_len_trim_char4, gfor_fndecl_string_index_char4, + gfor_fndecl_string_scan_char4, gfor_fndecl_string_verify_char4, + gfor_fndecl_string_trim_char4, gfor_fndecl_string_minmax_char4, + gfor_fndecl_adjustl_char4, gfor_fndecl_adjustr_char4, + gfor_fndecl_concat_string_char4): New function decls. + (gfc_build_intrinsic_function_decls): Define new *_char4 function + decls. + * trans-intrinsic.c (gfc_conv_intrinsic_minmax_char, + gfc_conv_intrinsic_len_trim, gfc_conv_intrinsic_ichar, + gfc_conv_intrinsic_strcmp, gfc_conv_intrinsic_trim, + gfc_conv_intrinsic_function): Deal with nondefault character kinds. + +2008-05-15 Sa Liu + + * iso-c-binding.def: Add standard parameter to macro NAMED_INTCST. + All existing NAMED_INTCST definitions has standard GFC_STD_F2003, + c_int128_t, c_int_least128_t and c_int_fast128_t are added as + GNU extensions. + * iso-fortran-evn.def: Add standard parameter GFC_STD_F2003 + to macro NAMED_INTCST. + * symbol.c (std_for_isocbinding_symbol): New helper function to + return the standard that supports this isocbinding symbol. + (generate_isocbinding_symbol): Do not generate GNU extension symbols + if std=f2003. Add new parameter to NAMED_INTCST. + * module.c (use_iso_fortran_env_module): Add new parameter to + NAMED_INTCST and new field standard to struct intmod_sym. + * gfortran.h: Add new parameter to NAMED_INTCST. + * trans-types.c (init_c_interop_kinds): Add new parameter to + NAMED_INTCST. + * intrinsic.texi: Documented new types C_INT128_T, C_INT_LEASE128_T + and C_INT_FAST128_T. + +2008-05-14 Francois-Xavier Coudert + + PR fortran/36059 + * trans-decl.c (gfc_build_dummy_array_decl): Don't repack + arrays that have the TARGET attribute. + +2008-05-14 Francois-Xavier Coudert + + PR fortran/36186 + * simplify.c (only_convert_cmplx_boz): New function. + (gfc_simplify_cmplx, gfc_simplify_complex, gfc_simplify_dcmplx): + Call only_convert_cmplx_boz. + +2008-05-14 Paul Thomas + + PR fortran/36233 + * interface.c (compare_actual_formal): Do not check sizes if the + actual is BT_PROCEDURE. + +2008-05-14 Francois-Xavier Coudert + + PR fortran/35682 + * trans-array.c (gfc_conv_ss_startstride): Any negative size is + the same as zero size. + (gfc_conv_loop_setup): Fix size calculation. + +2008-05-14 Francois-Xavier Coudert + + PR fortran/35685 + * trans-intrinsic.c (gfc_conv_intrinsic_bound): Correctly + handle zero-size sections. + +2008-05-14 Francois-Xavier Coudert + + PR fortran/36215 + * scanner.c (preprocessor_line): Allocate enough memory for a + wide string. + +2008-05-12 Francois-Xavier Coudert + + PR fortran/36176 + * target-memory.c (gfc_target_expr_size): Correctly treat + substrings. + (gfc_target_encode_expr): Likewise. + (gfc_interpret_complex): Whitespace change. + +2008-05-11 Thomas Koenig + + PR fortran/35719 + * trans.c (gfc_call_malloc): If size equals zero, allocate one + byte; don't return a null pointer. + +2008-05-10 Francois-Xavier Coudert + + PR fortran/36197 + * module.c (quote_string): Fix sprintf format. + +2008-05-09 Francois-Xavier Coudert + + PR fortran/36162 + * module.c (quote_string, unquote_string, + mio_allocated_wide_string): New functions. + (mio_expr): Call mio_allocated_wide_string where needed. + +2008-05-07 Kenneth Zadeck + + * trans-decl.c (gfc_get_extern_function_decl, build_function_decl): + Rename DECL_IS_PURE to DECL_PURE_P. + +2008-05-06 Francois-Xavier Coudert + + * arith.c: (gfc_arith_concat, gfc_compare_string, + gfc_compare_with_Cstring, hollerith2representation, + gfc_hollerith2int, gfc_hollerith2real, gfc_hollerith2complex, + gfc_hollerith2character, gfc_hollerith2logical): Use wide + characters for character constants. + * data.c (create_character_intializer): Likewise. + * decl.c (gfc_set_constant_character_len): Likewise. + * dump-parse-tree.c (show_char_const): Correctly dump wide + character strings. + error.c (print_wide_char): Rename into gfc_print_wide_char. + (show_locus): Adapt to new prototype of gfc_print_wide_char. + expr.c (free_expr0): Representation is now disjunct from + character string value, so we always free it. + (gfc_copy_expr, find_substring_ref, gfc_simplify_expr): Adapt + to wide character strings. + * gfortran.h (gfc_expr): Make value.character.string a wide string. + (gfc_wide_toupper, gfc_wide_strncasecmp, gfc_wide_memset, + gfc_widechar_to_char, gfc_char_to_widechar): New prototypes. + (gfc_get_wide_string): New macro. + (gfc_print_wide_char): New prototype. + * io.c (format_string): Make a wide string. + (next_char, gfc_match_format, compare_to_allowed_values, + gfc_match_open): Deal with wide strings. + * module.c (mio_expr): Convert between wide strings and ASCII ones. + * primary.c (match_hollerith_constant, match_charkind_name): + Handle wide strings. + * resolve.c (build_default_init_expr): Likewise. + * scanner.c (gfc_wide_toupper, gfc_wide_memset, + gfc_char_to_widechar): New functions. + (wide_strchr, gfc_widechar_to_char, gfc_wide_strncasecmp): + Changes in prototypes. + (gfc_define_undef_line, load_line, preprocessor_line, + include_line, load_file, gfc_read_orig_filename): Handle wide + strings. + * simplify.c (gfc_simplify_achar, gfc_simplify_adjustl, + gfc_simplify_adjustr, gfc_simplify_char, gfc_simplify_iachar, + gfc_simplify_ichar, simplify_min_max, gfc_simplify_new_line, + gfc_simplify_repeat): Handle wide strings. + (wide_strspn, wide_strcspn): New helper functions. + (gfc_simplify_scan, gfc_simplify_trim, gfc_simplify_verify): + Handle wide strings. + * symbol.c (generate_isocbinding_symbol): Likewise. + * target-memory.c (size_character, gfc_target_expr_size, + encode_character, gfc_target_encode_expr, gfc_interpret_character, + gfc_target_interpret_expr): Handle wide strings. + * trans-const.c (gfc_conv_string_init): Lower wide strings to + narrow ones. + (gfc_conv_constant_to_tree): Likewise. + * trans-expr.c (gfc_conv_substring_expr): Handle wide strings. + * trans-io.c (gfc_new_nml_name_expr): Likewise. + * trans-stmt.c (gfc_trans_label_assign): Likewise. + +2008-05-06 Francois-Xavier Coudert + + * simplify.c (gfc_simplify_bessel_j0,gfc_simplify_bessel_j1, + gfc_simplify_bessel_jn,gfc_simplify_bessel_y0, + gfc_simplify_bessel_y1,gfc_simplify_bessel_yn): Mark arguments + with ATTRIBUTE_UNUSED. + +2008-05-06 Francois-Xavier Coudert + + * check.c (gfc_check_sizeof): Switch to ATTRIBUTE_UNUSED. + * simplify.c (gfc_simplify_lgamma): Likewise. + +2008-05-06 Francois-Xavier Coudert + + * openmp.c (gfc_match_omp_eos): Use gfc_next_ascii_char and + gfc_peek_ascii_char. + * decl.c (gfc_match_kind_spec, gfc_match_type_spec, + gfc_match_implicit_none, match_implicit_range, gfc_match_implicit, + match_string_p, match_attr_spec, gfc_match_suffix, + match_procedure_decl, gfc_match_entry, gfc_match_subroutine): + Likewise. + * gfortran.h (gfc_char_t): New type. + (gfc_linebuf): Make line member a gfc_char_t. + (locus): Make nextc member a gfc_char_t. + (gfc_wide_is_printable, gfc_wide_is_digit, gfc_wide_fits_in_byte, + gfc_wide_tolower, gfc_wide_strlen, gfc_next_ascii_char, + gfc_peek_ascii_char, gfc_check_digit): New prototypes. + * error.c (print_wide_char): New function. + (show_locus): Use print_wide_char and gfc_wide_strlen. + * io.c (next_char): Use gfc_char_t type. + (match_io): Use gfc_peek_ascii_char and gfc_next_ascii_char. + * match.c (gfc_match_parens, gfc_match_eos, + gfc_match_small_literal_int, gfc_match_name, gfc_match_name_C, + gfc_match_intrinsic_op, gfc_match_char, gfc_match_return, + gfc_match_common): Likewise. + * match.h (gfc_match_special_char): Change prototype. + * parse.c (decode_specification_statement, decode_statement, + decode_omp_directive, next_free, next_fixed): Use + gfc_peek_ascii_char and gfc_next_ascii_char. + * primary.c (gfc_check_digit): Change name. + (match_digits, match_hollerith_constant, match_boz_constant, + match_real_constant, next_string_char, match_charkind_name, + match_string_constant, match_logical_constant_string, + match_complex_constant, match_actual_arg, match_varspec, + gfc_match_rvalue, match_variable): Use gfc_peek_ascii_char and + gfc_next_ascii_char. + * scanner.c (gfc_wide_fits_in_byte, wide_is_ascii, + gfc_wide_is_printable, gfc_wide_tolower, gfc_wide_is_digit, + gfc_wide_is_digit, wide_atoi, gfc_wide_strlen, wide_strcpy, + wide_strchr, widechar_to_char, wide_strncmp, wide_strncasecmp, + gfc_next_ascii_char, gfc_peek_ascii_char): + New functions. + (next_char, gfc_define_undef_line, skip_free_comments, + gfc_next_char_literal, gfc_next_char, gfc_peek_char, + gfc_error_recovery, load_line, preprocessor_line, include_line, + load_file, gfc_read_orig_filename): Use gfc_char_t for source + characters and the {gfc_,}wide_* functions to manipulate wide + strings. + +2008-05-06 Tobias Burnus + + PR fortran/36117 + * intrinsic.c (add_functions): Call gfc_simplify_bessel_*. + * intrinsic.h: Add prototypes for gfc_simplify_bessel_*. + * simplify.c (gfc_simplify_bessel_j0,gfc_simplify_bessel_j1, + gfc_simplify_bessel_jn,gfc_simplify_bessel_y0, + gfc_simplify_bessel_y1,gfc_simplify_bessel_yn): New. + +2008-05-03 Janus Weil + + * misc.c (gfc_clear_ts): Set interface to NULL. + +2008-05-03 Jerry DeLisle + + PR fortran/33268 + * gfortran.h: Add extra_comma pointer to gfc_dt structure. Add iokind to + gfc_expr value union. Add io_kind enum to here from io.c. + * io.c (gfc_free_dt): Free extra_comma. + (gfc_resolve_dt): If an extra comma was encountered and io_unit is type + BT_CHARACTER, resolve to format_expr and set default unit. Error if + io_kind is M_WRITE. (match_io): Match the extra comma and set new + pointer, extra_comma. + +2008-05-01 Bud Davis + + PR35940/Fortran + * simplify.c (gfc_simplify_index): Check for direction argument + being a constant. + +2008-05-01 Janus Weil + + * gfortran.h (struct gfc_symbol): Moving "interface" member to + gfc_typespec (plus fixing a small docu error). + * interface.c (gfc_procedure_use): Ditto. + * decl.c (match_procedure_decl): Ditto. + * resolve.c (resolve_specific_f0, + resolve_specific_f0, resolve_symbol): Ditto. + +2008-04-30 Francois-Xavier Coudert + + * intrinsic.c (add_functions): Add SELECTED_CHAR_KIND intrinsic. + * intrinsic.h (gfc_check_selected_char_kind, + gfc_simplify_selected_char_kind): New prototypes. + * gfortran.h (gfc_isym_id): Add GFC_ISYM_SC_KIND. + * trans.h (gfor_fndecl_sc_kind): New function decl. + * trans-decl.c (gfor_fndecl_sc_kind): Build new decl. + * arith.c (gfc_compare_with_Cstring): New function. + * arith.h (gfc_compare_with_Cstring): New prototype. + * check.c (gfc_check_selected_char_kind): New function. + * primary.c (match_string_constant, match_kind_param): Mark + symbols used as literal constant kind param as referenced. + * trans-intrinsic.c (gfc_conv_intrinsic_sc_kind): New function. + (gfc_conv_intrinsic_function): Call gfc_conv_intrinsic_sc_kind. + * intrinsic.texi (SELECTED_CHAR_KIND): Document new intrinsic. + * simplify.c (gfc_simplify_selected_char_kind): New function. + +2008-04-28 Paul Thomas + + PR fortran/35997 + * module.c (find_symbol): Do not return a result for a symbol + that has been renamed in another module. + +2008-04-26 George Helffrich + + PR fortran/35892 + PR fortran/35154 + * trans-common.c (create_common): Add decl to function + chain (if inside one) to preserve identifier scope in debug output. + +2008-04-25 Jan Hubicka + + * trans-decl.c (trans_function_start): Update. + +2008-04-25 Tobias Burnus + Daniel Franke + + PR fortran/35156 + * gfortranspec.c (lang_specific_driver): Deprecate + -M option; fix ICE when "-M" is last argument and + make "-M

            " work. + * options.c (gfc_handle_module_path_options): + Use -J instead of -M in error messages. + * invoke.texi: Mark -M as depecated. + +2008-04-23 Jerry DeLisle + Francois-Xavier Coudert + + PR fortran/35994 + * trans-instrinsic.c (gfc_conv_intrinsic_minmaxloc): Correctly adjust + loop counter offset. + +2008-04-23 Paolo Bonzini + + * trans-expr.c (gfc_conv_structure): Don't set TREE_INVARIANT. + * trans-array.c (gfc_build_null_descriptor): Don't set TREE_INVARIANT. + (gfc_trans_array_constructor_value): Don't set TREE_INVARIANT. + (gfc_build_constant_array_constructor): Don't set TREE_INVARIANT. + (gfc_conv_array_initializer): Don't set TREE_INVARIANT. + * trans-common.c (get_init_field): Don't set TREE_INVARIANT. + (create_common): Don't set TREE_INVARIANT. + * trans-stmt.c (gfc_trans_character_select): Don't set TREE_INVARIANT. + * trans-decl.c (gfc_generate_function_code): Don't set TREE_INVARIANT. + +2008-04-21 Steve Ellcey + + * f95-lang.c (gfc_init_decl_processing): use ptr_mode instead of Pmode. + +2008-04-21 Daniel Franke + + PR fortran/35019 + * gfortranspec.c (lookup_option): Properly handle separated arguments + in -J option, print missing argument message when necessary. + +2008-04-20 Jerry DeLisle + + PR fortran/35882 + * scanner.c (skip_fixed_comments): Update continue_line when comment is + detected. (gfc_next_char_literal): Likewise. + +2008-04-19 Paul Thomas + + PR fortran/35944 + PR fortran/35946 + PR fortran/35947 + * trans_array.c (gfc_trans_array_constructor): Temporarily + realign loop, if loop->from is not zero, before creating + the temporary array and provide an offset. + + PR fortran/35959 + * trans-decl.c (gfc_init_default_dt): Add gfc_ prefix to name + and allow for NULL body. Change all references from + init_default_dt to gfc_init_default_dt. + * trans.h : Add prototype for gfc_init_default_dt. + * trans-array.c (gfc_trans_deferred_vars): After nullification + call gfc_init_default_dt for derived types with allocatable + components. + +2008-04-18 Jerry DeLisle + + PR fortran/35892 + * trans-common.c (create_common): Revert patch causing regression. + +2008-04-16 Jerry DeLisle + + PR fortran/35724 + * iresolve.c (gfc_resolve_eoshift): Check for NULL symtree in test for + optional argument attribute. + +2008-04-16 Paul Thomas + + PR fortran/35932 + * trans-intrinsic.c (gfc_conv_intrinsic_char): Even though KIND + is not used, the argument must be converted. + +2008-04-16 Jakub Jelinek + + PR target/35662 + * f95-lang.c (gfc_init_builtin_functions): Make sure + BUILT_IN_SINCOS{,F,L} types aren't varargs. + +2008-04-15 Paul Thomas + + PR fortran/35864 + * expr.c (scalarize_intrinsic_call): Reorder identification of + array argument so that if one is not found a segfault does not + occur. Return FAILURE if all scalar arguments. + +2008-04-13 Jerry DeLisle + Tobias Burnus + + PR fortran/35882 + * options.c (gfc_init_options): Set the default maximum continuation + lines to 255 for both free and fixed form source for warnings. + (gfc_handle_option): Set -std=f95 fixed form max continuations to 19 and + the -std=f95 free form max continuations to 39 for warnings. + * scanner.c (gfc_next_char_literal): Adjust the current_line number only + if it is less than the current locus. + +2008-04-07 Jerry DeLisle + + PR fortran/25829 28655 + * io.c (io_tag): Add new tags for decimal, encoding, asynchronous, + round, sign, and id. (match_open_element): Match new tags. + (gfc_resolve_open): Resolve new tags. (gfc_match_open): Enable encoding + for DEFAULT only. Update error messages. (match_dt_element): Fix match + tag for asynchronous. Update error messages. (gfc_free_inquire): Free + new expressions. (match_inquire_element): Match new tags. + (gfc_match_inquire): Add constraint for ID and PENDING. + (gfc_resolve_inquire): Resolve new tags. + * trans-io.c (gfc_trans_inquire): Clean up whitespace and fix setting of + mask for ID parameter. + * ioparm.def: Fix order of parameters for pending, round, and sign. + NOTE: These must line up with the definitions in libgfortran/io/io.h. or + things don't work. + +2008-04-06 Paul Thomas + + PR fortran/35780 + * expr.c (scalarize_intrinsic_call): Identify which argument is + an array and use that as the template. + (check_init_expr): Remove tests that first argument is an array + in the call to scalarize_intrinsic_call. + +2008-04-06 Tobias Schlüter + + PR fortran/35832 + * io.c (io_tag): Add field 'value'. Split 'spec' field in + existing io_tags. + (match_etag, match_vtag, match_ltag): Split parsing in two steps + to give better error messages. + +2008-04-06 Tobias Burnus + + * io.c (check_io_constraints): Add constrains. ID= requires + asynchronous= and asynchronous= must be init expression. + +2008-04-06 Francois-Xavier Coudert + + * f95-lang.c: Set LANG_HOOKS_NAME to "GNU Fortran". + +2008-04-06 Francois-Xavier Coudert + + * dump-parse-tree.c: Use fprintf, fputs and fputc instead of + gfc_status and gfc_status_char. Remove gfc_ prefix of the gfc_show_* + functions and make them static. Add new gfc_dump_parse_tree + function. + * gfortran.h (gfc_option_t): Rename verbose into dump_parse_tree. + (gfc_status, gfc_status_char): Delete prototypes. + * error.c (gfc_status, gfc_status_char): Remove functions. + * scanner.c (gfc_new_file): Use printf instead of gfc_status. + * options.c (gfc_init_options): Rename verbose into dump_parse_tree. + (gfc_handle_module_path_options): Use gfc_fatal_error instead of + gfc_status and exit. + (gfc_handle_option): Rename verbose into dump_parse_tree. + * parse.c (gfc_parse_file): Use gfc_dump_parse_tree. + +2008-04-05 Jerry DeLisle + Francois-Xavier Coudert + + PR fortran/25829 28655 + * dump-parse-tree.c (gfc_show_code_node): Show new I/O parameters. + * gfortran.h (gfc_statement): Add ST_WAIT enumerator. + (gfc_open): Add pointers for decimal, encoding, round, sign, + asynchronous. (gfc_inquire): Add pointers for asynchronous, decimal, + encoding, pending, round, sign, size, id. + (gfc_wait): New typedef struct. (gfc_dt): Add pointers for id, pos, + asynchronous, blank, decimal, delim, pad, round, sign. + (gfc_exec_op): Add EXEC_WAIT enumerator. (gfc_code): Add pointer for + wait. (gfc_free_wait), (gfc_resolve_wait): New function prototypes. + * trans-stmt.h (gfc_trans_wait): New function prototype. + * trans.c (gfc_trans_code): Add case for EXEC_WAIT. + * io.c (io_tag): Add new tags for DECIMAL, ENCODING, ROUND, SIGN, + ASYCHRONOUS, ID. (match_open_element): Add matchers for new tags. + (gfc_free_open): Free new pointers. (gfc_resolve_open): Resolve new + tags. (gfc_resolve_open): Remove comment around check for allowed + values and ASYNCHRONOUS, update it. Likewise for DECIMAL, ENCODING, + ROUND, and SIGN. (match_dt_element): Add matching for new tags. + (gfc_free_wait): New function. (gfc_resolve_wait): New function. + (match_wait_element): New function. (gfc_match_wait): New function. + * resolve.c (gfc_resolve_blocks): Add case for EXEC_WAIT. + (resolve_code): Add case for EXEC_WAIT. + * st.c (gfc_free_statement): Add case for EXEC_WAIT. + * trans-io.c (ioparam_type): Add IOPARM_ptype_wait. (gfc_st_parameter): + Add "wait" entry. (iocall): Add IOCALL_WAIT enumerator. + (gfc_build_io_library_fndecls): Add function declaration for st_wait. + (gfc_trans_open): Add mask bits for new I/O tags. + (gfc_trans_inquire): Add mask bits for new I/O tags. + (gfc_trans_wait): New translation function. + (build_dt): Add mask bits for new I/O tags. + * match.c (gfc_match_if) Add matcher for "wait". + * match.h (gfc_match_wait): Prototype for new function. + * ioparm.def: Add new I/O parameter definitions. + * parse.c (decode_statement): Add match for "wait" statement. + (next_statement): Add case for ST_WAIT. (gfc_ascii_statement): Same. + +2008-04-03 Jakub Jelinek + + PR fortran/35786 + * openmp.c (resolve_omp_clauses): Diagnose if a clause symbol + isn't a variable. + +2008-04-03 Tom Tromey + + * Make-lang.in (fortran_OBJS): New variable. + +2008-04-03 Paolo Bonzini + + * f95-lang.c (insert_block): Kill. + +2008-04-01 George Helffrich + + PR fortran/35154, fortran/23057 + * trans-common.c (create_common): Add decl to function + chain to preserve identifier scope in debug output. + +2008-04-01 Joseph Myers + + * gfortran.texi: Include gpl_v3.texi instead of gpl.texi + * Make-lang.in (GFORTRAN_TEXI): Include gpl_v3.texi instead of + gpl.texi. + +2008-03-30 Paul Thomas + + PR fortran/35740 + * resolve.c (resolve_function, resolve_call): If the procedure + is elemental do not look for noncopying intrinsics. + +2008-03-29 Paul Thomas + + PR fortran/35698 + * trans-array.c (gfc_array_init_size): Set 'size' zero if + negative in one dimension. + + PR fortran/35702 + * trans-expr.c (gfc_trans_string_copy): Only assign a char + directly if the lhs and rhs types are the same. + +2008-03-28 Daniel Franke + Paul Richard Thomas + + PR fortran/34714 + * primary.c (match_variable): Improved matching of function + result variables. + * resolve.c (resolve_allocate_deallocate): Removed checks if + the actual argument for STAT is a variable. + +2008-03-28 Tobias Burnus + + * symbol.c (gfc_get_default_type): Fix error message; option + -fallow_leading_underscore should be -fallow-leading-underscore + +2008-03-27 Jerry DeLisle + + PR fortran/35724 + * iresolve.c (gfc_resolve_cshift): Check for NULL symtree in test for + optional argument attribute. + +2008-03-27 Tom Tromey + + * Make-lang.in: Revert automatic dependency patch. + +2008-03-25 Tom Tromey + + * Make-lang.in: Remove .o targets. + (fortran_OBJS): New variable. + (fortran/gfortranspec.o): Move to fortran/. Reduce to variable + setting. + (GFORTRAN_D_OBJS): Update. + (GFORTRAN_TRANS_DEPS): Remove. + +2008-03-24 Paul Thomas + + PR fortran/34813 + * resolve.c (resolve_structure_cons): It is an error to assign + NULL to anything other than a pointer or allocatable component. + + PR fortran/33295 + * resolve.c (resolve_symbol): If the symbol is a derived type, + resolve the derived type. If the symbol is a derived type + function, ensure that the derived type is visible in the same + namespace as the function. + +2008-03-23 Tobias Schlüter + + * trans.h: Use fold_build in build1_v, build2_v and build3_v + macros. + * trans-openmp.c (gfc_trans_omp_critical, gfc_trans_omp_single): + Don't use build2_v macro. + +2008-03-19 Daniel Franke + + PR fortran/35152 + * interface.c (gfc_procedure_use): Check for keyworded arguments in + procedures without explicit interfaces. + +2008-03-16 Paul Thomas + + PR fortran/35470 + * resolve.c (check_assumed_size_reference): Only visit the + first reference and look directly at the highest dimension. + +2008-03-15 Jerry DeLisle + + PR fortran/35184 + * trans-array.c (gfc_conv_array_index_offset): Remove unnecessary + assert. + +2008-03-15 Daniel Franke + + PR fortran/35584 + * resolve.c (resolve_branch): Less strict and pessimistic warning + message. + +2008-03-11 Paolo Bonzini + + * f95-lang.c (LANG_HOOKS_CLEAR_BINDING_STACK): Delete. + (gfc_be_parse_file): Call clear_binding_stack from here. + (gfc_clear_binding_stack): Rename to clear_binding_stack. + +2008-03-09 Paul Thomas + + PR fortran/35474 + * module.c (mio_symtree_ref): After providing a symbol for a + missing equivalence member, resolve and NULL the fixups. + +2008-03-09 Ralf Wildenhues + + * invoke.texi (Error and Warning Options): Document + -Wline-truncation. + +2008-03-08 Francois-Xavier Coudert + + PR fortran/34956 + * trans-array.c (gfc_conv_ss_startstride): Fix the logic to avoid + checking bounds of absent optional arguments. + +2008-03-06 Francois-Xavier Coudert + + PR fortran/33197 + * intrinsic.c (add_functions): Add simplification routines for + ERF, DERF, ERFC and DERFC. + * decl.c (gfc_match_suffix, gfc_match_subroutine): Change GNU + extensions into Fortran 2008 features. + * intrinsic.h (gfc_simplify_erf, gfc_simplify_erfc): New + prototypes. + * simplify.c (gfc_simplify_erf, gfc_simplify_erfc): New functions. + +2008-03-03 Francois-Xavier Coudert + + PR fortran/33197 + * intrinsic.c (add_functions): Modify intrinsics ACOSH, ASINH, + ATANH, ERF, ERFC and GAMMA. Add intrinsics BESSEL_{J,Y}{0,1,N}, + ERFC_SCALED, LOG_GAMMA and HYPOT. + * intrinsic.h (gfc_check_hypot, gfc_simplify_hypot, + gfc_resolve_hypot): New prototypes. + * mathbuiltins.def: Add HYPOT builtin. Make complex versions of + ACOSH, ASINH and ATANH available. + * gfortran.h (GFC_ISYM_ERFC_SCALED, GFC_ISYM_HYPOT): New values. + * lang.opt: Add -std=f2008 option. + * libgfortran.h: Define GFC_STD_F2008. + * lang-specs.h: Add .f08 and .F08 file suffixes. + * iresolve.c (gfc_resolve_hypot): New function. + * parse.c (parse_contained): Allow empty CONTAINS for Fortran 2008. + * check.c (gfc_check_hypot): New function. + * trans-intrinsic.c (gfc_intrinsic_map): Define ERFC_SCALE builtin. + * options.c (set_default_std_flags): Allow Fortran 2008 by default. + (form_from_filename): Add .f08 suffix. + (gfc_handle_option): Handle -std=f2008 option. + * simplify.c (gfc_simplify_hypot): New function. + * gfortran.texi: Document Fortran 2008 status and file extensions. + * intrinsic.texi: Document new BESSEL_{J,Y}{0,1,N} intrinsics, + as well as HYPOT and ERFC_SCALED. Update documentation of ERF, + ERFC, GAMMA, LGAMMA, ASINH, ACOSH and ATANH. + * invoke.texi: Document the new -std=f2008 option. + +2008-03-02 Jakub Jelinek + + * gfortranspec.c (lang_specific_driver): Update copyright notice + dates. + +2008-02-29 Jerry DeLisle + + PR fortran/35059 + * expr.c (find_array_element): Modify traversing the constructor to + avoid trying to access NULL memory pointed to by next for the + last element. (find_array_section): Exit while loop if cons->next is + NULL. + * trans-expr.c (gfc_conv_scalar_char_value): Initialize gfc_typespec. + (gfc_conv_function_call): Same. + * decl.c (gfc_match_implicit): Same. + * trans-intrinsic.c (gfc_conv_intrinsic_sr_kind): Same. + +2008-02-28 Daniel Franke + + PR fortran/31463 + PR fortran/33950 + PR fortran/34296 + * lang.opt: Added -Wreturn-type. + * options.c (gfc_handle_option): Recognize -Wreturn-type. + * trans-decl.c (gfc_trans_deferred_vars): Emit warnings for funtions + where the result value is not set. + (gfc_generate_function_code): Likewise. + (generate_local_decl): Emit warnings for funtions whose RESULT + variable is not set. + +2008-02-28 Francois-Xavier Coudert + + PR fortran/34868 + * trans-expr.c (gfc_conv_variable): Don't build indirect + references when explicit interface is mandated. + * resolve.c (resolve_formal_arglist): Set attr.always_explicit + on the result symbol as well as the procedure symbol. + +2008-02-27 Francois-Xavier Coudert + + PR fortran/33387 + * trans.h: Remove prototypes for gfor_fndecl_math_exponent4, + gfor_fndecl_math_exponent8, gfor_fndecl_math_exponent10 and + gfor_fndecl_math_exponent16. + * f95-lang.c (build_builtin_fntypes): Add new function types. + (gfc_init_builtin_functions): Add new builtins for nextafter, + frexp, ldexp, fabs, scalbn and inf. + * iresolve.c (gfc_resolve_rrspacing): Don't add hidden arguments. + (gfc_resolve_scale): Don't convert type of second argument. + (gfc_resolve_set_exponent): Likewise. + (gfc_resolve_size): Don't add hidden arguments. + * trans-decl.c: Remove gfor_fndecl_math_exponent4, + gfor_fndecl_math_exponent8, gfor_fndecl_math_exponent10 and + gfor_fndecl_math_exponent16. + * trans-intrinsic.c (gfc_intrinsic_map): Remove intrinsics + for scalbn, fraction, nearest, rrspacing, set_exponent and + spacing. + (gfc_conv_intrinsic_exponent): Directly call frexp. + (gfc_conv_intrinsic_fraction, gfc_conv_intrinsic_nearest, + gfc_conv_intrinsic_spacing, gfc_conv_intrinsic_rrspacing, + gfc_conv_intrinsic_scale, gfc_conv_intrinsic_set_exponent): New + functions. + (gfc_conv_intrinsic_function): Use the new functions above. + +2008-02-26 Tobias Burnus + + PR fortran/35033 + * interface.c (check_operator_interface): Show better line for error + messages; fix constrains for user-defined assignment operators. + (gfc_extend_assign): Fix constrains for user-defined assignment + operators. + +2008-02-26 Tom Tromey + + * trans-io.c (set_error_locus): Remove old location code. + * trans-decl.c (gfc_set_decl_location): Remove old location code. + * f95-lang.c (gfc_init): Remove test of USE_MAPPED_LOCATION. + * scanner.c (gfc_gobble_whitespace): Remove old location code. + (get_file): Likewise. + (preprocessor_line): Likewise. + (load_file): Likewise. + (gfc_new_file): Likewise. + * trans.c (gfc_trans_runtime_check): Remove old location code. + (gfc_get_backend_locus): Likewise. + (gfc_set_backend_locus): Likewise. + * data.c (gfc_assign_data_value): Remove old location code. + * error.c (show_locus): Remove old location code. + * gfortran.h (gfc_linebuf): Remove old location code. + (gfc_linebuf_linenum): Remove old-location variant. + +2008-02-25 Francois-Xavier Coudert + + PR fortran/34729 + * trans-const.c (gfc_build_string_const): Don't call gettext. + (gfc_build_localized_string_const): New function. + * trans-const.h (gfc_build_localized_string_const): New prototype. + * trans.c (gfc_trans_runtime_check): Use + gfc_build_localized_string_const instead of gfc_build_string_const. + (gfc_call_malloc): Likewise. + (gfc_allocate_with_status): Likewise. + (gfc_allocate_array_with_status): Likewise. + (gfc_deallocate_with_status): Likewise. + (gfc_call_realloc): Likewise. + * trans-io.c (gfc_trans_io_runtime_check): Likewise. + +2008-02-24 Tobias Schlüter + + * arith.c: Update copyright years. + * arith.h: Likewise. + * array.c: Likewise. + * bbt.c: Likewise. + * check.c: Likewise. + * data.c: Likewise. + * data.h: Likewise. + * decl.c: Likewise. + * dependency.c: Likewise. + * dependency.h: Likewise. + * dump-parse-tree.c: Likewise. + * error.c: Likewise. + * expr.c: Likewise. + * gfc-internals.texi: Likewise. + * gfortran.h: Likewise. + * gfortran.texi: Likewise. + * gfortranspec.c: Likewise. + * interface.c: Likewise. + * intrinsic.c: Likewise. + * intrinsic.h: Likewise. + * intrinsic.texi: Likewise. + * invoke.texi: Likewise. + * io.c: Likewise. + * iresolve.c: Likewise. + * iso-c-binding.def: Likewise. + * iso-fortran-env.def: Likewise. + * lang-specs.h: Likewise. + * lang.opt: Likewise. + * libgfortran.h: Likewise. + * match.c: Likewise. + * match.h: Likewise. + * matchexp.c: Likewise. + * misc.c: Likewise. + * module.c: Likewise. + * openmp.c: Likewise. + * options.c: Likewise. + * parse.c: Likewise. + * parse.h: Likewise. + * primary.c: Likewise. + * resolve.c: Likewise. + * scanner.c: Likewise. + * simplify.c: Likewise. + * st.c: Likewise. + * symbol.c: Likewise. + * target-memory.c: Likewise. + * target-memory.h: Likewise. + * trans-array.h: Likewise. + * trans-const.h: Likewise. + * trans-stmt.h: Likewise. + * trans-types.c: Likewise. + * trans-types.h: Likewise. + * types.def: Likewise. + +2008-02-24 Jerry DeLisle + + PR fortran/35223 + * simplify.c (gfc_simplify_ibclr), (gfc_simplify_ibits), + (gfc_simplify_ibset): Remove call to range_check. + (simplify_cmplx), (gfc_simplify_dble), (gfc_simplify_float) + (gfc_simplify_real): Add call gfc_clear_ts to initialize the + temporary gfc_typspec variable. + +2008-02-24 Tobias Schlüter + + * trans-array.c (gfc_conv_descriptor_data_get, + gfc_conv_descriptor_data_set_internal, + gfc_conv_descriptor_data_addr, gfc_conv_descriptor_offset, + gfc_conv_descriptor_dtype, gfc_conv_descriptor_dimension, + gfc_conv_descriptor_stride, gfc_conv_descriptor_lbound, + gfc_conv_descriptor_ubound, gfc_trans_create_temp_array, + gfc_conv_array_transpose, gfc_grow_array, + gfc_trans_array_constructor_subarray, + gfc_trans_array_constructor_value, gfc_trans_scalarized_loop_end, + gfc_array_init_size, gfc_array_allocate, gfc_array_deallocate, + gfc_conv_array_initializer, gfc_trans_array_bounds, + gfc_trans_auto_array_allocation, gfc_trans_dummy_array_bias, + gfc_get_dataptr_offset, gfc_conv_array_parameter, + gfc_trans_dealloc_allocated, get_full_array_size, + gfc_duplicate_allocatable, structure_alloc_comps): Use fold_buildN + instead of buildN. + * trans-expr.c (gfc_conv_expr_present, gfc_conv_missing_dummy, + gfc_conv_component_ref, gfc_conv_cst_int_power, + gfc_conv_function_call, gfc_trans_structur_assign): Likewise. + * trans-common.c (create_common): Likewise. + * trans-openmp.c (gfc_trans_omp_atomic, gfc_trans_omp_do): + Likewise. + * trans-const.c (gfc_conv_constant_to_tree): Likewise. + * trans-stmt.c (gfc_trans_goto, gfc_trans_return, gfc_trans_do, + gfc_trans_integer_select, gfc_trans_character_select, + gfc_trans_forall_loop, compute_overall_iter_number, + gfc_trans_forall_1, gfc_evaluate_where_mask, gfc_trans_allocate, + gfc_trans_deallocate): Likewise. + * trans.c (gfc_build_addr_expr, gfc_trans_runtime_check, + gfc_allocate_with_status, gfc_allocate_array_with_status, + gfc_deallocate_with_status): Likewise. + * f95-lang.c (gfc_truthvalue_conversion): Likewise. + * trans-io.c (set_parameter_const, set_parameter_value, + set_parameter_ref, set_string, set_internal_unit, io_result, + set_error_locus, nml_get_addr_expr, transfer_expr): Likewise. + * trans-decl.c (gfc_build_qualified_array, build_entry_thunks, + gfc_get_fake_result_decl, gfc_trans_auto_character_variable, + gfc_generate_function_code): Likewise. + * convert.c (convert): Likewise. + * trans-intrinsic.c (gfc_conv_intrinsic_conversion, + build_fixbound_expr, build_fix_expr, gfc_conv_intrinsic_aint, + gfc_conv_intrinsic_int, gfc_conv_intrinsic_imagpart, + gfc_conv_intrinsic_conjg, gfc_conv_intrinsic_abs, + gfc_conv_intrinsic_cmplx, gfc_conv_intrinsic_mod, + gfc_conv_intrinsic_dim, gfc_conv_intrinsic_dprod, + gfc_conv_intrinsic_ctime, gfc_conv_intrinsic_fdate, + gfc_conv_intrinsic_ttynam, gfc_conv_intrinsic_minmax, + gfc_conv_intrinsic_minmax_char, gfc_conv_intrinsic_count, + gfc_conv_intrinsic_arith, gfc_conv_intrinsic_dot_product, + gfc_conv_intrinsic_minmaxloc, gfc_conv_intrinsic_minmaxval, + gfc_conv_intrinsic_btest, gfc_conv_intrinsic_not, + gfc_conv_intrinsic_ibits, gfc_conv_intrinsic_ishft, + gfc_conv_intrinsic_ichar, gfc_conv_intrinsic_size, + gfc_conv_intrinsic_array_transfer, gfc_conv_intrinsic_transfer, + gfc_conv_allocated, gfc_conv_associated, gfc_conv_intrinsic_trim, + gfc_conv_intrinsic_repeat): Likewise. + +2008-02-23 Francois-Xavier Coudert + + PR target/25477 + * trans-expr.c (gfc_conv_power_op): Use BUILT_IN_CPOW{F,,L}. + * f95-lang.c (gfc_init_builtin_functions): Define BUILT_IN_CPOW{F,,L}. + * trans.h (gfor_fndecl_math_cpow, gfor_fndecl_math_cpowf, + gfor_fndecl_math_cpowl10, gfor_fndecl_math_cpowl16): Remove. + * trans-decl.c: Likewise. + +2008-02-22 Jerry DeLisle + + PR fortran/35059 + * expr.c (find_array_element): Modify traversing the constructor to + avoid trying to access NULL memory pointed to by next for the + last element. (find_array_section): Exit while loop if cons->next is + NULL. + +2008-02-22 Jerry DeLisle + + PR fortran/34907 + * iresolve.c (resolve_mask_arg): Add gfc_clear_ts to initialize + structure. + (gfc_resolve_aint): Likewise. + (gfc_resolve_anint): Likewise. + (gfc_resolve_besn): Likewise. + (gfc_resolve_cshift): Likewise. + (gfc_resolve_ctime): Likewise. + (gfc_resolve_eoshift): Likewise. + (gfc_resolve_index_func): Likewise. + (gfc_resolve_isatty): Likewise. + (gfc_resolve_malloc): Likewise. + (gfc_resolve_rrspacing): Likewise. + (gfc_resolve_scale): Likewise. + (gfc_resolve_set_exponent): Likewise. + (gfc_resolve_spacing): Likewise. + (gfc_resolve_spacing): Likewise. + (gfc_resolve_fgetc): Likewise. + (gfc_resolve_fputc): Likewise. + (gfc_resolve_ftell): Likewise. + (gfc_resolve_ttynam): Likewise. + (gfc_resolve_alarm_sub): Likewise. + (gfc_resolve_mvbits): Likewise. + (gfc_resolve_getarg): Likewise. + (gfc_resolve_signal_sub): Likewise. + (gfc_resolve_exit): Likewise. + (gfc_resolve_flush): Likewise. + (gfc_resolve_free): Likewise. + (gfc_resolve_ctime_sub): Likewise. + (gfc_resolve_fgetc_sub): Likewise. + (gfc_resolve_fputc_sub): Likewise. + (gfc_resolve_fseek_sub): Likewise. + (gfc_resolve_ftell_sub): Likewise. + (gfc_resolve_ttynam_sub): Likewise. + +2008-02-22 Ralf Wildenhues + + * gfc-internals.texi: Fix typos and markup nits. + * gfortran.texi: Likewise. + * intrinsic.texi: Likewise. + +2008-02-21 Richard Guenther + + * trans-expr.c (gfc_conv_expr_op): Expand INTRINSIC_PARENTHESES + as unary PAREN_EXPR for real and complex typed expressions. + (gfc_conv_unary_op): Fold the built tree. + +2008-02-20 Tobias Burnus + + PR fortran/34997 + * match.c (gfc_match_name): Improve error message for '$'. + +2008-02-19 Daniel Franke + + PR fortran/35030 + * expr.c (gfc_check_pointer_assign): Add type and kind information + to type-mismatch message. + (gfc_check_assign): Unify error messages. + +2008-02-16 Francois-Xavier Coudert + + PR fortran/34952 + * gfortran.texi: Create new section for unimplemented extensions. + Add "STRUCTURE and RECORD" and "ENCODE and DECODE statements". + Remove "smaller projects" list. Fix a few typos. + +2008-02-15 Francois-Xavier Coudert + + * intrinsic.texi: Rename INDEX node to avoid clashing with + index.html on case-insensitive systems. + +2008-02-15 Francois-Xavier Coudert + + PR fortran/35150 + * trans-expr.c (gfc_conv_function_call): Force evaluation of + se->expr. + +2008-02-10 Daniel Franke + + PR fortran/35019 + * lang.opt: Allow '-J' next to '-J ', + likewise '-I ' and '-I'. + +2008-02-06 Kaveh R. Ghazi + + PR other/35107 + * Make-lang.in (f951): Add $(GMPLIBS). + +2008-02-05 Francois-Xavier Coudert + + PR fortran/35037 + * trans-common.c (build_field): Mark fields as volatile when needed. + +2008-02-05 Tobias Burnus + + PR fortran/35093 + * data.c (gfc_assign_data_value): Only free "size" if + it has not already been freed. + +2008-02-05 Paul Thomas + + PR fortran/34945 + * array.c (match_array_element_spec): Remove check for negative + array size. + (gfc_resolve_array_spec): Add check for negative size. + +2008-02-05 Paul Thomas + + PR fortran/32315 + * data.c (gfc_assign_data_value): Add bounds check for array + references. + +2008-02-04 Daniel Franke + + * resolve.c (resolve_where): Fix typo. + (gfc_resolve_where_code_in_forall): Likewise. + +2008-02-03 Paul Thomas + + PR fortran/32760 + * resolve.c (resolve_allocate_deallocate): New function. + (resolve_code): Call it for allocate and deallocate. + * match.c (gfc_match_allocate, gfc_match_deallocate) : Remove + the checking of the STAT tag and put in above new function. + * primary,c (match_variable): Do not fix flavor of host + associated symbols yet if the type is not known. + +2008-01-31 Paul Thomas + + PR fortran/34910 + * expr.c (gfc_check_assign): It is an error to assign + to a sibling procedure. + +2008-01-30 Paul Thomas + + PR fortran/34975 + * symbol.c (gfc_delete_symtree, gfc_undo_symbols): Rename + delete_symtree to gfc_delete_symtree. + * gfortran.h : Add prototype for gfc_delete_symtree. + * module.c (load_generic_interfaces): Transfer symbol to a + unique symtree and delete old symtree, instead of renaming. + (read_module): The rsym and the found symbol are the same, so + the found symtree can be deleted. + + PR fortran/34429 + * decl.c (match_char_spec): Remove the constraint on deferred + matching of functions and free the length expression. + delete_symtree to gfc_delete_symtree. + (gfc_match_type_spec): Whitespace. + (gfc_match_function_decl): Defer characteristic association for + all types except BT_UNKNOWN. + * parse.c (decode_specification_statement): Only derived type + function matching is delayed to the end of specification. + +2008-01-28 Tobias Burnus + + PR libfortran/34980 + * simplify.c (gfc_simplify_shape): Simplify rank zero arrays. + +2008-01-27 Jerry DeLisle + + PR fortran/34990 + * array.c (gfc_check_constructor_type): Revert clearing the expression. + +2008-01-26 Tobias Burnus + + PR fortran/34848 + * trans-expr.c (gfc_conv_function_call): Don't call + gfc_add_interface_mapping if the expression is NULL. + +2008-01-26 Jerry DeLisle + + PR fortran/31610 + * trans-array.c (gfc_trans_create_temp_array): Remove call to + gcc_assert (integer_zerop (loop->from[n])). + +2008-01-25 Daniel Franke + + PR fortran/34661 + * resolve.c (resolve_where): Added check if user-defined assignment + operator is an elemental subroutine. + (gfc_resolve_where_code_in_forall): Likewise. + +2008-01-24 Daniel Franke + + PR fortran/33375 + PR fortran/34858 + * gfortran.h: Revert changes from 2008-01-17. + * match.c: Likewise. + * symbol.c: Likewise. + (gfc_undo_symbols): Undo namespace changes related to common blocks. + +2008-01-24 Daniel Franke + + PR fortran/34202 + * data.c (formalize_structure_cons): Skip formalization on + empty structures. + +2008-01-24 Daniel Franke + + * gfortran.texi (OpenMP): Extended existing documentation. + (contributors): Added major contributors of 2008 that were + not listed yet. + (proposed extensions): Removed implemented items. + +2008-01-24 Paul Thomas + + PR fortran/34872 + * parse.c (next_statement) : If ST_GET_FCN_CHARACTERISTICS is + seen, check for a statement label and, if present, delete it + and set the locus to the start of the statement. + +2008-01-22 Paul Thomas + + PR fortran/34875 + * trans-io.c (gfc_trans_transfer): If the array reference in a + read has a vector subscript, use gfc_conv_subref_array_arg to + copy back the temporary. + +2008-01-22 Tobias Burnus + + PR fortran/34848 + * interface.c (compare_actual_formal): Fix adding type + to missing_arg_type for absent optional arguments. + +2008-01-22 Tobias Burnus + + PR fortran/34907 + * parse.c (parse_spec): Change = into ==. + +2008-01-22 Daniel Franke + + PR fortran/34915 + * expr.c (check_elemental): Fix check for valid data types. + +2008-01-22 Tobias Burnus + + PR fortran/34899 + * scanner.c (load_line): Support continuation lines. + * invoke.texi (-Wtabs): Document this. + +2008-01-22 Paul Thomas + + PR fortran/34896 + * module.c (read_module): Set use_rename attribute. + +2007-01-21 Tobias Burnus + + PR fortran/34901 + * interface.c (compare_parameter): Improved error message + for arguments of same type and mismatched kinds. + +2008-01-20 Paul Thomas + + PR fortran/34861 + * resolve.c (resolve_entries): Do not do an array bounds check + if the result symbols are the same. + + PR fortran/34854 + * module.c (read_module) : Hide the symtree of the previous + version of the symbol if this symbol is renamed. + +2008-01-20 Paul Thomas + + PR fortran/34784 + * array.c (gfc_check_constructor_type): Clear the expression ts + so that the checking starts from the deepest level of array + constructor. + * primary.c (match_varspec): If an unknown type is changed to + default character and the attempt to match a substring fails, + change it back to unknown. + + PR fortran/34785 + * trans-array.c (gfc_add_loop_ss_code) : If ss->string_length is + NULL for an array constructor, use the cl.length expression to + build it. + (gfc_conv_array_parameter): Change call to gfc_evaluate_now to + a tree assignment. + +2008-01-19 Thomas Koenig + + PR fortran/34817 + PR fortran/34838 + * iresolve.c (gfc_resolve_all): Remove conversion of mask + argument to kind=1 by removing call to resolve_mask_arg(). + (gfc_resolve_any): Likewise. + +2008-01-19 Tobias Burnus + + PR fortran/34760 + * primary.c (match_variable): Handle FL_UNKNOWN without + uneducated guessing. + (match_variable): Improve error message. + +2008-01-18 Tobias Burnus + + PR fortran/32616 + * interface.c (get_expr_storage_size): Return storage size + for array element designators. + (compare_actual_formal): Reject unequal string sizes for + assumed-shape dummy arguments. And fix error message for + array-sections with vector subscripts. + +2008-01-17 Jerry DeLisle + + PR fortran/34556 + * simplify.c (is_constant_array_expr): New static function that returns + true if the given expression is an array and is constant. + (gfc_simplify_reshape): Use new function. + +2008-01-17 H.J. Lu + + PR fortran/33375 + * symbol.c (free_common_tree): Renamed to ... + (gfc_free_common_tree): This. Remove static. + (gfc_free_namespace): Updated. + + * gfortran.h (gfc_free_common_tree): New. + + * match.c (gfc_match_common): Call gfc_free_common_tree () with + gfc_current_ns->common_root and set gfc_current_ns->common_root + to NULL on syntax error. + +2008-01-18 Richard Sandiford + + PR fortran/34686 + * trans-expr.c (gfc_conv_function_call): Use proper + type for returned character pointers. + +2008-01-17 Paul Thomas + + PR fortran/34429 + PR fortran/34431 + PR fortran/34471 + * decl.c : Remove gfc_function_kind_locus and + gfc_function_type_locus. Add gfc_matching_function. + (match_char_length): If matching a function and the length + does not match, return MATCH_YES and try again later. + (gfc_match_kind_spec): The same. + (match_char_kind): The same. + (gfc_match_type_spec): The same for numeric and derived types. + (match_prefix): Rename as gfc_match_prefix. + (gfc_match_function_decl): Except for function valued character + lengths, defer applying kind, type and charlen info until the + end of specification block. + gfortran.h (gfc_statement): Add ST_GET_FCN_CHARACTERISTICS. + parse.c (decode_specification_statement): New function. + (decode_statement): Call it when a function has kind = -1. Set + and reset gfc_matching function, as function statement is being + matched. + (match_deferred_characteristics): Simplify with a single call + to gfc_match_prefix. Do appropriate error handling. In any + case, make sure that kind = -1 is reset or corrected. + (parse_spec): Call above on seeing ST_GET_FCN_CHARACTERISTICS. + Throw an error if kind = -1 after last specification statement. + parse.h : Prototype for gfc_match_prefix. + +2008-01-16 Tobias Burnus + + PR fortran/34796 + * interface.c (compare_parameter): Allow AS_DEFERRED array + elements and reject attr.pointer array elemenents. + (get_expr_storage_size): Return storage size of elements of + assumed-shape and pointer arrays. + +2008-01-15 Sebastian Pop + + * f95-lang.c (gfc_init_builtin_functions): Initialize GOMP builtins + for flag_tree_parallelize_loops. + +2008-01-15 Thomas Koenig + + PR libfortran/34671 + * iresolve.c (gfc_resolve_all): Call resolve_mask_arg. + (gfc_resolve_any): Likewise. + (gfc_resolve_count): Likewise. Don't append kind of + argument to function name. + +2008-01-13 Tobias Burnus + + PR fortran/34665 + * resolve.c (resolve_actual_arglist): For expressions, + also check for assume-sized arrays. + * interface.c (compare_parameter): Move F2003 character checks + here, print error messages here, reject elements of + assumed-shape array as argument to dummy arrays. + (compare_actual_formal): Update for the changes above. + +2008-01-13 Tobias Burnus + + PR fortran/34763 + * decl.c (contained_procedure): Only check directly preceeding state. + +2008-01-13 Tobias Burnus + + PR fortran/34759 + * check.c (gfc_check_shape): Accept array ranges of + assumed-size arrays. + +2008-01-12 Jerry DeLisle + + PR fortran/34432 + * match.c (gfc_match_name): Don't error if leading character is a '(', + just return MATCH_NO. + +2008-01-11 Jerry DeLisle + + PR fortran/34722 + * trans-io.c (create_dummy_iostat): Commit the symbol. + +2008-01-11 Paul Thomas + + PR fortran/34537 + * simplify.c (gfc_simplify_transfer): Return NULL if the size + of the element is unavailable and only assign character length + to the result, if 'mold' is constant. + +2008-01-10 Paul Thomas + + PR fortran/34396 + * trans-array.c (gfc_trans_array_ctor_element): Use gfc_trans_string_copy + to assign strings and perform bounds checks on the string length. + (get_array_ctor_strlen): Remove bounds checking. + (gfc_trans_array_constructor): Initialize string length checking. + * trans-array.h : Add prototype for gfc_trans_string_copy. + +2008-01-08 Richard Guenther + + PR fortran/34706 + PR tree-optimization/34683 + * trans-types.c (gfc_get_array_type_bounds): Use an array type + with known size for accesses if that is known. + +2008-01-08 Paul Thomas + + PR fortran/34476 + * expr.c (find_array_element): Check that the array bounds are + constant before using them. Use lower, as well as upper bound. + (check_restricted): Allow implied index variable. + +2008-01-08 Paul Thomas + + PR fortran/34681 + * trans_array.c (gfc_trans_deferred_array): Do not null the + data pointer on entering scope, nor deallocate it on leaving + scope, if the symbol has the 'save' attribute. + + PR fortran/34704 + * trans_decl.c (gfc_finish_var_decl): Derived types with + allocatable components and an initializer must be TREE_STATIC. + +2008-01-07 Paul Thomas + + PR fortran/34672 + * module.c (write_generic): Rewrite completely. + (write_module): Change call to write_generic. + +2008-01-06 Jerry DeLisle + + PR fortran/34659 + * scanner.c (load_line): Do not count ' ' as printable when checking for + continuations. + +2008-01-06 Paul Thomas + + PR fortran/34545 + * module.c (load_needed): If the namespace has no proc_name + give it the module symbol. + +2008-01-06 Jerry DeLisle + + PR fortran/34387 + * trans-expr.c (gfc_conv_missing_dummy): Use a temporary to type convert + the dummy variable expression, test for NULL, and pass the variable + address to the called function. + +2007-01-06 Tobias Burnus + + PR fortran/34658 + * match.c (gfc_match_common): Remove blank common in + DATA BLOCK warning. + * resolve.c (resolve_common_vars): New function. + (resolve_common_blocks): Move checks to resolve_common_vars + and invoke that function. + (resolve_types): Call resolve_common_vars for blank commons. + +2008-01-06 Tobias Burnus + + PR fortran/34655 + * resolve.c (resolve_equivalence_derived): Reject derived types with + default initialization if equivalenced with COMMON variable. + +2008-01-06 Tobias Burnus + + PR fortran/34654 + * io.c (check_io_constraints): Disallow unformatted I/O for + internal units. + +2008-01-06 Tobias Burnus + + PR fortran/34660 + * resolve.c (resolve_formal_arglist): Reject dummy procedure in + ELEMENTAL functions. + +2008-01-06 Tobias Burnus + + PR fortran/34662 + * interface.c (compare_actual_formal): Reject parameter + actual to intent(out) dummy. + +2008-01-04 Tobias Burnus + + PR fortran/34557 + * primary.c (match_varspec): Gobble whitespace before + checking for '('. diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog.ptr b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog.ptr new file mode 100644 index 0000000000..56bca5b395 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog.ptr @@ -0,0 +1,11 @@ +2007-05-15 Andrew Pinski + + * trans-intrinsic.c (gfc_conv_intrinsic_repeat): Use + POINTER_PLUS_EXPR instead of PLUS_EXPR for pointer addition. + +2007-05-07 Andrew Pinski + + * trans-expr.c (gfc_trans_string_copy): Create + POINTER_PLUS_EXPR instead of a PLUS_EXPR + for pointer types. + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/Make-lang.in b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/Make-lang.in new file mode 100644 index 0000000000..1600d18b36 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/Make-lang.in @@ -0,0 +1,341 @@ +# -*- makefile -*- +# Top level makefile fragment for GNU gfortran, the GNU Fortran 95 compiler. +# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software +# Foundation, Inc. +# Contributed by Paul Brook + +#This file is part of GCC. + +#GCC 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 3, or (at your option) +#any later version. + +#GCC 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 GCC; see the file COPYING3. If not see +#. + +# This file provides the language dependent support in the main Makefile. +# Each language makefile fragment must provide the following targets: +# +# foo.all.cross, foo.start.encap, foo.rest.encap, +# foo.install-common, foo.install-man, foo.install-info, foo.install-pdf, +# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall, +# foo.mostlyclean, foo.clean, foo.distclean, +# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4 +# +# where `foo' is the name of the language. +# +# It should also provide rules for: +# +# - making any compiler driver (eg: gfortran) +# - the compiler proper (eg: f951) +# - define the names for selecting the language in LANGUAGES. +# $(srcdir) must be set to the gcc/ source directory (*not* gcc/fortran/). + +# Actual name to use when installing a native compiler. +GFORTRAN_INSTALL_NAME := $(shell echo gfortran|sed '$(program_transform_name)') +GFORTRAN_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo gfortran|sed '$(program_transform_name)') + +#^L + +# Use strict warnings for this front end. +fortran-warn = $(STRICT_WARN) + +# These are the groups of object files we have. The F95_PARSER_OBJS are +# all the front end files, the F95_OBJS are the files for the translation +# from the parse tree to GENERIC + +F95_PARSER_OBJS = fortran/arith.o fortran/array.o fortran/bbt.o \ + fortran/check.o fortran/cpp.o fortran/data.o fortran/decl.o \ + fortran/dump-parse-tree.o fortran/error.o fortran/expr.o \ + fortran/interface.o fortran/intrinsic.o fortran/io.o fortran/iresolve.o \ + fortran/match.o fortran/matchexp.o fortran/misc.o fortran/module.o \ + fortran/openmp.o fortran/options.o fortran/parse.o fortran/primary.o \ + fortran/resolve.o fortran/scanner.o fortran/simplify.o fortran/st.o \ + fortran/symbol.o fortran/target-memory.o + +F95_OBJS = $(F95_PARSER_OBJS) $(FORTRAN_TARGET_OBJS) \ + fortran/convert.o fortran/dependency.o fortran/f95-lang.o \ + fortran/trans.o fortran/trans-array.o fortran/trans-common.o \ + fortran/trans-const.o fortran/trans-decl.o fortran/trans-expr.o \ + fortran/trans-intrinsic.o fortran/trans-io.o fortran/trans-openmp.o \ + fortran/trans-stmt.o fortran/trans-types.o + +fortran_OBJS = $(F95_OBJS) gfortranspec.o + +# +# Define the names for selecting gfortran in LANGUAGES. +fortran: f951$(exeext) + +# Tell GNU make to ignore files by these names if they exist. +.PHONY: fortran + +gfortranspec.o: $(srcdir)/fortran/gfortranspec.c $(SYSTEM_H) $(TM_H) $(GCC_H) \ + $(CONFIG_H) coretypes.h intl.h + (SHLIB_LINK='$(SHLIB_LINK)'; \ + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(DRIVER_DEFINES) \ + $(INCLUDES) $(srcdir)/fortran/gfortranspec.c) + +# Create the compiler driver gfortran. +GFORTRAN_D_OBJS = $(GCC_OBJS) gfortranspec.o version.o prefix.o intl.o +gfortran$(exeext): $(GFORTRAN_D_OBJS) $(EXTRA_GCC_OBJS) $(LIBDEPS) + $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ + $(GFORTRAN_D_OBJS) $(EXTRA_GCC_OBJS) $(LIBS) + +# Create a version of the gfortran driver which calls the cross-compiler. +gfortran-cross$(exeext): gfortran$(exeext) + -rm -f gfortran-cross$(exeext) + cp gfortran$(exeext) gfortran-cross$(exeext) + +# The compiler itself is called f951. +f951$(exeext): $(F95_OBJS) \ + $(BACKEND) $(LIBDEPS) attribs.o + $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ + $(F95_OBJS) $(BACKEND) $(LIBS) attribs.o $(BACKENDLIBS) + +gt-fortran-trans.h : s-gtype; @true +# +# Build hooks: + +fortran.all.cross: gfortran-cross$(exeext) + +fortran.start.encap: gfortran$(exeext) +fortran.rest.encap: + +fortran.srcinfo: doc/gfortran.info + -cp -p $^ $(srcdir)/fortran + +fortran.tags: force + cd $(srcdir)/fortran; etags -o TAGS.sub *.c *.h; \ + etags --include TAGS.sub --include ../TAGS.sub + +fortran.info: doc/gfortran.info doc/gfc-internals.info +fortran.dvi: doc/gfortran.dvi doc/gfc-internals.dvi +fortran.html: $(build_htmldir)/gfortran/index.html + +F95_PDFFILES = doc/gfortran.pdf + +fortran.pdf: $(F95_PDFFILES) doc/gfc-internals.pdf + +fortran.install-pdf: $(F95_PDFFILES) + @$(NORMAL_INSTALL) + test -z "$(pdfdir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc" + @list='$(F95_PDFFILES)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(pdf__strip_dir) \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \ + done + +F95_MANFILES = doc/gfortran.1 + +fortran.man: $(F95_MANFILES) + +fortran.srcman: $(F95_MANFILES) + -cp -p $^ $(srcdir)/doc + +fortran.srcextra: + +check-f95 : check-gfortran +check-fortran : check-gfortran +check-f95-subtargets : check-gfortran-subtargets +check-fortran-subtargets : check-gfortran-subtargets +lang_checks += check-gfortran +lang_checks_parallelized += check-gfortran +# For description see comment above check_gcc_parallelize in gcc/Makefile.in. +check_gfortran_parallelize = dg.exp=gfortran.dg/\[a-cA-C\]* \ + dg.exp=gfortran.dg/\[d-mD-M\]* \ + dg.exp=gfortran.dg/\[n-zN-Z0-9\]* + +# GFORTRAN documentation. +GFORTRAN_TEXI = \ + $(srcdir)/fortran/gfortran.texi \ + $(srcdir)/fortran/intrinsic.texi \ + $(srcdir)/fortran/invoke.texi \ + $(srcdir)/doc/include/fdl.texi \ + $(srcdir)/doc/include/gpl_v3.texi \ + $(srcdir)/doc/include/funding.texi \ + $(srcdir)/doc/include/gcc-common.texi \ + gcc-vers.texi + +doc/gfortran.info: $(GFORTRAN_TEXI) + if [ x$(BUILD_INFO) = xinfo ]; then \ + rm -f doc/gfortran.info-*; \ + $(MAKEINFO) -I $(srcdir)/doc/include -I $(srcdir)/fortran \ + -o $@ $<; \ + else true; fi + +doc/gfortran.dvi: $(GFORTRAN_TEXI) + $(TEXI2DVI) -I $(srcdir)/fortran -I $(abs_docdir)/include -o $@ $< + +doc/gfortran.pdf: $(GFORTRAN_TEXI) + $(TEXI2PDF) -I $(srcdir)/fortran -I $(abs_docdir)/include -o $@ $< + +$(build_htmldir)/gfortran/index.html: $(GFORTRAN_TEXI) + $(mkinstalldirs) $(@D) + rm -f $(@D)/* + $(TEXI2HTML) -I $(gcc_docdir)/include -I $(srcdir)/fortran -o $(@D) $< + +.INTERMEDIATE: gfortran.pod + +gfortran.pod: $(GFORTRAN_TEXI) + -$(TEXI2POD) -DBUGURL="$(BUGURL_TEXI)" \ + < $(srcdir)/fortran/invoke.texi > $@ + +# GFORTRAN internals documentation. +GFC_INTERNALS_TEXI = \ + $(srcdir)/fortran/gfc-internals.texi \ + $(srcdir)/doc/include/fdl.texi \ + $(srcdir)/doc/include/gcc-common.texi \ + gcc-vers.texi + +doc/gfc-internals.info: $(GFC_INTERNALS_TEXI) + if [ x$(BUILD_INFO) = xinfo ]; then \ + rm -f doc/gfc-internals.info-*; \ + $(MAKEINFO) -I $(srcdir)/doc/include -I $(srcdir)/fortran \ + -o $@ $<; \ + else true; fi + +doc/gfc-internals.dvi: $(GFC_INTERNALS_TEXI) + $(TEXI2DVI) -I $(srcdir)/fortran -I $(abs_docdir)/include -o $@ $< + +doc/gfc-internals.pdf: $(GFC_INTERNALS_TEXI) + $(TEXI2PDF) -I $(srcdir)/fortran -I $(abs_docdir)/include -o $@ $< + +# Create or recreate the gfortran private include file directory. +install-finclude-dir: installdirs + $(mkinstalldirs) -m 0755 $(DESTDIR)$(libsubdir)/finclude +# +# Install hooks: +# f951 is installed elsewhere as part of $(COMPILERS). + +# Install the driver program as $(target)-gfortran +# and also as either gfortran (if native) or $(tooldir)/bin/gfortran. +fortran.install-common: install-finclude-dir installdirs + -if [ -f f951$(exeext) ] ; then \ + rm -f $(DESTDIR)$(bindir)/$(GFORTRAN_INSTALL_NAME)$(exeext); \ + $(INSTALL_PROGRAM) gfortran$(exeext) $(DESTDIR)$(bindir)/$(GFORTRAN_INSTALL_NAME)$(exeext); \ + chmod a+x $(DESTDIR)$(bindir)/$(GFORTRAN_INSTALL_NAME)$(exeext); \ + if [ -f gfortran-cross$(exeext) ] ; then \ + if [ -d $(DESTDIR)$(gcc_tooldir)/bin/. ] ; then \ + rm -f $(DESTDIR)$(gcc_tooldir)/bin/gfortran$(exeext); \ + $(INSTALL_PROGRAM) gfortran-cross$(exeext) $(DESTDIR)$(gcc_tooldir)/bin/gfortran$(exeext); \ + else true; fi; \ + else \ + rm -f $(DESTDIR)$(bindir)/$(GFORTRAN_TARGET_INSTALL_NAME)$(exeext); \ + $(LN) $(DESTDIR)$(bindir)/$(GFORTRAN_INSTALL_NAME)$(exeext) $(DESTDIR)$(bindir)/$(GFORTRAN_TARGET_INSTALL_NAME)$(exeext); \ + fi ; \ + fi + +fortran.install-info: $(DESTDIR)$(infodir)/gfortran.info + +fortran.install-man: $(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext) + +$(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext): doc/gfortran.1 \ + installdirs + -rm -f $@ + -$(INSTALL_DATA) $< $@ + -chmod a-x $@ + +fortran.uninstall: + if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ + echo " install-info --delete --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/gfortran.info"; \ + install-info --delete --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/gfortran.info || : ; \ + else : ; fi; \ + rm -rf $(DESTDIR)$(bindir)/$(GFORTRAN_INSTALL_NAME)$(exeext); \ + rm -rf $(DESTDIR)$(man1dir)/$(GFORTRAN_INSTALL_NAME)$(man1ext); \ + rm -rf $(DESTDIR)$(bindir)/$(GFORTRAN_TARGET_INSTALL_NAME)$(exeext); \ + rm -rf $(DESTDIR)$(infodir)/gfortran.info* + +# +# Clean hooks: +# A lot of the ancillary files are deleted by the main makefile. +# We just have to delete files specific to us. + +fortran.mostlyclean: + -rm -f f951$(exeext) + -rm -f fortran/*.o + +fortran.clean: +fortran.distclean: + -rm -f fortran/config.status fortran/Makefile + +fortran.extraclean: +fortran.maintainer-clean: + -rm -f doc/gfortran.info* fortran/gfortran.*aux + -rm -f $(docobjdir)/gfortran.1 + +# +# Stage hooks: +# The toplevel makefile has already created stage?/fortran at this point. + +fortran.stage1: stage1-start + -mv fortran/*$(objext) stage1/fortran +fortran.stage2: stage2-start + -mv fortran/*$(objext) stage2/fortran +fortran.stage3: stage3-start + -mv fortran/*$(objext) stage3/fortran +fortran.stage4: stage4-start + -mv fortran/*$(objext) stage4/fortran +fortran.stageprofile: stageprofile-start + -mv fortran/*$(objext) stageprofile/fortran +fortran.stagefeedback: stageprofile-start + -mv fortran/*$(objext) stagefeedback/fortran + +# +# .o: .h dependencies. + +# Everything depends on gfortran.h, but only a few files depend on +# the other headers. So at some point we'll have to split out +# which objects depend on what. FIXME +# TODO: Add dependencies on the backend/tree header files + +$(F95_PARSER_OBJS): fortran/gfortran.h fortran/libgfortran.h \ + fortran/intrinsic.h fortran/match.h \ + fortran/parse.h fortran/arith.h fortran/target-memory.h \ + $(CONFIG_H) $(SYSTEM_H) $(TM_H) $(TM_P_H) coretypes.h \ + $(RTL_H) $(TREE_H) $(TREE_DUMP_H) $(GGC_H) $(EXPR_H) \ + $(FLAGS_H) output.h $(DIAGNOSTIC_H) errors.h $(FUNCTION_H) +fortran/openmp.o: pointer-set.h $(TARGET_H) toplev.h + +GFORTRAN_TRANS_DEPS = fortran/gfortran.h fortran/libgfortran.h \ + fortran/intrinsic.h fortran/trans-array.h \ + fortran/trans-const.h fortran/trans-const.h fortran/trans.h \ + fortran/trans-stmt.h fortran/trans-types.h \ + $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(TM_H) coretypes.h $(GGC_H) + +fortran/f95-lang.o: $(GFORTRAN_TRANS_DEPS) fortran/mathbuiltins.def \ + gt-fortran-f95-lang.h gtype-fortran.h $(CGRAPH_H) $(TARGET_H) fortran/cpp.h \ + $(BUILTINS_DEF) fortran/types.def +fortran/scanner.o: toplev.h fortran/cpp.h +fortran/convert.o: $(GFORTRAN_TRANS_DEPS) +fortran/trans.o: $(GFORTRAN_TRANS_DEPS) tree-iterator.h +fortran/trans-decl.o: $(GFORTRAN_TRANS_DEPS) gt-fortran-trans-decl.h \ + $(CGRAPH_H) $(TARGET_H) $(FUNCTION_H) $(FLAGS_H) $(RTL_H) $(GIMPLE_H) \ + $(TREE_DUMP_H) debug.h +fortran/trans-types.o: $(GFORTRAN_TRANS_DEPS) gt-fortran-trans-types.h \ + $(REAL_H) toplev.h $(TARGET_H) $(FLAGS_H) dwarf2out.h +fortran/trans-const.o: $(GFORTRAN_TRANS_DEPS) +fortran/trans-expr.o: $(GFORTRAN_TRANS_DEPS) fortran/dependency.h +fortran/trans-stmt.o: $(GFORTRAN_TRANS_DEPS) fortran/dependency.h +fortran/trans-openmp.o: $(GFORTRAN_TRANS_DEPS) +fortran/trans-io.o: $(GFORTRAN_TRANS_DEPS) gt-fortran-trans-io.h \ + fortran/ioparm.def +fortran/trans-array.o: $(GFORTRAN_TRANS_DEPS) +fortran/trans-intrinsic.o: $(GFORTRAN_TRANS_DEPS) fortran/mathbuiltins.def \ + gt-fortran-trans-intrinsic.h +fortran/dependency.o: $(GFORTRAN_TRANS_DEPS) fortran/dependency.h +fortran/trans-common.o: $(GFORTRAN_TRANS_DEPS) $(TARGET_H) $(RTL_H) +fortran/resolve.o: fortran/dependency.h fortran/data.h fortran/target-memory.h +fortran/data.o: fortran/data.h +fortran/options.o: $(PARAMS_H) $(TARGET_H) fortran/cpp.h +fortran/cpp.o: fortran/cpp.c $(BASEVER) incpath.h incpath.o + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) -DBASEVER=$(BASEVER_s) \ + $< $(OUTPUT_OPTION) diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/arith.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/arith.c new file mode 100644 index 0000000000..7440be3a23 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/arith.c @@ -0,0 +1,2591 @@ +/* Compiler arithmetic + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* Since target arithmetic must be done on the host, there has to + be some way of evaluating arithmetic expressions as the host + would evaluate them. We use the GNU MP library and the MPFR + library to do arithmetic, and this file provides the interface. */ + +#include "config.h" +#include "system.h" +#include "flags.h" +#include "gfortran.h" +#include "arith.h" +#include "target-memory.h" + +/* MPFR does not have a direct replacement for mpz_set_f() from GMP. + It's easily implemented with a few calls though. */ + +void +gfc_mpfr_to_mpz (mpz_t z, mpfr_t x, locus *where) +{ + mp_exp_t e; + + if (mpfr_inf_p (x) || mpfr_nan_p (x)) + { + gfc_error ("Conversion of an Infinity or Not-a-Number at %L " + "to INTEGER", where); + mpz_set_ui (z, 0); + return; + } + + e = mpfr_get_z_exp (z, x); + + if (e > 0) + mpz_mul_2exp (z, z, e); + else + mpz_tdiv_q_2exp (z, z, -e); +} + + +/* Set the model number precision by the requested KIND. */ + +void +gfc_set_model_kind (int kind) +{ + int index = gfc_validate_kind (BT_REAL, kind, false); + int base2prec; + + base2prec = gfc_real_kinds[index].digits; + if (gfc_real_kinds[index].radix != 2) + base2prec *= gfc_real_kinds[index].radix / 2; + mpfr_set_default_prec (base2prec); +} + + +/* Set the model number precision from mpfr_t x. */ + +void +gfc_set_model (mpfr_t x) +{ + mpfr_set_default_prec (mpfr_get_prec (x)); +} + + +/* Given an arithmetic error code, return a pointer to a string that + explains the error. */ + +static const char * +gfc_arith_error (arith code) +{ + const char *p; + + switch (code) + { + case ARITH_OK: + p = _("Arithmetic OK at %L"); + break; + case ARITH_OVERFLOW: + p = _("Arithmetic overflow at %L"); + break; + case ARITH_UNDERFLOW: + p = _("Arithmetic underflow at %L"); + break; + case ARITH_NAN: + p = _("Arithmetic NaN at %L"); + break; + case ARITH_DIV0: + p = _("Division by zero at %L"); + break; + case ARITH_INCOMMENSURATE: + p = _("Array operands are incommensurate at %L"); + break; + case ARITH_ASYMMETRIC: + p = + _("Integer outside symmetric range implied by Standard Fortran at %L"); + break; + default: + gfc_internal_error ("gfc_arith_error(): Bad error code"); + } + + return p; +} + + +/* Get things ready to do math. */ + +void +gfc_arith_init_1 (void) +{ + gfc_integer_info *int_info; + gfc_real_info *real_info; + mpfr_t a, b; + int i; + + mpfr_set_default_prec (128); + mpfr_init (a); + + /* Convert the minimum and maximum values for each kind into their + GNU MP representation. */ + for (int_info = gfc_integer_kinds; int_info->kind != 0; int_info++) + { + /* Huge */ + mpz_init (int_info->huge); + mpz_set_ui (int_info->huge, int_info->radix); + mpz_pow_ui (int_info->huge, int_info->huge, int_info->digits); + mpz_sub_ui (int_info->huge, int_info->huge, 1); + + /* These are the numbers that are actually representable by the + target. For bases other than two, this needs to be changed. */ + if (int_info->radix != 2) + gfc_internal_error ("Fix min_int calculation"); + + /* See PRs 13490 and 17912, related to integer ranges. + The pedantic_min_int exists for range checking when a program + is compiled with -pedantic, and reflects the belief that + Standard Fortran requires integers to be symmetrical, i.e. + every negative integer must have a representable positive + absolute value, and vice versa. */ + + mpz_init (int_info->pedantic_min_int); + mpz_neg (int_info->pedantic_min_int, int_info->huge); + + mpz_init (int_info->min_int); + mpz_sub_ui (int_info->min_int, int_info->pedantic_min_int, 1); + + /* Range */ + mpfr_set_z (a, int_info->huge, GFC_RND_MODE); + mpfr_log10 (a, a, GFC_RND_MODE); + mpfr_trunc (a, a); + int_info->range = (int) mpfr_get_si (a, GFC_RND_MODE); + } + + mpfr_clear (a); + + for (real_info = gfc_real_kinds; real_info->kind != 0; real_info++) + { + gfc_set_model_kind (real_info->kind); + + mpfr_init (a); + mpfr_init (b); + + /* huge(x) = (1 - b**(-p)) * b**(emax-1) * b */ + /* 1 - b**(-p) */ + mpfr_init (real_info->huge); + mpfr_set_ui (real_info->huge, 1, GFC_RND_MODE); + mpfr_set_ui (a, real_info->radix, GFC_RND_MODE); + mpfr_pow_si (a, a, -real_info->digits, GFC_RND_MODE); + mpfr_sub (real_info->huge, real_info->huge, a, GFC_RND_MODE); + + /* b**(emax-1) */ + mpfr_set_ui (a, real_info->radix, GFC_RND_MODE); + mpfr_pow_ui (a, a, real_info->max_exponent - 1, GFC_RND_MODE); + + /* (1 - b**(-p)) * b**(emax-1) */ + mpfr_mul (real_info->huge, real_info->huge, a, GFC_RND_MODE); + + /* (1 - b**(-p)) * b**(emax-1) * b */ + mpfr_mul_ui (real_info->huge, real_info->huge, real_info->radix, + GFC_RND_MODE); + + /* tiny(x) = b**(emin-1) */ + mpfr_init (real_info->tiny); + mpfr_set_ui (real_info->tiny, real_info->radix, GFC_RND_MODE); + mpfr_pow_si (real_info->tiny, real_info->tiny, + real_info->min_exponent - 1, GFC_RND_MODE); + + /* subnormal (x) = b**(emin - digit) */ + mpfr_init (real_info->subnormal); + mpfr_set_ui (real_info->subnormal, real_info->radix, GFC_RND_MODE); + mpfr_pow_si (real_info->subnormal, real_info->subnormal, + real_info->min_exponent - real_info->digits, GFC_RND_MODE); + + /* epsilon(x) = b**(1-p) */ + mpfr_init (real_info->epsilon); + mpfr_set_ui (real_info->epsilon, real_info->radix, GFC_RND_MODE); + mpfr_pow_si (real_info->epsilon, real_info->epsilon, + 1 - real_info->digits, GFC_RND_MODE); + + /* range(x) = int(min(log10(huge(x)), -log10(tiny)) */ + mpfr_log10 (a, real_info->huge, GFC_RND_MODE); + mpfr_log10 (b, real_info->tiny, GFC_RND_MODE); + mpfr_neg (b, b, GFC_RND_MODE); + + /* a = min(a, b) */ + mpfr_min (a, a, b, GFC_RND_MODE); + mpfr_trunc (a, a); + real_info->range = (int) mpfr_get_si (a, GFC_RND_MODE); + + /* precision(x) = int((p - 1) * log10(b)) + k */ + mpfr_set_ui (a, real_info->radix, GFC_RND_MODE); + mpfr_log10 (a, a, GFC_RND_MODE); + mpfr_mul_ui (a, a, real_info->digits - 1, GFC_RND_MODE); + mpfr_trunc (a, a); + real_info->precision = (int) mpfr_get_si (a, GFC_RND_MODE); + + /* If the radix is an integral power of 10, add one to the precision. */ + for (i = 10; i <= real_info->radix; i *= 10) + if (i == real_info->radix) + real_info->precision++; + + mpfr_clears (a, b, NULL); + } +} + + +/* Clean up, get rid of numeric constants. */ + +void +gfc_arith_done_1 (void) +{ + gfc_integer_info *ip; + gfc_real_info *rp; + + for (ip = gfc_integer_kinds; ip->kind; ip++) + { + mpz_clear (ip->min_int); + mpz_clear (ip->pedantic_min_int); + mpz_clear (ip->huge); + } + + for (rp = gfc_real_kinds; rp->kind; rp++) + mpfr_clears (rp->epsilon, rp->huge, rp->tiny, rp->subnormal, NULL); +} + + +/* Given a wide character value and a character kind, determine whether + the character is representable for that kind. */ +bool +gfc_check_character_range (gfc_char_t c, int kind) +{ + /* As wide characters are stored as 32-bit values, they're all + representable in UCS=4. */ + if (kind == 4) + return true; + + if (kind == 1) + return c <= 255 ? true : false; + + gcc_unreachable (); +} + + +/* Given an integer and a kind, make sure that the integer lies within + the range of the kind. Returns ARITH_OK, ARITH_ASYMMETRIC or + ARITH_OVERFLOW. */ + +arith +gfc_check_integer_range (mpz_t p, int kind) +{ + arith result; + int i; + + i = gfc_validate_kind (BT_INTEGER, kind, false); + result = ARITH_OK; + + if (pedantic) + { + if (mpz_cmp (p, gfc_integer_kinds[i].pedantic_min_int) < 0) + result = ARITH_ASYMMETRIC; + } + + + if (gfc_option.flag_range_check == 0) + return result; + + if (mpz_cmp (p, gfc_integer_kinds[i].min_int) < 0 + || mpz_cmp (p, gfc_integer_kinds[i].huge) > 0) + result = ARITH_OVERFLOW; + + return result; +} + + +/* Given a real and a kind, make sure that the real lies within the + range of the kind. Returns ARITH_OK, ARITH_OVERFLOW or + ARITH_UNDERFLOW. */ + +static arith +gfc_check_real_range (mpfr_t p, int kind) +{ + arith retval; + mpfr_t q; + int i; + + i = gfc_validate_kind (BT_REAL, kind, false); + + gfc_set_model (p); + mpfr_init (q); + mpfr_abs (q, p, GFC_RND_MODE); + + retval = ARITH_OK; + + if (mpfr_inf_p (p)) + { + if (gfc_option.flag_range_check != 0) + retval = ARITH_OVERFLOW; + } + else if (mpfr_nan_p (p)) + { + if (gfc_option.flag_range_check != 0) + retval = ARITH_NAN; + } + else if (mpfr_sgn (q) == 0) + { + mpfr_clear (q); + return retval; + } + else if (mpfr_cmp (q, gfc_real_kinds[i].huge) > 0) + { + if (gfc_option.flag_range_check == 0) + mpfr_set_inf (p, mpfr_sgn (p)); + else + retval = ARITH_OVERFLOW; + } + else if (mpfr_cmp (q, gfc_real_kinds[i].subnormal) < 0) + { + if (gfc_option.flag_range_check == 0) + { + if (mpfr_sgn (p) < 0) + { + mpfr_set_ui (p, 0, GFC_RND_MODE); + mpfr_set_si (q, -1, GFC_RND_MODE); + mpfr_copysign (p, p, q, GFC_RND_MODE); + } + else + mpfr_set_ui (p, 0, GFC_RND_MODE); + } + else + retval = ARITH_UNDERFLOW; + } + else if (mpfr_cmp (q, gfc_real_kinds[i].tiny) < 0) + { + mp_exp_t emin, emax; + int en; + + /* Save current values of emin and emax. */ + emin = mpfr_get_emin (); + emax = mpfr_get_emax (); + + /* Set emin and emax for the current model number. */ + en = gfc_real_kinds[i].min_exponent - gfc_real_kinds[i].digits + 1; + mpfr_set_emin ((mp_exp_t) en); + mpfr_set_emax ((mp_exp_t) gfc_real_kinds[i].max_exponent); + mpfr_check_range (q, 0, GFC_RND_MODE); + mpfr_subnormalize (q, 0, GFC_RND_MODE); + + /* Reset emin and emax. */ + mpfr_set_emin (emin); + mpfr_set_emax (emax); + + /* Copy sign if needed. */ + if (mpfr_sgn (p) < 0) + mpfr_neg (p, q, GMP_RNDN); + else + mpfr_set (p, q, GMP_RNDN); + } + + mpfr_clear (q); + + return retval; +} + + +/* Function to return a constant expression node of a given type and kind. */ + +gfc_expr * +gfc_constant_result (bt type, int kind, locus *where) +{ + gfc_expr *result; + + if (!where) + gfc_internal_error ("gfc_constant_result(): locus 'where' cannot be NULL"); + + result = gfc_get_expr (); + + result->expr_type = EXPR_CONSTANT; + result->ts.type = type; + result->ts.kind = kind; + result->where = *where; + + switch (type) + { + case BT_INTEGER: + mpz_init (result->value.integer); + break; + + case BT_REAL: + gfc_set_model_kind (kind); + mpfr_init (result->value.real); + break; + + case BT_COMPLEX: + gfc_set_model_kind (kind); + mpfr_init (result->value.complex.r); + mpfr_init (result->value.complex.i); + break; + + default: + break; + } + + return result; +} + + +/* Low-level arithmetic functions. All of these subroutines assume + that all operands are of the same type and return an operand of the + same type. The other thing about these subroutines is that they + can fail in various ways -- overflow, underflow, division by zero, + zero raised to the zero, etc. */ + +static arith +gfc_arith_not (gfc_expr *op1, gfc_expr **resultp) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_LOGICAL, op1->ts.kind, &op1->where); + result->value.logical = !op1->value.logical; + *resultp = result; + + return ARITH_OK; +} + + +static arith +gfc_arith_and (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2), + &op1->where); + result->value.logical = op1->value.logical && op2->value.logical; + *resultp = result; + + return ARITH_OK; +} + + +static arith +gfc_arith_or (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2), + &op1->where); + result->value.logical = op1->value.logical || op2->value.logical; + *resultp = result; + + return ARITH_OK; +} + + +static arith +gfc_arith_eqv (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2), + &op1->where); + result->value.logical = op1->value.logical == op2->value.logical; + *resultp = result; + + return ARITH_OK; +} + + +static arith +gfc_arith_neqv (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_LOGICAL, gfc_kind_max (op1, op2), + &op1->where); + result->value.logical = op1->value.logical != op2->value.logical; + *resultp = result; + + return ARITH_OK; +} + + +/* Make sure a constant numeric expression is within the range for + its type and kind. Note that there's also a gfc_check_range(), + but that one deals with the intrinsic RANGE function. */ + +arith +gfc_range_check (gfc_expr *e) +{ + arith rc; + arith rc2; + + switch (e->ts.type) + { + case BT_INTEGER: + rc = gfc_check_integer_range (e->value.integer, e->ts.kind); + break; + + case BT_REAL: + rc = gfc_check_real_range (e->value.real, e->ts.kind); + if (rc == ARITH_UNDERFLOW) + mpfr_set_ui (e->value.real, 0, GFC_RND_MODE); + if (rc == ARITH_OVERFLOW) + mpfr_set_inf (e->value.real, mpfr_sgn (e->value.real)); + if (rc == ARITH_NAN) + mpfr_set_nan (e->value.real); + break; + + case BT_COMPLEX: + rc = gfc_check_real_range (e->value.complex.r, e->ts.kind); + if (rc == ARITH_UNDERFLOW) + mpfr_set_ui (e->value.complex.r, 0, GFC_RND_MODE); + if (rc == ARITH_OVERFLOW) + mpfr_set_inf (e->value.complex.r, mpfr_sgn (e->value.complex.r)); + if (rc == ARITH_NAN) + mpfr_set_nan (e->value.complex.r); + + rc2 = gfc_check_real_range (e->value.complex.i, e->ts.kind); + if (rc == ARITH_UNDERFLOW) + mpfr_set_ui (e->value.complex.i, 0, GFC_RND_MODE); + if (rc == ARITH_OVERFLOW) + mpfr_set_inf (e->value.complex.i, mpfr_sgn (e->value.complex.i)); + if (rc == ARITH_NAN) + mpfr_set_nan (e->value.complex.i); + + if (rc == ARITH_OK) + rc = rc2; + break; + + default: + gfc_internal_error ("gfc_range_check(): Bad type"); + } + + return rc; +} + + +/* Several of the following routines use the same set of statements to + check the validity of the result. Encapsulate the checking here. */ + +static arith +check_result (arith rc, gfc_expr *x, gfc_expr *r, gfc_expr **rp) +{ + arith val = rc; + + if (val == ARITH_UNDERFLOW) + { + if (gfc_option.warn_underflow) + gfc_warning (gfc_arith_error (val), &x->where); + val = ARITH_OK; + } + + if (val == ARITH_ASYMMETRIC) + { + gfc_warning (gfc_arith_error (val), &x->where); + val = ARITH_OK; + } + + if (val != ARITH_OK) + gfc_free_expr (r); + else + *rp = r; + + return val; +} + + +/* It may seem silly to have a subroutine that actually computes the + unary plus of a constant, but it prevents us from making exceptions + in the code elsewhere. Used for unary plus and parenthesized + expressions. */ + +static arith +gfc_arith_identity (gfc_expr *op1, gfc_expr **resultp) +{ + *resultp = gfc_copy_expr (op1); + return ARITH_OK; +} + + +static arith +gfc_arith_uminus (gfc_expr *op1, gfc_expr **resultp) +{ + gfc_expr *result; + arith rc; + + result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where); + + switch (op1->ts.type) + { + case BT_INTEGER: + mpz_neg (result->value.integer, op1->value.integer); + break; + + case BT_REAL: + mpfr_neg (result->value.real, op1->value.real, GFC_RND_MODE); + break; + + case BT_COMPLEX: + mpfr_neg (result->value.complex.r, op1->value.complex.r, GFC_RND_MODE); + mpfr_neg (result->value.complex.i, op1->value.complex.i, GFC_RND_MODE); + break; + + default: + gfc_internal_error ("gfc_arith_uminus(): Bad basic type"); + } + + rc = gfc_range_check (result); + + return check_result (rc, op1, result, resultp); +} + + +static arith +gfc_arith_plus (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + gfc_expr *result; + arith rc; + + result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where); + + switch (op1->ts.type) + { + case BT_INTEGER: + mpz_add (result->value.integer, op1->value.integer, op2->value.integer); + break; + + case BT_REAL: + mpfr_add (result->value.real, op1->value.real, op2->value.real, + GFC_RND_MODE); + break; + + case BT_COMPLEX: + mpfr_add (result->value.complex.r, op1->value.complex.r, + op2->value.complex.r, GFC_RND_MODE); + + mpfr_add (result->value.complex.i, op1->value.complex.i, + op2->value.complex.i, GFC_RND_MODE); + break; + + default: + gfc_internal_error ("gfc_arith_plus(): Bad basic type"); + } + + rc = gfc_range_check (result); + + return check_result (rc, op1, result, resultp); +} + + +static arith +gfc_arith_minus (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + gfc_expr *result; + arith rc; + + result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where); + + switch (op1->ts.type) + { + case BT_INTEGER: + mpz_sub (result->value.integer, op1->value.integer, op2->value.integer); + break; + + case BT_REAL: + mpfr_sub (result->value.real, op1->value.real, op2->value.real, + GFC_RND_MODE); + break; + + case BT_COMPLEX: + mpfr_sub (result->value.complex.r, op1->value.complex.r, + op2->value.complex.r, GFC_RND_MODE); + + mpfr_sub (result->value.complex.i, op1->value.complex.i, + op2->value.complex.i, GFC_RND_MODE); + break; + + default: + gfc_internal_error ("gfc_arith_minus(): Bad basic type"); + } + + rc = gfc_range_check (result); + + return check_result (rc, op1, result, resultp); +} + + +static arith +gfc_arith_times (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + gfc_expr *result; + mpfr_t x, y; + arith rc; + + result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where); + + switch (op1->ts.type) + { + case BT_INTEGER: + mpz_mul (result->value.integer, op1->value.integer, op2->value.integer); + break; + + case BT_REAL: + mpfr_mul (result->value.real, op1->value.real, op2->value.real, + GFC_RND_MODE); + break; + + case BT_COMPLEX: + gfc_set_model (op1->value.complex.r); + mpfr_init (x); + mpfr_init (y); + + mpfr_mul (x, op1->value.complex.r, op2->value.complex.r, GFC_RND_MODE); + mpfr_mul (y, op1->value.complex.i, op2->value.complex.i, GFC_RND_MODE); + mpfr_sub (result->value.complex.r, x, y, GFC_RND_MODE); + + mpfr_mul (x, op1->value.complex.r, op2->value.complex.i, GFC_RND_MODE); + mpfr_mul (y, op1->value.complex.i, op2->value.complex.r, GFC_RND_MODE); + mpfr_add (result->value.complex.i, x, y, GFC_RND_MODE); + + mpfr_clears (x, y, NULL); + break; + + default: + gfc_internal_error ("gfc_arith_times(): Bad basic type"); + } + + rc = gfc_range_check (result); + + return check_result (rc, op1, result, resultp); +} + + +static arith +gfc_arith_divide (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + gfc_expr *result; + mpfr_t x, y, div; + arith rc; + + rc = ARITH_OK; + + result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where); + + switch (op1->ts.type) + { + case BT_INTEGER: + if (mpz_sgn (op2->value.integer) == 0) + { + rc = ARITH_DIV0; + break; + } + + mpz_tdiv_q (result->value.integer, op1->value.integer, + op2->value.integer); + break; + + case BT_REAL: + if (mpfr_sgn (op2->value.real) == 0 && gfc_option.flag_range_check == 1) + { + rc = ARITH_DIV0; + break; + } + + mpfr_div (result->value.real, op1->value.real, op2->value.real, + GFC_RND_MODE); + break; + + case BT_COMPLEX: + if (mpfr_sgn (op2->value.complex.r) == 0 + && mpfr_sgn (op2->value.complex.i) == 0 + && gfc_option.flag_range_check == 1) + { + rc = ARITH_DIV0; + break; + } + + gfc_set_model (op1->value.complex.r); + mpfr_init (x); + mpfr_init (y); + mpfr_init (div); + + mpfr_mul (x, op2->value.complex.r, op2->value.complex.r, GFC_RND_MODE); + mpfr_mul (y, op2->value.complex.i, op2->value.complex.i, GFC_RND_MODE); + mpfr_add (div, x, y, GFC_RND_MODE); + + mpfr_mul (x, op1->value.complex.r, op2->value.complex.r, GFC_RND_MODE); + mpfr_mul (y, op1->value.complex.i, op2->value.complex.i, GFC_RND_MODE); + mpfr_add (result->value.complex.r, x, y, GFC_RND_MODE); + mpfr_div (result->value.complex.r, result->value.complex.r, div, + GFC_RND_MODE); + + mpfr_mul (x, op1->value.complex.i, op2->value.complex.r, GFC_RND_MODE); + mpfr_mul (y, op1->value.complex.r, op2->value.complex.i, GFC_RND_MODE); + mpfr_sub (result->value.complex.i, x, y, GFC_RND_MODE); + mpfr_div (result->value.complex.i, result->value.complex.i, div, + GFC_RND_MODE); + + mpfr_clears (x, y, div, NULL); + break; + + default: + gfc_internal_error ("gfc_arith_divide(): Bad basic type"); + } + + if (rc == ARITH_OK) + rc = gfc_range_check (result); + + return check_result (rc, op1, result, resultp); +} + + +/* Compute the reciprocal of a complex number (guaranteed nonzero). */ + +static void +complex_reciprocal (gfc_expr *op) +{ + mpfr_t mod, tmp; + + gfc_set_model (op->value.complex.r); + mpfr_init (mod); + mpfr_init (tmp); + + mpfr_mul (mod, op->value.complex.r, op->value.complex.r, GFC_RND_MODE); + mpfr_mul (tmp, op->value.complex.i, op->value.complex.i, GFC_RND_MODE); + mpfr_add (mod, mod, tmp, GFC_RND_MODE); + + mpfr_div (op->value.complex.r, op->value.complex.r, mod, GFC_RND_MODE); + + mpfr_neg (op->value.complex.i, op->value.complex.i, GFC_RND_MODE); + mpfr_div (op->value.complex.i, op->value.complex.i, mod, GFC_RND_MODE); + + mpfr_clears (tmp, mod, NULL); +} + + +/* Raise a complex number to positive power (power > 0). + This function will modify the content of power. + + Use Binary Method, which is not an optimal but a simple and reasonable + arithmetic. See section 4.6.3, "Evaluation of Powers" of Donald E. Knuth, + "Seminumerical Algorithms", Vol. 2, "The Art of Computer Programming", + 3rd Edition, 1998. */ + +static void +complex_pow (gfc_expr *result, gfc_expr *base, mpz_t power) +{ + mpfr_t x_r, x_i, tmp, re, im; + + gfc_set_model (base->value.complex.r); + mpfr_init (x_r); + mpfr_init (x_i); + mpfr_init (tmp); + mpfr_init (re); + mpfr_init (im); + + /* res = 1 */ + mpfr_set_ui (result->value.complex.r, 1, GFC_RND_MODE); + mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE); + + /* x = base */ + mpfr_set (x_r, base->value.complex.r, GFC_RND_MODE); + mpfr_set (x_i, base->value.complex.i, GFC_RND_MODE); + + /* Macro for complex multiplication. We have to take care that + res_r/res_i and a_r/a_i can (and will) be the same variable. */ +#define CMULT(res_r,res_i,a_r,a_i,b_r,b_i) \ + mpfr_mul (re, a_r, b_r, GFC_RND_MODE), \ + mpfr_mul (tmp, a_i, b_i, GFC_RND_MODE), \ + mpfr_sub (re, re, tmp, GFC_RND_MODE), \ + \ + mpfr_mul (im, a_r, b_i, GFC_RND_MODE), \ + mpfr_mul (tmp, a_i, b_r, GFC_RND_MODE), \ + mpfr_add (res_i, im, tmp, GFC_RND_MODE), \ + mpfr_set (res_r, re, GFC_RND_MODE) + +#define res_r result->value.complex.r +#define res_i result->value.complex.i + + /* for (; power > 0; x *= x) */ + for (; mpz_cmp_si (power, 0) > 0; CMULT(x_r,x_i,x_r,x_i,x_r,x_i)) + { + /* if (power & 1) res = res * x; */ + if (mpz_congruent_ui_p (power, 1, 2)) + CMULT(res_r,res_i,res_r,res_i,x_r,x_i); + + /* power /= 2; */ + mpz_fdiv_q_ui (power, power, 2); + } + +#undef res_r +#undef res_i +#undef CMULT + + mpfr_clears (x_r, x_i, tmp, re, im, NULL); +} + + +/* Raise a number to an integer power. */ + +static arith +gfc_arith_power (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + int power_sign; + gfc_expr *result; + arith rc; + + gcc_assert (op2->expr_type == EXPR_CONSTANT && op2->ts.type == BT_INTEGER); + + rc = ARITH_OK; + result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where); + power_sign = mpz_sgn (op2->value.integer); + + if (power_sign == 0) + { + /* Handle something to the zeroth power. Since we're dealing + with integral exponents, there is no ambiguity in the + limiting procedure used to determine the value of 0**0. */ + switch (op1->ts.type) + { + case BT_INTEGER: + mpz_set_ui (result->value.integer, 1); + break; + + case BT_REAL: + mpfr_set_ui (result->value.real, 1, GFC_RND_MODE); + break; + + case BT_COMPLEX: + mpfr_set_ui (result->value.complex.r, 1, GFC_RND_MODE); + mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE); + break; + + default: + gfc_internal_error ("gfc_arith_power(): Bad base"); + } + } + else + { + switch (op1->ts.type) + { + case BT_INTEGER: + { + int power; + + /* First, we simplify the cases of op1 == 1, 0 or -1. */ + if (mpz_cmp_si (op1->value.integer, 1) == 0) + { + /* 1**op2 == 1 */ + mpz_set_si (result->value.integer, 1); + } + else if (mpz_cmp_si (op1->value.integer, 0) == 0) + { + /* 0**op2 == 0, if op2 > 0 + 0**op2 overflow, if op2 < 0 ; in that case, we + set the result to 0 and return ARITH_DIV0. */ + mpz_set_si (result->value.integer, 0); + if (mpz_cmp_si (op2->value.integer, 0) < 0) + rc = ARITH_DIV0; + } + else if (mpz_cmp_si (op1->value.integer, -1) == 0) + { + /* (-1)**op2 == (-1)**(mod(op2,2)) */ + unsigned int odd = mpz_fdiv_ui (op2->value.integer, 2); + if (odd) + mpz_set_si (result->value.integer, -1); + else + mpz_set_si (result->value.integer, 1); + } + /* Then, we take care of op2 < 0. */ + else if (mpz_cmp_si (op2->value.integer, 0) < 0) + { + /* if op2 < 0, op1**op2 == 0 because abs(op1) > 1. */ + mpz_set_si (result->value.integer, 0); + } + else if (gfc_extract_int (op2, &power) != NULL) + { + /* If op2 doesn't fit in an int, the exponentiation will + overflow, because op2 > 0 and abs(op1) > 1. */ + mpz_t max; + int i = gfc_validate_kind (BT_INTEGER, result->ts.kind, false); + + if (gfc_option.flag_range_check) + rc = ARITH_OVERFLOW; + + /* Still, we want to give the same value as the processor. */ + mpz_init (max); + mpz_add_ui (max, gfc_integer_kinds[i].huge, 1); + mpz_mul_ui (max, max, 2); + mpz_powm (result->value.integer, op1->value.integer, + op2->value.integer, max); + mpz_clear (max); + } + else + mpz_pow_ui (result->value.integer, op1->value.integer, power); + } + break; + + case BT_REAL: + mpfr_pow_z (result->value.real, op1->value.real, op2->value.integer, + GFC_RND_MODE); + break; + + case BT_COMPLEX: + { + mpz_t apower; + + /* Compute op1**abs(op2) */ + mpz_init (apower); + mpz_abs (apower, op2->value.integer); + complex_pow (result, op1, apower); + mpz_clear (apower); + + /* If (op2 < 0), compute the inverse. */ + if (power_sign < 0) + complex_reciprocal (result); + + break; + } + + default: + break; + } + } + + if (rc == ARITH_OK) + rc = gfc_range_check (result); + + return check_result (rc, op1, result, resultp); +} + + +/* Concatenate two string constants. */ + +static arith +gfc_arith_concat (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + gfc_expr *result; + int len; + + gcc_assert (op1->ts.kind == op2->ts.kind); + result = gfc_constant_result (BT_CHARACTER, op1->ts.kind, + &op1->where); + + len = op1->value.character.length + op2->value.character.length; + + result->value.character.string = gfc_get_wide_string (len + 1); + result->value.character.length = len; + + memcpy (result->value.character.string, op1->value.character.string, + op1->value.character.length * sizeof (gfc_char_t)); + + memcpy (&result->value.character.string[op1->value.character.length], + op2->value.character.string, + op2->value.character.length * sizeof (gfc_char_t)); + + result->value.character.string[len] = '\0'; + + *resultp = result; + + return ARITH_OK; +} + +/* Comparison between real values; returns 0 if (op1 .op. op2) is true. + This function mimics mpfr_cmp but takes NaN into account. */ + +static int +compare_real (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op) +{ + int rc; + switch (op) + { + case INTRINSIC_EQ: + rc = mpfr_equal_p (op1->value.real, op2->value.real) ? 0 : 1; + break; + case INTRINSIC_GT: + rc = mpfr_greater_p (op1->value.real, op2->value.real) ? 1 : -1; + break; + case INTRINSIC_GE: + rc = mpfr_greaterequal_p (op1->value.real, op2->value.real) ? 1 : -1; + break; + case INTRINSIC_LT: + rc = mpfr_less_p (op1->value.real, op2->value.real) ? -1 : 1; + break; + case INTRINSIC_LE: + rc = mpfr_lessequal_p (op1->value.real, op2->value.real) ? -1 : 1; + break; + default: + gfc_internal_error ("compare_real(): Bad operator"); + } + + return rc; +} + +/* Comparison operators. Assumes that the two expression nodes + contain two constants of the same type. The op argument is + needed to handle NaN correctly. */ + +int +gfc_compare_expr (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op) +{ + int rc; + + switch (op1->ts.type) + { + case BT_INTEGER: + rc = mpz_cmp (op1->value.integer, op2->value.integer); + break; + + case BT_REAL: + rc = compare_real (op1, op2, op); + break; + + case BT_CHARACTER: + rc = gfc_compare_string (op1, op2); + break; + + case BT_LOGICAL: + rc = ((!op1->value.logical && op2->value.logical) + || (op1->value.logical && !op2->value.logical)); + break; + + default: + gfc_internal_error ("gfc_compare_expr(): Bad basic type"); + } + + return rc; +} + + +/* Compare a pair of complex numbers. Naturally, this is only for + equality and inequality. */ + +static int +compare_complex (gfc_expr *op1, gfc_expr *op2) +{ + return (mpfr_equal_p (op1->value.complex.r, op2->value.complex.r) + && mpfr_equal_p (op1->value.complex.i, op2->value.complex.i)); +} + + +/* Given two constant strings and the inverse collating sequence, compare the + strings. We return -1 for a < b, 0 for a == b and 1 for a > b. + We use the processor's default collating sequence. */ + +int +gfc_compare_string (gfc_expr *a, gfc_expr *b) +{ + int len, alen, blen, i; + gfc_char_t ac, bc; + + alen = a->value.character.length; + blen = b->value.character.length; + + len = MAX(alen, blen); + + for (i = 0; i < len; i++) + { + ac = ((i < alen) ? a->value.character.string[i] : ' '); + bc = ((i < blen) ? b->value.character.string[i] : ' '); + + if (ac < bc) + return -1; + if (ac > bc) + return 1; + } + + /* Strings are equal */ + return 0; +} + + +int +gfc_compare_with_Cstring (gfc_expr *a, const char *b, bool case_sensitive) +{ + int len, alen, blen, i; + gfc_char_t ac, bc; + + alen = a->value.character.length; + blen = strlen (b); + + len = MAX(alen, blen); + + for (i = 0; i < len; i++) + { + ac = ((i < alen) ? a->value.character.string[i] : ' '); + bc = ((i < blen) ? b[i] : ' '); + + if (!case_sensitive) + { + ac = TOLOWER (ac); + bc = TOLOWER (bc); + } + + if (ac < bc) + return -1; + if (ac > bc) + return 1; + } + + /* Strings are equal */ + return 0; +} + + +/* Specific comparison subroutines. */ + +static arith +gfc_arith_eq (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind, + &op1->where); + result->value.logical = (op1->ts.type == BT_COMPLEX) + ? compare_complex (op1, op2) + : (gfc_compare_expr (op1, op2, INTRINSIC_EQ) == 0); + + *resultp = result; + return ARITH_OK; +} + + +static arith +gfc_arith_ne (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind, + &op1->where); + result->value.logical = (op1->ts.type == BT_COMPLEX) + ? !compare_complex (op1, op2) + : (gfc_compare_expr (op1, op2, INTRINSIC_EQ) != 0); + + *resultp = result; + return ARITH_OK; +} + + +static arith +gfc_arith_gt (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind, + &op1->where); + result->value.logical = (gfc_compare_expr (op1, op2, INTRINSIC_GT) > 0); + *resultp = result; + + return ARITH_OK; +} + + +static arith +gfc_arith_ge (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind, + &op1->where); + result->value.logical = (gfc_compare_expr (op1, op2, INTRINSIC_GE) >= 0); + *resultp = result; + + return ARITH_OK; +} + + +static arith +gfc_arith_lt (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind, + &op1->where); + result->value.logical = (gfc_compare_expr (op1, op2, INTRINSIC_LT) < 0); + *resultp = result; + + return ARITH_OK; +} + + +static arith +gfc_arith_le (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_LOGICAL, gfc_default_logical_kind, + &op1->where); + result->value.logical = (gfc_compare_expr (op1, op2, INTRINSIC_LE) <= 0); + *resultp = result; + + return ARITH_OK; +} + + +static arith +reduce_unary (arith (*eval) (gfc_expr *, gfc_expr **), gfc_expr *op, + gfc_expr **result) +{ + gfc_constructor *c, *head; + gfc_expr *r; + arith rc; + + if (op->expr_type == EXPR_CONSTANT) + return eval (op, result); + + rc = ARITH_OK; + head = gfc_copy_constructor (op->value.constructor); + + for (c = head; c; c = c->next) + { + rc = reduce_unary (eval, c->expr, &r); + + if (rc != ARITH_OK) + break; + + gfc_replace_expr (c->expr, r); + } + + if (rc != ARITH_OK) + gfc_free_constructor (head); + else + { + r = gfc_get_expr (); + r->expr_type = EXPR_ARRAY; + r->value.constructor = head; + r->shape = gfc_copy_shape (op->shape, op->rank); + + r->ts = head->expr->ts; + r->where = op->where; + r->rank = op->rank; + + *result = r; + } + + return rc; +} + + +static arith +reduce_binary_ac (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **), + gfc_expr *op1, gfc_expr *op2, gfc_expr **result) +{ + gfc_constructor *c, *head; + gfc_expr *r; + arith rc; + + head = gfc_copy_constructor (op1->value.constructor); + rc = ARITH_OK; + + for (c = head; c; c = c->next) + { + if (c->expr->expr_type == EXPR_CONSTANT) + rc = eval (c->expr, op2, &r); + else + rc = reduce_binary_ac (eval, c->expr, op2, &r); + + if (rc != ARITH_OK) + break; + + gfc_replace_expr (c->expr, r); + } + + if (rc != ARITH_OK) + gfc_free_constructor (head); + else + { + r = gfc_get_expr (); + r->expr_type = EXPR_ARRAY; + r->value.constructor = head; + r->shape = gfc_copy_shape (op1->shape, op1->rank); + + r->ts = head->expr->ts; + r->where = op1->where; + r->rank = op1->rank; + + *result = r; + } + + return rc; +} + + +static arith +reduce_binary_ca (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **), + gfc_expr *op1, gfc_expr *op2, gfc_expr **result) +{ + gfc_constructor *c, *head; + gfc_expr *r; + arith rc; + + head = gfc_copy_constructor (op2->value.constructor); + rc = ARITH_OK; + + for (c = head; c; c = c->next) + { + if (c->expr->expr_type == EXPR_CONSTANT) + rc = eval (op1, c->expr, &r); + else + rc = reduce_binary_ca (eval, op1, c->expr, &r); + + if (rc != ARITH_OK) + break; + + gfc_replace_expr (c->expr, r); + } + + if (rc != ARITH_OK) + gfc_free_constructor (head); + else + { + r = gfc_get_expr (); + r->expr_type = EXPR_ARRAY; + r->value.constructor = head; + r->shape = gfc_copy_shape (op2->shape, op2->rank); + + r->ts = head->expr->ts; + r->where = op2->where; + r->rank = op2->rank; + + *result = r; + } + + return rc; +} + + +/* We need a forward declaration of reduce_binary. */ +static arith reduce_binary (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **), + gfc_expr *op1, gfc_expr *op2, gfc_expr **result); + + +static arith +reduce_binary_aa (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **), + gfc_expr *op1, gfc_expr *op2, gfc_expr **result) +{ + gfc_constructor *c, *d, *head; + gfc_expr *r; + arith rc; + + head = gfc_copy_constructor (op1->value.constructor); + + rc = ARITH_OK; + d = op2->value.constructor; + + if (gfc_check_conformance ("elemental binary operation", op1, op2) + != SUCCESS) + rc = ARITH_INCOMMENSURATE; + else + { + for (c = head; c; c = c->next, d = d->next) + { + if (d == NULL) + { + rc = ARITH_INCOMMENSURATE; + break; + } + + rc = reduce_binary (eval, c->expr, d->expr, &r); + if (rc != ARITH_OK) + break; + + gfc_replace_expr (c->expr, r); + } + + if (d != NULL) + rc = ARITH_INCOMMENSURATE; + } + + if (rc != ARITH_OK) + gfc_free_constructor (head); + else + { + r = gfc_get_expr (); + r->expr_type = EXPR_ARRAY; + r->value.constructor = head; + r->shape = gfc_copy_shape (op1->shape, op1->rank); + + r->ts = head->expr->ts; + r->where = op1->where; + r->rank = op1->rank; + + *result = r; + } + + return rc; +} + + +static arith +reduce_binary (arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **), + gfc_expr *op1, gfc_expr *op2, gfc_expr **result) +{ + if (op1->expr_type == EXPR_CONSTANT && op2->expr_type == EXPR_CONSTANT) + return eval (op1, op2, result); + + if (op1->expr_type == EXPR_CONSTANT && op2->expr_type == EXPR_ARRAY) + return reduce_binary_ca (eval, op1, op2, result); + + if (op1->expr_type == EXPR_ARRAY && op2->expr_type == EXPR_CONSTANT) + return reduce_binary_ac (eval, op1, op2, result); + + return reduce_binary_aa (eval, op1, op2, result); +} + + +typedef union +{ + arith (*f2)(gfc_expr *, gfc_expr **); + arith (*f3)(gfc_expr *, gfc_expr *, gfc_expr **); +} +eval_f; + +/* High level arithmetic subroutines. These subroutines go into + eval_intrinsic(), which can do one of several things to its + operands. If the operands are incompatible with the intrinsic + operation, we return a node pointing to the operands and hope that + an operator interface is found during resolution. + + If the operands are compatible and are constants, then we try doing + the arithmetic. We also handle the cases where either or both + operands are array constructors. */ + +static gfc_expr * +eval_intrinsic (gfc_intrinsic_op op, + eval_f eval, gfc_expr *op1, gfc_expr *op2) +{ + gfc_expr temp, *result; + int unary; + arith rc; + + gfc_clear_ts (&temp.ts); + + switch (op) + { + /* Logical unary */ + case INTRINSIC_NOT: + if (op1->ts.type != BT_LOGICAL) + goto runtime; + + temp.ts.type = BT_LOGICAL; + temp.ts.kind = gfc_default_logical_kind; + unary = 1; + break; + + /* Logical binary operators */ + case INTRINSIC_OR: + case INTRINSIC_AND: + case INTRINSIC_NEQV: + case INTRINSIC_EQV: + if (op1->ts.type != BT_LOGICAL || op2->ts.type != BT_LOGICAL) + goto runtime; + + temp.ts.type = BT_LOGICAL; + temp.ts.kind = gfc_default_logical_kind; + unary = 0; + break; + + /* Numeric unary */ + case INTRINSIC_UPLUS: + case INTRINSIC_UMINUS: + if (!gfc_numeric_ts (&op1->ts)) + goto runtime; + + temp.ts = op1->ts; + unary = 1; + break; + + case INTRINSIC_PARENTHESES: + temp.ts = op1->ts; + unary = 1; + break; + + /* Additional restrictions for ordering relations. */ + case INTRINSIC_GE: + case INTRINSIC_GE_OS: + case INTRINSIC_LT: + case INTRINSIC_LT_OS: + case INTRINSIC_LE: + case INTRINSIC_LE_OS: + case INTRINSIC_GT: + case INTRINSIC_GT_OS: + if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX) + { + temp.ts.type = BT_LOGICAL; + temp.ts.kind = gfc_default_logical_kind; + goto runtime; + } + + /* Fall through */ + case INTRINSIC_EQ: + case INTRINSIC_EQ_OS: + case INTRINSIC_NE: + case INTRINSIC_NE_OS: + if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER) + { + unary = 0; + temp.ts.type = BT_LOGICAL; + temp.ts.kind = gfc_default_logical_kind; + + /* If kind mismatch, exit and we'll error out later. */ + if (op1->ts.kind != op2->ts.kind) + goto runtime; + + break; + } + + /* Fall through */ + /* Numeric binary */ + case INTRINSIC_PLUS: + case INTRINSIC_MINUS: + case INTRINSIC_TIMES: + case INTRINSIC_DIVIDE: + case INTRINSIC_POWER: + if (!gfc_numeric_ts (&op1->ts) || !gfc_numeric_ts (&op2->ts)) + goto runtime; + + /* Insert any necessary type conversions to make the operands + compatible. */ + + temp.expr_type = EXPR_OP; + gfc_clear_ts (&temp.ts); + temp.value.op.op = op; + + temp.value.op.op1 = op1; + temp.value.op.op2 = op2; + + gfc_type_convert_binary (&temp); + + if (op == INTRINSIC_EQ || op == INTRINSIC_NE + || op == INTRINSIC_GE || op == INTRINSIC_GT + || op == INTRINSIC_LE || op == INTRINSIC_LT + || op == INTRINSIC_EQ_OS || op == INTRINSIC_NE_OS + || op == INTRINSIC_GE_OS || op == INTRINSIC_GT_OS + || op == INTRINSIC_LE_OS || op == INTRINSIC_LT_OS) + { + temp.ts.type = BT_LOGICAL; + temp.ts.kind = gfc_default_logical_kind; + } + + unary = 0; + break; + + /* Character binary */ + case INTRINSIC_CONCAT: + if (op1->ts.type != BT_CHARACTER || op2->ts.type != BT_CHARACTER + || op1->ts.kind != op2->ts.kind) + goto runtime; + + temp.ts.type = BT_CHARACTER; + temp.ts.kind = op1->ts.kind; + unary = 0; + break; + + case INTRINSIC_USER: + goto runtime; + + default: + gfc_internal_error ("eval_intrinsic(): Bad operator"); + } + + /* Try to combine the operators. */ + if (op == INTRINSIC_POWER && op2->ts.type != BT_INTEGER) + goto runtime; + + if (op1->expr_type != EXPR_CONSTANT + && (op1->expr_type != EXPR_ARRAY + || !gfc_is_constant_expr (op1) || !gfc_expanded_ac (op1))) + goto runtime; + + if (op2 != NULL + && op2->expr_type != EXPR_CONSTANT + && (op2->expr_type != EXPR_ARRAY + || !gfc_is_constant_expr (op2) || !gfc_expanded_ac (op2))) + goto runtime; + + if (unary) + rc = reduce_unary (eval.f2, op1, &result); + else + rc = reduce_binary (eval.f3, op1, op2, &result); + + if (rc != ARITH_OK) + { /* Something went wrong. */ + gfc_error (gfc_arith_error (rc), &op1->where); + return NULL; + } + + gfc_free_expr (op1); + gfc_free_expr (op2); + return result; + +runtime: + /* Create a run-time expression. */ + result = gfc_get_expr (); + result->ts = temp.ts; + + result->expr_type = EXPR_OP; + result->value.op.op = op; + + result->value.op.op1 = op1; + result->value.op.op2 = op2; + + result->where = op1->where; + + return result; +} + + +/* Modify type of expression for zero size array. */ + +static gfc_expr * +eval_type_intrinsic0 (gfc_intrinsic_op iop, gfc_expr *op) +{ + if (op == NULL) + gfc_internal_error ("eval_type_intrinsic0(): op NULL"); + + switch (iop) + { + case INTRINSIC_GE: + case INTRINSIC_GE_OS: + case INTRINSIC_LT: + case INTRINSIC_LT_OS: + case INTRINSIC_LE: + case INTRINSIC_LE_OS: + case INTRINSIC_GT: + case INTRINSIC_GT_OS: + case INTRINSIC_EQ: + case INTRINSIC_EQ_OS: + case INTRINSIC_NE: + case INTRINSIC_NE_OS: + op->ts.type = BT_LOGICAL; + op->ts.kind = gfc_default_logical_kind; + break; + + default: + break; + } + + return op; +} + + +/* Return nonzero if the expression is a zero size array. */ + +static int +gfc_zero_size_array (gfc_expr *e) +{ + if (e->expr_type != EXPR_ARRAY) + return 0; + + return e->value.constructor == NULL; +} + + +/* Reduce a binary expression where at least one of the operands + involves a zero-length array. Returns NULL if neither of the + operands is a zero-length array. */ + +static gfc_expr * +reduce_binary0 (gfc_expr *op1, gfc_expr *op2) +{ + if (gfc_zero_size_array (op1)) + { + gfc_free_expr (op2); + return op1; + } + + if (gfc_zero_size_array (op2)) + { + gfc_free_expr (op1); + return op2; + } + + return NULL; +} + + +static gfc_expr * +eval_intrinsic_f2 (gfc_intrinsic_op op, + arith (*eval) (gfc_expr *, gfc_expr **), + gfc_expr *op1, gfc_expr *op2) +{ + gfc_expr *result; + eval_f f; + + if (op2 == NULL) + { + if (gfc_zero_size_array (op1)) + return eval_type_intrinsic0 (op, op1); + } + else + { + result = reduce_binary0 (op1, op2); + if (result != NULL) + return eval_type_intrinsic0 (op, result); + } + + f.f2 = eval; + return eval_intrinsic (op, f, op1, op2); +} + + +static gfc_expr * +eval_intrinsic_f3 (gfc_intrinsic_op op, + arith (*eval) (gfc_expr *, gfc_expr *, gfc_expr **), + gfc_expr *op1, gfc_expr *op2) +{ + gfc_expr *result; + eval_f f; + + result = reduce_binary0 (op1, op2); + if (result != NULL) + return eval_type_intrinsic0(op, result); + + f.f3 = eval; + return eval_intrinsic (op, f, op1, op2); +} + + +gfc_expr * +gfc_parentheses (gfc_expr *op) +{ + if (gfc_is_constant_expr (op)) + return op; + + return eval_intrinsic_f2 (INTRINSIC_PARENTHESES, gfc_arith_identity, + op, NULL); +} + +gfc_expr * +gfc_uplus (gfc_expr *op) +{ + return eval_intrinsic_f2 (INTRINSIC_UPLUS, gfc_arith_identity, op, NULL); +} + + +gfc_expr * +gfc_uminus (gfc_expr *op) +{ + return eval_intrinsic_f2 (INTRINSIC_UMINUS, gfc_arith_uminus, op, NULL); +} + + +gfc_expr * +gfc_add (gfc_expr *op1, gfc_expr *op2) +{ + return eval_intrinsic_f3 (INTRINSIC_PLUS, gfc_arith_plus, op1, op2); +} + + +gfc_expr * +gfc_subtract (gfc_expr *op1, gfc_expr *op2) +{ + return eval_intrinsic_f3 (INTRINSIC_MINUS, gfc_arith_minus, op1, op2); +} + + +gfc_expr * +gfc_multiply (gfc_expr *op1, gfc_expr *op2) +{ + return eval_intrinsic_f3 (INTRINSIC_TIMES, gfc_arith_times, op1, op2); +} + + +gfc_expr * +gfc_divide (gfc_expr *op1, gfc_expr *op2) +{ + return eval_intrinsic_f3 (INTRINSIC_DIVIDE, gfc_arith_divide, op1, op2); +} + + +gfc_expr * +gfc_power (gfc_expr *op1, gfc_expr *op2) +{ + return eval_intrinsic_f3 (INTRINSIC_POWER, gfc_arith_power, op1, op2); +} + + +gfc_expr * +gfc_concat (gfc_expr *op1, gfc_expr *op2) +{ + return eval_intrinsic_f3 (INTRINSIC_CONCAT, gfc_arith_concat, op1, op2); +} + + +gfc_expr * +gfc_and (gfc_expr *op1, gfc_expr *op2) +{ + return eval_intrinsic_f3 (INTRINSIC_AND, gfc_arith_and, op1, op2); +} + + +gfc_expr * +gfc_or (gfc_expr *op1, gfc_expr *op2) +{ + return eval_intrinsic_f3 (INTRINSIC_OR, gfc_arith_or, op1, op2); +} + + +gfc_expr * +gfc_not (gfc_expr *op1) +{ + return eval_intrinsic_f2 (INTRINSIC_NOT, gfc_arith_not, op1, NULL); +} + + +gfc_expr * +gfc_eqv (gfc_expr *op1, gfc_expr *op2) +{ + return eval_intrinsic_f3 (INTRINSIC_EQV, gfc_arith_eqv, op1, op2); +} + + +gfc_expr * +gfc_neqv (gfc_expr *op1, gfc_expr *op2) +{ + return eval_intrinsic_f3 (INTRINSIC_NEQV, gfc_arith_neqv, op1, op2); +} + + +gfc_expr * +gfc_eq (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op) +{ + return eval_intrinsic_f3 (op, gfc_arith_eq, op1, op2); +} + + +gfc_expr * +gfc_ne (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op) +{ + return eval_intrinsic_f3 (op, gfc_arith_ne, op1, op2); +} + + +gfc_expr * +gfc_gt (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op) +{ + return eval_intrinsic_f3 (op, gfc_arith_gt, op1, op2); +} + + +gfc_expr * +gfc_ge (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op) +{ + return eval_intrinsic_f3 (op, gfc_arith_ge, op1, op2); +} + + +gfc_expr * +gfc_lt (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op) +{ + return eval_intrinsic_f3 (op, gfc_arith_lt, op1, op2); +} + + +gfc_expr * +gfc_le (gfc_expr *op1, gfc_expr *op2, gfc_intrinsic_op op) +{ + return eval_intrinsic_f3 (op, gfc_arith_le, op1, op2); +} + + +/* Convert an integer string to an expression node. */ + +gfc_expr * +gfc_convert_integer (const char *buffer, int kind, int radix, locus *where) +{ + gfc_expr *e; + const char *t; + + e = gfc_constant_result (BT_INTEGER, kind, where); + /* A leading plus is allowed, but not by mpz_set_str. */ + if (buffer[0] == '+') + t = buffer + 1; + else + t = buffer; + mpz_set_str (e->value.integer, t, radix); + + return e; +} + + +/* Convert a real string to an expression node. */ + +gfc_expr * +gfc_convert_real (const char *buffer, int kind, locus *where) +{ + gfc_expr *e; + + e = gfc_constant_result (BT_REAL, kind, where); + mpfr_set_str (e->value.real, buffer, 10, GFC_RND_MODE); + + return e; +} + + +/* Convert a pair of real, constant expression nodes to a single + complex expression node. */ + +gfc_expr * +gfc_convert_complex (gfc_expr *real, gfc_expr *imag, int kind) +{ + gfc_expr *e; + + e = gfc_constant_result (BT_COMPLEX, kind, &real->where); + mpfr_set (e->value.complex.r, real->value.real, GFC_RND_MODE); + mpfr_set (e->value.complex.i, imag->value.real, GFC_RND_MODE); + + return e; +} + + +/******* Simplification of intrinsic functions with constant arguments *****/ + + +/* Deal with an arithmetic error. */ + +static void +arith_error (arith rc, gfc_typespec *from, gfc_typespec *to, locus *where) +{ + switch (rc) + { + case ARITH_OK: + gfc_error ("Arithmetic OK converting %s to %s at %L", + gfc_typename (from), gfc_typename (to), where); + break; + case ARITH_OVERFLOW: + gfc_error ("Arithmetic overflow converting %s to %s at %L. This check " + "can be disabled with the option -fno-range-check", + gfc_typename (from), gfc_typename (to), where); + break; + case ARITH_UNDERFLOW: + gfc_error ("Arithmetic underflow converting %s to %s at %L. This check " + "can be disabled with the option -fno-range-check", + gfc_typename (from), gfc_typename (to), where); + break; + case ARITH_NAN: + gfc_error ("Arithmetic NaN converting %s to %s at %L. This check " + "can be disabled with the option -fno-range-check", + gfc_typename (from), gfc_typename (to), where); + break; + case ARITH_DIV0: + gfc_error ("Division by zero converting %s to %s at %L", + gfc_typename (from), gfc_typename (to), where); + break; + case ARITH_INCOMMENSURATE: + gfc_error ("Array operands are incommensurate converting %s to %s at %L", + gfc_typename (from), gfc_typename (to), where); + break; + case ARITH_ASYMMETRIC: + gfc_error ("Integer outside symmetric range implied by Standard Fortran" + " converting %s to %s at %L", + gfc_typename (from), gfc_typename (to), where); + break; + default: + gfc_internal_error ("gfc_arith_error(): Bad error code"); + } + + /* TODO: Do something about the error, i.e., throw exception, return + NaN, etc. */ +} + + +/* Convert integers to integers. */ + +gfc_expr * +gfc_int2int (gfc_expr *src, int kind) +{ + gfc_expr *result; + arith rc; + + result = gfc_constant_result (BT_INTEGER, kind, &src->where); + + mpz_set (result->value.integer, src->value.integer); + + if ((rc = gfc_check_integer_range (result->value.integer, kind)) != ARITH_OK) + { + if (rc == ARITH_ASYMMETRIC) + { + gfc_warning (gfc_arith_error (rc), &src->where); + } + else + { + arith_error (rc, &src->ts, &result->ts, &src->where); + gfc_free_expr (result); + return NULL; + } + } + + return result; +} + + +/* Convert integers to reals. */ + +gfc_expr * +gfc_int2real (gfc_expr *src, int kind) +{ + gfc_expr *result; + arith rc; + + result = gfc_constant_result (BT_REAL, kind, &src->where); + + mpfr_set_z (result->value.real, src->value.integer, GFC_RND_MODE); + + if ((rc = gfc_check_real_range (result->value.real, kind)) != ARITH_OK) + { + arith_error (rc, &src->ts, &result->ts, &src->where); + gfc_free_expr (result); + return NULL; + } + + return result; +} + + +/* Convert default integer to default complex. */ + +gfc_expr * +gfc_int2complex (gfc_expr *src, int kind) +{ + gfc_expr *result; + arith rc; + + result = gfc_constant_result (BT_COMPLEX, kind, &src->where); + + mpfr_set_z (result->value.complex.r, src->value.integer, GFC_RND_MODE); + mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE); + + if ((rc = gfc_check_real_range (result->value.complex.r, kind)) != ARITH_OK) + { + arith_error (rc, &src->ts, &result->ts, &src->where); + gfc_free_expr (result); + return NULL; + } + + return result; +} + + +/* Convert default real to default integer. */ + +gfc_expr * +gfc_real2int (gfc_expr *src, int kind) +{ + gfc_expr *result; + arith rc; + + result = gfc_constant_result (BT_INTEGER, kind, &src->where); + + gfc_mpfr_to_mpz (result->value.integer, src->value.real, &src->where); + + if ((rc = gfc_check_integer_range (result->value.integer, kind)) != ARITH_OK) + { + arith_error (rc, &src->ts, &result->ts, &src->where); + gfc_free_expr (result); + return NULL; + } + + return result; +} + + +/* Convert real to real. */ + +gfc_expr * +gfc_real2real (gfc_expr *src, int kind) +{ + gfc_expr *result; + arith rc; + + result = gfc_constant_result (BT_REAL, kind, &src->where); + + mpfr_set (result->value.real, src->value.real, GFC_RND_MODE); + + rc = gfc_check_real_range (result->value.real, kind); + + if (rc == ARITH_UNDERFLOW) + { + if (gfc_option.warn_underflow) + gfc_warning (gfc_arith_error (rc), &src->where); + mpfr_set_ui (result->value.real, 0, GFC_RND_MODE); + } + else if (rc != ARITH_OK) + { + arith_error (rc, &src->ts, &result->ts, &src->where); + gfc_free_expr (result); + return NULL; + } + + return result; +} + + +/* Convert real to complex. */ + +gfc_expr * +gfc_real2complex (gfc_expr *src, int kind) +{ + gfc_expr *result; + arith rc; + + result = gfc_constant_result (BT_COMPLEX, kind, &src->where); + + mpfr_set (result->value.complex.r, src->value.real, GFC_RND_MODE); + mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE); + + rc = gfc_check_real_range (result->value.complex.r, kind); + + if (rc == ARITH_UNDERFLOW) + { + if (gfc_option.warn_underflow) + gfc_warning (gfc_arith_error (rc), &src->where); + mpfr_set_ui (result->value.complex.r, 0, GFC_RND_MODE); + } + else if (rc != ARITH_OK) + { + arith_error (rc, &src->ts, &result->ts, &src->where); + gfc_free_expr (result); + return NULL; + } + + return result; +} + + +/* Convert complex to integer. */ + +gfc_expr * +gfc_complex2int (gfc_expr *src, int kind) +{ + gfc_expr *result; + arith rc; + + result = gfc_constant_result (BT_INTEGER, kind, &src->where); + + gfc_mpfr_to_mpz (result->value.integer, src->value.complex.r, &src->where); + + if ((rc = gfc_check_integer_range (result->value.integer, kind)) != ARITH_OK) + { + arith_error (rc, &src->ts, &result->ts, &src->where); + gfc_free_expr (result); + return NULL; + } + + return result; +} + + +/* Convert complex to real. */ + +gfc_expr * +gfc_complex2real (gfc_expr *src, int kind) +{ + gfc_expr *result; + arith rc; + + result = gfc_constant_result (BT_REAL, kind, &src->where); + + mpfr_set (result->value.real, src->value.complex.r, GFC_RND_MODE); + + rc = gfc_check_real_range (result->value.real, kind); + + if (rc == ARITH_UNDERFLOW) + { + if (gfc_option.warn_underflow) + gfc_warning (gfc_arith_error (rc), &src->where); + mpfr_set_ui (result->value.real, 0, GFC_RND_MODE); + } + if (rc != ARITH_OK) + { + arith_error (rc, &src->ts, &result->ts, &src->where); + gfc_free_expr (result); + return NULL; + } + + return result; +} + + +/* Convert complex to complex. */ + +gfc_expr * +gfc_complex2complex (gfc_expr *src, int kind) +{ + gfc_expr *result; + arith rc; + + result = gfc_constant_result (BT_COMPLEX, kind, &src->where); + + mpfr_set (result->value.complex.r, src->value.complex.r, GFC_RND_MODE); + mpfr_set (result->value.complex.i, src->value.complex.i, GFC_RND_MODE); + + rc = gfc_check_real_range (result->value.complex.r, kind); + + if (rc == ARITH_UNDERFLOW) + { + if (gfc_option.warn_underflow) + gfc_warning (gfc_arith_error (rc), &src->where); + mpfr_set_ui (result->value.complex.r, 0, GFC_RND_MODE); + } + else if (rc != ARITH_OK) + { + arith_error (rc, &src->ts, &result->ts, &src->where); + gfc_free_expr (result); + return NULL; + } + + rc = gfc_check_real_range (result->value.complex.i, kind); + + if (rc == ARITH_UNDERFLOW) + { + if (gfc_option.warn_underflow) + gfc_warning (gfc_arith_error (rc), &src->where); + mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE); + } + else if (rc != ARITH_OK) + { + arith_error (rc, &src->ts, &result->ts, &src->where); + gfc_free_expr (result); + return NULL; + } + + return result; +} + + +/* Logical kind conversion. */ + +gfc_expr * +gfc_log2log (gfc_expr *src, int kind) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_LOGICAL, kind, &src->where); + result->value.logical = src->value.logical; + + return result; +} + + +/* Convert logical to integer. */ + +gfc_expr * +gfc_log2int (gfc_expr *src, int kind) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_INTEGER, kind, &src->where); + mpz_set_si (result->value.integer, src->value.logical); + + return result; +} + + +/* Convert integer to logical. */ + +gfc_expr * +gfc_int2log (gfc_expr *src, int kind) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_LOGICAL, kind, &src->where); + result->value.logical = (mpz_cmp_si (src->value.integer, 0) != 0); + + return result; +} + + +/* Helper function to set the representation in a Hollerith conversion. + This assumes that the ts.type and ts.kind of the result have already + been set. */ + +static void +hollerith2representation (gfc_expr *result, gfc_expr *src) +{ + int src_len, result_len; + + src_len = src->representation.length; + result_len = gfc_target_expr_size (result); + + if (src_len > result_len) + { + gfc_warning ("The Hollerith constant at %L is too long to convert to %s", + &src->where, gfc_typename(&result->ts)); + } + + result->representation.string = XCNEWVEC (char, result_len + 1); + memcpy (result->representation.string, src->representation.string, + MIN (result_len, src_len)); + + if (src_len < result_len) + memset (&result->representation.string[src_len], ' ', result_len - src_len); + + result->representation.string[result_len] = '\0'; /* For debugger */ + result->representation.length = result_len; +} + + +/* Convert Hollerith to integer. The constant will be padded or truncated. */ + +gfc_expr * +gfc_hollerith2int (gfc_expr *src, int kind) +{ + gfc_expr *result; + + result = gfc_get_expr (); + result->expr_type = EXPR_CONSTANT; + result->ts.type = BT_INTEGER; + result->ts.kind = kind; + result->where = src->where; + + hollerith2representation (result, src); + gfc_interpret_integer (kind, (unsigned char *) result->representation.string, + result->representation.length, result->value.integer); + + return result; +} + + +/* Convert Hollerith to real. The constant will be padded or truncated. */ + +gfc_expr * +gfc_hollerith2real (gfc_expr *src, int kind) +{ + gfc_expr *result; + int len; + + len = src->value.character.length; + + result = gfc_get_expr (); + result->expr_type = EXPR_CONSTANT; + result->ts.type = BT_REAL; + result->ts.kind = kind; + result->where = src->where; + + hollerith2representation (result, src); + gfc_interpret_float (kind, (unsigned char *) result->representation.string, + result->representation.length, result->value.real); + + return result; +} + + +/* Convert Hollerith to complex. The constant will be padded or truncated. */ + +gfc_expr * +gfc_hollerith2complex (gfc_expr *src, int kind) +{ + gfc_expr *result; + int len; + + len = src->value.character.length; + + result = gfc_get_expr (); + result->expr_type = EXPR_CONSTANT; + result->ts.type = BT_COMPLEX; + result->ts.kind = kind; + result->where = src->where; + + hollerith2representation (result, src); + gfc_interpret_complex (kind, (unsigned char *) result->representation.string, + result->representation.length, result->value.complex.r, + result->value.complex.i); + + return result; +} + + +/* Convert Hollerith to character. */ + +gfc_expr * +gfc_hollerith2character (gfc_expr *src, int kind) +{ + gfc_expr *result; + + result = gfc_copy_expr (src); + result->ts.type = BT_CHARACTER; + result->ts.kind = kind; + + result->value.character.length = result->representation.length; + result->value.character.string + = gfc_char_to_widechar (result->representation.string); + + return result; +} + + +/* Convert Hollerith to logical. The constant will be padded or truncated. */ + +gfc_expr * +gfc_hollerith2logical (gfc_expr *src, int kind) +{ + gfc_expr *result; + int len; + + len = src->value.character.length; + + result = gfc_get_expr (); + result->expr_type = EXPR_CONSTANT; + result->ts.type = BT_LOGICAL; + result->ts.kind = kind; + result->where = src->where; + + hollerith2representation (result, src); + gfc_interpret_logical (kind, (unsigned char *) result->representation.string, + result->representation.length, &result->value.logical); + + return result; +} + + +/* Returns an initializer whose value is one higher than the value of the + LAST_INITIALIZER argument. If the argument is NULL, the + initializers value will be set to zero. The initializer's kind + will be set to gfc_c_int_kind. + + If -fshort-enums is given, the appropriate kind will be selected + later after all enumerators have been parsed. A warning is issued + here if an initializer exceeds gfc_c_int_kind. */ + +gfc_expr * +gfc_enum_initializer (gfc_expr *last_initializer, locus where) +{ + gfc_expr *result; + + result = gfc_get_expr (); + result->expr_type = EXPR_CONSTANT; + result->ts.type = BT_INTEGER; + result->ts.kind = gfc_c_int_kind; + result->where = where; + + mpz_init (result->value.integer); + + if (last_initializer != NULL) + { + mpz_add_ui (result->value.integer, last_initializer->value.integer, 1); + result->where = last_initializer->where; + + if (gfc_check_integer_range (result->value.integer, + gfc_c_int_kind) != ARITH_OK) + { + gfc_error ("Enumerator exceeds the C integer type at %C"); + return NULL; + } + } + else + { + /* Control comes here, if it's the very first enumerator and no + initializer has been given. It will be initialized to zero. */ + mpz_set_si (result->value.integer, 0); + } + + return result; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/arith.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/arith.h new file mode 100644 index 0000000000..344bc78d48 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/arith.h @@ -0,0 +1,93 @@ +/* Compiler arithmetic header. + Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Steven Bosscher + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#ifndef GFC_ARITH_H +#define GFC_ARITH_H + +#include "gfortran.h" + +/* MPFR also does not have the conversion of a mpfr_t to a mpz_t, so declare + a function for this as well. */ + +void gfc_mpfr_to_mpz (mpz_t, mpfr_t, locus *); +void gfc_set_model_kind (int); +void gfc_set_model (mpfr_t); + +/* Return a constant result of a given type and kind, with locus. */ +gfc_expr *gfc_constant_result (bt, int, locus *); + +/* Make sure a gfc_expr expression is within its allowed range. Checks + for overflow and underflow. */ +arith gfc_range_check (gfc_expr *); + +int gfc_compare_expr (gfc_expr *, gfc_expr *, gfc_intrinsic_op); +int gfc_compare_string (gfc_expr *, gfc_expr *); +int gfc_compare_with_Cstring (gfc_expr *, const char *, bool); + + +/* Constant folding for gfc_expr trees. */ +gfc_expr *gfc_parentheses (gfc_expr * op); +gfc_expr *gfc_uplus (gfc_expr * op); +gfc_expr *gfc_uminus (gfc_expr * op); +gfc_expr *gfc_add (gfc_expr *, gfc_expr *); +gfc_expr *gfc_subtract (gfc_expr *, gfc_expr *); +gfc_expr *gfc_multiply (gfc_expr *, gfc_expr *); +gfc_expr *gfc_divide (gfc_expr *, gfc_expr *); +gfc_expr *gfc_power (gfc_expr *, gfc_expr *); +gfc_expr *gfc_concat (gfc_expr *, gfc_expr *); +gfc_expr *gfc_and (gfc_expr *, gfc_expr *); +gfc_expr *gfc_or (gfc_expr *, gfc_expr *); +gfc_expr *gfc_not (gfc_expr *); +gfc_expr *gfc_eqv (gfc_expr *, gfc_expr *); +gfc_expr *gfc_neqv (gfc_expr *, gfc_expr *); +gfc_expr *gfc_eq (gfc_expr *, gfc_expr *, gfc_intrinsic_op); +gfc_expr *gfc_ne (gfc_expr *, gfc_expr *, gfc_intrinsic_op); +gfc_expr *gfc_gt (gfc_expr *, gfc_expr *, gfc_intrinsic_op); +gfc_expr *gfc_ge (gfc_expr *, gfc_expr *, gfc_intrinsic_op); +gfc_expr *gfc_lt (gfc_expr *, gfc_expr *, gfc_intrinsic_op); +gfc_expr *gfc_le (gfc_expr *, gfc_expr *, gfc_intrinsic_op); + +/* Convert strings to literal constants. */ +gfc_expr *gfc_convert_integer (const char *, int, int, locus *); +gfc_expr *gfc_convert_real (const char *, int, locus *); +gfc_expr *gfc_convert_complex (gfc_expr *, gfc_expr *, int); + +/* Convert a constant of one kind to another kind. */ +gfc_expr *gfc_int2int (gfc_expr *, int); +gfc_expr *gfc_int2real (gfc_expr *, int); +gfc_expr *gfc_int2complex (gfc_expr *, int); +gfc_expr *gfc_real2int (gfc_expr *, int); +gfc_expr *gfc_real2real (gfc_expr *, int); +gfc_expr *gfc_real2complex (gfc_expr *, int); +gfc_expr *gfc_complex2int (gfc_expr *, int); +gfc_expr *gfc_complex2real (gfc_expr *, int); +gfc_expr *gfc_complex2complex (gfc_expr *, int); +gfc_expr *gfc_log2log (gfc_expr *, int); +gfc_expr *gfc_log2int (gfc_expr *, int); +gfc_expr *gfc_int2log (gfc_expr *, int); +gfc_expr *gfc_hollerith2int (gfc_expr *, int); +gfc_expr *gfc_hollerith2real (gfc_expr *, int); +gfc_expr *gfc_hollerith2complex (gfc_expr *, int); +gfc_expr *gfc_hollerith2character (gfc_expr *, int); +gfc_expr *gfc_hollerith2logical (gfc_expr *, int); + +#endif /* GFC_ARITH_H */ + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/array.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/array.c new file mode 100644 index 0000000000..46c7425b9c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/array.c @@ -0,0 +1,2207 @@ +/* Array things + Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "gfortran.h" +#include "match.h" + +/**************** Array reference matching subroutines *****************/ + +/* Copy an array reference structure. */ + +gfc_array_ref * +gfc_copy_array_ref (gfc_array_ref *src) +{ + gfc_array_ref *dest; + int i; + + if (src == NULL) + return NULL; + + dest = gfc_get_array_ref (); + + *dest = *src; + + for (i = 0; i < GFC_MAX_DIMENSIONS; i++) + { + dest->start[i] = gfc_copy_expr (src->start[i]); + dest->end[i] = gfc_copy_expr (src->end[i]); + dest->stride[i] = gfc_copy_expr (src->stride[i]); + } + + dest->offset = gfc_copy_expr (src->offset); + + return dest; +} + + +/* Match a single dimension of an array reference. This can be a + single element or an array section. Any modifications we've made + to the ar structure are cleaned up by the caller. If the init + is set, we require the subscript to be a valid initialization + expression. */ + +static match +match_subscript (gfc_array_ref *ar, int init) +{ + match m; + int i; + + i = ar->dimen; + + ar->c_where[i] = gfc_current_locus; + ar->start[i] = ar->end[i] = ar->stride[i] = NULL; + + /* We can't be sure of the difference between DIMEN_ELEMENT and + DIMEN_VECTOR until we know the type of the element itself at + resolution time. */ + + ar->dimen_type[i] = DIMEN_UNKNOWN; + + if (gfc_match_char (':') == MATCH_YES) + goto end_element; + + /* Get start element. */ + if (init) + m = gfc_match_init_expr (&ar->start[i]); + else + m = gfc_match_expr (&ar->start[i]); + + if (m == MATCH_NO) + gfc_error ("Expected array subscript at %C"); + if (m != MATCH_YES) + return MATCH_ERROR; + + if (gfc_match_char (':') == MATCH_NO) + return MATCH_YES; + + /* Get an optional end element. Because we've seen the colon, we + definitely have a range along this dimension. */ +end_element: + ar->dimen_type[i] = DIMEN_RANGE; + + if (init) + m = gfc_match_init_expr (&ar->end[i]); + else + m = gfc_match_expr (&ar->end[i]); + + if (m == MATCH_ERROR) + return MATCH_ERROR; + + /* See if we have an optional stride. */ + if (gfc_match_char (':') == MATCH_YES) + { + m = init ? gfc_match_init_expr (&ar->stride[i]) + : gfc_match_expr (&ar->stride[i]); + + if (m == MATCH_NO) + gfc_error ("Expected array subscript stride at %C"); + if (m != MATCH_YES) + return MATCH_ERROR; + } + + return MATCH_YES; +} + + +/* Match an array reference, whether it is the whole array or a + particular elements or a section. If init is set, the reference has + to consist of init expressions. */ + +match +gfc_match_array_ref (gfc_array_ref *ar, gfc_array_spec *as, int init) +{ + match m; + + memset (ar, '\0', sizeof (ar)); + + ar->where = gfc_current_locus; + ar->as = as; + + if (gfc_match_char ('(') != MATCH_YES) + { + ar->type = AR_FULL; + ar->dimen = 0; + return MATCH_YES; + } + + ar->type = AR_UNKNOWN; + + for (ar->dimen = 0; ar->dimen < GFC_MAX_DIMENSIONS; ar->dimen++) + { + m = match_subscript (ar, init); + if (m == MATCH_ERROR) + goto error; + + if (gfc_match_char (')') == MATCH_YES) + goto matched; + + if (gfc_match_char (',') != MATCH_YES) + { + gfc_error ("Invalid form of array reference at %C"); + goto error; + } + } + + gfc_error ("Array reference at %C cannot have more than %d dimensions", + GFC_MAX_DIMENSIONS); + +error: + return MATCH_ERROR; + +matched: + ar->dimen++; + + return MATCH_YES; +} + + +/************** Array specification matching subroutines ***************/ + +/* Free all of the expressions associated with array bounds + specifications. */ + +void +gfc_free_array_spec (gfc_array_spec *as) +{ + int i; + + if (as == NULL) + return; + + for (i = 0; i < as->rank; i++) + { + gfc_free_expr (as->lower[i]); + gfc_free_expr (as->upper[i]); + } + + gfc_free (as); +} + + +/* Take an array bound, resolves the expression, that make up the + shape and check associated constraints. */ + +static gfc_try +resolve_array_bound (gfc_expr *e, int check_constant) +{ + if (e == NULL) + return SUCCESS; + + if (gfc_resolve_expr (e) == FAILURE + || gfc_specification_expr (e) == FAILURE) + return FAILURE; + + if (check_constant && gfc_is_constant_expr (e) == 0) + { + gfc_error ("Variable '%s' at %L in this context must be constant", + e->symtree->n.sym->name, &e->where); + return FAILURE; + } + + return SUCCESS; +} + + +/* Takes an array specification, resolves the expressions that make up + the shape and make sure everything is integral. */ + +gfc_try +gfc_resolve_array_spec (gfc_array_spec *as, int check_constant) +{ + gfc_expr *e; + int i; + + if (as == NULL) + return SUCCESS; + + for (i = 0; i < as->rank; i++) + { + e = as->lower[i]; + if (resolve_array_bound (e, check_constant) == FAILURE) + return FAILURE; + + e = as->upper[i]; + if (resolve_array_bound (e, check_constant) == FAILURE) + return FAILURE; + + if ((as->lower[i] == NULL) || (as->upper[i] == NULL)) + continue; + + /* If the size is negative in this dimension, set it to zero. */ + if (as->lower[i]->expr_type == EXPR_CONSTANT + && as->upper[i]->expr_type == EXPR_CONSTANT + && mpz_cmp (as->upper[i]->value.integer, + as->lower[i]->value.integer) < 0) + { + gfc_free_expr (as->upper[i]); + as->upper[i] = gfc_copy_expr (as->lower[i]); + mpz_sub_ui (as->upper[i]->value.integer, + as->upper[i]->value.integer, 1); + } + } + + return SUCCESS; +} + + +/* Match a single array element specification. The return values as + well as the upper and lower bounds of the array spec are filled + in according to what we see on the input. The caller makes sure + individual specifications make sense as a whole. + + + Parsed Lower Upper Returned + ------------------------------------ + : NULL NULL AS_DEFERRED (*) + x 1 x AS_EXPLICIT + x: x NULL AS_ASSUMED_SHAPE + x:y x y AS_EXPLICIT + x:* x NULL AS_ASSUMED_SIZE + * 1 NULL AS_ASSUMED_SIZE + + (*) For non-pointer dummy arrays this is AS_ASSUMED_SHAPE. This + is fixed during the resolution of formal interfaces. + + Anything else AS_UNKNOWN. */ + +static array_type +match_array_element_spec (gfc_array_spec *as) +{ + gfc_expr **upper, **lower; + match m; + + lower = &as->lower[as->rank - 1]; + upper = &as->upper[as->rank - 1]; + + if (gfc_match_char ('*') == MATCH_YES) + { + *lower = gfc_int_expr (1); + return AS_ASSUMED_SIZE; + } + + if (gfc_match_char (':') == MATCH_YES) + return AS_DEFERRED; + + m = gfc_match_expr (upper); + if (m == MATCH_NO) + gfc_error ("Expected expression in array specification at %C"); + if (m != MATCH_YES) + return AS_UNKNOWN; + if (gfc_expr_check_typed (*upper, gfc_current_ns, false) == FAILURE) + return AS_UNKNOWN; + + if (gfc_match_char (':') == MATCH_NO) + { + *lower = gfc_int_expr (1); + return AS_EXPLICIT; + } + + *lower = *upper; + *upper = NULL; + + if (gfc_match_char ('*') == MATCH_YES) + return AS_ASSUMED_SIZE; + + m = gfc_match_expr (upper); + if (m == MATCH_ERROR) + return AS_UNKNOWN; + if (m == MATCH_NO) + return AS_ASSUMED_SHAPE; + if (gfc_expr_check_typed (*upper, gfc_current_ns, false) == FAILURE) + return AS_UNKNOWN; + + return AS_EXPLICIT; +} + + +/* Matches an array specification, incidentally figuring out what sort + it is. */ + +match +gfc_match_array_spec (gfc_array_spec **asp) +{ + array_type current_type; + gfc_array_spec *as; + int i; + + if (gfc_match_char ('(') != MATCH_YES) + { + *asp = NULL; + return MATCH_NO; + } + + as = gfc_get_array_spec (); + + for (i = 0; i < GFC_MAX_DIMENSIONS; i++) + { + as->lower[i] = NULL; + as->upper[i] = NULL; + } + + as->rank = 1; + + for (;;) + { + current_type = match_array_element_spec (as); + + if (as->rank == 1) + { + if (current_type == AS_UNKNOWN) + goto cleanup; + as->type = current_type; + } + else + switch (as->type) + { /* See how current spec meshes with the existing. */ + case AS_UNKNOWN: + goto cleanup; + + case AS_EXPLICIT: + if (current_type == AS_ASSUMED_SIZE) + { + as->type = AS_ASSUMED_SIZE; + break; + } + + if (current_type == AS_EXPLICIT) + break; + + gfc_error ("Bad array specification for an explicitly shaped " + "array at %C"); + + goto cleanup; + + case AS_ASSUMED_SHAPE: + if ((current_type == AS_ASSUMED_SHAPE) + || (current_type == AS_DEFERRED)) + break; + + gfc_error ("Bad array specification for assumed shape " + "array at %C"); + goto cleanup; + + case AS_DEFERRED: + if (current_type == AS_DEFERRED) + break; + + if (current_type == AS_ASSUMED_SHAPE) + { + as->type = AS_ASSUMED_SHAPE; + break; + } + + gfc_error ("Bad specification for deferred shape array at %C"); + goto cleanup; + + case AS_ASSUMED_SIZE: + gfc_error ("Bad specification for assumed size array at %C"); + goto cleanup; + } + + if (gfc_match_char (')') == MATCH_YES) + break; + + if (gfc_match_char (',') != MATCH_YES) + { + gfc_error ("Expected another dimension in array declaration at %C"); + goto cleanup; + } + + if (as->rank >= GFC_MAX_DIMENSIONS) + { + gfc_error ("Array specification at %C has more than %d dimensions", + GFC_MAX_DIMENSIONS); + goto cleanup; + } + + if (as->rank >= 7 + && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: Array " + "specification at %C with more than 7 dimensions") + == FAILURE) + goto cleanup; + + as->rank++; + } + + /* If a lower bounds of an assumed shape array is blank, put in one. */ + if (as->type == AS_ASSUMED_SHAPE) + { + for (i = 0; i < as->rank; i++) + { + if (as->lower[i] == NULL) + as->lower[i] = gfc_int_expr (1); + } + } + *asp = as; + return MATCH_YES; + +cleanup: + /* Something went wrong. */ + gfc_free_array_spec (as); + return MATCH_ERROR; +} + + +/* Given a symbol and an array specification, modify the symbol to + have that array specification. The error locus is needed in case + something goes wrong. On failure, the caller must free the spec. */ + +gfc_try +gfc_set_array_spec (gfc_symbol *sym, gfc_array_spec *as, locus *error_loc) +{ + if (as == NULL) + return SUCCESS; + + if (gfc_add_dimension (&sym->attr, sym->name, error_loc) == FAILURE) + return FAILURE; + + sym->as = as; + + return SUCCESS; +} + + +/* Copy an array specification. */ + +gfc_array_spec * +gfc_copy_array_spec (gfc_array_spec *src) +{ + gfc_array_spec *dest; + int i; + + if (src == NULL) + return NULL; + + dest = gfc_get_array_spec (); + + *dest = *src; + + for (i = 0; i < dest->rank; i++) + { + dest->lower[i] = gfc_copy_expr (dest->lower[i]); + dest->upper[i] = gfc_copy_expr (dest->upper[i]); + } + + return dest; +} + + +/* Returns nonzero if the two expressions are equal. Only handles integer + constants. */ + +static int +compare_bounds (gfc_expr *bound1, gfc_expr *bound2) +{ + if (bound1 == NULL || bound2 == NULL + || bound1->expr_type != EXPR_CONSTANT + || bound2->expr_type != EXPR_CONSTANT + || bound1->ts.type != BT_INTEGER + || bound2->ts.type != BT_INTEGER) + gfc_internal_error ("gfc_compare_array_spec(): Array spec clobbered"); + + if (mpz_cmp (bound1->value.integer, bound2->value.integer) == 0) + return 1; + else + return 0; +} + + +/* Compares two array specifications. They must be constant or deferred + shape. */ + +int +gfc_compare_array_spec (gfc_array_spec *as1, gfc_array_spec *as2) +{ + int i; + + if (as1 == NULL && as2 == NULL) + return 1; + + if (as1 == NULL || as2 == NULL) + return 0; + + if (as1->rank != as2->rank) + return 0; + + if (as1->rank == 0) + return 1; + + if (as1->type != as2->type) + return 0; + + if (as1->type == AS_EXPLICIT) + for (i = 0; i < as1->rank; i++) + { + if (compare_bounds (as1->lower[i], as2->lower[i]) == 0) + return 0; + + if (compare_bounds (as1->upper[i], as2->upper[i]) == 0) + return 0; + } + + return 1; +} + + +/****************** Array constructor functions ******************/ + +/* Start an array constructor. The constructor starts with zero + elements and should be appended to by gfc_append_constructor(). */ + +gfc_expr * +gfc_start_constructor (bt type, int kind, locus *where) +{ + gfc_expr *result; + + result = gfc_get_expr (); + + result->expr_type = EXPR_ARRAY; + result->rank = 1; + + result->ts.type = type; + result->ts.kind = kind; + result->where = *where; + return result; +} + + +/* Given an array constructor expression, append the new expression + node onto the constructor. */ + +void +gfc_append_constructor (gfc_expr *base, gfc_expr *new_expr) +{ + gfc_constructor *c; + + if (base->value.constructor == NULL) + base->value.constructor = c = gfc_get_constructor (); + else + { + c = base->value.constructor; + while (c->next) + c = c->next; + + c->next = gfc_get_constructor (); + c = c->next; + } + + c->expr = new_expr; + + if (new_expr->ts.type != base->ts.type || new_expr->ts.kind != base->ts.kind) + gfc_internal_error ("gfc_append_constructor(): New node has wrong kind"); +} + + +/* Given an array constructor expression, insert the new expression's + constructor onto the base's one according to the offset. */ + +void +gfc_insert_constructor (gfc_expr *base, gfc_constructor *c1) +{ + gfc_constructor *c, *pre; + expr_t type; + int t; + + type = base->expr_type; + + if (base->value.constructor == NULL) + base->value.constructor = c1; + else + { + c = pre = base->value.constructor; + while (c) + { + if (type == EXPR_ARRAY) + { + t = mpz_cmp (c->n.offset, c1->n.offset); + if (t < 0) + { + pre = c; + c = c->next; + } + else if (t == 0) + { + gfc_error ("duplicated initializer"); + break; + } + else + break; + } + else + { + pre = c; + c = c->next; + } + } + + if (pre != c) + { + pre->next = c1; + c1->next = c; + } + else + { + c1->next = c; + base->value.constructor = c1; + } + } +} + + +/* Get a new constructor. */ + +gfc_constructor * +gfc_get_constructor (void) +{ + gfc_constructor *c; + + c = XCNEW (gfc_constructor); + c->expr = NULL; + c->iterator = NULL; + c->next = NULL; + mpz_init_set_si (c->n.offset, 0); + mpz_init_set_si (c->repeat, 0); + return c; +} + + +/* Free chains of gfc_constructor structures. */ + +void +gfc_free_constructor (gfc_constructor *p) +{ + gfc_constructor *next; + + if (p == NULL) + return; + + for (; p; p = next) + { + next = p->next; + + if (p->expr) + gfc_free_expr (p->expr); + if (p->iterator != NULL) + gfc_free_iterator (p->iterator, 1); + mpz_clear (p->n.offset); + mpz_clear (p->repeat); + gfc_free (p); + } +} + + +/* Given an expression node that might be an array constructor and a + symbol, make sure that no iterators in this or child constructors + use the symbol as an implied-DO iterator. Returns nonzero if a + duplicate was found. */ + +static int +check_duplicate_iterator (gfc_constructor *c, gfc_symbol *master) +{ + gfc_expr *e; + + for (; c; c = c->next) + { + e = c->expr; + + if (e->expr_type == EXPR_ARRAY + && check_duplicate_iterator (e->value.constructor, master)) + return 1; + + if (c->iterator == NULL) + continue; + + if (c->iterator->var->symtree->n.sym == master) + { + gfc_error ("DO-iterator '%s' at %L is inside iterator of the " + "same name", master->name, &c->where); + + return 1; + } + } + + return 0; +} + + +/* Forward declaration because these functions are mutually recursive. */ +static match match_array_cons_element (gfc_constructor **); + +/* Match a list of array elements. */ + +static match +match_array_list (gfc_constructor **result) +{ + gfc_constructor *p, *head, *tail, *new_cons; + gfc_iterator iter; + locus old_loc; + gfc_expr *e; + match m; + int n; + + old_loc = gfc_current_locus; + + if (gfc_match_char ('(') == MATCH_NO) + return MATCH_NO; + + memset (&iter, '\0', sizeof (gfc_iterator)); + head = NULL; + + m = match_array_cons_element (&head); + if (m != MATCH_YES) + goto cleanup; + + tail = head; + + if (gfc_match_char (',') != MATCH_YES) + { + m = MATCH_NO; + goto cleanup; + } + + for (n = 1;; n++) + { + m = gfc_match_iterator (&iter, 0); + if (m == MATCH_YES) + break; + if (m == MATCH_ERROR) + goto cleanup; + + m = match_array_cons_element (&new_cons); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + { + if (n > 2) + goto syntax; + m = MATCH_NO; + goto cleanup; /* Could be a complex constant */ + } + + tail->next = new_cons; + tail = new_cons; + + if (gfc_match_char (',') != MATCH_YES) + { + if (n > 2) + goto syntax; + m = MATCH_NO; + goto cleanup; + } + } + + if (gfc_match_char (')') != MATCH_YES) + goto syntax; + + if (check_duplicate_iterator (head, iter.var->symtree->n.sym)) + { + m = MATCH_ERROR; + goto cleanup; + } + + e = gfc_get_expr (); + e->expr_type = EXPR_ARRAY; + e->where = old_loc; + e->value.constructor = head; + + p = gfc_get_constructor (); + p->where = gfc_current_locus; + p->iterator = gfc_get_iterator (); + *p->iterator = iter; + + p->expr = e; + *result = p; + + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in array constructor at %C"); + m = MATCH_ERROR; + +cleanup: + gfc_free_constructor (head); + gfc_free_iterator (&iter, 0); + gfc_current_locus = old_loc; + return m; +} + + +/* Match a single element of an array constructor, which can be a + single expression or a list of elements. */ + +static match +match_array_cons_element (gfc_constructor **result) +{ + gfc_constructor *p; + gfc_expr *expr; + match m; + + m = match_array_list (result); + if (m != MATCH_NO) + return m; + + m = gfc_match_expr (&expr); + if (m != MATCH_YES) + return m; + + p = gfc_get_constructor (); + p->where = gfc_current_locus; + p->expr = expr; + + *result = p; + return MATCH_YES; +} + + +/* Match an array constructor. */ + +match +gfc_match_array_constructor (gfc_expr **result) +{ + gfc_constructor *head, *tail, *new_cons; + gfc_expr *expr; + gfc_typespec ts; + locus where; + match m; + const char *end_delim; + bool seen_ts; + + if (gfc_match (" (/") == MATCH_NO) + { + if (gfc_match (" [") == MATCH_NO) + return MATCH_NO; + else + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: [...] " + "style array constructors at %C") == FAILURE) + return MATCH_ERROR; + end_delim = " ]"; + } + } + else + end_delim = " /)"; + + where = gfc_current_locus; + head = tail = NULL; + seen_ts = false; + + /* Try to match an optional "type-spec ::" */ + if (gfc_match_type_spec (&ts, 0) == MATCH_YES) + { + seen_ts = (gfc_match (" ::") == MATCH_YES); + + if (seen_ts) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Array constructor " + "including type specification at %C") == FAILURE) + goto cleanup; + } + } + + if (! seen_ts) + gfc_current_locus = where; + + if (gfc_match (end_delim) == MATCH_YES) + { + if (seen_ts) + goto done; + else + { + gfc_error ("Empty array constructor at %C is not allowed"); + goto cleanup; + } + } + + for (;;) + { + m = match_array_cons_element (&new_cons); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + + if (head == NULL) + head = new_cons; + else + tail->next = new_cons; + + tail = new_cons; + + if (gfc_match_char (',') == MATCH_NO) + break; + } + + if (gfc_match (end_delim) == MATCH_NO) + goto syntax; + +done: + expr = gfc_get_expr (); + + expr->expr_type = EXPR_ARRAY; + + expr->value.constructor = head; + /* Size must be calculated at resolution time. */ + + if (seen_ts) + expr->ts = ts; + else + expr->ts.type = BT_UNKNOWN; + + if (expr->ts.cl) + expr->ts.cl->length_from_typespec = seen_ts; + + expr->where = where; + expr->rank = 1; + + *result = expr; + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in array constructor at %C"); + +cleanup: + gfc_free_constructor (head); + return MATCH_ERROR; +} + + + +/************** Check array constructors for correctness **************/ + +/* Given an expression, compare it's type with the type of the current + constructor. Returns nonzero if an error was issued. The + cons_state variable keeps track of whether the type of the + constructor being read or resolved is known to be good, bad or just + starting out. */ + +static gfc_typespec constructor_ts; +static enum +{ CONS_START, CONS_GOOD, CONS_BAD } +cons_state; + +static int +check_element_type (gfc_expr *expr, bool convert) +{ + if (cons_state == CONS_BAD) + return 0; /* Suppress further errors */ + + if (cons_state == CONS_START) + { + if (expr->ts.type == BT_UNKNOWN) + cons_state = CONS_BAD; + else + { + cons_state = CONS_GOOD; + constructor_ts = expr->ts; + } + + return 0; + } + + if (gfc_compare_types (&constructor_ts, &expr->ts)) + return 0; + + if (convert) + return gfc_convert_type (expr, &constructor_ts, 1) == SUCCESS ? 0 : 1; + + gfc_error ("Element in %s array constructor at %L is %s", + gfc_typename (&constructor_ts), &expr->where, + gfc_typename (&expr->ts)); + + cons_state = CONS_BAD; + return 1; +} + + +/* Recursive work function for gfc_check_constructor_type(). */ + +static gfc_try +check_constructor_type (gfc_constructor *c, bool convert) +{ + gfc_expr *e; + + for (; c; c = c->next) + { + e = c->expr; + + if (e->expr_type == EXPR_ARRAY) + { + if (check_constructor_type (e->value.constructor, convert) == FAILURE) + return FAILURE; + + continue; + } + + if (check_element_type (e, convert)) + return FAILURE; + } + + return SUCCESS; +} + + +/* Check that all elements of an array constructor are the same type. + On FAILURE, an error has been generated. */ + +gfc_try +gfc_check_constructor_type (gfc_expr *e) +{ + gfc_try t; + + if (e->ts.type != BT_UNKNOWN) + { + cons_state = CONS_GOOD; + constructor_ts = e->ts; + } + else + { + cons_state = CONS_START; + gfc_clear_ts (&constructor_ts); + } + + /* If e->ts.type != BT_UNKNOWN, the array constructor included a + typespec, and we will now convert the values on the fly. */ + t = check_constructor_type (e->value.constructor, e->ts.type != BT_UNKNOWN); + if (t == SUCCESS && e->ts.type == BT_UNKNOWN) + e->ts = constructor_ts; + + return t; +} + + + +typedef struct cons_stack +{ + gfc_iterator *iterator; + struct cons_stack *previous; +} +cons_stack; + +static cons_stack *base; + +static gfc_try check_constructor (gfc_constructor *, gfc_try (*) (gfc_expr *)); + +/* Check an EXPR_VARIABLE expression in a constructor to make sure + that that variable is an iteration variables. */ + +gfc_try +gfc_check_iter_variable (gfc_expr *expr) +{ + gfc_symbol *sym; + cons_stack *c; + + sym = expr->symtree->n.sym; + + for (c = base; c; c = c->previous) + if (sym == c->iterator->var->symtree->n.sym) + return SUCCESS; + + return FAILURE; +} + + +/* Recursive work function for gfc_check_constructor(). This amounts + to calling the check function for each expression in the + constructor, giving variables with the names of iterators a pass. */ + +static gfc_try +check_constructor (gfc_constructor *c, gfc_try (*check_function) (gfc_expr *)) +{ + cons_stack element; + gfc_expr *e; + gfc_try t; + + for (; c; c = c->next) + { + e = c->expr; + + if (e->expr_type != EXPR_ARRAY) + { + if ((*check_function) (e) == FAILURE) + return FAILURE; + continue; + } + + element.previous = base; + element.iterator = c->iterator; + + base = &element; + t = check_constructor (e->value.constructor, check_function); + base = element.previous; + + if (t == FAILURE) + return FAILURE; + } + + /* Nothing went wrong, so all OK. */ + return SUCCESS; +} + + +/* Checks a constructor to see if it is a particular kind of + expression -- specification, restricted, or initialization as + determined by the check_function. */ + +gfc_try +gfc_check_constructor (gfc_expr *expr, gfc_try (*check_function) (gfc_expr *)) +{ + cons_stack *base_save; + gfc_try t; + + base_save = base; + base = NULL; + + t = check_constructor (expr->value.constructor, check_function); + base = base_save; + + return t; +} + + + +/**************** Simplification of array constructors ****************/ + +iterator_stack *iter_stack; + +typedef struct +{ + gfc_constructor *new_head, *new_tail; + int extract_count, extract_n; + gfc_expr *extracted; + mpz_t *count; + + mpz_t *offset; + gfc_component *component; + mpz_t *repeat; + + gfc_try (*expand_work_function) (gfc_expr *); +} +expand_info; + +static expand_info current_expand; + +static gfc_try expand_constructor (gfc_constructor *); + + +/* Work function that counts the number of elements present in a + constructor. */ + +static gfc_try +count_elements (gfc_expr *e) +{ + mpz_t result; + + if (e->rank == 0) + mpz_add_ui (*current_expand.count, *current_expand.count, 1); + else + { + if (gfc_array_size (e, &result) == FAILURE) + { + gfc_free_expr (e); + return FAILURE; + } + + mpz_add (*current_expand.count, *current_expand.count, result); + mpz_clear (result); + } + + gfc_free_expr (e); + return SUCCESS; +} + + +/* Work function that extracts a particular element from an array + constructor, freeing the rest. */ + +static gfc_try +extract_element (gfc_expr *e) +{ + + if (e->rank != 0) + { /* Something unextractable */ + gfc_free_expr (e); + return FAILURE; + } + + if (current_expand.extract_count == current_expand.extract_n) + current_expand.extracted = e; + else + gfc_free_expr (e); + + current_expand.extract_count++; + return SUCCESS; +} + + +/* Work function that constructs a new constructor out of the old one, + stringing new elements together. */ + +static gfc_try +expand (gfc_expr *e) +{ + if (current_expand.new_head == NULL) + current_expand.new_head = current_expand.new_tail = + gfc_get_constructor (); + else + { + current_expand.new_tail->next = gfc_get_constructor (); + current_expand.new_tail = current_expand.new_tail->next; + } + + current_expand.new_tail->where = e->where; + current_expand.new_tail->expr = e; + + mpz_set (current_expand.new_tail->n.offset, *current_expand.offset); + current_expand.new_tail->n.component = current_expand.component; + mpz_set (current_expand.new_tail->repeat, *current_expand.repeat); + return SUCCESS; +} + + +/* Given an initialization expression that is a variable reference, + substitute the current value of the iteration variable. */ + +void +gfc_simplify_iterator_var (gfc_expr *e) +{ + iterator_stack *p; + + for (p = iter_stack; p; p = p->prev) + if (e->symtree == p->variable) + break; + + if (p == NULL) + return; /* Variable not found */ + + gfc_replace_expr (e, gfc_int_expr (0)); + + mpz_set (e->value.integer, p->value); + + return; +} + + +/* Expand an expression with that is inside of a constructor, + recursing into other constructors if present. */ + +static gfc_try +expand_expr (gfc_expr *e) +{ + if (e->expr_type == EXPR_ARRAY) + return expand_constructor (e->value.constructor); + + e = gfc_copy_expr (e); + + if (gfc_simplify_expr (e, 1) == FAILURE) + { + gfc_free_expr (e); + return FAILURE; + } + + return current_expand.expand_work_function (e); +} + + +static gfc_try +expand_iterator (gfc_constructor *c) +{ + gfc_expr *start, *end, *step; + iterator_stack frame; + mpz_t trip; + gfc_try t; + + end = step = NULL; + + t = FAILURE; + + mpz_init (trip); + mpz_init (frame.value); + frame.prev = NULL; + + start = gfc_copy_expr (c->iterator->start); + if (gfc_simplify_expr (start, 1) == FAILURE) + goto cleanup; + + if (start->expr_type != EXPR_CONSTANT || start->ts.type != BT_INTEGER) + goto cleanup; + + end = gfc_copy_expr (c->iterator->end); + if (gfc_simplify_expr (end, 1) == FAILURE) + goto cleanup; + + if (end->expr_type != EXPR_CONSTANT || end->ts.type != BT_INTEGER) + goto cleanup; + + step = gfc_copy_expr (c->iterator->step); + if (gfc_simplify_expr (step, 1) == FAILURE) + goto cleanup; + + if (step->expr_type != EXPR_CONSTANT || step->ts.type != BT_INTEGER) + goto cleanup; + + if (mpz_sgn (step->value.integer) == 0) + { + gfc_error ("Iterator step at %L cannot be zero", &step->where); + goto cleanup; + } + + /* Calculate the trip count of the loop. */ + mpz_sub (trip, end->value.integer, start->value.integer); + mpz_add (trip, trip, step->value.integer); + mpz_tdiv_q (trip, trip, step->value.integer); + + mpz_set (frame.value, start->value.integer); + + frame.prev = iter_stack; + frame.variable = c->iterator->var->symtree; + iter_stack = &frame; + + while (mpz_sgn (trip) > 0) + { + if (expand_expr (c->expr) == FAILURE) + goto cleanup; + + mpz_add (frame.value, frame.value, step->value.integer); + mpz_sub_ui (trip, trip, 1); + } + + t = SUCCESS; + +cleanup: + gfc_free_expr (start); + gfc_free_expr (end); + gfc_free_expr (step); + + mpz_clear (trip); + mpz_clear (frame.value); + + iter_stack = frame.prev; + + return t; +} + + +/* Expand a constructor into constant constructors without any + iterators, calling the work function for each of the expanded + expressions. The work function needs to either save or free the + passed expression. */ + +static gfc_try +expand_constructor (gfc_constructor *c) +{ + gfc_expr *e; + + for (; c; c = c->next) + { + if (c->iterator != NULL) + { + if (expand_iterator (c) == FAILURE) + return FAILURE; + continue; + } + + e = c->expr; + + if (e->expr_type == EXPR_ARRAY) + { + if (expand_constructor (e->value.constructor) == FAILURE) + return FAILURE; + + continue; + } + + e = gfc_copy_expr (e); + if (gfc_simplify_expr (e, 1) == FAILURE) + { + gfc_free_expr (e); + return FAILURE; + } + current_expand.offset = &c->n.offset; + current_expand.component = c->n.component; + current_expand.repeat = &c->repeat; + if (current_expand.expand_work_function (e) == FAILURE) + return FAILURE; + } + return SUCCESS; +} + + +/* Top level subroutine for expanding constructors. We only expand + constructor if they are small enough. */ + +gfc_try +gfc_expand_constructor (gfc_expr *e) +{ + expand_info expand_save; + gfc_expr *f; + gfc_try rc; + + f = gfc_get_array_element (e, gfc_option.flag_max_array_constructor); + if (f != NULL) + { + gfc_free_expr (f); + return SUCCESS; + } + + expand_save = current_expand; + current_expand.new_head = current_expand.new_tail = NULL; + + iter_stack = NULL; + + current_expand.expand_work_function = expand; + + if (expand_constructor (e->value.constructor) == FAILURE) + { + gfc_free_constructor (current_expand.new_head); + rc = FAILURE; + goto done; + } + + gfc_free_constructor (e->value.constructor); + e->value.constructor = current_expand.new_head; + + rc = SUCCESS; + +done: + current_expand = expand_save; + + return rc; +} + + +/* Work function for checking that an element of a constructor is a + constant, after removal of any iteration variables. We return + FAILURE if not so. */ + +static gfc_try +constant_element (gfc_expr *e) +{ + int rv; + + rv = gfc_is_constant_expr (e); + gfc_free_expr (e); + + return rv ? SUCCESS : FAILURE; +} + + +/* Given an array constructor, determine if the constructor is + constant or not by expanding it and making sure that all elements + are constants. This is a bit of a hack since something like (/ (i, + i=1,100000000) /) will take a while as* opposed to a more clever + function that traverses the expression tree. FIXME. */ + +int +gfc_constant_ac (gfc_expr *e) +{ + expand_info expand_save; + gfc_try rc; + + iter_stack = NULL; + expand_save = current_expand; + current_expand.expand_work_function = constant_element; + + rc = expand_constructor (e->value.constructor); + + current_expand = expand_save; + if (rc == FAILURE) + return 0; + + return 1; +} + + +/* Returns nonzero if an array constructor has been completely + expanded (no iterators) and zero if iterators are present. */ + +int +gfc_expanded_ac (gfc_expr *e) +{ + gfc_constructor *p; + + if (e->expr_type == EXPR_ARRAY) + for (p = e->value.constructor; p; p = p->next) + if (p->iterator != NULL || !gfc_expanded_ac (p->expr)) + return 0; + + return 1; +} + + +/*************** Type resolution of array constructors ***************/ + +/* Recursive array list resolution function. All of the elements must + be of the same type. */ + +static gfc_try +resolve_array_list (gfc_constructor *p) +{ + gfc_try t; + + t = SUCCESS; + + for (; p; p = p->next) + { + if (p->iterator != NULL + && gfc_resolve_iterator (p->iterator, false) == FAILURE) + t = FAILURE; + + if (gfc_resolve_expr (p->expr) == FAILURE) + t = FAILURE; + } + + return t; +} + +/* Resolve character array constructor. If it has a specified constant character + length, pad/truncate the elements here; if the length is not specified and + all elements are of compile-time known length, emit an error as this is + invalid. */ + +gfc_try +gfc_resolve_character_array_constructor (gfc_expr *expr) +{ + gfc_constructor *p; + int found_length; + + gcc_assert (expr->expr_type == EXPR_ARRAY); + gcc_assert (expr->ts.type == BT_CHARACTER); + + if (expr->ts.cl == NULL) + { + for (p = expr->value.constructor; p; p = p->next) + if (p->expr->ts.cl != NULL) + { + /* Ensure that if there is a char_len around that it is + used; otherwise the middle-end confuses them! */ + expr->ts.cl = p->expr->ts.cl; + goto got_charlen; + } + + expr->ts.cl = gfc_get_charlen (); + expr->ts.cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = expr->ts.cl; + } + +got_charlen: + + found_length = -1; + + if (expr->ts.cl->length == NULL) + { + /* Check that all constant string elements have the same length until + we reach the end or find a variable-length one. */ + + for (p = expr->value.constructor; p; p = p->next) + { + int current_length = -1; + gfc_ref *ref; + for (ref = p->expr->ref; ref; ref = ref->next) + if (ref->type == REF_SUBSTRING + && ref->u.ss.start->expr_type == EXPR_CONSTANT + && ref->u.ss.end->expr_type == EXPR_CONSTANT) + break; + + if (p->expr->expr_type == EXPR_CONSTANT) + current_length = p->expr->value.character.length; + else if (ref) + { + long j; + j = mpz_get_ui (ref->u.ss.end->value.integer) + - mpz_get_ui (ref->u.ss.start->value.integer) + 1; + current_length = (int) j; + } + else if (p->expr->ts.cl && p->expr->ts.cl->length + && p->expr->ts.cl->length->expr_type == EXPR_CONSTANT) + { + long j; + j = mpz_get_si (p->expr->ts.cl->length->value.integer); + current_length = (int) j; + } + else + return SUCCESS; + + gcc_assert (current_length != -1); + + if (found_length == -1) + found_length = current_length; + else if (found_length != current_length) + { + gfc_error ("Different CHARACTER lengths (%d/%d) in array" + " constructor at %L", found_length, current_length, + &p->expr->where); + return FAILURE; + } + + gcc_assert (found_length == current_length); + } + + gcc_assert (found_length != -1); + + /* Update the character length of the array constructor. */ + expr->ts.cl->length = gfc_int_expr (found_length); + } + else + { + /* We've got a character length specified. It should be an integer, + otherwise an error is signalled elsewhere. */ + gcc_assert (expr->ts.cl->length); + + /* If we've got a constant character length, pad according to this. + gfc_extract_int does check for BT_INTEGER and EXPR_CONSTANT and sets + max_length only if they pass. */ + gfc_extract_int (expr->ts.cl->length, &found_length); + + /* Now pad/truncate the elements accordingly to the specified character + length. This is ok inside this conditional, as in the case above + (without typespec) all elements are verified to have the same length + anyway. */ + if (found_length != -1) + for (p = expr->value.constructor; p; p = p->next) + if (p->expr->expr_type == EXPR_CONSTANT) + { + gfc_expr *cl = NULL; + int current_length = -1; + bool has_ts; + + if (p->expr->ts.cl && p->expr->ts.cl->length) + { + cl = p->expr->ts.cl->length; + gfc_extract_int (cl, ¤t_length); + } + + /* If gfc_extract_int above set current_length, we implicitly + know the type is BT_INTEGER and it's EXPR_CONSTANT. */ + + has_ts = (expr->ts.cl && expr->ts.cl->length_from_typespec); + + if (! cl + || (current_length != -1 && current_length < found_length)) + gfc_set_constant_character_len (found_length, p->expr, + has_ts ? -1 : found_length); + } + } + + return SUCCESS; +} + + +/* Resolve all of the expressions in an array list. */ + +gfc_try +gfc_resolve_array_constructor (gfc_expr *expr) +{ + gfc_try t; + + t = resolve_array_list (expr->value.constructor); + if (t == SUCCESS) + t = gfc_check_constructor_type (expr); + + /* gfc_resolve_character_array_constructor is called in gfc_resolve_expr after + the call to this function, so we don't need to call it here; if it was + called twice, an error message there would be duplicated. */ + + return t; +} + + +/* Copy an iterator structure. */ + +static gfc_iterator * +copy_iterator (gfc_iterator *src) +{ + gfc_iterator *dest; + + if (src == NULL) + return NULL; + + dest = gfc_get_iterator (); + + dest->var = gfc_copy_expr (src->var); + dest->start = gfc_copy_expr (src->start); + dest->end = gfc_copy_expr (src->end); + dest->step = gfc_copy_expr (src->step); + + return dest; +} + + +/* Copy a constructor structure. */ + +gfc_constructor * +gfc_copy_constructor (gfc_constructor *src) +{ + gfc_constructor *dest; + gfc_constructor *tail; + + if (src == NULL) + return NULL; + + dest = tail = NULL; + while (src) + { + if (dest == NULL) + dest = tail = gfc_get_constructor (); + else + { + tail->next = gfc_get_constructor (); + tail = tail->next; + } + tail->where = src->where; + tail->expr = gfc_copy_expr (src->expr); + tail->iterator = copy_iterator (src->iterator); + mpz_set (tail->n.offset, src->n.offset); + tail->n.component = src->n.component; + mpz_set (tail->repeat, src->repeat); + src = src->next; + } + + return dest; +} + + +/* Given an array expression and an element number (starting at zero), + return a pointer to the array element. NULL is returned if the + size of the array has been exceeded. The expression node returned + remains a part of the array and should not be freed. Access is not + efficient at all, but this is another place where things do not + have to be particularly fast. */ + +gfc_expr * +gfc_get_array_element (gfc_expr *array, int element) +{ + expand_info expand_save; + gfc_expr *e; + gfc_try rc; + + expand_save = current_expand; + current_expand.extract_n = element; + current_expand.expand_work_function = extract_element; + current_expand.extracted = NULL; + current_expand.extract_count = 0; + + iter_stack = NULL; + + rc = expand_constructor (array->value.constructor); + e = current_expand.extracted; + current_expand = expand_save; + + if (rc == FAILURE) + return NULL; + + return e; +} + + +/********* Subroutines for determining the size of an array *********/ + +/* These are needed just to accommodate RESHAPE(). There are no + diagnostics here, we just return a negative number if something + goes wrong. */ + + +/* Get the size of single dimension of an array specification. The + array is guaranteed to be one dimensional. */ + +gfc_try +spec_dimen_size (gfc_array_spec *as, int dimen, mpz_t *result) +{ + if (as == NULL) + return FAILURE; + + if (dimen < 0 || dimen > as->rank - 1) + gfc_internal_error ("spec_dimen_size(): Bad dimension"); + + if (as->type != AS_EXPLICIT + || as->lower[dimen]->expr_type != EXPR_CONSTANT + || as->upper[dimen]->expr_type != EXPR_CONSTANT + || as->lower[dimen]->ts.type != BT_INTEGER + || as->upper[dimen]->ts.type != BT_INTEGER) + return FAILURE; + + mpz_init (*result); + + mpz_sub (*result, as->upper[dimen]->value.integer, + as->lower[dimen]->value.integer); + + mpz_add_ui (*result, *result, 1); + + return SUCCESS; +} + + +gfc_try +spec_size (gfc_array_spec *as, mpz_t *result) +{ + mpz_t size; + int d; + + mpz_init_set_ui (*result, 1); + + for (d = 0; d < as->rank; d++) + { + if (spec_dimen_size (as, d, &size) == FAILURE) + { + mpz_clear (*result); + return FAILURE; + } + + mpz_mul (*result, *result, size); + mpz_clear (size); + } + + return SUCCESS; +} + + +/* Get the number of elements in an array section. */ + +gfc_try +gfc_ref_dimen_size (gfc_array_ref *ar, int dimen, mpz_t *result) +{ + mpz_t upper, lower, stride; + gfc_try t; + + if (dimen < 0 || ar == NULL || dimen > ar->dimen - 1) + gfc_internal_error ("gfc_ref_dimen_size(): Bad dimension"); + + switch (ar->dimen_type[dimen]) + { + case DIMEN_ELEMENT: + mpz_init (*result); + mpz_set_ui (*result, 1); + t = SUCCESS; + break; + + case DIMEN_VECTOR: + t = gfc_array_size (ar->start[dimen], result); /* Recurse! */ + break; + + case DIMEN_RANGE: + mpz_init (upper); + mpz_init (lower); + mpz_init (stride); + t = FAILURE; + + if (ar->start[dimen] == NULL) + { + if (ar->as->lower[dimen] == NULL + || ar->as->lower[dimen]->expr_type != EXPR_CONSTANT) + goto cleanup; + mpz_set (lower, ar->as->lower[dimen]->value.integer); + } + else + { + if (ar->start[dimen]->expr_type != EXPR_CONSTANT) + goto cleanup; + mpz_set (lower, ar->start[dimen]->value.integer); + } + + if (ar->end[dimen] == NULL) + { + if (ar->as->upper[dimen] == NULL + || ar->as->upper[dimen]->expr_type != EXPR_CONSTANT) + goto cleanup; + mpz_set (upper, ar->as->upper[dimen]->value.integer); + } + else + { + if (ar->end[dimen]->expr_type != EXPR_CONSTANT) + goto cleanup; + mpz_set (upper, ar->end[dimen]->value.integer); + } + + if (ar->stride[dimen] == NULL) + mpz_set_ui (stride, 1); + else + { + if (ar->stride[dimen]->expr_type != EXPR_CONSTANT) + goto cleanup; + mpz_set (stride, ar->stride[dimen]->value.integer); + } + + mpz_init (*result); + mpz_sub (*result, upper, lower); + mpz_add (*result, *result, stride); + mpz_div (*result, *result, stride); + + /* Zero stride caught earlier. */ + if (mpz_cmp_ui (*result, 0) < 0) + mpz_set_ui (*result, 0); + t = SUCCESS; + + cleanup: + mpz_clear (upper); + mpz_clear (lower); + mpz_clear (stride); + return t; + + default: + gfc_internal_error ("gfc_ref_dimen_size(): Bad dimen_type"); + } + + return t; +} + + +static gfc_try +ref_size (gfc_array_ref *ar, mpz_t *result) +{ + mpz_t size; + int d; + + mpz_init_set_ui (*result, 1); + + for (d = 0; d < ar->dimen; d++) + { + if (gfc_ref_dimen_size (ar, d, &size) == FAILURE) + { + mpz_clear (*result); + return FAILURE; + } + + mpz_mul (*result, *result, size); + mpz_clear (size); + } + + return SUCCESS; +} + + +/* Given an array expression and a dimension, figure out how many + elements it has along that dimension. Returns SUCCESS if we were + able to return a result in the 'result' variable, FAILURE + otherwise. */ + +gfc_try +gfc_array_dimen_size (gfc_expr *array, int dimen, mpz_t *result) +{ + gfc_ref *ref; + int i; + + if (dimen < 0 || array == NULL || dimen > array->rank - 1) + gfc_internal_error ("gfc_array_dimen_size(): Bad dimension"); + + switch (array->expr_type) + { + case EXPR_VARIABLE: + case EXPR_FUNCTION: + for (ref = array->ref; ref; ref = ref->next) + { + if (ref->type != REF_ARRAY) + continue; + + if (ref->u.ar.type == AR_FULL) + return spec_dimen_size (ref->u.ar.as, dimen, result); + + if (ref->u.ar.type == AR_SECTION) + { + for (i = 0; dimen >= 0; i++) + if (ref->u.ar.dimen_type[i] != DIMEN_ELEMENT) + dimen--; + + return gfc_ref_dimen_size (&ref->u.ar, i - 1, result); + } + } + + if (array->shape && array->shape[dimen]) + { + mpz_init_set (*result, array->shape[dimen]); + return SUCCESS; + } + + if (spec_dimen_size (array->symtree->n.sym->as, dimen, result) == FAILURE) + return FAILURE; + + break; + + case EXPR_ARRAY: + if (array->shape == NULL) { + /* Expressions with rank > 1 should have "shape" properly set */ + if ( array->rank != 1 ) + gfc_internal_error ("gfc_array_dimen_size(): Bad EXPR_ARRAY expr"); + return gfc_array_size(array, result); + } + + /* Fall through */ + default: + if (array->shape == NULL) + return FAILURE; + + mpz_init_set (*result, array->shape[dimen]); + + break; + } + + return SUCCESS; +} + + +/* Given an array expression, figure out how many elements are in the + array. Returns SUCCESS if this is possible, and sets the 'result' + variable. Otherwise returns FAILURE. */ + +gfc_try +gfc_array_size (gfc_expr *array, mpz_t *result) +{ + expand_info expand_save; + gfc_ref *ref; + int i; + gfc_try t; + + switch (array->expr_type) + { + case EXPR_ARRAY: + gfc_push_suppress_errors (); + + expand_save = current_expand; + + current_expand.count = result; + mpz_init_set_ui (*result, 0); + + current_expand.expand_work_function = count_elements; + iter_stack = NULL; + + t = expand_constructor (array->value.constructor); + + gfc_pop_suppress_errors (); + + if (t == FAILURE) + mpz_clear (*result); + current_expand = expand_save; + return t; + + case EXPR_VARIABLE: + for (ref = array->ref; ref; ref = ref->next) + { + if (ref->type != REF_ARRAY) + continue; + + if (ref->u.ar.type == AR_FULL) + return spec_size (ref->u.ar.as, result); + + if (ref->u.ar.type == AR_SECTION) + return ref_size (&ref->u.ar, result); + } + + return spec_size (array->symtree->n.sym->as, result); + + + default: + if (array->rank == 0 || array->shape == NULL) + return FAILURE; + + mpz_init_set_ui (*result, 1); + + for (i = 0; i < array->rank; i++) + mpz_mul (*result, *result, array->shape[i]); + + break; + } + + return SUCCESS; +} + + +/* Given an array reference, return the shape of the reference in an + array of mpz_t integers. */ + +gfc_try +gfc_array_ref_shape (gfc_array_ref *ar, mpz_t *shape) +{ + int d; + int i; + + d = 0; + + switch (ar->type) + { + case AR_FULL: + for (; d < ar->as->rank; d++) + if (spec_dimen_size (ar->as, d, &shape[d]) == FAILURE) + goto cleanup; + + return SUCCESS; + + case AR_SECTION: + for (i = 0; i < ar->dimen; i++) + { + if (ar->dimen_type[i] != DIMEN_ELEMENT) + { + if (gfc_ref_dimen_size (ar, i, &shape[d]) == FAILURE) + goto cleanup; + d++; + } + } + + return SUCCESS; + + default: + break; + } + +cleanup: + for (d--; d >= 0; d--) + mpz_clear (shape[d]); + + return FAILURE; +} + + +/* Given an array expression, find the array reference structure that + characterizes the reference. */ + +gfc_array_ref * +gfc_find_array_ref (gfc_expr *e) +{ + gfc_ref *ref; + + for (ref = e->ref; ref; ref = ref->next) + if (ref->type == REF_ARRAY + && (ref->u.ar.type == AR_FULL || ref->u.ar.type == AR_SECTION)) + break; + + if (ref == NULL) + gfc_internal_error ("gfc_find_array_ref(): No ref found"); + + return &ref->u.ar; +} + + +/* Find out if an array shape is known at compile time. */ + +int +gfc_is_compile_time_shape (gfc_array_spec *as) +{ + int i; + + if (as->type != AS_EXPLICIT) + return 0; + + for (i = 0; i < as->rank; i++) + if (!gfc_is_constant_expr (as->lower[i]) + || !gfc_is_constant_expr (as->upper[i])) + return 0; + + return 1; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/bbt.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/bbt.c new file mode 100644 index 0000000000..fa60e4fee2 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/bbt.c @@ -0,0 +1,197 @@ +/* Balanced binary trees using treaps. + Copyright (C) 2000, 2002, 2003, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* The idea is to balance the tree using pseudorandom numbers. The + main constraint on this implementation is that we have several + distinct structures that have to be arranged in a binary tree. + These structures all contain a BBT_HEADER() in front that gives the + treap-related information. The key and value are assumed to reside + in the rest of the structure. + + When calling, we are also passed a comparison function that + compares two nodes. We don't implement a separate 'find' function + here, but rather use separate functions for each variety of tree. + We are also restricted to not copy treap structures, which most + implementations find convenient, because we otherwise would need to + know how long the structure is. + + This implementation is based on Stefan Nilsson's article in the + July 1997 Doctor Dobb's Journal, "Treaps in Java". */ + +#include "config.h" +#include "gfortran.h" + +typedef struct gfc_treap +{ + BBT_HEADER (gfc_treap); +} +gfc_bbt; + +/* Simple linear congruential pseudorandom number generator. The + period of this generator is 44071, which is plenty for our + purposes. */ + +static int +pseudo_random (void) +{ + static int x0 = 5341; + + x0 = (22611 * x0 + 10) % 44071; + return x0; +} + + +/* Rotate the treap left. */ + +static gfc_bbt * +rotate_left (gfc_bbt *t) +{ + gfc_bbt *temp; + + temp = t->right; + t->right = t->right->left; + temp->left = t; + + return temp; +} + + +/* Rotate the treap right. */ + +static gfc_bbt * +rotate_right (gfc_bbt *t) +{ + gfc_bbt *temp; + + temp = t->left; + t->left = t->left->right; + temp->right = t; + + return temp; +} + + +/* Recursive insertion function. Returns the updated treap, or + aborts if we find a duplicate key. */ + +static gfc_bbt * +insert (gfc_bbt *new_bbt, gfc_bbt *t, compare_fn compare) +{ + int c; + + if (t == NULL) + return new_bbt; + + c = (*compare) (new_bbt, t); + + if (c < 0) + { + t->left = insert (new_bbt, t->left, compare); + if (t->priority < t->left->priority) + t = rotate_right (t); + } + else if (c > 0) + { + t->right = insert (new_bbt, t->right, compare); + if (t->priority < t->right->priority) + t = rotate_left (t); + } + else /* if (c == 0) */ + gfc_internal_error("insert_bbt(): Duplicate key found!"); + + return t; +} + + +/* Given root pointer, a new node and a comparison function, insert + the new node into the treap. It is an error to insert a key that + already exists. */ + +void +gfc_insert_bbt (void *root, void *new_node, compare_fn compare) +{ + gfc_bbt **r, *n; + + r = (gfc_bbt **) root; + n = (gfc_bbt *) new_node; + n->priority = pseudo_random (); + *r = insert (n, *r, compare); +} + +static gfc_bbt * +delete_root (gfc_bbt *t) +{ + gfc_bbt *temp; + + if (t->left == NULL) + return t->right; + if (t->right == NULL) + return t->left; + + if (t->left->priority > t->right->priority) + { + temp = rotate_right (t); + temp->right = delete_root (t); + } + else + { + temp = rotate_left (t); + temp->left = delete_root (t); + } + + return temp; +} + + +/* Delete an element from a tree. The 'old' value does not + necessarily have to point to the element to be deleted, it must + just point to a treap structure with the key to be deleted. + Returns the new root node of the tree. */ + +static gfc_bbt * +delete_treap (gfc_bbt *old, gfc_bbt *t, compare_fn compare) +{ + int c; + + if (t == NULL) + return NULL; + + c = (*compare) (old, t); + + if (c < 0) + t->left = delete_treap (old, t->left, compare); + if (c > 0) + t->right = delete_treap (old, t->right, compare); + if (c == 0) + t = delete_root (t); + + return t; +} + + +void +gfc_delete_bbt (void *root, void *old, compare_fn compare) +{ + gfc_bbt **t; + + t = (gfc_bbt **) root; + *t = delete_treap ((gfc_bbt *) old, *t, compare); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/check.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/check.c new file mode 100644 index 0000000000..db29264e9a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/check.c @@ -0,0 +1,3922 @@ +/* Check functions + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught & Katherine Holcomb + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + + +/* These functions check to see if an argument list is compatible with + a particular intrinsic function or subroutine. Presence of + required arguments has already been established, the argument list + has been sorted into the right order and has NULL arguments in the + correct places for missing optional arguments. */ + +#include "config.h" +#include "system.h" +#include "flags.h" +#include "gfortran.h" +#include "intrinsic.h" + + +/* Make sure an expression is a scalar. */ + +static gfc_try +scalar_check (gfc_expr *e, int n) +{ + if (e->rank == 0) + return SUCCESS; + + gfc_error ("'%s' argument of '%s' intrinsic at %L must be a scalar", + gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where); + + return FAILURE; +} + + +/* Check the type of an expression. */ + +static gfc_try +type_check (gfc_expr *e, int n, bt type) +{ + if (e->ts.type == type) + return SUCCESS; + + gfc_error ("'%s' argument of '%s' intrinsic at %L must be %s", + gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where, + gfc_basic_typename (type)); + + return FAILURE; +} + + +/* Check that the expression is a numeric type. */ + +static gfc_try +numeric_check (gfc_expr *e, int n) +{ + if (gfc_numeric_ts (&e->ts)) + return SUCCESS; + + /* If the expression has not got a type, check if its namespace can + offer a default type. */ + if ((e->expr_type == EXPR_VARIABLE || e->expr_type == EXPR_VARIABLE) + && e->symtree->n.sym->ts.type == BT_UNKNOWN + && gfc_set_default_type (e->symtree->n.sym, 0, + e->symtree->n.sym->ns) == SUCCESS + && gfc_numeric_ts (&e->symtree->n.sym->ts)) + { + e->ts = e->symtree->n.sym->ts; + return SUCCESS; + } + + gfc_error ("'%s' argument of '%s' intrinsic at %L must be a numeric type", + gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where); + + return FAILURE; +} + + +/* Check that an expression is integer or real. */ + +static gfc_try +int_or_real_check (gfc_expr *e, int n) +{ + if (e->ts.type != BT_INTEGER && e->ts.type != BT_REAL) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER " + "or REAL", gfc_current_intrinsic_arg[n], + gfc_current_intrinsic, &e->where); + return FAILURE; + } + + return SUCCESS; +} + + +/* Check that an expression is real or complex. */ + +static gfc_try +real_or_complex_check (gfc_expr *e, int n) +{ + if (e->ts.type != BT_REAL && e->ts.type != BT_COMPLEX) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be REAL " + "or COMPLEX", gfc_current_intrinsic_arg[n], + gfc_current_intrinsic, &e->where); + return FAILURE; + } + + return SUCCESS; +} + + +/* Check that the expression is an optional constant integer + and that it specifies a valid kind for that type. */ + +static gfc_try +kind_check (gfc_expr *k, int n, bt type) +{ + int kind; + + if (k == NULL) + return SUCCESS; + + if (type_check (k, n, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (k, n) == FAILURE) + return FAILURE; + + if (k->expr_type != EXPR_CONSTANT) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be a constant", + gfc_current_intrinsic_arg[n], gfc_current_intrinsic, + &k->where); + return FAILURE; + } + + if (gfc_extract_int (k, &kind) != NULL + || gfc_validate_kind (type, kind, true) < 0) + { + gfc_error ("Invalid kind for %s at %L", gfc_basic_typename (type), + &k->where); + return FAILURE; + } + + return SUCCESS; +} + + +/* Make sure the expression is a double precision real. */ + +static gfc_try +double_check (gfc_expr *d, int n) +{ + if (type_check (d, n, BT_REAL) == FAILURE) + return FAILURE; + + if (d->ts.kind != gfc_default_double_kind) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be double " + "precision", gfc_current_intrinsic_arg[n], + gfc_current_intrinsic, &d->where); + return FAILURE; + } + + return SUCCESS; +} + + +/* Make sure the expression is a logical array. */ + +static gfc_try +logical_array_check (gfc_expr *array, int n) +{ + if (array->ts.type != BT_LOGICAL || array->rank == 0) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be a logical " + "array", gfc_current_intrinsic_arg[n], gfc_current_intrinsic, + &array->where); + return FAILURE; + } + + return SUCCESS; +} + + +/* Make sure an expression is an array. */ + +static gfc_try +array_check (gfc_expr *e, int n) +{ + if (e->rank != 0) + return SUCCESS; + + gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array", + gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where); + + return FAILURE; +} + + +/* Make sure two expressions have the same type. */ + +static gfc_try +same_type_check (gfc_expr *e, int n, gfc_expr *f, int m) +{ + if (gfc_compare_types (&e->ts, &f->ts)) + return SUCCESS; + + gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same type " + "and kind as '%s'", gfc_current_intrinsic_arg[m], + gfc_current_intrinsic, &f->where, gfc_current_intrinsic_arg[n]); + + return FAILURE; +} + + +/* Make sure that an expression has a certain (nonzero) rank. */ + +static gfc_try +rank_check (gfc_expr *e, int n, int rank) +{ + if (e->rank == rank) + return SUCCESS; + + gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank %d", + gfc_current_intrinsic_arg[n], gfc_current_intrinsic, + &e->where, rank); + + return FAILURE; +} + + +/* Make sure a variable expression is not an optional dummy argument. */ + +static gfc_try +nonoptional_check (gfc_expr *e, int n) +{ + if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must not be OPTIONAL", + gfc_current_intrinsic_arg[n], gfc_current_intrinsic, + &e->where); + } + + /* TODO: Recursive check on nonoptional variables? */ + + return SUCCESS; +} + + +/* Check that an expression has a particular kind. */ + +static gfc_try +kind_value_check (gfc_expr *e, int n, int k) +{ + if (e->ts.kind == k) + return SUCCESS; + + gfc_error ("'%s' argument of '%s' intrinsic at %L must be of kind %d", + gfc_current_intrinsic_arg[n], gfc_current_intrinsic, + &e->where, k); + + return FAILURE; +} + + +/* Make sure an expression is a variable. */ + +static gfc_try +variable_check (gfc_expr *e, int n) +{ + if ((e->expr_type == EXPR_VARIABLE + && e->symtree->n.sym->attr.flavor != FL_PARAMETER) + || (e->expr_type == EXPR_FUNCTION + && e->symtree->n.sym->result == e->symtree->n.sym)) + return SUCCESS; + + if (e->expr_type == EXPR_VARIABLE + && e->symtree->n.sym->attr.intent == INTENT_IN) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)", + gfc_current_intrinsic_arg[n], gfc_current_intrinsic, + &e->where); + return FAILURE; + } + + gfc_error ("'%s' argument of '%s' intrinsic at %L must be a variable", + gfc_current_intrinsic_arg[n], gfc_current_intrinsic, &e->where); + + return FAILURE; +} + + +/* Check the common DIM parameter for correctness. */ + +static gfc_try +dim_check (gfc_expr *dim, int n, bool optional) +{ + if (dim == NULL) + return SUCCESS; + + if (type_check (dim, n, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (dim, n) == FAILURE) + return FAILURE; + + if (!optional && nonoptional_check (dim, n) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* If a DIM parameter is a constant, make sure that it is greater than + zero and less than or equal to the rank of the given array. If + allow_assumed is zero then dim must be less than the rank of the array + for assumed size arrays. */ + +static gfc_try +dim_rank_check (gfc_expr *dim, gfc_expr *array, int allow_assumed) +{ + gfc_array_ref *ar; + int rank; + + if (dim->expr_type != EXPR_CONSTANT + || (array->expr_type != EXPR_VARIABLE + && array->expr_type != EXPR_ARRAY)) + return SUCCESS; + + rank = array->rank; + if (array->expr_type == EXPR_VARIABLE) + { + ar = gfc_find_array_ref (array); + if (ar->as->type == AS_ASSUMED_SIZE + && !allow_assumed + && ar->type != AR_ELEMENT + && ar->type != AR_SECTION) + rank--; + } + + if (mpz_cmp_ui (dim->value.integer, 1) < 0 + || mpz_cmp_ui (dim->value.integer, rank) > 0) + { + gfc_error ("'dim' argument of '%s' intrinsic at %L is not a valid " + "dimension index", gfc_current_intrinsic, &dim->where); + + return FAILURE; + } + + return SUCCESS; +} + + +/* Compare the size of a along dimension ai with the size of b along + dimension bi, returning 0 if they are known not to be identical, + and 1 if they are identical, or if this cannot be determined. */ + +static int +identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi) +{ + mpz_t a_size, b_size; + int ret; + + gcc_assert (a->rank > ai); + gcc_assert (b->rank > bi); + + ret = 1; + + if (gfc_array_dimen_size (a, ai, &a_size) == SUCCESS) + { + if (gfc_array_dimen_size (b, bi, &b_size) == SUCCESS) + { + if (mpz_cmp (a_size, b_size) != 0) + ret = 0; + + mpz_clear (b_size); + } + mpz_clear (a_size); + } + return ret; +} + + +/* Check whether two character expressions have the same length; + returns SUCCESS if they have or if the length cannot be determined. */ + +gfc_try +gfc_check_same_strlen (const gfc_expr *a, const gfc_expr *b, const char *name) +{ + long len_a, len_b; + len_a = len_b = -1; + + if (a->ts.cl && a->ts.cl->length + && a->ts.cl->length->expr_type == EXPR_CONSTANT) + len_a = mpz_get_si (a->ts.cl->length->value.integer); + else if (a->expr_type == EXPR_CONSTANT + && (a->ts.cl == NULL || a->ts.cl->length == NULL)) + len_a = a->value.character.length; + else + return SUCCESS; + + if (b->ts.cl && b->ts.cl->length + && b->ts.cl->length->expr_type == EXPR_CONSTANT) + len_b = mpz_get_si (b->ts.cl->length->value.integer); + else if (b->expr_type == EXPR_CONSTANT + && (b->ts.cl == NULL || b->ts.cl->length == NULL)) + len_b = b->value.character.length; + else + return SUCCESS; + + if (len_a == len_b) + return SUCCESS; + + gfc_error ("Unequal character lengths (%ld/%ld) in %s at %L", + len_a, len_b, name, &a->where); + return FAILURE; +} + + +/***** Check functions *****/ + +/* Check subroutine suitable for intrinsics taking a real argument and + a kind argument for the result. */ + +static gfc_try +check_a_kind (gfc_expr *a, gfc_expr *kind, bt type) +{ + if (type_check (a, 0, BT_REAL) == FAILURE) + return FAILURE; + if (kind_check (kind, 1, type) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* Check subroutine suitable for ceiling, floor and nint. */ + +gfc_try +gfc_check_a_ikind (gfc_expr *a, gfc_expr *kind) +{ + return check_a_kind (a, kind, BT_INTEGER); +} + + +/* Check subroutine suitable for aint, anint. */ + +gfc_try +gfc_check_a_xkind (gfc_expr *a, gfc_expr *kind) +{ + return check_a_kind (a, kind, BT_REAL); +} + + +gfc_try +gfc_check_abs (gfc_expr *a) +{ + if (numeric_check (a, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_achar (gfc_expr *a, gfc_expr *kind) +{ + if (type_check (a, 0, BT_INTEGER) == FAILURE) + return FAILURE; + if (kind_check (kind, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_access_func (gfc_expr *name, gfc_expr *mode) +{ + if (type_check (name, 0, BT_CHARACTER) == FAILURE + || scalar_check (name, 0) == FAILURE) + return FAILURE; + if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (type_check (mode, 1, BT_CHARACTER) == FAILURE + || scalar_check (mode, 1) == FAILURE) + return FAILURE; + if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_all_any (gfc_expr *mask, gfc_expr *dim) +{ + if (logical_array_check (mask, 0) == FAILURE) + return FAILURE; + + if (dim_check (dim, 1, false) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_allocated (gfc_expr *array) +{ + symbol_attribute attr; + + if (variable_check (array, 0) == FAILURE) + return FAILURE; + + attr = gfc_variable_attr (array, NULL); + if (!attr.allocatable) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE", + gfc_current_intrinsic_arg[0], gfc_current_intrinsic, + &array->where); + return FAILURE; + } + + if (array_check (array, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* Common check function where the first argument must be real or + integer and the second argument must be the same as the first. */ + +gfc_try +gfc_check_a_p (gfc_expr *a, gfc_expr *p) +{ + if (int_or_real_check (a, 0) == FAILURE) + return FAILURE; + + if (a->ts.type != p->ts.type) + { + gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must " + "have the same type", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic_arg[1], gfc_current_intrinsic, + &p->where); + return FAILURE; + } + + if (a->ts.kind != p->ts.kind) + { + if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L", + &p->where) == FAILURE) + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_x_yd (gfc_expr *x, gfc_expr *y) +{ + if (double_check (x, 0) == FAILURE || double_check (y, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_associated (gfc_expr *pointer, gfc_expr *target) +{ + symbol_attribute attr1, attr2; + int i; + gfc_try t; + locus *where; + + where = &pointer->where; + + if (pointer->expr_type == EXPR_VARIABLE) + attr1 = gfc_variable_attr (pointer, NULL); + else if (pointer->expr_type == EXPR_FUNCTION) + attr1 = pointer->symtree->n.sym->attr; + else if (pointer->expr_type == EXPR_NULL) + goto null_arg; + else + gcc_assert (0); /* Pointer must be a variable or a function. */ + + if (!attr1.pointer && !attr1.proc_pointer) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER", + gfc_current_intrinsic_arg[0], gfc_current_intrinsic, + &pointer->where); + return FAILURE; + } + + /* Target argument is optional. */ + if (target == NULL) + return SUCCESS; + + where = &target->where; + if (target->expr_type == EXPR_NULL) + goto null_arg; + + if (target->expr_type == EXPR_VARIABLE) + attr2 = gfc_variable_attr (target, NULL); + else if (target->expr_type == EXPR_FUNCTION) + attr2 = target->symtree->n.sym->attr; + else + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be a pointer " + "or target VARIABLE or FUNCTION", gfc_current_intrinsic_arg[1], + gfc_current_intrinsic, &target->where); + return FAILURE; + } + + if (attr1.pointer && !attr2.pointer && !attr2.target) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER " + "or a TARGET", gfc_current_intrinsic_arg[1], + gfc_current_intrinsic, &target->where); + return FAILURE; + } + + t = SUCCESS; + if (same_type_check (pointer, 0, target, 1) == FAILURE) + t = FAILURE; + if (rank_check (target, 0, pointer->rank) == FAILURE) + t = FAILURE; + if (target->rank > 0) + { + for (i = 0; i < target->rank; i++) + if (target->ref->u.ar.dimen_type[i] == DIMEN_VECTOR) + { + gfc_error ("Array section with a vector subscript at %L shall not " + "be the target of a pointer", + &target->where); + t = FAILURE; + break; + } + } + return t; + +null_arg: + + gfc_error ("NULL pointer at %L is not permitted as actual argument " + "of '%s' intrinsic function", where, gfc_current_intrinsic); + return FAILURE; + +} + + +gfc_try +gfc_check_atan2 (gfc_expr *y, gfc_expr *x) +{ + if (type_check (y, 0, BT_REAL) == FAILURE) + return FAILURE; + if (same_type_check (y, 0, x, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* BESJN and BESYN functions. */ + +gfc_try +gfc_check_besn (gfc_expr *n, gfc_expr *x) +{ + if (type_check (n, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (x, 1, BT_REAL) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_btest (gfc_expr *i, gfc_expr *pos) +{ + if (type_check (i, 0, BT_INTEGER) == FAILURE) + return FAILURE; + if (type_check (pos, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_char (gfc_expr *i, gfc_expr *kind) +{ + if (type_check (i, 0, BT_INTEGER) == FAILURE) + return FAILURE; + if (kind_check (kind, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_chdir (gfc_expr *dir) +{ + if (type_check (dir, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (dir, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_chdir_sub (gfc_expr *dir, gfc_expr *status) +{ + if (type_check (dir, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (dir, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 1, BT_INTEGER) == FAILURE) + return FAILURE; + if (scalar_check (status, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_chmod (gfc_expr *name, gfc_expr *mode) +{ + if (type_check (name, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (type_check (mode, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_chmod_sub (gfc_expr *name, gfc_expr *mode, gfc_expr *status) +{ + if (type_check (name, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (type_check (mode, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (mode, 1, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind) +{ + if (numeric_check (x, 0) == FAILURE) + return FAILURE; + + if (y != NULL) + { + if (numeric_check (y, 1) == FAILURE) + return FAILURE; + + if (x->ts.type == BT_COMPLEX) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must not be " + "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1], + gfc_current_intrinsic, &y->where); + return FAILURE; + } + } + + if (kind_check (kind, 2, BT_COMPLEX) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_complex (gfc_expr *x, gfc_expr *y) +{ + if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER " + "or REAL", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic, &x->where); + return FAILURE; + } + if (scalar_check (x, 0) == FAILURE) + return FAILURE; + + if (y->ts.type != BT_INTEGER && y->ts.type != BT_REAL) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER " + "or REAL", gfc_current_intrinsic_arg[1], + gfc_current_intrinsic, &y->where); + return FAILURE; + } + if (scalar_check (y, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind) +{ + if (logical_array_check (mask, 0) == FAILURE) + return FAILURE; + if (dim_check (dim, 1, false) == FAILURE) + return FAILURE; + if (kind_check (kind, 2, BT_INTEGER) == FAILURE) + return FAILURE; + if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic " + "with KIND argument at %L", + gfc_current_intrinsic, &kind->where) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_cshift (gfc_expr *array, gfc_expr *shift, gfc_expr *dim) +{ + if (array_check (array, 0) == FAILURE) + return FAILURE; + + if (type_check (shift, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (array->rank == 1) + { + if (scalar_check (shift, 1) == FAILURE) + return FAILURE; + } + else if (shift->rank != array->rank - 1 && shift->rank != 0) + { + gfc_error ("SHIFT argument at %L of CSHIFT must have rank %d or be a " + "scalar", &shift->where, array->rank - 1); + return FAILURE; + } + + /* TODO: Add shape conformance check between array (w/o dimension dim) + and shift. */ + + if (dim_check (dim, 2, true) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_ctime (gfc_expr *time) +{ + if (scalar_check (time, 0) == FAILURE) + return FAILURE; + + if (type_check (time, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try gfc_check_datan2 (gfc_expr *y, gfc_expr *x) +{ + if (double_check (y, 0) == FAILURE || double_check (x, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + +gfc_try +gfc_check_dcmplx (gfc_expr *x, gfc_expr *y) +{ + if (numeric_check (x, 0) == FAILURE) + return FAILURE; + + if (y != NULL) + { + if (numeric_check (y, 1) == FAILURE) + return FAILURE; + + if (x->ts.type == BT_COMPLEX) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must not be " + "present if 'x' is COMPLEX", gfc_current_intrinsic_arg[1], + gfc_current_intrinsic, &y->where); + return FAILURE; + } + } + + return SUCCESS; +} + + +gfc_try +gfc_check_dble (gfc_expr *x) +{ + if (numeric_check (x, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_digits (gfc_expr *x) +{ + if (int_or_real_check (x, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_dot_product (gfc_expr *vector_a, gfc_expr *vector_b) +{ + switch (vector_a->ts.type) + { + case BT_LOGICAL: + if (type_check (vector_b, 1, BT_LOGICAL) == FAILURE) + return FAILURE; + break; + + case BT_INTEGER: + case BT_REAL: + case BT_COMPLEX: + if (numeric_check (vector_b, 1) == FAILURE) + return FAILURE; + break; + + default: + gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric " + "or LOGICAL", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic, &vector_a->where); + return FAILURE; + } + + if (rank_check (vector_a, 0, 1) == FAILURE) + return FAILURE; + + if (rank_check (vector_b, 1, 1) == FAILURE) + return FAILURE; + + if (! identical_dimen_shape (vector_a, 0, vector_b, 0)) + { + gfc_error ("Different shape for arguments '%s' and '%s' at %L for " + "intrinsic 'dot_product'", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic_arg[1], &vector_a->where); + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_dprod (gfc_expr *x, gfc_expr *y) +{ + if (type_check (x, 0, BT_REAL) == FAILURE + || type_check (y, 1, BT_REAL) == FAILURE) + return FAILURE; + + if (x->ts.kind != gfc_default_real_kind) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be default " + "real", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic, &x->where); + return FAILURE; + } + + if (y->ts.kind != gfc_default_real_kind) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be default " + "real", gfc_current_intrinsic_arg[1], + gfc_current_intrinsic, &y->where); + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_eoshift (gfc_expr *array, gfc_expr *shift, gfc_expr *boundary, + gfc_expr *dim) +{ + if (array_check (array, 0) == FAILURE) + return FAILURE; + + if (type_check (shift, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (array->rank == 1) + { + if (scalar_check (shift, 2) == FAILURE) + return FAILURE; + } + else if (shift->rank != array->rank - 1 && shift->rank != 0) + { + gfc_error ("SHIFT argument at %L of EOSHIFT must have rank %d or be a " + "scalar", &shift->where, array->rank - 1); + return FAILURE; + } + + /* TODO: Add shape conformance check between array (w/o dimension dim) + and shift. */ + + if (boundary != NULL) + { + if (same_type_check (array, 0, boundary, 2) == FAILURE) + return FAILURE; + + if (array->rank == 1) + { + if (scalar_check (boundary, 2) == FAILURE) + return FAILURE; + } + else if (boundary->rank != array->rank - 1 && boundary->rank != 0) + { + gfc_error ("BOUNDARY argument at %L of EOSHIFT must have rank %d or be " + "a scalar", &boundary->where, array->rank - 1); + return FAILURE; + } + + if (shift->rank == boundary->rank) + { + int i; + for (i = 0; i < shift->rank; i++) + if (! identical_dimen_shape (shift, i, boundary, i)) + { + gfc_error ("Different shape in dimension %d for SHIFT and " + "BOUNDARY arguments of EOSHIFT at %L", shift->rank, + &boundary->where); + return FAILURE; + } + } + } + + if (dim_check (dim, 4, true) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* A single complex argument. */ + +gfc_try +gfc_check_fn_c (gfc_expr *a) +{ + if (type_check (a, 0, BT_COMPLEX) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* A single real argument. */ + +gfc_try +gfc_check_fn_r (gfc_expr *a) +{ + if (type_check (a, 0, BT_REAL) == FAILURE) + return FAILURE; + + return SUCCESS; +} + +/* A single double argument. */ + +gfc_try +gfc_check_fn_d (gfc_expr *a) +{ + if (double_check (a, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + +/* A single real or complex argument. */ + +gfc_try +gfc_check_fn_rc (gfc_expr *a) +{ + if (real_or_complex_check (a, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_fnum (gfc_expr *unit) +{ + if (type_check (unit, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (unit, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_huge (gfc_expr *x) +{ + if (int_or_real_check (x, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_hypot (gfc_expr *x, gfc_expr *y) +{ + if (type_check (x, 0, BT_REAL) == FAILURE) + return FAILURE; + if (same_type_check (x, 0, y, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* Check that the single argument is an integer. */ + +gfc_try +gfc_check_i (gfc_expr *i) +{ + if (type_check (i, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_iand (gfc_expr *i, gfc_expr *j) +{ + if (type_check (i, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (j, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (i->ts.kind != j->ts.kind) + { + if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L", + &i->where) == FAILURE) + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_ibclr (gfc_expr *i, gfc_expr *pos) +{ + if (type_check (i, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (pos, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_ibits (gfc_expr *i, gfc_expr *pos, gfc_expr *len) +{ + if (type_check (i, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (pos, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (len, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_ibset (gfc_expr *i, gfc_expr *pos) +{ + if (type_check (i, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (pos, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind) +{ + int i; + + if (type_check (c, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (kind_check (kind, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic " + "with KIND argument at %L", + gfc_current_intrinsic, &kind->where) == FAILURE) + return FAILURE; + + if (c->expr_type == EXPR_VARIABLE || c->expr_type == EXPR_SUBSTRING) + { + gfc_expr *start; + gfc_expr *end; + gfc_ref *ref; + + /* Substring references don't have the charlength set. */ + ref = c->ref; + while (ref && ref->type != REF_SUBSTRING) + ref = ref->next; + + gcc_assert (ref == NULL || ref->type == REF_SUBSTRING); + + if (!ref) + { + /* Check that the argument is length one. Non-constant lengths + can't be checked here, so assume they are ok. */ + if (c->ts.cl && c->ts.cl->length) + { + /* If we already have a length for this expression then use it. */ + if (c->ts.cl->length->expr_type != EXPR_CONSTANT) + return SUCCESS; + i = mpz_get_si (c->ts.cl->length->value.integer); + } + else + return SUCCESS; + } + else + { + start = ref->u.ss.start; + end = ref->u.ss.end; + + gcc_assert (start); + if (end == NULL || end->expr_type != EXPR_CONSTANT + || start->expr_type != EXPR_CONSTANT) + return SUCCESS; + + i = mpz_get_si (end->value.integer) + 1 + - mpz_get_si (start->value.integer); + } + } + else + return SUCCESS; + + if (i != 1) + { + gfc_error ("Argument of %s at %L must be of length one", + gfc_current_intrinsic, &c->where); + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_idnint (gfc_expr *a) +{ + if (double_check (a, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_ieor (gfc_expr *i, gfc_expr *j) +{ + if (type_check (i, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (j, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (i->ts.kind != j->ts.kind) + { + if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L", + &i->where) == FAILURE) + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_index (gfc_expr *string, gfc_expr *substring, gfc_expr *back, + gfc_expr *kind) +{ + if (type_check (string, 0, BT_CHARACTER) == FAILURE + || type_check (substring, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (back != NULL && type_check (back, 2, BT_LOGICAL) == FAILURE) + return FAILURE; + + if (kind_check (kind, 3, BT_INTEGER) == FAILURE) + return FAILURE; + if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic " + "with KIND argument at %L", + gfc_current_intrinsic, &kind->where) == FAILURE) + return FAILURE; + + if (string->ts.kind != substring->ts.kind) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be the same " + "kind as '%s'", gfc_current_intrinsic_arg[1], + gfc_current_intrinsic, &substring->where, + gfc_current_intrinsic_arg[0]); + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_int (gfc_expr *x, gfc_expr *kind) +{ + if (numeric_check (x, 0) == FAILURE) + return FAILURE; + + if (kind_check (kind, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_intconv (gfc_expr *x) +{ + if (numeric_check (x, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_ior (gfc_expr *i, gfc_expr *j) +{ + if (type_check (i, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (j, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (i->ts.kind != j->ts.kind) + { + if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type kinds at %L", + &i->where) == FAILURE) + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_ishft (gfc_expr *i, gfc_expr *shift) +{ + if (type_check (i, 0, BT_INTEGER) == FAILURE + || type_check (shift, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_ishftc (gfc_expr *i, gfc_expr *shift, gfc_expr *size) +{ + if (type_check (i, 0, BT_INTEGER) == FAILURE + || type_check (shift, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (size != NULL && type_check (size, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_kill (gfc_expr *pid, gfc_expr *sig) +{ + if (type_check (pid, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (sig, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status) +{ + if (type_check (pid, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (pid, 0) == FAILURE) + return FAILURE; + + if (type_check (sig, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (sig, 1) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_kind (gfc_expr *x) +{ + if (x->ts.type == BT_DERIVED) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be a " + "non-derived type", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic, &x->where); + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_lbound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind) +{ + if (array_check (array, 0) == FAILURE) + return FAILURE; + + if (dim != NULL) + { + if (dim_check (dim, 1, false) == FAILURE) + return FAILURE; + + if (dim_rank_check (dim, array, 1) == FAILURE) + return FAILURE; + } + + if (kind_check (kind, 2, BT_INTEGER) == FAILURE) + return FAILURE; + if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic " + "with KIND argument at %L", + gfc_current_intrinsic, &kind->where) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_len_lentrim (gfc_expr *s, gfc_expr *kind) +{ + if (type_check (s, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (kind_check (kind, 1, BT_INTEGER) == FAILURE) + return FAILURE; + if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic " + "with KIND argument at %L", + gfc_current_intrinsic, &kind->where) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_lge_lgt_lle_llt (gfc_expr *a, gfc_expr *b) +{ + if (type_check (a, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (a, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (type_check (b, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (b, 1, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_link (gfc_expr *path1, gfc_expr *path2) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_link_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (path2, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_loc (gfc_expr *expr) +{ + return variable_check (expr, 0); +} + + +gfc_try +gfc_check_symlnk (gfc_expr *path1, gfc_expr *path2) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_symlnk_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_logical (gfc_expr *a, gfc_expr *kind) +{ + if (type_check (a, 0, BT_LOGICAL) == FAILURE) + return FAILURE; + if (kind_check (kind, 1, BT_LOGICAL) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* Min/max family. */ + +static gfc_try +min_max_args (gfc_actual_arglist *arg) +{ + if (arg == NULL || arg->next == NULL) + { + gfc_error ("Intrinsic '%s' at %L must have at least two arguments", + gfc_current_intrinsic, gfc_current_intrinsic_where); + return FAILURE; + } + + return SUCCESS; +} + + +static gfc_try +check_rest (bt type, int kind, gfc_actual_arglist *arglist) +{ + gfc_actual_arglist *arg, *tmp; + + gfc_expr *x; + int m, n; + + if (min_max_args (arglist) == FAILURE) + return FAILURE; + + for (arg = arglist, n=1; arg; arg = arg->next, n++) + { + x = arg->expr; + if (x->ts.type != type || x->ts.kind != kind) + { + if (x->ts.type == type) + { + if (gfc_notify_std (GFC_STD_GNU, "Extension: Different type " + "kinds at %L", &x->where) == FAILURE) + return FAILURE; + } + else + { + gfc_error ("'a%d' argument of '%s' intrinsic at %L must be " + "%s(%d)", n, gfc_current_intrinsic, &x->where, + gfc_basic_typename (type), kind); + return FAILURE; + } + } + + for (tmp = arglist, m=1; tmp != arg; tmp = tmp->next, m++) + { + char buffer[80]; + snprintf (buffer, 80, "arguments 'a%d' and 'a%d' for intrinsic '%s'", + m, n, gfc_current_intrinsic); + if (gfc_check_conformance (buffer, tmp->expr, x) == FAILURE) + return FAILURE; + } + } + + return SUCCESS; +} + + +gfc_try +gfc_check_min_max (gfc_actual_arglist *arg) +{ + gfc_expr *x; + + if (min_max_args (arg) == FAILURE) + return FAILURE; + + x = arg->expr; + + if (x->ts.type == BT_CHARACTER) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic " + "with CHARACTER argument at %L", + gfc_current_intrinsic, &x->where) == FAILURE) + return FAILURE; + } + else if (x->ts.type != BT_INTEGER && x->ts.type != BT_REAL) + { + gfc_error ("'a1' argument of '%s' intrinsic at %L must be INTEGER, " + "REAL or CHARACTER", gfc_current_intrinsic, &x->where); + return FAILURE; + } + + return check_rest (x->ts.type, x->ts.kind, arg); +} + + +gfc_try +gfc_check_min_max_integer (gfc_actual_arglist *arg) +{ + return check_rest (BT_INTEGER, gfc_default_integer_kind, arg); +} + + +gfc_try +gfc_check_min_max_real (gfc_actual_arglist *arg) +{ + return check_rest (BT_REAL, gfc_default_real_kind, arg); +} + + +gfc_try +gfc_check_min_max_double (gfc_actual_arglist *arg) +{ + return check_rest (BT_REAL, gfc_default_double_kind, arg); +} + + +/* End of min/max family. */ + +gfc_try +gfc_check_malloc (gfc_expr *size) +{ + if (type_check (size, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (size, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b) +{ + if ((matrix_a->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_a->ts)) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric " + "or LOGICAL", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic, &matrix_a->where); + return FAILURE; + } + + if ((matrix_b->ts.type != BT_LOGICAL) && !gfc_numeric_ts (&matrix_b->ts)) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be numeric " + "or LOGICAL", gfc_current_intrinsic_arg[1], + gfc_current_intrinsic, &matrix_b->where); + return FAILURE; + } + + if ((matrix_a->ts.type == BT_LOGICAL && gfc_numeric_ts (&matrix_b->ts)) + || (gfc_numeric_ts (&matrix_a->ts) && matrix_b->ts.type == BT_LOGICAL)) + { + gfc_error ("Argument types of '%s' intrinsic at %L must match (%s/%s)", + gfc_current_intrinsic, &matrix_a->where, + gfc_typename(&matrix_a->ts), gfc_typename(&matrix_b->ts)); + return FAILURE; + } + + switch (matrix_a->rank) + { + case 1: + if (rank_check (matrix_b, 1, 2) == FAILURE) + return FAILURE; + /* Check for case matrix_a has shape(m), matrix_b has shape (m, k). */ + if (!identical_dimen_shape (matrix_a, 0, matrix_b, 0)) + { + gfc_error ("Different shape on dimension 1 for arguments '%s' " + "and '%s' at %L for intrinsic matmul", + gfc_current_intrinsic_arg[0], + gfc_current_intrinsic_arg[1], &matrix_a->where); + return FAILURE; + } + break; + + case 2: + if (matrix_b->rank != 2) + { + if (rank_check (matrix_b, 1, 1) == FAILURE) + return FAILURE; + } + /* matrix_b has rank 1 or 2 here. Common check for the cases + - matrix_a has shape (n,m) and matrix_b has shape (m, k) + - matrix_a has shape (n,m) and matrix_b has shape (m). */ + if (!identical_dimen_shape (matrix_a, 1, matrix_b, 0)) + { + gfc_error ("Different shape on dimension 2 for argument '%s' and " + "dimension 1 for argument '%s' at %L for intrinsic " + "matmul", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic_arg[1], &matrix_a->where); + return FAILURE; + } + break; + + default: + gfc_error ("'%s' argument of '%s' intrinsic at %L must be of rank " + "1 or 2", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic, &matrix_a->where); + return FAILURE; + } + + return SUCCESS; +} + + +/* Whoever came up with this interface was probably on something. + The possibilities for the occupation of the second and third + parameters are: + + Arg #2 Arg #3 + NULL NULL + DIM NULL + MASK NULL + NULL MASK minloc(array, mask=m) + DIM MASK + + I.e. in the case of minloc(array,mask), mask will be in the second + position of the argument list and we'll have to fix that up. */ + +gfc_try +gfc_check_minloc_maxloc (gfc_actual_arglist *ap) +{ + gfc_expr *a, *m, *d; + + a = ap->expr; + if (int_or_real_check (a, 0) == FAILURE || array_check (a, 0) == FAILURE) + return FAILURE; + + d = ap->next->expr; + m = ap->next->next->expr; + + if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL + && ap->next->name == NULL) + { + m = d; + d = NULL; + ap->next->expr = NULL; + ap->next->next->expr = m; + } + + if (d && dim_check (d, 1, false) == FAILURE) + return FAILURE; + + if (d && dim_rank_check (d, a, 0) == FAILURE) + return FAILURE; + + if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE) + return FAILURE; + + if (m != NULL) + { + char buffer[80]; + snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic %s", + gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2], + gfc_current_intrinsic); + if (gfc_check_conformance (buffer, a, m) == FAILURE) + return FAILURE; + } + + return SUCCESS; +} + + +/* Similar to minloc/maxloc, the argument list might need to be + reordered for the MINVAL, MAXVAL, PRODUCT, and SUM intrinsics. The + difference is that MINLOC/MAXLOC take an additional KIND argument. + The possibilities are: + + Arg #2 Arg #3 + NULL NULL + DIM NULL + MASK NULL + NULL MASK minval(array, mask=m) + DIM MASK + + I.e. in the case of minval(array,mask), mask will be in the second + position of the argument list and we'll have to fix that up. */ + +static gfc_try +check_reduction (gfc_actual_arglist *ap) +{ + gfc_expr *a, *m, *d; + + a = ap->expr; + d = ap->next->expr; + m = ap->next->next->expr; + + if (m == NULL && d != NULL && d->ts.type == BT_LOGICAL + && ap->next->name == NULL) + { + m = d; + d = NULL; + ap->next->expr = NULL; + ap->next->next->expr = m; + } + + if (d && dim_check (d, 1, false) == FAILURE) + return FAILURE; + + if (d && dim_rank_check (d, a, 0) == FAILURE) + return FAILURE; + + if (m != NULL && type_check (m, 2, BT_LOGICAL) == FAILURE) + return FAILURE; + + if (m != NULL) + { + char buffer[80]; + snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic %s", + gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[2], + gfc_current_intrinsic); + if (gfc_check_conformance (buffer, a, m) == FAILURE) + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_minval_maxval (gfc_actual_arglist *ap) +{ + if (int_or_real_check (ap->expr, 0) == FAILURE + || array_check (ap->expr, 0) == FAILURE) + return FAILURE; + + return check_reduction (ap); +} + + +gfc_try +gfc_check_product_sum (gfc_actual_arglist *ap) +{ + if (numeric_check (ap->expr, 0) == FAILURE + || array_check (ap->expr, 0) == FAILURE) + return FAILURE; + + return check_reduction (ap); +} + + +gfc_try +gfc_check_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask) +{ + if (same_type_check (tsource, 0, fsource, 1) == FAILURE) + return FAILURE; + + if (type_check (mask, 2, BT_LOGICAL) == FAILURE) + return FAILURE; + + if (tsource->ts.type == BT_CHARACTER) + return gfc_check_same_strlen (tsource, fsource, "MERGE intrinsic"); + + return SUCCESS; +} + + +gfc_try +gfc_check_move_alloc (gfc_expr *from, gfc_expr *to) +{ + symbol_attribute attr; + + if (variable_check (from, 0) == FAILURE) + return FAILURE; + + if (array_check (from, 0) == FAILURE) + return FAILURE; + + attr = gfc_variable_attr (from, NULL); + if (!attr.allocatable) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE", + gfc_current_intrinsic_arg[0], gfc_current_intrinsic, + &from->where); + return FAILURE; + } + + if (variable_check (to, 0) == FAILURE) + return FAILURE; + + if (array_check (to, 0) == FAILURE) + return FAILURE; + + attr = gfc_variable_attr (to, NULL); + if (!attr.allocatable) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE", + gfc_current_intrinsic_arg[0], gfc_current_intrinsic, + &to->where); + return FAILURE; + } + + if (same_type_check (from, 0, to, 1) == FAILURE) + return FAILURE; + + if (to->rank != from->rank) + { + gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must " + "have the same rank %d/%d", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic_arg[1], gfc_current_intrinsic, + &to->where, from->rank, to->rank); + return FAILURE; + } + + if (to->ts.kind != from->ts.kind) + { + gfc_error ("the '%s' and '%s' arguments of '%s' intrinsic at %L must " + "be of the same kind %d/%d", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic_arg[1], gfc_current_intrinsic, + &to->where, from->ts.kind, to->ts.kind); + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_nearest (gfc_expr *x, gfc_expr *s) +{ + if (type_check (x, 0, BT_REAL) == FAILURE) + return FAILURE; + + if (type_check (s, 1, BT_REAL) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_new_line (gfc_expr *a) +{ + if (type_check (a, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_null (gfc_expr *mold) +{ + symbol_attribute attr; + + if (mold == NULL) + return SUCCESS; + + if (variable_check (mold, 0) == FAILURE) + return FAILURE; + + attr = gfc_variable_attr (mold, NULL); + + if (!attr.pointer && !attr.proc_pointer) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be a POINTER", + gfc_current_intrinsic_arg[0], + gfc_current_intrinsic, &mold->where); + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_pack (gfc_expr *array, gfc_expr *mask, gfc_expr *vector) +{ + char buffer[80]; + + if (array_check (array, 0) == FAILURE) + return FAILURE; + + if (type_check (mask, 1, BT_LOGICAL) == FAILURE) + return FAILURE; + + snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic '%s'", + gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[1], + gfc_current_intrinsic); + if (gfc_check_conformance (buffer, array, mask) == FAILURE) + return FAILURE; + + if (vector != NULL) + { + if (same_type_check (array, 0, vector, 2) == FAILURE) + return FAILURE; + + if (rank_check (vector, 2, 1) == FAILURE) + return FAILURE; + + /* TODO: More constraints here. */ + } + + return SUCCESS; +} + + +gfc_try +gfc_check_precision (gfc_expr *x) +{ + if (x->ts.type != BT_REAL && x->ts.type != BT_COMPLEX) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be of type " + "REAL or COMPLEX", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic, &x->where); + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_present (gfc_expr *a) +{ + gfc_symbol *sym; + + if (variable_check (a, 0) == FAILURE) + return FAILURE; + + sym = a->symtree->n.sym; + if (!sym->attr.dummy) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a " + "dummy variable", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic, &a->where); + return FAILURE; + } + + if (!sym->attr.optional) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be of " + "an OPTIONAL dummy variable", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic, &a->where); + return FAILURE; + } + + /* 13.14.82 PRESENT(A) + ...... + Argument. A shall be the name of an optional dummy argument that is + accessible in the subprogram in which the PRESENT function reference + appears... */ + + if (a->ref != NULL + && !(a->ref->next == NULL && a->ref->type == REF_ARRAY + && a->ref->u.ar.type == AR_FULL)) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must not be a " + "subobject of '%s'", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic, &a->where, sym->name); + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_radix (gfc_expr *x) +{ + if (int_or_real_check (x, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_range (gfc_expr *x) +{ + if (numeric_check (x, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* real, float, sngl. */ +gfc_try +gfc_check_real (gfc_expr *a, gfc_expr *kind) +{ + if (numeric_check (a, 0) == FAILURE) + return FAILURE; + + if (kind_check (kind, 1, BT_REAL) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_rename (gfc_expr *path1, gfc_expr *path2) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_rename_sub (gfc_expr *path1, gfc_expr *path2, gfc_expr *status) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (path1, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (path2, 1, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_repeat (gfc_expr *x, gfc_expr *y) +{ + if (type_check (x, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (scalar_check (x, 0) == FAILURE) + return FAILURE; + + if (type_check (y, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (y, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_reshape (gfc_expr *source, gfc_expr *shape, + gfc_expr *pad, gfc_expr *order) +{ + mpz_t size; + mpz_t nelems; + int m; + + if (array_check (source, 0) == FAILURE) + return FAILURE; + + if (rank_check (shape, 1, 1) == FAILURE) + return FAILURE; + + if (type_check (shape, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (gfc_array_size (shape, &size) != SUCCESS) + { + gfc_error ("'shape' argument of 'reshape' intrinsic at %L must be an " + "array of constant size", &shape->where); + return FAILURE; + } + + m = mpz_cmp_ui (size, GFC_MAX_DIMENSIONS); + mpz_clear (size); + + if (m > 0) + { + gfc_error ("'shape' argument of 'reshape' intrinsic at %L has more " + "than %d elements", &shape->where, GFC_MAX_DIMENSIONS); + return FAILURE; + } + + if (pad != NULL) + { + if (same_type_check (source, 0, pad, 2) == FAILURE) + return FAILURE; + if (array_check (pad, 2) == FAILURE) + return FAILURE; + } + + if (order != NULL && array_check (order, 3) == FAILURE) + return FAILURE; + + if (pad == NULL && shape->expr_type == EXPR_ARRAY + && gfc_is_constant_expr (shape) + && !(source->expr_type == EXPR_VARIABLE && source->symtree->n.sym->as + && source->symtree->n.sym->as->type == AS_ASSUMED_SIZE)) + { + /* Check the match in size between source and destination. */ + if (gfc_array_size (source, &nelems) == SUCCESS) + { + gfc_constructor *c; + bool test; + + c = shape->value.constructor; + mpz_init_set_ui (size, 1); + for (; c; c = c->next) + mpz_mul (size, size, c->expr->value.integer); + + test = mpz_cmp (nelems, size) < 0 && mpz_cmp_ui (size, 0) > 0; + mpz_clear (nelems); + mpz_clear (size); + + if (test) + { + gfc_error ("Without padding, there are not enough elements " + "in the intrinsic RESHAPE source at %L to match " + "the shape", &source->where); + return FAILURE; + } + } + } + + return SUCCESS; +} + + +gfc_try +gfc_check_scale (gfc_expr *x, gfc_expr *i) +{ + if (type_check (x, 0, BT_REAL) == FAILURE) + return FAILURE; + + if (type_check (i, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_scan (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind) +{ + if (type_check (x, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (type_check (y, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE) + return FAILURE; + + if (kind_check (kind, 3, BT_INTEGER) == FAILURE) + return FAILURE; + if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic " + "with KIND argument at %L", + gfc_current_intrinsic, &kind->where) == FAILURE) + return FAILURE; + + if (same_type_check (x, 0, y, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_secnds (gfc_expr *r) +{ + if (type_check (r, 0, BT_REAL) == FAILURE) + return FAILURE; + + if (kind_value_check (r, 0, 4) == FAILURE) + return FAILURE; + + if (scalar_check (r, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_selected_char_kind (gfc_expr *name) +{ + if (type_check (name, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (scalar_check (name, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_selected_int_kind (gfc_expr *r) +{ + if (type_check (r, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (r, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r) +{ + if (p == NULL && r == NULL) + { + gfc_error ("Missing arguments to %s intrinsic at %L", + gfc_current_intrinsic, gfc_current_intrinsic_where); + + return FAILURE; + } + + if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_set_exponent (gfc_expr *x, gfc_expr *i) +{ + if (type_check (x, 0, BT_REAL) == FAILURE) + return FAILURE; + + if (type_check (i, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_shape (gfc_expr *source) +{ + gfc_array_ref *ar; + + if (source->rank == 0 || source->expr_type != EXPR_VARIABLE) + return SUCCESS; + + ar = gfc_find_array_ref (source); + + if (ar->as && ar->as->type == AS_ASSUMED_SIZE && ar->type == AR_FULL) + { + gfc_error ("'source' argument of 'shape' intrinsic at %L must not be " + "an assumed size array", &source->where); + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_sign (gfc_expr *a, gfc_expr *b) +{ + if (int_or_real_check (a, 0) == FAILURE) + return FAILURE; + + if (same_type_check (a, 0, b, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind) +{ + if (array_check (array, 0) == FAILURE) + return FAILURE; + + if (dim != NULL) + { + if (dim_check (dim, 1, true) == FAILURE) + return FAILURE; + + if (dim_rank_check (dim, array, 0) == FAILURE) + return FAILURE; + } + + if (kind_check (kind, 2, BT_INTEGER) == FAILURE) + return FAILURE; + if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic " + "with KIND argument at %L", + gfc_current_intrinsic, &kind->where) == FAILURE) + return FAILURE; + + + return SUCCESS; +} + + +gfc_try +gfc_check_sizeof (gfc_expr *arg ATTRIBUTE_UNUSED) +{ + return SUCCESS; +} + + +gfc_try +gfc_check_sleep_sub (gfc_expr *seconds) +{ + if (type_check (seconds, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (seconds, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies) +{ + if (source->rank >= GFC_MAX_DIMENSIONS) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be less " + "than rank %d", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic, &source->where, GFC_MAX_DIMENSIONS); + + return FAILURE; + } + + if (dim == NULL) + return FAILURE; + + if (dim_check (dim, 1, false) == FAILURE) + return FAILURE; + + if (type_check (ncopies, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (ncopies, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* Functions for checking FGETC, FPUTC, FGET and FPUT (subroutines and + functions). */ + +gfc_try +gfc_check_fgetputc_sub (gfc_expr *unit, gfc_expr *c, gfc_expr *status) +{ + if (type_check (unit, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (unit, 0) == FAILURE) + return FAILURE; + + if (type_check (c, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (c, 1, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE + || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE + || scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_fgetputc (gfc_expr *unit, gfc_expr *c) +{ + return gfc_check_fgetputc_sub (unit, c, NULL); +} + + +gfc_try +gfc_check_fgetput_sub (gfc_expr *c, gfc_expr *status) +{ + if (type_check (c, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (c, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 1, BT_INTEGER) == FAILURE + || kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE + || scalar_check (status, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_fgetput (gfc_expr *c) +{ + return gfc_check_fgetput_sub (c, NULL); +} + + +gfc_try +gfc_check_fseek_sub (gfc_expr *unit, gfc_expr *offset, gfc_expr *whence, gfc_expr *status) +{ + if (type_check (unit, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (unit, 0) == FAILURE) + return FAILURE; + + if (type_check (offset, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (offset, 1) == FAILURE) + return FAILURE; + + if (type_check (whence, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (whence, 2) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 3, BT_INTEGER) == FAILURE) + return FAILURE; + + if (kind_value_check (status, 3, 4) == FAILURE) + return FAILURE; + + if (scalar_check (status, 3) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + + +gfc_try +gfc_check_fstat (gfc_expr *unit, gfc_expr *array) +{ + if (type_check (unit, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (unit, 0) == FAILURE) + return FAILURE; + + if (type_check (array, 1, BT_INTEGER) == FAILURE + || kind_value_check (unit, 0, gfc_default_integer_kind) == FAILURE) + return FAILURE; + + if (array_check (array, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *array, gfc_expr *status) +{ + if (type_check (unit, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (unit, 0) == FAILURE) + return FAILURE; + + if (type_check (array, 1, BT_INTEGER) == FAILURE + || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE) + return FAILURE; + + if (array_check (array, 1) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE + || kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_ftell (gfc_expr *unit) +{ + if (type_check (unit, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (unit, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_ftell_sub (gfc_expr *unit, gfc_expr *offset) +{ + if (type_check (unit, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (unit, 0) == FAILURE) + return FAILURE; + + if (type_check (offset, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (offset, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_stat (gfc_expr *name, gfc_expr *array) +{ + if (type_check (name, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (type_check (array, 1, BT_INTEGER) == FAILURE + || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE) + return FAILURE; + + if (array_check (array, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_stat_sub (gfc_expr *name, gfc_expr *array, gfc_expr *status) +{ + if (type_check (name, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (type_check (array, 1, BT_INTEGER) == FAILURE + || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE) + return FAILURE; + + if (array_check (array, 1) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE + || kind_value_check (array, 1, gfc_default_integer_kind) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_transfer (gfc_expr *source ATTRIBUTE_UNUSED, + gfc_expr *mold ATTRIBUTE_UNUSED, gfc_expr *size) +{ + if (mold->ts.type == BT_HOLLERITH) + { + gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s", + &mold->where, gfc_basic_typename (BT_HOLLERITH)); + return FAILURE; + } + + if (size != NULL) + { + if (type_check (size, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (size, 2) == FAILURE) + return FAILURE; + + if (nonoptional_check (size, 2) == FAILURE) + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_transpose (gfc_expr *matrix) +{ + if (rank_check (matrix, 0, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_ubound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind) +{ + if (array_check (array, 0) == FAILURE) + return FAILURE; + + if (dim != NULL) + { + if (dim_check (dim, 1, false) == FAILURE) + return FAILURE; + + if (dim_rank_check (dim, array, 0) == FAILURE) + return FAILURE; + } + + if (kind_check (kind, 2, BT_INTEGER) == FAILURE) + return FAILURE; + if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic " + "with KIND argument at %L", + gfc_current_intrinsic, &kind->where) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field) +{ + if (rank_check (vector, 0, 1) == FAILURE) + return FAILURE; + + if (array_check (mask, 1) == FAILURE) + return FAILURE; + + if (type_check (mask, 1, BT_LOGICAL) == FAILURE) + return FAILURE; + + if (same_type_check (vector, 0, field, 2) == FAILURE) + return FAILURE; + + if (mask->rank != field->rank && field->rank != 0) + { + gfc_error ("FIELD argument at %L of UNPACK must have the same rank as " + "MASK or be a scalar", &field->where); + return FAILURE; + } + + if (mask->rank == field->rank) + { + int i; + for (i = 0; i < field->rank; i++) + if (! identical_dimen_shape (mask, i, field, i)) + { + gfc_error ("Different shape in dimension %d for MASK and FIELD " + "arguments of UNPACK at %L", mask->rank, &field->where); + return FAILURE; + } + } + + return SUCCESS; +} + + +gfc_try +gfc_check_verify (gfc_expr *x, gfc_expr *y, gfc_expr *z, gfc_expr *kind) +{ + if (type_check (x, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (same_type_check (x, 0, y, 1) == FAILURE) + return FAILURE; + + if (z != NULL && type_check (z, 2, BT_LOGICAL) == FAILURE) + return FAILURE; + + if (kind_check (kind, 3, BT_INTEGER) == FAILURE) + return FAILURE; + if (kind && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' intrinsic " + "with KIND argument at %L", + gfc_current_intrinsic, &kind->where) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_trim (gfc_expr *x) +{ + if (type_check (x, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (scalar_check (x, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_ttynam (gfc_expr *unit) +{ + if (scalar_check (unit, 0) == FAILURE) + return FAILURE; + + if (type_check (unit, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* Common check function for the half a dozen intrinsics that have a + single real argument. */ + +gfc_try +gfc_check_x (gfc_expr *x) +{ + if (type_check (x, 0, BT_REAL) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/************* Check functions for intrinsic subroutines *************/ + +gfc_try +gfc_check_cpu_time (gfc_expr *time) +{ + if (scalar_check (time, 0) == FAILURE) + return FAILURE; + + if (type_check (time, 0, BT_REAL) == FAILURE) + return FAILURE; + + if (variable_check (time, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_date_and_time (gfc_expr *date, gfc_expr *time, + gfc_expr *zone, gfc_expr *values) +{ + if (date != NULL) + { + if (type_check (date, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (date, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + if (scalar_check (date, 0) == FAILURE) + return FAILURE; + if (variable_check (date, 0) == FAILURE) + return FAILURE; + } + + if (time != NULL) + { + if (type_check (time, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (time, 1, gfc_default_character_kind) == FAILURE) + return FAILURE; + if (scalar_check (time, 1) == FAILURE) + return FAILURE; + if (variable_check (time, 1) == FAILURE) + return FAILURE; + } + + if (zone != NULL) + { + if (type_check (zone, 2, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (zone, 2, gfc_default_character_kind) == FAILURE) + return FAILURE; + if (scalar_check (zone, 2) == FAILURE) + return FAILURE; + if (variable_check (zone, 2) == FAILURE) + return FAILURE; + } + + if (values != NULL) + { + if (type_check (values, 3, BT_INTEGER) == FAILURE) + return FAILURE; + if (array_check (values, 3) == FAILURE) + return FAILURE; + if (rank_check (values, 3, 1) == FAILURE) + return FAILURE; + if (variable_check (values, 3) == FAILURE) + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_mvbits (gfc_expr *from, gfc_expr *frompos, gfc_expr *len, + gfc_expr *to, gfc_expr *topos) +{ + if (type_check (from, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (frompos, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (len, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (same_type_check (from, 0, to, 3) == FAILURE) + return FAILURE; + + if (variable_check (to, 3) == FAILURE) + return FAILURE; + + if (type_check (topos, 4, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_random_number (gfc_expr *harvest) +{ + if (type_check (harvest, 0, BT_REAL) == FAILURE) + return FAILURE; + + if (variable_check (harvest, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_random_seed (gfc_expr *size, gfc_expr *put, gfc_expr *get) +{ + unsigned int nargs = 0, kiss_size; + locus *where = NULL; + mpz_t put_size, get_size; + bool have_gfc_real_16; /* Try and mimic HAVE_GFC_REAL_16 in libgfortran. */ + + have_gfc_real_16 = gfc_validate_kind (BT_REAL, 16, true) != -1; + + /* Keep the number of bytes in sync with kiss_size in + libgfortran/intrinsics/random.c. */ + kiss_size = (have_gfc_real_16 ? 48 : 32) / gfc_default_integer_kind; + + if (size != NULL) + { + if (size->expr_type != EXPR_VARIABLE + || !size->symtree->n.sym->attr.optional) + nargs++; + + if (scalar_check (size, 0) == FAILURE) + return FAILURE; + + if (type_check (size, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (variable_check (size, 0) == FAILURE) + return FAILURE; + + if (kind_value_check (size, 0, gfc_default_integer_kind) == FAILURE) + return FAILURE; + } + + if (put != NULL) + { + if (put->expr_type != EXPR_VARIABLE + || !put->symtree->n.sym->attr.optional) + { + nargs++; + where = &put->where; + } + + if (array_check (put, 1) == FAILURE) + return FAILURE; + + if (rank_check (put, 1, 1) == FAILURE) + return FAILURE; + + if (type_check (put, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (kind_value_check (put, 1, gfc_default_integer_kind) == FAILURE) + return FAILURE; + + if (gfc_array_size (put, &put_size) == SUCCESS + && mpz_get_ui (put_size) < kiss_size) + gfc_error ("Size of '%s' argument of '%s' intrinsic at %L " + "too small (%i/%i)", + gfc_current_intrinsic_arg[1], gfc_current_intrinsic, where, + (int) mpz_get_ui (put_size), kiss_size); + } + + if (get != NULL) + { + if (get->expr_type != EXPR_VARIABLE + || !get->symtree->n.sym->attr.optional) + { + nargs++; + where = &get->where; + } + + if (array_check (get, 2) == FAILURE) + return FAILURE; + + if (rank_check (get, 2, 1) == FAILURE) + return FAILURE; + + if (type_check (get, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (variable_check (get, 2) == FAILURE) + return FAILURE; + + if (kind_value_check (get, 2, gfc_default_integer_kind) == FAILURE) + return FAILURE; + + if (gfc_array_size (get, &get_size) == SUCCESS + && mpz_get_ui (get_size) < kiss_size) + gfc_error ("Size of '%s' argument of '%s' intrinsic at %L " + "too small (%i/%i)", + gfc_current_intrinsic_arg[2], gfc_current_intrinsic, where, + (int) mpz_get_ui (get_size), kiss_size); + } + + /* RANDOM_SEED may not have more than one non-optional argument. */ + if (nargs > 1) + gfc_error ("Too many arguments to %s at %L", gfc_current_intrinsic, where); + + return SUCCESS; +} + + +gfc_try +gfc_check_second_sub (gfc_expr *time) +{ + if (scalar_check (time, 0) == FAILURE) + return FAILURE; + + if (type_check (time, 0, BT_REAL) == FAILURE) + return FAILURE; + + if (kind_value_check(time, 0, 4) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* The arguments of SYSTEM_CLOCK are scalar, integer variables. Note, + count, count_rate, and count_max are all optional arguments */ + +gfc_try +gfc_check_system_clock (gfc_expr *count, gfc_expr *count_rate, + gfc_expr *count_max) +{ + if (count != NULL) + { + if (scalar_check (count, 0) == FAILURE) + return FAILURE; + + if (type_check (count, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (variable_check (count, 0) == FAILURE) + return FAILURE; + } + + if (count_rate != NULL) + { + if (scalar_check (count_rate, 1) == FAILURE) + return FAILURE; + + if (type_check (count_rate, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (variable_check (count_rate, 1) == FAILURE) + return FAILURE; + + if (count != NULL + && same_type_check (count, 0, count_rate, 1) == FAILURE) + return FAILURE; + + } + + if (count_max != NULL) + { + if (scalar_check (count_max, 2) == FAILURE) + return FAILURE; + + if (type_check (count_max, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (variable_check (count_max, 2) == FAILURE) + return FAILURE; + + if (count != NULL + && same_type_check (count, 0, count_max, 2) == FAILURE) + return FAILURE; + + if (count_rate != NULL + && same_type_check (count_rate, 1, count_max, 2) == FAILURE) + return FAILURE; + } + + return SUCCESS; +} + + +gfc_try +gfc_check_irand (gfc_expr *x) +{ + if (x == NULL) + return SUCCESS; + + if (scalar_check (x, 0) == FAILURE) + return FAILURE; + + if (type_check (x, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (kind_value_check(x, 0, 4) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_alarm_sub (gfc_expr *seconds, gfc_expr *handler, gfc_expr *status) +{ + if (scalar_check (seconds, 0) == FAILURE) + return FAILURE; + + if (type_check (seconds, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER " + "or PROCEDURE", gfc_current_intrinsic_arg[1], + gfc_current_intrinsic, &handler->where); + return FAILURE; + } + + if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + if (type_check (status, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (kind_value_check (status, 2, gfc_default_integer_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_rand (gfc_expr *x) +{ + if (x == NULL) + return SUCCESS; + + if (scalar_check (x, 0) == FAILURE) + return FAILURE; + + if (type_check (x, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (kind_value_check(x, 0, 4) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_srand (gfc_expr *x) +{ + if (scalar_check (x, 0) == FAILURE) + return FAILURE; + + if (type_check (x, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (kind_value_check(x, 0, 4) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_ctime_sub (gfc_expr *time, gfc_expr *result) +{ + if (scalar_check (time, 0) == FAILURE) + return FAILURE; + if (type_check (time, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (result, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (result, 1, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_dtime_etime (gfc_expr *x) +{ + if (array_check (x, 0) == FAILURE) + return FAILURE; + + if (rank_check (x, 0, 1) == FAILURE) + return FAILURE; + + if (variable_check (x, 0) == FAILURE) + return FAILURE; + + if (type_check (x, 0, BT_REAL) == FAILURE) + return FAILURE; + + if (kind_value_check(x, 0, 4) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_dtime_etime_sub (gfc_expr *values, gfc_expr *time) +{ + if (array_check (values, 0) == FAILURE) + return FAILURE; + + if (rank_check (values, 0, 1) == FAILURE) + return FAILURE; + + if (variable_check (values, 0) == FAILURE) + return FAILURE; + + if (type_check (values, 0, BT_REAL) == FAILURE) + return FAILURE; + + if (kind_value_check(values, 0, 4) == FAILURE) + return FAILURE; + + if (scalar_check (time, 1) == FAILURE) + return FAILURE; + + if (type_check (time, 1, BT_REAL) == FAILURE) + return FAILURE; + + if (kind_value_check(time, 1, 4) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_fdate_sub (gfc_expr *date) +{ + if (type_check (date, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (date, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_gerror (gfc_expr *msg) +{ + if (type_check (msg, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (msg, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_getcwd_sub (gfc_expr *cwd, gfc_expr *status) +{ + if (type_check (cwd, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (cwd, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (scalar_check (status, 1) == FAILURE) + return FAILURE; + + if (type_check (status, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_getarg (gfc_expr *pos, gfc_expr *value) +{ + if (type_check (pos, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (pos->ts.kind > gfc_default_integer_kind) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be of a kind " + "not wider than the default kind (%d)", + gfc_current_intrinsic_arg[0], gfc_current_intrinsic, + &pos->where, gfc_default_integer_kind); + return FAILURE; + } + + if (type_check (value, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (value, 1, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_getlog (gfc_expr *msg) +{ + if (type_check (msg, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (msg, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_exit (gfc_expr *status) +{ + if (status == NULL) + return SUCCESS; + + if (type_check (status, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_flush (gfc_expr *unit) +{ + if (unit == NULL) + return SUCCESS; + + if (type_check (unit, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (unit, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_free (gfc_expr *i) +{ + if (type_check (i, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (i, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_hostnm (gfc_expr *name) +{ + if (type_check (name, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_hostnm_sub (gfc_expr *name, gfc_expr *status) +{ + if (type_check (name, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (scalar_check (status, 1) == FAILURE) + return FAILURE; + + if (type_check (status, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_itime_idate (gfc_expr *values) +{ + if (array_check (values, 0) == FAILURE) + return FAILURE; + + if (rank_check (values, 0, 1) == FAILURE) + return FAILURE; + + if (variable_check (values, 0) == FAILURE) + return FAILURE; + + if (type_check (values, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (kind_value_check(values, 0, gfc_default_integer_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_ltime_gmtime (gfc_expr *time, gfc_expr *values) +{ + if (type_check (time, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (kind_value_check(time, 0, gfc_default_integer_kind) == FAILURE) + return FAILURE; + + if (scalar_check (time, 0) == FAILURE) + return FAILURE; + + if (array_check (values, 1) == FAILURE) + return FAILURE; + + if (rank_check (values, 1, 1) == FAILURE) + return FAILURE; + + if (variable_check (values, 1) == FAILURE) + return FAILURE; + + if (type_check (values, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (kind_value_check(values, 1, gfc_default_integer_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *name) +{ + if (scalar_check (unit, 0) == FAILURE) + return FAILURE; + + if (type_check (unit, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (name, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (name, 1, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_isatty (gfc_expr *unit) +{ + if (unit == NULL) + return FAILURE; + + if (type_check (unit, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (unit, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_isnan (gfc_expr *x) +{ + if (type_check (x, 0, BT_REAL) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_perror (gfc_expr *string) +{ + if (type_check (string, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (string, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_umask (gfc_expr *mask) +{ + if (type_check (mask, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (mask, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_umask_sub (gfc_expr *mask, gfc_expr *old) +{ + if (type_check (mask, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (mask, 0) == FAILURE) + return FAILURE; + + if (old == NULL) + return SUCCESS; + + if (scalar_check (old, 1) == FAILURE) + return FAILURE; + + if (type_check (old, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_unlink (gfc_expr *name) +{ + if (type_check (name, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_unlink_sub (gfc_expr *name, gfc_expr *status) +{ + if (type_check (name, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (name, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (scalar_check (status, 1) == FAILURE) + return FAILURE; + + if (type_check (status, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_signal (gfc_expr *number, gfc_expr *handler) +{ + if (scalar_check (number, 0) == FAILURE) + return FAILURE; + + if (type_check (number, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER " + "or PROCEDURE", gfc_current_intrinsic_arg[1], + gfc_current_intrinsic, &handler->where); + return FAILURE; + } + + if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_signal_sub (gfc_expr *number, gfc_expr *handler, gfc_expr *status) +{ + if (scalar_check (number, 0) == FAILURE) + return FAILURE; + + if (type_check (number, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (handler->ts.type != BT_INTEGER && handler->ts.type != BT_PROCEDURE) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER " + "or PROCEDURE", gfc_current_intrinsic_arg[1], + gfc_current_intrinsic, &handler->where); + return FAILURE; + } + + if (handler->ts.type == BT_INTEGER && scalar_check (handler, 1) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_check_system_sub (gfc_expr *cmd, gfc_expr *status) +{ + if (type_check (cmd, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + if (kind_value_check (cmd, 0, gfc_default_character_kind) == FAILURE) + return FAILURE; + + if (scalar_check (status, 1) == FAILURE) + return FAILURE; + + if (type_check (status, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (kind_value_check (status, 1, gfc_default_integer_kind) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* This is used for the GNU intrinsics AND, OR and XOR. */ +gfc_try +gfc_check_and (gfc_expr *i, gfc_expr *j) +{ + if (i->ts.type != BT_INTEGER && i->ts.type != BT_LOGICAL) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER " + "or LOGICAL", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic, &i->where); + return FAILURE; + } + + if (j->ts.type != BT_INTEGER && j->ts.type != BT_LOGICAL) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must be INTEGER " + "or LOGICAL", gfc_current_intrinsic_arg[1], + gfc_current_intrinsic, &j->where); + return FAILURE; + } + + if (i->ts.type != j->ts.type) + { + gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L must " + "have the same type", gfc_current_intrinsic_arg[0], + gfc_current_intrinsic_arg[1], gfc_current_intrinsic, + &j->where); + return FAILURE; + } + + if (scalar_check (i, 0) == FAILURE) + return FAILURE; + + if (scalar_check (j, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/config-lang.in b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/config-lang.in new file mode 100644 index 0000000000..aaa9b809c9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/config-lang.in @@ -0,0 +1,15 @@ +# Configure looks for the existence of this file to auto-config each language. +# We define several parameters used by configure: +# +# language - name of language as it would appear in $(LANGUAGES) +# compilers - value to add to $(COMPILERS) +# diff_excludes - files to ignore when building diffs between two versions. + +language="fortran" + +compilers="f951\$(exeext)" + +target_libs=target-libgfortran + +gtfiles="\$(srcdir)/fortran/f95-lang.c \$(srcdir)/fortran/trans-decl.c \$(srcdir)/fortran/trans-intrinsic.c \$(srcdir)/fortran/trans-io.c \$(srcdir)/fortran/trans-types.c \$(srcdir)/fortran/trans-types.h \$(srcdir)/fortran/trans.h \$(srcdir)/fortran/trans-const.h" + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/convert.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/convert.c new file mode 100644 index 0000000000..1e7d090cbf --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/convert.c @@ -0,0 +1,123 @@ +/* Language-level data type conversion for GNU C. + Copyright (C) 1987, 1988, 1991, 1998, 2002, 2007, 2008 + Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + + +/* This file contains the functions for converting C expressions + to different data types. The only entry point is `convert'. + Every language front end must have a `convert' function + but what kind of conversions it does will depend on the language. */ + +/* copied from the f77 frontend I think */ + +/* copied from c-convert.c without significant modification*/ +/* Change of width--truncation and extension of integers or reals-- + is represented with NOP_EXPR. Proper functioning of many things + assumes that no other conversions can be NOP_EXPRs. +*/ + +/* I've added support for WITH_RECORD_EXPR. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "flags.h" +#include "convert.h" +#include "toplev.h" +#include "gfortran.h" +#include "trans.h" + +/* + Conversion between integer and pointer is represented with CONVERT_EXPR. + Converting integer to real uses FLOAT_EXPR + and real to integer uses FIX_TRUNC_EXPR. + + Here is a list of all the functions that assume that widening and + narrowing is always done with a NOP_EXPR: + In convert.c, convert_to_integer. + In c-typeck.c, build_binary_op (boolean ops), and + c_common_truthvalue_conversion. + In expr.c: expand_expr, for operands of a MULT_EXPR. + In fold-const.c: fold. + In tree.c: get_narrower and get_unwidened. */ + +/* Subroutines of `convert'. */ + + +/* Create an expression whose value is that of EXPR, + converted to type TYPE. The TREE_TYPE of the value + is always TYPE. This function implements all reasonable + conversions; callers should filter out those that are + not permitted by the language being compiled. */ +/* We are assuming that given a SIMPLE val, the result will be a SIMPLE rhs. + If this is not the case, we will abort with an internal error. */ +tree +convert (tree type, tree expr) +{ + tree e = expr; + enum tree_code code = TREE_CODE (type); + + if (type == TREE_TYPE (expr) + || TREE_CODE (expr) == ERROR_MARK + || code == ERROR_MARK || TREE_CODE (TREE_TYPE (expr)) == ERROR_MARK) + return expr; + + if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (TREE_TYPE (expr))) + return fold_build1 (NOP_EXPR, type, expr); + if (TREE_CODE (TREE_TYPE (expr)) == ERROR_MARK) + return error_mark_node; + if (TREE_CODE (TREE_TYPE (expr)) == VOID_TYPE) + { + error ("void value not ignored as it ought to be"); + return error_mark_node; + } + if (code == VOID_TYPE) + return fold_build1 (CONVERT_EXPR, type, e); +#if 0 + /* This is incorrect. A truncation can't be stripped this way. + Extensions will be stripped by the use of get_unwidened. */ + if (TREE_CODE (expr) == NOP_EXPR) + return convert (type, TREE_OPERAND (expr, 0)); +#endif + if (code == INTEGER_TYPE || code == ENUMERAL_TYPE) + return fold (convert_to_integer (type, e)); + if (code == BOOLEAN_TYPE) + { + e = gfc_truthvalue_conversion (e); + + /* If we have a NOP_EXPR, we must fold it here to avoid + infinite recursion between fold () and convert (). */ + if (TREE_CODE (e) == NOP_EXPR) + return fold_build1 (NOP_EXPR, type, TREE_OPERAND (e, 0)); + else + return fold_build1 (NOP_EXPR, type, e); + } + if (code == POINTER_TYPE || code == REFERENCE_TYPE) + return fold (convert_to_pointer (type, e)); + if (code == REAL_TYPE) + return fold (convert_to_real (type, e)); + if (code == COMPLEX_TYPE) + return fold (convert_to_complex (type, e)); + if (code == VECTOR_TYPE) + return fold (convert_to_vector (type, e)); + + error ("conversion to non-scalar type requested"); + return error_mark_node; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/cpp.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/cpp.c new file mode 100644 index 0000000000..d45d0c15b7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/cpp.c @@ -0,0 +1,1043 @@ +/* Copyright (C) 2008 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tm.h" +#include "tree.h" +#include "version.h" +#include "flags.h" + + +#include "options.h" +#include "gfortran.h" +#include "tm_p.h" /* Target prototypes. */ +#include "target.h" +#include "toplev.h" +#include "diagnostic.h" + +#include "../../libcpp/internal.h" +#include "cpp.h" +#include "incpath.h" + +#ifndef TARGET_OS_CPP_BUILTINS +# define TARGET_OS_CPP_BUILTINS() +#endif + +#ifndef TARGET_OBJFMT_CPP_BUILTINS +# define TARGET_OBJFMT_CPP_BUILTINS() +#endif + + +/* Holds switches parsed by gfc_cpp_handle_option (), but whose + handling is deferred to gfc_cpp_init (). */ +typedef struct +{ + enum opt_code code; + const char *arg; +} +gfc_cpp_deferred_opt_t; + + +/* Defined and undefined macros being queued for output with -dU at + the next newline. */ +typedef struct gfc_cpp_macro_queue +{ + struct gfc_cpp_macro_queue *next; /* Next macro in the list. */ + char *macro; /* The name of the macro if not + defined, the full definition if + defined. */ +} gfc_cpp_macro_queue; +static gfc_cpp_macro_queue *cpp_define_queue, *cpp_undefine_queue; + +struct +{ + /* Argument of -cpp, implied by SPEC; + if NULL, preprocessing disabled. */ + const char *temporary_filename; + + const char *output_filename; /* -o */ + int preprocess_only; /* -E */ + int discard_comments; /* -C */ + int discard_comments_in_macro_exp; /* -CC */ + int print_include_names; /* -H */ + int no_line_commands; /* -P */ + char dump_macros; /* -d[DMNU] */ + int dump_includes; /* -dI */ + int working_directory; /* -fworking-directory */ + int no_predefined; /* -undef */ + int standard_include_paths; /* -nostdinc */ + int verbose; /* -v */ + + const char *multilib; /* -imultilib */ + const char *prefix; /* -iprefix */ + const char *sysroot; /* -isysroot */ + + /* Options whose handling needs to be deferred until the + appropriate cpp-objects are created: + -A predicate=answer + -D [=] + -U */ + gfc_cpp_deferred_opt_t *deferred_opt; + int deferred_opt_count; +} +gfc_cpp_option; + +/* Structures used with libcpp: */ +static cpp_options *cpp_option = NULL; +static cpp_reader *cpp_in = NULL; + +/* Defined in toplev.c. */ +extern const char *asm_file_name; + + + + +/* Encapsulates state used to convert a stream of cpp-tokens into + a text file. */ +static struct +{ + FILE *outf; /* Stream to write to. */ + const cpp_token *prev; /* Previous token. */ + const cpp_token *source; /* Source token for spacing. */ + int src_line; /* Line number currently being written. */ + unsigned char printed; /* Nonzero if something output at line. */ + bool first_time; /* cb_file_change hasn't been called yet. */ +} print; + +/* General output routines. */ +static void scan_translation_unit (cpp_reader *); +static void scan_translation_unit_trad (cpp_reader *); + +/* Callback routines for the parser. Most of these are active only + in specific modes. */ +static void cb_file_change (cpp_reader *, const struct line_map *); +static void cb_line_change (cpp_reader *, const cpp_token *, int); +static void cb_define (cpp_reader *, source_location, cpp_hashnode *); +static void cb_undef (cpp_reader *, source_location, cpp_hashnode *); +static void cb_def_pragma (cpp_reader *, source_location); +static void cb_include (cpp_reader *, source_location, const unsigned char *, + const char *, int, const cpp_token **); +static void cb_ident (cpp_reader *, source_location, const cpp_string *); +static void cb_used_define (cpp_reader *, source_location, cpp_hashnode *); +static void cb_used_undef (cpp_reader *, source_location, cpp_hashnode *); +void pp_dir_change (cpp_reader *, const char *); + +static int dump_macro (cpp_reader *, cpp_hashnode *, void *); +static void dump_queued_macros (cpp_reader *); + + +static void +cpp_define_builtins (cpp_reader *pfile) +{ + int major, minor, patchlevel; + + /* Initialize CPP built-ins; '1' corresponds to 'flag_hosted' + in C, defines __STDC_HOSTED__?! */ + cpp_init_builtins (pfile, 0); + + /* Initialize GFORTRAN specific builtins. + These are documented. */ + if (sscanf (BASEVER, "%d.%d.%d", &major, &minor, &patchlevel) != 3) + { + sscanf (BASEVER, "%d.%d", &major, &minor); + patchlevel = 0; + } + cpp_define_formatted (pfile, "__GNUC__=%d", major); + cpp_define_formatted (pfile, "__GNUC_MINOR__=%d", minor); + cpp_define_formatted (pfile, "__GNUC_PATCHLEVEL__=%d", patchlevel); + + cpp_define (pfile, "__GFORTRAN__=1"); + cpp_define (pfile, "_LANGUAGE_FORTRAN=1"); + + if (gfc_option.flag_openmp) + cpp_define (pfile, "_OPENMP=200805"); + + + /* More builtins that might be useful, but are not documented + (in no particular order). */ + cpp_define_formatted (pfile, "__VERSION__=\"%s\"", version_string); + + if (flag_pic) + { + cpp_define_formatted (pfile, "__pic__=%d", flag_pic); + cpp_define_formatted (pfile, "__PIC__=%d", flag_pic); + } + if (flag_pie) + { + cpp_define_formatted (pfile, "__pie__=%d", flag_pie); + cpp_define_formatted (pfile, "__PIE__=%d", flag_pie); + } + + if (optimize_size) + cpp_define (pfile, "__OPTIMIZE_SIZE__"); + if (optimize) + cpp_define (pfile, "__OPTIMIZE__"); + + if (fast_math_flags_set_p ()) + cpp_define (pfile, "__FAST_MATH__"); + if (flag_signaling_nans) + cpp_define (pfile, "__SUPPORT_SNAN__"); + + cpp_define_formatted (pfile, "__FINITE_MATH_ONLY__=%d", flag_finite_math_only); + + /* Definitions for LP64 model. */ + if (TYPE_PRECISION (long_integer_type_node) == 64 + && POINTER_SIZE == 64 + && TYPE_PRECISION (integer_type_node) == 32) + { + cpp_define (pfile, "_LP64"); + cpp_define (pfile, "__LP64__"); + } + + /* Define NAME with value TYPE size_unit. + The C-side also defines __SIZEOF_WCHAR_T__, __SIZEOF_WINT_T__ + __SIZEOF_PTRDIFF_T__, however, fortran seems to lack the + appropriate type nodes. */ + +#define define_type_sizeof(NAME, TYPE) \ + cpp_define_formatted (pfile, NAME"="HOST_WIDE_INT_PRINT_DEC, \ + tree_low_cst (TYPE_SIZE_UNIT (TYPE), 1)) + + define_type_sizeof ("__SIZEOF_INT__", integer_type_node); + define_type_sizeof ("__SIZEOF_LONG__", long_integer_type_node); + define_type_sizeof ("__SIZEOF_LONG_LONG__", long_long_integer_type_node); + define_type_sizeof ("__SIZEOF_SHORT__", short_integer_type_node); + define_type_sizeof ("__SIZEOF_FLOAT__", float_type_node); + define_type_sizeof ("__SIZEOF_DOUBLE__", double_type_node); + define_type_sizeof ("__SIZEOF_LONG_DOUBLE__", long_double_type_node); + define_type_sizeof ("__SIZEOF_SIZE_T__", size_type_node); + +#undef define_type_sizeof + + /* The defines below are necessary for the TARGET_* macros. + + FIXME: Note that builtin_define_std() actually is a function + in c-cppbuiltin.c which uses flags undefined for Fortran. + Let's skip this for now. If needed, one needs to look into it + once more. */ + +# define builtin_define(TXT) cpp_define (pfile, TXT) +# define builtin_define_std(TXT) +# define builtin_assert(TXT) cpp_assert (pfile, TXT) + + /* FIXME: Pandora's Box + Using the macros below results in multiple breakages: + - mingw will fail to compile this file as dependent macros + assume to be used in c-cppbuiltin.c only. Further, they use + flags only valid/defined in C (same as noted above). + [config/i386/mingw32.h, config/i386/cygming.h] + - other platforms (not as popular) break similarly + [grep for 'builtin_define_with_int_value' in gcc/config/] + + TARGET_CPU_CPP_BUILTINS (); + TARGET_OS_CPP_BUILTINS (); + TARGET_OBJFMT_CPP_BUILTINS (); */ + +#undef builtin_define +#undef builtin_define_std +#undef builtin_assert +} + +bool +gfc_cpp_enabled (void) +{ + return gfc_cpp_option.temporary_filename != NULL; +} + +bool +gfc_cpp_preprocess_only (void) +{ + return gfc_cpp_option.preprocess_only; +} + +const char * +gfc_cpp_temporary_file (void) +{ + return gfc_cpp_option.temporary_filename; +} + +void +gfc_cpp_init_options (unsigned int argc, + const char **argv ATTRIBUTE_UNUSED) +{ + /* Do not create any objects from libcpp here. If no + preprocessing is requested, this would be wasted + time and effort. + + See gfc_cpp_post_options() instead. */ + + gfc_cpp_option.temporary_filename = NULL; + gfc_cpp_option.output_filename = NULL; + gfc_cpp_option.preprocess_only = 0; + gfc_cpp_option.discard_comments = 1; + gfc_cpp_option.discard_comments_in_macro_exp = 1; + gfc_cpp_option.print_include_names = 0; + gfc_cpp_option.no_line_commands = 0; + gfc_cpp_option.dump_macros = '\0'; + gfc_cpp_option.dump_includes = 0; + gfc_cpp_option.working_directory = -1; + gfc_cpp_option.no_predefined = 0; + gfc_cpp_option.standard_include_paths = 1; + gfc_cpp_option.verbose = 0; + + gfc_cpp_option.multilib = NULL; + gfc_cpp_option.prefix = NULL; + gfc_cpp_option.sysroot = NULL; + + gfc_cpp_option.deferred_opt = XNEWVEC (gfc_cpp_deferred_opt_t, argc); + gfc_cpp_option.deferred_opt_count = 0; +} + +int +gfc_cpp_handle_option (size_t scode, const char *arg, int value ATTRIBUTE_UNUSED) +{ + int result = 1; + enum opt_code code = (enum opt_code) scode; + + switch (code) + { + default: + result = 0; + break; + + case OPT_cpp: + gfc_cpp_option.temporary_filename = arg; + break; + + case OPT_nocpp: + gfc_cpp_option.temporary_filename = 0L; + break; + + case OPT_d: + for ( ; *arg; ++arg) + switch (*arg) + { + case 'D': + case 'M': + case 'N': + case 'U': + gfc_cpp_option.dump_macros = *arg; + break; + + case 'I': + gfc_cpp_option.dump_includes = 1; + break; + } + break; + + case OPT_fworking_directory: + gfc_cpp_option.working_directory = value; + break; + + case OPT_idirafter: + gfc_cpp_add_include_path_after (xstrdup(arg), true); + break; + + case OPT_imultilib: + gfc_cpp_option.multilib = arg; + break; + + case OPT_iprefix: + gfc_cpp_option.prefix = arg; + break; + + case OPT_isysroot: + gfc_cpp_option.sysroot = arg; + break; + + case OPT_iquote: + case OPT_isystem: + gfc_cpp_add_include_path (xstrdup(arg), true); + break; + + case OPT_nostdinc: + gfc_cpp_option.standard_include_paths = value; + break; + + case OPT_o: + if (!gfc_cpp_option.output_filename) + gfc_cpp_option.output_filename = arg; + else + gfc_fatal_error ("output filename specified twice"); + break; + + case OPT_undef: + gfc_cpp_option.no_predefined = value; + break; + + case OPT_v: + gfc_cpp_option.verbose = value; + break; + + case OPT_A: + case OPT_D: + case OPT_U: + gfc_cpp_option.deferred_opt[gfc_cpp_option.deferred_opt_count].code = code; + gfc_cpp_option.deferred_opt[gfc_cpp_option.deferred_opt_count].arg = arg; + gfc_cpp_option.deferred_opt_count++; + break; + + case OPT_C: + gfc_cpp_option.discard_comments = 0; + break; + + case OPT_CC: + gfc_cpp_option.discard_comments = 0; + gfc_cpp_option.discard_comments_in_macro_exp = 0; + break; + + case OPT_E: + gfc_cpp_option.preprocess_only = 1; + break; + + case OPT_H: + gfc_cpp_option.print_include_names = 1; + break; + + case OPT_P: + gfc_cpp_option.no_line_commands = 1; + break; + } + + return result; +} + + +void +gfc_cpp_post_options (void) +{ + /* Any preprocessing-related option without '-cpp' is considered + an error. */ + if (!gfc_cpp_enabled () + && (gfc_cpp_preprocess_only () + || !gfc_cpp_option.discard_comments + || !gfc_cpp_option.discard_comments_in_macro_exp + || gfc_cpp_option.print_include_names + || gfc_cpp_option.no_line_commands + || gfc_cpp_option.dump_macros + || gfc_cpp_option.dump_includes)) + gfc_fatal_error("To enable preprocessing, use -cpp"); + + cpp_in = cpp_create_reader (CLK_GNUC89, NULL, line_table); + if (!gfc_cpp_enabled()) + return; + + gcc_assert (cpp_in); + + /* The cpp_options-structure defines far more flags than those set here. + If any other is implemented, see c-opt.c (sanitize_cpp_opts) for + inter-option dependencies that may need to be enforced. */ + cpp_option = cpp_get_options (cpp_in); + gcc_assert (cpp_option); + + /* TODO: allow non-traditional modes, e.g. by -cpp-std=...? */ + cpp_option->traditional = 1; + cpp_option->cplusplus_comments = 0; + + cpp_option->pedantic = pedantic; + cpp_option->inhibit_warnings = inhibit_warnings; + + cpp_option->dollars_in_ident = gfc_option.flag_dollar_ok; + cpp_option->discard_comments = gfc_cpp_option.discard_comments; + cpp_option->discard_comments_in_macro_exp = gfc_cpp_option.discard_comments_in_macro_exp; + cpp_option->print_include_names = gfc_cpp_option.print_include_names; + cpp_option->preprocessed = gfc_option.flag_preprocessed; + + if (gfc_cpp_option.working_directory == -1) + gfc_cpp_option.working_directory = (debug_info_level != DINFO_LEVEL_NONE); + + cpp_post_options (cpp_in); + + /* If an error has occurred in cpplib, note it so we fail immediately. */ + errorcount += cpp_errors (cpp_in); + + gfc_cpp_register_include_paths (); +} + + +void +gfc_cpp_init_0 (void) +{ + struct cpp_callbacks *cb; + + cb = cpp_get_callbacks (cpp_in); + cb->file_change = cb_file_change; + cb->line_change = cb_line_change; + cb->ident = cb_ident; + cb->def_pragma = cb_def_pragma; + + if (gfc_cpp_option.dump_includes) + cb->include = cb_include; + + if ((gfc_cpp_option.dump_macros == 'D') + || (gfc_cpp_option.dump_macros == 'N')) + { + cb->define = cb_define; + cb->undef = cb_undef; + } + + if (gfc_cpp_option.dump_macros == 'U') + { + cb->before_define = dump_queued_macros; + cb->used_define = cb_used_define; + cb->used_undef = cb_used_undef; + } + + /* Initialize the print structure. Setting print.src_line to -1 here is + a trick to guarantee that the first token of the file will cause + a linemarker to be output by maybe_print_line. */ + print.src_line = -1; + print.printed = 0; + print.prev = 0; + print.first_time = 1; + + if (gfc_cpp_preprocess_only ()) + { + if (gfc_cpp_option.output_filename) + { + /* This needs cheating: with "-E -o ", the user wants the + preprocessed output in . However, if nothing is done + about it is also used for assembler output. Hence, it + is necessary to redirect assembler output (actually nothing + as -E implies -fsyntax-only) to another file, otherwise the + output from preprocessing is lost. */ + asm_file_name = gfc_cpp_option.temporary_filename; + + print.outf = fopen (gfc_cpp_option.output_filename, "w"); + if (print.outf == NULL) + gfc_fatal_error ("opening output file %s: %s", + gfc_cpp_option.output_filename, strerror(errno)); + } + else + print.outf = stdout; + } + else + { + print.outf = fopen (gfc_cpp_option.temporary_filename, "w"); + if (print.outf == NULL) + gfc_fatal_error ("opening output file %s: %s", + gfc_cpp_option.temporary_filename, strerror(errno)); + } + + gcc_assert(cpp_in); + if (!cpp_read_main_file (cpp_in, gfc_source_file)) + errorcount++; +} + +void +gfc_cpp_init (void) +{ + int i; + + if (gfc_option.flag_preprocessed) + return; + + cpp_change_file (cpp_in, LC_RENAME, _("")); + if (!gfc_cpp_option.no_predefined) + cpp_define_builtins (cpp_in); + + /* Handle deferred options from command-line. */ + cpp_change_file (cpp_in, LC_RENAME, _("")); + + for (i = 0; i < gfc_cpp_option.deferred_opt_count; i++) + { + gfc_cpp_deferred_opt_t *opt = &gfc_cpp_option.deferred_opt[i]; + + if (opt->code == OPT_D) + cpp_define (cpp_in, opt->arg); + else if (opt->code == OPT_U) + cpp_undef (cpp_in, opt->arg); + else if (opt->code == OPT_A) + { + if (opt->arg[0] == '-') + cpp_unassert (cpp_in, opt->arg + 1); + else + cpp_assert (cpp_in, opt->arg); + } + } + + if (gfc_cpp_option.working_directory + && gfc_cpp_option.preprocess_only && !gfc_cpp_option.no_line_commands) + pp_dir_change (cpp_in, get_src_pwd ()); +} + +gfc_try +gfc_cpp_preprocess (const char *source_file) +{ + if (!gfc_cpp_enabled ()) + return FAILURE; + + cpp_change_file (cpp_in, LC_RENAME, source_file); + + if (cpp_option->traditional) + scan_translation_unit_trad (cpp_in); + else + scan_translation_unit (cpp_in); + + /* -dM command line option. */ + if (gfc_cpp_preprocess_only () && + gfc_cpp_option.dump_macros == 'M') + { + putc ('\n', print.outf); + cpp_forall_identifiers (cpp_in, dump_macro, NULL); + } + + putc ('\n', print.outf); + + if (!gfc_cpp_preprocess_only () + || (gfc_cpp_preprocess_only () && gfc_cpp_option.output_filename)) + fclose (print.outf); + + return SUCCESS; +} + +void +gfc_cpp_done (void) +{ + if (!gfc_cpp_enabled ()) + return; + + /* TODO: if dependency tracking was enabled, call + cpp_finish() here to write dependencies. + + Use cpp_get_deps() to access the current source's + dependencies during parsing. Add dependencies using + the mkdeps-interface (defined in libcpp). */ + + gcc_assert (cpp_in); + cpp_undef_all (cpp_in); + cpp_clear_file_cache (cpp_in); +} + +/* PATH must be malloc-ed and NULL-terminated. */ +void +gfc_cpp_add_include_path (char *path, bool user_supplied) +{ + /* CHAIN sets cpp_dir->sysp which differs from 0 if PATH is a system + include path. Fortran does not define any system include paths. */ + int cxx_aware = 0; + + add_path (path, BRACKET, cxx_aware, user_supplied); +} + +void +gfc_cpp_add_include_path_after (char *path, bool user_supplied) +{ + int cxx_aware = 0; + add_path (path, AFTER, cxx_aware, user_supplied); +} + +void +gfc_cpp_register_include_paths (void) +{ + int cxx_stdinc = 0; + register_include_chains (cpp_in, gfc_cpp_option.sysroot, + gfc_cpp_option.prefix, gfc_cpp_option.multilib, + gfc_cpp_option.standard_include_paths, cxx_stdinc, + gfc_cpp_option.verbose); +} + + + +static void scan_translation_unit_trad (cpp_reader *); +static void account_for_newlines (const unsigned char *, size_t); +static int dump_macro (cpp_reader *, cpp_hashnode *, void *); + +static void print_line (source_location, const char *); +static void maybe_print_line (source_location); + + +/* Writes out the preprocessed file, handling spacing and paste + avoidance issues. */ +static void +scan_translation_unit (cpp_reader *pfile) +{ + bool avoid_paste = false; + + print.source = NULL; + for (;;) + { + const cpp_token *token = cpp_get_token (pfile); + + if (token->type == CPP_PADDING) + { + avoid_paste = true; + if (print.source == NULL + || (!(print.source->flags & PREV_WHITE) + && token->val.source == NULL)) + print.source = token->val.source; + continue; + } + + if (token->type == CPP_EOF) + break; + + /* Subtle logic to output a space if and only if necessary. */ + if (avoid_paste) + { + if (print.source == NULL) + print.source = token; + if (print.source->flags & PREV_WHITE + || (print.prev + && cpp_avoid_paste (pfile, print.prev, token)) + || (print.prev == NULL && token->type == CPP_HASH)) + putc (' ', print.outf); + } + else if (token->flags & PREV_WHITE) + putc (' ', print.outf); + + avoid_paste = false; + print.source = NULL; + print.prev = token; + cpp_output_token (token, print.outf); + + if (token->type == CPP_COMMENT) + account_for_newlines (token->val.str.text, token->val.str.len); + } +} + +/* Adjust print.src_line for newlines embedded in output. */ +static void +account_for_newlines (const unsigned char *str, size_t len) +{ + while (len--) + if (*str++ == '\n') + print.src_line++; +} + +/* Writes out a traditionally preprocessed file. */ +static void +scan_translation_unit_trad (cpp_reader *pfile) +{ + while (_cpp_read_logical_line_trad (pfile)) + { + size_t len = pfile->out.cur - pfile->out.base; + maybe_print_line (pfile->out.first_line); + fwrite (pfile->out.base, 1, len, print.outf); + print.printed = 1; + if (!CPP_OPTION (pfile, discard_comments)) + account_for_newlines (pfile->out.base, len); + } +} + +/* If the token read on logical line LINE needs to be output on a + different line to the current one, output the required newlines or + a line marker. */ +static void +maybe_print_line (source_location src_loc) +{ + const struct line_map *map = linemap_lookup (line_table, src_loc); + int src_line = SOURCE_LINE (map, src_loc); + + /* End the previous line of text. */ + if (print.printed) + { + putc ('\n', print.outf); + print.src_line++; + print.printed = 0; + } + + if (src_line >= print.src_line && src_line < print.src_line + 8) + { + while (src_line > print.src_line) + { + putc ('\n', print.outf); + print.src_line++; + } + } + else + print_line (src_loc, ""); +} + +/* Output a line marker for logical line LINE. Special flags are "1" + or "2" indicating entering or leaving a file. */ +static void +print_line (source_location src_loc, const char *special_flags) +{ + /* End any previous line of text. */ + if (print.printed) + putc ('\n', print.outf); + print.printed = 0; + + if (!gfc_cpp_option.no_line_commands) + { + const struct line_map *map = linemap_lookup (line_table, src_loc); + + size_t to_file_len = strlen (map->to_file); + unsigned char *to_file_quoted = + (unsigned char *) alloca (to_file_len * 4 + 1); + unsigned char *p; + + print.src_line = SOURCE_LINE (map, src_loc); + + /* cpp_quote_string does not nul-terminate, so we have to do it + ourselves. */ + p = cpp_quote_string (to_file_quoted, + (const unsigned char *) map->to_file, to_file_len); + *p = '\0'; + fprintf (print.outf, "# %u \"%s\"%s", + print.src_line == 0 ? 1 : print.src_line, + to_file_quoted, special_flags); + + if (map->sysp == 2) + fputs (" 3 4", print.outf); + else if (map->sysp == 1) + fputs (" 3", print.outf); + + putc ('\n', print.outf); + } +} + +static void +cb_file_change (cpp_reader * ARG_UNUSED (pfile), const struct line_map *map) +{ + const char *flags = ""; + + if (gfc_cpp_option.no_line_commands) + return; + + if (!map) + return; + + if (print.first_time) + { + /* Avoid printing foo.i when the main file is foo.c. */ + if (!cpp_get_options (cpp_in)->preprocessed) + print_line (map->start_location, flags); + print.first_time = 0; + } + else + { + /* Bring current file to correct line when entering a new file. */ + if (map->reason == LC_ENTER) + { + const struct line_map *from = INCLUDED_FROM (line_table, map); + maybe_print_line (LAST_SOURCE_LINE_LOCATION (from)); + } + if (map->reason == LC_ENTER) + flags = " 1"; + else if (map->reason == LC_LEAVE) + flags = " 2"; + print_line (map->start_location, flags); + } + +} + +/* Called when a line of output is started. TOKEN is the first token + of the line, and at end of file will be CPP_EOF. */ +static void +cb_line_change (cpp_reader *pfile, const cpp_token *token, + int parsing_args) +{ + source_location src_loc = token->src_loc; + + if (token->type == CPP_EOF || parsing_args) + return; + + maybe_print_line (src_loc); + print.prev = 0; + print.source = 0; + + /* Supply enough spaces to put this token in its original column, + one space per column greater than 2, since scan_translation_unit + will provide a space if PREV_WHITE. Don't bother trying to + reconstruct tabs; we can't get it right in general, and nothing + ought to care. Some things do care; the fault lies with them. */ + if (!CPP_OPTION (pfile, traditional)) + { + const struct line_map *map = linemap_lookup (line_table, src_loc); + int spaces = SOURCE_COLUMN (map, src_loc) - 2; + print.printed = 1; + + while (-- spaces >= 0) + putc (' ', print.outf); + } +} + +static void +cb_ident (cpp_reader *pfile ATTRIBUTE_UNUSED, source_location line, + const cpp_string *str) +{ + maybe_print_line (line); + fprintf (print.outf, "#ident %s\n", str->text); + print.src_line++; +} + +static void +cb_define (cpp_reader *pfile ATTRIBUTE_UNUSED, source_location line, + cpp_hashnode *node ATTRIBUTE_UNUSED) +{ + maybe_print_line (line); + fputs ("#define ", print.outf); + + /* 'D' is whole definition; 'N' is name only. */ + if (gfc_cpp_option.dump_macros == 'D') + fputs ((const char *) cpp_macro_definition (pfile, node), + print.outf); + else + fputs ((const char *) NODE_NAME (node), print.outf); + + putc ('\n', print.outf); + if (linemap_lookup (line_table, line)->to_line != 0) + print.src_line++; +} + +static void +cb_undef (cpp_reader *pfile ATTRIBUTE_UNUSED, source_location line, + cpp_hashnode *node) +{ + maybe_print_line (line); + fprintf (print.outf, "#undef %s\n", NODE_NAME (node)); + print.src_line++; +} + +static void +cb_include (cpp_reader *pfile ATTRIBUTE_UNUSED, source_location line, + const unsigned char *dir, const char *header, int angle_brackets, + const cpp_token **comments) +{ + maybe_print_line (line); + if (angle_brackets) + fprintf (print.outf, "#%s <%s>", dir, header); + else + fprintf (print.outf, "#%s \"%s\"", dir, header); + + if (comments != NULL) + { + while (*comments != NULL) + { + if ((*comments)->flags & PREV_WHITE) + putc (' ', print.outf); + cpp_output_token (*comments, print.outf); + ++comments; + } + } + + putc ('\n', print.outf); + print.src_line++; +} + +/* Dump out the hash table. */ +static int +dump_macro (cpp_reader *pfile, cpp_hashnode *node, void *v ATTRIBUTE_UNUSED) +{ + if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN)) + { + fputs ("#define ", print.outf); + fputs ((const char *) cpp_macro_definition (pfile, node), + print.outf); + putc ('\n', print.outf); + print.src_line++; + } + + return 1; +} + +static void +cb_used_define (cpp_reader *pfile, source_location line ATTRIBUTE_UNUSED, + cpp_hashnode *node) +{ + gfc_cpp_macro_queue *q; + q = XNEW (gfc_cpp_macro_queue); + q->macro = xstrdup ((const char *) cpp_macro_definition (pfile, node)); + q->next = cpp_define_queue; + cpp_define_queue = q; +} + + +/* Callback called when -fworking-director and -E to emit working + directory in cpp output file. */ + +void +pp_dir_change (cpp_reader *pfile ATTRIBUTE_UNUSED, const char *dir) +{ + size_t to_file_len = strlen (dir); + unsigned char *to_file_quoted = + (unsigned char *) alloca (to_file_len * 4 + 1); + unsigned char *p; + + /* cpp_quote_string does not nul-terminate, so we have to do it ourselves. */ + p = cpp_quote_string (to_file_quoted, (const unsigned char *) dir, to_file_len); + *p = '\0'; + fprintf (print.outf, "# 1 \"%s//\"\n", to_file_quoted); +} + +/* Copy a #pragma directive to the preprocessed output. */ +static void +cb_def_pragma (cpp_reader *pfile, source_location line) +{ + maybe_print_line (line); + fputs ("#pragma ", print.outf); + cpp_output_line (pfile, print.outf); + print.src_line++; +} + +static void +cb_used_undef (cpp_reader *pfile ATTRIBUTE_UNUSED, + source_location line ATTRIBUTE_UNUSED, + cpp_hashnode *node) +{ + gfc_cpp_macro_queue *q; + q = XNEW (gfc_cpp_macro_queue); + q->macro = xstrdup ((const char *) NODE_NAME (node)); + q->next = cpp_undefine_queue; + cpp_undefine_queue = q; +} + +static void +dump_queued_macros (cpp_reader *pfile ATTRIBUTE_UNUSED) +{ + gfc_cpp_macro_queue *q; + + /* End the previous line of text. */ + if (print.printed) + { + putc ('\n', print.outf); + print.src_line++; + print.printed = 0; + } + + for (q = cpp_define_queue; q;) + { + gfc_cpp_macro_queue *oq; + fputs ("#define ", print.outf); + fputs (q->macro, print.outf); + putc ('\n', print.outf); + print.src_line++; + oq = q; + q = q->next; + gfc_free (oq->macro); + gfc_free (oq); + } + cpp_define_queue = NULL; + for (q = cpp_undefine_queue; q;) + { + gfc_cpp_macro_queue *oq; + fprintf (print.outf, "#undef %s\n", q->macro); + print.src_line++; + oq = q; + q = q->next; + gfc_free (oq->macro); + gfc_free (oq); + } + cpp_undefine_queue = NULL; +} + + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/cpp.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/cpp.h new file mode 100644 index 0000000000..54a899f6a8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/cpp.h @@ -0,0 +1,48 @@ +/* Copyright (C) 2008 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#ifndef GFC_CPP_H +#define GFC_CPP_H + +/* Returns true if preprocessing is enabled, false otherwise. */ +bool gfc_cpp_enabled (void); + +bool gfc_cpp_preprocess_only (void); + +const char *gfc_cpp_temporary_file (void); + + +void gfc_cpp_init_0 (void); +void gfc_cpp_init (void); + +void gfc_cpp_init_options (unsigned int argc, const char **argv); + +int gfc_cpp_handle_option(size_t scode, const char *arg, int value); + +void gfc_cpp_post_options (void); + +gfc_try gfc_cpp_preprocess (const char *source_file); + +void gfc_cpp_done (void); + +void gfc_cpp_add_include_path (char *path, bool user_supplied); +void gfc_cpp_add_include_path_after (char *path, bool user_supplied); + +void gfc_cpp_register_include_paths (void); + +#endif /* GFC_CPP_H */ diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/data.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/data.c new file mode 100644 index 0000000000..09dde150b2 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/data.c @@ -0,0 +1,848 @@ +/* Supporting functions for resolving DATA statement. + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Lifang Zeng + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + + +/* Notes for DATA statement implementation: + + We first assign initial value to each symbol by gfc_assign_data_value + during resolving DATA statement. Refer to check_data_variable and + traverse_data_list in resolve.c. + + The complexity exists in the handling of array section, implied do + and array of struct appeared in DATA statement. + + We call gfc_conv_structure, gfc_con_array_array_initializer, + etc., to convert the initial value. Refer to trans-expr.c and + trans-array.c. */ + +#include "config.h" +#include "gfortran.h" +#include "data.h" + +static void formalize_init_expr (gfc_expr *); + +/* Calculate the array element offset. */ + +static void +get_array_index (gfc_array_ref *ar, mpz_t *offset) +{ + gfc_expr *e; + int i; + gfc_try re; + mpz_t delta; + mpz_t tmp; + + mpz_init (tmp); + mpz_set_si (*offset, 0); + mpz_init_set_si (delta, 1); + for (i = 0; i < ar->dimen; i++) + { + e = gfc_copy_expr (ar->start[i]); + re = gfc_simplify_expr (e, 1); + + if ((gfc_is_constant_expr (ar->as->lower[i]) == 0) + || (gfc_is_constant_expr (ar->as->upper[i]) == 0) + || (gfc_is_constant_expr (e) == 0)) + gfc_error ("non-constant array in DATA statement %L", &ar->where); + + mpz_set (tmp, e->value.integer); + mpz_sub (tmp, tmp, ar->as->lower[i]->value.integer); + mpz_mul (tmp, tmp, delta); + mpz_add (*offset, tmp, *offset); + + mpz_sub (tmp, ar->as->upper[i]->value.integer, + ar->as->lower[i]->value.integer); + mpz_add_ui (tmp, tmp, 1); + mpz_mul (delta, tmp, delta); + } + mpz_clear (delta); + mpz_clear (tmp); +} + + +/* Find if there is a constructor which offset is equal to OFFSET. */ + +static gfc_constructor * +find_con_by_offset (splay_tree spt, mpz_t offset) +{ + mpz_t tmp; + gfc_constructor *ret = NULL; + gfc_constructor *con; + splay_tree_node sptn; + + /* The complexity is due to needing quick access to the linked list of + constructors. Both a linked list and a splay tree are used, and both + are kept up to date if they are array elements (which is the only time + that a specific constructor has to be found). */ + + gcc_assert (spt != NULL); + mpz_init (tmp); + + sptn = splay_tree_lookup (spt, (splay_tree_key) mpz_get_si (offset)); + + if (sptn) + ret = (gfc_constructor*) sptn->value; + else + { + /* Need to check and see if we match a range, so we will pull + the next lowest index and see if the range matches. */ + sptn = splay_tree_predecessor (spt, + (splay_tree_key) mpz_get_si (offset)); + if (sptn) + { + con = (gfc_constructor*) sptn->value; + if (mpz_cmp_ui (con->repeat, 1) > 0) + { + mpz_init (tmp); + mpz_add (tmp, con->n.offset, con->repeat); + if (mpz_cmp (offset, tmp) < 0) + ret = con; + mpz_clear (tmp); + } + else + ret = NULL; /* The range did not match. */ + } + else + ret = NULL; /* No pred, so no match. */ + } + + return ret; +} + + +/* Find if there is a constructor which component is equal to COM. */ + +static gfc_constructor * +find_con_by_component (gfc_component *com, gfc_constructor *con) +{ + for (; con; con = con->next) + { + if (com == con->n.component) + return con; + } + return NULL; +} + + +/* Create a character type initialization expression from RVALUE. + TS [and REF] describe [the substring of] the variable being initialized. + INIT is the existing initializer, not NULL. Initialization is performed + according to normal assignment rules. */ + +static gfc_expr * +create_character_intializer (gfc_expr *init, gfc_typespec *ts, + gfc_ref *ref, gfc_expr *rvalue) +{ + int len, start, end; + gfc_char_t *dest; + + gfc_extract_int (ts->cl->length, &len); + + if (init == NULL) + { + /* Create a new initializer. */ + init = gfc_get_expr (); + init->expr_type = EXPR_CONSTANT; + init->ts = *ts; + + dest = gfc_get_wide_string (len + 1); + dest[len] = '\0'; + init->value.character.length = len; + init->value.character.string = dest; + /* Blank the string if we're only setting a substring. */ + if (ref != NULL) + gfc_wide_memset (dest, ' ', len); + } + else + dest = init->value.character.string; + + if (ref) + { + gfc_expr *start_expr, *end_expr; + + gcc_assert (ref->type == REF_SUBSTRING); + + /* Only set a substring of the destination. Fortran substring bounds + are one-based [start, end], we want zero based [start, end). */ + start_expr = gfc_copy_expr (ref->u.ss.start); + end_expr = gfc_copy_expr (ref->u.ss.end); + + if ((gfc_simplify_expr (start_expr, 1) == FAILURE) + || (gfc_simplify_expr (end_expr, 1)) == FAILURE) + { + gfc_error ("failure to simplify substring reference in DATA " + "statement at %L", &ref->u.ss.start->where); + return NULL; + } + + gfc_extract_int (start_expr, &start); + start--; + gfc_extract_int (end_expr, &end); + } + else + { + /* Set the whole string. */ + start = 0; + end = len; + } + + /* Copy the initial value. */ + if (rvalue->ts.type == BT_HOLLERITH) + len = rvalue->representation.length; + else + len = rvalue->value.character.length; + + if (len > end - start) + { + len = end - start; + gfc_warning_now ("initialization string truncated to match variable " + "at %L", &rvalue->where); + } + + if (rvalue->ts.type == BT_HOLLERITH) + { + int i; + for (i = 0; i < len; i++) + dest[start+i] = rvalue->representation.string[i]; + } + else + memcpy (&dest[start], rvalue->value.character.string, + len * sizeof (gfc_char_t)); + + /* Pad with spaces. Substrings will already be blanked. */ + if (len < end - start && ref == NULL) + gfc_wide_memset (&dest[start + len], ' ', end - (start + len)); + + if (rvalue->ts.type == BT_HOLLERITH) + { + init->representation.length = init->value.character.length; + init->representation.string + = gfc_widechar_to_char (init->value.character.string, + init->value.character.length); + } + + return init; +} + + +/* Assign the initial value RVALUE to LVALUE's symbol->value. If the + LVALUE already has an initialization, we extend this, otherwise we + create a new one. */ + +gfc_try +gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index) +{ + gfc_ref *ref; + gfc_expr *init; + gfc_expr *expr; + gfc_constructor *con; + gfc_constructor *last_con; + gfc_constructor *pred; + gfc_symbol *symbol; + gfc_typespec *last_ts; + mpz_t offset; + splay_tree spt; + splay_tree_node sptn; + + symbol = lvalue->symtree->n.sym; + init = symbol->value; + last_ts = &symbol->ts; + last_con = NULL; + mpz_init_set_si (offset, 0); + + /* Find/create the parent expressions for subobject references. */ + for (ref = lvalue->ref; ref; ref = ref->next) + { + /* Break out of the loop if we find a substring. */ + if (ref->type == REF_SUBSTRING) + { + /* A substring should always be the last subobject reference. */ + gcc_assert (ref->next == NULL); + break; + } + + /* Use the existing initializer expression if it exists. Otherwise + create a new one. */ + if (init == NULL) + expr = gfc_get_expr (); + else + expr = init; + + /* Find or create this element. */ + switch (ref->type) + { + case REF_ARRAY: + if (init && expr->expr_type != EXPR_ARRAY) + { + gfc_error ("'%s' at %L already is initialized at %L", + lvalue->symtree->n.sym->name, &lvalue->where, + &init->where); + return FAILURE; + } + + if (init == NULL) + { + /* The element typespec will be the same as the array + typespec. */ + expr->ts = *last_ts; + /* Setup the expression to hold the constructor. */ + expr->expr_type = EXPR_ARRAY; + expr->rank = ref->u.ar.as->rank; + } + + if (ref->u.ar.type == AR_ELEMENT) + get_array_index (&ref->u.ar, &offset); + else + mpz_set (offset, index); + + /* Check the bounds. */ + if (mpz_cmp_si (offset, 0) < 0) + { + gfc_error ("Data element below array lower bound at %L", + &lvalue->where); + return FAILURE; + } + else + { + mpz_t size; + if (spec_size (ref->u.ar.as, &size) == SUCCESS) + { + if (mpz_cmp (offset, size) >= 0) + { + mpz_clear (size); + gfc_error ("Data element above array upper bound at %L", + &lvalue->where); + return FAILURE; + } + mpz_clear (size); + } + } + + /* Splay tree containing offset and gfc_constructor. */ + spt = expr->con_by_offset; + + if (spt == NULL) + { + spt = splay_tree_new (splay_tree_compare_ints, NULL, NULL); + expr->con_by_offset = spt; + con = NULL; + } + else + con = find_con_by_offset (spt, offset); + + if (con == NULL) + { + splay_tree_key j; + + /* Create a new constructor. */ + con = gfc_get_constructor (); + mpz_set (con->n.offset, offset); + j = (splay_tree_key) mpz_get_si (offset); + sptn = splay_tree_insert (spt, j, (splay_tree_value) con); + /* Fix up the linked list. */ + sptn = splay_tree_predecessor (spt, j); + if (sptn == NULL) + { /* Insert at the head. */ + con->next = expr->value.constructor; + expr->value.constructor = con; + } + else + { /* Insert in the chain. */ + pred = (gfc_constructor*) sptn->value; + con->next = pred->next; + pred->next = con; + } + } + break; + + case REF_COMPONENT: + if (init == NULL) + { + /* Setup the expression to hold the constructor. */ + expr->expr_type = EXPR_STRUCTURE; + expr->ts.type = BT_DERIVED; + expr->ts.derived = ref->u.c.sym; + } + else + gcc_assert (expr->expr_type == EXPR_STRUCTURE); + last_ts = &ref->u.c.component->ts; + + /* Find the same element in the existing constructor. */ + con = expr->value.constructor; + con = find_con_by_component (ref->u.c.component, con); + + if (con == NULL) + { + /* Create a new constructor. */ + con = gfc_get_constructor (); + con->n.component = ref->u.c.component; + con->next = expr->value.constructor; + expr->value.constructor = con; + } + break; + + default: + gcc_unreachable (); + } + + if (init == NULL) + { + /* Point the container at the new expression. */ + if (last_con == NULL) + symbol->value = expr; + else + last_con->expr = expr; + } + init = con->expr; + last_con = con; + } + + if (ref || last_ts->type == BT_CHARACTER) + expr = create_character_intializer (init, last_ts, ref, rvalue); + else + { + /* Overwriting an existing initializer is non-standard but usually only + provokes a warning from other compilers. */ + if (init != NULL) + { + /* Order in which the expressions arrive here depends on whether + they are from data statements or F95 style declarations. + Therefore, check which is the most recent. */ + expr = (LOCATION_LINE (init->where.lb->location) + > LOCATION_LINE (rvalue->where.lb->location)) + ? init : rvalue; + gfc_notify_std (GFC_STD_GNU, "Extension: re-initialization " + "of '%s' at %L", symbol->name, &expr->where); + } + + expr = gfc_copy_expr (rvalue); + if (!gfc_compare_types (&lvalue->ts, &expr->ts)) + gfc_convert_type (expr, &lvalue->ts, 0); + } + + if (last_con == NULL) + symbol->value = expr; + else + last_con->expr = expr; + + return SUCCESS; +} + + +/* Similarly, but initialize REPEAT consecutive values in LVALUE the same + value in RVALUE. For the nonce, LVALUE must refer to a full array, not + an array section. */ + +void +gfc_assign_data_value_range (gfc_expr *lvalue, gfc_expr *rvalue, + mpz_t index, mpz_t repeat) +{ + gfc_ref *ref; + gfc_expr *init, *expr; + gfc_constructor *con, *last_con; + gfc_constructor *pred; + gfc_symbol *symbol; + gfc_typespec *last_ts; + mpz_t offset; + splay_tree spt; + splay_tree_node sptn; + + symbol = lvalue->symtree->n.sym; + init = symbol->value; + last_ts = &symbol->ts; + last_con = NULL; + mpz_init_set_si (offset, 0); + + /* Find/create the parent expressions for subobject references. */ + for (ref = lvalue->ref; ref; ref = ref->next) + { + /* Use the existing initializer expression if it exists. + Otherwise create a new one. */ + if (init == NULL) + expr = gfc_get_expr (); + else + expr = init; + + /* Find or create this element. */ + switch (ref->type) + { + case REF_ARRAY: + if (init == NULL) + { + /* The element typespec will be the same as the array + typespec. */ + expr->ts = *last_ts; + /* Setup the expression to hold the constructor. */ + expr->expr_type = EXPR_ARRAY; + expr->rank = ref->u.ar.as->rank; + } + else + gcc_assert (expr->expr_type == EXPR_ARRAY); + + if (ref->u.ar.type == AR_ELEMENT) + { + get_array_index (&ref->u.ar, &offset); + + /* This had better not be the bottom of the reference. + We can still get to a full array via a component. */ + gcc_assert (ref->next != NULL); + } + else + { + mpz_set (offset, index); + + /* We're at a full array or an array section. This means + that we've better have found a full array, and that we're + at the bottom of the reference. */ + gcc_assert (ref->u.ar.type == AR_FULL); + gcc_assert (ref->next == NULL); + } + + /* Find the same element in the existing constructor. */ + + /* Splay tree containing offset and gfc_constructor. */ + spt = expr->con_by_offset; + + if (spt == NULL) + { + spt = splay_tree_new (splay_tree_compare_ints, NULL, NULL); + expr->con_by_offset = spt; + con = NULL; + } + else + con = find_con_by_offset (spt, offset); + + if (con == NULL) + { + splay_tree_key j; + /* Create a new constructor. */ + con = gfc_get_constructor (); + mpz_set (con->n.offset, offset); + j = (splay_tree_key) mpz_get_si (offset); + + if (ref->next == NULL) + mpz_set (con->repeat, repeat); + sptn = splay_tree_insert (spt, j, (splay_tree_value) con); + /* Fix up the linked list. */ + sptn = splay_tree_predecessor (spt, j); + if (sptn == NULL) + { /* Insert at the head. */ + con->next = expr->value.constructor; + expr->value.constructor = con; + } + else + { /* Insert in the chain. */ + pred = (gfc_constructor*) sptn->value; + con->next = pred->next; + pred->next = con; + } + } + else + gcc_assert (ref->next != NULL); + break; + + case REF_COMPONENT: + if (init == NULL) + { + /* Setup the expression to hold the constructor. */ + expr->expr_type = EXPR_STRUCTURE; + expr->ts.type = BT_DERIVED; + expr->ts.derived = ref->u.c.sym; + } + else + gcc_assert (expr->expr_type == EXPR_STRUCTURE); + last_ts = &ref->u.c.component->ts; + + /* Find the same element in the existing constructor. */ + con = expr->value.constructor; + con = find_con_by_component (ref->u.c.component, con); + + if (con == NULL) + { + /* Create a new constructor. */ + con = gfc_get_constructor (); + con->n.component = ref->u.c.component; + con->next = expr->value.constructor; + expr->value.constructor = con; + } + + /* Since we're only intending to initialize arrays here, + there better be an inner reference. */ + gcc_assert (ref->next != NULL); + break; + + case REF_SUBSTRING: + default: + gcc_unreachable (); + } + + if (init == NULL) + { + /* Point the container at the new expression. */ + if (last_con == NULL) + symbol->value = expr; + else + last_con->expr = expr; + } + init = con->expr; + last_con = con; + } + + if (last_ts->type == BT_CHARACTER) + expr = create_character_intializer (init, last_ts, NULL, rvalue); + else + { + /* We should never be overwriting an existing initializer. */ + gcc_assert (!init); + + expr = gfc_copy_expr (rvalue); + if (!gfc_compare_types (&lvalue->ts, &expr->ts)) + gfc_convert_type (expr, &lvalue->ts, 0); + } + + if (last_con == NULL) + symbol->value = expr; + else + last_con->expr = expr; +} + +/* Modify the index of array section and re-calculate the array offset. */ + +void +gfc_advance_section (mpz_t *section_index, gfc_array_ref *ar, + mpz_t *offset_ret) +{ + int i; + mpz_t delta; + mpz_t tmp; + bool forwards; + int cmp; + + for (i = 0; i < ar->dimen; i++) + { + if (ar->dimen_type[i] != DIMEN_RANGE) + continue; + + if (ar->stride[i]) + { + mpz_add (section_index[i], section_index[i], + ar->stride[i]->value.integer); + if (mpz_cmp_si (ar->stride[i]->value.integer, 0) >= 0) + forwards = true; + else + forwards = false; + } + else + { + mpz_add_ui (section_index[i], section_index[i], 1); + forwards = true; + } + + if (ar->end[i]) + cmp = mpz_cmp (section_index[i], ar->end[i]->value.integer); + else + cmp = mpz_cmp (section_index[i], ar->as->upper[i]->value.integer); + + if ((cmp > 0 && forwards) || (cmp < 0 && !forwards)) + { + /* Reset index to start, then loop to advance the next index. */ + if (ar->start[i]) + mpz_set (section_index[i], ar->start[i]->value.integer); + else + mpz_set (section_index[i], ar->as->lower[i]->value.integer); + } + else + break; + } + + mpz_set_si (*offset_ret, 0); + mpz_init_set_si (delta, 1); + mpz_init (tmp); + for (i = 0; i < ar->dimen; i++) + { + mpz_sub (tmp, section_index[i], ar->as->lower[i]->value.integer); + mpz_mul (tmp, tmp, delta); + mpz_add (*offset_ret, tmp, *offset_ret); + + mpz_sub (tmp, ar->as->upper[i]->value.integer, + ar->as->lower[i]->value.integer); + mpz_add_ui (tmp, tmp, 1); + mpz_mul (delta, tmp, delta); + } + mpz_clear (tmp); + mpz_clear (delta); +} + + +/* Rearrange a structure constructor so the elements are in the specified + order. Also insert NULL entries if necessary. */ + +static void +formalize_structure_cons (gfc_expr *expr) +{ + gfc_constructor *head; + gfc_constructor *tail; + gfc_constructor *cur; + gfc_constructor *last; + gfc_constructor *c; + gfc_component *order; + + c = expr->value.constructor; + + /* Constructor is already formalized. */ + if (!c || c->n.component == NULL) + return; + + head = tail = NULL; + for (order = expr->ts.derived->components; order; order = order->next) + { + /* Find the next component. */ + last = NULL; + cur = c; + while (cur != NULL && cur->n.component != order) + { + last = cur; + cur = cur->next; + } + + if (cur == NULL) + { + /* Create a new one. */ + cur = gfc_get_constructor (); + } + else + { + /* Remove it from the chain. */ + if (last == NULL) + c = cur->next; + else + last->next = cur->next; + cur->next = NULL; + + formalize_init_expr (cur->expr); + } + + /* Add it to the new constructor. */ + if (head == NULL) + head = tail = cur; + else + { + tail->next = cur; + tail = tail->next; + } + } + gcc_assert (c == NULL); + expr->value.constructor = head; +} + + +/* Make sure an initialization expression is in normalized form, i.e., all + elements of the constructors are in the correct order. */ + +static void +formalize_init_expr (gfc_expr *expr) +{ + expr_t type; + gfc_constructor *c; + + if (expr == NULL) + return; + + type = expr->expr_type; + switch (type) + { + case EXPR_ARRAY: + c = expr->value.constructor; + while (c) + { + formalize_init_expr (c->expr); + c = c->next; + } + break; + + case EXPR_STRUCTURE: + formalize_structure_cons (expr); + break; + + default: + break; + } +} + + +/* Resolve symbol's initial value after all data statement. */ + +void +gfc_formalize_init_value (gfc_symbol *sym) +{ + formalize_init_expr (sym->value); +} + + +/* Get the integer value into RET_AS and SECTION from AS and AR, and return + offset. */ + +void +gfc_get_section_index (gfc_array_ref *ar, mpz_t *section_index, mpz_t *offset) +{ + int i; + mpz_t delta; + mpz_t tmp; + + mpz_set_si (*offset, 0); + mpz_init (tmp); + mpz_init_set_si (delta, 1); + for (i = 0; i < ar->dimen; i++) + { + mpz_init (section_index[i]); + switch (ar->dimen_type[i]) + { + case DIMEN_ELEMENT: + case DIMEN_RANGE: + if (ar->start[i]) + { + mpz_sub (tmp, ar->start[i]->value.integer, + ar->as->lower[i]->value.integer); + mpz_mul (tmp, tmp, delta); + mpz_add (*offset, tmp, *offset); + mpz_set (section_index[i], ar->start[i]->value.integer); + } + else + mpz_set (section_index[i], ar->as->lower[i]->value.integer); + break; + + case DIMEN_VECTOR: + gfc_internal_error ("TODO: Vector sections in data statements"); + + default: + gcc_unreachable (); + } + + mpz_sub (tmp, ar->as->upper[i]->value.integer, + ar->as->lower[i]->value.integer); + mpz_add_ui (tmp, tmp, 1); + mpz_mul (delta, tmp, delta); + } + + mpz_clear (tmp); + mpz_clear (delta); +} + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/data.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/data.h new file mode 100644 index 0000000000..0d31a920e6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/data.h @@ -0,0 +1,24 @@ +/* Header for functions resolving DATA statements. + Copyright (C) 2007, 2008 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +void gfc_formalize_init_value (gfc_symbol *); +void gfc_get_section_index (gfc_array_ref *, mpz_t *, mpz_t *); +gfc_try gfc_assign_data_value (gfc_expr *, gfc_expr *, mpz_t); +void gfc_assign_data_value_range (gfc_expr *, gfc_expr *, mpz_t, mpz_t); +void gfc_advance_section (mpz_t *, gfc_array_ref *, mpz_t *); diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/decl.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/decl.c new file mode 100644 index 0000000000..f6677fe42e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/decl.c @@ -0,0 +1,7236 @@ +/* Declaration statement matcher + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "gfortran.h" +#include "match.h" +#include "parse.h" + + +/* Macros to access allocate memory for gfc_data_variable, + gfc_data_value and gfc_data. */ +#define gfc_get_data_variable() XCNEW (gfc_data_variable) +#define gfc_get_data_value() XCNEW (gfc_data_value) +#define gfc_get_data() XCNEW (gfc_data) + + +/* This flag is set if an old-style length selector is matched + during a type-declaration statement. */ + +static int old_char_selector; + +/* When variables acquire types and attributes from a declaration + statement, they get them from the following static variables. The + first part of a declaration sets these variables and the second + part copies these into symbol structures. */ + +static gfc_typespec current_ts; + +static symbol_attribute current_attr; +static gfc_array_spec *current_as; +static int colon_seen; + +/* The current binding label (if any). */ +static char curr_binding_label[GFC_MAX_BINDING_LABEL_LEN + 1]; +/* Need to know how many identifiers are on the current data declaration + line in case we're given the BIND(C) attribute with a NAME= specifier. */ +static int num_idents_on_line; +/* Need to know if a NAME= specifier was found during gfc_match_bind_c so we + can supply a name if the curr_binding_label is nil and NAME= was not. */ +static int has_name_equals = 0; + +/* Initializer of the previous enumerator. */ + +static gfc_expr *last_initializer; + +/* History of all the enumerators is maintained, so that + kind values of all the enumerators could be updated depending + upon the maximum initialized value. */ + +typedef struct enumerator_history +{ + gfc_symbol *sym; + gfc_expr *initializer; + struct enumerator_history *next; +} +enumerator_history; + +/* Header of enum history chain. */ + +static enumerator_history *enum_history = NULL; + +/* Pointer of enum history node containing largest initializer. */ + +static enumerator_history *max_enum = NULL; + +/* gfc_new_block points to the symbol of a newly matched block. */ + +gfc_symbol *gfc_new_block; + +bool gfc_matching_function; + + +/********************* DATA statement subroutines *********************/ + +static bool in_match_data = false; + +bool +gfc_in_match_data (void) +{ + return in_match_data; +} + +static void +set_in_match_data (bool set_value) +{ + in_match_data = set_value; +} + +/* Free a gfc_data_variable structure and everything beneath it. */ + +static void +free_variable (gfc_data_variable *p) +{ + gfc_data_variable *q; + + for (; p; p = q) + { + q = p->next; + gfc_free_expr (p->expr); + gfc_free_iterator (&p->iter, 0); + free_variable (p->list); + gfc_free (p); + } +} + + +/* Free a gfc_data_value structure and everything beneath it. */ + +static void +free_value (gfc_data_value *p) +{ + gfc_data_value *q; + + for (; p; p = q) + { + q = p->next; + gfc_free_expr (p->expr); + gfc_free (p); + } +} + + +/* Free a list of gfc_data structures. */ + +void +gfc_free_data (gfc_data *p) +{ + gfc_data *q; + + for (; p; p = q) + { + q = p->next; + free_variable (p->var); + free_value (p->value); + gfc_free (p); + } +} + + +/* Free all data in a namespace. */ + +static void +gfc_free_data_all (gfc_namespace *ns) +{ + gfc_data *d; + + for (;ns->data;) + { + d = ns->data->next; + gfc_free (ns->data); + ns->data = d; + } +} + + +static match var_element (gfc_data_variable *); + +/* Match a list of variables terminated by an iterator and a right + parenthesis. */ + +static match +var_list (gfc_data_variable *parent) +{ + gfc_data_variable *tail, var; + match m; + + m = var_element (&var); + if (m == MATCH_ERROR) + return MATCH_ERROR; + if (m == MATCH_NO) + goto syntax; + + tail = gfc_get_data_variable (); + *tail = var; + + parent->list = tail; + + for (;;) + { + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + + m = gfc_match_iterator (&parent->iter, 1); + if (m == MATCH_YES) + break; + if (m == MATCH_ERROR) + return MATCH_ERROR; + + m = var_element (&var); + if (m == MATCH_ERROR) + return MATCH_ERROR; + if (m == MATCH_NO) + goto syntax; + + tail->next = gfc_get_data_variable (); + tail = tail->next; + + *tail = var; + } + + if (gfc_match_char (')') != MATCH_YES) + goto syntax; + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_DATA); + return MATCH_ERROR; +} + + +/* Match a single element in a data variable list, which can be a + variable-iterator list. */ + +static match +var_element (gfc_data_variable *new_var) +{ + match m; + gfc_symbol *sym; + + memset (new_var, 0, sizeof (gfc_data_variable)); + + if (gfc_match_char ('(') == MATCH_YES) + return var_list (new_var); + + m = gfc_match_variable (&new_var->expr, 0); + if (m != MATCH_YES) + return m; + + sym = new_var->expr->symtree->n.sym; + + /* Symbol should already have an associated type. */ + if (gfc_check_symbol_typed (sym, gfc_current_ns, + false, gfc_current_locus) == FAILURE) + return MATCH_ERROR; + + if (!sym->attr.function && gfc_current_ns->parent + && gfc_current_ns->parent == sym->ns) + { + gfc_error ("Host associated variable '%s' may not be in the DATA " + "statement at %C", sym->name); + return MATCH_ERROR; + } + + if (gfc_current_state () != COMP_BLOCK_DATA + && sym->attr.in_common + && gfc_notify_std (GFC_STD_GNU, "Extension: initialization of " + "common block variable '%s' in DATA statement at %C", + sym->name) == FAILURE) + return MATCH_ERROR; + + if (gfc_add_data (&sym->attr, sym->name, &new_var->expr->where) == FAILURE) + return MATCH_ERROR; + + return MATCH_YES; +} + + +/* Match the top-level list of data variables. */ + +static match +top_var_list (gfc_data *d) +{ + gfc_data_variable var, *tail, *new_var; + match m; + + tail = NULL; + + for (;;) + { + m = var_element (&var); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + return MATCH_ERROR; + + new_var = gfc_get_data_variable (); + *new_var = var; + + if (tail == NULL) + d->var = new_var; + else + tail->next = new_var; + + tail = new_var; + + if (gfc_match_char ('/') == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_DATA); + gfc_free_data_all (gfc_current_ns); + return MATCH_ERROR; +} + + +static match +match_data_constant (gfc_expr **result) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_symbol *sym; + gfc_expr *expr; + match m; + locus old_loc; + + m = gfc_match_literal_constant (&expr, 1); + if (m == MATCH_YES) + { + *result = expr; + return MATCH_YES; + } + + if (m == MATCH_ERROR) + return MATCH_ERROR; + + m = gfc_match_null (result); + if (m != MATCH_NO) + return m; + + old_loc = gfc_current_locus; + + /* Should this be a structure component, try to match it + before matching a name. */ + m = gfc_match_rvalue (result); + if (m == MATCH_ERROR) + return m; + + if (m == MATCH_YES && (*result)->expr_type == EXPR_STRUCTURE) + { + if (gfc_simplify_expr (*result, 0) == FAILURE) + m = MATCH_ERROR; + return m; + } + + gfc_current_locus = old_loc; + + m = gfc_match_name (name); + if (m != MATCH_YES) + return m; + + if (gfc_find_symbol (name, NULL, 1, &sym)) + return MATCH_ERROR; + + if (sym == NULL + || (sym->attr.flavor != FL_PARAMETER && sym->attr.flavor != FL_DERIVED)) + { + gfc_error ("Symbol '%s' must be a PARAMETER in DATA statement at %C", + name); + return MATCH_ERROR; + } + else if (sym->attr.flavor == FL_DERIVED) + return gfc_match_structure_constructor (sym, result, false); + + /* Check to see if the value is an initialization array expression. */ + if (sym->value->expr_type == EXPR_ARRAY) + { + gfc_current_locus = old_loc; + + m = gfc_match_init_expr (result); + if (m == MATCH_ERROR) + return m; + + if (m == MATCH_YES) + { + if (gfc_simplify_expr (*result, 0) == FAILURE) + m = MATCH_ERROR; + + if ((*result)->expr_type == EXPR_CONSTANT) + return m; + else + { + gfc_error ("Invalid initializer %s in Data statement at %C", name); + return MATCH_ERROR; + } + } + } + + *result = gfc_copy_expr (sym->value); + return MATCH_YES; +} + + +/* Match a list of values in a DATA statement. The leading '/' has + already been seen at this point. */ + +static match +top_val_list (gfc_data *data) +{ + gfc_data_value *new_val, *tail; + gfc_expr *expr; + match m; + + tail = NULL; + + for (;;) + { + m = match_data_constant (&expr); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + return MATCH_ERROR; + + new_val = gfc_get_data_value (); + mpz_init (new_val->repeat); + + if (tail == NULL) + data->value = new_val; + else + tail->next = new_val; + + tail = new_val; + + if (expr->ts.type != BT_INTEGER || gfc_match_char ('*') != MATCH_YES) + { + tail->expr = expr; + mpz_set_ui (tail->repeat, 1); + } + else + { + if (expr->ts.type == BT_INTEGER) + mpz_set (tail->repeat, expr->value.integer); + gfc_free_expr (expr); + + m = match_data_constant (&tail->expr); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + return MATCH_ERROR; + } + + if (gfc_match_char ('/') == MATCH_YES) + break; + if (gfc_match_char (',') == MATCH_NO) + goto syntax; + } + + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_DATA); + gfc_free_data_all (gfc_current_ns); + return MATCH_ERROR; +} + + +/* Matches an old style initialization. */ + +static match +match_old_style_init (const char *name) +{ + match m; + gfc_symtree *st; + gfc_symbol *sym; + gfc_data *newdata; + + /* Set up data structure to hold initializers. */ + gfc_find_sym_tree (name, NULL, 0, &st); + sym = st->n.sym; + + newdata = gfc_get_data (); + newdata->var = gfc_get_data_variable (); + newdata->var->expr = gfc_get_variable_expr (st); + newdata->where = gfc_current_locus; + + /* Match initial value list. This also eats the terminal '/'. */ + m = top_val_list (newdata); + if (m != MATCH_YES) + { + gfc_free (newdata); + return m; + } + + if (gfc_pure (NULL)) + { + gfc_error ("Initialization at %C is not allowed in a PURE procedure"); + gfc_free (newdata); + return MATCH_ERROR; + } + + /* Mark the variable as having appeared in a data statement. */ + if (gfc_add_data (&sym->attr, sym->name, &sym->declared_at) == FAILURE) + { + gfc_free (newdata); + return MATCH_ERROR; + } + + /* Chain in namespace list of DATA initializers. */ + newdata->next = gfc_current_ns->data; + gfc_current_ns->data = newdata; + + return m; +} + + +/* Match the stuff following a DATA statement. If ERROR_FLAG is set, + we are matching a DATA statement and are therefore issuing an error + if we encounter something unexpected, if not, we're trying to match + an old-style initialization expression of the form INTEGER I /2/. */ + +match +gfc_match_data (void) +{ + gfc_data *new_data; + match m; + + set_in_match_data (true); + + for (;;) + { + new_data = gfc_get_data (); + new_data->where = gfc_current_locus; + + m = top_var_list (new_data); + if (m != MATCH_YES) + goto cleanup; + + m = top_val_list (new_data); + if (m != MATCH_YES) + goto cleanup; + + new_data->next = gfc_current_ns->data; + gfc_current_ns->data = new_data; + + if (gfc_match_eos () == MATCH_YES) + break; + + gfc_match_char (','); /* Optional comma */ + } + + set_in_match_data (false); + + if (gfc_pure (NULL)) + { + gfc_error ("DATA statement at %C is not allowed in a PURE procedure"); + return MATCH_ERROR; + } + + return MATCH_YES; + +cleanup: + set_in_match_data (false); + gfc_free_data (new_data); + return MATCH_ERROR; +} + + +/************************ Declaration statements *********************/ + +/* Match an intent specification. Since this can only happen after an + INTENT word, a legal intent-spec must follow. */ + +static sym_intent +match_intent_spec (void) +{ + + if (gfc_match (" ( in out )") == MATCH_YES) + return INTENT_INOUT; + if (gfc_match (" ( in )") == MATCH_YES) + return INTENT_IN; + if (gfc_match (" ( out )") == MATCH_YES) + return INTENT_OUT; + + gfc_error ("Bad INTENT specification at %C"); + return INTENT_UNKNOWN; +} + + +/* Matches a character length specification, which is either a + specification expression or a '*'. */ + +static match +char_len_param_value (gfc_expr **expr) +{ + match m; + + if (gfc_match_char ('*') == MATCH_YES) + { + *expr = NULL; + return MATCH_YES; + } + + m = gfc_match_expr (expr); + + if (m == MATCH_YES + && gfc_expr_check_typed (*expr, gfc_current_ns, false) == FAILURE) + return MATCH_ERROR; + + if (m == MATCH_YES && (*expr)->expr_type == EXPR_FUNCTION) + { + if ((*expr)->value.function.actual + && (*expr)->value.function.actual->expr->symtree) + { + gfc_expr *e; + e = (*expr)->value.function.actual->expr; + if (e->symtree->n.sym->attr.flavor == FL_PROCEDURE + && e->expr_type == EXPR_VARIABLE) + { + if (e->symtree->n.sym->ts.type == BT_UNKNOWN) + goto syntax; + if (e->symtree->n.sym->ts.type == BT_CHARACTER + && e->symtree->n.sym->ts.cl + && e->symtree->n.sym->ts.cl->length->ts.type == BT_UNKNOWN) + goto syntax; + } + } + } + return m; + +syntax: + gfc_error ("Conflict in attributes of function argument at %C"); + return MATCH_ERROR; +} + + +/* A character length is a '*' followed by a literal integer or a + char_len_param_value in parenthesis. */ + +static match +match_char_length (gfc_expr **expr) +{ + int length; + match m; + + m = gfc_match_char ('*'); + if (m != MATCH_YES) + return m; + + m = gfc_match_small_literal_int (&length, NULL); + if (m == MATCH_ERROR) + return m; + + if (m == MATCH_YES) + { + *expr = gfc_int_expr (length); + return m; + } + + if (gfc_match_char ('(') == MATCH_NO) + goto syntax; + + m = char_len_param_value (expr); + if (m != MATCH_YES && gfc_matching_function) + { + gfc_undo_symbols (); + m = MATCH_YES; + } + + if (m == MATCH_ERROR) + return m; + if (m == MATCH_NO) + goto syntax; + + if (gfc_match_char (')') == MATCH_NO) + { + gfc_free_expr (*expr); + *expr = NULL; + goto syntax; + } + + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in character length specification at %C"); + return MATCH_ERROR; +} + + +/* Special subroutine for finding a symbol. Check if the name is found + in the current name space. If not, and we're compiling a function or + subroutine and the parent compilation unit is an interface, then check + to see if the name we've been given is the name of the interface + (located in another namespace). */ + +static int +find_special (const char *name, gfc_symbol **result) +{ + gfc_state_data *s; + int i; + + i = gfc_get_symbol (name, NULL, result); + if (i == 0) + goto end; + + if (gfc_current_state () != COMP_SUBROUTINE + && gfc_current_state () != COMP_FUNCTION) + goto end; + + s = gfc_state_stack->previous; + if (s == NULL) + goto end; + + if (s->state != COMP_INTERFACE) + goto end; + if (s->sym == NULL) + goto end; /* Nameless interface. */ + + if (strcmp (name, s->sym->name) == 0) + { + *result = s->sym; + return 0; + } + +end: + return i; +} + + +/* Special subroutine for getting a symbol node associated with a + procedure name, used in SUBROUTINE and FUNCTION statements. The + symbol is created in the parent using with symtree node in the + child unit pointing to the symbol. If the current namespace has no + parent, then the symbol is just created in the current unit. */ + +static int +get_proc_name (const char *name, gfc_symbol **result, bool module_fcn_entry) +{ + gfc_symtree *st; + gfc_symbol *sym; + int rc = 0; + + /* Module functions have to be left in their own namespace because + they have potentially (almost certainly!) already been referenced. + In this sense, they are rather like external functions. This is + fixed up in resolve.c(resolve_entries), where the symbol name- + space is set to point to the master function, so that the fake + result mechanism can work. */ + if (module_fcn_entry) + { + /* Present if entry is declared to be a module procedure. */ + rc = gfc_find_symbol (name, gfc_current_ns->parent, 0, result); + + if (*result == NULL) + rc = gfc_get_symbol (name, NULL, result); + else if (!gfc_get_symbol (name, NULL, &sym) && sym + && (*result)->ts.type == BT_UNKNOWN + && sym->attr.flavor == FL_UNKNOWN) + /* Pick up the typespec for the entry, if declared in the function + body. Note that this symbol is FL_UNKNOWN because it will + only have appeared in a type declaration. The local symtree + is set to point to the module symbol and a unique symtree + to the local version. This latter ensures a correct clearing + of the symbols. */ + { + /* If the ENTRY proceeds its specification, we need to ensure + that this does not raise a "has no IMPLICIT type" error. */ + if (sym->ts.type == BT_UNKNOWN) + sym->attr.untyped = 1; + + (*result)->ts = sym->ts; + + /* Put the symbol in the procedure namespace so that, should + the ENTRY precede its specification, the specification + can be applied. */ + (*result)->ns = gfc_current_ns; + + gfc_find_sym_tree (name, gfc_current_ns, 0, &st); + st->n.sym = *result; + st = gfc_get_unique_symtree (gfc_current_ns); + st->n.sym = sym; + } + } + else + rc = gfc_get_symbol (name, gfc_current_ns->parent, result); + + if (rc) + return rc; + + sym = *result; + gfc_current_ns->refs++; + + if (sym && !sym->gfc_new && gfc_current_state () != COMP_INTERFACE) + { + /* Trap another encompassed procedure with the same name. All + these conditions are necessary to avoid picking up an entry + whose name clashes with that of the encompassing procedure; + this is handled using gsymbols to register unique,globally + accessible names. */ + if (sym->attr.flavor != 0 + && sym->attr.proc != 0 + && (sym->attr.subroutine || sym->attr.function) + && sym->attr.if_source != IFSRC_UNKNOWN) + gfc_error_now ("Procedure '%s' at %C is already defined at %L", + name, &sym->declared_at); + + /* Trap a procedure with a name the same as interface in the + encompassing scope. */ + if (sym->attr.generic != 0 + && (sym->attr.subroutine || sym->attr.function) + && !sym->attr.mod_proc) + gfc_error_now ("Name '%s' at %C is already defined" + " as a generic interface at %L", + name, &sym->declared_at); + + /* Trap declarations of attributes in encompassing scope. The + signature for this is that ts.kind is set. Legitimate + references only set ts.type. */ + if (sym->ts.kind != 0 + && !sym->attr.implicit_type + && sym->attr.proc == 0 + && gfc_current_ns->parent != NULL + && sym->attr.access == 0 + && !module_fcn_entry) + gfc_error_now ("Procedure '%s' at %C has an explicit interface " + "and must not have attributes declared at %L", + name, &sym->declared_at); + } + + if (gfc_current_ns->parent == NULL || *result == NULL) + return rc; + + /* Module function entries will already have a symtree in + the current namespace but will need one at module level. */ + if (module_fcn_entry) + { + /* Present if entry is declared to be a module procedure. */ + rc = gfc_find_sym_tree (name, gfc_current_ns->parent, 0, &st); + if (st == NULL) + st = gfc_new_symtree (&gfc_current_ns->parent->sym_root, name); + } + else + st = gfc_new_symtree (&gfc_current_ns->sym_root, name); + + st->n.sym = sym; + sym->refs++; + + /* See if the procedure should be a module procedure. */ + + if (((sym->ns->proc_name != NULL + && sym->ns->proc_name->attr.flavor == FL_MODULE + && sym->attr.proc != PROC_MODULE) + || (module_fcn_entry && sym->attr.proc != PROC_MODULE)) + && gfc_add_procedure (&sym->attr, PROC_MODULE, + sym->name, NULL) == FAILURE) + rc = 2; + + return rc; +} + + +/* Verify that the given symbol representing a parameter is C + interoperable, by checking to see if it was marked as such after + its declaration. If the given symbol is not interoperable, a + warning is reported, thus removing the need to return the status to + the calling function. The standard does not require the user use + one of the iso_c_binding named constants to declare an + interoperable parameter, but we can't be sure if the param is C + interop or not if the user doesn't. For example, integer(4) may be + legal Fortran, but doesn't have meaning in C. It may interop with + a number of the C types, which causes a problem because the + compiler can't know which one. This code is almost certainly not + portable, and the user will get what they deserve if the C type + across platforms isn't always interoperable with integer(4). If + the user had used something like integer(c_int) or integer(c_long), + the compiler could have automatically handled the varying sizes + across platforms. */ + +gfc_try +verify_c_interop_param (gfc_symbol *sym) +{ + int is_c_interop = 0; + gfc_try retval = SUCCESS; + + /* We check implicitly typed variables in symbol.c:gfc_set_default_type(). + Don't repeat the checks here. */ + if (sym->attr.implicit_type) + return SUCCESS; + + /* For subroutines or functions that are passed to a BIND(C) procedure, + they're interoperable if they're BIND(C) and their params are all + interoperable. */ + if (sym->attr.flavor == FL_PROCEDURE) + { + if (sym->attr.is_bind_c == 0) + { + gfc_error_now ("Procedure '%s' at %L must have the BIND(C) " + "attribute to be C interoperable", sym->name, + &(sym->declared_at)); + + return FAILURE; + } + else + { + if (sym->attr.is_c_interop == 1) + /* We've already checked this procedure; don't check it again. */ + return SUCCESS; + else + return verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common, + sym->common_block); + } + } + + /* See if we've stored a reference to a procedure that owns sym. */ + if (sym->ns != NULL && sym->ns->proc_name != NULL) + { + if (sym->ns->proc_name->attr.is_bind_c == 1) + { + is_c_interop = + (verify_c_interop (&(sym->ts)) + == SUCCESS ? 1 : 0); + + if (is_c_interop != 1) + { + /* Make personalized messages to give better feedback. */ + if (sym->ts.type == BT_DERIVED) + gfc_error ("Type '%s' at %L is a parameter to the BIND(C) " + " procedure '%s' but is not C interoperable " + "because derived type '%s' is not C interoperable", + sym->name, &(sym->declared_at), + sym->ns->proc_name->name, + sym->ts.derived->name); + else + gfc_warning ("Variable '%s' at %L is a parameter to the " + "BIND(C) procedure '%s' but may not be C " + "interoperable", + sym->name, &(sym->declared_at), + sym->ns->proc_name->name); + } + + /* Character strings are only C interoperable if they have a + length of 1. */ + if (sym->ts.type == BT_CHARACTER) + { + gfc_charlen *cl = sym->ts.cl; + if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT + || mpz_cmp_si (cl->length->value.integer, 1) != 0) + { + gfc_error ("Character argument '%s' at %L " + "must be length 1 because " + "procedure '%s' is BIND(C)", + sym->name, &sym->declared_at, + sym->ns->proc_name->name); + retval = FAILURE; + } + } + + /* We have to make sure that any param to a bind(c) routine does + not have the allocatable, pointer, or optional attributes, + according to J3/04-007, section 5.1. */ + if (sym->attr.allocatable == 1) + { + gfc_error ("Variable '%s' at %L cannot have the " + "ALLOCATABLE attribute because procedure '%s'" + " is BIND(C)", sym->name, &(sym->declared_at), + sym->ns->proc_name->name); + retval = FAILURE; + } + + if (sym->attr.pointer == 1) + { + gfc_error ("Variable '%s' at %L cannot have the " + "POINTER attribute because procedure '%s'" + " is BIND(C)", sym->name, &(sym->declared_at), + sym->ns->proc_name->name); + retval = FAILURE; + } + + if (sym->attr.optional == 1) + { + gfc_error ("Variable '%s' at %L cannot have the " + "OPTIONAL attribute because procedure '%s'" + " is BIND(C)", sym->name, &(sym->declared_at), + sym->ns->proc_name->name); + retval = FAILURE; + } + + /* Make sure that if it has the dimension attribute, that it is + either assumed size or explicit shape. */ + if (sym->as != NULL) + { + if (sym->as->type == AS_ASSUMED_SHAPE) + { + gfc_error ("Assumed-shape array '%s' at %L cannot be an " + "argument to the procedure '%s' at %L because " + "the procedure is BIND(C)", sym->name, + &(sym->declared_at), sym->ns->proc_name->name, + &(sym->ns->proc_name->declared_at)); + retval = FAILURE; + } + + if (sym->as->type == AS_DEFERRED) + { + gfc_error ("Deferred-shape array '%s' at %L cannot be an " + "argument to the procedure '%s' at %L because " + "the procedure is BIND(C)", sym->name, + &(sym->declared_at), sym->ns->proc_name->name, + &(sym->ns->proc_name->declared_at)); + retval = FAILURE; + } + } + } + } + + return retval; +} + + +/* Function called by variable_decl() that adds a name to the symbol table. */ + +static gfc_try +build_sym (const char *name, gfc_charlen *cl, + gfc_array_spec **as, locus *var_locus) +{ + symbol_attribute attr; + gfc_symbol *sym; + + if (gfc_get_symbol (name, NULL, &sym)) + return FAILURE; + + /* Start updating the symbol table. Add basic type attribute if present. */ + if (current_ts.type != BT_UNKNOWN + && (sym->attr.implicit_type == 0 + || !gfc_compare_types (&sym->ts, ¤t_ts)) + && gfc_add_type (sym, ¤t_ts, var_locus) == FAILURE) + return FAILURE; + + if (sym->ts.type == BT_CHARACTER) + sym->ts.cl = cl; + + /* Add dimension attribute if present. */ + if (gfc_set_array_spec (sym, *as, var_locus) == FAILURE) + return FAILURE; + *as = NULL; + + /* Add attribute to symbol. The copy is so that we can reset the + dimension attribute. */ + attr = current_attr; + attr.dimension = 0; + + if (gfc_copy_attr (&sym->attr, &attr, var_locus) == FAILURE) + return FAILURE; + + /* Finish any work that may need to be done for the binding label, + if it's a bind(c). The bind(c) attr is found before the symbol + is made, and before the symbol name (for data decls), so the + current_ts is holding the binding label, or nothing if the + name= attr wasn't given. Therefore, test here if we're dealing + with a bind(c) and make sure the binding label is set correctly. */ + if (sym->attr.is_bind_c == 1) + { + if (sym->binding_label[0] == '\0') + { + /* Set the binding label and verify that if a NAME= was specified + then only one identifier was in the entity-decl-list. */ + if (set_binding_label (sym->binding_label, sym->name, + num_idents_on_line) == FAILURE) + return FAILURE; + } + } + + /* See if we know we're in a common block, and if it's a bind(c) + common then we need to make sure we're an interoperable type. */ + if (sym->attr.in_common == 1) + { + /* Test the common block object. */ + if (sym->common_block != NULL && sym->common_block->is_bind_c == 1 + && sym->ts.is_c_interop != 1) + { + gfc_error_now ("Variable '%s' in common block '%s' at %C " + "must be declared with a C interoperable " + "kind since common block '%s' is BIND(C)", + sym->name, sym->common_block->name, + sym->common_block->name); + gfc_clear_error (); + } + } + + sym->attr.implied_index = 0; + + return SUCCESS; +} + + +/* Set character constant to the given length. The constant will be padded or + truncated. If we're inside an array constructor without a typespec, we + additionally check that all elements have the same length; check_len -1 + means no checking. */ + +void +gfc_set_constant_character_len (int len, gfc_expr *expr, int check_len) +{ + gfc_char_t *s; + int slen; + + gcc_assert (expr->expr_type == EXPR_CONSTANT); + gcc_assert (expr->ts.type == BT_CHARACTER); + + slen = expr->value.character.length; + if (len != slen) + { + s = gfc_get_wide_string (len + 1); + memcpy (s, expr->value.character.string, + MIN (len, slen) * sizeof (gfc_char_t)); + if (len > slen) + gfc_wide_memset (&s[slen], ' ', len - slen); + + if (gfc_option.warn_character_truncation && slen > len) + gfc_warning_now ("CHARACTER expression at %L is being truncated " + "(%d/%d)", &expr->where, slen, len); + + /* Apply the standard by 'hand' otherwise it gets cleared for + initializers. */ + if (check_len != -1 && slen != check_len + && !(gfc_option.allow_std & GFC_STD_GNU)) + gfc_error_now ("The CHARACTER elements of the array constructor " + "at %L must have the same length (%d/%d)", + &expr->where, slen, check_len); + + s[len] = '\0'; + gfc_free (expr->value.character.string); + expr->value.character.string = s; + expr->value.character.length = len; + } +} + + +/* Function to create and update the enumerator history + using the information passed as arguments. + Pointer "max_enum" is also updated, to point to + enum history node containing largest initializer. + + SYM points to the symbol node of enumerator. + INIT points to its enumerator value. */ + +static void +create_enum_history (gfc_symbol *sym, gfc_expr *init) +{ + enumerator_history *new_enum_history; + gcc_assert (sym != NULL && init != NULL); + + new_enum_history = XCNEW (enumerator_history); + + new_enum_history->sym = sym; + new_enum_history->initializer = init; + new_enum_history->next = NULL; + + if (enum_history == NULL) + { + enum_history = new_enum_history; + max_enum = enum_history; + } + else + { + new_enum_history->next = enum_history; + enum_history = new_enum_history; + + if (mpz_cmp (max_enum->initializer->value.integer, + new_enum_history->initializer->value.integer) < 0) + max_enum = new_enum_history; + } +} + + +/* Function to free enum kind history. */ + +void +gfc_free_enum_history (void) +{ + enumerator_history *current = enum_history; + enumerator_history *next; + + while (current != NULL) + { + next = current->next; + gfc_free (current); + current = next; + } + max_enum = NULL; + enum_history = NULL; +} + + +/* Function called by variable_decl() that adds an initialization + expression to a symbol. */ + +static gfc_try +add_init_expr_to_sym (const char *name, gfc_expr **initp, locus *var_locus) +{ + symbol_attribute attr; + gfc_symbol *sym; + gfc_expr *init; + + init = *initp; + if (find_special (name, &sym)) + return FAILURE; + + attr = sym->attr; + + /* If this symbol is confirming an implicit parameter type, + then an initialization expression is not allowed. */ + if (attr.flavor == FL_PARAMETER + && sym->value != NULL + && *initp != NULL) + { + gfc_error ("Initializer not allowed for PARAMETER '%s' at %C", + sym->name); + return FAILURE; + } + + if (init == NULL) + { + /* An initializer is required for PARAMETER declarations. */ + if (attr.flavor == FL_PARAMETER) + { + gfc_error ("PARAMETER at %L is missing an initializer", var_locus); + return FAILURE; + } + } + else + { + /* If a variable appears in a DATA block, it cannot have an + initializer. */ + if (sym->attr.data) + { + gfc_error ("Variable '%s' at %C with an initializer already " + "appears in a DATA statement", sym->name); + return FAILURE; + } + + /* Check if the assignment can happen. This has to be put off + until later for a derived type variable. */ + if (sym->ts.type != BT_DERIVED && init->ts.type != BT_DERIVED + && gfc_check_assign_symbol (sym, init) == FAILURE) + return FAILURE; + + if (sym->ts.type == BT_CHARACTER && sym->ts.cl) + { + /* Update symbol character length according initializer. */ + if (sym->ts.cl->length == NULL) + { + int clen; + /* If there are multiple CHARACTER variables declared on the + same line, we don't want them to share the same length. */ + sym->ts.cl = gfc_get_charlen (); + sym->ts.cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = sym->ts.cl; + + if (sym->attr.flavor == FL_PARAMETER) + { + if (init->expr_type == EXPR_CONSTANT) + { + clen = init->value.character.length; + sym->ts.cl->length = gfc_int_expr (clen); + } + else if (init->expr_type == EXPR_ARRAY) + { + gfc_expr *p = init->value.constructor->expr; + clen = p->value.character.length; + sym->ts.cl->length = gfc_int_expr (clen); + } + else if (init->ts.cl && init->ts.cl->length) + sym->ts.cl->length = + gfc_copy_expr (sym->value->ts.cl->length); + } + } + /* Update initializer character length according symbol. */ + else if (sym->ts.cl->length->expr_type == EXPR_CONSTANT) + { + int len = mpz_get_si (sym->ts.cl->length->value.integer); + gfc_constructor * p; + + if (init->expr_type == EXPR_CONSTANT) + gfc_set_constant_character_len (len, init, -1); + else if (init->expr_type == EXPR_ARRAY) + { + /* Build a new charlen to prevent simplification from + deleting the length before it is resolved. */ + init->ts.cl = gfc_get_charlen (); + init->ts.cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = sym->ts.cl; + init->ts.cl->length = gfc_copy_expr (sym->ts.cl->length); + + for (p = init->value.constructor; p; p = p->next) + gfc_set_constant_character_len (len, p->expr, -1); + } + } + } + + /* Need to check if the expression we initialized this + to was one of the iso_c_binding named constants. If so, + and we're a parameter (constant), let it be iso_c. + For example: + integer(c_int), parameter :: my_int = c_int + integer(my_int) :: my_int_2 + If we mark my_int as iso_c (since we can see it's value + is equal to one of the named constants), then my_int_2 + will be considered C interoperable. */ + if (sym->ts.type != BT_CHARACTER && sym->ts.type != BT_DERIVED) + { + sym->ts.is_iso_c |= init->ts.is_iso_c; + sym->ts.is_c_interop |= init->ts.is_c_interop; + /* attr bits needed for module files. */ + sym->attr.is_iso_c |= init->ts.is_iso_c; + sym->attr.is_c_interop |= init->ts.is_c_interop; + if (init->ts.is_iso_c) + sym->ts.f90_type = init->ts.f90_type; + } + + /* Add initializer. Make sure we keep the ranks sane. */ + if (sym->attr.dimension && init->rank == 0) + { + mpz_t size; + gfc_expr *array; + gfc_constructor *c; + int n; + if (sym->attr.flavor == FL_PARAMETER + && init->expr_type == EXPR_CONSTANT + && spec_size (sym->as, &size) == SUCCESS + && mpz_cmp_si (size, 0) > 0) + { + array = gfc_start_constructor (init->ts.type, init->ts.kind, + &init->where); + + array->value.constructor = c = NULL; + for (n = 0; n < (int)mpz_get_si (size); n++) + { + if (array->value.constructor == NULL) + { + array->value.constructor = c = gfc_get_constructor (); + c->expr = init; + } + else + { + c->next = gfc_get_constructor (); + c = c->next; + c->expr = gfc_copy_expr (init); + } + } + + array->shape = gfc_get_shape (sym->as->rank); + for (n = 0; n < sym->as->rank; n++) + spec_dimen_size (sym->as, n, &array->shape[n]); + + init = array; + mpz_clear (size); + } + init->rank = sym->as->rank; + } + + sym->value = init; + if (sym->attr.save == SAVE_NONE) + sym->attr.save = SAVE_IMPLICIT; + *initp = NULL; + } + + return SUCCESS; +} + + +/* Function called by variable_decl() that adds a name to a structure + being built. */ + +static gfc_try +build_struct (const char *name, gfc_charlen *cl, gfc_expr **init, + gfc_array_spec **as) +{ + gfc_component *c; + + /* If the current symbol is of the same derived type that we're + constructing, it must have the pointer attribute. */ + if (current_ts.type == BT_DERIVED + && current_ts.derived == gfc_current_block () + && current_attr.pointer == 0) + { + gfc_error ("Component at %C must have the POINTER attribute"); + return FAILURE; + } + + if (gfc_current_block ()->attr.pointer && (*as)->rank != 0) + { + if ((*as)->type != AS_DEFERRED && (*as)->type != AS_EXPLICIT) + { + gfc_error ("Array component of structure at %C must have explicit " + "or deferred shape"); + return FAILURE; + } + } + + if (gfc_add_component (gfc_current_block (), name, &c) == FAILURE) + return FAILURE; + + c->ts = current_ts; + c->ts.cl = cl; + c->attr = current_attr; + + c->initializer = *init; + *init = NULL; + + c->as = *as; + if (c->as != NULL) + c->attr.dimension = 1; + *as = NULL; + + /* Should this ever get more complicated, combine with similar section + in add_init_expr_to_sym into a separate function. */ + if (c->ts.type == BT_CHARACTER && !c->attr.pointer && c->initializer && c->ts.cl + && c->ts.cl->length && c->ts.cl->length->expr_type == EXPR_CONSTANT) + { + int len; + + gcc_assert (c->ts.cl && c->ts.cl->length); + gcc_assert (c->ts.cl->length->expr_type == EXPR_CONSTANT); + gcc_assert (c->ts.cl->length->ts.type == BT_INTEGER); + + len = mpz_get_si (c->ts.cl->length->value.integer); + + if (c->initializer->expr_type == EXPR_CONSTANT) + gfc_set_constant_character_len (len, c->initializer, -1); + else if (mpz_cmp (c->ts.cl->length->value.integer, + c->initializer->ts.cl->length->value.integer)) + { + bool has_ts; + gfc_constructor *ctor = c->initializer->value.constructor; + + bool first = true; + int first_len; + + has_ts = (c->initializer->ts.cl + && c->initializer->ts.cl->length_from_typespec); + + for (; ctor; ctor = ctor->next) + { + /* Remember the length of the first element for checking that + all elements *in the constructor* have the same length. This + need not be the length of the LHS! */ + if (first) + { + gcc_assert (ctor->expr->expr_type == EXPR_CONSTANT); + gcc_assert (ctor->expr->ts.type == BT_CHARACTER); + first_len = ctor->expr->value.character.length; + first = false; + } + + if (ctor->expr->expr_type == EXPR_CONSTANT) + gfc_set_constant_character_len (len, ctor->expr, + has_ts ? -1 : first_len); + } + } + } + + /* Check array components. */ + if (!c->attr.dimension) + { + if (c->attr.allocatable) + { + gfc_error ("Allocatable component at %C must be an array"); + return FAILURE; + } + else + return SUCCESS; + } + + if (c->attr.pointer) + { + if (c->as->type != AS_DEFERRED) + { + gfc_error ("Pointer array component of structure at %C must have a " + "deferred shape"); + return FAILURE; + } + } + else if (c->attr.allocatable) + { + if (c->as->type != AS_DEFERRED) + { + gfc_error ("Allocatable component of structure at %C must have a " + "deferred shape"); + return FAILURE; + } + } + else + { + if (c->as->type != AS_EXPLICIT) + { + gfc_error ("Array component of structure at %C must have an " + "explicit shape"); + return FAILURE; + } + } + + return SUCCESS; +} + + +/* Match a 'NULL()', and possibly take care of some side effects. */ + +match +gfc_match_null (gfc_expr **result) +{ + gfc_symbol *sym; + gfc_expr *e; + match m; + + m = gfc_match (" null ( )"); + if (m != MATCH_YES) + return m; + + /* The NULL symbol now has to be/become an intrinsic function. */ + if (gfc_get_symbol ("null", NULL, &sym)) + { + gfc_error ("NULL() initialization at %C is ambiguous"); + return MATCH_ERROR; + } + + gfc_intrinsic_symbol (sym); + + if (sym->attr.proc != PROC_INTRINSIC + && (gfc_add_procedure (&sym->attr, PROC_INTRINSIC, + sym->name, NULL) == FAILURE + || gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)) + return MATCH_ERROR; + + e = gfc_get_expr (); + e->where = gfc_current_locus; + e->expr_type = EXPR_NULL; + e->ts.type = BT_UNKNOWN; + + *result = e; + + return MATCH_YES; +} + + +/* Match a variable name with an optional initializer. When this + subroutine is called, a variable is expected to be parsed next. + Depending on what is happening at the moment, updates either the + symbol table or the current interface. */ + +static match +variable_decl (int elem) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_expr *initializer, *char_len; + gfc_array_spec *as; + gfc_array_spec *cp_as; /* Extra copy for Cray Pointees. */ + gfc_charlen *cl; + locus var_locus; + match m; + gfc_try t; + gfc_symbol *sym; + locus old_locus; + + initializer = NULL; + as = NULL; + cp_as = NULL; + old_locus = gfc_current_locus; + + /* When we get here, we've just matched a list of attributes and + maybe a type and a double colon. The next thing we expect to see + is the name of the symbol. */ + m = gfc_match_name (name); + if (m != MATCH_YES) + goto cleanup; + + var_locus = gfc_current_locus; + + /* Now we could see the optional array spec. or character length. */ + m = gfc_match_array_spec (&as); + if (gfc_option.flag_cray_pointer && m == MATCH_YES) + cp_as = gfc_copy_array_spec (as); + else if (m == MATCH_ERROR) + goto cleanup; + + if (m == MATCH_NO) + as = gfc_copy_array_spec (current_as); + + char_len = NULL; + cl = NULL; + + if (current_ts.type == BT_CHARACTER) + { + switch (match_char_length (&char_len)) + { + case MATCH_YES: + cl = gfc_get_charlen (); + cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = cl; + + cl->length = char_len; + break; + + /* Non-constant lengths need to be copied after the first + element. Also copy assumed lengths. */ + case MATCH_NO: + if (elem > 1 + && (current_ts.cl->length == NULL + || current_ts.cl->length->expr_type != EXPR_CONSTANT)) + { + cl = gfc_get_charlen (); + cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = cl; + cl->length = gfc_copy_expr (current_ts.cl->length); + } + else + cl = current_ts.cl; + + break; + + case MATCH_ERROR: + goto cleanup; + } + } + + /* If this symbol has already shown up in a Cray Pointer declaration, + then we want to set the type & bail out. */ + if (gfc_option.flag_cray_pointer) + { + gfc_find_symbol (name, gfc_current_ns, 1, &sym); + if (sym != NULL && sym->attr.cray_pointee) + { + sym->ts.type = current_ts.type; + sym->ts.kind = current_ts.kind; + sym->ts.cl = cl; + sym->ts.derived = current_ts.derived; + sym->ts.is_c_interop = current_ts.is_c_interop; + sym->ts.is_iso_c = current_ts.is_iso_c; + m = MATCH_YES; + + /* Check to see if we have an array specification. */ + if (cp_as != NULL) + { + if (sym->as != NULL) + { + gfc_error ("Duplicate array spec for Cray pointee at %C"); + gfc_free_array_spec (cp_as); + m = MATCH_ERROR; + goto cleanup; + } + else + { + if (gfc_set_array_spec (sym, cp_as, &var_locus) == FAILURE) + gfc_internal_error ("Couldn't set pointee array spec."); + + /* Fix the array spec. */ + m = gfc_mod_pointee_as (sym->as); + if (m == MATCH_ERROR) + goto cleanup; + } + } + goto cleanup; + } + else + { + gfc_free_array_spec (cp_as); + } + } + + + /* OK, we've successfully matched the declaration. Now put the + symbol in the current namespace, because it might be used in the + optional initialization expression for this symbol, e.g. this is + perfectly legal: + + integer, parameter :: i = huge(i) + + This is only true for parameters or variables of a basic type. + For components of derived types, it is not true, so we don't + create a symbol for those yet. If we fail to create the symbol, + bail out. */ + if (gfc_current_state () != COMP_DERIVED + && build_sym (name, cl, &as, &var_locus) == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + + /* An interface body specifies all of the procedure's + characteristics and these shall be consistent with those + specified in the procedure definition, except that the interface + may specify a procedure that is not pure if the procedure is + defined to be pure(12.3.2). */ + if (current_ts.type == BT_DERIVED + && gfc_current_ns->proc_name + && gfc_current_ns->proc_name->attr.if_source == IFSRC_IFBODY + && current_ts.derived->ns != gfc_current_ns) + { + gfc_symtree *st; + st = gfc_find_symtree (gfc_current_ns->sym_root, current_ts.derived->name); + if (!(current_ts.derived->attr.imported + && st != NULL + && st->n.sym == current_ts.derived) + && !gfc_current_ns->has_import_set) + { + gfc_error ("the type of '%s' at %C has not been declared within the " + "interface", name); + m = MATCH_ERROR; + goto cleanup; + } + } + + /* In functions that have a RESULT variable defined, the function + name always refers to function calls. Therefore, the name is + not allowed to appear in specification statements. */ + if (gfc_current_state () == COMP_FUNCTION + && gfc_current_block () != NULL + && gfc_current_block ()->result != NULL + && gfc_current_block ()->result != gfc_current_block () + && strcmp (gfc_current_block ()->name, name) == 0) + { + gfc_error ("Function name '%s' not allowed at %C", name); + m = MATCH_ERROR; + goto cleanup; + } + + /* We allow old-style initializations of the form + integer i /2/, j(4) /3*3, 1/ + (if no colon has been seen). These are different from data + statements in that initializers are only allowed to apply to the + variable immediately preceding, i.e. + integer i, j /1, 2/ + is not allowed. Therefore we have to do some work manually, that + could otherwise be left to the matchers for DATA statements. */ + + if (!colon_seen && gfc_match (" /") == MATCH_YES) + { + if (gfc_notify_std (GFC_STD_GNU, "Extension: Old-style " + "initialization at %C") == FAILURE) + return MATCH_ERROR; + + return match_old_style_init (name); + } + + /* The double colon must be present in order to have initializers. + Otherwise the statement is ambiguous with an assignment statement. */ + if (colon_seen) + { + if (gfc_match (" =>") == MATCH_YES) + { + if (!current_attr.pointer) + { + gfc_error ("Initialization at %C isn't for a pointer variable"); + m = MATCH_ERROR; + goto cleanup; + } + + m = gfc_match_null (&initializer); + if (m == MATCH_NO) + { + gfc_error ("Pointer initialization requires a NULL() at %C"); + m = MATCH_ERROR; + } + + if (gfc_pure (NULL)) + { + gfc_error ("Initialization of pointer at %C is not allowed in " + "a PURE procedure"); + m = MATCH_ERROR; + } + + if (m != MATCH_YES) + goto cleanup; + + } + else if (gfc_match_char ('=') == MATCH_YES) + { + if (current_attr.pointer) + { + gfc_error ("Pointer initialization at %C requires '=>', " + "not '='"); + m = MATCH_ERROR; + goto cleanup; + } + + m = gfc_match_init_expr (&initializer); + if (m == MATCH_NO) + { + gfc_error ("Expected an initialization expression at %C"); + m = MATCH_ERROR; + } + + if (current_attr.flavor != FL_PARAMETER && gfc_pure (NULL)) + { + gfc_error ("Initialization of variable at %C is not allowed in " + "a PURE procedure"); + m = MATCH_ERROR; + } + + if (m != MATCH_YES) + goto cleanup; + } + } + + if (initializer != NULL && current_attr.allocatable + && gfc_current_state () == COMP_DERIVED) + { + gfc_error ("Initialization of allocatable component at %C is not " + "allowed"); + m = MATCH_ERROR; + goto cleanup; + } + + /* Add the initializer. Note that it is fine if initializer is + NULL here, because we sometimes also need to check if a + declaration *must* have an initialization expression. */ + if (gfc_current_state () != COMP_DERIVED) + t = add_init_expr_to_sym (name, &initializer, &var_locus); + else + { + if (current_ts.type == BT_DERIVED + && !current_attr.pointer && !initializer) + initializer = gfc_default_initializer (¤t_ts); + t = build_struct (name, cl, &initializer, &as); + } + + m = (t == SUCCESS) ? MATCH_YES : MATCH_ERROR; + +cleanup: + /* Free stuff up and return. */ + gfc_free_expr (initializer); + gfc_free_array_spec (as); + + return m; +} + + +/* Match an extended-f77 "TYPESPEC*bytesize"-style kind specification. + This assumes that the byte size is equal to the kind number for + non-COMPLEX types, and equal to twice the kind number for COMPLEX. */ + +match +gfc_match_old_kind_spec (gfc_typespec *ts) +{ + match m; + int original_kind; + + if (gfc_match_char ('*') != MATCH_YES) + return MATCH_NO; + + m = gfc_match_small_literal_int (&ts->kind, NULL); + if (m != MATCH_YES) + return MATCH_ERROR; + + original_kind = ts->kind; + + /* Massage the kind numbers for complex types. */ + if (ts->type == BT_COMPLEX) + { + if (ts->kind % 2) + { + gfc_error ("Old-style type declaration %s*%d not supported at %C", + gfc_basic_typename (ts->type), original_kind); + return MATCH_ERROR; + } + ts->kind /= 2; + } + + if (gfc_validate_kind (ts->type, ts->kind, true) < 0) + { + gfc_error ("Old-style type declaration %s*%d not supported at %C", + gfc_basic_typename (ts->type), original_kind); + return MATCH_ERROR; + } + + if (gfc_notify_std (GFC_STD_GNU, "Nonstandard type declaration %s*%d at %C", + gfc_basic_typename (ts->type), original_kind) == FAILURE) + return MATCH_ERROR; + + return MATCH_YES; +} + + +/* Match a kind specification. Since kinds are generally optional, we + usually return MATCH_NO if something goes wrong. If a "kind=" + string is found, then we know we have an error. */ + +match +gfc_match_kind_spec (gfc_typespec *ts, bool kind_expr_only) +{ + locus where, loc; + gfc_expr *e; + match m, n; + char c; + const char *msg; + + m = MATCH_NO; + n = MATCH_YES; + e = NULL; + + where = loc = gfc_current_locus; + + if (kind_expr_only) + goto kind_expr; + + if (gfc_match_char ('(') == MATCH_NO) + return MATCH_NO; + + /* Also gobbles optional text. */ + if (gfc_match (" kind = ") == MATCH_YES) + m = MATCH_ERROR; + + loc = gfc_current_locus; + +kind_expr: + n = gfc_match_init_expr (&e); + + if (n != MATCH_YES) + { + if (gfc_matching_function) + { + /* The function kind expression might include use associated or + imported parameters and try again after the specification + expressions..... */ + if (gfc_match_char (')') != MATCH_YES) + { + gfc_error ("Missing right parenthesis at %C"); + m = MATCH_ERROR; + goto no_match; + } + + gfc_free_expr (e); + gfc_undo_symbols (); + return MATCH_YES; + } + else + { + /* ....or else, the match is real. */ + if (n == MATCH_NO) + gfc_error ("Expected initialization expression at %C"); + if (n != MATCH_YES) + return MATCH_ERROR; + } + } + + if (e->rank != 0) + { + gfc_error ("Expected scalar initialization expression at %C"); + m = MATCH_ERROR; + goto no_match; + } + + msg = gfc_extract_int (e, &ts->kind); + + if (msg != NULL) + { + gfc_error (msg); + m = MATCH_ERROR; + goto no_match; + } + + /* Before throwing away the expression, let's see if we had a + C interoperable kind (and store the fact). */ + if (e->ts.is_c_interop == 1) + { + /* Mark this as c interoperable if being declared with one + of the named constants from iso_c_binding. */ + ts->is_c_interop = e->ts.is_iso_c; + ts->f90_type = e->ts.f90_type; + } + + gfc_free_expr (e); + e = NULL; + + /* Ignore errors to this point, if we've gotten here. This means + we ignore the m=MATCH_ERROR from above. */ + if (gfc_validate_kind (ts->type, ts->kind, true) < 0) + { + gfc_error ("Kind %d not supported for type %s at %C", ts->kind, + gfc_basic_typename (ts->type)); + gfc_current_locus = where; + return MATCH_ERROR; + } + + /* Warn if, e.g., c_int is used for a REAL variable, but not + if, e.g., c_double is used for COMPLEX as the standard + explicitly says that the kind type parameter for complex and real + variable is the same, i.e. c_float == c_float_complex. */ + if (ts->f90_type != BT_UNKNOWN && ts->f90_type != ts->type + && !((ts->f90_type == BT_REAL && ts->type == BT_COMPLEX) + || (ts->f90_type == BT_COMPLEX && ts->type == BT_REAL))) + gfc_error_now ("C kind type parameter is for type %s but type at %L " + "is %s", gfc_basic_typename (ts->f90_type), &where, + gfc_basic_typename (ts->type)); + + gfc_gobble_whitespace (); + if ((c = gfc_next_ascii_char ()) != ')' + && (ts->type != BT_CHARACTER || c != ',')) + { + if (ts->type == BT_CHARACTER) + gfc_error ("Missing right parenthesis or comma at %C"); + else + gfc_error ("Missing right parenthesis at %C"); + m = MATCH_ERROR; + } + else + /* All tests passed. */ + m = MATCH_YES; + + if(m == MATCH_ERROR) + gfc_current_locus = where; + + /* Return what we know from the test(s). */ + return m; + +no_match: + gfc_free_expr (e); + gfc_current_locus = where; + return m; +} + + +static match +match_char_kind (int * kind, int * is_iso_c) +{ + locus where; + gfc_expr *e; + match m, n; + const char *msg; + + m = MATCH_NO; + e = NULL; + where = gfc_current_locus; + + n = gfc_match_init_expr (&e); + + if (n != MATCH_YES && gfc_matching_function) + { + /* The expression might include use-associated or imported + parameters and try again after the specification + expressions. */ + gfc_free_expr (e); + gfc_undo_symbols (); + return MATCH_YES; + } + + if (n == MATCH_NO) + gfc_error ("Expected initialization expression at %C"); + if (n != MATCH_YES) + return MATCH_ERROR; + + if (e->rank != 0) + { + gfc_error ("Expected scalar initialization expression at %C"); + m = MATCH_ERROR; + goto no_match; + } + + msg = gfc_extract_int (e, kind); + *is_iso_c = e->ts.is_iso_c; + if (msg != NULL) + { + gfc_error (msg); + m = MATCH_ERROR; + goto no_match; + } + + gfc_free_expr (e); + + /* Ignore errors to this point, if we've gotten here. This means + we ignore the m=MATCH_ERROR from above. */ + if (gfc_validate_kind (BT_CHARACTER, *kind, true) < 0) + { + gfc_error ("Kind %d is not supported for CHARACTER at %C", *kind); + m = MATCH_ERROR; + } + else + /* All tests passed. */ + m = MATCH_YES; + + if (m == MATCH_ERROR) + gfc_current_locus = where; + + /* Return what we know from the test(s). */ + return m; + +no_match: + gfc_free_expr (e); + gfc_current_locus = where; + return m; +} + +/* Match the various kind/length specifications in a CHARACTER + declaration. We don't return MATCH_NO. */ + +static match +match_char_spec (gfc_typespec *ts) +{ + int kind, seen_length, is_iso_c; + gfc_charlen *cl; + gfc_expr *len; + match m; + + len = NULL; + seen_length = 0; + kind = 0; + is_iso_c = 0; + + /* Try the old-style specification first. */ + old_char_selector = 0; + + m = match_char_length (&len); + if (m != MATCH_NO) + { + if (m == MATCH_YES) + old_char_selector = 1; + seen_length = 1; + goto done; + } + + m = gfc_match_char ('('); + if (m != MATCH_YES) + { + m = MATCH_YES; /* Character without length is a single char. */ + goto done; + } + + /* Try the weird case: ( KIND = [ , LEN = ] ). */ + if (gfc_match (" kind =") == MATCH_YES) + { + m = match_char_kind (&kind, &is_iso_c); + + if (m == MATCH_ERROR) + goto done; + if (m == MATCH_NO) + goto syntax; + + if (gfc_match (" , len =") == MATCH_NO) + goto rparen; + + m = char_len_param_value (&len); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto done; + seen_length = 1; + + goto rparen; + } + + /* Try to match "LEN = " or "LEN = , KIND = ". */ + if (gfc_match (" len =") == MATCH_YES) + { + m = char_len_param_value (&len); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto done; + seen_length = 1; + + if (gfc_match_char (')') == MATCH_YES) + goto done; + + if (gfc_match (" , kind =") != MATCH_YES) + goto syntax; + + if (match_char_kind (&kind, &is_iso_c) == MATCH_ERROR) + goto done; + + goto rparen; + } + + /* Try to match ( ) or ( , [ KIND = ] ). */ + m = char_len_param_value (&len); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto done; + seen_length = 1; + + m = gfc_match_char (')'); + if (m == MATCH_YES) + goto done; + + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + + gfc_match (" kind ="); /* Gobble optional text. */ + + m = match_char_kind (&kind, &is_iso_c); + if (m == MATCH_ERROR) + goto done; + if (m == MATCH_NO) + goto syntax; + +rparen: + /* Require a right-paren at this point. */ + m = gfc_match_char (')'); + if (m == MATCH_YES) + goto done; + +syntax: + gfc_error ("Syntax error in CHARACTER declaration at %C"); + m = MATCH_ERROR; + gfc_free_expr (len); + return m; + +done: + /* Deal with character functions after USE and IMPORT statements. */ + if (gfc_matching_function) + { + gfc_free_expr (len); + gfc_undo_symbols (); + return MATCH_YES; + } + + if (m != MATCH_YES) + { + gfc_free_expr (len); + return m; + } + + /* Do some final massaging of the length values. */ + cl = gfc_get_charlen (); + cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = cl; + + if (seen_length == 0) + cl->length = gfc_int_expr (1); + else + cl->length = len; + + ts->cl = cl; + ts->kind = kind == 0 ? gfc_default_character_kind : kind; + + /* We have to know if it was a c interoperable kind so we can + do accurate type checking of bind(c) procs, etc. */ + if (kind != 0) + /* Mark this as c interoperable if being declared with one + of the named constants from iso_c_binding. */ + ts->is_c_interop = is_iso_c; + else if (len != NULL) + /* Here, we might have parsed something such as: character(c_char) + In this case, the parsing code above grabs the c_char when + looking for the length (line 1690, roughly). it's the last + testcase for parsing the kind params of a character variable. + However, it's not actually the length. this seems like it + could be an error. + To see if the user used a C interop kind, test the expr + of the so called length, and see if it's C interoperable. */ + ts->is_c_interop = len->ts.is_iso_c; + + return MATCH_YES; +} + + +/* Matches a type specification. If successful, sets the ts structure + to the matched specification. This is necessary for FUNCTION and + IMPLICIT statements. + + If implicit_flag is nonzero, then we don't check for the optional + kind specification. Not doing so is needed for matching an IMPLICIT + statement correctly. */ + +match +gfc_match_type_spec (gfc_typespec *ts, int implicit_flag) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_symbol *sym; + match m; + char c; + bool seen_deferred_kind; + + /* A belt and braces check that the typespec is correctly being treated + as a deferred characteristic association. */ + seen_deferred_kind = (gfc_current_state () == COMP_FUNCTION) + && (gfc_current_block ()->result->ts.kind == -1) + && (ts->kind == -1); + gfc_clear_ts (ts); + if (seen_deferred_kind) + ts->kind = -1; + + /* Clear the current binding label, in case one is given. */ + curr_binding_label[0] = '\0'; + + if (gfc_match (" byte") == MATCH_YES) + { + if (gfc_notify_std(GFC_STD_GNU, "Extension: BYTE type at %C") + == FAILURE) + return MATCH_ERROR; + + if (gfc_validate_kind (BT_INTEGER, 1, true) < 0) + { + gfc_error ("BYTE type used at %C " + "is not available on the target machine"); + return MATCH_ERROR; + } + + ts->type = BT_INTEGER; + ts->kind = 1; + return MATCH_YES; + } + + if (gfc_match (" integer") == MATCH_YES) + { + ts->type = BT_INTEGER; + ts->kind = gfc_default_integer_kind; + goto get_kind; + } + + if (gfc_match (" character") == MATCH_YES) + { + ts->type = BT_CHARACTER; + if (implicit_flag == 0) + return match_char_spec (ts); + else + return MATCH_YES; + } + + if (gfc_match (" real") == MATCH_YES) + { + ts->type = BT_REAL; + ts->kind = gfc_default_real_kind; + goto get_kind; + } + + if (gfc_match (" double precision") == MATCH_YES) + { + ts->type = BT_REAL; + ts->kind = gfc_default_double_kind; + return MATCH_YES; + } + + if (gfc_match (" complex") == MATCH_YES) + { + ts->type = BT_COMPLEX; + ts->kind = gfc_default_complex_kind; + goto get_kind; + } + + if (gfc_match (" double complex") == MATCH_YES) + { + if (gfc_notify_std (GFC_STD_GNU, "DOUBLE COMPLEX at %C does not " + "conform to the Fortran 95 standard") == FAILURE) + return MATCH_ERROR; + + ts->type = BT_COMPLEX; + ts->kind = gfc_default_double_kind; + return MATCH_YES; + } + + if (gfc_match (" logical") == MATCH_YES) + { + ts->type = BT_LOGICAL; + ts->kind = gfc_default_logical_kind; + goto get_kind; + } + + m = gfc_match (" type ( %n )", name); + if (m != MATCH_YES) + return m; + + ts->type = BT_DERIVED; + + /* Defer association of the derived type until the end of the + specification block. However, if the derived type can be + found, add it to the typespec. */ + if (gfc_matching_function) + { + ts->derived = NULL; + if (gfc_current_state () != COMP_INTERFACE + && !gfc_find_symbol (name, NULL, 1, &sym) && sym) + ts->derived = sym; + return MATCH_YES; + } + + /* Search for the name but allow the components to be defined later. If + type = -1, this typespec has been seen in a function declaration but + the type could not be accessed at that point. */ + sym = NULL; + if (ts->kind != -1 && gfc_get_ha_symbol (name, &sym)) + { + gfc_error ("Type name '%s' at %C is ambiguous", name); + return MATCH_ERROR; + } + else if (ts->kind == -1) + { + int iface = gfc_state_stack->previous->state != COMP_INTERFACE + || gfc_current_ns->has_import_set; + if (gfc_find_symbol (name, NULL, iface, &sym)) + { + gfc_error ("Type name '%s' at %C is ambiguous", name); + return MATCH_ERROR; + } + + ts->kind = 0; + if (sym == NULL) + return MATCH_NO; + } + + if (sym->attr.flavor != FL_DERIVED + && gfc_add_flavor (&sym->attr, FL_DERIVED, sym->name, NULL) == FAILURE) + return MATCH_ERROR; + + gfc_set_sym_referenced (sym); + ts->derived = sym; + + return MATCH_YES; + +get_kind: + /* For all types except double, derived and character, look for an + optional kind specifier. MATCH_NO is actually OK at this point. */ + if (implicit_flag == 1) + return MATCH_YES; + + if (gfc_current_form == FORM_FREE) + { + c = gfc_peek_ascii_char(); + if (!gfc_is_whitespace(c) && c != '*' && c != '(' + && c != ':' && c != ',') + return MATCH_NO; + } + + m = gfc_match_kind_spec (ts, false); + if (m == MATCH_NO && ts->type != BT_CHARACTER) + m = gfc_match_old_kind_spec (ts); + + /* Defer association of the KIND expression of function results + until after USE and IMPORT statements. */ + if ((gfc_current_state () == COMP_NONE && gfc_error_flag_test ()) + || gfc_matching_function) + return MATCH_YES; + + if (m == MATCH_NO) + m = MATCH_YES; /* No kind specifier found. */ + + return m; +} + + +/* Match an IMPLICIT NONE statement. Actually, this statement is + already matched in parse.c, or we would not end up here in the + first place. So the only thing we need to check, is if there is + trailing garbage. If not, the match is successful. */ + +match +gfc_match_implicit_none (void) +{ + return (gfc_match_eos () == MATCH_YES) ? MATCH_YES : MATCH_NO; +} + + +/* Match the letter range(s) of an IMPLICIT statement. */ + +static match +match_implicit_range (void) +{ + char c, c1, c2; + int inner; + locus cur_loc; + + cur_loc = gfc_current_locus; + + gfc_gobble_whitespace (); + c = gfc_next_ascii_char (); + if (c != '(') + { + gfc_error ("Missing character range in IMPLICIT at %C"); + goto bad; + } + + inner = 1; + while (inner) + { + gfc_gobble_whitespace (); + c1 = gfc_next_ascii_char (); + if (!ISALPHA (c1)) + goto bad; + + gfc_gobble_whitespace (); + c = gfc_next_ascii_char (); + + switch (c) + { + case ')': + inner = 0; /* Fall through. */ + + case ',': + c2 = c1; + break; + + case '-': + gfc_gobble_whitespace (); + c2 = gfc_next_ascii_char (); + if (!ISALPHA (c2)) + goto bad; + + gfc_gobble_whitespace (); + c = gfc_next_ascii_char (); + + if ((c != ',') && (c != ')')) + goto bad; + if (c == ')') + inner = 0; + + break; + + default: + goto bad; + } + + if (c1 > c2) + { + gfc_error ("Letters must be in alphabetic order in " + "IMPLICIT statement at %C"); + goto bad; + } + + /* See if we can add the newly matched range to the pending + implicits from this IMPLICIT statement. We do not check for + conflicts with whatever earlier IMPLICIT statements may have + set. This is done when we've successfully finished matching + the current one. */ + if (gfc_add_new_implicit_range (c1, c2) != SUCCESS) + goto bad; + } + + return MATCH_YES; + +bad: + gfc_syntax_error (ST_IMPLICIT); + + gfc_current_locus = cur_loc; + return MATCH_ERROR; +} + + +/* Match an IMPLICIT statement, storing the types for + gfc_set_implicit() if the statement is accepted by the parser. + There is a strange looking, but legal syntactic construction + possible. It looks like: + + IMPLICIT INTEGER (a-b) (c-d) + + This is legal if "a-b" is a constant expression that happens to + equal one of the legal kinds for integers. The real problem + happens with an implicit specification that looks like: + + IMPLICIT INTEGER (a-b) + + In this case, a typespec matcher that is "greedy" (as most of the + matchers are) gobbles the character range as a kindspec, leaving + nothing left. We therefore have to go a bit more slowly in the + matching process by inhibiting the kindspec checking during + typespec matching and checking for a kind later. */ + +match +gfc_match_implicit (void) +{ + gfc_typespec ts; + locus cur_loc; + char c; + match m; + + gfc_clear_ts (&ts); + + /* We don't allow empty implicit statements. */ + if (gfc_match_eos () == MATCH_YES) + { + gfc_error ("Empty IMPLICIT statement at %C"); + return MATCH_ERROR; + } + + do + { + /* First cleanup. */ + gfc_clear_new_implicit (); + + /* A basic type is mandatory here. */ + m = gfc_match_type_spec (&ts, 1); + if (m == MATCH_ERROR) + goto error; + if (m == MATCH_NO) + goto syntax; + + cur_loc = gfc_current_locus; + m = match_implicit_range (); + + if (m == MATCH_YES) + { + /* We may have (). */ + gfc_gobble_whitespace (); + c = gfc_next_ascii_char (); + if ((c == '\n') || (c == ',')) + { + /* Check for CHARACTER with no length parameter. */ + if (ts.type == BT_CHARACTER && !ts.cl) + { + ts.kind = gfc_default_character_kind; + ts.cl = gfc_get_charlen (); + ts.cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = ts.cl; + ts.cl->length = gfc_int_expr (1); + } + + /* Record the Successful match. */ + if (gfc_merge_new_implicit (&ts) != SUCCESS) + return MATCH_ERROR; + continue; + } + + gfc_current_locus = cur_loc; + } + + /* Discard the (incorrectly) matched range. */ + gfc_clear_new_implicit (); + + /* Last chance -- check (). */ + if (ts.type == BT_CHARACTER) + m = match_char_spec (&ts); + else + { + m = gfc_match_kind_spec (&ts, false); + if (m == MATCH_NO) + { + m = gfc_match_old_kind_spec (&ts); + if (m == MATCH_ERROR) + goto error; + if (m == MATCH_NO) + goto syntax; + } + } + if (m == MATCH_ERROR) + goto error; + + m = match_implicit_range (); + if (m == MATCH_ERROR) + goto error; + if (m == MATCH_NO) + goto syntax; + + gfc_gobble_whitespace (); + c = gfc_next_ascii_char (); + if ((c != '\n') && (c != ',')) + goto syntax; + + if (gfc_merge_new_implicit (&ts) != SUCCESS) + return MATCH_ERROR; + } + while (c == ','); + + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_IMPLICIT); + +error: + return MATCH_ERROR; +} + + +match +gfc_match_import (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + match m; + gfc_symbol *sym; + gfc_symtree *st; + + if (gfc_current_ns->proc_name == NULL + || gfc_current_ns->proc_name->attr.if_source != IFSRC_IFBODY) + { + gfc_error ("IMPORT statement at %C only permitted in " + "an INTERFACE body"); + return MATCH_ERROR; + } + + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: IMPORT statement at %C") + == FAILURE) + return MATCH_ERROR; + + if (gfc_match_eos () == MATCH_YES) + { + /* All host variables should be imported. */ + gfc_current_ns->has_import_set = 1; + return MATCH_YES; + } + + if (gfc_match (" ::") == MATCH_YES) + { + if (gfc_match_eos () == MATCH_YES) + { + gfc_error ("Expecting list of named entities at %C"); + return MATCH_ERROR; + } + } + + for(;;) + { + m = gfc_match (" %n", name); + switch (m) + { + case MATCH_YES: + if (gfc_current_ns->parent != NULL + && gfc_find_symbol (name, gfc_current_ns->parent, 1, &sym)) + { + gfc_error ("Type name '%s' at %C is ambiguous", name); + return MATCH_ERROR; + } + else if (gfc_current_ns->proc_name->ns->parent != NULL + && gfc_find_symbol (name, + gfc_current_ns->proc_name->ns->parent, + 1, &sym)) + { + gfc_error ("Type name '%s' at %C is ambiguous", name); + return MATCH_ERROR; + } + + if (sym == NULL) + { + gfc_error ("Cannot IMPORT '%s' from host scoping unit " + "at %C - does not exist.", name); + return MATCH_ERROR; + } + + if (gfc_find_symtree (gfc_current_ns->sym_root,name)) + { + gfc_warning ("'%s' is already IMPORTed from host scoping unit " + "at %C.", name); + goto next_item; + } + + st = gfc_new_symtree (&gfc_current_ns->sym_root, name); + st->n.sym = sym; + sym->refs++; + sym->attr.imported = 1; + + goto next_item; + + case MATCH_NO: + break; + + case MATCH_ERROR: + return MATCH_ERROR; + } + + next_item: + if (gfc_match_eos () == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in IMPORT statement at %C"); + return MATCH_ERROR; +} + + +/* A minimal implementation of gfc_match without whitespace, escape + characters or variable arguments. Returns true if the next + characters match the TARGET template exactly. */ + +static bool +match_string_p (const char *target) +{ + const char *p; + + for (p = target; *p; p++) + if ((char) gfc_next_ascii_char () != *p) + return false; + return true; +} + +/* Matches an attribute specification including array specs. If + successful, leaves the variables current_attr and current_as + holding the specification. Also sets the colon_seen variable for + later use by matchers associated with initializations. + + This subroutine is a little tricky in the sense that we don't know + if we really have an attr-spec until we hit the double colon. + Until that time, we can only return MATCH_NO. This forces us to + check for duplicate specification at this level. */ + +static match +match_attr_spec (void) +{ + /* Modifiers that can exist in a type statement. */ + typedef enum + { GFC_DECL_BEGIN = 0, + DECL_ALLOCATABLE = GFC_DECL_BEGIN, DECL_DIMENSION, DECL_EXTERNAL, + DECL_IN, DECL_OUT, DECL_INOUT, DECL_INTRINSIC, DECL_OPTIONAL, + DECL_PARAMETER, DECL_POINTER, DECL_PROTECTED, DECL_PRIVATE, + DECL_PUBLIC, DECL_SAVE, DECL_TARGET, DECL_VALUE, DECL_VOLATILE, + DECL_IS_BIND_C, DECL_NONE, + GFC_DECL_END /* Sentinel */ + } + decl_types; + +/* GFC_DECL_END is the sentinel, index starts at 0. */ +#define NUM_DECL GFC_DECL_END + + locus start, seen_at[NUM_DECL]; + int seen[NUM_DECL]; + decl_types d; + const char *attr; + match m; + gfc_try t; + + gfc_clear_attr (¤t_attr); + start = gfc_current_locus; + + current_as = NULL; + colon_seen = 0; + + /* See if we get all of the keywords up to the final double colon. */ + for (d = GFC_DECL_BEGIN; d != GFC_DECL_END; d++) + seen[d] = 0; + + for (;;) + { + char ch; + + d = DECL_NONE; + gfc_gobble_whitespace (); + + ch = gfc_next_ascii_char (); + if (ch == ':') + { + /* This is the successful exit condition for the loop. */ + if (gfc_next_ascii_char () == ':') + break; + } + else if (ch == ',') + { + gfc_gobble_whitespace (); + switch (gfc_peek_ascii_char ()) + { + case 'a': + if (match_string_p ("allocatable")) + d = DECL_ALLOCATABLE; + break; + + case 'b': + /* Try and match the bind(c). */ + m = gfc_match_bind_c (NULL, true); + if (m == MATCH_YES) + d = DECL_IS_BIND_C; + else if (m == MATCH_ERROR) + goto cleanup; + break; + + case 'd': + if (match_string_p ("dimension")) + d = DECL_DIMENSION; + break; + + case 'e': + if (match_string_p ("external")) + d = DECL_EXTERNAL; + break; + + case 'i': + if (match_string_p ("int")) + { + ch = gfc_next_ascii_char (); + if (ch == 'e') + { + if (match_string_p ("nt")) + { + /* Matched "intent". */ + /* TODO: Call match_intent_spec from here. */ + if (gfc_match (" ( in out )") == MATCH_YES) + d = DECL_INOUT; + else if (gfc_match (" ( in )") == MATCH_YES) + d = DECL_IN; + else if (gfc_match (" ( out )") == MATCH_YES) + d = DECL_OUT; + } + } + else if (ch == 'r') + { + if (match_string_p ("insic")) + { + /* Matched "intrinsic". */ + d = DECL_INTRINSIC; + } + } + } + break; + + case 'o': + if (match_string_p ("optional")) + d = DECL_OPTIONAL; + break; + + case 'p': + gfc_next_ascii_char (); + switch (gfc_next_ascii_char ()) + { + case 'a': + if (match_string_p ("rameter")) + { + /* Matched "parameter". */ + d = DECL_PARAMETER; + } + break; + + case 'o': + if (match_string_p ("inter")) + { + /* Matched "pointer". */ + d = DECL_POINTER; + } + break; + + case 'r': + ch = gfc_next_ascii_char (); + if (ch == 'i') + { + if (match_string_p ("vate")) + { + /* Matched "private". */ + d = DECL_PRIVATE; + } + } + else if (ch == 'o') + { + if (match_string_p ("tected")) + { + /* Matched "protected". */ + d = DECL_PROTECTED; + } + } + break; + + case 'u': + if (match_string_p ("blic")) + { + /* Matched "public". */ + d = DECL_PUBLIC; + } + break; + } + break; + + case 's': + if (match_string_p ("save")) + d = DECL_SAVE; + break; + + case 't': + if (match_string_p ("target")) + d = DECL_TARGET; + break; + + case 'v': + gfc_next_ascii_char (); + ch = gfc_next_ascii_char (); + if (ch == 'a') + { + if (match_string_p ("lue")) + { + /* Matched "value". */ + d = DECL_VALUE; + } + } + else if (ch == 'o') + { + if (match_string_p ("latile")) + { + /* Matched "volatile". */ + d = DECL_VOLATILE; + } + } + break; + } + } + + /* No double colon and no recognizable decl_type, so assume that + we've been looking at something else the whole time. */ + if (d == DECL_NONE) + { + m = MATCH_NO; + goto cleanup; + } + + /* Check to make sure any parens are paired up correctly. */ + if (gfc_match_parens () == MATCH_ERROR) + { + m = MATCH_ERROR; + goto cleanup; + } + + seen[d]++; + seen_at[d] = gfc_current_locus; + + if (d == DECL_DIMENSION) + { + m = gfc_match_array_spec (¤t_as); + + if (m == MATCH_NO) + { + gfc_error ("Missing dimension specification at %C"); + m = MATCH_ERROR; + } + + if (m == MATCH_ERROR) + goto cleanup; + } + } + + /* Since we've seen a double colon, we have to be looking at an + attr-spec. This means that we can now issue errors. */ + for (d = GFC_DECL_BEGIN; d != GFC_DECL_END; d++) + if (seen[d] > 1) + { + switch (d) + { + case DECL_ALLOCATABLE: + attr = "ALLOCATABLE"; + break; + case DECL_DIMENSION: + attr = "DIMENSION"; + break; + case DECL_EXTERNAL: + attr = "EXTERNAL"; + break; + case DECL_IN: + attr = "INTENT (IN)"; + break; + case DECL_OUT: + attr = "INTENT (OUT)"; + break; + case DECL_INOUT: + attr = "INTENT (IN OUT)"; + break; + case DECL_INTRINSIC: + attr = "INTRINSIC"; + break; + case DECL_OPTIONAL: + attr = "OPTIONAL"; + break; + case DECL_PARAMETER: + attr = "PARAMETER"; + break; + case DECL_POINTER: + attr = "POINTER"; + break; + case DECL_PROTECTED: + attr = "PROTECTED"; + break; + case DECL_PRIVATE: + attr = "PRIVATE"; + break; + case DECL_PUBLIC: + attr = "PUBLIC"; + break; + case DECL_SAVE: + attr = "SAVE"; + break; + case DECL_TARGET: + attr = "TARGET"; + break; + case DECL_IS_BIND_C: + attr = "IS_BIND_C"; + break; + case DECL_VALUE: + attr = "VALUE"; + break; + case DECL_VOLATILE: + attr = "VOLATILE"; + break; + default: + attr = NULL; /* This shouldn't happen. */ + } + + gfc_error ("Duplicate %s attribute at %L", attr, &seen_at[d]); + m = MATCH_ERROR; + goto cleanup; + } + + /* Now that we've dealt with duplicate attributes, add the attributes + to the current attribute. */ + for (d = GFC_DECL_BEGIN; d != GFC_DECL_END; d++) + { + if (seen[d] == 0) + continue; + + if (gfc_current_state () == COMP_DERIVED + && d != DECL_DIMENSION && d != DECL_POINTER + && d != DECL_PRIVATE && d != DECL_PUBLIC + && d != DECL_NONE) + { + if (d == DECL_ALLOCATABLE) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ALLOCATABLE " + "attribute at %C in a TYPE definition") + == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + } + else + { + gfc_error ("Attribute at %L is not allowed in a TYPE definition", + &seen_at[d]); + m = MATCH_ERROR; + goto cleanup; + } + } + + if ((d == DECL_PRIVATE || d == DECL_PUBLIC) + && gfc_current_state () != COMP_MODULE) + { + if (d == DECL_PRIVATE) + attr = "PRIVATE"; + else + attr = "PUBLIC"; + if (gfc_current_state () == COMP_DERIVED + && gfc_state_stack->previous + && gfc_state_stack->previous->state == COMP_MODULE) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Attribute %s " + "at %L in a TYPE definition", attr, + &seen_at[d]) + == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + } + else + { + gfc_error ("%s attribute at %L is not allowed outside of the " + "specification part of a module", attr, &seen_at[d]); + m = MATCH_ERROR; + goto cleanup; + } + } + + switch (d) + { + case DECL_ALLOCATABLE: + t = gfc_add_allocatable (¤t_attr, &seen_at[d]); + break; + + case DECL_DIMENSION: + t = gfc_add_dimension (¤t_attr, NULL, &seen_at[d]); + break; + + case DECL_EXTERNAL: + t = gfc_add_external (¤t_attr, &seen_at[d]); + break; + + case DECL_IN: + t = gfc_add_intent (¤t_attr, INTENT_IN, &seen_at[d]); + break; + + case DECL_OUT: + t = gfc_add_intent (¤t_attr, INTENT_OUT, &seen_at[d]); + break; + + case DECL_INOUT: + t = gfc_add_intent (¤t_attr, INTENT_INOUT, &seen_at[d]); + break; + + case DECL_INTRINSIC: + t = gfc_add_intrinsic (¤t_attr, &seen_at[d]); + break; + + case DECL_OPTIONAL: + t = gfc_add_optional (¤t_attr, &seen_at[d]); + break; + + case DECL_PARAMETER: + t = gfc_add_flavor (¤t_attr, FL_PARAMETER, NULL, &seen_at[d]); + break; + + case DECL_POINTER: + t = gfc_add_pointer (¤t_attr, &seen_at[d]); + break; + + case DECL_PROTECTED: + if (gfc_current_ns->proc_name->attr.flavor != FL_MODULE) + { + gfc_error ("PROTECTED at %C only allowed in specification " + "part of a module"); + t = FAILURE; + break; + } + + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: PROTECTED " + "attribute at %C") + == FAILURE) + t = FAILURE; + else + t = gfc_add_protected (¤t_attr, NULL, &seen_at[d]); + break; + + case DECL_PRIVATE: + t = gfc_add_access (¤t_attr, ACCESS_PRIVATE, NULL, + &seen_at[d]); + break; + + case DECL_PUBLIC: + t = gfc_add_access (¤t_attr, ACCESS_PUBLIC, NULL, + &seen_at[d]); + break; + + case DECL_SAVE: + t = gfc_add_save (¤t_attr, NULL, &seen_at[d]); + break; + + case DECL_TARGET: + t = gfc_add_target (¤t_attr, &seen_at[d]); + break; + + case DECL_IS_BIND_C: + t = gfc_add_is_bind_c(¤t_attr, NULL, &seen_at[d], 0); + break; + + case DECL_VALUE: + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: VALUE attribute " + "at %C") + == FAILURE) + t = FAILURE; + else + t = gfc_add_value (¤t_attr, NULL, &seen_at[d]); + break; + + case DECL_VOLATILE: + if (gfc_notify_std (GFC_STD_F2003, + "Fortran 2003: VOLATILE attribute at %C") + == FAILURE) + t = FAILURE; + else + t = gfc_add_volatile (¤t_attr, NULL, &seen_at[d]); + break; + + default: + gfc_internal_error ("match_attr_spec(): Bad attribute"); + } + + if (t == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + } + + colon_seen = 1; + return MATCH_YES; + +cleanup: + gfc_current_locus = start; + gfc_free_array_spec (current_as); + current_as = NULL; + return m; +} + + +/* Set the binding label, dest_label, either with the binding label + stored in the given gfc_typespec, ts, or if none was provided, it + will be the symbol name in all lower case, as required by the draft + (J3/04-007, section 15.4.1). If a binding label was given and + there is more than one argument (num_idents), it is an error. */ + +gfc_try +set_binding_label (char *dest_label, const char *sym_name, int num_idents) +{ + if (num_idents > 1 && has_name_equals) + { + gfc_error ("Multiple identifiers provided with " + "single NAME= specifier at %C"); + return FAILURE; + } + + if (curr_binding_label[0] != '\0') + { + /* Binding label given; store in temp holder til have sym. */ + strcpy (dest_label, curr_binding_label); + } + else + { + /* No binding label given, and the NAME= specifier did not exist, + which means there was no NAME="". */ + if (sym_name != NULL && has_name_equals == 0) + strcpy (dest_label, sym_name); + } + + return SUCCESS; +} + + +/* Set the status of the given common block as being BIND(C) or not, + depending on the given parameter, is_bind_c. */ + +void +set_com_block_bind_c (gfc_common_head *com_block, int is_bind_c) +{ + com_block->is_bind_c = is_bind_c; + return; +} + + +/* Verify that the given gfc_typespec is for a C interoperable type. */ + +gfc_try +verify_c_interop (gfc_typespec *ts) +{ + if (ts->type == BT_DERIVED && ts->derived != NULL) + return (ts->derived->ts.is_c_interop ? SUCCESS : FAILURE); + else if (ts->is_c_interop != 1) + return FAILURE; + + return SUCCESS; +} + + +/* Verify that the variables of a given common block, which has been + defined with the attribute specifier bind(c), to be of a C + interoperable type. Errors will be reported here, if + encountered. */ + +gfc_try +verify_com_block_vars_c_interop (gfc_common_head *com_block) +{ + gfc_symbol *curr_sym = NULL; + gfc_try retval = SUCCESS; + + curr_sym = com_block->head; + + /* Make sure we have at least one symbol. */ + if (curr_sym == NULL) + return retval; + + /* Here we know we have a symbol, so we'll execute this loop + at least once. */ + do + { + /* The second to last param, 1, says this is in a common block. */ + retval = verify_bind_c_sym (curr_sym, &(curr_sym->ts), 1, com_block); + curr_sym = curr_sym->common_next; + } while (curr_sym != NULL); + + return retval; +} + + +/* Verify that a given BIND(C) symbol is C interoperable. If it is not, + an appropriate error message is reported. */ + +gfc_try +verify_bind_c_sym (gfc_symbol *tmp_sym, gfc_typespec *ts, + int is_in_common, gfc_common_head *com_block) +{ + bool bind_c_function = false; + gfc_try retval = SUCCESS; + + if (tmp_sym->attr.function && tmp_sym->attr.is_bind_c) + bind_c_function = true; + + if (tmp_sym->attr.function && tmp_sym->result != NULL) + { + tmp_sym = tmp_sym->result; + /* Make sure it wasn't an implicitly typed result. */ + if (tmp_sym->attr.implicit_type) + { + gfc_warning ("Implicitly declared BIND(C) function '%s' at " + "%L may not be C interoperable", tmp_sym->name, + &tmp_sym->declared_at); + tmp_sym->ts.f90_type = tmp_sym->ts.type; + /* Mark it as C interoperable to prevent duplicate warnings. */ + tmp_sym->ts.is_c_interop = 1; + tmp_sym->attr.is_c_interop = 1; + } + } + + /* Here, we know we have the bind(c) attribute, so if we have + enough type info, then verify that it's a C interop kind. + The info could be in the symbol already, or possibly still in + the given ts (current_ts), so look in both. */ + if (tmp_sym->ts.type != BT_UNKNOWN || ts->type != BT_UNKNOWN) + { + if (verify_c_interop (&(tmp_sym->ts)) != SUCCESS) + { + /* See if we're dealing with a sym in a common block or not. */ + if (is_in_common == 1) + { + gfc_warning ("Variable '%s' in common block '%s' at %L " + "may not be a C interoperable " + "kind though common block '%s' is BIND(C)", + tmp_sym->name, com_block->name, + &(tmp_sym->declared_at), com_block->name); + } + else + { + if (tmp_sym->ts.type == BT_DERIVED || ts->type == BT_DERIVED) + gfc_error ("Type declaration '%s' at %L is not C " + "interoperable but it is BIND(C)", + tmp_sym->name, &(tmp_sym->declared_at)); + else + gfc_warning ("Variable '%s' at %L " + "may not be a C interoperable " + "kind but it is bind(c)", + tmp_sym->name, &(tmp_sym->declared_at)); + } + } + + /* Variables declared w/in a common block can't be bind(c) + since there's no way for C to see these variables, so there's + semantically no reason for the attribute. */ + if (is_in_common == 1 && tmp_sym->attr.is_bind_c == 1) + { + gfc_error ("Variable '%s' in common block '%s' at " + "%L cannot be declared with BIND(C) " + "since it is not a global", + tmp_sym->name, com_block->name, + &(tmp_sym->declared_at)); + retval = FAILURE; + } + + /* Scalar variables that are bind(c) can not have the pointer + or allocatable attributes. */ + if (tmp_sym->attr.is_bind_c == 1) + { + if (tmp_sym->attr.pointer == 1) + { + gfc_error ("Variable '%s' at %L cannot have both the " + "POINTER and BIND(C) attributes", + tmp_sym->name, &(tmp_sym->declared_at)); + retval = FAILURE; + } + + if (tmp_sym->attr.allocatable == 1) + { + gfc_error ("Variable '%s' at %L cannot have both the " + "ALLOCATABLE and BIND(C) attributes", + tmp_sym->name, &(tmp_sym->declared_at)); + retval = FAILURE; + } + + } + + /* If it is a BIND(C) function, make sure the return value is a + scalar value. The previous tests in this function made sure + the type is interoperable. */ + if (bind_c_function && tmp_sym->as != NULL) + gfc_error ("Return type of BIND(C) function '%s' at %L cannot " + "be an array", tmp_sym->name, &(tmp_sym->declared_at)); + + /* BIND(C) functions can not return a character string. */ + if (bind_c_function && tmp_sym->ts.type == BT_CHARACTER) + if (tmp_sym->ts.cl == NULL || tmp_sym->ts.cl->length == NULL + || tmp_sym->ts.cl->length->expr_type != EXPR_CONSTANT + || mpz_cmp_si (tmp_sym->ts.cl->length->value.integer, 1) != 0) + gfc_error ("Return type of BIND(C) function '%s' at %L cannot " + "be a character string", tmp_sym->name, + &(tmp_sym->declared_at)); + } + + /* See if the symbol has been marked as private. If it has, make sure + there is no binding label and warn the user if there is one. */ + if (tmp_sym->attr.access == ACCESS_PRIVATE + && tmp_sym->binding_label[0] != '\0') + /* Use gfc_warning_now because we won't say that the symbol fails + just because of this. */ + gfc_warning_now ("Symbol '%s' at %L is marked PRIVATE but has been " + "given the binding label '%s'", tmp_sym->name, + &(tmp_sym->declared_at), tmp_sym->binding_label); + + return retval; +} + + +/* Set the appropriate fields for a symbol that's been declared as + BIND(C) (the is_bind_c flag and the binding label), and verify that + the type is C interoperable. Errors are reported by the functions + used to set/test these fields. */ + +gfc_try +set_verify_bind_c_sym (gfc_symbol *tmp_sym, int num_idents) +{ + gfc_try retval = SUCCESS; + + /* TODO: Do we need to make sure the vars aren't marked private? */ + + /* Set the is_bind_c bit in symbol_attribute. */ + gfc_add_is_bind_c (&(tmp_sym->attr), tmp_sym->name, &gfc_current_locus, 0); + + if (set_binding_label (tmp_sym->binding_label, tmp_sym->name, + num_idents) != SUCCESS) + return FAILURE; + + return retval; +} + + +/* Set the fields marking the given common block as BIND(C), including + a binding label, and report any errors encountered. */ + +gfc_try +set_verify_bind_c_com_block (gfc_common_head *com_block, int num_idents) +{ + gfc_try retval = SUCCESS; + + /* destLabel, common name, typespec (which may have binding label). */ + if (set_binding_label (com_block->binding_label, com_block->name, num_idents) + != SUCCESS) + return FAILURE; + + /* Set the given common block (com_block) to being bind(c) (1). */ + set_com_block_bind_c (com_block, 1); + + return retval; +} + + +/* Retrieve the list of one or more identifiers that the given bind(c) + attribute applies to. */ + +gfc_try +get_bind_c_idents (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + int num_idents = 0; + gfc_symbol *tmp_sym = NULL; + match found_id; + gfc_common_head *com_block = NULL; + + if (gfc_match_name (name) == MATCH_YES) + { + found_id = MATCH_YES; + gfc_get_ha_symbol (name, &tmp_sym); + } + else if (match_common_name (name) == MATCH_YES) + { + found_id = MATCH_YES; + com_block = gfc_get_common (name, 0); + } + else + { + gfc_error ("Need either entity or common block name for " + "attribute specification statement at %C"); + return FAILURE; + } + + /* Save the current identifier and look for more. */ + do + { + /* Increment the number of identifiers found for this spec stmt. */ + num_idents++; + + /* Make sure we have a sym or com block, and verify that it can + be bind(c). Set the appropriate field(s) and look for more + identifiers. */ + if (tmp_sym != NULL || com_block != NULL) + { + if (tmp_sym != NULL) + { + if (set_verify_bind_c_sym (tmp_sym, num_idents) + != SUCCESS) + return FAILURE; + } + else + { + if (set_verify_bind_c_com_block(com_block, num_idents) + != SUCCESS) + return FAILURE; + } + + /* Look to see if we have another identifier. */ + tmp_sym = NULL; + if (gfc_match_eos () == MATCH_YES) + found_id = MATCH_NO; + else if (gfc_match_char (',') != MATCH_YES) + found_id = MATCH_NO; + else if (gfc_match_name (name) == MATCH_YES) + { + found_id = MATCH_YES; + gfc_get_ha_symbol (name, &tmp_sym); + } + else if (match_common_name (name) == MATCH_YES) + { + found_id = MATCH_YES; + com_block = gfc_get_common (name, 0); + } + else + { + gfc_error ("Missing entity or common block name for " + "attribute specification statement at %C"); + return FAILURE; + } + } + else + { + gfc_internal_error ("Missing symbol"); + } + } while (found_id == MATCH_YES); + + /* if we get here we were successful */ + return SUCCESS; +} + + +/* Try and match a BIND(C) attribute specification statement. */ + +match +gfc_match_bind_c_stmt (void) +{ + match found_match = MATCH_NO; + gfc_typespec *ts; + + ts = ¤t_ts; + + /* This may not be necessary. */ + gfc_clear_ts (ts); + /* Clear the temporary binding label holder. */ + curr_binding_label[0] = '\0'; + + /* Look for the bind(c). */ + found_match = gfc_match_bind_c (NULL, true); + + if (found_match == MATCH_YES) + { + /* Look for the :: now, but it is not required. */ + gfc_match (" :: "); + + /* Get the identifier(s) that needs to be updated. This may need to + change to hand the flag(s) for the attr specified so all identifiers + found can have all appropriate parts updated (assuming that the same + spec stmt can have multiple attrs, such as both bind(c) and + allocatable...). */ + if (get_bind_c_idents () != SUCCESS) + /* Error message should have printed already. */ + return MATCH_ERROR; + } + + return found_match; +} + + +/* Match a data declaration statement. */ + +match +gfc_match_data_decl (void) +{ + gfc_symbol *sym; + match m; + int elem; + + num_idents_on_line = 0; + + m = gfc_match_type_spec (¤t_ts, 0); + if (m != MATCH_YES) + return m; + + if (current_ts.type == BT_DERIVED && gfc_current_state () != COMP_DERIVED) + { + sym = gfc_use_derived (current_ts.derived); + + if (sym == NULL) + { + m = MATCH_ERROR; + goto cleanup; + } + + current_ts.derived = sym; + } + + m = match_attr_spec (); + if (m == MATCH_ERROR) + { + m = MATCH_NO; + goto cleanup; + } + + if (current_ts.type == BT_DERIVED && current_ts.derived->components == NULL + && !current_ts.derived->attr.zero_comp) + { + + if (current_attr.pointer && gfc_current_state () == COMP_DERIVED) + goto ok; + + gfc_find_symbol (current_ts.derived->name, + current_ts.derived->ns->parent, 1, &sym); + + /* Any symbol that we find had better be a type definition + which has its components defined. */ + if (sym != NULL && sym->attr.flavor == FL_DERIVED + && (current_ts.derived->components != NULL + || current_ts.derived->attr.zero_comp)) + goto ok; + + /* Now we have an error, which we signal, and then fix up + because the knock-on is plain and simple confusing. */ + gfc_error_now ("Derived type at %C has not been previously defined " + "and so cannot appear in a derived type definition"); + current_attr.pointer = 1; + goto ok; + } + +ok: + /* If we have an old-style character declaration, and no new-style + attribute specifications, then there a comma is optional between + the type specification and the variable list. */ + if (m == MATCH_NO && current_ts.type == BT_CHARACTER && old_char_selector) + gfc_match_char (','); + + /* Give the types/attributes to symbols that follow. Give the element + a number so that repeat character length expressions can be copied. */ + elem = 1; + for (;;) + { + num_idents_on_line++; + m = variable_decl (elem++); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + break; + + if (gfc_match_eos () == MATCH_YES) + goto cleanup; + if (gfc_match_char (',') != MATCH_YES) + break; + } + + if (gfc_error_flag_test () == 0) + gfc_error ("Syntax error in data declaration at %C"); + m = MATCH_ERROR; + + gfc_free_data_all (gfc_current_ns); + +cleanup: + gfc_free_array_spec (current_as); + current_as = NULL; + return m; +} + + +/* Match a prefix associated with a function or subroutine + declaration. If the typespec pointer is nonnull, then a typespec + can be matched. Note that if nothing matches, MATCH_YES is + returned (the null string was matched). */ + +match +gfc_match_prefix (gfc_typespec *ts) +{ + bool seen_type; + + gfc_clear_attr (¤t_attr); + seen_type = 0; + + gcc_assert (!gfc_matching_prefix); + gfc_matching_prefix = true; + +loop: + if (!seen_type && ts != NULL + && gfc_match_type_spec (ts, 0) == MATCH_YES + && gfc_match_space () == MATCH_YES) + { + + seen_type = 1; + goto loop; + } + + if (gfc_match ("elemental% ") == MATCH_YES) + { + if (gfc_add_elemental (¤t_attr, NULL) == FAILURE) + goto error; + + goto loop; + } + + if (gfc_match ("pure% ") == MATCH_YES) + { + if (gfc_add_pure (¤t_attr, NULL) == FAILURE) + goto error; + + goto loop; + } + + if (gfc_match ("recursive% ") == MATCH_YES) + { + if (gfc_add_recursive (¤t_attr, NULL) == FAILURE) + goto error; + + goto loop; + } + + /* At this point, the next item is not a prefix. */ + gcc_assert (gfc_matching_prefix); + gfc_matching_prefix = false; + return MATCH_YES; + +error: + gcc_assert (gfc_matching_prefix); + gfc_matching_prefix = false; + return MATCH_ERROR; +} + + +/* Copy attributes matched by gfc_match_prefix() to attributes on a symbol. */ + +static gfc_try +copy_prefix (symbol_attribute *dest, locus *where) +{ + if (current_attr.pure && gfc_add_pure (dest, where) == FAILURE) + return FAILURE; + + if (current_attr.elemental && gfc_add_elemental (dest, where) == FAILURE) + return FAILURE; + + if (current_attr.recursive && gfc_add_recursive (dest, where) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* Match a formal argument list. */ + +match +gfc_match_formal_arglist (gfc_symbol *progname, int st_flag, int null_flag) +{ + gfc_formal_arglist *head, *tail, *p, *q; + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_symbol *sym; + match m; + + head = tail = NULL; + + if (gfc_match_char ('(') != MATCH_YES) + { + if (null_flag) + goto ok; + return MATCH_NO; + } + + if (gfc_match_char (')') == MATCH_YES) + goto ok; + + for (;;) + { + if (gfc_match_char ('*') == MATCH_YES) + sym = NULL; + else + { + m = gfc_match_name (name); + if (m != MATCH_YES) + goto cleanup; + + if (gfc_get_symbol (name, NULL, &sym)) + goto cleanup; + } + + p = gfc_get_formal_arglist (); + + if (head == NULL) + head = tail = p; + else + { + tail->next = p; + tail = p; + } + + tail->sym = sym; + + /* We don't add the VARIABLE flavor because the name could be a + dummy procedure. We don't apply these attributes to formal + arguments of statement functions. */ + if (sym != NULL && !st_flag + && (gfc_add_dummy (&sym->attr, sym->name, NULL) == FAILURE + || gfc_missing_attr (&sym->attr, NULL) == FAILURE)) + { + m = MATCH_ERROR; + goto cleanup; + } + + /* The name of a program unit can be in a different namespace, + so check for it explicitly. After the statement is accepted, + the name is checked for especially in gfc_get_symbol(). */ + if (gfc_new_block != NULL && sym != NULL + && strcmp (sym->name, gfc_new_block->name) == 0) + { + gfc_error ("Name '%s' at %C is the name of the procedure", + sym->name); + m = MATCH_ERROR; + goto cleanup; + } + + if (gfc_match_char (')') == MATCH_YES) + goto ok; + + m = gfc_match_char (','); + if (m != MATCH_YES) + { + gfc_error ("Unexpected junk in formal argument list at %C"); + goto cleanup; + } + } + +ok: + /* Check for duplicate symbols in the formal argument list. */ + if (head != NULL) + { + for (p = head; p->next; p = p->next) + { + if (p->sym == NULL) + continue; + + for (q = p->next; q; q = q->next) + if (p->sym == q->sym) + { + gfc_error ("Duplicate symbol '%s' in formal argument list " + "at %C", p->sym->name); + + m = MATCH_ERROR; + goto cleanup; + } + } + } + + if (gfc_add_explicit_interface (progname, IFSRC_DECL, head, NULL) + == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + + return MATCH_YES; + +cleanup: + gfc_free_formal_arglist (head); + return m; +} + + +/* Match a RESULT specification following a function declaration or + ENTRY statement. Also matches the end-of-statement. */ + +static match +match_result (gfc_symbol *function, gfc_symbol **result) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_symbol *r; + match m; + + if (gfc_match (" result (") != MATCH_YES) + return MATCH_NO; + + m = gfc_match_name (name); + if (m != MATCH_YES) + return m; + + /* Get the right paren, and that's it because there could be the + bind(c) attribute after the result clause. */ + if (gfc_match_char(')') != MATCH_YES) + { + /* TODO: should report the missing right paren here. */ + return MATCH_ERROR; + } + + if (strcmp (function->name, name) == 0) + { + gfc_error ("RESULT variable at %C must be different than function name"); + return MATCH_ERROR; + } + + if (gfc_get_symbol (name, NULL, &r)) + return MATCH_ERROR; + + if (gfc_add_result (&r->attr, r->name, NULL) == FAILURE) + return MATCH_ERROR; + + *result = r; + + return MATCH_YES; +} + + +/* Match a function suffix, which could be a combination of a result + clause and BIND(C), either one, or neither. The draft does not + require them to come in a specific order. */ + +match +gfc_match_suffix (gfc_symbol *sym, gfc_symbol **result) +{ + match is_bind_c; /* Found bind(c). */ + match is_result; /* Found result clause. */ + match found_match; /* Status of whether we've found a good match. */ + char peek_char; /* Character we're going to peek at. */ + bool allow_binding_name; + + /* Initialize to having found nothing. */ + found_match = MATCH_NO; + is_bind_c = MATCH_NO; + is_result = MATCH_NO; + + /* Get the next char to narrow between result and bind(c). */ + gfc_gobble_whitespace (); + peek_char = gfc_peek_ascii_char (); + + /* C binding names are not allowed for internal procedures. */ + if (gfc_current_state () == COMP_CONTAINS + && sym->ns->proc_name->attr.flavor != FL_MODULE) + allow_binding_name = false; + else + allow_binding_name = true; + + switch (peek_char) + { + case 'r': + /* Look for result clause. */ + is_result = match_result (sym, result); + if (is_result == MATCH_YES) + { + /* Now see if there is a bind(c) after it. */ + is_bind_c = gfc_match_bind_c (sym, allow_binding_name); + /* We've found the result clause and possibly bind(c). */ + found_match = MATCH_YES; + } + else + /* This should only be MATCH_ERROR. */ + found_match = is_result; + break; + case 'b': + /* Look for bind(c) first. */ + is_bind_c = gfc_match_bind_c (sym, allow_binding_name); + if (is_bind_c == MATCH_YES) + { + /* Now see if a result clause followed it. */ + is_result = match_result (sym, result); + found_match = MATCH_YES; + } + else + { + /* Should only be a MATCH_ERROR if we get here after seeing 'b'. */ + found_match = MATCH_ERROR; + } + break; + default: + gfc_error ("Unexpected junk after function declaration at %C"); + found_match = MATCH_ERROR; + break; + } + + if (is_bind_c == MATCH_YES) + { + /* Fortran 2008 draft allows BIND(C) for internal procedures. */ + if (gfc_current_state () == COMP_CONTAINS + && sym->ns->proc_name->attr.flavor != FL_MODULE + && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: BIND(C) attribute " + "at %L may not be specified for an internal " + "procedure", &gfc_current_locus) + == FAILURE) + return MATCH_ERROR; + + if (gfc_add_is_bind_c (&(sym->attr), sym->name, &gfc_current_locus, 1) + == FAILURE) + return MATCH_ERROR; + } + + return found_match; +} + + +/* Match a PROCEDURE declaration (R1211). */ + +static match +match_procedure_decl (void) +{ + match m; + locus old_loc, entry_loc; + gfc_symbol *sym, *proc_if = NULL; + int num; + gfc_expr *initializer = NULL; + + old_loc = entry_loc = gfc_current_locus; + + gfc_clear_ts (¤t_ts); + + if (gfc_match (" (") != MATCH_YES) + { + gfc_current_locus = entry_loc; + return MATCH_NO; + } + + /* Get the type spec. for the procedure interface. */ + old_loc = gfc_current_locus; + m = gfc_match_type_spec (¤t_ts, 0); + gfc_gobble_whitespace (); + if (m == MATCH_YES || (m == MATCH_NO && gfc_peek_ascii_char () == ')')) + goto got_ts; + + if (m == MATCH_ERROR) + return m; + + gfc_current_locus = old_loc; + + /* Get the name of the procedure or abstract interface + to inherit the interface from. */ + m = gfc_match_symbol (&proc_if, 1); + + if (m == MATCH_NO) + goto syntax; + else if (m == MATCH_ERROR) + return m; + + /* Various interface checks. */ + if (proc_if) + { + proc_if->refs++; + /* Resolve interface if possible. That way, attr.procedure is only set + if it is declared by a later procedure-declaration-stmt, which is + invalid per C1212. */ + while (proc_if->ts.interface) + proc_if = proc_if->ts.interface; + + if (proc_if->generic) + { + gfc_error ("Interface '%s' at %C may not be generic", proc_if->name); + return MATCH_ERROR; + } + if (proc_if->attr.proc == PROC_ST_FUNCTION) + { + gfc_error ("Interface '%s' at %C may not be a statement function", + proc_if->name); + return MATCH_ERROR; + } + /* Handle intrinsic procedures. */ + if (!(proc_if->attr.external || proc_if->attr.use_assoc + || proc_if->attr.if_source == IFSRC_IFBODY) + && (gfc_is_intrinsic (proc_if, 0, gfc_current_locus) + || gfc_is_intrinsic (proc_if, 1, gfc_current_locus))) + proc_if->attr.intrinsic = 1; + if (proc_if->attr.intrinsic + && !gfc_intrinsic_actual_ok (proc_if->name, 0)) + { + gfc_error ("Intrinsic procedure '%s' not allowed " + "in PROCEDURE statement at %C", proc_if->name); + return MATCH_ERROR; + } + } + +got_ts: + if (gfc_match (" )") != MATCH_YES) + { + gfc_current_locus = entry_loc; + return MATCH_NO; + } + + /* Parse attributes. */ + m = match_attr_spec(); + if (m == MATCH_ERROR) + return MATCH_ERROR; + + /* Get procedure symbols. */ + for(num=1;;num++) + { + m = gfc_match_symbol (&sym, 0); + if (m == MATCH_NO) + goto syntax; + else if (m == MATCH_ERROR) + return m; + + /* Add current_attr to the symbol attributes. */ + if (gfc_copy_attr (&sym->attr, ¤t_attr, NULL) == FAILURE) + return MATCH_ERROR; + + if (sym->attr.is_bind_c) + { + /* Check for C1218. */ + if (!proc_if || !proc_if->attr.is_bind_c) + { + gfc_error ("BIND(C) attribute at %C requires " + "an interface with BIND(C)"); + return MATCH_ERROR; + } + /* Check for C1217. */ + if (has_name_equals && sym->attr.pointer) + { + gfc_error ("BIND(C) procedure with NAME may not have " + "POINTER attribute at %C"); + return MATCH_ERROR; + } + if (has_name_equals && sym->attr.dummy) + { + gfc_error ("Dummy procedure at %C may not have " + "BIND(C) attribute with NAME"); + return MATCH_ERROR; + } + /* Set binding label for BIND(C). */ + if (set_binding_label (sym->binding_label, sym->name, num) != SUCCESS) + return MATCH_ERROR; + } + + if (gfc_add_external (&sym->attr, NULL) == FAILURE) + return MATCH_ERROR; + if (gfc_add_proc (&sym->attr, sym->name, NULL) == FAILURE) + return MATCH_ERROR; + + /* Set interface. */ + if (proc_if != NULL) + { + sym->ts.interface = proc_if; + sym->attr.untyped = 1; + } + else if (current_ts.type != BT_UNKNOWN) + { + sym->ts = current_ts; + sym->ts.interface = gfc_new_symbol ("", gfc_current_ns); + sym->ts.interface->ts = current_ts; + sym->ts.interface->attr.function = 1; + sym->attr.function = sym->ts.interface->attr.function; + } + + if (gfc_match (" =>") == MATCH_YES) + { + if (!current_attr.pointer) + { + gfc_error ("Initialization at %C isn't for a pointer variable"); + m = MATCH_ERROR; + goto cleanup; + } + + m = gfc_match_null (&initializer); + if (m == MATCH_NO) + { + gfc_error ("Pointer initialization requires a NULL() at %C"); + m = MATCH_ERROR; + } + + if (gfc_pure (NULL)) + { + gfc_error ("Initialization of pointer at %C is not allowed in " + "a PURE procedure"); + m = MATCH_ERROR; + } + + if (m != MATCH_YES) + goto cleanup; + + if (add_init_expr_to_sym (sym->name, &initializer, &gfc_current_locus) + != SUCCESS) + goto cleanup; + + } + + gfc_set_sym_referenced (sym); + + if (gfc_match_eos () == MATCH_YES) + return MATCH_YES; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + +syntax: + gfc_error ("Syntax error in PROCEDURE statement at %C"); + return MATCH_ERROR; + +cleanup: + /* Free stuff up and return. */ + gfc_free_expr (initializer); + return m; +} + + +/* Match a PROCEDURE declaration inside an interface (R1206). */ + +static match +match_procedure_in_interface (void) +{ + match m; + gfc_symbol *sym; + char name[GFC_MAX_SYMBOL_LEN + 1]; + + if (current_interface.type == INTERFACE_NAMELESS + || current_interface.type == INTERFACE_ABSTRACT) + { + gfc_error ("PROCEDURE at %C must be in a generic interface"); + return MATCH_ERROR; + } + + for(;;) + { + m = gfc_match_name (name); + if (m == MATCH_NO) + goto syntax; + else if (m == MATCH_ERROR) + return m; + if (gfc_get_symbol (name, gfc_current_ns->parent, &sym)) + return MATCH_ERROR; + + if (gfc_add_interface (sym) == FAILURE) + return MATCH_ERROR; + + if (gfc_match_eos () == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in PROCEDURE statement at %C"); + return MATCH_ERROR; +} + + +/* General matcher for PROCEDURE declarations. */ + +static match match_procedure_in_type (void); + +match +gfc_match_procedure (void) +{ + match m; + + switch (gfc_current_state ()) + { + case COMP_NONE: + case COMP_PROGRAM: + case COMP_MODULE: + case COMP_SUBROUTINE: + case COMP_FUNCTION: + m = match_procedure_decl (); + break; + case COMP_INTERFACE: + m = match_procedure_in_interface (); + break; + case COMP_DERIVED: + gfc_error ("Fortran 2003: Procedure components at %C are not yet" + " implemented in gfortran"); + return MATCH_ERROR; + case COMP_DERIVED_CONTAINS: + m = match_procedure_in_type (); + break; + default: + return MATCH_NO; + } + + if (m != MATCH_YES) + return m; + + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: PROCEDURE statement at %C") + == FAILURE) + return MATCH_ERROR; + + return m; +} + + +/* Warn if a matched procedure has the same name as an intrinsic; this is + simply a wrapper around gfc_warn_intrinsic_shadow that interprets the current + parser-state-stack to find out whether we're in a module. */ + +static void +warn_intrinsic_shadow (const gfc_symbol* sym, bool func) +{ + bool in_module; + + in_module = (gfc_state_stack->previous + && gfc_state_stack->previous->state == COMP_MODULE); + + gfc_warn_intrinsic_shadow (sym, in_module, func); +} + + +/* Match a function declaration. */ + +match +gfc_match_function_decl (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_symbol *sym, *result; + locus old_loc; + match m; + match suffix_match; + match found_match; /* Status returned by match func. */ + + if (gfc_current_state () != COMP_NONE + && gfc_current_state () != COMP_INTERFACE + && gfc_current_state () != COMP_CONTAINS) + return MATCH_NO; + + gfc_clear_ts (¤t_ts); + + old_loc = gfc_current_locus; + + m = gfc_match_prefix (¤t_ts); + if (m != MATCH_YES) + { + gfc_current_locus = old_loc; + return m; + } + + if (gfc_match ("function% %n", name) != MATCH_YES) + { + gfc_current_locus = old_loc; + return MATCH_NO; + } + if (get_proc_name (name, &sym, false)) + return MATCH_ERROR; + gfc_new_block = sym; + + m = gfc_match_formal_arglist (sym, 0, 0); + if (m == MATCH_NO) + { + gfc_error ("Expected formal argument list in function " + "definition at %C"); + m = MATCH_ERROR; + goto cleanup; + } + else if (m == MATCH_ERROR) + goto cleanup; + + result = NULL; + + /* According to the draft, the bind(c) and result clause can + come in either order after the formal_arg_list (i.e., either + can be first, both can exist together or by themselves or neither + one). Therefore, the match_result can't match the end of the + string, and check for the bind(c) or result clause in either order. */ + found_match = gfc_match_eos (); + + /* Make sure that it isn't already declared as BIND(C). If it is, it + must have been marked BIND(C) with a BIND(C) attribute and that is + not allowed for procedures. */ + if (sym->attr.is_bind_c == 1) + { + sym->attr.is_bind_c = 0; + if (sym->old_symbol != NULL) + gfc_error_now ("BIND(C) attribute at %L can only be used for " + "variables or common blocks", + &(sym->old_symbol->declared_at)); + else + gfc_error_now ("BIND(C) attribute at %L can only be used for " + "variables or common blocks", &gfc_current_locus); + } + + if (found_match != MATCH_YES) + { + /* If we haven't found the end-of-statement, look for a suffix. */ + suffix_match = gfc_match_suffix (sym, &result); + if (suffix_match == MATCH_YES) + /* Need to get the eos now. */ + found_match = gfc_match_eos (); + else + found_match = suffix_match; + } + + if(found_match != MATCH_YES) + m = MATCH_ERROR; + else + { + /* Make changes to the symbol. */ + m = MATCH_ERROR; + + if (gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE) + goto cleanup; + + if (gfc_missing_attr (&sym->attr, NULL) == FAILURE + || copy_prefix (&sym->attr, &sym->declared_at) == FAILURE) + goto cleanup; + + if (current_ts.type != BT_UNKNOWN && sym->ts.type != BT_UNKNOWN + && !sym->attr.implicit_type) + { + gfc_error ("Function '%s' at %C already has a type of %s", name, + gfc_basic_typename (sym->ts.type)); + goto cleanup; + } + + /* Delay matching the function characteristics until after the + specification block by signalling kind=-1. */ + sym->declared_at = old_loc; + if (current_ts.type != BT_UNKNOWN) + current_ts.kind = -1; + else + current_ts.kind = 0; + + if (result == NULL) + { + sym->ts = current_ts; + sym->result = sym; + } + else + { + result->ts = current_ts; + sym->result = result; + } + + /* Warn if this procedure has the same name as an intrinsic. */ + warn_intrinsic_shadow (sym, true); + + return MATCH_YES; + } + +cleanup: + gfc_current_locus = old_loc; + return m; +} + + +/* This is mostly a copy of parse.c(add_global_procedure) but modified to + pass the name of the entry, rather than the gfc_current_block name, and + to return false upon finding an existing global entry. */ + +static bool +add_global_entry (const char *name, int sub) +{ + gfc_gsymbol *s; + unsigned int type; + + s = gfc_get_gsymbol(name); + type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION; + + if (s->defined + || (s->type != GSYM_UNKNOWN + && s->type != type)) + gfc_global_used(s, NULL); + else + { + s->type = type; + s->where = gfc_current_locus; + s->defined = 1; + return true; + } + return false; +} + + +/* Match an ENTRY statement. */ + +match +gfc_match_entry (void) +{ + gfc_symbol *proc; + gfc_symbol *result; + gfc_symbol *entry; + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_compile_state state; + match m; + gfc_entry_list *el; + locus old_loc; + bool module_procedure; + char peek_char; + match is_bind_c; + + m = gfc_match_name (name); + if (m != MATCH_YES) + return m; + + state = gfc_current_state (); + if (state != COMP_SUBROUTINE && state != COMP_FUNCTION) + { + switch (state) + { + case COMP_PROGRAM: + gfc_error ("ENTRY statement at %C cannot appear within a PROGRAM"); + break; + case COMP_MODULE: + gfc_error ("ENTRY statement at %C cannot appear within a MODULE"); + break; + case COMP_BLOCK_DATA: + gfc_error ("ENTRY statement at %C cannot appear within " + "a BLOCK DATA"); + break; + case COMP_INTERFACE: + gfc_error ("ENTRY statement at %C cannot appear within " + "an INTERFACE"); + break; + case COMP_DERIVED: + gfc_error ("ENTRY statement at %C cannot appear within " + "a DERIVED TYPE block"); + break; + case COMP_IF: + gfc_error ("ENTRY statement at %C cannot appear within " + "an IF-THEN block"); + break; + case COMP_DO: + gfc_error ("ENTRY statement at %C cannot appear within " + "a DO block"); + break; + case COMP_SELECT: + gfc_error ("ENTRY statement at %C cannot appear within " + "a SELECT block"); + break; + case COMP_FORALL: + gfc_error ("ENTRY statement at %C cannot appear within " + "a FORALL block"); + break; + case COMP_WHERE: + gfc_error ("ENTRY statement at %C cannot appear within " + "a WHERE block"); + break; + case COMP_CONTAINS: + gfc_error ("ENTRY statement at %C cannot appear within " + "a contained subprogram"); + break; + default: + gfc_internal_error ("gfc_match_entry(): Bad state"); + } + return MATCH_ERROR; + } + + module_procedure = gfc_current_ns->parent != NULL + && gfc_current_ns->parent->proc_name + && gfc_current_ns->parent->proc_name->attr.flavor + == FL_MODULE; + + if (gfc_current_ns->parent != NULL + && gfc_current_ns->parent->proc_name + && !module_procedure) + { + gfc_error("ENTRY statement at %C cannot appear in a " + "contained procedure"); + return MATCH_ERROR; + } + + /* Module function entries need special care in get_proc_name + because previous references within the function will have + created symbols attached to the current namespace. */ + if (get_proc_name (name, &entry, + gfc_current_ns->parent != NULL + && module_procedure)) + return MATCH_ERROR; + + proc = gfc_current_block (); + + /* Make sure that it isn't already declared as BIND(C). If it is, it + must have been marked BIND(C) with a BIND(C) attribute and that is + not allowed for procedures. */ + if (entry->attr.is_bind_c == 1) + { + entry->attr.is_bind_c = 0; + if (entry->old_symbol != NULL) + gfc_error_now ("BIND(C) attribute at %L can only be used for " + "variables or common blocks", + &(entry->old_symbol->declared_at)); + else + gfc_error_now ("BIND(C) attribute at %L can only be used for " + "variables or common blocks", &gfc_current_locus); + } + + /* Check what next non-whitespace character is so we can tell if there + is the required parens if we have a BIND(C). */ + gfc_gobble_whitespace (); + peek_char = gfc_peek_ascii_char (); + + if (state == COMP_SUBROUTINE) + { + /* An entry in a subroutine. */ + if (!gfc_current_ns->parent && !add_global_entry (name, 1)) + return MATCH_ERROR; + + m = gfc_match_formal_arglist (entry, 0, 1); + if (m != MATCH_YES) + return MATCH_ERROR; + + /* Call gfc_match_bind_c with allow_binding_name = true as ENTRY can + never be an internal procedure. */ + is_bind_c = gfc_match_bind_c (entry, true); + if (is_bind_c == MATCH_ERROR) + return MATCH_ERROR; + if (is_bind_c == MATCH_YES) + { + if (peek_char != '(') + { + gfc_error ("Missing required parentheses before BIND(C) at %C"); + return MATCH_ERROR; + } + if (gfc_add_is_bind_c (&(entry->attr), entry->name, &(entry->declared_at), 1) + == FAILURE) + return MATCH_ERROR; + } + + if (gfc_add_entry (&entry->attr, entry->name, NULL) == FAILURE + || gfc_add_subroutine (&entry->attr, entry->name, NULL) == FAILURE) + return MATCH_ERROR; + } + else + { + /* An entry in a function. + We need to take special care because writing + ENTRY f() + as + ENTRY f + is allowed, whereas + ENTRY f() RESULT (r) + can't be written as + ENTRY f RESULT (r). */ + if (!gfc_current_ns->parent && !add_global_entry (name, 0)) + return MATCH_ERROR; + + old_loc = gfc_current_locus; + if (gfc_match_eos () == MATCH_YES) + { + gfc_current_locus = old_loc; + /* Match the empty argument list, and add the interface to + the symbol. */ + m = gfc_match_formal_arglist (entry, 0, 1); + } + else + m = gfc_match_formal_arglist (entry, 0, 0); + + if (m != MATCH_YES) + return MATCH_ERROR; + + result = NULL; + + if (gfc_match_eos () == MATCH_YES) + { + if (gfc_add_entry (&entry->attr, entry->name, NULL) == FAILURE + || gfc_add_function (&entry->attr, entry->name, NULL) == FAILURE) + return MATCH_ERROR; + + entry->result = entry; + } + else + { + m = gfc_match_suffix (entry, &result); + if (m == MATCH_NO) + gfc_syntax_error (ST_ENTRY); + if (m != MATCH_YES) + return MATCH_ERROR; + + if (result) + { + if (gfc_add_result (&result->attr, result->name, NULL) == FAILURE + || gfc_add_entry (&entry->attr, result->name, NULL) == FAILURE + || gfc_add_function (&entry->attr, result->name, NULL) + == FAILURE) + return MATCH_ERROR; + entry->result = result; + } + else + { + if (gfc_add_entry (&entry->attr, entry->name, NULL) == FAILURE + || gfc_add_function (&entry->attr, entry->name, NULL) == FAILURE) + return MATCH_ERROR; + entry->result = entry; + } + } + } + + if (gfc_match_eos () != MATCH_YES) + { + gfc_syntax_error (ST_ENTRY); + return MATCH_ERROR; + } + + entry->attr.recursive = proc->attr.recursive; + entry->attr.elemental = proc->attr.elemental; + entry->attr.pure = proc->attr.pure; + + el = gfc_get_entry_list (); + el->sym = entry; + el->next = gfc_current_ns->entries; + gfc_current_ns->entries = el; + if (el->next) + el->id = el->next->id + 1; + else + el->id = 1; + + new_st.op = EXEC_ENTRY; + new_st.ext.entry = el; + + return MATCH_YES; +} + + +/* Match a subroutine statement, including optional prefixes. */ + +match +gfc_match_subroutine (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_symbol *sym; + match m; + match is_bind_c; + char peek_char; + bool allow_binding_name; + + if (gfc_current_state () != COMP_NONE + && gfc_current_state () != COMP_INTERFACE + && gfc_current_state () != COMP_CONTAINS) + return MATCH_NO; + + m = gfc_match_prefix (NULL); + if (m != MATCH_YES) + return m; + + m = gfc_match ("subroutine% %n", name); + if (m != MATCH_YES) + return m; + + if (get_proc_name (name, &sym, false)) + return MATCH_ERROR; + gfc_new_block = sym; + + /* Check what next non-whitespace character is so we can tell if there + is the required parens if we have a BIND(C). */ + gfc_gobble_whitespace (); + peek_char = gfc_peek_ascii_char (); + + if (gfc_add_subroutine (&sym->attr, sym->name, NULL) == FAILURE) + return MATCH_ERROR; + + if (gfc_match_formal_arglist (sym, 0, 1) != MATCH_YES) + return MATCH_ERROR; + + /* Make sure that it isn't already declared as BIND(C). If it is, it + must have been marked BIND(C) with a BIND(C) attribute and that is + not allowed for procedures. */ + if (sym->attr.is_bind_c == 1) + { + sym->attr.is_bind_c = 0; + if (sym->old_symbol != NULL) + gfc_error_now ("BIND(C) attribute at %L can only be used for " + "variables or common blocks", + &(sym->old_symbol->declared_at)); + else + gfc_error_now ("BIND(C) attribute at %L can only be used for " + "variables or common blocks", &gfc_current_locus); + } + + /* C binding names are not allowed for internal procedures. */ + if (gfc_current_state () == COMP_CONTAINS + && sym->ns->proc_name->attr.flavor != FL_MODULE) + allow_binding_name = false; + else + allow_binding_name = true; + + /* Here, we are just checking if it has the bind(c) attribute, and if + so, then we need to make sure it's all correct. If it doesn't, + we still need to continue matching the rest of the subroutine line. */ + is_bind_c = gfc_match_bind_c (sym, allow_binding_name); + if (is_bind_c == MATCH_ERROR) + { + /* There was an attempt at the bind(c), but it was wrong. An + error message should have been printed w/in the gfc_match_bind_c + so here we'll just return the MATCH_ERROR. */ + return MATCH_ERROR; + } + + if (is_bind_c == MATCH_YES) + { + /* The following is allowed in the Fortran 2008 draft. */ + if (gfc_current_state () == COMP_CONTAINS + && sym->ns->proc_name->attr.flavor != FL_MODULE + && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: BIND(C) attribute " + "at %L may not be specified for an internal " + "procedure", &gfc_current_locus) + == FAILURE) + return MATCH_ERROR; + + if (peek_char != '(') + { + gfc_error ("Missing required parentheses before BIND(C) at %C"); + return MATCH_ERROR; + } + if (gfc_add_is_bind_c (&(sym->attr), sym->name, &(sym->declared_at), 1) + == FAILURE) + return MATCH_ERROR; + } + + if (gfc_match_eos () != MATCH_YES) + { + gfc_syntax_error (ST_SUBROUTINE); + return MATCH_ERROR; + } + + if (copy_prefix (&sym->attr, &sym->declared_at) == FAILURE) + return MATCH_ERROR; + + /* Warn if it has the same name as an intrinsic. */ + warn_intrinsic_shadow (sym, false); + + return MATCH_YES; +} + + +/* Match a BIND(C) specifier, with the optional 'name=' specifier if + given, and set the binding label in either the given symbol (if not + NULL), or in the current_ts. The symbol may be NULL because we may + encounter the BIND(C) before the declaration itself. Return + MATCH_NO if what we're looking at isn't a BIND(C) specifier, + MATCH_ERROR if it is a BIND(C) clause but an error was encountered, + or MATCH_YES if the specifier was correct and the binding label and + bind(c) fields were set correctly for the given symbol or the + current_ts. If allow_binding_name is false, no binding name may be + given. */ + +match +gfc_match_bind_c (gfc_symbol *sym, bool allow_binding_name) +{ + /* binding label, if exists */ + char binding_label[GFC_MAX_SYMBOL_LEN + 1]; + match double_quote; + match single_quote; + + /* Initialize the flag that specifies whether we encountered a NAME= + specifier or not. */ + has_name_equals = 0; + + /* Init the first char to nil so we can catch if we don't have + the label (name attr) or the symbol name yet. */ + binding_label[0] = '\0'; + + /* This much we have to be able to match, in this order, if + there is a bind(c) label. */ + if (gfc_match (" bind ( c ") != MATCH_YES) + return MATCH_NO; + + /* Now see if there is a binding label, or if we've reached the + end of the bind(c) attribute without one. */ + if (gfc_match_char (',') == MATCH_YES) + { + if (gfc_match (" name = ") != MATCH_YES) + { + gfc_error ("Syntax error in NAME= specifier for binding label " + "at %C"); + /* should give an error message here */ + return MATCH_ERROR; + } + + has_name_equals = 1; + + /* Get the opening quote. */ + double_quote = MATCH_YES; + single_quote = MATCH_YES; + double_quote = gfc_match_char ('"'); + if (double_quote != MATCH_YES) + single_quote = gfc_match_char ('\''); + if (double_quote != MATCH_YES && single_quote != MATCH_YES) + { + gfc_error ("Syntax error in NAME= specifier for binding label " + "at %C"); + return MATCH_ERROR; + } + + /* Grab the binding label, using functions that will not lower + case the names automatically. */ + if (gfc_match_name_C (binding_label) != MATCH_YES) + return MATCH_ERROR; + + /* Get the closing quotation. */ + if (double_quote == MATCH_YES) + { + if (gfc_match_char ('"') != MATCH_YES) + { + gfc_error ("Missing closing quote '\"' for binding label at %C"); + /* User started string with '"' so looked to match it. */ + return MATCH_ERROR; + } + } + else + { + if (gfc_match_char ('\'') != MATCH_YES) + { + gfc_error ("Missing closing quote '\'' for binding label at %C"); + /* User started string with "'" char. */ + return MATCH_ERROR; + } + } + } + + /* Get the required right paren. */ + if (gfc_match_char (')') != MATCH_YES) + { + gfc_error ("Missing closing paren for binding label at %C"); + return MATCH_ERROR; + } + + if (has_name_equals && !allow_binding_name) + { + gfc_error ("No binding name is allowed in BIND(C) at %C"); + return MATCH_ERROR; + } + + if (has_name_equals && sym != NULL && sym->attr.dummy) + { + gfc_error ("For dummy procedure %s, no binding name is " + "allowed in BIND(C) at %C", sym->name); + return MATCH_ERROR; + } + + + /* Save the binding label to the symbol. If sym is null, we're + probably matching the typespec attributes of a declaration and + haven't gotten the name yet, and therefore, no symbol yet. */ + if (binding_label[0] != '\0') + { + if (sym != NULL) + { + strcpy (sym->binding_label, binding_label); + } + else + strcpy (curr_binding_label, binding_label); + } + else if (allow_binding_name) + { + /* No binding label, but if symbol isn't null, we + can set the label for it here. + If name="" or allow_binding_name is false, no C binding name is + created. */ + if (sym != NULL && sym->name != NULL && has_name_equals == 0) + strncpy (sym->binding_label, sym->name, strlen (sym->name) + 1); + } + + if (has_name_equals && gfc_current_state () == COMP_INTERFACE + && current_interface.type == INTERFACE_ABSTRACT) + { + gfc_error ("NAME not allowed on BIND(C) for ABSTRACT INTERFACE at %C"); + return MATCH_ERROR; + } + + return MATCH_YES; +} + + +/* Return nonzero if we're currently compiling a contained procedure. */ + +static int +contained_procedure (void) +{ + gfc_state_data *s = gfc_state_stack; + + if ((s->state == COMP_SUBROUTINE || s->state == COMP_FUNCTION) + && s->previous != NULL && s->previous->state == COMP_CONTAINS) + return 1; + + return 0; +} + +/* Set the kind of each enumerator. The kind is selected such that it is + interoperable with the corresponding C enumeration type, making + sure that -fshort-enums is honored. */ + +static void +set_enum_kind(void) +{ + enumerator_history *current_history = NULL; + int kind; + int i; + + if (max_enum == NULL || enum_history == NULL) + return; + + if (!gfc_option.fshort_enums) + return; + + i = 0; + do + { + kind = gfc_integer_kinds[i++].kind; + } + while (kind < gfc_c_int_kind + && gfc_check_integer_range (max_enum->initializer->value.integer, + kind) != ARITH_OK); + + current_history = enum_history; + while (current_history != NULL) + { + current_history->sym->ts.kind = kind; + current_history = current_history->next; + } +} + + +/* Match any of the various end-block statements. Returns the type of + END to the caller. The END INTERFACE, END IF, END DO and END + SELECT statements cannot be replaced by a single END statement. */ + +match +gfc_match_end (gfc_statement *st) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_compile_state state; + locus old_loc; + const char *block_name; + const char *target; + int eos_ok; + match m; + + old_loc = gfc_current_locus; + if (gfc_match ("end") != MATCH_YES) + return MATCH_NO; + + state = gfc_current_state (); + block_name = gfc_current_block () == NULL + ? NULL : gfc_current_block ()->name; + + if (state == COMP_CONTAINS || state == COMP_DERIVED_CONTAINS) + { + state = gfc_state_stack->previous->state; + block_name = gfc_state_stack->previous->sym == NULL + ? NULL : gfc_state_stack->previous->sym->name; + } + + switch (state) + { + case COMP_NONE: + case COMP_PROGRAM: + *st = ST_END_PROGRAM; + target = " program"; + eos_ok = 1; + break; + + case COMP_SUBROUTINE: + *st = ST_END_SUBROUTINE; + target = " subroutine"; + eos_ok = !contained_procedure (); + break; + + case COMP_FUNCTION: + *st = ST_END_FUNCTION; + target = " function"; + eos_ok = !contained_procedure (); + break; + + case COMP_BLOCK_DATA: + *st = ST_END_BLOCK_DATA; + target = " block data"; + eos_ok = 1; + break; + + case COMP_MODULE: + *st = ST_END_MODULE; + target = " module"; + eos_ok = 1; + break; + + case COMP_INTERFACE: + *st = ST_END_INTERFACE; + target = " interface"; + eos_ok = 0; + break; + + case COMP_DERIVED: + case COMP_DERIVED_CONTAINS: + *st = ST_END_TYPE; + target = " type"; + eos_ok = 0; + break; + + case COMP_IF: + *st = ST_ENDIF; + target = " if"; + eos_ok = 0; + break; + + case COMP_DO: + *st = ST_ENDDO; + target = " do"; + eos_ok = 0; + break; + + case COMP_SELECT: + *st = ST_END_SELECT; + target = " select"; + eos_ok = 0; + break; + + case COMP_FORALL: + *st = ST_END_FORALL; + target = " forall"; + eos_ok = 0; + break; + + case COMP_WHERE: + *st = ST_END_WHERE; + target = " where"; + eos_ok = 0; + break; + + case COMP_ENUM: + *st = ST_END_ENUM; + target = " enum"; + eos_ok = 0; + last_initializer = NULL; + set_enum_kind (); + gfc_free_enum_history (); + break; + + default: + gfc_error ("Unexpected END statement at %C"); + goto cleanup; + } + + if (gfc_match_eos () == MATCH_YES) + { + if (!eos_ok) + { + /* We would have required END [something]. */ + gfc_error ("%s statement expected at %L", + gfc_ascii_statement (*st), &old_loc); + goto cleanup; + } + + return MATCH_YES; + } + + /* Verify that we've got the sort of end-block that we're expecting. */ + if (gfc_match (target) != MATCH_YES) + { + gfc_error ("Expecting %s statement at %C", gfc_ascii_statement (*st)); + goto cleanup; + } + + /* If we're at the end, make sure a block name wasn't required. */ + if (gfc_match_eos () == MATCH_YES) + { + + if (*st != ST_ENDDO && *st != ST_ENDIF && *st != ST_END_SELECT + && *st != ST_END_FORALL && *st != ST_END_WHERE) + return MATCH_YES; + + if (gfc_current_block () == NULL) + return MATCH_YES; + + gfc_error ("Expected block name of '%s' in %s statement at %C", + block_name, gfc_ascii_statement (*st)); + + return MATCH_ERROR; + } + + /* END INTERFACE has a special handler for its several possible endings. */ + if (*st == ST_END_INTERFACE) + return gfc_match_end_interface (); + + /* We haven't hit the end of statement, so what is left must be an + end-name. */ + m = gfc_match_space (); + if (m == MATCH_YES) + m = gfc_match_name (name); + + if (m == MATCH_NO) + gfc_error ("Expected terminating name at %C"); + if (m != MATCH_YES) + goto cleanup; + + if (block_name == NULL) + goto syntax; + + if (strcmp (name, block_name) != 0) + { + gfc_error ("Expected label '%s' for %s statement at %C", block_name, + gfc_ascii_statement (*st)); + goto cleanup; + } + + if (gfc_match_eos () == MATCH_YES) + return MATCH_YES; + +syntax: + gfc_syntax_error (*st); + +cleanup: + gfc_current_locus = old_loc; + return MATCH_ERROR; +} + + + +/***************** Attribute declaration statements ****************/ + +/* Set the attribute of a single variable. */ + +static match +attr_decl1 (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_array_spec *as; + gfc_symbol *sym; + locus var_locus; + match m; + + as = NULL; + + m = gfc_match_name (name); + if (m != MATCH_YES) + goto cleanup; + + if (find_special (name, &sym)) + return MATCH_ERROR; + + var_locus = gfc_current_locus; + + /* Deal with possible array specification for certain attributes. */ + if (current_attr.dimension + || current_attr.allocatable + || current_attr.pointer + || current_attr.target) + { + m = gfc_match_array_spec (&as); + if (m == MATCH_ERROR) + goto cleanup; + + if (current_attr.dimension && m == MATCH_NO) + { + gfc_error ("Missing array specification at %L in DIMENSION " + "statement", &var_locus); + m = MATCH_ERROR; + goto cleanup; + } + + if (current_attr.dimension && sym->value) + { + gfc_error ("Dimensions specified for %s at %L after its " + "initialisation", sym->name, &var_locus); + m = MATCH_ERROR; + goto cleanup; + } + + if ((current_attr.allocatable || current_attr.pointer) + && (m == MATCH_YES) && (as->type != AS_DEFERRED)) + { + gfc_error ("Array specification must be deferred at %L", &var_locus); + m = MATCH_ERROR; + goto cleanup; + } + } + + /* Update symbol table. DIMENSION attribute is set + in gfc_set_array_spec(). */ + if (current_attr.dimension == 0 + && gfc_copy_attr (&sym->attr, ¤t_attr, &var_locus) == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + + if (gfc_set_array_spec (sym, as, &var_locus) == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + + if (sym->attr.cray_pointee && sym->as != NULL) + { + /* Fix the array spec. */ + m = gfc_mod_pointee_as (sym->as); + if (m == MATCH_ERROR) + goto cleanup; + } + + if (gfc_add_attribute (&sym->attr, &var_locus) == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + + if ((current_attr.external || current_attr.intrinsic) + && sym->attr.flavor != FL_PROCEDURE + && gfc_add_flavor (&sym->attr, FL_PROCEDURE, sym->name, NULL) == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + + return MATCH_YES; + +cleanup: + gfc_free_array_spec (as); + return m; +} + + +/* Generic attribute declaration subroutine. Used for attributes that + just have a list of names. */ + +static match +attr_decl (void) +{ + match m; + + /* Gobble the optional double colon, by simply ignoring the result + of gfc_match(). */ + gfc_match (" ::"); + + for (;;) + { + m = attr_decl1 (); + if (m != MATCH_YES) + break; + + if (gfc_match_eos () == MATCH_YES) + { + m = MATCH_YES; + break; + } + + if (gfc_match_char (',') != MATCH_YES) + { + gfc_error ("Unexpected character in variable list at %C"); + m = MATCH_ERROR; + break; + } + } + + return m; +} + + +/* This routine matches Cray Pointer declarations of the form: + pointer ( , ) + or + pointer ( , ), ( , ), ... + The pointer, if already declared, should be an integer. Otherwise, we + set it as BT_INTEGER with kind gfc_index_integer_kind. The pointee may + be either a scalar, or an array declaration. No space is allocated for + the pointee. For the statement + pointer (ipt, ar(10)) + any subsequent uses of ar will be translated (in C-notation) as + ar(i) => (( *) ipt)(i) + After gimplification, pointee variable will disappear in the code. */ + +static match +cray_pointer_decl (void) +{ + match m; + gfc_array_spec *as; + gfc_symbol *cptr; /* Pointer symbol. */ + gfc_symbol *cpte; /* Pointee symbol. */ + locus var_locus; + bool done = false; + + while (!done) + { + if (gfc_match_char ('(') != MATCH_YES) + { + gfc_error ("Expected '(' at %C"); + return MATCH_ERROR; + } + + /* Match pointer. */ + var_locus = gfc_current_locus; + gfc_clear_attr (¤t_attr); + gfc_add_cray_pointer (¤t_attr, &var_locus); + current_ts.type = BT_INTEGER; + current_ts.kind = gfc_index_integer_kind; + + m = gfc_match_symbol (&cptr, 0); + if (m != MATCH_YES) + { + gfc_error ("Expected variable name at %C"); + return m; + } + + if (gfc_add_cray_pointer (&cptr->attr, &var_locus) == FAILURE) + return MATCH_ERROR; + + gfc_set_sym_referenced (cptr); + + if (cptr->ts.type == BT_UNKNOWN) /* Override the type, if necessary. */ + { + cptr->ts.type = BT_INTEGER; + cptr->ts.kind = gfc_index_integer_kind; + } + else if (cptr->ts.type != BT_INTEGER) + { + gfc_error ("Cray pointer at %C must be an integer"); + return MATCH_ERROR; + } + else if (cptr->ts.kind < gfc_index_integer_kind) + gfc_warning ("Cray pointer at %C has %d bytes of precision;" + " memory addresses require %d bytes", + cptr->ts.kind, gfc_index_integer_kind); + + if (gfc_match_char (',') != MATCH_YES) + { + gfc_error ("Expected \",\" at %C"); + return MATCH_ERROR; + } + + /* Match Pointee. */ + var_locus = gfc_current_locus; + gfc_clear_attr (¤t_attr); + gfc_add_cray_pointee (¤t_attr, &var_locus); + current_ts.type = BT_UNKNOWN; + current_ts.kind = 0; + + m = gfc_match_symbol (&cpte, 0); + if (m != MATCH_YES) + { + gfc_error ("Expected variable name at %C"); + return m; + } + + /* Check for an optional array spec. */ + m = gfc_match_array_spec (&as); + if (m == MATCH_ERROR) + { + gfc_free_array_spec (as); + return m; + } + else if (m == MATCH_NO) + { + gfc_free_array_spec (as); + as = NULL; + } + + if (gfc_add_cray_pointee (&cpte->attr, &var_locus) == FAILURE) + return MATCH_ERROR; + + gfc_set_sym_referenced (cpte); + + if (cpte->as == NULL) + { + if (gfc_set_array_spec (cpte, as, &var_locus) == FAILURE) + gfc_internal_error ("Couldn't set Cray pointee array spec."); + } + else if (as != NULL) + { + gfc_error ("Duplicate array spec for Cray pointee at %C"); + gfc_free_array_spec (as); + return MATCH_ERROR; + } + + as = NULL; + + if (cpte->as != NULL) + { + /* Fix array spec. */ + m = gfc_mod_pointee_as (cpte->as); + if (m == MATCH_ERROR) + return m; + } + + /* Point the Pointee at the Pointer. */ + cpte->cp_pointer = cptr; + + if (gfc_match_char (')') != MATCH_YES) + { + gfc_error ("Expected \")\" at %C"); + return MATCH_ERROR; + } + m = gfc_match_char (','); + if (m != MATCH_YES) + done = true; /* Stop searching for more declarations. */ + + } + + if (m == MATCH_ERROR /* Failed when trying to find ',' above. */ + || gfc_match_eos () != MATCH_YES) + { + gfc_error ("Expected \",\" or end of statement at %C"); + return MATCH_ERROR; + } + return MATCH_YES; +} + + +match +gfc_match_external (void) +{ + + gfc_clear_attr (¤t_attr); + current_attr.external = 1; + + return attr_decl (); +} + + +match +gfc_match_intent (void) +{ + sym_intent intent; + + intent = match_intent_spec (); + if (intent == INTENT_UNKNOWN) + return MATCH_ERROR; + + gfc_clear_attr (¤t_attr); + current_attr.intent = intent; + + return attr_decl (); +} + + +match +gfc_match_intrinsic (void) +{ + + gfc_clear_attr (¤t_attr); + current_attr.intrinsic = 1; + + return attr_decl (); +} + + +match +gfc_match_optional (void) +{ + + gfc_clear_attr (¤t_attr); + current_attr.optional = 1; + + return attr_decl (); +} + + +match +gfc_match_pointer (void) +{ + gfc_gobble_whitespace (); + if (gfc_peek_ascii_char () == '(') + { + if (!gfc_option.flag_cray_pointer) + { + gfc_error ("Cray pointer declaration at %C requires -fcray-pointer " + "flag"); + return MATCH_ERROR; + } + return cray_pointer_decl (); + } + else + { + gfc_clear_attr (¤t_attr); + current_attr.pointer = 1; + + return attr_decl (); + } +} + + +match +gfc_match_allocatable (void) +{ + gfc_clear_attr (¤t_attr); + current_attr.allocatable = 1; + + return attr_decl (); +} + + +match +gfc_match_dimension (void) +{ + gfc_clear_attr (¤t_attr); + current_attr.dimension = 1; + + return attr_decl (); +} + + +match +gfc_match_target (void) +{ + gfc_clear_attr (¤t_attr); + current_attr.target = 1; + + return attr_decl (); +} + + +/* Match the list of entities being specified in a PUBLIC or PRIVATE + statement. */ + +static match +access_attr_decl (gfc_statement st) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + interface_type type; + gfc_user_op *uop; + gfc_symbol *sym; + gfc_intrinsic_op op; + match m; + + if (gfc_match (" ::") == MATCH_NO && gfc_match_space () == MATCH_NO) + goto done; + + for (;;) + { + m = gfc_match_generic_spec (&type, name, &op); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + return MATCH_ERROR; + + switch (type) + { + case INTERFACE_NAMELESS: + case INTERFACE_ABSTRACT: + goto syntax; + + case INTERFACE_GENERIC: + if (gfc_get_symbol (name, NULL, &sym)) + goto done; + + if (gfc_add_access (&sym->attr, (st == ST_PUBLIC) + ? ACCESS_PUBLIC : ACCESS_PRIVATE, + sym->name, NULL) == FAILURE) + return MATCH_ERROR; + + break; + + case INTERFACE_INTRINSIC_OP: + if (gfc_current_ns->operator_access[op] == ACCESS_UNKNOWN) + { + gfc_current_ns->operator_access[op] = + (st == ST_PUBLIC) ? ACCESS_PUBLIC : ACCESS_PRIVATE; + } + else + { + gfc_error ("Access specification of the %s operator at %C has " + "already been specified", gfc_op2string (op)); + goto done; + } + + break; + + case INTERFACE_USER_OP: + uop = gfc_get_uop (name); + + if (uop->access == ACCESS_UNKNOWN) + { + uop->access = (st == ST_PUBLIC) + ? ACCESS_PUBLIC : ACCESS_PRIVATE; + } + else + { + gfc_error ("Access specification of the .%s. operator at %C " + "has already been specified", sym->name); + goto done; + } + + break; + } + + if (gfc_match_char (',') == MATCH_NO) + break; + } + + if (gfc_match_eos () != MATCH_YES) + goto syntax; + return MATCH_YES; + +syntax: + gfc_syntax_error (st); + +done: + return MATCH_ERROR; +} + + +match +gfc_match_protected (void) +{ + gfc_symbol *sym; + match m; + + if (gfc_current_ns->proc_name->attr.flavor != FL_MODULE) + { + gfc_error ("PROTECTED at %C only allowed in specification " + "part of a module"); + return MATCH_ERROR; + + } + + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: PROTECTED statement at %C") + == FAILURE) + return MATCH_ERROR; + + if (gfc_match (" ::") == MATCH_NO && gfc_match_space () == MATCH_NO) + { + return MATCH_ERROR; + } + + if (gfc_match_eos () == MATCH_YES) + goto syntax; + + for(;;) + { + m = gfc_match_symbol (&sym, 0); + switch (m) + { + case MATCH_YES: + if (gfc_add_protected (&sym->attr, sym->name, &gfc_current_locus) + == FAILURE) + return MATCH_ERROR; + goto next_item; + + case MATCH_NO: + break; + + case MATCH_ERROR: + return MATCH_ERROR; + } + + next_item: + if (gfc_match_eos () == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in PROTECTED statement at %C"); + return MATCH_ERROR; +} + + +/* The PRIVATE statement is a bit weird in that it can be an attribute + declaration, but also works as a standalone statement inside of a + type declaration or a module. */ + +match +gfc_match_private (gfc_statement *st) +{ + + if (gfc_match ("private") != MATCH_YES) + return MATCH_NO; + + if (gfc_current_state () != COMP_MODULE + && !(gfc_current_state () == COMP_DERIVED + && gfc_state_stack->previous + && gfc_state_stack->previous->state == COMP_MODULE) + && !(gfc_current_state () == COMP_DERIVED_CONTAINS + && gfc_state_stack->previous && gfc_state_stack->previous->previous + && gfc_state_stack->previous->previous->state == COMP_MODULE)) + { + gfc_error ("PRIVATE statement at %C is only allowed in the " + "specification part of a module"); + return MATCH_ERROR; + } + + if (gfc_current_state () == COMP_DERIVED) + { + if (gfc_match_eos () == MATCH_YES) + { + *st = ST_PRIVATE; + return MATCH_YES; + } + + gfc_syntax_error (ST_PRIVATE); + return MATCH_ERROR; + } + + if (gfc_match_eos () == MATCH_YES) + { + *st = ST_PRIVATE; + return MATCH_YES; + } + + *st = ST_ATTR_DECL; + return access_attr_decl (ST_PRIVATE); +} + + +match +gfc_match_public (gfc_statement *st) +{ + + if (gfc_match ("public") != MATCH_YES) + return MATCH_NO; + + if (gfc_current_state () != COMP_MODULE) + { + gfc_error ("PUBLIC statement at %C is only allowed in the " + "specification part of a module"); + return MATCH_ERROR; + } + + if (gfc_match_eos () == MATCH_YES) + { + *st = ST_PUBLIC; + return MATCH_YES; + } + + *st = ST_ATTR_DECL; + return access_attr_decl (ST_PUBLIC); +} + + +/* Workhorse for gfc_match_parameter. */ + +static match +do_parm (void) +{ + gfc_symbol *sym; + gfc_expr *init; + match m; + + m = gfc_match_symbol (&sym, 0); + if (m == MATCH_NO) + gfc_error ("Expected variable name at %C in PARAMETER statement"); + + if (m != MATCH_YES) + return m; + + if (gfc_match_char ('=') == MATCH_NO) + { + gfc_error ("Expected = sign in PARAMETER statement at %C"); + return MATCH_ERROR; + } + + m = gfc_match_init_expr (&init); + if (m == MATCH_NO) + gfc_error ("Expected expression at %C in PARAMETER statement"); + if (m != MATCH_YES) + return m; + + if (sym->ts.type == BT_UNKNOWN + && gfc_set_default_type (sym, 1, NULL) == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + + if (gfc_check_assign_symbol (sym, init) == FAILURE + || gfc_add_flavor (&sym->attr, FL_PARAMETER, sym->name, NULL) == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + + if (sym->value) + { + gfc_error ("Initializing already initialized variable at %C"); + m = MATCH_ERROR; + goto cleanup; + } + + if (sym->ts.type == BT_CHARACTER + && sym->ts.cl != NULL + && sym->ts.cl->length != NULL + && sym->ts.cl->length->expr_type == EXPR_CONSTANT + && init->expr_type == EXPR_CONSTANT + && init->ts.type == BT_CHARACTER) + gfc_set_constant_character_len ( + mpz_get_si (sym->ts.cl->length->value.integer), init, -1); + else if (sym->ts.type == BT_CHARACTER && sym->ts.cl != NULL + && sym->ts.cl->length == NULL) + { + int clen; + if (init->expr_type == EXPR_CONSTANT) + { + clen = init->value.character.length; + sym->ts.cl->length = gfc_int_expr (clen); + } + else if (init->expr_type == EXPR_ARRAY) + { + gfc_expr *p = init->value.constructor->expr; + clen = p->value.character.length; + sym->ts.cl->length = gfc_int_expr (clen); + } + else if (init->ts.cl && init->ts.cl->length) + sym->ts.cl->length = gfc_copy_expr (sym->value->ts.cl->length); + } + + sym->value = init; + return MATCH_YES; + +cleanup: + gfc_free_expr (init); + return m; +} + + +/* Match a parameter statement, with the weird syntax that these have. */ + +match +gfc_match_parameter (void) +{ + match m; + + if (gfc_match_char ('(') == MATCH_NO) + return MATCH_NO; + + for (;;) + { + m = do_parm (); + if (m != MATCH_YES) + break; + + if (gfc_match (" )%t") == MATCH_YES) + break; + + if (gfc_match_char (',') != MATCH_YES) + { + gfc_error ("Unexpected characters in PARAMETER statement at %C"); + m = MATCH_ERROR; + break; + } + } + + return m; +} + + +/* Save statements have a special syntax. */ + +match +gfc_match_save (void) +{ + char n[GFC_MAX_SYMBOL_LEN+1]; + gfc_common_head *c; + gfc_symbol *sym; + match m; + + if (gfc_match_eos () == MATCH_YES) + { + if (gfc_current_ns->seen_save) + { + if (gfc_notify_std (GFC_STD_LEGACY, "Blanket SAVE statement at %C " + "follows previous SAVE statement") + == FAILURE) + return MATCH_ERROR; + } + + gfc_current_ns->save_all = gfc_current_ns->seen_save = 1; + return MATCH_YES; + } + + if (gfc_current_ns->save_all) + { + if (gfc_notify_std (GFC_STD_LEGACY, "SAVE statement at %C follows " + "blanket SAVE statement") + == FAILURE) + return MATCH_ERROR; + } + + gfc_match (" ::"); + + for (;;) + { + m = gfc_match_symbol (&sym, 0); + switch (m) + { + case MATCH_YES: + if (gfc_add_save (&sym->attr, sym->name, &gfc_current_locus) + == FAILURE) + return MATCH_ERROR; + goto next_item; + + case MATCH_NO: + break; + + case MATCH_ERROR: + return MATCH_ERROR; + } + + m = gfc_match (" / %n /", &n); + if (m == MATCH_ERROR) + return MATCH_ERROR; + if (m == MATCH_NO) + goto syntax; + + c = gfc_get_common (n, 0); + c->saved = 1; + + gfc_current_ns->seen_save = 1; + + next_item: + if (gfc_match_eos () == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in SAVE statement at %C"); + return MATCH_ERROR; +} + + +match +gfc_match_value (void) +{ + gfc_symbol *sym; + match m; + + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: VALUE statement at %C") + == FAILURE) + return MATCH_ERROR; + + if (gfc_match (" ::") == MATCH_NO && gfc_match_space () == MATCH_NO) + { + return MATCH_ERROR; + } + + if (gfc_match_eos () == MATCH_YES) + goto syntax; + + for(;;) + { + m = gfc_match_symbol (&sym, 0); + switch (m) + { + case MATCH_YES: + if (gfc_add_value (&sym->attr, sym->name, &gfc_current_locus) + == FAILURE) + return MATCH_ERROR; + goto next_item; + + case MATCH_NO: + break; + + case MATCH_ERROR: + return MATCH_ERROR; + } + + next_item: + if (gfc_match_eos () == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in VALUE statement at %C"); + return MATCH_ERROR; +} + + +match +gfc_match_volatile (void) +{ + gfc_symbol *sym; + match m; + + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: VOLATILE statement at %C") + == FAILURE) + return MATCH_ERROR; + + if (gfc_match (" ::") == MATCH_NO && gfc_match_space () == MATCH_NO) + { + return MATCH_ERROR; + } + + if (gfc_match_eos () == MATCH_YES) + goto syntax; + + for(;;) + { + /* VOLATILE is special because it can be added to host-associated + symbols locally. */ + m = gfc_match_symbol (&sym, 1); + switch (m) + { + case MATCH_YES: + if (gfc_add_volatile (&sym->attr, sym->name, &gfc_current_locus) + == FAILURE) + return MATCH_ERROR; + goto next_item; + + case MATCH_NO: + break; + + case MATCH_ERROR: + return MATCH_ERROR; + } + + next_item: + if (gfc_match_eos () == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in VOLATILE statement at %C"); + return MATCH_ERROR; +} + + +/* Match a module procedure statement. Note that we have to modify + symbols in the parent's namespace because the current one was there + to receive symbols that are in an interface's formal argument list. */ + +match +gfc_match_modproc (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_symbol *sym; + match m; + gfc_namespace *module_ns; + gfc_interface *old_interface_head, *interface; + + if (gfc_state_stack->state != COMP_INTERFACE + || gfc_state_stack->previous == NULL + || current_interface.type == INTERFACE_NAMELESS + || current_interface.type == INTERFACE_ABSTRACT) + { + gfc_error ("MODULE PROCEDURE at %C must be in a generic module " + "interface"); + return MATCH_ERROR; + } + + module_ns = gfc_current_ns->parent; + for (; module_ns; module_ns = module_ns->parent) + if (module_ns->proc_name->attr.flavor == FL_MODULE) + break; + + if (module_ns == NULL) + return MATCH_ERROR; + + /* Store the current state of the interface. We will need it if we + end up with a syntax error and need to recover. */ + old_interface_head = gfc_current_interface_head (); + + for (;;) + { + bool last = false; + + m = gfc_match_name (name); + if (m == MATCH_NO) + goto syntax; + if (m != MATCH_YES) + return MATCH_ERROR; + + /* Check for syntax error before starting to add symbols to the + current namespace. */ + if (gfc_match_eos () == MATCH_YES) + last = true; + if (!last && gfc_match_char (',') != MATCH_YES) + goto syntax; + + /* Now we're sure the syntax is valid, we process this item + further. */ + if (gfc_get_symbol (name, module_ns, &sym)) + return MATCH_ERROR; + + if (sym->attr.proc != PROC_MODULE + && gfc_add_procedure (&sym->attr, PROC_MODULE, + sym->name, NULL) == FAILURE) + return MATCH_ERROR; + + if (gfc_add_interface (sym) == FAILURE) + return MATCH_ERROR; + + sym->attr.mod_proc = 1; + + if (last) + break; + } + + return MATCH_YES; + +syntax: + /* Restore the previous state of the interface. */ + interface = gfc_current_interface_head (); + gfc_set_current_interface_head (old_interface_head); + + /* Free the new interfaces. */ + while (interface != old_interface_head) + { + gfc_interface *i = interface->next; + gfc_free (interface); + interface = i; + } + + /* And issue a syntax error. */ + gfc_syntax_error (ST_MODULE_PROC); + return MATCH_ERROR; +} + + +/* Check a derived type that is being extended. */ +static gfc_symbol* +check_extended_derived_type (char *name) +{ + gfc_symbol *extended; + + if (gfc_find_symbol (name, gfc_current_ns, 1, &extended)) + { + gfc_error ("Ambiguous symbol in TYPE definition at %C"); + return NULL; + } + + if (!extended) + { + gfc_error ("No such symbol in TYPE definition at %C"); + return NULL; + } + + if (extended->attr.flavor != FL_DERIVED) + { + gfc_error ("'%s' in EXTENDS expression at %C is not a " + "derived type", name); + return NULL; + } + + if (extended->attr.is_bind_c) + { + gfc_error ("'%s' cannot be extended at %C because it " + "is BIND(C)", extended->name); + return NULL; + } + + if (extended->attr.sequence) + { + gfc_error ("'%s' cannot be extended at %C because it " + "is a SEQUENCE type", extended->name); + return NULL; + } + + return extended; +} + + +/* Match the optional attribute specifiers for a type declaration. + Return MATCH_ERROR if an error is encountered in one of the handled + attributes (public, private, bind(c)), MATCH_NO if what's found is + not a handled attribute, and MATCH_YES otherwise. TODO: More error + checking on attribute conflicts needs to be done. */ + +match +gfc_get_type_attr_spec (symbol_attribute *attr, char *name) +{ + /* See if the derived type is marked as private. */ + if (gfc_match (" , private") == MATCH_YES) + { + if (gfc_current_state () != COMP_MODULE) + { + gfc_error ("Derived type at %C can only be PRIVATE in the " + "specification part of a module"); + return MATCH_ERROR; + } + + if (gfc_add_access (attr, ACCESS_PRIVATE, NULL, NULL) == FAILURE) + return MATCH_ERROR; + } + else if (gfc_match (" , public") == MATCH_YES) + { + if (gfc_current_state () != COMP_MODULE) + { + gfc_error ("Derived type at %C can only be PUBLIC in the " + "specification part of a module"); + return MATCH_ERROR; + } + + if (gfc_add_access (attr, ACCESS_PUBLIC, NULL, NULL) == FAILURE) + return MATCH_ERROR; + } + else if (gfc_match (" , bind ( c )") == MATCH_YES) + { + /* If the type is defined to be bind(c) it then needs to make + sure that all fields are interoperable. This will + need to be a semantic check on the finished derived type. + See 15.2.3 (lines 9-12) of F2003 draft. */ + if (gfc_add_is_bind_c (attr, NULL, &gfc_current_locus, 0) != SUCCESS) + return MATCH_ERROR; + + /* TODO: attr conflicts need to be checked, probably in symbol.c. */ + } + else if (gfc_match (" , abstract") == MATCH_YES) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ABSTRACT type at %C") + == FAILURE) + return MATCH_ERROR; + + if (gfc_add_abstract (attr, &gfc_current_locus) == FAILURE) + return MATCH_ERROR; + } + else if (name && gfc_match(" , extends ( %n )", name) == MATCH_YES) + { + if (gfc_add_extension (attr, &gfc_current_locus) == FAILURE) + return MATCH_ERROR; + } + else + return MATCH_NO; + + /* If we get here, something matched. */ + return MATCH_YES; +} + + +/* Match the beginning of a derived type declaration. If a type name + was the result of a function, then it is possible to have a symbol + already to be known as a derived type yet have no components. */ + +match +gfc_match_derived_decl (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + char parent[GFC_MAX_SYMBOL_LEN + 1]; + symbol_attribute attr; + gfc_symbol *sym; + gfc_symbol *extended; + match m; + match is_type_attr_spec = MATCH_NO; + bool seen_attr = false; + + if (gfc_current_state () == COMP_DERIVED) + return MATCH_NO; + + name[0] = '\0'; + parent[0] = '\0'; + gfc_clear_attr (&attr); + extended = NULL; + + do + { + is_type_attr_spec = gfc_get_type_attr_spec (&attr, parent); + if (is_type_attr_spec == MATCH_ERROR) + return MATCH_ERROR; + if (is_type_attr_spec == MATCH_YES) + seen_attr = true; + } while (is_type_attr_spec == MATCH_YES); + + /* Deal with derived type extensions. The extension attribute has + been added to 'attr' but now the parent type must be found and + checked. */ + if (parent[0]) + extended = check_extended_derived_type (parent); + + if (parent[0] && !extended) + return MATCH_ERROR; + + if (gfc_match (" ::") != MATCH_YES && seen_attr) + { + gfc_error ("Expected :: in TYPE definition at %C"); + return MATCH_ERROR; + } + + m = gfc_match (" %n%t", name); + if (m != MATCH_YES) + return m; + + /* Make sure the name is not the name of an intrinsic type. */ + if (gfc_is_intrinsic_typename (name)) + { + gfc_error ("Type name '%s' at %C cannot be the same as an intrinsic " + "type", name); + return MATCH_ERROR; + } + + if (gfc_get_symbol (name, NULL, &sym)) + return MATCH_ERROR; + + if (sym->ts.type != BT_UNKNOWN) + { + gfc_error ("Derived type name '%s' at %C already has a basic type " + "of %s", sym->name, gfc_typename (&sym->ts)); + return MATCH_ERROR; + } + + /* The symbol may already have the derived attribute without the + components. The ways this can happen is via a function + definition, an INTRINSIC statement or a subtype in another + derived type that is a pointer. The first part of the AND clause + is true if the symbol is not the return value of a function. */ + if (sym->attr.flavor != FL_DERIVED + && gfc_add_flavor (&sym->attr, FL_DERIVED, sym->name, NULL) == FAILURE) + return MATCH_ERROR; + + if (sym->components != NULL || sym->attr.zero_comp) + { + gfc_error ("Derived type definition of '%s' at %C has already been " + "defined", sym->name); + return MATCH_ERROR; + } + + if (attr.access != ACCESS_UNKNOWN + && gfc_add_access (&sym->attr, attr.access, sym->name, NULL) == FAILURE) + return MATCH_ERROR; + + /* See if the derived type was labeled as bind(c). */ + if (attr.is_bind_c != 0) + sym->attr.is_bind_c = attr.is_bind_c; + + /* Construct the f2k_derived namespace if it is not yet there. */ + if (!sym->f2k_derived) + sym->f2k_derived = gfc_get_namespace (NULL, 0); + + if (extended && !sym->components) + { + gfc_component *p; + gfc_symtree *st; + + /* Add the extended derived type as the first component. */ + gfc_add_component (sym, parent, &p); + sym->attr.extension = attr.extension; + extended->refs++; + gfc_set_sym_referenced (extended); + + p->ts.type = BT_DERIVED; + p->ts.derived = extended; + p->initializer = gfc_default_initializer (&p->ts); + + /* Provide the links between the extended type and its extension. */ + if (!extended->f2k_derived) + extended->f2k_derived = gfc_get_namespace (NULL, 0); + st = gfc_new_symtree (&extended->f2k_derived->sym_root, sym->name); + st->n.sym = sym; + } + + /* Take over the ABSTRACT attribute. */ + sym->attr.abstract = attr.abstract; + + gfc_new_block = sym; + + return MATCH_YES; +} + + +/* Cray Pointees can be declared as: + pointer (ipt, a (n,m,...,*)) + By default, this is treated as an AS_ASSUMED_SIZE array. We'll + cheat and set a constant bound of 1 for the last dimension, if this + is the case. Since there is no bounds-checking for Cray Pointees, + this will be okay. */ + +gfc_try +gfc_mod_pointee_as (gfc_array_spec *as) +{ + as->cray_pointee = true; /* This will be useful to know later. */ + if (as->type == AS_ASSUMED_SIZE) + { + as->type = AS_EXPLICIT; + as->upper[as->rank - 1] = gfc_int_expr (1); + as->cp_was_assumed = true; + } + else if (as->type == AS_ASSUMED_SHAPE) + { + gfc_error ("Cray Pointee at %C cannot be assumed shape array"); + return MATCH_ERROR; + } + return MATCH_YES; +} + + +/* Match the enum definition statement, here we are trying to match + the first line of enum definition statement. + Returns MATCH_YES if match is found. */ + +match +gfc_match_enum (void) +{ + match m; + + m = gfc_match_eos (); + if (m != MATCH_YES) + return m; + + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ENUM and ENUMERATOR at %C") + == FAILURE) + return MATCH_ERROR; + + return MATCH_YES; +} + + +/* Match a variable name with an optional initializer. When this + subroutine is called, a variable is expected to be parsed next. + Depending on what is happening at the moment, updates either the + symbol table or the current interface. */ + +static match +enumerator_decl (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_expr *initializer; + gfc_array_spec *as = NULL; + gfc_symbol *sym; + locus var_locus; + match m; + gfc_try t; + locus old_locus; + + initializer = NULL; + old_locus = gfc_current_locus; + + /* When we get here, we've just matched a list of attributes and + maybe a type and a double colon. The next thing we expect to see + is the name of the symbol. */ + m = gfc_match_name (name); + if (m != MATCH_YES) + goto cleanup; + + var_locus = gfc_current_locus; + + /* OK, we've successfully matched the declaration. Now put the + symbol in the current namespace. If we fail to create the symbol, + bail out. */ + if (build_sym (name, NULL, &as, &var_locus) == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + + /* The double colon must be present in order to have initializers. + Otherwise the statement is ambiguous with an assignment statement. */ + if (colon_seen) + { + if (gfc_match_char ('=') == MATCH_YES) + { + m = gfc_match_init_expr (&initializer); + if (m == MATCH_NO) + { + gfc_error ("Expected an initialization expression at %C"); + m = MATCH_ERROR; + } + + if (m != MATCH_YES) + goto cleanup; + } + } + + /* If we do not have an initializer, the initialization value of the + previous enumerator (stored in last_initializer) is incremented + by 1 and is used to initialize the current enumerator. */ + if (initializer == NULL) + initializer = gfc_enum_initializer (last_initializer, old_locus); + + if (initializer == NULL || initializer->ts.type != BT_INTEGER) + { + gfc_error("ENUMERATOR %L not initialized with integer expression", + &var_locus); + m = MATCH_ERROR; + gfc_free_enum_history (); + goto cleanup; + } + + /* Store this current initializer, for the next enumerator variable + to be parsed. add_init_expr_to_sym() zeros initializer, so we + use last_initializer below. */ + last_initializer = initializer; + t = add_init_expr_to_sym (name, &initializer, &var_locus); + + /* Maintain enumerator history. */ + gfc_find_symbol (name, NULL, 0, &sym); + create_enum_history (sym, last_initializer); + + return (t == SUCCESS) ? MATCH_YES : MATCH_ERROR; + +cleanup: + /* Free stuff up and return. */ + gfc_free_expr (initializer); + + return m; +} + + +/* Match the enumerator definition statement. */ + +match +gfc_match_enumerator_def (void) +{ + match m; + gfc_try t; + + gfc_clear_ts (¤t_ts); + + m = gfc_match (" enumerator"); + if (m != MATCH_YES) + return m; + + m = gfc_match (" :: "); + if (m == MATCH_ERROR) + return m; + + colon_seen = (m == MATCH_YES); + + if (gfc_current_state () != COMP_ENUM) + { + gfc_error ("ENUM definition statement expected before %C"); + gfc_free_enum_history (); + return MATCH_ERROR; + } + + (¤t_ts)->type = BT_INTEGER; + (¤t_ts)->kind = gfc_c_int_kind; + + gfc_clear_attr (¤t_attr); + t = gfc_add_flavor (¤t_attr, FL_PARAMETER, NULL, NULL); + if (t == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + + for (;;) + { + m = enumerator_decl (); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + break; + + if (gfc_match_eos () == MATCH_YES) + goto cleanup; + if (gfc_match_char (',') != MATCH_YES) + break; + } + + if (gfc_current_state () == COMP_ENUM) + { + gfc_free_enum_history (); + gfc_error ("Syntax error in ENUMERATOR definition at %C"); + m = MATCH_ERROR; + } + +cleanup: + gfc_free_array_spec (current_as); + current_as = NULL; + return m; + +} + + +/* Match binding attributes. */ + +static match +match_binding_attributes (gfc_typebound_proc* ba, bool generic) +{ + bool found_passing = false; + match m; + + /* Intialize to defaults. Do so even before the MATCH_NO check so that in + this case the defaults are in there. */ + ba->access = ACCESS_UNKNOWN; + ba->pass_arg = NULL; + ba->pass_arg_num = 0; + ba->nopass = 0; + ba->non_overridable = 0; + + /* If we find a comma, we believe there are binding attributes. */ + if (gfc_match_char (',') == MATCH_NO) + { + ba->access = gfc_typebound_default_access; + return MATCH_NO; + } + + do + { + /* Access specifier. */ + + m = gfc_match (" public"); + if (m == MATCH_ERROR) + goto error; + if (m == MATCH_YES) + { + if (ba->access != ACCESS_UNKNOWN) + { + gfc_error ("Duplicate access-specifier at %C"); + goto error; + } + + ba->access = ACCESS_PUBLIC; + continue; + } + + m = gfc_match (" private"); + if (m == MATCH_ERROR) + goto error; + if (m == MATCH_YES) + { + if (ba->access != ACCESS_UNKNOWN) + { + gfc_error ("Duplicate access-specifier at %C"); + goto error; + } + + ba->access = ACCESS_PRIVATE; + continue; + } + + /* If inside GENERIC, the following is not allowed. */ + if (!generic) + { + + /* NOPASS flag. */ + m = gfc_match (" nopass"); + if (m == MATCH_ERROR) + goto error; + if (m == MATCH_YES) + { + if (found_passing) + { + gfc_error ("Binding attributes already specify passing," + " illegal NOPASS at %C"); + goto error; + } + + found_passing = true; + ba->nopass = 1; + continue; + } + + /* NON_OVERRIDABLE flag. */ + m = gfc_match (" non_overridable"); + if (m == MATCH_ERROR) + goto error; + if (m == MATCH_YES) + { + if (ba->non_overridable) + { + gfc_error ("Duplicate NON_OVERRIDABLE at %C"); + goto error; + } + + ba->non_overridable = 1; + continue; + } + + /* DEFERRED flag. */ + /* TODO: Handle really once implemented. */ + m = gfc_match (" deferred"); + if (m == MATCH_ERROR) + goto error; + if (m == MATCH_YES) + { + gfc_error ("DEFERRED not yet implemented at %C"); + goto error; + } + + /* PASS possibly including argument. */ + m = gfc_match (" pass"); + if (m == MATCH_ERROR) + goto error; + if (m == MATCH_YES) + { + char arg[GFC_MAX_SYMBOL_LEN + 1]; + + if (found_passing) + { + gfc_error ("Binding attributes already specify passing," + " illegal PASS at %C"); + goto error; + } + + m = gfc_match (" ( %n )", arg); + if (m == MATCH_ERROR) + goto error; + if (m == MATCH_YES) + ba->pass_arg = xstrdup (arg); + gcc_assert ((m == MATCH_YES) == (ba->pass_arg != NULL)); + + found_passing = true; + ba->nopass = 0; + continue; + } + + } + + /* Nothing matching found. */ + if (generic) + gfc_error ("Expected access-specifier at %C"); + else + gfc_error ("Expected binding attribute at %C"); + goto error; + } + while (gfc_match_char (',') == MATCH_YES); + + if (ba->access == ACCESS_UNKNOWN) + ba->access = gfc_typebound_default_access; + + return MATCH_YES; + +error: + gfc_free (ba->pass_arg); + return MATCH_ERROR; +} + + +/* Match a PROCEDURE specific binding inside a derived type. */ + +static match +match_procedure_in_type (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + char target_buf[GFC_MAX_SYMBOL_LEN + 1]; + char* target; + gfc_typebound_proc* tb; + bool seen_colons; + bool seen_attrs; + match m; + gfc_symtree* stree; + gfc_namespace* ns; + gfc_symbol* block; + + /* Check current state. */ + gcc_assert (gfc_state_stack->state == COMP_DERIVED_CONTAINS); + block = gfc_state_stack->previous->sym; + gcc_assert (block); + + /* TODO: Really implement PROCEDURE(interface). */ + if (gfc_match (" (") == MATCH_YES) + { + gfc_error ("PROCEDURE(interface) at %C is not yet implemented"); + return MATCH_ERROR; + } + + /* Construct the data structure. */ + tb = gfc_get_typebound_proc (); + tb->where = gfc_current_locus; + tb->is_generic = 0; + + /* Match binding attributes. */ + m = match_binding_attributes (tb, false); + if (m == MATCH_ERROR) + return m; + seen_attrs = (m == MATCH_YES); + + /* Match the colons. */ + m = gfc_match (" ::"); + if (m == MATCH_ERROR) + return m; + seen_colons = (m == MATCH_YES); + if (seen_attrs && !seen_colons) + { + gfc_error ("Expected '::' after binding-attributes at %C"); + return MATCH_ERROR; + } + + /* Match the binding name. */ + m = gfc_match_name (name); + if (m == MATCH_ERROR) + return m; + if (m == MATCH_NO) + { + gfc_error ("Expected binding name at %C"); + return MATCH_ERROR; + } + + /* Try to match the '=> target', if it's there. */ + target = NULL; + m = gfc_match (" =>"); + if (m == MATCH_ERROR) + return m; + if (m == MATCH_YES) + { + if (!seen_colons) + { + gfc_error ("'::' needed in PROCEDURE binding with explicit target" + " at %C"); + return MATCH_ERROR; + } + + m = gfc_match_name (target_buf); + if (m == MATCH_ERROR) + return m; + if (m == MATCH_NO) + { + gfc_error ("Expected binding target after '=>' at %C"); + return MATCH_ERROR; + } + target = target_buf; + } + + /* Now we should have the end. */ + m = gfc_match_eos (); + if (m == MATCH_ERROR) + return m; + if (m == MATCH_NO) + { + gfc_error ("Junk after PROCEDURE declaration at %C"); + return MATCH_ERROR; + } + + /* If no target was found, it has the same name as the binding. */ + if (!target) + target = name; + + /* Get the namespace to insert the symbols into. */ + ns = block->f2k_derived; + gcc_assert (ns); + + /* See if we already have a binding with this name in the symtree which would + be an error. If a GENERIC already targetted this binding, it may be + already there but then typebound is still NULL. */ + stree = gfc_find_symtree (ns->sym_root, name); + if (stree && stree->typebound) + { + gfc_error ("There's already a procedure with binding name '%s' for the" + " derived type '%s' at %C", name, block->name); + return MATCH_ERROR; + } + + /* Insert it and set attributes. */ + if (gfc_get_sym_tree (name, ns, &stree)) + return MATCH_ERROR; + if (gfc_get_sym_tree (target, gfc_current_ns, &tb->u.specific)) + return MATCH_ERROR; + gfc_set_sym_referenced (tb->u.specific->n.sym); + stree->typebound = tb; + + return MATCH_YES; +} + + +/* Match a GENERIC procedure binding inside a derived type. */ + +match +gfc_match_generic (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_symbol* block; + gfc_typebound_proc tbattr; /* Used for match_binding_attributes. */ + gfc_typebound_proc* tb; + gfc_symtree* st; + gfc_namespace* ns; + match m; + + /* Check current state. */ + if (gfc_current_state () == COMP_DERIVED) + { + gfc_error ("GENERIC at %C must be inside a derived-type CONTAINS"); + return MATCH_ERROR; + } + if (gfc_current_state () != COMP_DERIVED_CONTAINS) + return MATCH_NO; + block = gfc_state_stack->previous->sym; + ns = block->f2k_derived; + gcc_assert (block && ns); + + /* See if we get an access-specifier. */ + m = match_binding_attributes (&tbattr, true); + if (m == MATCH_ERROR) + goto error; + + /* Now the colons, those are required. */ + if (gfc_match (" ::") != MATCH_YES) + { + gfc_error ("Expected '::' at %C"); + goto error; + } + + /* The binding name and =>. */ + m = gfc_match (" %n =>", name); + if (m == MATCH_ERROR) + return MATCH_ERROR; + if (m == MATCH_NO) + { + gfc_error ("Expected generic name at %C"); + goto error; + } + + /* If there's already something with this name, check that it is another + GENERIC and then extend that rather than build a new node. */ + st = gfc_find_symtree (ns->sym_root, name); + if (st) + { + if (!st->typebound || !st->typebound->is_generic) + { + gfc_error ("There's already a non-generic procedure with binding name" + " '%s' for the derived type '%s' at %C", + name, block->name); + goto error; + } + + tb = st->typebound; + if (tb->access != tbattr.access) + { + gfc_error ("Binding at %C must have the same access as already" + " defined binding '%s'", name); + goto error; + } + } + else + { + if (gfc_get_sym_tree (name, ns, &st)) + return MATCH_ERROR; + + st->typebound = tb = gfc_get_typebound_proc (); + tb->where = gfc_current_locus; + tb->access = tbattr.access; + tb->is_generic = 1; + tb->u.generic = NULL; + } + + /* Now, match all following names as specific targets. */ + do + { + gfc_symtree* target_st; + gfc_tbp_generic* target; + + m = gfc_match_name (name); + if (m == MATCH_ERROR) + goto error; + if (m == MATCH_NO) + { + gfc_error ("Expected specific binding name at %C"); + goto error; + } + + if (gfc_get_sym_tree (name, ns, &target_st)) + goto error; + + /* See if this is a duplicate specification. */ + for (target = tb->u.generic; target; target = target->next) + if (target_st == target->specific_st) + { + gfc_error ("'%s' already defined as specific binding for the" + " generic '%s' at %C", name, st->n.sym->name); + goto error; + } + + gfc_set_sym_referenced (target_st->n.sym); + + target = gfc_get_tbp_generic (); + target->specific_st = target_st; + target->specific = NULL; + target->next = tb->u.generic; + tb->u.generic = target; + } + while (gfc_match (" ,") == MATCH_YES); + + /* Here should be the end. */ + if (gfc_match_eos () != MATCH_YES) + { + gfc_error ("Junk after GENERIC binding at %C"); + goto error; + } + + return MATCH_YES; + +error: + return MATCH_ERROR; +} + + +/* Match a FINAL declaration inside a derived type. */ + +match +gfc_match_final_decl (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_symbol* sym; + match m; + gfc_namespace* module_ns; + bool first, last; + gfc_symbol* block; + + if (gfc_state_stack->state != COMP_DERIVED_CONTAINS) + { + gfc_error ("FINAL declaration at %C must be inside a derived type " + "CONTAINS section"); + return MATCH_ERROR; + } + + block = gfc_state_stack->previous->sym; + gcc_assert (block); + + if (!gfc_state_stack->previous || !gfc_state_stack->previous->previous + || gfc_state_stack->previous->previous->state != COMP_MODULE) + { + gfc_error ("Derived type declaration with FINAL at %C must be in the" + " specification part of a MODULE"); + return MATCH_ERROR; + } + + module_ns = gfc_current_ns; + gcc_assert (module_ns); + gcc_assert (module_ns->proc_name->attr.flavor == FL_MODULE); + + /* Match optional ::, don't care about MATCH_YES or MATCH_NO. */ + if (gfc_match (" ::") == MATCH_ERROR) + return MATCH_ERROR; + + /* Match the sequence of procedure names. */ + first = true; + last = false; + do + { + gfc_finalizer* f; + + if (first && gfc_match_eos () == MATCH_YES) + { + gfc_error ("Empty FINAL at %C"); + return MATCH_ERROR; + } + + m = gfc_match_name (name); + if (m == MATCH_NO) + { + gfc_error ("Expected module procedure name at %C"); + return MATCH_ERROR; + } + else if (m != MATCH_YES) + return MATCH_ERROR; + + if (gfc_match_eos () == MATCH_YES) + last = true; + if (!last && gfc_match_char (',') != MATCH_YES) + { + gfc_error ("Expected ',' at %C"); + return MATCH_ERROR; + } + + if (gfc_get_symbol (name, module_ns, &sym)) + { + gfc_error ("Unknown procedure name \"%s\" at %C", name); + return MATCH_ERROR; + } + + /* Mark the symbol as module procedure. */ + if (sym->attr.proc != PROC_MODULE + && gfc_add_procedure (&sym->attr, PROC_MODULE, + sym->name, NULL) == FAILURE) + return MATCH_ERROR; + + /* Check if we already have this symbol in the list, this is an error. */ + for (f = block->f2k_derived->finalizers; f; f = f->next) + if (f->proc_sym == sym) + { + gfc_error ("'%s' at %C is already defined as FINAL procedure!", + name); + return MATCH_ERROR; + } + + /* Add this symbol to the list of finalizers. */ + gcc_assert (block->f2k_derived); + ++sym->refs; + f = XCNEW (gfc_finalizer); + f->proc_sym = sym; + f->proc_tree = NULL; + f->where = gfc_current_locus; + f->next = block->f2k_derived->finalizers; + block->f2k_derived->finalizers = f; + + first = false; + } + while (!last); + + return MATCH_YES; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/dependency.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/dependency.c new file mode 100644 index 0000000000..265cf20f3d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/dependency.c @@ -0,0 +1,1362 @@ +/* Dependency analysis + Copyright (C) 2000, 2001, 2002, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* dependency.c -- Expression dependency analysis code. */ +/* There's probably quite a bit of duplication in this file. We currently + have different dependency checking functions for different types + if dependencies. Ideally these would probably be merged. */ + +#include "config.h" +#include "gfortran.h" +#include "dependency.h" + +/* static declarations */ +/* Enums */ +enum range {LHS, RHS, MID}; + +/* Dependency types. These must be in reverse order of priority. */ +typedef enum +{ + GFC_DEP_ERROR, + GFC_DEP_EQUAL, /* Identical Ranges. */ + GFC_DEP_FORWARD, /* e.g., a(1:3), a(2:4). */ + GFC_DEP_OVERLAP, /* May overlap in some other way. */ + GFC_DEP_NODEP /* Distinct ranges. */ +} +gfc_dependency; + +/* Macros */ +#define IS_ARRAY_EXPLICIT(as) ((as->type == AS_EXPLICIT ? 1 : 0)) + + +/* Returns 1 if the expr is an integer constant value 1, 0 if it is not or + def if the value could not be determined. */ + +int +gfc_expr_is_one (gfc_expr *expr, int def) +{ + gcc_assert (expr != NULL); + + if (expr->expr_type != EXPR_CONSTANT) + return def; + + if (expr->ts.type != BT_INTEGER) + return def; + + return mpz_cmp_si (expr->value.integer, 1) == 0; +} + + +/* Compare two values. Returns 0 if e1 == e2, -1 if e1 < e2, +1 if e1 > e2, + and -2 if the relationship could not be determined. */ + +int +gfc_dep_compare_expr (gfc_expr *e1, gfc_expr *e2) +{ + gfc_actual_arglist *args1; + gfc_actual_arglist *args2; + int i; + + if (e1->expr_type == EXPR_OP + && (e1->value.op.op == INTRINSIC_UPLUS + || e1->value.op.op == INTRINSIC_PARENTHESES)) + return gfc_dep_compare_expr (e1->value.op.op1, e2); + if (e2->expr_type == EXPR_OP + && (e2->value.op.op == INTRINSIC_UPLUS + || e2->value.op.op == INTRINSIC_PARENTHESES)) + return gfc_dep_compare_expr (e1, e2->value.op.op1); + + if (e1->expr_type == EXPR_OP && e1->value.op.op == INTRINSIC_PLUS) + { + /* Compare X+C vs. X. */ + if (e1->value.op.op2->expr_type == EXPR_CONSTANT + && e1->value.op.op2->ts.type == BT_INTEGER + && gfc_dep_compare_expr (e1->value.op.op1, e2) == 0) + return mpz_sgn (e1->value.op.op2->value.integer); + + /* Compare P+Q vs. R+S. */ + if (e2->expr_type == EXPR_OP && e2->value.op.op == INTRINSIC_PLUS) + { + int l, r; + + l = gfc_dep_compare_expr (e1->value.op.op1, e2->value.op.op1); + r = gfc_dep_compare_expr (e1->value.op.op2, e2->value.op.op2); + if (l == 0 && r == 0) + return 0; + if (l == 0 && r != -2) + return r; + if (l != -2 && r == 0) + return l; + if (l == 1 && r == 1) + return 1; + if (l == -1 && r == -1) + return -1; + + l = gfc_dep_compare_expr (e1->value.op.op1, e2->value.op.op2); + r = gfc_dep_compare_expr (e1->value.op.op2, e2->value.op.op1); + if (l == 0 && r == 0) + return 0; + if (l == 0 && r != -2) + return r; + if (l != -2 && r == 0) + return l; + if (l == 1 && r == 1) + return 1; + if (l == -1 && r == -1) + return -1; + } + } + + /* Compare X vs. X+C. */ + if (e2->expr_type == EXPR_OP && e2->value.op.op == INTRINSIC_PLUS) + { + if (e2->value.op.op2->expr_type == EXPR_CONSTANT + && e2->value.op.op2->ts.type == BT_INTEGER + && gfc_dep_compare_expr (e1, e2->value.op.op1) == 0) + return -mpz_sgn (e2->value.op.op2->value.integer); + } + + /* Compare X-C vs. X. */ + if (e1->expr_type == EXPR_OP && e1->value.op.op == INTRINSIC_MINUS) + { + if (e1->value.op.op2->expr_type == EXPR_CONSTANT + && e1->value.op.op2->ts.type == BT_INTEGER + && gfc_dep_compare_expr (e1->value.op.op1, e2) == 0) + return -mpz_sgn (e1->value.op.op2->value.integer); + + /* Compare P-Q vs. R-S. */ + if (e2->expr_type == EXPR_OP && e2->value.op.op == INTRINSIC_MINUS) + { + int l, r; + + l = gfc_dep_compare_expr (e1->value.op.op1, e2->value.op.op1); + r = gfc_dep_compare_expr (e1->value.op.op2, e2->value.op.op2); + if (l == 0 && r == 0) + return 0; + if (l != -2 && r == 0) + return l; + if (l == 0 && r != -2) + return -r; + if (l == 1 && r == -1) + return 1; + if (l == -1 && r == 1) + return -1; + } + } + + /* Compare X vs. X-C. */ + if (e2->expr_type == EXPR_OP && e2->value.op.op == INTRINSIC_MINUS) + { + if (e2->value.op.op2->expr_type == EXPR_CONSTANT + && e2->value.op.op2->ts.type == BT_INTEGER + && gfc_dep_compare_expr (e1, e2->value.op.op1) == 0) + return mpz_sgn (e2->value.op.op2->value.integer); + } + + if (e1->expr_type != e2->expr_type) + return -2; + + switch (e1->expr_type) + { + case EXPR_CONSTANT: + if (e1->ts.type != BT_INTEGER || e2->ts.type != BT_INTEGER) + return -2; + + i = mpz_cmp (e1->value.integer, e2->value.integer); + if (i == 0) + return 0; + else if (i < 0) + return -1; + return 1; + + case EXPR_VARIABLE: + if (e1->ref || e2->ref) + return -2; + if (e1->symtree->n.sym == e2->symtree->n.sym) + return 0; + return -2; + + case EXPR_OP: + /* Intrinsic operators are the same if their operands are the same. */ + if (e1->value.op.op != e2->value.op.op) + return -2; + if (e1->value.op.op2 == 0) + { + i = gfc_dep_compare_expr (e1->value.op.op1, e2->value.op.op1); + return i == 0 ? 0 : -2; + } + if (gfc_dep_compare_expr (e1->value.op.op1, e2->value.op.op1) == 0 + && gfc_dep_compare_expr (e1->value.op.op2, e2->value.op.op2) == 0) + return 0; + /* TODO Handle commutative binary operators here? */ + return -2; + + case EXPR_FUNCTION: + /* We can only compare calls to the same intrinsic function. */ + if (e1->value.function.isym == 0 || e2->value.function.isym == 0 + || e1->value.function.isym != e2->value.function.isym) + return -2; + + args1 = e1->value.function.actual; + args2 = e2->value.function.actual; + + /* We should list the "constant" intrinsic functions. Those + without side-effects that provide equal results given equal + argument lists. */ + switch (e1->value.function.isym->id) + { + case GFC_ISYM_CONVERSION: + /* Handle integer extensions specially, as __convert_i4_i8 + is not only "constant" but also "unary" and "increasing". */ + if (args1 && !args1->next + && args2 && !args2->next + && e1->ts.type == BT_INTEGER + && args1->expr->ts.type == BT_INTEGER + && e1->ts.kind > args1->expr->ts.kind + && e2->ts.type == e1->ts.type + && e2->ts.kind == e1->ts.kind + && args2->expr->ts.type == args1->expr->ts.type + && args2->expr->ts.kind == args2->expr->ts.kind) + return gfc_dep_compare_expr (args1->expr, args2->expr); + break; + + case GFC_ISYM_REAL: + case GFC_ISYM_LOGICAL: + case GFC_ISYM_DBLE: + break; + + default: + return -2; + } + + /* Compare the argument lists for equality. */ + while (args1 && args2) + { + if (gfc_dep_compare_expr (args1->expr, args2->expr) != 0) + return -2; + args1 = args1->next; + args2 = args2->next; + } + return (args1 || args2) ? -2 : 0; + + default: + return -2; + } +} + + +/* Returns 1 if the two ranges are the same, 0 if they are not, and def + if the results are indeterminate. N is the dimension to compare. */ + +int +gfc_is_same_range (gfc_array_ref *ar1, gfc_array_ref *ar2, int n, int def) +{ + gfc_expr *e1; + gfc_expr *e2; + int i; + + /* TODO: More sophisticated range comparison. */ + gcc_assert (ar1 && ar2); + + gcc_assert (ar1->dimen_type[n] == ar2->dimen_type[n]); + + e1 = ar1->stride[n]; + e2 = ar2->stride[n]; + /* Check for mismatching strides. A NULL stride means a stride of 1. */ + if (e1 && !e2) + { + i = gfc_expr_is_one (e1, -1); + if (i == -1) + return def; + else if (i == 0) + return 0; + } + else if (e2 && !e1) + { + i = gfc_expr_is_one (e2, -1); + if (i == -1) + return def; + else if (i == 0) + return 0; + } + else if (e1 && e2) + { + i = gfc_dep_compare_expr (e1, e2); + if (i == -2) + return def; + else if (i != 0) + return 0; + } + /* The strides match. */ + + /* Check the range start. */ + e1 = ar1->start[n]; + e2 = ar2->start[n]; + if (e1 || e2) + { + /* Use the bound of the array if no bound is specified. */ + if (ar1->as && !e1) + e1 = ar1->as->lower[n]; + + if (ar2->as && !e2) + e2 = ar2->as->lower[n]; + + /* Check we have values for both. */ + if (!(e1 && e2)) + return def; + + i = gfc_dep_compare_expr (e1, e2); + if (i == -2) + return def; + else if (i != 0) + return 0; + } + + /* Check the range end. */ + e1 = ar1->end[n]; + e2 = ar2->end[n]; + if (e1 || e2) + { + /* Use the bound of the array if no bound is specified. */ + if (ar1->as && !e1) + e1 = ar1->as->upper[n]; + + if (ar2->as && !e2) + e2 = ar2->as->upper[n]; + + /* Check we have values for both. */ + if (!(e1 && e2)) + return def; + + i = gfc_dep_compare_expr (e1, e2); + if (i == -2) + return def; + else if (i != 0) + return 0; + } + + return 1; +} + + +/* Some array-returning intrinsics can be implemented by reusing the + data from one of the array arguments. For example, TRANSPOSE does + not necessarily need to allocate new data: it can be implemented + by copying the original array's descriptor and simply swapping the + two dimension specifications. + + If EXPR is a call to such an intrinsic, return the argument + whose data can be reused, otherwise return NULL. */ + +gfc_expr * +gfc_get_noncopying_intrinsic_argument (gfc_expr *expr) +{ + if (expr->expr_type != EXPR_FUNCTION || !expr->value.function.isym) + return NULL; + + switch (expr->value.function.isym->id) + { + case GFC_ISYM_TRANSPOSE: + return expr->value.function.actual->expr; + + default: + return NULL; + } +} + + +/* Return true if the result of reference REF can only be constructed + using a temporary array. */ + +bool +gfc_ref_needs_temporary_p (gfc_ref *ref) +{ + int n; + bool subarray_p; + + subarray_p = false; + for (; ref; ref = ref->next) + switch (ref->type) + { + case REF_ARRAY: + /* Vector dimensions are generally not monotonic and must be + handled using a temporary. */ + if (ref->u.ar.type == AR_SECTION) + for (n = 0; n < ref->u.ar.dimen; n++) + if (ref->u.ar.dimen_type[n] == DIMEN_VECTOR) + return true; + + subarray_p = true; + break; + + case REF_SUBSTRING: + /* Within an array reference, character substrings generally + need a temporary. Character array strides are expressed as + multiples of the element size (consistent with other array + types), not in characters. */ + return subarray_p; + + case REF_COMPONENT: + break; + } + + return false; +} + + +int +gfc_is_data_pointer (gfc_expr *e) +{ + gfc_ref *ref; + + if (e->expr_type != EXPR_VARIABLE && e->expr_type != EXPR_FUNCTION) + return 0; + + /* No subreference if it is a function */ + gcc_assert (e->expr_type == EXPR_VARIABLE || !e->ref); + + if (e->symtree->n.sym->attr.pointer) + return 1; + + for (ref = e->ref; ref; ref = ref->next) + if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer) + return 1; + + return 0; +} + + +/* Return true if array variable VAR could be passed to the same function + as argument EXPR without interfering with EXPR. INTENT is the intent + of VAR. + + This is considerably less conservative than other dependencies + because many function arguments will already be copied into a + temporary. */ + +static int +gfc_check_argument_var_dependency (gfc_expr *var, sym_intent intent, + gfc_expr *expr, gfc_dep_check elemental) +{ + gfc_expr *arg; + + gcc_assert (var->expr_type == EXPR_VARIABLE); + gcc_assert (var->rank > 0); + + switch (expr->expr_type) + { + case EXPR_VARIABLE: + /* In case of elemental subroutines, there is no dependency + between two same-range array references. */ + if (gfc_ref_needs_temporary_p (expr->ref) + || gfc_check_dependency (var, expr, !elemental)) + { + if (elemental == ELEM_DONT_CHECK_VARIABLE) + { + /* Too many false positive with pointers. */ + if (!gfc_is_data_pointer (var) && !gfc_is_data_pointer (expr)) + { + /* Elemental procedures forbid unspecified intents, + and we don't check dependencies for INTENT_IN args. */ + gcc_assert (intent == INTENT_OUT || intent == INTENT_INOUT); + + /* We are told not to check dependencies. + We do it, however, and issue a warning in case we find one. + If a dependency is found in the case + elemental == ELEM_CHECK_VARIABLE, we will generate + a temporary, so we don't need to bother the user. */ + gfc_warning ("INTENT(%s) actual argument at %L might " + "interfere with actual argument at %L.", + intent == INTENT_OUT ? "OUT" : "INOUT", + &var->where, &expr->where); + } + return 0; + } + else + return 1; + } + return 0; + + case EXPR_ARRAY: + return gfc_check_dependency (var, expr, 1); + + case EXPR_FUNCTION: + if (intent != INTENT_IN && expr->inline_noncopying_intrinsic + && (arg = gfc_get_noncopying_intrinsic_argument (expr)) + && gfc_check_argument_var_dependency (var, intent, arg, elemental)) + return 1; + if (elemental) + { + if ((expr->value.function.esym + && expr->value.function.esym->attr.elemental) + || (expr->value.function.isym + && expr->value.function.isym->elemental)) + return gfc_check_fncall_dependency (var, intent, NULL, + expr->value.function.actual, + ELEM_CHECK_VARIABLE); + } + return 0; + + case EXPR_OP: + /* In case of non-elemental procedures, there is no need to catch + dependencies, as we will make a temporary anyway. */ + if (elemental) + { + /* If the actual arg EXPR is an expression, we need to catch + a dependency between variables in EXPR and VAR, + an intent((IN)OUT) variable. */ + if (expr->value.op.op1 + && gfc_check_argument_var_dependency (var, intent, + expr->value.op.op1, + ELEM_CHECK_VARIABLE)) + return 1; + else if (expr->value.op.op2 + && gfc_check_argument_var_dependency (var, intent, + expr->value.op.op2, + ELEM_CHECK_VARIABLE)) + return 1; + } + return 0; + + default: + return 0; + } +} + + +/* Like gfc_check_argument_var_dependency, but extended to any + array expression OTHER, not just variables. */ + +static int +gfc_check_argument_dependency (gfc_expr *other, sym_intent intent, + gfc_expr *expr, gfc_dep_check elemental) +{ + switch (other->expr_type) + { + case EXPR_VARIABLE: + return gfc_check_argument_var_dependency (other, intent, expr, elemental); + + case EXPR_FUNCTION: + if (other->inline_noncopying_intrinsic) + { + other = gfc_get_noncopying_intrinsic_argument (other); + return gfc_check_argument_dependency (other, INTENT_IN, expr, + elemental); + } + return 0; + + default: + return 0; + } +} + + +/* Like gfc_check_argument_dependency, but check all the arguments in ACTUAL. + FNSYM is the function being called, or NULL if not known. */ + +int +gfc_check_fncall_dependency (gfc_expr *other, sym_intent intent, + gfc_symbol *fnsym, gfc_actual_arglist *actual, + gfc_dep_check elemental) +{ + gfc_formal_arglist *formal; + gfc_expr *expr; + + formal = fnsym ? fnsym->formal : NULL; + for (; actual; actual = actual->next, formal = formal ? formal->next : NULL) + { + expr = actual->expr; + + /* Skip args which are not present. */ + if (!expr) + continue; + + /* Skip other itself. */ + if (expr == other) + continue; + + /* Skip intent(in) arguments if OTHER itself is intent(in). */ + if (formal && intent == INTENT_IN + && formal->sym->attr.intent == INTENT_IN) + continue; + + if (gfc_check_argument_dependency (other, intent, expr, elemental)) + return 1; + } + + return 0; +} + + +/* Return 1 if e1 and e2 are equivalenced arrays, either + directly or indirectly; i.e., equivalence (a,b) for a and b + or equivalence (a,c),(b,c). This function uses the equiv_ + lists, generated in trans-common(add_equivalences), that are + guaranteed to pick up indirect equivalences. We explicitly + check for overlap using the offset and length of the equivalence. + This function is symmetric. + TODO: This function only checks whether the full top-level + symbols overlap. An improved implementation could inspect + e1->ref and e2->ref to determine whether the actually accessed + portions of these variables/arrays potentially overlap. */ + +int +gfc_are_equivalenced_arrays (gfc_expr *e1, gfc_expr *e2) +{ + gfc_equiv_list *l; + gfc_equiv_info *s, *fl1, *fl2; + + gcc_assert (e1->expr_type == EXPR_VARIABLE + && e2->expr_type == EXPR_VARIABLE); + + if (!e1->symtree->n.sym->attr.in_equivalence + || !e2->symtree->n.sym->attr.in_equivalence|| !e1->rank || !e2->rank) + return 0; + + if (e1->symtree->n.sym->ns + && e1->symtree->n.sym->ns != gfc_current_ns) + l = e1->symtree->n.sym->ns->equiv_lists; + else + l = gfc_current_ns->equiv_lists; + + /* Go through the equiv_lists and return 1 if the variables + e1 and e2 are members of the same group and satisfy the + requirement on their relative offsets. */ + for (; l; l = l->next) + { + fl1 = NULL; + fl2 = NULL; + for (s = l->equiv; s; s = s->next) + { + if (s->sym == e1->symtree->n.sym) + { + fl1 = s; + if (fl2) + break; + } + if (s->sym == e2->symtree->n.sym) + { + fl2 = s; + if (fl1) + break; + } + } + + if (s) + { + /* Can these lengths be zero? */ + if (fl1->length <= 0 || fl2->length <= 0) + return 1; + /* These can't overlap if [f11,fl1+length] is before + [fl2,fl2+length], or [fl2,fl2+length] is before + [fl1,fl1+length], otherwise they do overlap. */ + if (fl1->offset + fl1->length > fl2->offset + && fl2->offset + fl2->length > fl1->offset) + return 1; + } + } + return 0; +} + + +/* Return true if the statement body redefines the condition. Returns + true if expr2 depends on expr1. expr1 should be a single term + suitable for the lhs of an assignment. The IDENTICAL flag indicates + whether array references to the same symbol with identical range + references count as a dependency or not. Used for forall and where + statements. Also used with functions returning arrays without a + temporary. */ + +int +gfc_check_dependency (gfc_expr *expr1, gfc_expr *expr2, bool identical) +{ + gfc_actual_arglist *actual; + gfc_constructor *c; + int n; + + gcc_assert (expr1->expr_type == EXPR_VARIABLE); + + switch (expr2->expr_type) + { + case EXPR_OP: + n = gfc_check_dependency (expr1, expr2->value.op.op1, identical); + if (n) + return n; + if (expr2->value.op.op2) + return gfc_check_dependency (expr1, expr2->value.op.op2, identical); + return 0; + + case EXPR_VARIABLE: + /* The interesting cases are when the symbols don't match. */ + if (expr1->symtree->n.sym != expr2->symtree->n.sym) + { + gfc_typespec *ts1 = &expr1->symtree->n.sym->ts; + gfc_typespec *ts2 = &expr2->symtree->n.sym->ts; + + /* Return 1 if expr1 and expr2 are equivalenced arrays. */ + if (gfc_are_equivalenced_arrays (expr1, expr2)) + return 1; + + /* Symbols can only alias if they have the same type. */ + if (ts1->type != BT_UNKNOWN && ts2->type != BT_UNKNOWN + && ts1->type != BT_DERIVED && ts2->type != BT_DERIVED) + { + if (ts1->type != ts2->type || ts1->kind != ts2->kind) + return 0; + } + + /* If either variable is a pointer, assume the worst. */ + /* TODO: -fassume-no-pointer-aliasing */ + if (gfc_is_data_pointer (expr1) || gfc_is_data_pointer (expr2)) + return 1; + + /* Otherwise distinct symbols have no dependencies. */ + return 0; + } + + if (identical) + return 1; + + /* Identical and disjoint ranges return 0, + overlapping ranges return 1. */ + if (expr1->ref && expr2->ref) + return gfc_dep_resolver (expr1->ref, expr2->ref); + + return 1; + + case EXPR_FUNCTION: + if (expr2->inline_noncopying_intrinsic) + identical = 1; + /* Remember possible differences between elemental and + transformational functions. All functions inside a FORALL + will be pure. */ + for (actual = expr2->value.function.actual; + actual; actual = actual->next) + { + if (!actual->expr) + continue; + n = gfc_check_dependency (expr1, actual->expr, identical); + if (n) + return n; + } + return 0; + + case EXPR_CONSTANT: + case EXPR_NULL: + return 0; + + case EXPR_ARRAY: + /* Loop through the array constructor's elements. */ + for (c = expr2->value.constructor; c; c = c->next) + { + /* If this is an iterator, assume the worst. */ + if (c->iterator) + return 1; + /* Avoid recursion in the common case. */ + if (c->expr->expr_type == EXPR_CONSTANT) + continue; + if (gfc_check_dependency (expr1, c->expr, 1)) + return 1; + } + return 0; + + default: + return 1; + } +} + + +/* Determines overlapping for two array sections. */ + +static gfc_dependency +gfc_check_section_vs_section (gfc_ref *lref, gfc_ref *rref, int n) +{ + gfc_array_ref l_ar; + gfc_expr *l_start; + gfc_expr *l_end; + gfc_expr *l_stride; + gfc_expr *l_lower; + gfc_expr *l_upper; + int l_dir; + + gfc_array_ref r_ar; + gfc_expr *r_start; + gfc_expr *r_end; + gfc_expr *r_stride; + gfc_expr *r_lower; + gfc_expr *r_upper; + int r_dir; + + l_ar = lref->u.ar; + r_ar = rref->u.ar; + + /* If they are the same range, return without more ado. */ + if (gfc_is_same_range (&l_ar, &r_ar, n, 0)) + return GFC_DEP_EQUAL; + + l_start = l_ar.start[n]; + l_end = l_ar.end[n]; + l_stride = l_ar.stride[n]; + + r_start = r_ar.start[n]; + r_end = r_ar.end[n]; + r_stride = r_ar.stride[n]; + + /* If l_start is NULL take it from array specifier. */ + if (NULL == l_start && IS_ARRAY_EXPLICIT (l_ar.as)) + l_start = l_ar.as->lower[n]; + /* If l_end is NULL take it from array specifier. */ + if (NULL == l_end && IS_ARRAY_EXPLICIT (l_ar.as)) + l_end = l_ar.as->upper[n]; + + /* If r_start is NULL take it from array specifier. */ + if (NULL == r_start && IS_ARRAY_EXPLICIT (r_ar.as)) + r_start = r_ar.as->lower[n]; + /* If r_end is NULL take it from array specifier. */ + if (NULL == r_end && IS_ARRAY_EXPLICIT (r_ar.as)) + r_end = r_ar.as->upper[n]; + + /* Determine whether the l_stride is positive or negative. */ + if (!l_stride) + l_dir = 1; + else if (l_stride->expr_type == EXPR_CONSTANT + && l_stride->ts.type == BT_INTEGER) + l_dir = mpz_sgn (l_stride->value.integer); + else if (l_start && l_end) + l_dir = gfc_dep_compare_expr (l_end, l_start); + else + l_dir = -2; + + /* Determine whether the r_stride is positive or negative. */ + if (!r_stride) + r_dir = 1; + else if (r_stride->expr_type == EXPR_CONSTANT + && r_stride->ts.type == BT_INTEGER) + r_dir = mpz_sgn (r_stride->value.integer); + else if (r_start && r_end) + r_dir = gfc_dep_compare_expr (r_end, r_start); + else + r_dir = -2; + + /* The strides should never be zero. */ + if (l_dir == 0 || r_dir == 0) + return GFC_DEP_OVERLAP; + + /* Determine LHS upper and lower bounds. */ + if (l_dir == 1) + { + l_lower = l_start; + l_upper = l_end; + } + else if (l_dir == -1) + { + l_lower = l_end; + l_upper = l_start; + } + else + { + l_lower = NULL; + l_upper = NULL; + } + + /* Determine RHS upper and lower bounds. */ + if (r_dir == 1) + { + r_lower = r_start; + r_upper = r_end; + } + else if (r_dir == -1) + { + r_lower = r_end; + r_upper = r_start; + } + else + { + r_lower = NULL; + r_upper = NULL; + } + + /* Check whether the ranges are disjoint. */ + if (l_upper && r_lower && gfc_dep_compare_expr (l_upper, r_lower) == -1) + return GFC_DEP_NODEP; + if (r_upper && l_lower && gfc_dep_compare_expr (r_upper, l_lower) == -1) + return GFC_DEP_NODEP; + + /* Handle cases like x:y:1 vs. x:z:-1 as GFC_DEP_EQUAL. */ + if (l_start && r_start && gfc_dep_compare_expr (l_start, r_start) == 0) + { + if (l_dir == 1 && r_dir == -1) + return GFC_DEP_EQUAL; + if (l_dir == -1 && r_dir == 1) + return GFC_DEP_EQUAL; + } + + /* Handle cases like x:y:1 vs. z:y:-1 as GFC_DEP_EQUAL. */ + if (l_end && r_end && gfc_dep_compare_expr (l_end, r_end) == 0) + { + if (l_dir == 1 && r_dir == -1) + return GFC_DEP_EQUAL; + if (l_dir == -1 && r_dir == 1) + return GFC_DEP_EQUAL; + } + + /* Check for forward dependencies x:y vs. x+1:z. */ + if (l_dir == 1 && r_dir == 1 + && l_start && r_start && gfc_dep_compare_expr (l_start, r_start) == -1 + && l_end && r_end && gfc_dep_compare_expr (l_end, r_end) == -1) + { + /* Check that the strides are the same. */ + if (!l_stride && !r_stride) + return GFC_DEP_FORWARD; + if (l_stride && r_stride + && gfc_dep_compare_expr (l_stride, r_stride) == 0) + return GFC_DEP_FORWARD; + } + + /* Check for forward dependencies x:y:-1 vs. x-1:z:-1. */ + if (l_dir == -1 && r_dir == -1 + && l_start && r_start && gfc_dep_compare_expr (l_start, r_start) == 1 + && l_end && r_end && gfc_dep_compare_expr (l_end, r_end) == 1) + { + /* Check that the strides are the same. */ + if (!l_stride && !r_stride) + return GFC_DEP_FORWARD; + if (l_stride && r_stride + && gfc_dep_compare_expr (l_stride, r_stride) == 0) + return GFC_DEP_FORWARD; + } + + return GFC_DEP_OVERLAP; +} + + +/* Determines overlapping for a single element and a section. */ + +static gfc_dependency +gfc_check_element_vs_section( gfc_ref *lref, gfc_ref *rref, int n) +{ + gfc_array_ref *ref; + gfc_expr *elem; + gfc_expr *start; + gfc_expr *end; + gfc_expr *stride; + int s; + + elem = lref->u.ar.start[n]; + if (!elem) + return GFC_DEP_OVERLAP; + + ref = &rref->u.ar; + start = ref->start[n] ; + end = ref->end[n] ; + stride = ref->stride[n]; + + if (!start && IS_ARRAY_EXPLICIT (ref->as)) + start = ref->as->lower[n]; + if (!end && IS_ARRAY_EXPLICIT (ref->as)) + end = ref->as->upper[n]; + + /* Determine whether the stride is positive or negative. */ + if (!stride) + s = 1; + else if (stride->expr_type == EXPR_CONSTANT + && stride->ts.type == BT_INTEGER) + s = mpz_sgn (stride->value.integer); + else + s = -2; + + /* Stride should never be zero. */ + if (s == 0) + return GFC_DEP_OVERLAP; + + /* Positive strides. */ + if (s == 1) + { + /* Check for elem < lower. */ + if (start && gfc_dep_compare_expr (elem, start) == -1) + return GFC_DEP_NODEP; + /* Check for elem > upper. */ + if (end && gfc_dep_compare_expr (elem, end) == 1) + return GFC_DEP_NODEP; + + if (start && end) + { + s = gfc_dep_compare_expr (start, end); + /* Check for an empty range. */ + if (s == 1) + return GFC_DEP_NODEP; + if (s == 0 && gfc_dep_compare_expr (elem, start) == 0) + return GFC_DEP_EQUAL; + } + } + /* Negative strides. */ + else if (s == -1) + { + /* Check for elem > upper. */ + if (end && gfc_dep_compare_expr (elem, start) == 1) + return GFC_DEP_NODEP; + /* Check for elem < lower. */ + if (start && gfc_dep_compare_expr (elem, end) == -1) + return GFC_DEP_NODEP; + + if (start && end) + { + s = gfc_dep_compare_expr (start, end); + /* Check for an empty range. */ + if (s == -1) + return GFC_DEP_NODEP; + if (s == 0 && gfc_dep_compare_expr (elem, start) == 0) + return GFC_DEP_EQUAL; + } + } + /* Unknown strides. */ + else + { + if (!start || !end) + return GFC_DEP_OVERLAP; + s = gfc_dep_compare_expr (start, end); + if (s == -2) + return GFC_DEP_OVERLAP; + /* Assume positive stride. */ + if (s == -1) + { + /* Check for elem < lower. */ + if (gfc_dep_compare_expr (elem, start) == -1) + return GFC_DEP_NODEP; + /* Check for elem > upper. */ + if (gfc_dep_compare_expr (elem, end) == 1) + return GFC_DEP_NODEP; + } + /* Assume negative stride. */ + else if (s == 1) + { + /* Check for elem > upper. */ + if (gfc_dep_compare_expr (elem, start) == 1) + return GFC_DEP_NODEP; + /* Check for elem < lower. */ + if (gfc_dep_compare_expr (elem, end) == -1) + return GFC_DEP_NODEP; + } + /* Equal bounds. */ + else if (s == 0) + { + s = gfc_dep_compare_expr (elem, start); + if (s == 0) + return GFC_DEP_EQUAL; + if (s == 1 || s == -1) + return GFC_DEP_NODEP; + } + } + + return GFC_DEP_OVERLAP; +} + + +/* Traverse expr, checking all EXPR_VARIABLE symbols for their + forall_index attribute. Return true if any variable may be + being used as a FORALL index. Its safe to pessimistically + return true, and assume a dependency. */ + +static bool +contains_forall_index_p (gfc_expr *expr) +{ + gfc_actual_arglist *arg; + gfc_constructor *c; + gfc_ref *ref; + int i; + + if (!expr) + return false; + + switch (expr->expr_type) + { + case EXPR_VARIABLE: + if (expr->symtree->n.sym->forall_index) + return true; + break; + + case EXPR_OP: + if (contains_forall_index_p (expr->value.op.op1) + || contains_forall_index_p (expr->value.op.op2)) + return true; + break; + + case EXPR_FUNCTION: + for (arg = expr->value.function.actual; arg; arg = arg->next) + if (contains_forall_index_p (arg->expr)) + return true; + break; + + case EXPR_CONSTANT: + case EXPR_NULL: + case EXPR_SUBSTRING: + break; + + case EXPR_STRUCTURE: + case EXPR_ARRAY: + for (c = expr->value.constructor; c; c = c->next) + if (contains_forall_index_p (c->expr)) + return true; + break; + + default: + gcc_unreachable (); + } + + for (ref = expr->ref; ref; ref = ref->next) + switch (ref->type) + { + case REF_ARRAY: + for (i = 0; i < ref->u.ar.dimen; i++) + if (contains_forall_index_p (ref->u.ar.start[i]) + || contains_forall_index_p (ref->u.ar.end[i]) + || contains_forall_index_p (ref->u.ar.stride[i])) + return true; + break; + + case REF_COMPONENT: + break; + + case REF_SUBSTRING: + if (contains_forall_index_p (ref->u.ss.start) + || contains_forall_index_p (ref->u.ss.end)) + return true; + break; + + default: + gcc_unreachable (); + } + + return false; +} + +/* Determines overlapping for two single element array references. */ + +static gfc_dependency +gfc_check_element_vs_element (gfc_ref *lref, gfc_ref *rref, int n) +{ + gfc_array_ref l_ar; + gfc_array_ref r_ar; + gfc_expr *l_start; + gfc_expr *r_start; + int i; + + l_ar = lref->u.ar; + r_ar = rref->u.ar; + l_start = l_ar.start[n] ; + r_start = r_ar.start[n] ; + i = gfc_dep_compare_expr (r_start, l_start); + if (i == 0) + return GFC_DEP_EQUAL; + + /* Treat two scalar variables as potentially equal. This allows + us to prove that a(i,:) and a(j,:) have no dependency. See + Gerald Roth, "Evaluation of Array Syntax Dependence Analysis", + Proceedings of the International Conference on Parallel and + Distributed Processing Techniques and Applications (PDPTA2001), + Las Vegas, Nevada, June 2001. */ + /* However, we need to be careful when either scalar expression + contains a FORALL index, as these can potentially change value + during the scalarization/traversal of this array reference. */ + if (contains_forall_index_p (r_start) || contains_forall_index_p (l_start)) + return GFC_DEP_OVERLAP; + + if (i != -2) + return GFC_DEP_NODEP; + return GFC_DEP_EQUAL; +} + + +/* Determine if an array ref, usually an array section specifies the + entire array. */ + +bool +gfc_full_array_ref_p (gfc_ref *ref) +{ + int i; + + if (ref->type != REF_ARRAY) + return false; + if (ref->u.ar.type == AR_FULL) + return true; + if (ref->u.ar.type != AR_SECTION) + return false; + if (ref->next) + return false; + + for (i = 0; i < ref->u.ar.dimen; i++) + { + /* If we have a single element in the reference, we need to check + that the array has a single element and that we actually reference + the correct element. */ + if (ref->u.ar.dimen_type[i] == DIMEN_ELEMENT) + { + if (!ref->u.ar.as + || !ref->u.ar.as->lower[i] + || !ref->u.ar.as->upper[i] + || gfc_dep_compare_expr (ref->u.ar.as->lower[i], + ref->u.ar.as->upper[i]) + || !ref->u.ar.start[i] + || gfc_dep_compare_expr (ref->u.ar.start[i], + ref->u.ar.as->lower[i])) + return false; + else + continue; + } + + /* Check the lower bound. */ + if (ref->u.ar.start[i] + && (!ref->u.ar.as + || !ref->u.ar.as->lower[i] + || gfc_dep_compare_expr (ref->u.ar.start[i], + ref->u.ar.as->lower[i]))) + return false; + /* Check the upper bound. */ + if (ref->u.ar.end[i] + && (!ref->u.ar.as + || !ref->u.ar.as->upper[i] + || gfc_dep_compare_expr (ref->u.ar.end[i], + ref->u.ar.as->upper[i]))) + return false; + /* Check the stride. */ + if (ref->u.ar.stride[i] && !gfc_expr_is_one (ref->u.ar.stride[i], 0)) + return false; + } + return true; +} + + +/* Finds if two array references are overlapping or not. + Return value + 1 : array references are overlapping. + 0 : array references are identical or not overlapping. */ + +int +gfc_dep_resolver (gfc_ref *lref, gfc_ref *rref) +{ + int n; + gfc_dependency fin_dep; + gfc_dependency this_dep; + + fin_dep = GFC_DEP_ERROR; + /* Dependencies due to pointers should already have been identified. + We only need to check for overlapping array references. */ + + while (lref && rref) + { + /* We're resolving from the same base symbol, so both refs should be + the same type. We traverse the reference chain until we find ranges + that are not equal. */ + gcc_assert (lref->type == rref->type); + switch (lref->type) + { + case REF_COMPONENT: + /* The two ranges can't overlap if they are from different + components. */ + if (lref->u.c.component != rref->u.c.component) + return 0; + break; + + case REF_SUBSTRING: + /* Substring overlaps are handled by the string assignment code + if there is not an underlying dependency. */ + return (fin_dep == GFC_DEP_OVERLAP) ? 1 : 0; + + case REF_ARRAY: + if (lref->u.ar.dimen != rref->u.ar.dimen) + { + if (lref->u.ar.type == AR_FULL) + fin_dep = gfc_full_array_ref_p (rref) ? GFC_DEP_EQUAL + : GFC_DEP_OVERLAP; + else if (rref->u.ar.type == AR_FULL) + fin_dep = gfc_full_array_ref_p (lref) ? GFC_DEP_EQUAL + : GFC_DEP_OVERLAP; + else + return 1; + break; + } + + for (n=0; n < lref->u.ar.dimen; n++) + { + /* Assume dependency when either of array reference is vector + subscript. */ + if (lref->u.ar.dimen_type[n] == DIMEN_VECTOR + || rref->u.ar.dimen_type[n] == DIMEN_VECTOR) + return 1; + if (lref->u.ar.dimen_type[n] == DIMEN_RANGE + && rref->u.ar.dimen_type[n] == DIMEN_RANGE) + this_dep = gfc_check_section_vs_section (lref, rref, n); + else if (lref->u.ar.dimen_type[n] == DIMEN_ELEMENT + && rref->u.ar.dimen_type[n] == DIMEN_RANGE) + this_dep = gfc_check_element_vs_section (lref, rref, n); + else if (rref->u.ar.dimen_type[n] == DIMEN_ELEMENT + && lref->u.ar.dimen_type[n] == DIMEN_RANGE) + this_dep = gfc_check_element_vs_section (rref, lref, n); + else + { + gcc_assert (rref->u.ar.dimen_type[n] == DIMEN_ELEMENT + && lref->u.ar.dimen_type[n] == DIMEN_ELEMENT); + this_dep = gfc_check_element_vs_element (rref, lref, n); + } + + /* If any dimension doesn't overlap, we have no dependency. */ + if (this_dep == GFC_DEP_NODEP) + return 0; + + /* Overlap codes are in order of priority. We only need to + know the worst one.*/ + if (this_dep > fin_dep) + fin_dep = this_dep; + } + + /* If this is an equal element, we have to keep going until we find + the "real" array reference. */ + if (lref->u.ar.type == AR_ELEMENT + && rref->u.ar.type == AR_ELEMENT + && fin_dep == GFC_DEP_EQUAL) + break; + + /* Exactly matching and forward overlapping ranges don't cause a + dependency. */ + if (fin_dep < GFC_DEP_OVERLAP) + return 0; + + /* Keep checking. We only have a dependency if + subsequent references also overlap. */ + break; + + default: + gcc_unreachable (); + } + lref = lref->next; + rref = rref->next; + } + + /* If we haven't seen any array refs then something went wrong. */ + gcc_assert (fin_dep != GFC_DEP_ERROR); + + /* Assume the worst if we nest to different depths. */ + if (lref || rref) + return 1; + + return fin_dep == GFC_DEP_OVERLAP; +} + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/dependency.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/dependency.h new file mode 100644 index 0000000000..1920c558c9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/dependency.h @@ -0,0 +1,45 @@ +/* Header for dependency analysis + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/****************************** Enums *********************************/ +typedef enum +{ + NOT_ELEMENTAL, /* Not elemental case: normal dependency check. */ + ELEM_CHECK_VARIABLE, /* Test whether variables overlap. */ + ELEM_DONT_CHECK_VARIABLE /* Test whether variables overlap only if used + in an expression. */ +} +gfc_dep_check; + + +/*********************** Functions prototypes **************************/ + +bool gfc_ref_needs_temporary_p (gfc_ref *); +bool gfc_full_array_ref_p (gfc_ref *); +gfc_expr *gfc_get_noncopying_intrinsic_argument (gfc_expr *); +int gfc_check_fncall_dependency (gfc_expr *, sym_intent, gfc_symbol *, + gfc_actual_arglist *, gfc_dep_check); +int gfc_check_dependency (gfc_expr *, gfc_expr *, bool); +int gfc_is_same_range (gfc_array_ref *, gfc_array_ref *, int, int); +int gfc_expr_is_one (gfc_expr *, int); + +int gfc_dep_resolver(gfc_ref *, gfc_ref *); +int gfc_are_equivalenced_arrays (gfc_expr *, gfc_expr *); diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/dump-parse-tree.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/dump-parse-tree.c new file mode 100644 index 0000000000..32c97d06b7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/dump-parse-tree.c @@ -0,0 +1,2050 @@ +/* Parse tree dumper + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Steven Bosscher + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + + +/* Actually this is just a collection of routines that used to be + scattered around the sources. Now that they are all in a single + file, almost all of them can be static, and the other files don't + have this mess in them. + + As a nice side-effect, this file can act as documentation of the + gfc_code and gfc_expr structures and all their friends and + relatives. + + TODO: Dump DATA. */ + +#include "config.h" +#include "gfortran.h" + +/* Keep track of indentation for symbol tree dumps. */ +static int show_level = 0; + +/* The file handle we're dumping to is kept in a static variable. This + is not too cool, but it avoids a lot of passing it around. */ +static FILE *dumpfile; + +/* Forward declaration of some of the functions. */ +static void show_expr (gfc_expr *p); +static void show_code_node (int, gfc_code *); +static void show_namespace (gfc_namespace *ns); + + +/* Do indentation for a specific level. */ + +static inline void +code_indent (int level, gfc_st_label *label) +{ + int i; + + if (label != NULL) + fprintf (dumpfile, "%-5d ", label->value); + else + fputs (" ", dumpfile); + + for (i = 0; i < 2 * level; i++) + fputc (' ', dumpfile); +} + + +/* Simple indentation at the current level. This one + is used to show symbols. */ + +static inline void +show_indent (void) +{ + fputc ('\n', dumpfile); + code_indent (show_level, NULL); +} + + +/* Show type-specific information. */ + +static void +show_typespec (gfc_typespec *ts) +{ + fprintf (dumpfile, "(%s ", gfc_basic_typename (ts->type)); + + switch (ts->type) + { + case BT_DERIVED: + fprintf (dumpfile, "%s", ts->derived->name); + break; + + case BT_CHARACTER: + show_expr (ts->cl->length); + break; + + default: + fprintf (dumpfile, "%d", ts->kind); + break; + } + + fputc (')', dumpfile); +} + + +/* Show an actual argument list. */ + +static void +show_actual_arglist (gfc_actual_arglist *a) +{ + fputc ('(', dumpfile); + + for (; a; a = a->next) + { + fputc ('(', dumpfile); + if (a->name != NULL) + fprintf (dumpfile, "%s = ", a->name); + if (a->expr != NULL) + show_expr (a->expr); + else + fputs ("(arg not-present)", dumpfile); + + fputc (')', dumpfile); + if (a->next != NULL) + fputc (' ', dumpfile); + } + + fputc (')', dumpfile); +} + + +/* Show a gfc_array_spec array specification structure. */ + +static void +show_array_spec (gfc_array_spec *as) +{ + const char *c; + int i; + + if (as == NULL) + { + fputs ("()", dumpfile); + return; + } + + fprintf (dumpfile, "(%d", as->rank); + + if (as->rank != 0) + { + switch (as->type) + { + case AS_EXPLICIT: c = "AS_EXPLICIT"; break; + case AS_DEFERRED: c = "AS_DEFERRED"; break; + case AS_ASSUMED_SIZE: c = "AS_ASSUMED_SIZE"; break; + case AS_ASSUMED_SHAPE: c = "AS_ASSUMED_SHAPE"; break; + default: + gfc_internal_error ("show_array_spec(): Unhandled array shape " + "type."); + } + fprintf (dumpfile, " %s ", c); + + for (i = 0; i < as->rank; i++) + { + show_expr (as->lower[i]); + fputc (' ', dumpfile); + show_expr (as->upper[i]); + fputc (' ', dumpfile); + } + } + + fputc (')', dumpfile); +} + + +/* Show a gfc_array_ref array reference structure. */ + +static void +show_array_ref (gfc_array_ref * ar) +{ + int i; + + fputc ('(', dumpfile); + + switch (ar->type) + { + case AR_FULL: + fputs ("FULL", dumpfile); + break; + + case AR_SECTION: + for (i = 0; i < ar->dimen; i++) + { + /* There are two types of array sections: either the + elements are identified by an integer array ('vector'), + or by an index range. In the former case we only have to + print the start expression which contains the vector, in + the latter case we have to print any of lower and upper + bound and the stride, if they're present. */ + + if (ar->start[i] != NULL) + show_expr (ar->start[i]); + + if (ar->dimen_type[i] == DIMEN_RANGE) + { + fputc (':', dumpfile); + + if (ar->end[i] != NULL) + show_expr (ar->end[i]); + + if (ar->stride[i] != NULL) + { + fputc (':', dumpfile); + show_expr (ar->stride[i]); + } + } + + if (i != ar->dimen - 1) + fputs (" , ", dumpfile); + } + break; + + case AR_ELEMENT: + for (i = 0; i < ar->dimen; i++) + { + show_expr (ar->start[i]); + if (i != ar->dimen - 1) + fputs (" , ", dumpfile); + } + break; + + case AR_UNKNOWN: + fputs ("UNKNOWN", dumpfile); + break; + + default: + gfc_internal_error ("show_array_ref(): Unknown array reference"); + } + + fputc (')', dumpfile); +} + + +/* Show a list of gfc_ref structures. */ + +static void +show_ref (gfc_ref *p) +{ + for (; p; p = p->next) + switch (p->type) + { + case REF_ARRAY: + show_array_ref (&p->u.ar); + break; + + case REF_COMPONENT: + fprintf (dumpfile, " %% %s", p->u.c.component->name); + break; + + case REF_SUBSTRING: + fputc ('(', dumpfile); + show_expr (p->u.ss.start); + fputc (':', dumpfile); + show_expr (p->u.ss.end); + fputc (')', dumpfile); + break; + + default: + gfc_internal_error ("show_ref(): Bad component code"); + } +} + + +/* Display a constructor. Works recursively for array constructors. */ + +static void +show_constructor (gfc_constructor *c) +{ + for (; c; c = c->next) + { + if (c->iterator == NULL) + show_expr (c->expr); + else + { + fputc ('(', dumpfile); + show_expr (c->expr); + + fputc (' ', dumpfile); + show_expr (c->iterator->var); + fputc ('=', dumpfile); + show_expr (c->iterator->start); + fputc (',', dumpfile); + show_expr (c->iterator->end); + fputc (',', dumpfile); + show_expr (c->iterator->step); + + fputc (')', dumpfile); + } + + if (c->next != NULL) + fputs (" , ", dumpfile); + } +} + + +static void +show_char_const (const gfc_char_t *c, int length) +{ + int i; + + fputc ('\'', dumpfile); + for (i = 0; i < length; i++) + { + if (c[i] == '\'') + fputs ("''", dumpfile); + else + fputs (gfc_print_wide_char (c[i]), dumpfile); + } + fputc ('\'', dumpfile); +} + + +/* Show a component-call expression. */ + +static void +show_compcall (gfc_expr* p) +{ + gcc_assert (p->expr_type == EXPR_COMPCALL); + + fprintf (dumpfile, "%s", p->symtree->n.sym->name); + show_ref (p->ref); + fprintf (dumpfile, "%s", p->value.compcall.name); + + show_actual_arglist (p->value.compcall.actual); +} + + +/* Show an expression. */ + +static void +show_expr (gfc_expr *p) +{ + const char *c; + int i; + + if (p == NULL) + { + fputs ("()", dumpfile); + return; + } + + switch (p->expr_type) + { + case EXPR_SUBSTRING: + show_char_const (p->value.character.string, p->value.character.length); + show_ref (p->ref); + break; + + case EXPR_STRUCTURE: + fprintf (dumpfile, "%s(", p->ts.derived->name); + show_constructor (p->value.constructor); + fputc (')', dumpfile); + break; + + case EXPR_ARRAY: + fputs ("(/ ", dumpfile); + show_constructor (p->value.constructor); + fputs (" /)", dumpfile); + + show_ref (p->ref); + break; + + case EXPR_NULL: + fputs ("NULL()", dumpfile); + break; + + case EXPR_CONSTANT: + switch (p->ts.type) + { + case BT_INTEGER: + mpz_out_str (stdout, 10, p->value.integer); + + if (p->ts.kind != gfc_default_integer_kind) + fprintf (dumpfile, "_%d", p->ts.kind); + break; + + case BT_LOGICAL: + if (p->value.logical) + fputs (".true.", dumpfile); + else + fputs (".false.", dumpfile); + break; + + case BT_REAL: + mpfr_out_str (stdout, 10, 0, p->value.real, GFC_RND_MODE); + if (p->ts.kind != gfc_default_real_kind) + fprintf (dumpfile, "_%d", p->ts.kind); + break; + + case BT_CHARACTER: + show_char_const (p->value.character.string, + p->value.character.length); + break; + + case BT_COMPLEX: + fputs ("(complex ", dumpfile); + + mpfr_out_str (stdout, 10, 0, p->value.complex.r, GFC_RND_MODE); + if (p->ts.kind != gfc_default_complex_kind) + fprintf (dumpfile, "_%d", p->ts.kind); + + fputc (' ', dumpfile); + + mpfr_out_str (stdout, 10, 0, p->value.complex.i, GFC_RND_MODE); + if (p->ts.kind != gfc_default_complex_kind) + fprintf (dumpfile, "_%d", p->ts.kind); + + fputc (')', dumpfile); + break; + + case BT_HOLLERITH: + fprintf (dumpfile, "%dH", p->representation.length); + c = p->representation.string; + for (i = 0; i < p->representation.length; i++, c++) + { + fputc (*c, dumpfile); + } + break; + + default: + fputs ("???", dumpfile); + break; + } + + if (p->representation.string) + { + fputs (" {", dumpfile); + c = p->representation.string; + for (i = 0; i < p->representation.length; i++, c++) + { + fprintf (dumpfile, "%.2x", (unsigned int) *c); + if (i < p->representation.length - 1) + fputc (',', dumpfile); + } + fputc ('}', dumpfile); + } + + break; + + case EXPR_VARIABLE: + if (p->symtree->n.sym->ns && p->symtree->n.sym->ns->proc_name) + fprintf (dumpfile, "%s:", p->symtree->n.sym->ns->proc_name->name); + fprintf (dumpfile, "%s", p->symtree->n.sym->name); + show_ref (p->ref); + break; + + case EXPR_OP: + fputc ('(', dumpfile); + switch (p->value.op.op) + { + case INTRINSIC_UPLUS: + fputs ("U+ ", dumpfile); + break; + case INTRINSIC_UMINUS: + fputs ("U- ", dumpfile); + break; + case INTRINSIC_PLUS: + fputs ("+ ", dumpfile); + break; + case INTRINSIC_MINUS: + fputs ("- ", dumpfile); + break; + case INTRINSIC_TIMES: + fputs ("* ", dumpfile); + break; + case INTRINSIC_DIVIDE: + fputs ("/ ", dumpfile); + break; + case INTRINSIC_POWER: + fputs ("** ", dumpfile); + break; + case INTRINSIC_CONCAT: + fputs ("// ", dumpfile); + break; + case INTRINSIC_AND: + fputs ("AND ", dumpfile); + break; + case INTRINSIC_OR: + fputs ("OR ", dumpfile); + break; + case INTRINSIC_EQV: + fputs ("EQV ", dumpfile); + break; + case INTRINSIC_NEQV: + fputs ("NEQV ", dumpfile); + break; + case INTRINSIC_EQ: + case INTRINSIC_EQ_OS: + fputs ("= ", dumpfile); + break; + case INTRINSIC_NE: + case INTRINSIC_NE_OS: + fputs ("/= ", dumpfile); + break; + case INTRINSIC_GT: + case INTRINSIC_GT_OS: + fputs ("> ", dumpfile); + break; + case INTRINSIC_GE: + case INTRINSIC_GE_OS: + fputs (">= ", dumpfile); + break; + case INTRINSIC_LT: + case INTRINSIC_LT_OS: + fputs ("< ", dumpfile); + break; + case INTRINSIC_LE: + case INTRINSIC_LE_OS: + fputs ("<= ", dumpfile); + break; + case INTRINSIC_NOT: + fputs ("NOT ", dumpfile); + break; + case INTRINSIC_PARENTHESES: + fputs ("parens", dumpfile); + break; + + default: + gfc_internal_error + ("show_expr(): Bad intrinsic in expression!"); + } + + show_expr (p->value.op.op1); + + if (p->value.op.op2) + { + fputc (' ', dumpfile); + show_expr (p->value.op.op2); + } + + fputc (')', dumpfile); + break; + + case EXPR_FUNCTION: + if (p->value.function.name == NULL) + { + fprintf (dumpfile, "%s[", p->symtree->n.sym->name); + show_actual_arglist (p->value.function.actual); + fputc (']', dumpfile); + } + else + { + fprintf (dumpfile, "%s[[", p->value.function.name); + show_actual_arglist (p->value.function.actual); + fputc (']', dumpfile); + fputc (']', dumpfile); + } + + break; + + case EXPR_COMPCALL: + show_compcall (p); + break; + + default: + gfc_internal_error ("show_expr(): Don't know how to show expr"); + } +} + +/* Show symbol attributes. The flavor and intent are followed by + whatever single bit attributes are present. */ + +static void +show_attr (symbol_attribute *attr) +{ + + fprintf (dumpfile, "(%s %s %s %s %s", + gfc_code2string (flavors, attr->flavor), + gfc_intent_string (attr->intent), + gfc_code2string (access_types, attr->access), + gfc_code2string (procedures, attr->proc), + gfc_code2string (save_status, attr->save)); + + if (attr->allocatable) + fputs (" ALLOCATABLE", dumpfile); + if (attr->dimension) + fputs (" DIMENSION", dumpfile); + if (attr->external) + fputs (" EXTERNAL", dumpfile); + if (attr->intrinsic) + fputs (" INTRINSIC", dumpfile); + if (attr->optional) + fputs (" OPTIONAL", dumpfile); + if (attr->pointer) + fputs (" POINTER", dumpfile); + if (attr->is_protected) + fputs (" PROTECTED", dumpfile); + if (attr->value) + fputs (" VALUE", dumpfile); + if (attr->volatile_) + fputs (" VOLATILE", dumpfile); + if (attr->threadprivate) + fputs (" THREADPRIVATE", dumpfile); + if (attr->target) + fputs (" TARGET", dumpfile); + if (attr->dummy) + fputs (" DUMMY", dumpfile); + if (attr->result) + fputs (" RESULT", dumpfile); + if (attr->entry) + fputs (" ENTRY", dumpfile); + if (attr->is_bind_c) + fputs (" BIND(C)", dumpfile); + + if (attr->data) + fputs (" DATA", dumpfile); + if (attr->use_assoc) + fputs (" USE-ASSOC", dumpfile); + if (attr->in_namelist) + fputs (" IN-NAMELIST", dumpfile); + if (attr->in_common) + fputs (" IN-COMMON", dumpfile); + + if (attr->abstract) + fputs (" ABSTRACT", dumpfile); + if (attr->function) + fputs (" FUNCTION", dumpfile); + if (attr->subroutine) + fputs (" SUBROUTINE", dumpfile); + if (attr->implicit_type) + fputs (" IMPLICIT-TYPE", dumpfile); + + if (attr->sequence) + fputs (" SEQUENCE", dumpfile); + if (attr->elemental) + fputs (" ELEMENTAL", dumpfile); + if (attr->pure) + fputs (" PURE", dumpfile); + if (attr->recursive) + fputs (" RECURSIVE", dumpfile); + + fputc (')', dumpfile); +} + + +/* Show components of a derived type. */ + +static void +show_components (gfc_symbol *sym) +{ + gfc_component *c; + + for (c = sym->components; c; c = c->next) + { + fprintf (dumpfile, "(%s ", c->name); + show_typespec (&c->ts); + if (c->attr.pointer) + fputs (" POINTER", dumpfile); + if (c->attr.dimension) + fputs (" DIMENSION", dumpfile); + fputc (' ', dumpfile); + show_array_spec (c->as); + if (c->attr.access) + fprintf (dumpfile, " %s", gfc_code2string (access_types, c->attr.access)); + fputc (')', dumpfile); + if (c->next != NULL) + fputc (' ', dumpfile); + } +} + + +/* Show the f2k_derived namespace with procedure bindings. */ + +static void +show_typebound (gfc_symtree* st) +{ + if (!st->typebound) + return; + + show_indent (); + + if (st->typebound->is_generic) + fputs ("GENERIC", dumpfile); + else + { + fputs ("PROCEDURE, ", dumpfile); + if (st->typebound->nopass) + fputs ("NOPASS", dumpfile); + else + { + if (st->typebound->pass_arg) + fprintf (dumpfile, "PASS(%s)", st->typebound->pass_arg); + else + fputs ("PASS", dumpfile); + } + if (st->typebound->non_overridable) + fputs (", NON_OVERRIDABLE", dumpfile); + } + + if (st->typebound->access == ACCESS_PUBLIC) + fputs (", PUBLIC", dumpfile); + else + fputs (", PRIVATE", dumpfile); + + fprintf (dumpfile, " :: %s => ", st->n.sym->name); + + if (st->typebound->is_generic) + { + gfc_tbp_generic* g; + for (g = st->typebound->u.generic; g; g = g->next) + { + fputs (g->specific_st->name, dumpfile); + if (g->next) + fputs (", ", dumpfile); + } + } + else + fputs (st->typebound->u.specific->n.sym->name, dumpfile); +} + +static void +show_f2k_derived (gfc_namespace* f2k) +{ + gfc_finalizer* f; + + ++show_level; + + /* Finalizer bindings. */ + for (f = f2k->finalizers; f; f = f->next) + { + show_indent (); + fprintf (dumpfile, "FINAL %s", f->proc_sym->name); + } + + /* Type-bound procedures. */ + gfc_traverse_symtree (f2k->sym_root, &show_typebound); + + --show_level; +} + + +/* Show a symbol. If a symbol is an ENTRY, SUBROUTINE or FUNCTION, we + show the interface. Information needed to reconstruct the list of + specific interfaces associated with a generic symbol is done within + that symbol. */ + +static void +show_symbol (gfc_symbol *sym) +{ + gfc_formal_arglist *formal; + gfc_interface *intr; + + if (sym == NULL) + return; + + show_indent (); + + fprintf (dumpfile, "symbol %s ", sym->name); + show_typespec (&sym->ts); + show_attr (&sym->attr); + + if (sym->value) + { + show_indent (); + fputs ("value: ", dumpfile); + show_expr (sym->value); + } + + if (sym->as) + { + show_indent (); + fputs ("Array spec:", dumpfile); + show_array_spec (sym->as); + } + + if (sym->generic) + { + show_indent (); + fputs ("Generic interfaces:", dumpfile); + for (intr = sym->generic; intr; intr = intr->next) + fprintf (dumpfile, " %s", intr->sym->name); + } + + if (sym->result) + { + show_indent (); + fprintf (dumpfile, "result: %s", sym->result->name); + } + + if (sym->components) + { + show_indent (); + fputs ("components: ", dumpfile); + show_components (sym); + } + + if (sym->f2k_derived) + { + show_indent (); + fputs ("Procedure bindings:\n", dumpfile); + show_f2k_derived (sym->f2k_derived); + } + + if (sym->formal) + { + show_indent (); + fputs ("Formal arglist:", dumpfile); + + for (formal = sym->formal; formal; formal = formal->next) + { + if (formal->sym != NULL) + fprintf (dumpfile, " %s", formal->sym->name); + else + fputs (" [Alt Return]", dumpfile); + } + } + + if (sym->formal_ns) + { + show_indent (); + fputs ("Formal namespace", dumpfile); + show_namespace (sym->formal_ns); + } + + fputc ('\n', dumpfile); +} + + +/* Show a user-defined operator. Just prints an operator + and the name of the associated subroutine, really. */ + +static void +show_uop (gfc_user_op *uop) +{ + gfc_interface *intr; + + show_indent (); + fprintf (dumpfile, "%s:", uop->name); + + for (intr = uop->op; intr; intr = intr->next) + fprintf (dumpfile, " %s", intr->sym->name); +} + + +/* Workhorse function for traversing the user operator symtree. */ + +static void +traverse_uop (gfc_symtree *st, void (*func) (gfc_user_op *)) +{ + if (st == NULL) + return; + + (*func) (st->n.uop); + + traverse_uop (st->left, func); + traverse_uop (st->right, func); +} + + +/* Traverse the tree of user operator nodes. */ + +void +gfc_traverse_user_op (gfc_namespace *ns, void (*func) (gfc_user_op *)) +{ + traverse_uop (ns->uop_root, func); +} + + +/* Function to display a common block. */ + +static void +show_common (gfc_symtree *st) +{ + gfc_symbol *s; + + show_indent (); + fprintf (dumpfile, "common: /%s/ ", st->name); + + s = st->n.common->head; + while (s) + { + fprintf (dumpfile, "%s", s->name); + s = s->common_next; + if (s) + fputs (", ", dumpfile); + } + fputc ('\n', dumpfile); +} + + +/* Worker function to display the symbol tree. */ + +static void +show_symtree (gfc_symtree *st) +{ + show_indent (); + fprintf (dumpfile, "symtree: %s Ambig %d", st->name, st->ambiguous); + + if (st->n.sym->ns != gfc_current_ns) + fprintf (dumpfile, " from namespace %s", st->n.sym->ns->proc_name->name); + else + show_symbol (st->n.sym); +} + + +/******************* Show gfc_code structures **************/ + + +/* Show a list of code structures. Mutually recursive with + show_code_node(). */ + +static void +show_code (int level, gfc_code *c) +{ + for (; c; c = c->next) + show_code_node (level, c); +} + +static void +show_namelist (gfc_namelist *n) +{ + for (; n->next; n = n->next) + fprintf (dumpfile, "%s,", n->sym->name); + fprintf (dumpfile, "%s", n->sym->name); +} + +/* Show a single OpenMP directive node and everything underneath it + if necessary. */ + +static void +show_omp_node (int level, gfc_code *c) +{ + gfc_omp_clauses *omp_clauses = NULL; + const char *name = NULL; + + switch (c->op) + { + case EXEC_OMP_ATOMIC: name = "ATOMIC"; break; + case EXEC_OMP_BARRIER: name = "BARRIER"; break; + case EXEC_OMP_CRITICAL: name = "CRITICAL"; break; + case EXEC_OMP_FLUSH: name = "FLUSH"; break; + case EXEC_OMP_DO: name = "DO"; break; + case EXEC_OMP_MASTER: name = "MASTER"; break; + case EXEC_OMP_ORDERED: name = "ORDERED"; break; + case EXEC_OMP_PARALLEL: name = "PARALLEL"; break; + case EXEC_OMP_PARALLEL_DO: name = "PARALLEL DO"; break; + case EXEC_OMP_PARALLEL_SECTIONS: name = "PARALLEL SECTIONS"; break; + case EXEC_OMP_PARALLEL_WORKSHARE: name = "PARALLEL WORKSHARE"; break; + case EXEC_OMP_SECTIONS: name = "SECTIONS"; break; + case EXEC_OMP_SINGLE: name = "SINGLE"; break; + case EXEC_OMP_TASK: name = "TASK"; break; + case EXEC_OMP_TASKWAIT: name = "TASKWAIT"; break; + case EXEC_OMP_WORKSHARE: name = "WORKSHARE"; break; + default: + gcc_unreachable (); + } + fprintf (dumpfile, "!$OMP %s", name); + switch (c->op) + { + case EXEC_OMP_DO: + case EXEC_OMP_PARALLEL: + case EXEC_OMP_PARALLEL_DO: + case EXEC_OMP_PARALLEL_SECTIONS: + case EXEC_OMP_SECTIONS: + case EXEC_OMP_SINGLE: + case EXEC_OMP_WORKSHARE: + case EXEC_OMP_PARALLEL_WORKSHARE: + case EXEC_OMP_TASK: + omp_clauses = c->ext.omp_clauses; + break; + case EXEC_OMP_CRITICAL: + if (c->ext.omp_name) + fprintf (dumpfile, " (%s)", c->ext.omp_name); + break; + case EXEC_OMP_FLUSH: + if (c->ext.omp_namelist) + { + fputs (" (", dumpfile); + show_namelist (c->ext.omp_namelist); + fputc (')', dumpfile); + } + return; + case EXEC_OMP_BARRIER: + case EXEC_OMP_TASKWAIT: + return; + default: + break; + } + if (omp_clauses) + { + int list_type; + + if (omp_clauses->if_expr) + { + fputs (" IF(", dumpfile); + show_expr (omp_clauses->if_expr); + fputc (')', dumpfile); + } + if (omp_clauses->num_threads) + { + fputs (" NUM_THREADS(", dumpfile); + show_expr (omp_clauses->num_threads); + fputc (')', dumpfile); + } + if (omp_clauses->sched_kind != OMP_SCHED_NONE) + { + const char *type; + switch (omp_clauses->sched_kind) + { + case OMP_SCHED_STATIC: type = "STATIC"; break; + case OMP_SCHED_DYNAMIC: type = "DYNAMIC"; break; + case OMP_SCHED_GUIDED: type = "GUIDED"; break; + case OMP_SCHED_RUNTIME: type = "RUNTIME"; break; + case OMP_SCHED_AUTO: type = "AUTO"; break; + default: + gcc_unreachable (); + } + fprintf (dumpfile, " SCHEDULE (%s", type); + if (omp_clauses->chunk_size) + { + fputc (',', dumpfile); + show_expr (omp_clauses->chunk_size); + } + fputc (')', dumpfile); + } + if (omp_clauses->default_sharing != OMP_DEFAULT_UNKNOWN) + { + const char *type; + switch (omp_clauses->default_sharing) + { + case OMP_DEFAULT_NONE: type = "NONE"; break; + case OMP_DEFAULT_PRIVATE: type = "PRIVATE"; break; + case OMP_DEFAULT_SHARED: type = "SHARED"; break; + case OMP_DEFAULT_FIRSTPRIVATE: type = "FIRSTPRIVATE"; break; + default: + gcc_unreachable (); + } + fprintf (dumpfile, " DEFAULT(%s)", type); + } + if (omp_clauses->ordered) + fputs (" ORDERED", dumpfile); + if (omp_clauses->untied) + fputs (" UNTIED", dumpfile); + if (omp_clauses->collapse) + fprintf (dumpfile, " COLLAPSE(%d)", omp_clauses->collapse); + for (list_type = 0; list_type < OMP_LIST_NUM; list_type++) + if (omp_clauses->lists[list_type] != NULL + && list_type != OMP_LIST_COPYPRIVATE) + { + const char *type; + if (list_type >= OMP_LIST_REDUCTION_FIRST) + { + switch (list_type) + { + case OMP_LIST_PLUS: type = "+"; break; + case OMP_LIST_MULT: type = "*"; break; + case OMP_LIST_SUB: type = "-"; break; + case OMP_LIST_AND: type = ".AND."; break; + case OMP_LIST_OR: type = ".OR."; break; + case OMP_LIST_EQV: type = ".EQV."; break; + case OMP_LIST_NEQV: type = ".NEQV."; break; + case OMP_LIST_MAX: type = "MAX"; break; + case OMP_LIST_MIN: type = "MIN"; break; + case OMP_LIST_IAND: type = "IAND"; break; + case OMP_LIST_IOR: type = "IOR"; break; + case OMP_LIST_IEOR: type = "IEOR"; break; + default: + gcc_unreachable (); + } + fprintf (dumpfile, " REDUCTION(%s:", type); + } + else + { + switch (list_type) + { + case OMP_LIST_PRIVATE: type = "PRIVATE"; break; + case OMP_LIST_FIRSTPRIVATE: type = "FIRSTPRIVATE"; break; + case OMP_LIST_LASTPRIVATE: type = "LASTPRIVATE"; break; + case OMP_LIST_SHARED: type = "SHARED"; break; + case OMP_LIST_COPYIN: type = "COPYIN"; break; + default: + gcc_unreachable (); + } + fprintf (dumpfile, " %s(", type); + } + show_namelist (omp_clauses->lists[list_type]); + fputc (')', dumpfile); + } + } + fputc ('\n', dumpfile); + if (c->op == EXEC_OMP_SECTIONS || c->op == EXEC_OMP_PARALLEL_SECTIONS) + { + gfc_code *d = c->block; + while (d != NULL) + { + show_code (level + 1, d->next); + if (d->block == NULL) + break; + code_indent (level, 0); + fputs ("!$OMP SECTION\n", dumpfile); + d = d->block; + } + } + else + show_code (level + 1, c->block->next); + if (c->op == EXEC_OMP_ATOMIC) + return; + code_indent (level, 0); + fprintf (dumpfile, "!$OMP END %s", name); + if (omp_clauses != NULL) + { + if (omp_clauses->lists[OMP_LIST_COPYPRIVATE]) + { + fputs (" COPYPRIVATE(", dumpfile); + show_namelist (omp_clauses->lists[OMP_LIST_COPYPRIVATE]); + fputc (')', dumpfile); + } + else if (omp_clauses->nowait) + fputs (" NOWAIT", dumpfile); + } + else if (c->op == EXEC_OMP_CRITICAL && c->ext.omp_name) + fprintf (dumpfile, " (%s)", c->ext.omp_name); +} + + +/* Show a single code node and everything underneath it if necessary. */ + +static void +show_code_node (int level, gfc_code *c) +{ + gfc_forall_iterator *fa; + gfc_open *open; + gfc_case *cp; + gfc_alloc *a; + gfc_code *d; + gfc_close *close; + gfc_filepos *fp; + gfc_inquire *i; + gfc_dt *dt; + + code_indent (level, c->here); + + switch (c->op) + { + case EXEC_NOP: + fputs ("NOP", dumpfile); + break; + + case EXEC_CONTINUE: + fputs ("CONTINUE", dumpfile); + break; + + case EXEC_ENTRY: + fprintf (dumpfile, "ENTRY %s", c->ext.entry->sym->name); + break; + + case EXEC_INIT_ASSIGN: + case EXEC_ASSIGN: + fputs ("ASSIGN ", dumpfile); + show_expr (c->expr); + fputc (' ', dumpfile); + show_expr (c->expr2); + break; + + case EXEC_LABEL_ASSIGN: + fputs ("LABEL ASSIGN ", dumpfile); + show_expr (c->expr); + fprintf (dumpfile, " %d", c->label->value); + break; + + case EXEC_POINTER_ASSIGN: + fputs ("POINTER ASSIGN ", dumpfile); + show_expr (c->expr); + fputc (' ', dumpfile); + show_expr (c->expr2); + break; + + case EXEC_GOTO: + fputs ("GOTO ", dumpfile); + if (c->label) + fprintf (dumpfile, "%d", c->label->value); + else + { + show_expr (c->expr); + d = c->block; + if (d != NULL) + { + fputs (", (", dumpfile); + for (; d; d = d ->block) + { + code_indent (level, d->label); + if (d->block != NULL) + fputc (',', dumpfile); + else + fputc (')', dumpfile); + } + } + } + break; + + case EXEC_CALL: + case EXEC_ASSIGN_CALL: + if (c->resolved_sym) + fprintf (dumpfile, "CALL %s ", c->resolved_sym->name); + else if (c->symtree) + fprintf (dumpfile, "CALL %s ", c->symtree->name); + else + fputs ("CALL ?? ", dumpfile); + + show_actual_arglist (c->ext.actual); + break; + + case EXEC_COMPCALL: + fputs ("CALL ", dumpfile); + show_compcall (c->expr); + break; + + case EXEC_RETURN: + fputs ("RETURN ", dumpfile); + if (c->expr) + show_expr (c->expr); + break; + + case EXEC_PAUSE: + fputs ("PAUSE ", dumpfile); + + if (c->expr != NULL) + show_expr (c->expr); + else + fprintf (dumpfile, "%d", c->ext.stop_code); + + break; + + case EXEC_STOP: + fputs ("STOP ", dumpfile); + + if (c->expr != NULL) + show_expr (c->expr); + else + fprintf (dumpfile, "%d", c->ext.stop_code); + + break; + + case EXEC_ARITHMETIC_IF: + fputs ("IF ", dumpfile); + show_expr (c->expr); + fprintf (dumpfile, " %d, %d, %d", + c->label->value, c->label2->value, c->label3->value); + break; + + case EXEC_IF: + d = c->block; + fputs ("IF ", dumpfile); + show_expr (d->expr); + fputc ('\n', dumpfile); + show_code (level + 1, d->next); + + d = d->block; + for (; d; d = d->block) + { + code_indent (level, 0); + + if (d->expr == NULL) + fputs ("ELSE\n", dumpfile); + else + { + fputs ("ELSE IF ", dumpfile); + show_expr (d->expr); + fputc ('\n', dumpfile); + } + + show_code (level + 1, d->next); + } + + code_indent (level, c->label); + + fputs ("ENDIF", dumpfile); + break; + + case EXEC_SELECT: + d = c->block; + fputs ("SELECT CASE ", dumpfile); + show_expr (c->expr); + fputc ('\n', dumpfile); + + for (; d; d = d->block) + { + code_indent (level, 0); + + fputs ("CASE ", dumpfile); + for (cp = d->ext.case_list; cp; cp = cp->next) + { + fputc ('(', dumpfile); + show_expr (cp->low); + fputc (' ', dumpfile); + show_expr (cp->high); + fputc (')', dumpfile); + fputc (' ', dumpfile); + } + fputc ('\n', dumpfile); + + show_code (level + 1, d->next); + } + + code_indent (level, c->label); + fputs ("END SELECT", dumpfile); + break; + + case EXEC_WHERE: + fputs ("WHERE ", dumpfile); + + d = c->block; + show_expr (d->expr); + fputc ('\n', dumpfile); + + show_code (level + 1, d->next); + + for (d = d->block; d; d = d->block) + { + code_indent (level, 0); + fputs ("ELSE WHERE ", dumpfile); + show_expr (d->expr); + fputc ('\n', dumpfile); + show_code (level + 1, d->next); + } + + code_indent (level, 0); + fputs ("END WHERE", dumpfile); + break; + + + case EXEC_FORALL: + fputs ("FORALL ", dumpfile); + for (fa = c->ext.forall_iterator; fa; fa = fa->next) + { + show_expr (fa->var); + fputc (' ', dumpfile); + show_expr (fa->start); + fputc (':', dumpfile); + show_expr (fa->end); + fputc (':', dumpfile); + show_expr (fa->stride); + + if (fa->next != NULL) + fputc (',', dumpfile); + } + + if (c->expr != NULL) + { + fputc (',', dumpfile); + show_expr (c->expr); + } + fputc ('\n', dumpfile); + + show_code (level + 1, c->block->next); + + code_indent (level, 0); + fputs ("END FORALL", dumpfile); + break; + + case EXEC_DO: + fputs ("DO ", dumpfile); + + show_expr (c->ext.iterator->var); + fputc ('=', dumpfile); + show_expr (c->ext.iterator->start); + fputc (' ', dumpfile); + show_expr (c->ext.iterator->end); + fputc (' ', dumpfile); + show_expr (c->ext.iterator->step); + fputc ('\n', dumpfile); + + show_code (level + 1, c->block->next); + + code_indent (level, 0); + fputs ("END DO", dumpfile); + break; + + case EXEC_DO_WHILE: + fputs ("DO WHILE ", dumpfile); + show_expr (c->expr); + fputc ('\n', dumpfile); + + show_code (level + 1, c->block->next); + + code_indent (level, c->label); + fputs ("END DO", dumpfile); + break; + + case EXEC_CYCLE: + fputs ("CYCLE", dumpfile); + if (c->symtree) + fprintf (dumpfile, " %s", c->symtree->n.sym->name); + break; + + case EXEC_EXIT: + fputs ("EXIT", dumpfile); + if (c->symtree) + fprintf (dumpfile, " %s", c->symtree->n.sym->name); + break; + + case EXEC_ALLOCATE: + fputs ("ALLOCATE ", dumpfile); + if (c->expr) + { + fputs (" STAT=", dumpfile); + show_expr (c->expr); + } + + for (a = c->ext.alloc_list; a; a = a->next) + { + fputc (' ', dumpfile); + show_expr (a->expr); + } + + break; + + case EXEC_DEALLOCATE: + fputs ("DEALLOCATE ", dumpfile); + if (c->expr) + { + fputs (" STAT=", dumpfile); + show_expr (c->expr); + } + + for (a = c->ext.alloc_list; a; a = a->next) + { + fputc (' ', dumpfile); + show_expr (a->expr); + } + + break; + + case EXEC_OPEN: + fputs ("OPEN", dumpfile); + open = c->ext.open; + + if (open->unit) + { + fputs (" UNIT=", dumpfile); + show_expr (open->unit); + } + if (open->iomsg) + { + fputs (" IOMSG=", dumpfile); + show_expr (open->iomsg); + } + if (open->iostat) + { + fputs (" IOSTAT=", dumpfile); + show_expr (open->iostat); + } + if (open->file) + { + fputs (" FILE=", dumpfile); + show_expr (open->file); + } + if (open->status) + { + fputs (" STATUS=", dumpfile); + show_expr (open->status); + } + if (open->access) + { + fputs (" ACCESS=", dumpfile); + show_expr (open->access); + } + if (open->form) + { + fputs (" FORM=", dumpfile); + show_expr (open->form); + } + if (open->recl) + { + fputs (" RECL=", dumpfile); + show_expr (open->recl); + } + if (open->blank) + { + fputs (" BLANK=", dumpfile); + show_expr (open->blank); + } + if (open->position) + { + fputs (" POSITION=", dumpfile); + show_expr (open->position); + } + if (open->action) + { + fputs (" ACTION=", dumpfile); + show_expr (open->action); + } + if (open->delim) + { + fputs (" DELIM=", dumpfile); + show_expr (open->delim); + } + if (open->pad) + { + fputs (" PAD=", dumpfile); + show_expr (open->pad); + } + if (open->decimal) + { + fputs (" DECIMAL=", dumpfile); + show_expr (open->decimal); + } + if (open->encoding) + { + fputs (" ENCODING=", dumpfile); + show_expr (open->encoding); + } + if (open->round) + { + fputs (" ROUND=", dumpfile); + show_expr (open->round); + } + if (open->sign) + { + fputs (" SIGN=", dumpfile); + show_expr (open->sign); + } + if (open->convert) + { + fputs (" CONVERT=", dumpfile); + show_expr (open->convert); + } + if (open->asynchronous) + { + fputs (" ASYNCHRONOUS=", dumpfile); + show_expr (open->asynchronous); + } + if (open->err != NULL) + fprintf (dumpfile, " ERR=%d", open->err->value); + + break; + + case EXEC_CLOSE: + fputs ("CLOSE", dumpfile); + close = c->ext.close; + + if (close->unit) + { + fputs (" UNIT=", dumpfile); + show_expr (close->unit); + } + if (close->iomsg) + { + fputs (" IOMSG=", dumpfile); + show_expr (close->iomsg); + } + if (close->iostat) + { + fputs (" IOSTAT=", dumpfile); + show_expr (close->iostat); + } + if (close->status) + { + fputs (" STATUS=", dumpfile); + show_expr (close->status); + } + if (close->err != NULL) + fprintf (dumpfile, " ERR=%d", close->err->value); + break; + + case EXEC_BACKSPACE: + fputs ("BACKSPACE", dumpfile); + goto show_filepos; + + case EXEC_ENDFILE: + fputs ("ENDFILE", dumpfile); + goto show_filepos; + + case EXEC_REWIND: + fputs ("REWIND", dumpfile); + goto show_filepos; + + case EXEC_FLUSH: + fputs ("FLUSH", dumpfile); + + show_filepos: + fp = c->ext.filepos; + + if (fp->unit) + { + fputs (" UNIT=", dumpfile); + show_expr (fp->unit); + } + if (fp->iomsg) + { + fputs (" IOMSG=", dumpfile); + show_expr (fp->iomsg); + } + if (fp->iostat) + { + fputs (" IOSTAT=", dumpfile); + show_expr (fp->iostat); + } + if (fp->err != NULL) + fprintf (dumpfile, " ERR=%d", fp->err->value); + break; + + case EXEC_INQUIRE: + fputs ("INQUIRE", dumpfile); + i = c->ext.inquire; + + if (i->unit) + { + fputs (" UNIT=", dumpfile); + show_expr (i->unit); + } + if (i->file) + { + fputs (" FILE=", dumpfile); + show_expr (i->file); + } + + if (i->iomsg) + { + fputs (" IOMSG=", dumpfile); + show_expr (i->iomsg); + } + if (i->iostat) + { + fputs (" IOSTAT=", dumpfile); + show_expr (i->iostat); + } + if (i->exist) + { + fputs (" EXIST=", dumpfile); + show_expr (i->exist); + } + if (i->opened) + { + fputs (" OPENED=", dumpfile); + show_expr (i->opened); + } + if (i->number) + { + fputs (" NUMBER=", dumpfile); + show_expr (i->number); + } + if (i->named) + { + fputs (" NAMED=", dumpfile); + show_expr (i->named); + } + if (i->name) + { + fputs (" NAME=", dumpfile); + show_expr (i->name); + } + if (i->access) + { + fputs (" ACCESS=", dumpfile); + show_expr (i->access); + } + if (i->sequential) + { + fputs (" SEQUENTIAL=", dumpfile); + show_expr (i->sequential); + } + + if (i->direct) + { + fputs (" DIRECT=", dumpfile); + show_expr (i->direct); + } + if (i->form) + { + fputs (" FORM=", dumpfile); + show_expr (i->form); + } + if (i->formatted) + { + fputs (" FORMATTED", dumpfile); + show_expr (i->formatted); + } + if (i->unformatted) + { + fputs (" UNFORMATTED=", dumpfile); + show_expr (i->unformatted); + } + if (i->recl) + { + fputs (" RECL=", dumpfile); + show_expr (i->recl); + } + if (i->nextrec) + { + fputs (" NEXTREC=", dumpfile); + show_expr (i->nextrec); + } + if (i->blank) + { + fputs (" BLANK=", dumpfile); + show_expr (i->blank); + } + if (i->position) + { + fputs (" POSITION=", dumpfile); + show_expr (i->position); + } + if (i->action) + { + fputs (" ACTION=", dumpfile); + show_expr (i->action); + } + if (i->read) + { + fputs (" READ=", dumpfile); + show_expr (i->read); + } + if (i->write) + { + fputs (" WRITE=", dumpfile); + show_expr (i->write); + } + if (i->readwrite) + { + fputs (" READWRITE=", dumpfile); + show_expr (i->readwrite); + } + if (i->delim) + { + fputs (" DELIM=", dumpfile); + show_expr (i->delim); + } + if (i->pad) + { + fputs (" PAD=", dumpfile); + show_expr (i->pad); + } + if (i->convert) + { + fputs (" CONVERT=", dumpfile); + show_expr (i->convert); + } + if (i->asynchronous) + { + fputs (" ASYNCHRONOUS=", dumpfile); + show_expr (i->asynchronous); + } + if (i->decimal) + { + fputs (" DECIMAL=", dumpfile); + show_expr (i->decimal); + } + if (i->encoding) + { + fputs (" ENCODING=", dumpfile); + show_expr (i->encoding); + } + if (i->pending) + { + fputs (" PENDING=", dumpfile); + show_expr (i->pending); + } + if (i->round) + { + fputs (" ROUND=", dumpfile); + show_expr (i->round); + } + if (i->sign) + { + fputs (" SIGN=", dumpfile); + show_expr (i->sign); + } + if (i->size) + { + fputs (" SIZE=", dumpfile); + show_expr (i->size); + } + if (i->id) + { + fputs (" ID=", dumpfile); + show_expr (i->id); + } + + if (i->err != NULL) + fprintf (dumpfile, " ERR=%d", i->err->value); + break; + + case EXEC_IOLENGTH: + fputs ("IOLENGTH ", dumpfile); + show_expr (c->expr); + goto show_dt_code; + break; + + case EXEC_READ: + fputs ("READ", dumpfile); + goto show_dt; + + case EXEC_WRITE: + fputs ("WRITE", dumpfile); + + show_dt: + dt = c->ext.dt; + if (dt->io_unit) + { + fputs (" UNIT=", dumpfile); + show_expr (dt->io_unit); + } + + if (dt->format_expr) + { + fputs (" FMT=", dumpfile); + show_expr (dt->format_expr); + } + + if (dt->format_label != NULL) + fprintf (dumpfile, " FMT=%d", dt->format_label->value); + if (dt->namelist) + fprintf (dumpfile, " NML=%s", dt->namelist->name); + + if (dt->iomsg) + { + fputs (" IOMSG=", dumpfile); + show_expr (dt->iomsg); + } + if (dt->iostat) + { + fputs (" IOSTAT=", dumpfile); + show_expr (dt->iostat); + } + if (dt->size) + { + fputs (" SIZE=", dumpfile); + show_expr (dt->size); + } + if (dt->rec) + { + fputs (" REC=", dumpfile); + show_expr (dt->rec); + } + if (dt->advance) + { + fputs (" ADVANCE=", dumpfile); + show_expr (dt->advance); + } + if (dt->id) + { + fputs (" ID=", dumpfile); + show_expr (dt->id); + } + if (dt->pos) + { + fputs (" POS=", dumpfile); + show_expr (dt->pos); + } + if (dt->asynchronous) + { + fputs (" ASYNCHRONOUS=", dumpfile); + show_expr (dt->asynchronous); + } + if (dt->blank) + { + fputs (" BLANK=", dumpfile); + show_expr (dt->blank); + } + if (dt->decimal) + { + fputs (" DECIMAL=", dumpfile); + show_expr (dt->decimal); + } + if (dt->delim) + { + fputs (" DELIM=", dumpfile); + show_expr (dt->delim); + } + if (dt->pad) + { + fputs (" PAD=", dumpfile); + show_expr (dt->pad); + } + if (dt->round) + { + fputs (" ROUND=", dumpfile); + show_expr (dt->round); + } + if (dt->sign) + { + fputs (" SIGN=", dumpfile); + show_expr (dt->sign); + } + + show_dt_code: + fputc ('\n', dumpfile); + for (c = c->block->next; c; c = c->next) + show_code_node (level + (c->next != NULL), c); + return; + + case EXEC_TRANSFER: + fputs ("TRANSFER ", dumpfile); + show_expr (c->expr); + break; + + case EXEC_DT_END: + fputs ("DT_END", dumpfile); + dt = c->ext.dt; + + if (dt->err != NULL) + fprintf (dumpfile, " ERR=%d", dt->err->value); + if (dt->end != NULL) + fprintf (dumpfile, " END=%d", dt->end->value); + if (dt->eor != NULL) + fprintf (dumpfile, " EOR=%d", dt->eor->value); + break; + + case EXEC_OMP_ATOMIC: + case EXEC_OMP_BARRIER: + case EXEC_OMP_CRITICAL: + case EXEC_OMP_FLUSH: + case EXEC_OMP_DO: + case EXEC_OMP_MASTER: + case EXEC_OMP_ORDERED: + case EXEC_OMP_PARALLEL: + case EXEC_OMP_PARALLEL_DO: + case EXEC_OMP_PARALLEL_SECTIONS: + case EXEC_OMP_PARALLEL_WORKSHARE: + case EXEC_OMP_SECTIONS: + case EXEC_OMP_SINGLE: + case EXEC_OMP_TASK: + case EXEC_OMP_TASKWAIT: + case EXEC_OMP_WORKSHARE: + show_omp_node (level, c); + break; + + default: + gfc_internal_error ("show_code_node(): Bad statement code"); + } + + fputc ('\n', dumpfile); +} + + +/* Show an equivalence chain. */ + +static void +show_equiv (gfc_equiv *eq) +{ + show_indent (); + fputs ("Equivalence: ", dumpfile); + while (eq) + { + show_expr (eq->expr); + eq = eq->eq; + if (eq) + fputs (", ", dumpfile); + } +} + + +/* Show a freakin' whole namespace. */ + +static void +show_namespace (gfc_namespace *ns) +{ + gfc_interface *intr; + gfc_namespace *save; + gfc_intrinsic_op op; + gfc_equiv *eq; + int i; + + save = gfc_current_ns; + show_level++; + + show_indent (); + fputs ("Namespace:", dumpfile); + + if (ns != NULL) + { + i = 0; + do + { + int l = i; + while (i < GFC_LETTERS - 1 + && gfc_compare_types(&ns->default_type[i+1], + &ns->default_type[l])) + i++; + + if (i > l) + fprintf (dumpfile, " %c-%c: ", l+'A', i+'A'); + else + fprintf (dumpfile, " %c: ", l+'A'); + + show_typespec(&ns->default_type[l]); + i++; + } while (i < GFC_LETTERS); + + if (ns->proc_name != NULL) + { + show_indent (); + fprintf (dumpfile, "procedure name = %s", ns->proc_name->name); + } + + gfc_current_ns = ns; + gfc_traverse_symtree (ns->common_root, show_common); + + gfc_traverse_symtree (ns->sym_root, show_symtree); + + for (op = GFC_INTRINSIC_BEGIN; op != GFC_INTRINSIC_END; op++) + { + /* User operator interfaces */ + intr = ns->op[op]; + if (intr == NULL) + continue; + + show_indent (); + fprintf (dumpfile, "Operator interfaces for %s:", + gfc_op2string (op)); + + for (; intr; intr = intr->next) + fprintf (dumpfile, " %s", intr->sym->name); + } + + if (ns->uop_root != NULL) + { + show_indent (); + fputs ("User operators:\n", dumpfile); + gfc_traverse_user_op (ns, show_uop); + } + } + + for (eq = ns->equiv; eq; eq = eq->next) + show_equiv (eq); + + fputc ('\n', dumpfile); + fputc ('\n', dumpfile); + + show_code (0, ns->code); + + for (ns = ns->contained; ns; ns = ns->sibling) + { + show_indent (); + fputs ("CONTAINS\n", dumpfile); + show_namespace (ns); + } + + show_level--; + fputc ('\n', dumpfile); + gfc_current_ns = save; +} + + +/* Main function for dumping a parse tree. */ + +void +gfc_dump_parse_tree (gfc_namespace *ns, FILE *file) +{ + dumpfile = file; + show_namespace (ns); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/error.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/error.c new file mode 100644 index 0000000000..29efbd1fee --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/error.c @@ -0,0 +1,1043 @@ +/* Handle errors. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Andy Vaught & Niels Kristian Bech Jensen + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* Handle the inevitable errors. A major catch here is that things + flagged as errors in one match subroutine can conceivably be legal + elsewhere. This means that error messages are recorded and saved + for possible use later. If a line does not match a legal + construction, then the saved error message is reported. */ + +#include "config.h" +#include "system.h" +#include "flags.h" +#include "gfortran.h" + +static int suppress_errors = 0; + +static int terminal_width, buffer_flag, errors, warnings; + +static gfc_error_buf error_buffer, warning_buffer, *cur_error_buffer; + + +/* Go one level deeper suppressing errors. */ + +void +gfc_push_suppress_errors (void) +{ + gcc_assert (suppress_errors >= 0); + ++suppress_errors; +} + + +/* Leave one level of error suppressing. */ + +void +gfc_pop_suppress_errors (void) +{ + gcc_assert (suppress_errors > 0); + --suppress_errors; +} + + +/* Per-file error initialization. */ + +void +gfc_error_init_1 (void) +{ + terminal_width = gfc_terminal_width (); + errors = 0; + warnings = 0; + buffer_flag = 0; +} + + +/* Set the flag for buffering errors or not. */ + +void +gfc_buffer_error (int flag) +{ + buffer_flag = flag; +} + + +/* Add a single character to the error buffer or output depending on + buffer_flag. */ + +static void +error_char (char c) +{ + if (buffer_flag) + { + if (cur_error_buffer->index >= cur_error_buffer->allocated) + { + cur_error_buffer->allocated = cur_error_buffer->allocated + ? cur_error_buffer->allocated * 2 : 1000; + cur_error_buffer->message = XRESIZEVEC (char, cur_error_buffer->message, + cur_error_buffer->allocated); + } + cur_error_buffer->message[cur_error_buffer->index++] = c; + } + else + { + if (c != 0) + { + /* We build up complete lines before handing things + over to the library in order to speed up error printing. */ + static char *line; + static size_t allocated = 0, index = 0; + + if (index + 1 >= allocated) + { + allocated = allocated ? allocated * 2 : 1000; + line = XRESIZEVEC (char, line, allocated); + } + line[index++] = c; + if (c == '\n') + { + line[index] = '\0'; + fputs (line, stderr); + index = 0; + } + } + } +} + + +/* Copy a string to wherever it needs to go. */ + +static void +error_string (const char *p) +{ + while (*p) + error_char (*p++); +} + + +/* Print a formatted integer to the error buffer or output. */ + +#define IBUF_LEN 60 + +static void +error_uinteger (unsigned long int i) +{ + char *p, int_buf[IBUF_LEN]; + + p = int_buf + IBUF_LEN - 1; + *p-- = '\0'; + + if (i == 0) + *p-- = '0'; + + while (i > 0) + { + *p-- = i % 10 + '0'; + i = i / 10; + } + + error_string (p + 1); +} + +static void +error_integer (long int i) +{ + unsigned long int u; + + if (i < 0) + { + u = (unsigned long int) -i; + error_char ('-'); + } + else + u = i; + + error_uinteger (u); +} + + +static void +print_wide_char_into_buffer (gfc_char_t c, char *buf) +{ + static const char xdigit[16] = { '0', '1', '2', '3', '4', '5', '6', + '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + + if (gfc_wide_is_printable (c)) + { + buf[1] = '\0'; + buf[0] = (unsigned char) c; + } + else if (c < ((gfc_char_t) 1 << 8)) + { + buf[4] = '\0'; + buf[3] = xdigit[c & 0x0F]; + c = c >> 4; + buf[2] = xdigit[c & 0x0F]; + + buf[1] = 'x'; + buf[0] = '\\'; + } + else if (c < ((gfc_char_t) 1 << 16)) + { + buf[6] = '\0'; + buf[5] = xdigit[c & 0x0F]; + c = c >> 4; + buf[4] = xdigit[c & 0x0F]; + c = c >> 4; + buf[3] = xdigit[c & 0x0F]; + c = c >> 4; + buf[2] = xdigit[c & 0x0F]; + + buf[1] = 'u'; + buf[0] = '\\'; + } + else + { + buf[10] = '\0'; + buf[9] = xdigit[c & 0x0F]; + c = c >> 4; + buf[8] = xdigit[c & 0x0F]; + c = c >> 4; + buf[7] = xdigit[c & 0x0F]; + c = c >> 4; + buf[6] = xdigit[c & 0x0F]; + c = c >> 4; + buf[5] = xdigit[c & 0x0F]; + c = c >> 4; + buf[4] = xdigit[c & 0x0F]; + c = c >> 4; + buf[3] = xdigit[c & 0x0F]; + c = c >> 4; + buf[2] = xdigit[c & 0x0F]; + + buf[1] = 'U'; + buf[0] = '\\'; + } +} + +static char wide_char_print_buffer[11]; + +const char * +gfc_print_wide_char (gfc_char_t c) +{ + print_wide_char_into_buffer (c, wide_char_print_buffer); + return wide_char_print_buffer; +} + + +/* Show the file, where it was included, and the source line, give a + locus. Calls error_printf() recursively, but the recursion is at + most one level deep. */ + +static void error_printf (const char *, ...) ATTRIBUTE_GCC_GFC(1,2); + +static void +show_locus (locus *loc, int c1, int c2) +{ + gfc_linebuf *lb; + gfc_file *f; + gfc_char_t c, *p; + int i, offset, cmax; + + /* TODO: Either limit the total length and number of included files + displayed or add buffering of arbitrary number of characters in + error messages. */ + + /* Write out the error header line, giving the source file and error + location (in GNU standard "[file]:[line].[column]:" format), + followed by an "included by" stack and a blank line. This header + format is matched by a testsuite parser defined in + lib/gfortran-dg.exp. */ + + lb = loc->lb; + f = lb->file; + + error_string (f->filename); + error_char (':'); + + error_integer (LOCATION_LINE (lb->location)); + + if ((c1 > 0) || (c2 > 0)) + error_char ('.'); + + if (c1 > 0) + error_integer (c1); + + if ((c1 > 0) && (c2 > 0)) + error_char ('-'); + + if (c2 > 0) + error_integer (c2); + + error_char (':'); + error_char ('\n'); + + for (;;) + { + i = f->inclusion_line; + + f = f->up; + if (f == NULL) break; + + error_printf (" Included at %s:%d:", f->filename, i); + } + + error_char ('\n'); + + /* Calculate an appropriate horizontal offset of the source line in + order to get the error locus within the visible portion of the + line. Note that if the margin of 5 here is changed, the + corresponding margin of 10 in show_loci should be changed. */ + + offset = 0; + + /* If the two loci would appear in the same column, we shift + '2' one column to the right, so as to print '12' rather than + just '1'. We do this here so it will be accounted for in the + margin calculations. */ + + if (c1 == c2) + c2 += 1; + + cmax = (c1 < c2) ? c2 : c1; + if (cmax > terminal_width - 5) + offset = cmax - terminal_width + 5; + + /* Show the line itself, taking care not to print more than what can + show up on the terminal. Tabs are converted to spaces, and + nonprintable characters are converted to a "\xNN" sequence. */ + + /* TODO: Although setting i to the terminal width is clever, it fails + to work correctly when nonprintable characters exist. A better + solution should be found. */ + + p = &(lb->line[offset]); + i = gfc_wide_strlen (p); + if (i > terminal_width) + i = terminal_width - 1; + + for (; i > 0; i--) + { + static char buffer[11]; + + c = *p++; + if (c == '\t') + c = ' '; + + print_wide_char_into_buffer (c, buffer); + error_string (buffer); + } + + error_char ('\n'); + + /* Show the '1' and/or '2' corresponding to the column of the error + locus. Note that a value of -1 for c1 or c2 will simply cause + the relevant number not to be printed. */ + + c1 -= offset; + c2 -= offset; + + for (i = 0; i <= cmax; i++) + { + if (i == c1) + error_char ('1'); + else if (i == c2) + error_char ('2'); + else + error_char (' '); + } + + error_char ('\n'); + +} + + +/* As part of printing an error, we show the source lines that caused + the problem. We show at least one, and possibly two loci; the two + loci may or may not be on the same source line. */ + +static void +show_loci (locus *l1, locus *l2) +{ + int m, c1, c2; + + if (l1 == NULL || l1->lb == NULL) + { + error_printf ("\n"); + return; + } + + /* While calculating parameters for printing the loci, we consider possible + reasons for printing one per line. If appropriate, print the loci + individually; otherwise we print them both on the same line. */ + + c1 = l1->nextc - l1->lb->line; + if (l2 == NULL) + { + show_locus (l1, c1, -1); + return; + } + + c2 = l2->nextc - l2->lb->line; + + if (c1 < c2) + m = c2 - c1; + else + m = c1 - c2; + + /* Note that the margin value of 10 here needs to be less than the + margin of 5 used in the calculation of offset in show_locus. */ + + if (l1->lb != l2->lb || m > terminal_width - 10) + { + show_locus (l1, c1, -1); + show_locus (l2, -1, c2); + return; + } + + show_locus (l1, c1, c2); + + return; +} + + +/* Workhorse for the error printing subroutines. This subroutine is + inspired by g77's error handling and is similar to printf() with + the following %-codes: + + %c Character, %d or %i Integer, %s String, %% Percent + %L Takes locus argument + %C Current locus (no argument) + + If a locus pointer is given, the actual source line is printed out + and the column is indicated. Since we want the error message at + the bottom of any source file information, we must scan the + argument list twice -- once to determine whether the loci are + present and record this for printing, and once to print the error + message after and loci have been printed. A maximum of two locus + arguments are permitted. + + This function is also called (recursively) by show_locus in the + case of included files; however, as show_locus does not resupply + any loci, the recursion is at most one level deep. */ + +#define MAX_ARGS 10 + +static void ATTRIBUTE_GCC_GFC(2,0) +error_print (const char *type, const char *format0, va_list argp) +{ + enum { TYPE_CURRENTLOC, TYPE_LOCUS, TYPE_INTEGER, TYPE_UINTEGER, + TYPE_LONGINT, TYPE_ULONGINT, TYPE_CHAR, TYPE_STRING, + NOTYPE }; + struct + { + int type; + int pos; + union + { + int intval; + unsigned int uintval; + long int longintval; + unsigned long int ulongintval; + char charval; + const char * stringval; + } u; + } arg[MAX_ARGS], spec[MAX_ARGS]; + /* spec is the array of specifiers, in the same order as they + appear in the format string. arg is the array of arguments, + in the same order as they appear in the va_list. */ + + char c; + int i, n, have_l1, pos, maxpos; + locus *l1, *l2, *loc; + const char *format; + + l1 = l2 = NULL; + + have_l1 = 0; + pos = -1; + maxpos = -1; + + n = 0; + format = format0; + + for (i = 0; i < MAX_ARGS; i++) + { + arg[i].type = NOTYPE; + spec[i].pos = -1; + } + + /* First parse the format string for position specifiers. */ + while (*format) + { + c = *format++; + if (c != '%') + continue; + + if (*format == '%') + { + format++; + continue; + } + + if (ISDIGIT (*format)) + { + /* This is a position specifier. For example, the number + 12 in the format string "%12$d", which specifies the third + argument of the va_list, formatted in %d format. + For details, see "man 3 printf". */ + pos = atoi(format) - 1; + gcc_assert (pos >= 0); + while (ISDIGIT(*format)) + format++; + gcc_assert (*format++ == '$'); + } + else + pos++; + + c = *format++; + + if (pos > maxpos) + maxpos = pos; + + switch (c) + { + case 'C': + arg[pos].type = TYPE_CURRENTLOC; + break; + + case 'L': + arg[pos].type = TYPE_LOCUS; + break; + + case 'd': + case 'i': + arg[pos].type = TYPE_INTEGER; + break; + + case 'u': + arg[pos].type = TYPE_UINTEGER; + + case 'l': + c = *format++; + if (c == 'u') + arg[pos].type = TYPE_ULONGINT; + else if (c == 'i' || c == 'd') + arg[pos].type = TYPE_LONGINT; + else + gcc_unreachable (); + break; + + case 'c': + arg[pos].type = TYPE_CHAR; + break; + + case 's': + arg[pos].type = TYPE_STRING; + break; + + default: + gcc_unreachable (); + } + + spec[n++].pos = pos; + } + + /* Then convert the values for each %-style argument. */ + for (pos = 0; pos <= maxpos; pos++) + { + gcc_assert (arg[pos].type != NOTYPE); + switch (arg[pos].type) + { + case TYPE_CURRENTLOC: + loc = &gfc_current_locus; + /* Fall through. */ + + case TYPE_LOCUS: + if (arg[pos].type == TYPE_LOCUS) + loc = va_arg (argp, locus *); + + if (have_l1) + { + l2 = loc; + arg[pos].u.stringval = "(2)"; + } + else + { + l1 = loc; + have_l1 = 1; + arg[pos].u.stringval = "(1)"; + } + break; + + case TYPE_INTEGER: + arg[pos].u.intval = va_arg (argp, int); + break; + + case TYPE_UINTEGER: + arg[pos].u.uintval = va_arg (argp, unsigned int); + break; + + case TYPE_LONGINT: + arg[pos].u.longintval = va_arg (argp, long int); + break; + + case TYPE_ULONGINT: + arg[pos].u.ulongintval = va_arg (argp, unsigned long int); + break; + + case TYPE_CHAR: + arg[pos].u.charval = (char) va_arg (argp, int); + break; + + case TYPE_STRING: + arg[pos].u.stringval = (const char *) va_arg (argp, char *); + break; + + default: + gcc_unreachable (); + } + } + + for (n = 0; spec[n].pos >= 0; n++) + spec[n].u = arg[spec[n].pos].u; + + /* Show the current loci if we have to. */ + if (have_l1) + show_loci (l1, l2); + + if (*type) + { + error_string (type); + error_char (' '); + } + + have_l1 = 0; + format = format0; + n = 0; + + for (; *format; format++) + { + if (*format != '%') + { + error_char (*format); + continue; + } + + format++; + if (ISDIGIT (*format)) + { + /* This is a position specifier. See comment above. */ + while (ISDIGIT (*format)) + format++; + + /* Skip over the dollar sign. */ + format++; + } + + switch (*format) + { + case '%': + error_char ('%'); + break; + + case 'c': + error_char (spec[n++].u.charval); + break; + + case 's': + case 'C': /* Current locus */ + case 'L': /* Specified locus */ + error_string (spec[n++].u.stringval); + break; + + case 'd': + case 'i': + error_integer (spec[n++].u.intval); + break; + + case 'u': + error_uinteger (spec[n++].u.uintval); + break; + + case 'l': + format++; + if (*format == 'u') + error_uinteger (spec[n++].u.ulongintval); + else + error_integer (spec[n++].u.longintval); + break; + + } + } + + error_char ('\n'); +} + + +/* Wrapper for error_print(). */ + +static void +error_printf (const char *nocmsgid, ...) +{ + va_list argp; + + va_start (argp, nocmsgid); + error_print ("", _(nocmsgid), argp); + va_end (argp); +} + + +/* Increment the number of errors, and check whether too many have + been printed. */ + +static void +gfc_increment_error_count (void) +{ + errors++; + if ((gfc_option.max_errors != 0) && (errors >= gfc_option.max_errors)) + gfc_fatal_error ("Error count reached limit of %d.", gfc_option.max_errors); +} + + +/* Issue a warning. */ + +void +gfc_warning (const char *nocmsgid, ...) +{ + va_list argp; + + if (inhibit_warnings) + return; + + warning_buffer.flag = 1; + warning_buffer.index = 0; + cur_error_buffer = &warning_buffer; + + va_start (argp, nocmsgid); + error_print (_("Warning:"), _(nocmsgid), argp); + va_end (argp); + + error_char ('\0'); + + if (buffer_flag == 0) + { + warnings++; + if (warnings_are_errors) + gfc_increment_error_count(); + } +} + + +/* Whether, for a feature included in a given standard set (GFC_STD_*), + we should issue an error or a warning, or be quiet. */ + +notification +gfc_notification_std (int std) +{ + bool warning; + + warning = ((gfc_option.warn_std & std) != 0) && !inhibit_warnings; + if ((gfc_option.allow_std & std) != 0 && !warning) + return SILENT; + + return warning ? WARNING : ERROR; +} + + +/* Possibly issue a warning/error about use of a nonstandard (or deleted) + feature. An error/warning will be issued if the currently selected + standard does not contain the requested bits. Return FAILURE if + an error is generated. */ + +gfc_try +gfc_notify_std (int std, const char *nocmsgid, ...) +{ + va_list argp; + bool warning; + + warning = ((gfc_option.warn_std & std) != 0) && !inhibit_warnings; + if ((gfc_option.allow_std & std) != 0 && !warning) + return SUCCESS; + + if (suppress_errors) + return warning ? SUCCESS : FAILURE; + + cur_error_buffer = warning ? &warning_buffer : &error_buffer; + cur_error_buffer->flag = 1; + cur_error_buffer->index = 0; + + va_start (argp, nocmsgid); + if (warning) + error_print (_("Warning:"), _(nocmsgid), argp); + else + error_print (_("Error:"), _(nocmsgid), argp); + va_end (argp); + + error_char ('\0'); + + if (buffer_flag == 0) + { + if (warning && !warnings_are_errors) + warnings++; + else + gfc_increment_error_count(); + } + + return (warning && !warnings_are_errors) ? SUCCESS : FAILURE; +} + + +/* Immediate warning (i.e. do not buffer the warning). */ + +void +gfc_warning_now (const char *nocmsgid, ...) +{ + va_list argp; + int i; + + if (inhibit_warnings) + return; + + i = buffer_flag; + buffer_flag = 0; + warnings++; + if (warnings_are_errors) + gfc_increment_error_count(); + + va_start (argp, nocmsgid); + error_print (_("Warning:"), _(nocmsgid), argp); + va_end (argp); + + error_char ('\0'); + buffer_flag = i; +} + + +/* Clear the warning flag. */ + +void +gfc_clear_warning (void) +{ + warning_buffer.flag = 0; +} + + +/* Check to see if any warnings have been saved. + If so, print the warning. */ + +void +gfc_warning_check (void) +{ + if (warning_buffer.flag) + { + warnings++; + if (warning_buffer.message != NULL) + fputs (warning_buffer.message, stderr); + warning_buffer.flag = 0; + } +} + + +/* Issue an error. */ + +void +gfc_error (const char *nocmsgid, ...) +{ + va_list argp; + + if (suppress_errors) + return; + + error_buffer.flag = 1; + error_buffer.index = 0; + cur_error_buffer = &error_buffer; + + va_start (argp, nocmsgid); + error_print (_("Error:"), _(nocmsgid), argp); + va_end (argp); + + error_char ('\0'); + + if (buffer_flag == 0) + gfc_increment_error_count(); +} + + +/* Immediate error. */ + +void +gfc_error_now (const char *nocmsgid, ...) +{ + va_list argp; + int i; + + error_buffer.flag = 1; + error_buffer.index = 0; + cur_error_buffer = &error_buffer; + + i = buffer_flag; + buffer_flag = 0; + + va_start (argp, nocmsgid); + error_print (_("Error:"), _(nocmsgid), argp); + va_end (argp); + + error_char ('\0'); + + gfc_increment_error_count(); + + buffer_flag = i; + + if (flag_fatal_errors) + exit (1); +} + + +/* Fatal error, never returns. */ + +void +gfc_fatal_error (const char *nocmsgid, ...) +{ + va_list argp; + + buffer_flag = 0; + + va_start (argp, nocmsgid); + error_print (_("Fatal Error:"), _(nocmsgid), argp); + va_end (argp); + + exit (3); +} + + +/* This shouldn't happen... but sometimes does. */ + +void +gfc_internal_error (const char *format, ...) +{ + va_list argp; + + buffer_flag = 0; + + va_start (argp, format); + + show_loci (&gfc_current_locus, NULL); + error_printf ("Internal Error at (1):"); + + error_print ("", format, argp); + va_end (argp); + + exit (ICE_EXIT_CODE); +} + + +/* Clear the error flag when we start to compile a source line. */ + +void +gfc_clear_error (void) +{ + error_buffer.flag = 0; +} + + +/* Tests the state of error_flag. */ + +int +gfc_error_flag_test (void) +{ + return error_buffer.flag; +} + + +/* Check to see if any errors have been saved. + If so, print the error. Returns the state of error_flag. */ + +int +gfc_error_check (void) +{ + int rc; + + rc = error_buffer.flag; + + if (error_buffer.flag) + { + if (error_buffer.message != NULL) + fputs (error_buffer.message, stderr); + error_buffer.flag = 0; + + gfc_increment_error_count(); + + if (flag_fatal_errors) + exit (1); + } + + return rc; +} + + +/* Save the existing error state. */ + +void +gfc_push_error (gfc_error_buf *err) +{ + err->flag = error_buffer.flag; + if (error_buffer.flag) + err->message = xstrdup (error_buffer.message); + + error_buffer.flag = 0; +} + + +/* Restore a previous pushed error state. */ + +void +gfc_pop_error (gfc_error_buf *err) +{ + error_buffer.flag = err->flag; + if (error_buffer.flag) + { + size_t len = strlen (err->message) + 1; + gcc_assert (len <= error_buffer.allocated); + memcpy (error_buffer.message, err->message, len); + gfc_free (err->message); + } +} + + +/* Free a pushed error state, but keep the current error state. */ + +void +gfc_free_error (gfc_error_buf *err) +{ + if (err->flag) + gfc_free (err->message); +} + + +/* Report the number of warnings and errors that occurred to the caller. */ + +void +gfc_get_errors (int *w, int *e) +{ + if (w != NULL) + *w = warnings; + if (e != NULL) + *e = errors; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/expr.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/expr.c new file mode 100644 index 0000000000..50444e4f65 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/expr.c @@ -0,0 +1,3569 @@ +/* Routines for manipulation of expression nodes. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "gfortran.h" +#include "arith.h" +#include "match.h" +#include "target-memory.h" /* for gfc_convert_boz */ + +/* Get a new expr node. */ + +gfc_expr * +gfc_get_expr (void) +{ + gfc_expr *e; + + e = XCNEW (gfc_expr); + gfc_clear_ts (&e->ts); + e->shape = NULL; + e->ref = NULL; + e->symtree = NULL; + e->con_by_offset = NULL; + return e; +} + + +/* Free an argument list and everything below it. */ + +void +gfc_free_actual_arglist (gfc_actual_arglist *a1) +{ + gfc_actual_arglist *a2; + + while (a1) + { + a2 = a1->next; + gfc_free_expr (a1->expr); + gfc_free (a1); + a1 = a2; + } +} + + +/* Copy an arglist structure and all of the arguments. */ + +gfc_actual_arglist * +gfc_copy_actual_arglist (gfc_actual_arglist *p) +{ + gfc_actual_arglist *head, *tail, *new_arg; + + head = tail = NULL; + + for (; p; p = p->next) + { + new_arg = gfc_get_actual_arglist (); + *new_arg = *p; + + new_arg->expr = gfc_copy_expr (p->expr); + new_arg->next = NULL; + + if (head == NULL) + head = new_arg; + else + tail->next = new_arg; + + tail = new_arg; + } + + return head; +} + + +/* Free a list of reference structures. */ + +void +gfc_free_ref_list (gfc_ref *p) +{ + gfc_ref *q; + int i; + + for (; p; p = q) + { + q = p->next; + + switch (p->type) + { + case REF_ARRAY: + for (i = 0; i < GFC_MAX_DIMENSIONS; i++) + { + gfc_free_expr (p->u.ar.start[i]); + gfc_free_expr (p->u.ar.end[i]); + gfc_free_expr (p->u.ar.stride[i]); + } + + break; + + case REF_SUBSTRING: + gfc_free_expr (p->u.ss.start); + gfc_free_expr (p->u.ss.end); + break; + + case REF_COMPONENT: + break; + } + + gfc_free (p); + } +} + + +/* Workhorse function for gfc_free_expr() that frees everything + beneath an expression node, but not the node itself. This is + useful when we want to simplify a node and replace it with + something else or the expression node belongs to another structure. */ + +static void +free_expr0 (gfc_expr *e) +{ + int n; + + switch (e->expr_type) + { + case EXPR_CONSTANT: + /* Free any parts of the value that need freeing. */ + switch (e->ts.type) + { + case BT_INTEGER: + mpz_clear (e->value.integer); + break; + + case BT_REAL: + mpfr_clear (e->value.real); + break; + + case BT_CHARACTER: + gfc_free (e->value.character.string); + break; + + case BT_COMPLEX: + mpfr_clear (e->value.complex.r); + mpfr_clear (e->value.complex.i); + break; + + default: + break; + } + + /* Free the representation. */ + if (e->representation.string) + gfc_free (e->representation.string); + + break; + + case EXPR_OP: + if (e->value.op.op1 != NULL) + gfc_free_expr (e->value.op.op1); + if (e->value.op.op2 != NULL) + gfc_free_expr (e->value.op.op2); + break; + + case EXPR_FUNCTION: + gfc_free_actual_arglist (e->value.function.actual); + break; + + case EXPR_COMPCALL: + gfc_free_actual_arglist (e->value.compcall.actual); + break; + + case EXPR_VARIABLE: + break; + + case EXPR_ARRAY: + case EXPR_STRUCTURE: + gfc_free_constructor (e->value.constructor); + break; + + case EXPR_SUBSTRING: + gfc_free (e->value.character.string); + break; + + case EXPR_NULL: + break; + + default: + gfc_internal_error ("free_expr0(): Bad expr type"); + } + + /* Free a shape array. */ + if (e->shape != NULL) + { + for (n = 0; n < e->rank; n++) + mpz_clear (e->shape[n]); + + gfc_free (e->shape); + } + + gfc_free_ref_list (e->ref); + + memset (e, '\0', sizeof (gfc_expr)); +} + + +/* Free an expression node and everything beneath it. */ + +void +gfc_free_expr (gfc_expr *e) +{ + if (e == NULL) + return; + if (e->con_by_offset) + splay_tree_delete (e->con_by_offset); + free_expr0 (e); + gfc_free (e); +} + + +/* Graft the *src expression onto the *dest subexpression. */ + +void +gfc_replace_expr (gfc_expr *dest, gfc_expr *src) +{ + free_expr0 (dest); + *dest = *src; + gfc_free (src); +} + + +/* Try to extract an integer constant from the passed expression node. + Returns an error message or NULL if the result is set. It is + tempting to generate an error and return SUCCESS or FAILURE, but + failure is OK for some callers. */ + +const char * +gfc_extract_int (gfc_expr *expr, int *result) +{ + if (expr->expr_type != EXPR_CONSTANT) + return _("Constant expression required at %C"); + + if (expr->ts.type != BT_INTEGER) + return _("Integer expression required at %C"); + + if ((mpz_cmp_si (expr->value.integer, INT_MAX) > 0) + || (mpz_cmp_si (expr->value.integer, INT_MIN) < 0)) + { + return _("Integer value too large in expression at %C"); + } + + *result = (int) mpz_get_si (expr->value.integer); + + return NULL; +} + + +/* Recursively copy a list of reference structures. */ + +gfc_ref * +gfc_copy_ref (gfc_ref *src) +{ + gfc_array_ref *ar; + gfc_ref *dest; + + if (src == NULL) + return NULL; + + dest = gfc_get_ref (); + dest->type = src->type; + + switch (src->type) + { + case REF_ARRAY: + ar = gfc_copy_array_ref (&src->u.ar); + dest->u.ar = *ar; + gfc_free (ar); + break; + + case REF_COMPONENT: + dest->u.c = src->u.c; + break; + + case REF_SUBSTRING: + dest->u.ss = src->u.ss; + dest->u.ss.start = gfc_copy_expr (src->u.ss.start); + dest->u.ss.end = gfc_copy_expr (src->u.ss.end); + break; + } + + dest->next = gfc_copy_ref (src->next); + + return dest; +} + + +/* Detect whether an expression has any vector index array references. */ + +int +gfc_has_vector_index (gfc_expr *e) +{ + gfc_ref *ref; + int i; + for (ref = e->ref; ref; ref = ref->next) + if (ref->type == REF_ARRAY) + for (i = 0; i < ref->u.ar.dimen; i++) + if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR) + return 1; + return 0; +} + + +/* Copy a shape array. */ + +mpz_t * +gfc_copy_shape (mpz_t *shape, int rank) +{ + mpz_t *new_shape; + int n; + + if (shape == NULL) + return NULL; + + new_shape = gfc_get_shape (rank); + + for (n = 0; n < rank; n++) + mpz_init_set (new_shape[n], shape[n]); + + return new_shape; +} + + +/* Copy a shape array excluding dimension N, where N is an integer + constant expression. Dimensions are numbered in fortran style -- + starting with ONE. + + So, if the original shape array contains R elements + { s1 ... sN-1 sN sN+1 ... sR-1 sR} + the result contains R-1 elements: + { s1 ... sN-1 sN+1 ... sR-1} + + If anything goes wrong -- N is not a constant, its value is out + of range -- or anything else, just returns NULL. */ + +mpz_t * +gfc_copy_shape_excluding (mpz_t *shape, int rank, gfc_expr *dim) +{ + mpz_t *new_shape, *s; + int i, n; + + if (shape == NULL + || rank <= 1 + || dim == NULL + || dim->expr_type != EXPR_CONSTANT + || dim->ts.type != BT_INTEGER) + return NULL; + + n = mpz_get_si (dim->value.integer); + n--; /* Convert to zero based index. */ + if (n < 0 || n >= rank) + return NULL; + + s = new_shape = gfc_get_shape (rank - 1); + + for (i = 0; i < rank; i++) + { + if (i == n) + continue; + mpz_init_set (*s, shape[i]); + s++; + } + + return new_shape; +} + + +/* Given an expression pointer, return a copy of the expression. This + subroutine is recursive. */ + +gfc_expr * +gfc_copy_expr (gfc_expr *p) +{ + gfc_expr *q; + gfc_char_t *s; + char *c; + + if (p == NULL) + return NULL; + + q = gfc_get_expr (); + *q = *p; + + switch (q->expr_type) + { + case EXPR_SUBSTRING: + s = gfc_get_wide_string (p->value.character.length + 1); + q->value.character.string = s; + memcpy (s, p->value.character.string, + (p->value.character.length + 1) * sizeof (gfc_char_t)); + break; + + case EXPR_CONSTANT: + /* Copy target representation, if it exists. */ + if (p->representation.string) + { + c = XCNEWVEC (char, p->representation.length + 1); + q->representation.string = c; + memcpy (c, p->representation.string, (p->representation.length + 1)); + } + + /* Copy the values of any pointer components of p->value. */ + switch (q->ts.type) + { + case BT_INTEGER: + mpz_init_set (q->value.integer, p->value.integer); + break; + + case BT_REAL: + gfc_set_model_kind (q->ts.kind); + mpfr_init (q->value.real); + mpfr_set (q->value.real, p->value.real, GFC_RND_MODE); + break; + + case BT_COMPLEX: + gfc_set_model_kind (q->ts.kind); + mpfr_init (q->value.complex.r); + mpfr_init (q->value.complex.i); + mpfr_set (q->value.complex.r, p->value.complex.r, GFC_RND_MODE); + mpfr_set (q->value.complex.i, p->value.complex.i, GFC_RND_MODE); + break; + + case BT_CHARACTER: + if (p->representation.string) + q->value.character.string + = gfc_char_to_widechar (q->representation.string); + else + { + s = gfc_get_wide_string (p->value.character.length + 1); + q->value.character.string = s; + + /* This is the case for the C_NULL_CHAR named constant. */ + if (p->value.character.length == 0 + && (p->ts.is_c_interop || p->ts.is_iso_c)) + { + *s = '\0'; + /* Need to set the length to 1 to make sure the NUL + terminator is copied. */ + q->value.character.length = 1; + } + else + memcpy (s, p->value.character.string, + (p->value.character.length + 1) * sizeof (gfc_char_t)); + } + break; + + case BT_HOLLERITH: + case BT_LOGICAL: + case BT_DERIVED: + break; /* Already done. */ + + case BT_PROCEDURE: + case BT_VOID: + /* Should never be reached. */ + case BT_UNKNOWN: + gfc_internal_error ("gfc_copy_expr(): Bad expr node"); + /* Not reached. */ + } + + break; + + case EXPR_OP: + switch (q->value.op.op) + { + case INTRINSIC_NOT: + case INTRINSIC_PARENTHESES: + case INTRINSIC_UPLUS: + case INTRINSIC_UMINUS: + q->value.op.op1 = gfc_copy_expr (p->value.op.op1); + break; + + default: /* Binary operators. */ + q->value.op.op1 = gfc_copy_expr (p->value.op.op1); + q->value.op.op2 = gfc_copy_expr (p->value.op.op2); + break; + } + + break; + + case EXPR_FUNCTION: + q->value.function.actual = + gfc_copy_actual_arglist (p->value.function.actual); + break; + + case EXPR_COMPCALL: + q->value.compcall.actual = + gfc_copy_actual_arglist (p->value.compcall.actual); + q->value.compcall.tbp = p->value.compcall.tbp; + break; + + case EXPR_STRUCTURE: + case EXPR_ARRAY: + q->value.constructor = gfc_copy_constructor (p->value.constructor); + break; + + case EXPR_VARIABLE: + case EXPR_NULL: + break; + } + + q->shape = gfc_copy_shape (p->shape, p->rank); + + q->ref = gfc_copy_ref (p->ref); + + return q; +} + + +/* Return the maximum kind of two expressions. In general, higher + kind numbers mean more precision for numeric types. */ + +int +gfc_kind_max (gfc_expr *e1, gfc_expr *e2) +{ + return (e1->ts.kind > e2->ts.kind) ? e1->ts.kind : e2->ts.kind; +} + + +/* Returns nonzero if the type is numeric, zero otherwise. */ + +static int +numeric_type (bt type) +{ + return type == BT_COMPLEX || type == BT_REAL || type == BT_INTEGER; +} + + +/* Returns nonzero if the typespec is a numeric type, zero otherwise. */ + +int +gfc_numeric_ts (gfc_typespec *ts) +{ + return numeric_type (ts->type); +} + + +/* Returns an expression node that is an integer constant. */ + +gfc_expr * +gfc_int_expr (int i) +{ + gfc_expr *p; + + p = gfc_get_expr (); + + p->expr_type = EXPR_CONSTANT; + p->ts.type = BT_INTEGER; + p->ts.kind = gfc_default_integer_kind; + + p->where = gfc_current_locus; + mpz_init_set_si (p->value.integer, i); + + return p; +} + + +/* Returns an expression node that is a logical constant. */ + +gfc_expr * +gfc_logical_expr (int i, locus *where) +{ + gfc_expr *p; + + p = gfc_get_expr (); + + p->expr_type = EXPR_CONSTANT; + p->ts.type = BT_LOGICAL; + p->ts.kind = gfc_default_logical_kind; + + if (where == NULL) + where = &gfc_current_locus; + p->where = *where; + p->value.logical = i; + + return p; +} + + +/* Return an expression node with an optional argument list attached. + A variable number of gfc_expr pointers are strung together in an + argument list with a NULL pointer terminating the list. */ + +gfc_expr * +gfc_build_conversion (gfc_expr *e) +{ + gfc_expr *p; + + p = gfc_get_expr (); + p->expr_type = EXPR_FUNCTION; + p->symtree = NULL; + p->value.function.actual = NULL; + + p->value.function.actual = gfc_get_actual_arglist (); + p->value.function.actual->expr = e; + + return p; +} + + +/* Given an expression node with some sort of numeric binary + expression, insert type conversions required to make the operands + have the same type. + + The exception is that the operands of an exponential don't have to + have the same type. If possible, the base is promoted to the type + of the exponent. For example, 1**2.3 becomes 1.0**2.3, but + 1.0**2 stays as it is. */ + +void +gfc_type_convert_binary (gfc_expr *e) +{ + gfc_expr *op1, *op2; + + op1 = e->value.op.op1; + op2 = e->value.op.op2; + + if (op1->ts.type == BT_UNKNOWN || op2->ts.type == BT_UNKNOWN) + { + gfc_clear_ts (&e->ts); + return; + } + + /* Kind conversions of same type. */ + if (op1->ts.type == op2->ts.type) + { + if (op1->ts.kind == op2->ts.kind) + { + /* No type conversions. */ + e->ts = op1->ts; + goto done; + } + + if (op1->ts.kind > op2->ts.kind) + gfc_convert_type (op2, &op1->ts, 2); + else + gfc_convert_type (op1, &op2->ts, 2); + + e->ts = op1->ts; + goto done; + } + + /* Integer combined with real or complex. */ + if (op2->ts.type == BT_INTEGER) + { + e->ts = op1->ts; + + /* Special case for ** operator. */ + if (e->value.op.op == INTRINSIC_POWER) + goto done; + + gfc_convert_type (e->value.op.op2, &e->ts, 2); + goto done; + } + + if (op1->ts.type == BT_INTEGER) + { + e->ts = op2->ts; + gfc_convert_type (e->value.op.op1, &e->ts, 2); + goto done; + } + + /* Real combined with complex. */ + e->ts.type = BT_COMPLEX; + if (op1->ts.kind > op2->ts.kind) + e->ts.kind = op1->ts.kind; + else + e->ts.kind = op2->ts.kind; + if (op1->ts.type != BT_COMPLEX || op1->ts.kind != e->ts.kind) + gfc_convert_type (e->value.op.op1, &e->ts, 2); + if (op2->ts.type != BT_COMPLEX || op2->ts.kind != e->ts.kind) + gfc_convert_type (e->value.op.op2, &e->ts, 2); + +done: + return; +} + + +static match +check_specification_function (gfc_expr *e) +{ + gfc_symbol *sym; + + if (!e->symtree) + return MATCH_NO; + + sym = e->symtree->n.sym; + + /* F95, 7.1.6.2; F2003, 7.1.7 */ + if (sym + && sym->attr.function + && sym->attr.pure + && !sym->attr.intrinsic + && !sym->attr.recursive + && sym->attr.proc != PROC_INTERNAL + && sym->attr.proc != PROC_ST_FUNCTION + && sym->attr.proc != PROC_UNKNOWN + && sym->formal == NULL) + return MATCH_YES; + + return MATCH_NO; +} + +/* Function to determine if an expression is constant or not. This + function expects that the expression has already been simplified. */ + +int +gfc_is_constant_expr (gfc_expr *e) +{ + gfc_constructor *c; + gfc_actual_arglist *arg; + int rv; + + if (e == NULL) + return 1; + + switch (e->expr_type) + { + case EXPR_OP: + rv = (gfc_is_constant_expr (e->value.op.op1) + && (e->value.op.op2 == NULL + || gfc_is_constant_expr (e->value.op.op2))); + break; + + case EXPR_VARIABLE: + rv = 0; + break; + + case EXPR_FUNCTION: + /* Specification functions are constant. */ + if (check_specification_function (e) == MATCH_YES) + { + rv = 1; + break; + } + + /* Call to intrinsic with at least one argument. */ + rv = 0; + if (e->value.function.isym && e->value.function.actual) + { + for (arg = e->value.function.actual; arg; arg = arg->next) + { + if (!gfc_is_constant_expr (arg->expr)) + break; + } + if (arg == NULL) + rv = 1; + } + break; + + case EXPR_CONSTANT: + case EXPR_NULL: + rv = 1; + break; + + case EXPR_SUBSTRING: + rv = e->ref == NULL || (gfc_is_constant_expr (e->ref->u.ss.start) + && gfc_is_constant_expr (e->ref->u.ss.end)); + break; + + case EXPR_STRUCTURE: + rv = 0; + for (c = e->value.constructor; c; c = c->next) + if (!gfc_is_constant_expr (c->expr)) + break; + + if (c == NULL) + rv = 1; + break; + + case EXPR_ARRAY: + rv = gfc_constant_ac (e); + break; + + default: + gfc_internal_error ("gfc_is_constant_expr(): Unknown expression type"); + } + + return rv; +} + + +/* Is true if an array reference is followed by a component or substring + reference. */ +bool +is_subref_array (gfc_expr * e) +{ + gfc_ref * ref; + bool seen_array; + + if (e->expr_type != EXPR_VARIABLE) + return false; + + if (e->symtree->n.sym->attr.subref_array_pointer) + return true; + + seen_array = false; + for (ref = e->ref; ref; ref = ref->next) + { + if (ref->type == REF_ARRAY + && ref->u.ar.type != AR_ELEMENT) + seen_array = true; + + if (seen_array + && ref->type != REF_ARRAY) + return seen_array; + } + return false; +} + + +/* Try to collapse intrinsic expressions. */ + +static gfc_try +simplify_intrinsic_op (gfc_expr *p, int type) +{ + gfc_intrinsic_op op; + gfc_expr *op1, *op2, *result; + + if (p->value.op.op == INTRINSIC_USER) + return SUCCESS; + + op1 = p->value.op.op1; + op2 = p->value.op.op2; + op = p->value.op.op; + + if (gfc_simplify_expr (op1, type) == FAILURE) + return FAILURE; + if (gfc_simplify_expr (op2, type) == FAILURE) + return FAILURE; + + if (!gfc_is_constant_expr (op1) + || (op2 != NULL && !gfc_is_constant_expr (op2))) + return SUCCESS; + + /* Rip p apart. */ + p->value.op.op1 = NULL; + p->value.op.op2 = NULL; + + switch (op) + { + case INTRINSIC_PARENTHESES: + result = gfc_parentheses (op1); + break; + + case INTRINSIC_UPLUS: + result = gfc_uplus (op1); + break; + + case INTRINSIC_UMINUS: + result = gfc_uminus (op1); + break; + + case INTRINSIC_PLUS: + result = gfc_add (op1, op2); + break; + + case INTRINSIC_MINUS: + result = gfc_subtract (op1, op2); + break; + + case INTRINSIC_TIMES: + result = gfc_multiply (op1, op2); + break; + + case INTRINSIC_DIVIDE: + result = gfc_divide (op1, op2); + break; + + case INTRINSIC_POWER: + result = gfc_power (op1, op2); + break; + + case INTRINSIC_CONCAT: + result = gfc_concat (op1, op2); + break; + + case INTRINSIC_EQ: + case INTRINSIC_EQ_OS: + result = gfc_eq (op1, op2, op); + break; + + case INTRINSIC_NE: + case INTRINSIC_NE_OS: + result = gfc_ne (op1, op2, op); + break; + + case INTRINSIC_GT: + case INTRINSIC_GT_OS: + result = gfc_gt (op1, op2, op); + break; + + case INTRINSIC_GE: + case INTRINSIC_GE_OS: + result = gfc_ge (op1, op2, op); + break; + + case INTRINSIC_LT: + case INTRINSIC_LT_OS: + result = gfc_lt (op1, op2, op); + break; + + case INTRINSIC_LE: + case INTRINSIC_LE_OS: + result = gfc_le (op1, op2, op); + break; + + case INTRINSIC_NOT: + result = gfc_not (op1); + break; + + case INTRINSIC_AND: + result = gfc_and (op1, op2); + break; + + case INTRINSIC_OR: + result = gfc_or (op1, op2); + break; + + case INTRINSIC_EQV: + result = gfc_eqv (op1, op2); + break; + + case INTRINSIC_NEQV: + result = gfc_neqv (op1, op2); + break; + + default: + gfc_internal_error ("simplify_intrinsic_op(): Bad operator"); + } + + if (result == NULL) + { + gfc_free_expr (op1); + gfc_free_expr (op2); + return FAILURE; + } + + result->rank = p->rank; + result->where = p->where; + gfc_replace_expr (p, result); + + return SUCCESS; +} + + +/* Subroutine to simplify constructor expressions. Mutually recursive + with gfc_simplify_expr(). */ + +static gfc_try +simplify_constructor (gfc_constructor *c, int type) +{ + gfc_expr *p; + + for (; c; c = c->next) + { + if (c->iterator + && (gfc_simplify_expr (c->iterator->start, type) == FAILURE + || gfc_simplify_expr (c->iterator->end, type) == FAILURE + || gfc_simplify_expr (c->iterator->step, type) == FAILURE)) + return FAILURE; + + if (c->expr) + { + /* Try and simplify a copy. Replace the original if successful + but keep going through the constructor at all costs. Not + doing so can make a dog's dinner of complicated things. */ + p = gfc_copy_expr (c->expr); + + if (gfc_simplify_expr (p, type) == FAILURE) + { + gfc_free_expr (p); + continue; + } + + gfc_replace_expr (c->expr, p); + } + } + + return SUCCESS; +} + + +/* Pull a single array element out of an array constructor. */ + +static gfc_try +find_array_element (gfc_constructor *cons, gfc_array_ref *ar, + gfc_constructor **rval) +{ + unsigned long nelemen; + int i; + mpz_t delta; + mpz_t offset; + mpz_t span; + mpz_t tmp; + gfc_expr *e; + gfc_try t; + + t = SUCCESS; + e = NULL; + + mpz_init_set_ui (offset, 0); + mpz_init (delta); + mpz_init (tmp); + mpz_init_set_ui (span, 1); + for (i = 0; i < ar->dimen; i++) + { + if (gfc_reduce_init_expr (ar->as->lower[i]) == FAILURE + || gfc_reduce_init_expr (ar->as->upper[i]) == FAILURE) + { + t = FAILURE; + cons = NULL; + goto depart; + } + + e = gfc_copy_expr (ar->start[i]); + if (e->expr_type != EXPR_CONSTANT) + { + cons = NULL; + goto depart; + } + + gcc_assert (ar->as->upper[i]->expr_type == EXPR_CONSTANT + && ar->as->lower[i]->expr_type == EXPR_CONSTANT); + + /* Check the bounds. */ + if ((ar->as->upper[i] + && mpz_cmp (e->value.integer, + ar->as->upper[i]->value.integer) > 0) + || (mpz_cmp (e->value.integer, + ar->as->lower[i]->value.integer) < 0)) + { + gfc_error ("Index in dimension %d is out of bounds " + "at %L", i + 1, &ar->c_where[i]); + cons = NULL; + t = FAILURE; + goto depart; + } + + mpz_sub (delta, e->value.integer, ar->as->lower[i]->value.integer); + mpz_mul (delta, delta, span); + mpz_add (offset, offset, delta); + + mpz_set_ui (tmp, 1); + mpz_add (tmp, tmp, ar->as->upper[i]->value.integer); + mpz_sub (tmp, tmp, ar->as->lower[i]->value.integer); + mpz_mul (span, span, tmp); + } + + for (nelemen = mpz_get_ui (offset); nelemen > 0; nelemen--) + { + if (cons) + { + if (cons->iterator) + { + cons = NULL; + goto depart; + } + cons = cons->next; + } + } + +depart: + mpz_clear (delta); + mpz_clear (offset); + mpz_clear (span); + mpz_clear (tmp); + if (e) + gfc_free_expr (e); + *rval = cons; + return t; +} + + +/* Find a component of a structure constructor. */ + +static gfc_constructor * +find_component_ref (gfc_constructor *cons, gfc_ref *ref) +{ + gfc_component *comp; + gfc_component *pick; + + comp = ref->u.c.sym->components; + pick = ref->u.c.component; + while (comp != pick) + { + comp = comp->next; + cons = cons->next; + } + + return cons; +} + + +/* Replace an expression with the contents of a constructor, removing + the subobject reference in the process. */ + +static void +remove_subobject_ref (gfc_expr *p, gfc_constructor *cons) +{ + gfc_expr *e; + + e = cons->expr; + cons->expr = NULL; + e->ref = p->ref->next; + p->ref->next = NULL; + gfc_replace_expr (p, e); +} + + +/* Pull an array section out of an array constructor. */ + +static gfc_try +find_array_section (gfc_expr *expr, gfc_ref *ref) +{ + int idx; + int rank; + int d; + int shape_i; + long unsigned one = 1; + bool incr_ctr; + mpz_t start[GFC_MAX_DIMENSIONS]; + mpz_t end[GFC_MAX_DIMENSIONS]; + mpz_t stride[GFC_MAX_DIMENSIONS]; + mpz_t delta[GFC_MAX_DIMENSIONS]; + mpz_t ctr[GFC_MAX_DIMENSIONS]; + mpz_t delta_mpz; + mpz_t tmp_mpz; + mpz_t nelts; + mpz_t ptr; + mpz_t index; + gfc_constructor *cons; + gfc_constructor *base; + gfc_expr *begin; + gfc_expr *finish; + gfc_expr *step; + gfc_expr *upper; + gfc_expr *lower; + gfc_constructor *vecsub[GFC_MAX_DIMENSIONS], *c; + gfc_try t; + + t = SUCCESS; + + base = expr->value.constructor; + expr->value.constructor = NULL; + + rank = ref->u.ar.as->rank; + + if (expr->shape == NULL) + expr->shape = gfc_get_shape (rank); + + mpz_init_set_ui (delta_mpz, one); + mpz_init_set_ui (nelts, one); + mpz_init (tmp_mpz); + + /* Do the initialization now, so that we can cleanup without + keeping track of where we were. */ + for (d = 0; d < rank; d++) + { + mpz_init (delta[d]); + mpz_init (start[d]); + mpz_init (end[d]); + mpz_init (ctr[d]); + mpz_init (stride[d]); + vecsub[d] = NULL; + } + + /* Build the counters to clock through the array reference. */ + shape_i = 0; + for (d = 0; d < rank; d++) + { + /* Make this stretch of code easier on the eye! */ + begin = ref->u.ar.start[d]; + finish = ref->u.ar.end[d]; + step = ref->u.ar.stride[d]; + lower = ref->u.ar.as->lower[d]; + upper = ref->u.ar.as->upper[d]; + + if (ref->u.ar.dimen_type[d] == DIMEN_VECTOR) /* Vector subscript. */ + { + gcc_assert (begin); + + if (begin->expr_type != EXPR_ARRAY || !gfc_is_constant_expr (begin)) + { + t = FAILURE; + goto cleanup; + } + + gcc_assert (begin->rank == 1); + gcc_assert (begin->shape); + + vecsub[d] = begin->value.constructor; + mpz_set (ctr[d], vecsub[d]->expr->value.integer); + mpz_mul (nelts, nelts, begin->shape[0]); + mpz_set (expr->shape[shape_i++], begin->shape[0]); + + /* Check bounds. */ + for (c = vecsub[d]; c; c = c->next) + { + if (mpz_cmp (c->expr->value.integer, upper->value.integer) > 0 + || mpz_cmp (c->expr->value.integer, + lower->value.integer) < 0) + { + gfc_error ("index in dimension %d is out of bounds " + "at %L", d + 1, &ref->u.ar.c_where[d]); + t = FAILURE; + goto cleanup; + } + } + } + else + { + if ((begin && begin->expr_type != EXPR_CONSTANT) + || (finish && finish->expr_type != EXPR_CONSTANT) + || (step && step->expr_type != EXPR_CONSTANT)) + { + t = FAILURE; + goto cleanup; + } + + /* Obtain the stride. */ + if (step) + mpz_set (stride[d], step->value.integer); + else + mpz_set_ui (stride[d], one); + + if (mpz_cmp_ui (stride[d], 0) == 0) + mpz_set_ui (stride[d], one); + + /* Obtain the start value for the index. */ + if (begin) + mpz_set (start[d], begin->value.integer); + else + mpz_set (start[d], lower->value.integer); + + mpz_set (ctr[d], start[d]); + + /* Obtain the end value for the index. */ + if (finish) + mpz_set (end[d], finish->value.integer); + else + mpz_set (end[d], upper->value.integer); + + /* Separate 'if' because elements sometimes arrive with + non-null end. */ + if (ref->u.ar.dimen_type[d] == DIMEN_ELEMENT) + mpz_set (end [d], begin->value.integer); + + /* Check the bounds. */ + if (mpz_cmp (ctr[d], upper->value.integer) > 0 + || mpz_cmp (end[d], upper->value.integer) > 0 + || mpz_cmp (ctr[d], lower->value.integer) < 0 + || mpz_cmp (end[d], lower->value.integer) < 0) + { + gfc_error ("index in dimension %d is out of bounds " + "at %L", d + 1, &ref->u.ar.c_where[d]); + t = FAILURE; + goto cleanup; + } + + /* Calculate the number of elements and the shape. */ + mpz_set (tmp_mpz, stride[d]); + mpz_add (tmp_mpz, end[d], tmp_mpz); + mpz_sub (tmp_mpz, tmp_mpz, ctr[d]); + mpz_div (tmp_mpz, tmp_mpz, stride[d]); + mpz_mul (nelts, nelts, tmp_mpz); + + /* An element reference reduces the rank of the expression; don't + add anything to the shape array. */ + if (ref->u.ar.dimen_type[d] != DIMEN_ELEMENT) + mpz_set (expr->shape[shape_i++], tmp_mpz); + } + + /* Calculate the 'stride' (=delta) for conversion of the + counter values into the index along the constructor. */ + mpz_set (delta[d], delta_mpz); + mpz_sub (tmp_mpz, upper->value.integer, lower->value.integer); + mpz_add_ui (tmp_mpz, tmp_mpz, one); + mpz_mul (delta_mpz, delta_mpz, tmp_mpz); + } + + mpz_init (index); + mpz_init (ptr); + cons = base; + + /* Now clock through the array reference, calculating the index in + the source constructor and transferring the elements to the new + constructor. */ + for (idx = 0; idx < (int) mpz_get_si (nelts); idx++) + { + if (ref->u.ar.offset) + mpz_set (ptr, ref->u.ar.offset->value.integer); + else + mpz_init_set_ui (ptr, 0); + + incr_ctr = true; + for (d = 0; d < rank; d++) + { + mpz_set (tmp_mpz, ctr[d]); + mpz_sub (tmp_mpz, tmp_mpz, ref->u.ar.as->lower[d]->value.integer); + mpz_mul (tmp_mpz, tmp_mpz, delta[d]); + mpz_add (ptr, ptr, tmp_mpz); + + if (!incr_ctr) continue; + + if (ref->u.ar.dimen_type[d] == DIMEN_VECTOR) /* Vector subscript. */ + { + gcc_assert(vecsub[d]); + + if (!vecsub[d]->next) + vecsub[d] = ref->u.ar.start[d]->value.constructor; + else + { + vecsub[d] = vecsub[d]->next; + incr_ctr = false; + } + mpz_set (ctr[d], vecsub[d]->expr->value.integer); + } + else + { + mpz_add (ctr[d], ctr[d], stride[d]); + + if (mpz_cmp_ui (stride[d], 0) > 0 + ? mpz_cmp (ctr[d], end[d]) > 0 + : mpz_cmp (ctr[d], end[d]) < 0) + mpz_set (ctr[d], start[d]); + else + incr_ctr = false; + } + } + + /* There must be a better way of dealing with negative strides + than resetting the index and the constructor pointer! */ + if (mpz_cmp (ptr, index) < 0) + { + mpz_set_ui (index, 0); + cons = base; + } + + while (cons && cons->next && mpz_cmp (ptr, index) > 0) + { + mpz_add_ui (index, index, one); + cons = cons->next; + } + + gfc_append_constructor (expr, gfc_copy_expr (cons->expr)); + } + + mpz_clear (ptr); + mpz_clear (index); + +cleanup: + + mpz_clear (delta_mpz); + mpz_clear (tmp_mpz); + mpz_clear (nelts); + for (d = 0; d < rank; d++) + { + mpz_clear (delta[d]); + mpz_clear (start[d]); + mpz_clear (end[d]); + mpz_clear (ctr[d]); + mpz_clear (stride[d]); + } + gfc_free_constructor (base); + return t; +} + +/* Pull a substring out of an expression. */ + +static gfc_try +find_substring_ref (gfc_expr *p, gfc_expr **newp) +{ + int end; + int start; + int length; + gfc_char_t *chr; + + if (p->ref->u.ss.start->expr_type != EXPR_CONSTANT + || p->ref->u.ss.end->expr_type != EXPR_CONSTANT) + return FAILURE; + + *newp = gfc_copy_expr (p); + gfc_free ((*newp)->value.character.string); + + end = (int) mpz_get_ui (p->ref->u.ss.end->value.integer); + start = (int) mpz_get_ui (p->ref->u.ss.start->value.integer); + length = end - start + 1; + + chr = (*newp)->value.character.string = gfc_get_wide_string (length + 1); + (*newp)->value.character.length = length; + memcpy (chr, &p->value.character.string[start - 1], + length * sizeof (gfc_char_t)); + chr[length] = '\0'; + return SUCCESS; +} + + + +/* Simplify a subobject reference of a constructor. This occurs when + parameter variable values are substituted. */ + +static gfc_try +simplify_const_ref (gfc_expr *p) +{ + gfc_constructor *cons; + gfc_expr *newp; + + while (p->ref) + { + switch (p->ref->type) + { + case REF_ARRAY: + switch (p->ref->u.ar.type) + { + case AR_ELEMENT: + if (find_array_element (p->value.constructor, &p->ref->u.ar, + &cons) == FAILURE) + return FAILURE; + + if (!cons) + return SUCCESS; + + remove_subobject_ref (p, cons); + break; + + case AR_SECTION: + if (find_array_section (p, p->ref) == FAILURE) + return FAILURE; + p->ref->u.ar.type = AR_FULL; + + /* Fall through. */ + + case AR_FULL: + if (p->ref->next != NULL + && (p->ts.type == BT_CHARACTER || p->ts.type == BT_DERIVED)) + { + cons = p->value.constructor; + for (; cons; cons = cons->next) + { + cons->expr->ref = gfc_copy_ref (p->ref->next); + if (simplify_const_ref (cons->expr) == FAILURE) + return FAILURE; + } + + /* If this is a CHARACTER array and we possibly took a + substring out of it, update the type-spec's character + length according to the first element (as all should have + the same length). */ + if (p->ts.type == BT_CHARACTER) + { + int string_len; + + gcc_assert (p->ref->next); + gcc_assert (!p->ref->next->next); + gcc_assert (p->ref->next->type == REF_SUBSTRING); + + if (p->value.constructor) + { + const gfc_expr* first = p->value.constructor->expr; + gcc_assert (first->expr_type == EXPR_CONSTANT); + gcc_assert (first->ts.type == BT_CHARACTER); + string_len = first->value.character.length; + } + else + string_len = 0; + + if (!p->ts.cl) + { + p->ts.cl = gfc_get_charlen (); + p->ts.cl->next = NULL; + p->ts.cl->length = NULL; + } + gfc_free_expr (p->ts.cl->length); + p->ts.cl->length = gfc_int_expr (string_len); + } + } + gfc_free_ref_list (p->ref); + p->ref = NULL; + break; + + default: + return SUCCESS; + } + + break; + + case REF_COMPONENT: + cons = find_component_ref (p->value.constructor, p->ref); + remove_subobject_ref (p, cons); + break; + + case REF_SUBSTRING: + if (find_substring_ref (p, &newp) == FAILURE) + return FAILURE; + + gfc_replace_expr (p, newp); + gfc_free_ref_list (p->ref); + p->ref = NULL; + break; + } + } + + return SUCCESS; +} + + +/* Simplify a chain of references. */ + +static gfc_try +simplify_ref_chain (gfc_ref *ref, int type) +{ + int n; + + for (; ref; ref = ref->next) + { + switch (ref->type) + { + case REF_ARRAY: + for (n = 0; n < ref->u.ar.dimen; n++) + { + if (gfc_simplify_expr (ref->u.ar.start[n], type) == FAILURE) + return FAILURE; + if (gfc_simplify_expr (ref->u.ar.end[n], type) == FAILURE) + return FAILURE; + if (gfc_simplify_expr (ref->u.ar.stride[n], type) == FAILURE) + return FAILURE; + } + break; + + case REF_SUBSTRING: + if (gfc_simplify_expr (ref->u.ss.start, type) == FAILURE) + return FAILURE; + if (gfc_simplify_expr (ref->u.ss.end, type) == FAILURE) + return FAILURE; + break; + + default: + break; + } + } + return SUCCESS; +} + + +/* Try to substitute the value of a parameter variable. */ + +static gfc_try +simplify_parameter_variable (gfc_expr *p, int type) +{ + gfc_expr *e; + gfc_try t; + + e = gfc_copy_expr (p->symtree->n.sym->value); + if (e == NULL) + return FAILURE; + + e->rank = p->rank; + + /* Do not copy subobject refs for constant. */ + if (e->expr_type != EXPR_CONSTANT && p->ref != NULL) + e->ref = gfc_copy_ref (p->ref); + t = gfc_simplify_expr (e, type); + + /* Only use the simplification if it eliminated all subobject references. */ + if (t == SUCCESS && !e->ref) + gfc_replace_expr (p, e); + else + gfc_free_expr (e); + + return t; +} + +/* Given an expression, simplify it by collapsing constant + expressions. Most simplification takes place when the expression + tree is being constructed. If an intrinsic function is simplified + at some point, we get called again to collapse the result against + other constants. + + We work by recursively simplifying expression nodes, simplifying + intrinsic functions where possible, which can lead to further + constant collapsing. If an operator has constant operand(s), we + rip the expression apart, and rebuild it, hoping that it becomes + something simpler. + + The expression type is defined for: + 0 Basic expression parsing + 1 Simplifying array constructors -- will substitute + iterator values. + Returns FAILURE on error, SUCCESS otherwise. + NOTE: Will return SUCCESS even if the expression can not be simplified. */ + +gfc_try +gfc_simplify_expr (gfc_expr *p, int type) +{ + gfc_actual_arglist *ap; + + if (p == NULL) + return SUCCESS; + + switch (p->expr_type) + { + case EXPR_CONSTANT: + case EXPR_NULL: + break; + + case EXPR_FUNCTION: + for (ap = p->value.function.actual; ap; ap = ap->next) + if (gfc_simplify_expr (ap->expr, type) == FAILURE) + return FAILURE; + + if (p->value.function.isym != NULL + && gfc_intrinsic_func_interface (p, 1) == MATCH_ERROR) + return FAILURE; + + break; + + case EXPR_SUBSTRING: + if (simplify_ref_chain (p->ref, type) == FAILURE) + return FAILURE; + + if (gfc_is_constant_expr (p)) + { + gfc_char_t *s; + int start, end; + + if (p->ref && p->ref->u.ss.start) + { + gfc_extract_int (p->ref->u.ss.start, &start); + start--; /* Convert from one-based to zero-based. */ + } + else + start = 0; + + if (p->ref && p->ref->u.ss.end) + gfc_extract_int (p->ref->u.ss.end, &end); + else + end = p->value.character.length; + + s = gfc_get_wide_string (end - start + 2); + memcpy (s, p->value.character.string + start, + (end - start) * sizeof (gfc_char_t)); + s[end - start + 1] = '\0'; /* TODO: C-style string. */ + gfc_free (p->value.character.string); + p->value.character.string = s; + p->value.character.length = end - start; + p->ts.cl = gfc_get_charlen (); + p->ts.cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = p->ts.cl; + p->ts.cl->length = gfc_int_expr (p->value.character.length); + gfc_free_ref_list (p->ref); + p->ref = NULL; + p->expr_type = EXPR_CONSTANT; + } + break; + + case EXPR_OP: + if (simplify_intrinsic_op (p, type) == FAILURE) + return FAILURE; + break; + + case EXPR_VARIABLE: + /* Only substitute array parameter variables if we are in an + initialization expression, or we want a subsection. */ + if (p->symtree->n.sym->attr.flavor == FL_PARAMETER + && (gfc_init_expr || p->ref + || p->symtree->n.sym->value->expr_type != EXPR_ARRAY)) + { + if (simplify_parameter_variable (p, type) == FAILURE) + return FAILURE; + break; + } + + if (type == 1) + { + gfc_simplify_iterator_var (p); + } + + /* Simplify subcomponent references. */ + if (simplify_ref_chain (p->ref, type) == FAILURE) + return FAILURE; + + break; + + case EXPR_STRUCTURE: + case EXPR_ARRAY: + if (simplify_ref_chain (p->ref, type) == FAILURE) + return FAILURE; + + if (simplify_constructor (p->value.constructor, type) == FAILURE) + return FAILURE; + + if (p->expr_type == EXPR_ARRAY && p->ref && p->ref->type == REF_ARRAY + && p->ref->u.ar.type == AR_FULL) + gfc_expand_constructor (p); + + if (simplify_const_ref (p) == FAILURE) + return FAILURE; + + break; + + case EXPR_COMPCALL: + gcc_unreachable (); + break; + } + + return SUCCESS; +} + + +/* Returns the type of an expression with the exception that iterator + variables are automatically integers no matter what else they may + be declared as. */ + +static bt +et0 (gfc_expr *e) +{ + if (e->expr_type == EXPR_VARIABLE && gfc_check_iter_variable (e) == SUCCESS) + return BT_INTEGER; + + return e->ts.type; +} + + +/* Check an intrinsic arithmetic operation to see if it is consistent + with some type of expression. */ + +static gfc_try check_init_expr (gfc_expr *); + + +/* Scalarize an expression for an elemental intrinsic call. */ + +static gfc_try +scalarize_intrinsic_call (gfc_expr *e) +{ + gfc_actual_arglist *a, *b; + gfc_constructor *args[5], *ctor, *new_ctor; + gfc_expr *expr, *old; + int n, i, rank[5], array_arg; + + /* Find which, if any, arguments are arrays. Assume that the old + expression carries the type information and that the first arg + that is an array expression carries all the shape information.*/ + n = array_arg = 0; + a = e->value.function.actual; + for (; a; a = a->next) + { + n++; + if (a->expr->expr_type != EXPR_ARRAY) + continue; + array_arg = n; + expr = gfc_copy_expr (a->expr); + break; + } + + if (!array_arg) + return FAILURE; + + old = gfc_copy_expr (e); + + gfc_free_constructor (expr->value.constructor); + expr->value.constructor = NULL; + + expr->ts = old->ts; + expr->where = old->where; + expr->expr_type = EXPR_ARRAY; + + /* Copy the array argument constructors into an array, with nulls + for the scalars. */ + n = 0; + a = old->value.function.actual; + for (; a; a = a->next) + { + /* Check that this is OK for an initialization expression. */ + if (a->expr && check_init_expr (a->expr) == FAILURE) + goto cleanup; + + rank[n] = 0; + if (a->expr && a->expr->rank && a->expr->expr_type == EXPR_VARIABLE) + { + rank[n] = a->expr->rank; + ctor = a->expr->symtree->n.sym->value->value.constructor; + args[n] = gfc_copy_constructor (ctor); + } + else if (a->expr && a->expr->expr_type == EXPR_ARRAY) + { + if (a->expr->rank) + rank[n] = a->expr->rank; + else + rank[n] = 1; + args[n] = gfc_copy_constructor (a->expr->value.constructor); + } + else + args[n] = NULL; + n++; + } + + + /* Using the array argument as the master, step through the array + calling the function for each element and advancing the array + constructors together. */ + ctor = args[array_arg - 1]; + new_ctor = NULL; + for (; ctor; ctor = ctor->next) + { + if (expr->value.constructor == NULL) + expr->value.constructor + = new_ctor = gfc_get_constructor (); + else + { + new_ctor->next = gfc_get_constructor (); + new_ctor = new_ctor->next; + } + new_ctor->expr = gfc_copy_expr (old); + gfc_free_actual_arglist (new_ctor->expr->value.function.actual); + a = NULL; + b = old->value.function.actual; + for (i = 0; i < n; i++) + { + if (a == NULL) + new_ctor->expr->value.function.actual + = a = gfc_get_actual_arglist (); + else + { + a->next = gfc_get_actual_arglist (); + a = a->next; + } + if (args[i]) + a->expr = gfc_copy_expr (args[i]->expr); + else + a->expr = gfc_copy_expr (b->expr); + + b = b->next; + } + + /* Simplify the function calls. If the simplification fails, the + error will be flagged up down-stream or the library will deal + with it. */ + gfc_simplify_expr (new_ctor->expr, 0); + + for (i = 0; i < n; i++) + if (args[i]) + args[i] = args[i]->next; + + for (i = 1; i < n; i++) + if (rank[i] && ((args[i] != NULL && args[array_arg - 1] == NULL) + || (args[i] == NULL && args[array_arg - 1] != NULL))) + goto compliance; + } + + free_expr0 (e); + *e = *expr; + gfc_free_expr (old); + return SUCCESS; + +compliance: + gfc_error_now ("elemental function arguments at %C are not compliant"); + +cleanup: + gfc_free_expr (expr); + gfc_free_expr (old); + return FAILURE; +} + + +static gfc_try +check_intrinsic_op (gfc_expr *e, gfc_try (*check_function) (gfc_expr *)) +{ + gfc_expr *op1 = e->value.op.op1; + gfc_expr *op2 = e->value.op.op2; + + if ((*check_function) (op1) == FAILURE) + return FAILURE; + + switch (e->value.op.op) + { + case INTRINSIC_UPLUS: + case INTRINSIC_UMINUS: + if (!numeric_type (et0 (op1))) + goto not_numeric; + break; + + case INTRINSIC_EQ: + case INTRINSIC_EQ_OS: + case INTRINSIC_NE: + case INTRINSIC_NE_OS: + case INTRINSIC_GT: + case INTRINSIC_GT_OS: + case INTRINSIC_GE: + case INTRINSIC_GE_OS: + case INTRINSIC_LT: + case INTRINSIC_LT_OS: + case INTRINSIC_LE: + case INTRINSIC_LE_OS: + if ((*check_function) (op2) == FAILURE) + return FAILURE; + + if (!(et0 (op1) == BT_CHARACTER && et0 (op2) == BT_CHARACTER) + && !(numeric_type (et0 (op1)) && numeric_type (et0 (op2)))) + { + gfc_error ("Numeric or CHARACTER operands are required in " + "expression at %L", &e->where); + return FAILURE; + } + break; + + case INTRINSIC_PLUS: + case INTRINSIC_MINUS: + case INTRINSIC_TIMES: + case INTRINSIC_DIVIDE: + case INTRINSIC_POWER: + if ((*check_function) (op2) == FAILURE) + return FAILURE; + + if (!numeric_type (et0 (op1)) || !numeric_type (et0 (op2))) + goto not_numeric; + + if (e->value.op.op == INTRINSIC_POWER + && check_function == check_init_expr && et0 (op2) != BT_INTEGER) + { + if (gfc_notify_std (GFC_STD_F2003,"Fortran 2003: Noninteger " + "exponent in an initialization " + "expression at %L", &op2->where) + == FAILURE) + return FAILURE; + } + + break; + + case INTRINSIC_CONCAT: + if ((*check_function) (op2) == FAILURE) + return FAILURE; + + if (et0 (op1) != BT_CHARACTER || et0 (op2) != BT_CHARACTER) + { + gfc_error ("Concatenation operator in expression at %L " + "must have two CHARACTER operands", &op1->where); + return FAILURE; + } + + if (op1->ts.kind != op2->ts.kind) + { + gfc_error ("Concat operator at %L must concatenate strings of the " + "same kind", &e->where); + return FAILURE; + } + + break; + + case INTRINSIC_NOT: + if (et0 (op1) != BT_LOGICAL) + { + gfc_error (".NOT. operator in expression at %L must have a LOGICAL " + "operand", &op1->where); + return FAILURE; + } + + break; + + case INTRINSIC_AND: + case INTRINSIC_OR: + case INTRINSIC_EQV: + case INTRINSIC_NEQV: + if ((*check_function) (op2) == FAILURE) + return FAILURE; + + if (et0 (op1) != BT_LOGICAL || et0 (op2) != BT_LOGICAL) + { + gfc_error ("LOGICAL operands are required in expression at %L", + &e->where); + return FAILURE; + } + + break; + + case INTRINSIC_PARENTHESES: + break; + + default: + gfc_error ("Only intrinsic operators can be used in expression at %L", + &e->where); + return FAILURE; + } + + return SUCCESS; + +not_numeric: + gfc_error ("Numeric operands are required in expression at %L", &e->where); + + return FAILURE; +} + + +static match +check_init_expr_arguments (gfc_expr *e) +{ + gfc_actual_arglist *ap; + + for (ap = e->value.function.actual; ap; ap = ap->next) + if (check_init_expr (ap->expr) == FAILURE) + return MATCH_ERROR; + + return MATCH_YES; +} + +static gfc_try check_restricted (gfc_expr *); + +/* F95, 7.1.6.1, Initialization expressions, (7) + F2003, 7.1.7 Initialization expression, (8) */ + +static match +check_inquiry (gfc_expr *e, int not_restricted) +{ + const char *name; + const char *const *functions; + + static const char *const inquiry_func_f95[] = { + "lbound", "shape", "size", "ubound", + "bit_size", "len", "kind", + "digits", "epsilon", "huge", "maxexponent", "minexponent", + "precision", "radix", "range", "tiny", + NULL + }; + + static const char *const inquiry_func_f2003[] = { + "lbound", "shape", "size", "ubound", + "bit_size", "len", "kind", + "digits", "epsilon", "huge", "maxexponent", "minexponent", + "precision", "radix", "range", "tiny", + "new_line", NULL + }; + + int i; + gfc_actual_arglist *ap; + + if (!e->value.function.isym + || !e->value.function.isym->inquiry) + return MATCH_NO; + + /* An undeclared parameter will get us here (PR25018). */ + if (e->symtree == NULL) + return MATCH_NO; + + name = e->symtree->n.sym->name; + + functions = (gfc_option.warn_std & GFC_STD_F2003) + ? inquiry_func_f2003 : inquiry_func_f95; + + for (i = 0; functions[i]; i++) + if (strcmp (functions[i], name) == 0) + break; + + if (functions[i] == NULL) + return MATCH_ERROR; + + /* At this point we have an inquiry function with a variable argument. The + type of the variable might be undefined, but we need it now, because the + arguments of these functions are not allowed to be undefined. */ + + for (ap = e->value.function.actual; ap; ap = ap->next) + { + if (!ap->expr) + continue; + + if (ap->expr->ts.type == BT_UNKNOWN) + { + if (ap->expr->symtree->n.sym->ts.type == BT_UNKNOWN + && gfc_set_default_type (ap->expr->symtree->n.sym, 0, gfc_current_ns) + == FAILURE) + return MATCH_NO; + + ap->expr->ts = ap->expr->symtree->n.sym->ts; + } + + /* Assumed character length will not reduce to a constant expression + with LEN, as required by the standard. */ + if (i == 5 && not_restricted + && ap->expr->symtree->n.sym->ts.type == BT_CHARACTER + && ap->expr->symtree->n.sym->ts.cl->length == NULL) + { + gfc_error ("Assumed character length variable '%s' in constant " + "expression at %L", e->symtree->n.sym->name, &e->where); + return MATCH_ERROR; + } + else if (not_restricted && check_init_expr (ap->expr) == FAILURE) + return MATCH_ERROR; + + if (not_restricted == 0 + && ap->expr->expr_type != EXPR_VARIABLE + && check_restricted (ap->expr) == FAILURE) + return MATCH_ERROR; + } + + return MATCH_YES; +} + + +/* F95, 7.1.6.1, Initialization expressions, (5) + F2003, 7.1.7 Initialization expression, (5) */ + +static match +check_transformational (gfc_expr *e) +{ + static const char * const trans_func_f95[] = { + "repeat", "reshape", "selected_int_kind", + "selected_real_kind", "transfer", "trim", NULL + }; + + int i; + const char *name; + + if (!e->value.function.isym + || !e->value.function.isym->transformational) + return MATCH_NO; + + name = e->symtree->n.sym->name; + + /* NULL() is dealt with below. */ + if (strcmp ("null", name) == 0) + return MATCH_NO; + + for (i = 0; trans_func_f95[i]; i++) + if (strcmp (trans_func_f95[i], name) == 0) + break; + + /* FIXME, F2003: implement translation of initialization + expressions before enabling this check. For F95, error + out if the transformational function is not in the list. */ +#if 0 + if (trans_func_f95[i] == NULL + && gfc_notify_std (GFC_STD_F2003, + "transformational intrinsic '%s' at %L is not permitted " + "in an initialization expression", name, &e->where) == FAILURE) + return MATCH_ERROR; +#else + if (trans_func_f95[i] == NULL) + { + gfc_error("transformational intrinsic '%s' at %L is not permitted " + "in an initialization expression", name, &e->where); + return MATCH_ERROR; + } +#endif + + return check_init_expr_arguments (e); +} + + +/* F95, 7.1.6.1, Initialization expressions, (6) + F2003, 7.1.7 Initialization expression, (6) */ + +static match +check_null (gfc_expr *e) +{ + if (strcmp ("null", e->symtree->n.sym->name) != 0) + return MATCH_NO; + + return check_init_expr_arguments (e); +} + + +static match +check_elemental (gfc_expr *e) +{ + if (!e->value.function.isym + || !e->value.function.isym->elemental) + return MATCH_NO; + + if (e->ts.type != BT_INTEGER + && e->ts.type != BT_CHARACTER + && gfc_notify_std (GFC_STD_F2003, "Extension: Evaluation of " + "nonstandard initialization expression at %L", + &e->where) == FAILURE) + return MATCH_ERROR; + + return check_init_expr_arguments (e); +} + + +static match +check_conversion (gfc_expr *e) +{ + if (!e->value.function.isym + || !e->value.function.isym->conversion) + return MATCH_NO; + + return check_init_expr_arguments (e); +} + + +/* Verify that an expression is an initialization expression. A side + effect is that the expression tree is reduced to a single constant + node if all goes well. This would normally happen when the + expression is constructed but function references are assumed to be + intrinsics in the context of initialization expressions. If + FAILURE is returned an error message has been generated. */ + +static gfc_try +check_init_expr (gfc_expr *e) +{ + match m; + gfc_try t; + + if (e == NULL) + return SUCCESS; + + switch (e->expr_type) + { + case EXPR_OP: + t = check_intrinsic_op (e, check_init_expr); + if (t == SUCCESS) + t = gfc_simplify_expr (e, 0); + + break; + + case EXPR_FUNCTION: + t = FAILURE; + + if ((m = check_specification_function (e)) != MATCH_YES) + { + gfc_intrinsic_sym* isym; + gfc_symbol* sym; + + sym = e->symtree->n.sym; + if (!gfc_is_intrinsic (sym, 0, e->where) + || (m = gfc_intrinsic_func_interface (e, 0)) != MATCH_YES) + { + gfc_error ("Function '%s' in initialization expression at %L " + "must be an intrinsic or a specification function", + e->symtree->n.sym->name, &e->where); + break; + } + + if ((m = check_conversion (e)) == MATCH_NO + && (m = check_inquiry (e, 1)) == MATCH_NO + && (m = check_null (e)) == MATCH_NO + && (m = check_transformational (e)) == MATCH_NO + && (m = check_elemental (e)) == MATCH_NO) + { + gfc_error ("Intrinsic function '%s' at %L is not permitted " + "in an initialization expression", + e->symtree->n.sym->name, &e->where); + m = MATCH_ERROR; + } + + /* Try to scalarize an elemental intrinsic function that has an + array argument. */ + isym = gfc_find_function (e->symtree->n.sym->name); + if (isym && isym->elemental + && (t = scalarize_intrinsic_call (e)) == SUCCESS) + break; + } + + if (m == MATCH_YES) + t = gfc_simplify_expr (e, 0); + + break; + + case EXPR_VARIABLE: + t = SUCCESS; + + if (gfc_check_iter_variable (e) == SUCCESS) + break; + + if (e->symtree->n.sym->attr.flavor == FL_PARAMETER) + { + /* A PARAMETER shall not be used to define itself, i.e. + REAL, PARAMETER :: x = transfer(0, x) + is invalid. */ + if (!e->symtree->n.sym->value) + { + gfc_error("PARAMETER '%s' is used at %L before its definition " + "is complete", e->symtree->n.sym->name, &e->where); + t = FAILURE; + } + else + t = simplify_parameter_variable (e, 0); + + break; + } + + if (gfc_in_match_data ()) + break; + + t = FAILURE; + + if (e->symtree->n.sym->as) + { + switch (e->symtree->n.sym->as->type) + { + case AS_ASSUMED_SIZE: + gfc_error ("Assumed size array '%s' at %L is not permitted " + "in an initialization expression", + e->symtree->n.sym->name, &e->where); + break; + + case AS_ASSUMED_SHAPE: + gfc_error ("Assumed shape array '%s' at %L is not permitted " + "in an initialization expression", + e->symtree->n.sym->name, &e->where); + break; + + case AS_DEFERRED: + gfc_error ("Deferred array '%s' at %L is not permitted " + "in an initialization expression", + e->symtree->n.sym->name, &e->where); + break; + + case AS_EXPLICIT: + gfc_error ("Array '%s' at %L is a variable, which does " + "not reduce to a constant expression", + e->symtree->n.sym->name, &e->where); + break; + + default: + gcc_unreachable(); + } + } + else + gfc_error ("Parameter '%s' at %L has not been declared or is " + "a variable, which does not reduce to a constant " + "expression", e->symtree->n.sym->name, &e->where); + + break; + + case EXPR_CONSTANT: + case EXPR_NULL: + t = SUCCESS; + break; + + case EXPR_SUBSTRING: + t = check_init_expr (e->ref->u.ss.start); + if (t == FAILURE) + break; + + t = check_init_expr (e->ref->u.ss.end); + if (t == SUCCESS) + t = gfc_simplify_expr (e, 0); + + break; + + case EXPR_STRUCTURE: + if (e->ts.is_iso_c) + t = SUCCESS; + else + t = gfc_check_constructor (e, check_init_expr); + break; + + case EXPR_ARRAY: + t = gfc_check_constructor (e, check_init_expr); + if (t == FAILURE) + break; + + t = gfc_expand_constructor (e); + if (t == FAILURE) + break; + + t = gfc_check_constructor_type (e); + break; + + default: + gfc_internal_error ("check_init_expr(): Unknown expression type"); + } + + return t; +} + +/* Reduces a general expression to an initialization expression (a constant). + This used to be part of gfc_match_init_expr. + Note that this function doesn't free the given expression on FAILURE. */ + +gfc_try +gfc_reduce_init_expr (gfc_expr *expr) +{ + gfc_try t; + + gfc_init_expr = 1; + t = gfc_resolve_expr (expr); + if (t == SUCCESS) + t = check_init_expr (expr); + gfc_init_expr = 0; + + if (t == FAILURE) + return FAILURE; + + if (expr->expr_type == EXPR_ARRAY + && (gfc_check_constructor_type (expr) == FAILURE + || gfc_expand_constructor (expr) == FAILURE)) + return FAILURE; + + /* Not all inquiry functions are simplified to constant expressions + so it is necessary to call check_inquiry again. */ + if (!gfc_is_constant_expr (expr) && check_inquiry (expr, 1) != MATCH_YES + && !gfc_in_match_data ()) + { + gfc_error ("Initialization expression didn't reduce %C"); + return FAILURE; + } + + return SUCCESS; +} + + +/* Match an initialization expression. We work by first matching an + expression, then reducing it to a constant. */ + +match +gfc_match_init_expr (gfc_expr **result) +{ + gfc_expr *expr; + match m; + gfc_try t; + + expr = NULL; + + m = gfc_match_expr (&expr); + if (m != MATCH_YES) + return m; + + t = gfc_reduce_init_expr (expr); + if (t != SUCCESS) + { + gfc_free_expr (expr); + return MATCH_ERROR; + } + + *result = expr; + + return MATCH_YES; +} + + +/* Given an actual argument list, test to see that each argument is a + restricted expression and optionally if the expression type is + integer or character. */ + +static gfc_try +restricted_args (gfc_actual_arglist *a) +{ + for (; a; a = a->next) + { + if (check_restricted (a->expr) == FAILURE) + return FAILURE; + } + + return SUCCESS; +} + + +/************* Restricted/specification expressions *************/ + + +/* Make sure a non-intrinsic function is a specification function. */ + +static gfc_try +external_spec_function (gfc_expr *e) +{ + gfc_symbol *f; + + f = e->value.function.esym; + + if (f->attr.proc == PROC_ST_FUNCTION) + { + gfc_error ("Specification function '%s' at %L cannot be a statement " + "function", f->name, &e->where); + return FAILURE; + } + + if (f->attr.proc == PROC_INTERNAL) + { + gfc_error ("Specification function '%s' at %L cannot be an internal " + "function", f->name, &e->where); + return FAILURE; + } + + if (!f->attr.pure && !f->attr.elemental) + { + gfc_error ("Specification function '%s' at %L must be PURE", f->name, + &e->where); + return FAILURE; + } + + if (f->attr.recursive) + { + gfc_error ("Specification function '%s' at %L cannot be RECURSIVE", + f->name, &e->where); + return FAILURE; + } + + return restricted_args (e->value.function.actual); +} + + +/* Check to see that a function reference to an intrinsic is a + restricted expression. */ + +static gfc_try +restricted_intrinsic (gfc_expr *e) +{ + /* TODO: Check constraints on inquiry functions. 7.1.6.2 (7). */ + if (check_inquiry (e, 0) == MATCH_YES) + return SUCCESS; + + return restricted_args (e->value.function.actual); +} + + +/* Check the expressions of an actual arglist. Used by check_restricted. */ + +static gfc_try +check_arglist (gfc_actual_arglist* arg, gfc_try (*checker) (gfc_expr*)) +{ + for (; arg; arg = arg->next) + if (checker (arg->expr) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* Check the subscription expressions of a reference chain with a checking + function; used by check_restricted. */ + +static gfc_try +check_references (gfc_ref* ref, gfc_try (*checker) (gfc_expr*)) +{ + int dim; + + if (!ref) + return SUCCESS; + + switch (ref->type) + { + case REF_ARRAY: + for (dim = 0; dim != ref->u.ar.dimen; ++dim) + { + if (checker (ref->u.ar.start[dim]) == FAILURE) + return FAILURE; + if (checker (ref->u.ar.end[dim]) == FAILURE) + return FAILURE; + if (checker (ref->u.ar.stride[dim]) == FAILURE) + return FAILURE; + } + break; + + case REF_COMPONENT: + /* Nothing needed, just proceed to next reference. */ + break; + + case REF_SUBSTRING: + if (checker (ref->u.ss.start) == FAILURE) + return FAILURE; + if (checker (ref->u.ss.end) == FAILURE) + return FAILURE; + break; + + default: + gcc_unreachable (); + break; + } + + return check_references (ref->next, checker); +} + + +/* Verify that an expression is a restricted expression. Like its + cousin check_init_expr(), an error message is generated if we + return FAILURE. */ + +static gfc_try +check_restricted (gfc_expr *e) +{ + gfc_symbol* sym; + gfc_try t; + + if (e == NULL) + return SUCCESS; + + switch (e->expr_type) + { + case EXPR_OP: + t = check_intrinsic_op (e, check_restricted); + if (t == SUCCESS) + t = gfc_simplify_expr (e, 0); + + break; + + case EXPR_FUNCTION: + if (e->value.function.esym) + { + t = check_arglist (e->value.function.actual, &check_restricted); + if (t == SUCCESS) + t = external_spec_function (e); + } + else + { + if (e->value.function.isym && e->value.function.isym->inquiry) + t = SUCCESS; + else + t = check_arglist (e->value.function.actual, &check_restricted); + + if (t == SUCCESS) + t = restricted_intrinsic (e); + } + break; + + case EXPR_VARIABLE: + sym = e->symtree->n.sym; + t = FAILURE; + + /* If a dummy argument appears in a context that is valid for a + restricted expression in an elemental procedure, it will have + already been simplified away once we get here. Therefore we + don't need to jump through hoops to distinguish valid from + invalid cases. */ + if (sym->attr.dummy && sym->ns == gfc_current_ns + && sym->ns->proc_name && sym->ns->proc_name->attr.elemental) + { + gfc_error ("Dummy argument '%s' not allowed in expression at %L", + sym->name, &e->where); + break; + } + + if (sym->attr.optional) + { + gfc_error ("Dummy argument '%s' at %L cannot be OPTIONAL", + sym->name, &e->where); + break; + } + + if (sym->attr.intent == INTENT_OUT) + { + gfc_error ("Dummy argument '%s' at %L cannot be INTENT(OUT)", + sym->name, &e->where); + break; + } + + /* Check reference chain if any. */ + if (check_references (e->ref, &check_restricted) == FAILURE) + break; + + /* gfc_is_formal_arg broadcasts that a formal argument list is being + processed in resolve.c(resolve_formal_arglist). This is done so + that host associated dummy array indices are accepted (PR23446). + This mechanism also does the same for the specification expressions + of array-valued functions. */ + if (e->error + || sym->attr.in_common + || sym->attr.use_assoc + || sym->attr.dummy + || sym->attr.implied_index + || sym->attr.flavor == FL_PARAMETER + || (sym->ns && sym->ns == gfc_current_ns->parent) + || (sym->ns && gfc_current_ns->parent + && sym->ns == gfc_current_ns->parent->parent) + || (sym->ns->proc_name != NULL + && sym->ns->proc_name->attr.flavor == FL_MODULE) + || (gfc_is_formal_arg () && (sym->ns == gfc_current_ns))) + { + t = SUCCESS; + break; + } + + gfc_error ("Variable '%s' cannot appear in the expression at %L", + sym->name, &e->where); + /* Prevent a repetition of the error. */ + e->error = 1; + break; + + case EXPR_NULL: + case EXPR_CONSTANT: + t = SUCCESS; + break; + + case EXPR_SUBSTRING: + t = gfc_specification_expr (e->ref->u.ss.start); + if (t == FAILURE) + break; + + t = gfc_specification_expr (e->ref->u.ss.end); + if (t == SUCCESS) + t = gfc_simplify_expr (e, 0); + + break; + + case EXPR_STRUCTURE: + t = gfc_check_constructor (e, check_restricted); + break; + + case EXPR_ARRAY: + t = gfc_check_constructor (e, check_restricted); + break; + + default: + gfc_internal_error ("check_restricted(): Unknown expression type"); + } + + return t; +} + + +/* Check to see that an expression is a specification expression. If + we return FAILURE, an error has been generated. */ + +gfc_try +gfc_specification_expr (gfc_expr *e) +{ + + if (e == NULL) + return SUCCESS; + + if (e->ts.type != BT_INTEGER) + { + gfc_error ("Expression at %L must be of INTEGER type, found %s", + &e->where, gfc_basic_typename (e->ts.type)); + return FAILURE; + } + + if (e->expr_type == EXPR_FUNCTION + && !e->value.function.isym + && !e->value.function.esym + && !gfc_pure (e->symtree->n.sym)) + { + gfc_error ("Function '%s' at %L must be PURE", + e->symtree->n.sym->name, &e->where); + /* Prevent repeat error messages. */ + e->symtree->n.sym->attr.pure = 1; + return FAILURE; + } + + if (e->rank != 0) + { + gfc_error ("Expression at %L must be scalar", &e->where); + return FAILURE; + } + + if (gfc_simplify_expr (e, 0) == FAILURE) + return FAILURE; + + return check_restricted (e); +} + + +/************** Expression conformance checks. *************/ + +/* Given two expressions, make sure that the arrays are conformable. */ + +gfc_try +gfc_check_conformance (const char *optype_msgid, gfc_expr *op1, gfc_expr *op2) +{ + int op1_flag, op2_flag, d; + mpz_t op1_size, op2_size; + gfc_try t; + + if (op1->rank == 0 || op2->rank == 0) + return SUCCESS; + + if (op1->rank != op2->rank) + { + gfc_error ("Incompatible ranks in %s (%d and %d) at %L", _(optype_msgid), + op1->rank, op2->rank, &op1->where); + return FAILURE; + } + + t = SUCCESS; + + for (d = 0; d < op1->rank; d++) + { + op1_flag = gfc_array_dimen_size (op1, d, &op1_size) == SUCCESS; + op2_flag = gfc_array_dimen_size (op2, d, &op2_size) == SUCCESS; + + if (op1_flag && op2_flag && mpz_cmp (op1_size, op2_size) != 0) + { + gfc_error ("Different shape for %s at %L on dimension %d " + "(%d and %d)", _(optype_msgid), &op1->where, d + 1, + (int) mpz_get_si (op1_size), + (int) mpz_get_si (op2_size)); + + t = FAILURE; + } + + if (op1_flag) + mpz_clear (op1_size); + if (op2_flag) + mpz_clear (op2_size); + + if (t == FAILURE) + return FAILURE; + } + + return SUCCESS; +} + + +/* Given an assignable expression and an arbitrary expression, make + sure that the assignment can take place. */ + +gfc_try +gfc_check_assign (gfc_expr *lvalue, gfc_expr *rvalue, int conform) +{ + gfc_symbol *sym; + gfc_ref *ref; + int has_pointer; + + sym = lvalue->symtree->n.sym; + + /* Check INTENT(IN), unless the object itself is the component or + sub-component of a pointer. */ + has_pointer = sym->attr.pointer; + + for (ref = lvalue->ref; ref; ref = ref->next) + if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer) + { + has_pointer = 1; + break; + } + + if (!has_pointer && sym->attr.intent == INTENT_IN) + { + gfc_error ("Cannot assign to INTENT(IN) variable '%s' at %L", + sym->name, &lvalue->where); + return FAILURE; + } + + /* 12.5.2.2, Note 12.26: The result variable is very similar to any other + variable local to a function subprogram. Its existence begins when + execution of the function is initiated and ends when execution of the + function is terminated... + Therefore, the left hand side is no longer a variable, when it is: */ + if (sym->attr.flavor == FL_PROCEDURE && sym->attr.proc != PROC_ST_FUNCTION + && !sym->attr.external) + { + bool bad_proc; + bad_proc = false; + + /* (i) Use associated; */ + if (sym->attr.use_assoc) + bad_proc = true; + + /* (ii) The assignment is in the main program; or */ + if (gfc_current_ns->proc_name->attr.is_main_program) + bad_proc = true; + + /* (iii) A module or internal procedure... */ + if ((gfc_current_ns->proc_name->attr.proc == PROC_INTERNAL + || gfc_current_ns->proc_name->attr.proc == PROC_MODULE) + && gfc_current_ns->parent + && (!(gfc_current_ns->parent->proc_name->attr.function + || gfc_current_ns->parent->proc_name->attr.subroutine) + || gfc_current_ns->parent->proc_name->attr.is_main_program)) + { + /* ... that is not a function... */ + if (!gfc_current_ns->proc_name->attr.function) + bad_proc = true; + + /* ... or is not an entry and has a different name. */ + if (!sym->attr.entry && sym->name != gfc_current_ns->proc_name->name) + bad_proc = true; + } + + /* (iv) Host associated and not the function symbol or the + parent result. This picks up sibling references, which + cannot be entries. */ + if (!sym->attr.entry + && sym->ns == gfc_current_ns->parent + && sym != gfc_current_ns->proc_name + && sym != gfc_current_ns->parent->proc_name->result) + bad_proc = true; + + if (bad_proc) + { + gfc_error ("'%s' at %L is not a VALUE", sym->name, &lvalue->where); + return FAILURE; + } + } + + if (rvalue->rank != 0 && lvalue->rank != rvalue->rank) + { + gfc_error ("Incompatible ranks %d and %d in assignment at %L", + lvalue->rank, rvalue->rank, &lvalue->where); + return FAILURE; + } + + if (lvalue->ts.type == BT_UNKNOWN) + { + gfc_error ("Variable type is UNKNOWN in assignment at %L", + &lvalue->where); + return FAILURE; + } + + if (rvalue->expr_type == EXPR_NULL) + { + if (lvalue->symtree->n.sym->attr.pointer + && lvalue->symtree->n.sym->attr.data) + return SUCCESS; + else + { + gfc_error ("NULL appears on right-hand side in assignment at %L", + &rvalue->where); + return FAILURE; + } + } + + if (sym->attr.cray_pointee + && lvalue->ref != NULL + && lvalue->ref->u.ar.type == AR_FULL + && lvalue->ref->u.ar.as->cp_was_assumed) + { + gfc_error ("Vector assignment to assumed-size Cray Pointee at %L " + "is illegal", &lvalue->where); + return FAILURE; + } + + /* This is possibly a typo: x = f() instead of x => f(). */ + if (gfc_option.warn_surprising + && rvalue->expr_type == EXPR_FUNCTION + && rvalue->symtree->n.sym->attr.pointer) + gfc_warning ("POINTER valued function appears on right-hand side of " + "assignment at %L", &rvalue->where); + + /* Check size of array assignments. */ + if (lvalue->rank != 0 && rvalue->rank != 0 + && gfc_check_conformance ("array assignment", lvalue, rvalue) != SUCCESS) + return FAILURE; + + if (rvalue->is_boz && lvalue->ts.type != BT_INTEGER + && lvalue->symtree->n.sym->attr.data + && gfc_notify_std (GFC_STD_GNU, "Extension: BOZ literal at %L used to " + "initialize non-integer variable '%s'", + &rvalue->where, lvalue->symtree->n.sym->name) + == FAILURE) + return FAILURE; + else if (rvalue->is_boz && !lvalue->symtree->n.sym->attr.data + && gfc_notify_std (GFC_STD_GNU, "Extension: BOZ literal at %L outside " + "a DATA statement and outside INT/REAL/DBLE/CMPLX", + &rvalue->where) == FAILURE) + return FAILURE; + + /* Handle the case of a BOZ literal on the RHS. */ + if (rvalue->is_boz && lvalue->ts.type != BT_INTEGER) + { + int rc; + if (gfc_option.warn_surprising) + gfc_warning ("BOZ literal at %L is bitwise transferred " + "non-integer symbol '%s'", &rvalue->where, + lvalue->symtree->n.sym->name); + if (!gfc_convert_boz (rvalue, &lvalue->ts)) + return FAILURE; + if ((rc = gfc_range_check (rvalue)) != ARITH_OK) + { + if (rc == ARITH_UNDERFLOW) + gfc_error ("Arithmetic underflow of bit-wise transferred BOZ at %L" + ". This check can be disabled with the option " + "-fno-range-check", &rvalue->where); + else if (rc == ARITH_OVERFLOW) + gfc_error ("Arithmetic overflow of bit-wise transferred BOZ at %L" + ". This check can be disabled with the option " + "-fno-range-check", &rvalue->where); + else if (rc == ARITH_NAN) + gfc_error ("Arithmetic NaN of bit-wise transferred BOZ at %L" + ". This check can be disabled with the option " + "-fno-range-check", &rvalue->where); + return FAILURE; + } + } + + if (gfc_compare_types (&lvalue->ts, &rvalue->ts)) + return SUCCESS; + + /* Only DATA Statements come here. */ + if (!conform) + { + /* Numeric can be converted to any other numeric. And Hollerith can be + converted to any other type. */ + if ((gfc_numeric_ts (&lvalue->ts) && gfc_numeric_ts (&rvalue->ts)) + || rvalue->ts.type == BT_HOLLERITH) + return SUCCESS; + + if (lvalue->ts.type == BT_LOGICAL && rvalue->ts.type == BT_LOGICAL) + return SUCCESS; + + gfc_error ("Incompatible types in DATA statement at %L; attempted " + "conversion of %s to %s", &lvalue->where, + gfc_typename (&rvalue->ts), gfc_typename (&lvalue->ts)); + + return FAILURE; + } + + /* Assignment is the only case where character variables of different + kind values can be converted into one another. */ + if (lvalue->ts.type == BT_CHARACTER && rvalue->ts.type == BT_CHARACTER) + { + if (lvalue->ts.kind != rvalue->ts.kind) + gfc_convert_chartype (rvalue, &lvalue->ts); + + return SUCCESS; + } + + return gfc_convert_type (rvalue, &lvalue->ts, 1); +} + + +/* Check that a pointer assignment is OK. We first check lvalue, and + we only check rvalue if it's not an assignment to NULL() or a + NULLIFY statement. */ + +gfc_try +gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue) +{ + symbol_attribute attr; + gfc_ref *ref; + int is_pure; + int pointer, check_intent_in; + + if (lvalue->symtree->n.sym->ts.type == BT_UNKNOWN + && !lvalue->symtree->n.sym->attr.proc_pointer) + { + gfc_error ("Pointer assignment target is not a POINTER at %L", + &lvalue->where); + return FAILURE; + } + + if (lvalue->symtree->n.sym->attr.flavor == FL_PROCEDURE + && lvalue->symtree->n.sym->attr.use_assoc + && !lvalue->symtree->n.sym->attr.proc_pointer) + { + gfc_error ("'%s' in the pointer assignment at %L cannot be an " + "l-value since it is a procedure", + lvalue->symtree->n.sym->name, &lvalue->where); + return FAILURE; + } + + + /* Check INTENT(IN), unless the object itself is the component or + sub-component of a pointer. */ + check_intent_in = 1; + pointer = lvalue->symtree->n.sym->attr.pointer + | lvalue->symtree->n.sym->attr.proc_pointer; + + for (ref = lvalue->ref; ref; ref = ref->next) + { + if (pointer) + check_intent_in = 0; + + if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer) + pointer = 1; + + if (ref->type == REF_ARRAY && ref->next == NULL) + { + if (ref->u.ar.type == AR_FULL) + break; + + if (ref->u.ar.type != AR_SECTION) + { + gfc_error ("Expected bounds specification for '%s' at %L", + lvalue->symtree->n.sym->name, &lvalue->where); + return FAILURE; + } + + if (gfc_notify_std (GFC_STD_F2003,"Fortran 2003: Bounds " + "specification for '%s' in pointer assignment " + "at %L", lvalue->symtree->n.sym->name, + &lvalue->where) == FAILURE) + return FAILURE; + + gfc_error ("Pointer bounds remapping at %L is not yet implemented " + "in gfortran", &lvalue->where); + /* TODO: See PR 29785. Add checks that all lbounds are specified and + either never or always the upper-bound; strides shall not be + present. */ + return FAILURE; + } + } + + if (check_intent_in && lvalue->symtree->n.sym->attr.intent == INTENT_IN) + { + gfc_error ("Cannot assign to INTENT(IN) variable '%s' at %L", + lvalue->symtree->n.sym->name, &lvalue->where); + return FAILURE; + } + + if (!pointer) + { + gfc_error ("Pointer assignment to non-POINTER at %L", &lvalue->where); + return FAILURE; + } + + is_pure = gfc_pure (NULL); + + if (is_pure && gfc_impure_variable (lvalue->symtree->n.sym) + && lvalue->symtree->n.sym->value != rvalue) + { + gfc_error ("Bad pointer object in PURE procedure at %L", &lvalue->where); + return FAILURE; + } + + /* If rvalue is a NULL() or NULLIFY, we're done. Otherwise the type, + kind, etc for lvalue and rvalue must match, and rvalue must be a + pure variable if we're in a pure function. */ + if (rvalue->expr_type == EXPR_NULL && rvalue->ts.type == BT_UNKNOWN) + return SUCCESS; + + /* Checks on rvalue for procedure pointer assignments. */ + if (lvalue->symtree->n.sym->attr.proc_pointer) + { + attr = gfc_expr_attr (rvalue); + if (!((rvalue->expr_type == EXPR_NULL) + || (rvalue->expr_type == EXPR_FUNCTION && attr.proc_pointer) + || (rvalue->expr_type == EXPR_VARIABLE + && attr.flavor == FL_PROCEDURE))) + { + gfc_error ("Invalid procedure pointer assignment at %L", + &rvalue->where); + return FAILURE; + } + if (attr.abstract) + { + gfc_error ("Abstract interface '%s' is invalid " + "in procedure pointer assignment at %L", + rvalue->symtree->name, &rvalue->where); + } + /* TODO. See PR 38290. + if (rvalue->expr_type == EXPR_VARIABLE + && lvalue->symtree->n.sym->attr.if_source != IFSRC_UNKNOWN + && !gfc_compare_interfaces (lvalue->symtree->n.sym, + rvalue->symtree->n.sym, 0)) + { + gfc_error ("Interfaces don't match " + "in procedure pointer assignment at %L", &rvalue->where); + return FAILURE; + }*/ + return SUCCESS; + } + + if (!gfc_compare_types (&lvalue->ts, &rvalue->ts)) + { + gfc_error ("Different types in pointer assignment at %L; attempted " + "assignment of %s to %s", &lvalue->where, + gfc_typename (&rvalue->ts), gfc_typename (&lvalue->ts)); + return FAILURE; + } + + if (lvalue->ts.kind != rvalue->ts.kind) + { + gfc_error ("Different kind type parameters in pointer " + "assignment at %L", &lvalue->where); + return FAILURE; + } + + if (lvalue->rank != rvalue->rank) + { + gfc_error ("Different ranks in pointer assignment at %L", + &lvalue->where); + return FAILURE; + } + + /* Now punt if we are dealing with a NULLIFY(X) or X = NULL(X). */ + if (rvalue->expr_type == EXPR_NULL) + return SUCCESS; + + if (lvalue->ts.type == BT_CHARACTER) + { + gfc_try t = gfc_check_same_strlen (lvalue, rvalue, "pointer assignment"); + if (t == FAILURE) + return FAILURE; + } + + if (rvalue->expr_type == EXPR_VARIABLE && is_subref_array (rvalue)) + lvalue->symtree->n.sym->attr.subref_array_pointer = 1; + + attr = gfc_expr_attr (rvalue); + if (!attr.target && !attr.pointer) + { + gfc_error ("Pointer assignment target is neither TARGET " + "nor POINTER at %L", &rvalue->where); + return FAILURE; + } + + if (is_pure && gfc_impure_variable (rvalue->symtree->n.sym)) + { + gfc_error ("Bad target in pointer assignment in PURE " + "procedure at %L", &rvalue->where); + } + + if (gfc_has_vector_index (rvalue)) + { + gfc_error ("Pointer assignment with vector subscript " + "on rhs at %L", &rvalue->where); + return FAILURE; + } + + if (attr.is_protected && attr.use_assoc + && !(attr.pointer || attr.proc_pointer)) + { + gfc_error ("Pointer assignment target has PROTECTED " + "attribute at %L", &rvalue->where); + return FAILURE; + } + + return SUCCESS; +} + + +/* Relative of gfc_check_assign() except that the lvalue is a single + symbol. Used for initialization assignments. */ + +gfc_try +gfc_check_assign_symbol (gfc_symbol *sym, gfc_expr *rvalue) +{ + gfc_expr lvalue; + gfc_try r; + + memset (&lvalue, '\0', sizeof (gfc_expr)); + + lvalue.expr_type = EXPR_VARIABLE; + lvalue.ts = sym->ts; + if (sym->as) + lvalue.rank = sym->as->rank; + lvalue.symtree = (gfc_symtree *) gfc_getmem (sizeof (gfc_symtree)); + lvalue.symtree->n.sym = sym; + lvalue.where = sym->declared_at; + + if (sym->attr.pointer || sym->attr.proc_pointer) + r = gfc_check_pointer_assign (&lvalue, rvalue); + else + r = gfc_check_assign (&lvalue, rvalue, 1); + + gfc_free (lvalue.symtree); + + return r; +} + + +/* Get an expression for a default initializer. */ + +gfc_expr * +gfc_default_initializer (gfc_typespec *ts) +{ + gfc_constructor *tail; + gfc_expr *init; + gfc_component *c; + + /* See if we have a default initializer. */ + for (c = ts->derived->components; c; c = c->next) + if (c->initializer || c->attr.allocatable) + break; + + if (!c) + return NULL; + + /* Build the constructor. */ + init = gfc_get_expr (); + init->expr_type = EXPR_STRUCTURE; + init->ts = *ts; + init->where = ts->derived->declared_at; + + tail = NULL; + for (c = ts->derived->components; c; c = c->next) + { + if (tail == NULL) + init->value.constructor = tail = gfc_get_constructor (); + else + { + tail->next = gfc_get_constructor (); + tail = tail->next; + } + + if (c->initializer) + tail->expr = gfc_copy_expr (c->initializer); + + if (c->attr.allocatable) + { + tail->expr = gfc_get_expr (); + tail->expr->expr_type = EXPR_NULL; + tail->expr->ts = c->ts; + } + } + return init; +} + + +/* Given a symbol, create an expression node with that symbol as a + variable. If the symbol is array valued, setup a reference of the + whole array. */ + +gfc_expr * +gfc_get_variable_expr (gfc_symtree *var) +{ + gfc_expr *e; + + e = gfc_get_expr (); + e->expr_type = EXPR_VARIABLE; + e->symtree = var; + e->ts = var->n.sym->ts; + + if (var->n.sym->as != NULL) + { + e->rank = var->n.sym->as->rank; + e->ref = gfc_get_ref (); + e->ref->type = REF_ARRAY; + e->ref->u.ar.type = AR_FULL; + } + + return e; +} + + +/* General expression traversal function. */ + +bool +gfc_traverse_expr (gfc_expr *expr, gfc_symbol *sym, + bool (*func)(gfc_expr *, gfc_symbol *, int*), + int f) +{ + gfc_array_ref ar; + gfc_ref *ref; + gfc_actual_arglist *args; + gfc_constructor *c; + int i; + + if (!expr) + return false; + + if ((*func) (expr, sym, &f)) + return true; + + if (expr->ts.type == BT_CHARACTER + && expr->ts.cl + && expr->ts.cl->length + && expr->ts.cl->length->expr_type != EXPR_CONSTANT + && gfc_traverse_expr (expr->ts.cl->length, sym, func, f)) + return true; + + switch (expr->expr_type) + { + case EXPR_FUNCTION: + for (args = expr->value.function.actual; args; args = args->next) + { + if (gfc_traverse_expr (args->expr, sym, func, f)) + return true; + } + break; + + case EXPR_VARIABLE: + case EXPR_CONSTANT: + case EXPR_NULL: + case EXPR_SUBSTRING: + break; + + case EXPR_STRUCTURE: + case EXPR_ARRAY: + for (c = expr->value.constructor; c; c = c->next) + { + if (gfc_traverse_expr (c->expr, sym, func, f)) + return true; + if (c->iterator) + { + if (gfc_traverse_expr (c->iterator->var, sym, func, f)) + return true; + if (gfc_traverse_expr (c->iterator->start, sym, func, f)) + return true; + if (gfc_traverse_expr (c->iterator->end, sym, func, f)) + return true; + if (gfc_traverse_expr (c->iterator->step, sym, func, f)) + return true; + } + } + break; + + case EXPR_OP: + if (gfc_traverse_expr (expr->value.op.op1, sym, func, f)) + return true; + if (gfc_traverse_expr (expr->value.op.op2, sym, func, f)) + return true; + break; + + default: + gcc_unreachable (); + break; + } + + ref = expr->ref; + while (ref != NULL) + { + switch (ref->type) + { + case REF_ARRAY: + ar = ref->u.ar; + for (i = 0; i < GFC_MAX_DIMENSIONS; i++) + { + if (gfc_traverse_expr (ar.start[i], sym, func, f)) + return true; + if (gfc_traverse_expr (ar.end[i], sym, func, f)) + return true; + if (gfc_traverse_expr (ar.stride[i], sym, func, f)) + return true; + } + break; + + case REF_SUBSTRING: + if (gfc_traverse_expr (ref->u.ss.start, sym, func, f)) + return true; + if (gfc_traverse_expr (ref->u.ss.end, sym, func, f)) + return true; + break; + + case REF_COMPONENT: + if (ref->u.c.component->ts.type == BT_CHARACTER + && ref->u.c.component->ts.cl + && ref->u.c.component->ts.cl->length + && ref->u.c.component->ts.cl->length->expr_type + != EXPR_CONSTANT + && gfc_traverse_expr (ref->u.c.component->ts.cl->length, + sym, func, f)) + return true; + + if (ref->u.c.component->as) + for (i = 0; i < ref->u.c.component->as->rank; i++) + { + if (gfc_traverse_expr (ref->u.c.component->as->lower[i], + sym, func, f)) + return true; + if (gfc_traverse_expr (ref->u.c.component->as->upper[i], + sym, func, f)) + return true; + } + break; + + default: + gcc_unreachable (); + } + ref = ref->next; + } + return false; +} + +/* Traverse expr, marking all EXPR_VARIABLE symbols referenced. */ + +static bool +expr_set_symbols_referenced (gfc_expr *expr, + gfc_symbol *sym ATTRIBUTE_UNUSED, + int *f ATTRIBUTE_UNUSED) +{ + if (expr->expr_type != EXPR_VARIABLE) + return false; + gfc_set_sym_referenced (expr->symtree->n.sym); + return false; +} + +void +gfc_expr_set_symbols_referenced (gfc_expr *expr) +{ + gfc_traverse_expr (expr, NULL, expr_set_symbols_referenced, 0); +} + + +/* Walk an expression tree and check each variable encountered for being typed. + If strict is not set, a top-level variable is tolerated untyped in -std=gnu + mode as is a basic arithmetic expression using those; this is for things in + legacy-code like: + + INTEGER :: arr(n), n + INTEGER :: arr(n + 1), n + + The namespace is needed for IMPLICIT typing. */ + +static gfc_namespace* check_typed_ns; + +static bool +expr_check_typed_help (gfc_expr* e, gfc_symbol* sym ATTRIBUTE_UNUSED, + int* f ATTRIBUTE_UNUSED) +{ + gfc_try t; + + if (e->expr_type != EXPR_VARIABLE) + return false; + + gcc_assert (e->symtree); + t = gfc_check_symbol_typed (e->symtree->n.sym, check_typed_ns, + true, e->where); + + return (t == FAILURE); +} + +gfc_try +gfc_expr_check_typed (gfc_expr* e, gfc_namespace* ns, bool strict) +{ + bool error_found; + + /* If this is a top-level variable or EXPR_OP, do the check with strict given + to us. */ + if (!strict) + { + if (e->expr_type == EXPR_VARIABLE && !e->ref) + return gfc_check_symbol_typed (e->symtree->n.sym, ns, strict, e->where); + + if (e->expr_type == EXPR_OP) + { + gfc_try t = SUCCESS; + + gcc_assert (e->value.op.op1); + t = gfc_expr_check_typed (e->value.op.op1, ns, strict); + + if (t == SUCCESS && e->value.op.op2) + t = gfc_expr_check_typed (e->value.op.op2, ns, strict); + + return t; + } + } + + /* Otherwise, walk the expression and do it strictly. */ + check_typed_ns = ns; + error_found = gfc_traverse_expr (e, NULL, &expr_check_typed_help, 0); + + return error_found ? FAILURE : SUCCESS; +} + +/* Walk an expression tree and replace all symbols with a corresponding symbol + in the formal_ns of "sym". Needed for copying interfaces in PROCEDURE + statements. The boolean return value is required by gfc_traverse_expr. */ + +static bool +replace_symbol (gfc_expr *expr, gfc_symbol *sym, int *i ATTRIBUTE_UNUSED) +{ + if ((expr->expr_type == EXPR_VARIABLE + || (expr->expr_type == EXPR_FUNCTION + && !gfc_is_intrinsic (expr->symtree->n.sym, 0, expr->where))) + && expr->symtree->n.sym->ns == sym->ts.interface->formal_ns) + { + gfc_symtree *stree; + gfc_namespace *ns = sym->formal_ns; + /* Don't use gfc_get_symtree as we prefer to fail badly if we don't find + the symtree rather than create a new one (and probably fail later). */ + stree = gfc_find_symtree (ns ? ns->sym_root : gfc_current_ns->sym_root, + expr->symtree->n.sym->name); + gcc_assert (stree); + stree->n.sym->attr = expr->symtree->n.sym->attr; + expr->symtree = stree; + } + return false; +} + +void +gfc_expr_replace_symbols (gfc_expr *expr, gfc_symbol *dest) +{ + gfc_traverse_expr (expr, dest, &replace_symbol, 0); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/f95-lang.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/f95-lang.c new file mode 100644 index 0000000000..a7d6c8f66a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/f95-lang.c @@ -0,0 +1,1231 @@ +/* gfortran backend interface + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Paul Brook. + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* f95-lang.c-- GCC backend interface stuff */ + +/* declare required prototypes: */ + +#include "config.h" +#include "system.h" +#include "ansidecl.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "gimple.h" +#include "flags.h" +#include "langhooks.h" +#include "langhooks-def.h" +#include "timevar.h" +#include "tm.h" +#include "function.h" +#include "ggc.h" +#include "toplev.h" +#include "target.h" +#include "debug.h" +#include "diagnostic.h" +#include "tree-dump.h" +#include "cgraph.h" + +#include "gfortran.h" +#include "cpp.h" +#include "trans.h" +#include "trans-types.h" +#include "trans-const.h" + +/* Language-dependent contents of an identifier. */ + +struct lang_identifier +GTY(()) +{ + struct tree_identifier common; +}; + +/* The resulting tree type. */ + +union lang_tree_node +GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"), + chain_next ("(union lang_tree_node *)TREE_CHAIN (&%h.generic)"))) + +{ + union tree_node GTY((tag ("0"), + desc ("tree_node_structure (&%h)"))) generic; + struct lang_identifier GTY((tag ("1"))) identifier; +}; + +/* Save and restore the variables in this file and elsewhere + that keep track of the progress of compilation of the current function. + Used for nested functions. */ + +struct language_function +GTY(()) +{ + /* struct gfc_language_function base; */ + struct binding_level *binding_level; +}; + +/* We don't have a lex/yacc lexer/parser, but toplev expects these to + exist anyway. */ +void yyerror (const char *str); +int yylex (void); + +static void gfc_init_decl_processing (void); +static void gfc_init_builtin_functions (void); + +/* Each front end provides its own. */ +static bool gfc_init (void); +static void gfc_finish (void); +static void gfc_print_identifier (FILE *, tree, int); +static bool gfc_mark_addressable (tree); +void do_function_end (void); +int global_bindings_p (void); +static void clear_binding_stack (void); +static void gfc_be_parse_file (int); +static alias_set_type gfc_get_alias_set (tree); +static void gfc_init_ts (void); + +#undef LANG_HOOKS_NAME +#undef LANG_HOOKS_INIT +#undef LANG_HOOKS_FINISH +#undef LANG_HOOKS_INIT_OPTIONS +#undef LANG_HOOKS_HANDLE_OPTION +#undef LANG_HOOKS_POST_OPTIONS +#undef LANG_HOOKS_PRINT_IDENTIFIER +#undef LANG_HOOKS_PARSE_FILE +#undef LANG_HOOKS_MARK_ADDRESSABLE +#undef LANG_HOOKS_TYPE_FOR_MODE +#undef LANG_HOOKS_TYPE_FOR_SIZE +#undef LANG_HOOKS_GET_ALIAS_SET +#undef LANG_HOOKS_INIT_TS +#undef LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE +#undef LANG_HOOKS_OMP_PREDETERMINED_SHARING +#undef LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR +#undef LANG_HOOKS_OMP_CLAUSE_COPY_CTOR +#undef LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP +#undef LANG_HOOKS_OMP_CLAUSE_DTOR +#undef LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR +#undef LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE +#undef LANG_HOOKS_OMP_PRIVATE_OUTER_REF +#undef LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES +#undef LANG_HOOKS_BUILTIN_FUNCTION +#undef LANG_HOOKS_GET_ARRAY_DESCR_INFO + +/* Define lang hooks. */ +#define LANG_HOOKS_NAME "GNU Fortran" +#define LANG_HOOKS_INIT gfc_init +#define LANG_HOOKS_FINISH gfc_finish +#define LANG_HOOKS_INIT_OPTIONS gfc_init_options +#define LANG_HOOKS_HANDLE_OPTION gfc_handle_option +#define LANG_HOOKS_POST_OPTIONS gfc_post_options +#define LANG_HOOKS_PRINT_IDENTIFIER gfc_print_identifier +#define LANG_HOOKS_PARSE_FILE gfc_be_parse_file +#define LANG_HOOKS_MARK_ADDRESSABLE gfc_mark_addressable +#define LANG_HOOKS_TYPE_FOR_MODE gfc_type_for_mode +#define LANG_HOOKS_TYPE_FOR_SIZE gfc_type_for_size +#define LANG_HOOKS_GET_ALIAS_SET gfc_get_alias_set +#define LANG_HOOKS_INIT_TS gfc_init_ts +#define LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE gfc_omp_privatize_by_reference +#define LANG_HOOKS_OMP_PREDETERMINED_SHARING gfc_omp_predetermined_sharing +#define LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR gfc_omp_clause_default_ctor +#define LANG_HOOKS_OMP_CLAUSE_COPY_CTOR gfc_omp_clause_copy_ctor +#define LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP gfc_omp_clause_assign_op +#define LANG_HOOKS_OMP_CLAUSE_DTOR gfc_omp_clause_dtor +#define LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR gfc_omp_disregard_value_expr +#define LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE gfc_omp_private_debug_clause +#define LANG_HOOKS_OMP_PRIVATE_OUTER_REF gfc_omp_private_outer_ref +#define LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES \ + gfc_omp_firstprivatize_type_sizes +#define LANG_HOOKS_BUILTIN_FUNCTION gfc_builtin_function +#define LANG_HOOKS_GET_ARRAY_DESCR_INFO gfc_get_array_descr_info + +const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; + +#define NULL_BINDING_LEVEL (struct binding_level *) NULL + +/* A chain of binding_level structures awaiting reuse. */ + +static GTY(()) struct binding_level *free_binding_level; + +/* The elements of `ridpointers' are identifier nodes + for the reserved type names and storage classes. + It is indexed by a RID_... value. */ +tree *ridpointers = NULL; + +/* Prepare expr to be an argument of a TRUTH_NOT_EXPR, + or validate its data type for an `if' or `while' statement or ?..: exp. + + This preparation consists of taking the ordinary + representation of an expression expr and producing a valid tree + boolean expression describing whether expr is nonzero. We could + simply always do build_binary_op (NE_EXPR, expr, boolean_false_node, 1), + but we optimize comparisons, &&, ||, and !. + + The resulting type should always be `boolean_type_node'. + This is much simpler than the corresponding C version because we have a + distinct boolean type. */ + +tree +gfc_truthvalue_conversion (tree expr) +{ + switch (TREE_CODE (TREE_TYPE (expr))) + { + case BOOLEAN_TYPE: + if (TREE_TYPE (expr) == boolean_type_node) + return expr; + else if (COMPARISON_CLASS_P (expr)) + { + TREE_TYPE (expr) = boolean_type_node; + return expr; + } + else if (TREE_CODE (expr) == NOP_EXPR) + return fold_build1 (NOP_EXPR, + boolean_type_node, TREE_OPERAND (expr, 0)); + else + return fold_build1 (NOP_EXPR, boolean_type_node, expr); + + case INTEGER_TYPE: + if (TREE_CODE (expr) == INTEGER_CST) + return integer_zerop (expr) ? boolean_false_node : boolean_true_node; + else + return fold_build2 (NE_EXPR, boolean_type_node, expr, + build_int_cst (TREE_TYPE (expr), 0)); + + default: + internal_error ("Unexpected type in truthvalue_conversion"); + } +} + + +static void +gfc_create_decls (void) +{ + /* GCC builtins. */ + gfc_init_builtin_functions (); + + /* Runtime/IO library functions. */ + gfc_build_builtin_function_decls (); + + gfc_init_constants (); +} + + +static void +gfc_be_parse_file (int set_yydebug ATTRIBUTE_UNUSED) +{ + int errors; + int warnings; + + gfc_create_decls (); + gfc_parse_file (); + gfc_generate_constructors (); + + cgraph_finalize_compilation_unit (); + cgraph_optimize (); + + /* Tell the frontend about any errors. */ + gfc_get_errors (&warnings, &errors); + errorcount += errors; + warningcount += warnings; + + clear_binding_stack (); +} + + +/* Initialize everything. */ + +static bool +gfc_init (void) +{ + if (!gfc_cpp_enabled ()) + { + linemap_add (line_table, LC_ENTER, false, gfc_source_file, 1); + linemap_add (line_table, LC_RENAME, false, "", 0); + } + else + gfc_cpp_init_0 (); + + gfc_init_decl_processing (); + gfc_static_ctors = NULL_TREE; + + if (gfc_cpp_enabled ()) + gfc_cpp_init (); + + gfc_init_1 (); + + if (gfc_new_file () != SUCCESS) + fatal_error ("can't open input file: %s", gfc_source_file); + + return true; +} + + +static void +gfc_finish (void) +{ + gfc_cpp_done (); + gfc_done_1 (); + gfc_release_include_path (); + return; +} + +static void +gfc_print_identifier (FILE * file ATTRIBUTE_UNUSED, + tree node ATTRIBUTE_UNUSED, + int indent ATTRIBUTE_UNUSED) +{ + return; +} + + +/* These functions and variables deal with binding contours. We only + need these functions for the list of PARM_DECLs, but we leave the + functions more general; these are a simplified version of the + functions from GNAT. */ + +/* For each binding contour we allocate a binding_level structure which + records the entities defined or declared in that contour. Contours + include: + + the global one + one for each subprogram definition + one for each compound statement (declare block) + + Binding contours are used to create GCC tree BLOCK nodes. */ + +struct binding_level +GTY(()) +{ + /* A chain of ..._DECL nodes for all variables, constants, functions, + parameters and type declarations. These ..._DECL nodes are chained + through the TREE_CHAIN field. Note that these ..._DECL nodes are stored + in the reverse of the order supplied to be compatible with the + back-end. */ + tree names; + /* For each level (except the global one), a chain of BLOCK nodes for all + the levels that were entered and exited one level down from this one. */ + tree blocks; + /* The binding level containing this one (the enclosing binding level). */ + struct binding_level *level_chain; +}; + +/* The binding level currently in effect. */ +static GTY(()) struct binding_level *current_binding_level = NULL; + +/* The outermost binding level. This binding level is created when the + compiler is started and it will exist through the entire compilation. */ +static GTY(()) struct binding_level *global_binding_level; + +/* Binding level structures are initialized by copying this one. */ +static struct binding_level clear_binding_level = { NULL, NULL, NULL }; + + +/* Return nonzero if we are currently in the global binding level. */ + +int +global_bindings_p (void) +{ + return current_binding_level == global_binding_level ? -1 : 0; +} + +tree +getdecls (void) +{ + return current_binding_level->names; +} + +/* Enter a new binding level. The input parameter is ignored, but has to be + specified for back-end compatibility. */ + +void +pushlevel (int ignore ATTRIBUTE_UNUSED) +{ + struct binding_level *newlevel + = (struct binding_level *) ggc_alloc (sizeof (struct binding_level)); + + *newlevel = clear_binding_level; + + /* Add this level to the front of the chain (stack) of levels that are + active. */ + newlevel->level_chain = current_binding_level; + current_binding_level = newlevel; +} + +/* Exit a binding level. + Pop the level off, and restore the state of the identifier-decl mappings + that were in effect when this level was entered. + + If KEEP is nonzero, this level had explicit declarations, so + and create a "block" (a BLOCK node) for the level + to record its declarations and subblocks for symbol table output. + + If FUNCTIONBODY is nonzero, this level is the body of a function, + so create a block as if KEEP were set and also clear out all + label names. + + If REVERSE is nonzero, reverse the order of decls before putting + them into the BLOCK. */ + +tree +poplevel (int keep, int reverse, int functionbody) +{ + /* Points to a BLOCK tree node. This is the BLOCK node constructed for the + binding level that we are about to exit and which is returned by this + routine. */ + tree block_node = NULL_TREE; + tree decl_chain; + tree subblock_chain = current_binding_level->blocks; + tree subblock_node; + + /* Reverse the list of XXXX_DECL nodes if desired. Note that the ..._DECL + nodes chained through the `names' field of current_binding_level are in + reverse order except for PARM_DECL node, which are explicitly stored in + the right order. */ + decl_chain = (reverse) ? nreverse (current_binding_level->names) + : current_binding_level->names; + + /* If there were any declarations in the current binding level, or if this + binding level is a function body, or if there are any nested blocks then + create a BLOCK node to record them for the life of this function. */ + if (keep || functionbody) + block_node = build_block (keep ? decl_chain : 0, subblock_chain, 0, 0); + + /* Record the BLOCK node just built as the subblock its enclosing scope. */ + for (subblock_node = subblock_chain; subblock_node; + subblock_node = TREE_CHAIN (subblock_node)) + BLOCK_SUPERCONTEXT (subblock_node) = block_node; + + /* Clear out the meanings of the local variables of this level. */ + + for (subblock_node = decl_chain; subblock_node; + subblock_node = TREE_CHAIN (subblock_node)) + if (DECL_NAME (subblock_node) != 0) + /* If the identifier was used or addressed via a local extern decl, + don't forget that fact. */ + if (DECL_EXTERNAL (subblock_node)) + { + if (TREE_USED (subblock_node)) + TREE_USED (DECL_NAME (subblock_node)) = 1; + if (TREE_ADDRESSABLE (subblock_node)) + TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (subblock_node)) = 1; + } + + /* Pop the current level. */ + current_binding_level = current_binding_level->level_chain; + + if (functionbody) + /* This is the top level block of a function. */ + DECL_INITIAL (current_function_decl) = block_node; + else if (current_binding_level == global_binding_level) + /* When using gfc_start_block/gfc_finish_block from middle-end hooks, + don't add newly created BLOCKs as subblocks of global_binding_level. */ + ; + else if (block_node) + { + current_binding_level->blocks + = chainon (current_binding_level->blocks, block_node); + } + + /* If we did not make a block for the level just exited, any blocks made for + inner levels (since they cannot be recorded as subblocks in that level) + must be carried forward so they will later become subblocks of something + else. */ + else if (subblock_chain) + current_binding_level->blocks + = chainon (current_binding_level->blocks, subblock_chain); + if (block_node) + TREE_USED (block_node) = 1; + + return block_node; +} + + +/* Records a ..._DECL node DECL as belonging to the current lexical scope. + Returns the ..._DECL node. */ + +tree +pushdecl (tree decl) +{ + /* External objects aren't nested, other objects may be. */ + if ((DECL_EXTERNAL (decl)) || (decl == current_function_decl)) + DECL_CONTEXT (decl) = 0; + else + DECL_CONTEXT (decl) = current_function_decl; + + /* Put the declaration on the list. The list of declarations is in reverse + order. The list will be reversed later if necessary. This needs to be + this way for compatibility with the back-end. */ + + TREE_CHAIN (decl) = current_binding_level->names; + current_binding_level->names = decl; + + /* For the declaration of a type, set its name if it is not already set. */ + + if (TREE_CODE (decl) == TYPE_DECL && TYPE_NAME (TREE_TYPE (decl)) == 0) + { + if (DECL_SOURCE_LINE (decl) == 0) + TYPE_NAME (TREE_TYPE (decl)) = decl; + else + TYPE_NAME (TREE_TYPE (decl)) = DECL_NAME (decl); + } + + return decl; +} + + +/* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL. */ + +tree +pushdecl_top_level (tree x) +{ + tree t; + struct binding_level *b = current_binding_level; + + current_binding_level = global_binding_level; + t = pushdecl (x); + current_binding_level = b; + return t; +} + + +/* Clear the binding stack. */ +static void +clear_binding_stack (void) +{ + while (!global_bindings_p ()) + poplevel (0, 0, 0); +} + + +#ifndef CHAR_TYPE_SIZE +#define CHAR_TYPE_SIZE BITS_PER_UNIT +#endif + +#ifndef INT_TYPE_SIZE +#define INT_TYPE_SIZE BITS_PER_WORD +#endif + +#undef SIZE_TYPE +#define SIZE_TYPE "long unsigned int" + +/* Create tree nodes for the basic scalar types of Fortran 95, + and some nodes representing standard constants (0, 1, (void *) 0). + Initialize the global binding level. + Make definitions for built-in primitive functions. */ +static void +gfc_init_decl_processing (void) +{ + current_function_decl = NULL; + current_binding_level = NULL_BINDING_LEVEL; + free_binding_level = NULL_BINDING_LEVEL; + + /* Make the binding_level structure for global names. We move all + variables that are in a COMMON block to this binding level. */ + pushlevel (0); + global_binding_level = current_binding_level; + + /* Build common tree nodes. char_type_node is unsigned because we + only use it for actual characters, not for INTEGER(1). Also, we + want double_type_node to actually have double precision. */ + build_common_tree_nodes (false, false); + /* x86_64 mingw32 has a sizetype of "unsigned long long", most other hosts + have a sizetype of "unsigned long". Therefore choose the correct size + in mostly target independent way. */ + if (TYPE_MODE (long_unsigned_type_node) == ptr_mode) + set_sizetype (long_unsigned_type_node); + else if (TYPE_MODE (long_long_unsigned_type_node) == ptr_mode) + set_sizetype (long_long_unsigned_type_node); + else + set_sizetype (long_unsigned_type_node); + build_common_tree_nodes_2 (0); + void_list_node = build_tree_list (NULL_TREE, void_type_node); + + /* Set up F95 type nodes. */ + gfc_init_kinds (); + gfc_init_types (); +} + + +/* Mark EXP saying that we need to be able to take the + address of it; it should not be allocated in a register. + In Fortran 95 this is only the case for variables with + the TARGET attribute, but we implement it here for a + likely future Cray pointer extension. + Value is 1 if successful. */ +/* TODO: Check/fix mark_addressable. */ + +bool +gfc_mark_addressable (tree exp) +{ + register tree x = exp; + while (1) + switch (TREE_CODE (x)) + { + case COMPONENT_REF: + case ADDR_EXPR: + case ARRAY_REF: + case REALPART_EXPR: + case IMAGPART_EXPR: + x = TREE_OPERAND (x, 0); + break; + + case CONSTRUCTOR: + TREE_ADDRESSABLE (x) = 1; + return true; + + case VAR_DECL: + case CONST_DECL: + case PARM_DECL: + case RESULT_DECL: + if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x) && DECL_NONLOCAL (x)) + { + if (TREE_PUBLIC (x)) + { + error ("global register variable %qs used in nested function", + IDENTIFIER_POINTER (DECL_NAME (x))); + return false; + } + pedwarn (input_location, 0, "register variable %qs used in nested function", + IDENTIFIER_POINTER (DECL_NAME (x))); + } + else if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)) + { + if (TREE_PUBLIC (x)) + { + error ("address of global register variable %qs requested", + IDENTIFIER_POINTER (DECL_NAME (x))); + return true; + } + +#if 0 + /* If we are making this addressable due to its having + volatile components, give a different error message. Also + handle the case of an unnamed parameter by not trying + to give the name. */ + + else if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (x))) + { + error ("cannot put object with volatile field into register"); + return false; + } +#endif + + pedwarn (input_location, 0, "address of register variable %qs requested", + IDENTIFIER_POINTER (DECL_NAME (x))); + } + + /* drops in */ + case FUNCTION_DECL: + TREE_ADDRESSABLE (x) = 1; + + default: + return true; + } +} + + +/* Return the typed-based alias set for T, which may be an expression + or a type. Return -1 if we don't do anything special. */ + +static alias_set_type +gfc_get_alias_set (tree t) +{ + tree u; + + /* Permit type-punning when accessing an EQUIVALENCEd variable or + mixed type entry master's return value. */ + for (u = t; handled_component_p (u); u = TREE_OPERAND (u, 0)) + if (TREE_CODE (u) == COMPONENT_REF + && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE) + return 0; + + return -1; +} + + +/* press the big red button - garbage (ggc) collection is on */ + +int ggc_p = 1; + +/* Builtin function initialization. */ + +tree +gfc_builtin_function (tree decl) +{ + make_decl_rtl (decl); + pushdecl (decl); + return decl; +} + + +static void +gfc_define_builtin (const char *name, + tree type, + int code, + const char *library_name, + bool const_p) +{ + tree decl; + + decl = add_builtin_function (name, type, code, BUILT_IN_NORMAL, + library_name, NULL_TREE); + if (const_p) + TREE_READONLY (decl) = 1; + + built_in_decls[code] = decl; + implicit_built_in_decls[code] = decl; +} + + +#define DO_DEFINE_MATH_BUILTIN(code, name, argtype, tbase) \ + gfc_define_builtin ("__builtin_" name "l", tbase##longdouble[argtype], \ + BUILT_IN_ ## code ## L, name "l", true); \ + gfc_define_builtin ("__builtin_" name, tbase##double[argtype], \ + BUILT_IN_ ## code, name, true); \ + gfc_define_builtin ("__builtin_" name "f", tbase##float[argtype], \ + BUILT_IN_ ## code ## F, name "f", true); + +#define DEFINE_MATH_BUILTIN(code, name, argtype) \ + DO_DEFINE_MATH_BUILTIN (code, name, argtype, mfunc_) + +#define DEFINE_MATH_BUILTIN_C(code, name, argtype) \ + DO_DEFINE_MATH_BUILTIN (code, name, argtype, mfunc_) \ + DO_DEFINE_MATH_BUILTIN (C##code, "c" name, argtype, mfunc_c) + + +/* Create function types for builtin functions. */ + +static void +build_builtin_fntypes (tree *fntype, tree type) +{ + tree tmp; + + /* type (*) (type) */ + tmp = tree_cons (NULL_TREE, type, void_list_node); + fntype[0] = build_function_type (type, tmp); + /* type (*) (type, type) */ + tmp = tree_cons (NULL_TREE, type, tmp); + fntype[1] = build_function_type (type, tmp); + /* type (*) (int, type) */ + tmp = tree_cons (NULL_TREE, integer_type_node, void_list_node); + tmp = tree_cons (NULL_TREE, type, tmp); + fntype[2] = build_function_type (type, tmp); + /* type (*) (void) */ + fntype[3] = build_function_type (type, void_list_node); + /* type (*) (type, &int) */ + tmp = tree_cons (NULL_TREE, type, void_list_node); + tmp = tree_cons (NULL_TREE, build_pointer_type (integer_type_node), tmp); + fntype[4] = build_function_type (type, tmp); + /* type (*) (type, int) */ + tmp = tree_cons (NULL_TREE, type, void_list_node); + tmp = tree_cons (NULL_TREE, integer_type_node, tmp); + fntype[5] = build_function_type (type, tmp); +} + + +static tree +builtin_type_for_size (int size, bool unsignedp) +{ + tree type = lang_hooks.types.type_for_size (size, unsignedp); + return type ? type : error_mark_node; +} + +/* Initialization of builtin function nodes. */ + +static void +gfc_init_builtin_functions (void) +{ + enum builtin_type + { +#define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME, +#define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME, +#define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME, +#define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME, +#define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME, +#define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME, +#define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME, +#define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME, +#define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME, +#define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME, +#define DEF_POINTER_TYPE(NAME, TYPE) NAME, +#include "types.def" +#undef DEF_PRIMITIVE_TYPE +#undef DEF_FUNCTION_TYPE_0 +#undef DEF_FUNCTION_TYPE_1 +#undef DEF_FUNCTION_TYPE_2 +#undef DEF_FUNCTION_TYPE_3 +#undef DEF_FUNCTION_TYPE_4 +#undef DEF_FUNCTION_TYPE_5 +#undef DEF_FUNCTION_TYPE_6 +#undef DEF_FUNCTION_TYPE_7 +#undef DEF_FUNCTION_TYPE_VAR_0 +#undef DEF_POINTER_TYPE + BT_LAST + }; + typedef enum builtin_type builtin_type; + enum + { + /* So far we need just these 2 attribute types. */ + ATTR_NOTHROW_LIST, + ATTR_CONST_NOTHROW_LIST + }; + + tree mfunc_float[6]; + tree mfunc_double[6]; + tree mfunc_longdouble[6]; + tree mfunc_cfloat[6]; + tree mfunc_cdouble[6]; + tree mfunc_clongdouble[6]; + tree func_cfloat_float, func_float_cfloat; + tree func_cdouble_double, func_double_cdouble; + tree func_clongdouble_longdouble, func_longdouble_clongdouble; + tree func_float_floatp_floatp; + tree func_double_doublep_doublep; + tree func_longdouble_longdoublep_longdoublep; + tree ftype, ptype; + tree tmp, type; + tree builtin_types[(int) BT_LAST + 1]; + + build_builtin_fntypes (mfunc_float, float_type_node); + build_builtin_fntypes (mfunc_double, double_type_node); + build_builtin_fntypes (mfunc_longdouble, long_double_type_node); + build_builtin_fntypes (mfunc_cfloat, complex_float_type_node); + build_builtin_fntypes (mfunc_cdouble, complex_double_type_node); + build_builtin_fntypes (mfunc_clongdouble, complex_long_double_type_node); + + tmp = tree_cons (NULL_TREE, complex_float_type_node, void_list_node); + func_cfloat_float = build_function_type (float_type_node, tmp); + + tmp = tree_cons (NULL_TREE, float_type_node, void_list_node); + func_float_cfloat = build_function_type (complex_float_type_node, tmp); + + tmp = tree_cons (NULL_TREE, complex_double_type_node, void_list_node); + func_cdouble_double = build_function_type (double_type_node, tmp); + + tmp = tree_cons (NULL_TREE, double_type_node, void_list_node); + func_double_cdouble = build_function_type (complex_double_type_node, tmp); + + tmp = tree_cons (NULL_TREE, complex_long_double_type_node, void_list_node); + func_clongdouble_longdouble = + build_function_type (long_double_type_node, tmp); + + tmp = tree_cons (NULL_TREE, long_double_type_node, void_list_node); + func_longdouble_clongdouble = + build_function_type (complex_long_double_type_node, tmp); + + ptype = build_pointer_type (float_type_node); + tmp = tree_cons (NULL_TREE, float_type_node, + tree_cons (NULL_TREE, ptype, + tree_cons (NULL_TREE, ptype, void_list_node))); + func_float_floatp_floatp = + build_function_type (void_type_node, tmp); + + ptype = build_pointer_type (double_type_node); + tmp = tree_cons (NULL_TREE, double_type_node, + tree_cons (NULL_TREE, ptype, + tree_cons (NULL_TREE, ptype, void_list_node))); + func_double_doublep_doublep = + build_function_type (void_type_node, tmp); + + ptype = build_pointer_type (long_double_type_node); + tmp = tree_cons (NULL_TREE, long_double_type_node, + tree_cons (NULL_TREE, ptype, + tree_cons (NULL_TREE, ptype, void_list_node))); + func_longdouble_longdoublep_longdoublep = + build_function_type (void_type_node, tmp); + +#include "mathbuiltins.def" + + /* We define these separately as the fortran versions have different + semantics (they return an integer type) */ + gfc_define_builtin ("__builtin_roundl", mfunc_longdouble[0], + BUILT_IN_ROUNDL, "roundl", true); + gfc_define_builtin ("__builtin_round", mfunc_double[0], + BUILT_IN_ROUND, "round", true); + gfc_define_builtin ("__builtin_roundf", mfunc_float[0], + BUILT_IN_ROUNDF, "roundf", true); + + gfc_define_builtin ("__builtin_truncl", mfunc_longdouble[0], + BUILT_IN_TRUNCL, "truncl", true); + gfc_define_builtin ("__builtin_trunc", mfunc_double[0], + BUILT_IN_TRUNC, "trunc", true); + gfc_define_builtin ("__builtin_truncf", mfunc_float[0], + BUILT_IN_TRUNCF, "truncf", true); + + gfc_define_builtin ("__builtin_cabsl", func_clongdouble_longdouble, + BUILT_IN_CABSL, "cabsl", true); + gfc_define_builtin ("__builtin_cabs", func_cdouble_double, + BUILT_IN_CABS, "cabs", true); + gfc_define_builtin ("__builtin_cabsf", func_cfloat_float, + BUILT_IN_CABSF, "cabsf", true); + + gfc_define_builtin ("__builtin_copysignl", mfunc_longdouble[1], + BUILT_IN_COPYSIGNL, "copysignl", true); + gfc_define_builtin ("__builtin_copysign", mfunc_double[1], + BUILT_IN_COPYSIGN, "copysign", true); + gfc_define_builtin ("__builtin_copysignf", mfunc_float[1], + BUILT_IN_COPYSIGNF, "copysignf", true); + + gfc_define_builtin ("__builtin_nextafterl", mfunc_longdouble[1], + BUILT_IN_NEXTAFTERL, "nextafterl", true); + gfc_define_builtin ("__builtin_nextafter", mfunc_double[1], + BUILT_IN_NEXTAFTER, "nextafter", true); + gfc_define_builtin ("__builtin_nextafterf", mfunc_float[1], + BUILT_IN_NEXTAFTERF, "nextafterf", true); + + gfc_define_builtin ("__builtin_frexpl", mfunc_longdouble[4], + BUILT_IN_FREXPL, "frexpl", false); + gfc_define_builtin ("__builtin_frexp", mfunc_double[4], + BUILT_IN_FREXP, "frexp", false); + gfc_define_builtin ("__builtin_frexpf", mfunc_float[4], + BUILT_IN_FREXPF, "frexpf", false); + + gfc_define_builtin ("__builtin_fabsl", mfunc_longdouble[0], + BUILT_IN_FABSL, "fabsl", true); + gfc_define_builtin ("__builtin_fabs", mfunc_double[0], + BUILT_IN_FABS, "fabs", true); + gfc_define_builtin ("__builtin_fabsf", mfunc_float[0], + BUILT_IN_FABSF, "fabsf", true); + + gfc_define_builtin ("__builtin_scalbnl", mfunc_longdouble[5], + BUILT_IN_SCALBNL, "scalbnl", true); + gfc_define_builtin ("__builtin_scalbn", mfunc_double[5], + BUILT_IN_SCALBN, "scalbn", true); + gfc_define_builtin ("__builtin_scalbnf", mfunc_float[5], + BUILT_IN_SCALBNF, "scalbnf", true); + + gfc_define_builtin ("__builtin_fmodl", mfunc_longdouble[1], + BUILT_IN_FMODL, "fmodl", true); + gfc_define_builtin ("__builtin_fmod", mfunc_double[1], + BUILT_IN_FMOD, "fmod", true); + gfc_define_builtin ("__builtin_fmodf", mfunc_float[1], + BUILT_IN_FMODF, "fmodf", true); + + gfc_define_builtin ("__builtin_infl", mfunc_longdouble[3], + BUILT_IN_INFL, "__builtin_infl", true); + gfc_define_builtin ("__builtin_inf", mfunc_double[3], + BUILT_IN_INF, "__builtin_inf", true); + gfc_define_builtin ("__builtin_inff", mfunc_float[3], + BUILT_IN_INFF, "__builtin_inff", true); + + /* lround{f,,l} and llround{f,,l} */ + type = tree_cons (NULL_TREE, float_type_node, void_list_node); + tmp = build_function_type (long_integer_type_node, type); + gfc_define_builtin ("__builtin_lroundf", tmp, BUILT_IN_LROUNDF, + "lroundf", true); + tmp = build_function_type (long_long_integer_type_node, type); + gfc_define_builtin ("__builtin_llroundf", tmp, BUILT_IN_LLROUNDF, + "llroundf", true); + + type = tree_cons (NULL_TREE, double_type_node, void_list_node); + tmp = build_function_type (long_integer_type_node, type); + gfc_define_builtin ("__builtin_lround", tmp, BUILT_IN_LROUND, + "lround", true); + tmp = build_function_type (long_long_integer_type_node, type); + gfc_define_builtin ("__builtin_llround", tmp, BUILT_IN_LLROUND, + "llround", true); + + type = tree_cons (NULL_TREE, long_double_type_node, void_list_node); + tmp = build_function_type (long_integer_type_node, type); + gfc_define_builtin ("__builtin_lroundl", tmp, BUILT_IN_LROUNDL, + "lroundl", true); + tmp = build_function_type (long_long_integer_type_node, type); + gfc_define_builtin ("__builtin_llroundl", tmp, BUILT_IN_LLROUNDL, + "llroundl", true); + + /* These are used to implement the ** operator. */ + gfc_define_builtin ("__builtin_powl", mfunc_longdouble[1], + BUILT_IN_POWL, "powl", true); + gfc_define_builtin ("__builtin_pow", mfunc_double[1], + BUILT_IN_POW, "pow", true); + gfc_define_builtin ("__builtin_powf", mfunc_float[1], + BUILT_IN_POWF, "powf", true); + gfc_define_builtin ("__builtin_cpowl", mfunc_clongdouble[1], + BUILT_IN_CPOWL, "cpowl", true); + gfc_define_builtin ("__builtin_cpow", mfunc_cdouble[1], + BUILT_IN_CPOW, "cpow", true); + gfc_define_builtin ("__builtin_cpowf", mfunc_cfloat[1], + BUILT_IN_CPOWF, "cpowf", true); + gfc_define_builtin ("__builtin_powil", mfunc_longdouble[2], + BUILT_IN_POWIL, "powil", true); + gfc_define_builtin ("__builtin_powi", mfunc_double[2], + BUILT_IN_POWI, "powi", true); + gfc_define_builtin ("__builtin_powif", mfunc_float[2], + BUILT_IN_POWIF, "powif", true); + + + if (TARGET_C99_FUNCTIONS) + { + gfc_define_builtin ("__builtin_cbrtl", mfunc_longdouble[0], + BUILT_IN_CBRTL, "cbrtl", true); + gfc_define_builtin ("__builtin_cbrt", mfunc_double[0], + BUILT_IN_CBRT, "cbrt", true); + gfc_define_builtin ("__builtin_cbrtf", mfunc_float[0], + BUILT_IN_CBRTF, "cbrtf", true); + gfc_define_builtin ("__builtin_cexpil", func_longdouble_clongdouble, + BUILT_IN_CEXPIL, "cexpil", true); + gfc_define_builtin ("__builtin_cexpi", func_double_cdouble, + BUILT_IN_CEXPI, "cexpi", true); + gfc_define_builtin ("__builtin_cexpif", func_float_cfloat, + BUILT_IN_CEXPIF, "cexpif", true); + } + + if (TARGET_HAS_SINCOS) + { + gfc_define_builtin ("__builtin_sincosl", + func_longdouble_longdoublep_longdoublep, + BUILT_IN_SINCOSL, "sincosl", false); + gfc_define_builtin ("__builtin_sincos", func_double_doublep_doublep, + BUILT_IN_SINCOS, "sincos", false); + gfc_define_builtin ("__builtin_sincosf", func_float_floatp_floatp, + BUILT_IN_SINCOSF, "sincosf", false); + } + + /* For LEADZ / TRAILZ. */ + tmp = tree_cons (NULL_TREE, unsigned_type_node, void_list_node); + ftype = build_function_type (integer_type_node, tmp); + gfc_define_builtin ("__builtin_clz", ftype, BUILT_IN_CLZ, + "__builtin_clz", true); + + tmp = tree_cons (NULL_TREE, long_unsigned_type_node, void_list_node); + ftype = build_function_type (integer_type_node, tmp); + gfc_define_builtin ("__builtin_clzl", ftype, BUILT_IN_CLZL, + "__builtin_clzl", true); + + tmp = tree_cons (NULL_TREE, long_long_unsigned_type_node, void_list_node); + ftype = build_function_type (integer_type_node, tmp); + gfc_define_builtin ("__builtin_clzll", ftype, BUILT_IN_CLZLL, + "__builtin_clzll", true); + + tmp = tree_cons (NULL_TREE, unsigned_type_node, void_list_node); + ftype = build_function_type (integer_type_node, tmp); + gfc_define_builtin ("__builtin_ctz", ftype, BUILT_IN_CTZ, + "__builtin_ctz", true); + + tmp = tree_cons (NULL_TREE, long_unsigned_type_node, void_list_node); + ftype = build_function_type (integer_type_node, tmp); + gfc_define_builtin ("__builtin_ctzl", ftype, BUILT_IN_CTZL, + "__builtin_ctzl", true); + + tmp = tree_cons (NULL_TREE, long_long_unsigned_type_node, void_list_node); + ftype = build_function_type (integer_type_node, tmp); + gfc_define_builtin ("__builtin_ctzll", ftype, BUILT_IN_CTZLL, + "__builtin_ctzll", true); + + /* Other builtin functions we use. */ + + tmp = tree_cons (NULL_TREE, long_integer_type_node, void_list_node); + tmp = tree_cons (NULL_TREE, long_integer_type_node, tmp); + ftype = build_function_type (long_integer_type_node, tmp); + gfc_define_builtin ("__builtin_expect", ftype, BUILT_IN_EXPECT, + "__builtin_expect", true); + + tmp = tree_cons (NULL_TREE, pvoid_type_node, void_list_node); + ftype = build_function_type (void_type_node, tmp); + gfc_define_builtin ("__builtin_free", ftype, BUILT_IN_FREE, + "free", false); + + tmp = tree_cons (NULL_TREE, size_type_node, void_list_node); + ftype = build_function_type (pvoid_type_node, tmp); + gfc_define_builtin ("__builtin_malloc", ftype, BUILT_IN_MALLOC, + "malloc", false); + DECL_IS_MALLOC (built_in_decls[BUILT_IN_MALLOC]) = 1; + + tmp = tree_cons (NULL_TREE, pvoid_type_node, void_list_node); + tmp = tree_cons (NULL_TREE, size_type_node, tmp); + ftype = build_function_type (pvoid_type_node, tmp); + gfc_define_builtin ("__builtin_realloc", ftype, BUILT_IN_REALLOC, + "realloc", false); + + tmp = tree_cons (NULL_TREE, void_type_node, void_list_node); + ftype = build_function_type (integer_type_node, tmp); + gfc_define_builtin ("__builtin_isnan", ftype, BUILT_IN_ISNAN, + "__builtin_isnan", true); + +#define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \ + builtin_types[(int) ENUM] = VALUE; +#define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \ + builtin_types[(int) ENUM] \ + = build_function_type (builtin_types[(int) RETURN], \ + void_list_node); +#define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \ + builtin_types[(int) ENUM] \ + = build_function_type (builtin_types[(int) RETURN], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG1], \ + void_list_node)); +#define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \ + builtin_types[(int) ENUM] \ + = build_function_type \ + (builtin_types[(int) RETURN], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG1], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG2], \ + void_list_node))); +#define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \ + builtin_types[(int) ENUM] \ + = build_function_type \ + (builtin_types[(int) RETURN], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG1], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG2], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG3], \ + void_list_node)))); +#define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \ + builtin_types[(int) ENUM] \ + = build_function_type \ + (builtin_types[(int) RETURN], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG1], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG2], \ + tree_cons \ + (NULL_TREE, \ + builtin_types[(int) ARG3], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG4], \ + void_list_node))))); +#define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \ + builtin_types[(int) ENUM] \ + = build_function_type \ + (builtin_types[(int) RETURN], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG1], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG2], \ + tree_cons \ + (NULL_TREE, \ + builtin_types[(int) ARG3], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG4], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG5],\ + void_list_node)))))); +#define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ + ARG6) \ + builtin_types[(int) ENUM] \ + = build_function_type \ + (builtin_types[(int) RETURN], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG1], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG2], \ + tree_cons \ + (NULL_TREE, \ + builtin_types[(int) ARG3], \ + tree_cons \ + (NULL_TREE, \ + builtin_types[(int) ARG4], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG5], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG6],\ + void_list_node))))))); +#define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ + ARG6, ARG7) \ + builtin_types[(int) ENUM] \ + = build_function_type \ + (builtin_types[(int) RETURN], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG1], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG2], \ + tree_cons \ + (NULL_TREE, \ + builtin_types[(int) ARG3], \ + tree_cons \ + (NULL_TREE, \ + builtin_types[(int) ARG4], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG5], \ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG6],\ + tree_cons (NULL_TREE, \ + builtin_types[(int) ARG6], \ + void_list_node)))))))); +#define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \ + builtin_types[(int) ENUM] \ + = build_function_type (builtin_types[(int) RETURN], NULL_TREE); +#define DEF_POINTER_TYPE(ENUM, TYPE) \ + builtin_types[(int) ENUM] \ + = build_pointer_type (builtin_types[(int) TYPE]); +#include "types.def" +#undef DEF_PRIMITIVE_TYPE +#undef DEF_FUNCTION_TYPE_1 +#undef DEF_FUNCTION_TYPE_2 +#undef DEF_FUNCTION_TYPE_3 +#undef DEF_FUNCTION_TYPE_4 +#undef DEF_FUNCTION_TYPE_5 +#undef DEF_FUNCTION_TYPE_6 +#undef DEF_FUNCTION_TYPE_VAR_0 +#undef DEF_POINTER_TYPE + builtin_types[(int) BT_LAST] = NULL_TREE; + + /* Initialize synchronization builtins. */ +#undef DEF_SYNC_BUILTIN +#define DEF_SYNC_BUILTIN(code, name, type, attr) \ + gfc_define_builtin (name, builtin_types[type], code, name, \ + attr == ATTR_CONST_NOTHROW_LIST); +#include "../sync-builtins.def" +#undef DEF_SYNC_BUILTIN + + if (gfc_option.flag_openmp || flag_tree_parallelize_loops) + { +#undef DEF_GOMP_BUILTIN +#define DEF_GOMP_BUILTIN(code, name, type, attr) \ + gfc_define_builtin ("__builtin_" name, builtin_types[type], \ + code, name, attr == ATTR_CONST_NOTHROW_LIST); +#include "../omp-builtins.def" +#undef DEF_GOMP_BUILTIN + } + + gfc_define_builtin ("__builtin_trap", builtin_types[BT_FN_VOID], + BUILT_IN_TRAP, NULL, false); + TREE_THIS_VOLATILE (built_in_decls[BUILT_IN_TRAP]) = 1; + + gfc_define_builtin ("__emutls_get_address", + builtin_types[BT_FN_PTR_PTR], BUILT_IN_EMUTLS_GET_ADDRESS, + "__emutls_get_address", true); + gfc_define_builtin ("__emutls_register_common", + builtin_types[BT_FN_VOID_PTR_WORD_WORD_PTR], + BUILT_IN_EMUTLS_REGISTER_COMMON, + "__emutls_register_common", false); + + build_common_builtin_nodes (); + targetm.init_builtins (); +} + +#undef DEFINE_MATH_BUILTIN_C +#undef DEFINE_MATH_BUILTIN + +static void +gfc_init_ts (void) +{ + tree_contains_struct[NAMESPACE_DECL][TS_DECL_NON_COMMON] = 1; + tree_contains_struct[NAMESPACE_DECL][TS_DECL_WITH_VIS] = 1; + tree_contains_struct[NAMESPACE_DECL][TS_DECL_WRTL] = 1; + tree_contains_struct[NAMESPACE_DECL][TS_DECL_COMMON] = 1; + tree_contains_struct[NAMESPACE_DECL][TS_DECL_MINIMAL] = 1; +} + +#include "gt-fortran-f95-lang.h" +#include "gtype-fortran.h" diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfc-internals.texi b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfc-internals.texi new file mode 100644 index 0000000000..9cb5a54e4b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfc-internals.texi @@ -0,0 +1,749 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename gfc-internals.info +@set copyrights-gfortran 2007-2008 + +@include gcc-common.texi + +@synindex tp cp + +@settitle GNU Fortran Compiler Internals + +@c %**end of header + +@c Use with @@smallbook. + +@c %** start of document + +@c Cause even numbered pages to be printed on the left hand side of +@c the page and odd numbered pages to be printed on the right hand +@c side of the page. Using this, you can print on both sides of a +@c sheet of paper and have the text on the same part of the sheet. + +@c The text on right hand pages is pushed towards the right hand +@c margin and the text on left hand pages is pushed toward the left +@c hand margin. +@c (To provide the reverse effect, set bindingoffset to -0.75in.) + +@c @tex +@c \global\bindingoffset=0.75in +@c \global\normaloffset =0.75in +@c @end tex + +@copying +Copyright @copyright{} @value{copyrights-gfortran} Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with the +Invariant Sections being ``Funding Free Software'', the Front-Cover +Texts being (a) (see below), and with the Back-Cover Texts being (b) +(see below). A copy of the license is included in the section entitled +``GNU Free Documentation License''. + +(a) The FSF's Front-Cover Text is: + + A GNU Manual + +(b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU + software. Copies published by the Free Software Foundation raise + funds for GNU development. +@end copying + +@ifinfo +@dircategory Software development +@direntry +* gfortran: (gfortran). The GNU Fortran Compiler. +@end direntry +This file documents the internals of the GNU Fortran +compiler, (@command{gfortran}). + +Published by the Free Software Foundation +51 Franklin Street, Fifth Floor +Boston, MA 02110-1301 USA + +@insertcopying +@end ifinfo + + +@setchapternewpage odd +@titlepage +@title GNU Fortran Internals +@versionsubtitle +@author The @t{gfortran} team +@page +@vskip 0pt plus 1filll +Published by the Free Software Foundation@* +51 Franklin Street, Fifth Floor@* +Boston, MA 02110-1301, USA@* +@c Last printed ??ber, 19??.@* +@c Printed copies are available for $? each.@* +@c ISBN ??? +@sp 1 +@insertcopying +@end titlepage + +@summarycontents +@contents + +@page + +@c --------------------------------------------------------------------- +@c TexInfo table of contents. +@c --------------------------------------------------------------------- + +@ifnottex +@node Top +@top Introduction +@cindex Introduction + +This manual documents the internals of @command{gfortran}, +the GNU Fortran compiler. + +@ifset DEVELOPMENT +@emph{Warning:} This document, and the compiler it describes, are still +under development. While efforts are made to keep it up-to-date, it might +not accurately reflect the status of the most recent GNU Fortran compiler. +@end ifset + +@comment +@comment When you add a new menu item, please keep the right hand +@comment aligned to the same column. Do not use tabs. This provides +@comment better formatting. +@comment +@menu +* Introduction:: About this manual. +* User Interface:: Code that Interacts with the User. +* Frontend Data Structures:: + Data structures used by the frontend +* Object Orientation:: Internals of Fortran 2003 OOP features. +* LibGFortran:: The LibGFortran Runtime Library. +* GNU Free Documentation License:: + How you can copy and share this manual. +* Index:: Index of this documentation. +@end menu +@end ifnottex + +@c --------------------------------------------------------------------- +@c Introduction +@c --------------------------------------------------------------------- + +@node Introduction +@chapter Introduction + +@c The following duplicates the text on the TexInfo table of contents. +@iftex +This manual documents the internals of @command{gfortran}, the GNU Fortran +compiler. + +@ifset DEVELOPMENT +@emph{Warning:} This document, and the compiler it describes, are still +under development. While efforts are made to keep it up-to-date, it +might not accurately reflect the status of the most recent GNU Fortran +compiler. +@end ifset +@end iftex + +At present, this manual is very much a work in progress, containing +miscellaneous notes about the internals of the compiler. It is hoped +that at some point in the future it will become a reasonably complete +guide; in the interim, GNU Fortran developers are strongly encouraged to +contribute to it as a way of keeping notes while working on the +compiler. + + +@c --------------------------------------------------------------------- +@c Code that Interacts with the User +@c --------------------------------------------------------------------- + +@node User Interface +@chapter Code that Interacts with the User + +@menu +* Command-Line Options:: Command-Line Options. +* Error Handling:: Error Handling. +@end menu + + +@c --------------------------------------------------------------------- +@c Command-Line Options +@c --------------------------------------------------------------------- + +@node Command-Line Options +@section Command-Line Options + +Command-line options for @command{gfortran} involve four interrelated +pieces within the Fortran compiler code. + +The relevant command-line flag is defined in @file{lang.opt}, according +to the documentation in @ref{Options,, Options, gccint, GNU Compiler +Collection Internals}. This is then processed by the overall GCC +machinery to create the code that enables @command{gfortran} and +@command{gcc} to recognize the option in the command-line arguments and +call the relevant handler function. + +This generated code calls the @code{gfc_handle_option} code in +@file{options.c} with an enumerator variable indicating which option is +to be processed, and the relevant integer or string values associated +with that option flag. Typically, @code{gfc_handle_option} uses these +arguments to set global flags which record the option states. + +The global flags that record the option states are stored in the +@code{gfc_option_t} struct, which is defined in @file{gfortran.h}. +Before the options are processed, initial values for these flags are set +in @code{gfc_init_option} in @file{options.c}; these become the default +values for the options. + + + +@c --------------------------------------------------------------------- +@c Error Handling +@c --------------------------------------------------------------------- + +@node Error Handling +@section Error Handling + +The GNU Fortran compiler's parser operates by testing each piece of +source code against a variety of matchers. In some cases, if these +matchers do not match the source code, they will store an error message +in a buffer. If the parser later finds a matcher that does correctly +match the source code, then the buffered error is discarded. However, +if the parser cannot find a match, then the buffered error message is +reported to the user. This enables the compiler to provide more +meaningful error messages even in the many cases where (erroneous) +Fortran syntax is ambiguous due to things like the absence of reserved +keywords. + +As an example of how this works, consider the following line: +@smallexample +IF = 3 +@end smallexample +Hypothetically, this may get passed to the matcher for an @code{IF} +statement. Since this could plausibly be an erroneous @code{IF} +statement, the matcher will buffer an error message reporting the +absence of an expected @samp{(} following an @code{IF}. Since no +matchers reported an error-free match, however, the parser will also try +matching this against a variable assignment. When @code{IF} is a valid +variable, this will be parsed as an assignment statement, and the error +discarded. However, when @code{IF} is not a valid variable, this +buffered error message will be reported to the user. + +The error handling code is implemented in @file{error.c}. Errors are +normally entered into the buffer with the @code{gfc_error} function. +Warnings go through a similar buffering process, and are entered into +the buffer with @code{gfc_warning}. There is also a special-purpose +function, @code{gfc_notify_std}, for things which have an error/warning +status that depends on the currently-selected language standard. + +The @code{gfc_error_check} function checks the buffer for errors, +reports the error message to the user if one exists, clears the buffer, +and returns a flag to the user indicating whether or not an error +existed. To check the state of the buffer without changing its state or +reporting the errors, the @code{gfc_error_flag_test} function can be +used. The @code{gfc_clear_error} function will clear out any errors in +the buffer, without reporting them. The @code{gfc_warning_check} and +@code{gfc_clear_warning} functions provide equivalent functionality for +the warning buffer. + +Only one error and one warning can be in the buffers at a time, and +buffering another will overwrite the existing one. In cases where one +may wish to work on a smaller piece of source code without disturbing an +existing error state, the @code{gfc_push_error}, @code{gfc_pop_error}, +and @code{gfc_free_error} mechanism exists to implement a stack for the +error buffer. + +For cases where an error or warning should be reported immediately +rather than buffered, the @code{gfc_error_now} and +@code{gfc_warning_now} functions can be used. Normally, the compiler +will continue attempting to parse the program after an error has +occurred, but if this is not appropriate, the @code{gfc_fatal_error} +function should be used instead. For errors that are always the result +of a bug somewhere in the compiler, the @code{gfc_internal_error} +function should be used. + +The syntax for the strings used to produce the error/warning message in +the various error and warning functions is similar to the @code{printf} +syntax, with @samp{%}-escapes to insert variable values. The details, +and the allowable codes, are documented in the @code{error_print} +function in @file{error.c}. + +@c --------------------------------------------------------------------- +@c Frontend Data Structures +@c --------------------------------------------------------------------- + +@node Frontend Data Structures +@chapter Frontend Data Structures +@cindex data structures + +This chapter should describe the details necessary to understand how +the various @code{gfc_*} data are used and interact. In general it is +advisable to read the code in @file{dump-parse-tree.c} as its routines +should exhaust all possible valid combinations of content for these +structures. + +@menu +* gfc_code:: Representation of Executable Statements. +* gfc_expr:: Representation of Values and Expressions. +@end menu + + +@c gfc_code +@c -------- + +@node gfc_code +@section @code{gfc_code} +@cindex statement chaining +@tindex @code{gfc_code} +@tindex @code{struct gfc_code} + +The executable statements in a program unit are represented by a +nested chain of @code{gfc_code} structures. The type of statement is +identified by the @code{op} member of the structure, the different +possible values are enumerated in @code{gfc_exec_op}. A special +member of this @code{enum} is @code{EXEC_NOP} which is used to +represent the various @code{END} statements if they carry a label. +Depending on the type of statement some of the other fields will be +filled in. Fields that are generally applicable are the @code{next} +and @code{here} fields. The former points to the next statement in +the current block or is @code{NULL} if the current statement is the +last in a block, @code{here} points to the statement label of the +current statement. + +If the current statement is one of @code{IF}, @code{DO}, @code{SELECT} +it starts a block, i.e.@: a nested level in the program. In order to +represent this, the @code{block} member is set to point to a +@code{gfc_code} structure whose @code{next} member starts the chain of +statements inside the block; this structure's @code{op} member should be set to +the same value as the parent structure's @code{op} member. The @code{SELECT} +and @code{IF} statements may contain various blocks (the chain of @code{ELSE IF} +and @code{ELSE} blocks or the various @code{CASE}s, respectively). These chains +are linked-lists formed by the @code{block} members. + +Consider the following example code: + +@example +IF (foo < 20) THEN + PRINT *, "Too small" + foo = 20 +ELSEIF (foo > 50) THEN + PRINT *, "Too large" + foo = 50 +ELSE + PRINT *, "Good" +END IF +@end example + +This statement-block will be represented in the internal gfortran tree as +follows, were the horizontal link-chains are those induced by the @code{next} +members and vertical links down are those of @code{block}. @samp{==|} and +@samp{--|} mean @code{NULL} pointers to mark the end of a chain: + +@example +... ==> IF ==> ... + | + +--> IF foo < 20 ==> PRINT *, "Too small" ==> foo = 20 ==| + | + +--> IF foo > 50 ==> PRINT *, "Too large" ==> foo = 50 ==| + | + +--> ELSE ==> PRINT *, "Good" ==| + | + +--| +@end example + + +@subsection IF Blocks + +Conditionals are represented by @code{gfc_code} structures with their +@code{op} member set to @code{EXEC_IF}. This structure's @code{block} +member must point to another @code{gfc_code} node that is the header of the +if-block. This header's @code{op} member must be set to @code{EXEC_IF}, too, +its @code{expr} member holds the condition to check for, and its @code{next} +should point to the code-chain of the statements to execute if the condition is +true. + +If in addition an @code{ELSEIF} or @code{ELSE} block is present, the +@code{block} member of the if-block-header node points to yet another +@code{gfc_code} structure that is the header of the elseif- or else-block. Its +structure is identical to that of the if-block-header, except that in case of an +@code{ELSE} block without a new condition the @code{expr} member should be +@code{NULL}. This block can itself have its @code{block} member point to the +next @code{ELSEIF} or @code{ELSE} block if there's a chain of them. + + +@subsection Loops + +@code{DO} loops are stored in the tree as @code{gfc_code} nodes with their +@code{op} set to @code{EXEC_DO} for a @code{DO} loop with iterator variable and +to @code{EXEC_DO_WHILE} for infinite @code{DO}s and @code{DO WHILE} blocks. +Their @code{block} member should point to a @code{gfc_code} structure heading +the code-chain of the loop body; its @code{op} member should be set to +@code{EXEC_DO} or @code{EXEC_DO_WHILE}, too, respectively. + +For @code{DO WHILE} loops, the loop condition is stored on the top +@code{gfc_code} structure's @code{expr} member; @code{DO} forever loops are +simply @code{DO WHILE} loops with a constant @code{.TRUE.} loop condition in +the internal representation. + +Similarly, @code{DO} loops with an iterator have instead of the condition their +@code{ext.iterator} member set to the correct values for the loop iterator +variable and its range. + + +@subsection @code{SELECT} Statements + +A @code{SELECT} block is introduced by a @code{gfc_code} structure with an +@code{op} member of @code{EXEC_SELECT} and @code{expr} containing the expression +to evaluate and test. Its @code{block} member starts a list of @code{gfc_code} +structures linked together by their @code{block} members that stores the various +@code{CASE} parts. + +Each @code{CASE} node has its @code{op} member set to @code{EXEC_SELECT}, too, +its @code{next} member points to the code-chain to be executed in the current +case-block, and @code{extx.case_list} contains the case-values this block +corresponds to. The @code{block} member links to the next case in the list. + + +@c gfc_expr +@c -------- + +@node gfc_expr +@section @code{gfc_expr} +@tindex @code{gfc_expr} +@tindex @code{struct gfc_expr} + +Expressions and ``values'', including constants, variable-, array- and +component-references as well as complex expressions consisting of operators and +function calls are internally represented as one or a whole tree of +@code{gfc_expr} objects. The member @code{expr_type} specifies the overall +type of an expression (for instance, @code{EXPR_CONSTANT} for constants or +@code{EXPR_VARIABLE} for variable references). The members @code{ts} and +@code{rank} as well as @code{shape}, which can be @code{NULL}, specify +the type, rank and, if applicable, shape of the whole expression or expression +tree of which the current structure is the root. @code{where} is the locus of +this expression in the source code. + +Depending on the flavour of the expression being described by the object +(that is, the value of its @code{expr_type} member), the corresponding structure +in the @code{value} union will usually contain additional data describing the +expression's value in a type-specific manner. The @code{ref} member is used to +build chains of (array-, component- and substring-) references if the expression +in question contains such references, see below for details. + + +@subsection Constants + +Scalar constants are represented by @code{gfc_expr} nodes with their +@code{expr_type} set to @code{EXPR_CONSTANT}. The constant's value shall +already be known at compile-time and is stored in the @code{logical}, +@code{integer}, @code{real}, @code{complex} or @code{character} struct inside +@code{value}, depending on the constant's type specification. + + +@subsection Operators + +Operator-expressions are expressions that are the result of the execution of +some operator on one or two operands. The expressions have an @code{expr_type} +of @code{EXPR_OP}. Their @code{value.op} structure contains additional data. + +@code{op1} and optionally @code{op2} if the operator is binary point to the +two operands, and @code{operator} or @code{uop} describe the operator that +should be evaluated on these operands, where @code{uop} describes a user-defined +operator. + + +@subsection Function Calls + +If the expression is the return value of a function-call, its @code{expr_type} +is set to @code{EXPR_FUNCTION}, and @code{symtree} must point to the symtree +identifying the function to be called. @code{value.function.actual} holds the +actual arguments given to the function as a linked list of +@code{gfc_actual_arglist} nodes. + +The other members of @code{value.function} describe the function being called +in more detail, containing a link to the intrinsic symbol or user-defined +function symbol if the call is to an intrinsic or external function, +respectively. These values are determined during resolution-phase from the +structure's @code{symtree} member. + +A special case of function calls are ``component calls'' to type-bound +procedures; those have the @code{expr_type} @code{EXPR_COMPCALL} with +@code{value.compcall} containing the argument list and the procedure called, +while @code{symtree} and @code{ref} describe the object on which the procedure +was called in the same way as a @code{EXPR_VARIABLE} expression would. +@xref{Type-bound Procedures}. + + +@subsection Array- and Structure-Constructors + +Array- and structure-constructors (one could probably call them ``array-'' and +``derived-type constants'') are @code{gfc_expr} structures with their +@code{expr_type} member set to @code{EXPR_ARRAY} or @code{EXPR_STRUCTURE}, +respectively. For structure constructors, @code{symtree} points to the +derived-type symbol for the type being constructed. + +The values for initializing each array element or structure component are +stored as linked-list of @code{gfc_constructor} nodes in the +@code{value.constructor} member. + + +@subsection Null + +@code{NULL} is a special value for pointers; it can be of different base types. +Such a @code{NULL} value is represented in the internal tree by a +@code{gfc_expr} node with @code{expr_type} @code{EXPR_NULL}. If the base type +of the @code{NULL} expression is known, it is stored in @code{ts} (that's for +instance the case for default-initializers of @code{ALLOCATABLE} components), +but this member can also be set to @code{BT_UNKNOWN} if the information is not +available (for instance, when the expression is a pointer-initializer +@code{NULL()}). + + +@subsection Variables and Reference Expressions + +Variable references are @code{gfc_expr} structures with their @code{expr_type} +set to @code{EXPR_VARIABLE}; their @code{symtree} should point to the variable +that is referenced. + +For this type of expression, it's also possible to chain array-, component- +or substring-references to the original expression to get something like +@samp{struct%component(2:5)}, where @code{component} is either an array or +a @code{CHARACTER} member of @code{struct} that is of some derived-type. Such a +chain of references is achieved by a linked list headed by @code{ref} of the +@code{gfc_expr} node. For the example above it would be (@samp{==|} is the +last @code{NULL} pointer): + +@smallexample +EXPR_VARIABLE(struct) ==> REF_COMPONENT(component) ==> REF_ARRAY(2:5) ==| +@end smallexample + +If @code{component} is a string rather than an array, the last element would be +a @code{REF_SUBSTRING} reference, of course. If the variable itself or some +component referenced is an array and the expression should reference the whole +array rather than being followed by an array-element or -section reference, a +@code{REF_ARRAY} reference must be built as the last element in the chain with +an array-reference type of @code{AR_FULL}. Consider this example code: + +@smallexample +TYPE :: mytype + INTEGER :: array(42) +END TYPE mytype + +TYPE(mytype) :: variable +INTEGER :: local_array(5) + +CALL do_something (variable%array, local_array) +@end smallexample + +The @code{gfc_expr} nodes representing the arguments to the @samp{do_something} +call will have a reference-chain like this: + +@smallexample +EXPR_VARIABLE(variable) ==> REF_COMPONENT(array) ==> REF_ARRAY(FULL) ==| +EXPR_VARIABLE(local_array) ==> REF_ARRAY(FULL) ==| +@end smallexample + + +@subsection Constant Substring References + +@code{EXPR_SUBSTRING} is a special type of expression that encodes a substring +reference of a constant string, as in the following code snippet: + +@smallexample +x = "abcde"(1:2) +@end smallexample + +In this case, @code{value.character} contains the full string's data as if it +was a string constant, but the @code{ref} member is also set and points to a +substring reference as described in the subsection above. + + +@c --------------------------------------------------------------------- +@c F2003 OOP +@c --------------------------------------------------------------------- + +@node Object Orientation +@chapter Internals of Fortran 2003 OOP Features + +@menu +* Type-bound Procedures:: Type-bound procedures. +@end menu + + +@c Type-bound procedures +@c --------------------- + +@node Type-bound Procedures +@section Type-bound Procedures + +Type-bound procedures are stored in the @code{sym_root} of the namespace +@code{f2k_derived} associated with the derived-type symbol as @code{gfc_symtree} +nodes. The name and symbol of these symtrees corresponds to the binding-name +of the procedure, i.e. the name that is used to call it from the context of an +object of the derived-type. + +In addition, those and only those symtrees representing a type-bound procedure +have their @code{typebound} member set; @code{typebound} points to a struct of +type @code{gfc_typebound_proc} containing the additional data needed: The +binding attributes (like @code{PASS} and @code{NOPASS}, @code{NON_OVERRIDABLE} +or the access-specifier), the binding's target(s) and, if the current binding +overrides or extends an inherited binding of the same name, @code{overridden} +points to this binding's @code{gfc_typebound_proc} structure. + + +@subsection Specific Bindings +@c -------------------------- + +For specific bindings (declared with @code{PROCEDURE}), if they have a +passed-object argument, the passed-object dummy argument is first saved by its +name, and later during resolution phase the corresponding argument is looked for +and its position remembered as @code{pass_arg_num} in @code{gfc_typebound_proc}. +The binding's target procedure is pointed-to by @code{u.specific}. + +At the moment, all type-bound procedure calls are statically dispatched and +transformed into ordinary procedure calls at resolution time; their actual +argument list is updated to include at the right position the passed-object +argument, if applicable, and then a simple procedure call to the binding's +target procedure is built. To handle dynamic dispatch in the future, this will +be extended to allow special code generation during the trans-phase to dispatch +based on the object's dynamic type. + + +@subsection Generic Bindings +@c ------------------------- + +Bindings declared as @code{GENERIC} store the specific bindings they target as +a linked list using nodes of type @code{gfc_tbp_generic} in @code{u.generic}. +For each specific target, the parser records its symtree and during resolution +this symtree is bound to the corresponding @code{gfc_typebound_proc} structure +of the specific target. + +Calls to generic bindings are handled entirely in the resolution-phase, where +for the actual argument list present the matching specific binding is found +and the call's target procedure (@code{value.compcall.tbp}) is re-pointed to +the found specific binding and this call is subsequently handled by the logic +for specific binding calls. + + +@subsection Calls to Type-bound Procedures +@c --------------------------------------- + +Calls to type-bound procedures are stored in the parse-tree as @code{gfc_expr} +nodes of type @code{EXPR_COMPCALL}. Their @code{value.compcall.actual} saves +the actual argument list of the call and @code{value.compcall.tbp} points to the +@code{gfc_typebound_proc} structure of the binding to be called. The object +in whose context the procedure was called is saved by combination of +@code{symtree} and @code{ref}, as if the expression was of type +@code{EXPR_VARIABLE}. + +For code like this: +@smallexample +CALL myobj%procedure (arg1, arg2) +@end smallexample +@noindent +the @code{CALL} is represented in the parse-tree as a @code{gfc_code} node of +type @code{EXEC_COMPCALL}. The @code{expr} member of this node holds an +expression of type @code{EXPR_COMPCALL} of the same structure as mentioned above +except that its target procedure is of course a @code{SUBROUTINE} and not a +@code{FUNCTION}. + + +@c --------------------------------------------------------------------- +@c LibGFortran +@c --------------------------------------------------------------------- + +@node LibGFortran +@chapter The LibGFortran Runtime Library + +@menu +* Symbol Versioning:: Symbol Versioning. +@end menu + + +@c --------------------------------------------------------------------- +@c Symbol Versioning +@c --------------------------------------------------------------------- + +@node Symbol Versioning +@section Symbol Versioning +@comment Based on http://gcc.gnu.org/wiki/SymbolVersioning, +@comment as of 2006-11-05, written by Janne Blomqvist. + +In general, this capability exists only on a few platforms, thus there +is a need for configure magic so that it is used only on those targets +where it is supported. + +The central concept in symbol versioning is the so-called map file, +which specifies the version node(s) exported symbols are labeled with. +Also, the map file is used to hide local symbols. + +Some relevant references: +@itemize @bullet +@item +@uref{http://www.gnu.org/software/binutils/manual/ld-2.9.1/html_node/ld_25.html, +GNU @command{ld} manual} + +@item +@uref{http://people.redhat.com/drepper/symbol-versioning, ELF Symbol +Versioning - Ulrich Depper} + +@item +@uref{http://people.redhat.com/drepper/dsohowto.pdf, How to Write Shared +Libraries - Ulrich Drepper (see Chapter 3)} + +@end itemize + +If one adds a new symbol to a library that should be exported, the new +symbol should be mentioned in the map file and a new version node +defined, e.g., if one adds a new symbols @code{foo} and @code{bar} to +libgfortran for the next GCC release, the following should be added to +the map file: +@smallexample +GFORTRAN_1.1 @{ + global: + foo; + bar; +@} GFORTRAN_1.0; +@end smallexample +@noindent +where @code{GFORTRAN_1.0} is the version node of the current release, +and @code{GFORTRAN_1.1} is the version node of the next release where +foo and bar are made available. + +If one wants to change an existing interface, it is possible by using +some asm trickery (from the @command{ld} manual referenced above): + +@smallexample +__asm__(".symver original_foo,foo@@"); +__asm__(".symver old_foo,foo@@VERS_1.1"); +__asm__(".symver old_foo1,foo@@VERS_1.2"); +__asm__(".symver new_foo,foo@@VERS_2.0"); +@end smallexample + +In this example, @code{foo@@} represents the symbol @code{foo} bound to +the unspecified base version of the symbol. The source file that +contains this example would define 4 C functions: @code{original_foo}, +@code{old_foo}, @code{old_foo1}, and @code{new_foo}. + +In this case the map file must contain @code{foo} in @code{VERS_1.1} +and @code{VERS_1.2} as well as in @code{VERS_2.0}. + + +@c --------------------------------------------------------------------- +@c GNU Free Documentation License +@c --------------------------------------------------------------------- + +@include fdl.texi + + +@c --------------------------------------------------------------------- +@c Index +@c --------------------------------------------------------------------- + +@node Index +@unnumbered Index + +@printindex cp + +@bye diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortran.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortran.h new file mode 100644 index 0000000000..8795bee3c9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortran.h @@ -0,0 +1,2594 @@ +/* gfortran header file + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#ifndef GCC_GFORTRAN_H +#define GCC_GFORTRAN_H + +/* It's probably insane to have this large of a header file, but it + seemed like everything had to be recompiled anyway when a change + was made to a header file, and there were ordering issues with + multiple header files. Besides, Microsoft's winnt.h was 250k last + time I looked, so by comparison this is perfectly reasonable. */ + +/* Declarations common to the front-end and library are put in + libgfortran/libgfortran_frontend.h */ +#include "libgfortran.h" + + +#include "system.h" +#include "intl.h" +#include "coretypes.h" +#include "input.h" +#include "splay-tree.h" +/* The following ifdefs are recommended by the autoconf documentation + for any code using alloca. */ + +/* AIX requires this to be the first thing in the file. */ +#ifdef __GNUC__ +#else /* not __GNUC__ */ +#ifdef HAVE_ALLOCA_H +#include +#else /* do not HAVE_ALLOCA_H */ +#ifdef _AIX +#pragma alloca +#else +#ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +#endif /* not predefined */ +#endif /* not _AIX */ +#endif /* do not HAVE_ALLOCA_H */ +#endif /* not __GNUC__ */ + +/* Major control parameters. */ + +#define GFC_MAX_SYMBOL_LEN 63 /* Must be at least 63 for F2003. */ +#define GFC_MAX_BINDING_LABEL_LEN 126 /* (2 * GFC_MAX_SYMBOL_LEN) */ +#define GFC_MAX_LINE 132 /* Characters beyond this are not seen. */ +#define GFC_LETTERS 26 /* Number of letters in the alphabet. */ + +#define MAX_SUBRECORD_LENGTH 2147483639 /* 2**31-9 */ + + +#define free(x) Use_gfc_free_instead_of_free() +#define gfc_is_whitespace(c) ((c==' ') || (c=='\t')) + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +/* Stringization. */ +#define stringize(x) expand_macro(x) +#define expand_macro(x) # x + +/* For the runtime library, a standard prefix is a requirement to + avoid cluttering the namespace with things nobody asked for. It's + ugly to look at and a pain to type when you add the prefix by hand, + so we hide it behind a macro. */ +#define PREFIX(x) "_gfortran_" x +#define PREFIX_LEN 10 + +#define BLANK_COMMON_NAME "__BLNK__" + +/* Macro to initialize an mstring structure. */ +#define minit(s, t) { s, NULL, t } + +/* Structure for storing strings to be matched by gfc_match_string. */ +typedef struct +{ + const char *string; + const char *mp; + int tag; +} +mstring; + + + +/*************************** Enums *****************************/ + +/* Used when matching and resolving data I/O transfer statements. */ + +typedef enum +{ M_READ, M_WRITE, M_PRINT, M_INQUIRE } +io_kind; + +/* The author remains confused to this day about the convention of + returning '0' for 'SUCCESS'... or was it the other way around? The + following enum makes things much more readable. We also start + values off at one instead of zero. */ + +typedef enum +{ SUCCESS = 1, FAILURE } +gfc_try; + +/* This is returned by gfc_notification_std to know if, given the flags + that were given (-std=, -pedantic) we should issue an error, a warning + or nothing. */ + +typedef enum +{ SILENT, WARNING, ERROR } +notification; + +/* Matchers return one of these three values. The difference between + MATCH_NO and MATCH_ERROR is that MATCH_ERROR means that a match was + successful, but that something non-syntactic is wrong and an error + has already been issued. */ + +typedef enum +{ MATCH_NO = 1, MATCH_YES, MATCH_ERROR } +match; + +typedef enum +{ FORM_FREE, FORM_FIXED, FORM_UNKNOWN } +gfc_source_form; + +/* Basic types. BT_VOID is used by ISO C Binding so funcs like c_f_pointer + can take any arg with the pointer attribute as a param. */ +typedef enum +{ BT_UNKNOWN = 1, BT_INTEGER, BT_REAL, BT_COMPLEX, + BT_LOGICAL, BT_CHARACTER, BT_DERIVED, BT_PROCEDURE, BT_HOLLERITH, + BT_VOID +} +bt; + +/* Expression node types. */ +typedef enum +{ EXPR_OP = 1, EXPR_FUNCTION, EXPR_CONSTANT, EXPR_VARIABLE, + EXPR_SUBSTRING, EXPR_STRUCTURE, EXPR_ARRAY, EXPR_NULL, EXPR_COMPCALL +} +expr_t; + +/* Array types. */ +typedef enum +{ AS_EXPLICIT = 1, AS_ASSUMED_SHAPE, AS_DEFERRED, + AS_ASSUMED_SIZE, AS_UNKNOWN +} +array_type; + +typedef enum +{ AR_FULL = 1, AR_ELEMENT, AR_SECTION, AR_UNKNOWN } +ar_type; + +/* Statement label types. */ +typedef enum +{ ST_LABEL_UNKNOWN = 1, ST_LABEL_TARGET, + ST_LABEL_BAD_TARGET, ST_LABEL_FORMAT +} +gfc_sl_type; + +/* Intrinsic operators. */ +typedef enum +{ GFC_INTRINSIC_BEGIN = 0, + INTRINSIC_NONE = -1, INTRINSIC_UPLUS = GFC_INTRINSIC_BEGIN, + INTRINSIC_UMINUS, INTRINSIC_PLUS, INTRINSIC_MINUS, INTRINSIC_TIMES, + INTRINSIC_DIVIDE, INTRINSIC_POWER, INTRINSIC_CONCAT, + INTRINSIC_AND, INTRINSIC_OR, INTRINSIC_EQV, INTRINSIC_NEQV, + /* ==, /=, >, >=, <, <= */ + INTRINSIC_EQ, INTRINSIC_NE, INTRINSIC_GT, INTRINSIC_GE, + INTRINSIC_LT, INTRINSIC_LE, + /* .EQ., .NE., .GT., .GE., .LT., .LE. (OS = Old-Style) */ + INTRINSIC_EQ_OS, INTRINSIC_NE_OS, INTRINSIC_GT_OS, INTRINSIC_GE_OS, + INTRINSIC_LT_OS, INTRINSIC_LE_OS, + INTRINSIC_NOT, INTRINSIC_USER, INTRINSIC_ASSIGN, + INTRINSIC_PARENTHESES, GFC_INTRINSIC_END /* Sentinel */ +} +gfc_intrinsic_op; + + +/* This macro is the number of intrinsic operators that exist. + Assumptions are made about the numbering of the interface_op enums. */ +#define GFC_INTRINSIC_OPS GFC_INTRINSIC_END + +/* Arithmetic results. */ +typedef enum +{ ARITH_OK = 1, ARITH_OVERFLOW, ARITH_UNDERFLOW, ARITH_NAN, + ARITH_DIV0, ARITH_INCOMMENSURATE, ARITH_ASYMMETRIC +} +arith; + +/* Statements. */ +typedef enum +{ + ST_ARITHMETIC_IF, ST_ALLOCATE, ST_ATTR_DECL, ST_BACKSPACE, ST_BLOCK_DATA, + ST_CALL, ST_CASE, ST_CLOSE, ST_COMMON, ST_CONTINUE, ST_CONTAINS, ST_CYCLE, + ST_DATA, ST_DATA_DECL, ST_DEALLOCATE, ST_DO, ST_ELSE, ST_ELSEIF, + ST_ELSEWHERE, ST_END_BLOCK_DATA, ST_ENDDO, ST_IMPLIED_ENDDO, + ST_END_FILE, ST_FINAL, ST_FLUSH, ST_END_FORALL, ST_END_FUNCTION, ST_ENDIF, + ST_END_INTERFACE, ST_END_MODULE, ST_END_PROGRAM, ST_END_SELECT, + ST_END_SUBROUTINE, ST_END_WHERE, ST_END_TYPE, ST_ENTRY, ST_EQUIVALENCE, + ST_EXIT, ST_FORALL, ST_FORALL_BLOCK, ST_FORMAT, ST_FUNCTION, ST_GOTO, + ST_IF_BLOCK, ST_IMPLICIT, ST_IMPLICIT_NONE, ST_IMPORT, ST_INQUIRE, ST_INTERFACE, + ST_PARAMETER, ST_MODULE, ST_MODULE_PROC, ST_NAMELIST, ST_NULLIFY, ST_OPEN, + ST_PAUSE, ST_PRIVATE, ST_PROGRAM, ST_PUBLIC, ST_READ, ST_RETURN, ST_REWIND, + ST_STOP, ST_SUBROUTINE, ST_TYPE, ST_USE, ST_WHERE_BLOCK, ST_WHERE, ST_WAIT, + ST_WRITE, ST_ASSIGNMENT, ST_POINTER_ASSIGNMENT, ST_SELECT_CASE, ST_SEQUENCE, + ST_SIMPLE_IF, ST_STATEMENT_FUNCTION, ST_DERIVED_DECL, ST_LABEL_ASSIGNMENT, + ST_ENUM, ST_ENUMERATOR, ST_END_ENUM, + ST_OMP_ATOMIC, ST_OMP_BARRIER, ST_OMP_CRITICAL, ST_OMP_END_CRITICAL, + ST_OMP_END_DO, ST_OMP_END_MASTER, ST_OMP_END_ORDERED, ST_OMP_END_PARALLEL, + ST_OMP_END_PARALLEL_DO, ST_OMP_END_PARALLEL_SECTIONS, + ST_OMP_END_PARALLEL_WORKSHARE, ST_OMP_END_SECTIONS, ST_OMP_END_SINGLE, + ST_OMP_END_WORKSHARE, ST_OMP_DO, ST_OMP_FLUSH, ST_OMP_MASTER, ST_OMP_ORDERED, + ST_OMP_PARALLEL, ST_OMP_PARALLEL_DO, ST_OMP_PARALLEL_SECTIONS, + ST_OMP_PARALLEL_WORKSHARE, ST_OMP_SECTIONS, ST_OMP_SECTION, ST_OMP_SINGLE, + ST_OMP_THREADPRIVATE, ST_OMP_WORKSHARE, ST_OMP_TASK, ST_OMP_END_TASK, + ST_OMP_TASKWAIT, ST_PROCEDURE, ST_GENERIC, + ST_GET_FCN_CHARACTERISTICS, ST_NONE +} +gfc_statement; + + +/* Types of interfaces that we can have. Assignment interfaces are + considered to be intrinsic operators. */ +typedef enum +{ + INTERFACE_NAMELESS = 1, INTERFACE_GENERIC, + INTERFACE_INTRINSIC_OP, INTERFACE_USER_OP, INTERFACE_ABSTRACT +} +interface_type; + +/* Symbol flavors: these are all mutually exclusive. + 10 elements = 4 bits. */ +typedef enum sym_flavor +{ + FL_UNKNOWN = 0, FL_PROGRAM, FL_BLOCK_DATA, FL_MODULE, FL_VARIABLE, + FL_PARAMETER, FL_LABEL, FL_PROCEDURE, FL_DERIVED, FL_NAMELIST, + FL_VOID +} +sym_flavor; + +/* Procedure types. 7 elements = 3 bits. */ +typedef enum procedure_type +{ PROC_UNKNOWN, PROC_MODULE, PROC_INTERNAL, PROC_DUMMY, + PROC_INTRINSIC, PROC_ST_FUNCTION, PROC_EXTERNAL +} +procedure_type; + +/* Intent types. */ +typedef enum sym_intent +{ INTENT_UNKNOWN = 0, INTENT_IN, INTENT_OUT, INTENT_INOUT +} +sym_intent; + +/* Access types. */ +typedef enum gfc_access +{ ACCESS_UNKNOWN = 0, ACCESS_PUBLIC, ACCESS_PRIVATE +} +gfc_access; + +/* Flags to keep track of where an interface came from. + 4 elements = 2 bits. */ +typedef enum ifsrc +{ IFSRC_UNKNOWN = 0, IFSRC_DECL, IFSRC_IFBODY, IFSRC_USAGE +} +ifsrc; + +/* Whether a SAVE attribute was set explicitly or implicitly. */ +typedef enum save_state +{ SAVE_NONE = 0, SAVE_EXPLICIT, SAVE_IMPLICIT +} +save_state; + +/* Strings for all symbol attributes. We use these for dumping the + parse tree, in error messages, and also when reading and writing + modules. In symbol.c. */ +extern const mstring flavors[]; +extern const mstring procedures[]; +extern const mstring intents[]; +extern const mstring access_types[]; +extern const mstring ifsrc_types[]; +extern const mstring save_status[]; + +/* Enumeration of all the generic intrinsic functions. Used by the + backend for identification of a function. */ + +enum gfc_isym_id +{ + /* GFC_ISYM_NONE is used for intrinsics which will never be seen by + the backend (e.g. KIND). */ + GFC_ISYM_NONE = 0, + GFC_ISYM_ABORT, + GFC_ISYM_ABS, + GFC_ISYM_ACCESS, + GFC_ISYM_ACHAR, + GFC_ISYM_ACOS, + GFC_ISYM_ACOSH, + GFC_ISYM_ADJUSTL, + GFC_ISYM_ADJUSTR, + GFC_ISYM_AIMAG, + GFC_ISYM_AINT, + GFC_ISYM_ALARM, + GFC_ISYM_ALL, + GFC_ISYM_ALLOCATED, + GFC_ISYM_AND, + GFC_ISYM_ANINT, + GFC_ISYM_ANY, + GFC_ISYM_ASIN, + GFC_ISYM_ASINH, + GFC_ISYM_ASSOCIATED, + GFC_ISYM_ATAN, + GFC_ISYM_ATAN2, + GFC_ISYM_ATANH, + GFC_ISYM_BIT_SIZE, + GFC_ISYM_BTEST, + GFC_ISYM_CEILING, + GFC_ISYM_CHAR, + GFC_ISYM_CHDIR, + GFC_ISYM_CHMOD, + GFC_ISYM_CMPLX, + GFC_ISYM_COMMAND_ARGUMENT_COUNT, + GFC_ISYM_COMPLEX, + GFC_ISYM_CONJG, + GFC_ISYM_CONVERSION, + GFC_ISYM_COS, + GFC_ISYM_COSH, + GFC_ISYM_COUNT, + GFC_ISYM_CPU_TIME, + GFC_ISYM_CSHIFT, + GFC_ISYM_CTIME, + GFC_ISYM_DATE_AND_TIME, + GFC_ISYM_DBLE, + GFC_ISYM_DIGITS, + GFC_ISYM_DIM, + GFC_ISYM_DOT_PRODUCT, + GFC_ISYM_DPROD, + GFC_ISYM_DTIME, + GFC_ISYM_EOSHIFT, + GFC_ISYM_EPSILON, + GFC_ISYM_ERF, + GFC_ISYM_ERFC, + GFC_ISYM_ERFC_SCALED, + GFC_ISYM_ETIME, + GFC_ISYM_EXIT, + GFC_ISYM_EXP, + GFC_ISYM_EXPONENT, + GFC_ISYM_FDATE, + GFC_ISYM_FGET, + GFC_ISYM_FGETC, + GFC_ISYM_FLOOR, + GFC_ISYM_FLUSH, + GFC_ISYM_FNUM, + GFC_ISYM_FPUT, + GFC_ISYM_FPUTC, + GFC_ISYM_FRACTION, + GFC_ISYM_FREE, + GFC_ISYM_FSEEK, + GFC_ISYM_FSTAT, + GFC_ISYM_FTELL, + GFC_ISYM_GAMMA, + GFC_ISYM_GERROR, + GFC_ISYM_GETARG, + GFC_ISYM_GET_COMMAND, + GFC_ISYM_GET_COMMAND_ARGUMENT, + GFC_ISYM_GETCWD, + GFC_ISYM_GETENV, + GFC_ISYM_GET_ENVIRONMENT_VARIABLE, + GFC_ISYM_GETGID, + GFC_ISYM_GETLOG, + GFC_ISYM_GETPID, + GFC_ISYM_GETUID, + GFC_ISYM_GMTIME, + GFC_ISYM_HOSTNM, + GFC_ISYM_HUGE, + GFC_ISYM_HYPOT, + GFC_ISYM_IACHAR, + GFC_ISYM_IAND, + GFC_ISYM_IARGC, + GFC_ISYM_IBCLR, + GFC_ISYM_IBITS, + GFC_ISYM_IBSET, + GFC_ISYM_ICHAR, + GFC_ISYM_IDATE, + GFC_ISYM_IEOR, + GFC_ISYM_IERRNO, + GFC_ISYM_INDEX, + GFC_ISYM_INT, + GFC_ISYM_INT2, + GFC_ISYM_INT8, + GFC_ISYM_IOR, + GFC_ISYM_IRAND, + GFC_ISYM_ISATTY, + GFC_ISYM_IS_IOSTAT_END, + GFC_ISYM_IS_IOSTAT_EOR, + GFC_ISYM_ISNAN, + GFC_ISYM_ISHFT, + GFC_ISYM_ISHFTC, + GFC_ISYM_ITIME, + GFC_ISYM_J0, + GFC_ISYM_J1, + GFC_ISYM_JN, + GFC_ISYM_KILL, + GFC_ISYM_KIND, + GFC_ISYM_LBOUND, + GFC_ISYM_LEADZ, + GFC_ISYM_LEN, + GFC_ISYM_LEN_TRIM, + GFC_ISYM_LGAMMA, + GFC_ISYM_LGE, + GFC_ISYM_LGT, + GFC_ISYM_LINK, + GFC_ISYM_LLE, + GFC_ISYM_LLT, + GFC_ISYM_LOC, + GFC_ISYM_LOG, + GFC_ISYM_LOG10, + GFC_ISYM_LOGICAL, + GFC_ISYM_LONG, + GFC_ISYM_LSHIFT, + GFC_ISYM_LSTAT, + GFC_ISYM_LTIME, + GFC_ISYM_MALLOC, + GFC_ISYM_MATMUL, + GFC_ISYM_MAX, + GFC_ISYM_MAXEXPONENT, + GFC_ISYM_MAXLOC, + GFC_ISYM_MAXVAL, + GFC_ISYM_MCLOCK, + GFC_ISYM_MCLOCK8, + GFC_ISYM_MERGE, + GFC_ISYM_MIN, + GFC_ISYM_MINEXPONENT, + GFC_ISYM_MINLOC, + GFC_ISYM_MINVAL, + GFC_ISYM_MOD, + GFC_ISYM_MODULO, + GFC_ISYM_MOVE_ALLOC, + GFC_ISYM_MVBITS, + GFC_ISYM_NEAREST, + GFC_ISYM_NEW_LINE, + GFC_ISYM_NINT, + GFC_ISYM_NOT, + GFC_ISYM_NULL, + GFC_ISYM_OR, + GFC_ISYM_PACK, + GFC_ISYM_PERROR, + GFC_ISYM_PRECISION, + GFC_ISYM_PRESENT, + GFC_ISYM_PRODUCT, + GFC_ISYM_RADIX, + GFC_ISYM_RAND, + GFC_ISYM_RANDOM_NUMBER, + GFC_ISYM_RANDOM_SEED, + GFC_ISYM_RANGE, + GFC_ISYM_REAL, + GFC_ISYM_RENAME, + GFC_ISYM_REPEAT, + GFC_ISYM_RESHAPE, + GFC_ISYM_RRSPACING, + GFC_ISYM_RSHIFT, + GFC_ISYM_SC_KIND, + GFC_ISYM_SCALE, + GFC_ISYM_SCAN, + GFC_ISYM_SECNDS, + GFC_ISYM_SECOND, + GFC_ISYM_SET_EXPONENT, + GFC_ISYM_SHAPE, + GFC_ISYM_SIGN, + GFC_ISYM_SIGNAL, + GFC_ISYM_SI_KIND, + GFC_ISYM_SIN, + GFC_ISYM_SINH, + GFC_ISYM_SIZE, + GFC_ISYM_SLEEP, + GFC_ISYM_SIZEOF, + GFC_ISYM_SPACING, + GFC_ISYM_SPREAD, + GFC_ISYM_SQRT, + GFC_ISYM_SRAND, + GFC_ISYM_SR_KIND, + GFC_ISYM_STAT, + GFC_ISYM_SUM, + GFC_ISYM_SYMLINK, + GFC_ISYM_SYMLNK, + GFC_ISYM_SYSTEM, + GFC_ISYM_SYSTEM_CLOCK, + GFC_ISYM_TAN, + GFC_ISYM_TANH, + GFC_ISYM_TIME, + GFC_ISYM_TIME8, + GFC_ISYM_TINY, + GFC_ISYM_TRAILZ, + GFC_ISYM_TRANSFER, + GFC_ISYM_TRANSPOSE, + GFC_ISYM_TRIM, + GFC_ISYM_TTYNAM, + GFC_ISYM_UBOUND, + GFC_ISYM_UMASK, + GFC_ISYM_UNLINK, + GFC_ISYM_UNPACK, + GFC_ISYM_VERIFY, + GFC_ISYM_XOR, + GFC_ISYM_Y0, + GFC_ISYM_Y1, + GFC_ISYM_YN +}; +typedef enum gfc_isym_id gfc_isym_id; + + +typedef enum +{ + GFC_INIT_REAL_OFF = 0, + GFC_INIT_REAL_ZERO, + GFC_INIT_REAL_NAN, + GFC_INIT_REAL_INF, + GFC_INIT_REAL_NEG_INF +} +init_local_real; + +typedef enum +{ + GFC_INIT_LOGICAL_OFF = 0, + GFC_INIT_LOGICAL_FALSE, + GFC_INIT_LOGICAL_TRUE +} +init_local_logical; + +typedef enum +{ + GFC_INIT_CHARACTER_OFF = 0, + GFC_INIT_CHARACTER_ON +} +init_local_character; + +typedef enum +{ + GFC_INIT_INTEGER_OFF = 0, + GFC_INIT_INTEGER_ON +} +init_local_integer; + +/************************* Structures *****************************/ + +/* Used for keeping things in balanced binary trees. */ +#define BBT_HEADER(self) int priority; struct self *left, *right + +#define NAMED_INTCST(a,b,c,d) a, +typedef enum +{ + ISOFORTRANENV_INVALID = -1, +#include "iso-fortran-env.def" + ISOFORTRANENV_LAST, ISOFORTRANENV_NUMBER = ISOFORTRANENV_LAST +} +iso_fortran_env_symbol; +#undef NAMED_INTCST + +#define NAMED_INTCST(a,b,c,d) a, +#define NAMED_REALCST(a,b,c) a, +#define NAMED_CMPXCST(a,b,c) a, +#define NAMED_LOGCST(a,b,c) a, +#define NAMED_CHARKNDCST(a,b,c) a, +#define NAMED_CHARCST(a,b,c) a, +#define DERIVED_TYPE(a,b,c) a, +#define PROCEDURE(a,b) a, +typedef enum +{ + ISOCBINDING_INVALID = -1, +#include "iso-c-binding.def" + ISOCBINDING_LAST, + ISOCBINDING_NUMBER = ISOCBINDING_LAST +} +iso_c_binding_symbol; +#undef NAMED_INTCST +#undef NAMED_REALCST +#undef NAMED_CMPXCST +#undef NAMED_LOGCST +#undef NAMED_CHARKNDCST +#undef NAMED_CHARCST +#undef DERIVED_TYPE +#undef PROCEDURE + +typedef enum +{ + INTMOD_NONE = 0, INTMOD_ISO_FORTRAN_ENV, INTMOD_ISO_C_BINDING +} +intmod_id; + +typedef struct +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + int value; /* Used for both integer and character values. */ + bt f90_type; +} +CInteropKind_t; + +/* Array of structs, where the structs represent the C interop kinds. + The list will be implemented based on a hash of the kind name since + these could be accessed multiple times. + Declared in trans-types.c as a global, since it's in that file + that the list is initialized. */ +extern CInteropKind_t c_interop_kinds_table[]; + +/* Symbol attribute structure. */ +typedef struct +{ + /* Variable attributes. */ + unsigned allocatable:1, dimension:1, external:1, intrinsic:1, + optional:1, pointer:1, target:1, value:1, volatile_:1, + dummy:1, result:1, assign:1, threadprivate:1, not_always_present:1, + implied_index:1, subref_array_pointer:1, proc_pointer:1; + + ENUM_BITFIELD (save_state) save:2; + + unsigned data:1, /* Symbol is named in a DATA statement. */ + is_protected:1, /* Symbol has been marked as protected. */ + use_assoc:1, /* Symbol has been use-associated. */ + use_only:1, /* Symbol has been use-associated, with ONLY. */ + use_rename:1, /* Symbol has been use-associated and renamed. */ + imported:1; /* Symbol has been associated by IMPORT. */ + + unsigned in_namelist:1, in_common:1, in_equivalence:1; + unsigned function:1, subroutine:1, procedure:1; + unsigned generic:1, generic_copy:1; + unsigned implicit_type:1; /* Type defined via implicit rules. */ + unsigned untyped:1; /* No implicit type could be found. */ + + unsigned is_bind_c:1; /* say if is bound to C. */ + unsigned extension:1; /* extends a derived type. */ + + /* These flags are both in the typespec and attribute. The attribute + list is what gets read from/written to a module file. The typespec + is created from a decl being processed. */ + unsigned is_c_interop:1; /* It's c interoperable. */ + unsigned is_iso_c:1; /* Symbol is from iso_c_binding. */ + + /* Function/subroutine attributes */ + unsigned sequence:1, elemental:1, pure:1, recursive:1; + unsigned unmaskable:1, masked:1, contained:1, mod_proc:1, abstract:1; + + /* This is set if the subroutine doesn't return. Currently, this + is only possible for intrinsic subroutines. */ + unsigned noreturn:1; + + /* Set if this procedure is an alternate entry point. These procedures + don't have any code associated, and the backend will turn them into + thunks to the master function. */ + unsigned entry:1; + + /* Set if this is the master function for a procedure with multiple + entry points. */ + unsigned entry_master:1; + + /* Set if this is the master function for a function with multiple + entry points where characteristics of the entry points differ. */ + unsigned mixed_entry_master:1; + + /* Set if a function must always be referenced by an explicit interface. */ + unsigned always_explicit:1; + + /* Set if the symbol has been referenced in an expression. No further + modification of type or type parameters is permitted. */ + unsigned referenced:1; + + /* Set if the symbol has ambiguous interfaces. */ + unsigned ambiguous_interfaces:1; + + /* Set if this is the symbol for the main program. */ + unsigned is_main_program:1; + + /* Mutually exclusive multibit attributes. */ + ENUM_BITFIELD (gfc_access) access:2; + ENUM_BITFIELD (sym_intent) intent:2; + ENUM_BITFIELD (sym_flavor) flavor:4; + ENUM_BITFIELD (ifsrc) if_source:2; + + ENUM_BITFIELD (procedure_type) proc:3; + + /* Special attributes for Cray pointers, pointees. */ + unsigned cray_pointer:1, cray_pointee:1; + + /* The symbol is a derived type with allocatable components, pointer + components or private components, possibly nested. zero_comp + is true if the derived type has no component at all. */ + unsigned alloc_comp:1, pointer_comp:1, private_comp:1, zero_comp:1; + + /* The namespace where the VOLATILE attribute has been set. */ + struct gfc_namespace *volatile_ns; +} +symbol_attribute; + + +/* We need to store source lines as sequences of multibyte source + characters. We define here a type wide enough to hold any multibyte + source character, just like libcpp does. A 32-bit type is enough. */ + +#if HOST_BITS_PER_INT >= 32 +typedef unsigned int gfc_char_t; +#elif HOST_BITS_PER_LONG >= 32 +typedef unsigned long gfc_char_t; +#elif defined(HAVE_LONG_LONG) && (HOST_BITS_PER_LONGLONG >= 32) +typedef unsigned long long gfc_char_t; +#else +# error "Cannot find an integer type with at least 32 bits" +#endif + + +/* The following three structures are used to identify a location in + the sources. + + gfc_file is used to maintain a tree of the source files and how + they include each other + + gfc_linebuf holds a single line of source code and information + which file it resides in + + locus point to the sourceline and the character in the source + line. +*/ + +typedef struct gfc_file +{ + struct gfc_file *next, *up; + int inclusion_line, line; + char *filename; +} gfc_file; + +typedef struct gfc_linebuf +{ + source_location location; + struct gfc_file *file; + struct gfc_linebuf *next; + + int truncated; + bool dbg_emitted; + + gfc_char_t line[1]; +} gfc_linebuf; + +#define gfc_linebuf_header_size (offsetof (gfc_linebuf, line)) + +#define gfc_linebuf_linenum(LBUF) (LOCATION_LINE ((LBUF)->location)) + +typedef struct +{ + gfc_char_t *nextc; + gfc_linebuf *lb; +} locus; + +/* In order for the "gfc" format checking to work correctly, you must + have declared a typedef locus first. */ +#if GCC_VERSION >= 4001 +#define ATTRIBUTE_GCC_GFC(m, n) __attribute__ ((__format__ (__gcc_gfc__, m, n))) ATTRIBUTE_NONNULL(m) +#else +#define ATTRIBUTE_GCC_GFC(m, n) ATTRIBUTE_NONNULL(m) +#endif + + +/* Suppress error messages or re-enable them. */ + +void gfc_push_suppress_errors (void); +void gfc_pop_suppress_errors (void); + + +/* Character length structures hold the expression that gives the + length of a character variable. We avoid putting these into + gfc_typespec because doing so prevents us from doing structure + copies and forces us to deallocate any typespecs we create, as well + as structures that contain typespecs. They also can have multiple + character typespecs pointing to them. + + These structures form a singly linked list within the current + namespace and are deallocated with the namespace. It is possible to + end up with gfc_charlen structures that have nothing pointing to them. */ + +typedef struct gfc_charlen +{ + struct gfc_expr *length; + struct gfc_charlen *next; + bool length_from_typespec; /* Length from explicit array ctor typespec? */ + tree backend_decl; + + int resolved; +} +gfc_charlen; + +#define gfc_get_charlen() XCNEW (gfc_charlen) + +/* Type specification structure. FIXME: derived and cl could be union??? */ +typedef struct +{ + bt type; + int kind; + struct gfc_symbol *derived; + gfc_charlen *cl; /* For character types only. */ + struct gfc_symbol *interface; /* For PROCEDURE declarations. */ + int is_c_interop; + int is_iso_c; + bt f90_type; +} +gfc_typespec; + +/* Array specification. */ +typedef struct +{ + int rank; /* A rank of zero means that a variable is a scalar. */ + array_type type; + struct gfc_expr *lower[GFC_MAX_DIMENSIONS], *upper[GFC_MAX_DIMENSIONS]; + + /* These two fields are used with the Cray Pointer extension. */ + bool cray_pointee; /* True iff this spec belongs to a cray pointee. */ + bool cp_was_assumed; /* AS_ASSUMED_SIZE cp arrays are converted to + AS_EXPLICIT, but we want to remember that we + did this. */ + +} +gfc_array_spec; + +#define gfc_get_array_spec() XCNEW (gfc_array_spec) + + +/* Components of derived types. */ +typedef struct gfc_component +{ + const char *name; + gfc_typespec ts; + + symbol_attribute attr; + gfc_array_spec *as; + + tree backend_decl; + locus loc; + struct gfc_expr *initializer; + struct gfc_component *next; +} +gfc_component; + +#define gfc_get_component() XCNEW (gfc_component) + +/* Formal argument lists are lists of symbols. */ +typedef struct gfc_formal_arglist +{ + /* Symbol representing the argument at this position in the arglist. */ + struct gfc_symbol *sym; + /* Points to the next formal argument. */ + struct gfc_formal_arglist *next; +} +gfc_formal_arglist; + +#define gfc_get_formal_arglist() XCNEW (gfc_formal_arglist) + + +/* The gfc_actual_arglist structure is for actual arguments. */ +typedef struct gfc_actual_arglist +{ + const char *name; + /* Alternate return label when the expr member is null. */ + struct gfc_st_label *label; + + /* This is set to the type of an eventual omitted optional + argument. This is used to determine if a hidden string length + argument has to be added to a function call. */ + bt missing_arg_type; + + struct gfc_expr *expr; + struct gfc_actual_arglist *next; +} +gfc_actual_arglist; + +#define gfc_get_actual_arglist() XCNEW (gfc_actual_arglist) + + +/* Because a symbol can belong to multiple namelists, they must be + linked externally to the symbol itself. */ +typedef struct gfc_namelist +{ + struct gfc_symbol *sym; + struct gfc_namelist *next; +} +gfc_namelist; + +#define gfc_get_namelist() XCNEW (gfc_namelist) + +enum +{ + OMP_LIST_PRIVATE, + OMP_LIST_FIRSTPRIVATE, + OMP_LIST_LASTPRIVATE, + OMP_LIST_COPYPRIVATE, + OMP_LIST_SHARED, + OMP_LIST_COPYIN, + OMP_LIST_PLUS, + OMP_LIST_REDUCTION_FIRST = OMP_LIST_PLUS, + OMP_LIST_MULT, + OMP_LIST_SUB, + OMP_LIST_AND, + OMP_LIST_OR, + OMP_LIST_EQV, + OMP_LIST_NEQV, + OMP_LIST_MAX, + OMP_LIST_MIN, + OMP_LIST_IAND, + OMP_LIST_IOR, + OMP_LIST_IEOR, + OMP_LIST_REDUCTION_LAST = OMP_LIST_IEOR, + OMP_LIST_NUM +}; + +/* Because a symbol can belong to multiple namelists, they must be + linked externally to the symbol itself. */ +typedef struct gfc_omp_clauses +{ + struct gfc_expr *if_expr; + struct gfc_expr *num_threads; + gfc_namelist *lists[OMP_LIST_NUM]; + enum + { + OMP_SCHED_NONE, + OMP_SCHED_STATIC, + OMP_SCHED_DYNAMIC, + OMP_SCHED_GUIDED, + OMP_SCHED_RUNTIME, + OMP_SCHED_AUTO + } sched_kind; + struct gfc_expr *chunk_size; + enum + { + OMP_DEFAULT_UNKNOWN, + OMP_DEFAULT_NONE, + OMP_DEFAULT_PRIVATE, + OMP_DEFAULT_SHARED, + OMP_DEFAULT_FIRSTPRIVATE + } default_sharing; + int collapse; + bool nowait, ordered, untied; +} +gfc_omp_clauses; + +#define gfc_get_omp_clauses() XCNEW (gfc_omp_clauses) + + +/* The gfc_st_label structure is a doubly linked list attached to a + namespace that records the usage of statement labels within that + space. */ +/* TODO: Make format/statement specifics a union. */ +typedef struct gfc_st_label +{ + BBT_HEADER(gfc_st_label); + + int value; + + gfc_sl_type defined, referenced; + + struct gfc_expr *format; + + tree backend_decl; + + locus where; +} +gfc_st_label; + + +/* gfc_interface()-- Interfaces are lists of symbols strung together. */ +typedef struct gfc_interface +{ + struct gfc_symbol *sym; + locus where; + struct gfc_interface *next; +} +gfc_interface; + +#define gfc_get_interface() XCNEW (gfc_interface) + +/* User operator nodes. These are like stripped down symbols. */ +typedef struct +{ + const char *name; + + gfc_interface *op; + struct gfc_namespace *ns; + gfc_access access; +} +gfc_user_op; + + +/* A list of specific bindings that are associated with a generic spec. */ +typedef struct gfc_tbp_generic +{ + /* The parser sets specific_st, upon resolution we look for the corresponding + gfc_typebound_proc and set specific for further use. */ + struct gfc_symtree* specific_st; + struct gfc_typebound_proc* specific; + + struct gfc_tbp_generic* next; +} +gfc_tbp_generic; + +#define gfc_get_tbp_generic() XCNEW (gfc_tbp_generic) + + +/* Data needed for type-bound procedures. */ +typedef struct gfc_typebound_proc +{ + locus where; /* Where the PROCEDURE/GENERIC definition was. */ + + union + { + struct gfc_symtree* specific; + gfc_tbp_generic* generic; + } + u; + + gfc_access access; + char* pass_arg; /* Argument-name for PASS. NULL if not specified. */ + + /* The overridden type-bound proc (or GENERIC with this name in the + parent-type) or NULL if non. */ + struct gfc_typebound_proc* overridden; + + /* Once resolved, we use the position of pass_arg in the formal arglist of + the binding-target procedure to identify it. The first argument has + number 1 here, the second 2, and so on. */ + unsigned pass_arg_num; + + unsigned nopass:1; /* Whether we have NOPASS (PASS otherwise). */ + unsigned non_overridable:1; + unsigned is_generic:1; + unsigned function:1, subroutine:1; + unsigned error:1; /* Ignore it, when an error occurred during resolution. */ +} +gfc_typebound_proc; + +#define gfc_get_typebound_proc() XCNEW (gfc_typebound_proc) + + +/* Symbol nodes. These are important things. They are what the + standard refers to as "entities". The possibly multiple names that + refer to the same entity are accomplished by a binary tree of + symtree structures that is balanced by the red-black method-- more + than one symtree node can point to any given symbol. */ + +typedef struct gfc_symbol +{ + const char *name; /* Primary name, before renaming */ + const char *module; /* Module this symbol came from */ + locus declared_at; + + gfc_typespec ts; + symbol_attribute attr; + + /* The formal member points to the formal argument list if the + symbol is a function or subroutine name. If the symbol is a + generic name, the generic member points to the list of + interfaces. */ + + gfc_interface *generic; + gfc_access component_access; + + gfc_formal_arglist *formal; + struct gfc_namespace *formal_ns; + struct gfc_namespace *f2k_derived; + + struct gfc_expr *value; /* Parameter/Initializer value */ + gfc_array_spec *as; + struct gfc_symbol *result; /* function result symbol */ + gfc_component *components; /* Derived type components */ + + /* Defined only for Cray pointees; points to their pointer. */ + struct gfc_symbol *cp_pointer; + + struct gfc_symbol *common_next; /* Links for COMMON syms */ + + /* This is in fact a gfc_common_head but it is only used for pointer + comparisons to check if symbols are in the same common block. */ + struct gfc_common_head* common_head; + + /* Make sure setup code for dummy arguments is generated in the correct + order. */ + int dummy_order; + + int entry_id; + + gfc_namelist *namelist, *namelist_tail; + + /* Change management fields. Symbols that might be modified by the + current statement have the mark member nonzero and are kept in a + singly linked list through the tlink field. Of these symbols, + symbols with old_symbol equal to NULL are symbols created within + the current statement. Otherwise, old_symbol points to a copy of + the old symbol. */ + + struct gfc_symbol *old_symbol, *tlink; + unsigned mark:1, gfc_new:1; + /* Nonzero if all equivalences associated with this symbol have been + processed. */ + unsigned equiv_built:1; + /* Set if this variable is used as an index name in a FORALL. */ + unsigned forall_index:1; + int refs; + struct gfc_namespace *ns; /* namespace containing this symbol */ + + tree backend_decl; + + /* Identity of the intrinsic module the symbol comes from, or + INTMOD_NONE if it's not imported from a intrinsic module. */ + intmod_id from_intmod; + /* Identity of the symbol from intrinsic modules, from enums maintained + separately by each intrinsic module. Used together with from_intmod, + it uniquely identifies a symbol from an intrinsic module. */ + int intmod_sym_id; + + /* This may be repetitive, since the typespec now has a binding + label field. */ + char binding_label[GFC_MAX_BINDING_LABEL_LEN + 1]; + /* Store a reference to the common_block, if this symbol is in one. */ + struct gfc_common_head *common_block; +} +gfc_symbol; + + +/* This structure is used to keep track of symbols in common blocks. */ +typedef struct gfc_common_head +{ + locus where; + char use_assoc, saved, threadprivate; + char name[GFC_MAX_SYMBOL_LEN + 1]; + struct gfc_symbol *head; + char binding_label[GFC_MAX_BINDING_LABEL_LEN + 1]; + int is_bind_c; +} +gfc_common_head; + +#define gfc_get_common_head() XCNEW (gfc_common_head) + + +/* A list of all the alternate entry points for a procedure. */ + +typedef struct gfc_entry_list +{ + /* The symbol for this entry point. */ + gfc_symbol *sym; + /* The zero-based id of this entry point. */ + int id; + /* The LABEL_EXPR marking this entry point. */ + tree label; + /* The next item in the list. */ + struct gfc_entry_list *next; +} +gfc_entry_list; + +#define gfc_get_entry_list() \ + (gfc_entry_list *) gfc_getmem(sizeof(gfc_entry_list)) + +/* Lists of rename info for the USE statement. */ + +typedef struct gfc_use_rename +{ + char local_name[GFC_MAX_SYMBOL_LEN + 1], use_name[GFC_MAX_SYMBOL_LEN + 1]; + struct gfc_use_rename *next; + int found; + gfc_intrinsic_op op; + locus where; +} +gfc_use_rename; + +#define gfc_get_use_rename() XCNEW (gfc_use_rename); + +/* A list of all USE statements in a namespace. */ + +typedef struct gfc_use_list +{ + const char *module_name; + int only_flag; + struct gfc_use_rename *rename; + locus where; + /* Next USE statement. */ + struct gfc_use_list *next; +} +gfc_use_list; + +#define gfc_get_use_list() \ + (gfc_use_list *) gfc_getmem(sizeof(gfc_use_list)) + +/* Within a namespace, symbols are pointed to by symtree nodes that + are linked together in a balanced binary tree. There can be + several symtrees pointing to the same symbol node via USE + statements. */ + +typedef struct gfc_symtree +{ + BBT_HEADER (gfc_symtree); + const char *name; + int ambiguous; + union + { + gfc_symbol *sym; /* Symbol associated with this node */ + gfc_user_op *uop; + gfc_common_head *common; + } + n; + + /* Data for type-bound procedures; NULL if no type-bound procedure. */ + gfc_typebound_proc* typebound; +} +gfc_symtree; + +/* A linked list of derived types in the namespace. */ +typedef struct gfc_dt_list +{ + struct gfc_symbol *derived; + struct gfc_dt_list *next; +} +gfc_dt_list; + +#define gfc_get_dt_list() XCNEW (gfc_dt_list) + + /* A list of all derived types. */ + extern gfc_dt_list *gfc_derived_types; + +/* A namespace describes the contents of procedure, module or + interface block. */ +/* ??? Anything else use these? */ + +typedef struct gfc_namespace +{ + /* Tree containing all the symbols in this namespace. */ + gfc_symtree *sym_root; + /* Tree containing all the user-defined operators in the namespace. */ + gfc_symtree *uop_root; + /* Tree containing all the common blocks. */ + gfc_symtree *common_root; + /* Linked list of finalizer procedures. */ + struct gfc_finalizer *finalizers; + + /* If set_flag[letter] is set, an implicit type has been set for letter. */ + int set_flag[GFC_LETTERS]; + /* Keeps track of the implicit types associated with the letters. */ + gfc_typespec default_type[GFC_LETTERS]; + /* Store the positions of IMPLICIT statements. */ + locus implicit_loc[GFC_LETTERS]; + + /* If this is a namespace of a procedure, this points to the procedure. */ + struct gfc_symbol *proc_name; + /* If this is the namespace of a unit which contains executable + code, this points to it. */ + struct gfc_code *code; + + /* Points to the equivalences set up in this namespace. */ + struct gfc_equiv *equiv; + + /* Points to the equivalence groups produced by trans_common. */ + struct gfc_equiv_list *equiv_lists; + + gfc_interface *op[GFC_INTRINSIC_OPS]; + + /* Points to the parent namespace, i.e. the namespace of a module or + procedure in which the procedure belonging to this namespace is + contained. The parent namespace points to this namespace either + directly via CONTAINED, or indirectly via the chain built by + SIBLING. */ + struct gfc_namespace *parent; + /* CONTAINED points to the first contained namespace. Sibling + namespaces are chained via SIBLING. */ + struct gfc_namespace *contained, *sibling; + + gfc_common_head blank_common; + gfc_access default_access, operator_access[GFC_INTRINSIC_OPS]; + + gfc_st_label *st_labels; + /* This list holds information about all the data initializers in + this namespace. */ + struct gfc_data *data; + + gfc_charlen *cl_list, *old_cl_list; + + int save_all, seen_save, seen_implicit_none; + + /* Normally we don't need to refcount namespaces. However when we read + a module containing a function with multiple entry points, this + will appear as several functions with the same formal namespace. */ + int refs; + + /* A list of all alternate entry points to this procedure (or NULL). */ + gfc_entry_list *entries; + + /* A list of USE statements in this namespace. */ + gfc_use_list *use_stmts; + + /* Set to 1 if namespace is a BLOCK DATA program unit. */ + int is_block_data; + + /* Set to 1 if namespace is an interface body with "IMPORT" used. */ + int has_import_set; +} +gfc_namespace; + +extern gfc_namespace *gfc_current_ns; + +/* Global symbols are symbols of global scope. Currently we only use + this to detect collisions already when parsing. + TODO: Extend to verify procedure calls. */ + +typedef struct gfc_gsymbol +{ + BBT_HEADER(gfc_gsymbol); + + const char *name; + const char *sym_name; + const char *mod_name; + const char *binding_label; + enum { GSYM_UNKNOWN=1, GSYM_PROGRAM, GSYM_FUNCTION, GSYM_SUBROUTINE, + GSYM_MODULE, GSYM_COMMON, GSYM_BLOCK_DATA } type; + + int defined, used; + locus where; +} +gfc_gsymbol; + +extern gfc_gsymbol *gfc_gsym_root; + +/* Information on interfaces being built. */ +typedef struct +{ + interface_type type; + gfc_symbol *sym; + gfc_namespace *ns; + gfc_user_op *uop; + gfc_intrinsic_op op; +} +gfc_interface_info; + +extern gfc_interface_info current_interface; + + +/* Array reference. */ +typedef struct gfc_array_ref +{ + ar_type type; + int dimen; /* # of components in the reference */ + locus where; + gfc_array_spec *as; + + locus c_where[GFC_MAX_DIMENSIONS]; /* All expressions can be NULL */ + struct gfc_expr *start[GFC_MAX_DIMENSIONS], *end[GFC_MAX_DIMENSIONS], + *stride[GFC_MAX_DIMENSIONS]; + + enum + { DIMEN_ELEMENT = 1, DIMEN_RANGE, DIMEN_VECTOR, DIMEN_UNKNOWN } + dimen_type[GFC_MAX_DIMENSIONS]; + + struct gfc_expr *offset; +} +gfc_array_ref; + +#define gfc_get_array_ref() XCNEW (gfc_array_ref) + + +/* Component reference nodes. A variable is stored as an expression + node that points to the base symbol. After that, a singly linked + list of component reference nodes gives the variable's complete + resolution. The array_ref component may be present and comes + before the component component. */ + +typedef enum + { REF_ARRAY, REF_COMPONENT, REF_SUBSTRING } +ref_type; + +typedef struct gfc_ref +{ + ref_type type; + + union + { + struct gfc_array_ref ar; + + struct + { + gfc_component *component; + gfc_symbol *sym; + } + c; + + struct + { + struct gfc_expr *start, *end; /* Substring */ + gfc_charlen *length; + } + ss; + + } + u; + + struct gfc_ref *next; +} +gfc_ref; + +#define gfc_get_ref() XCNEW (gfc_ref) + + +/* Structures representing intrinsic symbols and their arguments lists. */ +typedef struct gfc_intrinsic_arg +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + + gfc_typespec ts; + int optional; + gfc_actual_arglist *actual; + + struct gfc_intrinsic_arg *next; + +} +gfc_intrinsic_arg; + + +/* Specifies the various kinds of check functions used to verify the + argument lists of intrinsic functions. fX with X an integer refer + to check functions of intrinsics with X arguments. f1m is used for + the MAX and MIN intrinsics which can have an arbitrary number of + arguments, f3ml is used for the MINLOC and MAXLOC intrinsics as + these have special semantics. */ + +typedef union +{ + gfc_try (*f0)(void); + gfc_try (*f1)(struct gfc_expr *); + gfc_try (*f1m)(gfc_actual_arglist *); + gfc_try (*f2)(struct gfc_expr *, struct gfc_expr *); + gfc_try (*f3)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *); + gfc_try (*f3ml)(gfc_actual_arglist *); + gfc_try (*f3red)(gfc_actual_arglist *); + gfc_try (*f4)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *, + struct gfc_expr *); + gfc_try (*f5)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *, + struct gfc_expr *, struct gfc_expr *); +} +gfc_check_f; + +/* Like gfc_check_f, these specify the type of the simplification + function associated with an intrinsic. The fX are just like in + gfc_check_f. cc is used for type conversion functions. */ + +typedef union +{ + struct gfc_expr *(*f0)(void); + struct gfc_expr *(*f1)(struct gfc_expr *); + struct gfc_expr *(*f2)(struct gfc_expr *, struct gfc_expr *); + struct gfc_expr *(*f3)(struct gfc_expr *, struct gfc_expr *, + struct gfc_expr *); + struct gfc_expr *(*f4)(struct gfc_expr *, struct gfc_expr *, + struct gfc_expr *, struct gfc_expr *); + struct gfc_expr *(*f5)(struct gfc_expr *, struct gfc_expr *, + struct gfc_expr *, struct gfc_expr *, + struct gfc_expr *); + struct gfc_expr *(*cc)(struct gfc_expr *, bt, int); +} +gfc_simplify_f; + +/* Again like gfc_check_f, these specify the type of the resolution + function associated with an intrinsic. The fX are just like in + gfc_check_f. f1m is used for MIN and MAX, s1 is used for abort(). */ + +typedef union +{ + void (*f0)(struct gfc_expr *); + void (*f1)(struct gfc_expr *, struct gfc_expr *); + void (*f1m)(struct gfc_expr *, struct gfc_actual_arglist *); + void (*f2)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *); + void (*f3)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *, + struct gfc_expr *); + void (*f4)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *, + struct gfc_expr *, struct gfc_expr *); + void (*f5)(struct gfc_expr *, struct gfc_expr *, struct gfc_expr *, + struct gfc_expr *, struct gfc_expr *, struct gfc_expr *); + void (*s1)(struct gfc_code *); +} +gfc_resolve_f; + + +typedef struct gfc_intrinsic_sym +{ + const char *name, *lib_name; + gfc_intrinsic_arg *formal; + gfc_typespec ts; + unsigned elemental:1, inquiry:1, transformational:1, pure:1, + generic:1, specific:1, actual_ok:1, noreturn:1, conversion:1; + + int standard; + + gfc_simplify_f simplify; + gfc_check_f check; + gfc_resolve_f resolve; + struct gfc_intrinsic_sym *specific_head, *next; + gfc_isym_id id; + +} +gfc_intrinsic_sym; + + +/* Expression nodes. The expression node types deserve explanations, + since the last couple can be easily misconstrued: + + EXPR_OP Operator node pointing to one or two other nodes + EXPR_FUNCTION Function call, symbol points to function's name + EXPR_CONSTANT A scalar constant: Logical, String, Real, Int or Complex + EXPR_VARIABLE An Lvalue with a root symbol and possible reference list + which expresses structure, array and substring refs. + EXPR_NULL The NULL pointer value (which also has a basic type). + EXPR_SUBSTRING A substring of a constant string + EXPR_STRUCTURE A structure constructor + EXPR_ARRAY An array constructor. + EXPR_COMPCALL Function (or subroutine) call of a procedure pointer + component or type-bound procedure. */ + +#include +#include +#define GFC_RND_MODE GMP_RNDN + +typedef struct gfc_expr +{ + expr_t expr_type; + + gfc_typespec ts; /* These two refer to the overall expression */ + + int rank; + mpz_t *shape; /* Can be NULL if shape is unknown at compile time */ + + /* Nonnull for functions and structure constructors, the base object for + component-calls. */ + gfc_symtree *symtree; + + gfc_ref *ref; + + locus where; + + /* True if the expression is a call to a function that returns an array, + and if we have decided not to allocate temporary data for that array. */ + unsigned int inline_noncopying_intrinsic : 1, is_boz : 1; + + /* Sometimes, when an error has been emitted, it is necessary to prevent + it from recurring. */ + unsigned int error : 1; + + /* Mark and expression where a user operator has been substituted by + a function call in interface.c(gfc_extend_expr). */ + unsigned int user_operator : 1; + + /* Used to quickly find a given constructor by its offset. */ + splay_tree con_by_offset; + + /* If an expression comes from a Hollerith constant or compile-time + evaluation of a transfer statement, it may have a prescribed target- + memory representation, and these cannot always be backformed from + the value. */ + struct + { + int length; + char *string; + } + representation; + + union + { + int logical; + + io_kind iokind; + + mpz_t integer; + + mpfr_t real; + + struct + { + mpfr_t r, i; + } + complex; + + struct + { + gfc_intrinsic_op op; + gfc_user_op *uop; + struct gfc_expr *op1, *op2; + } + op; + + struct + { + gfc_actual_arglist *actual; + const char *name; /* Points to the ultimate name of the function */ + gfc_intrinsic_sym *isym; + gfc_symbol *esym; + } + function; + + struct + { + gfc_actual_arglist* actual; + gfc_typebound_proc* tbp; + const char* name; + } + compcall; + + struct + { + int length; + gfc_char_t *string; + } + character; + + struct gfc_constructor *constructor; + } + value; + +} +gfc_expr; + + +#define gfc_get_shape(rank) ((mpz_t *) gfc_getmem((rank)*sizeof(mpz_t))) + +/* Structures for information associated with different kinds of + numbers. The first set of integer parameters define all there is + to know about a particular kind. The rest of the elements are + computed from the first elements. */ + +typedef struct +{ + /* Values really representable by the target. */ + mpz_t huge, pedantic_min_int, min_int; + + int kind, radix, digits, bit_size, range; + + /* True if the C type of the given name maps to this precision. + Note that more than one bit can be set. */ + unsigned int c_char : 1; + unsigned int c_short : 1; + unsigned int c_int : 1; + unsigned int c_long : 1; + unsigned int c_long_long : 1; +} +gfc_integer_info; + +extern gfc_integer_info gfc_integer_kinds[]; + + +typedef struct +{ + int kind, bit_size; + + /* True if the C++ type bool, C99 type _Bool, maps to this precision. */ + unsigned int c_bool : 1; +} +gfc_logical_info; + +extern gfc_logical_info gfc_logical_kinds[]; + + +typedef struct +{ + mpfr_t epsilon, huge, tiny, subnormal; + int kind, radix, digits, min_exponent, max_exponent; + int range, precision; + + /* The precision of the type as reported by GET_MODE_PRECISION. */ + int mode_precision; + + /* True if the C type of the given name maps to this precision. + Note that more than one bit can be set. */ + unsigned int c_float : 1; + unsigned int c_double : 1; + unsigned int c_long_double : 1; +} +gfc_real_info; + +extern gfc_real_info gfc_real_kinds[]; + +typedef struct +{ + int kind, bit_size; + const char *name; +} +gfc_character_info; + +extern gfc_character_info gfc_character_kinds[]; + + +/* Equivalence structures. Equivalent lvalues are linked along the + *eq pointer, equivalence sets are strung along the *next node. */ +typedef struct gfc_equiv +{ + struct gfc_equiv *next, *eq; + gfc_expr *expr; + const char *module; + int used; +} +gfc_equiv; + +#define gfc_get_equiv() XCNEW (gfc_equiv) + +/* Holds a single equivalence member after processing. */ +typedef struct gfc_equiv_info +{ + gfc_symbol *sym; + HOST_WIDE_INT offset; + HOST_WIDE_INT length; + struct gfc_equiv_info *next; +} gfc_equiv_info; + +/* Holds equivalence groups, after they have been processed. */ +typedef struct gfc_equiv_list +{ + gfc_equiv_info *equiv; + struct gfc_equiv_list *next; +} gfc_equiv_list; + +/* gfc_case stores the selector list of a case statement. The *low + and *high pointers can point to the same expression in the case of + a single value. If *high is NULL, the selection is from *low + upwards, if *low is NULL the selection is *high downwards. + + This structure has separate fields to allow single and double linked + lists of CASEs at the same time. The singe linked list along the NEXT + field is a list of cases for a single CASE label. The double linked + list along the LEFT/RIGHT fields is used to detect overlap and to + build a table of the cases for SELECT constructs with a CHARACTER + case expression. */ + +typedef struct gfc_case +{ + /* Where we saw this case. */ + locus where; + int n; + + /* Case range values. If (low == high), it's a single value. If one of + the labels is NULL, it's an unbounded case. If both are NULL, this + represents the default case. */ + gfc_expr *low, *high; + + /* Next case label in the list of cases for a single CASE label. */ + struct gfc_case *next; + + /* Used for detecting overlap, and for code generation. */ + struct gfc_case *left, *right; + + /* True if this case label can never be matched. */ + int unreachable; +} +gfc_case; + +#define gfc_get_case() XCNEW (gfc_case) + + +typedef struct +{ + gfc_expr *var, *start, *end, *step; +} +gfc_iterator; + +#define gfc_get_iterator() XCNEW (gfc_iterator) + + +/* Allocation structure for ALLOCATE, DEALLOCATE and NULLIFY statements. */ + +typedef struct gfc_alloc +{ + gfc_expr *expr; + struct gfc_alloc *next; +} +gfc_alloc; + +#define gfc_get_alloc() XCNEW (gfc_alloc) + + +typedef struct +{ + gfc_expr *unit, *file, *status, *access, *form, *recl, + *blank, *position, *action, *delim, *pad, *iostat, *iomsg, *convert, + *decimal, *encoding, *round, *sign, *asynchronous, *id; + gfc_st_label *err; +} +gfc_open; + + +typedef struct +{ + gfc_expr *unit, *status, *iostat, *iomsg; + gfc_st_label *err; +} +gfc_close; + + +typedef struct +{ + gfc_expr *unit, *iostat, *iomsg; + gfc_st_label *err; +} +gfc_filepos; + + +typedef struct +{ + gfc_expr *unit, *file, *iostat, *exist, *opened, *number, *named, + *name, *access, *sequential, *direct, *form, *formatted, + *unformatted, *recl, *nextrec, *blank, *position, *action, *read, + *write, *readwrite, *delim, *pad, *iolength, *iomsg, *convert, *strm_pos, + *asynchronous, *decimal, *encoding, *pending, *round, *sign, *size, *id; + + gfc_st_label *err; + +} +gfc_inquire; + + +typedef struct +{ + gfc_expr *unit, *iostat, *iomsg, *id; + gfc_st_label *err, *end, *eor; +} +gfc_wait; + + +typedef struct +{ + gfc_expr *io_unit, *format_expr, *rec, *advance, *iostat, *size, *iomsg, + *id, *pos, *asynchronous, *blank, *decimal, *delim, *pad, *round, + *sign, *extra_comma; + + gfc_symbol *namelist; + /* A format_label of `format_asterisk' indicates the "*" format */ + gfc_st_label *format_label; + gfc_st_label *err, *end, *eor; + + locus eor_where, end_where, err_where; +} +gfc_dt; + + +typedef struct gfc_forall_iterator +{ + gfc_expr *var, *start, *end, *stride; + struct gfc_forall_iterator *next; +} +gfc_forall_iterator; + + +/* Executable statements that fill gfc_code structures. */ +typedef enum +{ + EXEC_NOP = 1, EXEC_ASSIGN, EXEC_LABEL_ASSIGN, EXEC_POINTER_ASSIGN, + EXEC_GOTO, EXEC_CALL, EXEC_COMPCALL, EXEC_ASSIGN_CALL, EXEC_RETURN, + EXEC_ENTRY, EXEC_PAUSE, EXEC_STOP, EXEC_CONTINUE, EXEC_INIT_ASSIGN, + EXEC_IF, EXEC_ARITHMETIC_IF, EXEC_DO, EXEC_DO_WHILE, EXEC_SELECT, + EXEC_FORALL, EXEC_WHERE, EXEC_CYCLE, EXEC_EXIT, + EXEC_ALLOCATE, EXEC_DEALLOCATE, + EXEC_OPEN, EXEC_CLOSE, EXEC_WAIT, + EXEC_READ, EXEC_WRITE, EXEC_IOLENGTH, EXEC_TRANSFER, EXEC_DT_END, + EXEC_BACKSPACE, EXEC_ENDFILE, EXEC_INQUIRE, EXEC_REWIND, EXEC_FLUSH, + EXEC_OMP_CRITICAL, EXEC_OMP_DO, EXEC_OMP_FLUSH, EXEC_OMP_MASTER, + EXEC_OMP_ORDERED, EXEC_OMP_PARALLEL, EXEC_OMP_PARALLEL_DO, + EXEC_OMP_PARALLEL_SECTIONS, EXEC_OMP_PARALLEL_WORKSHARE, + EXEC_OMP_SECTIONS, EXEC_OMP_SINGLE, EXEC_OMP_WORKSHARE, + EXEC_OMP_ATOMIC, EXEC_OMP_BARRIER, EXEC_OMP_END_NOWAIT, + EXEC_OMP_END_SINGLE, EXEC_OMP_TASK, EXEC_OMP_TASKWAIT +} +gfc_exec_op; + +typedef struct gfc_code +{ + gfc_exec_op op; + + struct gfc_code *block, *next; + locus loc; + + gfc_st_label *here, *label, *label2, *label3; + gfc_symtree *symtree; + gfc_expr *expr, *expr2; + /* A name isn't sufficient to identify a subroutine, we need the actual + symbol for the interface definition. + const char *sub_name; */ + gfc_symbol *resolved_sym; + gfc_intrinsic_sym *resolved_isym; + + union + { + gfc_actual_arglist *actual; + gfc_case *case_list; + gfc_iterator *iterator; + gfc_alloc *alloc_list; + gfc_open *open; + gfc_close *close; + gfc_filepos *filepos; + gfc_inquire *inquire; + gfc_wait *wait; + gfc_dt *dt; + gfc_forall_iterator *forall_iterator; + struct gfc_code *whichloop; + int stop_code; + gfc_entry_list *entry; + gfc_omp_clauses *omp_clauses; + const char *omp_name; + gfc_namelist *omp_namelist; + bool omp_bool; + } + ext; /* Points to additional structures required by statement */ + + /* Backend_decl is used for cycle and break labels in do loops, and + probably for other constructs as well, once we translate them. */ + tree backend_decl; +} +gfc_code; + + +/* Storage for DATA statements. */ +typedef struct gfc_data_variable +{ + gfc_expr *expr; + gfc_iterator iter; + struct gfc_data_variable *list, *next; +} +gfc_data_variable; + + +typedef struct gfc_data_value +{ + mpz_t repeat; + gfc_expr *expr; + struct gfc_data_value *next; +} +gfc_data_value; + + +typedef struct gfc_data +{ + gfc_data_variable *var; + gfc_data_value *value; + locus where; + + struct gfc_data *next; +} +gfc_data; + + +/* Structure for holding compile options */ +typedef struct +{ + char *module_dir; + gfc_source_form source_form; + /* Maximum line lengths in fixed- and free-form source, respectively. + When fixed_line_length or free_line_length are 0, the whole line is used, + regardless of length. + + If the user requests a fixed_line_length <7 then gfc_init_options() + emits a fatal error. */ + int fixed_line_length; + int free_line_length; + /* Maximum number of continuation lines in fixed- and free-form source, + respectively. */ + int max_continue_fixed; + int max_continue_free; + int max_identifier_length; + int dump_parse_tree; + + int warn_aliasing; + int warn_ampersand; + int warn_conversion; + int warn_implicit_interface; + int warn_line_truncation; + int warn_surprising; + int warn_tabs; + int warn_underflow; + int warn_intrinsic_shadow; + int warn_intrinsics_std; + int warn_character_truncation; + int warn_array_temp; + int warn_align_commons; + int max_errors; + + int flag_all_intrinsics; + int flag_default_double; + int flag_default_integer; + int flag_default_real; + int flag_dollar_ok; + int flag_underscoring; + int flag_second_underscore; + int flag_implicit_none; + int flag_max_stack_var_size; + int flag_max_array_constructor; + int flag_range_check; + int flag_pack_derived; + int flag_repack_arrays; + int flag_preprocessed; + int flag_f2c; + int flag_automatic; + int flag_backslash; + int flag_backtrace; + int flag_check_array_temporaries; + int flag_allow_leading_underscore; + int flag_dump_core; + int flag_external_blas; + int blas_matmul_limit; + int flag_cray_pointer; + int flag_d_lines; + int flag_openmp; + int flag_sign_zero; + int flag_module_private; + int flag_recursive; + int flag_init_local_zero; + int flag_init_integer; + int flag_init_integer_value; + int flag_init_real; + int flag_init_logical; + int flag_init_character; + char flag_init_character_value; + int flag_align_commons; + + int fpe; + + int warn_std; + int allow_std; + int fshort_enums; + int convert; + int record_marker; + int max_subrecord_length; +} +gfc_option_t; + +extern gfc_option_t gfc_option; + +/* Constructor nodes for array and structure constructors. */ +typedef struct gfc_constructor +{ + gfc_expr *expr; + gfc_iterator *iterator; + locus where; + struct gfc_constructor *next; + struct + { + mpz_t offset; /* Record the offset of array element which appears in + data statement like "data a(5)/4/". */ + gfc_component *component; /* Record the component being initialized. */ + } + n; + mpz_t repeat; /* Record the repeat number of initial values in data + statement like "data a/5*10/". */ +} +gfc_constructor; + + +typedef struct iterator_stack +{ + gfc_symtree *variable; + mpz_t value; + struct iterator_stack *prev; +} +iterator_stack; +extern iterator_stack *iter_stack; + + +/* Node in the linked list used for storing finalizer procedures. */ + +typedef struct gfc_finalizer +{ + struct gfc_finalizer* next; + locus where; /* Where the FINAL declaration occurred. */ + + /* Up to resolution, we want the gfc_symbol, there we lookup the corresponding + symtree and later need only that. This way, we can access and call the + finalizers from every context as they should be "always accessible". I + don't make this a union because we need the information whether proc_sym is + still referenced or not for dereferencing it on deleting a gfc_finalizer + structure. */ + gfc_symbol* proc_sym; + gfc_symtree* proc_tree; +} +gfc_finalizer; +#define gfc_get_finalizer() XCNEW (gfc_finalizer) + + +/************************ Function prototypes *************************/ + +/* decl.c */ +bool gfc_in_match_data (void); + +/* scanner.c */ +void gfc_scanner_done_1 (void); +void gfc_scanner_init_1 (void); + +void gfc_add_include_path (const char *, bool, bool); +void gfc_add_intrinsic_modules_path (const char *); +void gfc_release_include_path (void); +FILE *gfc_open_included_file (const char *, bool, bool); +FILE *gfc_open_intrinsic_module (const char *); + +int gfc_at_end (void); +int gfc_at_eof (void); +int gfc_at_bol (void); +int gfc_at_eol (void); +void gfc_advance_line (void); +int gfc_check_include (void); +int gfc_define_undef_line (void); + +int gfc_wide_is_printable (gfc_char_t); +int gfc_wide_is_digit (gfc_char_t); +int gfc_wide_fits_in_byte (gfc_char_t); +gfc_char_t gfc_wide_tolower (gfc_char_t); +gfc_char_t gfc_wide_toupper (gfc_char_t); +size_t gfc_wide_strlen (const gfc_char_t *); +int gfc_wide_strncasecmp (const gfc_char_t *, const char *, size_t); +gfc_char_t *gfc_wide_memset (gfc_char_t *, gfc_char_t, size_t); +char *gfc_widechar_to_char (const gfc_char_t *, int); +gfc_char_t *gfc_char_to_widechar (const char *); + +#define gfc_get_wide_string(n) XCNEWVEC (gfc_char_t, n) + +void gfc_skip_comments (void); +gfc_char_t gfc_next_char_literal (int); +gfc_char_t gfc_next_char (void); +char gfc_next_ascii_char (void); +gfc_char_t gfc_peek_char (void); +char gfc_peek_ascii_char (void); +void gfc_error_recovery (void); +void gfc_gobble_whitespace (void); +gfc_try gfc_new_file (void); +const char * gfc_read_orig_filename (const char *, const char **); + +extern gfc_source_form gfc_current_form; +extern const char *gfc_source_file; +extern locus gfc_current_locus; + +void gfc_start_source_files (void); +void gfc_end_source_files (void); + +/* misc.c */ +void *gfc_getmem (size_t) ATTRIBUTE_MALLOC; +void gfc_free (void *); +int gfc_terminal_width (void); +void gfc_clear_ts (gfc_typespec *); +FILE *gfc_open_file (const char *); +const char *gfc_basic_typename (bt); +const char *gfc_typename (gfc_typespec *); +const char *gfc_op2string (gfc_intrinsic_op); +const char *gfc_code2string (const mstring *, int); +int gfc_string2code (const mstring *, const char *); +const char *gfc_intent_string (sym_intent); + +void gfc_init_1 (void); +void gfc_init_2 (void); +void gfc_done_1 (void); +void gfc_done_2 (void); + +int get_c_kind (const char *, CInteropKind_t *); + +/* options.c */ +unsigned int gfc_init_options (unsigned int, const char **); +int gfc_handle_option (size_t, const char *, int); +bool gfc_post_options (const char **); + +/* iresolve.c */ +const char * gfc_get_string (const char *, ...) ATTRIBUTE_PRINTF_1; +bool gfc_find_sym_in_expr (gfc_symbol *, gfc_expr *); + +/* error.c */ + +typedef struct gfc_error_buf +{ + int flag; + size_t allocated, index; + char *message; +} gfc_error_buf; + +void gfc_error_init_1 (void); +void gfc_buffer_error (int); + +const char *gfc_print_wide_char (gfc_char_t); + +void gfc_warning (const char *, ...) ATTRIBUTE_GCC_GFC(1,2); +void gfc_warning_now (const char *, ...) ATTRIBUTE_GCC_GFC(1,2); +void gfc_clear_warning (void); +void gfc_warning_check (void); + +void gfc_error (const char *, ...) ATTRIBUTE_GCC_GFC(1,2); +void gfc_error_now (const char *, ...) ATTRIBUTE_GCC_GFC(1,2); +void gfc_fatal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1,2); +void gfc_internal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1,2); +void gfc_clear_error (void); +int gfc_error_check (void); +int gfc_error_flag_test (void); + +notification gfc_notification_std (int); +gfc_try gfc_notify_std (int, const char *, ...) ATTRIBUTE_GCC_GFC(2,3); + +/* A general purpose syntax error. */ +#define gfc_syntax_error(ST) \ + gfc_error ("Syntax error in %s statement at %C", gfc_ascii_statement (ST)); + +void gfc_push_error (gfc_error_buf *); +void gfc_pop_error (gfc_error_buf *); +void gfc_free_error (gfc_error_buf *); + +void gfc_get_errors (int *, int *); + +/* arith.c */ +void gfc_arith_init_1 (void); +void gfc_arith_done_1 (void); +gfc_expr *gfc_enum_initializer (gfc_expr *, locus); +arith gfc_check_integer_range (mpz_t p, int kind); +bool gfc_check_character_range (gfc_char_t, int); + +/* trans-types.c */ +gfc_try gfc_check_any_c_kind (gfc_typespec *); +int gfc_validate_kind (bt, int, bool); +extern int gfc_index_integer_kind; +extern int gfc_default_integer_kind; +extern int gfc_max_integer_kind; +extern int gfc_default_real_kind; +extern int gfc_default_double_kind; +extern int gfc_default_character_kind; +extern int gfc_default_logical_kind; +extern int gfc_default_complex_kind; +extern int gfc_c_int_kind; +extern int gfc_intio_kind; +extern int gfc_charlen_int_kind; +extern int gfc_numeric_storage_size; +extern int gfc_character_storage_size; + +/* symbol.c */ +void gfc_clear_new_implicit (void); +gfc_try gfc_add_new_implicit_range (int, int); +gfc_try gfc_merge_new_implicit (gfc_typespec *); +void gfc_set_implicit_none (void); +void gfc_check_function_type (gfc_namespace *); +bool gfc_is_intrinsic_typename (const char *); + +gfc_typespec *gfc_get_default_type (gfc_symbol *, gfc_namespace *); +gfc_try gfc_set_default_type (gfc_symbol *, int, gfc_namespace *); + +void gfc_set_sym_referenced (gfc_symbol *); + +gfc_try gfc_add_attribute (symbol_attribute *, locus *); +gfc_try gfc_add_allocatable (symbol_attribute *, locus *); +gfc_try gfc_add_dimension (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_external (symbol_attribute *, locus *); +gfc_try gfc_add_intrinsic (symbol_attribute *, locus *); +gfc_try gfc_add_optional (symbol_attribute *, locus *); +gfc_try gfc_add_pointer (symbol_attribute *, locus *); +gfc_try gfc_add_cray_pointer (symbol_attribute *, locus *); +gfc_try gfc_add_cray_pointee (symbol_attribute *, locus *); +gfc_try gfc_mod_pointee_as (gfc_array_spec *); +gfc_try gfc_add_protected (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_result (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_save (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_threadprivate (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_saved_common (symbol_attribute *, locus *); +gfc_try gfc_add_target (symbol_attribute *, locus *); +gfc_try gfc_add_dummy (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_generic (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_common (symbol_attribute *, locus *); +gfc_try gfc_add_in_common (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_in_equivalence (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_data (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_in_namelist (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_sequence (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_elemental (symbol_attribute *, locus *); +gfc_try gfc_add_pure (symbol_attribute *, locus *); +gfc_try gfc_add_recursive (symbol_attribute *, locus *); +gfc_try gfc_add_function (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_subroutine (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_volatile (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_proc (symbol_attribute *attr, const char *name, locus *where); +gfc_try gfc_add_abstract (symbol_attribute* attr, locus* where); + +gfc_try gfc_add_access (symbol_attribute *, gfc_access, const char *, locus *); +gfc_try gfc_add_is_bind_c (symbol_attribute *, const char *, locus *, int); +gfc_try gfc_add_extension (symbol_attribute *, locus *); +gfc_try gfc_add_value (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_flavor (symbol_attribute *, sym_flavor, const char *, locus *); +gfc_try gfc_add_entry (symbol_attribute *, const char *, locus *); +gfc_try gfc_add_procedure (symbol_attribute *, procedure_type, + const char *, locus *); +gfc_try gfc_add_intent (symbol_attribute *, sym_intent, locus *); +gfc_try gfc_add_explicit_interface (gfc_symbol *, ifsrc, + gfc_formal_arglist *, locus *); +gfc_try gfc_add_type (gfc_symbol *, gfc_typespec *, locus *); + +void gfc_clear_attr (symbol_attribute *); +gfc_try gfc_missing_attr (symbol_attribute *, locus *); +gfc_try gfc_copy_attr (symbol_attribute *, symbol_attribute *, locus *); + +gfc_try gfc_add_component (gfc_symbol *, const char *, gfc_component **); +gfc_symbol *gfc_use_derived (gfc_symbol *); +gfc_symtree *gfc_use_derived_tree (gfc_symtree *); +gfc_component *gfc_find_component (gfc_symbol *, const char *, bool, bool); + +gfc_st_label *gfc_get_st_label (int); +void gfc_free_st_label (gfc_st_label *); +void gfc_define_st_label (gfc_st_label *, gfc_sl_type, locus *); +gfc_try gfc_reference_st_label (gfc_st_label *, gfc_sl_type); + +gfc_expr * gfc_lval_expr_from_sym (gfc_symbol *); + +gfc_namespace *gfc_get_namespace (gfc_namespace *, int); +gfc_symtree *gfc_new_symtree (gfc_symtree **, const char *); +gfc_symtree *gfc_find_symtree (gfc_symtree *, const char *); +void gfc_delete_symtree (gfc_symtree **, const char *); +gfc_symtree *gfc_get_unique_symtree (gfc_namespace *); +gfc_user_op *gfc_get_uop (const char *); +gfc_user_op *gfc_find_uop (const char *, gfc_namespace *); +void gfc_free_symbol (gfc_symbol *); +gfc_symbol *gfc_new_symbol (const char *, gfc_namespace *); +int gfc_find_symbol (const char *, gfc_namespace *, int, gfc_symbol **); +int gfc_find_sym_tree (const char *, gfc_namespace *, int, gfc_symtree **); +int gfc_get_symbol (const char *, gfc_namespace *, gfc_symbol **); +gfc_try verify_c_interop (gfc_typespec *); +gfc_try verify_c_interop_param (gfc_symbol *); +gfc_try verify_bind_c_sym (gfc_symbol *, gfc_typespec *, int, gfc_common_head *); +gfc_try verify_bind_c_derived_type (gfc_symbol *); +gfc_try verify_com_block_vars_c_interop (gfc_common_head *); +void generate_isocbinding_symbol (const char *, iso_c_binding_symbol, const char *); +gfc_symbol *get_iso_c_sym (gfc_symbol *, char *, char *, int); +int gfc_get_sym_tree (const char *, gfc_namespace *, gfc_symtree **); +int gfc_get_ha_symbol (const char *, gfc_symbol **); +int gfc_get_ha_sym_tree (const char *, gfc_symtree **); + +int gfc_symbols_could_alias (gfc_symbol *, gfc_symbol *); + +void gfc_undo_symbols (void); +void gfc_commit_symbols (void); +void gfc_commit_symbol (gfc_symbol *); +void gfc_free_charlen (gfc_charlen *, gfc_charlen *); +void gfc_free_namespace (gfc_namespace *); + +void gfc_symbol_init_2 (void); +void gfc_symbol_done_2 (void); + +void gfc_traverse_symtree (gfc_symtree *, void (*)(gfc_symtree *)); +void gfc_traverse_ns (gfc_namespace *, void (*)(gfc_symbol *)); +void gfc_traverse_user_op (gfc_namespace *, void (*)(gfc_user_op *)); +void gfc_save_all (gfc_namespace *); + +void gfc_symbol_state (void); + +gfc_gsymbol *gfc_get_gsymbol (const char *); +gfc_gsymbol *gfc_find_gsymbol (gfc_gsymbol *, const char *); + +gfc_symbol* gfc_get_derived_super_type (gfc_symbol*); +gfc_symtree* gfc_find_typebound_proc (gfc_symbol*, gfc_try*, const char*, bool); + +void copy_formal_args (gfc_symbol *dest, gfc_symbol *src); + +void gfc_free_finalizer (gfc_finalizer *el); /* Needed in resolve.c, too */ + +gfc_try gfc_check_symbol_typed (gfc_symbol*, gfc_namespace*, bool, locus); + +/* intrinsic.c */ +extern int gfc_init_expr; + +/* Given a symbol that we have decided is intrinsic, mark it as such + by placing it into a special module that is otherwise impossible to + read or write. */ + +#define gfc_intrinsic_symbol(SYM) SYM->module = gfc_get_string ("(intrinsic)") + +void gfc_intrinsic_init_1 (void); +void gfc_intrinsic_done_1 (void); + +char gfc_type_letter (bt); +gfc_symbol * gfc_get_intrinsic_sub_symbol (const char *); +gfc_try gfc_convert_type (gfc_expr *, gfc_typespec *, int); +gfc_try gfc_convert_type_warn (gfc_expr *, gfc_typespec *, int, int); +gfc_try gfc_convert_chartype (gfc_expr *, gfc_typespec *); +int gfc_generic_intrinsic (const char *); +int gfc_specific_intrinsic (const char *); +bool gfc_is_intrinsic (gfc_symbol*, int, locus); +int gfc_intrinsic_actual_ok (const char *, const bool); +gfc_intrinsic_sym *gfc_find_function (const char *); +gfc_intrinsic_sym *gfc_find_subroutine (const char *); + +match gfc_intrinsic_func_interface (gfc_expr *, int); +match gfc_intrinsic_sub_interface (gfc_code *, int); + +void gfc_warn_intrinsic_shadow (const gfc_symbol*, bool, bool); +gfc_try gfc_check_intrinsic_standard (const gfc_intrinsic_sym*, const char**, + bool, locus); + +/* match.c -- FIXME */ +void gfc_free_iterator (gfc_iterator *, int); +void gfc_free_forall_iterator (gfc_forall_iterator *); +void gfc_free_alloc_list (gfc_alloc *); +void gfc_free_namelist (gfc_namelist *); +void gfc_free_equiv (gfc_equiv *); +void gfc_free_data (gfc_data *); +void gfc_free_case_list (gfc_case *); + +/* matchexp.c -- FIXME too? */ +gfc_expr *gfc_get_parentheses (gfc_expr *); + +/* openmp.c */ +void gfc_free_omp_clauses (gfc_omp_clauses *); +void gfc_resolve_omp_directive (gfc_code *, gfc_namespace *); +void gfc_resolve_do_iterator (gfc_code *, gfc_symbol *); +void gfc_resolve_omp_parallel_blocks (gfc_code *, gfc_namespace *); +void gfc_resolve_omp_do_blocks (gfc_code *, gfc_namespace *); + +/* expr.c */ +void gfc_free_actual_arglist (gfc_actual_arglist *); +gfc_actual_arglist *gfc_copy_actual_arglist (gfc_actual_arglist *); +const char *gfc_extract_int (gfc_expr *, int *); +gfc_expr *gfc_expr_to_initialize (gfc_expr *); +bool is_subref_array (gfc_expr *); + +gfc_expr *gfc_build_conversion (gfc_expr *); +void gfc_free_ref_list (gfc_ref *); +void gfc_type_convert_binary (gfc_expr *); +int gfc_is_constant_expr (gfc_expr *); +gfc_try gfc_simplify_expr (gfc_expr *, int); +int gfc_has_vector_index (gfc_expr *); + +gfc_expr *gfc_get_expr (void); +void gfc_free_expr (gfc_expr *); +void gfc_replace_expr (gfc_expr *, gfc_expr *); +gfc_expr *gfc_int_expr (int); +gfc_expr *gfc_logical_expr (int, locus *); +mpz_t *gfc_copy_shape (mpz_t *, int); +mpz_t *gfc_copy_shape_excluding (mpz_t *, int, gfc_expr *); +gfc_expr *gfc_copy_expr (gfc_expr *); +gfc_ref* gfc_copy_ref (gfc_ref*); + +gfc_try gfc_specification_expr (gfc_expr *); + +int gfc_numeric_ts (gfc_typespec *); +int gfc_kind_max (gfc_expr *, gfc_expr *); + +gfc_try gfc_check_conformance (const char *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_assign (gfc_expr *, gfc_expr *, int); +gfc_try gfc_check_pointer_assign (gfc_expr *, gfc_expr *); +gfc_try gfc_check_assign_symbol (gfc_symbol *, gfc_expr *); + +gfc_expr *gfc_default_initializer (gfc_typespec *); +gfc_expr *gfc_get_variable_expr (gfc_symtree *); + +bool gfc_traverse_expr (gfc_expr *, gfc_symbol *, + bool (*)(gfc_expr *, gfc_symbol *, int*), + int); +void gfc_expr_set_symbols_referenced (gfc_expr *); +gfc_try gfc_expr_check_typed (gfc_expr*, gfc_namespace*, bool); +void gfc_expr_replace_symbols (gfc_expr *, gfc_symbol *); + +/* st.c */ +extern gfc_code new_st; + +void gfc_clear_new_st (void); +gfc_code *gfc_get_code (void); +gfc_code *gfc_append_code (gfc_code *, gfc_code *); +void gfc_free_statement (gfc_code *); +void gfc_free_statements (gfc_code *); + +/* resolve.c */ +gfc_try gfc_resolve_expr (gfc_expr *); +void gfc_resolve (gfc_namespace *); +void gfc_resolve_blocks (gfc_code *, gfc_namespace *); +int gfc_impure_variable (gfc_symbol *); +int gfc_pure (gfc_symbol *); +int gfc_elemental (gfc_symbol *); +gfc_try gfc_resolve_iterator (gfc_iterator *, bool); +gfc_try find_forall_index (gfc_expr *, gfc_symbol *, int); +gfc_try gfc_resolve_index (gfc_expr *, int); +gfc_try gfc_resolve_dim_arg (gfc_expr *); +int gfc_is_formal_arg (void); +void gfc_resolve_substring_charlen (gfc_expr *); +match gfc_iso_c_sub_interface(gfc_code *, gfc_symbol *); + + +/* array.c */ +void gfc_free_array_spec (gfc_array_spec *); +gfc_array_ref *gfc_copy_array_ref (gfc_array_ref *); + +gfc_try gfc_set_array_spec (gfc_symbol *, gfc_array_spec *, locus *); +gfc_array_spec *gfc_copy_array_spec (gfc_array_spec *); +gfc_try gfc_resolve_array_spec (gfc_array_spec *, int); + +int gfc_compare_array_spec (gfc_array_spec *, gfc_array_spec *); + +gfc_expr *gfc_start_constructor (bt, int, locus *); +void gfc_append_constructor (gfc_expr *, gfc_expr *); +void gfc_free_constructor (gfc_constructor *); +void gfc_simplify_iterator_var (gfc_expr *); +gfc_try gfc_expand_constructor (gfc_expr *); +int gfc_constant_ac (gfc_expr *); +int gfc_expanded_ac (gfc_expr *); +gfc_try gfc_resolve_character_array_constructor (gfc_expr *); +gfc_try gfc_resolve_array_constructor (gfc_expr *); +gfc_try gfc_check_constructor_type (gfc_expr *); +gfc_try gfc_check_iter_variable (gfc_expr *); +gfc_try gfc_check_constructor (gfc_expr *, gfc_try (*)(gfc_expr *)); +gfc_constructor *gfc_copy_constructor (gfc_constructor *); +gfc_expr *gfc_get_array_element (gfc_expr *, int); +gfc_try gfc_array_size (gfc_expr *, mpz_t *); +gfc_try gfc_array_dimen_size (gfc_expr *, int, mpz_t *); +gfc_try gfc_array_ref_shape (gfc_array_ref *, mpz_t *); +gfc_array_ref *gfc_find_array_ref (gfc_expr *); +void gfc_insert_constructor (gfc_expr *, gfc_constructor *); +gfc_constructor *gfc_get_constructor (void); +tree gfc_conv_array_initializer (tree type, gfc_expr *); +gfc_try spec_size (gfc_array_spec *, mpz_t *); +gfc_try spec_dimen_size (gfc_array_spec *, int, mpz_t *); +int gfc_is_compile_time_shape (gfc_array_spec *); + +gfc_try gfc_ref_dimen_size (gfc_array_ref *, int dimen, mpz_t *); + + +/* interface.c -- FIXME: some of these should be in symbol.c */ +void gfc_free_interface (gfc_interface *); +int gfc_compare_derived_types (gfc_symbol *, gfc_symbol *); +int gfc_compare_types (gfc_typespec *, gfc_typespec *); +int gfc_compare_interfaces (gfc_symbol*, gfc_symbol*, int); +void gfc_check_interfaces (gfc_namespace *); +void gfc_procedure_use (gfc_symbol *, gfc_actual_arglist **, locus *); +gfc_symbol *gfc_search_interface (gfc_interface *, int, + gfc_actual_arglist **); +gfc_try gfc_extend_expr (gfc_expr *); +void gfc_free_formal_arglist (gfc_formal_arglist *); +gfc_try gfc_extend_assign (gfc_code *, gfc_namespace *); +gfc_try gfc_add_interface (gfc_symbol *); +gfc_interface *gfc_current_interface_head (void); +void gfc_set_current_interface_head (gfc_interface *); +gfc_symtree* gfc_find_sym_in_symtree (gfc_symbol*); +bool gfc_arglist_matches_symbol (gfc_actual_arglist**, gfc_symbol*); + +/* io.c */ +extern gfc_st_label format_asterisk; + +void gfc_free_open (gfc_open *); +gfc_try gfc_resolve_open (gfc_open *); +void gfc_free_close (gfc_close *); +gfc_try gfc_resolve_close (gfc_close *); +void gfc_free_filepos (gfc_filepos *); +gfc_try gfc_resolve_filepos (gfc_filepos *); +void gfc_free_inquire (gfc_inquire *); +gfc_try gfc_resolve_inquire (gfc_inquire *); +void gfc_free_dt (gfc_dt *); +gfc_try gfc_resolve_dt (gfc_dt *); +void gfc_free_wait (gfc_wait *); +gfc_try gfc_resolve_wait (gfc_wait *); + +/* module.c */ +void gfc_module_init_2 (void); +void gfc_module_done_2 (void); +void gfc_dump_module (const char *, int); +bool gfc_check_access (gfc_access, gfc_access); +void gfc_free_use_stmts (gfc_use_list *); + +/* primary.c */ +symbol_attribute gfc_variable_attr (gfc_expr *, gfc_typespec *); +symbol_attribute gfc_expr_attr (gfc_expr *); +match gfc_match_rvalue (gfc_expr **); +match gfc_match_varspec (gfc_expr*, int, bool); +int gfc_check_digit (char, int); + +/* trans.c */ +void gfc_generate_code (gfc_namespace *); +void gfc_generate_module_code (gfc_namespace *); + +/* bbt.c */ +typedef int (*compare_fn) (void *, void *); +void gfc_insert_bbt (void *, void *, compare_fn); +void gfc_delete_bbt (void *, void *, compare_fn); + +/* dump-parse-tree.c */ +void gfc_dump_parse_tree (gfc_namespace *, FILE *); + +/* parse.c */ +gfc_try gfc_parse_file (void); +void gfc_global_used (gfc_gsymbol *, locus *); + +/* dependency.c */ +int gfc_dep_compare_expr (gfc_expr *, gfc_expr *); +int gfc_is_data_pointer (gfc_expr *); + +/* check.c */ +gfc_try gfc_check_same_strlen (const gfc_expr*, const gfc_expr*, const char*); + +#endif /* GCC_GFORTRAN_H */ diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortran.info b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortran.info new file mode 100644 index 0000000000..ca815d03e7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortran.info @@ -0,0 +1,15040 @@ +This is doc/gfortran.info, produced by makeinfo version 4.12 from +/usr/src/gcc-4.4.0/gcc-4.4.0/gcc/fortran/gfortran.texi. + +Copyright (C) 1999-2008 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with the +Invariant Sections being "Funding Free Software", the Front-Cover Texts +being (a) (see below), and with the Back-Cover Texts being (b) (see +below). A copy of the license is included in the section entitled "GNU +Free Documentation License". + + (a) The FSF's Front-Cover Text is: + + A GNU Manual + + (b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU +software. Copies published by the Free Software Foundation raise +funds for GNU development. + +INFO-DIR-SECTION Software development +START-INFO-DIR-ENTRY +* gfortran: (gfortran). The GNU Fortran Compiler. +END-INFO-DIR-ENTRY + This file documents the use and the internals of the GNU Fortran +compiler, (`gfortran'). + + Published by the Free Software Foundation 51 Franklin Street, Fifth +Floor Boston, MA 02110-1301 USA + + Copyright (C) 1999-2008 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with the +Invariant Sections being "Funding Free Software", the Front-Cover Texts +being (a) (see below), and with the Back-Cover Texts being (b) (see +below). A copy of the license is included in the section entitled "GNU +Free Documentation License". + + (a) The FSF's Front-Cover Text is: + + A GNU Manual + + (b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU +software. Copies published by the Free Software Foundation raise +funds for GNU development. + + +File: gfortran.info, Node: Top, Next: Introduction, Up: (dir) + +Introduction +************ + +This manual documents the use of `gfortran', the GNU Fortran compiler. +You can find in this manual how to invoke `gfortran', as well as its +features and incompatibilities. + +* Menu: + +* Introduction:: + +Part I: Invoking GNU Fortran +* Invoking GNU Fortran:: Command options supported by `gfortran'. +* Runtime:: Influencing runtime behavior with environment variables. + +Part II: Language Reference +* Fortran 2003 and 2008 status:: Fortran 2003 and 2008 features supported by GNU Fortran. +* Compiler Characteristics:: KIND type parameters supported. +* Extensions:: Language extensions implemented by GNU Fortran. +* Intrinsic Procedures:: Intrinsic procedures supported by GNU Fortran. +* Intrinsic Modules:: Intrinsic modules supported by GNU Fortran. + +* Contributing:: How you can help. +* Copying:: GNU General Public License says + how you can copy and share GNU Fortran. +* GNU Free Documentation License:: + How you can copy and share this manual. +* Funding:: How to help assure continued work for free software. +* Option Index:: Index of command line options +* Keyword Index:: Index of concepts + + +File: gfortran.info, Node: Introduction, Next: Invoking GNU Fortran, Prev: Top, Up: Top + +1 Introduction +************** + +The GNU Fortran compiler front end was designed initially as a free +replacement for, or alternative to, the unix `f95' command; `gfortran' +is the command you'll use to invoke the compiler. + +* Menu: + +* About GNU Fortran:: What you should know about the GNU Fortran compiler. +* GNU Fortran and GCC:: You can compile Fortran, C, or other programs. +* Preprocessing and conditional compilation:: The Fortran preprocessor +* GNU Fortran and G77:: Why we chose to start from scratch. +* Project Status:: Status of GNU Fortran, roadmap, proposed extensions. +* Standards:: Standards supported by GNU Fortran. + + +File: gfortran.info, Node: About GNU Fortran, Next: GNU Fortran and GCC, Up: Introduction + +1.1 About GNU Fortran +===================== + +The GNU Fortran compiler is still in an early state of development. It +can generate code for most constructs and expressions, but much work +remains to be done. + + When the GNU Fortran compiler is finished, it will do everything you +expect from any decent compiler: + + * Read a user's program, stored in a file and containing + instructions written in Fortran 77, Fortran 90, Fortran 95, + Fortran 2003 or Fortran 2008. This file contains "source code". + + * Translate the user's program into instructions a computer can + carry out more quickly than it takes to translate the instructions + in the first place. The result after compilation of a program is + "machine code", code designed to be efficiently translated and + processed by a machine such as your computer. Humans usually + aren't as good writing machine code as they are at writing Fortran + (or C++, Ada, or Java), because it is easy to make tiny mistakes + writing machine code. + + * Provide the user with information about the reasons why the + compiler is unable to create a binary from the source code. + Usually this will be the case if the source code is flawed. The + Fortran 90 standard requires that the compiler can point out + mistakes to the user. An incorrect usage of the language causes + an "error message". + + The compiler will also attempt to diagnose cases where the user's + program contains a correct usage of the language, but instructs + the computer to do something questionable. This kind of + diagnostics message is called a "warning message". + + * Provide optional information about the translation passes from the + source code to machine code. This can help a user of the compiler + to find the cause of certain bugs which may not be obvious in the + source code, but may be more easily found at a lower level + compiler output. It also helps developers to find bugs in the + compiler itself. + + * Provide information in the generated machine code that can make it + easier to find bugs in the program (using a debugging tool, called + a "debugger", such as the GNU Debugger `gdb'). + + * Locate and gather machine code already generated to perform + actions requested by statements in the user's program. This + machine code is organized into "modules" and is located and + "linked" to the user program. + + The GNU Fortran compiler consists of several components: + + * A version of the `gcc' command (which also might be installed as + the system's `cc' command) that also understands and accepts + Fortran source code. The `gcc' command is the "driver" program for + all the languages in the GNU Compiler Collection (GCC); With `gcc', + you can compile the source code of any language for which a front + end is available in GCC. + + * The `gfortran' command itself, which also might be installed as the + system's `f95' command. `gfortran' is just another driver program, + but specifically for the Fortran compiler only. The difference + with `gcc' is that `gfortran' will automatically link the correct + libraries to your program. + + * A collection of run-time libraries. These libraries contain the + machine code needed to support capabilities of the Fortran + language that are not directly provided by the machine code + generated by the `gfortran' compilation phase, such as intrinsic + functions and subroutines, and routines for interaction with files + and the operating system. + + * The Fortran compiler itself, (`f951'). This is the GNU Fortran + parser and code generator, linked to and interfaced with the GCC + backend library. `f951' "translates" the source code to assembler + code. You would typically not use this program directly; instead, + the `gcc' or `gfortran' driver programs will call it for you. + + +File: gfortran.info, Node: GNU Fortran and GCC, Next: Preprocessing and conditional compilation, Prev: About GNU Fortran, Up: Introduction + +1.2 GNU Fortran and GCC +======================= + +GNU Fortran is a part of GCC, the "GNU Compiler Collection". GCC +consists of a collection of front ends for various languages, which +translate the source code into a language-independent form called +"GENERIC". This is then processed by a common middle end which +provides optimization, and then passed to one of a collection of back +ends which generate code for different computer architectures and +operating systems. + + Functionally, this is implemented with a driver program (`gcc') +which provides the command-line interface for the compiler. It calls +the relevant compiler front-end program (e.g., `f951' for Fortran) for +each file in the source code, and then calls the assembler and linker +as appropriate to produce the compiled output. In a copy of GCC which +has been compiled with Fortran language support enabled, `gcc' will +recognize files with `.f', `.for', `.ftn', `.f90', `.f95', `.f03' and +`.f08' extensions as Fortran source code, and compile it accordingly. A +`gfortran' driver program is also provided, which is identical to `gcc' +except that it automatically links the Fortran runtime libraries into +the compiled program. + + Source files with `.f', `.for', `.fpp', `.ftn', `.F', `.FOR', +`.FPP', and `.FTN' extensions are treated as fixed form. Source files +with `.f90', `.f95', `.f03', `.f08', `.F90', `.F95', `.F03' and `.F08' +extensions are treated as free form. The capitalized versions of +either form are run through preprocessing. Source files with the lower +case `.fpp' extension are also run through preprocessing. + + This manual specifically documents the Fortran front end, which +handles the programming language's syntax and semantics. The aspects +of GCC which relate to the optimization passes and the back-end code +generation are documented in the GCC manual; see *note Introduction: +(gcc)Top. The two manuals together provide a complete reference for +the GNU Fortran compiler. + + +File: gfortran.info, Node: Preprocessing and conditional compilation, Next: GNU Fortran and G77, Prev: GNU Fortran and GCC, Up: Introduction + +1.3 Preprocessing and conditional compilation +============================================= + +Many Fortran compilers including GNU Fortran allow passing the source +code through a C preprocessor (CPP; sometimes also called the Fortran +preprocessor, FPP) to allow for conditional compilation. In the case of +GNU Fortran, this is the GNU C Preprocessor in the traditional mode. On +systems with case-preserving file names, the preprocessor is +automatically invoked if the filename extension is `.F', `.FOR', +`.FTN', `.fpp', `.FPP', `.F90', `.F95', `.F03' or `.F08'. To manually +invoke the preprocessor on any file, use `-cpp', to disable +preprocessing on files where the preprocessor is run automatically, use +`-nocpp'. + + If a preprocessed file includes another file with the Fortran +`INCLUDE' statement, the included file is not preprocessed. To +preprocess included files, use the equivalent preprocessor statement +`#include'. + + If GNU Fortran invokes the preprocessor, `__GFORTRAN__' is defined +and `__GNUC__', `__GNUC_MINOR__' and `__GNUC_PATCHLEVEL__' can be used +to determine the version of the compiler. See *note Overview: (cpp)Top. +for details. + + While CPP is the de-facto standard for preprocessing Fortran code, +Part 3 of the Fortran 95 standard (ISO/IEC 1539-3:1998) defines +Conditional Compilation, which is not widely used and not directly +supported by the GNU Fortran compiler. You can use the program coco to +preprocess such files (`http://users.erols.com/dnagle/coco.html'). + + +File: gfortran.info, Node: GNU Fortran and G77, Next: Project Status, Prev: Preprocessing and conditional compilation, Up: Introduction + +1.4 GNU Fortran and G77 +======================= + +The GNU Fortran compiler is the successor to `g77', the Fortran 77 +front end included in GCC prior to version 4. It is an entirely new +program that has been designed to provide Fortran 95 support and +extensibility for future Fortran language standards, as well as +providing backwards compatibility for Fortran 77 and nearly all of the +GNU language extensions supported by `g77'. + + +File: gfortran.info, Node: Project Status, Next: Standards, Prev: GNU Fortran and G77, Up: Introduction + +1.5 Project Status +================== + + As soon as `gfortran' can parse all of the statements correctly, + it will be in the "larva" state. When we generate code, the + "puppa" state. When `gfortran' is done, we'll see if it will be a + beautiful butterfly, or just a big bug.... + + -Andy Vaught, April 2000 + + The start of the GNU Fortran 95 project was announced on the GCC +homepage in March 18, 2000 (even though Andy had already been working +on it for a while, of course). + + The GNU Fortran compiler is able to compile nearly all +standard-compliant Fortran 95, Fortran 90, and Fortran 77 programs, +including a number of standard and non-standard extensions, and can be +used on real-world programs. In particular, the supported extensions +include OpenMP, Cray-style pointers, and several Fortran 2003 and +Fortran 2008 features such as enumeration, stream I/O, and some of the +enhancements to allocatable array support from TR 15581. However, it is +still under development and has a few remaining rough edges. + + At present, the GNU Fortran compiler passes the NIST Fortran 77 Test +Suite (http://www.fortran-2000.com/ArnaudRecipes/fcvs21_f95.html), and +produces acceptable results on the LAPACK Test Suite +(http://www.netlib.org/lapack/faq.html#1.21). It also provides +respectable performance on the Polyhedron Fortran compiler benchmarks +(http://www.polyhedron.com/pb05.html) and the Livermore Fortran Kernels +test +(http://www.llnl.gov/asci_benchmarks/asci/limited/lfk/README.html). It +has been used to compile a number of large real-world programs, +including the HIRLAM weather-forecasting code +(http://mysite.verizon.net/serveall/moene.pdf) and the Tonto quantum +chemistry package (http://www.theochem.uwa.edu.au/tonto/); see +`http://gcc.gnu.org/wiki/GfortranApps' for an extended list. + + Among other things, the GNU Fortran compiler is intended as a +replacement for G77. At this point, nearly all programs that could be +compiled with G77 can be compiled with GNU Fortran, although there are +a few minor known regressions. + + The primary work remaining to be done on GNU Fortran falls into three +categories: bug fixing (primarily regarding the treatment of invalid +code and providing useful error messages), improving the compiler +optimizations and the performance of compiled code, and extending the +compiler to support future standards--in particular, Fortran 2003. + + +File: gfortran.info, Node: Standards, Prev: Project Status, Up: Introduction + +1.6 Standards +============= + +The GNU Fortran compiler implements ISO/IEC 1539:1997 (Fortran 95). As +such, it can also compile essentially all standard-compliant Fortran 90 +and Fortran 77 programs. It also supports the ISO/IEC TR-15581 +enhancements to allocatable arrays, and the OpenMP Application Program +Interface v2.5 (http://www.openmp.org/drupal/mp-documents/spec25.pdf) +specification. + + In the future, the GNU Fortran compiler will also support ISO/IEC +1539-1:2004 (Fortran 2003) and future Fortran standards. Partial support +of that standard is already provided; the current status of Fortran 2003 +support is reported in the *note Fortran 2003 status:: section of the +documentation. + + The next version of the Fortran standard after Fortran 2003 is +currently being developed and the GNU Fortran compiler supports some of +its new features. This support is based on the latest draft of the +standard (available from `http://www.nag.co.uk/sc22wg5/') and no +guarantee of future compatibility is made, as the final standard might +differ from the draft. For more information, see the *note Fortran 2008 +status:: section. + + +File: gfortran.info, Node: Invoking GNU Fortran, Next: Runtime, Prev: Introduction, Up: Top + +2 GNU Fortran Command Options +***************************** + +The `gfortran' command supports all the options supported by the `gcc' +command. Only options specific to GNU Fortran are documented here. + + *Note GCC Command Options: (gcc)Invoking GCC, for information on the +non-Fortran-specific aspects of the `gcc' command (and, therefore, the +`gfortran' command). + + All GCC and GNU Fortran options are accepted both by `gfortran' and +by `gcc' (as well as any other drivers built at the same time, such as +`g++'), since adding GNU Fortran to the GCC distribution enables +acceptance of GNU Fortran options by all of the relevant drivers. + + In some cases, options have positive and negative forms; the +negative form of `-ffoo' would be `-fno-foo'. This manual documents +only one of these two forms, whichever one is not the default. + +* Menu: + +* Option Summary:: Brief list of all `gfortran' options, + without explanations. +* Fortran Dialect Options:: Controlling the variant of Fortran language + compiled. +* Preprocessing Options:: Enable and customize preprocessing. +* Error and Warning Options:: How picky should the compiler be? +* Debugging Options:: Symbol tables, measurements, and debugging dumps. +* Directory Options:: Where to find module files +* Link Options :: Influencing the linking step +* Runtime Options:: Influencing runtime behavior +* Code Gen Options:: Specifying conventions for function calls, data layout + and register usage. +* Environment Variables:: Environment variables that affect `gfortran'. + + +File: gfortran.info, Node: Option Summary, Next: Fortran Dialect Options, Up: Invoking GNU Fortran + +2.1 Option summary +================== + +Here is a summary of all the options specific to GNU Fortran, grouped +by type. Explanations are in the following sections. + +_Fortran Language Options_ + *Note Options controlling Fortran dialect: Fortran Dialect Options. + -fall-intrinsics -ffree-form -fno-fixed-form + -fdollar-ok -fimplicit-none -fmax-identifier-length + -std=STD -fd-lines-as-code -fd-lines-as-comments + -ffixed-line-length-N -ffixed-line-length-none + -ffree-line-length-N -ffree-line-length-none + -fdefault-double-8 -fdefault-integer-8 -fdefault-real-8 + -fcray-pointer -fopenmp -fno-range-check -fbackslash -fmodule-private + +_Preprocessing Options_ + *Note Enable and customize preprocessing: Preprocessing Options. + -cpp -dD -dI -dM -dN -dU -fworking-directory + -imultilib DIR -iprefix FILE -isysroot DIR + -iquote -isystem DIR -nocpp -nostdinc -undef + -AQUESTION=ANSWER -A-QUESTION[=ANSWER] + -C -CC -DMACRO[=DEFN] -UMACRO -H -P + +_Error and Warning Options_ + *Note Options to request or suppress errors and warnings: Error + and Warning Options. + -fmax-errors=N + -fsyntax-only -pedantic -pedantic-errors + -Wall -Waliasing -Wampersand -Warray-bounds -Wcharacter-truncation + -Wconversion -Wimplicit-interface -Wline-truncation -Wintrinsics-std + -Wsurprising -Wno-tabs -Wunderflow -Wunused-parameter -Wintrinsics-shadow + -Wno-align-commons + +_Debugging Options_ + *Note Options for debugging your program or GNU Fortran: Debugging + Options. + -fdump-parse-tree -ffpe-trap=LIST + -fdump-core -fbacktrace + +_Directory Options_ + *Note Options for directory search: Directory Options. + -IDIR -JDIR -MDIR + -fintrinsic-modules-path DIR + +_Link Options_ + *Note Options for influencing the linking step: Link Options. + -static-libgfortran + +_Runtime Options_ + *Note Options for influencing runtime behavior: Runtime Options. + -fconvert=CONVERSION -fno-range-check + -frecord-marker=LENGTH -fmax-subrecord-length=LENGTH + -fsign-zero + +_Code Generation Options_ + *Note Options for code generation conventions: Code Gen Options. + -fno-automatic -ff2c -fno-underscoring + -fsecond-underscore + -fbounds-check -fcheck-array-temporaries -fmax-array-constructor =N + -fmax-stack-var-size=N + -fpack-derived -frepack-arrays -fshort-enums -fexternal-blas + -fblas-matmul-limit=N -frecursive -finit-local-zero + -finit-integer=N -finit-real= + -finit-logical= -finit-character=N -fno-align-commons + + +* Menu: + +* Fortran Dialect Options:: Controlling the variant of Fortran language + compiled. +* Preprocessing Options:: Enable and customize preprocessing. +* Error and Warning Options:: How picky should the compiler be? +* Debugging Options:: Symbol tables, measurements, and debugging dumps. +* Directory Options:: Where to find module files +* Link Options :: Influencing the linking step +* Runtime Options:: Influencing runtime behavior +* Code Gen Options:: Specifying conventions for function calls, data layout + and register usage. + + +File: gfortran.info, Node: Fortran Dialect Options, Next: Preprocessing Options, Prev: Option Summary, Up: Invoking GNU Fortran + +2.2 Options controlling Fortran dialect +======================================= + +The following options control the details of the Fortran dialect +accepted by the compiler: + +`-ffree-form' + +`-ffixed-form' + Specify the layout used by the source file. The free form layout + was introduced in Fortran 90. Fixed form was traditionally used in + older Fortran programs. When neither option is specified, the + source form is determined by the file extension. + +`-fall-intrinsics' + This option causes all intrinsic procedures (including the + GNU-specific extensions) to be accepted. This can be useful with + `-std=f95' to force standard-compliance but get access to the full + range of intrinsics available with `gfortran'. As a consequence, + `-Wintrinsics-std' will be ignored and no user-defined procedure + with the same name as any intrinsic will be called except when it + is explicitly declared `EXTERNAL'. + +`-fd-lines-as-code' + +`-fd-lines-as-comments' + Enable special treatment for lines beginning with `d' or `D' in + fixed form sources. If the `-fd-lines-as-code' option is given + they are treated as if the first column contained a blank. If the + `-fd-lines-as-comments' option is given, they are treated as + comment lines. + +`-fdefault-double-8' + Set the `DOUBLE PRECISION' type to an 8 byte wide type. If + `-fdefault-real-8' is given, `DOUBLE PRECISION' would instead be + promoted to 16 bytes if possible, and `-fdefault-double-8' can be + used to prevent this. The kind of real constants like `1.d0' will + not be changed by `-fdefault-real-8' though, so also + `-fdefault-double-8' does not affect it. + +`-fdefault-integer-8' + Set the default integer and logical types to an 8 byte wide type. + Do nothing if this is already the default. This option also + affects the kind of integer constants like `42'. + +`-fdefault-real-8' + Set the default real type to an 8 byte wide type. Do nothing if + this is already the default. This option also affects the kind of + non-double real constants like `1.0', and does promote the default + width of `DOUBLE PRECISION' to 16 bytes if possible, unless + `-fdefault-double-8' is given, too. + +`-fdollar-ok' + Allow `$' as a valid character in a symbol name. + +`-fbackslash' + Change the interpretation of backslashes in string literals from a + single backslash character to "C-style" escape characters. The + following combinations are expanded `\a', `\b', `\f', `\n', `\r', + `\t', `\v', `\\', and `\0' to the ASCII characters alert, + backspace, form feed, newline, carriage return, horizontal tab, + vertical tab, backslash, and NUL, respectively. Additionally, + `\x'NN, `\u'NNNN and `\U'NNNNNNNN (where each N is a hexadecimal + digit) are translated into the Unicode characters corresponding to + the specified code points. All other combinations of a character + preceded by \ are unexpanded. + +`-fmodule-private' + Set the default accessibility of module entities to `PRIVATE'. + Use-associated entities will not be accessible unless they are + explicitly declared as `PUBLIC'. + +`-ffixed-line-length-N' + Set column after which characters are ignored in typical fixed-form + lines in the source file, and through which spaces are assumed (as + if padded to that length) after the ends of short fixed-form lines. + + Popular values for N include 72 (the standard and the default), 80 + (card image), and 132 (corresponding to "extended-source" options + in some popular compilers). N may also be `none', meaning that + the entire line is meaningful and that continued character + constants never have implicit spaces appended to them to fill out + the line. `-ffixed-line-length-0' means the same thing as + `-ffixed-line-length-none'. + +`-ffree-line-length-N' + Set column after which characters are ignored in typical free-form + lines in the source file. The default value is 132. N may be + `none', meaning that the entire line is meaningful. + `-ffree-line-length-0' means the same thing as + `-ffree-line-length-none'. + +`-fmax-identifier-length=N' + Specify the maximum allowed identifier length. Typical values are + 31 (Fortran 95) and 63 (Fortran 2003 and Fortran 2008). + +`-fimplicit-none' + Specify that no implicit typing is allowed, unless overridden by + explicit `IMPLICIT' statements. This is the equivalent of adding + `implicit none' to the start of every procedure. + +`-fcray-pointer' + Enable the Cray pointer extension, which provides C-like pointer + functionality. + +`-fopenmp' + Enable the OpenMP extensions. This includes OpenMP `!$omp' + directives in free form and `c$omp', `*$omp' and `!$omp' + directives in fixed form, `!$' conditional compilation sentinels + in free form and `c$', `*$' and `!$' sentinels in fixed form, and + when linking arranges for the OpenMP runtime library to be linked + in. The option `-fopenmp' implies `-frecursive'. + +`-fno-range-check' + Disable range checking on results of simplification of constant + expressions during compilation. For example, GNU Fortran will give + an error at compile time when simplifying `a = 1. / 0'. With this + option, no error will be given and `a' will be assigned the value + `+Infinity'. If an expression evaluates to a value outside of the + relevant range of [`-HUGE()':`HUGE()'], then the expression will + be replaced by `-Inf' or `+Inf' as appropriate. Similarly, `DATA + i/Z'FFFFFFFF'/' will result in an integer overflow on most + systems, but with `-fno-range-check' the value will "wrap around" + and `i' will be initialized to -1 instead. + +`-std=STD' + Specify the standard to which the program is expected to conform, + which may be one of `f95', `f2003', `f2008', `gnu', or `legacy'. + The default value for STD is `gnu', which specifies a superset of + the Fortran 95 standard that includes all of the extensions + supported by GNU Fortran, although warnings will be given for + obsolete extensions not recommended for use in new code. The + `legacy' value is equivalent but without the warnings for obsolete + extensions, and may be useful for old non-standard programs. The + `f95', `f2003' and `f2008' values specify strict conformance to + the Fortran 95, Fortran 2003 and Fortran 2008 standards, + respectively; errors are given for all extensions beyond the + relevant language standard, and warnings are given for the Fortran + 77 features that are permitted but obsolescent in later standards. + + + +File: gfortran.info, Node: Preprocessing Options, Next: Error and Warning Options, Prev: Fortran Dialect Options, Up: Invoking GNU Fortran + +2.3 Enable and customize preprocessing +====================================== + +Preprocessor related options. See section *note Preprocessing and +conditional compilation:: for more detailed information on +preprocessing in `gfortran'. + +`-cpp' + +`-nocpp' + Enable preprocessing. The preprocessor is automatically invoked if + the file extension is `.fpp', `.FPP', `.F', `.FOR', `.FTN', + `.F90', `.F95', `.F03' or `.F08'. Use this option to manually + enable preprocessing of any kind of Fortran file. + + To disable preprocessing of files with any of the above listed + extensions, use the negative form: `-nocpp'. + + The preprocessor is run in traditional mode, be aware that any + restrictions of the file-format, e.g. fixed-form line width, apply + for preprocessed output as well. + +`-dM' + Instead of the normal output, generate a list of `'#define'' + directives for all the macros defined during the execution of the + preprocessor, including predefined macros. This gives you a way of + finding out what is predefined in your version of the preprocessor. + Assuming you have no file `foo.f90', the command + touch foo.f90; gfortran -cpp -dM foo.f90 + will show all the predefined macros. + +`-dD' + Like `-dM' except in two respects: it does not include the + predefined macros, and it outputs both the `#define' directives + and the result of preprocessing. Both kinds of output go to the + standard output file. + +`-dN' + Like `-dD', but emit only the macro names, not their expansions. + +`-dU' + Like `dD' except that only macros that are expanded, or whose + definedness is tested in preprocessor directives, are output; the + output is delayed until the use or test of the macro; and + `'#undef'' directives are also output for macros tested but + undefined at the time. + +`-dI' + Output `'#include'' directives in addition to the result of + preprocessing. + +`-fworking-directory' + Enable generation of linemarkers in the preprocessor output that + will let the compiler know the current working directory at the + time of preprocessing. When this option is enabled, the + preprocessor will emit, after the initial linemarker, a second + linemarker with the current working directory followed by two + slashes. GCC will use this directory, when it's present in the + preprocessed input, as the directory emitted as the current + working directory in some debugging information formats. This + option is implicitly enabled if debugging information is enabled, + but this can be inhibited with the negated form + `-fno-working-directory'. If the `-P' flag is present in the + command line, this option has no effect, since no `#line' + directives are emitted whatsoever. + +`-idirafter DIR' + Search DIR for include files, but do it after all directories + specified with `-I' and the standard system directories have been + exhausted. DIR is treated as a system include directory. If dir + begins with `=', then the `=' will be replaced by the sysroot + prefix; see `--sysroot' and `-isysroot'. + +`-imultilib DIR' + Use DIR as a subdirectory of the directory containing + target-specific C++ headers. + +`-iprefix PREFIX' + Specify PREFIX as the prefix for subsequent `-iwithprefix' + options. If the PREFIX represents a directory, you should include + the final `'/''. + +`-isysroot DIR' + This option is like the `--sysroot' option, but applies only to + header files. See the `--sysroot' option for more information. + +`-iquote DIR' + Search DIR only for header files requested with `#include "file"'; + they are not searched for `#include ', before all directories + specified by `-I' and before the standard system directories. If + DIR begins with `=', then the `=' will be replaced by the sysroot + prefix; see `--sysroot' and `-isysroot'. + +`-isystem DIR' + Search DIR for header files, after all directories specified by + `-I' but before the standard system directories. Mark it as a + system directory, so that it gets the same special treatment as is + applied to the standard system directories. If DIR begins with + `=', then the `=' will be replaced by the sysroot prefix; see + `--sysroot' and `-isysroot'. + +`-nostdinc' + Do not search the standard system directories for header files. + Only the directories you have specified with `-I' options (and the + directory of the current file, if appropriate) are searched. + +`-undef' + Do not predefine any system-specific or GCC-specific macros. The + standard predefined macros remain defined. + +`-APREDICATE=ANSWER' + Make an assertion with the predicate PREDICATE and answer ANSWER. + This form is preferred to the older form -A predicate(answer), + which is still supported, because it does not use shell special + characters. + +`-A-PREDICATE=ANSWER' + Cancel an assertion with the predicate PREDICATE and answer ANSWER. + +`-C' + Do not discard comments. All comments are passed through to the + output file, except for comments in processed directives, which + are deleted along with the directive. + + You should be prepared for side effects when using `-C'; it causes + the preprocessor to treat comments as tokens in their own right. + For example, comments appearing at the start of what would be a + directive line have the effect of turning that line into an + ordinary source line, since the first token on the line is no + longer a `'#''. + + Warning: this currently handles C-Style comments only. The + preprocessor does not yet recognize Fortran-style comments. + +`-CC' + Do not discard comments, including during macro expansion. This is + like `-C', except that comments contained within macros are also + passed through to the output file where the macro is expanded. + + In addition to the side-effects of the `-C' option, the `-CC' + option causes all C++-style comments inside a macro to be + converted to C-style comments. This is to prevent later use of + that macro from inadvertently commenting out the remainder of the + source line. The `-CC' option is generally used to support lint + comments. + + Warning: this currently handles C- and C++-Style comments only. The + preprocessor does not yet recognize Fortran-style comments. + +`-DNAME' + Predefine name as a macro, with definition `1'. + +`-DNAME=DEFINITION' + The contents of DEFINITION are tokenized and processed as if they + appeared during translation phase three in a `'#define'' directive. + In particular, the definition will be truncated by embedded newline + characters. + + If you are invoking the preprocessor from a shell or shell-like + program you may need to use the shell's quoting syntax to protect + characters such as spaces that have a meaning in the shell syntax. + + If you wish to define a function-like macro on the command line, + write its argument list with surrounding parentheses before the + equals sign (if any). Parentheses are meaningful to most shells, + so you will need to quote the option. With sh and csh, + `-D'name(args...)=definition'' works. + + `-D' and `-U' options are processed in the order they are given on + the command line. All -imacros file and -include file options are + processed after all -D and -U options. + +`-H' + Print the name of each header file used, in addition to other + normal activities. Each name is indented to show how deep in the + `'#include'' stack it is. + +`-P' + Inhibit generation of linemarkers in the output from the + preprocessor. This might be useful when running the preprocessor + on something that is not C code, and will be sent to a program + which might be confused by the linemarkers. + +`-UNAME' + Cancel any previous definition of NAME, either built in or provided + with a `-D' option. + + +File: gfortran.info, Node: Error and Warning Options, Next: Debugging Options, Prev: Preprocessing Options, Up: Invoking GNU Fortran + +2.4 Options to request or suppress errors and warnings +====================================================== + +Errors are diagnostic messages that report that the GNU Fortran compiler +cannot compile the relevant piece of source code. The compiler will +continue to process the program in an attempt to report further errors +to aid in debugging, but will not produce any compiled output. + + Warnings are diagnostic messages that report constructions which are +not inherently erroneous but which are risky or suggest there is likely +to be a bug in the program. Unless `-Werror' is specified, they do not +prevent compilation of the program. + + You can request many specific warnings with options beginning `-W', +for example `-Wimplicit' to request warnings on implicit declarations. +Each of these specific warning options also has a negative form +beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'. +This manual lists only one of the two forms, whichever is not the +default. + + These options control the amount and kinds of errors and warnings +produced by GNU Fortran: + +`-fmax-errors=N' + Limits the maximum number of error messages to N, at which point + GNU Fortran bails out rather than attempting to continue + processing the source code. If N is 0, there is no limit on the + number of error messages produced. + +`-fsyntax-only' + Check the code for syntax errors, but don't actually compile it. + This will generate module files for each module present in the + code, but no other output file. + +`-pedantic' + Issue warnings for uses of extensions to Fortran 95. `-pedantic' + also applies to C-language constructs where they occur in GNU + Fortran source files, such as use of `\e' in a character constant + within a directive like `#include'. + + Valid Fortran 95 programs should compile properly with or without + this option. However, without this option, certain GNU extensions + and traditional Fortran features are supported as well. With this + option, many of them are rejected. + + Some users try to use `-pedantic' to check programs for + conformance. They soon find that it does not do quite what they + want--it finds some nonstandard practices, but not all. However, + improvements to GNU Fortran in this area are welcome. + + This should be used in conjunction with `-std=f95', `-std=f2003' + or `-std=f2008'. + +`-pedantic-errors' + Like `-pedantic', except that errors are produced rather than + warnings. + +`-Wall' + Enables commonly used warning options pertaining to usage that we + recommend avoiding and that we believe are easy to avoid. This + currently includes `-Waliasing', `-Wampersand', `-Wsurprising', + `-Wintrinsics-std', `-Wno-tabs', `-Wintrinsic-shadow' and + `-Wline-truncation'. + +`-Waliasing' + Warn about possible aliasing of dummy arguments. Specifically, it + warns if the same actual argument is associated with a dummy + argument with `INTENT(IN)' and a dummy argument with `INTENT(OUT)' + in a call with an explicit interface. + + The following example will trigger the warning. + interface + subroutine bar(a,b) + integer, intent(in) :: a + integer, intent(out) :: b + end subroutine + end interface + integer :: a + + call bar(a,a) + +`-Wampersand' + Warn about missing ampersand in continued character constants. The + warning is given with `-Wampersand', `-pedantic', `-std=f95', + `-std=f2003' and `-std=f2008'. Note: With no ampersand given in a + continued character constant, GNU Fortran assumes continuation at + the first non-comment, non-whitespace character after the ampersand + that initiated the continuation. + +`-Warray-temporaries' + Warn about array temporaries generated by the compiler. The + information generated by this warning is sometimes useful in + optimization, in order to avoid such temporaries. + +`-Wcharacter-truncation' + Warn when a character assignment will truncate the assigned string. + +`-Wline-truncation' + Warn when a source code line will be truncated. + +`-Wconversion' + Warn about implicit conversions between different types. + +`-Wimplicit-interface' + Warn if a procedure is called without an explicit interface. Note + this only checks that an explicit interface is present. It does + not check that the declared interfaces are consistent across + program units. + +`-Wintrinsics-std' + Warn if `gfortran' finds a procedure named like an intrinsic not + available in the currently selected standard (with `-std') and + treats it as `EXTERNAL' procedure because of this. + `-fall-intrinsics' can be used to never trigger this behaviour and + always link to the intrinsic regardless of the selected standard. + +`-Wsurprising' + Produce a warning when "suspicious" code constructs are + encountered. While technically legal these usually indicate that + an error has been made. + + This currently produces a warning under the following + circumstances: + + * An INTEGER SELECT construct has a CASE that can never be + matched as its lower value is greater than its upper value. + + * A LOGICAL SELECT construct has three CASE statements. + + * A TRANSFER specifies a source that is shorter than the + destination. + + * The type of a function result is declared more than once with + the same type. If `-pedantic' or standard-conforming mode is + enabled, this is an error. + +`-Wtabs' + By default, tabs are accepted as whitespace, but tabs are not + members of the Fortran Character Set. For continuation lines, a + tab followed by a digit between 1 and 9 is supported. `-Wno-tabs' + will cause a warning to be issued if a tab is encountered. Note, + `-Wno-tabs' is active for `-pedantic', `-std=f95', `-std=f2003', + `-std=f2008' and `-Wall'. + +`-Wunderflow' + Produce a warning when numerical constant expressions are + encountered, which yield an UNDERFLOW during compilation. + +`-Wintrinsic-shadow' + Warn if a user-defined procedure or module procedure has the same + name as an intrinsic; in this case, an explicit interface or + `EXTERNAL' or `INTRINSIC' declaration might be needed to get calls + later resolved to the desired intrinsic/procedure. + +`-Wunused-parameter' + Contrary to `gcc''s meaning of `-Wunused-parameter', `gfortran''s + implementation of this option does not warn about unused dummy + arguments, but about unused `PARAMETER' values. + `-Wunused-parameter' is not included in `-Wall' but is implied by + `-Wall -Wextra'. + +`-Walign-commons' + By default, `gfortran' warns about any occasion of variables being + padded for proper alignment inside a COMMON block. This warning + can be turned off via `-Wno-align-commons'. See also + `-falign-commons'. + +`-Werror' + Turns all warnings into errors. + + *Note Options to Request or Suppress Errors and Warnings: (gcc)Error +and Warning Options, for information on more options offered by the GBE +shared by `gfortran', `gcc' and other GNU compilers. + + Some of these have no effect when compiling programs written in +Fortran. + + +File: gfortran.info, Node: Debugging Options, Next: Directory Options, Prev: Error and Warning Options, Up: Invoking GNU Fortran + +2.5 Options for debugging your program or GNU Fortran +===================================================== + +GNU Fortran has various special options that are used for debugging +either your program or the GNU Fortran compiler. + +`-fdump-parse-tree' + Output the internal parse tree before starting code generation. + Only really useful for debugging the GNU Fortran compiler itself. + +`-ffpe-trap=LIST' + Specify a list of IEEE exceptions when a Floating Point Exception + (FPE) should be raised. On most systems, this will result in a + SIGFPE signal being sent and the program being interrupted, + producing a core file useful for debugging. LIST is a (possibly + empty) comma-separated list of the following IEEE exceptions: + `invalid' (invalid floating point operation, such as + `SQRT(-1.0)'), `zero' (division by zero), `overflow' (overflow in + a floating point operation), `underflow' (underflow in a floating + point operation), `precision' (loss of precision during operation) + and `denormal' (operation produced a denormal value). + + Some of the routines in the Fortran runtime library, like + `CPU_TIME', are likely to trigger floating point exceptions when + `ffpe-trap=precision' is used. For this reason, the use of + `ffpe-trap=precision' is not recommended. + +`-fbacktrace' + Specify that, when a runtime error is encountered or a deadly + signal is emitted (segmentation fault, illegal instruction, bus + error or floating-point exception), the Fortran runtime library + should output a backtrace of the error. This option only has + influence for compilation of the Fortran main program. + +`-fdump-core' + Request that a core-dump file is written to disk when a runtime + error is encountered on systems that support core dumps. This + option is only effective for the compilation of the Fortran main + program. + + *Note Options for Debugging Your Program or GCC: (gcc)Debugging +Options, for more information on debugging options. + + +File: gfortran.info, Node: Directory Options, Next: Link Options, Prev: Debugging Options, Up: Invoking GNU Fortran + +2.6 Options for directory search +================================ + +These options affect how GNU Fortran searches for files specified by +the `INCLUDE' directive and where it searches for previously compiled +modules. + + It also affects the search paths used by `cpp' when used to +preprocess Fortran source. + +`-IDIR' + These affect interpretation of the `INCLUDE' directive (as well as + of the `#include' directive of the `cpp' preprocessor). + + Also note that the general behavior of `-I' and `INCLUDE' is + pretty much the same as of `-I' with `#include' in the `cpp' + preprocessor, with regard to looking for `header.gcc' files and + other such things. + + This path is also used to search for `.mod' files when previously + compiled modules are required by a `USE' statement. + + *Note Options for Directory Search: (gcc)Directory Options, for + information on the `-I' option. + +`-JDIR' + +`-MDIR' + This option specifies where to put `.mod' files for compiled + modules. It is also added to the list of directories to searched + by an `USE' statement. + + The default is the current directory. + + `-M' is deprecated to avoid conflicts with existing GCC options. + +`-fintrinsic-modules-path DIR' + This option specifies the location of pre-compiled intrinsic + modules, if they are not in the default location expected by the + compiler. + + +File: gfortran.info, Node: Link Options, Next: Runtime Options, Prev: Directory Options, Up: Invoking GNU Fortran + +2.7 Influencing the linking step +================================ + +These options come into play when the compiler links object files into +an executable output file. They are meaningless if the compiler is not +doing a link step. + +`-static-libgfortran' + On systems that provide `libgfortran' as a shared and a static + library, this option forces the use of the static version. If no + shared version of `libgfortran' was built when the compiler was + configured, this option has no effect. + + +File: gfortran.info, Node: Runtime Options, Next: Code Gen Options, Prev: Link Options, Up: Invoking GNU Fortran + +2.8 Influencing runtime behavior +================================ + +These options affect the runtime behavior of programs compiled with GNU +Fortran. +`-fconvert=CONVERSION' + Specify the representation of data for unformatted files. Valid + values for conversion are: `native', the default; `swap', swap + between big- and little-endian; `big-endian', use big-endian + representation for unformatted files; `little-endian', use + little-endian representation for unformatted files. + + _This option has an effect only when used in the main program. + The `CONVERT' specifier and the GFORTRAN_CONVERT_UNIT environment + variable override the default specified by `-fconvert'._ + +`-fno-range-check' + Disable range checking of input values during integer `READ' + operations. For example, GNU Fortran will give an error if an + input value is outside of the relevant range of + [`-HUGE()':`HUGE()']. In other words, with `INTEGER (kind=4) :: i' + , attempting to read -2147483648 will give an error unless + `-fno-range-check' is given. + +`-frecord-marker=LENGTH' + Specify the length of record markers for unformatted files. Valid + values for LENGTH are 4 and 8. Default is 4. _This is different + from previous versions of `gfortran'_, which specified a default + record marker length of 8 on most systems. If you want to read or + write files compatible with earlier versions of `gfortran', use + `-frecord-marker=8'. + +`-fmax-subrecord-length=LENGTH' + Specify the maximum length for a subrecord. The maximum permitted + value for length is 2147483639, which is also the default. Only + really useful for use by the gfortran testsuite. + +`-fsign-zero' + When writing zero values, show the negative sign if the sign bit + is set. `fno-sign-zero' does not print the negative sign of zero + values for compatibility with F77. Default behavior is to show + the negative sign. + + +File: gfortran.info, Node: Code Gen Options, Next: Environment Variables, Prev: Runtime Options, Up: Invoking GNU Fortran + +2.9 Options for code generation conventions +=========================================== + +These machine-independent options control the interface conventions +used in code generation. + + Most of them have both positive and negative forms; the negative form +of `-ffoo' would be `-fno-foo'. In the table below, only one of the +forms is listed--the one which is not the default. You can figure out +the other form by either removing `no-' or adding it. + +`-fno-automatic' + Treat each program unit (except those marked as RECURSIVE) as if + the `SAVE' statement were specified for every local variable and + array referenced in it. Does not affect common blocks. (Some + Fortran compilers provide this option under the name `-static' or + `-save'.) The default, which is `-fautomatic', uses the stack for + local variables smaller than the value given by + `-fmax-stack-var-size'. Use the option `-frecursive' to use no + static memory. + +`-ff2c' + Generate code designed to be compatible with code generated by + `g77' and `f2c'. + + The calling conventions used by `g77' (originally implemented in + `f2c') require functions that return type default `REAL' to + actually return the C type `double', and functions that return + type `COMPLEX' to return the values via an extra argument in the + calling sequence that points to where to store the return value. + Under the default GNU calling conventions, such functions simply + return their results as they would in GNU C--default `REAL' + functions return the C type `float', and `COMPLEX' functions + return the GNU C type `complex'. Additionally, this option + implies the `-fsecond-underscore' option, unless + `-fno-second-underscore' is explicitly requested. + + This does not affect the generation of code that interfaces with + the `libgfortran' library. + + _Caution:_ It is not a good idea to mix Fortran code compiled with + `-ff2c' with code compiled with the default `-fno-f2c' calling + conventions as, calling `COMPLEX' or default `REAL' functions + between program parts which were compiled with different calling + conventions will break at execution time. + + _Caution:_ This will break code which passes intrinsic functions + of type default `REAL' or `COMPLEX' as actual arguments, as the + library implementations use the `-fno-f2c' calling conventions. + +`-fno-underscoring' + Do not transform names of entities specified in the Fortran source + file by appending underscores to them. + + With `-funderscoring' in effect, GNU Fortran appends one + underscore to external names with no underscores. This is done to + ensure compatibility with code produced by many UNIX Fortran + compilers. + + _Caution_: The default behavior of GNU Fortran is incompatible + with `f2c' and `g77', please use the `-ff2c' option if you want + object files compiled with GNU Fortran to be compatible with + object code created with these tools. + + Use of `-fno-underscoring' is not recommended unless you are + experimenting with issues such as integration of GNU Fortran into + existing system environments (vis-a`-vis existing libraries, tools, + and so on). + + For example, with `-funderscoring', and assuming other defaults + like `-fcase-lower' and that `j()' and `max_count()' are external + functions while `my_var' and `lvar' are local variables, a + statement like + I = J() + MAX_COUNT (MY_VAR, LVAR) + is implemented as something akin to: + i = j_() + max_count__(&my_var__, &lvar); + + With `-fno-underscoring', the same statement is implemented as: + + i = j() + max_count(&my_var, &lvar); + + Use of `-fno-underscoring' allows direct specification of + user-defined names while debugging and when interfacing GNU Fortran + code with other languages. + + Note that just because the names match does _not_ mean that the + interface implemented by GNU Fortran for an external name matches + the interface implemented by some other language for that same + name. That is, getting code produced by GNU Fortran to link to + code produced by some other compiler using this or any other + method can be only a small part of the overall solution--getting + the code generated by both compilers to agree on issues other than + naming can require significant effort, and, unlike naming + disagreements, linkers normally cannot detect disagreements in + these other areas. + + Also, note that with `-fno-underscoring', the lack of appended + underscores introduces the very real possibility that a + user-defined external name will conflict with a name in a system + library, which could make finding unresolved-reference bugs quite + difficult in some cases--they might occur at program run time, and + show up only as buggy behavior at run time. + + In future versions of GNU Fortran we hope to improve naming and + linking issues so that debugging always involves using the names + as they appear in the source, even if the names as seen by the + linker are mangled to prevent accidental linking between + procedures with incompatible interfaces. + +`-fsecond-underscore' + By default, GNU Fortran appends an underscore to external names. + If this option is used GNU Fortran appends two underscores to + names with underscores and one underscore to external names with + no underscores. GNU Fortran also appends two underscores to + internal names with underscores to avoid naming collisions with + external names. + + This option has no effect if `-fno-underscoring' is in effect. It + is implied by the `-ff2c' option. + + Otherwise, with this option, an external name such as `MAX_COUNT' + is implemented as a reference to the link-time external symbol + `max_count__', instead of `max_count_'. This is required for + compatibility with `g77' and `f2c', and is implied by use of the + `-ff2c' option. + +`-fbounds-check' + Enable generation of run-time checks for array subscripts and + against the declared minimum and maximum values. It also checks + array indices for assumed and deferred shape arrays against the + actual allocated bounds and ensures that all string lengths are + equal for character array constructors without an explicit + typespec. + + Some checks require that `-fbounds-check' is set for the + compilation of the main program. + + Note: In the future this may also include other forms of checking, + e.g., checking substring references. + +`fcheck-array-temporaries' + Warns at run time when for passing an actual argument a temporary + array had to be generated. The information generated by this + warning is sometimes useful in optimization, in order to avoid + such temporaries. + + Note: The warning is only printed once per location. + +`-fmax-array-constructor=N' + This option can be used to increase the upper limit permitted in + array constructors. The code below requires this option to expand + the array at compile time. + + `program test' + `implicit none' + `integer j' + `integer, parameter :: n = 100000' + `integer, parameter :: i(n) = (/ (2*j, j = 1, n) /)' + `print '(10(I0,1X))', i' + `end program test' + + _Caution: This option can lead to long compile times and + excessively large object files._ + + The default value for N is 65535. + +`-fmax-stack-var-size=N' + This option specifies the size in bytes of the largest array that + will be put on the stack; if the size is exceeded static memory is + used (except in procedures marked as RECURSIVE). Use the option + `-frecursive' to allow for recursive procedures which do not have + a RECURSIVE attribute or for parallel programs. Use + `-fno-automatic' to never use the stack. + + This option currently only affects local arrays declared with + constant bounds, and may not apply to all character variables. + Future versions of GNU Fortran may improve this behavior. + + The default value for N is 32768. + +`-fpack-derived' + This option tells GNU Fortran to pack derived type members as + closely as possible. Code compiled with this option is likely to + be incompatible with code compiled without this option, and may + execute slower. + +`-frepack-arrays' + In some circumstances GNU Fortran may pass assumed shape array + sections via a descriptor describing a noncontiguous area of + memory. This option adds code to the function prologue to repack + the data into a contiguous block at runtime. + + This should result in faster accesses to the array. However it + can introduce significant overhead to the function call, + especially when the passed data is noncontiguous. + +`-fshort-enums' + This option is provided for interoperability with C code that was + compiled with the `-fshort-enums' option. It will make GNU + Fortran choose the smallest `INTEGER' kind a given enumerator set + will fit in, and give all its enumerators this kind. + +`-fexternal-blas' + This option will make `gfortran' generate calls to BLAS functions + for some matrix operations like `MATMUL', instead of using our own + algorithms, if the size of the matrices involved is larger than a + given limit (see `-fblas-matmul-limit'). This may be profitable + if an optimized vendor BLAS library is available. The BLAS + library will have to be specified at link time. + +`-fblas-matmul-limit=N' + Only significant when `-fexternal-blas' is in effect. Matrix + multiplication of matrices with size larger than (or equal to) N + will be performed by calls to BLAS functions, while others will be + handled by `gfortran' internal algorithms. If the matrices + involved are not square, the size comparison is performed using the + geometric mean of the dimensions of the argument and result + matrices. + + The default value for N is 30. + +`-frecursive' + Allow indirect recursion by forcing all local arrays to be + allocated on the stack. This flag cannot be used together with + `-fmax-stack-var-size=' or `-fno-automatic'. + +`-finit-local-zero' + +`-finit-integer=N' + +`-finit-real=' + +`-finit-logical=' + +`-finit-character=N' + The `-finit-local-zero' option instructs the compiler to + initialize local `INTEGER', `REAL', and `COMPLEX' variables to + zero, `LOGICAL' variables to false, and `CHARACTER' variables to a + string of null bytes. Finer-grained initialization options are + provided by the `-finit-integer=N', + `-finit-real=' (which also initializes the real + and imaginary parts of local `COMPLEX' variables), + `-finit-logical=', and `-finit-character=N' (where N + is an ASCII character value) options. These options do not + initialize components of derived type variables, nor do they + initialize variables that appear in an `EQUIVALENCE' statement. + (This limitation may be removed in future releases). + + Note that the `-finit-real=nan' option initializes `REAL' and + `COMPLEX' variables with a quiet NaN. + +`-falign-commons' + By default, `gfortran' enforces proper alignment of all variables + in a COMMON block by padding them as needed. On certain platforms + this is mandatory, on others it increases performance. If a COMMON + block is not declared with consistent data types everywhere, this + padding can cause trouble, and `-fno-align-commons ' can be used + to disable automatic alignment. The same form of this option + should be used for all files that share a COMMON block. To avoid + potential alignment issues in COMMON blocks, it is recommended to + order objects from largests to smallest. + + *Note Options for Code Generation Conventions: (gcc)Code Gen +Options, for information on more options offered by the GBE shared by +`gfortran', `gcc', and other GNU compilers. + + +File: gfortran.info, Node: Environment Variables, Prev: Code Gen Options, Up: Invoking GNU Fortran + +2.10 Environment variables affecting `gfortran' +=============================================== + +The `gfortran' compiler currently does not make use of any environment +variables to control its operation above and beyond those that affect +the operation of `gcc'. + + *Note Environment Variables Affecting GCC: (gcc)Environment +Variables, for information on environment variables. + + *Note Runtime::, for environment variables that affect the run-time +behavior of programs compiled with GNU Fortran. + + +File: gfortran.info, Node: Runtime, Next: Fortran 2003 and 2008 status, Prev: Invoking GNU Fortran, Up: Top + +3 Runtime: Influencing runtime behavior with environment variables +******************************************************************* + +The behavior of the `gfortran' can be influenced by environment +variables. + + Malformed environment variables are silently ignored. + +* Menu: + +* GFORTRAN_STDIN_UNIT:: Unit number for standard input +* GFORTRAN_STDOUT_UNIT:: Unit number for standard output +* GFORTRAN_STDERR_UNIT:: Unit number for standard error +* GFORTRAN_USE_STDERR:: Send library output to standard error +* GFORTRAN_TMPDIR:: Directory for scratch files +* GFORTRAN_UNBUFFERED_ALL:: Don't buffer I/O for all units. +* GFORTRAN_UNBUFFERED_PRECONNECTED:: Don't buffer I/O for preconnected units. +* GFORTRAN_SHOW_LOCUS:: Show location for runtime errors +* GFORTRAN_OPTIONAL_PLUS:: Print leading + where permitted +* GFORTRAN_DEFAULT_RECL:: Default record length for new files +* GFORTRAN_LIST_SEPARATOR:: Separator for list output +* GFORTRAN_CONVERT_UNIT:: Set endianness for unformatted I/O +* GFORTRAN_ERROR_DUMPCORE:: Dump core on run-time errors +* GFORTRAN_ERROR_BACKTRACE:: Show backtrace on run-time errors + + +File: gfortran.info, Node: GFORTRAN_STDIN_UNIT, Next: GFORTRAN_STDOUT_UNIT, Up: Runtime + +3.1 `GFORTRAN_STDIN_UNIT'--Unit number for standard input +========================================================= + +This environment variable can be used to select the unit number +preconnected to standard input. This must be a positive integer. The +default value is 5. + + +File: gfortran.info, Node: GFORTRAN_STDOUT_UNIT, Next: GFORTRAN_STDERR_UNIT, Prev: GFORTRAN_STDIN_UNIT, Up: Runtime + +3.2 `GFORTRAN_STDOUT_UNIT'--Unit number for standard output +=========================================================== + +This environment variable can be used to select the unit number +preconnected to standard output. This must be a positive integer. The +default value is 6. + + +File: gfortran.info, Node: GFORTRAN_STDERR_UNIT, Next: GFORTRAN_USE_STDERR, Prev: GFORTRAN_STDOUT_UNIT, Up: Runtime + +3.3 `GFORTRAN_STDERR_UNIT'--Unit number for standard error +========================================================== + +This environment variable can be used to select the unit number +preconnected to standard error. This must be a positive integer. The +default value is 0. + + +File: gfortran.info, Node: GFORTRAN_USE_STDERR, Next: GFORTRAN_TMPDIR, Prev: GFORTRAN_STDERR_UNIT, Up: Runtime + +3.4 `GFORTRAN_USE_STDERR'--Send library output to standard error +================================================================ + +This environment variable controls where library output is sent. If +the first letter is `y', `Y' or `1', standard error is used. If the +first letter is `n', `N' or `0', standard output is used. + + +File: gfortran.info, Node: GFORTRAN_TMPDIR, Next: GFORTRAN_UNBUFFERED_ALL, Prev: GFORTRAN_USE_STDERR, Up: Runtime + +3.5 `GFORTRAN_TMPDIR'--Directory for scratch files +================================================== + +This environment variable controls where scratch files are created. If +this environment variable is missing, GNU Fortran searches for the +environment variable `TMP'. If this is also missing, the default is +`/tmp'. + + +File: gfortran.info, Node: GFORTRAN_UNBUFFERED_ALL, Next: GFORTRAN_UNBUFFERED_PRECONNECTED, Prev: GFORTRAN_TMPDIR, Up: Runtime + +3.6 `GFORTRAN_UNBUFFERED_ALL'--Don't buffer I/O on all units +============================================================ + +This environment variable controls whether all I/O is unbuffered. If +the first letter is `y', `Y' or `1', all I/O is unbuffered. This will +slow down small sequential reads and writes. If the first letter is +`n', `N' or `0', I/O is buffered. This is the default. + + +File: gfortran.info, Node: GFORTRAN_UNBUFFERED_PRECONNECTED, Next: GFORTRAN_SHOW_LOCUS, Prev: GFORTRAN_UNBUFFERED_ALL, Up: Runtime + +3.7 `GFORTRAN_UNBUFFERED_PRECONNECTED'--Don't buffer I/O on preconnected units +============================================================================== + +The environment variable named `GFORTRAN_UNBUFFERED_PRECONNECTED' +controls whether I/O on a preconnected unit (i.e. STDOUT or STDERR) is +unbuffered. If the first letter is `y', `Y' or `1', I/O is unbuffered. +This will slow down small sequential reads and writes. If the first +letter is `n', `N' or `0', I/O is buffered. This is the default. + + +File: gfortran.info, Node: GFORTRAN_SHOW_LOCUS, Next: GFORTRAN_OPTIONAL_PLUS, Prev: GFORTRAN_UNBUFFERED_PRECONNECTED, Up: Runtime + +3.8 `GFORTRAN_SHOW_LOCUS'--Show location for runtime errors +=========================================================== + +If the first letter is `y', `Y' or `1', filename and line numbers for +runtime errors are printed. If the first letter is `n', `N' or `0', +don't print filename and line numbers for runtime errors. The default +is to print the location. + + +File: gfortran.info, Node: GFORTRAN_OPTIONAL_PLUS, Next: GFORTRAN_DEFAULT_RECL, Prev: GFORTRAN_SHOW_LOCUS, Up: Runtime + +3.9 `GFORTRAN_OPTIONAL_PLUS'--Print leading + where permitted +============================================================= + +If the first letter is `y', `Y' or `1', a plus sign is printed where +permitted by the Fortran standard. If the first letter is `n', `N' or +`0', a plus sign is not printed in most cases. Default is not to print +plus signs. + + +File: gfortran.info, Node: GFORTRAN_DEFAULT_RECL, Next: GFORTRAN_LIST_SEPARATOR, Prev: GFORTRAN_OPTIONAL_PLUS, Up: Runtime + +3.10 `GFORTRAN_DEFAULT_RECL'--Default record length for new files +================================================================= + +This environment variable specifies the default record length, in +bytes, for files which are opened without a `RECL' tag in the `OPEN' +statement. This must be a positive integer. The default value is +1073741824 bytes (1 GB). + + +File: gfortran.info, Node: GFORTRAN_LIST_SEPARATOR, Next: GFORTRAN_CONVERT_UNIT, Prev: GFORTRAN_DEFAULT_RECL, Up: Runtime + +3.11 `GFORTRAN_LIST_SEPARATOR'--Separator for list output +========================================================= + +This environment variable specifies the separator when writing +list-directed output. It may contain any number of spaces and at most +one comma. If you specify this on the command line, be sure to quote +spaces, as in + $ GFORTRAN_LIST_SEPARATOR=' , ' ./a.out + when `a.out' is the compiled Fortran program that you want to run. +Default is a single space. + + +File: gfortran.info, Node: GFORTRAN_CONVERT_UNIT, Next: GFORTRAN_ERROR_DUMPCORE, Prev: GFORTRAN_LIST_SEPARATOR, Up: Runtime + +3.12 `GFORTRAN_CONVERT_UNIT'--Set endianness for unformatted I/O +================================================================ + +By setting the `GFORTRAN_CONVERT_UNIT' variable, it is possible to +change the representation of data for unformatted files. The syntax +for the `GFORTRAN_CONVERT_UNIT' variable is: + GFORTRAN_CONVERT_UNIT: mode | mode ';' exception | exception ; + mode: 'native' | 'swap' | 'big_endian' | 'little_endian' ; + exception: mode ':' unit_list | unit_list ; + unit_list: unit_spec | unit_list unit_spec ; + unit_spec: INTEGER | INTEGER '-' INTEGER ; + The variable consists of an optional default mode, followed by a +list of optional exceptions, which are separated by semicolons from the +preceding default and each other. Each exception consists of a format +and a comma-separated list of units. Valid values for the modes are +the same as for the `CONVERT' specifier: + + `NATIVE' Use the native format. This is the default. + + `SWAP' Swap between little- and big-endian. + + `LITTLE_ENDIAN' Use the little-endian format for unformatted files. + + `BIG_ENDIAN' Use the big-endian format for unformatted files. + A missing mode for an exception is taken to mean `BIG_ENDIAN'. +Examples of values for `GFORTRAN_CONVERT_UNIT' are: + `'big_endian'' Do all unformatted I/O in big_endian mode. + + `'little_endian;native:10-20,25'' Do all unformatted I/O in + little_endian mode, except for units 10 to 20 and 25, which are in + native format. + + `'10-20'' Units 10 to 20 are big-endian, the rest is native. + + Setting the environment variables should be done on the command line +or via the `export' command for `sh'-compatible shells and via `setenv' +for `csh'-compatible shells. + + Example for `sh': + $ gfortran foo.f90 + $ GFORTRAN_CONVERT_UNIT='big_endian;native:10-20' ./a.out + + Example code for `csh': + % gfortran foo.f90 + % setenv GFORTRAN_CONVERT_UNIT 'big_endian;native:10-20' + % ./a.out + + Using anything but the native representation for unformatted data +carries a significant speed overhead. If speed in this area matters to +you, it is best if you use this only for data that needs to be portable. + + *Note CONVERT specifier::, for an alternative way to specify the +data representation for unformatted files. *Note Runtime Options::, for +setting a default data representation for the whole program. The +`CONVERT' specifier overrides the `-fconvert' compile options. + + _Note that the values specified via the GFORTRAN_CONVERT_UNIT +environment variable will override the CONVERT specifier in the open +statement_. This is to give control over data formats to users who do +not have the source code of their program available. + + +File: gfortran.info, Node: GFORTRAN_ERROR_DUMPCORE, Next: GFORTRAN_ERROR_BACKTRACE, Prev: GFORTRAN_CONVERT_UNIT, Up: Runtime + +3.13 `GFORTRAN_ERROR_DUMPCORE'--Dump core on run-time errors +============================================================ + +If the `GFORTRAN_ERROR_DUMPCORE' variable is set to `y', `Y' or `1' +(only the first letter is relevant) then library run-time errors cause +core dumps. To disable the core dumps, set the variable to `n', `N', +`0'. Default is not to core dump unless the `-fdump-core' compile option +was used. + + +File: gfortran.info, Node: GFORTRAN_ERROR_BACKTRACE, Prev: GFORTRAN_ERROR_DUMPCORE, Up: Runtime + +3.14 `GFORTRAN_ERROR_BACKTRACE'--Show backtrace on run-time errors +================================================================== + +If the `GFORTRAN_ERROR_BACKTRACE' variable is set to `y', `Y' or `1' +(only the first letter is relevant) then a backtrace is printed when a +run-time error occurs. To disable the backtracing, set the variable to +`n', `N', `0'. Default is not to print a backtrace unless the +`-fbacktrace' compile option was used. + + +File: gfortran.info, Node: Fortran 2003 and 2008 status, Next: Compiler Characteristics, Prev: Runtime, Up: Top + +4 Fortran 2003 and 2008 Status +****************************** + +* Menu: + +* Fortran 2003 status:: +* Fortran 2008 status:: + + +File: gfortran.info, Node: Fortran 2003 status, Next: Fortran 2008 status, Up: Fortran 2003 and 2008 status + +4.1 Fortran 2003 status +======================= + +Although GNU Fortran focuses on implementing the Fortran 95 standard +for the time being, a few Fortran 2003 features are currently available. + + * Intrinsics `command_argument_count', `get_command', + `get_command_argument', `get_environment_variable', and + `move_alloc'. + + * Array constructors using square brackets. That is, `[...]' rather + than `(/.../)'. + + * `FLUSH' statement. + + * `IOMSG=' specifier for I/O statements. + + * Support for the declaration of enumeration constants via the + `ENUM' and `ENUMERATOR' statements. Interoperability with `gcc' + is guaranteed also for the case where the `-fshort-enums' command + line option is given. + + * TR 15581: + * `ALLOCATABLE' dummy arguments. + + * `ALLOCATABLE' function results + + * `ALLOCATABLE' components of derived types + + * The `OPEN' statement supports the `ACCESS='STREAM'' specifier, + allowing I/O without any record structure. + + * Namelist input/output for internal files. + + * The `PROTECTED' statement and attribute. + + * The `VALUE' statement and attribute. + + * The `VOLATILE' statement and attribute. + + * The `IMPORT' statement, allowing to import host-associated derived + types. + + * `USE' statement with `INTRINSIC' and `NON_INTRINSIC' attribute; + supported intrinsic modules: `ISO_FORTRAN_ENV', `OMP_LIB' and + `OMP_LIB_KINDS'. + + * Renaming of operators in the `USE' statement. + + * Interoperability with C (ISO C Bindings) + + * BOZ as argument of INT, REAL, DBLE and CMPLX. + + + +File: gfortran.info, Node: Fortran 2008 status, Prev: Fortran 2003 status, Up: Fortran 2003 and 2008 status + +4.2 Fortran 2008 status +======================= + +The next version of the Fortran standard after Fortran 2003 is currently +being worked on by the Working Group 5 of Sub-Committee 22 of the Joint +Technical Committee 1 of the International Organization for +Standardization (ISO) and the International Electrotechnical Commission +(IEC). This group is known at WG5 (http://www.nag.co.uk/sc22wg5/). The +next revision of the Fortran standard is informally referred to as +Fortran 2008, reflecting its planned release year. The GNU Fortran +compiler has support for some of the new features in Fortran 2008. This +support is based on the latest draft, available from +`http://www.nag.co.uk/sc22wg5/'. However, as the final standard may +differ from the drafts, no guarantee of backward compatibility can be +made and you should only use it for experimental purposes. + + +File: gfortran.info, Node: Compiler Characteristics, Next: Extensions, Prev: Fortran 2003 and 2008 status, Up: Top + +5 Compiler Characteristics +************************** + +This chapter describes certain characteristics of the GNU Fortran +compiler, namely the KIND type parameter values supported. + +* Menu: + +* KIND Type Parameters:: + + +File: gfortran.info, Node: KIND Type Parameters, Up: Compiler Characteristics + +5.1 KIND Type Parameters +======================== + +The `KIND' type parameters supported by GNU Fortran for the primitive +data types are: + +`INTEGER' + 1, 2, 4, 8*, 16*, default: 4 (1) + +`LOGICAL' + 1, 2, 4, 8*, 16*, default: 4 (1) + +`REAL' + 4, 8, 10**, 16**, default: 4 (2) + +`COMPLEX' + 4, 8, 10**, 16**, default: 4 (2) + +`CHARACTER' + 1, 4, default: 1 + + +* = not available on all systems +** = not available on all systems; additionally 10 and 16 are never +available at the same time +(1) Unless -fdefault-integer-8 is used +(2) Unless -fdefault-real-8 is used + +The `KIND' value matches the storage size in bytes, except for +`COMPLEX' where the storage size is twice as much (or both real and +imaginary part are a real value of the given size). It is recommended +to use the `SELECT_*_KIND' intrinsics instead of the concrete values. + + +File: gfortran.info, Node: Extensions, Next: Intrinsic Procedures, Prev: Compiler Characteristics, Up: Top + +6 Extensions +************ + +The two sections below detail the extensions to standard Fortran that +are implemented in GNU Fortran, as well as some of the popular or +historically important extensions that are not (or not yet) implemented. +For the latter case, we explain the alternatives available to GNU +Fortran users, including replacement by standard-conforming code or GNU +extensions. + +* Menu: + +* Extensions implemented in GNU Fortran:: +* Extensions not implemented in GNU Fortran:: + + +File: gfortran.info, Node: Extensions implemented in GNU Fortran, Next: Extensions not implemented in GNU Fortran, Up: Extensions + +6.1 Extensions implemented in GNU Fortran +========================================= + +GNU Fortran implements a number of extensions over standard Fortran. +This chapter contains information on their syntax and meaning. There +are currently two categories of GNU Fortran extensions, those that +provide functionality beyond that provided by any standard, and those +that are supported by GNU Fortran purely for backward compatibility +with legacy compilers. By default, `-std=gnu' allows the compiler to +accept both types of extensions, but to warn about the use of the +latter. Specifying either `-std=f95', `-std=f2003' or `-std=f2008' +disables both types of extensions, and `-std=legacy' allows both +without warning. + +* Menu: + +* Old-style kind specifications:: +* Old-style variable initialization:: +* Extensions to namelist:: +* X format descriptor without count field:: +* Commas in FORMAT specifications:: +* Missing period in FORMAT specifications:: +* I/O item lists:: +* BOZ literal constants:: +* Real array indices:: +* Unary operators:: +* Implicitly convert LOGICAL and INTEGER values:: +* Hollerith constants support:: +* Cray pointers:: +* CONVERT specifier:: +* OpenMP:: +* Argument list functions:: + + +File: gfortran.info, Node: Old-style kind specifications, Next: Old-style variable initialization, Up: Extensions implemented in GNU Fortran + +6.1.1 Old-style kind specifications +----------------------------------- + +GNU Fortran allows old-style kind specifications in declarations. These +look like: + TYPESPEC*size x,y,z + where `TYPESPEC' is a basic type (`INTEGER', `REAL', etc.), and +where `size' is a byte count corresponding to the storage size of a +valid kind for that type. (For `COMPLEX' variables, `size' is the +total size of the real and imaginary parts.) The statement then +declares `x', `y' and `z' to be of type `TYPESPEC' with the appropriate +kind. This is equivalent to the standard-conforming declaration + TYPESPEC(k) x,y,z + where `k' is the kind parameter suitable for the intended precision. +As kind parameters are implementation-dependent, use the `KIND', +`SELECTED_INT_KIND' and `SELECTED_REAL_KIND' intrinsics to retrieve the +correct value, for instance `REAL*8 x' can be replaced by: + INTEGER, PARAMETER :: dbl = KIND(1.0d0) + REAL(KIND=dbl) :: x + + +File: gfortran.info, Node: Old-style variable initialization, Next: Extensions to namelist, Prev: Old-style kind specifications, Up: Extensions implemented in GNU Fortran + +6.1.2 Old-style variable initialization +--------------------------------------- + +GNU Fortran allows old-style initialization of variables of the form: + INTEGER i/1/,j/2/ + REAL x(2,2) /3*0.,1./ + The syntax for the initializers is as for the `DATA' statement, but +unlike in a `DATA' statement, an initializer only applies to the +variable immediately preceding the initialization. In other words, +something like `INTEGER I,J/2,3/' is not valid. This style of +initialization is only allowed in declarations without double colons +(`::'); the double colons were introduced in Fortran 90, which also +introduced a standard syntax for initializing variables in type +declarations. + + Examples of standard-conforming code equivalent to the above example +are: + ! Fortran 90 + INTEGER :: i = 1, j = 2 + REAL :: x(2,2) = RESHAPE((/0.,0.,0.,1./),SHAPE(x)) + ! Fortran 77 + INTEGER i, j + REAL x(2,2) + DATA i/1/, j/2/, x/3*0.,1./ + + Note that variables which are explicitly initialized in declarations +or in `DATA' statements automatically acquire the `SAVE' attribute. + + +File: gfortran.info, Node: Extensions to namelist, Next: X format descriptor without count field, Prev: Old-style variable initialization, Up: Extensions implemented in GNU Fortran + +6.1.3 Extensions to namelist +---------------------------- + +GNU Fortran fully supports the Fortran 95 standard for namelist I/O +including array qualifiers, substrings and fully qualified derived +types. The output from a namelist write is compatible with namelist +read. The output has all names in upper case and indentation to column +1 after the namelist name. Two extensions are permitted: + + Old-style use of `$' instead of `&' + $MYNML + X(:)%Y(2) = 1.0 2.0 3.0 + CH(1:4) = "abcd" + $END + + It should be noted that the default terminator is `/' rather than +`&END'. + + Querying of the namelist when inputting from stdin. After at least +one space, entering `?' sends to stdout the namelist name and the names +of the variables in the namelist: + ? + + &mynml + x + x%y + ch + &end + + Entering `=?' outputs the namelist to stdout, as if `WRITE(*,NML = +mynml)' had been called: + =? + + &MYNML + X(1)%Y= 0.000000 , 1.000000 , 0.000000 , + X(2)%Y= 0.000000 , 2.000000 , 0.000000 , + X(3)%Y= 0.000000 , 3.000000 , 0.000000 , + CH=abcd, / + + To aid this dialog, when input is from stdin, errors send their +messages to stderr and execution continues, even if `IOSTAT' is set. + + `PRINT' namelist is permitted. This causes an error if `-std=f95' +is used. + PROGRAM test_print + REAL, dimension (4) :: x = (/1.0, 2.0, 3.0, 4.0/) + NAMELIST /mynml/ x + PRINT mynml + END PROGRAM test_print + + Expanded namelist reads are permitted. This causes an error if +`-std=f95' is used. In the following example, the first element of the +array will be given the value 0.00 and the two succeeding elements will +be given the values 1.00 and 2.00. + &MYNML + X(1,1) = 0.00 , 1.00 , 2.00 + / + + +File: gfortran.info, Node: X format descriptor without count field, Next: Commas in FORMAT specifications, Prev: Extensions to namelist, Up: Extensions implemented in GNU Fortran + +6.1.4 `X' format descriptor without count field +----------------------------------------------- + +To support legacy codes, GNU Fortran permits the count field of the `X' +edit descriptor in `FORMAT' statements to be omitted. When omitted, +the count is implicitly assumed to be one. + + PRINT 10, 2, 3 + 10 FORMAT (I1, X, I1) + + +File: gfortran.info, Node: Commas in FORMAT specifications, Next: Missing period in FORMAT specifications, Prev: X format descriptor without count field, Up: Extensions implemented in GNU Fortran + +6.1.5 Commas in `FORMAT' specifications +--------------------------------------- + +To support legacy codes, GNU Fortran allows the comma separator to be +omitted immediately before and after character string edit descriptors +in `FORMAT' statements. + + PRINT 10, 2, 3 + 10 FORMAT ('FOO='I1' BAR='I2) + + +File: gfortran.info, Node: Missing period in FORMAT specifications, Next: I/O item lists, Prev: Commas in FORMAT specifications, Up: Extensions implemented in GNU Fortran + +6.1.6 Missing period in `FORMAT' specifications +----------------------------------------------- + +To support legacy codes, GNU Fortran allows missing periods in format +specifications if and only if `-std=legacy' is given on the command +line. This is considered non-conforming code and is discouraged. + + REAL :: value + READ(*,10) value + 10 FORMAT ('F4') + + +File: gfortran.info, Node: I/O item lists, Next: BOZ literal constants, Prev: Missing period in FORMAT specifications, Up: Extensions implemented in GNU Fortran + +6.1.7 I/O item lists +-------------------- + +To support legacy codes, GNU Fortran allows the input item list of the +`READ' statement, and the output item lists of the `WRITE' and `PRINT' +statements, to start with a comma. + + +File: gfortran.info, Node: BOZ literal constants, Next: Real array indices, Prev: I/O item lists, Up: Extensions implemented in GNU Fortran + +6.1.8 BOZ literal constants +--------------------------- + +Besides decimal constants, Fortran also supports binary (`b'), octal +(`o') and hexadecimal (`z') integer constants. The syntax is: `prefix +quote digits quote', were the prefix is either `b', `o' or `z', quote +is either `'' or `"' and the digits are for binary `0' or `1', for +octal between `0' and `7', and for hexadecimal between `0' and `F'. +(Example: `b'01011101''.) + + Up to Fortran 95, BOZ literals were only allowed to initialize +integer variables in DATA statements. Since Fortran 2003 BOZ literals +are also allowed as argument of `REAL', `DBLE', `INT' and `CMPLX'; the +result is the same as if the integer BOZ literal had been converted by +`TRANSFER' to, respectively, `real', `double precision', `integer' or +`complex'. As GNU Fortran extension the intrinsic procedures `FLOAT', +`DFLOAT', `COMPLEX' and `DCMPLX' are treated alike. + + As an extension, GNU Fortran allows hexadecimal BOZ literal +constants to be specified using the `X' prefix, in addition to the +standard `Z' prefix. The BOZ literal can also be specified by adding a +suffix to the string, for example, `Z'ABC'' and `'ABC'Z' are equivalent. + + Furthermore, GNU Fortran allows using BOZ literal constants outside +DATA statements and the four intrinsic functions allowed by Fortran +2003. In DATA statements, in direct assignments, where the right-hand +side only contains a BOZ literal constant, and for old-style +initializers of the form `integer i /o'0173'/', the constant is +transferred as if `TRANSFER' had been used; for `COMPLEX' numbers, only +the real part is initialized unless `CMPLX' is used. In all other +cases, the BOZ literal constant is converted to an `INTEGER' value with +the largest decimal representation. This value is then converted +numerically to the type and kind of the variable in question. (For +instance `real :: r = b'0000001' + 1' initializes `r' with `2.0'.) As +different compilers implement the extension differently, one should be +careful when doing bitwise initialization of non-integer variables. + + Note that initializing an `INTEGER' variable with a statement such +as `DATA i/Z'FFFFFFFF'/' will give an integer overflow error rather +than the desired result of -1 when `i' is a 32-bit integer on a system +that supports 64-bit integers. The `-fno-range-check' option can be +used as a workaround for legacy code that initializes integers in this +manner. + + +File: gfortran.info, Node: Real array indices, Next: Unary operators, Prev: BOZ literal constants, Up: Extensions implemented in GNU Fortran + +6.1.9 Real array indices +------------------------ + +As an extension, GNU Fortran allows the use of `REAL' expressions or +variables as array indices. + + +File: gfortran.info, Node: Unary operators, Next: Implicitly convert LOGICAL and INTEGER values, Prev: Real array indices, Up: Extensions implemented in GNU Fortran + +6.1.10 Unary operators +---------------------- + +As an extension, GNU Fortran allows unary plus and unary minus operators +to appear as the second operand of binary arithmetic operators without +the need for parenthesis. + + X = Y * -Z + + +File: gfortran.info, Node: Implicitly convert LOGICAL and INTEGER values, Next: Hollerith constants support, Prev: Unary operators, Up: Extensions implemented in GNU Fortran + +6.1.11 Implicitly convert `LOGICAL' and `INTEGER' values +-------------------------------------------------------- + +As an extension for backwards compatibility with other compilers, GNU +Fortran allows the implicit conversion of `LOGICAL' values to `INTEGER' +values and vice versa. When converting from a `LOGICAL' to an +`INTEGER', `.FALSE.' is interpreted as zero, and `.TRUE.' is +interpreted as one. When converting from `INTEGER' to `LOGICAL', the +value zero is interpreted as `.FALSE.' and any nonzero value is +interpreted as `.TRUE.'. + + LOGICAL :: l + l = 1 + + INTEGER :: i + i = .TRUE. + + However, there is no implicit conversion of `INTEGER' values in +`if'-statements, nor of `LOGICAL' or `INTEGER' values in I/O operations. + + +File: gfortran.info, Node: Hollerith constants support, Next: Cray pointers, Prev: Implicitly convert LOGICAL and INTEGER values, Up: Extensions implemented in GNU Fortran + +6.1.12 Hollerith constants support +---------------------------------- + +GNU Fortran supports Hollerith constants in assignments, function +arguments, and `DATA' and `ASSIGN' statements. A Hollerith constant is +written as a string of characters preceded by an integer constant +indicating the character count, and the letter `H' or `h', and stored +in bytewise fashion in a numeric (`INTEGER', `REAL', or `complex') or +`LOGICAL' variable. The constant will be padded or truncated to fit +the size of the variable in which it is stored. + + Examples of valid uses of Hollerith constants: + complex*16 x(2) + data x /16Habcdefghijklmnop, 16Hqrstuvwxyz012345/ + x(1) = 16HABCDEFGHIJKLMNOP + call foo (4h abc) + + Invalid Hollerith constants examples: + integer*4 a + a = 8H12345678 ! Valid, but the Hollerith constant will be truncated. + a = 0H ! At least one character is needed. + + In general, Hollerith constants were used to provide a rudimentary +facility for handling character strings in early Fortran compilers, +prior to the introduction of `CHARACTER' variables in Fortran 77; in +those cases, the standard-compliant equivalent is to convert the +program to use proper character strings. On occasion, there may be a +case where the intent is specifically to initialize a numeric variable +with a given byte sequence. In these cases, the same result can be +obtained by using the `TRANSFER' statement, as in this example. + INTEGER(KIND=4) :: a + a = TRANSFER ("abcd", a) ! equivalent to: a = 4Habcd + + +File: gfortran.info, Node: Cray pointers, Next: CONVERT specifier, Prev: Hollerith constants support, Up: Extensions implemented in GNU Fortran + +6.1.13 Cray pointers +-------------------- + +Cray pointers are part of a non-standard extension that provides a +C-like pointer in Fortran. This is accomplished through a pair of +variables: an integer "pointer" that holds a memory address, and a +"pointee" that is used to dereference the pointer. + + Pointer/pointee pairs are declared in statements of the form: + pointer ( , ) + or, + pointer ( , ), ( , ), ... + The pointer is an integer that is intended to hold a memory address. +The pointee may be an array or scalar. A pointee can be an assumed +size array--that is, the last dimension may be left unspecified by +using a `*' in place of a value--but a pointee cannot be an assumed +shape array. No space is allocated for the pointee. + + The pointee may have its type declared before or after the pointer +statement, and its array specification (if any) may be declared before, +during, or after the pointer statement. The pointer may be declared as +an integer prior to the pointer statement. However, some machines have +default integer sizes that are different than the size of a pointer, +and so the following code is not portable: + integer ipt + pointer (ipt, iarr) + If a pointer is declared with a kind that is too small, the compiler +will issue a warning; the resulting binary will probably not work +correctly, because the memory addresses stored in the pointers may be +truncated. It is safer to omit the first line of the above example; if +explicit declaration of ipt's type is omitted, then the compiler will +ensure that ipt is an integer variable large enough to hold a pointer. + + Pointer arithmetic is valid with Cray pointers, but it is not the +same as C pointer arithmetic. Cray pointers are just ordinary +integers, so the user is responsible for determining how many bytes to +add to a pointer in order to increment it. Consider the following +example: + real target(10) + real pointee(10) + pointer (ipt, pointee) + ipt = loc (target) + ipt = ipt + 1 + The last statement does not set `ipt' to the address of `target(1)', +as it would in C pointer arithmetic. Adding `1' to `ipt' just adds one +byte to the address stored in `ipt'. + + Any expression involving the pointee will be translated to use the +value stored in the pointer as the base address. + + To get the address of elements, this extension provides an intrinsic +function `LOC()'. The `LOC()' function is equivalent to the `&' +operator in C, except the address is cast to an integer type: + real ar(10) + pointer(ipt, arpte(10)) + real arpte + ipt = loc(ar) ! Makes arpte is an alias for ar + arpte(1) = 1.0 ! Sets ar(1) to 1.0 + The pointer can also be set by a call to the `MALLOC' intrinsic (see +*note MALLOC::). + + Cray pointees often are used to alias an existing variable. For +example: + integer target(10) + integer iarr(10) + pointer (ipt, iarr) + ipt = loc(target) + As long as `ipt' remains unchanged, `iarr' is now an alias for +`target'. The optimizer, however, will not detect this aliasing, so it +is unsafe to use `iarr' and `target' simultaneously. Using a pointee +in any way that violates the Fortran aliasing rules or assumptions is +illegal. It is the user's responsibility to avoid doing this; the +compiler works under the assumption that no such aliasing occurs. + + Cray pointers will work correctly when there is no aliasing (i.e., +when they are used to access a dynamically allocated block of memory), +and also in any routine where a pointee is used, but any variable with +which it shares storage is not used. Code that violates these rules +may not run as the user intends. This is not a bug in the optimizer; +any code that violates the aliasing rules is illegal. (Note that this +is not unique to GNU Fortran; any Fortran compiler that supports Cray +pointers will "incorrectly" optimize code with illegal aliasing.) + + There are a number of restrictions on the attributes that can be +applied to Cray pointers and pointees. Pointees may not have the +`ALLOCATABLE', `INTENT', `OPTIONAL', `DUMMY', `TARGET', `INTRINSIC', or +`POINTER' attributes. Pointers may not have the `DIMENSION', `POINTER', +`TARGET', `ALLOCATABLE', `EXTERNAL', or `INTRINSIC' attributes. +Pointees may not occur in more than one pointer statement. A pointee +cannot be a pointer. Pointees cannot occur in equivalence, common, or +data statements. + + A Cray pointer may also point to a function or a subroutine. For +example, the following excerpt is valid: + implicit none + external sub + pointer (subptr,subpte) + external subpte + subptr = loc(sub) + call subpte() + [...] + subroutine sub + [...] + end subroutine sub + + A pointer may be modified during the course of a program, and this +will change the location to which the pointee refers. However, when +pointees are passed as arguments, they are treated as ordinary +variables in the invoked function. Subsequent changes to the pointer +will not change the base address of the array that was passed. + + +File: gfortran.info, Node: CONVERT specifier, Next: OpenMP, Prev: Cray pointers, Up: Extensions implemented in GNU Fortran + +6.1.14 `CONVERT' specifier +-------------------------- + +GNU Fortran allows the conversion of unformatted data between little- +and big-endian representation to facilitate moving of data between +different systems. The conversion can be indicated with the `CONVERT' +specifier on the `OPEN' statement. *Note GFORTRAN_CONVERT_UNIT::, for +an alternative way of specifying the data format via an environment +variable. + + Valid values for `CONVERT' are: + `CONVERT='NATIVE'' Use the native format. This is the default. + + `CONVERT='SWAP'' Swap between little- and big-endian. + + `CONVERT='LITTLE_ENDIAN'' Use the little-endian representation for + unformatted files. + + `CONVERT='BIG_ENDIAN'' Use the big-endian representation for + unformatted files. + + Using the option could look like this: + open(file='big.dat',form='unformatted',access='sequential', & + convert='big_endian') + + The value of the conversion can be queried by using +`INQUIRE(CONVERT=ch)'. The values returned are `'BIG_ENDIAN'' and +`'LITTLE_ENDIAN''. + + `CONVERT' works between big- and little-endian for `INTEGER' values +of all supported kinds and for `REAL' on IEEE systems of kinds 4 and 8. +Conversion between different "extended double" types on different +architectures such as m68k and x86_64, which GNU Fortran supports as +`REAL(KIND=10)' and `REAL(KIND=16)', will probably not work. + + _Note that the values specified via the GFORTRAN_CONVERT_UNIT +environment variable will override the CONVERT specifier in the open +statement_. This is to give control over data formats to users who do +not have the source code of their program available. + + Using anything but the native representation for unformatted data +carries a significant speed overhead. If speed in this area matters to +you, it is best if you use this only for data that needs to be portable. + + +File: gfortran.info, Node: OpenMP, Next: Argument list functions, Prev: CONVERT specifier, Up: Extensions implemented in GNU Fortran + +6.1.15 OpenMP +------------- + +OpenMP (Open Multi-Processing) is an application programming interface +(API) that supports multi-platform shared memory multiprocessing +programming in C/C++ and Fortran on many architectures, including Unix +and Microsoft Windows platforms. It consists of a set of compiler +directives, library routines, and environment variables that influence +run-time behavior. + + GNU Fortran strives to be compatible to the OpenMP Application +Program Interface v2.5 +(http://www.openmp.org/drupal/mp-documents/spec25.pdf). + + To enable the processing of the OpenMP directive `!$omp' in +free-form source code; the `c$omp', `*$omp' and `!$omp' directives in +fixed form; the `!$' conditional compilation sentinels in free form; +and the `c$', `*$' and `!$' sentinels in fixed form, `gfortran' needs +to be invoked with the `-fopenmp'. This also arranges for automatic +linking of the GNU OpenMP runtime library *note libgomp: (libgomp)Top. + + The OpenMP Fortran runtime library routines are provided both in a +form of a Fortran 90 module named `omp_lib' and in a form of a Fortran +`include' file named `omp_lib.h'. + + An example of a parallelized loop taken from Appendix A.1 of the +OpenMP Application Program Interface v2.5: + SUBROUTINE A1(N, A, B) + INTEGER I, N + REAL B(N), A(N) + !$OMP PARALLEL DO !I is private by default + DO I=2,N + B(I) = (A(I) + A(I-1)) / 2.0 + ENDDO + !$OMP END PARALLEL DO + END SUBROUTINE A1 + + Please note: + * `-fopenmp' implies `-frecursive', i.e., all local arrays will be + allocated on the stack. When porting existing code to OpenMP, this + may lead to surprising results, especially to segmentation faults + if the stacksize is limited. + + * On glibc-based systems, OpenMP enabled applications can not be + statically linked due to limitations of the underlying + pthreads-implementation. It might be possible to get a working + solution if `-Wl,--whole-archive -lpthread -Wl,--no-whole-archive' + is added to the command line. However, this is not supported by + `gcc' and thus not recommended. + + +File: gfortran.info, Node: Argument list functions, Prev: OpenMP, Up: Extensions implemented in GNU Fortran + +6.1.16 Argument list functions `%VAL', `%REF' and `%LOC' +-------------------------------------------------------- + +GNU Fortran supports argument list functions `%VAL', `%REF' and `%LOC' +statements, for backward compatibility with g77. It is recommended +that these should be used only for code that is accessing facilities +outside of GNU Fortran, such as operating system or windowing +facilities. It is best to constrain such uses to isolated portions of a +program-portions that deal specifically and exclusively with low-level, +system-dependent facilities. Such portions might well provide a +portable interface for use by the program as a whole, but are +themselves not portable, and should be thoroughly tested each time they +are rebuilt using a new compiler or version of a compiler. + + `%VAL' passes a scalar argument by value, `%REF' passes it by +reference and `%LOC' passes its memory location. Since gfortran +already passes scalar arguments by reference, `%REF' is in effect a +do-nothing. `%LOC' has the same effect as a fortran pointer. + + An example of passing an argument by value to a C subroutine foo.: + C + C prototype void foo_ (float x); + C + external foo + real*4 x + x = 3.14159 + call foo (%VAL (x)) + end + + For details refer to the g77 manual +`http://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/index.html#Top'. + + Also, the gfortran testsuite c_by_val.f and its partner c_by_val.c +are worth a look. + + +File: gfortran.info, Node: Extensions not implemented in GNU Fortran, Prev: Extensions implemented in GNU Fortran, Up: Extensions + +6.2 Extensions not implemented in GNU Fortran +============================================= + +The long history of the Fortran language, its wide use and broad +userbase, the large number of different compiler vendors and the lack of +some features crucial to users in the first standards have lead to the +existence of a number of important extensions to the language. While +some of the most useful or popular extensions are supported by the GNU +Fortran compiler, not all existing extensions are supported. This +section aims at listing these extensions and offering advice on how +best make code that uses them running with the GNU Fortran compiler. + +* Menu: + +* STRUCTURE and RECORD:: +* ENCODE and DECODE statements:: + + +File: gfortran.info, Node: STRUCTURE and RECORD, Next: ENCODE and DECODE statements, Up: Extensions not implemented in GNU Fortran + +6.2.1 `STRUCTURE' and `RECORD' +------------------------------ + +Structures are user-defined aggregate data types; this functionality was +standardized in Fortran 90 with an different syntax, under the name of +"derived types". Here is an example of code using the non portable +structure syntax: + + ! Declaring a structure named ``item'' and containing three fields: + ! an integer ID, an description string and a floating-point price. + STRUCTURE /item/ + INTEGER id + CHARACTER(LEN=200) description + REAL price + END STRUCTURE + + ! Define two variables, an single record of type ``item'' + ! named ``pear'', and an array of items named ``store_catalog'' + RECORD /item/ pear, store_catalog(100) + + ! We can directly access the fields of both variables + pear.id = 92316 + pear.description = "juicy D'Anjou pear" + pear.price = 0.15 + store_catalog(7).id = 7831 + store_catalog(7).description = "milk bottle" + store_catalog(7).price = 1.2 + + ! We can also manipulate the whole structure + store_catalog(12) = pear + print *, store_catalog(12) + +This code can easily be rewritten in the Fortran 90 syntax as following: + + ! ``STRUCTURE /name/ ... END STRUCTURE'' becomes + ! ``TYPE name ... END TYPE'' + TYPE item + INTEGER id + CHARACTER(LEN=200) description + REAL price + END TYPE + + ! ``RECORD /name/ variable'' becomes ``TYPE(name) variable'' + TYPE(item) pear, store_catalog(100) + + ! Instead of using a dot (.) to access fields of a record, the + ! standard syntax uses a percent sign (%) + pear%id = 92316 + pear%description = "juicy D'Anjou pear" + pear%price = 0.15 + store_catalog(7)%id = 7831 + store_catalog(7)%description = "milk bottle" + store_catalog(7)%price = 1.2 + + ! Assignments of a whole variable don't change + store_catalog(12) = pear + print *, store_catalog(12) + + +File: gfortran.info, Node: ENCODE and DECODE statements, Prev: STRUCTURE and RECORD, Up: Extensions not implemented in GNU Fortran + +6.2.2 `ENCODE' and `DECODE' statements +-------------------------------------- + +GNU Fortran doesn't support the `ENCODE' and `DECODE' statements. +These statements are best replaced by `READ' and `WRITE' statements +involving internal files (`CHARACTER' variables and arrays), which have +been part of the Fortran standard since Fortran 77. For example, +replace a code fragment like + + INTEGER*1 LINE(80) + REAL A, B, C + c ... Code that sets LINE + DECODE (80, 9000, LINE) A, B, C + 9000 FORMAT (1X, 3(F10.5)) + +with the following: + + CHARACTER(LEN=80) LINE + REAL A, B, C + c ... Code that sets LINE + READ (UNIT=LINE, FMT=9000) A, B, C + 9000 FORMAT (1X, 3(F10.5)) + + Similarly, replace a code fragment like + + INTEGER*1 LINE(80) + REAL A, B, C + c ... Code that sets A, B and C + ENCODE (80, 9000, LINE) A, B, C + 9000 FORMAT (1X, 'OUTPUT IS ', 3(F10.5)) + +with the following: + + INTEGER*1 LINE(80) + REAL A, B, C + c ... Code that sets A, B and C + WRITE (UNIT=LINE, FMT=9000) A, B, C + 9000 FORMAT (1X, 'OUTPUT IS ', 3(F10.5)) + + +File: gfortran.info, Node: Intrinsic Procedures, Next: Intrinsic Modules, Prev: Extensions, Up: Top + +7 Intrinsic Procedures +********************** + +* Menu: + +* Introduction: Introduction to Intrinsics +* `ABORT': ABORT, Abort the program +* `ABS': ABS, Absolute value +* `ACCESS': ACCESS, Checks file access modes +* `ACHAR': ACHAR, Character in ASCII collating sequence +* `ACOS': ACOS, Arccosine function +* `ACOSH': ACOSH, Hyperbolic arccosine function +* `ADJUSTL': ADJUSTL, Left adjust a string +* `ADJUSTR': ADJUSTR, Right adjust a string +* `AIMAG': AIMAG, Imaginary part of complex number +* `AINT': AINT, Truncate to a whole number +* `ALARM': ALARM, Set an alarm clock +* `ALL': ALL, Determine if all values are true +* `ALLOCATED': ALLOCATED, Status of allocatable entity +* `AND': AND, Bitwise logical AND +* `ANINT': ANINT, Nearest whole number +* `ANY': ANY, Determine if any values are true +* `ASIN': ASIN, Arcsine function +* `ASINH': ASINH, Hyperbolic arcsine function +* `ASSOCIATED': ASSOCIATED, Status of a pointer or pointer/target pair +* `ATAN': ATAN, Arctangent function +* `ATAN2': ATAN2, Arctangent function +* `ATANH': ATANH, Hyperbolic arctangent function +* `BESSEL_J0': BESSEL_J0, Bessel function of the first kind of order 0 +* `BESSEL_J1': BESSEL_J1, Bessel function of the first kind of order 1 +* `BESSEL_JN': BESSEL_JN, Bessel function of the first kind +* `BESSEL_Y0': BESSEL_Y0, Bessel function of the second kind of order 0 +* `BESSEL_Y1': BESSEL_Y1, Bessel function of the second kind of order 1 +* `BESSEL_YN': BESSEL_YN, Bessel function of the second kind +* `BIT_SIZE': BIT_SIZE, Bit size inquiry function +* `BTEST': BTEST, Bit test function +* `C_ASSOCIATED': C_ASSOCIATED, Status of a C pointer +* `C_F_POINTER': C_F_POINTER, Convert C into Fortran pointer +* `C_F_PROCPOINTER': C_F_PROCPOINTER, Convert C into Fortran procedure pointer +* `C_FUNLOC': C_FUNLOC, Obtain the C address of a procedure +* `C_LOC': C_LOC, Obtain the C address of an object +* `C_SIZEOF': C_SIZEOF, Size in bytes of an expression +* `CEILING': CEILING, Integer ceiling function +* `CHAR': CHAR, Integer-to-character conversion function +* `CHDIR': CHDIR, Change working directory +* `CHMOD': CHMOD, Change access permissions of files +* `CMPLX': CMPLX, Complex conversion function +* `COMMAND_ARGUMENT_COUNT': COMMAND_ARGUMENT_COUNT, Get number of command line arguments +* `COMPLEX': COMPLEX, Complex conversion function +* `CONJG': CONJG, Complex conjugate function +* `COS': COS, Cosine function +* `COSH': COSH, Hyperbolic cosine function +* `COUNT': COUNT, Count occurrences of TRUE in an array +* `CPU_TIME': CPU_TIME, CPU time subroutine +* `CSHIFT': CSHIFT, Circular shift elements of an array +* `CTIME': CTIME, Subroutine (or function) to convert a time into a string +* `DATE_AND_TIME': DATE_AND_TIME, Date and time subroutine +* `DBLE': DBLE, Double precision conversion function +* `DCMPLX': DCMPLX, Double complex conversion function +* `DFLOAT': DFLOAT, Double precision conversion function +* `DIGITS': DIGITS, Significant digits function +* `DIM': DIM, Positive difference +* `DOT_PRODUCT': DOT_PRODUCT, Dot product function +* `DPROD': DPROD, Double product function +* `DREAL': DREAL, Double real part function +* `DTIME': DTIME, Execution time subroutine (or function) +* `EOSHIFT': EOSHIFT, End-off shift elements of an array +* `EPSILON': EPSILON, Epsilon function +* `ERF': ERF, Error function +* `ERFC': ERFC, Complementary error function +* `ERFC_SCALED': ERFC_SCALED, Exponentially-scaled complementary error function +* `ETIME': ETIME, Execution time subroutine (or function) +* `EXIT': EXIT, Exit the program with status. +* `EXP': EXP, Exponential function +* `EXPONENT': EXPONENT, Exponent function +* `FDATE': FDATE, Subroutine (or function) to get the current time as a string +* `FGET': FGET, Read a single character in stream mode from stdin +* `FGETC': FGETC, Read a single character in stream mode +* `FLOAT': FLOAT, Convert integer to default real +* `FLOOR': FLOOR, Integer floor function +* `FLUSH': FLUSH, Flush I/O unit(s) +* `FNUM': FNUM, File number function +* `FPUT': FPUT, Write a single character in stream mode to stdout +* `FPUTC': FPUTC, Write a single character in stream mode +* `FRACTION': FRACTION, Fractional part of the model representation +* `FREE': FREE, Memory de-allocation subroutine +* `FSEEK': FSEEK, Low level file positioning subroutine +* `FSTAT': FSTAT, Get file status +* `FTELL': FTELL, Current stream position +* `GAMMA': GAMMA, Gamma function +* `GERROR': GERROR, Get last system error message +* `GETARG': GETARG, Get command line arguments +* `GET_COMMAND': GET_COMMAND, Get the entire command line +* `GET_COMMAND_ARGUMENT': GET_COMMAND_ARGUMENT, Get command line arguments +* `GETCWD': GETCWD, Get current working directory +* `GETENV': GETENV, Get an environmental variable +* `GET_ENVIRONMENT_VARIABLE': GET_ENVIRONMENT_VARIABLE, Get an environmental variable +* `GETGID': GETGID, Group ID function +* `GETLOG': GETLOG, Get login name +* `GETPID': GETPID, Process ID function +* `GETUID': GETUID, User ID function +* `GMTIME': GMTIME, Convert time to GMT info +* `HOSTNM': HOSTNM, Get system host name +* `HUGE': HUGE, Largest number of a kind +* `HYPOT': HYPOT, Euclidian distance function +* `IACHAR': IACHAR, Code in ASCII collating sequence +* `IAND': IAND, Bitwise logical and +* `IARGC': IARGC, Get the number of command line arguments +* `IBCLR': IBCLR, Clear bit +* `IBITS': IBITS, Bit extraction +* `IBSET': IBSET, Set bit +* `ICHAR': ICHAR, Character-to-integer conversion function +* `IDATE': IDATE, Current local time (day/month/year) +* `IEOR': IEOR, Bitwise logical exclusive or +* `IERRNO': IERRNO, Function to get the last system error number +* `INDEX': INDEX intrinsic, Position of a substring within a string +* `INT': INT, Convert to integer type +* `INT2': INT2, Convert to 16-bit integer type +* `INT8': INT8, Convert to 64-bit integer type +* `IOR': IOR, Bitwise logical or +* `IRAND': IRAND, Integer pseudo-random number +* `IS_IOSTAT_END': IS_IOSTAT_END, Test for end-of-file value +* `IS_IOSTAT_EOR': IS_IOSTAT_EOR, Test for end-of-record value +* `ISATTY': ISATTY, Whether a unit is a terminal device +* `ISHFT': ISHFT, Shift bits +* `ISHFTC': ISHFTC, Shift bits circularly +* `ISNAN': ISNAN, Tests for a NaN +* `ITIME': ITIME, Current local time (hour/minutes/seconds) +* `KILL': KILL, Send a signal to a process +* `KIND': KIND, Kind of an entity +* `LBOUND': LBOUND, Lower dimension bounds of an array +* `LEADZ': LEADZ, Number of leading zero bits of an integer +* `LEN': LEN, Length of a character entity +* `LEN_TRIM': LEN_TRIM, Length of a character entity without trailing blank characters +* `LOG_GAMMA': LOG_GAMMA, Logarithm of the Gamma function +* `LGE': LGE, Lexical greater than or equal +* `LGT': LGT, Lexical greater than +* `LINK': LINK, Create a hard link +* `LLE': LLE, Lexical less than or equal +* `LLT': LLT, Lexical less than +* `LNBLNK': LNBLNK, Index of the last non-blank character in a string +* `LOC': LOC, Returns the address of a variable +* `LOG': LOG, Logarithm function +* `LOG10': LOG10, Base 10 logarithm function +* `LOGICAL': LOGICAL, Convert to logical type +* `LONG': LONG, Convert to integer type +* `LSHIFT': LSHIFT, Left shift bits +* `LSTAT': LSTAT, Get file status +* `LTIME': LTIME, Convert time to local time info +* `MALLOC': MALLOC, Dynamic memory allocation function +* `MATMUL': MATMUL, matrix multiplication +* `MAX': MAX, Maximum value of an argument list +* `MAXEXPONENT': MAXEXPONENT, Maximum exponent of a real kind +* `MAXLOC': MAXLOC, Location of the maximum value within an array +* `MAXVAL': MAXVAL, Maximum value of an array +* `MCLOCK': MCLOCK, Time function +* `MCLOCK8': MCLOCK8, Time function (64-bit) +* `MERGE': MERGE, Merge arrays +* `MIN': MIN, Minimum value of an argument list +* `MINEXPONENT': MINEXPONENT, Minimum exponent of a real kind +* `MINLOC': MINLOC, Location of the minimum value within an array +* `MINVAL': MINVAL, Minimum value of an array +* `MOD': MOD, Remainder function +* `MODULO': MODULO, Modulo function +* `MOVE_ALLOC': MOVE_ALLOC, Move allocation from one object to another +* `MVBITS': MVBITS, Move bits from one integer to another +* `NEAREST': NEAREST, Nearest representable number +* `NEW_LINE': NEW_LINE, New line character +* `NINT': NINT, Nearest whole number +* `NOT': NOT, Logical negation +* `NULL': NULL, Function that returns an disassociated pointer +* `OR': OR, Bitwise logical OR +* `PACK': PACK, Pack an array into an array of rank one +* `PERROR': PERROR, Print system error message +* `PRECISION': PRECISION, Decimal precision of a real kind +* `PRESENT': PRESENT, Determine whether an optional dummy argument is specified +* `PRODUCT': PRODUCT, Product of array elements +* `RADIX': RADIX, Base of a data model +* `RANDOM_NUMBER': RANDOM_NUMBER, Pseudo-random number +* `RANDOM_SEED': RANDOM_SEED, Initialize a pseudo-random number sequence +* `RAND': RAND, Real pseudo-random number +* `RANGE': RANGE, Decimal exponent range +* `RAN': RAN, Real pseudo-random number +* `REAL': REAL, Convert to real type +* `RENAME': RENAME, Rename a file +* `REPEAT': REPEAT, Repeated string concatenation +* `RESHAPE': RESHAPE, Function to reshape an array +* `RRSPACING': RRSPACING, Reciprocal of the relative spacing +* `RSHIFT': RSHIFT, Right shift bits +* `SCALE': SCALE, Scale a real value +* `SCAN': SCAN, Scan a string for the presence of a set of characters +* `SECNDS': SECNDS, Time function +* `SECOND': SECOND, CPU time function +* `SELECTED_CHAR_KIND': SELECTED_CHAR_KIND, Choose character kind +* `SELECTED_INT_KIND': SELECTED_INT_KIND, Choose integer kind +* `SELECTED_REAL_KIND': SELECTED_REAL_KIND, Choose real kind +* `SET_EXPONENT': SET_EXPONENT, Set the exponent of the model +* `SHAPE': SHAPE, Determine the shape of an array +* `SIGN': SIGN, Sign copying function +* `SIGNAL': SIGNAL, Signal handling subroutine (or function) +* `SIN': SIN, Sine function +* `SINH': SINH, Hyperbolic sine function +* `SIZE': SIZE, Function to determine the size of an array +* `SIZEOF': SIZEOF, Determine the size in bytes of an expression +* `SLEEP': SLEEP, Sleep for the specified number of seconds +* `SNGL': SNGL, Convert double precision real to default real +* `SPACING': SPACING, Smallest distance between two numbers of a given type +* `SPREAD': SPREAD, Add a dimension to an array +* `SQRT': SQRT, Square-root function +* `SRAND': SRAND, Reinitialize the random number generator +* `STAT': STAT, Get file status +* `SUM': SUM, Sum of array elements +* `SYMLNK': SYMLNK, Create a symbolic link +* `SYSTEM': SYSTEM, Execute a shell command +* `SYSTEM_CLOCK': SYSTEM_CLOCK, Time function +* `TAN': TAN, Tangent function +* `TANH': TANH, Hyperbolic tangent function +* `TIME': TIME, Time function +* `TIME8': TIME8, Time function (64-bit) +* `TINY': TINY, Smallest positive number of a real kind +* `TRAILZ': TRAILZ, Number of trailing zero bits of an integer +* `TRANSFER': TRANSFER, Transfer bit patterns +* `TRANSPOSE': TRANSPOSE, Transpose an array of rank two +* `TRIM': TRIM, Remove trailing blank characters of a string +* `TTYNAM': TTYNAM, Get the name of a terminal device. +* `UBOUND': UBOUND, Upper dimension bounds of an array +* `UMASK': UMASK, Set the file creation mask +* `UNLINK': UNLINK, Remove a file from the file system +* `UNPACK': UNPACK, Unpack an array of rank one into an array +* `VERIFY': VERIFY, Scan a string for the absence of a set of characters +* `XOR': XOR, Bitwise logical exclusive or + + +File: gfortran.info, Node: Introduction to Intrinsics, Next: ABORT, Up: Intrinsic Procedures + +7.1 Introduction to intrinsic procedures +======================================== + +The intrinsic procedures provided by GNU Fortran include all of the +intrinsic procedures required by the Fortran 95 standard, a set of +intrinsic procedures for backwards compatibility with G77, and a +selection of intrinsic procedures from the Fortran 2003 and Fortran 2008 +standards. Any conflict between a description here and a description in +either the Fortran 95 standard, the Fortran 2003 standard or the Fortran +2008 standard is unintentional, and the standard(s) should be considered +authoritative. + + The enumeration of the `KIND' type parameter is processor defined in +the Fortran 95 standard. GNU Fortran defines the default integer type +and default real type by `INTEGER(KIND=4)' and `REAL(KIND=4)', +respectively. The standard mandates that both data types shall have +another kind, which have more precision. On typical target +architectures supported by `gfortran', this kind type parameter is +`KIND=8'. Hence, `REAL(KIND=8)' and `DOUBLE PRECISION' are equivalent. +In the description of generic intrinsic procedures, the kind type +parameter will be specified by `KIND=*', and in the description of +specific names for an intrinsic procedure the kind type parameter will +be explicitly given (e.g., `REAL(KIND=4)' or `REAL(KIND=8)'). Finally, +for brevity the optional `KIND=' syntax will be omitted. + + Many of the intrinsic procedures take one or more optional arguments. +This document follows the convention used in the Fortran 95 standard, +and denotes such arguments by square brackets. + + GNU Fortran offers the `-std=f95' and `-std=gnu' options, which can +be used to restrict the set of intrinsic procedures to a given +standard. By default, `gfortran' sets the `-std=gnu' option, and so +all intrinsic procedures described here are accepted. There is one +caveat. For a select group of intrinsic procedures, `g77' implemented +both a function and a subroutine. Both classes have been implemented +in `gfortran' for backwards compatibility with `g77'. It is noted here +that these functions and subroutines cannot be intermixed in a given +subprogram. In the descriptions that follow, the applicable standard +for each intrinsic procedure is noted. + + +File: gfortran.info, Node: ABORT, Next: ABS, Prev: Introduction to Intrinsics, Up: Intrinsic Procedures + +7.2 `ABORT' -- Abort the program +================================ + +_Description_: + `ABORT' causes immediate termination of the program. On operating + systems that support a core dump, `ABORT' will produce a core dump + even if the option `-fno-dump-core' is in effect, which is + suitable for debugging purposes. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL ABORT' + +_Return value_: + Does not return. + +_Example_: + program test_abort + integer :: i = 1, j = 2 + if (i /= j) call abort + end program test_abort + +_See also_: + *note EXIT::, *note KILL:: + + + +File: gfortran.info, Node: ABS, Next: ACCESS, Prev: ABORT, Up: Intrinsic Procedures + +7.3 `ABS' -- Absolute value +=========================== + +_Description_: + `ABS(A)' computes the absolute value of `A'. + +_Standard_: + Fortran 77 and later, has overloads that are GNU extensions + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ABS(A)' + +_Arguments_: + A The type of the argument shall be an `INTEGER', + `REAL', or `COMPLEX'. + +_Return value_: + The return value is of the same type and kind as the argument + except the return value is `REAL' for a `COMPLEX' argument. + +_Example_: + program test_abs + integer :: i = -1 + real :: x = -1.e0 + complex :: z = (-1.e0,0.e0) + i = abs(i) + x = abs(x) + x = abs(z) + end program test_abs + +_Specific names_: + Name Argument Return type Standard + `CABS(A)' `COMPLEX(4) `REAL(4)' Fortran 77 and + Z' later + `DABS(A)' `REAL(8) `REAL(8)' Fortran 77 and + X' later + `IABS(A)' `INTEGER(4) `INTEGER(4)' Fortran 77 and + I' later + `ZABS(A)' `COMPLEX(8) `COMPLEX(8)' GNU extension + Z' + `CDABS(A)' `COMPLEX(8) `COMPLEX(8)' GNU extension + Z' + + +File: gfortran.info, Node: ACCESS, Next: ACHAR, Prev: ABS, Up: Intrinsic Procedures + +7.4 `ACCESS' -- Checks file access modes +======================================== + +_Description_: + `ACCESS(NAME, MODE)' checks whether the file NAME exists, is + readable, writable or executable. Except for the executable check, + `ACCESS' can be replaced by Fortran 95's `INQUIRE'. + +_Standard_: + GNU extension + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = ACCESS(NAME, MODE)' + +_Arguments_: + NAME Scalar `CHARACTER' of default kind with the + file name. Tailing blank are ignored unless + the character `achar(0)' is present, then all + characters up to and excluding `achar(0)' are + used as file name. + MODE Scalar `CHARACTER' of default kind with the + file access mode, may be any concatenation of + `"r"' (readable), `"w"' (writable) and `"x"' + (executable), or `" "' to check for existence. + +_Return value_: + Returns a scalar `INTEGER', which is `0' if the file is accessible + in the given mode; otherwise or if an invalid argument has been + given for `MODE' the value `1' is returned. + +_Example_: + program access_test + implicit none + character(len=*), parameter :: file = 'test.dat' + character(len=*), parameter :: file2 = 'test.dat '//achar(0) + if(access(file,' ') == 0) print *, trim(file),' is exists' + if(access(file,'r') == 0) print *, trim(file),' is readable' + if(access(file,'w') == 0) print *, trim(file),' is writable' + if(access(file,'x') == 0) print *, trim(file),' is executable' + if(access(file2,'rwx') == 0) & + print *, trim(file2),' is readable, writable and executable' + end program access_test + +_Specific names_: + +_See also_: + + +File: gfortran.info, Node: ACHAR, Next: ACOS, Prev: ACCESS, Up: Intrinsic Procedures + +7.5 `ACHAR' -- Character in ASCII collating sequence +==================================================== + +_Description_: + `ACHAR(I)' returns the character located at position `I' in the + ASCII collating sequence. + +_Standard_: + Fortran 77 and later, with KIND argument Fortran 2003 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ACHAR(I [, KIND])' + +_Arguments_: + I The type shall be `INTEGER'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `CHARACTER' with a length of one. If + the KIND argument is present, the return value is of the specified + kind and of the default kind otherwise. + +_Example_: + program test_achar + character c + c = achar(32) + end program test_achar + +_Note_: + See *note ICHAR:: for a discussion of converting between numerical + values and formatted string representations. + +_See also_: + *note CHAR::, *note IACHAR::, *note ICHAR:: + + + +File: gfortran.info, Node: ACOS, Next: ACOSH, Prev: ACHAR, Up: Intrinsic Procedures + +7.6 `ACOS' -- Arccosine function +================================ + +_Description_: + `ACOS(X)' computes the arccosine of X (inverse of `COS(X)'). + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ACOS(X)' + +_Arguments_: + X The type shall be `REAL' with a magnitude that + is less than or equal to one. + +_Return value_: + The return value is of type `REAL' and it lies in the range 0 + \leq \acos(x) \leq \pi. The return value if of the same kind as X. + +_Example_: + program test_acos + real(8) :: x = 0.866_8 + x = acos(x) + end program test_acos + +_Specific names_: + Name Argument Return type Standard + `DACOS(X)' `REAL(8) X' `REAL(8)' Fortran 77 and + later + +_See also_: + Inverse function: *note COS:: + + + +File: gfortran.info, Node: ACOSH, Next: ADJUSTL, Prev: ACOS, Up: Intrinsic Procedures + +7.7 `ACOSH' -- Hyperbolic arccosine function +============================================ + +_Description_: + `ACOSH(X)' computes the hyperbolic arccosine of X (inverse of + `COSH(X)'). + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ACOSH(X)' + +_Arguments_: + X The type shall be `REAL' or `COMPLEX'. + +_Return value_: + The return value has the same type and kind as X + +_Example_: + PROGRAM test_acosh + REAL(8), DIMENSION(3) :: x = (/ 1.0, 2.0, 3.0 /) + WRITE (*,*) ACOSH(x) + END PROGRAM + +_Specific names_: + Name Argument Return type Standard + `DACOSH(X)' `REAL(8) X' `REAL(8)' GNU extension + +_See also_: + Inverse function: *note COSH:: + + +File: gfortran.info, Node: ADJUSTL, Next: ADJUSTR, Prev: ACOSH, Up: Intrinsic Procedures + +7.8 `ADJUSTL' -- Left adjust a string +===================================== + +_Description_: + `ADJUSTL(STRING)' will left adjust a string by removing leading + spaces. Spaces are inserted at the end of the string as needed. + +_Standard_: + Fortran 90 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ADJUSTL(STRING)' + +_Arguments_: + STRING The type shall be `CHARACTER'. + +_Return value_: + The return value is of type `CHARACTER' and of the same kind as + STRING where leading spaces are removed and the same number of + spaces are inserted on the end of STRING. + +_Example_: + program test_adjustl + character(len=20) :: str = ' gfortran' + str = adjustl(str) + print *, str + end program test_adjustl + +_See also_: + *note ADJUSTR::, *note TRIM:: + + +File: gfortran.info, Node: ADJUSTR, Next: AIMAG, Prev: ADJUSTL, Up: Intrinsic Procedures + +7.9 `ADJUSTR' -- Right adjust a string +====================================== + +_Description_: + `ADJUSTR(STRING)' will right adjust a string by removing trailing + spaces. Spaces are inserted at the start of the string as needed. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ADJUSTR(STRING)' + +_Arguments_: + STR The type shall be `CHARACTER'. + +_Return value_: + The return value is of type `CHARACTER' and of the same kind as + STRING where trailing spaces are removed and the same number of + spaces are inserted at the start of STRING. + +_Example_: + program test_adjustr + character(len=20) :: str = 'gfortran' + str = adjustr(str) + print *, str + end program test_adjustr + +_See also_: + *note ADJUSTL::, *note TRIM:: + + +File: gfortran.info, Node: AIMAG, Next: AINT, Prev: ADJUSTR, Up: Intrinsic Procedures + +7.10 `AIMAG' -- Imaginary part of complex number +================================================ + +_Description_: + `AIMAG(Z)' yields the imaginary part of complex argument `Z'. The + `IMAG(Z)' and `IMAGPART(Z)' intrinsic functions are provided for + compatibility with `g77', and their use in new code is strongly + discouraged. + +_Standard_: + Fortran 77 and later, has overloads that are GNU extensions + +_Class_: + Elemental function + +_Syntax_: + `RESULT = AIMAG(Z)' + +_Arguments_: + Z The type of the argument shall be `COMPLEX'. + +_Return value_: + The return value is of type `REAL' with the kind type parameter of + the argument. + +_Example_: + program test_aimag + complex(4) z4 + complex(8) z8 + z4 = cmplx(1.e0_4, 0.e0_4) + z8 = cmplx(0.e0_8, 1.e0_8) + print *, aimag(z4), dimag(z8) + end program test_aimag + +_Specific names_: + Name Argument Return type Standard + `DIMAG(Z)' `COMPLEX(8) `REAL(8)' GNU extension + Z' + `IMAG(Z)' `COMPLEX Z' `REAL' GNU extension + `IMAGPART(Z)' `COMPLEX Z' `REAL' GNU extension + + +File: gfortran.info, Node: AINT, Next: ALARM, Prev: AIMAG, Up: Intrinsic Procedures + +7.11 `AINT' -- Truncate to a whole number +========================================= + +_Description_: + `AINT(A [, KIND])' truncates its argument to a whole number. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = AINT(A [, KIND])' + +_Arguments_: + A The type of the argument shall be `REAL'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `REAL' with the kind type parameter of + the argument if the optional KIND is absent; otherwise, the kind + type parameter will be given by KIND. If the magnitude of X is + less than one, `AINT(X)' returns zero. If the magnitude is equal + to or greater than one then it returns the largest whole number + that does not exceed its magnitude. The sign is the same as the + sign of X. + +_Example_: + program test_aint + real(4) x4 + real(8) x8 + x4 = 1.234E0_4 + x8 = 4.321_8 + print *, aint(x4), dint(x8) + x8 = aint(x4,8) + end program test_aint + +_Specific names_: + Name Argument Return type Standard + `DINT(X)' `REAL(8) X' `REAL(8)' Fortran 77 and + later + + +File: gfortran.info, Node: ALARM, Next: ALL, Prev: AINT, Up: Intrinsic Procedures + +7.12 `ALARM' -- Execute a routine after a given delay +===================================================== + +_Description_: + `ALARM(SECONDS, HANDLER [, STATUS])' causes external subroutine + HANDLER to be executed after a delay of SECONDS by using + `alarm(2)' to set up a signal and `signal(2)' to catch it. If + STATUS is supplied, it will be returned with the number of seconds + remaining until any previously scheduled alarm was due to be + delivered, or zero if there was no previously scheduled alarm. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL ALARM(SECONDS, HANDLER [, STATUS])' + +_Arguments_: + SECONDS The type of the argument shall be a scalar + `INTEGER'. It is `INTENT(IN)'. + HANDLER Signal handler (`INTEGER FUNCTION' or + `SUBROUTINE') or dummy/global `INTEGER' + scalar. The scalar values may be either + `SIG_IGN=1' to ignore the alarm generated or + `SIG_DFL=0' to set the default action. It is + `INTENT(IN)'. + STATUS (Optional) STATUS shall be a scalar variable + of the default `INTEGER' kind. It is + `INTENT(OUT)'. + +_Example_: + program test_alarm + external handler_print + integer i + call alarm (3, handler_print, i) + print *, i + call sleep(10) + end program test_alarm + This will cause the external routine HANDLER_PRINT to be called + after 3 seconds. + + +File: gfortran.info, Node: ALL, Next: ALLOCATED, Prev: ALARM, Up: Intrinsic Procedures + +7.13 `ALL' -- All values in MASK along DIM are true +=================================================== + +_Description_: + `ALL(MASK [, DIM])' determines if all the values are true in MASK + in the array along dimension DIM. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = ALL(MASK [, DIM])' + +_Arguments_: + MASK The type of the argument shall be `LOGICAL' and + it shall not be scalar. + DIM (Optional) DIM shall be a scalar integer with + a value that lies between one and the rank of + MASK. + +_Return value_: + `ALL(MASK)' returns a scalar value of type `LOGICAL' where the + kind type parameter is the same as the kind type parameter of + MASK. If DIM is present, then `ALL(MASK, DIM)' returns an array + with the rank of MASK minus 1. The shape is determined from the + shape of MASK where the DIM dimension is elided. + + (A) + `ALL(MASK)' is true if all elements of MASK are true. It + also is true if MASK has zero size; otherwise, it is false. + + (B) + If the rank of MASK is one, then `ALL(MASK,DIM)' is equivalent + to `ALL(MASK)'. If the rank is greater than one, then + `ALL(MASK,DIM)' is determined by applying `ALL' to the array + sections. + +_Example_: + program test_all + logical l + l = all((/.true., .true., .true./)) + print *, l + call section + contains + subroutine section + integer a(2,3), b(2,3) + a = 1 + b = 1 + b(2,2) = 2 + print *, all(a .eq. b, 1) + print *, all(a .eq. b, 2) + end subroutine section + end program test_all + + +File: gfortran.info, Node: ALLOCATED, Next: AND, Prev: ALL, Up: Intrinsic Procedures + +7.14 `ALLOCATED' -- Status of an allocatable entity +=================================================== + +_Description_: + `ALLOCATED(ARRAY)' checks the status of whether X is allocated. + +_Standard_: + Fortran 95 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = ALLOCATED(ARRAY)' + +_Arguments_: + ARRAY The argument shall be an `ALLOCATABLE' array. + +_Return value_: + The return value is a scalar `LOGICAL' with the default logical + kind type parameter. If ARRAY is allocated, `ALLOCATED(ARRAY)' is + `.TRUE.'; otherwise, it returns `.FALSE.' + +_Example_: + program test_allocated + integer :: i = 4 + real(4), allocatable :: x(:) + if (.not. allocated(x)) allocate(x(i)) + end program test_allocated + + +File: gfortran.info, Node: AND, Next: ANINT, Prev: ALLOCATED, Up: Intrinsic Procedures + +7.15 `AND' -- Bitwise logical AND +================================= + +_Description_: + Bitwise logical `AND'. + + This intrinsic routine is provided for backwards compatibility with + GNU Fortran 77. For integer arguments, programmers should consider + the use of the *note IAND:: intrinsic defined by the Fortran + standard. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = AND(I, J)' + +_Arguments_: + I The type shall be either a scalar `INTEGER' + type or a scalar `LOGICAL' type. + J The type shall be the same as the type of I. + +_Return value_: + The return type is either a scalar `INTEGER' or a scalar + `LOGICAL'. If the kind type parameters differ, then the smaller + kind type is implicitly converted to larger kind, and the return + has the larger kind. + +_Example_: + PROGRAM test_and + LOGICAL :: T = .TRUE., F = .FALSE. + INTEGER :: a, b + DATA a / Z'F' /, b / Z'3' / + + WRITE (*,*) AND(T, T), AND(T, F), AND(F, T), AND(F, F) + WRITE (*,*) AND(a, b) + END PROGRAM + +_See also_: + Fortran 95 elemental function: *note IAND:: + + +File: gfortran.info, Node: ANINT, Next: ANY, Prev: AND, Up: Intrinsic Procedures + +7.16 `ANINT' -- Nearest whole number +==================================== + +_Description_: + `ANINT(A [, KIND])' rounds its argument to the nearest whole + number. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ANINT(A [, KIND])' + +_Arguments_: + A The type of the argument shall be `REAL'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type real with the kind type parameter of + the argument if the optional KIND is absent; otherwise, the kind + type parameter will be given by KIND. If A is greater than zero, + `ANINT(A)' returns `AINT(X+0.5)'. If A is less than or equal to + zero then it returns `AINT(X-0.5)'. + +_Example_: + program test_anint + real(4) x4 + real(8) x8 + x4 = 1.234E0_4 + x8 = 4.321_8 + print *, anint(x4), dnint(x8) + x8 = anint(x4,8) + end program test_anint + +_Specific names_: + Name Argument Return type Standard + `DNINT(A)' `REAL(8) A' `REAL(8)' Fortran 77 and + later + + +File: gfortran.info, Node: ANY, Next: ASIN, Prev: ANINT, Up: Intrinsic Procedures + +7.17 `ANY' -- Any value in MASK along DIM is true +================================================= + +_Description_: + `ANY(MASK [, DIM])' determines if any of the values in the logical + array MASK along dimension DIM are `.TRUE.'. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = ANY(MASK [, DIM])' + +_Arguments_: + MASK The type of the argument shall be `LOGICAL' and + it shall not be scalar. + DIM (Optional) DIM shall be a scalar integer with + a value that lies between one and the rank of + MASK. + +_Return value_: + `ANY(MASK)' returns a scalar value of type `LOGICAL' where the + kind type parameter is the same as the kind type parameter of + MASK. If DIM is present, then `ANY(MASK, DIM)' returns an array + with the rank of MASK minus 1. The shape is determined from the + shape of MASK where the DIM dimension is elided. + + (A) + `ANY(MASK)' is true if any element of MASK is true; + otherwise, it is false. It also is false if MASK has zero + size. + + (B) + If the rank of MASK is one, then `ANY(MASK,DIM)' is equivalent + to `ANY(MASK)'. If the rank is greater than one, then + `ANY(MASK,DIM)' is determined by applying `ANY' to the array + sections. + +_Example_: + program test_any + logical l + l = any((/.true., .true., .true./)) + print *, l + call section + contains + subroutine section + integer a(2,3), b(2,3) + a = 1 + b = 1 + b(2,2) = 2 + print *, any(a .eq. b, 1) + print *, any(a .eq. b, 2) + end subroutine section + end program test_any + + +File: gfortran.info, Node: ASIN, Next: ASINH, Prev: ANY, Up: Intrinsic Procedures + +7.18 `ASIN' -- Arcsine function +=============================== + +_Description_: + `ASIN(X)' computes the arcsine of its X (inverse of `SIN(X)'). + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ASIN(X)' + +_Arguments_: + X The type shall be `REAL', and a magnitude that + is less than or equal to one. + +_Return value_: + The return value is of type `REAL' and it lies in the range -\pi / + 2 \leq \asin (x) \leq \pi / 2. The kind type parameter is the + same as X. + +_Example_: + program test_asin + real(8) :: x = 0.866_8 + x = asin(x) + end program test_asin + +_Specific names_: + Name Argument Return type Standard + `DASIN(X)' `REAL(8) X' `REAL(8)' Fortran 77 and + later + +_See also_: + Inverse function: *note SIN:: + + + +File: gfortran.info, Node: ASINH, Next: ASSOCIATED, Prev: ASIN, Up: Intrinsic Procedures + +7.19 `ASINH' -- Hyperbolic arcsine function +=========================================== + +_Description_: + `ASINH(X)' computes the hyperbolic arcsine of X (inverse of + `SINH(X)'). + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ASINH(X)' + +_Arguments_: + X The type shall be `REAL' or `COMPLEX'. + +_Return value_: + The return value is of the same type and kind as X. + +_Example_: + PROGRAM test_asinh + REAL(8), DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /) + WRITE (*,*) ASINH(x) + END PROGRAM + +_Specific names_: + Name Argument Return type Standard + `DASINH(X)' `REAL(8) X' `REAL(8)' GNU extension. + +_See also_: + Inverse function: *note SINH:: + + +File: gfortran.info, Node: ASSOCIATED, Next: ATAN, Prev: ASINH, Up: Intrinsic Procedures + +7.20 `ASSOCIATED' -- Status of a pointer or pointer/target pair +=============================================================== + +_Description_: + `ASSOCIATED(POINTER [, TARGET])' determines the status of the + pointer POINTER or if POINTER is associated with the target TARGET. + +_Standard_: + Fortran 95 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = ASSOCIATED(POINTER [, TARGET])' + +_Arguments_: + POINTER POINTER shall have the `POINTER' attribute and + it can be of any type. + TARGET (Optional) TARGET shall be a pointer or a + target. It must have the same type, kind type + parameter, and array rank as POINTER. + The association status of neither POINTER nor TARGET shall be + undefined. + +_Return value_: + `ASSOCIATED(POINTER)' returns a scalar value of type `LOGICAL(4)'. + There are several cases: + (A) When the optional TARGET is not present then + `ASSOCIATED(POINTER)' is true if POINTER is associated with a + target; otherwise, it returns false. + + (B) If TARGET is present and a scalar target, the result is true if + TARGET is not a zero-sized storage sequence and the target + associated with POINTER occupies the same storage units. If + POINTER is disassociated, the result is false. + + (C) If TARGET is present and an array target, the result is true if + TARGET and POINTER have the same shape, are not zero-sized + arrays, are arrays whose elements are not zero-sized storage + sequences, and TARGET and POINTER occupy the same storage + units in array element order. As in case(B), the result is + false, if POINTER is disassociated. + + (D) If TARGET is present and an scalar pointer, the result is true + if TARGET is associated with POINTER, the target associated + with TARGET are not zero-sized storage sequences and occupy + the same storage units. The result is false, if either + TARGET or POINTER is disassociated. + + (E) If TARGET is present and an array pointer, the result is true if + target associated with POINTER and the target associated with + TARGET have the same shape, are not zero-sized arrays, are + arrays whose elements are not zero-sized storage sequences, + and TARGET and POINTER occupy the same storage units in array + element order. The result is false, if either TARGET or + POINTER is disassociated. + +_Example_: + program test_associated + implicit none + real, target :: tgt(2) = (/1., 2./) + real, pointer :: ptr(:) + ptr => tgt + if (associated(ptr) .eqv. .false.) call abort + if (associated(ptr,tgt) .eqv. .false.) call abort + end program test_associated + +_See also_: + *note NULL:: + + +File: gfortran.info, Node: ATAN, Next: ATAN2, Prev: ASSOCIATED, Up: Intrinsic Procedures + +7.21 `ATAN' -- Arctangent function +================================== + +_Description_: + `ATAN(X)' computes the arctangent of X. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ATAN(X)' + +_Arguments_: + X The type shall be `REAL'. + +_Return value_: + The return value is of type `REAL' and it lies in the range - \pi + / 2 \leq \atan (x) \leq \pi / 2. + +_Example_: + program test_atan + real(8) :: x = 2.866_8 + x = atan(x) + end program test_atan + +_Specific names_: + Name Argument Return type Standard + `DATAN(X)' `REAL(8) X' `REAL(8)' Fortran 77 and + later + +_See also_: + Inverse function: *note TAN:: + + + +File: gfortran.info, Node: ATAN2, Next: ATANH, Prev: ATAN, Up: Intrinsic Procedures + +7.22 `ATAN2' -- Arctangent function +=================================== + +_Description_: + `ATAN2(Y, X)' computes the arctangent of the complex number X + i + Y. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ATAN2(Y, X)' + +_Arguments_: + Y The type shall be `REAL'. + X The type and kind type parameter shall be the + same as Y. If Y is zero, then X must be + nonzero. + +_Return value_: + The return value has the same type and kind type parameter as Y. + It is the principal value of the complex number X + i Y. If X is + nonzero, then it lies in the range -\pi \le \atan (x) \leq \pi. + The sign is positive if Y is positive. If Y is zero, then the + return value is zero if X is positive and \pi if X is negative. + Finally, if X is zero, then the magnitude of the result is \pi/2. + +_Example_: + program test_atan2 + real(4) :: x = 1.e0_4, y = 0.5e0_4 + x = atan2(y,x) + end program test_atan2 + +_Specific names_: + Name Argument Return type Standard + `DATAN2(X)' `REAL(8) X' `REAL(8)' Fortran 77 and + later + + +File: gfortran.info, Node: ATANH, Next: BESSEL_J0, Prev: ATAN2, Up: Intrinsic Procedures + +7.23 `ATANH' -- Hyperbolic arctangent function +============================================== + +_Description_: + `ATANH(X)' computes the hyperbolic arctangent of X (inverse of + `TANH(X)'). + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ATANH(X)' + +_Arguments_: + X The type shall be `REAL' or `COMPLEX'. + +_Return value_: + The return value has same type and kind as X. + +_Example_: + PROGRAM test_atanh + REAL, DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /) + WRITE (*,*) ATANH(x) + END PROGRAM + +_Specific names_: + Name Argument Return type Standard + `DATANH(X)' `REAL(8) X' `REAL(8)' GNU extension + +_See also_: + Inverse function: *note TANH:: + + +File: gfortran.info, Node: BESSEL_J0, Next: BESSEL_J1, Prev: ATANH, Up: Intrinsic Procedures + +7.24 `BESSEL_J0' -- Bessel function of the first kind of order 0 +================================================================ + +_Description_: + `BESSEL_J0(X)' computes the Bessel function of the first kind of + order 0 of X. This function is available under the name `BESJ0' as + a GNU extension. + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = BESSEL_J0(X)' + +_Arguments_: + X The type shall be `REAL', and it shall be + scalar. + +_Return value_: + The return value is of type `REAL' and lies in the range - + 0.4027... \leq Bessel (0,x) \leq 1. It has the same kind as X. + +_Example_: + program test_besj0 + real(8) :: x = 0.0_8 + x = bessel_j0(x) + end program test_besj0 + +_Specific names_: + Name Argument Return type Standard + `DBESJ0(X)' `REAL(8) X' `REAL(8)' GNU extension + + +File: gfortran.info, Node: BESSEL_J1, Next: BESSEL_JN, Prev: BESSEL_J0, Up: Intrinsic Procedures + +7.25 `BESSEL_J1' -- Bessel function of the first kind of order 1 +================================================================ + +_Description_: + `BESSEL_J1(X)' computes the Bessel function of the first kind of + order 1 of X. This function is available under the name `BESJ1' as + a GNU extension. + +_Standard_: + Fortran 2008 + +_Class_: + Elemental function + +_Syntax_: + `RESULT = BESSEL_J1(X)' + +_Arguments_: + X The type shall be `REAL', and it shall be + scalar. + +_Return value_: + The return value is of type `REAL' and it lies in the range - + 0.5818... \leq Bessel (0,x) \leq 0.5818 . It has the same kind as + X. + +_Example_: + program test_besj1 + real(8) :: x = 1.0_8 + x = bessel_j1(x) + end program test_besj1 + +_Specific names_: + Name Argument Return type Standard + `DBESJ1(X)' `REAL(8) X' `REAL(8)' GNU extension + + +File: gfortran.info, Node: BESSEL_JN, Next: BESSEL_Y0, Prev: BESSEL_J1, Up: Intrinsic Procedures + +7.26 `BESSEL_JN' -- Bessel function of the first kind +===================================================== + +_Description_: + `BESSEL_JN(N, X)' computes the Bessel function of the first kind of + order N of X. This function is available under the name `BESJN' as + a GNU extension. + + If both arguments are arrays, their ranks and shapes shall conform. + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = BESSEL_JN(N, X)' + +_Arguments_: + N Shall be a scalar or an array of type + `INTEGER'. + X Shall be a scalar or an array of type `REAL'. + +_Return value_: + The return value is a scalar of type `REAL'. It has the same kind + as X. + +_Example_: + program test_besjn + real(8) :: x = 1.0_8 + x = bessel_jn(5,x) + end program test_besjn + +_Specific names_: + Name Argument Return type Standard + `DBESJN(X)' `INTEGER N' `REAL(8)' GNU extension + `REAL(8) X' + + +File: gfortran.info, Node: BESSEL_Y0, Next: BESSEL_Y1, Prev: BESSEL_JN, Up: Intrinsic Procedures + +7.27 `BESSEL_Y0' -- Bessel function of the second kind of order 0 +================================================================= + +_Description_: + `BESSEL_Y0(X)' computes the Bessel function of the second kind of + order 0 of X. This function is available under the name `BESY0' as + a GNU extension. + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = BESSEL_Y0(X)' + +_Arguments_: + X The type shall be `REAL', and it shall be + scalar. + +_Return value_: + The return value is a scalar of type `REAL'. It has the same kind + as X. + +_Example_: + program test_besy0 + real(8) :: x = 0.0_8 + x = bessel_y0(x) + end program test_besy0 + +_Specific names_: + Name Argument Return type Standard + `DBESY0(X)' `REAL(8) X' `REAL(8)' GNU extension + + +File: gfortran.info, Node: BESSEL_Y1, Next: BESSEL_YN, Prev: BESSEL_Y0, Up: Intrinsic Procedures + +7.28 `BESSEL_Y1' -- Bessel function of the second kind of order 1 +================================================================= + +_Description_: + `BESSEL_Y1(X)' computes the Bessel function of the second kind of + order 1 of X. This function is available under the name `BESY1' as + a GNU extension. + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = BESSEL_Y1(X)' + +_Arguments_: + X The type shall be `REAL', and it shall be + scalar. + +_Return value_: + The return value is a scalar of type `REAL'. It has the same kind + as X. + +_Example_: + program test_besy1 + real(8) :: x = 1.0_8 + x = bessel_y1(x) + end program test_besy1 + +_Specific names_: + Name Argument Return type Standard + `DBESY1(X)' `REAL(8) X' `REAL(8)' GNU extension + + +File: gfortran.info, Node: BESSEL_YN, Next: BIT_SIZE, Prev: BESSEL_Y1, Up: Intrinsic Procedures + +7.29 `BESSEL_YN' -- Bessel function of the second kind +====================================================== + +_Description_: + `BESSEL_YN(N, X)' computes the Bessel function of the second kind + of order N of X. This function is available under the name `BESYN' + as a GNU extension. + + If both arguments are arrays, their ranks and shapes shall conform. + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = BESSEL_YN(N, X)' + +_Arguments_: + N Shall be a scalar or an array of type + `INTEGER'. + X Shall be a scalar or an array of type `REAL'. + +_Return value_: + The return value is a scalar of type `REAL'. It has the same kind + as X. + +_Example_: + program test_besyn + real(8) :: x = 1.0_8 + x = bessel_yn(5,x) + end program test_besyn + +_Specific names_: + Name Argument Return type Standard + `DBESYN(N,X)' `INTEGER N' `REAL(8)' GNU extension + `REAL(8) + X' + + +File: gfortran.info, Node: BIT_SIZE, Next: BTEST, Prev: BESSEL_YN, Up: Intrinsic Procedures + +7.30 `BIT_SIZE' -- Bit size inquiry function +============================================ + +_Description_: + `BIT_SIZE(I)' returns the number of bits (integer precision plus + sign bit) represented by the type of I. The result of + `BIT_SIZE(I)' is independent of the actual value of I. + +_Standard_: + Fortran 95 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = BIT_SIZE(I)' + +_Arguments_: + I The type shall be `INTEGER'. + +_Return value_: + The return value is of type `INTEGER' + +_Example_: + program test_bit_size + integer :: i = 123 + integer :: size + size = bit_size(i) + print *, size + end program test_bit_size + + +File: gfortran.info, Node: BTEST, Next: C_ASSOCIATED, Prev: BIT_SIZE, Up: Intrinsic Procedures + +7.31 `BTEST' -- Bit test function +================================= + +_Description_: + `BTEST(I,POS)' returns logical `.TRUE.' if the bit at POS in I is + set. The counting of the bits starts at 0. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = BTEST(I, POS)' + +_Arguments_: + I The type shall be `INTEGER'. + POS The type shall be `INTEGER'. + +_Return value_: + The return value is of type `LOGICAL' + +_Example_: + program test_btest + integer :: i = 32768 + 1024 + 64 + integer :: pos + logical :: bool + do pos=0,16 + bool = btest(i, pos) + print *, pos, bool + end do + end program test_btest + + +File: gfortran.info, Node: C_ASSOCIATED, Next: C_F_POINTER, Prev: BTEST, Up: Intrinsic Procedures + +7.32 `C_ASSOCIATED' -- Status of a C pointer +============================================ + +_Description_: + `C_ASSOCIATED(c_prt_1[, c_ptr_2])' determines the status of the C + pointer C_PTR_1 or if C_PTR_1 is associated with the target + C_PTR_2. + +_Standard_: + Fortran 2003 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = C_ASSOCIATED(c_prt_1[, c_ptr_2])' + +_Arguments_: + C_PTR_1 Scalar of the type `C_PTR' or `C_FUNPTR'. + C_PTR_2 (Optional) Scalar of the same type as C_PTR_1. + +_Return value_: + The return value is of type `LOGICAL'; it is `.false.' if either + C_PTR_1 is a C NULL pointer or if C_PTR1 and C_PTR_2 point to + different addresses. + +_Example_: + subroutine association_test(a,b) + use iso_c_binding, only: c_associated, c_loc, c_ptr + implicit none + real, pointer :: a + type(c_ptr) :: b + if(c_associated(b, c_loc(a))) & + stop 'b and a do not point to same target' + end subroutine association_test + +_See also_: + *note C_LOC::, *note C_FUNLOC:: + + +File: gfortran.info, Node: C_FUNLOC, Next: C_LOC, Prev: C_F_PROCPOINTER, Up: Intrinsic Procedures + +7.33 `C_FUNLOC' -- Obtain the C address of a procedure +====================================================== + +_Description_: + `C_FUNLOC(x)' determines the C address of the argument. + +_Standard_: + Fortran 2003 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = C_FUNLOC(x)' + +_Arguments_: + X Interoperable function or pointer to such + function. + +_Return value_: + The return value is of type `C_FUNPTR' and contains the C address + of the argument. + +_Example_: + module x + use iso_c_binding + implicit none + contains + subroutine sub(a) bind(c) + real(c_float) :: a + a = sqrt(a)+5.0 + end subroutine sub + end module x + program main + use iso_c_binding + use x + implicit none + interface + subroutine my_routine(p) bind(c,name='myC_func') + import :: c_funptr + type(c_funptr), intent(in) :: p + end subroutine + end interface + call my_routine(c_funloc(sub)) + end program main + +_See also_: + *note C_ASSOCIATED::, *note C_LOC::, *note C_F_POINTER::, *note + C_F_PROCPOINTER:: + + +File: gfortran.info, Node: C_F_PROCPOINTER, Next: C_FUNLOC, Prev: C_F_POINTER, Up: Intrinsic Procedures + +7.34 `C_F_PROCPOINTER' -- Convert C into Fortran procedure pointer +================================================================== + +_Description_: + `C_F_PROCPOINTER(CPTR, FPTR)' Assign the target of the C function + pointer CPTR to the Fortran procedure pointer FPTR. + + Note: Due to the currently lacking support of procedure pointers + in GNU Fortran this function is not fully operable. + +_Standard_: + Fortran 2003 and later + +_Class_: + Subroutine + +_Syntax_: + `CALL C_F_PROCPOINTER(cptr, fptr)' + +_Arguments_: + CPTR scalar of the type `C_FUNPTR'. It is + `INTENT(IN)'. + FPTR procedure pointer interoperable with CPTR. It + is `INTENT(OUT)'. + +_Example_: + program main + use iso_c_binding + implicit none + abstract interface + function func(a) + import :: c_float + real(c_float), intent(in) :: a + real(c_float) :: func + end function + end interface + interface + function getIterFunc() bind(c,name="getIterFunc") + import :: c_funptr + type(c_funptr) :: getIterFunc + end function + end interface + type(c_funptr) :: cfunptr + procedure(func), pointer :: myFunc + cfunptr = getIterFunc() + call c_f_procpointer(cfunptr, myFunc) + end program main + +_See also_: + *note C_LOC::, *note C_F_POINTER:: + + +File: gfortran.info, Node: C_F_POINTER, Next: C_F_PROCPOINTER, Prev: C_ASSOCIATED, Up: Intrinsic Procedures + +7.35 `C_F_POINTER' -- Convert C into Fortran pointer +==================================================== + +_Description_: + `C_F_POINTER(CPTR, FPTR[, SHAPE])' Assign the target the C pointer + CPTR to the Fortran pointer FPTR and specify its shape. + +_Standard_: + Fortran 2003 and later + +_Class_: + Subroutine + +_Syntax_: + `CALL C_F_POINTER(CPTR, FPTR[, SHAPE])' + +_Arguments_: + CPTR scalar of the type `C_PTR'. It is `INTENT(IN)'. + FPTR pointer interoperable with CPTR. It is + `INTENT(OUT)'. + SHAPE (Optional) Rank-one array of type `INTEGER' + with `INTENT(IN)'. It shall be present if and + only if FPTR is an array. The size must be + equal to the rank of FPTR. + +_Example_: + program main + use iso_c_binding + implicit none + interface + subroutine my_routine(p) bind(c,name='myC_func') + import :: c_ptr + type(c_ptr), intent(out) :: p + end subroutine + end interface + type(c_ptr) :: cptr + real,pointer :: a(:) + call my_routine(cptr) + call c_f_pointer(cptr, a, [12]) + end program main + +_See also_: + *note C_LOC::, *note C_F_PROCPOINTER:: + + +File: gfortran.info, Node: C_LOC, Next: C_SIZEOF, Prev: C_FUNLOC, Up: Intrinsic Procedures + +7.36 `C_LOC' -- Obtain the C address of an object +================================================= + +_Description_: + `C_LOC(X)' determines the C address of the argument. + +_Standard_: + Fortran 2003 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = C_LOC(X)' + +_Arguments_: + X Associated scalar pointer or interoperable + scalar or allocated allocatable variable with + `TARGET' attribute. + +_Return value_: + The return value is of type `C_PTR' and contains the C address of + the argument. + +_Example_: + subroutine association_test(a,b) + use iso_c_binding, only: c_associated, c_loc, c_ptr + implicit none + real, pointer :: a + type(c_ptr) :: b + if(c_associated(b, c_loc(a))) & + stop 'b and a do not point to same target' + end subroutine association_test + +_See also_: + *note C_ASSOCIATED::, *note C_FUNLOC::, *note C_F_POINTER::, *note + C_F_PROCPOINTER:: + + +File: gfortran.info, Node: C_SIZEOF, Next: CEILING, Prev: C_LOC, Up: Intrinsic Procedures + +7.37 `C_SIZEOF' -- Size in bytes of an expression +================================================= + +_Description_: + `C_SIZEOF(X)' calculates the number of bytes of storage the + expression `X' occupies. + +_Standard_: + Fortran 2008 + +_Class_: + Intrinsic function + +_Syntax_: + `N = C_SIZEOF(X)' + +_Arguments_: + X The argument shall be of any type, rank or + shape. + +_Return value_: + The return value is of type integer and of the system-dependent + kind C_SIZE_T (from the ISO_C_BINDING module). Its value is the + number of bytes occupied by the argument. If the argument has the + `POINTER' attribute, the number of bytes of the storage area + pointed to is returned. If the argument is of a derived type with + `POINTER' or `ALLOCATABLE' components, the return value doesn't + account for the sizes of the data pointed to by these components. + +_Example_: + use iso_c_binding + integer(c_int) :: i + real(c_float) :: r, s(5) + print *, (c_sizeof(s)/c_sizeof(r) == 5) + end + The example will print `.TRUE.' unless you are using a platform + where default `REAL' variables are unusually padded. + +_See also_: + *note SIZEOF:: + + +File: gfortran.info, Node: CEILING, Next: CHAR, Prev: C_SIZEOF, Up: Intrinsic Procedures + +7.38 `CEILING' -- Integer ceiling function +========================================== + +_Description_: + `CEILING(A)' returns the least integer greater than or equal to A. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = CEILING(A [, KIND])' + +_Arguments_: + A The type shall be `REAL'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `INTEGER(KIND)' if KIND is present and + a default-kind `INTEGER' otherwise. + +_Example_: + program test_ceiling + real :: x = 63.29 + real :: y = -63.59 + print *, ceiling(x) ! returns 64 + print *, ceiling(y) ! returns -63 + end program test_ceiling + +_See also_: + *note FLOOR::, *note NINT:: + + + +File: gfortran.info, Node: CHAR, Next: CHDIR, Prev: CEILING, Up: Intrinsic Procedures + +7.39 `CHAR' -- Character conversion function +============================================ + +_Description_: + `CHAR(I [, KIND])' returns the character represented by the + integer I. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = CHAR(I [, KIND])' + +_Arguments_: + I The type shall be `INTEGER'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `CHARACTER(1)' + +_Example_: + program test_char + integer :: i = 74 + character(1) :: c + c = char(i) + print *, i, c ! returns 'J' + end program test_char + +_Note_: + See *note ICHAR:: for a discussion of converting between numerical + values and formatted string representations. + +_See also_: + *note ACHAR::, *note IACHAR::, *note ICHAR:: + + + +File: gfortran.info, Node: CHDIR, Next: CHMOD, Prev: CHAR, Up: Intrinsic Procedures + +7.40 `CHDIR' -- Change working directory +======================================== + +_Description_: + Change current working directory to a specified path. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL CHDIR(NAME [, STATUS])' + `STATUS = CHDIR(NAME)' + +_Arguments_: + NAME The type shall be `CHARACTER' of default kind + and shall specify a valid path within the file + system. + STATUS (Optional) `INTEGER' status flag of the default + kind. Returns 0 on success, and a system + specific and nonzero error code otherwise. + +_Example_: + PROGRAM test_chdir + CHARACTER(len=255) :: path + CALL getcwd(path) + WRITE(*,*) TRIM(path) + CALL chdir("/tmp") + CALL getcwd(path) + WRITE(*,*) TRIM(path) + END PROGRAM + +_See also_: + *note GETCWD:: + + +File: gfortran.info, Node: CHMOD, Next: CMPLX, Prev: CHDIR, Up: Intrinsic Procedures + +7.41 `CHMOD' -- Change access permissions of files +================================================== + +_Description_: + `CHMOD' changes the permissions of a file. This function invokes + `/bin/chmod' and might therefore not work on all platforms. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL CHMOD(NAME, MODE[, STATUS])' + `STATUS = CHMOD(NAME, MODE)' + +_Arguments_: + NAME Scalar `CHARACTER' of default kind with the + file name. Trailing blanks are ignored unless + the character `achar(0)' is present, then all + characters up to and excluding `achar(0)' are + used as the file name. + MODE Scalar `CHARACTER' of default kind giving the + file permission. MODE uses the same syntax as + the MODE argument of `/bin/chmod'. + STATUS (optional) scalar `INTEGER', which is `0' on + success and nonzero otherwise. + +_Return value_: + In either syntax, STATUS is set to `0' on success and nonzero + otherwise. + +_Example_: + `CHMOD' as subroutine + program chmod_test + implicit none + integer :: status + call chmod('test.dat','u+x',status) + print *, 'Status: ', status + end program chmod_test + `CHMOD' as function: + program chmod_test + implicit none + integer :: status + status = chmod('test.dat','u+x') + print *, 'Status: ', status + end program chmod_test + + + +File: gfortran.info, Node: CMPLX, Next: COMMAND_ARGUMENT_COUNT, Prev: CHMOD, Up: Intrinsic Procedures + +7.42 `CMPLX' -- Complex conversion function +=========================================== + +_Description_: + `CMPLX(X [, Y [, KIND]])' returns a complex number where X is + converted to the real component. If Y is present it is converted + to the imaginary component. If Y is not present then the + imaginary component is set to 0.0. If X is complex then Y must + not be present. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = CMPLX(X [, Y [, KIND]])' + +_Arguments_: + X The type may be `INTEGER', `REAL', or + `COMPLEX'. + Y (Optional; only allowed if X is not + `COMPLEX'.) May be `INTEGER' or `REAL'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of `COMPLEX' type, with a kind equal to KIND + if it is specified. If KIND is not specified, the result is of + the default `COMPLEX' kind, regardless of the kinds of X and Y. + +_Example_: + program test_cmplx + integer :: i = 42 + real :: x = 3.14 + complex :: z + z = cmplx(i, x) + print *, z, cmplx(x) + end program test_cmplx + +_See also_: + *note COMPLEX:: + + +File: gfortran.info, Node: COMMAND_ARGUMENT_COUNT, Next: COMPLEX, Prev: CMPLX, Up: Intrinsic Procedures + +7.43 `COMMAND_ARGUMENT_COUNT' -- Get number of command line arguments +===================================================================== + +_Description_: + `COMMAND_ARGUMENT_COUNT()' returns the number of arguments passed + on the command line when the containing program was invoked. + +_Standard_: + Fortran 2003 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = COMMAND_ARGUMENT_COUNT()' + +_Arguments_: + None + +_Return value_: + The return value is of type `INTEGER(4)' + +_Example_: + program test_command_argument_count + integer :: count + count = command_argument_count() + print *, count + end program test_command_argument_count + +_See also_: + *note GET_COMMAND::, *note GET_COMMAND_ARGUMENT:: + + +File: gfortran.info, Node: COMPLEX, Next: CONJG, Prev: COMMAND_ARGUMENT_COUNT, Up: Intrinsic Procedures + +7.44 `COMPLEX' -- Complex conversion function +============================================= + +_Description_: + `COMPLEX(X, Y)' returns a complex number where X is converted to + the real component and Y is converted to the imaginary component. + +_Standard_: + GNU extension + +_Class_: + Elemental function + +_Syntax_: + `RESULT = COMPLEX(X, Y)' + +_Arguments_: + X The type may be `INTEGER' or `REAL'. + Y The type may be `INTEGER' or `REAL'. + +_Return value_: + If X and Y are both of `INTEGER' type, then the return value is of + default `COMPLEX' type. + + If X and Y are of `REAL' type, or one is of `REAL' type and one is + of `INTEGER' type, then the return value is of `COMPLEX' type with + a kind equal to that of the `REAL' argument with the highest + precision. + +_Example_: + program test_complex + integer :: i = 42 + real :: x = 3.14 + print *, complex(i, x) + end program test_complex + +_See also_: + *note CMPLX:: + + +File: gfortran.info, Node: CONJG, Next: COS, Prev: COMPLEX, Up: Intrinsic Procedures + +7.45 `CONJG' -- Complex conjugate function +========================================== + +_Description_: + `CONJG(Z)' returns the conjugate of Z. If Z is `(x, y)' then the + result is `(x, -y)' + +_Standard_: + Fortran 77 and later, has overloads that are GNU extensions + +_Class_: + Elemental function + +_Syntax_: + `Z = CONJG(Z)' + +_Arguments_: + Z The type shall be `COMPLEX'. + +_Return value_: + The return value is of type `COMPLEX'. + +_Example_: + program test_conjg + complex :: z = (2.0, 3.0) + complex(8) :: dz = (2.71_8, -3.14_8) + z= conjg(z) + print *, z + dz = dconjg(dz) + print *, dz + end program test_conjg + +_Specific names_: + Name Argument Return type Standard + `DCONJG(Z)' `COMPLEX(8) `COMPLEX(8)' GNU extension + Z' + + +File: gfortran.info, Node: COS, Next: COSH, Prev: CONJG, Up: Intrinsic Procedures + +7.46 `COS' -- Cosine function +============================= + +_Description_: + `COS(X)' computes the cosine of X. + +_Standard_: + Fortran 77 and later, has overloads that are GNU extensions + +_Class_: + Elemental function + +_Syntax_: + `RESULT = COS(X)' + +_Arguments_: + X The type shall be `REAL' or `COMPLEX'. + +_Return value_: + The return value is of type `REAL' and it lies in the range -1 + \leq \cos (x) \leq 1. The kind type parameter is the same as X. + +_Example_: + program test_cos + real :: x = 0.0 + x = cos(x) + end program test_cos + +_Specific names_: + Name Argument Return type Standard + `DCOS(X)' `REAL(8) X' `REAL(8)' Fortran 77 and + later + `CCOS(X)' `COMPLEX(4) `COMPLEX(4)' Fortran 77 and + X' later + `ZCOS(X)' `COMPLEX(8) `COMPLEX(8)' GNU extension + X' + `CDCOS(X)' `COMPLEX(8) `COMPLEX(8)' GNU extension + X' + +_See also_: + Inverse function: *note ACOS:: + + + +File: gfortran.info, Node: COSH, Next: COUNT, Prev: COS, Up: Intrinsic Procedures + +7.47 `COSH' -- Hyperbolic cosine function +========================================= + +_Description_: + `COSH(X)' computes the hyperbolic cosine of X. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `X = COSH(X)' + +_Arguments_: + X The type shall be `REAL'. + +_Return value_: + The return value is of type `REAL' and it is positive ( \cosh (x) + \geq 0 ). For a `REAL' argument X, \cosh (x) \geq 1 . The + return value is of the same kind as X. + +_Example_: + program test_cosh + real(8) :: x = 1.0_8 + x = cosh(x) + end program test_cosh + +_Specific names_: + Name Argument Return type Standard + `DCOSH(X)' `REAL(8) X' `REAL(8)' Fortran 77 and + later + +_See also_: + Inverse function: *note ACOSH:: + + + +File: gfortran.info, Node: COUNT, Next: CPU_TIME, Prev: COSH, Up: Intrinsic Procedures + +7.48 `COUNT' -- Count function +============================== + +_Description_: + `COUNT(MASK [, DIM [, KIND]])' counts the number of `.TRUE.' + elements of MASK along the dimension of DIM. If DIM is omitted it + is taken to be `1'. DIM is a scalar of type `INTEGER' in the + range of 1 /leq DIM /leq n) where n is the rank of MASK. + +_Standard_: + Fortran 95 and later, with KIND argument Fortran 2003 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = COUNT(MASK [, DIM [, KIND]])' + +_Arguments_: + MASK The type shall be `LOGICAL'. + DIM (Optional) The type shall be `INTEGER'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `INTEGER' and of kind KIND. If KIND is + absent, the return value is of default integer kind. The result + has a rank equal to that of MASK. + +_Example_: + program test_count + integer, dimension(2,3) :: a, b + logical, dimension(2,3) :: mask + a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /)) + b = reshape( (/ 0, 7, 3, 4, 5, 8 /), (/ 2, 3 /)) + print '(3i3)', a(1,:) + print '(3i3)', a(2,:) + print * + print '(3i3)', b(1,:) + print '(3i3)', b(2,:) + print * + mask = a.ne.b + print '(3l3)', mask(1,:) + print '(3l3)', mask(2,:) + print * + print '(3i3)', count(mask) + print * + print '(3i3)', count(mask, 1) + print * + print '(3i3)', count(mask, 2) + end program test_count + + +File: gfortran.info, Node: CPU_TIME, Next: CSHIFT, Prev: COUNT, Up: Intrinsic Procedures + +7.49 `CPU_TIME' -- CPU elapsed time in seconds +============================================== + +_Description_: + Returns a `REAL' value representing the elapsed CPU time in + seconds. This is useful for testing segments of code to determine + execution time. + + If a time source is available, time will be reported with + microsecond resolution. If no time source is available, TIME is + set to `-1.0'. + + Note that TIME may contain a, system dependent, arbitrary offset + and may not start with `0.0'. For `CPU_TIME', the absolute value + is meaningless, only differences between subsequent calls to this + subroutine, as shown in the example below, should be used. + +_Standard_: + Fortran 95 and later + +_Class_: + Subroutine + +_Syntax_: + `CALL CPU_TIME(TIME)' + +_Arguments_: + TIME The type shall be `REAL' with `INTENT(OUT)'. + +_Return value_: + None + +_Example_: + program test_cpu_time + real :: start, finish + call cpu_time(start) + ! put code to test here + call cpu_time(finish) + print '("Time = ",f6.3," seconds.")',finish-start + end program test_cpu_time + +_See also_: + *note SYSTEM_CLOCK::, *note DATE_AND_TIME:: + + +File: gfortran.info, Node: CSHIFT, Next: CTIME, Prev: CPU_TIME, Up: Intrinsic Procedures + +7.50 `CSHIFT' -- Circular shift elements of an array +==================================================== + +_Description_: + `CSHIFT(ARRAY, SHIFT [, DIM])' performs a circular shift on + elements of ARRAY along the dimension of DIM. If DIM is omitted + it is taken to be `1'. DIM is a scalar of type `INTEGER' in the + range of 1 /leq DIM /leq n) where n is the rank of ARRAY. If the + rank of ARRAY is one, then all elements of ARRAY are shifted by + SHIFT places. If rank is greater than one, then all complete rank + one sections of ARRAY along the given dimension are shifted. + Elements shifted out one end of each rank one section are shifted + back in the other end. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = CSHIFT(ARRAY, SHIFT [, DIM])' + +_Arguments_: + ARRAY Shall be an array of any type. + SHIFT The type shall be `INTEGER'. + DIM The type shall be `INTEGER'. + +_Return value_: + Returns an array of same type and rank as the ARRAY argument. + +_Example_: + program test_cshift + integer, dimension(3,3) :: a + a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /)) + print '(3i3)', a(1,:) + print '(3i3)', a(2,:) + print '(3i3)', a(3,:) + a = cshift(a, SHIFT=(/1, 2, -1/), DIM=2) + print * + print '(3i3)', a(1,:) + print '(3i3)', a(2,:) + print '(3i3)', a(3,:) + end program test_cshift + + +File: gfortran.info, Node: CTIME, Next: DATE_AND_TIME, Prev: CSHIFT, Up: Intrinsic Procedures + +7.51 `CTIME' -- Convert a time into a string +============================================ + +_Description_: + `CTIME' converts a system time value, such as returned by + `TIME8()', to a string of the form `Sat Aug 19 18:13:14 1995'. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL CTIME(TIME, RESULT)'. + `RESULT = CTIME(TIME)', (not recommended). + +_Arguments_: + TIME The type shall be of type `INTEGER(KIND=8)'. + RESULT The type shall be of type `CHARACTER' and of + default kind. + +_Return value_: + The converted date and time as a string. + +_Example_: + program test_ctime + integer(8) :: i + character(len=30) :: date + i = time8() + + ! Do something, main part of the program + + call ctime(i,date) + print *, 'Program was started on ', date + end program test_ctime + +_See Also_: + *note GMTIME::, *note LTIME::, *note TIME::, *note TIME8:: + + +File: gfortran.info, Node: DATE_AND_TIME, Next: DBLE, Prev: CTIME, Up: Intrinsic Procedures + +7.52 `DATE_AND_TIME' -- Date and time subroutine +================================================ + +_Description_: + `DATE_AND_TIME(DATE, TIME, ZONE, VALUES)' gets the corresponding + date and time information from the real-time system clock. DATE is + `INTENT(OUT)' and has form ccyymmdd. TIME is `INTENT(OUT)' and + has form hhmmss.sss. ZONE is `INTENT(OUT)' and has form (+-)hhmm, + representing the difference with respect to Coordinated Universal + Time (UTC). Unavailable time and date parameters return blanks. + + VALUES is `INTENT(OUT)' and provides the following: + + `VALUE(1)': The year + `VALUE(2)': The month + `VALUE(3)': The day of the month + `VALUE(4)': Time difference with UTC + in minutes + `VALUE(5)': The hour of the day + `VALUE(6)': The minutes of the hour + `VALUE(7)': The seconds of the minute + `VALUE(8)': The milliseconds of the + second + +_Standard_: + Fortran 95 and later + +_Class_: + Subroutine + +_Syntax_: + `CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])' + +_Arguments_: + DATE (Optional) The type shall be `CHARACTER(LEN=8)' + or larger, and of default kind. + TIME (Optional) The type shall be + `CHARACTER(LEN=10)' or larger, and of default + kind. + ZONE (Optional) The type shall be `CHARACTER(LEN=5)' + or larger, and of default kind. + VALUES (Optional) The type shall be `INTEGER(8)'. + +_Return value_: + None + +_Example_: + program test_time_and_date + character(8) :: date + character(10) :: time + character(5) :: zone + integer,dimension(8) :: values + ! using keyword arguments + call date_and_time(date,time,zone,values) + call date_and_time(DATE=date,ZONE=zone) + call date_and_time(TIME=time) + call date_and_time(VALUES=values) + print '(a,2x,a,2x,a)', date, time, zone + print '(8i5))', values + end program test_time_and_date + +_See also_: + *note CPU_TIME::, *note SYSTEM_CLOCK:: + + +File: gfortran.info, Node: DBLE, Next: DCMPLX, Prev: DATE_AND_TIME, Up: Intrinsic Procedures + +7.53 `DBLE' -- Double conversion function +========================================= + +_Description_: + `DBLE(A)' Converts A to double precision real type. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = DBLE(A)' + +_Arguments_: + A The type shall be `INTEGER', `REAL', or + `COMPLEX'. + +_Return value_: + The return value is of type double precision real. + +_Example_: + program test_dble + real :: x = 2.18 + integer :: i = 5 + complex :: z = (2.3,1.14) + print *, dble(x), dble(i), dble(z) + end program test_dble + +_See also_: + *note DFLOAT::, *note FLOAT::, *note REAL:: + + +File: gfortran.info, Node: DCMPLX, Next: DFLOAT, Prev: DBLE, Up: Intrinsic Procedures + +7.54 `DCMPLX' -- Double complex conversion function +=================================================== + +_Description_: + `DCMPLX(X [,Y])' returns a double complex number where X is + converted to the real component. If Y is present it is converted + to the imaginary component. If Y is not present then the + imaginary component is set to 0.0. If X is complex then Y must + not be present. + +_Standard_: + GNU extension + +_Class_: + Elemental function + +_Syntax_: + `RESULT = DCMPLX(X [, Y])' + +_Arguments_: + X The type may be `INTEGER', `REAL', or + `COMPLEX'. + Y (Optional if X is not `COMPLEX'.) May be + `INTEGER' or `REAL'. + +_Return value_: + The return value is of type `COMPLEX(8)' + +_Example_: + program test_dcmplx + integer :: i = 42 + real :: x = 3.14 + complex :: z + z = cmplx(i, x) + print *, dcmplx(i) + print *, dcmplx(x) + print *, dcmplx(z) + print *, dcmplx(x,i) + end program test_dcmplx + + +File: gfortran.info, Node: DFLOAT, Next: DIGITS, Prev: DCMPLX, Up: Intrinsic Procedures + +7.55 `DFLOAT' -- Double conversion function +=========================================== + +_Description_: + `DFLOAT(A)' Converts A to double precision real type. + +_Standard_: + GNU extension + +_Class_: + Elemental function + +_Syntax_: + `RESULT = DFLOAT(A)' + +_Arguments_: + A The type shall be `INTEGER'. + +_Return value_: + The return value is of type double precision real. + +_Example_: + program test_dfloat + integer :: i = 5 + print *, dfloat(i) + end program test_dfloat + +_See also_: + *note DBLE::, *note FLOAT::, *note REAL:: + + +File: gfortran.info, Node: DIGITS, Next: DIM, Prev: DFLOAT, Up: Intrinsic Procedures + +7.56 `DIGITS' -- Significant binary digits function +=================================================== + +_Description_: + `DIGITS(X)' returns the number of significant binary digits of the + internal model representation of X. For example, on a system + using a 32-bit floating point representation, a default real + number would likely return 24. + +_Standard_: + Fortran 95 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = DIGITS(X)' + +_Arguments_: + X The type may be `INTEGER' or `REAL'. + +_Return value_: + The return value is of type `INTEGER'. + +_Example_: + program test_digits + integer :: i = 12345 + real :: x = 3.143 + real(8) :: y = 2.33 + print *, digits(i) + print *, digits(x) + print *, digits(y) + end program test_digits + + +File: gfortran.info, Node: DIM, Next: DOT_PRODUCT, Prev: DIGITS, Up: Intrinsic Procedures + +7.57 `DIM' -- Positive difference +================================= + +_Description_: + `DIM(X,Y)' returns the difference `X-Y' if the result is positive; + otherwise returns zero. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = DIM(X, Y)' + +_Arguments_: + X The type shall be `INTEGER' or `REAL' + Y The type shall be the same type and kind as X. + +_Return value_: + The return value is of type `INTEGER' or `REAL'. + +_Example_: + program test_dim + integer :: i + real(8) :: x + i = dim(4, 15) + x = dim(4.345_8, 2.111_8) + print *, i + print *, x + end program test_dim + +_Specific names_: + Name Argument Return type Standard + `IDIM(X,Y)' `INTEGER(4) `INTEGER(4)' Fortran 77 and + X,Y' later + `DDIM(X,Y)' `REAL(8) `REAL(8)' Fortran 77 and + X,Y' later + + +File: gfortran.info, Node: DOT_PRODUCT, Next: DPROD, Prev: DIM, Up: Intrinsic Procedures + +7.58 `DOT_PRODUCT' -- Dot product function +========================================== + +_Description_: + `DOT_PRODUCT(VECTOR_A, VECTOR_B)' computes the dot product + multiplication of two vectors VECTOR_A and VECTOR_B. The two + vectors may be either numeric or logical and must be arrays of + rank one and of equal size. If the vectors are `INTEGER' or + `REAL', the result is `SUM(VECTOR_A*VECTOR_B)'. If the vectors are + `COMPLEX', the result is `SUM(CONJG(VECTOR_A)*VECTOR_B)'. If the + vectors are `LOGICAL', the result is `ANY(VECTOR_A .AND. + VECTOR_B)'. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)' + +_Arguments_: + VECTOR_A The type shall be numeric or `LOGICAL', rank 1. + VECTOR_B The type shall be numeric if VECTOR_A is of + numeric type or `LOGICAL' if VECTOR_A is of + type `LOGICAL'. VECTOR_B shall be a rank-one + array. + +_Return value_: + If the arguments are numeric, the return value is a scalar of + numeric type, `INTEGER', `REAL', or `COMPLEX'. If the arguments + are `LOGICAL', the return value is `.TRUE.' or `.FALSE.'. + +_Example_: + program test_dot_prod + integer, dimension(3) :: a, b + a = (/ 1, 2, 3 /) + b = (/ 4, 5, 6 /) + print '(3i3)', a + print * + print '(3i3)', b + print * + print *, dot_product(a,b) + end program test_dot_prod + + +File: gfortran.info, Node: DPROD, Next: DREAL, Prev: DOT_PRODUCT, Up: Intrinsic Procedures + +7.59 `DPROD' -- Double product function +======================================= + +_Description_: + `DPROD(X,Y)' returns the product `X*Y'. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = DPROD(X, Y)' + +_Arguments_: + X The type shall be `REAL'. + Y The type shall be `REAL'. + +_Return value_: + The return value is of type `REAL(8)'. + +_Example_: + program test_dprod + real :: x = 5.2 + real :: y = 2.3 + real(8) :: d + d = dprod(x,y) + print *, d + end program test_dprod + + +File: gfortran.info, Node: DREAL, Next: DTIME, Prev: DPROD, Up: Intrinsic Procedures + +7.60 `DREAL' -- Double real part function +========================================= + +_Description_: + `DREAL(Z)' returns the real part of complex variable Z. + +_Standard_: + GNU extension + +_Class_: + Elemental function + +_Syntax_: + `RESULT = DREAL(A)' + +_Arguments_: + A The type shall be `COMPLEX(8)'. + +_Return value_: + The return value is of type `REAL(8)'. + +_Example_: + program test_dreal + complex(8) :: z = (1.3_8,7.2_8) + print *, dreal(z) + end program test_dreal + +_See also_: + *note AIMAG:: + + + +File: gfortran.info, Node: DTIME, Next: EOSHIFT, Prev: DREAL, Up: Intrinsic Procedures + +7.61 `DTIME' -- Execution time subroutine (or function) +======================================================= + +_Description_: + `DTIME(TARRAY, RESULT)' initially returns the number of seconds of + runtime since the start of the process's execution in RESULT. + TARRAY returns the user and system components of this time in + `TARRAY(1)' and `TARRAY(2)' respectively. RESULT is equal to + `TARRAY(1) + TARRAY(2)'. + + Subsequent invocations of `DTIME' return values accumulated since + the previous invocation. + + On some systems, the underlying timings are represented using + types with sufficiently small limits that overflows (wrap around) + are possible, such as 32-bit types. Therefore, the values returned + by this intrinsic might be, or become, negative, or numerically + less than previous values, during a single run of the compiled + program. + + Please note, that this implementation is thread safe if used + within OpenMP directives, i.e., its state will be consistent while + called from multiple threads. However, if `DTIME' is called from + multiple threads, the result is still the time since the last + invocation. This may not give the intended results. If possible, + use `CPU_TIME' instead. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + + TARRAY and RESULT are `INTENT(OUT)' and provide the following: + + `TARRAY(1)': User time in seconds. + `TARRAY(2)': System time in seconds. + `RESULT': Run time since start in + seconds. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL DTIME(TARRAY, RESULT)'. + `RESULT = DTIME(TARRAY)', (not recommended). + +_Arguments_: + TARRAY The type shall be `REAL, DIMENSION(2)'. + RESULT The type shall be `REAL'. + +_Return value_: + Elapsed time in seconds since the last invocation or since the + start of program execution if not called before. + +_Example_: + program test_dtime + integer(8) :: i, j + real, dimension(2) :: tarray + real :: result + call dtime(tarray, result) + print *, result + print *, tarray(1) + print *, tarray(2) + do i=1,100000000 ! Just a delay + j = i * i - i + end do + call dtime(tarray, result) + print *, result + print *, tarray(1) + print *, tarray(2) + end program test_dtime + +_See also_: + *note CPU_TIME:: + + + +File: gfortran.info, Node: EOSHIFT, Next: EPSILON, Prev: DTIME, Up: Intrinsic Procedures + +7.62 `EOSHIFT' -- End-off shift elements of an array +==================================================== + +_Description_: + `EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])' performs an end-off shift + on elements of ARRAY along the dimension of DIM. If DIM is + omitted it is taken to be `1'. DIM is a scalar of type `INTEGER' + in the range of 1 /leq DIM /leq n) where n is the rank of ARRAY. + If the rank of ARRAY is one, then all elements of ARRAY are + shifted by SHIFT places. If rank is greater than one, then all + complete rank one sections of ARRAY along the given dimension are + shifted. Elements shifted out one end of each rank one section + are dropped. If BOUNDARY is present then the corresponding value + of from BOUNDARY is copied back in the other end. If BOUNDARY is + not present then the following are copied in depending on the type + of ARRAY. + + _Array _Boundary Value_ + Type_ + Numeric 0 of the type and kind of ARRAY. + Logical `.FALSE.'. + Character(LEN)LEN blanks. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])' + +_Arguments_: + ARRAY May be any type, not scalar. + SHIFT The type shall be `INTEGER'. + BOUNDARY Same type as ARRAY. + DIM The type shall be `INTEGER'. + +_Return value_: + Returns an array of same type and rank as the ARRAY argument. + +_Example_: + program test_eoshift + integer, dimension(3,3) :: a + a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /)) + print '(3i3)', a(1,:) + print '(3i3)', a(2,:) + print '(3i3)', a(3,:) + a = EOSHIFT(a, SHIFT=(/1, 2, 1/), BOUNDARY=-5, DIM=2) + print * + print '(3i3)', a(1,:) + print '(3i3)', a(2,:) + print '(3i3)', a(3,:) + end program test_eoshift + + +File: gfortran.info, Node: EPSILON, Next: ERF, Prev: EOSHIFT, Up: Intrinsic Procedures + +7.63 `EPSILON' -- Epsilon function +================================== + +_Description_: + `EPSILON(X)' returns the smallest number E of the same kind as X + such that 1 + E > 1. + +_Standard_: + Fortran 95 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = EPSILON(X)' + +_Arguments_: + X The type shall be `REAL'. + +_Return value_: + The return value is of same type as the argument. + +_Example_: + program test_epsilon + real :: x = 3.143 + real(8) :: y = 2.33 + print *, EPSILON(x) + print *, EPSILON(y) + end program test_epsilon + + +File: gfortran.info, Node: ERF, Next: ERFC, Prev: EPSILON, Up: Intrinsic Procedures + +7.64 `ERF' -- Error function +============================ + +_Description_: + `ERF(X)' computes the error function of X. + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ERF(X)' + +_Arguments_: + X The type shall be `REAL'. + +_Return value_: + The return value is of type `REAL', of the same kind as X and lies + in the range -1 \leq erf (x) \leq 1 . + +_Example_: + program test_erf + real(8) :: x = 0.17_8 + x = erf(x) + end program test_erf + +_Specific names_: + Name Argument Return type Standard + `DERF(X)' `REAL(8) X' `REAL(8)' GNU extension + + +File: gfortran.info, Node: ERFC, Next: ERFC_SCALED, Prev: ERF, Up: Intrinsic Procedures + +7.65 `ERFC' -- Error function +============================= + +_Description_: + `ERFC(X)' computes the complementary error function of X. + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ERFC(X)' + +_Arguments_: + X The type shall be `REAL'. + +_Return value_: + The return value is of type `REAL' and of the same kind as X. It + lies in the range 0 \leq erfc (x) \leq 2 . + +_Example_: + program test_erfc + real(8) :: x = 0.17_8 + x = erfc(x) + end program test_erfc + +_Specific names_: + Name Argument Return type Standard + `DERFC(X)' `REAL(8) X' `REAL(8)' GNU extension + + +File: gfortran.info, Node: ERFC_SCALED, Next: ETIME, Prev: ERFC, Up: Intrinsic Procedures + +7.66 `ERFC_SCALED' -- Error function +==================================== + +_Description_: + `ERFC_SCALED(X)' computes the exponentially-scaled complementary + error function of X. + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ERFC_SCALED(X)' + +_Arguments_: + X The type shall be `REAL'. + +_Return value_: + The return value is of type `REAL' and of the same kind as X. + +_Example_: + program test_erfc_scaled + real(8) :: x = 0.17_8 + x = erfc_scaled(x) + end program test_erfc_scaled + + +File: gfortran.info, Node: ETIME, Next: EXIT, Prev: ERFC_SCALED, Up: Intrinsic Procedures + +7.67 `ETIME' -- Execution time subroutine (or function) +======================================================= + +_Description_: + `ETIME(TARRAY, RESULT)' returns the number of seconds of runtime + since the start of the process's execution in RESULT. TARRAY + returns the user and system components of this time in `TARRAY(1)' + and `TARRAY(2)' respectively. RESULT is equal to `TARRAY(1) + + TARRAY(2)'. + + On some systems, the underlying timings are represented using + types with sufficiently small limits that overflows (wrap around) + are possible, such as 32-bit types. Therefore, the values returned + by this intrinsic might be, or become, negative, or numerically + less than previous values, during a single run of the compiled + program. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + + TARRAY and RESULT are `INTENT(OUT)' and provide the following: + + `TARRAY(1)': User time in seconds. + `TARRAY(2)': System time in seconds. + `RESULT': Run time since start in seconds. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL ETIME(TARRAY, RESULT)'. + `RESULT = ETIME(TARRAY)', (not recommended). + +_Arguments_: + TARRAY The type shall be `REAL, DIMENSION(2)'. + RESULT The type shall be `REAL'. + +_Return value_: + Elapsed time in seconds since the start of program execution. + +_Example_: + program test_etime + integer(8) :: i, j + real, dimension(2) :: tarray + real :: result + call ETIME(tarray, result) + print *, result + print *, tarray(1) + print *, tarray(2) + do i=1,100000000 ! Just a delay + j = i * i - i + end do + call ETIME(tarray, result) + print *, result + print *, tarray(1) + print *, tarray(2) + end program test_etime + +_See also_: + *note CPU_TIME:: + + + +File: gfortran.info, Node: EXIT, Next: EXP, Prev: ETIME, Up: Intrinsic Procedures + +7.68 `EXIT' -- Exit the program with status. +============================================ + +_Description_: + `EXIT' causes immediate termination of the program with status. + If status is omitted it returns the canonical _success_ for the + system. All Fortran I/O units are closed. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL EXIT([STATUS])' + +_Arguments_: + STATUS Shall be an `INTEGER' of the default kind. + +_Return value_: + `STATUS' is passed to the parent process on exit. + +_Example_: + program test_exit + integer :: STATUS = 0 + print *, 'This program is going to exit.' + call EXIT(STATUS) + end program test_exit + +_See also_: + *note ABORT::, *note KILL:: + + +File: gfortran.info, Node: EXP, Next: EXPONENT, Prev: EXIT, Up: Intrinsic Procedures + +7.69 `EXP' -- Exponential function +================================== + +_Description_: + `EXP(X)' computes the base e exponential of X. + +_Standard_: + Fortran 77 and later, has overloads that are GNU extensions + +_Class_: + Elemental function + +_Syntax_: + `RESULT = EXP(X)' + +_Arguments_: + X The type shall be `REAL' or `COMPLEX'. + +_Return value_: + The return value has same type and kind as X. + +_Example_: + program test_exp + real :: x = 1.0 + x = exp(x) + end program test_exp + +_Specific names_: + Name Argument Return type Standard + `DEXP(X)' `REAL(8) X' `REAL(8)' Fortran 77 and + later + `CEXP(X)' `COMPLEX(4) `COMPLEX(4)' Fortran 77 and + X' later + `ZEXP(X)' `COMPLEX(8) `COMPLEX(8)' GNU extension + X' + `CDEXP(X)' `COMPLEX(8) `COMPLEX(8)' GNU extension + X' + + +File: gfortran.info, Node: EXPONENT, Next: FDATE, Prev: EXP, Up: Intrinsic Procedures + +7.70 `EXPONENT' -- Exponent function +==================================== + +_Description_: + `EXPONENT(X)' returns the value of the exponent part of X. If X is + zero the value returned is zero. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = EXPONENT(X)' + +_Arguments_: + X The type shall be `REAL'. + +_Return value_: + The return value is of type default `INTEGER'. + +_Example_: + program test_exponent + real :: x = 1.0 + integer :: i + i = exponent(x) + print *, i + print *, exponent(0.0) + end program test_exponent + + +File: gfortran.info, Node: FDATE, Next: FGET, Prev: EXPONENT, Up: Intrinsic Procedures + +7.71 `FDATE' -- Get the current time as a string +================================================ + +_Description_: + `FDATE(DATE)' returns the current date (using the same format as + `CTIME') in DATE. It is equivalent to `CALL CTIME(DATE, TIME())'. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + + DATE is an `INTENT(OUT)' `CHARACTER' variable of the default kind. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL FDATE(DATE)'. + `DATE = FDATE()', (not recommended). + +_Arguments_: + DATE The type shall be of type `CHARACTER' of the + default kind + +_Return value_: + The current date as a string. + +_Example_: + program test_fdate + integer(8) :: i, j + character(len=30) :: date + call fdate(date) + print *, 'Program started on ', date + do i = 1, 100000000 ! Just a delay + j = i * i - i + end do + call fdate(date) + print *, 'Program ended on ', date + end program test_fdate + + +File: gfortran.info, Node: FLOAT, Next: FLOOR, Prev: FGETC, Up: Intrinsic Procedures + +7.72 `FLOAT' -- Convert integer to default real +=============================================== + +_Description_: + `FLOAT(A)' converts the integer A to a default real value. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = FLOAT(A)' + +_Arguments_: + A The type shall be `INTEGER'. + +_Return value_: + The return value is of type default `REAL'. + +_Example_: + program test_float + integer :: i = 1 + if (float(i) /= 1.) call abort + end program test_float + +_See also_: + *note DBLE::, *note DFLOAT::, *note REAL:: + + +File: gfortran.info, Node: FGET, Next: FGETC, Prev: FDATE, Up: Intrinsic Procedures + +7.73 `FGET' -- Read a single character in stream mode from stdin +================================================================ + +_Description_: + Read a single character in stream mode from stdin by bypassing + normal formatted output. Stream I/O should not be mixed with + normal record-oriented (formatted or unformatted) I/O on the same + unit; the results are unpredictable. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + + Note that the `FGET' intrinsic is provided for backwards + compatibility with `g77'. GNU Fortran provides the Fortran 2003 + Stream facility. Programmers should consider the use of new + stream IO feature in new code for future portability. See also + *note Fortran 2003 status::. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL FGET(C [, STATUS])' + +_Arguments_: + C The type shall be `CHARACTER' and of default + kind. + STATUS (Optional) status flag of type `INTEGER'. + Returns 0 on success, -1 on end-of-file, and a + system specific positive error code otherwise. + +_Example_: + PROGRAM test_fget + INTEGER, PARAMETER :: strlen = 100 + INTEGER :: status, i = 1 + CHARACTER(len=strlen) :: str = "" + + WRITE (*,*) 'Enter text:' + DO + CALL fget(str(i:i), status) + if (status /= 0 .OR. i > strlen) exit + i = i + 1 + END DO + WRITE (*,*) TRIM(str) + END PROGRAM + +_See also_: + *note FGETC::, *note FPUT::, *note FPUTC:: + + +File: gfortran.info, Node: FGETC, Next: FLOAT, Prev: FGET, Up: Intrinsic Procedures + +7.74 `FGETC' -- Read a single character in stream mode +====================================================== + +_Description_: + Read a single character in stream mode by bypassing normal + formatted output. Stream I/O should not be mixed with normal + record-oriented (formatted or unformatted) I/O on the same unit; + the results are unpredictable. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + + Note that the `FGET' intrinsic is provided for backwards + compatibility with `g77'. GNU Fortran provides the Fortran 2003 + Stream facility. Programmers should consider the use of new + stream IO feature in new code for future portability. See also + *note Fortran 2003 status::. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL FGETC(UNIT, C [, STATUS])' + +_Arguments_: + UNIT The type shall be `INTEGER'. + C The type shall be `CHARACTER' and of default + kind. + STATUS (Optional) status flag of type `INTEGER'. + Returns 0 on success, -1 on end-of-file and a + system specific positive error code otherwise. + +_Example_: + PROGRAM test_fgetc + INTEGER :: fd = 42, status + CHARACTER :: c + + OPEN(UNIT=fd, FILE="/etc/passwd", ACTION="READ", STATUS = "OLD") + DO + CALL fgetc(fd, c, status) + IF (status /= 0) EXIT + call fput(c) + END DO + CLOSE(UNIT=fd) + END PROGRAM + +_See also_: + *note FGET::, *note FPUT::, *note FPUTC:: + + +File: gfortran.info, Node: FLOOR, Next: FLUSH, Prev: FLOAT, Up: Intrinsic Procedures + +7.75 `FLOOR' -- Integer floor function +====================================== + +_Description_: + `FLOOR(A)' returns the greatest integer less than or equal to X. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = FLOOR(A [, KIND])' + +_Arguments_: + A The type shall be `REAL'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `INTEGER(KIND)' if KIND is present and + of default-kind `INTEGER' otherwise. + +_Example_: + program test_floor + real :: x = 63.29 + real :: y = -63.59 + print *, floor(x) ! returns 63 + print *, floor(y) ! returns -64 + end program test_floor + +_See also_: + *note CEILING::, *note NINT:: + + + +File: gfortran.info, Node: FLUSH, Next: FNUM, Prev: FLOOR, Up: Intrinsic Procedures + +7.76 `FLUSH' -- Flush I/O unit(s) +================================= + +_Description_: + Flushes Fortran unit(s) currently open for output. Without the + optional argument, all units are flushed, otherwise just the unit + specified. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL FLUSH(UNIT)' + +_Arguments_: + UNIT (Optional) The type shall be `INTEGER'. + +_Note_: + Beginning with the Fortran 2003 standard, there is a `FLUSH' + statement that should be preferred over the `FLUSH' intrinsic. + + + +File: gfortran.info, Node: FNUM, Next: FPUT, Prev: FLUSH, Up: Intrinsic Procedures + +7.77 `FNUM' -- File number function +=================================== + +_Description_: + `FNUM(UNIT)' returns the POSIX file descriptor number + corresponding to the open Fortran I/O unit `UNIT'. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = FNUM(UNIT)' + +_Arguments_: + UNIT The type shall be `INTEGER'. + +_Return value_: + The return value is of type `INTEGER' + +_Example_: + program test_fnum + integer :: i + open (unit=10, status = "scratch") + i = fnum(10) + print *, i + close (10) + end program test_fnum + + +File: gfortran.info, Node: FPUT, Next: FPUTC, Prev: FNUM, Up: Intrinsic Procedures + +7.78 `FPUT' -- Write a single character in stream mode to stdout +================================================================ + +_Description_: + Write a single character in stream mode to stdout by bypassing + normal formatted output. Stream I/O should not be mixed with + normal record-oriented (formatted or unformatted) I/O on the same + unit; the results are unpredictable. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + + Note that the `FGET' intrinsic is provided for backwards + compatibility with `g77'. GNU Fortran provides the Fortran 2003 + Stream facility. Programmers should consider the use of new + stream IO feature in new code for future portability. See also + *note Fortran 2003 status::. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL FPUT(C [, STATUS])' + +_Arguments_: + C The type shall be `CHARACTER' and of default + kind. + STATUS (Optional) status flag of type `INTEGER'. + Returns 0 on success, -1 on end-of-file and a + system specific positive error code otherwise. + +_Example_: + PROGRAM test_fput + CHARACTER(len=10) :: str = "gfortran" + INTEGER :: i + DO i = 1, len_trim(str) + CALL fput(str(i:i)) + END DO + END PROGRAM + +_See also_: + *note FPUTC::, *note FGET::, *note FGETC:: + + +File: gfortran.info, Node: FPUTC, Next: FRACTION, Prev: FPUT, Up: Intrinsic Procedures + +7.79 `FPUTC' -- Write a single character in stream mode +======================================================= + +_Description_: + Write a single character in stream mode by bypassing normal + formatted output. Stream I/O should not be mixed with normal + record-oriented (formatted or unformatted) I/O on the same unit; + the results are unpredictable. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + + Note that the `FGET' intrinsic is provided for backwards + compatibility with `g77'. GNU Fortran provides the Fortran 2003 + Stream facility. Programmers should consider the use of new + stream IO feature in new code for future portability. See also + *note Fortran 2003 status::. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL FPUTC(UNIT, C [, STATUS])' + +_Arguments_: + UNIT The type shall be `INTEGER'. + C The type shall be `CHARACTER' and of default + kind. + STATUS (Optional) status flag of type `INTEGER'. + Returns 0 on success, -1 on end-of-file and a + system specific positive error code otherwise. + +_Example_: + PROGRAM test_fputc + CHARACTER(len=10) :: str = "gfortran" + INTEGER :: fd = 42, i + + OPEN(UNIT = fd, FILE = "out", ACTION = "WRITE", STATUS="NEW") + DO i = 1, len_trim(str) + CALL fputc(fd, str(i:i)) + END DO + CLOSE(fd) + END PROGRAM + +_See also_: + *note FPUT::, *note FGET::, *note FGETC:: + + +File: gfortran.info, Node: FRACTION, Next: FREE, Prev: FPUTC, Up: Intrinsic Procedures + +7.80 `FRACTION' -- Fractional part of the model representation +============================================================== + +_Description_: + `FRACTION(X)' returns the fractional part of the model + representation of `X'. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `Y = FRACTION(X)' + +_Arguments_: + X The type of the argument shall be a `REAL'. + +_Return value_: + The return value is of the same type and kind as the argument. + The fractional part of the model representation of `X' is returned; + it is `X * RADIX(X)**(-EXPONENT(X))'. + +_Example_: + program test_fraction + real :: x + x = 178.1387e-4 + print *, fraction(x), x * radix(x)**(-exponent(x)) + end program test_fraction + + + +File: gfortran.info, Node: FREE, Next: FSEEK, Prev: FRACTION, Up: Intrinsic Procedures + +7.81 `FREE' -- Frees memory +=========================== + +_Description_: + Frees memory previously allocated by `MALLOC()'. The `FREE' + intrinsic is an extension intended to be used with Cray pointers, + and is provided in GNU Fortran to allow user to compile legacy + code. For new code using Fortran 95 pointers, the memory + de-allocation intrinsic is `DEALLOCATE'. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL FREE(PTR)' + +_Arguments_: + PTR The type shall be `INTEGER'. It represents the + location of the memory that should be + de-allocated. + +_Return value_: + None + +_Example_: + See `MALLOC' for an example. + +_See also_: + *note MALLOC:: + + +File: gfortran.info, Node: FSEEK, Next: FSTAT, Prev: FREE, Up: Intrinsic Procedures + +7.82 `FSEEK' -- Low level file positioning subroutine +===================================================== + +_Description_: + Moves UNIT to the specified OFFSET. If WHENCE is set to 0, the + OFFSET is taken as an absolute value `SEEK_SET', if set to 1, + OFFSET is taken to be relative to the current position `SEEK_CUR', + and if set to 2 relative to the end of the file `SEEK_END'. On + error, STATUS is set to a nonzero value. If STATUS the seek fails + silently. + + This intrinsic routine is not fully backwards compatible with + `g77'. In `g77', the `FSEEK' takes a statement label instead of a + STATUS variable. If FSEEK is used in old code, change + CALL FSEEK(UNIT, OFFSET, WHENCE, *label) + to + INTEGER :: status + CALL FSEEK(UNIT, OFFSET, WHENCE, status) + IF (status /= 0) GOTO label + + Please note that GNU Fortran provides the Fortran 2003 Stream + facility. Programmers should consider the use of new stream IO + feature in new code for future portability. See also *note Fortran + 2003 status::. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL FSEEK(UNIT, OFFSET, WHENCE[, STATUS])' + +_Arguments_: + UNIT Shall be a scalar of type `INTEGER'. + OFFSET Shall be a scalar of type `INTEGER'. + WHENCE Shall be a scalar of type `INTEGER'. Its + value shall be either 0, 1 or 2. + STATUS (Optional) shall be a scalar of type + `INTEGER(4)'. + +_Example_: + PROGRAM test_fseek + INTEGER, PARAMETER :: SEEK_SET = 0, SEEK_CUR = 1, SEEK_END = 2 + INTEGER :: fd, offset, ierr + + ierr = 0 + offset = 5 + fd = 10 + + OPEN(UNIT=fd, FILE="fseek.test") + CALL FSEEK(fd, offset, SEEK_SET, ierr) ! move to OFFSET + print *, FTELL(fd), ierr + + CALL FSEEK(fd, 0, SEEK_END, ierr) ! move to end + print *, FTELL(fd), ierr + + CALL FSEEK(fd, 0, SEEK_SET, ierr) ! move to beginning + print *, FTELL(fd), ierr + + CLOSE(UNIT=fd) + END PROGRAM + +_See also_: + *note FTELL:: + + +File: gfortran.info, Node: FSTAT, Next: FTELL, Prev: FSEEK, Up: Intrinsic Procedures + +7.83 `FSTAT' -- Get file status +=============================== + +_Description_: + `FSTAT' is identical to *note STAT::, except that information + about an already opened file is obtained. + + The elements in `BUFF' are the same as described by *note STAT::. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL FSTAT(UNIT, BUFF [, STATUS])' + +_Arguments_: + UNIT An open I/O unit number of type `INTEGER'. + BUFF The type shall be `INTEGER(4), DIMENSION(13)'. + STATUS (Optional) status flag of type `INTEGER(4)'. + Returns 0 on success and a system specific + error code otherwise. + +_Example_: + See *note STAT:: for an example. + +_See also_: + To stat a link: *note LSTAT::, to stat a file: *note STAT:: + + +File: gfortran.info, Node: FTELL, Next: GAMMA, Prev: FSTAT, Up: Intrinsic Procedures + +7.84 `FTELL' -- Current stream position +======================================= + +_Description_: + Retrieves the current position within an open file. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL FTELL(UNIT, OFFSET)' + `OFFSET = FTELL(UNIT)' + +_Arguments_: + OFFSET Shall of type `INTEGER'. + UNIT Shall of type `INTEGER'. + +_Return value_: + In either syntax, OFFSET is set to the current offset of unit + number UNIT, or to -1 if the unit is not currently open. + +_Example_: + PROGRAM test_ftell + INTEGER :: i + OPEN(10, FILE="temp.dat") + CALL ftell(10,i) + WRITE(*,*) i + END PROGRAM + +_See also_: + *note FSEEK:: + + +File: gfortran.info, Node: GAMMA, Next: GERROR, Prev: FTELL, Up: Intrinsic Procedures + +7.85 `GAMMA' -- Gamma function +============================== + +_Description_: + `GAMMA(X)' computes Gamma (\Gamma) of X. For positive, integer + values of X the Gamma function simplifies to the factorial + function \Gamma(x)=(x-1)!. + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `X = GAMMA(X)' + +_Arguments_: + X Shall be of type `REAL' and neither zero nor a + negative integer. + +_Return value_: + The return value is of type `REAL' of the same kind as X. + +_Example_: + program test_gamma + real :: x = 1.0 + x = gamma(x) ! returns 1.0 + end program test_gamma + +_Specific names_: + Name Argument Return type Standard + `GAMMA(X)' `REAL(4) X' `REAL(4)' GNU Extension + `DGAMMA(X)' `REAL(8) X' `REAL(8)' GNU Extension + +_See also_: + Logarithm of the Gamma function: *note LOG_GAMMA:: + + + +File: gfortran.info, Node: GERROR, Next: GETARG, Prev: GAMMA, Up: Intrinsic Procedures + +7.86 `GERROR' -- Get last system error message +============================================== + +_Description_: + Returns the system error message corresponding to the last system + error. This resembles the functionality of `strerror(3)' in C. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL GERROR(RESULT)' + +_Arguments_: + RESULT Shall of type `CHARACTER' and of default + +_Example_: + PROGRAM test_gerror + CHARACTER(len=100) :: msg + CALL gerror(msg) + WRITE(*,*) msg + END PROGRAM + +_See also_: + *note IERRNO::, *note PERROR:: + + +File: gfortran.info, Node: GETARG, Next: GET_COMMAND, Prev: GERROR, Up: Intrinsic Procedures + +7.87 `GETARG' -- Get command line arguments +=========================================== + +_Description_: + Retrieve the POS-th argument that was passed on the command line + when the containing program was invoked. + + This intrinsic routine is provided for backwards compatibility with + GNU Fortran 77. In new code, programmers should consider the use + of the *note GET_COMMAND_ARGUMENT:: intrinsic defined by the + Fortran 2003 standard. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL GETARG(POS, VALUE)' + +_Arguments_: + POS Shall be of type `INTEGER' and not wider than + the default integer kind; POS \geq 0 + VALUE Shall be of type `CHARACTER' and of default + kind. + VALUE Shall be of type `CHARACTER'. + +_Return value_: + After `GETARG' returns, the VALUE argument holds the POSth command + line argument. If VALUE can not hold the argument, it is truncated + to fit the length of VALUE. If there are less than POS arguments + specified at the command line, VALUE will be filled with blanks. + If POS = 0, VALUE is set to the name of the program (on systems + that support this feature). + +_Example_: + PROGRAM test_getarg + INTEGER :: i + CHARACTER(len=32) :: arg + + DO i = 1, iargc() + CALL getarg(i, arg) + WRITE (*,*) arg + END DO + END PROGRAM + +_See also_: + GNU Fortran 77 compatibility function: *note IARGC:: + + Fortran 2003 functions and subroutines: *note GET_COMMAND::, *note + GET_COMMAND_ARGUMENT::, *note COMMAND_ARGUMENT_COUNT:: + + +File: gfortran.info, Node: GET_COMMAND, Next: GET_COMMAND_ARGUMENT, Prev: GETARG, Up: Intrinsic Procedures + +7.88 `GET_COMMAND' -- Get the entire command line +================================================= + +_Description_: + Retrieve the entire command line that was used to invoke the + program. + +_Standard_: + Fortran 2003 and later + +_Class_: + Subroutine + +_Syntax_: + `CALL GET_COMMAND(COMMAND)' + +_Arguments_: + COMMAND Shall be of type `CHARACTER' and of default + kind. + +_Return value_: + Stores the entire command line that was used to invoke the program + in COMMAND. If COMMAND is not large enough, the command will be + truncated. + +_Example_: + PROGRAM test_get_command + CHARACTER(len=255) :: cmd + CALL get_command(cmd) + WRITE (*,*) TRIM(cmd) + END PROGRAM + +_See also_: + *note GET_COMMAND_ARGUMENT::, *note COMMAND_ARGUMENT_COUNT:: + + +File: gfortran.info, Node: GET_COMMAND_ARGUMENT, Next: GETCWD, Prev: GET_COMMAND, Up: Intrinsic Procedures + +7.89 `GET_COMMAND_ARGUMENT' -- Get command line arguments +========================================================= + +_Description_: + Retrieve the NUMBER-th argument that was passed on the command + line when the containing program was invoked. + +_Standard_: + Fortran 2003 and later + +_Class_: + Subroutine + +_Syntax_: + `CALL GET_COMMAND_ARGUMENT(NUMBER [, VALUE, LENGTH, STATUS])' + +_Arguments_: + NUMBER Shall be a scalar of type `INTEGER(4)', NUMBER + \geq 0 + VALUE Shall be a scalar of type `CHARACTER' and of + default kind. + LENGTH (Option) Shall be a scalar of type + `INTEGER(4)'. + STATUS (Option) Shall be a scalar of type + `INTEGER(4)'. + +_Return value_: + After `GET_COMMAND_ARGUMENT' returns, the VALUE argument holds the + NUMBER-th command line argument. If VALUE can not hold the + argument, it is truncated to fit the length of VALUE. If there are + less than NUMBER arguments specified at the command line, VALUE + will be filled with blanks. If NUMBER = 0, VALUE is set to the + name of the program (on systems that support this feature). The + LENGTH argument contains the length of the NUMBER-th command line + argument. If the argument retrieval fails, STATUS is a positive + number; if VALUE contains a truncated command line argument, + STATUS is -1; and otherwise the STATUS is zero. + +_Example_: + PROGRAM test_get_command_argument + INTEGER :: i + CHARACTER(len=32) :: arg + + i = 0 + DO + CALL get_command_argument(i, arg) + IF (LEN_TRIM(arg) == 0) EXIT + + WRITE (*,*) TRIM(arg) + i = i+1 + END DO + END PROGRAM + +_See also_: + *note GET_COMMAND::, *note COMMAND_ARGUMENT_COUNT:: + + +File: gfortran.info, Node: GETCWD, Next: GETENV, Prev: GET_COMMAND_ARGUMENT, Up: Intrinsic Procedures + +7.90 `GETCWD' -- Get current working directory +============================================== + +_Description_: + Get current working directory. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL GETCWD(C [, STATUS])' + +_Arguments_: + C The type shall be `CHARACTER' and of default + kind. + STATUS (Optional) status flag. Returns 0 on success, + a system specific and nonzero error code + otherwise. + +_Example_: + PROGRAM test_getcwd + CHARACTER(len=255) :: cwd + CALL getcwd(cwd) + WRITE(*,*) TRIM(cwd) + END PROGRAM + +_See also_: + *note CHDIR:: + + +File: gfortran.info, Node: GETENV, Next: GET_ENVIRONMENT_VARIABLE, Prev: GETCWD, Up: Intrinsic Procedures + +7.91 `GETENV' -- Get an environmental variable +============================================== + +_Description_: + Get the VALUE of the environmental variable NAME. + + This intrinsic routine is provided for backwards compatibility with + GNU Fortran 77. In new code, programmers should consider the use + of the *note GET_ENVIRONMENT_VARIABLE:: intrinsic defined by the + Fortran 2003 standard. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL GETENV(NAME, VALUE)' + +_Arguments_: + NAME Shall be of type `CHARACTER' and of default + kind. + VALUE Shall be of type `CHARACTER' and of default + kind. + +_Return value_: + Stores the value of NAME in VALUE. If VALUE is not large enough to + hold the data, it is truncated. If NAME is not set, VALUE will be + filled with blanks. + +_Example_: + PROGRAM test_getenv + CHARACTER(len=255) :: homedir + CALL getenv("HOME", homedir) + WRITE (*,*) TRIM(homedir) + END PROGRAM + +_See also_: + *note GET_ENVIRONMENT_VARIABLE:: + + +File: gfortran.info, Node: GET_ENVIRONMENT_VARIABLE, Next: GETGID, Prev: GETENV, Up: Intrinsic Procedures + +7.92 `GET_ENVIRONMENT_VARIABLE' -- Get an environmental variable +================================================================ + +_Description_: + Get the VALUE of the environmental variable NAME. + +_Standard_: + Fortran 2003 and later + +_Class_: + Subroutine + +_Syntax_: + `CALL GET_ENVIRONMENT_VARIABLE(NAME[, VALUE, LENGTH, STATUS, + TRIM_NAME)' + +_Arguments_: + NAME Shall be a scalar of type `CHARACTER(1)'. + VALUE Shall be a scalar of type `CHARACTER(1)'. + LENGTH Shall be a scalar of type `INTEGER(4)'. + STATUS Shall be a scalar of type `INTEGER(4)'. + TRIM_NAME Shall be a scalar of type `LOGICAL(4)'. + +_Return value_: + Stores the value of NAME in VALUE. If VALUE is not large enough to + hold the data, it is truncated. If NAME is not set, VALUE will be + filled with blanks. Argument LENGTH contains the length needed for + storing the environment variable NAME or zero if it is not + present. STATUS is -1 if VALUE is present but too short for the + environment variable; it is 1 if the environment variable does not + exist and 2 if the processor does not support environment + variables; in all other cases STATUS is zero. If TRIM_NAME is + present with the value `.FALSE.', the trailing blanks in NAME are + significant; otherwise they are not part of the environment + variable name. + +_Example_: + PROGRAM test_getenv + CHARACTER(len=255) :: homedir + CALL get_environment_variable("HOME", homedir) + WRITE (*,*) TRIM(homedir) + END PROGRAM + + +File: gfortran.info, Node: GETGID, Next: GETLOG, Prev: GET_ENVIRONMENT_VARIABLE, Up: Intrinsic Procedures + +7.93 `GETGID' -- Group ID function +================================== + +_Description_: + Returns the numerical group ID of the current process. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = GETGID()' + +_Return value_: + The return value of `GETGID' is an `INTEGER' of the default kind. + +_Example_: + See `GETPID' for an example. + +_See also_: + *note GETPID::, *note GETUID:: + + +File: gfortran.info, Node: GETLOG, Next: GETPID, Prev: GETGID, Up: Intrinsic Procedures + +7.94 `GETLOG' -- Get login name +=============================== + +_Description_: + Gets the username under which the program is running. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL GETLOG(C)' + +_Arguments_: + C Shall be of type `CHARACTER' and of default + kind. + +_Return value_: + Stores the current user name in LOGIN. (On systems where POSIX + functions `geteuid' and `getpwuid' are not available, and the + `getlogin' function is not implemented either, this will return a + blank string.) + +_Example_: + PROGRAM TEST_GETLOG + CHARACTER(32) :: login + CALL GETLOG(login) + WRITE(*,*) login + END PROGRAM + +_See also_: + *note GETUID:: + + +File: gfortran.info, Node: GETPID, Next: GETUID, Prev: GETLOG, Up: Intrinsic Procedures + +7.95 `GETPID' -- Process ID function +==================================== + +_Description_: + Returns the numerical process identifier of the current process. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = GETPID()' + +_Return value_: + The return value of `GETPID' is an `INTEGER' of the default kind. + +_Example_: + program info + print *, "The current process ID is ", getpid() + print *, "Your numerical user ID is ", getuid() + print *, "Your numerical group ID is ", getgid() + end program info + +_See also_: + *note GETGID::, *note GETUID:: + + +File: gfortran.info, Node: GETUID, Next: GMTIME, Prev: GETPID, Up: Intrinsic Procedures + +7.96 `GETUID' -- User ID function +================================= + +_Description_: + Returns the numerical user ID of the current process. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = GETUID()' + +_Return value_: + The return value of `GETUID' is an `INTEGER' of the default kind. + +_Example_: + See `GETPID' for an example. + +_See also_: + *note GETPID::, *note GETLOG:: + + +File: gfortran.info, Node: GMTIME, Next: HOSTNM, Prev: GETUID, Up: Intrinsic Procedures + +7.97 `GMTIME' -- Convert time to GMT info +========================================= + +_Description_: + Given a system time value TIME (as provided by the `TIME8()' + intrinsic), fills VALUES with values extracted from it appropriate + to the UTC time zone (Universal Coordinated Time, also known in + some countries as GMT, Greenwich Mean Time), using `gmtime(3)'. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL GMTIME(TIME, VALUES)' + +_Arguments_: + TIME An `INTEGER' scalar expression corresponding + to a system time, with `INTENT(IN)'. + VALUES A default `INTEGER' array with 9 elements, + with `INTENT(OUT)'. + +_Return value_: + The elements of VALUES are assigned as follows: + 1. Seconds after the minute, range 0-59 or 0-61 to allow for leap + seconds + + 2. Minutes after the hour, range 0-59 + + 3. Hours past midnight, range 0-23 + + 4. Day of month, range 0-31 + + 5. Number of months since January, range 0-12 + + 6. Years since 1900 + + 7. Number of days since Sunday, range 0-6 + + 8. Days since January 1 + + 9. Daylight savings indicator: positive if daylight savings is in + effect, zero if not, and negative if the information is not + available. + +_See also_: + *note CTIME::, *note LTIME::, *note TIME::, *note TIME8:: + + + +File: gfortran.info, Node: HOSTNM, Next: HUGE, Prev: GMTIME, Up: Intrinsic Procedures + +7.98 `HOSTNM' -- Get system host name +===================================== + +_Description_: + Retrieves the host name of the system on which the program is + running. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL HOSTNM(C [, STATUS])' + `STATUS = HOSTNM(NAME)' + +_Arguments_: + C Shall of type `CHARACTER' and of default kind. + STATUS (Optional) status flag of type `INTEGER'. + Returns 0 on success, or a system specific + error code otherwise. + +_Return value_: + In either syntax, NAME is set to the current hostname if it can be + obtained, or to a blank string otherwise. + + + +File: gfortran.info, Node: HUGE, Next: HYPOT, Prev: HOSTNM, Up: Intrinsic Procedures + +7.99 `HUGE' -- Largest number of a kind +======================================= + +_Description_: + `HUGE(X)' returns the largest number that is not an infinity in + the model of the type of `X'. + +_Standard_: + Fortran 95 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = HUGE(X)' + +_Arguments_: + X Shall be of type `REAL' or `INTEGER'. + +_Return value_: + The return value is of the same type and kind as X + +_Example_: + program test_huge_tiny + print *, huge(0), huge(0.0), huge(0.0d0) + print *, tiny(0.0), tiny(0.0d0) + end program test_huge_tiny + + +File: gfortran.info, Node: HYPOT, Next: IACHAR, Prev: HUGE, Up: Intrinsic Procedures + +7.100 `HYPOT' -- Euclidean distance function +============================================ + +_Description_: + `HYPOT(X,Y)' is the Euclidean distance function. It is equal to + \sqrtX^2 + Y^2, without undue underflow or overflow. + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = HYPOT(X, Y)' + +_Arguments_: + X The type shall be `REAL'. + Y The type and kind type parameter shall be the + same as X. + +_Return value_: + The return value has the same type and kind type parameter as X. + +_Example_: + program test_hypot + real(4) :: x = 1.e0_4, y = 0.5e0_4 + x = hypot(x,y) + end program test_hypot + + +File: gfortran.info, Node: IACHAR, Next: IAND, Prev: HYPOT, Up: Intrinsic Procedures + +7.101 `IACHAR' -- Code in ASCII collating sequence +================================================== + +_Description_: + `IACHAR(C)' returns the code for the ASCII character in the first + character position of `C'. + +_Standard_: + Fortran 95 and later, with KIND argument Fortran 2003 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = IACHAR(C [, KIND])' + +_Arguments_: + C Shall be a scalar `CHARACTER', with + `INTENT(IN)' + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `INTEGER' and of kind KIND. If KIND is + absent, the return value is of default integer kind. + +_Example_: + program test_iachar + integer i + i = iachar(' ') + end program test_iachar + +_Note_: + See *note ICHAR:: for a discussion of converting between numerical + values and formatted string representations. + +_See also_: + *note ACHAR::, *note CHAR::, *note ICHAR:: + + + +File: gfortran.info, Node: IAND, Next: IARGC, Prev: IACHAR, Up: Intrinsic Procedures + +7.102 `IAND' -- Bitwise logical and +=================================== + +_Description_: + Bitwise logical `AND'. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = IAND(I, J)' + +_Arguments_: + I The type shall be `INTEGER'. + J The type shall be `INTEGER', of the same kind + as I. (As a GNU extension, different kinds + are also permitted.) + +_Return value_: + The return type is `INTEGER', of the same kind as the arguments. + (If the argument kinds differ, it is of the same kind as the + larger argument.) + +_Example_: + PROGRAM test_iand + INTEGER :: a, b + DATA a / Z'F' /, b / Z'3' / + WRITE (*,*) IAND(a, b) + END PROGRAM + +_See also_: + *note IOR::, *note IEOR::, *note IBITS::, *note IBSET::, *note + IBCLR::, *note NOT:: + + + +File: gfortran.info, Node: IARGC, Next: IBCLR, Prev: IAND, Up: Intrinsic Procedures + +7.103 `IARGC' -- Get the number of command line arguments +========================================================= + +_Description_: + `IARGC()' returns the number of arguments passed on the command + line when the containing program was invoked. + + This intrinsic routine is provided for backwards compatibility with + GNU Fortran 77. In new code, programmers should consider the use + of the *note COMMAND_ARGUMENT_COUNT:: intrinsic defined by the + Fortran 2003 standard. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = IARGC()' + +_Arguments_: + None. + +_Return value_: + The number of command line arguments, type `INTEGER(4)'. + +_Example_: + See *note GETARG:: + +_See also_: + GNU Fortran 77 compatibility subroutine: *note GETARG:: + + Fortran 2003 functions and subroutines: *note GET_COMMAND::, *note + GET_COMMAND_ARGUMENT::, *note COMMAND_ARGUMENT_COUNT:: + + +File: gfortran.info, Node: IBCLR, Next: IBITS, Prev: IARGC, Up: Intrinsic Procedures + +7.104 `IBCLR' -- Clear bit +========================== + +_Description_: + `IBCLR' returns the value of I with the bit at position POS set to + zero. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = IBCLR(I, POS)' + +_Arguments_: + I The type shall be `INTEGER'. + POS The type shall be `INTEGER'. + +_Return value_: + The return value is of type `INTEGER' and of the same kind as I. + +_See also_: + *note IBITS::, *note IBSET::, *note IAND::, *note IOR::, *note + IEOR::, *note MVBITS:: + + + +File: gfortran.info, Node: IBITS, Next: IBSET, Prev: IBCLR, Up: Intrinsic Procedures + +7.105 `IBITS' -- Bit extraction +=============================== + +_Description_: + `IBITS' extracts a field of length LEN from I, starting from bit + position POS and extending left for LEN bits. The result is + right-justified and the remaining bits are zeroed. The value of + `POS+LEN' must be less than or equal to the value `BIT_SIZE(I)'. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = IBITS(I, POS, LEN)' + +_Arguments_: + I The type shall be `INTEGER'. + POS The type shall be `INTEGER'. + LEN The type shall be `INTEGER'. + +_Return value_: + The return value is of type `INTEGER' and of the same kind as I. + +_See also_: + *note BIT_SIZE::, *note IBCLR::, *note IBSET::, *note IAND::, + *note IOR::, *note IEOR:: + + +File: gfortran.info, Node: IBSET, Next: ICHAR, Prev: IBITS, Up: Intrinsic Procedures + +7.106 `IBSET' -- Set bit +======================== + +_Description_: + `IBSET' returns the value of I with the bit at position POS set to + one. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = IBSET(I, POS)' + +_Arguments_: + I The type shall be `INTEGER'. + POS The type shall be `INTEGER'. + +_Return value_: + The return value is of type `INTEGER' and of the same kind as I. + +_See also_: + *note IBCLR::, *note IBITS::, *note IAND::, *note IOR::, *note + IEOR::, *note MVBITS:: + + + +File: gfortran.info, Node: ICHAR, Next: IDATE, Prev: IBSET, Up: Intrinsic Procedures + +7.107 `ICHAR' -- Character-to-integer conversion function +========================================================= + +_Description_: + `ICHAR(C)' returns the code for the character in the first + character position of `C' in the system's native character set. + The correspondence between characters and their codes is not + necessarily the same across different GNU Fortran implementations. + +_Standard_: + Fortan 95 and later, with KIND argument Fortran 2003 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ICHAR(C [, KIND])' + +_Arguments_: + C Shall be a scalar `CHARACTER', with + `INTENT(IN)' + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `INTEGER' and of kind KIND. If KIND is + absent, the return value is of default integer kind. + +_Example_: + program test_ichar + integer i + i = ichar(' ') + end program test_ichar + +_Note_: + No intrinsic exists to convert between a numeric value and a + formatted character string representation - for instance, given the + `CHARACTER' value `'154'', obtaining an `INTEGER' or `REAL' value + with the value 154, or vice versa. Instead, this functionality is + provided by internal-file I/O, as in the following example: + program read_val + integer value + character(len=10) string, string2 + string = '154' + + ! Convert a string to a numeric value + read (string,'(I10)') value + print *, value + + ! Convert a value to a formatted string + write (string2,'(I10)') value + print *, string2 + end program read_val + +_See also_: + *note ACHAR::, *note CHAR::, *note IACHAR:: + + + +File: gfortran.info, Node: IDATE, Next: IEOR, Prev: ICHAR, Up: Intrinsic Procedures + +7.108 `IDATE' -- Get current local time subroutine (day/month/year) +=================================================================== + +_Description_: + `IDATE(TARRAY)' Fills TARRAY with the numerical values at the + current local time. The day (in the range 1-31), month (in the + range 1-12), and year appear in elements 1, 2, and 3 of TARRAY, + respectively. The year has four significant digits. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL IDATE(VALUES)' + +_Arguments_: + VALUES The type shall be `INTEGER, DIMENSION(3)' and + the kind shall be the default integer kind. + +_Return value_: + Does not return anything. + +_Example_: + program test_idate + integer, dimension(3) :: tarray + call idate(tarray) + print *, tarray(1) + print *, tarray(2) + print *, tarray(3) + end program test_idate + + +File: gfortran.info, Node: IEOR, Next: IERRNO, Prev: IDATE, Up: Intrinsic Procedures + +7.109 `IEOR' -- Bitwise logical exclusive or +============================================ + +_Description_: + `IEOR' returns the bitwise boolean exclusive-OR of I and J. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = IEOR(I, J)' + +_Arguments_: + I The type shall be `INTEGER'. + J The type shall be `INTEGER', of the same kind + as I. (As a GNU extension, different kinds + are also permitted.) + +_Return value_: + The return type is `INTEGER', of the same kind as the arguments. + (If the argument kinds differ, it is of the same kind as the + larger argument.) + +_See also_: + *note IOR::, *note IAND::, *note IBITS::, *note IBSET::, *note + IBCLR::, *note NOT:: + + +File: gfortran.info, Node: IERRNO, Next: INDEX intrinsic, Prev: IEOR, Up: Intrinsic Procedures + +7.110 `IERRNO' -- Get the last system error number +================================================== + +_Description_: + Returns the last system error number, as given by the C `errno()' + function. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = IERRNO()' + +_Arguments_: + None. + +_Return value_: + The return value is of type `INTEGER' and of the default integer + kind. + +_See also_: + *note PERROR:: + + +File: gfortran.info, Node: INDEX intrinsic, Next: INT, Prev: IERRNO, Up: Intrinsic Procedures + +7.111 `INDEX' -- Position of a substring within a string +======================================================== + +_Description_: + Returns the position of the start of the first occurrence of string + SUBSTRING as a substring in STRING, counting from one. If + SUBSTRING is not present in STRING, zero is returned. If the BACK + argument is present and true, the return value is the start of the + last occurrence rather than the first. + +_Standard_: + Fortran 77 and later, with KIND argument Fortran 2003 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = INDEX(STRING, SUBSTRING [, BACK [, KIND]])' + +_Arguments_: + STRING Shall be a scalar `CHARACTER', with + `INTENT(IN)' + SUBSTRING Shall be a scalar `CHARACTER', with + `INTENT(IN)' + BACK (Optional) Shall be a scalar `LOGICAL', with + `INTENT(IN)' + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `INTEGER' and of kind KIND. If KIND is + absent, the return value is of default integer kind. + +_See also_: + *note SCAN::, *note VERIFY:: + + +File: gfortran.info, Node: INT, Next: INT2, Prev: INDEX intrinsic, Up: Intrinsic Procedures + +7.112 `INT' -- Convert to integer type +====================================== + +_Description_: + Convert to integer type + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = INT(A [, KIND))' + +_Arguments_: + A Shall be of type `INTEGER', `REAL', or + `COMPLEX'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + These functions return a `INTEGER' variable or array under the + following rules: + + (A) + If A is of type `INTEGER', `INT(A) = A' + + (B) + If A is of type `REAL' and |A| < 1, `INT(A)' equals `0'. If + |A| \geq 1, then `INT(A)' equals the largest integer that + does not exceed the range of A and whose sign is the same as + the sign of A. + + (C) + If A is of type `COMPLEX', rule B is applied to the real part + of A. + +_Example_: + program test_int + integer :: i = 42 + complex :: z = (-3.7, 1.0) + print *, int(i) + print *, int(z), int(z,8) + end program + +_Specific names_: + Name Argument Return type Standard + `IFIX(A)' `REAL(4) A' `INTEGER' Fortran 77 and + later + `IDINT(A)' `REAL(8) A' `INTEGER' Fortran 77 and + later + + + +File: gfortran.info, Node: INT2, Next: INT8, Prev: INT, Up: Intrinsic Procedures + +7.113 `INT2' -- Convert to 16-bit integer type +============================================== + +_Description_: + Convert to a `KIND=2' integer type. This is equivalent to the + standard `INT' intrinsic with an optional argument of `KIND=2', + and is only included for backwards compatibility. + + The `SHORT' intrinsic is equivalent to `INT2'. + +_Standard_: + GNU extension + +_Class_: + Elemental function + +_Syntax_: + `RESULT = INT2(A)' + +_Arguments_: + A Shall be of type `INTEGER', `REAL', or + `COMPLEX'. + +_Return value_: + The return value is a `INTEGER(2)' variable. + +_See also_: + *note INT::, *note INT8::, *note LONG:: + + +File: gfortran.info, Node: INT8, Next: IOR, Prev: INT2, Up: Intrinsic Procedures + +7.114 `INT8' -- Convert to 64-bit integer type +============================================== + +_Description_: + Convert to a `KIND=8' integer type. This is equivalent to the + standard `INT' intrinsic with an optional argument of `KIND=8', + and is only included for backwards compatibility. + +_Standard_: + GNU extension + +_Class_: + Elemental function + +_Syntax_: + `RESULT = INT8(A)' + +_Arguments_: + A Shall be of type `INTEGER', `REAL', or + `COMPLEX'. + +_Return value_: + The return value is a `INTEGER(8)' variable. + +_See also_: + *note INT::, *note INT2::, *note LONG:: + + +File: gfortran.info, Node: IOR, Next: IRAND, Prev: INT8, Up: Intrinsic Procedures + +7.115 `IOR' -- Bitwise logical or +================================= + +_Description_: + `IOR' returns the bitwise boolean inclusive-OR of I and J. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = IOR(I, J)' + +_Arguments_: + I The type shall be `INTEGER'. + J The type shall be `INTEGER', of the same kind + as I. (As a GNU extension, different kinds + are also permitted.) + +_Return value_: + The return type is `INTEGER', of the same kind as the arguments. + (If the argument kinds differ, it is of the same kind as the + larger argument.) + +_See also_: + *note IEOR::, *note IAND::, *note IBITS::, *note IBSET::, *note + IBCLR::, *note NOT:: + + +File: gfortran.info, Node: IRAND, Next: IS_IOSTAT_END, Prev: IOR, Up: Intrinsic Procedures + +7.116 `IRAND' -- Integer pseudo-random number +============================================= + +_Description_: + `IRAND(FLAG)' returns a pseudo-random number from a uniform + distribution between 0 and a system-dependent limit (which is in + most cases 2147483647). If FLAG is 0, the next number in the + current sequence is returned; if FLAG is 1, the generator is + restarted by `CALL SRAND(0)'; if FLAG has any other value, it is + used as a new seed with `SRAND'. + + This intrinsic routine is provided for backwards compatibility with + GNU Fortran 77. It implements a simple modulo generator as provided + by `g77'. For new code, one should consider the use of *note + RANDOM_NUMBER:: as it implements a superior algorithm. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = IRAND(I)' + +_Arguments_: + I Shall be a scalar `INTEGER' of kind 4. + +_Return value_: + The return value is of `INTEGER(kind=4)' type. + +_Example_: + program test_irand + integer,parameter :: seed = 86456 + + call srand(seed) + print *, irand(), irand(), irand(), irand() + print *, irand(seed), irand(), irand(), irand() + end program test_irand + + + +File: gfortran.info, Node: IS_IOSTAT_END, Next: IS_IOSTAT_EOR, Prev: IRAND, Up: Intrinsic Procedures + +7.117 `IS_IOSTAT_END' -- Test for end-of-file value +=================================================== + +_Description_: + `IS_IOSTAT_END' tests whether an variable has the value of the I/O + status "end of file". The function is equivalent to comparing the + variable with the `IOSTAT_END' parameter of the intrinsic module + `ISO_FORTRAN_ENV'. + +_Standard_: + Fortran 2003 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = IS_IOSTAT_END(I)' + +_Arguments_: + I Shall be of the type `INTEGER'. + +_Return value_: + Returns a `LOGICAL' of the default kind, which `.TRUE.' if I has + the value which indicates an end of file condition for IOSTAT= + specifiers, and is `.FALSE.' otherwise. + +_Example_: + PROGRAM iostat + IMPLICIT NONE + INTEGER :: stat, i + OPEN(88, FILE='test.dat') + READ(88, *, IOSTAT=stat) i + IF(IS_IOSTAT_END(stat)) STOP 'END OF FILE' + END PROGRAM + + +File: gfortran.info, Node: IS_IOSTAT_EOR, Next: ISATTY, Prev: IS_IOSTAT_END, Up: Intrinsic Procedures + +7.118 `IS_IOSTAT_EOR' -- Test for end-of-record value +===================================================== + +_Description_: + `IS_IOSTAT_EOR' tests whether an variable has the value of the I/O + status "end of record". The function is equivalent to comparing the + variable with the `IOSTAT_EOR' parameter of the intrinsic module + `ISO_FORTRAN_ENV'. + +_Standard_: + Fortran 2003 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = IS_IOSTAT_EOR(I)' + +_Arguments_: + I Shall be of the type `INTEGER'. + +_Return value_: + Returns a `LOGICAL' of the default kind, which `.TRUE.' if I has + the value which indicates an end of file condition for IOSTAT= + specifiers, and is `.FALSE.' otherwise. + +_Example_: + PROGRAM iostat + IMPLICIT NONE + INTEGER :: stat, i(50) + OPEN(88, FILE='test.dat', FORM='UNFORMATTED') + READ(88, IOSTAT=stat) i + IF(IS_IOSTAT_EOR(stat)) STOP 'END OF RECORD' + END PROGRAM + + +File: gfortran.info, Node: ISATTY, Next: ISHFT, Prev: IS_IOSTAT_EOR, Up: Intrinsic Procedures + +7.119 `ISATTY' -- Whether a unit is a terminal device. +====================================================== + +_Description_: + Determine whether a unit is connected to a terminal device. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = ISATTY(UNIT)' + +_Arguments_: + UNIT Shall be a scalar `INTEGER'. + +_Return value_: + Returns `.TRUE.' if the UNIT is connected to a terminal device, + `.FALSE.' otherwise. + +_Example_: + PROGRAM test_isatty + INTEGER(kind=1) :: unit + DO unit = 1, 10 + write(*,*) isatty(unit=unit) + END DO + END PROGRAM + +_See also_: + *note TTYNAM:: + + +File: gfortran.info, Node: ISHFT, Next: ISHFTC, Prev: ISATTY, Up: Intrinsic Procedures + +7.120 `ISHFT' -- Shift bits +=========================== + +_Description_: + `ISHFT' returns a value corresponding to I with all of the bits + shifted SHIFT places. A value of SHIFT greater than zero + corresponds to a left shift, a value of zero corresponds to no + shift, and a value less than zero corresponds to a right shift. + If the absolute value of SHIFT is greater than `BIT_SIZE(I)', the + value is undefined. Bits shifted out from the left end or right + end are lost; zeros are shifted in from the opposite end. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ISHFT(I, SHIFT)' + +_Arguments_: + I The type shall be `INTEGER'. + SHIFT The type shall be `INTEGER'. + +_Return value_: + The return value is of type `INTEGER' and of the same kind as I. + +_See also_: + *note ISHFTC:: + + +File: gfortran.info, Node: ISHFTC, Next: ISNAN, Prev: ISHFT, Up: Intrinsic Procedures + +7.121 `ISHFTC' -- Shift bits circularly +======================================= + +_Description_: + `ISHFTC' returns a value corresponding to I with the rightmost + SIZE bits shifted circularly SHIFT places; that is, bits shifted + out one end are shifted into the opposite end. A value of SHIFT + greater than zero corresponds to a left shift, a value of zero + corresponds to no shift, and a value less than zero corresponds to + a right shift. The absolute value of SHIFT must be less than + SIZE. If the SIZE argument is omitted, it is taken to be + equivalent to `BIT_SIZE(I)'. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = ISHFTC(I, SHIFT [, SIZE])' + +_Arguments_: + I The type shall be `INTEGER'. + SHIFT The type shall be `INTEGER'. + SIZE (Optional) The type shall be `INTEGER'; the + value must be greater than zero and less than + or equal to `BIT_SIZE(I)'. + +_Return value_: + The return value is of type `INTEGER' and of the same kind as I. + +_See also_: + *note ISHFT:: + + +File: gfortran.info, Node: ISNAN, Next: ITIME, Prev: ISHFTC, Up: Intrinsic Procedures + +7.122 `ISNAN' -- Test for a NaN +=============================== + +_Description_: + `ISNAN' tests whether a floating-point value is an IEEE + Not-a-Number (NaN). + +_Standard_: + GNU extension + +_Class_: + Elemental function + +_Syntax_: + `ISNAN(X)' + +_Arguments_: + X Variable of the type `REAL'. + +_Return value_: + Returns a default-kind `LOGICAL'. The returned value is `TRUE' if + X is a NaN and `FALSE' otherwise. + +_Example_: + program test_nan + implicit none + real :: x + x = -1.0 + x = sqrt(x) + if (isnan(x)) stop '"x" is a NaN' + end program test_nan + + +File: gfortran.info, Node: ITIME, Next: KILL, Prev: ISNAN, Up: Intrinsic Procedures + +7.123 `ITIME' -- Get current local time subroutine (hour/minutes/seconds) +========================================================================= + +_Description_: + `IDATE(VALUES)' Fills VALUES with the numerical values at the + current local time. The hour (in the range 1-24), minute (in the + range 1-60), and seconds (in the range 1-60) appear in elements 1, + 2, and 3 of VALUES, respectively. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL ITIME(VALUES)' + +_Arguments_: + VALUES The type shall be `INTEGER, DIMENSION(3)' and + the kind shall be the default integer kind. + +_Return value_: + Does not return anything. + +_Example_: + program test_itime + integer, dimension(3) :: tarray + call itime(tarray) + print *, tarray(1) + print *, tarray(2) + print *, tarray(3) + end program test_itime + + +File: gfortran.info, Node: KILL, Next: KIND, Prev: ITIME, Up: Intrinsic Procedures + +7.124 `KILL' -- Send a signal to a process +========================================== + +_Description_: + +_Standard_: + Sends the signal specified by SIGNAL to the process PID. See + `kill(2)'. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Class_: + Subroutine, function + +_Syntax_: + `CALL KILL(C, VALUE [, STATUS])' + +_Arguments_: + C Shall be a scalar `INTEGER', with `INTENT(IN)' + VALUE Shall be a scalar `INTEGER', with `INTENT(IN)' + STATUS (Optional) status flag of type `INTEGER(4)' or + `INTEGER(8)'. Returns 0 on success, or a + system-specific error code otherwise. + +_See also_: + *note ABORT::, *note EXIT:: + + +File: gfortran.info, Node: KIND, Next: LBOUND, Prev: KILL, Up: Intrinsic Procedures + +7.125 `KIND' -- Kind of an entity +================================= + +_Description_: + `KIND(X)' returns the kind value of the entity X. + +_Standard_: + Fortran 95 and later + +_Class_: + Inquiry function + +_Syntax_: + `K = KIND(X)' + +_Arguments_: + X Shall be of type `LOGICAL', `INTEGER', `REAL', + `COMPLEX' or `CHARACTER'. + +_Return value_: + The return value is a scalar of type `INTEGER' and of the default + integer kind. + +_Example_: + program test_kind + integer,parameter :: kc = kind(' ') + integer,parameter :: kl = kind(.true.) + + print *, "The default character kind is ", kc + print *, "The default logical kind is ", kl + end program test_kind + + + +File: gfortran.info, Node: LBOUND, Next: LEADZ, Prev: KIND, Up: Intrinsic Procedures + +7.126 `LBOUND' -- Lower dimension bounds of an array +==================================================== + +_Description_: + Returns the lower bounds of an array, or a single lower bound + along the DIM dimension. + +_Standard_: + Fortran 95 and later, with KIND argument Fortran 2003 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = LBOUND(ARRAY [, DIM [, KIND]])' + +_Arguments_: + ARRAY Shall be an array, of any type. + DIM (Optional) Shall be a scalar `INTEGER'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `INTEGER' and of kind KIND. If KIND is + absent, the return value is of default integer kind. If DIM is + absent, the result is an array of the lower bounds of ARRAY. If + DIM is present, the result is a scalar corresponding to the lower + bound of the array along that dimension. If ARRAY is an + expression rather than a whole array or array structure component, + or if it has a zero extent along the relevant dimension, the lower + bound is taken to be 1. + +_See also_: + *note UBOUND:: + + +File: gfortran.info, Node: LEADZ, Next: LEN, Prev: LBOUND, Up: Intrinsic Procedures + +7.127 `LEADZ' -- Number of leading zero bits of an integer +========================================================== + +_Description_: + `LEADZ' returns the number of leading zero bits of an integer. + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = LEADZ(I)' + +_Arguments_: + I Shall be of type `INTEGER'. + +_Return value_: + The type of the return value is the default `INTEGER'. If all the + bits of `I' are zero, the result value is `BIT_SIZE(I)'. + +_Example_: + PROGRAM test_leadz + WRITE (*,*) LEADZ(1) ! prints 8 if BITSIZE(I) has the value 32 + END PROGRAM + +_See also_: + *note BIT_SIZE::, *note TRAILZ:: + + +File: gfortran.info, Node: LEN, Next: LEN_TRIM, Prev: LEADZ, Up: Intrinsic Procedures + +7.128 `LEN' -- Length of a character entity +=========================================== + +_Description_: + Returns the length of a character string. If STRING is an array, + the length of an element of STRING is returned. Note that STRING + need not be defined when this intrinsic is invoked, since only the + length, not the content, of STRING is needed. + +_Standard_: + Fortran 77 and later, with KIND argument Fortran 2003 and later + +_Class_: + Inquiry function + +_Syntax_: + `L = LEN(STRING [, KIND])' + +_Arguments_: + STRING Shall be a scalar or array of type + `CHARACTER', with `INTENT(IN)' + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `INTEGER' and of kind KIND. If KIND is + absent, the return value is of default integer kind. + +_See also_: + *note LEN_TRIM::, *note ADJUSTL::, *note ADJUSTR:: + + +File: gfortran.info, Node: LEN_TRIM, Next: LOG_GAMMA, Prev: LEN, Up: Intrinsic Procedures + +7.129 `LEN_TRIM' -- Length of a character entity without trailing blank characters +================================================================================== + +_Description_: + Returns the length of a character string, ignoring any trailing + blanks. + +_Standard_: + Fortran 95 and later, with KIND argument Fortran 2003 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = LEN_TRIM(STRING [, KIND])' + +_Arguments_: + STRING Shall be a scalar of type `CHARACTER', with + `INTENT(IN)' + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `INTEGER' and of kind KIND. If KIND is + absent, the return value is of default integer kind. + +_See also_: + *note LEN::, *note ADJUSTL::, *note ADJUSTR:: + + +File: gfortran.info, Node: LGE, Next: LGT, Prev: LOG_GAMMA, Up: Intrinsic Procedures + +7.130 `LGE' -- Lexical greater than or equal +============================================ + +_Description_: + Determines whether one string is lexically greater than or equal to + another string, where the two strings are interpreted as containing + ASCII character codes. If the String A and String B are not the + same length, the shorter is compared as if spaces were appended to + it to form a value that has the same length as the longer. + + In general, the lexical comparison intrinsics `LGE', `LGT', `LLE', + and `LLT' differ from the corresponding intrinsic operators + `.GE.', `.GT.', `.LE.', and `.LT.', in that the latter use the + processor's character ordering (which is not ASCII on some + targets), whereas the former always use the ASCII ordering. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = LGE(STRING_A, STRING_B)' + +_Arguments_: + STRING_A Shall be of default `CHARACTER' type. + STRING_B Shall be of default `CHARACTER' type. + +_Return value_: + Returns `.TRUE.' if `STRING_A >= STRING_B', and `.FALSE.' + otherwise, based on the ASCII ordering. + +_See also_: + *note LGT::, *note LLE::, *note LLT:: + + +File: gfortran.info, Node: LGT, Next: LINK, Prev: LGE, Up: Intrinsic Procedures + +7.131 `LGT' -- Lexical greater than +=================================== + +_Description_: + Determines whether one string is lexically greater than another + string, where the two strings are interpreted as containing ASCII + character codes. If the String A and String B are not the same + length, the shorter is compared as if spaces were appended to it + to form a value that has the same length as the longer. + + In general, the lexical comparison intrinsics `LGE', `LGT', `LLE', + and `LLT' differ from the corresponding intrinsic operators + `.GE.', `.GT.', `.LE.', and `.LT.', in that the latter use the + processor's character ordering (which is not ASCII on some + targets), whereas the former always use the ASCII ordering. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = LGT(STRING_A, STRING_B)' + +_Arguments_: + STRING_A Shall be of default `CHARACTER' type. + STRING_B Shall be of default `CHARACTER' type. + +_Return value_: + Returns `.TRUE.' if `STRING_A > STRING_B', and `.FALSE.' + otherwise, based on the ASCII ordering. + +_See also_: + *note LGE::, *note LLE::, *note LLT:: + + +File: gfortran.info, Node: LINK, Next: LLE, Prev: LGT, Up: Intrinsic Procedures + +7.132 `LINK' -- Create a hard link +================================== + +_Description_: + Makes a (hard) link from file PATH1 to PATH2. A null character + (`CHAR(0)') can be used to mark the end of the names in PATH1 and + PATH2; otherwise, trailing blanks in the file names are ignored. + If the STATUS argument is supplied, it contains 0 on success or a + nonzero error code upon return; see `link(2)'. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL LINK(PATH1, PATH2 [, STATUS])' + `STATUS = LINK(PATH1, PATH2)' + +_Arguments_: + PATH1 Shall be of default `CHARACTER' type. + PATH2 Shall be of default `CHARACTER' type. + STATUS (Optional) Shall be of default `INTEGER' type. + +_See also_: + *note SYMLNK::, *note UNLINK:: + + +File: gfortran.info, Node: LLE, Next: LLT, Prev: LINK, Up: Intrinsic Procedures + +7.133 `LLE' -- Lexical less than or equal +========================================= + +_Description_: + Determines whether one string is lexically less than or equal to + another string, where the two strings are interpreted as + containing ASCII character codes. If the String A and String B + are not the same length, the shorter is compared as if spaces were + appended to it to form a value that has the same length as the + longer. + + In general, the lexical comparison intrinsics `LGE', `LGT', `LLE', + and `LLT' differ from the corresponding intrinsic operators + `.GE.', `.GT.', `.LE.', and `.LT.', in that the latter use the + processor's character ordering (which is not ASCII on some + targets), whereas the former always use the ASCII ordering. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = LLE(STRING_A, STRING_B)' + +_Arguments_: + STRING_A Shall be of default `CHARACTER' type. + STRING_B Shall be of default `CHARACTER' type. + +_Return value_: + Returns `.TRUE.' if `STRING_A <= STRING_B', and `.FALSE.' + otherwise, based on the ASCII ordering. + +_See also_: + *note LGE::, *note LGT::, *note LLT:: + + +File: gfortran.info, Node: LLT, Next: LNBLNK, Prev: LLE, Up: Intrinsic Procedures + +7.134 `LLT' -- Lexical less than +================================ + +_Description_: + Determines whether one string is lexically less than another + string, where the two strings are interpreted as containing ASCII + character codes. If the String A and String B are not the same + length, the shorter is compared as if spaces were appended to it + to form a value that has the same length as the longer. + + In general, the lexical comparison intrinsics `LGE', `LGT', `LLE', + and `LLT' differ from the corresponding intrinsic operators + `.GE.', `.GT.', `.LE.', and `.LT.', in that the latter use the + processor's character ordering (which is not ASCII on some + targets), whereas the former always use the ASCII ordering. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = LLT(STRING_A, STRING_B)' + +_Arguments_: + STRING_A Shall be of default `CHARACTER' type. + STRING_B Shall be of default `CHARACTER' type. + +_Return value_: + Returns `.TRUE.' if `STRING_A < STRING_B', and `.FALSE.' + otherwise, based on the ASCII ordering. + +_See also_: + *note LGE::, *note LGT::, *note LLE:: + + +File: gfortran.info, Node: LNBLNK, Next: LOC, Prev: LLT, Up: Intrinsic Procedures + +7.135 `LNBLNK' -- Index of the last non-blank character in a string +=================================================================== + +_Description_: + Returns the length of a character string, ignoring any trailing + blanks. This is identical to the standard `LEN_TRIM' intrinsic, + and is only included for backwards compatibility. + +_Standard_: + GNU extension + +_Class_: + Elemental function + +_Syntax_: + `RESULT = LNBLNK(STRING)' + +_Arguments_: + STRING Shall be a scalar of type `CHARACTER', with + `INTENT(IN)' + +_Return value_: + The return value is of `INTEGER(kind=4)' type. + +_See also_: + *note INDEX intrinsic::, *note LEN_TRIM:: + + +File: gfortran.info, Node: LOC, Next: LOG, Prev: LNBLNK, Up: Intrinsic Procedures + +7.136 `LOC' -- Returns the address of a variable +================================================ + +_Description_: + `LOC(X)' returns the address of X as an integer. + +_Standard_: + GNU extension + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = LOC(X)' + +_Arguments_: + X Variable of any type. + +_Return value_: + The return value is of type `INTEGER', with a `KIND' corresponding + to the size (in bytes) of a memory address on the target machine. + +_Example_: + program test_loc + integer :: i + real :: r + i = loc(r) + print *, i + end program test_loc + + +File: gfortran.info, Node: LOG, Next: LOG10, Prev: LOC, Up: Intrinsic Procedures + +7.137 `LOG' -- Logarithm function +================================= + +_Description_: + `LOG(X)' computes the logarithm of X. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = LOG(X)' + +_Arguments_: + X The type shall be `REAL' or `COMPLEX'. + +_Return value_: + The return value is of type `REAL' or `COMPLEX'. The kind type + parameter is the same as X. If X is `COMPLEX', the imaginary part + \omega is in the range -\pi \leq \omega \leq \pi. + +_Example_: + program test_log + real(8) :: x = 1.0_8 + complex :: z = (1.0, 2.0) + x = log(x) + z = log(z) + end program test_log + +_Specific names_: + Name Argument Return type Standard + `ALOG(X)' `REAL(4) X' `REAL(4)' f95, gnu + `DLOG(X)' `REAL(8) X' `REAL(8)' f95, gnu + `CLOG(X)' `COMPLEX(4) `COMPLEX(4)' f95, gnu + X' + `ZLOG(X)' `COMPLEX(8) `COMPLEX(8)' f95, gnu + X' + `CDLOG(X)' `COMPLEX(8) `COMPLEX(8)' f95, gnu + X' + + +File: gfortran.info, Node: LOG10, Next: LOGICAL, Prev: LOG, Up: Intrinsic Procedures + +7.138 `LOG10' -- Base 10 logarithm function +=========================================== + +_Description_: + `LOG10(X)' computes the base 10 logarithm of X. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = LOG10(X)' + +_Arguments_: + X The type shall be `REAL'. + +_Return value_: + The return value is of type `REAL' or `COMPLEX'. The kind type + parameter is the same as X. + +_Example_: + program test_log10 + real(8) :: x = 10.0_8 + x = log10(x) + end program test_log10 + +_Specific names_: + Name Argument Return type Standard + `ALOG10(X)' `REAL(4) X' `REAL(4)' Fortran 95 and + later + `DLOG10(X)' `REAL(8) X' `REAL(8)' Fortran 95 and + later + + +File: gfortran.info, Node: LOG_GAMMA, Next: LGE, Prev: LEN_TRIM, Up: Intrinsic Procedures + +7.139 `LOG_GAMMA' -- Logarithm of the Gamma function +==================================================== + +_Description_: + `LOG_GAMMA(X)' computes the natural logarithm of the absolute value + of the Gamma (\Gamma) function. + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `X = LOG_GAMMA(X)' + +_Arguments_: + X Shall be of type `REAL' and neither zero nor a + negative integer. + +_Return value_: + The return value is of type `REAL' of the same kind as X. + +_Example_: + program test_log_gamma + real :: x = 1.0 + x = lgamma(x) ! returns 0.0 + end program test_log_gamma + +_Specific names_: + Name Argument Return type Standard + `LGAMMA(X)' `REAL(4) X' `REAL(4)' GNU Extension + `ALGAMA(X)' `REAL(4) X' `REAL(4)' GNU Extension + `DLGAMA(X)' `REAL(8) X' `REAL(8)' GNU Extension + +_See also_: + Gamma function: *note GAMMA:: + + + +File: gfortran.info, Node: LOGICAL, Next: LONG, Prev: LOG10, Up: Intrinsic Procedures + +7.140 `LOGICAL' -- Convert to logical type +========================================== + +_Description_: + Converts one kind of `LOGICAL' variable to another. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = LOGICAL(L [, KIND])' + +_Arguments_: + L The type shall be `LOGICAL'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is a `LOGICAL' value equal to L, with a kind + corresponding to KIND, or of the default logical kind if KIND is + not given. + +_See also_: + *note INT::, *note REAL::, *note CMPLX:: + + +File: gfortran.info, Node: LONG, Next: LSHIFT, Prev: LOGICAL, Up: Intrinsic Procedures + +7.141 `LONG' -- Convert to integer type +======================================= + +_Description_: + Convert to a `KIND=4' integer type, which is the same size as a C + `long' integer. This is equivalent to the standard `INT' + intrinsic with an optional argument of `KIND=4', and is only + included for backwards compatibility. + +_Standard_: + GNU extension + +_Class_: + Elemental function + +_Syntax_: + `RESULT = LONG(A)' + +_Arguments_: + A Shall be of type `INTEGER', `REAL', or + `COMPLEX'. + +_Return value_: + The return value is a `INTEGER(4)' variable. + +_See also_: + *note INT::, *note INT2::, *note INT8:: + + +File: gfortran.info, Node: LSHIFT, Next: LSTAT, Prev: LONG, Up: Intrinsic Procedures + +7.142 `LSHIFT' -- Left shift bits +================================= + +_Description_: + `LSHIFT' returns a value corresponding to I with all of the bits + shifted left by SHIFT places. If the absolute value of SHIFT is + greater than `BIT_SIZE(I)', the value is undefined. Bits shifted + out from the left end are lost; zeros are shifted in from the + opposite end. + + This function has been superseded by the `ISHFT' intrinsic, which + is standard in Fortran 95 and later. + +_Standard_: + GNU extension + +_Class_: + Elemental function + +_Syntax_: + `RESULT = LSHIFT(I, SHIFT)' + +_Arguments_: + I The type shall be `INTEGER'. + SHIFT The type shall be `INTEGER'. + +_Return value_: + The return value is of type `INTEGER' and of the same kind as I. + +_See also_: + *note ISHFT::, *note ISHFTC::, *note RSHIFT:: + + + +File: gfortran.info, Node: LSTAT, Next: LTIME, Prev: LSHIFT, Up: Intrinsic Procedures + +7.143 `LSTAT' -- Get file status +================================ + +_Description_: + `LSTAT' is identical to *note STAT::, except that if path is a + symbolic link, then the link itself is statted, not the file that + it refers to. + + The elements in `BUFF' are the same as described by *note STAT::. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL LSTAT(FILE, BUFF [, STATUS])' + +_Arguments_: + FILE The type shall be `CHARACTER' of the default + kind, a valid path within the file system. + BUFF The type shall be `INTEGER(4), DIMENSION(13)'. + STATUS (Optional) status flag of type `INTEGER(4)'. + Returns 0 on success and a system specific + error code otherwise. + +_Example_: + See *note STAT:: for an example. + +_See also_: + To stat an open file: *note FSTAT::, to stat a file: *note STAT:: + + +File: gfortran.info, Node: LTIME, Next: MALLOC, Prev: LSTAT, Up: Intrinsic Procedures + +7.144 `LTIME' -- Convert time to local time info +================================================ + +_Description_: + Given a system time value STIME (as provided by the `TIME8()' + intrinsic), fills TARRAY with values extracted from it appropriate + to the local time zone using `localtime(3)'. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL LTIME(STIME, TARRAY)' + +_Arguments_: + STIME An `INTEGER' scalar expression corresponding + to a system time, with `INTENT(IN)'. + TARRAY A default `INTEGER' array with 9 elements, + with `INTENT(OUT)'. + +_Return value_: + The elements of TARRAY are assigned as follows: + 1. Seconds after the minute, range 0-59 or 0-61 to allow for leap + seconds + + 2. Minutes after the hour, range 0-59 + + 3. Hours past midnight, range 0-23 + + 4. Day of month, range 0-31 + + 5. Number of months since January, range 0-12 + + 6. Years since 1900 + + 7. Number of days since Sunday, range 0-6 + + 8. Days since January 1 + + 9. Daylight savings indicator: positive if daylight savings is in + effect, zero if not, and negative if the information is not + available. + +_See also_: + *note CTIME::, *note GMTIME::, *note TIME::, *note TIME8:: + + + +File: gfortran.info, Node: MALLOC, Next: MATMUL, Prev: LTIME, Up: Intrinsic Procedures + +7.145 `MALLOC' -- Allocate dynamic memory +========================================= + +_Description_: + `MALLOC(SIZE)' allocates SIZE bytes of dynamic memory and returns + the address of the allocated memory. The `MALLOC' intrinsic is an + extension intended to be used with Cray pointers, and is provided + in GNU Fortran to allow the user to compile legacy code. For new + code using Fortran 95 pointers, the memory allocation intrinsic is + `ALLOCATE'. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `PTR = MALLOC(SIZE)' + +_Arguments_: + SIZE The type shall be `INTEGER'. + +_Return value_: + The return value is of type `INTEGER(K)', with K such that + variables of type `INTEGER(K)' have the same size as C pointers + (`sizeof(void *)'). + +_Example_: + The following example demonstrates the use of `MALLOC' and `FREE' + with Cray pointers. + + program test_malloc + implicit none + integer i + real*8 x(*), z + pointer(ptr_x,x) + + ptr_x = malloc(20*8) + do i = 1, 20 + x(i) = sqrt(1.0d0 / i) + end do + z = 0 + do i = 1, 20 + z = z + x(i) + print *, z + end do + call free(ptr_x) + end program test_malloc + +_See also_: + *note FREE:: + + +File: gfortran.info, Node: MATMUL, Next: MAX, Prev: MALLOC, Up: Intrinsic Procedures + +7.146 `MATMUL' -- matrix multiplication +======================================= + +_Description_: + Performs a matrix multiplication on numeric or logical arguments. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = MATMUL(MATRIX_A, MATRIX_B)' + +_Arguments_: + MATRIX_A An array of `INTEGER', `REAL', `COMPLEX', or + `LOGICAL' type, with a rank of one or two. + MATRIX_B An array of `INTEGER', `REAL', or `COMPLEX' + type if MATRIX_A is of a numeric type; + otherwise, an array of `LOGICAL' type. The + rank shall be one or two, and the first (or + only) dimension of MATRIX_B shall be equal to + the last (or only) dimension of MATRIX_A. + +_Return value_: + The matrix product of MATRIX_A and MATRIX_B. The type and kind of + the result follow the usual type and kind promotion rules, as for + the `*' or `.AND.' operators. + +_See also_: + + +File: gfortran.info, Node: MAX, Next: MAXEXPONENT, Prev: MATMUL, Up: Intrinsic Procedures + +7.147 `MAX' -- Maximum value of an argument list +================================================ + +_Description_: + Returns the argument with the largest (most positive) value. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = MAX(A1, A2 [, A3 [, ...]])' + +_Arguments_: + A1 The type shall be `INTEGER' or `REAL'. + A2, A3, An expression of the same type and kind as A1. + ... (As a GNU extension, arguments of different + kinds are permitted.) + +_Return value_: + The return value corresponds to the maximum value among the + arguments, and has the same type and kind as the first argument. + +_Specific names_: + Name Argument Return type Standard + `MAX0(I)' `INTEGER(4) `INTEGER(4)' Fortran 77 and + I' later + `AMAX0(I)' `INTEGER(4) `REAL(MAX(X))'Fortran 77 and + I' later + `MAX1(X)' `REAL X' `INT(MAX(X))' Fortran 77 and + later + `AMAX1(X)' `REAL(4) `REAL(4)' Fortran 77 and + X' later + `DMAX1(X)' `REAL(8) `REAL(8)' Fortran 77 and + X' later + +_See also_: + *note MAXLOC:: *note MAXVAL::, *note MIN:: + + + +File: gfortran.info, Node: MAXEXPONENT, Next: MAXLOC, Prev: MAX, Up: Intrinsic Procedures + +7.148 `MAXEXPONENT' -- Maximum exponent of a real kind +====================================================== + +_Description_: + `MAXEXPONENT(X)' returns the maximum exponent in the model of the + type of `X'. + +_Standard_: + Fortran 95 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = MAXEXPONENT(X)' + +_Arguments_: + X Shall be of type `REAL'. + +_Return value_: + The return value is of type `INTEGER' and of the default integer + kind. + +_Example_: + program exponents + real(kind=4) :: x + real(kind=8) :: y + + print *, minexponent(x), maxexponent(x) + print *, minexponent(y), maxexponent(y) + end program exponents + + +File: gfortran.info, Node: MAXLOC, Next: MAXVAL, Prev: MAXEXPONENT, Up: Intrinsic Procedures + +7.149 `MAXLOC' -- Location of the maximum value within an array +=============================================================== + +_Description_: + Determines the location of the element in the array with the + maximum value, or, if the DIM argument is supplied, determines the + locations of the maximum element along each row of the array in the + DIM direction. If MASK is present, only the elements for which + MASK is `.TRUE.' are considered. If more than one element in the + array has the maximum value, the location returned is that of the + first such element in array element order. If the array has zero + size, or all of the elements of MASK are `.FALSE.', then the + result is an array of zeroes. Similarly, if DIM is supplied and + all of the elements of MASK along a given row are zero, the result + value for that row is zero. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = MAXLOC(ARRAY, DIM [, MASK])' + `RESULT = MAXLOC(ARRAY [, MASK])' + +_Arguments_: + ARRAY Shall be an array of type `INTEGER', `REAL', + or `CHARACTER'. + DIM (Optional) Shall be a scalar of type + `INTEGER', with a value between one and the + rank of ARRAY, inclusive. It may not be an + optional dummy argument. + MASK Shall be an array of type `LOGICAL', and + conformable with ARRAY. + +_Return value_: + If DIM is absent, the result is a rank-one array with a length + equal to the rank of ARRAY. If DIM is present, the result is an + array with a rank one less than the rank of ARRAY, and a size + corresponding to the size of ARRAY with the DIM dimension removed. + If DIM is present and ARRAY has a rank of one, the result is a + scalar. In all cases, the result is of default `INTEGER' type. + +_See also_: + *note MAX::, *note MAXVAL:: + + + +File: gfortran.info, Node: MAXVAL, Next: MCLOCK, Prev: MAXLOC, Up: Intrinsic Procedures + +7.150 `MAXVAL' -- Maximum value of an array +=========================================== + +_Description_: + Determines the maximum value of the elements in an array value, + or, if the DIM argument is supplied, determines the maximum value + along each row of the array in the DIM direction. If MASK is + present, only the elements for which MASK is `.TRUE.' are + considered. If the array has zero size, or all of the elements of + MASK are `.FALSE.', then the result is `-HUGE(ARRAY)' if ARRAY is + numeric, or a string of nulls if ARRAY is of character type. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = MAXVAL(ARRAY, DIM [, MASK])' + `RESULT = MAXVAL(ARRAY [, MASK])' + +_Arguments_: + ARRAY Shall be an array of type `INTEGER', `REAL', + or `CHARACTER'. + DIM (Optional) Shall be a scalar of type + `INTEGER', with a value between one and the + rank of ARRAY, inclusive. It may not be an + optional dummy argument. + MASK Shall be an array of type `LOGICAL', and + conformable with ARRAY. + +_Return value_: + If DIM is absent, or if ARRAY has a rank of one, the result is a + scalar. If DIM is present, the result is an array with a rank one + less than the rank of ARRAY, and a size corresponding to the size + of ARRAY with the DIM dimension removed. In all cases, the result + is of the same type and kind as ARRAY. + +_See also_: + *note MAX::, *note MAXLOC:: + + +File: gfortran.info, Node: MCLOCK, Next: MCLOCK8, Prev: MAXVAL, Up: Intrinsic Procedures + +7.151 `MCLOCK' -- Time function +=============================== + +_Description_: + Returns the number of clock ticks since the start of the process, + based on the UNIX function `clock(3)'. + + This intrinsic is not fully portable, such as to systems with + 32-bit `INTEGER' types but supporting times wider than 32 bits. + Therefore, the values returned by this intrinsic might be, or + become, negative, or numerically less than previous values, during + a single run of the compiled program. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = MCLOCK()' + +_Return value_: + The return value is a scalar of type `INTEGER(4)', equal to the + number of clock ticks since the start of the process, or `-1' if + the system does not support `clock(3)'. + +_See also_: + *note CTIME::, *note GMTIME::, *note LTIME::, *note MCLOCK::, + *note TIME:: + + + +File: gfortran.info, Node: MCLOCK8, Next: MERGE, Prev: MCLOCK, Up: Intrinsic Procedures + +7.152 `MCLOCK8' -- Time function (64-bit) +========================================= + +_Description_: + Returns the number of clock ticks since the start of the process, + based on the UNIX function `clock(3)'. + + _Warning:_ this intrinsic does not increase the range of the timing + values over that returned by `clock(3)'. On a system with a 32-bit + `clock(3)', `MCLOCK8()' will return a 32-bit value, even though it + is converted to a 64-bit `INTEGER(8)' value. That means overflows + of the 32-bit value can still occur. Therefore, the values + returned by this intrinsic might be or become negative or + numerically less than previous values during a single run of the + compiled program. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = MCLOCK8()' + +_Return value_: + The return value is a scalar of type `INTEGER(8)', equal to the + number of clock ticks since the start of the process, or `-1' if + the system does not support `clock(3)'. + +_See also_: + *note CTIME::, *note GMTIME::, *note LTIME::, *note MCLOCK::, + *note TIME8:: + + + +File: gfortran.info, Node: MERGE, Next: MIN, Prev: MCLOCK8, Up: Intrinsic Procedures + +7.153 `MERGE' -- Merge variables +================================ + +_Description_: + Select values from two arrays according to a logical mask. The + result is equal to TSOURCE if MASK is `.TRUE.', or equal to + FSOURCE if it is `.FALSE.'. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = MERGE(TSOURCE, FSOURCE, MASK)' + +_Arguments_: + TSOURCE May be of any type. + FSOURCE Shall be of the same type and type parameters + as TSOURCE. + MASK Shall be of type `LOGICAL'. + +_Return value_: + The result is of the same type and type parameters as TSOURCE. + + + +File: gfortran.info, Node: MIN, Next: MINEXPONENT, Prev: MERGE, Up: Intrinsic Procedures + +7.154 `MIN' -- Minimum value of an argument list +================================================ + +_Description_: + Returns the argument with the smallest (most negative) value. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = MIN(A1, A2 [, A3, ...])' + +_Arguments_: + A1 The type shall be `INTEGER' or `REAL'. + A2, A3, An expression of the same type and kind as A1. + ... (As a GNU extension, arguments of different + kinds are permitted.) + +_Return value_: + The return value corresponds to the maximum value among the + arguments, and has the same type and kind as the first argument. + +_Specific names_: + Name Argument Return type Standard + `MIN0(I)' `INTEGER(4) `INTEGER(4)' Fortran 77 and + I' later + `AMIN0(I)' `INTEGER(4) `REAL(MIN(X))'Fortran 77 and + I' later + `MIN1(X)' `REAL X' `INT(MIN(X))' Fortran 77 and + later + `AMIN1(X)' `REAL(4) `REAL(4)' Fortran 77 and + X' later + `DMIN1(X)' `REAL(8) `REAL(8)' Fortran 77 and + X' later + +_See also_: + *note MAX::, *note MINLOC::, *note MINVAL:: + + +File: gfortran.info, Node: MINEXPONENT, Next: MINLOC, Prev: MIN, Up: Intrinsic Procedures + +7.155 `MINEXPONENT' -- Minimum exponent of a real kind +====================================================== + +_Description_: + `MINEXPONENT(X)' returns the minimum exponent in the model of the + type of `X'. + +_Standard_: + Fortran 95 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = MINEXPONENT(X)' + +_Arguments_: + X Shall be of type `REAL'. + +_Return value_: + The return value is of type `INTEGER' and of the default integer + kind. + +_Example_: + See `MAXEXPONENT' for an example. + + +File: gfortran.info, Node: MINLOC, Next: MINVAL, Prev: MINEXPONENT, Up: Intrinsic Procedures + +7.156 `MINLOC' -- Location of the minimum value within an array +=============================================================== + +_Description_: + Determines the location of the element in the array with the + minimum value, or, if the DIM argument is supplied, determines the + locations of the minimum element along each row of the array in the + DIM direction. If MASK is present, only the elements for which + MASK is `.TRUE.' are considered. If more than one element in the + array has the minimum value, the location returned is that of the + first such element in array element order. If the array has zero + size, or all of the elements of MASK are `.FALSE.', then the + result is an array of zeroes. Similarly, if DIM is supplied and + all of the elements of MASK along a given row are zero, the result + value for that row is zero. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = MINLOC(ARRAY, DIM [, MASK])' + `RESULT = MINLOC(ARRAY [, MASK])' + +_Arguments_: + ARRAY Shall be an array of type `INTEGER', `REAL', + or `CHARACTER'. + DIM (Optional) Shall be a scalar of type + `INTEGER', with a value between one and the + rank of ARRAY, inclusive. It may not be an + optional dummy argument. + MASK Shall be an array of type `LOGICAL', and + conformable with ARRAY. + +_Return value_: + If DIM is absent, the result is a rank-one array with a length + equal to the rank of ARRAY. If DIM is present, the result is an + array with a rank one less than the rank of ARRAY, and a size + corresponding to the size of ARRAY with the DIM dimension removed. + If DIM is present and ARRAY has a rank of one, the result is a + scalar. In all cases, the result is of default `INTEGER' type. + +_See also_: + *note MIN::, *note MINVAL:: + + + +File: gfortran.info, Node: MINVAL, Next: MOD, Prev: MINLOC, Up: Intrinsic Procedures + +7.157 `MINVAL' -- Minimum value of an array +=========================================== + +_Description_: + Determines the minimum value of the elements in an array value, + or, if the DIM argument is supplied, determines the minimum value + along each row of the array in the DIM direction. If MASK is + present, only the elements for which MASK is `.TRUE.' are + considered. If the array has zero size, or all of the elements of + MASK are `.FALSE.', then the result is `HUGE(ARRAY)' if ARRAY is + numeric, or a string of `CHAR(255)' characters if ARRAY is of + character type. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = MINVAL(ARRAY, DIM [, MASK])' + `RESULT = MINVAL(ARRAY [, MASK])' + +_Arguments_: + ARRAY Shall be an array of type `INTEGER', `REAL', + or `CHARACTER'. + DIM (Optional) Shall be a scalar of type + `INTEGER', with a value between one and the + rank of ARRAY, inclusive. It may not be an + optional dummy argument. + MASK Shall be an array of type `LOGICAL', and + conformable with ARRAY. + +_Return value_: + If DIM is absent, or if ARRAY has a rank of one, the result is a + scalar. If DIM is present, the result is an array with a rank one + less than the rank of ARRAY, and a size corresponding to the size + of ARRAY with the DIM dimension removed. In all cases, the result + is of the same type and kind as ARRAY. + +_See also_: + *note MIN::, *note MINLOC:: + + + +File: gfortran.info, Node: MOD, Next: MODULO, Prev: MINVAL, Up: Intrinsic Procedures + +7.158 `MOD' -- Remainder function +================================= + +_Description_: + `MOD(A,P)' computes the remainder of the division of A by P. It is + calculated as `A - (INT(A/P) * P)'. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = MOD(A, P)' + +_Arguments_: + A Shall be a scalar of type `INTEGER' or `REAL' + P Shall be a scalar of the same type as A and not + equal to zero + +_Return value_: + The kind of the return value is the result of cross-promoting the + kinds of the arguments. + +_Example_: + program test_mod + print *, mod(17,3) + print *, mod(17.5,5.5) + print *, mod(17.5d0,5.5) + print *, mod(17.5,5.5d0) + + print *, mod(-17,3) + print *, mod(-17.5,5.5) + print *, mod(-17.5d0,5.5) + print *, mod(-17.5,5.5d0) + + print *, mod(17,-3) + print *, mod(17.5,-5.5) + print *, mod(17.5d0,-5.5) + print *, mod(17.5,-5.5d0) + end program test_mod + +_Specific names_: + Name Arguments Return type Standard + `AMOD(A,P)' `REAL(4)' `REAL(4)' Fortran 95 and + later + `DMOD(A,P)' `REAL(8)' `REAL(8)' Fortran 95 and + later + + +File: gfortran.info, Node: MODULO, Next: MOVE_ALLOC, Prev: MOD, Up: Intrinsic Procedures + +7.159 `MODULO' -- Modulo function +================================= + +_Description_: + `MODULO(A,P)' computes the A modulo P. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = MODULO(A, P)' + +_Arguments_: + A Shall be a scalar of type `INTEGER' or `REAL' + P Shall be a scalar of the same type and kind as + A + +_Return value_: + The type and kind of the result are those of the arguments. + If A and P are of type `INTEGER': + `MODULO(A,P)' has the value R such that `A=Q*P+R', where Q is + an integer and R is between 0 (inclusive) and P (exclusive). + + If A and P are of type `REAL': + `MODULO(A,P)' has the value of `A - FLOOR (A / P) * P'. + In all cases, if P is zero the result is processor-dependent. + +_Example_: + program test_modulo + print *, modulo(17,3) + print *, modulo(17.5,5.5) + + print *, modulo(-17,3) + print *, modulo(-17.5,5.5) + + print *, modulo(17,-3) + print *, modulo(17.5,-5.5) + end program + + + +File: gfortran.info, Node: MOVE_ALLOC, Next: MVBITS, Prev: MODULO, Up: Intrinsic Procedures + +7.160 `MOVE_ALLOC' -- Move allocation from one object to another +================================================================ + +_Description_: + `MOVE_ALLOC(SRC, DEST)' moves the allocation from SRC to DEST. + SRC will become deallocated in the process. + +_Standard_: + Fortran 2003 and later + +_Class_: + Subroutine + +_Syntax_: + `CALL MOVE_ALLOC(SRC, DEST)' + +_Arguments_: + SRC `ALLOCATABLE', `INTENT(INOUT)', may be of any + type and kind. + DEST `ALLOCATABLE', `INTENT(OUT)', shall be of the + same type, kind and rank as SRC. + +_Return value_: + None + +_Example_: + program test_move_alloc + integer, allocatable :: a(:), b(:) + + allocate(a(3)) + a = [ 1, 2, 3 ] + call move_alloc(a, b) + print *, allocated(a), allocated(b) + print *, b + end program test_move_alloc + + +File: gfortran.info, Node: MVBITS, Next: NEAREST, Prev: MOVE_ALLOC, Up: Intrinsic Procedures + +7.161 `MVBITS' -- Move bits from one integer to another +======================================================= + +_Description_: + Moves LEN bits from positions FROMPOS through `FROMPOS+LEN-1' of + FROM to positions TOPOS through `TOPOS+LEN-1' of TO. The portion + of argument TO not affected by the movement of bits is unchanged. + The values of `FROMPOS+LEN-1' and `TOPOS+LEN-1' must be less than + `BIT_SIZE(FROM)'. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental subroutine + +_Syntax_: + `CALL MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)' + +_Arguments_: + FROM The type shall be `INTEGER'. + FROMPOS The type shall be `INTEGER'. + LEN The type shall be `INTEGER'. + TO The type shall be `INTEGER', of the same kind + as FROM. + TOPOS The type shall be `INTEGER'. + +_See also_: + *note IBCLR::, *note IBSET::, *note IBITS::, *note IAND::, *note + IOR::, *note IEOR:: + + +File: gfortran.info, Node: NEAREST, Next: NEW_LINE, Prev: MVBITS, Up: Intrinsic Procedures + +7.162 `NEAREST' -- Nearest representable number +=============================================== + +_Description_: + `NEAREST(X, S)' returns the processor-representable number nearest + to `X' in the direction indicated by the sign of `S'. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = NEAREST(X, S)' + +_Arguments_: + X Shall be of type `REAL'. + S (Optional) shall be of type `REAL' and not + equal to zero. + +_Return value_: + The return value is of the same type as `X'. If `S' is positive, + `NEAREST' returns the processor-representable number greater than + `X' and nearest to it. If `S' is negative, `NEAREST' returns the + processor-representable number smaller than `X' and nearest to it. + +_Example_: + program test_nearest + real :: x, y + x = nearest(42.0, 1.0) + y = nearest(42.0, -1.0) + write (*,"(3(G20.15))") x, y, x - y + end program test_nearest + + +File: gfortran.info, Node: NEW_LINE, Next: NINT, Prev: NEAREST, Up: Intrinsic Procedures + +7.163 `NEW_LINE' -- New line character +====================================== + +_Description_: + `NEW_LINE(C)' returns the new-line character. + +_Standard_: + Fortran 2003 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = NEW_LINE(C)' + +_Arguments_: + C The argument shall be a scalar or array of the + type `CHARACTER'. + +_Return value_: + Returns a CHARACTER scalar of length one with the new-line + character of the same kind as parameter C. + +_Example_: + program newline + implicit none + write(*,'(A)') 'This is record 1.'//NEW_LINE('A')//'This is record 2.' + end program newline + + +File: gfortran.info, Node: NINT, Next: NOT, Prev: NEW_LINE, Up: Intrinsic Procedures + +7.164 `NINT' -- Nearest whole number +==================================== + +_Description_: + `NINT(X)' rounds its argument to the nearest whole number. + +_Standard_: + Fortran 77 and later, with KIND argument Fortran 90 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = NINT(X [, KIND])' + +_Arguments_: + X The type of the argument shall be `REAL'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + Returns A with the fractional portion of its magnitude eliminated + by rounding to the nearest whole number and with its sign + preserved, converted to an `INTEGER' of the default kind. + +_Example_: + program test_nint + real(4) x4 + real(8) x8 + x4 = 1.234E0_4 + x8 = 4.321_8 + print *, nint(x4), idnint(x8) + end program test_nint + +_Specific names_: + Name Argument Standard + `IDNINT(X)' `REAL(8)' Fortran 95 and + later + +_See also_: + *note CEILING::, *note FLOOR:: + + + +File: gfortran.info, Node: NOT, Next: NULL, Prev: NINT, Up: Intrinsic Procedures + +7.165 `NOT' -- Logical negation +=============================== + +_Description_: + `NOT' returns the bitwise boolean inverse of I. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = NOT(I)' + +_Arguments_: + I The type shall be `INTEGER'. + +_Return value_: + The return type is `INTEGER', of the same kind as the argument. + +_See also_: + *note IAND::, *note IEOR::, *note IOR::, *note IBITS::, *note + IBSET::, *note IBCLR:: + + + +File: gfortran.info, Node: NULL, Next: OR, Prev: NOT, Up: Intrinsic Procedures + +7.166 `NULL' -- Function that returns an disassociated pointer +============================================================== + +_Description_: + Returns a disassociated pointer. + + If MOLD is present, a dissassociated pointer of the same type is + returned, otherwise the type is determined by context. + + In Fortran 95, MOLD is optional. Please note that Fortran 2003 + includes cases where it is required. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `PTR => NULL([MOLD])' + +_Arguments_: + MOLD (Optional) shall be a pointer of any + association status and of any type. + +_Return value_: + A disassociated pointer. + +_Example_: + REAL, POINTER, DIMENSION(:) :: VEC => NULL () + +_See also_: + *note ASSOCIATED:: + + +File: gfortran.info, Node: OR, Next: PACK, Prev: NULL, Up: Intrinsic Procedures + +7.167 `OR' -- Bitwise logical OR +================================ + +_Description_: + Bitwise logical `OR'. + + This intrinsic routine is provided for backwards compatibility with + GNU Fortran 77. For integer arguments, programmers should consider + the use of the *note IOR:: intrinsic defined by the Fortran + standard. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = OR(X, Y)' + +_Arguments_: + X The type shall be either a scalar `INTEGER' + type or a scalar `LOGICAL' type. + Y The type shall be the same as the type of X. + +_Return value_: + The return type is either a scalar `INTEGER' or a scalar + `LOGICAL'. If the kind type parameters differ, then the smaller + kind type is implicitly converted to larger kind, and the return + has the larger kind. + +_Example_: + PROGRAM test_or + LOGICAL :: T = .TRUE., F = .FALSE. + INTEGER :: a, b + DATA a / Z'F' /, b / Z'3' / + + WRITE (*,*) OR(T, T), OR(T, F), OR(F, T), OR(F, F) + WRITE (*,*) OR(a, b) + END PROGRAM + +_See also_: + Fortran 95 elemental function: *note IOR:: + + +File: gfortran.info, Node: PACK, Next: PERROR, Prev: OR, Up: Intrinsic Procedures + +7.168 `PACK' -- Pack an array into an array of rank one +======================================================= + +_Description_: + Stores the elements of ARRAY in an array of rank one. + + The beginning of the resulting array is made up of elements whose + MASK equals `TRUE'. Afterwards, positions are filled with elements + taken from VECTOR. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = PACK(ARRAY, MASK[,VECTOR]' + +_Arguments_: + ARRAY Shall be an array of any type. + MASK Shall be an array of type `LOGICAL' and of the + same size as ARRAY. Alternatively, it may be a + `LOGICAL' scalar. + VECTOR (Optional) shall be an array of the same type + as ARRAY and of rank one. If present, the + number of elements in VECTOR shall be equal to + or greater than the number of true elements in + MASK. If MASK is scalar, the number of + elements in VECTOR shall be equal to or + greater than the number of elements in ARRAY. + +_Return value_: + The result is an array of rank one and the same type as that of + ARRAY. If VECTOR is present, the result size is that of VECTOR, + the number of `TRUE' values in MASK otherwise. + +_Example_: + Gathering nonzero elements from an array: + PROGRAM test_pack_1 + INTEGER :: m(6) + m = (/ 1, 0, 0, 0, 5, 0 /) + WRITE(*, FMT="(6(I0, ' '))") pack(m, m /= 0) ! "1 5" + END PROGRAM + + Gathering nonzero elements from an array and appending elements + from VECTOR: + PROGRAM test_pack_2 + INTEGER :: m(4) + m = (/ 1, 0, 0, 2 /) + WRITE(*, FMT="(4(I0, ' '))") pack(m, m /= 0, (/ 0, 0, 3, 4 /)) ! "1 2 3 4" + END PROGRAM + +_See also_: + *note UNPACK:: + + +File: gfortran.info, Node: PERROR, Next: PRECISION, Prev: PACK, Up: Intrinsic Procedures + +7.169 `PERROR' -- Print system error message +============================================ + +_Description_: + Prints (on the C `stderr' stream) a newline-terminated error + message corresponding to the last system error. This is prefixed by + STRING, a colon and a space. See `perror(3)'. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL PERROR(STRING)' + +_Arguments_: + STRING A scalar of type `CHARACTER' and of the + default kind. + +_See also_: + *note IERRNO:: + + +File: gfortran.info, Node: PRECISION, Next: PRESENT, Prev: PERROR, Up: Intrinsic Procedures + +7.170 `PRECISION' -- Decimal precision of a real kind +===================================================== + +_Description_: + `PRECISION(X)' returns the decimal precision in the model of the + type of `X'. + +_Standard_: + Fortran 95 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = PRECISION(X)' + +_Arguments_: + X Shall be of type `REAL' or `COMPLEX'. + +_Return value_: + The return value is of type `INTEGER' and of the default integer + kind. + +_Example_: + program prec_and_range + real(kind=4) :: x(2) + complex(kind=8) :: y + + print *, precision(x), range(x) + print *, precision(y), range(y) + end program prec_and_range + + +File: gfortran.info, Node: PRESENT, Next: PRODUCT, Prev: PRECISION, Up: Intrinsic Procedures + +7.171 `PRESENT' -- Determine whether an optional dummy argument is specified +============================================================================ + +_Description_: + Determines whether an optional dummy argument is present. + +_Standard_: + Fortran 95 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = PRESENT(A)' + +_Arguments_: + A May be of any type and may be a pointer, + scalar or array value, or a dummy procedure. + It shall be the name of an optional dummy + argument accessible within the current + subroutine or function. + +_Return value_: + Returns either `TRUE' if the optional argument A is present, or + `FALSE' otherwise. + +_Example_: + PROGRAM test_present + WRITE(*,*) f(), f(42) ! "F T" + CONTAINS + LOGICAL FUNCTION f(x) + INTEGER, INTENT(IN), OPTIONAL :: x + f = PRESENT(x) + END FUNCTION + END PROGRAM + + +File: gfortran.info, Node: PRODUCT, Next: RADIX, Prev: PRESENT, Up: Intrinsic Procedures + +7.172 `PRODUCT' -- Product of array elements +============================================ + +_Description_: + Multiplies the elements of ARRAY along dimension DIM if the + corresponding element in MASK is `TRUE'. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = PRODUCT(ARRAY[, MASK])' `RESULT = PRODUCT(ARRAY, DIM[, + MASK])' + +_Arguments_: + ARRAY Shall be an array of type `INTEGER', `REAL' or + `COMPLEX'. + DIM (Optional) shall be a scalar of type `INTEGER' + with a value in the range from 1 to n, where n + equals the rank of ARRAY. + MASK (Optional) shall be of type `LOGICAL' and + either be a scalar or an array of the same + shape as ARRAY. + +_Return value_: + The result is of the same type as ARRAY. + + If DIM is absent, a scalar with the product of all elements in + ARRAY is returned. Otherwise, an array of rank n-1, where n equals + the rank of ARRAY, and a shape similar to that of ARRAY with + dimension DIM dropped is returned. + +_Example_: + PROGRAM test_product + INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /) + print *, PRODUCT(x) ! all elements, product = 120 + print *, PRODUCT(x, MASK=MOD(x, 2)==1) ! odd elements, product = 15 + END PROGRAM + +_See also_: + *note SUM:: + + +File: gfortran.info, Node: RADIX, Next: RANDOM_NUMBER, Prev: PRODUCT, Up: Intrinsic Procedures + +7.173 `RADIX' -- Base of a model number +======================================= + +_Description_: + `RADIX(X)' returns the base of the model representing the entity X. + +_Standard_: + Fortran 95 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = RADIX(X)' + +_Arguments_: + X Shall be of type `INTEGER' or `REAL' + +_Return value_: + The return value is a scalar of type `INTEGER' and of the default + integer kind. + +_Example_: + program test_radix + print *, "The radix for the default integer kind is", radix(0) + print *, "The radix for the default real kind is", radix(0.0) + end program test_radix + + + +File: gfortran.info, Node: RAN, Next: REAL, Prev: RANGE, Up: Intrinsic Procedures + +7.174 `RAN' -- Real pseudo-random number +======================================== + +_Description_: + For compatibility with HP FORTRAN 77/iX, the `RAN' intrinsic is + provided as an alias for `RAND'. See *note RAND:: for complete + documentation. + +_Standard_: + GNU extension + +_Class_: + Function + +_See also_: + *note RAND::, *note RANDOM_NUMBER:: + + +File: gfortran.info, Node: RAND, Next: RANGE, Prev: RANDOM_SEED, Up: Intrinsic Procedures + +7.175 `RAND' -- Real pseudo-random number +========================================= + +_Description_: + `RAND(FLAG)' returns a pseudo-random number from a uniform + distribution between 0 and 1. If FLAG is 0, the next number in the + current sequence is returned; if FLAG is 1, the generator is + restarted by `CALL SRAND(0)'; if FLAG has any other value, it is + used as a new seed with `SRAND'. + + This intrinsic routine is provided for backwards compatibility with + GNU Fortran 77. It implements a simple modulo generator as provided + by `g77'. For new code, one should consider the use of *note + RANDOM_NUMBER:: as it implements a superior algorithm. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = RAND(FLAG)' + +_Arguments_: + FLAG Shall be a scalar `INTEGER' of kind 4. + +_Return value_: + The return value is of `REAL' type and the default kind. + +_Example_: + program test_rand + integer,parameter :: seed = 86456 + + call srand(seed) + print *, rand(), rand(), rand(), rand() + print *, rand(seed), rand(), rand(), rand() + end program test_rand + +_See also_: + *note SRAND::, *note RANDOM_NUMBER:: + + + +File: gfortran.info, Node: RANDOM_NUMBER, Next: RANDOM_SEED, Prev: RADIX, Up: Intrinsic Procedures + +7.176 `RANDOM_NUMBER' -- Pseudo-random number +============================================= + +_Description_: + Returns a single pseudorandom number or an array of pseudorandom + numbers from the uniform distribution over the range 0 \leq x < 1. + + The runtime-library implements George Marsaglia's KISS (Keep It + Simple Stupid) random number generator (RNG). This RNG combines: + 1. The congruential generator x(n) = 69069 \cdot x(n-1) + + 1327217885 with a period of 2^32, + + 2. A 3-shift shift-register generator with a period of 2^32 - 1, + + 3. Two 16-bit multiply-with-carry generators with a period of + 597273182964842497 > 2^59. + The overall period exceeds 2^123. + + Please note, this RNG is thread safe if used within OpenMP + directives, i.e., its state will be consistent while called from + multiple threads. However, the KISS generator does not create + random numbers in parallel from multiple sources, but in sequence + from a single source. If an OpenMP-enabled application heavily + relies on random numbers, one should consider employing a + dedicated parallel random number generator instead. + +_Standard_: + Fortran 95 and later + +_Class_: + Subroutine + +_Syntax_: + `RANDOM_NUMBER(HARVEST)' + +_Arguments_: + HARVEST Shall be a scalar or an array of type `REAL'. + +_Example_: + program test_random_number + REAL :: r(5,5) + CALL init_random_seed() ! see example of RANDOM_SEED + CALL RANDOM_NUMBER(r) + end program + +_See also_: + *note RANDOM_SEED:: + + +File: gfortran.info, Node: RANDOM_SEED, Next: RAND, Prev: RANDOM_NUMBER, Up: Intrinsic Procedures + +7.177 `RANDOM_SEED' -- Initialize a pseudo-random number sequence +================================================================= + +_Description_: + Restarts or queries the state of the pseudorandom number generator + used by `RANDOM_NUMBER'. + + If `RANDOM_SEED' is called without arguments, it is initialized to + a default state. The example below shows how to initialize the + random seed based on the system's time. + +_Standard_: + Fortran 95 and later + +_Class_: + Subroutine + +_Syntax_: + `CALL RANDOM_SEED(SIZE, PUT, GET)' + +_Arguments_: + SIZE (Optional) Shall be a scalar and of type + default `INTEGER', with `INTENT(OUT)'. It + specifies the minimum size of the arrays used + with the PUT and GET arguments. + PUT (Optional) Shall be an array of type default + `INTEGER' and rank one. It is `INTENT(IN)' and + the size of the array must be larger than or + equal to the number returned by the SIZE + argument. + GET (Optional) Shall be an array of type default + `INTEGER' and rank one. It is `INTENT(OUT)' + and the size of the array must be larger than + or equal to the number returned by the SIZE + argument. + +_Example_: + SUBROUTINE init_random_seed() + INTEGER :: i, n, clock + INTEGER, DIMENSION(:), ALLOCATABLE :: seed + + CALL RANDOM_SEED(size = n) + ALLOCATE(seed(n)) + + CALL SYSTEM_CLOCK(COUNT=clock) + + seed = clock + 37 * (/ (i - 1, i = 1, n) /) + CALL RANDOM_SEED(PUT = seed) + + DEALLOCATE(seed) + END SUBROUTINE + +_See also_: + *note RANDOM_NUMBER:: + + +File: gfortran.info, Node: RANGE, Next: RAN, Prev: RAND, Up: Intrinsic Procedures + +7.178 `RANGE' -- Decimal exponent range +======================================= + +_Description_: + `RANGE(X)' returns the decimal exponent range in the model of the + type of `X'. + +_Standard_: + Fortran 95 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = RANGE(X)' + +_Arguments_: + X Shall be of type `INTEGER', `REAL' or + `COMPLEX'. + +_Return value_: + The return value is of type `INTEGER' and of the default integer + kind. + +_Example_: + See `PRECISION' for an example. + + +File: gfortran.info, Node: REAL, Next: RENAME, Prev: RAN, Up: Intrinsic Procedures + +7.179 `REAL' -- Convert to real type +==================================== + +_Description_: + `REAL(X [, KIND])' converts its argument X to a real type. The + `REALPART(X)' function is provided for compatibility with `g77', + and its use is strongly discouraged. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = REAL(X [, KIND])' + `RESULT = REALPART(Z)' + +_Arguments_: + X Shall be `INTEGER', `REAL', or `COMPLEX'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + These functions return a `REAL' variable or array under the + following rules: + + (A) + `REAL(X)' is converted to a default real type if X is an + integer or real variable. + + (B) + `REAL(X)' is converted to a real type with the kind type + parameter of X if X is a complex variable. + + (C) + `REAL(X, KIND)' is converted to a real type with kind type + parameter KIND if X is a complex, integer, or real variable. + +_Example_: + program test_real + complex :: x = (1.0, 2.0) + print *, real(x), real(x,8), realpart(x) + end program test_real + +_See also_: + *note DBLE::, *note DFLOAT::, *note FLOAT:: + + + +File: gfortran.info, Node: RENAME, Next: REPEAT, Prev: REAL, Up: Intrinsic Procedures + +7.180 `RENAME' -- Rename a file +=============================== + +_Description_: + Renames a file from file PATH1 to PATH2. A null character + (`CHAR(0)') can be used to mark the end of the names in PATH1 and + PATH2; otherwise, trailing blanks in the file names are ignored. + If the STATUS argument is supplied, it contains 0 on success or a + nonzero error code upon return; see `rename(2)'. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL RENAME(PATH1, PATH2 [, STATUS])' + `STATUS = RENAME(PATH1, PATH2)' + +_Arguments_: + PATH1 Shall be of default `CHARACTER' type. + PATH2 Shall be of default `CHARACTER' type. + STATUS (Optional) Shall be of default `INTEGER' type. + +_See also_: + *note LINK:: + + + +File: gfortran.info, Node: REPEAT, Next: RESHAPE, Prev: RENAME, Up: Intrinsic Procedures + +7.181 `REPEAT' -- Repeated string concatenation +=============================================== + +_Description_: + Concatenates NCOPIES copies of a string. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = REPEAT(STRING, NCOPIES)' + +_Arguments_: + STRING Shall be scalar and of type `CHARACTER'. + NCOPIES Shall be scalar and of type `INTEGER'. + +_Return value_: + A new scalar of type `CHARACTER' built up from NCOPIES copies of + STRING. + +_Example_: + program test_repeat + write(*,*) repeat("x", 5) ! "xxxxx" + end program + + +File: gfortran.info, Node: RESHAPE, Next: RRSPACING, Prev: REPEAT, Up: Intrinsic Procedures + +7.182 `RESHAPE' -- Function to reshape an array +=============================================== + +_Description_: + Reshapes SOURCE to correspond to SHAPE. If necessary, the new + array may be padded with elements from PAD or permuted as defined + by ORDER. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = RESHAPE(SOURCE, SHAPE[, PAD, ORDER])' + +_Arguments_: + SOURCE Shall be an array of any type. + SHAPE Shall be of type `INTEGER' and an array of + rank one. Its values must be positive or zero. + PAD (Optional) shall be an array of the same type + as SOURCE. + ORDER (Optional) shall be of type `INTEGER' and an + array of the same shape as SHAPE. Its values + shall be a permutation of the numbers from 1 + to n, where n is the size of SHAPE. If ORDER + is absent, the natural ordering shall be + assumed. + +_Return value_: + The result is an array of shape SHAPE with the same type as SOURCE. + +_Example_: + PROGRAM test_reshape + INTEGER, DIMENSION(4) :: x + WRITE(*,*) SHAPE(x) ! prints "4" + WRITE(*,*) SHAPE(RESHAPE(x, (/2, 2/))) ! prints "2 2" + END PROGRAM + +_See also_: + *note SHAPE:: + + +File: gfortran.info, Node: RRSPACING, Next: RSHIFT, Prev: RESHAPE, Up: Intrinsic Procedures + +7.183 `RRSPACING' -- Reciprocal of the relative spacing +======================================================= + +_Description_: + `RRSPACING(X)' returns the reciprocal of the relative spacing of + model numbers near X. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = RRSPACING(X)' + +_Arguments_: + X Shall be of type `REAL'. + +_Return value_: + The return value is of the same type and kind as X. The value + returned is equal to `ABS(FRACTION(X)) * + FLOAT(RADIX(X))**DIGITS(X)'. + +_See also_: + *note SPACING:: + + +File: gfortran.info, Node: RSHIFT, Next: SCALE, Prev: RRSPACING, Up: Intrinsic Procedures + +7.184 `RSHIFT' -- Right shift bits +================================== + +_Description_: + `RSHIFT' returns a value corresponding to I with all of the bits + shifted right by SHIFT places. If the absolute value of SHIFT is + greater than `BIT_SIZE(I)', the value is undefined. Bits shifted + out from the left end are lost; zeros are shifted in from the + opposite end. + + This function has been superseded by the `ISHFT' intrinsic, which + is standard in Fortran 95 and later. + +_Standard_: + GNU extension + +_Class_: + Elemental function + +_Syntax_: + `RESULT = RSHIFT(I, SHIFT)' + +_Arguments_: + I The type shall be `INTEGER'. + SHIFT The type shall be `INTEGER'. + +_Return value_: + The return value is of type `INTEGER' and of the same kind as I. + +_See also_: + *note ISHFT::, *note ISHFTC::, *note LSHIFT:: + + + +File: gfortran.info, Node: SCALE, Next: SCAN, Prev: RSHIFT, Up: Intrinsic Procedures + +7.185 `SCALE' -- Scale a real value +=================================== + +_Description_: + `SCALE(X,I)' returns `X * RADIX(X)**I'. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = SCALE(X, I)' + +_Arguments_: + X The type of the argument shall be a `REAL'. + I The type of the argument shall be a `INTEGER'. + +_Return value_: + The return value is of the same type and kind as X. Its value is + `X * RADIX(X)**I'. + +_Example_: + program test_scale + real :: x = 178.1387e-4 + integer :: i = 5 + print *, scale(x,i), x*radix(x)**i + end program test_scale + + + +File: gfortran.info, Node: SCAN, Next: SECNDS, Prev: SCALE, Up: Intrinsic Procedures + +7.186 `SCAN' -- Scan a string for the presence of a set of characters +===================================================================== + +_Description_: + Scans a STRING for any of the characters in a SET of characters. + + If BACK is either absent or equals `FALSE', this function returns + the position of the leftmost character of STRING that is in SET. + If BACK equals `TRUE', the rightmost position is returned. If no + character of SET is found in STRING, the result is zero. + +_Standard_: + Fortran 95 and later, with KIND argument Fortran 2003 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = SCAN(STRING, SET[, BACK [, KIND]])' + +_Arguments_: + STRING Shall be of type `CHARACTER'. + SET Shall be of type `CHARACTER'. + BACK (Optional) shall be of type `LOGICAL'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `INTEGER' and of kind KIND. If KIND is + absent, the return value is of default integer kind. + +_Example_: + PROGRAM test_scan + WRITE(*,*) SCAN("FORTRAN", "AO") ! 2, found 'O' + WRITE(*,*) SCAN("FORTRAN", "AO", .TRUE.) ! 6, found 'A' + WRITE(*,*) SCAN("FORTRAN", "C++") ! 0, found none + END PROGRAM + +_See also_: + *note INDEX intrinsic::, *note VERIFY:: + + +File: gfortran.info, Node: SECNDS, Next: SECOND, Prev: SCAN, Up: Intrinsic Procedures + +7.187 `SECNDS' -- Time function +=============================== + +_Description_: + `SECNDS(X)' gets the time in seconds from the real-time system + clock. X is a reference time, also in seconds. If this is zero, + the time in seconds from midnight is returned. This function is + non-standard and its use is discouraged. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = SECNDS (X)' + +_Arguments_: + T Shall be of type `REAL(4)'. + X Shall be of type `REAL(4)'. + +_Return value_: + None + +_Example_: + program test_secnds + integer :: i + real(4) :: t1, t2 + print *, secnds (0.0) ! seconds since midnight + t1 = secnds (0.0) ! reference time + do i = 1, 10000000 ! do something + end do + t2 = secnds (t1) ! elapsed time + print *, "Something took ", t2, " seconds." + end program test_secnds + + +File: gfortran.info, Node: SECOND, Next: SELECTED_CHAR_KIND, Prev: SECNDS, Up: Intrinsic Procedures + +7.188 `SECOND' -- CPU time function +=================================== + +_Description_: + Returns a `REAL(4)' value representing the elapsed CPU time in + seconds. This provides the same functionality as the standard + `CPU_TIME' intrinsic, and is only included for backwards + compatibility. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL SECOND(TIME)' + `TIME = SECOND()' + +_Arguments_: + TIME Shall be of type `REAL(4)'. + +_Return value_: + In either syntax, TIME is set to the process's current runtime in + seconds. + +_See also_: + *note CPU_TIME:: + + + +File: gfortran.info, Node: SELECTED_CHAR_KIND, Next: SELECTED_INT_KIND, Prev: SECOND, Up: Intrinsic Procedures + +7.189 `SELECTED_CHAR_KIND' -- Choose character kind +=================================================== + +_Description_: + `SELECTED_CHAR_KIND(NAME)' returns the kind value for the character + set named NAME, if a character set with such a name is supported, + or -1 otherwise. Currently, supported character sets include + "ASCII" and "DEFAULT", which are equivalent. + +_Standard_: + Fortran 2003 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = SELECTED_CHAR_KIND(NAME)' + +_Arguments_: + NAME Shall be a scalar and of the default character + type. + +_Example_: + program ascii_kind + integer,parameter :: ascii = selected_char_kind("ascii") + character(kind=ascii, len=26) :: s + + s = ascii_"abcdefghijklmnopqrstuvwxyz" + print *, s + end program ascii_kind + + +File: gfortran.info, Node: SELECTED_INT_KIND, Next: SELECTED_REAL_KIND, Prev: SELECTED_CHAR_KIND, Up: Intrinsic Procedures + +7.190 `SELECTED_INT_KIND' -- Choose integer kind +================================================ + +_Description_: + `SELECTED_INT_KIND(I)' return the kind value of the smallest + integer type that can represent all values ranging from -10^I + (exclusive) to 10^I (exclusive). If there is no integer kind that + accommodates this range, `SELECTED_INT_KIND' returns -1. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = SELECTED_INT_KIND(I)' + +_Arguments_: + I Shall be a scalar and of type `INTEGER'. + +_Example_: + program large_integers + integer,parameter :: k5 = selected_int_kind(5) + integer,parameter :: k15 = selected_int_kind(15) + integer(kind=k5) :: i5 + integer(kind=k15) :: i15 + + print *, huge(i5), huge(i15) + + ! The following inequalities are always true + print *, huge(i5) >= 10_k5**5-1 + print *, huge(i15) >= 10_k15**15-1 + end program large_integers + + +File: gfortran.info, Node: SELECTED_REAL_KIND, Next: SET_EXPONENT, Prev: SELECTED_INT_KIND, Up: Intrinsic Procedures + +7.191 `SELECTED_REAL_KIND' -- Choose real kind +============================================== + +_Description_: + `SELECTED_REAL_KIND(P,R)' returns the kind value of a real data + type with decimal precision of at least `P' digits and exponent + range greater at least `R'. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = SELECTED_REAL_KIND(P, R)' + +_Arguments_: + P (Optional) shall be a scalar and of type + `INTEGER'. + R (Optional) shall be a scalar and of type + `INTEGER'. + At least one argument shall be present. + +_Return value_: + `SELECTED_REAL_KIND' returns the value of the kind type parameter + of a real data type with decimal precision of at least `P' digits + and a decimal exponent range of at least `R'. If more than one + real data type meet the criteria, the kind of the data type with + the smallest decimal precision is returned. If no real data type + matches the criteria, the result is + -1 if the processor does not support a real data type with a + precision greater than or equal to `P' + + -2 if the processor does not support a real type with an exponent + range greater than or equal to `R' + + -3 if neither is supported. + +_Example_: + program real_kinds + integer,parameter :: p6 = selected_real_kind(6) + integer,parameter :: p10r100 = selected_real_kind(10,100) + integer,parameter :: r400 = selected_real_kind(r=400) + real(kind=p6) :: x + real(kind=p10r100) :: y + real(kind=r400) :: z + + print *, precision(x), range(x) + print *, precision(y), range(y) + print *, precision(z), range(z) + end program real_kinds + + +File: gfortran.info, Node: SET_EXPONENT, Next: SHAPE, Prev: SELECTED_REAL_KIND, Up: Intrinsic Procedures + +7.192 `SET_EXPONENT' -- Set the exponent of the model +===================================================== + +_Description_: + `SET_EXPONENT(X, I)' returns the real number whose fractional part + is that that of X and whose exponent part is I. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = SET_EXPONENT(X, I)' + +_Arguments_: + X Shall be of type `REAL'. + I Shall be of type `INTEGER'. + +_Return value_: + The return value is of the same type and kind as X. The real + number whose fractional part is that that of X and whose exponent + part if I is returned; it is `FRACTION(X) * RADIX(X)**I'. + +_Example_: + PROGRAM test_setexp + REAL :: x = 178.1387e-4 + INTEGER :: i = 17 + PRINT *, SET_EXPONENT(x, i), FRACTION(x) * RADIX(x)**i + END PROGRAM + + + +File: gfortran.info, Node: SHAPE, Next: SIGN, Prev: SET_EXPONENT, Up: Intrinsic Procedures + +7.193 `SHAPE' -- Determine the shape of an array +================================================ + +_Description_: + Determines the shape of an array. + +_Standard_: + Fortran 95 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = SHAPE(SOURCE)' + +_Arguments_: + SOURCE Shall be an array or scalar of any type. If + SOURCE is a pointer it must be associated and + allocatable arrays must be allocated. + +_Return value_: + An `INTEGER' array of rank one with as many elements as SOURCE has + dimensions. The elements of the resulting array correspond to the + extend of SOURCE along the respective dimensions. If SOURCE is a + scalar, the result is the rank one array of size zero. + +_Example_: + PROGRAM test_shape + INTEGER, DIMENSION(-1:1, -1:2) :: A + WRITE(*,*) SHAPE(A) ! (/ 3, 4 /) + WRITE(*,*) SIZE(SHAPE(42)) ! (/ /) + END PROGRAM + +_See also_: + *note RESHAPE::, *note SIZE:: + + +File: gfortran.info, Node: SIGN, Next: SIGNAL, Prev: SHAPE, Up: Intrinsic Procedures + +7.194 `SIGN' -- Sign copying function +===================================== + +_Description_: + `SIGN(A,B)' returns the value of A with the sign of B. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = SIGN(A, B)' + +_Arguments_: + A Shall be of type `INTEGER' or `REAL' + B Shall be of the same type and kind as A + +_Return value_: + The kind of the return value is that of A and B. If B\ge 0 then + the result is `ABS(A)', else it is `-ABS(A)'. + +_Example_: + program test_sign + print *, sign(-12,1) + print *, sign(-12,0) + print *, sign(-12,-1) + + print *, sign(-12.,1.) + print *, sign(-12.,0.) + print *, sign(-12.,-1.) + end program test_sign + +_Specific names_: + Name Arguments Return type Standard + `ISIGN(A,P)' `INTEGER(4)' `INTEGER(4)' f95, gnu + `DSIGN(A,P)' `REAL(8)' `REAL(8)' f95, gnu + + +File: gfortran.info, Node: SIGNAL, Next: SIN, Prev: SIGN, Up: Intrinsic Procedures + +7.195 `SIGNAL' -- Signal handling subroutine (or function) +========================================================== + +_Description_: + `SIGNAL(NUMBER, HANDLER [, STATUS])' causes external subroutine + HANDLER to be executed with a single integer argument when signal + NUMBER occurs. If HANDLER is an integer, it can be used to turn + off handling of signal NUMBER or revert to its default action. + See `signal(2)'. + + If `SIGNAL' is called as a subroutine and the STATUS argument is + supplied, it is set to the value returned by `signal(2)'. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL SIGNAL(NUMBER, HANDLER [, STATUS])' + `STATUS = SIGNAL(NUMBER, HANDLER)' + +_Arguments_: + NUMBER Shall be a scalar integer, with `INTENT(IN)' + HANDLER Signal handler (`INTEGER FUNCTION' or + `SUBROUTINE') or dummy/global `INTEGER' scalar. + `INTEGER'. It is `INTENT(IN)'. + STATUS (Optional) STATUS shall be a scalar integer. + It has `INTENT(OUT)'. + +_Return value_: + The `SIGNAL' function returns the value returned by `signal(2)'. + +_Example_: + program test_signal + intrinsic signal + external handler_print + + call signal (12, handler_print) + call signal (10, 1) + + call sleep (30) + end program test_signal + + +File: gfortran.info, Node: SIN, Next: SINH, Prev: SIGNAL, Up: Intrinsic Procedures + +7.196 `SIN' -- Sine function +============================ + +_Description_: + `SIN(X)' computes the sine of X. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = SIN(X)' + +_Arguments_: + X The type shall be `REAL' or `COMPLEX'. + +_Return value_: + The return value has same type and kind as X. + +_Example_: + program test_sin + real :: x = 0.0 + x = sin(x) + end program test_sin + +_Specific names_: + Name Argument Return type Standard + `DSIN(X)' `REAL(8) X' `REAL(8)' f95, gnu + `CSIN(X)' `COMPLEX(4) `COMPLEX(4)' f95, gnu + X' + `ZSIN(X)' `COMPLEX(8) `COMPLEX(8)' f95, gnu + X' + `CDSIN(X)' `COMPLEX(8) `COMPLEX(8)' f95, gnu + X' + +_See also_: + *note ASIN:: + + +File: gfortran.info, Node: SINH, Next: SIZE, Prev: SIN, Up: Intrinsic Procedures + +7.197 `SINH' -- Hyperbolic sine function +======================================== + +_Description_: + `SINH(X)' computes the hyperbolic sine of X. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = SINH(X)' + +_Arguments_: + X The type shall be `REAL'. + +_Return value_: + The return value is of type `REAL'. + +_Example_: + program test_sinh + real(8) :: x = - 1.0_8 + x = sinh(x) + end program test_sinh + +_Specific names_: + Name Argument Return type Standard + `DSINH(X)' `REAL(8) X' `REAL(8)' Fortran 95 and + later + +_See also_: + *note ASINH:: + + +File: gfortran.info, Node: SIZE, Next: SIZEOF, Prev: SINH, Up: Intrinsic Procedures + +7.198 `SIZE' -- Determine the size of an array +============================================== + +_Description_: + Determine the extent of ARRAY along a specified dimension DIM, or + the total number of elements in ARRAY if DIM is absent. + +_Standard_: + Fortran 95 and later, with KIND argument Fortran 2003 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = SIZE(ARRAY[, DIM [, KIND]])' + +_Arguments_: + ARRAY Shall be an array of any type. If ARRAY is a + pointer it must be associated and allocatable + arrays must be allocated. + DIM (Optional) shall be a scalar of type `INTEGER' + and its value shall be in the range from 1 to + n, where n equals the rank of ARRAY. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `INTEGER' and of kind KIND. If KIND is + absent, the return value is of default integer kind. + +_Example_: + PROGRAM test_size + WRITE(*,*) SIZE((/ 1, 2 /)) ! 2 + END PROGRAM + +_See also_: + *note SHAPE::, *note RESHAPE:: + + +File: gfortran.info, Node: SIZEOF, Next: SLEEP, Prev: SIZE, Up: Intrinsic Procedures + +7.199 `SIZEOF' -- Size in bytes of an expression +================================================ + +_Description_: + `SIZEOF(X)' calculates the number of bytes of storage the + expression `X' occupies. + +_Standard_: + GNU extension + +_Class_: + Intrinsic function + +_Syntax_: + `N = SIZEOF(X)' + +_Arguments_: + X The argument shall be of any type, rank or + shape. + +_Return value_: + The return value is of type integer and of the system-dependent + kind C_SIZE_T (from the ISO_C_BINDING module). Its value is the + number of bytes occupied by the argument. If the argument has the + `POINTER' attribute, the number of bytes of the storage area + pointed to is returned. If the argument is of a derived type with + `POINTER' or `ALLOCATABLE' components, the return value doesn't + account for the sizes of the data pointed to by these components. + +_Example_: + integer :: i + real :: r, s(5) + print *, (sizeof(s)/sizeof(r) == 5) + end + The example will print `.TRUE.' unless you are using a platform + where default `REAL' variables are unusually padded. + +_See also_: + *note C_SIZEOF:: + + +File: gfortran.info, Node: SLEEP, Next: SNGL, Prev: SIZEOF, Up: Intrinsic Procedures + +7.200 `SLEEP' -- Sleep for the specified number of seconds +========================================================== + +_Description_: + Calling this subroutine causes the process to pause for SECONDS + seconds. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL SLEEP(SECONDS)' + +_Arguments_: + SECONDS The type shall be of default `INTEGER'. + +_Example_: + program test_sleep + call sleep(5) + end + + +File: gfortran.info, Node: SNGL, Next: SPACING, Prev: SLEEP, Up: Intrinsic Procedures + +7.201 `SNGL' -- Convert double precision real to default real +============================================================= + +_Description_: + `SNGL(A)' converts the double precision real A to a default real + value. This is an archaic form of `REAL' that is specific to one + type for A. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = SNGL(A)' + +_Arguments_: + A The type shall be a double precision `REAL'. + +_Return value_: + The return value is of type default `REAL'. + +_See also_: + *note DBLE:: + + +File: gfortran.info, Node: SPACING, Next: SPREAD, Prev: SNGL, Up: Intrinsic Procedures + +7.202 `SPACING' -- Smallest distance between two numbers of a given type +======================================================================== + +_Description_: + Determines the distance between the argument X and the nearest + adjacent number of the same type. + +_Standard_: + Fortran 95 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = SPACING(X)' + +_Arguments_: + X Shall be of type `REAL'. + +_Return value_: + The result is of the same type as the input argument X. + +_Example_: + PROGRAM test_spacing + INTEGER, PARAMETER :: SGL = SELECTED_REAL_KIND(p=6, r=37) + INTEGER, PARAMETER :: DBL = SELECTED_REAL_KIND(p=13, r=200) + + WRITE(*,*) spacing(1.0_SGL) ! "1.1920929E-07" on i686 + WRITE(*,*) spacing(1.0_DBL) ! "2.220446049250313E-016" on i686 + END PROGRAM + +_See also_: + *note RRSPACING:: + + +File: gfortran.info, Node: SPREAD, Next: SQRT, Prev: SPACING, Up: Intrinsic Procedures + +7.203 `SPREAD' -- Add a dimension to an array +============================================= + +_Description_: + Replicates a SOURCE array NCOPIES times along a specified + dimension DIM. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = SPREAD(SOURCE, DIM, NCOPIES)' + +_Arguments_: + SOURCE Shall be a scalar or an array of any type and + a rank less than seven. + DIM Shall be a scalar of type `INTEGER' with a + value in the range from 1 to n+1, where n + equals the rank of SOURCE. + NCOPIES Shall be a scalar of type `INTEGER'. + +_Return value_: + The result is an array of the same type as SOURCE and has rank n+1 + where n equals the rank of SOURCE. + +_Example_: + PROGRAM test_spread + INTEGER :: a = 1, b(2) = (/ 1, 2 /) + WRITE(*,*) SPREAD(A, 1, 2) ! "1 1" + WRITE(*,*) SPREAD(B, 1, 2) ! "1 1 2 2" + END PROGRAM + +_See also_: + *note UNPACK:: + + +File: gfortran.info, Node: SQRT, Next: SRAND, Prev: SPREAD, Up: Intrinsic Procedures + +7.204 `SQRT' -- Square-root function +==================================== + +_Description_: + `SQRT(X)' computes the square root of X. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = SQRT(X)' + +_Arguments_: + X The type shall be `REAL' or `COMPLEX'. + +_Return value_: + The return value is of type `REAL' or `COMPLEX'. The kind type + parameter is the same as X. + +_Example_: + program test_sqrt + real(8) :: x = 2.0_8 + complex :: z = (1.0, 2.0) + x = sqrt(x) + z = sqrt(z) + end program test_sqrt + +_Specific names_: + Name Argument Return type Standard + `DSQRT(X)' `REAL(8) X' `REAL(8)' Fortran 95 and + later + `CSQRT(X)' `COMPLEX(4) `COMPLEX(4)' Fortran 95 and + X' later + `ZSQRT(X)' `COMPLEX(8) `COMPLEX(8)' GNU extension + X' + `CDSQRT(X)' `COMPLEX(8) `COMPLEX(8)' GNU extension + X' + + +File: gfortran.info, Node: SRAND, Next: STAT, Prev: SQRT, Up: Intrinsic Procedures + +7.205 `SRAND' -- Reinitialize the random number generator +========================================================= + +_Description_: + `SRAND' reinitializes the pseudo-random number generator called by + `RAND' and `IRAND'. The new seed used by the generator is + specified by the required argument SEED. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL SRAND(SEED)' + +_Arguments_: + SEED Shall be a scalar `INTEGER(kind=4)'. + +_Return value_: + Does not return anything. + +_Example_: + See `RAND' and `IRAND' for examples. + +_Notes_: + The Fortran 2003 standard specifies the intrinsic `RANDOM_SEED' to + initialize the pseudo-random numbers generator and `RANDOM_NUMBER' + to generate pseudo-random numbers. Please note that in GNU + Fortran, these two sets of intrinsics (`RAND', `IRAND' and `SRAND' + on the one hand, `RANDOM_NUMBER' and `RANDOM_SEED' on the other + hand) access two independent pseudo-random number generators. + +_See also_: + *note RAND::, *note RANDOM_SEED::, *note RANDOM_NUMBER:: + + + +File: gfortran.info, Node: STAT, Next: SUM, Prev: SRAND, Up: Intrinsic Procedures + +7.206 `STAT' -- Get file status +=============================== + +_Description_: + This function returns information about a file. No permissions are + required on the file itself, but execute (search) permission is + required on all of the directories in path that lead to the file. + + The elements that are obtained and stored in the array `BUFF': + `buff(1)' Device ID + `buff(2)' Inode number + `buff(3)' File mode + `buff(4)' Number of links + `buff(5)' Owner's uid + `buff(6)' Owner's gid + `buff(7)' ID of device containing directory entry for + file (0 if not available) + `buff(8)' File size (bytes) + `buff(9)' Last access time + `buff(10)' Last modification time + `buff(11)' Last file status change time + `buff(12)' Preferred I/O block size (-1 if not available) + `buff(13)' Number of blocks allocated (-1 if not + available) + + Not all these elements are relevant on all systems. If an element + is not relevant, it is returned as 0. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL STAT(FILE,BUFF[,STATUS])' + +_Arguments_: + FILE The type shall be `CHARACTER', of the default + kind and a valid path within the file system. + BUFF The type shall be `INTEGER(4), DIMENSION(13)'. + STATUS (Optional) status flag of type `INTEGER(4)'. + Returns 0 on success and a system specific + error code otherwise. + +_Example_: + PROGRAM test_stat + INTEGER, DIMENSION(13) :: buff + INTEGER :: status + + CALL STAT("/etc/passwd", buff, status) + + IF (status == 0) THEN + WRITE (*, FMT="('Device ID:', T30, I19)") buff(1) + WRITE (*, FMT="('Inode number:', T30, I19)") buff(2) + WRITE (*, FMT="('File mode (octal):', T30, O19)") buff(3) + WRITE (*, FMT="('Number of links:', T30, I19)") buff(4) + WRITE (*, FMT="('Owner''s uid:', T30, I19)") buff(5) + WRITE (*, FMT="('Owner''s gid:', T30, I19)") buff(6) + WRITE (*, FMT="('Device where located:', T30, I19)") buff(7) + WRITE (*, FMT="('File size:', T30, I19)") buff(8) + WRITE (*, FMT="('Last access time:', T30, A19)") CTIME(buff(9)) + WRITE (*, FMT="('Last modification time', T30, A19)") CTIME(buff(10)) + WRITE (*, FMT="('Last status change time:', T30, A19)") CTIME(buff(11)) + WRITE (*, FMT="('Preferred block size:', T30, I19)") buff(12) + WRITE (*, FMT="('No. of blocks allocated:', T30, I19)") buff(13) + END IF + END PROGRAM + +_See also_: + To stat an open file: *note FSTAT::, to stat a link: *note LSTAT:: + + +File: gfortran.info, Node: SUM, Next: SYMLNK, Prev: STAT, Up: Intrinsic Procedures + +7.207 `SUM' -- Sum of array elements +==================================== + +_Description_: + Adds the elements of ARRAY along dimension DIM if the + corresponding element in MASK is `TRUE'. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = SUM(ARRAY[, MASK])' `RESULT = SUM(ARRAY, DIM[, MASK])' + +_Arguments_: + ARRAY Shall be an array of type `INTEGER', `REAL' or + `COMPLEX'. + DIM (Optional) shall be a scalar of type `INTEGER' + with a value in the range from 1 to n, where n + equals the rank of ARRAY. + MASK (Optional) shall be of type `LOGICAL' and + either be a scalar or an array of the same + shape as ARRAY. + +_Return value_: + The result is of the same type as ARRAY. + + If DIM is absent, a scalar with the sum of all elements in ARRAY + is returned. Otherwise, an array of rank n-1, where n equals the + rank of ARRAY,and a shape similar to that of ARRAY with dimension + DIM dropped is returned. + +_Example_: + PROGRAM test_sum + INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /) + print *, SUM(x) ! all elements, sum = 15 + print *, SUM(x, MASK=MOD(x, 2)==1) ! odd elements, sum = 9 + END PROGRAM + +_See also_: + *note PRODUCT:: + + +File: gfortran.info, Node: SYMLNK, Next: SYSTEM, Prev: SUM, Up: Intrinsic Procedures + +7.208 `SYMLNK' -- Create a symbolic link +======================================== + +_Description_: + Makes a symbolic link from file PATH1 to PATH2. A null character + (`CHAR(0)') can be used to mark the end of the names in PATH1 and + PATH2; otherwise, trailing blanks in the file names are ignored. + If the STATUS argument is supplied, it contains 0 on success or a + nonzero error code upon return; see `symlink(2)'. If the system + does not supply `symlink(2)', `ENOSYS' is returned. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL SYMLNK(PATH1, PATH2 [, STATUS])' + `STATUS = SYMLNK(PATH1, PATH2)' + +_Arguments_: + PATH1 Shall be of default `CHARACTER' type. + PATH2 Shall be of default `CHARACTER' type. + STATUS (Optional) Shall be of default `INTEGER' type. + +_See also_: + *note LINK::, *note UNLINK:: + + + +File: gfortran.info, Node: SYSTEM, Next: SYSTEM_CLOCK, Prev: SYMLNK, Up: Intrinsic Procedures + +7.209 `SYSTEM' -- Execute a shell command +========================================= + +_Description_: + Passes the command COMMAND to a shell (see `system(3)'). If + argument STATUS is present, it contains the value returned by + `system(3)', which is presumably 0 if the shell command succeeded. + Note that which shell is used to invoke the command is + system-dependent and environment-dependent. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL SYSTEM(COMMAND [, STATUS])' + `STATUS = SYSTEM(COMMAND)' + +_Arguments_: + COMMAND Shall be of default `CHARACTER' type. + STATUS (Optional) Shall be of default `INTEGER' type. + +_See also_: + + +File: gfortran.info, Node: SYSTEM_CLOCK, Next: TAN, Prev: SYSTEM, Up: Intrinsic Procedures + +7.210 `SYSTEM_CLOCK' -- Time function +===================================== + +_Description_: + Determines the COUNT of milliseconds of wall clock time since the + Epoch (00:00:00 UTC, January 1, 1970) modulo COUNT_MAX, COUNT_RATE + determines the number of clock ticks per second. COUNT_RATE and + COUNT_MAX are constant and specific to `gfortran'. + + If there is no clock, COUNT is set to `-HUGE(COUNT)', and + COUNT_RATE and COUNT_MAX are set to zero + +_Standard_: + Fortran 95 and later + +_Class_: + Subroutine + +_Syntax_: + `CALL SYSTEM_CLOCK([COUNT, COUNT_RATE, COUNT_MAX])' + +_Arguments_: + +_Arguments_: + COUNT (Optional) shall be a scalar of type default + `INTEGER' with `INTENT(OUT)'. + COUNT_RATE (Optional) shall be a scalar of type default + `INTEGER' with `INTENT(OUT)'. + COUNT_MAX (Optional) shall be a scalar of type default + `INTEGER' with `INTENT(OUT)'. + +_Example_: + PROGRAM test_system_clock + INTEGER :: count, count_rate, count_max + CALL SYSTEM_CLOCK(count, count_rate, count_max) + WRITE(*,*) count, count_rate, count_max + END PROGRAM + +_See also_: + *note DATE_AND_TIME::, *note CPU_TIME:: + + +File: gfortran.info, Node: TAN, Next: TANH, Prev: SYSTEM_CLOCK, Up: Intrinsic Procedures + +7.211 `TAN' -- Tangent function +=============================== + +_Description_: + `TAN(X)' computes the tangent of X. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = TAN(X)' + +_Arguments_: + X The type shall be `REAL'. + +_Return value_: + The return value is of type `REAL'. The kind type parameter is + the same as X. + +_Example_: + program test_tan + real(8) :: x = 0.165_8 + x = tan(x) + end program test_tan + +_Specific names_: + Name Argument Return type Standard + `DTAN(X)' `REAL(8) X' `REAL(8)' Fortran 95 and + later + +_See also_: + *note ATAN:: + + +File: gfortran.info, Node: TANH, Next: TIME, Prev: TAN, Up: Intrinsic Procedures + +7.212 `TANH' -- Hyperbolic tangent function +=========================================== + +_Description_: + `TANH(X)' computes the hyperbolic tangent of X. + +_Standard_: + Fortran 77 and later + +_Class_: + Elemental function + +_Syntax_: + `X = TANH(X)' + +_Arguments_: + X The type shall be `REAL'. + +_Return value_: + The return value is of type `REAL' and lies in the range - 1 \leq + tanh(x) \leq 1 . + +_Example_: + program test_tanh + real(8) :: x = 2.1_8 + x = tanh(x) + end program test_tanh + +_Specific names_: + Name Argument Return type Standard + `DTANH(X)' `REAL(8) X' `REAL(8)' Fortran 95 and + later + +_See also_: + *note ATANH:: + + +File: gfortran.info, Node: TIME, Next: TIME8, Prev: TANH, Up: Intrinsic Procedures + +7.213 `TIME' -- Time function +============================= + +_Description_: + Returns the current time encoded as an integer (in the manner of + the UNIX function `time(3)'). This value is suitable for passing to + `CTIME()', `GMTIME()', and `LTIME()'. + + This intrinsic is not fully portable, such as to systems with + 32-bit `INTEGER' types but supporting times wider than 32 bits. + Therefore, the values returned by this intrinsic might be, or + become, negative, or numerically less than previous values, during + a single run of the compiled program. + + See *note TIME8::, for information on a similar intrinsic that + might be portable to more GNU Fortran implementations, though to + fewer Fortran compilers. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = TIME()' + +_Return value_: + The return value is a scalar of type `INTEGER(4)'. + +_See also_: + *note CTIME::, *note GMTIME::, *note LTIME::, *note MCLOCK::, + *note TIME8:: + + + +File: gfortran.info, Node: TIME8, Next: TINY, Prev: TIME, Up: Intrinsic Procedures + +7.214 `TIME8' -- Time function (64-bit) +======================================= + +_Description_: + Returns the current time encoded as an integer (in the manner of + the UNIX function `time(3)'). This value is suitable for passing to + `CTIME()', `GMTIME()', and `LTIME()'. + + _Warning:_ this intrinsic does not increase the range of the timing + values over that returned by `time(3)'. On a system with a 32-bit + `time(3)', `TIME8()' will return a 32-bit value, even though it is + converted to a 64-bit `INTEGER(8)' value. That means overflows of + the 32-bit value can still occur. Therefore, the values returned + by this intrinsic might be or become negative or numerically less + than previous values during a single run of the compiled program. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = TIME8()' + +_Return value_: + The return value is a scalar of type `INTEGER(8)'. + +_See also_: + *note CTIME::, *note GMTIME::, *note LTIME::, *note MCLOCK8::, + *note TIME:: + + + +File: gfortran.info, Node: TINY, Next: TRAILZ, Prev: TIME8, Up: Intrinsic Procedures + +7.215 `TINY' -- Smallest positive number of a real kind +======================================================= + +_Description_: + `TINY(X)' returns the smallest positive (non zero) number in the + model of the type of `X'. + +_Standard_: + Fortran 95 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = TINY(X)' + +_Arguments_: + X Shall be of type `REAL'. + +_Return value_: + The return value is of the same type and kind as X + +_Example_: + See `HUGE' for an example. + + +File: gfortran.info, Node: TRAILZ, Next: TRANSFER, Prev: TINY, Up: Intrinsic Procedures + +7.216 `TRAILZ' -- Number of trailing zero bits of an integer +============================================================ + +_Description_: + `TRAILZ' returns the number of trailing zero bits of an integer. + +_Standard_: + Fortran 2008 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = TRAILZ(I)' + +_Arguments_: + I Shall be of type `INTEGER'. + +_Return value_: + The type of the return value is the default `INTEGER'. If all the + bits of `I' are zero, the result value is `BIT_SIZE(I)'. + +_Example_: + PROGRAM test_trailz + WRITE (*,*) TRAILZ(8) ! prints 3 + END PROGRAM + +_See also_: + *note BIT_SIZE::, *note LEADZ:: + + +File: gfortran.info, Node: TRANSFER, Next: TRANSPOSE, Prev: TRAILZ, Up: Intrinsic Procedures + +7.217 `TRANSFER' -- Transfer bit patterns +========================================= + +_Description_: + Interprets the bitwise representation of SOURCE in memory as if it + is the representation of a variable or array of the same type and + type parameters as MOLD. + + This is approximately equivalent to the C concept of _casting_ one + type to another. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = TRANSFER(SOURCE, MOLD[, SIZE])' + +_Arguments_: + SOURCE Shall be a scalar or an array of any type. + MOLD Shall be a scalar or an array of any type. + SIZE (Optional) shall be a scalar of type `INTEGER'. + +_Return value_: + The result has the same type as MOLD, with the bit level + representation of SOURCE. If SIZE is present, the result is a + one-dimensional array of length SIZE. If SIZE is absent but MOLD + is an array (of any size or shape), the result is a one- + dimensional array of the minimum length needed to contain the + entirety of the bitwise representation of SOURCE. If SIZE is + absent and MOLD is a scalar, the result is a scalar. + + If the bitwise representation of the result is longer than that of + SOURCE, then the leading bits of the result correspond to those of + SOURCE and any trailing bits are filled arbitrarily. + + When the resulting bit representation does not correspond to a + valid representation of a variable of the same type as MOLD, the + results are undefined, and subsequent operations on the result + cannot be guaranteed to produce sensible behavior. For example, + it is possible to create `LOGICAL' variables for which `VAR' and + `.NOT.VAR' both appear to be true. + +_Example_: + PROGRAM test_transfer + integer :: x = 2143289344 + print *, transfer(x, 1.0) ! prints "NaN" on i686 + END PROGRAM + + +File: gfortran.info, Node: TRANSPOSE, Next: TRIM, Prev: TRANSFER, Up: Intrinsic Procedures + +7.218 `TRANSPOSE' -- Transpose an array of rank two +=================================================== + +_Description_: + Transpose an array of rank two. Element (i, j) of the result has + the value `MATRIX(j, i)', for all i, j. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = TRANSPOSE(MATRIX)' + +_Arguments_: + MATRIX Shall be an array of any type and have a rank + of two. + +_Return value_: + The result has the same type as MATRIX, and has shape `(/ m, n /)' + if MATRIX has shape `(/ n, m /)'. + + +File: gfortran.info, Node: TRIM, Next: TTYNAM, Prev: TRANSPOSE, Up: Intrinsic Procedures + +7.219 `TRIM' -- Remove trailing blank characters of a string +============================================================ + +_Description_: + Removes trailing blank characters of a string. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = TRIM(STRING)' + +_Arguments_: + STRING Shall be a scalar of type `CHARACTER'. + +_Return value_: + A scalar of type `CHARACTER' which length is that of STRING less + the number of trailing blanks. + +_Example_: + PROGRAM test_trim + CHARACTER(len=10), PARAMETER :: s = "GFORTRAN " + WRITE(*,*) LEN(s), LEN(TRIM(s)) ! "10 8", with/without trailing blanks + END PROGRAM + +_See also_: + *note ADJUSTL::, *note ADJUSTR:: + + +File: gfortran.info, Node: TTYNAM, Next: UBOUND, Prev: TRIM, Up: Intrinsic Procedures + +7.220 `TTYNAM' -- Get the name of a terminal device. +==================================================== + +_Description_: + Get the name of a terminal device. For more information, see + `ttyname(3)'. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL TTYNAM(UNIT, NAME)' + `NAME = TTYNAM(UNIT)' + +_Arguments_: + UNIT Shall be a scalar `INTEGER'. + NAME Shall be of type `CHARACTER'. + +_Example_: + PROGRAM test_ttynam + INTEGER :: unit + DO unit = 1, 10 + IF (isatty(unit=unit)) write(*,*) ttynam(unit) + END DO + END PROGRAM + +_See also_: + *note ISATTY:: + + +File: gfortran.info, Node: UBOUND, Next: UMASK, Prev: TTYNAM, Up: Intrinsic Procedures + +7.221 `UBOUND' -- Upper dimension bounds of an array +==================================================== + +_Description_: + Returns the upper bounds of an array, or a single upper bound + along the DIM dimension. + +_Standard_: + Fortran 95 and later, with KIND argument Fortran 2003 and later + +_Class_: + Inquiry function + +_Syntax_: + `RESULT = UBOUND(ARRAY [, DIM [, KIND]])' + +_Arguments_: + ARRAY Shall be an array, of any type. + DIM (Optional) Shall be a scalar `INTEGER'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `INTEGER' and of kind KIND. If KIND is + absent, the return value is of default integer kind. If DIM is + absent, the result is an array of the upper bounds of ARRAY. If + DIM is present, the result is a scalar corresponding to the upper + bound of the array along that dimension. If ARRAY is an + expression rather than a whole array or array structure component, + or if it has a zero extent along the relevant dimension, the upper + bound is taken to be the number of elements along the relevant + dimension. + +_See also_: + *note LBOUND:: + + +File: gfortran.info, Node: UMASK, Next: UNLINK, Prev: UBOUND, Up: Intrinsic Procedures + +7.222 `UMASK' -- Set the file creation mask +=========================================== + +_Description_: + Sets the file creation mask to MASK and returns the old value in + argument OLD if it is supplied. See `umask(2)'. + +_Standard_: + GNU extension + +_Class_: + Subroutine + +_Syntax_: + `CALL UMASK(MASK [, OLD])' + +_Arguments_: + MASK Shall be a scalar of type `INTEGER'. + MASK (Optional) Shall be a scalar of type `INTEGER'. + + + +File: gfortran.info, Node: UNLINK, Next: UNPACK, Prev: UMASK, Up: Intrinsic Procedures + +7.223 `UNLINK' -- Remove a file from the file system +==================================================== + +_Description_: + Unlinks the file PATH. A null character (`CHAR(0)') can be used to + mark the end of the name in PATH; otherwise, trailing blanks in + the file name are ignored. If the STATUS argument is supplied, it + contains 0 on success or a nonzero error code upon return; see + `unlink(2)'. + + This intrinsic is provided in both subroutine and function forms; + however, only one form can be used in any given program unit. + +_Standard_: + GNU extension + +_Class_: + Subroutine, function + +_Syntax_: + `CALL UNLINK(PATH [, STATUS])' + `STATUS = UNLINK(PATH)' + +_Arguments_: + PATH Shall be of default `CHARACTER' type. + STATUS (Optional) Shall be of default `INTEGER' type. + +_See also_: + *note LINK::, *note SYMLNK:: + + +File: gfortran.info, Node: UNPACK, Next: VERIFY, Prev: UNLINK, Up: Intrinsic Procedures + +7.224 `UNPACK' -- Unpack an array of rank one into an array +=========================================================== + +_Description_: + Store the elements of VECTOR in an array of higher rank. + +_Standard_: + Fortran 95 and later + +_Class_: + Transformational function + +_Syntax_: + `RESULT = UNPACK(VECTOR, MASK, FIELD)' + +_Arguments_: + VECTOR Shall be an array of any type and rank one. It + shall have at least as many elements as MASK + has `TRUE' values. + MASK Shall be an array of type `LOGICAL'. + FIELD Shall be of the same type as VECTOR and have + the same shape as MASK. + +_Return value_: + The resulting array corresponds to FIELD with `TRUE' elements of + MASK replaced by values from VECTOR in array element order. + +_Example_: + PROGRAM test_unpack + integer :: vector(2) = (/1,1/) + logical :: mask(4) = (/ .TRUE., .FALSE., .FALSE., .TRUE. /) + integer :: field(2,2) = 0, unity(2,2) + + ! result: unity matrix + unity = unpack(vector, reshape(mask, (/2,2/)), field) + END PROGRAM + +_See also_: + *note PACK::, *note SPREAD:: + + +File: gfortran.info, Node: VERIFY, Next: XOR, Prev: UNPACK, Up: Intrinsic Procedures + +7.225 `VERIFY' -- Scan a string for the absence of a set of characters +====================================================================== + +_Description_: + Verifies that all the characters in a SET are present in a STRING. + + If BACK is either absent or equals `FALSE', this function returns + the position of the leftmost character of STRING that is not in + SET. If BACK equals `TRUE', the rightmost position is returned. If + all characters of SET are found in STRING, the result is zero. + +_Standard_: + Fortran 95 and later, with KIND argument Fortran 2003 and later + +_Class_: + Elemental function + +_Syntax_: + `RESULT = VERIFY(STRING, SET[, BACK [, KIND]])' + +_Arguments_: + STRING Shall be of type `CHARACTER'. + SET Shall be of type `CHARACTER'. + BACK (Optional) shall be of type `LOGICAL'. + KIND (Optional) An `INTEGER' initialization + expression indicating the kind parameter of + the result. + +_Return value_: + The return value is of type `INTEGER' and of kind KIND. If KIND is + absent, the return value is of default integer kind. + +_Example_: + PROGRAM test_verify + WRITE(*,*) VERIFY("FORTRAN", "AO") ! 1, found 'F' + WRITE(*,*) VERIFY("FORTRAN", "FOO") ! 3, found 'R' + WRITE(*,*) VERIFY("FORTRAN", "C++") ! 1, found 'F' + WRITE(*,*) VERIFY("FORTRAN", "C++", .TRUE.) ! 7, found 'N' + WRITE(*,*) VERIFY("FORTRAN", "FORTRAN") ! 0' found none + END PROGRAM + +_See also_: + *note SCAN::, *note INDEX intrinsic:: + + +File: gfortran.info, Node: XOR, Prev: VERIFY, Up: Intrinsic Procedures + +7.226 `XOR' -- Bitwise logical exclusive OR +=========================================== + +_Description_: + Bitwise logical exclusive or. + + This intrinsic routine is provided for backwards compatibility with + GNU Fortran 77. For integer arguments, programmers should consider + the use of the *note IEOR:: intrinsic defined by the Fortran + standard. + +_Standard_: + GNU extension + +_Class_: + Function + +_Syntax_: + `RESULT = XOR(X, Y)' + +_Arguments_: + X The type shall be either a scalar `INTEGER' + type or a scalar `LOGICAL' type. + Y The type shall be the same as the type of I. + +_Return value_: + The return type is either a scalar `INTEGER' or a scalar + `LOGICAL'. If the kind type parameters differ, then the smaller + kind type is implicitly converted to larger kind, and the return + has the larger kind. + +_Example_: + PROGRAM test_xor + LOGICAL :: T = .TRUE., F = .FALSE. + INTEGER :: a, b + DATA a / Z'F' /, b / Z'3' / + + WRITE (*,*) XOR(T, T), XOR(T, F), XOR(F, T), XOR(F, F) + WRITE (*,*) XOR(a, b) + END PROGRAM + +_See also_: + Fortran 95 elemental function: *note IEOR:: + + +File: gfortran.info, Node: Intrinsic Modules, Next: Contributing, Prev: Intrinsic Procedures, Up: Top + +8 Intrinsic Modules +******************* + +8.1 `ISO_FORTRAN_ENV' +===================== + +_Standard_: + Fortran 2003 and later + + The `ISO_FORTRAN_ENV' module provides the following scalar +default-integer named constants: + +`CHARACTER_STORAGE_SIZE': + Size in bits of the character storage unit. + +`ERROR_UNIT': + Identifies the preconnected unit used for error reporting. + +`FILE_STORAGE_SIZE': + Size in bits of the file-storage unit. + +`INPUT_UNIT': + Identifies the preconnected unit identified by the asterisk (`*') + in `READ' statement. + +`IOSTAT_END': + The value assigned to the variable passed to the IOSTAT= specifier + of an input/output statement if an end-of-file condition occurred. + +`IOSTAT_EOR': + The value assigned to the variable passed to the IOSTAT= specifier + of an input/output statement if an end-of-record condition + occurred. + +`NUMERIC_STORAGE_SIZE': + The size in bits of the numeric storage unit. + +`OUTPUT_UNIT': + Identifies the preconnected unit identified by the asterisk (`*') + in `WRITE' statement. + +8.2 `ISO_C_BINDING' +=================== + +_Standard_: + Fortran 2003 and later, GNU extensions + + The following intrinsic procedures are provided by the module; their +definition can be found in the section Intrinsic Procedures of this +manual. + +`C_ASSOCIATED' + +`C_F_POINTER' + +`C_F_PROCPOINTER' + +`C_FUNLOC' + +`C_LOC' + + The `ISO_C_BINDING' module provides the following named constants of +the type integer, which can be used as KIND type parameter. Note that +GNU Fortran currently does not support the `C_INT_FAST...' KIND type +parameters (marked by an asterisk (`*') in the list below). The +`C_INT_FAST...' parameters have therefore the value -2 and cannot be +used as KIND type parameter of the `INTEGER' type. + + In addition to the integer named constants required by the Fortran +2003 standard, GNU Fortran provides as an extension named constants for +the 128-bit integer types supported by the C compiler: `C_INT128_T, +C_INT_LEAST128_T, C_INT_FAST128_T'. + +Fortran Named constant C type Extension +Type +`INTEGER' `C_INT' `int' +`INTEGER' `C_SHORT' `short int' +`INTEGER' `C_LONG' `long int' +`INTEGER' `C_LONG_LONG' `long long int' +`INTEGER' `C_SIGNED_CHAR' `signed char'/`unsigned + char' +`INTEGER' `C_SIZE_T' `size_t' +`INTEGER' `C_INT8_T' `int8_t' +`INTEGER' `C_INT16_T' `int16_t' +`INTEGER' `C_INT32_T' `int32_t' +`INTEGER' `C_INT64_T' `int64_t' +`INTEGER' `C_INT128_T' `int128_t' Ext. +`INTEGER' `C_INT_LEAST8_T' `int_least8_t' +`INTEGER' `C_INT_LEAST16_T' `int_least16_t' +`INTEGER' `C_INT_LEAST32_T' `int_least32_t' +`INTEGER' `C_INT_LEAST64_T' `int_least64_t' +`INTEGER' `C_INT_LEAST128_T' `int_least128_t' Ext. +`INTEGER' `C_INT_FAST8_T'* `int_fast8_t' +`INTEGER' `C_INT_FAST16_T'* `int_fast16_t' +`INTEGER' `C_INT_FAST32_T'* `int_fast32_t' +`INTEGER' `C_INT_FAST64_T'* `int_fast64_t' +`INTEGER' `C_INT_FAST128_T'* `int_fast128_t' Ext. +`INTEGER' `C_INTMAX_T' `intmax_t' +`INTEGER' `C_INTPTR_T' `intptr_t' +`REAL' `C_FLOAT' `float' +`REAL' `C_DOUBLE' `double' +`REAL' `C_LONG_DOUBLE' `long double' +`COMPLEX' `C_FLOAT_COMPLEX' `float _Complex' +`COMPLEX' `C_DOUBLE_COMPLEX' `double _Complex' +`COMPLEX' `C_LONG_DOUBLE_COMPLEX' `long double _Complex' +`LOGICAL' `C_BOOL' `_Bool' +`CHARACTER' `C_CHAR' `char' + + Additionally, the following `(CHARACTER(KIND=C_CHAR))' are defined. + +Name C definition Value +`C_NULL_CHAR' null character `'\0'' +`C_ALERT' alert `'\a'' +`C_BACKSPACE' backspace `'\b'' +`C_FORM_FEED' form feed `'\f'' +`C_NEW_LINE' new line `'\n'' +`C_CARRIAGE_RETURN'carriage return `'\r'' +`C_HORIZONTAL_TAB'horizontal tab `'\t'' +`C_VERTICAL_TAB'vertical tab `'\v'' + +8.3 OpenMP Modules `OMP_LIB' and `OMP_LIB_KINDS' +================================================ + +_Standard_: + OpenMP Application Program Interface v3.0 + + The OpenMP Fortran runtime library routines are provided both in a +form of two Fortran 90 modules, named `OMP_LIB' and `OMP_LIB_KINDS', +and in a form of a Fortran `include' file named `omp_lib.h'. The +procedures provided by `OMP_LIB' can be found in the *note +Introduction: (libgomp)Top. manual, the named constants defined in the +`OMP_LIB_KINDS' module are listed below. + + For details refer to the actual OpenMP Application Program Interface +v3.0 (http://www.openmp.org/mp-documents/spec30.pdf). + + `OMP_LIB_KINDS' provides the following scalar default-integer named +constants: + +`omp_integer_kind' + +`omp_logical_kind' + +`omp_lock_kind' + +`omp_nest_lock_kind' + +`omp_sched_kind' + + +File: gfortran.info, Node: Contributing, Next: Copying, Prev: Intrinsic Modules, Up: Top + +Contributing +************ + +Free software is only possible if people contribute to efforts to +create it. We're always in need of more people helping out with ideas +and comments, writing documentation and contributing code. + + If you want to contribute to GNU Fortran, have a look at the long +lists of projects you can take on. Some of these projects are small, +some of them are large; some are completely orthogonal to the rest of +what is happening on GNU Fortran, but others are "mainstream" projects +in need of enthusiastic hackers. All of these projects are important! +We'll eventually get around to the things here, but they are also +things doable by someone who is willing and able. + +* Menu: + +* Contributors:: +* Projects:: +* Proposed Extensions:: + + +File: gfortran.info, Node: Contributors, Next: Projects, Up: Contributing + +Contributors to GNU Fortran +=========================== + +Most of the parser was hand-crafted by _Andy Vaught_, who is also the +initiator of the whole project. Thanks Andy! Most of the interface +with GCC was written by _Paul Brook_. + + The following individuals have contributed code and/or ideas and +significant help to the GNU Fortran project (in alphabetical order): + + - Janne Blomqvist + + - Steven Bosscher + + - Paul Brook + + - Tobias Burnus + + - Franc,ois-Xavier Coudert + + - Bud Davis + + - Jerry DeLisle + + - Erik Edelmann + + - Bernhard Fischer + + - Daniel Franke + + - Richard Guenther + + - Richard Henderson + + - Katherine Holcomb + + - Jakub Jelinek + + - Niels Kristian Bech Jensen + + - Steven Johnson + + - Steven G. Kargl + + - Thomas Koenig + + - Asher Langton + + - H. J. Lu + + - Toon Moene + + - Brooks Moses + + - Andrew Pinski + + - Tim Prince + + - Christopher D. Rickett + + - Richard Sandiford + + - Tobias Schlu"ter + + - Roger Sayle + + - Paul Thomas + + - Andy Vaught + + - Feng Wang + + - Janus Weil + + The following people have contributed bug reports, smaller or larger +patches, and much needed feedback and encouragement for the GNU Fortran +project: + + - Bill Clodius + + - Dominique d'Humie`res + + - Kate Hedstrom + + - Erik Schnetter + + Many other individuals have helped debug, test and improve the GNU +Fortran compiler over the past few years, and we welcome you to do the +same! If you already have done so, and you would like to see your name +listed in the list above, please contact us. + + +File: gfortran.info, Node: Projects, Next: Proposed Extensions, Prev: Contributors, Up: Contributing + +Projects +======== + +_Help build the test suite_ + Solicit more code for donation to the test suite: the more + extensive the testsuite, the smaller the risk of breaking things + in the future! We can keep code private on request. + +_Bug hunting/squishing_ + Find bugs and write more test cases! Test cases are especially very + welcome, because it allows us to concentrate on fixing bugs + instead of isolating them. Going through the bugzilla database at + `http://gcc.gnu.org/bugzilla/' to reduce testcases posted there and + add more information (for example, for which version does the + testcase work, for which versions does it fail?) is also very + helpful. + + + +File: gfortran.info, Node: Proposed Extensions, Prev: Projects, Up: Contributing + +Proposed Extensions +=================== + +Here's a list of proposed extensions for the GNU Fortran compiler, in +no particular order. Most of these are necessary to be fully +compatible with existing Fortran compilers, but they are not part of +the official J3 Fortran 95 standard. + +Compiler extensions: +-------------------- + + * User-specified alignment rules for structures. + + * Flag to generate `Makefile' info. + + * Automatically extend single precision constants to double. + + * Compile code that conserves memory by dynamically allocating + common and module storage either on stack or heap. + + * Compile flag to generate code for array conformance checking + (suggest -CC). + + * User control of symbol names (underscores, etc). + + * Compile setting for maximum size of stack frame size before + spilling parts to static or heap. + + * Flag to force local variables into static space. + + * Flag to force local variables onto stack. + +Environment Options +------------------- + + * Pluggable library modules for random numbers, linear algebra. LA + should use BLAS calling conventions. + + * Environment variables controlling actions on arithmetic exceptions + like overflow, underflow, precision loss--Generate NaN, abort, + default. action. + + * Set precision for fp units that support it (i387). + + * Variable for setting fp rounding mode. + + * Variable to fill uninitialized variables with a user-defined bit + pattern. + + * Environment variable controlling filename that is opened for that + unit number. + + * Environment variable to clear/trash memory being freed. + + * Environment variable to control tracing of allocations and frees. + + * Environment variable to display allocated memory at normal program + end. + + * Environment variable for filename for * IO-unit. + + * Environment variable for temporary file directory. + + * Environment variable forcing standard output to be line buffered + (unix). + + + +File: gfortran.info, Node: Copying, Next: GNU Free Documentation License, Prev: Contributing, Up: Top + +GNU General Public License +************************** + + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' + + Everyone is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed. + +Preamble +======== + +The GNU General Public License is a free, copyleft license for software +and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program-to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you +have certain responsibilities if you distribute copies of the software, +or if you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the +manufacturer can do so. This is fundamentally incompatible with the +aim of protecting users' freedom to change the software. The +systematic pattern of such abuse occurs in the area of products for +individuals to use, which is precisely where it is most unacceptable. +Therefore, we have designed this version of the GPL to prohibit the +practice for those products. If such problems arise substantially in +other domains, we stand ready to extend this provision to those domains +in future versions of the GPL, as needed to protect the freedom of +users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + +TERMS AND CONDITIONS +==================== + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public + License. + + "Copyright" also means copyright-like laws that apply to other + kinds of works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this + License. Each licensee is addressed as "you". "Licensees" and + "recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the + work in a fashion requiring copyright permission, other than the + making of an exact copy. The resulting work is called a "modified + version" of the earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work + based on the Program. + + To "propagate" a work means to do anything with it that, without + permission, would make you directly or secondarily liable for + infringement under applicable copyright law, except executing it + on a computer or modifying a private copy. Propagation includes + copying, distribution (with or without modification), making + available to the public, and in some countries other activities as + well. + + To "convey" a work means any kind of propagation that enables other + parties to make or receive copies. Mere interaction with a user + through a computer network, with no transfer of a copy, is not + conveying. + + An interactive user interface displays "Appropriate Legal Notices" + to the extent that it includes a convenient and prominently visible + feature that (1) displays an appropriate copyright notice, and (2) + tells the user that there is no warranty for the work (except to + the extent that warranties are provided), that licensees may + convey the work under this License, and how to view a copy of this + License. If the interface presents a list of user commands or + options, such as a menu, a prominent item in the list meets this + criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work + for making modifications to it. "Object code" means any + non-source form of a work. + + A "Standard Interface" means an interface that either is an + official standard defined by a recognized standards body, or, in + the case of interfaces specified for a particular programming + language, one that is widely used among developers working in that + language. + + The "System Libraries" of an executable work include anything, + other than the work as a whole, that (a) is included in the normal + form of packaging a Major Component, but which is not part of that + Major Component, and (b) serves only to enable use of the work + with that Major Component, or to implement a Standard Interface + for which an implementation is available to the public in source + code form. A "Major Component", in this context, means a major + essential component (kernel, window system, and so on) of the + specific operating system (if any) on which the executable work + runs, or a compiler used to produce the work, or an object code + interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all + the source code needed to generate, install, and (for an executable + work) run the object code and to modify the work, including + scripts to control those activities. However, it does not include + the work's System Libraries, or general-purpose tools or generally + available free programs which are used unmodified in performing + those activities but which are not part of the work. For example, + Corresponding Source includes interface definition files + associated with source files for the work, and the source code for + shared libraries and dynamically linked subprograms that the work + is specifically designed to require, such as by intimate data + communication or control flow between those subprograms and other + parts of the work. + + The Corresponding Source need not include anything that users can + regenerate automatically from other parts of the Corresponding + Source. + + The Corresponding Source for a work in source code form is that + same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of + copyright on the Program, and are irrevocable provided the stated + conditions are met. This License explicitly affirms your unlimited + permission to run the unmodified Program. The output from running + a covered work is covered by this License only if the output, + given its content, constitutes a covered work. This License + acknowledges your rights of fair use or other equivalent, as + provided by copyright law. + + You may make, run and propagate covered works that you do not + convey, without conditions so long as your license otherwise + remains in force. You may convey covered works to others for the + sole purpose of having them make modifications exclusively for + you, or provide you with facilities for running those works, + provided that you comply with the terms of this License in + conveying all material for which you do not control copyright. + Those thus making or running the covered works for you must do so + exclusively on your behalf, under your direction and control, on + terms that prohibit them from making any copies of your + copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under + the conditions stated below. Sublicensing is not allowed; section + 10 makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological + measure under any applicable law fulfilling obligations under + article 11 of the WIPO copyright treaty adopted on 20 December + 1996, or similar laws prohibiting or restricting circumvention of + such measures. + + When you convey a covered work, you waive any legal power to forbid + circumvention of technological measures to the extent such + circumvention is effected by exercising rights under this License + with respect to the covered work, and you disclaim any intention + to limit operation or modification of the work as a means of + enforcing, against the work's users, your or third parties' legal + rights to forbid circumvention of technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you + receive it, in any medium, provided that you conspicuously and + appropriately publish on each copy an appropriate copyright notice; + keep intact all notices stating that this License and any + non-permissive terms added in accord with section 7 apply to the + code; keep intact all notices of the absence of any warranty; and + give all recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, + and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to + produce it from the Program, in the form of source code under the + terms of section 4, provided that you also meet all of these + conditions: + + a. The work must carry prominent notices stating that you + modified it, and giving a relevant date. + + b. The work must carry prominent notices stating that it is + released under this License and any conditions added under + section 7. This requirement modifies the requirement in + section 4 to "keep intact all notices". + + c. You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable + section 7 additional terms, to the whole of the work, and all + its parts, regardless of how they are packaged. This License + gives no permission to license the work in any other way, but + it does not invalidate such permission if you have separately + received it. + + d. If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has + interactive interfaces that do not display Appropriate Legal + Notices, your work need not make them do so. + + A compilation of a covered work with other separate and independent + works, which are not by their nature extensions of the covered + work, and which are not combined with it such as to form a larger + program, in or on a volume of a storage or distribution medium, is + called an "aggregate" if the compilation and its resulting + copyright are not used to limit the access or legal rights of the + compilation's users beyond what the individual works permit. + Inclusion of a covered work in an aggregate does not cause this + License to apply to the other parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms + of sections 4 and 5, provided that you also convey the + machine-readable Corresponding Source under the terms of this + License, in one of these ways: + + a. Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b. Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for + as long as you offer spare parts or customer support for that + product model, to give anyone who possesses the object code + either (1) a copy of the Corresponding Source for all the + software in the product that is covered by this License, on a + durable physical medium customarily used for software + interchange, for a price no more than your reasonable cost of + physically performing this conveying of source, or (2) access + to copy the Corresponding Source from a network server at no + charge. + + c. Convey individual copies of the object code with a copy of + the written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, + and only if you received the object code with such an offer, + in accord with subsection 6b. + + d. Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access + to the Corresponding Source in the same way through the same + place at no further charge. You need not require recipients + to copy the Corresponding Source along with the object code. + If the place to copy the object code is a network server, the + Corresponding Source may be on a different server (operated + by you or a third party) that supports equivalent copying + facilities, provided you maintain clear directions next to + the object code saying where to find the Corresponding Source. + Regardless of what server hosts the Corresponding Source, you + remain obligated to ensure that it is available for as long + as needed to satisfy these requirements. + + e. Convey the object code using peer-to-peer transmission, + provided you inform other peers where the object code and + Corresponding Source of the work are being offered to the + general public at no charge under subsection 6d. + + + A separable portion of the object code, whose source code is + excluded from the Corresponding Source as a System Library, need + not be included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means + any tangible personal property which is normally used for personal, + family, or household purposes, or (2) anything designed or sold for + incorporation into a dwelling. In determining whether a product + is a consumer product, doubtful cases shall be resolved in favor of + coverage. For a particular product received by a particular user, + "normally used" refers to a typical or common use of that class of + product, regardless of the status of the particular user or of the + way in which the particular user actually uses, or expects or is + expected to use, the product. A product is a consumer product + regardless of whether the product has substantial commercial, + industrial or non-consumer uses, unless such uses represent the + only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, + procedures, authorization keys, or other information required to + install and execute modified versions of a covered work in that + User Product from a modified version of its Corresponding Source. + The information must suffice to ensure that the continued + functioning of the modified object code is in no case prevented or + interfered with solely because modification has been made. + + If you convey an object code work under this section in, or with, + or specifically for use in, a User Product, and the conveying + occurs as part of a transaction in which the right of possession + and use of the User Product is transferred to the recipient in + perpetuity or for a fixed term (regardless of how the transaction + is characterized), the Corresponding Source conveyed under this + section must be accompanied by the Installation Information. But + this requirement does not apply if neither you nor any third party + retains the ability to install modified object code on the User + Product (for example, the work has been installed in ROM). + + The requirement to provide Installation Information does not + include a requirement to continue to provide support service, + warranty, or updates for a work that has been modified or + installed by the recipient, or for the User Product in which it + has been modified or installed. Access to a network may be denied + when the modification itself materially and adversely affects the + operation of the network or violates the rules and protocols for + communication across the network. + + Corresponding Source conveyed, and Installation Information + provided, in accord with this section must be in a format that is + publicly documented (and with an implementation available to the + public in source code form), and must require no special password + or key for unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of + this License by making exceptions from one or more of its + conditions. Additional permissions that are applicable to the + entire Program shall be treated as though they were included in + this License, to the extent that they are valid under applicable + law. If additional permissions apply only to part of the Program, + that part may be used separately under those permissions, but the + entire Program remains governed by this License without regard to + the additional permissions. + + When you convey a copy of a covered work, you may at your option + remove any additional permissions from that copy, or from any part + of it. (Additional permissions may be written to require their own + removal in certain cases when you modify the work.) You may place + additional permissions on material, added by you to a covered work, + for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material + you add to a covered work, you may (if authorized by the copyright + holders of that material) supplement the terms of this License + with terms: + + a. Disclaiming warranty or limiting liability differently from + the terms of sections 15 and 16 of this License; or + + b. Requiring preservation of specified reasonable legal notices + or author attributions in that material or in the Appropriate + Legal Notices displayed by works containing it; or + + c. Prohibiting misrepresentation of the origin of that material, + or requiring that modified versions of such material be + marked in reasonable ways as different from the original + version; or + + d. Limiting the use for publicity purposes of names of licensors + or authors of the material; or + + e. Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f. Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified + versions of it) with contractual assumptions of liability to + the recipient, for any liability that these contractual + assumptions directly impose on those licensors and authors. + + All other non-permissive additional terms are considered "further + restrictions" within the meaning of section 10. If the Program as + you received it, or any part of it, contains a notice stating that + it is governed by this License along with a term that is a further + restriction, you may remove that term. If a license document + contains a further restriction but permits relicensing or + conveying under this License, you may add to a covered work + material governed by the terms of that license document, provided + that the further restriction does not survive such relicensing or + conveying. + + If you add terms to a covered work in accord with this section, you + must place, in the relevant source files, a statement of the + additional terms that apply to those files, or a notice indicating + where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in + the form of a separately written license, or stated as exceptions; + the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly + provided under this License. Any attempt otherwise to propagate or + modify it is void, and will automatically terminate your rights + under this License (including any patent licenses granted under + the third paragraph of section 11). + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly + and finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from + you under this License. If your rights have been terminated and + not permanently reinstated, you do not qualify to receive new + licenses for the same material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or + run a copy of the Program. Ancillary propagation of a covered work + occurring solely as a consequence of using peer-to-peer + transmission to receive a copy likewise does not require + acceptance. However, nothing other than this License grants you + permission to propagate or modify any covered work. These actions + infringe copyright if you do not accept this License. Therefore, + by modifying or propagating a covered work, you indicate your + acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically + receives a license from the original licensors, to run, modify and + propagate that work, subject to this License. You are not + responsible for enforcing compliance by third parties with this + License. + + An "entity transaction" is a transaction transferring control of an + organization, or substantially all assets of one, or subdividing an + organization, or merging organizations. If propagation of a + covered work results from an entity transaction, each party to that + transaction who receives a copy of the work also receives whatever + licenses to the work the party's predecessor in interest had or + could give under the previous paragraph, plus a right to + possession of the Corresponding Source of the work from the + predecessor in interest, if the predecessor has it or can get it + with reasonable efforts. + + You may not impose any further restrictions on the exercise of the + rights granted or affirmed under this License. For example, you + may not impose a license fee, royalty, or other charge for + exercise of rights granted under this License, and you may not + initiate litigation (including a cross-claim or counterclaim in a + lawsuit) alleging that any patent claim is infringed by making, + using, selling, offering for sale, or importing the Program or any + portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this + License of the Program or a work on which the Program is based. + The work thus licensed is called the contributor's "contributor + version". + + A contributor's "essential patent claims" are all patent claims + owned or controlled by the contributor, whether already acquired or + hereafter acquired, that would be infringed by some manner, + permitted by this License, of making, using, or selling its + contributor version, but do not include claims that would be + infringed only as a consequence of further modification of the + contributor version. For purposes of this definition, "control" + includes the right to grant patent sublicenses in a manner + consistent with the requirements of this License. + + Each contributor grants you a non-exclusive, worldwide, + royalty-free patent license under the contributor's essential + patent claims, to make, use, sell, offer for sale, import and + otherwise run, modify and propagate the contents of its + contributor version. + + In the following three paragraphs, a "patent license" is any + express agreement or commitment, however denominated, not to + enforce a patent (such as an express permission to practice a + patent or covenant not to sue for patent infringement). To + "grant" such a patent license to a party means to make such an + agreement or commitment not to enforce a patent against the party. + + If you convey a covered work, knowingly relying on a patent + license, and the Corresponding Source of the work is not available + for anyone to copy, free of charge and under the terms of this + License, through a publicly available network server or other + readily accessible means, then you must either (1) cause the + Corresponding Source to be so available, or (2) arrange to deprive + yourself of the benefit of the patent license for this particular + work, or (3) arrange, in a manner consistent with the requirements + of this License, to extend the patent license to downstream + recipients. "Knowingly relying" means you have actual knowledge + that, but for the patent license, your conveying the covered work + in a country, or your recipient's use of the covered work in a + country, would infringe one or more identifiable patents in that + country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or + arrangement, you convey, or propagate by procuring conveyance of, a + covered work, and grant a patent license to some of the parties + receiving the covered work authorizing them to use, propagate, + modify or convey a specific copy of the covered work, then the + patent license you grant is automatically extended to all + recipients of the covered work and works based on it. + + A patent license is "discriminatory" if it does not include within + the scope of its coverage, prohibits the exercise of, or is + conditioned on the non-exercise of one or more of the rights that + are specifically granted under this License. You may not convey a + covered work if you are a party to an arrangement with a third + party that is in the business of distributing software, under + which you make payment to the third party based on the extent of + your activity of conveying the work, and under which the third + party grants, to any of the parties who would receive the covered + work from you, a discriminatory patent license (a) in connection + with copies of the covered work conveyed by you (or copies made + from those copies), or (b) primarily for and in connection with + specific products or compilations that contain the covered work, + unless you entered into that arrangement, or that patent license + was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting + any implied license or other defenses to infringement that may + otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, + agreement or otherwise) that contradict the conditions of this + License, they do not excuse you from the conditions of this + License. If you cannot convey a covered work so as to satisfy + simultaneously your obligations under this License and any other + pertinent obligations, then as a consequence you may not convey it + at all. For example, if you agree to terms that obligate you to + collect a royalty for further conveying from those to whom you + convey the Program, the only way you could satisfy both those + terms and this License would be to refrain entirely from conveying + the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have + permission to link or combine any covered work with a work licensed + under version 3 of the GNU Affero General Public License into a + single combined work, and to convey the resulting work. The terms + of this License will continue to apply to the part which is the + covered work, but the special requirements of the GNU Affero + General Public License, section 13, concerning interaction through + a network will apply to the combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new + versions of the GNU General Public License from time to time. + Such new versions will be similar in spirit to the present + version, but may differ in detail to address new problems or + concerns. + + Each version is given a distinguishing version number. If the + Program specifies that a certain numbered version of the GNU + General Public License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that numbered version or of any later version published by the + Free Software Foundation. If the Program does not specify a + version number of the GNU General Public License, you may choose + any version ever published by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future + versions of the GNU General Public License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Program. + + Later license versions may give you additional or different + permissions. However, no additional obligations are imposed on any + author or copyright holder as a result of your choosing to follow a + later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY + APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE + COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE + RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. + SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES + AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU + FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE + THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA + BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD + PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER + PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF + THE POSSIBILITY OF SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided + above cannot be given local legal effect according to their terms, + reviewing courts shall apply local law that most closely + approximates an absolute waiver of all civil liability in + connection with the Program, unless a warranty or assumption of + liability accompanies a copy of the Program in return for a fee. + + +END OF TERMS AND CONDITIONS +=========================== + +How to Apply These Terms to Your New Programs +============================================= + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. + Copyright (C) YEAR NAME OF AUTHOR + + This program 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 3 of the License, or (at + your option) any later version. + + This program 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, see `http://www.gnu.org/licenses/'. + + Also add information on how to contact you by electronic and paper +mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + PROGRAM Copyright (C) YEAR NAME OF AUTHOR + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, your +program's commands might be different; for a GUI interface, you would +use an "about box". + + You should also get your employer (if you work as a programmer) or +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. For more information on this, and how to apply and follow +the GNU GPL, see `http://www.gnu.org/licenses/'. + + The GNU General Public License does not permit incorporating your +program into proprietary programs. If your program is a subroutine +library, you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use the +GNU Lesser General Public License instead of this License. But first, +please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. + + +File: gfortran.info, Node: GNU Free Documentation License, Next: Funding, Prev: Copying, Up: Top + +GNU Free Documentation License +****************************** + + Version 1.2, November 2002 + + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. + We recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it + can be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You + accept the license if you copy, modify or distribute the work in a + way requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in + the notice that says that the Document is released under this + License. If a section does not fit the above definition of + Secondary then it is not allowed to be designated as Invariant. + The Document may contain zero Invariant Sections. If the Document + does not identify any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images + composed of pixels) generic paint programs or (for drawings) some + widely available drawing editor, and that is suitable for input to + text formatters or for automatic translation to a variety of + formats suitable for input to text formatters. A copy made in an + otherwise Transparent file format whose markup, or absence of + markup, has been arranged to thwart or discourage subsequent + modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A + copy that is not "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and + standard-conforming simple HTML, PostScript or PDF designed for + human modification. Examples of transparent image formats include + PNG, XCF and JPG. Opaque formats include proprietary formats that + can be read and edited only by proprietary word processors, SGML or + XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML, PostScript or PDF + produced by some word processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow + the conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the + title equally prominent and visible. You may add other material + on the covers in addition. Copying with changes limited to the + covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in + other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a computer-network location from + which the general network-using public has access to download + using public-standard network protocols a complete Transparent + copy of the Document, free of added material. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of + copies, to give them a chance to provide you with an updated + version of the Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with + the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version to + whoever possesses a copy of it. In addition, you must do these + things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of + previous versions (which should, if there were any, be listed + in the History section of the Document). You may use the + same title as a previous version if the original publisher of + that version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on + the Title Page. If there is no section Entitled "History" in + the Document, create one stating the title, year, authors, + and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in + the previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in + the "History" section. You may omit a network location for a + work that was published at least four years before the + Document itself, or if the original publisher of the version + it refers to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the + section all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section + titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the + documents in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided for under this License. Any other + attempt to copy, modify, sublicense or distribute the Document is + void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, + from you under this License will not have their licenses + terminated so long as such parties remain in full compliance. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + `http://www.gnu.org/copyleft/'. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If + the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, to +permit their use in free software. + + +File: gfortran.info, Node: Funding, Next: Option Index, Prev: GNU Free Documentation License, Up: Top + +Funding Free Software +********************* + +If you want to have more free software a few years from now, it makes +sense for you to help encourage people to contribute funds for its +development. The most effective approach known is to encourage +commercial redistributors to donate. + + Users of free software systems can boost the pace of development by +encouraging for-a-fee distributors to donate part of their selling price +to free software developers--the Free Software Foundation, and others. + + The way to convince distributors to do this is to demand it and +expect it from them. So when you compare distributors, judge them +partly by how much they give to free software development. Show +distributors they must compete to be the one who gives the most. + + To make this approach work, you must insist on numbers that you can +compare, such as, "We will donate ten dollars to the Frobnitz project +for each disk sold." Don't be satisfied with a vague promise, such as +"A portion of the profits are donated," since it doesn't give a basis +for comparison. + + Even a precise fraction "of the profits from this disk" is not very +meaningful, since creative accounting and unrelated business decisions +can greatly alter what fraction of the sales price counts as profit. +If the price you pay is $50, ten percent of the profit is probably less +than a dollar; it might be a few cents, or nothing at all. + + Some redistributors do development work themselves. This is useful +too; but to keep everyone honest, you need to inquire how much they do, +and what kind. Some kinds of development make much more long-term +difference than others. For example, maintaining a separate version of +a program contributes very little; maintaining the standard version of a +program for the whole community contributes much. Easy new ports +contribute little, since someone else would surely do them; difficult +ports such as adding a new CPU to the GNU Compiler Collection +contribute more; major new features or packages contribute the most. + + By establishing the idea that supporting further development is "the +proper thing to do" when distributing free software for a fee, we can +assure a steady flow of resources into making more free software. + + Copyright (C) 1994 Free Software Foundation, Inc. + Verbatim copying and redistribution of this section is permitted + without royalty; alteration is not permitted. + + +File: gfortran.info, Node: Option Index, Next: Keyword Index, Prev: Funding, Up: Top + +Option Index +************ + +`gfortran''s command line options are indexed here without any initial +`-' or `--'. Where an option has both positive and negative forms (such +as -foption and -fno-option), relevant entries in the manual are +indexed under the most appropriate form; it may sometimes be useful to +look up both forms. + +[index] +* Menu: + +* A-PREDICATE=ANSWER: Preprocessing Options. + (line 120) +* APREDICATE=ANSWER: Preprocessing Options. + (line 114) +* backslash: Fortran Dialect Options. + (line 59) +* C: Preprocessing Options. + (line 123) +* CC: Preprocessing Options. + (line 138) +* cpp: Preprocessing Options. + (line 13) +* dD: Preprocessing Options. + (line 35) +* dI: Preprocessing Options. + (line 51) +* dM: Preprocessing Options. + (line 26) +* dN: Preprocessing Options. + (line 41) +* DNAME: Preprocessing Options. + (line 153) +* DNAME=DEFINITION: Preprocessing Options. + (line 156) +* dU: Preprocessing Options. + (line 44) +* falign-commons: Code Gen Options. (line 255) +* fall-intrinsics: Fortran Dialect Options. + (line 18) +* fbacktrace: Debugging Options. (line 31) +* fblas-matmul-limit: Code Gen Options. (line 214) +* fbounds-check: Code Gen Options. (line 130) +* fcheck-array-temporaries: Code Gen Options. (line 144) +* fconvert=CONVERSION: Runtime Options. (line 9) +* fcray-pointer: Fortran Dialect Options. + (line 105) +* fd-lines-as-code: Fortran Dialect Options. + (line 29) +* fd-lines-as-comments: Fortran Dialect Options. + (line 29) +* fdefault-double-8: Fortran Dialect Options. + (line 36) +* fdefault-integer-8: Fortran Dialect Options. + (line 44) +* fdefault-real-8: Fortran Dialect Options. + (line 49) +* fdollar-ok: Fortran Dialect Options. + (line 56) +* fdump-core: Debugging Options. (line 38) +* fdump-parse-tree: Debugging Options. (line 10) +* fexternal-blas: Code Gen Options. (line 206) +* ff2c: Code Gen Options. (line 25) +* ffixed-line-length-N: Fortran Dialect Options. + (line 76) +* ffpe-trap=LIST: Debugging Options. (line 14) +* ffree-form: Fortran Dialect Options. + (line 12) +* ffree-line-length-N: Fortran Dialect Options. + (line 89) +* fimplicit-none: Fortran Dialect Options. + (line 100) +* finit-character: Code Gen Options. (line 238) +* finit-integer: Code Gen Options. (line 238) +* finit-local-zero: Code Gen Options. (line 238) +* finit-logical: Code Gen Options. (line 238) +* finit-real: Code Gen Options. (line 238) +* fintrinsic-modules-path DIR: Directory Options. (line 40) +* fmax-array-constructor: Code Gen Options. (line 152) +* fmax-errors=N: Error and Warning Options. + (line 27) +* fmax-identifier-length=N: Fortran Dialect Options. + (line 96) +* fmax-stack-var-size: Code Gen Options. (line 170) +* fmax-subrecord-length=LENGTH: Runtime Options. (line 36) +* fmodule-private: Fortran Dialect Options. + (line 71) +* fno-automatic: Code Gen Options. (line 15) +* fno-fixed-form: Fortran Dialect Options. + (line 12) +* fno-range-check: Runtime Options. (line 20) +* fno-underscoring: Code Gen Options. (line 54) +* fopenmp: Fortran Dialect Options. + (line 109) +* fpack-derived: Code Gen Options. (line 184) +* fpp: Preprocessing Options. + (line 13) +* frange-check: Fortran Dialect Options. + (line 117) +* frecord-marker=LENGTH: Runtime Options. (line 28) +* frecursive: Code Gen Options. (line 225) +* frepack-arrays: Code Gen Options. (line 190) +* fsecond-underscore: Code Gen Options. (line 113) +* fshort-enums <1>: Fortran 2003 status. (line 20) +* fshort-enums: Code Gen Options. (line 200) +* fsign-zero: Runtime Options. (line 41) +* fsyntax-only: Error and Warning Options. + (line 33) +* fworking-directory: Preprocessing Options. + (line 55) +* H: Preprocessing Options. + (line 176) +* IDIR: Directory Options. (line 14) +* idirafter DIR: Preprocessing Options. + (line 70) +* imultilib DIR: Preprocessing Options. + (line 77) +* iprefix PREFIX: Preprocessing Options. + (line 81) +* iquote DIR: Preprocessing Options. + (line 90) +* isysroot DIR: Preprocessing Options. + (line 86) +* isystem DIR: Preprocessing Options. + (line 97) +* JDIR: Directory Options. (line 31) +* MDIR: Directory Options. (line 31) +* nostdinc: Preprocessing Options. + (line 105) +* P: Preprocessing Options. + (line 181) +* pedantic: Error and Warning Options. + (line 38) +* pedantic-errors: Error and Warning Options. + (line 57) +* static-libgfortran: Link Options. (line 11) +* std=STD option: Fortran Dialect Options. + (line 129) +* UNAME: Preprocessing Options. + (line 187) +* undef: Preprocessing Options. + (line 110) +* Waliasing: Error and Warning Options. + (line 68) +* Walign-commons: Error and Warning Options. + (line 165) +* Wall: Error and Warning Options. + (line 61) +* Wampersand: Error and Warning Options. + (line 85) +* Warray-temporaries: Error and Warning Options. + (line 93) +* Wcharacter-truncation: Error and Warning Options. + (line 98) +* Wconversion: Error and Warning Options. + (line 104) +* Werror: Error and Warning Options. + (line 171) +* Wimplicit-interface: Error and Warning Options. + (line 107) +* Wintrinsic-shadow: Error and Warning Options. + (line 152) +* Wintrinsics-std: Error and Warning Options. + (line 113) +* Wline-truncation: Error and Warning Options. + (line 101) +* Wsurprising: Error and Warning Options. + (line 120) +* Wtabs: Error and Warning Options. + (line 140) +* Wunderflow: Error and Warning Options. + (line 148) +* Wunused-parameter: Error and Warning Options. + (line 158) + + +File: gfortran.info, Node: Keyword Index, Prev: Option Index, Up: Top + +Keyword Index +************* + +[index] +* Menu: + +* $: Fortran Dialect Options. + (line 56) +* %LOC: Argument list functions. + (line 6) +* %REF: Argument list functions. + (line 6) +* %VAL: Argument list functions. + (line 6) +* &: Error and Warning Options. + (line 85) +* [...]: Fortran 2003 status. (line 13) +* ABORT: ABORT. (line 6) +* ABS: ABS. (line 6) +* absolute value: ABS. (line 6) +* ACCESS: ACCESS. (line 6) +* ACCESS='STREAM' I/O: Fortran 2003 status. (line 32) +* ACHAR: ACHAR. (line 6) +* ACOS: ACOS. (line 6) +* ACOSH: ACOSH. (line 6) +* adjust string <1>: ADJUSTR. (line 6) +* adjust string: ADJUSTL. (line 6) +* ADJUSTL: ADJUSTL. (line 6) +* ADJUSTR: ADJUSTR. (line 6) +* AIMAG: AIMAG. (line 6) +* AINT: AINT. (line 6) +* ALARM: ALARM. (line 6) +* ALGAMA: LOG_GAMMA. (line 6) +* aliasing: Error and Warning Options. + (line 68) +* alignment of COMMON blocks <1>: Code Gen Options. (line 255) +* alignment of COMMON blocks: Error and Warning Options. + (line 165) +* ALL: ALL. (line 6) +* all warnings: Error and Warning Options. + (line 61) +* ALLOCATABLE components of derived types: Fortran 2003 status. + (line 30) +* ALLOCATABLE dummy arguments: Fortran 2003 status. (line 26) +* ALLOCATABLE function results: Fortran 2003 status. (line 28) +* ALLOCATED: ALLOCATED. (line 6) +* allocation, moving: MOVE_ALLOC. (line 6) +* allocation, status: ALLOCATED. (line 6) +* ALOG: LOG. (line 6) +* ALOG10: LOG10. (line 6) +* AMAX0: MAX. (line 6) +* AMAX1: MAX. (line 6) +* AMIN0: MIN. (line 6) +* AMIN1: MIN. (line 6) +* AMOD: MOD. (line 6) +* AND: AND. (line 6) +* ANINT: ANINT. (line 6) +* ANY: ANY. (line 6) +* area hyperbolic cosine: ACOSH. (line 6) +* area hyperbolic sine: ASINH. (line 6) +* area hyperbolic tangent: ATANH. (line 6) +* argument list functions: Argument list functions. + (line 6) +* arguments, to program <1>: IARGC. (line 6) +* arguments, to program <2>: GET_COMMAND_ARGUMENT. + (line 6) +* arguments, to program <3>: GET_COMMAND. (line 6) +* arguments, to program <4>: GETARG. (line 6) +* arguments, to program: COMMAND_ARGUMENT_COUNT. + (line 6) +* array, add elements: SUM. (line 6) +* array, apply condition <1>: ANY. (line 6) +* array, apply condition: ALL. (line 6) +* array, bounds checking: Code Gen Options. (line 130) +* array, change dimensions: RESHAPE. (line 6) +* array, combine arrays: MERGE. (line 6) +* array, condition testing <1>: ANY. (line 6) +* array, condition testing: ALL. (line 6) +* array, conditionally add elements: SUM. (line 6) +* array, conditionally count elements: COUNT. (line 6) +* array, conditionally multiply elements: PRODUCT. (line 6) +* array, constructors: Fortran 2003 status. (line 13) +* array, count elements: SIZE. (line 6) +* array, duplicate dimensions: SPREAD. (line 6) +* array, duplicate elements: SPREAD. (line 6) +* array, element counting: COUNT. (line 6) +* array, gather elements: PACK. (line 6) +* array, increase dimension <1>: UNPACK. (line 6) +* array, increase dimension: SPREAD. (line 6) +* array, indices of type real: Real array indices. (line 6) +* array, location of maximum element: MAXLOC. (line 6) +* array, location of minimum element: MINLOC. (line 6) +* array, lower bound: LBOUND. (line 6) +* array, maximum value: MAXVAL. (line 6) +* array, merge arrays: MERGE. (line 6) +* array, minimum value: MINVAL. (line 6) +* array, multiply elements: PRODUCT. (line 6) +* array, number of elements <1>: SIZE. (line 6) +* array, number of elements: COUNT. (line 6) +* array, packing: PACK. (line 6) +* array, permutation: CSHIFT. (line 6) +* array, product: PRODUCT. (line 6) +* array, reduce dimension: PACK. (line 6) +* array, rotate: CSHIFT. (line 6) +* array, scatter elements: UNPACK. (line 6) +* array, shape: SHAPE. (line 6) +* array, shift: EOSHIFT. (line 6) +* array, shift circularly: CSHIFT. (line 6) +* array, size: SIZE. (line 6) +* array, sum: SUM. (line 6) +* array, transmogrify: RESHAPE. (line 6) +* array, transpose: TRANSPOSE. (line 6) +* array, unpacking: UNPACK. (line 6) +* array, upper bound: UBOUND. (line 6) +* ASCII collating sequence <1>: IACHAR. (line 6) +* ASCII collating sequence: ACHAR. (line 6) +* ASIN: ASIN. (line 6) +* ASINH <1>: ATANH. (line 6) +* ASINH: ASINH. (line 6) +* ASSOCIATED: ASSOCIATED. (line 6) +* association status: ASSOCIATED. (line 6) +* association status, C pointer: C_ASSOCIATED. (line 6) +* ATAN: ATAN. (line 6) +* ATAN2: ATAN2. (line 6) +* Authors: Contributors. (line 6) +* backslash: Fortran Dialect Options. + (line 59) +* backtrace: Debugging Options. (line 31) +* BESJ0: BESSEL_J0. (line 6) +* BESJ1: BESSEL_J1. (line 6) +* BESJN: BESSEL_JN. (line 6) +* Bessel function, first kind <1>: BESSEL_JN. (line 6) +* Bessel function, first kind <2>: BESSEL_J1. (line 6) +* Bessel function, first kind: BESSEL_J0. (line 6) +* Bessel function, second kind <1>: BESSEL_YN. (line 6) +* Bessel function, second kind <2>: BESSEL_Y1. (line 6) +* Bessel function, second kind: BESSEL_Y0. (line 6) +* BESSEL_J0: BESSEL_J0. (line 6) +* BESSEL_J1: BESSEL_J1. (line 6) +* BESSEL_JN: BESSEL_JN. (line 6) +* BESSEL_Y0: BESSEL_Y0. (line 6) +* BESSEL_Y1: BESSEL_Y1. (line 6) +* BESSEL_YN: BESSEL_YN. (line 6) +* BESY0: BESSEL_Y0. (line 6) +* BESY1: BESSEL_Y1. (line 6) +* BESYN: BESSEL_YN. (line 6) +* BIT_SIZE: BIT_SIZE. (line 6) +* bits, clear: IBCLR. (line 6) +* bits, extract: IBITS. (line 6) +* bits, get: IBITS. (line 6) +* bits, move <1>: TRANSFER. (line 6) +* bits, move: MVBITS. (line 6) +* bits, negate: NOT. (line 6) +* bits, number of: BIT_SIZE. (line 6) +* bits, set: IBSET. (line 6) +* bits, shift: ISHFT. (line 6) +* bits, shift circular: ISHFTC. (line 6) +* bits, shift left: LSHIFT. (line 6) +* bits, shift right: RSHIFT. (line 6) +* bits, testing: BTEST. (line 6) +* bits, unset: IBCLR. (line 6) +* bitwise logical and <1>: IAND. (line 6) +* bitwise logical and: AND. (line 6) +* bitwise logical exclusive or <1>: XOR. (line 6) +* bitwise logical exclusive or: IEOR. (line 6) +* bitwise logical not: NOT. (line 6) +* bitwise logical or <1>: OR. (line 6) +* bitwise logical or: IOR. (line 6) +* bounds checking: Code Gen Options. (line 130) +* BOZ literal constants: BOZ literal constants. + (line 6) +* BTEST: BTEST. (line 6) +* C_ASSOCIATED: C_ASSOCIATED. (line 6) +* C_F_POINTER: C_F_POINTER. (line 6) +* C_F_PROCPOINTER: C_F_PROCPOINTER. (line 6) +* C_FUNLOC: C_FUNLOC. (line 6) +* C_LOC: C_LOC. (line 6) +* C_SIZEOF: C_SIZEOF. (line 6) +* CABS: ABS. (line 6) +* calling convention: Code Gen Options. (line 25) +* CCOS: COS. (line 6) +* CDABS: ABS. (line 6) +* CDCOS: COS. (line 6) +* CDEXP: EXP. (line 6) +* CDLOG: LOG. (line 6) +* CDSIN: SIN. (line 6) +* CDSQRT: SQRT. (line 6) +* ceiling: CEILING. (line 6) +* CEILING: CEILING. (line 6) +* ceiling: ANINT. (line 6) +* CEXP: EXP. (line 6) +* CHAR: CHAR. (line 6) +* character kind: SELECTED_CHAR_KIND. (line 6) +* character set: Fortran Dialect Options. + (line 56) +* CHDIR: CHDIR. (line 6) +* checking array temporaries: Code Gen Options. (line 144) +* checking subscripts: Code Gen Options. (line 130) +* CHMOD: CHMOD. (line 6) +* clock ticks <1>: SYSTEM_CLOCK. (line 6) +* clock ticks <2>: MCLOCK8. (line 6) +* clock ticks: MCLOCK. (line 6) +* CLOG: LOG. (line 6) +* CMPLX: CMPLX. (line 6) +* code generation, conventions: Code Gen Options. (line 6) +* collating sequence, ASCII <1>: IACHAR. (line 6) +* collating sequence, ASCII: ACHAR. (line 6) +* command options: Invoking GNU Fortran. + (line 6) +* command-line arguments <1>: IARGC. (line 6) +* command-line arguments <2>: GET_COMMAND_ARGUMENT. + (line 6) +* command-line arguments <3>: GET_COMMAND. (line 6) +* command-line arguments <4>: GETARG. (line 6) +* command-line arguments: COMMAND_ARGUMENT_COUNT. + (line 6) +* command-line arguments, number of <1>: IARGC. (line 6) +* command-line arguments, number of: COMMAND_ARGUMENT_COUNT. + (line 6) +* COMMAND_ARGUMENT_COUNT: COMMAND_ARGUMENT_COUNT. + (line 6) +* COMPLEX: COMPLEX. (line 6) +* complex conjugate: CONJG. (line 6) +* complex numbers, conversion to <1>: DCMPLX. (line 6) +* complex numbers, conversion to <2>: COMPLEX. (line 6) +* complex numbers, conversion to: CMPLX. (line 6) +* complex numbers, imaginary part: AIMAG. (line 6) +* complex numbers, real part <1>: REAL. (line 6) +* complex numbers, real part: DREAL. (line 6) +* Conditional compilation: Preprocessing and conditional compilation. + (line 6) +* CONJG: CONJG. (line 6) +* Contributing: Contributing. (line 6) +* Contributors: Contributors. (line 6) +* conversion: Error and Warning Options. + (line 104) +* conversion, to character: CHAR. (line 6) +* conversion, to complex <1>: DCMPLX. (line 6) +* conversion, to complex <2>: COMPLEX. (line 6) +* conversion, to complex: CMPLX. (line 6) +* conversion, to integer <1>: LONG. (line 6) +* conversion, to integer <2>: INT8. (line 6) +* conversion, to integer <3>: INT2. (line 6) +* conversion, to integer <4>: INT. (line 6) +* conversion, to integer <5>: ICHAR. (line 6) +* conversion, to integer <6>: IACHAR. (line 6) +* conversion, to integer: Implicitly convert LOGICAL and INTEGER values. + (line 6) +* conversion, to logical <1>: LOGICAL. (line 6) +* conversion, to logical: Implicitly convert LOGICAL and INTEGER values. + (line 6) +* conversion, to real <1>: SNGL. (line 6) +* conversion, to real <2>: REAL. (line 6) +* conversion, to real <3>: FLOAT. (line 6) +* conversion, to real <4>: DFLOAT. (line 6) +* conversion, to real: DBLE. (line 6) +* conversion, to string: CTIME. (line 6) +* CONVERT specifier: CONVERT specifier. (line 6) +* core, dump <1>: ABORT. (line 6) +* core, dump: Debugging Options. (line 38) +* COS: COS. (line 6) +* COSH: COSH. (line 6) +* cosine: COS. (line 6) +* cosine, hyperbolic: COSH. (line 6) +* cosine, hyperbolic, inverse: ACOSH. (line 6) +* cosine, inverse: ACOS. (line 6) +* COUNT: COUNT. (line 6) +* CPP <1>: Preprocessing Options. + (line 6) +* CPP: Preprocessing and conditional compilation. + (line 6) +* CPU_TIME: CPU_TIME. (line 6) +* Credits: Contributors. (line 6) +* CSHIFT: CSHIFT. (line 6) +* CSIN: SIN. (line 6) +* CSQRT: SQRT. (line 6) +* CTIME: CTIME. (line 6) +* current date <1>: IDATE. (line 6) +* current date <2>: FDATE. (line 6) +* current date: DATE_AND_TIME. (line 6) +* current time <1>: TIME8. (line 6) +* current time <2>: TIME. (line 6) +* current time <3>: ITIME. (line 6) +* current time <4>: FDATE. (line 6) +* current time: DATE_AND_TIME. (line 6) +* DABS: ABS. (line 6) +* DACOS: ACOS. (line 6) +* DACOSH: ACOSH. (line 6) +* DASIN: ASIN. (line 6) +* DASINH <1>: ATANH. (line 6) +* DASINH: ASINH. (line 6) +* DATAN: ATAN. (line 6) +* DATAN2: ATAN2. (line 6) +* date, current <1>: IDATE. (line 6) +* date, current <2>: FDATE. (line 6) +* date, current: DATE_AND_TIME. (line 6) +* DATE_AND_TIME: DATE_AND_TIME. (line 6) +* DBESJ0: BESSEL_J0. (line 6) +* DBESJ1: BESSEL_J1. (line 6) +* DBESJN: BESSEL_JN. (line 6) +* DBESY0: BESSEL_Y0. (line 6) +* DBESY1: BESSEL_Y1. (line 6) +* DBESYN: BESSEL_YN. (line 6) +* DBLE: DBLE. (line 6) +* DCMPLX: DCMPLX. (line 6) +* DCONJG: CONJG. (line 6) +* DCOS: COS. (line 6) +* DCOSH: COSH. (line 6) +* DDIM: DIM. (line 6) +* debugging information options: Debugging Options. (line 6) +* debugging, preprocessor: Preprocessing Options. + (line 26) +* DECODE: ENCODE and DECODE statements. + (line 6) +* delayed execution <1>: SLEEP. (line 6) +* delayed execution: ALARM. (line 6) +* DEXP: EXP. (line 6) +* DFLOAT: DFLOAT. (line 6) +* DGAMMA: GAMMA. (line 6) +* dialect options: Fortran Dialect Options. + (line 6) +* DIGITS: DIGITS. (line 6) +* DIM: DIM. (line 6) +* DIMAG: AIMAG. (line 6) +* DINT: AINT. (line 6) +* directive, INCLUDE: Directory Options. (line 6) +* directory, options: Directory Options. (line 6) +* directory, search paths for inclusion: Directory Options. (line 14) +* division, modulo: MODULO. (line 6) +* division, remainder: MOD. (line 6) +* DLGAMA: LOG_GAMMA. (line 6) +* DLOG: LOG. (line 6) +* DLOG10: LOG10. (line 6) +* DMAX1: MAX. (line 6) +* DMIN1: MIN. (line 6) +* DMOD: MOD. (line 6) +* DNINT: ANINT. (line 6) +* dot product: DOT_PRODUCT. (line 6) +* DOT_PRODUCT: DOT_PRODUCT. (line 6) +* DPROD: DPROD. (line 6) +* DREAL: DREAL. (line 6) +* DSIGN: SIGN. (line 6) +* DSIN: SIN. (line 6) +* DSINH: SINH. (line 6) +* DSQRT: SQRT. (line 6) +* DTAN: TAN. (line 6) +* DTANH: TANH. (line 6) +* DTIME: DTIME. (line 6) +* elapsed time <1>: SECOND. (line 6) +* elapsed time <2>: SECNDS. (line 6) +* elapsed time: DTIME. (line 6) +* ENCODE: ENCODE and DECODE statements. + (line 6) +* ENUM statement: Fortran 2003 status. (line 20) +* ENUMERATOR statement: Fortran 2003 status. (line 20) +* environment variable <1>: GET_ENVIRONMENT_VARIABLE. + (line 6) +* environment variable <2>: GETENV. (line 6) +* environment variable <3>: Runtime. (line 6) +* environment variable: Environment Variables. + (line 6) +* EOSHIFT: EOSHIFT. (line 6) +* EPSILON: EPSILON. (line 6) +* ERF: ERF. (line 6) +* ERFC: ERFC. (line 6) +* ERFC_SCALED: ERFC_SCALED. (line 6) +* error function: ERF. (line 6) +* error function, complementary: ERFC. (line 6) +* error function, complementary, exponentially-scaled: ERFC_SCALED. + (line 6) +* errors, limiting: Error and Warning Options. + (line 27) +* escape characters: Fortran Dialect Options. + (line 59) +* ETIME: ETIME. (line 6) +* Euclidean distance: HYPOT. (line 6) +* EXIT: EXIT. (line 6) +* EXP: EXP. (line 6) +* EXPONENT: EXPONENT. (line 6) +* exponential function: EXP. (line 6) +* exponential function, inverse <1>: LOG10. (line 6) +* exponential function, inverse: LOG. (line 6) +* expression size <1>: SIZEOF. (line 6) +* expression size: C_SIZEOF. (line 6) +* extensions: Extensions. (line 6) +* extensions, implemented: Extensions implemented in GNU Fortran. + (line 6) +* extensions, not implemented: Extensions not implemented in GNU Fortran. + (line 6) +* f2c calling convention: Code Gen Options. (line 25) +* Factorial function: GAMMA. (line 6) +* FDATE: FDATE. (line 6) +* FDL, GNU Free Documentation License: GNU Free Documentation License. + (line 6) +* FGET: FGET. (line 6) +* FGETC: FGETC. (line 6) +* file format, fixed: Fortran Dialect Options. + (line 12) +* file format, free: Fortran Dialect Options. + (line 12) +* file operation, file number: FNUM. (line 6) +* file operation, flush: FLUSH. (line 6) +* file operation, position <1>: FTELL. (line 6) +* file operation, position: FSEEK. (line 6) +* file operation, read character <1>: FGETC. (line 6) +* file operation, read character: FGET. (line 6) +* file operation, seek: FSEEK. (line 6) +* file operation, write character <1>: FPUTC. (line 6) +* file operation, write character: FPUT. (line 6) +* file system, access mode: ACCESS. (line 6) +* file system, change access mode: CHMOD. (line 6) +* file system, create link <1>: SYMLNK. (line 6) +* file system, create link: LINK. (line 6) +* file system, file creation mask: UMASK. (line 6) +* file system, file status <1>: STAT. (line 6) +* file system, file status <2>: LSTAT. (line 6) +* file system, file status: FSTAT. (line 6) +* file system, hard link: LINK. (line 6) +* file system, remove file: UNLINK. (line 6) +* file system, rename file: RENAME. (line 6) +* file system, soft link: SYMLNK. (line 6) +* FLOAT: FLOAT. (line 6) +* floating point, exponent: EXPONENT. (line 6) +* floating point, fraction: FRACTION. (line 6) +* floating point, nearest different: NEAREST. (line 6) +* floating point, relative spacing <1>: SPACING. (line 6) +* floating point, relative spacing: RRSPACING. (line 6) +* floating point, scale: SCALE. (line 6) +* floating point, set exponent: SET_EXPONENT. (line 6) +* floor: FLOOR. (line 6) +* FLOOR: FLOOR. (line 6) +* floor: AINT. (line 6) +* FLUSH: FLUSH. (line 6) +* FLUSH statement: Fortran 2003 status. (line 16) +* FNUM: FNUM. (line 6) +* Fortran 77: GNU Fortran and G77. (line 6) +* FPP: Preprocessing and conditional compilation. + (line 6) +* FPUT: FPUT. (line 6) +* FPUTC: FPUTC. (line 6) +* FRACTION: FRACTION. (line 6) +* FREE: FREE. (line 6) +* FSEEK: FSEEK. (line 6) +* FSTAT: FSTAT. (line 6) +* FTELL: FTELL. (line 6) +* g77: GNU Fortran and G77. (line 6) +* g77 calling convention: Code Gen Options. (line 25) +* GAMMA: GAMMA. (line 6) +* Gamma function: GAMMA. (line 6) +* Gamma function, logarithm of: LOG_GAMMA. (line 6) +* GCC: GNU Fortran and GCC. (line 6) +* GERROR: GERROR. (line 6) +* GET_COMMAND: GET_COMMAND. (line 6) +* GET_COMMAND_ARGUMENT: GET_COMMAND_ARGUMENT. + (line 6) +* GET_ENVIRONMENT_VARIABLE: GET_ENVIRONMENT_VARIABLE. + (line 6) +* GETARG: GETARG. (line 6) +* GETCWD: GETCWD. (line 6) +* GETENV: GETENV. (line 6) +* GETGID: GETGID. (line 6) +* GETLOG: GETLOG. (line 6) +* GETPID: GETPID. (line 6) +* GETUID: GETUID. (line 6) +* GMTIME: GMTIME. (line 6) +* GNU Compiler Collection: GNU Fortran and GCC. (line 6) +* GNU Fortran command options: Invoking GNU Fortran. + (line 6) +* Hollerith constants: Hollerith constants support. + (line 6) +* HOSTNM: HOSTNM. (line 6) +* HUGE: HUGE. (line 6) +* hyperbolic arccosine: ACOSH. (line 6) +* hyperbolic arcsine: ASINH. (line 6) +* hyperbolic arctangent: ATANH. (line 6) +* hyperbolic cosine: COSH. (line 6) +* hyperbolic function, cosine: COSH. (line 6) +* hyperbolic function, cosine, inverse: ACOSH. (line 6) +* hyperbolic function, sine: SINH. (line 6) +* hyperbolic function, sine, inverse: ASINH. (line 6) +* hyperbolic function, tangent: TANH. (line 6) +* hyperbolic function, tangent, inverse: ATANH. (line 6) +* hyperbolic sine: SINH. (line 6) +* hyperbolic tangent: TANH. (line 6) +* HYPOT: HYPOT. (line 6) +* I/O item lists: I/O item lists. (line 6) +* IABS: ABS. (line 6) +* IACHAR: IACHAR. (line 6) +* IAND: IAND. (line 6) +* IARGC: IARGC. (line 6) +* IBCLR: IBCLR. (line 6) +* IBITS: IBITS. (line 6) +* IBSET: IBSET. (line 6) +* ICHAR: ICHAR. (line 6) +* IDATE: IDATE. (line 6) +* IDIM: DIM. (line 6) +* IDINT: INT. (line 6) +* IDNINT: NINT. (line 6) +* IEEE, ISNAN: ISNAN. (line 6) +* IEOR: IEOR. (line 6) +* IERRNO: IERRNO. (line 6) +* IFIX: INT. (line 6) +* IMAG: AIMAG. (line 6) +* IMAGPART: AIMAG. (line 6) +* IMPORT statement: Fortran 2003 status. (line 43) +* INCLUDE directive: Directory Options. (line 6) +* inclusion, directory search paths for: Directory Options. (line 14) +* INDEX: INDEX intrinsic. (line 6) +* INT: INT. (line 6) +* INT2: INT2. (line 6) +* INT8: INT8. (line 6) +* integer kind: SELECTED_INT_KIND. (line 6) +* intrinsic: Error and Warning Options. + (line 152) +* intrinsic Modules: Intrinsic Modules. (line 6) +* intrinsic procedures: Intrinsic Procedures. + (line 6) +* Introduction: Top. (line 6) +* IOMSG= specifier: Fortran 2003 status. (line 18) +* IOR: IOR. (line 6) +* IOSTAT, end of file: IS_IOSTAT_END. (line 6) +* IOSTAT, end of record: IS_IOSTAT_EOR. (line 6) +* IRAND: IRAND. (line 6) +* IS_IOSTAT_END: IS_IOSTAT_END. (line 6) +* IS_IOSTAT_EOR: IS_IOSTAT_EOR. (line 6) +* ISATTY: ISATTY. (line 6) +* ISHFT: ISHFT. (line 6) +* ISHFTC: ISHFTC. (line 6) +* ISIGN: SIGN. (line 6) +* ISNAN: ISNAN. (line 6) +* ISO C Bindings: Fortran 2003 status. (line 52) +* ISO_FORTRAN_ENV statement: Fortran 2003 status. (line 46) +* ITIME: ITIME. (line 6) +* KILL: KILL. (line 6) +* kind: KIND. (line 6) +* KIND: KIND. (line 6) +* kind: KIND Type Parameters. + (line 6) +* kind, character: SELECTED_CHAR_KIND. (line 6) +* kind, integer: SELECTED_INT_KIND. (line 6) +* kind, old-style: Old-style kind specifications. + (line 6) +* kind, real: SELECTED_REAL_KIND. (line 6) +* language, dialect options: Fortran Dialect Options. + (line 6) +* LBOUND: LBOUND. (line 6) +* LEADZ: LEADZ. (line 6) +* LEN: LEN. (line 6) +* LEN_TRIM: LEN_TRIM. (line 6) +* lexical comparison of strings <1>: LLT. (line 6) +* lexical comparison of strings <2>: LLE. (line 6) +* lexical comparison of strings <3>: LGT. (line 6) +* lexical comparison of strings: LGE. (line 6) +* LGAMMA: LOG_GAMMA. (line 6) +* LGE: LGE. (line 6) +* LGT: LGT. (line 6) +* libf2c calling convention: Code Gen Options. (line 25) +* limits, largest number: HUGE. (line 6) +* limits, smallest number: TINY. (line 6) +* LINK: LINK. (line 6) +* linking, static: Link Options. (line 6) +* LLE: LLE. (line 6) +* LLT: LLT. (line 6) +* LNBLNK: LNBLNK. (line 6) +* LOC: LOC. (line 6) +* location of a variable in memory: LOC. (line 6) +* LOG: LOG. (line 6) +* LOG10: LOG10. (line 6) +* LOG_GAMMA: LOG_GAMMA. (line 6) +* logarithmic function <1>: LOG10. (line 6) +* logarithmic function: LOG. (line 6) +* logarithmic function, inverse: EXP. (line 6) +* LOGICAL: LOGICAL. (line 6) +* logical and, bitwise <1>: IAND. (line 6) +* logical and, bitwise: AND. (line 6) +* logical exclusive or, bitwise <1>: XOR. (line 6) +* logical exclusive or, bitwise: IEOR. (line 6) +* logical not, bitwise: NOT. (line 6) +* logical or, bitwise <1>: OR. (line 6) +* logical or, bitwise: IOR. (line 6) +* login name: GETLOG. (line 6) +* LONG: LONG. (line 6) +* LSHIFT: LSHIFT. (line 6) +* LSTAT: LSTAT. (line 6) +* LTIME: LTIME. (line 6) +* MALLOC: MALLOC. (line 6) +* MATMUL: MATMUL. (line 6) +* matrix multiplication: MATMUL. (line 6) +* matrix, transpose: TRANSPOSE. (line 6) +* MAX: MAX. (line 6) +* MAX0: MAX. (line 6) +* MAX1: MAX. (line 6) +* MAXEXPONENT: MAXEXPONENT. (line 6) +* maximum value <1>: MAXVAL. (line 6) +* maximum value: MAX. (line 6) +* MAXLOC: MAXLOC. (line 6) +* MAXVAL: MAXVAL. (line 6) +* MCLOCK: MCLOCK. (line 6) +* MCLOCK8: MCLOCK8. (line 6) +* MERGE: MERGE. (line 6) +* messages, error: Error and Warning Options. + (line 6) +* messages, warning: Error and Warning Options. + (line 6) +* MIN: MIN. (line 6) +* MIN0: MIN. (line 6) +* MIN1: MIN. (line 6) +* MINEXPONENT: MINEXPONENT. (line 6) +* minimum value <1>: MINVAL. (line 6) +* minimum value: MIN. (line 6) +* MINLOC: MINLOC. (line 6) +* MINVAL: MINVAL. (line 6) +* MOD: MOD. (line 6) +* model representation, base: RADIX. (line 6) +* model representation, epsilon: EPSILON. (line 6) +* model representation, largest number: HUGE. (line 6) +* model representation, maximum exponent: MAXEXPONENT. (line 6) +* model representation, minimum exponent: MINEXPONENT. (line 6) +* model representation, precision: PRECISION. (line 6) +* model representation, radix: RADIX. (line 6) +* model representation, range: RANGE. (line 6) +* model representation, significant digits: DIGITS. (line 6) +* model representation, smallest number: TINY. (line 6) +* module entities: Fortran Dialect Options. + (line 71) +* module search path: Directory Options. (line 14) +* modulo: MODULO. (line 6) +* MODULO: MODULO. (line 6) +* MOVE_ALLOC: MOVE_ALLOC. (line 6) +* moving allocation: MOVE_ALLOC. (line 6) +* multiply array elements: PRODUCT. (line 6) +* MVBITS: MVBITS. (line 6) +* Namelist: Extensions to namelist. + (line 6) +* NEAREST: NEAREST. (line 6) +* NEW_LINE: NEW_LINE. (line 6) +* newline: NEW_LINE. (line 6) +* NINT: NINT. (line 6) +* NOT: NOT. (line 6) +* NULL: NULL. (line 6) +* OpenMP <1>: OpenMP. (line 6) +* OpenMP: Fortran Dialect Options. + (line 109) +* operators, unary: Unary operators. (line 6) +* options, code generation: Code Gen Options. (line 6) +* options, debugging: Debugging Options. (line 6) +* options, dialect: Fortran Dialect Options. + (line 6) +* options, directory search: Directory Options. (line 6) +* options, errors: Error and Warning Options. + (line 6) +* options, fortran dialect: Fortran Dialect Options. + (line 12) +* options, gfortran command: Invoking GNU Fortran. + (line 6) +* options, linking: Link Options. (line 6) +* options, negative forms: Invoking GNU Fortran. + (line 13) +* options, preprocessor: Preprocessing Options. + (line 6) +* options, run-time: Code Gen Options. (line 6) +* options, runtime: Runtime Options. (line 6) +* options, warnings: Error and Warning Options. + (line 6) +* OR: OR. (line 6) +* output, newline: NEW_LINE. (line 6) +* PACK: PACK. (line 6) +* paths, search: Directory Options. (line 14) +* PERROR: PERROR. (line 6) +* pointer, C address of pointers: C_F_PROCPOINTER. (line 6) +* pointer, C address of procedures: C_FUNLOC. (line 6) +* pointer, C association status: C_ASSOCIATED. (line 6) +* pointer, convert C to Fortran: C_F_POINTER. (line 6) +* pointer, cray <1>: MALLOC. (line 6) +* pointer, cray: FREE. (line 6) +* pointer, Cray: Cray pointers. (line 6) +* pointer, disassociated: NULL. (line 6) +* pointer, status <1>: NULL. (line 6) +* pointer, status: ASSOCIATED. (line 6) +* positive difference: DIM. (line 6) +* PRECISION: PRECISION. (line 6) +* Preprocessing: Preprocessing and conditional compilation. + (line 6) +* preprocessing, assertation: Preprocessing Options. + (line 114) +* preprocessing, define macros: Preprocessing Options. + (line 153) +* preprocessing, include path: Preprocessing Options. + (line 70) +* preprocessing, keep comments: Preprocessing Options. + (line 123) +* preprocessing, no linemarkers: Preprocessing Options. + (line 181) +* preprocessing, undefine macros: Preprocessing Options. + (line 187) +* preprocessor: Preprocessing Options. + (line 6) +* preprocessor, debugging: Preprocessing Options. + (line 26) +* preprocessor, disable: Preprocessing Options. + (line 13) +* preprocessor, enable: Preprocessing Options. + (line 13) +* preprocessor, include file handling: Preprocessing and conditional compilation. + (line 6) +* preprocessor, working directory: Preprocessing Options. + (line 55) +* PRESENT: PRESENT. (line 6) +* private: Fortran Dialect Options. + (line 71) +* procedure pointer, convert C to Fortran: C_LOC. (line 6) +* process id: GETPID. (line 6) +* PRODUCT: PRODUCT. (line 6) +* product, double-precision: DPROD. (line 6) +* product, matrix: MATMUL. (line 6) +* product, vector: DOT_PRODUCT. (line 6) +* program termination: EXIT. (line 6) +* program termination, with core dump: ABORT. (line 6) +* PROTECTED statement: Fortran 2003 status. (line 37) +* RADIX: RADIX. (line 6) +* RAN: RAN. (line 6) +* RAND: RAND. (line 6) +* random number generation <1>: RANDOM_NUMBER. (line 6) +* random number generation <2>: RAND. (line 6) +* random number generation <3>: RAN. (line 6) +* random number generation: IRAND. (line 6) +* random number generation, seeding <1>: SRAND. (line 6) +* random number generation, seeding: RANDOM_SEED. (line 6) +* RANDOM_NUMBER: RANDOM_NUMBER. (line 6) +* RANDOM_SEED: RANDOM_SEED. (line 6) +* RANGE: RANGE. (line 6) +* range checking: Code Gen Options. (line 130) +* read character, stream mode <1>: FGETC. (line 6) +* read character, stream mode: FGET. (line 6) +* REAL: REAL. (line 6) +* real kind: SELECTED_REAL_KIND. (line 6) +* real number, exponent: EXPONENT. (line 6) +* real number, fraction: FRACTION. (line 6) +* real number, nearest different: NEAREST. (line 6) +* real number, relative spacing <1>: SPACING. (line 6) +* real number, relative spacing: RRSPACING. (line 6) +* real number, scale: SCALE. (line 6) +* real number, set exponent: SET_EXPONENT. (line 6) +* REALPART: REAL. (line 6) +* RECORD: STRUCTURE and RECORD. + (line 6) +* remainder: MOD. (line 6) +* RENAME: RENAME. (line 6) +* repacking arrays: Code Gen Options. (line 190) +* REPEAT: REPEAT. (line 6) +* RESHAPE: RESHAPE. (line 6) +* root: SQRT. (line 6) +* rounding, ceiling <1>: CEILING. (line 6) +* rounding, ceiling: ANINT. (line 6) +* rounding, floor <1>: FLOOR. (line 6) +* rounding, floor: AINT. (line 6) +* rounding, nearest whole number: NINT. (line 6) +* RRSPACING: RRSPACING. (line 6) +* RSHIFT: RSHIFT. (line 6) +* SAVE statement: Code Gen Options. (line 15) +* SCALE: SCALE. (line 6) +* SCAN: SCAN. (line 6) +* search path: Directory Options. (line 6) +* search paths, for included files: Directory Options. (line 14) +* SECNDS: SECNDS. (line 6) +* SECOND: SECOND. (line 6) +* seeding a random number generator <1>: SRAND. (line 6) +* seeding a random number generator: RANDOM_SEED. (line 6) +* SELECTED_CHAR_KIND: SELECTED_CHAR_KIND. (line 6) +* SELECTED_INT_KIND: SELECTED_INT_KIND. (line 6) +* SELECTED_REAL_KIND: SELECTED_REAL_KIND. (line 6) +* SET_EXPONENT: SET_EXPONENT. (line 6) +* SHAPE: SHAPE. (line 6) +* SHORT: INT2. (line 6) +* SIGN: SIGN. (line 6) +* sign copying: SIGN. (line 6) +* SIGNAL: SIGNAL. (line 6) +* SIN: SIN. (line 6) +* sine: SIN. (line 6) +* sine, hyperbolic: SINH. (line 6) +* sine, hyperbolic, inverse: ASINH. (line 6) +* sine, inverse: ASIN. (line 6) +* SINH: SINH. (line 6) +* SIZE: SIZE. (line 6) +* size of a variable, in bits: BIT_SIZE. (line 6) +* size of an expression <1>: SIZEOF. (line 6) +* size of an expression: C_SIZEOF. (line 6) +* SIZEOF: SIZEOF. (line 6) +* SLEEP: SLEEP. (line 6) +* SNGL: SNGL. (line 6) +* SPACING: SPACING. (line 6) +* SPREAD: SPREAD. (line 6) +* SQRT: SQRT. (line 6) +* square-root: SQRT. (line 6) +* SRAND: SRAND. (line 6) +* Standards: Standards. (line 6) +* STAT: STAT. (line 6) +* statement, ENUM: Fortran 2003 status. (line 20) +* statement, ENUMERATOR: Fortran 2003 status. (line 20) +* statement, FLUSH: Fortran 2003 status. (line 16) +* statement, IMPORT: Fortran 2003 status. (line 43) +* statement, ISO_FORTRAN_ENV: Fortran 2003 status. (line 46) +* statement, PROTECTED: Fortran 2003 status. (line 37) +* statement, SAVE: Code Gen Options. (line 15) +* statement, USE, INTRINSIC: Fortran 2003 status. (line 46) +* statement, VALUE: Fortran 2003 status. (line 39) +* statement, VOLATILE: Fortran 2003 status. (line 41) +* STREAM I/O: Fortran 2003 status. (line 32) +* stream mode, read character <1>: FGETC. (line 6) +* stream mode, read character: FGET. (line 6) +* stream mode, write character <1>: FPUTC. (line 6) +* stream mode, write character: FPUT. (line 6) +* string, adjust left: ADJUSTL. (line 6) +* string, adjust right: ADJUSTR. (line 6) +* string, comparison <1>: LLT. (line 6) +* string, comparison <2>: LLE. (line 6) +* string, comparison <3>: LGT. (line 6) +* string, comparison: LGE. (line 6) +* string, concatenate: REPEAT. (line 6) +* string, find missing set: VERIFY. (line 6) +* string, find non-blank character: LNBLNK. (line 6) +* string, find subset: SCAN. (line 6) +* string, find substring: INDEX intrinsic. (line 6) +* string, length: LEN. (line 6) +* string, length, without trailing whitespace: LEN_TRIM. (line 6) +* string, remove trailing whitespace: TRIM. (line 6) +* string, repeat: REPEAT. (line 6) +* STRUCTURE: STRUCTURE and RECORD. + (line 6) +* structure packing: Code Gen Options. (line 184) +* subscript checking: Code Gen Options. (line 130) +* substring position: INDEX intrinsic. (line 6) +* SUM: SUM. (line 6) +* sum array elements: SUM. (line 6) +* suppressing warnings: Error and Warning Options. + (line 6) +* symbol names: Fortran Dialect Options. + (line 56) +* symbol names, transforming: Code Gen Options. (line 54) +* symbol names, underscores: Code Gen Options. (line 54) +* SYMLNK: SYMLNK. (line 6) +* syntax checking: Error and Warning Options. + (line 33) +* SYSTEM: SYSTEM. (line 6) +* system, error handling <1>: PERROR. (line 6) +* system, error handling <2>: IERRNO. (line 6) +* system, error handling: GERROR. (line 6) +* system, group id: GETGID. (line 6) +* system, host name: HOSTNM. (line 6) +* system, login name: GETLOG. (line 6) +* system, process id: GETPID. (line 6) +* system, signal handling: SIGNAL. (line 6) +* system, system call: SYSTEM. (line 6) +* system, terminal <1>: TTYNAM. (line 6) +* system, terminal: ISATTY. (line 6) +* system, user id: GETUID. (line 6) +* system, working directory <1>: GETCWD. (line 6) +* system, working directory: CHDIR. (line 6) +* SYSTEM_CLOCK: SYSTEM_CLOCK. (line 6) +* tabulators: Error and Warning Options. + (line 140) +* TAN: TAN. (line 6) +* tangent: TAN. (line 6) +* tangent, hyperbolic: TANH. (line 6) +* tangent, hyperbolic, inverse: ATANH. (line 6) +* tangent, inverse <1>: ATAN2. (line 6) +* tangent, inverse: ATAN. (line 6) +* TANH: TANH. (line 6) +* terminate program: EXIT. (line 6) +* terminate program, with core dump: ABORT. (line 6) +* TIME: TIME. (line 6) +* time, clock ticks <1>: SYSTEM_CLOCK. (line 6) +* time, clock ticks <2>: MCLOCK8. (line 6) +* time, clock ticks: MCLOCK. (line 6) +* time, conversion to GMT info: GMTIME. (line 6) +* time, conversion to local time info: LTIME. (line 6) +* time, conversion to string: CTIME. (line 6) +* time, current <1>: TIME8. (line 6) +* time, current <2>: TIME. (line 6) +* time, current <3>: ITIME. (line 6) +* time, current <4>: FDATE. (line 6) +* time, current: DATE_AND_TIME. (line 6) +* time, elapsed <1>: SECOND. (line 6) +* time, elapsed <2>: SECNDS. (line 6) +* time, elapsed <3>: ETIME. (line 6) +* time, elapsed <4>: DTIME. (line 6) +* time, elapsed: CPU_TIME. (line 6) +* TIME8: TIME8. (line 6) +* TINY: TINY. (line 6) +* TR 15581: Fortran 2003 status. (line 25) +* trace: Debugging Options. (line 31) +* TRAILZ: TRAILZ. (line 6) +* TRANSFER: TRANSFER. (line 6) +* transforming symbol names: Code Gen Options. (line 54) +* transpose: TRANSPOSE. (line 6) +* TRANSPOSE: TRANSPOSE. (line 6) +* trigonometric function, cosine: COS. (line 6) +* trigonometric function, cosine, inverse: ACOS. (line 6) +* trigonometric function, sine: SIN. (line 6) +* trigonometric function, sine, inverse: ASIN. (line 6) +* trigonometric function, tangent: TAN. (line 6) +* trigonometric function, tangent, inverse <1>: ATAN2. (line 6) +* trigonometric function, tangent, inverse: ATAN. (line 6) +* TRIM: TRIM. (line 6) +* TTYNAM: TTYNAM. (line 6) +* type cast: TRANSFER. (line 6) +* UBOUND: UBOUND. (line 6) +* UMASK: UMASK. (line 6) +* underflow: Error and Warning Options. + (line 148) +* underscore: Code Gen Options. (line 54) +* UNLINK: UNLINK. (line 6) +* UNPACK: UNPACK. (line 6) +* unused parameter: Error and Warning Options. + (line 158) +* USE, INTRINSIC statement: Fortran 2003 status. (line 46) +* user id: GETUID. (line 6) +* VALUE statement: Fortran 2003 status. (line 39) +* vector product: DOT_PRODUCT. (line 6) +* VERIFY: VERIFY. (line 6) +* VOLATILE statement: Fortran 2003 status. (line 41) +* warnings, aliasing: Error and Warning Options. + (line 68) +* warnings, alignment of COMMON blocks: Error and Warning Options. + (line 165) +* warnings, all: Error and Warning Options. + (line 61) +* warnings, ampersand: Error and Warning Options. + (line 85) +* warnings, array temporaries: Error and Warning Options. + (line 93) +* warnings, character truncation: Error and Warning Options. + (line 98) +* warnings, conversion: Error and Warning Options. + (line 104) +* warnings, implicit interface: Error and Warning Options. + (line 107) +* warnings, intrinsic: Error and Warning Options. + (line 152) +* warnings, intrinsics of other standards: Error and Warning Options. + (line 113) +* warnings, line truncation: Error and Warning Options. + (line 101) +* warnings, non-standard intrinsics: Error and Warning Options. + (line 113) +* warnings, suppressing: Error and Warning Options. + (line 6) +* warnings, suspicious code: Error and Warning Options. + (line 120) +* warnings, tabs: Error and Warning Options. + (line 140) +* warnings, to errors: Error and Warning Options. + (line 171) +* warnings, underflow: Error and Warning Options. + (line 148) +* warnings, unused parameter: Error and Warning Options. + (line 158) +* write character, stream mode <1>: FPUTC. (line 6) +* write character, stream mode: FPUT. (line 6) +* XOR: XOR. (line 6) +* ZABS: ABS. (line 6) +* ZCOS: COS. (line 6) +* zero bits <1>: TRAILZ. (line 6) +* zero bits: LEADZ. (line 6) +* ZEXP: EXP. (line 6) +* ZLOG: LOG. (line 6) +* ZSIN: SIN. (line 6) +* ZSQRT: SQRT. (line 6) + + + +Tag Table: +Node: Top1996 +Node: Introduction3311 +Node: About GNU Fortran4058 +Node: GNU Fortran and GCC8086 +Node: Preprocessing and conditional compilation10198 +Node: GNU Fortran and G7711839 +Node: Project Status12412 +Node: Standards14927 +Node: Invoking GNU Fortran16138 +Node: Option Summary17861 +Node: Fortran Dialect Options21349 +Node: Preprocessing Options28159 +Node: Error and Warning Options36285 +Node: Debugging Options43712 +Node: Directory Options45875 +Node: Link Options47390 +Node: Runtime Options48014 +Node: Code Gen Options50094 +Node: Environment Variables62319 +Node: Runtime62924 +Node: GFORTRAN_STDIN_UNIT64152 +Node: GFORTRAN_STDOUT_UNIT64519 +Node: GFORTRAN_STDERR_UNIT64920 +Node: GFORTRAN_USE_STDERR65318 +Node: GFORTRAN_TMPDIR65763 +Node: GFORTRAN_UNBUFFERED_ALL66204 +Node: GFORTRAN_UNBUFFERED_PRECONNECTED66727 +Node: GFORTRAN_SHOW_LOCUS67369 +Node: GFORTRAN_OPTIONAL_PLUS67863 +Node: GFORTRAN_DEFAULT_RECL68338 +Node: GFORTRAN_LIST_SEPARATOR68829 +Node: GFORTRAN_CONVERT_UNIT69438 +Node: GFORTRAN_ERROR_DUMPCORE72300 +Node: GFORTRAN_ERROR_BACKTRACE72847 +Node: Fortran 2003 and 2008 status73398 +Node: Fortran 2003 status73638 +Node: Fortran 2008 status75329 +Node: Compiler Characteristics76298 +Node: KIND Type Parameters76636 +Node: Extensions77563 +Node: Extensions implemented in GNU Fortran78162 +Node: Old-style kind specifications79496 +Node: Old-style variable initialization80602 +Node: Extensions to namelist81914 +Node: X format descriptor without count field83910 +Node: Commas in FORMAT specifications84437 +Node: Missing period in FORMAT specifications84954 +Node: I/O item lists85516 +Node: BOZ literal constants85905 +Node: Real array indices88474 +Node: Unary operators88771 +Node: Implicitly convert LOGICAL and INTEGER values89185 +Node: Hollerith constants support90145 +Node: Cray pointers91917 +Node: CONVERT specifier97327 +Node: OpenMP99325 +Node: Argument list functions101580 +Node: Extensions not implemented in GNU Fortran103174 +Node: STRUCTURE and RECORD104026 +Node: ENCODE and DECODE statements106082 +Node: Intrinsic Procedures107400 +Node: Introduction to Intrinsics121090 +Node: ABORT123442 +Node: ABS124199 +Node: ACCESS125701 +Node: ACHAR127622 +Node: ACOS128823 +Node: ACOSH129821 +Node: ADJUSTL130698 +Node: ADJUSTR131639 +Node: AIMAG132586 +Node: AINT133906 +Node: ALARM135378 +Node: ALL137012 +Node: ALLOCATED138930 +Node: AND139811 +Node: ANINT141108 +Node: ANY142471 +Node: ASIN144401 +Node: ASINH145413 +Node: ASSOCIATED146295 +Node: ATAN149300 +Node: ATAN2150189 +Node: ATANH151533 +Node: BESSEL_J0152413 +Node: BESSEL_J1153457 +Node: BESSEL_JN154509 +Node: BESSEL_Y0155676 +Node: BESSEL_Y1156676 +Node: BESSEL_YN157676 +Node: BIT_SIZE158893 +Node: BTEST159722 +Node: C_ASSOCIATED160610 +Node: C_FUNLOC161819 +Node: C_F_PROCPOINTER163188 +Node: C_F_POINTER164817 +Node: C_LOC166235 +Node: C_SIZEOF167352 +Node: CEILING168705 +Node: CHAR169710 +Node: CHDIR170774 +Node: CHMOD171942 +Node: CMPLX173737 +Node: COMMAND_ARGUMENT_COUNT175201 +Node: COMPLEX176108 +Node: CONJG177251 +Node: COS178261 +Node: COSH179532 +Node: COUNT180501 +Node: CPU_TIME182357 +Node: CSHIFT183711 +Node: CTIME185367 +Node: DATE_AND_TIME186626 +Node: DBLE189087 +Node: DCMPLX189911 +Node: DFLOAT191105 +Node: DIGITS191799 +Node: DIM192765 +Node: DOT_PRODUCT193908 +Node: DPROD195564 +Node: DREAL196290 +Node: DTIME196954 +Node: EOSHIFT199760 +Node: EPSILON201833 +Node: ERF202559 +Node: ERFC203333 +Node: ERFC_SCALED204137 +Node: ETIME204829 +Node: EXIT207060 +Node: EXP207919 +Node: EXPONENT209077 +Node: FDATE209827 +Node: FLOAT211102 +Node: FGET211816 +Node: FGETC213610 +Node: FLOOR215378 +Node: FLUSH216362 +Node: FNUM217000 +Node: FPUT217722 +Node: FPUTC219323 +Node: FRACTION221063 +Node: FREE221964 +Node: FSEEK222801 +Node: FSTAT225095 +Node: FTELL226135 +Node: GAMMA227113 +Node: GERROR228154 +Node: GETARG228873 +Node: GET_COMMAND230637 +Node: GET_COMMAND_ARGUMENT231583 +Node: GETCWD233551 +Node: GETENV234497 +Node: GET_ENVIRONMENT_VARIABLE235719 +Node: GETGID237419 +Node: GETLOG237954 +Node: GETPID238812 +Node: GETUID239540 +Node: GMTIME240054 +Node: HOSTNM241543 +Node: HUGE242459 +Node: HYPOT243178 +Node: IACHAR243998 +Node: IAND245178 +Node: IARGC246165 +Node: IBCLR247188 +Node: IBITS247849 +Node: IBSET248764 +Node: ICHAR249420 +Node: IDATE251401 +Node: IEOR252428 +Node: IERRNO253304 +Node: INDEX intrinsic253859 +Node: INT255205 +Node: INT2256792 +Node: INT8257557 +Node: IOR258269 +Node: IRAND259119 +Node: IS_IOSTAT_END260471 +Node: IS_IOSTAT_EOR261566 +Node: ISATTY262691 +Node: ISHFT263474 +Node: ISHFTC264454 +Node: ISNAN265670 +Node: ITIME266418 +Node: KILL267443 +Node: KIND268316 +Node: LBOUND269161 +Node: LEADZ270473 +Node: LEN271277 +Node: LEN_TRIM272368 +Node: LGE273356 +Node: LGT274669 +Node: LINK275946 +Node: LLE276981 +Node: LLT278285 +Node: LNBLNK279555 +Node: LOC280331 +Node: LOG281062 +Node: LOG10282353 +Node: LOG_GAMMA283325 +Node: LOGICAL284413 +Node: LONG285217 +Node: LSHIFT285973 +Node: LSTAT286927 +Node: LTIME288081 +Node: MALLOC289496 +Node: MATMUL290956 +Node: MAX292046 +Node: MAXEXPONENT293545 +Node: MAXLOC294361 +Node: MAXVAL296410 +Node: MCLOCK298073 +Node: MCLOCK8299076 +Node: MERGE300290 +Node: MIN301032 +Node: MINEXPONENT302528 +Node: MINLOC303158 +Node: MINVAL305207 +Node: MOD306889 +Node: MODULO308381 +Node: MOVE_ALLOC309595 +Node: MVBITS310619 +Node: NEAREST311678 +Node: NEW_LINE312801 +Node: NINT313572 +Node: NOT314840 +Node: NULL315423 +Node: OR316321 +Node: PACK317599 +Node: PERROR319591 +Node: PRECISION320213 +Node: PRESENT321039 +Node: PRODUCT322145 +Node: RADIX323670 +Node: RAN324447 +Node: RAND324903 +Node: RANDOM_NUMBER326238 +Node: RANDOM_SEED327956 +Node: RANGE329839 +Node: REAL330463 +Node: RENAME331905 +Node: REPEAT332924 +Node: RESHAPE333650 +Node: RRSPACING335119 +Node: RSHIFT335812 +Node: SCALE336774 +Node: SCAN337548 +Node: SECNDS339098 +Node: SECOND340186 +Node: SELECTED_CHAR_KIND341062 +Node: SELECTED_INT_KIND342059 +Node: SELECTED_REAL_KIND343234 +Node: SET_EXPONENT345173 +Node: SHAPE346169 +Node: SIGN347282 +Node: SIGNAL348365 +Node: SIN349862 +Node: SINH350904 +Node: SIZE351716 +Node: SIZEOF353024 +Node: SLEEP354318 +Node: SNGL354875 +Node: SPACING355546 +Node: SPREAD356558 +Node: SQRT357703 +Node: SRAND358942 +Node: STAT360110 +Node: SUM363222 +Node: SYMLNK364691 +Node: SYSTEM365823 +Node: SYSTEM_CLOCK366771 +Node: TAN368115 +Node: TANH368951 +Node: TIME369818 +Node: TIME8370922 +Node: TINY372059 +Node: TRAILZ372659 +Node: TRANSFER373444 +Node: TRANSPOSE375478 +Node: TRIM376165 +Node: TTYNAM377022 +Node: UBOUND377937 +Node: UMASK379306 +Node: UNLINK379861 +Node: UNPACK380838 +Node: VERIFY382126 +Node: XOR383842 +Node: Intrinsic Modules385150 +Node: Contributing390941 +Node: Contributors391793 +Node: Projects393416 +Node: Proposed Extensions394219 +Node: Copying396270 +Node: GNU Free Documentation License433834 +Node: Funding456246 +Node: Option Index458771 +Node: Keyword Index470653 + +End Tag Table diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortran.texi b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortran.texi new file mode 100644 index 0000000000..af1d296108 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortran.texi @@ -0,0 +1,2040 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename gfortran.info +@set copyrights-gfortran 1999-2008 + +@include gcc-common.texi + +@settitle The GNU Fortran Compiler + +@c Create a separate index for command line options +@defcodeindex op +@c Merge the standard indexes into a single one. +@syncodeindex fn cp +@syncodeindex vr cp +@syncodeindex ky cp +@syncodeindex pg cp +@syncodeindex tp cp + +@c TODO: The following "Part" definitions are included here temporarily +@c until they are incorporated into the official Texinfo distribution. +@c They borrow heavily from Texinfo's \unnchapentry definitions. + +@tex +\gdef\part#1#2{% + \pchapsepmacro + \gdef\thischapter{} + \begingroup + \vglue\titlepagetopglue + \titlefonts \rm + \leftline{Part #1:@* #2} + \vskip4pt \hrule height 4pt width \hsize \vskip4pt + \endgroup + \writetocentry{part}{#2}{#1} +} +\gdef\blankpart{% + \writetocentry{blankpart}{}{} +} +% Part TOC-entry definition for summary contents. +\gdef\dosmallpartentry#1#2#3#4{% + \vskip .5\baselineskip plus.2\baselineskip + \begingroup + \let\rm=\bf \rm + \tocentry{Part #2: #1}{\doshortpageno\bgroup#4\egroup} + \endgroup +} +\gdef\dosmallblankpartentry#1#2#3#4{% + \vskip .5\baselineskip plus.2\baselineskip +} +% Part TOC-entry definition for regular contents. This has to be +% equated to an existing entry to not cause problems when the PDF +% outline is created. +\gdef\dopartentry#1#2#3#4{% + \unnchapentry{Part #2: #1}{}{#3}{#4} +} +\gdef\doblankpartentry#1#2#3#4{} +@end tex + +@c %**end of header + +@c Use with @@smallbook. + +@c %** start of document + +@c Cause even numbered pages to be printed on the left hand side of +@c the page and odd numbered pages to be printed on the right hand +@c side of the page. Using this, you can print on both sides of a +@c sheet of paper and have the text on the same part of the sheet. + +@c The text on right hand pages is pushed towards the right hand +@c margin and the text on left hand pages is pushed toward the left +@c hand margin. +@c (To provide the reverse effect, set bindingoffset to -0.75in.) + +@c @tex +@c \global\bindingoffset=0.75in +@c \global\normaloffset =0.75in +@c @end tex + +@copying +Copyright @copyright{} @value{copyrights-gfortran} Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with the +Invariant Sections being ``Funding Free Software'', the Front-Cover +Texts being (a) (see below), and with the Back-Cover Texts being (b) +(see below). A copy of the license is included in the section entitled +``GNU Free Documentation License''. + +(a) The FSF's Front-Cover Text is: + + A GNU Manual + +(b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU + software. Copies published by the Free Software Foundation raise + funds for GNU development. +@end copying + +@ifinfo +@dircategory Software development +@direntry +* gfortran: (gfortran). The GNU Fortran Compiler. +@end direntry +This file documents the use and the internals of +the GNU Fortran compiler, (@command{gfortran}). + +Published by the Free Software Foundation +51 Franklin Street, Fifth Floor +Boston, MA 02110-1301 USA + +@insertcopying +@end ifinfo + + +@setchapternewpage odd +@titlepage +@title Using GNU Fortran +@versionsubtitle +@author The @t{gfortran} team +@page +@vskip 0pt plus 1filll +Published by the Free Software Foundation@* +51 Franklin Street, Fifth Floor@* +Boston, MA 02110-1301, USA@* +@c Last printed ??ber, 19??.@* +@c Printed copies are available for $? each.@* +@c ISBN ??? +@sp 1 +@insertcopying +@end titlepage + +@c TODO: The following "Part" definitions are included here temporarily +@c until they are incorporated into the official Texinfo distribution. + +@tex +\global\let\partentry=\dosmallpartentry +\global\let\blankpartentry=\dosmallblankpartentry +@end tex +@summarycontents + +@tex +\global\let\partentry=\dopartentry +\global\let\blankpartentry=\doblankpartentry +@end tex +@contents + +@page + +@c --------------------------------------------------------------------- +@c TexInfo table of contents. +@c --------------------------------------------------------------------- + +@ifnottex +@node Top +@top Introduction +@cindex Introduction + +This manual documents the use of @command{gfortran}, +the GNU Fortran compiler. You can find in this manual how to invoke +@command{gfortran}, as well as its features and incompatibilities. + +@ifset DEVELOPMENT +@emph{Warning:} This document, and the compiler it describes, are still +under development. While efforts are made to keep it up-to-date, it might +not accurately reflect the status of the most recent GNU Fortran compiler. +@end ifset + +@comment +@comment When you add a new menu item, please keep the right hand +@comment aligned to the same column. Do not use tabs. This provides +@comment better formatting. +@comment +@menu +* Introduction:: + +Part I: Invoking GNU Fortran +* Invoking GNU Fortran:: Command options supported by @command{gfortran}. +* Runtime:: Influencing runtime behavior with environment variables. + +Part II: Language Reference +* Fortran 2003 and 2008 status:: Fortran 2003 and 2008 features supported by GNU Fortran. +* Compiler Characteristics:: KIND type parameters supported. +* Extensions:: Language extensions implemented by GNU Fortran. +* Intrinsic Procedures:: Intrinsic procedures supported by GNU Fortran. +* Intrinsic Modules:: Intrinsic modules supported by GNU Fortran. + +* Contributing:: How you can help. +* Copying:: GNU General Public License says + how you can copy and share GNU Fortran. +* GNU Free Documentation License:: + How you can copy and share this manual. +* Funding:: How to help assure continued work for free software. +* Option Index:: Index of command line options +* Keyword Index:: Index of concepts +@end menu +@end ifnottex + +@c --------------------------------------------------------------------- +@c Introduction +@c --------------------------------------------------------------------- + +@node Introduction +@chapter Introduction + +@c The following duplicates the text on the TexInfo table of contents. +@iftex +This manual documents the use of @command{gfortran}, the GNU Fortran +compiler. You can find in this manual how to invoke @command{gfortran}, +as well as its features and incompatibilities. + +@ifset DEVELOPMENT +@emph{Warning:} This document, and the compiler it describes, are still +under development. While efforts are made to keep it up-to-date, it +might not accurately reflect the status of the most recent GNU Fortran +compiler. +@end ifset +@end iftex + +The GNU Fortran compiler front end was +designed initially as a free replacement for, +or alternative to, the unix @command{f95} command; +@command{gfortran} is the command you'll use to invoke the compiler. + +@menu +* About GNU Fortran:: What you should know about the GNU Fortran compiler. +* GNU Fortran and GCC:: You can compile Fortran, C, or other programs. +* Preprocessing and conditional compilation:: The Fortran preprocessor +* GNU Fortran and G77:: Why we chose to start from scratch. +* Project Status:: Status of GNU Fortran, roadmap, proposed extensions. +* Standards:: Standards supported by GNU Fortran. +@end menu + + +@c --------------------------------------------------------------------- +@c About GNU Fortran +@c --------------------------------------------------------------------- + +@node About GNU Fortran +@section About GNU Fortran + +The GNU Fortran compiler is still in an early state of development. +It can generate code for most constructs and expressions, +but much work remains to be done. + +When the GNU Fortran compiler is finished, +it will do everything you expect from any decent compiler: + +@itemize @bullet +@item +Read a user's program, +stored in a file and containing instructions written +in Fortran 77, Fortran 90, Fortran 95, Fortran 2003 or Fortran 2008. +This file contains @dfn{source code}. + +@item +Translate the user's program into instructions a computer +can carry out more quickly than it takes to translate the +instructions in the first +place. The result after compilation of a program is +@dfn{machine code}, +code designed to be efficiently translated and processed +by a machine such as your computer. +Humans usually aren't as good writing machine code +as they are at writing Fortran (or C++, Ada, or Java), +because it is easy to make tiny mistakes writing machine code. + +@item +Provide the user with information about the reasons why +the compiler is unable to create a binary from the source code. +Usually this will be the case if the source code is flawed. +The Fortran 90 standard requires that the compiler can point out +mistakes to the user. +An incorrect usage of the language causes an @dfn{error message}. + +The compiler will also attempt to diagnose cases where the +user's program contains a correct usage of the language, +but instructs the computer to do something questionable. +This kind of diagnostics message is called a @dfn{warning message}. + +@item +Provide optional information about the translation passes +from the source code to machine code. +This can help a user of the compiler to find the cause of +certain bugs which may not be obvious in the source code, +but may be more easily found at a lower level compiler output. +It also helps developers to find bugs in the compiler itself. + +@item +Provide information in the generated machine code that can +make it easier to find bugs in the program (using a debugging tool, +called a @dfn{debugger}, such as the GNU Debugger @command{gdb}). + +@item +Locate and gather machine code already generated to +perform actions requested by statements in the user's program. +This machine code is organized into @dfn{modules} and is located +and @dfn{linked} to the user program. +@end itemize + +The GNU Fortran compiler consists of several components: + +@itemize @bullet +@item +A version of the @command{gcc} command +(which also might be installed as the system's @command{cc} command) +that also understands and accepts Fortran source code. +The @command{gcc} command is the @dfn{driver} program for +all the languages in the GNU Compiler Collection (GCC); +With @command{gcc}, +you can compile the source code of any language for +which a front end is available in GCC. + +@item +The @command{gfortran} command itself, +which also might be installed as the +system's @command{f95} command. +@command{gfortran} is just another driver program, +but specifically for the Fortran compiler only. +The difference with @command{gcc} is that @command{gfortran} +will automatically link the correct libraries to your program. + +@item +A collection of run-time libraries. +These libraries contain the machine code needed to support +capabilities of the Fortran language that are not directly +provided by the machine code generated by the +@command{gfortran} compilation phase, +such as intrinsic functions and subroutines, +and routines for interaction with files and the operating system. +@c and mechanisms to spawn, +@c unleash and pause threads in parallelized code. + +@item +The Fortran compiler itself, (@command{f951}). +This is the GNU Fortran parser and code generator, +linked to and interfaced with the GCC backend library. +@command{f951} ``translates'' the source code to +assembler code. You would typically not use this +program directly; +instead, the @command{gcc} or @command{gfortran} driver +programs will call it for you. +@end itemize + + +@c --------------------------------------------------------------------- +@c GNU Fortran and GCC +@c --------------------------------------------------------------------- + +@node GNU Fortran and GCC +@section GNU Fortran and GCC +@cindex GNU Compiler Collection +@cindex GCC + +GNU Fortran is a part of GCC, the @dfn{GNU Compiler Collection}. GCC +consists of a collection of front ends for various languages, which +translate the source code into a language-independent form called +@dfn{GENERIC}. This is then processed by a common middle end which +provides optimization, and then passed to one of a collection of back +ends which generate code for different computer architectures and +operating systems. + +Functionally, this is implemented with a driver program (@command{gcc}) +which provides the command-line interface for the compiler. It calls +the relevant compiler front-end program (e.g., @command{f951} for +Fortran) for each file in the source code, and then calls the assembler +and linker as appropriate to produce the compiled output. In a copy of +GCC which has been compiled with Fortran language support enabled, +@command{gcc} will recognize files with @file{.f}, @file{.for}, @file{.ftn}, +@file{.f90}, @file{.f95}, @file{.f03} and @file{.f08} extensions as +Fortran source code, and compile it accordingly. A @command{gfortran} +driver program is also provided, which is identical to @command{gcc} +except that it automatically links the Fortran runtime libraries into the +compiled program. + +Source files with @file{.f}, @file{.for}, @file{.fpp}, @file{.ftn}, @file{.F}, +@file{.FOR}, @file{.FPP}, and @file{.FTN} extensions are treated as fixed form. +Source files with @file{.f90}, @file{.f95}, @file{.f03}, @file{.f08}, +@file{.F90}, @file{.F95}, @file{.F03} and @file{.F08} extensions are +treated as free form. The capitalized versions of either form are run +through preprocessing. Source files with the lower case @file{.fpp} +extension are also run through preprocessing. + +This manual specifically documents the Fortran front end, which handles +the programming language's syntax and semantics. The aspects of GCC +which relate to the optimization passes and the back-end code generation +are documented in the GCC manual; see +@ref{Top,,Introduction,gcc,Using the GNU Compiler Collection (GCC)}. +The two manuals together provide a complete reference for the GNU +Fortran compiler. + + +@c --------------------------------------------------------------------- +@c Preprocessing and conditional compilation +@c --------------------------------------------------------------------- + +@node Preprocessing and conditional compilation +@section Preprocessing and conditional compilation +@cindex CPP +@cindex FPP +@cindex Conditional compilation +@cindex Preprocessing +@cindex preprocessor, include file handling + +Many Fortran compilers including GNU Fortran allow passing the source code +through a C preprocessor (CPP; sometimes also called the Fortran preprocessor, +FPP) to allow for conditional compilation. In the case of GNU Fortran, +this is the GNU C Preprocessor in the traditional mode. On systems with +case-preserving file names, the preprocessor is automatically invoked if the +filename extension is @code{.F}, @code{.FOR}, @code{.FTN}, @code{.fpp}, +@code{.FPP}, @code{.F90}, @code{.F95}, @code{.F03} or @code{.F08}. To manually +invoke the preprocessor on any file, use @option{-cpp}, to disable +preprocessing on files where the preprocessor is run automatically, use +@option{-nocpp}. + +If a preprocessed file includes another file with the Fortran @code{INCLUDE} +statement, the included file is not preprocessed. To preprocess included +files, use the equivalent preprocessor statement @code{#include}. + +If GNU Fortran invokes the preprocessor, @code{__GFORTRAN__} +is defined and @code{__GNUC__}, @code{__GNUC_MINOR__} and +@code{__GNUC_PATCHLEVEL__} can be used to determine the version of the +compiler. See @ref{Top,,Overview,cpp,The C Preprocessor} for details. + +While CPP is the de-facto standard for preprocessing Fortran code, +Part 3 of the Fortran 95 standard (ISO/IEC 1539-3:1998) defines +Conditional Compilation, which is not widely used and not directly +supported by the GNU Fortran compiler. You can use the program coco +to preprocess such files (@uref{http://users.erols.com/dnagle/coco.html}). + + +@c --------------------------------------------------------------------- +@c GNU Fortran and G77 +@c --------------------------------------------------------------------- + +@node GNU Fortran and G77 +@section GNU Fortran and G77 +@cindex Fortran 77 +@cindex @command{g77} + +The GNU Fortran compiler is the successor to @command{g77}, the Fortran +77 front end included in GCC prior to version 4. It is an entirely new +program that has been designed to provide Fortran 95 support and +extensibility for future Fortran language standards, as well as providing +backwards compatibility for Fortran 77 and nearly all of the GNU language +extensions supported by @command{g77}. + + +@c --------------------------------------------------------------------- +@c Project Status +@c --------------------------------------------------------------------- + +@node Project Status +@section Project Status + +@quotation +As soon as @command{gfortran} can parse all of the statements correctly, +it will be in the ``larva'' state. +When we generate code, the ``puppa'' state. +When @command{gfortran} is done, +we'll see if it will be a beautiful butterfly, +or just a big bug.... + +--Andy Vaught, April 2000 +@end quotation + +The start of the GNU Fortran 95 project was announced on +the GCC homepage in March 18, 2000 +(even though Andy had already been working on it for a while, +of course). + +The GNU Fortran compiler is able to compile nearly all +standard-compliant Fortran 95, Fortran 90, and Fortran 77 programs, +including a number of standard and non-standard extensions, and can be +used on real-world programs. In particular, the supported extensions +include OpenMP, Cray-style pointers, and several Fortran 2003 and Fortran +2008 features such as enumeration, stream I/O, and some of the +enhancements to allocatable array support from TR 15581. However, it is +still under development and has a few remaining rough edges. + +At present, the GNU Fortran compiler passes the +@uref{http://www.fortran-2000.com/ArnaudRecipes/fcvs21_f95.html, +NIST Fortran 77 Test Suite}, and produces acceptable results on the +@uref{http://www.netlib.org/lapack/faq.html#1.21, LAPACK Test Suite}. +It also provides respectable performance on +the @uref{http://www.polyhedron.com/pb05.html, Polyhedron Fortran +compiler benchmarks} and the +@uref{http://www.llnl.gov/asci_benchmarks/asci/limited/lfk/README.html, +Livermore Fortran Kernels test}. It has been used to compile a number of +large real-world programs, including +@uref{http://mysite.verizon.net/serveall/moene.pdf, the HIRLAM +weather-forecasting code} and +@uref{http://www.theochem.uwa.edu.au/tonto/, the Tonto quantum +chemistry package}; see @url{http://gcc.gnu.org/wiki/GfortranApps} for an +extended list. + +Among other things, the GNU Fortran compiler is intended as a replacement +for G77. At this point, nearly all programs that could be compiled with +G77 can be compiled with GNU Fortran, although there are a few minor known +regressions. + +The primary work remaining to be done on GNU Fortran falls into three +categories: bug fixing (primarily regarding the treatment of invalid code +and providing useful error messages), improving the compiler optimizations +and the performance of compiled code, and extending the compiler to support +future standards---in particular, Fortran 2003. + + +@c --------------------------------------------------------------------- +@c Standards +@c --------------------------------------------------------------------- + +@node Standards +@section Standards +@cindex Standards + +The GNU Fortran compiler implements +ISO/IEC 1539:1997 (Fortran 95). As such, it can also compile essentially all +standard-compliant Fortran 90 and Fortran 77 programs. It also supports +the ISO/IEC TR-15581 enhancements to allocatable arrays, and +the @uref{http://www.openmp.org/drupal/mp-documents/spec25.pdf, +OpenMP Application Program Interface v2.5} specification. + +In the future, the GNU Fortran compiler will also support ISO/IEC +1539-1:2004 (Fortran 2003) and future Fortran standards. Partial support +of that standard is already provided; the current status of Fortran 2003 +support is reported in the @ref{Fortran 2003 status} section of the +documentation. + +The next version of the Fortran standard after Fortran 2003 is currently +being developed and the GNU Fortran compiler supports some of its new +features. This support is based on the latest draft of the standard +(available from @url{http://www.nag.co.uk/sc22wg5/}) and no guarantee of +future compatibility is made, as the final standard might differ from the +draft. For more information, see the @ref{Fortran 2008 status} section. + + +@c ===================================================================== +@c PART I: INVOCATION REFERENCE +@c ===================================================================== + +@tex +\part{I}{Invoking GNU Fortran} +@end tex + +@c --------------------------------------------------------------------- +@c Compiler Options +@c --------------------------------------------------------------------- + +@include invoke.texi + + +@c --------------------------------------------------------------------- +@c Runtime +@c --------------------------------------------------------------------- + +@node Runtime +@chapter Runtime: Influencing runtime behavior with environment variables +@cindex environment variable + +The behavior of the @command{gfortran} can be influenced by +environment variables. + +Malformed environment variables are silently ignored. + +@menu +* GFORTRAN_STDIN_UNIT:: Unit number for standard input +* GFORTRAN_STDOUT_UNIT:: Unit number for standard output +* GFORTRAN_STDERR_UNIT:: Unit number for standard error +* GFORTRAN_USE_STDERR:: Send library output to standard error +* GFORTRAN_TMPDIR:: Directory for scratch files +* GFORTRAN_UNBUFFERED_ALL:: Don't buffer I/O for all units. +* GFORTRAN_UNBUFFERED_PRECONNECTED:: Don't buffer I/O for preconnected units. +* GFORTRAN_SHOW_LOCUS:: Show location for runtime errors +* GFORTRAN_OPTIONAL_PLUS:: Print leading + where permitted +* GFORTRAN_DEFAULT_RECL:: Default record length for new files +* GFORTRAN_LIST_SEPARATOR:: Separator for list output +* GFORTRAN_CONVERT_UNIT:: Set endianness for unformatted I/O +* GFORTRAN_ERROR_DUMPCORE:: Dump core on run-time errors +* GFORTRAN_ERROR_BACKTRACE:: Show backtrace on run-time errors +@end menu + +@node GFORTRAN_STDIN_UNIT +@section @env{GFORTRAN_STDIN_UNIT}---Unit number for standard input + +This environment variable can be used to select the unit number +preconnected to standard input. This must be a positive integer. +The default value is 5. + +@node GFORTRAN_STDOUT_UNIT +@section @env{GFORTRAN_STDOUT_UNIT}---Unit number for standard output + +This environment variable can be used to select the unit number +preconnected to standard output. This must be a positive integer. +The default value is 6. + +@node GFORTRAN_STDERR_UNIT +@section @env{GFORTRAN_STDERR_UNIT}---Unit number for standard error + +This environment variable can be used to select the unit number +preconnected to standard error. This must be a positive integer. +The default value is 0. + +@node GFORTRAN_USE_STDERR +@section @env{GFORTRAN_USE_STDERR}---Send library output to standard error + +This environment variable controls where library output is sent. +If the first letter is @samp{y}, @samp{Y} or @samp{1}, standard +error is used. If the first letter is @samp{n}, @samp{N} or +@samp{0}, standard output is used. + +@node GFORTRAN_TMPDIR +@section @env{GFORTRAN_TMPDIR}---Directory for scratch files + +This environment variable controls where scratch files are +created. If this environment variable is missing, +GNU Fortran searches for the environment variable @env{TMP}. If +this is also missing, the default is @file{/tmp}. + +@node GFORTRAN_UNBUFFERED_ALL +@section @env{GFORTRAN_UNBUFFERED_ALL}---Don't buffer I/O on all units + +This environment variable controls whether all I/O is unbuffered. If +the first letter is @samp{y}, @samp{Y} or @samp{1}, all I/O is +unbuffered. This will slow down small sequential reads and writes. If +the first letter is @samp{n}, @samp{N} or @samp{0}, I/O is buffered. +This is the default. + +@node GFORTRAN_UNBUFFERED_PRECONNECTED +@section @env{GFORTRAN_UNBUFFERED_PRECONNECTED}---Don't buffer I/O on preconnected units + +The environment variable named @env{GFORTRAN_UNBUFFERED_PRECONNECTED} controls +whether I/O on a preconnected unit (i.e.@: STDOUT or STDERR) is unbuffered. If +the first letter is @samp{y}, @samp{Y} or @samp{1}, I/O is unbuffered. This +will slow down small sequential reads and writes. If the first letter +is @samp{n}, @samp{N} or @samp{0}, I/O is buffered. This is the default. + +@node GFORTRAN_SHOW_LOCUS +@section @env{GFORTRAN_SHOW_LOCUS}---Show location for runtime errors + +If the first letter is @samp{y}, @samp{Y} or @samp{1}, filename and +line numbers for runtime errors are printed. If the first letter is +@samp{n}, @samp{N} or @samp{0}, don't print filename and line numbers +for runtime errors. The default is to print the location. + +@node GFORTRAN_OPTIONAL_PLUS +@section @env{GFORTRAN_OPTIONAL_PLUS}---Print leading + where permitted + +If the first letter is @samp{y}, @samp{Y} or @samp{1}, +a plus sign is printed +where permitted by the Fortran standard. If the first letter +is @samp{n}, @samp{N} or @samp{0}, a plus sign is not printed +in most cases. Default is not to print plus signs. + +@node GFORTRAN_DEFAULT_RECL +@section @env{GFORTRAN_DEFAULT_RECL}---Default record length for new files + +This environment variable specifies the default record length, in +bytes, for files which are opened without a @code{RECL} tag in the +@code{OPEN} statement. This must be a positive integer. The +default value is 1073741824 bytes (1 GB). + +@node GFORTRAN_LIST_SEPARATOR +@section @env{GFORTRAN_LIST_SEPARATOR}---Separator for list output + +This environment variable specifies the separator when writing +list-directed output. It may contain any number of spaces and +at most one comma. If you specify this on the command line, +be sure to quote spaces, as in +@smallexample +$ GFORTRAN_LIST_SEPARATOR=' , ' ./a.out +@end smallexample +when @command{a.out} is the compiled Fortran program that you want to run. +Default is a single space. + +@node GFORTRAN_CONVERT_UNIT +@section @env{GFORTRAN_CONVERT_UNIT}---Set endianness for unformatted I/O + +By setting the @env{GFORTRAN_CONVERT_UNIT} variable, it is possible +to change the representation of data for unformatted files. +The syntax for the @env{GFORTRAN_CONVERT_UNIT} variable is: +@smallexample +GFORTRAN_CONVERT_UNIT: mode | mode ';' exception | exception ; +mode: 'native' | 'swap' | 'big_endian' | 'little_endian' ; +exception: mode ':' unit_list | unit_list ; +unit_list: unit_spec | unit_list unit_spec ; +unit_spec: INTEGER | INTEGER '-' INTEGER ; +@end smallexample +The variable consists of an optional default mode, followed by +a list of optional exceptions, which are separated by semicolons +from the preceding default and each other. Each exception consists +of a format and a comma-separated list of units. Valid values for +the modes are the same as for the @code{CONVERT} specifier: + +@itemize @w{} +@item @code{NATIVE} Use the native format. This is the default. +@item @code{SWAP} Swap between little- and big-endian. +@item @code{LITTLE_ENDIAN} Use the little-endian format +for unformatted files. +@item @code{BIG_ENDIAN} Use the big-endian format for unformatted files. +@end itemize +A missing mode for an exception is taken to mean @code{BIG_ENDIAN}. +Examples of values for @env{GFORTRAN_CONVERT_UNIT} are: +@itemize @w{} +@item @code{'big_endian'} Do all unformatted I/O in big_endian mode. +@item @code{'little_endian;native:10-20,25'} Do all unformatted I/O +in little_endian mode, except for units 10 to 20 and 25, which are in +native format. +@item @code{'10-20'} Units 10 to 20 are big-endian, the rest is native. +@end itemize + +Setting the environment variables should be done on the command +line or via the @command{export} +command for @command{sh}-compatible shells and via @command{setenv} +for @command{csh}-compatible shells. + +Example for @command{sh}: +@smallexample +$ gfortran foo.f90 +$ GFORTRAN_CONVERT_UNIT='big_endian;native:10-20' ./a.out +@end smallexample + +Example code for @command{csh}: +@smallexample +% gfortran foo.f90 +% setenv GFORTRAN_CONVERT_UNIT 'big_endian;native:10-20' +% ./a.out +@end smallexample + +Using anything but the native representation for unformatted data +carries a significant speed overhead. If speed in this area matters +to you, it is best if you use this only for data that needs to be +portable. + +@xref{CONVERT specifier}, for an alternative way to specify the +data representation for unformatted files. @xref{Runtime Options}, for +setting a default data representation for the whole program. The +@code{CONVERT} specifier overrides the @option{-fconvert} compile options. + +@emph{Note that the values specified via the GFORTRAN_CONVERT_UNIT +environment variable will override the CONVERT specifier in the +open statement}. This is to give control over data formats to +users who do not have the source code of their program available. + +@node GFORTRAN_ERROR_DUMPCORE +@section @env{GFORTRAN_ERROR_DUMPCORE}---Dump core on run-time errors + +If the @env{GFORTRAN_ERROR_DUMPCORE} variable is set to +@samp{y}, @samp{Y} or @samp{1} (only the first letter is relevant) +then library run-time errors cause core dumps. To disable the core +dumps, set the variable to @samp{n}, @samp{N}, @samp{0}. Default +is not to core dump unless the @option{-fdump-core} compile option +was used. + +@node GFORTRAN_ERROR_BACKTRACE +@section @env{GFORTRAN_ERROR_BACKTRACE}---Show backtrace on run-time errors + +If the @env{GFORTRAN_ERROR_BACKTRACE} variable is set to +@samp{y}, @samp{Y} or @samp{1} (only the first letter is relevant) +then a backtrace is printed when a run-time error occurs. +To disable the backtracing, set the variable to +@samp{n}, @samp{N}, @samp{0}. Default is not to print a backtrace +unless the @option{-fbacktrace} compile option +was used. + +@c ===================================================================== +@c PART II: LANGUAGE REFERENCE +@c ===================================================================== + +@tex +\part{II}{Language Reference} +@end tex + +@c --------------------------------------------------------------------- +@c Fortran 2003 and 2008 Status +@c --------------------------------------------------------------------- + +@node Fortran 2003 and 2008 status +@chapter Fortran 2003 and 2008 Status + +@menu +* Fortran 2003 status:: +* Fortran 2008 status:: +@end menu + +@node Fortran 2003 status +@section Fortran 2003 status + +Although GNU Fortran focuses on implementing the Fortran 95 +standard for the time being, a few Fortran 2003 features are currently +available. + +@itemize +@item +Intrinsics @code{command_argument_count}, @code{get_command}, +@code{get_command_argument}, @code{get_environment_variable}, and +@code{move_alloc}. + +@item +@cindex array, constructors +@cindex @code{[...]} +Array constructors using square brackets. That is, @code{[...]} rather +than @code{(/.../)}. + +@item +@cindex @code{FLUSH} statement +@cindex statement, @code{FLUSH} +@code{FLUSH} statement. + +@item +@cindex @code{IOMSG=} specifier +@code{IOMSG=} specifier for I/O statements. + +@item +@cindex @code{ENUM} statement +@cindex @code{ENUMERATOR} statement +@cindex statement, @code{ENUM} +@cindex statement, @code{ENUMERATOR} +@opindex @code{fshort-enums} +Support for the declaration of enumeration constants via the +@code{ENUM} and @code{ENUMERATOR} statements. Interoperability with +@command{gcc} is guaranteed also for the case where the +@command{-fshort-enums} command line option is given. + +@item +@cindex TR 15581 +TR 15581: +@itemize +@item +@cindex @code{ALLOCATABLE} dummy arguments +@code{ALLOCATABLE} dummy arguments. +@item +@cindex @code{ALLOCATABLE} function results +@code{ALLOCATABLE} function results +@item +@cindex @code{ALLOCATABLE} components of derived types +@code{ALLOCATABLE} components of derived types +@end itemize + +@item +@cindex @code{STREAM} I/O +@cindex @code{ACCESS='STREAM'} I/O +The @code{OPEN} statement supports the @code{ACCESS='STREAM'} specifier, +allowing I/O without any record structure. + +@item +Namelist input/output for internal files. + +@item +@cindex @code{PROTECTED} statement +@cindex statement, @code{PROTECTED} +The @code{PROTECTED} statement and attribute. + +@item +@cindex @code{VALUE} statement +@cindex statement, @code{VALUE} +The @code{VALUE} statement and attribute. + +@item +@cindex @code{VOLATILE} statement +@cindex statement, @code{VOLATILE} +The @code{VOLATILE} statement and attribute. + +@item +@cindex @code{IMPORT} statement +@cindex statement, @code{IMPORT} +The @code{IMPORT} statement, allowing to import +host-associated derived types. + +@item +@cindex @code{USE, INTRINSIC} statement +@cindex statement, @code{USE, INTRINSIC} +@cindex @code{ISO_FORTRAN_ENV} statement +@cindex statement, @code{ISO_FORTRAN_ENV} +@code{USE} statement with @code{INTRINSIC} and @code{NON_INTRINSIC} +attribute; supported intrinsic modules: @code{ISO_FORTRAN_ENV}, +@code{OMP_LIB} and @code{OMP_LIB_KINDS}. + +@item +Renaming of operators in the @code{USE} statement. + +@item +@cindex ISO C Bindings +Interoperability with C (ISO C Bindings) + +@item +BOZ as argument of INT, REAL, DBLE and CMPLX. + +@end itemize + + +@node Fortran 2008 status +@section Fortran 2008 status + +The next version of the Fortran standard after Fortran 2003 is currently +being worked on by the Working Group 5 of Sub-Committee 22 of the Joint +Technical Committee 1 of the International Organization for +Standardization (ISO) and the International Electrotechnical Commission +(IEC). This group is known at @uref{http://www.nag.co.uk/sc22wg5/, WG5}. +The next revision of the Fortran standard is informally referred to as +Fortran 2008, reflecting its planned release year. The GNU Fortran +compiler has support for some of the new features in Fortran 2008. This +support is based on the latest draft, available from +@url{http://www.nag.co.uk/sc22wg5/}. However, as the final standard may +differ from the drafts, no guarantee of backward compatibility can be +made and you should only use it for experimental purposes. + + +@c --------------------------------------------------------------------- +@c Compiler Characteristics +@c --------------------------------------------------------------------- + +@node Compiler Characteristics +@chapter Compiler Characteristics + +@c TODO: Formulate this introduction a little more generally once +@c there is more here than KIND type parameters. + +This chapter describes certain characteristics of the GNU Fortran compiler, +namely the KIND type parameter values supported. + +@menu +* KIND Type Parameters:: +@end menu + + +@node KIND Type Parameters +@section KIND Type Parameters +@cindex kind + +The @code{KIND} type parameters supported by GNU Fortran for the primitive +data types are: + +@table @code + +@item INTEGER +1, 2, 4, 8*, 16*, default: 4 (1) + +@item LOGICAL +1, 2, 4, 8*, 16*, default: 4 (1) + +@item REAL +4, 8, 10**, 16**, default: 4 (2) + +@item COMPLEX +4, 8, 10**, 16**, default: 4 (2) + +@item CHARACTER +1, 4, default: 1 + +@end table + +@noindent +* = not available on all systems @* +** = not available on all systems; additionally 10 and 16 are never +available at the same time @* +(1) Unless -fdefault-integer-8 is used @* +(2) Unless -fdefault-real-8 is used + +@noindent +The @code{KIND} value matches the storage size in bytes, except for +@code{COMPLEX} where the storage size is twice as much (or both real and +imaginary part are a real value of the given size). It is recommended to use +the @code{SELECT_*_KIND} intrinsics instead of the concrete values. + + +@c --------------------------------------------------------------------- +@c Extensions +@c --------------------------------------------------------------------- + +@c Maybe this chapter should be merged with the 'Standards' section, +@c whenever that is written :-) + +@node Extensions +@chapter Extensions +@cindex extensions + +The two sections below detail the extensions to standard Fortran that are +implemented in GNU Fortran, as well as some of the popular or +historically important extensions that are not (or not yet) implemented. +For the latter case, we explain the alternatives available to GNU Fortran +users, including replacement by standard-conforming code or GNU +extensions. + +@menu +* Extensions implemented in GNU Fortran:: +* Extensions not implemented in GNU Fortran:: +@end menu + + +@node Extensions implemented in GNU Fortran +@section Extensions implemented in GNU Fortran +@cindex extensions, implemented + +GNU Fortran implements a number of extensions over standard +Fortran. This chapter contains information on their syntax and +meaning. There are currently two categories of GNU Fortran +extensions, those that provide functionality beyond that provided +by any standard, and those that are supported by GNU Fortran +purely for backward compatibility with legacy compilers. By default, +@option{-std=gnu} allows the compiler to accept both types of +extensions, but to warn about the use of the latter. Specifying +either @option{-std=f95}, @option{-std=f2003} or @option{-std=f2008} +disables both types of extensions, and @option{-std=legacy} allows both +without warning. + +@menu +* Old-style kind specifications:: +* Old-style variable initialization:: +* Extensions to namelist:: +* X format descriptor without count field:: +* Commas in FORMAT specifications:: +* Missing period in FORMAT specifications:: +* I/O item lists:: +* BOZ literal constants:: +* Real array indices:: +* Unary operators:: +* Implicitly convert LOGICAL and INTEGER values:: +* Hollerith constants support:: +* Cray pointers:: +* CONVERT specifier:: +* OpenMP:: +* Argument list functions:: +@end menu + +@node Old-style kind specifications +@subsection Old-style kind specifications +@cindex kind, old-style + +GNU Fortran allows old-style kind specifications in declarations. These +look like: +@smallexample + TYPESPEC*size x,y,z +@end smallexample +@noindent +where @code{TYPESPEC} is a basic type (@code{INTEGER}, @code{REAL}, +etc.), and where @code{size} is a byte count corresponding to the +storage size of a valid kind for that type. (For @code{COMPLEX} +variables, @code{size} is the total size of the real and imaginary +parts.) The statement then declares @code{x}, @code{y} and @code{z} to +be of type @code{TYPESPEC} with the appropriate kind. This is +equivalent to the standard-conforming declaration +@smallexample + TYPESPEC(k) x,y,z +@end smallexample +@noindent +where @code{k} is the kind parameter suitable for the intended precision. As +kind parameters are implementation-dependent, use the @code{KIND}, +@code{SELECTED_INT_KIND} and @code{SELECTED_REAL_KIND} intrinsics to retrieve +the correct value, for instance @code{REAL*8 x} can be replaced by: +@smallexample +INTEGER, PARAMETER :: dbl = KIND(1.0d0) +REAL(KIND=dbl) :: x +@end smallexample + +@node Old-style variable initialization +@subsection Old-style variable initialization + +GNU Fortran allows old-style initialization of variables of the +form: +@smallexample + INTEGER i/1/,j/2/ + REAL x(2,2) /3*0.,1./ +@end smallexample +The syntax for the initializers is as for the @code{DATA} statement, but +unlike in a @code{DATA} statement, an initializer only applies to the +variable immediately preceding the initialization. In other words, +something like @code{INTEGER I,J/2,3/} is not valid. This style of +initialization is only allowed in declarations without double colons +(@code{::}); the double colons were introduced in Fortran 90, which also +introduced a standard syntax for initializing variables in type +declarations. + +Examples of standard-conforming code equivalent to the above example +are: +@smallexample +! Fortran 90 + INTEGER :: i = 1, j = 2 + REAL :: x(2,2) = RESHAPE((/0.,0.,0.,1./),SHAPE(x)) +! Fortran 77 + INTEGER i, j + REAL x(2,2) + DATA i/1/, j/2/, x/3*0.,1./ +@end smallexample + +Note that variables which are explicitly initialized in declarations +or in @code{DATA} statements automatically acquire the @code{SAVE} +attribute. + +@node Extensions to namelist +@subsection Extensions to namelist +@cindex Namelist + +GNU Fortran fully supports the Fortran 95 standard for namelist I/O +including array qualifiers, substrings and fully qualified derived types. +The output from a namelist write is compatible with namelist read. The +output has all names in upper case and indentation to column 1 after the +namelist name. Two extensions are permitted: + +Old-style use of @samp{$} instead of @samp{&} +@smallexample +$MYNML + X(:)%Y(2) = 1.0 2.0 3.0 + CH(1:4) = "abcd" +$END +@end smallexample + +It should be noted that the default terminator is @samp{/} rather than +@samp{&END}. + +Querying of the namelist when inputting from stdin. After at least +one space, entering @samp{?} sends to stdout the namelist name and the names of +the variables in the namelist: +@smallexample + ? + +&mynml + x + x%y + ch +&end +@end smallexample + +Entering @samp{=?} outputs the namelist to stdout, as if +@code{WRITE(*,NML = mynml)} had been called: +@smallexample +=? + +&MYNML + X(1)%Y= 0.000000 , 1.000000 , 0.000000 , + X(2)%Y= 0.000000 , 2.000000 , 0.000000 , + X(3)%Y= 0.000000 , 3.000000 , 0.000000 , + CH=abcd, / +@end smallexample + +To aid this dialog, when input is from stdin, errors send their +messages to stderr and execution continues, even if @code{IOSTAT} is set. + +@code{PRINT} namelist is permitted. This causes an error if +@option{-std=f95} is used. +@smallexample +PROGRAM test_print + REAL, dimension (4) :: x = (/1.0, 2.0, 3.0, 4.0/) + NAMELIST /mynml/ x + PRINT mynml +END PROGRAM test_print +@end smallexample + +Expanded namelist reads are permitted. This causes an error if +@option{-std=f95} is used. In the following example, the first element +of the array will be given the value 0.00 and the two succeeding +elements will be given the values 1.00 and 2.00. +@smallexample +&MYNML + X(1,1) = 0.00 , 1.00 , 2.00 +/ +@end smallexample + +@node X format descriptor without count field +@subsection @code{X} format descriptor without count field + +To support legacy codes, GNU Fortran permits the count field of the +@code{X} edit descriptor in @code{FORMAT} statements to be omitted. +When omitted, the count is implicitly assumed to be one. + +@smallexample + PRINT 10, 2, 3 +10 FORMAT (I1, X, I1) +@end smallexample + +@node Commas in FORMAT specifications +@subsection Commas in @code{FORMAT} specifications + +To support legacy codes, GNU Fortran allows the comma separator +to be omitted immediately before and after character string edit +descriptors in @code{FORMAT} statements. + +@smallexample + PRINT 10, 2, 3 +10 FORMAT ('FOO='I1' BAR='I2) +@end smallexample + + +@node Missing period in FORMAT specifications +@subsection Missing period in @code{FORMAT} specifications + +To support legacy codes, GNU Fortran allows missing periods in format +specifications if and only if @option{-std=legacy} is given on the +command line. This is considered non-conforming code and is +discouraged. + +@smallexample + REAL :: value + READ(*,10) value +10 FORMAT ('F4') +@end smallexample + +@node I/O item lists +@subsection I/O item lists +@cindex I/O item lists + +To support legacy codes, GNU Fortran allows the input item list +of the @code{READ} statement, and the output item lists of the +@code{WRITE} and @code{PRINT} statements, to start with a comma. + +@node BOZ literal constants +@subsection BOZ literal constants +@cindex BOZ literal constants + +Besides decimal constants, Fortran also supports binary (@code{b}), +octal (@code{o}) and hexadecimal (@code{z}) integer constants. The +syntax is: @samp{prefix quote digits quote}, were the prefix is +either @code{b}, @code{o} or @code{z}, quote is either @code{'} or +@code{"} and the digits are for binary @code{0} or @code{1}, for +octal between @code{0} and @code{7}, and for hexadecimal between +@code{0} and @code{F}. (Example: @code{b'01011101'}.) + +Up to Fortran 95, BOZ literals were only allowed to initialize +integer variables in DATA statements. Since Fortran 2003 BOZ literals +are also allowed as argument of @code{REAL}, @code{DBLE}, @code{INT} +and @code{CMPLX}; the result is the same as if the integer BOZ +literal had been converted by @code{TRANSFER} to, respectively, +@code{real}, @code{double precision}, @code{integer} or @code{complex}. +As GNU Fortran extension the intrinsic procedures @code{FLOAT}, +@code{DFLOAT}, @code{COMPLEX} and @code{DCMPLX} are treated alike. + +As an extension, GNU Fortran allows hexadecimal BOZ literal constants to +be specified using the @code{X} prefix, in addition to the standard +@code{Z} prefix. The BOZ literal can also be specified by adding a +suffix to the string, for example, @code{Z'ABC'} and @code{'ABC'Z} are +equivalent. + +Furthermore, GNU Fortran allows using BOZ literal constants outside +DATA statements and the four intrinsic functions allowed by Fortran 2003. +In DATA statements, in direct assignments, where the right-hand side +only contains a BOZ literal constant, and for old-style initializers of +the form @code{integer i /o'0173'/}, the constant is transferred +as if @code{TRANSFER} had been used; for @code{COMPLEX} numbers, only +the real part is initialized unless @code{CMPLX} is used. In all other +cases, the BOZ literal constant is converted to an @code{INTEGER} value with +the largest decimal representation. This value is then converted +numerically to the type and kind of the variable in question. +(For instance @code{real :: r = b'0000001' + 1} initializes @code{r} +with @code{2.0}.) As different compilers implement the extension +differently, one should be careful when doing bitwise initialization +of non-integer variables. + +Note that initializing an @code{INTEGER} variable with a statement such +as @code{DATA i/Z'FFFFFFFF'/} will give an integer overflow error rather +than the desired result of @math{-1} when @code{i} is a 32-bit integer +on a system that supports 64-bit integers. The @samp{-fno-range-check} +option can be used as a workaround for legacy code that initializes +integers in this manner. + +@node Real array indices +@subsection Real array indices +@cindex array, indices of type real + +As an extension, GNU Fortran allows the use of @code{REAL} expressions +or variables as array indices. + +@node Unary operators +@subsection Unary operators +@cindex operators, unary + +As an extension, GNU Fortran allows unary plus and unary minus operators +to appear as the second operand of binary arithmetic operators without +the need for parenthesis. + +@smallexample + X = Y * -Z +@end smallexample + +@node Implicitly convert LOGICAL and INTEGER values +@subsection Implicitly convert @code{LOGICAL} and @code{INTEGER} values +@cindex conversion, to integer +@cindex conversion, to logical + +As an extension for backwards compatibility with other compilers, GNU +Fortran allows the implicit conversion of @code{LOGICAL} values to +@code{INTEGER} values and vice versa. When converting from a +@code{LOGICAL} to an @code{INTEGER}, @code{.FALSE.} is interpreted as +zero, and @code{.TRUE.} is interpreted as one. When converting from +@code{INTEGER} to @code{LOGICAL}, the value zero is interpreted as +@code{.FALSE.} and any nonzero value is interpreted as @code{.TRUE.}. + +@smallexample + LOGICAL :: l + l = 1 +@end smallexample +@smallexample + INTEGER :: i + i = .TRUE. +@end smallexample + +However, there is no implicit conversion of @code{INTEGER} values in +@code{if}-statements, nor of @code{LOGICAL} or @code{INTEGER} values +in I/O operations. + +@node Hollerith constants support +@subsection Hollerith constants support +@cindex Hollerith constants + +GNU Fortran supports Hollerith constants in assignments, function +arguments, and @code{DATA} and @code{ASSIGN} statements. A Hollerith +constant is written as a string of characters preceded by an integer +constant indicating the character count, and the letter @code{H} or +@code{h}, and stored in bytewise fashion in a numeric (@code{INTEGER}, +@code{REAL}, or @code{complex}) or @code{LOGICAL} variable. The +constant will be padded or truncated to fit the size of the variable in +which it is stored. + +Examples of valid uses of Hollerith constants: +@smallexample + complex*16 x(2) + data x /16Habcdefghijklmnop, 16Hqrstuvwxyz012345/ + x(1) = 16HABCDEFGHIJKLMNOP + call foo (4h abc) +@end smallexample + +Invalid Hollerith constants examples: +@smallexample + integer*4 a + a = 8H12345678 ! Valid, but the Hollerith constant will be truncated. + a = 0H ! At least one character is needed. +@end smallexample + +In general, Hollerith constants were used to provide a rudimentary +facility for handling character strings in early Fortran compilers, +prior to the introduction of @code{CHARACTER} variables in Fortran 77; +in those cases, the standard-compliant equivalent is to convert the +program to use proper character strings. On occasion, there may be a +case where the intent is specifically to initialize a numeric variable +with a given byte sequence. In these cases, the same result can be +obtained by using the @code{TRANSFER} statement, as in this example. +@smallexample + INTEGER(KIND=4) :: a + a = TRANSFER ("abcd", a) ! equivalent to: a = 4Habcd +@end smallexample + + +@node Cray pointers +@subsection Cray pointers +@cindex pointer, Cray + +Cray pointers are part of a non-standard extension that provides a +C-like pointer in Fortran. This is accomplished through a pair of +variables: an integer "pointer" that holds a memory address, and a +"pointee" that is used to dereference the pointer. + +Pointer/pointee pairs are declared in statements of the form: +@smallexample + pointer ( , ) +@end smallexample +or, +@smallexample + pointer ( , ), ( , ), ... +@end smallexample +The pointer is an integer that is intended to hold a memory address. +The pointee may be an array or scalar. A pointee can be an assumed +size array---that is, the last dimension may be left unspecified by +using a @code{*} in place of a value---but a pointee cannot be an +assumed shape array. No space is allocated for the pointee. + +The pointee may have its type declared before or after the pointer +statement, and its array specification (if any) may be declared +before, during, or after the pointer statement. The pointer may be +declared as an integer prior to the pointer statement. However, some +machines have default integer sizes that are different than the size +of a pointer, and so the following code is not portable: +@smallexample + integer ipt + pointer (ipt, iarr) +@end smallexample +If a pointer is declared with a kind that is too small, the compiler +will issue a warning; the resulting binary will probably not work +correctly, because the memory addresses stored in the pointers may be +truncated. It is safer to omit the first line of the above example; +if explicit declaration of ipt's type is omitted, then the compiler +will ensure that ipt is an integer variable large enough to hold a +pointer. + +Pointer arithmetic is valid with Cray pointers, but it is not the same +as C pointer arithmetic. Cray pointers are just ordinary integers, so +the user is responsible for determining how many bytes to add to a +pointer in order to increment it. Consider the following example: +@smallexample + real target(10) + real pointee(10) + pointer (ipt, pointee) + ipt = loc (target) + ipt = ipt + 1 +@end smallexample +The last statement does not set @code{ipt} to the address of +@code{target(1)}, as it would in C pointer arithmetic. Adding @code{1} +to @code{ipt} just adds one byte to the address stored in @code{ipt}. + +Any expression involving the pointee will be translated to use the +value stored in the pointer as the base address. + +To get the address of elements, this extension provides an intrinsic +function @code{LOC()}. The @code{LOC()} function is equivalent to the +@code{&} operator in C, except the address is cast to an integer type: +@smallexample + real ar(10) + pointer(ipt, arpte(10)) + real arpte + ipt = loc(ar) ! Makes arpte is an alias for ar + arpte(1) = 1.0 ! Sets ar(1) to 1.0 +@end smallexample +The pointer can also be set by a call to the @code{MALLOC} intrinsic +(see @ref{MALLOC}). + +Cray pointees often are used to alias an existing variable. For +example: +@smallexample + integer target(10) + integer iarr(10) + pointer (ipt, iarr) + ipt = loc(target) +@end smallexample +As long as @code{ipt} remains unchanged, @code{iarr} is now an alias for +@code{target}. The optimizer, however, will not detect this aliasing, so +it is unsafe to use @code{iarr} and @code{target} simultaneously. Using +a pointee in any way that violates the Fortran aliasing rules or +assumptions is illegal. It is the user's responsibility to avoid doing +this; the compiler works under the assumption that no such aliasing +occurs. + +Cray pointers will work correctly when there is no aliasing (i.e., when +they are used to access a dynamically allocated block of memory), and +also in any routine where a pointee is used, but any variable with which +it shares storage is not used. Code that violates these rules may not +run as the user intends. This is not a bug in the optimizer; any code +that violates the aliasing rules is illegal. (Note that this is not +unique to GNU Fortran; any Fortran compiler that supports Cray pointers +will ``incorrectly'' optimize code with illegal aliasing.) + +There are a number of restrictions on the attributes that can be applied +to Cray pointers and pointees. Pointees may not have the +@code{ALLOCATABLE}, @code{INTENT}, @code{OPTIONAL}, @code{DUMMY}, +@code{TARGET}, @code{INTRINSIC}, or @code{POINTER} attributes. Pointers +may not have the @code{DIMENSION}, @code{POINTER}, @code{TARGET}, +@code{ALLOCATABLE}, @code{EXTERNAL}, or @code{INTRINSIC} attributes. +Pointees may not occur in more than one pointer statement. A pointee +cannot be a pointer. Pointees cannot occur in equivalence, common, or +data statements. + +A Cray pointer may also point to a function or a subroutine. For +example, the following excerpt is valid: +@smallexample + implicit none + external sub + pointer (subptr,subpte) + external subpte + subptr = loc(sub) + call subpte() + [...] + subroutine sub + [...] + end subroutine sub +@end smallexample + +A pointer may be modified during the course of a program, and this +will change the location to which the pointee refers. However, when +pointees are passed as arguments, they are treated as ordinary +variables in the invoked function. Subsequent changes to the pointer +will not change the base address of the array that was passed. + +@node CONVERT specifier +@subsection @code{CONVERT} specifier +@cindex @code{CONVERT} specifier + +GNU Fortran allows the conversion of unformatted data between little- +and big-endian representation to facilitate moving of data +between different systems. The conversion can be indicated with +the @code{CONVERT} specifier on the @code{OPEN} statement. +@xref{GFORTRAN_CONVERT_UNIT}, for an alternative way of specifying +the data format via an environment variable. + +Valid values for @code{CONVERT} are: +@itemize @w{} +@item @code{CONVERT='NATIVE'} Use the native format. This is the default. +@item @code{CONVERT='SWAP'} Swap between little- and big-endian. +@item @code{CONVERT='LITTLE_ENDIAN'} Use the little-endian representation +for unformatted files. +@item @code{CONVERT='BIG_ENDIAN'} Use the big-endian representation for +unformatted files. +@end itemize + +Using the option could look like this: +@smallexample + open(file='big.dat',form='unformatted',access='sequential', & + convert='big_endian') +@end smallexample + +The value of the conversion can be queried by using +@code{INQUIRE(CONVERT=ch)}. The values returned are +@code{'BIG_ENDIAN'} and @code{'LITTLE_ENDIAN'}. + +@code{CONVERT} works between big- and little-endian for +@code{INTEGER} values of all supported kinds and for @code{REAL} +on IEEE systems of kinds 4 and 8. Conversion between different +``extended double'' types on different architectures such as +m68k and x86_64, which GNU Fortran +supports as @code{REAL(KIND=10)} and @code{REAL(KIND=16)}, will +probably not work. + +@emph{Note that the values specified via the GFORTRAN_CONVERT_UNIT +environment variable will override the CONVERT specifier in the +open statement}. This is to give control over data formats to +users who do not have the source code of their program available. + +Using anything but the native representation for unformatted data +carries a significant speed overhead. If speed in this area matters +to you, it is best if you use this only for data that needs to be +portable. + +@node OpenMP +@subsection OpenMP +@cindex OpenMP + +OpenMP (Open Multi-Processing) is an application programming +interface (API) that supports multi-platform shared memory +multiprocessing programming in C/C++ and Fortran on many +architectures, including Unix and Microsoft Windows platforms. +It consists of a set of compiler directives, library routines, +and environment variables that influence run-time behavior. + +GNU Fortran strives to be compatible to the +@uref{http://www.openmp.org/drupal/mp-documents/spec25.pdf, +OpenMP Application Program Interface v2.5}. + +To enable the processing of the OpenMP directive @code{!$omp} in +free-form source code; the @code{c$omp}, @code{*$omp} and @code{!$omp} +directives in fixed form; the @code{!$} conditional compilation sentinels +in free form; and the @code{c$}, @code{*$} and @code{!$} sentinels +in fixed form, @command{gfortran} needs to be invoked with the +@option{-fopenmp}. This also arranges for automatic linking of the +GNU OpenMP runtime library @ref{Top,,libgomp,libgomp,GNU OpenMP +runtime library}. + +The OpenMP Fortran runtime library routines are provided both in a +form of a Fortran 90 module named @code{omp_lib} and in a form of +a Fortran @code{include} file named @file{omp_lib.h}. + +An example of a parallelized loop taken from Appendix A.1 of +the OpenMP Application Program Interface v2.5: +@smallexample +SUBROUTINE A1(N, A, B) + INTEGER I, N + REAL B(N), A(N) +!$OMP PARALLEL DO !I is private by default + DO I=2,N + B(I) = (A(I) + A(I-1)) / 2.0 + ENDDO +!$OMP END PARALLEL DO +END SUBROUTINE A1 +@end smallexample + +Please note: +@itemize +@item +@option{-fopenmp} implies @option{-frecursive}, i.e., all local arrays +will be allocated on the stack. When porting existing code to OpenMP, +this may lead to surprising results, especially to segmentation faults +if the stacksize is limited. + +@item +On glibc-based systems, OpenMP enabled applications can not be statically +linked due to limitations of the underlying pthreads-implementation. It +might be possible to get a working solution if +@command{-Wl,--whole-archive -lpthread -Wl,--no-whole-archive} is added +to the command line. However, this is not supported by @command{gcc} and +thus not recommended. +@end itemize + +@node Argument list functions +@subsection Argument list functions @code{%VAL}, @code{%REF} and @code{%LOC} +@cindex argument list functions +@cindex @code{%VAL} +@cindex @code{%REF} +@cindex @code{%LOC} + +GNU Fortran supports argument list functions @code{%VAL}, @code{%REF} +and @code{%LOC} statements, for backward compatibility with g77. +It is recommended that these should be used only for code that is +accessing facilities outside of GNU Fortran, such as operating system +or windowing facilities. It is best to constrain such uses to isolated +portions of a program--portions that deal specifically and exclusively +with low-level, system-dependent facilities. Such portions might well +provide a portable interface for use by the program as a whole, but are +themselves not portable, and should be thoroughly tested each time they +are rebuilt using a new compiler or version of a compiler. + +@code{%VAL} passes a scalar argument by value, @code{%REF} passes it by +reference and @code{%LOC} passes its memory location. Since gfortran +already passes scalar arguments by reference, @code{%REF} is in effect +a do-nothing. @code{%LOC} has the same effect as a fortran pointer. + +An example of passing an argument by value to a C subroutine foo.: +@smallexample +C +C prototype void foo_ (float x); +C + external foo + real*4 x + x = 3.14159 + call foo (%VAL (x)) + end +@end smallexample + +For details refer to the g77 manual +@uref{http://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/index.html#Top}. + +Also, the gfortran testsuite c_by_val.f and its partner c_by_val.c are +worth a look. + + + +@node Extensions not implemented in GNU Fortran +@section Extensions not implemented in GNU Fortran +@cindex extensions, not implemented + +The long history of the Fortran language, its wide use and broad +userbase, the large number of different compiler vendors and the lack of +some features crucial to users in the first standards have lead to the +existence of a number of important extensions to the language. While +some of the most useful or popular extensions are supported by the GNU +Fortran compiler, not all existing extensions are supported. This section +aims at listing these extensions and offering advice on how best make +code that uses them running with the GNU Fortran compiler. + +@c More can be found here: +@c -- http://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/Missing-Features.html +@c -- the list of fortran and libgfortran bugs closed as WONTFIX: +@c http://tinyurl.com/2u4h5y + +@menu +* STRUCTURE and RECORD:: +@c * UNION and MAP:: +* ENCODE and DECODE statements:: +@c * Expressions in FORMAT statements:: +@c * Q edit descriptor:: +@c * AUTOMATIC statement:: +@c * TYPE and ACCEPT I/O Statements:: +@c * .XOR. operator:: +@c * CARRIAGECONTROL, DEFAULTFILE, DISPOSE and RECORDTYPE I/O specifiers:: +@c * Omitted arguments in procedure call: +@end menu + + +@node STRUCTURE and RECORD +@subsection @code{STRUCTURE} and @code{RECORD} +@cindex @code{STRUCTURE} +@cindex @code{RECORD} + +Structures are user-defined aggregate data types; this functionality was +standardized in Fortran 90 with an different syntax, under the name of +``derived types''. Here is an example of code using the non portable +structure syntax: + +@example +! Declaring a structure named ``item'' and containing three fields: +! an integer ID, an description string and a floating-point price. +STRUCTURE /item/ + INTEGER id + CHARACTER(LEN=200) description + REAL price +END STRUCTURE + +! Define two variables, an single record of type ``item'' +! named ``pear'', and an array of items named ``store_catalog'' +RECORD /item/ pear, store_catalog(100) + +! We can directly access the fields of both variables +pear.id = 92316 +pear.description = "juicy D'Anjou pear" +pear.price = 0.15 +store_catalog(7).id = 7831 +store_catalog(7).description = "milk bottle" +store_catalog(7).price = 1.2 + +! We can also manipulate the whole structure +store_catalog(12) = pear +print *, store_catalog(12) +@end example + +@noindent +This code can easily be rewritten in the Fortran 90 syntax as following: + +@example +! ``STRUCTURE /name/ ... END STRUCTURE'' becomes +! ``TYPE name ... END TYPE'' +TYPE item + INTEGER id + CHARACTER(LEN=200) description + REAL price +END TYPE + +! ``RECORD /name/ variable'' becomes ``TYPE(name) variable'' +TYPE(item) pear, store_catalog(100) + +! Instead of using a dot (.) to access fields of a record, the +! standard syntax uses a percent sign (%) +pear%id = 92316 +pear%description = "juicy D'Anjou pear" +pear%price = 0.15 +store_catalog(7)%id = 7831 +store_catalog(7)%description = "milk bottle" +store_catalog(7)%price = 1.2 + +! Assignments of a whole variable don't change +store_catalog(12) = pear +print *, store_catalog(12) +@end example + + +@c @node UNION and MAP +@c @subsection @code{UNION} and @code{MAP} +@c @cindex @code{UNION} +@c @cindex @code{MAP} +@c +@c For help writing this one, see +@c http://www.eng.umd.edu/~nsw/ench250/fortran1.htm#UNION and +@c http://www.tacc.utexas.edu/services/userguides/pgi/pgiws_ug/pgi32u06.htm + + +@node ENCODE and DECODE statements +@subsection @code{ENCODE} and @code{DECODE} statements +@cindex @code{ENCODE} +@cindex @code{DECODE} + +GNU Fortran doesn't support the @code{ENCODE} and @code{DECODE} +statements. These statements are best replaced by @code{READ} and +@code{WRITE} statements involving internal files (@code{CHARACTER} +variables and arrays), which have been part of the Fortran standard since +Fortran 77. For example, replace a code fragment like + +@smallexample + INTEGER*1 LINE(80) + REAL A, B, C +c ... Code that sets LINE + DECODE (80, 9000, LINE) A, B, C + 9000 FORMAT (1X, 3(F10.5)) +@end smallexample + +@noindent +with the following: + +@smallexample + CHARACTER(LEN=80) LINE + REAL A, B, C +c ... Code that sets LINE + READ (UNIT=LINE, FMT=9000) A, B, C + 9000 FORMAT (1X, 3(F10.5)) +@end smallexample + +Similarly, replace a code fragment like + +@smallexample + INTEGER*1 LINE(80) + REAL A, B, C +c ... Code that sets A, B and C + ENCODE (80, 9000, LINE) A, B, C + 9000 FORMAT (1X, 'OUTPUT IS ', 3(F10.5)) +@end smallexample + +@noindent +with the following: + +@smallexample + INTEGER*1 LINE(80) + REAL A, B, C +c ... Code that sets A, B and C + WRITE (UNIT=LINE, FMT=9000) A, B, C + 9000 FORMAT (1X, 'OUTPUT IS ', 3(F10.5)) +@end smallexample + + +@c --------------------------------------------------------------------- +@c Intrinsic Procedures +@c --------------------------------------------------------------------- + +@include intrinsic.texi + + +@tex +\blankpart +@end tex + +@c --------------------------------------------------------------------- +@c Contributing +@c --------------------------------------------------------------------- + +@node Contributing +@unnumbered Contributing +@cindex Contributing + +Free software is only possible if people contribute to efforts +to create it. +We're always in need of more people helping out with ideas +and comments, writing documentation and contributing code. + +If you want to contribute to GNU Fortran, +have a look at the long lists of projects you can take on. +Some of these projects are small, +some of them are large; +some are completely orthogonal to the rest of what is +happening on GNU Fortran, +but others are ``mainstream'' projects in need of enthusiastic hackers. +All of these projects are important! +We'll eventually get around to the things here, +but they are also things doable by someone who is willing and able. + +@menu +* Contributors:: +* Projects:: +* Proposed Extensions:: +@end menu + + +@node Contributors +@section Contributors to GNU Fortran +@cindex Contributors +@cindex Credits +@cindex Authors + +Most of the parser was hand-crafted by @emph{Andy Vaught}, who is +also the initiator of the whole project. Thanks Andy! +Most of the interface with GCC was written by @emph{Paul Brook}. + +The following individuals have contributed code and/or +ideas and significant help to the GNU Fortran project +(in alphabetical order): + +@itemize @minus +@item Janne Blomqvist +@item Steven Bosscher +@item Paul Brook +@item Tobias Burnus +@item Fran@,{c}ois-Xavier Coudert +@item Bud Davis +@item Jerry DeLisle +@item Erik Edelmann +@item Bernhard Fischer +@item Daniel Franke +@item Richard Guenther +@item Richard Henderson +@item Katherine Holcomb +@item Jakub Jelinek +@item Niels Kristian Bech Jensen +@item Steven Johnson +@item Steven G. Kargl +@item Thomas Koenig +@item Asher Langton +@item H. J. Lu +@item Toon Moene +@item Brooks Moses +@item Andrew Pinski +@item Tim Prince +@item Christopher D. Rickett +@item Richard Sandiford +@item Tobias Schl@"uter +@item Roger Sayle +@item Paul Thomas +@item Andy Vaught +@item Feng Wang +@item Janus Weil +@end itemize + +The following people have contributed bug reports, +smaller or larger patches, +and much needed feedback and encouragement for the +GNU Fortran project: + +@itemize @minus +@item Bill Clodius +@item Dominique d'Humi@`eres +@item Kate Hedstrom +@item Erik Schnetter +@end itemize + +Many other individuals have helped debug, +test and improve the GNU Fortran compiler over the past few years, +and we welcome you to do the same! +If you already have done so, +and you would like to see your name listed in the +list above, please contact us. + + +@node Projects +@section Projects + +@table @emph + +@item Help build the test suite +Solicit more code for donation to the test suite: the more extensive the +testsuite, the smaller the risk of breaking things in the future! We can +keep code private on request. + +@item Bug hunting/squishing +Find bugs and write more test cases! Test cases are especially very +welcome, because it allows us to concentrate on fixing bugs instead of +isolating them. Going through the bugzilla database at +@url{http://gcc.gnu.org/bugzilla/} to reduce testcases posted there and +add more information (for example, for which version does the testcase +work, for which versions does it fail?) is also very helpful. + +@end table + + +@node Proposed Extensions +@section Proposed Extensions + +Here's a list of proposed extensions for the GNU Fortran compiler, in no particular +order. Most of these are necessary to be fully compatible with +existing Fortran compilers, but they are not part of the official +J3 Fortran 95 standard. + +@subsection Compiler extensions: +@itemize @bullet +@item +User-specified alignment rules for structures. + +@item +Flag to generate @code{Makefile} info. + +@item +Automatically extend single precision constants to double. + +@item +Compile code that conserves memory by dynamically allocating common and +module storage either on stack or heap. + +@item +Compile flag to generate code for array conformance checking (suggest -CC). + +@item +User control of symbol names (underscores, etc). + +@item +Compile setting for maximum size of stack frame size before spilling +parts to static or heap. + +@item +Flag to force local variables into static space. + +@item +Flag to force local variables onto stack. +@end itemize + + +@subsection Environment Options +@itemize @bullet +@item +Pluggable library modules for random numbers, linear algebra. +LA should use BLAS calling conventions. + +@item +Environment variables controlling actions on arithmetic exceptions like +overflow, underflow, precision loss---Generate NaN, abort, default. +action. + +@item +Set precision for fp units that support it (i387). + +@item +Variable for setting fp rounding mode. + +@item +Variable to fill uninitialized variables with a user-defined bit +pattern. + +@item +Environment variable controlling filename that is opened for that unit +number. + +@item +Environment variable to clear/trash memory being freed. + +@item +Environment variable to control tracing of allocations and frees. + +@item +Environment variable to display allocated memory at normal program end. + +@item +Environment variable for filename for * IO-unit. + +@item +Environment variable for temporary file directory. + +@item +Environment variable forcing standard output to be line buffered (unix). + +@end itemize + + +@c --------------------------------------------------------------------- +@c GNU General Public License +@c --------------------------------------------------------------------- + +@include gpl_v3.texi + + + +@c --------------------------------------------------------------------- +@c GNU Free Documentation License +@c --------------------------------------------------------------------- + +@include fdl.texi + + + +@c --------------------------------------------------------------------- +@c Funding Free Software +@c --------------------------------------------------------------------- + +@include funding.texi + +@c --------------------------------------------------------------------- +@c Indices +@c --------------------------------------------------------------------- + +@node Option Index +@unnumbered Option Index +@command{gfortran}'s command line options are indexed here without any +initial @samp{-} or @samp{--}. Where an option has both positive and +negative forms (such as -foption and -fno-option), relevant entries in +the manual are indexed under the most appropriate form; it may sometimes +be useful to look up both forms. +@printindex op + +@node Keyword Index +@unnumbered Keyword Index +@printindex cp + +@bye diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortranspec.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortranspec.c new file mode 100644 index 0000000000..0e5e7913e9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortranspec.c @@ -0,0 +1,597 @@ +/* Specific flags and argument handling of the Fortran front-end. + Copyright (C) 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009 + Free Software Foundation, Inc. + +This file is part of GCC. + +GNU CC 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 3, or (at your option) +any later version. + +GNU CC 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 GCC; see the file COPYING3. If not see +. */ + +/* This file is copied more or less verbatim from g77. */ +/* This file contains a filter for the main `gcc' driver, which is + replicated for the `gfortran' driver by adding this filter. The purpose + of this filter is to be basically identical to gcc (in that + it faithfully passes all of the original arguments to gcc) but, + unless explicitly overridden by the user in certain ways, ensure + that the needs of the language supported by this wrapper are met. + + For GNU Fortran 95(gfortran), we do the following to the argument list + before passing it to `gcc': + + 1. Make sure `-lgfortran -lm' is at the end of the list. + + 2. Make sure each time `-lgfortran' or `-lm' is seen, it forms + part of the series `-lgfortran -lm'. + + #1 and #2 are not done if `-nostdlib' or any option that disables + the linking phase is present, or if `-xfoo' is in effect. Note that + a lack of source files or -l options disables linking. + + This program was originally made out of gcc/cp/g++spec.c, but the + way it builds the new argument list was rewritten so it is much + easier to maintain, improve the way it decides to add or not add + extra arguments, etc. And several improvements were made in the + handling of arguments, primarily to make it more consistent with + `gcc' itself. */ + +#include "config.h" +#include "system.h" +#include "gcc.h" + +#include "coretypes.h" +#include "tm.h" +#include "intl.h" + +#ifndef MATH_LIBRARY +#define MATH_LIBRARY "-lm" +#endif + +#ifndef FORTRAN_INIT +#define FORTRAN_INIT "-lgfortranbegin" +#endif + +#ifndef FORTRAN_LIBRARY +#define FORTRAN_LIBRARY "-lgfortran" +#endif + +#ifdef HAVE_LD_STATIC_DYNAMIC +#define ADD_ARG_LIBGFORTRAN(arg) \ + { \ + if (static_lib && !static_linking) \ + append_arg ("-Wl,-Bstatic"); \ + append_arg (arg); \ + if (static_lib && !static_linking) \ + append_arg ("-Wl,-Bdynamic"); \ + } +#else +#define ADD_ARG_LIBGFORTRAN(arg) append_arg (arg); +#endif + + +/* Options this driver needs to recognize, not just know how to + skip over. */ +typedef enum +{ + OPTION_b, /* Aka --prefix. */ + OPTION_B, /* Aka --target. */ + OPTION_c, /* Aka --compile. */ + OPTION_E, /* Aka --preprocess. */ + OPTION_help, /* --help. */ + OPTION_i, /* -imacros, -include, -include-*. */ + OPTION_l, + OPTION_L, /* Aka --library-directory. */ + OPTION_nostdlib, /* Aka --no-standard-libraries, or + -nodefaultlibs. */ + OPTION_o, /* Aka --output. */ + OPTION_S, /* Aka --assemble. */ + OPTION_static, /* -static. */ + OPTION_static_libgfortran, /* -static-libgfortran. */ + OPTION_syntax_only, /* -fsyntax-only. */ + OPTION_v, /* Aka --verbose. */ + OPTION_version, /* --version. */ + OPTION_V, /* Aka --use-version. */ + OPTION_x, /* Aka --language. */ + OPTION_ /* Unrecognized or unimportant. */ +} +Option; + +/* The original argument list and related info is copied here. */ +static int g77_xargc; +static const char *const *g77_xargv; +static void lookup_option (Option *, int *, const char **, const char *); +static void append_arg (const char *); + +/* The new argument list will be built here. */ +static int g77_newargc; +static const char **g77_newargv; + +/* --- This comes from gcc.c (2.8.1) verbatim: */ + +/* This defines which switch letters take arguments. */ + +#ifndef SWITCH_TAKES_ARG +#define SWITCH_TAKES_ARG(CHAR) DEFAULT_SWITCH_TAKES_ARG(CHAR) +#endif + +/* This defines which multi-letter switches take arguments. */ + +#ifndef WORD_SWITCH_TAKES_ARG +#define WORD_SWITCH_TAKES_ARG(STR) DEFAULT_WORD_SWITCH_TAKES_ARG (STR) +#endif + +/* --- End of verbatim. */ + +/* Assumes text[0] == '-'. Returns number of argv items that belong to + (and follow) this one, an option id for options important to the + caller, and a pointer to the first char of the arg, if embedded (else + returns NULL, meaning no arg or it's the next argv). + + Note that this also assumes gcc.c's pass converting long options + to short ones, where available, has already been run. */ + +static void +lookup_option (Option *xopt, int *xskip, const char **xarg, const char *text) +{ + Option opt = OPTION_; + int skip; + const char *arg = NULL; + + if ((skip = SWITCH_TAKES_ARG (text[1]))) + skip -= (text[2] != '\0'); /* See gcc.c. */ + + if (text[1] == 'B') + opt = OPTION_B, skip = (text[2] == '\0'), arg = text + 2; + else if (text[1] == 'b') + opt = OPTION_b, skip = (text[2] == '\0'), arg = text + 2; + else if ((text[1] == 'c') && (text[2] == '\0')) + opt = OPTION_c, skip = 0; + else if ((text[1] == 'E') && (text[2] == '\0')) + opt = OPTION_E, skip = 0; + else if (text[1] == 'i') + opt = OPTION_i, skip = 0; + else if (text[1] == 'l') + opt = OPTION_l; + else if (text[1] == 'L') + opt = OPTION_L, arg = text + 2; + else if (text[1] == 'o') + opt = OPTION_o; + else if ((text[1] == 'S') && (text[2] == '\0')) + opt = OPTION_S, skip = 0; + else if (text[1] == 'V') + opt = OPTION_V, skip = (text[2] == '\0'); + else if ((text[1] == 'v') && (text[2] == '\0')) + opt = OPTION_v, skip = 0; + else if (text[1] == 'x') + opt = OPTION_x, arg = text + 2; + else if (text[1] == 'J') + ; + else + { + if ((skip = WORD_SWITCH_TAKES_ARG (text + 1)) != 0) /* See gcc.c. */ + ; + else if (!strcmp (text, "-fhelp")) /* Really --help!! */ + opt = OPTION_help; + else if (!strcmp (text, "-nostdlib") + || !strcmp (text, "-nodefaultlibs")) + opt = OPTION_nostdlib; + else if (!strcmp (text, "-fsyntax-only")) + opt = OPTION_syntax_only; + else if (!strcmp (text, "-static-libgfortran")) + opt = OPTION_static_libgfortran; + else if (!strcmp (text, "-dumpversion")) + opt = OPTION_version; + else if (!strcmp (text, "-fversion")) /* Really --version!! */ + opt = OPTION_version; + else if (!strcmp (text, "-Xlinker") || !strcmp (text, "-specs")) + skip = 1; + else + skip = 0; + } + + if (xopt != NULL) + *xopt = opt; + if (xskip != NULL) + *xskip = skip; + if (xarg != NULL) + { + if ((arg != NULL) && (arg[0] == '\0')) + *xarg = NULL; + else + *xarg = arg; + } +} + +/* Append another argument to the list being built. As long as it is + identical to the corresponding arg in the original list, just increment + the new arg count. Otherwise allocate a new list, etc. */ + +static void +append_arg (const char *arg) +{ + static int newargsize; + +#if 0 + fprintf (stderr, "`%s'\n", arg); +#endif + + if (g77_newargv == g77_xargv + && g77_newargc < g77_xargc + && (arg == g77_xargv[g77_newargc] + || !strcmp (arg, g77_xargv[g77_newargc]))) + { + ++g77_newargc; + return; /* Nothing new here. */ + } + + if (g77_newargv == g77_xargv) + { /* Make new arglist. */ + int i; + + newargsize = (g77_xargc << 2) + 20; /* This should handle all. */ + g77_newargv = (const char **) xmalloc (newargsize * sizeof (char *)); + + /* Copy what has been done so far. */ + for (i = 0; i < g77_newargc; ++i) + g77_newargv[i] = g77_xargv[i]; + } + + if (g77_newargc == newargsize) + fatal ("overflowed output arg list for '%s'", arg); + + g77_newargv[g77_newargc++] = arg; +} + +void +lang_specific_driver (int *in_argc, const char *const **in_argv, + int *in_added_libraries ATTRIBUTE_UNUSED) +{ + int argc = *in_argc; + const char *const *argv = *in_argv; + int i; + int verbose = 0; + Option opt; + int skip; + const char *arg; + + /* This will be NULL if we encounter a situation where we should not + link in libf2c. */ + const char *library = FORTRAN_LIBRARY; + + /* 0 => -xnone in effect. + 1 => -xfoo in effect. */ + int saw_speclang = 0; + + /* 0 => initial/reset state + 1 => last arg was -l + 2 => last two args were -l -lm. */ + int saw_library = 0; + + /* 0 => initial/reset state + 1 => FORTRAN_INIT linked in */ + int use_init = 0; + + /* By default, we throw on the math library if we have one. */ + int need_math = (MATH_LIBRARY[0] != '\0'); + + /* Whether we should link a static libgfortran. */ + int static_lib = 0; + + /* Whether we need to link statically. */ + int static_linking = 0; + + /* The number of input and output files in the incoming arg list. */ + int n_infiles = 0; + int n_outfiles = 0; + +#if 0 + fprintf (stderr, "Incoming:"); + for (i = 0; i < argc; i++) + fprintf (stderr, " %s", argv[i]); + fprintf (stderr, "\n"); +#endif + + g77_xargc = argc; + g77_xargv = argv; + g77_newargc = 0; + g77_newargv = CONST_CAST2 (const char **, const char *const *, argv); + + /* First pass through arglist. + + If -nostdlib or a "turn-off-linking" option is anywhere in the + command line, don't do any library-option processing (except + relating to -x). Also, if -v is specified, but no other options + that do anything special (allowing -V version, etc.), remember + to add special stuff to make gcc command actually invoke all + the different phases of the compilation process so all the version + numbers can be seen. + + Also, here is where all problems with missing arguments to options + are caught. If this loop is exited normally, it means all options + have the appropriate number of arguments as far as the rest of this + program is concerned. */ + + for (i = 1; i < argc; ++i) + { + if ((argv[i][0] == '+') && (argv[i][1] == 'e')) + { + continue; + } + + if ((argv[i][0] != '-') || (argv[i][1] == '\0')) + { + ++n_infiles; + continue; + } + + lookup_option (&opt, &skip, NULL, argv[i]); + + switch (opt) + { + case OPTION_nostdlib: + case OPTION_c: + case OPTION_S: + case OPTION_syntax_only: + case OPTION_E: + /* These options disable linking entirely or linking of the + standard libraries. */ + library = 0; + break; + + case OPTION_static_libgfortran: + static_lib = 1; + break; + + case OPTION_static: + static_linking = 1; + + case OPTION_l: + ++n_infiles; + break; + + case OPTION_o: + ++n_outfiles; + break; + + case OPTION_v: + verbose = 1; + break; + + case OPTION_b: + case OPTION_B: + case OPTION_L: + case OPTION_i: + case OPTION_V: + /* These options are useful in conjunction with -v to get + appropriate version info. */ + break; + + case OPTION_version: + printf ("GNU Fortran %s%s\n", pkgversion_string, version_string); + printf ("Copyright %s 2009 Free Software Foundation, Inc.\n\n", + _("(C)")); + printf (_("GNU Fortran comes with NO WARRANTY, to the extent permitted by law.\n\ +You may redistribute copies of GNU Fortran\n\ +under the terms of the GNU General Public License.\n\ +For more information about these matters, see the file named COPYING\n\n")); + exit (0); + break; + + case OPTION_help: + /* Let gcc.c handle this, as it has a really + cool facility for handling --help and --verbose --help. */ + return; + + default: + break; + } + + /* This is the one place we check for missing arguments in the + program. */ + + if (i + skip < argc) + i += skip; + else + fatal ("argument to '%s' missing", argv[i]); + } + + if ((n_outfiles != 0) && (n_infiles == 0)) + fatal ("no input files; unwilling to write output files"); + + /* If there are no input files, no need for the library. */ + if (n_infiles == 0) + library = 0; + + /* Second pass through arglist, transforming arguments as appropriate. */ + + append_arg (argv[0]); /* Start with command name, of course. */ + + for (i = 1; i < argc; ++i) + { + if (argv[i][0] == '\0') + { + append_arg (argv[i]); /* Interesting. Just append as is. */ + continue; + } + + if ((argv[i][0] == '-') && (argv[i][1] == 'M')) + { + char *p; + + fprintf (stderr, _("Warning: Using -M is deprecated, " + "use -J instead\n")); + if (argv[i][2] == '\0') + { + if (i+1 < argc) + { + p = XNEWVEC (char, strlen (argv[i + 1]) + 3); + p[0] = '-'; + p[1] = 'J'; + strcpy (&p[2], argv[i + 1]); + i++; + } + else + fatal ("argument to '%s' missing", argv[i]); + } + else + { + p = XNEWVEC (char, strlen (argv[i]) + 1); + p[0] = '-'; + p[1] = 'J'; + strcpy (&p[2], argv[i] + 2); + } + append_arg (p); + continue; + } + + if ((argv[i][0] == '-') && (argv[i][1] != 'l')) + { + /* Not a filename or library. */ + + if (saw_library == 1 && need_math) /* -l. */ + append_arg (MATH_LIBRARY); + + saw_library = 0; + + lookup_option (&opt, &skip, &arg, argv[i]); + + if (argv[i][1] == '\0') + { + append_arg (argv[i]); /* "-" == Standard input. */ + continue; + } + + if (opt == OPTION_x) + { + /* Track input language. */ + const char *lang; + + if (arg == NULL) + lang = argv[i + 1]; + else + lang = arg; + + saw_speclang = (strcmp (lang, "none") != 0); + } + + append_arg (argv[i]); + + for (; skip != 0; --skip) + append_arg (argv[++i]); + + continue; + } + + /* A filename/library, not an option. */ + + if (saw_speclang) + saw_library = 0; /* -xfoo currently active. */ + else + { /* -lfoo or filename. */ + if (strcmp (argv[i], MATH_LIBRARY) == 0) + { + if (saw_library == 1) + saw_library = 2; /* -l -lm. */ + else + { + if (0 == use_init) + { + append_arg (FORTRAN_INIT); + use_init = 1; + } + + ADD_ARG_LIBGFORTRAN (FORTRAN_LIBRARY); + } + } + else if (strcmp (argv[i], FORTRAN_LIBRARY) == 0) + { + saw_library = 1; /* -l. */ + ADD_ARG_LIBGFORTRAN (argv[i]); + continue; + } + else + { /* Other library, or filename. */ + if (saw_library == 1 && need_math) + append_arg (MATH_LIBRARY); + saw_library = 0; + } + } + append_arg (argv[i]); + } + + /* Append `-lg2c -lm' as necessary. */ + + if (library) + { /* Doing a link and no -nostdlib. */ + if (saw_speclang) + append_arg ("-xnone"); + + switch (saw_library) + { + case 0: + if (0 == use_init) + { + append_arg (FORTRAN_INIT); + use_init = 1; + } + ADD_ARG_LIBGFORTRAN (library); + /* Fall through. */ + + case 1: + if (need_math) + append_arg (MATH_LIBRARY); + default: + break; + } + } + +#ifdef ENABLE_SHARED_LIBGCC + if (library) + { + int i; + + for (i = 1; i < g77_newargc; i++) + if (g77_newargv[i][0] == '-') + if (strcmp (g77_newargv[i], "-static-libgcc") == 0 + || strcmp (g77_newargv[i], "-static") == 0) + break; + + if (i == g77_newargc) + append_arg ("-shared-libgcc"); + } + +#endif + + if (verbose && g77_newargv != g77_xargv) + { + fprintf (stderr, _("Driving:")); + for (i = 0; i < g77_newargc; i++) + fprintf (stderr, " %s", g77_newargv[i]); + fprintf (stderr, "\n"); + } + + *in_argc = g77_newargc; + *in_argv = g77_newargv; +} + + +/* Called before linking. Returns 0 on success and -1 on failure. */ +int +lang_specific_pre_link (void) /* Not used for F77. */ +{ + return 0; +} + +/* Number of extra output files that lang_specific_pre_link may generate. */ +int lang_specific_extra_outfiles = 0; /* Not used for F77. */ diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/interface.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/interface.c new file mode 100644 index 0000000000..88638070d3 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/interface.c @@ -0,0 +1,2944 @@ +/* Deal with interfaces. + Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + + +/* Deal with interfaces. An explicit interface is represented as a + singly linked list of formal argument structures attached to the + relevant symbols. For an implicit interface, the arguments don't + point to symbols. Explicit interfaces point to namespaces that + contain the symbols within that interface. + + Implicit interfaces are linked together in a singly linked list + along the next_if member of symbol nodes. Since a particular + symbol can only have a single explicit interface, the symbol cannot + be part of multiple lists and a single next-member suffices. + + This is not the case for general classes, though. An operator + definition is independent of just about all other uses and has it's + own head pointer. + + Nameless interfaces: + Nameless interfaces create symbols with explicit interfaces within + the current namespace. They are otherwise unlinked. + + Generic interfaces: + The generic name points to a linked list of symbols. Each symbol + has an explicit interface. Each explicit interface has its own + namespace containing the arguments. Module procedures are symbols in + which the interface is added later when the module procedure is parsed. + + User operators: + User-defined operators are stored in a their own set of symtrees + separate from regular symbols. The symtrees point to gfc_user_op + structures which in turn head up a list of relevant interfaces. + + Extended intrinsics and assignment: + The head of these interface lists are stored in the containing namespace. + + Implicit interfaces: + An implicit interface is represented as a singly linked list of + formal argument list structures that don't point to any symbol + nodes -- they just contain types. + + + When a subprogram is defined, the program unit's name points to an + interface as usual, but the link to the namespace is NULL and the + formal argument list points to symbols within the same namespace as + the program unit name. */ + +#include "config.h" +#include "system.h" +#include "gfortran.h" +#include "match.h" + +/* The current_interface structure holds information about the + interface currently being parsed. This structure is saved and + restored during recursive interfaces. */ + +gfc_interface_info current_interface; + + +/* Free a singly linked list of gfc_interface structures. */ + +void +gfc_free_interface (gfc_interface *intr) +{ + gfc_interface *next; + + for (; intr; intr = next) + { + next = intr->next; + gfc_free (intr); + } +} + + +/* Change the operators unary plus and minus into binary plus and + minus respectively, leaving the rest unchanged. */ + +static gfc_intrinsic_op +fold_unary (gfc_intrinsic_op op) +{ + switch (op) + { + case INTRINSIC_UPLUS: + op = INTRINSIC_PLUS; + break; + case INTRINSIC_UMINUS: + op = INTRINSIC_MINUS; + break; + default: + break; + } + + return op; +} + + +/* Match a generic specification. Depending on which type of + interface is found, the 'name' or 'op' pointers may be set. + This subroutine doesn't return MATCH_NO. */ + +match +gfc_match_generic_spec (interface_type *type, + char *name, + gfc_intrinsic_op *op) +{ + char buffer[GFC_MAX_SYMBOL_LEN + 1]; + match m; + gfc_intrinsic_op i; + + if (gfc_match (" assignment ( = )") == MATCH_YES) + { + *type = INTERFACE_INTRINSIC_OP; + *op = INTRINSIC_ASSIGN; + return MATCH_YES; + } + + if (gfc_match (" operator ( %o )", &i) == MATCH_YES) + { /* Operator i/f */ + *type = INTERFACE_INTRINSIC_OP; + *op = fold_unary (i); + return MATCH_YES; + } + + if (gfc_match (" operator ( ") == MATCH_YES) + { + m = gfc_match_defined_op_name (buffer, 1); + if (m == MATCH_NO) + goto syntax; + if (m != MATCH_YES) + return MATCH_ERROR; + + m = gfc_match_char (')'); + if (m == MATCH_NO) + goto syntax; + if (m != MATCH_YES) + return MATCH_ERROR; + + strcpy (name, buffer); + *type = INTERFACE_USER_OP; + return MATCH_YES; + } + + if (gfc_match_name (buffer) == MATCH_YES) + { + strcpy (name, buffer); + *type = INTERFACE_GENERIC; + return MATCH_YES; + } + + *type = INTERFACE_NAMELESS; + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in generic specification at %C"); + return MATCH_ERROR; +} + + +/* Match one of the five F95 forms of an interface statement. The + matcher for the abstract interface follows. */ + +match +gfc_match_interface (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + interface_type type; + gfc_symbol *sym; + gfc_intrinsic_op op; + match m; + + m = gfc_match_space (); + + if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR) + return MATCH_ERROR; + + /* If we're not looking at the end of the statement now, or if this + is not a nameless interface but we did not see a space, punt. */ + if (gfc_match_eos () != MATCH_YES + || (type != INTERFACE_NAMELESS && m != MATCH_YES)) + { + gfc_error ("Syntax error: Trailing garbage in INTERFACE statement " + "at %C"); + return MATCH_ERROR; + } + + current_interface.type = type; + + switch (type) + { + case INTERFACE_GENERIC: + if (gfc_get_symbol (name, NULL, &sym)) + return MATCH_ERROR; + + if (!sym->attr.generic + && gfc_add_generic (&sym->attr, sym->name, NULL) == FAILURE) + return MATCH_ERROR; + + if (sym->attr.dummy) + { + gfc_error ("Dummy procedure '%s' at %C cannot have a " + "generic interface", sym->name); + return MATCH_ERROR; + } + + current_interface.sym = gfc_new_block = sym; + break; + + case INTERFACE_USER_OP: + current_interface.uop = gfc_get_uop (name); + break; + + case INTERFACE_INTRINSIC_OP: + current_interface.op = op; + break; + + case INTERFACE_NAMELESS: + case INTERFACE_ABSTRACT: + break; + } + + return MATCH_YES; +} + + + +/* Match a F2003 abstract interface. */ + +match +gfc_match_abstract_interface (void) +{ + match m; + + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ABSTRACT INTERFACE at %C") + == FAILURE) + return MATCH_ERROR; + + m = gfc_match_eos (); + + if (m != MATCH_YES) + { + gfc_error ("Syntax error in ABSTRACT INTERFACE statement at %C"); + return MATCH_ERROR; + } + + current_interface.type = INTERFACE_ABSTRACT; + + return m; +} + + +/* Match the different sort of generic-specs that can be present after + the END INTERFACE itself. */ + +match +gfc_match_end_interface (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + interface_type type; + gfc_intrinsic_op op; + match m; + + m = gfc_match_space (); + + if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR) + return MATCH_ERROR; + + /* If we're not looking at the end of the statement now, or if this + is not a nameless interface but we did not see a space, punt. */ + if (gfc_match_eos () != MATCH_YES + || (type != INTERFACE_NAMELESS && m != MATCH_YES)) + { + gfc_error ("Syntax error: Trailing garbage in END INTERFACE " + "statement at %C"); + return MATCH_ERROR; + } + + m = MATCH_YES; + + switch (current_interface.type) + { + case INTERFACE_NAMELESS: + case INTERFACE_ABSTRACT: + if (type != INTERFACE_NAMELESS) + { + gfc_error ("Expected a nameless interface at %C"); + m = MATCH_ERROR; + } + + break; + + case INTERFACE_INTRINSIC_OP: + if (type != current_interface.type || op != current_interface.op) + { + + if (current_interface.op == INTRINSIC_ASSIGN) + gfc_error ("Expected 'END INTERFACE ASSIGNMENT (=)' at %C"); + else + gfc_error ("Expecting 'END INTERFACE OPERATOR (%s)' at %C", + gfc_op2string (current_interface.op)); + + m = MATCH_ERROR; + } + + break; + + case INTERFACE_USER_OP: + /* Comparing the symbol node names is OK because only use-associated + symbols can be renamed. */ + if (type != current_interface.type + || strcmp (current_interface.uop->name, name) != 0) + { + gfc_error ("Expecting 'END INTERFACE OPERATOR (.%s.)' at %C", + current_interface.uop->name); + m = MATCH_ERROR; + } + + break; + + case INTERFACE_GENERIC: + if (type != current_interface.type + || strcmp (current_interface.sym->name, name) != 0) + { + gfc_error ("Expecting 'END INTERFACE %s' at %C", + current_interface.sym->name); + m = MATCH_ERROR; + } + + break; + } + + return m; +} + + +/* Compare two derived types using the criteria in 4.4.2 of the standard, + recursing through gfc_compare_types for the components. */ + +int +gfc_compare_derived_types (gfc_symbol *derived1, gfc_symbol *derived2) +{ + gfc_component *dt1, *dt2; + + /* Special case for comparing derived types across namespaces. If the + true names and module names are the same and the module name is + nonnull, then they are equal. */ + if (derived1 != NULL && derived2 != NULL + && strcmp (derived1->name, derived2->name) == 0 + && derived1->module != NULL && derived2->module != NULL + && strcmp (derived1->module, derived2->module) == 0) + return 1; + + /* Compare type via the rules of the standard. Both types must have + the SEQUENCE attribute to be equal. */ + + if (strcmp (derived1->name, derived2->name)) + return 0; + + if (derived1->component_access == ACCESS_PRIVATE + || derived2->component_access == ACCESS_PRIVATE) + return 0; + + if (derived1->attr.sequence == 0 || derived2->attr.sequence == 0) + return 0; + + dt1 = derived1->components; + dt2 = derived2->components; + + /* Since subtypes of SEQUENCE types must be SEQUENCE types as well, a + simple test can speed things up. Otherwise, lots of things have to + match. */ + for (;;) + { + if (strcmp (dt1->name, dt2->name) != 0) + return 0; + + if (dt1->attr.access != dt2->attr.access) + return 0; + + if (dt1->attr.pointer != dt2->attr.pointer) + return 0; + + if (dt1->attr.dimension != dt2->attr.dimension) + return 0; + + if (dt1->attr.allocatable != dt2->attr.allocatable) + return 0; + + if (dt1->attr.dimension && gfc_compare_array_spec (dt1->as, dt2->as) == 0) + return 0; + + /* Make sure that link lists do not put this function into an + endless recursive loop! */ + if (!(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.derived) + && !(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.derived) + && gfc_compare_types (&dt1->ts, &dt2->ts) == 0) + return 0; + + else if ((dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.derived) + && !(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.derived)) + return 0; + + else if (!(dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.derived) + && (dt1->ts.type == BT_DERIVED && derived1 == dt1->ts.derived)) + return 0; + + dt1 = dt1->next; + dt2 = dt2->next; + + if (dt1 == NULL && dt2 == NULL) + break; + if (dt1 == NULL || dt2 == NULL) + return 0; + } + + return 1; +} + + +/* Compare two typespecs, recursively if necessary. */ + +int +gfc_compare_types (gfc_typespec *ts1, gfc_typespec *ts2) +{ + /* See if one of the typespecs is a BT_VOID, which is what is being used + to allow the funcs like c_f_pointer to accept any pointer type. + TODO: Possibly should narrow this to just the one typespec coming in + that is for the formal arg, but oh well. */ + if (ts1->type == BT_VOID || ts2->type == BT_VOID) + return 1; + + if (ts1->type != ts2->type) + return 0; + if (ts1->type != BT_DERIVED) + return (ts1->kind == ts2->kind); + + /* Compare derived types. */ + if (ts1->derived == ts2->derived) + return 1; + + return gfc_compare_derived_types (ts1->derived ,ts2->derived); +} + + +/* Given two symbols that are formal arguments, compare their ranks + and types. Returns nonzero if they have the same rank and type, + zero otherwise. */ + +static int +compare_type_rank (gfc_symbol *s1, gfc_symbol *s2) +{ + int r1, r2; + + r1 = (s1->as != NULL) ? s1->as->rank : 0; + r2 = (s2->as != NULL) ? s2->as->rank : 0; + + if (r1 != r2) + return 0; /* Ranks differ. */ + + return gfc_compare_types (&s1->ts, &s2->ts); +} + + +static int compare_intr_interfaces (gfc_symbol *, gfc_symbol *); + +/* Given two symbols that are formal arguments, compare their types + and rank and their formal interfaces if they are both dummy + procedures. Returns nonzero if the same, zero if different. */ + +static int +compare_type_rank_if (gfc_symbol *s1, gfc_symbol *s2) +{ + if (s1 == NULL || s2 == NULL) + return s1 == s2 ? 1 : 0; + + if (s1 == s2) + return 1; + + if (s1->attr.flavor != FL_PROCEDURE && s2->attr.flavor != FL_PROCEDURE) + return compare_type_rank (s1, s2); + + if (s1->attr.flavor != FL_PROCEDURE || s2->attr.flavor != FL_PROCEDURE) + return 0; + + /* At this point, both symbols are procedures. It can happen that + external procedures are compared, where one is identified by usage + to be a function or subroutine but the other is not. Check TKR + nonetheless for these cases. */ + if (s1->attr.function == 0 && s1->attr.subroutine == 0) + return s1->attr.external == 1 ? compare_type_rank (s1, s2) : 0; + + if (s2->attr.function == 0 && s2->attr.subroutine == 0) + return s2->attr.external == 1 ? compare_type_rank (s1, s2) : 0; + + /* Now the type of procedure has been identified. */ + if (s1->attr.function != s2->attr.function + || s1->attr.subroutine != s2->attr.subroutine) + return 0; + + if (s1->attr.function && compare_type_rank (s1, s2) == 0) + return 0; + + /* Originally, gfortran recursed here to check the interfaces of passed + procedures. This is explicitly not required by the standard. */ + return 1; +} + + +/* Given a formal argument list and a keyword name, search the list + for that keyword. Returns the correct symbol node if found, NULL + if not found. */ + +static gfc_symbol * +find_keyword_arg (const char *name, gfc_formal_arglist *f) +{ + for (; f; f = f->next) + if (strcmp (f->sym->name, name) == 0) + return f->sym; + + return NULL; +} + + +/******** Interface checking subroutines **********/ + + +/* Given an operator interface and the operator, make sure that all + interfaces for that operator are legal. */ + +static void +check_operator_interface (gfc_interface *intr, gfc_intrinsic_op op) +{ + gfc_formal_arglist *formal; + sym_intent i1, i2; + gfc_symbol *sym; + bt t1, t2; + int args, r1, r2, k1, k2; + + if (intr == NULL) + return; + + args = 0; + t1 = t2 = BT_UNKNOWN; + i1 = i2 = INTENT_UNKNOWN; + r1 = r2 = -1; + k1 = k2 = -1; + + for (formal = intr->sym->formal; formal; formal = formal->next) + { + sym = formal->sym; + if (sym == NULL) + { + gfc_error ("Alternate return cannot appear in operator " + "interface at %L", &intr->sym->declared_at); + return; + } + if (args == 0) + { + t1 = sym->ts.type; + i1 = sym->attr.intent; + r1 = (sym->as != NULL) ? sym->as->rank : 0; + k1 = sym->ts.kind; + } + if (args == 1) + { + t2 = sym->ts.type; + i2 = sym->attr.intent; + r2 = (sym->as != NULL) ? sym->as->rank : 0; + k2 = sym->ts.kind; + } + args++; + } + + sym = intr->sym; + + /* Only +, - and .not. can be unary operators. + .not. cannot be a binary operator. */ + if (args == 0 || args > 2 || (args == 1 && op != INTRINSIC_PLUS + && op != INTRINSIC_MINUS + && op != INTRINSIC_NOT) + || (args == 2 && op == INTRINSIC_NOT)) + { + gfc_error ("Operator interface at %L has the wrong number of arguments", + &intr->sym->declared_at); + return; + } + + /* Check that intrinsics are mapped to functions, except + INTRINSIC_ASSIGN which should map to a subroutine. */ + if (op == INTRINSIC_ASSIGN) + { + if (!sym->attr.subroutine) + { + gfc_error ("Assignment operator interface at %L must be " + "a SUBROUTINE", &intr->sym->declared_at); + return; + } + if (args != 2) + { + gfc_error ("Assignment operator interface at %L must have " + "two arguments", &intr->sym->declared_at); + return; + } + + /* Allowed are (per F2003, 12.3.2.1.2 Defined assignments): + - First argument an array with different rank than second, + - Types and kinds do not conform, and + - First argument is of derived type. */ + if (sym->formal->sym->ts.type != BT_DERIVED + && (r1 == 0 || r1 == r2) + && (sym->formal->sym->ts.type == sym->formal->next->sym->ts.type + || (gfc_numeric_ts (&sym->formal->sym->ts) + && gfc_numeric_ts (&sym->formal->next->sym->ts)))) + { + gfc_error ("Assignment operator interface at %L must not redefine " + "an INTRINSIC type assignment", &intr->sym->declared_at); + return; + } + } + else + { + if (!sym->attr.function) + { + gfc_error ("Intrinsic operator interface at %L must be a FUNCTION", + &intr->sym->declared_at); + return; + } + } + + /* Check intents on operator interfaces. */ + if (op == INTRINSIC_ASSIGN) + { + if (i1 != INTENT_OUT && i1 != INTENT_INOUT) + gfc_error ("First argument of defined assignment at %L must be " + "INTENT(OUT) or INTENT(INOUT)", &intr->sym->declared_at); + + if (i2 != INTENT_IN) + gfc_error ("Second argument of defined assignment at %L must be " + "INTENT(IN)", &intr->sym->declared_at); + } + else + { + if (i1 != INTENT_IN) + gfc_error ("First argument of operator interface at %L must be " + "INTENT(IN)", &intr->sym->declared_at); + + if (args == 2 && i2 != INTENT_IN) + gfc_error ("Second argument of operator interface at %L must be " + "INTENT(IN)", &intr->sym->declared_at); + } + + /* From now on, all we have to do is check that the operator definition + doesn't conflict with an intrinsic operator. The rules for this + game are defined in 7.1.2 and 7.1.3 of both F95 and F2003 standards, + as well as 12.3.2.1.1 of Fortran 2003: + + "If the operator is an intrinsic-operator (R310), the number of + function arguments shall be consistent with the intrinsic uses of + that operator, and the types, kind type parameters, or ranks of the + dummy arguments shall differ from those required for the intrinsic + operation (7.1.2)." */ + +#define IS_NUMERIC_TYPE(t) \ + ((t) == BT_INTEGER || (t) == BT_REAL || (t) == BT_COMPLEX) + + /* Unary ops are easy, do them first. */ + if (op == INTRINSIC_NOT) + { + if (t1 == BT_LOGICAL) + goto bad_repl; + else + return; + } + + if (args == 1 && (op == INTRINSIC_PLUS || op == INTRINSIC_MINUS)) + { + if (IS_NUMERIC_TYPE (t1)) + goto bad_repl; + else + return; + } + + /* Character intrinsic operators have same character kind, thus + operator definitions with operands of different character kinds + are always safe. */ + if (t1 == BT_CHARACTER && t2 == BT_CHARACTER && k1 != k2) + return; + + /* Intrinsic operators always perform on arguments of same rank, + so different ranks is also always safe. (rank == 0) is an exception + to that, because all intrinsic operators are elemental. */ + if (r1 != r2 && r1 != 0 && r2 != 0) + return; + + switch (op) + { + case INTRINSIC_EQ: + case INTRINSIC_EQ_OS: + case INTRINSIC_NE: + case INTRINSIC_NE_OS: + if (t1 == BT_CHARACTER && t2 == BT_CHARACTER) + goto bad_repl; + /* Fall through. */ + + case INTRINSIC_PLUS: + case INTRINSIC_MINUS: + case INTRINSIC_TIMES: + case INTRINSIC_DIVIDE: + case INTRINSIC_POWER: + if (IS_NUMERIC_TYPE (t1) && IS_NUMERIC_TYPE (t2)) + goto bad_repl; + break; + + case INTRINSIC_GT: + case INTRINSIC_GT_OS: + case INTRINSIC_GE: + case INTRINSIC_GE_OS: + case INTRINSIC_LT: + case INTRINSIC_LT_OS: + case INTRINSIC_LE: + case INTRINSIC_LE_OS: + if (t1 == BT_CHARACTER && t2 == BT_CHARACTER) + goto bad_repl; + if ((t1 == BT_INTEGER || t1 == BT_REAL) + && (t2 == BT_INTEGER || t2 == BT_REAL)) + goto bad_repl; + break; + + case INTRINSIC_CONCAT: + if (t1 == BT_CHARACTER && t2 == BT_CHARACTER) + goto bad_repl; + break; + + case INTRINSIC_AND: + case INTRINSIC_OR: + case INTRINSIC_EQV: + case INTRINSIC_NEQV: + if (t1 == BT_LOGICAL && t2 == BT_LOGICAL) + goto bad_repl; + break; + + default: + break; + } + + return; + +#undef IS_NUMERIC_TYPE + +bad_repl: + gfc_error ("Operator interface at %L conflicts with intrinsic interface", + &intr->where); + return; +} + + +/* Given a pair of formal argument lists, we see if the two lists can + be distinguished by counting the number of nonoptional arguments of + a given type/rank in f1 and seeing if there are less then that + number of those arguments in f2 (including optional arguments). + Since this test is asymmetric, it has to be called twice to make it + symmetric. Returns nonzero if the argument lists are incompatible + by this test. This subroutine implements rule 1 of section + 14.1.2.3. */ + +static int +count_types_test (gfc_formal_arglist *f1, gfc_formal_arglist *f2) +{ + int rc, ac1, ac2, i, j, k, n1; + gfc_formal_arglist *f; + + typedef struct + { + int flag; + gfc_symbol *sym; + } + arginfo; + + arginfo *arg; + + n1 = 0; + + for (f = f1; f; f = f->next) + n1++; + + /* Build an array of integers that gives the same integer to + arguments of the same type/rank. */ + arg = XCNEWVEC (arginfo, n1); + + f = f1; + for (i = 0; i < n1; i++, f = f->next) + { + arg[i].flag = -1; + arg[i].sym = f->sym; + } + + k = 0; + + for (i = 0; i < n1; i++) + { + if (arg[i].flag != -1) + continue; + + if (arg[i].sym && arg[i].sym->attr.optional) + continue; /* Skip optional arguments. */ + + arg[i].flag = k; + + /* Find other nonoptional arguments of the same type/rank. */ + for (j = i + 1; j < n1; j++) + if ((arg[j].sym == NULL || !arg[j].sym->attr.optional) + && compare_type_rank_if (arg[i].sym, arg[j].sym)) + arg[j].flag = k; + + k++; + } + + /* Now loop over each distinct type found in f1. */ + k = 0; + rc = 0; + + for (i = 0; i < n1; i++) + { + if (arg[i].flag != k) + continue; + + ac1 = 1; + for (j = i + 1; j < n1; j++) + if (arg[j].flag == k) + ac1++; + + /* Count the number of arguments in f2 with that type, including + those that are optional. */ + ac2 = 0; + + for (f = f2; f; f = f->next) + if (compare_type_rank_if (arg[i].sym, f->sym)) + ac2++; + + if (ac1 > ac2) + { + rc = 1; + break; + } + + k++; + } + + gfc_free (arg); + + return rc; +} + + +/* Perform the abbreviated correspondence test for operators. The + arguments cannot be optional and are always ordered correctly, + which makes this test much easier than that for generic tests. + + This subroutine is also used when comparing a formal and actual + argument list when an actual parameter is a dummy procedure. At + that point, two formal interfaces must be compared for equality + which is what happens here. */ + +static int +operator_correspondence (gfc_formal_arglist *f1, gfc_formal_arglist *f2) +{ + for (;;) + { + if (f1 == NULL && f2 == NULL) + break; + if (f1 == NULL || f2 == NULL) + return 1; + + if (!compare_type_rank (f1->sym, f2->sym)) + return 1; + + f1 = f1->next; + f2 = f2->next; + } + + return 0; +} + + +/* Perform the correspondence test in rule 2 of section 14.1.2.3. + Returns zero if no argument is found that satisfies rule 2, nonzero + otherwise. + + This test is also not symmetric in f1 and f2 and must be called + twice. This test finds problems caused by sorting the actual + argument list with keywords. For example: + + INTERFACE FOO + SUBROUTINE F1(A, B) + INTEGER :: A ; REAL :: B + END SUBROUTINE F1 + + SUBROUTINE F2(B, A) + INTEGER :: A ; REAL :: B + END SUBROUTINE F1 + END INTERFACE FOO + + At this point, 'CALL FOO(A=1, B=1.0)' is ambiguous. */ + +static int +generic_correspondence (gfc_formal_arglist *f1, gfc_formal_arglist *f2) +{ + gfc_formal_arglist *f2_save, *g; + gfc_symbol *sym; + + f2_save = f2; + + while (f1) + { + if (f1->sym->attr.optional) + goto next; + + if (f2 != NULL && compare_type_rank (f1->sym, f2->sym)) + goto next; + + /* Now search for a disambiguating keyword argument starting at + the current non-match. */ + for (g = f1; g; g = g->next) + { + if (g->sym->attr.optional) + continue; + + sym = find_keyword_arg (g->sym->name, f2_save); + if (sym == NULL || !compare_type_rank (g->sym, sym)) + return 1; + } + + next: + f1 = f1->next; + if (f2 != NULL) + f2 = f2->next; + } + + return 0; +} + + +/* 'Compare' two formal interfaces associated with a pair of symbols. + We return nonzero if there exists an actual argument list that + would be ambiguous between the two interfaces, zero otherwise. */ + +int +gfc_compare_interfaces (gfc_symbol *s1, gfc_symbol *s2, int generic_flag) +{ + gfc_formal_arglist *f1, *f2; + + if (s1->attr.function != s2->attr.function + || s1->attr.subroutine != s2->attr.subroutine) + return 0; /* Disagreement between function/subroutine. */ + + f1 = s1->formal; + f2 = s2->formal; + + if (f1 == NULL && f2 == NULL) + return 1; /* Special case. */ + + if (count_types_test (f1, f2)) + return 0; + if (count_types_test (f2, f1)) + return 0; + + if (generic_flag) + { + if (generic_correspondence (f1, f2)) + return 0; + if (generic_correspondence (f2, f1)) + return 0; + } + else + { + if (operator_correspondence (f1, f2)) + return 0; + } + + return 1; +} + + +static int +compare_intr_interfaces (gfc_symbol *s1, gfc_symbol *s2) +{ + gfc_formal_arglist *f, *f1; + gfc_intrinsic_arg *fi, *f2; + gfc_intrinsic_sym *isym; + + if (s1->attr.function != s2->attr.function + || s1->attr.subroutine != s2->attr.subroutine) + return 0; /* Disagreement between function/subroutine. */ + + /* If the arguments are functions, check type and kind. */ + + if (s1->attr.dummy && s1->attr.function && s2->attr.function) + { + if (s1->ts.type != s2->ts.type) + return 0; + if (s1->ts.kind != s2->ts.kind) + return 0; + if (s1->attr.if_source == IFSRC_DECL) + return 1; + } + + isym = gfc_find_function (s2->name); + + /* This should already have been checked in + resolve.c (resolve_actual_arglist). */ + gcc_assert (isym); + + f1 = s1->formal; + f2 = isym->formal; + + /* Special case. */ + if (f1 == NULL && f2 == NULL) + return 1; + + /* First scan through the formal argument list and check the intrinsic. */ + fi = f2; + for (f = f1; f; f = f->next) + { + if (fi == NULL) + return 0; + if ((fi->ts.type != f->sym->ts.type) || (fi->ts.kind != f->sym->ts.kind)) + return 0; + fi = fi->next; + } + + /* Now scan through the intrinsic argument list and check the formal. */ + f = f1; + for (fi = f2; fi; fi = fi->next) + { + if (f == NULL) + return 0; + if ((fi->ts.type != f->sym->ts.type) || (fi->ts.kind != f->sym->ts.kind)) + return 0; + f = f->next; + } + + return 1; +} + + +/* Compare an actual argument list with an intrinsic argument list. */ + +static int +compare_actual_formal_intr (gfc_actual_arglist **ap, gfc_symbol *s2) +{ + gfc_actual_arglist *a; + gfc_intrinsic_arg *fi, *f2; + gfc_intrinsic_sym *isym; + + isym = gfc_find_function (s2->name); + + /* This should already have been checked in + resolve.c (resolve_actual_arglist). */ + gcc_assert (isym); + + f2 = isym->formal; + + /* Special case. */ + if (*ap == NULL && f2 == NULL) + return 1; + + /* First scan through the actual argument list and check the intrinsic. */ + fi = f2; + for (a = *ap; a; a = a->next) + { + if (fi == NULL) + return 0; + if ((fi->ts.type != a->expr->ts.type) + || (fi->ts.kind != a->expr->ts.kind)) + return 0; + fi = fi->next; + } + + /* Now scan through the intrinsic argument list and check the formal. */ + a = *ap; + for (fi = f2; fi; fi = fi->next) + { + if (a == NULL) + return 0; + if ((fi->ts.type != a->expr->ts.type) + || (fi->ts.kind != a->expr->ts.kind)) + return 0; + a = a->next; + } + + return 1; +} + + +/* Given a pointer to an interface pointer, remove duplicate + interfaces and make sure that all symbols are either functions or + subroutines. Returns nonzero if something goes wrong. */ + +static int +check_interface0 (gfc_interface *p, const char *interface_name) +{ + gfc_interface *psave, *q, *qlast; + + psave = p; + /* Make sure all symbols in the interface have been defined as + functions or subroutines. */ + for (; p; p = p->next) + if ((!p->sym->attr.function && !p->sym->attr.subroutine) + || !p->sym->attr.if_source) + { + if (p->sym->attr.external) + gfc_error ("Procedure '%s' in %s at %L has no explicit interface", + p->sym->name, interface_name, &p->sym->declared_at); + else + gfc_error ("Procedure '%s' in %s at %L is neither function nor " + "subroutine", p->sym->name, interface_name, + &p->sym->declared_at); + return 1; + } + p = psave; + + /* Remove duplicate interfaces in this interface list. */ + for (; p; p = p->next) + { + qlast = p; + + for (q = p->next; q;) + { + if (p->sym != q->sym) + { + qlast = q; + q = q->next; + } + else + { + /* Duplicate interface. */ + qlast->next = q->next; + gfc_free (q); + q = qlast->next; + } + } + } + + return 0; +} + + +/* Check lists of interfaces to make sure that no two interfaces are + ambiguous. Duplicate interfaces (from the same symbol) are OK here. */ + +static int +check_interface1 (gfc_interface *p, gfc_interface *q0, + int generic_flag, const char *interface_name, + bool referenced) +{ + gfc_interface *q; + for (; p; p = p->next) + for (q = q0; q; q = q->next) + { + if (p->sym == q->sym) + continue; /* Duplicates OK here. */ + + if (p->sym->name == q->sym->name && p->sym->module == q->sym->module) + continue; + + if (gfc_compare_interfaces (p->sym, q->sym, generic_flag)) + { + if (referenced) + { + gfc_error ("Ambiguous interfaces '%s' and '%s' in %s at %L", + p->sym->name, q->sym->name, interface_name, + &p->where); + } + + if (!p->sym->attr.use_assoc && q->sym->attr.use_assoc) + gfc_warning ("Ambiguous interfaces '%s' and '%s' in %s at %L", + p->sym->name, q->sym->name, interface_name, + &p->where); + return 1; + } + } + return 0; +} + + +/* Check the generic and operator interfaces of symbols to make sure + that none of the interfaces conflict. The check has to be done + after all of the symbols are actually loaded. */ + +static void +check_sym_interfaces (gfc_symbol *sym) +{ + char interface_name[100]; + bool k; + gfc_interface *p; + + if (sym->ns != gfc_current_ns) + return; + + if (sym->generic != NULL) + { + sprintf (interface_name, "generic interface '%s'", sym->name); + if (check_interface0 (sym->generic, interface_name)) + return; + + for (p = sym->generic; p; p = p->next) + { + if (p->sym->attr.mod_proc + && (p->sym->attr.if_source != IFSRC_DECL + || p->sym->attr.procedure)) + { + gfc_error ("'%s' at %L is not a module procedure", + p->sym->name, &p->where); + return; + } + } + + /* Originally, this test was applied to host interfaces too; + this is incorrect since host associated symbols, from any + source, cannot be ambiguous with local symbols. */ + k = sym->attr.referenced || !sym->attr.use_assoc; + if (check_interface1 (sym->generic, sym->generic, 1, interface_name, k)) + sym->attr.ambiguous_interfaces = 1; + } +} + + +static void +check_uop_interfaces (gfc_user_op *uop) +{ + char interface_name[100]; + gfc_user_op *uop2; + gfc_namespace *ns; + + sprintf (interface_name, "operator interface '%s'", uop->name); + if (check_interface0 (uop->op, interface_name)) + return; + + for (ns = gfc_current_ns; ns; ns = ns->parent) + { + uop2 = gfc_find_uop (uop->name, ns); + if (uop2 == NULL) + continue; + + check_interface1 (uop->op, uop2->op, 0, + interface_name, true); + } +} + + +/* For the namespace, check generic, user operator and intrinsic + operator interfaces for consistency and to remove duplicate + interfaces. We traverse the whole namespace, counting on the fact + that most symbols will not have generic or operator interfaces. */ + +void +gfc_check_interfaces (gfc_namespace *ns) +{ + gfc_namespace *old_ns, *ns2; + char interface_name[100]; + gfc_intrinsic_op i; + + old_ns = gfc_current_ns; + gfc_current_ns = ns; + + gfc_traverse_ns (ns, check_sym_interfaces); + + gfc_traverse_user_op (ns, check_uop_interfaces); + + for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++) + { + if (i == INTRINSIC_USER) + continue; + + if (i == INTRINSIC_ASSIGN) + strcpy (interface_name, "intrinsic assignment operator"); + else + sprintf (interface_name, "intrinsic '%s' operator", + gfc_op2string (i)); + + if (check_interface0 (ns->op[i], interface_name)) + continue; + + check_operator_interface (ns->op[i], i); + + for (ns2 = ns; ns2; ns2 = ns2->parent) + { + if (check_interface1 (ns->op[i], ns2->op[i], 0, + interface_name, true)) + goto done; + + switch (i) + { + case INTRINSIC_EQ: + if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_EQ_OS], + 0, interface_name, true)) goto done; + break; + + case INTRINSIC_EQ_OS: + if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_EQ], + 0, interface_name, true)) goto done; + break; + + case INTRINSIC_NE: + if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_NE_OS], + 0, interface_name, true)) goto done; + break; + + case INTRINSIC_NE_OS: + if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_NE], + 0, interface_name, true)) goto done; + break; + + case INTRINSIC_GT: + if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GT_OS], + 0, interface_name, true)) goto done; + break; + + case INTRINSIC_GT_OS: + if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GT], + 0, interface_name, true)) goto done; + break; + + case INTRINSIC_GE: + if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GE_OS], + 0, interface_name, true)) goto done; + break; + + case INTRINSIC_GE_OS: + if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_GE], + 0, interface_name, true)) goto done; + break; + + case INTRINSIC_LT: + if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LT_OS], + 0, interface_name, true)) goto done; + break; + + case INTRINSIC_LT_OS: + if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LT], + 0, interface_name, true)) goto done; + break; + + case INTRINSIC_LE: + if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LE_OS], + 0, interface_name, true)) goto done; + break; + + case INTRINSIC_LE_OS: + if (check_interface1 (ns->op[i], ns2->op[INTRINSIC_LE], + 0, interface_name, true)) goto done; + break; + + default: + break; + } + } + } + +done: + gfc_current_ns = old_ns; +} + + +static int +symbol_rank (gfc_symbol *sym) +{ + return (sym->as == NULL) ? 0 : sym->as->rank; +} + + +/* Given a symbol of a formal argument list and an expression, if the + formal argument is allocatable, check that the actual argument is + allocatable. Returns nonzero if compatible, zero if not compatible. */ + +static int +compare_allocatable (gfc_symbol *formal, gfc_expr *actual) +{ + symbol_attribute attr; + + if (formal->attr.allocatable) + { + attr = gfc_expr_attr (actual); + if (!attr.allocatable) + return 0; + } + + return 1; +} + + +/* Given a symbol of a formal argument list and an expression, if the + formal argument is a pointer, see if the actual argument is a + pointer. Returns nonzero if compatible, zero if not compatible. */ + +static int +compare_pointer (gfc_symbol *formal, gfc_expr *actual) +{ + symbol_attribute attr; + + if (formal->attr.pointer) + { + attr = gfc_expr_attr (actual); + if (!attr.pointer) + return 0; + } + + return 1; +} + + +/* Given a symbol of a formal argument list and an expression, see if + the two are compatible as arguments. Returns nonzero if + compatible, zero if not compatible. */ + +static int +compare_parameter (gfc_symbol *formal, gfc_expr *actual, + int ranks_must_agree, int is_elemental, locus *where) +{ + gfc_ref *ref; + bool rank_check; + + /* If the formal arg has type BT_VOID, it's to one of the iso_c_binding + procs c_f_pointer or c_f_procpointer, and we need to accept most + pointers the user could give us. This should allow that. */ + if (formal->ts.type == BT_VOID) + return 1; + + if (formal->ts.type == BT_DERIVED + && formal->ts.derived && formal->ts.derived->ts.is_iso_c + && actual->ts.type == BT_DERIVED + && actual->ts.derived && actual->ts.derived->ts.is_iso_c) + return 1; + + if (actual->ts.type == BT_PROCEDURE) + { + if (formal->attr.flavor != FL_PROCEDURE) + goto proc_fail; + + if (formal->attr.function + && !compare_type_rank (formal, actual->symtree->n.sym)) + goto proc_fail; + + if (formal->attr.if_source == IFSRC_UNKNOWN + || actual->symtree->n.sym->attr.external) + return 1; /* Assume match. */ + + if (actual->symtree->n.sym->attr.intrinsic) + { + if (!compare_intr_interfaces (formal, actual->symtree->n.sym)) + goto proc_fail; + } + else if (!gfc_compare_interfaces (formal, actual->symtree->n.sym, 0)) + goto proc_fail; + + return 1; + + proc_fail: + if (where) + gfc_error ("Type/rank mismatch in argument '%s' at %L", + formal->name, &actual->where); + return 0; + } + + if ((actual->expr_type != EXPR_NULL || actual->ts.type != BT_UNKNOWN) + && !gfc_compare_types (&formal->ts, &actual->ts)) + { + if (where) + gfc_error ("Type mismatch in argument '%s' at %L; passed %s to %s", + formal->name, &actual->where, gfc_typename (&actual->ts), + gfc_typename (&formal->ts)); + return 0; + } + + if (symbol_rank (formal) == actual->rank) + return 1; + + rank_check = where != NULL && !is_elemental && formal->as + && (formal->as->type == AS_ASSUMED_SHAPE + || formal->as->type == AS_DEFERRED); + + if (rank_check || ranks_must_agree || formal->attr.pointer + || (actual->rank != 0 && !(is_elemental || formal->attr.dimension)) + || (actual->rank == 0 && formal->as->type == AS_ASSUMED_SHAPE)) + { + if (where) + gfc_error ("Rank mismatch in argument '%s' at %L (%d and %d)", + formal->name, &actual->where, symbol_rank (formal), + actual->rank); + return 0; + } + else if (actual->rank != 0 && (is_elemental || formal->attr.dimension)) + return 1; + + /* At this point, we are considering a scalar passed to an array. This + is valid (cf. F95 12.4.1.1; F2003 12.4.1.2), + - if the actual argument is (a substring of) an element of a + non-assumed-shape/non-pointer array; + - (F2003) if the actual argument is of type character. */ + + for (ref = actual->ref; ref; ref = ref->next) + if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT) + break; + + /* Not an array element. */ + if (formal->ts.type == BT_CHARACTER + && (ref == NULL + || (actual->expr_type == EXPR_VARIABLE + && (actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE + || actual->symtree->n.sym->attr.pointer)))) + { + if (where && (gfc_option.allow_std & GFC_STD_F2003) == 0) + { + gfc_error ("Fortran 2003: Scalar CHARACTER actual argument with " + "array dummy argument '%s' at %L", + formal->name, &actual->where); + return 0; + } + else if ((gfc_option.allow_std & GFC_STD_F2003) == 0) + return 0; + else + return 1; + } + else if (ref == NULL) + { + if (where) + gfc_error ("Rank mismatch in argument '%s' at %L (%d and %d)", + formal->name, &actual->where, symbol_rank (formal), + actual->rank); + return 0; + } + + if (actual->expr_type == EXPR_VARIABLE + && actual->symtree->n.sym->as + && (actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE + || actual->symtree->n.sym->attr.pointer)) + { + if (where) + gfc_error ("Element of assumed-shaped array passed to dummy " + "argument '%s' at %L", formal->name, &actual->where); + return 0; + } + + return 1; +} + + +/* Given a symbol of a formal argument list and an expression, see if + the two are compatible as arguments. Returns nonzero if + compatible, zero if not compatible. */ + +static int +compare_parameter_protected (gfc_symbol *formal, gfc_expr *actual) +{ + if (actual->expr_type != EXPR_VARIABLE) + return 1; + + if (!actual->symtree->n.sym->attr.is_protected) + return 1; + + if (!actual->symtree->n.sym->attr.use_assoc) + return 1; + + if (formal->attr.intent == INTENT_IN + || formal->attr.intent == INTENT_UNKNOWN) + return 1; + + if (!actual->symtree->n.sym->attr.pointer) + return 0; + + if (actual->symtree->n.sym->attr.pointer && formal->attr.pointer) + return 0; + + return 1; +} + + +/* Returns the storage size of a symbol (formal argument) or + zero if it cannot be determined. */ + +static unsigned long +get_sym_storage_size (gfc_symbol *sym) +{ + int i; + unsigned long strlen, elements; + + if (sym->ts.type == BT_CHARACTER) + { + if (sym->ts.cl && sym->ts.cl->length + && sym->ts.cl->length->expr_type == EXPR_CONSTANT) + strlen = mpz_get_ui (sym->ts.cl->length->value.integer); + else + return 0; + } + else + strlen = 1; + + if (symbol_rank (sym) == 0) + return strlen; + + elements = 1; + if (sym->as->type != AS_EXPLICIT) + return 0; + for (i = 0; i < sym->as->rank; i++) + { + if (!sym->as || sym->as->upper[i]->expr_type != EXPR_CONSTANT + || sym->as->lower[i]->expr_type != EXPR_CONSTANT) + return 0; + + elements *= mpz_get_ui (sym->as->upper[i]->value.integer) + - mpz_get_ui (sym->as->lower[i]->value.integer) + 1L; + } + + return strlen*elements; +} + + +/* Returns the storage size of an expression (actual argument) or + zero if it cannot be determined. For an array element, it returns + the remaining size as the element sequence consists of all storage + units of the actual argument up to the end of the array. */ + +static unsigned long +get_expr_storage_size (gfc_expr *e) +{ + int i; + long int strlen, elements; + long int substrlen = 0; + bool is_str_storage = false; + gfc_ref *ref; + + if (e == NULL) + return 0; + + if (e->ts.type == BT_CHARACTER) + { + if (e->ts.cl && e->ts.cl->length + && e->ts.cl->length->expr_type == EXPR_CONSTANT) + strlen = mpz_get_si (e->ts.cl->length->value.integer); + else if (e->expr_type == EXPR_CONSTANT + && (e->ts.cl == NULL || e->ts.cl->length == NULL)) + strlen = e->value.character.length; + else + return 0; + } + else + strlen = 1; /* Length per element. */ + + if (e->rank == 0 && !e->ref) + return strlen; + + elements = 1; + if (!e->ref) + { + if (!e->shape) + return 0; + for (i = 0; i < e->rank; i++) + elements *= mpz_get_si (e->shape[i]); + return elements*strlen; + } + + for (ref = e->ref; ref; ref = ref->next) + { + if (ref->type == REF_SUBSTRING && ref->u.ss.start + && ref->u.ss.start->expr_type == EXPR_CONSTANT) + { + if (is_str_storage) + { + /* The string length is the substring length. + Set now to full string length. */ + if (ref->u.ss.length == NULL + || ref->u.ss.length->length->expr_type != EXPR_CONSTANT) + return 0; + + strlen = mpz_get_ui (ref->u.ss.length->length->value.integer); + } + substrlen = strlen - mpz_get_ui (ref->u.ss.start->value.integer) + 1; + continue; + } + + if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION + && ref->u.ar.start && ref->u.ar.end && ref->u.ar.stride + && ref->u.ar.as->upper) + for (i = 0; i < ref->u.ar.dimen; i++) + { + long int start, end, stride; + stride = 1; + + if (ref->u.ar.stride[i]) + { + if (ref->u.ar.stride[i]->expr_type == EXPR_CONSTANT) + stride = mpz_get_si (ref->u.ar.stride[i]->value.integer); + else + return 0; + } + + if (ref->u.ar.start[i]) + { + if (ref->u.ar.start[i]->expr_type == EXPR_CONSTANT) + start = mpz_get_si (ref->u.ar.start[i]->value.integer); + else + return 0; + } + else if (ref->u.ar.as->lower[i] + && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT) + start = mpz_get_si (ref->u.ar.as->lower[i]->value.integer); + else + return 0; + + if (ref->u.ar.end[i]) + { + if (ref->u.ar.end[i]->expr_type == EXPR_CONSTANT) + end = mpz_get_si (ref->u.ar.end[i]->value.integer); + else + return 0; + } + else if (ref->u.ar.as->upper[i] + && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT) + end = mpz_get_si (ref->u.ar.as->upper[i]->value.integer); + else + return 0; + + elements *= (end - start)/stride + 1L; + } + else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_FULL + && ref->u.ar.as->lower && ref->u.ar.as->upper) + for (i = 0; i < ref->u.ar.as->rank; i++) + { + if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i] + && ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT + && ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT) + elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer) + - mpz_get_si (ref->u.ar.as->lower[i]->value.integer) + + 1L; + else + return 0; + } + else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT + && e->expr_type == EXPR_VARIABLE) + { + if (e->symtree->n.sym->as->type == AS_ASSUMED_SHAPE + || e->symtree->n.sym->attr.pointer) + { + elements = 1; + continue; + } + + /* Determine the number of remaining elements in the element + sequence for array element designators. */ + is_str_storage = true; + for (i = ref->u.ar.dimen - 1; i >= 0; i--) + { + if (ref->u.ar.start[i] == NULL + || ref->u.ar.start[i]->expr_type != EXPR_CONSTANT + || ref->u.ar.as->upper[i] == NULL + || ref->u.ar.as->lower[i] == NULL + || ref->u.ar.as->upper[i]->expr_type != EXPR_CONSTANT + || ref->u.ar.as->lower[i]->expr_type != EXPR_CONSTANT) + return 0; + + elements + = elements + * (mpz_get_si (ref->u.ar.as->upper[i]->value.integer) + - mpz_get_si (ref->u.ar.as->lower[i]->value.integer) + + 1L) + - (mpz_get_si (ref->u.ar.start[i]->value.integer) + - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)); + } + } + else + return 0; + } + + if (substrlen) + return (is_str_storage) ? substrlen + (elements-1)*strlen + : elements*strlen; + else + return elements*strlen; +} + + +/* Given an expression, check whether it is an array section + which has a vector subscript. If it has, one is returned, + otherwise zero. */ + +static int +has_vector_subscript (gfc_expr *e) +{ + int i; + gfc_ref *ref; + + if (e == NULL || e->rank == 0 || e->expr_type != EXPR_VARIABLE) + return 0; + + for (ref = e->ref; ref; ref = ref->next) + if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION) + for (i = 0; i < ref->u.ar.dimen; i++) + if (ref->u.ar.dimen_type[i] == DIMEN_VECTOR) + return 1; + + return 0; +} + + +/* Given formal and actual argument lists, see if they are compatible. + If they are compatible, the actual argument list is sorted to + correspond with the formal list, and elements for missing optional + arguments are inserted. If WHERE pointer is nonnull, then we issue + errors when things don't match instead of just returning the status + code. */ + +static int +compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal, + int ranks_must_agree, int is_elemental, locus *where) +{ + gfc_actual_arglist **new_arg, *a, *actual, temp; + gfc_formal_arglist *f; + int i, n, na; + unsigned long actual_size, formal_size; + + actual = *ap; + + if (actual == NULL && formal == NULL) + return 1; + + n = 0; + for (f = formal; f; f = f->next) + n++; + + new_arg = (gfc_actual_arglist **) alloca (n * sizeof (gfc_actual_arglist *)); + + for (i = 0; i < n; i++) + new_arg[i] = NULL; + + na = 0; + f = formal; + i = 0; + + for (a = actual; a; a = a->next, f = f->next) + { + /* Look for keywords but ignore g77 extensions like %VAL. */ + if (a->name != NULL && a->name[0] != '%') + { + i = 0; + for (f = formal; f; f = f->next, i++) + { + if (f->sym == NULL) + continue; + if (strcmp (f->sym->name, a->name) == 0) + break; + } + + if (f == NULL) + { + if (where) + gfc_error ("Keyword argument '%s' at %L is not in " + "the procedure", a->name, &a->expr->where); + return 0; + } + + if (new_arg[i] != NULL) + { + if (where) + gfc_error ("Keyword argument '%s' at %L is already associated " + "with another actual argument", a->name, + &a->expr->where); + return 0; + } + } + + if (f == NULL) + { + if (where) + gfc_error ("More actual than formal arguments in procedure " + "call at %L", where); + + return 0; + } + + if (f->sym == NULL && a->expr == NULL) + goto match; + + if (f->sym == NULL) + { + if (where) + gfc_error ("Missing alternate return spec in subroutine call " + "at %L", where); + return 0; + } + + if (a->expr == NULL) + { + if (where) + gfc_error ("Unexpected alternate return spec in subroutine " + "call at %L", where); + return 0; + } + + if (!compare_parameter (f->sym, a->expr, ranks_must_agree, + is_elemental, where)) + return 0; + + /* Special case for character arguments. For allocatable, pointer + and assumed-shape dummies, the string length needs to match + exactly. */ + if (a->expr->ts.type == BT_CHARACTER + && a->expr->ts.cl && a->expr->ts.cl->length + && a->expr->ts.cl->length->expr_type == EXPR_CONSTANT + && f->sym->ts.cl && f->sym->ts.cl && f->sym->ts.cl->length + && f->sym->ts.cl->length->expr_type == EXPR_CONSTANT + && (f->sym->attr.pointer || f->sym->attr.allocatable + || (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE)) + && (mpz_cmp (a->expr->ts.cl->length->value.integer, + f->sym->ts.cl->length->value.integer) != 0)) + { + if (where && (f->sym->attr.pointer || f->sym->attr.allocatable)) + gfc_warning ("Character length mismatch (%ld/%ld) between actual " + "argument and pointer or allocatable dummy argument " + "'%s' at %L", + mpz_get_si (a->expr->ts.cl->length->value.integer), + mpz_get_si (f->sym->ts.cl->length->value.integer), + f->sym->name, &a->expr->where); + else if (where) + gfc_warning ("Character length mismatch (%ld/%ld) between actual " + "argument and assumed-shape dummy argument '%s' " + "at %L", + mpz_get_si (a->expr->ts.cl->length->value.integer), + mpz_get_si (f->sym->ts.cl->length->value.integer), + f->sym->name, &a->expr->where); + return 0; + } + + actual_size = get_expr_storage_size (a->expr); + formal_size = get_sym_storage_size (f->sym); + if (actual_size != 0 + && actual_size < formal_size + && a->expr->ts.type != BT_PROCEDURE) + { + if (a->expr->ts.type == BT_CHARACTER && !f->sym->as && where) + gfc_warning ("Character length of actual argument shorter " + "than of dummy argument '%s' (%lu/%lu) at %L", + f->sym->name, actual_size, formal_size, + &a->expr->where); + else if (where) + gfc_warning ("Actual argument contains too few " + "elements for dummy argument '%s' (%lu/%lu) at %L", + f->sym->name, actual_size, formal_size, + &a->expr->where); + return 0; + } + + /* Satisfy 12.4.1.3 by ensuring that a procedure pointer actual argument + is provided for a procedure pointer formal argument. */ + if (f->sym->attr.proc_pointer + && !a->expr->symtree->n.sym->attr.proc_pointer) + { + if (where) + gfc_error ("Expected a procedure pointer for argument '%s' at %L", + f->sym->name, &a->expr->where); + return 0; + } + + /* Satisfy 12.4.1.2 by ensuring that a procedure actual argument is + provided for a procedure formal argument. */ + if (a->expr->ts.type != BT_PROCEDURE + && a->expr->expr_type == EXPR_VARIABLE + && f->sym->attr.flavor == FL_PROCEDURE) + { + if (where) + gfc_error ("Expected a procedure for argument '%s' at %L", + f->sym->name, &a->expr->where); + return 0; + } + + if (f->sym->attr.flavor == FL_PROCEDURE && f->sym->attr.pure + && a->expr->ts.type == BT_PROCEDURE + && !a->expr->symtree->n.sym->attr.pure) + { + if (where) + gfc_error ("Expected a PURE procedure for argument '%s' at %L", + f->sym->name, &a->expr->where); + return 0; + } + + if (f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE + && a->expr->expr_type == EXPR_VARIABLE + && a->expr->symtree->n.sym->as + && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE + && (a->expr->ref == NULL + || (a->expr->ref->type == REF_ARRAY + && a->expr->ref->u.ar.type == AR_FULL))) + { + if (where) + gfc_error ("Actual argument for '%s' cannot be an assumed-size" + " array at %L", f->sym->name, where); + return 0; + } + + if (a->expr->expr_type != EXPR_NULL + && compare_pointer (f->sym, a->expr) == 0) + { + if (where) + gfc_error ("Actual argument for '%s' must be a pointer at %L", + f->sym->name, &a->expr->where); + return 0; + } + + if (a->expr->expr_type != EXPR_NULL + && compare_allocatable (f->sym, a->expr) == 0) + { + if (where) + gfc_error ("Actual argument for '%s' must be ALLOCATABLE at %L", + f->sym->name, &a->expr->where); + return 0; + } + + /* Check intent = OUT/INOUT for definable actual argument. */ + if ((a->expr->expr_type != EXPR_VARIABLE + || (a->expr->symtree->n.sym->attr.flavor != FL_VARIABLE + && a->expr->symtree->n.sym->attr.flavor != FL_PROCEDURE)) + && (f->sym->attr.intent == INTENT_OUT + || f->sym->attr.intent == INTENT_INOUT)) + { + if (where) + gfc_error ("Actual argument at %L must be definable as " + "the dummy argument '%s' is INTENT = OUT/INOUT", + &a->expr->where, f->sym->name); + return 0; + } + + if (!compare_parameter_protected(f->sym, a->expr)) + { + if (where) + gfc_error ("Actual argument at %L is use-associated with " + "PROTECTED attribute and dummy argument '%s' is " + "INTENT = OUT/INOUT", + &a->expr->where,f->sym->name); + return 0; + } + + if ((f->sym->attr.intent == INTENT_OUT + || f->sym->attr.intent == INTENT_INOUT + || f->sym->attr.volatile_) + && has_vector_subscript (a->expr)) + { + if (where) + gfc_error ("Array-section actual argument with vector subscripts " + "at %L is incompatible with INTENT(OUT), INTENT(INOUT) " + "or VOLATILE attribute of the dummy argument '%s'", + &a->expr->where, f->sym->name); + return 0; + } + + /* C1232 (R1221) For an actual argument which is an array section or + an assumed-shape array, the dummy argument shall be an assumed- + shape array, if the dummy argument has the VOLATILE attribute. */ + + if (f->sym->attr.volatile_ + && a->expr->symtree->n.sym->as + && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SHAPE + && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE)) + { + if (where) + gfc_error ("Assumed-shape actual argument at %L is " + "incompatible with the non-assumed-shape " + "dummy argument '%s' due to VOLATILE attribute", + &a->expr->where,f->sym->name); + return 0; + } + + if (f->sym->attr.volatile_ + && a->expr->ref && a->expr->ref->u.ar.type == AR_SECTION + && !(f->sym->as && f->sym->as->type == AS_ASSUMED_SHAPE)) + { + if (where) + gfc_error ("Array-section actual argument at %L is " + "incompatible with the non-assumed-shape " + "dummy argument '%s' due to VOLATILE attribute", + &a->expr->where,f->sym->name); + return 0; + } + + /* C1233 (R1221) For an actual argument which is a pointer array, the + dummy argument shall be an assumed-shape or pointer array, if the + dummy argument has the VOLATILE attribute. */ + + if (f->sym->attr.volatile_ + && a->expr->symtree->n.sym->attr.pointer + && a->expr->symtree->n.sym->as + && !(f->sym->as + && (f->sym->as->type == AS_ASSUMED_SHAPE + || f->sym->attr.pointer))) + { + if (where) + gfc_error ("Pointer-array actual argument at %L requires " + "an assumed-shape or pointer-array dummy " + "argument '%s' due to VOLATILE attribute", + &a->expr->where,f->sym->name); + return 0; + } + + match: + if (a == actual) + na = i; + + new_arg[i++] = a; + } + + /* Make sure missing actual arguments are optional. */ + i = 0; + for (f = formal; f; f = f->next, i++) + { + if (new_arg[i] != NULL) + continue; + if (f->sym == NULL) + { + if (where) + gfc_error ("Missing alternate return spec in subroutine call " + "at %L", where); + return 0; + } + if (!f->sym->attr.optional) + { + if (where) + gfc_error ("Missing actual argument for argument '%s' at %L", + f->sym->name, where); + return 0; + } + } + + /* The argument lists are compatible. We now relink a new actual + argument list with null arguments in the right places. The head + of the list remains the head. */ + for (i = 0; i < n; i++) + if (new_arg[i] == NULL) + new_arg[i] = gfc_get_actual_arglist (); + + if (na != 0) + { + temp = *new_arg[0]; + *new_arg[0] = *actual; + *actual = temp; + + a = new_arg[0]; + new_arg[0] = new_arg[na]; + new_arg[na] = a; + } + + for (i = 0; i < n - 1; i++) + new_arg[i]->next = new_arg[i + 1]; + + new_arg[i]->next = NULL; + + if (*ap == NULL && n > 0) + *ap = new_arg[0]; + + /* Note the types of omitted optional arguments. */ + for (a = *ap, f = formal; a; a = a->next, f = f->next) + if (a->expr == NULL && a->label == NULL) + a->missing_arg_type = f->sym->ts.type; + + return 1; +} + + +typedef struct +{ + gfc_formal_arglist *f; + gfc_actual_arglist *a; +} +argpair; + +/* qsort comparison function for argument pairs, with the following + order: + - p->a->expr == NULL + - p->a->expr->expr_type != EXPR_VARIABLE + - growing p->a->expr->symbol. */ + +static int +pair_cmp (const void *p1, const void *p2) +{ + const gfc_actual_arglist *a1, *a2; + + /* *p1 and *p2 are elements of the to-be-sorted array. */ + a1 = ((const argpair *) p1)->a; + a2 = ((const argpair *) p2)->a; + if (!a1->expr) + { + if (!a2->expr) + return 0; + return -1; + } + if (!a2->expr) + return 1; + if (a1->expr->expr_type != EXPR_VARIABLE) + { + if (a2->expr->expr_type != EXPR_VARIABLE) + return 0; + return -1; + } + if (a2->expr->expr_type != EXPR_VARIABLE) + return 1; + return a1->expr->symtree->n.sym < a2->expr->symtree->n.sym; +} + + +/* Given two expressions from some actual arguments, test whether they + refer to the same expression. The analysis is conservative. + Returning FAILURE will produce no warning. */ + +static gfc_try +compare_actual_expr (gfc_expr *e1, gfc_expr *e2) +{ + const gfc_ref *r1, *r2; + + if (!e1 || !e2 + || e1->expr_type != EXPR_VARIABLE + || e2->expr_type != EXPR_VARIABLE + || e1->symtree->n.sym != e2->symtree->n.sym) + return FAILURE; + + /* TODO: improve comparison, see expr.c:show_ref(). */ + for (r1 = e1->ref, r2 = e2->ref; r1 && r2; r1 = r1->next, r2 = r2->next) + { + if (r1->type != r2->type) + return FAILURE; + switch (r1->type) + { + case REF_ARRAY: + if (r1->u.ar.type != r2->u.ar.type) + return FAILURE; + /* TODO: At the moment, consider only full arrays; + we could do better. */ + if (r1->u.ar.type != AR_FULL || r2->u.ar.type != AR_FULL) + return FAILURE; + break; + + case REF_COMPONENT: + if (r1->u.c.component != r2->u.c.component) + return FAILURE; + break; + + case REF_SUBSTRING: + return FAILURE; + + default: + gfc_internal_error ("compare_actual_expr(): Bad component code"); + } + } + if (!r1 && !r2) + return SUCCESS; + return FAILURE; +} + + +/* Given formal and actual argument lists that correspond to one + another, check that identical actual arguments aren't not + associated with some incompatible INTENTs. */ + +static gfc_try +check_some_aliasing (gfc_formal_arglist *f, gfc_actual_arglist *a) +{ + sym_intent f1_intent, f2_intent; + gfc_formal_arglist *f1; + gfc_actual_arglist *a1; + size_t n, i, j; + argpair *p; + gfc_try t = SUCCESS; + + n = 0; + for (f1 = f, a1 = a;; f1 = f1->next, a1 = a1->next) + { + if (f1 == NULL && a1 == NULL) + break; + if (f1 == NULL || a1 == NULL) + gfc_internal_error ("check_some_aliasing(): List mismatch"); + n++; + } + if (n == 0) + return t; + p = (argpair *) alloca (n * sizeof (argpair)); + + for (i = 0, f1 = f, a1 = a; i < n; i++, f1 = f1->next, a1 = a1->next) + { + p[i].f = f1; + p[i].a = a1; + } + + qsort (p, n, sizeof (argpair), pair_cmp); + + for (i = 0; i < n; i++) + { + if (!p[i].a->expr + || p[i].a->expr->expr_type != EXPR_VARIABLE + || p[i].a->expr->ts.type == BT_PROCEDURE) + continue; + f1_intent = p[i].f->sym->attr.intent; + for (j = i + 1; j < n; j++) + { + /* Expected order after the sort. */ + if (!p[j].a->expr || p[j].a->expr->expr_type != EXPR_VARIABLE) + gfc_internal_error ("check_some_aliasing(): corrupted data"); + + /* Are the expression the same? */ + if (compare_actual_expr (p[i].a->expr, p[j].a->expr) == FAILURE) + break; + f2_intent = p[j].f->sym->attr.intent; + if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT) + || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN)) + { + gfc_warning ("Same actual argument associated with INTENT(%s) " + "argument '%s' and INTENT(%s) argument '%s' at %L", + gfc_intent_string (f1_intent), p[i].f->sym->name, + gfc_intent_string (f2_intent), p[j].f->sym->name, + &p[i].a->expr->where); + t = FAILURE; + } + } + } + + return t; +} + + +/* Given a symbol of a formal argument list and an expression, + return nonzero if their intents are compatible, zero otherwise. */ + +static int +compare_parameter_intent (gfc_symbol *formal, gfc_expr *actual) +{ + if (actual->symtree->n.sym->attr.pointer && !formal->attr.pointer) + return 1; + + if (actual->symtree->n.sym->attr.intent != INTENT_IN) + return 1; + + if (formal->attr.intent == INTENT_INOUT || formal->attr.intent == INTENT_OUT) + return 0; + + return 1; +} + + +/* Given formal and actual argument lists that correspond to one + another, check that they are compatible in the sense that intents + are not mismatched. */ + +static gfc_try +check_intents (gfc_formal_arglist *f, gfc_actual_arglist *a) +{ + sym_intent f_intent; + + for (;; f = f->next, a = a->next) + { + if (f == NULL && a == NULL) + break; + if (f == NULL || a == NULL) + gfc_internal_error ("check_intents(): List mismatch"); + + if (a->expr == NULL || a->expr->expr_type != EXPR_VARIABLE) + continue; + + f_intent = f->sym->attr.intent; + + if (!compare_parameter_intent(f->sym, a->expr)) + { + gfc_error ("Procedure argument at %L is INTENT(IN) while interface " + "specifies INTENT(%s)", &a->expr->where, + gfc_intent_string (f_intent)); + return FAILURE; + } + + if (gfc_pure (NULL) && gfc_impure_variable (a->expr->symtree->n.sym)) + { + if (f_intent == INTENT_INOUT || f_intent == INTENT_OUT) + { + gfc_error ("Procedure argument at %L is local to a PURE " + "procedure and is passed to an INTENT(%s) argument", + &a->expr->where, gfc_intent_string (f_intent)); + return FAILURE; + } + + if (f->sym->attr.pointer) + { + gfc_error ("Procedure argument at %L is local to a PURE " + "procedure and has the POINTER attribute", + &a->expr->where); + return FAILURE; + } + } + } + + return SUCCESS; +} + + +/* Check how a procedure is used against its interface. If all goes + well, the actual argument list will also end up being properly + sorted. */ + +void +gfc_procedure_use (gfc_symbol *sym, gfc_actual_arglist **ap, locus *where) +{ + + /* Warn about calls with an implicit interface. Special case + for calling a ISO_C_BINDING becase c_loc and c_funloc + are pseudo-unknown. */ + if (gfc_option.warn_implicit_interface + && sym->attr.if_source == IFSRC_UNKNOWN + && ! sym->attr.is_iso_c) + gfc_warning ("Procedure '%s' called with an implicit interface at %L", + sym->name, where); + + if (sym->ts.interface && sym->ts.interface->attr.intrinsic) + { + gfc_intrinsic_sym *isym; + isym = gfc_find_function (sym->ts.interface->name); + if (isym != NULL) + { + if (compare_actual_formal_intr (ap, sym->ts.interface)) + return; + gfc_error ("Type/rank mismatch in argument '%s' at %L", + sym->name, where); + return; + } + } + + if (sym->attr.if_source == IFSRC_UNKNOWN) + { + gfc_actual_arglist *a; + for (a = *ap; a; a = a->next) + { + /* Skip g77 keyword extensions like %VAL, %REF, %LOC. */ + if (a->name != NULL && a->name[0] != '%') + { + gfc_error("Keyword argument requires explicit interface " + "for procedure '%s' at %L", sym->name, &a->expr->where); + break; + } + } + + return; + } + + if (!compare_actual_formal (ap, sym->formal, 0, sym->attr.elemental, where)) + return; + + check_intents (sym->formal, *ap); + if (gfc_option.warn_aliasing) + check_some_aliasing (sym->formal, *ap); +} + + +/* Try if an actual argument list matches the formal list of a symbol, + respecting the symbol's attributes like ELEMENTAL. This is used for + GENERIC resolution. */ + +bool +gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym) +{ + bool r; + + gcc_assert (sym->attr.flavor == FL_PROCEDURE); + + r = !sym->attr.elemental; + if (compare_actual_formal (args, sym->formal, r, !r, NULL)) + { + check_intents (sym->formal, *args); + if (gfc_option.warn_aliasing) + check_some_aliasing (sym->formal, *args); + return true; + } + + return false; +} + + +/* Given an interface pointer and an actual argument list, search for + a formal argument list that matches the actual. If found, returns + a pointer to the symbol of the correct interface. Returns NULL if + not found. */ + +gfc_symbol * +gfc_search_interface (gfc_interface *intr, int sub_flag, + gfc_actual_arglist **ap) +{ + for (; intr; intr = intr->next) + { + if (sub_flag && intr->sym->attr.function) + continue; + if (!sub_flag && intr->sym->attr.subroutine) + continue; + + if (gfc_arglist_matches_symbol (ap, intr->sym)) + return intr->sym; + } + + return NULL; +} + + +/* Do a brute force recursive search for a symbol. */ + +static gfc_symtree * +find_symtree0 (gfc_symtree *root, gfc_symbol *sym) +{ + gfc_symtree * st; + + if (root->n.sym == sym) + return root; + + st = NULL; + if (root->left) + st = find_symtree0 (root->left, sym); + if (root->right && ! st) + st = find_symtree0 (root->right, sym); + return st; +} + + +/* Find a symtree for a symbol. */ + +gfc_symtree * +gfc_find_sym_in_symtree (gfc_symbol *sym) +{ + gfc_symtree *st; + gfc_namespace *ns; + + /* First try to find it by name. */ + gfc_find_sym_tree (sym->name, gfc_current_ns, 1, &st); + if (st && st->n.sym == sym) + return st; + + /* If it's been renamed, resort to a brute-force search. */ + /* TODO: avoid having to do this search. If the symbol doesn't exist + in the symtree for the current namespace, it should probably be added. */ + for (ns = gfc_current_ns; ns; ns = ns->parent) + { + st = find_symtree0 (ns->sym_root, sym); + if (st) + return st; + } + gfc_internal_error ("Unable to find symbol %s", sym->name); + /* Not reached. */ +} + + +/* This subroutine is called when an expression is being resolved. + The expression node in question is either a user defined operator + or an intrinsic operator with arguments that aren't compatible + with the operator. This subroutine builds an actual argument list + corresponding to the operands, then searches for a compatible + interface. If one is found, the expression node is replaced with + the appropriate function call. */ + +gfc_try +gfc_extend_expr (gfc_expr *e) +{ + gfc_actual_arglist *actual; + gfc_symbol *sym; + gfc_namespace *ns; + gfc_user_op *uop; + gfc_intrinsic_op i; + + sym = NULL; + + actual = gfc_get_actual_arglist (); + actual->expr = e->value.op.op1; + + if (e->value.op.op2 != NULL) + { + actual->next = gfc_get_actual_arglist (); + actual->next->expr = e->value.op.op2; + } + + i = fold_unary (e->value.op.op); + + if (i == INTRINSIC_USER) + { + for (ns = gfc_current_ns; ns; ns = ns->parent) + { + uop = gfc_find_uop (e->value.op.uop->name, ns); + if (uop == NULL) + continue; + + sym = gfc_search_interface (uop->op, 0, &actual); + if (sym != NULL) + break; + } + } + else + { + for (ns = gfc_current_ns; ns; ns = ns->parent) + { + /* Due to the distinction between '==' and '.eq.' and friends, one has + to check if either is defined. */ + switch (i) + { + case INTRINSIC_EQ: + case INTRINSIC_EQ_OS: + sym = gfc_search_interface (ns->op[INTRINSIC_EQ], 0, &actual); + if (sym == NULL) + sym = gfc_search_interface (ns->op[INTRINSIC_EQ_OS], 0, &actual); + break; + + case INTRINSIC_NE: + case INTRINSIC_NE_OS: + sym = gfc_search_interface (ns->op[INTRINSIC_NE], 0, &actual); + if (sym == NULL) + sym = gfc_search_interface (ns->op[INTRINSIC_NE_OS], 0, &actual); + break; + + case INTRINSIC_GT: + case INTRINSIC_GT_OS: + sym = gfc_search_interface (ns->op[INTRINSIC_GT], 0, &actual); + if (sym == NULL) + sym = gfc_search_interface (ns->op[INTRINSIC_GT_OS], 0, &actual); + break; + + case INTRINSIC_GE: + case INTRINSIC_GE_OS: + sym = gfc_search_interface (ns->op[INTRINSIC_GE], 0, &actual); + if (sym == NULL) + sym = gfc_search_interface (ns->op[INTRINSIC_GE_OS], 0, &actual); + break; + + case INTRINSIC_LT: + case INTRINSIC_LT_OS: + sym = gfc_search_interface (ns->op[INTRINSIC_LT], 0, &actual); + if (sym == NULL) + sym = gfc_search_interface (ns->op[INTRINSIC_LT_OS], 0, &actual); + break; + + case INTRINSIC_LE: + case INTRINSIC_LE_OS: + sym = gfc_search_interface (ns->op[INTRINSIC_LE], 0, &actual); + if (sym == NULL) + sym = gfc_search_interface (ns->op[INTRINSIC_LE_OS], 0, &actual); + break; + + default: + sym = gfc_search_interface (ns->op[i], 0, &actual); + } + + if (sym != NULL) + break; + } + } + + if (sym == NULL) + { + /* Don't use gfc_free_actual_arglist(). */ + if (actual->next != NULL) + gfc_free (actual->next); + gfc_free (actual); + + return FAILURE; + } + + /* Change the expression node to a function call. */ + e->expr_type = EXPR_FUNCTION; + e->symtree = gfc_find_sym_in_symtree (sym); + e->value.function.actual = actual; + e->value.function.esym = NULL; + e->value.function.isym = NULL; + e->value.function.name = NULL; + e->user_operator = 1; + + if (gfc_pure (NULL) && !gfc_pure (sym)) + { + gfc_error ("Function '%s' called in lieu of an operator at %L must " + "be PURE", sym->name, &e->where); + return FAILURE; + } + + if (gfc_resolve_expr (e) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* Tries to replace an assignment code node with a subroutine call to + the subroutine associated with the assignment operator. Return + SUCCESS if the node was replaced. On FAILURE, no error is + generated. */ + +gfc_try +gfc_extend_assign (gfc_code *c, gfc_namespace *ns) +{ + gfc_actual_arglist *actual; + gfc_expr *lhs, *rhs; + gfc_symbol *sym; + + lhs = c->expr; + rhs = c->expr2; + + /* Don't allow an intrinsic assignment to be replaced. */ + if (lhs->ts.type != BT_DERIVED + && (rhs->rank == 0 || rhs->rank == lhs->rank) + && (lhs->ts.type == rhs->ts.type + || (gfc_numeric_ts (&lhs->ts) && gfc_numeric_ts (&rhs->ts)))) + return FAILURE; + + actual = gfc_get_actual_arglist (); + actual->expr = lhs; + + actual->next = gfc_get_actual_arglist (); + actual->next->expr = rhs; + + sym = NULL; + + for (; ns; ns = ns->parent) + { + sym = gfc_search_interface (ns->op[INTRINSIC_ASSIGN], 1, &actual); + if (sym != NULL) + break; + } + + if (sym == NULL) + { + gfc_free (actual->next); + gfc_free (actual); + return FAILURE; + } + + /* Replace the assignment with the call. */ + c->op = EXEC_ASSIGN_CALL; + c->symtree = gfc_find_sym_in_symtree (sym); + c->expr = NULL; + c->expr2 = NULL; + c->ext.actual = actual; + + return SUCCESS; +} + + +/* Make sure that the interface just parsed is not already present in + the given interface list. Ambiguity isn't checked yet since module + procedures can be present without interfaces. */ + +static gfc_try +check_new_interface (gfc_interface *base, gfc_symbol *new_sym) +{ + gfc_interface *ip; + + for (ip = base; ip; ip = ip->next) + { + if (ip->sym == new_sym) + { + gfc_error ("Entity '%s' at %C is already present in the interface", + new_sym->name); + return FAILURE; + } + } + + return SUCCESS; +} + + +/* Add a symbol to the current interface. */ + +gfc_try +gfc_add_interface (gfc_symbol *new_sym) +{ + gfc_interface **head, *intr; + gfc_namespace *ns; + gfc_symbol *sym; + + switch (current_interface.type) + { + case INTERFACE_NAMELESS: + case INTERFACE_ABSTRACT: + return SUCCESS; + + case INTERFACE_INTRINSIC_OP: + for (ns = current_interface.ns; ns; ns = ns->parent) + switch (current_interface.op) + { + case INTRINSIC_EQ: + case INTRINSIC_EQ_OS: + if (check_new_interface (ns->op[INTRINSIC_EQ], new_sym) == FAILURE || + check_new_interface (ns->op[INTRINSIC_EQ_OS], new_sym) == FAILURE) + return FAILURE; + break; + + case INTRINSIC_NE: + case INTRINSIC_NE_OS: + if (check_new_interface (ns->op[INTRINSIC_NE], new_sym) == FAILURE || + check_new_interface (ns->op[INTRINSIC_NE_OS], new_sym) == FAILURE) + return FAILURE; + break; + + case INTRINSIC_GT: + case INTRINSIC_GT_OS: + if (check_new_interface (ns->op[INTRINSIC_GT], new_sym) == FAILURE || + check_new_interface (ns->op[INTRINSIC_GT_OS], new_sym) == FAILURE) + return FAILURE; + break; + + case INTRINSIC_GE: + case INTRINSIC_GE_OS: + if (check_new_interface (ns->op[INTRINSIC_GE], new_sym) == FAILURE || + check_new_interface (ns->op[INTRINSIC_GE_OS], new_sym) == FAILURE) + return FAILURE; + break; + + case INTRINSIC_LT: + case INTRINSIC_LT_OS: + if (check_new_interface (ns->op[INTRINSIC_LT], new_sym) == FAILURE || + check_new_interface (ns->op[INTRINSIC_LT_OS], new_sym) == FAILURE) + return FAILURE; + break; + + case INTRINSIC_LE: + case INTRINSIC_LE_OS: + if (check_new_interface (ns->op[INTRINSIC_LE], new_sym) == FAILURE || + check_new_interface (ns->op[INTRINSIC_LE_OS], new_sym) == FAILURE) + return FAILURE; + break; + + default: + if (check_new_interface (ns->op[current_interface.op], new_sym) == FAILURE) + return FAILURE; + } + + head = ¤t_interface.ns->op[current_interface.op]; + break; + + case INTERFACE_GENERIC: + for (ns = current_interface.ns; ns; ns = ns->parent) + { + gfc_find_symbol (current_interface.sym->name, ns, 0, &sym); + if (sym == NULL) + continue; + + if (check_new_interface (sym->generic, new_sym) == FAILURE) + return FAILURE; + } + + head = ¤t_interface.sym->generic; + break; + + case INTERFACE_USER_OP: + if (check_new_interface (current_interface.uop->op, new_sym) + == FAILURE) + return FAILURE; + + head = ¤t_interface.uop->op; + break; + + default: + gfc_internal_error ("gfc_add_interface(): Bad interface type"); + } + + intr = gfc_get_interface (); + intr->sym = new_sym; + intr->where = gfc_current_locus; + + intr->next = *head; + *head = intr; + + return SUCCESS; +} + + +gfc_interface * +gfc_current_interface_head (void) +{ + switch (current_interface.type) + { + case INTERFACE_INTRINSIC_OP: + return current_interface.ns->op[current_interface.op]; + break; + + case INTERFACE_GENERIC: + return current_interface.sym->generic; + break; + + case INTERFACE_USER_OP: + return current_interface.uop->op; + break; + + default: + gcc_unreachable (); + } +} + + +void +gfc_set_current_interface_head (gfc_interface *i) +{ + switch (current_interface.type) + { + case INTERFACE_INTRINSIC_OP: + current_interface.ns->op[current_interface.op] = i; + break; + + case INTERFACE_GENERIC: + current_interface.sym->generic = i; + break; + + case INTERFACE_USER_OP: + current_interface.uop->op = i; + break; + + default: + gcc_unreachable (); + } +} + + +/* Gets rid of a formal argument list. We do not free symbols. + Symbols are freed when a namespace is freed. */ + +void +gfc_free_formal_arglist (gfc_formal_arglist *p) +{ + gfc_formal_arglist *q; + + for (; p; p = q) + { + q = p->next; + gfc_free (p); + } +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/intrinsic.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/intrinsic.c new file mode 100644 index 0000000000..481a938fed --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/intrinsic.c @@ -0,0 +1,3983 @@ +/* Build up a list of intrinsic subroutines and functions for the + name-resolution stage. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught & Katherine Holcomb + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "flags.h" +#include "gfortran.h" +#include "intrinsic.h" + +/* Namespace to hold the resolved symbols for intrinsic subroutines. */ +static gfc_namespace *gfc_intrinsic_namespace; + +int gfc_init_expr = 0; + +/* Pointers to an intrinsic function and its argument names that are being + checked. */ + +const char *gfc_current_intrinsic; +const char *gfc_current_intrinsic_arg[MAX_INTRINSIC_ARGS]; +locus *gfc_current_intrinsic_where; + +static gfc_intrinsic_sym *functions, *subroutines, *conversion, *next_sym; +static gfc_intrinsic_sym *char_conversions; +static gfc_intrinsic_arg *next_arg; + +static int nfunc, nsub, nargs, nconv, ncharconv; + +static enum +{ SZ_NOTHING = 0, SZ_SUBS, SZ_FUNCS, SZ_CONVS } +sizing; + +enum klass +{ NO_CLASS = 0, CLASS_ELEMENTAL, CLASS_INQUIRY, CLASS_TRANSFORMATIONAL }; + +#define ACTUAL_NO 0 +#define ACTUAL_YES 1 + +#define REQUIRED 0 +#define OPTIONAL 1 + + +/* Return a letter based on the passed type. Used to construct the + name of a type-dependent subroutine. */ + +char +gfc_type_letter (bt type) +{ + char c; + + switch (type) + { + case BT_LOGICAL: + c = 'l'; + break; + case BT_CHARACTER: + c = 's'; + break; + case BT_INTEGER: + c = 'i'; + break; + case BT_REAL: + c = 'r'; + break; + case BT_COMPLEX: + c = 'c'; + break; + + case BT_HOLLERITH: + c = 'h'; + break; + + default: + c = 'u'; + break; + } + + return c; +} + + +/* Get a symbol for a resolved name. Note, if needed be, the elemental + attribute has be added afterwards. */ + +gfc_symbol * +gfc_get_intrinsic_sub_symbol (const char *name) +{ + gfc_symbol *sym; + + gfc_get_symbol (name, gfc_intrinsic_namespace, &sym); + sym->attr.always_explicit = 1; + sym->attr.subroutine = 1; + sym->attr.flavor = FL_PROCEDURE; + sym->attr.proc = PROC_INTRINSIC; + + return sym; +} + + +/* Return a pointer to the name of a conversion function given two + typespecs. */ + +static const char * +conv_name (gfc_typespec *from, gfc_typespec *to) +{ + return gfc_get_string ("__convert_%c%d_%c%d", + gfc_type_letter (from->type), from->kind, + gfc_type_letter (to->type), to->kind); +} + + +/* Given a pair of typespecs, find the gfc_intrinsic_sym node that + corresponds to the conversion. Returns NULL if the conversion + isn't found. */ + +static gfc_intrinsic_sym * +find_conv (gfc_typespec *from, gfc_typespec *to) +{ + gfc_intrinsic_sym *sym; + const char *target; + int i; + + target = conv_name (from, to); + sym = conversion; + + for (i = 0; i < nconv; i++, sym++) + if (target == sym->name) + return sym; + + return NULL; +} + + +/* Given a pair of CHARACTER typespecs, find the gfc_intrinsic_sym node + that corresponds to the conversion. Returns NULL if the conversion + isn't found. */ + +static gfc_intrinsic_sym * +find_char_conv (gfc_typespec *from, gfc_typespec *to) +{ + gfc_intrinsic_sym *sym; + const char *target; + int i; + + target = conv_name (from, to); + sym = char_conversions; + + for (i = 0; i < ncharconv; i++, sym++) + if (target == sym->name) + return sym; + + return NULL; +} + + +/* Interface to the check functions. We break apart an argument list + and call the proper check function rather than forcing each + function to manipulate the argument list. */ + +static gfc_try +do_check (gfc_intrinsic_sym *specific, gfc_actual_arglist *arg) +{ + gfc_expr *a1, *a2, *a3, *a4, *a5; + + if (arg == NULL) + return (*specific->check.f0) (); + + a1 = arg->expr; + arg = arg->next; + if (arg == NULL) + return (*specific->check.f1) (a1); + + a2 = arg->expr; + arg = arg->next; + if (arg == NULL) + return (*specific->check.f2) (a1, a2); + + a3 = arg->expr; + arg = arg->next; + if (arg == NULL) + return (*specific->check.f3) (a1, a2, a3); + + a4 = arg->expr; + arg = arg->next; + if (arg == NULL) + return (*specific->check.f4) (a1, a2, a3, a4); + + a5 = arg->expr; + arg = arg->next; + if (arg == NULL) + return (*specific->check.f5) (a1, a2, a3, a4, a5); + + gfc_internal_error ("do_check(): too many args"); +} + + +/*********** Subroutines to build the intrinsic list ****************/ + +/* Add a single intrinsic symbol to the current list. + + Argument list: + char * name of function + int whether function is elemental + int If the function can be used as an actual argument [1] + bt return type of function + int kind of return type of function + int Fortran standard version + check pointer to check function + simplify pointer to simplification function + resolve pointer to resolution function + + Optional arguments come in multiples of four: + char * name of argument + bt type of argument + int kind of argument + int arg optional flag (1=optional, 0=required) + + The sequence is terminated by a NULL name. + + + [1] Whether a function can or cannot be used as an actual argument is + determined by its presence on the 13.6 list in Fortran 2003. The + following intrinsics, which are GNU extensions, are considered allowed + as actual arguments: ACOSH ATANH DACOSH DASINH DATANH DCONJG DIMAG + ZABS ZCOS ZEXP ZLOG ZSIN ZSQRT. */ + +static void +add_sym (const char *name, gfc_isym_id id, enum klass cl, int actual_ok, bt type, int kind, + int standard, gfc_check_f check, gfc_simplify_f simplify, + gfc_resolve_f resolve, ...) +{ + char buf[GFC_MAX_SYMBOL_LEN + 11]; /* 10 for '_gfortran_', 1 for '\0' */ + int optional, first_flag; + va_list argp; + + switch (sizing) + { + case SZ_SUBS: + nsub++; + break; + + case SZ_FUNCS: + nfunc++; + break; + + case SZ_NOTHING: + next_sym->name = gfc_get_string (name); + + strcpy (buf, "_gfortran_"); + strcat (buf, name); + next_sym->lib_name = gfc_get_string (buf); + + next_sym->elemental = (cl == CLASS_ELEMENTAL); + next_sym->inquiry = (cl == CLASS_INQUIRY); + next_sym->transformational = (cl == CLASS_TRANSFORMATIONAL); + next_sym->actual_ok = actual_ok; + next_sym->ts.type = type; + next_sym->ts.kind = kind; + next_sym->standard = standard; + next_sym->simplify = simplify; + next_sym->check = check; + next_sym->resolve = resolve; + next_sym->specific = 0; + next_sym->generic = 0; + next_sym->conversion = 0; + next_sym->id = id; + break; + + default: + gfc_internal_error ("add_sym(): Bad sizing mode"); + } + + va_start (argp, resolve); + + first_flag = 1; + + for (;;) + { + name = va_arg (argp, char *); + if (name == NULL) + break; + + type = (bt) va_arg (argp, int); + kind = va_arg (argp, int); + optional = va_arg (argp, int); + + if (sizing != SZ_NOTHING) + nargs++; + else + { + next_arg++; + + if (first_flag) + next_sym->formal = next_arg; + else + (next_arg - 1)->next = next_arg; + + first_flag = 0; + + strcpy (next_arg->name, name); + next_arg->ts.type = type; + next_arg->ts.kind = kind; + next_arg->optional = optional; + } + } + + va_end (argp); + + next_sym++; +} + + +/* Add a symbol to the function list where the function takes + 0 arguments. */ + +static void +add_sym_0 (const char *name, gfc_isym_id id, enum klass cl, int actual_ok, bt type, + int kind, int standard, + gfc_try (*check) (void), + gfc_expr *(*simplify) (void), + void (*resolve) (gfc_expr *)) +{ + gfc_simplify_f sf; + gfc_check_f cf; + gfc_resolve_f rf; + + cf.f0 = check; + sf.f0 = simplify; + rf.f0 = resolve; + + add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf, + (void *) 0); +} + + +/* Add a symbol to the subroutine list where the subroutine takes + 0 arguments. */ + +static void +add_sym_0s (const char *name, gfc_isym_id id, int standard, void (*resolve) (gfc_code *)) +{ + gfc_check_f cf; + gfc_simplify_f sf; + gfc_resolve_f rf; + + cf.f1 = NULL; + sf.f1 = NULL; + rf.s1 = resolve; + + add_sym (name, id, NO_CLASS, ACTUAL_NO, BT_UNKNOWN, 0, standard, cf, sf, rf, + (void *) 0); +} + + +/* Add a symbol to the function list where the function takes + 1 arguments. */ + +static void +add_sym_1 (const char *name, gfc_isym_id id, enum klass cl, int actual_ok, bt type, + int kind, int standard, + gfc_try (*check) (gfc_expr *), + gfc_expr *(*simplify) (gfc_expr *), + void (*resolve) (gfc_expr *, gfc_expr *), + const char *a1, bt type1, int kind1, int optional1) +{ + gfc_check_f cf; + gfc_simplify_f sf; + gfc_resolve_f rf; + + cf.f1 = check; + sf.f1 = simplify; + rf.f1 = resolve; + + add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf, + a1, type1, kind1, optional1, + (void *) 0); +} + + +/* Add a symbol to the subroutine list where the subroutine takes + 1 arguments. */ + +static void +add_sym_1s (const char *name, gfc_isym_id id, enum klass cl, bt type, int kind, int standard, + gfc_try (*check) (gfc_expr *), + gfc_expr *(*simplify) (gfc_expr *), + void (*resolve) (gfc_code *), + const char *a1, bt type1, int kind1, int optional1) +{ + gfc_check_f cf; + gfc_simplify_f sf; + gfc_resolve_f rf; + + cf.f1 = check; + sf.f1 = simplify; + rf.s1 = resolve; + + add_sym (name, id, cl, ACTUAL_NO, type, kind, standard, cf, sf, rf, + a1, type1, kind1, optional1, + (void *) 0); +} + + +/* Add a symbol from the MAX/MIN family of intrinsic functions to the + function. MAX et al take 2 or more arguments. */ + +static void +add_sym_1m (const char *name, gfc_isym_id id, enum klass cl, int actual_ok, bt type, + int kind, int standard, + gfc_try (*check) (gfc_actual_arglist *), + gfc_expr *(*simplify) (gfc_expr *), + void (*resolve) (gfc_expr *, gfc_actual_arglist *), + const char *a1, bt type1, int kind1, int optional1, + const char *a2, bt type2, int kind2, int optional2) +{ + gfc_check_f cf; + gfc_simplify_f sf; + gfc_resolve_f rf; + + cf.f1m = check; + sf.f1 = simplify; + rf.f1m = resolve; + + add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf, + a1, type1, kind1, optional1, + a2, type2, kind2, optional2, + (void *) 0); +} + + +/* Add a symbol to the function list where the function takes + 2 arguments. */ + +static void +add_sym_2 (const char *name, gfc_isym_id id, enum klass cl, int actual_ok, bt type, + int kind, int standard, + gfc_try (*check) (gfc_expr *, gfc_expr *), + gfc_expr *(*simplify) (gfc_expr *, gfc_expr *), + void (*resolve) (gfc_expr *, gfc_expr *, gfc_expr *), + const char *a1, bt type1, int kind1, int optional1, + const char *a2, bt type2, int kind2, int optional2) +{ + gfc_check_f cf; + gfc_simplify_f sf; + gfc_resolve_f rf; + + cf.f2 = check; + sf.f2 = simplify; + rf.f2 = resolve; + + add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf, + a1, type1, kind1, optional1, + a2, type2, kind2, optional2, + (void *) 0); +} + + +/* Add a symbol to the subroutine list where the subroutine takes + 2 arguments. */ + +static void +add_sym_2s (const char *name, gfc_isym_id id, enum klass cl, bt type, int kind, int standard, + gfc_try (*check) (gfc_expr *, gfc_expr *), + gfc_expr *(*simplify) (gfc_expr *, gfc_expr *), + void (*resolve) (gfc_code *), + const char *a1, bt type1, int kind1, int optional1, + const char *a2, bt type2, int kind2, int optional2) +{ + gfc_check_f cf; + gfc_simplify_f sf; + gfc_resolve_f rf; + + cf.f2 = check; + sf.f2 = simplify; + rf.s1 = resolve; + + add_sym (name, id, cl, ACTUAL_NO, type, kind, standard, cf, sf, rf, + a1, type1, kind1, optional1, + a2, type2, kind2, optional2, + (void *) 0); +} + + +/* Add a symbol to the function list where the function takes + 3 arguments. */ + +static void +add_sym_3 (const char *name, gfc_isym_id id, enum klass cl, int actual_ok, bt type, + int kind, int standard, + gfc_try (*check) (gfc_expr *, gfc_expr *, gfc_expr *), + gfc_expr *(*simplify) (gfc_expr *, gfc_expr *, gfc_expr *), + void (*resolve) (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *), + const char *a1, bt type1, int kind1, int optional1, + const char *a2, bt type2, int kind2, int optional2, + const char *a3, bt type3, int kind3, int optional3) +{ + gfc_check_f cf; + gfc_simplify_f sf; + gfc_resolve_f rf; + + cf.f3 = check; + sf.f3 = simplify; + rf.f3 = resolve; + + add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf, + a1, type1, kind1, optional1, + a2, type2, kind2, optional2, + a3, type3, kind3, optional3, + (void *) 0); +} + + +/* MINLOC and MAXLOC get special treatment because their argument + might have to be reordered. */ + +static void +add_sym_3ml (const char *name, gfc_isym_id id, enum klass cl, int actual_ok, bt type, + int kind, int standard, + gfc_try (*check) (gfc_actual_arglist *), + gfc_expr *(*simplify) (gfc_expr *, gfc_expr *, gfc_expr *), + void (*resolve) (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *), + const char *a1, bt type1, int kind1, int optional1, + const char *a2, bt type2, int kind2, int optional2, + const char *a3, bt type3, int kind3, int optional3) +{ + gfc_check_f cf; + gfc_simplify_f sf; + gfc_resolve_f rf; + + cf.f3ml = check; + sf.f3 = simplify; + rf.f3 = resolve; + + add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf, + a1, type1, kind1, optional1, + a2, type2, kind2, optional2, + a3, type3, kind3, optional3, + (void *) 0); +} + + +/* MINVAL, MAXVAL, PRODUCT, and SUM also get special treatment because + their argument also might have to be reordered. */ + +static void +add_sym_3red (const char *name, gfc_isym_id id, enum klass cl, int actual_ok, bt type, + int kind, int standard, + gfc_try (*check) (gfc_actual_arglist *), + gfc_expr *(*simplify) (gfc_expr *, gfc_expr *, gfc_expr *), + void (*resolve) (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *), + const char *a1, bt type1, int kind1, int optional1, + const char *a2, bt type2, int kind2, int optional2, + const char *a3, bt type3, int kind3, int optional3) +{ + gfc_check_f cf; + gfc_simplify_f sf; + gfc_resolve_f rf; + + cf.f3red = check; + sf.f3 = simplify; + rf.f3 = resolve; + + add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf, + a1, type1, kind1, optional1, + a2, type2, kind2, optional2, + a3, type3, kind3, optional3, + (void *) 0); +} + + +/* Add a symbol to the subroutine list where the subroutine takes + 3 arguments. */ + +static void +add_sym_3s (const char *name, gfc_isym_id id, enum klass cl, bt type, int kind, int standard, + gfc_try (*check) (gfc_expr *, gfc_expr *, gfc_expr *), + gfc_expr *(*simplify) (gfc_expr *, gfc_expr *, gfc_expr *), + void (*resolve) (gfc_code *), + const char *a1, bt type1, int kind1, int optional1, + const char *a2, bt type2, int kind2, int optional2, + const char *a3, bt type3, int kind3, int optional3) +{ + gfc_check_f cf; + gfc_simplify_f sf; + gfc_resolve_f rf; + + cf.f3 = check; + sf.f3 = simplify; + rf.s1 = resolve; + + add_sym (name, id, cl, ACTUAL_NO, type, kind, standard, cf, sf, rf, + a1, type1, kind1, optional1, + a2, type2, kind2, optional2, + a3, type3, kind3, optional3, + (void *) 0); +} + + +/* Add a symbol to the function list where the function takes + 4 arguments. */ + +static void +add_sym_4 (const char *name, gfc_isym_id id, enum klass cl, int actual_ok, bt type, + int kind, int standard, + gfc_try (*check) (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *), + gfc_expr *(*simplify) (gfc_expr *, gfc_expr *, gfc_expr *, + gfc_expr *), + void (*resolve) (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, + gfc_expr *), + const char *a1, bt type1, int kind1, int optional1, + const char *a2, bt type2, int kind2, int optional2, + const char *a3, bt type3, int kind3, int optional3, + const char *a4, bt type4, int kind4, int optional4 ) +{ + gfc_check_f cf; + gfc_simplify_f sf; + gfc_resolve_f rf; + + cf.f4 = check; + sf.f4 = simplify; + rf.f4 = resolve; + + add_sym (name, id, cl, actual_ok, type, kind, standard, cf, sf, rf, + a1, type1, kind1, optional1, + a2, type2, kind2, optional2, + a3, type3, kind3, optional3, + a4, type4, kind4, optional4, + (void *) 0); +} + + +/* Add a symbol to the subroutine list where the subroutine takes + 4 arguments. */ + +static void +add_sym_4s (const char *name, gfc_isym_id id, enum klass cl, bt type, int kind, int standard, + gfc_try (*check) (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *), + gfc_expr *(*simplify) (gfc_expr *, gfc_expr *, gfc_expr *, + gfc_expr *), + void (*resolve) (gfc_code *), + const char *a1, bt type1, int kind1, int optional1, + const char *a2, bt type2, int kind2, int optional2, + const char *a3, bt type3, int kind3, int optional3, + const char *a4, bt type4, int kind4, int optional4) +{ + gfc_check_f cf; + gfc_simplify_f sf; + gfc_resolve_f rf; + + cf.f4 = check; + sf.f4 = simplify; + rf.s1 = resolve; + + add_sym (name, id, cl, ACTUAL_NO, type, kind, standard, cf, sf, rf, + a1, type1, kind1, optional1, + a2, type2, kind2, optional2, + a3, type3, kind3, optional3, + a4, type4, kind4, optional4, + (void *) 0); +} + + +/* Add a symbol to the subroutine list where the subroutine takes + 5 arguments. */ + +static void +add_sym_5s (const char *name, gfc_isym_id id, enum klass cl, bt type, int kind, int standard, + gfc_try (*check) (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, + gfc_expr *), + gfc_expr *(*simplify) (gfc_expr *, gfc_expr *, gfc_expr *, + gfc_expr *, gfc_expr *), + void (*resolve) (gfc_code *), + const char *a1, bt type1, int kind1, int optional1, + const char *a2, bt type2, int kind2, int optional2, + const char *a3, bt type3, int kind3, int optional3, + const char *a4, bt type4, int kind4, int optional4, + const char *a5, bt type5, int kind5, int optional5) +{ + gfc_check_f cf; + gfc_simplify_f sf; + gfc_resolve_f rf; + + cf.f5 = check; + sf.f5 = simplify; + rf.s1 = resolve; + + add_sym (name, id, cl, ACTUAL_NO, type, kind, standard, cf, sf, rf, + a1, type1, kind1, optional1, + a2, type2, kind2, optional2, + a3, type3, kind3, optional3, + a4, type4, kind4, optional4, + a5, type5, kind5, optional5, + (void *) 0); +} + + +/* Locate an intrinsic symbol given a base pointer, number of elements + in the table and a pointer to a name. Returns the NULL pointer if + a name is not found. */ + +static gfc_intrinsic_sym * +find_sym (gfc_intrinsic_sym *start, int n, const char *name) +{ + /* name may be a user-supplied string, so we must first make sure + that we're comparing against a pointer into the global string + table. */ + const char *p = gfc_get_string (name); + + while (n > 0) + { + if (p == start->name) + return start; + + start++; + n--; + } + + return NULL; +} + + +/* Given a name, find a function in the intrinsic function table. + Returns NULL if not found. */ + +gfc_intrinsic_sym * +gfc_find_function (const char *name) +{ + gfc_intrinsic_sym *sym; + + sym = find_sym (functions, nfunc, name); + if (!sym) + sym = find_sym (conversion, nconv, name); + + return sym; +} + + +/* Given a name, find a function in the intrinsic subroutine table. + Returns NULL if not found. */ + +gfc_intrinsic_sym * +gfc_find_subroutine (const char *name) +{ + return find_sym (subroutines, nsub, name); +} + + +/* Given a string, figure out if it is the name of a generic intrinsic + function or not. */ + +int +gfc_generic_intrinsic (const char *name) +{ + gfc_intrinsic_sym *sym; + + sym = gfc_find_function (name); + return (sym == NULL) ? 0 : sym->generic; +} + + +/* Given a string, figure out if it is the name of a specific + intrinsic function or not. */ + +int +gfc_specific_intrinsic (const char *name) +{ + gfc_intrinsic_sym *sym; + + sym = gfc_find_function (name); + return (sym == NULL) ? 0 : sym->specific; +} + + +/* Given a string, figure out if it is the name of an intrinsic function + or subroutine allowed as an actual argument or not. */ +int +gfc_intrinsic_actual_ok (const char *name, const bool subroutine_flag) +{ + gfc_intrinsic_sym *sym; + + /* Intrinsic subroutines are not allowed as actual arguments. */ + if (subroutine_flag) + return 0; + else + { + sym = gfc_find_function (name); + return (sym == NULL) ? 0 : sym->actual_ok; + } +} + + +/* Given a symbol, find out if it is (and is to be treated) an intrinsic. If + it's name refers to an intrinsic but this intrinsic is not included in the + selected standard, this returns FALSE and sets the symbol's external + attribute. */ + +bool +gfc_is_intrinsic (gfc_symbol* sym, int subroutine_flag, locus loc) +{ + gfc_intrinsic_sym* isym; + const char* symstd; + + /* If INTRINSIC/EXTERNAL state is already known, return. */ + if (sym->attr.intrinsic) + return true; + if (sym->attr.external) + return false; + + if (subroutine_flag) + isym = gfc_find_subroutine (sym->name); + else + isym = gfc_find_function (sym->name); + + /* No such intrinsic available at all? */ + if (!isym) + return false; + + /* See if this intrinsic is allowed in the current standard. */ + if (gfc_check_intrinsic_standard (isym, &symstd, false, loc) == FAILURE) + { + if (gfc_option.warn_intrinsics_std) + gfc_warning_now ("The intrinsic '%s' at %L is not included in the" + " selected standard but %s and '%s' will be treated as" + " if declared EXTERNAL. Use an appropriate -std=*" + " option or define -fall-intrinsics to allow this" + " intrinsic.", sym->name, &loc, symstd, sym->name); + sym->attr.external = 1; + + return false; + } + + return true; +} + + +/* Collect a set of intrinsic functions into a generic collection. + The first argument is the name of the generic function, which is + also the name of a specific function. The rest of the specifics + currently in the table are placed into the list of specific + functions associated with that generic. + + PR fortran/32778 + FIXME: Remove the argument STANDARD if no regressions are + encountered. Change all callers (approx. 360). +*/ + +static void +make_generic (const char *name, gfc_isym_id id, int standard ATTRIBUTE_UNUSED) +{ + gfc_intrinsic_sym *g; + + if (sizing != SZ_NOTHING) + return; + + g = gfc_find_function (name); + if (g == NULL) + gfc_internal_error ("make_generic(): Can't find generic symbol '%s'", + name); + + gcc_assert (g->id == id); + + g->generic = 1; + g->specific = 1; + if ((g + 1)->name != NULL) + g->specific_head = g + 1; + g++; + + while (g->name != NULL) + { + gcc_assert (g->id == id); + + g->next = g + 1; + g->specific = 1; + g++; + } + + g--; + g->next = NULL; +} + + +/* Create a duplicate intrinsic function entry for the current + function, the only differences being the alternate name and + a different standard if necessary. Note that we use argument + lists more than once, but all argument lists are freed as a + single block. */ + +static void +make_alias (const char *name, int standard) +{ + switch (sizing) + { + case SZ_FUNCS: + nfunc++; + break; + + case SZ_SUBS: + nsub++; + break; + + case SZ_NOTHING: + next_sym[0] = next_sym[-1]; + next_sym->name = gfc_get_string (name); + next_sym->standard = standard; + next_sym++; + break; + + default: + break; + } +} + + +/* Make the current subroutine noreturn. */ + +static void +make_noreturn (void) +{ + if (sizing == SZ_NOTHING) + next_sym[-1].noreturn = 1; +} + + +/* Add intrinsic functions. */ + +static void +add_functions (void) +{ + /* Argument names as in the standard (to be used as argument keywords). */ + const char + *a = "a", *f = "field", *pt = "pointer", *tg = "target", + *b = "b", *m = "matrix", *ma = "matrix_a", *mb = "matrix_b", + *c = "c", *n = "n", *ncopies= "ncopies", *pos = "pos", *bck = "back", + *i = "i", *v = "vector", *va = "vector_a", *vb = "vector_b", + *j = "j", *a1 = "a1", *fs = "fsource", *ts = "tsource", + *l = "l", *a2 = "a2", *mo = "mold", *ord = "order", + *p = "p", *ar = "array", *shp = "shape", *src = "source", + *r = "r", *bd = "boundary", *pad = "pad", *set = "set", + *s = "s", *dm = "dim", *kind = "kind", *msk = "mask", + *x = "x", *sh = "shift", *stg = "string", *ssg = "substring", + *y = "y", *sz = "size", *sta = "string_a", *stb = "string_b", + *z = "z", *ln = "len", *ut = "unit", *han = "handler", + *num = "number", *tm = "time", *nm = "name", *md = "mode"; + + int di, dr, dd, dl, dc, dz, ii; + + di = gfc_default_integer_kind; + dr = gfc_default_real_kind; + dd = gfc_default_double_kind; + dl = gfc_default_logical_kind; + dc = gfc_default_character_kind; + dz = gfc_default_complex_kind; + ii = gfc_index_integer_kind; + + add_sym_1 ("abs", GFC_ISYM_ABS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_abs, gfc_simplify_abs, gfc_resolve_abs, + a, BT_REAL, dr, REQUIRED); + + add_sym_1 ("iabs", GFC_ISYM_ABS, CLASS_ELEMENTAL, ACTUAL_YES, BT_INTEGER, di, GFC_STD_F77, + NULL, gfc_simplify_abs, gfc_resolve_abs, + a, BT_INTEGER, di, REQUIRED); + + add_sym_1 ("dabs", GFC_ISYM_ABS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_fn_d, gfc_simplify_abs, gfc_resolve_abs, + a, BT_REAL, dd, REQUIRED); + + add_sym_1 ("cabs", GFC_ISYM_ABS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + NULL, gfc_simplify_abs, gfc_resolve_abs, + a, BT_COMPLEX, dz, REQUIRED); + + add_sym_1 ("zabs", GFC_ISYM_ABS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_GNU, + NULL, gfc_simplify_abs, gfc_resolve_abs, + a, BT_COMPLEX, dd, REQUIRED); + + make_alias ("cdabs", GFC_STD_GNU); + + make_generic ("abs", GFC_ISYM_ABS, GFC_STD_F77); + + /* The checking function for ACCESS is called gfc_check_access_func + because the name gfc_check_access is already used in module.c. */ + add_sym_2 ("access", GFC_ISYM_ACCESS, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_access_func, NULL, gfc_resolve_access, + nm, BT_CHARACTER, dc, REQUIRED, md, BT_CHARACTER, dc, REQUIRED); + + make_generic ("access", GFC_ISYM_ACCESS, GFC_STD_GNU); + + add_sym_2 ("achar", GFC_ISYM_ACHAR, CLASS_ELEMENTAL, ACTUAL_NO, + BT_CHARACTER, dc, GFC_STD_F95, + gfc_check_achar, gfc_simplify_achar, gfc_resolve_achar, + i, BT_INTEGER, di, REQUIRED, kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("achar", GFC_ISYM_ACHAR, GFC_STD_F95); + + add_sym_1 ("acos", GFC_ISYM_ACOS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_fn_r, gfc_simplify_acos, gfc_resolve_acos, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dacos", GFC_ISYM_ACOS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_fn_d, gfc_simplify_acos, gfc_resolve_acos, + x, BT_REAL, dd, REQUIRED); + + make_generic ("acos", GFC_ISYM_ACOS, GFC_STD_F77); + + add_sym_1 ("acosh", GFC_ISYM_ACOSH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, + GFC_STD_F2008, gfc_check_fn_r, gfc_simplify_acosh, + gfc_resolve_acosh, x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dacosh", GFC_ISYM_ACOSH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_GNU, + gfc_check_fn_d, gfc_simplify_acosh, gfc_resolve_acosh, + x, BT_REAL, dd, REQUIRED); + + make_generic ("acosh", GFC_ISYM_ACOSH, GFC_STD_F2008); + + add_sym_1 ("adjustl", GFC_ISYM_ADJUSTL, CLASS_ELEMENTAL, ACTUAL_NO, + BT_CHARACTER, dc, GFC_STD_F95, NULL, gfc_simplify_adjustl, + gfc_resolve_adjustl, stg, BT_CHARACTER, 0, REQUIRED); + + make_generic ("adjustl", GFC_ISYM_ADJUSTL, GFC_STD_F95); + + add_sym_1 ("adjustr", GFC_ISYM_ADJUSTR, CLASS_ELEMENTAL, ACTUAL_NO, + BT_CHARACTER, dc, GFC_STD_F95, NULL, gfc_simplify_adjustr, + gfc_resolve_adjustr, stg, BT_CHARACTER, 0, REQUIRED); + + make_generic ("adjustr", GFC_ISYM_ADJUSTR, GFC_STD_F95); + + add_sym_1 ("aimag", GFC_ISYM_AIMAG, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_fn_c, gfc_simplify_aimag, gfc_resolve_aimag, + z, BT_COMPLEX, dz, REQUIRED); + + make_alias ("imag", GFC_STD_GNU); + make_alias ("imagpart", GFC_STD_GNU); + + add_sym_1 ("dimag", GFC_ISYM_AIMAG, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_GNU, + NULL, gfc_simplify_aimag, gfc_resolve_aimag, + z, BT_COMPLEX, dd, REQUIRED); + + make_generic ("aimag", GFC_ISYM_AIMAG, GFC_STD_F77); + + add_sym_2 ("aint", GFC_ISYM_AINT, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_a_xkind, gfc_simplify_aint, gfc_resolve_aint, + a, BT_REAL, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL); + + add_sym_1 ("dint", GFC_ISYM_AINT, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + NULL, gfc_simplify_dint, gfc_resolve_dint, + a, BT_REAL, dd, REQUIRED); + + make_generic ("aint", GFC_ISYM_AINT, GFC_STD_F77); + + add_sym_2 ("all", GFC_ISYM_ALL, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F95, + gfc_check_all_any, NULL, gfc_resolve_all, + msk, BT_LOGICAL, dl, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL); + + make_generic ("all", GFC_ISYM_ALL, GFC_STD_F95); + + add_sym_1 ("allocated", GFC_ISYM_ALLOCATED, CLASS_INQUIRY, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F95, + gfc_check_allocated, NULL, NULL, + ar, BT_UNKNOWN, 0, REQUIRED); + + make_generic ("allocated", GFC_ISYM_ALLOCATED, GFC_STD_F95); + + add_sym_2 ("anint", GFC_ISYM_ANINT, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_a_xkind, gfc_simplify_anint, gfc_resolve_anint, + a, BT_REAL, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL); + + add_sym_1 ("dnint", GFC_ISYM_ANINT, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + NULL, gfc_simplify_dnint, gfc_resolve_dnint, + a, BT_REAL, dd, REQUIRED); + + make_generic ("anint", GFC_ISYM_ANINT, GFC_STD_F77); + + add_sym_2 ("any", GFC_ISYM_ANY, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F95, + gfc_check_all_any, NULL, gfc_resolve_any, + msk, BT_LOGICAL, dl, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL); + + make_generic ("any", GFC_ISYM_ANY, GFC_STD_F95); + + add_sym_1 ("asin", GFC_ISYM_ASIN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_fn_r, gfc_simplify_asin, gfc_resolve_asin, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dasin", GFC_ISYM_ASIN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_fn_d, gfc_simplify_asin, gfc_resolve_asin, + x, BT_REAL, dd, REQUIRED); + + make_generic ("asin", GFC_ISYM_ASIN, GFC_STD_F77); + + add_sym_1 ("asinh", GFC_ISYM_ASINH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, + GFC_STD_F2008, gfc_check_fn_r, gfc_simplify_asinh, + gfc_resolve_asinh, x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dasinh", GFC_ISYM_ASINH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_GNU, + gfc_check_fn_d, gfc_simplify_asinh, gfc_resolve_asinh, + x, BT_REAL, dd, REQUIRED); + + make_generic ("asinh", GFC_ISYM_ASINH, GFC_STD_F2008); + + add_sym_2 ("associated", GFC_ISYM_ASSOCIATED, CLASS_INQUIRY, ACTUAL_NO, BT_LOGICAL, dl, + GFC_STD_F95, gfc_check_associated, NULL, NULL, + pt, BT_UNKNOWN, 0, REQUIRED, tg, BT_UNKNOWN, 0, OPTIONAL); + + make_generic ("associated", GFC_ISYM_ASSOCIATED, GFC_STD_F95); + + add_sym_1 ("atan", GFC_ISYM_ATAN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_fn_r, gfc_simplify_atan, gfc_resolve_atan, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("datan", GFC_ISYM_ATAN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_fn_d, gfc_simplify_atan, gfc_resolve_atan, + x, BT_REAL, dd, REQUIRED); + + make_generic ("atan", GFC_ISYM_ATAN, GFC_STD_F77); + + add_sym_1 ("atanh", GFC_ISYM_ATANH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, + GFC_STD_F2008, gfc_check_fn_r, gfc_simplify_atanh, + gfc_resolve_atanh, x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("datanh", GFC_ISYM_ATANH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_GNU, + gfc_check_fn_d, gfc_simplify_atanh, gfc_resolve_atanh, + x, BT_REAL, dd, REQUIRED); + + make_generic ("atanh", GFC_ISYM_ATANH, GFC_STD_F2008); + + add_sym_2 ("atan2", GFC_ISYM_ATAN2, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_atan2, gfc_simplify_atan2, gfc_resolve_atan2, + y, BT_REAL, dr, REQUIRED, x, BT_REAL, dr, REQUIRED); + + add_sym_2 ("datan2", GFC_ISYM_ATAN2, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_datan2, gfc_simplify_atan2, gfc_resolve_atan2, + y, BT_REAL, dd, REQUIRED, x, BT_REAL, dd, REQUIRED); + + make_generic ("atan2", GFC_ISYM_ATAN2, GFC_STD_F77); + + /* Bessel and Neumann functions for G77 compatibility. */ + add_sym_1 ("besj0", GFC_ISYM_J0, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU, + gfc_check_fn_r, gfc_simplify_bessel_j0, gfc_resolve_g77_math1, + x, BT_REAL, dr, REQUIRED); + + make_alias ("bessel_j0", GFC_STD_F2008); + + add_sym_1 ("dbesj0", GFC_ISYM_J0, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU, + gfc_check_fn_d, gfc_simplify_bessel_j0, gfc_resolve_g77_math1, + x, BT_REAL, dd, REQUIRED); + + make_generic ("bessel_j0", GFC_ISYM_J0, GFC_STD_F2008); + + add_sym_1 ("besj1", GFC_ISYM_J1, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU, + gfc_check_fn_r, gfc_simplify_bessel_j1, gfc_resolve_g77_math1, + x, BT_REAL, dr, REQUIRED); + + make_alias ("bessel_j1", GFC_STD_F2008); + + add_sym_1 ("dbesj1", GFC_ISYM_J1, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU, + gfc_check_fn_d, gfc_simplify_bessel_j1, gfc_resolve_g77_math1, + x, BT_REAL, dd, REQUIRED); + + make_generic ("bessel_j1", GFC_ISYM_J1, GFC_STD_F2008); + + add_sym_2 ("besjn", GFC_ISYM_JN, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU, + gfc_check_besn, gfc_simplify_bessel_jn, gfc_resolve_besn, + n, BT_INTEGER, di, REQUIRED, x, BT_REAL, dr, REQUIRED); + + make_alias ("bessel_jn", GFC_STD_F2008); + + add_sym_2 ("dbesjn", GFC_ISYM_JN, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU, + gfc_check_besn, gfc_simplify_bessel_jn, gfc_resolve_besn, + n, BT_INTEGER, di, REQUIRED, x, BT_REAL, dd, REQUIRED); + + make_generic ("bessel_jn", GFC_ISYM_JN, GFC_STD_F2008); + + add_sym_1 ("besy0", GFC_ISYM_Y0, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU, + gfc_check_fn_r, gfc_simplify_bessel_y0, gfc_resolve_g77_math1, + x, BT_REAL, dr, REQUIRED); + + make_alias ("bessel_y0", GFC_STD_F2008); + + add_sym_1 ("dbesy0", GFC_ISYM_Y0, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU, + gfc_check_fn_d, gfc_simplify_bessel_y0, gfc_resolve_g77_math1, + x, BT_REAL, dd, REQUIRED); + + make_generic ("bessel_y0", GFC_ISYM_Y0, GFC_STD_F2008); + + add_sym_1 ("besy1", GFC_ISYM_Y1, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU, + gfc_check_fn_r, gfc_simplify_bessel_y1, gfc_resolve_g77_math1, + x, BT_REAL, dr, REQUIRED); + + make_alias ("bessel_y1", GFC_STD_F2008); + + add_sym_1 ("dbesy1", GFC_ISYM_Y1, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU, + gfc_check_fn_d, gfc_simplify_bessel_y1, gfc_resolve_g77_math1, + x, BT_REAL, dd, REQUIRED); + + make_generic ("bessel_y1", GFC_ISYM_Y1, GFC_STD_F2008); + + add_sym_2 ("besyn", GFC_ISYM_YN, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU, + gfc_check_besn, gfc_simplify_bessel_yn, gfc_resolve_besn, + n, BT_INTEGER, di, REQUIRED, x, BT_REAL, dr, REQUIRED); + + make_alias ("bessel_yn", GFC_STD_F2008); + + add_sym_2 ("dbesyn", GFC_ISYM_YN, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU, + gfc_check_besn, gfc_simplify_bessel_yn, gfc_resolve_besn, + n, BT_INTEGER, di, REQUIRED, x, BT_REAL, dd, REQUIRED); + + make_generic ("bessel_yn", GFC_ISYM_YN, GFC_STD_F2008); + + add_sym_1 ("bit_size", GFC_ISYM_BIT_SIZE, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_i, gfc_simplify_bit_size, NULL, + i, BT_INTEGER, di, REQUIRED); + + make_generic ("bit_size", GFC_ISYM_BIT_SIZE, GFC_STD_F95); + + add_sym_2 ("btest", GFC_ISYM_BTEST, CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F95, + gfc_check_btest, gfc_simplify_btest, gfc_resolve_btest, + i, BT_INTEGER, di, REQUIRED, pos, BT_INTEGER, di, REQUIRED); + + make_generic ("btest", GFC_ISYM_BTEST, GFC_STD_F95); + + add_sym_2 ("ceiling", GFC_ISYM_CEILING, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_a_ikind, gfc_simplify_ceiling, gfc_resolve_ceiling, + a, BT_REAL, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("ceiling", GFC_ISYM_CEILING, GFC_STD_F95); + + add_sym_2 ("char", GFC_ISYM_CHAR, CLASS_ELEMENTAL, ACTUAL_NO, BT_CHARACTER, dc, GFC_STD_F77, + gfc_check_char, gfc_simplify_char, gfc_resolve_char, + i, BT_INTEGER, di, REQUIRED, kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("char", GFC_ISYM_CHAR, GFC_STD_F77); + + add_sym_1 ("chdir", GFC_ISYM_CHDIR, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, + GFC_STD_GNU, gfc_check_chdir, NULL, gfc_resolve_chdir, + nm, BT_CHARACTER, dc, REQUIRED); + + make_generic ("chdir", GFC_ISYM_CHDIR, GFC_STD_GNU); + + add_sym_2 ("chmod", GFC_ISYM_CHMOD, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_chmod, NULL, gfc_resolve_chmod, + nm, BT_CHARACTER, dc, REQUIRED, md, BT_CHARACTER, dc, REQUIRED); + + make_generic ("chmod", GFC_ISYM_CHMOD, GFC_STD_GNU); + + add_sym_3 ("cmplx", GFC_ISYM_CMPLX, CLASS_ELEMENTAL, ACTUAL_NO, BT_COMPLEX, dz, GFC_STD_F77, + gfc_check_cmplx, gfc_simplify_cmplx, gfc_resolve_cmplx, + x, BT_UNKNOWN, dr, REQUIRED, y, BT_UNKNOWN, dr, OPTIONAL, + kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("cmplx", GFC_ISYM_CMPLX, GFC_STD_F77); + + add_sym_0 ("command_argument_count", GFC_ISYM_COMMAND_ARGUMENT_COUNT, CLASS_INQUIRY, + ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2003, NULL, NULL, NULL); + + make_generic ("command_argument_count", GFC_ISYM_COMMAND_ARGUMENT_COUNT, + GFC_STD_F2003); + + add_sym_2 ("complex", GFC_ISYM_COMPLEX, CLASS_ELEMENTAL, ACTUAL_NO, BT_COMPLEX, dz, GFC_STD_GNU, + gfc_check_complex, gfc_simplify_complex, gfc_resolve_complex, + x, BT_UNKNOWN, dr, REQUIRED, y, BT_UNKNOWN, dr, REQUIRED); + + make_generic ("complex", GFC_ISYM_COMPLEX, GFC_STD_GNU); + + /* Making dcmplx a specific of cmplx causes cmplx to return a double + complex instead of the default complex. */ + + add_sym_2 ("dcmplx", GFC_ISYM_CMPLX, CLASS_ELEMENTAL, ACTUAL_NO, BT_COMPLEX, dd, GFC_STD_GNU, + gfc_check_dcmplx, gfc_simplify_dcmplx, gfc_resolve_dcmplx, + x, BT_REAL, dd, REQUIRED, y, BT_REAL, dd, OPTIONAL); + + make_generic ("dcmplx", GFC_ISYM_CMPLX, GFC_STD_GNU); + + add_sym_1 ("conjg", GFC_ISYM_CONJG, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dz, GFC_STD_F77, + gfc_check_fn_c, gfc_simplify_conjg, gfc_resolve_conjg, + z, BT_COMPLEX, dz, REQUIRED); + + add_sym_1 ("dconjg", GFC_ISYM_CONJG, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dd, GFC_STD_GNU, + NULL, gfc_simplify_conjg, gfc_resolve_conjg, + z, BT_COMPLEX, dd, REQUIRED); + + make_generic ("conjg", GFC_ISYM_CONJG, GFC_STD_F77); + + add_sym_1 ("cos", GFC_ISYM_COS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_fn_rc, gfc_simplify_cos, gfc_resolve_cos, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dcos", GFC_ISYM_COS, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_fn_d, gfc_simplify_cos, gfc_resolve_cos, + x, BT_REAL, dd, REQUIRED); + + add_sym_1 ("ccos", GFC_ISYM_COS, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dz, GFC_STD_F77, + NULL, gfc_simplify_cos, gfc_resolve_cos, + x, BT_COMPLEX, dz, REQUIRED); + + add_sym_1 ("zcos", GFC_ISYM_COS, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dd, GFC_STD_GNU, + NULL, gfc_simplify_cos, gfc_resolve_cos, + x, BT_COMPLEX, dd, REQUIRED); + + make_alias ("cdcos", GFC_STD_GNU); + + make_generic ("cos", GFC_ISYM_COS, GFC_STD_F77); + + add_sym_1 ("cosh", GFC_ISYM_COSH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_fn_r, gfc_simplify_cosh, gfc_resolve_cosh, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dcosh", GFC_ISYM_COSH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_fn_d, gfc_simplify_cosh, gfc_resolve_cosh, + x, BT_REAL, dd, REQUIRED); + + make_generic ("cosh", GFC_ISYM_COSH, GFC_STD_F77); + + add_sym_3 ("count", GFC_ISYM_COUNT, CLASS_TRANSFORMATIONAL, ACTUAL_NO, + BT_INTEGER, di, GFC_STD_F95, + gfc_check_count, NULL, gfc_resolve_count, + msk, BT_LOGICAL, dl, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL, + kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("count", GFC_ISYM_COUNT, GFC_STD_F95); + + add_sym_3 ("cshift", GFC_ISYM_CSHIFT, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_cshift, NULL, gfc_resolve_cshift, + ar, BT_REAL, dr, REQUIRED, sh, BT_INTEGER, di, REQUIRED, + dm, BT_INTEGER, ii, OPTIONAL); + + make_generic ("cshift", GFC_ISYM_CSHIFT, GFC_STD_F95); + + add_sym_1 ("ctime", GFC_ISYM_CTIME, NO_CLASS, ACTUAL_NO, BT_CHARACTER, 0, GFC_STD_GNU, + gfc_check_ctime, NULL, gfc_resolve_ctime, + tm, BT_INTEGER, di, REQUIRED); + + make_generic ("ctime", GFC_ISYM_CTIME, GFC_STD_GNU); + + add_sym_1 ("dble", GFC_ISYM_DBLE, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_F77, + gfc_check_dble, gfc_simplify_dble, gfc_resolve_dble, + a, BT_REAL, dr, REQUIRED); + + make_alias ("dfloat", GFC_STD_GNU); + + make_generic ("dble", GFC_ISYM_DBLE, GFC_STD_F77); + + add_sym_1 ("digits", GFC_ISYM_DIGITS, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_digits, gfc_simplify_digits, NULL, + x, BT_UNKNOWN, dr, REQUIRED); + + make_generic ("digits", GFC_ISYM_DIGITS, GFC_STD_F95); + + add_sym_2 ("dim", GFC_ISYM_DIM, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_a_p, gfc_simplify_dim, gfc_resolve_dim, + x, BT_REAL, dr, REQUIRED, y, BT_UNKNOWN, dr, REQUIRED); + + add_sym_2 ("idim", GFC_ISYM_DIM, CLASS_ELEMENTAL, ACTUAL_YES, BT_INTEGER, di, GFC_STD_F77, + NULL, gfc_simplify_dim, gfc_resolve_dim, + x, BT_INTEGER, di, REQUIRED, y, BT_INTEGER, di, REQUIRED); + + add_sym_2 ("ddim", GFC_ISYM_DIM, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_x_yd, gfc_simplify_dim, gfc_resolve_dim, + x, BT_REAL, dd, REQUIRED, y, BT_REAL, dd, REQUIRED); + + make_generic ("dim", GFC_ISYM_DIM, GFC_STD_F77); + + add_sym_2 ("dot_product", GFC_ISYM_DOT_PRODUCT, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, + GFC_STD_F95, gfc_check_dot_product, NULL, gfc_resolve_dot_product, + va, BT_REAL, dr, REQUIRED, vb, BT_REAL, dr, REQUIRED); + + make_generic ("dot_product", GFC_ISYM_DOT_PRODUCT, GFC_STD_F95); + + add_sym_2 ("dprod", GFC_ISYM_DPROD,CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_dprod, gfc_simplify_dprod, gfc_resolve_dprod, + x, BT_REAL, dr, REQUIRED, y, BT_REAL, dr, REQUIRED); + + make_generic ("dprod", GFC_ISYM_DPROD, GFC_STD_F77); + + add_sym_1 ("dreal", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU, + NULL, NULL, NULL, + a, BT_COMPLEX, dd, REQUIRED); + + make_generic ("dreal", GFC_ISYM_REAL, GFC_STD_GNU); + + add_sym_4 ("eoshift", GFC_ISYM_EOSHIFT, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_eoshift, NULL, gfc_resolve_eoshift, + ar, BT_REAL, dr, 0, sh, BT_INTEGER, ii, REQUIRED, + bd, BT_REAL, dr, 1, dm, BT_INTEGER, ii, OPTIONAL); + + make_generic ("eoshift", GFC_ISYM_EOSHIFT, GFC_STD_F95); + + add_sym_1 ("epsilon", GFC_ISYM_EPSILON, CLASS_INQUIRY, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_x, gfc_simplify_epsilon, NULL, + x, BT_REAL, dr, REQUIRED); + + make_generic ("epsilon", GFC_ISYM_EPSILON, GFC_STD_F95); + + /* G77 compatibility for the ERF() and ERFC() functions. */ + add_sym_1 ("erf", GFC_ISYM_ERF, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, + GFC_STD_F2008, gfc_check_fn_r, gfc_simplify_erf, + gfc_resolve_g77_math1, x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("derf", GFC_ISYM_ERF, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, + GFC_STD_GNU, gfc_check_fn_d, gfc_simplify_erf, + gfc_resolve_g77_math1, x, BT_REAL, dd, REQUIRED); + + make_generic ("erf", GFC_ISYM_ERF, GFC_STD_F2008); + + add_sym_1 ("erfc", GFC_ISYM_ERFC, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, + GFC_STD_F2008, gfc_check_fn_r, gfc_simplify_erfc, + gfc_resolve_g77_math1, x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("derfc", GFC_ISYM_ERFC, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, + GFC_STD_GNU, gfc_check_fn_d, gfc_simplify_erfc, + gfc_resolve_g77_math1, x, BT_REAL, dd, REQUIRED); + + make_generic ("erfc", GFC_ISYM_ERFC, GFC_STD_F2008); + + add_sym_1 ("erfc_scaled", GFC_ISYM_ERFC_SCALED, CLASS_ELEMENTAL, ACTUAL_NO, + BT_REAL, dr, GFC_STD_F2008, gfc_check_fn_r, NULL, + gfc_resolve_g77_math1, x, BT_REAL, dr, REQUIRED); + + make_generic ("erfc_scaled", GFC_ISYM_ERFC_SCALED, GFC_STD_F2008); + + /* G77 compatibility */ + add_sym_1 ("dtime", GFC_ISYM_DTIME, NO_CLASS, ACTUAL_NO, BT_REAL, 4, GFC_STD_GNU, + gfc_check_dtime_etime, NULL, NULL, + x, BT_REAL, 4, REQUIRED); + + make_generic ("dtime", GFC_ISYM_DTIME, GFC_STD_GNU); + + add_sym_1 ("etime", GFC_ISYM_ETIME, NO_CLASS, ACTUAL_NO, BT_REAL, 4, GFC_STD_GNU, + gfc_check_dtime_etime, NULL, NULL, + x, BT_REAL, 4, REQUIRED); + + make_generic ("etime", GFC_ISYM_ETIME, GFC_STD_GNU); + + add_sym_1 ("exp", GFC_ISYM_EXP, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_fn_rc, gfc_simplify_exp, gfc_resolve_exp, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dexp", GFC_ISYM_EXP, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_fn_d, gfc_simplify_exp, gfc_resolve_exp, + x, BT_REAL, dd, REQUIRED); + + add_sym_1 ("cexp", GFC_ISYM_EXP, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dz, GFC_STD_F77, + NULL, gfc_simplify_exp, gfc_resolve_exp, + x, BT_COMPLEX, dz, REQUIRED); + + add_sym_1 ("zexp", GFC_ISYM_EXP, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dd, GFC_STD_GNU, + NULL, gfc_simplify_exp, gfc_resolve_exp, + x, BT_COMPLEX, dd, REQUIRED); + + make_alias ("cdexp", GFC_STD_GNU); + + make_generic ("exp", GFC_ISYM_EXP, GFC_STD_F77); + + add_sym_1 ("exponent", GFC_ISYM_EXPONENT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_x, gfc_simplify_exponent, gfc_resolve_exponent, + x, BT_REAL, dr, REQUIRED); + + make_generic ("exponent", GFC_ISYM_EXPONENT, GFC_STD_F95); + + add_sym_0 ("fdate", GFC_ISYM_FDATE, NO_CLASS, ACTUAL_NO, BT_CHARACTER, dc, GFC_STD_GNU, + NULL, NULL, gfc_resolve_fdate); + + make_generic ("fdate", GFC_ISYM_FDATE, GFC_STD_GNU); + + add_sym_2 ("floor", GFC_ISYM_FLOOR, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_a_ikind, gfc_simplify_floor, gfc_resolve_floor, + a, BT_REAL, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("floor", GFC_ISYM_FLOOR, GFC_STD_F95); + + /* G77 compatible fnum */ + add_sym_1 ("fnum", GFC_ISYM_FNUM, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_fnum, NULL, gfc_resolve_fnum, + ut, BT_INTEGER, di, REQUIRED); + + make_generic ("fnum", GFC_ISYM_FNUM, GFC_STD_GNU); + + add_sym_1 ("fraction", GFC_ISYM_FRACTION, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_x, gfc_simplify_fraction, gfc_resolve_fraction, + x, BT_REAL, dr, REQUIRED); + + make_generic ("fraction", GFC_ISYM_FRACTION, GFC_STD_F95); + + add_sym_2 ("fstat", GFC_ISYM_FSTAT, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_fstat, NULL, gfc_resolve_fstat, + a, BT_INTEGER, di, REQUIRED, b, BT_INTEGER, di, REQUIRED); + + make_generic ("fstat", GFC_ISYM_FSTAT, GFC_STD_GNU); + + add_sym_1 ("ftell", GFC_ISYM_FTELL, NO_CLASS, ACTUAL_NO, BT_INTEGER, ii, GFC_STD_GNU, + gfc_check_ftell, NULL, gfc_resolve_ftell, + ut, BT_INTEGER, di, REQUIRED); + + make_generic ("ftell", GFC_ISYM_FTELL, GFC_STD_GNU); + + add_sym_2 ("fgetc", GFC_ISYM_FGETC, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_fgetputc, NULL, gfc_resolve_fgetc, + ut, BT_INTEGER, di, REQUIRED, c, BT_CHARACTER, dc, REQUIRED); + + make_generic ("fgetc", GFC_ISYM_FGETC, GFC_STD_GNU); + + add_sym_1 ("fget", GFC_ISYM_FGET, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_fgetput, NULL, gfc_resolve_fget, + c, BT_CHARACTER, dc, REQUIRED); + + make_generic ("fget", GFC_ISYM_FGET, GFC_STD_GNU); + + add_sym_2 ("fputc", GFC_ISYM_FPUTC, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_fgetputc, NULL, gfc_resolve_fputc, + ut, BT_INTEGER, di, REQUIRED, c, BT_CHARACTER, dc, REQUIRED); + + make_generic ("fputc", GFC_ISYM_FPUTC, GFC_STD_GNU); + + add_sym_1 ("fput", GFC_ISYM_FPUT, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_fgetput, NULL, gfc_resolve_fput, + c, BT_CHARACTER, dc, REQUIRED); + + make_generic ("fput", GFC_ISYM_FPUT, GFC_STD_GNU); + + add_sym_1 ("gamma", GFC_ISYM_GAMMA, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, + GFC_STD_F2008, gfc_check_fn_r, gfc_simplify_gamma, + gfc_resolve_gamma, x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dgamma", GFC_ISYM_GAMMA, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU, + gfc_check_fn_d, gfc_simplify_gamma, gfc_resolve_gamma, + x, BT_REAL, dr, REQUIRED); + + make_generic ("gamma", GFC_ISYM_GAMMA, GFC_STD_F2008); + + /* Unix IDs (g77 compatibility) */ + add_sym_1 ("getcwd", GFC_ISYM_GETCWD, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + NULL, NULL, gfc_resolve_getcwd, + c, BT_CHARACTER, dc, REQUIRED); + + make_generic ("getcwd", GFC_ISYM_GETCWD, GFC_STD_GNU); + + add_sym_0 ("getgid", GFC_ISYM_GETGID, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + NULL, NULL, gfc_resolve_getgid); + + make_generic ("getgid", GFC_ISYM_GETGID, GFC_STD_GNU); + + add_sym_0 ("getpid", GFC_ISYM_GETPID, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + NULL, NULL, gfc_resolve_getpid); + + make_generic ("getpid", GFC_ISYM_GETPID, GFC_STD_GNU); + + add_sym_0 ("getuid", GFC_ISYM_GETUID, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + NULL, NULL, gfc_resolve_getuid); + + make_generic ("getuid", GFC_ISYM_GETUID, GFC_STD_GNU); + + add_sym_1 ("hostnm", GFC_ISYM_HOSTNM, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_hostnm, NULL, gfc_resolve_hostnm, + a, BT_CHARACTER, dc, REQUIRED); + + make_generic ("hostnm", GFC_ISYM_HOSTNM, GFC_STD_GNU); + + add_sym_1 ("huge", GFC_ISYM_HUGE, CLASS_INQUIRY, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_huge, gfc_simplify_huge, NULL, + x, BT_UNKNOWN, dr, REQUIRED); + + make_generic ("huge", GFC_ISYM_HUGE, GFC_STD_F95); + + add_sym_2 ("hypot", GFC_ISYM_HYPOT, CLASS_ELEMENTAL, ACTUAL_NO, + BT_REAL, dr, GFC_STD_F2008, + gfc_check_hypot, gfc_simplify_hypot, gfc_resolve_hypot, + x, BT_REAL, dr, REQUIRED, y, BT_REAL, dr, REQUIRED); + + make_generic ("hypot", GFC_ISYM_HYPOT, GFC_STD_F2008); + + add_sym_2 ("iachar", GFC_ISYM_IACHAR, CLASS_ELEMENTAL, ACTUAL_NO, + BT_INTEGER, di, GFC_STD_F95, + gfc_check_ichar_iachar, gfc_simplify_iachar, gfc_resolve_iachar, + c, BT_CHARACTER, dc, REQUIRED, kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("iachar", GFC_ISYM_IACHAR, GFC_STD_F95); + + add_sym_2 ("iand", GFC_ISYM_IAND, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_iand, gfc_simplify_iand, gfc_resolve_iand, + i, BT_INTEGER, di, REQUIRED, j, BT_INTEGER, di, REQUIRED); + + make_generic ("iand", GFC_ISYM_IAND, GFC_STD_F95); + + add_sym_2 ("and", GFC_ISYM_AND, NO_CLASS, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_GNU, + gfc_check_and, gfc_simplify_and, gfc_resolve_and, + i, BT_UNKNOWN, 0, REQUIRED, j, BT_UNKNOWN, 0, REQUIRED); + + make_generic ("and", GFC_ISYM_AND, GFC_STD_GNU); + + add_sym_0 ("iargc", GFC_ISYM_IARGC, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + NULL, NULL, NULL); + + make_generic ("iargc", GFC_ISYM_IARGC, GFC_STD_GNU); + + add_sym_2 ("ibclr", GFC_ISYM_IBCLR, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_ibclr, gfc_simplify_ibclr, gfc_resolve_ibclr, + i, BT_INTEGER, di, REQUIRED, pos, BT_INTEGER, di, REQUIRED); + + make_generic ("ibclr", GFC_ISYM_IBCLR, GFC_STD_F95); + + add_sym_3 ("ibits", GFC_ISYM_IBITS, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_ibits, gfc_simplify_ibits, gfc_resolve_ibits, + i, BT_INTEGER, di, REQUIRED, pos, BT_INTEGER, di, REQUIRED, + ln, BT_INTEGER, di, REQUIRED); + + make_generic ("ibits", GFC_ISYM_IBITS, GFC_STD_F95); + + add_sym_2 ("ibset", GFC_ISYM_IBSET, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_ibset, gfc_simplify_ibset, gfc_resolve_ibset, + i, BT_INTEGER, di, REQUIRED, pos, BT_INTEGER, di, REQUIRED); + + make_generic ("ibset", GFC_ISYM_IBSET, GFC_STD_F95); + + add_sym_2 ("ichar", GFC_ISYM_ICHAR, CLASS_ELEMENTAL, ACTUAL_NO, + BT_INTEGER, di, GFC_STD_F77, + gfc_check_ichar_iachar, gfc_simplify_ichar, gfc_resolve_ichar, + c, BT_CHARACTER, dc, REQUIRED, kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("ichar", GFC_ISYM_ICHAR, GFC_STD_F77); + + add_sym_2 ("ieor", GFC_ISYM_IEOR, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_ieor, gfc_simplify_ieor, gfc_resolve_ieor, + i, BT_INTEGER, di, REQUIRED, j, BT_INTEGER, di, REQUIRED); + + make_generic ("ieor", GFC_ISYM_IEOR, GFC_STD_F95); + + add_sym_2 ("xor", GFC_ISYM_XOR, NO_CLASS, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_GNU, + gfc_check_and, gfc_simplify_xor, gfc_resolve_xor, + i, BT_UNKNOWN, 0, REQUIRED, j, BT_UNKNOWN, 0, REQUIRED); + + make_generic ("xor", GFC_ISYM_XOR, GFC_STD_GNU); + + add_sym_0 ("ierrno", GFC_ISYM_IERRNO, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + NULL, NULL, gfc_resolve_ierrno); + + make_generic ("ierrno", GFC_ISYM_IERRNO, GFC_STD_GNU); + + /* The resolution function for INDEX is called gfc_resolve_index_func + because the name gfc_resolve_index is already used in resolve.c. */ + add_sym_4 ("index", GFC_ISYM_INDEX, CLASS_ELEMENTAL, ACTUAL_YES, + BT_INTEGER, di, GFC_STD_F77, + gfc_check_index, gfc_simplify_index, gfc_resolve_index_func, + stg, BT_CHARACTER, dc, REQUIRED, ssg, BT_CHARACTER, dc, REQUIRED, + bck, BT_LOGICAL, dl, OPTIONAL, kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("index", GFC_ISYM_INDEX, GFC_STD_F77); + + add_sym_2 ("int", GFC_ISYM_INT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F77, + gfc_check_int, gfc_simplify_int, gfc_resolve_int, + a, BT_REAL, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL); + + add_sym_1 ("ifix", GFC_ISYM_INT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F77, + NULL, gfc_simplify_ifix, NULL, + a, BT_REAL, dr, REQUIRED); + + add_sym_1 ("idint", GFC_ISYM_INT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F77, + NULL, gfc_simplify_idint, NULL, + a, BT_REAL, dd, REQUIRED); + + make_generic ("int", GFC_ISYM_INT, GFC_STD_F77); + + add_sym_1 ("int2", GFC_ISYM_INT2, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_intconv, gfc_simplify_int2, gfc_resolve_int2, + a, BT_REAL, dr, REQUIRED); + + make_alias ("short", GFC_STD_GNU); + + make_generic ("int2", GFC_ISYM_INT2, GFC_STD_GNU); + + add_sym_1 ("int8", GFC_ISYM_INT8, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_intconv, gfc_simplify_int8, gfc_resolve_int8, + a, BT_REAL, dr, REQUIRED); + + make_generic ("int8", GFC_ISYM_INT8, GFC_STD_GNU); + + add_sym_1 ("long", GFC_ISYM_LONG, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_intconv, gfc_simplify_long, gfc_resolve_long, + a, BT_REAL, dr, REQUIRED); + + make_generic ("long", GFC_ISYM_LONG, GFC_STD_GNU); + + add_sym_2 ("ior", GFC_ISYM_IOR, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_ior, gfc_simplify_ior, gfc_resolve_ior, + i, BT_INTEGER, di, REQUIRED, j, BT_INTEGER, di, REQUIRED); + + make_generic ("ior", GFC_ISYM_IOR, GFC_STD_F95); + + add_sym_2 ("or", GFC_ISYM_OR, NO_CLASS, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_GNU, + gfc_check_and, gfc_simplify_or, gfc_resolve_or, + i, BT_UNKNOWN, 0, REQUIRED, j, BT_UNKNOWN, 0, REQUIRED); + + make_generic ("or", GFC_ISYM_OR, GFC_STD_GNU); + + /* The following function is for G77 compatibility. */ + add_sym_1 ("irand", GFC_ISYM_IRAND, NO_CLASS, ACTUAL_NO, BT_INTEGER, 4, GFC_STD_GNU, + gfc_check_irand, NULL, NULL, + i, BT_INTEGER, 4, OPTIONAL); + + make_generic ("irand", GFC_ISYM_IRAND, GFC_STD_GNU); + + add_sym_1 ("isatty", GFC_ISYM_ISATTY, NO_CLASS, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_GNU, + gfc_check_isatty, NULL, gfc_resolve_isatty, + ut, BT_INTEGER, di, REQUIRED); + + make_generic ("isatty", GFC_ISYM_ISATTY, GFC_STD_GNU); + + add_sym_1 ("is_iostat_end", GFC_ISYM_IS_IOSTAT_END, + CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F2003, + gfc_check_i, NULL, NULL, i, BT_INTEGER, 0, REQUIRED); + + make_generic ("is_iostat_end", GFC_ISYM_IS_IOSTAT_END, GFC_STD_F2003); + + add_sym_1 ("is_iostat_eor", GFC_ISYM_IS_IOSTAT_EOR, + CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F2003, + gfc_check_i, NULL, NULL, i, BT_INTEGER, 0, REQUIRED); + + make_generic ("is_iostat_eor", GFC_ISYM_IS_IOSTAT_EOR, GFC_STD_F2003); + + add_sym_1 ("isnan", GFC_ISYM_ISNAN, CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, + dl, GFC_STD_GNU, gfc_check_isnan, NULL, NULL, + x, BT_REAL, 0, REQUIRED); + + make_generic ("isnan", GFC_ISYM_ISNAN, GFC_STD_GNU); + + add_sym_2 ("rshift", GFC_ISYM_RSHIFT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_ishft, NULL, gfc_resolve_rshift, + i, BT_INTEGER, di, REQUIRED, sh, BT_INTEGER, di, REQUIRED); + + make_generic ("rshift", GFC_ISYM_RSHIFT, GFC_STD_GNU); + + add_sym_2 ("lshift", GFC_ISYM_LSHIFT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_ishft, NULL, gfc_resolve_lshift, + i, BT_INTEGER, di, REQUIRED, sh, BT_INTEGER, di, REQUIRED); + + make_generic ("lshift", GFC_ISYM_LSHIFT, GFC_STD_GNU); + + add_sym_2 ("ishft", GFC_ISYM_ISHFT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_ishft, gfc_simplify_ishft, gfc_resolve_ishft, + i, BT_INTEGER, di, REQUIRED, sh, BT_INTEGER, di, REQUIRED); + + make_generic ("ishft", GFC_ISYM_ISHFT, GFC_STD_F95); + + add_sym_3 ("ishftc", GFC_ISYM_ISHFTC, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_ishftc, gfc_simplify_ishftc, gfc_resolve_ishftc, + i, BT_INTEGER, di, REQUIRED, sh, BT_INTEGER, di, REQUIRED, + sz, BT_INTEGER, di, OPTIONAL); + + make_generic ("ishftc", GFC_ISYM_ISHFTC, GFC_STD_F95); + + add_sym_2 ("kill", GFC_ISYM_KILL, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_kill, NULL, gfc_resolve_kill, + a, BT_INTEGER, di, REQUIRED, b, BT_INTEGER, di, REQUIRED); + + make_generic ("kill", GFC_ISYM_KILL, GFC_STD_GNU); + + add_sym_1 ("kind", GFC_ISYM_KIND, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_kind, gfc_simplify_kind, NULL, + x, BT_REAL, dr, REQUIRED); + + make_generic ("kind", GFC_ISYM_KIND, GFC_STD_F95); + + add_sym_3 ("lbound", GFC_ISYM_LBOUND, CLASS_INQUIRY, ACTUAL_NO, + BT_INTEGER, di, GFC_STD_F95, + gfc_check_lbound, gfc_simplify_lbound, gfc_resolve_lbound, + ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, di, OPTIONAL, + kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("lbound", GFC_ISYM_LBOUND, GFC_STD_F95); + + add_sym_1 ("leadz", GFC_ISYM_LEADZ, CLASS_ELEMENTAL, ACTUAL_NO, + BT_INTEGER, di, GFC_STD_F2008, + gfc_check_i, gfc_simplify_leadz, NULL, + i, BT_INTEGER, di, REQUIRED); + + make_generic ("leadz", GFC_ISYM_LEADZ, GFC_STD_F2008); + + add_sym_2 ("len", GFC_ISYM_LEN, CLASS_INQUIRY, ACTUAL_YES, + BT_INTEGER, di, GFC_STD_F77, + gfc_check_len_lentrim, gfc_simplify_len, gfc_resolve_len, + stg, BT_CHARACTER, dc, REQUIRED, kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("len", GFC_ISYM_LEN, GFC_STD_F77); + + add_sym_2 ("len_trim", GFC_ISYM_LEN_TRIM, CLASS_ELEMENTAL, ACTUAL_NO, + BT_INTEGER, di, GFC_STD_F95, + gfc_check_len_lentrim, gfc_simplify_len_trim, gfc_resolve_len_trim, + stg, BT_CHARACTER, dc, REQUIRED, kind, BT_INTEGER, di, OPTIONAL); + + make_alias ("lnblnk", GFC_STD_GNU); + + make_generic ("len_trim", GFC_ISYM_LEN_TRIM, GFC_STD_F95); + + add_sym_1 ("lgamma", GFC_ISYM_LGAMMA, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, + dr, GFC_STD_GNU, + gfc_check_fn_r, gfc_simplify_lgamma, gfc_resolve_lgamma, + x, BT_REAL, dr, REQUIRED); + + make_alias ("log_gamma", GFC_STD_F2008); + + add_sym_1 ("algama", GFC_ISYM_LGAMMA, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU, + gfc_check_fn_r, gfc_simplify_lgamma, gfc_resolve_lgamma, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dlgama", GFC_ISYM_LGAMMA, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU, + gfc_check_fn_d, gfc_simplify_lgamma, gfc_resolve_lgamma, + x, BT_REAL, dr, REQUIRED); + + make_generic ("log_gamma", GFC_ISYM_LGAMMA, GFC_STD_F2008); + + + add_sym_2 ("lge", GFC_ISYM_LGE, CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, dl, + GFC_STD_F77, gfc_check_lge_lgt_lle_llt, gfc_simplify_lge, NULL, + sta, BT_CHARACTER, dc, REQUIRED, stb, BT_CHARACTER, dc, REQUIRED); + + make_generic ("lge", GFC_ISYM_LGE, GFC_STD_F77); + + add_sym_2 ("lgt", GFC_ISYM_LGT, CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, dl, + GFC_STD_F77, gfc_check_lge_lgt_lle_llt, gfc_simplify_lgt, NULL, + sta, BT_CHARACTER, dc, REQUIRED, stb, BT_CHARACTER, dc, REQUIRED); + + make_generic ("lgt", GFC_ISYM_LGT, GFC_STD_F77); + + add_sym_2 ("lle",GFC_ISYM_LLE, CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, dl, + GFC_STD_F77, gfc_check_lge_lgt_lle_llt, gfc_simplify_lle, NULL, + sta, BT_CHARACTER, dc, REQUIRED, stb, BT_CHARACTER, dc, REQUIRED); + + make_generic ("lle", GFC_ISYM_LLE, GFC_STD_F77); + + add_sym_2 ("llt", GFC_ISYM_LLT, CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, dl, + GFC_STD_F77, gfc_check_lge_lgt_lle_llt, gfc_simplify_llt, NULL, + sta, BT_CHARACTER, dc, REQUIRED, stb, BT_CHARACTER, dc, REQUIRED); + + make_generic ("llt", GFC_ISYM_LLT, GFC_STD_F77); + + add_sym_2 ("link", GFC_ISYM_LINK, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_link, NULL, gfc_resolve_link, + a, BT_CHARACTER, dc, REQUIRED, b, BT_CHARACTER, dc, REQUIRED); + + make_generic ("link", GFC_ISYM_LINK, GFC_STD_GNU); + + add_sym_1 ("log", GFC_ISYM_LOG, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77, + gfc_check_fn_rc, gfc_simplify_log, gfc_resolve_log, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("alog", GFC_ISYM_LOG, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + NULL, gfc_simplify_log, gfc_resolve_log, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dlog", GFC_ISYM_LOG, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_fn_d, gfc_simplify_log, gfc_resolve_log, + x, BT_REAL, dd, REQUIRED); + + add_sym_1 ("clog", GFC_ISYM_LOG, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dz, GFC_STD_F77, + NULL, gfc_simplify_log, gfc_resolve_log, + x, BT_COMPLEX, dz, REQUIRED); + + add_sym_1 ("zlog", GFC_ISYM_LOG, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dd, GFC_STD_GNU, + NULL, gfc_simplify_log, gfc_resolve_log, + x, BT_COMPLEX, dd, REQUIRED); + + make_alias ("cdlog", GFC_STD_GNU); + + make_generic ("log", GFC_ISYM_LOG, GFC_STD_F77); + + add_sym_1 ("log10", GFC_ISYM_LOG10, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77, + gfc_check_fn_r, gfc_simplify_log10, gfc_resolve_log10, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("alog10", GFC_ISYM_LOG10, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + NULL, gfc_simplify_log10, gfc_resolve_log10, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dlog10", GFC_ISYM_LOG10, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_fn_d, gfc_simplify_log10, gfc_resolve_log10, + x, BT_REAL, dd, REQUIRED); + + make_generic ("log10", GFC_ISYM_LOG10, GFC_STD_F77); + + add_sym_2 ("logical", GFC_ISYM_LOGICAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F95, + gfc_check_logical, gfc_simplify_logical, gfc_resolve_logical, + l, BT_LOGICAL, dl, REQUIRED, kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("logical", GFC_ISYM_LOGICAL, GFC_STD_F95); + + add_sym_2 ("lstat", GFC_ISYM_LSTAT, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_stat, NULL, gfc_resolve_lstat, + a, BT_CHARACTER, dc, REQUIRED, b, BT_INTEGER, di, REQUIRED); + + make_generic ("lstat", GFC_ISYM_LSTAT, GFC_STD_GNU); + + add_sym_1 ("malloc", GFC_ISYM_MALLOC, NO_CLASS, ACTUAL_NO, BT_INTEGER, ii, GFC_STD_GNU, + gfc_check_malloc, NULL, gfc_resolve_malloc, a, BT_INTEGER, di, + REQUIRED); + + make_generic ("malloc", GFC_ISYM_MALLOC, GFC_STD_GNU); + + add_sym_2 ("matmul", GFC_ISYM_MATMUL, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_matmul, NULL, gfc_resolve_matmul, + ma, BT_REAL, dr, REQUIRED, mb, BT_REAL, dr, REQUIRED); + + make_generic ("matmul", GFC_ISYM_MATMUL, GFC_STD_F95); + + /* Note: amax0 is equivalent to real(max), max1 is equivalent to + int(max). The max function must take at least two arguments. */ + + add_sym_1m ("max", GFC_ISYM_MAX, CLASS_ELEMENTAL, ACTUAL_NO, BT_UNKNOWN, 0, GFC_STD_F77, + gfc_check_min_max, gfc_simplify_max, gfc_resolve_max, + a1, BT_UNKNOWN, dr, REQUIRED, a2, BT_UNKNOWN, dr, REQUIRED); + + add_sym_1m ("max0", GFC_ISYM_MAX, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F77, + gfc_check_min_max_integer, gfc_simplify_max, NULL, + a1, BT_INTEGER, di, REQUIRED, a2, BT_INTEGER, di, REQUIRED); + + add_sym_1m ("amax0", GFC_ISYM_MAX, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77, + gfc_check_min_max_integer, gfc_simplify_max, NULL, + a1, BT_INTEGER, di, REQUIRED, a2, BT_INTEGER, di, REQUIRED); + + add_sym_1m ("amax1", GFC_ISYM_MAX, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77, + gfc_check_min_max_real, gfc_simplify_max, NULL, + a1, BT_REAL, dr, REQUIRED, a2, BT_REAL, dr, REQUIRED); + + add_sym_1m ("max1", GFC_ISYM_MAX, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F77, + gfc_check_min_max_real, gfc_simplify_max, NULL, + a1, BT_REAL, dr, REQUIRED, a2, BT_REAL, dr, REQUIRED); + + add_sym_1m ("dmax1", GFC_ISYM_MAX, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_F77, + gfc_check_min_max_double, gfc_simplify_max, NULL, + a1, BT_REAL, dd, REQUIRED, a2, BT_REAL, dd, REQUIRED); + + make_generic ("max", GFC_ISYM_MAX, GFC_STD_F77); + + add_sym_1 ("maxexponent", GFC_ISYM_MAXEXPONENT, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, + GFC_STD_F95, gfc_check_x, gfc_simplify_maxexponent, NULL, + x, BT_UNKNOWN, dr, REQUIRED); + + make_generic ("maxexponent", GFC_ISYM_MAXEXPONENT, GFC_STD_F95); + + add_sym_3ml ("maxloc", GFC_ISYM_MAXLOC, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_minloc_maxloc, NULL, gfc_resolve_maxloc, + ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL, + msk, BT_LOGICAL, dl, OPTIONAL); + + make_generic ("maxloc", GFC_ISYM_MAXLOC, GFC_STD_F95); + + add_sym_3red ("maxval", GFC_ISYM_MAXVAL, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_minval_maxval, gfc_simplify_maxval, gfc_resolve_maxval, + ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL, + msk, BT_LOGICAL, dl, OPTIONAL); + + make_generic ("maxval", GFC_ISYM_MAXVAL, GFC_STD_F95); + + add_sym_0 ("mclock", GFC_ISYM_MCLOCK, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + NULL, NULL, gfc_resolve_mclock); + + make_generic ("mclock", GFC_ISYM_MCLOCK, GFC_STD_GNU); + + add_sym_0 ("mclock8", GFC_ISYM_MCLOCK8, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + NULL, NULL, gfc_resolve_mclock8); + + make_generic ("mclock8", GFC_ISYM_MCLOCK8, GFC_STD_GNU); + + add_sym_3 ("merge", GFC_ISYM_MERGE, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_merge, gfc_simplify_merge, gfc_resolve_merge, + ts, BT_REAL, dr, REQUIRED, fs, BT_REAL, dr, REQUIRED, + msk, BT_LOGICAL, dl, REQUIRED); + + make_generic ("merge", GFC_ISYM_MERGE, GFC_STD_F95); + + /* Note: amin0 is equivalent to real(min), min1 is equivalent to + int(min). */ + + add_sym_1m ("min", GFC_ISYM_MIN, CLASS_ELEMENTAL, ACTUAL_NO, BT_UNKNOWN, 0, GFC_STD_F77, + gfc_check_min_max, gfc_simplify_min, gfc_resolve_min, + a1, BT_REAL, dr, REQUIRED, a2, BT_REAL, dr, REQUIRED); + + add_sym_1m ("min0", GFC_ISYM_MIN, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F77, + gfc_check_min_max_integer, gfc_simplify_min, NULL, + a1, BT_INTEGER, di, REQUIRED, a2, BT_INTEGER, di, REQUIRED); + + add_sym_1m ("amin0", GFC_ISYM_MIN, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77, + gfc_check_min_max_integer, gfc_simplify_min, NULL, + a1, BT_INTEGER, di, REQUIRED, a2, BT_INTEGER, di, REQUIRED); + + add_sym_1m ("amin1", GFC_ISYM_MIN, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77, + gfc_check_min_max_real, gfc_simplify_min, NULL, + a1, BT_REAL, dr, REQUIRED, a2, BT_REAL, dr, REQUIRED); + + add_sym_1m ("min1", GFC_ISYM_MIN, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F77, + gfc_check_min_max_real, gfc_simplify_min, NULL, + a1, BT_REAL, dr, REQUIRED, a2, BT_REAL, dr, REQUIRED); + + add_sym_1m ("dmin1", GFC_ISYM_MIN, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_F77, + gfc_check_min_max_double, gfc_simplify_min, NULL, + a1, BT_REAL, dd, REQUIRED, a2, BT_REAL, dd, REQUIRED); + + make_generic ("min", GFC_ISYM_MIN, GFC_STD_F77); + + add_sym_1 ("minexponent", GFC_ISYM_MINEXPONENT, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, + GFC_STD_F95, gfc_check_x, gfc_simplify_minexponent, NULL, + x, BT_UNKNOWN, dr, REQUIRED); + + make_generic ("minexponent", GFC_ISYM_MINEXPONENT, GFC_STD_F95); + + add_sym_3ml ("minloc", GFC_ISYM_MINLOC, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_minloc_maxloc, NULL, gfc_resolve_minloc, + ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL, + msk, BT_LOGICAL, dl, OPTIONAL); + + make_generic ("minloc", GFC_ISYM_MINLOC, GFC_STD_F95); + + add_sym_3red ("minval", GFC_ISYM_MINVAL, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_minval_maxval, gfc_simplify_minval, gfc_resolve_minval, + ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL, + msk, BT_LOGICAL, dl, OPTIONAL); + + make_generic ("minval", GFC_ISYM_MINVAL, GFC_STD_F95); + + add_sym_2 ("mod", GFC_ISYM_MOD, CLASS_ELEMENTAL, ACTUAL_YES, BT_INTEGER, di, GFC_STD_F77, + gfc_check_a_p, gfc_simplify_mod, gfc_resolve_mod, + a, BT_INTEGER, di, REQUIRED, p, BT_INTEGER, di, REQUIRED); + + add_sym_2 ("amod", GFC_ISYM_MOD, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + NULL, gfc_simplify_mod, gfc_resolve_mod, + a, BT_REAL, dr, REQUIRED, p, BT_REAL, dr, REQUIRED); + + add_sym_2 ("dmod", GFC_ISYM_MOD, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_x_yd, gfc_simplify_mod, gfc_resolve_mod, + a, BT_REAL, dd, REQUIRED, p, BT_REAL, dd, REQUIRED); + + make_generic ("mod", GFC_ISYM_MOD, GFC_STD_F77); + + add_sym_2 ("modulo", GFC_ISYM_MODULO, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, di, GFC_STD_F95, + gfc_check_a_p, gfc_simplify_modulo, gfc_resolve_modulo, + a, BT_REAL, di, REQUIRED, p, BT_REAL, di, REQUIRED); + + make_generic ("modulo", GFC_ISYM_MODULO, GFC_STD_F95); + + add_sym_2 ("nearest", GFC_ISYM_NEAREST, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_nearest, gfc_simplify_nearest, gfc_resolve_nearest, + x, BT_REAL, dr, REQUIRED, s, BT_REAL, dr, REQUIRED); + + make_generic ("nearest", GFC_ISYM_NEAREST, GFC_STD_F95); + + add_sym_1 ("new_line", GFC_ISYM_NEW_LINE, CLASS_INQUIRY, ACTUAL_NO, BT_CHARACTER, dc, + GFC_STD_F2003, gfc_check_new_line, gfc_simplify_new_line, NULL, + a, BT_CHARACTER, dc, REQUIRED); + + make_generic ("new_line", GFC_ISYM_NEW_LINE, GFC_STD_F2003); + + add_sym_2 ("nint", GFC_ISYM_NINT, CLASS_ELEMENTAL, ACTUAL_YES, BT_INTEGER, di, GFC_STD_F77, + gfc_check_a_ikind, gfc_simplify_nint, gfc_resolve_nint, + a, BT_REAL, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL); + + add_sym_1 ("idnint", GFC_ISYM_NINT, CLASS_ELEMENTAL, ACTUAL_YES, BT_INTEGER, di, GFC_STD_F77, + gfc_check_idnint, gfc_simplify_idnint, gfc_resolve_idnint, + a, BT_REAL, dd, REQUIRED); + + make_generic ("nint", GFC_ISYM_NINT, GFC_STD_F77); + + add_sym_1 ("not", GFC_ISYM_NOT, CLASS_ELEMENTAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_i, gfc_simplify_not, gfc_resolve_not, + i, BT_INTEGER, di, REQUIRED); + + make_generic ("not", GFC_ISYM_NOT, GFC_STD_F95); + + add_sym_1 ("null", GFC_ISYM_NULL, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_null, gfc_simplify_null, NULL, + mo, BT_INTEGER, di, OPTIONAL); + + make_generic ("null", GFC_ISYM_NULL, GFC_STD_F95); + + add_sym_3 ("pack", GFC_ISYM_PACK, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_pack, NULL, gfc_resolve_pack, + ar, BT_REAL, dr, REQUIRED, msk, BT_LOGICAL, dl, REQUIRED, + v, BT_REAL, dr, OPTIONAL); + + make_generic ("pack", GFC_ISYM_PACK, GFC_STD_F95); + + add_sym_1 ("precision", GFC_ISYM_PRECISION, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_precision, gfc_simplify_precision, NULL, + x, BT_UNKNOWN, 0, REQUIRED); + + make_generic ("precision", GFC_ISYM_PRECISION, GFC_STD_F95); + + add_sym_1 ("present", GFC_ISYM_PRESENT, CLASS_INQUIRY, ACTUAL_NO, BT_LOGICAL, dl, GFC_STD_F95, + gfc_check_present, NULL, NULL, + a, BT_REAL, dr, REQUIRED); + + make_generic ("present", GFC_ISYM_PRESENT, GFC_STD_F95); + + add_sym_3red ("product", GFC_ISYM_PRODUCT, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_product_sum, NULL, gfc_resolve_product, + ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL, + msk, BT_LOGICAL, dl, OPTIONAL); + + make_generic ("product", GFC_ISYM_PRODUCT, GFC_STD_F95); + + add_sym_1 ("radix", GFC_ISYM_RADIX, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_radix, gfc_simplify_radix, NULL, + x, BT_UNKNOWN, 0, REQUIRED); + + make_generic ("radix", GFC_ISYM_RADIX, GFC_STD_F95); + + /* The following function is for G77 compatibility. */ + add_sym_1 ("rand", GFC_ISYM_RAND, NO_CLASS, ACTUAL_NO, BT_REAL, 4, GFC_STD_GNU, + gfc_check_rand, NULL, NULL, + i, BT_INTEGER, 4, OPTIONAL); + + /* Compatibility with HP FORTRAN 77/iX Reference. Note, rand() and ran() + use slightly different shoddy multiplicative congruential PRNG. */ + make_alias ("ran", GFC_STD_GNU); + + make_generic ("rand", GFC_ISYM_RAND, GFC_STD_GNU); + + add_sym_1 ("range", GFC_ISYM_RANGE, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_range, gfc_simplify_range, NULL, + x, BT_REAL, dr, REQUIRED); + + make_generic ("range", GFC_ISYM_RANGE, GFC_STD_F95); + + add_sym_2 ("real", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77, + gfc_check_real, gfc_simplify_real, gfc_resolve_real, + a, BT_UNKNOWN, dr, REQUIRED, kind, BT_INTEGER, di, OPTIONAL); + + /* This provides compatibility with g77. */ + add_sym_1 ("realpart", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU, + gfc_check_fn_c, gfc_simplify_realpart, gfc_resolve_realpart, + a, BT_UNKNOWN, dr, REQUIRED); + + add_sym_1 ("float", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77, + gfc_check_i, gfc_simplify_float, NULL, + a, BT_INTEGER, di, REQUIRED); + + add_sym_1 ("sngl", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77, + NULL, gfc_simplify_sngl, NULL, + a, BT_REAL, dd, REQUIRED); + + make_generic ("real", GFC_ISYM_REAL, GFC_STD_F77); + + add_sym_2 ("rename", GFC_ISYM_RENAME, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_rename, NULL, gfc_resolve_rename, + a, BT_CHARACTER, dc, REQUIRED, b, BT_CHARACTER, dc, REQUIRED); + + make_generic ("rename", GFC_ISYM_RENAME, GFC_STD_GNU); + + add_sym_2 ("repeat", GFC_ISYM_REPEAT, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_CHARACTER, dc, GFC_STD_F95, + gfc_check_repeat, gfc_simplify_repeat, gfc_resolve_repeat, + stg, BT_CHARACTER, dc, REQUIRED, ncopies, BT_INTEGER, di, REQUIRED); + + make_generic ("repeat", GFC_ISYM_REPEAT, GFC_STD_F95); + + add_sym_4 ("reshape", GFC_ISYM_RESHAPE, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_reshape, gfc_simplify_reshape, gfc_resolve_reshape, + src, BT_REAL, dr, REQUIRED, shp, BT_INTEGER, ii, REQUIRED, + pad, BT_REAL, dr, OPTIONAL, ord, BT_INTEGER, ii, OPTIONAL); + + make_generic ("reshape", GFC_ISYM_RESHAPE, GFC_STD_F95); + + add_sym_1 ("rrspacing", GFC_ISYM_RRSPACING, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_x, gfc_simplify_rrspacing, gfc_resolve_rrspacing, + x, BT_REAL, dr, REQUIRED); + + make_generic ("rrspacing", GFC_ISYM_RRSPACING, GFC_STD_F95); + + add_sym_2 ("scale", GFC_ISYM_SCALE, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_scale, gfc_simplify_scale, gfc_resolve_scale, + x, BT_REAL, dr, REQUIRED, i, BT_INTEGER, di, REQUIRED); + + make_generic ("scale", GFC_ISYM_SCALE, GFC_STD_F95); + + add_sym_4 ("scan", GFC_ISYM_SCAN, CLASS_ELEMENTAL, ACTUAL_NO, + BT_INTEGER, di, GFC_STD_F95, + gfc_check_scan, gfc_simplify_scan, gfc_resolve_scan, + stg, BT_CHARACTER, dc, REQUIRED, set, BT_CHARACTER, dc, REQUIRED, + bck, BT_LOGICAL, dl, OPTIONAL, kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("scan", GFC_ISYM_SCAN, GFC_STD_F95); + + /* Added for G77 compatibility garbage. */ + add_sym_0 ("second", GFC_ISYM_SECOND, NO_CLASS, ACTUAL_NO, BT_REAL, 4, GFC_STD_GNU, + NULL, NULL, NULL); + + make_generic ("second", GFC_ISYM_SECOND, GFC_STD_GNU); + + /* Added for G77 compatibility. */ + add_sym_1 ("secnds", GFC_ISYM_SECNDS, NO_CLASS, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU, + gfc_check_secnds, NULL, gfc_resolve_secnds, + x, BT_REAL, dr, REQUIRED); + + make_generic ("secnds", GFC_ISYM_SECNDS, GFC_STD_GNU); + + add_sym_1 ("selected_char_kind", GFC_ISYM_SC_KIND, CLASS_TRANSFORMATIONAL, + ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2003, + gfc_check_selected_char_kind, gfc_simplify_selected_char_kind, + NULL, nm, BT_CHARACTER, dc, REQUIRED); + + make_generic ("selected_char_kind", GFC_ISYM_SC_KIND, GFC_STD_F2003); + + add_sym_1 ("selected_int_kind", GFC_ISYM_SI_KIND, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_INTEGER, di, + GFC_STD_F95, gfc_check_selected_int_kind, + gfc_simplify_selected_int_kind, NULL, r, BT_INTEGER, di, REQUIRED); + + make_generic ("selected_int_kind", GFC_ISYM_SI_KIND, GFC_STD_F95); + + add_sym_2 ("selected_real_kind", GFC_ISYM_SR_KIND, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_INTEGER, di, + GFC_STD_F95, gfc_check_selected_real_kind, + gfc_simplify_selected_real_kind, NULL, + p, BT_INTEGER, di, OPTIONAL, r, BT_INTEGER, di, OPTIONAL); + + make_generic ("selected_real_kind", GFC_ISYM_SR_KIND, GFC_STD_F95); + + add_sym_2 ("set_exponent", GFC_ISYM_SET_EXPONENT, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_set_exponent, gfc_simplify_set_exponent, + gfc_resolve_set_exponent, + x, BT_REAL, dr, REQUIRED, i, BT_INTEGER, di, REQUIRED); + + make_generic ("set_exponent", GFC_ISYM_SET_EXPONENT, GFC_STD_F95); + + add_sym_1 ("shape", GFC_ISYM_SHAPE, CLASS_INQUIRY, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F95, + gfc_check_shape, gfc_simplify_shape, gfc_resolve_shape, + src, BT_REAL, dr, REQUIRED); + + make_generic ("shape", GFC_ISYM_SHAPE, GFC_STD_F95); + + add_sym_2 ("sign", GFC_ISYM_SIGN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_sign, gfc_simplify_sign, gfc_resolve_sign, + a, BT_REAL, dr, REQUIRED, b, BT_REAL, dr, REQUIRED); + + add_sym_2 ("isign", GFC_ISYM_SIGN, CLASS_ELEMENTAL, ACTUAL_YES, BT_INTEGER, di, GFC_STD_F77, + NULL, gfc_simplify_sign, gfc_resolve_sign, + a, BT_INTEGER, di, REQUIRED, b, BT_INTEGER, di, REQUIRED); + + add_sym_2 ("dsign", GFC_ISYM_SIGN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_x_yd, gfc_simplify_sign, gfc_resolve_sign, + a, BT_REAL, dd, REQUIRED, b, BT_REAL, dd, REQUIRED); + + make_generic ("sign", GFC_ISYM_SIGN, GFC_STD_F77); + + add_sym_2 ("signal", GFC_ISYM_SIGNAL, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_signal, NULL, gfc_resolve_signal, + num, BT_INTEGER, di, REQUIRED, han, BT_UNKNOWN, 0, REQUIRED); + + make_generic ("signal", GFC_ISYM_SIGNAL, GFC_STD_GNU); + + add_sym_1 ("sin", GFC_ISYM_SIN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_fn_rc, gfc_simplify_sin, gfc_resolve_sin, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dsin", GFC_ISYM_SIN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_fn_d, gfc_simplify_sin, gfc_resolve_sin, + x, BT_REAL, dd, REQUIRED); + + add_sym_1 ("csin", GFC_ISYM_SIN, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dz, GFC_STD_F77, + NULL, gfc_simplify_sin, gfc_resolve_sin, + x, BT_COMPLEX, dz, REQUIRED); + + add_sym_1 ("zsin", GFC_ISYM_SIN, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dd, GFC_STD_GNU, + NULL, gfc_simplify_sin, gfc_resolve_sin, + x, BT_COMPLEX, dd, REQUIRED); + + make_alias ("cdsin", GFC_STD_GNU); + + make_generic ("sin", GFC_ISYM_SIN, GFC_STD_F77); + + add_sym_1 ("sinh", GFC_ISYM_SINH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_fn_r, gfc_simplify_sinh, gfc_resolve_sinh, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dsinh", GFC_ISYM_SINH,CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_fn_d, gfc_simplify_sinh, gfc_resolve_sinh, + x, BT_REAL, dd, REQUIRED); + + make_generic ("sinh", GFC_ISYM_SINH, GFC_STD_F77); + + add_sym_3 ("size", GFC_ISYM_SIZE, CLASS_INQUIRY, ACTUAL_NO, + BT_INTEGER, di, GFC_STD_F95, + gfc_check_size, gfc_simplify_size, gfc_resolve_size, + ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL, + kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("size", GFC_ISYM_SIZE, GFC_STD_F95); + + add_sym_1 ("sizeof", GFC_ISYM_SIZEOF, NO_CLASS, ACTUAL_NO, BT_INTEGER, ii, + GFC_STD_GNU, gfc_check_sizeof, NULL, NULL, + x, BT_UNKNOWN, 0, REQUIRED); + + make_generic ("sizeof", GFC_ISYM_SIZEOF, GFC_STD_GNU); + make_alias ("c_sizeof", GFC_STD_F2008); + + add_sym_1 ("spacing", GFC_ISYM_SPACING, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_x, gfc_simplify_spacing, gfc_resolve_spacing, + x, BT_REAL, dr, REQUIRED); + + make_generic ("spacing", GFC_ISYM_SPACING, GFC_STD_F95); + + add_sym_3 ("spread", GFC_ISYM_SPREAD, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_spread, NULL, gfc_resolve_spread, + src, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, REQUIRED, + ncopies, BT_INTEGER, di, REQUIRED); + + make_generic ("spread", GFC_ISYM_SPREAD, GFC_STD_F95); + + add_sym_1 ("sqrt", GFC_ISYM_SQRT, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_fn_rc, gfc_simplify_sqrt, gfc_resolve_sqrt, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dsqrt", GFC_ISYM_SQRT, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_fn_d, gfc_simplify_sqrt, gfc_resolve_sqrt, + x, BT_REAL, dd, REQUIRED); + + add_sym_1 ("csqrt", GFC_ISYM_SQRT, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dz, GFC_STD_F77, + NULL, gfc_simplify_sqrt, gfc_resolve_sqrt, + x, BT_COMPLEX, dz, REQUIRED); + + add_sym_1 ("zsqrt", GFC_ISYM_SQRT, CLASS_ELEMENTAL, ACTUAL_YES, BT_COMPLEX, dd, GFC_STD_GNU, + NULL, gfc_simplify_sqrt, gfc_resolve_sqrt, + x, BT_COMPLEX, dd, REQUIRED); + + make_alias ("cdsqrt", GFC_STD_GNU); + + make_generic ("sqrt", GFC_ISYM_SQRT, GFC_STD_F77); + + add_sym_2 ("stat", GFC_ISYM_STAT, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_stat, NULL, gfc_resolve_stat, + a, BT_CHARACTER, dc, REQUIRED, b, BT_INTEGER, di, REQUIRED); + + make_generic ("stat", GFC_ISYM_STAT, GFC_STD_GNU); + + add_sym_3red ("sum", GFC_ISYM_SUM, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_product_sum, NULL, gfc_resolve_sum, + ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL, + msk, BT_LOGICAL, dl, OPTIONAL); + + make_generic ("sum", GFC_ISYM_SUM, GFC_STD_F95); + + add_sym_2 ("symlnk", GFC_ISYM_SYMLNK, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_symlnk, NULL, gfc_resolve_symlnk, + a, BT_CHARACTER, dc, REQUIRED, b, BT_CHARACTER, dc, REQUIRED); + + make_generic ("symlnk", GFC_ISYM_SYMLNK, GFC_STD_GNU); + + add_sym_1 ("system", GFC_ISYM_SYSTEM, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + NULL, NULL, NULL, + c, BT_CHARACTER, dc, REQUIRED); + + make_generic ("system", GFC_ISYM_SYSTEM, GFC_STD_GNU); + + add_sym_1 ("tan", GFC_ISYM_TAN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_fn_r, gfc_simplify_tan, gfc_resolve_tan, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dtan", GFC_ISYM_TAN, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_fn_d, gfc_simplify_tan, gfc_resolve_tan, + x, BT_REAL, dd, REQUIRED); + + make_generic ("tan", GFC_ISYM_TAN, GFC_STD_F77); + + add_sym_1 ("tanh", GFC_ISYM_TANH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dr, GFC_STD_F77, + gfc_check_fn_r, gfc_simplify_tanh, gfc_resolve_tanh, + x, BT_REAL, dr, REQUIRED); + + add_sym_1 ("dtanh", GFC_ISYM_TANH, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL, dd, GFC_STD_F77, + gfc_check_fn_d, gfc_simplify_tanh, gfc_resolve_tanh, + x, BT_REAL, dd, REQUIRED); + + make_generic ("tanh", GFC_ISYM_TANH, GFC_STD_F77); + + add_sym_0 ("time", GFC_ISYM_TIME, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + NULL, NULL, gfc_resolve_time); + + make_generic ("time", GFC_ISYM_TIME, GFC_STD_GNU); + + add_sym_0 ("time8", GFC_ISYM_TIME8, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + NULL, NULL, gfc_resolve_time8); + + make_generic ("time8", GFC_ISYM_TIME8, GFC_STD_GNU); + + add_sym_1 ("tiny", GFC_ISYM_TINY, CLASS_INQUIRY, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_x, gfc_simplify_tiny, NULL, + x, BT_REAL, dr, REQUIRED); + + make_generic ("tiny", GFC_ISYM_TINY, GFC_STD_F95); + + add_sym_1 ("trailz", GFC_ISYM_TRAILZ, CLASS_ELEMENTAL, ACTUAL_NO, + BT_INTEGER, di, GFC_STD_F2008, + gfc_check_i, gfc_simplify_trailz, NULL, + i, BT_INTEGER, di, REQUIRED); + + make_generic ("trailz", GFC_ISYM_TRAILZ, GFC_STD_F2008); + + add_sym_3 ("transfer", GFC_ISYM_TRANSFER, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_transfer, gfc_simplify_transfer, gfc_resolve_transfer, + src, BT_REAL, dr, REQUIRED, mo, BT_REAL, dr, REQUIRED, + sz, BT_INTEGER, di, OPTIONAL); + + make_generic ("transfer", GFC_ISYM_TRANSFER, GFC_STD_F95); + + add_sym_1 ("transpose", GFC_ISYM_TRANSPOSE, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_transpose, NULL, gfc_resolve_transpose, + m, BT_REAL, dr, REQUIRED); + + make_generic ("transpose", GFC_ISYM_TRANSPOSE, GFC_STD_F95); + + add_sym_1 ("trim", GFC_ISYM_TRIM, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_CHARACTER, dc, GFC_STD_F95, + gfc_check_trim, gfc_simplify_trim, gfc_resolve_trim, + stg, BT_CHARACTER, dc, REQUIRED); + + make_generic ("trim", GFC_ISYM_TRIM, GFC_STD_F95); + + add_sym_1 ("ttynam", GFC_ISYM_TTYNAM, NO_CLASS, ACTUAL_NO, BT_CHARACTER, 0, GFC_STD_GNU, + gfc_check_ttynam, NULL, gfc_resolve_ttynam, + ut, BT_INTEGER, di, REQUIRED); + + make_generic ("ttynam", GFC_ISYM_TTYNAM, GFC_STD_GNU); + + add_sym_3 ("ubound", GFC_ISYM_UBOUND, CLASS_INQUIRY, ACTUAL_NO, + BT_INTEGER, di, GFC_STD_F95, + gfc_check_ubound, gfc_simplify_ubound, gfc_resolve_ubound, + ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL, + kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("ubound", GFC_ISYM_UBOUND, GFC_STD_F95); + + /* g77 compatibility for UMASK. */ + add_sym_1 ("umask", GFC_ISYM_UMASK, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_umask, NULL, gfc_resolve_umask, + a, BT_INTEGER, di, REQUIRED); + + make_generic ("umask", GFC_ISYM_UMASK, GFC_STD_GNU); + + /* g77 compatibility for UNLINK. */ + add_sym_1 ("unlink", GFC_ISYM_UNLINK, NO_CLASS, ACTUAL_NO, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_unlink, NULL, gfc_resolve_unlink, + a, BT_CHARACTER, dc, REQUIRED); + + make_generic ("unlink", GFC_ISYM_UNLINK, GFC_STD_GNU); + + add_sym_3 ("unpack", GFC_ISYM_UNPACK, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95, + gfc_check_unpack, NULL, gfc_resolve_unpack, + v, BT_REAL, dr, REQUIRED, msk, BT_LOGICAL, dl, REQUIRED, + f, BT_REAL, dr, REQUIRED); + + make_generic ("unpack", GFC_ISYM_UNPACK, GFC_STD_F95); + + add_sym_4 ("verify", GFC_ISYM_VERIFY, CLASS_ELEMENTAL, ACTUAL_NO, + BT_INTEGER, di, GFC_STD_F95, + gfc_check_verify, gfc_simplify_verify, gfc_resolve_verify, + stg, BT_CHARACTER, dc, REQUIRED, set, BT_CHARACTER, dc, REQUIRED, + bck, BT_LOGICAL, dl, OPTIONAL, kind, BT_INTEGER, di, OPTIONAL); + + make_generic ("verify", GFC_ISYM_VERIFY, GFC_STD_F95); + + add_sym_1 ("loc", GFC_ISYM_LOC, NO_CLASS, ACTUAL_NO, BT_INTEGER, ii, GFC_STD_GNU, + gfc_check_loc, NULL, gfc_resolve_loc, + ar, BT_UNKNOWN, 0, REQUIRED); + + make_generic ("loc", GFC_ISYM_LOC, GFC_STD_GNU); +} + + +/* Add intrinsic subroutines. */ + +static void +add_subroutines (void) +{ + /* Argument names as in the standard (to be used as argument keywords). */ + const char + *h = "harvest", *dt = "date", *vl = "values", *pt = "put", + *c = "count", *tm = "time", *tp = "topos", *gt = "get", + *t = "to", *zn = "zone", *fp = "frompos", *cm = "count_max", + *f = "from", *sz = "size", *ln = "len", *cr = "count_rate", + *com = "command", *length = "length", *st = "status", + *val = "value", *num = "number", *name = "name", + *trim_name = "trim_name", *ut = "unit", *han = "handler", + *sec = "seconds", *res = "result", *of = "offset", *md = "mode", + *whence = "whence", *pos = "pos"; + + int di, dr, dc, dl, ii; + + di = gfc_default_integer_kind; + dr = gfc_default_real_kind; + dc = gfc_default_character_kind; + dl = gfc_default_logical_kind; + ii = gfc_index_integer_kind; + + add_sym_0s ("abort", GFC_ISYM_ABORT, GFC_STD_GNU, NULL); + + make_noreturn(); + + add_sym_1s ("cpu_time", GFC_ISYM_CPU_TIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F95, + gfc_check_cpu_time, NULL, gfc_resolve_cpu_time, + tm, BT_REAL, dr, REQUIRED); + + /* More G77 compatibility garbage. */ + add_sym_2s ("ctime", GFC_ISYM_CTIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_ctime_sub, NULL, gfc_resolve_ctime_sub, + tm, BT_INTEGER, di, REQUIRED, res, BT_CHARACTER, dc, REQUIRED); + + add_sym_1s ("idate", GFC_ISYM_IDATE, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_itime_idate, NULL, gfc_resolve_idate, + vl, BT_INTEGER, 4, REQUIRED); + + add_sym_1s ("itime", GFC_ISYM_ITIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_itime_idate, NULL, gfc_resolve_itime, + vl, BT_INTEGER, 4, REQUIRED); + + add_sym_2s ("ltime", GFC_ISYM_LTIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_ltime_gmtime, NULL, gfc_resolve_ltime, + tm, BT_INTEGER, di, REQUIRED, vl, BT_INTEGER, di, REQUIRED); + + add_sym_2s ("gmtime", GFC_ISYM_GMTIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_ltime_gmtime, NULL, gfc_resolve_gmtime, + tm, BT_INTEGER, di, REQUIRED, vl, BT_INTEGER, di, REQUIRED); + + add_sym_1s ("second", GFC_ISYM_SECOND, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_second_sub, NULL, gfc_resolve_second_sub, + tm, BT_REAL, dr, REQUIRED); + + add_sym_2s ("chdir", GFC_ISYM_CHDIR, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_chdir_sub, NULL, gfc_resolve_chdir_sub, + name, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + + add_sym_3s ("chmod", GFC_ISYM_CHMOD, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_chmod_sub, NULL, gfc_resolve_chmod_sub, + name, BT_CHARACTER, dc, REQUIRED, md, BT_CHARACTER, dc, REQUIRED, + st, BT_INTEGER, di, OPTIONAL); + + add_sym_4s ("date_and_time", GFC_ISYM_DATE_AND_TIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F95, + gfc_check_date_and_time, NULL, NULL, + dt, BT_CHARACTER, dc, OPTIONAL, tm, BT_CHARACTER, dc, OPTIONAL, + zn, BT_CHARACTER, dc, OPTIONAL, vl, BT_INTEGER, di, OPTIONAL); + + /* More G77 compatibility garbage. */ + add_sym_2s ("etime", GFC_ISYM_ETIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_dtime_etime_sub, NULL, gfc_resolve_etime_sub, + vl, BT_REAL, 4, REQUIRED, tm, BT_REAL, 4, REQUIRED); + + add_sym_2s ("dtime", GFC_ISYM_DTIME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_dtime_etime_sub, NULL, gfc_resolve_dtime_sub, + vl, BT_REAL, 4, REQUIRED, tm, BT_REAL, 4, REQUIRED); + + add_sym_1s ("fdate", GFC_ISYM_FDATE, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_fdate_sub, NULL, gfc_resolve_fdate_sub, + dt, BT_CHARACTER, dc, REQUIRED); + + add_sym_1s ("gerror", GFC_ISYM_GERROR, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_gerror, NULL, gfc_resolve_gerror, res, BT_CHARACTER, + dc, REQUIRED); + + add_sym_2s ("getcwd", GFC_ISYM_GETCWD, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_getcwd_sub, NULL, gfc_resolve_getcwd_sub, + c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + + add_sym_2s ("getenv", GFC_ISYM_GETENV, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + NULL, NULL, NULL, + name, BT_CHARACTER, dc, REQUIRED, val, BT_CHARACTER, dc, + REQUIRED); + + add_sym_2s ("getarg", GFC_ISYM_GETARG, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_getarg, NULL, gfc_resolve_getarg, + pos, BT_INTEGER, di, REQUIRED, val, BT_CHARACTER, dc, REQUIRED); + + add_sym_1s ("getlog", GFC_ISYM_GETLOG, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_getlog, NULL, gfc_resolve_getlog, c, BT_CHARACTER, + dc, REQUIRED); + + /* F2003 commandline routines. */ + + add_sym_3s ("get_command", GFC_ISYM_GET_COMMAND, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F2003, + NULL, NULL, gfc_resolve_get_command, + com, BT_CHARACTER, dc, OPTIONAL, + length, BT_INTEGER, di, OPTIONAL, + st, BT_INTEGER, di, OPTIONAL); + + add_sym_4s ("get_command_argument", GFC_ISYM_GET_COMMAND_ARGUMENT, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F2003, + NULL, NULL, gfc_resolve_get_command_argument, + num, BT_INTEGER, di, REQUIRED, val, BT_CHARACTER, dc, OPTIONAL, + length, BT_INTEGER, di, OPTIONAL, st, BT_INTEGER, di, OPTIONAL); + + /* F2003 subroutine to get environment variables. */ + + add_sym_5s ("get_environment_variable", GFC_ISYM_GET_ENVIRONMENT_VARIABLE, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F2003, + NULL, NULL, gfc_resolve_get_environment_variable, + name, BT_CHARACTER, dc, REQUIRED, + val, BT_CHARACTER, dc, OPTIONAL, + length, BT_INTEGER, di, OPTIONAL, st, BT_INTEGER, di, OPTIONAL, + trim_name, BT_LOGICAL, dl, OPTIONAL); + + add_sym_2s ("move_alloc", GFC_ISYM_MOVE_ALLOC, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F2003, + gfc_check_move_alloc, NULL, NULL, + f, BT_UNKNOWN, 0, REQUIRED, + t, BT_UNKNOWN, 0, REQUIRED); + + add_sym_5s ("mvbits", GFC_ISYM_MVBITS, CLASS_ELEMENTAL, BT_UNKNOWN, 0, GFC_STD_F95, + gfc_check_mvbits, gfc_simplify_mvbits, gfc_resolve_mvbits, + f, BT_INTEGER, di, REQUIRED, fp, BT_INTEGER, di, REQUIRED, + ln, BT_INTEGER, di, REQUIRED, t, BT_INTEGER, di, REQUIRED, + tp, BT_INTEGER, di, REQUIRED); + + add_sym_1s ("random_number", GFC_ISYM_RANDOM_NUMBER, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F95, + gfc_check_random_number, NULL, gfc_resolve_random_number, + h, BT_REAL, dr, REQUIRED); + + add_sym_3s ("random_seed", GFC_ISYM_RANDOM_SEED, NO_CLASS, + BT_UNKNOWN, 0, GFC_STD_F95, + gfc_check_random_seed, NULL, gfc_resolve_random_seed, + sz, BT_INTEGER, di, OPTIONAL, pt, BT_INTEGER, di, OPTIONAL, + gt, BT_INTEGER, di, OPTIONAL); + + /* More G77 compatibility garbage. */ + add_sym_3s ("alarm", GFC_ISYM_ALARM, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_alarm_sub, NULL, gfc_resolve_alarm_sub, + sec, BT_INTEGER, di, REQUIRED, han, BT_UNKNOWN, 0, REQUIRED, + st, BT_INTEGER, di, OPTIONAL); + + add_sym_1s ("srand", GFC_ISYM_SRAND, NO_CLASS, BT_UNKNOWN, di, GFC_STD_GNU, + gfc_check_srand, NULL, gfc_resolve_srand, + c, BT_INTEGER, 4, REQUIRED); + + add_sym_1s ("exit", GFC_ISYM_EXIT, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_exit, NULL, gfc_resolve_exit, + st, BT_INTEGER, di, OPTIONAL); + + make_noreturn(); + + add_sym_3s ("fgetc", GFC_ISYM_FGETC, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_fgetputc_sub, NULL, gfc_resolve_fgetc_sub, + ut, BT_INTEGER, di, REQUIRED, c, BT_CHARACTER, dc, REQUIRED, + st, BT_INTEGER, di, OPTIONAL); + + add_sym_2s ("fget", GFC_ISYM_FGET, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_fgetput_sub, NULL, gfc_resolve_fget_sub, + c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + + add_sym_1s ("flush", GFC_ISYM_FLUSH, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_flush, NULL, gfc_resolve_flush, + ut, BT_INTEGER, di, OPTIONAL); + + add_sym_3s ("fputc", GFC_ISYM_FPUTC, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_fgetputc_sub, NULL, gfc_resolve_fputc_sub, + ut, BT_INTEGER, di, REQUIRED, c, BT_CHARACTER, dc, REQUIRED, + st, BT_INTEGER, di, OPTIONAL); + + add_sym_2s ("fput", GFC_ISYM_FPUT, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_fgetput_sub, NULL, gfc_resolve_fput_sub, + c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + + add_sym_1s ("free", GFC_ISYM_FREE, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_free, + NULL, gfc_resolve_free, c, BT_INTEGER, ii, REQUIRED); + + add_sym_4s ("fseek", GFC_ISYM_FSEEK, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_fseek_sub, NULL, gfc_resolve_fseek_sub, + ut, BT_INTEGER, di, REQUIRED, of, BT_INTEGER, di, REQUIRED, + whence, BT_INTEGER, di, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + + add_sym_2s ("ftell", GFC_ISYM_FTELL, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_ftell_sub, NULL, gfc_resolve_ftell_sub, + ut, BT_INTEGER, di, REQUIRED, of, BT_INTEGER, ii, REQUIRED); + + add_sym_2s ("hostnm", GFC_ISYM_HOSTNM, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_hostnm_sub, NULL, gfc_resolve_hostnm_sub, + c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + + add_sym_3s ("kill", GFC_ISYM_KILL, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_kill_sub, + NULL, gfc_resolve_kill_sub, c, BT_INTEGER, di, REQUIRED, + val, BT_INTEGER, di, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + + add_sym_3s ("link", GFC_ISYM_LINK, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_link_sub, NULL, gfc_resolve_link_sub, + name, BT_CHARACTER, dc, REQUIRED, val, BT_CHARACTER, + dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + + add_sym_1s ("perror", GFC_ISYM_PERROR, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_perror, NULL, gfc_resolve_perror, + c, BT_CHARACTER, dc, REQUIRED); + + add_sym_3s ("rename", GFC_ISYM_RENAME, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_rename_sub, NULL, gfc_resolve_rename_sub, + name, BT_CHARACTER, dc, REQUIRED, val, BT_CHARACTER, + dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + + add_sym_1s ("sleep", GFC_ISYM_SLEEP, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_sleep_sub, NULL, gfc_resolve_sleep_sub, + val, BT_INTEGER, di, REQUIRED); + + add_sym_3s ("fstat", GFC_ISYM_FSTAT, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_fstat_sub, NULL, gfc_resolve_fstat_sub, + ut, BT_INTEGER, di, REQUIRED, vl, BT_INTEGER, di, REQUIRED, + st, BT_INTEGER, di, OPTIONAL); + + add_sym_3s ("lstat", GFC_ISYM_LSTAT, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_stat_sub, NULL, gfc_resolve_lstat_sub, + name, BT_CHARACTER, dc, REQUIRED, vl, BT_INTEGER, di, REQUIRED, + st, BT_INTEGER, di, OPTIONAL); + + add_sym_3s ("stat", GFC_ISYM_STAT, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_stat_sub, NULL, gfc_resolve_stat_sub, + name, BT_CHARACTER, dc, REQUIRED, vl, BT_INTEGER, di, REQUIRED, + st, BT_INTEGER, di, OPTIONAL); + + add_sym_3s ("signal", GFC_ISYM_SIGNAL, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_signal_sub, NULL, gfc_resolve_signal_sub, + num, BT_INTEGER, di, REQUIRED, han, BT_UNKNOWN, 0, REQUIRED, + st, BT_INTEGER, di, OPTIONAL); + + add_sym_3s ("symlnk", GFC_ISYM_SYMLINK, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_symlnk_sub, NULL, gfc_resolve_symlnk_sub, + name, BT_CHARACTER, dc, REQUIRED, val, BT_CHARACTER, + dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + + add_sym_2s ("system", GFC_ISYM_SYSTEM, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + NULL, NULL, gfc_resolve_system_sub, + com, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + + add_sym_3s ("system_clock", GFC_ISYM_SYSTEM_CLOCK, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_F95, + gfc_check_system_clock, NULL, gfc_resolve_system_clock, + c, BT_INTEGER, di, OPTIONAL, cr, BT_INTEGER, di, OPTIONAL, + cm, BT_INTEGER, di, OPTIONAL); + + add_sym_2s ("ttynam", GFC_ISYM_TTYNAM, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_ttynam_sub, NULL, gfc_resolve_ttynam_sub, + ut, BT_INTEGER, di, REQUIRED, name, BT_CHARACTER, dc, REQUIRED); + + add_sym_2s ("umask", GFC_ISYM_UMASK, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_umask_sub, NULL, gfc_resolve_umask_sub, + val, BT_INTEGER, di, REQUIRED, num, BT_INTEGER, di, OPTIONAL); + + add_sym_2s ("unlink", GFC_ISYM_UNLINK, NO_CLASS, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_unlink_sub, NULL, gfc_resolve_unlink_sub, + c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); +} + + +/* Add a function to the list of conversion symbols. */ + +static void +add_conv (bt from_type, int from_kind, bt to_type, int to_kind, int standard) +{ + gfc_typespec from, to; + gfc_intrinsic_sym *sym; + + if (sizing == SZ_CONVS) + { + nconv++; + return; + } + + gfc_clear_ts (&from); + from.type = from_type; + from.kind = from_kind; + + gfc_clear_ts (&to); + to.type = to_type; + to.kind = to_kind; + + sym = conversion + nconv; + + sym->name = conv_name (&from, &to); + sym->lib_name = sym->name; + sym->simplify.cc = gfc_convert_constant; + sym->standard = standard; + sym->elemental = 1; + sym->conversion = 1; + sym->ts = to; + sym->id = GFC_ISYM_CONVERSION; + + nconv++; +} + + +/* Create gfc_intrinsic_sym nodes for all intrinsic conversion + functions by looping over the kind tables. */ + +static void +add_conversions (void) +{ + int i, j; + + /* Integer-Integer conversions. */ + for (i = 0; gfc_integer_kinds[i].kind != 0; i++) + for (j = 0; gfc_integer_kinds[j].kind != 0; j++) + { + if (i == j) + continue; + + add_conv (BT_INTEGER, gfc_integer_kinds[i].kind, + BT_INTEGER, gfc_integer_kinds[j].kind, GFC_STD_F77); + } + + /* Integer-Real/Complex conversions. */ + for (i = 0; gfc_integer_kinds[i].kind != 0; i++) + for (j = 0; gfc_real_kinds[j].kind != 0; j++) + { + add_conv (BT_INTEGER, gfc_integer_kinds[i].kind, + BT_REAL, gfc_real_kinds[j].kind, GFC_STD_F77); + + add_conv (BT_REAL, gfc_real_kinds[j].kind, + BT_INTEGER, gfc_integer_kinds[i].kind, GFC_STD_F77); + + add_conv (BT_INTEGER, gfc_integer_kinds[i].kind, + BT_COMPLEX, gfc_real_kinds[j].kind, GFC_STD_F77); + + add_conv (BT_COMPLEX, gfc_real_kinds[j].kind, + BT_INTEGER, gfc_integer_kinds[i].kind, GFC_STD_F77); + } + + if ((gfc_option.allow_std & GFC_STD_LEGACY) != 0) + { + /* Hollerith-Integer conversions. */ + for (i = 0; gfc_integer_kinds[i].kind != 0; i++) + add_conv (BT_HOLLERITH, gfc_default_character_kind, + BT_INTEGER, gfc_integer_kinds[i].kind, GFC_STD_LEGACY); + /* Hollerith-Real conversions. */ + for (i = 0; gfc_real_kinds[i].kind != 0; i++) + add_conv (BT_HOLLERITH, gfc_default_character_kind, + BT_REAL, gfc_real_kinds[i].kind, GFC_STD_LEGACY); + /* Hollerith-Complex conversions. */ + for (i = 0; gfc_real_kinds[i].kind != 0; i++) + add_conv (BT_HOLLERITH, gfc_default_character_kind, + BT_COMPLEX, gfc_real_kinds[i].kind, GFC_STD_LEGACY); + + /* Hollerith-Character conversions. */ + add_conv (BT_HOLLERITH, gfc_default_character_kind, BT_CHARACTER, + gfc_default_character_kind, GFC_STD_LEGACY); + + /* Hollerith-Logical conversions. */ + for (i = 0; gfc_logical_kinds[i].kind != 0; i++) + add_conv (BT_HOLLERITH, gfc_default_character_kind, + BT_LOGICAL, gfc_logical_kinds[i].kind, GFC_STD_LEGACY); + } + + /* Real/Complex - Real/Complex conversions. */ + for (i = 0; gfc_real_kinds[i].kind != 0; i++) + for (j = 0; gfc_real_kinds[j].kind != 0; j++) + { + if (i != j) + { + add_conv (BT_REAL, gfc_real_kinds[i].kind, + BT_REAL, gfc_real_kinds[j].kind, GFC_STD_F77); + + add_conv (BT_COMPLEX, gfc_real_kinds[i].kind, + BT_COMPLEX, gfc_real_kinds[j].kind, GFC_STD_F77); + } + + add_conv (BT_REAL, gfc_real_kinds[i].kind, + BT_COMPLEX, gfc_real_kinds[j].kind, GFC_STD_F77); + + add_conv (BT_COMPLEX, gfc_real_kinds[i].kind, + BT_REAL, gfc_real_kinds[j].kind, GFC_STD_F77); + } + + /* Logical/Logical kind conversion. */ + for (i = 0; gfc_logical_kinds[i].kind; i++) + for (j = 0; gfc_logical_kinds[j].kind; j++) + { + if (i == j) + continue; + + add_conv (BT_LOGICAL, gfc_logical_kinds[i].kind, + BT_LOGICAL, gfc_logical_kinds[j].kind, GFC_STD_F77); + } + + /* Integer-Logical and Logical-Integer conversions. */ + if ((gfc_option.allow_std & GFC_STD_LEGACY) != 0) + for (i=0; gfc_integer_kinds[i].kind; i++) + for (j=0; gfc_logical_kinds[j].kind; j++) + { + add_conv (BT_INTEGER, gfc_integer_kinds[i].kind, + BT_LOGICAL, gfc_logical_kinds[j].kind, GFC_STD_LEGACY); + add_conv (BT_LOGICAL, gfc_logical_kinds[j].kind, + BT_INTEGER, gfc_integer_kinds[i].kind, GFC_STD_LEGACY); + } +} + + +static void +add_char_conversions (void) +{ + int n, i, j; + + /* Count possible conversions. */ + for (i = 0; gfc_character_kinds[i].kind != 0; i++) + for (j = 0; gfc_character_kinds[j].kind != 0; j++) + if (i != j) + ncharconv++; + + /* Allocate memory. */ + char_conversions = XCNEWVEC (gfc_intrinsic_sym, ncharconv); + + /* Add the conversions themselves. */ + n = 0; + for (i = 0; gfc_character_kinds[i].kind != 0; i++) + for (j = 0; gfc_character_kinds[j].kind != 0; j++) + { + gfc_typespec from, to; + + if (i == j) + continue; + + gfc_clear_ts (&from); + from.type = BT_CHARACTER; + from.kind = gfc_character_kinds[i].kind; + + gfc_clear_ts (&to); + to.type = BT_CHARACTER; + to.kind = gfc_character_kinds[j].kind; + + char_conversions[n].name = conv_name (&from, &to); + char_conversions[n].lib_name = char_conversions[n].name; + char_conversions[n].simplify.cc = gfc_convert_char_constant; + char_conversions[n].standard = GFC_STD_F2003; + char_conversions[n].elemental = 1; + char_conversions[n].conversion = 0; + char_conversions[n].ts = to; + char_conversions[n].id = GFC_ISYM_CONVERSION; + + n++; + } +} + + +/* Initialize the table of intrinsics. */ +void +gfc_intrinsic_init_1 (void) +{ + int i; + + nargs = nfunc = nsub = nconv = 0; + + /* Create a namespace to hold the resolved intrinsic symbols. */ + gfc_intrinsic_namespace = gfc_get_namespace (NULL, 0); + + sizing = SZ_FUNCS; + add_functions (); + sizing = SZ_SUBS; + add_subroutines (); + sizing = SZ_CONVS; + add_conversions (); + + functions = XCNEWVAR (struct gfc_intrinsic_sym, + sizeof (gfc_intrinsic_sym) * (nfunc + nsub) + + sizeof (gfc_intrinsic_arg) * nargs); + + next_sym = functions; + subroutines = functions + nfunc; + + conversion = XCNEWVEC (gfc_intrinsic_sym, nconv); + + next_arg = ((gfc_intrinsic_arg *) (subroutines + nsub)) - 1; + + sizing = SZ_NOTHING; + nconv = 0; + + add_functions (); + add_subroutines (); + add_conversions (); + + /* Character conversion intrinsics need to be treated separately. */ + add_char_conversions (); + + /* Set the pure flag. All intrinsic functions are pure, and + intrinsic subroutines are pure if they are elemental. */ + + for (i = 0; i < nfunc; i++) + functions[i].pure = 1; + + for (i = 0; i < nsub; i++) + subroutines[i].pure = subroutines[i].elemental; +} + + +void +gfc_intrinsic_done_1 (void) +{ + gfc_free (functions); + gfc_free (conversion); + gfc_free (char_conversions); + gfc_free_namespace (gfc_intrinsic_namespace); +} + + +/******** Subroutines to check intrinsic interfaces ***********/ + +/* Given a formal argument list, remove any NULL arguments that may + have been left behind by a sort against some formal argument list. */ + +static void +remove_nullargs (gfc_actual_arglist **ap) +{ + gfc_actual_arglist *head, *tail, *next; + + tail = NULL; + + for (head = *ap; head; head = next) + { + next = head->next; + + if (head->expr == NULL && !head->label) + { + head->next = NULL; + gfc_free_actual_arglist (head); + } + else + { + if (tail == NULL) + *ap = head; + else + tail->next = head; + + tail = head; + tail->next = NULL; + } + } + + if (tail == NULL) + *ap = NULL; +} + + +/* Given an actual arglist and a formal arglist, sort the actual + arglist so that its arguments are in a one-to-one correspondence + with the format arglist. Arguments that are not present are given + a blank gfc_actual_arglist structure. If something is obviously + wrong (say, a missing required argument) we abort sorting and + return FAILURE. */ + +static gfc_try +sort_actual (const char *name, gfc_actual_arglist **ap, + gfc_intrinsic_arg *formal, locus *where) +{ + gfc_actual_arglist *actual, *a; + gfc_intrinsic_arg *f; + + remove_nullargs (ap); + actual = *ap; + + for (f = formal; f; f = f->next) + f->actual = NULL; + + f = formal; + a = actual; + + if (f == NULL && a == NULL) /* No arguments */ + return SUCCESS; + + for (;;) + { /* Put the nonkeyword arguments in a 1:1 correspondence */ + if (f == NULL) + break; + if (a == NULL) + goto optional; + + if (a->name != NULL) + goto keywords; + + f->actual = a; + + f = f->next; + a = a->next; + } + + if (a == NULL) + goto do_sort; + + gfc_error ("Too many arguments in call to '%s' at %L", name, where); + return FAILURE; + +keywords: + /* Associate the remaining actual arguments, all of which have + to be keyword arguments. */ + for (; a; a = a->next) + { + for (f = formal; f; f = f->next) + if (strcmp (a->name, f->name) == 0) + break; + + if (f == NULL) + { + if (a->name[0] == '%') + gfc_error ("The argument list functions %%VAL, %%LOC or %%REF " + "are not allowed in this context at %L", where); + else + gfc_error ("Can't find keyword named '%s' in call to '%s' at %L", + a->name, name, where); + return FAILURE; + } + + if (f->actual != NULL) + { + gfc_error ("Argument '%s' is appears twice in call to '%s' at %L", + f->name, name, where); + return FAILURE; + } + + f->actual = a; + } + +optional: + /* At this point, all unmatched formal args must be optional. */ + for (f = formal; f; f = f->next) + { + if (f->actual == NULL && f->optional == 0) + { + gfc_error ("Missing actual argument '%s' in call to '%s' at %L", + f->name, name, where); + return FAILURE; + } + } + +do_sort: + /* Using the formal argument list, string the actual argument list + together in a way that corresponds with the formal list. */ + actual = NULL; + + for (f = formal; f; f = f->next) + { + if (f->actual && f->actual->label != NULL && f->ts.type) + { + gfc_error ("ALTERNATE RETURN not permitted at %L", where); + return FAILURE; + } + + if (f->actual == NULL) + { + a = gfc_get_actual_arglist (); + a->missing_arg_type = f->ts.type; + } + else + a = f->actual; + + if (actual == NULL) + *ap = a; + else + actual->next = a; + + actual = a; + } + actual->next = NULL; /* End the sorted argument list. */ + + return SUCCESS; +} + + +/* Compare an actual argument list with an intrinsic's formal argument + list. The lists are checked for agreement of type. We don't check + for arrayness here. */ + +static gfc_try +check_arglist (gfc_actual_arglist **ap, gfc_intrinsic_sym *sym, + int error_flag) +{ + gfc_actual_arglist *actual; + gfc_intrinsic_arg *formal; + int i; + + formal = sym->formal; + actual = *ap; + + i = 0; + for (; formal; formal = formal->next, actual = actual->next, i++) + { + gfc_typespec ts; + + if (actual->expr == NULL) + continue; + + ts = formal->ts; + + /* A kind of 0 means we don't check for kind. */ + if (ts.kind == 0) + ts.kind = actual->expr->ts.kind; + + if (!gfc_compare_types (&ts, &actual->expr->ts)) + { + if (error_flag) + gfc_error ("Type of argument '%s' in call to '%s' at %L should " + "be %s, not %s", gfc_current_intrinsic_arg[i], + gfc_current_intrinsic, &actual->expr->where, + gfc_typename (&formal->ts), + gfc_typename (&actual->expr->ts)); + return FAILURE; + } + } + + return SUCCESS; +} + + +/* Given a pointer to an intrinsic symbol and an expression node that + represent the function call to that subroutine, figure out the type + of the result. This may involve calling a resolution subroutine. */ + +static void +resolve_intrinsic (gfc_intrinsic_sym *specific, gfc_expr *e) +{ + gfc_expr *a1, *a2, *a3, *a4, *a5; + gfc_actual_arglist *arg; + + if (specific->resolve.f1 == NULL) + { + if (e->value.function.name == NULL) + e->value.function.name = specific->lib_name; + + if (e->ts.type == BT_UNKNOWN) + e->ts = specific->ts; + return; + } + + arg = e->value.function.actual; + + /* Special case hacks for MIN and MAX. */ + if (specific->resolve.f1m == gfc_resolve_max + || specific->resolve.f1m == gfc_resolve_min) + { + (*specific->resolve.f1m) (e, arg); + return; + } + + if (arg == NULL) + { + (*specific->resolve.f0) (e); + return; + } + + a1 = arg->expr; + arg = arg->next; + + if (arg == NULL) + { + (*specific->resolve.f1) (e, a1); + return; + } + + a2 = arg->expr; + arg = arg->next; + + if (arg == NULL) + { + (*specific->resolve.f2) (e, a1, a2); + return; + } + + a3 = arg->expr; + arg = arg->next; + + if (arg == NULL) + { + (*specific->resolve.f3) (e, a1, a2, a3); + return; + } + + a4 = arg->expr; + arg = arg->next; + + if (arg == NULL) + { + (*specific->resolve.f4) (e, a1, a2, a3, a4); + return; + } + + a5 = arg->expr; + arg = arg->next; + + if (arg == NULL) + { + (*specific->resolve.f5) (e, a1, a2, a3, a4, a5); + return; + } + + gfc_internal_error ("resolve_intrinsic(): Too many args for intrinsic"); +} + + +/* Given an intrinsic symbol node and an expression node, call the + simplification function (if there is one), perhaps replacing the + expression with something simpler. We return FAILURE on an error + of the simplification, SUCCESS if the simplification worked, even + if nothing has changed in the expression itself. */ + +static gfc_try +do_simplify (gfc_intrinsic_sym *specific, gfc_expr *e) +{ + gfc_expr *result, *a1, *a2, *a3, *a4, *a5; + gfc_actual_arglist *arg; + + /* Max and min require special handling due to the variable number + of args. */ + if (specific->simplify.f1 == gfc_simplify_min) + { + result = gfc_simplify_min (e); + goto finish; + } + + if (specific->simplify.f1 == gfc_simplify_max) + { + result = gfc_simplify_max (e); + goto finish; + } + + if (specific->simplify.f1 == NULL) + { + result = NULL; + goto finish; + } + + arg = e->value.function.actual; + + if (arg == NULL) + { + result = (*specific->simplify.f0) (); + goto finish; + } + + a1 = arg->expr; + arg = arg->next; + + if (specific->simplify.cc == gfc_convert_constant + || specific->simplify.cc == gfc_convert_char_constant) + { + result = specific->simplify.cc (a1, specific->ts.type, specific->ts.kind); + goto finish; + } + + if (arg == NULL) + result = (*specific->simplify.f1) (a1); + else + { + a2 = arg->expr; + arg = arg->next; + + if (arg == NULL) + result = (*specific->simplify.f2) (a1, a2); + else + { + a3 = arg->expr; + arg = arg->next; + + if (arg == NULL) + result = (*specific->simplify.f3) (a1, a2, a3); + else + { + a4 = arg->expr; + arg = arg->next; + + if (arg == NULL) + result = (*specific->simplify.f4) (a1, a2, a3, a4); + else + { + a5 = arg->expr; + arg = arg->next; + + if (arg == NULL) + result = (*specific->simplify.f5) (a1, a2, a3, a4, a5); + else + gfc_internal_error + ("do_simplify(): Too many args for intrinsic"); + } + } + } + } + +finish: + if (result == &gfc_bad_expr) + return FAILURE; + + if (result == NULL) + resolve_intrinsic (specific, e); /* Must call at run-time */ + else + { + result->where = e->where; + gfc_replace_expr (e, result); + } + + return SUCCESS; +} + + +/* Initialize the gfc_current_intrinsic_arg[] array for the benefit of + error messages. This subroutine returns FAILURE if a subroutine + has more than MAX_INTRINSIC_ARGS, in which case the actual argument + list cannot match any intrinsic. */ + +static void +init_arglist (gfc_intrinsic_sym *isym) +{ + gfc_intrinsic_arg *formal; + int i; + + gfc_current_intrinsic = isym->name; + + i = 0; + for (formal = isym->formal; formal; formal = formal->next) + { + if (i >= MAX_INTRINSIC_ARGS) + gfc_internal_error ("init_arglist(): too many arguments"); + gfc_current_intrinsic_arg[i++] = formal->name; + } +} + + +/* Given a pointer to an intrinsic symbol and an expression consisting + of a function call, see if the function call is consistent with the + intrinsic's formal argument list. Return SUCCESS if the expression + and intrinsic match, FAILURE otherwise. */ + +static gfc_try +check_specific (gfc_intrinsic_sym *specific, gfc_expr *expr, int error_flag) +{ + gfc_actual_arglist *arg, **ap; + gfc_try t; + + ap = &expr->value.function.actual; + + init_arglist (specific); + + /* Don't attempt to sort the argument list for min or max. */ + if (specific->check.f1m == gfc_check_min_max + || specific->check.f1m == gfc_check_min_max_integer + || specific->check.f1m == gfc_check_min_max_real + || specific->check.f1m == gfc_check_min_max_double) + return (*specific->check.f1m) (*ap); + + if (sort_actual (specific->name, ap, specific->formal, + &expr->where) == FAILURE) + return FAILURE; + + if (specific->check.f3ml == gfc_check_minloc_maxloc) + /* This is special because we might have to reorder the argument list. */ + t = gfc_check_minloc_maxloc (*ap); + else if (specific->check.f3red == gfc_check_minval_maxval) + /* This is also special because we also might have to reorder the + argument list. */ + t = gfc_check_minval_maxval (*ap); + else if (specific->check.f3red == gfc_check_product_sum) + /* Same here. The difference to the previous case is that we allow a + general numeric type. */ + t = gfc_check_product_sum (*ap); + else + { + if (specific->check.f1 == NULL) + { + t = check_arglist (ap, specific, error_flag); + if (t == SUCCESS) + expr->ts = specific->ts; + } + else + t = do_check (specific, *ap); + } + + /* Check conformance of elemental intrinsics. */ + if (t == SUCCESS && specific->elemental) + { + int n = 0; + gfc_expr *first_expr; + arg = expr->value.function.actual; + + /* There is no elemental intrinsic without arguments. */ + gcc_assert(arg != NULL); + first_expr = arg->expr; + + for ( ; arg && arg->expr; arg = arg->next, n++) + { + char buffer[80]; + snprintf (buffer, 80, "arguments '%s' and '%s' for intrinsic '%s'", + gfc_current_intrinsic_arg[0], gfc_current_intrinsic_arg[n], + gfc_current_intrinsic); + if (gfc_check_conformance (buffer, first_expr, arg->expr) == FAILURE) + return FAILURE; + } + } + + if (t == FAILURE) + remove_nullargs (ap); + + return t; +} + + +/* Check whether an intrinsic belongs to whatever standard the user + has chosen, taking also into account -fall-intrinsics. Here, no + warning/error is emitted; but if symstd is not NULL, it is pointed to a + textual representation of the symbols standard status (like + "new in Fortran 2008", "a GNU extension" or "obsolescent in Fortran 95") that + can be used to construct a detailed warning/error message in case of + a FAILURE. */ + +gfc_try +gfc_check_intrinsic_standard (const gfc_intrinsic_sym* isym, + const char** symstd, bool silent, locus where) +{ + const char* symstd_msg; + + /* For -fall-intrinsics, just succeed. */ + if (gfc_option.flag_all_intrinsics) + return SUCCESS; + + /* Find the symbol's standard message for later usage. */ + switch (isym->standard) + { + case GFC_STD_F77: + symstd_msg = "available since Fortran 77"; + break; + + case GFC_STD_F95_OBS: + symstd_msg = "obsolescent in Fortran 95"; + break; + + case GFC_STD_F95_DEL: + symstd_msg = "deleted in Fortran 95"; + break; + + case GFC_STD_F95: + symstd_msg = "new in Fortran 95"; + break; + + case GFC_STD_F2003: + symstd_msg = "new in Fortran 2003"; + break; + + case GFC_STD_F2008: + symstd_msg = "new in Fortran 2008"; + break; + + case GFC_STD_GNU: + symstd_msg = "a GNU Fortran extension"; + break; + + case GFC_STD_LEGACY: + symstd_msg = "for backward compatibility"; + break; + + default: + gfc_internal_error ("Invalid standard code on intrinsic '%s' (%d)", + isym->name, isym->standard); + } + + /* If warning about the standard, warn and succeed. */ + if (gfc_option.warn_std & isym->standard) + { + /* Do only print a warning if not a GNU extension. */ + if (!silent && isym->standard != GFC_STD_GNU) + gfc_warning ("Intrinsic '%s' (is %s) is used at %L", + isym->name, _(symstd_msg), &where); + + return SUCCESS; + } + + /* If allowing the symbol's standard, succeed, too. */ + if (gfc_option.allow_std & isym->standard) + return SUCCESS; + + /* Otherwise, fail. */ + if (symstd) + *symstd = _(symstd_msg); + return FAILURE; +} + + +/* See if a function call corresponds to an intrinsic function call. + We return: + + MATCH_YES if the call corresponds to an intrinsic, simplification + is done if possible. + + MATCH_NO if the call does not correspond to an intrinsic + + MATCH_ERROR if the call corresponds to an intrinsic but there was an + error during the simplification process. + + The error_flag parameter enables an error reporting. */ + +match +gfc_intrinsic_func_interface (gfc_expr *expr, int error_flag) +{ + gfc_intrinsic_sym *isym, *specific; + gfc_actual_arglist *actual; + const char *name; + int flag; + + if (expr->value.function.isym != NULL) + return (do_simplify (expr->value.function.isym, expr) == FAILURE) + ? MATCH_ERROR : MATCH_YES; + + if (!error_flag) + gfc_push_suppress_errors (); + flag = 0; + + for (actual = expr->value.function.actual; actual; actual = actual->next) + if (actual->expr != NULL) + flag |= (actual->expr->ts.type != BT_INTEGER + && actual->expr->ts.type != BT_CHARACTER); + + name = expr->symtree->n.sym->name; + + isym = specific = gfc_find_function (name); + if (isym == NULL) + { + if (!error_flag) + gfc_pop_suppress_errors (); + return MATCH_NO; + } + + if ((isym->id == GFC_ISYM_REAL || isym->id == GFC_ISYM_DBLE + || isym->id == GFC_ISYM_CMPLX) + && gfc_init_expr + && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Function '%s' " + "as initialization expression at %L", name, + &expr->where) == FAILURE) + { + if (!error_flag) + gfc_pop_suppress_errors (); + return MATCH_ERROR; + } + + gfc_current_intrinsic_where = &expr->where; + + /* Bypass the generic list for min and max. */ + if (isym->check.f1m == gfc_check_min_max) + { + init_arglist (isym); + + if (gfc_check_min_max (expr->value.function.actual) == SUCCESS) + goto got_specific; + + if (!error_flag) + gfc_pop_suppress_errors (); + return MATCH_NO; + } + + /* If the function is generic, check all of its specific + incarnations. If the generic name is also a specific, we check + that name last, so that any error message will correspond to the + specific. */ + gfc_push_suppress_errors (); + + if (isym->generic) + { + for (specific = isym->specific_head; specific; + specific = specific->next) + { + if (specific == isym) + continue; + if (check_specific (specific, expr, 0) == SUCCESS) + { + gfc_pop_suppress_errors (); + goto got_specific; + } + } + } + + gfc_pop_suppress_errors (); + + if (check_specific (isym, expr, error_flag) == FAILURE) + { + if (!error_flag) + gfc_pop_suppress_errors (); + return MATCH_NO; + } + + specific = isym; + +got_specific: + expr->value.function.isym = specific; + gfc_intrinsic_symbol (expr->symtree->n.sym); + + if (!error_flag) + gfc_pop_suppress_errors (); + + if (do_simplify (specific, expr) == FAILURE) + return MATCH_ERROR; + + /* F95, 7.1.6.1, Initialization expressions + (4) An elemental intrinsic function reference of type integer or + character where each argument is an initialization expression + of type integer or character + + F2003, 7.1.7 Initialization expression + (4) A reference to an elemental standard intrinsic function, + where each argument is an initialization expression */ + + if (gfc_init_expr && isym->elemental && flag + && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Elemental function " + "as initialization expression with non-integer/non-" + "character arguments at %L", &expr->where) == FAILURE) + return MATCH_ERROR; + + return MATCH_YES; +} + + +/* See if a CALL statement corresponds to an intrinsic subroutine. + Returns MATCH_YES if the subroutine corresponds to an intrinsic, + MATCH_NO if not, and MATCH_ERROR if there was an error (but did + correspond). */ + +match +gfc_intrinsic_sub_interface (gfc_code *c, int error_flag) +{ + gfc_intrinsic_sym *isym; + const char *name; + + name = c->symtree->n.sym->name; + + isym = gfc_find_subroutine (name); + if (isym == NULL) + return MATCH_NO; + + if (!error_flag) + gfc_push_suppress_errors (); + + init_arglist (isym); + + if (sort_actual (name, &c->ext.actual, isym->formal, &c->loc) == FAILURE) + goto fail; + + if (isym->check.f1 != NULL) + { + if (do_check (isym, c->ext.actual) == FAILURE) + goto fail; + } + else + { + if (check_arglist (&c->ext.actual, isym, 1) == FAILURE) + goto fail; + } + + /* The subroutine corresponds to an intrinsic. Allow errors to be + seen at this point. */ + if (!error_flag) + gfc_pop_suppress_errors (); + + c->resolved_isym = isym; + if (isym->resolve.s1 != NULL) + isym->resolve.s1 (c); + else + { + c->resolved_sym = gfc_get_intrinsic_sub_symbol (isym->lib_name); + c->resolved_sym->attr.elemental = isym->elemental; + } + + if (gfc_pure (NULL) && !isym->elemental) + { + gfc_error ("Subroutine call to intrinsic '%s' at %L is not PURE", name, + &c->loc); + return MATCH_ERROR; + } + + c->resolved_sym->attr.noreturn = isym->noreturn; + + return MATCH_YES; + +fail: + if (!error_flag) + gfc_pop_suppress_errors (); + return MATCH_NO; +} + + +/* Call gfc_convert_type() with warning enabled. */ + +gfc_try +gfc_convert_type (gfc_expr *expr, gfc_typespec *ts, int eflag) +{ + return gfc_convert_type_warn (expr, ts, eflag, 1); +} + + +/* Try to convert an expression (in place) from one type to another. + 'eflag' controls the behavior on error. + + The possible values are: + + 1 Generate a gfc_error() + 2 Generate a gfc_internal_error(). + + 'wflag' controls the warning related to conversion. */ + +gfc_try +gfc_convert_type_warn (gfc_expr *expr, gfc_typespec *ts, int eflag, int wflag) +{ + gfc_intrinsic_sym *sym; + gfc_typespec from_ts; + locus old_where; + gfc_expr *new_expr; + int rank; + mpz_t *shape; + + from_ts = expr->ts; /* expr->ts gets clobbered */ + + if (ts->type == BT_UNKNOWN) + goto bad; + + /* NULL and zero size arrays get their type here. */ + if (expr->expr_type == EXPR_NULL + || (expr->expr_type == EXPR_ARRAY && expr->value.constructor == NULL)) + { + /* Sometimes the RHS acquire the type. */ + expr->ts = *ts; + return SUCCESS; + } + + if (expr->ts.type == BT_UNKNOWN) + goto bad; + + if (expr->ts.type == BT_DERIVED && ts->type == BT_DERIVED + && gfc_compare_types (&expr->ts, ts)) + return SUCCESS; + + sym = find_conv (&expr->ts, ts); + if (sym == NULL) + goto bad; + + /* At this point, a conversion is necessary. A warning may be needed. */ + if ((gfc_option.warn_std & sym->standard) != 0) + gfc_warning_now ("Extension: Conversion from %s to %s at %L", + gfc_typename (&from_ts), gfc_typename (ts), &expr->where); + else if (wflag && gfc_option.warn_conversion) + gfc_warning_now ("Conversion from %s to %s at %L", + gfc_typename (&from_ts), gfc_typename (ts), &expr->where); + + /* Insert a pre-resolved function call to the right function. */ + old_where = expr->where; + rank = expr->rank; + shape = expr->shape; + + new_expr = gfc_get_expr (); + *new_expr = *expr; + + new_expr = gfc_build_conversion (new_expr); + new_expr->value.function.name = sym->lib_name; + new_expr->value.function.isym = sym; + new_expr->where = old_where; + new_expr->rank = rank; + new_expr->shape = gfc_copy_shape (shape, rank); + + gfc_get_ha_sym_tree (sym->name, &new_expr->symtree); + new_expr->symtree->n.sym->ts = *ts; + new_expr->symtree->n.sym->attr.flavor = FL_PROCEDURE; + new_expr->symtree->n.sym->attr.function = 1; + new_expr->symtree->n.sym->attr.elemental = 1; + new_expr->symtree->n.sym->attr.pure = 1; + new_expr->symtree->n.sym->attr.referenced = 1; + gfc_intrinsic_symbol(new_expr->symtree->n.sym); + gfc_commit_symbol (new_expr->symtree->n.sym); + + *expr = *new_expr; + + gfc_free (new_expr); + expr->ts = *ts; + + if (gfc_is_constant_expr (expr->value.function.actual->expr) + && do_simplify (sym, expr) == FAILURE) + { + + if (eflag == 2) + goto bad; + return FAILURE; /* Error already generated in do_simplify() */ + } + + return SUCCESS; + +bad: + if (eflag == 1) + { + gfc_error ("Can't convert %s to %s at %L", + gfc_typename (&from_ts), gfc_typename (ts), &expr->where); + return FAILURE; + } + + gfc_internal_error ("Can't convert %s to %s at %L", + gfc_typename (&from_ts), gfc_typename (ts), + &expr->where); + /* Not reached */ +} + + +gfc_try +gfc_convert_chartype (gfc_expr *expr, gfc_typespec *ts) +{ + gfc_intrinsic_sym *sym; + gfc_typespec from_ts; + locus old_where; + gfc_expr *new_expr; + int rank; + mpz_t *shape; + + gcc_assert (expr->ts.type == BT_CHARACTER && ts->type == BT_CHARACTER); + from_ts = expr->ts; /* expr->ts gets clobbered */ + + sym = find_char_conv (&expr->ts, ts); + gcc_assert (sym); + + /* Insert a pre-resolved function call to the right function. */ + old_where = expr->where; + rank = expr->rank; + shape = expr->shape; + + new_expr = gfc_get_expr (); + *new_expr = *expr; + + new_expr = gfc_build_conversion (new_expr); + new_expr->value.function.name = sym->lib_name; + new_expr->value.function.isym = sym; + new_expr->where = old_where; + new_expr->rank = rank; + new_expr->shape = gfc_copy_shape (shape, rank); + + gfc_get_ha_sym_tree (sym->name, &new_expr->symtree); + new_expr->symtree->n.sym->ts = *ts; + new_expr->symtree->n.sym->attr.flavor = FL_PROCEDURE; + new_expr->symtree->n.sym->attr.function = 1; + new_expr->symtree->n.sym->attr.elemental = 1; + new_expr->symtree->n.sym->attr.referenced = 1; + gfc_intrinsic_symbol(new_expr->symtree->n.sym); + gfc_commit_symbol (new_expr->symtree->n.sym); + + *expr = *new_expr; + + gfc_free (new_expr); + expr->ts = *ts; + + if (gfc_is_constant_expr (expr->value.function.actual->expr) + && do_simplify (sym, expr) == FAILURE) + { + /* Error already generated in do_simplify() */ + return FAILURE; + } + + return SUCCESS; +} + + +/* Check if the passed name is name of an intrinsic (taking into account the + current -std=* and -fall-intrinsic settings). If it is, see if we should + warn about this as a user-procedure having the same name as an intrinsic + (-Wintrinsic-shadow enabled) and do so if we should. */ + +void +gfc_warn_intrinsic_shadow (const gfc_symbol* sym, bool in_module, bool func) +{ + gfc_intrinsic_sym* isym; + + /* If the warning is disabled, do nothing at all. */ + if (!gfc_option.warn_intrinsic_shadow) + return; + + /* Try to find an intrinsic of the same name. */ + if (func) + isym = gfc_find_function (sym->name); + else + isym = gfc_find_subroutine (sym->name); + + /* If no intrinsic was found with this name or it's not included in the + selected standard, everything's fine. */ + if (!isym || gfc_check_intrinsic_standard (isym, NULL, true, + sym->declared_at) == FAILURE) + return; + + /* Emit the warning. */ + if (in_module) + gfc_warning ("'%s' declared at %L may shadow the intrinsic of the same" + " name. In order to call the intrinsic, explicit INTRINSIC" + " declarations may be required.", + sym->name, &sym->declared_at); + else + gfc_warning ("'%s' declared at %L is also the name of an intrinsic. It can" + " only be called via an explicit interface or if declared" + " EXTERNAL.", sym->name, &sym->declared_at); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/intrinsic.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/intrinsic.h new file mode 100644 index 0000000000..83c5207785 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/intrinsic.h @@ -0,0 +1,542 @@ +/* Header file for intrinsics check, resolve and simplify function + prototypes. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught & Katherine Holcomb + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* Expression returned when simplification fails. */ + +extern gfc_expr gfc_bad_expr; + + +/* Check functions. */ +gfc_try gfc_check_a_ikind (gfc_expr *, gfc_expr *); +gfc_try gfc_check_a_xkind (gfc_expr *, gfc_expr *); +gfc_try gfc_check_a_p (gfc_expr *, gfc_expr *); +gfc_try gfc_check_x_yd (gfc_expr *, gfc_expr *); + +gfc_try gfc_check_abs (gfc_expr *); +gfc_try gfc_check_access_func (gfc_expr *, gfc_expr *); +gfc_try gfc_check_achar (gfc_expr *, gfc_expr *); +gfc_try gfc_check_all_any (gfc_expr *, gfc_expr *); +gfc_try gfc_check_allocated (gfc_expr *); +gfc_try gfc_check_associated (gfc_expr *, gfc_expr *); +gfc_try gfc_check_atan2 (gfc_expr *, gfc_expr *); +gfc_try gfc_check_besn (gfc_expr *, gfc_expr *); +gfc_try gfc_check_btest (gfc_expr *, gfc_expr *); +gfc_try gfc_check_char (gfc_expr *, gfc_expr *); +gfc_try gfc_check_chdir (gfc_expr *); +gfc_try gfc_check_chmod (gfc_expr *, gfc_expr *); +gfc_try gfc_check_cmplx (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_complex (gfc_expr *, gfc_expr *); +gfc_try gfc_check_count (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_cshift (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_ctime (gfc_expr *); +gfc_try gfc_check_datan2 (gfc_expr *, gfc_expr *); +gfc_try gfc_check_dcmplx (gfc_expr *, gfc_expr *); +gfc_try gfc_check_dble (gfc_expr *); +gfc_try gfc_check_digits (gfc_expr *); +gfc_try gfc_check_dot_product (gfc_expr *, gfc_expr *); +gfc_try gfc_check_dprod (gfc_expr *, gfc_expr *); +gfc_try gfc_check_eoshift (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_dtime_etime (gfc_expr *); +gfc_try gfc_check_fgetputc (gfc_expr *, gfc_expr *); +gfc_try gfc_check_fgetput (gfc_expr *); +gfc_try gfc_check_fstat (gfc_expr *, gfc_expr *); +gfc_try gfc_check_ftell (gfc_expr *); +gfc_try gfc_check_fn_c (gfc_expr *); +gfc_try gfc_check_fn_d (gfc_expr *); +gfc_try gfc_check_fn_r (gfc_expr *); +gfc_try gfc_check_fn_rc (gfc_expr *); +gfc_try gfc_check_fnum (gfc_expr *); +gfc_try gfc_check_hostnm (gfc_expr *); +gfc_try gfc_check_huge (gfc_expr *); +gfc_try gfc_check_hypot (gfc_expr *, gfc_expr *); +gfc_try gfc_check_i (gfc_expr *); +gfc_try gfc_check_iand (gfc_expr *, gfc_expr *); +gfc_try gfc_check_and (gfc_expr *, gfc_expr *); +gfc_try gfc_check_ibclr (gfc_expr *, gfc_expr *); +gfc_try gfc_check_ibits (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_ibset (gfc_expr *, gfc_expr *); +gfc_try gfc_check_ichar_iachar (gfc_expr *, gfc_expr *); +gfc_try gfc_check_idnint (gfc_expr *); +gfc_try gfc_check_ieor (gfc_expr *, gfc_expr *); +gfc_try gfc_check_index (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_int (gfc_expr *, gfc_expr *); +gfc_try gfc_check_intconv (gfc_expr *); +gfc_try gfc_check_ior (gfc_expr *, gfc_expr *); +gfc_try gfc_check_irand (gfc_expr *); +gfc_try gfc_check_isatty (gfc_expr *); +gfc_try gfc_check_isnan (gfc_expr *); +gfc_try gfc_check_ishft (gfc_expr *, gfc_expr *); +gfc_try gfc_check_ishftc (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_kill (gfc_expr *, gfc_expr *); +gfc_try gfc_check_kind (gfc_expr *); +gfc_try gfc_check_lbound (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_len_lentrim (gfc_expr *, gfc_expr *); +gfc_try gfc_check_link (gfc_expr *, gfc_expr *); +gfc_try gfc_check_lge_lgt_lle_llt (gfc_expr *, gfc_expr *); +gfc_try gfc_check_loc (gfc_expr *); +gfc_try gfc_check_logical (gfc_expr *, gfc_expr *); +gfc_try gfc_check_min_max (gfc_actual_arglist *); +gfc_try gfc_check_min_max_integer (gfc_actual_arglist *); +gfc_try gfc_check_min_max_real (gfc_actual_arglist *); +gfc_try gfc_check_min_max_double (gfc_actual_arglist *); +gfc_try gfc_check_malloc (gfc_expr *); +gfc_try gfc_check_matmul (gfc_expr *, gfc_expr *); +gfc_try gfc_check_merge (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_minloc_maxloc (gfc_actual_arglist *); +gfc_try gfc_check_minval_maxval (gfc_actual_arglist *); +gfc_try gfc_check_nearest (gfc_expr *, gfc_expr *); +gfc_try gfc_check_new_line (gfc_expr *); +gfc_try gfc_check_null (gfc_expr *); +gfc_try gfc_check_pack (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_precision (gfc_expr *); +gfc_try gfc_check_present (gfc_expr *); +gfc_try gfc_check_product_sum (gfc_actual_arglist *); +gfc_try gfc_check_radix (gfc_expr *); +gfc_try gfc_check_rand (gfc_expr *); +gfc_try gfc_check_range (gfc_expr *); +gfc_try gfc_check_real (gfc_expr *, gfc_expr *); +gfc_try gfc_check_rename (gfc_expr *, gfc_expr *); +gfc_try gfc_check_repeat (gfc_expr *, gfc_expr *); +gfc_try gfc_check_reshape (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_scale (gfc_expr *, gfc_expr *); +gfc_try gfc_check_scan (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_second_sub (gfc_expr *); +gfc_try gfc_check_secnds (gfc_expr *); +gfc_try gfc_check_selected_char_kind (gfc_expr *); +gfc_try gfc_check_selected_int_kind (gfc_expr *); +gfc_try gfc_check_selected_real_kind (gfc_expr *, gfc_expr *); +gfc_try gfc_check_set_exponent (gfc_expr *, gfc_expr *); +gfc_try gfc_check_shape (gfc_expr *); +gfc_try gfc_check_size (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_sign (gfc_expr *, gfc_expr *); +gfc_try gfc_check_signal (gfc_expr *, gfc_expr *); +gfc_try gfc_check_sizeof (gfc_expr *); +gfc_try gfc_check_spread (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_srand (gfc_expr *); +gfc_try gfc_check_stat (gfc_expr *, gfc_expr *); +gfc_try gfc_check_sum (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_symlnk (gfc_expr *, gfc_expr *); +gfc_try gfc_check_transfer (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_transpose (gfc_expr *); +gfc_try gfc_check_trim (gfc_expr *); +gfc_try gfc_check_ttynam (gfc_expr *); +gfc_try gfc_check_ubound (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_umask (gfc_expr *); +gfc_try gfc_check_unlink (gfc_expr *); +gfc_try gfc_check_unpack (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_verify (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_x (gfc_expr *); + + +/* Intrinsic subroutines. */ +gfc_try gfc_check_alarm_sub (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_chdir_sub (gfc_expr *, gfc_expr *); +gfc_try gfc_check_chmod_sub (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_cpu_time (gfc_expr *); +gfc_try gfc_check_ctime_sub (gfc_expr *, gfc_expr *); +gfc_try gfc_check_system_clock (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_date_and_time (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_exit (gfc_expr *); +gfc_try gfc_check_fdate_sub (gfc_expr *); +gfc_try gfc_check_flush (gfc_expr *); +gfc_try gfc_check_free (gfc_expr *); +gfc_try gfc_check_fstat_sub (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_gerror (gfc_expr *); +gfc_try gfc_check_getarg (gfc_expr *, gfc_expr *); +gfc_try gfc_check_getlog (gfc_expr *); +gfc_try gfc_check_move_alloc (gfc_expr *, gfc_expr *); +gfc_try gfc_check_mvbits (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, + gfc_expr *); +gfc_try gfc_check_random_number (gfc_expr *); +gfc_try gfc_check_random_seed (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_dtime_etime_sub (gfc_expr *, gfc_expr *); +gfc_try gfc_check_fgetputc_sub (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_fgetput_sub (gfc_expr *, gfc_expr *); +gfc_try gfc_check_fseek_sub (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_ftell_sub (gfc_expr *, gfc_expr *); +gfc_try gfc_check_getcwd_sub (gfc_expr *, gfc_expr *); +gfc_try gfc_check_hostnm_sub (gfc_expr *, gfc_expr *); +gfc_try gfc_check_itime_idate (gfc_expr *); +gfc_try gfc_check_kill_sub (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_ltime_gmtime (gfc_expr *, gfc_expr *); +gfc_try gfc_check_perror (gfc_expr *); +gfc_try gfc_check_rename_sub (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_link_sub (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_symlnk_sub (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_signal_sub (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_sleep_sub (gfc_expr *); +gfc_try gfc_check_stat_sub (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_try gfc_check_system_sub (gfc_expr *, gfc_expr *); +gfc_try gfc_check_ttynam_sub (gfc_expr *, gfc_expr *); +gfc_try gfc_check_umask_sub (gfc_expr *, gfc_expr *); +gfc_try gfc_check_unlink_sub (gfc_expr *, gfc_expr *); + + +/* Simplification functions. */ +gfc_expr *gfc_simplify_abs (gfc_expr *); +gfc_expr *gfc_simplify_achar (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_acos (gfc_expr *); +gfc_expr *gfc_simplify_acosh (gfc_expr *); +gfc_expr *gfc_simplify_adjustl (gfc_expr *); +gfc_expr *gfc_simplify_adjustr (gfc_expr *); +gfc_expr *gfc_simplify_aimag (gfc_expr *); +gfc_expr *gfc_simplify_aint (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_dint (gfc_expr *); +gfc_expr *gfc_simplify_anint (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_dnint (gfc_expr *); +gfc_expr *gfc_simplify_and (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_asin (gfc_expr *); +gfc_expr *gfc_simplify_asinh (gfc_expr *); +gfc_expr *gfc_simplify_atan (gfc_expr *); +gfc_expr *gfc_simplify_atanh (gfc_expr *); +gfc_expr *gfc_simplify_atan2 (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_bessel_j0 (gfc_expr *); +gfc_expr *gfc_simplify_bessel_j1 (gfc_expr *); +gfc_expr *gfc_simplify_bessel_jn (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_bessel_y0 (gfc_expr *); +gfc_expr *gfc_simplify_bessel_y1 (gfc_expr *); +gfc_expr *gfc_simplify_bessel_yn (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_bit_size (gfc_expr *); +gfc_expr *gfc_simplify_btest (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_ceiling (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_char (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_cmplx (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_complex (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_conjg (gfc_expr *); +gfc_expr *gfc_simplify_cos (gfc_expr *); +gfc_expr *gfc_simplify_cosh (gfc_expr *); +gfc_expr *gfc_simplify_dcmplx (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_dble (gfc_expr *); +gfc_expr *gfc_simplify_digits (gfc_expr *); +gfc_expr *gfc_simplify_dim (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_dprod (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_epsilon (gfc_expr *); +gfc_expr *gfc_simplify_erf (gfc_expr *); +gfc_expr *gfc_simplify_erfc (gfc_expr *); +gfc_expr *gfc_simplify_exp (gfc_expr *); +gfc_expr *gfc_simplify_exponent (gfc_expr *); +gfc_expr *gfc_simplify_float (gfc_expr *); +gfc_expr *gfc_simplify_floor (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_fraction (gfc_expr *); +gfc_expr *gfc_simplify_gamma (gfc_expr *); +gfc_expr *gfc_simplify_huge (gfc_expr *); +gfc_expr *gfc_simplify_hypot (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_iachar (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_iand (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_ibclr (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_ibits (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_ibset (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_ichar (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_ieor (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_index (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_int (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_int2 (gfc_expr *); +gfc_expr *gfc_simplify_int8 (gfc_expr *); +gfc_expr *gfc_simplify_long (gfc_expr *); +gfc_expr *gfc_simplify_ifix (gfc_expr *); +gfc_expr *gfc_simplify_idint (gfc_expr *); +gfc_expr *gfc_simplify_ior (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_ishft (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_ishftc (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_kind (gfc_expr *); +gfc_expr *gfc_simplify_lbound (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_leadz (gfc_expr *); +gfc_expr *gfc_simplify_len (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_len_trim (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_lgamma (gfc_expr *); +gfc_expr *gfc_simplify_lge (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_lgt (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_lle (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_llt (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_log (gfc_expr *); +gfc_expr *gfc_simplify_log10 (gfc_expr *); +gfc_expr *gfc_simplify_logical (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_merge (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_min (gfc_expr *); +gfc_expr *gfc_simplify_minval (gfc_expr *, gfc_expr*, gfc_expr*); +gfc_expr *gfc_simplify_max (gfc_expr *); +gfc_expr *gfc_simplify_maxval (gfc_expr *, gfc_expr*, gfc_expr*); +gfc_expr *gfc_simplify_maxexponent (gfc_expr *); +gfc_expr *gfc_simplify_minexponent (gfc_expr *); +gfc_expr *gfc_simplify_mod (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_modulo (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_mvbits (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, + gfc_expr *); +gfc_expr *gfc_simplify_nearest (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_new_line (gfc_expr *); +gfc_expr *gfc_simplify_nint (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_null (gfc_expr *); +gfc_expr *gfc_simplify_idnint (gfc_expr *); +gfc_expr *gfc_simplify_not (gfc_expr *); +gfc_expr *gfc_simplify_or (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_precision (gfc_expr *); +gfc_expr *gfc_simplify_radix (gfc_expr *); +gfc_expr *gfc_simplify_range (gfc_expr *); +gfc_expr *gfc_simplify_real (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_realpart (gfc_expr *); +gfc_expr *gfc_simplify_repeat (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_reshape (gfc_expr *, gfc_expr *, gfc_expr *, + gfc_expr *); +gfc_expr *gfc_simplify_rrspacing (gfc_expr *); +gfc_expr *gfc_simplify_scale (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_scan (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_selected_char_kind (gfc_expr *); +gfc_expr *gfc_simplify_selected_int_kind (gfc_expr *); +gfc_expr *gfc_simplify_selected_real_kind (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_set_exponent (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_sign (gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_shape (gfc_expr *); +gfc_expr *gfc_simplify_sin (gfc_expr *); +gfc_expr *gfc_simplify_sinh (gfc_expr *); +gfc_expr *gfc_simplify_size (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_sngl (gfc_expr *); +gfc_expr *gfc_simplify_spacing (gfc_expr *); +gfc_expr *gfc_simplify_sqrt (gfc_expr *); +gfc_expr *gfc_simplify_tan (gfc_expr *); +gfc_expr *gfc_simplify_tanh (gfc_expr *); +gfc_expr *gfc_simplify_tiny (gfc_expr *); +gfc_expr *gfc_simplify_trailz (gfc_expr *); +gfc_expr *gfc_simplify_transfer (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_trim (gfc_expr *); +gfc_expr *gfc_simplify_ubound (gfc_expr *, gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_verify (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +gfc_expr *gfc_simplify_xor (gfc_expr *, gfc_expr *); + +/* Constant conversion simplification. */ +gfc_expr *gfc_convert_constant (gfc_expr *, bt, int); +gfc_expr *gfc_convert_char_constant (gfc_expr *, bt, int); + + +/* Resolution functions. */ +void gfc_resolve_abs (gfc_expr *, gfc_expr *); +void gfc_resolve_access (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_adjustl (gfc_expr *, gfc_expr *); +void gfc_resolve_adjustr (gfc_expr *, gfc_expr *); +void gfc_resolve_achar (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_acos (gfc_expr *, gfc_expr *); +void gfc_resolve_acosh (gfc_expr *, gfc_expr *); +void gfc_resolve_aimag (gfc_expr *, gfc_expr *); +void gfc_resolve_aint (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_dint (gfc_expr *, gfc_expr *); +void gfc_resolve_all (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_anint (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_dnint (gfc_expr *, gfc_expr *); +void gfc_resolve_and (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_any (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_asin (gfc_expr *, gfc_expr *); +void gfc_resolve_asinh (gfc_expr *, gfc_expr *); +void gfc_resolve_atan (gfc_expr *, gfc_expr *); +void gfc_resolve_atanh (gfc_expr *, gfc_expr *); +void gfc_resolve_atan2 (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_besn (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_btest (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_ceiling (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_char (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_chdir (gfc_expr *, gfc_expr *); +void gfc_resolve_chmod (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_cmplx (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_dcmplx (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_complex (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_conjg (gfc_expr *, gfc_expr *); +void gfc_resolve_cos (gfc_expr *, gfc_expr *); +void gfc_resolve_cosh (gfc_expr *, gfc_expr *); +void gfc_resolve_count (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_cshift (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_ctime (gfc_expr *, gfc_expr *); +void gfc_resolve_dble (gfc_expr *, gfc_expr *); +void gfc_resolve_dim (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_dot_product (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_dprod (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_dtime_sub (gfc_code *); +void gfc_resolve_eoshift (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, + gfc_expr *); +void gfc_resolve_etime_sub (gfc_code *); +void gfc_resolve_exp (gfc_expr *, gfc_expr *); +void gfc_resolve_exponent (gfc_expr *, gfc_expr *); +void gfc_resolve_fdate (gfc_expr *); +void gfc_resolve_floor (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_fnum (gfc_expr *, gfc_expr *); +void gfc_resolve_fraction (gfc_expr *, gfc_expr *); +void gfc_resolve_fstat (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_ftell (gfc_expr *, gfc_expr *); +void gfc_resolve_fgetc (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_fget (gfc_expr *, gfc_expr *); +void gfc_resolve_fputc (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_fput (gfc_expr *, gfc_expr *); +void gfc_resolve_g77_math1 (gfc_expr *, gfc_expr *); +void gfc_resolve_gamma (gfc_expr *, gfc_expr *); +void gfc_resolve_getcwd (gfc_expr *, gfc_expr *); +void gfc_resolve_getgid (gfc_expr *); +void gfc_resolve_getpid (gfc_expr *); +void gfc_resolve_getuid (gfc_expr *); +void gfc_resolve_hostnm (gfc_expr *, gfc_expr *); +void gfc_resolve_hypot (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_iand (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_ibclr (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_ibits (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_ibset (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_index_func (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, + gfc_expr *); +void gfc_resolve_ierrno (gfc_expr *); +void gfc_resolve_ieor (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_ichar (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_iachar (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_idnint (gfc_expr *, gfc_expr *); +void gfc_resolve_int (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_int2 (gfc_expr *, gfc_expr *); +void gfc_resolve_int8 (gfc_expr *, gfc_expr *); +void gfc_resolve_long (gfc_expr *, gfc_expr *); +void gfc_resolve_ior (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_isatty (gfc_expr *, gfc_expr *); +void gfc_resolve_rshift (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_lshift (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_ishft (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_ishftc (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_kill (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_lbound (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_len (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_len_trim (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_lgamma (gfc_expr *, gfc_expr *); +void gfc_resolve_link (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_loc (gfc_expr *, gfc_expr *); +void gfc_resolve_log (gfc_expr *, gfc_expr *); +void gfc_resolve_log10 (gfc_expr *, gfc_expr *); +void gfc_resolve_logical (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_lstat (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_malloc (gfc_expr *, gfc_expr *); +void gfc_resolve_matmul (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_max (gfc_expr *, gfc_actual_arglist *); +void gfc_resolve_maxloc (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_maxval (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_mclock (gfc_expr *); +void gfc_resolve_mclock8 (gfc_expr *); +void gfc_resolve_merge (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_min (gfc_expr *, gfc_actual_arglist *); +void gfc_resolve_minloc (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_minval (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_mod (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_modulo (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_nearest (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_nint (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_not (gfc_expr *, gfc_expr *); +void gfc_resolve_or (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_pack (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_product (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_real (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_realpart (gfc_expr *, gfc_expr *); +void gfc_resolve_rename (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_repeat (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_reshape (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, + gfc_expr *); +void gfc_resolve_rrspacing (gfc_expr *, gfc_expr *); +void gfc_resolve_scale (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_scan (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, + gfc_expr *); +void gfc_resolve_second_sub (gfc_code *); +void gfc_resolve_secnds (gfc_expr *, gfc_expr *); +void gfc_resolve_set_exponent (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_shape (gfc_expr *, gfc_expr *); +void gfc_resolve_sign (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_signal (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_sin (gfc_expr *, gfc_expr *); +void gfc_resolve_sinh (gfc_expr *, gfc_expr *); +void gfc_resolve_size (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_spacing (gfc_expr *, gfc_expr *); +void gfc_resolve_spread (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_sqrt (gfc_expr *, gfc_expr *); +void gfc_resolve_stat (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_srand (gfc_code *); +void gfc_resolve_sum (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_symlnk (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_system (gfc_expr *, gfc_expr *); +void gfc_resolve_tan (gfc_expr *, gfc_expr *); +void gfc_resolve_tanh (gfc_expr *, gfc_expr *); +void gfc_resolve_time (gfc_expr *); +void gfc_resolve_time8 (gfc_expr *); +void gfc_resolve_transfer (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_transpose (gfc_expr *, gfc_expr *); +void gfc_resolve_trim (gfc_expr *, gfc_expr *); +void gfc_resolve_ttynam (gfc_expr *, gfc_expr *); +void gfc_resolve_ubound (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_umask (gfc_expr *, gfc_expr *); +void gfc_resolve_unlink (gfc_expr *, gfc_expr *); +void gfc_resolve_unpack (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_verify (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, + gfc_expr *); +void gfc_resolve_xor (gfc_expr *, gfc_expr *, gfc_expr *); + + +/* Intrinsic subroutine resolution. */ +void gfc_resolve_alarm_sub (gfc_code *); +void gfc_resolve_chdir_sub (gfc_code *); +void gfc_resolve_chmod_sub (gfc_code *); +void gfc_resolve_cpu_time (gfc_code *); +void gfc_resolve_ctime_sub (gfc_code *); +void gfc_resolve_exit (gfc_code *); +void gfc_resolve_fdate_sub (gfc_code *); +void gfc_resolve_flush (gfc_code *); +void gfc_resolve_free (gfc_code *); +void gfc_resolve_fseek_sub (gfc_code *); +void gfc_resolve_fstat_sub (gfc_code *); +void gfc_resolve_ftell_sub (gfc_code *); +void gfc_resolve_fgetc_sub (gfc_code *); +void gfc_resolve_fget_sub (gfc_code *); +void gfc_resolve_fputc_sub (gfc_code *); +void gfc_resolve_fput_sub (gfc_code *); +void gfc_resolve_gerror (gfc_code *); +void gfc_resolve_getarg (gfc_code *); +void gfc_resolve_getcwd_sub (gfc_code *); +void gfc_resolve_getlog (gfc_code *); +void gfc_resolve_get_command (gfc_code *); +void gfc_resolve_get_command_argument (gfc_code *); +void gfc_resolve_get_environment_variable (gfc_code *); +void gfc_resolve_gmtime (gfc_code *); +void gfc_resolve_hostnm_sub (gfc_code *); +void gfc_resolve_idate (gfc_code *); +void gfc_resolve_itime (gfc_code *); +void gfc_resolve_kill_sub (gfc_code *); +void gfc_resolve_lstat_sub (gfc_code *); +void gfc_resolve_ltime (gfc_code *); +void gfc_resolve_mvbits (gfc_code *); +void gfc_resolve_perror (gfc_code *); +void gfc_resolve_random_number (gfc_code *); +void gfc_resolve_random_seed (gfc_code *); +void gfc_resolve_rename_sub (gfc_code *); +void gfc_resolve_link_sub (gfc_code *); +void gfc_resolve_symlnk_sub (gfc_code *); +void gfc_resolve_signal_sub (gfc_code *); +void gfc_resolve_sleep_sub (gfc_code *); +void gfc_resolve_stat_sub (gfc_code *); +void gfc_resolve_system_clock (gfc_code *); +void gfc_resolve_system_sub (gfc_code *); +void gfc_resolve_ttynam_sub (gfc_code *); +void gfc_resolve_umask_sub (gfc_code *); +void gfc_resolve_unlink_sub (gfc_code *); + + +/* The mvbits() subroutine requires the most arguments: five. */ + +#define MAX_INTRINSIC_ARGS 5 + +extern const char *gfc_current_intrinsic; +extern const char *gfc_current_intrinsic_arg[MAX_INTRINSIC_ARGS]; +extern locus *gfc_current_intrinsic_where; diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/intrinsic.texi b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/intrinsic.texi new file mode 100644 index 0000000000..06cdff0c82 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/intrinsic.texi @@ -0,0 +1,11346 @@ +@ignore +Copyright (C) 2005, 2006, 2007, 2008, 2009 +Free Software Foundation, Inc. +This is part of the GNU Fortran manual. +For copying conditions, see the file gfortran.texi. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with the +Invariant Sections being ``Funding Free Software'', the Front-Cover +Texts being (a) (see below), and with the Back-Cover Texts being (b) +(see below). A copy of the license is included in the gfdl(7) man page. + + +Some basic guidelines for editing this document: + + (1) The intrinsic procedures are to be listed in alphabetical order. + (2) The generic name is to be used. + (3) The specific names are included in the function index and in a + table at the end of the node (See ABS entry). + (4) Try to maintain the same style for each entry. + + +@end ignore + +@tex +\gdef\acos{\mathop{\rm acos}\nolimits} +\gdef\asin{\mathop{\rm asin}\nolimits} +\gdef\atan{\mathop{\rm atan}\nolimits} +\gdef\acosh{\mathop{\rm acosh}\nolimits} +\gdef\asinh{\mathop{\rm asinh}\nolimits} +\gdef\atanh{\mathop{\rm atanh}\nolimits} +@end tex + + +@node Intrinsic Procedures +@chapter Intrinsic Procedures +@cindex intrinsic procedures + +@menu +* Introduction: Introduction to Intrinsics +* @code{ABORT}: ABORT, Abort the program +* @code{ABS}: ABS, Absolute value +* @code{ACCESS}: ACCESS, Checks file access modes +* @code{ACHAR}: ACHAR, Character in @acronym{ASCII} collating sequence +* @code{ACOS}: ACOS, Arccosine function +* @code{ACOSH}: ACOSH, Hyperbolic arccosine function +* @code{ADJUSTL}: ADJUSTL, Left adjust a string +* @code{ADJUSTR}: ADJUSTR, Right adjust a string +* @code{AIMAG}: AIMAG, Imaginary part of complex number +* @code{AINT}: AINT, Truncate to a whole number +* @code{ALARM}: ALARM, Set an alarm clock +* @code{ALL}: ALL, Determine if all values are true +* @code{ALLOCATED}: ALLOCATED, Status of allocatable entity +* @code{AND}: AND, Bitwise logical AND +* @code{ANINT}: ANINT, Nearest whole number +* @code{ANY}: ANY, Determine if any values are true +* @code{ASIN}: ASIN, Arcsine function +* @code{ASINH}: ASINH, Hyperbolic arcsine function +* @code{ASSOCIATED}: ASSOCIATED, Status of a pointer or pointer/target pair +* @code{ATAN}: ATAN, Arctangent function +* @code{ATAN2}: ATAN2, Arctangent function +* @code{ATANH}: ATANH, Hyperbolic arctangent function +* @code{BESSEL_J0}: BESSEL_J0, Bessel function of the first kind of order 0 +* @code{BESSEL_J1}: BESSEL_J1, Bessel function of the first kind of order 1 +* @code{BESSEL_JN}: BESSEL_JN, Bessel function of the first kind +* @code{BESSEL_Y0}: BESSEL_Y0, Bessel function of the second kind of order 0 +* @code{BESSEL_Y1}: BESSEL_Y1, Bessel function of the second kind of order 1 +* @code{BESSEL_YN}: BESSEL_YN, Bessel function of the second kind +* @code{BIT_SIZE}: BIT_SIZE, Bit size inquiry function +* @code{BTEST}: BTEST, Bit test function +* @code{C_ASSOCIATED}: C_ASSOCIATED, Status of a C pointer +* @code{C_F_POINTER}: C_F_POINTER, Convert C into Fortran pointer +* @code{C_F_PROCPOINTER}: C_F_PROCPOINTER, Convert C into Fortran procedure pointer +* @code{C_FUNLOC}: C_FUNLOC, Obtain the C address of a procedure +* @code{C_LOC}: C_LOC, Obtain the C address of an object +* @code{C_SIZEOF}: C_SIZEOF, Size in bytes of an expression +* @code{CEILING}: CEILING, Integer ceiling function +* @code{CHAR}: CHAR, Integer-to-character conversion function +* @code{CHDIR}: CHDIR, Change working directory +* @code{CHMOD}: CHMOD, Change access permissions of files +* @code{CMPLX}: CMPLX, Complex conversion function +* @code{COMMAND_ARGUMENT_COUNT}: COMMAND_ARGUMENT_COUNT, Get number of command line arguments +* @code{COMPLEX}: COMPLEX, Complex conversion function +* @code{CONJG}: CONJG, Complex conjugate function +* @code{COS}: COS, Cosine function +* @code{COSH}: COSH, Hyperbolic cosine function +* @code{COUNT}: COUNT, Count occurrences of TRUE in an array +* @code{CPU_TIME}: CPU_TIME, CPU time subroutine +* @code{CSHIFT}: CSHIFT, Circular shift elements of an array +* @code{CTIME}: CTIME, Subroutine (or function) to convert a time into a string +* @code{DATE_AND_TIME}: DATE_AND_TIME, Date and time subroutine +* @code{DBLE}: DBLE, Double precision conversion function +* @code{DCMPLX}: DCMPLX, Double complex conversion function +* @code{DFLOAT}: DFLOAT, Double precision conversion function +* @code{DIGITS}: DIGITS, Significant digits function +* @code{DIM}: DIM, Positive difference +* @code{DOT_PRODUCT}: DOT_PRODUCT, Dot product function +* @code{DPROD}: DPROD, Double product function +* @code{DREAL}: DREAL, Double real part function +* @code{DTIME}: DTIME, Execution time subroutine (or function) +* @code{EOSHIFT}: EOSHIFT, End-off shift elements of an array +* @code{EPSILON}: EPSILON, Epsilon function +* @code{ERF}: ERF, Error function +* @code{ERFC}: ERFC, Complementary error function +* @code{ERFC_SCALED}: ERFC_SCALED, Exponentially-scaled complementary error function +* @code{ETIME}: ETIME, Execution time subroutine (or function) +* @code{EXIT}: EXIT, Exit the program with status. +* @code{EXP}: EXP, Exponential function +* @code{EXPONENT}: EXPONENT, Exponent function +* @code{FDATE}: FDATE, Subroutine (or function) to get the current time as a string +* @code{FGET}: FGET, Read a single character in stream mode from stdin +* @code{FGETC}: FGETC, Read a single character in stream mode +* @code{FLOAT}: FLOAT, Convert integer to default real +* @code{FLOOR}: FLOOR, Integer floor function +* @code{FLUSH}: FLUSH, Flush I/O unit(s) +* @code{FNUM}: FNUM, File number function +* @code{FPUT}: FPUT, Write a single character in stream mode to stdout +* @code{FPUTC}: FPUTC, Write a single character in stream mode +* @code{FRACTION}: FRACTION, Fractional part of the model representation +* @code{FREE}: FREE, Memory de-allocation subroutine +* @code{FSEEK}: FSEEK, Low level file positioning subroutine +* @code{FSTAT}: FSTAT, Get file status +* @code{FTELL}: FTELL, Current stream position +* @code{GAMMA}: GAMMA, Gamma function +* @code{GERROR}: GERROR, Get last system error message +* @code{GETARG}: GETARG, Get command line arguments +* @code{GET_COMMAND}: GET_COMMAND, Get the entire command line +* @code{GET_COMMAND_ARGUMENT}: GET_COMMAND_ARGUMENT, Get command line arguments +* @code{GETCWD}: GETCWD, Get current working directory +* @code{GETENV}: GETENV, Get an environmental variable +* @code{GET_ENVIRONMENT_VARIABLE}: GET_ENVIRONMENT_VARIABLE, Get an environmental variable +* @code{GETGID}: GETGID, Group ID function +* @code{GETLOG}: GETLOG, Get login name +* @code{GETPID}: GETPID, Process ID function +* @code{GETUID}: GETUID, User ID function +* @code{GMTIME}: GMTIME, Convert time to GMT info +* @code{HOSTNM}: HOSTNM, Get system host name +* @code{HUGE}: HUGE, Largest number of a kind +* @code{HYPOT}: HYPOT, Euclidian distance function +* @code{IACHAR}: IACHAR, Code in @acronym{ASCII} collating sequence +* @code{IAND}: IAND, Bitwise logical and +* @code{IARGC}: IARGC, Get the number of command line arguments +* @code{IBCLR}: IBCLR, Clear bit +* @code{IBITS}: IBITS, Bit extraction +* @code{IBSET}: IBSET, Set bit +* @code{ICHAR}: ICHAR, Character-to-integer conversion function +* @code{IDATE}: IDATE, Current local time (day/month/year) +* @code{IEOR}: IEOR, Bitwise logical exclusive or +* @code{IERRNO}: IERRNO, Function to get the last system error number +* @code{INDEX}: INDEX intrinsic, Position of a substring within a string +* @code{INT}: INT, Convert to integer type +* @code{INT2}: INT2, Convert to 16-bit integer type +* @code{INT8}: INT8, Convert to 64-bit integer type +* @code{IOR}: IOR, Bitwise logical or +* @code{IRAND}: IRAND, Integer pseudo-random number +* @code{IS_IOSTAT_END}: IS_IOSTAT_END, Test for end-of-file value +* @code{IS_IOSTAT_EOR}: IS_IOSTAT_EOR, Test for end-of-record value +* @code{ISATTY}: ISATTY, Whether a unit is a terminal device +* @code{ISHFT}: ISHFT, Shift bits +* @code{ISHFTC}: ISHFTC, Shift bits circularly +* @code{ISNAN}: ISNAN, Tests for a NaN +* @code{ITIME}: ITIME, Current local time (hour/minutes/seconds) +* @code{KILL}: KILL, Send a signal to a process +* @code{KIND}: KIND, Kind of an entity +* @code{LBOUND}: LBOUND, Lower dimension bounds of an array +* @code{LEADZ}: LEADZ, Number of leading zero bits of an integer +* @code{LEN}: LEN, Length of a character entity +* @code{LEN_TRIM}: LEN_TRIM, Length of a character entity without trailing blank characters +* @code{LOG_GAMMA}: LOG_GAMMA, Logarithm of the Gamma function +* @code{LGE}: LGE, Lexical greater than or equal +* @code{LGT}: LGT, Lexical greater than +* @code{LINK}: LINK, Create a hard link +* @code{LLE}: LLE, Lexical less than or equal +* @code{LLT}: LLT, Lexical less than +* @code{LNBLNK}: LNBLNK, Index of the last non-blank character in a string +* @code{LOC}: LOC, Returns the address of a variable +* @code{LOG}: LOG, Logarithm function +* @code{LOG10}: LOG10, Base 10 logarithm function +* @code{LOGICAL}: LOGICAL, Convert to logical type +* @code{LONG}: LONG, Convert to integer type +* @code{LSHIFT}: LSHIFT, Left shift bits +* @code{LSTAT}: LSTAT, Get file status +* @code{LTIME}: LTIME, Convert time to local time info +* @code{MALLOC}: MALLOC, Dynamic memory allocation function +* @code{MATMUL}: MATMUL, matrix multiplication +* @code{MAX}: MAX, Maximum value of an argument list +* @code{MAXEXPONENT}: MAXEXPONENT, Maximum exponent of a real kind +* @code{MAXLOC}: MAXLOC, Location of the maximum value within an array +* @code{MAXVAL}: MAXVAL, Maximum value of an array +* @code{MCLOCK}: MCLOCK, Time function +* @code{MCLOCK8}: MCLOCK8, Time function (64-bit) +* @code{MERGE}: MERGE, Merge arrays +* @code{MIN}: MIN, Minimum value of an argument list +* @code{MINEXPONENT}: MINEXPONENT, Minimum exponent of a real kind +* @code{MINLOC}: MINLOC, Location of the minimum value within an array +* @code{MINVAL}: MINVAL, Minimum value of an array +* @code{MOD}: MOD, Remainder function +* @code{MODULO}: MODULO, Modulo function +* @code{MOVE_ALLOC}: MOVE_ALLOC, Move allocation from one object to another +* @code{MVBITS}: MVBITS, Move bits from one integer to another +* @code{NEAREST}: NEAREST, Nearest representable number +* @code{NEW_LINE}: NEW_LINE, New line character +* @code{NINT}: NINT, Nearest whole number +* @code{NOT}: NOT, Logical negation +* @code{NULL}: NULL, Function that returns an disassociated pointer +* @code{OR}: OR, Bitwise logical OR +* @code{PACK}: PACK, Pack an array into an array of rank one +* @code{PERROR}: PERROR, Print system error message +* @code{PRECISION}: PRECISION, Decimal precision of a real kind +* @code{PRESENT}: PRESENT, Determine whether an optional dummy argument is specified +* @code{PRODUCT}: PRODUCT, Product of array elements +* @code{RADIX}: RADIX, Base of a data model +* @code{RANDOM_NUMBER}: RANDOM_NUMBER, Pseudo-random number +* @code{RANDOM_SEED}: RANDOM_SEED, Initialize a pseudo-random number sequence +* @code{RAND}: RAND, Real pseudo-random number +* @code{RANGE}: RANGE, Decimal exponent range +* @code{RAN}: RAN, Real pseudo-random number +* @code{REAL}: REAL, Convert to real type +* @code{RENAME}: RENAME, Rename a file +* @code{REPEAT}: REPEAT, Repeated string concatenation +* @code{RESHAPE}: RESHAPE, Function to reshape an array +* @code{RRSPACING}: RRSPACING, Reciprocal of the relative spacing +* @code{RSHIFT}: RSHIFT, Right shift bits +* @code{SCALE}: SCALE, Scale a real value +* @code{SCAN}: SCAN, Scan a string for the presence of a set of characters +* @code{SECNDS}: SECNDS, Time function +* @code{SECOND}: SECOND, CPU time function +* @code{SELECTED_CHAR_KIND}: SELECTED_CHAR_KIND, Choose character kind +* @code{SELECTED_INT_KIND}: SELECTED_INT_KIND, Choose integer kind +* @code{SELECTED_REAL_KIND}: SELECTED_REAL_KIND, Choose real kind +* @code{SET_EXPONENT}: SET_EXPONENT, Set the exponent of the model +* @code{SHAPE}: SHAPE, Determine the shape of an array +* @code{SIGN}: SIGN, Sign copying function +* @code{SIGNAL}: SIGNAL, Signal handling subroutine (or function) +* @code{SIN}: SIN, Sine function +* @code{SINH}: SINH, Hyperbolic sine function +* @code{SIZE}: SIZE, Function to determine the size of an array +* @code{SIZEOF}: SIZEOF, Determine the size in bytes of an expression +* @code{SLEEP}: SLEEP, Sleep for the specified number of seconds +* @code{SNGL}: SNGL, Convert double precision real to default real +* @code{SPACING}: SPACING, Smallest distance between two numbers of a given type +* @code{SPREAD}: SPREAD, Add a dimension to an array +* @code{SQRT}: SQRT, Square-root function +* @code{SRAND}: SRAND, Reinitialize the random number generator +* @code{STAT}: STAT, Get file status +* @code{SUM}: SUM, Sum of array elements +* @code{SYMLNK}: SYMLNK, Create a symbolic link +* @code{SYSTEM}: SYSTEM, Execute a shell command +* @code{SYSTEM_CLOCK}: SYSTEM_CLOCK, Time function +* @code{TAN}: TAN, Tangent function +* @code{TANH}: TANH, Hyperbolic tangent function +* @code{TIME}: TIME, Time function +* @code{TIME8}: TIME8, Time function (64-bit) +* @code{TINY}: TINY, Smallest positive number of a real kind +* @code{TRAILZ}: TRAILZ, Number of trailing zero bits of an integer +* @code{TRANSFER}: TRANSFER, Transfer bit patterns +* @code{TRANSPOSE}: TRANSPOSE, Transpose an array of rank two +* @code{TRIM}: TRIM, Remove trailing blank characters of a string +* @code{TTYNAM}: TTYNAM, Get the name of a terminal device. +* @code{UBOUND}: UBOUND, Upper dimension bounds of an array +* @code{UMASK}: UMASK, Set the file creation mask +* @code{UNLINK}: UNLINK, Remove a file from the file system +* @code{UNPACK}: UNPACK, Unpack an array of rank one into an array +* @code{VERIFY}: VERIFY, Scan a string for the absence of a set of characters +* @code{XOR}: XOR, Bitwise logical exclusive or +@end menu + +@node Introduction to Intrinsics +@section Introduction to intrinsic procedures + +The intrinsic procedures provided by GNU Fortran include all of the +intrinsic procedures required by the Fortran 95 standard, a set of +intrinsic procedures for backwards compatibility with G77, and a +selection of intrinsic procedures from the Fortran 2003 and Fortran 2008 +standards. Any conflict between a description here and a description in +either the Fortran 95 standard, the Fortran 2003 standard or the Fortran +2008 standard is unintentional, and the standard(s) should be considered +authoritative. + +The enumeration of the @code{KIND} type parameter is processor defined in +the Fortran 95 standard. GNU Fortran defines the default integer type and +default real type by @code{INTEGER(KIND=4)} and @code{REAL(KIND=4)}, +respectively. The standard mandates that both data types shall have +another kind, which have more precision. On typical target architectures +supported by @command{gfortran}, this kind type parameter is @code{KIND=8}. +Hence, @code{REAL(KIND=8)} and @code{DOUBLE PRECISION} are equivalent. +In the description of generic intrinsic procedures, the kind type parameter +will be specified by @code{KIND=*}, and in the description of specific +names for an intrinsic procedure the kind type parameter will be explicitly +given (e.g., @code{REAL(KIND=4)} or @code{REAL(KIND=8)}). Finally, for +brevity the optional @code{KIND=} syntax will be omitted. + +Many of the intrinsic procedures take one or more optional arguments. +This document follows the convention used in the Fortran 95 standard, +and denotes such arguments by square brackets. + +GNU Fortran offers the @option{-std=f95} and @option{-std=gnu} options, +which can be used to restrict the set of intrinsic procedures to a +given standard. By default, @command{gfortran} sets the @option{-std=gnu} +option, and so all intrinsic procedures described here are accepted. There +is one caveat. For a select group of intrinsic procedures, @command{g77} +implemented both a function and a subroutine. Both classes +have been implemented in @command{gfortran} for backwards compatibility +with @command{g77}. It is noted here that these functions and subroutines +cannot be intermixed in a given subprogram. In the descriptions that follow, +the applicable standard for each intrinsic procedure is noted. + + + +@node ABORT +@section @code{ABORT} --- Abort the program +@fnindex ABORT +@cindex program termination, with core dump +@cindex terminate program, with core dump +@cindex core, dump + +@table @asis +@item @emph{Description}: +@code{ABORT} causes immediate termination of the program. On operating +systems that support a core dump, @code{ABORT} will produce a core dump even if +the option @option{-fno-dump-core} is in effect, which is suitable for debugging +purposes. +@c TODO: Check if this (with -fno-dump-core) is correct. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL ABORT} + +@item @emph{Return value}: +Does not return. + +@item @emph{Example}: +@smallexample +program test_abort + integer :: i = 1, j = 2 + if (i /= j) call abort +end program test_abort +@end smallexample + +@item @emph{See also}: +@ref{EXIT}, @ref{KILL} + +@end table + + + +@node ABS +@section @code{ABS} --- Absolute value +@fnindex ABS +@fnindex CABS +@fnindex DABS +@fnindex IABS +@fnindex ZABS +@fnindex CDABS +@cindex absolute value + +@table @asis +@item @emph{Description}: +@code{ABS(A)} computes the absolute value of @code{A}. + +@item @emph{Standard}: +Fortran 77 and later, has overloads that are GNU extensions + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ABS(A)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab The type of the argument shall be an @code{INTEGER}, +@code{REAL}, or @code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value is of the same type and +kind as the argument except the return value is @code{REAL} for a +@code{COMPLEX} argument. + +@item @emph{Example}: +@smallexample +program test_abs + integer :: i = -1 + real :: x = -1.e0 + complex :: z = (-1.e0,0.e0) + i = abs(i) + x = abs(x) + x = abs(z) +end program test_abs +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{CABS(A)} @tab @code{COMPLEX(4) Z} @tab @code{REAL(4)} @tab Fortran 77 and later +@item @code{DABS(A)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later +@item @code{IABS(A)} @tab @code{INTEGER(4) I} @tab @code{INTEGER(4)} @tab Fortran 77 and later +@item @code{ZABS(A)} @tab @code{COMPLEX(8) Z} @tab @code{COMPLEX(8)} @tab GNU extension +@item @code{CDABS(A)} @tab @code{COMPLEX(8) Z} @tab @code{COMPLEX(8)} @tab GNU extension +@end multitable +@end table + + + +@node ACCESS +@section @code{ACCESS} --- Checks file access modes +@fnindex ACCESS +@cindex file system, access mode + +@table @asis +@item @emph{Description}: +@code{ACCESS(NAME, MODE)} checks whether the file @var{NAME} +exists, is readable, writable or executable. Except for the +executable check, @code{ACCESS} can be replaced by +Fortran 95's @code{INQUIRE}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = ACCESS(NAME, MODE)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{NAME} @tab Scalar @code{CHARACTER} of default kind with the +file name. Tailing blank are ignored unless the character @code{achar(0)} +is present, then all characters up to and excluding @code{achar(0)} are +used as file name. +@item @var{MODE} @tab Scalar @code{CHARACTER} of default kind with the +file access mode, may be any concatenation of @code{"r"} (readable), +@code{"w"} (writable) and @code{"x"} (executable), or @code{" "} to check +for existence. +@end multitable + +@item @emph{Return value}: +Returns a scalar @code{INTEGER}, which is @code{0} if the file is +accessible in the given mode; otherwise or if an invalid argument +has been given for @code{MODE} the value @code{1} is returned. + +@item @emph{Example}: +@smallexample +program access_test + implicit none + character(len=*), parameter :: file = 'test.dat' + character(len=*), parameter :: file2 = 'test.dat '//achar(0) + if(access(file,' ') == 0) print *, trim(file),' is exists' + if(access(file,'r') == 0) print *, trim(file),' is readable' + if(access(file,'w') == 0) print *, trim(file),' is writable' + if(access(file,'x') == 0) print *, trim(file),' is executable' + if(access(file2,'rwx') == 0) & + print *, trim(file2),' is readable, writable and executable' +end program access_test +@end smallexample +@item @emph{Specific names}: +@item @emph{See also}: + +@end table + + + +@node ACHAR +@section @code{ACHAR} --- Character in @acronym{ASCII} collating sequence +@fnindex ACHAR +@cindex @acronym{ASCII} collating sequence +@cindex collating sequence, @acronym{ASCII} + +@table @asis +@item @emph{Description}: +@code{ACHAR(I)} returns the character located at position @code{I} +in the @acronym{ASCII} collating sequence. + +@item @emph{Standard}: +Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ACHAR(I [, KIND])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be @code{INTEGER}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{CHARACTER} with a length of one. +If the @var{KIND} argument is present, the return value is of the +specified kind and of the default kind otherwise. + +@item @emph{Example}: +@smallexample +program test_achar + character c + c = achar(32) +end program test_achar +@end smallexample + +@item @emph{Note}: +See @ref{ICHAR} for a discussion of converting between numerical values +and formatted string representations. + +@item @emph{See also}: +@ref{CHAR}, @ref{IACHAR}, @ref{ICHAR} + +@end table + + + +@node ACOS +@section @code{ACOS} --- Arccosine function +@fnindex ACOS +@fnindex DACOS +@cindex trigonometric function, cosine, inverse +@cindex cosine, inverse + +@table @asis +@item @emph{Description}: +@code{ACOS(X)} computes the arccosine of @var{X} (inverse of @code{COS(X)}). + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ACOS(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL} with a magnitude that is +less than or equal to one. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} and it lies in the +range @math{ 0 \leq \acos(x) \leq \pi}. The return value if of the same +kind as @var{X}. + +@item @emph{Example}: +@smallexample +program test_acos + real(8) :: x = 0.866_8 + x = acos(x) +end program test_acos +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DACOS(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later +@end multitable + +@item @emph{See also}: +Inverse function: @ref{COS} + +@end table + + + +@node ACOSH +@section @code{ACOSH} --- Hyperbolic arccosine function +@fnindex ACOSH +@fnindex DACOSH +@cindex area hyperbolic cosine +@cindex hyperbolic arccosine +@cindex hyperbolic function, cosine, inverse +@cindex cosine, hyperbolic, inverse + +@table @asis +@item @emph{Description}: +@code{ACOSH(X)} computes the hyperbolic arccosine of @var{X} (inverse of +@code{COSH(X)}). + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ACOSH(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value has the same type and kind as @var{X} + +@item @emph{Example}: +@smallexample +PROGRAM test_acosh + REAL(8), DIMENSION(3) :: x = (/ 1.0, 2.0, 3.0 /) + WRITE (*,*) ACOSH(x) +END PROGRAM +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DACOSH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension +@end multitable + +@item @emph{See also}: +Inverse function: @ref{COSH} +@end table + + + +@node ADJUSTL +@section @code{ADJUSTL} --- Left adjust a string +@fnindex ADJUSTL +@cindex string, adjust left +@cindex adjust string + +@table @asis +@item @emph{Description}: +@code{ADJUSTL(STRING)} will left adjust a string by removing leading spaces. +Spaces are inserted at the end of the string as needed. + +@item @emph{Standard}: +Fortran 90 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ADJUSTL(STRING)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STRING} @tab The type shall be @code{CHARACTER}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{CHARACTER} and of the same kind as +@var{STRING} where leading spaces are removed and the same number of +spaces are inserted on the end of @var{STRING}. + +@item @emph{Example}: +@smallexample +program test_adjustl + character(len=20) :: str = ' gfortran' + str = adjustl(str) + print *, str +end program test_adjustl +@end smallexample + +@item @emph{See also}: +@ref{ADJUSTR}, @ref{TRIM} +@end table + + + +@node ADJUSTR +@section @code{ADJUSTR} --- Right adjust a string +@fnindex ADJUSTR +@cindex string, adjust right +@cindex adjust string + +@table @asis +@item @emph{Description}: +@code{ADJUSTR(STRING)} will right adjust a string by removing trailing spaces. +Spaces are inserted at the start of the string as needed. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ADJUSTR(STRING)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STR} @tab The type shall be @code{CHARACTER}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{CHARACTER} and of the same kind as +@var{STRING} where trailing spaces are removed and the same number of +spaces are inserted at the start of @var{STRING}. + +@item @emph{Example}: +@smallexample +program test_adjustr + character(len=20) :: str = 'gfortran' + str = adjustr(str) + print *, str +end program test_adjustr +@end smallexample + +@item @emph{See also}: +@ref{ADJUSTL}, @ref{TRIM} +@end table + + + +@node AIMAG +@section @code{AIMAG} --- Imaginary part of complex number +@fnindex AIMAG +@fnindex DIMAG +@fnindex IMAG +@fnindex IMAGPART +@cindex complex numbers, imaginary part + +@table @asis +@item @emph{Description}: +@code{AIMAG(Z)} yields the imaginary part of complex argument @code{Z}. +The @code{IMAG(Z)} and @code{IMAGPART(Z)} intrinsic functions are provided +for compatibility with @command{g77}, and their use in new code is +strongly discouraged. + +@item @emph{Standard}: +Fortran 77 and later, has overloads that are GNU extensions + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = AIMAG(Z)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{Z} @tab The type of the argument shall be @code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} with the +kind type parameter of the argument. + +@item @emph{Example}: +@smallexample +program test_aimag + complex(4) z4 + complex(8) z8 + z4 = cmplx(1.e0_4, 0.e0_4) + z8 = cmplx(0.e0_8, 1.e0_8) + print *, aimag(z4), dimag(z8) +end program test_aimag +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DIMAG(Z)} @tab @code{COMPLEX(8) Z} @tab @code{REAL(8)} @tab GNU extension +@item @code{IMAG(Z)} @tab @code{COMPLEX Z} @tab @code{REAL} @tab GNU extension +@item @code{IMAGPART(Z)} @tab @code{COMPLEX Z} @tab @code{REAL} @tab GNU extension +@end multitable +@end table + + + +@node AINT +@section @code{AINT} --- Truncate to a whole number +@fnindex AINT +@fnindex DINT +@cindex floor +@cindex rounding, floor + +@table @asis +@item @emph{Description}: +@code{AINT(A [, KIND])} truncates its argument to a whole number. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = AINT(A [, KIND])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab The type of the argument shall be @code{REAL}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} with the kind type parameter of the +argument if the optional @var{KIND} is absent; otherwise, the kind +type parameter will be given by @var{KIND}. If the magnitude of +@var{X} is less than one, @code{AINT(X)} returns zero. If the +magnitude is equal to or greater than one then it returns the largest +whole number that does not exceed its magnitude. The sign is the same +as the sign of @var{X}. + +@item @emph{Example}: +@smallexample +program test_aint + real(4) x4 + real(8) x8 + x4 = 1.234E0_4 + x8 = 4.321_8 + print *, aint(x4), dint(x8) + x8 = aint(x4,8) +end program test_aint +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DINT(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later +@end multitable +@end table + + + +@node ALARM +@section @code{ALARM} --- Execute a routine after a given delay +@fnindex ALARM +@cindex delayed execution + +@table @asis +@item @emph{Description}: +@code{ALARM(SECONDS, HANDLER [, STATUS])} causes external subroutine @var{HANDLER} +to be executed after a delay of @var{SECONDS} by using @code{alarm(2)} to +set up a signal and @code{signal(2)} to catch it. If @var{STATUS} is +supplied, it will be returned with the number of seconds remaining until +any previously scheduled alarm was due to be delivered, or zero if there +was no previously scheduled alarm. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL ALARM(SECONDS, HANDLER [, STATUS])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{SECONDS} @tab The type of the argument shall be a scalar +@code{INTEGER}. It is @code{INTENT(IN)}. +@item @var{HANDLER} @tab Signal handler (@code{INTEGER FUNCTION} or +@code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar. The scalar +values may be either @code{SIG_IGN=1} to ignore the alarm generated +or @code{SIG_DFL=0} to set the default action. It is @code{INTENT(IN)}. +@item @var{STATUS} @tab (Optional) @var{STATUS} shall be a scalar +variable of the default @code{INTEGER} kind. It is @code{INTENT(OUT)}. +@end multitable + +@item @emph{Example}: +@smallexample +program test_alarm + external handler_print + integer i + call alarm (3, handler_print, i) + print *, i + call sleep(10) +end program test_alarm +@end smallexample +This will cause the external routine @var{handler_print} to be called +after 3 seconds. +@end table + + + +@node ALL +@section @code{ALL} --- All values in @var{MASK} along @var{DIM} are true +@fnindex ALL +@cindex array, apply condition +@cindex array, condition testing + +@table @asis +@item @emph{Description}: +@code{ALL(MASK [, DIM])} determines if all the values are true in @var{MASK} +in the array along dimension @var{DIM}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = ALL(MASK [, DIM])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{MASK} @tab The type of the argument shall be @code{LOGICAL} and +it shall not be scalar. +@item @var{DIM} @tab (Optional) @var{DIM} shall be a scalar integer +with a value that lies between one and the rank of @var{MASK}. +@end multitable + +@item @emph{Return value}: +@code{ALL(MASK)} returns a scalar value of type @code{LOGICAL} where +the kind type parameter is the same as the kind type parameter of +@var{MASK}. If @var{DIM} is present, then @code{ALL(MASK, DIM)} returns +an array with the rank of @var{MASK} minus 1. The shape is determined from +the shape of @var{MASK} where the @var{DIM} dimension is elided. + +@table @asis +@item (A) +@code{ALL(MASK)} is true if all elements of @var{MASK} are true. +It also is true if @var{MASK} has zero size; otherwise, it is false. +@item (B) +If the rank of @var{MASK} is one, then @code{ALL(MASK,DIM)} is equivalent +to @code{ALL(MASK)}. If the rank is greater than one, then @code{ALL(MASK,DIM)} +is determined by applying @code{ALL} to the array sections. +@end table + +@item @emph{Example}: +@smallexample +program test_all + logical l + l = all((/.true., .true., .true./)) + print *, l + call section + contains + subroutine section + integer a(2,3), b(2,3) + a = 1 + b = 1 + b(2,2) = 2 + print *, all(a .eq. b, 1) + print *, all(a .eq. b, 2) + end subroutine section +end program test_all +@end smallexample +@end table + + + +@node ALLOCATED +@section @code{ALLOCATED} --- Status of an allocatable entity +@fnindex ALLOCATED +@cindex allocation, status + +@table @asis +@item @emph{Description}: +@code{ALLOCATED(ARRAY)} checks the status of whether @var{X} is allocated. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = ALLOCATED(ARRAY)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{ARRAY} @tab The argument shall be an @code{ALLOCATABLE} array. +@end multitable + +@item @emph{Return value}: +The return value is a scalar @code{LOGICAL} with the default logical +kind type parameter. If @var{ARRAY} is allocated, @code{ALLOCATED(ARRAY)} +is @code{.TRUE.}; otherwise, it returns @code{.FALSE.} + +@item @emph{Example}: +@smallexample +program test_allocated + integer :: i = 4 + real(4), allocatable :: x(:) + if (.not. allocated(x)) allocate(x(i)) +end program test_allocated +@end smallexample +@end table + + + +@node AND +@section @code{AND} --- Bitwise logical AND +@fnindex AND +@cindex bitwise logical and +@cindex logical and, bitwise + +@table @asis +@item @emph{Description}: +Bitwise logical @code{AND}. + +This intrinsic routine is provided for backwards compatibility with +GNU Fortran 77. For integer arguments, programmers should consider +the use of the @ref{IAND} intrinsic defined by the Fortran standard. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = AND(I, J)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be either a scalar @code{INTEGER} +type or a scalar @code{LOGICAL} type. +@item @var{J} @tab The type shall be the same as the type of @var{I}. +@end multitable + +@item @emph{Return value}: +The return type is either a scalar @code{INTEGER} or a scalar +@code{LOGICAL}. If the kind type parameters differ, then the +smaller kind type is implicitly converted to larger kind, and the +return has the larger kind. + +@item @emph{Example}: +@smallexample +PROGRAM test_and + LOGICAL :: T = .TRUE., F = .FALSE. + INTEGER :: a, b + DATA a / Z'F' /, b / Z'3' / + + WRITE (*,*) AND(T, T), AND(T, F), AND(F, T), AND(F, F) + WRITE (*,*) AND(a, b) +END PROGRAM +@end smallexample + +@item @emph{See also}: +Fortran 95 elemental function: @ref{IAND} +@end table + + + +@node ANINT +@section @code{ANINT} --- Nearest whole number +@fnindex ANINT +@fnindex DNINT +@cindex ceiling +@cindex rounding, ceiling + +@table @asis +@item @emph{Description}: +@code{ANINT(A [, KIND])} rounds its argument to the nearest whole number. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ANINT(A [, KIND])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab The type of the argument shall be @code{REAL}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type real with the kind type parameter of the +argument if the optional @var{KIND} is absent; otherwise, the kind +type parameter will be given by @var{KIND}. If @var{A} is greater than +zero, @code{ANINT(A)} returns @code{AINT(X+0.5)}. If @var{A} is +less than or equal to zero then it returns @code{AINT(X-0.5)}. + +@item @emph{Example}: +@smallexample +program test_anint + real(4) x4 + real(8) x8 + x4 = 1.234E0_4 + x8 = 4.321_8 + print *, anint(x4), dnint(x8) + x8 = anint(x4,8) +end program test_anint +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DNINT(A)} @tab @code{REAL(8) A} @tab @code{REAL(8)} @tab Fortran 77 and later +@end multitable +@end table + + + +@node ANY +@section @code{ANY} --- Any value in @var{MASK} along @var{DIM} is true +@fnindex ANY +@cindex array, apply condition +@cindex array, condition testing + +@table @asis +@item @emph{Description}: +@code{ANY(MASK [, DIM])} determines if any of the values in the logical array +@var{MASK} along dimension @var{DIM} are @code{.TRUE.}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = ANY(MASK [, DIM])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{MASK} @tab The type of the argument shall be @code{LOGICAL} and +it shall not be scalar. +@item @var{DIM} @tab (Optional) @var{DIM} shall be a scalar integer +with a value that lies between one and the rank of @var{MASK}. +@end multitable + +@item @emph{Return value}: +@code{ANY(MASK)} returns a scalar value of type @code{LOGICAL} where +the kind type parameter is the same as the kind type parameter of +@var{MASK}. If @var{DIM} is present, then @code{ANY(MASK, DIM)} returns +an array with the rank of @var{MASK} minus 1. The shape is determined from +the shape of @var{MASK} where the @var{DIM} dimension is elided. + +@table @asis +@item (A) +@code{ANY(MASK)} is true if any element of @var{MASK} is true; +otherwise, it is false. It also is false if @var{MASK} has zero size. +@item (B) +If the rank of @var{MASK} is one, then @code{ANY(MASK,DIM)} is equivalent +to @code{ANY(MASK)}. If the rank is greater than one, then @code{ANY(MASK,DIM)} +is determined by applying @code{ANY} to the array sections. +@end table + +@item @emph{Example}: +@smallexample +program test_any + logical l + l = any((/.true., .true., .true./)) + print *, l + call section + contains + subroutine section + integer a(2,3), b(2,3) + a = 1 + b = 1 + b(2,2) = 2 + print *, any(a .eq. b, 1) + print *, any(a .eq. b, 2) + end subroutine section +end program test_any +@end smallexample +@end table + + + +@node ASIN +@section @code{ASIN} --- Arcsine function +@fnindex ASIN +@fnindex DASIN +@cindex trigonometric function, sine, inverse +@cindex sine, inverse + +@table @asis +@item @emph{Description}: +@code{ASIN(X)} computes the arcsine of its @var{X} (inverse of @code{SIN(X)}). + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ASIN(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}, and a magnitude that is +less than or equal to one. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} and it lies in the +range @math{-\pi / 2 \leq \asin (x) \leq \pi / 2}. The kind type +parameter is the same as @var{X}. + +@item @emph{Example}: +@smallexample +program test_asin + real(8) :: x = 0.866_8 + x = asin(x) +end program test_asin +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DASIN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later +@end multitable + +@item @emph{See also}: +Inverse function: @ref{SIN} + +@end table + + + +@node ASINH +@section @code{ASINH} --- Hyperbolic arcsine function +@fnindex ASINH +@fnindex DASINH +@cindex area hyperbolic sine +@cindex hyperbolic arcsine +@cindex hyperbolic function, sine, inverse +@cindex sine, hyperbolic, inverse + +@table @asis +@item @emph{Description}: +@code{ASINH(X)} computes the hyperbolic arcsine of @var{X} (inverse of @code{SINH(X)}). + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ASINH(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value is of the same type and kind as @var{X}. + +@item @emph{Example}: +@smallexample +PROGRAM test_asinh + REAL(8), DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /) + WRITE (*,*) ASINH(x) +END PROGRAM +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DASINH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension. +@end multitable + +@item @emph{See also}: +Inverse function: @ref{SINH} +@end table + + + +@node ASSOCIATED +@section @code{ASSOCIATED} --- Status of a pointer or pointer/target pair +@fnindex ASSOCIATED +@cindex pointer, status +@cindex association status + +@table @asis +@item @emph{Description}: +@code{ASSOCIATED(POINTER [, TARGET])} determines the status of the pointer +@var{POINTER} or if @var{POINTER} is associated with the target @var{TARGET}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = ASSOCIATED(POINTER [, TARGET])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{POINTER} @tab @var{POINTER} shall have the @code{POINTER} attribute +and it can be of any type. +@item @var{TARGET} @tab (Optional) @var{TARGET} shall be a pointer or +a target. It must have the same type, kind type parameter, and +array rank as @var{POINTER}. +@end multitable +The association status of neither @var{POINTER} nor @var{TARGET} shall be +undefined. + +@item @emph{Return value}: +@code{ASSOCIATED(POINTER)} returns a scalar value of type @code{LOGICAL(4)}. +There are several cases: +@table @asis +@item (A) When the optional @var{TARGET} is not present then +@code{ASSOCIATED(POINTER)} is true if @var{POINTER} is associated with a target; otherwise, it returns false. +@item (B) If @var{TARGET} is present and a scalar target, the result is true if +@var{TARGET} is not a zero-sized storage sequence and the target associated with @var{POINTER} occupies the same storage units. If @var{POINTER} is +disassociated, the result is false. +@item (C) If @var{TARGET} is present and an array target, the result is true if +@var{TARGET} and @var{POINTER} have the same shape, are not zero-sized arrays, +are arrays whose elements are not zero-sized storage sequences, and +@var{TARGET} and @var{POINTER} occupy the same storage units in array element +order. +As in case(B), the result is false, if @var{POINTER} is disassociated. +@item (D) If @var{TARGET} is present and an scalar pointer, the result is true +if @var{TARGET} is associated with @var{POINTER}, the target associated with +@var{TARGET} are not zero-sized storage sequences and occupy the same storage +units. +The result is false, if either @var{TARGET} or @var{POINTER} is disassociated. +@item (E) If @var{TARGET} is present and an array pointer, the result is true if +target associated with @var{POINTER} and the target associated with @var{TARGET} +have the same shape, are not zero-sized arrays, are arrays whose elements are +not zero-sized storage sequences, and @var{TARGET} and @var{POINTER} occupy +the same storage units in array element order. +The result is false, if either @var{TARGET} or @var{POINTER} is disassociated. +@end table + +@item @emph{Example}: +@smallexample +program test_associated + implicit none + real, target :: tgt(2) = (/1., 2./) + real, pointer :: ptr(:) + ptr => tgt + if (associated(ptr) .eqv. .false.) call abort + if (associated(ptr,tgt) .eqv. .false.) call abort +end program test_associated +@end smallexample + +@item @emph{See also}: +@ref{NULL} +@end table + + + +@node ATAN +@section @code{ATAN} --- Arctangent function +@fnindex ATAN +@fnindex DATAN +@cindex trigonometric function, tangent, inverse +@cindex tangent, inverse + +@table @asis +@item @emph{Description}: +@code{ATAN(X)} computes the arctangent of @var{X}. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ATAN(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} and it lies in the +range @math{ - \pi / 2 \leq \atan (x) \leq \pi / 2}. + +@item @emph{Example}: +@smallexample +program test_atan + real(8) :: x = 2.866_8 + x = atan(x) +end program test_atan +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DATAN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later +@end multitable + +@item @emph{See also}: +Inverse function: @ref{TAN} + +@end table + + + +@node ATAN2 +@section @code{ATAN2} --- Arctangent function +@fnindex ATAN2 +@fnindex DATAN2 +@cindex trigonometric function, tangent, inverse +@cindex tangent, inverse + +@table @asis +@item @emph{Description}: +@code{ATAN2(Y, X)} computes the arctangent of the complex number +@math{X + i Y}. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ATAN2(Y, X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{Y} @tab The type shall be @code{REAL}. +@item @var{X} @tab The type and kind type parameter shall be the same as @var{Y}. +If @var{Y} is zero, then @var{X} must be nonzero. +@end multitable + +@item @emph{Return value}: +The return value has the same type and kind type parameter as @var{Y}. +It is the principal value of the complex number @math{X + i Y}. If +@var{X} is nonzero, then it lies in the range @math{-\pi \le \atan (x) \leq \pi}. +The sign is positive if @var{Y} is positive. If @var{Y} is zero, then +the return value is zero if @var{X} is positive and @math{\pi} if @var{X} +is negative. Finally, if @var{X} is zero, then the magnitude of the result +is @math{\pi/2}. + +@item @emph{Example}: +@smallexample +program test_atan2 + real(4) :: x = 1.e0_4, y = 0.5e0_4 + x = atan2(y,x) +end program test_atan2 +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DATAN2(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later +@end multitable +@end table + + + +@node ATANH +@section @code{ATANH} --- Hyperbolic arctangent function +@fnindex ASINH +@fnindex DASINH +@cindex area hyperbolic tangent +@cindex hyperbolic arctangent +@cindex hyperbolic function, tangent, inverse +@cindex tangent, hyperbolic, inverse + +@table @asis +@item @emph{Description}: +@code{ATANH(X)} computes the hyperbolic arctangent of @var{X} (inverse +of @code{TANH(X)}). + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ATANH(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL} or @code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value has same type and kind as @var{X}. + +@item @emph{Example}: +@smallexample +PROGRAM test_atanh + REAL, DIMENSION(3) :: x = (/ -1.0, 0.0, 1.0 /) + WRITE (*,*) ATANH(x) +END PROGRAM +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DATANH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension +@end multitable + +@item @emph{See also}: +Inverse function: @ref{TANH} +@end table + + + +@node BESSEL_J0 +@section @code{BESSEL_J0} --- Bessel function of the first kind of order 0 +@fnindex BESSEL_J0 +@fnindex BESJ0 +@fnindex DBESJ0 +@cindex Bessel function, first kind + +@table @asis +@item @emph{Description}: +@code{BESSEL_J0(X)} computes the Bessel function of the first kind of +order 0 of @var{X}. This function is available under the name +@code{BESJ0} as a GNU extension. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = BESSEL_J0(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}, and it shall be scalar. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} and lies in the +range @math{ - 0.4027... \leq Bessel (0,x) \leq 1}. It has the same +kind as @var{X}. + +@item @emph{Example}: +@smallexample +program test_besj0 + real(8) :: x = 0.0_8 + x = bessel_j0(x) +end program test_besj0 +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DBESJ0(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension +@end multitable +@end table + + + +@node BESSEL_J1 +@section @code{BESSEL_J1} --- Bessel function of the first kind of order 1 +@fnindex BESSEL_J1 +@fnindex BESJ1 +@fnindex DBESJ1 +@cindex Bessel function, first kind + +@table @asis +@item @emph{Description}: +@code{BESSEL_J1(X)} computes the Bessel function of the first kind of +order 1 of @var{X}. This function is available under the name +@code{BESJ1} as a GNU extension. + +@item @emph{Standard}: +Fortran 2008 + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = BESSEL_J1(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}, and it shall be scalar. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} and it lies in the +range @math{ - 0.5818... \leq Bessel (0,x) \leq 0.5818 }. It has the same +kind as @var{X}. + +@item @emph{Example}: +@smallexample +program test_besj1 + real(8) :: x = 1.0_8 + x = bessel_j1(x) +end program test_besj1 +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DBESJ1(X)}@tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension +@end multitable +@end table + + + +@node BESSEL_JN +@section @code{BESSEL_JN} --- Bessel function of the first kind +@fnindex BESSEL_JN +@fnindex BESJN +@fnindex DBESJN +@cindex Bessel function, first kind + +@table @asis +@item @emph{Description}: +@code{BESSEL_JN(N, X)} computes the Bessel function of the first kind of +order @var{N} of @var{X}. This function is available under the name +@code{BESJN} as a GNU extension. + +If both arguments are arrays, their ranks and shapes shall conform. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = BESSEL_JN(N, X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{N} @tab Shall be a scalar or an array of type @code{INTEGER}. +@item @var{X} @tab Shall be a scalar or an array of type @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is a scalar of type @code{REAL}. It has the same +kind as @var{X}. + +@item @emph{Example}: +@smallexample +program test_besjn + real(8) :: x = 1.0_8 + x = bessel_jn(5,x) +end program test_besjn +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DBESJN(X)} @tab @code{INTEGER N} @tab @code{REAL(8)} @tab GNU extension +@item @tab @code{REAL(8) X} @tab @tab +@end multitable +@end table + + + +@node BESSEL_Y0 +@section @code{BESSEL_Y0} --- Bessel function of the second kind of order 0 +@fnindex BESSEL_Y0 +@fnindex BESY0 +@fnindex DBESY0 +@cindex Bessel function, second kind + +@table @asis +@item @emph{Description}: +@code{BESSEL_Y0(X)} computes the Bessel function of the second kind of +order 0 of @var{X}. This function is available under the name +@code{BESY0} as a GNU extension. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = BESSEL_Y0(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}, and it shall be scalar. +@end multitable + +@item @emph{Return value}: +The return value is a scalar of type @code{REAL}. It has the same +kind as @var{X}. + +@item @emph{Example}: +@smallexample +program test_besy0 + real(8) :: x = 0.0_8 + x = bessel_y0(x) +end program test_besy0 +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DBESY0(X)}@tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension +@end multitable +@end table + + + +@node BESSEL_Y1 +@section @code{BESSEL_Y1} --- Bessel function of the second kind of order 1 +@fnindex BESSEL_Y1 +@fnindex BESY1 +@fnindex DBESY1 +@cindex Bessel function, second kind + +@table @asis +@item @emph{Description}: +@code{BESSEL_Y1(X)} computes the Bessel function of the second kind of +order 1 of @var{X}. This function is available under the name +@code{BESY1} as a GNU extension. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = BESSEL_Y1(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}, and it shall be scalar. +@end multitable + +@item @emph{Return value}: +The return value is a scalar of type @code{REAL}. It has the same +kind as @var{X}. + +@item @emph{Example}: +@smallexample +program test_besy1 + real(8) :: x = 1.0_8 + x = bessel_y1(x) +end program test_besy1 +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DBESY1(X)}@tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension +@end multitable +@end table + + + +@node BESSEL_YN +@section @code{BESSEL_YN} --- Bessel function of the second kind +@fnindex BESSEL_YN +@fnindex BESYN +@fnindex DBESYN +@cindex Bessel function, second kind + +@table @asis +@item @emph{Description}: +@code{BESSEL_YN(N, X)} computes the Bessel function of the second kind of +order @var{N} of @var{X}. This function is available under the name +@code{BESYN} as a GNU extension. + +If both arguments are arrays, their ranks and shapes shall conform. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = BESSEL_YN(N, X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{N} @tab Shall be a scalar or an array of type @code{INTEGER}. +@item @var{X} @tab Shall be a scalar or an array of type @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is a scalar of type @code{REAL}. It has the same +kind as @var{X}. + +@item @emph{Example}: +@smallexample +program test_besyn + real(8) :: x = 1.0_8 + x = bessel_yn(5,x) +end program test_besyn +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DBESYN(N,X)} @tab @code{INTEGER N} @tab @code{REAL(8)} @tab GNU extension +@item @tab @code{REAL(8) X} @tab @tab +@end multitable +@end table + + + +@node BIT_SIZE +@section @code{BIT_SIZE} --- Bit size inquiry function +@fnindex BIT_SIZE +@cindex bits, number of +@cindex size of a variable, in bits + +@table @asis +@item @emph{Description}: +@code{BIT_SIZE(I)} returns the number of bits (integer precision plus sign bit) +represented by the type of @var{I}. The result of @code{BIT_SIZE(I)} is +independent of the actual value of @var{I}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = BIT_SIZE(I)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} + +@item @emph{Example}: +@smallexample +program test_bit_size + integer :: i = 123 + integer :: size + size = bit_size(i) + print *, size +end program test_bit_size +@end smallexample +@end table + + + +@node BTEST +@section @code{BTEST} --- Bit test function +@fnindex BTEST +@cindex bits, testing + +@table @asis +@item @emph{Description}: +@code{BTEST(I,POS)} returns logical @code{.TRUE.} if the bit at @var{POS} +in @var{I} is set. The counting of the bits starts at 0. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = BTEST(I, POS)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be @code{INTEGER}. +@item @var{POS} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{LOGICAL} + +@item @emph{Example}: +@smallexample +program test_btest + integer :: i = 32768 + 1024 + 64 + integer :: pos + logical :: bool + do pos=0,16 + bool = btest(i, pos) + print *, pos, bool + end do +end program test_btest +@end smallexample +@end table + + +@node C_ASSOCIATED +@section @code{C_ASSOCIATED} --- Status of a C pointer +@fnindex C_ASSOCIATED +@cindex association status, C pointer +@cindex pointer, C association status + +@table @asis +@item @emph{Description}: +@code{C_ASSOCIATED(c_prt_1[, c_ptr_2])} determines the status of the C pointer +@var{c_ptr_1} or if @var{c_ptr_1} is associated with the target @var{c_ptr_2}. + +@item @emph{Standard}: +Fortran 2003 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = C_ASSOCIATED(c_prt_1[, c_ptr_2])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{c_ptr_1} @tab Scalar of the type @code{C_PTR} or @code{C_FUNPTR}. +@item @var{c_ptr_2} @tab (Optional) Scalar of the same type as @var{c_ptr_1}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{LOGICAL}; it is @code{.false.} if either +@var{c_ptr_1} is a C NULL pointer or if @var{c_ptr1} and @var{c_ptr_2} +point to different addresses. + +@item @emph{Example}: +@smallexample +subroutine association_test(a,b) + use iso_c_binding, only: c_associated, c_loc, c_ptr + implicit none + real, pointer :: a + type(c_ptr) :: b + if(c_associated(b, c_loc(a))) & + stop 'b and a do not point to same target' +end subroutine association_test +@end smallexample + +@item @emph{See also}: +@ref{C_LOC}, @ref{C_FUNLOC} +@end table + + +@node C_FUNLOC +@section @code{C_FUNLOC} --- Obtain the C address of a procedure +@fnindex C_FUNLOC +@cindex pointer, C address of procedures + +@table @asis +@item @emph{Description}: +@code{C_FUNLOC(x)} determines the C address of the argument. + +@item @emph{Standard}: +Fortran 2003 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = C_FUNLOC(x)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{x} @tab Interoperable function or pointer to such function. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{C_FUNPTR} and contains the C address +of the argument. + +@item @emph{Example}: +@smallexample +module x + use iso_c_binding + implicit none +contains + subroutine sub(a) bind(c) + real(c_float) :: a + a = sqrt(a)+5.0 + end subroutine sub +end module x +program main + use iso_c_binding + use x + implicit none + interface + subroutine my_routine(p) bind(c,name='myC_func') + import :: c_funptr + type(c_funptr), intent(in) :: p + end subroutine + end interface + call my_routine(c_funloc(sub)) +end program main +@end smallexample + +@item @emph{See also}: +@ref{C_ASSOCIATED}, @ref{C_LOC}, @ref{C_F_POINTER}, @ref{C_F_PROCPOINTER} +@end table + + +@node C_F_PROCPOINTER +@section @code{C_F_PROCPOINTER} --- Convert C into Fortran procedure pointer +@fnindex C_F_PROCPOINTER +@cindex pointer, C address of pointers + +@table @asis +@item @emph{Description}: +@code{C_F_PROCPOINTER(CPTR, FPTR)} Assign the target of the C function pointer +@var{CPTR} to the Fortran procedure pointer @var{FPTR}. + +Note: Due to the currently lacking support of procedure pointers in GNU Fortran +this function is not fully operable. + +@item @emph{Standard}: +Fortran 2003 and later + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL C_F_PROCPOINTER(cptr, fptr)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{CPTR} @tab scalar of the type @code{C_FUNPTR}. It is +@code{INTENT(IN)}. +@item @var{FPTR} @tab procedure pointer interoperable with @var{cptr}. It is +@code{INTENT(OUT)}. +@end multitable + +@item @emph{Example}: +@smallexample +program main + use iso_c_binding + implicit none + abstract interface + function func(a) + import :: c_float + real(c_float), intent(in) :: a + real(c_float) :: func + end function + end interface + interface + function getIterFunc() bind(c,name="getIterFunc") + import :: c_funptr + type(c_funptr) :: getIterFunc + end function + end interface + type(c_funptr) :: cfunptr + procedure(func), pointer :: myFunc + cfunptr = getIterFunc() + call c_f_procpointer(cfunptr, myFunc) +end program main +@end smallexample + +@item @emph{See also}: +@ref{C_LOC}, @ref{C_F_POINTER} +@end table + + +@node C_F_POINTER +@section @code{C_F_POINTER} --- Convert C into Fortran pointer +@fnindex C_F_POINTER +@cindex pointer, convert C to Fortran + +@table @asis +@item @emph{Description}: +@code{C_F_POINTER(CPTR, FPTR[, SHAPE])} Assign the target the C pointer +@var{CPTR} to the Fortran pointer @var{FPTR} and specify its +shape. + +@item @emph{Standard}: +Fortran 2003 and later + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL C_F_POINTER(CPTR, FPTR[, SHAPE])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{CPTR} @tab scalar of the type @code{C_PTR}. It is +@code{INTENT(IN)}. +@item @var{FPTR} @tab pointer interoperable with @var{cptr}. It is +@code{INTENT(OUT)}. +@item @var{SHAPE} @tab (Optional) Rank-one array of type @code{INTEGER} +with @code{INTENT(IN)}. It shall be present +if and only if @var{fptr} is an array. The size +must be equal to the rank of @var{fptr}. +@end multitable + +@item @emph{Example}: +@smallexample +program main + use iso_c_binding + implicit none + interface + subroutine my_routine(p) bind(c,name='myC_func') + import :: c_ptr + type(c_ptr), intent(out) :: p + end subroutine + end interface + type(c_ptr) :: cptr + real,pointer :: a(:) + call my_routine(cptr) + call c_f_pointer(cptr, a, [12]) +end program main +@end smallexample + +@item @emph{See also}: +@ref{C_LOC}, @ref{C_F_PROCPOINTER} +@end table + + +@node C_LOC +@section @code{C_LOC} --- Obtain the C address of an object +@fnindex C_LOC +@cindex procedure pointer, convert C to Fortran + +@table @asis +@item @emph{Description}: +@code{C_LOC(X)} determines the C address of the argument. + +@item @emph{Standard}: +Fortran 2003 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = C_LOC(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Associated scalar pointer or interoperable scalar +or allocated allocatable variable with @code{TARGET} attribute. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{C_PTR} and contains the C address +of the argument. + +@item @emph{Example}: +@smallexample +subroutine association_test(a,b) + use iso_c_binding, only: c_associated, c_loc, c_ptr + implicit none + real, pointer :: a + type(c_ptr) :: b + if(c_associated(b, c_loc(a))) & + stop 'b and a do not point to same target' +end subroutine association_test +@end smallexample + +@item @emph{See also}: +@ref{C_ASSOCIATED}, @ref{C_FUNLOC}, @ref{C_F_POINTER}, @ref{C_F_PROCPOINTER} +@end table + + +@node C_SIZEOF +@section @code{C_SIZEOF} --- Size in bytes of an expression +@fnindex C_SIZEOF +@cindex expression size +@cindex size of an expression + +@table @asis +@item @emph{Description}: +@code{C_SIZEOF(X)} calculates the number of bytes of storage the +expression @code{X} occupies. + +@item @emph{Standard}: +Fortran 2008 + +@item @emph{Class}: +Intrinsic function + +@item @emph{Syntax}: +@code{N = C_SIZEOF(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The argument shall be of any type, rank or shape. +@end multitable + +@item @emph{Return value}: +The return value is of type integer and of the system-dependent kind +@var{C_SIZE_T} (from the @var{ISO_C_BINDING} module). Its value is the +number of bytes occupied by the argument. If the argument has the +@code{POINTER} attribute, the number of bytes of the storage area pointed +to is returned. If the argument is of a derived type with @code{POINTER} +or @code{ALLOCATABLE} components, the return value doesn't account for +the sizes of the data pointed to by these components. + +@item @emph{Example}: +@smallexample + use iso_c_binding + integer(c_int) :: i + real(c_float) :: r, s(5) + print *, (c_sizeof(s)/c_sizeof(r) == 5) + end +@end smallexample +The example will print @code{.TRUE.} unless you are using a platform +where default @code{REAL} variables are unusually padded. + +@item @emph{See also}: +@ref{SIZEOF} +@end table + + +@node CEILING +@section @code{CEILING} --- Integer ceiling function +@fnindex CEILING +@cindex ceiling +@cindex rounding, ceiling + +@table @asis +@item @emph{Description}: +@code{CEILING(A)} returns the least integer greater than or equal to @var{A}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = CEILING(A [, KIND])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab The type shall be @code{REAL}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER(KIND)} if @var{KIND} is present +and a default-kind @code{INTEGER} otherwise. + +@item @emph{Example}: +@smallexample +program test_ceiling + real :: x = 63.29 + real :: y = -63.59 + print *, ceiling(x) ! returns 64 + print *, ceiling(y) ! returns -63 +end program test_ceiling +@end smallexample + +@item @emph{See also}: +@ref{FLOOR}, @ref{NINT} + +@end table + + + +@node CHAR +@section @code{CHAR} --- Character conversion function +@fnindex CHAR +@cindex conversion, to character + +@table @asis +@item @emph{Description}: +@code{CHAR(I [, KIND])} returns the character represented by the integer @var{I}. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = CHAR(I [, KIND])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be @code{INTEGER}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{CHARACTER(1)} + +@item @emph{Example}: +@smallexample +program test_char + integer :: i = 74 + character(1) :: c + c = char(i) + print *, i, c ! returns 'J' +end program test_char +@end smallexample + +@item @emph{Note}: +See @ref{ICHAR} for a discussion of converting between numerical values +and formatted string representations. + +@item @emph{See also}: +@ref{ACHAR}, @ref{IACHAR}, @ref{ICHAR} + +@end table + + + +@node CHDIR +@section @code{CHDIR} --- Change working directory +@fnindex CHDIR +@cindex system, working directory + +@table @asis +@item @emph{Description}: +Change current working directory to a specified path. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL CHDIR(NAME [, STATUS])} +@item @code{STATUS = CHDIR(NAME)} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{NAME} @tab The type shall be @code{CHARACTER} of default +kind and shall specify a valid path within the file system. +@item @var{STATUS} @tab (Optional) @code{INTEGER} status flag of the default +kind. Returns 0 on success, and a system specific and nonzero error code +otherwise. +@end multitable + +@item @emph{Example}: +@smallexample +PROGRAM test_chdir + CHARACTER(len=255) :: path + CALL getcwd(path) + WRITE(*,*) TRIM(path) + CALL chdir("/tmp") + CALL getcwd(path) + WRITE(*,*) TRIM(path) +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{GETCWD} +@end table + + + +@node CHMOD +@section @code{CHMOD} --- Change access permissions of files +@fnindex CHMOD +@cindex file system, change access mode + +@table @asis +@item @emph{Description}: +@code{CHMOD} changes the permissions of a file. This function invokes +@code{/bin/chmod} and might therefore not work on all platforms. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL CHMOD(NAME, MODE[, STATUS])} +@item @code{STATUS = CHMOD(NAME, MODE)} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 + +@item @var{NAME} @tab Scalar @code{CHARACTER} of default kind with the +file name. Trailing blanks are ignored unless the character +@code{achar(0)} is present, then all characters up to and excluding +@code{achar(0)} are used as the file name. + +@item @var{MODE} @tab Scalar @code{CHARACTER} of default kind giving the +file permission. @var{MODE} uses the same syntax as the @var{MODE} +argument of @code{/bin/chmod}. + +@item @var{STATUS} @tab (optional) scalar @code{INTEGER}, which is +@code{0} on success and nonzero otherwise. +@end multitable + +@item @emph{Return value}: +In either syntax, @var{STATUS} is set to @code{0} on success and nonzero +otherwise. + +@item @emph{Example}: +@code{CHMOD} as subroutine +@smallexample +program chmod_test + implicit none + integer :: status + call chmod('test.dat','u+x',status) + print *, 'Status: ', status +end program chmod_test +@end smallexample +@code{CHMOD} as function: +@smallexample +program chmod_test + implicit none + integer :: status + status = chmod('test.dat','u+x') + print *, 'Status: ', status +end program chmod_test +@end smallexample + +@end table + + + +@node CMPLX +@section @code{CMPLX} --- Complex conversion function +@fnindex CMPLX +@cindex complex numbers, conversion to +@cindex conversion, to complex + +@table @asis +@item @emph{Description}: +@code{CMPLX(X [, Y [, KIND]])} returns a complex number where @var{X} is converted to +the real component. If @var{Y} is present it is converted to the imaginary +component. If @var{Y} is not present then the imaginary component is set to +0.0. If @var{X} is complex then @var{Y} must not be present. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = CMPLX(X [, Y [, KIND]])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type may be @code{INTEGER}, @code{REAL}, +or @code{COMPLEX}. +@item @var{Y} @tab (Optional; only allowed if @var{X} is not +@code{COMPLEX}.) May be @code{INTEGER} or @code{REAL}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of @code{COMPLEX} type, with a kind equal to +@var{KIND} if it is specified. If @var{KIND} is not specified, the +result is of the default @code{COMPLEX} kind, regardless of the kinds of +@var{X} and @var{Y}. + +@item @emph{Example}: +@smallexample +program test_cmplx + integer :: i = 42 + real :: x = 3.14 + complex :: z + z = cmplx(i, x) + print *, z, cmplx(x) +end program test_cmplx +@end smallexample + +@item @emph{See also}: +@ref{COMPLEX} +@end table + + + +@node COMMAND_ARGUMENT_COUNT +@section @code{COMMAND_ARGUMENT_COUNT} --- Get number of command line arguments +@fnindex COMMAND_ARGUMENT_COUNT +@cindex command-line arguments +@cindex command-line arguments, number of +@cindex arguments, to program + +@table @asis +@item @emph{Description}: +@code{COMMAND_ARGUMENT_COUNT()} returns the number of arguments passed on the +command line when the containing program was invoked. + +@item @emph{Standard}: +Fortran 2003 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = COMMAND_ARGUMENT_COUNT()} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item None +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER(4)} + +@item @emph{Example}: +@smallexample +program test_command_argument_count + integer :: count + count = command_argument_count() + print *, count +end program test_command_argument_count +@end smallexample + +@item @emph{See also}: +@ref{GET_COMMAND}, @ref{GET_COMMAND_ARGUMENT} +@end table + + + +@node COMPLEX +@section @code{COMPLEX} --- Complex conversion function +@fnindex COMPLEX +@cindex complex numbers, conversion to +@cindex conversion, to complex + +@table @asis +@item @emph{Description}: +@code{COMPLEX(X, Y)} returns a complex number where @var{X} is converted +to the real component and @var{Y} is converted to the imaginary +component. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = COMPLEX(X, Y)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type may be @code{INTEGER} or @code{REAL}. +@item @var{Y} @tab The type may be @code{INTEGER} or @code{REAL}. +@end multitable + +@item @emph{Return value}: +If @var{X} and @var{Y} are both of @code{INTEGER} type, then the return +value is of default @code{COMPLEX} type. + +If @var{X} and @var{Y} are of @code{REAL} type, or one is of @code{REAL} +type and one is of @code{INTEGER} type, then the return value is of +@code{COMPLEX} type with a kind equal to that of the @code{REAL} +argument with the highest precision. + +@item @emph{Example}: +@smallexample +program test_complex + integer :: i = 42 + real :: x = 3.14 + print *, complex(i, x) +end program test_complex +@end smallexample + +@item @emph{See also}: +@ref{CMPLX} +@end table + + + +@node CONJG +@section @code{CONJG} --- Complex conjugate function +@fnindex CONJG +@fnindex DCONJG +@cindex complex conjugate + +@table @asis +@item @emph{Description}: +@code{CONJG(Z)} returns the conjugate of @var{Z}. If @var{Z} is @code{(x, y)} +then the result is @code{(x, -y)} + +@item @emph{Standard}: +Fortran 77 and later, has overloads that are GNU extensions + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{Z = CONJG(Z)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{Z} @tab The type shall be @code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{COMPLEX}. + +@item @emph{Example}: +@smallexample +program test_conjg + complex :: z = (2.0, 3.0) + complex(8) :: dz = (2.71_8, -3.14_8) + z= conjg(z) + print *, z + dz = dconjg(dz) + print *, dz +end program test_conjg +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DCONJG(Z)} @tab @code{COMPLEX(8) Z} @tab @code{COMPLEX(8)} @tab GNU extension +@end multitable +@end table + + + +@node COS +@section @code{COS} --- Cosine function +@fnindex COS +@fnindex DCOS +@fnindex CCOS +@fnindex ZCOS +@fnindex CDCOS +@cindex trigonometric function, cosine +@cindex cosine + +@table @asis +@item @emph{Description}: +@code{COS(X)} computes the cosine of @var{X}. + +@item @emph{Standard}: +Fortran 77 and later, has overloads that are GNU extensions + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = COS(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL} or +@code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} and it lies in the +range @math{ -1 \leq \cos (x) \leq 1}. The kind type +parameter is the same as @var{X}. + +@item @emph{Example}: +@smallexample +program test_cos + real :: x = 0.0 + x = cos(x) +end program test_cos +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DCOS(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later +@item @code{CCOS(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab Fortran 77 and later +@item @code{ZCOS(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension +@item @code{CDCOS(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension +@end multitable + +@item @emph{See also}: +Inverse function: @ref{ACOS} + +@end table + + + +@node COSH +@section @code{COSH} --- Hyperbolic cosine function +@fnindex COSH +@fnindex DCOSH +@cindex hyperbolic cosine +@cindex hyperbolic function, cosine +@cindex cosine, hyperbolic + +@table @asis +@item @emph{Description}: +@code{COSH(X)} computes the hyperbolic cosine of @var{X}. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{X = COSH(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} and it is positive +(@math{ \cosh (x) \geq 0 }). For a @code{REAL} argument @var{X}, +@math{ \cosh (x) \geq 1 }. +The return value is of the same kind as @var{X}. + +@item @emph{Example}: +@smallexample +program test_cosh + real(8) :: x = 1.0_8 + x = cosh(x) +end program test_cosh +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DCOSH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later +@end multitable + +@item @emph{See also}: +Inverse function: @ref{ACOSH} + +@end table + + + +@node COUNT +@section @code{COUNT} --- Count function +@fnindex COUNT +@cindex array, conditionally count elements +@cindex array, element counting +@cindex array, number of elements + +@table @asis +@item @emph{Description}: + +@code{COUNT(MASK [, DIM [, KIND]])} counts the number of @code{.TRUE.} +elements of @var{MASK} along the dimension of @var{DIM}. If @var{DIM} is +omitted it is taken to be @code{1}. @var{DIM} is a scalar of type +@code{INTEGER} in the range of @math{1 /leq DIM /leq n)} where @math{n} +is the rank of @var{MASK}. + +@item @emph{Standard}: +Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = COUNT(MASK [, DIM [, KIND]])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{MASK} @tab The type shall be @code{LOGICAL}. +@item @var{DIM} @tab (Optional) The type shall be @code{INTEGER}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of kind @var{KIND}. If +@var{KIND} is absent, the return value is of default integer kind. +The result has a rank equal to that of @var{MASK}. + +@item @emph{Example}: +@smallexample +program test_count + integer, dimension(2,3) :: a, b + logical, dimension(2,3) :: mask + a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /)) + b = reshape( (/ 0, 7, 3, 4, 5, 8 /), (/ 2, 3 /)) + print '(3i3)', a(1,:) + print '(3i3)', a(2,:) + print * + print '(3i3)', b(1,:) + print '(3i3)', b(2,:) + print * + mask = a.ne.b + print '(3l3)', mask(1,:) + print '(3l3)', mask(2,:) + print * + print '(3i3)', count(mask) + print * + print '(3i3)', count(mask, 1) + print * + print '(3i3)', count(mask, 2) +end program test_count +@end smallexample +@end table + + + +@node CPU_TIME +@section @code{CPU_TIME} --- CPU elapsed time in seconds +@fnindex CPU_TIME +@cindex time, elapsed + +@table @asis +@item @emph{Description}: +Returns a @code{REAL} value representing the elapsed CPU time in +seconds. This is useful for testing segments of code to determine +execution time. + +If a time source is available, time will be reported with microsecond +resolution. If no time source is available, @var{TIME} is set to +@code{-1.0}. + +Note that @var{TIME} may contain a, system dependent, arbitrary offset +and may not start with @code{0.0}. For @code{CPU_TIME}, the absolute +value is meaningless, only differences between subsequent calls to +this subroutine, as shown in the example below, should be used. + + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL CPU_TIME(TIME)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{TIME} @tab The type shall be @code{REAL} with @code{INTENT(OUT)}. +@end multitable + +@item @emph{Return value}: +None + +@item @emph{Example}: +@smallexample +program test_cpu_time + real :: start, finish + call cpu_time(start) + ! put code to test here + call cpu_time(finish) + print '("Time = ",f6.3," seconds.")',finish-start +end program test_cpu_time +@end smallexample + +@item @emph{See also}: +@ref{SYSTEM_CLOCK}, @ref{DATE_AND_TIME} +@end table + + + +@node CSHIFT +@section @code{CSHIFT} --- Circular shift elements of an array +@fnindex CSHIFT +@cindex array, shift circularly +@cindex array, permutation +@cindex array, rotate + +@table @asis +@item @emph{Description}: +@code{CSHIFT(ARRAY, SHIFT [, DIM])} performs a circular shift on elements of +@var{ARRAY} along the dimension of @var{DIM}. If @var{DIM} is omitted it is +taken to be @code{1}. @var{DIM} is a scalar of type @code{INTEGER} in the +range of @math{1 /leq DIM /leq n)} where @math{n} is the rank of @var{ARRAY}. +If the rank of @var{ARRAY} is one, then all elements of @var{ARRAY} are shifted +by @var{SHIFT} places. If rank is greater than one, then all complete rank one +sections of @var{ARRAY} along the given dimension are shifted. Elements +shifted out one end of each rank one section are shifted back in the other end. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = CSHIFT(ARRAY, SHIFT [, DIM])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{ARRAY} @tab Shall be an array of any type. +@item @var{SHIFT} @tab The type shall be @code{INTEGER}. +@item @var{DIM} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +Returns an array of same type and rank as the @var{ARRAY} argument. + +@item @emph{Example}: +@smallexample +program test_cshift + integer, dimension(3,3) :: a + a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /)) + print '(3i3)', a(1,:) + print '(3i3)', a(2,:) + print '(3i3)', a(3,:) + a = cshift(a, SHIFT=(/1, 2, -1/), DIM=2) + print * + print '(3i3)', a(1,:) + print '(3i3)', a(2,:) + print '(3i3)', a(3,:) +end program test_cshift +@end smallexample +@end table + + + +@node CTIME +@section @code{CTIME} --- Convert a time into a string +@fnindex CTIME +@cindex time, conversion to string +@cindex conversion, to string + +@table @asis +@item @emph{Description}: +@code{CTIME} converts a system time value, such as returned by +@code{TIME8()}, to a string of the form @samp{Sat Aug 19 18:13:14 1995}. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL CTIME(TIME, RESULT)}. +@item @code{RESULT = CTIME(TIME)}, (not recommended). +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{TIME} @tab The type shall be of type @code{INTEGER(KIND=8)}. +@item @var{RESULT} @tab The type shall be of type @code{CHARACTER} and +of default kind. +@end multitable + +@item @emph{Return value}: +The converted date and time as a string. + +@item @emph{Example}: +@smallexample +program test_ctime + integer(8) :: i + character(len=30) :: date + i = time8() + + ! Do something, main part of the program + + call ctime(i,date) + print *, 'Program was started on ', date +end program test_ctime +@end smallexample + +@item @emph{See Also}: +@ref{GMTIME}, @ref{LTIME}, @ref{TIME}, @ref{TIME8} +@end table + + + +@node DATE_AND_TIME +@section @code{DATE_AND_TIME} --- Date and time subroutine +@fnindex DATE_AND_TIME +@cindex date, current +@cindex current date +@cindex time, current +@cindex current time + +@table @asis +@item @emph{Description}: +@code{DATE_AND_TIME(DATE, TIME, ZONE, VALUES)} gets the corresponding date and +time information from the real-time system clock. @var{DATE} is +@code{INTENT(OUT)} and has form ccyymmdd. @var{TIME} is @code{INTENT(OUT)} and +has form hhmmss.sss. @var{ZONE} is @code{INTENT(OUT)} and has form (+-)hhmm, +representing the difference with respect to Coordinated Universal Time (UTC). +Unavailable time and date parameters return blanks. + +@var{VALUES} is @code{INTENT(OUT)} and provides the following: + +@multitable @columnfractions .15 .30 .40 +@item @tab @code{VALUE(1)}: @tab The year +@item @tab @code{VALUE(2)}: @tab The month +@item @tab @code{VALUE(3)}: @tab The day of the month +@item @tab @code{VALUE(4)}: @tab Time difference with UTC in minutes +@item @tab @code{VALUE(5)}: @tab The hour of the day +@item @tab @code{VALUE(6)}: @tab The minutes of the hour +@item @tab @code{VALUE(7)}: @tab The seconds of the minute +@item @tab @code{VALUE(8)}: @tab The milliseconds of the second +@end multitable + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL DATE_AND_TIME([DATE, TIME, ZONE, VALUES])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{DATE} @tab (Optional) The type shall be @code{CHARACTER(LEN=8)} +or larger, and of default kind. +@item @var{TIME} @tab (Optional) The type shall be @code{CHARACTER(LEN=10)} +or larger, and of default kind. +@item @var{ZONE} @tab (Optional) The type shall be @code{CHARACTER(LEN=5)} +or larger, and of default kind. +@item @var{VALUES}@tab (Optional) The type shall be @code{INTEGER(8)}. +@end multitable + +@item @emph{Return value}: +None + +@item @emph{Example}: +@smallexample +program test_time_and_date + character(8) :: date + character(10) :: time + character(5) :: zone + integer,dimension(8) :: values + ! using keyword arguments + call date_and_time(date,time,zone,values) + call date_and_time(DATE=date,ZONE=zone) + call date_and_time(TIME=time) + call date_and_time(VALUES=values) + print '(a,2x,a,2x,a)', date, time, zone + print '(8i5))', values +end program test_time_and_date +@end smallexample + +@item @emph{See also}: +@ref{CPU_TIME}, @ref{SYSTEM_CLOCK} +@end table + + + +@node DBLE +@section @code{DBLE} --- Double conversion function +@fnindex DBLE +@cindex conversion, to real + +@table @asis +@item @emph{Description}: +@code{DBLE(A)} Converts @var{A} to double precision real type. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = DBLE(A)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab The type shall be @code{INTEGER}, @code{REAL}, +or @code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value is of type double precision real. + +@item @emph{Example}: +@smallexample +program test_dble + real :: x = 2.18 + integer :: i = 5 + complex :: z = (2.3,1.14) + print *, dble(x), dble(i), dble(z) +end program test_dble +@end smallexample + +@item @emph{See also}: +@ref{DFLOAT}, @ref{FLOAT}, @ref{REAL} +@end table + + + +@node DCMPLX +@section @code{DCMPLX} --- Double complex conversion function +@fnindex DCMPLX +@cindex complex numbers, conversion to +@cindex conversion, to complex + +@table @asis +@item @emph{Description}: +@code{DCMPLX(X [,Y])} returns a double complex number where @var{X} is +converted to the real component. If @var{Y} is present it is converted to the +imaginary component. If @var{Y} is not present then the imaginary component is +set to 0.0. If @var{X} is complex then @var{Y} must not be present. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = DCMPLX(X [, Y])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type may be @code{INTEGER}, @code{REAL}, +or @code{COMPLEX}. +@item @var{Y} @tab (Optional if @var{X} is not @code{COMPLEX}.) May be +@code{INTEGER} or @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{COMPLEX(8)} + +@item @emph{Example}: +@smallexample +program test_dcmplx + integer :: i = 42 + real :: x = 3.14 + complex :: z + z = cmplx(i, x) + print *, dcmplx(i) + print *, dcmplx(x) + print *, dcmplx(z) + print *, dcmplx(x,i) +end program test_dcmplx +@end smallexample +@end table + + + +@node DFLOAT +@section @code{DFLOAT} --- Double conversion function +@fnindex DFLOAT +@cindex conversion, to real + +@table @asis +@item @emph{Description}: +@code{DFLOAT(A)} Converts @var{A} to double precision real type. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = DFLOAT(A)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return value is of type double precision real. + +@item @emph{Example}: +@smallexample +program test_dfloat + integer :: i = 5 + print *, dfloat(i) +end program test_dfloat +@end smallexample + +@item @emph{See also}: +@ref{DBLE}, @ref{FLOAT}, @ref{REAL} +@end table + + + +@node DIGITS +@section @code{DIGITS} --- Significant binary digits function +@fnindex DIGITS +@cindex model representation, significant digits + +@table @asis +@item @emph{Description}: +@code{DIGITS(X)} returns the number of significant binary digits of the internal +model representation of @var{X}. For example, on a system using a 32-bit +floating point representation, a default real number would likely return 24. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = DIGITS(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type may be @code{INTEGER} or @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER}. + +@item @emph{Example}: +@smallexample +program test_digits + integer :: i = 12345 + real :: x = 3.143 + real(8) :: y = 2.33 + print *, digits(i) + print *, digits(x) + print *, digits(y) +end program test_digits +@end smallexample +@end table + + + +@node DIM +@section @code{DIM} --- Positive difference +@fnindex DIM +@fnindex IDIM +@fnindex DDIM +@cindex positive difference + +@table @asis +@item @emph{Description}: +@code{DIM(X,Y)} returns the difference @code{X-Y} if the result is positive; +otherwise returns zero. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = DIM(X, Y)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{INTEGER} or @code{REAL} +@item @var{Y} @tab The type shall be the same type and kind as @var{X}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} or @code{REAL}. + +@item @emph{Example}: +@smallexample +program test_dim + integer :: i + real(8) :: x + i = dim(4, 15) + x = dim(4.345_8, 2.111_8) + print *, i + print *, x +end program test_dim +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{IDIM(X,Y)} @tab @code{INTEGER(4) X,Y} @tab @code{INTEGER(4)} @tab Fortran 77 and later +@item @code{DDIM(X,Y)} @tab @code{REAL(8) X,Y} @tab @code{REAL(8)} @tab Fortran 77 and later +@end multitable +@end table + + + +@node DOT_PRODUCT +@section @code{DOT_PRODUCT} --- Dot product function +@fnindex DOT_PRODUCT +@cindex dot product +@cindex vector product +@cindex product, vector + +@table @asis +@item @emph{Description}: +@code{DOT_PRODUCT(VECTOR_A, VECTOR_B)} computes the dot product multiplication +of two vectors @var{VECTOR_A} and @var{VECTOR_B}. The two vectors may be +either numeric or logical and must be arrays of rank one and of equal size. If +the vectors are @code{INTEGER} or @code{REAL}, the result is +@code{SUM(VECTOR_A*VECTOR_B)}. If the vectors are @code{COMPLEX}, the result +is @code{SUM(CONJG(VECTOR_A)*VECTOR_B)}. If the vectors are @code{LOGICAL}, +the result is @code{ANY(VECTOR_A .AND. VECTOR_B)}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = DOT_PRODUCT(VECTOR_A, VECTOR_B)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{VECTOR_A} @tab The type shall be numeric or @code{LOGICAL}, rank 1. +@item @var{VECTOR_B} @tab The type shall be numeric if @var{VECTOR_A} is of numeric type or @code{LOGICAL} if @var{VECTOR_A} is of type @code{LOGICAL}. @var{VECTOR_B} shall be a rank-one array. +@end multitable + +@item @emph{Return value}: +If the arguments are numeric, the return value is a scalar of numeric type, +@code{INTEGER}, @code{REAL}, or @code{COMPLEX}. If the arguments are +@code{LOGICAL}, the return value is @code{.TRUE.} or @code{.FALSE.}. + +@item @emph{Example}: +@smallexample +program test_dot_prod + integer, dimension(3) :: a, b + a = (/ 1, 2, 3 /) + b = (/ 4, 5, 6 /) + print '(3i3)', a + print * + print '(3i3)', b + print * + print *, dot_product(a,b) +end program test_dot_prod +@end smallexample +@end table + + + +@node DPROD +@section @code{DPROD} --- Double product function +@fnindex DPROD +@cindex product, double-precision + +@table @asis +@item @emph{Description}: +@code{DPROD(X,Y)} returns the product @code{X*Y}. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = DPROD(X, Y)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}. +@item @var{Y} @tab The type shall be @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(8)}. + +@item @emph{Example}: +@smallexample +program test_dprod + real :: x = 5.2 + real :: y = 2.3 + real(8) :: d + d = dprod(x,y) + print *, d +end program test_dprod +@end smallexample +@end table + + + +@node DREAL +@section @code{DREAL} --- Double real part function +@fnindex DREAL +@cindex complex numbers, real part + +@table @asis +@item @emph{Description}: +@code{DREAL(Z)} returns the real part of complex variable @var{Z}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = DREAL(A)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab The type shall be @code{COMPLEX(8)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(8)}. + +@item @emph{Example}: +@smallexample +program test_dreal + complex(8) :: z = (1.3_8,7.2_8) + print *, dreal(z) +end program test_dreal +@end smallexample + +@item @emph{See also}: +@ref{AIMAG} + +@end table + + + +@node DTIME +@section @code{DTIME} --- Execution time subroutine (or function) +@fnindex DTIME +@cindex time, elapsed +@cindex elapsed time + +@table @asis +@item @emph{Description}: +@code{DTIME(TARRAY, RESULT)} initially returns the number of seconds of runtime +since the start of the process's execution in @var{RESULT}. @var{TARRAY} +returns the user and system components of this time in @code{TARRAY(1)} and +@code{TARRAY(2)} respectively. @var{RESULT} is equal to @code{TARRAY(1) + +TARRAY(2)}. + +Subsequent invocations of @code{DTIME} return values accumulated since the +previous invocation. + +On some systems, the underlying timings are represented using types with +sufficiently small limits that overflows (wrap around) are possible, such as +32-bit types. Therefore, the values returned by this intrinsic might be, or +become, negative, or numerically less than previous values, during a single +run of the compiled program. + +Please note, that this implementation is thread safe if used within OpenMP +directives, i.e., its state will be consistent while called from multiple +threads. However, if @code{DTIME} is called from multiple threads, the result +is still the time since the last invocation. This may not give the intended +results. If possible, use @code{CPU_TIME} instead. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +@var{TARRAY} and @var{RESULT} are @code{INTENT(OUT)} and provide the following: + +@multitable @columnfractions .15 .30 .40 +@item @tab @code{TARRAY(1)}: @tab User time in seconds. +@item @tab @code{TARRAY(2)}: @tab System time in seconds. +@item @tab @code{RESULT}: @tab Run time since start in seconds. +@end multitable + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL DTIME(TARRAY, RESULT)}. +@item @code{RESULT = DTIME(TARRAY)}, (not recommended). +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{TARRAY}@tab The type shall be @code{REAL, DIMENSION(2)}. +@item @var{RESULT}@tab The type shall be @code{REAL}. +@end multitable + +@item @emph{Return value}: +Elapsed time in seconds since the last invocation or since the start of program +execution if not called before. + +@item @emph{Example}: +@smallexample +program test_dtime + integer(8) :: i, j + real, dimension(2) :: tarray + real :: result + call dtime(tarray, result) + print *, result + print *, tarray(1) + print *, tarray(2) + do i=1,100000000 ! Just a delay + j = i * i - i + end do + call dtime(tarray, result) + print *, result + print *, tarray(1) + print *, tarray(2) +end program test_dtime +@end smallexample + +@item @emph{See also}: +@ref{CPU_TIME} + +@end table + + + +@node EOSHIFT +@section @code{EOSHIFT} --- End-off shift elements of an array +@fnindex EOSHIFT +@cindex array, shift + +@table @asis +@item @emph{Description}: +@code{EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])} performs an end-off shift on +elements of @var{ARRAY} along the dimension of @var{DIM}. If @var{DIM} is +omitted it is taken to be @code{1}. @var{DIM} is a scalar of type +@code{INTEGER} in the range of @math{1 /leq DIM /leq n)} where @math{n} is the +rank of @var{ARRAY}. If the rank of @var{ARRAY} is one, then all elements of +@var{ARRAY} are shifted by @var{SHIFT} places. If rank is greater than one, +then all complete rank one sections of @var{ARRAY} along the given dimension are +shifted. Elements shifted out one end of each rank one section are dropped. If +@var{BOUNDARY} is present then the corresponding value of from @var{BOUNDARY} +is copied back in the other end. If @var{BOUNDARY} is not present then the +following are copied in depending on the type of @var{ARRAY}. + +@multitable @columnfractions .15 .80 +@item @emph{Array Type} @tab @emph{Boundary Value} +@item Numeric @tab 0 of the type and kind of @var{ARRAY}. +@item Logical @tab @code{.FALSE.}. +@item Character(@var{len}) @tab @var{len} blanks. +@end multitable + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{ARRAY} @tab May be any type, not scalar. +@item @var{SHIFT} @tab The type shall be @code{INTEGER}. +@item @var{BOUNDARY} @tab Same type as @var{ARRAY}. +@item @var{DIM} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +Returns an array of same type and rank as the @var{ARRAY} argument. + +@item @emph{Example}: +@smallexample +program test_eoshift + integer, dimension(3,3) :: a + a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /)) + print '(3i3)', a(1,:) + print '(3i3)', a(2,:) + print '(3i3)', a(3,:) + a = EOSHIFT(a, SHIFT=(/1, 2, 1/), BOUNDARY=-5, DIM=2) + print * + print '(3i3)', a(1,:) + print '(3i3)', a(2,:) + print '(3i3)', a(3,:) +end program test_eoshift +@end smallexample +@end table + + + +@node EPSILON +@section @code{EPSILON} --- Epsilon function +@fnindex EPSILON +@cindex model representation, epsilon + +@table @asis +@item @emph{Description}: +@code{EPSILON(X)} returns the smallest number @var{E} of the same kind +as @var{X} such that @math{1 + E > 1}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = EPSILON(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of same type as the argument. + +@item @emph{Example}: +@smallexample +program test_epsilon + real :: x = 3.143 + real(8) :: y = 2.33 + print *, EPSILON(x) + print *, EPSILON(y) +end program test_epsilon +@end smallexample +@end table + + + +@node ERF +@section @code{ERF} --- Error function +@fnindex ERF +@cindex error function + +@table @asis +@item @emph{Description}: +@code{ERF(X)} computes the error function of @var{X}. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ERF(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL}, of the same kind as +@var{X} and lies in the range @math{-1 \leq erf (x) \leq 1 }. + +@item @emph{Example}: +@smallexample +program test_erf + real(8) :: x = 0.17_8 + x = erf(x) +end program test_erf +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DERF(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension +@end multitable +@end table + + + +@node ERFC +@section @code{ERFC} --- Error function +@fnindex ERFC +@cindex error function, complementary + +@table @asis +@item @emph{Description}: +@code{ERFC(X)} computes the complementary error function of @var{X}. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ERFC(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} and of the same kind as @var{X}. +It lies in the range @math{ 0 \leq erfc (x) \leq 2 }. + +@item @emph{Example}: +@smallexample +program test_erfc + real(8) :: x = 0.17_8 + x = erfc(x) +end program test_erfc +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DERFC(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU extension +@end multitable +@end table + + + +@node ERFC_SCALED +@section @code{ERFC_SCALED} --- Error function +@fnindex ERFC_SCALED +@cindex error function, complementary, exponentially-scaled + +@table @asis +@item @emph{Description}: +@code{ERFC_SCALED(X)} computes the exponentially-scaled complementary +error function of @var{X}. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ERFC_SCALED(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} and of the same kind as @var{X}. + +@item @emph{Example}: +@smallexample +program test_erfc_scaled + real(8) :: x = 0.17_8 + x = erfc_scaled(x) +end program test_erfc_scaled +@end smallexample +@end table + + + +@node ETIME +@section @code{ETIME} --- Execution time subroutine (or function) +@fnindex ETIME +@cindex time, elapsed + +@table @asis +@item @emph{Description}: +@code{ETIME(TARRAY, RESULT)} returns the number of seconds of runtime +since the start of the process's execution in @var{RESULT}. @var{TARRAY} +returns the user and system components of this time in @code{TARRAY(1)} and +@code{TARRAY(2)} respectively. @var{RESULT} is equal to @code{TARRAY(1) + TARRAY(2)}. + +On some systems, the underlying timings are represented using types with +sufficiently small limits that overflows (wrap around) are possible, such as +32-bit types. Therefore, the values returned by this intrinsic might be, or +become, negative, or numerically less than previous values, during a single +run of the compiled program. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +@var{TARRAY} and @var{RESULT} are @code{INTENT(OUT)} and provide the following: + +@multitable @columnfractions .15 .30 .60 +@item @tab @code{TARRAY(1)}: @tab User time in seconds. +@item @tab @code{TARRAY(2)}: @tab System time in seconds. +@item @tab @code{RESULT}: @tab Run time since start in seconds. +@end multitable + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL ETIME(TARRAY, RESULT)}. +@item @code{RESULT = ETIME(TARRAY)}, (not recommended). +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{TARRAY}@tab The type shall be @code{REAL, DIMENSION(2)}. +@item @var{RESULT}@tab The type shall be @code{REAL}. +@end multitable + +@item @emph{Return value}: +Elapsed time in seconds since the start of program execution. + +@item @emph{Example}: +@smallexample +program test_etime + integer(8) :: i, j + real, dimension(2) :: tarray + real :: result + call ETIME(tarray, result) + print *, result + print *, tarray(1) + print *, tarray(2) + do i=1,100000000 ! Just a delay + j = i * i - i + end do + call ETIME(tarray, result) + print *, result + print *, tarray(1) + print *, tarray(2) +end program test_etime +@end smallexample + +@item @emph{See also}: +@ref{CPU_TIME} + +@end table + + + +@node EXIT +@section @code{EXIT} --- Exit the program with status. +@fnindex EXIT +@cindex program termination +@cindex terminate program + +@table @asis +@item @emph{Description}: +@code{EXIT} causes immediate termination of the program with status. If status +is omitted it returns the canonical @emph{success} for the system. All Fortran +I/O units are closed. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL EXIT([STATUS])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STATUS} @tab Shall be an @code{INTEGER} of the default kind. +@end multitable + +@item @emph{Return value}: +@code{STATUS} is passed to the parent process on exit. + +@item @emph{Example}: +@smallexample +program test_exit + integer :: STATUS = 0 + print *, 'This program is going to exit.' + call EXIT(STATUS) +end program test_exit +@end smallexample + +@item @emph{See also}: +@ref{ABORT}, @ref{KILL} +@end table + + + +@node EXP +@section @code{EXP} --- Exponential function +@fnindex EXP +@fnindex DEXP +@fnindex CEXP +@fnindex ZEXP +@fnindex CDEXP +@cindex exponential function +@cindex logarithmic function, inverse + +@table @asis +@item @emph{Description}: +@code{EXP(X)} computes the base @math{e} exponential of @var{X}. + +@item @emph{Standard}: +Fortran 77 and later, has overloads that are GNU extensions + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = EXP(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL} or +@code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value has same type and kind as @var{X}. + +@item @emph{Example}: +@smallexample +program test_exp + real :: x = 1.0 + x = exp(x) +end program test_exp +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DEXP(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later +@item @code{CEXP(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab Fortran 77 and later +@item @code{ZEXP(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension +@item @code{CDEXP(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension +@end multitable +@end table + + + +@node EXPONENT +@section @code{EXPONENT} --- Exponent function +@fnindex EXPONENT +@cindex real number, exponent +@cindex floating point, exponent + +@table @asis +@item @emph{Description}: +@code{EXPONENT(X)} returns the value of the exponent part of @var{X}. If @var{X} +is zero the value returned is zero. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = EXPONENT(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type default @code{INTEGER}. + +@item @emph{Example}: +@smallexample +program test_exponent + real :: x = 1.0 + integer :: i + i = exponent(x) + print *, i + print *, exponent(0.0) +end program test_exponent +@end smallexample +@end table + + + +@node FDATE +@section @code{FDATE} --- Get the current time as a string +@fnindex FDATE +@cindex time, current +@cindex current time +@cindex date, current +@cindex current date + +@table @asis +@item @emph{Description}: +@code{FDATE(DATE)} returns the current date (using the same format as +@code{CTIME}) in @var{DATE}. It is equivalent to @code{CALL CTIME(DATE, +TIME())}. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +@var{DATE} is an @code{INTENT(OUT)} @code{CHARACTER} variable of the +default kind. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL FDATE(DATE)}. +@item @code{DATE = FDATE()}, (not recommended). +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{DATE}@tab The type shall be of type @code{CHARACTER} of the +default kind +@end multitable + +@item @emph{Return value}: +The current date as a string. + +@item @emph{Example}: +@smallexample +program test_fdate + integer(8) :: i, j + character(len=30) :: date + call fdate(date) + print *, 'Program started on ', date + do i = 1, 100000000 ! Just a delay + j = i * i - i + end do + call fdate(date) + print *, 'Program ended on ', date +end program test_fdate +@end smallexample +@end table + + + +@node FLOAT +@section @code{FLOAT} --- Convert integer to default real +@fnindex FLOAT +@cindex conversion, to real + +@table @asis +@item @emph{Description}: +@code{FLOAT(A)} converts the integer @var{A} to a default real value. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = FLOAT(A)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return value is of type default @code{REAL}. + +@item @emph{Example}: +@smallexample +program test_float + integer :: i = 1 + if (float(i) /= 1.) call abort +end program test_float +@end smallexample + +@item @emph{See also}: +@ref{DBLE}, @ref{DFLOAT}, @ref{REAL} +@end table + + + +@node FGET +@section @code{FGET} --- Read a single character in stream mode from stdin +@fnindex FGET +@cindex read character, stream mode +@cindex stream mode, read character +@cindex file operation, read character + +@table @asis +@item @emph{Description}: +Read a single character in stream mode from stdin by bypassing normal +formatted output. Stream I/O should not be mixed with normal record-oriented +(formatted or unformatted) I/O on the same unit; the results are unpredictable. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +Note that the @code{FGET} intrinsic is provided for backwards compatibility with +@command{g77}. GNU Fortran provides the Fortran 2003 Stream facility. +Programmers should consider the use of new stream IO feature in new code +for future portability. See also @ref{Fortran 2003 status}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@code{CALL FGET(C [, STATUS])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{C} @tab The type shall be @code{CHARACTER} and of default +kind. +@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}. +Returns 0 on success, -1 on end-of-file, and a system specific positive +error code otherwise. +@end multitable + +@item @emph{Example}: +@smallexample +PROGRAM test_fget + INTEGER, PARAMETER :: strlen = 100 + INTEGER :: status, i = 1 + CHARACTER(len=strlen) :: str = "" + + WRITE (*,*) 'Enter text:' + DO + CALL fget(str(i:i), status) + if (status /= 0 .OR. i > strlen) exit + i = i + 1 + END DO + WRITE (*,*) TRIM(str) +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{FGETC}, @ref{FPUT}, @ref{FPUTC} +@end table + + + +@node FGETC +@section @code{FGETC} --- Read a single character in stream mode +@fnindex FGETC +@cindex read character, stream mode +@cindex stream mode, read character +@cindex file operation, read character + +@table @asis +@item @emph{Description}: +Read a single character in stream mode by bypassing normal formatted output. +Stream I/O should not be mixed with normal record-oriented (formatted or +unformatted) I/O on the same unit; the results are unpredictable. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +Note that the @code{FGET} intrinsic is provided for backwards compatibility +with @command{g77}. GNU Fortran provides the Fortran 2003 Stream facility. +Programmers should consider the use of new stream IO feature in new code +for future portability. See also @ref{Fortran 2003 status}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@code{CALL FGETC(UNIT, C [, STATUS])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{UNIT} @tab The type shall be @code{INTEGER}. +@item @var{C} @tab The type shall be @code{CHARACTER} and of default +kind. +@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}. +Returns 0 on success, -1 on end-of-file and a system specific positive +error code otherwise. +@end multitable + +@item @emph{Example}: +@smallexample +PROGRAM test_fgetc + INTEGER :: fd = 42, status + CHARACTER :: c + + OPEN(UNIT=fd, FILE="/etc/passwd", ACTION="READ", STATUS = "OLD") + DO + CALL fgetc(fd, c, status) + IF (status /= 0) EXIT + call fput(c) + END DO + CLOSE(UNIT=fd) +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{FGET}, @ref{FPUT}, @ref{FPUTC} +@end table + + + +@node FLOOR +@section @code{FLOOR} --- Integer floor function +@fnindex FLOOR +@cindex floor +@cindex rounding, floor + +@table @asis +@item @emph{Description}: +@code{FLOOR(A)} returns the greatest integer less than or equal to @var{X}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = FLOOR(A [, KIND])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab The type shall be @code{REAL}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER(KIND)} if @var{KIND} is present +and of default-kind @code{INTEGER} otherwise. + +@item @emph{Example}: +@smallexample +program test_floor + real :: x = 63.29 + real :: y = -63.59 + print *, floor(x) ! returns 63 + print *, floor(y) ! returns -64 +end program test_floor +@end smallexample + +@item @emph{See also}: +@ref{CEILING}, @ref{NINT} + +@end table + + + +@node FLUSH +@section @code{FLUSH} --- Flush I/O unit(s) +@fnindex FLUSH +@cindex file operation, flush + +@table @asis +@item @emph{Description}: +Flushes Fortran unit(s) currently open for output. Without the optional +argument, all units are flushed, otherwise just the unit specified. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL FLUSH(UNIT)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{UNIT} @tab (Optional) The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Note}: +Beginning with the Fortran 2003 standard, there is a @code{FLUSH} +statement that should be preferred over the @code{FLUSH} intrinsic. + +@end table + + + +@node FNUM +@section @code{FNUM} --- File number function +@fnindex FNUM +@cindex file operation, file number + +@table @asis +@item @emph{Description}: +@code{FNUM(UNIT)} returns the POSIX file descriptor number corresponding to the +open Fortran I/O unit @code{UNIT}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = FNUM(UNIT)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{UNIT} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} + +@item @emph{Example}: +@smallexample +program test_fnum + integer :: i + open (unit=10, status = "scratch") + i = fnum(10) + print *, i + close (10) +end program test_fnum +@end smallexample +@end table + + + +@node FPUT +@section @code{FPUT} --- Write a single character in stream mode to stdout +@fnindex FPUT +@cindex write character, stream mode +@cindex stream mode, write character +@cindex file operation, write character + +@table @asis +@item @emph{Description}: +Write a single character in stream mode to stdout by bypassing normal +formatted output. Stream I/O should not be mixed with normal record-oriented +(formatted or unformatted) I/O on the same unit; the results are unpredictable. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +Note that the @code{FGET} intrinsic is provided for backwards compatibility with +@command{g77}. GNU Fortran provides the Fortran 2003 Stream facility. +Programmers should consider the use of new stream IO feature in new code +for future portability. See also @ref{Fortran 2003 status}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@code{CALL FPUT(C [, STATUS])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{C} @tab The type shall be @code{CHARACTER} and of default +kind. +@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}. +Returns 0 on success, -1 on end-of-file and a system specific positive +error code otherwise. +@end multitable + +@item @emph{Example}: +@smallexample +PROGRAM test_fput + CHARACTER(len=10) :: str = "gfortran" + INTEGER :: i + DO i = 1, len_trim(str) + CALL fput(str(i:i)) + END DO +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{FPUTC}, @ref{FGET}, @ref{FGETC} +@end table + + + +@node FPUTC +@section @code{FPUTC} --- Write a single character in stream mode +@fnindex FPUTC +@cindex write character, stream mode +@cindex stream mode, write character +@cindex file operation, write character + +@table @asis +@item @emph{Description}: +Write a single character in stream mode by bypassing normal formatted +output. Stream I/O should not be mixed with normal record-oriented +(formatted or unformatted) I/O on the same unit; the results are unpredictable. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +Note that the @code{FGET} intrinsic is provided for backwards compatibility with +@command{g77}. GNU Fortran provides the Fortran 2003 Stream facility. +Programmers should consider the use of new stream IO feature in new code +for future portability. See also @ref{Fortran 2003 status}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@code{CALL FPUTC(UNIT, C [, STATUS])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{UNIT} @tab The type shall be @code{INTEGER}. +@item @var{C} @tab The type shall be @code{CHARACTER} and of default +kind. +@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}. +Returns 0 on success, -1 on end-of-file and a system specific positive +error code otherwise. +@end multitable + +@item @emph{Example}: +@smallexample +PROGRAM test_fputc + CHARACTER(len=10) :: str = "gfortran" + INTEGER :: fd = 42, i + + OPEN(UNIT = fd, FILE = "out", ACTION = "WRITE", STATUS="NEW") + DO i = 1, len_trim(str) + CALL fputc(fd, str(i:i)) + END DO + CLOSE(fd) +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{FPUT}, @ref{FGET}, @ref{FGETC} +@end table + + + +@node FRACTION +@section @code{FRACTION} --- Fractional part of the model representation +@fnindex FRACTION +@cindex real number, fraction +@cindex floating point, fraction + +@table @asis +@item @emph{Description}: +@code{FRACTION(X)} returns the fractional part of the model +representation of @code{X}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{Y = FRACTION(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type of the argument shall be a @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of the same type and kind as the argument. +The fractional part of the model representation of @code{X} is returned; +it is @code{X * RADIX(X)**(-EXPONENT(X))}. + +@item @emph{Example}: +@smallexample +program test_fraction + real :: x + x = 178.1387e-4 + print *, fraction(x), x * radix(x)**(-exponent(x)) +end program test_fraction +@end smallexample + +@end table + + + +@node FREE +@section @code{FREE} --- Frees memory +@fnindex FREE +@cindex pointer, cray + +@table @asis +@item @emph{Description}: +Frees memory previously allocated by @code{MALLOC()}. The @code{FREE} +intrinsic is an extension intended to be used with Cray pointers, and is +provided in GNU Fortran to allow user to compile legacy code. For +new code using Fortran 95 pointers, the memory de-allocation intrinsic is +@code{DEALLOCATE}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL FREE(PTR)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{PTR} @tab The type shall be @code{INTEGER}. It represents the +location of the memory that should be de-allocated. +@end multitable + +@item @emph{Return value}: +None + +@item @emph{Example}: +See @code{MALLOC} for an example. + +@item @emph{See also}: +@ref{MALLOC} +@end table + + + +@node FSEEK +@section @code{FSEEK} --- Low level file positioning subroutine +@fnindex FSEEK +@cindex file operation, seek +@cindex file operation, position + +@table @asis +@item @emph{Description}: +Moves @var{UNIT} to the specified @var{OFFSET}. If @var{WHENCE} +is set to 0, the @var{OFFSET} is taken as an absolute value @code{SEEK_SET}, +if set to 1, @var{OFFSET} is taken to be relative to the current position +@code{SEEK_CUR}, and if set to 2 relative to the end of the file @code{SEEK_END}. +On error, @var{STATUS} is set to a nonzero value. If @var{STATUS} the seek +fails silently. + +This intrinsic routine is not fully backwards compatible with @command{g77}. +In @command{g77}, the @code{FSEEK} takes a statement label instead of a +@var{STATUS} variable. If FSEEK is used in old code, change +@smallexample + CALL FSEEK(UNIT, OFFSET, WHENCE, *label) +@end smallexample +to +@smallexample + INTEGER :: status + CALL FSEEK(UNIT, OFFSET, WHENCE, status) + IF (status /= 0) GOTO label +@end smallexample + +Please note that GNU Fortran provides the Fortran 2003 Stream facility. +Programmers should consider the use of new stream IO feature in new code +for future portability. See also @ref{Fortran 2003 status}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL FSEEK(UNIT, OFFSET, WHENCE[, STATUS])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{UNIT} @tab Shall be a scalar of type @code{INTEGER}. +@item @var{OFFSET} @tab Shall be a scalar of type @code{INTEGER}. +@item @var{WHENCE} @tab Shall be a scalar of type @code{INTEGER}. +Its value shall be either 0, 1 or 2. +@item @var{STATUS} @tab (Optional) shall be a scalar of type +@code{INTEGER(4)}. +@end multitable + +@item @emph{Example}: +@smallexample +PROGRAM test_fseek + INTEGER, PARAMETER :: SEEK_SET = 0, SEEK_CUR = 1, SEEK_END = 2 + INTEGER :: fd, offset, ierr + + ierr = 0 + offset = 5 + fd = 10 + + OPEN(UNIT=fd, FILE="fseek.test") + CALL FSEEK(fd, offset, SEEK_SET, ierr) ! move to OFFSET + print *, FTELL(fd), ierr + + CALL FSEEK(fd, 0, SEEK_END, ierr) ! move to end + print *, FTELL(fd), ierr + + CALL FSEEK(fd, 0, SEEK_SET, ierr) ! move to beginning + print *, FTELL(fd), ierr + + CLOSE(UNIT=fd) +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{FTELL} +@end table + + + +@node FSTAT +@section @code{FSTAT} --- Get file status +@fnindex FSTAT +@cindex file system, file status + +@table @asis +@item @emph{Description}: +@code{FSTAT} is identical to @ref{STAT}, except that information about an +already opened file is obtained. + +The elements in @code{BUFF} are the same as described by @ref{STAT}. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@code{CALL FSTAT(UNIT, BUFF [, STATUS])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{UNIT} @tab An open I/O unit number of type @code{INTEGER}. +@item @var{BUFF} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}. +@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0 +on success and a system specific error code otherwise. +@end multitable + +@item @emph{Example}: +See @ref{STAT} for an example. + +@item @emph{See also}: +To stat a link: @ref{LSTAT}, to stat a file: @ref{STAT} +@end table + + + +@node FTELL +@section @code{FTELL} --- Current stream position +@fnindex FTELL +@cindex file operation, position + +@table @asis +@item @emph{Description}: +Retrieves the current position within an open file. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL FTELL(UNIT, OFFSET)} +@item @code{OFFSET = FTELL(UNIT)} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{OFFSET} @tab Shall of type @code{INTEGER}. +@item @var{UNIT} @tab Shall of type @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +In either syntax, @var{OFFSET} is set to the current offset of unit +number @var{UNIT}, or to @math{-1} if the unit is not currently open. + +@item @emph{Example}: +@smallexample +PROGRAM test_ftell + INTEGER :: i + OPEN(10, FILE="temp.dat") + CALL ftell(10,i) + WRITE(*,*) i +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{FSEEK} +@end table + + + +@node GAMMA +@section @code{GAMMA} --- Gamma function +@fnindex GAMMA +@fnindex DGAMMA +@cindex Gamma function +@cindex Factorial function + +@table @asis +@item @emph{Description}: +@code{GAMMA(X)} computes Gamma (@math{\Gamma}) of @var{X}. For positive, +integer values of @var{X} the Gamma function simplifies to the factorial +function @math{\Gamma(x)=(x-1)!}. + +@tex +$$ +\Gamma(x) = \int_0^\infty t^{x-1}{\rm e}^{-t}\,{\rm d}t +$$ +@end tex + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{X = GAMMA(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Shall be of type @code{REAL} and neither zero +nor a negative integer. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} of the same kind as @var{X}. + +@item @emph{Example}: +@smallexample +program test_gamma + real :: x = 1.0 + x = gamma(x) ! returns 1.0 +end program test_gamma +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{GAMMA(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab GNU Extension +@item @code{DGAMMA(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU Extension +@end multitable + +@item @emph{See also}: +Logarithm of the Gamma function: @ref{LOG_GAMMA} + +@end table + + + +@node GERROR +@section @code{GERROR} --- Get last system error message +@fnindex GERROR +@cindex system, error handling + +@table @asis +@item @emph{Description}: +Returns the system error message corresponding to the last system error. +This resembles the functionality of @code{strerror(3)} in C. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL GERROR(RESULT)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{RESULT} @tab Shall of type @code{CHARACTER} and of default +@end multitable + +@item @emph{Example}: +@smallexample +PROGRAM test_gerror + CHARACTER(len=100) :: msg + CALL gerror(msg) + WRITE(*,*) msg +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{IERRNO}, @ref{PERROR} +@end table + + + +@node GETARG +@section @code{GETARG} --- Get command line arguments +@fnindex GETARG +@cindex command-line arguments +@cindex arguments, to program + +@table @asis +@item @emph{Description}: +Retrieve the @var{POS}-th argument that was passed on the +command line when the containing program was invoked. + +This intrinsic routine is provided for backwards compatibility with +GNU Fortran 77. In new code, programmers should consider the use of +the @ref{GET_COMMAND_ARGUMENT} intrinsic defined by the Fortran 2003 +standard. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL GETARG(POS, VALUE)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{POS} @tab Shall be of type @code{INTEGER} and not wider than +the default integer kind; @math{@var{POS} \geq 0} +@item @var{VALUE} @tab Shall be of type @code{CHARACTER} and of default +kind. +@item @var{VALUE} @tab Shall be of type @code{CHARACTER}. +@end multitable + +@item @emph{Return value}: +After @code{GETARG} returns, the @var{VALUE} argument holds the +@var{POS}th command line argument. If @var{VALUE} can not hold the +argument, it is truncated to fit the length of @var{VALUE}. If there are +less than @var{POS} arguments specified at the command line, @var{VALUE} +will be filled with blanks. If @math{@var{POS} = 0}, @var{VALUE} is set +to the name of the program (on systems that support this feature). + +@item @emph{Example}: +@smallexample +PROGRAM test_getarg + INTEGER :: i + CHARACTER(len=32) :: arg + + DO i = 1, iargc() + CALL getarg(i, arg) + WRITE (*,*) arg + END DO +END PROGRAM +@end smallexample + +@item @emph{See also}: +GNU Fortran 77 compatibility function: @ref{IARGC} + +Fortran 2003 functions and subroutines: @ref{GET_COMMAND}, +@ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT} +@end table + + + +@node GET_COMMAND +@section @code{GET_COMMAND} --- Get the entire command line +@fnindex GET_COMMAND +@cindex command-line arguments +@cindex arguments, to program + +@table @asis +@item @emph{Description}: +Retrieve the entire command line that was used to invoke the program. + +@item @emph{Standard}: +Fortran 2003 and later + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL GET_COMMAND(COMMAND)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{COMMAND} @tab Shall be of type @code{CHARACTER} and of default +kind. +@end multitable + +@item @emph{Return value}: +Stores the entire command line that was used to invoke the program in +@var{COMMAND}. If @var{COMMAND} is not large enough, the command will be +truncated. + +@item @emph{Example}: +@smallexample +PROGRAM test_get_command + CHARACTER(len=255) :: cmd + CALL get_command(cmd) + WRITE (*,*) TRIM(cmd) +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT} +@end table + + + +@node GET_COMMAND_ARGUMENT +@section @code{GET_COMMAND_ARGUMENT} --- Get command line arguments +@fnindex GET_COMMAND_ARGUMENT +@cindex command-line arguments +@cindex arguments, to program + +@table @asis +@item @emph{Description}: +Retrieve the @var{NUMBER}-th argument that was passed on the +command line when the containing program was invoked. + +@item @emph{Standard}: +Fortran 2003 and later + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL GET_COMMAND_ARGUMENT(NUMBER [, VALUE, LENGTH, STATUS])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{NUMBER} @tab Shall be a scalar of type @code{INTEGER(4)}, +@math{@var{NUMBER} \geq 0} +@item @var{VALUE} @tab Shall be a scalar of type @code{CHARACTER} +and of default kind. +@item @var{LENGTH} @tab (Option) Shall be a scalar of type @code{INTEGER(4)}. +@item @var{STATUS} @tab (Option) Shall be a scalar of type @code{INTEGER(4)}. +@end multitable + +@item @emph{Return value}: +After @code{GET_COMMAND_ARGUMENT} returns, the @var{VALUE} argument holds the +@var{NUMBER}-th command line argument. If @var{VALUE} can not hold the argument, it is +truncated to fit the length of @var{VALUE}. If there are less than @var{NUMBER} +arguments specified at the command line, @var{VALUE} will be filled with blanks. +If @math{@var{NUMBER} = 0}, @var{VALUE} is set to the name of the program (on +systems that support this feature). The @var{LENGTH} argument contains the +length of the @var{NUMBER}-th command line argument. If the argument retrieval +fails, @var{STATUS} is a positive number; if @var{VALUE} contains a truncated +command line argument, @var{STATUS} is -1; and otherwise the @var{STATUS} is +zero. + +@item @emph{Example}: +@smallexample +PROGRAM test_get_command_argument + INTEGER :: i + CHARACTER(len=32) :: arg + + i = 0 + DO + CALL get_command_argument(i, arg) + IF (LEN_TRIM(arg) == 0) EXIT + + WRITE (*,*) TRIM(arg) + i = i+1 + END DO +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{GET_COMMAND}, @ref{COMMAND_ARGUMENT_COUNT} +@end table + + + +@node GETCWD +@section @code{GETCWD} --- Get current working directory +@fnindex GETCWD +@cindex system, working directory + +@table @asis +@item @emph{Description}: +Get current working directory. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@code{CALL GETCWD(C [, STATUS])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{C} @tab The type shall be @code{CHARACTER} and of default kind. +@item @var{STATUS} @tab (Optional) status flag. Returns 0 on success, +a system specific and nonzero error code otherwise. +@end multitable + +@item @emph{Example}: +@smallexample +PROGRAM test_getcwd + CHARACTER(len=255) :: cwd + CALL getcwd(cwd) + WRITE(*,*) TRIM(cwd) +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{CHDIR} +@end table + + + +@node GETENV +@section @code{GETENV} --- Get an environmental variable +@fnindex GETENV +@cindex environment variable + +@table @asis +@item @emph{Description}: +Get the @var{VALUE} of the environmental variable @var{NAME}. + +This intrinsic routine is provided for backwards compatibility with +GNU Fortran 77. In new code, programmers should consider the use of +the @ref{GET_ENVIRONMENT_VARIABLE} intrinsic defined by the Fortran +2003 standard. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL GETENV(NAME, VALUE)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{NAME} @tab Shall be of type @code{CHARACTER} and of default kind. +@item @var{VALUE} @tab Shall be of type @code{CHARACTER} and of default kind. +@end multitable + +@item @emph{Return value}: +Stores the value of @var{NAME} in @var{VALUE}. If @var{VALUE} is +not large enough to hold the data, it is truncated. If @var{NAME} +is not set, @var{VALUE} will be filled with blanks. + +@item @emph{Example}: +@smallexample +PROGRAM test_getenv + CHARACTER(len=255) :: homedir + CALL getenv("HOME", homedir) + WRITE (*,*) TRIM(homedir) +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{GET_ENVIRONMENT_VARIABLE} +@end table + + + +@node GET_ENVIRONMENT_VARIABLE +@section @code{GET_ENVIRONMENT_VARIABLE} --- Get an environmental variable +@fnindex GET_ENVIRONMENT_VARIABLE +@cindex environment variable + +@table @asis +@item @emph{Description}: +Get the @var{VALUE} of the environmental variable @var{NAME}. + +@item @emph{Standard}: +Fortran 2003 and later + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL GET_ENVIRONMENT_VARIABLE(NAME[, VALUE, LENGTH, STATUS, TRIM_NAME)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{NAME} @tab Shall be a scalar of type @code{CHARACTER(1)}. +@item @var{VALUE} @tab Shall be a scalar of type @code{CHARACTER(1)}. +@item @var{LENGTH} @tab Shall be a scalar of type @code{INTEGER(4)}. +@item @var{STATUS} @tab Shall be a scalar of type @code{INTEGER(4)}. +@item @var{TRIM_NAME} @tab Shall be a scalar of type @code{LOGICAL(4)}. +@end multitable + +@item @emph{Return value}: +Stores the value of @var{NAME} in @var{VALUE}. If @var{VALUE} is +not large enough to hold the data, it is truncated. If @var{NAME} +is not set, @var{VALUE} will be filled with blanks. Argument @var{LENGTH} +contains the length needed for storing the environment variable @var{NAME} +or zero if it is not present. @var{STATUS} is -1 if @var{VALUE} is present +but too short for the environment variable; it is 1 if the environment +variable does not exist and 2 if the processor does not support environment +variables; in all other cases @var{STATUS} is zero. If @var{TRIM_NAME} is +present with the value @code{.FALSE.}, the trailing blanks in @var{NAME} +are significant; otherwise they are not part of the environment variable +name. + +@item @emph{Example}: +@smallexample +PROGRAM test_getenv + CHARACTER(len=255) :: homedir + CALL get_environment_variable("HOME", homedir) + WRITE (*,*) TRIM(homedir) +END PROGRAM +@end smallexample +@end table + + + +@node GETGID +@section @code{GETGID} --- Group ID function +@fnindex GETGID +@cindex system, group id + +@table @asis +@item @emph{Description}: +Returns the numerical group ID of the current process. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = GETGID()} + +@item @emph{Return value}: +The return value of @code{GETGID} is an @code{INTEGER} of the default +kind. + + +@item @emph{Example}: +See @code{GETPID} for an example. + +@item @emph{See also}: +@ref{GETPID}, @ref{GETUID} +@end table + + + +@node GETLOG +@section @code{GETLOG} --- Get login name +@fnindex GETLOG +@cindex system, login name +@cindex login name + +@table @asis +@item @emph{Description}: +Gets the username under which the program is running. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL GETLOG(C)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{C} @tab Shall be of type @code{CHARACTER} and of default kind. +@end multitable + +@item @emph{Return value}: +Stores the current user name in @var{LOGIN}. (On systems where POSIX +functions @code{geteuid} and @code{getpwuid} are not available, and +the @code{getlogin} function is not implemented either, this will +return a blank string.) + +@item @emph{Example}: +@smallexample +PROGRAM TEST_GETLOG + CHARACTER(32) :: login + CALL GETLOG(login) + WRITE(*,*) login +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{GETUID} +@end table + + + +@node GETPID +@section @code{GETPID} --- Process ID function +@fnindex GETPID +@cindex system, process id +@cindex process id + +@table @asis +@item @emph{Description}: +Returns the numerical process identifier of the current process. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = GETPID()} + +@item @emph{Return value}: +The return value of @code{GETPID} is an @code{INTEGER} of the default +kind. + + +@item @emph{Example}: +@smallexample +program info + print *, "The current process ID is ", getpid() + print *, "Your numerical user ID is ", getuid() + print *, "Your numerical group ID is ", getgid() +end program info +@end smallexample + +@item @emph{See also}: +@ref{GETGID}, @ref{GETUID} +@end table + + + +@node GETUID +@section @code{GETUID} --- User ID function +@fnindex GETUID +@cindex system, user id +@cindex user id + +@table @asis +@item @emph{Description}: +Returns the numerical user ID of the current process. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = GETUID()} + +@item @emph{Return value}: +The return value of @code{GETUID} is an @code{INTEGER} of the default +kind. + + +@item @emph{Example}: +See @code{GETPID} for an example. + +@item @emph{See also}: +@ref{GETPID}, @ref{GETLOG} +@end table + + + +@node GMTIME +@section @code{GMTIME} --- Convert time to GMT info +@fnindex GMTIME +@cindex time, conversion to GMT info + +@table @asis +@item @emph{Description}: +Given a system time value @var{TIME} (as provided by the @code{TIME8()} +intrinsic), fills @var{VALUES} with values extracted from it appropriate +to the UTC time zone (Universal Coordinated Time, also known in some +countries as GMT, Greenwich Mean Time), using @code{gmtime(3)}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL GMTIME(TIME, VALUES)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{TIME} @tab An @code{INTEGER} scalar expression +corresponding to a system time, with @code{INTENT(IN)}. +@item @var{VALUES} @tab A default @code{INTEGER} array with 9 elements, +with @code{INTENT(OUT)}. +@end multitable + +@item @emph{Return value}: +The elements of @var{VALUES} are assigned as follows: +@enumerate +@item Seconds after the minute, range 0--59 or 0--61 to allow for leap +seconds +@item Minutes after the hour, range 0--59 +@item Hours past midnight, range 0--23 +@item Day of month, range 0--31 +@item Number of months since January, range 0--12 +@item Years since 1900 +@item Number of days since Sunday, range 0--6 +@item Days since January 1 +@item Daylight savings indicator: positive if daylight savings is in +effect, zero if not, and negative if the information is not available. +@end enumerate + +@item @emph{See also}: +@ref{CTIME}, @ref{LTIME}, @ref{TIME}, @ref{TIME8} + +@end table + + + +@node HOSTNM +@section @code{HOSTNM} --- Get system host name +@fnindex HOSTNM +@cindex system, host name + +@table @asis +@item @emph{Description}: +Retrieves the host name of the system on which the program is running. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL HOSTNM(C [, STATUS])} +@item @code{STATUS = HOSTNM(NAME)} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{C} @tab Shall of type @code{CHARACTER} and of default kind. +@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}. +Returns 0 on success, or a system specific error code otherwise. +@end multitable + +@item @emph{Return value}: +In either syntax, @var{NAME} is set to the current hostname if it can +be obtained, or to a blank string otherwise. + +@end table + + + +@node HUGE +@section @code{HUGE} --- Largest number of a kind +@fnindex HUGE +@cindex limits, largest number +@cindex model representation, largest number + +@table @asis +@item @emph{Description}: +@code{HUGE(X)} returns the largest number that is not an infinity in +the model of the type of @code{X}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = HUGE(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Shall be of type @code{REAL} or @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return value is of the same type and kind as @var{X} + +@item @emph{Example}: +@smallexample +program test_huge_tiny + print *, huge(0), huge(0.0), huge(0.0d0) + print *, tiny(0.0), tiny(0.0d0) +end program test_huge_tiny +@end smallexample +@end table + + + +@node HYPOT +@section @code{HYPOT} --- Euclidean distance function +@fnindex HYPOT +@cindex Euclidean distance + +@table @asis +@item @emph{Description}: +@code{HYPOT(X,Y)} is the Euclidean distance function. It is equal to +@math{\sqrt{X^2 + Y^2}}, without undue underflow or overflow. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = HYPOT(X, Y)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}. +@item @var{Y} @tab The type and kind type parameter shall be the same as +@var{X}. +@end multitable + +@item @emph{Return value}: +The return value has the same type and kind type parameter as @var{X}. + +@item @emph{Example}: +@smallexample +program test_hypot + real(4) :: x = 1.e0_4, y = 0.5e0_4 + x = hypot(x,y) +end program test_hypot +@end smallexample +@end table + + + +@node IACHAR +@section @code{IACHAR} --- Code in @acronym{ASCII} collating sequence +@fnindex IACHAR +@cindex @acronym{ASCII} collating sequence +@cindex collating sequence, @acronym{ASCII} +@cindex conversion, to integer + +@table @asis +@item @emph{Description}: +@code{IACHAR(C)} returns the code for the @acronym{ASCII} character +in the first character position of @code{C}. + +@item @emph{Standard}: +Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = IACHAR(C [, KIND])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{C} @tab Shall be a scalar @code{CHARACTER}, with @code{INTENT(IN)} +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of kind @var{KIND}. If +@var{KIND} is absent, the return value is of default integer kind. + +@item @emph{Example}: +@smallexample +program test_iachar + integer i + i = iachar(' ') +end program test_iachar +@end smallexample + +@item @emph{Note}: +See @ref{ICHAR} for a discussion of converting between numerical values +and formatted string representations. + +@item @emph{See also}: +@ref{ACHAR}, @ref{CHAR}, @ref{ICHAR} + +@end table + + + +@node IAND +@section @code{IAND} --- Bitwise logical and +@fnindex IAND +@cindex bitwise logical and +@cindex logical and, bitwise + +@table @asis +@item @emph{Description}: +Bitwise logical @code{AND}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = IAND(I, J)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be @code{INTEGER}. +@item @var{J} @tab The type shall be @code{INTEGER}, of the same +kind as @var{I}. (As a GNU extension, different kinds are also +permitted.) +@end multitable + +@item @emph{Return value}: +The return type is @code{INTEGER}, of the same kind as the +arguments. (If the argument kinds differ, it is of the same kind as +the larger argument.) + +@item @emph{Example}: +@smallexample +PROGRAM test_iand + INTEGER :: a, b + DATA a / Z'F' /, b / Z'3' / + WRITE (*,*) IAND(a, b) +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{IOR}, @ref{IEOR}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT} + +@end table + + + +@node IARGC +@section @code{IARGC} --- Get the number of command line arguments +@fnindex IARGC +@cindex command-line arguments +@cindex command-line arguments, number of +@cindex arguments, to program + +@table @asis +@item @emph{Description}: +@code{IARGC()} returns the number of arguments passed on the +command line when the containing program was invoked. + +This intrinsic routine is provided for backwards compatibility with +GNU Fortran 77. In new code, programmers should consider the use of +the @ref{COMMAND_ARGUMENT_COUNT} intrinsic defined by the Fortran 2003 +standard. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = IARGC()} + +@item @emph{Arguments}: +None. + +@item @emph{Return value}: +The number of command line arguments, type @code{INTEGER(4)}. + +@item @emph{Example}: +See @ref{GETARG} + +@item @emph{See also}: +GNU Fortran 77 compatibility subroutine: @ref{GETARG} + +Fortran 2003 functions and subroutines: @ref{GET_COMMAND}, +@ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT} +@end table + + + +@node IBCLR +@section @code{IBCLR} --- Clear bit +@fnindex IBCLR +@cindex bits, unset +@cindex bits, clear + +@table @asis +@item @emph{Description}: +@code{IBCLR} returns the value of @var{I} with the bit at position +@var{POS} set to zero. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = IBCLR(I, POS)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be @code{INTEGER}. +@item @var{POS} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of the same kind as +@var{I}. + +@item @emph{See also}: +@ref{IBITS}, @ref{IBSET}, @ref{IAND}, @ref{IOR}, @ref{IEOR}, @ref{MVBITS} + +@end table + + + +@node IBITS +@section @code{IBITS} --- Bit extraction +@fnindex IBITS +@cindex bits, get +@cindex bits, extract + +@table @asis +@item @emph{Description}: +@code{IBITS} extracts a field of length @var{LEN} from @var{I}, +starting from bit position @var{POS} and extending left for @var{LEN} +bits. The result is right-justified and the remaining bits are +zeroed. The value of @code{POS+LEN} must be less than or equal to the +value @code{BIT_SIZE(I)}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = IBITS(I, POS, LEN)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be @code{INTEGER}. +@item @var{POS} @tab The type shall be @code{INTEGER}. +@item @var{LEN} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of the same kind as +@var{I}. + +@item @emph{See also}: +@ref{BIT_SIZE}, @ref{IBCLR}, @ref{IBSET}, @ref{IAND}, @ref{IOR}, @ref{IEOR} +@end table + + + +@node IBSET +@section @code{IBSET} --- Set bit +@fnindex IBSET +@cindex bits, set + +@table @asis +@item @emph{Description}: +@code{IBSET} returns the value of @var{I} with the bit at position +@var{POS} set to one. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = IBSET(I, POS)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be @code{INTEGER}. +@item @var{POS} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of the same kind as +@var{I}. + +@item @emph{See also}: +@ref{IBCLR}, @ref{IBITS}, @ref{IAND}, @ref{IOR}, @ref{IEOR}, @ref{MVBITS} + +@end table + + + +@node ICHAR +@section @code{ICHAR} --- Character-to-integer conversion function +@fnindex ICHAR +@cindex conversion, to integer + +@table @asis +@item @emph{Description}: +@code{ICHAR(C)} returns the code for the character in the first character +position of @code{C} in the system's native character set. +The correspondence between characters and their codes is not necessarily +the same across different GNU Fortran implementations. + +@item @emph{Standard}: +Fortan 95 and later, with @var{KIND} argument Fortran 2003 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ICHAR(C [, KIND])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{C} @tab Shall be a scalar @code{CHARACTER}, with @code{INTENT(IN)} +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of kind @var{KIND}. If +@var{KIND} is absent, the return value is of default integer kind. + +@item @emph{Example}: +@smallexample +program test_ichar + integer i + i = ichar(' ') +end program test_ichar +@end smallexample + +@item @emph{Note}: +No intrinsic exists to convert between a numeric value and a formatted +character string representation -- for instance, given the +@code{CHARACTER} value @code{'154'}, obtaining an @code{INTEGER} or +@code{REAL} value with the value 154, or vice versa. Instead, this +functionality is provided by internal-file I/O, as in the following +example: +@smallexample +program read_val + integer value + character(len=10) string, string2 + string = '154' + + ! Convert a string to a numeric value + read (string,'(I10)') value + print *, value + + ! Convert a value to a formatted string + write (string2,'(I10)') value + print *, string2 +end program read_val +@end smallexample + +@item @emph{See also}: +@ref{ACHAR}, @ref{CHAR}, @ref{IACHAR} + +@end table + + + +@node IDATE +@section @code{IDATE} --- Get current local time subroutine (day/month/year) +@fnindex IDATE +@cindex date, current +@cindex current date + +@table @asis +@item @emph{Description}: +@code{IDATE(TARRAY)} Fills @var{TARRAY} with the numerical values at the +current local time. The day (in the range 1-31), month (in the range 1-12), +and year appear in elements 1, 2, and 3 of @var{TARRAY}, respectively. +The year has four significant digits. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL IDATE(VALUES)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(3)} and +the kind shall be the default integer kind. +@end multitable + +@item @emph{Return value}: +Does not return anything. + +@item @emph{Example}: +@smallexample +program test_idate + integer, dimension(3) :: tarray + call idate(tarray) + print *, tarray(1) + print *, tarray(2) + print *, tarray(3) +end program test_idate +@end smallexample +@end table + + + +@node IEOR +@section @code{IEOR} --- Bitwise logical exclusive or +@fnindex IEOR +@cindex bitwise logical exclusive or +@cindex logical exclusive or, bitwise + +@table @asis +@item @emph{Description}: +@code{IEOR} returns the bitwise boolean exclusive-OR of @var{I} and +@var{J}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = IEOR(I, J)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be @code{INTEGER}. +@item @var{J} @tab The type shall be @code{INTEGER}, of the same +kind as @var{I}. (As a GNU extension, different kinds are also +permitted.) +@end multitable + +@item @emph{Return value}: +The return type is @code{INTEGER}, of the same kind as the +arguments. (If the argument kinds differ, it is of the same kind as +the larger argument.) + +@item @emph{See also}: +@ref{IOR}, @ref{IAND}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT} +@end table + + + +@node IERRNO +@section @code{IERRNO} --- Get the last system error number +@fnindex IERRNO +@cindex system, error handling + +@table @asis +@item @emph{Description}: +Returns the last system error number, as given by the C @code{errno()} +function. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = IERRNO()} + +@item @emph{Arguments}: +None. + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of the default integer +kind. + +@item @emph{See also}: +@ref{PERROR} +@end table + + + +@node INDEX intrinsic +@section @code{INDEX} --- Position of a substring within a string +@fnindex INDEX +@cindex substring position +@cindex string, find substring + +@table @asis +@item @emph{Description}: +Returns the position of the start of the first occurrence of string +@var{SUBSTRING} as a substring in @var{STRING}, counting from one. If +@var{SUBSTRING} is not present in @var{STRING}, zero is returned. If +the @var{BACK} argument is present and true, the return value is the +start of the last occurrence rather than the first. + +@item @emph{Standard}: +Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = INDEX(STRING, SUBSTRING [, BACK [, KIND]])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STRING} @tab Shall be a scalar @code{CHARACTER}, with +@code{INTENT(IN)} +@item @var{SUBSTRING} @tab Shall be a scalar @code{CHARACTER}, with +@code{INTENT(IN)} +@item @var{BACK} @tab (Optional) Shall be a scalar @code{LOGICAL}, with +@code{INTENT(IN)} +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of kind @var{KIND}. If +@var{KIND} is absent, the return value is of default integer kind. + +@item @emph{See also}: +@ref{SCAN}, @ref{VERIFY} +@end table + + + +@node INT +@section @code{INT} --- Convert to integer type +@fnindex INT +@fnindex IFIX +@fnindex IDINT +@cindex conversion, to integer + +@table @asis +@item @emph{Description}: +Convert to integer type + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = INT(A [, KIND))} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab Shall be of type @code{INTEGER}, +@code{REAL}, or @code{COMPLEX}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +These functions return a @code{INTEGER} variable or array under +the following rules: + +@table @asis +@item (A) +If @var{A} is of type @code{INTEGER}, @code{INT(A) = A} +@item (B) +If @var{A} is of type @code{REAL} and @math{|A| < 1}, @code{INT(A)} equals @code{0}. +If @math{|A| \geq 1}, then @code{INT(A)} equals the largest integer that does not exceed +the range of @var{A} and whose sign is the same as the sign of @var{A}. +@item (C) +If @var{A} is of type @code{COMPLEX}, rule B is applied to the real part of @var{A}. +@end table + +@item @emph{Example}: +@smallexample +program test_int + integer :: i = 42 + complex :: z = (-3.7, 1.0) + print *, int(i) + print *, int(z), int(z,8) +end program +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{IFIX(A)} @tab @code{REAL(4) A} @tab @code{INTEGER} @tab Fortran 77 and later +@item @code{IDINT(A)} @tab @code{REAL(8) A} @tab @code{INTEGER} @tab Fortran 77 and later +@end multitable + +@end table + + + +@node INT2 +@section @code{INT2} --- Convert to 16-bit integer type +@fnindex INT2 +@fnindex SHORT +@cindex conversion, to integer + +@table @asis +@item @emph{Description}: +Convert to a @code{KIND=2} integer type. This is equivalent to the +standard @code{INT} intrinsic with an optional argument of +@code{KIND=2}, and is only included for backwards compatibility. + +The @code{SHORT} intrinsic is equivalent to @code{INT2}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = INT2(A)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab Shall be of type @code{INTEGER}, +@code{REAL}, or @code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value is a @code{INTEGER(2)} variable. + +@item @emph{See also}: +@ref{INT}, @ref{INT8}, @ref{LONG} +@end table + + + +@node INT8 +@section @code{INT8} --- Convert to 64-bit integer type +@fnindex INT8 +@cindex conversion, to integer + +@table @asis +@item @emph{Description}: +Convert to a @code{KIND=8} integer type. This is equivalent to the +standard @code{INT} intrinsic with an optional argument of +@code{KIND=8}, and is only included for backwards compatibility. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = INT8(A)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab Shall be of type @code{INTEGER}, +@code{REAL}, or @code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value is a @code{INTEGER(8)} variable. + +@item @emph{See also}: +@ref{INT}, @ref{INT2}, @ref{LONG} +@end table + + + +@node IOR +@section @code{IOR} --- Bitwise logical or +@fnindex IOR +@cindex bitwise logical or +@cindex logical or, bitwise + +@table @asis +@item @emph{Description}: +@code{IOR} returns the bitwise boolean inclusive-OR of @var{I} and +@var{J}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = IOR(I, J)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be @code{INTEGER}. +@item @var{J} @tab The type shall be @code{INTEGER}, of the same +kind as @var{I}. (As a GNU extension, different kinds are also +permitted.) +@end multitable + +@item @emph{Return value}: +The return type is @code{INTEGER}, of the same kind as the +arguments. (If the argument kinds differ, it is of the same kind as +the larger argument.) + +@item @emph{See also}: +@ref{IEOR}, @ref{IAND}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT} +@end table + + + +@node IRAND +@section @code{IRAND} --- Integer pseudo-random number +@fnindex IRAND +@cindex random number generation + +@table @asis +@item @emph{Description}: +@code{IRAND(FLAG)} returns a pseudo-random number from a uniform +distribution between 0 and a system-dependent limit (which is in most +cases 2147483647). If @var{FLAG} is 0, the next number +in the current sequence is returned; if @var{FLAG} is 1, the generator +is restarted by @code{CALL SRAND(0)}; if @var{FLAG} has any other value, +it is used as a new seed with @code{SRAND}. + +This intrinsic routine is provided for backwards compatibility with +GNU Fortran 77. It implements a simple modulo generator as provided +by @command{g77}. For new code, one should consider the use of +@ref{RANDOM_NUMBER} as it implements a superior algorithm. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = IRAND(I)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab Shall be a scalar @code{INTEGER} of kind 4. +@end multitable + +@item @emph{Return value}: +The return value is of @code{INTEGER(kind=4)} type. + +@item @emph{Example}: +@smallexample +program test_irand + integer,parameter :: seed = 86456 + + call srand(seed) + print *, irand(), irand(), irand(), irand() + print *, irand(seed), irand(), irand(), irand() +end program test_irand +@end smallexample + +@end table + + + +@node IS_IOSTAT_END +@section @code{IS_IOSTAT_END} --- Test for end-of-file value +@fnindex IS_IOSTAT_END +@cindex IOSTAT, end of file + +@table @asis +@item @emph{Description}: +@code{IS_IOSTAT_END} tests whether an variable has the value of the I/O +status ``end of file''. The function is equivalent to comparing the variable +with the @code{IOSTAT_END} parameter of the intrinsic module +@code{ISO_FORTRAN_ENV}. + +@item @emph{Standard}: +Fortran 2003 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = IS_IOSTAT_END(I)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab Shall be of the type @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +Returns a @code{LOGICAL} of the default kind, which @code{.TRUE.} if +@var{I} has the value which indicates an end of file condition for +IOSTAT= specifiers, and is @code{.FALSE.} otherwise. + +@item @emph{Example}: +@smallexample +PROGRAM iostat + IMPLICIT NONE + INTEGER :: stat, i + OPEN(88, FILE='test.dat') + READ(88, *, IOSTAT=stat) i + IF(IS_IOSTAT_END(stat)) STOP 'END OF FILE' +END PROGRAM +@end smallexample +@end table + + + +@node IS_IOSTAT_EOR +@section @code{IS_IOSTAT_EOR} --- Test for end-of-record value +@fnindex IS_IOSTAT_EOR +@cindex IOSTAT, end of record + +@table @asis +@item @emph{Description}: +@code{IS_IOSTAT_EOR} tests whether an variable has the value of the I/O +status ``end of record''. The function is equivalent to comparing the +variable with the @code{IOSTAT_EOR} parameter of the intrinsic module +@code{ISO_FORTRAN_ENV}. + +@item @emph{Standard}: +Fortran 2003 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = IS_IOSTAT_EOR(I)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab Shall be of the type @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +Returns a @code{LOGICAL} of the default kind, which @code{.TRUE.} if +@var{I} has the value which indicates an end of file condition for +IOSTAT= specifiers, and is @code{.FALSE.} otherwise. + +@item @emph{Example}: +@smallexample +PROGRAM iostat + IMPLICIT NONE + INTEGER :: stat, i(50) + OPEN(88, FILE='test.dat', FORM='UNFORMATTED') + READ(88, IOSTAT=stat) i + IF(IS_IOSTAT_EOR(stat)) STOP 'END OF RECORD' +END PROGRAM +@end smallexample +@end table + + + +@node ISATTY +@section @code{ISATTY} --- Whether a unit is a terminal device. +@fnindex ISATTY +@cindex system, terminal + +@table @asis +@item @emph{Description}: +Determine whether a unit is connected to a terminal device. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = ISATTY(UNIT)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{UNIT} @tab Shall be a scalar @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +Returns @code{.TRUE.} if the @var{UNIT} is connected to a terminal +device, @code{.FALSE.} otherwise. + +@item @emph{Example}: +@smallexample +PROGRAM test_isatty + INTEGER(kind=1) :: unit + DO unit = 1, 10 + write(*,*) isatty(unit=unit) + END DO +END PROGRAM +@end smallexample +@item @emph{See also}: +@ref{TTYNAM} +@end table + + + +@node ISHFT +@section @code{ISHFT} --- Shift bits +@fnindex ISHFT +@cindex bits, shift + +@table @asis +@item @emph{Description}: +@code{ISHFT} returns a value corresponding to @var{I} with all of the +bits shifted @var{SHIFT} places. A value of @var{SHIFT} greater than +zero corresponds to a left shift, a value of zero corresponds to no +shift, and a value less than zero corresponds to a right shift. If the +absolute value of @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the +value is undefined. Bits shifted out from the left end or right end are +lost; zeros are shifted in from the opposite end. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ISHFT(I, SHIFT)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be @code{INTEGER}. +@item @var{SHIFT} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of the same kind as +@var{I}. + +@item @emph{See also}: +@ref{ISHFTC} +@end table + + + +@node ISHFTC +@section @code{ISHFTC} --- Shift bits circularly +@fnindex ISHFTC +@cindex bits, shift circular + +@table @asis +@item @emph{Description}: +@code{ISHFTC} returns a value corresponding to @var{I} with the +rightmost @var{SIZE} bits shifted circularly @var{SHIFT} places; that +is, bits shifted out one end are shifted into the opposite end. A value +of @var{SHIFT} greater than zero corresponds to a left shift, a value of +zero corresponds to no shift, and a value less than zero corresponds to +a right shift. The absolute value of @var{SHIFT} must be less than +@var{SIZE}. If the @var{SIZE} argument is omitted, it is taken to be +equivalent to @code{BIT_SIZE(I)}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = ISHFTC(I, SHIFT [, SIZE])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be @code{INTEGER}. +@item @var{SHIFT} @tab The type shall be @code{INTEGER}. +@item @var{SIZE} @tab (Optional) The type shall be @code{INTEGER}; +the value must be greater than zero and less than or equal to +@code{BIT_SIZE(I)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of the same kind as +@var{I}. + +@item @emph{See also}: +@ref{ISHFT} +@end table + + + +@node ISNAN +@section @code{ISNAN} --- Test for a NaN +@fnindex ISNAN +@cindex IEEE, ISNAN + +@table @asis +@item @emph{Description}: +@code{ISNAN} tests whether a floating-point value is an IEEE +Not-a-Number (NaN). +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{ISNAN(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Variable of the type @code{REAL}. + +@end multitable + +@item @emph{Return value}: +Returns a default-kind @code{LOGICAL}. The returned value is @code{TRUE} +if @var{X} is a NaN and @code{FALSE} otherwise. + +@item @emph{Example}: +@smallexample +program test_nan + implicit none + real :: x + x = -1.0 + x = sqrt(x) + if (isnan(x)) stop '"x" is a NaN' +end program test_nan +@end smallexample +@end table + + + +@node ITIME +@section @code{ITIME} --- Get current local time subroutine (hour/minutes/seconds) +@fnindex ITIME +@cindex time, current +@cindex current time + +@table @asis +@item @emph{Description}: +@code{IDATE(VALUES)} Fills @var{VALUES} with the numerical values at the +current local time. The hour (in the range 1-24), minute (in the range 1-60), +and seconds (in the range 1-60) appear in elements 1, 2, and 3 of @var{VALUES}, +respectively. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL ITIME(VALUES)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(3)} +and the kind shall be the default integer kind. +@end multitable + +@item @emph{Return value}: +Does not return anything. + + +@item @emph{Example}: +@smallexample +program test_itime + integer, dimension(3) :: tarray + call itime(tarray) + print *, tarray(1) + print *, tarray(2) + print *, tarray(3) +end program test_itime +@end smallexample +@end table + + + +@node KILL +@section @code{KILL} --- Send a signal to a process +@fnindex KILL + +@table @asis +@item @emph{Description}: +@item @emph{Standard}: +Sends the signal specified by @var{SIGNAL} to the process @var{PID}. +See @code{kill(2)}. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@code{CALL KILL(C, VALUE [, STATUS])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{C} @tab Shall be a scalar @code{INTEGER}, with +@code{INTENT(IN)} +@item @var{VALUE} @tab Shall be a scalar @code{INTEGER}, with +@code{INTENT(IN)} +@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)} or +@code{INTEGER(8)}. Returns 0 on success, or a system-specific error code +otherwise. +@end multitable + +@item @emph{See also}: +@ref{ABORT}, @ref{EXIT} +@end table + + + +@node KIND +@section @code{KIND} --- Kind of an entity +@fnindex KIND +@cindex kind + +@table @asis +@item @emph{Description}: +@code{KIND(X)} returns the kind value of the entity @var{X}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{K = KIND(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Shall be of type @code{LOGICAL}, @code{INTEGER}, +@code{REAL}, @code{COMPLEX} or @code{CHARACTER}. +@end multitable + +@item @emph{Return value}: +The return value is a scalar of type @code{INTEGER} and of the default +integer kind. + +@item @emph{Example}: +@smallexample +program test_kind + integer,parameter :: kc = kind(' ') + integer,parameter :: kl = kind(.true.) + + print *, "The default character kind is ", kc + print *, "The default logical kind is ", kl +end program test_kind +@end smallexample + +@end table + + + +@node LBOUND +@section @code{LBOUND} --- Lower dimension bounds of an array +@fnindex LBOUND +@cindex array, lower bound + +@table @asis +@item @emph{Description}: +Returns the lower bounds of an array, or a single lower bound +along the @var{DIM} dimension. +@item @emph{Standard}: +Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = LBOUND(ARRAY [, DIM [, KIND]])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{ARRAY} @tab Shall be an array, of any type. +@item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of kind @var{KIND}. If +@var{KIND} is absent, the return value is of default integer kind. +If @var{DIM} is absent, the result is an array of the lower bounds of +@var{ARRAY}. If @var{DIM} is present, the result is a scalar +corresponding to the lower bound of the array along that dimension. If +@var{ARRAY} is an expression rather than a whole array or array +structure component, or if it has a zero extent along the relevant +dimension, the lower bound is taken to be 1. + +@item @emph{See also}: +@ref{UBOUND} +@end table + + + +@node LEADZ +@section @code{LEADZ} --- Number of leading zero bits of an integer +@fnindex LEADZ +@cindex zero bits + +@table @asis +@item @emph{Description}: +@code{LEADZ} returns the number of leading zero bits of an integer. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = LEADZ(I)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab Shall be of type @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The type of the return value is the default @code{INTEGER}. +If all the bits of @code{I} are zero, the result value is @code{BIT_SIZE(I)}. + +@item @emph{Example}: +@smallexample +PROGRAM test_leadz + WRITE (*,*) LEADZ(1) ! prints 8 if BITSIZE(I) has the value 32 +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{BIT_SIZE}, @ref{TRAILZ} +@end table + + + +@node LEN +@section @code{LEN} --- Length of a character entity +@fnindex LEN +@cindex string, length + +@table @asis +@item @emph{Description}: +Returns the length of a character string. If @var{STRING} is an array, +the length of an element of @var{STRING} is returned. Note that +@var{STRING} need not be defined when this intrinsic is invoked, since +only the length, not the content, of @var{STRING} is needed. + +@item @emph{Standard}: +Fortran 77 and later, with @var{KIND} argument Fortran 2003 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{L = LEN(STRING [, KIND])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STRING} @tab Shall be a scalar or array of type +@code{CHARACTER}, with @code{INTENT(IN)} +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of kind @var{KIND}. If +@var{KIND} is absent, the return value is of default integer kind. + +@item @emph{See also}: +@ref{LEN_TRIM}, @ref{ADJUSTL}, @ref{ADJUSTR} +@end table + + + +@node LEN_TRIM +@section @code{LEN_TRIM} --- Length of a character entity without trailing blank characters +@fnindex LEN_TRIM +@cindex string, length, without trailing whitespace + +@table @asis +@item @emph{Description}: +Returns the length of a character string, ignoring any trailing blanks. + +@item @emph{Standard}: +Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = LEN_TRIM(STRING [, KIND])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER}, +with @code{INTENT(IN)} +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of kind @var{KIND}. If +@var{KIND} is absent, the return value is of default integer kind. + +@item @emph{See also}: +@ref{LEN}, @ref{ADJUSTL}, @ref{ADJUSTR} +@end table + + + +@node LGE +@section @code{LGE} --- Lexical greater than or equal +@fnindex LGE +@cindex lexical comparison of strings +@cindex string, comparison + +@table @asis +@item @emph{Description}: +Determines whether one string is lexically greater than or equal to +another string, where the two strings are interpreted as containing +ASCII character codes. If the String A and String B are not the same +length, the shorter is compared as if spaces were appended to it to form +a value that has the same length as the longer. + +In general, the lexical comparison intrinsics @code{LGE}, @code{LGT}, +@code{LLE}, and @code{LLT} differ from the corresponding intrinsic +operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in +that the latter use the processor's character ordering (which is not +ASCII on some targets), whereas the former always use the ASCII +ordering. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = LGE(STRING_A, STRING_B)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type. +@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type. +@end multitable + +@item @emph{Return value}: +Returns @code{.TRUE.} if @code{STRING_A >= STRING_B}, and @code{.FALSE.} +otherwise, based on the ASCII ordering. + +@item @emph{See also}: +@ref{LGT}, @ref{LLE}, @ref{LLT} +@end table + + + +@node LGT +@section @code{LGT} --- Lexical greater than +@fnindex LGT +@cindex lexical comparison of strings +@cindex string, comparison + +@table @asis +@item @emph{Description}: +Determines whether one string is lexically greater than another string, +where the two strings are interpreted as containing ASCII character +codes. If the String A and String B are not the same length, the +shorter is compared as if spaces were appended to it to form a value +that has the same length as the longer. + +In general, the lexical comparison intrinsics @code{LGE}, @code{LGT}, +@code{LLE}, and @code{LLT} differ from the corresponding intrinsic +operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in +that the latter use the processor's character ordering (which is not +ASCII on some targets), whereas the former always use the ASCII +ordering. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = LGT(STRING_A, STRING_B)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type. +@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type. +@end multitable + +@item @emph{Return value}: +Returns @code{.TRUE.} if @code{STRING_A > STRING_B}, and @code{.FALSE.} +otherwise, based on the ASCII ordering. + +@item @emph{See also}: +@ref{LGE}, @ref{LLE}, @ref{LLT} +@end table + + + +@node LINK +@section @code{LINK} --- Create a hard link +@fnindex LINK +@cindex file system, create link +@cindex file system, hard link + +@table @asis +@item @emph{Description}: +Makes a (hard) link from file @var{PATH1} to @var{PATH2}. A null +character (@code{CHAR(0)}) can be used to mark the end of the names in +@var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file +names are ignored. If the @var{STATUS} argument is supplied, it +contains 0 on success or a nonzero error code upon return; see +@code{link(2)}. + +This intrinsic is provided in both subroutine and function forms; +however, only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL LINK(PATH1, PATH2 [, STATUS])} +@item @code{STATUS = LINK(PATH1, PATH2)} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{PATH1} @tab Shall be of default @code{CHARACTER} type. +@item @var{PATH2} @tab Shall be of default @code{CHARACTER} type. +@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type. +@end multitable + +@item @emph{See also}: +@ref{SYMLNK}, @ref{UNLINK} +@end table + + + +@node LLE +@section @code{LLE} --- Lexical less than or equal +@fnindex LLE +@cindex lexical comparison of strings +@cindex string, comparison + +@table @asis +@item @emph{Description}: +Determines whether one string is lexically less than or equal to another +string, where the two strings are interpreted as containing ASCII +character codes. If the String A and String B are not the same length, +the shorter is compared as if spaces were appended to it to form a value +that has the same length as the longer. + +In general, the lexical comparison intrinsics @code{LGE}, @code{LGT}, +@code{LLE}, and @code{LLT} differ from the corresponding intrinsic +operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in +that the latter use the processor's character ordering (which is not +ASCII on some targets), whereas the former always use the ASCII +ordering. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = LLE(STRING_A, STRING_B)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type. +@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type. +@end multitable + +@item @emph{Return value}: +Returns @code{.TRUE.} if @code{STRING_A <= STRING_B}, and @code{.FALSE.} +otherwise, based on the ASCII ordering. + +@item @emph{See also}: +@ref{LGE}, @ref{LGT}, @ref{LLT} +@end table + + + +@node LLT +@section @code{LLT} --- Lexical less than +@fnindex LLT +@cindex lexical comparison of strings +@cindex string, comparison + +@table @asis +@item @emph{Description}: +Determines whether one string is lexically less than another string, +where the two strings are interpreted as containing ASCII character +codes. If the String A and String B are not the same length, the +shorter is compared as if spaces were appended to it to form a value +that has the same length as the longer. + +In general, the lexical comparison intrinsics @code{LGE}, @code{LGT}, +@code{LLE}, and @code{LLT} differ from the corresponding intrinsic +operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in +that the latter use the processor's character ordering (which is not +ASCII on some targets), whereas the former always use the ASCII +ordering. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = LLT(STRING_A, STRING_B)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type. +@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type. +@end multitable + +@item @emph{Return value}: +Returns @code{.TRUE.} if @code{STRING_A < STRING_B}, and @code{.FALSE.} +otherwise, based on the ASCII ordering. + +@item @emph{See also}: +@ref{LGE}, @ref{LGT}, @ref{LLE} +@end table + + + +@node LNBLNK +@section @code{LNBLNK} --- Index of the last non-blank character in a string +@fnindex LNBLNK +@cindex string, find non-blank character + +@table @asis +@item @emph{Description}: +Returns the length of a character string, ignoring any trailing blanks. +This is identical to the standard @code{LEN_TRIM} intrinsic, and is only +included for backwards compatibility. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = LNBLNK(STRING)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER}, +with @code{INTENT(IN)} +@end multitable + +@item @emph{Return value}: +The return value is of @code{INTEGER(kind=4)} type. + +@item @emph{See also}: +@ref{INDEX intrinsic}, @ref{LEN_TRIM} +@end table + + + +@node LOC +@section @code{LOC} --- Returns the address of a variable +@fnindex LOC +@cindex location of a variable in memory + +@table @asis +@item @emph{Description}: +@code{LOC(X)} returns the address of @var{X} as an integer. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = LOC(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Variable of any type. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER}, with a @code{KIND} +corresponding to the size (in bytes) of a memory address on the target +machine. + +@item @emph{Example}: +@smallexample +program test_loc + integer :: i + real :: r + i = loc(r) + print *, i +end program test_loc +@end smallexample +@end table + + + +@node LOG +@section @code{LOG} --- Logarithm function +@fnindex LOG +@fnindex ALOG +@fnindex DLOG +@fnindex CLOG +@fnindex ZLOG +@fnindex CDLOG +@cindex exponential function, inverse +@cindex logarithmic function + +@table @asis +@item @emph{Description}: +@code{LOG(X)} computes the logarithm of @var{X}. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = LOG(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL} or +@code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} or @code{COMPLEX}. +The kind type parameter is the same as @var{X}. +If @var{X} is @code{COMPLEX}, the imaginary part @math{\omega} is in the range +@math{-\pi \leq \omega \leq \pi}. + +@item @emph{Example}: +@smallexample +program test_log + real(8) :: x = 1.0_8 + complex :: z = (1.0, 2.0) + x = log(x) + z = log(z) +end program test_log +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{ALOG(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab f95, gnu +@item @code{DLOG(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@item @code{CLOG(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab f95, gnu +@item @code{ZLOG(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu +@item @code{CDLOG(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu +@end multitable +@end table + + + +@node LOG10 +@section @code{LOG10} --- Base 10 logarithm function +@fnindex LOG10 +@fnindex ALOG10 +@fnindex DLOG10 +@cindex exponential function, inverse +@cindex logarithmic function + +@table @asis +@item @emph{Description}: +@code{LOG10(X)} computes the base 10 logarithm of @var{X}. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = LOG10(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} or @code{COMPLEX}. +The kind type parameter is the same as @var{X}. + +@item @emph{Example}: +@smallexample +program test_log10 + real(8) :: x = 10.0_8 + x = log10(x) +end program test_log10 +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{ALOG10(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 95 and later +@item @code{DLOG10(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 95 and later +@end multitable +@end table + + + +@node LOG_GAMMA +@section @code{LOG_GAMMA} --- Logarithm of the Gamma function +@fnindex LOG_GAMMA +@fnindex LGAMMA +@fnindex ALGAMA +@fnindex DLGAMA +@cindex Gamma function, logarithm of + +@table @asis +@item @emph{Description}: +@code{LOG_GAMMA(X)} computes the natural logarithm of the absolute value +of the Gamma (@math{\Gamma}) function. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{X = LOG_GAMMA(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Shall be of type @code{REAL} and neither zero +nor a negative integer. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} of the same kind as @var{X}. + +@item @emph{Example}: +@smallexample +program test_log_gamma + real :: x = 1.0 + x = lgamma(x) ! returns 0.0 +end program test_log_gamma +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{LGAMMA(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab GNU Extension +@item @code{ALGAMA(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab GNU Extension +@item @code{DLGAMA(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab GNU Extension +@end multitable + +@item @emph{See also}: +Gamma function: @ref{GAMMA} + +@end table + + + +@node LOGICAL +@section @code{LOGICAL} --- Convert to logical type +@fnindex LOGICAL +@cindex conversion, to logical + +@table @asis +@item @emph{Description}: +Converts one kind of @code{LOGICAL} variable to another. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = LOGICAL(L [, KIND])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{L} @tab The type shall be @code{LOGICAL}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is a @code{LOGICAL} value equal to @var{L}, with a +kind corresponding to @var{KIND}, or of the default logical kind if +@var{KIND} is not given. + +@item @emph{See also}: +@ref{INT}, @ref{REAL}, @ref{CMPLX} +@end table + + + +@node LONG +@section @code{LONG} --- Convert to integer type +@fnindex LONG +@cindex conversion, to integer + +@table @asis +@item @emph{Description}: +Convert to a @code{KIND=4} integer type, which is the same size as a C +@code{long} integer. This is equivalent to the standard @code{INT} +intrinsic with an optional argument of @code{KIND=4}, and is only +included for backwards compatibility. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = LONG(A)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab Shall be of type @code{INTEGER}, +@code{REAL}, or @code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value is a @code{INTEGER(4)} variable. + +@item @emph{See also}: +@ref{INT}, @ref{INT2}, @ref{INT8} +@end table + + + +@node LSHIFT +@section @code{LSHIFT} --- Left shift bits +@fnindex LSHIFT +@cindex bits, shift left + +@table @asis +@item @emph{Description}: +@code{LSHIFT} returns a value corresponding to @var{I} with all of the +bits shifted left by @var{SHIFT} places. If the absolute value of +@var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined. +Bits shifted out from the left end are lost; zeros are shifted in from +the opposite end. + +This function has been superseded by the @code{ISHFT} intrinsic, which +is standard in Fortran 95 and later. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = LSHIFT(I, SHIFT)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be @code{INTEGER}. +@item @var{SHIFT} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of the same kind as +@var{I}. + +@item @emph{See also}: +@ref{ISHFT}, @ref{ISHFTC}, @ref{RSHIFT} + +@end table + + + +@node LSTAT +@section @code{LSTAT} --- Get file status +@fnindex LSTAT +@cindex file system, file status + +@table @asis +@item @emph{Description}: +@code{LSTAT} is identical to @ref{STAT}, except that if path is a symbolic link, +then the link itself is statted, not the file that it refers to. + +The elements in @code{BUFF} are the same as described by @ref{STAT}. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@code{CALL LSTAT(FILE, BUFF [, STATUS])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{FILE} @tab The type shall be @code{CHARACTER} of the default +kind, a valid path within the file system. +@item @var{BUFF} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}. +@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. +Returns 0 on success and a system specific error code otherwise. +@end multitable + +@item @emph{Example}: +See @ref{STAT} for an example. + +@item @emph{See also}: +To stat an open file: @ref{FSTAT}, to stat a file: @ref{STAT} +@end table + + + +@node LTIME +@section @code{LTIME} --- Convert time to local time info +@fnindex LTIME +@cindex time, conversion to local time info + +@table @asis +@item @emph{Description}: +Given a system time value @var{STIME} (as provided by the @code{TIME8()} +intrinsic), fills @var{TARRAY} with values extracted from it appropriate +to the local time zone using @code{localtime(3)}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL LTIME(STIME, TARRAY)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STIME} @tab An @code{INTEGER} scalar expression +corresponding to a system time, with @code{INTENT(IN)}. +@item @var{TARRAY} @tab A default @code{INTEGER} array with 9 elements, +with @code{INTENT(OUT)}. +@end multitable + +@item @emph{Return value}: +The elements of @var{TARRAY} are assigned as follows: +@enumerate +@item Seconds after the minute, range 0--59 or 0--61 to allow for leap +seconds +@item Minutes after the hour, range 0--59 +@item Hours past midnight, range 0--23 +@item Day of month, range 0--31 +@item Number of months since January, range 0--12 +@item Years since 1900 +@item Number of days since Sunday, range 0--6 +@item Days since January 1 +@item Daylight savings indicator: positive if daylight savings is in +effect, zero if not, and negative if the information is not available. +@end enumerate + +@item @emph{See also}: +@ref{CTIME}, @ref{GMTIME}, @ref{TIME}, @ref{TIME8} + +@end table + + + +@node MALLOC +@section @code{MALLOC} --- Allocate dynamic memory +@fnindex MALLOC +@cindex pointer, cray + +@table @asis +@item @emph{Description}: +@code{MALLOC(SIZE)} allocates @var{SIZE} bytes of dynamic memory and +returns the address of the allocated memory. The @code{MALLOC} intrinsic +is an extension intended to be used with Cray pointers, and is provided +in GNU Fortran to allow the user to compile legacy code. For new code +using Fortran 95 pointers, the memory allocation intrinsic is +@code{ALLOCATE}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{PTR = MALLOC(SIZE)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{SIZE} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER(K)}, with @var{K} such that +variables of type @code{INTEGER(K)} have the same size as +C pointers (@code{sizeof(void *)}). + +@item @emph{Example}: +The following example demonstrates the use of @code{MALLOC} and +@code{FREE} with Cray pointers. + +@smallexample +program test_malloc + implicit none + integer i + real*8 x(*), z + pointer(ptr_x,x) + + ptr_x = malloc(20*8) + do i = 1, 20 + x(i) = sqrt(1.0d0 / i) + end do + z = 0 + do i = 1, 20 + z = z + x(i) + print *, z + end do + call free(ptr_x) +end program test_malloc +@end smallexample + +@item @emph{See also}: +@ref{FREE} +@end table + + + +@node MATMUL +@section @code{MATMUL} --- matrix multiplication +@fnindex MATMUL +@cindex matrix multiplication +@cindex product, matrix + +@table @asis +@item @emph{Description}: +Performs a matrix multiplication on numeric or logical arguments. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = MATMUL(MATRIX_A, MATRIX_B)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{MATRIX_A} @tab An array of @code{INTEGER}, +@code{REAL}, @code{COMPLEX}, or @code{LOGICAL} type, with a rank of +one or two. +@item @var{MATRIX_B} @tab An array of @code{INTEGER}, +@code{REAL}, or @code{COMPLEX} type if @var{MATRIX_A} is of a numeric +type; otherwise, an array of @code{LOGICAL} type. The rank shall be one +or two, and the first (or only) dimension of @var{MATRIX_B} shall be +equal to the last (or only) dimension of @var{MATRIX_A}. +@end multitable + +@item @emph{Return value}: +The matrix product of @var{MATRIX_A} and @var{MATRIX_B}. The type and +kind of the result follow the usual type and kind promotion rules, as +for the @code{*} or @code{.AND.} operators. + +@item @emph{See also}: +@end table + + + +@node MAX +@section @code{MAX} --- Maximum value of an argument list +@fnindex MAX +@fnindex MAX0 +@fnindex AMAX0 +@fnindex MAX1 +@fnindex AMAX1 +@fnindex DMAX1 +@cindex maximum value + +@table @asis +@item @emph{Description}: +Returns the argument with the largest (most positive) value. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = MAX(A1, A2 [, A3 [, ...]])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A1} @tab The type shall be @code{INTEGER} or +@code{REAL}. +@item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind +as @var{A1}. (As a GNU extension, arguments of different kinds are +permitted.) +@end multitable + +@item @emph{Return value}: +The return value corresponds to the maximum value among the arguments, +and has the same type and kind as the first argument. + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{MAX0(I)} @tab @code{INTEGER(4) I} @tab @code{INTEGER(4)} @tab Fortran 77 and later +@item @code{AMAX0(I)} @tab @code{INTEGER(4) I} @tab @code{REAL(MAX(X))} @tab Fortran 77 and later +@item @code{MAX1(X)} @tab @code{REAL X} @tab @code{INT(MAX(X))} @tab Fortran 77 and later +@item @code{AMAX1(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 77 and later +@item @code{DMAX1(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later +@end multitable + +@item @emph{See also}: +@ref{MAXLOC} @ref{MAXVAL}, @ref{MIN} + +@end table + + + +@node MAXEXPONENT +@section @code{MAXEXPONENT} --- Maximum exponent of a real kind +@fnindex MAXEXPONENT +@cindex model representation, maximum exponent + +@table @asis +@item @emph{Description}: +@code{MAXEXPONENT(X)} returns the maximum exponent in the model of the +type of @code{X}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = MAXEXPONENT(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Shall be of type @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of the default integer +kind. + +@item @emph{Example}: +@smallexample +program exponents + real(kind=4) :: x + real(kind=8) :: y + + print *, minexponent(x), maxexponent(x) + print *, minexponent(y), maxexponent(y) +end program exponents +@end smallexample +@end table + + + +@node MAXLOC +@section @code{MAXLOC} --- Location of the maximum value within an array +@fnindex MAXLOC +@cindex array, location of maximum element + +@table @asis +@item @emph{Description}: +Determines the location of the element in the array with the maximum +value, or, if the @var{DIM} argument is supplied, determines the +locations of the maximum element along each row of the array in the +@var{DIM} direction. If @var{MASK} is present, only the elements for +which @var{MASK} is @code{.TRUE.} are considered. If more than one +element in the array has the maximum value, the location returned is +that of the first such element in array element order. If the array has +zero size, or all of the elements of @var{MASK} are @code{.FALSE.}, then +the result is an array of zeroes. Similarly, if @var{DIM} is supplied +and all of the elements of @var{MASK} along a given row are zero, the +result value for that row is zero. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{RESULT = MAXLOC(ARRAY, DIM [, MASK])} +@item @code{RESULT = MAXLOC(ARRAY [, MASK])} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}, +@code{REAL}, or @code{CHARACTER}. +@item @var{DIM} @tab (Optional) Shall be a scalar of type +@code{INTEGER}, with a value between one and the rank of @var{ARRAY}, +inclusive. It may not be an optional dummy argument. +@item @var{MASK} @tab Shall be an array of type @code{LOGICAL}, +and conformable with @var{ARRAY}. +@end multitable + +@item @emph{Return value}: +If @var{DIM} is absent, the result is a rank-one array with a length +equal to the rank of @var{ARRAY}. If @var{DIM} is present, the result +is an array with a rank one less than the rank of @var{ARRAY}, and a +size corresponding to the size of @var{ARRAY} with the @var{DIM} +dimension removed. If @var{DIM} is present and @var{ARRAY} has a rank +of one, the result is a scalar. In all cases, the result is of default +@code{INTEGER} type. + +@item @emph{See also}: +@ref{MAX}, @ref{MAXVAL} + +@end table + + + +@node MAXVAL +@section @code{MAXVAL} --- Maximum value of an array +@fnindex MAXVAL +@cindex array, maximum value +@cindex maximum value + +@table @asis +@item @emph{Description}: +Determines the maximum value of the elements in an array value, or, if +the @var{DIM} argument is supplied, determines the maximum value along +each row of the array in the @var{DIM} direction. If @var{MASK} is +present, only the elements for which @var{MASK} is @code{.TRUE.} are +considered. If the array has zero size, or all of the elements of +@var{MASK} are @code{.FALSE.}, then the result is @code{-HUGE(ARRAY)} +if @var{ARRAY} is numeric, or a string of nulls if @var{ARRAY} is of character +type. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{RESULT = MAXVAL(ARRAY, DIM [, MASK])} +@item @code{RESULT = MAXVAL(ARRAY [, MASK])} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}, +@code{REAL}, or @code{CHARACTER}. +@item @var{DIM} @tab (Optional) Shall be a scalar of type +@code{INTEGER}, with a value between one and the rank of @var{ARRAY}, +inclusive. It may not be an optional dummy argument. +@item @var{MASK} @tab Shall be an array of type @code{LOGICAL}, +and conformable with @var{ARRAY}. +@end multitable + +@item @emph{Return value}: +If @var{DIM} is absent, or if @var{ARRAY} has a rank of one, the result +is a scalar. If @var{DIM} is present, the result is an array with a +rank one less than the rank of @var{ARRAY}, and a size corresponding to +the size of @var{ARRAY} with the @var{DIM} dimension removed. In all +cases, the result is of the same type and kind as @var{ARRAY}. + +@item @emph{See also}: +@ref{MAX}, @ref{MAXLOC} +@end table + + + +@node MCLOCK +@section @code{MCLOCK} --- Time function +@fnindex MCLOCK +@cindex time, clock ticks +@cindex clock ticks + +@table @asis +@item @emph{Description}: +Returns the number of clock ticks since the start of the process, based +on the UNIX function @code{clock(3)}. + +This intrinsic is not fully portable, such as to systems with 32-bit +@code{INTEGER} types but supporting times wider than 32 bits. Therefore, +the values returned by this intrinsic might be, or become, negative, or +numerically less than previous values, during a single run of the +compiled program. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = MCLOCK()} + +@item @emph{Return value}: +The return value is a scalar of type @code{INTEGER(4)}, equal to the +number of clock ticks since the start of the process, or @code{-1} if +the system does not support @code{clock(3)}. + +@item @emph{See also}: +@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME} + +@end table + + + +@node MCLOCK8 +@section @code{MCLOCK8} --- Time function (64-bit) +@fnindex MCLOCK8 +@cindex time, clock ticks +@cindex clock ticks + +@table @asis +@item @emph{Description}: +Returns the number of clock ticks since the start of the process, based +on the UNIX function @code{clock(3)}. + +@emph{Warning:} this intrinsic does not increase the range of the timing +values over that returned by @code{clock(3)}. On a system with a 32-bit +@code{clock(3)}, @code{MCLOCK8()} will return a 32-bit value, even though +it is converted to a 64-bit @code{INTEGER(8)} value. That means +overflows of the 32-bit value can still occur. Therefore, the values +returned by this intrinsic might be or become negative or numerically +less than previous values during a single run of the compiled program. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = MCLOCK8()} + +@item @emph{Return value}: +The return value is a scalar of type @code{INTEGER(8)}, equal to the +number of clock ticks since the start of the process, or @code{-1} if +the system does not support @code{clock(3)}. + +@item @emph{See also}: +@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME8} + +@end table + + + +@node MERGE +@section @code{MERGE} --- Merge variables +@fnindex MERGE +@cindex array, merge arrays +@cindex array, combine arrays + +@table @asis +@item @emph{Description}: +Select values from two arrays according to a logical mask. The result +is equal to @var{TSOURCE} if @var{MASK} is @code{.TRUE.}, or equal to +@var{FSOURCE} if it is @code{.FALSE.}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = MERGE(TSOURCE, FSOURCE, MASK)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{TSOURCE} @tab May be of any type. +@item @var{FSOURCE} @tab Shall be of the same type and type parameters +as @var{TSOURCE}. +@item @var{MASK} @tab Shall be of type @code{LOGICAL}. +@end multitable + +@item @emph{Return value}: +The result is of the same type and type parameters as @var{TSOURCE}. + +@end table + + + +@node MIN +@section @code{MIN} --- Minimum value of an argument list +@fnindex MIN +@fnindex MIN0 +@fnindex AMIN0 +@fnindex MIN1 +@fnindex AMIN1 +@fnindex DMIN1 +@cindex minimum value + +@table @asis +@item @emph{Description}: +Returns the argument with the smallest (most negative) value. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = MIN(A1, A2 [, A3, ...])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A1} @tab The type shall be @code{INTEGER} or +@code{REAL}. +@item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind +as @var{A1}. (As a GNU extension, arguments of different kinds are +permitted.) +@end multitable + +@item @emph{Return value}: +The return value corresponds to the maximum value among the arguments, +and has the same type and kind as the first argument. + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{MIN0(I)} @tab @code{INTEGER(4) I} @tab @code{INTEGER(4)} @tab Fortran 77 and later +@item @code{AMIN0(I)} @tab @code{INTEGER(4) I} @tab @code{REAL(MIN(X))} @tab Fortran 77 and later +@item @code{MIN1(X)} @tab @code{REAL X} @tab @code{INT(MIN(X))} @tab Fortran 77 and later +@item @code{AMIN1(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab Fortran 77 and later +@item @code{DMIN1(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 77 and later +@end multitable + +@item @emph{See also}: +@ref{MAX}, @ref{MINLOC}, @ref{MINVAL} +@end table + + + +@node MINEXPONENT +@section @code{MINEXPONENT} --- Minimum exponent of a real kind +@fnindex MINEXPONENT +@cindex model representation, minimum exponent + +@table @asis +@item @emph{Description}: +@code{MINEXPONENT(X)} returns the minimum exponent in the model of the +type of @code{X}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = MINEXPONENT(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Shall be of type @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of the default integer +kind. + +@item @emph{Example}: +See @code{MAXEXPONENT} for an example. +@end table + + + +@node MINLOC +@section @code{MINLOC} --- Location of the minimum value within an array +@fnindex MINLOC +@cindex array, location of minimum element + +@table @asis +@item @emph{Description}: +Determines the location of the element in the array with the minimum +value, or, if the @var{DIM} argument is supplied, determines the +locations of the minimum element along each row of the array in the +@var{DIM} direction. If @var{MASK} is present, only the elements for +which @var{MASK} is @code{.TRUE.} are considered. If more than one +element in the array has the minimum value, the location returned is +that of the first such element in array element order. If the array has +zero size, or all of the elements of @var{MASK} are @code{.FALSE.}, then +the result is an array of zeroes. Similarly, if @var{DIM} is supplied +and all of the elements of @var{MASK} along a given row are zero, the +result value for that row is zero. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{RESULT = MINLOC(ARRAY, DIM [, MASK])} +@item @code{RESULT = MINLOC(ARRAY [, MASK])} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}, +@code{REAL}, or @code{CHARACTER}. +@item @var{DIM} @tab (Optional) Shall be a scalar of type +@code{INTEGER}, with a value between one and the rank of @var{ARRAY}, +inclusive. It may not be an optional dummy argument. +@item @var{MASK} @tab Shall be an array of type @code{LOGICAL}, +and conformable with @var{ARRAY}. +@end multitable + +@item @emph{Return value}: +If @var{DIM} is absent, the result is a rank-one array with a length +equal to the rank of @var{ARRAY}. If @var{DIM} is present, the result +is an array with a rank one less than the rank of @var{ARRAY}, and a +size corresponding to the size of @var{ARRAY} with the @var{DIM} +dimension removed. If @var{DIM} is present and @var{ARRAY} has a rank +of one, the result is a scalar. In all cases, the result is of default +@code{INTEGER} type. + +@item @emph{See also}: +@ref{MIN}, @ref{MINVAL} + +@end table + + + +@node MINVAL +@section @code{MINVAL} --- Minimum value of an array +@fnindex MINVAL +@cindex array, minimum value +@cindex minimum value + +@table @asis +@item @emph{Description}: +Determines the minimum value of the elements in an array value, or, if +the @var{DIM} argument is supplied, determines the minimum value along +each row of the array in the @var{DIM} direction. If @var{MASK} is +present, only the elements for which @var{MASK} is @code{.TRUE.} are +considered. If the array has zero size, or all of the elements of +@var{MASK} are @code{.FALSE.}, then the result is @code{HUGE(ARRAY)} if +@var{ARRAY} is numeric, or a string of @code{CHAR(255)} characters if +@var{ARRAY} is of character type. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{RESULT = MINVAL(ARRAY, DIM [, MASK])} +@item @code{RESULT = MINVAL(ARRAY [, MASK])} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}, +@code{REAL}, or @code{CHARACTER}. +@item @var{DIM} @tab (Optional) Shall be a scalar of type +@code{INTEGER}, with a value between one and the rank of @var{ARRAY}, +inclusive. It may not be an optional dummy argument. +@item @var{MASK} @tab Shall be an array of type @code{LOGICAL}, +and conformable with @var{ARRAY}. +@end multitable + +@item @emph{Return value}: +If @var{DIM} is absent, or if @var{ARRAY} has a rank of one, the result +is a scalar. If @var{DIM} is present, the result is an array with a +rank one less than the rank of @var{ARRAY}, and a size corresponding to +the size of @var{ARRAY} with the @var{DIM} dimension removed. In all +cases, the result is of the same type and kind as @var{ARRAY}. + +@item @emph{See also}: +@ref{MIN}, @ref{MINLOC} + +@end table + + + +@node MOD +@section @code{MOD} --- Remainder function +@fnindex MOD +@fnindex AMOD +@fnindex DMOD +@cindex remainder +@cindex division, remainder + +@table @asis +@item @emph{Description}: +@code{MOD(A,P)} computes the remainder of the division of A by P@. It is +calculated as @code{A - (INT(A/P) * P)}. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = MOD(A, P)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL} +@item @var{P} @tab Shall be a scalar of the same type as @var{A} and not +equal to zero +@end multitable + +@item @emph{Return value}: +The kind of the return value is the result of cross-promoting +the kinds of the arguments. + +@item @emph{Example}: +@smallexample +program test_mod + print *, mod(17,3) + print *, mod(17.5,5.5) + print *, mod(17.5d0,5.5) + print *, mod(17.5,5.5d0) + + print *, mod(-17,3) + print *, mod(-17.5,5.5) + print *, mod(-17.5d0,5.5) + print *, mod(-17.5,5.5d0) + + print *, mod(17,-3) + print *, mod(17.5,-5.5) + print *, mod(17.5d0,-5.5) + print *, mod(17.5,-5.5d0) +end program test_mod +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Arguments @tab Return type @tab Standard +@item @code{AMOD(A,P)} @tab @code{REAL(4)} @tab @code{REAL(4)} @tab Fortran 95 and later +@item @code{DMOD(A,P)} @tab @code{REAL(8)} @tab @code{REAL(8)} @tab Fortran 95 and later +@end multitable +@end table + + + +@node MODULO +@section @code{MODULO} --- Modulo function +@fnindex MODULO +@cindex modulo +@cindex division, modulo + +@table @asis +@item @emph{Description}: +@code{MODULO(A,P)} computes the @var{A} modulo @var{P}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = MODULO(A, P)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab Shall be a scalar of type @code{INTEGER} or @code{REAL} +@item @var{P} @tab Shall be a scalar of the same type and kind as @var{A} +@end multitable + +@item @emph{Return value}: +The type and kind of the result are those of the arguments. +@table @asis +@item If @var{A} and @var{P} are of type @code{INTEGER}: +@code{MODULO(A,P)} has the value @var{R} such that @code{A=Q*P+R}, where +@var{Q} is an integer and @var{R} is between 0 (inclusive) and @var{P} +(exclusive). +@item If @var{A} and @var{P} are of type @code{REAL}: +@code{MODULO(A,P)} has the value of @code{A - FLOOR (A / P) * P}. +@end table +In all cases, if @var{P} is zero the result is processor-dependent. + +@item @emph{Example}: +@smallexample +program test_modulo + print *, modulo(17,3) + print *, modulo(17.5,5.5) + + print *, modulo(-17,3) + print *, modulo(-17.5,5.5) + + print *, modulo(17,-3) + print *, modulo(17.5,-5.5) +end program +@end smallexample + +@end table + + + +@node MOVE_ALLOC +@section @code{MOVE_ALLOC} --- Move allocation from one object to another +@fnindex MOVE_ALLOC +@cindex moving allocation +@cindex allocation, moving + +@table @asis +@item @emph{Description}: +@code{MOVE_ALLOC(SRC, DEST)} moves the allocation from @var{SRC} to +@var{DEST}. @var{SRC} will become deallocated in the process. + +@item @emph{Standard}: +Fortran 2003 and later + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL MOVE_ALLOC(SRC, DEST)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{SRC} @tab @code{ALLOCATABLE}, @code{INTENT(INOUT)}, may be +of any type and kind. +@item @var{DEST} @tab @code{ALLOCATABLE}, @code{INTENT(OUT)}, shall be +of the same type, kind and rank as @var{SRC}. +@end multitable + +@item @emph{Return value}: +None + +@item @emph{Example}: +@smallexample +program test_move_alloc + integer, allocatable :: a(:), b(:) + + allocate(a(3)) + a = [ 1, 2, 3 ] + call move_alloc(a, b) + print *, allocated(a), allocated(b) + print *, b +end program test_move_alloc +@end smallexample +@end table + + + +@node MVBITS +@section @code{MVBITS} --- Move bits from one integer to another +@fnindex MVBITS +@cindex bits, move + +@table @asis +@item @emph{Description}: +Moves @var{LEN} bits from positions @var{FROMPOS} through +@code{FROMPOS+LEN-1} of @var{FROM} to positions @var{TOPOS} through +@code{TOPOS+LEN-1} of @var{TO}. The portion of argument @var{TO} not +affected by the movement of bits is unchanged. The values of +@code{FROMPOS+LEN-1} and @code{TOPOS+LEN-1} must be less than +@code{BIT_SIZE(FROM)}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental subroutine + +@item @emph{Syntax}: +@code{CALL MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{FROM} @tab The type shall be @code{INTEGER}. +@item @var{FROMPOS} @tab The type shall be @code{INTEGER}. +@item @var{LEN} @tab The type shall be @code{INTEGER}. +@item @var{TO} @tab The type shall be @code{INTEGER}, of the +same kind as @var{FROM}. +@item @var{TOPOS} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{See also}: +@ref{IBCLR}, @ref{IBSET}, @ref{IBITS}, @ref{IAND}, @ref{IOR}, @ref{IEOR} +@end table + + + +@node NEAREST +@section @code{NEAREST} --- Nearest representable number +@fnindex NEAREST +@cindex real number, nearest different +@cindex floating point, nearest different + +@table @asis +@item @emph{Description}: +@code{NEAREST(X, S)} returns the processor-representable number nearest +to @code{X} in the direction indicated by the sign of @code{S}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = NEAREST(X, S)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Shall be of type @code{REAL}. +@item @var{S} @tab (Optional) shall be of type @code{REAL} and +not equal to zero. +@end multitable + +@item @emph{Return value}: +The return value is of the same type as @code{X}. If @code{S} is +positive, @code{NEAREST} returns the processor-representable number +greater than @code{X} and nearest to it. If @code{S} is negative, +@code{NEAREST} returns the processor-representable number smaller than +@code{X} and nearest to it. + +@item @emph{Example}: +@smallexample +program test_nearest + real :: x, y + x = nearest(42.0, 1.0) + y = nearest(42.0, -1.0) + write (*,"(3(G20.15))") x, y, x - y +end program test_nearest +@end smallexample +@end table + + + +@node NEW_LINE +@section @code{NEW_LINE} --- New line character +@fnindex NEW_LINE +@cindex newline +@cindex output, newline + +@table @asis +@item @emph{Description}: +@code{NEW_LINE(C)} returns the new-line character. + +@item @emph{Standard}: +Fortran 2003 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = NEW_LINE(C)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{C} @tab The argument shall be a scalar or array of the +type @code{CHARACTER}. +@end multitable + +@item @emph{Return value}: +Returns a @var{CHARACTER} scalar of length one with the new-line character of +the same kind as parameter @var{C}. + +@item @emph{Example}: +@smallexample +program newline + implicit none + write(*,'(A)') 'This is record 1.'//NEW_LINE('A')//'This is record 2.' +end program newline +@end smallexample +@end table + + + +@node NINT +@section @code{NINT} --- Nearest whole number +@fnindex NINT +@fnindex IDNINT +@cindex rounding, nearest whole number + +@table @asis +@item @emph{Description}: +@code{NINT(X)} rounds its argument to the nearest whole number. + +@item @emph{Standard}: +Fortran 77 and later, with @var{KIND} argument Fortran 90 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = NINT(X [, KIND])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type of the argument shall be @code{REAL}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +Returns @var{A} with the fractional portion of its magnitude eliminated by +rounding to the nearest whole number and with its sign preserved, +converted to an @code{INTEGER} of the default kind. + +@item @emph{Example}: +@smallexample +program test_nint + real(4) x4 + real(8) x8 + x4 = 1.234E0_4 + x8 = 4.321_8 + print *, nint(x4), idnint(x8) +end program test_nint +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .25 .25 .25 +@item Name @tab Argument @tab Standard +@item @code{IDNINT(X)} @tab @code{REAL(8)} @tab Fortran 95 and later +@end multitable + +@item @emph{See also}: +@ref{CEILING}, @ref{FLOOR} + +@end table + + + +@node NOT +@section @code{NOT} --- Logical negation +@fnindex NOT +@cindex bits, negate +@cindex bitwise logical not +@cindex logical not, bitwise + +@table @asis +@item @emph{Description}: +@code{NOT} returns the bitwise boolean inverse of @var{I}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = NOT(I)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return type is @code{INTEGER}, of the same kind as the +argument. + +@item @emph{See also}: +@ref{IAND}, @ref{IEOR}, @ref{IOR}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR} + +@end table + + + +@node NULL +@section @code{NULL} --- Function that returns an disassociated pointer +@fnindex NULL +@cindex pointer, status +@cindex pointer, disassociated + +@table @asis +@item @emph{Description}: +Returns a disassociated pointer. + +If @var{MOLD} is present, a dissassociated pointer of the same type is +returned, otherwise the type is determined by context. + +In Fortran 95, @var{MOLD} is optional. Please note that Fortran 2003 +includes cases where it is required. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{PTR => NULL([MOLD])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{MOLD} @tab (Optional) shall be a pointer of any association +status and of any type. +@end multitable + +@item @emph{Return value}: +A disassociated pointer. + +@item @emph{Example}: +@smallexample +REAL, POINTER, DIMENSION(:) :: VEC => NULL () +@end smallexample + +@item @emph{See also}: +@ref{ASSOCIATED} +@end table + + + +@node OR +@section @code{OR} --- Bitwise logical OR +@fnindex OR +@cindex bitwise logical or +@cindex logical or, bitwise + +@table @asis +@item @emph{Description}: +Bitwise logical @code{OR}. + +This intrinsic routine is provided for backwards compatibility with +GNU Fortran 77. For integer arguments, programmers should consider +the use of the @ref{IOR} intrinsic defined by the Fortran standard. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = OR(X, Y)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be either a scalar @code{INTEGER} +type or a scalar @code{LOGICAL} type. +@item @var{Y} @tab The type shall be the same as the type of @var{X}. +@end multitable + +@item @emph{Return value}: +The return type is either a scalar @code{INTEGER} or a scalar +@code{LOGICAL}. If the kind type parameters differ, then the +smaller kind type is implicitly converted to larger kind, and the +return has the larger kind. + +@item @emph{Example}: +@smallexample +PROGRAM test_or + LOGICAL :: T = .TRUE., F = .FALSE. + INTEGER :: a, b + DATA a / Z'F' /, b / Z'3' / + + WRITE (*,*) OR(T, T), OR(T, F), OR(F, T), OR(F, F) + WRITE (*,*) OR(a, b) +END PROGRAM +@end smallexample + +@item @emph{See also}: +Fortran 95 elemental function: @ref{IOR} +@end table + + + +@node PACK +@section @code{PACK} --- Pack an array into an array of rank one +@fnindex PACK +@cindex array, packing +@cindex array, reduce dimension +@cindex array, gather elements + +@table @asis +@item @emph{Description}: +Stores the elements of @var{ARRAY} in an array of rank one. + +The beginning of the resulting array is made up of elements whose @var{MASK} +equals @code{TRUE}. Afterwards, positions are filled with elements taken from +@var{VECTOR}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = PACK(ARRAY, MASK[,VECTOR]} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{ARRAY} @tab Shall be an array of any type. +@item @var{MASK} @tab Shall be an array of type @code{LOGICAL} and +of the same size as @var{ARRAY}. Alternatively, it may be a @code{LOGICAL} +scalar. +@item @var{VECTOR} @tab (Optional) shall be an array of the same type +as @var{ARRAY} and of rank one. If present, the number of elements in +@var{VECTOR} shall be equal to or greater than the number of true elements +in @var{MASK}. If @var{MASK} is scalar, the number of elements in +@var{VECTOR} shall be equal to or greater than the number of elements in +@var{ARRAY}. +@end multitable + +@item @emph{Return value}: +The result is an array of rank one and the same type as that of @var{ARRAY}. +If @var{VECTOR} is present, the result size is that of @var{VECTOR}, the +number of @code{TRUE} values in @var{MASK} otherwise. + +@item @emph{Example}: +Gathering nonzero elements from an array: +@smallexample +PROGRAM test_pack_1 + INTEGER :: m(6) + m = (/ 1, 0, 0, 0, 5, 0 /) + WRITE(*, FMT="(6(I0, ' '))") pack(m, m /= 0) ! "1 5" +END PROGRAM +@end smallexample + +Gathering nonzero elements from an array and appending elements from @var{VECTOR}: +@smallexample +PROGRAM test_pack_2 + INTEGER :: m(4) + m = (/ 1, 0, 0, 2 /) + WRITE(*, FMT="(4(I0, ' '))") pack(m, m /= 0, (/ 0, 0, 3, 4 /)) ! "1 2 3 4" +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{UNPACK} +@end table + + + +@node PERROR +@section @code{PERROR} --- Print system error message +@fnindex PERROR +@cindex system, error handling + +@table @asis +@item @emph{Description}: +Prints (on the C @code{stderr} stream) a newline-terminated error +message corresponding to the last system error. This is prefixed by +@var{STRING}, a colon and a space. See @code{perror(3)}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL PERROR(STRING)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STRING} @tab A scalar of type @code{CHARACTER} and of the +default kind. +@end multitable + +@item @emph{See also}: +@ref{IERRNO} +@end table + + + +@node PRECISION +@section @code{PRECISION} --- Decimal precision of a real kind +@fnindex PRECISION +@cindex model representation, precision + +@table @asis +@item @emph{Description}: +@code{PRECISION(X)} returns the decimal precision in the model of the +type of @code{X}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = PRECISION(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Shall be of type @code{REAL} or @code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of the default integer +kind. + +@item @emph{Example}: +@smallexample +program prec_and_range + real(kind=4) :: x(2) + complex(kind=8) :: y + + print *, precision(x), range(x) + print *, precision(y), range(y) +end program prec_and_range +@end smallexample +@end table + + + +@node PRESENT +@section @code{PRESENT} --- Determine whether an optional dummy argument is specified +@fnindex PRESENT + +@table @asis +@item @emph{Description}: +Determines whether an optional dummy argument is present. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = PRESENT(A)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab May be of any type and may be a pointer, scalar or array +value, or a dummy procedure. It shall be the name of an optional dummy argument +accessible within the current subroutine or function. +@end multitable + +@item @emph{Return value}: +Returns either @code{TRUE} if the optional argument @var{A} is present, or +@code{FALSE} otherwise. + +@item @emph{Example}: +@smallexample +PROGRAM test_present + WRITE(*,*) f(), f(42) ! "F T" +CONTAINS + LOGICAL FUNCTION f(x) + INTEGER, INTENT(IN), OPTIONAL :: x + f = PRESENT(x) + END FUNCTION +END PROGRAM +@end smallexample +@end table + + + +@node PRODUCT +@section @code{PRODUCT} --- Product of array elements +@fnindex PRODUCT +@cindex array, product +@cindex array, multiply elements +@cindex array, conditionally multiply elements +@cindex multiply array elements + +@table @asis +@item @emph{Description}: +Multiplies the elements of @var{ARRAY} along dimension @var{DIM} if +the corresponding element in @var{MASK} is @code{TRUE}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = PRODUCT(ARRAY[, MASK])} +@code{RESULT = PRODUCT(ARRAY, DIM[, MASK])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}, +@code{REAL} or @code{COMPLEX}. +@item @var{DIM} @tab (Optional) shall be a scalar of type +@code{INTEGER} with a value in the range from 1 to n, where n +equals the rank of @var{ARRAY}. +@item @var{MASK} @tab (Optional) shall be of type @code{LOGICAL} +and either be a scalar or an array of the same shape as @var{ARRAY}. +@end multitable + +@item @emph{Return value}: +The result is of the same type as @var{ARRAY}. + +If @var{DIM} is absent, a scalar with the product of all elements in +@var{ARRAY} is returned. Otherwise, an array of rank n-1, where n equals +the rank of @var{ARRAY}, and a shape similar to that of @var{ARRAY} with +dimension @var{DIM} dropped is returned. + + +@item @emph{Example}: +@smallexample +PROGRAM test_product + INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /) + print *, PRODUCT(x) ! all elements, product = 120 + print *, PRODUCT(x, MASK=MOD(x, 2)==1) ! odd elements, product = 15 +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{SUM} +@end table + + + +@node RADIX +@section @code{RADIX} --- Base of a model number +@fnindex RADIX +@cindex model representation, base +@cindex model representation, radix + +@table @asis +@item @emph{Description}: +@code{RADIX(X)} returns the base of the model representing the entity @var{X}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = RADIX(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Shall be of type @code{INTEGER} or @code{REAL} +@end multitable + +@item @emph{Return value}: +The return value is a scalar of type @code{INTEGER} and of the default +integer kind. + +@item @emph{Example}: +@smallexample +program test_radix + print *, "The radix for the default integer kind is", radix(0) + print *, "The radix for the default real kind is", radix(0.0) +end program test_radix +@end smallexample + +@end table + + + +@node RAN +@section @code{RAN} --- Real pseudo-random number +@fnindex RAN +@cindex random number generation + +@table @asis +@item @emph{Description}: +For compatibility with HP FORTRAN 77/iX, the @code{RAN} intrinsic is +provided as an alias for @code{RAND}. See @ref{RAND} for complete +documentation. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{See also}: +@ref{RAND}, @ref{RANDOM_NUMBER} +@end table + + + +@node RAND +@section @code{RAND} --- Real pseudo-random number +@fnindex RAND +@cindex random number generation + +@table @asis +@item @emph{Description}: +@code{RAND(FLAG)} returns a pseudo-random number from a uniform +distribution between 0 and 1. If @var{FLAG} is 0, the next number +in the current sequence is returned; if @var{FLAG} is 1, the generator +is restarted by @code{CALL SRAND(0)}; if @var{FLAG} has any other value, +it is used as a new seed with @code{SRAND}. + +This intrinsic routine is provided for backwards compatibility with +GNU Fortran 77. It implements a simple modulo generator as provided +by @command{g77}. For new code, one should consider the use of +@ref{RANDOM_NUMBER} as it implements a superior algorithm. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = RAND(FLAG)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{FLAG} @tab Shall be a scalar @code{INTEGER} of kind 4. +@end multitable + +@item @emph{Return value}: +The return value is of @code{REAL} type and the default kind. + +@item @emph{Example}: +@smallexample +program test_rand + integer,parameter :: seed = 86456 + + call srand(seed) + print *, rand(), rand(), rand(), rand() + print *, rand(seed), rand(), rand(), rand() +end program test_rand +@end smallexample + +@item @emph{See also}: +@ref{SRAND}, @ref{RANDOM_NUMBER} + +@end table + + + +@node RANDOM_NUMBER +@section @code{RANDOM_NUMBER} --- Pseudo-random number +@fnindex RANDOM_NUMBER +@cindex random number generation + +@table @asis +@item @emph{Description}: +Returns a single pseudorandom number or an array of pseudorandom numbers +from the uniform distribution over the range @math{ 0 \leq x < 1}. + +The runtime-library implements George Marsaglia's KISS (Keep It Simple +Stupid) random number generator (RNG). This RNG combines: +@enumerate +@item The congruential generator @math{x(n) = 69069 \cdot x(n-1) + 1327217885} +with a period of @math{2^{32}}, +@item A 3-shift shift-register generator with a period of @math{2^{32} - 1}, +@item Two 16-bit multiply-with-carry generators with a period of +@math{597273182964842497 > 2^{59}}. +@end enumerate +The overall period exceeds @math{2^{123}}. + +Please note, this RNG is thread safe if used within OpenMP directives, +i.e., its state will be consistent while called from multiple threads. +However, the KISS generator does not create random numbers in parallel +from multiple sources, but in sequence from a single source. If an +OpenMP-enabled application heavily relies on random numbers, one should +consider employing a dedicated parallel random number generator instead. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{RANDOM_NUMBER(HARVEST)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{HARVEST} @tab Shall be a scalar or an array of type @code{REAL}. +@end multitable + +@item @emph{Example}: +@smallexample +program test_random_number + REAL :: r(5,5) + CALL init_random_seed() ! see example of RANDOM_SEED + CALL RANDOM_NUMBER(r) +end program +@end smallexample + +@item @emph{See also}: +@ref{RANDOM_SEED} +@end table + + + +@node RANDOM_SEED +@section @code{RANDOM_SEED} --- Initialize a pseudo-random number sequence +@fnindex RANDOM_SEED +@cindex random number generation, seeding +@cindex seeding a random number generator + +@table @asis +@item @emph{Description}: +Restarts or queries the state of the pseudorandom number generator used by +@code{RANDOM_NUMBER}. + +If @code{RANDOM_SEED} is called without arguments, it is initialized to +a default state. The example below shows how to initialize the random +seed based on the system's time. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL RANDOM_SEED(SIZE, PUT, GET)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{SIZE} @tab (Optional) Shall be a scalar and of type default +@code{INTEGER}, with @code{INTENT(OUT)}. It specifies the minimum size +of the arrays used with the @var{PUT} and @var{GET} arguments. +@item @var{PUT} @tab (Optional) Shall be an array of type default +@code{INTEGER} and rank one. It is @code{INTENT(IN)} and the size of +the array must be larger than or equal to the number returned by the +@var{SIZE} argument. +@item @var{GET} @tab (Optional) Shall be an array of type default +@code{INTEGER} and rank one. It is @code{INTENT(OUT)} and the size +of the array must be larger than or equal to the number returned by +the @var{SIZE} argument. +@end multitable + +@item @emph{Example}: +@smallexample +SUBROUTINE init_random_seed() + INTEGER :: i, n, clock + INTEGER, DIMENSION(:), ALLOCATABLE :: seed + + CALL RANDOM_SEED(size = n) + ALLOCATE(seed(n)) + + CALL SYSTEM_CLOCK(COUNT=clock) + + seed = clock + 37 * (/ (i - 1, i = 1, n) /) + CALL RANDOM_SEED(PUT = seed) + + DEALLOCATE(seed) +END SUBROUTINE +@end smallexample + +@item @emph{See also}: +@ref{RANDOM_NUMBER} +@end table + + + +@node RANGE +@section @code{RANGE} --- Decimal exponent range +@fnindex RANGE +@cindex model representation, range + +@table @asis +@item @emph{Description}: +@code{RANGE(X)} returns the decimal exponent range in the model of the +type of @code{X}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = RANGE(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Shall be of type @code{INTEGER}, @code{REAL} +or @code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of the default integer +kind. + +@item @emph{Example}: +See @code{PRECISION} for an example. +@end table + + + +@node REAL +@section @code{REAL} --- Convert to real type +@fnindex REAL +@fnindex REALPART +@cindex conversion, to real +@cindex complex numbers, real part + +@table @asis +@item @emph{Description}: +@code{REAL(X [, KIND])} converts its argument @var{X} to a real type. The +@code{REALPART(X)} function is provided for compatibility with @command{g77}, +and its use is strongly discouraged. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{RESULT = REAL(X [, KIND])} +@item @code{RESULT = REALPART(Z)} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Shall be @code{INTEGER}, @code{REAL}, or +@code{COMPLEX}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +These functions return a @code{REAL} variable or array under +the following rules: + +@table @asis +@item (A) +@code{REAL(X)} is converted to a default real type if @var{X} is an +integer or real variable. +@item (B) +@code{REAL(X)} is converted to a real type with the kind type parameter +of @var{X} if @var{X} is a complex variable. +@item (C) +@code{REAL(X, KIND)} is converted to a real type with kind type +parameter @var{KIND} if @var{X} is a complex, integer, or real +variable. +@end table + +@item @emph{Example}: +@smallexample +program test_real + complex :: x = (1.0, 2.0) + print *, real(x), real(x,8), realpart(x) +end program test_real +@end smallexample + +@item @emph{See also}: +@ref{DBLE}, @ref{DFLOAT}, @ref{FLOAT} + +@end table + + + +@node RENAME +@section @code{RENAME} --- Rename a file +@fnindex RENAME +@cindex file system, rename file + +@table @asis +@item @emph{Description}: +Renames a file from file @var{PATH1} to @var{PATH2}. A null +character (@code{CHAR(0)}) can be used to mark the end of the names in +@var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file +names are ignored. If the @var{STATUS} argument is supplied, it +contains 0 on success or a nonzero error code upon return; see +@code{rename(2)}. + +This intrinsic is provided in both subroutine and function forms; +however, only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL RENAME(PATH1, PATH2 [, STATUS])} +@item @code{STATUS = RENAME(PATH1, PATH2)} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{PATH1} @tab Shall be of default @code{CHARACTER} type. +@item @var{PATH2} @tab Shall be of default @code{CHARACTER} type. +@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type. +@end multitable + +@item @emph{See also}: +@ref{LINK} + +@end table + + + +@node REPEAT +@section @code{REPEAT} --- Repeated string concatenation +@fnindex REPEAT +@cindex string, repeat +@cindex string, concatenate + +@table @asis +@item @emph{Description}: +Concatenates @var{NCOPIES} copies of a string. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = REPEAT(STRING, NCOPIES)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STRING} @tab Shall be scalar and of type @code{CHARACTER}. +@item @var{NCOPIES} @tab Shall be scalar and of type @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +A new scalar of type @code{CHARACTER} built up from @var{NCOPIES} copies +of @var{STRING}. + +@item @emph{Example}: +@smallexample +program test_repeat + write(*,*) repeat("x", 5) ! "xxxxx" +end program +@end smallexample +@end table + + + +@node RESHAPE +@section @code{RESHAPE} --- Function to reshape an array +@fnindex RESHAPE +@cindex array, change dimensions +@cindex array, transmogrify + +@table @asis +@item @emph{Description}: +Reshapes @var{SOURCE} to correspond to @var{SHAPE}. If necessary, +the new array may be padded with elements from @var{PAD} or permuted +as defined by @var{ORDER}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = RESHAPE(SOURCE, SHAPE[, PAD, ORDER])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{SOURCE} @tab Shall be an array of any type. +@item @var{SHAPE} @tab Shall be of type @code{INTEGER} and an +array of rank one. Its values must be positive or zero. +@item @var{PAD} @tab (Optional) shall be an array of the same +type as @var{SOURCE}. +@item @var{ORDER} @tab (Optional) shall be of type @code{INTEGER} +and an array of the same shape as @var{SHAPE}. Its values shall +be a permutation of the numbers from 1 to n, where n is the size of +@var{SHAPE}. If @var{ORDER} is absent, the natural ordering shall +be assumed. +@end multitable + +@item @emph{Return value}: +The result is an array of shape @var{SHAPE} with the same type as +@var{SOURCE}. + +@item @emph{Example}: +@smallexample +PROGRAM test_reshape + INTEGER, DIMENSION(4) :: x + WRITE(*,*) SHAPE(x) ! prints "4" + WRITE(*,*) SHAPE(RESHAPE(x, (/2, 2/))) ! prints "2 2" +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{SHAPE} +@end table + + + +@node RRSPACING +@section @code{RRSPACING} --- Reciprocal of the relative spacing +@fnindex RRSPACING +@cindex real number, relative spacing +@cindex floating point, relative spacing + + +@table @asis +@item @emph{Description}: +@code{RRSPACING(X)} returns the reciprocal of the relative spacing of +model numbers near @var{X}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = RRSPACING(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Shall be of type @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of the same type and kind as @var{X}. +The value returned is equal to +@code{ABS(FRACTION(X)) * FLOAT(RADIX(X))**DIGITS(X)}. + +@item @emph{See also}: +@ref{SPACING} +@end table + + + +@node RSHIFT +@section @code{RSHIFT} --- Right shift bits +@fnindex RSHIFT +@cindex bits, shift right + +@table @asis +@item @emph{Description}: +@code{RSHIFT} returns a value corresponding to @var{I} with all of the +bits shifted right by @var{SHIFT} places. If the absolute value of +@var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined. +Bits shifted out from the left end are lost; zeros are shifted in from +the opposite end. + +This function has been superseded by the @code{ISHFT} intrinsic, which +is standard in Fortran 95 and later. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = RSHIFT(I, SHIFT)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab The type shall be @code{INTEGER}. +@item @var{SHIFT} @tab The type shall be @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of the same kind as +@var{I}. + +@item @emph{See also}: +@ref{ISHFT}, @ref{ISHFTC}, @ref{LSHIFT} + +@end table + + + +@node SCALE +@section @code{SCALE} --- Scale a real value +@fnindex SCALE +@cindex real number, scale +@cindex floating point, scale + +@table @asis +@item @emph{Description}: +@code{SCALE(X,I)} returns @code{X * RADIX(X)**I}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = SCALE(X, I)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type of the argument shall be a @code{REAL}. +@item @var{I} @tab The type of the argument shall be a @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return value is of the same type and kind as @var{X}. +Its value is @code{X * RADIX(X)**I}. + +@item @emph{Example}: +@smallexample +program test_scale + real :: x = 178.1387e-4 + integer :: i = 5 + print *, scale(x,i), x*radix(x)**i +end program test_scale +@end smallexample + +@end table + + + +@node SCAN +@section @code{SCAN} --- Scan a string for the presence of a set of characters +@fnindex SCAN +@cindex string, find subset + +@table @asis +@item @emph{Description}: +Scans a @var{STRING} for any of the characters in a @var{SET} +of characters. + +If @var{BACK} is either absent or equals @code{FALSE}, this function +returns the position of the leftmost character of @var{STRING} that is +in @var{SET}. If @var{BACK} equals @code{TRUE}, the rightmost position +is returned. If no character of @var{SET} is found in @var{STRING}, the +result is zero. + +@item @emph{Standard}: +Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = SCAN(STRING, SET[, BACK [, KIND]])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STRING} @tab Shall be of type @code{CHARACTER}. +@item @var{SET} @tab Shall be of type @code{CHARACTER}. +@item @var{BACK} @tab (Optional) shall be of type @code{LOGICAL}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of kind @var{KIND}. If +@var{KIND} is absent, the return value is of default integer kind. + +@item @emph{Example}: +@smallexample +PROGRAM test_scan + WRITE(*,*) SCAN("FORTRAN", "AO") ! 2, found 'O' + WRITE(*,*) SCAN("FORTRAN", "AO", .TRUE.) ! 6, found 'A' + WRITE(*,*) SCAN("FORTRAN", "C++") ! 0, found none +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{INDEX intrinsic}, @ref{VERIFY} +@end table + + + +@node SECNDS +@section @code{SECNDS} --- Time function +@fnindex SECNDS +@cindex time, elapsed +@cindex elapsed time + +@table @asis +@item @emph{Description}: +@code{SECNDS(X)} gets the time in seconds from the real-time system clock. +@var{X} is a reference time, also in seconds. If this is zero, the time in +seconds from midnight is returned. This function is non-standard and its +use is discouraged. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = SECNDS (X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{T} @tab Shall be of type @code{REAL(4)}. +@item @var{X} @tab Shall be of type @code{REAL(4)}. +@end multitable + +@item @emph{Return value}: +None + +@item @emph{Example}: +@smallexample +program test_secnds + integer :: i + real(4) :: t1, t2 + print *, secnds (0.0) ! seconds since midnight + t1 = secnds (0.0) ! reference time + do i = 1, 10000000 ! do something + end do + t2 = secnds (t1) ! elapsed time + print *, "Something took ", t2, " seconds." +end program test_secnds +@end smallexample +@end table + + + +@node SECOND +@section @code{SECOND} --- CPU time function +@fnindex SECOND +@cindex time, elapsed +@cindex elapsed time + +@table @asis +@item @emph{Description}: +Returns a @code{REAL(4)} value representing the elapsed CPU time in +seconds. This provides the same functionality as the standard +@code{CPU_TIME} intrinsic, and is only included for backwards +compatibility. + +This intrinsic is provided in both subroutine and function forms; +however, only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL SECOND(TIME)} +@item @code{TIME = SECOND()} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{TIME} @tab Shall be of type @code{REAL(4)}. +@end multitable + +@item @emph{Return value}: +In either syntax, @var{TIME} is set to the process's current runtime in +seconds. + +@item @emph{See also}: +@ref{CPU_TIME} + +@end table + + + +@node SELECTED_CHAR_KIND +@section @code{SELECTED_CHAR_KIND} --- Choose character kind +@fnindex SELECTED_CHAR_KIND +@cindex character kind +@cindex kind, character + +@table @asis +@item @emph{Description}: + +@code{SELECTED_CHAR_KIND(NAME)} returns the kind value for the character +set named @var{NAME}, if a character set with such a name is supported, +or @math{-1} otherwise. Currently, supported character sets include +``ASCII'' and ``DEFAULT'', which are equivalent. + +@item @emph{Standard}: +Fortran 2003 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = SELECTED_CHAR_KIND(NAME)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{NAME} @tab Shall be a scalar and of the default character type. +@end multitable + +@item @emph{Example}: +@smallexample +program ascii_kind + integer,parameter :: ascii = selected_char_kind("ascii") + character(kind=ascii, len=26) :: s + + s = ascii_"abcdefghijklmnopqrstuvwxyz" + print *, s +end program ascii_kind +@end smallexample +@end table + + + +@node SELECTED_INT_KIND +@section @code{SELECTED_INT_KIND} --- Choose integer kind +@fnindex SELECTED_INT_KIND +@cindex integer kind +@cindex kind, integer + +@table @asis +@item @emph{Description}: +@code{SELECTED_INT_KIND(I)} return the kind value of the smallest integer +type that can represent all values ranging from @math{-10^I} (exclusive) +to @math{10^I} (exclusive). If there is no integer kind that accommodates +this range, @code{SELECTED_INT_KIND} returns @math{-1}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = SELECTED_INT_KIND(I)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab Shall be a scalar and of type @code{INTEGER}. +@end multitable + +@item @emph{Example}: +@smallexample +program large_integers + integer,parameter :: k5 = selected_int_kind(5) + integer,parameter :: k15 = selected_int_kind(15) + integer(kind=k5) :: i5 + integer(kind=k15) :: i15 + + print *, huge(i5), huge(i15) + + ! The following inequalities are always true + print *, huge(i5) >= 10_k5**5-1 + print *, huge(i15) >= 10_k15**15-1 +end program large_integers +@end smallexample +@end table + + + +@node SELECTED_REAL_KIND +@section @code{SELECTED_REAL_KIND} --- Choose real kind +@fnindex SELECTED_REAL_KIND +@cindex real kind +@cindex kind, real + +@table @asis +@item @emph{Description}: +@code{SELECTED_REAL_KIND(P,R)} returns the kind value of a real data type +with decimal precision of at least @code{P} digits and exponent +range greater at least @code{R}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = SELECTED_REAL_KIND(P, R)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{P} @tab (Optional) shall be a scalar and of type @code{INTEGER}. +@item @var{R} @tab (Optional) shall be a scalar and of type @code{INTEGER}. +@end multitable +At least one argument shall be present. + +@item @emph{Return value}: + +@code{SELECTED_REAL_KIND} returns the value of the kind type parameter of +a real data type with decimal precision of at least @code{P} digits and a +decimal exponent range of at least @code{R}. If more than one real data +type meet the criteria, the kind of the data type with the smallest +decimal precision is returned. If no real data type matches the criteria, +the result is +@table @asis +@item -1 if the processor does not support a real data type with a +precision greater than or equal to @code{P} +@item -2 if the processor does not support a real type with an exponent +range greater than or equal to @code{R} +@item -3 if neither is supported. +@end table + +@item @emph{Example}: +@smallexample +program real_kinds + integer,parameter :: p6 = selected_real_kind(6) + integer,parameter :: p10r100 = selected_real_kind(10,100) + integer,parameter :: r400 = selected_real_kind(r=400) + real(kind=p6) :: x + real(kind=p10r100) :: y + real(kind=r400) :: z + + print *, precision(x), range(x) + print *, precision(y), range(y) + print *, precision(z), range(z) +end program real_kinds +@end smallexample +@end table + + + +@node SET_EXPONENT +@section @code{SET_EXPONENT} --- Set the exponent of the model +@fnindex SET_EXPONENT +@cindex real number, set exponent +@cindex floating point, set exponent + +@table @asis +@item @emph{Description}: +@code{SET_EXPONENT(X, I)} returns the real number whose fractional part +is that that of @var{X} and whose exponent part is @var{I}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = SET_EXPONENT(X, I)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Shall be of type @code{REAL}. +@item @var{I} @tab Shall be of type @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The return value is of the same type and kind as @var{X}. +The real number whose fractional part +is that that of @var{X} and whose exponent part if @var{I} is returned; +it is @code{FRACTION(X) * RADIX(X)**I}. + +@item @emph{Example}: +@smallexample +PROGRAM test_setexp + REAL :: x = 178.1387e-4 + INTEGER :: i = 17 + PRINT *, SET_EXPONENT(x, i), FRACTION(x) * RADIX(x)**i +END PROGRAM +@end smallexample + +@end table + + + +@node SHAPE +@section @code{SHAPE} --- Determine the shape of an array +@fnindex SHAPE +@cindex array, shape + +@table @asis +@item @emph{Description}: +Determines the shape of an array. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = SHAPE(SOURCE)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{SOURCE} @tab Shall be an array or scalar of any type. +If @var{SOURCE} is a pointer it must be associated and allocatable +arrays must be allocated. +@end multitable + +@item @emph{Return value}: +An @code{INTEGER} array of rank one with as many elements as @var{SOURCE} +has dimensions. The elements of the resulting array correspond to the extend +of @var{SOURCE} along the respective dimensions. If @var{SOURCE} is a scalar, +the result is the rank one array of size zero. + +@item @emph{Example}: +@smallexample +PROGRAM test_shape + INTEGER, DIMENSION(-1:1, -1:2) :: A + WRITE(*,*) SHAPE(A) ! (/ 3, 4 /) + WRITE(*,*) SIZE(SHAPE(42)) ! (/ /) +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{RESHAPE}, @ref{SIZE} +@end table + + + +@node SIGN +@section @code{SIGN} --- Sign copying function +@fnindex SIGN +@fnindex ISIGN +@fnindex DSIGN +@cindex sign copying + +@table @asis +@item @emph{Description}: +@code{SIGN(A,B)} returns the value of @var{A} with the sign of @var{B}. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = SIGN(A, B)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab Shall be of type @code{INTEGER} or @code{REAL} +@item @var{B} @tab Shall be of the same type and kind as @var{A} +@end multitable + +@item @emph{Return value}: +The kind of the return value is that of @var{A} and @var{B}. +If @math{B\ge 0} then the result is @code{ABS(A)}, else +it is @code{-ABS(A)}. + +@item @emph{Example}: +@smallexample +program test_sign + print *, sign(-12,1) + print *, sign(-12,0) + print *, sign(-12,-1) + + print *, sign(-12.,1.) + print *, sign(-12.,0.) + print *, sign(-12.,-1.) +end program test_sign +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Arguments @tab Return type @tab Standard +@item @code{ISIGN(A,P)} @tab @code{INTEGER(4)} @tab @code{INTEGER(4)} @tab f95, gnu +@item @code{DSIGN(A,P)} @tab @code{REAL(8)} @tab @code{REAL(8)} @tab f95, gnu +@end multitable +@end table + + + +@node SIGNAL +@section @code{SIGNAL} --- Signal handling subroutine (or function) +@fnindex SIGNAL +@cindex system, signal handling + +@table @asis +@item @emph{Description}: +@code{SIGNAL(NUMBER, HANDLER [, STATUS])} causes external subroutine +@var{HANDLER} to be executed with a single integer argument when signal +@var{NUMBER} occurs. If @var{HANDLER} is an integer, it can be used to +turn off handling of signal @var{NUMBER} or revert to its default +action. See @code{signal(2)}. + +If @code{SIGNAL} is called as a subroutine and the @var{STATUS} argument +is supplied, it is set to the value returned by @code{signal(2)}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL SIGNAL(NUMBER, HANDLER [, STATUS])} +@item @code{STATUS = SIGNAL(NUMBER, HANDLER)} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{NUMBER} @tab Shall be a scalar integer, with @code{INTENT(IN)} +@item @var{HANDLER}@tab Signal handler (@code{INTEGER FUNCTION} or +@code{SUBROUTINE}) or dummy/global @code{INTEGER} scalar. +@code{INTEGER}. It is @code{INTENT(IN)}. +@item @var{STATUS} @tab (Optional) @var{STATUS} shall be a scalar +integer. It has @code{INTENT(OUT)}. +@end multitable +@c TODO: What should the interface of the handler be? Does it take arguments? + +@item @emph{Return value}: +The @code{SIGNAL} function returns the value returned by @code{signal(2)}. + +@item @emph{Example}: +@smallexample +program test_signal + intrinsic signal + external handler_print + + call signal (12, handler_print) + call signal (10, 1) + + call sleep (30) +end program test_signal +@end smallexample +@end table + + + +@node SIN +@section @code{SIN} --- Sine function +@fnindex SIN +@fnindex DSIN +@fnindex CSIN +@fnindex ZSIN +@fnindex CDSIN +@cindex trigonometric function, sine +@cindex sine + +@table @asis +@item @emph{Description}: +@code{SIN(X)} computes the sine of @var{X}. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = SIN(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL} or +@code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value has same type and kind as @var{X}. + +@item @emph{Example}: +@smallexample +program test_sin + real :: x = 0.0 + x = sin(x) +end program test_sin +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DSIN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@item @code{CSIN(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab f95, gnu +@item @code{ZSIN(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu +@item @code{CDSIN(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu +@end multitable + +@item @emph{See also}: +@ref{ASIN} +@end table + + + +@node SINH +@section @code{SINH} --- Hyperbolic sine function +@fnindex SINH +@fnindex DSINH +@cindex hyperbolic sine +@cindex hyperbolic function, sine +@cindex sine, hyperbolic + +@table @asis +@item @emph{Description}: +@code{SINH(X)} computes the hyperbolic sine of @var{X}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = SINH(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL}. + +@item @emph{Example}: +@smallexample +program test_sinh + real(8) :: x = - 1.0_8 + x = sinh(x) +end program test_sinh +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DSINH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 95 and later +@end multitable + +@item @emph{See also}: +@ref{ASINH} +@end table + + + +@node SIZE +@section @code{SIZE} --- Determine the size of an array +@fnindex SIZE +@cindex array, size +@cindex array, number of elements +@cindex array, count elements + +@table @asis +@item @emph{Description}: +Determine the extent of @var{ARRAY} along a specified dimension @var{DIM}, +or the total number of elements in @var{ARRAY} if @var{DIM} is absent. + +@item @emph{Standard}: +Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = SIZE(ARRAY[, DIM [, KIND]])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{ARRAY} @tab Shall be an array of any type. If @var{ARRAY} is +a pointer it must be associated and allocatable arrays must be allocated. +@item @var{DIM} @tab (Optional) shall be a scalar of type @code{INTEGER} +and its value shall be in the range from 1 to n, where n equals the rank +of @var{ARRAY}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of kind @var{KIND}. If +@var{KIND} is absent, the return value is of default integer kind. + +@item @emph{Example}: +@smallexample +PROGRAM test_size + WRITE(*,*) SIZE((/ 1, 2 /)) ! 2 +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{SHAPE}, @ref{RESHAPE} +@end table + + +@node SIZEOF +@section @code{SIZEOF} --- Size in bytes of an expression +@fnindex SIZEOF +@cindex expression size +@cindex size of an expression + +@table @asis +@item @emph{Description}: +@code{SIZEOF(X)} calculates the number of bytes of storage the +expression @code{X} occupies. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Intrinsic function + +@item @emph{Syntax}: +@code{N = SIZEOF(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The argument shall be of any type, rank or shape. +@end multitable + +@item @emph{Return value}: +The return value is of type integer and of the system-dependent kind +@var{C_SIZE_T} (from the @var{ISO_C_BINDING} module). Its value is the +number of bytes occupied by the argument. If the argument has the +@code{POINTER} attribute, the number of bytes of the storage area pointed +to is returned. If the argument is of a derived type with @code{POINTER} +or @code{ALLOCATABLE} components, the return value doesn't account for +the sizes of the data pointed to by these components. + +@item @emph{Example}: +@smallexample + integer :: i + real :: r, s(5) + print *, (sizeof(s)/sizeof(r) == 5) + end +@end smallexample +The example will print @code{.TRUE.} unless you are using a platform +where default @code{REAL} variables are unusually padded. + +@item @emph{See also}: +@ref{C_SIZEOF} +@end table + + +@node SLEEP +@section @code{SLEEP} --- Sleep for the specified number of seconds +@fnindex SLEEP +@cindex delayed execution + +@table @asis +@item @emph{Description}: +Calling this subroutine causes the process to pause for @var{SECONDS} seconds. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL SLEEP(SECONDS)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{SECONDS} @tab The type shall be of default @code{INTEGER}. +@end multitable + +@item @emph{Example}: +@smallexample +program test_sleep + call sleep(5) +end +@end smallexample +@end table + + + +@node SNGL +@section @code{SNGL} --- Convert double precision real to default real +@fnindex SNGL +@cindex conversion, to real + +@table @asis +@item @emph{Description}: +@code{SNGL(A)} converts the double precision real @var{A} +to a default real value. This is an archaic form of @code{REAL} +that is specific to one type for @var{A}. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = SNGL(A)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{A} @tab The type shall be a double precision @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type default @code{REAL}. + +@item @emph{See also}: +@ref{DBLE} +@end table + + + +@node SPACING +@section @code{SPACING} --- Smallest distance between two numbers of a given type +@fnindex SPACING +@cindex real number, relative spacing +@cindex floating point, relative spacing + +@table @asis +@item @emph{Description}: +Determines the distance between the argument @var{X} and the nearest +adjacent number of the same type. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = SPACING(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Shall be of type @code{REAL}. +@end multitable + +@item @emph{Return value}: +The result is of the same type as the input argument @var{X}. + +@item @emph{Example}: +@smallexample +PROGRAM test_spacing + INTEGER, PARAMETER :: SGL = SELECTED_REAL_KIND(p=6, r=37) + INTEGER, PARAMETER :: DBL = SELECTED_REAL_KIND(p=13, r=200) + + WRITE(*,*) spacing(1.0_SGL) ! "1.1920929E-07" on i686 + WRITE(*,*) spacing(1.0_DBL) ! "2.220446049250313E-016" on i686 +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{RRSPACING} +@end table + + + +@node SPREAD +@section @code{SPREAD} --- Add a dimension to an array +@fnindex SPREAD +@cindex array, increase dimension +@cindex array, duplicate elements +@cindex array, duplicate dimensions + +@table @asis +@item @emph{Description}: +Replicates a @var{SOURCE} array @var{NCOPIES} times along a specified +dimension @var{DIM}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = SPREAD(SOURCE, DIM, NCOPIES)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{SOURCE} @tab Shall be a scalar or an array of any type and +a rank less than seven. +@item @var{DIM} @tab Shall be a scalar of type @code{INTEGER} with a +value in the range from 1 to n+1, where n equals the rank of @var{SOURCE}. +@item @var{NCOPIES} @tab Shall be a scalar of type @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The result is an array of the same type as @var{SOURCE} and has rank n+1 +where n equals the rank of @var{SOURCE}. + +@item @emph{Example}: +@smallexample +PROGRAM test_spread + INTEGER :: a = 1, b(2) = (/ 1, 2 /) + WRITE(*,*) SPREAD(A, 1, 2) ! "1 1" + WRITE(*,*) SPREAD(B, 1, 2) ! "1 1 2 2" +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{UNPACK} +@end table + + + +@node SQRT +@section @code{SQRT} --- Square-root function +@fnindex SQRT +@fnindex DSQRT +@fnindex CSQRT +@fnindex ZSQRT +@fnindex CDSQRT +@cindex root +@cindex square-root + +@table @asis +@item @emph{Description}: +@code{SQRT(X)} computes the square root of @var{X}. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = SQRT(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL} or +@code{COMPLEX}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} or @code{COMPLEX}. +The kind type parameter is the same as @var{X}. + +@item @emph{Example}: +@smallexample +program test_sqrt + real(8) :: x = 2.0_8 + complex :: z = (1.0, 2.0) + x = sqrt(x) + z = sqrt(z) +end program test_sqrt +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DSQRT(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 95 and later +@item @code{CSQRT(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab Fortran 95 and later +@item @code{ZSQRT(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension +@item @code{CDSQRT(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab GNU extension +@end multitable +@end table + + + +@node SRAND +@section @code{SRAND} --- Reinitialize the random number generator +@fnindex SRAND +@cindex random number generation, seeding +@cindex seeding a random number generator + +@table @asis +@item @emph{Description}: +@code{SRAND} reinitializes the pseudo-random number generator +called by @code{RAND} and @code{IRAND}. The new seed used by the +generator is specified by the required argument @var{SEED}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL SRAND(SEED)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{SEED} @tab Shall be a scalar @code{INTEGER(kind=4)}. +@end multitable + +@item @emph{Return value}: +Does not return anything. + +@item @emph{Example}: +See @code{RAND} and @code{IRAND} for examples. + +@item @emph{Notes}: +The Fortran 2003 standard specifies the intrinsic @code{RANDOM_SEED} to +initialize the pseudo-random numbers generator and @code{RANDOM_NUMBER} +to generate pseudo-random numbers. Please note that in +GNU Fortran, these two sets of intrinsics (@code{RAND}, +@code{IRAND} and @code{SRAND} on the one hand, @code{RANDOM_NUMBER} and +@code{RANDOM_SEED} on the other hand) access two independent +pseudo-random number generators. + +@item @emph{See also}: +@ref{RAND}, @ref{RANDOM_SEED}, @ref{RANDOM_NUMBER} + +@end table + + + +@node STAT +@section @code{STAT} --- Get file status +@fnindex STAT +@cindex file system, file status + +@table @asis +@item @emph{Description}: +This function returns information about a file. No permissions are required on +the file itself, but execute (search) permission is required on all of the +directories in path that lead to the file. + +The elements that are obtained and stored in the array @code{BUFF}: +@multitable @columnfractions .15 .70 +@item @code{buff(1)} @tab Device ID +@item @code{buff(2)} @tab Inode number +@item @code{buff(3)} @tab File mode +@item @code{buff(4)} @tab Number of links +@item @code{buff(5)} @tab Owner's uid +@item @code{buff(6)} @tab Owner's gid +@item @code{buff(7)} @tab ID of device containing directory entry for file (0 if not available) +@item @code{buff(8)} @tab File size (bytes) +@item @code{buff(9)} @tab Last access time +@item @code{buff(10)} @tab Last modification time +@item @code{buff(11)} @tab Last file status change time +@item @code{buff(12)} @tab Preferred I/O block size (-1 if not available) +@item @code{buff(13)} @tab Number of blocks allocated (-1 if not available) +@end multitable + +Not all these elements are relevant on all systems. +If an element is not relevant, it is returned as 0. + +This intrinsic is provided in both subroutine and function forms; however, +only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@code{CALL STAT(FILE,BUFF[,STATUS])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{FILE} @tab The type shall be @code{CHARACTER}, of the +default kind and a valid path within the file system. +@item @var{BUFF} @tab The type shall be @code{INTEGER(4), DIMENSION(13)}. +@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)}. Returns 0 +on success and a system specific error code otherwise. +@end multitable + +@item @emph{Example}: +@smallexample +PROGRAM test_stat + INTEGER, DIMENSION(13) :: buff + INTEGER :: status + + CALL STAT("/etc/passwd", buff, status) + + IF (status == 0) THEN + WRITE (*, FMT="('Device ID:', T30, I19)") buff(1) + WRITE (*, FMT="('Inode number:', T30, I19)") buff(2) + WRITE (*, FMT="('File mode (octal):', T30, O19)") buff(3) + WRITE (*, FMT="('Number of links:', T30, I19)") buff(4) + WRITE (*, FMT="('Owner''s uid:', T30, I19)") buff(5) + WRITE (*, FMT="('Owner''s gid:', T30, I19)") buff(6) + WRITE (*, FMT="('Device where located:', T30, I19)") buff(7) + WRITE (*, FMT="('File size:', T30, I19)") buff(8) + WRITE (*, FMT="('Last access time:', T30, A19)") CTIME(buff(9)) + WRITE (*, FMT="('Last modification time', T30, A19)") CTIME(buff(10)) + WRITE (*, FMT="('Last status change time:', T30, A19)") CTIME(buff(11)) + WRITE (*, FMT="('Preferred block size:', T30, I19)") buff(12) + WRITE (*, FMT="('No. of blocks allocated:', T30, I19)") buff(13) + END IF +END PROGRAM +@end smallexample + +@item @emph{See also}: +To stat an open file: @ref{FSTAT}, to stat a link: @ref{LSTAT} +@end table + + + +@node SUM +@section @code{SUM} --- Sum of array elements +@fnindex SUM +@cindex array, sum +@cindex array, add elements +@cindex array, conditionally add elements +@cindex sum array elements + +@table @asis +@item @emph{Description}: +Adds the elements of @var{ARRAY} along dimension @var{DIM} if +the corresponding element in @var{MASK} is @code{TRUE}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = SUM(ARRAY[, MASK])} +@code{RESULT = SUM(ARRAY, DIM[, MASK])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER}, +@code{REAL} or @code{COMPLEX}. +@item @var{DIM} @tab (Optional) shall be a scalar of type +@code{INTEGER} with a value in the range from 1 to n, where n +equals the rank of @var{ARRAY}. +@item @var{MASK} @tab (Optional) shall be of type @code{LOGICAL} +and either be a scalar or an array of the same shape as @var{ARRAY}. +@end multitable + +@item @emph{Return value}: +The result is of the same type as @var{ARRAY}. + +If @var{DIM} is absent, a scalar with the sum of all elements in @var{ARRAY} +is returned. Otherwise, an array of rank n-1, where n equals the rank of +@var{ARRAY},and a shape similar to that of @var{ARRAY} with dimension @var{DIM} +dropped is returned. + +@item @emph{Example}: +@smallexample +PROGRAM test_sum + INTEGER :: x(5) = (/ 1, 2, 3, 4 ,5 /) + print *, SUM(x) ! all elements, sum = 15 + print *, SUM(x, MASK=MOD(x, 2)==1) ! odd elements, sum = 9 +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{PRODUCT} +@end table + + + +@node SYMLNK +@section @code{SYMLNK} --- Create a symbolic link +@fnindex SYMLNK +@cindex file system, create link +@cindex file system, soft link + +@table @asis +@item @emph{Description}: +Makes a symbolic link from file @var{PATH1} to @var{PATH2}. A null +character (@code{CHAR(0)}) can be used to mark the end of the names in +@var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file +names are ignored. If the @var{STATUS} argument is supplied, it +contains 0 on success or a nonzero error code upon return; see +@code{symlink(2)}. If the system does not supply @code{symlink(2)}, +@code{ENOSYS} is returned. + +This intrinsic is provided in both subroutine and function forms; +however, only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL SYMLNK(PATH1, PATH2 [, STATUS])} +@item @code{STATUS = SYMLNK(PATH1, PATH2)} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{PATH1} @tab Shall be of default @code{CHARACTER} type. +@item @var{PATH2} @tab Shall be of default @code{CHARACTER} type. +@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type. +@end multitable + +@item @emph{See also}: +@ref{LINK}, @ref{UNLINK} + +@end table + + + +@node SYSTEM +@section @code{SYSTEM} --- Execute a shell command +@fnindex SYSTEM +@cindex system, system call + +@table @asis +@item @emph{Description}: +Passes the command @var{COMMAND} to a shell (see @code{system(3)}). If +argument @var{STATUS} is present, it contains the value returned by +@code{system(3)}, which is presumably 0 if the shell command succeeded. +Note that which shell is used to invoke the command is system-dependent +and environment-dependent. + +This intrinsic is provided in both subroutine and function forms; +however, only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL SYSTEM(COMMAND [, STATUS])} +@item @code{STATUS = SYSTEM(COMMAND)} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{COMMAND} @tab Shall be of default @code{CHARACTER} type. +@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type. +@end multitable + +@item @emph{See also}: +@end table + + + +@node SYSTEM_CLOCK +@section @code{SYSTEM_CLOCK} --- Time function +@fnindex SYSTEM_CLOCK +@cindex time, clock ticks +@cindex clock ticks + +@table @asis +@item @emph{Description}: +Determines the @var{COUNT} of milliseconds of wall clock time since +the Epoch (00:00:00 UTC, January 1, 1970) modulo @var{COUNT_MAX}, +@var{COUNT_RATE} determines the number of clock ticks per second. +@var{COUNT_RATE} and @var{COUNT_MAX} are constant and specific to +@command{gfortran}. + +If there is no clock, @var{COUNT} is set to @code{-HUGE(COUNT)}, and +@var{COUNT_RATE} and @var{COUNT_MAX} are set to zero + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL SYSTEM_CLOCK([COUNT, COUNT_RATE, COUNT_MAX])} + +@item @emph{Arguments}: +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{COUNT} @tab (Optional) shall be a scalar of type default +@code{INTEGER} with @code{INTENT(OUT)}. +@item @var{COUNT_RATE} @tab (Optional) shall be a scalar of type default +@code{INTEGER} with @code{INTENT(OUT)}. +@item @var{COUNT_MAX} @tab (Optional) shall be a scalar of type default +@code{INTEGER} with @code{INTENT(OUT)}. +@end multitable + +@item @emph{Example}: +@smallexample +PROGRAM test_system_clock + INTEGER :: count, count_rate, count_max + CALL SYSTEM_CLOCK(count, count_rate, count_max) + WRITE(*,*) count, count_rate, count_max +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{DATE_AND_TIME}, @ref{CPU_TIME} +@end table + + + +@node TAN +@section @code{TAN} --- Tangent function +@fnindex TAN +@fnindex DTAN +@cindex trigonometric function, tangent +@cindex tangent + +@table @asis +@item @emph{Description}: +@code{TAN(X)} computes the tangent of @var{X}. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = TAN(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL}. The kind type parameter is +the same as @var{X}. + +@item @emph{Example}: +@smallexample +program test_tan + real(8) :: x = 0.165_8 + x = tan(x) +end program test_tan +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DTAN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 95 and later +@end multitable + +@item @emph{See also}: +@ref{ATAN} +@end table + + + +@node TANH +@section @code{TANH} --- Hyperbolic tangent function +@fnindex TANH +@fnindex DTANH +@cindex hyperbolic tangent +@cindex hyperbolic function, tangent +@cindex tangent, hyperbolic + +@table @asis +@item @emph{Description}: +@code{TANH(X)} computes the hyperbolic tangent of @var{X}. + +@item @emph{Standard}: +Fortran 77 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{X = TANH(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL} and lies in the range +@math{ - 1 \leq tanh(x) \leq 1 }. + +@item @emph{Example}: +@smallexample +program test_tanh + real(8) :: x = 2.1_8 + x = tanh(x) +end program test_tanh +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .20 .20 .20 .25 +@item Name @tab Argument @tab Return type @tab Standard +@item @code{DTANH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab Fortran 95 and later +@end multitable + +@item @emph{See also}: +@ref{ATANH} +@end table + + + +@node TIME +@section @code{TIME} --- Time function +@fnindex TIME +@cindex time, current +@cindex current time + +@table @asis +@item @emph{Description}: +Returns the current time encoded as an integer (in the manner of the +UNIX function @code{time(3)}). This value is suitable for passing to +@code{CTIME()}, @code{GMTIME()}, and @code{LTIME()}. + +This intrinsic is not fully portable, such as to systems with 32-bit +@code{INTEGER} types but supporting times wider than 32 bits. Therefore, +the values returned by this intrinsic might be, or become, negative, or +numerically less than previous values, during a single run of the +compiled program. + +See @ref{TIME8}, for information on a similar intrinsic that might be +portable to more GNU Fortran implementations, though to fewer Fortran +compilers. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = TIME()} + +@item @emph{Return value}: +The return value is a scalar of type @code{INTEGER(4)}. + +@item @emph{See also}: +@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK}, @ref{TIME8} + +@end table + + + +@node TIME8 +@section @code{TIME8} --- Time function (64-bit) +@fnindex TIME8 +@cindex time, current +@cindex current time + +@table @asis +@item @emph{Description}: +Returns the current time encoded as an integer (in the manner of the +UNIX function @code{time(3)}). This value is suitable for passing to +@code{CTIME()}, @code{GMTIME()}, and @code{LTIME()}. + +@emph{Warning:} this intrinsic does not increase the range of the timing +values over that returned by @code{time(3)}. On a system with a 32-bit +@code{time(3)}, @code{TIME8()} will return a 32-bit value, even though +it is converted to a 64-bit @code{INTEGER(8)} value. That means +overflows of the 32-bit value can still occur. Therefore, the values +returned by this intrinsic might be or become negative or numerically +less than previous values during a single run of the compiled program. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = TIME8()} + +@item @emph{Return value}: +The return value is a scalar of type @code{INTEGER(8)}. + +@item @emph{See also}: +@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{MCLOCK8}, @ref{TIME} + +@end table + + + +@node TINY +@section @code{TINY} --- Smallest positive number of a real kind +@fnindex TINY +@cindex limits, smallest number +@cindex model representation, smallest number + +@table @asis +@item @emph{Description}: +@code{TINY(X)} returns the smallest positive (non zero) number +in the model of the type of @code{X}. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = TINY(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab Shall be of type @code{REAL}. +@end multitable + +@item @emph{Return value}: +The return value is of the same type and kind as @var{X} + +@item @emph{Example}: +See @code{HUGE} for an example. +@end table + + + +@node TRAILZ +@section @code{TRAILZ} --- Number of trailing zero bits of an integer +@fnindex TRAILZ +@cindex zero bits + +@table @asis +@item @emph{Description}: +@code{TRAILZ} returns the number of trailing zero bits of an integer. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = TRAILZ(I)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{I} @tab Shall be of type @code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The type of the return value is the default @code{INTEGER}. +If all the bits of @code{I} are zero, the result value is @code{BIT_SIZE(I)}. + +@item @emph{Example}: +@smallexample +PROGRAM test_trailz + WRITE (*,*) TRAILZ(8) ! prints 3 +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{BIT_SIZE}, @ref{LEADZ} +@end table + + + +@node TRANSFER +@section @code{TRANSFER} --- Transfer bit patterns +@fnindex TRANSFER +@cindex bits, move +@cindex type cast + +@table @asis +@item @emph{Description}: +Interprets the bitwise representation of @var{SOURCE} in memory as if it +is the representation of a variable or array of the same type and type +parameters as @var{MOLD}. + +This is approximately equivalent to the C concept of @emph{casting} one +type to another. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = TRANSFER(SOURCE, MOLD[, SIZE])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{SOURCE} @tab Shall be a scalar or an array of any type. +@item @var{MOLD} @tab Shall be a scalar or an array of any type. +@item @var{SIZE} @tab (Optional) shall be a scalar of type +@code{INTEGER}. +@end multitable + +@item @emph{Return value}: +The result has the same type as @var{MOLD}, with the bit level +representation of @var{SOURCE}. If @var{SIZE} is present, the result is +a one-dimensional array of length @var{SIZE}. If @var{SIZE} is absent +but @var{MOLD} is an array (of any size or shape), the result is a one- +dimensional array of the minimum length needed to contain the entirety +of the bitwise representation of @var{SOURCE}. If @var{SIZE} is absent +and @var{MOLD} is a scalar, the result is a scalar. + +If the bitwise representation of the result is longer than that of +@var{SOURCE}, then the leading bits of the result correspond to those of +@var{SOURCE} and any trailing bits are filled arbitrarily. + +When the resulting bit representation does not correspond to a valid +representation of a variable of the same type as @var{MOLD}, the results +are undefined, and subsequent operations on the result cannot be +guaranteed to produce sensible behavior. For example, it is possible to +create @code{LOGICAL} variables for which @code{@var{VAR}} and +@code{.NOT.@var{VAR}} both appear to be true. + +@item @emph{Example}: +@smallexample +PROGRAM test_transfer + integer :: x = 2143289344 + print *, transfer(x, 1.0) ! prints "NaN" on i686 +END PROGRAM +@end smallexample +@end table + + + +@node TRANSPOSE +@section @code{TRANSPOSE} --- Transpose an array of rank two +@fnindex TRANSPOSE +@cindex array, transpose +@cindex matrix, transpose +@cindex transpose + +@table @asis +@item @emph{Description}: +Transpose an array of rank two. Element (i, j) of the result has the value +@code{MATRIX(j, i)}, for all i, j. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = TRANSPOSE(MATRIX)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{MATRIX} @tab Shall be an array of any type and have a rank of two. +@end multitable + +@item @emph{Return value}: +The result has the same type as @var{MATRIX}, and has shape +@code{(/ m, n /)} if @var{MATRIX} has shape @code{(/ n, m /)}. +@end table + + + +@node TRIM +@section @code{TRIM} --- Remove trailing blank characters of a string +@fnindex TRIM +@cindex string, remove trailing whitespace + +@table @asis +@item @emph{Description}: +Removes trailing blank characters of a string. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = TRIM(STRING)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER}. +@end multitable + +@item @emph{Return value}: +A scalar of type @code{CHARACTER} which length is that of @var{STRING} +less the number of trailing blanks. + +@item @emph{Example}: +@smallexample +PROGRAM test_trim + CHARACTER(len=10), PARAMETER :: s = "GFORTRAN " + WRITE(*,*) LEN(s), LEN(TRIM(s)) ! "10 8", with/without trailing blanks +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{ADJUSTL}, @ref{ADJUSTR} +@end table + + + +@node TTYNAM +@section @code{TTYNAM} --- Get the name of a terminal device. +@fnindex TTYNAM +@cindex system, terminal + +@table @asis +@item @emph{Description}: +Get the name of a terminal device. For more information, +see @code{ttyname(3)}. + +This intrinsic is provided in both subroutine and function forms; +however, only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL TTYNAM(UNIT, NAME)} +@item @code{NAME = TTYNAM(UNIT)} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{UNIT} @tab Shall be a scalar @code{INTEGER}. +@item @var{NAME} @tab Shall be of type @code{CHARACTER}. +@end multitable + +@item @emph{Example}: +@smallexample +PROGRAM test_ttynam + INTEGER :: unit + DO unit = 1, 10 + IF (isatty(unit=unit)) write(*,*) ttynam(unit) + END DO +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{ISATTY} +@end table + + + +@node UBOUND +@section @code{UBOUND} --- Upper dimension bounds of an array +@fnindex UBOUND +@cindex array, upper bound + +@table @asis +@item @emph{Description}: +Returns the upper bounds of an array, or a single upper bound +along the @var{DIM} dimension. +@item @emph{Standard}: +Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later + +@item @emph{Class}: +Inquiry function + +@item @emph{Syntax}: +@code{RESULT = UBOUND(ARRAY [, DIM [, KIND]])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{ARRAY} @tab Shall be an array, of any type. +@item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER}. +@item @var{KIND}@tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of kind @var{KIND}. If +@var{KIND} is absent, the return value is of default integer kind. +If @var{DIM} is absent, the result is an array of the upper bounds of +@var{ARRAY}. If @var{DIM} is present, the result is a scalar +corresponding to the upper bound of the array along that dimension. If +@var{ARRAY} is an expression rather than a whole array or array +structure component, or if it has a zero extent along the relevant +dimension, the upper bound is taken to be the number of elements along +the relevant dimension. + +@item @emph{See also}: +@ref{LBOUND} +@end table + + + +@node UMASK +@section @code{UMASK} --- Set the file creation mask +@fnindex UMASK +@cindex file system, file creation mask + +@table @asis +@item @emph{Description}: +Sets the file creation mask to @var{MASK} and returns the old value in +argument @var{OLD} if it is supplied. See @code{umask(2)}. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine + +@item @emph{Syntax}: +@code{CALL UMASK(MASK [, OLD])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{MASK} @tab Shall be a scalar of type @code{INTEGER}. +@item @var{MASK} @tab (Optional) Shall be a scalar of type +@code{INTEGER}. +@end multitable + +@end table + + + +@node UNLINK +@section @code{UNLINK} --- Remove a file from the file system +@fnindex UNLINK +@cindex file system, remove file + +@table @asis +@item @emph{Description}: +Unlinks the file @var{PATH}. A null character (@code{CHAR(0)}) can be +used to mark the end of the name in @var{PATH}; otherwise, trailing +blanks in the file name are ignored. If the @var{STATUS} argument is +supplied, it contains 0 on success or a nonzero error code upon return; +see @code{unlink(2)}. + +This intrinsic is provided in both subroutine and function forms; +however, only one form can be used in any given program unit. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Subroutine, function + +@item @emph{Syntax}: +@multitable @columnfractions .80 +@item @code{CALL UNLINK(PATH [, STATUS])} +@item @code{STATUS = UNLINK(PATH)} +@end multitable + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{PATH} @tab Shall be of default @code{CHARACTER} type. +@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type. +@end multitable + +@item @emph{See also}: +@ref{LINK}, @ref{SYMLNK} +@end table + + + +@node UNPACK +@section @code{UNPACK} --- Unpack an array of rank one into an array +@fnindex UNPACK +@cindex array, unpacking +@cindex array, increase dimension +@cindex array, scatter elements + +@table @asis +@item @emph{Description}: +Store the elements of @var{VECTOR} in an array of higher rank. + +@item @emph{Standard}: +Fortran 95 and later + +@item @emph{Class}: +Transformational function + +@item @emph{Syntax}: +@code{RESULT = UNPACK(VECTOR, MASK, FIELD)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{VECTOR} @tab Shall be an array of any type and rank one. It +shall have at least as many elements as @var{MASK} has @code{TRUE} values. +@item @var{MASK} @tab Shall be an array of type @code{LOGICAL}. +@item @var{FIELD} @tab Shall be of the same type as @var{VECTOR} and have +the same shape as @var{MASK}. +@end multitable + +@item @emph{Return value}: +The resulting array corresponds to @var{FIELD} with @code{TRUE} elements +of @var{MASK} replaced by values from @var{VECTOR} in array element order. + +@item @emph{Example}: +@smallexample +PROGRAM test_unpack + integer :: vector(2) = (/1,1/) + logical :: mask(4) = (/ .TRUE., .FALSE., .FALSE., .TRUE. /) + integer :: field(2,2) = 0, unity(2,2) + + ! result: unity matrix + unity = unpack(vector, reshape(mask, (/2,2/)), field) +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{PACK}, @ref{SPREAD} +@end table + + + +@node VERIFY +@section @code{VERIFY} --- Scan a string for the absence of a set of characters +@fnindex VERIFY +@cindex string, find missing set + +@table @asis +@item @emph{Description}: +Verifies that all the characters in a @var{SET} are present in a @var{STRING}. + +If @var{BACK} is either absent or equals @code{FALSE}, this function +returns the position of the leftmost character of @var{STRING} that is +not in @var{SET}. If @var{BACK} equals @code{TRUE}, the rightmost position +is returned. If all characters of @var{SET} are found in @var{STRING}, the +result is zero. + +@item @emph{Standard}: +Fortran 95 and later, with @var{KIND} argument Fortran 2003 and later + +@item @emph{Class}: +Elemental function + +@item @emph{Syntax}: +@code{RESULT = VERIFY(STRING, SET[, BACK [, KIND]])} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{STRING} @tab Shall be of type @code{CHARACTER}. +@item @var{SET} @tab Shall be of type @code{CHARACTER}. +@item @var{BACK} @tab (Optional) shall be of type @code{LOGICAL}. +@item @var{KIND} @tab (Optional) An @code{INTEGER} initialization +expression indicating the kind parameter of the result. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{INTEGER} and of kind @var{KIND}. If +@var{KIND} is absent, the return value is of default integer kind. + +@item @emph{Example}: +@smallexample +PROGRAM test_verify + WRITE(*,*) VERIFY("FORTRAN", "AO") ! 1, found 'F' + WRITE(*,*) VERIFY("FORTRAN", "FOO") ! 3, found 'R' + WRITE(*,*) VERIFY("FORTRAN", "C++") ! 1, found 'F' + WRITE(*,*) VERIFY("FORTRAN", "C++", .TRUE.) ! 7, found 'N' + WRITE(*,*) VERIFY("FORTRAN", "FORTRAN") ! 0' found none +END PROGRAM +@end smallexample + +@item @emph{See also}: +@ref{SCAN}, @ref{INDEX intrinsic} +@end table + + + +@node XOR +@section @code{XOR} --- Bitwise logical exclusive OR +@fnindex XOR +@cindex bitwise logical exclusive or +@cindex logical exclusive or, bitwise + +@table @asis +@item @emph{Description}: +Bitwise logical exclusive or. + +This intrinsic routine is provided for backwards compatibility with +GNU Fortran 77. For integer arguments, programmers should consider +the use of the @ref{IEOR} intrinsic defined by the Fortran standard. + +@item @emph{Standard}: +GNU extension + +@item @emph{Class}: +Function + +@item @emph{Syntax}: +@code{RESULT = XOR(X, Y)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{X} @tab The type shall be either a scalar @code{INTEGER} +type or a scalar @code{LOGICAL} type. +@item @var{Y} @tab The type shall be the same as the type of @var{I}. +@end multitable + +@item @emph{Return value}: +The return type is either a scalar @code{INTEGER} or a scalar +@code{LOGICAL}. If the kind type parameters differ, then the +smaller kind type is implicitly converted to larger kind, and the +return has the larger kind. + +@item @emph{Example}: +@smallexample +PROGRAM test_xor + LOGICAL :: T = .TRUE., F = .FALSE. + INTEGER :: a, b + DATA a / Z'F' /, b / Z'3' / + + WRITE (*,*) XOR(T, T), XOR(T, F), XOR(F, T), XOR(F, F) + WRITE (*,*) XOR(a, b) +END PROGRAM +@end smallexample + +@item @emph{See also}: +Fortran 95 elemental function: @ref{IEOR} +@end table + + + +@node Intrinsic Modules +@chapter Intrinsic Modules +@cindex intrinsic Modules + +@c @node ISO_FORTRAN_ENV +@section @code{ISO_FORTRAN_ENV} +@table @asis +@item @emph{Standard}: +Fortran 2003 and later +@end table + +The @code{ISO_FORTRAN_ENV} module provides the following scalar default-integer +named constants: + +@table @asis +@item @code{CHARACTER_STORAGE_SIZE}: +Size in bits of the character storage unit. + +@item @code{ERROR_UNIT}: +Identifies the preconnected unit used for error reporting. + +@item @code{FILE_STORAGE_SIZE}: +Size in bits of the file-storage unit. + +@item @code{INPUT_UNIT}: +Identifies the preconnected unit identified by the asterisk +(@code{*}) in @code{READ} statement. + +@item @code{IOSTAT_END}: +The value assigned to the variable passed to the IOSTAT= specifier of +an input/output statement if an end-of-file condition occurred. + +@item @code{IOSTAT_EOR}: +The value assigned to the variable passed to the IOSTAT= specifier of +an input/output statement if an end-of-record condition occurred. + +@item @code{NUMERIC_STORAGE_SIZE}: +The size in bits of the numeric storage unit. + +@item @code{OUTPUT_UNIT}: +Identifies the preconnected unit identified by the asterisk +(@code{*}) in @code{WRITE} statement. +@end table + +@c @node ISO_C_BINDING +@section @code{ISO_C_BINDING} +@table @asis +@item @emph{Standard}: +Fortran 2003 and later, GNU extensions +@end table + +The following intrinsic procedures are provided by the module; their +definition can be found in the section Intrinsic Procedures of this +manual. + +@table @asis +@item @code{C_ASSOCIATED} +@item @code{C_F_POINTER} +@item @code{C_F_PROCPOINTER} +@item @code{C_FUNLOC} +@item @code{C_LOC} +@end table +@c TODO: Vertical spacing between C_FUNLOC and C_LOC wrong in PDF, +@c don't really know why. + +The @code{ISO_C_BINDING} module provides the following named constants of the +type integer, which can be used as KIND type parameter. Note that GNU +Fortran currently does not support the @code{C_INT_FAST...} KIND type +parameters (marked by an asterisk (@code{*}) in the list below). +The @code{C_INT_FAST...} parameters have therefore the value @math{-2} +and cannot be used as KIND type parameter of the @code{INTEGER} type. + +In addition to the integer named constants required by the Fortran 2003 +standard, GNU Fortran provides as an extension named constants for the +128-bit integer types supported by the C compiler: @code{C_INT128_T, +C_INT_LEAST128_T, C_INT_FAST128_T}. + +@multitable @columnfractions .15 .35 .35 .35 +@item Fortran Type @tab Named constant @tab C type @tab Extension +@item @code{INTEGER}@tab @code{C_INT} @tab @code{int} +@item @code{INTEGER}@tab @code{C_SHORT} @tab @code{short int} +@item @code{INTEGER}@tab @code{C_LONG} @tab @code{long int} +@item @code{INTEGER}@tab @code{C_LONG_LONG} @tab @code{long long int} +@item @code{INTEGER}@tab @code{C_SIGNED_CHAR} @tab @code{signed char}/@code{unsigned char} +@item @code{INTEGER}@tab @code{C_SIZE_T} @tab @code{size_t} +@item @code{INTEGER}@tab @code{C_INT8_T} @tab @code{int8_t} +@item @code{INTEGER}@tab @code{C_INT16_T} @tab @code{int16_t} +@item @code{INTEGER}@tab @code{C_INT32_T} @tab @code{int32_t} +@item @code{INTEGER}@tab @code{C_INT64_T} @tab @code{int64_t} +@item @code{INTEGER}@tab @code{C_INT128_T} @tab @code{int128_t} @tab Ext. +@item @code{INTEGER}@tab @code{C_INT_LEAST8_T} @tab @code{int_least8_t} +@item @code{INTEGER}@tab @code{C_INT_LEAST16_T} @tab @code{int_least16_t} +@item @code{INTEGER}@tab @code{C_INT_LEAST32_T} @tab @code{int_least32_t} +@item @code{INTEGER}@tab @code{C_INT_LEAST64_T} @tab @code{int_least64_t} +@item @code{INTEGER}@tab @code{C_INT_LEAST128_T} @tab @code{int_least128_t} @tab Ext. +@item @code{INTEGER}@tab @code{C_INT_FAST8_T}* @tab @code{int_fast8_t} +@item @code{INTEGER}@tab @code{C_INT_FAST16_T}* @tab @code{int_fast16_t} +@item @code{INTEGER}@tab @code{C_INT_FAST32_T}* @tab @code{int_fast32_t} +@item @code{INTEGER}@tab @code{C_INT_FAST64_T}* @tab @code{int_fast64_t} +@item @code{INTEGER}@tab @code{C_INT_FAST128_T}* @tab @code{int_fast128_t} @tab Ext. +@item @code{INTEGER}@tab @code{C_INTMAX_T} @tab @code{intmax_t} +@item @code{INTEGER}@tab @code{C_INTPTR_T} @tab @code{intptr_t} +@item @code{REAL} @tab @code{C_FLOAT} @tab @code{float} +@item @code{REAL} @tab @code{C_DOUBLE} @tab @code{double} +@item @code{REAL} @tab @code{C_LONG_DOUBLE} @tab @code{long double} +@item @code{COMPLEX}@tab @code{C_FLOAT_COMPLEX} @tab @code{float _Complex} +@item @code{COMPLEX}@tab @code{C_DOUBLE_COMPLEX}@tab @code{double _Complex} +@item @code{COMPLEX}@tab @code{C_LONG_DOUBLE_COMPLEX}@tab @code{long double _Complex} +@item @code{LOGICAL}@tab @code{C_BOOL} @tab @code{_Bool} +@item @code{CHARACTER}@tab @code{C_CHAR} @tab @code{char} +@end multitable + +Additionally, the following @code{(CHARACTER(KIND=C_CHAR))} are +defined. + +@multitable @columnfractions .20 .45 .15 +@item Name @tab C definition @tab Value +@item @code{C_NULL_CHAR} @tab null character @tab @code{'\0'} +@item @code{C_ALERT} @tab alert @tab @code{'\a'} +@item @code{C_BACKSPACE} @tab backspace @tab @code{'\b'} +@item @code{C_FORM_FEED} @tab form feed @tab @code{'\f'} +@item @code{C_NEW_LINE} @tab new line @tab @code{'\n'} +@item @code{C_CARRIAGE_RETURN} @tab carriage return @tab @code{'\r'} +@item @code{C_HORIZONTAL_TAB} @tab horizontal tab @tab @code{'\t'} +@item @code{C_VERTICAL_TAB} @tab vertical tab @tab @code{'\v'} +@end multitable + +@c @node OpenMP Modules OMP_LIB and OMP_LIB_KINDS +@section OpenMP Modules @code{OMP_LIB} and @code{OMP_LIB_KINDS} +@table @asis +@item @emph{Standard}: +OpenMP Application Program Interface v3.0 +@end table + + +The OpenMP Fortran runtime library routines are provided both in +a form of two Fortran 90 modules, named @code{OMP_LIB} and +@code{OMP_LIB_KINDS}, and in a form of a Fortran @code{include} file named +@file{omp_lib.h}. The procedures provided by @code{OMP_LIB} can be found +in the @ref{Top,,Introduction,libgomp,GNU OpenMP runtime library} manual, +the named constants defined in the @code{OMP_LIB_KINDS} module are listed +below. + +For details refer to the actual +@uref{http://www.openmp.org/mp-documents/spec30.pdf, +OpenMP Application Program Interface v3.0}. + +@code{OMP_LIB_KINDS} provides the following scalar default-integer +named constants: + +@table @asis +@item @code{omp_integer_kind} +@item @code{omp_logical_kind} +@item @code{omp_lock_kind} +@item @code{omp_nest_lock_kind} +@item @code{omp_sched_kind} +@end table diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/invoke.texi b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/invoke.texi new file mode 100644 index 0000000000..8e18dd2342 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/invoke.texi @@ -0,0 +1,1369 @@ +@c Copyright (C) 2004, 2005, 2006, 2007, 2008 +@c Free Software Foundation, Inc. +@c This is part of the GNU Fortran manual. +@c For copying conditions, see the file gfortran.texi. + +@ignore +@c man begin COPYRIGHT +Copyright @copyright{} 2004, 2005, 2006, 2007, 2008 +Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with the +Invariant Sections being ``Funding Free Software'', the Front-Cover +Texts being (a) (see below), and with the Back-Cover Texts being (b) +(see below). A copy of the license is included in the gfdl(7) man page. + +(a) The FSF's Front-Cover Text is: + + A GNU Manual + +(b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU + software. Copies published by the Free Software Foundation raise + funds for GNU development. +@c man end +@c Set file name and title for the man page. +@setfilename gfortran +@settitle GNU Fortran compiler. +@c man begin SYNOPSIS +gfortran [@option{-c}|@option{-S}|@option{-E}] + [@option{-g}] [@option{-pg}] [@option{-O}@var{level}] + [@option{-W}@var{warn}@dots{}] [@option{-pedantic}] + [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}] + [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}] + [@option{-f}@var{option}@dots{}] + [@option{-m}@var{machine-option}@dots{}] + [@option{-o} @var{outfile}] @var{infile}@dots{} + +Only the most useful options are listed here; see below for the +remainder. +@c man end +@c man begin SEEALSO +gpl(7), gfdl(7), fsf-funding(7), +cpp(1), gcov(1), gcc(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1) +and the Info entries for @file{gcc}, @file{cpp}, @file{gfortran}, @file{as}, +@file{ld}, @file{binutils} and @file{gdb}. +@c man end +@c man begin BUGS +For instructions on reporting bugs, see +@w{@value{BUGURL}}. +@c man end +@c man begin AUTHOR +See the Info entry for @command{gfortran} for contributors to GCC and +GNU Fortran. +@c man end +@end ignore + +@node Invoking GNU Fortran +@chapter GNU Fortran Command Options +@cindex GNU Fortran command options +@cindex command options +@cindex options, @command{gfortran} command + +@c man begin DESCRIPTION + +The @command{gfortran} command supports all the options supported by the +@command{gcc} command. Only options specific to GNU Fortran are documented here. + +@xref{Invoking GCC,,GCC Command Options,gcc,Using the GNU Compiler +Collection (GCC)}, for information +on the non-Fortran-specific aspects of the @command{gcc} command (and, +therefore, the @command{gfortran} command). + +@cindex options, negative forms +All GCC and GNU Fortran options +are accepted both by @command{gfortran} and by @command{gcc} +(as well as any other drivers built at the same time, +such as @command{g++}), +since adding GNU Fortran to the GCC distribution +enables acceptance of GNU Fortran options +by all of the relevant drivers. + +In some cases, options have positive and negative forms; +the negative form of @option{-ffoo} would be @option{-fno-foo}. +This manual documents only one of these two forms, whichever +one is not the default. +@c man end + +@menu +* Option Summary:: Brief list of all @command{gfortran} options, + without explanations. +* Fortran Dialect Options:: Controlling the variant of Fortran language + compiled. +* Preprocessing Options:: Enable and customize preprocessing. +* Error and Warning Options:: How picky should the compiler be? +* Debugging Options:: Symbol tables, measurements, and debugging dumps. +* Directory Options:: Where to find module files +* Link Options :: Influencing the linking step +* Runtime Options:: Influencing runtime behavior +* Code Gen Options:: Specifying conventions for function calls, data layout + and register usage. +* Environment Variables:: Environment variables that affect @command{gfortran}. +@end menu + +@node Option Summary +@section Option summary + +@c man begin OPTIONS + +Here is a summary of all the options specific to GNU Fortran, grouped +by type. Explanations are in the following sections. + +@table @emph +@item Fortran Language Options +@xref{Fortran Dialect Options,,Options controlling Fortran dialect}. +@gccoptlist{-fall-intrinsics -ffree-form -fno-fixed-form @gol +-fdollar-ok -fimplicit-none -fmax-identifier-length @gol +-std=@var{std} -fd-lines-as-code -fd-lines-as-comments @gol +-ffixed-line-length-@var{n} -ffixed-line-length-none @gol +-ffree-line-length-@var{n} -ffree-line-length-none @gol +-fdefault-double-8 -fdefault-integer-8 -fdefault-real-8 @gol +-fcray-pointer -fopenmp -fno-range-check -fbackslash -fmodule-private} + +@item Preprocessing Options +@xref{Preprocessing Options,,Enable and customize preprocessing}. +@gccoptlist{-cpp -dD -dI -dM -dN -dU -fworking-directory @gol +-imultilib @var{dir} -iprefix @var{file} -isysroot @var{dir} @gol +-iquote -isystem @var{dir} -nocpp -nostdinc -undef @gol +-A@var{question}=@var{answer} -A-@var{question}@r{[}=@var{answer}@r{]} @gol +-C -CC -D@var{macro}@r{[}=@var{defn}@r{]} -U@var{macro} -H -P} + +@item Error and Warning Options +@xref{Error and Warning Options,,Options to request or suppress errors +and warnings}. +@gccoptlist{-fmax-errors=@var{n} @gol +-fsyntax-only -pedantic -pedantic-errors @gol +-Wall -Waliasing -Wampersand -Warray-bounds -Wcharacter-truncation @gol +-Wconversion -Wimplicit-interface -Wline-truncation -Wintrinsics-std @gol +-Wsurprising -Wno-tabs -Wunderflow -Wunused-parameter -Wintrinsics-shadow @gol +-Wno-align-commons} + +@item Debugging Options +@xref{Debugging Options,,Options for debugging your program or GNU Fortran}. +@gccoptlist{-fdump-parse-tree -ffpe-trap=@var{list} @gol +-fdump-core -fbacktrace} + +@item Directory Options +@xref{Directory Options,,Options for directory search}. +@gccoptlist{-I@var{dir} -J@var{dir} -M@var{dir} @gol +-fintrinsic-modules-path @var{dir}} + +@item Link Options +@xref{Link Options,,Options for influencing the linking step}. +@gccoptlist{-static-libgfortran} + +@item Runtime Options +@xref{Runtime Options,,Options for influencing runtime behavior}. +@gccoptlist{-fconvert=@var{conversion} -fno-range-check +-frecord-marker=@var{length} @gol -fmax-subrecord-length=@var{length} +-fsign-zero} + +@item Code Generation Options +@xref{Code Gen Options,,Options for code generation conventions}. +@gccoptlist{-fno-automatic -ff2c -fno-underscoring @gol +-fsecond-underscore @gol +-fbounds-check -fcheck-array-temporaries -fmax-array-constructor =@var{n} @gol +-fmax-stack-var-size=@var{n} @gol +-fpack-derived -frepack-arrays -fshort-enums -fexternal-blas @gol +-fblas-matmul-limit=@var{n} -frecursive -finit-local-zero @gol +-finit-integer=@var{n} -finit-real=@var{} @gol +-finit-logical=@var{} -finit-character=@var{n} -fno-align-commons} +@end table + +@menu +* Fortran Dialect Options:: Controlling the variant of Fortran language + compiled. +* Preprocessing Options:: Enable and customize preprocessing. +* Error and Warning Options:: How picky should the compiler be? +* Debugging Options:: Symbol tables, measurements, and debugging dumps. +* Directory Options:: Where to find module files +* Link Options :: Influencing the linking step +* Runtime Options:: Influencing runtime behavior +* Code Gen Options:: Specifying conventions for function calls, data layout + and register usage. +@end menu + +@node Fortran Dialect Options +@section Options controlling Fortran dialect +@cindex dialect options +@cindex language, dialect options +@cindex options, dialect + +The following options control the details of the Fortran dialect +accepted by the compiler: + +@table @gcctabopt +@item -ffree-form +@item -ffixed-form +@opindex @code{ffree-form} +@opindex @code{fno-fixed-form} +@cindex options, fortran dialect +@cindex file format, free +@cindex file format, fixed +Specify the layout used by the source file. The free form layout +was introduced in Fortran 90. Fixed form was traditionally used in +older Fortran programs. When neither option is specified, the source +form is determined by the file extension. + +@item -fall-intrinsics +@opindex @code{fall-intrinsics} +This option causes all intrinsic procedures (including the GNU-specific +extensions) to be accepted. This can be useful with @option{-std=f95} to +force standard-compliance but get access to the full range of intrinsics +available with @command{gfortran}. As a consequence, @option{-Wintrinsics-std} +will be ignored and no user-defined procedure with the same name as any +intrinsic will be called except when it is explicitly declared @code{EXTERNAL}. + +@item -fd-lines-as-code +@item -fd-lines-as-comments +@opindex @code{fd-lines-as-code} +@opindex @code{fd-lines-as-comments} +Enable special treatment for lines beginning with @code{d} or @code{D} +in fixed form sources. If the @option{-fd-lines-as-code} option is +given they are treated as if the first column contained a blank. If the +@option{-fd-lines-as-comments} option is given, they are treated as +comment lines. + +@item -fdefault-double-8 +@opindex @code{fdefault-double-8} +Set the @code{DOUBLE PRECISION} type to an 8 byte wide type. If +@option{-fdefault-real-8} is given, @code{DOUBLE PRECISION} would +instead be promoted to 16 bytes if possible, and @option{-fdefault-double-8} +can be used to prevent this. The kind of real constants like @code{1.d0} will +not be changed by @option{-fdefault-real-8} though, so also +@option{-fdefault-double-8} does not affect it. + +@item -fdefault-integer-8 +@opindex @code{fdefault-integer-8} +Set the default integer and logical types to an 8 byte wide type. +Do nothing if this is already the default. This option also affects +the kind of integer constants like @code{42}. + +@item -fdefault-real-8 +@opindex @code{fdefault-real-8} +Set the default real type to an 8 byte wide type. +Do nothing if this is already the default. This option also affects +the kind of non-double real constants like @code{1.0}, and does promote +the default width of @code{DOUBLE PRECISION} to 16 bytes if possible, unless +@code{-fdefault-double-8} is given, too. + +@item -fdollar-ok +@opindex @code{fdollar-ok} +@cindex $ +@cindex symbol names +@cindex character set +Allow @samp{$} as a valid character in a symbol name. + +@item -fbackslash +@opindex @code{backslash} +@cindex backslash +@cindex escape characters +Change the interpretation of backslashes in string literals from a single +backslash character to ``C-style'' escape characters. The following +combinations are expanded @code{\a}, @code{\b}, @code{\f}, @code{\n}, +@code{\r}, @code{\t}, @code{\v}, @code{\\}, and @code{\0} to the ASCII +characters alert, backspace, form feed, newline, carriage return, +horizontal tab, vertical tab, backslash, and NUL, respectively. +Additionally, @code{\x}@var{nn}, @code{\u}@var{nnnn} and +@code{\U}@var{nnnnnnnn} (where each @var{n} is a hexadecimal digit) are +translated into the Unicode characters corresponding to the specified code +points. All other combinations of a character preceded by \ are +unexpanded. + +@item -fmodule-private +@opindex @code{fmodule-private} +@cindex module entities +@cindex private +Set the default accessibility of module entities to @code{PRIVATE}. +Use-associated entities will not be accessible unless they are explicitly +declared as @code{PUBLIC}. + +@item -ffixed-line-length-@var{n} +@opindex @code{ffixed-line-length-}@var{n} +@cindex file format, fixed +Set column after which characters are ignored in typical fixed-form +lines in the source file, and through which spaces are assumed (as +if padded to that length) after the ends of short fixed-form lines. + +Popular values for @var{n} include 72 (the +standard and the default), 80 (card image), and 132 (corresponding +to ``extended-source'' options in some popular compilers). +@var{n} may also be @samp{none}, meaning that the entire line is meaningful +and that continued character constants never have implicit spaces appended +to them to fill out the line. +@option{-ffixed-line-length-0} means the same thing as +@option{-ffixed-line-length-none}. + +@item -ffree-line-length-@var{n} +@opindex @code{ffree-line-length-}@var{n} +@cindex file format, free +Set column after which characters are ignored in typical free-form +lines in the source file. The default value is 132. +@var{n} may be @samp{none}, meaning that the entire line is meaningful. +@option{-ffree-line-length-0} means the same thing as +@option{-ffree-line-length-none}. + +@item -fmax-identifier-length=@var{n} +@opindex @code{fmax-identifier-length=}@var{n} +Specify the maximum allowed identifier length. Typical values are +31 (Fortran 95) and 63 (Fortran 2003 and Fortran 2008). + +@item -fimplicit-none +@opindex @code{fimplicit-none} +Specify that no implicit typing is allowed, unless overridden by explicit +@code{IMPLICIT} statements. This is the equivalent of adding +@code{implicit none} to the start of every procedure. + +@item -fcray-pointer +@opindex @code{fcray-pointer} +Enable the Cray pointer extension, which provides C-like pointer +functionality. + +@item -fopenmp +@opindex @code{fopenmp} +@cindex OpenMP +Enable the OpenMP extensions. This includes OpenMP @code{!$omp} directives +in free form +and @code{c$omp}, @code{*$omp} and @code{!$omp} directives in fixed form, +@code{!$} conditional compilation sentinels in free form +and @code{c$}, @code{*$} and @code{!$} sentinels in fixed form, +and when linking arranges for the OpenMP runtime library to be linked +in. The option @option{-fopenmp} implies @option{-frecursive}. + +@item -fno-range-check +@opindex @code{frange-check} +Disable range checking on results of simplification of constant +expressions during compilation. For example, GNU Fortran will give +an error at compile time when simplifying @code{a = 1. / 0}. +With this option, no error will be given and @code{a} will be assigned +the value @code{+Infinity}. If an expression evaluates to a value +outside of the relevant range of [@code{-HUGE()}:@code{HUGE()}], +then the expression will be replaced by @code{-Inf} or @code{+Inf} +as appropriate. +Similarly, @code{DATA i/Z'FFFFFFFF'/} will result in an integer overflow +on most systems, but with @option{-fno-range-check} the value will +``wrap around'' and @code{i} will be initialized to @math{-1} instead. + +@item -std=@var{std} +@opindex @code{std=}@var{std} option +Specify the standard to which the program is expected to conform, which +may be one of @samp{f95}, @samp{f2003}, @samp{f2008}, @samp{gnu}, or +@samp{legacy}. The default value for @var{std} is @samp{gnu}, which +specifies a superset of the Fortran 95 standard that includes all of the +extensions supported by GNU Fortran, although warnings will be given for +obsolete extensions not recommended for use in new code. The +@samp{legacy} value is equivalent but without the warnings for obsolete +extensions, and may be useful for old non-standard programs. The +@samp{f95}, @samp{f2003} and @samp{f2008} values specify strict +conformance to the Fortran 95, Fortran 2003 and Fortran 2008 standards, +respectively; errors are given for all extensions beyond the relevant +language standard, and warnings are given for the Fortran 77 features +that are permitted but obsolescent in later standards. + +@end table + +@node Preprocessing Options +@section Enable and customize preprocessing +@cindex preprocessor +@cindex options, preprocessor +@cindex CPP + +Preprocessor related options. See section +@ref{Preprocessing and conditional compilation} for more detailed +information on preprocessing in @command{gfortran}. + +@table @gcctabopt +@item -cpp +@item -nocpp +@opindex @code{cpp} +@opindex @code{fpp} +@cindex preprocessor, enable +@cindex preprocessor, disable +Enable preprocessing. The preprocessor is automatically invoked if +the file extension is @file{.fpp}, @file{.FPP}, @file{.F}, @file{.FOR}, +@file{.FTN}, @file{.F90}, @file{.F95}, @file{.F03} or @file{.F08}. Use +this option to manually enable preprocessing of any kind of Fortran file. + +To disable preprocessing of files with any of the above listed extensions, +use the negative form: @option{-nocpp}. + +The preprocessor is run in traditional mode, be aware that any +restrictions of the file-format, e.g. fixed-form line width, +apply for preprocessed output as well. + +@item -dM +@opindex @code{dM} +@cindex preprocessor, debugging +@cindex debugging, preprocessor +Instead of the normal output, generate a list of @code{'#define'} +directives for all the macros defined during the execution of the +preprocessor, including predefined macros. This gives you a way +of finding out what is predefined in your version of the preprocessor. +Assuming you have no file @file{foo.f90}, the command +@smallexample + touch foo.f90; gfortran -cpp -dM foo.f90 +@end smallexample +will show all the predefined macros. + +@item -dD +@opindex @code{dD} +@cindex preprocessor, debugging +@cindex debugging, preprocessor +Like @option{-dM} except in two respects: it does not include the +predefined macros, and it outputs both the @code{#define} directives +and the result of preprocessing. Both kinds of output go to the +standard output file. + +@item -dN +@opindex @code{dN} +@cindex preprocessor, debugging +@cindex debugging, preprocessor +Like @option{-dD}, but emit only the macro names, not their expansions. + +@item -dU +@opindex @code{dU} +@cindex preprocessor, debugging +@cindex debugging, preprocessor +Like @option{dD} except that only macros that are expanded, or whose +definedness is tested in preprocessor directives, are output; the +output is delayed until the use or test of the macro; and @code{'#undef'} +directives are also output for macros tested but undefined at the time. + +@item -dI +@opindex @code{dI} +@cindex preprocessor, debugging +@cindex debugging, preprocessor +Output @code{'#include'} directives in addition to the result +of preprocessing. + +@item -fworking-directory +@opindex @code{fworking-directory} +@cindex preprocessor, working directory +Enable generation of linemarkers in the preprocessor output that will +let the compiler know the current working directory at the time of +preprocessing. When this option is enabled, the preprocessor will emit, +after the initial linemarker, a second linemarker with the current +working directory followed by two slashes. GCC will use this directory, +when it's present in the preprocessed input, as the directory emitted +as the current working directory in some debugging information formats. +This option is implicitly enabled if debugging information is enabled, +but this can be inhibited with the negated form +@option{-fno-working-directory}. If the @option{-P} flag is present +in the command line, this option has no effect, since no @code{#line} +directives are emitted whatsoever. + +@item -idirafter @var{dir} +@opindex @code{idirafter @var{dir}} +@cindex preprocessing, include path +Search @var{dir} for include files, but do it after all directories +specified with @option{-I} and the standard system directories have +been exhausted. @var{dir} is treated as a system include directory. +If dir begins with @code{=}, then the @code{=} will be replaced by +the sysroot prefix; see @option{--sysroot} and @option{-isysroot}. + +@item -imultilib @var{dir} +@opindex @code{imultilib @var{dir}} +@cindex preprocessing, include path +Use @var{dir} as a subdirectory of the directory containing target-specific +C++ headers. + +@item -iprefix @var{prefix} +@opindex @code{iprefix @var{prefix}} +@cindex preprocessing, include path +Specify @var{prefix} as the prefix for subsequent @option{-iwithprefix} +options. If the @var{prefix} represents a directory, you should include +the final @code{'/'}. + +@item -isysroot @var{dir} +@opindex @code{isysroot @var{dir}} +@cindex preprocessing, include path +This option is like the @option{--sysroot} option, but applies only to +header files. See the @option{--sysroot} option for more information. + +@item -iquote @var{dir} +@opindex @code{iquote @var{dir}} +@cindex preprocessing, include path +Search @var{dir} only for header files requested with @code{#include "file"}; +they are not searched for @code{#include }, before all directories +specified by @option{-I} and before the standard system directories. If +@var{dir} begins with @code{=}, then the @code{=} will be replaced by the +sysroot prefix; see @option{--sysroot} and @option{-isysroot}. + +@item -isystem @var{dir} +@opindex @code{isystem @var{dir}} +@cindex preprocessing, include path +Search @var{dir} for header files, after all directories specified by +@option{-I} but before the standard system directories. Mark it as a +system directory, so that it gets the same special treatment as is +applied to the standard system directories. If @var{dir} begins with +@code{=}, then the @code{=} will be replaced by the sysroot prefix; +see @option{--sysroot} and @option{-isysroot}. + +@item -nostdinc +@opindex @code{nostdinc} +Do not search the standard system directories for header files. Only +the directories you have specified with @option{-I} options (and the +directory of the current file, if appropriate) are searched. + +@item -undef +@opindex @code{undef} +Do not predefine any system-specific or GCC-specific macros. +The standard predefined macros remain defined. + +@item -A@var{predicate}=@var{answer} +@opindex @code{A@var{predicate}=@var{answer}} +@cindex preprocessing, assertation +Make an assertion with the predicate @var{predicate} and answer @var{answer}. +This form is preferred to the older form -A predicate(answer), which is still +supported, because it does not use shell special characters. + +@item -A-@var{predicate}=@var{answer} +@opindex @code{A-@var{predicate}=@var{answer}} +@cindex preprocessing, assertation +Cancel an assertion with the predicate @var{predicate} and answer @var{answer}. + +@item -C +@opindex @code{C} +@cindex preprocessing, keep comments +Do not discard comments. All comments are passed through to the output +file, except for comments in processed directives, which are deleted +along with the directive. + +You should be prepared for side effects when using @option{-C}; it causes +the preprocessor to treat comments as tokens in their own right. For example, +comments appearing at the start of what would be a directive line have the +effect of turning that line into an ordinary source line, since the first +token on the line is no longer a @code{'#'}. + +Warning: this currently handles C-Style comments only. The preprocessor +does not yet recognize Fortran-style comments. + +@item -CC +@opindex @code{CC} +@cindex preprocessing, keep comments +Do not discard comments, including during macro expansion. This is like +@option{-C}, except that comments contained within macros are also passed +through to the output file where the macro is expanded. + +In addition to the side-effects of the @option{-C} option, the @option{-CC} +option causes all C++-style comments inside a macro to be converted to C-style +comments. This is to prevent later use of that macro from inadvertently +commenting out the remainder of the source line. The @option{-CC} option +is generally used to support lint comments. + +Warning: this currently handles C- and C++-Style comments only. The +preprocessor does not yet recognize Fortran-style comments. + +@item -D@var{name} +@opindex @code{D@var{name}} +@cindex preprocessing, define macros +Predefine name as a macro, with definition @code{1}. + +@item -D@var{name}=@var{definition} +@opindex @code{D@var{name}=@var{definition}} +@cindex preprocessing, define macros +The contents of @var{definition} are tokenized and processed as if they +appeared during translation phase three in a @code{'#define'} directive. +In particular, the definition will be truncated by embedded newline +characters. + +If you are invoking the preprocessor from a shell or shell-like program +you may need to use the shell's quoting syntax to protect characters such +as spaces that have a meaning in the shell syntax. + +If you wish to define a function-like macro on the command line, write +its argument list with surrounding parentheses before the equals sign +(if any). Parentheses are meaningful to most shells, so you will need +to quote the option. With sh and csh, @code{-D'name(args...)=definition'} +works. + +@option{-D} and @option{-U} options are processed in the order they are +given on the command line. All -imacros file and -include file options +are processed after all -D and -U options. + +@item -H +@opindex @code{H} +Print the name of each header file used, in addition to other normal +activities. Each name is indented to show how deep in the @code{'#include'} +stack it is. + +@item -P +@opindex @code{P} +@cindex preprocessing, no linemarkers +Inhibit generation of linemarkers in the output from the preprocessor. +This might be useful when running the preprocessor on something that +is not C code, and will be sent to a program which might be confused +by the linemarkers. + +@item -U@var{name} +@opindex @code{U@var{name}} +@cindex preprocessing, undefine macros +Cancel any previous definition of @var{name}, either built in or provided +with a @option{-D} option. +@end table + + +@node Error and Warning Options +@section Options to request or suppress errors and warnings +@cindex options, warnings +@cindex options, errors +@cindex warnings, suppressing +@cindex messages, error +@cindex messages, warning +@cindex suppressing warnings + +Errors are diagnostic messages that report that the GNU Fortran compiler +cannot compile the relevant piece of source code. The compiler will +continue to process the program in an attempt to report further errors +to aid in debugging, but will not produce any compiled output. + +Warnings are diagnostic messages that report constructions which +are not inherently erroneous but which are risky or suggest there is +likely to be a bug in the program. Unless @option{-Werror} is specified, +they do not prevent compilation of the program. + +You can request many specific warnings with options beginning @option{-W}, +for example @option{-Wimplicit} to request warnings on implicit +declarations. Each of these specific warning options also has a +negative form beginning @option{-Wno-} to turn off warnings; +for example, @option{-Wno-implicit}. This manual lists only one of the +two forms, whichever is not the default. + +These options control the amount and kinds of errors and warnings produced +by GNU Fortran: + +@table @gcctabopt +@item -fmax-errors=@var{n} +@opindex @code{fmax-errors=}@var{n} +@cindex errors, limiting +Limits the maximum number of error messages to @var{n}, at which point +GNU Fortran bails out rather than attempting to continue processing the +source code. If @var{n} is 0, there is no limit on the number of error +messages produced. + +@item -fsyntax-only +@opindex @code{fsyntax-only} +@cindex syntax checking +Check the code for syntax errors, but don't actually compile it. This +will generate module files for each module present in the code, but no +other output file. + +@item -pedantic +@opindex @code{pedantic} +Issue warnings for uses of extensions to Fortran 95. +@option{-pedantic} also applies to C-language constructs where they +occur in GNU Fortran source files, such as use of @samp{\e} in a +character constant within a directive like @code{#include}. + +Valid Fortran 95 programs should compile properly with or without +this option. +However, without this option, certain GNU extensions and traditional +Fortran features are supported as well. +With this option, many of them are rejected. + +Some users try to use @option{-pedantic} to check programs for conformance. +They soon find that it does not do quite what they want---it finds some +nonstandard practices, but not all. +However, improvements to GNU Fortran in this area are welcome. + +This should be used in conjunction with @option{-std=f95}, +@option{-std=f2003} or @option{-std=f2008}. + +@item -pedantic-errors +@opindex @code{pedantic-errors} +Like @option{-pedantic}, except that errors are produced rather than +warnings. + +@item -Wall +@opindex @code{Wall} +@cindex all warnings +@cindex warnings, all +Enables commonly used warning options pertaining to usage that +we recommend avoiding and that we believe are easy to avoid. +This currently includes @option{-Waliasing}, +@option{-Wampersand}, @option{-Wsurprising}, @option{-Wintrinsics-std}, +@option{-Wno-tabs}, @option{-Wintrinsic-shadow} and @option{-Wline-truncation}. + +@item -Waliasing +@opindex @code{Waliasing} +@cindex aliasing +@cindex warnings, aliasing +Warn about possible aliasing of dummy arguments. Specifically, it warns +if the same actual argument is associated with a dummy argument with +@code{INTENT(IN)} and a dummy argument with @code{INTENT(OUT)} in a call +with an explicit interface. + +The following example will trigger the warning. +@smallexample + interface + subroutine bar(a,b) + integer, intent(in) :: a + integer, intent(out) :: b + end subroutine + end interface + integer :: a + + call bar(a,a) +@end smallexample + +@item -Wampersand +@opindex @code{Wampersand} +@cindex warnings, ampersand +@cindex & +Warn about missing ampersand in continued character constants. The warning is +given with @option{-Wampersand}, @option{-pedantic}, @option{-std=f95}, +@option{-std=f2003} and @option{-std=f2008}. Note: With no ampersand +given in a continued character constant, GNU Fortran assumes continuation +at the first non-comment, non-whitespace character after the ampersand +that initiated the continuation. + +@item -Warray-temporaries +@opindex @code{Warray-temporaries} +@cindex warnings, array temporaries +Warn about array temporaries generated by the compiler. The information +generated by this warning is sometimes useful in optimization, in order to +avoid such temporaries. + +@item -Wcharacter-truncation +@opindex @code{Wcharacter-truncation} +@cindex warnings, character truncation +Warn when a character assignment will truncate the assigned string. + +@item -Wline-truncation +@opindex @code{Wline-truncation} +@cindex warnings, line truncation +Warn when a source code line will be truncated. + +@item -Wconversion +@opindex @code{Wconversion} +@cindex warnings, conversion +@cindex conversion +Warn about implicit conversions between different types. + +@item -Wimplicit-interface +@opindex @code{Wimplicit-interface} +@cindex warnings, implicit interface +Warn if a procedure is called without an explicit interface. +Note this only checks that an explicit interface is present. It does not +check that the declared interfaces are consistent across program units. + +@item -Wintrinsics-std +@opindex @code{Wintrinsics-std} +@cindex warnings, non-standard intrinsics +@cindex warnings, intrinsics of other standards +Warn if @command{gfortran} finds a procedure named like an intrinsic not +available in the currently selected standard (with @option{-std}) and treats +it as @code{EXTERNAL} procedure because of this. @option{-fall-intrinsics} can +be used to never trigger this behaviour and always link to the intrinsic +regardless of the selected standard. + +@item -Wsurprising +@opindex @code{Wsurprising} +@cindex warnings, suspicious code +Produce a warning when ``suspicious'' code constructs are encountered. +While technically legal these usually indicate that an error has been made. + +This currently produces a warning under the following circumstances: + +@itemize @bullet +@item +An INTEGER SELECT construct has a CASE that can never be matched as its +lower value is greater than its upper value. + +@item +A LOGICAL SELECT construct has three CASE statements. + +@item +A TRANSFER specifies a source that is shorter than the destination. + +@item +The type of a function result is declared more than once with the same type. If +@option{-pedantic} or standard-conforming mode is enabled, this is an error. +@end itemize + +@item -Wtabs +@opindex @code{Wtabs} +@cindex warnings, tabs +@cindex tabulators +By default, tabs are accepted as whitespace, but tabs are not members +of the Fortran Character Set. For continuation lines, a tab followed +by a digit between 1 and 9 is supported. @option{-Wno-tabs} will cause +a warning to be issued if a tab is encountered. Note, @option{-Wno-tabs} +is active for @option{-pedantic}, @option{-std=f95}, @option{-std=f2003}, +@option{-std=f2008} and @option{-Wall}. + +@item -Wunderflow +@opindex @code{Wunderflow} +@cindex warnings, underflow +@cindex underflow +Produce a warning when numerical constant expressions are +encountered, which yield an UNDERFLOW during compilation. + +@item -Wintrinsic-shadow +@opindex @code{Wintrinsic-shadow} +@cindex warnings, intrinsic +@cindex intrinsic +Warn if a user-defined procedure or module procedure has the same name as an +intrinsic; in this case, an explicit interface or @code{EXTERNAL} or +@code{INTRINSIC} declaration might be needed to get calls later resolved to +the desired intrinsic/procedure. + +@item -Wunused-parameter +@opindex @code{Wunused-parameter} +@cindex warnings, unused parameter +@cindex unused parameter +Contrary to @command{gcc}'s meaning of @option{-Wunused-parameter}, +@command{gfortran}'s implementation of this option does not warn +about unused dummy arguments, but about unused @code{PARAMETER} values. +@option{-Wunused-parameter} is not included in @option{-Wall} but is +implied by @option{-Wall -Wextra}. + +@item -Walign-commons +@opindex @code{Walign-commons} +@cindex warnings, alignment of COMMON blocks +@cindex alignment of COMMON blocks +By default, @command{gfortran} warns about any occasion of variables being +padded for proper alignment inside a COMMON block. This warning can be turned +off via @option{-Wno-align-commons}. See also @option{-falign-commons}. + +@item -Werror +@opindex @code{Werror} +@cindex warnings, to errors +Turns all warnings into errors. +@end table + +@xref{Error and Warning Options,,Options to Request or Suppress Errors and +Warnings, gcc,Using the GNU Compiler Collection (GCC)}, for information on +more options offered by the GBE shared by @command{gfortran}, @command{gcc} +and other GNU compilers. + +Some of these have no effect when compiling programs written in Fortran. + +@node Debugging Options +@section Options for debugging your program or GNU Fortran +@cindex options, debugging +@cindex debugging information options + +GNU Fortran has various special options that are used for debugging +either your program or the GNU Fortran compiler. + +@table @gcctabopt +@item -fdump-parse-tree +@opindex @code{fdump-parse-tree} +Output the internal parse tree before starting code generation. Only +really useful for debugging the GNU Fortran compiler itself. + +@item -ffpe-trap=@var{list} +@opindex @code{ffpe-trap=}@var{list} +Specify a list of IEEE exceptions when a Floating Point Exception +(FPE) should be raised. On most systems, this will result in a SIGFPE +signal being sent and the program being interrupted, producing a core +file useful for debugging. @var{list} is a (possibly empty) comma-separated +list of the following IEEE exceptions: @samp{invalid} (invalid floating +point operation, such as @code{SQRT(-1.0)}), @samp{zero} (division by +zero), @samp{overflow} (overflow in a floating point operation), +@samp{underflow} (underflow in a floating point operation), +@samp{precision} (loss of precision during operation) and @samp{denormal} +(operation produced a denormal value). + +Some of the routines in the Fortran runtime library, like +@samp{CPU_TIME}, are likely to trigger floating point exceptions when +@code{ffpe-trap=precision} is used. For this reason, the use of +@code{ffpe-trap=precision} is not recommended. + +@item -fbacktrace +@opindex @code{fbacktrace} +@cindex backtrace +@cindex trace +Specify that, when a runtime error is encountered or a deadly signal is +emitted (segmentation fault, illegal instruction, bus error or +floating-point exception), the Fortran runtime +library should output a backtrace of the error. This option +only has influence for compilation of the Fortran main program. + +@item -fdump-core +@cindex core, dump +@opindex @code{fdump-core} +Request that a core-dump file is written to disk when a runtime error +is encountered on systems that support core dumps. This option is +only effective for the compilation of the Fortran main program. +@end table + +@xref{Debugging Options,,Options for Debugging Your Program or GCC, +gcc,Using the GNU Compiler Collection (GCC)}, for more information on +debugging options. + +@node Directory Options +@section Options for directory search +@cindex directory, options +@cindex options, directory search +@cindex search path +@cindex INCLUDE directive +@cindex directive, INCLUDE +These options affect how GNU Fortran searches +for files specified by the @code{INCLUDE} directive and where it searches +for previously compiled modules. + +It also affects the search paths used by @command{cpp} when used to preprocess +Fortran source. + +@table @gcctabopt +@item -I@var{dir} +@opindex @code{I}@var{dir} +@cindex directory, search paths for inclusion +@cindex inclusion, directory search paths for +@cindex search paths, for included files +@cindex paths, search +@cindex module search path +These affect interpretation of the @code{INCLUDE} directive +(as well as of the @code{#include} directive of the @command{cpp} +preprocessor). + +Also note that the general behavior of @option{-I} and +@code{INCLUDE} is pretty much the same as of @option{-I} with +@code{#include} in the @command{cpp} preprocessor, with regard to +looking for @file{header.gcc} files and other such things. + +This path is also used to search for @file{.mod} files when previously +compiled modules are required by a @code{USE} statement. + +@xref{Directory Options,,Options for Directory Search, +gcc,Using the GNU Compiler Collection (GCC)}, for information on the +@option{-I} option. + +@item -J@var{dir} +@item -M@var{dir} +@opindex @code{J}@var{dir} +@opindex @code{M}@var{dir} +@cindex paths, search +@cindex module search path +This option specifies where to put @file{.mod} files for compiled modules. +It is also added to the list of directories to searched by an @code{USE} +statement. + +The default is the current directory. + +@option{-M} is deprecated to avoid conflicts with existing GCC options. + +@item -fintrinsic-modules-path @var{dir} +@opindex @code{fintrinsic-modules-path} @var{dir} +@cindex paths, search +@cindex module search path +This option specifies the location of pre-compiled intrinsic modules, if +they are not in the default location expected by the compiler. +@end table + +@node Link Options +@section Influencing the linking step +@cindex options, linking +@cindex linking, static + +These options come into play when the compiler links object files into an +executable output file. They are meaningless if the compiler is not doing +a link step. + +@table @gcctabopt +@item -static-libgfortran +@opindex @code{static-libgfortran} +On systems that provide @file{libgfortran} as a shared and a static +library, this option forces the use of the static version. If no +shared version of @file{libgfortran} was built when the compiler was +configured, this option has no effect. +@end table + + +@node Runtime Options +@section Influencing runtime behavior +@cindex options, runtime + +These options affect the runtime behavior of programs compiled with GNU Fortran. +@table @gcctabopt +@item -fconvert=@var{conversion} +@opindex @code{fconvert=}@var{conversion} +Specify the representation of data for unformatted files. Valid +values for conversion are: @samp{native}, the default; @samp{swap}, +swap between big- and little-endian; @samp{big-endian}, use big-endian +representation for unformatted files; @samp{little-endian}, use little-endian +representation for unformatted files. + +@emph{This option has an effect only when used in the main program. +The @code{CONVERT} specifier and the GFORTRAN_CONVERT_UNIT environment +variable override the default specified by @option{-fconvert}.} + + +@item -fno-range-check +@opindex @code{fno-range-check} +Disable range checking of input values during integer @code{READ} operations. +For example, GNU Fortran will give an error if an input value is +outside of the relevant range of [@code{-HUGE()}:@code{HUGE()}]. In other words, +with @code{INTEGER (kind=4) :: i} , attempting to read @math{-2147483648} will +give an error unless @option{-fno-range-check} is given. + + +@item -frecord-marker=@var{length} +@opindex @code{frecord-marker=}@var{length} +Specify the length of record markers for unformatted files. +Valid values for @var{length} are 4 and 8. Default is 4. +@emph{This is different from previous versions of @command{gfortran}}, +which specified a default record marker length of 8 on most +systems. If you want to read or write files compatible +with earlier versions of @command{gfortran}, use @option{-frecord-marker=8}. + +@item -fmax-subrecord-length=@var{length} +@opindex @code{fmax-subrecord-length=}@var{length} +Specify the maximum length for a subrecord. The maximum permitted +value for length is 2147483639, which is also the default. Only +really useful for use by the gfortran testsuite. + +@item -fsign-zero +@opindex @code{fsign-zero} +When writing zero values, show the negative sign if the sign bit is set. +@code{fno-sign-zero} does not print the negative sign of zero values for +compatibility with F77. Default behavior is to show the negative sign. +@end table + +@node Code Gen Options +@section Options for code generation conventions +@cindex code generation, conventions +@cindex options, code generation +@cindex options, run-time + +These machine-independent options control the interface conventions +used in code generation. + +Most of them have both positive and negative forms; the negative form +of @option{-ffoo} would be @option{-fno-foo}. In the table below, only +one of the forms is listed---the one which is not the default. You +can figure out the other form by either removing @option{no-} or adding +it. + +@table @gcctabopt +@item -fno-automatic +@opindex @code{fno-automatic} +@cindex @code{SAVE} statement +@cindex statement, @code{SAVE} +Treat each program unit (except those marked as RECURSIVE) as if the +@code{SAVE} statement were specified for every local variable and array +referenced in it. Does not affect common blocks. (Some Fortran compilers +provide this option under the name @option{-static} or @option{-save}.) +The default, which is @option{-fautomatic}, uses the stack for local +variables smaller than the value given by @option{-fmax-stack-var-size}. +Use the option @option{-frecursive} to use no static memory. + +@item -ff2c +@opindex ff2c +@cindex calling convention +@cindex @command{f2c} calling convention +@cindex @command{g77} calling convention +@cindex libf2c calling convention +Generate code designed to be compatible with code generated +by @command{g77} and @command{f2c}. + +The calling conventions used by @command{g77} (originally implemented +in @command{f2c}) require functions that return type +default @code{REAL} to actually return the C type @code{double}, and +functions that return type @code{COMPLEX} to return the values via an +extra argument in the calling sequence that points to where to +store the return value. Under the default GNU calling conventions, such +functions simply return their results as they would in GNU +C---default @code{REAL} functions return the C type @code{float}, and +@code{COMPLEX} functions return the GNU C type @code{complex}. +Additionally, this option implies the @option{-fsecond-underscore} +option, unless @option{-fno-second-underscore} is explicitly requested. + +This does not affect the generation of code that interfaces with +the @command{libgfortran} library. + +@emph{Caution:} It is not a good idea to mix Fortran code compiled with +@option{-ff2c} with code compiled with the default @option{-fno-f2c} +calling conventions as, calling @code{COMPLEX} or default @code{REAL} +functions between program parts which were compiled with different +calling conventions will break at execution time. + +@emph{Caution:} This will break code which passes intrinsic functions +of type default @code{REAL} or @code{COMPLEX} as actual arguments, as +the library implementations use the @option{-fno-f2c} calling conventions. + +@item -fno-underscoring +@opindex @code{fno-underscoring} +@cindex underscore +@cindex symbol names, underscores +@cindex transforming symbol names +@cindex symbol names, transforming +Do not transform names of entities specified in the Fortran +source file by appending underscores to them. + +With @option{-funderscoring} in effect, GNU Fortran appends one +underscore to external names with no underscores. This is done to ensure +compatibility with code produced by many UNIX Fortran compilers. + +@emph{Caution}: The default behavior of GNU Fortran is +incompatible with @command{f2c} and @command{g77}, please use the +@option{-ff2c} option if you want object files compiled with +GNU Fortran to be compatible with object code created with these +tools. + +Use of @option{-fno-underscoring} is not recommended unless you are +experimenting with issues such as integration of GNU Fortran into +existing system environments (vis-@`{a}-vis existing libraries, tools, +and so on). + +For example, with @option{-funderscoring}, and assuming other defaults like +@option{-fcase-lower} and that @code{j()} and @code{max_count()} are +external functions while @code{my_var} and @code{lvar} are local variables, +a statement like +@smallexample +I = J() + MAX_COUNT (MY_VAR, LVAR) +@end smallexample +@noindent +is implemented as something akin to: +@smallexample +i = j_() + max_count__(&my_var__, &lvar); +@end smallexample + +With @option{-fno-underscoring}, the same statement is implemented as: + +@smallexample +i = j() + max_count(&my_var, &lvar); +@end smallexample + +Use of @option{-fno-underscoring} allows direct specification of +user-defined names while debugging and when interfacing GNU Fortran +code with other languages. + +Note that just because the names match does @emph{not} mean that the +interface implemented by GNU Fortran for an external name matches the +interface implemented by some other language for that same name. +That is, getting code produced by GNU Fortran to link to code produced +by some other compiler using this or any other method can be only a +small part of the overall solution---getting the code generated by +both compilers to agree on issues other than naming can require +significant effort, and, unlike naming disagreements, linkers normally +cannot detect disagreements in these other areas. + +Also, note that with @option{-fno-underscoring}, the lack of appended +underscores introduces the very real possibility that a user-defined +external name will conflict with a name in a system library, which +could make finding unresolved-reference bugs quite difficult in some +cases---they might occur at program run time, and show up only as +buggy behavior at run time. + +In future versions of GNU Fortran we hope to improve naming and linking +issues so that debugging always involves using the names as they appear +in the source, even if the names as seen by the linker are mangled to +prevent accidental linking between procedures with incompatible +interfaces. + +@item -fsecond-underscore +@opindex @code{fsecond-underscore} +@cindex underscore +@cindex symbol names, underscores +@cindex transforming symbol names +@cindex symbol names, transforming +@cindex @command{f2c} calling convention +@cindex @command{g77} calling convention +@cindex libf2c calling convention +By default, GNU Fortran appends an underscore to external +names. If this option is used GNU Fortran appends two +underscores to names with underscores and one underscore to external names +with no underscores. GNU Fortran also appends two underscores to +internal names with underscores to avoid naming collisions with external +names. + +This option has no effect if @option{-fno-underscoring} is +in effect. It is implied by the @option{-ff2c} option. + +Otherwise, with this option, an external name such as @code{MAX_COUNT} +is implemented as a reference to the link-time external symbol +@code{max_count__}, instead of @code{max_count_}. This is required +for compatibility with @command{g77} and @command{f2c}, and is implied +by use of the @option{-ff2c} option. + +@item -fbounds-check +@opindex @code{fbounds-check} +@cindex array, bounds checking +@cindex bounds checking +@cindex range checking +@cindex subscript checking +@cindex checking subscripts +Enable generation of run-time checks for array subscripts +and against the declared minimum and maximum values. It also +checks array indices for assumed and deferred +shape arrays against the actual allocated bounds and ensures that all string +lengths are equal for character array constructors without an explicit +typespec. + +Some checks require that @option{-fbounds-check} is set for +the compilation of the main program. + +Note: In the future this may also include other forms of checking, e.g., +checking substring references. + + +@item fcheck-array-temporaries +@opindex @code{fcheck-array-temporaries} +@cindex checking array temporaries +Warns at run time when for passing an actual argument a temporary array +had to be generated. The information generated by this warning is +sometimes useful in optimization, in order to avoid such temporaries. + +Note: The warning is only printed once per location. + + +@item -fmax-array-constructor=@var{n} +@opindex @code{fmax-array-constructor} +This option can be used to increase the upper limit permitted in +array constructors. The code below requires this option to expand +the array at compile time. + +@smallexample +@code{program test} +@code{implicit none} +@code{integer j} +@code{integer, parameter :: n = 100000} +@code{integer, parameter :: i(n) = (/ (2*j, j = 1, n) /)} +@code{print '(10(I0,1X))', i} +@code{end program test} +@end smallexample + +@emph{Caution: This option can lead to long compile times and excessively +large object files.} + +The default value for @var{n} is 65535. + + +@item -fmax-stack-var-size=@var{n} +@opindex @code{fmax-stack-var-size} +This option specifies the size in bytes of the largest array that will be put +on the stack; if the size is exceeded static memory is used (except in +procedures marked as RECURSIVE). Use the option @option{-frecursive} to +allow for recursive procedures which do not have a RECURSIVE attribute or +for parallel programs. Use @option{-fno-automatic} to never use the stack. + +This option currently only affects local arrays declared with constant +bounds, and may not apply to all character variables. +Future versions of GNU Fortran may improve this behavior. + +The default value for @var{n} is 32768. + +@item -fpack-derived +@opindex @code{fpack-derived} +@cindex structure packing +This option tells GNU Fortran to pack derived type members as closely as +possible. Code compiled with this option is likely to be incompatible +with code compiled without this option, and may execute slower. + +@item -frepack-arrays +@opindex @code{frepack-arrays} +@cindex repacking arrays +In some circumstances GNU Fortran may pass assumed shape array +sections via a descriptor describing a noncontiguous area of memory. +This option adds code to the function prologue to repack the data into +a contiguous block at runtime. + +This should result in faster accesses to the array. However it can introduce +significant overhead to the function call, especially when the passed data +is noncontiguous. + +@item -fshort-enums +@opindex @code{fshort-enums} +This option is provided for interoperability with C code that was +compiled with the @option{-fshort-enums} option. It will make +GNU Fortran choose the smallest @code{INTEGER} kind a given +enumerator set will fit in, and give all its enumerators this kind. + +@item -fexternal-blas +@opindex @code{fexternal-blas} +This option will make @command{gfortran} generate calls to BLAS functions +for some matrix operations like @code{MATMUL}, instead of using our own +algorithms, if the size of the matrices involved is larger than a given +limit (see @option{-fblas-matmul-limit}). This may be profitable if an +optimized vendor BLAS library is available. The BLAS library will have +to be specified at link time. + +@item -fblas-matmul-limit=@var{n} +@opindex @code{fblas-matmul-limit} +Only significant when @option{-fexternal-blas} is in effect. +Matrix multiplication of matrices with size larger than (or equal to) @var{n} +will be performed by calls to BLAS functions, while others will be +handled by @command{gfortran} internal algorithms. If the matrices +involved are not square, the size comparison is performed using the +geometric mean of the dimensions of the argument and result matrices. + +The default value for @var{n} is 30. + +@item -frecursive +@opindex @code{frecursive} +Allow indirect recursion by forcing all local arrays to be allocated +on the stack. This flag cannot be used together with +@option{-fmax-stack-var-size=} or @option{-fno-automatic}. + +@item -finit-local-zero +@item -finit-integer=@var{n} +@item -finit-real=@var{} +@item -finit-logical=@var{} +@item -finit-character=@var{n} +@opindex @code{finit-local-zero} +@opindex @code{finit-integer} +@opindex @code{finit-real} +@opindex @code{finit-logical} +@opindex @code{finit-character} +The @option{-finit-local-zero} option instructs the compiler to +initialize local @code{INTEGER}, @code{REAL}, and @code{COMPLEX} +variables to zero, @code{LOGICAL} variables to false, and +@code{CHARACTER} variables to a string of null bytes. Finer-grained +initialization options are provided by the +@option{-finit-integer=@var{n}}, +@option{-finit-real=@var{}} (which also initializes +the real and imaginary parts of local @code{COMPLEX} variables), +@option{-finit-logical=@var{}}, and +@option{-finit-character=@var{n}} (where @var{n} is an ASCII character +value) options. These options do not initialize components of derived +type variables, nor do they initialize variables that appear in an +@code{EQUIVALENCE} statement. (This limitation may be removed in +future releases). + +Note that the @option{-finit-real=nan} option initializes @code{REAL} +and @code{COMPLEX} variables with a quiet NaN. + +@item -falign-commons +@opindex @code{falign-commons} +@cindex alignment of COMMON blocks +By default, @command{gfortran} enforces proper alignment of all variables in a +COMMON block by padding them as needed. On certain platforms this is mandatory, +on others it increases performance. If a COMMON block is not declared with +consistent data types everywhere, this padding can cause trouble, and +@option{-fno-align-commons } can be used to disable automatic alignment. The +same form of this option should be used for all files that share a COMMON block. +To avoid potential alignment issues in COMMON blocks, it is recommended to order +objects from largests to smallest. +@end table + +@xref{Code Gen Options,,Options for Code Generation Conventions, +gcc,Using the GNU Compiler Collection (GCC)}, for information on more options +offered by the GBE +shared by @command{gfortran}, @command{gcc}, and other GNU compilers. + + +@c man end + +@node Environment Variables +@section Environment variables affecting @command{gfortran} +@cindex environment variable + +@c man begin ENVIRONMENT + +The @command{gfortran} compiler currently does not make use of any environment +variables to control its operation above and beyond those +that affect the operation of @command{gcc}. + +@xref{Environment Variables,,Environment Variables Affecting GCC, +gcc,Using the GNU Compiler Collection (GCC)}, for information on environment +variables. + +@xref{Runtime}, for environment variables that affect the +run-time behavior of programs compiled with GNU Fortran. +@c man end diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/io.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/io.c new file mode 100644 index 0000000000..57e65f8542 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/io.c @@ -0,0 +1,3909 @@ +/* Deal with I/O statements & related stuff. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "flags.h" +#include "gfortran.h" +#include "match.h" +#include "parse.h" + +gfc_st_label +format_asterisk = {0, NULL, NULL, -1, ST_LABEL_FORMAT, ST_LABEL_FORMAT, NULL, + 0, {NULL, NULL}}; + +typedef struct +{ + const char *name, *spec, *value; + bt type; +} +io_tag; + +static const io_tag + tag_file = { "FILE", " file =", " %e", BT_CHARACTER }, + tag_status = { "STATUS", " status =", " %e", BT_CHARACTER}, + tag_e_access = {"ACCESS", " access =", " %e", BT_CHARACTER}, + tag_e_form = {"FORM", " form =", " %e", BT_CHARACTER}, + tag_e_recl = {"RECL", " recl =", " %e", BT_INTEGER}, + tag_e_blank = {"BLANK", " blank =", " %e", BT_CHARACTER}, + tag_e_position = {"POSITION", " position =", " %e", BT_CHARACTER}, + tag_e_action = {"ACTION", " action =", " %e", BT_CHARACTER}, + tag_e_delim = {"DELIM", " delim =", " %e", BT_CHARACTER}, + tag_e_pad = {"PAD", " pad =", " %e", BT_CHARACTER}, + tag_e_decimal = {"DECIMAL", " decimal =", " %e", BT_CHARACTER}, + tag_e_encoding = {"ENCODING", " encoding =", " %e", BT_CHARACTER}, + tag_e_async = {"ASYNCHRONOUS", " asynchronous =", " %e", BT_CHARACTER}, + tag_e_round = {"ROUND", " round =", " %e", BT_CHARACTER}, + tag_e_sign = {"SIGN", " sign =", " %e", BT_CHARACTER}, + tag_unit = {"UNIT", " unit =", " %e", BT_INTEGER}, + tag_advance = {"ADVANCE", " advance =", " %e", BT_CHARACTER}, + tag_rec = {"REC", " rec =", " %e", BT_INTEGER}, + tag_spos = {"POSITION", " pos =", " %e", BT_INTEGER}, + tag_format = {"FORMAT", NULL, NULL, BT_CHARACTER}, + tag_iomsg = {"IOMSG", " iomsg =", " %e", BT_CHARACTER}, + tag_iostat = {"IOSTAT", " iostat =", " %v", BT_INTEGER}, + tag_size = {"SIZE", " size =", " %v", BT_INTEGER}, + tag_exist = {"EXIST", " exist =", " %v", BT_LOGICAL}, + tag_opened = {"OPENED", " opened =", " %v", BT_LOGICAL}, + tag_named = {"NAMED", " named =", " %v", BT_LOGICAL}, + tag_name = {"NAME", " name =", " %v", BT_CHARACTER}, + tag_number = {"NUMBER", " number =", " %v", BT_INTEGER}, + tag_s_access = {"ACCESS", " access =", " %v", BT_CHARACTER}, + tag_sequential = {"SEQUENTIAL", " sequential =", " %v", BT_CHARACTER}, + tag_direct = {"DIRECT", " direct =", " %v", BT_CHARACTER}, + tag_s_form = {"FORM", " form =", " %v", BT_CHARACTER}, + tag_formatted = {"FORMATTED", " formatted =", " %v", BT_CHARACTER}, + tag_unformatted = {"UNFORMATTED", " unformatted =", " %v", BT_CHARACTER}, + tag_s_recl = {"RECL", " recl =", " %v", BT_INTEGER}, + tag_nextrec = {"NEXTREC", " nextrec =", " %v", BT_INTEGER}, + tag_s_blank = {"BLANK", " blank =", " %v", BT_CHARACTER}, + tag_s_position = {"POSITION", " position =", " %v", BT_CHARACTER}, + tag_s_action = {"ACTION", " action =", " %v", BT_CHARACTER}, + tag_read = {"READ", " read =", " %v", BT_CHARACTER}, + tag_write = {"WRITE", " write =", " %v", BT_CHARACTER}, + tag_readwrite = {"READWRITE", " readwrite =", " %v", BT_CHARACTER}, + tag_s_delim = {"DELIM", " delim =", " %v", BT_CHARACTER}, + tag_s_pad = {"PAD", " pad =", " %v", BT_CHARACTER}, + tag_s_decimal = {"DECIMAL", " decimal =", " %v", BT_CHARACTER}, + tag_s_encoding = {"ENCODING", " encoding =", " %v", BT_CHARACTER}, + tag_s_async = {"ASYNCHRONOUS", " asynchronous =", " %v", BT_CHARACTER}, + tag_s_round = {"ROUND", " round =", " %v", BT_CHARACTER}, + tag_s_sign = {"SIGN", " sign =", " %v", BT_CHARACTER}, + tag_iolength = {"IOLENGTH", " iolength =", " %v", BT_INTEGER}, + tag_convert = {"CONVERT", " convert =", " %e", BT_CHARACTER}, + tag_strm_out = {"POS", " pos =", " %v", BT_INTEGER}, + tag_err = {"ERR", " err =", " %l", BT_UNKNOWN}, + tag_end = {"END", " end =", " %l", BT_UNKNOWN}, + tag_eor = {"EOR", " eor =", " %l", BT_UNKNOWN}, + tag_id = {"ID", " id =", " %v", BT_INTEGER}, + tag_pending = {"PENDING", " pending =", " %v", BT_LOGICAL}; + +static gfc_dt *current_dt; + +#define RESOLVE_TAG(x, y) if (resolve_tag(x, y) == FAILURE) return FAILURE; + + +/**************** Fortran 95 FORMAT parser *****************/ + +/* FORMAT tokens returned by format_lex(). */ +typedef enum +{ + FMT_NONE, FMT_UNKNOWN, FMT_SIGNED_INT, FMT_ZERO, FMT_POSINT, FMT_PERIOD, + FMT_COMMA, FMT_COLON, FMT_SLASH, FMT_DOLLAR, FMT_LPAREN, + FMT_RPAREN, FMT_X, FMT_SIGN, FMT_BLANK, FMT_CHAR, FMT_P, FMT_IBOZ, FMT_F, + FMT_E, FMT_EXT, FMT_G, FMT_L, FMT_A, FMT_D, FMT_H, FMT_END, FMT_ERROR, FMT_DC, + FMT_DP, FMT_T, FMT_TR, FMT_TL +} +format_token; + +/* Local variables for checking format strings. The saved_token is + used to back up by a single format token during the parsing + process. */ +static gfc_char_t *format_string; +static int format_string_pos; +static int format_length, use_last_char; +static char error_element; +static locus format_locus; + +static format_token saved_token; + +static enum +{ MODE_STRING, MODE_FORMAT, MODE_COPY } +mode; + + +/* Return the next character in the format string. */ + +static char +next_char (int in_string) +{ + static gfc_char_t c; + + if (use_last_char) + { + use_last_char = 0; + return c; + } + + format_length++; + + if (mode == MODE_STRING) + c = *format_string++; + else + { + c = gfc_next_char_literal (in_string); + if (c == '\n') + c = '\0'; + } + + if (gfc_option.flag_backslash && c == '\\') + { + locus old_locus = gfc_current_locus; + + if (gfc_match_special_char (&c) == MATCH_NO) + gfc_current_locus = old_locus; + + if (!(gfc_option.allow_std & GFC_STD_GNU) && !inhibit_warnings) + gfc_warning ("Extension: backslash character at %C"); + } + + if (mode == MODE_COPY) + *format_string++ = c; + + if (mode != MODE_STRING) + format_locus = gfc_current_locus; + + format_string_pos++; + + c = gfc_wide_toupper (c); + return c; +} + + +/* Back up one character position. Only works once. */ + +static void +unget_char (void) +{ + use_last_char = 1; +} + +/* Eat up the spaces and return a character. */ + +static char +next_char_not_space (bool *error) +{ + char c; + do + { + error_element = c = next_char (0); + if (c == '\t') + { + if (gfc_option.allow_std & GFC_STD_GNU) + gfc_warning ("Extension: Tab character in format at %C"); + else + { + gfc_error ("Extension: Tab character in format at %C"); + *error = true; + return c; + } + } + } + while (gfc_is_whitespace (c)); + return c; +} + +static int value = 0; + +/* Simple lexical analyzer for getting the next token in a FORMAT + statement. */ + +static format_token +format_lex (void) +{ + format_token token; + char c, delim; + int zflag; + int negative_flag; + bool error = false; + + if (saved_token != FMT_NONE) + { + token = saved_token; + saved_token = FMT_NONE; + return token; + } + + c = next_char_not_space (&error); + + negative_flag = 0; + switch (c) + { + case '-': + negative_flag = 1; + case '+': + c = next_char_not_space (&error); + if (!ISDIGIT (c)) + { + token = FMT_UNKNOWN; + break; + } + + value = c - '0'; + + do + { + c = next_char_not_space (&error); + if (ISDIGIT (c)) + value = 10 * value + c - '0'; + } + while (ISDIGIT (c)); + + unget_char (); + + if (negative_flag) + value = -value; + + token = FMT_SIGNED_INT; + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + zflag = (c == '0'); + + value = c - '0'; + + do + { + c = next_char_not_space (&error); + if (ISDIGIT (c)) + { + value = 10 * value + c - '0'; + if (c != '0') + zflag = 0; + } + } + while (ISDIGIT (c)); + + unget_char (); + token = zflag ? FMT_ZERO : FMT_POSINT; + break; + + case '.': + token = FMT_PERIOD; + break; + + case ',': + token = FMT_COMMA; + break; + + case ':': + token = FMT_COLON; + break; + + case '/': + token = FMT_SLASH; + break; + + case '$': + token = FMT_DOLLAR; + break; + + case 'T': + c = next_char_not_space (&error); + switch (c) + { + case 'L': + token = FMT_TL; + break; + case 'R': + token = FMT_TR; + break; + default: + token = FMT_T; + unget_char (); + } + break; + + case '(': + token = FMT_LPAREN; + break; + + case ')': + token = FMT_RPAREN; + break; + + case 'X': + token = FMT_X; + break; + + case 'S': + c = next_char_not_space (&error); + if (c != 'P' && c != 'S') + unget_char (); + + token = FMT_SIGN; + break; + + case 'B': + c = next_char_not_space (&error); + if (c == 'N' || c == 'Z') + token = FMT_BLANK; + else + { + unget_char (); + token = FMT_IBOZ; + } + + break; + + case '\'': + case '"': + delim = c; + + value = 0; + + for (;;) + { + c = next_char (1); + if (c == '\0') + { + token = FMT_END; + break; + } + + if (c == delim) + { + c = next_char (1); + + if (c == '\0') + { + token = FMT_END; + break; + } + + if (c != delim) + { + unget_char (); + token = FMT_CHAR; + break; + } + } + value++; + } + break; + + case 'P': + token = FMT_P; + break; + + case 'I': + case 'O': + case 'Z': + token = FMT_IBOZ; + break; + + case 'F': + token = FMT_F; + break; + + case 'E': + c = next_char_not_space (&error); + if (c == 'N' || c == 'S') + token = FMT_EXT; + else + { + token = FMT_E; + unget_char (); + } + + break; + + case 'G': + token = FMT_G; + break; + + case 'H': + token = FMT_H; + break; + + case 'L': + token = FMT_L; + break; + + case 'A': + token = FMT_A; + break; + + case 'D': + c = next_char_not_space (&error); + if (c == 'P') + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: DP format " + "specifier not allowed at %C") == FAILURE) + return FMT_ERROR; + token = FMT_DP; + } + else if (c == 'C') + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: DC format " + "specifier not allowed at %C") == FAILURE) + return FMT_ERROR; + token = FMT_DC; + } + else + { + token = FMT_D; + unget_char (); + } + break; + + case '\0': + token = FMT_END; + break; + + default: + token = FMT_UNKNOWN; + break; + } + + if (error) + return FMT_ERROR; + + return token; +} + + +/* Check a format statement. The format string, either from a FORMAT + statement or a constant in an I/O statement has already been parsed + by itself, and we are checking it for validity. The dual origin + means that the warning message is a little less than great. */ + +static gfc_try +check_format (bool is_input) +{ + const char *posint_required = _("Positive width required"); + const char *nonneg_required = _("Nonnegative width required"); + const char *unexpected_element = _("Unexpected element '%c' in format string" + " at %L"); + const char *unexpected_end = _("Unexpected end of format string"); + const char *zero_width = _("Zero width in format descriptor"); + + const char *error; + format_token t, u; + int level; + int repeat; + gfc_try rv; + + use_last_char = 0; + saved_token = FMT_NONE; + level = 0; + repeat = 0; + rv = SUCCESS; + format_string_pos = 0; + + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + if (t != FMT_LPAREN) + { + error = _("Missing leading left parenthesis"); + goto syntax; + } + + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + if (t == FMT_RPAREN) + goto finished; /* Empty format is legal */ + saved_token = t; + +format_item: + /* In this state, the next thing has to be a format item. */ + t = format_lex (); + if (t == FMT_ERROR) + goto fail; +format_item_1: + switch (t) + { + case FMT_POSINT: + repeat = value; + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + if (t == FMT_LPAREN) + { + level++; + goto format_item; + } + + if (t == FMT_SLASH) + goto optional_comma; + + goto data_desc; + + case FMT_LPAREN: + level++; + goto format_item; + + case FMT_SIGNED_INT: + case FMT_ZERO: + /* Signed integer can only precede a P format. */ + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + if (t != FMT_P) + { + error = _("Expected P edit descriptor"); + goto syntax; + } + + goto data_desc; + + case FMT_P: + /* P requires a prior number. */ + error = _("P descriptor requires leading scale factor"); + goto syntax; + + case FMT_X: + /* X requires a prior number if we're being pedantic. */ + if (gfc_notify_std (GFC_STD_GNU, "Extension: X descriptor " + "requires leading space count at %C") + == FAILURE) + return FAILURE; + goto between_desc; + + case FMT_SIGN: + case FMT_BLANK: + case FMT_DP: + case FMT_DC: + goto between_desc; + + case FMT_CHAR: + goto extension_optional_comma; + + case FMT_COLON: + case FMT_SLASH: + goto optional_comma; + + case FMT_DOLLAR: + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + + if (gfc_notify_std (GFC_STD_GNU, "Extension: $ descriptor at %C") + == FAILURE) + return FAILURE; + if (t != FMT_RPAREN || level > 0) + { + gfc_warning ("$ should be the last specifier in format at %C"); + goto optional_comma_1; + } + + goto finished; + + case FMT_T: + case FMT_TL: + case FMT_TR: + case FMT_IBOZ: + case FMT_F: + case FMT_E: + case FMT_EXT: + case FMT_G: + case FMT_L: + case FMT_A: + case FMT_D: + case FMT_H: + goto data_desc; + + case FMT_END: + error = unexpected_end; + goto syntax; + + default: + error = unexpected_element; + goto syntax; + } + +data_desc: + /* In this state, t must currently be a data descriptor. + Deal with things that can/must follow the descriptor. */ + switch (t) + { + case FMT_SIGN: + case FMT_BLANK: + case FMT_DP: + case FMT_DC: + case FMT_X: + break; + + case FMT_P: + if (pedantic) + { + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + if (t == FMT_POSINT) + { + error = _("Repeat count cannot follow P descriptor"); + goto syntax; + } + + saved_token = t; + } + + goto optional_comma; + + case FMT_T: + case FMT_TL: + case FMT_TR: + t = format_lex (); + if (t != FMT_POSINT) + { + error = _("Positive width required with T descriptor"); + goto syntax; + } + break; + + case FMT_L: + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + if (t == FMT_POSINT) + break; + + switch (gfc_notification_std (GFC_STD_GNU)) + { + case WARNING: + gfc_warning ("Extension: Missing positive width after L " + "descriptor at %C"); + saved_token = t; + break; + + case ERROR: + error = posint_required; + goto syntax; + + case SILENT: + saved_token = t; + break; + + default: + gcc_unreachable (); + } + break; + + case FMT_A: + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + if (t == FMT_ZERO) + { + error = zero_width; + goto syntax; + } + if (t != FMT_POSINT) + saved_token = t; + break; + + case FMT_D: + case FMT_E: + case FMT_G: + case FMT_EXT: + u = format_lex (); + if (t == FMT_G && u == FMT_ZERO) + { + if (is_input) + { + error = zero_width; + goto syntax; + } + if (gfc_notify_std (GFC_STD_F2008, "Fortran 2008: 'G0' in " + "format at %C") == FAILURE) + return FAILURE; + u = format_lex (); + if (u != FMT_PERIOD) + { + saved_token = u; + break; + } + u = format_lex (); + if (u != FMT_POSINT) + { + error = posint_required; + goto syntax; + } + u = format_lex (); + if (u == FMT_E) + { + error = _("E specifier not allowed with g0 descriptor"); + goto syntax; + } + saved_token = u; + break; + } + + u = format_lex (); + if (u == FMT_ERROR) + goto fail; + if (u != FMT_PERIOD) + { + /* Warn if -std=legacy, otherwise error. */ + if (gfc_option.warn_std != 0) + gfc_error_now ("Period required in format specifier at %C"); + else + gfc_warning ("Period required in format specifier at %C"); + saved_token = u; + break; + } + + u = format_lex (); + if (u == FMT_ERROR) + goto fail; + if (u != FMT_ZERO && u != FMT_POSINT) + { + error = nonneg_required; + goto syntax; + } + + if (t == FMT_D) + break; + + /* Look for optional exponent. */ + u = format_lex (); + if (u == FMT_ERROR) + goto fail; + if (u != FMT_E) + { + saved_token = u; + } + else + { + u = format_lex (); + if (u == FMT_ERROR) + goto fail; + if (u != FMT_POSINT) + { + error = _("Positive exponent width required"); + goto syntax; + } + } + + break; + + case FMT_F: + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + if (t != FMT_ZERO && t != FMT_POSINT) + { + error = nonneg_required; + goto syntax; + } + else if (is_input && t == FMT_ZERO) + { + error = posint_required; + goto syntax; + } + + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + if (t != FMT_PERIOD) + { + /* Warn if -std=legacy, otherwise error. */ + if (gfc_option.warn_std != 0) + gfc_error_now ("Period required in format specifier at %C"); + else + gfc_warning ("Period required in format specifier at %C"); + saved_token = t; + break; + } + + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + if (t != FMT_ZERO && t != FMT_POSINT) + { + error = nonneg_required; + goto syntax; + } + + break; + + case FMT_H: + if (!(gfc_option.allow_std & GFC_STD_GNU) && !inhibit_warnings) + gfc_warning ("The H format specifier at %C is" + " a Fortran 95 deleted feature"); + + if (mode == MODE_STRING) + { + format_string += value; + format_length -= value; + } + else + { + while (repeat >0) + { + next_char (1); + repeat -- ; + } + } + break; + + case FMT_IBOZ: + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + if (t != FMT_ZERO && t != FMT_POSINT) + { + error = nonneg_required; + goto syntax; + } + else if (is_input && t == FMT_ZERO) + { + error = posint_required; + goto syntax; + } + + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + if (t != FMT_PERIOD) + { + saved_token = t; + } + else + { + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + if (t != FMT_ZERO && t != FMT_POSINT) + { + error = nonneg_required; + goto syntax; + } + } + + break; + + default: + error = unexpected_element; + goto syntax; + } + +between_desc: + /* Between a descriptor and what comes next. */ + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + switch (t) + { + + case FMT_COMMA: + goto format_item; + + case FMT_RPAREN: + level--; + if (level < 0) + goto finished; + goto between_desc; + + case FMT_COLON: + case FMT_SLASH: + goto optional_comma; + + case FMT_END: + error = unexpected_end; + goto syntax; + + default: + if (gfc_notify_std (GFC_STD_GNU, "Extension: Missing comma at %C") + == FAILURE) + return FAILURE; + goto format_item_1; + } + +optional_comma: + /* Optional comma is a weird between state where we've just finished + reading a colon, slash, dollar or P descriptor. */ + t = format_lex (); + if (t == FMT_ERROR) + goto fail; +optional_comma_1: + switch (t) + { + case FMT_COMMA: + break; + + case FMT_RPAREN: + level--; + if (level < 0) + goto finished; + goto between_desc; + + default: + /* Assume that we have another format item. */ + saved_token = t; + break; + } + + goto format_item; + +extension_optional_comma: + /* As a GNU extension, permit a missing comma after a string literal. */ + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + switch (t) + { + case FMT_COMMA: + break; + + case FMT_RPAREN: + level--; + if (level < 0) + goto finished; + goto between_desc; + + case FMT_COLON: + case FMT_SLASH: + goto optional_comma; + + case FMT_END: + error = unexpected_end; + goto syntax; + + default: + if (gfc_notify_std (GFC_STD_GNU, "Extension: Missing comma at %C") + == FAILURE) + return FAILURE; + saved_token = t; + break; + } + + goto format_item; + +syntax: + if (mode != MODE_FORMAT) + format_locus.nextc += format_string_pos; + if (error == unexpected_element) + gfc_error (error, error_element, &format_locus); + else + gfc_error ("%s in format string at %L", error, &format_locus); +fail: + rv = FAILURE; + +finished: + return rv; +} + + +/* Given an expression node that is a constant string, see if it looks + like a format string. */ + +static gfc_try +check_format_string (gfc_expr *e, bool is_input) +{ + if (!e || e->ts.type != BT_CHARACTER || e->expr_type != EXPR_CONSTANT) + return SUCCESS; + + mode = MODE_STRING; + format_string = e->value.character.string; + + /* More elaborate measures are needed to show where a problem is within a + format string that has been calculated, but that's probably not worth the + effort. */ + format_locus = e->where; + + return check_format (is_input); +} + + +/************ Fortran 95 I/O statement matchers *************/ + +/* Match a FORMAT statement. This amounts to actually parsing the + format descriptors in order to correctly locate the end of the + format string. */ + +match +gfc_match_format (void) +{ + gfc_expr *e; + locus start; + + if (gfc_current_ns->proc_name + && gfc_current_ns->proc_name->attr.flavor == FL_MODULE) + { + gfc_error ("Format statement in module main block at %C"); + return MATCH_ERROR; + } + + if (gfc_statement_label == NULL) + { + gfc_error ("Missing format label at %C"); + return MATCH_ERROR; + } + gfc_gobble_whitespace (); + + mode = MODE_FORMAT; + format_length = 0; + + start = gfc_current_locus; + + if (check_format (false) == FAILURE) + return MATCH_ERROR; + + if (gfc_match_eos () != MATCH_YES) + { + gfc_syntax_error (ST_FORMAT); + return MATCH_ERROR; + } + + /* The label doesn't get created until after the statement is done + being matched, so we have to leave the string for later. */ + + gfc_current_locus = start; /* Back to the beginning */ + + new_st.loc = start; + new_st.op = EXEC_NOP; + + e = gfc_get_expr(); + e->expr_type = EXPR_CONSTANT; + e->ts.type = BT_CHARACTER; + e->ts.kind = gfc_default_character_kind; + e->where = start; + e->value.character.string = format_string + = gfc_get_wide_string (format_length + 1); + e->value.character.length = format_length; + gfc_statement_label->format = e; + + mode = MODE_COPY; + check_format (false); /* Guaranteed to succeed */ + gfc_match_eos (); /* Guaranteed to succeed */ + + return MATCH_YES; +} + + +/* Match an expression I/O tag of some sort. */ + +static match +match_etag (const io_tag *tag, gfc_expr **v) +{ + gfc_expr *result; + match m; + + m = gfc_match (tag->spec); + if (m != MATCH_YES) + return m; + + m = gfc_match (tag->value, &result); + if (m != MATCH_YES) + { + gfc_error ("Invalid value for %s specification at %C", tag->name); + return MATCH_ERROR; + } + + if (*v != NULL) + { + gfc_error ("Duplicate %s specification at %C", tag->name); + gfc_free_expr (result); + return MATCH_ERROR; + } + + *v = result; + return MATCH_YES; +} + + +/* Match a variable I/O tag of some sort. */ + +static match +match_vtag (const io_tag *tag, gfc_expr **v) +{ + gfc_expr *result; + match m; + + m = gfc_match (tag->spec); + if (m != MATCH_YES) + return m; + + m = gfc_match (tag->value, &result); + if (m != MATCH_YES) + { + gfc_error ("Invalid value for %s specification at %C", tag->name); + return MATCH_ERROR; + } + + if (*v != NULL) + { + gfc_error ("Duplicate %s specification at %C", tag->name); + gfc_free_expr (result); + return MATCH_ERROR; + } + + if (result->symtree->n.sym->attr.intent == INTENT_IN) + { + gfc_error ("Variable %s cannot be INTENT(IN) at %C", tag->name); + gfc_free_expr (result); + return MATCH_ERROR; + } + + if (gfc_pure (NULL) && gfc_impure_variable (result->symtree->n.sym)) + { + gfc_error ("Variable %s cannot be assigned in PURE procedure at %C", + tag->name); + gfc_free_expr (result); + return MATCH_ERROR; + } + + *v = result; + return MATCH_YES; +} + + +/* Match I/O tags that cause variables to become redefined. */ + +static match +match_out_tag (const io_tag *tag, gfc_expr **result) +{ + match m; + + m = match_vtag (tag, result); + if (m == MATCH_YES) + gfc_check_do_variable ((*result)->symtree); + + return m; +} + + +/* Match a label I/O tag. */ + +static match +match_ltag (const io_tag *tag, gfc_st_label ** label) +{ + match m; + gfc_st_label *old; + + old = *label; + m = gfc_match (tag->spec); + if (m != MATCH_YES) + return m; + + m = gfc_match (tag->value, label); + if (m != MATCH_YES) + { + gfc_error ("Invalid value for %s specification at %C", tag->name); + return MATCH_ERROR; + } + + if (old) + { + gfc_error ("Duplicate %s label specification at %C", tag->name); + return MATCH_ERROR; + } + + if (gfc_reference_st_label (*label, ST_LABEL_TARGET) == FAILURE) + return MATCH_ERROR; + + return m; +} + + +/* Resolution of the FORMAT tag, to be called from resolve_tag. */ + +static gfc_try +resolve_tag_format (const gfc_expr *e) +{ + if (e->expr_type == EXPR_CONSTANT + && (e->ts.type != BT_CHARACTER + || e->ts.kind != gfc_default_character_kind)) + { + gfc_error ("Constant expression in FORMAT tag at %L must be " + "of type default CHARACTER", &e->where); + return FAILURE; + } + + /* If e's rank is zero and e is not an element of an array, it should be + of integer or character type. The integer variable should be + ASSIGNED. */ + if (e->symtree == NULL || e->symtree->n.sym->as == NULL + || e->symtree->n.sym->as->rank == 0) + { + if (e->ts.type != BT_CHARACTER && e->ts.type != BT_INTEGER) + { + gfc_error ("FORMAT tag at %L must be of type CHARACTER or INTEGER", + &e->where); + return FAILURE; + } + else if (e->ts.type == BT_INTEGER && e->expr_type == EXPR_VARIABLE) + { + if (gfc_notify_std (GFC_STD_F95_DEL, "Deleted feature: ASSIGNED " + "variable in FORMAT tag at %L", &e->where) + == FAILURE) + return FAILURE; + if (e->symtree->n.sym->attr.assign != 1) + { + gfc_error ("Variable '%s' at %L has not been assigned a " + "format label", e->symtree->n.sym->name, &e->where); + return FAILURE; + } + } + else if (e->ts.type == BT_INTEGER) + { + gfc_error ("Scalar '%s' in FORMAT tag at %L is not an ASSIGNED " + "variable", gfc_basic_typename (e->ts.type), &e->where); + return FAILURE; + } + + return SUCCESS; + } + + /* If rank is nonzero, we allow the type to be character under GFC_STD_GNU + and other type under GFC_STD_LEGACY. It may be assigned an Hollerith + constant. */ + if (e->ts.type == BT_CHARACTER) + { + if (gfc_notify_std (GFC_STD_GNU, "Extension: Character array " + "in FORMAT tag at %L", &e->where) == FAILURE) + return FAILURE; + } + else + { + if (gfc_notify_std (GFC_STD_LEGACY, "Extension: Non-character " + "in FORMAT tag at %L", &e->where) == FAILURE) + return FAILURE; + } + + return SUCCESS; +} + + +/* Do expression resolution and type-checking on an expression tag. */ + +static gfc_try +resolve_tag (const io_tag *tag, gfc_expr *e) +{ + if (e == NULL) + return SUCCESS; + + if (gfc_resolve_expr (e) == FAILURE) + return FAILURE; + + if (tag == &tag_format) + return resolve_tag_format (e); + + if (e->ts.type != tag->type) + { + gfc_error ("%s tag at %L must be of type %s", tag->name, + &e->where, gfc_basic_typename (tag->type)); + return FAILURE; + } + + if (e->rank != 0) + { + gfc_error ("%s tag at %L must be scalar", tag->name, &e->where); + return FAILURE; + } + + if (tag == &tag_iomsg) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: IOMSG tag at %L", + &e->where) == FAILURE) + return FAILURE; + } + + if ((tag == &tag_iostat || tag == &tag_size || tag == &tag_iolength) + && e->ts.kind != gfc_default_integer_kind) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 95 requires default " + "INTEGER in %s tag at %L", tag->name, &e->where) + == FAILURE) + return FAILURE; + } + + if (tag == &tag_convert) + { + if (gfc_notify_std (GFC_STD_GNU, "Extension: CONVERT tag at %L", + &e->where) == FAILURE) + return FAILURE; + } + + return SUCCESS; +} + + +/* Match a single tag of an OPEN statement. */ + +static match +match_open_element (gfc_open *open) +{ + match m; + + m = match_etag (&tag_e_async, &open->asynchronous); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_unit, &open->unit); + if (m != MATCH_NO) + return m; + m = match_out_tag (&tag_iomsg, &open->iomsg); + if (m != MATCH_NO) + return m; + m = match_out_tag (&tag_iostat, &open->iostat); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_file, &open->file); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_status, &open->status); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_access, &open->access); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_form, &open->form); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_recl, &open->recl); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_blank, &open->blank); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_position, &open->position); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_action, &open->action); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_delim, &open->delim); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_pad, &open->pad); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_decimal, &open->decimal); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_encoding, &open->encoding); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_round, &open->round); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_sign, &open->sign); + if (m != MATCH_NO) + return m; + m = match_ltag (&tag_err, &open->err); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_convert, &open->convert); + if (m != MATCH_NO) + return m; + + return MATCH_NO; +} + + +/* Free the gfc_open structure and all the expressions it contains. */ + +void +gfc_free_open (gfc_open *open) +{ + if (open == NULL) + return; + + gfc_free_expr (open->unit); + gfc_free_expr (open->iomsg); + gfc_free_expr (open->iostat); + gfc_free_expr (open->file); + gfc_free_expr (open->status); + gfc_free_expr (open->access); + gfc_free_expr (open->form); + gfc_free_expr (open->recl); + gfc_free_expr (open->blank); + gfc_free_expr (open->position); + gfc_free_expr (open->action); + gfc_free_expr (open->delim); + gfc_free_expr (open->pad); + gfc_free_expr (open->decimal); + gfc_free_expr (open->encoding); + gfc_free_expr (open->round); + gfc_free_expr (open->sign); + gfc_free_expr (open->convert); + gfc_free_expr (open->asynchronous); + gfc_free (open); +} + + +/* Resolve everything in a gfc_open structure. */ + +gfc_try +gfc_resolve_open (gfc_open *open) +{ + + RESOLVE_TAG (&tag_unit, open->unit); + RESOLVE_TAG (&tag_iomsg, open->iomsg); + RESOLVE_TAG (&tag_iostat, open->iostat); + RESOLVE_TAG (&tag_file, open->file); + RESOLVE_TAG (&tag_status, open->status); + RESOLVE_TAG (&tag_e_access, open->access); + RESOLVE_TAG (&tag_e_form, open->form); + RESOLVE_TAG (&tag_e_recl, open->recl); + RESOLVE_TAG (&tag_e_blank, open->blank); + RESOLVE_TAG (&tag_e_position, open->position); + RESOLVE_TAG (&tag_e_action, open->action); + RESOLVE_TAG (&tag_e_delim, open->delim); + RESOLVE_TAG (&tag_e_pad, open->pad); + RESOLVE_TAG (&tag_e_decimal, open->decimal); + RESOLVE_TAG (&tag_e_encoding, open->encoding); + RESOLVE_TAG (&tag_e_async, open->asynchronous); + RESOLVE_TAG (&tag_e_round, open->round); + RESOLVE_TAG (&tag_e_sign, open->sign); + RESOLVE_TAG (&tag_convert, open->convert); + + if (gfc_reference_st_label (open->err, ST_LABEL_TARGET) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* Check if a given value for a SPECIFIER is either in the list of values + allowed in F95 or F2003, issuing an error message and returning a zero + value if it is not allowed. */ + +static int +compare_to_allowed_values (const char *specifier, const char *allowed[], + const char *allowed_f2003[], + const char *allowed_gnu[], gfc_char_t *value, + const char *statement, bool warn) +{ + int i; + unsigned int len; + + len = gfc_wide_strlen (value); + if (len > 0) + { + for (len--; len > 0; len--) + if (value[len] != ' ') + break; + len++; + } + + for (i = 0; allowed[i]; i++) + if (len == strlen (allowed[i]) + && gfc_wide_strncasecmp (value, allowed[i], strlen (allowed[i])) == 0) + return 1; + + for (i = 0; allowed_f2003 && allowed_f2003[i]; i++) + if (len == strlen (allowed_f2003[i]) + && gfc_wide_strncasecmp (value, allowed_f2003[i], + strlen (allowed_f2003[i])) == 0) + { + notification n = gfc_notification_std (GFC_STD_F2003); + + if (n == WARNING || (warn && n == ERROR)) + { + gfc_warning ("Fortran 2003: %s specifier in %s statement at %C " + "has value '%s'", specifier, statement, + allowed_f2003[i]); + return 1; + } + else + if (n == ERROR) + { + gfc_notify_std (GFC_STD_F2003, "Fortran 2003: %s specifier in " + "%s statement at %C has value '%s'", specifier, + statement, allowed_f2003[i]); + return 0; + } + + /* n == SILENT */ + return 1; + } + + for (i = 0; allowed_gnu && allowed_gnu[i]; i++) + if (len == strlen (allowed_gnu[i]) + && gfc_wide_strncasecmp (value, allowed_gnu[i], + strlen (allowed_gnu[i])) == 0) + { + notification n = gfc_notification_std (GFC_STD_GNU); + + if (n == WARNING || (warn && n == ERROR)) + { + gfc_warning ("Extension: %s specifier in %s statement at %C " + "has value '%s'", specifier, statement, + allowed_gnu[i]); + return 1; + } + else + if (n == ERROR) + { + gfc_notify_std (GFC_STD_GNU, "Extension: %s specifier in " + "%s statement at %C has value '%s'", specifier, + statement, allowed_gnu[i]); + return 0; + } + + /* n == SILENT */ + return 1; + } + + if (warn) + { + char *s = gfc_widechar_to_char (value, -1); + gfc_warning ("%s specifier in %s statement at %C has invalid value '%s'", + specifier, statement, s); + gfc_free (s); + return 1; + } + else + { + char *s = gfc_widechar_to_char (value, -1); + gfc_error ("%s specifier in %s statement at %C has invalid value '%s'", + specifier, statement, s); + gfc_free (s); + return 0; + } +} + + +/* Match an OPEN statement. */ + +match +gfc_match_open (void) +{ + gfc_open *open; + match m; + bool warn; + + m = gfc_match_char ('('); + if (m == MATCH_NO) + return m; + + open = XCNEW (gfc_open); + + m = match_open_element (open); + + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + { + m = gfc_match_expr (&open->unit); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + } + + for (;;) + { + if (gfc_match_char (')') == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + + m = match_open_element (open); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + } + + if (gfc_match_eos () == MATCH_NO) + goto syntax; + + if (gfc_pure (NULL)) + { + gfc_error ("OPEN statement not allowed in PURE procedure at %C"); + goto cleanup; + } + + warn = (open->err || open->iostat) ? true : false; + /* Checks on the ACCESS specifier. */ + if (open->access && open->access->expr_type == EXPR_CONSTANT) + { + static const char *access_f95[] = { "SEQUENTIAL", "DIRECT", NULL }; + static const char *access_f2003[] = { "STREAM", NULL }; + static const char *access_gnu[] = { "APPEND", NULL }; + + if (!compare_to_allowed_values ("ACCESS", access_f95, access_f2003, + access_gnu, + open->access->value.character.string, + "OPEN", warn)) + goto cleanup; + } + + /* Checks on the ACTION specifier. */ + if (open->action && open->action->expr_type == EXPR_CONSTANT) + { + static const char *action[] = { "READ", "WRITE", "READWRITE", NULL }; + + if (!compare_to_allowed_values ("ACTION", action, NULL, NULL, + open->action->value.character.string, + "OPEN", warn)) + goto cleanup; + } + + /* Checks on the ASYNCHRONOUS specifier. */ + if (open->asynchronous) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ASYNCHRONOUS= at %C " + "not allowed in Fortran 95") == FAILURE) + goto cleanup; + + if (open->asynchronous->expr_type == EXPR_CONSTANT) + { + static const char * asynchronous[] = { "YES", "NO", NULL }; + + if (!compare_to_allowed_values ("ASYNCHRONOUS", asynchronous, + NULL, NULL, open->asynchronous->value.character.string, + "OPEN", warn)) + goto cleanup; + } + } + + /* Checks on the BLANK specifier. */ + if (open->blank) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: BLANK= at %C " + "not allowed in Fortran 95") == FAILURE) + goto cleanup; + + if (open->blank->expr_type == EXPR_CONSTANT) + { + static const char *blank[] = { "ZERO", "NULL", NULL }; + + if (!compare_to_allowed_values ("BLANK", blank, NULL, NULL, + open->blank->value.character.string, + "OPEN", warn)) + goto cleanup; + } + } + + /* Checks on the DECIMAL specifier. */ + if (open->decimal) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: DECIMAL= at %C " + "not allowed in Fortran 95") == FAILURE) + goto cleanup; + + if (open->decimal->expr_type == EXPR_CONSTANT) + { + static const char * decimal[] = { "COMMA", "POINT", NULL }; + + if (!compare_to_allowed_values ("DECIMAL", decimal, NULL, NULL, + open->decimal->value.character.string, + "OPEN", warn)) + goto cleanup; + } + } + + /* Checks on the DELIM specifier. */ + if (open->delim) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: DELIM= at %C " + "not allowed in Fortran 95") == FAILURE) + goto cleanup; + + if (open->delim->expr_type == EXPR_CONSTANT) + { + static const char *delim[] = { "APOSTROPHE", "QUOTE", "NONE", NULL }; + + if (!compare_to_allowed_values ("DELIM", delim, NULL, NULL, + open->delim->value.character.string, + "OPEN", warn)) + goto cleanup; + } + } + + /* Checks on the ENCODING specifier. */ + if (open->encoding) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ENCODING= at %C " + "not allowed in Fortran 95") == FAILURE) + goto cleanup; + + if (open->encoding->expr_type == EXPR_CONSTANT) + { + static const char * encoding[] = { "DEFAULT", "UTF-8", NULL }; + + if (!compare_to_allowed_values ("ENCODING", encoding, NULL, NULL, + open->encoding->value.character.string, + "OPEN", warn)) + goto cleanup; + } + } + + /* Checks on the FORM specifier. */ + if (open->form && open->form->expr_type == EXPR_CONSTANT) + { + static const char *form[] = { "FORMATTED", "UNFORMATTED", NULL }; + + if (!compare_to_allowed_values ("FORM", form, NULL, NULL, + open->form->value.character.string, + "OPEN", warn)) + goto cleanup; + } + + /* Checks on the PAD specifier. */ + if (open->pad && open->pad->expr_type == EXPR_CONSTANT) + { + static const char *pad[] = { "YES", "NO", NULL }; + + if (!compare_to_allowed_values ("PAD", pad, NULL, NULL, + open->pad->value.character.string, + "OPEN", warn)) + goto cleanup; + } + + /* Checks on the POSITION specifier. */ + if (open->position && open->position->expr_type == EXPR_CONSTANT) + { + static const char *position[] = { "ASIS", "REWIND", "APPEND", NULL }; + + if (!compare_to_allowed_values ("POSITION", position, NULL, NULL, + open->position->value.character.string, + "OPEN", warn)) + goto cleanup; + } + + /* Checks on the ROUND specifier. */ + if (open->round) + { + /* When implemented, change the following to use gfc_notify_std F2003. */ + gfc_error ("Fortran F2003: ROUND= specifier at %C not implemented"); + goto cleanup; + + if (open->round->expr_type == EXPR_CONSTANT) + { + static const char * round[] = { "UP", "DOWN", "ZERO", "NEAREST", + "COMPATIBLE", "PROCESSOR_DEFINED", + NULL }; + + if (!compare_to_allowed_values ("ROUND", round, NULL, NULL, + open->round->value.character.string, + "OPEN", warn)) + goto cleanup; + } + } + + /* Checks on the SIGN specifier. */ + if (open->sign) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: SIGN= at %C " + "not allowed in Fortran 95") == FAILURE) + goto cleanup; + + if (open->sign->expr_type == EXPR_CONSTANT) + { + static const char * sign[] = { "PLUS", "SUPPRESS", "PROCESSOR_DEFINED", + NULL }; + + if (!compare_to_allowed_values ("SIGN", sign, NULL, NULL, + open->sign->value.character.string, + "OPEN", warn)) + goto cleanup; + } + } + +#define warn_or_error(...) \ +{ \ + if (warn) \ + gfc_warning (__VA_ARGS__); \ + else \ + { \ + gfc_error (__VA_ARGS__); \ + goto cleanup; \ + } \ +} + + /* Checks on the RECL specifier. */ + if (open->recl && open->recl->expr_type == EXPR_CONSTANT + && open->recl->ts.type == BT_INTEGER + && mpz_sgn (open->recl->value.integer) != 1) + { + warn_or_error ("RECL in OPEN statement at %C must be positive"); + } + + /* Checks on the STATUS specifier. */ + if (open->status && open->status->expr_type == EXPR_CONSTANT) + { + static const char *status[] = { "OLD", "NEW", "SCRATCH", + "REPLACE", "UNKNOWN", NULL }; + + if (!compare_to_allowed_values ("STATUS", status, NULL, NULL, + open->status->value.character.string, + "OPEN", warn)) + goto cleanup; + + /* F2003, 9.4.5: If the STATUS= specifier has the value NEW or REPLACE, + the FILE= specifier shall appear. */ + if (open->file == NULL + && (gfc_wide_strncasecmp (open->status->value.character.string, + "replace", 7) == 0 + || gfc_wide_strncasecmp (open->status->value.character.string, + "new", 3) == 0)) + { + char *s = gfc_widechar_to_char (open->status->value.character.string, + -1); + warn_or_error ("The STATUS specified in OPEN statement at %C is " + "'%s' and no FILE specifier is present", s); + gfc_free (s); + } + + /* F2003, 9.4.5: If the STATUS= specifier has the value SCRATCH, + the FILE= specifier shall not appear. */ + if (gfc_wide_strncasecmp (open->status->value.character.string, + "scratch", 7) == 0 && open->file) + { + warn_or_error ("The STATUS specified in OPEN statement at %C " + "cannot have the value SCRATCH if a FILE specifier " + "is present"); + } + } + + /* Things that are not allowed for unformatted I/O. */ + if (open->form && open->form->expr_type == EXPR_CONSTANT + && (open->delim || open->decimal || open->encoding || open->round + || open->sign || open->pad || open->blank) + && gfc_wide_strncasecmp (open->form->value.character.string, + "unformatted", 11) == 0) + { + const char *spec = (open->delim ? "DELIM " + : (open->pad ? "PAD " : open->blank + ? "BLANK " : "")); + + warn_or_error ("%s specifier at %C not allowed in OPEN statement for " + "unformatted I/O", spec); + } + + if (open->recl && open->access && open->access->expr_type == EXPR_CONSTANT + && gfc_wide_strncasecmp (open->access->value.character.string, + "stream", 6) == 0) + { + warn_or_error ("RECL specifier not allowed in OPEN statement at %C for " + "stream I/O"); + } + + if (open->position + && open->access && open->access->expr_type == EXPR_CONSTANT + && !(gfc_wide_strncasecmp (open->access->value.character.string, + "sequential", 10) == 0 + || gfc_wide_strncasecmp (open->access->value.character.string, + "stream", 6) == 0 + || gfc_wide_strncasecmp (open->access->value.character.string, + "append", 6) == 0)) + { + warn_or_error ("POSITION specifier in OPEN statement at %C only allowed " + "for stream or sequential ACCESS"); + } + +#undef warn_or_error + + new_st.op = EXEC_OPEN; + new_st.ext.open = open; + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_OPEN); + +cleanup: + gfc_free_open (open); + return MATCH_ERROR; +} + + +/* Free a gfc_close structure an all its expressions. */ + +void +gfc_free_close (gfc_close *close) +{ + if (close == NULL) + return; + + gfc_free_expr (close->unit); + gfc_free_expr (close->iomsg); + gfc_free_expr (close->iostat); + gfc_free_expr (close->status); + gfc_free (close); +} + + +/* Match elements of a CLOSE statement. */ + +static match +match_close_element (gfc_close *close) +{ + match m; + + m = match_etag (&tag_unit, &close->unit); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_status, &close->status); + if (m != MATCH_NO) + return m; + m = match_out_tag (&tag_iomsg, &close->iomsg); + if (m != MATCH_NO) + return m; + m = match_out_tag (&tag_iostat, &close->iostat); + if (m != MATCH_NO) + return m; + m = match_ltag (&tag_err, &close->err); + if (m != MATCH_NO) + return m; + + return MATCH_NO; +} + + +/* Match a CLOSE statement. */ + +match +gfc_match_close (void) +{ + gfc_close *close; + match m; + bool warn; + + m = gfc_match_char ('('); + if (m == MATCH_NO) + return m; + + close = XCNEW (gfc_close); + + m = match_close_element (close); + + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + { + m = gfc_match_expr (&close->unit); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + } + + for (;;) + { + if (gfc_match_char (')') == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + + m = match_close_element (close); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + } + + if (gfc_match_eos () == MATCH_NO) + goto syntax; + + if (gfc_pure (NULL)) + { + gfc_error ("CLOSE statement not allowed in PURE procedure at %C"); + goto cleanup; + } + + warn = (close->iostat || close->err) ? true : false; + + /* Checks on the STATUS specifier. */ + if (close->status && close->status->expr_type == EXPR_CONSTANT) + { + static const char *status[] = { "KEEP", "DELETE", NULL }; + + if (!compare_to_allowed_values ("STATUS", status, NULL, NULL, + close->status->value.character.string, + "CLOSE", warn)) + goto cleanup; + } + + new_st.op = EXEC_CLOSE; + new_st.ext.close = close; + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_CLOSE); + +cleanup: + gfc_free_close (close); + return MATCH_ERROR; +} + + +/* Resolve everything in a gfc_close structure. */ + +gfc_try +gfc_resolve_close (gfc_close *close) +{ + RESOLVE_TAG (&tag_unit, close->unit); + RESOLVE_TAG (&tag_iomsg, close->iomsg); + RESOLVE_TAG (&tag_iostat, close->iostat); + RESOLVE_TAG (&tag_status, close->status); + + if (gfc_reference_st_label (close->err, ST_LABEL_TARGET) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* Free a gfc_filepos structure. */ + +void +gfc_free_filepos (gfc_filepos *fp) +{ + gfc_free_expr (fp->unit); + gfc_free_expr (fp->iomsg); + gfc_free_expr (fp->iostat); + gfc_free (fp); +} + + +/* Match elements of a REWIND, BACKSPACE, ENDFILE, or FLUSH statement. */ + +static match +match_file_element (gfc_filepos *fp) +{ + match m; + + m = match_etag (&tag_unit, &fp->unit); + if (m != MATCH_NO) + return m; + m = match_out_tag (&tag_iomsg, &fp->iomsg); + if (m != MATCH_NO) + return m; + m = match_out_tag (&tag_iostat, &fp->iostat); + if (m != MATCH_NO) + return m; + m = match_ltag (&tag_err, &fp->err); + if (m != MATCH_NO) + return m; + + return MATCH_NO; +} + + +/* Match the second half of the file-positioning statements, REWIND, + BACKSPACE, ENDFILE, or the FLUSH statement. */ + +static match +match_filepos (gfc_statement st, gfc_exec_op op) +{ + gfc_filepos *fp; + match m; + + fp = XCNEW (gfc_filepos); + + if (gfc_match_char ('(') == MATCH_NO) + { + m = gfc_match_expr (&fp->unit); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + + goto done; + } + + m = match_file_element (fp); + if (m == MATCH_ERROR) + goto done; + if (m == MATCH_NO) + { + m = gfc_match_expr (&fp->unit); + if (m == MATCH_ERROR) + goto done; + if (m == MATCH_NO) + goto syntax; + } + + for (;;) + { + if (gfc_match_char (')') == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + + m = match_file_element (fp); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + } + +done: + if (gfc_match_eos () != MATCH_YES) + goto syntax; + + if (gfc_pure (NULL)) + { + gfc_error ("%s statement not allowed in PURE procedure at %C", + gfc_ascii_statement (st)); + + goto cleanup; + } + + new_st.op = op; + new_st.ext.filepos = fp; + return MATCH_YES; + +syntax: + gfc_syntax_error (st); + +cleanup: + gfc_free_filepos (fp); + return MATCH_ERROR; +} + + +gfc_try +gfc_resolve_filepos (gfc_filepos *fp) +{ + RESOLVE_TAG (&tag_unit, fp->unit); + RESOLVE_TAG (&tag_iostat, fp->iostat); + RESOLVE_TAG (&tag_iomsg, fp->iomsg); + if (gfc_reference_st_label (fp->err, ST_LABEL_TARGET) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* Match the file positioning statements: ENDFILE, BACKSPACE, REWIND, + and the FLUSH statement. */ + +match +gfc_match_endfile (void) +{ + return match_filepos (ST_END_FILE, EXEC_ENDFILE); +} + +match +gfc_match_backspace (void) +{ + return match_filepos (ST_BACKSPACE, EXEC_BACKSPACE); +} + +match +gfc_match_rewind (void) +{ + return match_filepos (ST_REWIND, EXEC_REWIND); +} + +match +gfc_match_flush (void) +{ + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: FLUSH statement at %C") + == FAILURE) + return MATCH_ERROR; + + return match_filepos (ST_FLUSH, EXEC_FLUSH); +} + +/******************** Data Transfer Statements *********************/ + +/* Return a default unit number. */ + +static gfc_expr * +default_unit (io_kind k) +{ + int unit; + + if (k == M_READ) + unit = 5; + else + unit = 6; + + return gfc_int_expr (unit); +} + + +/* Match a unit specification for a data transfer statement. */ + +static match +match_dt_unit (io_kind k, gfc_dt *dt) +{ + gfc_expr *e; + + if (gfc_match_char ('*') == MATCH_YES) + { + if (dt->io_unit != NULL) + goto conflict; + + dt->io_unit = default_unit (k); + return MATCH_YES; + } + + if (gfc_match_expr (&e) == MATCH_YES) + { + if (dt->io_unit != NULL) + { + gfc_free_expr (e); + goto conflict; + } + + dt->io_unit = e; + return MATCH_YES; + } + + return MATCH_NO; + +conflict: + gfc_error ("Duplicate UNIT specification at %C"); + return MATCH_ERROR; +} + + +/* Match a format specification. */ + +static match +match_dt_format (gfc_dt *dt) +{ + locus where; + gfc_expr *e; + gfc_st_label *label; + match m; + + where = gfc_current_locus; + + if (gfc_match_char ('*') == MATCH_YES) + { + if (dt->format_expr != NULL || dt->format_label != NULL) + goto conflict; + + dt->format_label = &format_asterisk; + return MATCH_YES; + } + + if ((m = gfc_match_st_label (&label)) == MATCH_YES) + { + if (dt->format_expr != NULL || dt->format_label != NULL) + { + gfc_free_st_label (label); + goto conflict; + } + + if (gfc_reference_st_label (label, ST_LABEL_FORMAT) == FAILURE) + return MATCH_ERROR; + + dt->format_label = label; + return MATCH_YES; + } + else if (m == MATCH_ERROR) + /* The label was zero or too large. Emit the correct diagnosis. */ + return MATCH_ERROR; + + if (gfc_match_expr (&e) == MATCH_YES) + { + if (dt->format_expr != NULL || dt->format_label != NULL) + { + gfc_free_expr (e); + goto conflict; + } + dt->format_expr = e; + return MATCH_YES; + } + + gfc_current_locus = where; /* The only case where we have to restore */ + + return MATCH_NO; + +conflict: + gfc_error ("Duplicate format specification at %C"); + return MATCH_ERROR; +} + + +/* Traverse a namelist that is part of a READ statement to make sure + that none of the variables in the namelist are INTENT(IN). Returns + nonzero if we find such a variable. */ + +static int +check_namelist (gfc_symbol *sym) +{ + gfc_namelist *p; + + for (p = sym->namelist; p; p = p->next) + if (p->sym->attr.intent == INTENT_IN) + { + gfc_error ("Symbol '%s' in namelist '%s' is INTENT(IN) at %C", + p->sym->name, sym->name); + return 1; + } + + return 0; +} + + +/* Match a single data transfer element. */ + +static match +match_dt_element (io_kind k, gfc_dt *dt) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_symbol *sym; + match m; + + if (gfc_match (" unit =") == MATCH_YES) + { + m = match_dt_unit (k, dt); + if (m != MATCH_NO) + return m; + } + + if (gfc_match (" fmt =") == MATCH_YES) + { + m = match_dt_format (dt); + if (m != MATCH_NO) + return m; + } + + if (gfc_match (" nml = %n", name) == MATCH_YES) + { + if (dt->namelist != NULL) + { + gfc_error ("Duplicate NML specification at %C"); + return MATCH_ERROR; + } + + if (gfc_find_symbol (name, NULL, 1, &sym)) + return MATCH_ERROR; + + if (sym == NULL || sym->attr.flavor != FL_NAMELIST) + { + gfc_error ("Symbol '%s' at %C must be a NAMELIST group name", + sym != NULL ? sym->name : name); + return MATCH_ERROR; + } + + dt->namelist = sym; + if (k == M_READ && check_namelist (sym)) + return MATCH_ERROR; + + return MATCH_YES; + } + + m = match_etag (&tag_e_async, &dt->asynchronous); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_blank, &dt->blank); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_delim, &dt->delim); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_pad, &dt->pad); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_sign, &dt->sign); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_round, &dt->round); + if (m != MATCH_NO) + return m; + m = match_out_tag (&tag_id, &dt->id); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_e_decimal, &dt->decimal); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_rec, &dt->rec); + if (m != MATCH_NO) + return m; + m = match_etag (&tag_spos, &dt->pos); + if (m != MATCH_NO) + return m; + m = match_out_tag (&tag_iomsg, &dt->iomsg); + if (m != MATCH_NO) + return m; + m = match_out_tag (&tag_iostat, &dt->iostat); + if (m != MATCH_NO) + return m; + m = match_ltag (&tag_err, &dt->err); + if (m == MATCH_YES) + dt->err_where = gfc_current_locus; + if (m != MATCH_NO) + return m; + m = match_etag (&tag_advance, &dt->advance); + if (m != MATCH_NO) + return m; + m = match_out_tag (&tag_size, &dt->size); + if (m != MATCH_NO) + return m; + + m = match_ltag (&tag_end, &dt->end); + if (m == MATCH_YES) + { + if (k == M_WRITE) + { + gfc_error ("END tag at %C not allowed in output statement"); + return MATCH_ERROR; + } + dt->end_where = gfc_current_locus; + } + if (m != MATCH_NO) + return m; + + m = match_ltag (&tag_eor, &dt->eor); + if (m == MATCH_YES) + dt->eor_where = gfc_current_locus; + if (m != MATCH_NO) + return m; + + return MATCH_NO; +} + + +/* Free a data transfer structure and everything below it. */ + +void +gfc_free_dt (gfc_dt *dt) +{ + if (dt == NULL) + return; + + gfc_free_expr (dt->io_unit); + gfc_free_expr (dt->format_expr); + gfc_free_expr (dt->rec); + gfc_free_expr (dt->advance); + gfc_free_expr (dt->iomsg); + gfc_free_expr (dt->iostat); + gfc_free_expr (dt->size); + gfc_free_expr (dt->pad); + gfc_free_expr (dt->delim); + gfc_free_expr (dt->sign); + gfc_free_expr (dt->round); + gfc_free_expr (dt->blank); + gfc_free_expr (dt->decimal); + gfc_free_expr (dt->extra_comma); + gfc_free_expr (dt->pos); + gfc_free (dt); +} + + +/* Resolve everything in a gfc_dt structure. */ + +gfc_try +gfc_resolve_dt (gfc_dt *dt) +{ + gfc_expr *e; + + RESOLVE_TAG (&tag_format, dt->format_expr); + RESOLVE_TAG (&tag_rec, dt->rec); + RESOLVE_TAG (&tag_spos, dt->pos); + RESOLVE_TAG (&tag_advance, dt->advance); + RESOLVE_TAG (&tag_id, dt->id); + RESOLVE_TAG (&tag_iomsg, dt->iomsg); + RESOLVE_TAG (&tag_iostat, dt->iostat); + RESOLVE_TAG (&tag_size, dt->size); + RESOLVE_TAG (&tag_e_pad, dt->pad); + RESOLVE_TAG (&tag_e_delim, dt->delim); + RESOLVE_TAG (&tag_e_sign, dt->sign); + RESOLVE_TAG (&tag_e_round, dt->round); + RESOLVE_TAG (&tag_e_blank, dt->blank); + RESOLVE_TAG (&tag_e_decimal, dt->decimal); + RESOLVE_TAG (&tag_e_async, dt->asynchronous); + + e = dt->io_unit; + if (gfc_resolve_expr (e) == SUCCESS + && (e->ts.type != BT_INTEGER + && (e->ts.type != BT_CHARACTER || e->expr_type != EXPR_VARIABLE))) + { + /* If there is no extra comma signifying the "format" form of the IO + statement, then this must be an error. */ + if (!dt->extra_comma) + { + gfc_error ("UNIT specification at %L must be an INTEGER expression " + "or a CHARACTER variable", &e->where); + return FAILURE; + } + else + { + /* At this point, we have an extra comma. If io_unit has arrived as + type character, we assume its really the "format" form of the I/O + statement. We set the io_unit to the default unit and format to + the character expression. See F95 Standard section 9.4. */ + io_kind k; + k = dt->extra_comma->value.iokind; + if (e->ts.type == BT_CHARACTER && (k == M_READ || k == M_PRINT)) + { + dt->format_expr = dt->io_unit; + dt->io_unit = default_unit (k); + + /* Free this pointer now so that a warning/error is not triggered + below for the "Extension". */ + gfc_free_expr (dt->extra_comma); + dt->extra_comma = NULL; + } + + if (k == M_WRITE) + { + gfc_error ("Invalid form of WRITE statement at %L, UNIT required", + &dt->extra_comma->where); + return FAILURE; + } + } + } + + if (e->ts.type == BT_CHARACTER) + { + if (gfc_has_vector_index (e)) + { + gfc_error ("Internal unit with vector subscript at %L", &e->where); + return FAILURE; + } + } + + if (e->rank && e->ts.type != BT_CHARACTER) + { + gfc_error ("External IO UNIT cannot be an array at %L", &e->where); + return FAILURE; + } + + if (dt->extra_comma + && gfc_notify_std (GFC_STD_GNU, "Extension: Comma before i/o " + "item list at %L", &dt->extra_comma->where) == FAILURE) + return FAILURE; + + if (dt->err) + { + if (gfc_reference_st_label (dt->err, ST_LABEL_TARGET) == FAILURE) + return FAILURE; + if (dt->err->defined == ST_LABEL_UNKNOWN) + { + gfc_error ("ERR tag label %d at %L not defined", + dt->err->value, &dt->err_where); + return FAILURE; + } + } + + if (dt->end) + { + if (gfc_reference_st_label (dt->end, ST_LABEL_TARGET) == FAILURE) + return FAILURE; + if (dt->end->defined == ST_LABEL_UNKNOWN) + { + gfc_error ("END tag label %d at %L not defined", + dt->end->value, &dt->end_where); + return FAILURE; + } + } + + if (dt->eor) + { + if (gfc_reference_st_label (dt->eor, ST_LABEL_TARGET) == FAILURE) + return FAILURE; + if (dt->eor->defined == ST_LABEL_UNKNOWN) + { + gfc_error ("EOR tag label %d at %L not defined", + dt->eor->value, &dt->eor_where); + return FAILURE; + } + } + + /* Check the format label actually exists. */ + if (dt->format_label && dt->format_label != &format_asterisk + && dt->format_label->defined == ST_LABEL_UNKNOWN) + { + gfc_error ("FORMAT label %d at %L not defined", dt->format_label->value, + &dt->format_label->where); + return FAILURE; + } + return SUCCESS; +} + + +/* Given an io_kind, return its name. */ + +static const char * +io_kind_name (io_kind k) +{ + const char *name; + + switch (k) + { + case M_READ: + name = "READ"; + break; + case M_WRITE: + name = "WRITE"; + break; + case M_PRINT: + name = "PRINT"; + break; + case M_INQUIRE: + name = "INQUIRE"; + break; + default: + gfc_internal_error ("io_kind_name(): bad I/O-kind"); + } + + return name; +} + + +/* Match an IO iteration statement of the form: + + ( [ ,] , I = , [, ] ) + + which is equivalent to a single IO element. This function is + mutually recursive with match_io_element(). */ + +static match match_io_element (io_kind, gfc_code **); + +static match +match_io_iterator (io_kind k, gfc_code **result) +{ + gfc_code *head, *tail, *new_code; + gfc_iterator *iter; + locus old_loc; + match m; + int n; + + iter = NULL; + head = NULL; + old_loc = gfc_current_locus; + + if (gfc_match_char ('(') != MATCH_YES) + return MATCH_NO; + + m = match_io_element (k, &head); + tail = head; + + if (m != MATCH_YES || gfc_match_char (',') != MATCH_YES) + { + m = MATCH_NO; + goto cleanup; + } + + /* Can't be anything but an IO iterator. Build a list. */ + iter = gfc_get_iterator (); + + for (n = 1;; n++) + { + m = gfc_match_iterator (iter, 0); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_YES) + { + gfc_check_do_variable (iter->var->symtree); + break; + } + + m = match_io_element (k, &new_code); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + { + if (n > 2) + goto syntax; + goto cleanup; + } + + tail = gfc_append_code (tail, new_code); + + if (gfc_match_char (',') != MATCH_YES) + { + if (n > 2) + goto syntax; + m = MATCH_NO; + goto cleanup; + } + } + + if (gfc_match_char (')') != MATCH_YES) + goto syntax; + + new_code = gfc_get_code (); + new_code->op = EXEC_DO; + new_code->ext.iterator = iter; + + new_code->block = gfc_get_code (); + new_code->block->op = EXEC_DO; + new_code->block->next = head; + + *result = new_code; + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in I/O iterator at %C"); + m = MATCH_ERROR; + +cleanup: + gfc_free_iterator (iter, 1); + gfc_free_statements (head); + gfc_current_locus = old_loc; + return m; +} + + +/* Match a single element of an IO list, which is either a single + expression or an IO Iterator. */ + +static match +match_io_element (io_kind k, gfc_code **cpp) +{ + gfc_expr *expr; + gfc_code *cp; + match m; + + expr = NULL; + + m = match_io_iterator (k, cpp); + if (m == MATCH_YES) + return MATCH_YES; + + if (k == M_READ) + { + m = gfc_match_variable (&expr, 0); + if (m == MATCH_NO) + gfc_error ("Expected variable in READ statement at %C"); + } + else + { + m = gfc_match_expr (&expr); + if (m == MATCH_NO) + gfc_error ("Expected expression in %s statement at %C", + io_kind_name (k)); + } + + if (m == MATCH_YES) + switch (k) + { + case M_READ: + if (expr->symtree->n.sym->attr.intent == INTENT_IN) + { + gfc_error ("Variable '%s' in input list at %C cannot be " + "INTENT(IN)", expr->symtree->n.sym->name); + m = MATCH_ERROR; + } + + if (gfc_pure (NULL) + && gfc_impure_variable (expr->symtree->n.sym) + && current_dt->io_unit->ts.type == BT_CHARACTER) + { + gfc_error ("Cannot read to variable '%s' in PURE procedure at %C", + expr->symtree->n.sym->name); + m = MATCH_ERROR; + } + + if (gfc_check_do_variable (expr->symtree)) + m = MATCH_ERROR; + + break; + + case M_WRITE: + if (current_dt->io_unit->ts.type == BT_CHARACTER + && gfc_pure (NULL) + && current_dt->io_unit->expr_type == EXPR_VARIABLE + && gfc_impure_variable (current_dt->io_unit->symtree->n.sym)) + { + gfc_error ("Cannot write to internal file unit '%s' at %C " + "inside a PURE procedure", + current_dt->io_unit->symtree->n.sym->name); + m = MATCH_ERROR; + } + + break; + + default: + break; + } + + if (m != MATCH_YES) + { + gfc_free_expr (expr); + return MATCH_ERROR; + } + + cp = gfc_get_code (); + cp->op = EXEC_TRANSFER; + cp->expr = expr; + + *cpp = cp; + return MATCH_YES; +} + + +/* Match an I/O list, building gfc_code structures as we go. */ + +static match +match_io_list (io_kind k, gfc_code **head_p) +{ + gfc_code *head, *tail, *new_code; + match m; + + *head_p = head = tail = NULL; + if (gfc_match_eos () == MATCH_YES) + return MATCH_YES; + + for (;;) + { + m = match_io_element (k, &new_code); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + + tail = gfc_append_code (tail, new_code); + if (head == NULL) + head = new_code; + + if (gfc_match_eos () == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + + *head_p = head; + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in %s statement at %C", io_kind_name (k)); + +cleanup: + gfc_free_statements (head); + return MATCH_ERROR; +} + + +/* Attach the data transfer end node. */ + +static void +terminate_io (gfc_code *io_code) +{ + gfc_code *c; + + if (io_code == NULL) + io_code = new_st.block; + + c = gfc_get_code (); + c->op = EXEC_DT_END; + + /* Point to structure that is already there */ + c->ext.dt = new_st.ext.dt; + gfc_append_code (io_code, c); +} + + +/* Check the constraints for a data transfer statement. The majority of the + constraints appearing in 9.4 of the standard appear here. Some are handled + in resolve_tag and others in gfc_resolve_dt. */ + +static match +check_io_constraints (io_kind k, gfc_dt *dt, gfc_code *io_code, + locus *spec_end) +{ +#define io_constraint(condition,msg,arg)\ +if (condition) \ + {\ + gfc_error(msg,arg);\ + m = MATCH_ERROR;\ + } + + match m; + gfc_expr *expr; + gfc_symbol *sym = NULL; + bool warn, unformatted; + + warn = (dt->err || dt->iostat) ? true : false; + unformatted = dt->format_expr == NULL && dt->format_label == NULL + && dt->namelist == NULL; + + m = MATCH_YES; + + expr = dt->io_unit; + if (expr && expr->expr_type == EXPR_VARIABLE + && expr->ts.type == BT_CHARACTER) + { + sym = expr->symtree->n.sym; + + io_constraint (k == M_WRITE && sym->attr.intent == INTENT_IN, + "Internal file at %L must not be INTENT(IN)", + &expr->where); + + io_constraint (gfc_has_vector_index (dt->io_unit), + "Internal file incompatible with vector subscript at %L", + &expr->where); + + io_constraint (dt->rec != NULL, + "REC tag at %L is incompatible with internal file", + &dt->rec->where); + + io_constraint (dt->pos != NULL, + "POS tag at %L is incompatible with internal file", + &dt->pos->where); + + io_constraint (unformatted, + "Unformatted I/O not allowed with internal unit at %L", + &dt->io_unit->where); + + io_constraint (dt->asynchronous != NULL, + "ASYNCHRONOUS tag at %L not allowed with internal file", + &dt->asynchronous->where); + + if (dt->namelist != NULL) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Internal file " + "at %L with namelist", &expr->where) + == FAILURE) + m = MATCH_ERROR; + } + + io_constraint (dt->advance != NULL, + "ADVANCE tag at %L is incompatible with internal file", + &dt->advance->where); + } + + if (expr && expr->ts.type != BT_CHARACTER) + { + + io_constraint (gfc_pure (NULL) && (k == M_READ || k == M_WRITE), + "IO UNIT in %s statement at %C must be " + "an internal file in a PURE procedure", + io_kind_name (k)); + } + + if (k != M_READ) + { + io_constraint (dt->end, "END tag not allowed with output at %L", + &dt->end_where); + + io_constraint (dt->eor, "EOR tag not allowed with output at %L", + &dt->eor_where); + + io_constraint (dt->blank, "BLANK= specifier not allowed with output at %L", + &dt->blank->where); + + io_constraint (dt->pad, "PAD= specifier not allowed with output at %L", + &dt->pad->where); + + io_constraint (dt->size, "SIZE= specifier not allowed with output at %L", + &dt->size->where); + } + else + { + io_constraint (dt->size && dt->advance == NULL, + "SIZE tag at %L requires an ADVANCE tag", + &dt->size->where); + + io_constraint (dt->eor && dt->advance == NULL, + "EOR tag at %L requires an ADVANCE tag", + &dt->eor_where); + } + + if (dt->asynchronous) + { + static const char * asynchronous[] = { "YES", "NO", NULL }; + + if (gfc_reduce_init_expr (dt->asynchronous) != SUCCESS) + { + gfc_error ("ASYNCHRONOUS= specifier at %L must be an initialization " + "expression", &dt->asynchronous->where); + return MATCH_ERROR; + } + + if (!compare_to_allowed_values + ("ASYNCHRONOUS", asynchronous, NULL, NULL, + dt->asynchronous->value.character.string, + io_kind_name (k), warn)) + return MATCH_ERROR; + } + + if (dt->id) + { + bool not_yes + = !dt->asynchronous + || gfc_wide_strlen (dt->asynchronous->value.character.string) != 3 + || gfc_wide_strncasecmp (dt->asynchronous->value.character.string, + "yes", 3) != 0; + io_constraint (not_yes, + "ID= specifier at %L must be with ASYNCHRONOUS='yes' " + "specifier", &dt->id->where); + } + + if (dt->decimal) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: DECIMAL= at %C " + "not allowed in Fortran 95") == FAILURE) + return MATCH_ERROR; + + if (dt->decimal->expr_type == EXPR_CONSTANT) + { + static const char * decimal[] = { "COMMA", "POINT", NULL }; + + if (!compare_to_allowed_values ("DECIMAL", decimal, NULL, NULL, + dt->decimal->value.character.string, + io_kind_name (k), warn)) + return MATCH_ERROR; + + io_constraint (unformatted, + "the DECIMAL= specifier at %L must be with an " + "explicit format expression", &dt->decimal->where); + } + } + + if (dt->blank) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: BLANK= at %C " + "not allowed in Fortran 95") == FAILURE) + return MATCH_ERROR; + + if (dt->blank->expr_type == EXPR_CONSTANT) + { + static const char * blank[] = { "NULL", "ZERO", NULL }; + + if (!compare_to_allowed_values ("BLANK", blank, NULL, NULL, + dt->blank->value.character.string, + io_kind_name (k), warn)) + return MATCH_ERROR; + + io_constraint (unformatted, + "the BLANK= specifier at %L must be with an " + "explicit format expression", &dt->blank->where); + } + } + + if (dt->pad) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: PAD= at %C " + "not allowed in Fortran 95") == FAILURE) + return MATCH_ERROR; + + if (dt->pad->expr_type == EXPR_CONSTANT) + { + static const char * pad[] = { "YES", "NO", NULL }; + + if (!compare_to_allowed_values ("PAD", pad, NULL, NULL, + dt->pad->value.character.string, + io_kind_name (k), warn)) + return MATCH_ERROR; + + io_constraint (unformatted, + "the PAD= specifier at %L must be with an " + "explicit format expression", &dt->pad->where); + } + } + + if (dt->round) + { + /* When implemented, change the following to use gfc_notify_std F2003. + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ROUND= at %C " + "not allowed in Fortran 95") == FAILURE) + return MATCH_ERROR; */ + gfc_error ("F2003 Feature: ROUND= specifier at %C not implemented"); + return MATCH_ERROR; + + if (dt->round->expr_type == EXPR_CONSTANT) + { + static const char * round[] = { "UP", "DOWN", "ZERO", "NEAREST", + "COMPATIBLE", "PROCESSOR_DEFINED", + NULL }; + + if (!compare_to_allowed_values ("ROUND", round, NULL, NULL, + dt->round->value.character.string, + io_kind_name (k), warn)) + return MATCH_ERROR; + } + } + + if (dt->sign) + { + /* When implemented, change the following to use gfc_notify_std F2003. + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: SIGN= at %C " + "not allowed in Fortran 95") == FAILURE) + return MATCH_ERROR; */ + if (dt->sign->expr_type == EXPR_CONSTANT) + { + static const char * sign[] = { "PLUS", "SUPPRESS", "PROCESSOR_DEFINED", + NULL }; + + if (!compare_to_allowed_values ("SIGN", sign, NULL, NULL, + dt->sign->value.character.string, + io_kind_name (k), warn)) + return MATCH_ERROR; + + io_constraint (unformatted, + "SIGN= specifier at %L must be with an " + "explicit format expression", &dt->sign->where); + + io_constraint (k == M_READ, + "SIGN= specifier at %L not allowed in a " + "READ statement", &dt->sign->where); + } + } + + if (dt->delim) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: DELIM= at %C " + "not allowed in Fortran 95") == FAILURE) + return MATCH_ERROR; + + if (dt->delim->expr_type == EXPR_CONSTANT) + { + static const char *delim[] = { "APOSTROPHE", "QUOTE", "NONE", NULL }; + + if (!compare_to_allowed_values ("DELIM", delim, NULL, NULL, + dt->delim->value.character.string, + io_kind_name (k), warn)) + return MATCH_ERROR; + + io_constraint (k == M_READ, + "DELIM= specifier at %L not allowed in a " + "READ statement", &dt->delim->where); + + io_constraint (dt->format_label != &format_asterisk + && dt->namelist == NULL, + "DELIM= specifier at %L must have FMT=*", + &dt->delim->where); + + io_constraint (unformatted && dt->namelist == NULL, + "DELIM= specifier at %L must be with FMT=* or " + "NML= specifier ", &dt->delim->where); + } + } + + if (dt->namelist) + { + io_constraint (io_code && dt->namelist, + "NAMELIST cannot be followed by IO-list at %L", + &io_code->loc); + + io_constraint (dt->format_expr, + "IO spec-list cannot contain both NAMELIST group name " + "and format specification at %L", + &dt->format_expr->where); + + io_constraint (dt->format_label, + "IO spec-list cannot contain both NAMELIST group name " + "and format label at %L", spec_end); + + io_constraint (dt->rec, + "NAMELIST IO is not allowed with a REC= specifier " + "at %L", &dt->rec->where); + + io_constraint (dt->advance, + "NAMELIST IO is not allowed with a ADVANCE= specifier " + "at %L", &dt->advance->where); + } + + if (dt->rec) + { + io_constraint (dt->end, + "An END tag is not allowed with a " + "REC= specifier at %L", &dt->end_where); + + io_constraint (dt->format_label == &format_asterisk, + "FMT=* is not allowed with a REC= specifier " + "at %L", spec_end); + + io_constraint (dt->pos, + "POS= is not allowed with REC= specifier " + "at %L", &dt->pos->where); + } + + if (dt->advance) + { + int not_yes, not_no; + expr = dt->advance; + + io_constraint (dt->format_label == &format_asterisk, + "List directed format(*) is not allowed with a " + "ADVANCE= specifier at %L.", &expr->where); + + io_constraint (unformatted, + "the ADVANCE= specifier at %L must appear with an " + "explicit format expression", &expr->where); + + if (expr->expr_type == EXPR_CONSTANT && expr->ts.type == BT_CHARACTER) + { + const gfc_char_t *advance = expr->value.character.string; + not_no = gfc_wide_strlen (advance) != 2 + || gfc_wide_strncasecmp (advance, "no", 2) != 0; + not_yes = gfc_wide_strlen (advance) != 3 + || gfc_wide_strncasecmp (advance, "yes", 3) != 0; + } + else + { + not_no = 0; + not_yes = 0; + } + + io_constraint (not_no && not_yes, + "ADVANCE= specifier at %L must have value = " + "YES or NO.", &expr->where); + + io_constraint (dt->size && not_no && k == M_READ, + "SIZE tag at %L requires an ADVANCE = 'NO'", + &dt->size->where); + + io_constraint (dt->eor && not_no && k == M_READ, + "EOR tag at %L requires an ADVANCE = 'NO'", + &dt->eor_where); + } + + expr = dt->format_expr; + if (gfc_simplify_expr (expr, 0) == FAILURE + || check_format_string (expr, k == M_READ) == FAILURE) + return MATCH_ERROR; + + return m; +} +#undef io_constraint + + +/* Match a READ, WRITE or PRINT statement. */ + +static match +match_io (io_kind k) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_code *io_code; + gfc_symbol *sym; + int comma_flag; + locus where; + locus spec_end; + gfc_dt *dt; + match m; + + where = gfc_current_locus; + comma_flag = 0; + current_dt = dt = XCNEW (gfc_dt); + m = gfc_match_char ('('); + if (m == MATCH_NO) + { + where = gfc_current_locus; + if (k == M_WRITE) + goto syntax; + else if (k == M_PRINT) + { + /* Treat the non-standard case of PRINT namelist. */ + if ((gfc_current_form == FORM_FIXED || gfc_peek_ascii_char () == ' ') + && gfc_match_name (name) == MATCH_YES) + { + gfc_find_symbol (name, NULL, 1, &sym); + if (sym && sym->attr.flavor == FL_NAMELIST) + { + if (gfc_notify_std (GFC_STD_GNU, "PRINT namelist at " + "%C is an extension") == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + + dt->io_unit = default_unit (k); + dt->namelist = sym; + goto get_io_list; + } + else + gfc_current_locus = where; + } + } + + if (gfc_current_form == FORM_FREE) + { + char c = gfc_peek_ascii_char (); + if (c != ' ' && c != '*' && c != '\'' && c != '"') + { + m = MATCH_NO; + goto cleanup; + } + } + + m = match_dt_format (dt); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + + comma_flag = 1; + dt->io_unit = default_unit (k); + goto get_io_list; + } + else + { + /* Before issuing an error for a malformed 'print (1,*)' type of + error, check for a default-char-expr of the form ('(I0)'). */ + if (k == M_PRINT && m == MATCH_YES) + { + /* Reset current locus to get the initial '(' in an expression. */ + gfc_current_locus = where; + dt->format_expr = NULL; + m = match_dt_format (dt); + + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO || dt->format_expr == NULL) + goto syntax; + + comma_flag = 1; + dt->io_unit = default_unit (k); + goto get_io_list; + } + } + + /* Match a control list */ + if (match_dt_element (k, dt) == MATCH_YES) + goto next; + if (match_dt_unit (k, dt) != MATCH_YES) + goto loop; + + if (gfc_match_char (')') == MATCH_YES) + goto get_io_list; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + + m = match_dt_element (k, dt); + if (m == MATCH_YES) + goto next; + if (m == MATCH_ERROR) + goto cleanup; + + m = match_dt_format (dt); + if (m == MATCH_YES) + goto next; + if (m == MATCH_ERROR) + goto cleanup; + + where = gfc_current_locus; + + m = gfc_match_name (name); + if (m == MATCH_YES) + { + gfc_find_symbol (name, NULL, 1, &sym); + if (sym && sym->attr.flavor == FL_NAMELIST) + { + dt->namelist = sym; + if (k == M_READ && check_namelist (sym)) + { + m = MATCH_ERROR; + goto cleanup; + } + goto next; + } + } + + gfc_current_locus = where; + + goto loop; /* No matches, try regular elements */ + +next: + if (gfc_match_char (')') == MATCH_YES) + goto get_io_list; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + +loop: + for (;;) + { + m = match_dt_element (k, dt); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + + if (gfc_match_char (')') == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + +get_io_list: + + /* Used in check_io_constraints, where no locus is available. */ + spec_end = gfc_current_locus; + + /* Optional leading comma (non-standard). We use a gfc_expr structure here + to save the locus. This is used later when resolving transfer statements + that might have a format expression without unit number. */ + if (!comma_flag && gfc_match_char (',') == MATCH_YES) + { + dt->extra_comma = gfc_get_expr (); + + /* Set the types to something compatible with iokind. This is needed to + get through gfc_free_expr later since iokind really has no Basic Type, + BT, of its own. */ + dt->extra_comma->expr_type = EXPR_CONSTANT; + dt->extra_comma->ts.type = BT_LOGICAL; + + /* Save the iokind and locus for later use in resolution. */ + dt->extra_comma->value.iokind = k; + dt->extra_comma->where = gfc_current_locus; + } + + io_code = NULL; + if (gfc_match_eos () != MATCH_YES) + { + if (comma_flag && gfc_match_char (',') != MATCH_YES) + { + gfc_error ("Expected comma in I/O list at %C"); + m = MATCH_ERROR; + goto cleanup; + } + + m = match_io_list (k, &io_code); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + } + + /* A full IO statement has been matched. Check the constraints. spec_end is + supplied for cases where no locus is supplied. */ + m = check_io_constraints (k, dt, io_code, &spec_end); + + if (m == MATCH_ERROR) + goto cleanup; + + new_st.op = (k == M_READ) ? EXEC_READ : EXEC_WRITE; + new_st.ext.dt = dt; + new_st.block = gfc_get_code (); + new_st.block->op = new_st.op; + new_st.block->next = io_code; + + terminate_io (io_code); + + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in %s statement at %C", io_kind_name (k)); + m = MATCH_ERROR; + +cleanup: + gfc_free_dt (dt); + return m; +} + + +match +gfc_match_read (void) +{ + return match_io (M_READ); +} + + +match +gfc_match_write (void) +{ + return match_io (M_WRITE); +} + + +match +gfc_match_print (void) +{ + match m; + + m = match_io (M_PRINT); + if (m != MATCH_YES) + return m; + + if (gfc_pure (NULL)) + { + gfc_error ("PRINT statement at %C not allowed within PURE procedure"); + return MATCH_ERROR; + } + + return MATCH_YES; +} + + +/* Free a gfc_inquire structure. */ + +void +gfc_free_inquire (gfc_inquire *inquire) +{ + + if (inquire == NULL) + return; + + gfc_free_expr (inquire->unit); + gfc_free_expr (inquire->file); + gfc_free_expr (inquire->iomsg); + gfc_free_expr (inquire->iostat); + gfc_free_expr (inquire->exist); + gfc_free_expr (inquire->opened); + gfc_free_expr (inquire->number); + gfc_free_expr (inquire->named); + gfc_free_expr (inquire->name); + gfc_free_expr (inquire->access); + gfc_free_expr (inquire->sequential); + gfc_free_expr (inquire->direct); + gfc_free_expr (inquire->form); + gfc_free_expr (inquire->formatted); + gfc_free_expr (inquire->unformatted); + gfc_free_expr (inquire->recl); + gfc_free_expr (inquire->nextrec); + gfc_free_expr (inquire->blank); + gfc_free_expr (inquire->position); + gfc_free_expr (inquire->action); + gfc_free_expr (inquire->read); + gfc_free_expr (inquire->write); + gfc_free_expr (inquire->readwrite); + gfc_free_expr (inquire->delim); + gfc_free_expr (inquire->encoding); + gfc_free_expr (inquire->pad); + gfc_free_expr (inquire->iolength); + gfc_free_expr (inquire->convert); + gfc_free_expr (inquire->strm_pos); + gfc_free_expr (inquire->asynchronous); + gfc_free_expr (inquire->decimal); + gfc_free_expr (inquire->pending); + gfc_free_expr (inquire->id); + gfc_free_expr (inquire->sign); + gfc_free_expr (inquire->size); + gfc_free_expr (inquire->round); + gfc_free (inquire); +} + + +/* Match an element of an INQUIRE statement. */ + +#define RETM if (m != MATCH_NO) return m; + +static match +match_inquire_element (gfc_inquire *inquire) +{ + match m; + + m = match_etag (&tag_unit, &inquire->unit); + RETM m = match_etag (&tag_file, &inquire->file); + RETM m = match_ltag (&tag_err, &inquire->err); + RETM m = match_out_tag (&tag_iomsg, &inquire->iomsg); + RETM m = match_out_tag (&tag_iostat, &inquire->iostat); + RETM m = match_vtag (&tag_exist, &inquire->exist); + RETM m = match_vtag (&tag_opened, &inquire->opened); + RETM m = match_vtag (&tag_named, &inquire->named); + RETM m = match_vtag (&tag_name, &inquire->name); + RETM m = match_out_tag (&tag_number, &inquire->number); + RETM m = match_vtag (&tag_s_access, &inquire->access); + RETM m = match_vtag (&tag_sequential, &inquire->sequential); + RETM m = match_vtag (&tag_direct, &inquire->direct); + RETM m = match_vtag (&tag_s_form, &inquire->form); + RETM m = match_vtag (&tag_formatted, &inquire->formatted); + RETM m = match_vtag (&tag_unformatted, &inquire->unformatted); + RETM m = match_out_tag (&tag_s_recl, &inquire->recl); + RETM m = match_out_tag (&tag_nextrec, &inquire->nextrec); + RETM m = match_vtag (&tag_s_blank, &inquire->blank); + RETM m = match_vtag (&tag_s_position, &inquire->position); + RETM m = match_vtag (&tag_s_action, &inquire->action); + RETM m = match_vtag (&tag_read, &inquire->read); + RETM m = match_vtag (&tag_write, &inquire->write); + RETM m = match_vtag (&tag_readwrite, &inquire->readwrite); + RETM m = match_vtag (&tag_s_async, &inquire->asynchronous); + RETM m = match_vtag (&tag_s_delim, &inquire->delim); + RETM m = match_vtag (&tag_s_decimal, &inquire->decimal); + RETM m = match_vtag (&tag_size, &inquire->size); + RETM m = match_vtag (&tag_s_encoding, &inquire->encoding); + RETM m = match_vtag (&tag_s_round, &inquire->round); + RETM m = match_vtag (&tag_s_sign, &inquire->sign); + RETM m = match_vtag (&tag_s_pad, &inquire->pad); + RETM m = match_vtag (&tag_iolength, &inquire->iolength); + RETM m = match_vtag (&tag_convert, &inquire->convert); + RETM m = match_out_tag (&tag_strm_out, &inquire->strm_pos); + RETM m = match_vtag (&tag_pending, &inquire->pending); + RETM m = match_vtag (&tag_id, &inquire->id); + RETM return MATCH_NO; +} + +#undef RETM + + +match +gfc_match_inquire (void) +{ + gfc_inquire *inquire; + gfc_code *code; + match m; + locus loc; + + m = gfc_match_char ('('); + if (m == MATCH_NO) + return m; + + inquire = XCNEW (gfc_inquire); + + loc = gfc_current_locus; + + m = match_inquire_element (inquire); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + { + m = gfc_match_expr (&inquire->unit); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + } + + /* See if we have the IOLENGTH form of the inquire statement. */ + if (inquire->iolength != NULL) + { + if (gfc_match_char (')') != MATCH_YES) + goto syntax; + + m = match_io_list (M_INQUIRE, &code); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + + new_st.op = EXEC_IOLENGTH; + new_st.expr = inquire->iolength; + new_st.ext.inquire = inquire; + + if (gfc_pure (NULL)) + { + gfc_free_statements (code); + gfc_error ("INQUIRE statement not allowed in PURE procedure at %C"); + return MATCH_ERROR; + } + + new_st.block = gfc_get_code (); + new_st.block->op = EXEC_IOLENGTH; + terminate_io (code); + new_st.block->next = code; + return MATCH_YES; + } + + /* At this point, we have the non-IOLENGTH inquire statement. */ + for (;;) + { + if (gfc_match_char (')') == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + + m = match_inquire_element (inquire); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + + if (inquire->iolength != NULL) + { + gfc_error ("IOLENGTH tag invalid in INQUIRE statement at %C"); + goto cleanup; + } + } + + if (gfc_match_eos () != MATCH_YES) + goto syntax; + + if (inquire->unit != NULL && inquire->file != NULL) + { + gfc_error ("INQUIRE statement at %L cannot contain both FILE and " + "UNIT specifiers", &loc); + goto cleanup; + } + + if (inquire->unit == NULL && inquire->file == NULL) + { + gfc_error ("INQUIRE statement at %L requires either FILE or " + "UNIT specifier", &loc); + goto cleanup; + } + + if (gfc_pure (NULL)) + { + gfc_error ("INQUIRE statement not allowed in PURE procedure at %C"); + goto cleanup; + } + + if (inquire->id != NULL && inquire->pending == NULL) + { + gfc_error ("INQUIRE statement at %L requires a PENDING= specifier with " + "the ID= specifier", &loc); + goto cleanup; + } + + new_st.op = EXEC_INQUIRE; + new_st.ext.inquire = inquire; + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_INQUIRE); + +cleanup: + gfc_free_inquire (inquire); + return MATCH_ERROR; +} + + +/* Resolve everything in a gfc_inquire structure. */ + +gfc_try +gfc_resolve_inquire (gfc_inquire *inquire) +{ + RESOLVE_TAG (&tag_unit, inquire->unit); + RESOLVE_TAG (&tag_file, inquire->file); + RESOLVE_TAG (&tag_iomsg, inquire->iomsg); + RESOLVE_TAG (&tag_iostat, inquire->iostat); + RESOLVE_TAG (&tag_exist, inquire->exist); + RESOLVE_TAG (&tag_opened, inquire->opened); + RESOLVE_TAG (&tag_number, inquire->number); + RESOLVE_TAG (&tag_named, inquire->named); + RESOLVE_TAG (&tag_name, inquire->name); + RESOLVE_TAG (&tag_s_access, inquire->access); + RESOLVE_TAG (&tag_sequential, inquire->sequential); + RESOLVE_TAG (&tag_direct, inquire->direct); + RESOLVE_TAG (&tag_s_form, inquire->form); + RESOLVE_TAG (&tag_formatted, inquire->formatted); + RESOLVE_TAG (&tag_unformatted, inquire->unformatted); + RESOLVE_TAG (&tag_s_recl, inquire->recl); + RESOLVE_TAG (&tag_nextrec, inquire->nextrec); + RESOLVE_TAG (&tag_s_blank, inquire->blank); + RESOLVE_TAG (&tag_s_position, inquire->position); + RESOLVE_TAG (&tag_s_action, inquire->action); + RESOLVE_TAG (&tag_read, inquire->read); + RESOLVE_TAG (&tag_write, inquire->write); + RESOLVE_TAG (&tag_readwrite, inquire->readwrite); + RESOLVE_TAG (&tag_s_delim, inquire->delim); + RESOLVE_TAG (&tag_s_pad, inquire->pad); + RESOLVE_TAG (&tag_s_encoding, inquire->encoding); + RESOLVE_TAG (&tag_s_round, inquire->round); + RESOLVE_TAG (&tag_iolength, inquire->iolength); + RESOLVE_TAG (&tag_convert, inquire->convert); + RESOLVE_TAG (&tag_strm_out, inquire->strm_pos); + RESOLVE_TAG (&tag_s_async, inquire->asynchronous); + RESOLVE_TAG (&tag_s_sign, inquire->sign); + RESOLVE_TAG (&tag_s_round, inquire->round); + RESOLVE_TAG (&tag_pending, inquire->pending); + RESOLVE_TAG (&tag_size, inquire->size); + RESOLVE_TAG (&tag_id, inquire->id); + + if (gfc_reference_st_label (inquire->err, ST_LABEL_TARGET) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +void +gfc_free_wait (gfc_wait *wait) +{ + if (wait == NULL) + return; + + gfc_free_expr (wait->unit); + gfc_free_expr (wait->iostat); + gfc_free_expr (wait->iomsg); + gfc_free_expr (wait->id); +} + + +gfc_try +gfc_resolve_wait (gfc_wait *wait) +{ + RESOLVE_TAG (&tag_unit, wait->unit); + RESOLVE_TAG (&tag_iomsg, wait->iomsg); + RESOLVE_TAG (&tag_iostat, wait->iostat); + RESOLVE_TAG (&tag_id, wait->id); + + if (gfc_reference_st_label (wait->err, ST_LABEL_TARGET) == FAILURE) + return FAILURE; + + if (gfc_reference_st_label (wait->end, ST_LABEL_TARGET) == FAILURE) + return FAILURE; + + return SUCCESS; +} + +/* Match an element of a WAIT statement. */ + +#define RETM if (m != MATCH_NO) return m; + +static match +match_wait_element (gfc_wait *wait) +{ + match m; + + m = match_etag (&tag_unit, &wait->unit); + RETM m = match_ltag (&tag_err, &wait->err); + RETM m = match_ltag (&tag_end, &wait->eor); + RETM m = match_ltag (&tag_eor, &wait->end); + RETM m = match_out_tag (&tag_iomsg, &wait->iomsg); + RETM m = match_out_tag (&tag_iostat, &wait->iostat); + RETM m = match_etag (&tag_id, &wait->id); + RETM return MATCH_NO; +} + +#undef RETM + + +match +gfc_match_wait (void) +{ + gfc_wait *wait; + match m; + locus loc; + + m = gfc_match_char ('('); + if (m == MATCH_NO) + return m; + + wait = XCNEW (gfc_wait); + + loc = gfc_current_locus; + + m = match_wait_element (wait); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + { + m = gfc_match_expr (&wait->unit); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + } + + for (;;) + { + if (gfc_match_char (')') == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + + m = match_wait_element (wait); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + } + + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: WAIT at %C " + "not allowed in Fortran 95") == FAILURE) + goto cleanup; + + if (gfc_pure (NULL)) + { + gfc_error ("WAIT statement not allowed in PURE procedure at %C"); + goto cleanup; + } + + new_st.op = EXEC_WAIT; + new_st.ext.wait = wait; + + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_WAIT); + +cleanup: + gfc_free_wait (wait); + return MATCH_ERROR; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ioparm.def b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ioparm.def new file mode 100644 index 0000000000..eba719f0a9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ioparm.def @@ -0,0 +1,95 @@ +#ifndef IOPARM_common_libreturn_mask +#define IOPARM_common_libreturn_mask 3 +#define IOPARM_common_libreturn_ok 0 +#define IOPARM_common_libreturn_error 1 +#define IOPARM_common_libreturn_end 2 +#define IOPARM_common_libreturn_eor 3 +#define IOPARM_common_err (1 << 2) +#define IOPARM_common_end (1 << 3) +#define IOPARM_common_eor (1 << 4) +#endif +IOPARM (common, flags, 0, int4) +IOPARM (common, unit, 0, int4) +IOPARM (common, filename, 0, pchar) +IOPARM (common, line, 0, int4) +IOPARM (common, iomsg, 1 << 6, char2) +IOPARM (common, iostat, 1 << 5, pint4) +IOPARM (open, common, 0, common) +IOPARM (open, recl_in, 1 << 7, int4) +IOPARM (open, file, 1 << 8, char2) +IOPARM (open, status, 1 << 9, char1) +IOPARM (open, access, 1 << 10, char2) +IOPARM (open, form, 1 << 11, char1) +IOPARM (open, blank, 1 << 12, char2) +IOPARM (open, position, 1 << 13, char1) +IOPARM (open, action, 1 << 14, char2) +IOPARM (open, delim, 1 << 15, char1) +IOPARM (open, pad, 1 << 16, char2) +IOPARM (open, convert, 1 << 17, char1) +IOPARM (open, decimal, 1 << 18, char2) +IOPARM (open, encoding, 1 << 19, char1) +IOPARM (open, round, 1 << 20, char2) +IOPARM (open, sign, 1 << 21, char1) +IOPARM (open, asynchronous, 1 << 22, char2) +IOPARM (close, common, 0, common) +IOPARM (close, status, 1 << 7, char1) +IOPARM (filepos, common, 0, common) +IOPARM (inquire, common, 0, common) +IOPARM (inquire, exist, 1 << 7, pint4) +IOPARM (inquire, opened, 1 << 8, pint4) +IOPARM (inquire, number, 1 << 9, pint4) +IOPARM (inquire, named, 1 << 10, pint4) +IOPARM (inquire, nextrec, 1 << 11, pint4) +IOPARM (inquire, recl_out, 1 << 12, pint4) +IOPARM (inquire, strm_pos_out, 1 << 13, pintio) +IOPARM (inquire, file, 1 << 14, char1) +IOPARM (inquire, access, 1 << 15, char2) +IOPARM (inquire, form, 1 << 16, char1) +IOPARM (inquire, blank, 1 << 17, char2) +IOPARM (inquire, position, 1 << 18, char1) +IOPARM (inquire, action, 1 << 19, char2) +IOPARM (inquire, delim, 1 << 20, char1) +IOPARM (inquire, pad, 1 << 21, char2) +IOPARM (inquire, name, 1 << 22, char1) +IOPARM (inquire, sequential, 1 << 23, char2) +IOPARM (inquire, direct, 1 << 24, char1) +IOPARM (inquire, formatted, 1 << 25, char2) +IOPARM (inquire, unformatted, 1 << 26, char1) +IOPARM (inquire, read, 1 << 27, char2) +IOPARM (inquire, write, 1 << 28, char1) +IOPARM (inquire, readwrite, 1 << 29, char2) +IOPARM (inquire, convert, 1 << 30, char1) +IOPARM (inquire, flags2, 1 << 31, int4) +IOPARM (inquire, asynchronous, 1 << 0, char1) +IOPARM (inquire, decimal, 1 << 1, char2) +IOPARM (inquire, encoding, 1 << 2, char1) +IOPARM (inquire, round, 1 << 3, char2) +IOPARM (inquire, sign, 1 << 4, char1) +IOPARM (inquire, pending, 1 << 5, pint4) +IOPARM (inquire, size, 1 << 6, pint4) +IOPARM (inquire, id, 1 << 7, pint4) +IOPARM (wait, common, 0, common) +IOPARM (wait, id, 1 << 7, pint4) +#ifndef IOPARM_dt_list_format +#define IOPARM_dt_list_format (1 << 7) +#define IOPARM_dt_namelist_read_mode (1 << 8) +#endif +IOPARM (dt, common, 0, common) +IOPARM (dt, rec, 1 << 9, intio) +IOPARM (dt, size, 1 << 10, pintio) +IOPARM (dt, iolength, 1 << 11, pintio) +IOPARM (dt, internal_unit_desc, 0, parray) +IOPARM (dt, format, 1 << 12, char1) +IOPARM (dt, advance, 1 << 13, char2) +IOPARM (dt, internal_unit, 1 << 14, char1) +IOPARM (dt, namelist_name, 1 << 15, char2) +IOPARM (dt, u, 0, pad) +IOPARM (dt, id, 1 << 16, pint4) +IOPARM (dt, pos, 1 << 17, intio) +IOPARM (dt, asynchronous, 1 << 18, char1) +IOPARM (dt, blank, 1 << 19, char2) +IOPARM (dt, decimal, 1 << 20, char1) +IOPARM (dt, delim, 1 << 21, char2) +IOPARM (dt, pad, 1 << 22, char1) +IOPARM (dt, round, 1 << 23, char2) +IOPARM (dt, sign, 1 << 24, char1) diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/iresolve.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/iresolve.c new file mode 100644 index 0000000000..619d7e9546 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/iresolve.c @@ -0,0 +1,3376 @@ +/* Intrinsic function resolution. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Andy Vaught & Katherine Holcomb + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + + +/* Assign name and types to intrinsic procedures. For functions, the + first argument to a resolution function is an expression pointer to + the original function node and the rest are pointers to the + arguments of the function call. For subroutines, a pointer to the + code node is passed. The result type and library subroutine name + are generally set according to the function arguments. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "gfortran.h" +#include "intrinsic.h" + +/* Given printf-like arguments, return a stable version of the result string. + + We already have a working, optimized string hashing table in the form of + the identifier table. Reusing this table is likely not to be wasted, + since if the function name makes it to the gimple output of the frontend, + we'll have to create the identifier anyway. */ + +const char * +gfc_get_string (const char *format, ...) +{ + char temp_name[128]; + va_list ap; + tree ident; + + va_start (ap, format); + vsnprintf (temp_name, sizeof (temp_name), format, ap); + va_end (ap); + temp_name[sizeof (temp_name) - 1] = 0; + + ident = get_identifier (temp_name); + return IDENTIFIER_POINTER (ident); +} + +/* MERGE and SPREAD need to have source charlen's present for passing + to the result expression. */ +static void +check_charlen_present (gfc_expr *source) +{ + if (source->ts.cl == NULL) + { + source->ts.cl = gfc_get_charlen (); + source->ts.cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = source->ts.cl; + } + + if (source->expr_type == EXPR_CONSTANT) + { + source->ts.cl->length = gfc_int_expr (source->value.character.length); + source->rank = 0; + } + else if (source->expr_type == EXPR_ARRAY) + source->ts.cl->length = + gfc_int_expr (source->value.constructor->expr->value.character.length); +} + +/* Helper function for resolving the "mask" argument. */ + +static void +resolve_mask_arg (gfc_expr *mask) +{ + + gfc_typespec ts; + gfc_clear_ts (&ts); + + if (mask->rank == 0) + { + /* For the scalar case, coerce the mask to kind=4 unconditionally + (because this is the only kind we have a library function + for). */ + + if (mask->ts.kind != 4) + { + ts.type = BT_LOGICAL; + ts.kind = 4; + gfc_convert_type (mask, &ts, 2); + } + } + else + { + /* In the library, we access the mask with a GFC_LOGICAL_1 + argument. No need to waste memory if we are about to create + a temporary array. */ + if (mask->expr_type == EXPR_OP && mask->ts.kind != 1) + { + ts.type = BT_LOGICAL; + ts.kind = 1; + gfc_convert_type (mask, &ts, 2); + } + } +} + +/********************** Resolution functions **********************/ + + +void +gfc_resolve_abs (gfc_expr *f, gfc_expr *a) +{ + f->ts = a->ts; + if (f->ts.type == BT_COMPLEX) + f->ts.type = BT_REAL; + + f->value.function.name + = gfc_get_string ("__abs_%c%d", gfc_type_letter (a->ts.type), a->ts.kind); +} + + +void +gfc_resolve_access (gfc_expr *f, gfc_expr *name ATTRIBUTE_UNUSED, + gfc_expr *mode ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_c_int_kind; + f->value.function.name = PREFIX ("access_func"); +} + + +void +gfc_resolve_adjustl (gfc_expr *f, gfc_expr *string) +{ + f->ts.type = BT_CHARACTER; + f->ts.kind = string->ts.kind; + f->value.function.name = gfc_get_string ("__adjustl_s%d", f->ts.kind); +} + + +void +gfc_resolve_adjustr (gfc_expr *f, gfc_expr *string) +{ + f->ts.type = BT_CHARACTER; + f->ts.kind = string->ts.kind; + f->value.function.name = gfc_get_string ("__adjustr_s%d", f->ts.kind); +} + + +static void +gfc_resolve_char_achar (gfc_expr *f, gfc_expr *x, gfc_expr *kind, + const char *name) +{ + f->ts.type = BT_CHARACTER; + f->ts.kind = (kind == NULL) + ? gfc_default_character_kind : mpz_get_si (kind->value.integer); + f->ts.cl = gfc_get_charlen (); + f->ts.cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = f->ts.cl; + f->ts.cl->length = gfc_int_expr (1); + + f->value.function.name = gfc_get_string (name, f->ts.kind, + gfc_type_letter (x->ts.type), + x->ts.kind); +} + + +void +gfc_resolve_achar (gfc_expr *f, gfc_expr *x, gfc_expr *kind) +{ + gfc_resolve_char_achar (f, x, kind, "__achar_%d_%c%d"); +} + + +void +gfc_resolve_acos (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__acos_%c%d", gfc_type_letter (x->ts.type), x->ts.kind); +} + + +void +gfc_resolve_acosh (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__acosh_%c%d", gfc_type_letter (x->ts.type), + x->ts.kind); +} + + +void +gfc_resolve_aimag (gfc_expr *f, gfc_expr *x) +{ + f->ts.type = BT_REAL; + f->ts.kind = x->ts.kind; + f->value.function.name + = gfc_get_string ("__aimag_%c%d", gfc_type_letter (x->ts.type), + x->ts.kind); +} + + +void +gfc_resolve_and (gfc_expr *f, gfc_expr *i, gfc_expr *j) +{ + f->ts.type = i->ts.type; + f->ts.kind = gfc_kind_max (i, j); + + if (i->ts.kind != j->ts.kind) + { + if (i->ts.kind == gfc_kind_max (i, j)) + gfc_convert_type (j, &i->ts, 2); + else + gfc_convert_type (i, &j->ts, 2); + } + + f->value.function.name + = gfc_get_string ("__and_%c%d", gfc_type_letter (i->ts.type), f->ts.kind); +} + + +void +gfc_resolve_aint (gfc_expr *f, gfc_expr *a, gfc_expr *kind) +{ + gfc_typespec ts; + gfc_clear_ts (&ts); + + f->ts.type = a->ts.type; + f->ts.kind = (kind == NULL) ? a->ts.kind : mpz_get_si (kind->value.integer); + + if (a->ts.kind != f->ts.kind) + { + ts.type = f->ts.type; + ts.kind = f->ts.kind; + gfc_convert_type (a, &ts, 2); + } + /* The resolved name is only used for specific intrinsics where + the return kind is the same as the arg kind. */ + f->value.function.name + = gfc_get_string ("__aint_%c%d", gfc_type_letter (a->ts.type), a->ts.kind); +} + + +void +gfc_resolve_dint (gfc_expr *f, gfc_expr *a) +{ + gfc_resolve_aint (f, a, NULL); +} + + +void +gfc_resolve_all (gfc_expr *f, gfc_expr *mask, gfc_expr *dim) +{ + f->ts = mask->ts; + + if (dim != NULL) + { + gfc_resolve_dim_arg (dim); + f->rank = mask->rank - 1; + f->shape = gfc_copy_shape_excluding (mask->shape, mask->rank, dim); + } + + f->value.function.name + = gfc_get_string (PREFIX ("all_%c%d"), gfc_type_letter (mask->ts.type), + mask->ts.kind); +} + + +void +gfc_resolve_anint (gfc_expr *f, gfc_expr *a, gfc_expr *kind) +{ + gfc_typespec ts; + gfc_clear_ts (&ts); + + f->ts.type = a->ts.type; + f->ts.kind = (kind == NULL) ? a->ts.kind : mpz_get_si (kind->value.integer); + + if (a->ts.kind != f->ts.kind) + { + ts.type = f->ts.type; + ts.kind = f->ts.kind; + gfc_convert_type (a, &ts, 2); + } + + /* The resolved name is only used for specific intrinsics where + the return kind is the same as the arg kind. */ + f->value.function.name + = gfc_get_string ("__anint_%c%d", gfc_type_letter (a->ts.type), + a->ts.kind); +} + + +void +gfc_resolve_dnint (gfc_expr *f, gfc_expr *a) +{ + gfc_resolve_anint (f, a, NULL); +} + + +void +gfc_resolve_any (gfc_expr *f, gfc_expr *mask, gfc_expr *dim) +{ + f->ts = mask->ts; + + if (dim != NULL) + { + gfc_resolve_dim_arg (dim); + f->rank = mask->rank - 1; + f->shape = gfc_copy_shape_excluding (mask->shape, mask->rank, dim); + } + + f->value.function.name + = gfc_get_string (PREFIX ("any_%c%d"), gfc_type_letter (mask->ts.type), + mask->ts.kind); +} + + +void +gfc_resolve_asin (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__asin_%c%d", gfc_type_letter (x->ts.type), x->ts.kind); +} + +void +gfc_resolve_asinh (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__asinh_%c%d", gfc_type_letter (x->ts.type), + x->ts.kind); +} + +void +gfc_resolve_atan (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__atan_%c%d", gfc_type_letter (x->ts.type), x->ts.kind); +} + +void +gfc_resolve_atanh (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__atanh_%c%d", gfc_type_letter (x->ts.type), + x->ts.kind); +} + +void +gfc_resolve_atan2 (gfc_expr *f, gfc_expr *x, gfc_expr *y ATTRIBUTE_UNUSED) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__atan2_%c%d", gfc_type_letter (x->ts.type), + x->ts.kind); +} + + +/* Resolve the BESYN and BESJN intrinsics. */ + +void +gfc_resolve_besn (gfc_expr *f, gfc_expr *n, gfc_expr *x) +{ + gfc_typespec ts; + gfc_clear_ts (&ts); + + f->ts = x->ts; + if (n->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + gfc_convert_type (n, &ts, 2); + } + f->value.function.name = gfc_get_string (""); +} + + +void +gfc_resolve_btest (gfc_expr *f, gfc_expr *i, gfc_expr *pos) +{ + f->ts.type = BT_LOGICAL; + f->ts.kind = gfc_default_logical_kind; + f->value.function.name + = gfc_get_string ("__btest_%d_%d", i->ts.kind, pos->ts.kind); +} + + +void +gfc_resolve_ceiling (gfc_expr *f, gfc_expr *a, gfc_expr *kind) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = (kind == NULL) + ? gfc_default_integer_kind : mpz_get_si (kind->value.integer); + f->value.function.name + = gfc_get_string ("__ceiling_%d_%c%d", f->ts.kind, + gfc_type_letter (a->ts.type), a->ts.kind); +} + + +void +gfc_resolve_char (gfc_expr *f, gfc_expr *a, gfc_expr *kind) +{ + gfc_resolve_char_achar (f, a, kind, "__char_%d_%c%d"); +} + + +void +gfc_resolve_chdir (gfc_expr *f, gfc_expr *d ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string (PREFIX ("chdir_i%d"), f->ts.kind); +} + + +void +gfc_resolve_chdir_sub (gfc_code *c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->expr != NULL) + kind = c->ext.actual->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX ("chdir_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_chmod (gfc_expr *f, gfc_expr *name ATTRIBUTE_UNUSED, + gfc_expr *mode ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_c_int_kind; + f->value.function.name = PREFIX ("chmod_func"); +} + + +void +gfc_resolve_chmod_sub (gfc_code *c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->next->expr != NULL) + kind = c->ext.actual->next->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX ("chmod_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_cmplx (gfc_expr *f, gfc_expr *x, gfc_expr *y, gfc_expr *kind) +{ + f->ts.type = BT_COMPLEX; + f->ts.kind = (kind == NULL) + ? gfc_default_real_kind : mpz_get_si (kind->value.integer); + + if (y == NULL) + f->value.function.name + = gfc_get_string ("__cmplx0_%d_%c%d", f->ts.kind, + gfc_type_letter (x->ts.type), x->ts.kind); + else + f->value.function.name + = gfc_get_string ("__cmplx1_%d_%c%d_%c%d", f->ts.kind, + gfc_type_letter (x->ts.type), x->ts.kind, + gfc_type_letter (y->ts.type), y->ts.kind); +} + + +void +gfc_resolve_dcmplx (gfc_expr *f, gfc_expr *x, gfc_expr *y) +{ + gfc_resolve_cmplx (f, x, y, gfc_int_expr (gfc_default_double_kind)); +} + + +void +gfc_resolve_complex (gfc_expr *f, gfc_expr *x, gfc_expr *y) +{ + int kind; + + if (x->ts.type == BT_INTEGER) + { + if (y->ts.type == BT_INTEGER) + kind = gfc_default_real_kind; + else + kind = y->ts.kind; + } + else + { + if (y->ts.type == BT_REAL) + kind = (x->ts.kind > y->ts.kind) ? x->ts.kind : y->ts.kind; + else + kind = x->ts.kind; + } + + f->ts.type = BT_COMPLEX; + f->ts.kind = kind; + f->value.function.name + = gfc_get_string ("__cmplx1_%d_%c%d_%c%d", f->ts.kind, + gfc_type_letter (x->ts.type), x->ts.kind, + gfc_type_letter (y->ts.type), y->ts.kind); +} + + +void +gfc_resolve_conjg (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name = gfc_get_string ("__conjg_%d", x->ts.kind); +} + + +void +gfc_resolve_cos (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__cos_%c%d", gfc_type_letter (x->ts.type), x->ts.kind); +} + + +void +gfc_resolve_cosh (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__cosh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind); +} + + +void +gfc_resolve_count (gfc_expr *f, gfc_expr *mask, gfc_expr *dim, gfc_expr *kind) +{ + f->ts.type = BT_INTEGER; + if (kind) + f->ts.kind = mpz_get_si (kind->value.integer); + else + f->ts.kind = gfc_default_integer_kind; + + if (dim != NULL) + { + f->rank = mask->rank - 1; + gfc_resolve_dim_arg (dim); + f->shape = gfc_copy_shape_excluding (mask->shape, mask->rank, dim); + } + + resolve_mask_arg (mask); + + f->value.function.name + = gfc_get_string (PREFIX ("count_%d_%c"), f->ts.kind, + gfc_type_letter (mask->ts.type)); +} + + +void +gfc_resolve_cshift (gfc_expr *f, gfc_expr *array, gfc_expr *shift, + gfc_expr *dim) +{ + int n, m; + + if (array->ts.type == BT_CHARACTER && array->ref) + gfc_resolve_substring_charlen (array); + + f->ts = array->ts; + f->rank = array->rank; + f->shape = gfc_copy_shape (array->shape, array->rank); + + if (shift->rank > 0) + n = 1; + else + n = 0; + + /* If dim kind is greater than default integer we need to use the larger. */ + m = gfc_default_integer_kind; + if (dim != NULL) + m = m < dim->ts.kind ? dim->ts.kind : m; + + /* Convert shift to at least m, so we don't need + kind=1 and kind=2 versions of the library functions. */ + if (shift->ts.kind < m) + { + gfc_typespec ts; + gfc_clear_ts (&ts); + ts.type = BT_INTEGER; + ts.kind = m; + gfc_convert_type_warn (shift, &ts, 2, 0); + } + + if (dim != NULL) + { + if (dim->expr_type != EXPR_CONSTANT && dim->symtree != NULL + && dim->symtree->n.sym->attr.optional) + { + /* Mark this for later setting the type in gfc_conv_missing_dummy. */ + dim->representation.length = shift->ts.kind; + } + else + { + gfc_resolve_dim_arg (dim); + /* Convert dim to shift's kind to reduce variations. */ + if (dim->ts.kind != shift->ts.kind) + gfc_convert_type_warn (dim, &shift->ts, 2, 0); + } + } + + if (array->ts.type == BT_CHARACTER) + { + if (array->ts.kind == gfc_default_character_kind) + f->value.function.name + = gfc_get_string (PREFIX ("cshift%d_%d_char"), n, shift->ts.kind); + else + f->value.function.name + = gfc_get_string (PREFIX ("cshift%d_%d_char%d"), n, shift->ts.kind, + array->ts.kind); + } + else + f->value.function.name + = gfc_get_string (PREFIX ("cshift%d_%d"), n, shift->ts.kind); +} + + +void +gfc_resolve_ctime (gfc_expr *f, gfc_expr *time) +{ + gfc_typespec ts; + gfc_clear_ts (&ts); + + f->ts.type = BT_CHARACTER; + f->ts.kind = gfc_default_character_kind; + + /* ctime TIME argument is a INTEGER(KIND=8), says the doc */ + if (time->ts.kind != 8) + { + ts.type = BT_INTEGER; + ts.kind = 8; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (time, &ts, 2); + } + + f->value.function.name = gfc_get_string (PREFIX ("ctime")); +} + + +void +gfc_resolve_dble (gfc_expr *f, gfc_expr *a) +{ + f->ts.type = BT_REAL; + f->ts.kind = gfc_default_double_kind; + f->value.function.name + = gfc_get_string ("__dble_%c%d", gfc_type_letter (a->ts.type), a->ts.kind); +} + + +void +gfc_resolve_dim (gfc_expr *f, gfc_expr *a, gfc_expr *p) +{ + f->ts.type = a->ts.type; + if (p != NULL) + f->ts.kind = gfc_kind_max (a,p); + else + f->ts.kind = a->ts.kind; + + if (p != NULL && a->ts.kind != p->ts.kind) + { + if (a->ts.kind == gfc_kind_max (a,p)) + gfc_convert_type (p, &a->ts, 2); + else + gfc_convert_type (a, &p->ts, 2); + } + + f->value.function.name + = gfc_get_string ("__dim_%c%d", gfc_type_letter (f->ts.type), f->ts.kind); +} + + +void +gfc_resolve_dot_product (gfc_expr *f, gfc_expr *a, gfc_expr *b) +{ + gfc_expr temp; + + temp.expr_type = EXPR_OP; + gfc_clear_ts (&temp.ts); + temp.value.op.op = INTRINSIC_NONE; + temp.value.op.op1 = a; + temp.value.op.op2 = b; + gfc_type_convert_binary (&temp); + f->ts = temp.ts; + f->value.function.name + = gfc_get_string (PREFIX ("dot_product_%c%d"), + gfc_type_letter (f->ts.type), f->ts.kind); +} + + +void +gfc_resolve_dprod (gfc_expr *f, gfc_expr *a ATTRIBUTE_UNUSED, + gfc_expr *b ATTRIBUTE_UNUSED) +{ + f->ts.kind = gfc_default_double_kind; + f->ts.type = BT_REAL; + f->value.function.name = gfc_get_string ("__dprod_r%d", f->ts.kind); +} + + +void +gfc_resolve_eoshift (gfc_expr *f, gfc_expr *array, gfc_expr *shift, + gfc_expr *boundary, gfc_expr *dim) +{ + int n, m; + + if (array->ts.type == BT_CHARACTER && array->ref) + gfc_resolve_substring_charlen (array); + + f->ts = array->ts; + f->rank = array->rank; + f->shape = gfc_copy_shape (array->shape, array->rank); + + n = 0; + if (shift->rank > 0) + n = n | 1; + if (boundary && boundary->rank > 0) + n = n | 2; + + /* If dim kind is greater than default integer we need to use the larger. */ + m = gfc_default_integer_kind; + if (dim != NULL) + m = m < dim->ts.kind ? dim->ts.kind : m; + + /* Convert shift to at least m, so we don't need + kind=1 and kind=2 versions of the library functions. */ + if (shift->ts.kind < m) + { + gfc_typespec ts; + gfc_clear_ts (&ts); + ts.type = BT_INTEGER; + ts.kind = m; + gfc_convert_type_warn (shift, &ts, 2, 0); + } + + if (dim != NULL) + { + if (dim->expr_type != EXPR_CONSTANT && dim->symtree != NULL + && dim->symtree->n.sym->attr.optional) + { + /* Mark this for later setting the type in gfc_conv_missing_dummy. */ + dim->representation.length = shift->ts.kind; + } + else + { + gfc_resolve_dim_arg (dim); + /* Convert dim to shift's kind to reduce variations. */ + if (dim->ts.kind != shift->ts.kind) + gfc_convert_type_warn (dim, &shift->ts, 2, 0); + } + } + + if (array->ts.type == BT_CHARACTER) + { + if (array->ts.kind == gfc_default_character_kind) + f->value.function.name + = gfc_get_string (PREFIX ("eoshift%d_%d_char"), n, shift->ts.kind); + else + f->value.function.name + = gfc_get_string (PREFIX ("eoshift%d_%d_char%d"), n, shift->ts.kind, + array->ts.kind); + } + else + f->value.function.name + = gfc_get_string (PREFIX ("eoshift%d_%d"), n, shift->ts.kind); +} + + +void +gfc_resolve_exp (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__exp_%c%d", gfc_type_letter (x->ts.type), x->ts.kind); +} + + +void +gfc_resolve_exponent (gfc_expr *f, gfc_expr *x) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string ("__exponent_%d", x->ts.kind); +} + + +void +gfc_resolve_fdate (gfc_expr *f) +{ + f->ts.type = BT_CHARACTER; + f->ts.kind = gfc_default_character_kind; + f->value.function.name = gfc_get_string (PREFIX ("fdate")); +} + + +void +gfc_resolve_floor (gfc_expr *f, gfc_expr *a, gfc_expr *kind) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = (kind == NULL) + ? gfc_default_integer_kind : mpz_get_si (kind->value.integer); + f->value.function.name + = gfc_get_string ("__floor%d_%c%d", f->ts.kind, + gfc_type_letter (a->ts.type), a->ts.kind); +} + + +void +gfc_resolve_fnum (gfc_expr *f, gfc_expr *n) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + if (n->ts.kind != f->ts.kind) + gfc_convert_type (n, &f->ts, 2); + f->value.function.name = gfc_get_string (PREFIX ("fnum_i%d"), f->ts.kind); +} + + +void +gfc_resolve_fraction (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name = gfc_get_string ("__fraction_%d", x->ts.kind); +} + + +/* Resolve single-argument g77 math intrinsics, eg BESY0, ERF. */ + +void +gfc_resolve_g77_math1 (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name = gfc_get_string (""); +} + + +void +gfc_resolve_gamma (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__gamma_%d", x->ts.kind); +} + + +void +gfc_resolve_getcwd (gfc_expr *f, gfc_expr *n ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 4; + f->value.function.name = gfc_get_string (PREFIX ("getcwd")); +} + + +void +gfc_resolve_getgid (gfc_expr *f) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 4; + f->value.function.name = gfc_get_string (PREFIX ("getgid")); +} + + +void +gfc_resolve_getpid (gfc_expr *f) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 4; + f->value.function.name = gfc_get_string (PREFIX ("getpid")); +} + + +void +gfc_resolve_getuid (gfc_expr *f) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 4; + f->value.function.name = gfc_get_string (PREFIX ("getuid")); +} + + +void +gfc_resolve_hostnm (gfc_expr *f, gfc_expr *n ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 4; + f->value.function.name = gfc_get_string (PREFIX ("hostnm")); +} + + +void +gfc_resolve_hypot (gfc_expr *f, gfc_expr *x, gfc_expr *y ATTRIBUTE_UNUSED) +{ + f->ts = x->ts; + f->value.function.name = gfc_get_string ("__hypot_r%d", x->ts.kind); +} + + +void +gfc_resolve_iand (gfc_expr *f, gfc_expr *i, gfc_expr *j) +{ + /* If the kind of i and j are different, then g77 cross-promoted the + kinds to the largest value. The Fortran 95 standard requires the + kinds to match. */ + if (i->ts.kind != j->ts.kind) + { + if (i->ts.kind == gfc_kind_max (i, j)) + gfc_convert_type (j, &i->ts, 2); + else + gfc_convert_type (i, &j->ts, 2); + } + + f->ts = i->ts; + f->value.function.name = gfc_get_string ("__iand_%d", i->ts.kind); +} + + +void +gfc_resolve_ibclr (gfc_expr *f, gfc_expr *i, gfc_expr *pos ATTRIBUTE_UNUSED) +{ + f->ts = i->ts; + f->value.function.name = gfc_get_string ("__ibclr_%d", i->ts.kind); +} + + +void +gfc_resolve_ibits (gfc_expr *f, gfc_expr *i, gfc_expr *pos ATTRIBUTE_UNUSED, + gfc_expr *len ATTRIBUTE_UNUSED) +{ + f->ts = i->ts; + f->value.function.name = gfc_get_string ("__ibits_%d", i->ts.kind); +} + + +void +gfc_resolve_ibset (gfc_expr *f, gfc_expr *i, gfc_expr *pos ATTRIBUTE_UNUSED) +{ + f->ts = i->ts; + f->value.function.name = gfc_get_string ("__ibset_%d", i->ts.kind); +} + + +void +gfc_resolve_iachar (gfc_expr *f, gfc_expr *c, gfc_expr *kind) +{ + f->ts.type = BT_INTEGER; + if (kind) + f->ts.kind = mpz_get_si (kind->value.integer); + else + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string ("__ichar_%d", c->ts.kind); +} + + +void +gfc_resolve_ichar (gfc_expr *f, gfc_expr *c, gfc_expr *kind) +{ + f->ts.type = BT_INTEGER; + if (kind) + f->ts.kind = mpz_get_si (kind->value.integer); + else + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string ("__ichar_%d", c->ts.kind); +} + + +void +gfc_resolve_idnint (gfc_expr *f, gfc_expr *a) +{ + gfc_resolve_nint (f, a, NULL); +} + + +void +gfc_resolve_ierrno (gfc_expr *f) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string (PREFIX ("ierrno_i%d"), f->ts.kind); +} + + +void +gfc_resolve_ieor (gfc_expr *f, gfc_expr *i, gfc_expr *j) +{ + /* If the kind of i and j are different, then g77 cross-promoted the + kinds to the largest value. The Fortran 95 standard requires the + kinds to match. */ + if (i->ts.kind != j->ts.kind) + { + if (i->ts.kind == gfc_kind_max (i, j)) + gfc_convert_type (j, &i->ts, 2); + else + gfc_convert_type (i, &j->ts, 2); + } + + f->ts = i->ts; + f->value.function.name = gfc_get_string ("__ieor_%d", i->ts.kind); +} + + +void +gfc_resolve_ior (gfc_expr *f, gfc_expr *i, gfc_expr *j) +{ + /* If the kind of i and j are different, then g77 cross-promoted the + kinds to the largest value. The Fortran 95 standard requires the + kinds to match. */ + if (i->ts.kind != j->ts.kind) + { + if (i->ts.kind == gfc_kind_max (i, j)) + gfc_convert_type (j, &i->ts, 2); + else + gfc_convert_type (i, &j->ts, 2); + } + + f->ts = i->ts; + f->value.function.name = gfc_get_string ("__ior_%d", i->ts.kind); +} + + +void +gfc_resolve_index_func (gfc_expr *f, gfc_expr *str, + gfc_expr *sub_str ATTRIBUTE_UNUSED, gfc_expr *back, + gfc_expr *kind) +{ + gfc_typespec ts; + gfc_clear_ts (&ts); + + f->ts.type = BT_INTEGER; + if (kind) + f->ts.kind = mpz_get_si (kind->value.integer); + else + f->ts.kind = gfc_default_integer_kind; + + if (back && back->ts.kind != gfc_default_integer_kind) + { + ts.type = BT_LOGICAL; + ts.kind = gfc_default_integer_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (back, &ts, 2); + } + + f->value.function.name + = gfc_get_string ("__index_%d_i%d", str->ts.kind, f->ts.kind); +} + + +void +gfc_resolve_int (gfc_expr *f, gfc_expr *a, gfc_expr *kind) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = (kind == NULL) + ? gfc_default_integer_kind : mpz_get_si (kind->value.integer); + f->value.function.name + = gfc_get_string ("__int_%d_%c%d", f->ts.kind, + gfc_type_letter (a->ts.type), a->ts.kind); +} + + +void +gfc_resolve_int2 (gfc_expr *f, gfc_expr *a) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 2; + f->value.function.name + = gfc_get_string ("__int_%d_%c%d", f->ts.kind, + gfc_type_letter (a->ts.type), a->ts.kind); +} + + +void +gfc_resolve_int8 (gfc_expr *f, gfc_expr *a) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 8; + f->value.function.name + = gfc_get_string ("__int_%d_%c%d", f->ts.kind, + gfc_type_letter (a->ts.type), a->ts.kind); +} + + +void +gfc_resolve_long (gfc_expr *f, gfc_expr *a) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 4; + f->value.function.name + = gfc_get_string ("__int_%d_%c%d", f->ts.kind, + gfc_type_letter (a->ts.type), a->ts.kind); +} + + +void +gfc_resolve_isatty (gfc_expr *f, gfc_expr *u) +{ + gfc_typespec ts; + gfc_clear_ts (&ts); + + f->ts.type = BT_LOGICAL; + f->ts.kind = gfc_default_integer_kind; + if (u->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (u, &ts, 2); + } + + f->value.function.name = gfc_get_string (PREFIX ("isatty_l%d"), f->ts.kind); +} + + +void +gfc_resolve_ishft (gfc_expr *f, gfc_expr *i, gfc_expr *shift) +{ + f->ts = i->ts; + f->value.function.name + = gfc_get_string ("__ishft_%d_%d", i->ts.kind, shift->ts.kind); +} + + +void +gfc_resolve_rshift (gfc_expr *f, gfc_expr *i, gfc_expr *shift) +{ + f->ts = i->ts; + f->value.function.name + = gfc_get_string ("__rshift_%d_%d", i->ts.kind, shift->ts.kind); +} + + +void +gfc_resolve_lshift (gfc_expr *f, gfc_expr *i, gfc_expr *shift) +{ + f->ts = i->ts; + f->value.function.name + = gfc_get_string ("__lshift_%d_%d", i->ts.kind, shift->ts.kind); +} + + +void +gfc_resolve_ishftc (gfc_expr *f, gfc_expr *i, gfc_expr *shift, gfc_expr *size) +{ + int s_kind; + + s_kind = (size == NULL) ? gfc_default_integer_kind : size->ts.kind; + + f->ts = i->ts; + f->value.function.name + = gfc_get_string ("__ishftc_%d_%d_%d", i->ts.kind, shift->ts.kind, s_kind); +} + + +void +gfc_resolve_kill (gfc_expr *f, gfc_expr *p ATTRIBUTE_UNUSED, + gfc_expr *s ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string (PREFIX ("kill_i%d"), f->ts.kind); +} + + +void +gfc_resolve_lbound (gfc_expr *f, gfc_expr *array, gfc_expr *dim, gfc_expr *kind) +{ + static char lbound[] = "__lbound"; + + f->ts.type = BT_INTEGER; + if (kind) + f->ts.kind = mpz_get_si (kind->value.integer); + else + f->ts.kind = gfc_default_integer_kind; + + if (dim == NULL) + { + f->rank = 1; + f->shape = gfc_get_shape (1); + mpz_init_set_ui (f->shape[0], array->rank); + } + + f->value.function.name = lbound; +} + + +void +gfc_resolve_len (gfc_expr *f, gfc_expr *string, gfc_expr *kind) +{ + f->ts.type = BT_INTEGER; + if (kind) + f->ts.kind = mpz_get_si (kind->value.integer); + else + f->ts.kind = gfc_default_integer_kind; + f->value.function.name + = gfc_get_string ("__len_%d_i%d", string->ts.kind, + gfc_default_integer_kind); +} + + +void +gfc_resolve_len_trim (gfc_expr *f, gfc_expr *string, gfc_expr *kind) +{ + f->ts.type = BT_INTEGER; + if (kind) + f->ts.kind = mpz_get_si (kind->value.integer); + else + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string ("__len_trim%d", string->ts.kind); +} + + +void +gfc_resolve_lgamma (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__lgamma_%d", x->ts.kind); +} + + +void +gfc_resolve_link (gfc_expr *f, gfc_expr *p1 ATTRIBUTE_UNUSED, + gfc_expr *p2 ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string (PREFIX ("link_i%d"), f->ts.kind); +} + + +void +gfc_resolve_loc (gfc_expr *f, gfc_expr *x) +{ + f->ts.type= BT_INTEGER; + f->ts.kind = gfc_index_integer_kind; + f->value.function.name = gfc_get_string ("__loc_%d", x->ts.kind); +} + + +void +gfc_resolve_log (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__log_%c%d", gfc_type_letter (x->ts.type), x->ts.kind); +} + + +void +gfc_resolve_log10 (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__log10_%c%d", gfc_type_letter (x->ts.type), + x->ts.kind); +} + + +void +gfc_resolve_logical (gfc_expr *f, gfc_expr *a, gfc_expr *kind) +{ + f->ts.type = BT_LOGICAL; + f->ts.kind = (kind == NULL) + ? gfc_default_logical_kind : mpz_get_si (kind->value.integer); + f->rank = a->rank; + + f->value.function.name + = gfc_get_string ("__logical_%d_%c%d", f->ts.kind, + gfc_type_letter (a->ts.type), a->ts.kind); +} + + +void +gfc_resolve_malloc (gfc_expr *f, gfc_expr *size) +{ + if (size->ts.kind < gfc_index_integer_kind) + { + gfc_typespec ts; + gfc_clear_ts (&ts); + + ts.type = BT_INTEGER; + ts.kind = gfc_index_integer_kind; + gfc_convert_type_warn (size, &ts, 2, 0); + } + + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_index_integer_kind; + f->value.function.name = gfc_get_string (PREFIX ("malloc")); +} + + +void +gfc_resolve_matmul (gfc_expr *f, gfc_expr *a, gfc_expr *b) +{ + gfc_expr temp; + + if (a->ts.type == BT_LOGICAL && b->ts.type == BT_LOGICAL) + { + f->ts.type = BT_LOGICAL; + f->ts.kind = gfc_default_logical_kind; + } + else + { + temp.expr_type = EXPR_OP; + gfc_clear_ts (&temp.ts); + temp.value.op.op = INTRINSIC_NONE; + temp.value.op.op1 = a; + temp.value.op.op2 = b; + gfc_type_convert_binary (&temp); + f->ts = temp.ts; + } + + f->rank = (a->rank == 2 && b->rank == 2) ? 2 : 1; + + if (a->rank == 2 && b->rank == 2) + { + if (a->shape && b->shape) + { + f->shape = gfc_get_shape (f->rank); + mpz_init_set (f->shape[0], a->shape[0]); + mpz_init_set (f->shape[1], b->shape[1]); + } + } + else if (a->rank == 1) + { + if (b->shape) + { + f->shape = gfc_get_shape (f->rank); + mpz_init_set (f->shape[0], b->shape[1]); + } + } + else + { + /* b->rank == 1 and a->rank == 2 here, all other cases have + been caught in check.c. */ + if (a->shape) + { + f->shape = gfc_get_shape (f->rank); + mpz_init_set (f->shape[0], a->shape[0]); + } + } + + f->value.function.name + = gfc_get_string (PREFIX ("matmul_%c%d"), gfc_type_letter (f->ts.type), + f->ts.kind); +} + + +static void +gfc_resolve_minmax (const char *name, gfc_expr *f, gfc_actual_arglist *args) +{ + gfc_actual_arglist *a; + + f->ts.type = args->expr->ts.type; + f->ts.kind = args->expr->ts.kind; + /* Find the largest type kind. */ + for (a = args->next; a; a = a->next) + { + if (a->expr->ts.kind > f->ts.kind) + f->ts.kind = a->expr->ts.kind; + } + + /* Convert all parameters to the required kind. */ + for (a = args; a; a = a->next) + { + if (a->expr->ts.kind != f->ts.kind) + gfc_convert_type (a->expr, &f->ts, 2); + } + + f->value.function.name + = gfc_get_string (name, gfc_type_letter (f->ts.type), f->ts.kind); +} + + +void +gfc_resolve_max (gfc_expr *f, gfc_actual_arglist *args) +{ + gfc_resolve_minmax ("__max_%c%d", f, args); +} + + +void +gfc_resolve_maxloc (gfc_expr *f, gfc_expr *array, gfc_expr *dim, + gfc_expr *mask) +{ + const char *name; + int i, j, idim; + + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + + if (dim == NULL) + { + f->rank = 1; + f->shape = gfc_get_shape (1); + mpz_init_set_si (f->shape[0], array->rank); + } + else + { + f->rank = array->rank - 1; + gfc_resolve_dim_arg (dim); + if (array->shape && dim->expr_type == EXPR_CONSTANT) + { + idim = (int) mpz_get_si (dim->value.integer); + f->shape = gfc_get_shape (f->rank); + for (i = 0, j = 0; i < f->rank; i++, j++) + { + if (i == (idim - 1)) + j++; + mpz_init_set (f->shape[i], array->shape[j]); + } + } + } + + if (mask) + { + if (mask->rank == 0) + name = "smaxloc"; + else + name = "mmaxloc"; + + resolve_mask_arg (mask); + } + else + name = "maxloc"; + + f->value.function.name + = gfc_get_string (PREFIX ("%s%d_%d_%c%d"), name, dim != NULL, f->ts.kind, + gfc_type_letter (array->ts.type), array->ts.kind); +} + + +void +gfc_resolve_maxval (gfc_expr *f, gfc_expr *array, gfc_expr *dim, + gfc_expr *mask) +{ + const char *name; + int i, j, idim; + + f->ts = array->ts; + + if (dim != NULL) + { + f->rank = array->rank - 1; + gfc_resolve_dim_arg (dim); + + if (f->rank && array->shape && dim->expr_type == EXPR_CONSTANT) + { + idim = (int) mpz_get_si (dim->value.integer); + f->shape = gfc_get_shape (f->rank); + for (i = 0, j = 0; i < f->rank; i++, j++) + { + if (i == (idim - 1)) + j++; + mpz_init_set (f->shape[i], array->shape[j]); + } + } + } + + if (mask) + { + if (mask->rank == 0) + name = "smaxval"; + else + name = "mmaxval"; + + resolve_mask_arg (mask); + } + else + name = "maxval"; + + f->value.function.name + = gfc_get_string (PREFIX ("%s_%c%d"), name, + gfc_type_letter (array->ts.type), array->ts.kind); +} + + +void +gfc_resolve_mclock (gfc_expr *f) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 4; + f->value.function.name = PREFIX ("mclock"); +} + + +void +gfc_resolve_mclock8 (gfc_expr *f) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 8; + f->value.function.name = PREFIX ("mclock8"); +} + + +void +gfc_resolve_merge (gfc_expr *f, gfc_expr *tsource, + gfc_expr *fsource ATTRIBUTE_UNUSED, + gfc_expr *mask ATTRIBUTE_UNUSED) +{ + if (tsource->ts.type == BT_CHARACTER && tsource->ref) + gfc_resolve_substring_charlen (tsource); + + if (fsource->ts.type == BT_CHARACTER && fsource->ref) + gfc_resolve_substring_charlen (fsource); + + if (tsource->ts.type == BT_CHARACTER) + check_charlen_present (tsource); + + f->ts = tsource->ts; + f->value.function.name + = gfc_get_string ("__merge_%c%d", gfc_type_letter (tsource->ts.type), + tsource->ts.kind); +} + + +void +gfc_resolve_min (gfc_expr *f, gfc_actual_arglist *args) +{ + gfc_resolve_minmax ("__min_%c%d", f, args); +} + + +void +gfc_resolve_minloc (gfc_expr *f, gfc_expr *array, gfc_expr *dim, + gfc_expr *mask) +{ + const char *name; + int i, j, idim; + + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + + if (dim == NULL) + { + f->rank = 1; + f->shape = gfc_get_shape (1); + mpz_init_set_si (f->shape[0], array->rank); + } + else + { + f->rank = array->rank - 1; + gfc_resolve_dim_arg (dim); + if (array->shape && dim->expr_type == EXPR_CONSTANT) + { + idim = (int) mpz_get_si (dim->value.integer); + f->shape = gfc_get_shape (f->rank); + for (i = 0, j = 0; i < f->rank; i++, j++) + { + if (i == (idim - 1)) + j++; + mpz_init_set (f->shape[i], array->shape[j]); + } + } + } + + if (mask) + { + if (mask->rank == 0) + name = "sminloc"; + else + name = "mminloc"; + + resolve_mask_arg (mask); + } + else + name = "minloc"; + + f->value.function.name + = gfc_get_string (PREFIX ("%s%d_%d_%c%d"), name, dim != NULL, f->ts.kind, + gfc_type_letter (array->ts.type), array->ts.kind); +} + + +void +gfc_resolve_minval (gfc_expr *f, gfc_expr *array, gfc_expr *dim, + gfc_expr *mask) +{ + const char *name; + int i, j, idim; + + f->ts = array->ts; + + if (dim != NULL) + { + f->rank = array->rank - 1; + gfc_resolve_dim_arg (dim); + + if (f->rank && array->shape && dim->expr_type == EXPR_CONSTANT) + { + idim = (int) mpz_get_si (dim->value.integer); + f->shape = gfc_get_shape (f->rank); + for (i = 0, j = 0; i < f->rank; i++, j++) + { + if (i == (idim - 1)) + j++; + mpz_init_set (f->shape[i], array->shape[j]); + } + } + } + + if (mask) + { + if (mask->rank == 0) + name = "sminval"; + else + name = "mminval"; + + resolve_mask_arg (mask); + } + else + name = "minval"; + + f->value.function.name + = gfc_get_string (PREFIX ("%s_%c%d"), name, + gfc_type_letter (array->ts.type), array->ts.kind); +} + + +void +gfc_resolve_mod (gfc_expr *f, gfc_expr *a, gfc_expr *p) +{ + f->ts.type = a->ts.type; + if (p != NULL) + f->ts.kind = gfc_kind_max (a,p); + else + f->ts.kind = a->ts.kind; + + if (p != NULL && a->ts.kind != p->ts.kind) + { + if (a->ts.kind == gfc_kind_max (a,p)) + gfc_convert_type (p, &a->ts, 2); + else + gfc_convert_type (a, &p->ts, 2); + } + + f->value.function.name + = gfc_get_string ("__mod_%c%d", gfc_type_letter (f->ts.type), f->ts.kind); +} + + +void +gfc_resolve_modulo (gfc_expr *f, gfc_expr *a, gfc_expr *p) +{ + f->ts.type = a->ts.type; + if (p != NULL) + f->ts.kind = gfc_kind_max (a,p); + else + f->ts.kind = a->ts.kind; + + if (p != NULL && a->ts.kind != p->ts.kind) + { + if (a->ts.kind == gfc_kind_max (a,p)) + gfc_convert_type (p, &a->ts, 2); + else + gfc_convert_type (a, &p->ts, 2); + } + + f->value.function.name + = gfc_get_string ("__modulo_%c%d", gfc_type_letter (f->ts.type), + f->ts.kind); +} + +void +gfc_resolve_nearest (gfc_expr *f, gfc_expr *a, gfc_expr *p) +{ + if (p->ts.kind != a->ts.kind) + gfc_convert_type (p, &a->ts, 2); + + f->ts = a->ts; + f->value.function.name + = gfc_get_string ("__nearest_%c%d", gfc_type_letter (a->ts.type), + a->ts.kind); +} + +void +gfc_resolve_nint (gfc_expr *f, gfc_expr *a, gfc_expr *kind) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = (kind == NULL) + ? gfc_default_integer_kind : mpz_get_si (kind->value.integer); + f->value.function.name + = gfc_get_string ("__nint_%d_%d", f->ts.kind, a->ts.kind); +} + + +void +gfc_resolve_not (gfc_expr *f, gfc_expr *i) +{ + f->ts = i->ts; + f->value.function.name = gfc_get_string ("__not_%d", i->ts.kind); +} + + +void +gfc_resolve_or (gfc_expr *f, gfc_expr *i, gfc_expr *j) +{ + f->ts.type = i->ts.type; + f->ts.kind = gfc_kind_max (i, j); + + if (i->ts.kind != j->ts.kind) + { + if (i->ts.kind == gfc_kind_max (i, j)) + gfc_convert_type (j, &i->ts, 2); + else + gfc_convert_type (i, &j->ts, 2); + } + + f->value.function.name + = gfc_get_string ("__or_%c%d", gfc_type_letter (i->ts.type), f->ts.kind); +} + + +void +gfc_resolve_pack (gfc_expr *f, gfc_expr *array, gfc_expr *mask, + gfc_expr *vector ATTRIBUTE_UNUSED) +{ + if (array->ts.type == BT_CHARACTER && array->ref) + gfc_resolve_substring_charlen (array); + + f->ts = array->ts; + f->rank = 1; + + resolve_mask_arg (mask); + + if (mask->rank != 0) + { + if (array->ts.type == BT_CHARACTER) + f->value.function.name + = array->ts.kind == 1 ? PREFIX ("pack_char") + : gfc_get_string + (PREFIX ("pack_char%d"), + array->ts.kind); + else + f->value.function.name = PREFIX ("pack"); + } + else + { + if (array->ts.type == BT_CHARACTER) + f->value.function.name + = array->ts.kind == 1 ? PREFIX ("pack_s_char") + : gfc_get_string + (PREFIX ("pack_s_char%d"), + array->ts.kind); + else + f->value.function.name = PREFIX ("pack_s"); + } +} + + +void +gfc_resolve_product (gfc_expr *f, gfc_expr *array, gfc_expr *dim, + gfc_expr *mask) +{ + const char *name; + + f->ts = array->ts; + + if (dim != NULL) + { + f->rank = array->rank - 1; + f->shape = gfc_copy_shape_excluding (array->shape, array->rank, dim); + gfc_resolve_dim_arg (dim); + } + + if (mask) + { + if (mask->rank == 0) + name = "sproduct"; + else + name = "mproduct"; + + resolve_mask_arg (mask); + } + else + name = "product"; + + f->value.function.name + = gfc_get_string (PREFIX ("%s_%c%d"), name, + gfc_type_letter (array->ts.type), array->ts.kind); +} + + +void +gfc_resolve_real (gfc_expr *f, gfc_expr *a, gfc_expr *kind) +{ + f->ts.type = BT_REAL; + + if (kind != NULL) + f->ts.kind = mpz_get_si (kind->value.integer); + else + f->ts.kind = (a->ts.type == BT_COMPLEX) + ? a->ts.kind : gfc_default_real_kind; + + f->value.function.name + = gfc_get_string ("__real_%d_%c%d", f->ts.kind, + gfc_type_letter (a->ts.type), a->ts.kind); +} + + +void +gfc_resolve_realpart (gfc_expr *f, gfc_expr *a) +{ + f->ts.type = BT_REAL; + f->ts.kind = a->ts.kind; + f->value.function.name + = gfc_get_string ("__real_%d_%c%d", f->ts.kind, + gfc_type_letter (a->ts.type), a->ts.kind); +} + + +void +gfc_resolve_rename (gfc_expr *f, gfc_expr *p1 ATTRIBUTE_UNUSED, + gfc_expr *p2 ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string (PREFIX ("rename_i%d"), f->ts.kind); +} + + +void +gfc_resolve_repeat (gfc_expr *f, gfc_expr *string, + gfc_expr *ncopies ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_CHARACTER; + f->ts.kind = string->ts.kind; + f->value.function.name = gfc_get_string ("__repeat_%d", string->ts.kind); +} + + +void +gfc_resolve_reshape (gfc_expr *f, gfc_expr *source, gfc_expr *shape, + gfc_expr *pad ATTRIBUTE_UNUSED, + gfc_expr *order ATTRIBUTE_UNUSED) +{ + mpz_t rank; + int kind; + int i; + + if (source->ts.type == BT_CHARACTER && source->ref) + gfc_resolve_substring_charlen (source); + + f->ts = source->ts; + + gfc_array_size (shape, &rank); + f->rank = mpz_get_si (rank); + mpz_clear (rank); + switch (source->ts.type) + { + case BT_COMPLEX: + case BT_REAL: + case BT_INTEGER: + case BT_LOGICAL: + case BT_CHARACTER: + kind = source->ts.kind; + break; + + default: + kind = 0; + break; + } + + switch (kind) + { + case 4: + case 8: + case 10: + case 16: + if (source->ts.type == BT_COMPLEX || source->ts.type == BT_REAL) + f->value.function.name + = gfc_get_string (PREFIX ("reshape_%c%d"), + gfc_type_letter (source->ts.type), + source->ts.kind); + else if (source->ts.type == BT_CHARACTER) + f->value.function.name = gfc_get_string (PREFIX ("reshape_char%d"), + kind); + else + f->value.function.name + = gfc_get_string (PREFIX ("reshape_%d"), source->ts.kind); + break; + + default: + f->value.function.name = (source->ts.type == BT_CHARACTER + ? PREFIX ("reshape_char") : PREFIX ("reshape")); + break; + } + + /* TODO: Make this work with a constant ORDER parameter. */ + if (shape->expr_type == EXPR_ARRAY + && gfc_is_constant_expr (shape) + && order == NULL) + { + gfc_constructor *c; + f->shape = gfc_get_shape (f->rank); + c = shape->value.constructor; + for (i = 0; i < f->rank; i++) + { + mpz_init_set (f->shape[i], c->expr->value.integer); + c = c->next; + } + } + + /* Force-convert both SHAPE and ORDER to index_kind so that we don't need + so many runtime variations. */ + if (shape->ts.kind != gfc_index_integer_kind) + { + gfc_typespec ts = shape->ts; + ts.kind = gfc_index_integer_kind; + gfc_convert_type_warn (shape, &ts, 2, 0); + } + if (order && order->ts.kind != gfc_index_integer_kind) + gfc_convert_type_warn (order, &shape->ts, 2, 0); +} + + +void +gfc_resolve_rrspacing (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name = gfc_get_string ("__rrspacing_%d", x->ts.kind); +} + + +void +gfc_resolve_scale (gfc_expr *f, gfc_expr *x, gfc_expr *i ATTRIBUTE_UNUSED) +{ + f->ts = x->ts; + f->value.function.name = gfc_get_string ("__scale_%d", x->ts.kind); +} + + +void +gfc_resolve_scan (gfc_expr *f, gfc_expr *string, + gfc_expr *set ATTRIBUTE_UNUSED, + gfc_expr *back ATTRIBUTE_UNUSED, gfc_expr *kind) +{ + f->ts.type = BT_INTEGER; + if (kind) + f->ts.kind = mpz_get_si (kind->value.integer); + else + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string ("__scan_%d", string->ts.kind); +} + + +void +gfc_resolve_secnds (gfc_expr *t1, gfc_expr *t0) +{ + t1->ts = t0->ts; + t1->value.function.name = gfc_get_string (PREFIX ("secnds")); +} + + +void +gfc_resolve_set_exponent (gfc_expr *f, gfc_expr *x, + gfc_expr *i ATTRIBUTE_UNUSED) +{ + f->ts = x->ts; + f->value.function.name = gfc_get_string ("__set_exponent_%d", x->ts.kind); +} + + +void +gfc_resolve_shape (gfc_expr *f, gfc_expr *array) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->rank = 1; + f->shape = gfc_get_shape (1); + mpz_init_set_ui (f->shape[0], array->rank); + f->value.function.name = gfc_get_string (PREFIX ("shape_%d"), f->ts.kind); +} + + +void +gfc_resolve_sign (gfc_expr *f, gfc_expr *a, gfc_expr *b ATTRIBUTE_UNUSED) +{ + f->ts = a->ts; + f->value.function.name + = gfc_get_string ("__sign_%c%d", gfc_type_letter (a->ts.type), a->ts.kind); +} + + +void +gfc_resolve_signal (gfc_expr *f, gfc_expr *number, gfc_expr *handler) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_c_int_kind; + + /* handler can be either BT_INTEGER or BT_PROCEDURE */ + if (handler->ts.type == BT_INTEGER) + { + if (handler->ts.kind != gfc_c_int_kind) + gfc_convert_type (handler, &f->ts, 2); + f->value.function.name = gfc_get_string (PREFIX ("signal_func_int")); + } + else + f->value.function.name = gfc_get_string (PREFIX ("signal_func")); + + if (number->ts.kind != gfc_c_int_kind) + gfc_convert_type (number, &f->ts, 2); +} + + +void +gfc_resolve_sin (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__sin_%c%d", gfc_type_letter (x->ts.type), x->ts.kind); +} + + +void +gfc_resolve_sinh (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__sinh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind); +} + + +void +gfc_resolve_size (gfc_expr *f, gfc_expr *array ATTRIBUTE_UNUSED, + gfc_expr *dim ATTRIBUTE_UNUSED, gfc_expr *kind) +{ + f->ts.type = BT_INTEGER; + if (kind) + f->ts.kind = mpz_get_si (kind->value.integer); + else + f->ts.kind = gfc_default_integer_kind; +} + + +void +gfc_resolve_spacing (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name = gfc_get_string ("__spacing_%d", x->ts.kind); +} + + +void +gfc_resolve_spread (gfc_expr *f, gfc_expr *source, gfc_expr *dim, + gfc_expr *ncopies) +{ + if (source->ts.type == BT_CHARACTER && source->ref) + gfc_resolve_substring_charlen (source); + + if (source->ts.type == BT_CHARACTER) + check_charlen_present (source); + + f->ts = source->ts; + f->rank = source->rank + 1; + if (source->rank == 0) + { + if (source->ts.type == BT_CHARACTER) + f->value.function.name + = source->ts.kind == 1 ? PREFIX ("spread_char_scalar") + : gfc_get_string + (PREFIX ("spread_char%d_scalar"), + source->ts.kind); + else + f->value.function.name = PREFIX ("spread_scalar"); + } + else + { + if (source->ts.type == BT_CHARACTER) + f->value.function.name + = source->ts.kind == 1 ? PREFIX ("spread_char") + : gfc_get_string + (PREFIX ("spread_char%d"), + source->ts.kind); + else + f->value.function.name = PREFIX ("spread"); + } + + if (dim && gfc_is_constant_expr (dim) + && ncopies && gfc_is_constant_expr (ncopies) && source->shape[0]) + { + int i, idim; + idim = mpz_get_ui (dim->value.integer); + f->shape = gfc_get_shape (f->rank); + for (i = 0; i < (idim - 1); i++) + mpz_init_set (f->shape[i], source->shape[i]); + + mpz_init_set (f->shape[idim - 1], ncopies->value.integer); + + for (i = idim; i < f->rank ; i++) + mpz_init_set (f->shape[i], source->shape[i-1]); + } + + + gfc_resolve_dim_arg (dim); + gfc_resolve_index (ncopies, 1); +} + + +void +gfc_resolve_sqrt (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__sqrt_%c%d", gfc_type_letter (x->ts.type), x->ts.kind); +} + + +/* Resolve the g77 compatibility function STAT AND FSTAT. */ + +void +gfc_resolve_stat (gfc_expr *f, gfc_expr *n ATTRIBUTE_UNUSED, + gfc_expr *a ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string (PREFIX ("stat_i%d"), f->ts.kind); +} + + +void +gfc_resolve_lstat (gfc_expr *f, gfc_expr *n ATTRIBUTE_UNUSED, + gfc_expr *a ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string (PREFIX ("lstat_i%d"), f->ts.kind); +} + + +void +gfc_resolve_fstat (gfc_expr *f, gfc_expr *n, gfc_expr *a ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + if (n->ts.kind != f->ts.kind) + gfc_convert_type (n, &f->ts, 2); + + f->value.function.name = gfc_get_string (PREFIX ("fstat_i%d"), f->ts.kind); +} + + +void +gfc_resolve_fgetc (gfc_expr *f, gfc_expr *u, gfc_expr *c ATTRIBUTE_UNUSED) +{ + gfc_typespec ts; + gfc_clear_ts (&ts); + + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_c_int_kind; + if (u->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (u, &ts, 2); + } + + f->value.function.name = gfc_get_string (PREFIX ("fgetc")); +} + + +void +gfc_resolve_fget (gfc_expr *f, gfc_expr *c ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_c_int_kind; + f->value.function.name = gfc_get_string (PREFIX ("fget")); +} + + +void +gfc_resolve_fputc (gfc_expr *f, gfc_expr *u, gfc_expr *c ATTRIBUTE_UNUSED) +{ + gfc_typespec ts; + gfc_clear_ts (&ts); + + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_c_int_kind; + if (u->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (u, &ts, 2); + } + + f->value.function.name = gfc_get_string (PREFIX ("fputc")); +} + + +void +gfc_resolve_fput (gfc_expr *f, gfc_expr *c ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_c_int_kind; + f->value.function.name = gfc_get_string (PREFIX ("fput")); +} + + +void +gfc_resolve_ftell (gfc_expr *f, gfc_expr *u) +{ + gfc_typespec ts; + gfc_clear_ts (&ts); + + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_index_integer_kind; + if (u->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (u, &ts, 2); + } + + f->value.function.name = gfc_get_string (PREFIX ("ftell")); +} + + +void +gfc_resolve_sum (gfc_expr *f, gfc_expr *array, gfc_expr *dim, gfc_expr *mask) +{ + const char *name; + + f->ts = array->ts; + + if (mask) + { + if (mask->rank == 0) + name = "ssum"; + else + name = "msum"; + + resolve_mask_arg (mask); + } + else + name = "sum"; + + if (dim != NULL) + { + f->rank = array->rank - 1; + f->shape = gfc_copy_shape_excluding (array->shape, array->rank, dim); + gfc_resolve_dim_arg (dim); + } + + f->value.function.name + = gfc_get_string (PREFIX ("%s_%c%d"), name, + gfc_type_letter (array->ts.type), array->ts.kind); +} + + +void +gfc_resolve_symlnk (gfc_expr *f, gfc_expr *p1 ATTRIBUTE_UNUSED, + gfc_expr *p2 ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string (PREFIX ("symlnk_i%d"), f->ts.kind); +} + + +/* Resolve the g77 compatibility function SYSTEM. */ + +void +gfc_resolve_system (gfc_expr *f, gfc_expr *n ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 4; + f->value.function.name = gfc_get_string (PREFIX ("system")); +} + + +void +gfc_resolve_tan (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__tan_%c%d", gfc_type_letter (x->ts.type), x->ts.kind); +} + + +void +gfc_resolve_tanh (gfc_expr *f, gfc_expr *x) +{ + f->ts = x->ts; + f->value.function.name + = gfc_get_string ("__tanh_%c%d", gfc_type_letter (x->ts.type), x->ts.kind); +} + + +void +gfc_resolve_time (gfc_expr *f) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 4; + f->value.function.name = gfc_get_string (PREFIX ("time_func")); +} + + +void +gfc_resolve_time8 (gfc_expr *f) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 8; + f->value.function.name = gfc_get_string (PREFIX ("time8_func")); +} + + +void +gfc_resolve_transfer (gfc_expr *f, gfc_expr *source ATTRIBUTE_UNUSED, + gfc_expr *mold, gfc_expr *size) +{ + /* TODO: Make this do something meaningful. */ + static char transfer0[] = "__transfer0", transfer1[] = "__transfer1"; + + if (mold->ts.type == BT_CHARACTER && !mold->ts.cl->length + && !(mold->expr_type == EXPR_VARIABLE && mold->symtree->n.sym->attr.dummy)) + mold->ts.cl->length = gfc_int_expr (mold->value.character.length); + + f->ts = mold->ts; + + if (size == NULL && mold->rank == 0) + { + f->rank = 0; + f->value.function.name = transfer0; + } + else + { + f->rank = 1; + f->value.function.name = transfer1; + if (size && gfc_is_constant_expr (size)) + { + f->shape = gfc_get_shape (1); + mpz_init_set (f->shape[0], size->value.integer); + } + } +} + + +void +gfc_resolve_transpose (gfc_expr *f, gfc_expr *matrix) +{ + + if (matrix->ts.type == BT_CHARACTER && matrix->ref) + gfc_resolve_substring_charlen (matrix); + + f->ts = matrix->ts; + f->rank = 2; + if (matrix->shape) + { + f->shape = gfc_get_shape (2); + mpz_init_set (f->shape[0], matrix->shape[1]); + mpz_init_set (f->shape[1], matrix->shape[0]); + } + + switch (matrix->ts.kind) + { + case 4: + case 8: + case 10: + case 16: + switch (matrix->ts.type) + { + case BT_REAL: + case BT_COMPLEX: + f->value.function.name + = gfc_get_string (PREFIX ("transpose_%c%d"), + gfc_type_letter (matrix->ts.type), + matrix->ts.kind); + break; + + case BT_INTEGER: + case BT_LOGICAL: + /* Use the integer routines for real and logical cases. This + assumes they all have the same alignment requirements. */ + f->value.function.name + = gfc_get_string (PREFIX ("transpose_i%d"), matrix->ts.kind); + break; + + default: + if (matrix->ts.type == BT_CHARACTER && matrix->ts.kind == 4) + f->value.function.name = PREFIX ("transpose_char4"); + else + f->value.function.name = PREFIX ("transpose"); + break; + } + break; + + default: + f->value.function.name = (matrix->ts.type == BT_CHARACTER + ? PREFIX ("transpose_char") + : PREFIX ("transpose")); + break; + } +} + + +void +gfc_resolve_trim (gfc_expr *f, gfc_expr *string) +{ + f->ts.type = BT_CHARACTER; + f->ts.kind = string->ts.kind; + f->value.function.name = gfc_get_string ("__trim_%d", string->ts.kind); +} + + +void +gfc_resolve_ubound (gfc_expr *f, gfc_expr *array, gfc_expr *dim, gfc_expr *kind) +{ + static char ubound[] = "__ubound"; + + f->ts.type = BT_INTEGER; + if (kind) + f->ts.kind = mpz_get_si (kind->value.integer); + else + f->ts.kind = gfc_default_integer_kind; + + if (dim == NULL) + { + f->rank = 1; + f->shape = gfc_get_shape (1); + mpz_init_set_ui (f->shape[0], array->rank); + } + + f->value.function.name = ubound; +} + + +/* Resolve the g77 compatibility function UMASK. */ + +void +gfc_resolve_umask (gfc_expr *f, gfc_expr *n) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = n->ts.kind; + f->value.function.name = gfc_get_string (PREFIX ("umask_i%d"), n->ts.kind); +} + + +/* Resolve the g77 compatibility function UNLINK. */ + +void +gfc_resolve_unlink (gfc_expr *f, gfc_expr *n ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 4; + f->value.function.name = gfc_get_string (PREFIX ("unlink")); +} + + +void +gfc_resolve_ttynam (gfc_expr *f, gfc_expr *unit) +{ + gfc_typespec ts; + gfc_clear_ts (&ts); + + f->ts.type = BT_CHARACTER; + f->ts.kind = gfc_default_character_kind; + + if (unit->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (unit, &ts, 2); + } + + f->value.function.name = gfc_get_string (PREFIX ("ttynam")); +} + + +void +gfc_resolve_unpack (gfc_expr *f, gfc_expr *vector, gfc_expr *mask, + gfc_expr *field ATTRIBUTE_UNUSED) +{ + if (vector->ts.type == BT_CHARACTER && vector->ref) + gfc_resolve_substring_charlen (vector); + + f->ts = vector->ts; + f->rank = mask->rank; + resolve_mask_arg (mask); + + if (vector->ts.type == BT_CHARACTER) + { + if (vector->ts.kind == 1) + f->value.function.name + = gfc_get_string (PREFIX ("unpack%d_char"), field->rank > 0 ? 1 : 0); + else + f->value.function.name + = gfc_get_string (PREFIX ("unpack%d_char%d"), + field->rank > 0 ? 1 : 0, vector->ts.kind); + } + else + f->value.function.name + = gfc_get_string (PREFIX ("unpack%d"), field->rank > 0 ? 1 : 0); +} + + +void +gfc_resolve_verify (gfc_expr *f, gfc_expr *string, + gfc_expr *set ATTRIBUTE_UNUSED, + gfc_expr *back ATTRIBUTE_UNUSED, gfc_expr *kind) +{ + f->ts.type = BT_INTEGER; + if (kind) + f->ts.kind = mpz_get_si (kind->value.integer); + else + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string ("__verify_%d", string->ts.kind); +} + + +void +gfc_resolve_xor (gfc_expr *f, gfc_expr *i, gfc_expr *j) +{ + f->ts.type = i->ts.type; + f->ts.kind = gfc_kind_max (i, j); + + if (i->ts.kind != j->ts.kind) + { + if (i->ts.kind == gfc_kind_max (i, j)) + gfc_convert_type (j, &i->ts, 2); + else + gfc_convert_type (i, &j->ts, 2); + } + + f->value.function.name + = gfc_get_string ("__xor_%c%d", gfc_type_letter (i->ts.type), f->ts.kind); +} + + +/* Intrinsic subroutine resolution. */ + +void +gfc_resolve_alarm_sub (gfc_code *c) +{ + const char *name; + gfc_expr *seconds, *handler, *status; + gfc_typespec ts; + gfc_clear_ts (&ts); + + seconds = c->ext.actual->expr; + handler = c->ext.actual->next->expr; + status = c->ext.actual->next->next->expr; + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + + /* handler can be either BT_INTEGER or BT_PROCEDURE. + In all cases, the status argument is of default integer kind + (enforced in check.c) so that the function suffix is fixed. */ + if (handler->ts.type == BT_INTEGER) + { + if (handler->ts.kind != gfc_c_int_kind) + gfc_convert_type (handler, &ts, 2); + name = gfc_get_string (PREFIX ("alarm_sub_int_i%d"), + gfc_default_integer_kind); + } + else + name = gfc_get_string (PREFIX ("alarm_sub_i%d"), + gfc_default_integer_kind); + + if (seconds->ts.kind != gfc_c_int_kind) + gfc_convert_type (seconds, &ts, 2); + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + +void +gfc_resolve_cpu_time (gfc_code *c) +{ + const char *name; + name = gfc_get_string (PREFIX ("cpu_time_%d"), c->ext.actual->expr->ts.kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +/* Create a formal arglist based on an actual one and set the INTENTs given. */ + +static gfc_formal_arglist* +create_formal_for_intents (gfc_actual_arglist* actual, const sym_intent* ints) +{ + gfc_formal_arglist* head; + gfc_formal_arglist* tail; + int i; + + if (!actual) + return NULL; + + head = tail = gfc_get_formal_arglist (); + for (i = 0; actual; actual = actual->next, tail = tail->next, ++i) + { + gfc_symbol* sym; + + sym = gfc_new_symbol ("dummyarg", NULL); + sym->ts = actual->expr->ts; + + sym->attr.intent = ints[i]; + tail->sym = sym; + + if (actual->next) + tail->next = gfc_get_formal_arglist (); + } + + return head; +} + + +void +gfc_resolve_mvbits (gfc_code *c) +{ + static const sym_intent INTENTS[] = {INTENT_IN, INTENT_IN, INTENT_IN, + INTENT_INOUT, INTENT_IN}; + + const char *name; + gfc_typespec ts; + gfc_clear_ts (&ts); + + /* FROMPOS, LEN and TOPOS are restricted to small values. As such, + they will be converted so that they fit into a C int. */ + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + if (c->ext.actual->next->expr->ts.kind != gfc_c_int_kind) + gfc_convert_type (c->ext.actual->next->expr, &ts, 2); + if (c->ext.actual->next->next->expr->ts.kind != gfc_c_int_kind) + gfc_convert_type (c->ext.actual->next->next->expr, &ts, 2); + if (c->ext.actual->next->next->next->next->expr->ts.kind != gfc_c_int_kind) + gfc_convert_type (c->ext.actual->next->next->next->next->expr, &ts, 2); + + /* TO and FROM are guaranteed to have the same kind parameter. */ + name = gfc_get_string (PREFIX ("mvbits_i%d"), + c->ext.actual->expr->ts.kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); + /* Mark as elemental subroutine as this does not happen automatically. */ + c->resolved_sym->attr.elemental = 1; + + /* Create a dummy formal arglist so the INTENTs are known later for purpose + of creating temporaries. */ + c->resolved_sym->formal = create_formal_for_intents (c->ext.actual, INTENTS); +} + + +void +gfc_resolve_random_number (gfc_code *c) +{ + const char *name; + int kind; + + kind = c->ext.actual->expr->ts.kind; + if (c->ext.actual->expr->rank == 0) + name = gfc_get_string (PREFIX ("random_r%d"), kind); + else + name = gfc_get_string (PREFIX ("arandom_r%d"), kind); + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_random_seed (gfc_code *c) +{ + const char *name; + + name = gfc_get_string (PREFIX ("random_seed_i%d"), gfc_default_integer_kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_rename_sub (gfc_code *c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->next->expr != NULL) + kind = c->ext.actual->next->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX ("rename_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_kill_sub (gfc_code *c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->next->expr != NULL) + kind = c->ext.actual->next->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX ("kill_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_link_sub (gfc_code *c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->next->expr != NULL) + kind = c->ext.actual->next->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX ("link_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_symlnk_sub (gfc_code *c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->next->expr != NULL) + kind = c->ext.actual->next->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX ("symlnk_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +/* G77 compatibility subroutines dtime() and etime(). */ + +void +gfc_resolve_dtime_sub (gfc_code *c) +{ + const char *name; + name = gfc_get_string (PREFIX ("dtime_sub")); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + +void +gfc_resolve_etime_sub (gfc_code *c) +{ + const char *name; + name = gfc_get_string (PREFIX ("etime_sub")); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +/* G77 compatibility subroutines itime(), idate(), ltime() and gmtime(). */ + +void +gfc_resolve_itime (gfc_code *c) +{ + c->resolved_sym + = gfc_get_intrinsic_sub_symbol (gfc_get_string (PREFIX ("itime_i%d"), + gfc_default_integer_kind)); +} + +void +gfc_resolve_idate (gfc_code *c) +{ + c->resolved_sym + = gfc_get_intrinsic_sub_symbol (gfc_get_string (PREFIX ("idate_i%d"), + gfc_default_integer_kind)); +} + +void +gfc_resolve_ltime (gfc_code *c) +{ + c->resolved_sym + = gfc_get_intrinsic_sub_symbol (gfc_get_string (PREFIX ("ltime_i%d"), + gfc_default_integer_kind)); +} + +void +gfc_resolve_gmtime (gfc_code *c) +{ + c->resolved_sym + = gfc_get_intrinsic_sub_symbol (gfc_get_string (PREFIX ("gmtime_i%d"), + gfc_default_integer_kind)); +} + + +/* G77 compatibility subroutine second(). */ + +void +gfc_resolve_second_sub (gfc_code *c) +{ + const char *name; + name = gfc_get_string (PREFIX ("second_sub")); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_sleep_sub (gfc_code *c) +{ + const char *name; + int kind; + + if (c->ext.actual->expr != NULL) + kind = c->ext.actual->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX ("sleep_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +/* G77 compatibility function srand(). */ + +void +gfc_resolve_srand (gfc_code *c) +{ + const char *name; + name = gfc_get_string (PREFIX ("srand")); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +/* Resolve the getarg intrinsic subroutine. */ + +void +gfc_resolve_getarg (gfc_code *c) +{ + const char *name; + + if (c->ext.actual->expr->ts.kind != gfc_default_integer_kind) + { + gfc_typespec ts; + gfc_clear_ts (&ts); + + ts.type = BT_INTEGER; + ts.kind = gfc_default_integer_kind; + + gfc_convert_type (c->ext.actual->expr, &ts, 2); + } + + name = gfc_get_string (PREFIX ("getarg_i%d"), gfc_default_integer_kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +/* Resolve the getcwd intrinsic subroutine. */ + +void +gfc_resolve_getcwd_sub (gfc_code *c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->expr != NULL) + kind = c->ext.actual->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX ("getcwd_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +/* Resolve the get_command intrinsic subroutine. */ + +void +gfc_resolve_get_command (gfc_code *c) +{ + const char *name; + int kind; + kind = gfc_default_integer_kind; + name = gfc_get_string (PREFIX ("get_command_i%d"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +/* Resolve the get_command_argument intrinsic subroutine. */ + +void +gfc_resolve_get_command_argument (gfc_code *c) +{ + const char *name; + int kind; + kind = gfc_default_integer_kind; + name = gfc_get_string (PREFIX ("get_command_argument_i%d"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +/* Resolve the get_environment_variable intrinsic subroutine. */ + +void +gfc_resolve_get_environment_variable (gfc_code *code) +{ + const char *name; + int kind; + kind = gfc_default_integer_kind; + name = gfc_get_string (PREFIX ("get_environment_variable_i%d"), kind); + code->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_signal_sub (gfc_code *c) +{ + const char *name; + gfc_expr *number, *handler, *status; + gfc_typespec ts; + gfc_clear_ts (&ts); + + number = c->ext.actual->expr; + handler = c->ext.actual->next->expr; + status = c->ext.actual->next->next->expr; + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + + /* handler can be either BT_INTEGER or BT_PROCEDURE */ + if (handler->ts.type == BT_INTEGER) + { + if (handler->ts.kind != gfc_c_int_kind) + gfc_convert_type (handler, &ts, 2); + name = gfc_get_string (PREFIX ("signal_sub_int")); + } + else + name = gfc_get_string (PREFIX ("signal_sub")); + + if (number->ts.kind != gfc_c_int_kind) + gfc_convert_type (number, &ts, 2); + if (status != NULL && status->ts.kind != gfc_c_int_kind) + gfc_convert_type (status, &ts, 2); + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +/* Resolve the SYSTEM intrinsic subroutine. */ + +void +gfc_resolve_system_sub (gfc_code *c) +{ + const char *name; + name = gfc_get_string (PREFIX ("system_sub")); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +/* Determine if the arguments to SYSTEM_CLOCK are INTEGER(4) or INTEGER(8) */ + +void +gfc_resolve_system_clock (gfc_code *c) +{ + const char *name; + int kind; + + if (c->ext.actual->expr != NULL) + kind = c->ext.actual->expr->ts.kind; + else if (c->ext.actual->next->expr != NULL) + kind = c->ext.actual->next->expr->ts.kind; + else if (c->ext.actual->next->next->expr != NULL) + kind = c->ext.actual->next->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX ("system_clock_%d"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +/* Resolve the EXIT intrinsic subroutine. */ + +void +gfc_resolve_exit (gfc_code *c) +{ + const char *name; + gfc_typespec ts; + gfc_expr *n; + gfc_clear_ts (&ts); + + /* The STATUS argument has to be of default kind. If it is not, + we convert it. */ + ts.type = BT_INTEGER; + ts.kind = gfc_default_integer_kind; + n = c->ext.actual->expr; + if (n != NULL && n->ts.kind != ts.kind) + gfc_convert_type (n, &ts, 2); + + name = gfc_get_string (PREFIX ("exit_i%d"), ts.kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +/* Resolve the FLUSH intrinsic subroutine. */ + +void +gfc_resolve_flush (gfc_code *c) +{ + const char *name; + gfc_typespec ts; + gfc_expr *n; + gfc_clear_ts (&ts); + + ts.type = BT_INTEGER; + ts.kind = gfc_default_integer_kind; + n = c->ext.actual->expr; + if (n != NULL && n->ts.kind != ts.kind) + gfc_convert_type (n, &ts, 2); + + name = gfc_get_string (PREFIX ("flush_i%d"), ts.kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_free (gfc_code *c) +{ + gfc_typespec ts; + gfc_expr *n; + gfc_clear_ts (&ts); + + ts.type = BT_INTEGER; + ts.kind = gfc_index_integer_kind; + n = c->ext.actual->expr; + if (n->ts.kind != ts.kind) + gfc_convert_type (n, &ts, 2); + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("free")); +} + + +void +gfc_resolve_ctime_sub (gfc_code *c) +{ + gfc_typespec ts; + gfc_clear_ts (&ts); + + /* ctime TIME argument is a INTEGER(KIND=8), says the doc */ + if (c->ext.actual->expr->ts.kind != 8) + { + ts.type = BT_INTEGER; + ts.kind = 8; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (c->ext.actual->expr, &ts, 2); + } + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("ctime_sub")); +} + + +void +gfc_resolve_fdate_sub (gfc_code *c) +{ + c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("fdate_sub")); +} + + +void +gfc_resolve_gerror (gfc_code *c) +{ + c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("gerror")); +} + + +void +gfc_resolve_getlog (gfc_code *c) +{ + c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("getlog")); +} + + +void +gfc_resolve_hostnm_sub (gfc_code *c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->expr != NULL) + kind = c->ext.actual->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX ("hostnm_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_perror (gfc_code *c) +{ + c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("perror_sub")); +} + +/* Resolve the STAT and FSTAT intrinsic subroutines. */ + +void +gfc_resolve_stat_sub (gfc_code *c) +{ + const char *name; + name = gfc_get_string (PREFIX ("stat_i%d_sub"), gfc_default_integer_kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_lstat_sub (gfc_code *c) +{ + const char *name; + name = gfc_get_string (PREFIX ("lstat_i%d_sub"), gfc_default_integer_kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_fstat_sub (gfc_code *c) +{ + const char *name; + gfc_expr *u; + gfc_typespec *ts; + + u = c->ext.actual->expr; + ts = &c->ext.actual->next->expr->ts; + if (u->ts.kind != ts->kind) + gfc_convert_type (u, ts, 2); + name = gfc_get_string (PREFIX ("fstat_i%d_sub"), ts->kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_fgetc_sub (gfc_code *c) +{ + const char *name; + gfc_typespec ts; + gfc_expr *u, *st; + gfc_clear_ts (&ts); + + u = c->ext.actual->expr; + st = c->ext.actual->next->next->expr; + + if (u->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (u, &ts, 2); + } + + if (st != NULL) + name = gfc_get_string (PREFIX ("fgetc_i%d_sub"), st->ts.kind); + else + name = gfc_get_string (PREFIX ("fgetc_i%d_sub"), gfc_default_integer_kind); + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_fget_sub (gfc_code *c) +{ + const char *name; + gfc_expr *st; + + st = c->ext.actual->next->expr; + if (st != NULL) + name = gfc_get_string (PREFIX ("fget_i%d_sub"), st->ts.kind); + else + name = gfc_get_string (PREFIX ("fget_i%d_sub"), gfc_default_integer_kind); + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_fputc_sub (gfc_code *c) +{ + const char *name; + gfc_typespec ts; + gfc_expr *u, *st; + gfc_clear_ts (&ts); + + u = c->ext.actual->expr; + st = c->ext.actual->next->next->expr; + + if (u->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (u, &ts, 2); + } + + if (st != NULL) + name = gfc_get_string (PREFIX ("fputc_i%d_sub"), st->ts.kind); + else + name = gfc_get_string (PREFIX ("fputc_i%d_sub"), gfc_default_integer_kind); + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_fput_sub (gfc_code *c) +{ + const char *name; + gfc_expr *st; + + st = c->ext.actual->next->expr; + if (st != NULL) + name = gfc_get_string (PREFIX ("fput_i%d_sub"), st->ts.kind); + else + name = gfc_get_string (PREFIX ("fput_i%d_sub"), gfc_default_integer_kind); + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_fseek_sub (gfc_code *c) +{ + gfc_expr *unit; + gfc_expr *offset; + gfc_expr *whence; + gfc_expr *status; + gfc_typespec ts; + gfc_clear_ts (&ts); + + unit = c->ext.actual->expr; + offset = c->ext.actual->next->expr; + whence = c->ext.actual->next->next->expr; + status = c->ext.actual->next->next->next->expr; + + if (unit->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (unit, &ts, 2); + } + + if (offset->ts.kind != gfc_intio_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_intio_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (offset, &ts, 2); + } + + if (whence->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (whence, &ts, 2); + } + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("fseek_sub")); +} + +void +gfc_resolve_ftell_sub (gfc_code *c) +{ + const char *name; + gfc_expr *unit; + gfc_expr *offset; + gfc_typespec ts; + gfc_clear_ts (&ts); + + unit = c->ext.actual->expr; + offset = c->ext.actual->next->expr; + + if (unit->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (unit, &ts, 2); + } + + name = gfc_get_string (PREFIX ("ftell_i%d_sub"), offset->ts.kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_ttynam_sub (gfc_code *c) +{ + gfc_typespec ts; + gfc_clear_ts (&ts); + + if (c->ext.actual->expr->ts.kind != gfc_c_int_kind) + { + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + ts.derived = NULL; + ts.cl = NULL; + gfc_convert_type (c->ext.actual->expr, &ts, 2); + } + + c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("ttynam_sub")); +} + + +/* Resolve the UMASK intrinsic subroutine. */ + +void +gfc_resolve_umask_sub (gfc_code *c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->expr != NULL) + kind = c->ext.actual->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX ("umask_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + +/* Resolve the UNLINK intrinsic subroutine. */ + +void +gfc_resolve_unlink_sub (gfc_code *c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->expr != NULL) + kind = c->ext.actual->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX ("unlink_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/iso-c-binding.def b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/iso-c-binding.def new file mode 100644 index 0000000000..98c3c98226 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/iso-c-binding.def @@ -0,0 +1,170 @@ +/* Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* This file contains the definition of the types provided by the + Fortran 2003 ISO_C_BINDING intrinsic module. */ + +#ifndef NAMED_INTCST +# define NAMED_INTCST(a,b,c,d) +#endif + +#ifndef NAMED_REALCST +# define NAMED_REALCST(a,b,c) +#endif + +#ifndef NAMED_CMPXCST +# define NAMED_CMPXCST(a,b,c) +#endif + +#ifndef NAMED_LOGCST +# define NAMED_LOGCST(a,b,c) +#endif + +#ifndef NAMED_CHARKNDCST +# define NAMED_CHARKNDCST(a,b,c) +#endif + +/* The arguments to NAMED_*CST are: + -- an internal name + -- the symbol name in the module, as seen by Fortran code + -- the value it has, for use in trans-types.c + -- the standard that supports this type */ + +NAMED_INTCST (ISOCBINDING_INT, "c_int", gfc_c_int_kind, GFC_STD_F2003) +NAMED_INTCST (ISOCBINDING_SHORT, "c_short", \ + get_int_kind_from_node (short_integer_type_node), GFC_STD_F2003) +NAMED_INTCST (ISOCBINDING_LONG, "c_long", \ + get_int_kind_from_node (long_integer_type_node), GFC_STD_F2003) +NAMED_INTCST (ISOCBINDING_LONG_LONG, "c_long_long", \ + get_int_kind_from_node (long_long_integer_type_node), GFC_STD_F2003) + +NAMED_INTCST (ISOCBINDING_INTMAX_T, "c_intmax_t", \ + get_int_kind_from_node (intmax_type_node), GFC_STD_F2003) +NAMED_INTCST (ISOCBINDING_INTPTR_T, "c_intptr_t", \ + get_int_kind_from_node (ptr_type_node), GFC_STD_F2003) +NAMED_INTCST (ISOCBINDING_SIZE_T, "c_size_t", \ + gfc_index_integer_kind, GFC_STD_F2003) +NAMED_INTCST (ISOCBINDING_SIGNED_CHAR, "c_signed_char", \ + get_int_kind_from_node (signed_char_type_node), GFC_STD_F2003) + +NAMED_INTCST (ISOCBINDING_INT8_T, "c_int8_t", get_int_kind_from_width (8), \ + GFC_STD_F2003) +NAMED_INTCST (ISOCBINDING_INT16_T, "c_int16_t", get_int_kind_from_width (16), \ + GFC_STD_F2003) +NAMED_INTCST (ISOCBINDING_INT32_T, "c_int32_t", get_int_kind_from_width (32), \ + GFC_STD_F2003) +NAMED_INTCST (ISOCBINDING_INT64_T, "c_int64_t", get_int_kind_from_width (64), \ + GFC_STD_F2003) +/* GNU Extension. */ +NAMED_INTCST (ISOCBINDING_INT128_T, "c_int128_t", get_int_kind_from_width (128), \ + GFC_STD_GNU) + +NAMED_INTCST (ISOCBINDING_INT_LEAST8_T, "c_int_least8_t", \ + get_int_kind_from_minimal_width (8), GFC_STD_F2003) +NAMED_INTCST (ISOCBINDING_INT_LEAST16_T, "c_int_least16_t", \ + get_int_kind_from_minimal_width (16), GFC_STD_F2003) +NAMED_INTCST (ISOCBINDING_INT_LEAST32_T, "c_int_least32_t", \ + get_int_kind_from_minimal_width (32), GFC_STD_F2003) +NAMED_INTCST (ISOCBINDING_INT_LEAST64_T, "c_int_least64_t", \ + get_int_kind_from_minimal_width (64), GFC_STD_F2003) +/* GNU Extension. */ +NAMED_INTCST (ISOCBINDING_INT_LEAST128_T, "c_int_least128_t", \ + get_int_kind_from_minimal_width (128), GFC_STD_GNU) + +/* TODO: Implement c_int_fast*_t. Depends on PR 448. */ +NAMED_INTCST (ISOCBINDING_INT_FAST8_T, "c_int_fast8_t", -2, GFC_STD_F2003) +NAMED_INTCST (ISOCBINDING_INT_FAST16_T, "c_int_fast16_t", -2, GFC_STD_F2003) +NAMED_INTCST (ISOCBINDING_INT_FAST32_T, "c_int_fast32_t", -2, GFC_STD_F2003) +NAMED_INTCST (ISOCBINDING_INT_FAST64_T, "c_int_fast64_t", -2, GFC_STD_F2003) +/* GNU Extension. */ +NAMED_INTCST (ISOCBINDING_INT_FAST128_T, "c_int_fast128_t", -2, GFC_STD_GNU) + +NAMED_REALCST (ISOCBINDING_FLOAT, "c_float", \ + get_real_kind_from_node (float_type_node)) +NAMED_REALCST (ISOCBINDING_DOUBLE, "c_double", \ + get_real_kind_from_node (double_type_node)) +NAMED_REALCST (ISOCBINDING_LONG_DOUBLE, "c_long_double", \ + get_real_kind_from_node (long_double_type_node)) +NAMED_CMPXCST (ISOCBINDING_FLOAT_COMPLEX, "c_float_complex", \ + get_real_kind_from_node (float_type_node)) +NAMED_CMPXCST (ISOCBINDING_DOUBLE_COMPLEX, "c_double_complex", \ + get_real_kind_from_node (double_type_node)) +NAMED_CMPXCST (ISOCBINDING_LONG_DOUBLE_COMPLEX, "c_long_double_complex", \ + get_real_kind_from_node (long_double_type_node)) + +NAMED_LOGCST (ISOCBINDING_BOOL, "c_bool", \ + get_int_kind_from_width (BOOL_TYPE_SIZE)) + +NAMED_CHARKNDCST (ISOCBINDING_CHAR, "c_char", gfc_default_character_kind) + +#ifndef NAMED_CHARCST +# define NAMED_CHARCST(a,b,c) +#endif + +/* Use langhooks to deal with host to target translations. */ +NAMED_CHARCST (ISOCBINDING_NULL_CHAR, "c_null_char", \ + lang_hooks.to_target_charset ('\0')) +NAMED_CHARCST (ISOCBINDING_ALERT, "c_alert", \ + lang_hooks.to_target_charset ('\a')) +NAMED_CHARCST (ISOCBINDING_BACKSPACE, "c_backspace", \ + lang_hooks.to_target_charset ('\b')) +NAMED_CHARCST (ISOCBINDING_FORM_FEED, "c_form_feed", \ + lang_hooks.to_target_charset ('\f')) +NAMED_CHARCST (ISOCBINDING_NEW_LINE, "c_new_line", \ + lang_hooks.to_target_charset ('\n')) +NAMED_CHARCST (ISOCBINDING_CARRIAGE_RETURN, "c_carriage_return", \ + lang_hooks.to_target_charset ('\r')) +NAMED_CHARCST (ISOCBINDING_HORIZONTAL_TAB, "c_horizontal_tab", \ + lang_hooks.to_target_charset ('\t')) +NAMED_CHARCST (ISOCBINDING_VERTICAL_TAB, "c_vertical_tab", \ + lang_hooks.to_target_charset ('\v')) + +#ifndef DERIVED_TYPE +# define DERIVED_TYPE(a,b,c) +#endif + +DERIVED_TYPE (ISOCBINDING_PTR, "c_ptr", \ + get_int_kind_from_node (ptr_type_node)) +DERIVED_TYPE (ISOCBINDING_NULL_PTR, "c_null_ptr", \ + get_int_kind_from_node (ptr_type_node)) +DERIVED_TYPE (ISOCBINDING_FUNPTR, "c_funptr", \ + get_int_kind_from_node (ptr_type_node)) +DERIVED_TYPE (ISOCBINDING_NULL_FUNPTR, "c_null_funptr", \ + get_int_kind_from_node (ptr_type_node)) + + +#ifndef PROCEDURE +# define PROCEDURE(a,b) +#endif + +PROCEDURE (ISOCBINDING_F_POINTER, "c_f_pointer") +PROCEDURE (ISOCBINDING_ASSOCIATED, "c_associated") +PROCEDURE (ISOCBINDING_LOC, "c_loc") +PROCEDURE (ISOCBINDING_FUNLOC, "c_funloc") + +/* Insert c_f_procpointer, though unsupported for now. */ +PROCEDURE (ISOCBINDING_F_PROCPOINTER, "c_f_procpointer") + +#undef NAMED_INTCST +#undef NAMED_REALCST +#undef NAMED_CMPXCST +#undef NAMED_LOGCST +#undef NAMED_CHARCST +#undef NAMED_CHARKNDCST +#undef DERIVED_TYPE +#undef PROCEDURE diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/iso-fortran-env.def b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/iso-fortran-env.def new file mode 100644 index 0000000000..5f2c04231c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/iso-fortran-env.def @@ -0,0 +1,43 @@ +/* Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* This file contains the definition of the named integer constants provided + by the Fortran 2003 ISO_FORTRAN_ENV intrinsic module. */ + +/* The arguments to NAMED_INTCST are: + -- an internal name + -- the symbol name in the module, as seen by Fortran code + -- the value it has + -- the standard that supports this type */ + +NAMED_INTCST (ISOFORTRANENV_CHARACTER_STORAGE_SIZE, "character_storage_size", \ + gfc_character_storage_size, GFC_STD_F2003) +NAMED_INTCST (ISOFORTRANENV_ERROR_UNIT, "error_unit", GFC_STDERR_UNIT_NUMBER, \ + GFC_STD_F2003) +NAMED_INTCST (ISOFORTRANENV_FILE_STORAGE_SIZE, "file_storage_size", 8, \ + GFC_STD_F2003) +NAMED_INTCST (ISOFORTRANENV_INPUT_UNIT, "input_unit", GFC_STDIN_UNIT_NUMBER, \ + GFC_STD_F2003) +NAMED_INTCST (ISOFORTRANENV_IOSTAT_END, "iostat_end", LIBERROR_END, \ + GFC_STD_F2003) +NAMED_INTCST (ISOFORTRANENV_IOSTAT_EOR, "iostat_eor", LIBERROR_EOR, \ + GFC_STD_F2003) +NAMED_INTCST (ISOFORTRANENV_NUMERIC_STORAGE_SIZE, "numeric_storage_size", \ + gfc_numeric_storage_size, GFC_STD_F2003) +NAMED_INTCST (ISOFORTRANENV_OUTPUT_UNIT, "output_unit", GFC_STDOUT_UNIT_NUMBER, \ + GFC_STD_F2003) diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/lang-specs.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/lang-specs.h new file mode 100644 index 0000000000..a622dcb1a6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/lang-specs.h @@ -0,0 +1,78 @@ +/* Contribution to the specs for the GNU Compiler Collection + from GNU Fortran 95 compiler. + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + + This 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 3 of the License, or + (at your option) any later version. + + This 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 GCC; see the file COPYING3. If not see + . */ + +/* This is the contribution to the `default_compilers' array in gcc.c + for the f95 language. */ + +/* Identical to gcc.c (cpp_options), but omitting %(cpp_unique_options) + and -fpch-preprocess on -save-temps. */ +#define CPP_ONLY_OPTIONS "%1 %{m*} %{f*} %{g*:%{!g0:%{g*} \ + %{!fno-working-directory:-fworking-directory}}} \ + %{std*&ansi&trigraphs} %{W*&pedantic*} %{w} \ + %{O*} %{undef}" + +/* Options that f951 should know about, even if not preprocessing. */ +#define CPP_FORWARD_OPTIONS "%{i*} %{I*}" + +#define F951_CPP_OPTIONS "%{!nocpp: -cpp %g.f90 %{E} %(cpp_unique_options) \ + %{E|M|MM:%(cpp_debug_options) " CPP_ONLY_OPTIONS \ + " -fsyntax-only};: " CPP_FORWARD_OPTIONS "}" +#define F951_OPTIONS "%(cc1_options) %{J*} \ + %{!nostdinc:-fintrinsic-modules-path finclude%s}\ + %{!fsyntax-only:%(invoke_as)}" +#define F951_SOURCE_FORM "%{!ffree-form:-ffixed-form}" + + +{".F", "@f77-cpp-input", 0, 0, 0}, +{".FOR", "@f77-cpp-input", 0, 0, 0}, +{".FTN", "@f77-cpp-input", 0, 0, 0}, +{".fpp", "@f77-cpp-input", 0, 0, 0}, +{".FPP", "@f77-cpp-input", 0, 0, 0}, +{"@f77-cpp-input", + "f951 %i " F951_SOURCE_FORM " " \ + F951_CPP_OPTIONS " %{!E:" F951_OPTIONS "}", 0, 0, 0}, +{".f", "@f77", 0, 0, 0}, +{".for", "@f77", 0, 0, 0}, +{".ftn", "@f77", 0, 0, 0}, +{"@f77", + "f951 %i " F951_SOURCE_FORM " \ + %{E:%{!cpp:%egfortran does not support -E without -cpp}} \ + %{cpp:" F951_CPP_OPTIONS ";: " CPP_FORWARD_OPTIONS "} \ + %{!E:" F951_OPTIONS "}", 0, 0, 0}, +{".F90", "@f95-cpp-input", 0, 0, 0}, +{".F95", "@f95-cpp-input", 0, 0, 0}, +{".F03", "@f95-cpp-input", 0, 0, 0}, +{".F08", "@f95-cpp-input", 0, 0, 0}, +{"@f95-cpp-input", + "f951 %i " F951_CPP_OPTIONS " %{!E:" F951_OPTIONS "}", 0, 0, 0}, +{".f90", "@f95", 0, 0, 0}, +{".f95", "@f95", 0, 0, 0}, +{".f03", "@f95", 0, 0, 0}, +{".f08", "@f95", 0, 0, 0}, +{"@f95", + "f951 %i %{E:%{!cpp:%egfortran does not support -E without -cpp}}\ + %{cpp:" F951_CPP_OPTIONS ";: " CPP_FORWARD_OPTIONS "} \ + %{!E:" F951_OPTIONS "}", 0, 0, 0}, + + +#undef CPP_ONLY_OPTIONS +#undef CPP_FORWARD_OPTIONS +#undef F951_SOURCE_FORM +#undef F951_CPP_OPTIONS +#undef F951_OPTIONS diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/lang.opt b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/lang.opt new file mode 100644 index 0000000000..64fd486e7a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/lang.opt @@ -0,0 +1,427 @@ +; Options for the Fortran 95 front end. +; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 +; Free Software Foundation, Inc. +; +; This file is part of GCC. +; +; GCC 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 3, or (at your option) any later +; version. +; +; GCC 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 GCC; see the file COPYING3. If not see +; . + +; See the GCC internals manual for a description of this file's format. + +; Please try to keep this file in ASCII collating order. + +Language +Fortran + +A +Fortran Joined Separate +; Documented in C + +C +Fortran +; Documented in C + +CC +Fortran +; Documented in C + +D +Fortran Joined Separate +; Documented in C + +E +Fortran Undocumented + +H +Fortran +; Documented in C + +I +Fortran Joined Separate +; Documented in C + +J +Fortran Joined Separate +-J Put MODULE files in 'directory' + +P +Fortran +; Documented in C + +U +Fortran Joined Separate +; Documented in C + +Wall +Fortran +; Documented in C + +Waliasing +Fortran Warning +Warn about possible aliasing of dummy arguments + +Walign-commons +Fortran Warning +Warn about alignment of COMMON blocks + +Wampersand +Fortran Warning +Warn about missing ampersand in continued character constants + +Warray-temporaries +Fortran Warning +Warn about creation of array temporaries + +Wcharacter-truncation +Fortran Warning +Warn about truncated character expressions + +Wconversion +Fortran Warning +; Documented in C + +Wimplicit-interface +Fortran Warning +Warn about calls with implicit interface + +Wline-truncation +Fortran Warning +Warn about truncated source lines + +Wintrinsics-std +Fortran Warning +Warn on intrinsics not part of the selected standard + +Wreturn-type +Fortran Warning +; Documented in C + +Wsurprising +Fortran Warning +Warn about \"suspicious\" constructs + +Wtabs +Fortran Warning +Permit nonconforming uses of the tab character + +Wunderflow +Fortran Warning +Warn about underflow of numerical constant expressions + +Wintrinsic-shadow +Fortran Warning +Warn if a user-procedure has the same name as an intrinsic + +cpp +Fortran Joined Separate Negative(nocpp) +Enable preprocessing + +nocpp +Fortran Negative(cpp) +Disable preprocessing + +d +Fortran Joined +; Documented in common.opt + +falign-commons +Fortran +Enable alignment of COMMON blocks + +fall-intrinsics +Fortran RejectNegative +All intrinsics procedures are available regardless of selected standard + +fallow-leading-underscore +Fortran Undocumented +; For internal use only: allow the first character of symbol names to be an underscore + +fautomatic +Fortran +Do not treat local variables and COMMON blocks as if they were named in SAVE statements + +fbackslash +Fortran +Specify that backslash in string introduces an escape character + +fbacktrace +Fortran +Produce a backtrace when a runtime error is encountered + +fblas-matmul-limit= +Fortran RejectNegative Joined UInteger +-fblas-matmul-limit= Size of the smallest matrix for which matmul will use BLAS + +fcheck-array-temporaries +Fortran +Produce a warning at runtime if a array temporary has been created for a procedure argument + +fconvert=big-endian +Fortran RejectNegative +Use big-endian format for unformatted files + +fconvert=little-endian +Fortran RejectNegative +Use little-endian format for unformatted files + +fconvert=native +Fortran RejectNegative +Use native format for unformatted files + +fconvert=swap +Fortran RejectNegative +Swap endianness for unformatted files + +fcray-pointer +Fortran +Use the Cray Pointer extension + +fd-lines-as-code +Fortran RejectNegative +Ignore 'D' in column one in fixed form + +fd-lines-as-comments +Fortran RejectNegative +Treat lines with 'D' in column one as comments + +fdefault-double-8 +Fortran +Set the default double precision kind to an 8 byte wide type + +fdefault-integer-8 +Fortran +Set the default integer kind to an 8 byte wide type + +fdefault-real-8 +Fortran +Set the default real kind to an 8 byte wide type + +fdollar-ok +Fortran +Allow dollar signs in entity names + +fdump-core +Fortran +Dump a core file when a runtime error occurs + +fdump-parse-tree +Fortran +Display the code tree after parsing + +fexternal-blas +Fortran +Specify that an external BLAS library should be used for matmul calls on large-size arrays + +ff2c +Fortran +Use f2c calling convention + +ffixed-form +Fortran RejectNegative +Assume that the source file is fixed form + +fintrinsic-modules-path +Fortran RejectNegative Joined Separate +Specify where to find the compiled intrinsic modules + +ffixed-line-length-none +Fortran RejectNegative +Allow arbitrary character line width in fixed mode + +ffixed-line-length- +Fortran RejectNegative Joined UInteger +-ffixed-line-length- Use n as character line width in fixed mode + +ffpe-trap= +Fortran RejectNegative JoinedOrMissing +-ffpe-trap=[..] Stop on following floating point exceptions + +ffree-form +Fortran RejectNegative +Assume that the source file is free form + +ffree-line-length-none +Fortran RejectNegative +Allow arbitrary character line width in free mode + +ffree-line-length- +Fortran RejectNegative Joined UInteger +-ffree-line-length- Use n as character line width in free mode + +fimplicit-none +Fortran +Specify that no implicit typing is allowed, unless overridden by explicit IMPLICIT statements + +finit-character= +Fortran RejectNegative Joined UInteger +-finit-character= Initialize local character variables to ASCII value n + +finit-integer= +Fortran RejectNegative Joined +-finit-integer= Initialize local integer variables to n + +finit-local-zero +Fortran +Initialize local variables to zero (from g77) + +finit-logical= +Fortran RejectNegative Joined +-finit-logical= Initialize local logical variables + +finit-real= +Fortran RejectNegative Joined +-finit-real= Initialize local real variables + +fmax-array-constructor= +Fortran RejectNegative Joined UInteger +-fmax-array-constructor= Maximum number of objects in an array constructor + +fmax-errors= +Fortran RejectNegative Joined UInteger +-fmax-errors= Maximum number of errors to report + +fmax-identifier-length= +Fortran RejectNegative Joined UInteger +-fmax-identifier-length= Maximum identifier length + +fmax-subrecord-length= +Fortran RejectNegative Joined UInteger +-fmax-subrecord-length= Maximum length for subrecords + +fmax-stack-var-size= +Fortran RejectNegative Joined UInteger +-fmax-stack-var-size= Size in bytes of the largest array that will be put on the stack + +fmodule-private +Fortran +Set default accessibility of module entities to PRIVATE. + +fopenmp +Fortran +; Documented in C + +fpack-derived +Fortran +Try to lay out derived types as compactly as possible + +fpreprocessed +Fortran +; Documented in C + +frange-check +Fortran +Enable range checking during compilation + +frecord-marker=4 +Fortran RejectNegative +Use a 4-byte record marker for unformatted files + +frecord-marker=8 +Fortran RejectNegative +Use an 8-byte record marker for unformatted files + +frecursive +Fortran +Allocate local variables on the stack to allow indirect recursion + +frepack-arrays +Fortran +Copy array sections into a contiguous block on procedure entry + +fsecond-underscore +Fortran +Append a second underscore if the name already contains an underscore + +fshort-enums +Fortran +Use the narrowest integer type possible for enumeration types + +fsign-zero +Fortran +Apply negative sign to zero values + +funderscoring +Fortran +Append underscores to externally visible names + +fworking-directory +Fortran +; Documented in C + +idirafter +Fortran Joined Separate +; Documented in C + +imultilib +Fortran Joined Separate +; Documented in C + +iprefix +Fortran Joined Separate +; Documented in C + +iquote +Fortran Joined Separate +; Documented in C + +isysroot +Fortran Joined Separate +; Documented in C + +isystem +Fortran Joined Separate +; Documented in C + +nostdinc +Fortran +; Documented in C + +o +Fortran Joined Separate +; Documented in common.opt + +static-libgfortran +Fortran +Statically link the GNU Fortran helper library (libgfortran) + +std=f2003 +Fortran +Conform to the ISO Fortran 2003 standard + +std=f2008 +Fortran +Conform to the ISO Fortran 2008 standard + +std=f95 +Fortran +Conform to the ISO Fortran 95 standard + +std=gnu +Fortran +Conform to nothing in particular + +std=legacy +Fortran +Accept extensions to support legacy code + +undef +Fortran +; Documented in C + +v +Fortran +; Documented in C + +; This comment is to ensure we retain the blank line above. diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/libgfortran.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/libgfortran.h new file mode 100644 index 0000000000..74bb9a92fc --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/libgfortran.h @@ -0,0 +1,111 @@ +/* Header file to the Fortran front-end and runtime library + Copyright (C) 2007, 2008 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + + +/* Flags to specify which standard/extension contains a feature. + Note that no features were obsoleted nor deleted in F2003. */ +#define GFC_STD_F2008 (1<<7) /* New in F2008. */ +#define GFC_STD_LEGACY (1<<6) /* Backward compatibility. */ +#define GFC_STD_GNU (1<<5) /* GNU Fortran extension. */ +#define GFC_STD_F2003 (1<<4) /* New in F2003. */ +#define GFC_STD_F95 (1<<3) /* New in F95. */ +#define GFC_STD_F95_DEL (1<<2) /* Deleted in F95. */ +#define GFC_STD_F95_OBS (1<<1) /* Obsolescent in F95. */ +#define GFC_STD_F77 (1<<0) /* Included in F77, but not deleted or + obsolescent in later standards. */ + + +/* Bitmasks for the various FPE that can be enabled. */ +#define GFC_FPE_INVALID (1<<0) +#define GFC_FPE_DENORMAL (1<<1) +#define GFC_FPE_ZERO (1<<2) +#define GFC_FPE_OVERFLOW (1<<3) +#define GFC_FPE_UNDERFLOW (1<<4) +#define GFC_FPE_PRECISION (1<<5) + + +/* Possible values for the CONVERT I/O specifier. */ +typedef enum +{ + GFC_CONVERT_NONE = -1, + GFC_CONVERT_NATIVE = 0, + GFC_CONVERT_SWAP, + GFC_CONVERT_BIG, + GFC_CONVERT_LITTLE +} +unit_convert; + + +/* Runtime errors. */ +typedef enum +{ + LIBERROR_FIRST = -3, /* Marker for the first error. */ + LIBERROR_EOR = -2, /* End of record, must be negative. */ + LIBERROR_END = -1, /* End of file, must be negative. */ + LIBERROR_OK = 0, /* Indicates success, must be zero. */ + LIBERROR_OS = 5000, /* OS error, more info in errno. */ + LIBERROR_OPTION_CONFLICT, + LIBERROR_BAD_OPTION, + LIBERROR_MISSING_OPTION, + LIBERROR_ALREADY_OPEN, + LIBERROR_BAD_UNIT, + LIBERROR_FORMAT, + LIBERROR_BAD_ACTION, + LIBERROR_ENDFILE, + LIBERROR_BAD_US, + LIBERROR_READ_VALUE, + LIBERROR_READ_OVERFLOW, + LIBERROR_INTERNAL, + LIBERROR_INTERNAL_UNIT, + LIBERROR_ALLOCATION, + LIBERROR_DIRECT_EOR, + LIBERROR_SHORT_RECORD, + LIBERROR_CORRUPT_FILE, + LIBERROR_LAST /* Not a real error, the last error # + 1. */ +} +libgfortran_error_codes; + + +/* Default unit number for preconnected standard input and output. */ +#define GFC_STDIN_UNIT_NUMBER 5 +#define GFC_STDOUT_UNIT_NUMBER 6 +#define GFC_STDERR_UNIT_NUMBER 0 + + +/* FIXME: Increase to 15 for Fortran 2008. Also needs changes to + GFC_DTYPE_RANK_MASK. See PR 36825. */ +#define GFC_MAX_DIMENSIONS 7 + +#define GFC_DTYPE_RANK_MASK 0x07 +#define GFC_DTYPE_TYPE_SHIFT 3 +#define GFC_DTYPE_TYPE_MASK 0x38 +#define GFC_DTYPE_SIZE_SHIFT 6 + +enum +{ + GFC_DTYPE_UNKNOWN = 0, + GFC_DTYPE_INTEGER, + /* TODO: recognize logical types. */ + GFC_DTYPE_LOGICAL, + GFC_DTYPE_REAL, + GFC_DTYPE_COMPLEX, + GFC_DTYPE_DERIVED, + GFC_DTYPE_CHARACTER +}; + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/match.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/match.c new file mode 100644 index 0000000000..c8fd30d754 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/match.c @@ -0,0 +1,4079 @@ +/* Matching subroutines in all sizes, shapes and colors. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "flags.h" +#include "gfortran.h" +#include "match.h" +#include "parse.h" + +int gfc_matching_procptr_assignment = 0; +bool gfc_matching_prefix = false; + +/* For debugging and diagnostic purposes. Return the textual representation + of the intrinsic operator OP. */ +const char * +gfc_op2string (gfc_intrinsic_op op) +{ + switch (op) + { + case INTRINSIC_UPLUS: + case INTRINSIC_PLUS: + return "+"; + + case INTRINSIC_UMINUS: + case INTRINSIC_MINUS: + return "-"; + + case INTRINSIC_POWER: + return "**"; + case INTRINSIC_CONCAT: + return "//"; + case INTRINSIC_TIMES: + return "*"; + case INTRINSIC_DIVIDE: + return "/"; + + case INTRINSIC_AND: + return ".and."; + case INTRINSIC_OR: + return ".or."; + case INTRINSIC_EQV: + return ".eqv."; + case INTRINSIC_NEQV: + return ".neqv."; + + case INTRINSIC_EQ_OS: + return ".eq."; + case INTRINSIC_EQ: + return "=="; + case INTRINSIC_NE_OS: + return ".ne."; + case INTRINSIC_NE: + return "/="; + case INTRINSIC_GE_OS: + return ".ge."; + case INTRINSIC_GE: + return ">="; + case INTRINSIC_LE_OS: + return ".le."; + case INTRINSIC_LE: + return "<="; + case INTRINSIC_LT_OS: + return ".lt."; + case INTRINSIC_LT: + return "<"; + case INTRINSIC_GT_OS: + return ".gt."; + case INTRINSIC_GT: + return ">"; + case INTRINSIC_NOT: + return ".not."; + + case INTRINSIC_ASSIGN: + return "="; + + case INTRINSIC_PARENTHESES: + return "parens"; + + default: + break; + } + + gfc_internal_error ("gfc_op2string(): Bad code"); + /* Not reached. */ +} + + +/******************** Generic matching subroutines ************************/ + +/* This function scans the current statement counting the opened and closed + parenthesis to make sure they are balanced. */ + +match +gfc_match_parens (void) +{ + locus old_loc, where; + int count, instring; + gfc_char_t c, quote; + + old_loc = gfc_current_locus; + count = 0; + instring = 0; + quote = ' '; + + for (;;) + { + c = gfc_next_char_literal (instring); + if (c == '\n') + break; + if (quote == ' ' && ((c == '\'') || (c == '"'))) + { + quote = c; + instring = 1; + continue; + } + if (quote != ' ' && c == quote) + { + quote = ' '; + instring = 0; + continue; + } + + if (c == '(' && quote == ' ') + { + count++; + where = gfc_current_locus; + } + if (c == ')' && quote == ' ') + { + count--; + where = gfc_current_locus; + } + } + + gfc_current_locus = old_loc; + + if (count > 0) + { + gfc_error ("Missing ')' in statement at or before %L", &where); + return MATCH_ERROR; + } + if (count < 0) + { + gfc_error ("Missing '(' in statement at or before %L", &where); + return MATCH_ERROR; + } + + return MATCH_YES; +} + + +/* See if the next character is a special character that has + escaped by a \ via the -fbackslash option. */ + +match +gfc_match_special_char (gfc_char_t *res) +{ + int len, i; + gfc_char_t c, n; + match m; + + m = MATCH_YES; + + switch ((c = gfc_next_char_literal (1))) + { + case 'a': + *res = '\a'; + break; + case 'b': + *res = '\b'; + break; + case 't': + *res = '\t'; + break; + case 'f': + *res = '\f'; + break; + case 'n': + *res = '\n'; + break; + case 'r': + *res = '\r'; + break; + case 'v': + *res = '\v'; + break; + case '\\': + *res = '\\'; + break; + case '0': + *res = '\0'; + break; + + case 'x': + case 'u': + case 'U': + /* Hexadecimal form of wide characters. */ + len = (c == 'x' ? 2 : (c == 'u' ? 4 : 8)); + n = 0; + for (i = 0; i < len; i++) + { + char buf[2] = { '\0', '\0' }; + + c = gfc_next_char_literal (1); + if (!gfc_wide_fits_in_byte (c) + || !gfc_check_digit ((unsigned char) c, 16)) + return MATCH_NO; + + buf[0] = (unsigned char) c; + n = n << 4; + n += strtol (buf, NULL, 16); + } + *res = n; + break; + + default: + /* Unknown backslash codes are simply not expanded. */ + m = MATCH_NO; + break; + } + + return m; +} + + +/* In free form, match at least one space. Always matches in fixed + form. */ + +match +gfc_match_space (void) +{ + locus old_loc; + char c; + + if (gfc_current_form == FORM_FIXED) + return MATCH_YES; + + old_loc = gfc_current_locus; + + c = gfc_next_ascii_char (); + if (!gfc_is_whitespace (c)) + { + gfc_current_locus = old_loc; + return MATCH_NO; + } + + gfc_gobble_whitespace (); + + return MATCH_YES; +} + + +/* Match an end of statement. End of statement is optional + whitespace, followed by a ';' or '\n' or comment '!'. If a + semicolon is found, we continue to eat whitespace and semicolons. */ + +match +gfc_match_eos (void) +{ + locus old_loc; + int flag; + char c; + + flag = 0; + + for (;;) + { + old_loc = gfc_current_locus; + gfc_gobble_whitespace (); + + c = gfc_next_ascii_char (); + switch (c) + { + case '!': + do + { + c = gfc_next_ascii_char (); + } + while (c != '\n'); + + /* Fall through. */ + + case '\n': + return MATCH_YES; + + case ';': + flag = 1; + continue; + } + + break; + } + + gfc_current_locus = old_loc; + return (flag) ? MATCH_YES : MATCH_NO; +} + + +/* Match a literal integer on the input, setting the value on + MATCH_YES. Literal ints occur in kind-parameters as well as + old-style character length specifications. If cnt is non-NULL it + will be set to the number of digits. */ + +match +gfc_match_small_literal_int (int *value, int *cnt) +{ + locus old_loc; + char c; + int i, j; + + old_loc = gfc_current_locus; + + *value = -1; + gfc_gobble_whitespace (); + c = gfc_next_ascii_char (); + if (cnt) + *cnt = 0; + + if (!ISDIGIT (c)) + { + gfc_current_locus = old_loc; + return MATCH_NO; + } + + i = c - '0'; + j = 1; + + for (;;) + { + old_loc = gfc_current_locus; + c = gfc_next_ascii_char (); + + if (!ISDIGIT (c)) + break; + + i = 10 * i + c - '0'; + j++; + + if (i > 99999999) + { + gfc_error ("Integer too large at %C"); + return MATCH_ERROR; + } + } + + gfc_current_locus = old_loc; + + *value = i; + if (cnt) + *cnt = j; + return MATCH_YES; +} + + +/* Match a small, constant integer expression, like in a kind + statement. On MATCH_YES, 'value' is set. */ + +match +gfc_match_small_int (int *value) +{ + gfc_expr *expr; + const char *p; + match m; + int i; + + m = gfc_match_expr (&expr); + if (m != MATCH_YES) + return m; + + p = gfc_extract_int (expr, &i); + gfc_free_expr (expr); + + if (p != NULL) + { + gfc_error (p); + m = MATCH_ERROR; + } + + *value = i; + return m; +} + + +/* This function is the same as the gfc_match_small_int, except that + we're keeping the pointer to the expr. This function could just be + removed and the previously mentioned one modified, though all calls + to it would have to be modified then (and there were a number of + them). Return MATCH_ERROR if fail to extract the int; otherwise, + return the result of gfc_match_expr(). The expr (if any) that was + matched is returned in the parameter expr. */ + +match +gfc_match_small_int_expr (int *value, gfc_expr **expr) +{ + const char *p; + match m; + int i; + + m = gfc_match_expr (expr); + if (m != MATCH_YES) + return m; + + p = gfc_extract_int (*expr, &i); + + if (p != NULL) + { + gfc_error (p); + m = MATCH_ERROR; + } + + *value = i; + return m; +} + + +/* Matches a statement label. Uses gfc_match_small_literal_int() to + do most of the work. */ + +match +gfc_match_st_label (gfc_st_label **label) +{ + locus old_loc; + match m; + int i, cnt; + + old_loc = gfc_current_locus; + + m = gfc_match_small_literal_int (&i, &cnt); + if (m != MATCH_YES) + return m; + + if (cnt > 5) + { + gfc_error ("Too many digits in statement label at %C"); + goto cleanup; + } + + if (i == 0) + { + gfc_error ("Statement label at %C is zero"); + goto cleanup; + } + + *label = gfc_get_st_label (i); + return MATCH_YES; + +cleanup: + + gfc_current_locus = old_loc; + return MATCH_ERROR; +} + + +/* Match and validate a label associated with a named IF, DO or SELECT + statement. If the symbol does not have the label attribute, we add + it. We also make sure the symbol does not refer to another + (active) block. A matched label is pointed to by gfc_new_block. */ + +match +gfc_match_label (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + match m; + + gfc_new_block = NULL; + + m = gfc_match (" %n :", name); + if (m != MATCH_YES) + return m; + + if (gfc_get_symbol (name, NULL, &gfc_new_block)) + { + gfc_error ("Label name '%s' at %C is ambiguous", name); + return MATCH_ERROR; + } + + if (gfc_new_block->attr.flavor == FL_LABEL) + { + gfc_error ("Duplicate construct label '%s' at %C", name); + return MATCH_ERROR; + } + + if (gfc_add_flavor (&gfc_new_block->attr, FL_LABEL, + gfc_new_block->name, NULL) == FAILURE) + return MATCH_ERROR; + + return MATCH_YES; +} + + +/* See if the current input looks like a name of some sort. Modifies + the passed buffer which must be GFC_MAX_SYMBOL_LEN+1 bytes long. + Note that options.c restricts max_identifier_length to not more + than GFC_MAX_SYMBOL_LEN. */ + +match +gfc_match_name (char *buffer) +{ + locus old_loc; + int i; + char c; + + old_loc = gfc_current_locus; + gfc_gobble_whitespace (); + + c = gfc_next_ascii_char (); + if (!(ISALPHA (c) || (c == '_' && gfc_option.flag_allow_leading_underscore))) + { + if (gfc_error_flag_test() == 0 && c != '(') + gfc_error ("Invalid character in name at %C"); + gfc_current_locus = old_loc; + return MATCH_NO; + } + + i = 0; + + do + { + buffer[i++] = c; + + if (i > gfc_option.max_identifier_length) + { + gfc_error ("Name at %C is too long"); + return MATCH_ERROR; + } + + old_loc = gfc_current_locus; + c = gfc_next_ascii_char (); + } + while (ISALNUM (c) || c == '_' || (gfc_option.flag_dollar_ok && c == '$')); + + if (c == '$' && !gfc_option.flag_dollar_ok) + { + gfc_error ("Invalid character '$' at %C. Use -fdollar-ok to allow it " + "as an extension"); + return MATCH_ERROR; + } + + buffer[i] = '\0'; + gfc_current_locus = old_loc; + + return MATCH_YES; +} + + +/* Match a valid name for C, which is almost the same as for Fortran, + except that you can start with an underscore, etc.. It could have + been done by modifying the gfc_match_name, but this way other + things C allows can be added, such as no limits on the length. + Right now, the length is limited to the same thing as Fortran.. + Also, by rewriting it, we use the gfc_next_char_C() to prevent the + input characters from being automatically lower cased, since C is + case sensitive. The parameter, buffer, is used to return the name + that is matched. Return MATCH_ERROR if the name is too long + (though this is a self-imposed limit), MATCH_NO if what we're + seeing isn't a name, and MATCH_YES if we successfully match a C + name. */ + +match +gfc_match_name_C (char *buffer) +{ + locus old_loc; + int i = 0; + gfc_char_t c; + + old_loc = gfc_current_locus; + gfc_gobble_whitespace (); + + /* Get the next char (first possible char of name) and see if + it's valid for C (either a letter or an underscore). */ + c = gfc_next_char_literal (1); + + /* If the user put nothing expect spaces between the quotes, it is valid + and simply means there is no name= specifier and the name is the fortran + symbol name, all lowercase. */ + if (c == '"' || c == '\'') + { + buffer[0] = '\0'; + gfc_current_locus = old_loc; + return MATCH_YES; + } + + if (!ISALPHA (c) && c != '_') + { + gfc_error ("Invalid C name in NAME= specifier at %C"); + return MATCH_ERROR; + } + + /* Continue to read valid variable name characters. */ + do + { + gcc_assert (gfc_wide_fits_in_byte (c)); + + buffer[i++] = (unsigned char) c; + + /* C does not define a maximum length of variable names, to my + knowledge, but the compiler typically places a limit on them. + For now, i'll use the same as the fortran limit for simplicity, + but this may need to be changed to a dynamic buffer that can + be realloc'ed here if necessary, or more likely, a larger + upper-bound set. */ + if (i > gfc_option.max_identifier_length) + { + gfc_error ("Name at %C is too long"); + return MATCH_ERROR; + } + + old_loc = gfc_current_locus; + + /* Get next char; param means we're in a string. */ + c = gfc_next_char_literal (1); + } while (ISALNUM (c) || c == '_'); + + buffer[i] = '\0'; + gfc_current_locus = old_loc; + + /* See if we stopped because of whitespace. */ + if (c == ' ') + { + gfc_gobble_whitespace (); + c = gfc_peek_ascii_char (); + if (c != '"' && c != '\'') + { + gfc_error ("Embedded space in NAME= specifier at %C"); + return MATCH_ERROR; + } + } + + /* If we stopped because we had an invalid character for a C name, report + that to the user by returning MATCH_NO. */ + if (c != '"' && c != '\'') + { + gfc_error ("Invalid C name in NAME= specifier at %C"); + return MATCH_ERROR; + } + + return MATCH_YES; +} + + +/* Match a symbol on the input. Modifies the pointer to the symbol + pointer if successful. */ + +match +gfc_match_sym_tree (gfc_symtree **matched_symbol, int host_assoc) +{ + char buffer[GFC_MAX_SYMBOL_LEN + 1]; + match m; + + m = gfc_match_name (buffer); + if (m != MATCH_YES) + return m; + + if (host_assoc) + return (gfc_get_ha_sym_tree (buffer, matched_symbol)) + ? MATCH_ERROR : MATCH_YES; + + if (gfc_get_sym_tree (buffer, NULL, matched_symbol)) + return MATCH_ERROR; + + return MATCH_YES; +} + + +match +gfc_match_symbol (gfc_symbol **matched_symbol, int host_assoc) +{ + gfc_symtree *st; + match m; + + m = gfc_match_sym_tree (&st, host_assoc); + + if (m == MATCH_YES) + { + if (st) + *matched_symbol = st->n.sym; + else + *matched_symbol = NULL; + } + else + *matched_symbol = NULL; + return m; +} + + +/* Match an intrinsic operator. Returns an INTRINSIC enum. While matching, + we always find INTRINSIC_PLUS before INTRINSIC_UPLUS. We work around this + in matchexp.c. */ + +match +gfc_match_intrinsic_op (gfc_intrinsic_op *result) +{ + locus orig_loc = gfc_current_locus; + char ch; + + gfc_gobble_whitespace (); + ch = gfc_next_ascii_char (); + switch (ch) + { + case '+': + /* Matched "+". */ + *result = INTRINSIC_PLUS; + return MATCH_YES; + + case '-': + /* Matched "-". */ + *result = INTRINSIC_MINUS; + return MATCH_YES; + + case '=': + if (gfc_next_ascii_char () == '=') + { + /* Matched "==". */ + *result = INTRINSIC_EQ; + return MATCH_YES; + } + break; + + case '<': + if (gfc_peek_ascii_char () == '=') + { + /* Matched "<=". */ + gfc_next_ascii_char (); + *result = INTRINSIC_LE; + return MATCH_YES; + } + /* Matched "<". */ + *result = INTRINSIC_LT; + return MATCH_YES; + + case '>': + if (gfc_peek_ascii_char () == '=') + { + /* Matched ">=". */ + gfc_next_ascii_char (); + *result = INTRINSIC_GE; + return MATCH_YES; + } + /* Matched ">". */ + *result = INTRINSIC_GT; + return MATCH_YES; + + case '*': + if (gfc_peek_ascii_char () == '*') + { + /* Matched "**". */ + gfc_next_ascii_char (); + *result = INTRINSIC_POWER; + return MATCH_YES; + } + /* Matched "*". */ + *result = INTRINSIC_TIMES; + return MATCH_YES; + + case '/': + ch = gfc_peek_ascii_char (); + if (ch == '=') + { + /* Matched "/=". */ + gfc_next_ascii_char (); + *result = INTRINSIC_NE; + return MATCH_YES; + } + else if (ch == '/') + { + /* Matched "//". */ + gfc_next_ascii_char (); + *result = INTRINSIC_CONCAT; + return MATCH_YES; + } + /* Matched "/". */ + *result = INTRINSIC_DIVIDE; + return MATCH_YES; + + case '.': + ch = gfc_next_ascii_char (); + switch (ch) + { + case 'a': + if (gfc_next_ascii_char () == 'n' + && gfc_next_ascii_char () == 'd' + && gfc_next_ascii_char () == '.') + { + /* Matched ".and.". */ + *result = INTRINSIC_AND; + return MATCH_YES; + } + break; + + case 'e': + if (gfc_next_ascii_char () == 'q') + { + ch = gfc_next_ascii_char (); + if (ch == '.') + { + /* Matched ".eq.". */ + *result = INTRINSIC_EQ_OS; + return MATCH_YES; + } + else if (ch == 'v') + { + if (gfc_next_ascii_char () == '.') + { + /* Matched ".eqv.". */ + *result = INTRINSIC_EQV; + return MATCH_YES; + } + } + } + break; + + case 'g': + ch = gfc_next_ascii_char (); + if (ch == 'e') + { + if (gfc_next_ascii_char () == '.') + { + /* Matched ".ge.". */ + *result = INTRINSIC_GE_OS; + return MATCH_YES; + } + } + else if (ch == 't') + { + if (gfc_next_ascii_char () == '.') + { + /* Matched ".gt.". */ + *result = INTRINSIC_GT_OS; + return MATCH_YES; + } + } + break; + + case 'l': + ch = gfc_next_ascii_char (); + if (ch == 'e') + { + if (gfc_next_ascii_char () == '.') + { + /* Matched ".le.". */ + *result = INTRINSIC_LE_OS; + return MATCH_YES; + } + } + else if (ch == 't') + { + if (gfc_next_ascii_char () == '.') + { + /* Matched ".lt.". */ + *result = INTRINSIC_LT_OS; + return MATCH_YES; + } + } + break; + + case 'n': + ch = gfc_next_ascii_char (); + if (ch == 'e') + { + ch = gfc_next_ascii_char (); + if (ch == '.') + { + /* Matched ".ne.". */ + *result = INTRINSIC_NE_OS; + return MATCH_YES; + } + else if (ch == 'q') + { + if (gfc_next_ascii_char () == 'v' + && gfc_next_ascii_char () == '.') + { + /* Matched ".neqv.". */ + *result = INTRINSIC_NEQV; + return MATCH_YES; + } + } + } + else if (ch == 'o') + { + if (gfc_next_ascii_char () == 't' + && gfc_next_ascii_char () == '.') + { + /* Matched ".not.". */ + *result = INTRINSIC_NOT; + return MATCH_YES; + } + } + break; + + case 'o': + if (gfc_next_ascii_char () == 'r' + && gfc_next_ascii_char () == '.') + { + /* Matched ".or.". */ + *result = INTRINSIC_OR; + return MATCH_YES; + } + break; + + default: + break; + } + break; + + default: + break; + } + + gfc_current_locus = orig_loc; + return MATCH_NO; +} + + +/* Match a loop control phrase: + + = , [, ] + + If the final integer expression is not present, a constant unity + expression is returned. We don't return MATCH_ERROR until after + the equals sign is seen. */ + +match +gfc_match_iterator (gfc_iterator *iter, int init_flag) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_expr *var, *e1, *e2, *e3; + locus start; + match m; + + /* Match the start of an iterator without affecting the symbol table. */ + + start = gfc_current_locus; + m = gfc_match (" %n =", name); + gfc_current_locus = start; + + if (m != MATCH_YES) + return MATCH_NO; + + m = gfc_match_variable (&var, 0); + if (m != MATCH_YES) + return MATCH_NO; + + gfc_match_char ('='); + + e1 = e2 = e3 = NULL; + + if (var->ref != NULL) + { + gfc_error ("Loop variable at %C cannot be a sub-component"); + goto cleanup; + } + + if (var->symtree->n.sym->attr.intent == INTENT_IN) + { + gfc_error ("Loop variable '%s' at %C cannot be INTENT(IN)", + var->symtree->n.sym->name); + goto cleanup; + } + + var->symtree->n.sym->attr.implied_index = 1; + + m = init_flag ? gfc_match_init_expr (&e1) : gfc_match_expr (&e1); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + + m = init_flag ? gfc_match_init_expr (&e2) : gfc_match_expr (&e2); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + + if (gfc_match_char (',') != MATCH_YES) + { + e3 = gfc_int_expr (1); + goto done; + } + + m = init_flag ? gfc_match_init_expr (&e3) : gfc_match_expr (&e3); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + { + gfc_error ("Expected a step value in iterator at %C"); + goto cleanup; + } + +done: + iter->var = var; + iter->start = e1; + iter->end = e2; + iter->step = e3; + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in iterator at %C"); + +cleanup: + gfc_free_expr (e1); + gfc_free_expr (e2); + gfc_free_expr (e3); + + return MATCH_ERROR; +} + + +/* Tries to match the next non-whitespace character on the input. + This subroutine does not return MATCH_ERROR. */ + +match +gfc_match_char (char c) +{ + locus where; + + where = gfc_current_locus; + gfc_gobble_whitespace (); + + if (gfc_next_ascii_char () == c) + return MATCH_YES; + + gfc_current_locus = where; + return MATCH_NO; +} + + +/* General purpose matching subroutine. The target string is a + scanf-like format string in which spaces correspond to arbitrary + whitespace (including no whitespace), characters correspond to + themselves. The %-codes are: + + %% Literal percent sign + %e Expression, pointer to a pointer is set + %s Symbol, pointer to the symbol is set + %n Name, character buffer is set to name + %t Matches end of statement. + %o Matches an intrinsic operator, returned as an INTRINSIC enum. + %l Matches a statement label + %v Matches a variable expression (an lvalue) + % Matches a required space (in free form) and optional spaces. */ + +match +gfc_match (const char *target, ...) +{ + gfc_st_label **label; + int matches, *ip; + locus old_loc; + va_list argp; + char c, *np; + match m, n; + void **vp; + const char *p; + + old_loc = gfc_current_locus; + va_start (argp, target); + m = MATCH_NO; + matches = 0; + p = target; + +loop: + c = *p++; + switch (c) + { + case ' ': + gfc_gobble_whitespace (); + goto loop; + case '\0': + m = MATCH_YES; + break; + + case '%': + c = *p++; + switch (c) + { + case 'e': + vp = va_arg (argp, void **); + n = gfc_match_expr ((gfc_expr **) vp); + if (n != MATCH_YES) + { + m = n; + goto not_yes; + } + + matches++; + goto loop; + + case 'v': + vp = va_arg (argp, void **); + n = gfc_match_variable ((gfc_expr **) vp, 0); + if (n != MATCH_YES) + { + m = n; + goto not_yes; + } + + matches++; + goto loop; + + case 's': + vp = va_arg (argp, void **); + n = gfc_match_symbol ((gfc_symbol **) vp, 0); + if (n != MATCH_YES) + { + m = n; + goto not_yes; + } + + matches++; + goto loop; + + case 'n': + np = va_arg (argp, char *); + n = gfc_match_name (np); + if (n != MATCH_YES) + { + m = n; + goto not_yes; + } + + matches++; + goto loop; + + case 'l': + label = va_arg (argp, gfc_st_label **); + n = gfc_match_st_label (label); + if (n != MATCH_YES) + { + m = n; + goto not_yes; + } + + matches++; + goto loop; + + case 'o': + ip = va_arg (argp, int *); + n = gfc_match_intrinsic_op ((gfc_intrinsic_op *) ip); + if (n != MATCH_YES) + { + m = n; + goto not_yes; + } + + matches++; + goto loop; + + case 't': + if (gfc_match_eos () != MATCH_YES) + { + m = MATCH_NO; + goto not_yes; + } + goto loop; + + case ' ': + if (gfc_match_space () == MATCH_YES) + goto loop; + m = MATCH_NO; + goto not_yes; + + case '%': + break; /* Fall through to character matcher. */ + + default: + gfc_internal_error ("gfc_match(): Bad match code %c", c); + } + + default: + + /* gfc_next_ascii_char converts characters to lower-case, so we shouldn't + expect an upper case character here! */ + gcc_assert (TOLOWER (c) == c); + + if (c == gfc_next_ascii_char ()) + goto loop; + break; + } + +not_yes: + va_end (argp); + + if (m != MATCH_YES) + { + /* Clean up after a failed match. */ + gfc_current_locus = old_loc; + va_start (argp, target); + + p = target; + for (; matches > 0; matches--) + { + while (*p++ != '%'); + + switch (*p++) + { + case '%': + matches++; + break; /* Skip. */ + + /* Matches that don't have to be undone */ + case 'o': + case 'l': + case 'n': + case 's': + (void) va_arg (argp, void **); + break; + + case 'e': + case 'v': + vp = va_arg (argp, void **); + gfc_free_expr ((struct gfc_expr *)*vp); + *vp = NULL; + break; + } + } + + va_end (argp); + } + + return m; +} + + +/*********************** Statement level matching **********************/ + +/* Matches the start of a program unit, which is the program keyword + followed by an obligatory symbol. */ + +match +gfc_match_program (void) +{ + gfc_symbol *sym; + match m; + + m = gfc_match ("% %s%t", &sym); + + if (m == MATCH_NO) + { + gfc_error ("Invalid form of PROGRAM statement at %C"); + m = MATCH_ERROR; + } + + if (m == MATCH_ERROR) + return m; + + if (gfc_add_flavor (&sym->attr, FL_PROGRAM, sym->name, NULL) == FAILURE) + return MATCH_ERROR; + + gfc_new_block = sym; + + return MATCH_YES; +} + + +/* Match a simple assignment statement. */ + +match +gfc_match_assignment (void) +{ + gfc_expr *lvalue, *rvalue; + locus old_loc; + match m; + + old_loc = gfc_current_locus; + + lvalue = NULL; + m = gfc_match (" %v =", &lvalue); + if (m != MATCH_YES) + { + gfc_current_locus = old_loc; + gfc_free_expr (lvalue); + return MATCH_NO; + } + + rvalue = NULL; + m = gfc_match (" %e%t", &rvalue); + if (m != MATCH_YES) + { + gfc_current_locus = old_loc; + gfc_free_expr (lvalue); + gfc_free_expr (rvalue); + return m; + } + + gfc_set_sym_referenced (lvalue->symtree->n.sym); + + new_st.op = EXEC_ASSIGN; + new_st.expr = lvalue; + new_st.expr2 = rvalue; + + gfc_check_do_variable (lvalue->symtree); + + return MATCH_YES; +} + + +/* Match a pointer assignment statement. */ + +match +gfc_match_pointer_assignment (void) +{ + gfc_expr *lvalue, *rvalue; + locus old_loc; + match m; + + old_loc = gfc_current_locus; + + lvalue = rvalue = NULL; + gfc_matching_procptr_assignment = 0; + + m = gfc_match (" %v =>", &lvalue); + if (m != MATCH_YES) + { + m = MATCH_NO; + goto cleanup; + } + + if (lvalue->symtree->n.sym->attr.proc_pointer) + gfc_matching_procptr_assignment = 1; + + m = gfc_match (" %e%t", &rvalue); + gfc_matching_procptr_assignment = 0; + if (m != MATCH_YES) + goto cleanup; + + new_st.op = EXEC_POINTER_ASSIGN; + new_st.expr = lvalue; + new_st.expr2 = rvalue; + + return MATCH_YES; + +cleanup: + gfc_current_locus = old_loc; + gfc_free_expr (lvalue); + gfc_free_expr (rvalue); + return m; +} + + +/* We try to match an easy arithmetic IF statement. This only happens + when just after having encountered a simple IF statement. This code + is really duplicate with parts of the gfc_match_if code, but this is + *much* easier. */ + +static match +match_arithmetic_if (void) +{ + gfc_st_label *l1, *l2, *l3; + gfc_expr *expr; + match m; + + m = gfc_match (" ( %e ) %l , %l , %l%t", &expr, &l1, &l2, &l3); + if (m != MATCH_YES) + return m; + + if (gfc_reference_st_label (l1, ST_LABEL_TARGET) == FAILURE + || gfc_reference_st_label (l2, ST_LABEL_TARGET) == FAILURE + || gfc_reference_st_label (l3, ST_LABEL_TARGET) == FAILURE) + { + gfc_free_expr (expr); + return MATCH_ERROR; + } + + if (gfc_notify_std (GFC_STD_F95_OBS, "Obsolescent: arithmetic IF statement " + "at %C") == FAILURE) + return MATCH_ERROR; + + new_st.op = EXEC_ARITHMETIC_IF; + new_st.expr = expr; + new_st.label = l1; + new_st.label2 = l2; + new_st.label3 = l3; + + return MATCH_YES; +} + + +/* The IF statement is a bit of a pain. First of all, there are three + forms of it, the simple IF, the IF that starts a block and the + arithmetic IF. + + There is a problem with the simple IF and that is the fact that we + only have a single level of undo information on symbols. What this + means is for a simple IF, we must re-match the whole IF statement + multiple times in order to guarantee that the symbol table ends up + in the proper state. */ + +static match match_simple_forall (void); +static match match_simple_where (void); + +match +gfc_match_if (gfc_statement *if_type) +{ + gfc_expr *expr; + gfc_st_label *l1, *l2, *l3; + locus old_loc, old_loc2; + gfc_code *p; + match m, n; + + n = gfc_match_label (); + if (n == MATCH_ERROR) + return n; + + old_loc = gfc_current_locus; + + m = gfc_match (" if ( %e", &expr); + if (m != MATCH_YES) + return m; + + old_loc2 = gfc_current_locus; + gfc_current_locus = old_loc; + + if (gfc_match_parens () == MATCH_ERROR) + return MATCH_ERROR; + + gfc_current_locus = old_loc2; + + if (gfc_match_char (')') != MATCH_YES) + { + gfc_error ("Syntax error in IF-expression at %C"); + gfc_free_expr (expr); + return MATCH_ERROR; + } + + m = gfc_match (" %l , %l , %l%t", &l1, &l2, &l3); + + if (m == MATCH_YES) + { + if (n == MATCH_YES) + { + gfc_error ("Block label not appropriate for arithmetic IF " + "statement at %C"); + gfc_free_expr (expr); + return MATCH_ERROR; + } + + if (gfc_reference_st_label (l1, ST_LABEL_TARGET) == FAILURE + || gfc_reference_st_label (l2, ST_LABEL_TARGET) == FAILURE + || gfc_reference_st_label (l3, ST_LABEL_TARGET) == FAILURE) + { + gfc_free_expr (expr); + return MATCH_ERROR; + } + + if (gfc_notify_std (GFC_STD_F95_OBS, "Obsolescent: arithmetic IF " + "statement at %C") == FAILURE) + return MATCH_ERROR; + + new_st.op = EXEC_ARITHMETIC_IF; + new_st.expr = expr; + new_st.label = l1; + new_st.label2 = l2; + new_st.label3 = l3; + + *if_type = ST_ARITHMETIC_IF; + return MATCH_YES; + } + + if (gfc_match (" then%t") == MATCH_YES) + { + new_st.op = EXEC_IF; + new_st.expr = expr; + *if_type = ST_IF_BLOCK; + return MATCH_YES; + } + + if (n == MATCH_YES) + { + gfc_error ("Block label is not appropriate for IF statement at %C"); + gfc_free_expr (expr); + return MATCH_ERROR; + } + + /* At this point the only thing left is a simple IF statement. At + this point, n has to be MATCH_NO, so we don't have to worry about + re-matching a block label. From what we've got so far, try + matching an assignment. */ + + *if_type = ST_SIMPLE_IF; + + m = gfc_match_assignment (); + if (m == MATCH_YES) + goto got_match; + + gfc_free_expr (expr); + gfc_undo_symbols (); + gfc_current_locus = old_loc; + + /* m can be MATCH_NO or MATCH_ERROR, here. For MATCH_ERROR, a mangled + assignment was found. For MATCH_NO, continue to call the various + matchers. */ + if (m == MATCH_ERROR) + return MATCH_ERROR; + + gfc_match (" if ( %e ) ", &expr); /* Guaranteed to match. */ + + m = gfc_match_pointer_assignment (); + if (m == MATCH_YES) + goto got_match; + + gfc_free_expr (expr); + gfc_undo_symbols (); + gfc_current_locus = old_loc; + + gfc_match (" if ( %e ) ", &expr); /* Guaranteed to match. */ + + /* Look at the next keyword to see which matcher to call. Matching + the keyword doesn't affect the symbol table, so we don't have to + restore between tries. */ + +#define match(string, subr, statement) \ + if (gfc_match(string) == MATCH_YES) { m = subr(); goto got_match; } + + gfc_clear_error (); + + match ("allocate", gfc_match_allocate, ST_ALLOCATE) + match ("assign", gfc_match_assign, ST_LABEL_ASSIGNMENT) + match ("backspace", gfc_match_backspace, ST_BACKSPACE) + match ("call", gfc_match_call, ST_CALL) + match ("close", gfc_match_close, ST_CLOSE) + match ("continue", gfc_match_continue, ST_CONTINUE) + match ("cycle", gfc_match_cycle, ST_CYCLE) + match ("deallocate", gfc_match_deallocate, ST_DEALLOCATE) + match ("end file", gfc_match_endfile, ST_END_FILE) + match ("exit", gfc_match_exit, ST_EXIT) + match ("flush", gfc_match_flush, ST_FLUSH) + match ("forall", match_simple_forall, ST_FORALL) + match ("go to", gfc_match_goto, ST_GOTO) + match ("if", match_arithmetic_if, ST_ARITHMETIC_IF) + match ("inquire", gfc_match_inquire, ST_INQUIRE) + match ("nullify", gfc_match_nullify, ST_NULLIFY) + match ("open", gfc_match_open, ST_OPEN) + match ("pause", gfc_match_pause, ST_NONE) + match ("print", gfc_match_print, ST_WRITE) + match ("read", gfc_match_read, ST_READ) + match ("return", gfc_match_return, ST_RETURN) + match ("rewind", gfc_match_rewind, ST_REWIND) + match ("stop", gfc_match_stop, ST_STOP) + match ("wait", gfc_match_wait, ST_WAIT) + match ("where", match_simple_where, ST_WHERE) + match ("write", gfc_match_write, ST_WRITE) + + /* The gfc_match_assignment() above may have returned a MATCH_NO + where the assignment was to a named constant. Check that + special case here. */ + m = gfc_match_assignment (); + if (m == MATCH_NO) + { + gfc_error ("Cannot assign to a named constant at %C"); + gfc_free_expr (expr); + gfc_undo_symbols (); + gfc_current_locus = old_loc; + return MATCH_ERROR; + } + + /* All else has failed, so give up. See if any of the matchers has + stored an error message of some sort. */ + if (gfc_error_check () == 0) + gfc_error ("Unclassifiable statement in IF-clause at %C"); + + gfc_free_expr (expr); + return MATCH_ERROR; + +got_match: + if (m == MATCH_NO) + gfc_error ("Syntax error in IF-clause at %C"); + if (m != MATCH_YES) + { + gfc_free_expr (expr); + return MATCH_ERROR; + } + + /* At this point, we've matched the single IF and the action clause + is in new_st. Rearrange things so that the IF statement appears + in new_st. */ + + p = gfc_get_code (); + p->next = gfc_get_code (); + *p->next = new_st; + p->next->loc = gfc_current_locus; + + p->expr = expr; + p->op = EXEC_IF; + + gfc_clear_new_st (); + + new_st.op = EXEC_IF; + new_st.block = p; + + return MATCH_YES; +} + +#undef match + + +/* Match an ELSE statement. */ + +match +gfc_match_else (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + + if (gfc_match_eos () == MATCH_YES) + return MATCH_YES; + + if (gfc_match_name (name) != MATCH_YES + || gfc_current_block () == NULL + || gfc_match_eos () != MATCH_YES) + { + gfc_error ("Unexpected junk after ELSE statement at %C"); + return MATCH_ERROR; + } + + if (strcmp (name, gfc_current_block ()->name) != 0) + { + gfc_error ("Label '%s' at %C doesn't match IF label '%s'", + name, gfc_current_block ()->name); + return MATCH_ERROR; + } + + return MATCH_YES; +} + + +/* Match an ELSE IF statement. */ + +match +gfc_match_elseif (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_expr *expr; + match m; + + m = gfc_match (" ( %e ) then", &expr); + if (m != MATCH_YES) + return m; + + if (gfc_match_eos () == MATCH_YES) + goto done; + + if (gfc_match_name (name) != MATCH_YES + || gfc_current_block () == NULL + || gfc_match_eos () != MATCH_YES) + { + gfc_error ("Unexpected junk after ELSE IF statement at %C"); + goto cleanup; + } + + if (strcmp (name, gfc_current_block ()->name) != 0) + { + gfc_error ("Label '%s' at %C doesn't match IF label '%s'", + name, gfc_current_block ()->name); + goto cleanup; + } + +done: + new_st.op = EXEC_IF; + new_st.expr = expr; + return MATCH_YES; + +cleanup: + gfc_free_expr (expr); + return MATCH_ERROR; +} + + +/* Free a gfc_iterator structure. */ + +void +gfc_free_iterator (gfc_iterator *iter, int flag) +{ + + if (iter == NULL) + return; + + gfc_free_expr (iter->var); + gfc_free_expr (iter->start); + gfc_free_expr (iter->end); + gfc_free_expr (iter->step); + + if (flag) + gfc_free (iter); +} + + +/* Match a DO statement. */ + +match +gfc_match_do (void) +{ + gfc_iterator iter, *ip; + locus old_loc; + gfc_st_label *label; + match m; + + old_loc = gfc_current_locus; + + label = NULL; + iter.var = iter.start = iter.end = iter.step = NULL; + + m = gfc_match_label (); + if (m == MATCH_ERROR) + return m; + + if (gfc_match (" do") != MATCH_YES) + return MATCH_NO; + + m = gfc_match_st_label (&label); + if (m == MATCH_ERROR) + goto cleanup; + + /* Match an infinite DO, make it like a DO WHILE(.TRUE.). */ + + if (gfc_match_eos () == MATCH_YES) + { + iter.end = gfc_logical_expr (1, NULL); + new_st.op = EXEC_DO_WHILE; + goto done; + } + + /* Match an optional comma, if no comma is found, a space is obligatory. */ + if (gfc_match_char (',') != MATCH_YES && gfc_match ("% ") != MATCH_YES) + return MATCH_NO; + + /* Check for balanced parens. */ + + if (gfc_match_parens () == MATCH_ERROR) + return MATCH_ERROR; + + /* See if we have a DO WHILE. */ + if (gfc_match (" while ( %e )%t", &iter.end) == MATCH_YES) + { + new_st.op = EXEC_DO_WHILE; + goto done; + } + + /* The abortive DO WHILE may have done something to the symbol + table, so we start over. */ + gfc_undo_symbols (); + gfc_current_locus = old_loc; + + gfc_match_label (); /* This won't error. */ + gfc_match (" do "); /* This will work. */ + + gfc_match_st_label (&label); /* Can't error out. */ + gfc_match_char (','); /* Optional comma. */ + + m = gfc_match_iterator (&iter, 0); + if (m == MATCH_NO) + return MATCH_NO; + if (m == MATCH_ERROR) + goto cleanup; + + iter.var->symtree->n.sym->attr.implied_index = 0; + gfc_check_do_variable (iter.var->symtree); + + if (gfc_match_eos () != MATCH_YES) + { + gfc_syntax_error (ST_DO); + goto cleanup; + } + + new_st.op = EXEC_DO; + +done: + if (label != NULL + && gfc_reference_st_label (label, ST_LABEL_TARGET) == FAILURE) + goto cleanup; + + new_st.label = label; + + if (new_st.op == EXEC_DO_WHILE) + new_st.expr = iter.end; + else + { + new_st.ext.iterator = ip = gfc_get_iterator (); + *ip = iter; + } + + return MATCH_YES; + +cleanup: + gfc_free_iterator (&iter, 0); + + return MATCH_ERROR; +} + + +/* Match an EXIT or CYCLE statement. */ + +static match +match_exit_cycle (gfc_statement st, gfc_exec_op op) +{ + gfc_state_data *p, *o; + gfc_symbol *sym; + match m; + + if (gfc_match_eos () == MATCH_YES) + sym = NULL; + else + { + m = gfc_match ("% %s%t", &sym); + if (m == MATCH_ERROR) + return MATCH_ERROR; + if (m == MATCH_NO) + { + gfc_syntax_error (st); + return MATCH_ERROR; + } + + if (sym->attr.flavor != FL_LABEL) + { + gfc_error ("Name '%s' in %s statement at %C is not a loop name", + sym->name, gfc_ascii_statement (st)); + return MATCH_ERROR; + } + } + + /* Find the loop mentioned specified by the label (or lack of a label). */ + for (o = NULL, p = gfc_state_stack; p; p = p->previous) + if (p->state == COMP_DO && (sym == NULL || sym == p->sym)) + break; + else if (o == NULL && p->state == COMP_OMP_STRUCTURED_BLOCK) + o = p; + + if (p == NULL) + { + if (sym == NULL) + gfc_error ("%s statement at %C is not within a loop", + gfc_ascii_statement (st)); + else + gfc_error ("%s statement at %C is not within loop '%s'", + gfc_ascii_statement (st), sym->name); + + return MATCH_ERROR; + } + + if (o != NULL) + { + gfc_error ("%s statement at %C leaving OpenMP structured block", + gfc_ascii_statement (st)); + return MATCH_ERROR; + } + else if (st == ST_EXIT + && p->previous != NULL + && p->previous->state == COMP_OMP_STRUCTURED_BLOCK + && (p->previous->head->op == EXEC_OMP_DO + || p->previous->head->op == EXEC_OMP_PARALLEL_DO)) + { + gcc_assert (p->previous->head->next != NULL); + gcc_assert (p->previous->head->next->op == EXEC_DO + || p->previous->head->next->op == EXEC_DO_WHILE); + gfc_error ("EXIT statement at %C terminating !$OMP DO loop"); + return MATCH_ERROR; + } + + /* Save the first statement in the loop - needed by the backend. */ + new_st.ext.whichloop = p->head; + + new_st.op = op; + + return MATCH_YES; +} + + +/* Match the EXIT statement. */ + +match +gfc_match_exit (void) +{ + return match_exit_cycle (ST_EXIT, EXEC_EXIT); +} + + +/* Match the CYCLE statement. */ + +match +gfc_match_cycle (void) +{ + return match_exit_cycle (ST_CYCLE, EXEC_CYCLE); +} + + +/* Match a number or character constant after a STOP or PAUSE statement. */ + +static match +gfc_match_stopcode (gfc_statement st) +{ + int stop_code; + gfc_expr *e; + match m; + int cnt; + + stop_code = -1; + e = NULL; + + if (gfc_match_eos () != MATCH_YES) + { + m = gfc_match_small_literal_int (&stop_code, &cnt); + if (m == MATCH_ERROR) + goto cleanup; + + if (m == MATCH_YES && cnt > 5) + { + gfc_error ("Too many digits in STOP code at %C"); + goto cleanup; + } + + if (m == MATCH_NO) + { + /* Try a character constant. */ + m = gfc_match_expr (&e); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + if (e->ts.type != BT_CHARACTER || e->expr_type != EXPR_CONSTANT) + goto syntax; + } + + if (gfc_match_eos () != MATCH_YES) + goto syntax; + } + + if (gfc_pure (NULL)) + { + gfc_error ("%s statement not allowed in PURE procedure at %C", + gfc_ascii_statement (st)); + goto cleanup; + } + + new_st.op = st == ST_STOP ? EXEC_STOP : EXEC_PAUSE; + new_st.expr = e; + new_st.ext.stop_code = stop_code; + + return MATCH_YES; + +syntax: + gfc_syntax_error (st); + +cleanup: + + gfc_free_expr (e); + return MATCH_ERROR; +} + + +/* Match the (deprecated) PAUSE statement. */ + +match +gfc_match_pause (void) +{ + match m; + + m = gfc_match_stopcode (ST_PAUSE); + if (m == MATCH_YES) + { + if (gfc_notify_std (GFC_STD_F95_DEL, "Deleted feature: PAUSE statement" + " at %C") + == FAILURE) + m = MATCH_ERROR; + } + return m; +} + + +/* Match the STOP statement. */ + +match +gfc_match_stop (void) +{ + return gfc_match_stopcode (ST_STOP); +} + + +/* Match a CONTINUE statement. */ + +match +gfc_match_continue (void) +{ + if (gfc_match_eos () != MATCH_YES) + { + gfc_syntax_error (ST_CONTINUE); + return MATCH_ERROR; + } + + new_st.op = EXEC_CONTINUE; + return MATCH_YES; +} + + +/* Match the (deprecated) ASSIGN statement. */ + +match +gfc_match_assign (void) +{ + gfc_expr *expr; + gfc_st_label *label; + + if (gfc_match (" %l", &label) == MATCH_YES) + { + if (gfc_reference_st_label (label, ST_LABEL_UNKNOWN) == FAILURE) + return MATCH_ERROR; + if (gfc_match (" to %v%t", &expr) == MATCH_YES) + { + if (gfc_notify_std (GFC_STD_F95_DEL, "Deleted feature: ASSIGN " + "statement at %C") + == FAILURE) + return MATCH_ERROR; + + expr->symtree->n.sym->attr.assign = 1; + + new_st.op = EXEC_LABEL_ASSIGN; + new_st.label = label; + new_st.expr = expr; + return MATCH_YES; + } + } + return MATCH_NO; +} + + +/* Match the GO TO statement. As a computed GOTO statement is + matched, it is transformed into an equivalent SELECT block. No + tree is necessary, and the resulting jumps-to-jumps are + specifically optimized away by the back end. */ + +match +gfc_match_goto (void) +{ + gfc_code *head, *tail; + gfc_expr *expr; + gfc_case *cp; + gfc_st_label *label; + int i; + match m; + + if (gfc_match (" %l%t", &label) == MATCH_YES) + { + if (gfc_reference_st_label (label, ST_LABEL_TARGET) == FAILURE) + return MATCH_ERROR; + + new_st.op = EXEC_GOTO; + new_st.label = label; + return MATCH_YES; + } + + /* The assigned GO TO statement. */ + + if (gfc_match_variable (&expr, 0) == MATCH_YES) + { + if (gfc_notify_std (GFC_STD_F95_DEL, "Deleted feature: Assigned GOTO " + "statement at %C") + == FAILURE) + return MATCH_ERROR; + + new_st.op = EXEC_GOTO; + new_st.expr = expr; + + if (gfc_match_eos () == MATCH_YES) + return MATCH_YES; + + /* Match label list. */ + gfc_match_char (','); + if (gfc_match_char ('(') != MATCH_YES) + { + gfc_syntax_error (ST_GOTO); + return MATCH_ERROR; + } + head = tail = NULL; + + do + { + m = gfc_match_st_label (&label); + if (m != MATCH_YES) + goto syntax; + + if (gfc_reference_st_label (label, ST_LABEL_TARGET) == FAILURE) + goto cleanup; + + if (head == NULL) + head = tail = gfc_get_code (); + else + { + tail->block = gfc_get_code (); + tail = tail->block; + } + + tail->label = label; + tail->op = EXEC_GOTO; + } + while (gfc_match_char (',') == MATCH_YES); + + if (gfc_match (")%t") != MATCH_YES) + goto syntax; + + if (head == NULL) + { + gfc_error ("Statement label list in GOTO at %C cannot be empty"); + goto syntax; + } + new_st.block = head; + + return MATCH_YES; + } + + /* Last chance is a computed GO TO statement. */ + if (gfc_match_char ('(') != MATCH_YES) + { + gfc_syntax_error (ST_GOTO); + return MATCH_ERROR; + } + + head = tail = NULL; + i = 1; + + do + { + m = gfc_match_st_label (&label); + if (m != MATCH_YES) + goto syntax; + + if (gfc_reference_st_label (label, ST_LABEL_TARGET) == FAILURE) + goto cleanup; + + if (head == NULL) + head = tail = gfc_get_code (); + else + { + tail->block = gfc_get_code (); + tail = tail->block; + } + + cp = gfc_get_case (); + cp->low = cp->high = gfc_int_expr (i++); + + tail->op = EXEC_SELECT; + tail->ext.case_list = cp; + + tail->next = gfc_get_code (); + tail->next->op = EXEC_GOTO; + tail->next->label = label; + } + while (gfc_match_char (',') == MATCH_YES); + + if (gfc_match_char (')') != MATCH_YES) + goto syntax; + + if (head == NULL) + { + gfc_error ("Statement label list in GOTO at %C cannot be empty"); + goto syntax; + } + + /* Get the rest of the statement. */ + gfc_match_char (','); + + if (gfc_match (" %e%t", &expr) != MATCH_YES) + goto syntax; + + /* At this point, a computed GOTO has been fully matched and an + equivalent SELECT statement constructed. */ + + new_st.op = EXEC_SELECT; + new_st.expr = NULL; + + /* Hack: For a "real" SELECT, the expression is in expr. We put + it in expr2 so we can distinguish then and produce the correct + diagnostics. */ + new_st.expr2 = expr; + new_st.block = head; + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_GOTO); +cleanup: + gfc_free_statements (head); + return MATCH_ERROR; +} + + +/* Frees a list of gfc_alloc structures. */ + +void +gfc_free_alloc_list (gfc_alloc *p) +{ + gfc_alloc *q; + + for (; p; p = q) + { + q = p->next; + gfc_free_expr (p->expr); + gfc_free (p); + } +} + + +/* Match an ALLOCATE statement. */ + +match +gfc_match_allocate (void) +{ + gfc_alloc *head, *tail; + gfc_expr *stat; + match m; + + head = tail = NULL; + stat = NULL; + + if (gfc_match_char ('(') != MATCH_YES) + goto syntax; + + for (;;) + { + if (head == NULL) + head = tail = gfc_get_alloc (); + else + { + tail->next = gfc_get_alloc (); + tail = tail->next; + } + + m = gfc_match_variable (&tail->expr, 0); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + + if (gfc_check_do_variable (tail->expr->symtree)) + goto cleanup; + + if (gfc_pure (NULL) + && gfc_impure_variable (tail->expr->symtree->n.sym)) + { + gfc_error ("Bad allocate-object in ALLOCATE statement at %C for a " + "PURE procedure"); + goto cleanup; + } + + if (tail->expr->ts.type == BT_DERIVED) + tail->expr->ts.derived = gfc_use_derived (tail->expr->ts.derived); + + if (gfc_match_char (',') != MATCH_YES) + break; + + m = gfc_match (" stat = %v", &stat); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_YES) + break; + } + + if (stat != NULL) + gfc_check_do_variable(stat->symtree); + + if (gfc_match (" )%t") != MATCH_YES) + goto syntax; + + new_st.op = EXEC_ALLOCATE; + new_st.expr = stat; + new_st.ext.alloc_list = head; + + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_ALLOCATE); + +cleanup: + gfc_free_expr (stat); + gfc_free_alloc_list (head); + return MATCH_ERROR; +} + + +/* Match a NULLIFY statement. A NULLIFY statement is transformed into + a set of pointer assignments to intrinsic NULL(). */ + +match +gfc_match_nullify (void) +{ + gfc_code *tail; + gfc_expr *e, *p; + match m; + + tail = NULL; + + if (gfc_match_char ('(') != MATCH_YES) + goto syntax; + + for (;;) + { + m = gfc_match_variable (&p, 0); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + + if (gfc_check_do_variable (p->symtree)) + goto cleanup; + + if (gfc_pure (NULL) && gfc_impure_variable (p->symtree->n.sym)) + { + gfc_error ("Illegal variable in NULLIFY at %C for a PURE procedure"); + goto cleanup; + } + + /* build ' => NULL() '. */ + e = gfc_get_expr (); + e->where = gfc_current_locus; + e->expr_type = EXPR_NULL; + e->ts.type = BT_UNKNOWN; + + /* Chain to list. */ + if (tail == NULL) + tail = &new_st; + else + { + tail->next = gfc_get_code (); + tail = tail->next; + } + + tail->op = EXEC_POINTER_ASSIGN; + tail->expr = p; + tail->expr2 = e; + + if (gfc_match (" )%t") == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_NULLIFY); + +cleanup: + gfc_free_statements (new_st.next); + return MATCH_ERROR; +} + + +/* Match a DEALLOCATE statement. */ + +match +gfc_match_deallocate (void) +{ + gfc_alloc *head, *tail; + gfc_expr *stat; + match m; + + head = tail = NULL; + stat = NULL; + + if (gfc_match_char ('(') != MATCH_YES) + goto syntax; + + for (;;) + { + if (head == NULL) + head = tail = gfc_get_alloc (); + else + { + tail->next = gfc_get_alloc (); + tail = tail->next; + } + + m = gfc_match_variable (&tail->expr, 0); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + + if (gfc_check_do_variable (tail->expr->symtree)) + goto cleanup; + + if (gfc_pure (NULL) + && gfc_impure_variable (tail->expr->symtree->n.sym)) + { + gfc_error ("Illegal deallocate-expression in DEALLOCATE at %C " + "for a PURE procedure"); + goto cleanup; + } + + if (gfc_match_char (',') != MATCH_YES) + break; + + m = gfc_match (" stat = %v", &stat); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_YES) + break; + } + + if (stat != NULL) + gfc_check_do_variable(stat->symtree); + + if (gfc_match (" )%t") != MATCH_YES) + goto syntax; + + new_st.op = EXEC_DEALLOCATE; + new_st.expr = stat; + new_st.ext.alloc_list = head; + + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_DEALLOCATE); + +cleanup: + gfc_free_expr (stat); + gfc_free_alloc_list (head); + return MATCH_ERROR; +} + + +/* Match a RETURN statement. */ + +match +gfc_match_return (void) +{ + gfc_expr *e; + match m; + gfc_compile_state s; + + e = NULL; + if (gfc_match_eos () == MATCH_YES) + goto done; + + if (gfc_find_state (COMP_SUBROUTINE) == FAILURE) + { + gfc_error ("Alternate RETURN statement at %C is only allowed within " + "a SUBROUTINE"); + goto cleanup; + } + + if (gfc_current_form == FORM_FREE) + { + /* The following are valid, so we can't require a blank after the + RETURN keyword: + return+1 + return(1) */ + char c = gfc_peek_ascii_char (); + if (ISALPHA (c) || ISDIGIT (c)) + return MATCH_NO; + } + + m = gfc_match (" %e%t", &e); + if (m == MATCH_YES) + goto done; + if (m == MATCH_ERROR) + goto cleanup; + + gfc_syntax_error (ST_RETURN); + +cleanup: + gfc_free_expr (e); + return MATCH_ERROR; + +done: + gfc_enclosing_unit (&s); + if (s == COMP_PROGRAM + && gfc_notify_std (GFC_STD_GNU, "Extension: RETURN statement in " + "main program at %C") == FAILURE) + return MATCH_ERROR; + + new_st.op = EXEC_RETURN; + new_st.expr = e; + + return MATCH_YES; +} + + +/* Match the call of a type-bound procedure, if CALL%var has already been + matched and var found to be a derived-type variable. */ + +static match +match_typebound_call (gfc_symtree* varst) +{ + gfc_symbol* var; + gfc_expr* base; + match m; + + var = varst->n.sym; + + base = gfc_get_expr (); + base->expr_type = EXPR_VARIABLE; + base->symtree = varst; + base->where = gfc_current_locus; + gfc_set_sym_referenced (varst->n.sym); + + m = gfc_match_varspec (base, 0, true); + if (m == MATCH_NO) + gfc_error ("Expected component reference at %C"); + if (m != MATCH_YES) + return MATCH_ERROR; + + if (gfc_match_eos () != MATCH_YES) + { + gfc_error ("Junk after CALL at %C"); + return MATCH_ERROR; + } + + if (base->expr_type != EXPR_COMPCALL) + { + gfc_error ("Expected type-bound procedure reference at %C"); + return MATCH_ERROR; + } + + new_st.op = EXEC_COMPCALL; + new_st.expr = base; + + return MATCH_YES; +} + + +/* Match a CALL statement. The tricky part here are possible + alternate return specifiers. We handle these by having all + "subroutines" actually return an integer via a register that gives + the return number. If the call specifies alternate returns, we + generate code for a SELECT statement whose case clauses contain + GOTOs to the various labels. */ + +match +gfc_match_call (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_actual_arglist *a, *arglist; + gfc_case *new_case; + gfc_symbol *sym; + gfc_symtree *st; + gfc_code *c; + match m; + int i; + + arglist = NULL; + + m = gfc_match ("% %n", name); + if (m == MATCH_NO) + goto syntax; + if (m != MATCH_YES) + return m; + + if (gfc_get_ha_sym_tree (name, &st)) + return MATCH_ERROR; + + sym = st->n.sym; + + /* If this is a variable of derived-type, it probably starts a type-bound + procedure call. */ + if (sym->attr.flavor != FL_PROCEDURE && sym->ts.type == BT_DERIVED) + return match_typebound_call (st); + + /* If it does not seem to be callable (include functions so that the + right association is made. They are thrown out in resolution.) + ... */ + if (!sym->attr.generic + && !sym->attr.subroutine + && !sym->attr.function) + { + if (!(sym->attr.external && !sym->attr.referenced)) + { + /* ...create a symbol in this scope... */ + if (sym->ns != gfc_current_ns + && gfc_get_sym_tree (name, NULL, &st) == 1) + return MATCH_ERROR; + + if (sym != st->n.sym) + sym = st->n.sym; + } + + /* ...and then to try to make the symbol into a subroutine. */ + if (gfc_add_subroutine (&sym->attr, sym->name, NULL) == FAILURE) + return MATCH_ERROR; + } + + gfc_set_sym_referenced (sym); + + if (gfc_match_eos () != MATCH_YES) + { + m = gfc_match_actual_arglist (1, &arglist); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + + if (gfc_match_eos () != MATCH_YES) + goto syntax; + } + + /* If any alternate return labels were found, construct a SELECT + statement that will jump to the right place. */ + + i = 0; + for (a = arglist; a; a = a->next) + if (a->expr == NULL) + i = 1; + + if (i) + { + gfc_symtree *select_st; + gfc_symbol *select_sym; + char name[GFC_MAX_SYMBOL_LEN + 1]; + + new_st.next = c = gfc_get_code (); + c->op = EXEC_SELECT; + sprintf (name, "_result_%s", sym->name); + gfc_get_ha_sym_tree (name, &select_st); /* Can't fail. */ + + select_sym = select_st->n.sym; + select_sym->ts.type = BT_INTEGER; + select_sym->ts.kind = gfc_default_integer_kind; + gfc_set_sym_referenced (select_sym); + c->expr = gfc_get_expr (); + c->expr->expr_type = EXPR_VARIABLE; + c->expr->symtree = select_st; + c->expr->ts = select_sym->ts; + c->expr->where = gfc_current_locus; + + i = 0; + for (a = arglist; a; a = a->next) + { + if (a->expr != NULL) + continue; + + if (gfc_reference_st_label (a->label, ST_LABEL_TARGET) == FAILURE) + continue; + + i++; + + c->block = gfc_get_code (); + c = c->block; + c->op = EXEC_SELECT; + + new_case = gfc_get_case (); + new_case->high = new_case->low = gfc_int_expr (i); + c->ext.case_list = new_case; + + c->next = gfc_get_code (); + c->next->op = EXEC_GOTO; + c->next->label = a->label; + } + } + + new_st.op = EXEC_CALL; + new_st.symtree = st; + new_st.ext.actual = arglist; + + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_CALL); + +cleanup: + gfc_free_actual_arglist (arglist); + return MATCH_ERROR; +} + + +/* Given a name, return a pointer to the common head structure, + creating it if it does not exist. If FROM_MODULE is nonzero, we + mangle the name so that it doesn't interfere with commons defined + in the using namespace. + TODO: Add to global symbol tree. */ + +gfc_common_head * +gfc_get_common (const char *name, int from_module) +{ + gfc_symtree *st; + static int serial = 0; + char mangled_name[GFC_MAX_SYMBOL_LEN + 1]; + + if (from_module) + { + /* A use associated common block is only needed to correctly layout + the variables it contains. */ + snprintf (mangled_name, GFC_MAX_SYMBOL_LEN, "_%d_%s", serial++, name); + st = gfc_new_symtree (&gfc_current_ns->common_root, mangled_name); + } + else + { + st = gfc_find_symtree (gfc_current_ns->common_root, name); + + if (st == NULL) + st = gfc_new_symtree (&gfc_current_ns->common_root, name); + } + + if (st->n.common == NULL) + { + st->n.common = gfc_get_common_head (); + st->n.common->where = gfc_current_locus; + strcpy (st->n.common->name, name); + } + + return st->n.common; +} + + +/* Match a common block name. */ + +match match_common_name (char *name) +{ + match m; + + if (gfc_match_char ('/') == MATCH_NO) + { + name[0] = '\0'; + return MATCH_YES; + } + + if (gfc_match_char ('/') == MATCH_YES) + { + name[0] = '\0'; + return MATCH_YES; + } + + m = gfc_match_name (name); + + if (m == MATCH_ERROR) + return MATCH_ERROR; + if (m == MATCH_YES && gfc_match_char ('/') == MATCH_YES) + return MATCH_YES; + + gfc_error ("Syntax error in common block name at %C"); + return MATCH_ERROR; +} + + +/* Match a COMMON statement. */ + +match +gfc_match_common (void) +{ + gfc_symbol *sym, **head, *tail, *other, *old_blank_common; + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_common_head *t; + gfc_array_spec *as; + gfc_equiv *e1, *e2; + match m; + gfc_gsymbol *gsym; + + old_blank_common = gfc_current_ns->blank_common.head; + if (old_blank_common) + { + while (old_blank_common->common_next) + old_blank_common = old_blank_common->common_next; + } + + as = NULL; + + for (;;) + { + m = match_common_name (name); + if (m == MATCH_ERROR) + goto cleanup; + + gsym = gfc_get_gsymbol (name); + if (gsym->type != GSYM_UNKNOWN && gsym->type != GSYM_COMMON) + { + gfc_error ("Symbol '%s' at %C is already an external symbol that " + "is not COMMON", name); + goto cleanup; + } + + if (gsym->type == GSYM_UNKNOWN) + { + gsym->type = GSYM_COMMON; + gsym->where = gfc_current_locus; + gsym->defined = 1; + } + + gsym->used = 1; + + if (name[0] == '\0') + { + t = &gfc_current_ns->blank_common; + if (t->head == NULL) + t->where = gfc_current_locus; + } + else + { + t = gfc_get_common (name, 0); + } + head = &t->head; + + if (*head == NULL) + tail = NULL; + else + { + tail = *head; + while (tail->common_next) + tail = tail->common_next; + } + + /* Grab the list of symbols. */ + for (;;) + { + m = gfc_match_symbol (&sym, 0); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + + /* Store a ref to the common block for error checking. */ + sym->common_block = t; + + /* See if we know the current common block is bind(c), and if + so, then see if we can check if the symbol is (which it'll + need to be). This can happen if the bind(c) attr stmt was + applied to the common block, and the variable(s) already + defined, before declaring the common block. */ + if (t->is_bind_c == 1) + { + if (sym->ts.type != BT_UNKNOWN && sym->ts.is_c_interop != 1) + { + /* If we find an error, just print it and continue, + cause it's just semantic, and we can see if there + are more errors. */ + gfc_error_now ("Variable '%s' at %L in common block '%s' " + "at %C must be declared with a C " + "interoperable kind since common block " + "'%s' is bind(c)", + sym->name, &(sym->declared_at), t->name, + t->name); + } + + if (sym->attr.is_bind_c == 1) + gfc_error_now ("Variable '%s' in common block " + "'%s' at %C can not be bind(c) since " + "it is not global", sym->name, t->name); + } + + if (sym->attr.in_common) + { + gfc_error ("Symbol '%s' at %C is already in a COMMON block", + sym->name); + goto cleanup; + } + + if (((sym->value != NULL && sym->value->expr_type != EXPR_NULL) + || sym->attr.data) && gfc_current_state () != COMP_BLOCK_DATA) + { + if (gfc_notify_std (GFC_STD_GNU, "Initialized symbol '%s' at %C " + "can only be COMMON in " + "BLOCK DATA", sym->name) + == FAILURE) + goto cleanup; + } + + if (gfc_add_in_common (&sym->attr, sym->name, NULL) == FAILURE) + goto cleanup; + + if (tail != NULL) + tail->common_next = sym; + else + *head = sym; + + tail = sym; + + /* Deal with an optional array specification after the + symbol name. */ + m = gfc_match_array_spec (&as); + if (m == MATCH_ERROR) + goto cleanup; + + if (m == MATCH_YES) + { + if (as->type != AS_EXPLICIT) + { + gfc_error ("Array specification for symbol '%s' in COMMON " + "at %C must be explicit", sym->name); + goto cleanup; + } + + if (gfc_add_dimension (&sym->attr, sym->name, NULL) == FAILURE) + goto cleanup; + + if (sym->attr.pointer) + { + gfc_error ("Symbol '%s' in COMMON at %C cannot be a " + "POINTER array", sym->name); + goto cleanup; + } + + sym->as = as; + as = NULL; + + } + + sym->common_head = t; + + /* Check to see if the symbol is already in an equivalence group. + If it is, set the other members as being in common. */ + if (sym->attr.in_equivalence) + { + for (e1 = gfc_current_ns->equiv; e1; e1 = e1->next) + { + for (e2 = e1; e2; e2 = e2->eq) + if (e2->expr->symtree->n.sym == sym) + goto equiv_found; + + continue; + + equiv_found: + + for (e2 = e1; e2; e2 = e2->eq) + { + other = e2->expr->symtree->n.sym; + if (other->common_head + && other->common_head != sym->common_head) + { + gfc_error ("Symbol '%s', in COMMON block '%s' at " + "%C is being indirectly equivalenced to " + "another COMMON block '%s'", + sym->name, sym->common_head->name, + other->common_head->name); + goto cleanup; + } + other->attr.in_common = 1; + other->common_head = t; + } + } + } + + + gfc_gobble_whitespace (); + if (gfc_match_eos () == MATCH_YES) + goto done; + if (gfc_peek_ascii_char () == '/') + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + gfc_gobble_whitespace (); + if (gfc_peek_ascii_char () == '/') + break; + } + } + +done: + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_COMMON); + +cleanup: + if (old_blank_common) + old_blank_common->common_next = NULL; + else + gfc_current_ns->blank_common.head = NULL; + gfc_free_array_spec (as); + return MATCH_ERROR; +} + + +/* Match a BLOCK DATA program unit. */ + +match +gfc_match_block_data (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_symbol *sym; + match m; + + if (gfc_match_eos () == MATCH_YES) + { + gfc_new_block = NULL; + return MATCH_YES; + } + + m = gfc_match ("% %n%t", name); + if (m != MATCH_YES) + return MATCH_ERROR; + + if (gfc_get_symbol (name, NULL, &sym)) + return MATCH_ERROR; + + if (gfc_add_flavor (&sym->attr, FL_BLOCK_DATA, sym->name, NULL) == FAILURE) + return MATCH_ERROR; + + gfc_new_block = sym; + + return MATCH_YES; +} + + +/* Free a namelist structure. */ + +void +gfc_free_namelist (gfc_namelist *name) +{ + gfc_namelist *n; + + for (; name; name = n) + { + n = name->next; + gfc_free (name); + } +} + + +/* Match a NAMELIST statement. */ + +match +gfc_match_namelist (void) +{ + gfc_symbol *group_name, *sym; + gfc_namelist *nl; + match m, m2; + + m = gfc_match (" / %s /", &group_name); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto error; + + for (;;) + { + if (group_name->ts.type != BT_UNKNOWN) + { + gfc_error ("Namelist group name '%s' at %C already has a basic " + "type of %s", group_name->name, + gfc_typename (&group_name->ts)); + return MATCH_ERROR; + } + + if (group_name->attr.flavor == FL_NAMELIST + && group_name->attr.use_assoc + && gfc_notify_std (GFC_STD_GNU, "Namelist group name '%s' " + "at %C already is USE associated and can" + "not be respecified.", group_name->name) + == FAILURE) + return MATCH_ERROR; + + if (group_name->attr.flavor != FL_NAMELIST + && gfc_add_flavor (&group_name->attr, FL_NAMELIST, + group_name->name, NULL) == FAILURE) + return MATCH_ERROR; + + for (;;) + { + m = gfc_match_symbol (&sym, 1); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto error; + + if (sym->attr.in_namelist == 0 + && gfc_add_in_namelist (&sym->attr, sym->name, NULL) == FAILURE) + goto error; + + /* Use gfc_error_check here, rather than goto error, so that + these are the only errors for the next two lines. */ + if (sym->as && sym->as->type == AS_ASSUMED_SIZE) + { + gfc_error ("Assumed size array '%s' in namelist '%s' at " + "%C is not allowed", sym->name, group_name->name); + gfc_error_check (); + } + + if (sym->ts.type == BT_CHARACTER && sym->ts.cl->length == NULL) + { + gfc_error ("Assumed character length '%s' in namelist '%s' at " + "%C is not allowed", sym->name, group_name->name); + gfc_error_check (); + } + + nl = gfc_get_namelist (); + nl->sym = sym; + sym->refs++; + + if (group_name->namelist == NULL) + group_name->namelist = group_name->namelist_tail = nl; + else + { + group_name->namelist_tail->next = nl; + group_name->namelist_tail = nl; + } + + if (gfc_match_eos () == MATCH_YES) + goto done; + + m = gfc_match_char (','); + + if (gfc_match_char ('/') == MATCH_YES) + { + m2 = gfc_match (" %s /", &group_name); + if (m2 == MATCH_YES) + break; + if (m2 == MATCH_ERROR) + goto error; + goto syntax; + } + + if (m != MATCH_YES) + goto syntax; + } + } + +done: + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_NAMELIST); + +error: + return MATCH_ERROR; +} + + +/* Match a MODULE statement. */ + +match +gfc_match_module (void) +{ + match m; + + m = gfc_match (" %s%t", &gfc_new_block); + if (m != MATCH_YES) + return m; + + if (gfc_add_flavor (&gfc_new_block->attr, FL_MODULE, + gfc_new_block->name, NULL) == FAILURE) + return MATCH_ERROR; + + return MATCH_YES; +} + + +/* Free equivalence sets and lists. Recursively is the easiest way to + do this. */ + +void +gfc_free_equiv (gfc_equiv *eq) +{ + if (eq == NULL) + return; + + gfc_free_equiv (eq->eq); + gfc_free_equiv (eq->next); + gfc_free_expr (eq->expr); + gfc_free (eq); +} + + +/* Match an EQUIVALENCE statement. */ + +match +gfc_match_equivalence (void) +{ + gfc_equiv *eq, *set, *tail; + gfc_ref *ref; + gfc_symbol *sym; + match m; + gfc_common_head *common_head = NULL; + bool common_flag; + int cnt; + + tail = NULL; + + for (;;) + { + eq = gfc_get_equiv (); + if (tail == NULL) + tail = eq; + + eq->next = gfc_current_ns->equiv; + gfc_current_ns->equiv = eq; + + if (gfc_match_char ('(') != MATCH_YES) + goto syntax; + + set = eq; + common_flag = FALSE; + cnt = 0; + + for (;;) + { + m = gfc_match_equiv_variable (&set->expr); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + + /* count the number of objects. */ + cnt++; + + if (gfc_match_char ('%') == MATCH_YES) + { + gfc_error ("Derived type component %C is not a " + "permitted EQUIVALENCE member"); + goto cleanup; + } + + for (ref = set->expr->ref; ref; ref = ref->next) + if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION) + { + gfc_error ("Array reference in EQUIVALENCE at %C cannot " + "be an array section"); + goto cleanup; + } + + sym = set->expr->symtree->n.sym; + + if (gfc_add_in_equivalence (&sym->attr, sym->name, NULL) == FAILURE) + goto cleanup; + + if (sym->attr.in_common) + { + common_flag = TRUE; + common_head = sym->common_head; + } + + if (gfc_match_char (')') == MATCH_YES) + break; + + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + + set->eq = gfc_get_equiv (); + set = set->eq; + } + + if (cnt < 2) + { + gfc_error ("EQUIVALENCE at %C requires two or more objects"); + goto cleanup; + } + + /* If one of the members of an equivalence is in common, then + mark them all as being in common. Before doing this, check + that members of the equivalence group are not in different + common blocks. */ + if (common_flag) + for (set = eq; set; set = set->eq) + { + sym = set->expr->symtree->n.sym; + if (sym->common_head && sym->common_head != common_head) + { + gfc_error ("Attempt to indirectly overlap COMMON " + "blocks %s and %s by EQUIVALENCE at %C", + sym->common_head->name, common_head->name); + goto cleanup; + } + sym->attr.in_common = 1; + sym->common_head = common_head; + } + + if (gfc_match_eos () == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_EQUIVALENCE); + +cleanup: + eq = tail->next; + tail->next = NULL; + + gfc_free_equiv (gfc_current_ns->equiv); + gfc_current_ns->equiv = eq; + + return MATCH_ERROR; +} + + +/* Check that a statement function is not recursive. This is done by looking + for the statement function symbol(sym) by looking recursively through its + expression(e). If a reference to sym is found, true is returned. + 12.5.4 requires that any variable of function that is implicitly typed + shall have that type confirmed by any subsequent type declaration. The + implicit typing is conveniently done here. */ +static bool +recursive_stmt_fcn (gfc_expr *, gfc_symbol *); + +static bool +check_stmt_fcn (gfc_expr *e, gfc_symbol *sym, int *f ATTRIBUTE_UNUSED) +{ + + if (e == NULL) + return false; + + switch (e->expr_type) + { + case EXPR_FUNCTION: + if (e->symtree == NULL) + return false; + + /* Check the name before testing for nested recursion! */ + if (sym->name == e->symtree->n.sym->name) + return true; + + /* Catch recursion via other statement functions. */ + if (e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION + && e->symtree->n.sym->value + && recursive_stmt_fcn (e->symtree->n.sym->value, sym)) + return true; + + if (e->symtree->n.sym->ts.type == BT_UNKNOWN) + gfc_set_default_type (e->symtree->n.sym, 0, NULL); + + break; + + case EXPR_VARIABLE: + if (e->symtree && sym->name == e->symtree->n.sym->name) + return true; + + if (e->symtree->n.sym->ts.type == BT_UNKNOWN) + gfc_set_default_type (e->symtree->n.sym, 0, NULL); + break; + + default: + break; + } + + return false; +} + + +static bool +recursive_stmt_fcn (gfc_expr *e, gfc_symbol *sym) +{ + return gfc_traverse_expr (e, sym, check_stmt_fcn, 0); +} + + +/* Match a statement function declaration. It is so easy to match + non-statement function statements with a MATCH_ERROR as opposed to + MATCH_NO that we suppress error message in most cases. */ + +match +gfc_match_st_function (void) +{ + gfc_error_buf old_error; + gfc_symbol *sym; + gfc_expr *expr; + match m; + + m = gfc_match_symbol (&sym, 0); + if (m != MATCH_YES) + return m; + + gfc_push_error (&old_error); + + if (gfc_add_procedure (&sym->attr, PROC_ST_FUNCTION, + sym->name, NULL) == FAILURE) + goto undo_error; + + if (gfc_match_formal_arglist (sym, 1, 0) != MATCH_YES) + goto undo_error; + + m = gfc_match (" = %e%t", &expr); + if (m == MATCH_NO) + goto undo_error; + + gfc_free_error (&old_error); + if (m == MATCH_ERROR) + return m; + + if (recursive_stmt_fcn (expr, sym)) + { + gfc_error ("Statement function at %L is recursive", &expr->where); + return MATCH_ERROR; + } + + sym->value = expr; + + return MATCH_YES; + +undo_error: + gfc_pop_error (&old_error); + return MATCH_NO; +} + + +/***************** SELECT CASE subroutines ******************/ + +/* Free a single case structure. */ + +static void +free_case (gfc_case *p) +{ + if (p->low == p->high) + p->high = NULL; + gfc_free_expr (p->low); + gfc_free_expr (p->high); + gfc_free (p); +} + + +/* Free a list of case structures. */ + +void +gfc_free_case_list (gfc_case *p) +{ + gfc_case *q; + + for (; p; p = q) + { + q = p->next; + free_case (p); + } +} + + +/* Match a single case selector. */ + +static match +match_case_selector (gfc_case **cp) +{ + gfc_case *c; + match m; + + c = gfc_get_case (); + c->where = gfc_current_locus; + + if (gfc_match_char (':') == MATCH_YES) + { + m = gfc_match_init_expr (&c->high); + if (m == MATCH_NO) + goto need_expr; + if (m == MATCH_ERROR) + goto cleanup; + } + else + { + m = gfc_match_init_expr (&c->low); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto need_expr; + + /* If we're not looking at a ':' now, make a range out of a single + target. Else get the upper bound for the case range. */ + if (gfc_match_char (':') != MATCH_YES) + c->high = c->low; + else + { + m = gfc_match_init_expr (&c->high); + if (m == MATCH_ERROR) + goto cleanup; + /* MATCH_NO is fine. It's OK if nothing is there! */ + } + } + + *cp = c; + return MATCH_YES; + +need_expr: + gfc_error ("Expected initialization expression in CASE at %C"); + +cleanup: + free_case (c); + return MATCH_ERROR; +} + + +/* Match the end of a case statement. */ + +static match +match_case_eos (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + match m; + + if (gfc_match_eos () == MATCH_YES) + return MATCH_YES; + + /* If the case construct doesn't have a case-construct-name, we + should have matched the EOS. */ + if (!gfc_current_block ()) + { + gfc_error ("Expected the name of the SELECT CASE construct at %C"); + return MATCH_ERROR; + } + + gfc_gobble_whitespace (); + + m = gfc_match_name (name); + if (m != MATCH_YES) + return m; + + if (strcmp (name, gfc_current_block ()->name) != 0) + { + gfc_error ("Expected case name of '%s' at %C", + gfc_current_block ()->name); + return MATCH_ERROR; + } + + return gfc_match_eos (); +} + + +/* Match a SELECT statement. */ + +match +gfc_match_select (void) +{ + gfc_expr *expr; + match m; + + m = gfc_match_label (); + if (m == MATCH_ERROR) + return m; + + m = gfc_match (" select case ( %e )%t", &expr); + if (m != MATCH_YES) + return m; + + new_st.op = EXEC_SELECT; + new_st.expr = expr; + + return MATCH_YES; +} + + +/* Match a CASE statement. */ + +match +gfc_match_case (void) +{ + gfc_case *c, *head, *tail; + match m; + + head = tail = NULL; + + if (gfc_current_state () != COMP_SELECT) + { + gfc_error ("Unexpected CASE statement at %C"); + return MATCH_ERROR; + } + + if (gfc_match ("% default") == MATCH_YES) + { + m = match_case_eos (); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + + new_st.op = EXEC_SELECT; + c = gfc_get_case (); + c->where = gfc_current_locus; + new_st.ext.case_list = c; + return MATCH_YES; + } + + if (gfc_match_char ('(') != MATCH_YES) + goto syntax; + + for (;;) + { + if (match_case_selector (&c) == MATCH_ERROR) + goto cleanup; + + if (head == NULL) + head = c; + else + tail->next = c; + + tail = c; + + if (gfc_match_char (')') == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + + m = match_case_eos (); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + + new_st.op = EXEC_SELECT; + new_st.ext.case_list = head; + + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in CASE-specification at %C"); + +cleanup: + gfc_free_case_list (head); /* new_st is cleaned up in parse.c. */ + return MATCH_ERROR; +} + +/********************* WHERE subroutines ********************/ + +/* Match the rest of a simple WHERE statement that follows an IF statement. + */ + +static match +match_simple_where (void) +{ + gfc_expr *expr; + gfc_code *c; + match m; + + m = gfc_match (" ( %e )", &expr); + if (m != MATCH_YES) + return m; + + m = gfc_match_assignment (); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + + if (gfc_match_eos () != MATCH_YES) + goto syntax; + + c = gfc_get_code (); + + c->op = EXEC_WHERE; + c->expr = expr; + c->next = gfc_get_code (); + + *c->next = new_st; + gfc_clear_new_st (); + + new_st.op = EXEC_WHERE; + new_st.block = c; + + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_WHERE); + +cleanup: + gfc_free_expr (expr); + return MATCH_ERROR; +} + + +/* Match a WHERE statement. */ + +match +gfc_match_where (gfc_statement *st) +{ + gfc_expr *expr; + match m0, m; + gfc_code *c; + + m0 = gfc_match_label (); + if (m0 == MATCH_ERROR) + return m0; + + m = gfc_match (" where ( %e )", &expr); + if (m != MATCH_YES) + return m; + + if (gfc_match_eos () == MATCH_YES) + { + *st = ST_WHERE_BLOCK; + new_st.op = EXEC_WHERE; + new_st.expr = expr; + return MATCH_YES; + } + + m = gfc_match_assignment (); + if (m == MATCH_NO) + gfc_syntax_error (ST_WHERE); + + if (m != MATCH_YES) + { + gfc_free_expr (expr); + return MATCH_ERROR; + } + + /* We've got a simple WHERE statement. */ + *st = ST_WHERE; + c = gfc_get_code (); + + c->op = EXEC_WHERE; + c->expr = expr; + c->next = gfc_get_code (); + + *c->next = new_st; + gfc_clear_new_st (); + + new_st.op = EXEC_WHERE; + new_st.block = c; + + return MATCH_YES; +} + + +/* Match an ELSEWHERE statement. We leave behind a WHERE node in + new_st if successful. */ + +match +gfc_match_elsewhere (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_expr *expr; + match m; + + if (gfc_current_state () != COMP_WHERE) + { + gfc_error ("ELSEWHERE statement at %C not enclosed in WHERE block"); + return MATCH_ERROR; + } + + expr = NULL; + + if (gfc_match_char ('(') == MATCH_YES) + { + m = gfc_match_expr (&expr); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + return MATCH_ERROR; + + if (gfc_match_char (')') != MATCH_YES) + goto syntax; + } + + if (gfc_match_eos () != MATCH_YES) + { + /* Only makes sense if we have a where-construct-name. */ + if (!gfc_current_block ()) + { + m = MATCH_ERROR; + goto cleanup; + } + /* Better be a name at this point. */ + m = gfc_match_name (name); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + + if (gfc_match_eos () != MATCH_YES) + goto syntax; + + if (strcmp (name, gfc_current_block ()->name) != 0) + { + gfc_error ("Label '%s' at %C doesn't match WHERE label '%s'", + name, gfc_current_block ()->name); + goto cleanup; + } + } + + new_st.op = EXEC_WHERE; + new_st.expr = expr; + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_ELSEWHERE); + +cleanup: + gfc_free_expr (expr); + return MATCH_ERROR; +} + + +/******************** FORALL subroutines ********************/ + +/* Free a list of FORALL iterators. */ + +void +gfc_free_forall_iterator (gfc_forall_iterator *iter) +{ + gfc_forall_iterator *next; + + while (iter) + { + next = iter->next; + gfc_free_expr (iter->var); + gfc_free_expr (iter->start); + gfc_free_expr (iter->end); + gfc_free_expr (iter->stride); + gfc_free (iter); + iter = next; + } +} + + +/* Match an iterator as part of a FORALL statement. The format is: + + = :[:] + + On MATCH_NO, the caller tests for the possibility that there is a + scalar mask expression. */ + +static match +match_forall_iterator (gfc_forall_iterator **result) +{ + gfc_forall_iterator *iter; + locus where; + match m; + + where = gfc_current_locus; + iter = XCNEW (gfc_forall_iterator); + + m = gfc_match_expr (&iter->var); + if (m != MATCH_YES) + goto cleanup; + + if (gfc_match_char ('=') != MATCH_YES + || iter->var->expr_type != EXPR_VARIABLE) + { + m = MATCH_NO; + goto cleanup; + } + + m = gfc_match_expr (&iter->start); + if (m != MATCH_YES) + goto cleanup; + + if (gfc_match_char (':') != MATCH_YES) + goto syntax; + + m = gfc_match_expr (&iter->end); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + + if (gfc_match_char (':') == MATCH_NO) + iter->stride = gfc_int_expr (1); + else + { + m = gfc_match_expr (&iter->stride); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + } + + /* Mark the iteration variable's symbol as used as a FORALL index. */ + iter->var->symtree->n.sym->forall_index = true; + + *result = iter; + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in FORALL iterator at %C"); + m = MATCH_ERROR; + +cleanup: + + gfc_current_locus = where; + gfc_free_forall_iterator (iter); + return m; +} + + +/* Match the header of a FORALL statement. */ + +static match +match_forall_header (gfc_forall_iterator **phead, gfc_expr **mask) +{ + gfc_forall_iterator *head, *tail, *new_iter; + gfc_expr *msk; + match m; + + gfc_gobble_whitespace (); + + head = tail = NULL; + msk = NULL; + + if (gfc_match_char ('(') != MATCH_YES) + return MATCH_NO; + + m = match_forall_iterator (&new_iter); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + + head = tail = new_iter; + + for (;;) + { + if (gfc_match_char (',') != MATCH_YES) + break; + + m = match_forall_iterator (&new_iter); + if (m == MATCH_ERROR) + goto cleanup; + + if (m == MATCH_YES) + { + tail->next = new_iter; + tail = new_iter; + continue; + } + + /* Have to have a mask expression. */ + + m = gfc_match_expr (&msk); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + + break; + } + + if (gfc_match_char (')') == MATCH_NO) + goto syntax; + + *phead = head; + *mask = msk; + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_FORALL); + +cleanup: + gfc_free_expr (msk); + gfc_free_forall_iterator (head); + + return MATCH_ERROR; +} + +/* Match the rest of a simple FORALL statement that follows an + IF statement. */ + +static match +match_simple_forall (void) +{ + gfc_forall_iterator *head; + gfc_expr *mask; + gfc_code *c; + match m; + + mask = NULL; + head = NULL; + c = NULL; + + m = match_forall_header (&head, &mask); + + if (m == MATCH_NO) + goto syntax; + if (m != MATCH_YES) + goto cleanup; + + m = gfc_match_assignment (); + + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + { + m = gfc_match_pointer_assignment (); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + } + + c = gfc_get_code (); + *c = new_st; + c->loc = gfc_current_locus; + + if (gfc_match_eos () != MATCH_YES) + goto syntax; + + gfc_clear_new_st (); + new_st.op = EXEC_FORALL; + new_st.expr = mask; + new_st.ext.forall_iterator = head; + new_st.block = gfc_get_code (); + + new_st.block->op = EXEC_FORALL; + new_st.block->next = c; + + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_FORALL); + +cleanup: + gfc_free_forall_iterator (head); + gfc_free_expr (mask); + + return MATCH_ERROR; +} + + +/* Match a FORALL statement. */ + +match +gfc_match_forall (gfc_statement *st) +{ + gfc_forall_iterator *head; + gfc_expr *mask; + gfc_code *c; + match m0, m; + + head = NULL; + mask = NULL; + c = NULL; + + m0 = gfc_match_label (); + if (m0 == MATCH_ERROR) + return MATCH_ERROR; + + m = gfc_match (" forall"); + if (m != MATCH_YES) + return m; + + m = match_forall_header (&head, &mask); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + + if (gfc_match_eos () == MATCH_YES) + { + *st = ST_FORALL_BLOCK; + new_st.op = EXEC_FORALL; + new_st.expr = mask; + new_st.ext.forall_iterator = head; + return MATCH_YES; + } + + m = gfc_match_assignment (); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + { + m = gfc_match_pointer_assignment (); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + } + + c = gfc_get_code (); + *c = new_st; + c->loc = gfc_current_locus; + + gfc_clear_new_st (); + new_st.op = EXEC_FORALL; + new_st.expr = mask; + new_st.ext.forall_iterator = head; + new_st.block = gfc_get_code (); + new_st.block->op = EXEC_FORALL; + new_st.block->next = c; + + *st = ST_FORALL; + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_FORALL); + +cleanup: + gfc_free_forall_iterator (head); + gfc_free_expr (mask); + gfc_free_statements (c); + return MATCH_NO; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/match.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/match.h new file mode 100644 index 0000000000..81bf421328 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/match.h @@ -0,0 +1,239 @@ +/* All matcher functions. + Copyright (C) 2003, 2005, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Steven Bosscher + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + + +#ifndef GFC_MATCH_H +#define GFC_MATCH_H + +#include "gfortran.h" + +/* gfc_new_block points to the symbol of a newly matched block. */ +extern gfc_symbol *gfc_new_block; + +/* Current statement label. Zero means no statement label. Because + new_st can get wiped during statement matching, we have to keep it + separate. */ +extern gfc_st_label *gfc_statement_label; + +extern int gfc_matching_procptr_assignment; +extern bool gfc_matching_prefix; + +/* Default access specifier while matching procedure bindings. */ +extern gfc_access gfc_typebound_default_access; + +/****************** All gfc_match* routines *****************/ + +/* match.c. */ + +/* Generic match subroutines. */ +match gfc_match_special_char (gfc_char_t *); +match gfc_match_space (void); +match gfc_match_eos (void); +match gfc_match_small_literal_int (int *, int *); +match gfc_match_st_label (gfc_st_label **); +match gfc_match_label (void); +match gfc_match_small_int (int *); +match gfc_match_small_int_expr (int *, gfc_expr **); +match gfc_match_name (char *); +match gfc_match_name_C (char *buffer); +match gfc_match_symbol (gfc_symbol **, int); +match gfc_match_sym_tree (gfc_symtree **, int); +match gfc_match_intrinsic_op (gfc_intrinsic_op *); +match gfc_match_char (char); +match gfc_match (const char *, ...); +match gfc_match_iterator (gfc_iterator *, int); +match gfc_match_parens (void); + +/* Statement matchers. */ +match gfc_match_program (void); +match gfc_match_pointer_assignment (void); +match gfc_match_assignment (void); +match gfc_match_if (gfc_statement *); +match gfc_match_else (void); +match gfc_match_elseif (void); +match gfc_match_do (void); +match gfc_match_cycle (void); +match gfc_match_exit (void); +match gfc_match_pause (void); +match gfc_match_stop (void); +match gfc_match_continue (void); +match gfc_match_assign (void); +match gfc_match_goto (void); + +match gfc_match_allocate (void); +match gfc_match_nullify (void); +match gfc_match_deallocate (void); +match gfc_match_return (void); +match gfc_match_call (void); + +/* We want to use this function to check for a common-block-name + that can exist in a bind statement, so removed the "static" + declaration of the function in match.c. + + TODO: should probably rename this now that it'll be globally seen to + gfc_match_common_name. */ +match match_common_name (char *name); + +match gfc_match_common (void); +match gfc_match_block_data (void); +match gfc_match_namelist (void); +match gfc_match_module (void); +match gfc_match_equivalence (void); +match gfc_match_st_function (void); +match gfc_match_case (void); +match gfc_match_select (void); +match gfc_match_where (gfc_statement *); +match gfc_match_elsewhere (void); +match gfc_match_forall (gfc_statement *); + +/* Other functions. */ + +gfc_common_head *gfc_get_common (const char *, int); + +/* openmp.c. */ + +/* OpenMP directive matchers. */ +match gfc_match_omp_eos (void); +match gfc_match_omp_atomic (void); +match gfc_match_omp_barrier (void); +match gfc_match_omp_critical (void); +match gfc_match_omp_do (void); +match gfc_match_omp_flush (void); +match gfc_match_omp_master (void); +match gfc_match_omp_ordered (void); +match gfc_match_omp_parallel (void); +match gfc_match_omp_parallel_do (void); +match gfc_match_omp_parallel_sections (void); +match gfc_match_omp_parallel_workshare (void); +match gfc_match_omp_sections (void); +match gfc_match_omp_single (void); +match gfc_match_omp_task (void); +match gfc_match_omp_taskwait (void); +match gfc_match_omp_threadprivate (void); +match gfc_match_omp_workshare (void); +match gfc_match_omp_end_nowait (void); +match gfc_match_omp_end_single (void); + +/* decl.c. */ + +match gfc_match_data (void); +match gfc_match_null (gfc_expr **); +match gfc_match_kind_spec (gfc_typespec *, bool); +match gfc_match_old_kind_spec (gfc_typespec *); +match gfc_match_type_spec (gfc_typespec *, int); + +match gfc_match_end (gfc_statement *); +match gfc_match_data_decl (void); +match gfc_match_formal_arglist (gfc_symbol *, int, int); +match gfc_match_procedure (void); +match gfc_match_generic (void); +match gfc_match_function_decl (void); +match gfc_match_entry (void); +match gfc_match_subroutine (void); +match gfc_match_derived_decl (void); +match gfc_match_final_decl (void); + +match gfc_match_implicit_none (void); +match gfc_match_implicit (void); + +void gfc_set_constant_character_len (int, gfc_expr *, int); + +/* Matchers for attribute declarations. */ +match gfc_match_allocatable (void); +match gfc_match_dimension (void); +match gfc_match_external (void); +match gfc_match_import (void); +match gfc_match_intent (void); +match gfc_match_intrinsic (void); +match gfc_match_optional (void); +match gfc_match_parameter (void); +match gfc_match_pointer (void); +match gfc_match_protected (void); +match gfc_match_private (gfc_statement *); +match gfc_match_public (gfc_statement *); +match gfc_match_save (void); +match gfc_match_modproc (void); +match gfc_match_target (void); +match gfc_match_value (void); +match gfc_match_volatile (void); + +/* decl.c. */ + +/* Fortran 2003 c interop. + TODO: some of these should be moved to another file rather than decl.c */ +void set_com_block_bind_c (gfc_common_head *, int); +gfc_try set_binding_label (char *, const char *, int); +gfc_try set_verify_bind_c_sym (gfc_symbol *, int); +gfc_try set_verify_bind_c_com_block (gfc_common_head *, int); +gfc_try get_bind_c_idents (void); +match gfc_match_bind_c_stmt (void); +match gfc_match_suffix (gfc_symbol *, gfc_symbol **); +match gfc_match_bind_c (gfc_symbol *, bool); +match gfc_get_type_attr_spec (symbol_attribute *, char*); + +/* primary.c. */ +match gfc_match_structure_constructor (gfc_symbol *, gfc_expr **, bool); +match gfc_match_variable (gfc_expr **, int); +match gfc_match_equiv_variable (gfc_expr **); +match gfc_match_actual_arglist (int, gfc_actual_arglist **); +match gfc_match_literal_constant (gfc_expr **, int); + +/* expr.c -- FIXME: this one should be eliminated by moving the + matcher to matchexp.c and a call to a new function in expr.c that + only makes sure the init expr. is valid. */ +gfc_try gfc_reduce_init_expr (gfc_expr *expr); +match gfc_match_init_expr (gfc_expr **); + +/* array.c. */ +match gfc_match_array_spec (gfc_array_spec **); +match gfc_match_array_ref (gfc_array_ref *, gfc_array_spec *, int); +match gfc_match_array_constructor (gfc_expr **); + +/* interface.c. */ +match gfc_match_abstract_interface (void); +match gfc_match_generic_spec (interface_type *, char *, gfc_intrinsic_op *); +match gfc_match_interface (void); +match gfc_match_end_interface (void); + +/* io.c. */ +match gfc_match_format (void); +match gfc_match_open (void); +match gfc_match_close (void); +match gfc_match_endfile (void); +match gfc_match_backspace (void); +match gfc_match_rewind (void); +match gfc_match_flush (void); +match gfc_match_inquire (void); +match gfc_match_read (void); +match gfc_match_wait (void); +match gfc_match_write (void); +match gfc_match_print (void); + +/* matchexp.c. */ +match gfc_match_defined_op_name (char *, int); +match gfc_match_expr (gfc_expr **); + +/* module.c. */ +match gfc_match_use (void); +void gfc_use_module (void); + +#endif /* GFC_MATCH_H */ + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/matchexp.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/matchexp.c new file mode 100644 index 0000000000..f757365531 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/matchexp.c @@ -0,0 +1,927 @@ +/* Expression parser. + Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "gfortran.h" +#include "arith.h" +#include "match.h" + +static char expression_syntax[] = N_("Syntax error in expression at %C"); + + +/* Match a user-defined operator name. This is a normal name with a + few restrictions. The error_flag controls whether an error is + raised if 'true' or 'false' are used or not. */ + +match +gfc_match_defined_op_name (char *result, int error_flag) +{ + static const char * const badops[] = { + "and", "or", "not", "eqv", "neqv", "eq", "ne", "ge", "le", "lt", "gt", + NULL + }; + + char name[GFC_MAX_SYMBOL_LEN + 1]; + locus old_loc; + match m; + int i; + + old_loc = gfc_current_locus; + + m = gfc_match (" . %n .", name); + if (m != MATCH_YES) + return m; + + /* .true. and .false. have interpretations as constants. Trying to + use these as operators will fail at a later time. */ + + if (strcmp (name, "true") == 0 || strcmp (name, "false") == 0) + { + if (error_flag) + goto error; + gfc_current_locus = old_loc; + return MATCH_NO; + } + + for (i = 0; badops[i]; i++) + if (strcmp (badops[i], name) == 0) + goto error; + + for (i = 0; name[i]; i++) + if (!ISALPHA (name[i])) + { + gfc_error ("Bad character '%c' in OPERATOR name at %C", name[i]); + return MATCH_ERROR; + } + + strcpy (result, name); + return MATCH_YES; + +error: + gfc_error ("The name '%s' cannot be used as a defined operator at %C", + name); + + gfc_current_locus = old_loc; + return MATCH_ERROR; +} + + +/* Match a user defined operator. The symbol found must be an + operator already. */ + +static match +match_defined_operator (gfc_user_op **result) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + match m; + + m = gfc_match_defined_op_name (name, 0); + if (m != MATCH_YES) + return m; + + *result = gfc_get_uop (name); + return MATCH_YES; +} + + +/* Check to see if the given operator is next on the input. If this + is not the case, the parse pointer remains where it was. */ + +static int +next_operator (gfc_intrinsic_op t) +{ + gfc_intrinsic_op u; + locus old_loc; + + old_loc = gfc_current_locus; + if (gfc_match_intrinsic_op (&u) == MATCH_YES && t == u) + return 1; + + gfc_current_locus = old_loc; + return 0; +} + + +/* Call the INTRINSIC_PARENTHESES function. This is both + used explicitly, as below, or by resolve.c to generate + temporaries. */ + +gfc_expr * +gfc_get_parentheses (gfc_expr *e) +{ + gfc_expr *e2; + + e2 = gfc_get_expr(); + e2->expr_type = EXPR_OP; + e2->ts = e->ts; + e2->rank = e->rank; + e2->where = e->where; + e2->value.op.op = INTRINSIC_PARENTHESES; + e2->value.op.op1 = e; + e2->value.op.op2 = NULL; + return e2; +} + + +/* Match a primary expression. */ + +static match +match_primary (gfc_expr **result) +{ + match m; + gfc_expr *e; + locus where; + + m = gfc_match_literal_constant (result, 0); + if (m != MATCH_NO) + return m; + + m = gfc_match_array_constructor (result); + if (m != MATCH_NO) + return m; + + m = gfc_match_rvalue (result); + if (m != MATCH_NO) + return m; + + /* Match an expression in parentheses. */ + where = gfc_current_locus; + + if (gfc_match_char ('(') != MATCH_YES) + return MATCH_NO; + + m = gfc_match_expr (&e); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + return m; + + m = gfc_match_char (')'); + if (m == MATCH_NO) + gfc_error ("Expected a right parenthesis in expression at %C"); + + /* Now we have the expression inside the parentheses, build the + expression pointing to it. By 7.1.7.2, any expression in + parentheses shall be treated as a data entity. */ + *result = gfc_get_parentheses (e); + + if (m != MATCH_YES) + { + gfc_free_expr (*result); + return MATCH_ERROR; + } + + return MATCH_YES; + +syntax: + gfc_error (expression_syntax); + return MATCH_ERROR; +} + + +/* Build an operator expression node. */ + +static gfc_expr * +build_node (gfc_intrinsic_op op, locus *where, + gfc_expr *op1, gfc_expr *op2) +{ + gfc_expr *new_expr; + + new_expr = gfc_get_expr (); + new_expr->expr_type = EXPR_OP; + new_expr->value.op.op = op; + new_expr->where = *where; + + new_expr->value.op.op1 = op1; + new_expr->value.op.op2 = op2; + + return new_expr; +} + + +/* Match a level 1 expression. */ + +static match +match_level_1 (gfc_expr **result) +{ + gfc_user_op *uop; + gfc_expr *e, *f; + locus where; + match m; + + where = gfc_current_locus; + uop = NULL; + m = match_defined_operator (&uop); + if (m == MATCH_ERROR) + return m; + + m = match_primary (&e); + if (m != MATCH_YES) + return m; + + if (uop == NULL) + *result = e; + else + { + f = build_node (INTRINSIC_USER, &where, e, NULL); + f->value.op.uop = uop; + *result = f; + } + + return MATCH_YES; +} + + +/* As a GNU extension we support an expanded level-2 expression syntax. + Via this extension we support (arbitrary) nesting of unary plus and + minus operations following unary and binary operators, such as **. + The grammar of section 7.1.1.3 is effectively rewritten as: + + R704 mult-operand is level-1-expr [ power-op ext-mult-operand ] + R704' ext-mult-operand is add-op ext-mult-operand + or mult-operand + R705 add-operand is add-operand mult-op ext-mult-operand + or mult-operand + R705' ext-add-operand is add-op ext-add-operand + or add-operand + R706 level-2-expr is [ level-2-expr ] add-op ext-add-operand + or add-operand + */ + +static match match_ext_mult_operand (gfc_expr **result); +static match match_ext_add_operand (gfc_expr **result); + +static int +match_add_op (void) +{ + if (next_operator (INTRINSIC_MINUS)) + return -1; + if (next_operator (INTRINSIC_PLUS)) + return 1; + return 0; +} + + +static match +match_mult_operand (gfc_expr **result) +{ + gfc_expr *e, *exp, *r; + locus where; + match m; + + m = match_level_1 (&e); + if (m != MATCH_YES) + return m; + + if (!next_operator (INTRINSIC_POWER)) + { + *result = e; + return MATCH_YES; + } + + where = gfc_current_locus; + + m = match_ext_mult_operand (&exp); + if (m == MATCH_NO) + gfc_error ("Expected exponent in expression at %C"); + if (m != MATCH_YES) + { + gfc_free_expr (e); + return MATCH_ERROR; + } + + r = gfc_power (e, exp); + if (r == NULL) + { + gfc_free_expr (e); + gfc_free_expr (exp); + return MATCH_ERROR; + } + + r->where = where; + *result = r; + + return MATCH_YES; +} + + +static match +match_ext_mult_operand (gfc_expr **result) +{ + gfc_expr *all, *e; + locus where; + match m; + int i; + + where = gfc_current_locus; + i = match_add_op (); + + if (i == 0) + return match_mult_operand (result); + + if (gfc_notification_std (GFC_STD_GNU) == ERROR) + { + gfc_error ("Extension: Unary operator following " + "arithmetic operator (use parentheses) at %C"); + return MATCH_ERROR; + } + else + gfc_warning ("Extension: Unary operator following " + "arithmetic operator (use parentheses) at %C"); + + m = match_ext_mult_operand (&e); + if (m != MATCH_YES) + return m; + + if (i == -1) + all = gfc_uminus (e); + else + all = gfc_uplus (e); + + if (all == NULL) + { + gfc_free_expr (e); + return MATCH_ERROR; + } + + all->where = where; + *result = all; + return MATCH_YES; +} + + +static match +match_add_operand (gfc_expr **result) +{ + gfc_expr *all, *e, *total; + locus where, old_loc; + match m; + gfc_intrinsic_op i; + + m = match_mult_operand (&all); + if (m != MATCH_YES) + return m; + + for (;;) + { + /* Build up a string of products or quotients. */ + + old_loc = gfc_current_locus; + + if (next_operator (INTRINSIC_TIMES)) + i = INTRINSIC_TIMES; + else + { + if (next_operator (INTRINSIC_DIVIDE)) + i = INTRINSIC_DIVIDE; + else + break; + } + + where = gfc_current_locus; + + m = match_ext_mult_operand (&e); + if (m == MATCH_NO) + { + gfc_current_locus = old_loc; + break; + } + + if (m == MATCH_ERROR) + { + gfc_free_expr (all); + return MATCH_ERROR; + } + + if (i == INTRINSIC_TIMES) + total = gfc_multiply (all, e); + else + total = gfc_divide (all, e); + + if (total == NULL) + { + gfc_free_expr (all); + gfc_free_expr (e); + return MATCH_ERROR; + } + + all = total; + all->where = where; + } + + *result = all; + return MATCH_YES; +} + + +static match +match_ext_add_operand (gfc_expr **result) +{ + gfc_expr *all, *e; + locus where; + match m; + int i; + + where = gfc_current_locus; + i = match_add_op (); + + if (i == 0) + return match_add_operand (result); + + if (gfc_notification_std (GFC_STD_GNU) == ERROR) + { + gfc_error ("Extension: Unary operator following " + "arithmetic operator (use parentheses) at %C"); + return MATCH_ERROR; + } + else + gfc_warning ("Extension: Unary operator following " + "arithmetic operator (use parentheses) at %C"); + + m = match_ext_add_operand (&e); + if (m != MATCH_YES) + return m; + + if (i == -1) + all = gfc_uminus (e); + else + all = gfc_uplus (e); + + if (all == NULL) + { + gfc_free_expr (e); + return MATCH_ERROR; + } + + all->where = where; + *result = all; + return MATCH_YES; +} + + +/* Match a level 2 expression. */ + +static match +match_level_2 (gfc_expr **result) +{ + gfc_expr *all, *e, *total; + locus where; + match m; + int i; + + where = gfc_current_locus; + i = match_add_op (); + + if (i != 0) + { + m = match_ext_add_operand (&e); + if (m == MATCH_NO) + { + gfc_error (expression_syntax); + m = MATCH_ERROR; + } + } + else + m = match_add_operand (&e); + + if (m != MATCH_YES) + return m; + + if (i == 0) + all = e; + else + { + if (i == -1) + all = gfc_uminus (e); + else + all = gfc_uplus (e); + + if (all == NULL) + { + gfc_free_expr (e); + return MATCH_ERROR; + } + } + + all->where = where; + + /* Append add-operands to the sum. */ + + for (;;) + { + where = gfc_current_locus; + i = match_add_op (); + if (i == 0) + break; + + m = match_ext_add_operand (&e); + if (m == MATCH_NO) + gfc_error (expression_syntax); + if (m != MATCH_YES) + { + gfc_free_expr (all); + return MATCH_ERROR; + } + + if (i == -1) + total = gfc_subtract (all, e); + else + total = gfc_add (all, e); + + if (total == NULL) + { + gfc_free_expr (all); + gfc_free_expr (e); + return MATCH_ERROR; + } + + all = total; + all->where = where; + } + + *result = all; + return MATCH_YES; +} + + +/* Match a level three expression. */ + +static match +match_level_3 (gfc_expr **result) +{ + gfc_expr *all, *e, *total; + locus where; + match m; + + m = match_level_2 (&all); + if (m != MATCH_YES) + return m; + + for (;;) + { + if (!next_operator (INTRINSIC_CONCAT)) + break; + + where = gfc_current_locus; + + m = match_level_2 (&e); + if (m == MATCH_NO) + { + gfc_error (expression_syntax); + gfc_free_expr (all); + } + if (m != MATCH_YES) + return MATCH_ERROR; + + total = gfc_concat (all, e); + if (total == NULL) + { + gfc_free_expr (all); + gfc_free_expr (e); + return MATCH_ERROR; + } + + all = total; + all->where = where; + } + + *result = all; + return MATCH_YES; +} + + +/* Match a level 4 expression. */ + +static match +match_level_4 (gfc_expr **result) +{ + gfc_expr *left, *right, *r; + gfc_intrinsic_op i; + locus old_loc; + locus where; + match m; + + m = match_level_3 (&left); + if (m != MATCH_YES) + return m; + + old_loc = gfc_current_locus; + + if (gfc_match_intrinsic_op (&i) != MATCH_YES) + { + *result = left; + return MATCH_YES; + } + + if (i != INTRINSIC_EQ && i != INTRINSIC_NE && i != INTRINSIC_GE + && i != INTRINSIC_LE && i != INTRINSIC_LT && i != INTRINSIC_GT + && i != INTRINSIC_EQ_OS && i != INTRINSIC_NE_OS && i != INTRINSIC_GE_OS + && i != INTRINSIC_LE_OS && i != INTRINSIC_LT_OS && i != INTRINSIC_GT_OS) + { + gfc_current_locus = old_loc; + *result = left; + return MATCH_YES; + } + + where = gfc_current_locus; + + m = match_level_3 (&right); + if (m == MATCH_NO) + gfc_error (expression_syntax); + if (m != MATCH_YES) + { + gfc_free_expr (left); + return MATCH_ERROR; + } + + switch (i) + { + case INTRINSIC_EQ: + case INTRINSIC_EQ_OS: + r = gfc_eq (left, right, i); + break; + + case INTRINSIC_NE: + case INTRINSIC_NE_OS: + r = gfc_ne (left, right, i); + break; + + case INTRINSIC_LT: + case INTRINSIC_LT_OS: + r = gfc_lt (left, right, i); + break; + + case INTRINSIC_LE: + case INTRINSIC_LE_OS: + r = gfc_le (left, right, i); + break; + + case INTRINSIC_GT: + case INTRINSIC_GT_OS: + r = gfc_gt (left, right, i); + break; + + case INTRINSIC_GE: + case INTRINSIC_GE_OS: + r = gfc_ge (left, right, i); + break; + + default: + gfc_internal_error ("match_level_4(): Bad operator"); + } + + if (r == NULL) + { + gfc_free_expr (left); + gfc_free_expr (right); + return MATCH_ERROR; + } + + r->where = where; + *result = r; + + return MATCH_YES; +} + + +static match +match_and_operand (gfc_expr **result) +{ + gfc_expr *e, *r; + locus where; + match m; + int i; + + i = next_operator (INTRINSIC_NOT); + where = gfc_current_locus; + + m = match_level_4 (&e); + if (m != MATCH_YES) + return m; + + r = e; + if (i) + { + r = gfc_not (e); + if (r == NULL) + { + gfc_free_expr (e); + return MATCH_ERROR; + } + } + + r->where = where; + *result = r; + + return MATCH_YES; +} + + +static match +match_or_operand (gfc_expr **result) +{ + gfc_expr *all, *e, *total; + locus where; + match m; + + m = match_and_operand (&all); + if (m != MATCH_YES) + return m; + + for (;;) + { + if (!next_operator (INTRINSIC_AND)) + break; + where = gfc_current_locus; + + m = match_and_operand (&e); + if (m == MATCH_NO) + gfc_error (expression_syntax); + if (m != MATCH_YES) + { + gfc_free_expr (all); + return MATCH_ERROR; + } + + total = gfc_and (all, e); + if (total == NULL) + { + gfc_free_expr (all); + gfc_free_expr (e); + return MATCH_ERROR; + } + + all = total; + all->where = where; + } + + *result = all; + return MATCH_YES; +} + + +static match +match_equiv_operand (gfc_expr **result) +{ + gfc_expr *all, *e, *total; + locus where; + match m; + + m = match_or_operand (&all); + if (m != MATCH_YES) + return m; + + for (;;) + { + if (!next_operator (INTRINSIC_OR)) + break; + where = gfc_current_locus; + + m = match_or_operand (&e); + if (m == MATCH_NO) + gfc_error (expression_syntax); + if (m != MATCH_YES) + { + gfc_free_expr (all); + return MATCH_ERROR; + } + + total = gfc_or (all, e); + if (total == NULL) + { + gfc_free_expr (all); + gfc_free_expr (e); + return MATCH_ERROR; + } + + all = total; + all->where = where; + } + + *result = all; + return MATCH_YES; +} + + +/* Match a level 5 expression. */ + +static match +match_level_5 (gfc_expr **result) +{ + gfc_expr *all, *e, *total; + locus where; + match m; + gfc_intrinsic_op i; + + m = match_equiv_operand (&all); + if (m != MATCH_YES) + return m; + + for (;;) + { + if (next_operator (INTRINSIC_EQV)) + i = INTRINSIC_EQV; + else + { + if (next_operator (INTRINSIC_NEQV)) + i = INTRINSIC_NEQV; + else + break; + } + + where = gfc_current_locus; + + m = match_equiv_operand (&e); + if (m == MATCH_NO) + gfc_error (expression_syntax); + if (m != MATCH_YES) + { + gfc_free_expr (all); + return MATCH_ERROR; + } + + if (i == INTRINSIC_EQV) + total = gfc_eqv (all, e); + else + total = gfc_neqv (all, e); + + if (total == NULL) + { + gfc_free_expr (all); + gfc_free_expr (e); + return MATCH_ERROR; + } + + all = total; + all->where = where; + } + + *result = all; + return MATCH_YES; +} + + +/* Match an expression. At this level, we are stringing together + level 5 expressions separated by binary operators. */ + +match +gfc_match_expr (gfc_expr **result) +{ + gfc_expr *all, *e; + gfc_user_op *uop; + locus where; + match m; + + m = match_level_5 (&all); + if (m != MATCH_YES) + return m; + + for (;;) + { + uop = NULL; + m = match_defined_operator (&uop); + if (m == MATCH_NO) + break; + if (m == MATCH_ERROR) + { + gfc_free_expr (all); + return MATCH_ERROR; + } + + where = gfc_current_locus; + + m = match_level_5 (&e); + if (m == MATCH_NO) + gfc_error (expression_syntax); + if (m != MATCH_YES) + { + gfc_free_expr (all); + return MATCH_ERROR; + } + + all = build_node (INTRINSIC_USER, &where, all, e); + all->value.op.uop = uop; + } + + *result = all; + return MATCH_YES; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/mathbuiltins.def b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/mathbuiltins.def new file mode 100644 index 0000000000..6db416ef6d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/mathbuiltins.def @@ -0,0 +1,35 @@ +/* DEFINE_MATH_BUILTIN (CODE, NAME, ARGTYPE) + NAME The name of the builtin + SNAME The name of the builtin as a string + ARGTYPE The type of the arguments. See f95-lang.c + + Use DEFINE_MATH_BUILTIN_C if the complex versions of the builtin are + also available. */ +DEFINE_MATH_BUILTIN_C (ACOS, "acos", 0) +DEFINE_MATH_BUILTIN_C (ACOSH, "acosh", 0) +DEFINE_MATH_BUILTIN_C (ASIN, "asin", 0) +DEFINE_MATH_BUILTIN_C (ASINH, "asinh", 0) +DEFINE_MATH_BUILTIN_C (ATAN, "atan", 0) +DEFINE_MATH_BUILTIN_C (ATANH, "atanh", 0) +DEFINE_MATH_BUILTIN (ATAN2, "atan2", 1) +DEFINE_MATH_BUILTIN_C (COS, "cos", 0) +DEFINE_MATH_BUILTIN_C (COSH, "cosh", 0) +DEFINE_MATH_BUILTIN_C (EXP, "exp", 0) +DEFINE_MATH_BUILTIN_C (LOG, "log", 0) +DEFINE_MATH_BUILTIN_C (LOG10, "log10", 0) +DEFINE_MATH_BUILTIN_C (SIN, "sin", 0) +DEFINE_MATH_BUILTIN_C (SINH, "sinh", 0) +DEFINE_MATH_BUILTIN_C (SQRT, "sqrt", 0) +DEFINE_MATH_BUILTIN_C (TAN, "tan", 0) +DEFINE_MATH_BUILTIN_C (TANH, "tanh", 0) +DEFINE_MATH_BUILTIN (J0, "j0", 0) +DEFINE_MATH_BUILTIN (J1, "j1", 0) +DEFINE_MATH_BUILTIN (JN, "jn", 2) +DEFINE_MATH_BUILTIN (Y0, "y0", 0) +DEFINE_MATH_BUILTIN (Y1, "y1", 0) +DEFINE_MATH_BUILTIN (YN, "yn", 2) +DEFINE_MATH_BUILTIN (ERF, "erf", 0) +DEFINE_MATH_BUILTIN (ERFC, "erfc", 0) +DEFINE_MATH_BUILTIN (GAMMA, "tgamma", 0) +DEFINE_MATH_BUILTIN (LGAMMA,"lgamma", 0) +DEFINE_MATH_BUILTIN (HYPOT, "hypot", 1) diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/misc.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/misc.c new file mode 100644 index 0000000000..136b751a19 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/misc.c @@ -0,0 +1,311 @@ +/* Miscellaneous stuff that doesn't fit anywhere else. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "gfortran.h" + +/* Get a block of memory. Many callers assume that the memory we + return is zeroed. */ + +void * +gfc_getmem (size_t n) +{ + void *p; + + if (n == 0) + return NULL; + + p = xmalloc (n); + if (p == NULL) + gfc_fatal_error ("Out of memory-- malloc() failed"); + memset (p, 0, n); + return p; +} + + +/* gfortran.h defines free to something that triggers a syntax error, + but we need free() here. */ + +#define temp free +#undef free + +void +gfc_free (void *p) +{ + if (p != NULL) + free (p); +} + +#define free temp +#undef temp + + +/* Get terminal width. */ + +int +gfc_terminal_width (void) +{ + return 80; +} + + +/* Initialize a typespec to unknown. */ + +void +gfc_clear_ts (gfc_typespec *ts) +{ + ts->type = BT_UNKNOWN; + ts->derived = NULL; + ts->kind = 0; + ts->cl = NULL; + ts->interface = NULL; + /* flag that says if the type is C interoperable */ + ts->is_c_interop = 0; + /* says what f90 type the C kind interops with */ + ts->f90_type = BT_UNKNOWN; + /* flag that says whether it's from iso_c_binding or not */ + ts->is_iso_c = 0; +} + + +/* Open a file for reading. */ + +FILE * +gfc_open_file (const char *name) +{ + struct stat statbuf; + + if (!*name) + return stdin; + + if (stat (name, &statbuf) < 0) + return NULL; + + if (!S_ISREG (statbuf.st_mode)) + return NULL; + + return fopen (name, "r"); +} + + +/* Return a string for each type. */ + +const char * +gfc_basic_typename (bt type) +{ + const char *p; + + switch (type) + { + case BT_INTEGER: + p = "INTEGER"; + break; + case BT_REAL: + p = "REAL"; + break; + case BT_COMPLEX: + p = "COMPLEX"; + break; + case BT_LOGICAL: + p = "LOGICAL"; + break; + case BT_CHARACTER: + p = "CHARACTER"; + break; + case BT_HOLLERITH: + p = "HOLLERITH"; + break; + case BT_DERIVED: + p = "DERIVED"; + break; + case BT_PROCEDURE: + p = "PROCEDURE"; + break; + case BT_VOID: + p = "VOID"; + break; + case BT_UNKNOWN: + p = "UNKNOWN"; + break; + default: + gfc_internal_error ("gfc_basic_typename(): Undefined type"); + } + + return p; +} + + +/* Return a string describing the type and kind of a typespec. Because + we return alternating buffers, this subroutine can appear twice in + the argument list of a single statement. */ + +const char * +gfc_typename (gfc_typespec *ts) +{ + static char buffer1[GFC_MAX_SYMBOL_LEN + 7]; /* 7 for "TYPE()" + '\0'. */ + static char buffer2[GFC_MAX_SYMBOL_LEN + 7]; + static int flag = 0; + char *buffer; + + buffer = flag ? buffer1 : buffer2; + flag = !flag; + + switch (ts->type) + { + case BT_INTEGER: + sprintf (buffer, "INTEGER(%d)", ts->kind); + break; + case BT_REAL: + sprintf (buffer, "REAL(%d)", ts->kind); + break; + case BT_COMPLEX: + sprintf (buffer, "COMPLEX(%d)", ts->kind); + break; + case BT_LOGICAL: + sprintf (buffer, "LOGICAL(%d)", ts->kind); + break; + case BT_CHARACTER: + sprintf (buffer, "CHARACTER(%d)", ts->kind); + break; + case BT_HOLLERITH: + sprintf (buffer, "HOLLERITH"); + break; + case BT_DERIVED: + sprintf (buffer, "TYPE(%s)", ts->derived->name); + break; + case BT_PROCEDURE: + strcpy (buffer, "PROCEDURE"); + break; + case BT_UNKNOWN: + strcpy (buffer, "UNKNOWN"); + break; + default: + gfc_internal_error ("gfc_typename(): Undefined type"); + } + + return buffer; +} + + +/* Given an mstring array and a code, locate the code in the table, + returning a pointer to the string. */ + +const char * +gfc_code2string (const mstring *m, int code) +{ + while (m->string != NULL) + { + if (m->tag == code) + return m->string; + m++; + } + + gfc_internal_error ("gfc_code2string(): Bad code"); + /* Not reached */ +} + + +/* Given an mstring array and a string, returns the value of the tag + field. Returns the final tag if no matches to the string are found. */ + +int +gfc_string2code (const mstring *m, const char *string) +{ + for (; m->string != NULL; m++) + if (strcmp (m->string, string) == 0) + return m->tag; + + return m->tag; +} + + +/* Convert an intent code to a string. */ +/* TODO: move to gfortran.h as define. */ + +const char * +gfc_intent_string (sym_intent i) +{ + return gfc_code2string (intents, i); +} + + +/***************** Initialization functions ****************/ + +/* Top level initialization. */ + +void +gfc_init_1 (void) +{ + gfc_error_init_1 (); + gfc_scanner_init_1 (); + gfc_arith_init_1 (); + gfc_intrinsic_init_1 (); +} + + +/* Per program unit initialization. */ + +void +gfc_init_2 (void) +{ + gfc_symbol_init_2 (); + gfc_module_init_2 (); +} + + +/******************* Destructor functions ******************/ + +/* Call all of the top level destructors. */ + +void +gfc_done_1 (void) +{ + gfc_scanner_done_1 (); + gfc_intrinsic_done_1 (); + gfc_arith_done_1 (); +} + + +/* Per program unit destructors. */ + +void +gfc_done_2 (void) +{ + gfc_symbol_done_2 (); + gfc_module_done_2 (); +} + + +/* Returns the index into the table of C interoperable kinds where the + kind with the given name (c_kind_name) was found. */ + +int +get_c_kind(const char *c_kind_name, CInteropKind_t kinds_table[]) +{ + int index = 0; + + for (index = 0; index < ISOCBINDING_LAST; index++) + if (strcmp (kinds_table[index].name, c_kind_name) == 0) + return index; + + return ISOCBINDING_INVALID; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/module.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/module.c new file mode 100644 index 0000000000..d5a9f54a76 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/module.c @@ -0,0 +1,5322 @@ +/* Handle modules, which amounts to loading and saving symbols and + their attendant structures. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* The syntax of gfortran modules resembles that of lisp lists, i.e. a + sequence of atoms, which can be left or right parenthesis, names, + integers or strings. Parenthesis are always matched which allows + us to skip over sections at high speed without having to know + anything about the internal structure of the lists. A "name" is + usually a fortran 95 identifier, but can also start with '@' in + order to reference a hidden symbol. + + The first line of a module is an informational message about what + created the module, the file it came from and when it was created. + The second line is a warning for people not to edit the module. + The rest of the module looks like: + + ( ( ) + ( ) + ... + ) + ( ( ... ) + ... + ) + ( ( ... ) + ... + ) + ( ( ) + ... + ) + + ( equivalence list ) + + ( + + + ( ) + ... + ) + ( + + + ... + ) + + In general, symbols refer to other symbols by their symbol number, + which are zero based. Symbols are written to the module in no + particular order. */ + +#include "config.h" +#include "system.h" +#include "gfortran.h" +#include "arith.h" +#include "match.h" +#include "parse.h" /* FIXME */ +#include "md5.h" + +#define MODULE_EXTENSION ".mod" + +/* Don't put any single quote (') in MOD_VERSION, + if yout want it to be recognized. */ +#define MOD_VERSION "0" + + +/* Structure that describes a position within a module file. */ + +typedef struct +{ + int column, line; + fpos_t pos; +} +module_locus; + +/* Structure for list of symbols of intrinsic modules. */ +typedef struct +{ + int id; + const char *name; + int value; + int standard; +} +intmod_sym; + + +typedef enum +{ + P_UNKNOWN = 0, P_OTHER, P_NAMESPACE, P_COMPONENT, P_SYMBOL +} +pointer_t; + +/* The fixup structure lists pointers to pointers that have to + be updated when a pointer value becomes known. */ + +typedef struct fixup_t +{ + void **pointer; + struct fixup_t *next; +} +fixup_t; + + +/* Structure for holding extra info needed for pointers being read. */ + +typedef struct pointer_info +{ + BBT_HEADER (pointer_info); + int integer; + pointer_t type; + + /* The first component of each member of the union is the pointer + being stored. */ + + fixup_t *fixup; + + union + { + void *pointer; /* Member for doing pointer searches. */ + + struct + { + gfc_symbol *sym; + char true_name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1]; + enum + { UNUSED, NEEDED, USED } + state; + int ns, referenced, renamed; + module_locus where; + fixup_t *stfixup; + gfc_symtree *symtree; + char binding_label[GFC_MAX_SYMBOL_LEN + 1]; + } + rsym; + + struct + { + gfc_symbol *sym; + enum + { UNREFERENCED = 0, NEEDS_WRITE, WRITTEN } + state; + } + wsym; + } + u; + +} +pointer_info; + +#define gfc_get_pointer_info() XCNEW (pointer_info) + + +/* Local variables */ + +/* The FILE for the module we're reading or writing. */ +static FILE *module_fp; + +/* MD5 context structure. */ +static struct md5_ctx ctx; + +/* The name of the module we're reading (USE'ing) or writing. */ +static char module_name[GFC_MAX_SYMBOL_LEN + 1]; + +/* The way the module we're reading was specified. */ +static bool specified_nonint, specified_int; + +static int module_line, module_column, only_flag; +static enum +{ IO_INPUT, IO_OUTPUT } +iomode; + +static gfc_use_rename *gfc_rename_list; +static pointer_info *pi_root; +static int symbol_number; /* Counter for assigning symbol numbers */ + +/* Tells mio_expr_ref to make symbols for unused equivalence members. */ +static bool in_load_equiv; + +static locus use_locus; + + + +/*****************************************************************/ + +/* Pointer/integer conversion. Pointers between structures are stored + as integers in the module file. The next couple of subroutines + handle this translation for reading and writing. */ + +/* Recursively free the tree of pointer structures. */ + +static void +free_pi_tree (pointer_info *p) +{ + if (p == NULL) + return; + + if (p->fixup != NULL) + gfc_internal_error ("free_pi_tree(): Unresolved fixup"); + + free_pi_tree (p->left); + free_pi_tree (p->right); + + gfc_free (p); +} + + +/* Compare pointers when searching by pointer. Used when writing a + module. */ + +static int +compare_pointers (void *_sn1, void *_sn2) +{ + pointer_info *sn1, *sn2; + + sn1 = (pointer_info *) _sn1; + sn2 = (pointer_info *) _sn2; + + if (sn1->u.pointer < sn2->u.pointer) + return -1; + if (sn1->u.pointer > sn2->u.pointer) + return 1; + + return 0; +} + + +/* Compare integers when searching by integer. Used when reading a + module. */ + +static int +compare_integers (void *_sn1, void *_sn2) +{ + pointer_info *sn1, *sn2; + + sn1 = (pointer_info *) _sn1; + sn2 = (pointer_info *) _sn2; + + if (sn1->integer < sn2->integer) + return -1; + if (sn1->integer > sn2->integer) + return 1; + + return 0; +} + + +/* Initialize the pointer_info tree. */ + +static void +init_pi_tree (void) +{ + compare_fn compare; + pointer_info *p; + + pi_root = NULL; + compare = (iomode == IO_INPUT) ? compare_integers : compare_pointers; + + /* Pointer 0 is the NULL pointer. */ + p = gfc_get_pointer_info (); + p->u.pointer = NULL; + p->integer = 0; + p->type = P_OTHER; + + gfc_insert_bbt (&pi_root, p, compare); + + /* Pointer 1 is the current namespace. */ + p = gfc_get_pointer_info (); + p->u.pointer = gfc_current_ns; + p->integer = 1; + p->type = P_NAMESPACE; + + gfc_insert_bbt (&pi_root, p, compare); + + symbol_number = 2; +} + + +/* During module writing, call here with a pointer to something, + returning the pointer_info node. */ + +static pointer_info * +find_pointer (void *gp) +{ + pointer_info *p; + + p = pi_root; + while (p != NULL) + { + if (p->u.pointer == gp) + break; + p = (gp < p->u.pointer) ? p->left : p->right; + } + + return p; +} + + +/* Given a pointer while writing, returns the pointer_info tree node, + creating it if it doesn't exist. */ + +static pointer_info * +get_pointer (void *gp) +{ + pointer_info *p; + + p = find_pointer (gp); + if (p != NULL) + return p; + + /* Pointer doesn't have an integer. Give it one. */ + p = gfc_get_pointer_info (); + + p->u.pointer = gp; + p->integer = symbol_number++; + + gfc_insert_bbt (&pi_root, p, compare_pointers); + + return p; +} + + +/* Given an integer during reading, find it in the pointer_info tree, + creating the node if not found. */ + +static pointer_info * +get_integer (int integer) +{ + pointer_info *p, t; + int c; + + t.integer = integer; + + p = pi_root; + while (p != NULL) + { + c = compare_integers (&t, p); + if (c == 0) + break; + + p = (c < 0) ? p->left : p->right; + } + + if (p != NULL) + return p; + + p = gfc_get_pointer_info (); + p->integer = integer; + p->u.pointer = NULL; + + gfc_insert_bbt (&pi_root, p, compare_integers); + + return p; +} + + +/* Recursive function to find a pointer within a tree by brute force. */ + +static pointer_info * +fp2 (pointer_info *p, const void *target) +{ + pointer_info *q; + + if (p == NULL) + return NULL; + + if (p->u.pointer == target) + return p; + + q = fp2 (p->left, target); + if (q != NULL) + return q; + + return fp2 (p->right, target); +} + + +/* During reading, find a pointer_info node from the pointer value. + This amounts to a brute-force search. */ + +static pointer_info * +find_pointer2 (void *p) +{ + return fp2 (pi_root, p); +} + + +/* Resolve any fixups using a known pointer. */ + +static void +resolve_fixups (fixup_t *f, void *gp) +{ + fixup_t *next; + + for (; f; f = next) + { + next = f->next; + *(f->pointer) = gp; + gfc_free (f); + } +} + + +/* Call here during module reading when we know what pointer to + associate with an integer. Any fixups that exist are resolved at + this time. */ + +static void +associate_integer_pointer (pointer_info *p, void *gp) +{ + if (p->u.pointer != NULL) + gfc_internal_error ("associate_integer_pointer(): Already associated"); + + p->u.pointer = gp; + + resolve_fixups (p->fixup, gp); + + p->fixup = NULL; +} + + +/* During module reading, given an integer and a pointer to a pointer, + either store the pointer from an already-known value or create a + fixup structure in order to store things later. Returns zero if + the reference has been actually stored, or nonzero if the reference + must be fixed later (i.e., associate_integer_pointer must be called + sometime later. Returns the pointer_info structure. */ + +static pointer_info * +add_fixup (int integer, void *gp) +{ + pointer_info *p; + fixup_t *f; + char **cp; + + p = get_integer (integer); + + if (p->integer == 0 || p->u.pointer != NULL) + { + cp = (char **) gp; + *cp = (char *) p->u.pointer; + } + else + { + f = XCNEW (fixup_t); + + f->next = p->fixup; + p->fixup = f; + + f->pointer = (void **) gp; + } + + return p; +} + + +/*****************************************************************/ + +/* Parser related subroutines */ + +/* Free the rename list left behind by a USE statement. */ + +static void +free_rename (void) +{ + gfc_use_rename *next; + + for (; gfc_rename_list; gfc_rename_list = next) + { + next = gfc_rename_list->next; + gfc_free (gfc_rename_list); + } +} + + +/* Match a USE statement. */ + +match +gfc_match_use (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1], module_nature[GFC_MAX_SYMBOL_LEN + 1]; + gfc_use_rename *tail = NULL, *new_use; + interface_type type, type2; + gfc_intrinsic_op op; + match m; + + specified_int = false; + specified_nonint = false; + + if (gfc_match (" , ") == MATCH_YES) + { + if ((m = gfc_match (" %n ::", module_nature)) == MATCH_YES) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: module " + "nature in USE statement at %C") == FAILURE) + return MATCH_ERROR; + + if (strcmp (module_nature, "intrinsic") == 0) + specified_int = true; + else + { + if (strcmp (module_nature, "non_intrinsic") == 0) + specified_nonint = true; + else + { + gfc_error ("Module nature in USE statement at %C shall " + "be either INTRINSIC or NON_INTRINSIC"); + return MATCH_ERROR; + } + } + } + else + { + /* Help output a better error message than "Unclassifiable + statement". */ + gfc_match (" %n", module_nature); + if (strcmp (module_nature, "intrinsic") == 0 + || strcmp (module_nature, "non_intrinsic") == 0) + gfc_error ("\"::\" was expected after module nature at %C " + "but was not found"); + return m; + } + } + else + { + m = gfc_match (" ::"); + if (m == MATCH_YES && + gfc_notify_std (GFC_STD_F2003, "Fortran 2003: " + "\"USE :: module\" at %C") == FAILURE) + return MATCH_ERROR; + + if (m != MATCH_YES) + { + m = gfc_match ("% "); + if (m != MATCH_YES) + return m; + } + } + + use_locus = gfc_current_locus; + + m = gfc_match_name (module_name); + if (m != MATCH_YES) + return m; + + free_rename (); + only_flag = 0; + + if (gfc_match_eos () == MATCH_YES) + return MATCH_YES; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + + if (gfc_match (" only :") == MATCH_YES) + only_flag = 1; + + if (gfc_match_eos () == MATCH_YES) + return MATCH_YES; + + for (;;) + { + /* Get a new rename struct and add it to the rename list. */ + new_use = gfc_get_use_rename (); + new_use->where = gfc_current_locus; + new_use->found = 0; + + if (gfc_rename_list == NULL) + gfc_rename_list = new_use; + else + tail->next = new_use; + tail = new_use; + + /* See what kind of interface we're dealing with. Assume it is + not an operator. */ + new_use->op = INTRINSIC_NONE; + if (gfc_match_generic_spec (&type, name, &op) == MATCH_ERROR) + goto cleanup; + + switch (type) + { + case INTERFACE_NAMELESS: + gfc_error ("Missing generic specification in USE statement at %C"); + goto cleanup; + + case INTERFACE_USER_OP: + case INTERFACE_GENERIC: + m = gfc_match (" =>"); + + if (type == INTERFACE_USER_OP && m == MATCH_YES + && (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Renaming " + "operators in USE statements at %C") + == FAILURE)) + goto cleanup; + + if (type == INTERFACE_USER_OP) + new_use->op = INTRINSIC_USER; + + if (only_flag) + { + if (m != MATCH_YES) + strcpy (new_use->use_name, name); + else + { + strcpy (new_use->local_name, name); + m = gfc_match_generic_spec (&type2, new_use->use_name, &op); + if (type != type2) + goto syntax; + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + } + } + else + { + if (m != MATCH_YES) + goto syntax; + strcpy (new_use->local_name, name); + + m = gfc_match_generic_spec (&type2, new_use->use_name, &op); + if (type != type2) + goto syntax; + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + } + + if (strcmp (new_use->use_name, module_name) == 0 + || strcmp (new_use->local_name, module_name) == 0) + { + gfc_error ("The name '%s' at %C has already been used as " + "an external module name.", module_name); + goto cleanup; + } + break; + + case INTERFACE_INTRINSIC_OP: + new_use->op = op; + break; + + default: + gcc_unreachable (); + } + + if (gfc_match_eos () == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + + return MATCH_YES; + +syntax: + gfc_syntax_error (ST_USE); + +cleanup: + free_rename (); + return MATCH_ERROR; + } + + +/* Given a name and a number, inst, return the inst name + under which to load this symbol. Returns NULL if this + symbol shouldn't be loaded. If inst is zero, returns + the number of instances of this name. If interface is + true, a user-defined operator is sought, otherwise only + non-operators are sought. */ + +static const char * +find_use_name_n (const char *name, int *inst, bool interface) +{ + gfc_use_rename *u; + int i; + + i = 0; + for (u = gfc_rename_list; u; u = u->next) + { + if (strcmp (u->use_name, name) != 0 + || (u->op == INTRINSIC_USER && !interface) + || (u->op != INTRINSIC_USER && interface)) + continue; + if (++i == *inst) + break; + } + + if (!*inst) + { + *inst = i; + return NULL; + } + + if (u == NULL) + return only_flag ? NULL : name; + + u->found = 1; + + return (u->local_name[0] != '\0') ? u->local_name : name; +} + + +/* Given a name, return the name under which to load this symbol. + Returns NULL if this symbol shouldn't be loaded. */ + +static const char * +find_use_name (const char *name, bool interface) +{ + int i = 1; + return find_use_name_n (name, &i, interface); +} + + +/* Given a real name, return the number of use names associated with it. */ + +static int +number_use_names (const char *name, bool interface) +{ + int i = 0; + const char *c; + c = find_use_name_n (name, &i, interface); + return i; +} + + +/* Try to find the operator in the current list. */ + +static gfc_use_rename * +find_use_operator (gfc_intrinsic_op op) +{ + gfc_use_rename *u; + + for (u = gfc_rename_list; u; u = u->next) + if (u->op == op) + return u; + + return NULL; +} + + +/*****************************************************************/ + +/* The next couple of subroutines maintain a tree used to avoid a + brute-force search for a combination of true name and module name. + While symtree names, the name that a particular symbol is known by + can changed with USE statements, we still have to keep track of the + true names to generate the correct reference, and also avoid + loading the same real symbol twice in a program unit. + + When we start reading, the true name tree is built and maintained + as symbols are read. The tree is searched as we load new symbols + to see if it already exists someplace in the namespace. */ + +typedef struct true_name +{ + BBT_HEADER (true_name); + gfc_symbol *sym; +} +true_name; + +static true_name *true_name_root; + + +/* Compare two true_name structures. */ + +static int +compare_true_names (void *_t1, void *_t2) +{ + true_name *t1, *t2; + int c; + + t1 = (true_name *) _t1; + t2 = (true_name *) _t2; + + c = ((t1->sym->module > t2->sym->module) + - (t1->sym->module < t2->sym->module)); + if (c != 0) + return c; + + return strcmp (t1->sym->name, t2->sym->name); +} + + +/* Given a true name, search the true name tree to see if it exists + within the main namespace. */ + +static gfc_symbol * +find_true_name (const char *name, const char *module) +{ + true_name t, *p; + gfc_symbol sym; + int c; + + sym.name = gfc_get_string (name); + if (module != NULL) + sym.module = gfc_get_string (module); + else + sym.module = NULL; + t.sym = &sym; + + p = true_name_root; + while (p != NULL) + { + c = compare_true_names ((void *) (&t), (void *) p); + if (c == 0) + return p->sym; + + p = (c < 0) ? p->left : p->right; + } + + return NULL; +} + + +/* Given a gfc_symbol pointer that is not in the true name tree, add it. */ + +static void +add_true_name (gfc_symbol *sym) +{ + true_name *t; + + t = XCNEW (true_name); + t->sym = sym; + + gfc_insert_bbt (&true_name_root, t, compare_true_names); +} + + +/* Recursive function to build the initial true name tree by + recursively traversing the current namespace. */ + +static void +build_tnt (gfc_symtree *st) +{ + if (st == NULL) + return; + + build_tnt (st->left); + build_tnt (st->right); + + if (find_true_name (st->n.sym->name, st->n.sym->module) != NULL) + return; + + add_true_name (st->n.sym); +} + + +/* Initialize the true name tree with the current namespace. */ + +static void +init_true_name_tree (void) +{ + true_name_root = NULL; + build_tnt (gfc_current_ns->sym_root); +} + + +/* Recursively free a true name tree node. */ + +static void +free_true_name (true_name *t) +{ + if (t == NULL) + return; + free_true_name (t->left); + free_true_name (t->right); + + gfc_free (t); +} + + +/*****************************************************************/ + +/* Module reading and writing. */ + +typedef enum +{ + ATOM_NAME, ATOM_LPAREN, ATOM_RPAREN, ATOM_INTEGER, ATOM_STRING +} +atom_type; + +static atom_type last_atom; + + +/* The name buffer must be at least as long as a symbol name. Right + now it's not clear how we're going to store numeric constants-- + probably as a hexadecimal string, since this will allow the exact + number to be preserved (this can't be done by a decimal + representation). Worry about that later. TODO! */ + +#define MAX_ATOM_SIZE 100 + +static int atom_int; +static char *atom_string, atom_name[MAX_ATOM_SIZE]; + + +/* Report problems with a module. Error reporting is not very + elaborate, since this sorts of errors shouldn't really happen. + This subroutine never returns. */ + +static void bad_module (const char *) ATTRIBUTE_NORETURN; + +static void +bad_module (const char *msgid) +{ + fclose (module_fp); + + switch (iomode) + { + case IO_INPUT: + gfc_fatal_error ("Reading module %s at line %d column %d: %s", + module_name, module_line, module_column, msgid); + break; + case IO_OUTPUT: + gfc_fatal_error ("Writing module %s at line %d column %d: %s", + module_name, module_line, module_column, msgid); + break; + default: + gfc_fatal_error ("Module %s at line %d column %d: %s", + module_name, module_line, module_column, msgid); + break; + } +} + + +/* Set the module's input pointer. */ + +static void +set_module_locus (module_locus *m) +{ + module_column = m->column; + module_line = m->line; + fsetpos (module_fp, &m->pos); +} + + +/* Get the module's input pointer so that we can restore it later. */ + +static void +get_module_locus (module_locus *m) +{ + m->column = module_column; + m->line = module_line; + fgetpos (module_fp, &m->pos); +} + + +/* Get the next character in the module, updating our reckoning of + where we are. */ + +static int +module_char (void) +{ + int c; + + c = getc (module_fp); + + if (c == EOF) + bad_module ("Unexpected EOF"); + + if (c == '\n') + { + module_line++; + module_column = 0; + } + + module_column++; + return c; +} + + +/* Parse a string constant. The delimiter is guaranteed to be a + single quote. */ + +static void +parse_string (void) +{ + module_locus start; + int len, c; + char *p; + + get_module_locus (&start); + + len = 0; + + /* See how long the string is. */ + for ( ; ; ) + { + c = module_char (); + if (c == EOF) + bad_module ("Unexpected end of module in string constant"); + + if (c != '\'') + { + len++; + continue; + } + + c = module_char (); + if (c == '\'') + { + len++; + continue; + } + + break; + } + + set_module_locus (&start); + + atom_string = p = XCNEWVEC (char, len + 1); + + for (; len > 0; len--) + { + c = module_char (); + if (c == '\'') + module_char (); /* Guaranteed to be another \'. */ + *p++ = c; + } + + module_char (); /* Terminating \'. */ + *p = '\0'; /* C-style string for debug purposes. */ +} + + +/* Parse a small integer. */ + +static void +parse_integer (int c) +{ + module_locus m; + + atom_int = c - '0'; + + for (;;) + { + get_module_locus (&m); + + c = module_char (); + if (!ISDIGIT (c)) + break; + + atom_int = 10 * atom_int + c - '0'; + if (atom_int > 99999999) + bad_module ("Integer overflow"); + } + + set_module_locus (&m); +} + + +/* Parse a name. */ + +static void +parse_name (int c) +{ + module_locus m; + char *p; + int len; + + p = atom_name; + + *p++ = c; + len = 1; + + get_module_locus (&m); + + for (;;) + { + c = module_char (); + if (!ISALNUM (c) && c != '_' && c != '-') + break; + + *p++ = c; + if (++len > GFC_MAX_SYMBOL_LEN) + bad_module ("Name too long"); + } + + *p = '\0'; + + fseek (module_fp, -1, SEEK_CUR); + module_column = m.column + len - 1; + + if (c == '\n') + module_line--; +} + + +/* Read the next atom in the module's input stream. */ + +static atom_type +parse_atom (void) +{ + int c; + + do + { + c = module_char (); + } + while (c == ' ' || c == '\r' || c == '\n'); + + switch (c) + { + case '(': + return ATOM_LPAREN; + + case ')': + return ATOM_RPAREN; + + case '\'': + parse_string (); + return ATOM_STRING; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + parse_integer (c); + return ATOM_INTEGER; + + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + parse_name (c); + return ATOM_NAME; + + default: + bad_module ("Bad name"); + } + + /* Not reached. */ +} + + +/* Peek at the next atom on the input. */ + +static atom_type +peek_atom (void) +{ + module_locus m; + atom_type a; + + get_module_locus (&m); + + a = parse_atom (); + if (a == ATOM_STRING) + gfc_free (atom_string); + + set_module_locus (&m); + return a; +} + + +/* Read the next atom from the input, requiring that it be a + particular kind. */ + +static void +require_atom (atom_type type) +{ + module_locus m; + atom_type t; + const char *p; + + get_module_locus (&m); + + t = parse_atom (); + if (t != type) + { + switch (type) + { + case ATOM_NAME: + p = _("Expected name"); + break; + case ATOM_LPAREN: + p = _("Expected left parenthesis"); + break; + case ATOM_RPAREN: + p = _("Expected right parenthesis"); + break; + case ATOM_INTEGER: + p = _("Expected integer"); + break; + case ATOM_STRING: + p = _("Expected string"); + break; + default: + gfc_internal_error ("require_atom(): bad atom type required"); + } + + set_module_locus (&m); + bad_module (p); + } +} + + +/* Given a pointer to an mstring array, require that the current input + be one of the strings in the array. We return the enum value. */ + +static int +find_enum (const mstring *m) +{ + int i; + + i = gfc_string2code (m, atom_name); + if (i >= 0) + return i; + + bad_module ("find_enum(): Enum not found"); + + /* Not reached. */ +} + + +/**************** Module output subroutines ***************************/ + +/* Output a character to a module file. */ + +static void +write_char (char out) +{ + if (putc (out, module_fp) == EOF) + gfc_fatal_error ("Error writing modules file: %s", strerror (errno)); + + /* Add this to our MD5. */ + md5_process_bytes (&out, sizeof (out), &ctx); + + if (out != '\n') + module_column++; + else + { + module_column = 1; + module_line++; + } +} + + +/* Write an atom to a module. The line wrapping isn't perfect, but it + should work most of the time. This isn't that big of a deal, since + the file really isn't meant to be read by people anyway. */ + +static void +write_atom (atom_type atom, const void *v) +{ + char buffer[20]; + int i, len; + const char *p; + + switch (atom) + { + case ATOM_STRING: + case ATOM_NAME: + p = (const char *) v; + break; + + case ATOM_LPAREN: + p = "("; + break; + + case ATOM_RPAREN: + p = ")"; + break; + + case ATOM_INTEGER: + i = *((const int *) v); + if (i < 0) + gfc_internal_error ("write_atom(): Writing negative integer"); + + sprintf (buffer, "%d", i); + p = buffer; + break; + + default: + gfc_internal_error ("write_atom(): Trying to write dab atom"); + + } + + if(p == NULL || *p == '\0') + len = 0; + else + len = strlen (p); + + if (atom != ATOM_RPAREN) + { + if (module_column + len > 72) + write_char ('\n'); + else + { + + if (last_atom != ATOM_LPAREN && module_column != 1) + write_char (' '); + } + } + + if (atom == ATOM_STRING) + write_char ('\''); + + while (p != NULL && *p) + { + if (atom == ATOM_STRING && *p == '\'') + write_char ('\''); + write_char (*p++); + } + + if (atom == ATOM_STRING) + write_char ('\''); + + last_atom = atom; +} + + + +/***************** Mid-level I/O subroutines *****************/ + +/* These subroutines let their caller read or write atoms without + caring about which of the two is actually happening. This lets a + subroutine concentrate on the actual format of the data being + written. */ + +static void mio_expr (gfc_expr **); +pointer_info *mio_symbol_ref (gfc_symbol **); +pointer_info *mio_interface_rest (gfc_interface **); +static void mio_symtree_ref (gfc_symtree **); + +/* Read or write an enumerated value. On writing, we return the input + value for the convenience of callers. We avoid using an integer + pointer because enums are sometimes inside bitfields. */ + +static int +mio_name (int t, const mstring *m) +{ + if (iomode == IO_OUTPUT) + write_atom (ATOM_NAME, gfc_code2string (m, t)); + else + { + require_atom (ATOM_NAME); + t = find_enum (m); + } + + return t; +} + +/* Specialization of mio_name. */ + +#define DECL_MIO_NAME(TYPE) \ + static inline TYPE \ + MIO_NAME(TYPE) (TYPE t, const mstring *m) \ + { \ + return (TYPE) mio_name ((int) t, m); \ + } +#define MIO_NAME(TYPE) mio_name_##TYPE + +static void +mio_lparen (void) +{ + if (iomode == IO_OUTPUT) + write_atom (ATOM_LPAREN, NULL); + else + require_atom (ATOM_LPAREN); +} + + +static void +mio_rparen (void) +{ + if (iomode == IO_OUTPUT) + write_atom (ATOM_RPAREN, NULL); + else + require_atom (ATOM_RPAREN); +} + + +static void +mio_integer (int *ip) +{ + if (iomode == IO_OUTPUT) + write_atom (ATOM_INTEGER, ip); + else + { + require_atom (ATOM_INTEGER); + *ip = atom_int; + } +} + + +/* Read or write a character pointer that points to a string on the heap. */ + +static const char * +mio_allocated_string (const char *s) +{ + if (iomode == IO_OUTPUT) + { + write_atom (ATOM_STRING, s); + return s; + } + else + { + require_atom (ATOM_STRING); + return atom_string; + } +} + + +/* Functions for quoting and unquoting strings. */ + +static char * +quote_string (const gfc_char_t *s, const size_t slength) +{ + const gfc_char_t *p; + char *res, *q; + size_t len = 0, i; + + /* Calculate the length we'll need: a backslash takes two ("\\"), + non-printable characters take 10 ("\Uxxxxxxxx") and others take 1. */ + for (p = s, i = 0; i < slength; p++, i++) + { + if (*p == '\\') + len += 2; + else if (!gfc_wide_is_printable (*p)) + len += 10; + else + len++; + } + + q = res = XCNEWVEC (char, len + 1); + for (p = s, i = 0; i < slength; p++, i++) + { + if (*p == '\\') + *q++ = '\\', *q++ = '\\'; + else if (!gfc_wide_is_printable (*p)) + { + sprintf (q, "\\U%08" HOST_WIDE_INT_PRINT "x", + (unsigned HOST_WIDE_INT) *p); + q += 10; + } + else + *q++ = (unsigned char) *p; + } + + res[len] = '\0'; + return res; +} + +static gfc_char_t * +unquote_string (const char *s) +{ + size_t len, i; + const char *p; + gfc_char_t *res; + + for (p = s, len = 0; *p; p++, len++) + { + if (*p != '\\') + continue; + + if (p[1] == '\\') + p++; + else if (p[1] == 'U') + p += 9; /* That is a "\U????????". */ + else + gfc_internal_error ("unquote_string(): got bad string"); + } + + res = gfc_get_wide_string (len + 1); + for (i = 0, p = s; i < len; i++, p++) + { + gcc_assert (*p); + + if (*p != '\\') + res[i] = (unsigned char) *p; + else if (p[1] == '\\') + { + res[i] = (unsigned char) '\\'; + p++; + } + else + { + /* We read the 8-digits hexadecimal constant that follows. */ + int j; + unsigned n; + gfc_char_t c = 0; + + gcc_assert (p[1] == 'U'); + for (j = 0; j < 8; j++) + { + c = c << 4; + gcc_assert (sscanf (&p[j+2], "%01x", &n) == 1); + c += n; + } + + res[i] = c; + p += 9; + } + } + + res[len] = '\0'; + return res; +} + + +/* Read or write a character pointer that points to a wide string on the + heap, performing quoting/unquoting of nonprintable characters using the + form \U???????? (where each ? is a hexadecimal digit). + Length is the length of the string, only known and used in output mode. */ + +static const gfc_char_t * +mio_allocated_wide_string (const gfc_char_t *s, const size_t length) +{ + if (iomode == IO_OUTPUT) + { + char *quoted = quote_string (s, length); + write_atom (ATOM_STRING, quoted); + gfc_free (quoted); + return s; + } + else + { + gfc_char_t *unquoted; + + require_atom (ATOM_STRING); + unquoted = unquote_string (atom_string); + gfc_free (atom_string); + return unquoted; + } +} + + +/* Read or write a string that is in static memory. */ + +static void +mio_pool_string (const char **stringp) +{ + /* TODO: one could write the string only once, and refer to it via a + fixup pointer. */ + + /* As a special case we have to deal with a NULL string. This + happens for the 'module' member of 'gfc_symbol's that are not in a + module. We read / write these as the empty string. */ + if (iomode == IO_OUTPUT) + { + const char *p = *stringp == NULL ? "" : *stringp; + write_atom (ATOM_STRING, p); + } + else + { + require_atom (ATOM_STRING); + *stringp = atom_string[0] == '\0' ? NULL : gfc_get_string (atom_string); + gfc_free (atom_string); + } +} + + +/* Read or write a string that is inside of some already-allocated + structure. */ + +static void +mio_internal_string (char *string) +{ + if (iomode == IO_OUTPUT) + write_atom (ATOM_STRING, string); + else + { + require_atom (ATOM_STRING); + strcpy (string, atom_string); + gfc_free (atom_string); + } +} + + +typedef enum +{ AB_ALLOCATABLE, AB_DIMENSION, AB_EXTERNAL, AB_INTRINSIC, AB_OPTIONAL, + AB_POINTER, AB_TARGET, AB_DUMMY, AB_RESULT, AB_DATA, + AB_IN_NAMELIST, AB_IN_COMMON, AB_FUNCTION, AB_SUBROUTINE, AB_SEQUENCE, + AB_ELEMENTAL, AB_PURE, AB_RECURSIVE, AB_GENERIC, AB_ALWAYS_EXPLICIT, + AB_CRAY_POINTER, AB_CRAY_POINTEE, AB_THREADPRIVATE, AB_ALLOC_COMP, + AB_POINTER_COMP, AB_PRIVATE_COMP, AB_VALUE, AB_VOLATILE, AB_PROTECTED, + AB_IS_BIND_C, AB_IS_C_INTEROP, AB_IS_ISO_C, AB_ABSTRACT, AB_ZERO_COMP, + AB_EXTENSION, AB_PROCEDURE, AB_PROC_POINTER +} +ab_attribute; + +static const mstring attr_bits[] = +{ + minit ("ALLOCATABLE", AB_ALLOCATABLE), + minit ("DIMENSION", AB_DIMENSION), + minit ("EXTERNAL", AB_EXTERNAL), + minit ("INTRINSIC", AB_INTRINSIC), + minit ("OPTIONAL", AB_OPTIONAL), + minit ("POINTER", AB_POINTER), + minit ("VOLATILE", AB_VOLATILE), + minit ("TARGET", AB_TARGET), + minit ("THREADPRIVATE", AB_THREADPRIVATE), + minit ("DUMMY", AB_DUMMY), + minit ("RESULT", AB_RESULT), + minit ("DATA", AB_DATA), + minit ("IN_NAMELIST", AB_IN_NAMELIST), + minit ("IN_COMMON", AB_IN_COMMON), + minit ("FUNCTION", AB_FUNCTION), + minit ("SUBROUTINE", AB_SUBROUTINE), + minit ("SEQUENCE", AB_SEQUENCE), + minit ("ELEMENTAL", AB_ELEMENTAL), + minit ("PURE", AB_PURE), + minit ("RECURSIVE", AB_RECURSIVE), + minit ("GENERIC", AB_GENERIC), + minit ("ALWAYS_EXPLICIT", AB_ALWAYS_EXPLICIT), + minit ("CRAY_POINTER", AB_CRAY_POINTER), + minit ("CRAY_POINTEE", AB_CRAY_POINTEE), + minit ("IS_BIND_C", AB_IS_BIND_C), + minit ("IS_C_INTEROP", AB_IS_C_INTEROP), + minit ("IS_ISO_C", AB_IS_ISO_C), + minit ("VALUE", AB_VALUE), + minit ("ALLOC_COMP", AB_ALLOC_COMP), + minit ("POINTER_COMP", AB_POINTER_COMP), + minit ("PRIVATE_COMP", AB_PRIVATE_COMP), + minit ("ZERO_COMP", AB_ZERO_COMP), + minit ("PROTECTED", AB_PROTECTED), + minit ("ABSTRACT", AB_ABSTRACT), + minit ("EXTENSION", AB_EXTENSION), + minit ("PROCEDURE", AB_PROCEDURE), + minit ("PROC_POINTER", AB_PROC_POINTER), + minit (NULL, -1) +}; + +/* For binding attributes. */ +static const mstring binding_passing[] = +{ + minit ("PASS", 0), + minit ("NOPASS", 1), + minit (NULL, -1) +}; +static const mstring binding_overriding[] = +{ + minit ("OVERRIDABLE", 0), + minit ("NON_OVERRIDABLE", 1), + minit (NULL, -1) +}; +static const mstring binding_generic[] = +{ + minit ("SPECIFIC", 0), + minit ("GENERIC", 1), + minit (NULL, -1) +}; + + +/* Specialization of mio_name. */ +DECL_MIO_NAME (ab_attribute) +DECL_MIO_NAME (ar_type) +DECL_MIO_NAME (array_type) +DECL_MIO_NAME (bt) +DECL_MIO_NAME (expr_t) +DECL_MIO_NAME (gfc_access) +DECL_MIO_NAME (gfc_intrinsic_op) +DECL_MIO_NAME (ifsrc) +DECL_MIO_NAME (save_state) +DECL_MIO_NAME (procedure_type) +DECL_MIO_NAME (ref_type) +DECL_MIO_NAME (sym_flavor) +DECL_MIO_NAME (sym_intent) +#undef DECL_MIO_NAME + +/* Symbol attributes are stored in list with the first three elements + being the enumerated fields, while the remaining elements (if any) + indicate the individual attribute bits. The access field is not + saved-- it controls what symbols are exported when a module is + written. */ + +static void +mio_symbol_attribute (symbol_attribute *attr) +{ + atom_type t; + + mio_lparen (); + + attr->flavor = MIO_NAME (sym_flavor) (attr->flavor, flavors); + attr->intent = MIO_NAME (sym_intent) (attr->intent, intents); + attr->proc = MIO_NAME (procedure_type) (attr->proc, procedures); + attr->if_source = MIO_NAME (ifsrc) (attr->if_source, ifsrc_types); + attr->save = MIO_NAME (save_state) (attr->save, save_status); + + if (iomode == IO_OUTPUT) + { + if (attr->allocatable) + MIO_NAME (ab_attribute) (AB_ALLOCATABLE, attr_bits); + if (attr->dimension) + MIO_NAME (ab_attribute) (AB_DIMENSION, attr_bits); + if (attr->external) + MIO_NAME (ab_attribute) (AB_EXTERNAL, attr_bits); + if (attr->intrinsic) + MIO_NAME (ab_attribute) (AB_INTRINSIC, attr_bits); + if (attr->optional) + MIO_NAME (ab_attribute) (AB_OPTIONAL, attr_bits); + if (attr->pointer) + MIO_NAME (ab_attribute) (AB_POINTER, attr_bits); + if (attr->is_protected) + MIO_NAME (ab_attribute) (AB_PROTECTED, attr_bits); + if (attr->value) + MIO_NAME (ab_attribute) (AB_VALUE, attr_bits); + if (attr->volatile_) + MIO_NAME (ab_attribute) (AB_VOLATILE, attr_bits); + if (attr->target) + MIO_NAME (ab_attribute) (AB_TARGET, attr_bits); + if (attr->threadprivate) + MIO_NAME (ab_attribute) (AB_THREADPRIVATE, attr_bits); + if (attr->dummy) + MIO_NAME (ab_attribute) (AB_DUMMY, attr_bits); + if (attr->result) + MIO_NAME (ab_attribute) (AB_RESULT, attr_bits); + /* We deliberately don't preserve the "entry" flag. */ + + if (attr->data) + MIO_NAME (ab_attribute) (AB_DATA, attr_bits); + if (attr->in_namelist) + MIO_NAME (ab_attribute) (AB_IN_NAMELIST, attr_bits); + if (attr->in_common) + MIO_NAME (ab_attribute) (AB_IN_COMMON, attr_bits); + + if (attr->function) + MIO_NAME (ab_attribute) (AB_FUNCTION, attr_bits); + if (attr->subroutine) + MIO_NAME (ab_attribute) (AB_SUBROUTINE, attr_bits); + if (attr->generic) + MIO_NAME (ab_attribute) (AB_GENERIC, attr_bits); + if (attr->abstract) + MIO_NAME (ab_attribute) (AB_ABSTRACT, attr_bits); + + if (attr->sequence) + MIO_NAME (ab_attribute) (AB_SEQUENCE, attr_bits); + if (attr->elemental) + MIO_NAME (ab_attribute) (AB_ELEMENTAL, attr_bits); + if (attr->pure) + MIO_NAME (ab_attribute) (AB_PURE, attr_bits); + if (attr->recursive) + MIO_NAME (ab_attribute) (AB_RECURSIVE, attr_bits); + if (attr->always_explicit) + MIO_NAME (ab_attribute) (AB_ALWAYS_EXPLICIT, attr_bits); + if (attr->cray_pointer) + MIO_NAME (ab_attribute) (AB_CRAY_POINTER, attr_bits); + if (attr->cray_pointee) + MIO_NAME (ab_attribute) (AB_CRAY_POINTEE, attr_bits); + if (attr->is_bind_c) + MIO_NAME(ab_attribute) (AB_IS_BIND_C, attr_bits); + if (attr->is_c_interop) + MIO_NAME(ab_attribute) (AB_IS_C_INTEROP, attr_bits); + if (attr->is_iso_c) + MIO_NAME(ab_attribute) (AB_IS_ISO_C, attr_bits); + if (attr->alloc_comp) + MIO_NAME (ab_attribute) (AB_ALLOC_COMP, attr_bits); + if (attr->pointer_comp) + MIO_NAME (ab_attribute) (AB_POINTER_COMP, attr_bits); + if (attr->private_comp) + MIO_NAME (ab_attribute) (AB_PRIVATE_COMP, attr_bits); + if (attr->zero_comp) + MIO_NAME (ab_attribute) (AB_ZERO_COMP, attr_bits); + if (attr->extension) + MIO_NAME (ab_attribute) (AB_EXTENSION, attr_bits); + if (attr->procedure) + MIO_NAME (ab_attribute) (AB_PROCEDURE, attr_bits); + if (attr->proc_pointer) + MIO_NAME (ab_attribute) (AB_PROC_POINTER, attr_bits); + + mio_rparen (); + + } + else + { + for (;;) + { + t = parse_atom (); + if (t == ATOM_RPAREN) + break; + if (t != ATOM_NAME) + bad_module ("Expected attribute bit name"); + + switch ((ab_attribute) find_enum (attr_bits)) + { + case AB_ALLOCATABLE: + attr->allocatable = 1; + break; + case AB_DIMENSION: + attr->dimension = 1; + break; + case AB_EXTERNAL: + attr->external = 1; + break; + case AB_INTRINSIC: + attr->intrinsic = 1; + break; + case AB_OPTIONAL: + attr->optional = 1; + break; + case AB_POINTER: + attr->pointer = 1; + break; + case AB_PROTECTED: + attr->is_protected = 1; + break; + case AB_VALUE: + attr->value = 1; + break; + case AB_VOLATILE: + attr->volatile_ = 1; + break; + case AB_TARGET: + attr->target = 1; + break; + case AB_THREADPRIVATE: + attr->threadprivate = 1; + break; + case AB_DUMMY: + attr->dummy = 1; + break; + case AB_RESULT: + attr->result = 1; + break; + case AB_DATA: + attr->data = 1; + break; + case AB_IN_NAMELIST: + attr->in_namelist = 1; + break; + case AB_IN_COMMON: + attr->in_common = 1; + break; + case AB_FUNCTION: + attr->function = 1; + break; + case AB_SUBROUTINE: + attr->subroutine = 1; + break; + case AB_GENERIC: + attr->generic = 1; + break; + case AB_ABSTRACT: + attr->abstract = 1; + break; + case AB_SEQUENCE: + attr->sequence = 1; + break; + case AB_ELEMENTAL: + attr->elemental = 1; + break; + case AB_PURE: + attr->pure = 1; + break; + case AB_RECURSIVE: + attr->recursive = 1; + break; + case AB_ALWAYS_EXPLICIT: + attr->always_explicit = 1; + break; + case AB_CRAY_POINTER: + attr->cray_pointer = 1; + break; + case AB_CRAY_POINTEE: + attr->cray_pointee = 1; + break; + case AB_IS_BIND_C: + attr->is_bind_c = 1; + break; + case AB_IS_C_INTEROP: + attr->is_c_interop = 1; + break; + case AB_IS_ISO_C: + attr->is_iso_c = 1; + break; + case AB_ALLOC_COMP: + attr->alloc_comp = 1; + break; + case AB_POINTER_COMP: + attr->pointer_comp = 1; + break; + case AB_PRIVATE_COMP: + attr->private_comp = 1; + break; + case AB_ZERO_COMP: + attr->zero_comp = 1; + break; + case AB_EXTENSION: + attr->extension = 1; + break; + case AB_PROCEDURE: + attr->procedure = 1; + break; + case AB_PROC_POINTER: + attr->proc_pointer = 1; + break; + } + } + } +} + + +static const mstring bt_types[] = { + minit ("INTEGER", BT_INTEGER), + minit ("REAL", BT_REAL), + minit ("COMPLEX", BT_COMPLEX), + minit ("LOGICAL", BT_LOGICAL), + minit ("CHARACTER", BT_CHARACTER), + minit ("DERIVED", BT_DERIVED), + minit ("PROCEDURE", BT_PROCEDURE), + minit ("UNKNOWN", BT_UNKNOWN), + minit ("VOID", BT_VOID), + minit (NULL, -1) +}; + + +static void +mio_charlen (gfc_charlen **clp) +{ + gfc_charlen *cl; + + mio_lparen (); + + if (iomode == IO_OUTPUT) + { + cl = *clp; + if (cl != NULL) + mio_expr (&cl->length); + } + else + { + if (peek_atom () != ATOM_RPAREN) + { + cl = gfc_get_charlen (); + mio_expr (&cl->length); + + *clp = cl; + + cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = cl; + } + } + + mio_rparen (); +} + + +/* See if a name is a generated name. */ + +static int +check_unique_name (const char *name) +{ + return *name == '@'; +} + + +static void +mio_typespec (gfc_typespec *ts) +{ + mio_lparen (); + + ts->type = MIO_NAME (bt) (ts->type, bt_types); + + if (ts->type != BT_DERIVED) + mio_integer (&ts->kind); + else + mio_symbol_ref (&ts->derived); + + /* Add info for C interop and is_iso_c. */ + mio_integer (&ts->is_c_interop); + mio_integer (&ts->is_iso_c); + + /* If the typespec is for an identifier either from iso_c_binding, or + a constant that was initialized to an identifier from it, use the + f90_type. Otherwise, use the ts->type, since it shouldn't matter. */ + if (ts->is_iso_c) + ts->f90_type = MIO_NAME (bt) (ts->f90_type, bt_types); + else + ts->f90_type = MIO_NAME (bt) (ts->type, bt_types); + + if (ts->type != BT_CHARACTER) + { + /* ts->cl is only valid for BT_CHARACTER. */ + mio_lparen (); + mio_rparen (); + } + else + mio_charlen (&ts->cl); + + mio_rparen (); +} + + +static const mstring array_spec_types[] = { + minit ("EXPLICIT", AS_EXPLICIT), + minit ("ASSUMED_SHAPE", AS_ASSUMED_SHAPE), + minit ("DEFERRED", AS_DEFERRED), + minit ("ASSUMED_SIZE", AS_ASSUMED_SIZE), + minit (NULL, -1) +}; + + +static void +mio_array_spec (gfc_array_spec **asp) +{ + gfc_array_spec *as; + int i; + + mio_lparen (); + + if (iomode == IO_OUTPUT) + { + if (*asp == NULL) + goto done; + as = *asp; + } + else + { + if (peek_atom () == ATOM_RPAREN) + { + *asp = NULL; + goto done; + } + + *asp = as = gfc_get_array_spec (); + } + + mio_integer (&as->rank); + as->type = MIO_NAME (array_type) (as->type, array_spec_types); + + for (i = 0; i < as->rank; i++) + { + mio_expr (&as->lower[i]); + mio_expr (&as->upper[i]); + } + +done: + mio_rparen (); +} + + +/* Given a pointer to an array reference structure (which lives in a + gfc_ref structure), find the corresponding array specification + structure. Storing the pointer in the ref structure doesn't quite + work when loading from a module. Generating code for an array + reference also needs more information than just the array spec. */ + +static const mstring array_ref_types[] = { + minit ("FULL", AR_FULL), + minit ("ELEMENT", AR_ELEMENT), + minit ("SECTION", AR_SECTION), + minit (NULL, -1) +}; + + +static void +mio_array_ref (gfc_array_ref *ar) +{ + int i; + + mio_lparen (); + ar->type = MIO_NAME (ar_type) (ar->type, array_ref_types); + mio_integer (&ar->dimen); + + switch (ar->type) + { + case AR_FULL: + break; + + case AR_ELEMENT: + for (i = 0; i < ar->dimen; i++) + mio_expr (&ar->start[i]); + + break; + + case AR_SECTION: + for (i = 0; i < ar->dimen; i++) + { + mio_expr (&ar->start[i]); + mio_expr (&ar->end[i]); + mio_expr (&ar->stride[i]); + } + + break; + + case AR_UNKNOWN: + gfc_internal_error ("mio_array_ref(): Unknown array ref"); + } + + /* Unfortunately, ar->dimen_type is an anonymous enumerated type so + we can't call mio_integer directly. Instead loop over each element + and cast it to/from an integer. */ + if (iomode == IO_OUTPUT) + { + for (i = 0; i < ar->dimen; i++) + { + int tmp = (int)ar->dimen_type[i]; + write_atom (ATOM_INTEGER, &tmp); + } + } + else + { + for (i = 0; i < ar->dimen; i++) + { + require_atom (ATOM_INTEGER); + ar->dimen_type[i] = atom_int; + } + } + + if (iomode == IO_INPUT) + { + ar->where = gfc_current_locus; + + for (i = 0; i < ar->dimen; i++) + ar->c_where[i] = gfc_current_locus; + } + + mio_rparen (); +} + + +/* Saves or restores a pointer. The pointer is converted back and + forth from an integer. We return the pointer_info pointer so that + the caller can take additional action based on the pointer type. */ + +static pointer_info * +mio_pointer_ref (void *gp) +{ + pointer_info *p; + + if (iomode == IO_OUTPUT) + { + p = get_pointer (*((char **) gp)); + write_atom (ATOM_INTEGER, &p->integer); + } + else + { + require_atom (ATOM_INTEGER); + p = add_fixup (atom_int, gp); + } + + return p; +} + + +/* Save and load references to components that occur within + expressions. We have to describe these references by a number and + by name. The number is necessary for forward references during + reading, and the name is necessary if the symbol already exists in + the namespace and is not loaded again. */ + +static void +mio_component_ref (gfc_component **cp, gfc_symbol *sym) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_component *q; + pointer_info *p; + + p = mio_pointer_ref (cp); + if (p->type == P_UNKNOWN) + p->type = P_COMPONENT; + + if (iomode == IO_OUTPUT) + mio_pool_string (&(*cp)->name); + else + { + mio_internal_string (name); + + /* It can happen that a component reference can be read before the + associated derived type symbol has been loaded. Return now and + wait for a later iteration of load_needed. */ + if (sym == NULL) + return; + + if (sym->components != NULL && p->u.pointer == NULL) + { + /* Symbol already loaded, so search by name. */ + for (q = sym->components; q; q = q->next) + if (strcmp (q->name, name) == 0) + break; + + if (q == NULL) + gfc_internal_error ("mio_component_ref(): Component not found"); + + associate_integer_pointer (p, q); + } + + /* Make sure this symbol will eventually be loaded. */ + p = find_pointer2 (sym); + if (p->u.rsym.state == UNUSED) + p->u.rsym.state = NEEDED; + } +} + + +static void +mio_component (gfc_component *c) +{ + pointer_info *p; + int n; + + mio_lparen (); + + if (iomode == IO_OUTPUT) + { + p = get_pointer (c); + mio_integer (&p->integer); + } + else + { + mio_integer (&n); + p = get_integer (n); + associate_integer_pointer (p, c); + } + + if (p->type == P_UNKNOWN) + p->type = P_COMPONENT; + + mio_pool_string (&c->name); + mio_typespec (&c->ts); + mio_array_spec (&c->as); + + mio_symbol_attribute (&c->attr); + c->attr.access = MIO_NAME (gfc_access) (c->attr.access, access_types); + + mio_expr (&c->initializer); + mio_rparen (); +} + + +static void +mio_component_list (gfc_component **cp) +{ + gfc_component *c, *tail; + + mio_lparen (); + + if (iomode == IO_OUTPUT) + { + for (c = *cp; c; c = c->next) + mio_component (c); + } + else + { + *cp = NULL; + tail = NULL; + + for (;;) + { + if (peek_atom () == ATOM_RPAREN) + break; + + c = gfc_get_component (); + mio_component (c); + + if (tail == NULL) + *cp = c; + else + tail->next = c; + + tail = c; + } + } + + mio_rparen (); +} + + +static void +mio_actual_arg (gfc_actual_arglist *a) +{ + mio_lparen (); + mio_pool_string (&a->name); + mio_expr (&a->expr); + mio_rparen (); +} + + +static void +mio_actual_arglist (gfc_actual_arglist **ap) +{ + gfc_actual_arglist *a, *tail; + + mio_lparen (); + + if (iomode == IO_OUTPUT) + { + for (a = *ap; a; a = a->next) + mio_actual_arg (a); + + } + else + { + tail = NULL; + + for (;;) + { + if (peek_atom () != ATOM_LPAREN) + break; + + a = gfc_get_actual_arglist (); + + if (tail == NULL) + *ap = a; + else + tail->next = a; + + tail = a; + mio_actual_arg (a); + } + } + + mio_rparen (); +} + + +/* Read and write formal argument lists. */ + +static void +mio_formal_arglist (gfc_symbol *sym) +{ + gfc_formal_arglist *f, *tail; + + mio_lparen (); + + if (iomode == IO_OUTPUT) + { + for (f = sym->formal; f; f = f->next) + mio_symbol_ref (&f->sym); + } + else + { + sym->formal = tail = NULL; + + while (peek_atom () != ATOM_RPAREN) + { + f = gfc_get_formal_arglist (); + mio_symbol_ref (&f->sym); + + if (sym->formal == NULL) + sym->formal = f; + else + tail->next = f; + + tail = f; + } + } + + mio_rparen (); +} + + +/* Save or restore a reference to a symbol node. */ + +pointer_info * +mio_symbol_ref (gfc_symbol **symp) +{ + pointer_info *p; + + p = mio_pointer_ref (symp); + if (p->type == P_UNKNOWN) + p->type = P_SYMBOL; + + if (iomode == IO_OUTPUT) + { + if (p->u.wsym.state == UNREFERENCED) + p->u.wsym.state = NEEDS_WRITE; + } + else + { + if (p->u.rsym.state == UNUSED) + p->u.rsym.state = NEEDED; + } + return p; +} + + +/* Save or restore a reference to a symtree node. */ + +static void +mio_symtree_ref (gfc_symtree **stp) +{ + pointer_info *p; + fixup_t *f; + + if (iomode == IO_OUTPUT) + mio_symbol_ref (&(*stp)->n.sym); + else + { + require_atom (ATOM_INTEGER); + p = get_integer (atom_int); + + /* An unused equivalence member; make a symbol and a symtree + for it. */ + if (in_load_equiv && p->u.rsym.symtree == NULL) + { + /* Since this is not used, it must have a unique name. */ + p->u.rsym.symtree = gfc_get_unique_symtree (gfc_current_ns); + + /* Make the symbol. */ + if (p->u.rsym.sym == NULL) + { + p->u.rsym.sym = gfc_new_symbol (p->u.rsym.true_name, + gfc_current_ns); + p->u.rsym.sym->module = gfc_get_string (p->u.rsym.module); + } + + p->u.rsym.symtree->n.sym = p->u.rsym.sym; + p->u.rsym.symtree->n.sym->refs++; + p->u.rsym.referenced = 1; + + /* If the symbol is PRIVATE and in COMMON, load_commons will + generate a fixup symbol, which must be associated. */ + if (p->fixup) + resolve_fixups (p->fixup, p->u.rsym.sym); + p->fixup = NULL; + } + + if (p->type == P_UNKNOWN) + p->type = P_SYMBOL; + + if (p->u.rsym.state == UNUSED) + p->u.rsym.state = NEEDED; + + if (p->u.rsym.symtree != NULL) + { + *stp = p->u.rsym.symtree; + } + else + { + f = XCNEW (fixup_t); + + f->next = p->u.rsym.stfixup; + p->u.rsym.stfixup = f; + + f->pointer = (void **) stp; + } + } +} + + +static void +mio_iterator (gfc_iterator **ip) +{ + gfc_iterator *iter; + + mio_lparen (); + + if (iomode == IO_OUTPUT) + { + if (*ip == NULL) + goto done; + } + else + { + if (peek_atom () == ATOM_RPAREN) + { + *ip = NULL; + goto done; + } + + *ip = gfc_get_iterator (); + } + + iter = *ip; + + mio_expr (&iter->var); + mio_expr (&iter->start); + mio_expr (&iter->end); + mio_expr (&iter->step); + +done: + mio_rparen (); +} + + +static void +mio_constructor (gfc_constructor **cp) +{ + gfc_constructor *c, *tail; + + mio_lparen (); + + if (iomode == IO_OUTPUT) + { + for (c = *cp; c; c = c->next) + { + mio_lparen (); + mio_expr (&c->expr); + mio_iterator (&c->iterator); + mio_rparen (); + } + } + else + { + *cp = NULL; + tail = NULL; + + while (peek_atom () != ATOM_RPAREN) + { + c = gfc_get_constructor (); + + if (tail == NULL) + *cp = c; + else + tail->next = c; + + tail = c; + + mio_lparen (); + mio_expr (&c->expr); + mio_iterator (&c->iterator); + mio_rparen (); + } + } + + mio_rparen (); +} + + +static const mstring ref_types[] = { + minit ("ARRAY", REF_ARRAY), + minit ("COMPONENT", REF_COMPONENT), + minit ("SUBSTRING", REF_SUBSTRING), + minit (NULL, -1) +}; + + +static void +mio_ref (gfc_ref **rp) +{ + gfc_ref *r; + + mio_lparen (); + + r = *rp; + r->type = MIO_NAME (ref_type) (r->type, ref_types); + + switch (r->type) + { + case REF_ARRAY: + mio_array_ref (&r->u.ar); + break; + + case REF_COMPONENT: + mio_symbol_ref (&r->u.c.sym); + mio_component_ref (&r->u.c.component, r->u.c.sym); + break; + + case REF_SUBSTRING: + mio_expr (&r->u.ss.start); + mio_expr (&r->u.ss.end); + mio_charlen (&r->u.ss.length); + break; + } + + mio_rparen (); +} + + +static void +mio_ref_list (gfc_ref **rp) +{ + gfc_ref *ref, *head, *tail; + + mio_lparen (); + + if (iomode == IO_OUTPUT) + { + for (ref = *rp; ref; ref = ref->next) + mio_ref (&ref); + } + else + { + head = tail = NULL; + + while (peek_atom () != ATOM_RPAREN) + { + if (head == NULL) + head = tail = gfc_get_ref (); + else + { + tail->next = gfc_get_ref (); + tail = tail->next; + } + + mio_ref (&tail); + } + + *rp = head; + } + + mio_rparen (); +} + + +/* Read and write an integer value. */ + +static void +mio_gmp_integer (mpz_t *integer) +{ + char *p; + + if (iomode == IO_INPUT) + { + if (parse_atom () != ATOM_STRING) + bad_module ("Expected integer string"); + + mpz_init (*integer); + if (mpz_set_str (*integer, atom_string, 10)) + bad_module ("Error converting integer"); + + gfc_free (atom_string); + } + else + { + p = mpz_get_str (NULL, 10, *integer); + write_atom (ATOM_STRING, p); + gfc_free (p); + } +} + + +static void +mio_gmp_real (mpfr_t *real) +{ + mp_exp_t exponent; + char *p; + + if (iomode == IO_INPUT) + { + if (parse_atom () != ATOM_STRING) + bad_module ("Expected real string"); + + mpfr_init (*real); + mpfr_set_str (*real, atom_string, 16, GFC_RND_MODE); + gfc_free (atom_string); + } + else + { + p = mpfr_get_str (NULL, &exponent, 16, 0, *real, GFC_RND_MODE); + + if (mpfr_nan_p (*real) || mpfr_inf_p (*real)) + { + write_atom (ATOM_STRING, p); + gfc_free (p); + return; + } + + atom_string = XCNEWVEC (char, strlen (p) + 20); + + sprintf (atom_string, "0.%s@%ld", p, exponent); + + /* Fix negative numbers. */ + if (atom_string[2] == '-') + { + atom_string[0] = '-'; + atom_string[1] = '0'; + atom_string[2] = '.'; + } + + write_atom (ATOM_STRING, atom_string); + + gfc_free (atom_string); + gfc_free (p); + } +} + + +/* Save and restore the shape of an array constructor. */ + +static void +mio_shape (mpz_t **pshape, int rank) +{ + mpz_t *shape; + atom_type t; + int n; + + /* A NULL shape is represented by (). */ + mio_lparen (); + + if (iomode == IO_OUTPUT) + { + shape = *pshape; + if (!shape) + { + mio_rparen (); + return; + } + } + else + { + t = peek_atom (); + if (t == ATOM_RPAREN) + { + *pshape = NULL; + mio_rparen (); + return; + } + + shape = gfc_get_shape (rank); + *pshape = shape; + } + + for (n = 0; n < rank; n++) + mio_gmp_integer (&shape[n]); + + mio_rparen (); +} + + +static const mstring expr_types[] = { + minit ("OP", EXPR_OP), + minit ("FUNCTION", EXPR_FUNCTION), + minit ("CONSTANT", EXPR_CONSTANT), + minit ("VARIABLE", EXPR_VARIABLE), + minit ("SUBSTRING", EXPR_SUBSTRING), + minit ("STRUCTURE", EXPR_STRUCTURE), + minit ("ARRAY", EXPR_ARRAY), + minit ("NULL", EXPR_NULL), + minit ("COMPCALL", EXPR_COMPCALL), + minit (NULL, -1) +}; + +/* INTRINSIC_ASSIGN is missing because it is used as an index for + generic operators, not in expressions. INTRINSIC_USER is also + replaced by the correct function name by the time we see it. */ + +static const mstring intrinsics[] = +{ + minit ("UPLUS", INTRINSIC_UPLUS), + minit ("UMINUS", INTRINSIC_UMINUS), + minit ("PLUS", INTRINSIC_PLUS), + minit ("MINUS", INTRINSIC_MINUS), + minit ("TIMES", INTRINSIC_TIMES), + minit ("DIVIDE", INTRINSIC_DIVIDE), + minit ("POWER", INTRINSIC_POWER), + minit ("CONCAT", INTRINSIC_CONCAT), + minit ("AND", INTRINSIC_AND), + minit ("OR", INTRINSIC_OR), + minit ("EQV", INTRINSIC_EQV), + minit ("NEQV", INTRINSIC_NEQV), + minit ("EQ_SIGN", INTRINSIC_EQ), + minit ("EQ", INTRINSIC_EQ_OS), + minit ("NE_SIGN", INTRINSIC_NE), + minit ("NE", INTRINSIC_NE_OS), + minit ("GT_SIGN", INTRINSIC_GT), + minit ("GT", INTRINSIC_GT_OS), + minit ("GE_SIGN", INTRINSIC_GE), + minit ("GE", INTRINSIC_GE_OS), + minit ("LT_SIGN", INTRINSIC_LT), + minit ("LT", INTRINSIC_LT_OS), + minit ("LE_SIGN", INTRINSIC_LE), + minit ("LE", INTRINSIC_LE_OS), + minit ("NOT", INTRINSIC_NOT), + minit ("PARENTHESES", INTRINSIC_PARENTHESES), + minit (NULL, -1) +}; + + +/* Remedy a couple of situations where the gfc_expr's can be defective. */ + +static void +fix_mio_expr (gfc_expr *e) +{ + gfc_symtree *ns_st = NULL; + const char *fname; + + if (iomode != IO_OUTPUT) + return; + + if (e->symtree) + { + /* If this is a symtree for a symbol that came from a contained module + namespace, it has a unique name and we should look in the current + namespace to see if the required, non-contained symbol is available + yet. If so, the latter should be written. */ + if (e->symtree->n.sym && check_unique_name (e->symtree->name)) + ns_st = gfc_find_symtree (gfc_current_ns->sym_root, + e->symtree->n.sym->name); + + /* On the other hand, if the existing symbol is the module name or the + new symbol is a dummy argument, do not do the promotion. */ + if (ns_st && ns_st->n.sym + && ns_st->n.sym->attr.flavor != FL_MODULE + && !e->symtree->n.sym->attr.dummy) + e->symtree = ns_st; + } + else if (e->expr_type == EXPR_FUNCTION && e->value.function.name) + { + /* In some circumstances, a function used in an initialization + expression, in one use associated module, can fail to be + coupled to its symtree when used in a specification + expression in another module. */ + fname = e->value.function.esym ? e->value.function.esym->name + : e->value.function.isym->name; + e->symtree = gfc_find_symtree (gfc_current_ns->sym_root, fname); + } +} + + +/* Read and write expressions. The form "()" is allowed to indicate a + NULL expression. */ + +static void +mio_expr (gfc_expr **ep) +{ + gfc_expr *e; + atom_type t; + int flag; + + mio_lparen (); + + if (iomode == IO_OUTPUT) + { + if (*ep == NULL) + { + mio_rparen (); + return; + } + + e = *ep; + MIO_NAME (expr_t) (e->expr_type, expr_types); + } + else + { + t = parse_atom (); + if (t == ATOM_RPAREN) + { + *ep = NULL; + return; + } + + if (t != ATOM_NAME) + bad_module ("Expected expression type"); + + e = *ep = gfc_get_expr (); + e->where = gfc_current_locus; + e->expr_type = (expr_t) find_enum (expr_types); + } + + mio_typespec (&e->ts); + mio_integer (&e->rank); + + fix_mio_expr (e); + + switch (e->expr_type) + { + case EXPR_OP: + e->value.op.op + = MIO_NAME (gfc_intrinsic_op) (e->value.op.op, intrinsics); + + switch (e->value.op.op) + { + case INTRINSIC_UPLUS: + case INTRINSIC_UMINUS: + case INTRINSIC_NOT: + case INTRINSIC_PARENTHESES: + mio_expr (&e->value.op.op1); + break; + + case INTRINSIC_PLUS: + case INTRINSIC_MINUS: + case INTRINSIC_TIMES: + case INTRINSIC_DIVIDE: + case INTRINSIC_POWER: + case INTRINSIC_CONCAT: + case INTRINSIC_AND: + case INTRINSIC_OR: + case INTRINSIC_EQV: + case INTRINSIC_NEQV: + case INTRINSIC_EQ: + case INTRINSIC_EQ_OS: + case INTRINSIC_NE: + case INTRINSIC_NE_OS: + case INTRINSIC_GT: + case INTRINSIC_GT_OS: + case INTRINSIC_GE: + case INTRINSIC_GE_OS: + case INTRINSIC_LT: + case INTRINSIC_LT_OS: + case INTRINSIC_LE: + case INTRINSIC_LE_OS: + mio_expr (&e->value.op.op1); + mio_expr (&e->value.op.op2); + break; + + default: + bad_module ("Bad operator"); + } + + break; + + case EXPR_FUNCTION: + mio_symtree_ref (&e->symtree); + mio_actual_arglist (&e->value.function.actual); + + if (iomode == IO_OUTPUT) + { + e->value.function.name + = mio_allocated_string (e->value.function.name); + flag = e->value.function.esym != NULL; + mio_integer (&flag); + if (flag) + mio_symbol_ref (&e->value.function.esym); + else + write_atom (ATOM_STRING, e->value.function.isym->name); + } + else + { + require_atom (ATOM_STRING); + e->value.function.name = gfc_get_string (atom_string); + gfc_free (atom_string); + + mio_integer (&flag); + if (flag) + mio_symbol_ref (&e->value.function.esym); + else + { + require_atom (ATOM_STRING); + e->value.function.isym = gfc_find_function (atom_string); + gfc_free (atom_string); + } + } + + break; + + case EXPR_VARIABLE: + mio_symtree_ref (&e->symtree); + mio_ref_list (&e->ref); + break; + + case EXPR_SUBSTRING: + e->value.character.string + = CONST_CAST (gfc_char_t *, + mio_allocated_wide_string (e->value.character.string, + e->value.character.length)); + mio_ref_list (&e->ref); + break; + + case EXPR_STRUCTURE: + case EXPR_ARRAY: + mio_constructor (&e->value.constructor); + mio_shape (&e->shape, e->rank); + break; + + case EXPR_CONSTANT: + switch (e->ts.type) + { + case BT_INTEGER: + mio_gmp_integer (&e->value.integer); + break; + + case BT_REAL: + gfc_set_model_kind (e->ts.kind); + mio_gmp_real (&e->value.real); + break; + + case BT_COMPLEX: + gfc_set_model_kind (e->ts.kind); + mio_gmp_real (&e->value.complex.r); + mio_gmp_real (&e->value.complex.i); + break; + + case BT_LOGICAL: + mio_integer (&e->value.logical); + break; + + case BT_CHARACTER: + mio_integer (&e->value.character.length); + e->value.character.string + = CONST_CAST (gfc_char_t *, + mio_allocated_wide_string (e->value.character.string, + e->value.character.length)); + break; + + default: + bad_module ("Bad type in constant expression"); + } + + break; + + case EXPR_NULL: + break; + + case EXPR_COMPCALL: + gcc_unreachable (); + break; + } + + mio_rparen (); +} + + +/* Read and write namelists. */ + +static void +mio_namelist (gfc_symbol *sym) +{ + gfc_namelist *n, *m; + const char *check_name; + + mio_lparen (); + + if (iomode == IO_OUTPUT) + { + for (n = sym->namelist; n; n = n->next) + mio_symbol_ref (&n->sym); + } + else + { + /* This departure from the standard is flagged as an error. + It does, in fact, work correctly. TODO: Allow it + conditionally? */ + if (sym->attr.flavor == FL_NAMELIST) + { + check_name = find_use_name (sym->name, false); + if (check_name && strcmp (check_name, sym->name) != 0) + gfc_error ("Namelist %s cannot be renamed by USE " + "association to %s", sym->name, check_name); + } + + m = NULL; + while (peek_atom () != ATOM_RPAREN) + { + n = gfc_get_namelist (); + mio_symbol_ref (&n->sym); + + if (sym->namelist == NULL) + sym->namelist = n; + else + m->next = n; + + m = n; + } + sym->namelist_tail = m; + } + + mio_rparen (); +} + + +/* Save/restore lists of gfc_interface structures. When loading an + interface, we are really appending to the existing list of + interfaces. Checking for duplicate and ambiguous interfaces has to + be done later when all symbols have been loaded. */ + +pointer_info * +mio_interface_rest (gfc_interface **ip) +{ + gfc_interface *tail, *p; + pointer_info *pi = NULL; + + if (iomode == IO_OUTPUT) + { + if (ip != NULL) + for (p = *ip; p; p = p->next) + mio_symbol_ref (&p->sym); + } + else + { + if (*ip == NULL) + tail = NULL; + else + { + tail = *ip; + while (tail->next) + tail = tail->next; + } + + for (;;) + { + if (peek_atom () == ATOM_RPAREN) + break; + + p = gfc_get_interface (); + p->where = gfc_current_locus; + pi = mio_symbol_ref (&p->sym); + + if (tail == NULL) + *ip = p; + else + tail->next = p; + + tail = p; + } + } + + mio_rparen (); + return pi; +} + + +/* Save/restore a nameless operator interface. */ + +static void +mio_interface (gfc_interface **ip) +{ + mio_lparen (); + mio_interface_rest (ip); +} + + +/* Save/restore a named operator interface. */ + +static void +mio_symbol_interface (const char **name, const char **module, + gfc_interface **ip) +{ + mio_lparen (); + mio_pool_string (name); + mio_pool_string (module); + mio_interface_rest (ip); +} + + +static void +mio_namespace_ref (gfc_namespace **nsp) +{ + gfc_namespace *ns; + pointer_info *p; + + p = mio_pointer_ref (nsp); + + if (p->type == P_UNKNOWN) + p->type = P_NAMESPACE; + + if (iomode == IO_INPUT && p->integer != 0) + { + ns = (gfc_namespace *) p->u.pointer; + if (ns == NULL) + { + ns = gfc_get_namespace (NULL, 0); + associate_integer_pointer (p, ns); + } + else + ns->refs++; + } +} + + +/* Save/restore the f2k_derived namespace of a derived-type symbol. */ + +static gfc_namespace* current_f2k_derived; + +static void +mio_typebound_proc (gfc_typebound_proc** proc) +{ + int flag; + + if (iomode == IO_INPUT) + { + *proc = gfc_get_typebound_proc (); + (*proc)->where = gfc_current_locus; + } + gcc_assert (*proc); + + mio_lparen (); + + (*proc)->access = MIO_NAME (gfc_access) ((*proc)->access, access_types); + + (*proc)->nopass = mio_name ((*proc)->nopass, binding_passing); + (*proc)->non_overridable = mio_name ((*proc)->non_overridable, + binding_overriding); + (*proc)->is_generic = mio_name ((*proc)->is_generic, binding_generic); + + if (iomode == IO_INPUT) + (*proc)->pass_arg = NULL; + + flag = (int) (*proc)->pass_arg_num; + mio_integer (&flag); + (*proc)->pass_arg_num = (unsigned) flag; + + if ((*proc)->is_generic) + { + gfc_tbp_generic* g; + + mio_lparen (); + + if (iomode == IO_OUTPUT) + for (g = (*proc)->u.generic; g; g = g->next) + mio_allocated_string (g->specific_st->name); + else + { + (*proc)->u.generic = NULL; + while (peek_atom () != ATOM_RPAREN) + { + g = gfc_get_tbp_generic (); + g->specific = NULL; + + require_atom (ATOM_STRING); + gfc_get_sym_tree (atom_string, current_f2k_derived, + &g->specific_st); + gfc_free (atom_string); + + g->next = (*proc)->u.generic; + (*proc)->u.generic = g; + } + } + + mio_rparen (); + } + else + mio_symtree_ref (&(*proc)->u.specific); + + mio_rparen (); +} + +static void +mio_typebound_symtree (gfc_symtree* st) +{ + if (iomode == IO_OUTPUT && !st->typebound) + return; + + if (iomode == IO_OUTPUT) + { + mio_lparen (); + mio_allocated_string (st->name); + } + /* For IO_INPUT, the above is done in mio_f2k_derived. */ + + mio_typebound_proc (&st->typebound); + mio_rparen (); +} + +static void +mio_finalizer (gfc_finalizer **f) +{ + if (iomode == IO_OUTPUT) + { + gcc_assert (*f); + gcc_assert ((*f)->proc_tree); /* Should already be resolved. */ + mio_symtree_ref (&(*f)->proc_tree); + } + else + { + *f = gfc_get_finalizer (); + (*f)->where = gfc_current_locus; /* Value should not matter. */ + (*f)->next = NULL; + + mio_symtree_ref (&(*f)->proc_tree); + (*f)->proc_sym = NULL; + } +} + +static void +mio_f2k_derived (gfc_namespace *f2k) +{ + current_f2k_derived = f2k; + + /* Handle the list of finalizer procedures. */ + mio_lparen (); + if (iomode == IO_OUTPUT) + { + gfc_finalizer *f; + for (f = f2k->finalizers; f; f = f->next) + mio_finalizer (&f); + } + else + { + f2k->finalizers = NULL; + while (peek_atom () != ATOM_RPAREN) + { + gfc_finalizer *cur; + mio_finalizer (&cur); + cur->next = f2k->finalizers; + f2k->finalizers = cur; + } + } + mio_rparen (); + + /* Handle type-bound procedures. */ + mio_lparen (); + if (iomode == IO_OUTPUT) + gfc_traverse_symtree (f2k->sym_root, &mio_typebound_symtree); + else + { + while (peek_atom () == ATOM_LPAREN) + { + gfc_symtree* st; + + mio_lparen (); + + require_atom (ATOM_STRING); + gfc_get_sym_tree (atom_string, f2k, &st); + gfc_free (atom_string); + + mio_typebound_symtree (st); + } + } + mio_rparen (); +} + +static void +mio_full_f2k_derived (gfc_symbol *sym) +{ + mio_lparen (); + + if (iomode == IO_OUTPUT) + { + if (sym->f2k_derived) + mio_f2k_derived (sym->f2k_derived); + } + else + { + if (peek_atom () != ATOM_RPAREN) + { + sym->f2k_derived = gfc_get_namespace (NULL, 0); + mio_f2k_derived (sym->f2k_derived); + } + else + gcc_assert (!sym->f2k_derived); + } + + mio_rparen (); +} + + +/* Unlike most other routines, the address of the symbol node is already + fixed on input and the name/module has already been filled in. */ + +static void +mio_symbol (gfc_symbol *sym) +{ + int intmod = INTMOD_NONE; + + gfc_formal_arglist *formal; + + mio_lparen (); + + mio_symbol_attribute (&sym->attr); + mio_typespec (&sym->ts); + + /* Contained procedures don't have formal namespaces. Instead we output the + procedure namespace. The will contain the formal arguments. */ + if (iomode == IO_OUTPUT) + { + formal = sym->formal; + while (formal && !formal->sym) + formal = formal->next; + + if (formal) + mio_namespace_ref (&formal->sym->ns); + else + mio_namespace_ref (&sym->formal_ns); + } + else + { + mio_namespace_ref (&sym->formal_ns); + if (sym->formal_ns) + { + sym->formal_ns->proc_name = sym; + sym->refs++; + } + } + + /* Save/restore common block links. */ + mio_symbol_ref (&sym->common_next); + + mio_formal_arglist (sym); + + if (sym->attr.flavor == FL_PARAMETER) + mio_expr (&sym->value); + + mio_array_spec (&sym->as); + + mio_symbol_ref (&sym->result); + + if (sym->attr.cray_pointee) + mio_symbol_ref (&sym->cp_pointer); + + /* Note that components are always saved, even if they are supposed + to be private. Component access is checked during searching. */ + + mio_component_list (&sym->components); + + if (sym->components != NULL) + sym->component_access + = MIO_NAME (gfc_access) (sym->component_access, access_types); + + /* Load/save the f2k_derived namespace of a derived-type symbol. */ + mio_full_f2k_derived (sym); + + mio_namelist (sym); + + /* Add the fields that say whether this is from an intrinsic module, + and if so, what symbol it is within the module. */ +/* mio_integer (&(sym->from_intmod)); */ + if (iomode == IO_OUTPUT) + { + intmod = sym->from_intmod; + mio_integer (&intmod); + } + else + { + mio_integer (&intmod); + sym->from_intmod = intmod; + } + + mio_integer (&(sym->intmod_sym_id)); + + mio_rparen (); +} + + +/************************* Top level subroutines *************************/ + +/* Given a root symtree node and a symbol, try to find a symtree that + references the symbol that is not a unique name. */ + +static gfc_symtree * +find_symtree_for_symbol (gfc_symtree *st, gfc_symbol *sym) +{ + gfc_symtree *s = NULL; + + if (st == NULL) + return s; + + s = find_symtree_for_symbol (st->right, sym); + if (s != NULL) + return s; + s = find_symtree_for_symbol (st->left, sym); + if (s != NULL) + return s; + + if (st->n.sym == sym && !check_unique_name (st->name)) + return st; + + return s; +} + + +/* A recursive function to look for a specific symbol by name and by + module. Whilst several symtrees might point to one symbol, its + is sufficient for the purposes here than one exist. Note that + generic interfaces are distinguished as are symbols that have been + renamed in another module. */ +static gfc_symtree * +find_symbol (gfc_symtree *st, const char *name, + const char *module, int generic) +{ + int c; + gfc_symtree *retval, *s; + + if (st == NULL || st->n.sym == NULL) + return NULL; + + c = strcmp (name, st->n.sym->name); + if (c == 0 && st->n.sym->module + && strcmp (module, st->n.sym->module) == 0 + && !check_unique_name (st->name)) + { + s = gfc_find_symtree (gfc_current_ns->sym_root, name); + + /* Detect symbols that are renamed by use association in another + module by the absence of a symtree and null attr.use_rename, + since the latter is not transmitted in the module file. */ + if (((!generic && !st->n.sym->attr.generic) + || (generic && st->n.sym->attr.generic)) + && !(s == NULL && !st->n.sym->attr.use_rename)) + return st; + } + + retval = find_symbol (st->left, name, module, generic); + + if (retval == NULL) + retval = find_symbol (st->right, name, module, generic); + + return retval; +} + + +/* Skip a list between balanced left and right parens. */ + +static void +skip_list (void) +{ + int level; + + level = 0; + do + { + switch (parse_atom ()) + { + case ATOM_LPAREN: + level++; + break; + + case ATOM_RPAREN: + level--; + break; + + case ATOM_STRING: + gfc_free (atom_string); + break; + + case ATOM_NAME: + case ATOM_INTEGER: + break; + } + } + while (level > 0); +} + + +/* Load operator interfaces from the module. Interfaces are unusual + in that they attach themselves to existing symbols. */ + +static void +load_operator_interfaces (void) +{ + const char *p; + char name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1]; + gfc_user_op *uop; + pointer_info *pi = NULL; + int n, i; + + mio_lparen (); + + while (peek_atom () != ATOM_RPAREN) + { + mio_lparen (); + + mio_internal_string (name); + mio_internal_string (module); + + n = number_use_names (name, true); + n = n ? n : 1; + + for (i = 1; i <= n; i++) + { + /* Decide if we need to load this one or not. */ + p = find_use_name_n (name, &i, true); + + if (p == NULL) + { + while (parse_atom () != ATOM_RPAREN); + continue; + } + + if (i == 1) + { + uop = gfc_get_uop (p); + pi = mio_interface_rest (&uop->op); + } + else + { + if (gfc_find_uop (p, NULL)) + continue; + uop = gfc_get_uop (p); + uop->op = gfc_get_interface (); + uop->op->where = gfc_current_locus; + add_fixup (pi->integer, &uop->op->sym); + } + } + } + + mio_rparen (); +} + + +/* Load interfaces from the module. Interfaces are unusual in that + they attach themselves to existing symbols. */ + +static void +load_generic_interfaces (void) +{ + const char *p; + char name[GFC_MAX_SYMBOL_LEN + 1], module[GFC_MAX_SYMBOL_LEN + 1]; + gfc_symbol *sym; + gfc_interface *generic = NULL; + int n, i, renamed; + + mio_lparen (); + + while (peek_atom () != ATOM_RPAREN) + { + mio_lparen (); + + mio_internal_string (name); + mio_internal_string (module); + + n = number_use_names (name, false); + renamed = n ? 1 : 0; + n = n ? n : 1; + + for (i = 1; i <= n; i++) + { + gfc_symtree *st; + /* Decide if we need to load this one or not. */ + p = find_use_name_n (name, &i, false); + + st = find_symbol (gfc_current_ns->sym_root, + name, module_name, 1); + + if (!p || gfc_find_symbol (p, NULL, 0, &sym)) + { + /* Skip the specific names for these cases. */ + while (i == 1 && parse_atom () != ATOM_RPAREN); + + continue; + } + + /* If the symbol exists already and is being USEd without being + in an ONLY clause, do not load a new symtree(11.3.2). */ + if (!only_flag && st) + sym = st->n.sym; + + if (!sym) + { + /* Make the symbol inaccessible if it has been added by a USE + statement without an ONLY(11.3.2). */ + if (st && only_flag + && !st->n.sym->attr.use_only + && !st->n.sym->attr.use_rename + && strcmp (st->n.sym->module, module_name) == 0) + { + sym = st->n.sym; + gfc_delete_symtree (&gfc_current_ns->sym_root, name); + st = gfc_get_unique_symtree (gfc_current_ns); + st->n.sym = sym; + sym = NULL; + } + else if (st) + { + sym = st->n.sym; + if (strcmp (st->name, p) != 0) + { + st = gfc_new_symtree (&gfc_current_ns->sym_root, p); + st->n.sym = sym; + sym->refs++; + } + } + + /* Since we haven't found a valid generic interface, we had + better make one. */ + if (!sym) + { + gfc_get_symbol (p, NULL, &sym); + sym->name = gfc_get_string (name); + sym->module = gfc_get_string (module_name); + sym->attr.flavor = FL_PROCEDURE; + sym->attr.generic = 1; + sym->attr.use_assoc = 1; + } + } + else + { + /* Unless sym is a generic interface, this reference + is ambiguous. */ + if (st == NULL) + st = gfc_find_symtree (gfc_current_ns->sym_root, p); + + sym = st->n.sym; + + if (st && !sym->attr.generic + && sym->module + && strcmp(module, sym->module)) + st->ambiguous = 1; + } + + sym->attr.use_only = only_flag; + sym->attr.use_rename = renamed; + + if (i == 1) + { + mio_interface_rest (&sym->generic); + generic = sym->generic; + } + else if (!sym->generic) + { + sym->generic = generic; + sym->attr.generic_copy = 1; + } + } + } + + mio_rparen (); +} + + +/* Load common blocks. */ + +static void +load_commons (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_common_head *p; + + mio_lparen (); + + while (peek_atom () != ATOM_RPAREN) + { + int flags; + mio_lparen (); + mio_internal_string (name); + + p = gfc_get_common (name, 1); + + mio_symbol_ref (&p->head); + mio_integer (&flags); + if (flags & 1) + p->saved = 1; + if (flags & 2) + p->threadprivate = 1; + p->use_assoc = 1; + + /* Get whether this was a bind(c) common or not. */ + mio_integer (&p->is_bind_c); + /* Get the binding label. */ + mio_internal_string (p->binding_label); + + mio_rparen (); + } + + mio_rparen (); +} + + +/* Load equivalences. The flag in_load_equiv informs mio_expr_ref of this + so that unused variables are not loaded and so that the expression can + be safely freed. */ + +static void +load_equiv (void) +{ + gfc_equiv *head, *tail, *end, *eq; + bool unused; + + mio_lparen (); + in_load_equiv = true; + + end = gfc_current_ns->equiv; + while (end != NULL && end->next != NULL) + end = end->next; + + while (peek_atom () != ATOM_RPAREN) { + mio_lparen (); + head = tail = NULL; + + while(peek_atom () != ATOM_RPAREN) + { + if (head == NULL) + head = tail = gfc_get_equiv (); + else + { + tail->eq = gfc_get_equiv (); + tail = tail->eq; + } + + mio_pool_string (&tail->module); + mio_expr (&tail->expr); + } + + /* Unused equivalence members have a unique name. In addition, it + must be checked that the symbols are from the same module. */ + unused = true; + for (eq = head; eq; eq = eq->eq) + { + if (eq->expr->symtree->n.sym->module + && head->expr->symtree->n.sym->module + && strcmp (head->expr->symtree->n.sym->module, + eq->expr->symtree->n.sym->module) == 0 + && !check_unique_name (eq->expr->symtree->name)) + { + unused = false; + break; + } + } + + if (unused) + { + for (eq = head; eq; eq = head) + { + head = eq->eq; + gfc_free_expr (eq->expr); + gfc_free (eq); + } + } + + if (end == NULL) + gfc_current_ns->equiv = head; + else + end->next = head; + + if (head != NULL) + end = head; + + mio_rparen (); + } + + mio_rparen (); + in_load_equiv = false; +} + + +/* Recursive function to traverse the pointer_info tree and load a + needed symbol. We return nonzero if we load a symbol and stop the + traversal, because the act of loading can alter the tree. */ + +static int +load_needed (pointer_info *p) +{ + gfc_namespace *ns; + pointer_info *q; + gfc_symbol *sym; + int rv; + + rv = 0; + if (p == NULL) + return rv; + + rv |= load_needed (p->left); + rv |= load_needed (p->right); + + if (p->type != P_SYMBOL || p->u.rsym.state != NEEDED) + return rv; + + p->u.rsym.state = USED; + + set_module_locus (&p->u.rsym.where); + + sym = p->u.rsym.sym; + if (sym == NULL) + { + q = get_integer (p->u.rsym.ns); + + ns = (gfc_namespace *) q->u.pointer; + if (ns == NULL) + { + /* Create an interface namespace if necessary. These are + the namespaces that hold the formal parameters of module + procedures. */ + + ns = gfc_get_namespace (NULL, 0); + associate_integer_pointer (q, ns); + } + + /* Use the module sym as 'proc_name' so that gfc_get_symbol_decl + doesn't go pear-shaped if the symbol is used. */ + if (!ns->proc_name) + gfc_find_symbol (p->u.rsym.module, gfc_current_ns, + 1, &ns->proc_name); + + sym = gfc_new_symbol (p->u.rsym.true_name, ns); + sym->module = gfc_get_string (p->u.rsym.module); + strcpy (sym->binding_label, p->u.rsym.binding_label); + + associate_integer_pointer (p, sym); + } + + mio_symbol (sym); + sym->attr.use_assoc = 1; + if (only_flag) + sym->attr.use_only = 1; + if (p->u.rsym.renamed) + sym->attr.use_rename = 1; + + return 1; +} + + +/* Recursive function for cleaning up things after a module has been read. */ + +static void +read_cleanup (pointer_info *p) +{ + gfc_symtree *st; + pointer_info *q; + + if (p == NULL) + return; + + read_cleanup (p->left); + read_cleanup (p->right); + + if (p->type == P_SYMBOL && p->u.rsym.state == USED && !p->u.rsym.referenced) + { + /* Add hidden symbols to the symtree. */ + q = get_integer (p->u.rsym.ns); + st = gfc_get_unique_symtree ((gfc_namespace *) q->u.pointer); + + st->n.sym = p->u.rsym.sym; + st->n.sym->refs++; + + /* Fixup any symtree references. */ + p->u.rsym.symtree = st; + resolve_fixups (p->u.rsym.stfixup, st); + p->u.rsym.stfixup = NULL; + } + + /* Free unused symbols. */ + if (p->type == P_SYMBOL && p->u.rsym.state == UNUSED) + gfc_free_symbol (p->u.rsym.sym); +} + + +/* It is not quite enough to check for ambiguity in the symbols by + the loaded symbol and the new symbol not being identical. */ +static bool +check_for_ambiguous (gfc_symbol *st_sym, pointer_info *info) +{ + gfc_symbol *rsym; + module_locus locus; + symbol_attribute attr; + + rsym = info->u.rsym.sym; + if (st_sym == rsym) + return false; + + /* If the existing symbol is generic from a different module and + the new symbol is generic there can be no ambiguity. */ + if (st_sym->attr.generic + && st_sym->module + && strcmp (st_sym->module, module_name)) + { + /* The new symbol's attributes have not yet been read. Since + we need attr.generic, read it directly. */ + get_module_locus (&locus); + set_module_locus (&info->u.rsym.where); + mio_lparen (); + attr.generic = 0; + mio_symbol_attribute (&attr); + set_module_locus (&locus); + if (attr.generic) + return false; + } + + return true; +} + + +/* Read a module file. */ + +static void +read_module (void) +{ + module_locus operator_interfaces, user_operators; + const char *p; + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_intrinsic_op i; + int ambiguous, j, nuse, symbol; + pointer_info *info, *q; + gfc_use_rename *u; + gfc_symtree *st; + gfc_symbol *sym; + + get_module_locus (&operator_interfaces); /* Skip these for now. */ + skip_list (); + + get_module_locus (&user_operators); + skip_list (); + skip_list (); + + /* Skip commons and equivalences for now. */ + skip_list (); + skip_list (); + + mio_lparen (); + + /* Create the fixup nodes for all the symbols. */ + + while (peek_atom () != ATOM_RPAREN) + { + require_atom (ATOM_INTEGER); + info = get_integer (atom_int); + + info->type = P_SYMBOL; + info->u.rsym.state = UNUSED; + + mio_internal_string (info->u.rsym.true_name); + mio_internal_string (info->u.rsym.module); + mio_internal_string (info->u.rsym.binding_label); + + + require_atom (ATOM_INTEGER); + info->u.rsym.ns = atom_int; + + get_module_locus (&info->u.rsym.where); + skip_list (); + + /* See if the symbol has already been loaded by a previous module. + If so, we reference the existing symbol and prevent it from + being loaded again. This should not happen if the symbol being + read is an index for an assumed shape dummy array (ns != 1). */ + + sym = find_true_name (info->u.rsym.true_name, info->u.rsym.module); + + if (sym == NULL + || (sym->attr.flavor == FL_VARIABLE && info->u.rsym.ns !=1)) + continue; + + info->u.rsym.state = USED; + info->u.rsym.sym = sym; + + /* Some symbols do not have a namespace (eg. formal arguments), + so the automatic "unique symtree" mechanism must be suppressed + by marking them as referenced. */ + q = get_integer (info->u.rsym.ns); + if (q->u.pointer == NULL) + { + info->u.rsym.referenced = 1; + continue; + } + + /* If possible recycle the symtree that references the symbol. + If a symtree is not found and the module does not import one, + a unique-name symtree is found by read_cleanup. */ + st = find_symtree_for_symbol (gfc_current_ns->sym_root, sym); + if (st != NULL) + { + info->u.rsym.symtree = st; + info->u.rsym.referenced = 1; + } + } + + mio_rparen (); + + /* Parse the symtree lists. This lets us mark which symbols need to + be loaded. Renaming is also done at this point by replacing the + symtree name. */ + + mio_lparen (); + + while (peek_atom () != ATOM_RPAREN) + { + mio_internal_string (name); + mio_integer (&ambiguous); + mio_integer (&symbol); + + info = get_integer (symbol); + + /* See how many use names there are. If none, go through the start + of the loop at least once. */ + nuse = number_use_names (name, false); + info->u.rsym.renamed = nuse ? 1 : 0; + + if (nuse == 0) + nuse = 1; + + for (j = 1; j <= nuse; j++) + { + /* Get the jth local name for this symbol. */ + p = find_use_name_n (name, &j, false); + + if (p == NULL && strcmp (name, module_name) == 0) + p = name; + + /* Skip symtree nodes not in an ONLY clause, unless there + is an existing symtree loaded from another USE statement. */ + if (p == NULL) + { + st = gfc_find_symtree (gfc_current_ns->sym_root, name); + if (st != NULL) + info->u.rsym.symtree = st; + continue; + } + + /* If a symbol of the same name and module exists already, + this symbol, which is not in an ONLY clause, must not be + added to the namespace(11.3.2). Note that find_symbol + only returns the first occurrence that it finds. */ + if (!only_flag && !info->u.rsym.renamed + && strcmp (name, module_name) != 0 + && find_symbol (gfc_current_ns->sym_root, name, + module_name, 0)) + continue; + + st = gfc_find_symtree (gfc_current_ns->sym_root, p); + + if (st != NULL) + { + /* Check for ambiguous symbols. */ + if (check_for_ambiguous (st->n.sym, info)) + st->ambiguous = 1; + info->u.rsym.symtree = st; + } + else + { + st = gfc_find_symtree (gfc_current_ns->sym_root, name); + + /* Delete the symtree if the symbol has been added by a USE + statement without an ONLY(11.3.2). Remember that the rsym + will be the same as the symbol found in the symtree, for + this case. */ + if (st && (only_flag || info->u.rsym.renamed) + && !st->n.sym->attr.use_only + && !st->n.sym->attr.use_rename + && info->u.rsym.sym == st->n.sym) + gfc_delete_symtree (&gfc_current_ns->sym_root, name); + + /* Create a symtree node in the current namespace for this + symbol. */ + st = check_unique_name (p) + ? gfc_get_unique_symtree (gfc_current_ns) + : gfc_new_symtree (&gfc_current_ns->sym_root, p); + st->ambiguous = ambiguous; + + sym = info->u.rsym.sym; + + /* Create a symbol node if it doesn't already exist. */ + if (sym == NULL) + { + info->u.rsym.sym = gfc_new_symbol (info->u.rsym.true_name, + gfc_current_ns); + sym = info->u.rsym.sym; + sym->module = gfc_get_string (info->u.rsym.module); + + /* TODO: hmm, can we test this? Do we know it will be + initialized to zeros? */ + if (info->u.rsym.binding_label[0] != '\0') + strcpy (sym->binding_label, info->u.rsym.binding_label); + } + + st->n.sym = sym; + st->n.sym->refs++; + + if (strcmp (name, p) != 0) + sym->attr.use_rename = 1; + + /* We need to set the only_flag here so that symbols from the + same USE...ONLY but earlier are not deleted from the tree in + the gfc_delete_symtree above. */ + sym->attr.use_only = only_flag; + + /* Store the symtree pointing to this symbol. */ + info->u.rsym.symtree = st; + + if (info->u.rsym.state == UNUSED) + info->u.rsym.state = NEEDED; + info->u.rsym.referenced = 1; + } + } + } + + mio_rparen (); + + /* Load intrinsic operator interfaces. */ + set_module_locus (&operator_interfaces); + mio_lparen (); + + for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++) + { + if (i == INTRINSIC_USER) + continue; + + if (only_flag) + { + u = find_use_operator (i); + + if (u == NULL) + { + skip_list (); + continue; + } + + u->found = 1; + } + + mio_interface (&gfc_current_ns->op[i]); + } + + mio_rparen (); + + /* Load generic and user operator interfaces. These must follow the + loading of symtree because otherwise symbols can be marked as + ambiguous. */ + + set_module_locus (&user_operators); + + load_operator_interfaces (); + load_generic_interfaces (); + + load_commons (); + load_equiv (); + + /* At this point, we read those symbols that are needed but haven't + been loaded yet. If one symbol requires another, the other gets + marked as NEEDED if its previous state was UNUSED. */ + + while (load_needed (pi_root)); + + /* Make sure all elements of the rename-list were found in the module. */ + + for (u = gfc_rename_list; u; u = u->next) + { + if (u->found) + continue; + + if (u->op == INTRINSIC_NONE) + { + gfc_error ("Symbol '%s' referenced at %L not found in module '%s'", + u->use_name, &u->where, module_name); + continue; + } + + if (u->op == INTRINSIC_USER) + { + gfc_error ("User operator '%s' referenced at %L not found " + "in module '%s'", u->use_name, &u->where, module_name); + continue; + } + + gfc_error ("Intrinsic operator '%s' referenced at %L not found " + "in module '%s'", gfc_op2string (u->op), &u->where, + module_name); + } + + gfc_check_interfaces (gfc_current_ns); + + /* Clean up symbol nodes that were never loaded, create references + to hidden symbols. */ + + read_cleanup (pi_root); +} + + +/* Given an access type that is specific to an entity and the default + access, return nonzero if the entity is publicly accessible. If the + element is declared as PUBLIC, then it is public; if declared + PRIVATE, then private, and otherwise it is public unless the default + access in this context has been declared PRIVATE. */ + +bool +gfc_check_access (gfc_access specific_access, gfc_access default_access) +{ + if (specific_access == ACCESS_PUBLIC) + return TRUE; + if (specific_access == ACCESS_PRIVATE) + return FALSE; + + if (gfc_option.flag_module_private) + return default_access == ACCESS_PUBLIC; + else + return default_access != ACCESS_PRIVATE; +} + + +/* A structure to remember which commons we've already written. */ + +struct written_common +{ + BBT_HEADER(written_common); + const char *name, *label; +}; + +static struct written_common *written_commons = NULL; + +/* Comparison function used for balancing the binary tree. */ + +static int +compare_written_commons (void *a1, void *b1) +{ + const char *aname = ((struct written_common *) a1)->name; + const char *alabel = ((struct written_common *) a1)->label; + const char *bname = ((struct written_common *) b1)->name; + const char *blabel = ((struct written_common *) b1)->label; + int c = strcmp (aname, bname); + + return (c != 0 ? c : strcmp (alabel, blabel)); +} + +/* Free a list of written commons. */ + +static void +free_written_common (struct written_common *w) +{ + if (!w) + return; + + if (w->left) + free_written_common (w->left); + if (w->right) + free_written_common (w->right); + + gfc_free (w); +} + +/* Write a common block to the module -- recursive helper function. */ + +static void +write_common_0 (gfc_symtree *st, bool this_module) +{ + gfc_common_head *p; + const char * name; + int flags; + const char *label; + struct written_common *w; + bool write_me = true; + + if (st == NULL) + return; + + write_common_0 (st->left, this_module); + + /* We will write out the binding label, or the name if no label given. */ + name = st->n.common->name; + p = st->n.common; + label = p->is_bind_c ? p->binding_label : p->name; + + /* Check if we've already output this common. */ + w = written_commons; + while (w) + { + int c = strcmp (name, w->name); + c = (c != 0 ? c : strcmp (label, w->label)); + if (c == 0) + write_me = false; + + w = (c < 0) ? w->left : w->right; + } + + if (this_module && p->use_assoc) + write_me = false; + + if (write_me) + { + /* Write the common to the module. */ + mio_lparen (); + mio_pool_string (&name); + + mio_symbol_ref (&p->head); + flags = p->saved ? 1 : 0; + if (p->threadprivate) + flags |= 2; + mio_integer (&flags); + + /* Write out whether the common block is bind(c) or not. */ + mio_integer (&(p->is_bind_c)); + + mio_pool_string (&label); + mio_rparen (); + + /* Record that we have written this common. */ + w = XCNEW (struct written_common); + w->name = p->name; + w->label = label; + gfc_insert_bbt (&written_commons, w, compare_written_commons); + } + + write_common_0 (st->right, this_module); +} + + +/* Write a common, by initializing the list of written commons, calling + the recursive function write_common_0() and cleaning up afterwards. */ + +static void +write_common (gfc_symtree *st) +{ + written_commons = NULL; + write_common_0 (st, true); + write_common_0 (st, false); + free_written_common (written_commons); + written_commons = NULL; +} + + +/* Write the blank common block to the module. */ + +static void +write_blank_common (void) +{ + const char * name = BLANK_COMMON_NAME; + int saved; + /* TODO: Blank commons are not bind(c). The F2003 standard probably says + this, but it hasn't been checked. Just making it so for now. */ + int is_bind_c = 0; + + if (gfc_current_ns->blank_common.head == NULL) + return; + + mio_lparen (); + + mio_pool_string (&name); + + mio_symbol_ref (&gfc_current_ns->blank_common.head); + saved = gfc_current_ns->blank_common.saved; + mio_integer (&saved); + + /* Write out whether the common block is bind(c) or not. */ + mio_integer (&is_bind_c); + + /* Write out the binding label, which is BLANK_COMMON_NAME, though + it doesn't matter because the label isn't used. */ + mio_pool_string (&name); + + mio_rparen (); +} + + +/* Write equivalences to the module. */ + +static void +write_equiv (void) +{ + gfc_equiv *eq, *e; + int num; + + num = 0; + for (eq = gfc_current_ns->equiv; eq; eq = eq->next) + { + mio_lparen (); + + for (e = eq; e; e = e->eq) + { + if (e->module == NULL) + e->module = gfc_get_string ("%s.eq.%d", module_name, num); + mio_allocated_string (e->module); + mio_expr (&e->expr); + } + + num++; + mio_rparen (); + } +} + + +/* Write a symbol to the module. */ + +static void +write_symbol (int n, gfc_symbol *sym) +{ + const char *label; + + if (sym->attr.flavor == FL_UNKNOWN || sym->attr.flavor == FL_LABEL) + gfc_internal_error ("write_symbol(): bad module symbol '%s'", sym->name); + + mio_integer (&n); + mio_pool_string (&sym->name); + + mio_pool_string (&sym->module); + if (sym->attr.is_bind_c || sym->attr.is_iso_c) + { + label = sym->binding_label; + mio_pool_string (&label); + } + else + mio_pool_string (&sym->name); + + mio_pointer_ref (&sym->ns); + + mio_symbol (sym); + write_char ('\n'); +} + + +/* Recursive traversal function to write the initial set of symbols to + the module. We check to see if the symbol should be written + according to the access specification. */ + +static void +write_symbol0 (gfc_symtree *st) +{ + gfc_symbol *sym; + pointer_info *p; + bool dont_write = false; + + if (st == NULL) + return; + + write_symbol0 (st->left); + + sym = st->n.sym; + if (sym->module == NULL) + sym->module = gfc_get_string (module_name); + + if (sym->attr.flavor == FL_PROCEDURE && sym->attr.generic + && !sym->attr.subroutine && !sym->attr.function) + dont_write = true; + + if (!gfc_check_access (sym->attr.access, sym->ns->default_access)) + dont_write = true; + + if (!dont_write) + { + p = get_pointer (sym); + if (p->type == P_UNKNOWN) + p->type = P_SYMBOL; + + if (p->u.wsym.state != WRITTEN) + { + write_symbol (p->integer, sym); + p->u.wsym.state = WRITTEN; + } + } + + write_symbol0 (st->right); +} + + +/* Recursive traversal function to write the secondary set of symbols + to the module file. These are symbols that were not public yet are + needed by the public symbols or another dependent symbol. The act + of writing a symbol can modify the pointer_info tree, so we cease + traversal if we find a symbol to write. We return nonzero if a + symbol was written and pass that information upwards. */ + +static int +write_symbol1 (pointer_info *p) +{ + int result; + + if (!p) + return 0; + + result = write_symbol1 (p->left); + + if (!(p->type != P_SYMBOL || p->u.wsym.state != NEEDS_WRITE)) + { + p->u.wsym.state = WRITTEN; + write_symbol (p->integer, p->u.wsym.sym); + result = 1; + } + + result |= write_symbol1 (p->right); + return result; +} + + +/* Write operator interfaces associated with a symbol. */ + +static void +write_operator (gfc_user_op *uop) +{ + static char nullstring[] = ""; + const char *p = nullstring; + + if (uop->op == NULL + || !gfc_check_access (uop->access, uop->ns->default_access)) + return; + + mio_symbol_interface (&uop->name, &p, &uop->op); +} + + +/* Write generic interfaces from the namespace sym_root. */ + +static void +write_generic (gfc_symtree *st) +{ + gfc_symbol *sym; + + if (st == NULL) + return; + + write_generic (st->left); + write_generic (st->right); + + sym = st->n.sym; + if (!sym || check_unique_name (st->name)) + return; + + if (sym->generic == NULL + || !gfc_check_access (sym->attr.access, sym->ns->default_access)) + return; + + if (sym->module == NULL) + sym->module = gfc_get_string (module_name); + + mio_symbol_interface (&st->name, &sym->module, &sym->generic); +} + + +static void +write_symtree (gfc_symtree *st) +{ + gfc_symbol *sym; + pointer_info *p; + + sym = st->n.sym; + + /* A symbol in an interface body must not be visible in the + module file. */ + if (sym->ns != gfc_current_ns + && sym->ns->proc_name + && sym->ns->proc_name->attr.if_source == IFSRC_IFBODY) + return; + + if (!gfc_check_access (sym->attr.access, sym->ns->default_access) + || (sym->attr.flavor == FL_PROCEDURE && sym->attr.generic + && !sym->attr.subroutine && !sym->attr.function)) + return; + + if (check_unique_name (st->name)) + return; + + p = find_pointer (sym); + if (p == NULL) + gfc_internal_error ("write_symtree(): Symbol not written"); + + mio_pool_string (&st->name); + mio_integer (&st->ambiguous); + mio_integer (&p->integer); +} + + +static void +write_module (void) +{ + gfc_intrinsic_op i; + + /* Write the operator interfaces. */ + mio_lparen (); + + for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++) + { + if (i == INTRINSIC_USER) + continue; + + mio_interface (gfc_check_access (gfc_current_ns->operator_access[i], + gfc_current_ns->default_access) + ? &gfc_current_ns->op[i] : NULL); + } + + mio_rparen (); + write_char ('\n'); + write_char ('\n'); + + mio_lparen (); + gfc_traverse_user_op (gfc_current_ns, write_operator); + mio_rparen (); + write_char ('\n'); + write_char ('\n'); + + mio_lparen (); + write_generic (gfc_current_ns->sym_root); + mio_rparen (); + write_char ('\n'); + write_char ('\n'); + + mio_lparen (); + write_blank_common (); + write_common (gfc_current_ns->common_root); + mio_rparen (); + write_char ('\n'); + write_char ('\n'); + + mio_lparen (); + write_equiv (); + mio_rparen (); + write_char ('\n'); + write_char ('\n'); + + /* Write symbol information. First we traverse all symbols in the + primary namespace, writing those that need to be written. + Sometimes writing one symbol will cause another to need to be + written. A list of these symbols ends up on the write stack, and + we end by popping the bottom of the stack and writing the symbol + until the stack is empty. */ + + mio_lparen (); + + write_symbol0 (gfc_current_ns->sym_root); + while (write_symbol1 (pi_root)) + /* Nothing. */; + + mio_rparen (); + + write_char ('\n'); + write_char ('\n'); + + mio_lparen (); + gfc_traverse_symtree (gfc_current_ns->sym_root, write_symtree); + mio_rparen (); +} + + +/* Read a MD5 sum from the header of a module file. If the file cannot + be opened, or we have any other error, we return -1. */ + +static int +read_md5_from_module_file (const char * filename, unsigned char md5[16]) +{ + FILE *file; + char buf[1024]; + int n; + + /* Open the file. */ + if ((file = fopen (filename, "r")) == NULL) + return -1; + + /* Read two lines. */ + if (fgets (buf, sizeof (buf) - 1, file) == NULL) + { + fclose (file); + return -1; + } + + /* The file also needs to be overwritten if the version number changed. */ + n = strlen ("GFORTRAN module version '" MOD_VERSION "' created"); + if (strncmp (buf, "GFORTRAN module version '" MOD_VERSION "' created", n) != 0) + return -1; + + if (fgets (buf, sizeof (buf) - 1, file) == NULL) + { + fclose (file); + return -1; + } + + /* Close the file. */ + fclose (file); + + /* If the header is not what we expect, or is too short, bail out. */ + if (strncmp (buf, "MD5:", 4) != 0 || strlen (buf) < 4 + 16) + return -1; + + /* Now, we have a real MD5, read it into the array. */ + for (n = 0; n < 16; n++) + { + unsigned int x; + + if (sscanf (&(buf[4+2*n]), "%02x", &x) != 1) + return -1; + + md5[n] = x; + } + + return 0; +} + + +/* Given module, dump it to disk. If there was an error while + processing the module, dump_flag will be set to zero and we delete + the module file, even if it was already there. */ + +void +gfc_dump_module (const char *name, int dump_flag) +{ + int n; + char *filename, *filename_tmp, *p; + time_t now; + fpos_t md5_pos; + unsigned char md5_new[16], md5_old[16]; + + n = strlen (name) + strlen (MODULE_EXTENSION) + 1; + if (gfc_option.module_dir != NULL) + { + n += strlen (gfc_option.module_dir); + filename = (char *) alloca (n); + strcpy (filename, gfc_option.module_dir); + strcat (filename, name); + } + else + { + filename = (char *) alloca (n); + strcpy (filename, name); + } + strcat (filename, MODULE_EXTENSION); + + /* Name of the temporary file used to write the module. */ + filename_tmp = (char *) alloca (n + 1); + strcpy (filename_tmp, filename); + strcat (filename_tmp, "0"); + + /* There was an error while processing the module. We delete the + module file, even if it was already there. */ + if (!dump_flag) + { + unlink (filename); + return; + } + + /* Write the module to the temporary file. */ + module_fp = fopen (filename_tmp, "w"); + if (module_fp == NULL) + gfc_fatal_error ("Can't open module file '%s' for writing at %C: %s", + filename_tmp, strerror (errno)); + + /* Write the header, including space reserved for the MD5 sum. */ + now = time (NULL); + p = ctime (&now); + + *strchr (p, '\n') = '\0'; + + fprintf (module_fp, "GFORTRAN module version '%s' created from %s on %s\n" + "MD5:", MOD_VERSION, gfc_source_file, p); + fgetpos (module_fp, &md5_pos); + fputs ("00000000000000000000000000000000 -- " + "If you edit this, you'll get what you deserve.\n\n", module_fp); + + /* Initialize the MD5 context that will be used for output. */ + md5_init_ctx (&ctx); + + /* Write the module itself. */ + iomode = IO_OUTPUT; + strcpy (module_name, name); + + init_pi_tree (); + + write_module (); + + free_pi_tree (pi_root); + pi_root = NULL; + + write_char ('\n'); + + /* Write the MD5 sum to the header of the module file. */ + md5_finish_ctx (&ctx, md5_new); + fsetpos (module_fp, &md5_pos); + for (n = 0; n < 16; n++) + fprintf (module_fp, "%02x", md5_new[n]); + + if (fclose (module_fp)) + gfc_fatal_error ("Error writing module file '%s' for writing: %s", + filename_tmp, strerror (errno)); + + /* Read the MD5 from the header of the old module file and compare. */ + if (read_md5_from_module_file (filename, md5_old) != 0 + || memcmp (md5_old, md5_new, sizeof (md5_old)) != 0) + { + /* Module file have changed, replace the old one. */ + if (unlink (filename) && errno != ENOENT) + gfc_fatal_error ("Can't delete module file '%s': %s", filename, + strerror (errno)); + if (rename (filename_tmp, filename)) + gfc_fatal_error ("Can't rename module file '%s' to '%s': %s", + filename_tmp, filename, strerror (errno)); + } + else + { + if (unlink (filename_tmp)) + gfc_fatal_error ("Can't delete temporary module file '%s': %s", + filename_tmp, strerror (errno)); + } +} + + +static void +sort_iso_c_rename_list (void) +{ + gfc_use_rename *tmp_list = NULL; + gfc_use_rename *curr; + gfc_use_rename *kinds_used[ISOCBINDING_NUMBER] = {NULL}; + int c_kind; + int i; + + for (curr = gfc_rename_list; curr; curr = curr->next) + { + c_kind = get_c_kind (curr->use_name, c_interop_kinds_table); + if (c_kind == ISOCBINDING_INVALID || c_kind == ISOCBINDING_LAST) + { + gfc_error ("Symbol '%s' referenced at %L does not exist in " + "intrinsic module ISO_C_BINDING.", curr->use_name, + &curr->where); + } + else + /* Put it in the list. */ + kinds_used[c_kind] = curr; + } + + /* Make a new (sorted) rename list. */ + i = 0; + while (i < ISOCBINDING_NUMBER && kinds_used[i] == NULL) + i++; + + if (i < ISOCBINDING_NUMBER) + { + tmp_list = kinds_used[i]; + + i++; + curr = tmp_list; + for (; i < ISOCBINDING_NUMBER; i++) + if (kinds_used[i] != NULL) + { + curr->next = kinds_used[i]; + curr = curr->next; + curr->next = NULL; + } + } + + gfc_rename_list = tmp_list; +} + + +/* Import the intrinsic ISO_C_BINDING module, generating symbols in + the current namespace for all named constants, pointer types, and + procedures in the module unless the only clause was used or a rename + list was provided. */ + +static void +import_iso_c_binding_module (void) +{ + gfc_symbol *mod_sym = NULL; + gfc_symtree *mod_symtree = NULL; + const char *iso_c_module_name = "__iso_c_binding"; + gfc_use_rename *u; + int i; + char *local_name; + + /* Look only in the current namespace. */ + mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, iso_c_module_name); + + if (mod_symtree == NULL) + { + /* symtree doesn't already exist in current namespace. */ + gfc_get_sym_tree (iso_c_module_name, gfc_current_ns, &mod_symtree); + + if (mod_symtree != NULL) + mod_sym = mod_symtree->n.sym; + else + gfc_internal_error ("import_iso_c_binding_module(): Unable to " + "create symbol for %s", iso_c_module_name); + + mod_sym->attr.flavor = FL_MODULE; + mod_sym->attr.intrinsic = 1; + mod_sym->module = gfc_get_string (iso_c_module_name); + mod_sym->from_intmod = INTMOD_ISO_C_BINDING; + } + + /* Generate the symbols for the named constants representing + the kinds for intrinsic data types. */ + if (only_flag) + { + /* Sort the rename list because there are dependencies between types + and procedures (e.g., c_loc needs c_ptr). */ + sort_iso_c_rename_list (); + + for (u = gfc_rename_list; u; u = u->next) + { + i = get_c_kind (u->use_name, c_interop_kinds_table); + + if (i == ISOCBINDING_INVALID || i == ISOCBINDING_LAST) + { + gfc_error ("Symbol '%s' referenced at %L does not exist in " + "intrinsic module ISO_C_BINDING.", u->use_name, + &u->where); + continue; + } + + generate_isocbinding_symbol (iso_c_module_name, i, u->local_name); + } + } + else + { + for (i = 0; i < ISOCBINDING_NUMBER; i++) + { + local_name = NULL; + for (u = gfc_rename_list; u; u = u->next) + { + if (strcmp (c_interop_kinds_table[i].name, u->use_name) == 0) + { + local_name = u->local_name; + u->found = 1; + break; + } + } + generate_isocbinding_symbol (iso_c_module_name, i, local_name); + } + + for (u = gfc_rename_list; u; u = u->next) + { + if (u->found) + continue; + + gfc_error ("Symbol '%s' referenced at %L not found in intrinsic " + "module ISO_C_BINDING", u->use_name, &u->where); + } + } +} + + +/* Add an integer named constant from a given module. */ + +static void +create_int_parameter (const char *name, int value, const char *modname, + intmod_id module, int id) +{ + gfc_symtree *tmp_symtree; + gfc_symbol *sym; + + tmp_symtree = gfc_find_symtree (gfc_current_ns->sym_root, name); + if (tmp_symtree != NULL) + { + if (strcmp (modname, tmp_symtree->n.sym->module) == 0) + return; + else + gfc_error ("Symbol '%s' already declared", name); + } + + gfc_get_sym_tree (name, gfc_current_ns, &tmp_symtree); + sym = tmp_symtree->n.sym; + + sym->module = gfc_get_string (modname); + sym->attr.flavor = FL_PARAMETER; + sym->ts.type = BT_INTEGER; + sym->ts.kind = gfc_default_integer_kind; + sym->value = gfc_int_expr (value); + sym->attr.use_assoc = 1; + sym->from_intmod = module; + sym->intmod_sym_id = id; +} + + +/* USE the ISO_FORTRAN_ENV intrinsic module. */ + +static void +use_iso_fortran_env_module (void) +{ + static char mod[] = "iso_fortran_env"; + const char *local_name; + gfc_use_rename *u; + gfc_symbol *mod_sym; + gfc_symtree *mod_symtree; + int i; + + intmod_sym symbol[] = { +#define NAMED_INTCST(a,b,c,d) { a, b, 0, d }, +#include "iso-fortran-env.def" +#undef NAMED_INTCST + { ISOFORTRANENV_INVALID, NULL, -1234, 0 } }; + + i = 0; +#define NAMED_INTCST(a,b,c,d) symbol[i++].value = c; +#include "iso-fortran-env.def" +#undef NAMED_INTCST + + /* Generate the symbol for the module itself. */ + mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, mod); + if (mod_symtree == NULL) + { + gfc_get_sym_tree (mod, gfc_current_ns, &mod_symtree); + gcc_assert (mod_symtree); + mod_sym = mod_symtree->n.sym; + + mod_sym->attr.flavor = FL_MODULE; + mod_sym->attr.intrinsic = 1; + mod_sym->module = gfc_get_string (mod); + mod_sym->from_intmod = INTMOD_ISO_FORTRAN_ENV; + } + else + if (!mod_symtree->n.sym->attr.intrinsic) + gfc_error ("Use of intrinsic module '%s' at %C conflicts with " + "non-intrinsic module name used previously", mod); + + /* Generate the symbols for the module integer named constants. */ + if (only_flag) + for (u = gfc_rename_list; u; u = u->next) + { + for (i = 0; symbol[i].name; i++) + if (strcmp (symbol[i].name, u->use_name) == 0) + break; + + if (symbol[i].name == NULL) + { + gfc_error ("Symbol '%s' referenced at %L does not exist in " + "intrinsic module ISO_FORTRAN_ENV", u->use_name, + &u->where); + continue; + } + + if ((gfc_option.flag_default_integer || gfc_option.flag_default_real) + && symbol[i].id == ISOFORTRANENV_NUMERIC_STORAGE_SIZE) + gfc_warning_now ("Use of the NUMERIC_STORAGE_SIZE named constant " + "from intrinsic module ISO_FORTRAN_ENV at %L is " + "incompatible with option %s", &u->where, + gfc_option.flag_default_integer + ? "-fdefault-integer-8" : "-fdefault-real-8"); + + create_int_parameter (u->local_name[0] ? u->local_name + : symbol[i].name, + symbol[i].value, mod, INTMOD_ISO_FORTRAN_ENV, + symbol[i].id); + } + else + { + for (i = 0; symbol[i].name; i++) + { + local_name = NULL; + for (u = gfc_rename_list; u; u = u->next) + { + if (strcmp (symbol[i].name, u->use_name) == 0) + { + local_name = u->local_name; + u->found = 1; + break; + } + } + + if ((gfc_option.flag_default_integer || gfc_option.flag_default_real) + && symbol[i].id == ISOFORTRANENV_NUMERIC_STORAGE_SIZE) + gfc_warning_now ("Use of the NUMERIC_STORAGE_SIZE named constant " + "from intrinsic module ISO_FORTRAN_ENV at %C is " + "incompatible with option %s", + gfc_option.flag_default_integer + ? "-fdefault-integer-8" : "-fdefault-real-8"); + + create_int_parameter (local_name ? local_name : symbol[i].name, + symbol[i].value, mod, INTMOD_ISO_FORTRAN_ENV, + symbol[i].id); + } + + for (u = gfc_rename_list; u; u = u->next) + { + if (u->found) + continue; + + gfc_error ("Symbol '%s' referenced at %L not found in intrinsic " + "module ISO_FORTRAN_ENV", u->use_name, &u->where); + } + } +} + + +/* Process a USE directive. */ + +void +gfc_use_module (void) +{ + char *filename; + gfc_state_data *p; + int c, line, start; + gfc_symtree *mod_symtree; + gfc_use_list *use_stmt; + + filename = (char *) alloca (strlen (module_name) + strlen (MODULE_EXTENSION) + + 1); + strcpy (filename, module_name); + strcat (filename, MODULE_EXTENSION); + + /* First, try to find an non-intrinsic module, unless the USE statement + specified that the module is intrinsic. */ + module_fp = NULL; + if (!specified_int) + module_fp = gfc_open_included_file (filename, true, true); + + /* Then, see if it's an intrinsic one, unless the USE statement + specified that the module is non-intrinsic. */ + if (module_fp == NULL && !specified_nonint) + { + if (strcmp (module_name, "iso_fortran_env") == 0 + && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ISO_FORTRAN_ENV " + "intrinsic module at %C") != FAILURE) + { + use_iso_fortran_env_module (); + return; + } + + if (strcmp (module_name, "iso_c_binding") == 0 + && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: " + "ISO_C_BINDING module at %C") != FAILURE) + { + import_iso_c_binding_module(); + return; + } + + module_fp = gfc_open_intrinsic_module (filename); + + if (module_fp == NULL && specified_int) + gfc_fatal_error ("Can't find an intrinsic module named '%s' at %C", + module_name); + } + + if (module_fp == NULL) + gfc_fatal_error ("Can't open module file '%s' for reading at %C: %s", + filename, strerror (errno)); + + /* Check that we haven't already USEd an intrinsic module with the + same name. */ + + mod_symtree = gfc_find_symtree (gfc_current_ns->sym_root, module_name); + if (mod_symtree && mod_symtree->n.sym->attr.intrinsic) + gfc_error ("Use of non-intrinsic module '%s' at %C conflicts with " + "intrinsic module name used previously", module_name); + + iomode = IO_INPUT; + module_line = 1; + module_column = 1; + start = 0; + + /* Skip the first two lines of the module, after checking that this is + a gfortran module file. */ + line = 0; + while (line < 2) + { + c = module_char (); + if (c == EOF) + bad_module ("Unexpected end of module"); + if (start++ < 3) + parse_name (c); + if ((start == 1 && strcmp (atom_name, "GFORTRAN") != 0) + || (start == 2 && strcmp (atom_name, " module") != 0)) + gfc_fatal_error ("File '%s' opened at %C is not a GFORTRAN module " + "file", filename); + if (start == 3) + { + if (strcmp (atom_name, " version") != 0 + || module_char () != ' ' + || parse_atom () != ATOM_STRING) + gfc_fatal_error ("Parse error when checking module version" + " for file '%s' opened at %C", filename); + + if (strcmp (atom_string, MOD_VERSION)) + { + gfc_fatal_error ("Wrong module version '%s' (expected '" + MOD_VERSION "') for file '%s' opened" + " at %C", atom_string, filename); + } + } + + if (c == '\n') + line++; + } + + /* Make sure we're not reading the same module that we may be building. */ + for (p = gfc_state_stack; p; p = p->previous) + if (p->state == COMP_MODULE && strcmp (p->sym->name, module_name) == 0) + gfc_fatal_error ("Can't USE the same module we're building!"); + + init_pi_tree (); + init_true_name_tree (); + + read_module (); + + free_true_name (true_name_root); + true_name_root = NULL; + + free_pi_tree (pi_root); + pi_root = NULL; + + fclose (module_fp); + + use_stmt = gfc_get_use_list (); + use_stmt->module_name = gfc_get_string (module_name); + use_stmt->only_flag = only_flag; + use_stmt->rename = gfc_rename_list; + use_stmt->where = use_locus; + gfc_rename_list = NULL; + use_stmt->next = gfc_current_ns->use_stmts; + gfc_current_ns->use_stmts = use_stmt; +} + + +void +gfc_free_use_stmts (gfc_use_list *use_stmts) +{ + gfc_use_list *next; + for (; use_stmts; use_stmts = next) + { + gfc_use_rename *next_rename; + + for (; use_stmts->rename; use_stmts->rename = next_rename) + { + next_rename = use_stmts->rename->next; + gfc_free (use_stmts->rename); + } + next = use_stmts->next; + gfc_free (use_stmts); + } +} + + +void +gfc_module_init_2 (void) +{ + last_atom = ATOM_LPAREN; +} + + +void +gfc_module_done_2 (void) +{ + free_rename (); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/openmp.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/openmp.c new file mode 100644 index 0000000000..9ac9a4aec9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/openmp.c @@ -0,0 +1,1527 @@ +/* OpenMP directive matching and resolving. + Copyright (C) 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Jakub Jelinek + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "flags.h" +#include "gfortran.h" +#include "match.h" +#include "parse.h" +#include "pointer-set.h" +#include "target.h" +#include "toplev.h" + +/* Match an end of OpenMP directive. End of OpenMP directive is optional + whitespace, followed by '\n' or comment '!'. */ + +match +gfc_match_omp_eos (void) +{ + locus old_loc; + char c; + + old_loc = gfc_current_locus; + gfc_gobble_whitespace (); + + c = gfc_next_ascii_char (); + switch (c) + { + case '!': + do + c = gfc_next_ascii_char (); + while (c != '\n'); + /* Fall through */ + + case '\n': + return MATCH_YES; + } + + gfc_current_locus = old_loc; + return MATCH_NO; +} + +/* Free an omp_clauses structure. */ + +void +gfc_free_omp_clauses (gfc_omp_clauses *c) +{ + int i; + if (c == NULL) + return; + + gfc_free_expr (c->if_expr); + gfc_free_expr (c->num_threads); + gfc_free_expr (c->chunk_size); + for (i = 0; i < OMP_LIST_NUM; i++) + gfc_free_namelist (c->lists[i]); + gfc_free (c); +} + +/* Match a variable/common block list and construct a namelist from it. */ + +static match +gfc_match_omp_variable_list (const char *str, gfc_namelist **list, + bool allow_common) +{ + gfc_namelist *head, *tail, *p; + locus old_loc; + char n[GFC_MAX_SYMBOL_LEN+1]; + gfc_symbol *sym; + match m; + gfc_symtree *st; + + head = tail = NULL; + + old_loc = gfc_current_locus; + + m = gfc_match (str); + if (m != MATCH_YES) + return m; + + for (;;) + { + m = gfc_match_symbol (&sym, 1); + switch (m) + { + case MATCH_YES: + gfc_set_sym_referenced (sym); + p = gfc_get_namelist (); + if (head == NULL) + head = tail = p; + else + { + tail->next = p; + tail = tail->next; + } + tail->sym = sym; + goto next_item; + case MATCH_NO: + break; + case MATCH_ERROR: + goto cleanup; + } + + if (!allow_common) + goto syntax; + + m = gfc_match (" / %n /", n); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + + st = gfc_find_symtree (gfc_current_ns->common_root, n); + if (st == NULL) + { + gfc_error ("COMMON block /%s/ not found at %C", n); + goto cleanup; + } + for (sym = st->n.common->head; sym; sym = sym->common_next) + { + gfc_set_sym_referenced (sym); + p = gfc_get_namelist (); + if (head == NULL) + head = tail = p; + else + { + tail->next = p; + tail = tail->next; + } + tail->sym = sym; + } + + next_item: + if (gfc_match_char (')') == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + + while (*list) + list = &(*list)->next; + + *list = head; + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in OpenMP variable list at %C"); + +cleanup: + gfc_free_namelist (head); + gfc_current_locus = old_loc; + return MATCH_ERROR; +} + +#define OMP_CLAUSE_PRIVATE (1 << 0) +#define OMP_CLAUSE_FIRSTPRIVATE (1 << 1) +#define OMP_CLAUSE_LASTPRIVATE (1 << 2) +#define OMP_CLAUSE_COPYPRIVATE (1 << 3) +#define OMP_CLAUSE_SHARED (1 << 4) +#define OMP_CLAUSE_COPYIN (1 << 5) +#define OMP_CLAUSE_REDUCTION (1 << 6) +#define OMP_CLAUSE_IF (1 << 7) +#define OMP_CLAUSE_NUM_THREADS (1 << 8) +#define OMP_CLAUSE_SCHEDULE (1 << 9) +#define OMP_CLAUSE_DEFAULT (1 << 10) +#define OMP_CLAUSE_ORDERED (1 << 11) +#define OMP_CLAUSE_COLLAPSE (1 << 12) +#define OMP_CLAUSE_UNTIED (1 << 13) + +/* Match OpenMP directive clauses. MASK is a bitmask of + clauses that are allowed for a particular directive. */ + +static match +gfc_match_omp_clauses (gfc_omp_clauses **cp, int mask) +{ + gfc_omp_clauses *c = gfc_get_omp_clauses (); + locus old_loc; + bool needs_space = true, first = true; + + *cp = NULL; + while (1) + { + if ((first || gfc_match_char (',') != MATCH_YES) + && (needs_space && gfc_match_space () != MATCH_YES)) + break; + needs_space = false; + first = false; + gfc_gobble_whitespace (); + if ((mask & OMP_CLAUSE_IF) && c->if_expr == NULL + && gfc_match ("if ( %e )", &c->if_expr) == MATCH_YES) + continue; + if ((mask & OMP_CLAUSE_NUM_THREADS) && c->num_threads == NULL + && gfc_match ("num_threads ( %e )", &c->num_threads) == MATCH_YES) + continue; + if ((mask & OMP_CLAUSE_PRIVATE) + && gfc_match_omp_variable_list ("private (", + &c->lists[OMP_LIST_PRIVATE], true) + == MATCH_YES) + continue; + if ((mask & OMP_CLAUSE_FIRSTPRIVATE) + && gfc_match_omp_variable_list ("firstprivate (", + &c->lists[OMP_LIST_FIRSTPRIVATE], + true) + == MATCH_YES) + continue; + if ((mask & OMP_CLAUSE_LASTPRIVATE) + && gfc_match_omp_variable_list ("lastprivate (", + &c->lists[OMP_LIST_LASTPRIVATE], + true) + == MATCH_YES) + continue; + if ((mask & OMP_CLAUSE_COPYPRIVATE) + && gfc_match_omp_variable_list ("copyprivate (", + &c->lists[OMP_LIST_COPYPRIVATE], + true) + == MATCH_YES) + continue; + if ((mask & OMP_CLAUSE_SHARED) + && gfc_match_omp_variable_list ("shared (", + &c->lists[OMP_LIST_SHARED], true) + == MATCH_YES) + continue; + if ((mask & OMP_CLAUSE_COPYIN) + && gfc_match_omp_variable_list ("copyin (", + &c->lists[OMP_LIST_COPYIN], true) + == MATCH_YES) + continue; + old_loc = gfc_current_locus; + if ((mask & OMP_CLAUSE_REDUCTION) + && gfc_match ("reduction ( ") == MATCH_YES) + { + int reduction = OMP_LIST_NUM; + char buffer[GFC_MAX_SYMBOL_LEN + 1]; + if (gfc_match_char ('+') == MATCH_YES) + reduction = OMP_LIST_PLUS; + else if (gfc_match_char ('*') == MATCH_YES) + reduction = OMP_LIST_MULT; + else if (gfc_match_char ('-') == MATCH_YES) + reduction = OMP_LIST_SUB; + else if (gfc_match (".and.") == MATCH_YES) + reduction = OMP_LIST_AND; + else if (gfc_match (".or.") == MATCH_YES) + reduction = OMP_LIST_OR; + else if (gfc_match (".eqv.") == MATCH_YES) + reduction = OMP_LIST_EQV; + else if (gfc_match (".neqv.") == MATCH_YES) + reduction = OMP_LIST_NEQV; + else if (gfc_match_name (buffer) == MATCH_YES) + { + gfc_symbol *sym; + const char *n = buffer; + + gfc_find_symbol (buffer, NULL, 1, &sym); + if (sym != NULL) + { + if (sym->attr.intrinsic) + n = sym->name; + else if ((sym->attr.flavor != FL_UNKNOWN + && sym->attr.flavor != FL_PROCEDURE) + || sym->attr.external + || sym->attr.generic + || sym->attr.entry + || sym->attr.result + || sym->attr.dummy + || sym->attr.subroutine + || sym->attr.pointer + || sym->attr.target + || sym->attr.cray_pointer + || sym->attr.cray_pointee + || (sym->attr.proc != PROC_UNKNOWN + && sym->attr.proc != PROC_INTRINSIC) + || sym->attr.if_source != IFSRC_UNKNOWN + || sym == sym->ns->proc_name) + { + gfc_error_now ("%s is not INTRINSIC procedure name " + "at %C", buffer); + sym = NULL; + } + else + n = sym->name; + } + if (strcmp (n, "max") == 0) + reduction = OMP_LIST_MAX; + else if (strcmp (n, "min") == 0) + reduction = OMP_LIST_MIN; + else if (strcmp (n, "iand") == 0) + reduction = OMP_LIST_IAND; + else if (strcmp (n, "ior") == 0) + reduction = OMP_LIST_IOR; + else if (strcmp (n, "ieor") == 0) + reduction = OMP_LIST_IEOR; + if (reduction != OMP_LIST_NUM + && sym != NULL + && ! sym->attr.intrinsic + && ! sym->attr.use_assoc + && ((sym->attr.flavor == FL_UNKNOWN + && gfc_add_flavor (&sym->attr, FL_PROCEDURE, + sym->name, NULL) == FAILURE) + || gfc_add_intrinsic (&sym->attr, NULL) == FAILURE)) + { + gfc_free_omp_clauses (c); + return MATCH_ERROR; + } + } + if (reduction != OMP_LIST_NUM + && gfc_match_omp_variable_list (" :", &c->lists[reduction], + false) + == MATCH_YES) + continue; + else + gfc_current_locus = old_loc; + } + if ((mask & OMP_CLAUSE_DEFAULT) + && c->default_sharing == OMP_DEFAULT_UNKNOWN) + { + if (gfc_match ("default ( shared )") == MATCH_YES) + c->default_sharing = OMP_DEFAULT_SHARED; + else if (gfc_match ("default ( private )") == MATCH_YES) + c->default_sharing = OMP_DEFAULT_PRIVATE; + else if (gfc_match ("default ( none )") == MATCH_YES) + c->default_sharing = OMP_DEFAULT_NONE; + else if (gfc_match ("default ( firstprivate )") == MATCH_YES) + c->default_sharing = OMP_DEFAULT_FIRSTPRIVATE; + if (c->default_sharing != OMP_DEFAULT_UNKNOWN) + continue; + } + old_loc = gfc_current_locus; + if ((mask & OMP_CLAUSE_SCHEDULE) + && c->sched_kind == OMP_SCHED_NONE + && gfc_match ("schedule ( ") == MATCH_YES) + { + if (gfc_match ("static") == MATCH_YES) + c->sched_kind = OMP_SCHED_STATIC; + else if (gfc_match ("dynamic") == MATCH_YES) + c->sched_kind = OMP_SCHED_DYNAMIC; + else if (gfc_match ("guided") == MATCH_YES) + c->sched_kind = OMP_SCHED_GUIDED; + else if (gfc_match ("runtime") == MATCH_YES) + c->sched_kind = OMP_SCHED_RUNTIME; + else if (gfc_match ("auto") == MATCH_YES) + c->sched_kind = OMP_SCHED_AUTO; + if (c->sched_kind != OMP_SCHED_NONE) + { + match m = MATCH_NO; + if (c->sched_kind != OMP_SCHED_RUNTIME + && c->sched_kind != OMP_SCHED_AUTO) + m = gfc_match (" , %e )", &c->chunk_size); + if (m != MATCH_YES) + m = gfc_match_char (')'); + if (m != MATCH_YES) + c->sched_kind = OMP_SCHED_NONE; + } + if (c->sched_kind != OMP_SCHED_NONE) + continue; + else + gfc_current_locus = old_loc; + } + if ((mask & OMP_CLAUSE_ORDERED) && !c->ordered + && gfc_match ("ordered") == MATCH_YES) + { + c->ordered = needs_space = true; + continue; + } + if ((mask & OMP_CLAUSE_UNTIED) && !c->untied + && gfc_match ("untied") == MATCH_YES) + { + c->untied = needs_space = true; + continue; + } + if ((mask & OMP_CLAUSE_COLLAPSE) && !c->collapse) + { + gfc_expr *cexpr = NULL; + match m = gfc_match ("collapse ( %e )", &cexpr); + + if (m == MATCH_YES) + { + int collapse; + const char *p = gfc_extract_int (cexpr, &collapse); + if (p) + { + gfc_error (p); + collapse = 1; + } + else if (collapse <= 0) + { + gfc_error ("COLLAPSE clause argument not constant positive integer at %C"); + collapse = 1; + } + c->collapse = collapse; + gfc_free_expr (cexpr); + continue; + } + } + + break; + } + + if (gfc_match_omp_eos () != MATCH_YES) + { + gfc_free_omp_clauses (c); + return MATCH_ERROR; + } + + *cp = c; + return MATCH_YES; +} + +#define OMP_PARALLEL_CLAUSES \ + (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE | OMP_CLAUSE_SHARED \ + | OMP_CLAUSE_COPYIN | OMP_CLAUSE_REDUCTION | OMP_CLAUSE_IF \ + | OMP_CLAUSE_NUM_THREADS | OMP_CLAUSE_DEFAULT) +#define OMP_DO_CLAUSES \ + (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE \ + | OMP_CLAUSE_LASTPRIVATE | OMP_CLAUSE_REDUCTION \ + | OMP_CLAUSE_SCHEDULE | OMP_CLAUSE_ORDERED | OMP_CLAUSE_COLLAPSE) +#define OMP_SECTIONS_CLAUSES \ + (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE \ + | OMP_CLAUSE_LASTPRIVATE | OMP_CLAUSE_REDUCTION) +#define OMP_TASK_CLAUSES \ + (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE | OMP_CLAUSE_SHARED \ + | OMP_CLAUSE_IF | OMP_CLAUSE_DEFAULT | OMP_CLAUSE_UNTIED) + +match +gfc_match_omp_parallel (void) +{ + gfc_omp_clauses *c; + if (gfc_match_omp_clauses (&c, OMP_PARALLEL_CLAUSES) != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_PARALLEL; + new_st.ext.omp_clauses = c; + return MATCH_YES; +} + + +match +gfc_match_omp_task (void) +{ + gfc_omp_clauses *c; + if (gfc_match_omp_clauses (&c, OMP_TASK_CLAUSES) != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_TASK; + new_st.ext.omp_clauses = c; + return MATCH_YES; +} + + +match +gfc_match_omp_taskwait (void) +{ + if (gfc_match_omp_eos () != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_TASKWAIT; + new_st.ext.omp_clauses = NULL; + return MATCH_YES; +} + + +match +gfc_match_omp_critical (void) +{ + char n[GFC_MAX_SYMBOL_LEN+1]; + + if (gfc_match (" ( %n )", n) != MATCH_YES) + n[0] = '\0'; + if (gfc_match_omp_eos () != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_CRITICAL; + new_st.ext.omp_name = n[0] ? xstrdup (n) : NULL; + return MATCH_YES; +} + + +match +gfc_match_omp_do (void) +{ + gfc_omp_clauses *c; + if (gfc_match_omp_clauses (&c, OMP_DO_CLAUSES) != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_DO; + new_st.ext.omp_clauses = c; + return MATCH_YES; +} + + +match +gfc_match_omp_flush (void) +{ + gfc_namelist *list = NULL; + gfc_match_omp_variable_list (" (", &list, true); + if (gfc_match_omp_eos () != MATCH_YES) + { + gfc_free_namelist (list); + return MATCH_ERROR; + } + new_st.op = EXEC_OMP_FLUSH; + new_st.ext.omp_namelist = list; + return MATCH_YES; +} + + +match +gfc_match_omp_threadprivate (void) +{ + locus old_loc; + char n[GFC_MAX_SYMBOL_LEN+1]; + gfc_symbol *sym; + match m; + gfc_symtree *st; + + old_loc = gfc_current_locus; + + m = gfc_match (" ("); + if (m != MATCH_YES) + return m; + + for (;;) + { + m = gfc_match_symbol (&sym, 0); + switch (m) + { + case MATCH_YES: + if (sym->attr.in_common) + gfc_error_now ("Threadprivate variable at %C is an element of " + "a COMMON block"); + else if (gfc_add_threadprivate (&sym->attr, sym->name, + &sym->declared_at) == FAILURE) + goto cleanup; + goto next_item; + case MATCH_NO: + break; + case MATCH_ERROR: + goto cleanup; + } + + m = gfc_match (" / %n /", n); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO || n[0] == '\0') + goto syntax; + + st = gfc_find_symtree (gfc_current_ns->common_root, n); + if (st == NULL) + { + gfc_error ("COMMON block /%s/ not found at %C", n); + goto cleanup; + } + st->n.common->threadprivate = 1; + for (sym = st->n.common->head; sym; sym = sym->common_next) + if (gfc_add_threadprivate (&sym->attr, sym->name, + &sym->declared_at) == FAILURE) + goto cleanup; + + next_item: + if (gfc_match_char (')') == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in !$OMP THREADPRIVATE list at %C"); + +cleanup: + gfc_current_locus = old_loc; + return MATCH_ERROR; +} + + +match +gfc_match_omp_parallel_do (void) +{ + gfc_omp_clauses *c; + if (gfc_match_omp_clauses (&c, OMP_PARALLEL_CLAUSES | OMP_DO_CLAUSES) + != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_PARALLEL_DO; + new_st.ext.omp_clauses = c; + return MATCH_YES; +} + + +match +gfc_match_omp_parallel_sections (void) +{ + gfc_omp_clauses *c; + if (gfc_match_omp_clauses (&c, OMP_PARALLEL_CLAUSES | OMP_SECTIONS_CLAUSES) + != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_PARALLEL_SECTIONS; + new_st.ext.omp_clauses = c; + return MATCH_YES; +} + + +match +gfc_match_omp_parallel_workshare (void) +{ + gfc_omp_clauses *c; + if (gfc_match_omp_clauses (&c, OMP_PARALLEL_CLAUSES) != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_PARALLEL_WORKSHARE; + new_st.ext.omp_clauses = c; + return MATCH_YES; +} + + +match +gfc_match_omp_sections (void) +{ + gfc_omp_clauses *c; + if (gfc_match_omp_clauses (&c, OMP_SECTIONS_CLAUSES) != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_SECTIONS; + new_st.ext.omp_clauses = c; + return MATCH_YES; +} + + +match +gfc_match_omp_single (void) +{ + gfc_omp_clauses *c; + if (gfc_match_omp_clauses (&c, OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE) + != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_SINGLE; + new_st.ext.omp_clauses = c; + return MATCH_YES; +} + + +match +gfc_match_omp_workshare (void) +{ + if (gfc_match_omp_eos () != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_WORKSHARE; + new_st.ext.omp_clauses = gfc_get_omp_clauses (); + return MATCH_YES; +} + + +match +gfc_match_omp_master (void) +{ + if (gfc_match_omp_eos () != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_MASTER; + new_st.ext.omp_clauses = NULL; + return MATCH_YES; +} + + +match +gfc_match_omp_ordered (void) +{ + if (gfc_match_omp_eos () != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_ORDERED; + new_st.ext.omp_clauses = NULL; + return MATCH_YES; +} + + +match +gfc_match_omp_atomic (void) +{ + if (gfc_match_omp_eos () != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_ATOMIC; + new_st.ext.omp_clauses = NULL; + return MATCH_YES; +} + + +match +gfc_match_omp_barrier (void) +{ + if (gfc_match_omp_eos () != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_BARRIER; + new_st.ext.omp_clauses = NULL; + return MATCH_YES; +} + + +match +gfc_match_omp_end_nowait (void) +{ + bool nowait = false; + if (gfc_match ("% nowait") == MATCH_YES) + nowait = true; + if (gfc_match_omp_eos () != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_END_NOWAIT; + new_st.ext.omp_bool = nowait; + return MATCH_YES; +} + + +match +gfc_match_omp_end_single (void) +{ + gfc_omp_clauses *c; + if (gfc_match ("% nowait") == MATCH_YES) + { + new_st.op = EXEC_OMP_END_NOWAIT; + new_st.ext.omp_bool = true; + return MATCH_YES; + } + if (gfc_match_omp_clauses (&c, OMP_CLAUSE_COPYPRIVATE) != MATCH_YES) + return MATCH_ERROR; + new_st.op = EXEC_OMP_END_SINGLE; + new_st.ext.omp_clauses = c; + return MATCH_YES; +} + + +/* OpenMP directive resolving routines. */ + +static void +resolve_omp_clauses (gfc_code *code) +{ + gfc_omp_clauses *omp_clauses = code->ext.omp_clauses; + gfc_namelist *n; + int list; + static const char *clause_names[] + = { "PRIVATE", "FIRSTPRIVATE", "LASTPRIVATE", "COPYPRIVATE", "SHARED", + "COPYIN", "REDUCTION" }; + + if (omp_clauses == NULL) + return; + + if (omp_clauses->if_expr) + { + gfc_expr *expr = omp_clauses->if_expr; + if (gfc_resolve_expr (expr) == FAILURE + || expr->ts.type != BT_LOGICAL || expr->rank != 0) + gfc_error ("IF clause at %L requires a scalar LOGICAL expression", + &expr->where); + } + if (omp_clauses->num_threads) + { + gfc_expr *expr = omp_clauses->num_threads; + if (gfc_resolve_expr (expr) == FAILURE + || expr->ts.type != BT_INTEGER || expr->rank != 0) + gfc_error ("NUM_THREADS clause at %L requires a scalar " + "INTEGER expression", &expr->where); + } + if (omp_clauses->chunk_size) + { + gfc_expr *expr = omp_clauses->chunk_size; + if (gfc_resolve_expr (expr) == FAILURE + || expr->ts.type != BT_INTEGER || expr->rank != 0) + gfc_error ("SCHEDULE clause's chunk_size at %L requires " + "a scalar INTEGER expression", &expr->where); + } + + /* Check that no symbol appears on multiple clauses, except that + a symbol can appear on both firstprivate and lastprivate. */ + for (list = 0; list < OMP_LIST_NUM; list++) + for (n = omp_clauses->lists[list]; n; n = n->next) + { + n->sym->mark = 0; + if (n->sym->attr.flavor == FL_VARIABLE) + continue; + if (n->sym->attr.flavor == FL_PROCEDURE + && n->sym->result == n->sym + && n->sym->attr.function) + { + if (gfc_current_ns->proc_name == n->sym + || (gfc_current_ns->parent + && gfc_current_ns->parent->proc_name == n->sym)) + continue; + if (gfc_current_ns->proc_name->attr.entry_master) + { + gfc_entry_list *el = gfc_current_ns->entries; + for (; el; el = el->next) + if (el->sym == n->sym) + break; + if (el) + continue; + } + if (gfc_current_ns->parent + && gfc_current_ns->parent->proc_name->attr.entry_master) + { + gfc_entry_list *el = gfc_current_ns->parent->entries; + for (; el; el = el->next) + if (el->sym == n->sym) + break; + if (el) + continue; + } + } + gfc_error ("Object '%s' is not a variable at %L", n->sym->name, + &code->loc); + } + + for (list = 0; list < OMP_LIST_NUM; list++) + if (list != OMP_LIST_FIRSTPRIVATE && list != OMP_LIST_LASTPRIVATE) + for (n = omp_clauses->lists[list]; n; n = n->next) + if (n->sym->mark) + gfc_error ("Symbol '%s' present on multiple clauses at %L", + n->sym->name, &code->loc); + else + n->sym->mark = 1; + + gcc_assert (OMP_LIST_LASTPRIVATE == OMP_LIST_FIRSTPRIVATE + 1); + for (list = OMP_LIST_FIRSTPRIVATE; list <= OMP_LIST_LASTPRIVATE; list++) + for (n = omp_clauses->lists[list]; n; n = n->next) + if (n->sym->mark) + { + gfc_error ("Symbol '%s' present on multiple clauses at %L", + n->sym->name, &code->loc); + n->sym->mark = 0; + } + + for (n = omp_clauses->lists[OMP_LIST_FIRSTPRIVATE]; n; n = n->next) + if (n->sym->mark) + gfc_error ("Symbol '%s' present on multiple clauses at %L", + n->sym->name, &code->loc); + else + n->sym->mark = 1; + + for (n = omp_clauses->lists[OMP_LIST_LASTPRIVATE]; n; n = n->next) + n->sym->mark = 0; + + for (n = omp_clauses->lists[OMP_LIST_LASTPRIVATE]; n; n = n->next) + if (n->sym->mark) + gfc_error ("Symbol '%s' present on multiple clauses at %L", + n->sym->name, &code->loc); + else + n->sym->mark = 1; + + for (list = 0; list < OMP_LIST_NUM; list++) + if ((n = omp_clauses->lists[list]) != NULL) + { + const char *name; + + if (list < OMP_LIST_REDUCTION_FIRST) + name = clause_names[list]; + else if (list <= OMP_LIST_REDUCTION_LAST) + name = clause_names[OMP_LIST_REDUCTION_FIRST]; + else + gcc_unreachable (); + + switch (list) + { + case OMP_LIST_COPYIN: + for (; n != NULL; n = n->next) + { + if (!n->sym->attr.threadprivate) + gfc_error ("Non-THREADPRIVATE object '%s' in COPYIN clause" + " at %L", n->sym->name, &code->loc); + if (n->sym->ts.type == BT_DERIVED && n->sym->ts.derived->attr.alloc_comp) + gfc_error ("COPYIN clause object '%s' at %L has ALLOCATABLE components", + n->sym->name, &code->loc); + } + break; + case OMP_LIST_COPYPRIVATE: + for (; n != NULL; n = n->next) + { + if (n->sym->as && n->sym->as->type == AS_ASSUMED_SIZE) + gfc_error ("Assumed size array '%s' in COPYPRIVATE clause " + "at %L", n->sym->name, &code->loc); + if (n->sym->ts.type == BT_DERIVED && n->sym->ts.derived->attr.alloc_comp) + gfc_error ("COPYPRIVATE clause object '%s' at %L has ALLOCATABLE components", + n->sym->name, &code->loc); + } + break; + case OMP_LIST_SHARED: + for (; n != NULL; n = n->next) + { + if (n->sym->attr.threadprivate) + gfc_error ("THREADPRIVATE object '%s' in SHARED clause at " + "%L", n->sym->name, &code->loc); + if (n->sym->attr.cray_pointee) + gfc_error ("Cray pointee '%s' in SHARED clause at %L", + n->sym->name, &code->loc); + } + break; + default: + for (; n != NULL; n = n->next) + { + if (n->sym->attr.threadprivate) + gfc_error ("THREADPRIVATE object '%s' in %s clause at %L", + n->sym->name, name, &code->loc); + if (n->sym->attr.cray_pointee) + gfc_error ("Cray pointee '%s' in %s clause at %L", + n->sym->name, name, &code->loc); + if (list != OMP_LIST_PRIVATE) + { + if (n->sym->attr.pointer) + gfc_error ("POINTER object '%s' in %s clause at %L", + n->sym->name, name, &code->loc); + /* Variables in REDUCTION-clauses must be of intrinsic type (flagged below). */ + if ((list < OMP_LIST_REDUCTION_FIRST || list > OMP_LIST_REDUCTION_LAST) && + n->sym->ts.type == BT_DERIVED && n->sym->ts.derived->attr.alloc_comp) + gfc_error ("%s clause object '%s' has ALLOCATABLE components at %L", + name, n->sym->name, &code->loc); + if (n->sym->attr.cray_pointer) + gfc_error ("Cray pointer '%s' in %s clause at %L", + n->sym->name, name, &code->loc); + } + if (n->sym->as && n->sym->as->type == AS_ASSUMED_SIZE) + gfc_error ("Assumed size array '%s' in %s clause at %L", + n->sym->name, name, &code->loc); + if (n->sym->attr.in_namelist + && (list < OMP_LIST_REDUCTION_FIRST + || list > OMP_LIST_REDUCTION_LAST)) + gfc_error ("Variable '%s' in %s clause is used in " + "NAMELIST statement at %L", + n->sym->name, name, &code->loc); + switch (list) + { + case OMP_LIST_PLUS: + case OMP_LIST_MULT: + case OMP_LIST_SUB: + if (!gfc_numeric_ts (&n->sym->ts)) + gfc_error ("%c REDUCTION variable '%s' at %L must be of numeric type, got %s", + list == OMP_LIST_PLUS ? '+' + : list == OMP_LIST_MULT ? '*' : '-', + n->sym->name, &code->loc, + gfc_typename (&n->sym->ts)); + break; + case OMP_LIST_AND: + case OMP_LIST_OR: + case OMP_LIST_EQV: + case OMP_LIST_NEQV: + if (n->sym->ts.type != BT_LOGICAL) + gfc_error ("%s REDUCTION variable '%s' must be LOGICAL " + "at %L", + list == OMP_LIST_AND ? ".AND." + : list == OMP_LIST_OR ? ".OR." + : list == OMP_LIST_EQV ? ".EQV." : ".NEQV.", + n->sym->name, &code->loc); + break; + case OMP_LIST_MAX: + case OMP_LIST_MIN: + if (n->sym->ts.type != BT_INTEGER + && n->sym->ts.type != BT_REAL) + gfc_error ("%s REDUCTION variable '%s' must be " + "INTEGER or REAL at %L", + list == OMP_LIST_MAX ? "MAX" : "MIN", + n->sym->name, &code->loc); + break; + case OMP_LIST_IAND: + case OMP_LIST_IOR: + case OMP_LIST_IEOR: + if (n->sym->ts.type != BT_INTEGER) + gfc_error ("%s REDUCTION variable '%s' must be INTEGER " + "at %L", + list == OMP_LIST_IAND ? "IAND" + : list == OMP_LIST_MULT ? "IOR" : "IEOR", + n->sym->name, &code->loc); + break; + /* Workaround for PR middle-end/26316, nothing really needs + to be done here for OMP_LIST_PRIVATE. */ + case OMP_LIST_PRIVATE: + gcc_assert (code->op != EXEC_NOP); + default: + break; + } + } + break; + } + } +} + + +/* Return true if SYM is ever referenced in EXPR except in the SE node. */ + +static bool +expr_references_sym (gfc_expr *e, gfc_symbol *s, gfc_expr *se) +{ + gfc_actual_arglist *arg; + if (e == NULL || e == se) + return false; + switch (e->expr_type) + { + case EXPR_CONSTANT: + case EXPR_NULL: + case EXPR_VARIABLE: + case EXPR_STRUCTURE: + case EXPR_ARRAY: + if (e->symtree != NULL + && e->symtree->n.sym == s) + return true; + return false; + case EXPR_SUBSTRING: + if (e->ref != NULL + && (expr_references_sym (e->ref->u.ss.start, s, se) + || expr_references_sym (e->ref->u.ss.end, s, se))) + return true; + return false; + case EXPR_OP: + if (expr_references_sym (e->value.op.op2, s, se)) + return true; + return expr_references_sym (e->value.op.op1, s, se); + case EXPR_FUNCTION: + for (arg = e->value.function.actual; arg; arg = arg->next) + if (expr_references_sym (arg->expr, s, se)) + return true; + return false; + default: + gcc_unreachable (); + } +} + + +/* If EXPR is a conversion function that widens the type + if WIDENING is true or narrows the type if WIDENING is false, + return the inner expression, otherwise return NULL. */ + +static gfc_expr * +is_conversion (gfc_expr *expr, bool widening) +{ + gfc_typespec *ts1, *ts2; + + if (expr->expr_type != EXPR_FUNCTION + || expr->value.function.isym == NULL + || expr->value.function.esym != NULL + || expr->value.function.isym->id != GFC_ISYM_CONVERSION) + return NULL; + + if (widening) + { + ts1 = &expr->ts; + ts2 = &expr->value.function.actual->expr->ts; + } + else + { + ts1 = &expr->value.function.actual->expr->ts; + ts2 = &expr->ts; + } + + if (ts1->type > ts2->type + || (ts1->type == ts2->type && ts1->kind > ts2->kind)) + return expr->value.function.actual->expr; + + return NULL; +} + + +static void +resolve_omp_atomic (gfc_code *code) +{ + gfc_symbol *var; + gfc_expr *expr2; + + code = code->block->next; + gcc_assert (code->op == EXEC_ASSIGN); + gcc_assert (code->next == NULL); + + if (code->expr->expr_type != EXPR_VARIABLE + || code->expr->symtree == NULL + || code->expr->rank != 0 + || (code->expr->ts.type != BT_INTEGER + && code->expr->ts.type != BT_REAL + && code->expr->ts.type != BT_COMPLEX + && code->expr->ts.type != BT_LOGICAL)) + { + gfc_error ("!$OMP ATOMIC statement must set a scalar variable of " + "intrinsic type at %L", &code->loc); + return; + } + + var = code->expr->symtree->n.sym; + expr2 = is_conversion (code->expr2, false); + if (expr2 == NULL) + expr2 = code->expr2; + + if (expr2->expr_type == EXPR_OP) + { + gfc_expr *v = NULL, *e, *c; + gfc_intrinsic_op op = expr2->value.op.op; + gfc_intrinsic_op alt_op = INTRINSIC_NONE; + + switch (op) + { + case INTRINSIC_PLUS: + alt_op = INTRINSIC_MINUS; + break; + case INTRINSIC_TIMES: + alt_op = INTRINSIC_DIVIDE; + break; + case INTRINSIC_MINUS: + alt_op = INTRINSIC_PLUS; + break; + case INTRINSIC_DIVIDE: + alt_op = INTRINSIC_TIMES; + break; + case INTRINSIC_AND: + case INTRINSIC_OR: + break; + case INTRINSIC_EQV: + alt_op = INTRINSIC_NEQV; + break; + case INTRINSIC_NEQV: + alt_op = INTRINSIC_EQV; + break; + default: + gfc_error ("!$OMP ATOMIC assignment operator must be " + "+, *, -, /, .AND., .OR., .EQV. or .NEQV. at %L", + &expr2->where); + return; + } + + /* Check for var = var op expr resp. var = expr op var where + expr doesn't reference var and var op expr is mathematically + equivalent to var op (expr) resp. expr op var equivalent to + (expr) op var. We rely here on the fact that the matcher + for x op1 y op2 z where op1 and op2 have equal precedence + returns (x op1 y) op2 z. */ + e = expr2->value.op.op2; + if (e->expr_type == EXPR_VARIABLE + && e->symtree != NULL + && e->symtree->n.sym == var) + v = e; + else if ((c = is_conversion (e, true)) != NULL + && c->expr_type == EXPR_VARIABLE + && c->symtree != NULL + && c->symtree->n.sym == var) + v = c; + else + { + gfc_expr **p = NULL, **q; + for (q = &expr2->value.op.op1; (e = *q) != NULL; ) + if (e->expr_type == EXPR_VARIABLE + && e->symtree != NULL + && e->symtree->n.sym == var) + { + v = e; + break; + } + else if ((c = is_conversion (e, true)) != NULL) + q = &e->value.function.actual->expr; + else if (e->expr_type != EXPR_OP + || (e->value.op.op != op + && e->value.op.op != alt_op) + || e->rank != 0) + break; + else + { + p = q; + q = &e->value.op.op1; + } + + if (v == NULL) + { + gfc_error ("!$OMP ATOMIC assignment must be var = var op expr " + "or var = expr op var at %L", &expr2->where); + return; + } + + if (p != NULL) + { + e = *p; + switch (e->value.op.op) + { + case INTRINSIC_MINUS: + case INTRINSIC_DIVIDE: + case INTRINSIC_EQV: + case INTRINSIC_NEQV: + gfc_error ("!$OMP ATOMIC var = var op expr not " + "mathematically equivalent to var = var op " + "(expr) at %L", &expr2->where); + break; + default: + break; + } + + /* Canonicalize into var = var op (expr). */ + *p = e->value.op.op2; + e->value.op.op2 = expr2; + e->ts = expr2->ts; + if (code->expr2 == expr2) + code->expr2 = expr2 = e; + else + code->expr2->value.function.actual->expr = expr2 = e; + + if (!gfc_compare_types (&expr2->value.op.op1->ts, &expr2->ts)) + { + for (p = &expr2->value.op.op1; *p != v; + p = &(*p)->value.function.actual->expr) + ; + *p = NULL; + gfc_free_expr (expr2->value.op.op1); + expr2->value.op.op1 = v; + gfc_convert_type (v, &expr2->ts, 2); + } + } + } + + if (e->rank != 0 || expr_references_sym (code->expr2, var, v)) + { + gfc_error ("expr in !$OMP ATOMIC assignment var = var op expr " + "must be scalar and cannot reference var at %L", + &expr2->where); + return; + } + } + else if (expr2->expr_type == EXPR_FUNCTION + && expr2->value.function.isym != NULL + && expr2->value.function.esym == NULL + && expr2->value.function.actual != NULL + && expr2->value.function.actual->next != NULL) + { + gfc_actual_arglist *arg, *var_arg; + + switch (expr2->value.function.isym->id) + { + case GFC_ISYM_MIN: + case GFC_ISYM_MAX: + break; + case GFC_ISYM_IAND: + case GFC_ISYM_IOR: + case GFC_ISYM_IEOR: + if (expr2->value.function.actual->next->next != NULL) + { + gfc_error ("!$OMP ATOMIC assignment intrinsic IAND, IOR " + "or IEOR must have two arguments at %L", + &expr2->where); + return; + } + break; + default: + gfc_error ("!$OMP ATOMIC assignment intrinsic must be " + "MIN, MAX, IAND, IOR or IEOR at %L", + &expr2->where); + return; + } + + var_arg = NULL; + for (arg = expr2->value.function.actual; arg; arg = arg->next) + { + if ((arg == expr2->value.function.actual + || (var_arg == NULL && arg->next == NULL)) + && arg->expr->expr_type == EXPR_VARIABLE + && arg->expr->symtree != NULL + && arg->expr->symtree->n.sym == var) + var_arg = arg; + else if (expr_references_sym (arg->expr, var, NULL)) + gfc_error ("!$OMP ATOMIC intrinsic arguments except one must not " + "reference '%s' at %L", var->name, &arg->expr->where); + if (arg->expr->rank != 0) + gfc_error ("!$OMP ATOMIC intrinsic arguments must be scalar " + "at %L", &arg->expr->where); + } + + if (var_arg == NULL) + { + gfc_error ("First or last !$OMP ATOMIC intrinsic argument must " + "be '%s' at %L", var->name, &expr2->where); + return; + } + + if (var_arg != expr2->value.function.actual) + { + /* Canonicalize, so that var comes first. */ + gcc_assert (var_arg->next == NULL); + for (arg = expr2->value.function.actual; + arg->next != var_arg; arg = arg->next) + ; + var_arg->next = expr2->value.function.actual; + expr2->value.function.actual = var_arg; + arg->next = NULL; + } + } + else + gfc_error ("!$OMP ATOMIC assignment must have an operator or intrinsic " + "on right hand side at %L", &expr2->where); +} + + +struct omp_context +{ + gfc_code *code; + struct pointer_set_t *sharing_clauses; + struct pointer_set_t *private_iterators; + struct omp_context *previous; +} *omp_current_ctx; +static gfc_code *omp_current_do_code; +static int omp_current_do_collapse; + +void +gfc_resolve_omp_do_blocks (gfc_code *code, gfc_namespace *ns) +{ + if (code->block->next && code->block->next->op == EXEC_DO) + { + int i; + gfc_code *c; + + omp_current_do_code = code->block->next; + omp_current_do_collapse = code->ext.omp_clauses->collapse; + for (i = 1, c = omp_current_do_code; i < omp_current_do_collapse; i++) + { + c = c->block; + if (c->op != EXEC_DO || c->next == NULL) + break; + c = c->next; + if (c->op != EXEC_DO) + break; + } + if (i < omp_current_do_collapse || omp_current_do_collapse <= 0) + omp_current_do_collapse = 1; + } + gfc_resolve_blocks (code->block, ns); + omp_current_do_collapse = 0; + omp_current_do_code = NULL; +} + + +void +gfc_resolve_omp_parallel_blocks (gfc_code *code, gfc_namespace *ns) +{ + struct omp_context ctx; + gfc_omp_clauses *omp_clauses = code->ext.omp_clauses; + gfc_namelist *n; + int list; + + ctx.code = code; + ctx.sharing_clauses = pointer_set_create (); + ctx.private_iterators = pointer_set_create (); + ctx.previous = omp_current_ctx; + omp_current_ctx = &ctx; + + for (list = 0; list < OMP_LIST_NUM; list++) + for (n = omp_clauses->lists[list]; n; n = n->next) + pointer_set_insert (ctx.sharing_clauses, n->sym); + + if (code->op == EXEC_OMP_PARALLEL_DO) + gfc_resolve_omp_do_blocks (code, ns); + else + gfc_resolve_blocks (code->block, ns); + + omp_current_ctx = ctx.previous; + pointer_set_destroy (ctx.sharing_clauses); + pointer_set_destroy (ctx.private_iterators); +} + + +/* Note a DO iterator variable. This is special in !$omp parallel + construct, where they are predetermined private. */ + +void +gfc_resolve_do_iterator (gfc_code *code, gfc_symbol *sym) +{ + struct omp_context *ctx; + int i = omp_current_do_collapse; + gfc_code *c = omp_current_do_code; + + if (sym->attr.threadprivate) + return; + + /* !$omp do and !$omp parallel do iteration variable is predetermined + private just in the !$omp do resp. !$omp parallel do construct, + with no implications for the outer parallel constructs. */ + + while (i-- >= 1) + { + if (code == c) + return; + + c = c->block->next; + } + + for (ctx = omp_current_ctx; ctx; ctx = ctx->previous) + { + if (pointer_set_contains (ctx->sharing_clauses, sym)) + continue; + + if (! pointer_set_insert (ctx->private_iterators, sym)) + { + gfc_omp_clauses *omp_clauses = ctx->code->ext.omp_clauses; + gfc_namelist *p; + + p = gfc_get_namelist (); + p->sym = sym; + p->next = omp_clauses->lists[OMP_LIST_PRIVATE]; + omp_clauses->lists[OMP_LIST_PRIVATE] = p; + } + } +} + + +static void +resolve_omp_do (gfc_code *code) +{ + gfc_code *do_code, *c; + int list, i, collapse; + gfc_namelist *n; + gfc_symbol *dovar; + + if (code->ext.omp_clauses) + resolve_omp_clauses (code); + + do_code = code->block->next; + collapse = code->ext.omp_clauses->collapse; + if (collapse <= 0) + collapse = 1; + for (i = 1; i <= collapse; i++) + { + if (do_code->op == EXEC_DO_WHILE) + { + gfc_error ("!$OMP DO cannot be a DO WHILE or DO without loop control " + "at %L", &do_code->loc); + break; + } + gcc_assert (do_code->op == EXEC_DO); + if (do_code->ext.iterator->var->ts.type != BT_INTEGER) + gfc_error ("!$OMP DO iteration variable must be of type integer at %L", + &do_code->loc); + dovar = do_code->ext.iterator->var->symtree->n.sym; + if (dovar->attr.threadprivate) + gfc_error ("!$OMP DO iteration variable must not be THREADPRIVATE " + "at %L", &do_code->loc); + if (code->ext.omp_clauses) + for (list = 0; list < OMP_LIST_NUM; list++) + if (list != OMP_LIST_PRIVATE && list != OMP_LIST_LASTPRIVATE) + for (n = code->ext.omp_clauses->lists[list]; n; n = n->next) + if (dovar == n->sym) + { + gfc_error ("!$OMP DO iteration variable present on clause " + "other than PRIVATE or LASTPRIVATE at %L", + &do_code->loc); + break; + } + if (i > 1) + { + gfc_code *do_code2 = code->block->next; + int j; + + for (j = 1; j < i; j++) + { + gfc_symbol *ivar = do_code2->ext.iterator->var->symtree->n.sym; + if (dovar == ivar + || gfc_find_sym_in_expr (ivar, do_code->ext.iterator->start) + || gfc_find_sym_in_expr (ivar, do_code->ext.iterator->end) + || gfc_find_sym_in_expr (ivar, do_code->ext.iterator->step)) + { + gfc_error ("!$OMP DO collapsed loops don't form rectangular iteration space at %L", + &do_code->loc); + break; + } + if (j < i) + break; + do_code2 = do_code2->block->next; + } + } + if (i == collapse) + break; + for (c = do_code->next; c; c = c->next) + if (c->op != EXEC_NOP && c->op != EXEC_CONTINUE) + { + gfc_error ("collapsed !$OMP DO loops not perfectly nested at %L", + &c->loc); + break; + } + if (c) + break; + do_code = do_code->block; + if (do_code->op != EXEC_DO && do_code->op != EXEC_DO_WHILE) + { + gfc_error ("not enough DO loops for collapsed !$OMP DO at %L", + &code->loc); + break; + } + do_code = do_code->next; + if (do_code->op != EXEC_DO && do_code->op != EXEC_DO_WHILE) + { + gfc_error ("not enough DO loops for collapsed !$OMP DO at %L", + &code->loc); + break; + } + } +} + + +/* Resolve OpenMP directive clauses and check various requirements + of each directive. */ + +void +gfc_resolve_omp_directive (gfc_code *code, gfc_namespace *ns ATTRIBUTE_UNUSED) +{ + switch (code->op) + { + case EXEC_OMP_DO: + case EXEC_OMP_PARALLEL_DO: + resolve_omp_do (code); + break; + case EXEC_OMP_WORKSHARE: + case EXEC_OMP_PARALLEL_WORKSHARE: + case EXEC_OMP_PARALLEL: + case EXEC_OMP_PARALLEL_SECTIONS: + case EXEC_OMP_SECTIONS: + case EXEC_OMP_SINGLE: + if (code->ext.omp_clauses) + resolve_omp_clauses (code); + break; + case EXEC_OMP_ATOMIC: + resolve_omp_atomic (code); + break; + default: + break; + } +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/options.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/options.c new file mode 100644 index 0000000000..7a800ce8c6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/options.c @@ -0,0 +1,849 @@ +/* Parse and display command line options. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "flags.h" +#include "intl.h" +#include "opts.h" +#include "options.h" +#include "params.h" +#include "tree-inline.h" +#include "gfortran.h" +#include "target.h" +#include "cpp.h" + +gfc_option_t gfc_option; + + +/* Set flags that control warnings and errors for different + Fortran standards to their default values. Keep in sync with + libgfortran/runtime/compile_options.c (init_compile_options). */ + +static void +set_default_std_flags (void) +{ + gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F95_DEL + | GFC_STD_F2003 | GFC_STD_F2008 | GFC_STD_F95 | GFC_STD_F77 + | GFC_STD_GNU | GFC_STD_LEGACY; + gfc_option.warn_std = GFC_STD_F95_DEL | GFC_STD_LEGACY; +} + + +/* Get ready for options handling. Keep in sync with + libgfortran/runtime/compile_options.c (init_compile_options). */ + +unsigned int +gfc_init_options (unsigned int argc, const char **argv) +{ + gfc_source_file = NULL; + gfc_option.module_dir = NULL; + gfc_option.source_form = FORM_UNKNOWN; + gfc_option.fixed_line_length = 72; + gfc_option.free_line_length = 132; + gfc_option.max_continue_fixed = 255; + gfc_option.max_continue_free = 255; + gfc_option.max_identifier_length = GFC_MAX_SYMBOL_LEN; + gfc_option.max_subrecord_length = 0; + gfc_option.flag_max_array_constructor = 65535; + gfc_option.convert = GFC_CONVERT_NATIVE; + gfc_option.record_marker = 0; + gfc_option.dump_parse_tree = 0; + + gfc_option.warn_aliasing = 0; + gfc_option.warn_ampersand = 0; + gfc_option.warn_character_truncation = 0; + gfc_option.warn_array_temp = 0; + gfc_option.warn_conversion = 0; + gfc_option.warn_implicit_interface = 0; + gfc_option.warn_line_truncation = 0; + gfc_option.warn_surprising = 0; + gfc_option.warn_tabs = 1; + gfc_option.warn_underflow = 1; + gfc_option.warn_intrinsic_shadow = 0; + gfc_option.warn_intrinsics_std = 0; + gfc_option.warn_align_commons = 1; + gfc_option.max_errors = 25; + + gfc_option.flag_all_intrinsics = 0; + gfc_option.flag_default_double = 0; + gfc_option.flag_default_integer = 0; + gfc_option.flag_default_real = 0; + gfc_option.flag_dollar_ok = 0; + gfc_option.flag_underscoring = 1; + gfc_option.flag_f2c = 0; + gfc_option.flag_second_underscore = -1; + gfc_option.flag_implicit_none = 0; + + /* Default value of flag_max_stack_var_size is set in gfc_post_options. */ + gfc_option.flag_max_stack_var_size = -2; + + gfc_option.flag_range_check = 1; + gfc_option.flag_pack_derived = 0; + gfc_option.flag_repack_arrays = 0; + gfc_option.flag_preprocessed = 0; + gfc_option.flag_automatic = 1; + gfc_option.flag_backslash = 0; + gfc_option.flag_module_private = 0; + gfc_option.flag_backtrace = 0; + gfc_option.flag_check_array_temporaries = 0; + gfc_option.flag_allow_leading_underscore = 0; + gfc_option.flag_dump_core = 0; + gfc_option.flag_external_blas = 0; + gfc_option.blas_matmul_limit = 30; + gfc_option.flag_cray_pointer = 0; + gfc_option.flag_d_lines = -1; + gfc_option.flag_openmp = 0; + gfc_option.flag_sign_zero = 1; + gfc_option.flag_recursive = 0; + gfc_option.flag_init_integer = GFC_INIT_INTEGER_OFF; + gfc_option.flag_init_integer_value = 0; + gfc_option.flag_init_real = GFC_INIT_REAL_OFF; + gfc_option.flag_init_logical = GFC_INIT_LOGICAL_OFF; + gfc_option.flag_init_character = GFC_INIT_CHARACTER_OFF; + gfc_option.flag_init_character_value = (char)0; + gfc_option.flag_align_commons = 1; + + gfc_option.fpe = 0; + + /* Argument pointers cannot point to anything but their argument. */ + flag_argument_noalias = 3; + + flag_errno_math = 0; + + set_default_std_flags (); + + /* -fshort-enums can be default on some targets. */ + gfc_option.fshort_enums = targetm.default_short_enums (); + + /* Initialize cpp-related options. */ + gfc_cpp_init_options(argc, argv); + + return CL_Fortran; +} + + +/* Determine the source form from the filename extension. We assume + case insensitivity. */ + +static gfc_source_form +form_from_filename (const char *filename) +{ + static const struct + { + const char *extension; + gfc_source_form form; + } + exttype[] = + { + { + ".f90", FORM_FREE} + , + { + ".f95", FORM_FREE} + , + { + ".f03", FORM_FREE} + , + { + ".f08", FORM_FREE} + , + { + ".f", FORM_FIXED} + , + { + ".for", FORM_FIXED} + , + { + ".ftn", FORM_FIXED} + , + { + "", FORM_UNKNOWN} + }; /* sentinel value */ + + gfc_source_form f_form; + const char *fileext; + int i; + + /* Find end of file name. Note, filename is either a NULL pointer or + a NUL terminated string. */ + i = 0; + while (filename[i] != '\0') + i++; + + /* Find last period. */ + while (i >= 0 && (filename[i] != '.')) + i--; + + /* Did we see a file extension? */ + if (i < 0) + return FORM_UNKNOWN; /* Nope */ + + /* Get file extension and compare it to others. */ + fileext = &(filename[i]); + + i = -1; + f_form = FORM_UNKNOWN; + do + { + i++; + if (strcasecmp (fileext, exttype[i].extension) == 0) + { + f_form = exttype[i].form; + break; + } + } + while (exttype[i].form != FORM_UNKNOWN); + + return f_form; +} + + +/* Finalize commandline options. */ + +bool +gfc_post_options (const char **pfilename) +{ + const char *filename = *pfilename, *canon_source_file = NULL; + char *source_path; + int i; + + /* Issue an error if -fwhole-program was used. */ + if (flag_whole_program) + gfc_fatal_error ("Option -fwhole-program is not supported for Fortran"); + + /* Verify the input file name. */ + if (!filename || strcmp (filename, "-") == 0) + { + filename = ""; + } + + if (gfc_option.flag_preprocessed) + { + /* For preprocessed files, if the first tokens are of the form # NUM. + handle the directives so we know the original file name. */ + gfc_source_file = gfc_read_orig_filename (filename, &canon_source_file); + if (gfc_source_file == NULL) + gfc_source_file = filename; + else + *pfilename = gfc_source_file; + } + else + gfc_source_file = filename; + + if (canon_source_file == NULL) + canon_source_file = gfc_source_file; + + /* Adds the path where the source file is to the list of include files. */ + + i = strlen (canon_source_file); + while (i > 0 && !IS_DIR_SEPARATOR (canon_source_file[i])) + i--; + + if (i != 0) + { + source_path = (char *) alloca (i + 1); + memcpy (source_path, canon_source_file, i); + source_path[i] = 0; + gfc_add_include_path (source_path, true, true); + } + else + gfc_add_include_path (".", true, true); + + if (canon_source_file != gfc_source_file) + gfc_free (CONST_CAST (char *, canon_source_file)); + + /* Decide which form the file will be read in as. */ + + if (gfc_option.source_form != FORM_UNKNOWN) + gfc_current_form = gfc_option.source_form; + else + { + gfc_current_form = form_from_filename (filename); + + if (gfc_current_form == FORM_UNKNOWN) + { + gfc_current_form = FORM_FREE; + gfc_warning_now ("Reading file '%s' as free form", + (filename[0] == '\0') ? "" : filename); + } + } + + /* If the user specified -fd-lines-as-{code|comments} verify that we're + in fixed form. */ + if (gfc_current_form == FORM_FREE) + { + if (gfc_option.flag_d_lines == 0) + gfc_warning_now ("'-fd-lines-as-comments' has no effect " + "in free form"); + else if (gfc_option.flag_d_lines == 1) + gfc_warning_now ("'-fd-lines-as-code' has no effect in free form"); + } + + /* If -pedantic, warn about the use of GNU extensions. */ + if (pedantic && (gfc_option.allow_std & GFC_STD_GNU) != 0) + gfc_option.warn_std |= GFC_STD_GNU; + /* -std=legacy -pedantic is effectively -std=gnu. */ + if (pedantic && (gfc_option.allow_std & GFC_STD_LEGACY) != 0) + gfc_option.warn_std |= GFC_STD_F95_OBS | GFC_STD_F95_DEL | GFC_STD_LEGACY; + + /* If the user didn't explicitly specify -f(no)-second-underscore we + use it if we're trying to be compatible with f2c, and not + otherwise. */ + if (gfc_option.flag_second_underscore == -1) + gfc_option.flag_second_underscore = gfc_option.flag_f2c; + + if (!gfc_option.flag_automatic && gfc_option.flag_max_stack_var_size != -2 + && gfc_option.flag_max_stack_var_size != 0) + gfc_warning_now ("Flag -fno-automatic overwrites -fmax-stack-var-size=%d", + gfc_option.flag_max_stack_var_size); + else if (!gfc_option.flag_automatic && gfc_option.flag_recursive) + gfc_warning_now ("Flag -fno-automatic overwrites -frecursive"); + else if (!gfc_option.flag_automatic && gfc_option.flag_openmp) + gfc_warning_now ("Flag -fno-automatic overwrites -frecursive implied by " + "-fopenmp"); + else if (gfc_option.flag_max_stack_var_size != -2 + && gfc_option.flag_recursive) + gfc_warning_now ("Flag -frecursive overwrites -fmax-stack-var-size=%d", + gfc_option.flag_max_stack_var_size); + else if (gfc_option.flag_max_stack_var_size != -2 + && gfc_option.flag_openmp) + gfc_warning_now ("Flag -fmax-stack-var-size=%d overwrites -frecursive " + "implied by -fopenmp", + gfc_option.flag_max_stack_var_size); + + /* Implied -frecursive; implemented as -fmax-stack-var-size=-1. */ + if (gfc_option.flag_max_stack_var_size == -2 && gfc_option.flag_openmp) + gfc_option.flag_max_stack_var_size = -1; + + /* Set default. */ + if (gfc_option.flag_max_stack_var_size == -2) + gfc_option.flag_max_stack_var_size = 32768; + + /* Implement -frecursive as -fmax-stack-var-size=-1. */ + if (gfc_option.flag_recursive) + gfc_option.flag_max_stack_var_size = -1; + + /* Implement -fno-automatic as -fmax-stack-var-size=0. */ + if (!gfc_option.flag_automatic) + gfc_option.flag_max_stack_var_size = 0; + + if (pedantic) + { + gfc_option.warn_ampersand = 1; + gfc_option.warn_tabs = 0; + } + + gfc_cpp_post_options (); + +/* FIXME: return gfc_cpp_preprocess_only (); + + The return value of this function indicates whether the + backend needs to be initialized. On -E, we don't need + the backend. However, if we return 'true' here, an + ICE occurs. Initializing the backend doesn't hurt much, + hence, for now we can live with it as is. */ + return false; +} + + +/* Set the options for -Wall. */ + +static void +set_Wall (int setting) +{ + gfc_option.warn_aliasing = setting; + gfc_option.warn_ampersand = setting; + gfc_option.warn_line_truncation = setting; + gfc_option.warn_surprising = setting; + gfc_option.warn_tabs = !setting; + gfc_option.warn_underflow = setting; + gfc_option.warn_intrinsic_shadow = setting; + gfc_option.warn_intrinsics_std = setting; + gfc_option.warn_character_truncation = setting; + + warn_unused = setting; + warn_return_type = setting; + warn_switch = setting; + + /* We save the value of warn_uninitialized, since if they put + -Wuninitialized on the command line, we need to generate a + warning about not using it without also specifying -O. */ + if (setting == 0) + warn_uninitialized = 0; + else if (warn_uninitialized != 1) + warn_uninitialized = 2; +} + + +static void +gfc_handle_module_path_options (const char *arg) +{ + + if (gfc_option.module_dir != NULL) + gfc_fatal_error ("gfortran: Only one -J option allowed"); + + gfc_option.module_dir = (char *) gfc_getmem (strlen (arg) + 2); + strcpy (gfc_option.module_dir, arg); + strcat (gfc_option.module_dir, "/"); + + gfc_add_include_path (gfc_option.module_dir, true, false); +} + + +static void +gfc_handle_fpe_trap_option (const char *arg) +{ + int result, pos = 0, n; + static const char * const exception[] = { "invalid", "denormal", "zero", + "overflow", "underflow", + "precision", NULL }; + static const int opt_exception[] = { GFC_FPE_INVALID, GFC_FPE_DENORMAL, + GFC_FPE_ZERO, GFC_FPE_OVERFLOW, + GFC_FPE_UNDERFLOW, GFC_FPE_PRECISION, + 0 }; + + while (*arg) + { + while (*arg == ',') + arg++; + + while (arg[pos] && arg[pos] != ',') + pos++; + + result = 0; + for (n = 0; exception[n] != NULL; n++) + { + if (exception[n] && strncmp (exception[n], arg, pos) == 0) + { + gfc_option.fpe |= opt_exception[n]; + arg += pos; + pos = 0; + result = 1; + break; + } + } + if (!result) + gfc_fatal_error ("Argument to -ffpe-trap is not valid: %s", arg); + } +} + + +/* Handle command-line options. Returns 0 if unrecognized, 1 if + recognized and handled. */ + +int +gfc_handle_option (size_t scode, const char *arg, int value) +{ + int result = 1; + enum opt_code code = (enum opt_code) scode; + + /* Ignore file names. */ + if (code == N_OPTS) + return 1; + + if (gfc_cpp_handle_option (scode, arg, value) == 1) + return 1; + + switch (code) + { + default: + result = 0; + break; + + case OPT_Wall: + set_Wall (value); + break; + + case OPT_Waliasing: + gfc_option.warn_aliasing = value; + break; + + case OPT_Wampersand: + gfc_option.warn_ampersand = value; + break; + + case OPT_Warray_temporaries: + gfc_option.warn_array_temp = value; + break; + + case OPT_Wcharacter_truncation: + gfc_option.warn_character_truncation = value; + break; + + case OPT_Wconversion: + gfc_option.warn_conversion = value; + break; + + case OPT_Wimplicit_interface: + gfc_option.warn_implicit_interface = value; + break; + + case OPT_Wline_truncation: + gfc_option.warn_line_truncation = value; + break; + + case OPT_Wreturn_type: + warn_return_type = value; + break; + + case OPT_Wsurprising: + gfc_option.warn_surprising = value; + break; + + case OPT_Wtabs: + gfc_option.warn_tabs = value; + break; + + case OPT_Wunderflow: + gfc_option.warn_underflow = value; + break; + + case OPT_Wintrinsic_shadow: + gfc_option.warn_intrinsic_shadow = value; + break; + + case OPT_Walign_commons: + gfc_option.warn_align_commons = value; + break; + + case OPT_fall_intrinsics: + gfc_option.flag_all_intrinsics = 1; + break; + + case OPT_fautomatic: + gfc_option.flag_automatic = value; + break; + + case OPT_fallow_leading_underscore: + gfc_option.flag_allow_leading_underscore = value; + break; + + case OPT_fbackslash: + gfc_option.flag_backslash = value; + break; + + case OPT_fbacktrace: + gfc_option.flag_backtrace = value; + break; + + case OPT_fcheck_array_temporaries: + gfc_option.flag_check_array_temporaries = value; + break; + + case OPT_fdump_core: + gfc_option.flag_dump_core = value; + break; + + case OPT_fcray_pointer: + gfc_option.flag_cray_pointer = value; + break; + + case OPT_ff2c: + gfc_option.flag_f2c = value; + break; + + case OPT_fdollar_ok: + gfc_option.flag_dollar_ok = value; + break; + + case OPT_fexternal_blas: + gfc_option.flag_external_blas = value; + break; + + case OPT_fblas_matmul_limit_: + gfc_option.blas_matmul_limit = value; + break; + + case OPT_fd_lines_as_code: + gfc_option.flag_d_lines = 1; + break; + + case OPT_fd_lines_as_comments: + gfc_option.flag_d_lines = 0; + break; + + case OPT_fdump_parse_tree: + gfc_option.dump_parse_tree = value; + break; + + case OPT_ffixed_form: + gfc_option.source_form = FORM_FIXED; + break; + + case OPT_ffixed_line_length_none: + gfc_option.fixed_line_length = 0; + break; + + case OPT_ffixed_line_length_: + if (value != 0 && value < 7) + gfc_fatal_error ("Fixed line length must be at least seven."); + gfc_option.fixed_line_length = value; + break; + + case OPT_ffree_form: + gfc_option.source_form = FORM_FREE; + break; + + case OPT_fopenmp: + gfc_option.flag_openmp = value; + break; + + case OPT_ffree_line_length_none: + gfc_option.free_line_length = 0; + break; + + case OPT_ffree_line_length_: + if (value != 0 && value < 4) + gfc_fatal_error ("Free line length must be at least three."); + gfc_option.free_line_length = value; + break; + + case OPT_funderscoring: + gfc_option.flag_underscoring = value; + break; + + case OPT_fsecond_underscore: + gfc_option.flag_second_underscore = value; + break; + + case OPT_static_libgfortran: +#ifndef HAVE_LD_STATIC_DYNAMIC + gfc_fatal_error ("-static-libgfortran is not supported in this " + "configuration"); +#endif + break; + + case OPT_fimplicit_none: + gfc_option.flag_implicit_none = value; + break; + + case OPT_fintrinsic_modules_path: + gfc_add_include_path (arg, false, false); + gfc_add_intrinsic_modules_path (arg); + break; + + case OPT_fmax_array_constructor_: + gfc_option.flag_max_array_constructor = value > 65535 ? value : 65535; + break; + + case OPT_fmax_errors_: + gfc_option.max_errors = value; + break; + + case OPT_fmax_stack_var_size_: + gfc_option.flag_max_stack_var_size = value; + break; + + case OPT_fmodule_private: + gfc_option.flag_module_private = value; + break; + + case OPT_frange_check: + gfc_option.flag_range_check = value; + break; + + case OPT_fpack_derived: + gfc_option.flag_pack_derived = value; + break; + + case OPT_frepack_arrays: + gfc_option.flag_repack_arrays = value; + break; + + case OPT_fpreprocessed: + gfc_option.flag_preprocessed = value; + break; + + case OPT_fmax_identifier_length_: + if (value > GFC_MAX_SYMBOL_LEN) + gfc_fatal_error ("Maximum supported identifier length is %d", + GFC_MAX_SYMBOL_LEN); + gfc_option.max_identifier_length = value; + break; + + case OPT_fdefault_integer_8: + gfc_option.flag_default_integer = value; + break; + + case OPT_fdefault_real_8: + gfc_option.flag_default_real = value; + break; + + case OPT_fdefault_double_8: + gfc_option.flag_default_double = value; + break; + + case OPT_finit_local_zero: + gfc_option.flag_init_integer = GFC_INIT_INTEGER_ON; + gfc_option.flag_init_integer_value = 0; + gfc_option.flag_init_real = GFC_INIT_REAL_ZERO; + gfc_option.flag_init_logical = GFC_INIT_LOGICAL_FALSE; + gfc_option.flag_init_character = GFC_INIT_CHARACTER_ON; + gfc_option.flag_init_character_value = (char)0; + break; + + case OPT_finit_logical_: + if (!strcasecmp (arg, "false")) + gfc_option.flag_init_logical = GFC_INIT_LOGICAL_FALSE; + else if (!strcasecmp (arg, "true")) + gfc_option.flag_init_logical = GFC_INIT_LOGICAL_TRUE; + else + gfc_fatal_error ("Unrecognized option to -finit-logical: %s", + arg); + break; + + case OPT_finit_real_: + if (!strcasecmp (arg, "zero")) + gfc_option.flag_init_real = GFC_INIT_REAL_ZERO; + else if (!strcasecmp (arg, "nan")) + gfc_option.flag_init_real = GFC_INIT_REAL_NAN; + else if (!strcasecmp (arg, "inf")) + gfc_option.flag_init_real = GFC_INIT_REAL_INF; + else if (!strcasecmp (arg, "-inf")) + gfc_option.flag_init_real = GFC_INIT_REAL_NEG_INF; + else + gfc_fatal_error ("Unrecognized option to -finit-real: %s", + arg); + break; + + case OPT_finit_integer_: + gfc_option.flag_init_integer = GFC_INIT_INTEGER_ON; + gfc_option.flag_init_integer_value = atoi (arg); + break; + + case OPT_finit_character_: + if (value >= 0 && value <= 127) + { + gfc_option.flag_init_character = GFC_INIT_CHARACTER_ON; + gfc_option.flag_init_character_value = (char)value; + } + else + gfc_fatal_error ("The value of n in -finit-character=n must be " + "between 0 and 127"); + break; + + case OPT_I: + gfc_add_include_path (arg, true, false); + break; + + case OPT_J: + gfc_handle_module_path_options (arg); + break; + + case OPT_fsign_zero: + gfc_option.flag_sign_zero = value; + break; + + case OPT_ffpe_trap_: + gfc_handle_fpe_trap_option (arg); + break; + + case OPT_std_f95: + gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F95 | GFC_STD_F77; + gfc_option.warn_std = GFC_STD_F95_OBS; + gfc_option.max_continue_fixed = 19; + gfc_option.max_continue_free = 39; + gfc_option.max_identifier_length = 31; + gfc_option.warn_ampersand = 1; + gfc_option.warn_tabs = 0; + break; + + case OPT_std_f2003: + gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F77 + | GFC_STD_F2003 | GFC_STD_F95; + gfc_option.warn_std = GFC_STD_F95_OBS; + gfc_option.max_identifier_length = 63; + gfc_option.warn_ampersand = 1; + gfc_option.warn_tabs = 0; + break; + + case OPT_std_f2008: + gfc_option.allow_std = GFC_STD_F95_OBS | GFC_STD_F77 + | GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F2008; + gfc_option.warn_std = GFC_STD_F95_OBS; + gfc_option.max_identifier_length = 63; + gfc_option.warn_ampersand = 1; + gfc_option.warn_tabs = 0; + break; + + case OPT_std_gnu: + set_default_std_flags (); + break; + + case OPT_std_legacy: + set_default_std_flags (); + gfc_option.warn_std = 0; + break; + + case OPT_Wintrinsics_std: + gfc_option.warn_intrinsics_std = value; + break; + + case OPT_fshort_enums: + gfc_option.fshort_enums = 1; + break; + + case OPT_fconvert_little_endian: + gfc_option.convert = GFC_CONVERT_LITTLE; + break; + + case OPT_fconvert_big_endian: + gfc_option.convert = GFC_CONVERT_BIG; + break; + + case OPT_fconvert_native: + gfc_option.convert = GFC_CONVERT_NATIVE; + break; + + case OPT_fconvert_swap: + gfc_option.convert = GFC_CONVERT_SWAP; + break; + + case OPT_frecord_marker_4: + gfc_option.record_marker = 4; + break; + + case OPT_frecord_marker_8: + gfc_option.record_marker = 8; + break; + + case OPT_fmax_subrecord_length_: + if (value > MAX_SUBRECORD_LENGTH) + gfc_fatal_error ("Maximum subrecord length cannot exceed %d", + MAX_SUBRECORD_LENGTH); + + gfc_option.max_subrecord_length = value; + break; + + case OPT_frecursive: + gfc_option.flag_recursive = 1; + break; + + case OPT_falign_commons: + gfc_option.flag_align_commons = value; + break; + } + + return result; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/parse.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/parse.c new file mode 100644 index 0000000000..64272e2a51 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/parse.c @@ -0,0 +1,3870 @@ +/* Main parser. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include +#include "gfortran.h" +#include "match.h" +#include "parse.h" +#include "debug.h" + +/* Current statement label. Zero means no statement label. Because new_st + can get wiped during statement matching, we have to keep it separate. */ + +gfc_st_label *gfc_statement_label; + +static locus label_locus; +static jmp_buf eof_buf; + +gfc_state_data *gfc_state_stack; + +/* TODO: Re-order functions to kill these forward decls. */ +static void check_statement_label (gfc_statement); +static void undo_new_statement (void); +static void reject_statement (void); + + +/* A sort of half-matching function. We try to match the word on the + input with the passed string. If this succeeds, we call the + keyword-dependent matching function that will match the rest of the + statement. For single keywords, the matching subroutine is + gfc_match_eos(). */ + +static match +match_word (const char *str, match (*subr) (void), locus *old_locus) +{ + match m; + + if (str != NULL) + { + m = gfc_match (str); + if (m != MATCH_YES) + return m; + } + + m = (*subr) (); + + if (m != MATCH_YES) + { + gfc_current_locus = *old_locus; + reject_statement (); + } + + return m; +} + + +/* Figure out what the next statement is, (mostly) regardless of + proper ordering. The do...while(0) is there to prevent if/else + ambiguity. */ + +#define match(keyword, subr, st) \ + do { \ + if (match_word(keyword, subr, &old_locus) == MATCH_YES) \ + return st; \ + else \ + undo_new_statement (); \ + } while (0); + + +/* This is a specialist version of decode_statement that is used + for the specification statements in a function, whose + characteristics are deferred into the specification statements. + eg.: INTEGER (king = mykind) foo () + USE mymodule, ONLY mykind..... + The KIND parameter needs a return after USE or IMPORT, whereas + derived type declarations can occur anywhere, up the executable + block. ST_GET_FCN_CHARACTERISTICS is returned when we have run + out of the correct kind of specification statements. */ +static gfc_statement +decode_specification_statement (void) +{ + gfc_statement st; + locus old_locus; + char c; + + if (gfc_match_eos () == MATCH_YES) + return ST_NONE; + + old_locus = gfc_current_locus; + + match ("import", gfc_match_import, ST_IMPORT); + match ("use", gfc_match_use, ST_USE); + + if (gfc_current_block ()->ts.type != BT_DERIVED) + goto end_of_block; + + match (NULL, gfc_match_st_function, ST_STATEMENT_FUNCTION); + match (NULL, gfc_match_data_decl, ST_DATA_DECL); + match (NULL, gfc_match_enumerator_def, ST_ENUMERATOR); + + /* General statement matching: Instead of testing every possible + statement, we eliminate most possibilities by peeking at the + first character. */ + + c = gfc_peek_ascii_char (); + + switch (c) + { + case 'a': + match ("abstract% interface", gfc_match_abstract_interface, + ST_INTERFACE); + break; + + case 'b': + match (NULL, gfc_match_bind_c_stmt, ST_ATTR_DECL); + break; + + case 'c': + break; + + case 'd': + match ("data", gfc_match_data, ST_DATA); + match ("dimension", gfc_match_dimension, ST_ATTR_DECL); + break; + + case 'e': + match ("enum , bind ( c )", gfc_match_enum, ST_ENUM); + match ("entry% ", gfc_match_entry, ST_ENTRY); + match ("equivalence", gfc_match_equivalence, ST_EQUIVALENCE); + match ("external", gfc_match_external, ST_ATTR_DECL); + break; + + case 'f': + match ("format", gfc_match_format, ST_FORMAT); + break; + + case 'g': + break; + + case 'i': + match ("implicit", gfc_match_implicit, ST_IMPLICIT); + match ("implicit% none", gfc_match_implicit_none, ST_IMPLICIT_NONE); + match ("interface", gfc_match_interface, ST_INTERFACE); + match ("intent", gfc_match_intent, ST_ATTR_DECL); + match ("intrinsic", gfc_match_intrinsic, ST_ATTR_DECL); + break; + + case 'm': + break; + + case 'n': + match ("namelist", gfc_match_namelist, ST_NAMELIST); + break; + + case 'o': + match ("optional", gfc_match_optional, ST_ATTR_DECL); + break; + + case 'p': + match ("parameter", gfc_match_parameter, ST_PARAMETER); + match ("pointer", gfc_match_pointer, ST_ATTR_DECL); + if (gfc_match_private (&st) == MATCH_YES) + return st; + match ("procedure", gfc_match_procedure, ST_PROCEDURE); + if (gfc_match_public (&st) == MATCH_YES) + return st; + match ("protected", gfc_match_protected, ST_ATTR_DECL); + break; + + case 'r': + break; + + case 's': + match ("save", gfc_match_save, ST_ATTR_DECL); + break; + + case 't': + match ("target", gfc_match_target, ST_ATTR_DECL); + match ("type", gfc_match_derived_decl, ST_DERIVED_DECL); + break; + + case 'u': + break; + + case 'v': + match ("value", gfc_match_value, ST_ATTR_DECL); + match ("volatile", gfc_match_volatile, ST_ATTR_DECL); + break; + + case 'w': + break; + } + + /* This is not a specification statement. See if any of the matchers + has stored an error message of some sort. */ + +end_of_block: + gfc_clear_error (); + gfc_buffer_error (0); + gfc_current_locus = old_locus; + + return ST_GET_FCN_CHARACTERISTICS; +} + + +/* This is the primary 'decode_statement'. */ +static gfc_statement +decode_statement (void) +{ + gfc_statement st; + locus old_locus; + match m; + char c; + +#ifdef GFC_DEBUG + gfc_symbol_state (); +#endif + + gfc_clear_error (); /* Clear any pending errors. */ + gfc_clear_warning (); /* Clear any pending warnings. */ + + gfc_matching_function = false; + + if (gfc_match_eos () == MATCH_YES) + return ST_NONE; + + if (gfc_current_state () == COMP_FUNCTION + && gfc_current_block ()->result->ts.kind == -1) + return decode_specification_statement (); + + old_locus = gfc_current_locus; + + /* Try matching a data declaration or function declaration. The + input "REALFUNCTIONA(N)" can mean several things in different + contexts, so it (and its relatives) get special treatment. */ + + if (gfc_current_state () == COMP_NONE + || gfc_current_state () == COMP_INTERFACE + || gfc_current_state () == COMP_CONTAINS) + { + gfc_matching_function = true; + m = gfc_match_function_decl (); + if (m == MATCH_YES) + return ST_FUNCTION; + else if (m == MATCH_ERROR) + reject_statement (); + else + gfc_undo_symbols (); + gfc_current_locus = old_locus; + } + gfc_matching_function = false; + + + /* Match statements whose error messages are meant to be overwritten + by something better. */ + + match (NULL, gfc_match_assignment, ST_ASSIGNMENT); + match (NULL, gfc_match_pointer_assignment, ST_POINTER_ASSIGNMENT); + match (NULL, gfc_match_st_function, ST_STATEMENT_FUNCTION); + + match (NULL, gfc_match_data_decl, ST_DATA_DECL); + match (NULL, gfc_match_enumerator_def, ST_ENUMERATOR); + + /* Try to match a subroutine statement, which has the same optional + prefixes that functions can have. */ + + if (gfc_match_subroutine () == MATCH_YES) + return ST_SUBROUTINE; + gfc_undo_symbols (); + gfc_current_locus = old_locus; + + /* Check for the IF, DO, SELECT, WHERE and FORALL statements, which + might begin with a block label. The match functions for these + statements are unusual in that their keyword is not seen before + the matcher is called. */ + + if (gfc_match_if (&st) == MATCH_YES) + return st; + gfc_undo_symbols (); + gfc_current_locus = old_locus; + + if (gfc_match_where (&st) == MATCH_YES) + return st; + gfc_undo_symbols (); + gfc_current_locus = old_locus; + + if (gfc_match_forall (&st) == MATCH_YES) + return st; + gfc_undo_symbols (); + gfc_current_locus = old_locus; + + match (NULL, gfc_match_do, ST_DO); + match (NULL, gfc_match_select, ST_SELECT_CASE); + + /* General statement matching: Instead of testing every possible + statement, we eliminate most possibilities by peeking at the + first character. */ + + c = gfc_peek_ascii_char (); + + switch (c) + { + case 'a': + match ("abstract% interface", gfc_match_abstract_interface, + ST_INTERFACE); + match ("allocate", gfc_match_allocate, ST_ALLOCATE); + match ("allocatable", gfc_match_allocatable, ST_ATTR_DECL); + match ("assign", gfc_match_assign, ST_LABEL_ASSIGNMENT); + break; + + case 'b': + match ("backspace", gfc_match_backspace, ST_BACKSPACE); + match ("block data", gfc_match_block_data, ST_BLOCK_DATA); + match (NULL, gfc_match_bind_c_stmt, ST_ATTR_DECL); + break; + + case 'c': + match ("call", gfc_match_call, ST_CALL); + match ("close", gfc_match_close, ST_CLOSE); + match ("continue", gfc_match_continue, ST_CONTINUE); + match ("cycle", gfc_match_cycle, ST_CYCLE); + match ("case", gfc_match_case, ST_CASE); + match ("common", gfc_match_common, ST_COMMON); + match ("contains", gfc_match_eos, ST_CONTAINS); + break; + + case 'd': + match ("deallocate", gfc_match_deallocate, ST_DEALLOCATE); + match ("data", gfc_match_data, ST_DATA); + match ("dimension", gfc_match_dimension, ST_ATTR_DECL); + break; + + case 'e': + match ("end file", gfc_match_endfile, ST_END_FILE); + match ("exit", gfc_match_exit, ST_EXIT); + match ("else", gfc_match_else, ST_ELSE); + match ("else where", gfc_match_elsewhere, ST_ELSEWHERE); + match ("else if", gfc_match_elseif, ST_ELSEIF); + match ("enum , bind ( c )", gfc_match_enum, ST_ENUM); + + if (gfc_match_end (&st) == MATCH_YES) + return st; + + match ("entry% ", gfc_match_entry, ST_ENTRY); + match ("equivalence", gfc_match_equivalence, ST_EQUIVALENCE); + match ("external", gfc_match_external, ST_ATTR_DECL); + break; + + case 'f': + match ("final", gfc_match_final_decl, ST_FINAL); + match ("flush", gfc_match_flush, ST_FLUSH); + match ("format", gfc_match_format, ST_FORMAT); + break; + + case 'g': + match ("generic", gfc_match_generic, ST_GENERIC); + match ("go to", gfc_match_goto, ST_GOTO); + break; + + case 'i': + match ("inquire", gfc_match_inquire, ST_INQUIRE); + match ("implicit", gfc_match_implicit, ST_IMPLICIT); + match ("implicit% none", gfc_match_implicit_none, ST_IMPLICIT_NONE); + match ("import", gfc_match_import, ST_IMPORT); + match ("interface", gfc_match_interface, ST_INTERFACE); + match ("intent", gfc_match_intent, ST_ATTR_DECL); + match ("intrinsic", gfc_match_intrinsic, ST_ATTR_DECL); + break; + + case 'm': + match ("module% procedure% ", gfc_match_modproc, ST_MODULE_PROC); + match ("module", gfc_match_module, ST_MODULE); + break; + + case 'n': + match ("nullify", gfc_match_nullify, ST_NULLIFY); + match ("namelist", gfc_match_namelist, ST_NAMELIST); + break; + + case 'o': + match ("open", gfc_match_open, ST_OPEN); + match ("optional", gfc_match_optional, ST_ATTR_DECL); + break; + + case 'p': + match ("print", gfc_match_print, ST_WRITE); + match ("parameter", gfc_match_parameter, ST_PARAMETER); + match ("pause", gfc_match_pause, ST_PAUSE); + match ("pointer", gfc_match_pointer, ST_ATTR_DECL); + if (gfc_match_private (&st) == MATCH_YES) + return st; + match ("procedure", gfc_match_procedure, ST_PROCEDURE); + match ("program", gfc_match_program, ST_PROGRAM); + if (gfc_match_public (&st) == MATCH_YES) + return st; + match ("protected", gfc_match_protected, ST_ATTR_DECL); + break; + + case 'r': + match ("read", gfc_match_read, ST_READ); + match ("return", gfc_match_return, ST_RETURN); + match ("rewind", gfc_match_rewind, ST_REWIND); + break; + + case 's': + match ("sequence", gfc_match_eos, ST_SEQUENCE); + match ("stop", gfc_match_stop, ST_STOP); + match ("save", gfc_match_save, ST_ATTR_DECL); + break; + + case 't': + match ("target", gfc_match_target, ST_ATTR_DECL); + match ("type", gfc_match_derived_decl, ST_DERIVED_DECL); + break; + + case 'u': + match ("use", gfc_match_use, ST_USE); + break; + + case 'v': + match ("value", gfc_match_value, ST_ATTR_DECL); + match ("volatile", gfc_match_volatile, ST_ATTR_DECL); + break; + + case 'w': + match ("wait", gfc_match_wait, ST_WAIT); + match ("write", gfc_match_write, ST_WRITE); + break; + } + + /* All else has failed, so give up. See if any of the matchers has + stored an error message of some sort. */ + + if (gfc_error_check () == 0) + gfc_error_now ("Unclassifiable statement at %C"); + + reject_statement (); + + gfc_error_recovery (); + + return ST_NONE; +} + +static gfc_statement +decode_omp_directive (void) +{ + locus old_locus; + char c; + +#ifdef GFC_DEBUG + gfc_symbol_state (); +#endif + + gfc_clear_error (); /* Clear any pending errors. */ + gfc_clear_warning (); /* Clear any pending warnings. */ + + if (gfc_pure (NULL)) + { + gfc_error_now ("OpenMP directives at %C may not appear in PURE " + "or ELEMENTAL procedures"); + gfc_error_recovery (); + return ST_NONE; + } + + old_locus = gfc_current_locus; + + /* General OpenMP directive matching: Instead of testing every possible + statement, we eliminate most possibilities by peeking at the + first character. */ + + c = gfc_peek_ascii_char (); + + switch (c) + { + case 'a': + match ("atomic", gfc_match_omp_atomic, ST_OMP_ATOMIC); + break; + case 'b': + match ("barrier", gfc_match_omp_barrier, ST_OMP_BARRIER); + break; + case 'c': + match ("critical", gfc_match_omp_critical, ST_OMP_CRITICAL); + break; + case 'd': + match ("do", gfc_match_omp_do, ST_OMP_DO); + break; + case 'e': + match ("end critical", gfc_match_omp_critical, ST_OMP_END_CRITICAL); + match ("end do", gfc_match_omp_end_nowait, ST_OMP_END_DO); + match ("end master", gfc_match_omp_eos, ST_OMP_END_MASTER); + match ("end ordered", gfc_match_omp_eos, ST_OMP_END_ORDERED); + match ("end parallel do", gfc_match_omp_eos, ST_OMP_END_PARALLEL_DO); + match ("end parallel sections", gfc_match_omp_eos, + ST_OMP_END_PARALLEL_SECTIONS); + match ("end parallel workshare", gfc_match_omp_eos, + ST_OMP_END_PARALLEL_WORKSHARE); + match ("end parallel", gfc_match_omp_eos, ST_OMP_END_PARALLEL); + match ("end sections", gfc_match_omp_end_nowait, ST_OMP_END_SECTIONS); + match ("end single", gfc_match_omp_end_single, ST_OMP_END_SINGLE); + match ("end task", gfc_match_omp_eos, ST_OMP_END_TASK); + match ("end workshare", gfc_match_omp_end_nowait, + ST_OMP_END_WORKSHARE); + break; + case 'f': + match ("flush", gfc_match_omp_flush, ST_OMP_FLUSH); + break; + case 'm': + match ("master", gfc_match_omp_master, ST_OMP_MASTER); + break; + case 'o': + match ("ordered", gfc_match_omp_ordered, ST_OMP_ORDERED); + break; + case 'p': + match ("parallel do", gfc_match_omp_parallel_do, ST_OMP_PARALLEL_DO); + match ("parallel sections", gfc_match_omp_parallel_sections, + ST_OMP_PARALLEL_SECTIONS); + match ("parallel workshare", gfc_match_omp_parallel_workshare, + ST_OMP_PARALLEL_WORKSHARE); + match ("parallel", gfc_match_omp_parallel, ST_OMP_PARALLEL); + break; + case 's': + match ("sections", gfc_match_omp_sections, ST_OMP_SECTIONS); + match ("section", gfc_match_omp_eos, ST_OMP_SECTION); + match ("single", gfc_match_omp_single, ST_OMP_SINGLE); + break; + case 't': + match ("task", gfc_match_omp_task, ST_OMP_TASK); + match ("taskwait", gfc_match_omp_taskwait, ST_OMP_TASKWAIT); + match ("threadprivate", gfc_match_omp_threadprivate, + ST_OMP_THREADPRIVATE); + case 'w': + match ("workshare", gfc_match_omp_workshare, ST_OMP_WORKSHARE); + break; + } + + /* All else has failed, so give up. See if any of the matchers has + stored an error message of some sort. */ + + if (gfc_error_check () == 0) + gfc_error_now ("Unclassifiable OpenMP directive at %C"); + + reject_statement (); + + gfc_error_recovery (); + + return ST_NONE; +} + +#undef match + + +/* Get the next statement in free form source. */ + +static gfc_statement +next_free (void) +{ + match m; + int i, cnt, at_bol; + char c; + + at_bol = gfc_at_bol (); + gfc_gobble_whitespace (); + + c = gfc_peek_ascii_char (); + + if (ISDIGIT (c)) + { + char d; + + /* Found a statement label? */ + m = gfc_match_st_label (&gfc_statement_label); + + d = gfc_peek_ascii_char (); + if (m != MATCH_YES || !gfc_is_whitespace (d)) + { + gfc_match_small_literal_int (&i, &cnt); + + if (cnt > 5) + gfc_error_now ("Too many digits in statement label at %C"); + + if (i == 0) + gfc_error_now ("Zero is not a valid statement label at %C"); + + do + c = gfc_next_ascii_char (); + while (ISDIGIT(c)); + + if (!gfc_is_whitespace (c)) + gfc_error_now ("Non-numeric character in statement label at %C"); + + return ST_NONE; + } + else + { + label_locus = gfc_current_locus; + + gfc_gobble_whitespace (); + + if (at_bol && gfc_peek_ascii_char () == ';') + { + gfc_error_now ("Semicolon at %C needs to be preceded by " + "statement"); + gfc_next_ascii_char (); /* Eat up the semicolon. */ + return ST_NONE; + } + + if (gfc_match_eos () == MATCH_YES) + { + gfc_warning_now ("Ignoring statement label in empty statement " + "at %C"); + gfc_free_st_label (gfc_statement_label); + gfc_statement_label = NULL; + return ST_NONE; + } + } + } + else if (c == '!') + { + /* Comments have already been skipped by the time we get here, + except for OpenMP directives. */ + if (gfc_option.flag_openmp) + { + int i; + + c = gfc_next_ascii_char (); + for (i = 0; i < 5; i++, c = gfc_next_ascii_char ()) + gcc_assert (c == "!$omp"[i]); + + gcc_assert (c == ' ' || c == '\t'); + gfc_gobble_whitespace (); + return decode_omp_directive (); + } + } + + if (at_bol && c == ';') + { + gfc_error_now ("Semicolon at %C needs to be preceded by statement"); + gfc_next_ascii_char (); /* Eat up the semicolon. */ + return ST_NONE; + } + + return decode_statement (); +} + + +/* Get the next statement in fixed-form source. */ + +static gfc_statement +next_fixed (void) +{ + int label, digit_flag, i; + locus loc; + gfc_char_t c; + + if (!gfc_at_bol ()) + return decode_statement (); + + /* Skip past the current label field, parsing a statement label if + one is there. This is a weird number parser, since the number is + contained within five columns and can have any kind of embedded + spaces. We also check for characters that make the rest of the + line a comment. */ + + label = 0; + digit_flag = 0; + + for (i = 0; i < 5; i++) + { + c = gfc_next_char_literal (0); + + switch (c) + { + case ' ': + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + label = label * 10 + ((unsigned char) c - '0'); + label_locus = gfc_current_locus; + digit_flag = 1; + break; + + /* Comments have already been skipped by the time we get + here, except for OpenMP directives. */ + case '*': + if (gfc_option.flag_openmp) + { + for (i = 0; i < 5; i++, c = gfc_next_char_literal (0)) + gcc_assert ((char) gfc_wide_tolower (c) == "*$omp"[i]); + + if (c != ' ' && c != '0') + { + gfc_buffer_error (0); + gfc_error ("Bad continuation line at %C"); + return ST_NONE; + } + + return decode_omp_directive (); + } + /* FALLTHROUGH */ + + /* Comments have already been skipped by the time we get + here so don't bother checking for them. */ + + default: + gfc_buffer_error (0); + gfc_error ("Non-numeric character in statement label at %C"); + return ST_NONE; + } + } + + if (digit_flag) + { + if (label == 0) + gfc_warning_now ("Zero is not a valid statement label at %C"); + else + { + /* We've found a valid statement label. */ + gfc_statement_label = gfc_get_st_label (label); + } + } + + /* Since this line starts a statement, it cannot be a continuation + of a previous statement. If we see something here besides a + space or zero, it must be a bad continuation line. */ + + c = gfc_next_char_literal (0); + if (c == '\n') + goto blank_line; + + if (c != ' ' && c != '0') + { + gfc_buffer_error (0); + gfc_error ("Bad continuation line at %C"); + return ST_NONE; + } + + /* Now that we've taken care of the statement label columns, we have + to make sure that the first nonblank character is not a '!'. If + it is, the rest of the line is a comment. */ + + do + { + loc = gfc_current_locus; + c = gfc_next_char_literal (0); + } + while (gfc_is_whitespace (c)); + + if (c == '!') + goto blank_line; + gfc_current_locus = loc; + + if (c == ';') + { + gfc_error_now ("Semicolon at %C needs to be preceded by statement"); + return ST_NONE; + } + + if (gfc_match_eos () == MATCH_YES) + goto blank_line; + + /* At this point, we've got a nonblank statement to parse. */ + return decode_statement (); + +blank_line: + if (digit_flag) + gfc_warning ("Ignoring statement label in empty statement at %C"); + gfc_advance_line (); + return ST_NONE; +} + + +/* Return the next non-ST_NONE statement to the caller. We also worry + about including files and the ends of include files at this stage. */ + +static gfc_statement +next_statement (void) +{ + gfc_statement st; + locus old_locus; + gfc_new_block = NULL; + + gfc_current_ns->old_cl_list = gfc_current_ns->cl_list; + for (;;) + { + gfc_statement_label = NULL; + gfc_buffer_error (1); + + if (gfc_at_eol ()) + { + if ((gfc_option.warn_line_truncation || gfc_current_form == FORM_FREE) + && gfc_current_locus.lb + && gfc_current_locus.lb->truncated) + gfc_warning_now ("Line truncated at %C"); + + gfc_advance_line (); + } + + gfc_skip_comments (); + + if (gfc_at_end ()) + { + st = ST_NONE; + break; + } + + if (gfc_define_undef_line ()) + continue; + + old_locus = gfc_current_locus; + + st = (gfc_current_form == FORM_FIXED) ? next_fixed () : next_free (); + + if (st != ST_NONE) + break; + } + + gfc_buffer_error (0); + + if (st == ST_GET_FCN_CHARACTERISTICS && gfc_statement_label != NULL) + { + gfc_free_st_label (gfc_statement_label); + gfc_statement_label = NULL; + gfc_current_locus = old_locus; + } + + if (st != ST_NONE) + check_statement_label (st); + + return st; +} + + +/****************************** Parser ***********************************/ + +/* The parser subroutines are of type 'try' that fail if the file ends + unexpectedly. */ + +/* Macros that expand to case-labels for various classes of + statements. Start with executable statements that directly do + things. */ + +#define case_executable case ST_ALLOCATE: case ST_BACKSPACE: case ST_CALL: \ + case ST_CLOSE: case ST_CONTINUE: case ST_DEALLOCATE: case ST_END_FILE: \ + case ST_GOTO: case ST_INQUIRE: case ST_NULLIFY: case ST_OPEN: \ + case ST_READ: case ST_RETURN: case ST_REWIND: case ST_SIMPLE_IF: \ + case ST_PAUSE: case ST_STOP: case ST_WAIT: case ST_WRITE: \ + case ST_POINTER_ASSIGNMENT: case ST_EXIT: case ST_CYCLE: \ + case ST_ASSIGNMENT: case ST_ARITHMETIC_IF: case ST_WHERE: case ST_FORALL: \ + case ST_LABEL_ASSIGNMENT: case ST_FLUSH: case ST_OMP_FLUSH: \ + case ST_OMP_BARRIER: case ST_OMP_TASKWAIT + +/* Statements that mark other executable statements. */ + +#define case_exec_markers case ST_DO: case ST_FORALL_BLOCK: case ST_IF_BLOCK: \ + case ST_WHERE_BLOCK: case ST_SELECT_CASE: case ST_OMP_PARALLEL: \ + case ST_OMP_PARALLEL_SECTIONS: case ST_OMP_SECTIONS: case ST_OMP_ORDERED: \ + case ST_OMP_CRITICAL: case ST_OMP_MASTER: case ST_OMP_SINGLE: \ + case ST_OMP_DO: case ST_OMP_PARALLEL_DO: case ST_OMP_ATOMIC: \ + case ST_OMP_WORKSHARE: case ST_OMP_PARALLEL_WORKSHARE: \ + case ST_OMP_TASK + +/* Declaration statements */ + +#define case_decl case ST_ATTR_DECL: case ST_COMMON: case ST_DATA_DECL: \ + case ST_EQUIVALENCE: case ST_NAMELIST: case ST_STATEMENT_FUNCTION: \ + case ST_TYPE: case ST_INTERFACE: case ST_OMP_THREADPRIVATE: \ + case ST_PROCEDURE + +/* Block end statements. Errors associated with interchanging these + are detected in gfc_match_end(). */ + +#define case_end case ST_END_BLOCK_DATA: case ST_END_FUNCTION: \ + case ST_END_PROGRAM: case ST_END_SUBROUTINE + + +/* Push a new state onto the stack. */ + +static void +push_state (gfc_state_data *p, gfc_compile_state new_state, gfc_symbol *sym) +{ + p->state = new_state; + p->previous = gfc_state_stack; + p->sym = sym; + p->head = p->tail = NULL; + p->do_variable = NULL; + gfc_state_stack = p; +} + + +/* Pop the current state. */ +static void +pop_state (void) +{ + gfc_state_stack = gfc_state_stack->previous; +} + + +/* Try to find the given state in the state stack. */ + +gfc_try +gfc_find_state (gfc_compile_state state) +{ + gfc_state_data *p; + + for (p = gfc_state_stack; p; p = p->previous) + if (p->state == state) + break; + + return (p == NULL) ? FAILURE : SUCCESS; +} + + +/* Starts a new level in the statement list. */ + +static gfc_code * +new_level (gfc_code *q) +{ + gfc_code *p; + + p = q->block = gfc_get_code (); + + gfc_state_stack->head = gfc_state_stack->tail = p; + + return p; +} + + +/* Add the current new_st code structure and adds it to the current + program unit. As a side-effect, it zeroes the new_st. */ + +static gfc_code * +add_statement (void) +{ + gfc_code *p; + + p = gfc_get_code (); + *p = new_st; + + p->loc = gfc_current_locus; + + if (gfc_state_stack->head == NULL) + gfc_state_stack->head = p; + else + gfc_state_stack->tail->next = p; + + while (p->next != NULL) + p = p->next; + + gfc_state_stack->tail = p; + + gfc_clear_new_st (); + + return p; +} + + +/* Frees everything associated with the current statement. */ + +static void +undo_new_statement (void) +{ + gfc_free_statements (new_st.block); + gfc_free_statements (new_st.next); + gfc_free_statement (&new_st); + gfc_clear_new_st (); +} + + +/* If the current statement has a statement label, make sure that it + is allowed to, or should have one. */ + +static void +check_statement_label (gfc_statement st) +{ + gfc_sl_type type; + + if (gfc_statement_label == NULL) + { + if (st == ST_FORMAT) + gfc_error ("FORMAT statement at %L does not have a statement label", + &new_st.loc); + return; + } + + switch (st) + { + case ST_END_PROGRAM: + case ST_END_FUNCTION: + case ST_END_SUBROUTINE: + case ST_ENDDO: + case ST_ENDIF: + case ST_END_SELECT: + case_executable: + case_exec_markers: + type = ST_LABEL_TARGET; + break; + + case ST_FORMAT: + type = ST_LABEL_FORMAT; + break; + + /* Statement labels are not restricted from appearing on a + particular line. However, there are plenty of situations + where the resulting label can't be referenced. */ + + default: + type = ST_LABEL_BAD_TARGET; + break; + } + + gfc_define_st_label (gfc_statement_label, type, &label_locus); + + new_st.here = gfc_statement_label; +} + + +/* Figures out what the enclosing program unit is. This will be a + function, subroutine, program, block data or module. */ + +gfc_state_data * +gfc_enclosing_unit (gfc_compile_state * result) +{ + gfc_state_data *p; + + for (p = gfc_state_stack; p; p = p->previous) + if (p->state == COMP_FUNCTION || p->state == COMP_SUBROUTINE + || p->state == COMP_MODULE || p->state == COMP_BLOCK_DATA + || p->state == COMP_PROGRAM) + { + + if (result != NULL) + *result = p->state; + return p; + } + + if (result != NULL) + *result = COMP_PROGRAM; + return NULL; +} + + +/* Translate a statement enum to a string. */ + +const char * +gfc_ascii_statement (gfc_statement st) +{ + const char *p; + + switch (st) + { + case ST_ARITHMETIC_IF: + p = _("arithmetic IF"); + break; + case ST_ALLOCATE: + p = "ALLOCATE"; + break; + case ST_ATTR_DECL: + p = _("attribute declaration"); + break; + case ST_BACKSPACE: + p = "BACKSPACE"; + break; + case ST_BLOCK_DATA: + p = "BLOCK DATA"; + break; + case ST_CALL: + p = "CALL"; + break; + case ST_CASE: + p = "CASE"; + break; + case ST_CLOSE: + p = "CLOSE"; + break; + case ST_COMMON: + p = "COMMON"; + break; + case ST_CONTINUE: + p = "CONTINUE"; + break; + case ST_CONTAINS: + p = "CONTAINS"; + break; + case ST_CYCLE: + p = "CYCLE"; + break; + case ST_DATA_DECL: + p = _("data declaration"); + break; + case ST_DATA: + p = "DATA"; + break; + case ST_DEALLOCATE: + p = "DEALLOCATE"; + break; + case ST_DERIVED_DECL: + p = _("derived type declaration"); + break; + case ST_DO: + p = "DO"; + break; + case ST_ELSE: + p = "ELSE"; + break; + case ST_ELSEIF: + p = "ELSE IF"; + break; + case ST_ELSEWHERE: + p = "ELSEWHERE"; + break; + case ST_END_BLOCK_DATA: + p = "END BLOCK DATA"; + break; + case ST_ENDDO: + p = "END DO"; + break; + case ST_END_FILE: + p = "END FILE"; + break; + case ST_END_FORALL: + p = "END FORALL"; + break; + case ST_END_FUNCTION: + p = "END FUNCTION"; + break; + case ST_ENDIF: + p = "END IF"; + break; + case ST_END_INTERFACE: + p = "END INTERFACE"; + break; + case ST_END_MODULE: + p = "END MODULE"; + break; + case ST_END_PROGRAM: + p = "END PROGRAM"; + break; + case ST_END_SELECT: + p = "END SELECT"; + break; + case ST_END_SUBROUTINE: + p = "END SUBROUTINE"; + break; + case ST_END_WHERE: + p = "END WHERE"; + break; + case ST_END_TYPE: + p = "END TYPE"; + break; + case ST_ENTRY: + p = "ENTRY"; + break; + case ST_EQUIVALENCE: + p = "EQUIVALENCE"; + break; + case ST_EXIT: + p = "EXIT"; + break; + case ST_FLUSH: + p = "FLUSH"; + break; + case ST_FORALL_BLOCK: /* Fall through */ + case ST_FORALL: + p = "FORALL"; + break; + case ST_FORMAT: + p = "FORMAT"; + break; + case ST_FUNCTION: + p = "FUNCTION"; + break; + case ST_GENERIC: + p = "GENERIC"; + break; + case ST_GOTO: + p = "GOTO"; + break; + case ST_IF_BLOCK: + p = _("block IF"); + break; + case ST_IMPLICIT: + p = "IMPLICIT"; + break; + case ST_IMPLICIT_NONE: + p = "IMPLICIT NONE"; + break; + case ST_IMPLIED_ENDDO: + p = _("implied END DO"); + break; + case ST_IMPORT: + p = "IMPORT"; + break; + case ST_INQUIRE: + p = "INQUIRE"; + break; + case ST_INTERFACE: + p = "INTERFACE"; + break; + case ST_PARAMETER: + p = "PARAMETER"; + break; + case ST_PRIVATE: + p = "PRIVATE"; + break; + case ST_PUBLIC: + p = "PUBLIC"; + break; + case ST_MODULE: + p = "MODULE"; + break; + case ST_PAUSE: + p = "PAUSE"; + break; + case ST_MODULE_PROC: + p = "MODULE PROCEDURE"; + break; + case ST_NAMELIST: + p = "NAMELIST"; + break; + case ST_NULLIFY: + p = "NULLIFY"; + break; + case ST_OPEN: + p = "OPEN"; + break; + case ST_PROGRAM: + p = "PROGRAM"; + break; + case ST_PROCEDURE: + p = "PROCEDURE"; + break; + case ST_READ: + p = "READ"; + break; + case ST_RETURN: + p = "RETURN"; + break; + case ST_REWIND: + p = "REWIND"; + break; + case ST_STOP: + p = "STOP"; + break; + case ST_SUBROUTINE: + p = "SUBROUTINE"; + break; + case ST_TYPE: + p = "TYPE"; + break; + case ST_USE: + p = "USE"; + break; + case ST_WHERE_BLOCK: /* Fall through */ + case ST_WHERE: + p = "WHERE"; + break; + case ST_WAIT: + p = "WAIT"; + break; + case ST_WRITE: + p = "WRITE"; + break; + case ST_ASSIGNMENT: + p = _("assignment"); + break; + case ST_POINTER_ASSIGNMENT: + p = _("pointer assignment"); + break; + case ST_SELECT_CASE: + p = "SELECT CASE"; + break; + case ST_SEQUENCE: + p = "SEQUENCE"; + break; + case ST_SIMPLE_IF: + p = _("simple IF"); + break; + case ST_STATEMENT_FUNCTION: + p = "STATEMENT FUNCTION"; + break; + case ST_LABEL_ASSIGNMENT: + p = "LABEL ASSIGNMENT"; + break; + case ST_ENUM: + p = "ENUM DEFINITION"; + break; + case ST_ENUMERATOR: + p = "ENUMERATOR DEFINITION"; + break; + case ST_END_ENUM: + p = "END ENUM"; + break; + case ST_OMP_ATOMIC: + p = "!$OMP ATOMIC"; + break; + case ST_OMP_BARRIER: + p = "!$OMP BARRIER"; + break; + case ST_OMP_CRITICAL: + p = "!$OMP CRITICAL"; + break; + case ST_OMP_DO: + p = "!$OMP DO"; + break; + case ST_OMP_END_CRITICAL: + p = "!$OMP END CRITICAL"; + break; + case ST_OMP_END_DO: + p = "!$OMP END DO"; + break; + case ST_OMP_END_MASTER: + p = "!$OMP END MASTER"; + break; + case ST_OMP_END_ORDERED: + p = "!$OMP END ORDERED"; + break; + case ST_OMP_END_PARALLEL: + p = "!$OMP END PARALLEL"; + break; + case ST_OMP_END_PARALLEL_DO: + p = "!$OMP END PARALLEL DO"; + break; + case ST_OMP_END_PARALLEL_SECTIONS: + p = "!$OMP END PARALLEL SECTIONS"; + break; + case ST_OMP_END_PARALLEL_WORKSHARE: + p = "!$OMP END PARALLEL WORKSHARE"; + break; + case ST_OMP_END_SECTIONS: + p = "!$OMP END SECTIONS"; + break; + case ST_OMP_END_SINGLE: + p = "!$OMP END SINGLE"; + break; + case ST_OMP_END_TASK: + p = "!$OMP END TASK"; + break; + case ST_OMP_END_WORKSHARE: + p = "!$OMP END WORKSHARE"; + break; + case ST_OMP_FLUSH: + p = "!$OMP FLUSH"; + break; + case ST_OMP_MASTER: + p = "!$OMP MASTER"; + break; + case ST_OMP_ORDERED: + p = "!$OMP ORDERED"; + break; + case ST_OMP_PARALLEL: + p = "!$OMP PARALLEL"; + break; + case ST_OMP_PARALLEL_DO: + p = "!$OMP PARALLEL DO"; + break; + case ST_OMP_PARALLEL_SECTIONS: + p = "!$OMP PARALLEL SECTIONS"; + break; + case ST_OMP_PARALLEL_WORKSHARE: + p = "!$OMP PARALLEL WORKSHARE"; + break; + case ST_OMP_SECTIONS: + p = "!$OMP SECTIONS"; + break; + case ST_OMP_SECTION: + p = "!$OMP SECTION"; + break; + case ST_OMP_SINGLE: + p = "!$OMP SINGLE"; + break; + case ST_OMP_TASK: + p = "!$OMP TASK"; + break; + case ST_OMP_TASKWAIT: + p = "!$OMP TASKWAIT"; + break; + case ST_OMP_THREADPRIVATE: + p = "!$OMP THREADPRIVATE"; + break; + case ST_OMP_WORKSHARE: + p = "!$OMP WORKSHARE"; + break; + default: + gfc_internal_error ("gfc_ascii_statement(): Bad statement code"); + } + + return p; +} + + +/* Create a symbol for the main program and assign it to ns->proc_name. */ + +static void +main_program_symbol (gfc_namespace *ns, const char *name) +{ + gfc_symbol *main_program; + symbol_attribute attr; + + gfc_get_symbol (name, ns, &main_program); + gfc_clear_attr (&attr); + attr.flavor = FL_PROGRAM; + attr.proc = PROC_UNKNOWN; + attr.subroutine = 1; + attr.access = ACCESS_PUBLIC; + attr.is_main_program = 1; + main_program->attr = attr; + main_program->declared_at = gfc_current_locus; + ns->proc_name = main_program; + gfc_commit_symbols (); +} + + +/* Do whatever is necessary to accept the last statement. */ + +static void +accept_statement (gfc_statement st) +{ + switch (st) + { + case ST_USE: + gfc_use_module (); + break; + + case ST_IMPLICIT_NONE: + gfc_set_implicit_none (); + break; + + case ST_IMPLICIT: + break; + + case ST_FUNCTION: + case ST_SUBROUTINE: + case ST_MODULE: + gfc_current_ns->proc_name = gfc_new_block; + break; + + /* If the statement is the end of a block, lay down a special code + that allows a branch to the end of the block from within the + construct. */ + + case ST_ENDIF: + case ST_END_SELECT: + if (gfc_statement_label != NULL) + { + new_st.op = EXEC_NOP; + add_statement (); + } + + break; + + /* The end-of-program unit statements do not get the special + marker and require a statement of some sort if they are a + branch target. */ + + case ST_END_PROGRAM: + case ST_END_FUNCTION: + case ST_END_SUBROUTINE: + if (gfc_statement_label != NULL) + { + new_st.op = EXEC_RETURN; + add_statement (); + } + + break; + + case ST_ENTRY: + case_executable: + case_exec_markers: + add_statement (); + break; + + default: + break; + } + + gfc_commit_symbols (); + gfc_warning_check (); + gfc_clear_new_st (); +} + + +/* Undo anything tentative that has been built for the current + statement. */ + +static void +reject_statement (void) +{ + /* Revert to the previous charlen chain. */ + gfc_free_charlen (gfc_current_ns->cl_list, gfc_current_ns->old_cl_list); + gfc_current_ns->cl_list = gfc_current_ns->old_cl_list; + + gfc_new_block = NULL; + gfc_undo_symbols (); + gfc_clear_warning (); + undo_new_statement (); +} + + +/* Generic complaint about an out of order statement. We also do + whatever is necessary to clean up. */ + +static void +unexpected_statement (gfc_statement st) +{ + gfc_error ("Unexpected %s statement at %C", gfc_ascii_statement (st)); + + reject_statement (); +} + + +/* Given the next statement seen by the matcher, make sure that it is + in proper order with the last. This subroutine is initialized by + calling it with an argument of ST_NONE. If there is a problem, we + issue an error and return FAILURE. Otherwise we return SUCCESS. + + Individual parsers need to verify that the statements seen are + valid before calling here, i.e., ENTRY statements are not allowed in + INTERFACE blocks. The following diagram is taken from the standard: + + +---------------------------------------+ + | program subroutine function module | + +---------------------------------------+ + | use | + +---------------------------------------+ + | import | + +---------------------------------------+ + | | implicit none | + | +-----------+------------------+ + | | parameter | implicit | + | +-----------+------------------+ + | format | | derived type | + | entry | parameter | interface | + | | data | specification | + | | | statement func | + | +-----------+------------------+ + | | data | executable | + +--------+-----------+------------------+ + | contains | + +---------------------------------------+ + | internal module/subprogram | + +---------------------------------------+ + | end | + +---------------------------------------+ + +*/ + +typedef struct +{ + enum + { ORDER_START, ORDER_USE, ORDER_IMPORT, ORDER_IMPLICIT_NONE, + ORDER_IMPLICIT, ORDER_SPEC, ORDER_EXEC + } + state; + gfc_statement last_statement; + locus where; +} +st_state; + +static gfc_try +verify_st_order (st_state *p, gfc_statement st, bool silent) +{ + + switch (st) + { + case ST_NONE: + p->state = ORDER_START; + break; + + case ST_USE: + if (p->state > ORDER_USE) + goto order; + p->state = ORDER_USE; + break; + + case ST_IMPORT: + if (p->state > ORDER_IMPORT) + goto order; + p->state = ORDER_IMPORT; + break; + + case ST_IMPLICIT_NONE: + if (p->state > ORDER_IMPLICIT_NONE) + goto order; + + /* The '>' sign cannot be a '>=', because a FORMAT or ENTRY + statement disqualifies a USE but not an IMPLICIT NONE. + Duplicate IMPLICIT NONEs are caught when the implicit types + are set. */ + + p->state = ORDER_IMPLICIT_NONE; + break; + + case ST_IMPLICIT: + if (p->state > ORDER_IMPLICIT) + goto order; + p->state = ORDER_IMPLICIT; + break; + + case ST_FORMAT: + case ST_ENTRY: + if (p->state < ORDER_IMPLICIT_NONE) + p->state = ORDER_IMPLICIT_NONE; + break; + + case ST_PARAMETER: + if (p->state >= ORDER_EXEC) + goto order; + if (p->state < ORDER_IMPLICIT) + p->state = ORDER_IMPLICIT; + break; + + case ST_DATA: + if (p->state < ORDER_SPEC) + p->state = ORDER_SPEC; + break; + + case ST_PUBLIC: + case ST_PRIVATE: + case ST_DERIVED_DECL: + case_decl: + if (p->state >= ORDER_EXEC) + goto order; + if (p->state < ORDER_SPEC) + p->state = ORDER_SPEC; + break; + + case_executable: + case_exec_markers: + if (p->state < ORDER_EXEC) + p->state = ORDER_EXEC; + break; + + default: + gfc_internal_error ("Unexpected %s statement in verify_st_order() at %C", + gfc_ascii_statement (st)); + } + + /* All is well, record the statement in case we need it next time. */ + p->where = gfc_current_locus; + p->last_statement = st; + return SUCCESS; + +order: + if (!silent) + gfc_error ("%s statement at %C cannot follow %s statement at %L", + gfc_ascii_statement (st), + gfc_ascii_statement (p->last_statement), &p->where); + + return FAILURE; +} + + +/* Handle an unexpected end of file. This is a show-stopper... */ + +static void unexpected_eof (void) ATTRIBUTE_NORETURN; + +static void +unexpected_eof (void) +{ + gfc_state_data *p; + + gfc_error ("Unexpected end of file in '%s'", gfc_source_file); + + /* Memory cleanup. Move to "second to last". */ + for (p = gfc_state_stack; p && p->previous && p->previous->previous; + p = p->previous); + + gfc_current_ns->code = (p && p->previous) ? p->head : NULL; + gfc_done_2 (); + + longjmp (eof_buf, 1); +} + + +/* Parse the CONTAINS section of a derived type definition. */ + +gfc_access gfc_typebound_default_access; + +static bool +parse_derived_contains (void) +{ + gfc_state_data s; + bool seen_private = false; + bool seen_comps = false; + bool error_flag = false; + bool to_finish; + + gcc_assert (gfc_current_state () == COMP_DERIVED); + gcc_assert (gfc_current_block ()); + + /* Derived-types with SEQUENCE and/or BIND(C) must not have a CONTAINS + section. */ + if (gfc_current_block ()->attr.sequence) + gfc_error ("Derived-type '%s' with SEQUENCE must not have a CONTAINS" + " section at %C", gfc_current_block ()->name); + if (gfc_current_block ()->attr.is_bind_c) + gfc_error ("Derived-type '%s' with BIND(C) must not have a CONTAINS" + " section at %C", gfc_current_block ()->name); + + accept_statement (ST_CONTAINS); + push_state (&s, COMP_DERIVED_CONTAINS, NULL); + + gfc_typebound_default_access = ACCESS_PUBLIC; + + to_finish = false; + while (!to_finish) + { + gfc_statement st; + st = next_statement (); + switch (st) + { + case ST_NONE: + unexpected_eof (); + break; + + case ST_DATA_DECL: + gfc_error ("Components in TYPE at %C must precede CONTAINS"); + error_flag = true; + break; + + case ST_PROCEDURE: + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Type-bound" + " procedure at %C") == FAILURE) + error_flag = true; + + accept_statement (ST_PROCEDURE); + seen_comps = true; + break; + + case ST_GENERIC: + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: GENERIC binding" + " at %C") == FAILURE) + error_flag = true; + + accept_statement (ST_GENERIC); + seen_comps = true; + break; + + case ST_FINAL: + if (gfc_notify_std (GFC_STD_F2003, + "Fortran 2003: FINAL procedure declaration" + " at %C") == FAILURE) + error_flag = true; + + accept_statement (ST_FINAL); + seen_comps = true; + break; + + case ST_END_TYPE: + to_finish = true; + + if (!seen_comps + && (gfc_notify_std (GFC_STD_F2008, "Fortran 2008: Derived type " + "definition at %C with empty CONTAINS " + "section") == FAILURE)) + error_flag = true; + + /* ST_END_TYPE is accepted by parse_derived after return. */ + break; + + case ST_PRIVATE: + if (gfc_find_state (COMP_MODULE) == FAILURE) + { + gfc_error ("PRIVATE statement in TYPE at %C must be inside " + "a MODULE"); + error_flag = true; + break; + } + + if (seen_comps) + { + gfc_error ("PRIVATE statement at %C must precede procedure" + " bindings"); + error_flag = true; + break; + } + + if (seen_private) + { + gfc_error ("Duplicate PRIVATE statement at %C"); + error_flag = true; + } + + accept_statement (ST_PRIVATE); + gfc_typebound_default_access = ACCESS_PRIVATE; + seen_private = true; + break; + + case ST_SEQUENCE: + gfc_error ("SEQUENCE statement at %C must precede CONTAINS"); + error_flag = true; + break; + + case ST_CONTAINS: + gfc_error ("Already inside a CONTAINS block at %C"); + error_flag = true; + break; + + default: + unexpected_statement (st); + break; + } + } + + pop_state (); + gcc_assert (gfc_current_state () == COMP_DERIVED); + + return error_flag; +} + + +/* Parse a derived type. */ + +static void +parse_derived (void) +{ + int compiling_type, seen_private, seen_sequence, seen_component, error_flag; + gfc_statement st; + gfc_state_data s; + gfc_symbol *derived_sym = NULL; + gfc_symbol *sym; + gfc_component *c; + + error_flag = 0; + + accept_statement (ST_DERIVED_DECL); + push_state (&s, COMP_DERIVED, gfc_new_block); + + gfc_new_block->component_access = ACCESS_PUBLIC; + seen_private = 0; + seen_sequence = 0; + seen_component = 0; + + compiling_type = 1; + + while (compiling_type) + { + st = next_statement (); + switch (st) + { + case ST_NONE: + unexpected_eof (); + + case ST_DATA_DECL: + accept_statement (st); + seen_component = 1; + break; + + case ST_PROCEDURE: + gfc_error ("PROCEDURE binding at %C must be inside CONTAINS"); + error_flag = 1; + break; + + case ST_FINAL: + gfc_error ("FINAL declaration at %C must be inside CONTAINS"); + error_flag = 1; + break; + + case ST_END_TYPE: +endType: + compiling_type = 0; + + if (!seen_component + && (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Derived type " + "definition at %C without components") + == FAILURE)) + error_flag = 1; + + accept_statement (ST_END_TYPE); + break; + + case ST_PRIVATE: + if (gfc_find_state (COMP_MODULE) == FAILURE) + { + gfc_error ("PRIVATE statement in TYPE at %C must be inside " + "a MODULE"); + error_flag = 1; + break; + } + + if (seen_component) + { + gfc_error ("PRIVATE statement at %C must precede " + "structure components"); + error_flag = 1; + break; + } + + if (seen_private) + { + gfc_error ("Duplicate PRIVATE statement at %C"); + error_flag = 1; + } + + s.sym->component_access = ACCESS_PRIVATE; + + accept_statement (ST_PRIVATE); + seen_private = 1; + break; + + case ST_SEQUENCE: + if (seen_component) + { + gfc_error ("SEQUENCE statement at %C must precede " + "structure components"); + error_flag = 1; + break; + } + + if (gfc_current_block ()->attr.sequence) + gfc_warning ("SEQUENCE attribute at %C already specified in " + "TYPE statement"); + + if (seen_sequence) + { + gfc_error ("Duplicate SEQUENCE statement at %C"); + error_flag = 1; + } + + seen_sequence = 1; + gfc_add_sequence (&gfc_current_block ()->attr, + gfc_current_block ()->name, NULL); + break; + + case ST_CONTAINS: + if (gfc_notify_std (GFC_STD_F2003, + "Fortran 2003: CONTAINS block in derived type" + " definition at %C") == FAILURE) + error_flag = 1; + + accept_statement (ST_CONTAINS); + if (parse_derived_contains ()) + error_flag = 1; + goto endType; + + default: + unexpected_statement (st); + break; + } + } + + /* need to verify that all fields of the derived type are + * interoperable with C if the type is declared to be bind(c) + */ + derived_sym = gfc_current_block(); + + sym = gfc_current_block (); + for (c = sym->components; c; c = c->next) + { + /* Look for allocatable components. */ + if (c->attr.allocatable + || (c->ts.type == BT_DERIVED && c->ts.derived->attr.alloc_comp)) + sym->attr.alloc_comp = 1; + + /* Look for pointer components. */ + if (c->attr.pointer + || (c->ts.type == BT_DERIVED && c->ts.derived->attr.pointer_comp)) + sym->attr.pointer_comp = 1; + + /* Look for private components. */ + if (sym->component_access == ACCESS_PRIVATE + || c->attr.access == ACCESS_PRIVATE + || (c->ts.type == BT_DERIVED && c->ts.derived->attr.private_comp)) + sym->attr.private_comp = 1; + } + + if (!seen_component) + sym->attr.zero_comp = 1; + + pop_state (); +} + + +/* Parse an ENUM. */ + +static void +parse_enum (void) +{ + int error_flag; + gfc_statement st; + int compiling_enum; + gfc_state_data s; + int seen_enumerator = 0; + + error_flag = 0; + + push_state (&s, COMP_ENUM, gfc_new_block); + + compiling_enum = 1; + + while (compiling_enum) + { + st = next_statement (); + switch (st) + { + case ST_NONE: + unexpected_eof (); + break; + + case ST_ENUMERATOR: + seen_enumerator = 1; + accept_statement (st); + break; + + case ST_END_ENUM: + compiling_enum = 0; + if (!seen_enumerator) + { + gfc_error ("ENUM declaration at %C has no ENUMERATORS"); + error_flag = 1; + } + accept_statement (st); + break; + + default: + gfc_free_enum_history (); + unexpected_statement (st); + break; + } + } + pop_state (); +} + + +/* Parse an interface. We must be able to deal with the possibility + of recursive interfaces. The parse_spec() subroutine is mutually + recursive with parse_interface(). */ + +static gfc_statement parse_spec (gfc_statement); + +static void +parse_interface (void) +{ + gfc_compile_state new_state = COMP_NONE, current_state; + gfc_symbol *prog_unit, *sym; + gfc_interface_info save; + gfc_state_data s1, s2; + gfc_statement st; + locus proc_locus; + + accept_statement (ST_INTERFACE); + + current_interface.ns = gfc_current_ns; + save = current_interface; + + sym = (current_interface.type == INTERFACE_GENERIC + || current_interface.type == INTERFACE_USER_OP) + ? gfc_new_block : NULL; + + push_state (&s1, COMP_INTERFACE, sym); + current_state = COMP_NONE; + +loop: + gfc_current_ns = gfc_get_namespace (current_interface.ns, 0); + + st = next_statement (); + switch (st) + { + case ST_NONE: + unexpected_eof (); + + case ST_SUBROUTINE: + case ST_FUNCTION: + if (st == ST_SUBROUTINE) + new_state = COMP_SUBROUTINE; + else if (st == ST_FUNCTION) + new_state = COMP_FUNCTION; + if (gfc_new_block->attr.pointer) + { + gfc_new_block->attr.pointer = 0; + gfc_new_block->attr.proc_pointer = 1; + } + if (gfc_add_explicit_interface (gfc_new_block, IFSRC_IFBODY, + gfc_new_block->formal, NULL) == FAILURE) + { + reject_statement (); + gfc_free_namespace (gfc_current_ns); + goto loop; + } + if (current_interface.type != INTERFACE_ABSTRACT && + !gfc_new_block->attr.dummy && + gfc_add_external (&gfc_new_block->attr, &gfc_current_locus) == FAILURE) + { + reject_statement (); + gfc_free_namespace (gfc_current_ns); + goto loop; + } + break; + + case ST_PROCEDURE: + case ST_MODULE_PROC: /* The module procedure matcher makes + sure the context is correct. */ + accept_statement (st); + gfc_free_namespace (gfc_current_ns); + goto loop; + + case ST_END_INTERFACE: + gfc_free_namespace (gfc_current_ns); + gfc_current_ns = current_interface.ns; + goto done; + + default: + gfc_error ("Unexpected %s statement in INTERFACE block at %C", + gfc_ascii_statement (st)); + reject_statement (); + gfc_free_namespace (gfc_current_ns); + goto loop; + } + + + /* Make sure that a generic interface has only subroutines or + functions and that the generic name has the right attribute. */ + if (current_interface.type == INTERFACE_GENERIC) + { + if (current_state == COMP_NONE) + { + if (new_state == COMP_FUNCTION) + gfc_add_function (&sym->attr, sym->name, NULL); + else if (new_state == COMP_SUBROUTINE) + gfc_add_subroutine (&sym->attr, sym->name, NULL); + + current_state = new_state; + } + else + { + if (new_state != current_state) + { + if (new_state == COMP_SUBROUTINE) + gfc_error ("SUBROUTINE at %C does not belong in a " + "generic function interface"); + + if (new_state == COMP_FUNCTION) + gfc_error ("FUNCTION at %C does not belong in a " + "generic subroutine interface"); + } + } + } + + if (current_interface.type == INTERFACE_ABSTRACT) + { + gfc_add_abstract (&gfc_new_block->attr, &gfc_current_locus); + if (gfc_is_intrinsic_typename (gfc_new_block->name)) + gfc_error ("Name '%s' of ABSTRACT INTERFACE at %C " + "cannot be the same as an intrinsic type", + gfc_new_block->name); + } + + push_state (&s2, new_state, gfc_new_block); + accept_statement (st); + prog_unit = gfc_new_block; + prog_unit->formal_ns = gfc_current_ns; + proc_locus = gfc_current_locus; + +decl: + /* Read data declaration statements. */ + st = parse_spec (ST_NONE); + + /* Since the interface block does not permit an IMPLICIT statement, + the default type for the function or the result must be taken + from the formal namespace. */ + if (new_state == COMP_FUNCTION) + { + if (prog_unit->result == prog_unit + && prog_unit->ts.type == BT_UNKNOWN) + gfc_set_default_type (prog_unit, 1, prog_unit->formal_ns); + else if (prog_unit->result != prog_unit + && prog_unit->result->ts.type == BT_UNKNOWN) + gfc_set_default_type (prog_unit->result, 1, + prog_unit->formal_ns); + } + + if (st != ST_END_SUBROUTINE && st != ST_END_FUNCTION) + { + gfc_error ("Unexpected %s statement at %C in INTERFACE body", + gfc_ascii_statement (st)); + reject_statement (); + goto decl; + } + + current_interface = save; + gfc_add_interface (prog_unit); + pop_state (); + + if (current_interface.ns + && current_interface.ns->proc_name + && strcmp (current_interface.ns->proc_name->name, + prog_unit->name) == 0) + gfc_error ("INTERFACE procedure '%s' at %L has the same name as the " + "enclosing procedure", prog_unit->name, &proc_locus); + + goto loop; + +done: + pop_state (); +} + + +/* Associate function characteristics by going back to the function + declaration and rematching the prefix. */ + +static match +match_deferred_characteristics (gfc_typespec * ts) +{ + locus loc; + match m = MATCH_ERROR; + char name[GFC_MAX_SYMBOL_LEN + 1]; + + loc = gfc_current_locus; + + gfc_current_locus = gfc_current_block ()->declared_at; + + gfc_clear_error (); + gfc_buffer_error (1); + m = gfc_match_prefix (ts); + gfc_buffer_error (0); + + if (ts->type == BT_DERIVED) + { + ts->kind = 0; + + if (!ts->derived || !ts->derived->components) + m = MATCH_ERROR; + } + + /* Only permit one go at the characteristic association. */ + if (ts->kind == -1) + ts->kind = 0; + + /* Set the function locus correctly. If we have not found the + function name, there is an error. */ + if (m == MATCH_YES + && gfc_match ("function% %n", name) == MATCH_YES + && strcmp (name, gfc_current_block ()->name) == 0) + { + gfc_current_block ()->declared_at = gfc_current_locus; + gfc_commit_symbols (); + } + else + gfc_error_check (); + + gfc_current_locus =loc; + return m; +} + + +/* Check specification-expressions in the function result of the currently + parsed block and ensure they are typed (give an IMPLICIT type if necessary). + For return types specified in a FUNCTION prefix, the IMPLICIT rules of the + scope are not yet parsed so this has to be delayed up to parse_spec. */ + +static void +check_function_result_typed (void) +{ + gfc_typespec* ts = &gfc_current_ns->proc_name->result->ts; + + gcc_assert (gfc_current_state () == COMP_FUNCTION); + gcc_assert (ts->type != BT_UNKNOWN); + + /* Check type-parameters, at the moment only CHARACTER lengths possible. */ + /* TODO: Extend when KIND type parameters are implemented. */ + if (ts->type == BT_CHARACTER && ts->cl && ts->cl->length) + gfc_expr_check_typed (ts->cl->length, gfc_current_ns, true); +} + + +/* Parse a set of specification statements. Returns the statement + that doesn't fit. */ + +static gfc_statement +parse_spec (gfc_statement st) +{ + st_state ss; + bool function_result_typed = false; + bool bad_characteristic = false; + gfc_typespec *ts; + + verify_st_order (&ss, ST_NONE, false); + if (st == ST_NONE) + st = next_statement (); + + /* If we are not inside a function or don't have a result specified so far, + do nothing special about it. */ + if (gfc_current_state () != COMP_FUNCTION) + function_result_typed = true; + else + { + gfc_symbol* proc = gfc_current_ns->proc_name; + gcc_assert (proc); + + if (proc->result->ts.type == BT_UNKNOWN) + function_result_typed = true; + } + +loop: + + /* If we find a statement that can not be followed by an IMPLICIT statement + (and thus we can expect to see none any further), type the function result + if it has not yet been typed. Be careful not to give the END statement + to verify_st_order! */ + if (!function_result_typed && st != ST_GET_FCN_CHARACTERISTICS) + { + bool verify_now = false; + + if (st == ST_END_FUNCTION || st == ST_CONTAINS) + verify_now = true; + else + { + st_state dummyss; + verify_st_order (&dummyss, ST_NONE, false); + verify_st_order (&dummyss, st, false); + + if (verify_st_order (&dummyss, ST_IMPLICIT, true) == FAILURE) + verify_now = true; + } + + if (verify_now) + { + check_function_result_typed (); + function_result_typed = true; + } + } + + switch (st) + { + case ST_NONE: + unexpected_eof (); + + case ST_IMPLICIT_NONE: + case ST_IMPLICIT: + if (!function_result_typed) + { + check_function_result_typed (); + function_result_typed = true; + } + goto declSt; + + case ST_FORMAT: + case ST_ENTRY: + case ST_DATA: /* Not allowed in interfaces */ + if (gfc_current_state () == COMP_INTERFACE) + break; + + /* Fall through */ + + case ST_USE: + case ST_IMPORT: + case ST_PARAMETER: + case ST_PUBLIC: + case ST_PRIVATE: + case ST_DERIVED_DECL: + case_decl: +declSt: + if (verify_st_order (&ss, st, false) == FAILURE) + { + reject_statement (); + st = next_statement (); + goto loop; + } + + switch (st) + { + case ST_INTERFACE: + parse_interface (); + break; + + case ST_DERIVED_DECL: + parse_derived (); + break; + + case ST_PUBLIC: + case ST_PRIVATE: + if (gfc_current_state () != COMP_MODULE) + { + gfc_error ("%s statement must appear in a MODULE", + gfc_ascii_statement (st)); + break; + } + + if (gfc_current_ns->default_access != ACCESS_UNKNOWN) + { + gfc_error ("%s statement at %C follows another accessibility " + "specification", gfc_ascii_statement (st)); + break; + } + + gfc_current_ns->default_access = (st == ST_PUBLIC) + ? ACCESS_PUBLIC : ACCESS_PRIVATE; + + break; + + case ST_STATEMENT_FUNCTION: + if (gfc_current_state () == COMP_MODULE) + { + unexpected_statement (st); + break; + } + + default: + break; + } + + accept_statement (st); + st = next_statement (); + goto loop; + + case ST_ENUM: + accept_statement (st); + parse_enum(); + st = next_statement (); + goto loop; + + case ST_GET_FCN_CHARACTERISTICS: + /* This statement triggers the association of a function's result + characteristics. */ + ts = &gfc_current_block ()->result->ts; + if (match_deferred_characteristics (ts) != MATCH_YES) + bad_characteristic = true; + + st = next_statement (); + goto loop; + + default: + break; + } + + /* If match_deferred_characteristics failed, then there is an error. */ + if (bad_characteristic) + { + ts = &gfc_current_block ()->result->ts; + if (ts->type != BT_DERIVED) + gfc_error ("Bad kind expression for function '%s' at %L", + gfc_current_block ()->name, + &gfc_current_block ()->declared_at); + else + gfc_error ("The type for function '%s' at %L is not accessible", + gfc_current_block ()->name, + &gfc_current_block ()->declared_at); + + gfc_current_block ()->ts.kind = 0; + /* Keep the derived type; if it's bad, it will be discovered later. */ + if (!(ts->type == BT_DERIVED && ts->derived)) + ts->type = BT_UNKNOWN; + } + + return st; +} + + +/* Parse a WHERE block, (not a simple WHERE statement). */ + +static void +parse_where_block (void) +{ + int seen_empty_else; + gfc_code *top, *d; + gfc_state_data s; + gfc_statement st; + + accept_statement (ST_WHERE_BLOCK); + top = gfc_state_stack->tail; + + push_state (&s, COMP_WHERE, gfc_new_block); + + d = add_statement (); + d->expr = top->expr; + d->op = EXEC_WHERE; + + top->expr = NULL; + top->block = d; + + seen_empty_else = 0; + + do + { + st = next_statement (); + switch (st) + { + case ST_NONE: + unexpected_eof (); + + case ST_WHERE_BLOCK: + parse_where_block (); + break; + + case ST_ASSIGNMENT: + case ST_WHERE: + accept_statement (st); + break; + + case ST_ELSEWHERE: + if (seen_empty_else) + { + gfc_error ("ELSEWHERE statement at %C follows previous " + "unmasked ELSEWHERE"); + break; + } + + if (new_st.expr == NULL) + seen_empty_else = 1; + + d = new_level (gfc_state_stack->head); + d->op = EXEC_WHERE; + d->expr = new_st.expr; + + accept_statement (st); + + break; + + case ST_END_WHERE: + accept_statement (st); + break; + + default: + gfc_error ("Unexpected %s statement in WHERE block at %C", + gfc_ascii_statement (st)); + reject_statement (); + break; + } + } + while (st != ST_END_WHERE); + + pop_state (); +} + + +/* Parse a FORALL block (not a simple FORALL statement). */ + +static void +parse_forall_block (void) +{ + gfc_code *top, *d; + gfc_state_data s; + gfc_statement st; + + accept_statement (ST_FORALL_BLOCK); + top = gfc_state_stack->tail; + + push_state (&s, COMP_FORALL, gfc_new_block); + + d = add_statement (); + d->op = EXEC_FORALL; + top->block = d; + + do + { + st = next_statement (); + switch (st) + { + + case ST_ASSIGNMENT: + case ST_POINTER_ASSIGNMENT: + case ST_WHERE: + case ST_FORALL: + accept_statement (st); + break; + + case ST_WHERE_BLOCK: + parse_where_block (); + break; + + case ST_FORALL_BLOCK: + parse_forall_block (); + break; + + case ST_END_FORALL: + accept_statement (st); + break; + + case ST_NONE: + unexpected_eof (); + + default: + gfc_error ("Unexpected %s statement in FORALL block at %C", + gfc_ascii_statement (st)); + + reject_statement (); + break; + } + } + while (st != ST_END_FORALL); + + pop_state (); +} + + +static gfc_statement parse_executable (gfc_statement); + +/* parse the statements of an IF-THEN-ELSEIF-ELSE-ENDIF block. */ + +static void +parse_if_block (void) +{ + gfc_code *top, *d; + gfc_statement st; + locus else_locus; + gfc_state_data s; + int seen_else; + + seen_else = 0; + accept_statement (ST_IF_BLOCK); + + top = gfc_state_stack->tail; + push_state (&s, COMP_IF, gfc_new_block); + + new_st.op = EXEC_IF; + d = add_statement (); + + d->expr = top->expr; + top->expr = NULL; + top->block = d; + + do + { + st = parse_executable (ST_NONE); + + switch (st) + { + case ST_NONE: + unexpected_eof (); + + case ST_ELSEIF: + if (seen_else) + { + gfc_error ("ELSE IF statement at %C cannot follow ELSE " + "statement at %L", &else_locus); + + reject_statement (); + break; + } + + d = new_level (gfc_state_stack->head); + d->op = EXEC_IF; + d->expr = new_st.expr; + + accept_statement (st); + + break; + + case ST_ELSE: + if (seen_else) + { + gfc_error ("Duplicate ELSE statements at %L and %C", + &else_locus); + reject_statement (); + break; + } + + seen_else = 1; + else_locus = gfc_current_locus; + + d = new_level (gfc_state_stack->head); + d->op = EXEC_IF; + + accept_statement (st); + + break; + + case ST_ENDIF: + break; + + default: + unexpected_statement (st); + break; + } + } + while (st != ST_ENDIF); + + pop_state (); + accept_statement (st); +} + + +/* Parse a SELECT block. */ + +static void +parse_select_block (void) +{ + gfc_statement st; + gfc_code *cp; + gfc_state_data s; + + accept_statement (ST_SELECT_CASE); + + cp = gfc_state_stack->tail; + push_state (&s, COMP_SELECT, gfc_new_block); + + /* Make sure that the next statement is a CASE or END SELECT. */ + for (;;) + { + st = next_statement (); + if (st == ST_NONE) + unexpected_eof (); + if (st == ST_END_SELECT) + { + /* Empty SELECT CASE is OK. */ + accept_statement (st); + pop_state (); + return; + } + if (st == ST_CASE) + break; + + gfc_error ("Expected a CASE or END SELECT statement following SELECT " + "CASE at %C"); + + reject_statement (); + } + + /* At this point, we're got a nonempty select block. */ + cp = new_level (cp); + *cp = new_st; + + accept_statement (st); + + do + { + st = parse_executable (ST_NONE); + switch (st) + { + case ST_NONE: + unexpected_eof (); + + case ST_CASE: + cp = new_level (gfc_state_stack->head); + *cp = new_st; + gfc_clear_new_st (); + + accept_statement (st); + /* Fall through */ + + case ST_END_SELECT: + break; + + /* Can't have an executable statement because of + parse_executable(). */ + default: + unexpected_statement (st); + break; + } + } + while (st != ST_END_SELECT); + + pop_state (); + accept_statement (st); +} + + +/* Given a symbol, make sure it is not an iteration variable for a DO + statement. This subroutine is called when the symbol is seen in a + context that causes it to become redefined. If the symbol is an + iterator, we generate an error message and return nonzero. */ + +int +gfc_check_do_variable (gfc_symtree *st) +{ + gfc_state_data *s; + + for (s=gfc_state_stack; s; s = s->previous) + if (s->do_variable == st) + { + gfc_error_now("Variable '%s' at %C cannot be redefined inside " + "loop beginning at %L", st->name, &s->head->loc); + return 1; + } + + return 0; +} + + +/* Checks to see if the current statement label closes an enddo. + Returns 0 if not, 1 if closes an ENDDO correctly, or 2 (and issues + an error) if it incorrectly closes an ENDDO. */ + +static int +check_do_closure (void) +{ + gfc_state_data *p; + + if (gfc_statement_label == NULL) + return 0; + + for (p = gfc_state_stack; p; p = p->previous) + if (p->state == COMP_DO) + break; + + if (p == NULL) + return 0; /* No loops to close */ + + if (p->ext.end_do_label == gfc_statement_label) + { + + if (p == gfc_state_stack) + return 1; + + gfc_error ("End of nonblock DO statement at %C is within another block"); + return 2; + } + + /* At this point, the label doesn't terminate the innermost loop. + Make sure it doesn't terminate another one. */ + for (; p; p = p->previous) + if (p->state == COMP_DO && p->ext.end_do_label == gfc_statement_label) + { + gfc_error ("End of nonblock DO statement at %C is interwoven " + "with another DO loop"); + return 2; + } + + return 0; +} + + +/* Parse a DO loop. Note that the ST_CYCLE and ST_EXIT statements are + handled inside of parse_executable(), because they aren't really + loop statements. */ + +static void +parse_do_block (void) +{ + gfc_statement st; + gfc_code *top; + gfc_state_data s; + gfc_symtree *stree; + + s.ext.end_do_label = new_st.label; + + if (new_st.ext.iterator != NULL) + stree = new_st.ext.iterator->var->symtree; + else + stree = NULL; + + accept_statement (ST_DO); + + top = gfc_state_stack->tail; + push_state (&s, COMP_DO, gfc_new_block); + + s.do_variable = stree; + + top->block = new_level (top); + top->block->op = EXEC_DO; + +loop: + st = parse_executable (ST_NONE); + + switch (st) + { + case ST_NONE: + unexpected_eof (); + + case ST_ENDDO: + if (s.ext.end_do_label != NULL + && s.ext.end_do_label != gfc_statement_label) + gfc_error_now ("Statement label in ENDDO at %C doesn't match " + "DO label"); + + if (gfc_statement_label != NULL) + { + new_st.op = EXEC_NOP; + add_statement (); + } + break; + + case ST_IMPLIED_ENDDO: + /* If the do-stmt of this DO construct has a do-construct-name, + the corresponding end-do must be an end-do-stmt (with a matching + name, but in that case we must have seen ST_ENDDO first). + We only complain about this in pedantic mode. */ + if (gfc_current_block () != NULL) + gfc_error_now ("named block DO at %L requires matching ENDDO name", + &gfc_current_block()->declared_at); + + break; + + default: + unexpected_statement (st); + goto loop; + } + + pop_state (); + accept_statement (st); +} + + +/* Parse the statements of OpenMP do/parallel do. */ + +static gfc_statement +parse_omp_do (gfc_statement omp_st) +{ + gfc_statement st; + gfc_code *cp, *np; + gfc_state_data s; + + accept_statement (omp_st); + + cp = gfc_state_stack->tail; + push_state (&s, COMP_OMP_STRUCTURED_BLOCK, NULL); + np = new_level (cp); + np->op = cp->op; + np->block = NULL; + + for (;;) + { + st = next_statement (); + if (st == ST_NONE) + unexpected_eof (); + else if (st == ST_DO) + break; + else + unexpected_statement (st); + } + + parse_do_block (); + if (gfc_statement_label != NULL + && gfc_state_stack->previous != NULL + && gfc_state_stack->previous->state == COMP_DO + && gfc_state_stack->previous->ext.end_do_label == gfc_statement_label) + { + /* In + DO 100 I=1,10 + !$OMP DO + DO J=1,10 + ... + 100 CONTINUE + there should be no !$OMP END DO. */ + pop_state (); + return ST_IMPLIED_ENDDO; + } + + check_do_closure (); + pop_state (); + + st = next_statement (); + if (st == (omp_st == ST_OMP_DO ? ST_OMP_END_DO : ST_OMP_END_PARALLEL_DO)) + { + if (new_st.op == EXEC_OMP_END_NOWAIT) + cp->ext.omp_clauses->nowait |= new_st.ext.omp_bool; + else + gcc_assert (new_st.op == EXEC_NOP); + gfc_clear_new_st (); + gfc_commit_symbols (); + gfc_warning_check (); + st = next_statement (); + } + return st; +} + + +/* Parse the statements of OpenMP atomic directive. */ + +static void +parse_omp_atomic (void) +{ + gfc_statement st; + gfc_code *cp, *np; + gfc_state_data s; + + accept_statement (ST_OMP_ATOMIC); + + cp = gfc_state_stack->tail; + push_state (&s, COMP_OMP_STRUCTURED_BLOCK, NULL); + np = new_level (cp); + np->op = cp->op; + np->block = NULL; + + for (;;) + { + st = next_statement (); + if (st == ST_NONE) + unexpected_eof (); + else if (st == ST_ASSIGNMENT) + break; + else + unexpected_statement (st); + } + + accept_statement (st); + + pop_state (); +} + + +/* Parse the statements of an OpenMP structured block. */ + +static void +parse_omp_structured_block (gfc_statement omp_st, bool workshare_stmts_only) +{ + gfc_statement st, omp_end_st; + gfc_code *cp, *np; + gfc_state_data s; + + accept_statement (omp_st); + + cp = gfc_state_stack->tail; + push_state (&s, COMP_OMP_STRUCTURED_BLOCK, NULL); + np = new_level (cp); + np->op = cp->op; + np->block = NULL; + + switch (omp_st) + { + case ST_OMP_PARALLEL: + omp_end_st = ST_OMP_END_PARALLEL; + break; + case ST_OMP_PARALLEL_SECTIONS: + omp_end_st = ST_OMP_END_PARALLEL_SECTIONS; + break; + case ST_OMP_SECTIONS: + omp_end_st = ST_OMP_END_SECTIONS; + break; + case ST_OMP_ORDERED: + omp_end_st = ST_OMP_END_ORDERED; + break; + case ST_OMP_CRITICAL: + omp_end_st = ST_OMP_END_CRITICAL; + break; + case ST_OMP_MASTER: + omp_end_st = ST_OMP_END_MASTER; + break; + case ST_OMP_SINGLE: + omp_end_st = ST_OMP_END_SINGLE; + break; + case ST_OMP_TASK: + omp_end_st = ST_OMP_END_TASK; + break; + case ST_OMP_WORKSHARE: + omp_end_st = ST_OMP_END_WORKSHARE; + break; + case ST_OMP_PARALLEL_WORKSHARE: + omp_end_st = ST_OMP_END_PARALLEL_WORKSHARE; + break; + default: + gcc_unreachable (); + } + + do + { + if (workshare_stmts_only) + { + /* Inside of !$omp workshare, only + scalar assignments + array assignments + where statements and constructs + forall statements and constructs + !$omp atomic + !$omp critical + !$omp parallel + are allowed. For !$omp critical these + restrictions apply recursively. */ + bool cycle = true; + + st = next_statement (); + for (;;) + { + switch (st) + { + case ST_NONE: + unexpected_eof (); + + case ST_ASSIGNMENT: + case ST_WHERE: + case ST_FORALL: + accept_statement (st); + break; + + case ST_WHERE_BLOCK: + parse_where_block (); + break; + + case ST_FORALL_BLOCK: + parse_forall_block (); + break; + + case ST_OMP_PARALLEL: + case ST_OMP_PARALLEL_SECTIONS: + parse_omp_structured_block (st, false); + break; + + case ST_OMP_PARALLEL_WORKSHARE: + case ST_OMP_CRITICAL: + parse_omp_structured_block (st, true); + break; + + case ST_OMP_PARALLEL_DO: + st = parse_omp_do (st); + continue; + + case ST_OMP_ATOMIC: + parse_omp_atomic (); + break; + + default: + cycle = false; + break; + } + + if (!cycle) + break; + + st = next_statement (); + } + } + else + st = parse_executable (ST_NONE); + if (st == ST_NONE) + unexpected_eof (); + else if (st == ST_OMP_SECTION + && (omp_st == ST_OMP_SECTIONS + || omp_st == ST_OMP_PARALLEL_SECTIONS)) + { + np = new_level (np); + np->op = cp->op; + np->block = NULL; + } + else if (st != omp_end_st) + unexpected_statement (st); + } + while (st != omp_end_st); + + switch (new_st.op) + { + case EXEC_OMP_END_NOWAIT: + cp->ext.omp_clauses->nowait |= new_st.ext.omp_bool; + break; + case EXEC_OMP_CRITICAL: + if (((cp->ext.omp_name == NULL) ^ (new_st.ext.omp_name == NULL)) + || (new_st.ext.omp_name != NULL + && strcmp (cp->ext.omp_name, new_st.ext.omp_name) != 0)) + gfc_error ("Name after !$omp critical and !$omp end critical does " + "not match at %C"); + gfc_free (CONST_CAST (char *, new_st.ext.omp_name)); + break; + case EXEC_OMP_END_SINGLE: + cp->ext.omp_clauses->lists[OMP_LIST_COPYPRIVATE] + = new_st.ext.omp_clauses->lists[OMP_LIST_COPYPRIVATE]; + new_st.ext.omp_clauses->lists[OMP_LIST_COPYPRIVATE] = NULL; + gfc_free_omp_clauses (new_st.ext.omp_clauses); + break; + case EXEC_NOP: + break; + default: + gcc_unreachable (); + } + + gfc_clear_new_st (); + gfc_commit_symbols (); + gfc_warning_check (); + pop_state (); +} + + +/* Accept a series of executable statements. We return the first + statement that doesn't fit to the caller. Any block statements are + passed on to the correct handler, which usually passes the buck + right back here. */ + +static gfc_statement +parse_executable (gfc_statement st) +{ + int close_flag; + + if (st == ST_NONE) + st = next_statement (); + + for (;;) + { + close_flag = check_do_closure (); + if (close_flag) + switch (st) + { + case ST_GOTO: + case ST_END_PROGRAM: + case ST_RETURN: + case ST_EXIT: + case ST_END_FUNCTION: + case ST_CYCLE: + case ST_PAUSE: + case ST_STOP: + case ST_END_SUBROUTINE: + + case ST_DO: + case ST_FORALL: + case ST_WHERE: + case ST_SELECT_CASE: + gfc_error ("%s statement at %C cannot terminate a non-block " + "DO loop", gfc_ascii_statement (st)); + break; + + default: + break; + } + + switch (st) + { + case ST_NONE: + unexpected_eof (); + + case ST_FORMAT: + case ST_DATA: + case ST_ENTRY: + case_executable: + accept_statement (st); + if (close_flag == 1) + return ST_IMPLIED_ENDDO; + break; + + case ST_IF_BLOCK: + parse_if_block (); + break; + + case ST_SELECT_CASE: + parse_select_block (); + break; + + case ST_DO: + parse_do_block (); + if (check_do_closure () == 1) + return ST_IMPLIED_ENDDO; + break; + + case ST_WHERE_BLOCK: + parse_where_block (); + break; + + case ST_FORALL_BLOCK: + parse_forall_block (); + break; + + case ST_OMP_PARALLEL: + case ST_OMP_PARALLEL_SECTIONS: + case ST_OMP_SECTIONS: + case ST_OMP_ORDERED: + case ST_OMP_CRITICAL: + case ST_OMP_MASTER: + case ST_OMP_SINGLE: + case ST_OMP_TASK: + parse_omp_structured_block (st, false); + break; + + case ST_OMP_WORKSHARE: + case ST_OMP_PARALLEL_WORKSHARE: + parse_omp_structured_block (st, true); + break; + + case ST_OMP_DO: + case ST_OMP_PARALLEL_DO: + st = parse_omp_do (st); + if (st == ST_IMPLIED_ENDDO) + return st; + continue; + + case ST_OMP_ATOMIC: + parse_omp_atomic (); + break; + + default: + return st; + } + + st = next_statement (); + } +} + + +/* Parse a series of contained program units. */ + +static void parse_progunit (gfc_statement); + + +/* Fix the symbols for sibling functions. These are incorrectly added to + the child namespace as the parser didn't know about this procedure. */ + +static void +gfc_fixup_sibling_symbols (gfc_symbol *sym, gfc_namespace *siblings) +{ + gfc_namespace *ns; + gfc_symtree *st; + gfc_symbol *old_sym; + + sym->attr.referenced = 1; + for (ns = siblings; ns; ns = ns->sibling) + { + gfc_find_sym_tree (sym->name, ns, 0, &st); + + if (!st || (st->n.sym->attr.dummy && ns == st->n.sym->ns)) + goto fixup_contained; + + old_sym = st->n.sym; + if (old_sym->ns == ns + && !old_sym->attr.contained + + /* By 14.6.1.3, host association should be excluded + for the following. */ + && !(old_sym->attr.external + || (old_sym->ts.type != BT_UNKNOWN + && !old_sym->attr.implicit_type) + || old_sym->attr.flavor == FL_PARAMETER + || old_sym->attr.in_common + || old_sym->attr.in_equivalence + || old_sym->attr.data + || old_sym->attr.dummy + || old_sym->attr.result + || old_sym->attr.dimension + || old_sym->attr.allocatable + || old_sym->attr.intrinsic + || old_sym->attr.generic + || old_sym->attr.flavor == FL_NAMELIST + || old_sym->attr.proc == PROC_ST_FUNCTION)) + { + /* Replace it with the symbol from the parent namespace. */ + st->n.sym = sym; + sym->refs++; + + /* Free the old (local) symbol. */ + old_sym->refs--; + if (old_sym->refs == 0) + gfc_free_symbol (old_sym); + } + +fixup_contained: + /* Do the same for any contained procedures. */ + gfc_fixup_sibling_symbols (sym, ns->contained); + } +} + +static void +parse_contained (int module) +{ + gfc_namespace *ns, *parent_ns, *tmp; + gfc_state_data s1, s2; + gfc_statement st; + gfc_symbol *sym; + gfc_entry_list *el; + int contains_statements = 0; + int seen_error = 0; + + push_state (&s1, COMP_CONTAINS, NULL); + parent_ns = gfc_current_ns; + + do + { + gfc_current_ns = gfc_get_namespace (parent_ns, 1); + + gfc_current_ns->sibling = parent_ns->contained; + parent_ns->contained = gfc_current_ns; + + next: + /* Process the next available statement. We come here if we got an error + and rejected the last statement. */ + st = next_statement (); + + switch (st) + { + case ST_NONE: + unexpected_eof (); + + case ST_FUNCTION: + case ST_SUBROUTINE: + contains_statements = 1; + accept_statement (st); + + push_state (&s2, + (st == ST_FUNCTION) ? COMP_FUNCTION : COMP_SUBROUTINE, + gfc_new_block); + + /* For internal procedures, create/update the symbol in the + parent namespace. */ + + if (!module) + { + if (gfc_get_symbol (gfc_new_block->name, parent_ns, &sym)) + gfc_error ("Contained procedure '%s' at %C is already " + "ambiguous", gfc_new_block->name); + else + { + if (gfc_add_procedure (&sym->attr, PROC_INTERNAL, sym->name, + &gfc_new_block->declared_at) == + SUCCESS) + { + if (st == ST_FUNCTION) + gfc_add_function (&sym->attr, sym->name, + &gfc_new_block->declared_at); + else + gfc_add_subroutine (&sym->attr, sym->name, + &gfc_new_block->declared_at); + } + } + + gfc_commit_symbols (); + } + else + sym = gfc_new_block; + + /* Mark this as a contained function, so it isn't replaced + by other module functions. */ + sym->attr.contained = 1; + sym->attr.referenced = 1; + + parse_progunit (ST_NONE); + + /* Fix up any sibling functions that refer to this one. */ + gfc_fixup_sibling_symbols (sym, gfc_current_ns); + /* Or refer to any of its alternate entry points. */ + for (el = gfc_current_ns->entries; el; el = el->next) + gfc_fixup_sibling_symbols (el->sym, gfc_current_ns); + + gfc_current_ns->code = s2.head; + gfc_current_ns = parent_ns; + + pop_state (); + break; + + /* These statements are associated with the end of the host unit. */ + case ST_END_FUNCTION: + case ST_END_MODULE: + case ST_END_PROGRAM: + case ST_END_SUBROUTINE: + accept_statement (st); + break; + + default: + gfc_error ("Unexpected %s statement in CONTAINS section at %C", + gfc_ascii_statement (st)); + reject_statement (); + seen_error = 1; + goto next; + break; + } + } + while (st != ST_END_FUNCTION && st != ST_END_SUBROUTINE + && st != ST_END_MODULE && st != ST_END_PROGRAM); + + /* The first namespace in the list is guaranteed to not have + anything (worthwhile) in it. */ + tmp = gfc_current_ns; + gfc_current_ns = parent_ns; + if (seen_error && tmp->refs > 1) + gfc_free_namespace (tmp); + + ns = gfc_current_ns->contained; + gfc_current_ns->contained = ns->sibling; + gfc_free_namespace (ns); + + pop_state (); + if (!contains_statements) + gfc_notify_std (GFC_STD_F2008, "Fortran 2008: CONTAINS statement without " + "FUNCTION or SUBROUTINE statement at %C"); +} + + +/* Parse a PROGRAM, SUBROUTINE or FUNCTION unit. */ + +static void +parse_progunit (gfc_statement st) +{ + gfc_state_data *p; + int n; + + st = parse_spec (st); + switch (st) + { + case ST_NONE: + unexpected_eof (); + + case ST_CONTAINS: + goto contains; + + case_end: + accept_statement (st); + goto done; + + default: + break; + } + + if (gfc_current_state () == COMP_FUNCTION) + gfc_check_function_type (gfc_current_ns); + +loop: + for (;;) + { + st = parse_executable (st); + + switch (st) + { + case ST_NONE: + unexpected_eof (); + + case ST_CONTAINS: + goto contains; + + case_end: + accept_statement (st); + goto done; + + default: + break; + } + + unexpected_statement (st); + reject_statement (); + st = next_statement (); + } + +contains: + n = 0; + + for (p = gfc_state_stack; p; p = p->previous) + if (p->state == COMP_CONTAINS) + n++; + + if (gfc_find_state (COMP_MODULE) == SUCCESS) + n--; + + if (n > 0) + { + gfc_error ("CONTAINS statement at %C is already in a contained " + "program unit"); + st = next_statement (); + goto loop; + } + + parse_contained (0); + +done: + gfc_current_ns->code = gfc_state_stack->head; +} + + +/* Come here to complain about a global symbol already in use as + something else. */ + +void +gfc_global_used (gfc_gsymbol *sym, locus *where) +{ + const char *name; + + if (where == NULL) + where = &gfc_current_locus; + + switch(sym->type) + { + case GSYM_PROGRAM: + name = "PROGRAM"; + break; + case GSYM_FUNCTION: + name = "FUNCTION"; + break; + case GSYM_SUBROUTINE: + name = "SUBROUTINE"; + break; + case GSYM_COMMON: + name = "COMMON"; + break; + case GSYM_BLOCK_DATA: + name = "BLOCK DATA"; + break; + case GSYM_MODULE: + name = "MODULE"; + break; + default: + gfc_internal_error ("gfc_global_used(): Bad type"); + name = NULL; + } + + gfc_error("Global name '%s' at %L is already being used as a %s at %L", + sym->name, where, name, &sym->where); +} + + +/* Parse a block data program unit. */ + +static void +parse_block_data (void) +{ + gfc_statement st; + static locus blank_locus; + static int blank_block=0; + gfc_gsymbol *s; + + gfc_current_ns->proc_name = gfc_new_block; + gfc_current_ns->is_block_data = 1; + + if (gfc_new_block == NULL) + { + if (blank_block) + gfc_error ("Blank BLOCK DATA at %C conflicts with " + "prior BLOCK DATA at %L", &blank_locus); + else + { + blank_block = 1; + blank_locus = gfc_current_locus; + } + } + else + { + s = gfc_get_gsymbol (gfc_new_block->name); + if (s->defined + || (s->type != GSYM_UNKNOWN && s->type != GSYM_BLOCK_DATA)) + gfc_global_used(s, NULL); + else + { + s->type = GSYM_BLOCK_DATA; + s->where = gfc_current_locus; + s->defined = 1; + } + } + + st = parse_spec (ST_NONE); + + while (st != ST_END_BLOCK_DATA) + { + gfc_error ("Unexpected %s statement in BLOCK DATA at %C", + gfc_ascii_statement (st)); + reject_statement (); + st = next_statement (); + } +} + + +/* Parse a module subprogram. */ + +static void +parse_module (void) +{ + gfc_statement st; + gfc_gsymbol *s; + + s = gfc_get_gsymbol (gfc_new_block->name); + if (s->defined || (s->type != GSYM_UNKNOWN && s->type != GSYM_MODULE)) + gfc_global_used(s, NULL); + else + { + s->type = GSYM_MODULE; + s->where = gfc_current_locus; + s->defined = 1; + } + + st = parse_spec (ST_NONE); + +loop: + switch (st) + { + case ST_NONE: + unexpected_eof (); + + case ST_CONTAINS: + parse_contained (1); + break; + + case ST_END_MODULE: + accept_statement (st); + break; + + default: + gfc_error ("Unexpected %s statement in MODULE at %C", + gfc_ascii_statement (st)); + + reject_statement (); + st = next_statement (); + goto loop; + } +} + + +/* Add a procedure name to the global symbol table. */ + +static void +add_global_procedure (int sub) +{ + gfc_gsymbol *s; + + s = gfc_get_gsymbol(gfc_new_block->name); + + if (s->defined + || (s->type != GSYM_UNKNOWN + && s->type != (sub ? GSYM_SUBROUTINE : GSYM_FUNCTION))) + gfc_global_used(s, NULL); + else + { + s->type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION; + s->where = gfc_current_locus; + s->defined = 1; + } +} + + +/* Add a program to the global symbol table. */ + +static void +add_global_program (void) +{ + gfc_gsymbol *s; + + if (gfc_new_block == NULL) + return; + s = gfc_get_gsymbol (gfc_new_block->name); + + if (s->defined || (s->type != GSYM_UNKNOWN && s->type != GSYM_PROGRAM)) + gfc_global_used(s, NULL); + else + { + s->type = GSYM_PROGRAM; + s->where = gfc_current_locus; + s->defined = 1; + } +} + + +/* Top level parser. */ + +gfc_try +gfc_parse_file (void) +{ + int seen_program, errors_before, errors; + gfc_state_data top, s; + gfc_statement st; + locus prog_locus; + + gfc_start_source_files (); + + top.state = COMP_NONE; + top.sym = NULL; + top.previous = NULL; + top.head = top.tail = NULL; + top.do_variable = NULL; + + gfc_state_stack = ⊤ + + gfc_clear_new_st (); + + gfc_statement_label = NULL; + + if (setjmp (eof_buf)) + return FAILURE; /* Come here on unexpected EOF */ + + seen_program = 0; + + /* Exit early for empty files. */ + if (gfc_at_eof ()) + goto done; + +loop: + gfc_init_2 (); + st = next_statement (); + switch (st) + { + case ST_NONE: + gfc_done_2 (); + goto done; + + case ST_PROGRAM: + if (seen_program) + goto duplicate_main; + seen_program = 1; + prog_locus = gfc_current_locus; + + push_state (&s, COMP_PROGRAM, gfc_new_block); + main_program_symbol(gfc_current_ns, gfc_new_block->name); + accept_statement (st); + add_global_program (); + parse_progunit (ST_NONE); + break; + + case ST_SUBROUTINE: + add_global_procedure (1); + push_state (&s, COMP_SUBROUTINE, gfc_new_block); + accept_statement (st); + parse_progunit (ST_NONE); + break; + + case ST_FUNCTION: + add_global_procedure (0); + push_state (&s, COMP_FUNCTION, gfc_new_block); + accept_statement (st); + parse_progunit (ST_NONE); + break; + + case ST_BLOCK_DATA: + push_state (&s, COMP_BLOCK_DATA, gfc_new_block); + accept_statement (st); + parse_block_data (); + break; + + case ST_MODULE: + push_state (&s, COMP_MODULE, gfc_new_block); + accept_statement (st); + + gfc_get_errors (NULL, &errors_before); + parse_module (); + break; + + /* Anything else starts a nameless main program block. */ + default: + if (seen_program) + goto duplicate_main; + seen_program = 1; + prog_locus = gfc_current_locus; + + push_state (&s, COMP_PROGRAM, gfc_new_block); + main_program_symbol (gfc_current_ns, "MAIN__"); + parse_progunit (st); + break; + } + + gfc_current_ns->code = s.head; + + gfc_resolve (gfc_current_ns); + + /* Dump the parse tree if requested. */ + if (gfc_option.dump_parse_tree) + gfc_dump_parse_tree (gfc_current_ns, stdout); + + gfc_get_errors (NULL, &errors); + if (s.state == COMP_MODULE) + { + gfc_dump_module (s.sym->name, errors_before == errors); + if (errors == 0) + gfc_generate_module_code (gfc_current_ns); + } + else + { + if (errors == 0) + gfc_generate_code (gfc_current_ns); + } + + pop_state (); + gfc_done_2 (); + goto loop; + +done: + gfc_end_source_files (); + return SUCCESS; + +duplicate_main: + /* If we see a duplicate main program, shut down. If the second + instance is an implied main program, i.e. data decls or executable + statements, we're in for lots of errors. */ + gfc_error ("Two main PROGRAMs at %L and %C", &prog_locus); + reject_statement (); + gfc_done_2 (); + return SUCCESS; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/parse.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/parse.h new file mode 100644 index 0000000000..7fe2330dbe --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/parse.h @@ -0,0 +1,72 @@ +/* Parser header + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Steven Bosscher + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + + +#ifndef GFC_PARSE_H +#define GFC_PARSE_H + +#include "gfortran.h" + +/* Enum for what the compiler is currently doing. */ +typedef enum +{ + COMP_NONE, COMP_PROGRAM, COMP_MODULE, COMP_SUBROUTINE, COMP_FUNCTION, + COMP_BLOCK_DATA, COMP_INTERFACE, COMP_DERIVED, COMP_DERIVED_CONTAINS, COMP_IF, + COMP_DO, COMP_SELECT, COMP_FORALL, COMP_WHERE, COMP_CONTAINS, COMP_ENUM, + COMP_OMP_STRUCTURED_BLOCK +} +gfc_compile_state; + +/* Stack element for the current compilation state. These structures + are allocated as automatic variables. */ +typedef struct gfc_state_data +{ + gfc_compile_state state; + gfc_symbol *sym; /* Block name associated with this level */ + gfc_symtree *do_variable; /* For DO blocks the iterator variable. */ + + struct gfc_code *head, *tail; + struct gfc_state_data *previous; + + /* Block-specific state data. */ + union + { + gfc_st_label *end_do_label; + } + ext; +} +gfc_state_data; + +extern gfc_state_data *gfc_state_stack; + +#define gfc_current_block() (gfc_state_stack->sym) +#define gfc_current_state() (gfc_state_stack->state) + +int gfc_check_do_variable (gfc_symtree *); +gfc_try gfc_find_state (gfc_compile_state); +gfc_state_data *gfc_enclosing_unit (gfc_compile_state *); +const char *gfc_ascii_statement (gfc_statement); +match gfc_match_enum (void); +match gfc_match_enumerator_def (void); +void gfc_free_enum_history (void); +extern bool gfc_matching_function; +match gfc_match_prefix (gfc_typespec *); +#endif /* GFC_PARSE_H */ diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/primary.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/primary.c new file mode 100644 index 0000000000..cb6f98883b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/primary.c @@ -0,0 +1,2975 @@ +/* Primary expression subroutines + Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "flags.h" +#include "gfortran.h" +#include "arith.h" +#include "match.h" +#include "parse.h" +#include "toplev.h" + +/* Matches a kind-parameter expression, which is either a named + symbolic constant or a nonnegative integer constant. If + successful, sets the kind value to the correct integer. */ + +static match +match_kind_param (int *kind) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_symbol *sym; + const char *p; + match m; + + m = gfc_match_small_literal_int (kind, NULL); + if (m != MATCH_NO) + return m; + + m = gfc_match_name (name); + if (m != MATCH_YES) + return m; + + if (gfc_find_symbol (name, NULL, 1, &sym)) + return MATCH_ERROR; + + if (sym == NULL) + return MATCH_NO; + + if (sym->attr.flavor != FL_PARAMETER) + return MATCH_NO; + + p = gfc_extract_int (sym->value, kind); + if (p != NULL) + return MATCH_NO; + + gfc_set_sym_referenced (sym); + + if (*kind < 0) + return MATCH_NO; + + return MATCH_YES; +} + + +/* Get a trailing kind-specification for non-character variables. + Returns: + the integer kind value or: + -1 if an error was generated + -2 if no kind was found */ + +static int +get_kind (void) +{ + int kind; + match m; + + if (gfc_match_char ('_') != MATCH_YES) + return -2; + + m = match_kind_param (&kind); + if (m == MATCH_NO) + gfc_error ("Missing kind-parameter at %C"); + + return (m == MATCH_YES) ? kind : -1; +} + + +/* Given a character and a radix, see if the character is a valid + digit in that radix. */ + +int +gfc_check_digit (char c, int radix) +{ + int r; + + switch (radix) + { + case 2: + r = ('0' <= c && c <= '1'); + break; + + case 8: + r = ('0' <= c && c <= '7'); + break; + + case 10: + r = ('0' <= c && c <= '9'); + break; + + case 16: + r = ISXDIGIT (c); + break; + + default: + gfc_internal_error ("gfc_check_digit(): bad radix"); + } + + return r; +} + + +/* Match the digit string part of an integer if signflag is not set, + the signed digit string part if signflag is set. If the buffer + is NULL, we just count characters for the resolution pass. Returns + the number of characters matched, -1 for no match. */ + +static int +match_digits (int signflag, int radix, char *buffer) +{ + locus old_loc; + int length; + char c; + + length = 0; + c = gfc_next_ascii_char (); + + if (signflag && (c == '+' || c == '-')) + { + if (buffer != NULL) + *buffer++ = c; + gfc_gobble_whitespace (); + c = gfc_next_ascii_char (); + length++; + } + + if (!gfc_check_digit (c, radix)) + return -1; + + length++; + if (buffer != NULL) + *buffer++ = c; + + for (;;) + { + old_loc = gfc_current_locus; + c = gfc_next_ascii_char (); + + if (!gfc_check_digit (c, radix)) + break; + + if (buffer != NULL) + *buffer++ = c; + length++; + } + + gfc_current_locus = old_loc; + + return length; +} + + +/* Match an integer (digit string and optional kind). + A sign will be accepted if signflag is set. */ + +static match +match_integer_constant (gfc_expr **result, int signflag) +{ + int length, kind; + locus old_loc; + char *buffer; + gfc_expr *e; + + old_loc = gfc_current_locus; + gfc_gobble_whitespace (); + + length = match_digits (signflag, 10, NULL); + gfc_current_locus = old_loc; + if (length == -1) + return MATCH_NO; + + buffer = (char *) alloca (length + 1); + memset (buffer, '\0', length + 1); + + gfc_gobble_whitespace (); + + match_digits (signflag, 10, buffer); + + kind = get_kind (); + if (kind == -2) + kind = gfc_default_integer_kind; + if (kind == -1) + return MATCH_ERROR; + + if (gfc_validate_kind (BT_INTEGER, kind, true) < 0) + { + gfc_error ("Integer kind %d at %C not available", kind); + return MATCH_ERROR; + } + + e = gfc_convert_integer (buffer, kind, 10, &gfc_current_locus); + + if (gfc_range_check (e) != ARITH_OK) + { + gfc_error ("Integer too big for its kind at %C. This check can be " + "disabled with the option -fno-range-check"); + + gfc_free_expr (e); + return MATCH_ERROR; + } + + *result = e; + return MATCH_YES; +} + + +/* Match a Hollerith constant. */ + +static match +match_hollerith_constant (gfc_expr **result) +{ + locus old_loc; + gfc_expr *e = NULL; + const char *msg; + int num; + int i; + + old_loc = gfc_current_locus; + gfc_gobble_whitespace (); + + if (match_integer_constant (&e, 0) == MATCH_YES + && gfc_match_char ('h') == MATCH_YES) + { + if (gfc_notify_std (GFC_STD_LEGACY, "Extension: Hollerith constant " + "at %C") == FAILURE) + goto cleanup; + + msg = gfc_extract_int (e, &num); + if (msg != NULL) + { + gfc_error (msg); + goto cleanup; + } + if (num == 0) + { + gfc_error ("Invalid Hollerith constant: %L must contain at least " + "one character", &old_loc); + goto cleanup; + } + if (e->ts.kind != gfc_default_integer_kind) + { + gfc_error ("Invalid Hollerith constant: Integer kind at %L " + "should be default", &old_loc); + goto cleanup; + } + else + { + gfc_free_expr (e); + e = gfc_constant_result (BT_HOLLERITH, gfc_default_character_kind, + &gfc_current_locus); + + e->representation.string = XCNEWVEC (char, num + 1); + + for (i = 0; i < num; i++) + { + gfc_char_t c = gfc_next_char_literal (1); + if (! gfc_wide_fits_in_byte (c)) + { + gfc_error ("Invalid Hollerith constant at %L contains a " + "wide character", &old_loc); + goto cleanup; + } + + e->representation.string[i] = (unsigned char) c; + } + + e->representation.string[num] = '\0'; + e->representation.length = num; + + *result = e; + return MATCH_YES; + } + } + + gfc_free_expr (e); + gfc_current_locus = old_loc; + return MATCH_NO; + +cleanup: + gfc_free_expr (e); + return MATCH_ERROR; +} + + +/* Match a binary, octal or hexadecimal constant that can be found in + a DATA statement. The standard permits b'010...', o'73...', and + z'a1...' where b, o, and z can be capital letters. This function + also accepts postfixed forms of the constants: '01...'b, '73...'o, + and 'a1...'z. An additional extension is the use of x for z. */ + +static match +match_boz_constant (gfc_expr **result) +{ + int radix, length, x_hex, kind; + locus old_loc, start_loc; + char *buffer, post, delim; + gfc_expr *e; + + start_loc = old_loc = gfc_current_locus; + gfc_gobble_whitespace (); + + x_hex = 0; + switch (post = gfc_next_ascii_char ()) + { + case 'b': + radix = 2; + post = 0; + break; + case 'o': + radix = 8; + post = 0; + break; + case 'x': + x_hex = 1; + /* Fall through. */ + case 'z': + radix = 16; + post = 0; + break; + case '\'': + /* Fall through. */ + case '\"': + delim = post; + post = 1; + radix = 16; /* Set to accept any valid digit string. */ + break; + default: + goto backup; + } + + /* No whitespace allowed here. */ + + if (post == 0) + delim = gfc_next_ascii_char (); + + if (delim != '\'' && delim != '\"') + goto backup; + + if (x_hex + && (gfc_notify_std (GFC_STD_GNU, "Extension: Hexadecimal " + "constant at %C uses non-standard syntax") + == FAILURE)) + return MATCH_ERROR; + + old_loc = gfc_current_locus; + + length = match_digits (0, radix, NULL); + if (length == -1) + { + gfc_error ("Empty set of digits in BOZ constant at %C"); + return MATCH_ERROR; + } + + if (gfc_next_ascii_char () != delim) + { + gfc_error ("Illegal character in BOZ constant at %C"); + return MATCH_ERROR; + } + + if (post == 1) + { + switch (gfc_next_ascii_char ()) + { + case 'b': + radix = 2; + break; + case 'o': + radix = 8; + break; + case 'x': + /* Fall through. */ + case 'z': + radix = 16; + break; + default: + goto backup; + } + + if (gfc_notify_std (GFC_STD_GNU, "Extension: BOZ constant " + "at %C uses non-standard postfix syntax") + == FAILURE) + return MATCH_ERROR; + } + + gfc_current_locus = old_loc; + + buffer = (char *) alloca (length + 1); + memset (buffer, '\0', length + 1); + + match_digits (0, radix, buffer); + gfc_next_ascii_char (); /* Eat delimiter. */ + if (post == 1) + gfc_next_ascii_char (); /* Eat postfixed b, o, z, or x. */ + + /* In section 5.2.5 and following C567 in the Fortran 2003 standard, we find + "If a data-stmt-constant is a boz-literal-constant, the corresponding + variable shall be of type integer. The boz-literal-constant is treated + as if it were an int-literal-constant with a kind-param that specifies + the representation method with the largest decimal exponent range + supported by the processor." */ + + kind = gfc_max_integer_kind; + e = gfc_convert_integer (buffer, kind, radix, &gfc_current_locus); + + /* Mark as boz variable. */ + e->is_boz = 1; + + if (gfc_range_check (e) != ARITH_OK) + { + gfc_error ("Integer too big for integer kind %i at %C", kind); + gfc_free_expr (e); + return MATCH_ERROR; + } + + if (!gfc_in_match_data () + && (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: BOZ used outside a DATA " + "statement at %C") + == FAILURE)) + return MATCH_ERROR; + + *result = e; + return MATCH_YES; + +backup: + gfc_current_locus = start_loc; + return MATCH_NO; +} + + +/* Match a real constant of some sort. Allow a signed constant if signflag + is nonzero. */ + +static match +match_real_constant (gfc_expr **result, int signflag) +{ + int kind, count, seen_dp, seen_digits; + locus old_loc, temp_loc; + char *p, *buffer, c, exp_char; + gfc_expr *e; + bool negate; + + old_loc = gfc_current_locus; + gfc_gobble_whitespace (); + + e = NULL; + + count = 0; + seen_dp = 0; + seen_digits = 0; + exp_char = ' '; + negate = FALSE; + + c = gfc_next_ascii_char (); + if (signflag && (c == '+' || c == '-')) + { + if (c == '-') + negate = TRUE; + + gfc_gobble_whitespace (); + c = gfc_next_ascii_char (); + } + + /* Scan significand. */ + for (;; c = gfc_next_ascii_char (), count++) + { + if (c == '.') + { + if (seen_dp) + goto done; + + /* Check to see if "." goes with a following operator like + ".eq.". */ + temp_loc = gfc_current_locus; + c = gfc_next_ascii_char (); + + if (c == 'e' || c == 'd' || c == 'q') + { + c = gfc_next_ascii_char (); + if (c == '.') + goto done; /* Operator named .e. or .d. */ + } + + if (ISALPHA (c)) + goto done; /* Distinguish 1.e9 from 1.eq.2 */ + + gfc_current_locus = temp_loc; + seen_dp = 1; + continue; + } + + if (ISDIGIT (c)) + { + seen_digits = 1; + continue; + } + + break; + } + + if (!seen_digits || (c != 'e' && c != 'd' && c != 'q')) + goto done; + exp_char = c; + + /* Scan exponent. */ + c = gfc_next_ascii_char (); + count++; + + if (c == '+' || c == '-') + { /* optional sign */ + c = gfc_next_ascii_char (); + count++; + } + + if (!ISDIGIT (c)) + { + gfc_error ("Missing exponent in real number at %C"); + return MATCH_ERROR; + } + + while (ISDIGIT (c)) + { + c = gfc_next_ascii_char (); + count++; + } + +done: + /* Check that we have a numeric constant. */ + if (!seen_digits || (!seen_dp && exp_char == ' ')) + { + gfc_current_locus = old_loc; + return MATCH_NO; + } + + /* Convert the number. */ + gfc_current_locus = old_loc; + gfc_gobble_whitespace (); + + buffer = (char *) alloca (count + 1); + memset (buffer, '\0', count + 1); + + p = buffer; + c = gfc_next_ascii_char (); + if (c == '+' || c == '-') + { + gfc_gobble_whitespace (); + c = gfc_next_ascii_char (); + } + + /* Hack for mpfr_set_str(). */ + for (;;) + { + if (c == 'd' || c == 'q') + *p = 'e'; + else + *p = c; + p++; + if (--count == 0) + break; + + c = gfc_next_ascii_char (); + } + + kind = get_kind (); + if (kind == -1) + goto cleanup; + + switch (exp_char) + { + case 'd': + if (kind != -2) + { + gfc_error ("Real number at %C has a 'd' exponent and an explicit " + "kind"); + goto cleanup; + } + kind = gfc_default_double_kind; + break; + + default: + if (kind == -2) + kind = gfc_default_real_kind; + + if (gfc_validate_kind (BT_REAL, kind, true) < 0) + { + gfc_error ("Invalid real kind %d at %C", kind); + goto cleanup; + } + } + + e = gfc_convert_real (buffer, kind, &gfc_current_locus); + if (negate) + mpfr_neg (e->value.real, e->value.real, GFC_RND_MODE); + + switch (gfc_range_check (e)) + { + case ARITH_OK: + break; + case ARITH_OVERFLOW: + gfc_error ("Real constant overflows its kind at %C"); + goto cleanup; + + case ARITH_UNDERFLOW: + if (gfc_option.warn_underflow) + gfc_warning ("Real constant underflows its kind at %C"); + mpfr_set_ui (e->value.real, 0, GFC_RND_MODE); + break; + + default: + gfc_internal_error ("gfc_range_check() returned bad value"); + } + + *result = e; + return MATCH_YES; + +cleanup: + gfc_free_expr (e); + return MATCH_ERROR; +} + + +/* Match a substring reference. */ + +static match +match_substring (gfc_charlen *cl, int init, gfc_ref **result) +{ + gfc_expr *start, *end; + locus old_loc; + gfc_ref *ref; + match m; + + start = NULL; + end = NULL; + + old_loc = gfc_current_locus; + + m = gfc_match_char ('('); + if (m != MATCH_YES) + return MATCH_NO; + + if (gfc_match_char (':') != MATCH_YES) + { + if (init) + m = gfc_match_init_expr (&start); + else + m = gfc_match_expr (&start); + + if (m != MATCH_YES) + { + m = MATCH_NO; + goto cleanup; + } + + m = gfc_match_char (':'); + if (m != MATCH_YES) + goto cleanup; + } + + if (gfc_match_char (')') != MATCH_YES) + { + if (init) + m = gfc_match_init_expr (&end); + else + m = gfc_match_expr (&end); + + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + + m = gfc_match_char (')'); + if (m == MATCH_NO) + goto syntax; + } + + /* Optimize away the (:) reference. */ + if (start == NULL && end == NULL) + ref = NULL; + else + { + ref = gfc_get_ref (); + + ref->type = REF_SUBSTRING; + if (start == NULL) + start = gfc_int_expr (1); + ref->u.ss.start = start; + if (end == NULL && cl) + end = gfc_copy_expr (cl->length); + ref->u.ss.end = end; + ref->u.ss.length = cl; + } + + *result = ref; + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in SUBSTRING specification at %C"); + m = MATCH_ERROR; + +cleanup: + gfc_free_expr (start); + gfc_free_expr (end); + + gfc_current_locus = old_loc; + return m; +} + + +/* Reads the next character of a string constant, taking care to + return doubled delimiters on the input as a single instance of + the delimiter. + + Special return values for "ret" argument are: + -1 End of the string, as determined by the delimiter + -2 Unterminated string detected + + Backslash codes are also expanded at this time. */ + +static gfc_char_t +next_string_char (gfc_char_t delimiter, int *ret) +{ + locus old_locus; + gfc_char_t c; + + c = gfc_next_char_literal (1); + *ret = 0; + + if (c == '\n') + { + *ret = -2; + return 0; + } + + if (gfc_option.flag_backslash && c == '\\') + { + old_locus = gfc_current_locus; + + if (gfc_match_special_char (&c) == MATCH_NO) + gfc_current_locus = old_locus; + + if (!(gfc_option.allow_std & GFC_STD_GNU) && !inhibit_warnings) + gfc_warning ("Extension: backslash character at %C"); + } + + if (c != delimiter) + return c; + + old_locus = gfc_current_locus; + c = gfc_next_char_literal (0); + + if (c == delimiter) + return c; + gfc_current_locus = old_locus; + + *ret = -1; + return 0; +} + + +/* Special case of gfc_match_name() that matches a parameter kind name + before a string constant. This takes case of the weird but legal + case of: + + kind_____'string' + + where kind____ is a parameter. gfc_match_name() will happily slurp + up all the underscores, which leads to problems. If we return + MATCH_YES, the parse pointer points to the final underscore, which + is not part of the name. We never return MATCH_ERROR-- errors in + the name will be detected later. */ + +static match +match_charkind_name (char *name) +{ + locus old_loc; + char c, peek; + int len; + + gfc_gobble_whitespace (); + c = gfc_next_ascii_char (); + if (!ISALPHA (c)) + return MATCH_NO; + + *name++ = c; + len = 1; + + for (;;) + { + old_loc = gfc_current_locus; + c = gfc_next_ascii_char (); + + if (c == '_') + { + peek = gfc_peek_ascii_char (); + + if (peek == '\'' || peek == '\"') + { + gfc_current_locus = old_loc; + *name = '\0'; + return MATCH_YES; + } + } + + if (!ISALNUM (c) + && c != '_' + && (gfc_option.flag_dollar_ok && c != '$')) + break; + + *name++ = c; + if (++len > GFC_MAX_SYMBOL_LEN) + break; + } + + return MATCH_NO; +} + + +/* See if the current input matches a character constant. Lots of + contortions have to be done to match the kind parameter which comes + before the actual string. The main consideration is that we don't + want to error out too quickly. For example, we don't actually do + any validation of the kinds until we have actually seen a legal + delimiter. Using match_kind_param() generates errors too quickly. */ + +static match +match_string_constant (gfc_expr **result) +{ + char name[GFC_MAX_SYMBOL_LEN + 1], peek; + int i, kind, length, warn_ampersand, ret; + locus old_locus, start_locus; + gfc_symbol *sym; + gfc_expr *e; + const char *q; + match m; + gfc_char_t c, delimiter, *p; + + old_locus = gfc_current_locus; + + gfc_gobble_whitespace (); + + start_locus = gfc_current_locus; + + c = gfc_next_char (); + if (c == '\'' || c == '"') + { + kind = gfc_default_character_kind; + goto got_delim; + } + + if (gfc_wide_is_digit (c)) + { + kind = 0; + + while (gfc_wide_is_digit (c)) + { + kind = kind * 10 + c - '0'; + if (kind > 9999999) + goto no_match; + c = gfc_next_char (); + } + + } + else + { + gfc_current_locus = old_locus; + + m = match_charkind_name (name); + if (m != MATCH_YES) + goto no_match; + + if (gfc_find_symbol (name, NULL, 1, &sym) + || sym == NULL + || sym->attr.flavor != FL_PARAMETER) + goto no_match; + + kind = -1; + c = gfc_next_char (); + } + + if (c == ' ') + { + gfc_gobble_whitespace (); + c = gfc_next_char (); + } + + if (c != '_') + goto no_match; + + gfc_gobble_whitespace (); + start_locus = gfc_current_locus; + + c = gfc_next_char (); + if (c != '\'' && c != '"') + goto no_match; + + if (kind == -1) + { + q = gfc_extract_int (sym->value, &kind); + if (q != NULL) + { + gfc_error (q); + return MATCH_ERROR; + } + gfc_set_sym_referenced (sym); + } + + if (gfc_validate_kind (BT_CHARACTER, kind, true) < 0) + { + gfc_error ("Invalid kind %d for CHARACTER constant at %C", kind); + return MATCH_ERROR; + } + +got_delim: + /* Scan the string into a block of memory by first figuring out how + long it is, allocating the structure, then re-reading it. This + isn't particularly efficient, but string constants aren't that + common in most code. TODO: Use obstacks? */ + + delimiter = c; + length = 0; + + for (;;) + { + c = next_string_char (delimiter, &ret); + if (ret == -1) + break; + if (ret == -2) + { + gfc_current_locus = start_locus; + gfc_error ("Unterminated character constant beginning at %C"); + return MATCH_ERROR; + } + + length++; + } + + /* Peek at the next character to see if it is a b, o, z, or x for the + postfixed BOZ literal constants. */ + peek = gfc_peek_ascii_char (); + if (peek == 'b' || peek == 'o' || peek =='z' || peek == 'x') + goto no_match; + + + e = gfc_get_expr (); + + e->expr_type = EXPR_CONSTANT; + e->ref = NULL; + e->ts.type = BT_CHARACTER; + e->ts.kind = kind; + e->ts.is_c_interop = 0; + e->ts.is_iso_c = 0; + e->where = start_locus; + + e->value.character.string = p = gfc_get_wide_string (length + 1); + e->value.character.length = length; + + gfc_current_locus = start_locus; + gfc_next_char (); /* Skip delimiter */ + + /* We disable the warning for the following loop as the warning has already + been printed in the loop above. */ + warn_ampersand = gfc_option.warn_ampersand; + gfc_option.warn_ampersand = 0; + + for (i = 0; i < length; i++) + { + c = next_string_char (delimiter, &ret); + + if (!gfc_check_character_range (c, kind)) + { + gfc_error ("Character '%s' in string at %C is not representable " + "in character kind %d", gfc_print_wide_char (c), kind); + return MATCH_ERROR; + } + + *p++ = c; + } + + *p = '\0'; /* TODO: C-style string is for development/debug purposes. */ + gfc_option.warn_ampersand = warn_ampersand; + + next_string_char (delimiter, &ret); + if (ret != -1) + gfc_internal_error ("match_string_constant(): Delimiter not found"); + + if (match_substring (NULL, 0, &e->ref) != MATCH_NO) + e->expr_type = EXPR_SUBSTRING; + + *result = e; + + return MATCH_YES; + +no_match: + gfc_current_locus = old_locus; + return MATCH_NO; +} + + +/* Match a .true. or .false. Returns 1 if a .true. was found, + 0 if a .false. was found, and -1 otherwise. */ +static int +match_logical_constant_string (void) +{ + locus orig_loc = gfc_current_locus; + + gfc_gobble_whitespace (); + if (gfc_next_ascii_char () == '.') + { + char ch = gfc_next_ascii_char (); + if (ch == 'f') + { + if (gfc_next_ascii_char () == 'a' + && gfc_next_ascii_char () == 'l' + && gfc_next_ascii_char () == 's' + && gfc_next_ascii_char () == 'e' + && gfc_next_ascii_char () == '.') + /* Matched ".false.". */ + return 0; + } + else if (ch == 't') + { + if (gfc_next_ascii_char () == 'r' + && gfc_next_ascii_char () == 'u' + && gfc_next_ascii_char () == 'e' + && gfc_next_ascii_char () == '.') + /* Matched ".true.". */ + return 1; + } + } + gfc_current_locus = orig_loc; + return -1; +} + +/* Match a .true. or .false. */ + +static match +match_logical_constant (gfc_expr **result) +{ + gfc_expr *e; + int i, kind; + + i = match_logical_constant_string (); + if (i == -1) + return MATCH_NO; + + kind = get_kind (); + if (kind == -1) + return MATCH_ERROR; + if (kind == -2) + kind = gfc_default_logical_kind; + + if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0) + { + gfc_error ("Bad kind for logical constant at %C"); + return MATCH_ERROR; + } + + e = gfc_get_expr (); + + e->expr_type = EXPR_CONSTANT; + e->value.logical = i; + e->ts.type = BT_LOGICAL; + e->ts.kind = kind; + e->ts.is_c_interop = 0; + e->ts.is_iso_c = 0; + e->where = gfc_current_locus; + + *result = e; + return MATCH_YES; +} + + +/* Match a real or imaginary part of a complex constant that is a + symbolic constant. */ + +static match +match_sym_complex_part (gfc_expr **result) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_symbol *sym; + gfc_expr *e; + match m; + + m = gfc_match_name (name); + if (m != MATCH_YES) + return m; + + if (gfc_find_symbol (name, NULL, 1, &sym) || sym == NULL) + return MATCH_NO; + + if (sym->attr.flavor != FL_PARAMETER) + { + gfc_error ("Expected PARAMETER symbol in complex constant at %C"); + return MATCH_ERROR; + } + + if (!gfc_numeric_ts (&sym->value->ts)) + { + gfc_error ("Numeric PARAMETER required in complex constant at %C"); + return MATCH_ERROR; + } + + if (sym->value->rank != 0) + { + gfc_error ("Scalar PARAMETER required in complex constant at %C"); + return MATCH_ERROR; + } + + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: PARAMETER symbol in " + "complex constant at %C") == FAILURE) + return MATCH_ERROR; + + switch (sym->value->ts.type) + { + case BT_REAL: + e = gfc_copy_expr (sym->value); + break; + + case BT_COMPLEX: + e = gfc_complex2real (sym->value, sym->value->ts.kind); + if (e == NULL) + goto error; + break; + + case BT_INTEGER: + e = gfc_int2real (sym->value, gfc_default_real_kind); + if (e == NULL) + goto error; + break; + + default: + gfc_internal_error ("gfc_match_sym_complex_part(): Bad type"); + } + + *result = e; /* e is a scalar, real, constant expression. */ + return MATCH_YES; + +error: + gfc_error ("Error converting PARAMETER constant in complex constant at %C"); + return MATCH_ERROR; +} + + +/* Match a real or imaginary part of a complex number. */ + +static match +match_complex_part (gfc_expr **result) +{ + match m; + + m = match_sym_complex_part (result); + if (m != MATCH_NO) + return m; + + m = match_real_constant (result, 1); + if (m != MATCH_NO) + return m; + + return match_integer_constant (result, 1); +} + + +/* Try to match a complex constant. */ + +static match +match_complex_constant (gfc_expr **result) +{ + gfc_expr *e, *real, *imag; + gfc_error_buf old_error; + gfc_typespec target; + locus old_loc; + int kind; + match m; + + old_loc = gfc_current_locus; + real = imag = e = NULL; + + m = gfc_match_char ('('); + if (m != MATCH_YES) + return m; + + gfc_push_error (&old_error); + + m = match_complex_part (&real); + if (m == MATCH_NO) + { + gfc_free_error (&old_error); + goto cleanup; + } + + if (gfc_match_char (',') == MATCH_NO) + { + gfc_pop_error (&old_error); + m = MATCH_NO; + goto cleanup; + } + + /* If m is error, then something was wrong with the real part and we + assume we have a complex constant because we've seen the ','. An + ambiguous case here is the start of an iterator list of some + sort. These sort of lists are matched prior to coming here. */ + + if (m == MATCH_ERROR) + { + gfc_free_error (&old_error); + goto cleanup; + } + gfc_pop_error (&old_error); + + m = match_complex_part (&imag); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + + m = gfc_match_char (')'); + if (m == MATCH_NO) + { + /* Give the matcher for implied do-loops a chance to run. This + yields a much saner error message for (/ (i, 4=i, 6) /). */ + if (gfc_peek_ascii_char () == '=') + { + m = MATCH_ERROR; + goto cleanup; + } + else + goto syntax; + } + + if (m == MATCH_ERROR) + goto cleanup; + + /* Decide on the kind of this complex number. */ + if (real->ts.type == BT_REAL) + { + if (imag->ts.type == BT_REAL) + kind = gfc_kind_max (real, imag); + else + kind = real->ts.kind; + } + else + { + if (imag->ts.type == BT_REAL) + kind = imag->ts.kind; + else + kind = gfc_default_real_kind; + } + target.type = BT_REAL; + target.kind = kind; + target.is_c_interop = 0; + target.is_iso_c = 0; + + if (real->ts.type != BT_REAL || kind != real->ts.kind) + gfc_convert_type (real, &target, 2); + if (imag->ts.type != BT_REAL || kind != imag->ts.kind) + gfc_convert_type (imag, &target, 2); + + e = gfc_convert_complex (real, imag, kind); + e->where = gfc_current_locus; + + gfc_free_expr (real); + gfc_free_expr (imag); + + *result = e; + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in COMPLEX constant at %C"); + m = MATCH_ERROR; + +cleanup: + gfc_free_expr (e); + gfc_free_expr (real); + gfc_free_expr (imag); + gfc_current_locus = old_loc; + + return m; +} + + +/* Match constants in any of several forms. Returns nonzero for a + match, zero for no match. */ + +match +gfc_match_literal_constant (gfc_expr **result, int signflag) +{ + match m; + + m = match_complex_constant (result); + if (m != MATCH_NO) + return m; + + m = match_string_constant (result); + if (m != MATCH_NO) + return m; + + m = match_boz_constant (result); + if (m != MATCH_NO) + return m; + + m = match_real_constant (result, signflag); + if (m != MATCH_NO) + return m; + + m = match_hollerith_constant (result); + if (m != MATCH_NO) + return m; + + m = match_integer_constant (result, signflag); + if (m != MATCH_NO) + return m; + + m = match_logical_constant (result); + if (m != MATCH_NO) + return m; + + return MATCH_NO; +} + + +/* Match a single actual argument value. An actual argument is + usually an expression, but can also be a procedure name. If the + argument is a single name, it is not always possible to tell + whether the name is a dummy procedure or not. We treat these cases + by creating an argument that looks like a dummy procedure and + fixing things later during resolution. */ + +static match +match_actual_arg (gfc_expr **result) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_symtree *symtree; + locus where, w; + gfc_expr *e; + char c; + + gfc_gobble_whitespace (); + where = gfc_current_locus; + + switch (gfc_match_name (name)) + { + case MATCH_ERROR: + return MATCH_ERROR; + + case MATCH_NO: + break; + + case MATCH_YES: + w = gfc_current_locus; + gfc_gobble_whitespace (); + c = gfc_next_ascii_char (); + gfc_current_locus = w; + + if (c != ',' && c != ')') + break; + + if (gfc_find_sym_tree (name, NULL, 1, &symtree)) + break; + /* Handle error elsewhere. */ + + /* Eliminate a couple of common cases where we know we don't + have a function argument. */ + if (symtree == NULL) + { + gfc_get_sym_tree (name, NULL, &symtree); + gfc_set_sym_referenced (symtree->n.sym); + } + else + { + gfc_symbol *sym; + + sym = symtree->n.sym; + gfc_set_sym_referenced (sym); + if (sym->attr.flavor != FL_PROCEDURE + && sym->attr.flavor != FL_UNKNOWN) + break; + + if (sym->attr.in_common && !sym->attr.proc_pointer) + { + gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, + &sym->declared_at); + break; + } + + /* If the symbol is a function with itself as the result and + is being defined, then we have a variable. */ + if (sym->attr.function && sym->result == sym) + { + if (gfc_current_ns->proc_name == sym + || (gfc_current_ns->parent != NULL + && gfc_current_ns->parent->proc_name == sym)) + break; + + if (sym->attr.entry + && (sym->ns == gfc_current_ns + || sym->ns == gfc_current_ns->parent)) + { + gfc_entry_list *el = NULL; + + for (el = sym->ns->entries; el; el = el->next) + if (sym == el->sym) + break; + + if (el) + break; + } + } + } + + e = gfc_get_expr (); /* Leave it unknown for now */ + e->symtree = symtree; + e->expr_type = EXPR_VARIABLE; + e->ts.type = BT_PROCEDURE; + e->where = where; + + *result = e; + return MATCH_YES; + } + + gfc_current_locus = where; + return gfc_match_expr (result); +} + + +/* Match a keyword argument. */ + +static match +match_keyword_arg (gfc_actual_arglist *actual, gfc_actual_arglist *base) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_actual_arglist *a; + locus name_locus; + match m; + + name_locus = gfc_current_locus; + m = gfc_match_name (name); + + if (m != MATCH_YES) + goto cleanup; + if (gfc_match_char ('=') != MATCH_YES) + { + m = MATCH_NO; + goto cleanup; + } + + m = match_actual_arg (&actual->expr); + if (m != MATCH_YES) + goto cleanup; + + /* Make sure this name has not appeared yet. */ + + if (name[0] != '\0') + { + for (a = base; a; a = a->next) + if (a->name != NULL && strcmp (a->name, name) == 0) + { + gfc_error ("Keyword '%s' at %C has already appeared in the " + "current argument list", name); + return MATCH_ERROR; + } + } + + actual->name = gfc_get_string (name); + return MATCH_YES; + +cleanup: + gfc_current_locus = name_locus; + return m; +} + + +/* Match an argument list function, such as %VAL. */ + +static match +match_arg_list_function (gfc_actual_arglist *result) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + locus old_locus; + match m; + + old_locus = gfc_current_locus; + + if (gfc_match_char ('%') != MATCH_YES) + { + m = MATCH_NO; + goto cleanup; + } + + m = gfc_match ("%n (", name); + if (m != MATCH_YES) + goto cleanup; + + if (name[0] != '\0') + { + switch (name[0]) + { + case 'l': + if (strncmp (name, "loc", 3) == 0) + { + result->name = "%LOC"; + break; + } + case 'r': + if (strncmp (name, "ref", 3) == 0) + { + result->name = "%REF"; + break; + } + case 'v': + if (strncmp (name, "val", 3) == 0) + { + result->name = "%VAL"; + break; + } + default: + m = MATCH_ERROR; + goto cleanup; + } + } + + if (gfc_notify_std (GFC_STD_GNU, "Extension: argument list " + "function at %C") == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + + m = match_actual_arg (&result->expr); + if (m != MATCH_YES) + goto cleanup; + + if (gfc_match_char (')') != MATCH_YES) + { + m = MATCH_NO; + goto cleanup; + } + + return MATCH_YES; + +cleanup: + gfc_current_locus = old_locus; + return m; +} + + +/* Matches an actual argument list of a function or subroutine, from + the opening parenthesis to the closing parenthesis. The argument + list is assumed to allow keyword arguments because we don't know if + the symbol associated with the procedure has an implicit interface + or not. We make sure keywords are unique. If sub_flag is set, + we're matching the argument list of a subroutine. */ + +match +gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist **argp) +{ + gfc_actual_arglist *head, *tail; + int seen_keyword; + gfc_st_label *label; + locus old_loc; + match m; + + *argp = tail = NULL; + old_loc = gfc_current_locus; + + seen_keyword = 0; + + if (gfc_match_char ('(') == MATCH_NO) + return (sub_flag) ? MATCH_YES : MATCH_NO; + + if (gfc_match_char (')') == MATCH_YES) + return MATCH_YES; + head = NULL; + + for (;;) + { + if (head == NULL) + head = tail = gfc_get_actual_arglist (); + else + { + tail->next = gfc_get_actual_arglist (); + tail = tail->next; + } + + if (sub_flag && gfc_match_char ('*') == MATCH_YES) + { + m = gfc_match_st_label (&label); + if (m == MATCH_NO) + gfc_error ("Expected alternate return label at %C"); + if (m != MATCH_YES) + goto cleanup; + + tail->label = label; + goto next; + } + + /* After the first keyword argument is seen, the following + arguments must also have keywords. */ + if (seen_keyword) + { + m = match_keyword_arg (tail, head); + + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + { + gfc_error ("Missing keyword name in actual argument list at %C"); + goto cleanup; + } + + } + else + { + /* Try an argument list function, like %VAL. */ + m = match_arg_list_function (tail); + if (m == MATCH_ERROR) + goto cleanup; + + /* See if we have the first keyword argument. */ + if (m == MATCH_NO) + { + m = match_keyword_arg (tail, head); + if (m == MATCH_YES) + seen_keyword = 1; + if (m == MATCH_ERROR) + goto cleanup; + } + + if (m == MATCH_NO) + { + /* Try for a non-keyword argument. */ + m = match_actual_arg (&tail->expr); + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO) + goto syntax; + } + } + + + next: + if (gfc_match_char (')') == MATCH_YES) + break; + if (gfc_match_char (',') != MATCH_YES) + goto syntax; + } + + *argp = head; + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in argument list at %C"); + +cleanup: + gfc_free_actual_arglist (head); + gfc_current_locus = old_loc; + + return MATCH_ERROR; +} + + +/* Used by gfc_match_varspec() to extend the reference list by one + element. */ + +static gfc_ref * +extend_ref (gfc_expr *primary, gfc_ref *tail) +{ + if (primary->ref == NULL) + primary->ref = tail = gfc_get_ref (); + else + { + if (tail == NULL) + gfc_internal_error ("extend_ref(): Bad tail"); + tail->next = gfc_get_ref (); + tail = tail->next; + } + + return tail; +} + + +/* Match any additional specifications associated with the current + variable like member references or substrings. If equiv_flag is + set we only match stuff that is allowed inside an EQUIVALENCE + statement. sub_flag tells whether we expect a type-bound procedure found + to be a subroutine as part of CALL or a FUNCTION. */ + +match +gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_ref *substring, *tail; + gfc_component *component; + gfc_symbol *sym = primary->symtree->n.sym; + match m; + bool unknown; + + tail = NULL; + + gfc_gobble_whitespace (); + if ((equiv_flag && gfc_peek_ascii_char () == '(') || sym->attr.dimension) + { + /* In EQUIVALENCE, we don't know yet whether we are seeing + an array, character variable or array of character + variables. We'll leave the decision till resolve time. */ + tail = extend_ref (primary, tail); + tail->type = REF_ARRAY; + + m = gfc_match_array_ref (&tail->u.ar, equiv_flag ? NULL : sym->as, + equiv_flag); + if (m != MATCH_YES) + return m; + + gfc_gobble_whitespace (); + if (equiv_flag && gfc_peek_ascii_char () == '(') + { + tail = extend_ref (primary, tail); + tail->type = REF_ARRAY; + + m = gfc_match_array_ref (&tail->u.ar, NULL, equiv_flag); + if (m != MATCH_YES) + return m; + } + } + + primary->ts = sym->ts; + + if (equiv_flag) + return MATCH_YES; + + if (sym->ts.type == BT_UNKNOWN && gfc_peek_ascii_char () == '%' + && gfc_get_default_type (sym, sym->ns)->type == BT_DERIVED) + gfc_set_default_type (sym, 0, sym->ns); + + if (sym->ts.type != BT_DERIVED || gfc_match_char ('%') != MATCH_YES) + goto check_substring; + + sym = sym->ts.derived; + + for (;;) + { + gfc_try t; + gfc_symtree *tbp; + + m = gfc_match_name (name); + if (m == MATCH_NO) + gfc_error ("Expected structure component name at %C"); + if (m != MATCH_YES) + return MATCH_ERROR; + + tbp = gfc_find_typebound_proc (sym, &t, name, false); + if (tbp) + { + gfc_symbol* tbp_sym; + + if (t == FAILURE) + return MATCH_ERROR; + + gcc_assert (!tail || !tail->next); + gcc_assert (primary->expr_type == EXPR_VARIABLE); + + if (tbp->typebound->is_generic) + tbp_sym = NULL; + else + tbp_sym = tbp->typebound->u.specific->n.sym; + + primary->expr_type = EXPR_COMPCALL; + primary->value.compcall.tbp = tbp->typebound; + primary->value.compcall.name = tbp->name; + gcc_assert (primary->symtree->n.sym->attr.referenced); + if (tbp_sym) + primary->ts = tbp_sym->ts; + + m = gfc_match_actual_arglist (tbp->typebound->subroutine, + &primary->value.compcall.actual); + if (m == MATCH_ERROR) + return MATCH_ERROR; + if (m == MATCH_NO) + { + if (sub_flag) + primary->value.compcall.actual = NULL; + else + { + gfc_error ("Expected argument list at %C"); + return MATCH_ERROR; + } + } + + gfc_set_sym_referenced (tbp->n.sym); + + break; + } + + component = gfc_find_component (sym, name, false, false); + if (component == NULL) + return MATCH_ERROR; + + tail = extend_ref (primary, tail); + tail->type = REF_COMPONENT; + + tail->u.c.component = component; + tail->u.c.sym = sym; + + primary->ts = component->ts; + + if (component->as != NULL) + { + tail = extend_ref (primary, tail); + tail->type = REF_ARRAY; + + m = gfc_match_array_ref (&tail->u.ar, component->as, equiv_flag); + if (m != MATCH_YES) + return m; + } + + if (component->ts.type != BT_DERIVED + || gfc_match_char ('%') != MATCH_YES) + break; + + sym = component->ts.derived; + } + +check_substring: + unknown = false; + if (primary->ts.type == BT_UNKNOWN) + { + if (gfc_get_default_type (sym, sym->ns)->type == BT_CHARACTER) + { + gfc_set_default_type (sym, 0, sym->ns); + primary->ts = sym->ts; + unknown = true; + } + } + + if (primary->ts.type == BT_CHARACTER) + { + switch (match_substring (primary->ts.cl, equiv_flag, &substring)) + { + case MATCH_YES: + if (tail == NULL) + primary->ref = substring; + else + tail->next = substring; + + if (primary->expr_type == EXPR_CONSTANT) + primary->expr_type = EXPR_SUBSTRING; + + if (substring) + primary->ts.cl = NULL; + + break; + + case MATCH_NO: + if (unknown) + { + gfc_clear_ts (&primary->ts); + gfc_clear_ts (&sym->ts); + } + break; + + case MATCH_ERROR: + return MATCH_ERROR; + } + } + + return MATCH_YES; +} + + +/* Given an expression that is a variable, figure out what the + ultimate variable's type and attribute is, traversing the reference + structures if necessary. + + This subroutine is trickier than it looks. We start at the base + symbol and store the attribute. Component references load a + completely new attribute. + + A couple of rules come into play. Subobjects of targets are always + targets themselves. If we see a component that goes through a + pointer, then the expression must also be a target, since the + pointer is associated with something (if it isn't core will soon be + dumped). If we see a full part or section of an array, the + expression is also an array. + + We can have at most one full array reference. */ + +symbol_attribute +gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts) +{ + int dimension, pointer, allocatable, target; + symbol_attribute attr; + gfc_ref *ref; + + if (expr->expr_type != EXPR_VARIABLE) + gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable"); + + ref = expr->ref; + attr = expr->symtree->n.sym->attr; + + dimension = attr.dimension; + pointer = attr.pointer; + allocatable = attr.allocatable; + + target = attr.target; + if (pointer) + target = 1; + + if (ts != NULL && expr->ts.type == BT_UNKNOWN) + *ts = expr->symtree->n.sym->ts; + + for (; ref; ref = ref->next) + switch (ref->type) + { + case REF_ARRAY: + + switch (ref->u.ar.type) + { + case AR_FULL: + dimension = 1; + break; + + case AR_SECTION: + allocatable = pointer = 0; + dimension = 1; + break; + + case AR_ELEMENT: + allocatable = pointer = 0; + break; + + case AR_UNKNOWN: + gfc_internal_error ("gfc_variable_attr(): Bad array reference"); + } + + break; + + case REF_COMPONENT: + attr = ref->u.c.component->attr; + if (ts != NULL) + { + *ts = ref->u.c.component->ts; + /* Don't set the string length if a substring reference + follows. */ + if (ts->type == BT_CHARACTER + && ref->next && ref->next->type == REF_SUBSTRING) + ts->cl = NULL; + } + + pointer = ref->u.c.component->attr.pointer; + allocatable = ref->u.c.component->attr.allocatable; + if (pointer) + target = 1; + + break; + + case REF_SUBSTRING: + allocatable = pointer = 0; + break; + } + + attr.dimension = dimension; + attr.pointer = pointer; + attr.allocatable = allocatable; + attr.target = target; + + return attr; +} + + +/* Return the attribute from a general expression. */ + +symbol_attribute +gfc_expr_attr (gfc_expr *e) +{ + symbol_attribute attr; + + switch (e->expr_type) + { + case EXPR_VARIABLE: + attr = gfc_variable_attr (e, NULL); + break; + + case EXPR_FUNCTION: + gfc_clear_attr (&attr); + + if (e->value.function.esym != NULL) + attr = e->value.function.esym->result->attr; + + /* TODO: NULL() returns pointers. May have to take care of this + here. */ + + break; + + default: + gfc_clear_attr (&attr); + break; + } + + return attr; +} + + +/* Match a structure constructor. The initial symbol has already been + seen. */ + +typedef struct gfc_structure_ctor_component +{ + char* name; + gfc_expr* val; + locus where; + struct gfc_structure_ctor_component* next; +} +gfc_structure_ctor_component; + +#define gfc_get_structure_ctor_component() XCNEW (gfc_structure_ctor_component) + +static void +gfc_free_structure_ctor_component (gfc_structure_ctor_component *comp) +{ + gfc_free (comp->name); + gfc_free_expr (comp->val); +} + + +/* Translate the component list into the actual constructor by sorting it in + the order required; this also checks along the way that each and every + component actually has an initializer and handles default initializers + for components without explicit value given. */ +static gfc_try +build_actual_constructor (gfc_structure_ctor_component **comp_head, + gfc_constructor **ctor_head, gfc_symbol *sym) +{ + gfc_structure_ctor_component *comp_iter; + gfc_constructor *ctor_tail = NULL; + gfc_component *comp; + + for (comp = sym->components; comp; comp = comp->next) + { + gfc_structure_ctor_component **next_ptr; + gfc_expr *value = NULL; + + /* Try to find the initializer for the current component by name. */ + next_ptr = comp_head; + for (comp_iter = *comp_head; comp_iter; comp_iter = comp_iter->next) + { + if (!strcmp (comp_iter->name, comp->name)) + break; + next_ptr = &comp_iter->next; + } + + /* If an extension, try building the parent derived type by building + a value expression for the parent derived type and calling self. */ + if (!comp_iter && comp == sym->components && sym->attr.extension) + { + value = gfc_get_expr (); + value->expr_type = EXPR_STRUCTURE; + value->value.constructor = NULL; + value->ts = comp->ts; + value->where = gfc_current_locus; + + if (build_actual_constructor (comp_head, &value->value.constructor, + comp->ts.derived) == FAILURE) + { + gfc_free_expr (value); + return FAILURE; + } + *ctor_head = ctor_tail = gfc_get_constructor (); + ctor_tail->expr = value; + continue; + } + + /* If it was not found, try the default initializer if there's any; + otherwise, it's an error. */ + if (!comp_iter) + { + if (comp->initializer) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Structure" + " constructor with missing optional arguments" + " at %C") == FAILURE) + return FAILURE; + value = gfc_copy_expr (comp->initializer); + } + else + { + gfc_error ("No initializer for component '%s' given in the" + " structure constructor at %C!", comp->name); + return FAILURE; + } + } + else + value = comp_iter->val; + + /* Add the value to the constructor chain built. */ + if (ctor_tail) + { + ctor_tail->next = gfc_get_constructor (); + ctor_tail = ctor_tail->next; + } + else + *ctor_head = ctor_tail = gfc_get_constructor (); + gcc_assert (value); + ctor_tail->expr = value; + + /* Remove the entry from the component list. We don't want the expression + value to be free'd, so set it to NULL. */ + if (comp_iter) + { + *next_ptr = comp_iter->next; + comp_iter->val = NULL; + gfc_free_structure_ctor_component (comp_iter); + } + } + return SUCCESS; +} + +match +gfc_match_structure_constructor (gfc_symbol *sym, gfc_expr **result, + bool parent) +{ + gfc_structure_ctor_component *comp_tail, *comp_head, *comp_iter; + gfc_constructor *ctor_head, *ctor_tail; + gfc_component *comp; /* Is set NULL when named component is first seen */ + gfc_expr *e; + locus where; + match m; + const char* last_name = NULL; + + comp_tail = comp_head = NULL; + ctor_head = ctor_tail = NULL; + + if (!parent && gfc_match_char ('(') != MATCH_YES) + goto syntax; + + where = gfc_current_locus; + + gfc_find_component (sym, NULL, false, true); + + /* Check that we're not about to construct an ABSTRACT type. */ + if (!parent && sym->attr.abstract) + { + gfc_error ("Can't construct ABSTRACT type '%s' at %C", sym->name); + return MATCH_ERROR; + } + + /* Match the component list and store it in a list together with the + corresponding component names. Check for empty argument list first. */ + if (gfc_match_char (')') != MATCH_YES) + { + comp = sym->components; + do + { + gfc_component *this_comp = NULL; + + if (!comp_head) + comp_tail = comp_head = gfc_get_structure_ctor_component (); + else + { + comp_tail->next = gfc_get_structure_ctor_component (); + comp_tail = comp_tail->next; + } + comp_tail->name = XCNEWVEC (char, GFC_MAX_SYMBOL_LEN + 1); + comp_tail->val = NULL; + comp_tail->where = gfc_current_locus; + + /* Try matching a component name. */ + if (gfc_match_name (comp_tail->name) == MATCH_YES + && gfc_match_char ('=') == MATCH_YES) + { + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Structure" + " constructor with named arguments at %C") + == FAILURE) + goto cleanup; + + last_name = comp_tail->name; + comp = NULL; + } + else + { + /* Components without name are not allowed after the first named + component initializer! */ + if (!comp) + { + if (last_name) + gfc_error ("Component initializer without name after" + " component named %s at %C!", last_name); + else if (!parent) + gfc_error ("Too many components in structure constructor at" + " %C!"); + goto cleanup; + } + + gfc_current_locus = comp_tail->where; + strncpy (comp_tail->name, comp->name, GFC_MAX_SYMBOL_LEN + 1); + } + + /* Find the current component in the structure definition and check + its access is not private. */ + if (comp) + this_comp = gfc_find_component (sym, comp->name, false, false); + else + { + this_comp = gfc_find_component (sym, + (const char *)comp_tail->name, + false, false); + comp = NULL; /* Reset needed! */ + } + + /* Here we can check if a component name is given which does not + correspond to any component of the defined structure. */ + if (!this_comp) + goto cleanup; + + /* Check if this component is already given a value. */ + for (comp_iter = comp_head; comp_iter != comp_tail; + comp_iter = comp_iter->next) + { + gcc_assert (comp_iter); + if (!strcmp (comp_iter->name, comp_tail->name)) + { + gfc_error ("Component '%s' is initialized twice in the" + " structure constructor at %C!", comp_tail->name); + goto cleanup; + } + } + + /* Match the current initializer expression. */ + m = gfc_match_expr (&comp_tail->val); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + + /* If not explicitly a parent constructor, gather up the components + and build one. */ + if (comp && comp == sym->components + && sym->attr.extension + && (comp_tail->val->ts.type != BT_DERIVED + || + comp_tail->val->ts.derived != this_comp->ts.derived)) + { + gfc_current_locus = where; + gfc_free_expr (comp_tail->val); + comp_tail->val = NULL; + + m = gfc_match_structure_constructor (comp->ts.derived, + &comp_tail->val, true); + if (m == MATCH_NO) + goto syntax; + if (m == MATCH_ERROR) + goto cleanup; + } + + if (comp) + comp = comp->next; + + if (parent && !comp) + break; + } + + while (gfc_match_char (',') == MATCH_YES); + + if (!parent && gfc_match_char (')') != MATCH_YES) + goto syntax; + } + + if (build_actual_constructor (&comp_head, &ctor_head, sym) == FAILURE) + goto cleanup; + + /* No component should be left, as this should have caused an error in the + loop constructing the component-list (name that does not correspond to any + component in the structure definition). */ + if (comp_head && sym->attr.extension) + { + for (comp_iter = comp_head; comp_iter; comp_iter = comp_iter->next) + { + gfc_error ("component '%s' at %L has already been set by a " + "parent derived type constructor", comp_iter->name, + &comp_iter->where); + } + goto cleanup; + } + else + gcc_assert (!comp_head); + + e = gfc_get_expr (); + + e->expr_type = EXPR_STRUCTURE; + + e->ts.type = BT_DERIVED; + e->ts.derived = sym; + e->where = where; + + e->value.constructor = ctor_head; + + *result = e; + return MATCH_YES; + +syntax: + gfc_error ("Syntax error in structure constructor at %C"); + +cleanup: + for (comp_iter = comp_head; comp_iter; ) + { + gfc_structure_ctor_component *next = comp_iter->next; + gfc_free_structure_ctor_component (comp_iter); + comp_iter = next; + } + gfc_free_constructor (ctor_head); + return MATCH_ERROR; +} + + +/* If the symbol is an implicit do loop index and implicitly typed, + it should not be host associated. Provide a symtree from the + current namespace. */ +static match +check_for_implicit_index (gfc_symtree **st, gfc_symbol **sym) +{ + if ((*sym)->attr.flavor == FL_VARIABLE + && (*sym)->ns != gfc_current_ns + && (*sym)->attr.implied_index + && (*sym)->attr.implicit_type + && !(*sym)->attr.use_assoc) + { + int i; + i = gfc_get_sym_tree ((*sym)->name, NULL, st); + if (i) + return MATCH_ERROR; + *sym = (*st)->n.sym; + } + return MATCH_YES; +} + + +/* Matches a variable name followed by anything that might follow it-- + array reference, argument list of a function, etc. */ + +match +gfc_match_rvalue (gfc_expr **result) +{ + gfc_actual_arglist *actual_arglist; + char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1]; + gfc_state_data *st; + gfc_symbol *sym; + gfc_symtree *symtree; + locus where, old_loc; + gfc_expr *e; + match m, m2; + int i; + gfc_typespec *ts; + bool implicit_char; + gfc_ref *ref; + + m = gfc_match_name (name); + if (m != MATCH_YES) + return m; + + if (gfc_find_state (COMP_INTERFACE) == SUCCESS + && !gfc_current_ns->has_import_set) + i = gfc_get_sym_tree (name, NULL, &symtree); + else + i = gfc_get_ha_sym_tree (name, &symtree); + + if (i) + return MATCH_ERROR; + + sym = symtree->n.sym; + e = NULL; + where = gfc_current_locus; + + /* If this is an implicit do loop index and implicitly typed, + it should not be host associated. */ + m = check_for_implicit_index (&symtree, &sym); + if (m != MATCH_YES) + return m; + + gfc_set_sym_referenced (sym); + sym->attr.implied_index = 0; + + if (sym->attr.function && sym->result == sym) + { + /* See if this is a directly recursive function call. */ + gfc_gobble_whitespace (); + if (sym->attr.recursive + && gfc_peek_ascii_char () == '(' + && gfc_current_ns->proc_name == sym + && !sym->attr.dimension) + { + gfc_error ("'%s' at %C is the name of a recursive function " + "and so refers to the result variable. Use an " + "explicit RESULT variable for direct recursion " + "(12.5.2.1)", sym->name); + return MATCH_ERROR; + } + + if (gfc_current_ns->proc_name == sym + || (gfc_current_ns->parent != NULL + && gfc_current_ns->parent->proc_name == sym)) + goto variable; + + if (sym->attr.entry + && (sym->ns == gfc_current_ns + || sym->ns == gfc_current_ns->parent)) + { + gfc_entry_list *el = NULL; + + for (el = sym->ns->entries; el; el = el->next) + if (sym == el->sym) + goto variable; + } + } + + if (gfc_matching_procptr_assignment) + goto procptr0; + + if (sym->attr.function || sym->attr.external || sym->attr.intrinsic) + goto function0; + + if (sym->attr.generic) + goto generic_function; + + switch (sym->attr.flavor) + { + case FL_VARIABLE: + variable: + e = gfc_get_expr (); + + e->expr_type = EXPR_VARIABLE; + e->symtree = symtree; + + m = gfc_match_varspec (e, 0, false); + break; + + case FL_PARAMETER: + /* A statement of the form "REAL, parameter :: a(0:10) = 1" will + end up here. Unfortunately, sym->value->expr_type is set to + EXPR_CONSTANT, and so the if () branch would be followed without + the !sym->as check. */ + if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as) + e = gfc_copy_expr (sym->value); + else + { + e = gfc_get_expr (); + e->expr_type = EXPR_VARIABLE; + } + + e->symtree = symtree; + m = gfc_match_varspec (e, 0, false); + + if (sym->ts.is_c_interop || sym->ts.is_iso_c) + break; + + /* Variable array references to derived type parameters cause + all sorts of headaches in simplification. Treating such + expressions as variable works just fine for all array + references. */ + if (sym->value && sym->ts.type == BT_DERIVED && e->ref) + { + for (ref = e->ref; ref; ref = ref->next) + if (ref->type == REF_ARRAY) + break; + + if (ref == NULL || ref->u.ar.type == AR_FULL) + break; + + ref = e->ref; + e->ref = NULL; + gfc_free_expr (e); + e = gfc_get_expr (); + e->expr_type = EXPR_VARIABLE; + e->symtree = symtree; + e->ref = ref; + } + + break; + + case FL_DERIVED: + sym = gfc_use_derived (sym); + if (sym == NULL) + m = MATCH_ERROR; + else + m = gfc_match_structure_constructor (sym, &e, false); + break; + + /* If we're here, then the name is known to be the name of a + procedure, yet it is not sure to be the name of a function. */ + case FL_PROCEDURE: + + /* Procedure Pointer Assignments. */ + procptr0: + if (gfc_matching_procptr_assignment) + { + gfc_gobble_whitespace (); + if (gfc_peek_ascii_char () == '(') + /* Parse functions returning a procptr. */ + goto function0; + + if (gfc_is_intrinsic (sym, 0, gfc_current_locus) + || gfc_is_intrinsic (sym, 1, gfc_current_locus)) + sym->attr.intrinsic = 1; + e = gfc_get_expr (); + e->expr_type = EXPR_VARIABLE; + e->symtree = symtree; + m = gfc_match_varspec (e, 0, false); + break; + } + + if (sym->attr.subroutine) + { + gfc_error ("Unexpected use of subroutine name '%s' at %C", + sym->name); + m = MATCH_ERROR; + break; + } + + /* At this point, the name has to be a non-statement function. + If the name is the same as the current function being + compiled, then we have a variable reference (to the function + result) if the name is non-recursive. */ + + st = gfc_enclosing_unit (NULL); + + if (st != NULL && st->state == COMP_FUNCTION + && st->sym == sym + && !sym->attr.recursive) + { + e = gfc_get_expr (); + e->symtree = symtree; + e->expr_type = EXPR_VARIABLE; + + m = gfc_match_varspec (e, 0, false); + break; + } + + /* Match a function reference. */ + function0: + m = gfc_match_actual_arglist (0, &actual_arglist); + if (m == MATCH_NO) + { + if (sym->attr.proc == PROC_ST_FUNCTION) + gfc_error ("Statement function '%s' requires argument list at %C", + sym->name); + else + gfc_error ("Function '%s' requires an argument list at %C", + sym->name); + + m = MATCH_ERROR; + break; + } + + if (m != MATCH_YES) + { + m = MATCH_ERROR; + break; + } + + gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */ + sym = symtree->n.sym; + + e = gfc_get_expr (); + e->symtree = symtree; + e->expr_type = EXPR_FUNCTION; + e->value.function.actual = actual_arglist; + e->where = gfc_current_locus; + + if (sym->as != NULL) + e->rank = sym->as->rank; + + if (!sym->attr.function + && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE) + { + m = MATCH_ERROR; + break; + } + + /* Check here for the existence of at least one argument for the + iso_c_binding functions C_LOC, C_FUNLOC, and C_ASSOCIATED. The + argument(s) given will be checked in gfc_iso_c_func_interface, + during resolution of the function call. */ + if (sym->attr.is_iso_c == 1 + && (sym->from_intmod == INTMOD_ISO_C_BINDING + && (sym->intmod_sym_id == ISOCBINDING_LOC + || sym->intmod_sym_id == ISOCBINDING_FUNLOC + || sym->intmod_sym_id == ISOCBINDING_ASSOCIATED))) + { + /* make sure we were given a param */ + if (actual_arglist == NULL) + { + gfc_error ("Missing argument to '%s' at %C", sym->name); + m = MATCH_ERROR; + break; + } + } + + if (sym->result == NULL) + sym->result = sym; + + m = MATCH_YES; + break; + + case FL_UNKNOWN: + + /* Special case for derived type variables that get their types + via an IMPLICIT statement. This can't wait for the + resolution phase. */ + + if (gfc_peek_ascii_char () == '%' + && sym->ts.type == BT_UNKNOWN + && gfc_get_default_type (sym, sym->ns)->type == BT_DERIVED) + gfc_set_default_type (sym, 0, sym->ns); + + /* If the symbol has a dimension attribute, the expression is a + variable. */ + + if (sym->attr.dimension) + { + if (gfc_add_flavor (&sym->attr, FL_VARIABLE, + sym->name, NULL) == FAILURE) + { + m = MATCH_ERROR; + break; + } + + e = gfc_get_expr (); + e->symtree = symtree; + e->expr_type = EXPR_VARIABLE; + m = gfc_match_varspec (e, 0, false); + break; + } + + /* Name is not an array, so we peek to see if a '(' implies a + function call or a substring reference. Otherwise the + variable is just a scalar. */ + + gfc_gobble_whitespace (); + if (gfc_peek_ascii_char () != '(') + { + /* Assume a scalar variable */ + e = gfc_get_expr (); + e->symtree = symtree; + e->expr_type = EXPR_VARIABLE; + + if (gfc_add_flavor (&sym->attr, FL_VARIABLE, + sym->name, NULL) == FAILURE) + { + m = MATCH_ERROR; + break; + } + + /*FIXME:??? gfc_match_varspec does set this for us: */ + e->ts = sym->ts; + m = gfc_match_varspec (e, 0, false); + break; + } + + /* See if this is a function reference with a keyword argument + as first argument. We do this because otherwise a spurious + symbol would end up in the symbol table. */ + + old_loc = gfc_current_locus; + m2 = gfc_match (" ( %n =", argname); + gfc_current_locus = old_loc; + + e = gfc_get_expr (); + e->symtree = symtree; + + if (m2 != MATCH_YES) + { + /* Try to figure out whether we're dealing with a character type. + We're peeking ahead here, because we don't want to call + match_substring if we're dealing with an implicitly typed + non-character variable. */ + implicit_char = false; + if (sym->ts.type == BT_UNKNOWN) + { + ts = gfc_get_default_type (sym,NULL); + if (ts->type == BT_CHARACTER) + implicit_char = true; + } + + /* See if this could possibly be a substring reference of a name + that we're not sure is a variable yet. */ + + if ((implicit_char || sym->ts.type == BT_CHARACTER) + && match_substring (sym->ts.cl, 0, &e->ref) == MATCH_YES) + { + + e->expr_type = EXPR_VARIABLE; + + if (sym->attr.flavor != FL_VARIABLE + && gfc_add_flavor (&sym->attr, FL_VARIABLE, + sym->name, NULL) == FAILURE) + { + m = MATCH_ERROR; + break; + } + + if (sym->ts.type == BT_UNKNOWN + && gfc_set_default_type (sym, 1, NULL) == FAILURE) + { + m = MATCH_ERROR; + break; + } + + e->ts = sym->ts; + if (e->ref) + e->ts.cl = NULL; + m = MATCH_YES; + break; + } + } + + /* Give up, assume we have a function. */ + + gfc_get_sym_tree (name, NULL, &symtree); /* Can't fail */ + sym = symtree->n.sym; + e->expr_type = EXPR_FUNCTION; + + if (!sym->attr.function + && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE) + { + m = MATCH_ERROR; + break; + } + + sym->result = sym; + + m = gfc_match_actual_arglist (0, &e->value.function.actual); + if (m == MATCH_NO) + gfc_error ("Missing argument list in function '%s' at %C", sym->name); + + if (m != MATCH_YES) + { + m = MATCH_ERROR; + break; + } + + /* If our new function returns a character, array or structure + type, it might have subsequent references. */ + + m = gfc_match_varspec (e, 0, false); + if (m == MATCH_NO) + m = MATCH_YES; + + break; + + generic_function: + gfc_get_sym_tree (name, NULL, &symtree); /* Can't fail */ + + e = gfc_get_expr (); + e->symtree = symtree; + e->expr_type = EXPR_FUNCTION; + + m = gfc_match_actual_arglist (0, &e->value.function.actual); + break; + + default: + gfc_error ("Symbol at %C is not appropriate for an expression"); + return MATCH_ERROR; + } + + if (m == MATCH_YES) + { + e->where = where; + *result = e; + } + else + gfc_free_expr (e); + + return m; +} + + +/* Match a variable, i.e. something that can be assigned to. This + starts as a symbol, can be a structure component or an array + reference. It can be a function if the function doesn't have a + separate RESULT variable. If the symbol has not been previously + seen, we assume it is a variable. + + This function is called by two interface functions: + gfc_match_variable, which has host_flag = 1, and + gfc_match_equiv_variable, with host_flag = 0, to restrict the + match of the symbol to the local scope. */ + +static match +match_variable (gfc_expr **result, int equiv_flag, int host_flag) +{ + gfc_symbol *sym; + gfc_symtree *st; + gfc_expr *expr; + locus where; + match m; + + /* Since nothing has any business being an lvalue in a module + specification block, an interface block or a contains section, + we force the changed_symbols mechanism to work by setting + host_flag to 0. This prevents valid symbols that have the name + of keywords, such as 'end', being turned into variables by + failed matching to assignments for, e.g., END INTERFACE. */ + if (gfc_current_state () == COMP_MODULE + || gfc_current_state () == COMP_INTERFACE + || gfc_current_state () == COMP_CONTAINS) + host_flag = 0; + + where = gfc_current_locus; + m = gfc_match_sym_tree (&st, host_flag); + if (m != MATCH_YES) + return m; + + sym = st->n.sym; + + /* If this is an implicit do loop index and implicitly typed, + it should not be host associated. */ + m = check_for_implicit_index (&st, &sym); + if (m != MATCH_YES) + return m; + + sym->attr.implied_index = 0; + + gfc_set_sym_referenced (sym); + switch (sym->attr.flavor) + { + case FL_VARIABLE: + if (sym->attr.is_protected && sym->attr.use_assoc) + { + gfc_error ("Assigning to PROTECTED variable at %C"); + return MATCH_ERROR; + } + break; + + case FL_UNKNOWN: + { + sym_flavor flavor = FL_UNKNOWN; + + gfc_gobble_whitespace (); + + if (sym->attr.external || sym->attr.procedure + || sym->attr.function || sym->attr.subroutine) + flavor = FL_PROCEDURE; + + /* If it is not a procedure, is not typed and is host associated, + we cannot give it a flavor yet. */ + else if (sym->ns == gfc_current_ns->parent + && sym->ts.type == BT_UNKNOWN) + break; + + /* These are definitive indicators that this is a variable. */ + else if (gfc_peek_ascii_char () != '(' || sym->ts.type != BT_UNKNOWN + || sym->attr.pointer || sym->as != NULL) + flavor = FL_VARIABLE; + + if (flavor != FL_UNKNOWN + && gfc_add_flavor (&sym->attr, flavor, sym->name, NULL) == FAILURE) + return MATCH_ERROR; + } + break; + + case FL_PARAMETER: + if (equiv_flag) + gfc_error ("Named constant at %C in an EQUIVALENCE"); + else + gfc_error ("Cannot assign to a named constant at %C"); + return MATCH_ERROR; + break; + + case FL_PROCEDURE: + /* Check for a nonrecursive function result variable. */ + if (sym->attr.function + && !sym->attr.external + && sym->result == sym + && ((sym == gfc_current_ns->proc_name + && sym == gfc_current_ns->proc_name->result) + || (gfc_current_ns->parent + && sym == gfc_current_ns->parent->proc_name->result) + || (sym->attr.entry + && sym->ns == gfc_current_ns) + || (sym->attr.entry + && sym->ns == gfc_current_ns->parent))) + { + /* If a function result is a derived type, then the derived + type may still have to be resolved. */ + + if (sym->ts.type == BT_DERIVED + && gfc_use_derived (sym->ts.derived) == NULL) + return MATCH_ERROR; + break; + } + + if (sym->attr.proc_pointer) + break; + + /* Fall through to error */ + + default: + gfc_error ("'%s' at %C is not a variable", sym->name); + return MATCH_ERROR; + } + + /* Special case for derived type variables that get their types + via an IMPLICIT statement. This can't wait for the + resolution phase. */ + + { + gfc_namespace * implicit_ns; + + if (gfc_current_ns->proc_name == sym) + implicit_ns = gfc_current_ns; + else + implicit_ns = sym->ns; + + if (gfc_peek_ascii_char () == '%' + && sym->ts.type == BT_UNKNOWN + && gfc_get_default_type (sym, implicit_ns)->type == BT_DERIVED) + gfc_set_default_type (sym, 0, implicit_ns); + } + + expr = gfc_get_expr (); + + expr->expr_type = EXPR_VARIABLE; + expr->symtree = st; + expr->ts = sym->ts; + expr->where = where; + + /* Now see if we have to do more. */ + m = gfc_match_varspec (expr, equiv_flag, false); + if (m != MATCH_YES) + { + gfc_free_expr (expr); + return m; + } + + *result = expr; + return MATCH_YES; +} + + +match +gfc_match_variable (gfc_expr **result, int equiv_flag) +{ + return match_variable (result, equiv_flag, 1); +} + + +match +gfc_match_equiv_variable (gfc_expr **result) +{ + return match_variable (result, 1, 0); +} + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/resolve.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/resolve.c new file mode 100644 index 0000000000..47f0a7abc8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/resolve.c @@ -0,0 +1,10482 @@ +/* Perform type resolution on the various structures. + Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "flags.h" +#include "gfortran.h" +#include "obstack.h" +#include "bitmap.h" +#include "arith.h" /* For gfc_compare_expr(). */ +#include "dependency.h" +#include "data.h" +#include "target-memory.h" /* for gfc_simplify_transfer */ + +/* Types used in equivalence statements. */ + +typedef enum seq_type +{ + SEQ_NONDEFAULT, SEQ_NUMERIC, SEQ_CHARACTER, SEQ_MIXED +} +seq_type; + +/* Stack to keep track of the nesting of blocks as we move through the + code. See resolve_branch() and resolve_code(). */ + +typedef struct code_stack +{ + struct gfc_code *head, *current, *tail; + struct code_stack *prev; + + /* This bitmap keeps track of the targets valid for a branch from + inside this block. */ + bitmap reachable_labels; +} +code_stack; + +static code_stack *cs_base = NULL; + + +/* Nonzero if we're inside a FORALL block. */ + +static int forall_flag; + +/* Nonzero if we're inside a OpenMP WORKSHARE or PARALLEL WORKSHARE block. */ + +static int omp_workshare_flag; + +/* Nonzero if we are processing a formal arglist. The corresponding function + resets the flag each time that it is read. */ +static int formal_arg_flag = 0; + +/* True if we are resolving a specification expression. */ +static int specification_expr = 0; + +/* The id of the last entry seen. */ +static int current_entry_id; + +/* We use bitmaps to determine if a branch target is valid. */ +static bitmap_obstack labels_obstack; + +int +gfc_is_formal_arg (void) +{ + return formal_arg_flag; +} + + +/* Ensure a typespec used is valid; for instance, TYPE(t) is invalid if t is + an ABSTRACT derived-type. If where is not NULL, an error message with that + locus is printed, optionally using name. */ + +static gfc_try +resolve_typespec_used (gfc_typespec* ts, locus* where, const char* name) +{ + if (ts->type == BT_DERIVED && ts->derived->attr.abstract) + { + if (where) + { + if (name) + gfc_error ("'%s' at %L is of the ABSTRACT type '%s'", + name, where, ts->derived->name); + else + gfc_error ("ABSTRACT type '%s' used at %L", + ts->derived->name, where); + } + + return FAILURE; + } + + return SUCCESS; +} + + +/* Resolve types of formal argument lists. These have to be done early so that + the formal argument lists of module procedures can be copied to the + containing module before the individual procedures are resolved + individually. We also resolve argument lists of procedures in interface + blocks because they are self-contained scoping units. + + Since a dummy argument cannot be a non-dummy procedure, the only + resort left for untyped names are the IMPLICIT types. */ + +static void +resolve_formal_arglist (gfc_symbol *proc) +{ + gfc_formal_arglist *f; + gfc_symbol *sym; + int i; + + if (proc->result != NULL) + sym = proc->result; + else + sym = proc; + + if (gfc_elemental (proc) + || sym->attr.pointer || sym->attr.allocatable + || (sym->as && sym->as->rank > 0)) + { + proc->attr.always_explicit = 1; + sym->attr.always_explicit = 1; + } + + formal_arg_flag = 1; + + for (f = proc->formal; f; f = f->next) + { + sym = f->sym; + + if (sym == NULL) + { + /* Alternate return placeholder. */ + if (gfc_elemental (proc)) + gfc_error ("Alternate return specifier in elemental subroutine " + "'%s' at %L is not allowed", proc->name, + &proc->declared_at); + if (proc->attr.function) + gfc_error ("Alternate return specifier in function " + "'%s' at %L is not allowed", proc->name, + &proc->declared_at); + continue; + } + + if (sym->attr.if_source != IFSRC_UNKNOWN) + resolve_formal_arglist (sym); + + if (sym->attr.subroutine || sym->attr.external || sym->attr.intrinsic) + { + if (gfc_pure (proc) && !gfc_pure (sym)) + { + gfc_error ("Dummy procedure '%s' of PURE procedure at %L must " + "also be PURE", sym->name, &sym->declared_at); + continue; + } + + if (gfc_elemental (proc)) + { + gfc_error ("Dummy procedure at %L not allowed in ELEMENTAL " + "procedure", &sym->declared_at); + continue; + } + + if (sym->attr.function + && sym->ts.type == BT_UNKNOWN + && sym->attr.intrinsic) + { + gfc_intrinsic_sym *isym; + isym = gfc_find_function (sym->name); + if (isym == NULL || !isym->specific) + { + gfc_error ("Unable to find a specific INTRINSIC procedure " + "for the reference '%s' at %L", sym->name, + &sym->declared_at); + } + sym->ts = isym->ts; + } + + continue; + } + + if (sym->ts.type == BT_UNKNOWN) + { + if (!sym->attr.function || sym->result == sym) + gfc_set_default_type (sym, 1, sym->ns); + } + + gfc_resolve_array_spec (sym->as, 0); + + /* We can't tell if an array with dimension (:) is assumed or deferred + shape until we know if it has the pointer or allocatable attributes. + */ + if (sym->as && sym->as->rank > 0 && sym->as->type == AS_DEFERRED + && !(sym->attr.pointer || sym->attr.allocatable)) + { + sym->as->type = AS_ASSUMED_SHAPE; + for (i = 0; i < sym->as->rank; i++) + sym->as->lower[i] = gfc_int_expr (1); + } + + if ((sym->as && sym->as->rank > 0 && sym->as->type == AS_ASSUMED_SHAPE) + || sym->attr.pointer || sym->attr.allocatable || sym->attr.target + || sym->attr.optional) + { + proc->attr.always_explicit = 1; + if (proc->result) + proc->result->attr.always_explicit = 1; + } + + /* If the flavor is unknown at this point, it has to be a variable. + A procedure specification would have already set the type. */ + + if (sym->attr.flavor == FL_UNKNOWN) + gfc_add_flavor (&sym->attr, FL_VARIABLE, sym->name, &sym->declared_at); + + if (gfc_pure (proc) && !sym->attr.pointer + && sym->attr.flavor != FL_PROCEDURE) + { + if (proc->attr.function && sym->attr.intent != INTENT_IN) + gfc_error ("Argument '%s' of pure function '%s' at %L must be " + "INTENT(IN)", sym->name, proc->name, + &sym->declared_at); + + if (proc->attr.subroutine && sym->attr.intent == INTENT_UNKNOWN) + gfc_error ("Argument '%s' of pure subroutine '%s' at %L must " + "have its INTENT specified", sym->name, proc->name, + &sym->declared_at); + } + + if (gfc_elemental (proc)) + { + if (sym->as != NULL) + { + gfc_error ("Argument '%s' of elemental procedure at %L must " + "be scalar", sym->name, &sym->declared_at); + continue; + } + + if (sym->attr.pointer) + { + gfc_error ("Argument '%s' of elemental procedure at %L cannot " + "have the POINTER attribute", sym->name, + &sym->declared_at); + continue; + } + + if (sym->attr.flavor == FL_PROCEDURE) + { + gfc_error ("Dummy procedure '%s' not allowed in elemental " + "procedure '%s' at %L", sym->name, proc->name, + &sym->declared_at); + continue; + } + } + + /* Each dummy shall be specified to be scalar. */ + if (proc->attr.proc == PROC_ST_FUNCTION) + { + if (sym->as != NULL) + { + gfc_error ("Argument '%s' of statement function at %L must " + "be scalar", sym->name, &sym->declared_at); + continue; + } + + if (sym->ts.type == BT_CHARACTER) + { + gfc_charlen *cl = sym->ts.cl; + if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT) + { + gfc_error ("Character-valued argument '%s' of statement " + "function at %L must have constant length", + sym->name, &sym->declared_at); + continue; + } + } + } + } + formal_arg_flag = 0; +} + + +/* Work function called when searching for symbols that have argument lists + associated with them. */ + +static void +find_arglists (gfc_symbol *sym) +{ + if (sym->attr.if_source == IFSRC_UNKNOWN || sym->ns != gfc_current_ns) + return; + + resolve_formal_arglist (sym); +} + + +/* Given a namespace, resolve all formal argument lists within the namespace. + */ + +static void +resolve_formal_arglists (gfc_namespace *ns) +{ + if (ns == NULL) + return; + + gfc_traverse_ns (ns, find_arglists); +} + + +static void +resolve_contained_fntype (gfc_symbol *sym, gfc_namespace *ns) +{ + gfc_try t; + + /* If this namespace is not a function or an entry master function, + ignore it. */ + if (! sym || !(sym->attr.function || sym->attr.flavor == FL_VARIABLE) + || sym->attr.entry_master) + return; + + /* Try to find out of what the return type is. */ + if (sym->result->ts.type == BT_UNKNOWN) + { + t = gfc_set_default_type (sym->result, 0, ns); + + if (t == FAILURE && !sym->result->attr.untyped) + { + if (sym->result == sym) + gfc_error ("Contained function '%s' at %L has no IMPLICIT type", + sym->name, &sym->declared_at); + else + gfc_error ("Result '%s' of contained function '%s' at %L has " + "no IMPLICIT type", sym->result->name, sym->name, + &sym->result->declared_at); + sym->result->attr.untyped = 1; + } + } + + /* Fortran 95 Draft Standard, page 51, Section 5.1.1.5, on the Character + type, lists the only ways a character length value of * can be used: + dummy arguments of procedures, named constants, and function results + in external functions. Internal function results are not on that list; + ergo, not permitted. */ + + if (sym->result->ts.type == BT_CHARACTER) + { + gfc_charlen *cl = sym->result->ts.cl; + if (!cl || !cl->length) + gfc_error ("Character-valued internal function '%s' at %L must " + "not be assumed length", sym->name, &sym->declared_at); + } +} + + +/* Add NEW_ARGS to the formal argument list of PROC, taking care not to + introduce duplicates. */ + +static void +merge_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args) +{ + gfc_formal_arglist *f, *new_arglist; + gfc_symbol *new_sym; + + for (; new_args != NULL; new_args = new_args->next) + { + new_sym = new_args->sym; + /* See if this arg is already in the formal argument list. */ + for (f = proc->formal; f; f = f->next) + { + if (new_sym == f->sym) + break; + } + + if (f) + continue; + + /* Add a new argument. Argument order is not important. */ + new_arglist = gfc_get_formal_arglist (); + new_arglist->sym = new_sym; + new_arglist->next = proc->formal; + proc->formal = new_arglist; + } +} + + +/* Flag the arguments that are not present in all entries. */ + +static void +check_argument_lists (gfc_symbol *proc, gfc_formal_arglist *new_args) +{ + gfc_formal_arglist *f, *head; + head = new_args; + + for (f = proc->formal; f; f = f->next) + { + if (f->sym == NULL) + continue; + + for (new_args = head; new_args; new_args = new_args->next) + { + if (new_args->sym == f->sym) + break; + } + + if (new_args) + continue; + + f->sym->attr.not_always_present = 1; + } +} + + +/* Resolve alternate entry points. If a symbol has multiple entry points we + create a new master symbol for the main routine, and turn the existing + symbol into an entry point. */ + +static void +resolve_entries (gfc_namespace *ns) +{ + gfc_namespace *old_ns; + gfc_code *c; + gfc_symbol *proc; + gfc_entry_list *el; + char name[GFC_MAX_SYMBOL_LEN + 1]; + static int master_count = 0; + + if (ns->proc_name == NULL) + return; + + /* No need to do anything if this procedure doesn't have alternate entry + points. */ + if (!ns->entries) + return; + + /* We may already have resolved alternate entry points. */ + if (ns->proc_name->attr.entry_master) + return; + + /* If this isn't a procedure something has gone horribly wrong. */ + gcc_assert (ns->proc_name->attr.flavor == FL_PROCEDURE); + + /* Remember the current namespace. */ + old_ns = gfc_current_ns; + + gfc_current_ns = ns; + + /* Add the main entry point to the list of entry points. */ + el = gfc_get_entry_list (); + el->sym = ns->proc_name; + el->id = 0; + el->next = ns->entries; + ns->entries = el; + ns->proc_name->attr.entry = 1; + + /* If it is a module function, it needs to be in the right namespace + so that gfc_get_fake_result_decl can gather up the results. The + need for this arose in get_proc_name, where these beasts were + left in their own namespace, to keep prior references linked to + the entry declaration.*/ + if (ns->proc_name->attr.function + && ns->parent && ns->parent->proc_name->attr.flavor == FL_MODULE) + el->sym->ns = ns; + + /* Do the same for entries where the master is not a module + procedure. These are retained in the module namespace because + of the module procedure declaration. */ + for (el = el->next; el; el = el->next) + if (el->sym->ns->proc_name->attr.flavor == FL_MODULE + && el->sym->attr.mod_proc) + el->sym->ns = ns; + el = ns->entries; + + /* Add an entry statement for it. */ + c = gfc_get_code (); + c->op = EXEC_ENTRY; + c->ext.entry = el; + c->next = ns->code; + ns->code = c; + + /* Create a new symbol for the master function. */ + /* Give the internal function a unique name (within this file). + Also include the function name so the user has some hope of figuring + out what is going on. */ + snprintf (name, GFC_MAX_SYMBOL_LEN, "master.%d.%s", + master_count++, ns->proc_name->name); + gfc_get_ha_symbol (name, &proc); + gcc_assert (proc != NULL); + + gfc_add_procedure (&proc->attr, PROC_INTERNAL, proc->name, NULL); + if (ns->proc_name->attr.subroutine) + gfc_add_subroutine (&proc->attr, proc->name, NULL); + else + { + gfc_symbol *sym; + gfc_typespec *ts, *fts; + gfc_array_spec *as, *fas; + gfc_add_function (&proc->attr, proc->name, NULL); + proc->result = proc; + fas = ns->entries->sym->as; + fas = fas ? fas : ns->entries->sym->result->as; + fts = &ns->entries->sym->result->ts; + if (fts->type == BT_UNKNOWN) + fts = gfc_get_default_type (ns->entries->sym->result, NULL); + for (el = ns->entries->next; el; el = el->next) + { + ts = &el->sym->result->ts; + as = el->sym->as; + as = as ? as : el->sym->result->as; + if (ts->type == BT_UNKNOWN) + ts = gfc_get_default_type (el->sym->result, NULL); + + if (! gfc_compare_types (ts, fts) + || (el->sym->result->attr.dimension + != ns->entries->sym->result->attr.dimension) + || (el->sym->result->attr.pointer + != ns->entries->sym->result->attr.pointer)) + break; + else if (as && fas && ns->entries->sym->result != el->sym->result + && gfc_compare_array_spec (as, fas) == 0) + gfc_error ("Function %s at %L has entries with mismatched " + "array specifications", ns->entries->sym->name, + &ns->entries->sym->declared_at); + /* The characteristics need to match and thus both need to have + the same string length, i.e. both len=*, or both len=4. + Having both len= is also possible, but difficult to + check at compile time. */ + else if (ts->type == BT_CHARACTER && ts->cl && fts->cl + && (((ts->cl->length && !fts->cl->length) + ||(!ts->cl->length && fts->cl->length)) + || (ts->cl->length + && ts->cl->length->expr_type + != fts->cl->length->expr_type) + || (ts->cl->length + && ts->cl->length->expr_type == EXPR_CONSTANT + && mpz_cmp (ts->cl->length->value.integer, + fts->cl->length->value.integer) != 0))) + gfc_notify_std (GFC_STD_GNU, "Extension: Function %s at %L with " + "entries returning variables of different " + "string lengths", ns->entries->sym->name, + &ns->entries->sym->declared_at); + } + + if (el == NULL) + { + sym = ns->entries->sym->result; + /* All result types the same. */ + proc->ts = *fts; + if (sym->attr.dimension) + gfc_set_array_spec (proc, gfc_copy_array_spec (sym->as), NULL); + if (sym->attr.pointer) + gfc_add_pointer (&proc->attr, NULL); + } + else + { + /* Otherwise the result will be passed through a union by + reference. */ + proc->attr.mixed_entry_master = 1; + for (el = ns->entries; el; el = el->next) + { + sym = el->sym->result; + if (sym->attr.dimension) + { + if (el == ns->entries) + gfc_error ("FUNCTION result %s can't be an array in " + "FUNCTION %s at %L", sym->name, + ns->entries->sym->name, &sym->declared_at); + else + gfc_error ("ENTRY result %s can't be an array in " + "FUNCTION %s at %L", sym->name, + ns->entries->sym->name, &sym->declared_at); + } + else if (sym->attr.pointer) + { + if (el == ns->entries) + gfc_error ("FUNCTION result %s can't be a POINTER in " + "FUNCTION %s at %L", sym->name, + ns->entries->sym->name, &sym->declared_at); + else + gfc_error ("ENTRY result %s can't be a POINTER in " + "FUNCTION %s at %L", sym->name, + ns->entries->sym->name, &sym->declared_at); + } + else + { + ts = &sym->ts; + if (ts->type == BT_UNKNOWN) + ts = gfc_get_default_type (sym, NULL); + switch (ts->type) + { + case BT_INTEGER: + if (ts->kind == gfc_default_integer_kind) + sym = NULL; + break; + case BT_REAL: + if (ts->kind == gfc_default_real_kind + || ts->kind == gfc_default_double_kind) + sym = NULL; + break; + case BT_COMPLEX: + if (ts->kind == gfc_default_complex_kind) + sym = NULL; + break; + case BT_LOGICAL: + if (ts->kind == gfc_default_logical_kind) + sym = NULL; + break; + case BT_UNKNOWN: + /* We will issue error elsewhere. */ + sym = NULL; + break; + default: + break; + } + if (sym) + { + if (el == ns->entries) + gfc_error ("FUNCTION result %s can't be of type %s " + "in FUNCTION %s at %L", sym->name, + gfc_typename (ts), ns->entries->sym->name, + &sym->declared_at); + else + gfc_error ("ENTRY result %s can't be of type %s " + "in FUNCTION %s at %L", sym->name, + gfc_typename (ts), ns->entries->sym->name, + &sym->declared_at); + } + } + } + } + } + proc->attr.access = ACCESS_PRIVATE; + proc->attr.entry_master = 1; + + /* Merge all the entry point arguments. */ + for (el = ns->entries; el; el = el->next) + merge_argument_lists (proc, el->sym->formal); + + /* Check the master formal arguments for any that are not + present in all entry points. */ + for (el = ns->entries; el; el = el->next) + check_argument_lists (proc, el->sym->formal); + + /* Use the master function for the function body. */ + ns->proc_name = proc; + + /* Finalize the new symbols. */ + gfc_commit_symbols (); + + /* Restore the original namespace. */ + gfc_current_ns = old_ns; +} + + +static bool +has_default_initializer (gfc_symbol *der) +{ + gfc_component *c; + + gcc_assert (der->attr.flavor == FL_DERIVED); + for (c = der->components; c; c = c->next) + if ((c->ts.type != BT_DERIVED && c->initializer) + || (c->ts.type == BT_DERIVED + && (!c->attr.pointer && has_default_initializer (c->ts.derived)))) + break; + + return c != NULL; +} + +/* Resolve common variables. */ +static void +resolve_common_vars (gfc_symbol *sym, bool named_common) +{ + gfc_symbol *csym = sym; + + for (; csym; csym = csym->common_next) + { + if (csym->value || csym->attr.data) + { + if (!csym->ns->is_block_data) + gfc_notify_std (GFC_STD_GNU, "Variable '%s' at %L is in COMMON " + "but only in BLOCK DATA initialization is " + "allowed", csym->name, &csym->declared_at); + else if (!named_common) + gfc_notify_std (GFC_STD_GNU, "Initialized variable '%s' at %L is " + "in a blank COMMON but initialization is only " + "allowed in named common blocks", csym->name, + &csym->declared_at); + } + + if (csym->ts.type != BT_DERIVED) + continue; + + if (!(csym->ts.derived->attr.sequence + || csym->ts.derived->attr.is_bind_c)) + gfc_error_now ("Derived type variable '%s' in COMMON at %L " + "has neither the SEQUENCE nor the BIND(C) " + "attribute", csym->name, &csym->declared_at); + if (csym->ts.derived->attr.alloc_comp) + gfc_error_now ("Derived type variable '%s' in COMMON at %L " + "has an ultimate component that is " + "allocatable", csym->name, &csym->declared_at); + if (has_default_initializer (csym->ts.derived)) + gfc_error_now ("Derived type variable '%s' in COMMON at %L " + "may not have default initializer", csym->name, + &csym->declared_at); + + if (csym->attr.flavor == FL_UNKNOWN && !csym->attr.proc_pointer) + gfc_add_flavor (&csym->attr, FL_VARIABLE, csym->name, &csym->declared_at); + } +} + +/* Resolve common blocks. */ +static void +resolve_common_blocks (gfc_symtree *common_root) +{ + gfc_symbol *sym; + + if (common_root == NULL) + return; + + if (common_root->left) + resolve_common_blocks (common_root->left); + if (common_root->right) + resolve_common_blocks (common_root->right); + + resolve_common_vars (common_root->n.common->head, true); + + gfc_find_symbol (common_root->name, gfc_current_ns, 0, &sym); + if (sym == NULL) + return; + + if (sym->attr.flavor == FL_PARAMETER) + gfc_error ("COMMON block '%s' at %L is used as PARAMETER at %L", + sym->name, &common_root->n.common->where, &sym->declared_at); + + if (sym->attr.intrinsic) + gfc_error ("COMMON block '%s' at %L is also an intrinsic procedure", + sym->name, &common_root->n.common->where); + else if (sym->attr.result + ||(sym->attr.function && gfc_current_ns->proc_name == sym)) + gfc_notify_std (GFC_STD_F2003, "Fortran 2003: COMMON block '%s' at %L " + "that is also a function result", sym->name, + &common_root->n.common->where); + else if (sym->attr.flavor == FL_PROCEDURE && sym->attr.proc != PROC_INTERNAL + && sym->attr.proc != PROC_ST_FUNCTION) + gfc_notify_std (GFC_STD_F2003, "Fortran 2003: COMMON block '%s' at %L " + "that is also a global procedure", sym->name, + &common_root->n.common->where); +} + + +/* Resolve contained function types. Because contained functions can call one + another, they have to be worked out before any of the contained procedures + can be resolved. + + The good news is that if a function doesn't already have a type, the only + way it can get one is through an IMPLICIT type or a RESULT variable, because + by definition contained functions are contained namespace they're contained + in, not in a sibling or parent namespace. */ + +static void +resolve_contained_functions (gfc_namespace *ns) +{ + gfc_namespace *child; + gfc_entry_list *el; + + resolve_formal_arglists (ns); + + for (child = ns->contained; child; child = child->sibling) + { + /* Resolve alternate entry points first. */ + resolve_entries (child); + + /* Then check function return types. */ + resolve_contained_fntype (child->proc_name, child); + for (el = child->entries; el; el = el->next) + resolve_contained_fntype (el->sym, child); + } +} + + +/* Resolve all of the elements of a structure constructor and make sure that + the types are correct. */ + +static gfc_try +resolve_structure_cons (gfc_expr *expr) +{ + gfc_constructor *cons; + gfc_component *comp; + gfc_try t; + symbol_attribute a; + + t = SUCCESS; + cons = expr->value.constructor; + /* A constructor may have references if it is the result of substituting a + parameter variable. In this case we just pull out the component we + want. */ + if (expr->ref) + comp = expr->ref->u.c.sym->components; + else + comp = expr->ts.derived->components; + + /* See if the user is trying to invoke a structure constructor for one of + the iso_c_binding derived types. */ + if (expr->ts.derived && expr->ts.derived->ts.is_iso_c && cons + && cons->expr != NULL) + { + gfc_error ("Components of structure constructor '%s' at %L are PRIVATE", + expr->ts.derived->name, &(expr->where)); + return FAILURE; + } + + for (; comp; comp = comp->next, cons = cons->next) + { + int rank; + + if (!cons->expr) + continue; + + if (gfc_resolve_expr (cons->expr) == FAILURE) + { + t = FAILURE; + continue; + } + + rank = comp->as ? comp->as->rank : 0; + if (cons->expr->expr_type != EXPR_NULL && rank != cons->expr->rank + && (comp->attr.allocatable || cons->expr->rank)) + { + gfc_error ("The rank of the element in the derived type " + "constructor at %L does not match that of the " + "component (%d/%d)", &cons->expr->where, + cons->expr->rank, rank); + t = FAILURE; + } + + /* If we don't have the right type, try to convert it. */ + + if (!gfc_compare_types (&cons->expr->ts, &comp->ts)) + { + t = FAILURE; + if (comp->attr.pointer && cons->expr->ts.type != BT_UNKNOWN) + gfc_error ("The element in the derived type constructor at %L, " + "for pointer component '%s', is %s but should be %s", + &cons->expr->where, comp->name, + gfc_basic_typename (cons->expr->ts.type), + gfc_basic_typename (comp->ts.type)); + else + t = gfc_convert_type (cons->expr, &comp->ts, 1); + } + + if (cons->expr->expr_type == EXPR_NULL + && !(comp->attr.pointer || comp->attr.allocatable)) + { + t = FAILURE; + gfc_error ("The NULL in the derived type constructor at %L is " + "being applied to component '%s', which is neither " + "a POINTER nor ALLOCATABLE", &cons->expr->where, + comp->name); + } + + if (!comp->attr.pointer || cons->expr->expr_type == EXPR_NULL) + continue; + + a = gfc_expr_attr (cons->expr); + + if (!a.pointer && !a.target) + { + t = FAILURE; + gfc_error ("The element in the derived type constructor at %L, " + "for pointer component '%s' should be a POINTER or " + "a TARGET", &cons->expr->where, comp->name); + } + } + + return t; +} + + +/****************** Expression name resolution ******************/ + +/* Returns 0 if a symbol was not declared with a type or + attribute declaration statement, nonzero otherwise. */ + +static int +was_declared (gfc_symbol *sym) +{ + symbol_attribute a; + + a = sym->attr; + + if (!a.implicit_type && sym->ts.type != BT_UNKNOWN) + return 1; + + if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic + || a.optional || a.pointer || a.save || a.target || a.volatile_ + || a.value || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN) + return 1; + + return 0; +} + + +/* Determine if a symbol is generic or not. */ + +static int +generic_sym (gfc_symbol *sym) +{ + gfc_symbol *s; + + if (sym->attr.generic || + (sym->attr.intrinsic && gfc_generic_intrinsic (sym->name))) + return 1; + + if (was_declared (sym) || sym->ns->parent == NULL) + return 0; + + gfc_find_symbol (sym->name, sym->ns->parent, 1, &s); + + if (s != NULL) + { + if (s == sym) + return 0; + else + return generic_sym (s); + } + + return 0; +} + + +/* Determine if a symbol is specific or not. */ + +static int +specific_sym (gfc_symbol *sym) +{ + gfc_symbol *s; + + if (sym->attr.if_source == IFSRC_IFBODY + || sym->attr.proc == PROC_MODULE + || sym->attr.proc == PROC_INTERNAL + || sym->attr.proc == PROC_ST_FUNCTION + || (sym->attr.intrinsic && gfc_specific_intrinsic (sym->name)) + || sym->attr.external) + return 1; + + if (was_declared (sym) || sym->ns->parent == NULL) + return 0; + + gfc_find_symbol (sym->name, sym->ns->parent, 1, &s); + + return (s == NULL) ? 0 : specific_sym (s); +} + + +/* Figure out if the procedure is specific, generic or unknown. */ + +typedef enum +{ PTYPE_GENERIC = 1, PTYPE_SPECIFIC, PTYPE_UNKNOWN } +proc_type; + +static proc_type +procedure_kind (gfc_symbol *sym) +{ + if (generic_sym (sym)) + return PTYPE_GENERIC; + + if (specific_sym (sym)) + return PTYPE_SPECIFIC; + + return PTYPE_UNKNOWN; +} + +/* Check references to assumed size arrays. The flag need_full_assumed_size + is nonzero when matching actual arguments. */ + +static int need_full_assumed_size = 0; + +static bool +check_assumed_size_reference (gfc_symbol *sym, gfc_expr *e) +{ + if (need_full_assumed_size || !(sym->as && sym->as->type == AS_ASSUMED_SIZE)) + return false; + + /* FIXME: The comparison "e->ref->u.ar.type == AR_FULL" is wrong. + What should it be? */ + if ((e->ref->u.ar.end[e->ref->u.ar.as->rank - 1] == NULL) + && (e->ref->u.ar.as->type == AS_ASSUMED_SIZE) + && (e->ref->u.ar.type == AR_FULL)) + { + gfc_error ("The upper bound in the last dimension must " + "appear in the reference to the assumed size " + "array '%s' at %L", sym->name, &e->where); + return true; + } + return false; +} + + +/* Look for bad assumed size array references in argument expressions + of elemental and array valued intrinsic procedures. Since this is + called from procedure resolution functions, it only recurses at + operators. */ + +static bool +resolve_assumed_size_actual (gfc_expr *e) +{ + if (e == NULL) + return false; + + switch (e->expr_type) + { + case EXPR_VARIABLE: + if (e->symtree && check_assumed_size_reference (e->symtree->n.sym, e)) + return true; + break; + + case EXPR_OP: + if (resolve_assumed_size_actual (e->value.op.op1) + || resolve_assumed_size_actual (e->value.op.op2)) + return true; + break; + + default: + break; + } + return false; +} + + +/* Check a generic procedure, passed as an actual argument, to see if + there is a matching specific name. If none, it is an error, and if + more than one, the reference is ambiguous. */ +static int +count_specific_procs (gfc_expr *e) +{ + int n; + gfc_interface *p; + gfc_symbol *sym; + + n = 0; + sym = e->symtree->n.sym; + + for (p = sym->generic; p; p = p->next) + if (strcmp (sym->name, p->sym->name) == 0) + { + e->symtree = gfc_find_symtree (p->sym->ns->sym_root, + sym->name); + n++; + } + + if (n > 1) + gfc_error ("'%s' at %L is ambiguous", e->symtree->n.sym->name, + &e->where); + + if (n == 0) + gfc_error ("GENERIC procedure '%s' is not allowed as an actual " + "argument at %L", sym->name, &e->where); + + return n; +} + + +/* See if a call to sym could possibly be a not allowed RECURSION because of + a missing RECURIVE declaration. This means that either sym is the current + context itself, or sym is the parent of a contained procedure calling its + non-RECURSIVE containing procedure. + This also works if sym is an ENTRY. */ + +static bool +is_illegal_recursion (gfc_symbol* sym, gfc_namespace* context) +{ + gfc_symbol* proc_sym; + gfc_symbol* context_proc; + + gcc_assert (sym->attr.flavor == FL_PROCEDURE); + + /* If we've got an ENTRY, find real procedure. */ + if (sym->attr.entry && sym->ns->entries) + proc_sym = sym->ns->entries->sym; + else + proc_sym = sym; + + /* If sym is RECURSIVE, all is well of course. */ + if (proc_sym->attr.recursive || gfc_option.flag_recursive) + return false; + + /* Find the context procdure's "real" symbol if it has entries. */ + context_proc = (context->entries ? context->entries->sym + : context->proc_name); + if (!context_proc) + return true; + + /* A call from sym's body to itself is recursion, of course. */ + if (context_proc == proc_sym) + return true; + + /* The same is true if context is a contained procedure and sym the + containing one. */ + if (context_proc->attr.contained) + { + gfc_symbol* parent_proc; + + gcc_assert (context->parent); + parent_proc = (context->parent->entries ? context->parent->entries->sym + : context->parent->proc_name); + + if (parent_proc == proc_sym) + return true; + } + + return false; +} + + +/* Resolve a procedure expression, like passing it to a called procedure or as + RHS for a procedure pointer assignment. */ + +static gfc_try +resolve_procedure_expression (gfc_expr* expr) +{ + gfc_symbol* sym; + + if (expr->expr_type != EXPR_VARIABLE) + return SUCCESS; + gcc_assert (expr->symtree); + + sym = expr->symtree->n.sym; + if (sym->attr.flavor != FL_PROCEDURE + || (sym->attr.function && sym->result == sym)) + return SUCCESS; + + /* A non-RECURSIVE procedure that is used as procedure expression within its + own body is in danger of being called recursively. */ + if (is_illegal_recursion (sym, gfc_current_ns)) + gfc_warning ("Non-RECURSIVE procedure '%s' at %L is possibly calling" + " itself recursively. Declare it RECURSIVE or use" + " -frecursive", sym->name, &expr->where); + + return SUCCESS; +} + + +/* Resolve an actual argument list. Most of the time, this is just + resolving the expressions in the list. + The exception is that we sometimes have to decide whether arguments + that look like procedure arguments are really simple variable + references. */ + +static gfc_try +resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype, + bool no_formal_args) +{ + gfc_symbol *sym; + gfc_symtree *parent_st; + gfc_expr *e; + int save_need_full_assumed_size; + + for (; arg; arg = arg->next) + { + e = arg->expr; + if (e == NULL) + { + /* Check the label is a valid branching target. */ + if (arg->label) + { + if (arg->label->defined == ST_LABEL_UNKNOWN) + { + gfc_error ("Label %d referenced at %L is never defined", + arg->label->value, &arg->label->where); + return FAILURE; + } + } + continue; + } + + if (e->expr_type == EXPR_VARIABLE + && e->symtree->n.sym->attr.generic + && no_formal_args + && count_specific_procs (e) != 1) + return FAILURE; + + if (e->ts.type != BT_PROCEDURE) + { + save_need_full_assumed_size = need_full_assumed_size; + if (e->expr_type != EXPR_VARIABLE) + need_full_assumed_size = 0; + if (gfc_resolve_expr (e) != SUCCESS) + return FAILURE; + need_full_assumed_size = save_need_full_assumed_size; + goto argument_list; + } + + /* See if the expression node should really be a variable reference. */ + + sym = e->symtree->n.sym; + + if (sym->attr.flavor == FL_PROCEDURE + || sym->attr.intrinsic + || sym->attr.external) + { + int actual_ok; + + /* If a procedure is not already determined to be something else + check if it is intrinsic. */ + if (!sym->attr.intrinsic + && !(sym->attr.external || sym->attr.use_assoc + || sym->attr.if_source == IFSRC_IFBODY) + && gfc_is_intrinsic (sym, sym->attr.subroutine, e->where)) + sym->attr.intrinsic = 1; + + if (sym->attr.proc == PROC_ST_FUNCTION) + { + gfc_error ("Statement function '%s' at %L is not allowed as an " + "actual argument", sym->name, &e->where); + } + + actual_ok = gfc_intrinsic_actual_ok (sym->name, + sym->attr.subroutine); + if (sym->attr.intrinsic && actual_ok == 0) + { + gfc_error ("Intrinsic '%s' at %L is not allowed as an " + "actual argument", sym->name, &e->where); + } + + if (sym->attr.contained && !sym->attr.use_assoc + && sym->ns->proc_name->attr.flavor != FL_MODULE) + { + gfc_error ("Internal procedure '%s' is not allowed as an " + "actual argument at %L", sym->name, &e->where); + } + + if (sym->attr.elemental && !sym->attr.intrinsic) + { + gfc_error ("ELEMENTAL non-INTRINSIC procedure '%s' is not " + "allowed as an actual argument at %L", sym->name, + &e->where); + } + + /* Check if a generic interface has a specific procedure + with the same name before emitting an error. */ + if (sym->attr.generic && count_specific_procs (e) != 1) + return FAILURE; + + /* Just in case a specific was found for the expression. */ + sym = e->symtree->n.sym; + + /* If the symbol is the function that names the current (or + parent) scope, then we really have a variable reference. */ + + if (sym->attr.function && sym->result == sym + && (sym->ns->proc_name == sym + || (sym->ns->parent != NULL + && sym->ns->parent->proc_name == sym))) + goto got_variable; + + /* If all else fails, see if we have a specific intrinsic. */ + if (sym->ts.type == BT_UNKNOWN && sym->attr.intrinsic) + { + gfc_intrinsic_sym *isym; + + isym = gfc_find_function (sym->name); + if (isym == NULL || !isym->specific) + { + gfc_error ("Unable to find a specific INTRINSIC procedure " + "for the reference '%s' at %L", sym->name, + &e->where); + return FAILURE; + } + sym->ts = isym->ts; + sym->attr.intrinsic = 1; + sym->attr.function = 1; + } + + if (gfc_resolve_expr (e) == FAILURE) + return FAILURE; + goto argument_list; + } + + /* See if the name is a module procedure in a parent unit. */ + + if (was_declared (sym) || sym->ns->parent == NULL) + goto got_variable; + + if (gfc_find_sym_tree (sym->name, sym->ns->parent, 1, &parent_st)) + { + gfc_error ("Symbol '%s' at %L is ambiguous", sym->name, &e->where); + return FAILURE; + } + + if (parent_st == NULL) + goto got_variable; + + sym = parent_st->n.sym; + e->symtree = parent_st; /* Point to the right thing. */ + + if (sym->attr.flavor == FL_PROCEDURE + || sym->attr.intrinsic + || sym->attr.external) + { + if (gfc_resolve_expr (e) == FAILURE) + return FAILURE; + goto argument_list; + } + + got_variable: + e->expr_type = EXPR_VARIABLE; + e->ts = sym->ts; + if (sym->as != NULL) + { + e->rank = sym->as->rank; + e->ref = gfc_get_ref (); + e->ref->type = REF_ARRAY; + e->ref->u.ar.type = AR_FULL; + e->ref->u.ar.as = sym->as; + } + + /* Expressions are assigned a default ts.type of BT_PROCEDURE in + primary.c (match_actual_arg). If above code determines that it + is a variable instead, it needs to be resolved as it was not + done at the beginning of this function. */ + save_need_full_assumed_size = need_full_assumed_size; + if (e->expr_type != EXPR_VARIABLE) + need_full_assumed_size = 0; + if (gfc_resolve_expr (e) != SUCCESS) + return FAILURE; + need_full_assumed_size = save_need_full_assumed_size; + + argument_list: + /* Check argument list functions %VAL, %LOC and %REF. There is + nothing to do for %REF. */ + if (arg->name && arg->name[0] == '%') + { + if (strncmp ("%VAL", arg->name, 4) == 0) + { + if (e->ts.type == BT_CHARACTER || e->ts.type == BT_DERIVED) + { + gfc_error ("By-value argument at %L is not of numeric " + "type", &e->where); + return FAILURE; + } + + if (e->rank) + { + gfc_error ("By-value argument at %L cannot be an array or " + "an array section", &e->where); + return FAILURE; + } + + /* Intrinsics are still PROC_UNKNOWN here. However, + since same file external procedures are not resolvable + in gfortran, it is a good deal easier to leave them to + intrinsic.c. */ + if (ptype != PROC_UNKNOWN + && ptype != PROC_DUMMY + && ptype != PROC_EXTERNAL + && ptype != PROC_MODULE) + { + gfc_error ("By-value argument at %L is not allowed " + "in this context", &e->where); + return FAILURE; + } + } + + /* Statement functions have already been excluded above. */ + else if (strncmp ("%LOC", arg->name, 4) == 0 + && e->ts.type == BT_PROCEDURE) + { + if (e->symtree->n.sym->attr.proc == PROC_INTERNAL) + { + gfc_error ("Passing internal procedure at %L by location " + "not allowed", &e->where); + return FAILURE; + } + } + } + } + + return SUCCESS; +} + + +/* Do the checks of the actual argument list that are specific to elemental + procedures. If called with c == NULL, we have a function, otherwise if + expr == NULL, we have a subroutine. */ + +static gfc_try +resolve_elemental_actual (gfc_expr *expr, gfc_code *c) +{ + gfc_actual_arglist *arg0; + gfc_actual_arglist *arg; + gfc_symbol *esym = NULL; + gfc_intrinsic_sym *isym = NULL; + gfc_expr *e = NULL; + gfc_intrinsic_arg *iformal = NULL; + gfc_formal_arglist *eformal = NULL; + bool formal_optional = false; + bool set_by_optional = false; + int i; + int rank = 0; + + /* Is this an elemental procedure? */ + if (expr && expr->value.function.actual != NULL) + { + if (expr->value.function.esym != NULL + && expr->value.function.esym->attr.elemental) + { + arg0 = expr->value.function.actual; + esym = expr->value.function.esym; + } + else if (expr->value.function.isym != NULL + && expr->value.function.isym->elemental) + { + arg0 = expr->value.function.actual; + isym = expr->value.function.isym; + } + else + return SUCCESS; + } + else if (c && c->ext.actual != NULL) + { + arg0 = c->ext.actual; + + if (c->resolved_sym) + esym = c->resolved_sym; + else + esym = c->symtree->n.sym; + gcc_assert (esym); + + if (!esym->attr.elemental) + return SUCCESS; + } + else + return SUCCESS; + + /* The rank of an elemental is the rank of its array argument(s). */ + for (arg = arg0; arg; arg = arg->next) + { + if (arg->expr != NULL && arg->expr->rank > 0) + { + rank = arg->expr->rank; + if (arg->expr->expr_type == EXPR_VARIABLE + && arg->expr->symtree->n.sym->attr.optional) + set_by_optional = true; + + /* Function specific; set the result rank and shape. */ + if (expr) + { + expr->rank = rank; + if (!expr->shape && arg->expr->shape) + { + expr->shape = gfc_get_shape (rank); + for (i = 0; i < rank; i++) + mpz_init_set (expr->shape[i], arg->expr->shape[i]); + } + } + break; + } + } + + /* If it is an array, it shall not be supplied as an actual argument + to an elemental procedure unless an array of the same rank is supplied + as an actual argument corresponding to a nonoptional dummy argument of + that elemental procedure(12.4.1.5). */ + formal_optional = false; + if (isym) + iformal = isym->formal; + else + eformal = esym->formal; + + for (arg = arg0; arg; arg = arg->next) + { + if (eformal) + { + if (eformal->sym && eformal->sym->attr.optional) + formal_optional = true; + eformal = eformal->next; + } + else if (isym && iformal) + { + if (iformal->optional) + formal_optional = true; + iformal = iformal->next; + } + else if (isym) + formal_optional = true; + + if (pedantic && arg->expr != NULL + && arg->expr->expr_type == EXPR_VARIABLE + && arg->expr->symtree->n.sym->attr.optional + && formal_optional + && arg->expr->rank + && (set_by_optional || arg->expr->rank != rank) + && !(isym && isym->id == GFC_ISYM_CONVERSION)) + { + gfc_warning ("'%s' at %L is an array and OPTIONAL; IF IT IS " + "MISSING, it cannot be the actual argument of an " + "ELEMENTAL procedure unless there is a non-optional " + "argument with the same rank (12.4.1.5)", + arg->expr->symtree->n.sym->name, &arg->expr->where); + return FAILURE; + } + } + + for (arg = arg0; arg; arg = arg->next) + { + if (arg->expr == NULL || arg->expr->rank == 0) + continue; + + /* Being elemental, the last upper bound of an assumed size array + argument must be present. */ + if (resolve_assumed_size_actual (arg->expr)) + return FAILURE; + + /* Elemental procedure's array actual arguments must conform. */ + if (e != NULL) + { + if (gfc_check_conformance ("elemental procedure", arg->expr, e) + == FAILURE) + return FAILURE; + } + else + e = arg->expr; + } + + /* INTENT(OUT) is only allowed for subroutines; if any actual argument + is an array, the intent inout/out variable needs to be also an array. */ + if (rank > 0 && esym && expr == NULL) + for (eformal = esym->formal, arg = arg0; arg && eformal; + arg = arg->next, eformal = eformal->next) + if ((eformal->sym->attr.intent == INTENT_OUT + || eformal->sym->attr.intent == INTENT_INOUT) + && arg->expr && arg->expr->rank == 0) + { + gfc_error ("Actual argument at %L for INTENT(%s) dummy '%s' of " + "ELEMENTAL subroutine '%s' is a scalar, but another " + "actual argument is an array", &arg->expr->where, + (eformal->sym->attr.intent == INTENT_OUT) ? "OUT" + : "INOUT", eformal->sym->name, esym->name); + return FAILURE; + } + return SUCCESS; +} + + +/* Go through each actual argument in ACTUAL and see if it can be + implemented as an inlined, non-copying intrinsic. FNSYM is the + function being called, or NULL if not known. */ + +static void +find_noncopying_intrinsics (gfc_symbol *fnsym, gfc_actual_arglist *actual) +{ + gfc_actual_arglist *ap; + gfc_expr *expr; + + for (ap = actual; ap; ap = ap->next) + if (ap->expr + && (expr = gfc_get_noncopying_intrinsic_argument (ap->expr)) + && !gfc_check_fncall_dependency (expr, INTENT_IN, fnsym, actual, + NOT_ELEMENTAL)) + ap->expr->inline_noncopying_intrinsic = 1; +} + + +/* This function does the checking of references to global procedures + as defined in sections 18.1 and 14.1, respectively, of the Fortran + 77 and 95 standards. It checks for a gsymbol for the name, making + one if it does not already exist. If it already exists, then the + reference being resolved must correspond to the type of gsymbol. + Otherwise, the new symbol is equipped with the attributes of the + reference. The corresponding code that is called in creating + global entities is parse.c. */ + +static void +resolve_global_procedure (gfc_symbol *sym, locus *where, int sub) +{ + gfc_gsymbol * gsym; + unsigned int type; + + type = sub ? GSYM_SUBROUTINE : GSYM_FUNCTION; + + gsym = gfc_get_gsymbol (sym->name); + + if ((gsym->type != GSYM_UNKNOWN && gsym->type != type)) + gfc_global_used (gsym, where); + + if (gsym->type == GSYM_UNKNOWN) + { + gsym->type = type; + gsym->where = *where; + } + + gsym->used = 1; +} + + +/************* Function resolution *************/ + +/* Resolve a function call known to be generic. + Section 14.1.2.4.1. */ + +static match +resolve_generic_f0 (gfc_expr *expr, gfc_symbol *sym) +{ + gfc_symbol *s; + + if (sym->attr.generic) + { + s = gfc_search_interface (sym->generic, 0, &expr->value.function.actual); + if (s != NULL) + { + expr->value.function.name = s->name; + expr->value.function.esym = s; + + if (s->ts.type != BT_UNKNOWN) + expr->ts = s->ts; + else if (s->result != NULL && s->result->ts.type != BT_UNKNOWN) + expr->ts = s->result->ts; + + if (s->as != NULL) + expr->rank = s->as->rank; + else if (s->result != NULL && s->result->as != NULL) + expr->rank = s->result->as->rank; + + gfc_set_sym_referenced (expr->value.function.esym); + + return MATCH_YES; + } + + /* TODO: Need to search for elemental references in generic + interface. */ + } + + if (sym->attr.intrinsic) + return gfc_intrinsic_func_interface (expr, 0); + + return MATCH_NO; +} + + +static gfc_try +resolve_generic_f (gfc_expr *expr) +{ + gfc_symbol *sym; + match m; + + sym = expr->symtree->n.sym; + + for (;;) + { + m = resolve_generic_f0 (expr, sym); + if (m == MATCH_YES) + return SUCCESS; + else if (m == MATCH_ERROR) + return FAILURE; + +generic: + if (sym->ns->parent == NULL) + break; + gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym); + + if (sym == NULL) + break; + if (!generic_sym (sym)) + goto generic; + } + + /* Last ditch attempt. See if the reference is to an intrinsic + that possesses a matching interface. 14.1.2.4 */ + if (sym && !gfc_is_intrinsic (sym, 0, expr->where)) + { + gfc_error ("There is no specific function for the generic '%s' at %L", + expr->symtree->n.sym->name, &expr->where); + return FAILURE; + } + + m = gfc_intrinsic_func_interface (expr, 0); + if (m == MATCH_YES) + return SUCCESS; + if (m == MATCH_NO) + gfc_error ("Generic function '%s' at %L is not consistent with a " + "specific intrinsic interface", expr->symtree->n.sym->name, + &expr->where); + + return FAILURE; +} + + +/* Resolve a function call known to be specific. */ + +static match +resolve_specific_f0 (gfc_symbol *sym, gfc_expr *expr) +{ + match m; + + /* See if we have an intrinsic interface. */ + + if (sym->ts.interface != NULL && sym->ts.interface->attr.intrinsic) + { + gfc_intrinsic_sym *isym; + isym = gfc_find_function (sym->ts.interface->name); + + /* Existence of isym should be checked already. */ + gcc_assert (isym); + + sym->ts.type = isym->ts.type; + sym->ts.kind = isym->ts.kind; + sym->attr.function = 1; + sym->attr.proc = PROC_EXTERNAL; + goto found; + } + + if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY) + { + if (sym->attr.dummy) + { + sym->attr.proc = PROC_DUMMY; + goto found; + } + + sym->attr.proc = PROC_EXTERNAL; + goto found; + } + + if (sym->attr.proc == PROC_MODULE + || sym->attr.proc == PROC_ST_FUNCTION + || sym->attr.proc == PROC_INTERNAL) + goto found; + + if (sym->attr.intrinsic) + { + m = gfc_intrinsic_func_interface (expr, 1); + if (m == MATCH_YES) + return MATCH_YES; + if (m == MATCH_NO) + gfc_error ("Function '%s' at %L is INTRINSIC but is not compatible " + "with an intrinsic", sym->name, &expr->where); + + return MATCH_ERROR; + } + + return MATCH_NO; + +found: + gfc_procedure_use (sym, &expr->value.function.actual, &expr->where); + + expr->ts = sym->ts; + expr->value.function.name = sym->name; + expr->value.function.esym = sym; + if (sym->as != NULL) + expr->rank = sym->as->rank; + + return MATCH_YES; +} + + +static gfc_try +resolve_specific_f (gfc_expr *expr) +{ + gfc_symbol *sym; + match m; + + sym = expr->symtree->n.sym; + + for (;;) + { + m = resolve_specific_f0 (sym, expr); + if (m == MATCH_YES) + return SUCCESS; + if (m == MATCH_ERROR) + return FAILURE; + + if (sym->ns->parent == NULL) + break; + + gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym); + + if (sym == NULL) + break; + } + + gfc_error ("Unable to resolve the specific function '%s' at %L", + expr->symtree->n.sym->name, &expr->where); + + return SUCCESS; +} + + +/* Resolve a procedure call not known to be generic nor specific. */ + +static gfc_try +resolve_unknown_f (gfc_expr *expr) +{ + gfc_symbol *sym; + gfc_typespec *ts; + + sym = expr->symtree->n.sym; + + if (sym->attr.dummy) + { + sym->attr.proc = PROC_DUMMY; + expr->value.function.name = sym->name; + goto set_type; + } + + /* See if we have an intrinsic function reference. */ + + if (gfc_is_intrinsic (sym, 0, expr->where)) + { + if (gfc_intrinsic_func_interface (expr, 1) == MATCH_YES) + return SUCCESS; + return FAILURE; + } + + /* The reference is to an external name. */ + + sym->attr.proc = PROC_EXTERNAL; + expr->value.function.name = sym->name; + expr->value.function.esym = expr->symtree->n.sym; + + if (sym->as != NULL) + expr->rank = sym->as->rank; + + /* Type of the expression is either the type of the symbol or the + default type of the symbol. */ + +set_type: + gfc_procedure_use (sym, &expr->value.function.actual, &expr->where); + + if (sym->ts.type != BT_UNKNOWN) + expr->ts = sym->ts; + else + { + ts = gfc_get_default_type (sym, sym->ns); + + if (ts->type == BT_UNKNOWN) + { + gfc_error ("Function '%s' at %L has no IMPLICIT type", + sym->name, &expr->where); + return FAILURE; + } + else + expr->ts = *ts; + } + + return SUCCESS; +} + + +/* Return true, if the symbol is an external procedure. */ +static bool +is_external_proc (gfc_symbol *sym) +{ + if (!sym->attr.dummy && !sym->attr.contained + && !(sym->attr.intrinsic + || gfc_is_intrinsic (sym, sym->attr.subroutine, sym->declared_at)) + && sym->attr.proc != PROC_ST_FUNCTION + && !sym->attr.use_assoc + && sym->name) + return true; + + return false; +} + + +/* Figure out if a function reference is pure or not. Also set the name + of the function for a potential error message. Return nonzero if the + function is PURE, zero if not. */ +static int +pure_stmt_function (gfc_expr *, gfc_symbol *); + +static int +pure_function (gfc_expr *e, const char **name) +{ + int pure; + + *name = NULL; + + if (e->symtree != NULL + && e->symtree->n.sym != NULL + && e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION) + return pure_stmt_function (e, e->symtree->n.sym); + + if (e->value.function.esym) + { + pure = gfc_pure (e->value.function.esym); + *name = e->value.function.esym->name; + } + else if (e->value.function.isym) + { + pure = e->value.function.isym->pure + || e->value.function.isym->elemental; + *name = e->value.function.isym->name; + } + else + { + /* Implicit functions are not pure. */ + pure = 0; + *name = e->value.function.name; + } + + return pure; +} + + +static bool +impure_stmt_fcn (gfc_expr *e, gfc_symbol *sym, + int *f ATTRIBUTE_UNUSED) +{ + const char *name; + + /* Don't bother recursing into other statement functions + since they will be checked individually for purity. */ + if (e->expr_type != EXPR_FUNCTION + || !e->symtree + || e->symtree->n.sym == sym + || e->symtree->n.sym->attr.proc == PROC_ST_FUNCTION) + return false; + + return pure_function (e, &name) ? false : true; +} + + +static int +pure_stmt_function (gfc_expr *e, gfc_symbol *sym) +{ + return gfc_traverse_expr (e, sym, impure_stmt_fcn, 0) ? 0 : 1; +} + + +static gfc_try +is_scalar_expr_ptr (gfc_expr *expr) +{ + gfc_try retval = SUCCESS; + gfc_ref *ref; + int start; + int end; + + /* See if we have a gfc_ref, which means we have a substring, array + reference, or a component. */ + if (expr->ref != NULL) + { + ref = expr->ref; + while (ref->next != NULL) + ref = ref->next; + + switch (ref->type) + { + case REF_SUBSTRING: + if (ref->u.ss.length != NULL + && ref->u.ss.length->length != NULL + && ref->u.ss.start + && ref->u.ss.start->expr_type == EXPR_CONSTANT + && ref->u.ss.end + && ref->u.ss.end->expr_type == EXPR_CONSTANT) + { + start = (int) mpz_get_si (ref->u.ss.start->value.integer); + end = (int) mpz_get_si (ref->u.ss.end->value.integer); + if (end - start + 1 != 1) + retval = FAILURE; + } + else + retval = FAILURE; + break; + case REF_ARRAY: + if (ref->u.ar.type == AR_ELEMENT) + retval = SUCCESS; + else if (ref->u.ar.type == AR_FULL) + { + /* The user can give a full array if the array is of size 1. */ + if (ref->u.ar.as != NULL + && ref->u.ar.as->rank == 1 + && ref->u.ar.as->type == AS_EXPLICIT + && ref->u.ar.as->lower[0] != NULL + && ref->u.ar.as->lower[0]->expr_type == EXPR_CONSTANT + && ref->u.ar.as->upper[0] != NULL + && ref->u.ar.as->upper[0]->expr_type == EXPR_CONSTANT) + { + /* If we have a character string, we need to check if + its length is one. */ + if (expr->ts.type == BT_CHARACTER) + { + if (expr->ts.cl == NULL + || expr->ts.cl->length == NULL + || mpz_cmp_si (expr->ts.cl->length->value.integer, 1) + != 0) + retval = FAILURE; + } + else + { + /* We have constant lower and upper bounds. If the + difference between is 1, it can be considered a + scalar. */ + start = (int) mpz_get_si + (ref->u.ar.as->lower[0]->value.integer); + end = (int) mpz_get_si + (ref->u.ar.as->upper[0]->value.integer); + if (end - start + 1 != 1) + retval = FAILURE; + } + } + else + retval = FAILURE; + } + else + retval = FAILURE; + break; + default: + retval = SUCCESS; + break; + } + } + else if (expr->ts.type == BT_CHARACTER && expr->rank == 0) + { + /* Character string. Make sure it's of length 1. */ + if (expr->ts.cl == NULL + || expr->ts.cl->length == NULL + || mpz_cmp_si (expr->ts.cl->length->value.integer, 1) != 0) + retval = FAILURE; + } + else if (expr->rank != 0) + retval = FAILURE; + + return retval; +} + + +/* Match one of the iso_c_binding functions (c_associated or c_loc) + and, in the case of c_associated, set the binding label based on + the arguments. */ + +static gfc_try +gfc_iso_c_func_interface (gfc_symbol *sym, gfc_actual_arglist *args, + gfc_symbol **new_sym) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + char binding_label[GFC_MAX_BINDING_LABEL_LEN + 1]; + int optional_arg = 0, is_pointer = 0; + gfc_try retval = SUCCESS; + gfc_symbol *args_sym; + gfc_typespec *arg_ts; + + if (args->expr->expr_type == EXPR_CONSTANT + || args->expr->expr_type == EXPR_OP + || args->expr->expr_type == EXPR_NULL) + { + gfc_error ("Argument to '%s' at %L is not a variable", + sym->name, &(args->expr->where)); + return FAILURE; + } + + args_sym = args->expr->symtree->n.sym; + + /* The typespec for the actual arg should be that stored in the expr + and not necessarily that of the expr symbol (args_sym), because + the actual expression could be a part-ref of the expr symbol. */ + arg_ts = &(args->expr->ts); + + is_pointer = gfc_is_data_pointer (args->expr); + + if (sym->intmod_sym_id == ISOCBINDING_ASSOCIATED) + { + /* If the user gave two args then they are providing something for + the optional arg (the second cptr). Therefore, set the name and + binding label to the c_associated for two cptrs. Otherwise, + set c_associated to expect one cptr. */ + if (args->next) + { + /* two args. */ + sprintf (name, "%s_2", sym->name); + sprintf (binding_label, "%s_2", sym->binding_label); + optional_arg = 1; + } + else + { + /* one arg. */ + sprintf (name, "%s_1", sym->name); + sprintf (binding_label, "%s_1", sym->binding_label); + optional_arg = 0; + } + + /* Get a new symbol for the version of c_associated that + will get called. */ + *new_sym = get_iso_c_sym (sym, name, binding_label, optional_arg); + } + else if (sym->intmod_sym_id == ISOCBINDING_LOC + || sym->intmod_sym_id == ISOCBINDING_FUNLOC) + { + sprintf (name, "%s", sym->name); + sprintf (binding_label, "%s", sym->binding_label); + + /* Error check the call. */ + if (args->next != NULL) + { + gfc_error_now ("More actual than formal arguments in '%s' " + "call at %L", name, &(args->expr->where)); + retval = FAILURE; + } + else if (sym->intmod_sym_id == ISOCBINDING_LOC) + { + /* Make sure we have either the target or pointer attribute. */ + if (!args_sym->attr.target && !is_pointer) + { + gfc_error_now ("Parameter '%s' to '%s' at %L must be either " + "a TARGET or an associated pointer", + args_sym->name, + sym->name, &(args->expr->where)); + retval = FAILURE; + } + + /* See if we have interoperable type and type param. */ + if (verify_c_interop (arg_ts) == SUCCESS + || gfc_check_any_c_kind (arg_ts) == SUCCESS) + { + if (args_sym->attr.target == 1) + { + /* Case 1a, section 15.1.2.5, J3/04-007: variable that + has the target attribute and is interoperable. */ + /* Case 1b, section 15.1.2.5, J3/04-007: allocated + allocatable variable that has the TARGET attribute and + is not an array of zero size. */ + if (args_sym->attr.allocatable == 1) + { + if (args_sym->attr.dimension != 0 + && (args_sym->as && args_sym->as->rank == 0)) + { + gfc_error_now ("Allocatable variable '%s' used as a " + "parameter to '%s' at %L must not be " + "an array of zero size", + args_sym->name, sym->name, + &(args->expr->where)); + retval = FAILURE; + } + } + else + { + /* A non-allocatable target variable with C + interoperable type and type parameters must be + interoperable. */ + if (args_sym && args_sym->attr.dimension) + { + if (args_sym->as->type == AS_ASSUMED_SHAPE) + { + gfc_error ("Assumed-shape array '%s' at %L " + "cannot be an argument to the " + "procedure '%s' because " + "it is not C interoperable", + args_sym->name, + &(args->expr->where), sym->name); + retval = FAILURE; + } + else if (args_sym->as->type == AS_DEFERRED) + { + gfc_error ("Deferred-shape array '%s' at %L " + "cannot be an argument to the " + "procedure '%s' because " + "it is not C interoperable", + args_sym->name, + &(args->expr->where), sym->name); + retval = FAILURE; + } + } + + /* Make sure it's not a character string. Arrays of + any type should be ok if the variable is of a C + interoperable type. */ + if (arg_ts->type == BT_CHARACTER) + if (arg_ts->cl != NULL + && (arg_ts->cl->length == NULL + || arg_ts->cl->length->expr_type + != EXPR_CONSTANT + || mpz_cmp_si + (arg_ts->cl->length->value.integer, 1) + != 0) + && is_scalar_expr_ptr (args->expr) != SUCCESS) + { + gfc_error_now ("CHARACTER argument '%s' to '%s' " + "at %L must have a length of 1", + args_sym->name, sym->name, + &(args->expr->where)); + retval = FAILURE; + } + } + } + else if (is_pointer + && is_scalar_expr_ptr (args->expr) != SUCCESS) + { + /* Case 1c, section 15.1.2.5, J3/04-007: an associated + scalar pointer. */ + gfc_error_now ("Argument '%s' to '%s' at %L must be an " + "associated scalar POINTER", args_sym->name, + sym->name, &(args->expr->where)); + retval = FAILURE; + } + } + else + { + /* The parameter is not required to be C interoperable. If it + is not C interoperable, it must be a nonpolymorphic scalar + with no length type parameters. It still must have either + the pointer or target attribute, and it can be + allocatable (but must be allocated when c_loc is called). */ + if (args->expr->rank != 0 + && is_scalar_expr_ptr (args->expr) != SUCCESS) + { + gfc_error_now ("Parameter '%s' to '%s' at %L must be a " + "scalar", args_sym->name, sym->name, + &(args->expr->where)); + retval = FAILURE; + } + else if (arg_ts->type == BT_CHARACTER + && is_scalar_expr_ptr (args->expr) != SUCCESS) + { + gfc_error_now ("CHARACTER argument '%s' to '%s' at " + "%L must have a length of 1", + args_sym->name, sym->name, + &(args->expr->where)); + retval = FAILURE; + } + } + } + else if (sym->intmod_sym_id == ISOCBINDING_FUNLOC) + { + if (args_sym->attr.flavor != FL_PROCEDURE) + { + /* TODO: Update this error message to allow for procedure + pointers once they are implemented. */ + gfc_error_now ("Parameter '%s' to '%s' at %L must be a " + "procedure", + args_sym->name, sym->name, + &(args->expr->where)); + retval = FAILURE; + } + else if (args_sym->attr.is_bind_c != 1) + { + gfc_error_now ("Parameter '%s' to '%s' at %L must be " + "BIND(C)", + args_sym->name, sym->name, + &(args->expr->where)); + retval = FAILURE; + } + } + + /* for c_loc/c_funloc, the new symbol is the same as the old one */ + *new_sym = sym; + } + else + { + gfc_internal_error ("gfc_iso_c_func_interface(): Unhandled " + "iso_c_binding function: '%s'!\n", sym->name); + } + + return retval; +} + + +/* Resolve a function call, which means resolving the arguments, then figuring + out which entity the name refers to. */ +/* TODO: Check procedure arguments so that an INTENT(IN) isn't passed + to INTENT(OUT) or INTENT(INOUT). */ + +static gfc_try +resolve_function (gfc_expr *expr) +{ + gfc_actual_arglist *arg; + gfc_symbol *sym; + const char *name; + gfc_try t; + int temp; + procedure_type p = PROC_INTRINSIC; + bool no_formal_args; + + sym = NULL; + if (expr->symtree) + sym = expr->symtree->n.sym; + + if (sym && sym->attr.intrinsic + && !gfc_find_function (sym->name) + && gfc_find_subroutine (sym->name) + && sym->attr.function) + { + gfc_error ("Intrinsic subroutine '%s' used as " + "a function at %L", sym->name, &expr->where); + return FAILURE; + } + + if (sym && (sym->attr.flavor == FL_VARIABLE || sym->attr.subroutine)) + { + gfc_error ("'%s' at %L is not a function", sym->name, &expr->where); + return FAILURE; + } + + if (sym && sym->attr.abstract) + { + gfc_error ("ABSTRACT INTERFACE '%s' must not be referenced at %L", + sym->name, &expr->where); + return FAILURE; + } + + /* If the procedure is external, check for usage. */ + if (sym && is_external_proc (sym)) + resolve_global_procedure (sym, &expr->where, 0); + + /* Switch off assumed size checking and do this again for certain kinds + of procedure, once the procedure itself is resolved. */ + need_full_assumed_size++; + + if (expr->symtree && expr->symtree->n.sym) + p = expr->symtree->n.sym->attr.proc; + + no_formal_args = sym && is_external_proc (sym) && sym->formal == NULL; + if (resolve_actual_arglist (expr->value.function.actual, + p, no_formal_args) == FAILURE) + return FAILURE; + + /* Need to setup the call to the correct c_associated, depending on + the number of cptrs to user gives to compare. */ + if (sym && sym->attr.is_iso_c == 1) + { + if (gfc_iso_c_func_interface (sym, expr->value.function.actual, &sym) + == FAILURE) + return FAILURE; + + /* Get the symtree for the new symbol (resolved func). + the old one will be freed later, when it's no longer used. */ + gfc_find_sym_tree (sym->name, sym->ns, 1, &(expr->symtree)); + } + + /* Resume assumed_size checking. */ + need_full_assumed_size--; + + if (sym && sym->ts.type == BT_CHARACTER + && sym->ts.cl + && sym->ts.cl->length == NULL + && !sym->attr.dummy + && expr->value.function.esym == NULL + && !sym->attr.contained) + { + /* Internal procedures are taken care of in resolve_contained_fntype. */ + gfc_error ("Function '%s' is declared CHARACTER(*) and cannot " + "be used at %L since it is not a dummy argument", + sym->name, &expr->where); + return FAILURE; + } + + /* See if function is already resolved. */ + + if (expr->value.function.name != NULL) + { + if (expr->ts.type == BT_UNKNOWN) + expr->ts = sym->ts; + t = SUCCESS; + } + else + { + /* Apply the rules of section 14.1.2. */ + + switch (procedure_kind (sym)) + { + case PTYPE_GENERIC: + t = resolve_generic_f (expr); + break; + + case PTYPE_SPECIFIC: + t = resolve_specific_f (expr); + break; + + case PTYPE_UNKNOWN: + t = resolve_unknown_f (expr); + break; + + default: + gfc_internal_error ("resolve_function(): bad function type"); + } + } + + /* If the expression is still a function (it might have simplified), + then we check to see if we are calling an elemental function. */ + + if (expr->expr_type != EXPR_FUNCTION) + return t; + + temp = need_full_assumed_size; + need_full_assumed_size = 0; + + if (resolve_elemental_actual (expr, NULL) == FAILURE) + return FAILURE; + + if (omp_workshare_flag + && expr->value.function.esym + && ! gfc_elemental (expr->value.function.esym)) + { + gfc_error ("User defined non-ELEMENTAL function '%s' at %L not allowed " + "in WORKSHARE construct", expr->value.function.esym->name, + &expr->where); + t = FAILURE; + } + +#define GENERIC_ID expr->value.function.isym->id + else if (expr->value.function.actual != NULL + && expr->value.function.isym != NULL + && GENERIC_ID != GFC_ISYM_LBOUND + && GENERIC_ID != GFC_ISYM_LEN + && GENERIC_ID != GFC_ISYM_LOC + && GENERIC_ID != GFC_ISYM_PRESENT) + { + /* Array intrinsics must also have the last upper bound of an + assumed size array argument. UBOUND and SIZE have to be + excluded from the check if the second argument is anything + than a constant. */ + + for (arg = expr->value.function.actual; arg; arg = arg->next) + { + if ((GENERIC_ID == GFC_ISYM_UBOUND || GENERIC_ID == GFC_ISYM_SIZE) + && arg->next != NULL && arg->next->expr) + { + if (arg->next->expr->expr_type != EXPR_CONSTANT) + break; + + if (arg->next->name && strncmp(arg->next->name, "kind", 4) == 0) + break; + + if ((int)mpz_get_si (arg->next->expr->value.integer) + < arg->expr->rank) + break; + } + + if (arg->expr != NULL + && arg->expr->rank > 0 + && resolve_assumed_size_actual (arg->expr)) + return FAILURE; + } + } +#undef GENERIC_ID + + need_full_assumed_size = temp; + name = NULL; + + if (!pure_function (expr, &name) && name) + { + if (forall_flag) + { + gfc_error ("reference to non-PURE function '%s' at %L inside a " + "FORALL %s", name, &expr->where, + forall_flag == 2 ? "mask" : "block"); + t = FAILURE; + } + else if (gfc_pure (NULL)) + { + gfc_error ("Function reference to '%s' at %L is to a non-PURE " + "procedure within a PURE procedure", name, &expr->where); + t = FAILURE; + } + } + + /* Functions without the RECURSIVE attribution are not allowed to + * call themselves. */ + if (expr->value.function.esym && !expr->value.function.esym->attr.recursive) + { + gfc_symbol *esym; + esym = expr->value.function.esym; + + if (is_illegal_recursion (esym, gfc_current_ns)) + { + if (esym->attr.entry && esym->ns->entries) + gfc_error ("ENTRY '%s' at %L cannot be called recursively, as" + " function '%s' is not RECURSIVE", + esym->name, &expr->where, esym->ns->entries->sym->name); + else + gfc_error ("Function '%s' at %L cannot be called recursively, as it" + " is not RECURSIVE", esym->name, &expr->where); + + t = FAILURE; + } + } + + /* Character lengths of use associated functions may contains references to + symbols not referenced from the current program unit otherwise. Make sure + those symbols are marked as referenced. */ + + if (expr->ts.type == BT_CHARACTER && expr->value.function.esym + && expr->value.function.esym->attr.use_assoc) + { + gfc_expr_set_symbols_referenced (expr->ts.cl->length); + } + + if (t == SUCCESS + && !((expr->value.function.esym + && expr->value.function.esym->attr.elemental) + || + (expr->value.function.isym + && expr->value.function.isym->elemental))) + find_noncopying_intrinsics (expr->value.function.esym, + expr->value.function.actual); + + /* Make sure that the expression has a typespec that works. */ + if (expr->ts.type == BT_UNKNOWN) + { + if (expr->symtree->n.sym->result + && expr->symtree->n.sym->result->ts.type != BT_UNKNOWN) + expr->ts = expr->symtree->n.sym->result->ts; + } + + return t; +} + + +/************* Subroutine resolution *************/ + +static void +pure_subroutine (gfc_code *c, gfc_symbol *sym) +{ + if (gfc_pure (sym)) + return; + + if (forall_flag) + gfc_error ("Subroutine call to '%s' in FORALL block at %L is not PURE", + sym->name, &c->loc); + else if (gfc_pure (NULL)) + gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name, + &c->loc); +} + + +static match +resolve_generic_s0 (gfc_code *c, gfc_symbol *sym) +{ + gfc_symbol *s; + + if (sym->attr.generic) + { + s = gfc_search_interface (sym->generic, 1, &c->ext.actual); + if (s != NULL) + { + c->resolved_sym = s; + pure_subroutine (c, s); + return MATCH_YES; + } + + /* TODO: Need to search for elemental references in generic interface. */ + } + + if (sym->attr.intrinsic) + return gfc_intrinsic_sub_interface (c, 0); + + return MATCH_NO; +} + + +static gfc_try +resolve_generic_s (gfc_code *c) +{ + gfc_symbol *sym; + match m; + + sym = c->symtree->n.sym; + + for (;;) + { + m = resolve_generic_s0 (c, sym); + if (m == MATCH_YES) + return SUCCESS; + else if (m == MATCH_ERROR) + return FAILURE; + +generic: + if (sym->ns->parent == NULL) + break; + gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym); + + if (sym == NULL) + break; + if (!generic_sym (sym)) + goto generic; + } + + /* Last ditch attempt. See if the reference is to an intrinsic + that possesses a matching interface. 14.1.2.4 */ + sym = c->symtree->n.sym; + + if (!gfc_is_intrinsic (sym, 1, c->loc)) + { + gfc_error ("There is no specific subroutine for the generic '%s' at %L", + sym->name, &c->loc); + return FAILURE; + } + + m = gfc_intrinsic_sub_interface (c, 0); + if (m == MATCH_YES) + return SUCCESS; + if (m == MATCH_NO) + gfc_error ("Generic subroutine '%s' at %L is not consistent with an " + "intrinsic subroutine interface", sym->name, &c->loc); + + return FAILURE; +} + + +/* Set the name and binding label of the subroutine symbol in the call + expression represented by 'c' to include the type and kind of the + second parameter. This function is for resolving the appropriate + version of c_f_pointer() and c_f_procpointer(). For example, a + call to c_f_pointer() for a default integer pointer could have a + name of c_f_pointer_i4. If no second arg exists, which is an error + for these two functions, it defaults to the generic symbol's name + and binding label. */ + +static void +set_name_and_label (gfc_code *c, gfc_symbol *sym, + char *name, char *binding_label) +{ + gfc_expr *arg = NULL; + char type; + int kind; + + /* The second arg of c_f_pointer and c_f_procpointer determines + the type and kind for the procedure name. */ + arg = c->ext.actual->next->expr; + + if (arg != NULL) + { + /* Set up the name to have the given symbol's name, + plus the type and kind. */ + /* a derived type is marked with the type letter 'u' */ + if (arg->ts.type == BT_DERIVED) + { + type = 'd'; + kind = 0; /* set the kind as 0 for now */ + } + else + { + type = gfc_type_letter (arg->ts.type); + kind = arg->ts.kind; + } + + if (arg->ts.type == BT_CHARACTER) + /* Kind info for character strings not needed. */ + kind = 0; + + sprintf (name, "%s_%c%d", sym->name, type, kind); + /* Set up the binding label as the given symbol's label plus + the type and kind. */ + sprintf (binding_label, "%s_%c%d", sym->binding_label, type, kind); + } + else + { + /* If the second arg is missing, set the name and label as + was, cause it should at least be found, and the missing + arg error will be caught by compare_parameters(). */ + sprintf (name, "%s", sym->name); + sprintf (binding_label, "%s", sym->binding_label); + } + + return; +} + + +/* Resolve a generic version of the iso_c_binding procedure given + (sym) to the specific one based on the type and kind of the + argument(s). Currently, this function resolves c_f_pointer() and + c_f_procpointer based on the type and kind of the second argument + (FPTR). Other iso_c_binding procedures aren't specially handled. + Upon successfully exiting, c->resolved_sym will hold the resolved + symbol. Returns MATCH_ERROR if an error occurred; MATCH_YES + otherwise. */ + +match +gfc_iso_c_sub_interface (gfc_code *c, gfc_symbol *sym) +{ + gfc_symbol *new_sym; + /* this is fine, since we know the names won't use the max */ + char name[GFC_MAX_SYMBOL_LEN + 1]; + char binding_label[GFC_MAX_BINDING_LABEL_LEN + 1]; + /* default to success; will override if find error */ + match m = MATCH_YES; + + /* Make sure the actual arguments are in the necessary order (based on the + formal args) before resolving. */ + gfc_procedure_use (sym, &c->ext.actual, &(c->loc)); + + if ((sym->intmod_sym_id == ISOCBINDING_F_POINTER) || + (sym->intmod_sym_id == ISOCBINDING_F_PROCPOINTER)) + { + set_name_and_label (c, sym, name, binding_label); + + if (sym->intmod_sym_id == ISOCBINDING_F_POINTER) + { + if (c->ext.actual != NULL && c->ext.actual->next != NULL) + { + /* Make sure we got a third arg if the second arg has non-zero + rank. We must also check that the type and rank are + correct since we short-circuit this check in + gfc_procedure_use() (called above to sort actual args). */ + if (c->ext.actual->next->expr->rank != 0) + { + if(c->ext.actual->next->next == NULL + || c->ext.actual->next->next->expr == NULL) + { + m = MATCH_ERROR; + gfc_error ("Missing SHAPE parameter for call to %s " + "at %L", sym->name, &(c->loc)); + } + else if (c->ext.actual->next->next->expr->ts.type + != BT_INTEGER + || c->ext.actual->next->next->expr->rank != 1) + { + m = MATCH_ERROR; + gfc_error ("SHAPE parameter for call to %s at %L must " + "be a rank 1 INTEGER array", sym->name, + &(c->loc)); + } + } + } + } + + if (m != MATCH_ERROR) + { + /* the 1 means to add the optional arg to formal list */ + new_sym = get_iso_c_sym (sym, name, binding_label, 1); + + /* for error reporting, say it's declared where the original was */ + new_sym->declared_at = sym->declared_at; + } + } + else + { + /* no differences for c_loc or c_funloc */ + new_sym = sym; + } + + /* set the resolved symbol */ + if (m != MATCH_ERROR) + c->resolved_sym = new_sym; + else + c->resolved_sym = sym; + + return m; +} + + +/* Resolve a subroutine call known to be specific. */ + +static match +resolve_specific_s0 (gfc_code *c, gfc_symbol *sym) +{ + match m; + + /* See if we have an intrinsic interface. */ + if (sym->ts.interface != NULL && !sym->ts.interface->attr.abstract + && !sym->ts.interface->attr.subroutine + && sym->ts.interface->attr.intrinsic) + { + gfc_intrinsic_sym *isym; + + isym = gfc_find_function (sym->ts.interface->name); + + /* Existence of isym should be checked already. */ + gcc_assert (isym); + + sym->ts.type = isym->ts.type; + sym->ts.kind = isym->ts.kind; + sym->attr.subroutine = 1; + goto found; + } + + if(sym->attr.is_iso_c) + { + m = gfc_iso_c_sub_interface (c,sym); + return m; + } + + if (sym->attr.external || sym->attr.if_source == IFSRC_IFBODY) + { + if (sym->attr.dummy) + { + sym->attr.proc = PROC_DUMMY; + goto found; + } + + sym->attr.proc = PROC_EXTERNAL; + goto found; + } + + if (sym->attr.proc == PROC_MODULE || sym->attr.proc == PROC_INTERNAL) + goto found; + + if (sym->attr.intrinsic) + { + m = gfc_intrinsic_sub_interface (c, 1); + if (m == MATCH_YES) + return MATCH_YES; + if (m == MATCH_NO) + gfc_error ("Subroutine '%s' at %L is INTRINSIC but is not compatible " + "with an intrinsic", sym->name, &c->loc); + + return MATCH_ERROR; + } + + return MATCH_NO; + +found: + gfc_procedure_use (sym, &c->ext.actual, &c->loc); + + c->resolved_sym = sym; + pure_subroutine (c, sym); + + return MATCH_YES; +} + + +static gfc_try +resolve_specific_s (gfc_code *c) +{ + gfc_symbol *sym; + match m; + + sym = c->symtree->n.sym; + + for (;;) + { + m = resolve_specific_s0 (c, sym); + if (m == MATCH_YES) + return SUCCESS; + if (m == MATCH_ERROR) + return FAILURE; + + if (sym->ns->parent == NULL) + break; + + gfc_find_symbol (sym->name, sym->ns->parent, 1, &sym); + + if (sym == NULL) + break; + } + + sym = c->symtree->n.sym; + gfc_error ("Unable to resolve the specific subroutine '%s' at %L", + sym->name, &c->loc); + + return FAILURE; +} + + +/* Resolve a subroutine call not known to be generic nor specific. */ + +static gfc_try +resolve_unknown_s (gfc_code *c) +{ + gfc_symbol *sym; + + sym = c->symtree->n.sym; + + if (sym->attr.dummy) + { + sym->attr.proc = PROC_DUMMY; + goto found; + } + + /* See if we have an intrinsic function reference. */ + + if (gfc_is_intrinsic (sym, 1, c->loc)) + { + if (gfc_intrinsic_sub_interface (c, 1) == MATCH_YES) + return SUCCESS; + return FAILURE; + } + + /* The reference is to an external name. */ + +found: + gfc_procedure_use (sym, &c->ext.actual, &c->loc); + + c->resolved_sym = sym; + + pure_subroutine (c, sym); + + return SUCCESS; +} + + +/* Resolve a subroutine call. Although it was tempting to use the same code + for functions, subroutines and functions are stored differently and this + makes things awkward. */ + +static gfc_try +resolve_call (gfc_code *c) +{ + gfc_try t; + procedure_type ptype = PROC_INTRINSIC; + gfc_symbol *csym, *sym; + bool no_formal_args; + + csym = c->symtree ? c->symtree->n.sym : NULL; + + if (csym && csym->ts.type != BT_UNKNOWN) + { + gfc_error ("'%s' at %L has a type, which is not consistent with " + "the CALL at %L", csym->name, &csym->declared_at, &c->loc); + return FAILURE; + } + + if (csym && gfc_current_ns->parent && csym->ns != gfc_current_ns) + { + gfc_symtree *st; + gfc_find_sym_tree (csym->name, gfc_current_ns, 1, &st); + sym = st ? st->n.sym : NULL; + if (sym && csym != sym + && sym->ns == gfc_current_ns + && sym->attr.flavor == FL_PROCEDURE + && sym->attr.contained) + { + sym->refs++; + if (csym->attr.generic) + c->symtree->n.sym = sym; + else + c->symtree = st; + csym = c->symtree->n.sym; + } + } + + /* If external, check for usage. */ + if (csym && is_external_proc (csym)) + resolve_global_procedure (csym, &c->loc, 1); + + /* Subroutines without the RECURSIVE attribution are not allowed to + * call themselves. */ + if (csym && is_illegal_recursion (csym, gfc_current_ns)) + { + if (csym->attr.entry && csym->ns->entries) + gfc_error ("ENTRY '%s' at %L cannot be called recursively, as" + " subroutine '%s' is not RECURSIVE", + csym->name, &c->loc, csym->ns->entries->sym->name); + else + gfc_error ("SUBROUTINE '%s' at %L cannot be called recursively, as it" + " is not RECURSIVE", csym->name, &c->loc); + + t = FAILURE; + } + + /* Switch off assumed size checking and do this again for certain kinds + of procedure, once the procedure itself is resolved. */ + need_full_assumed_size++; + + if (csym) + ptype = csym->attr.proc; + + no_formal_args = csym && is_external_proc (csym) && csym->formal == NULL; + if (resolve_actual_arglist (c->ext.actual, ptype, + no_formal_args) == FAILURE) + return FAILURE; + + /* Resume assumed_size checking. */ + need_full_assumed_size--; + + t = SUCCESS; + if (c->resolved_sym == NULL) + { + c->resolved_isym = NULL; + switch (procedure_kind (csym)) + { + case PTYPE_GENERIC: + t = resolve_generic_s (c); + break; + + case PTYPE_SPECIFIC: + t = resolve_specific_s (c); + break; + + case PTYPE_UNKNOWN: + t = resolve_unknown_s (c); + break; + + default: + gfc_internal_error ("resolve_subroutine(): bad function type"); + } + } + + /* Some checks of elemental subroutine actual arguments. */ + if (resolve_elemental_actual (NULL, c) == FAILURE) + return FAILURE; + + if (t == SUCCESS && !(c->resolved_sym && c->resolved_sym->attr.elemental)) + find_noncopying_intrinsics (c->resolved_sym, c->ext.actual); + return t; +} + + +/* Compare the shapes of two arrays that have non-NULL shapes. If both + op1->shape and op2->shape are non-NULL return SUCCESS if their shapes + match. If both op1->shape and op2->shape are non-NULL return FAILURE + if their shapes do not match. If either op1->shape or op2->shape is + NULL, return SUCCESS. */ + +static gfc_try +compare_shapes (gfc_expr *op1, gfc_expr *op2) +{ + gfc_try t; + int i; + + t = SUCCESS; + + if (op1->shape != NULL && op2->shape != NULL) + { + for (i = 0; i < op1->rank; i++) + { + if (mpz_cmp (op1->shape[i], op2->shape[i]) != 0) + { + gfc_error ("Shapes for operands at %L and %L are not conformable", + &op1->where, &op2->where); + t = FAILURE; + break; + } + } + } + + return t; +} + + +/* Resolve an operator expression node. This can involve replacing the + operation with a user defined function call. */ + +static gfc_try +resolve_operator (gfc_expr *e) +{ + gfc_expr *op1, *op2; + char msg[200]; + bool dual_locus_error; + gfc_try t; + + /* Resolve all subnodes-- give them types. */ + + switch (e->value.op.op) + { + default: + if (gfc_resolve_expr (e->value.op.op2) == FAILURE) + return FAILURE; + + /* Fall through... */ + + case INTRINSIC_NOT: + case INTRINSIC_UPLUS: + case INTRINSIC_UMINUS: + case INTRINSIC_PARENTHESES: + if (gfc_resolve_expr (e->value.op.op1) == FAILURE) + return FAILURE; + break; + } + + /* Typecheck the new node. */ + + op1 = e->value.op.op1; + op2 = e->value.op.op2; + dual_locus_error = false; + + if ((op1 && op1->expr_type == EXPR_NULL) + || (op2 && op2->expr_type == EXPR_NULL)) + { + sprintf (msg, _("Invalid context for NULL() pointer at %%L")); + goto bad_op; + } + + switch (e->value.op.op) + { + case INTRINSIC_UPLUS: + case INTRINSIC_UMINUS: + if (op1->ts.type == BT_INTEGER + || op1->ts.type == BT_REAL + || op1->ts.type == BT_COMPLEX) + { + e->ts = op1->ts; + break; + } + + sprintf (msg, _("Operand of unary numeric operator '%s' at %%L is %s"), + gfc_op2string (e->value.op.op), gfc_typename (&e->ts)); + goto bad_op; + + case INTRINSIC_PLUS: + case INTRINSIC_MINUS: + case INTRINSIC_TIMES: + case INTRINSIC_DIVIDE: + case INTRINSIC_POWER: + if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts)) + { + gfc_type_convert_binary (e); + break; + } + + sprintf (msg, + _("Operands of binary numeric operator '%s' at %%L are %s/%s"), + gfc_op2string (e->value.op.op), gfc_typename (&op1->ts), + gfc_typename (&op2->ts)); + goto bad_op; + + case INTRINSIC_CONCAT: + if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER + && op1->ts.kind == op2->ts.kind) + { + e->ts.type = BT_CHARACTER; + e->ts.kind = op1->ts.kind; + break; + } + + sprintf (msg, + _("Operands of string concatenation operator at %%L are %s/%s"), + gfc_typename (&op1->ts), gfc_typename (&op2->ts)); + goto bad_op; + + case INTRINSIC_AND: + case INTRINSIC_OR: + case INTRINSIC_EQV: + case INTRINSIC_NEQV: + if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL) + { + e->ts.type = BT_LOGICAL; + e->ts.kind = gfc_kind_max (op1, op2); + if (op1->ts.kind < e->ts.kind) + gfc_convert_type (op1, &e->ts, 2); + else if (op2->ts.kind < e->ts.kind) + gfc_convert_type (op2, &e->ts, 2); + break; + } + + sprintf (msg, _("Operands of logical operator '%s' at %%L are %s/%s"), + gfc_op2string (e->value.op.op), gfc_typename (&op1->ts), + gfc_typename (&op2->ts)); + + goto bad_op; + + case INTRINSIC_NOT: + if (op1->ts.type == BT_LOGICAL) + { + e->ts.type = BT_LOGICAL; + e->ts.kind = op1->ts.kind; + break; + } + + sprintf (msg, _("Operand of .not. operator at %%L is %s"), + gfc_typename (&op1->ts)); + goto bad_op; + + case INTRINSIC_GT: + case INTRINSIC_GT_OS: + case INTRINSIC_GE: + case INTRINSIC_GE_OS: + case INTRINSIC_LT: + case INTRINSIC_LT_OS: + case INTRINSIC_LE: + case INTRINSIC_LE_OS: + if (op1->ts.type == BT_COMPLEX || op2->ts.type == BT_COMPLEX) + { + strcpy (msg, _("COMPLEX quantities cannot be compared at %L")); + goto bad_op; + } + + /* Fall through... */ + + case INTRINSIC_EQ: + case INTRINSIC_EQ_OS: + case INTRINSIC_NE: + case INTRINSIC_NE_OS: + if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER + && op1->ts.kind == op2->ts.kind) + { + e->ts.type = BT_LOGICAL; + e->ts.kind = gfc_default_logical_kind; + break; + } + + if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts)) + { + gfc_type_convert_binary (e); + + e->ts.type = BT_LOGICAL; + e->ts.kind = gfc_default_logical_kind; + break; + } + + if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL) + sprintf (msg, + _("Logicals at %%L must be compared with %s instead of %s"), + (e->value.op.op == INTRINSIC_EQ + || e->value.op.op == INTRINSIC_EQ_OS) + ? ".eqv." : ".neqv.", gfc_op2string (e->value.op.op)); + else + sprintf (msg, + _("Operands of comparison operator '%s' at %%L are %s/%s"), + gfc_op2string (e->value.op.op), gfc_typename (&op1->ts), + gfc_typename (&op2->ts)); + + goto bad_op; + + case INTRINSIC_USER: + if (e->value.op.uop->op == NULL) + sprintf (msg, _("Unknown operator '%s' at %%L"), e->value.op.uop->name); + else if (op2 == NULL) + sprintf (msg, _("Operand of user operator '%s' at %%L is %s"), + e->value.op.uop->name, gfc_typename (&op1->ts)); + else + sprintf (msg, _("Operands of user operator '%s' at %%L are %s/%s"), + e->value.op.uop->name, gfc_typename (&op1->ts), + gfc_typename (&op2->ts)); + + goto bad_op; + + case INTRINSIC_PARENTHESES: + e->ts = op1->ts; + if (e->ts.type == BT_CHARACTER) + e->ts.cl = op1->ts.cl; + break; + + default: + gfc_internal_error ("resolve_operator(): Bad intrinsic"); + } + + /* Deal with arrayness of an operand through an operator. */ + + t = SUCCESS; + + switch (e->value.op.op) + { + case INTRINSIC_PLUS: + case INTRINSIC_MINUS: + case INTRINSIC_TIMES: + case INTRINSIC_DIVIDE: + case INTRINSIC_POWER: + case INTRINSIC_CONCAT: + case INTRINSIC_AND: + case INTRINSIC_OR: + case INTRINSIC_EQV: + case INTRINSIC_NEQV: + case INTRINSIC_EQ: + case INTRINSIC_EQ_OS: + case INTRINSIC_NE: + case INTRINSIC_NE_OS: + case INTRINSIC_GT: + case INTRINSIC_GT_OS: + case INTRINSIC_GE: + case INTRINSIC_GE_OS: + case INTRINSIC_LT: + case INTRINSIC_LT_OS: + case INTRINSIC_LE: + case INTRINSIC_LE_OS: + + if (op1->rank == 0 && op2->rank == 0) + e->rank = 0; + + if (op1->rank == 0 && op2->rank != 0) + { + e->rank = op2->rank; + + if (e->shape == NULL) + e->shape = gfc_copy_shape (op2->shape, op2->rank); + } + + if (op1->rank != 0 && op2->rank == 0) + { + e->rank = op1->rank; + + if (e->shape == NULL) + e->shape = gfc_copy_shape (op1->shape, op1->rank); + } + + if (op1->rank != 0 && op2->rank != 0) + { + if (op1->rank == op2->rank) + { + e->rank = op1->rank; + if (e->shape == NULL) + { + t = compare_shapes(op1, op2); + if (t == FAILURE) + e->shape = NULL; + else + e->shape = gfc_copy_shape (op1->shape, op1->rank); + } + } + else + { + /* Allow higher level expressions to work. */ + e->rank = 0; + + /* Try user-defined operators, and otherwise throw an error. */ + dual_locus_error = true; + sprintf (msg, + _("Inconsistent ranks for operator at %%L and %%L")); + goto bad_op; + } + } + + break; + + case INTRINSIC_PARENTHESES: + case INTRINSIC_NOT: + case INTRINSIC_UPLUS: + case INTRINSIC_UMINUS: + /* Simply copy arrayness attribute */ + e->rank = op1->rank; + + if (e->shape == NULL) + e->shape = gfc_copy_shape (op1->shape, op1->rank); + + break; + + default: + break; + } + + /* Attempt to simplify the expression. */ + if (t == SUCCESS) + { + t = gfc_simplify_expr (e, 0); + /* Some calls do not succeed in simplification and return FAILURE + even though there is no error; e.g. variable references to + PARAMETER arrays. */ + if (!gfc_is_constant_expr (e)) + t = SUCCESS; + } + return t; + +bad_op: + + if (gfc_extend_expr (e) == SUCCESS) + return SUCCESS; + + if (dual_locus_error) + gfc_error (msg, &op1->where, &op2->where); + else + gfc_error (msg, &e->where); + + return FAILURE; +} + + +/************** Array resolution subroutines **************/ + +typedef enum +{ CMP_LT, CMP_EQ, CMP_GT, CMP_UNKNOWN } +comparison; + +/* Compare two integer expressions. */ + +static comparison +compare_bound (gfc_expr *a, gfc_expr *b) +{ + int i; + + if (a == NULL || a->expr_type != EXPR_CONSTANT + || b == NULL || b->expr_type != EXPR_CONSTANT) + return CMP_UNKNOWN; + + /* If either of the types isn't INTEGER, we must have + raised an error earlier. */ + + if (a->ts.type != BT_INTEGER || b->ts.type != BT_INTEGER) + return CMP_UNKNOWN; + + i = mpz_cmp (a->value.integer, b->value.integer); + + if (i < 0) + return CMP_LT; + if (i > 0) + return CMP_GT; + return CMP_EQ; +} + + +/* Compare an integer expression with an integer. */ + +static comparison +compare_bound_int (gfc_expr *a, int b) +{ + int i; + + if (a == NULL || a->expr_type != EXPR_CONSTANT) + return CMP_UNKNOWN; + + if (a->ts.type != BT_INTEGER) + gfc_internal_error ("compare_bound_int(): Bad expression"); + + i = mpz_cmp_si (a->value.integer, b); + + if (i < 0) + return CMP_LT; + if (i > 0) + return CMP_GT; + return CMP_EQ; +} + + +/* Compare an integer expression with a mpz_t. */ + +static comparison +compare_bound_mpz_t (gfc_expr *a, mpz_t b) +{ + int i; + + if (a == NULL || a->expr_type != EXPR_CONSTANT) + return CMP_UNKNOWN; + + if (a->ts.type != BT_INTEGER) + gfc_internal_error ("compare_bound_int(): Bad expression"); + + i = mpz_cmp (a->value.integer, b); + + if (i < 0) + return CMP_LT; + if (i > 0) + return CMP_GT; + return CMP_EQ; +} + + +/* Compute the last value of a sequence given by a triplet. + Return 0 if it wasn't able to compute the last value, or if the + sequence if empty, and 1 otherwise. */ + +static int +compute_last_value_for_triplet (gfc_expr *start, gfc_expr *end, + gfc_expr *stride, mpz_t last) +{ + mpz_t rem; + + if (start == NULL || start->expr_type != EXPR_CONSTANT + || end == NULL || end->expr_type != EXPR_CONSTANT + || (stride != NULL && stride->expr_type != EXPR_CONSTANT)) + return 0; + + if (start->ts.type != BT_INTEGER || end->ts.type != BT_INTEGER + || (stride != NULL && stride->ts.type != BT_INTEGER)) + return 0; + + if (stride == NULL || compare_bound_int(stride, 1) == CMP_EQ) + { + if (compare_bound (start, end) == CMP_GT) + return 0; + mpz_set (last, end->value.integer); + return 1; + } + + if (compare_bound_int (stride, 0) == CMP_GT) + { + /* Stride is positive */ + if (mpz_cmp (start->value.integer, end->value.integer) > 0) + return 0; + } + else + { + /* Stride is negative */ + if (mpz_cmp (start->value.integer, end->value.integer) < 0) + return 0; + } + + mpz_init (rem); + mpz_sub (rem, end->value.integer, start->value.integer); + mpz_tdiv_r (rem, rem, stride->value.integer); + mpz_sub (last, end->value.integer, rem); + mpz_clear (rem); + + return 1; +} + + +/* Compare a single dimension of an array reference to the array + specification. */ + +static gfc_try +check_dimension (int i, gfc_array_ref *ar, gfc_array_spec *as) +{ + mpz_t last_value; + +/* Given start, end and stride values, calculate the minimum and + maximum referenced indexes. */ + + switch (ar->dimen_type[i]) + { + case DIMEN_VECTOR: + break; + + case DIMEN_ELEMENT: + if (compare_bound (ar->start[i], as->lower[i]) == CMP_LT) + { + gfc_warning ("Array reference at %L is out of bounds " + "(%ld < %ld) in dimension %d", &ar->c_where[i], + mpz_get_si (ar->start[i]->value.integer), + mpz_get_si (as->lower[i]->value.integer), i+1); + return SUCCESS; + } + if (compare_bound (ar->start[i], as->upper[i]) == CMP_GT) + { + gfc_warning ("Array reference at %L is out of bounds " + "(%ld > %ld) in dimension %d", &ar->c_where[i], + mpz_get_si (ar->start[i]->value.integer), + mpz_get_si (as->upper[i]->value.integer), i+1); + return SUCCESS; + } + + break; + + case DIMEN_RANGE: + { +#define AR_START (ar->start[i] ? ar->start[i] : as->lower[i]) +#define AR_END (ar->end[i] ? ar->end[i] : as->upper[i]) + + comparison comp_start_end = compare_bound (AR_START, AR_END); + + /* Check for zero stride, which is not allowed. */ + if (compare_bound_int (ar->stride[i], 0) == CMP_EQ) + { + gfc_error ("Illegal stride of zero at %L", &ar->c_where[i]); + return FAILURE; + } + + /* if start == len || (stride > 0 && start < len) + || (stride < 0 && start > len), + then the array section contains at least one element. In this + case, there is an out-of-bounds access if + (start < lower || start > upper). */ + if (compare_bound (AR_START, AR_END) == CMP_EQ + || ((compare_bound_int (ar->stride[i], 0) == CMP_GT + || ar->stride[i] == NULL) && comp_start_end == CMP_LT) + || (compare_bound_int (ar->stride[i], 0) == CMP_LT + && comp_start_end == CMP_GT)) + { + if (compare_bound (AR_START, as->lower[i]) == CMP_LT) + { + gfc_warning ("Lower array reference at %L is out of bounds " + "(%ld < %ld) in dimension %d", &ar->c_where[i], + mpz_get_si (AR_START->value.integer), + mpz_get_si (as->lower[i]->value.integer), i+1); + return SUCCESS; + } + if (compare_bound (AR_START, as->upper[i]) == CMP_GT) + { + gfc_warning ("Lower array reference at %L is out of bounds " + "(%ld > %ld) in dimension %d", &ar->c_where[i], + mpz_get_si (AR_START->value.integer), + mpz_get_si (as->upper[i]->value.integer), i+1); + return SUCCESS; + } + } + + /* If we can compute the highest index of the array section, + then it also has to be between lower and upper. */ + mpz_init (last_value); + if (compute_last_value_for_triplet (AR_START, AR_END, ar->stride[i], + last_value)) + { + if (compare_bound_mpz_t (as->lower[i], last_value) == CMP_GT) + { + gfc_warning ("Upper array reference at %L is out of bounds " + "(%ld < %ld) in dimension %d", &ar->c_where[i], + mpz_get_si (last_value), + mpz_get_si (as->lower[i]->value.integer), i+1); + mpz_clear (last_value); + return SUCCESS; + } + if (compare_bound_mpz_t (as->upper[i], last_value) == CMP_LT) + { + gfc_warning ("Upper array reference at %L is out of bounds " + "(%ld > %ld) in dimension %d", &ar->c_where[i], + mpz_get_si (last_value), + mpz_get_si (as->upper[i]->value.integer), i+1); + mpz_clear (last_value); + return SUCCESS; + } + } + mpz_clear (last_value); + +#undef AR_START +#undef AR_END + } + break; + + default: + gfc_internal_error ("check_dimension(): Bad array reference"); + } + + return SUCCESS; +} + + +/* Compare an array reference with an array specification. */ + +static gfc_try +compare_spec_to_ref (gfc_array_ref *ar) +{ + gfc_array_spec *as; + int i; + + as = ar->as; + i = as->rank - 1; + /* TODO: Full array sections are only allowed as actual parameters. */ + if (as->type == AS_ASSUMED_SIZE + && (/*ar->type == AR_FULL + ||*/ (ar->type == AR_SECTION + && ar->dimen_type[i] == DIMEN_RANGE && ar->end[i] == NULL))) + { + gfc_error ("Rightmost upper bound of assumed size array section " + "not specified at %L", &ar->where); + return FAILURE; + } + + if (ar->type == AR_FULL) + return SUCCESS; + + if (as->rank != ar->dimen) + { + gfc_error ("Rank mismatch in array reference at %L (%d/%d)", + &ar->where, ar->dimen, as->rank); + return FAILURE; + } + + for (i = 0; i < as->rank; i++) + if (check_dimension (i, ar, as) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +/* Resolve one part of an array index. */ + +gfc_try +gfc_resolve_index (gfc_expr *index, int check_scalar) +{ + gfc_typespec ts; + + if (index == NULL) + return SUCCESS; + + if (gfc_resolve_expr (index) == FAILURE) + return FAILURE; + + if (check_scalar && index->rank != 0) + { + gfc_error ("Array index at %L must be scalar", &index->where); + return FAILURE; + } + + if (index->ts.type != BT_INTEGER && index->ts.type != BT_REAL) + { + gfc_error ("Array index at %L must be of INTEGER type, found %s", + &index->where, gfc_basic_typename (index->ts.type)); + return FAILURE; + } + + if (index->ts.type == BT_REAL) + if (gfc_notify_std (GFC_STD_LEGACY, "Extension: REAL array index at %L", + &index->where) == FAILURE) + return FAILURE; + + if (index->ts.kind != gfc_index_integer_kind + || index->ts.type != BT_INTEGER) + { + gfc_clear_ts (&ts); + ts.type = BT_INTEGER; + ts.kind = gfc_index_integer_kind; + + gfc_convert_type_warn (index, &ts, 2, 0); + } + + return SUCCESS; +} + +/* Resolve a dim argument to an intrinsic function. */ + +gfc_try +gfc_resolve_dim_arg (gfc_expr *dim) +{ + if (dim == NULL) + return SUCCESS; + + if (gfc_resolve_expr (dim) == FAILURE) + return FAILURE; + + if (dim->rank != 0) + { + gfc_error ("Argument dim at %L must be scalar", &dim->where); + return FAILURE; + + } + + if (dim->ts.type != BT_INTEGER) + { + gfc_error ("Argument dim at %L must be of INTEGER type", &dim->where); + return FAILURE; + } + + if (dim->ts.kind != gfc_index_integer_kind) + { + gfc_typespec ts; + + ts.type = BT_INTEGER; + ts.kind = gfc_index_integer_kind; + + gfc_convert_type_warn (dim, &ts, 2, 0); + } + + return SUCCESS; +} + +/* Given an expression that contains array references, update those array + references to point to the right array specifications. While this is + filled in during matching, this information is difficult to save and load + in a module, so we take care of it here. + + The idea here is that the original array reference comes from the + base symbol. We traverse the list of reference structures, setting + the stored reference to references. Component references can + provide an additional array specification. */ + +static void +find_array_spec (gfc_expr *e) +{ + gfc_array_spec *as; + gfc_component *c; + gfc_symbol *derived; + gfc_ref *ref; + + as = e->symtree->n.sym->as; + derived = NULL; + + for (ref = e->ref; ref; ref = ref->next) + switch (ref->type) + { + case REF_ARRAY: + if (as == NULL) + gfc_internal_error ("find_array_spec(): Missing spec"); + + ref->u.ar.as = as; + as = NULL; + break; + + case REF_COMPONENT: + if (derived == NULL) + derived = e->symtree->n.sym->ts.derived; + + c = derived->components; + + for (; c; c = c->next) + if (c == ref->u.c.component) + { + /* Track the sequence of component references. */ + if (c->ts.type == BT_DERIVED) + derived = c->ts.derived; + break; + } + + if (c == NULL) + gfc_internal_error ("find_array_spec(): Component not found"); + + if (c->attr.dimension) + { + if (as != NULL) + gfc_internal_error ("find_array_spec(): unused as(1)"); + as = c->as; + } + + break; + + case REF_SUBSTRING: + break; + } + + if (as != NULL) + gfc_internal_error ("find_array_spec(): unused as(2)"); +} + + +/* Resolve an array reference. */ + +static gfc_try +resolve_array_ref (gfc_array_ref *ar) +{ + int i, check_scalar; + gfc_expr *e; + + for (i = 0; i < ar->dimen; i++) + { + check_scalar = ar->dimen_type[i] == DIMEN_RANGE; + + if (gfc_resolve_index (ar->start[i], check_scalar) == FAILURE) + return FAILURE; + if (gfc_resolve_index (ar->end[i], check_scalar) == FAILURE) + return FAILURE; + if (gfc_resolve_index (ar->stride[i], check_scalar) == FAILURE) + return FAILURE; + + e = ar->start[i]; + + if (ar->dimen_type[i] == DIMEN_UNKNOWN) + switch (e->rank) + { + case 0: + ar->dimen_type[i] = DIMEN_ELEMENT; + break; + + case 1: + ar->dimen_type[i] = DIMEN_VECTOR; + if (e->expr_type == EXPR_VARIABLE + && e->symtree->n.sym->ts.type == BT_DERIVED) + ar->start[i] = gfc_get_parentheses (e); + break; + + default: + gfc_error ("Array index at %L is an array of rank %d", + &ar->c_where[i], e->rank); + return FAILURE; + } + } + + /* If the reference type is unknown, figure out what kind it is. */ + + if (ar->type == AR_UNKNOWN) + { + ar->type = AR_ELEMENT; + for (i = 0; i < ar->dimen; i++) + if (ar->dimen_type[i] == DIMEN_RANGE + || ar->dimen_type[i] == DIMEN_VECTOR) + { + ar->type = AR_SECTION; + break; + } + } + + if (!ar->as->cray_pointee && compare_spec_to_ref (ar) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +static gfc_try +resolve_substring (gfc_ref *ref) +{ + if (ref->u.ss.start != NULL) + { + if (gfc_resolve_expr (ref->u.ss.start) == FAILURE) + return FAILURE; + + if (ref->u.ss.start->ts.type != BT_INTEGER) + { + gfc_error ("Substring start index at %L must be of type INTEGER", + &ref->u.ss.start->where); + return FAILURE; + } + + if (ref->u.ss.start->rank != 0) + { + gfc_error ("Substring start index at %L must be scalar", + &ref->u.ss.start->where); + return FAILURE; + } + + if (compare_bound_int (ref->u.ss.start, 1) == CMP_LT + && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ + || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT)) + { + gfc_error ("Substring start index at %L is less than one", + &ref->u.ss.start->where); + return FAILURE; + } + } + + if (ref->u.ss.end != NULL) + { + if (gfc_resolve_expr (ref->u.ss.end) == FAILURE) + return FAILURE; + + if (ref->u.ss.end->ts.type != BT_INTEGER) + { + gfc_error ("Substring end index at %L must be of type INTEGER", + &ref->u.ss.end->where); + return FAILURE; + } + + if (ref->u.ss.end->rank != 0) + { + gfc_error ("Substring end index at %L must be scalar", + &ref->u.ss.end->where); + return FAILURE; + } + + if (ref->u.ss.length != NULL + && compare_bound (ref->u.ss.end, ref->u.ss.length->length) == CMP_GT + && (compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_EQ + || compare_bound (ref->u.ss.end, ref->u.ss.start) == CMP_GT)) + { + gfc_error ("Substring end index at %L exceeds the string length", + &ref->u.ss.start->where); + return FAILURE; + } + } + + return SUCCESS; +} + + +/* This function supplies missing substring charlens. */ + +void +gfc_resolve_substring_charlen (gfc_expr *e) +{ + gfc_ref *char_ref; + gfc_expr *start, *end; + + for (char_ref = e->ref; char_ref; char_ref = char_ref->next) + if (char_ref->type == REF_SUBSTRING) + break; + + if (!char_ref) + return; + + gcc_assert (char_ref->next == NULL); + + if (e->ts.cl) + { + if (e->ts.cl->length) + gfc_free_expr (e->ts.cl->length); + else if (e->expr_type == EXPR_VARIABLE + && e->symtree->n.sym->attr.dummy) + return; + } + + e->ts.type = BT_CHARACTER; + e->ts.kind = gfc_default_character_kind; + + if (!e->ts.cl) + { + e->ts.cl = gfc_get_charlen (); + e->ts.cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = e->ts.cl; + } + + if (char_ref->u.ss.start) + start = gfc_copy_expr (char_ref->u.ss.start); + else + start = gfc_int_expr (1); + + if (char_ref->u.ss.end) + end = gfc_copy_expr (char_ref->u.ss.end); + else if (e->expr_type == EXPR_VARIABLE) + end = gfc_copy_expr (e->symtree->n.sym->ts.cl->length); + else + end = NULL; + + if (!start || !end) + return; + + /* Length = (end - start +1). */ + e->ts.cl->length = gfc_subtract (end, start); + e->ts.cl->length = gfc_add (e->ts.cl->length, gfc_int_expr (1)); + + e->ts.cl->length->ts.type = BT_INTEGER; + e->ts.cl->length->ts.kind = gfc_charlen_int_kind;; + + /* Make sure that the length is simplified. */ + gfc_simplify_expr (e->ts.cl->length, 1); + gfc_resolve_expr (e->ts.cl->length); +} + + +/* Resolve subtype references. */ + +static gfc_try +resolve_ref (gfc_expr *expr) +{ + int current_part_dimension, n_components, seen_part_dimension; + gfc_ref *ref; + + for (ref = expr->ref; ref; ref = ref->next) + if (ref->type == REF_ARRAY && ref->u.ar.as == NULL) + { + find_array_spec (expr); + break; + } + + for (ref = expr->ref; ref; ref = ref->next) + switch (ref->type) + { + case REF_ARRAY: + if (resolve_array_ref (&ref->u.ar) == FAILURE) + return FAILURE; + break; + + case REF_COMPONENT: + break; + + case REF_SUBSTRING: + resolve_substring (ref); + break; + } + + /* Check constraints on part references. */ + + current_part_dimension = 0; + seen_part_dimension = 0; + n_components = 0; + + for (ref = expr->ref; ref; ref = ref->next) + { + switch (ref->type) + { + case REF_ARRAY: + switch (ref->u.ar.type) + { + case AR_FULL: + case AR_SECTION: + current_part_dimension = 1; + break; + + case AR_ELEMENT: + current_part_dimension = 0; + break; + + case AR_UNKNOWN: + gfc_internal_error ("resolve_ref(): Bad array reference"); + } + + break; + + case REF_COMPONENT: + if (current_part_dimension || seen_part_dimension) + { + if (ref->u.c.component->attr.pointer) + { + gfc_error ("Component to the right of a part reference " + "with nonzero rank must not have the POINTER " + "attribute at %L", &expr->where); + return FAILURE; + } + else if (ref->u.c.component->attr.allocatable) + { + gfc_error ("Component to the right of a part reference " + "with nonzero rank must not have the ALLOCATABLE " + "attribute at %L", &expr->where); + return FAILURE; + } + } + + n_components++; + break; + + case REF_SUBSTRING: + break; + } + + if (((ref->type == REF_COMPONENT && n_components > 1) + || ref->next == NULL) + && current_part_dimension + && seen_part_dimension) + { + gfc_error ("Two or more part references with nonzero rank must " + "not be specified at %L", &expr->where); + return FAILURE; + } + + if (ref->type == REF_COMPONENT) + { + if (current_part_dimension) + seen_part_dimension = 1; + + /* reset to make sure */ + current_part_dimension = 0; + } + } + + return SUCCESS; +} + + +/* Given an expression, determine its shape. This is easier than it sounds. + Leaves the shape array NULL if it is not possible to determine the shape. */ + +static void +expression_shape (gfc_expr *e) +{ + mpz_t array[GFC_MAX_DIMENSIONS]; + int i; + + if (e->rank == 0 || e->shape != NULL) + return; + + for (i = 0; i < e->rank; i++) + if (gfc_array_dimen_size (e, i, &array[i]) == FAILURE) + goto fail; + + e->shape = gfc_get_shape (e->rank); + + memcpy (e->shape, array, e->rank * sizeof (mpz_t)); + + return; + +fail: + for (i--; i >= 0; i--) + mpz_clear (array[i]); +} + + +/* Given a variable expression node, compute the rank of the expression by + examining the base symbol and any reference structures it may have. */ + +static void +expression_rank (gfc_expr *e) +{ + gfc_ref *ref; + int i, rank; + + /* Just to make sure, because EXPR_COMPCALL's also have an e->ref and that + could lead to serious confusion... */ + gcc_assert (e->expr_type != EXPR_COMPCALL); + + if (e->ref == NULL) + { + if (e->expr_type == EXPR_ARRAY) + goto done; + /* Constructors can have a rank different from one via RESHAPE(). */ + + if (e->symtree == NULL) + { + e->rank = 0; + goto done; + } + + e->rank = (e->symtree->n.sym->as == NULL) + ? 0 : e->symtree->n.sym->as->rank; + goto done; + } + + rank = 0; + + for (ref = e->ref; ref; ref = ref->next) + { + if (ref->type != REF_ARRAY) + continue; + + if (ref->u.ar.type == AR_FULL) + { + rank = ref->u.ar.as->rank; + break; + } + + if (ref->u.ar.type == AR_SECTION) + { + /* Figure out the rank of the section. */ + if (rank != 0) + gfc_internal_error ("expression_rank(): Two array specs"); + + for (i = 0; i < ref->u.ar.dimen; i++) + if (ref->u.ar.dimen_type[i] == DIMEN_RANGE + || ref->u.ar.dimen_type[i] == DIMEN_VECTOR) + rank++; + + break; + } + } + + e->rank = rank; + +done: + expression_shape (e); +} + + +/* Resolve a variable expression. */ + +static gfc_try +resolve_variable (gfc_expr *e) +{ + gfc_symbol *sym; + gfc_try t; + + t = SUCCESS; + + if (e->symtree == NULL) + return FAILURE; + + if (e->ref && resolve_ref (e) == FAILURE) + return FAILURE; + + sym = e->symtree->n.sym; + if (sym->attr.flavor == FL_PROCEDURE && !sym->attr.function) + { + e->ts.type = BT_PROCEDURE; + goto resolve_procedure; + } + + if (sym->ts.type != BT_UNKNOWN) + gfc_variable_attr (e, &e->ts); + else + { + /* Must be a simple variable reference. */ + if (gfc_set_default_type (sym, 1, sym->ns) == FAILURE) + return FAILURE; + e->ts = sym->ts; + } + + if (check_assumed_size_reference (sym, e)) + return FAILURE; + + /* Deal with forward references to entries during resolve_code, to + satisfy, at least partially, 12.5.2.5. */ + if (gfc_current_ns->entries + && current_entry_id == sym->entry_id + && cs_base + && cs_base->current + && cs_base->current->op != EXEC_ENTRY) + { + gfc_entry_list *entry; + gfc_formal_arglist *formal; + int n; + bool seen; + + /* If the symbol is a dummy... */ + if (sym->attr.dummy && sym->ns == gfc_current_ns) + { + entry = gfc_current_ns->entries; + seen = false; + + /* ...test if the symbol is a parameter of previous entries. */ + for (; entry && entry->id <= current_entry_id; entry = entry->next) + for (formal = entry->sym->formal; formal; formal = formal->next) + { + if (formal->sym && sym->name == formal->sym->name) + seen = true; + } + + /* If it has not been seen as a dummy, this is an error. */ + if (!seen) + { + if (specification_expr) + gfc_error ("Variable '%s', used in a specification expression" + ", is referenced at %L before the ENTRY statement " + "in which it is a parameter", + sym->name, &cs_base->current->loc); + else + gfc_error ("Variable '%s' is used at %L before the ENTRY " + "statement in which it is a parameter", + sym->name, &cs_base->current->loc); + t = FAILURE; + } + } + + /* Now do the same check on the specification expressions. */ + specification_expr = 1; + if (sym->ts.type == BT_CHARACTER + && gfc_resolve_expr (sym->ts.cl->length) == FAILURE) + t = FAILURE; + + if (sym->as) + for (n = 0; n < sym->as->rank; n++) + { + specification_expr = 1; + if (gfc_resolve_expr (sym->as->lower[n]) == FAILURE) + t = FAILURE; + specification_expr = 1; + if (gfc_resolve_expr (sym->as->upper[n]) == FAILURE) + t = FAILURE; + } + specification_expr = 0; + + if (t == SUCCESS) + /* Update the symbol's entry level. */ + sym->entry_id = current_entry_id + 1; + } + +resolve_procedure: + if (t == SUCCESS && resolve_procedure_expression (e) == FAILURE) + t = FAILURE; + + return t; +} + + +/* Checks to see that the correct symbol has been host associated. + The only situation where this arises is that in which a twice + contained function is parsed after the host association is made. + Therefore, on detecting this, change the symbol in the expression + and convert the array reference into an actual arglist if the old + symbol is a variable. */ +static bool +check_host_association (gfc_expr *e) +{ + gfc_symbol *sym, *old_sym; + gfc_symtree *st; + int n; + gfc_ref *ref; + gfc_actual_arglist *arg, *tail; + bool retval = e->expr_type == EXPR_FUNCTION; + + /* If the expression is the result of substitution in + interface.c(gfc_extend_expr) because there is no way in + which the host association can be wrong. */ + if (e->symtree == NULL + || e->symtree->n.sym == NULL + || e->user_operator) + return retval; + + old_sym = e->symtree->n.sym; + + if (gfc_current_ns->parent + && old_sym->ns != gfc_current_ns) + { + /* Use the 'USE' name so that renamed module symbols are + correctly handled. */ + gfc_find_symbol (e->symtree->name, gfc_current_ns, 1, &sym); + + if (sym && old_sym != sym + && sym->ts.type == old_sym->ts.type + && sym->attr.flavor == FL_PROCEDURE + && sym->attr.contained) + { + /* Clear the shape, since it might not be valid. */ + if (e->shape != NULL) + { + for (n = 0; n < e->rank; n++) + mpz_clear (e->shape[n]); + + gfc_free (e->shape); + } + + /* Give the symbol a symtree in the right place! */ + gfc_get_sym_tree (sym->name, gfc_current_ns, &st); + st->n.sym = sym; + + if (old_sym->attr.flavor == FL_PROCEDURE) + { + /* Original was function so point to the new symbol, since + the actual argument list is already attached to the + expression. */ + e->value.function.esym = NULL; + e->symtree = st; + } + else + { + /* Original was variable so convert array references into + an actual arglist. This does not need any checking now + since gfc_resolve_function will take care of it. */ + e->value.function.actual = NULL; + e->expr_type = EXPR_FUNCTION; + e->symtree = st; + + /* Ambiguity will not arise if the array reference is not + the last reference. */ + for (ref = e->ref; ref; ref = ref->next) + if (ref->type == REF_ARRAY && ref->next == NULL) + break; + + gcc_assert (ref->type == REF_ARRAY); + + /* Grab the start expressions from the array ref and + copy them into actual arguments. */ + for (n = 0; n < ref->u.ar.dimen; n++) + { + arg = gfc_get_actual_arglist (); + arg->expr = gfc_copy_expr (ref->u.ar.start[n]); + if (e->value.function.actual == NULL) + tail = e->value.function.actual = arg; + else + { + tail->next = arg; + tail = arg; + } + } + + /* Dump the reference list and set the rank. */ + gfc_free_ref_list (e->ref); + e->ref = NULL; + e->rank = sym->as ? sym->as->rank : 0; + } + + gfc_resolve_expr (e); + sym->refs++; + } + } + /* This might have changed! */ + return e->expr_type == EXPR_FUNCTION; +} + + +static void +gfc_resolve_character_operator (gfc_expr *e) +{ + gfc_expr *op1 = e->value.op.op1; + gfc_expr *op2 = e->value.op.op2; + gfc_expr *e1 = NULL; + gfc_expr *e2 = NULL; + + gcc_assert (e->value.op.op == INTRINSIC_CONCAT); + + if (op1->ts.cl && op1->ts.cl->length) + e1 = gfc_copy_expr (op1->ts.cl->length); + else if (op1->expr_type == EXPR_CONSTANT) + e1 = gfc_int_expr (op1->value.character.length); + + if (op2->ts.cl && op2->ts.cl->length) + e2 = gfc_copy_expr (op2->ts.cl->length); + else if (op2->expr_type == EXPR_CONSTANT) + e2 = gfc_int_expr (op2->value.character.length); + + e->ts.cl = gfc_get_charlen (); + e->ts.cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = e->ts.cl; + + if (!e1 || !e2) + return; + + e->ts.cl->length = gfc_add (e1, e2); + e->ts.cl->length->ts.type = BT_INTEGER; + e->ts.cl->length->ts.kind = gfc_charlen_int_kind;; + gfc_simplify_expr (e->ts.cl->length, 0); + gfc_resolve_expr (e->ts.cl->length); + + return; +} + + +/* Ensure that an character expression has a charlen and, if possible, a + length expression. */ + +static void +fixup_charlen (gfc_expr *e) +{ + /* The cases fall through so that changes in expression type and the need + for multiple fixes are picked up. In all circumstances, a charlen should + be available for the middle end to hang a backend_decl on. */ + switch (e->expr_type) + { + case EXPR_OP: + gfc_resolve_character_operator (e); + + case EXPR_ARRAY: + if (e->expr_type == EXPR_ARRAY) + gfc_resolve_character_array_constructor (e); + + case EXPR_SUBSTRING: + if (!e->ts.cl && e->ref) + gfc_resolve_substring_charlen (e); + + default: + if (!e->ts.cl) + { + e->ts.cl = gfc_get_charlen (); + e->ts.cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = e->ts.cl; + } + + break; + } +} + + +/* Update an actual argument to include the passed-object for type-bound + procedures at the right position. */ + +static gfc_actual_arglist* +update_arglist_pass (gfc_actual_arglist* lst, gfc_expr* po, unsigned argpos) +{ + gcc_assert (argpos > 0); + + if (argpos == 1) + { + gfc_actual_arglist* result; + + result = gfc_get_actual_arglist (); + result->expr = po; + result->next = lst; + + return result; + } + + gcc_assert (lst); + gcc_assert (argpos > 1); + + lst->next = update_arglist_pass (lst->next, po, argpos - 1); + return lst; +} + + +/* Extract the passed-object from an EXPR_COMPCALL (a copy of it). */ + +static gfc_expr* +extract_compcall_passed_object (gfc_expr* e) +{ + gfc_expr* po; + + gcc_assert (e->expr_type == EXPR_COMPCALL); + + po = gfc_get_expr (); + po->expr_type = EXPR_VARIABLE; + po->symtree = e->symtree; + po->ref = gfc_copy_ref (e->ref); + + if (gfc_resolve_expr (po) == FAILURE) + return NULL; + + return po; +} + + +/* Update the arglist of an EXPR_COMPCALL expression to include the + passed-object. */ + +static gfc_try +update_compcall_arglist (gfc_expr* e) +{ + gfc_expr* po; + gfc_typebound_proc* tbp; + + tbp = e->value.compcall.tbp; + + if (tbp->error) + return FAILURE; + + po = extract_compcall_passed_object (e); + if (!po) + return FAILURE; + + if (po->rank > 0) + { + gfc_error ("Passed-object at %L must be scalar", &e->where); + return FAILURE; + } + + if (tbp->nopass) + { + gfc_free_expr (po); + return SUCCESS; + } + + gcc_assert (tbp->pass_arg_num > 0); + e->value.compcall.actual = update_arglist_pass (e->value.compcall.actual, po, + tbp->pass_arg_num); + + return SUCCESS; +} + + +/* Resolve a call to a type-bound procedure, either function or subroutine, + statically from the data in an EXPR_COMPCALL expression. The adapted + arglist and the target-procedure symtree are returned. */ + +static gfc_try +resolve_typebound_static (gfc_expr* e, gfc_symtree** target, + gfc_actual_arglist** actual) +{ + gcc_assert (e->expr_type == EXPR_COMPCALL); + gcc_assert (!e->value.compcall.tbp->is_generic); + + /* Update the actual arglist for PASS. */ + if (update_compcall_arglist (e) == FAILURE) + return FAILURE; + + *actual = e->value.compcall.actual; + *target = e->value.compcall.tbp->u.specific; + + gfc_free_ref_list (e->ref); + e->ref = NULL; + e->value.compcall.actual = NULL; + + return SUCCESS; +} + + +/* Given an EXPR_COMPCALL calling a GENERIC typebound procedure, figure out + which of the specific bindings (if any) matches the arglist and transform + the expression into a call of that binding. */ + +static gfc_try +resolve_typebound_generic_call (gfc_expr* e) +{ + gfc_typebound_proc* genproc; + const char* genname; + + gcc_assert (e->expr_type == EXPR_COMPCALL); + genname = e->value.compcall.name; + genproc = e->value.compcall.tbp; + + if (!genproc->is_generic) + return SUCCESS; + + /* Try the bindings on this type and in the inheritance hierarchy. */ + for (; genproc; genproc = genproc->overridden) + { + gfc_tbp_generic* g; + + gcc_assert (genproc->is_generic); + for (g = genproc->u.generic; g; g = g->next) + { + gfc_symbol* target; + gfc_actual_arglist* args; + bool matches; + + gcc_assert (g->specific); + + if (g->specific->error) + continue; + + target = g->specific->u.specific->n.sym; + + /* Get the right arglist by handling PASS/NOPASS. */ + args = gfc_copy_actual_arglist (e->value.compcall.actual); + if (!g->specific->nopass) + { + gfc_expr* po; + po = extract_compcall_passed_object (e); + if (!po) + return FAILURE; + + gcc_assert (g->specific->pass_arg_num > 0); + gcc_assert (!g->specific->error); + args = update_arglist_pass (args, po, g->specific->pass_arg_num); + } + resolve_actual_arglist (args, target->attr.proc, + is_external_proc (target) && !target->formal); + + /* Check if this arglist matches the formal. */ + matches = gfc_arglist_matches_symbol (&args, target); + + /* Clean up and break out of the loop if we've found it. */ + gfc_free_actual_arglist (args); + if (matches) + { + e->value.compcall.tbp = g->specific; + goto success; + } + } + } + + /* Nothing matching found! */ + gfc_error ("Found no matching specific binding for the call to the GENERIC" + " '%s' at %L", genname, &e->where); + return FAILURE; + +success: + return SUCCESS; +} + + +/* Resolve a call to a type-bound subroutine. */ + +static gfc_try +resolve_typebound_call (gfc_code* c) +{ + gfc_actual_arglist* newactual; + gfc_symtree* target; + + /* Check that's really a SUBROUTINE. */ + if (!c->expr->value.compcall.tbp->subroutine) + { + gfc_error ("'%s' at %L should be a SUBROUTINE", + c->expr->value.compcall.name, &c->loc); + return FAILURE; + } + + if (resolve_typebound_generic_call (c->expr) == FAILURE) + return FAILURE; + + /* Transform into an ordinary EXEC_CALL for now. */ + + if (resolve_typebound_static (c->expr, &target, &newactual) == FAILURE) + return FAILURE; + + c->ext.actual = newactual; + c->symtree = target; + c->op = EXEC_CALL; + + gcc_assert (!c->expr->ref && !c->expr->value.compcall.actual); + gfc_free_expr (c->expr); + c->expr = NULL; + + return resolve_call (c); +} + + +/* Resolve a component-call expression. */ + +static gfc_try +resolve_compcall (gfc_expr* e) +{ + gfc_actual_arglist* newactual; + gfc_symtree* target; + + /* Check that's really a FUNCTION. */ + if (!e->value.compcall.tbp->function) + { + gfc_error ("'%s' at %L should be a FUNCTION", + e->value.compcall.name, &e->where); + return FAILURE; + } + + if (resolve_typebound_generic_call (e) == FAILURE) + return FAILURE; + gcc_assert (!e->value.compcall.tbp->is_generic); + + /* Take the rank from the function's symbol. */ + if (e->value.compcall.tbp->u.specific->n.sym->as) + e->rank = e->value.compcall.tbp->u.specific->n.sym->as->rank; + + /* For now, we simply transform it into an EXPR_FUNCTION call with the same + arglist to the TBP's binding target. */ + + if (resolve_typebound_static (e, &target, &newactual) == FAILURE) + return FAILURE; + + e->value.function.actual = newactual; + e->value.function.name = e->value.compcall.name; + e->value.function.isym = NULL; + e->value.function.esym = NULL; + e->symtree = target; + e->ts = target->n.sym->ts; + e->expr_type = EXPR_FUNCTION; + + return gfc_resolve_expr (e); +} + + +/* Resolve an expression. That is, make sure that types of operands agree + with their operators, intrinsic operators are converted to function calls + for overloaded types and unresolved function references are resolved. */ + +gfc_try +gfc_resolve_expr (gfc_expr *e) +{ + gfc_try t; + + if (e == NULL) + return SUCCESS; + + switch (e->expr_type) + { + case EXPR_OP: + t = resolve_operator (e); + break; + + case EXPR_FUNCTION: + case EXPR_VARIABLE: + + if (check_host_association (e)) + t = resolve_function (e); + else + { + t = resolve_variable (e); + if (t == SUCCESS) + expression_rank (e); + } + + if (e->ts.type == BT_CHARACTER && e->ts.cl == NULL && e->ref + && e->ref->type != REF_SUBSTRING) + gfc_resolve_substring_charlen (e); + + break; + + case EXPR_COMPCALL: + t = resolve_compcall (e); + break; + + case EXPR_SUBSTRING: + t = resolve_ref (e); + break; + + case EXPR_CONSTANT: + case EXPR_NULL: + t = SUCCESS; + break; + + case EXPR_ARRAY: + t = FAILURE; + if (resolve_ref (e) == FAILURE) + break; + + t = gfc_resolve_array_constructor (e); + /* Also try to expand a constructor. */ + if (t == SUCCESS) + { + expression_rank (e); + gfc_expand_constructor (e); + } + + /* This provides the opportunity for the length of constructors with + character valued function elements to propagate the string length + to the expression. */ + if (t == SUCCESS && e->ts.type == BT_CHARACTER) + t = gfc_resolve_character_array_constructor (e); + + break; + + case EXPR_STRUCTURE: + t = resolve_ref (e); + if (t == FAILURE) + break; + + t = resolve_structure_cons (e); + if (t == FAILURE) + break; + + t = gfc_simplify_expr (e, 0); + break; + + default: + gfc_internal_error ("gfc_resolve_expr(): Bad expression type"); + } + + if (e->ts.type == BT_CHARACTER && t == SUCCESS && !e->ts.cl) + fixup_charlen (e); + + return t; +} + + +/* Resolve an expression from an iterator. They must be scalar and have + INTEGER or (optionally) REAL type. */ + +static gfc_try +gfc_resolve_iterator_expr (gfc_expr *expr, bool real_ok, + const char *name_msgid) +{ + if (gfc_resolve_expr (expr) == FAILURE) + return FAILURE; + + if (expr->rank != 0) + { + gfc_error ("%s at %L must be a scalar", _(name_msgid), &expr->where); + return FAILURE; + } + + if (expr->ts.type != BT_INTEGER) + { + if (expr->ts.type == BT_REAL) + { + if (real_ok) + return gfc_notify_std (GFC_STD_F95_DEL, + "Deleted feature: %s at %L must be integer", + _(name_msgid), &expr->where); + else + { + gfc_error ("%s at %L must be INTEGER", _(name_msgid), + &expr->where); + return FAILURE; + } + } + else + { + gfc_error ("%s at %L must be INTEGER", _(name_msgid), &expr->where); + return FAILURE; + } + } + return SUCCESS; +} + + +/* Resolve the expressions in an iterator structure. If REAL_OK is + false allow only INTEGER type iterators, otherwise allow REAL types. */ + +gfc_try +gfc_resolve_iterator (gfc_iterator *iter, bool real_ok) +{ + if (gfc_resolve_iterator_expr (iter->var, real_ok, "Loop variable") + == FAILURE) + return FAILURE; + + if (gfc_pure (NULL) && gfc_impure_variable (iter->var->symtree->n.sym)) + { + gfc_error ("Cannot assign to loop variable in PURE procedure at %L", + &iter->var->where); + return FAILURE; + } + + if (gfc_resolve_iterator_expr (iter->start, real_ok, + "Start expression in DO loop") == FAILURE) + return FAILURE; + + if (gfc_resolve_iterator_expr (iter->end, real_ok, + "End expression in DO loop") == FAILURE) + return FAILURE; + + if (gfc_resolve_iterator_expr (iter->step, real_ok, + "Step expression in DO loop") == FAILURE) + return FAILURE; + + if (iter->step->expr_type == EXPR_CONSTANT) + { + if ((iter->step->ts.type == BT_INTEGER + && mpz_cmp_ui (iter->step->value.integer, 0) == 0) + || (iter->step->ts.type == BT_REAL + && mpfr_sgn (iter->step->value.real) == 0)) + { + gfc_error ("Step expression in DO loop at %L cannot be zero", + &iter->step->where); + return FAILURE; + } + } + + /* Convert start, end, and step to the same type as var. */ + if (iter->start->ts.kind != iter->var->ts.kind + || iter->start->ts.type != iter->var->ts.type) + gfc_convert_type (iter->start, &iter->var->ts, 2); + + if (iter->end->ts.kind != iter->var->ts.kind + || iter->end->ts.type != iter->var->ts.type) + gfc_convert_type (iter->end, &iter->var->ts, 2); + + if (iter->step->ts.kind != iter->var->ts.kind + || iter->step->ts.type != iter->var->ts.type) + gfc_convert_type (iter->step, &iter->var->ts, 2); + + return SUCCESS; +} + + +/* Traversal function for find_forall_index. f == 2 signals that + that variable itself is not to be checked - only the references. */ + +static bool +forall_index (gfc_expr *expr, gfc_symbol *sym, int *f) +{ + if (expr->expr_type != EXPR_VARIABLE) + return false; + + /* A scalar assignment */ + if (!expr->ref || *f == 1) + { + if (expr->symtree->n.sym == sym) + return true; + else + return false; + } + + if (*f == 2) + *f = 1; + return false; +} + + +/* Check whether the FORALL index appears in the expression or not. + Returns SUCCESS if SYM is found in EXPR. */ + +gfc_try +find_forall_index (gfc_expr *expr, gfc_symbol *sym, int f) +{ + if (gfc_traverse_expr (expr, sym, forall_index, f)) + return SUCCESS; + else + return FAILURE; +} + + +/* Resolve a list of FORALL iterators. The FORALL index-name is constrained + to be a scalar INTEGER variable. The subscripts and stride are scalar + INTEGERs, and if stride is a constant it must be nonzero. + Furthermore "A subscript or stride in a forall-triplet-spec shall + not contain a reference to any index-name in the + forall-triplet-spec-list in which it appears." (7.5.4.1) */ + +static void +resolve_forall_iterators (gfc_forall_iterator *it) +{ + gfc_forall_iterator *iter, *iter2; + + for (iter = it; iter; iter = iter->next) + { + if (gfc_resolve_expr (iter->var) == SUCCESS + && (iter->var->ts.type != BT_INTEGER || iter->var->rank != 0)) + gfc_error ("FORALL index-name at %L must be a scalar INTEGER", + &iter->var->where); + + if (gfc_resolve_expr (iter->start) == SUCCESS + && (iter->start->ts.type != BT_INTEGER || iter->start->rank != 0)) + gfc_error ("FORALL start expression at %L must be a scalar INTEGER", + &iter->start->where); + if (iter->var->ts.kind != iter->start->ts.kind) + gfc_convert_type (iter->start, &iter->var->ts, 2); + + if (gfc_resolve_expr (iter->end) == SUCCESS + && (iter->end->ts.type != BT_INTEGER || iter->end->rank != 0)) + gfc_error ("FORALL end expression at %L must be a scalar INTEGER", + &iter->end->where); + if (iter->var->ts.kind != iter->end->ts.kind) + gfc_convert_type (iter->end, &iter->var->ts, 2); + + if (gfc_resolve_expr (iter->stride) == SUCCESS) + { + if (iter->stride->ts.type != BT_INTEGER || iter->stride->rank != 0) + gfc_error ("FORALL stride expression at %L must be a scalar %s", + &iter->stride->where, "INTEGER"); + + if (iter->stride->expr_type == EXPR_CONSTANT + && mpz_cmp_ui(iter->stride->value.integer, 0) == 0) + gfc_error ("FORALL stride expression at %L cannot be zero", + &iter->stride->where); + } + if (iter->var->ts.kind != iter->stride->ts.kind) + gfc_convert_type (iter->stride, &iter->var->ts, 2); + } + + for (iter = it; iter; iter = iter->next) + for (iter2 = iter; iter2; iter2 = iter2->next) + { + if (find_forall_index (iter2->start, + iter->var->symtree->n.sym, 0) == SUCCESS + || find_forall_index (iter2->end, + iter->var->symtree->n.sym, 0) == SUCCESS + || find_forall_index (iter2->stride, + iter->var->symtree->n.sym, 0) == SUCCESS) + gfc_error ("FORALL index '%s' may not appear in triplet " + "specification at %L", iter->var->symtree->name, + &iter2->start->where); + } +} + + +/* Given a pointer to a symbol that is a derived type, see if it's + inaccessible, i.e. if it's defined in another module and the components are + PRIVATE. The search is recursive if necessary. Returns zero if no + inaccessible components are found, nonzero otherwise. */ + +static int +derived_inaccessible (gfc_symbol *sym) +{ + gfc_component *c; + + if (sym->attr.use_assoc && sym->attr.private_comp) + return 1; + + for (c = sym->components; c; c = c->next) + { + if (c->ts.type == BT_DERIVED && derived_inaccessible (c->ts.derived)) + return 1; + } + + return 0; +} + + +/* Resolve the argument of a deallocate expression. The expression must be + a pointer or a full array. */ + +static gfc_try +resolve_deallocate_expr (gfc_expr *e) +{ + symbol_attribute attr; + int allocatable, pointer, check_intent_in; + gfc_ref *ref; + + /* Check INTENT(IN), unless the object is a sub-component of a pointer. */ + check_intent_in = 1; + + if (gfc_resolve_expr (e) == FAILURE) + return FAILURE; + + if (e->expr_type != EXPR_VARIABLE) + goto bad; + + allocatable = e->symtree->n.sym->attr.allocatable; + pointer = e->symtree->n.sym->attr.pointer; + for (ref = e->ref; ref; ref = ref->next) + { + if (pointer) + check_intent_in = 0; + + switch (ref->type) + { + case REF_ARRAY: + if (ref->u.ar.type != AR_FULL) + allocatable = 0; + break; + + case REF_COMPONENT: + allocatable = (ref->u.c.component->as != NULL + && ref->u.c.component->as->type == AS_DEFERRED); + pointer = ref->u.c.component->attr.pointer; + break; + + case REF_SUBSTRING: + allocatable = 0; + break; + } + } + + attr = gfc_expr_attr (e); + + if (allocatable == 0 && attr.pointer == 0) + { + bad: + gfc_error ("Expression in DEALLOCATE statement at %L must be " + "ALLOCATABLE or a POINTER", &e->where); + } + + if (check_intent_in + && e->symtree->n.sym->attr.intent == INTENT_IN) + { + gfc_error ("Cannot deallocate INTENT(IN) variable '%s' at %L", + e->symtree->n.sym->name, &e->where); + return FAILURE; + } + + return SUCCESS; +} + + +/* Returns true if the expression e contains a reference to the symbol sym. */ +static bool +sym_in_expr (gfc_expr *e, gfc_symbol *sym, int *f ATTRIBUTE_UNUSED) +{ + if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym == sym) + return true; + + return false; +} + +bool +gfc_find_sym_in_expr (gfc_symbol *sym, gfc_expr *e) +{ + return gfc_traverse_expr (e, sym, sym_in_expr, 0); +} + + +/* Given the expression node e for an allocatable/pointer of derived type to be + allocated, get the expression node to be initialized afterwards (needed for + derived types with default initializers, and derived types with allocatable + components that need nullification.) */ + +static gfc_expr * +expr_to_initialize (gfc_expr *e) +{ + gfc_expr *result; + gfc_ref *ref; + int i; + + result = gfc_copy_expr (e); + + /* Change the last array reference from AR_ELEMENT to AR_FULL. */ + for (ref = result->ref; ref; ref = ref->next) + if (ref->type == REF_ARRAY && ref->next == NULL) + { + ref->u.ar.type = AR_FULL; + + for (i = 0; i < ref->u.ar.dimen; i++) + ref->u.ar.start[i] = ref->u.ar.end[i] = ref->u.ar.stride[i] = NULL; + + result->rank = ref->u.ar.dimen; + break; + } + + return result; +} + + +/* Resolve the expression in an ALLOCATE statement, doing the additional + checks to see whether the expression is OK or not. The expression must + have a trailing array reference that gives the size of the array. */ + +static gfc_try +resolve_allocate_expr (gfc_expr *e, gfc_code *code) +{ + int i, pointer, allocatable, dimension, check_intent_in; + symbol_attribute attr; + gfc_ref *ref, *ref2; + gfc_array_ref *ar; + gfc_code *init_st; + gfc_expr *init_e; + gfc_symbol *sym; + gfc_alloc *a; + + /* Check INTENT(IN), unless the object is a sub-component of a pointer. */ + check_intent_in = 1; + + if (gfc_resolve_expr (e) == FAILURE) + return FAILURE; + + if (code->expr && code->expr->expr_type == EXPR_VARIABLE) + sym = code->expr->symtree->n.sym; + else + sym = NULL; + + /* Make sure the expression is allocatable or a pointer. If it is + pointer, the next-to-last reference must be a pointer. */ + + ref2 = NULL; + + if (e->expr_type != EXPR_VARIABLE) + { + allocatable = 0; + attr = gfc_expr_attr (e); + pointer = attr.pointer; + dimension = attr.dimension; + } + else + { + allocatable = e->symtree->n.sym->attr.allocatable; + pointer = e->symtree->n.sym->attr.pointer; + dimension = e->symtree->n.sym->attr.dimension; + + if (sym == e->symtree->n.sym && sym->ts.type != BT_DERIVED) + { + gfc_error ("The STAT variable '%s' in an ALLOCATE statement must " + "not be allocated in the same statement at %L", + sym->name, &e->where); + return FAILURE; + } + + for (ref = e->ref; ref; ref2 = ref, ref = ref->next) + { + if (pointer) + check_intent_in = 0; + + switch (ref->type) + { + case REF_ARRAY: + if (ref->next != NULL) + pointer = 0; + break; + + case REF_COMPONENT: + allocatable = (ref->u.c.component->as != NULL + && ref->u.c.component->as->type == AS_DEFERRED); + + pointer = ref->u.c.component->attr.pointer; + dimension = ref->u.c.component->attr.dimension; + break; + + case REF_SUBSTRING: + allocatable = 0; + pointer = 0; + break; + } + } + } + + if (allocatable == 0 && pointer == 0) + { + gfc_error ("Expression in ALLOCATE statement at %L must be " + "ALLOCATABLE or a POINTER", &e->where); + return FAILURE; + } + + if (check_intent_in + && e->symtree->n.sym->attr.intent == INTENT_IN) + { + gfc_error ("Cannot allocate INTENT(IN) variable '%s' at %L", + e->symtree->n.sym->name, &e->where); + return FAILURE; + } + + /* Add default initializer for those derived types that need them. */ + if (e->ts.type == BT_DERIVED && (init_e = gfc_default_initializer (&e->ts))) + { + init_st = gfc_get_code (); + init_st->loc = code->loc; + init_st->op = EXEC_INIT_ASSIGN; + init_st->expr = expr_to_initialize (e); + init_st->expr2 = init_e; + init_st->next = code->next; + code->next = init_st; + } + + if (pointer && dimension == 0) + return SUCCESS; + + /* Make sure the next-to-last reference node is an array specification. */ + + if (ref2 == NULL || ref2->type != REF_ARRAY || ref2->u.ar.type == AR_FULL) + { + gfc_error ("Array specification required in ALLOCATE statement " + "at %L", &e->where); + return FAILURE; + } + + /* Make sure that the array section reference makes sense in the + context of an ALLOCATE specification. */ + + ar = &ref2->u.ar; + + for (i = 0; i < ar->dimen; i++) + { + if (ref2->u.ar.type == AR_ELEMENT) + goto check_symbols; + + switch (ar->dimen_type[i]) + { + case DIMEN_ELEMENT: + break; + + case DIMEN_RANGE: + if (ar->start[i] != NULL + && ar->end[i] != NULL + && ar->stride[i] == NULL) + break; + + /* Fall Through... */ + + case DIMEN_UNKNOWN: + case DIMEN_VECTOR: + gfc_error ("Bad array specification in ALLOCATE statement at %L", + &e->where); + return FAILURE; + } + +check_symbols: + + for (a = code->ext.alloc_list; a; a = a->next) + { + sym = a->expr->symtree->n.sym; + + /* TODO - check derived type components. */ + if (sym->ts.type == BT_DERIVED) + continue; + + if ((ar->start[i] != NULL + && gfc_find_sym_in_expr (sym, ar->start[i])) + || (ar->end[i] != NULL + && gfc_find_sym_in_expr (sym, ar->end[i]))) + { + gfc_error ("'%s' must not appear in the array specification at " + "%L in the same ALLOCATE statement where it is " + "itself allocated", sym->name, &ar->where); + return FAILURE; + } + } + } + + return SUCCESS; +} + +static void +resolve_allocate_deallocate (gfc_code *code, const char *fcn) +{ + gfc_symbol *s = NULL; + gfc_alloc *a; + + if (code->expr) + s = code->expr->symtree->n.sym; + + if (s) + { + if (s->attr.intent == INTENT_IN) + gfc_error ("STAT variable '%s' of %s statement at %C cannot " + "be INTENT(IN)", s->name, fcn); + + if (gfc_pure (NULL) && gfc_impure_variable (s)) + gfc_error ("Illegal STAT variable in %s statement at %C " + "for a PURE procedure", fcn); + } + + if (s && code->expr->ts.type != BT_INTEGER) + gfc_error ("STAT tag in %s statement at %L must be " + "of type INTEGER", fcn, &code->expr->where); + + if (strcmp (fcn, "ALLOCATE") == 0) + { + for (a = code->ext.alloc_list; a; a = a->next) + resolve_allocate_expr (a->expr, code); + } + else + { + for (a = code->ext.alloc_list; a; a = a->next) + resolve_deallocate_expr (a->expr); + } +} + +/************ SELECT CASE resolution subroutines ************/ + +/* Callback function for our mergesort variant. Determines interval + overlaps for CASEs. Return <0 if op1 < op2, 0 for overlap, >0 for + op1 > op2. Assumes we're not dealing with the default case. + We have op1 = (:L), (K:L) or (K:) and op2 = (:N), (M:N) or (M:). + There are nine situations to check. */ + +static int +compare_cases (const gfc_case *op1, const gfc_case *op2) +{ + int retval; + + if (op1->low == NULL) /* op1 = (:L) */ + { + /* op2 = (:N), so overlap. */ + retval = 0; + /* op2 = (M:) or (M:N), L < M */ + if (op2->low != NULL + && gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0) + retval = -1; + } + else if (op1->high == NULL) /* op1 = (K:) */ + { + /* op2 = (M:), so overlap. */ + retval = 0; + /* op2 = (:N) or (M:N), K > N */ + if (op2->high != NULL + && gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0) + retval = 1; + } + else /* op1 = (K:L) */ + { + if (op2->low == NULL) /* op2 = (:N), K > N */ + retval = (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0) + ? 1 : 0; + else if (op2->high == NULL) /* op2 = (M:), L < M */ + retval = (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0) + ? -1 : 0; + else /* op2 = (M:N) */ + { + retval = 0; + /* L < M */ + if (gfc_compare_expr (op1->high, op2->low, INTRINSIC_LT) < 0) + retval = -1; + /* K > N */ + else if (gfc_compare_expr (op1->low, op2->high, INTRINSIC_GT) > 0) + retval = 1; + } + } + + return retval; +} + + +/* Merge-sort a double linked case list, detecting overlap in the + process. LIST is the head of the double linked case list before it + is sorted. Returns the head of the sorted list if we don't see any + overlap, or NULL otherwise. */ + +static gfc_case * +check_case_overlap (gfc_case *list) +{ + gfc_case *p, *q, *e, *tail; + int insize, nmerges, psize, qsize, cmp, overlap_seen; + + /* If the passed list was empty, return immediately. */ + if (!list) + return NULL; + + overlap_seen = 0; + insize = 1; + + /* Loop unconditionally. The only exit from this loop is a return + statement, when we've finished sorting the case list. */ + for (;;) + { + p = list; + list = NULL; + tail = NULL; + + /* Count the number of merges we do in this pass. */ + nmerges = 0; + + /* Loop while there exists a merge to be done. */ + while (p) + { + int i; + + /* Count this merge. */ + nmerges++; + + /* Cut the list in two pieces by stepping INSIZE places + forward in the list, starting from P. */ + psize = 0; + q = p; + for (i = 0; i < insize; i++) + { + psize++; + q = q->right; + if (!q) + break; + } + qsize = insize; + + /* Now we have two lists. Merge them! */ + while (psize > 0 || (qsize > 0 && q != NULL)) + { + /* See from which the next case to merge comes from. */ + if (psize == 0) + { + /* P is empty so the next case must come from Q. */ + e = q; + q = q->right; + qsize--; + } + else if (qsize == 0 || q == NULL) + { + /* Q is empty. */ + e = p; + p = p->right; + psize--; + } + else + { + cmp = compare_cases (p, q); + if (cmp < 0) + { + /* The whole case range for P is less than the + one for Q. */ + e = p; + p = p->right; + psize--; + } + else if (cmp > 0) + { + /* The whole case range for Q is greater than + the case range for P. */ + e = q; + q = q->right; + qsize--; + } + else + { + /* The cases overlap, or they are the same + element in the list. Either way, we must + issue an error and get the next case from P. */ + /* FIXME: Sort P and Q by line number. */ + gfc_error ("CASE label at %L overlaps with CASE " + "label at %L", &p->where, &q->where); + overlap_seen = 1; + e = p; + p = p->right; + psize--; + } + } + + /* Add the next element to the merged list. */ + if (tail) + tail->right = e; + else + list = e; + e->left = tail; + tail = e; + } + + /* P has now stepped INSIZE places along, and so has Q. So + they're the same. */ + p = q; + } + tail->right = NULL; + + /* If we have done only one merge or none at all, we've + finished sorting the cases. */ + if (nmerges <= 1) + { + if (!overlap_seen) + return list; + else + return NULL; + } + + /* Otherwise repeat, merging lists twice the size. */ + insize *= 2; + } +} + + +/* Check to see if an expression is suitable for use in a CASE statement. + Makes sure that all case expressions are scalar constants of the same + type. Return FAILURE if anything is wrong. */ + +static gfc_try +validate_case_label_expr (gfc_expr *e, gfc_expr *case_expr) +{ + if (e == NULL) return SUCCESS; + + if (e->ts.type != case_expr->ts.type) + { + gfc_error ("Expression in CASE statement at %L must be of type %s", + &e->where, gfc_basic_typename (case_expr->ts.type)); + return FAILURE; + } + + /* C805 (R808) For a given case-construct, each case-value shall be of + the same type as case-expr. For character type, length differences + are allowed, but the kind type parameters shall be the same. */ + + if (case_expr->ts.type == BT_CHARACTER && e->ts.kind != case_expr->ts.kind) + { + gfc_error ("Expression in CASE statement at %L must be of kind %d", + &e->where, case_expr->ts.kind); + return FAILURE; + } + + /* Convert the case value kind to that of case expression kind, if needed. + FIXME: Should a warning be issued? */ + if (e->ts.kind != case_expr->ts.kind) + gfc_convert_type_warn (e, &case_expr->ts, 2, 0); + + if (e->rank != 0) + { + gfc_error ("Expression in CASE statement at %L must be scalar", + &e->where); + return FAILURE; + } + + return SUCCESS; +} + + +/* Given a completely parsed select statement, we: + + - Validate all expressions and code within the SELECT. + - Make sure that the selection expression is not of the wrong type. + - Make sure that no case ranges overlap. + - Eliminate unreachable cases and unreachable code resulting from + removing case labels. + + The standard does allow unreachable cases, e.g. CASE (5:3). But + they are a hassle for code generation, and to prevent that, we just + cut them out here. This is not necessary for overlapping cases + because they are illegal and we never even try to generate code. + + We have the additional caveat that a SELECT construct could have + been a computed GOTO in the source code. Fortunately we can fairly + easily work around that here: The case_expr for a "real" SELECT CASE + is in code->expr1, but for a computed GOTO it is in code->expr2. All + we have to do is make sure that the case_expr is a scalar integer + expression. */ + +static void +resolve_select (gfc_code *code) +{ + gfc_code *body; + gfc_expr *case_expr; + gfc_case *cp, *default_case, *tail, *head; + int seen_unreachable; + int seen_logical; + int ncases; + bt type; + gfc_try t; + + if (code->expr == NULL) + { + /* This was actually a computed GOTO statement. */ + case_expr = code->expr2; + if (case_expr->ts.type != BT_INTEGER|| case_expr->rank != 0) + gfc_error ("Selection expression in computed GOTO statement " + "at %L must be a scalar integer expression", + &case_expr->where); + + /* Further checking is not necessary because this SELECT was built + by the compiler, so it should always be OK. Just move the + case_expr from expr2 to expr so that we can handle computed + GOTOs as normal SELECTs from here on. */ + code->expr = code->expr2; + code->expr2 = NULL; + return; + } + + case_expr = code->expr; + + type = case_expr->ts.type; + if (type != BT_LOGICAL && type != BT_INTEGER && type != BT_CHARACTER) + { + gfc_error ("Argument of SELECT statement at %L cannot be %s", + &case_expr->where, gfc_typename (&case_expr->ts)); + + /* Punt. Going on here just produce more garbage error messages. */ + return; + } + + if (case_expr->rank != 0) + { + gfc_error ("Argument of SELECT statement at %L must be a scalar " + "expression", &case_expr->where); + + /* Punt. */ + return; + } + + /* PR 19168 has a long discussion concerning a mismatch of the kinds + of the SELECT CASE expression and its CASE values. Walk the lists + of case values, and if we find a mismatch, promote case_expr to + the appropriate kind. */ + + if (type == BT_LOGICAL || type == BT_INTEGER) + { + for (body = code->block; body; body = body->block) + { + /* Walk the case label list. */ + for (cp = body->ext.case_list; cp; cp = cp->next) + { + /* Intercept the DEFAULT case. It does not have a kind. */ + if (cp->low == NULL && cp->high == NULL) + continue; + + /* Unreachable case ranges are discarded, so ignore. */ + if (cp->low != NULL && cp->high != NULL + && cp->low != cp->high + && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0) + continue; + + /* FIXME: Should a warning be issued? */ + if (cp->low != NULL + && case_expr->ts.kind != gfc_kind_max(case_expr, cp->low)) + gfc_convert_type_warn (case_expr, &cp->low->ts, 2, 0); + + if (cp->high != NULL + && case_expr->ts.kind != gfc_kind_max(case_expr, cp->high)) + gfc_convert_type_warn (case_expr, &cp->high->ts, 2, 0); + } + } + } + + /* Assume there is no DEFAULT case. */ + default_case = NULL; + head = tail = NULL; + ncases = 0; + seen_logical = 0; + + for (body = code->block; body; body = body->block) + { + /* Assume the CASE list is OK, and all CASE labels can be matched. */ + t = SUCCESS; + seen_unreachable = 0; + + /* Walk the case label list, making sure that all case labels + are legal. */ + for (cp = body->ext.case_list; cp; cp = cp->next) + { + /* Count the number of cases in the whole construct. */ + ncases++; + + /* Intercept the DEFAULT case. */ + if (cp->low == NULL && cp->high == NULL) + { + if (default_case != NULL) + { + gfc_error ("The DEFAULT CASE at %L cannot be followed " + "by a second DEFAULT CASE at %L", + &default_case->where, &cp->where); + t = FAILURE; + break; + } + else + { + default_case = cp; + continue; + } + } + + /* Deal with single value cases and case ranges. Errors are + issued from the validation function. */ + if(validate_case_label_expr (cp->low, case_expr) != SUCCESS + || validate_case_label_expr (cp->high, case_expr) != SUCCESS) + { + t = FAILURE; + break; + } + + if (type == BT_LOGICAL + && ((cp->low == NULL || cp->high == NULL) + || cp->low != cp->high)) + { + gfc_error ("Logical range in CASE statement at %L is not " + "allowed", &cp->low->where); + t = FAILURE; + break; + } + + if (type == BT_LOGICAL && cp->low->expr_type == EXPR_CONSTANT) + { + int value; + value = cp->low->value.logical == 0 ? 2 : 1; + if (value & seen_logical) + { + gfc_error ("constant logical value in CASE statement " + "is repeated at %L", + &cp->low->where); + t = FAILURE; + break; + } + seen_logical |= value; + } + + if (cp->low != NULL && cp->high != NULL + && cp->low != cp->high + && gfc_compare_expr (cp->low, cp->high, INTRINSIC_GT) > 0) + { + if (gfc_option.warn_surprising) + gfc_warning ("Range specification at %L can never " + "be matched", &cp->where); + + cp->unreachable = 1; + seen_unreachable = 1; + } + else + { + /* If the case range can be matched, it can also overlap with + other cases. To make sure it does not, we put it in a + double linked list here. We sort that with a merge sort + later on to detect any overlapping cases. */ + if (!head) + { + head = tail = cp; + head->right = head->left = NULL; + } + else + { + tail->right = cp; + tail->right->left = tail; + tail = tail->right; + tail->right = NULL; + } + } + } + + /* It there was a failure in the previous case label, give up + for this case label list. Continue with the next block. */ + if (t == FAILURE) + continue; + + /* See if any case labels that are unreachable have been seen. + If so, we eliminate them. This is a bit of a kludge because + the case lists for a single case statement (label) is a + single forward linked lists. */ + if (seen_unreachable) + { + /* Advance until the first case in the list is reachable. */ + while (body->ext.case_list != NULL + && body->ext.case_list->unreachable) + { + gfc_case *n = body->ext.case_list; + body->ext.case_list = body->ext.case_list->next; + n->next = NULL; + gfc_free_case_list (n); + } + + /* Strip all other unreachable cases. */ + if (body->ext.case_list) + { + for (cp = body->ext.case_list; cp->next; cp = cp->next) + { + if (cp->next->unreachable) + { + gfc_case *n = cp->next; + cp->next = cp->next->next; + n->next = NULL; + gfc_free_case_list (n); + } + } + } + } + } + + /* See if there were overlapping cases. If the check returns NULL, + there was overlap. In that case we don't do anything. If head + is non-NULL, we prepend the DEFAULT case. The sorted list can + then used during code generation for SELECT CASE constructs with + a case expression of a CHARACTER type. */ + if (head) + { + head = check_case_overlap (head); + + /* Prepend the default_case if it is there. */ + if (head != NULL && default_case) + { + default_case->left = NULL; + default_case->right = head; + head->left = default_case; + } + } + + /* Eliminate dead blocks that may be the result if we've seen + unreachable case labels for a block. */ + for (body = code; body && body->block; body = body->block) + { + if (body->block->ext.case_list == NULL) + { + /* Cut the unreachable block from the code chain. */ + gfc_code *c = body->block; + body->block = c->block; + + /* Kill the dead block, but not the blocks below it. */ + c->block = NULL; + gfc_free_statements (c); + } + } + + /* More than two cases is legal but insane for logical selects. + Issue a warning for it. */ + if (gfc_option.warn_surprising && type == BT_LOGICAL + && ncases > 2) + gfc_warning ("Logical SELECT CASE block at %L has more that two cases", + &code->loc); +} + + +/* Resolve a transfer statement. This is making sure that: + -- a derived type being transferred has only non-pointer components + -- a derived type being transferred doesn't have private components, unless + it's being transferred from the module where the type was defined + -- we're not trying to transfer a whole assumed size array. */ + +static void +resolve_transfer (gfc_code *code) +{ + gfc_typespec *ts; + gfc_symbol *sym; + gfc_ref *ref; + gfc_expr *exp; + + exp = code->expr; + + if (exp->expr_type != EXPR_VARIABLE && exp->expr_type != EXPR_FUNCTION) + return; + + sym = exp->symtree->n.sym; + ts = &sym->ts; + + /* Go to actual component transferred. */ + for (ref = code->expr->ref; ref; ref = ref->next) + if (ref->type == REF_COMPONENT) + ts = &ref->u.c.component->ts; + + if (ts->type == BT_DERIVED) + { + /* Check that transferred derived type doesn't contain POINTER + components. */ + if (ts->derived->attr.pointer_comp) + { + gfc_error ("Data transfer element at %L cannot have " + "POINTER components", &code->loc); + return; + } + + if (ts->derived->attr.alloc_comp) + { + gfc_error ("Data transfer element at %L cannot have " + "ALLOCATABLE components", &code->loc); + return; + } + + if (derived_inaccessible (ts->derived)) + { + gfc_error ("Data transfer element at %L cannot have " + "PRIVATE components",&code->loc); + return; + } + } + + if (sym->as != NULL && sym->as->type == AS_ASSUMED_SIZE + && exp->ref->type == REF_ARRAY && exp->ref->u.ar.type == AR_FULL) + { + gfc_error ("Data transfer element at %L cannot be a full reference to " + "an assumed-size array", &code->loc); + return; + } +} + + +/*********** Toplevel code resolution subroutines ***********/ + +/* Find the set of labels that are reachable from this block. We also + record the last statement in each block so that we don't have to do + a linear search to find the END DO statements of the blocks. */ + +static void +reachable_labels (gfc_code *block) +{ + gfc_code *c; + + if (!block) + return; + + cs_base->reachable_labels = bitmap_obstack_alloc (&labels_obstack); + + /* Collect labels in this block. */ + for (c = block; c; c = c->next) + { + if (c->here) + bitmap_set_bit (cs_base->reachable_labels, c->here->value); + + if (!c->next && cs_base->prev) + cs_base->prev->tail = c; + } + + /* Merge with labels from parent block. */ + if (cs_base->prev) + { + gcc_assert (cs_base->prev->reachable_labels); + bitmap_ior_into (cs_base->reachable_labels, + cs_base->prev->reachable_labels); + } +} + +/* Given a branch to a label and a namespace, if the branch is conforming. + The code node describes where the branch is located. */ + +static void +resolve_branch (gfc_st_label *label, gfc_code *code) +{ + code_stack *stack; + + if (label == NULL) + return; + + /* Step one: is this a valid branching target? */ + + if (label->defined == ST_LABEL_UNKNOWN) + { + gfc_error ("Label %d referenced at %L is never defined", label->value, + &label->where); + return; + } + + if (label->defined != ST_LABEL_TARGET) + { + gfc_error ("Statement at %L is not a valid branch target statement " + "for the branch statement at %L", &label->where, &code->loc); + return; + } + + /* Step two: make sure this branch is not a branch to itself ;-) */ + + if (code->here == label) + { + gfc_warning ("Branch at %L may result in an infinite loop", &code->loc); + return; + } + + /* Step three: See if the label is in the same block as the + branching statement. The hard work has been done by setting up + the bitmap reachable_labels. */ + + if (!bitmap_bit_p (cs_base->reachable_labels, label->value)) + { + /* The label is not in an enclosing block, so illegal. This was + allowed in Fortran 66, so we allow it as extension. No + further checks are necessary in this case. */ + gfc_notify_std (GFC_STD_LEGACY, "Label at %L is not in the same block " + "as the GOTO statement at %L", &label->where, + &code->loc); + return; + } + + /* Step four: Make sure that the branching target is legal if + the statement is an END {SELECT,IF}. */ + + for (stack = cs_base; stack; stack = stack->prev) + if (stack->current->next && stack->current->next->here == label) + break; + + if (stack && stack->current->next->op == EXEC_NOP) + { + gfc_notify_std (GFC_STD_F95_DEL, "Deleted feature: GOTO at %L jumps to " + "END of construct at %L", &code->loc, + &stack->current->next->loc); + return; /* We know this is not an END DO. */ + } + + /* Step five: Make sure that we're not jumping to the end of a DO + loop from within the loop. */ + + for (stack = cs_base; stack; stack = stack->prev) + if ((stack->current->op == EXEC_DO + || stack->current->op == EXEC_DO_WHILE) + && stack->tail->here == label && stack->tail->op == EXEC_NOP) + { + gfc_notify_std (GFC_STD_F95_DEL, "Deleted feature: GOTO at %L jumps " + "to END of construct at %L", &code->loc, + &stack->tail->loc); + return; + + } +} + + +/* Check whether EXPR1 has the same shape as EXPR2. */ + +static gfc_try +resolve_where_shape (gfc_expr *expr1, gfc_expr *expr2) +{ + mpz_t shape[GFC_MAX_DIMENSIONS]; + mpz_t shape2[GFC_MAX_DIMENSIONS]; + gfc_try result = FAILURE; + int i; + + /* Compare the rank. */ + if (expr1->rank != expr2->rank) + return result; + + /* Compare the size of each dimension. */ + for (i=0; irank; i++) + { + if (gfc_array_dimen_size (expr1, i, &shape[i]) == FAILURE) + goto ignore; + + if (gfc_array_dimen_size (expr2, i, &shape2[i]) == FAILURE) + goto ignore; + + if (mpz_cmp (shape[i], shape2[i])) + goto over; + } + + /* When either of the two expression is an assumed size array, we + ignore the comparison of dimension sizes. */ +ignore: + result = SUCCESS; + +over: + for (i--; i >= 0; i--) + { + mpz_clear (shape[i]); + mpz_clear (shape2[i]); + } + return result; +} + + +/* Check whether a WHERE assignment target or a WHERE mask expression + has the same shape as the outmost WHERE mask expression. */ + +static void +resolve_where (gfc_code *code, gfc_expr *mask) +{ + gfc_code *cblock; + gfc_code *cnext; + gfc_expr *e = NULL; + + cblock = code->block; + + /* Store the first WHERE mask-expr of the WHERE statement or construct. + In case of nested WHERE, only the outmost one is stored. */ + if (mask == NULL) /* outmost WHERE */ + e = cblock->expr; + else /* inner WHERE */ + e = mask; + + while (cblock) + { + if (cblock->expr) + { + /* Check if the mask-expr has a consistent shape with the + outmost WHERE mask-expr. */ + if (resolve_where_shape (cblock->expr, e) == FAILURE) + gfc_error ("WHERE mask at %L has inconsistent shape", + &cblock->expr->where); + } + + /* the assignment statement of a WHERE statement, or the first + statement in where-body-construct of a WHERE construct */ + cnext = cblock->next; + while (cnext) + { + switch (cnext->op) + { + /* WHERE assignment statement */ + case EXEC_ASSIGN: + + /* Check shape consistent for WHERE assignment target. */ + if (e && resolve_where_shape (cnext->expr, e) == FAILURE) + gfc_error ("WHERE assignment target at %L has " + "inconsistent shape", &cnext->expr->where); + break; + + + case EXEC_ASSIGN_CALL: + resolve_call (cnext); + if (!cnext->resolved_sym->attr.elemental) + gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L", + &cnext->ext.actual->expr->where); + break; + + /* WHERE or WHERE construct is part of a where-body-construct */ + case EXEC_WHERE: + resolve_where (cnext, e); + break; + + default: + gfc_error ("Unsupported statement inside WHERE at %L", + &cnext->loc); + } + /* the next statement within the same where-body-construct */ + cnext = cnext->next; + } + /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */ + cblock = cblock->block; + } +} + + +/* Resolve assignment in FORALL construct. + NVAR is the number of FORALL index variables, and VAR_EXPR records the + FORALL index variables. */ + +static void +gfc_resolve_assign_in_forall (gfc_code *code, int nvar, gfc_expr **var_expr) +{ + int n; + + for (n = 0; n < nvar; n++) + { + gfc_symbol *forall_index; + + forall_index = var_expr[n]->symtree->n.sym; + + /* Check whether the assignment target is one of the FORALL index + variable. */ + if ((code->expr->expr_type == EXPR_VARIABLE) + && (code->expr->symtree->n.sym == forall_index)) + gfc_error ("Assignment to a FORALL index variable at %L", + &code->expr->where); + else + { + /* If one of the FORALL index variables doesn't appear in the + assignment variable, then there could be a many-to-one + assignment. Emit a warning rather than an error because the + mask could be resolving this problem. */ + if (find_forall_index (code->expr, forall_index, 0) == FAILURE) + gfc_warning ("The FORALL with index '%s' is not used on the " + "left side of the assignment at %L and so might " + "cause multiple assignment to this object", + var_expr[n]->symtree->name, &code->expr->where); + } + } +} + + +/* Resolve WHERE statement in FORALL construct. */ + +static void +gfc_resolve_where_code_in_forall (gfc_code *code, int nvar, + gfc_expr **var_expr) +{ + gfc_code *cblock; + gfc_code *cnext; + + cblock = code->block; + while (cblock) + { + /* the assignment statement of a WHERE statement, or the first + statement in where-body-construct of a WHERE construct */ + cnext = cblock->next; + while (cnext) + { + switch (cnext->op) + { + /* WHERE assignment statement */ + case EXEC_ASSIGN: + gfc_resolve_assign_in_forall (cnext, nvar, var_expr); + break; + + /* WHERE operator assignment statement */ + case EXEC_ASSIGN_CALL: + resolve_call (cnext); + if (!cnext->resolved_sym->attr.elemental) + gfc_error("Non-ELEMENTAL user-defined assignment in WHERE at %L", + &cnext->ext.actual->expr->where); + break; + + /* WHERE or WHERE construct is part of a where-body-construct */ + case EXEC_WHERE: + gfc_resolve_where_code_in_forall (cnext, nvar, var_expr); + break; + + default: + gfc_error ("Unsupported statement inside WHERE at %L", + &cnext->loc); + } + /* the next statement within the same where-body-construct */ + cnext = cnext->next; + } + /* the next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt */ + cblock = cblock->block; + } +} + + +/* Traverse the FORALL body to check whether the following errors exist: + 1. For assignment, check if a many-to-one assignment happens. + 2. For WHERE statement, check the WHERE body to see if there is any + many-to-one assignment. */ + +static void +gfc_resolve_forall_body (gfc_code *code, int nvar, gfc_expr **var_expr) +{ + gfc_code *c; + + c = code->block->next; + while (c) + { + switch (c->op) + { + case EXEC_ASSIGN: + case EXEC_POINTER_ASSIGN: + gfc_resolve_assign_in_forall (c, nvar, var_expr); + break; + + case EXEC_ASSIGN_CALL: + resolve_call (c); + break; + + /* Because the gfc_resolve_blocks() will handle the nested FORALL, + there is no need to handle it here. */ + case EXEC_FORALL: + break; + case EXEC_WHERE: + gfc_resolve_where_code_in_forall(c, nvar, var_expr); + break; + default: + break; + } + /* The next statement in the FORALL body. */ + c = c->next; + } +} + + +/* Counts the number of iterators needed inside a forall construct, including + nested forall constructs. This is used to allocate the needed memory + in gfc_resolve_forall. */ + +static int +gfc_count_forall_iterators (gfc_code *code) +{ + int max_iters, sub_iters, current_iters; + gfc_forall_iterator *fa; + + gcc_assert(code->op == EXEC_FORALL); + max_iters = 0; + current_iters = 0; + + for (fa = code->ext.forall_iterator; fa; fa = fa->next) + current_iters ++; + + code = code->block->next; + + while (code) + { + if (code->op == EXEC_FORALL) + { + sub_iters = gfc_count_forall_iterators (code); + if (sub_iters > max_iters) + max_iters = sub_iters; + } + code = code->next; + } + + return current_iters + max_iters; +} + + +/* Given a FORALL construct, first resolve the FORALL iterator, then call + gfc_resolve_forall_body to resolve the FORALL body. */ + +static void +gfc_resolve_forall (gfc_code *code, gfc_namespace *ns, int forall_save) +{ + static gfc_expr **var_expr; + static int total_var = 0; + static int nvar = 0; + int old_nvar, tmp; + gfc_forall_iterator *fa; + int i; + + old_nvar = nvar; + + /* Start to resolve a FORALL construct */ + if (forall_save == 0) + { + /* Count the total number of FORALL index in the nested FORALL + construct in order to allocate the VAR_EXPR with proper size. */ + total_var = gfc_count_forall_iterators (code); + + /* Allocate VAR_EXPR with NUMBER_OF_FORALL_INDEX elements. */ + var_expr = (gfc_expr **) gfc_getmem (total_var * sizeof (gfc_expr *)); + } + + /* The information about FORALL iterator, including FORALL index start, end + and stride. The FORALL index can not appear in start, end or stride. */ + for (fa = code->ext.forall_iterator; fa; fa = fa->next) + { + /* Check if any outer FORALL index name is the same as the current + one. */ + for (i = 0; i < nvar; i++) + { + if (fa->var->symtree->n.sym == var_expr[i]->symtree->n.sym) + { + gfc_error ("An outer FORALL construct already has an index " + "with this name %L", &fa->var->where); + } + } + + /* Record the current FORALL index. */ + var_expr[nvar] = gfc_copy_expr (fa->var); + + nvar++; + + /* No memory leak. */ + gcc_assert (nvar <= total_var); + } + + /* Resolve the FORALL body. */ + gfc_resolve_forall_body (code, nvar, var_expr); + + /* May call gfc_resolve_forall to resolve the inner FORALL loop. */ + gfc_resolve_blocks (code->block, ns); + + tmp = nvar; + nvar = old_nvar; + /* Free only the VAR_EXPRs allocated in this frame. */ + for (i = nvar; i < tmp; i++) + gfc_free_expr (var_expr[i]); + + if (nvar == 0) + { + /* We are in the outermost FORALL construct. */ + gcc_assert (forall_save == 0); + + /* VAR_EXPR is not needed any more. */ + gfc_free (var_expr); + total_var = 0; + } +} + + +/* Resolve lists of blocks found in IF, SELECT CASE, WHERE, FORALL ,GOTO and + DO code nodes. */ + +static void resolve_code (gfc_code *, gfc_namespace *); + +void +gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns) +{ + gfc_try t; + + for (; b; b = b->block) + { + t = gfc_resolve_expr (b->expr); + if (gfc_resolve_expr (b->expr2) == FAILURE) + t = FAILURE; + + switch (b->op) + { + case EXEC_IF: + if (t == SUCCESS && b->expr != NULL + && (b->expr->ts.type != BT_LOGICAL || b->expr->rank != 0)) + gfc_error ("IF clause at %L requires a scalar LOGICAL expression", + &b->expr->where); + break; + + case EXEC_WHERE: + if (t == SUCCESS + && b->expr != NULL + && (b->expr->ts.type != BT_LOGICAL || b->expr->rank == 0)) + gfc_error ("WHERE/ELSEWHERE clause at %L requires a LOGICAL array", + &b->expr->where); + break; + + case EXEC_GOTO: + resolve_branch (b->label, b); + break; + + case EXEC_SELECT: + case EXEC_FORALL: + case EXEC_DO: + case EXEC_DO_WHILE: + case EXEC_READ: + case EXEC_WRITE: + case EXEC_IOLENGTH: + case EXEC_WAIT: + break; + + case EXEC_OMP_ATOMIC: + case EXEC_OMP_CRITICAL: + case EXEC_OMP_DO: + case EXEC_OMP_MASTER: + case EXEC_OMP_ORDERED: + case EXEC_OMP_PARALLEL: + case EXEC_OMP_PARALLEL_DO: + case EXEC_OMP_PARALLEL_SECTIONS: + case EXEC_OMP_PARALLEL_WORKSHARE: + case EXEC_OMP_SECTIONS: + case EXEC_OMP_SINGLE: + case EXEC_OMP_TASK: + case EXEC_OMP_TASKWAIT: + case EXEC_OMP_WORKSHARE: + break; + + default: + gfc_internal_error ("resolve_block(): Bad block type"); + } + + resolve_code (b->next, ns); + } +} + + +/* Does everything to resolve an ordinary assignment. Returns true + if this is an interface assignment. */ +static bool +resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns) +{ + bool rval = false; + gfc_expr *lhs; + gfc_expr *rhs; + int llen = 0; + int rlen = 0; + int n; + gfc_ref *ref; + + if (gfc_extend_assign (code, ns) == SUCCESS) + { + lhs = code->ext.actual->expr; + rhs = code->ext.actual->next->expr; + if (gfc_pure (NULL) && !gfc_pure (code->symtree->n.sym)) + { + gfc_error ("Subroutine '%s' called instead of assignment at " + "%L must be PURE", code->symtree->n.sym->name, + &code->loc); + return rval; + } + + /* Make a temporary rhs when there is a default initializer + and rhs is the same symbol as the lhs. */ + if (rhs->expr_type == EXPR_VARIABLE + && rhs->symtree->n.sym->ts.type == BT_DERIVED + && has_default_initializer (rhs->symtree->n.sym->ts.derived) + && (lhs->symtree->n.sym == rhs->symtree->n.sym)) + code->ext.actual->next->expr = gfc_get_parentheses (rhs); + + return true; + } + + lhs = code->expr; + rhs = code->expr2; + + if (rhs->is_boz + && gfc_notify_std (GFC_STD_GNU, "Extension: BOZ literal at %L outside " + "a DATA statement and outside INT/REAL/DBLE/CMPLX", + &code->loc) == FAILURE) + return false; + + /* Handle the case of a BOZ literal on the RHS. */ + if (rhs->is_boz && lhs->ts.type != BT_INTEGER) + { + int rc; + if (gfc_option.warn_surprising) + gfc_warning ("BOZ literal at %L is bitwise transferred " + "non-integer symbol '%s'", &code->loc, + lhs->symtree->n.sym->name); + + if (!gfc_convert_boz (rhs, &lhs->ts)) + return false; + if ((rc = gfc_range_check (rhs)) != ARITH_OK) + { + if (rc == ARITH_UNDERFLOW) + gfc_error ("Arithmetic underflow of bit-wise transferred BOZ at %L" + ". This check can be disabled with the option " + "-fno-range-check", &rhs->where); + else if (rc == ARITH_OVERFLOW) + gfc_error ("Arithmetic overflow of bit-wise transferred BOZ at %L" + ". This check can be disabled with the option " + "-fno-range-check", &rhs->where); + else if (rc == ARITH_NAN) + gfc_error ("Arithmetic NaN of bit-wise transferred BOZ at %L" + ". This check can be disabled with the option " + "-fno-range-check", &rhs->where); + return false; + } + } + + + if (lhs->ts.type == BT_CHARACTER + && gfc_option.warn_character_truncation) + { + if (lhs->ts.cl != NULL + && lhs->ts.cl->length != NULL + && lhs->ts.cl->length->expr_type == EXPR_CONSTANT) + llen = mpz_get_si (lhs->ts.cl->length->value.integer); + + if (rhs->expr_type == EXPR_CONSTANT) + rlen = rhs->value.character.length; + + else if (rhs->ts.cl != NULL + && rhs->ts.cl->length != NULL + && rhs->ts.cl->length->expr_type == EXPR_CONSTANT) + rlen = mpz_get_si (rhs->ts.cl->length->value.integer); + + if (rlen && llen && rlen > llen) + gfc_warning_now ("CHARACTER expression will be truncated " + "in assignment (%d/%d) at %L", + llen, rlen, &code->loc); + } + + /* Ensure that a vector index expression for the lvalue is evaluated + to a temporary if the lvalue symbol is referenced in it. */ + if (lhs->rank) + { + for (ref = lhs->ref; ref; ref= ref->next) + if (ref->type == REF_ARRAY) + { + for (n = 0; n < ref->u.ar.dimen; n++) + if (ref->u.ar.dimen_type[n] == DIMEN_VECTOR + && gfc_find_sym_in_expr (lhs->symtree->n.sym, + ref->u.ar.start[n])) + ref->u.ar.start[n] + = gfc_get_parentheses (ref->u.ar.start[n]); + } + } + + if (gfc_pure (NULL)) + { + if (gfc_impure_variable (lhs->symtree->n.sym)) + { + gfc_error ("Cannot assign to variable '%s' in PURE " + "procedure at %L", + lhs->symtree->n.sym->name, + &lhs->where); + return rval; + } + + if (lhs->ts.type == BT_DERIVED + && lhs->expr_type == EXPR_VARIABLE + && lhs->ts.derived->attr.pointer_comp + && gfc_impure_variable (rhs->symtree->n.sym)) + { + gfc_error ("The impure variable at %L is assigned to " + "a derived type variable with a POINTER " + "component in a PURE procedure (12.6)", + &rhs->where); + return rval; + } + } + + gfc_check_assign (lhs, rhs, 1); + return false; +} + +/* Given a block of code, recursively resolve everything pointed to by this + code block. */ + +static void +resolve_code (gfc_code *code, gfc_namespace *ns) +{ + int omp_workshare_save; + int forall_save; + code_stack frame; + gfc_try t; + + frame.prev = cs_base; + frame.head = code; + cs_base = &frame; + + reachable_labels (code); + + for (; code; code = code->next) + { + frame.current = code; + forall_save = forall_flag; + + if (code->op == EXEC_FORALL) + { + forall_flag = 1; + gfc_resolve_forall (code, ns, forall_save); + forall_flag = 2; + } + else if (code->block) + { + omp_workshare_save = -1; + switch (code->op) + { + case EXEC_OMP_PARALLEL_WORKSHARE: + omp_workshare_save = omp_workshare_flag; + omp_workshare_flag = 1; + gfc_resolve_omp_parallel_blocks (code, ns); + break; + case EXEC_OMP_PARALLEL: + case EXEC_OMP_PARALLEL_DO: + case EXEC_OMP_PARALLEL_SECTIONS: + case EXEC_OMP_TASK: + omp_workshare_save = omp_workshare_flag; + omp_workshare_flag = 0; + gfc_resolve_omp_parallel_blocks (code, ns); + break; + case EXEC_OMP_DO: + gfc_resolve_omp_do_blocks (code, ns); + break; + case EXEC_OMP_WORKSHARE: + omp_workshare_save = omp_workshare_flag; + omp_workshare_flag = 1; + /* FALLTHROUGH */ + default: + gfc_resolve_blocks (code->block, ns); + break; + } + + if (omp_workshare_save != -1) + omp_workshare_flag = omp_workshare_save; + } + + t = SUCCESS; + if (code->op != EXEC_COMPCALL) + t = gfc_resolve_expr (code->expr); + forall_flag = forall_save; + + if (gfc_resolve_expr (code->expr2) == FAILURE) + t = FAILURE; + + switch (code->op) + { + case EXEC_NOP: + case EXEC_CYCLE: + case EXEC_PAUSE: + case EXEC_STOP: + case EXEC_EXIT: + case EXEC_CONTINUE: + case EXEC_DT_END: + break; + + case EXEC_ENTRY: + /* Keep track of which entry we are up to. */ + current_entry_id = code->ext.entry->id; + break; + + case EXEC_WHERE: + resolve_where (code, NULL); + break; + + case EXEC_GOTO: + if (code->expr != NULL) + { + if (code->expr->ts.type != BT_INTEGER) + gfc_error ("ASSIGNED GOTO statement at %L requires an " + "INTEGER variable", &code->expr->where); + else if (code->expr->symtree->n.sym->attr.assign != 1) + gfc_error ("Variable '%s' has not been assigned a target " + "label at %L", code->expr->symtree->n.sym->name, + &code->expr->where); + } + else + resolve_branch (code->label, code); + break; + + case EXEC_RETURN: + if (code->expr != NULL + && (code->expr->ts.type != BT_INTEGER || code->expr->rank)) + gfc_error ("Alternate RETURN statement at %L requires a SCALAR-" + "INTEGER return specifier", &code->expr->where); + break; + + case EXEC_INIT_ASSIGN: + break; + + case EXEC_ASSIGN: + if (t == FAILURE) + break; + + if (resolve_ordinary_assign (code, ns)) + goto call; + + break; + + case EXEC_LABEL_ASSIGN: + if (code->label->defined == ST_LABEL_UNKNOWN) + gfc_error ("Label %d referenced at %L is never defined", + code->label->value, &code->label->where); + if (t == SUCCESS + && (code->expr->expr_type != EXPR_VARIABLE + || code->expr->symtree->n.sym->ts.type != BT_INTEGER + || code->expr->symtree->n.sym->ts.kind + != gfc_default_integer_kind + || code->expr->symtree->n.sym->as != NULL)) + gfc_error ("ASSIGN statement at %L requires a scalar " + "default INTEGER variable", &code->expr->where); + break; + + case EXEC_POINTER_ASSIGN: + if (t == FAILURE) + break; + + gfc_check_pointer_assign (code->expr, code->expr2); + break; + + case EXEC_ARITHMETIC_IF: + if (t == SUCCESS + && code->expr->ts.type != BT_INTEGER + && code->expr->ts.type != BT_REAL) + gfc_error ("Arithmetic IF statement at %L requires a numeric " + "expression", &code->expr->where); + + resolve_branch (code->label, code); + resolve_branch (code->label2, code); + resolve_branch (code->label3, code); + break; + + case EXEC_IF: + if (t == SUCCESS && code->expr != NULL + && (code->expr->ts.type != BT_LOGICAL + || code->expr->rank != 0)) + gfc_error ("IF clause at %L requires a scalar LOGICAL expression", + &code->expr->where); + break; + + case EXEC_CALL: + call: + resolve_call (code); + break; + + case EXEC_COMPCALL: + resolve_typebound_call (code); + break; + + case EXEC_SELECT: + /* Select is complicated. Also, a SELECT construct could be + a transformed computed GOTO. */ + resolve_select (code); + break; + + case EXEC_DO: + if (code->ext.iterator != NULL) + { + gfc_iterator *iter = code->ext.iterator; + if (gfc_resolve_iterator (iter, true) != FAILURE) + gfc_resolve_do_iterator (code, iter->var->symtree->n.sym); + } + break; + + case EXEC_DO_WHILE: + if (code->expr == NULL) + gfc_internal_error ("resolve_code(): No expression on DO WHILE"); + if (t == SUCCESS + && (code->expr->rank != 0 + || code->expr->ts.type != BT_LOGICAL)) + gfc_error ("Exit condition of DO WHILE loop at %L must be " + "a scalar LOGICAL expression", &code->expr->where); + break; + + case EXEC_ALLOCATE: + if (t == SUCCESS) + resolve_allocate_deallocate (code, "ALLOCATE"); + + break; + + case EXEC_DEALLOCATE: + if (t == SUCCESS) + resolve_allocate_deallocate (code, "DEALLOCATE"); + + break; + + case EXEC_OPEN: + if (gfc_resolve_open (code->ext.open) == FAILURE) + break; + + resolve_branch (code->ext.open->err, code); + break; + + case EXEC_CLOSE: + if (gfc_resolve_close (code->ext.close) == FAILURE) + break; + + resolve_branch (code->ext.close->err, code); + break; + + case EXEC_BACKSPACE: + case EXEC_ENDFILE: + case EXEC_REWIND: + case EXEC_FLUSH: + if (gfc_resolve_filepos (code->ext.filepos) == FAILURE) + break; + + resolve_branch (code->ext.filepos->err, code); + break; + + case EXEC_INQUIRE: + if (gfc_resolve_inquire (code->ext.inquire) == FAILURE) + break; + + resolve_branch (code->ext.inquire->err, code); + break; + + case EXEC_IOLENGTH: + gcc_assert (code->ext.inquire != NULL); + if (gfc_resolve_inquire (code->ext.inquire) == FAILURE) + break; + + resolve_branch (code->ext.inquire->err, code); + break; + + case EXEC_WAIT: + if (gfc_resolve_wait (code->ext.wait) == FAILURE) + break; + + resolve_branch (code->ext.wait->err, code); + resolve_branch (code->ext.wait->end, code); + resolve_branch (code->ext.wait->eor, code); + break; + + case EXEC_READ: + case EXEC_WRITE: + if (gfc_resolve_dt (code->ext.dt) == FAILURE) + break; + + resolve_branch (code->ext.dt->err, code); + resolve_branch (code->ext.dt->end, code); + resolve_branch (code->ext.dt->eor, code); + break; + + case EXEC_TRANSFER: + resolve_transfer (code); + break; + + case EXEC_FORALL: + resolve_forall_iterators (code->ext.forall_iterator); + + if (code->expr != NULL && code->expr->ts.type != BT_LOGICAL) + gfc_error ("FORALL mask clause at %L requires a LOGICAL " + "expression", &code->expr->where); + break; + + case EXEC_OMP_ATOMIC: + case EXEC_OMP_BARRIER: + case EXEC_OMP_CRITICAL: + case EXEC_OMP_FLUSH: + case EXEC_OMP_DO: + case EXEC_OMP_MASTER: + case EXEC_OMP_ORDERED: + case EXEC_OMP_SECTIONS: + case EXEC_OMP_SINGLE: + case EXEC_OMP_TASKWAIT: + case EXEC_OMP_WORKSHARE: + gfc_resolve_omp_directive (code, ns); + break; + + case EXEC_OMP_PARALLEL: + case EXEC_OMP_PARALLEL_DO: + case EXEC_OMP_PARALLEL_SECTIONS: + case EXEC_OMP_PARALLEL_WORKSHARE: + case EXEC_OMP_TASK: + omp_workshare_save = omp_workshare_flag; + omp_workshare_flag = 0; + gfc_resolve_omp_directive (code, ns); + omp_workshare_flag = omp_workshare_save; + break; + + default: + gfc_internal_error ("resolve_code(): Bad statement code"); + } + } + + cs_base = frame.prev; +} + + +/* Resolve initial values and make sure they are compatible with + the variable. */ + +static void +resolve_values (gfc_symbol *sym) +{ + if (sym->value == NULL) + return; + + if (gfc_resolve_expr (sym->value) == FAILURE) + return; + + gfc_check_assign_symbol (sym, sym->value); +} + + +/* Verify the binding labels for common blocks that are BIND(C). The label + for a BIND(C) common block must be identical in all scoping units in which + the common block is declared. Further, the binding label can not collide + with any other global entity in the program. */ + +static void +resolve_bind_c_comms (gfc_symtree *comm_block_tree) +{ + if (comm_block_tree->n.common->is_bind_c == 1) + { + gfc_gsymbol *binding_label_gsym; + gfc_gsymbol *comm_name_gsym; + + /* See if a global symbol exists by the common block's name. It may + be NULL if the common block is use-associated. */ + comm_name_gsym = gfc_find_gsymbol (gfc_gsym_root, + comm_block_tree->n.common->name); + if (comm_name_gsym != NULL && comm_name_gsym->type != GSYM_COMMON) + gfc_error ("Binding label '%s' for common block '%s' at %L collides " + "with the global entity '%s' at %L", + comm_block_tree->n.common->binding_label, + comm_block_tree->n.common->name, + &(comm_block_tree->n.common->where), + comm_name_gsym->name, &(comm_name_gsym->where)); + else if (comm_name_gsym != NULL + && strcmp (comm_name_gsym->name, + comm_block_tree->n.common->name) == 0) + { + /* TODO: Need to make sure the fields of gfc_gsymbol are initialized + as expected. */ + if (comm_name_gsym->binding_label == NULL) + /* No binding label for common block stored yet; save this one. */ + comm_name_gsym->binding_label = + comm_block_tree->n.common->binding_label; + else + if (strcmp (comm_name_gsym->binding_label, + comm_block_tree->n.common->binding_label) != 0) + { + /* Common block names match but binding labels do not. */ + gfc_error ("Binding label '%s' for common block '%s' at %L " + "does not match the binding label '%s' for common " + "block '%s' at %L", + comm_block_tree->n.common->binding_label, + comm_block_tree->n.common->name, + &(comm_block_tree->n.common->where), + comm_name_gsym->binding_label, + comm_name_gsym->name, + &(comm_name_gsym->where)); + return; + } + } + + /* There is no binding label (NAME="") so we have nothing further to + check and nothing to add as a global symbol for the label. */ + if (comm_block_tree->n.common->binding_label[0] == '\0' ) + return; + + binding_label_gsym = + gfc_find_gsymbol (gfc_gsym_root, + comm_block_tree->n.common->binding_label); + if (binding_label_gsym == NULL) + { + /* Need to make a global symbol for the binding label to prevent + it from colliding with another. */ + binding_label_gsym = + gfc_get_gsymbol (comm_block_tree->n.common->binding_label); + binding_label_gsym->sym_name = comm_block_tree->n.common->name; + binding_label_gsym->type = GSYM_COMMON; + } + else + { + /* If comm_name_gsym is NULL, the name common block is use + associated and the name could be colliding. */ + if (binding_label_gsym->type != GSYM_COMMON) + gfc_error ("Binding label '%s' for common block '%s' at %L " + "collides with the global entity '%s' at %L", + comm_block_tree->n.common->binding_label, + comm_block_tree->n.common->name, + &(comm_block_tree->n.common->where), + binding_label_gsym->name, + &(binding_label_gsym->where)); + else if (comm_name_gsym != NULL + && (strcmp (binding_label_gsym->name, + comm_name_gsym->binding_label) != 0) + && (strcmp (binding_label_gsym->sym_name, + comm_name_gsym->name) != 0)) + gfc_error ("Binding label '%s' for common block '%s' at %L " + "collides with global entity '%s' at %L", + binding_label_gsym->name, binding_label_gsym->sym_name, + &(comm_block_tree->n.common->where), + comm_name_gsym->name, &(comm_name_gsym->where)); + } + } + + return; +} + + +/* Verify any BIND(C) derived types in the namespace so we can report errors + for them once, rather than for each variable declared of that type. */ + +static void +resolve_bind_c_derived_types (gfc_symbol *derived_sym) +{ + if (derived_sym != NULL && derived_sym->attr.flavor == FL_DERIVED + && derived_sym->attr.is_bind_c == 1) + verify_bind_c_derived_type (derived_sym); + + return; +} + + +/* Verify that any binding labels used in a given namespace do not collide + with the names or binding labels of any global symbols. */ + +static void +gfc_verify_binding_labels (gfc_symbol *sym) +{ + int has_error = 0; + + if (sym != NULL && sym->attr.is_bind_c && sym->attr.is_iso_c == 0 + && sym->attr.flavor != FL_DERIVED && sym->binding_label[0] != '\0') + { + gfc_gsymbol *bind_c_sym; + + bind_c_sym = gfc_find_gsymbol (gfc_gsym_root, sym->binding_label); + if (bind_c_sym != NULL + && strcmp (bind_c_sym->name, sym->binding_label) == 0) + { + if (sym->attr.if_source == IFSRC_DECL + && (bind_c_sym->type != GSYM_SUBROUTINE + && bind_c_sym->type != GSYM_FUNCTION) + && ((sym->attr.contained == 1 + && strcmp (bind_c_sym->sym_name, sym->name) != 0) + || (sym->attr.use_assoc == 1 + && (strcmp (bind_c_sym->mod_name, sym->module) != 0)))) + { + /* Make sure global procedures don't collide with anything. */ + gfc_error ("Binding label '%s' at %L collides with the global " + "entity '%s' at %L", sym->binding_label, + &(sym->declared_at), bind_c_sym->name, + &(bind_c_sym->where)); + has_error = 1; + } + else if (sym->attr.contained == 0 + && (sym->attr.if_source == IFSRC_IFBODY + && sym->attr.flavor == FL_PROCEDURE) + && (bind_c_sym->sym_name != NULL + && strcmp (bind_c_sym->sym_name, sym->name) != 0)) + { + /* Make sure procedures in interface bodies don't collide. */ + gfc_error ("Binding label '%s' in interface body at %L collides " + "with the global entity '%s' at %L", + sym->binding_label, + &(sym->declared_at), bind_c_sym->name, + &(bind_c_sym->where)); + has_error = 1; + } + else if (sym->attr.contained == 0 + && sym->attr.if_source == IFSRC_UNKNOWN) + if ((sym->attr.use_assoc && bind_c_sym->mod_name + && strcmp (bind_c_sym->mod_name, sym->module) != 0) + || sym->attr.use_assoc == 0) + { + gfc_error ("Binding label '%s' at %L collides with global " + "entity '%s' at %L", sym->binding_label, + &(sym->declared_at), bind_c_sym->name, + &(bind_c_sym->where)); + has_error = 1; + } + + if (has_error != 0) + /* Clear the binding label to prevent checking multiple times. */ + sym->binding_label[0] = '\0'; + } + else if (bind_c_sym == NULL) + { + bind_c_sym = gfc_get_gsymbol (sym->binding_label); + bind_c_sym->where = sym->declared_at; + bind_c_sym->sym_name = sym->name; + + if (sym->attr.use_assoc == 1) + bind_c_sym->mod_name = sym->module; + else + if (sym->ns->proc_name != NULL) + bind_c_sym->mod_name = sym->ns->proc_name->name; + + if (sym->attr.contained == 0) + { + if (sym->attr.subroutine) + bind_c_sym->type = GSYM_SUBROUTINE; + else if (sym->attr.function) + bind_c_sym->type = GSYM_FUNCTION; + } + } + } + return; +} + + +/* Resolve an index expression. */ + +static gfc_try +resolve_index_expr (gfc_expr *e) +{ + if (gfc_resolve_expr (e) == FAILURE) + return FAILURE; + + if (gfc_simplify_expr (e, 0) == FAILURE) + return FAILURE; + + if (gfc_specification_expr (e) == FAILURE) + return FAILURE; + + return SUCCESS; +} + +/* Resolve a charlen structure. */ + +static gfc_try +resolve_charlen (gfc_charlen *cl) +{ + int i; + + if (cl->resolved) + return SUCCESS; + + cl->resolved = 1; + + specification_expr = 1; + + if (resolve_index_expr (cl->length) == FAILURE) + { + specification_expr = 0; + return FAILURE; + } + + /* "If the character length parameter value evaluates to a negative + value, the length of character entities declared is zero." */ + if (cl->length && !gfc_extract_int (cl->length, &i) && i < 0) + { + gfc_warning_now ("CHARACTER variable has zero length at %L", + &cl->length->where); + gfc_replace_expr (cl->length, gfc_int_expr (0)); + } + + return SUCCESS; +} + + +/* Test for non-constant shape arrays. */ + +static bool +is_non_constant_shape_array (gfc_symbol *sym) +{ + gfc_expr *e; + int i; + bool not_constant; + + not_constant = false; + if (sym->as != NULL) + { + /* Unfortunately, !gfc_is_compile_time_shape hits a legal case that + has not been simplified; parameter array references. Do the + simplification now. */ + for (i = 0; i < sym->as->rank; i++) + { + e = sym->as->lower[i]; + if (e && (resolve_index_expr (e) == FAILURE + || !gfc_is_constant_expr (e))) + not_constant = true; + + e = sym->as->upper[i]; + if (e && (resolve_index_expr (e) == FAILURE + || !gfc_is_constant_expr (e))) + not_constant = true; + } + } + return not_constant; +} + +/* Given a symbol and an initialization expression, add code to initialize + the symbol to the function entry. */ +static void +build_init_assign (gfc_symbol *sym, gfc_expr *init) +{ + gfc_expr *lval; + gfc_code *init_st; + gfc_namespace *ns = sym->ns; + + /* Search for the function namespace if this is a contained + function without an explicit result. */ + if (sym->attr.function && sym == sym->result + && sym->name != sym->ns->proc_name->name) + { + ns = ns->contained; + for (;ns; ns = ns->sibling) + if (strcmp (ns->proc_name->name, sym->name) == 0) + break; + } + + if (ns == NULL) + { + gfc_free_expr (init); + return; + } + + /* Build an l-value expression for the result. */ + lval = gfc_lval_expr_from_sym (sym); + + /* Add the code at scope entry. */ + init_st = gfc_get_code (); + init_st->next = ns->code; + ns->code = init_st; + + /* Assign the default initializer to the l-value. */ + init_st->loc = sym->declared_at; + init_st->op = EXEC_INIT_ASSIGN; + init_st->expr = lval; + init_st->expr2 = init; +} + +/* Assign the default initializer to a derived type variable or result. */ + +static void +apply_default_init (gfc_symbol *sym) +{ + gfc_expr *init = NULL; + + if (sym->attr.flavor != FL_VARIABLE && !sym->attr.function) + return; + + if (sym->ts.type == BT_DERIVED && sym->ts.derived) + init = gfc_default_initializer (&sym->ts); + + if (init == NULL) + return; + + build_init_assign (sym, init); +} + +/* Build an initializer for a local integer, real, complex, logical, or + character variable, based on the command line flags finit-local-zero, + finit-integer=, finit-real=, finit-logical=, and finit-runtime. Returns + null if the symbol should not have a default initialization. */ +static gfc_expr * +build_default_init_expr (gfc_symbol *sym) +{ + int char_len; + gfc_expr *init_expr; + int i; + + /* These symbols should never have a default initialization. */ + if ((sym->attr.dimension && !gfc_is_compile_time_shape (sym->as)) + || sym->attr.external + || sym->attr.dummy + || sym->attr.pointer + || sym->attr.in_equivalence + || sym->attr.in_common + || sym->attr.data + || sym->module + || sym->attr.cray_pointee + || sym->attr.cray_pointer) + return NULL; + + /* Now we'll try to build an initializer expression. */ + init_expr = gfc_get_expr (); + init_expr->expr_type = EXPR_CONSTANT; + init_expr->ts.type = sym->ts.type; + init_expr->ts.kind = sym->ts.kind; + init_expr->where = sym->declared_at; + + /* We will only initialize integers, reals, complex, logicals, and + characters, and only if the corresponding command-line flags + were set. Otherwise, we free init_expr and return null. */ + switch (sym->ts.type) + { + case BT_INTEGER: + if (gfc_option.flag_init_integer != GFC_INIT_INTEGER_OFF) + mpz_init_set_si (init_expr->value.integer, + gfc_option.flag_init_integer_value); + else + { + gfc_free_expr (init_expr); + init_expr = NULL; + } + break; + + case BT_REAL: + mpfr_init (init_expr->value.real); + switch (gfc_option.flag_init_real) + { + case GFC_INIT_REAL_NAN: + mpfr_set_nan (init_expr->value.real); + break; + + case GFC_INIT_REAL_INF: + mpfr_set_inf (init_expr->value.real, 1); + break; + + case GFC_INIT_REAL_NEG_INF: + mpfr_set_inf (init_expr->value.real, -1); + break; + + case GFC_INIT_REAL_ZERO: + mpfr_set_ui (init_expr->value.real, 0.0, GFC_RND_MODE); + break; + + default: + gfc_free_expr (init_expr); + init_expr = NULL; + break; + } + break; + + case BT_COMPLEX: + mpfr_init (init_expr->value.complex.r); + mpfr_init (init_expr->value.complex.i); + switch (gfc_option.flag_init_real) + { + case GFC_INIT_REAL_NAN: + mpfr_set_nan (init_expr->value.complex.r); + mpfr_set_nan (init_expr->value.complex.i); + break; + + case GFC_INIT_REAL_INF: + mpfr_set_inf (init_expr->value.complex.r, 1); + mpfr_set_inf (init_expr->value.complex.i, 1); + break; + + case GFC_INIT_REAL_NEG_INF: + mpfr_set_inf (init_expr->value.complex.r, -1); + mpfr_set_inf (init_expr->value.complex.i, -1); + break; + + case GFC_INIT_REAL_ZERO: + mpfr_set_ui (init_expr->value.complex.r, 0.0, GFC_RND_MODE); + mpfr_set_ui (init_expr->value.complex.i, 0.0, GFC_RND_MODE); + break; + + default: + gfc_free_expr (init_expr); + init_expr = NULL; + break; + } + break; + + case BT_LOGICAL: + if (gfc_option.flag_init_logical == GFC_INIT_LOGICAL_FALSE) + init_expr->value.logical = 0; + else if (gfc_option.flag_init_logical == GFC_INIT_LOGICAL_TRUE) + init_expr->value.logical = 1; + else + { + gfc_free_expr (init_expr); + init_expr = NULL; + } + break; + + case BT_CHARACTER: + /* For characters, the length must be constant in order to + create a default initializer. */ + if (gfc_option.flag_init_character == GFC_INIT_CHARACTER_ON + && sym->ts.cl->length + && sym->ts.cl->length->expr_type == EXPR_CONSTANT) + { + char_len = mpz_get_si (sym->ts.cl->length->value.integer); + init_expr->value.character.length = char_len; + init_expr->value.character.string = gfc_get_wide_string (char_len+1); + for (i = 0; i < char_len; i++) + init_expr->value.character.string[i] + = (unsigned char) gfc_option.flag_init_character_value; + } + else + { + gfc_free_expr (init_expr); + init_expr = NULL; + } + break; + + default: + gfc_free_expr (init_expr); + init_expr = NULL; + } + return init_expr; +} + +/* Add an initialization expression to a local variable. */ +static void +apply_default_init_local (gfc_symbol *sym) +{ + gfc_expr *init = NULL; + + /* The symbol should be a variable or a function return value. */ + if ((sym->attr.flavor != FL_VARIABLE && !sym->attr.function) + || (sym->attr.function && sym->result != sym)) + return; + + /* Try to build the initializer expression. If we can't initialize + this symbol, then init will be NULL. */ + init = build_default_init_expr (sym); + if (init == NULL) + return; + + /* For saved variables, we don't want to add an initializer at + function entry, so we just add a static initializer. */ + if (sym->attr.save || sym->ns->save_all) + { + /* Don't clobber an existing initializer! */ + gcc_assert (sym->value == NULL); + sym->value = init; + return; + } + + build_init_assign (sym, init); +} + +/* Resolution of common features of flavors variable and procedure. */ + +static gfc_try +resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag) +{ + /* Constraints on deferred shape variable. */ + if (sym->as == NULL || sym->as->type != AS_DEFERRED) + { + if (sym->attr.allocatable) + { + if (sym->attr.dimension) + gfc_error ("Allocatable array '%s' at %L must have " + "a deferred shape", sym->name, &sym->declared_at); + else + gfc_error ("Scalar object '%s' at %L may not be ALLOCATABLE", + sym->name, &sym->declared_at); + return FAILURE; + } + + if (sym->attr.pointer && sym->attr.dimension) + { + gfc_error ("Array pointer '%s' at %L must have a deferred shape", + sym->name, &sym->declared_at); + return FAILURE; + } + + } + else + { + if (!mp_flag && !sym->attr.allocatable + && !sym->attr.pointer && !sym->attr.dummy) + { + gfc_error ("Array '%s' at %L cannot have a deferred shape", + sym->name, &sym->declared_at); + return FAILURE; + } + } + return SUCCESS; +} + + +/* Additional checks for symbols with flavor variable and derived + type. To be called from resolve_fl_variable. */ + +static gfc_try +resolve_fl_variable_derived (gfc_symbol *sym, int no_init_flag) +{ + gcc_assert (sym->ts.type == BT_DERIVED); + + /* Check to see if a derived type is blocked from being host + associated by the presence of another class I symbol in the same + namespace. 14.6.1.3 of the standard and the discussion on + comp.lang.fortran. */ + if (sym->ns != sym->ts.derived->ns + && sym->ns->proc_name->attr.if_source != IFSRC_IFBODY) + { + gfc_symbol *s; + gfc_find_symbol (sym->ts.derived->name, sym->ns, 0, &s); + if (s && s->attr.flavor != FL_DERIVED) + { + gfc_error ("The type '%s' cannot be host associated at %L " + "because it is blocked by an incompatible object " + "of the same name declared at %L", + sym->ts.derived->name, &sym->declared_at, + &s->declared_at); + return FAILURE; + } + } + + /* 4th constraint in section 11.3: "If an object of a type for which + component-initialization is specified (R429) appears in the + specification-part of a module and does not have the ALLOCATABLE + or POINTER attribute, the object shall have the SAVE attribute." + + The check for initializers is performed with + has_default_initializer because gfc_default_initializer generates + a hidden default for allocatable components. */ + if (!(sym->value || no_init_flag) && sym->ns->proc_name + && sym->ns->proc_name->attr.flavor == FL_MODULE + && !sym->ns->save_all && !sym->attr.save + && !sym->attr.pointer && !sym->attr.allocatable + && has_default_initializer (sym->ts.derived)) + { + gfc_error("Object '%s' at %L must have the SAVE attribute for " + "default initialization of a component", + sym->name, &sym->declared_at); + return FAILURE; + } + + /* Assign default initializer. */ + if (!(sym->value || sym->attr.pointer || sym->attr.allocatable) + && (!no_init_flag || sym->attr.intent == INTENT_OUT)) + { + sym->value = gfc_default_initializer (&sym->ts); + } + + return SUCCESS; +} + + +/* Resolve symbols with flavor variable. */ + +static gfc_try +resolve_fl_variable (gfc_symbol *sym, int mp_flag) +{ + int no_init_flag, automatic_flag; + gfc_expr *e; + const char *auto_save_msg; + + auto_save_msg = "Automatic object '%s' at %L cannot have the " + "SAVE attribute"; + + if (resolve_fl_var_and_proc (sym, mp_flag) == FAILURE) + return FAILURE; + + /* Set this flag to check that variables are parameters of all entries. + This check is effected by the call to gfc_resolve_expr through + is_non_constant_shape_array. */ + specification_expr = 1; + + if (sym->ns->proc_name + && (sym->ns->proc_name->attr.flavor == FL_MODULE + || sym->ns->proc_name->attr.is_main_program) + && !sym->attr.use_assoc + && !sym->attr.allocatable + && !sym->attr.pointer + && is_non_constant_shape_array (sym)) + { + /* The shape of a main program or module array needs to be + constant. */ + gfc_error ("The module or main program array '%s' at %L must " + "have constant shape", sym->name, &sym->declared_at); + specification_expr = 0; + return FAILURE; + } + + if (sym->ts.type == BT_CHARACTER) + { + /* Make sure that character string variables with assumed length are + dummy arguments. */ + e = sym->ts.cl->length; + if (e == NULL && !sym->attr.dummy && !sym->attr.result) + { + gfc_error ("Entity with assumed character length at %L must be a " + "dummy argument or a PARAMETER", &sym->declared_at); + return FAILURE; + } + + if (e && sym->attr.save && !gfc_is_constant_expr (e)) + { + gfc_error (auto_save_msg, sym->name, &sym->declared_at); + return FAILURE; + } + + if (!gfc_is_constant_expr (e) + && !(e->expr_type == EXPR_VARIABLE + && e->symtree->n.sym->attr.flavor == FL_PARAMETER) + && sym->ns->proc_name + && (sym->ns->proc_name->attr.flavor == FL_MODULE + || sym->ns->proc_name->attr.is_main_program) + && !sym->attr.use_assoc) + { + gfc_error ("'%s' at %L must have constant character length " + "in this context", sym->name, &sym->declared_at); + return FAILURE; + } + } + + if (sym->value == NULL && sym->attr.referenced) + apply_default_init_local (sym); /* Try to apply a default initialization. */ + + /* Determine if the symbol may not have an initializer. */ + no_init_flag = automatic_flag = 0; + if (sym->attr.allocatable || sym->attr.external || sym->attr.dummy + || sym->attr.intrinsic || sym->attr.result) + no_init_flag = 1; + else if (sym->attr.dimension && !sym->attr.pointer + && is_non_constant_shape_array (sym)) + { + no_init_flag = automatic_flag = 1; + + /* Also, they must not have the SAVE attribute. + SAVE_IMPLICIT is checked below. */ + if (sym->attr.save == SAVE_EXPLICIT) + { + gfc_error (auto_save_msg, sym->name, &sym->declared_at); + return FAILURE; + } + } + + /* Ensure that any initializer is simplified. */ + if (sym->value) + gfc_simplify_expr (sym->value, 1); + + /* Reject illegal initializers. */ + if (!sym->mark && sym->value) + { + if (sym->attr.allocatable) + gfc_error ("Allocatable '%s' at %L cannot have an initializer", + sym->name, &sym->declared_at); + else if (sym->attr.external) + gfc_error ("External '%s' at %L cannot have an initializer", + sym->name, &sym->declared_at); + else if (sym->attr.dummy + && !(sym->ts.type == BT_DERIVED && sym->attr.intent == INTENT_OUT)) + gfc_error ("Dummy '%s' at %L cannot have an initializer", + sym->name, &sym->declared_at); + else if (sym->attr.intrinsic) + gfc_error ("Intrinsic '%s' at %L cannot have an initializer", + sym->name, &sym->declared_at); + else if (sym->attr.result) + gfc_error ("Function result '%s' at %L cannot have an initializer", + sym->name, &sym->declared_at); + else if (automatic_flag) + gfc_error ("Automatic array '%s' at %L cannot have an initializer", + sym->name, &sym->declared_at); + else + goto no_init_error; + return FAILURE; + } + +no_init_error: + if (sym->ts.type == BT_DERIVED) + return resolve_fl_variable_derived (sym, no_init_flag); + + return SUCCESS; +} + + +/* Resolve a procedure. */ + +static gfc_try +resolve_fl_procedure (gfc_symbol *sym, int mp_flag) +{ + gfc_formal_arglist *arg; + + if (sym->attr.ambiguous_interfaces && !sym->attr.referenced) + gfc_warning ("Although not referenced, '%s' at %L has ambiguous " + "interfaces", sym->name, &sym->declared_at); + + if (sym->attr.function + && resolve_fl_var_and_proc (sym, mp_flag) == FAILURE) + return FAILURE; + + if (sym->ts.type == BT_CHARACTER) + { + gfc_charlen *cl = sym->ts.cl; + + if (cl && cl->length && gfc_is_constant_expr (cl->length) + && resolve_charlen (cl) == FAILURE) + return FAILURE; + + if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT) + { + if (sym->attr.proc == PROC_ST_FUNCTION) + { + gfc_error ("Character-valued statement function '%s' at %L must " + "have constant length", sym->name, &sym->declared_at); + return FAILURE; + } + + if (sym->attr.external && sym->formal == NULL + && cl && cl->length && cl->length->expr_type != EXPR_CONSTANT) + { + gfc_error ("Automatic character length function '%s' at %L must " + "have an explicit interface", sym->name, + &sym->declared_at); + return FAILURE; + } + } + } + + /* Ensure that derived type for are not of a private type. Internal + module procedures are excluded by 2.2.3.3 - i.e., they are not + externally accessible and can access all the objects accessible in + the host. */ + if (!(sym->ns->parent + && sym->ns->parent->proc_name->attr.flavor == FL_MODULE) + && gfc_check_access(sym->attr.access, sym->ns->default_access)) + { + gfc_interface *iface; + + for (arg = sym->formal; arg; arg = arg->next) + { + if (arg->sym + && arg->sym->ts.type == BT_DERIVED + && !arg->sym->ts.derived->attr.use_assoc + && !gfc_check_access (arg->sym->ts.derived->attr.access, + arg->sym->ts.derived->ns->default_access) + && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: '%s' is of a " + "PRIVATE type and cannot be a dummy argument" + " of '%s', which is PUBLIC at %L", + arg->sym->name, sym->name, &sym->declared_at) + == FAILURE) + { + /* Stop this message from recurring. */ + arg->sym->ts.derived->attr.access = ACCESS_PUBLIC; + return FAILURE; + } + } + + /* PUBLIC interfaces may expose PRIVATE procedures that take types + PRIVATE to the containing module. */ + for (iface = sym->generic; iface; iface = iface->next) + { + for (arg = iface->sym->formal; arg; arg = arg->next) + { + if (arg->sym + && arg->sym->ts.type == BT_DERIVED + && !arg->sym->ts.derived->attr.use_assoc + && !gfc_check_access (arg->sym->ts.derived->attr.access, + arg->sym->ts.derived->ns->default_access) + && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Procedure " + "'%s' in PUBLIC interface '%s' at %L " + "takes dummy arguments of '%s' which is " + "PRIVATE", iface->sym->name, sym->name, + &iface->sym->declared_at, + gfc_typename (&arg->sym->ts)) == FAILURE) + { + /* Stop this message from recurring. */ + arg->sym->ts.derived->attr.access = ACCESS_PUBLIC; + return FAILURE; + } + } + } + + /* PUBLIC interfaces may expose PRIVATE procedures that take types + PRIVATE to the containing module. */ + for (iface = sym->generic; iface; iface = iface->next) + { + for (arg = iface->sym->formal; arg; arg = arg->next) + { + if (arg->sym + && arg->sym->ts.type == BT_DERIVED + && !arg->sym->ts.derived->attr.use_assoc + && !gfc_check_access (arg->sym->ts.derived->attr.access, + arg->sym->ts.derived->ns->default_access) + && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Procedure " + "'%s' in PUBLIC interface '%s' at %L " + "takes dummy arguments of '%s' which is " + "PRIVATE", iface->sym->name, sym->name, + &iface->sym->declared_at, + gfc_typename (&arg->sym->ts)) == FAILURE) + { + /* Stop this message from recurring. */ + arg->sym->ts.derived->attr.access = ACCESS_PUBLIC; + return FAILURE; + } + } + } + } + + if (sym->attr.function && sym->value && sym->attr.proc != PROC_ST_FUNCTION + && !sym->attr.proc_pointer) + { + gfc_error ("Function '%s' at %L cannot have an initializer", + sym->name, &sym->declared_at); + return FAILURE; + } + + /* An external symbol may not have an initializer because it is taken to be + a procedure. Exception: Procedure Pointers. */ + if (sym->attr.external && sym->value && !sym->attr.proc_pointer) + { + gfc_error ("External object '%s' at %L may not have an initializer", + sym->name, &sym->declared_at); + return FAILURE; + } + + /* An elemental function is required to return a scalar 12.7.1 */ + if (sym->attr.elemental && sym->attr.function && sym->as) + { + gfc_error ("ELEMENTAL function '%s' at %L must have a scalar " + "result", sym->name, &sym->declared_at); + /* Reset so that the error only occurs once. */ + sym->attr.elemental = 0; + return FAILURE; + } + + /* 5.1.1.5 of the Standard: A function name declared with an asterisk + char-len-param shall not be array-valued, pointer-valued, recursive + or pure. ....snip... A character value of * may only be used in the + following ways: (i) Dummy arg of procedure - dummy associates with + actual length; (ii) To declare a named constant; or (iii) External + function - but length must be declared in calling scoping unit. */ + if (sym->attr.function + && sym->ts.type == BT_CHARACTER + && sym->ts.cl && sym->ts.cl->length == NULL) + { + if ((sym->as && sym->as->rank) || (sym->attr.pointer) + || (sym->attr.recursive) || (sym->attr.pure)) + { + if (sym->as && sym->as->rank) + gfc_error ("CHARACTER(*) function '%s' at %L cannot be " + "array-valued", sym->name, &sym->declared_at); + + if (sym->attr.pointer) + gfc_error ("CHARACTER(*) function '%s' at %L cannot be " + "pointer-valued", sym->name, &sym->declared_at); + + if (sym->attr.pure) + gfc_error ("CHARACTER(*) function '%s' at %L cannot be " + "pure", sym->name, &sym->declared_at); + + if (sym->attr.recursive) + gfc_error ("CHARACTER(*) function '%s' at %L cannot be " + "recursive", sym->name, &sym->declared_at); + + return FAILURE; + } + + /* Appendix B.2 of the standard. Contained functions give an + error anyway. Fixed-form is likely to be F77/legacy. */ + if (!sym->attr.contained && gfc_current_form != FORM_FIXED) + gfc_notify_std (GFC_STD_F95_OBS, "CHARACTER(*) function " + "'%s' at %L is obsolescent in fortran 95", + sym->name, &sym->declared_at); + } + + if (sym->attr.is_bind_c && sym->attr.is_c_interop != 1) + { + gfc_formal_arglist *curr_arg; + int has_non_interop_arg = 0; + + if (verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common, + sym->common_block) == FAILURE) + { + /* Clear these to prevent looking at them again if there was an + error. */ + sym->attr.is_bind_c = 0; + sym->attr.is_c_interop = 0; + sym->ts.is_c_interop = 0; + } + else + { + /* So far, no errors have been found. */ + sym->attr.is_c_interop = 1; + sym->ts.is_c_interop = 1; + } + + curr_arg = sym->formal; + while (curr_arg != NULL) + { + /* Skip implicitly typed dummy args here. */ + if (curr_arg->sym->attr.implicit_type == 0) + if (verify_c_interop_param (curr_arg->sym) == FAILURE) + /* If something is found to fail, record the fact so we + can mark the symbol for the procedure as not being + BIND(C) to try and prevent multiple errors being + reported. */ + has_non_interop_arg = 1; + + curr_arg = curr_arg->next; + } + + /* See if any of the arguments were not interoperable and if so, clear + the procedure symbol to prevent duplicate error messages. */ + if (has_non_interop_arg != 0) + { + sym->attr.is_c_interop = 0; + sym->ts.is_c_interop = 0; + sym->attr.is_bind_c = 0; + } + } + + if (sym->attr.save == SAVE_EXPLICIT && !sym->attr.proc_pointer) + { + gfc_error ("PROCEDURE attribute conflicts with SAVE attribute " + "in '%s' at %L", sym->name, &sym->declared_at); + return FAILURE; + } + + if (sym->attr.intent && !sym->attr.proc_pointer) + { + gfc_error ("PROCEDURE attribute conflicts with INTENT attribute " + "in '%s' at %L", sym->name, &sym->declared_at); + return FAILURE; + } + + return SUCCESS; +} + + +/* Resolve a list of finalizer procedures. That is, after they have hopefully + been defined and we now know their defined arguments, check that they fulfill + the requirements of the standard for procedures used as finalizers. */ + +static gfc_try +gfc_resolve_finalizers (gfc_symbol* derived) +{ + gfc_finalizer* list; + gfc_finalizer** prev_link; /* For removing wrong entries from the list. */ + gfc_try result = SUCCESS; + bool seen_scalar = false; + + if (!derived->f2k_derived || !derived->f2k_derived->finalizers) + return SUCCESS; + + /* Walk over the list of finalizer-procedures, check them, and if any one + does not fit in with the standard's definition, print an error and remove + it from the list. */ + prev_link = &derived->f2k_derived->finalizers; + for (list = derived->f2k_derived->finalizers; list; list = *prev_link) + { + gfc_symbol* arg; + gfc_finalizer* i; + int my_rank; + + /* Skip this finalizer if we already resolved it. */ + if (list->proc_tree) + { + prev_link = &(list->next); + continue; + } + + /* Check this exists and is a SUBROUTINE. */ + if (!list->proc_sym->attr.subroutine) + { + gfc_error ("FINAL procedure '%s' at %L is not a SUBROUTINE", + list->proc_sym->name, &list->where); + goto error; + } + + /* We should have exactly one argument. */ + if (!list->proc_sym->formal || list->proc_sym->formal->next) + { + gfc_error ("FINAL procedure at %L must have exactly one argument", + &list->where); + goto error; + } + arg = list->proc_sym->formal->sym; + + /* This argument must be of our type. */ + if (arg->ts.type != BT_DERIVED || arg->ts.derived != derived) + { + gfc_error ("Argument of FINAL procedure at %L must be of type '%s'", + &arg->declared_at, derived->name); + goto error; + } + + /* It must neither be a pointer nor allocatable nor optional. */ + if (arg->attr.pointer) + { + gfc_error ("Argument of FINAL procedure at %L must not be a POINTER", + &arg->declared_at); + goto error; + } + if (arg->attr.allocatable) + { + gfc_error ("Argument of FINAL procedure at %L must not be" + " ALLOCATABLE", &arg->declared_at); + goto error; + } + if (arg->attr.optional) + { + gfc_error ("Argument of FINAL procedure at %L must not be OPTIONAL", + &arg->declared_at); + goto error; + } + + /* It must not be INTENT(OUT). */ + if (arg->attr.intent == INTENT_OUT) + { + gfc_error ("Argument of FINAL procedure at %L must not be" + " INTENT(OUT)", &arg->declared_at); + goto error; + } + + /* Warn if the procedure is non-scalar and not assumed shape. */ + if (gfc_option.warn_surprising && arg->as && arg->as->rank > 0 + && arg->as->type != AS_ASSUMED_SHAPE) + gfc_warning ("Non-scalar FINAL procedure at %L should have assumed" + " shape argument", &arg->declared_at); + + /* Check that it does not match in kind and rank with a FINAL procedure + defined earlier. To really loop over the *earlier* declarations, + we need to walk the tail of the list as new ones were pushed at the + front. */ + /* TODO: Handle kind parameters once they are implemented. */ + my_rank = (arg->as ? arg->as->rank : 0); + for (i = list->next; i; i = i->next) + { + /* Argument list might be empty; that is an error signalled earlier, + but we nevertheless continued resolving. */ + if (i->proc_sym->formal) + { + gfc_symbol* i_arg = i->proc_sym->formal->sym; + const int i_rank = (i_arg->as ? i_arg->as->rank : 0); + if (i_rank == my_rank) + { + gfc_error ("FINAL procedure '%s' declared at %L has the same" + " rank (%d) as '%s'", + list->proc_sym->name, &list->where, my_rank, + i->proc_sym->name); + goto error; + } + } + } + + /* Is this the/a scalar finalizer procedure? */ + if (!arg->as || arg->as->rank == 0) + seen_scalar = true; + + /* Find the symtree for this procedure. */ + gcc_assert (!list->proc_tree); + list->proc_tree = gfc_find_sym_in_symtree (list->proc_sym); + + prev_link = &list->next; + continue; + + /* Remove wrong nodes immediately from the list so we don't risk any + troubles in the future when they might fail later expectations. */ +error: + result = FAILURE; + i = list; + *prev_link = list->next; + gfc_free_finalizer (i); + } + + /* Warn if we haven't seen a scalar finalizer procedure (but we know there + were nodes in the list, must have been for arrays. It is surely a good + idea to have a scalar version there if there's something to finalize. */ + if (gfc_option.warn_surprising && result == SUCCESS && !seen_scalar) + gfc_warning ("Only array FINAL procedures declared for derived type '%s'" + " defined at %L, suggest also scalar one", + derived->name, &derived->declared_at); + + /* TODO: Remove this error when finalization is finished. */ + gfc_error ("Finalization at %L is not yet implemented", + &derived->declared_at); + + return result; +} + + +/* Check that it is ok for the typebound procedure proc to override the + procedure old. */ + +static gfc_try +check_typebound_override (gfc_symtree* proc, gfc_symtree* old) +{ + locus where; + const gfc_symbol* proc_target; + const gfc_symbol* old_target; + unsigned proc_pass_arg, old_pass_arg, argpos; + gfc_formal_arglist* proc_formal; + gfc_formal_arglist* old_formal; + + /* This procedure should only be called for non-GENERIC proc. */ + gcc_assert (!proc->typebound->is_generic); + + /* If the overwritten procedure is GENERIC, this is an error. */ + if (old->typebound->is_generic) + { + gfc_error ("Can't overwrite GENERIC '%s' at %L", + old->name, &proc->typebound->where); + return FAILURE; + } + + where = proc->typebound->where; + proc_target = proc->typebound->u.specific->n.sym; + old_target = old->typebound->u.specific->n.sym; + + /* Check that overridden binding is not NON_OVERRIDABLE. */ + if (old->typebound->non_overridable) + { + gfc_error ("'%s' at %L overrides a procedure binding declared" + " NON_OVERRIDABLE", proc->name, &where); + return FAILURE; + } + + /* If the overridden binding is PURE, the overriding must be, too. */ + if (old_target->attr.pure && !proc_target->attr.pure) + { + gfc_error ("'%s' at %L overrides a PURE procedure and must also be PURE", + proc->name, &where); + return FAILURE; + } + + /* If the overridden binding is ELEMENTAL, the overriding must be, too. If it + is not, the overriding must not be either. */ + if (old_target->attr.elemental && !proc_target->attr.elemental) + { + gfc_error ("'%s' at %L overrides an ELEMENTAL procedure and must also be" + " ELEMENTAL", proc->name, &where); + return FAILURE; + } + if (!old_target->attr.elemental && proc_target->attr.elemental) + { + gfc_error ("'%s' at %L overrides a non-ELEMENTAL procedure and must not" + " be ELEMENTAL, either", proc->name, &where); + return FAILURE; + } + + /* If the overridden binding is a SUBROUTINE, the overriding must also be a + SUBROUTINE. */ + if (old_target->attr.subroutine && !proc_target->attr.subroutine) + { + gfc_error ("'%s' at %L overrides a SUBROUTINE and must also be a" + " SUBROUTINE", proc->name, &where); + return FAILURE; + } + + /* If the overridden binding is a FUNCTION, the overriding must also be a + FUNCTION and have the same characteristics. */ + if (old_target->attr.function) + { + if (!proc_target->attr.function) + { + gfc_error ("'%s' at %L overrides a FUNCTION and must also be a" + " FUNCTION", proc->name, &where); + return FAILURE; + } + + /* FIXME: Do more comprehensive checking (including, for instance, the + rank and array-shape). */ + gcc_assert (proc_target->result && old_target->result); + if (!gfc_compare_types (&proc_target->result->ts, + &old_target->result->ts)) + { + gfc_error ("'%s' at %L and the overridden FUNCTION should have" + " matching result types", proc->name, &where); + return FAILURE; + } + } + + /* If the overridden binding is PUBLIC, the overriding one must not be + PRIVATE. */ + if (old->typebound->access == ACCESS_PUBLIC + && proc->typebound->access == ACCESS_PRIVATE) + { + gfc_error ("'%s' at %L overrides a PUBLIC procedure and must not be" + " PRIVATE", proc->name, &where); + return FAILURE; + } + + /* Compare the formal argument lists of both procedures. This is also abused + to find the position of the passed-object dummy arguments of both + bindings as at least the overridden one might not yet be resolved and we + need those positions in the check below. */ + proc_pass_arg = old_pass_arg = 0; + if (!proc->typebound->nopass && !proc->typebound->pass_arg) + proc_pass_arg = 1; + if (!old->typebound->nopass && !old->typebound->pass_arg) + old_pass_arg = 1; + argpos = 1; + for (proc_formal = proc_target->formal, old_formal = old_target->formal; + proc_formal && old_formal; + proc_formal = proc_formal->next, old_formal = old_formal->next) + { + if (proc->typebound->pass_arg + && !strcmp (proc->typebound->pass_arg, proc_formal->sym->name)) + proc_pass_arg = argpos; + if (old->typebound->pass_arg + && !strcmp (old->typebound->pass_arg, old_formal->sym->name)) + old_pass_arg = argpos; + + /* Check that the names correspond. */ + if (strcmp (proc_formal->sym->name, old_formal->sym->name)) + { + gfc_error ("Dummy argument '%s' of '%s' at %L should be named '%s' as" + " to match the corresponding argument of the overridden" + " procedure", proc_formal->sym->name, proc->name, &where, + old_formal->sym->name); + return FAILURE; + } + + /* Check that the types correspond if neither is the passed-object + argument. */ + /* FIXME: Do more comprehensive testing here. */ + if (proc_pass_arg != argpos && old_pass_arg != argpos + && !gfc_compare_types (&proc_formal->sym->ts, &old_formal->sym->ts)) + { + gfc_error ("Types mismatch for dummy argument '%s' of '%s' %L in" + " in respect to the overridden procedure", + proc_formal->sym->name, proc->name, &where); + return FAILURE; + } + + ++argpos; + } + if (proc_formal || old_formal) + { + gfc_error ("'%s' at %L must have the same number of formal arguments as" + " the overridden procedure", proc->name, &where); + return FAILURE; + } + + /* If the overridden binding is NOPASS, the overriding one must also be + NOPASS. */ + if (old->typebound->nopass && !proc->typebound->nopass) + { + gfc_error ("'%s' at %L overrides a NOPASS binding and must also be" + " NOPASS", proc->name, &where); + return FAILURE; + } + + /* If the overridden binding is PASS(x), the overriding one must also be + PASS and the passed-object dummy arguments must correspond. */ + if (!old->typebound->nopass) + { + if (proc->typebound->nopass) + { + gfc_error ("'%s' at %L overrides a binding with PASS and must also be" + " PASS", proc->name, &where); + return FAILURE; + } + + if (proc_pass_arg != old_pass_arg) + { + gfc_error ("Passed-object dummy argument of '%s' at %L must be at" + " the same position as the passed-object dummy argument of" + " the overridden procedure", proc->name, &where); + return FAILURE; + } + } + + return SUCCESS; +} + + +/* Check if two GENERIC targets are ambiguous and emit an error is they are. */ + +static gfc_try +check_generic_tbp_ambiguity (gfc_tbp_generic* t1, gfc_tbp_generic* t2, + const char* generic_name, locus where) +{ + gfc_symbol* sym1; + gfc_symbol* sym2; + + gcc_assert (t1->specific && t2->specific); + gcc_assert (!t1->specific->is_generic); + gcc_assert (!t2->specific->is_generic); + + sym1 = t1->specific->u.specific->n.sym; + sym2 = t2->specific->u.specific->n.sym; + + /* Both must be SUBROUTINEs or both must be FUNCTIONs. */ + if (sym1->attr.subroutine != sym2->attr.subroutine + || sym1->attr.function != sym2->attr.function) + { + gfc_error ("'%s' and '%s' can't be mixed FUNCTION/SUBROUTINE for" + " GENERIC '%s' at %L", + sym1->name, sym2->name, generic_name, &where); + return FAILURE; + } + + /* Compare the interfaces. */ + if (gfc_compare_interfaces (sym1, sym2, 1)) + { + gfc_error ("'%s' and '%s' for GENERIC '%s' at %L are ambiguous", + sym1->name, sym2->name, generic_name, &where); + return FAILURE; + } + + return SUCCESS; +} + + +/* Resolve a GENERIC procedure binding for a derived type. */ + +static gfc_try +resolve_typebound_generic (gfc_symbol* derived, gfc_symtree* st) +{ + gfc_tbp_generic* target; + gfc_symtree* first_target; + gfc_symbol* super_type; + gfc_symtree* inherited; + locus where; + + gcc_assert (st->typebound); + gcc_assert (st->typebound->is_generic); + + where = st->typebound->where; + super_type = gfc_get_derived_super_type (derived); + + /* Find the overridden binding if any. */ + st->typebound->overridden = NULL; + if (super_type) + { + gfc_symtree* overridden; + overridden = gfc_find_typebound_proc (super_type, NULL, st->name, true); + + if (overridden && overridden->typebound) + st->typebound->overridden = overridden->typebound; + } + + /* Try to find the specific bindings for the symtrees in our target-list. */ + gcc_assert (st->typebound->u.generic); + for (target = st->typebound->u.generic; target; target = target->next) + if (!target->specific) + { + gfc_typebound_proc* overridden_tbp; + gfc_tbp_generic* g; + const char* target_name; + + target_name = target->specific_st->name; + + /* Defined for this type directly. */ + if (target->specific_st->typebound) + { + target->specific = target->specific_st->typebound; + goto specific_found; + } + + /* Look for an inherited specific binding. */ + if (super_type) + { + inherited = gfc_find_typebound_proc (super_type, NULL, + target_name, true); + + if (inherited) + { + gcc_assert (inherited->typebound); + target->specific = inherited->typebound; + goto specific_found; + } + } + + gfc_error ("Undefined specific binding '%s' as target of GENERIC '%s'" + " at %L", target_name, st->name, &where); + return FAILURE; + + /* Once we've found the specific binding, check it is not ambiguous with + other specifics already found or inherited for the same GENERIC. */ +specific_found: + gcc_assert (target->specific); + + /* This must really be a specific binding! */ + if (target->specific->is_generic) + { + gfc_error ("GENERIC '%s' at %L must target a specific binding," + " '%s' is GENERIC, too", st->name, &where, target_name); + return FAILURE; + } + + /* Check those already resolved on this type directly. */ + for (g = st->typebound->u.generic; g; g = g->next) + if (g != target && g->specific + && check_generic_tbp_ambiguity (target, g, st->name, where) + == FAILURE) + return FAILURE; + + /* Check for ambiguity with inherited specific targets. */ + for (overridden_tbp = st->typebound->overridden; overridden_tbp; + overridden_tbp = overridden_tbp->overridden) + if (overridden_tbp->is_generic) + { + for (g = overridden_tbp->u.generic; g; g = g->next) + { + gcc_assert (g->specific); + if (check_generic_tbp_ambiguity (target, g, + st->name, where) == FAILURE) + return FAILURE; + } + } + } + + /* If we attempt to "overwrite" a specific binding, this is an error. */ + if (st->typebound->overridden && !st->typebound->overridden->is_generic) + { + gfc_error ("GENERIC '%s' at %L can't overwrite specific binding with" + " the same name", st->name, &where); + return FAILURE; + } + + /* Take the SUBROUTINE/FUNCTION attributes of the first specific target, as + all must have the same attributes here. */ + first_target = st->typebound->u.generic->specific->u.specific; + st->typebound->subroutine = first_target->n.sym->attr.subroutine; + st->typebound->function = first_target->n.sym->attr.function; + + return SUCCESS; +} + + +/* Resolve the type-bound procedures for a derived type. */ + +static gfc_symbol* resolve_bindings_derived; +static gfc_try resolve_bindings_result; + +static void +resolve_typebound_procedure (gfc_symtree* stree) +{ + gfc_symbol* proc; + locus where; + gfc_symbol* me_arg; + gfc_symbol* super_type; + gfc_component* comp; + + /* If this is no type-bound procedure, just return. */ + if (!stree->typebound) + return; + + /* If this is a GENERIC binding, use that routine. */ + if (stree->typebound->is_generic) + { + if (resolve_typebound_generic (resolve_bindings_derived, stree) + == FAILURE) + goto error; + return; + } + + /* Get the target-procedure to check it. */ + gcc_assert (!stree->typebound->is_generic); + gcc_assert (stree->typebound->u.specific); + proc = stree->typebound->u.specific->n.sym; + where = stree->typebound->where; + + /* Default access should already be resolved from the parser. */ + gcc_assert (stree->typebound->access != ACCESS_UNKNOWN); + + /* It should be a module procedure or an external procedure with explicit + interface. */ + if ((!proc->attr.subroutine && !proc->attr.function) + || (proc->attr.proc != PROC_MODULE + && proc->attr.if_source != IFSRC_IFBODY) + || proc->attr.abstract) + { + gfc_error ("'%s' must be a module procedure or an external procedure with" + " an explicit interface at %L", proc->name, &where); + goto error; + } + stree->typebound->subroutine = proc->attr.subroutine; + stree->typebound->function = proc->attr.function; + + /* Find the super-type of the current derived type. We could do this once and + store in a global if speed is needed, but as long as not I believe this is + more readable and clearer. */ + super_type = gfc_get_derived_super_type (resolve_bindings_derived); + + /* If PASS, resolve and check arguments if not already resolved / loaded + from a .mod file. */ + if (!stree->typebound->nopass && stree->typebound->pass_arg_num == 0) + { + if (stree->typebound->pass_arg) + { + gfc_formal_arglist* i; + + /* If an explicit passing argument name is given, walk the arg-list + and look for it. */ + + me_arg = NULL; + stree->typebound->pass_arg_num = 1; + for (i = proc->formal; i; i = i->next) + { + if (!strcmp (i->sym->name, stree->typebound->pass_arg)) + { + me_arg = i->sym; + break; + } + ++stree->typebound->pass_arg_num; + } + + if (!me_arg) + { + gfc_error ("Procedure '%s' with PASS(%s) at %L has no" + " argument '%s'", + proc->name, stree->typebound->pass_arg, &where, + stree->typebound->pass_arg); + goto error; + } + } + else + { + /* Otherwise, take the first one; there should in fact be at least + one. */ + stree->typebound->pass_arg_num = 1; + if (!proc->formal) + { + gfc_error ("Procedure '%s' with PASS at %L must have at" + " least one argument", proc->name, &where); + goto error; + } + me_arg = proc->formal->sym; + } + + /* Now check that the argument-type matches. */ + gcc_assert (me_arg); + if (me_arg->ts.type != BT_DERIVED + || me_arg->ts.derived != resolve_bindings_derived) + { + gfc_error ("Argument '%s' of '%s' with PASS(%s) at %L must be of" + " the derived-type '%s'", me_arg->name, proc->name, + me_arg->name, &where, resolve_bindings_derived->name); + goto error; + } + + gfc_warning ("Polymorphic entities are not yet implemented," + " non-polymorphic passed-object dummy argument of '%s'" + " at %L accepted", proc->name, &where); + } + + /* If we are extending some type, check that we don't override a procedure + flagged NON_OVERRIDABLE. */ + stree->typebound->overridden = NULL; + if (super_type) + { + gfc_symtree* overridden; + overridden = gfc_find_typebound_proc (super_type, NULL, + stree->name, true); + + if (overridden && overridden->typebound) + stree->typebound->overridden = overridden->typebound; + + if (overridden && check_typebound_override (stree, overridden) == FAILURE) + goto error; + } + + /* See if there's a name collision with a component directly in this type. */ + for (comp = resolve_bindings_derived->components; comp; comp = comp->next) + if (!strcmp (comp->name, stree->name)) + { + gfc_error ("Procedure '%s' at %L has the same name as a component of" + " '%s'", + stree->name, &where, resolve_bindings_derived->name); + goto error; + } + + /* Try to find a name collision with an inherited component. */ + if (super_type && gfc_find_component (super_type, stree->name, true, true)) + { + gfc_error ("Procedure '%s' at %L has the same name as an inherited" + " component of '%s'", + stree->name, &where, resolve_bindings_derived->name); + goto error; + } + + stree->typebound->error = 0; + return; + +error: + resolve_bindings_result = FAILURE; + stree->typebound->error = 1; +} + +static gfc_try +resolve_typebound_procedures (gfc_symbol* derived) +{ + if (!derived->f2k_derived || !derived->f2k_derived->sym_root) + return SUCCESS; + + resolve_bindings_derived = derived; + resolve_bindings_result = SUCCESS; + gfc_traverse_symtree (derived->f2k_derived->sym_root, + &resolve_typebound_procedure); + + return resolve_bindings_result; +} + + +/* Add a derived type to the dt_list. The dt_list is used in trans-types.c + to give all identical derived types the same backend_decl. */ +static void +add_dt_to_dt_list (gfc_symbol *derived) +{ + gfc_dt_list *dt_list; + + for (dt_list = gfc_derived_types; dt_list; dt_list = dt_list->next) + if (derived == dt_list->derived) + break; + + if (dt_list == NULL) + { + dt_list = gfc_get_dt_list (); + dt_list->next = gfc_derived_types; + dt_list->derived = derived; + gfc_derived_types = dt_list; + } +} + + +/* Resolve the components of a derived type. */ + +static gfc_try +resolve_fl_derived (gfc_symbol *sym) +{ + gfc_symbol* super_type; + gfc_component *c; + int i; + + super_type = gfc_get_derived_super_type (sym); + + /* Ensure the extended type gets resolved before we do. */ + if (super_type && resolve_fl_derived (super_type) == FAILURE) + return FAILURE; + + /* An ABSTRACT type must be extensible. */ + if (sym->attr.abstract && (sym->attr.is_bind_c || sym->attr.sequence)) + { + gfc_error ("Non-extensible derived-type '%s' at %L must not be ABSTRACT", + sym->name, &sym->declared_at); + return FAILURE; + } + + for (c = sym->components; c != NULL; c = c->next) + { + /* Check type-spec if this is not the parent-type component. */ + if ((!sym->attr.extension || c != sym->components) + && resolve_typespec_used (&c->ts, &c->loc, c->name) == FAILURE) + return FAILURE; + + /* If this type is an extension, see if this component has the same name + as an inherited type-bound procedure. */ + if (super_type + && gfc_find_typebound_proc (super_type, NULL, c->name, true)) + { + gfc_error ("Component '%s' of '%s' at %L has the same name as an" + " inherited type-bound procedure", + c->name, sym->name, &c->loc); + return FAILURE; + } + + if (c->ts.type == BT_CHARACTER) + { + if (c->ts.cl->length == NULL + || (resolve_charlen (c->ts.cl) == FAILURE) + || !gfc_is_constant_expr (c->ts.cl->length)) + { + gfc_error ("Character length of component '%s' needs to " + "be a constant specification expression at %L", + c->name, + c->ts.cl->length ? &c->ts.cl->length->where : &c->loc); + return FAILURE; + } + } + + if (c->ts.type == BT_DERIVED + && sym->component_access != ACCESS_PRIVATE + && gfc_check_access (sym->attr.access, sym->ns->default_access) + && !c->ts.derived->attr.use_assoc + && !gfc_check_access (c->ts.derived->attr.access, + c->ts.derived->ns->default_access)) + { + gfc_error ("The component '%s' is a PRIVATE type and cannot be " + "a component of '%s', which is PUBLIC at %L", + c->name, sym->name, &sym->declared_at); + return FAILURE; + } + + if (sym->attr.sequence) + { + if (c->ts.type == BT_DERIVED && c->ts.derived->attr.sequence == 0) + { + gfc_error ("Component %s of SEQUENCE type declared at %L does " + "not have the SEQUENCE attribute", + c->ts.derived->name, &sym->declared_at); + return FAILURE; + } + } + + if (c->ts.type == BT_DERIVED && c->attr.pointer + && c->ts.derived->components == NULL + && !c->ts.derived->attr.zero_comp) + { + gfc_error ("The pointer component '%s' of '%s' at %L is a type " + "that has not been declared", c->name, sym->name, + &c->loc); + return FAILURE; + } + + /* Ensure that all the derived type components are put on the + derived type list; even in formal namespaces, where derived type + pointer components might not have been declared. */ + if (c->ts.type == BT_DERIVED + && c->ts.derived + && c->ts.derived->components + && c->attr.pointer + && sym != c->ts.derived) + add_dt_to_dt_list (c->ts.derived); + + if (c->attr.pointer || c->attr.allocatable || c->as == NULL) + continue; + + for (i = 0; i < c->as->rank; i++) + { + if (c->as->lower[i] == NULL + || (resolve_index_expr (c->as->lower[i]) == FAILURE) + || !gfc_is_constant_expr (c->as->lower[i]) + || c->as->upper[i] == NULL + || (resolve_index_expr (c->as->upper[i]) == FAILURE) + || !gfc_is_constant_expr (c->as->upper[i])) + { + gfc_error ("Component '%s' of '%s' at %L must have " + "constant array bounds", + c->name, sym->name, &c->loc); + return FAILURE; + } + } + } + + /* Resolve the type-bound procedures. */ + if (resolve_typebound_procedures (sym) == FAILURE) + return FAILURE; + + /* Resolve the finalizer procedures. */ + if (gfc_resolve_finalizers (sym) == FAILURE) + return FAILURE; + + /* Add derived type to the derived type list. */ + add_dt_to_dt_list (sym); + + return SUCCESS; +} + + +static gfc_try +resolve_fl_namelist (gfc_symbol *sym) +{ + gfc_namelist *nl; + gfc_symbol *nlsym; + + /* Reject PRIVATE objects in a PUBLIC namelist. */ + if (gfc_check_access(sym->attr.access, sym->ns->default_access)) + { + for (nl = sym->namelist; nl; nl = nl->next) + { + if (!nl->sym->attr.use_assoc + && !(sym->ns->parent == nl->sym->ns) + && !(sym->ns->parent + && sym->ns->parent->parent == nl->sym->ns) + && !gfc_check_access(nl->sym->attr.access, + nl->sym->ns->default_access)) + { + gfc_error ("NAMELIST object '%s' was declared PRIVATE and " + "cannot be member of PUBLIC namelist '%s' at %L", + nl->sym->name, sym->name, &sym->declared_at); + return FAILURE; + } + + /* Types with private components that came here by USE-association. */ + if (nl->sym->ts.type == BT_DERIVED + && derived_inaccessible (nl->sym->ts.derived)) + { + gfc_error ("NAMELIST object '%s' has use-associated PRIVATE " + "components and cannot be member of namelist '%s' at %L", + nl->sym->name, sym->name, &sym->declared_at); + return FAILURE; + } + + /* Types with private components that are defined in the same module. */ + if (nl->sym->ts.type == BT_DERIVED + && !(sym->ns->parent == nl->sym->ts.derived->ns) + && !gfc_check_access (nl->sym->ts.derived->attr.private_comp + ? ACCESS_PRIVATE : ACCESS_UNKNOWN, + nl->sym->ns->default_access)) + { + gfc_error ("NAMELIST object '%s' has PRIVATE components and " + "cannot be a member of PUBLIC namelist '%s' at %L", + nl->sym->name, sym->name, &sym->declared_at); + return FAILURE; + } + } + } + + for (nl = sym->namelist; nl; nl = nl->next) + { + /* Reject namelist arrays of assumed shape. */ + if (nl->sym->as && nl->sym->as->type == AS_ASSUMED_SHAPE + && gfc_notify_std (GFC_STD_F2003, "NAMELIST array object '%s' " + "must not have assumed shape in namelist " + "'%s' at %L", nl->sym->name, sym->name, + &sym->declared_at) == FAILURE) + return FAILURE; + + /* Reject namelist arrays that are not constant shape. */ + if (is_non_constant_shape_array (nl->sym)) + { + gfc_error ("NAMELIST array object '%s' must have constant " + "shape in namelist '%s' at %L", nl->sym->name, + sym->name, &sym->declared_at); + return FAILURE; + } + + /* Namelist objects cannot have allocatable or pointer components. */ + if (nl->sym->ts.type != BT_DERIVED) + continue; + + if (nl->sym->ts.derived->attr.alloc_comp) + { + gfc_error ("NAMELIST object '%s' in namelist '%s' at %L cannot " + "have ALLOCATABLE components", + nl->sym->name, sym->name, &sym->declared_at); + return FAILURE; + } + + if (nl->sym->ts.derived->attr.pointer_comp) + { + gfc_error ("NAMELIST object '%s' in namelist '%s' at %L cannot " + "have POINTER components", + nl->sym->name, sym->name, &sym->declared_at); + return FAILURE; + } + } + + + /* 14.1.2 A module or internal procedure represent local entities + of the same type as a namelist member and so are not allowed. */ + for (nl = sym->namelist; nl; nl = nl->next) + { + if (nl->sym->ts.kind != 0 && nl->sym->attr.flavor == FL_VARIABLE) + continue; + + if (nl->sym->attr.function && nl->sym == nl->sym->result) + if ((nl->sym == sym->ns->proc_name) + || + (sym->ns->parent && nl->sym == sym->ns->parent->proc_name)) + continue; + + nlsym = NULL; + if (nl->sym && nl->sym->name) + gfc_find_symbol (nl->sym->name, sym->ns, 1, &nlsym); + if (nlsym && nlsym->attr.flavor == FL_PROCEDURE) + { + gfc_error ("PROCEDURE attribute conflicts with NAMELIST " + "attribute in '%s' at %L", nlsym->name, + &sym->declared_at); + return FAILURE; + } + } + + return SUCCESS; +} + + +static gfc_try +resolve_fl_parameter (gfc_symbol *sym) +{ + /* A parameter array's shape needs to be constant. */ + if (sym->as != NULL + && (sym->as->type == AS_DEFERRED + || is_non_constant_shape_array (sym))) + { + gfc_error ("Parameter array '%s' at %L cannot be automatic " + "or of deferred shape", sym->name, &sym->declared_at); + return FAILURE; + } + + /* Make sure a parameter that has been implicitly typed still + matches the implicit type, since PARAMETER statements can precede + IMPLICIT statements. */ + if (sym->attr.implicit_type + && !gfc_compare_types (&sym->ts, gfc_get_default_type (sym, sym->ns))) + { + gfc_error ("Implicitly typed PARAMETER '%s' at %L doesn't match a " + "later IMPLICIT type", sym->name, &sym->declared_at); + return FAILURE; + } + + /* Make sure the types of derived parameters are consistent. This + type checking is deferred until resolution because the type may + refer to a derived type from the host. */ + if (sym->ts.type == BT_DERIVED + && !gfc_compare_types (&sym->ts, &sym->value->ts)) + { + gfc_error ("Incompatible derived type in PARAMETER at %L", + &sym->value->where); + return FAILURE; + } + return SUCCESS; +} + + +/* Do anything necessary to resolve a symbol. Right now, we just + assume that an otherwise unknown symbol is a variable. This sort + of thing commonly happens for symbols in module. */ + +static void +resolve_symbol (gfc_symbol *sym) +{ + int check_constant, mp_flag; + gfc_symtree *symtree; + gfc_symtree *this_symtree; + gfc_namespace *ns; + gfc_component *c; + + if (sym->attr.flavor == FL_UNKNOWN) + { + + /* If we find that a flavorless symbol is an interface in one of the + parent namespaces, find its symtree in this namespace, free the + symbol and set the symtree to point to the interface symbol. */ + for (ns = gfc_current_ns->parent; ns; ns = ns->parent) + { + symtree = gfc_find_symtree (ns->sym_root, sym->name); + if (symtree && symtree->n.sym->generic) + { + this_symtree = gfc_find_symtree (gfc_current_ns->sym_root, + sym->name); + sym->refs--; + if (!sym->refs) + gfc_free_symbol (sym); + symtree->n.sym->refs++; + this_symtree->n.sym = symtree->n.sym; + return; + } + } + + /* Otherwise give it a flavor according to such attributes as + it has. */ + if (sym->attr.external == 0 && sym->attr.intrinsic == 0) + sym->attr.flavor = FL_VARIABLE; + else + { + sym->attr.flavor = FL_PROCEDURE; + if (sym->attr.dimension) + sym->attr.function = 1; + } + } + + if (sym->attr.procedure && sym->ts.interface + && sym->attr.if_source != IFSRC_DECL) + { + if (sym->ts.interface->attr.procedure) + gfc_error ("Interface '%s', used by procedure '%s' at %L, is declared " + "in a later PROCEDURE statement", sym->ts.interface->name, + sym->name,&sym->declared_at); + + /* Get the attributes from the interface (now resolved). */ + if (sym->ts.interface->attr.if_source || sym->ts.interface->attr.intrinsic) + { + gfc_symbol *ifc = sym->ts.interface; + sym->ts = ifc->ts; + sym->ts.interface = ifc; + sym->attr.function = ifc->attr.function; + sym->attr.subroutine = ifc->attr.subroutine; + sym->attr.allocatable = ifc->attr.allocatable; + sym->attr.pointer = ifc->attr.pointer; + sym->attr.pure = ifc->attr.pure; + sym->attr.elemental = ifc->attr.elemental; + sym->attr.dimension = ifc->attr.dimension; + sym->attr.recursive = ifc->attr.recursive; + sym->attr.always_explicit = ifc->attr.always_explicit; + copy_formal_args (sym, ifc); + /* Copy array spec. */ + sym->as = gfc_copy_array_spec (ifc->as); + if (sym->as) + { + int i; + for (i = 0; i < sym->as->rank; i++) + { + gfc_expr_replace_symbols (sym->as->lower[i], sym); + gfc_expr_replace_symbols (sym->as->upper[i], sym); + } + } + /* Copy char length. */ + if (ifc->ts.cl) + { + sym->ts.cl = gfc_get_charlen(); + sym->ts.cl->resolved = ifc->ts.cl->resolved; + sym->ts.cl->length = gfc_copy_expr (ifc->ts.cl->length); + gfc_expr_replace_symbols (sym->ts.cl->length, sym); + /* Add charlen to namespace. */ + if (sym->formal_ns) + { + sym->ts.cl->next = sym->formal_ns->cl_list; + sym->formal_ns->cl_list = sym->ts.cl; + } + } + } + else if (sym->ts.interface->name[0] != '\0') + { + gfc_error ("Interface '%s' of procedure '%s' at %L must be explicit", + sym->ts.interface->name, sym->name, &sym->declared_at); + return; + } + } + + if (sym->attr.flavor == FL_DERIVED && resolve_fl_derived (sym) == FAILURE) + return; + + /* Symbols that are module procedures with results (functions) have + the types and array specification copied for type checking in + procedures that call them, as well as for saving to a module + file. These symbols can't stand the scrutiny that their results + can. */ + mp_flag = (sym->result != NULL && sym->result != sym); + + + /* Make sure that the intrinsic is consistent with its internal + representation. This needs to be done before assigning a default + type to avoid spurious warnings. */ + if (sym->attr.flavor != FL_MODULE && sym->attr.intrinsic) + { + gfc_intrinsic_sym* isym; + const char* symstd; + + /* We already know this one is an intrinsic, so we don't call + gfc_is_intrinsic for full checking but rather use gfc_find_function and + gfc_find_subroutine directly to check whether it is a function or + subroutine. */ + + if ((isym = gfc_find_function (sym->name))) + { + if (sym->ts.type != BT_UNKNOWN && gfc_option.warn_surprising) + gfc_warning ("Type specified for intrinsic function '%s' at %L is" + " ignored", sym->name, &sym->declared_at); + } + else if ((isym = gfc_find_subroutine (sym->name))) + { + if (sym->ts.type != BT_UNKNOWN) + { + gfc_error ("Intrinsic subroutine '%s' at %L shall not have a type" + " specifier", sym->name, &sym->declared_at); + return; + } + } + else + { + gfc_error ("'%s' declared INTRINSIC at %L does not exist", + sym->name, &sym->declared_at); + return; + } + + /* Check it is actually available in the standard settings. */ + if (gfc_check_intrinsic_standard (isym, &symstd, false, sym->declared_at) + == FAILURE) + { + gfc_error ("The intrinsic '%s' declared INTRINSIC at %L is not" + " available in the current standard settings but %s. Use" + " an appropriate -std=* option or enable -fall-intrinsics" + " in order to use it.", + sym->name, &sym->declared_at, symstd); + return; + } + } + + /* Assign default type to symbols that need one and don't have one. */ + if (sym->ts.type == BT_UNKNOWN) + { + if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER) + gfc_set_default_type (sym, 1, NULL); + + if (sym->attr.flavor == FL_PROCEDURE && sym->attr.function) + { + /* The specific case of an external procedure should emit an error + in the case that there is no implicit type. */ + if (!mp_flag) + gfc_set_default_type (sym, sym->attr.external, NULL); + else + { + /* Result may be in another namespace. */ + resolve_symbol (sym->result); + + sym->ts = sym->result->ts; + sym->as = gfc_copy_array_spec (sym->result->as); + sym->attr.dimension = sym->result->attr.dimension; + sym->attr.pointer = sym->result->attr.pointer; + sym->attr.allocatable = sym->result->attr.allocatable; + } + } + } + + /* Assumed size arrays and assumed shape arrays must be dummy + arguments. */ + + if (sym->as != NULL + && (sym->as->type == AS_ASSUMED_SIZE + || sym->as->type == AS_ASSUMED_SHAPE) + && sym->attr.dummy == 0) + { + if (sym->as->type == AS_ASSUMED_SIZE) + gfc_error ("Assumed size array at %L must be a dummy argument", + &sym->declared_at); + else + gfc_error ("Assumed shape array at %L must be a dummy argument", + &sym->declared_at); + return; + } + + /* Make sure symbols with known intent or optional are really dummy + variable. Because of ENTRY statement, this has to be deferred + until resolution time. */ + + if (!sym->attr.dummy + && (sym->attr.optional || sym->attr.intent != INTENT_UNKNOWN)) + { + gfc_error ("Symbol at %L is not a DUMMY variable", &sym->declared_at); + return; + } + + if (sym->attr.value && !sym->attr.dummy) + { + gfc_error ("'%s' at %L cannot have the VALUE attribute because " + "it is not a dummy argument", sym->name, &sym->declared_at); + return; + } + + if (sym->attr.value && sym->ts.type == BT_CHARACTER) + { + gfc_charlen *cl = sym->ts.cl; + if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT) + { + gfc_error ("Character dummy variable '%s' at %L with VALUE " + "attribute must have constant length", + sym->name, &sym->declared_at); + return; + } + + if (sym->ts.is_c_interop + && mpz_cmp_si (cl->length->value.integer, 1) != 0) + { + gfc_error ("C interoperable character dummy variable '%s' at %L " + "with VALUE attribute must have length one", + sym->name, &sym->declared_at); + return; + } + } + + /* If the symbol is marked as bind(c), verify it's type and kind. Do not + do this for something that was implicitly typed because that is handled + in gfc_set_default_type. Handle dummy arguments and procedure + definitions separately. Also, anything that is use associated is not + handled here but instead is handled in the module it is declared in. + Finally, derived type definitions are allowed to be BIND(C) since that + only implies that they're interoperable, and they are checked fully for + interoperability when a variable is declared of that type. */ + if (sym->attr.is_bind_c && sym->attr.implicit_type == 0 && + sym->attr.use_assoc == 0 && sym->attr.dummy == 0 && + sym->attr.flavor != FL_PROCEDURE && sym->attr.flavor != FL_DERIVED) + { + gfc_try t = SUCCESS; + + /* First, make sure the variable is declared at the + module-level scope (J3/04-007, Section 15.3). */ + if (sym->ns->proc_name->attr.flavor != FL_MODULE && + sym->attr.in_common == 0) + { + gfc_error ("Variable '%s' at %L cannot be BIND(C) because it " + "is neither a COMMON block nor declared at the " + "module level scope", sym->name, &(sym->declared_at)); + t = FAILURE; + } + else if (sym->common_head != NULL) + { + t = verify_com_block_vars_c_interop (sym->common_head); + } + else + { + /* If type() declaration, we need to verify that the components + of the given type are all C interoperable, etc. */ + if (sym->ts.type == BT_DERIVED && + sym->ts.derived->attr.is_c_interop != 1) + { + /* Make sure the user marked the derived type as BIND(C). If + not, call the verify routine. This could print an error + for the derived type more than once if multiple variables + of that type are declared. */ + if (sym->ts.derived->attr.is_bind_c != 1) + verify_bind_c_derived_type (sym->ts.derived); + t = FAILURE; + } + + /* Verify the variable itself as C interoperable if it + is BIND(C). It is not possible for this to succeed if + the verify_bind_c_derived_type failed, so don't have to handle + any error returned by verify_bind_c_derived_type. */ + t = verify_bind_c_sym (sym, &(sym->ts), sym->attr.in_common, + sym->common_block); + } + + if (t == FAILURE) + { + /* clear the is_bind_c flag to prevent reporting errors more than + once if something failed. */ + sym->attr.is_bind_c = 0; + return; + } + } + + /* If a derived type symbol has reached this point, without its + type being declared, we have an error. Notice that most + conditions that produce undefined derived types have already + been dealt with. However, the likes of: + implicit type(t) (t) ..... call foo (t) will get us here if + the type is not declared in the scope of the implicit + statement. Change the type to BT_UNKNOWN, both because it is so + and to prevent an ICE. */ + if (sym->ts.type == BT_DERIVED && sym->ts.derived->components == NULL + && !sym->ts.derived->attr.zero_comp) + { + gfc_error ("The derived type '%s' at %L is of type '%s', " + "which has not been defined", sym->name, + &sym->declared_at, sym->ts.derived->name); + sym->ts.type = BT_UNKNOWN; + return; + } + + /* Make sure that the derived type has been resolved and that the + derived type is visible in the symbol's namespace, if it is a + module function and is not PRIVATE. */ + if (sym->ts.type == BT_DERIVED + && sym->ts.derived->attr.use_assoc + && sym->ns->proc_name + && sym->ns->proc_name->attr.flavor == FL_MODULE) + { + gfc_symbol *ds; + + if (resolve_fl_derived (sym->ts.derived) == FAILURE) + return; + + gfc_find_symbol (sym->ts.derived->name, sym->ns, 1, &ds); + if (!ds && sym->attr.function + && gfc_check_access (sym->attr.access, sym->ns->default_access)) + { + symtree = gfc_new_symtree (&sym->ns->sym_root, + sym->ts.derived->name); + symtree->n.sym = sym->ts.derived; + sym->ts.derived->refs++; + } + } + + /* Unless the derived-type declaration is use associated, Fortran 95 + does not allow public entries of private derived types. + See 4.4.1 (F95) and 4.5.1.1 (F2003); and related interpretation + 161 in 95-006r3. */ + if (sym->ts.type == BT_DERIVED + && sym->ns->proc_name && sym->ns->proc_name->attr.flavor == FL_MODULE + && !sym->ts.derived->attr.use_assoc + && gfc_check_access (sym->attr.access, sym->ns->default_access) + && !gfc_check_access (sym->ts.derived->attr.access, + sym->ts.derived->ns->default_access) + && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: PUBLIC %s '%s' at %L " + "of PRIVATE derived type '%s'", + (sym->attr.flavor == FL_PARAMETER) ? "parameter" + : "variable", sym->name, &sym->declared_at, + sym->ts.derived->name) == FAILURE) + return; + + /* An assumed-size array with INTENT(OUT) shall not be of a type for which + default initialization is defined (5.1.2.4.4). */ + if (sym->ts.type == BT_DERIVED + && sym->attr.dummy + && sym->attr.intent == INTENT_OUT + && sym->as + && sym->as->type == AS_ASSUMED_SIZE) + { + for (c = sym->ts.derived->components; c; c = c->next) + { + if (c->initializer) + { + gfc_error ("The INTENT(OUT) dummy argument '%s' at %L is " + "ASSUMED SIZE and so cannot have a default initializer", + sym->name, &sym->declared_at); + return; + } + } + } + + switch (sym->attr.flavor) + { + case FL_VARIABLE: + if (resolve_fl_variable (sym, mp_flag) == FAILURE) + return; + break; + + case FL_PROCEDURE: + if (resolve_fl_procedure (sym, mp_flag) == FAILURE) + return; + break; + + case FL_NAMELIST: + if (resolve_fl_namelist (sym) == FAILURE) + return; + break; + + case FL_PARAMETER: + if (resolve_fl_parameter (sym) == FAILURE) + return; + break; + + default: + break; + } + + /* Resolve array specifier. Check as well some constraints + on COMMON blocks. */ + + check_constant = sym->attr.in_common && !sym->attr.pointer; + + /* Set the formal_arg_flag so that check_conflict will not throw + an error for host associated variables in the specification + expression for an array_valued function. */ + if (sym->attr.function && sym->as) + formal_arg_flag = 1; + + gfc_resolve_array_spec (sym->as, check_constant); + + formal_arg_flag = 0; + + /* Resolve formal namespaces. */ + if (sym->formal_ns && sym->formal_ns != gfc_current_ns) + gfc_resolve (sym->formal_ns); + + /* Check threadprivate restrictions. */ + if (sym->attr.threadprivate && !sym->attr.save && !sym->ns->save_all + && (!sym->attr.in_common + && sym->module == NULL + && (sym->ns->proc_name == NULL + || sym->ns->proc_name->attr.flavor != FL_MODULE))) + gfc_error ("Threadprivate at %L isn't SAVEd", &sym->declared_at); + + /* If we have come this far we can apply default-initializers, as + described in 14.7.5, to those variables that have not already + been assigned one. */ + if (sym->ts.type == BT_DERIVED + && sym->attr.referenced + && sym->ns == gfc_current_ns + && !sym->value + && !sym->attr.allocatable + && !sym->attr.alloc_comp) + { + symbol_attribute *a = &sym->attr; + + if ((!a->save && !a->dummy && !a->pointer + && !a->in_common && !a->use_assoc + && !(a->function && sym != sym->result)) + || (a->dummy && a->intent == INTENT_OUT)) + apply_default_init (sym); + } + + /* If this symbol has a type-spec, check it. */ + if (sym->attr.flavor == FL_VARIABLE || sym->attr.flavor == FL_PARAMETER + || (sym->attr.flavor == FL_PROCEDURE && sym->attr.function)) + if (resolve_typespec_used (&sym->ts, &sym->declared_at, sym->name) + == FAILURE) + return; +} + + +/************* Resolve DATA statements *************/ + +static struct +{ + gfc_data_value *vnode; + mpz_t left; +} +values; + + +/* Advance the values structure to point to the next value in the data list. */ + +static gfc_try +next_data_value (void) +{ + + while (mpz_cmp_ui (values.left, 0) == 0) + { + if (values.vnode->next == NULL) + return FAILURE; + + values.vnode = values.vnode->next; + mpz_set (values.left, values.vnode->repeat); + } + + return SUCCESS; +} + + +static gfc_try +check_data_variable (gfc_data_variable *var, locus *where) +{ + gfc_expr *e; + mpz_t size; + mpz_t offset; + gfc_try t; + ar_type mark = AR_UNKNOWN; + int i; + mpz_t section_index[GFC_MAX_DIMENSIONS]; + gfc_ref *ref; + gfc_array_ref *ar; + + if (gfc_resolve_expr (var->expr) == FAILURE) + return FAILURE; + + ar = NULL; + mpz_init_set_si (offset, 0); + e = var->expr; + + if (e->expr_type != EXPR_VARIABLE) + gfc_internal_error ("check_data_variable(): Bad expression"); + + if (e->symtree->n.sym->ns->is_block_data + && !e->symtree->n.sym->attr.in_common) + { + gfc_error ("BLOCK DATA element '%s' at %L must be in COMMON", + e->symtree->n.sym->name, &e->symtree->n.sym->declared_at); + } + + if (e->ref == NULL && e->symtree->n.sym->as) + { + gfc_error ("DATA array '%s' at %L must be specified in a previous" + " declaration", e->symtree->n.sym->name, where); + return FAILURE; + } + + if (e->rank == 0) + { + mpz_init_set_ui (size, 1); + ref = NULL; + } + else + { + ref = e->ref; + + /* Find the array section reference. */ + for (ref = e->ref; ref; ref = ref->next) + { + if (ref->type != REF_ARRAY) + continue; + if (ref->u.ar.type == AR_ELEMENT) + continue; + break; + } + gcc_assert (ref); + + /* Set marks according to the reference pattern. */ + switch (ref->u.ar.type) + { + case AR_FULL: + mark = AR_FULL; + break; + + case AR_SECTION: + ar = &ref->u.ar; + /* Get the start position of array section. */ + gfc_get_section_index (ar, section_index, &offset); + mark = AR_SECTION; + break; + + default: + gcc_unreachable (); + } + + if (gfc_array_size (e, &size) == FAILURE) + { + gfc_error ("Nonconstant array section at %L in DATA statement", + &e->where); + mpz_clear (offset); + return FAILURE; + } + } + + t = SUCCESS; + + while (mpz_cmp_ui (size, 0) > 0) + { + if (next_data_value () == FAILURE) + { + gfc_error ("DATA statement at %L has more variables than values", + where); + t = FAILURE; + break; + } + + t = gfc_check_assign (var->expr, values.vnode->expr, 0); + if (t == FAILURE) + break; + + /* If we have more than one element left in the repeat count, + and we have more than one element left in the target variable, + then create a range assignment. */ + /* FIXME: Only done for full arrays for now, since array sections + seem tricky. */ + if (mark == AR_FULL && ref && ref->next == NULL + && mpz_cmp_ui (values.left, 1) > 0 && mpz_cmp_ui (size, 1) > 0) + { + mpz_t range; + + if (mpz_cmp (size, values.left) >= 0) + { + mpz_init_set (range, values.left); + mpz_sub (size, size, values.left); + mpz_set_ui (values.left, 0); + } + else + { + mpz_init_set (range, size); + mpz_sub (values.left, values.left, size); + mpz_set_ui (size, 0); + } + + gfc_assign_data_value_range (var->expr, values.vnode->expr, + offset, range); + + mpz_add (offset, offset, range); + mpz_clear (range); + } + + /* Assign initial value to symbol. */ + else + { + mpz_sub_ui (values.left, values.left, 1); + mpz_sub_ui (size, size, 1); + + t = gfc_assign_data_value (var->expr, values.vnode->expr, offset); + if (t == FAILURE) + break; + + if (mark == AR_FULL) + mpz_add_ui (offset, offset, 1); + + /* Modify the array section indexes and recalculate the offset + for next element. */ + else if (mark == AR_SECTION) + gfc_advance_section (section_index, ar, &offset); + } + } + + if (mark == AR_SECTION) + { + for (i = 0; i < ar->dimen; i++) + mpz_clear (section_index[i]); + } + + mpz_clear (size); + mpz_clear (offset); + + return t; +} + + +static gfc_try traverse_data_var (gfc_data_variable *, locus *); + +/* Iterate over a list of elements in a DATA statement. */ + +static gfc_try +traverse_data_list (gfc_data_variable *var, locus *where) +{ + mpz_t trip; + iterator_stack frame; + gfc_expr *e, *start, *end, *step; + gfc_try retval = SUCCESS; + + mpz_init (frame.value); + + start = gfc_copy_expr (var->iter.start); + end = gfc_copy_expr (var->iter.end); + step = gfc_copy_expr (var->iter.step); + + if (gfc_simplify_expr (start, 1) == FAILURE + || start->expr_type != EXPR_CONSTANT) + { + gfc_error ("iterator start at %L does not simplify", &start->where); + retval = FAILURE; + goto cleanup; + } + if (gfc_simplify_expr (end, 1) == FAILURE + || end->expr_type != EXPR_CONSTANT) + { + gfc_error ("iterator end at %L does not simplify", &end->where); + retval = FAILURE; + goto cleanup; + } + if (gfc_simplify_expr (step, 1) == FAILURE + || step->expr_type != EXPR_CONSTANT) + { + gfc_error ("iterator step at %L does not simplify", &step->where); + retval = FAILURE; + goto cleanup; + } + + mpz_init_set (trip, end->value.integer); + mpz_sub (trip, trip, start->value.integer); + mpz_add (trip, trip, step->value.integer); + + mpz_div (trip, trip, step->value.integer); + + mpz_set (frame.value, start->value.integer); + + frame.prev = iter_stack; + frame.variable = var->iter.var->symtree; + iter_stack = &frame; + + while (mpz_cmp_ui (trip, 0) > 0) + { + if (traverse_data_var (var->list, where) == FAILURE) + { + mpz_clear (trip); + retval = FAILURE; + goto cleanup; + } + + e = gfc_copy_expr (var->expr); + if (gfc_simplify_expr (e, 1) == FAILURE) + { + gfc_free_expr (e); + mpz_clear (trip); + retval = FAILURE; + goto cleanup; + } + + mpz_add (frame.value, frame.value, step->value.integer); + + mpz_sub_ui (trip, trip, 1); + } + + mpz_clear (trip); +cleanup: + mpz_clear (frame.value); + + gfc_free_expr (start); + gfc_free_expr (end); + gfc_free_expr (step); + + iter_stack = frame.prev; + return retval; +} + + +/* Type resolve variables in the variable list of a DATA statement. */ + +static gfc_try +traverse_data_var (gfc_data_variable *var, locus *where) +{ + gfc_try t; + + for (; var; var = var->next) + { + if (var->expr == NULL) + t = traverse_data_list (var, where); + else + t = check_data_variable (var, where); + + if (t == FAILURE) + return FAILURE; + } + + return SUCCESS; +} + + +/* Resolve the expressions and iterators associated with a data statement. + This is separate from the assignment checking because data lists should + only be resolved once. */ + +static gfc_try +resolve_data_variables (gfc_data_variable *d) +{ + for (; d; d = d->next) + { + if (d->list == NULL) + { + if (gfc_resolve_expr (d->expr) == FAILURE) + return FAILURE; + } + else + { + if (gfc_resolve_iterator (&d->iter, false) == FAILURE) + return FAILURE; + + if (resolve_data_variables (d->list) == FAILURE) + return FAILURE; + } + } + + return SUCCESS; +} + + +/* Resolve a single DATA statement. We implement this by storing a pointer to + the value list into static variables, and then recursively traversing the + variables list, expanding iterators and such. */ + +static void +resolve_data (gfc_data *d) +{ + + if (resolve_data_variables (d->var) == FAILURE) + return; + + values.vnode = d->value; + if (d->value == NULL) + mpz_set_ui (values.left, 0); + else + mpz_set (values.left, d->value->repeat); + + if (traverse_data_var (d->var, &d->where) == FAILURE) + return; + + /* At this point, we better not have any values left. */ + + if (next_data_value () == SUCCESS) + gfc_error ("DATA statement at %L has more values than variables", + &d->where); +} + + +/* 12.6 Constraint: In a pure subprogram any variable which is in common or + accessed by host or use association, is a dummy argument to a pure function, + is a dummy argument with INTENT (IN) to a pure subroutine, or an object that + is storage associated with any such variable, shall not be used in the + following contexts: (clients of this function). */ + +/* Determines if a variable is not 'pure', i.e., not assignable within a pure + procedure. Returns zero if assignment is OK, nonzero if there is a + problem. */ +int +gfc_impure_variable (gfc_symbol *sym) +{ + gfc_symbol *proc; + + if (sym->attr.use_assoc || sym->attr.in_common) + return 1; + + if (sym->ns != gfc_current_ns) + return !sym->attr.function; + + proc = sym->ns->proc_name; + if (sym->attr.dummy && gfc_pure (proc) + && ((proc->attr.subroutine && sym->attr.intent == INTENT_IN) + || + proc->attr.function)) + return 1; + + /* TODO: Sort out what can be storage associated, if anything, and include + it here. In principle equivalences should be scanned but it does not + seem to be possible to storage associate an impure variable this way. */ + return 0; +} + + +/* Test whether a symbol is pure or not. For a NULL pointer, checks the + symbol of the current procedure. */ + +int +gfc_pure (gfc_symbol *sym) +{ + symbol_attribute attr; + + if (sym == NULL) + sym = gfc_current_ns->proc_name; + if (sym == NULL) + return 0; + + attr = sym->attr; + + return attr.flavor == FL_PROCEDURE && (attr.pure || attr.elemental); +} + + +/* Test whether the current procedure is elemental or not. */ + +int +gfc_elemental (gfc_symbol *sym) +{ + symbol_attribute attr; + + if (sym == NULL) + sym = gfc_current_ns->proc_name; + if (sym == NULL) + return 0; + attr = sym->attr; + + return attr.flavor == FL_PROCEDURE && attr.elemental; +} + + +/* Warn about unused labels. */ + +static void +warn_unused_fortran_label (gfc_st_label *label) +{ + if (label == NULL) + return; + + warn_unused_fortran_label (label->left); + + if (label->defined == ST_LABEL_UNKNOWN) + return; + + switch (label->referenced) + { + case ST_LABEL_UNKNOWN: + gfc_warning ("Label %d at %L defined but not used", label->value, + &label->where); + break; + + case ST_LABEL_BAD_TARGET: + gfc_warning ("Label %d at %L defined but cannot be used", + label->value, &label->where); + break; + + default: + break; + } + + warn_unused_fortran_label (label->right); +} + + +/* Returns the sequence type of a symbol or sequence. */ + +static seq_type +sequence_type (gfc_typespec ts) +{ + seq_type result; + gfc_component *c; + + switch (ts.type) + { + case BT_DERIVED: + + if (ts.derived->components == NULL) + return SEQ_NONDEFAULT; + + result = sequence_type (ts.derived->components->ts); + for (c = ts.derived->components->next; c; c = c->next) + if (sequence_type (c->ts) != result) + return SEQ_MIXED; + + return result; + + case BT_CHARACTER: + if (ts.kind != gfc_default_character_kind) + return SEQ_NONDEFAULT; + + return SEQ_CHARACTER; + + case BT_INTEGER: + if (ts.kind != gfc_default_integer_kind) + return SEQ_NONDEFAULT; + + return SEQ_NUMERIC; + + case BT_REAL: + if (!(ts.kind == gfc_default_real_kind + || ts.kind == gfc_default_double_kind)) + return SEQ_NONDEFAULT; + + return SEQ_NUMERIC; + + case BT_COMPLEX: + if (ts.kind != gfc_default_complex_kind) + return SEQ_NONDEFAULT; + + return SEQ_NUMERIC; + + case BT_LOGICAL: + if (ts.kind != gfc_default_logical_kind) + return SEQ_NONDEFAULT; + + return SEQ_NUMERIC; + + default: + return SEQ_NONDEFAULT; + } +} + + +/* Resolve derived type EQUIVALENCE object. */ + +static gfc_try +resolve_equivalence_derived (gfc_symbol *derived, gfc_symbol *sym, gfc_expr *e) +{ + gfc_symbol *d; + gfc_component *c = derived->components; + + if (!derived) + return SUCCESS; + + /* Shall not be an object of nonsequence derived type. */ + if (!derived->attr.sequence) + { + gfc_error ("Derived type variable '%s' at %L must have SEQUENCE " + "attribute to be an EQUIVALENCE object", sym->name, + &e->where); + return FAILURE; + } + + /* Shall not have allocatable components. */ + if (derived->attr.alloc_comp) + { + gfc_error ("Derived type variable '%s' at %L cannot have ALLOCATABLE " + "components to be an EQUIVALENCE object",sym->name, + &e->where); + return FAILURE; + } + + if (sym->attr.in_common && has_default_initializer (sym->ts.derived)) + { + gfc_error ("Derived type variable '%s' at %L with default " + "initialization cannot be in EQUIVALENCE with a variable " + "in COMMON", sym->name, &e->where); + return FAILURE; + } + + for (; c ; c = c->next) + { + d = c->ts.derived; + if (d + && (resolve_equivalence_derived (c->ts.derived, sym, e) == FAILURE)) + return FAILURE; + + /* Shall not be an object of sequence derived type containing a pointer + in the structure. */ + if (c->attr.pointer) + { + gfc_error ("Derived type variable '%s' at %L with pointer " + "component(s) cannot be an EQUIVALENCE object", + sym->name, &e->where); + return FAILURE; + } + } + return SUCCESS; +} + + +/* Resolve equivalence object. + An EQUIVALENCE object shall not be a dummy argument, a pointer, a target, + an allocatable array, an object of nonsequence derived type, an object of + sequence derived type containing a pointer at any level of component + selection, an automatic object, a function name, an entry name, a result + name, a named constant, a structure component, or a subobject of any of + the preceding objects. A substring shall not have length zero. A + derived type shall not have components with default initialization nor + shall two objects of an equivalence group be initialized. + Either all or none of the objects shall have an protected attribute. + The simple constraints are done in symbol.c(check_conflict) and the rest + are implemented here. */ + +static void +resolve_equivalence (gfc_equiv *eq) +{ + gfc_symbol *sym; + gfc_symbol *derived; + gfc_symbol *first_sym; + gfc_expr *e; + gfc_ref *r; + locus *last_where = NULL; + seq_type eq_type, last_eq_type; + gfc_typespec *last_ts; + int object, cnt_protected; + const char *value_name; + const char *msg; + + value_name = NULL; + last_ts = &eq->expr->symtree->n.sym->ts; + + first_sym = eq->expr->symtree->n.sym; + + cnt_protected = 0; + + for (object = 1; eq; eq = eq->eq, object++) + { + e = eq->expr; + + e->ts = e->symtree->n.sym->ts; + /* match_varspec might not know yet if it is seeing + array reference or substring reference, as it doesn't + know the types. */ + if (e->ref && e->ref->type == REF_ARRAY) + { + gfc_ref *ref = e->ref; + sym = e->symtree->n.sym; + + if (sym->attr.dimension) + { + ref->u.ar.as = sym->as; + ref = ref->next; + } + + /* For substrings, convert REF_ARRAY into REF_SUBSTRING. */ + if (e->ts.type == BT_CHARACTER + && ref + && ref->type == REF_ARRAY + && ref->u.ar.dimen == 1 + && ref->u.ar.dimen_type[0] == DIMEN_RANGE + && ref->u.ar.stride[0] == NULL) + { + gfc_expr *start = ref->u.ar.start[0]; + gfc_expr *end = ref->u.ar.end[0]; + void *mem = NULL; + + /* Optimize away the (:) reference. */ + if (start == NULL && end == NULL) + { + if (e->ref == ref) + e->ref = ref->next; + else + e->ref->next = ref->next; + mem = ref; + } + else + { + ref->type = REF_SUBSTRING; + if (start == NULL) + start = gfc_int_expr (1); + ref->u.ss.start = start; + if (end == NULL && e->ts.cl) + end = gfc_copy_expr (e->ts.cl->length); + ref->u.ss.end = end; + ref->u.ss.length = e->ts.cl; + e->ts.cl = NULL; + } + ref = ref->next; + gfc_free (mem); + } + + /* Any further ref is an error. */ + if (ref) + { + gcc_assert (ref->type == REF_ARRAY); + gfc_error ("Syntax error in EQUIVALENCE statement at %L", + &ref->u.ar.where); + continue; + } + } + + if (gfc_resolve_expr (e) == FAILURE) + continue; + + sym = e->symtree->n.sym; + + if (sym->attr.is_protected) + cnt_protected++; + if (cnt_protected > 0 && cnt_protected != object) + { + gfc_error ("Either all or none of the objects in the " + "EQUIVALENCE set at %L shall have the " + "PROTECTED attribute", + &e->where); + break; + } + + /* Shall not equivalence common block variables in a PURE procedure. */ + if (sym->ns->proc_name + && sym->ns->proc_name->attr.pure + && sym->attr.in_common) + { + gfc_error ("Common block member '%s' at %L cannot be an EQUIVALENCE " + "object in the pure procedure '%s'", + sym->name, &e->where, sym->ns->proc_name->name); + break; + } + + /* Shall not be a named constant. */ + if (e->expr_type == EXPR_CONSTANT) + { + gfc_error ("Named constant '%s' at %L cannot be an EQUIVALENCE " + "object", sym->name, &e->where); + continue; + } + + derived = e->ts.derived; + if (derived && resolve_equivalence_derived (derived, sym, e) == FAILURE) + continue; + + /* Check that the types correspond correctly: + Note 5.28: + A numeric sequence structure may be equivalenced to another sequence + structure, an object of default integer type, default real type, double + precision real type, default logical type such that components of the + structure ultimately only become associated to objects of the same + kind. A character sequence structure may be equivalenced to an object + of default character kind or another character sequence structure. + Other objects may be equivalenced only to objects of the same type and + kind parameters. */ + + /* Identical types are unconditionally OK. */ + if (object == 1 || gfc_compare_types (last_ts, &sym->ts)) + goto identical_types; + + last_eq_type = sequence_type (*last_ts); + eq_type = sequence_type (sym->ts); + + /* Since the pair of objects is not of the same type, mixed or + non-default sequences can be rejected. */ + + msg = "Sequence %s with mixed components in EQUIVALENCE " + "statement at %L with different type objects"; + if ((object ==2 + && last_eq_type == SEQ_MIXED + && gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, last_where) + == FAILURE) + || (eq_type == SEQ_MIXED + && gfc_notify_std (GFC_STD_GNU, msg, sym->name, + &e->where) == FAILURE)) + continue; + + msg = "Non-default type object or sequence %s in EQUIVALENCE " + "statement at %L with objects of different type"; + if ((object ==2 + && last_eq_type == SEQ_NONDEFAULT + && gfc_notify_std (GFC_STD_GNU, msg, first_sym->name, + last_where) == FAILURE) + || (eq_type == SEQ_NONDEFAULT + && gfc_notify_std (GFC_STD_GNU, msg, sym->name, + &e->where) == FAILURE)) + continue; + + msg ="Non-CHARACTER object '%s' in default CHARACTER " + "EQUIVALENCE statement at %L"; + if (last_eq_type == SEQ_CHARACTER + && eq_type != SEQ_CHARACTER + && gfc_notify_std (GFC_STD_GNU, msg, sym->name, + &e->where) == FAILURE) + continue; + + msg ="Non-NUMERIC object '%s' in default NUMERIC " + "EQUIVALENCE statement at %L"; + if (last_eq_type == SEQ_NUMERIC + && eq_type != SEQ_NUMERIC + && gfc_notify_std (GFC_STD_GNU, msg, sym->name, + &e->where) == FAILURE) + continue; + + identical_types: + last_ts =&sym->ts; + last_where = &e->where; + + if (!e->ref) + continue; + + /* Shall not be an automatic array. */ + if (e->ref->type == REF_ARRAY + && gfc_resolve_array_spec (e->ref->u.ar.as, 1) == FAILURE) + { + gfc_error ("Array '%s' at %L with non-constant bounds cannot be " + "an EQUIVALENCE object", sym->name, &e->where); + continue; + } + + r = e->ref; + while (r) + { + /* Shall not be a structure component. */ + if (r->type == REF_COMPONENT) + { + gfc_error ("Structure component '%s' at %L cannot be an " + "EQUIVALENCE object", + r->u.c.component->name, &e->where); + break; + } + + /* A substring shall not have length zero. */ + if (r->type == REF_SUBSTRING) + { + if (compare_bound (r->u.ss.start, r->u.ss.end) == CMP_GT) + { + gfc_error ("Substring at %L has length zero", + &r->u.ss.start->where); + break; + } + } + r = r->next; + } + } +} + + +/* Resolve function and ENTRY types, issue diagnostics if needed. */ + +static void +resolve_fntype (gfc_namespace *ns) +{ + gfc_entry_list *el; + gfc_symbol *sym; + + if (ns->proc_name == NULL || !ns->proc_name->attr.function) + return; + + /* If there are any entries, ns->proc_name is the entry master + synthetic symbol and ns->entries->sym actual FUNCTION symbol. */ + if (ns->entries) + sym = ns->entries->sym; + else + sym = ns->proc_name; + if (sym->result == sym + && sym->ts.type == BT_UNKNOWN + && gfc_set_default_type (sym, 0, NULL) == FAILURE + && !sym->attr.untyped) + { + gfc_error ("Function '%s' at %L has no IMPLICIT type", + sym->name, &sym->declared_at); + sym->attr.untyped = 1; + } + + if (sym->ts.type == BT_DERIVED && !sym->ts.derived->attr.use_assoc + && !sym->attr.contained + && !gfc_check_access (sym->ts.derived->attr.access, + sym->ts.derived->ns->default_access) + && gfc_check_access (sym->attr.access, sym->ns->default_access)) + { + gfc_notify_std (GFC_STD_F2003, "Fortran 2003: PUBLIC function '%s' at " + "%L of PRIVATE type '%s'", sym->name, + &sym->declared_at, sym->ts.derived->name); + } + + if (ns->entries) + for (el = ns->entries->next; el; el = el->next) + { + if (el->sym->result == el->sym + && el->sym->ts.type == BT_UNKNOWN + && gfc_set_default_type (el->sym, 0, NULL) == FAILURE + && !el->sym->attr.untyped) + { + gfc_error ("ENTRY '%s' at %L has no IMPLICIT type", + el->sym->name, &el->sym->declared_at); + el->sym->attr.untyped = 1; + } + } +} + +/* 12.3.2.1.1 Defined operators. */ + +static void +gfc_resolve_uops (gfc_symtree *symtree) +{ + gfc_interface *itr; + gfc_symbol *sym; + gfc_formal_arglist *formal; + + if (symtree == NULL) + return; + + gfc_resolve_uops (symtree->left); + gfc_resolve_uops (symtree->right); + + for (itr = symtree->n.uop->op; itr; itr = itr->next) + { + sym = itr->sym; + if (!sym->attr.function) + gfc_error ("User operator procedure '%s' at %L must be a FUNCTION", + sym->name, &sym->declared_at); + + if (sym->ts.type == BT_CHARACTER + && !(sym->ts.cl && sym->ts.cl->length) + && !(sym->result && sym->result->ts.cl + && sym->result->ts.cl->length)) + gfc_error ("User operator procedure '%s' at %L cannot be assumed " + "character length", sym->name, &sym->declared_at); + + formal = sym->formal; + if (!formal || !formal->sym) + { + gfc_error ("User operator procedure '%s' at %L must have at least " + "one argument", sym->name, &sym->declared_at); + continue; + } + + if (formal->sym->attr.intent != INTENT_IN) + gfc_error ("First argument of operator interface at %L must be " + "INTENT(IN)", &sym->declared_at); + + if (formal->sym->attr.optional) + gfc_error ("First argument of operator interface at %L cannot be " + "optional", &sym->declared_at); + + formal = formal->next; + if (!formal || !formal->sym) + continue; + + if (formal->sym->attr.intent != INTENT_IN) + gfc_error ("Second argument of operator interface at %L must be " + "INTENT(IN)", &sym->declared_at); + + if (formal->sym->attr.optional) + gfc_error ("Second argument of operator interface at %L cannot be " + "optional", &sym->declared_at); + + if (formal->next) + gfc_error ("Operator interface at %L must have, at most, two " + "arguments", &sym->declared_at); + } +} + + +/* Examine all of the expressions associated with a program unit, + assign types to all intermediate expressions, make sure that all + assignments are to compatible types and figure out which names + refer to which functions or subroutines. It doesn't check code + block, which is handled by resolve_code. */ + +static void +resolve_types (gfc_namespace *ns) +{ + gfc_namespace *n; + gfc_charlen *cl; + gfc_data *d; + gfc_equiv *eq; + gfc_namespace* old_ns = gfc_current_ns; + + /* Check that all IMPLICIT types are ok. */ + if (!ns->seen_implicit_none) + { + unsigned letter; + for (letter = 0; letter != GFC_LETTERS; ++letter) + if (ns->set_flag[letter] + && resolve_typespec_used (&ns->default_type[letter], + &ns->implicit_loc[letter], + NULL) == FAILURE) + return; + } + + gfc_current_ns = ns; + + resolve_entries (ns); + + resolve_common_vars (ns->blank_common.head, false); + resolve_common_blocks (ns->common_root); + + resolve_contained_functions (ns); + + gfc_traverse_ns (ns, resolve_bind_c_derived_types); + + for (cl = ns->cl_list; cl; cl = cl->next) + resolve_charlen (cl); + + gfc_traverse_ns (ns, resolve_symbol); + + resolve_fntype (ns); + + for (n = ns->contained; n; n = n->sibling) + { + if (gfc_pure (ns->proc_name) && !gfc_pure (n->proc_name)) + gfc_error ("Contained procedure '%s' at %L of a PURE procedure must " + "also be PURE", n->proc_name->name, + &n->proc_name->declared_at); + + resolve_types (n); + } + + forall_flag = 0; + gfc_check_interfaces (ns); + + gfc_traverse_ns (ns, resolve_values); + + if (ns->save_all) + gfc_save_all (ns); + + iter_stack = NULL; + for (d = ns->data; d; d = d->next) + resolve_data (d); + + iter_stack = NULL; + gfc_traverse_ns (ns, gfc_formalize_init_value); + + gfc_traverse_ns (ns, gfc_verify_binding_labels); + + if (ns->common_root != NULL) + gfc_traverse_symtree (ns->common_root, resolve_bind_c_comms); + + for (eq = ns->equiv; eq; eq = eq->next) + resolve_equivalence (eq); + + /* Warn about unused labels. */ + if (warn_unused_label) + warn_unused_fortran_label (ns->st_labels); + + gfc_resolve_uops (ns->uop_root); + + gfc_current_ns = old_ns; +} + + +/* Call resolve_code recursively. */ + +static void +resolve_codes (gfc_namespace *ns) +{ + gfc_namespace *n; + + for (n = ns->contained; n; n = n->sibling) + resolve_codes (n); + + gfc_current_ns = ns; + cs_base = NULL; + /* Set to an out of range value. */ + current_entry_id = -1; + + bitmap_obstack_initialize (&labels_obstack); + resolve_code (ns->code, ns); + bitmap_obstack_release (&labels_obstack); +} + + +/* This function is called after a complete program unit has been compiled. + Its purpose is to examine all of the expressions associated with a program + unit, assign types to all intermediate expressions, make sure that all + assignments are to compatible types and figure out which names refer to + which functions or subroutines. */ + +void +gfc_resolve (gfc_namespace *ns) +{ + gfc_namespace *old_ns; + + old_ns = gfc_current_ns; + + resolve_types (ns); + resolve_codes (ns); + + gfc_current_ns = old_ns; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/scanner.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/scanner.c new file mode 100644 index 0000000000..1e7ec966ef --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/scanner.c @@ -0,0 +1,2076 @@ +/* Character scanner. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* Set of subroutines to (ultimately) return the next character to the + various matching subroutines. This file's job is to read files and + build up lines that are parsed by the parser. This means that we + handle continuation lines and "include" lines. + + The first thing the scanner does is to load an entire file into + memory. We load the entire file into memory for a couple reasons. + The first is that we want to be able to deal with nonseekable input + (pipes, stdin) and there is a lot of backing up involved during + parsing. + + The second is that we want to be able to print the locus of errors, + and an error on line 999999 could conflict with something on line + one. Given nonseekable input, we've got to store the whole thing. + + One thing that helps are the column truncation limits that give us + an upper bound on the size of individual lines. We don't store the + truncated stuff. + + From the scanner's viewpoint, the higher level subroutines ask for + new characters and do a lot of jumping backwards. */ + +#include "config.h" +#include "system.h" +#include "gfortran.h" +#include "toplev.h" +#include "debug.h" +#include "flags.h" +#include "cpp.h" + +/* Structure for holding module and include file search path. */ +typedef struct gfc_directorylist +{ + char *path; + bool use_for_modules; + struct gfc_directorylist *next; +} +gfc_directorylist; + +/* List of include file search directories. */ +static gfc_directorylist *include_dirs, *intrinsic_modules_dirs; + +static gfc_file *file_head, *current_file; + +static int continue_flag, end_flag, openmp_flag; +static int continue_count, continue_line; +static locus openmp_locus; + +gfc_source_form gfc_current_form; +static gfc_linebuf *line_head, *line_tail; + +locus gfc_current_locus; +const char *gfc_source_file; +static FILE *gfc_src_file; +static gfc_char_t *gfc_src_preprocessor_lines[2]; + +extern int pedantic; + +static struct gfc_file_change +{ + const char *filename; + gfc_linebuf *lb; + int line; +} *file_changes; +size_t file_changes_cur, file_changes_count; +size_t file_changes_allocated; + + +/* Functions dealing with our wide characters (gfc_char_t) and + sequences of such characters. */ + +int +gfc_wide_fits_in_byte (gfc_char_t c) +{ + return (c <= UCHAR_MAX); +} + +static inline int +wide_is_ascii (gfc_char_t c) +{ + return (gfc_wide_fits_in_byte (c) && ((unsigned char) c & ~0x7f) == 0); +} + +int +gfc_wide_is_printable (gfc_char_t c) +{ + return (gfc_wide_fits_in_byte (c) && ISPRINT ((unsigned char) c)); +} + +gfc_char_t +gfc_wide_tolower (gfc_char_t c) +{ + return (wide_is_ascii (c) ? (gfc_char_t) TOLOWER((unsigned char) c) : c); +} + +gfc_char_t +gfc_wide_toupper (gfc_char_t c) +{ + return (wide_is_ascii (c) ? (gfc_char_t) TOUPPER((unsigned char) c) : c); +} + +int +gfc_wide_is_digit (gfc_char_t c) +{ + return (c >= '0' && c <= '9'); +} + +static inline int +wide_atoi (gfc_char_t *c) +{ +#define MAX_DIGITS 20 + char buf[MAX_DIGITS+1]; + int i = 0; + + while (gfc_wide_is_digit(*c) && i < MAX_DIGITS) + buf[i++] = *c++; + buf[i] = '\0'; + return atoi (buf); +} + +size_t +gfc_wide_strlen (const gfc_char_t *str) +{ + size_t i; + + for (i = 0; str[i]; i++) + ; + + return i; +} + +gfc_char_t * +gfc_wide_memset (gfc_char_t *b, gfc_char_t c, size_t len) +{ + size_t i; + + for (i = 0; i < len; i++) + b[i] = c; + + return b; +} + +static gfc_char_t * +wide_strcpy (gfc_char_t *dest, const gfc_char_t *src) +{ + gfc_char_t *d; + + for (d = dest; (*d = *src) != '\0'; ++src, ++d) + ; + + return dest; +} + +static gfc_char_t * +wide_strchr (const gfc_char_t *s, gfc_char_t c) +{ + do { + if (*s == c) + { + return CONST_CAST(gfc_char_t *, s); + } + } while (*s++); + return 0; +} + +char * +gfc_widechar_to_char (const gfc_char_t *s, int length) +{ + size_t len, i; + char *res; + + if (s == NULL) + return NULL; + + /* Passing a negative length is used to indicate that length should be + calculated using gfc_wide_strlen(). */ + len = (length >= 0 ? (size_t) length : gfc_wide_strlen (s)); + res = XNEWVEC (char, len + 1); + + for (i = 0; i < len; i++) + { + gcc_assert (gfc_wide_fits_in_byte (s[i])); + res[i] = (unsigned char) s[i]; + } + + res[len] = '\0'; + return res; +} + +gfc_char_t * +gfc_char_to_widechar (const char *s) +{ + size_t len, i; + gfc_char_t *res; + + if (s == NULL) + return NULL; + + len = strlen (s); + res = gfc_get_wide_string (len + 1); + + for (i = 0; i < len; i++) + res[i] = (unsigned char) s[i]; + + res[len] = '\0'; + return res; +} + +static int +wide_strncmp (const gfc_char_t *s1, const char *s2, size_t n) +{ + gfc_char_t c1, c2; + + while (n-- > 0) + { + c1 = *s1++; + c2 = *s2++; + if (c1 != c2) + return (c1 > c2 ? 1 : -1); + if (c1 == '\0') + return 0; + } + return 0; +} + +int +gfc_wide_strncasecmp (const gfc_char_t *s1, const char *s2, size_t n) +{ + gfc_char_t c1, c2; + + while (n-- > 0) + { + c1 = gfc_wide_tolower (*s1++); + c2 = TOLOWER (*s2++); + if (c1 != c2) + return (c1 > c2 ? 1 : -1); + if (c1 == '\0') + return 0; + } + return 0; +} + + +/* Main scanner initialization. */ + +void +gfc_scanner_init_1 (void) +{ + file_head = NULL; + line_head = NULL; + line_tail = NULL; + + continue_count = 0; + continue_line = 0; + + end_flag = 0; +} + + +/* Main scanner destructor. */ + +void +gfc_scanner_done_1 (void) +{ + gfc_linebuf *lb; + gfc_file *f; + + while(line_head != NULL) + { + lb = line_head->next; + gfc_free(line_head); + line_head = lb; + } + + while(file_head != NULL) + { + f = file_head->next; + gfc_free(file_head->filename); + gfc_free(file_head); + file_head = f; + } +} + + +/* Adds path to the list pointed to by list. */ + +static void +add_path_to_list (gfc_directorylist **list, const char *path, + bool use_for_modules, bool head) +{ + gfc_directorylist *dir; + const char *p; + + p = path; + while (*p == ' ' || *p == '\t') /* someone might do "-I include" */ + if (*p++ == '\0') + return; + + if (head || *list == NULL) + { + dir = XCNEW (gfc_directorylist); + if (!head) + *list = dir; + } + else + { + dir = *list; + while (dir->next) + dir = dir->next; + + dir->next = XCNEW (gfc_directorylist); + dir = dir->next; + } + + dir->next = head ? *list : NULL; + if (head) + *list = dir; + dir->use_for_modules = use_for_modules; + dir->path = XCNEWVEC (char, strlen (p) + 2); + strcpy (dir->path, p); + strcat (dir->path, "/"); /* make '/' last character */ +} + + +void +gfc_add_include_path (const char *path, bool use_for_modules, bool file_dir) +{ + add_path_to_list (&include_dirs, path, use_for_modules, file_dir); + + /* For '#include "..."' these directories are automatically searched. */ + if (!file_dir) + gfc_cpp_add_include_path (xstrdup(path), true); +} + + +void +gfc_add_intrinsic_modules_path (const char *path) +{ + add_path_to_list (&intrinsic_modules_dirs, path, true, false); +} + + +/* Release resources allocated for options. */ + +void +gfc_release_include_path (void) +{ + gfc_directorylist *p; + + while (include_dirs != NULL) + { + p = include_dirs; + include_dirs = include_dirs->next; + gfc_free (p->path); + gfc_free (p); + } + + while (intrinsic_modules_dirs != NULL) + { + p = intrinsic_modules_dirs; + intrinsic_modules_dirs = intrinsic_modules_dirs->next; + gfc_free (p->path); + gfc_free (p); + } + + gfc_free (gfc_option.module_dir); +} + + +static FILE * +open_included_file (const char *name, gfc_directorylist *list, bool module) +{ + char *fullname; + gfc_directorylist *p; + FILE *f; + + for (p = list; p; p = p->next) + { + if (module && !p->use_for_modules) + continue; + + fullname = (char *) alloca(strlen (p->path) + strlen (name) + 1); + strcpy (fullname, p->path); + strcat (fullname, name); + + f = gfc_open_file (fullname); + if (f != NULL) + return f; + } + + return NULL; +} + + +/* Opens file for reading, searching through the include directories + given if necessary. If the include_cwd argument is true, we try + to open the file in the current directory first. */ + +FILE * +gfc_open_included_file (const char *name, bool include_cwd, bool module) +{ + FILE *f; + + if (IS_ABSOLUTE_PATH (name)) + return gfc_open_file (name); + + if (include_cwd) + { + f = gfc_open_file (name); + if (f != NULL) + return f; + } + + return open_included_file (name, include_dirs, module); +} + +FILE * +gfc_open_intrinsic_module (const char *name) +{ + if (IS_ABSOLUTE_PATH (name)) + return gfc_open_file (name); + + return open_included_file (name, intrinsic_modules_dirs, true); +} + + +/* Test to see if we're at the end of the main source file. */ + +int +gfc_at_end (void) +{ + return end_flag; +} + + +/* Test to see if we're at the end of the current file. */ + +int +gfc_at_eof (void) +{ + if (gfc_at_end ()) + return 1; + + if (line_head == NULL) + return 1; /* Null file */ + + if (gfc_current_locus.lb == NULL) + return 1; + + return 0; +} + + +/* Test to see if we're at the beginning of a new line. */ + +int +gfc_at_bol (void) +{ + if (gfc_at_eof ()) + return 1; + + return (gfc_current_locus.nextc == gfc_current_locus.lb->line); +} + + +/* Test to see if we're at the end of a line. */ + +int +gfc_at_eol (void) +{ + if (gfc_at_eof ()) + return 1; + + return (*gfc_current_locus.nextc == '\0'); +} + +static void +add_file_change (const char *filename, int line) +{ + if (file_changes_count == file_changes_allocated) + { + if (file_changes_allocated) + file_changes_allocated *= 2; + else + file_changes_allocated = 16; + file_changes = XRESIZEVEC (struct gfc_file_change, file_changes, + file_changes_allocated); + } + file_changes[file_changes_count].filename = filename; + file_changes[file_changes_count].lb = NULL; + file_changes[file_changes_count++].line = line; +} + +static void +report_file_change (gfc_linebuf *lb) +{ + size_t c = file_changes_cur; + while (c < file_changes_count + && file_changes[c].lb == lb) + { + if (file_changes[c].filename) + (*debug_hooks->start_source_file) (file_changes[c].line, + file_changes[c].filename); + else + (*debug_hooks->end_source_file) (file_changes[c].line); + ++c; + } + file_changes_cur = c; +} + +void +gfc_start_source_files (void) +{ + /* If the debugger wants the name of the main source file, + we give it. */ + if (debug_hooks->start_end_main_source_file) + (*debug_hooks->start_source_file) (0, gfc_source_file); + + file_changes_cur = 0; + report_file_change (gfc_current_locus.lb); +} + +void +gfc_end_source_files (void) +{ + report_file_change (NULL); + + if (debug_hooks->start_end_main_source_file) + (*debug_hooks->end_source_file) (0); +} + +/* Advance the current line pointer to the next line. */ + +void +gfc_advance_line (void) +{ + if (gfc_at_end ()) + return; + + if (gfc_current_locus.lb == NULL) + { + end_flag = 1; + return; + } + + if (gfc_current_locus.lb->next + && !gfc_current_locus.lb->next->dbg_emitted) + { + report_file_change (gfc_current_locus.lb->next); + gfc_current_locus.lb->next->dbg_emitted = true; + } + + gfc_current_locus.lb = gfc_current_locus.lb->next; + + if (gfc_current_locus.lb != NULL) + gfc_current_locus.nextc = gfc_current_locus.lb->line; + else + { + gfc_current_locus.nextc = NULL; + end_flag = 1; + } +} + + +/* Get the next character from the input, advancing gfc_current_file's + locus. When we hit the end of the line or the end of the file, we + start returning a '\n' in order to complete the current statement. + No Fortran line conventions are implemented here. + + Requiring explicit advances to the next line prevents the parse + pointer from being on the wrong line if the current statement ends + prematurely. */ + +static gfc_char_t +next_char (void) +{ + gfc_char_t c; + + if (gfc_current_locus.nextc == NULL) + return '\n'; + + c = *gfc_current_locus.nextc++; + if (c == '\0') + { + gfc_current_locus.nextc--; /* Remain on this line. */ + c = '\n'; + } + + return c; +} + + +/* Skip a comment. When we come here the parse pointer is positioned + immediately after the comment character. If we ever implement + compiler directives withing comments, here is where we parse the + directive. */ + +static void +skip_comment_line (void) +{ + gfc_char_t c; + + do + { + c = next_char (); + } + while (c != '\n'); + + gfc_advance_line (); +} + + +int +gfc_define_undef_line (void) +{ + char *tmp; + + /* All lines beginning with '#' are either #define or #undef. */ + if (debug_info_level != DINFO_LEVEL_VERBOSE || gfc_peek_ascii_char () != '#') + return 0; + + if (wide_strncmp (gfc_current_locus.nextc, "#define ", 8) == 0) + { + tmp = gfc_widechar_to_char (&gfc_current_locus.nextc[8], -1); + (*debug_hooks->define) (gfc_linebuf_linenum (gfc_current_locus.lb), + tmp); + gfc_free (tmp); + } + + if (wide_strncmp (gfc_current_locus.nextc, "#undef ", 7) == 0) + { + tmp = gfc_widechar_to_char (&gfc_current_locus.nextc[7], -1); + (*debug_hooks->undef) (gfc_linebuf_linenum (gfc_current_locus.lb), + tmp); + gfc_free (tmp); + } + + /* Skip the rest of the line. */ + skip_comment_line (); + + return 1; +} + + +/* Comment lines are null lines, lines containing only blanks or lines + on which the first nonblank line is a '!'. + Return true if !$ openmp conditional compilation sentinel was + seen. */ + +static bool +skip_free_comments (void) +{ + locus start; + gfc_char_t c; + int at_bol; + + for (;;) + { + at_bol = gfc_at_bol (); + start = gfc_current_locus; + if (gfc_at_eof ()) + break; + + do + c = next_char (); + while (gfc_is_whitespace (c)); + + if (c == '\n') + { + gfc_advance_line (); + continue; + } + + if (c == '!') + { + /* If -fopenmp, we need to handle here 2 things: + 1) don't treat !$omp as comments, but directives + 2) handle OpenMP conditional compilation, where + !$ should be treated as 2 spaces (for initial lines + only if followed by space). */ + if (gfc_option.flag_openmp && at_bol) + { + locus old_loc = gfc_current_locus; + if (next_char () == '$') + { + c = next_char (); + if (c == 'o' || c == 'O') + { + if (((c = next_char ()) == 'm' || c == 'M') + && ((c = next_char ()) == 'p' || c == 'P')) + { + if ((c = next_char ()) == ' ' || c == '\t' + || continue_flag) + { + while (gfc_is_whitespace (c)) + c = next_char (); + if (c != '\n' && c != '!') + { + openmp_flag = 1; + openmp_locus = old_loc; + gfc_current_locus = start; + return false; + } + } + else + gfc_warning_now ("!$OMP at %C starts a commented " + "line as it neither is followed " + "by a space nor is a " + "continuation line"); + } + gfc_current_locus = old_loc; + next_char (); + c = next_char (); + } + if (continue_flag || c == ' ' || c == '\t') + { + gfc_current_locus = old_loc; + next_char (); + openmp_flag = 0; + return true; + } + } + gfc_current_locus = old_loc; + } + skip_comment_line (); + continue; + } + + break; + } + + if (openmp_flag && at_bol) + openmp_flag = 0; + gfc_current_locus = start; + return false; +} + + +/* Skip comment lines in fixed source mode. We have the same rules as + in skip_free_comment(), except that we can have a 'c', 'C' or '*' + in column 1, and a '!' cannot be in column 6. Also, we deal with + lines with 'd' or 'D' in column 1, if the user requested this. */ + +static void +skip_fixed_comments (void) +{ + locus start; + int col; + gfc_char_t c; + + if (! gfc_at_bol ()) + { + start = gfc_current_locus; + if (! gfc_at_eof ()) + { + do + c = next_char (); + while (gfc_is_whitespace (c)); + + if (c == '\n') + gfc_advance_line (); + else if (c == '!') + skip_comment_line (); + } + + if (! gfc_at_bol ()) + { + gfc_current_locus = start; + return; + } + } + + for (;;) + { + start = gfc_current_locus; + if (gfc_at_eof ()) + break; + + c = next_char (); + if (c == '\n') + { + gfc_advance_line (); + continue; + } + + if (c == '!' || c == 'c' || c == 'C' || c == '*') + { + /* If -fopenmp, we need to handle here 2 things: + 1) don't treat !$omp|c$omp|*$omp as comments, but directives + 2) handle OpenMP conditional compilation, where + !$|c$|*$ should be treated as 2 spaces if the characters + in columns 3 to 6 are valid fixed form label columns + characters. */ + if (gfc_current_locus.lb != NULL + && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb)) + continue_line = gfc_linebuf_linenum (gfc_current_locus.lb); + + if (gfc_option.flag_openmp) + { + if (next_char () == '$') + { + c = next_char (); + if (c == 'o' || c == 'O') + { + if (((c = next_char ()) == 'm' || c == 'M') + && ((c = next_char ()) == 'p' || c == 'P')) + { + c = next_char (); + if (c != '\n' + && ((openmp_flag && continue_flag) + || c == ' ' || c == '\t' || c == '0')) + { + do + c = next_char (); + while (gfc_is_whitespace (c)); + if (c != '\n' && c != '!') + { + /* Canonicalize to *$omp. */ + *start.nextc = '*'; + openmp_flag = 1; + gfc_current_locus = start; + return; + } + } + } + } + else + { + int digit_seen = 0; + + for (col = 3; col < 6; col++, c = next_char ()) + if (c == ' ') + continue; + else if (c == '\t') + { + col = 6; + break; + } + else if (c < '0' || c > '9') + break; + else + digit_seen = 1; + + if (col == 6 && c != '\n' + && ((continue_flag && !digit_seen) + || c == ' ' || c == '\t' || c == '0')) + { + gfc_current_locus = start; + start.nextc[0] = ' '; + start.nextc[1] = ' '; + continue; + } + } + } + gfc_current_locus = start; + } + skip_comment_line (); + continue; + } + + if (gfc_option.flag_d_lines != -1 && (c == 'd' || c == 'D')) + { + if (gfc_option.flag_d_lines == 0) + { + skip_comment_line (); + continue; + } + else + *start.nextc = c = ' '; + } + + col = 1; + + while (gfc_is_whitespace (c)) + { + c = next_char (); + col++; + } + + if (c == '\n') + { + gfc_advance_line (); + continue; + } + + if (col != 6 && c == '!') + { + if (gfc_current_locus.lb != NULL + && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb)) + continue_line = gfc_linebuf_linenum (gfc_current_locus.lb); + skip_comment_line (); + continue; + } + + break; + } + + openmp_flag = 0; + gfc_current_locus = start; +} + + +/* Skips the current line if it is a comment. */ + +void +gfc_skip_comments (void) +{ + if (gfc_current_form == FORM_FREE) + skip_free_comments (); + else + skip_fixed_comments (); +} + + +/* Get the next character from the input, taking continuation lines + and end-of-line comments into account. This implies that comment + lines between continued lines must be eaten here. For higher-level + subroutines, this flattens continued lines into a single logical + line. The in_string flag denotes whether we're inside a character + context or not. */ + +gfc_char_t +gfc_next_char_literal (int in_string) +{ + locus old_loc; + int i, prev_openmp_flag; + gfc_char_t c; + + continue_flag = 0; + +restart: + c = next_char (); + if (gfc_at_end ()) + { + continue_count = 0; + return c; + } + + if (gfc_current_form == FORM_FREE) + { + bool openmp_cond_flag; + + if (!in_string && c == '!') + { + if (openmp_flag + && memcmp (&gfc_current_locus, &openmp_locus, + sizeof (gfc_current_locus)) == 0) + goto done; + + /* This line can't be continued */ + do + { + c = next_char (); + } + while (c != '\n'); + + /* Avoid truncation warnings for comment ending lines. */ + gfc_current_locus.lb->truncated = 0; + + goto done; + } + + if (c != '&') + goto done; + + /* If the next nonblank character is a ! or \n, we've got a + continuation line. */ + old_loc = gfc_current_locus; + + c = next_char (); + while (gfc_is_whitespace (c)) + c = next_char (); + + /* Character constants to be continued cannot have commentary + after the '&'. */ + + if (in_string && c != '\n') + { + gfc_current_locus = old_loc; + c = '&'; + goto done; + } + + if (c != '!' && c != '\n') + { + gfc_current_locus = old_loc; + c = '&'; + goto done; + } + + prev_openmp_flag = openmp_flag; + continue_flag = 1; + if (c == '!') + skip_comment_line (); + else + gfc_advance_line (); + + if (gfc_at_eof()) + goto not_continuation; + + /* We've got a continuation line. If we are on the very next line after + the last continuation, increment the continuation line count and + check whether the limit has been exceeded. */ + if (gfc_linebuf_linenum (gfc_current_locus.lb) == continue_line + 1) + { + if (++continue_count == gfc_option.max_continue_free) + { + if (gfc_notification_std (GFC_STD_GNU) || pedantic) + gfc_warning ("Limit of %d continuations exceeded in " + "statement at %C", gfc_option.max_continue_free); + } + } + + /* Now find where it continues. First eat any comment lines. */ + openmp_cond_flag = skip_free_comments (); + + if (gfc_current_locus.lb != NULL + && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb)) + continue_line = gfc_linebuf_linenum (gfc_current_locus.lb); + + if (prev_openmp_flag != openmp_flag) + { + gfc_current_locus = old_loc; + openmp_flag = prev_openmp_flag; + c = '&'; + goto done; + } + + /* Now that we have a non-comment line, probe ahead for the + first non-whitespace character. If it is another '&', then + reading starts at the next character, otherwise we must back + up to where the whitespace started and resume from there. */ + + old_loc = gfc_current_locus; + + c = next_char (); + while (gfc_is_whitespace (c)) + c = next_char (); + + if (openmp_flag) + { + for (i = 0; i < 5; i++, c = next_char ()) + { + gcc_assert (gfc_wide_tolower (c) == (unsigned char) "!$omp"[i]); + if (i == 4) + old_loc = gfc_current_locus; + } + while (gfc_is_whitespace (c)) + c = next_char (); + } + + if (c != '&') + { + if (in_string) + { + if (gfc_option.warn_ampersand) + gfc_warning_now ("Missing '&' in continued character " + "constant at %C"); + gfc_current_locus.nextc--; + } + /* Both !$omp and !$ -fopenmp continuation lines have & on the + continuation line only optionally. */ + else if (openmp_flag || openmp_cond_flag) + gfc_current_locus.nextc--; + else + { + c = ' '; + gfc_current_locus = old_loc; + goto done; + } + } + } + else + { + /* Fixed form continuation. */ + if (!in_string && c == '!') + { + /* Skip comment at end of line. */ + do + { + c = next_char (); + } + while (c != '\n'); + + /* Avoid truncation warnings for comment ending lines. */ + gfc_current_locus.lb->truncated = 0; + } + + if (c != '\n') + goto done; + + prev_openmp_flag = openmp_flag; + continue_flag = 1; + old_loc = gfc_current_locus; + + gfc_advance_line (); + skip_fixed_comments (); + + /* See if this line is a continuation line. */ + if (openmp_flag != prev_openmp_flag) + { + openmp_flag = prev_openmp_flag; + goto not_continuation; + } + + if (!openmp_flag) + for (i = 0; i < 5; i++) + { + c = next_char (); + if (c != ' ') + goto not_continuation; + } + else + for (i = 0; i < 5; i++) + { + c = next_char (); + if (gfc_wide_tolower (c) != (unsigned char) "*$omp"[i]) + goto not_continuation; + } + + c = next_char (); + if (c == '0' || c == ' ' || c == '\n') + goto not_continuation; + + /* We've got a continuation line. If we are on the very next line after + the last continuation, increment the continuation line count and + check whether the limit has been exceeded. */ + if (gfc_linebuf_linenum (gfc_current_locus.lb) == continue_line + 1) + { + if (++continue_count == gfc_option.max_continue_fixed) + { + if (gfc_notification_std (GFC_STD_GNU) || pedantic) + gfc_warning ("Limit of %d continuations exceeded in " + "statement at %C", + gfc_option.max_continue_fixed); + } + } + + if (gfc_current_locus.lb != NULL + && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb)) + continue_line = gfc_linebuf_linenum (gfc_current_locus.lb); + } + + /* Ready to read first character of continuation line, which might + be another continuation line! */ + goto restart; + +not_continuation: + c = '\n'; + gfc_current_locus = old_loc; + +done: + if (c == '\n') + continue_count = 0; + continue_flag = 0; + return c; +} + + +/* Get the next character of input, folded to lowercase. In fixed + form mode, we also ignore spaces. When matcher subroutines are + parsing character literals, they have to call + gfc_next_char_literal(). */ + +gfc_char_t +gfc_next_char (void) +{ + gfc_char_t c; + + do + { + c = gfc_next_char_literal (0); + } + while (gfc_current_form == FORM_FIXED && gfc_is_whitespace (c)); + + return gfc_wide_tolower (c); +} + +char +gfc_next_ascii_char (void) +{ + gfc_char_t c = gfc_next_char (); + + return (gfc_wide_fits_in_byte (c) ? (unsigned char) c + : (unsigned char) UCHAR_MAX); +} + + +gfc_char_t +gfc_peek_char (void) +{ + locus old_loc; + gfc_char_t c; + + old_loc = gfc_current_locus; + c = gfc_next_char (); + gfc_current_locus = old_loc; + + return c; +} + + +char +gfc_peek_ascii_char (void) +{ + gfc_char_t c = gfc_peek_char (); + + return (gfc_wide_fits_in_byte (c) ? (unsigned char) c + : (unsigned char) UCHAR_MAX); +} + + +/* Recover from an error. We try to get past the current statement + and get lined up for the next. The next statement follows a '\n' + or a ';'. We also assume that we are not within a character + constant, and deal with finding a '\'' or '"'. */ + +void +gfc_error_recovery (void) +{ + gfc_char_t c, delim; + + if (gfc_at_eof ()) + return; + + for (;;) + { + c = gfc_next_char (); + if (c == '\n' || c == ';') + break; + + if (c != '\'' && c != '"') + { + if (gfc_at_eof ()) + break; + continue; + } + delim = c; + + for (;;) + { + c = next_char (); + + if (c == delim) + break; + if (c == '\n') + return; + if (c == '\\') + { + c = next_char (); + if (c == '\n') + return; + } + } + if (gfc_at_eof ()) + break; + } +} + + +/* Read ahead until the next character to be read is not whitespace. */ + +void +gfc_gobble_whitespace (void) +{ + static int linenum = 0; + locus old_loc; + gfc_char_t c; + + do + { + old_loc = gfc_current_locus; + c = gfc_next_char_literal (0); + /* Issue a warning for nonconforming tabs. We keep track of the line + number because the Fortran matchers will often back up and the same + line will be scanned multiple times. */ + if (!gfc_option.warn_tabs && c == '\t') + { + int cur_linenum = LOCATION_LINE (gfc_current_locus.lb->location); + if (cur_linenum != linenum) + { + linenum = cur_linenum; + gfc_warning_now ("Nonconforming tab character at %C"); + } + } + } + while (gfc_is_whitespace (c)); + + gfc_current_locus = old_loc; +} + + +/* Load a single line into pbuf. + + If pbuf points to a NULL pointer, it is allocated. + We truncate lines that are too long, unless we're dealing with + preprocessor lines or if the option -ffixed-line-length-none is set, + in which case we reallocate the buffer to fit the entire line, if + need be. + In fixed mode, we expand a tab that occurs within the statement + label region to expand to spaces that leave the next character in + the source region. + + If first_char is not NULL, it's a pointer to a single char value holding + the first character of the line, which has already been read by the + caller. This avoids the use of ungetc(). + + load_line returns whether the line was truncated. + + NOTE: The error machinery isn't available at this point, so we can't + easily report line and column numbers consistent with other + parts of gfortran. */ + +static int +load_line (FILE *input, gfc_char_t **pbuf, int *pbuflen, const int *first_char) +{ + static int linenum = 0, current_line = 1; + int c, maxlen, i, preprocessor_flag, buflen = *pbuflen; + int trunc_flag = 0, seen_comment = 0; + int seen_printable = 0, seen_ampersand = 0; + gfc_char_t *buffer; + bool found_tab = false; + + /* Determine the maximum allowed line length. */ + if (gfc_current_form == FORM_FREE) + maxlen = gfc_option.free_line_length; + else if (gfc_current_form == FORM_FIXED) + maxlen = gfc_option.fixed_line_length; + else + maxlen = 72; + + if (*pbuf == NULL) + { + /* Allocate the line buffer, storing its length into buflen. + Note that if maxlen==0, indicating that arbitrary-length lines + are allowed, the buffer will be reallocated if this length is + insufficient; since 132 characters is the length of a standard + free-form line, we use that as a starting guess. */ + if (maxlen > 0) + buflen = maxlen; + else + buflen = 132; + + *pbuf = gfc_get_wide_string (buflen + 1); + } + + i = 0; + buffer = *pbuf; + + if (first_char) + c = *first_char; + else + c = getc (input); + + /* In order to not truncate preprocessor lines, we have to + remember that this is one. */ + preprocessor_flag = (c == '#' ? 1 : 0); + + for (;;) + { + if (c == EOF) + break; + + if (c == '\n') + { + /* Check for illegal use of ampersand. See F95 Standard 3.3.1.3. */ + if (gfc_current_form == FORM_FREE + && !seen_printable && seen_ampersand) + { + if (pedantic) + gfc_error_now ("'&' not allowed by itself in line %d", + current_line); + else + gfc_warning_now ("'&' not allowed by itself in line %d", + current_line); + } + break; + } + + if (c == '\r' || c == '\0') + goto next_char; /* Gobble characters. */ + + if (c == '&') + { + if (seen_ampersand) + seen_ampersand = 0; + else + seen_ampersand = 1; + } + + if ((c != '&' && c != '!' && c != ' ') || (c == '!' && !seen_ampersand)) + seen_printable = 1; + + /* Is this a fixed-form comment? */ + if (gfc_current_form == FORM_FIXED && i == 0 + && (c == '*' || c == 'c' || c == 'd')) + seen_comment = 1; + + /* Vendor extension: "1" marks a continuation line. */ + if (found_tab) + { + found_tab = false; + if (c >= '1' && c <= '9') + { + *(buffer-1) = c; + goto next_char; + } + } + + if (gfc_current_form == FORM_FIXED && c == '\t' && i < 6) + { + found_tab = true; + + if (!gfc_option.warn_tabs && seen_comment == 0 + && current_line != linenum) + { + linenum = current_line; + gfc_warning_now ("Nonconforming tab character in column %d " + "of line %d", i+1, linenum); + } + + while (i < 6) + { + *buffer++ = ' '; + i++; + } + + goto next_char; + } + + *buffer++ = c; + i++; + + if (maxlen == 0 || preprocessor_flag) + { + if (i >= buflen) + { + /* Reallocate line buffer to double size to hold the + overlong line. */ + buflen = buflen * 2; + *pbuf = XRESIZEVEC (gfc_char_t, *pbuf, (buflen + 1)); + buffer = (*pbuf) + i; + } + } + else if (i >= maxlen) + { + /* Truncate the rest of the line. */ + for (;;) + { + c = getc (input); + if (c == '\r') + continue; + + if (c == '\n' || c == EOF) + break; + + trunc_flag = 1; + } + + c = '\n'; + continue; + } + +next_char: + c = getc (input); + } + + /* Pad lines to the selected line length in fixed form. */ + if (gfc_current_form == FORM_FIXED + && gfc_option.fixed_line_length != 0 + && !preprocessor_flag + && c != EOF) + { + while (i++ < maxlen) + *buffer++ = ' '; + } + + *buffer = '\0'; + *pbuflen = buflen; + current_line++; + + return trunc_flag; +} + + +/* Get a gfc_file structure, initialize it and add it to + the file stack. */ + +static gfc_file * +get_file (const char *name, enum lc_reason reason ATTRIBUTE_UNUSED) +{ + gfc_file *f; + + f = XCNEW (gfc_file); + + f->filename = xstrdup (name); + + f->next = file_head; + file_head = f; + + f->up = current_file; + if (current_file != NULL) + f->inclusion_line = current_file->line; + + linemap_add (line_table, reason, false, f->filename, 1); + + return f; +} + + +/* Deal with a line from the C preprocessor. The + initial octothorp has already been seen. */ + +static void +preprocessor_line (gfc_char_t *c) +{ + bool flag[5]; + int i, line; + gfc_char_t *wide_filename; + gfc_file *f; + int escaped, unescape; + char *filename; + + c++; + while (*c == ' ' || *c == '\t') + c++; + + if (*c < '0' || *c > '9') + goto bad_cpp_line; + + line = wide_atoi (c); + + c = wide_strchr (c, ' '); + if (c == NULL) + { + /* No file name given. Set new line number. */ + current_file->line = line; + return; + } + + /* Skip spaces. */ + while (*c == ' ' || *c == '\t') + c++; + + /* Skip quote. */ + if (*c != '"') + goto bad_cpp_line; + ++c; + + wide_filename = c; + + /* Make filename end at quote. */ + unescape = 0; + escaped = false; + while (*c && ! (!escaped && *c == '"')) + { + if (escaped) + escaped = false; + else if (*c == '\\') + { + escaped = true; + unescape++; + } + ++c; + } + + if (! *c) + /* Preprocessor line has no closing quote. */ + goto bad_cpp_line; + + *c++ = '\0'; + + /* Undo effects of cpp_quote_string. */ + if (unescape) + { + gfc_char_t *s = wide_filename; + gfc_char_t *d = gfc_get_wide_string (c - wide_filename - unescape); + + wide_filename = d; + while (*s) + { + if (*s == '\\') + *d++ = *++s; + else + *d++ = *s; + s++; + } + *d = '\0'; + } + + /* Get flags. */ + + flag[1] = flag[2] = flag[3] = flag[4] = false; + + for (;;) + { + c = wide_strchr (c, ' '); + if (c == NULL) + break; + + c++; + i = wide_atoi (c); + + if (1 <= i && i <= 4) + flag[i] = true; + } + + /* Convert the filename in wide characters into a filename in narrow + characters. */ + filename = gfc_widechar_to_char (wide_filename, -1); + + /* Interpret flags. */ + + if (flag[1]) /* Starting new file. */ + { + f = get_file (filename, LC_RENAME); + add_file_change (f->filename, f->inclusion_line); + current_file = f; + } + + if (flag[2]) /* Ending current file. */ + { + if (!current_file->up + || strcmp (current_file->up->filename, filename) != 0) + { + gfc_warning_now ("%s:%d: file %s left but not entered", + current_file->filename, current_file->line, + filename); + if (unescape) + gfc_free (wide_filename); + gfc_free (filename); + return; + } + + add_file_change (NULL, line); + current_file = current_file->up; + linemap_add (line_table, LC_RENAME, false, current_file->filename, + current_file->line); + } + + /* The name of the file can be a temporary file produced by + cpp. Replace the name if it is different. */ + + if (strcmp (current_file->filename, filename) != 0) + { + /* FIXME: we leak the old filename because a pointer to it may be stored + in the linemap. Alternative could be using GC or updating linemap to + point to the new name, but there is no API for that currently. */ + current_file->filename = xstrdup (filename); + } + + /* Set new line number. */ + current_file->line = line; + if (unescape) + gfc_free (wide_filename); + gfc_free (filename); + return; + + bad_cpp_line: + gfc_warning_now ("%s:%d: Illegal preprocessor directive", + current_file->filename, current_file->line); + current_file->line++; +} + + +static gfc_try load_file (const char *, const char *, bool); + +/* include_line()-- Checks a line buffer to see if it is an include + line. If so, we call load_file() recursively to load the included + file. We never return a syntax error because a statement like + "include = 5" is perfectly legal. We return false if no include was + processed or true if we matched an include. */ + +static bool +include_line (gfc_char_t *line) +{ + gfc_char_t quote, *c, *begin, *stop; + char *filename; + + c = line; + + if (gfc_option.flag_openmp) + { + if (gfc_current_form == FORM_FREE) + { + while (*c == ' ' || *c == '\t') + c++; + if (*c == '!' && c[1] == '$' && (c[2] == ' ' || c[2] == '\t')) + c += 3; + } + else + { + if ((*c == '!' || *c == 'c' || *c == 'C' || *c == '*') + && c[1] == '$' && (c[2] == ' ' || c[2] == '\t')) + c += 3; + } + } + + while (*c == ' ' || *c == '\t') + c++; + + if (gfc_wide_strncasecmp (c, "include", 7)) + return false; + + c += 7; + while (*c == ' ' || *c == '\t') + c++; + + /* Find filename between quotes. */ + + quote = *c++; + if (quote != '"' && quote != '\'') + return false; + + begin = c; + + while (*c != quote && *c != '\0') + c++; + + if (*c == '\0') + return false; + + stop = c++; + + while (*c == ' ' || *c == '\t') + c++; + + if (*c != '\0' && *c != '!') + return false; + + /* We have an include line at this point. */ + + *stop = '\0'; /* It's ok to trash the buffer, as this line won't be + read by anything else. */ + + filename = gfc_widechar_to_char (begin, -1); + load_file (filename, NULL, false); + gfc_free (filename); + return true; +} + + +/* Load a file into memory by calling load_line until the file ends. */ + +static gfc_try +load_file (const char *realfilename, const char *displayedname, bool initial) +{ + gfc_char_t *line; + gfc_linebuf *b; + gfc_file *f; + FILE *input; + int len, line_len; + bool first_line; + const char *filename; + + filename = displayedname ? displayedname : realfilename; + + for (f = current_file; f; f = f->up) + if (strcmp (filename, f->filename) == 0) + { + fprintf (stderr, "%s:%d: Error: File '%s' is being included " + "recursively\n", current_file->filename, current_file->line, + filename); + return FAILURE; + } + + if (initial) + { + if (gfc_src_file) + { + input = gfc_src_file; + gfc_src_file = NULL; + } + else + input = gfc_open_file (realfilename); + if (input == NULL) + { + gfc_error_now ("Can't open file '%s'", filename); + return FAILURE; + } + } + else + { + input = gfc_open_included_file (realfilename, false, false); + if (input == NULL) + { + fprintf (stderr, "%s:%d: Error: Can't open included file '%s'\n", + current_file->filename, current_file->line, filename); + return FAILURE; + } + } + + /* Load the file. */ + + f = get_file (filename, initial ? LC_RENAME : LC_ENTER); + if (!initial) + add_file_change (f->filename, f->inclusion_line); + current_file = f; + current_file->line = 1; + line = NULL; + line_len = 0; + first_line = true; + + if (initial && gfc_src_preprocessor_lines[0]) + { + preprocessor_line (gfc_src_preprocessor_lines[0]); + gfc_free (gfc_src_preprocessor_lines[0]); + gfc_src_preprocessor_lines[0] = NULL; + if (gfc_src_preprocessor_lines[1]) + { + preprocessor_line (gfc_src_preprocessor_lines[1]); + gfc_free (gfc_src_preprocessor_lines[1]); + gfc_src_preprocessor_lines[1] = NULL; + } + } + + for (;;) + { + int trunc = load_line (input, &line, &line_len, NULL); + + len = gfc_wide_strlen (line); + if (feof (input) && len == 0) + break; + + /* If this is the first line of the file, it can contain a byte + order mark (BOM), which we will ignore: + FF FE is UTF-16 little endian, + FE FF is UTF-16 big endian, + EF BB BF is UTF-8. */ + if (first_line + && ((line_len >= 2 && line[0] == (unsigned char) '\xFF' + && line[1] == (unsigned char) '\xFE') + || (line_len >= 2 && line[0] == (unsigned char) '\xFE' + && line[1] == (unsigned char) '\xFF') + || (line_len >= 3 && line[0] == (unsigned char) '\xEF' + && line[1] == (unsigned char) '\xBB' + && line[2] == (unsigned char) '\xBF'))) + { + int n = line[1] == (unsigned char) '\xBB' ? 3 : 2; + gfc_char_t *new_char = gfc_get_wide_string (line_len); + + wide_strcpy (new_char, &line[n]); + gfc_free (line); + line = new_char; + len -= n; + } + + /* There are three things this line can be: a line of Fortran + source, an include line or a C preprocessor directive. */ + + if (line[0] == '#') + { + /* When -g3 is specified, it's possible that we emit #define + and #undef lines, which we need to pass to the middle-end + so that it can emit correct debug info. */ + if (debug_info_level == DINFO_LEVEL_VERBOSE + && (wide_strncmp (line, "#define ", 8) == 0 + || wide_strncmp (line, "#undef ", 7) == 0)) + ; + else + { + preprocessor_line (line); + continue; + } + } + + /* Preprocessed files have preprocessor lines added before the byte + order mark, so first_line is not about the first line of the file + but the first line that's not a preprocessor line. */ + first_line = false; + + if (include_line (line)) + { + current_file->line++; + continue; + } + + /* Add line. */ + + b = (gfc_linebuf *) gfc_getmem (gfc_linebuf_header_size + + (len + 1) * sizeof (gfc_char_t)); + + b->location + = linemap_line_start (line_table, current_file->line++, 120); + b->file = current_file; + b->truncated = trunc; + wide_strcpy (b->line, line); + + if (line_head == NULL) + line_head = b; + else + line_tail->next = b; + + line_tail = b; + + while (file_changes_cur < file_changes_count) + file_changes[file_changes_cur++].lb = b; + } + + /* Release the line buffer allocated in load_line. */ + gfc_free (line); + + fclose (input); + + if (!initial) + add_file_change (NULL, current_file->inclusion_line + 1); + current_file = current_file->up; + linemap_add (line_table, LC_LEAVE, 0, NULL, 0); + return SUCCESS; +} + + +/* Open a new file and start scanning from that file. Returns SUCCESS + if everything went OK, FAILURE otherwise. If form == FORM_UNKNOWN + it tries to determine the source form from the filename, defaulting + to free form. */ + +gfc_try +gfc_new_file (void) +{ + gfc_try result; + + if (gfc_cpp_enabled ()) + { + result = gfc_cpp_preprocess (gfc_source_file); + if (!gfc_cpp_preprocess_only ()) + result = load_file (gfc_cpp_temporary_file (), gfc_source_file, true); + } + else + result = load_file (gfc_source_file, NULL, true); + + gfc_current_locus.lb = line_head; + gfc_current_locus.nextc = (line_head == NULL) ? NULL : line_head->line; + +#if 0 /* Debugging aid. */ + for (; line_head; line_head = line_head->next) + printf ("%s:%3d %s\n", LOCATION_FILE (line_head->location), + LOCATION_LINE (line_head->location), line_head->line); + + exit (0); +#endif + + return result; +} + +static char * +unescape_filename (const char *ptr) +{ + const char *p = ptr, *s; + char *d, *ret; + int escaped, unescape = 0; + + /* Make filename end at quote. */ + escaped = false; + while (*p && ! (! escaped && *p == '"')) + { + if (escaped) + escaped = false; + else if (*p == '\\') + { + escaped = true; + unescape++; + } + ++p; + } + + if (!*p || p[1]) + return NULL; + + /* Undo effects of cpp_quote_string. */ + s = ptr; + d = XCNEWVEC (char, p + 1 - ptr - unescape); + ret = d; + + while (s != p) + { + if (*s == '\\') + *d++ = *++s; + else + *d++ = *s; + s++; + } + *d = '\0'; + return ret; +} + +/* For preprocessed files, if the first tokens are of the form # NUM. + handle the directives so we know the original file name. */ + +const char * +gfc_read_orig_filename (const char *filename, const char **canon_source_file) +{ + int c, len; + char *dirname, *tmp; + + gfc_src_file = gfc_open_file (filename); + if (gfc_src_file == NULL) + return NULL; + + c = getc (gfc_src_file); + + if (c != '#') + return NULL; + + len = 0; + load_line (gfc_src_file, &gfc_src_preprocessor_lines[0], &len, &c); + + if (wide_strncmp (gfc_src_preprocessor_lines[0], "# 1 \"", 5) != 0) + return NULL; + + tmp = gfc_widechar_to_char (&gfc_src_preprocessor_lines[0][5], -1); + filename = unescape_filename (tmp); + gfc_free (tmp); + if (filename == NULL) + return NULL; + + c = getc (gfc_src_file); + + if (c != '#') + return filename; + + len = 0; + load_line (gfc_src_file, &gfc_src_preprocessor_lines[1], &len, &c); + + if (wide_strncmp (gfc_src_preprocessor_lines[1], "# 1 \"", 5) != 0) + return filename; + + tmp = gfc_widechar_to_char (&gfc_src_preprocessor_lines[1][5], -1); + dirname = unescape_filename (tmp); + gfc_free (tmp); + if (dirname == NULL) + return filename; + + len = strlen (dirname); + if (len < 3 || dirname[len - 1] != '/' || dirname[len - 2] != '/') + { + gfc_free (dirname); + return filename; + } + dirname[len - 2] = '\0'; + set_src_pwd (dirname); + + if (! IS_ABSOLUTE_PATH (filename)) + { + char *p = XCNEWVEC (char, len + strlen (filename)); + + memcpy (p, dirname, len - 2); + p[len - 2] = '/'; + strcpy (p + len - 1, filename); + *canon_source_file = p; + } + + gfc_free (dirname); + return filename; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/simplify.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/simplify.c new file mode 100644 index 0000000000..7be4671acf --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/simplify.c @@ -0,0 +1,4956 @@ +/* Simplify intrinsic functions at compile-time. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught & Katherine Holcomb + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "flags.h" +#include "gfortran.h" +#include "arith.h" +#include "intrinsic.h" +#include "target-memory.h" + +gfc_expr gfc_bad_expr; + + +/* Note that 'simplification' is not just transforming expressions. + For functions that are not simplified at compile time, range + checking is done if possible. + + The return convention is that each simplification function returns: + + A new expression node corresponding to the simplified arguments. + The original arguments are destroyed by the caller, and must not + be a part of the new expression. + + NULL pointer indicating that no simplification was possible and + the original expression should remain intact. If the + simplification function sets the type and/or the function name + via the pointer gfc_simple_expression, then this type is + retained. + + An expression pointer to gfc_bad_expr (a static placeholder) + indicating that some error has prevented simplification. For + example, sqrt(-1.0). The error is generated within the function + and should be propagated upwards + + By the time a simplification function gets control, it has been + decided that the function call is really supposed to be the + intrinsic. No type checking is strictly necessary, since only + valid types will be passed on. On the other hand, a simplification + subroutine may have to look at the type of an argument as part of + its processing. + + Array arguments are never passed to these subroutines. + + The functions in this file don't have much comment with them, but + everything is reasonably straight-forward. The Standard, chapter 13 + is the best comment you'll find for this file anyway. */ + +/* Range checks an expression node. If all goes well, returns the + node, otherwise returns &gfc_bad_expr and frees the node. */ + +static gfc_expr * +range_check (gfc_expr *result, const char *name) +{ + if (result == NULL) + return &gfc_bad_expr; + + switch (gfc_range_check (result)) + { + case ARITH_OK: + return result; + + case ARITH_OVERFLOW: + gfc_error ("Result of %s overflows its kind at %L", name, + &result->where); + break; + + case ARITH_UNDERFLOW: + gfc_error ("Result of %s underflows its kind at %L", name, + &result->where); + break; + + case ARITH_NAN: + gfc_error ("Result of %s is NaN at %L", name, &result->where); + break; + + default: + gfc_error ("Result of %s gives range error for its kind at %L", name, + &result->where); + break; + } + + gfc_free_expr (result); + return &gfc_bad_expr; +} + + +/* A helper function that gets an optional and possibly missing + kind parameter. Returns the kind, -1 if something went wrong. */ + +static int +get_kind (bt type, gfc_expr *k, const char *name, int default_kind) +{ + int kind; + + if (k == NULL) + return default_kind; + + if (k->expr_type != EXPR_CONSTANT) + { + gfc_error ("KIND parameter of %s at %L must be an initialization " + "expression", name, &k->where); + return -1; + } + + if (gfc_extract_int (k, &kind) != NULL + || gfc_validate_kind (type, kind, true) < 0) + { + gfc_error ("Invalid KIND parameter of %s at %L", name, &k->where); + return -1; + } + + return kind; +} + + +/* Helper function to get an integer constant with a kind number given + by an integer constant expression. */ +static gfc_expr * +int_expr_with_kind (int i, gfc_expr *kind, const char *name) +{ + gfc_expr *res = gfc_int_expr (i); + res->ts.kind = get_kind (BT_INTEGER, kind, name, gfc_default_integer_kind); + if (res->ts.kind == -1) + return NULL; + else + return res; +} + + +/* Converts an mpz_t signed variable into an unsigned one, assuming + two's complement representations and a binary width of bitsize. + The conversion is a no-op unless x is negative; otherwise, it can + be accomplished by masking out the high bits. */ + +static void +convert_mpz_to_unsigned (mpz_t x, int bitsize) +{ + mpz_t mask; + + if (mpz_sgn (x) < 0) + { + /* Confirm that no bits above the signed range are unset. */ + gcc_assert (mpz_scan0 (x, bitsize-1) == ULONG_MAX); + + mpz_init_set_ui (mask, 1); + mpz_mul_2exp (mask, mask, bitsize); + mpz_sub_ui (mask, mask, 1); + + mpz_and (x, x, mask); + + mpz_clear (mask); + } + else + { + /* Confirm that no bits above the signed range are set. */ + gcc_assert (mpz_scan1 (x, bitsize-1) == ULONG_MAX); + } +} + + +/* Converts an mpz_t unsigned variable into a signed one, assuming + two's complement representations and a binary width of bitsize. + If the bitsize-1 bit is set, this is taken as a sign bit and + the number is converted to the corresponding negative number. */ + +static void +convert_mpz_to_signed (mpz_t x, int bitsize) +{ + mpz_t mask; + + /* Confirm that no bits above the unsigned range are set. */ + gcc_assert (mpz_scan1 (x, bitsize) == ULONG_MAX); + + if (mpz_tstbit (x, bitsize - 1) == 1) + { + mpz_init_set_ui (mask, 1); + mpz_mul_2exp (mask, mask, bitsize); + mpz_sub_ui (mask, mask, 1); + + /* We negate the number by hand, zeroing the high bits, that is + make it the corresponding positive number, and then have it + negated by GMP, giving the correct representation of the + negative number. */ + mpz_com (x, x); + mpz_add_ui (x, x, 1); + mpz_and (x, x, mask); + + mpz_neg (x, x); + + mpz_clear (mask); + } +} + + +/********************** Simplification functions *****************************/ + +gfc_expr * +gfc_simplify_abs (gfc_expr *e) +{ + gfc_expr *result; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + switch (e->ts.type) + { + case BT_INTEGER: + result = gfc_constant_result (BT_INTEGER, e->ts.kind, &e->where); + + mpz_abs (result->value.integer, e->value.integer); + + result = range_check (result, "IABS"); + break; + + case BT_REAL: + result = gfc_constant_result (BT_REAL, e->ts.kind, &e->where); + + mpfr_abs (result->value.real, e->value.real, GFC_RND_MODE); + + result = range_check (result, "ABS"); + break; + + case BT_COMPLEX: + result = gfc_constant_result (BT_REAL, e->ts.kind, &e->where); + + gfc_set_model_kind (e->ts.kind); + + mpfr_hypot (result->value.real, e->value.complex.r, + e->value.complex.i, GFC_RND_MODE); + result = range_check (result, "CABS"); + break; + + default: + gfc_internal_error ("gfc_simplify_abs(): Bad type"); + } + + return result; +} + + +static gfc_expr * +simplify_achar_char (gfc_expr *e, gfc_expr *k, const char *name, bool ascii) +{ + gfc_expr *result; + int kind; + bool too_large = false; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + kind = get_kind (BT_CHARACTER, k, name, gfc_default_character_kind); + if (kind == -1) + return &gfc_bad_expr; + + if (mpz_cmp_si (e->value.integer, 0) < 0) + { + gfc_error ("Argument of %s function at %L is negative", name, + &e->where); + return &gfc_bad_expr; + } + + if (ascii && gfc_option.warn_surprising + && mpz_cmp_si (e->value.integer, 127) > 0) + gfc_warning ("Argument of %s function at %L outside of range [0,127]", + name, &e->where); + + if (kind == 1 && mpz_cmp_si (e->value.integer, 255) > 0) + too_large = true; + else if (kind == 4) + { + mpz_t t; + mpz_init_set_ui (t, 2); + mpz_pow_ui (t, t, 32); + mpz_sub_ui (t, t, 1); + if (mpz_cmp (e->value.integer, t) > 0) + too_large = true; + mpz_clear (t); + } + + if (too_large) + { + gfc_error ("Argument of %s function at %L is too large for the " + "collating sequence of kind %d", name, &e->where, kind); + return &gfc_bad_expr; + } + + result = gfc_constant_result (BT_CHARACTER, kind, &e->where); + result->value.character.string = gfc_get_wide_string (2); + result->value.character.length = 1; + result->value.character.string[0] = mpz_get_ui (e->value.integer); + result->value.character.string[1] = '\0'; /* For debugger */ + return result; +} + + + +/* We use the processor's collating sequence, because all + systems that gfortran currently works on are ASCII. */ + +gfc_expr * +gfc_simplify_achar (gfc_expr *e, gfc_expr *k) +{ + return simplify_achar_char (e, k, "ACHAR", true); +} + + +gfc_expr * +gfc_simplify_acos (gfc_expr *x) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + if (mpfr_cmp_si (x->value.real, 1) > 0 + || mpfr_cmp_si (x->value.real, -1) < 0) + { + gfc_error ("Argument of ACOS at %L must be between -1 and 1", + &x->where); + return &gfc_bad_expr; + } + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_acos (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "ACOS"); +} + +gfc_expr * +gfc_simplify_acosh (gfc_expr *x) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + if (mpfr_cmp_si (x->value.real, 1) < 0) + { + gfc_error ("Argument of ACOSH at %L must not be less than 1", + &x->where); + return &gfc_bad_expr; + } + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_acosh (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "ACOSH"); +} + +gfc_expr * +gfc_simplify_adjustl (gfc_expr *e) +{ + gfc_expr *result; + int count, i, len; + gfc_char_t ch; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + len = e->value.character.length; + + result = gfc_constant_result (BT_CHARACTER, e->ts.kind, &e->where); + + result->value.character.length = len; + result->value.character.string = gfc_get_wide_string (len + 1); + + for (count = 0, i = 0; i < len; ++i) + { + ch = e->value.character.string[i]; + if (ch != ' ') + break; + ++count; + } + + for (i = 0; i < len - count; ++i) + result->value.character.string[i] = e->value.character.string[count + i]; + + for (i = len - count; i < len; ++i) + result->value.character.string[i] = ' '; + + result->value.character.string[len] = '\0'; /* For debugger */ + + return result; +} + + +gfc_expr * +gfc_simplify_adjustr (gfc_expr *e) +{ + gfc_expr *result; + int count, i, len; + gfc_char_t ch; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + len = e->value.character.length; + + result = gfc_constant_result (BT_CHARACTER, e->ts.kind, &e->where); + + result->value.character.length = len; + result->value.character.string = gfc_get_wide_string (len + 1); + + for (count = 0, i = len - 1; i >= 0; --i) + { + ch = e->value.character.string[i]; + if (ch != ' ') + break; + ++count; + } + + for (i = 0; i < count; ++i) + result->value.character.string[i] = ' '; + + for (i = count; i < len; ++i) + result->value.character.string[i] = e->value.character.string[i - count]; + + result->value.character.string[len] = '\0'; /* For debugger */ + + return result; +} + + +gfc_expr * +gfc_simplify_aimag (gfc_expr *e) +{ + gfc_expr *result; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_REAL, e->ts.kind, &e->where); + mpfr_set (result->value.real, e->value.complex.i, GFC_RND_MODE); + + return range_check (result, "AIMAG"); +} + + +gfc_expr * +gfc_simplify_aint (gfc_expr *e, gfc_expr *k) +{ + gfc_expr *rtrunc, *result; + int kind; + + kind = get_kind (BT_REAL, k, "AINT", e->ts.kind); + if (kind == -1) + return &gfc_bad_expr; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + rtrunc = gfc_copy_expr (e); + + mpfr_trunc (rtrunc->value.real, e->value.real); + + result = gfc_real2real (rtrunc, kind); + gfc_free_expr (rtrunc); + + return range_check (result, "AINT"); +} + + +gfc_expr * +gfc_simplify_dint (gfc_expr *e) +{ + gfc_expr *rtrunc, *result; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + rtrunc = gfc_copy_expr (e); + + mpfr_trunc (rtrunc->value.real, e->value.real); + + result = gfc_real2real (rtrunc, gfc_default_double_kind); + gfc_free_expr (rtrunc); + + return range_check (result, "DINT"); +} + + +gfc_expr * +gfc_simplify_anint (gfc_expr *e, gfc_expr *k) +{ + gfc_expr *result; + int kind; + + kind = get_kind (BT_REAL, k, "ANINT", e->ts.kind); + if (kind == -1) + return &gfc_bad_expr; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (e->ts.type, kind, &e->where); + + mpfr_round (result->value.real, e->value.real); + + return range_check (result, "ANINT"); +} + + +gfc_expr * +gfc_simplify_and (gfc_expr *x, gfc_expr *y) +{ + gfc_expr *result; + int kind; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + kind = x->ts.kind > y->ts.kind ? x->ts.kind : y->ts.kind; + if (x->ts.type == BT_INTEGER) + { + result = gfc_constant_result (BT_INTEGER, kind, &x->where); + mpz_and (result->value.integer, x->value.integer, y->value.integer); + return range_check (result, "AND"); + } + else /* BT_LOGICAL */ + { + result = gfc_constant_result (BT_LOGICAL, kind, &x->where); + result->value.logical = x->value.logical && y->value.logical; + return result; + } +} + + +gfc_expr * +gfc_simplify_dnint (gfc_expr *e) +{ + gfc_expr *result; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_REAL, gfc_default_double_kind, &e->where); + + mpfr_round (result->value.real, e->value.real); + + return range_check (result, "DNINT"); +} + + +gfc_expr * +gfc_simplify_asin (gfc_expr *x) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + if (mpfr_cmp_si (x->value.real, 1) > 0 + || mpfr_cmp_si (x->value.real, -1) < 0) + { + gfc_error ("Argument of ASIN at %L must be between -1 and 1", + &x->where); + return &gfc_bad_expr; + } + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_asin (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "ASIN"); +} + + +gfc_expr * +gfc_simplify_asinh (gfc_expr *x) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_asinh (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "ASINH"); +} + + +gfc_expr * +gfc_simplify_atan (gfc_expr *x) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_atan (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "ATAN"); +} + + +gfc_expr * +gfc_simplify_atanh (gfc_expr *x) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + if (mpfr_cmp_si (x->value.real, 1) >= 0 + || mpfr_cmp_si (x->value.real, -1) <= 0) + { + gfc_error ("Argument of ATANH at %L must be inside the range -1 to 1", + &x->where); + return &gfc_bad_expr; + } + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_atanh (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "ATANH"); +} + + +gfc_expr * +gfc_simplify_atan2 (gfc_expr *y, gfc_expr *x) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + if (mpfr_sgn (y->value.real) == 0 && mpfr_sgn (x->value.real) == 0) + { + gfc_error ("If first argument of ATAN2 %L is zero, then the " + "second argument must not be zero", &x->where); + return &gfc_bad_expr; + } + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_atan2 (result->value.real, y->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "ATAN2"); +} + + +gfc_expr * +gfc_simplify_bessel_j0 (gfc_expr *x ATTRIBUTE_UNUSED) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + mpfr_j0 (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "BESSEL_J0"); +} + + +gfc_expr * +gfc_simplify_bessel_j1 (gfc_expr *x ATTRIBUTE_UNUSED) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + mpfr_j1 (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "BESSEL_J1"); +} + + +gfc_expr * +gfc_simplify_bessel_jn (gfc_expr *order ATTRIBUTE_UNUSED, + gfc_expr *x ATTRIBUTE_UNUSED) +{ + gfc_expr *result; + long n; + + if (x->expr_type != EXPR_CONSTANT || order->expr_type != EXPR_CONSTANT) + return NULL; + + n = mpz_get_si (order->value.integer); + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + mpfr_jn (result->value.real, n, x->value.real, GFC_RND_MODE); + + return range_check (result, "BESSEL_JN"); +} + + +gfc_expr * +gfc_simplify_bessel_y0 (gfc_expr *x ATTRIBUTE_UNUSED) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + mpfr_y0 (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "BESSEL_Y0"); +} + + +gfc_expr * +gfc_simplify_bessel_y1 (gfc_expr *x ATTRIBUTE_UNUSED) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + mpfr_y1 (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "BESSEL_Y1"); +} + + +gfc_expr * +gfc_simplify_bessel_yn (gfc_expr *order ATTRIBUTE_UNUSED, + gfc_expr *x ATTRIBUTE_UNUSED) +{ + gfc_expr *result; + long n; + + if (x->expr_type != EXPR_CONSTANT || order->expr_type != EXPR_CONSTANT) + return NULL; + + n = mpz_get_si (order->value.integer); + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + mpfr_yn (result->value.real, n, x->value.real, GFC_RND_MODE); + + return range_check (result, "BESSEL_YN"); +} + + +gfc_expr * +gfc_simplify_bit_size (gfc_expr *e) +{ + gfc_expr *result; + int i; + + i = gfc_validate_kind (e->ts.type, e->ts.kind, false); + result = gfc_constant_result (BT_INTEGER, e->ts.kind, &e->where); + mpz_set_ui (result->value.integer, gfc_integer_kinds[i].bit_size); + + return result; +} + + +gfc_expr * +gfc_simplify_btest (gfc_expr *e, gfc_expr *bit) +{ + int b; + + if (e->expr_type != EXPR_CONSTANT || bit->expr_type != EXPR_CONSTANT) + return NULL; + + if (gfc_extract_int (bit, &b) != NULL || b < 0) + return gfc_logical_expr (0, &e->where); + + return gfc_logical_expr (mpz_tstbit (e->value.integer, b), &e->where); +} + + +gfc_expr * +gfc_simplify_ceiling (gfc_expr *e, gfc_expr *k) +{ + gfc_expr *ceil, *result; + int kind; + + kind = get_kind (BT_INTEGER, k, "CEILING", gfc_default_integer_kind); + if (kind == -1) + return &gfc_bad_expr; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_INTEGER, kind, &e->where); + + ceil = gfc_copy_expr (e); + + mpfr_ceil (ceil->value.real, e->value.real); + gfc_mpfr_to_mpz (result->value.integer, ceil->value.real, &e->where); + + gfc_free_expr (ceil); + + return range_check (result, "CEILING"); +} + + +gfc_expr * +gfc_simplify_char (gfc_expr *e, gfc_expr *k) +{ + return simplify_achar_char (e, k, "CHAR", false); +} + + +/* Common subroutine for simplifying CMPLX and DCMPLX. */ + +static gfc_expr * +simplify_cmplx (const char *name, gfc_expr *x, gfc_expr *y, int kind) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_COMPLEX, kind, &x->where); + + mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE); + + switch (x->ts.type) + { + case BT_INTEGER: + if (!x->is_boz) + mpfr_set_z (result->value.complex.r, x->value.integer, GFC_RND_MODE); + break; + + case BT_REAL: + mpfr_set (result->value.complex.r, x->value.real, GFC_RND_MODE); + break; + + case BT_COMPLEX: + mpfr_set (result->value.complex.r, x->value.complex.r, GFC_RND_MODE); + mpfr_set (result->value.complex.i, x->value.complex.i, GFC_RND_MODE); + break; + + default: + gfc_internal_error ("gfc_simplify_dcmplx(): Bad type (x)"); + } + + if (y != NULL) + { + switch (y->ts.type) + { + case BT_INTEGER: + if (!y->is_boz) + mpfr_set_z (result->value.complex.i, y->value.integer, + GFC_RND_MODE); + break; + + case BT_REAL: + mpfr_set (result->value.complex.i, y->value.real, GFC_RND_MODE); + break; + + default: + gfc_internal_error ("gfc_simplify_dcmplx(): Bad type (y)"); + } + } + + /* Handle BOZ. */ + if (x->is_boz) + { + gfc_typespec ts; + gfc_clear_ts (&ts); + ts.kind = result->ts.kind; + ts.type = BT_REAL; + if (!gfc_convert_boz (x, &ts)) + return &gfc_bad_expr; + mpfr_set (result->value.complex.r, x->value.real, GFC_RND_MODE); + } + + if (y && y->is_boz) + { + gfc_typespec ts; + gfc_clear_ts (&ts); + ts.kind = result->ts.kind; + ts.type = BT_REAL; + if (!gfc_convert_boz (y, &ts)) + return &gfc_bad_expr; + mpfr_set (result->value.complex.i, y->value.real, GFC_RND_MODE); + } + + return range_check (result, name); +} + + +/* Function called when we won't simplify an expression like CMPLX (or + COMPLEX or DCMPLX) but still want to convert BOZ arguments. */ + +static gfc_expr * +only_convert_cmplx_boz (gfc_expr *x, gfc_expr *y, int kind) +{ + gfc_typespec ts; + gfc_clear_ts (&ts); + ts.type = BT_REAL; + ts.kind = kind; + + if (x->is_boz && !gfc_convert_boz (x, &ts)) + return &gfc_bad_expr; + + if (y && y->is_boz && !gfc_convert_boz (y, &ts)) + return &gfc_bad_expr; + + return NULL; +} + + +gfc_expr * +gfc_simplify_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *k) +{ + int kind; + + kind = get_kind (BT_REAL, k, "CMPLX", gfc_default_real_kind); + if (kind == -1) + return &gfc_bad_expr; + + if (x->expr_type != EXPR_CONSTANT + || (y != NULL && y->expr_type != EXPR_CONSTANT)) + return only_convert_cmplx_boz (x, y, kind); + + return simplify_cmplx ("CMPLX", x, y, kind); +} + + +gfc_expr * +gfc_simplify_complex (gfc_expr *x, gfc_expr *y) +{ + int kind; + + if (x->ts.type == BT_INTEGER) + { + if (y->ts.type == BT_INTEGER) + kind = gfc_default_real_kind; + else + kind = y->ts.kind; + } + else + { + if (y->ts.type == BT_REAL) + kind = (x->ts.kind > y->ts.kind) ? x->ts.kind : y->ts.kind; + else + kind = x->ts.kind; + } + + if (x->expr_type != EXPR_CONSTANT + || (y != NULL && y->expr_type != EXPR_CONSTANT)) + return only_convert_cmplx_boz (x, y, kind); + + return simplify_cmplx ("COMPLEX", x, y, kind); +} + + +gfc_expr * +gfc_simplify_conjg (gfc_expr *e) +{ + gfc_expr *result; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_copy_expr (e); + mpfr_neg (result->value.complex.i, result->value.complex.i, GFC_RND_MODE); + + return range_check (result, "CONJG"); +} + + +gfc_expr * +gfc_simplify_cos (gfc_expr *x) +{ + gfc_expr *result; + mpfr_t xp, xq; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + switch (x->ts.type) + { + case BT_REAL: + mpfr_cos (result->value.real, x->value.real, GFC_RND_MODE); + break; + case BT_COMPLEX: + gfc_set_model_kind (x->ts.kind); + mpfr_init (xp); + mpfr_init (xq); + + mpfr_cos (xp, x->value.complex.r, GFC_RND_MODE); + mpfr_cosh (xq, x->value.complex.i, GFC_RND_MODE); + mpfr_mul (result->value.complex.r, xp, xq, GFC_RND_MODE); + + mpfr_sin (xp, x->value.complex.r, GFC_RND_MODE); + mpfr_sinh (xq, x->value.complex.i, GFC_RND_MODE); + mpfr_mul (xp, xp, xq, GFC_RND_MODE); + mpfr_neg (result->value.complex.i, xp, GFC_RND_MODE ); + + mpfr_clears (xp, xq, NULL); + break; + default: + gfc_internal_error ("in gfc_simplify_cos(): Bad type"); + } + + return range_check (result, "COS"); + +} + + +gfc_expr * +gfc_simplify_cosh (gfc_expr *x) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_cosh (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "COSH"); +} + + +gfc_expr * +gfc_simplify_dcmplx (gfc_expr *x, gfc_expr *y) +{ + + if (x->expr_type != EXPR_CONSTANT + || (y != NULL && y->expr_type != EXPR_CONSTANT)) + return only_convert_cmplx_boz (x, y, gfc_default_double_kind); + + return simplify_cmplx ("DCMPLX", x, y, gfc_default_double_kind); +} + + +gfc_expr * +gfc_simplify_dble (gfc_expr *e) +{ + gfc_expr *result = NULL; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + switch (e->ts.type) + { + case BT_INTEGER: + if (!e->is_boz) + result = gfc_int2real (e, gfc_default_double_kind); + break; + + case BT_REAL: + result = gfc_real2real (e, gfc_default_double_kind); + break; + + case BT_COMPLEX: + result = gfc_complex2real (e, gfc_default_double_kind); + break; + + default: + gfc_internal_error ("gfc_simplify_dble(): bad type at %L", &e->where); + } + + if (e->ts.type == BT_INTEGER && e->is_boz) + { + gfc_typespec ts; + gfc_clear_ts (&ts); + ts.type = BT_REAL; + ts.kind = gfc_default_double_kind; + result = gfc_copy_expr (e); + if (!gfc_convert_boz (result, &ts)) + { + gfc_free_expr (result); + return &gfc_bad_expr; + } + } + + return range_check (result, "DBLE"); +} + + +gfc_expr * +gfc_simplify_digits (gfc_expr *x) +{ + int i, digits; + + i = gfc_validate_kind (x->ts.type, x->ts.kind, false); + switch (x->ts.type) + { + case BT_INTEGER: + digits = gfc_integer_kinds[i].digits; + break; + + case BT_REAL: + case BT_COMPLEX: + digits = gfc_real_kinds[i].digits; + break; + + default: + gcc_unreachable (); + } + + return gfc_int_expr (digits); +} + + +gfc_expr * +gfc_simplify_dim (gfc_expr *x, gfc_expr *y) +{ + gfc_expr *result; + int kind; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + kind = x->ts.kind > y->ts.kind ? x->ts.kind : y->ts.kind; + result = gfc_constant_result (x->ts.type, kind, &x->where); + + switch (x->ts.type) + { + case BT_INTEGER: + if (mpz_cmp (x->value.integer, y->value.integer) > 0) + mpz_sub (result->value.integer, x->value.integer, y->value.integer); + else + mpz_set_ui (result->value.integer, 0); + + break; + + case BT_REAL: + if (mpfr_cmp (x->value.real, y->value.real) > 0) + mpfr_sub (result->value.real, x->value.real, y->value.real, + GFC_RND_MODE); + else + mpfr_set_ui (result->value.real, 0, GFC_RND_MODE); + + break; + + default: + gfc_internal_error ("gfc_simplify_dim(): Bad type"); + } + + return range_check (result, "DIM"); +} + + +gfc_expr * +gfc_simplify_dprod (gfc_expr *x, gfc_expr *y) +{ + gfc_expr *a1, *a2, *result; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_REAL, gfc_default_double_kind, &x->where); + + a1 = gfc_real2real (x, gfc_default_double_kind); + a2 = gfc_real2real (y, gfc_default_double_kind); + + mpfr_mul (result->value.real, a1->value.real, a2->value.real, GFC_RND_MODE); + + gfc_free_expr (a1); + gfc_free_expr (a2); + + return range_check (result, "DPROD"); +} + + +gfc_expr * +gfc_simplify_erf (gfc_expr *x) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_erf (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "ERF"); +} + + +gfc_expr * +gfc_simplify_erfc (gfc_expr *x) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_erfc (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "ERFC"); +} + + +gfc_expr * +gfc_simplify_epsilon (gfc_expr *e) +{ + gfc_expr *result; + int i; + + i = gfc_validate_kind (e->ts.type, e->ts.kind, false); + + result = gfc_constant_result (BT_REAL, e->ts.kind, &e->where); + + mpfr_set (result->value.real, gfc_real_kinds[i].epsilon, GFC_RND_MODE); + + return range_check (result, "EPSILON"); +} + + +gfc_expr * +gfc_simplify_exp (gfc_expr *x) +{ + gfc_expr *result; + mpfr_t xp, xq; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + switch (x->ts.type) + { + case BT_REAL: + mpfr_exp (result->value.real, x->value.real, GFC_RND_MODE); + break; + + case BT_COMPLEX: + gfc_set_model_kind (x->ts.kind); + mpfr_init (xp); + mpfr_init (xq); + mpfr_exp (xq, x->value.complex.r, GFC_RND_MODE); + mpfr_cos (xp, x->value.complex.i, GFC_RND_MODE); + mpfr_mul (result->value.complex.r, xq, xp, GFC_RND_MODE); + mpfr_sin (xp, x->value.complex.i, GFC_RND_MODE); + mpfr_mul (result->value.complex.i, xq, xp, GFC_RND_MODE); + mpfr_clears (xp, xq, NULL); + break; + + default: + gfc_internal_error ("in gfc_simplify_exp(): Bad type"); + } + + return range_check (result, "EXP"); +} + +gfc_expr * +gfc_simplify_exponent (gfc_expr *x) +{ + int i; + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_INTEGER, gfc_default_integer_kind, + &x->where); + + gfc_set_model (x->value.real); + + if (mpfr_sgn (x->value.real) == 0) + { + mpz_set_ui (result->value.integer, 0); + return result; + } + + i = (int) mpfr_get_exp (x->value.real); + mpz_set_si (result->value.integer, i); + + return range_check (result, "EXPONENT"); +} + + +gfc_expr * +gfc_simplify_float (gfc_expr *a) +{ + gfc_expr *result; + + if (a->expr_type != EXPR_CONSTANT) + return NULL; + + if (a->is_boz) + { + gfc_typespec ts; + gfc_clear_ts (&ts); + + ts.type = BT_REAL; + ts.kind = gfc_default_real_kind; + + result = gfc_copy_expr (a); + if (!gfc_convert_boz (result, &ts)) + { + gfc_free_expr (result); + return &gfc_bad_expr; + } + } + else + result = gfc_int2real (a, gfc_default_real_kind); + return range_check (result, "FLOAT"); +} + + +gfc_expr * +gfc_simplify_floor (gfc_expr *e, gfc_expr *k) +{ + gfc_expr *result; + mpfr_t floor; + int kind; + + kind = get_kind (BT_INTEGER, k, "FLOOR", gfc_default_integer_kind); + if (kind == -1) + gfc_internal_error ("gfc_simplify_floor(): Bad kind"); + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_INTEGER, kind, &e->where); + + gfc_set_model_kind (kind); + mpfr_init (floor); + mpfr_floor (floor, e->value.real); + + gfc_mpfr_to_mpz (result->value.integer, floor, &e->where); + + mpfr_clear (floor); + + return range_check (result, "FLOOR"); +} + + +gfc_expr * +gfc_simplify_fraction (gfc_expr *x) +{ + gfc_expr *result; + mpfr_t absv, exp, pow2; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_REAL, x->ts.kind, &x->where); + + if (mpfr_sgn (x->value.real) == 0) + { + mpfr_set_ui (result->value.real, 0, GFC_RND_MODE); + return result; + } + + gfc_set_model_kind (x->ts.kind); + mpfr_init (exp); + mpfr_init (absv); + mpfr_init (pow2); + + mpfr_abs (absv, x->value.real, GFC_RND_MODE); + mpfr_log2 (exp, absv, GFC_RND_MODE); + + mpfr_trunc (exp, exp); + mpfr_add_ui (exp, exp, 1, GFC_RND_MODE); + + mpfr_ui_pow (pow2, 2, exp, GFC_RND_MODE); + + mpfr_div (result->value.real, absv, pow2, GFC_RND_MODE); + + mpfr_clears (exp, absv, pow2, NULL); + + return range_check (result, "FRACTION"); +} + + +gfc_expr * +gfc_simplify_gamma (gfc_expr *x) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_gamma (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "GAMMA"); +} + + +gfc_expr * +gfc_simplify_huge (gfc_expr *e) +{ + gfc_expr *result; + int i; + + i = gfc_validate_kind (e->ts.type, e->ts.kind, false); + + result = gfc_constant_result (e->ts.type, e->ts.kind, &e->where); + + switch (e->ts.type) + { + case BT_INTEGER: + mpz_set (result->value.integer, gfc_integer_kinds[i].huge); + break; + + case BT_REAL: + mpfr_set (result->value.real, gfc_real_kinds[i].huge, GFC_RND_MODE); + break; + + default: + gcc_unreachable (); + } + + return result; +} + + +gfc_expr * +gfc_simplify_hypot (gfc_expr *x, gfc_expr *y) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + mpfr_hypot (result->value.real, x->value.real, y->value.real, GFC_RND_MODE); + return range_check (result, "HYPOT"); +} + + +/* We use the processor's collating sequence, because all + systems that gfortran currently works on are ASCII. */ + +gfc_expr * +gfc_simplify_iachar (gfc_expr *e, gfc_expr *kind) +{ + gfc_expr *result; + gfc_char_t index; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + if (e->value.character.length != 1) + { + gfc_error ("Argument of IACHAR at %L must be of length one", &e->where); + return &gfc_bad_expr; + } + + index = e->value.character.string[0]; + + if (gfc_option.warn_surprising && index > 127) + gfc_warning ("Argument of IACHAR function at %L outside of range 0..127", + &e->where); + + if ((result = int_expr_with_kind (index, kind, "IACHAR")) == NULL) + return &gfc_bad_expr; + + result->where = e->where; + + return range_check (result, "IACHAR"); +} + + +gfc_expr * +gfc_simplify_iand (gfc_expr *x, gfc_expr *y) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_INTEGER, x->ts.kind, &x->where); + + mpz_and (result->value.integer, x->value.integer, y->value.integer); + + return range_check (result, "IAND"); +} + + +gfc_expr * +gfc_simplify_ibclr (gfc_expr *x, gfc_expr *y) +{ + gfc_expr *result; + int k, pos; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + if (gfc_extract_int (y, &pos) != NULL || pos < 0) + { + gfc_error ("Invalid second argument of IBCLR at %L", &y->where); + return &gfc_bad_expr; + } + + k = gfc_validate_kind (x->ts.type, x->ts.kind, false); + + if (pos >= gfc_integer_kinds[k].bit_size) + { + gfc_error ("Second argument of IBCLR exceeds bit size at %L", + &y->where); + return &gfc_bad_expr; + } + + result = gfc_copy_expr (x); + + convert_mpz_to_unsigned (result->value.integer, + gfc_integer_kinds[k].bit_size); + + mpz_clrbit (result->value.integer, pos); + + convert_mpz_to_signed (result->value.integer, + gfc_integer_kinds[k].bit_size); + + return result; +} + + +gfc_expr * +gfc_simplify_ibits (gfc_expr *x, gfc_expr *y, gfc_expr *z) +{ + gfc_expr *result; + int pos, len; + int i, k, bitsize; + int *bits; + + if (x->expr_type != EXPR_CONSTANT + || y->expr_type != EXPR_CONSTANT + || z->expr_type != EXPR_CONSTANT) + return NULL; + + if (gfc_extract_int (y, &pos) != NULL || pos < 0) + { + gfc_error ("Invalid second argument of IBITS at %L", &y->where); + return &gfc_bad_expr; + } + + if (gfc_extract_int (z, &len) != NULL || len < 0) + { + gfc_error ("Invalid third argument of IBITS at %L", &z->where); + return &gfc_bad_expr; + } + + k = gfc_validate_kind (BT_INTEGER, x->ts.kind, false); + + bitsize = gfc_integer_kinds[k].bit_size; + + if (pos + len > bitsize) + { + gfc_error ("Sum of second and third arguments of IBITS exceeds " + "bit size at %L", &y->where); + return &gfc_bad_expr; + } + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + convert_mpz_to_unsigned (result->value.integer, + gfc_integer_kinds[k].bit_size); + + bits = XCNEWVEC (int, bitsize); + + for (i = 0; i < bitsize; i++) + bits[i] = 0; + + for (i = 0; i < len; i++) + bits[i] = mpz_tstbit (x->value.integer, i + pos); + + for (i = 0; i < bitsize; i++) + { + if (bits[i] == 0) + mpz_clrbit (result->value.integer, i); + else if (bits[i] == 1) + mpz_setbit (result->value.integer, i); + else + gfc_internal_error ("IBITS: Bad bit"); + } + + gfc_free (bits); + + convert_mpz_to_signed (result->value.integer, + gfc_integer_kinds[k].bit_size); + + return result; +} + + +gfc_expr * +gfc_simplify_ibset (gfc_expr *x, gfc_expr *y) +{ + gfc_expr *result; + int k, pos; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + if (gfc_extract_int (y, &pos) != NULL || pos < 0) + { + gfc_error ("Invalid second argument of IBSET at %L", &y->where); + return &gfc_bad_expr; + } + + k = gfc_validate_kind (x->ts.type, x->ts.kind, false); + + if (pos >= gfc_integer_kinds[k].bit_size) + { + gfc_error ("Second argument of IBSET exceeds bit size at %L", + &y->where); + return &gfc_bad_expr; + } + + result = gfc_copy_expr (x); + + convert_mpz_to_unsigned (result->value.integer, + gfc_integer_kinds[k].bit_size); + + mpz_setbit (result->value.integer, pos); + + convert_mpz_to_signed (result->value.integer, + gfc_integer_kinds[k].bit_size); + + return result; +} + + +gfc_expr * +gfc_simplify_ichar (gfc_expr *e, gfc_expr *kind) +{ + gfc_expr *result; + gfc_char_t index; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + if (e->value.character.length != 1) + { + gfc_error ("Argument of ICHAR at %L must be of length one", &e->where); + return &gfc_bad_expr; + } + + index = e->value.character.string[0]; + + if ((result = int_expr_with_kind (index, kind, "ICHAR")) == NULL) + return &gfc_bad_expr; + + result->where = e->where; + return range_check (result, "ICHAR"); +} + + +gfc_expr * +gfc_simplify_ieor (gfc_expr *x, gfc_expr *y) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_INTEGER, x->ts.kind, &x->where); + + mpz_xor (result->value.integer, x->value.integer, y->value.integer); + + return range_check (result, "IEOR"); +} + + +gfc_expr * +gfc_simplify_index (gfc_expr *x, gfc_expr *y, gfc_expr *b, gfc_expr *kind) +{ + gfc_expr *result; + int back, len, lensub; + int i, j, k, count, index = 0, start; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT + || ( b != NULL && b->expr_type != EXPR_CONSTANT)) + return NULL; + + if (b != NULL && b->value.logical != 0) + back = 1; + else + back = 0; + + k = get_kind (BT_INTEGER, kind, "INDEX", gfc_default_integer_kind); + if (k == -1) + return &gfc_bad_expr; + + result = gfc_constant_result (BT_INTEGER, k, &x->where); + + len = x->value.character.length; + lensub = y->value.character.length; + + if (len < lensub) + { + mpz_set_si (result->value.integer, 0); + return result; + } + + if (back == 0) + { + if (lensub == 0) + { + mpz_set_si (result->value.integer, 1); + return result; + } + else if (lensub == 1) + { + for (i = 0; i < len; i++) + { + for (j = 0; j < lensub; j++) + { + if (y->value.character.string[j] + == x->value.character.string[i]) + { + index = i + 1; + goto done; + } + } + } + } + else + { + for (i = 0; i < len; i++) + { + for (j = 0; j < lensub; j++) + { + if (y->value.character.string[j] + == x->value.character.string[i]) + { + start = i; + count = 0; + + for (k = 0; k < lensub; k++) + { + if (y->value.character.string[k] + == x->value.character.string[k + start]) + count++; + } + + if (count == lensub) + { + index = start + 1; + goto done; + } + } + } + } + } + + } + else + { + if (lensub == 0) + { + mpz_set_si (result->value.integer, len + 1); + return result; + } + else if (lensub == 1) + { + for (i = 0; i < len; i++) + { + for (j = 0; j < lensub; j++) + { + if (y->value.character.string[j] + == x->value.character.string[len - i]) + { + index = len - i + 1; + goto done; + } + } + } + } + else + { + for (i = 0; i < len; i++) + { + for (j = 0; j < lensub; j++) + { + if (y->value.character.string[j] + == x->value.character.string[len - i]) + { + start = len - i; + if (start <= len - lensub) + { + count = 0; + for (k = 0; k < lensub; k++) + if (y->value.character.string[k] + == x->value.character.string[k + start]) + count++; + + if (count == lensub) + { + index = start + 1; + goto done; + } + } + else + { + continue; + } + } + } + } + } + } + +done: + mpz_set_si (result->value.integer, index); + return range_check (result, "INDEX"); +} + + +gfc_expr * +gfc_simplify_int (gfc_expr *e, gfc_expr *k) +{ + gfc_expr *result = NULL; + int kind; + + kind = get_kind (BT_INTEGER, k, "INT", gfc_default_integer_kind); + if (kind == -1) + return &gfc_bad_expr; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + switch (e->ts.type) + { + case BT_INTEGER: + result = gfc_int2int (e, kind); + break; + + case BT_REAL: + result = gfc_real2int (e, kind); + break; + + case BT_COMPLEX: + result = gfc_complex2int (e, kind); + break; + + default: + gfc_error ("Argument of INT at %L is not a valid type", &e->where); + return &gfc_bad_expr; + } + + return range_check (result, "INT"); +} + + +static gfc_expr * +simplify_intconv (gfc_expr *e, int kind, const char *name) +{ + gfc_expr *result = NULL; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + switch (e->ts.type) + { + case BT_INTEGER: + result = gfc_int2int (e, kind); + break; + + case BT_REAL: + result = gfc_real2int (e, kind); + break; + + case BT_COMPLEX: + result = gfc_complex2int (e, kind); + break; + + default: + gfc_error ("Argument of %s at %L is not a valid type", name, &e->where); + return &gfc_bad_expr; + } + + return range_check (result, name); +} + + +gfc_expr * +gfc_simplify_int2 (gfc_expr *e) +{ + return simplify_intconv (e, 2, "INT2"); +} + + +gfc_expr * +gfc_simplify_int8 (gfc_expr *e) +{ + return simplify_intconv (e, 8, "INT8"); +} + + +gfc_expr * +gfc_simplify_long (gfc_expr *e) +{ + return simplify_intconv (e, 4, "LONG"); +} + + +gfc_expr * +gfc_simplify_ifix (gfc_expr *e) +{ + gfc_expr *rtrunc, *result; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_INTEGER, gfc_default_integer_kind, + &e->where); + + rtrunc = gfc_copy_expr (e); + + mpfr_trunc (rtrunc->value.real, e->value.real); + gfc_mpfr_to_mpz (result->value.integer, rtrunc->value.real, &e->where); + + gfc_free_expr (rtrunc); + return range_check (result, "IFIX"); +} + + +gfc_expr * +gfc_simplify_idint (gfc_expr *e) +{ + gfc_expr *rtrunc, *result; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_INTEGER, gfc_default_integer_kind, + &e->where); + + rtrunc = gfc_copy_expr (e); + + mpfr_trunc (rtrunc->value.real, e->value.real); + gfc_mpfr_to_mpz (result->value.integer, rtrunc->value.real, &e->where); + + gfc_free_expr (rtrunc); + return range_check (result, "IDINT"); +} + + +gfc_expr * +gfc_simplify_ior (gfc_expr *x, gfc_expr *y) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_INTEGER, x->ts.kind, &x->where); + + mpz_ior (result->value.integer, x->value.integer, y->value.integer); + return range_check (result, "IOR"); +} + + +gfc_expr * +gfc_simplify_ishft (gfc_expr *e, gfc_expr *s) +{ + gfc_expr *result; + int shift, ashift, isize, k, *bits, i; + + if (e->expr_type != EXPR_CONSTANT || s->expr_type != EXPR_CONSTANT) + return NULL; + + if (gfc_extract_int (s, &shift) != NULL) + { + gfc_error ("Invalid second argument of ISHFT at %L", &s->where); + return &gfc_bad_expr; + } + + k = gfc_validate_kind (BT_INTEGER, e->ts.kind, false); + + isize = gfc_integer_kinds[k].bit_size; + + if (shift >= 0) + ashift = shift; + else + ashift = -shift; + + if (ashift > isize) + { + gfc_error ("Magnitude of second argument of ISHFT exceeds bit size " + "at %L", &s->where); + return &gfc_bad_expr; + } + + result = gfc_constant_result (e->ts.type, e->ts.kind, &e->where); + + if (shift == 0) + { + mpz_set (result->value.integer, e->value.integer); + return range_check (result, "ISHFT"); + } + + bits = XCNEWVEC (int, isize); + + for (i = 0; i < isize; i++) + bits[i] = mpz_tstbit (e->value.integer, i); + + if (shift > 0) + { + for (i = 0; i < shift; i++) + mpz_clrbit (result->value.integer, i); + + for (i = 0; i < isize - shift; i++) + { + if (bits[i] == 0) + mpz_clrbit (result->value.integer, i + shift); + else + mpz_setbit (result->value.integer, i + shift); + } + } + else + { + for (i = isize - 1; i >= isize - ashift; i--) + mpz_clrbit (result->value.integer, i); + + for (i = isize - 1; i >= ashift; i--) + { + if (bits[i] == 0) + mpz_clrbit (result->value.integer, i - ashift); + else + mpz_setbit (result->value.integer, i - ashift); + } + } + + convert_mpz_to_signed (result->value.integer, isize); + + gfc_free (bits); + return result; +} + + +gfc_expr * +gfc_simplify_ishftc (gfc_expr *e, gfc_expr *s, gfc_expr *sz) +{ + gfc_expr *result; + int shift, ashift, isize, ssize, delta, k; + int i, *bits; + + if (e->expr_type != EXPR_CONSTANT || s->expr_type != EXPR_CONSTANT) + return NULL; + + if (gfc_extract_int (s, &shift) != NULL) + { + gfc_error ("Invalid second argument of ISHFTC at %L", &s->where); + return &gfc_bad_expr; + } + + k = gfc_validate_kind (e->ts.type, e->ts.kind, false); + isize = gfc_integer_kinds[k].bit_size; + + if (sz != NULL) + { + if (sz->expr_type != EXPR_CONSTANT) + return NULL; + + if (gfc_extract_int (sz, &ssize) != NULL || ssize <= 0) + { + gfc_error ("Invalid third argument of ISHFTC at %L", &sz->where); + return &gfc_bad_expr; + } + + if (ssize > isize) + { + gfc_error ("Magnitude of third argument of ISHFTC exceeds " + "BIT_SIZE of first argument at %L", &s->where); + return &gfc_bad_expr; + } + } + else + ssize = isize; + + if (shift >= 0) + ashift = shift; + else + ashift = -shift; + + if (ashift > ssize) + { + if (sz != NULL) + gfc_error ("Magnitude of second argument of ISHFTC exceeds " + "third argument at %L", &s->where); + else + gfc_error ("Magnitude of second argument of ISHFTC exceeds " + "BIT_SIZE of first argument at %L", &s->where); + return &gfc_bad_expr; + } + + result = gfc_constant_result (e->ts.type, e->ts.kind, &e->where); + + mpz_set (result->value.integer, e->value.integer); + + if (shift == 0) + return result; + + convert_mpz_to_unsigned (result->value.integer, isize); + + bits = XCNEWVEC (int, ssize); + + for (i = 0; i < ssize; i++) + bits[i] = mpz_tstbit (e->value.integer, i); + + delta = ssize - ashift; + + if (shift > 0) + { + for (i = 0; i < delta; i++) + { + if (bits[i] == 0) + mpz_clrbit (result->value.integer, i + shift); + else + mpz_setbit (result->value.integer, i + shift); + } + + for (i = delta; i < ssize; i++) + { + if (bits[i] == 0) + mpz_clrbit (result->value.integer, i - delta); + else + mpz_setbit (result->value.integer, i - delta); + } + } + else + { + for (i = 0; i < ashift; i++) + { + if (bits[i] == 0) + mpz_clrbit (result->value.integer, i + delta); + else + mpz_setbit (result->value.integer, i + delta); + } + + for (i = ashift; i < ssize; i++) + { + if (bits[i] == 0) + mpz_clrbit (result->value.integer, i + shift); + else + mpz_setbit (result->value.integer, i + shift); + } + } + + convert_mpz_to_signed (result->value.integer, isize); + + gfc_free (bits); + return result; +} + + +gfc_expr * +gfc_simplify_kind (gfc_expr *e) +{ + + if (e->ts.type == BT_DERIVED) + { + gfc_error ("Argument of KIND at %L is a DERIVED type", &e->where); + return &gfc_bad_expr; + } + + return gfc_int_expr (e->ts.kind); +} + + +static gfc_expr * +simplify_bound_dim (gfc_expr *array, gfc_expr *kind, int d, int upper, + gfc_array_spec *as, gfc_ref *ref) +{ + gfc_expr *l, *u, *result; + int k; + + /* The last dimension of an assumed-size array is special. */ + if (d == as->rank && as->type == AS_ASSUMED_SIZE && !upper) + { + if (as->lower[d-1]->expr_type == EXPR_CONSTANT) + return gfc_copy_expr (as->lower[d-1]); + else + return NULL; + } + + k = get_kind (BT_INTEGER, kind, upper ? "UBOUND" : "LBOUND", + gfc_default_integer_kind); + if (k == -1) + return &gfc_bad_expr; + + result = gfc_constant_result (BT_INTEGER, k, &array->where); + + + /* Then, we need to know the extent of the given dimension. */ + if (ref->u.ar.type == AR_FULL) + { + l = as->lower[d-1]; + u = as->upper[d-1]; + + if (l->expr_type != EXPR_CONSTANT || u->expr_type != EXPR_CONSTANT) + return NULL; + + if (mpz_cmp (l->value.integer, u->value.integer) > 0) + { + /* Zero extent. */ + if (upper) + mpz_set_si (result->value.integer, 0); + else + mpz_set_si (result->value.integer, 1); + } + else + { + /* Nonzero extent. */ + if (upper) + mpz_set (result->value.integer, u->value.integer); + else + mpz_set (result->value.integer, l->value.integer); + } + } + else + { + if (upper) + { + if (gfc_ref_dimen_size (&ref->u.ar, d-1, &result->value.integer) + != SUCCESS) + return NULL; + } + else + mpz_set_si (result->value.integer, (long int) 1); + } + + return range_check (result, upper ? "UBOUND" : "LBOUND"); +} + + +static gfc_expr * +simplify_bound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind, int upper) +{ + gfc_ref *ref; + gfc_array_spec *as; + int d; + + if (array->expr_type != EXPR_VARIABLE) + return NULL; + + /* Follow any component references. */ + as = array->symtree->n.sym->as; + for (ref = array->ref; ref; ref = ref->next) + { + switch (ref->type) + { + case REF_ARRAY: + switch (ref->u.ar.type) + { + case AR_ELEMENT: + as = NULL; + continue; + + case AR_FULL: + /* We're done because 'as' has already been set in the + previous iteration. */ + if (!ref->next) + goto done; + + /* Fall through. */ + + case AR_UNKNOWN: + return NULL; + + case AR_SECTION: + as = ref->u.ar.as; + goto done; + } + + gcc_unreachable (); + + case REF_COMPONENT: + as = ref->u.c.component->as; + continue; + + case REF_SUBSTRING: + continue; + } + } + + gcc_unreachable (); + + done: + + if (as->type == AS_DEFERRED || as->type == AS_ASSUMED_SHAPE) + return NULL; + + if (dim == NULL) + { + /* Multi-dimensional bounds. */ + gfc_expr *bounds[GFC_MAX_DIMENSIONS]; + gfc_expr *e; + gfc_constructor *head, *tail; + int k; + + /* UBOUND(ARRAY) is not valid for an assumed-size array. */ + if (upper && as->type == AS_ASSUMED_SIZE) + { + /* An error message will be emitted in + check_assumed_size_reference (resolve.c). */ + return &gfc_bad_expr; + } + + /* Simplify the bounds for each dimension. */ + for (d = 0; d < array->rank; d++) + { + bounds[d] = simplify_bound_dim (array, kind, d + 1, upper, as, ref); + if (bounds[d] == NULL || bounds[d] == &gfc_bad_expr) + { + int j; + + for (j = 0; j < d; j++) + gfc_free_expr (bounds[j]); + return bounds[d]; + } + } + + /* Allocate the result expression. */ + e = gfc_get_expr (); + e->where = array->where; + e->expr_type = EXPR_ARRAY; + e->ts.type = BT_INTEGER; + k = get_kind (BT_INTEGER, kind, upper ? "UBOUND" : "LBOUND", + gfc_default_integer_kind); + if (k == -1) + { + gfc_free_expr (e); + return &gfc_bad_expr; + } + e->ts.kind = k; + + /* The result is a rank 1 array; its size is the rank of the first + argument to {L,U}BOUND. */ + e->rank = 1; + e->shape = gfc_get_shape (1); + mpz_init_set_ui (e->shape[0], array->rank); + + /* Create the constructor for this array. */ + head = tail = NULL; + for (d = 0; d < array->rank; d++) + { + /* Get a new constructor element. */ + if (head == NULL) + head = tail = gfc_get_constructor (); + else + { + tail->next = gfc_get_constructor (); + tail = tail->next; + } + + tail->where = e->where; + tail->expr = bounds[d]; + } + e->value.constructor = head; + + return e; + } + else + { + /* A DIM argument is specified. */ + if (dim->expr_type != EXPR_CONSTANT) + return NULL; + + d = mpz_get_si (dim->value.integer); + + if (d < 1 || d > as->rank + || (d == as->rank && as->type == AS_ASSUMED_SIZE && upper)) + { + gfc_error ("DIM argument at %L is out of bounds", &dim->where); + return &gfc_bad_expr; + } + + return simplify_bound_dim (array, kind, d, upper, as, ref); + } +} + + +gfc_expr * +gfc_simplify_lbound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind) +{ + return simplify_bound (array, dim, kind, 0); +} + + +gfc_expr * +gfc_simplify_leadz (gfc_expr *e) +{ + gfc_expr *result; + unsigned long lz, bs; + int i; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + i = gfc_validate_kind (e->ts.type, e->ts.kind, false); + bs = gfc_integer_kinds[i].bit_size; + if (mpz_cmp_si (e->value.integer, 0) == 0) + lz = bs; + else + lz = bs - mpz_sizeinbase (e->value.integer, 2); + + result = gfc_constant_result (BT_INTEGER, gfc_default_integer_kind, &e->where); + mpz_set_ui (result->value.integer, lz); + + return result; +} + + +gfc_expr * +gfc_simplify_len (gfc_expr *e, gfc_expr *kind) +{ + gfc_expr *result; + int k = get_kind (BT_INTEGER, kind, "LEN", gfc_default_integer_kind); + + if (k == -1) + return &gfc_bad_expr; + + if (e->expr_type == EXPR_CONSTANT) + { + result = gfc_constant_result (BT_INTEGER, k, &e->where); + mpz_set_si (result->value.integer, e->value.character.length); + return range_check (result, "LEN"); + } + + if (e->ts.cl != NULL && e->ts.cl->length != NULL + && e->ts.cl->length->expr_type == EXPR_CONSTANT + && e->ts.cl->length->ts.type == BT_INTEGER) + { + result = gfc_constant_result (BT_INTEGER, k, &e->where); + mpz_set (result->value.integer, e->ts.cl->length->value.integer); + return range_check (result, "LEN"); + } + + return NULL; +} + + +gfc_expr * +gfc_simplify_len_trim (gfc_expr *e, gfc_expr *kind) +{ + gfc_expr *result; + int count, len, lentrim, i; + int k = get_kind (BT_INTEGER, kind, "LEN_TRIM", gfc_default_integer_kind); + + if (k == -1) + return &gfc_bad_expr; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_INTEGER, k, &e->where); + len = e->value.character.length; + + for (count = 0, i = 1; i <= len; i++) + if (e->value.character.string[len - i] == ' ') + count++; + else + break; + + lentrim = len - count; + + mpz_set_si (result->value.integer, lentrim); + return range_check (result, "LEN_TRIM"); +} + +gfc_expr * +gfc_simplify_lgamma (gfc_expr *x ATTRIBUTE_UNUSED) +{ + gfc_expr *result; + int sg; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_lgamma (result->value.real, &sg, x->value.real, GFC_RND_MODE); + + return range_check (result, "LGAMMA"); +} + + +gfc_expr * +gfc_simplify_lge (gfc_expr *a, gfc_expr *b) +{ + if (a->expr_type != EXPR_CONSTANT || b->expr_type != EXPR_CONSTANT) + return NULL; + + return gfc_logical_expr (gfc_compare_string (a, b) >= 0, &a->where); +} + + +gfc_expr * +gfc_simplify_lgt (gfc_expr *a, gfc_expr *b) +{ + if (a->expr_type != EXPR_CONSTANT || b->expr_type != EXPR_CONSTANT) + return NULL; + + return gfc_logical_expr (gfc_compare_string (a, b) > 0, + &a->where); +} + + +gfc_expr * +gfc_simplify_lle (gfc_expr *a, gfc_expr *b) +{ + if (a->expr_type != EXPR_CONSTANT || b->expr_type != EXPR_CONSTANT) + return NULL; + + return gfc_logical_expr (gfc_compare_string (a, b) <= 0, &a->where); +} + + +gfc_expr * +gfc_simplify_llt (gfc_expr *a, gfc_expr *b) +{ + if (a->expr_type != EXPR_CONSTANT || b->expr_type != EXPR_CONSTANT) + return NULL; + + return gfc_logical_expr (gfc_compare_string (a, b) < 0, &a->where); +} + + +gfc_expr * +gfc_simplify_log (gfc_expr *x) +{ + gfc_expr *result; + mpfr_t xr, xi; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + + switch (x->ts.type) + { + case BT_REAL: + if (mpfr_sgn (x->value.real) <= 0) + { + gfc_error ("Argument of LOG at %L cannot be less than or equal " + "to zero", &x->where); + gfc_free_expr (result); + return &gfc_bad_expr; + } + + mpfr_log (result->value.real, x->value.real, GFC_RND_MODE); + break; + + case BT_COMPLEX: + if ((mpfr_sgn (x->value.complex.r) == 0) + && (mpfr_sgn (x->value.complex.i) == 0)) + { + gfc_error ("Complex argument of LOG at %L cannot be zero", + &x->where); + gfc_free_expr (result); + return &gfc_bad_expr; + } + + gfc_set_model_kind (x->ts.kind); + mpfr_init (xr); + mpfr_init (xi); + + mpfr_atan2 (result->value.complex.i, x->value.complex.i, + x->value.complex.r, GFC_RND_MODE); + + mpfr_mul (xr, x->value.complex.r, x->value.complex.r, GFC_RND_MODE); + mpfr_mul (xi, x->value.complex.i, x->value.complex.i, GFC_RND_MODE); + mpfr_add (xr, xr, xi, GFC_RND_MODE); + mpfr_sqrt (xr, xr, GFC_RND_MODE); + mpfr_log (result->value.complex.r, xr, GFC_RND_MODE); + + mpfr_clears (xr, xi, NULL); + + break; + + default: + gfc_internal_error ("gfc_simplify_log: bad type"); + } + + return range_check (result, "LOG"); +} + + +gfc_expr * +gfc_simplify_log10 (gfc_expr *x) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + if (mpfr_sgn (x->value.real) <= 0) + { + gfc_error ("Argument of LOG10 at %L cannot be less than or equal " + "to zero", &x->where); + return &gfc_bad_expr; + } + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_log10 (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "LOG10"); +} + + +gfc_expr * +gfc_simplify_logical (gfc_expr *e, gfc_expr *k) +{ + gfc_expr *result; + int kind; + + kind = get_kind (BT_LOGICAL, k, "LOGICAL", gfc_default_logical_kind); + if (kind < 0) + return &gfc_bad_expr; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_LOGICAL, kind, &e->where); + + result->value.logical = e->value.logical; + + return result; +} + + +gfc_expr * +gfc_simplify_merge (gfc_expr *tsource, gfc_expr *fsource, gfc_expr *mask) +{ + if (tsource->expr_type != EXPR_CONSTANT + || fsource->expr_type != EXPR_CONSTANT + || mask->expr_type != EXPR_CONSTANT) + return NULL; + + return gfc_copy_expr (mask->value.logical ? tsource : fsource); +} + + +/* Selects bewteen current value and extremum for simplify_min_max + and simplify_minval_maxval. */ +static void +min_max_choose (gfc_expr *arg, gfc_expr *extremum, int sign) +{ + switch (arg->ts.type) + { + case BT_INTEGER: + if (mpz_cmp (arg->value.integer, + extremum->value.integer) * sign > 0) + mpz_set (extremum->value.integer, arg->value.integer); + break; + + case BT_REAL: + /* We need to use mpfr_min and mpfr_max to treat NaN properly. */ + if (sign > 0) + mpfr_max (extremum->value.real, extremum->value.real, + arg->value.real, GFC_RND_MODE); + else + mpfr_min (extremum->value.real, extremum->value.real, + arg->value.real, GFC_RND_MODE); + break; + + case BT_CHARACTER: +#define LENGTH(x) ((x)->value.character.length) +#define STRING(x) ((x)->value.character.string) + if (LENGTH(extremum) < LENGTH(arg)) + { + gfc_char_t *tmp = STRING(extremum); + + STRING(extremum) = gfc_get_wide_string (LENGTH(arg) + 1); + memcpy (STRING(extremum), tmp, + LENGTH(extremum) * sizeof (gfc_char_t)); + gfc_wide_memset (&STRING(extremum)[LENGTH(extremum)], ' ', + LENGTH(arg) - LENGTH(extremum)); + STRING(extremum)[LENGTH(arg)] = '\0'; /* For debugger */ + LENGTH(extremum) = LENGTH(arg); + gfc_free (tmp); + } + + if (gfc_compare_string (arg, extremum) * sign > 0) + { + gfc_free (STRING(extremum)); + STRING(extremum) = gfc_get_wide_string (LENGTH(extremum) + 1); + memcpy (STRING(extremum), STRING(arg), + LENGTH(arg) * sizeof (gfc_char_t)); + gfc_wide_memset (&STRING(extremum)[LENGTH(arg)], ' ', + LENGTH(extremum) - LENGTH(arg)); + STRING(extremum)[LENGTH(extremum)] = '\0'; /* For debugger */ + } +#undef LENGTH +#undef STRING + break; + + default: + gfc_internal_error ("simplify_min_max(): Bad type in arglist"); + } +} + + +/* This function is special since MAX() can take any number of + arguments. The simplified expression is a rewritten version of the + argument list containing at most one constant element. Other + constant elements are deleted. Because the argument list has + already been checked, this function always succeeds. sign is 1 for + MAX(), -1 for MIN(). */ + +static gfc_expr * +simplify_min_max (gfc_expr *expr, int sign) +{ + gfc_actual_arglist *arg, *last, *extremum; + gfc_intrinsic_sym * specific; + + last = NULL; + extremum = NULL; + specific = expr->value.function.isym; + + arg = expr->value.function.actual; + + for (; arg; last = arg, arg = arg->next) + { + if (arg->expr->expr_type != EXPR_CONSTANT) + continue; + + if (extremum == NULL) + { + extremum = arg; + continue; + } + + min_max_choose (arg->expr, extremum->expr, sign); + + /* Delete the extra constant argument. */ + if (last == NULL) + expr->value.function.actual = arg->next; + else + last->next = arg->next; + + arg->next = NULL; + gfc_free_actual_arglist (arg); + arg = last; + } + + /* If there is one value left, replace the function call with the + expression. */ + if (expr->value.function.actual->next != NULL) + return NULL; + + /* Convert to the correct type and kind. */ + if (expr->ts.type != BT_UNKNOWN) + return gfc_convert_constant (expr->value.function.actual->expr, + expr->ts.type, expr->ts.kind); + + if (specific->ts.type != BT_UNKNOWN) + return gfc_convert_constant (expr->value.function.actual->expr, + specific->ts.type, specific->ts.kind); + + return gfc_copy_expr (expr->value.function.actual->expr); +} + + +gfc_expr * +gfc_simplify_min (gfc_expr *e) +{ + return simplify_min_max (e, -1); +} + + +gfc_expr * +gfc_simplify_max (gfc_expr *e) +{ + return simplify_min_max (e, 1); +} + + +/* This is a simplified version of simplify_min_max to provide + simplification of minval and maxval for a vector. */ + +static gfc_expr * +simplify_minval_maxval (gfc_expr *expr, int sign) +{ + gfc_constructor *ctr, *extremum; + gfc_intrinsic_sym * specific; + + extremum = NULL; + specific = expr->value.function.isym; + + ctr = expr->value.constructor; + + for (; ctr; ctr = ctr->next) + { + if (ctr->expr->expr_type != EXPR_CONSTANT) + return NULL; + + if (extremum == NULL) + { + extremum = ctr; + continue; + } + + min_max_choose (ctr->expr, extremum->expr, sign); + } + + if (extremum == NULL) + return NULL; + + /* Convert to the correct type and kind. */ + if (expr->ts.type != BT_UNKNOWN) + return gfc_convert_constant (extremum->expr, + expr->ts.type, expr->ts.kind); + + if (specific->ts.type != BT_UNKNOWN) + return gfc_convert_constant (extremum->expr, + specific->ts.type, specific->ts.kind); + + return gfc_copy_expr (extremum->expr); +} + + +gfc_expr * +gfc_simplify_minval (gfc_expr *array, gfc_expr* dim, gfc_expr *mask) +{ + if (array->expr_type != EXPR_ARRAY || array->rank != 1 || dim || mask) + return NULL; + + return simplify_minval_maxval (array, -1); +} + + +gfc_expr * +gfc_simplify_maxval (gfc_expr *array, gfc_expr* dim, gfc_expr *mask) +{ + if (array->expr_type != EXPR_ARRAY || array->rank != 1 || dim || mask) + return NULL; + return simplify_minval_maxval (array, 1); +} + + +gfc_expr * +gfc_simplify_maxexponent (gfc_expr *x) +{ + gfc_expr *result; + int i; + + i = gfc_validate_kind (BT_REAL, x->ts.kind, false); + + result = gfc_int_expr (gfc_real_kinds[i].max_exponent); + result->where = x->where; + + return result; +} + + +gfc_expr * +gfc_simplify_minexponent (gfc_expr *x) +{ + gfc_expr *result; + int i; + + i = gfc_validate_kind (BT_REAL, x->ts.kind, false); + + result = gfc_int_expr (gfc_real_kinds[i].min_exponent); + result->where = x->where; + + return result; +} + + +gfc_expr * +gfc_simplify_mod (gfc_expr *a, gfc_expr *p) +{ + gfc_expr *result; + mpfr_t tmp; + int kind; + + if (a->expr_type != EXPR_CONSTANT || p->expr_type != EXPR_CONSTANT) + return NULL; + + kind = a->ts.kind > p->ts.kind ? a->ts.kind : p->ts.kind; + result = gfc_constant_result (a->ts.type, kind, &a->where); + + switch (a->ts.type) + { + case BT_INTEGER: + if (mpz_cmp_ui (p->value.integer, 0) == 0) + { + /* Result is processor-dependent. */ + gfc_error ("Second argument MOD at %L is zero", &a->where); + gfc_free_expr (result); + return &gfc_bad_expr; + } + mpz_tdiv_r (result->value.integer, a->value.integer, p->value.integer); + break; + + case BT_REAL: + if (mpfr_cmp_ui (p->value.real, 0) == 0) + { + /* Result is processor-dependent. */ + gfc_error ("Second argument of MOD at %L is zero", &p->where); + gfc_free_expr (result); + return &gfc_bad_expr; + } + + gfc_set_model_kind (kind); + mpfr_init (tmp); + mpfr_div (tmp, a->value.real, p->value.real, GFC_RND_MODE); + mpfr_trunc (tmp, tmp); + mpfr_mul (tmp, tmp, p->value.real, GFC_RND_MODE); + mpfr_sub (result->value.real, a->value.real, tmp, GFC_RND_MODE); + mpfr_clear (tmp); + break; + + default: + gfc_internal_error ("gfc_simplify_mod(): Bad arguments"); + } + + return range_check (result, "MOD"); +} + + +gfc_expr * +gfc_simplify_modulo (gfc_expr *a, gfc_expr *p) +{ + gfc_expr *result; + mpfr_t tmp; + int kind; + + if (a->expr_type != EXPR_CONSTANT || p->expr_type != EXPR_CONSTANT) + return NULL; + + kind = a->ts.kind > p->ts.kind ? a->ts.kind : p->ts.kind; + result = gfc_constant_result (a->ts.type, kind, &a->where); + + switch (a->ts.type) + { + case BT_INTEGER: + if (mpz_cmp_ui (p->value.integer, 0) == 0) + { + /* Result is processor-dependent. This processor just opts + to not handle it at all. */ + gfc_error ("Second argument of MODULO at %L is zero", &a->where); + gfc_free_expr (result); + return &gfc_bad_expr; + } + mpz_fdiv_r (result->value.integer, a->value.integer, p->value.integer); + + break; + + case BT_REAL: + if (mpfr_cmp_ui (p->value.real, 0) == 0) + { + /* Result is processor-dependent. */ + gfc_error ("Second argument of MODULO at %L is zero", &p->where); + gfc_free_expr (result); + return &gfc_bad_expr; + } + + gfc_set_model_kind (kind); + mpfr_init (tmp); + mpfr_div (tmp, a->value.real, p->value.real, GFC_RND_MODE); + mpfr_floor (tmp, tmp); + mpfr_mul (tmp, tmp, p->value.real, GFC_RND_MODE); + mpfr_sub (result->value.real, a->value.real, tmp, GFC_RND_MODE); + mpfr_clear (tmp); + break; + + default: + gfc_internal_error ("gfc_simplify_modulo(): Bad arguments"); + } + + return range_check (result, "MODULO"); +} + + +/* Exists for the sole purpose of consistency with other intrinsics. */ +gfc_expr * +gfc_simplify_mvbits (gfc_expr *f ATTRIBUTE_UNUSED, + gfc_expr *fp ATTRIBUTE_UNUSED, + gfc_expr *l ATTRIBUTE_UNUSED, + gfc_expr *to ATTRIBUTE_UNUSED, + gfc_expr *tp ATTRIBUTE_UNUSED) +{ + return NULL; +} + + +gfc_expr * +gfc_simplify_nearest (gfc_expr *x, gfc_expr *s) +{ + gfc_expr *result; + mp_exp_t emin, emax; + int kind; + + if (x->expr_type != EXPR_CONSTANT || s->expr_type != EXPR_CONSTANT) + return NULL; + + if (mpfr_sgn (s->value.real) == 0) + { + gfc_error ("Second argument of NEAREST at %L shall not be zero", + &s->where); + return &gfc_bad_expr; + } + + result = gfc_copy_expr (x); + + /* Save current values of emin and emax. */ + emin = mpfr_get_emin (); + emax = mpfr_get_emax (); + + /* Set emin and emax for the current model number. */ + kind = gfc_validate_kind (BT_REAL, x->ts.kind, 0); + mpfr_set_emin ((mp_exp_t) gfc_real_kinds[kind].min_exponent - + mpfr_get_prec(result->value.real) + 1); + mpfr_set_emax ((mp_exp_t) gfc_real_kinds[kind].max_exponent - 1); + mpfr_check_range (result->value.real, 0, GMP_RNDU); + + if (mpfr_sgn (s->value.real) > 0) + { + mpfr_nextabove (result->value.real); + mpfr_subnormalize (result->value.real, 0, GMP_RNDU); + } + else + { + mpfr_nextbelow (result->value.real); + mpfr_subnormalize (result->value.real, 0, GMP_RNDD); + } + + mpfr_set_emin (emin); + mpfr_set_emax (emax); + + /* Only NaN can occur. Do not use range check as it gives an + error for denormal numbers. */ + if (mpfr_nan_p (result->value.real) && gfc_option.flag_range_check) + { + gfc_error ("Result of NEAREST is NaN at %L", &result->where); + gfc_free_expr (result); + return &gfc_bad_expr; + } + + return result; +} + + +static gfc_expr * +simplify_nint (const char *name, gfc_expr *e, gfc_expr *k) +{ + gfc_expr *itrunc, *result; + int kind; + + kind = get_kind (BT_INTEGER, k, name, gfc_default_integer_kind); + if (kind == -1) + return &gfc_bad_expr; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_INTEGER, kind, &e->where); + + itrunc = gfc_copy_expr (e); + + mpfr_round (itrunc->value.real, e->value.real); + + gfc_mpfr_to_mpz (result->value.integer, itrunc->value.real, &e->where); + + gfc_free_expr (itrunc); + + return range_check (result, name); +} + + +gfc_expr * +gfc_simplify_new_line (gfc_expr *e) +{ + gfc_expr *result; + + result = gfc_constant_result (BT_CHARACTER, e->ts.kind, &e->where); + result->value.character.string = gfc_get_wide_string (2); + result->value.character.length = 1; + result->value.character.string[0] = '\n'; + result->value.character.string[1] = '\0'; /* For debugger */ + return result; +} + + +gfc_expr * +gfc_simplify_nint (gfc_expr *e, gfc_expr *k) +{ + return simplify_nint ("NINT", e, k); +} + + +gfc_expr * +gfc_simplify_idnint (gfc_expr *e) +{ + return simplify_nint ("IDNINT", e, NULL); +} + + +gfc_expr * +gfc_simplify_not (gfc_expr *e) +{ + gfc_expr *result; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (e->ts.type, e->ts.kind, &e->where); + + mpz_com (result->value.integer, e->value.integer); + + return range_check (result, "NOT"); +} + + +gfc_expr * +gfc_simplify_null (gfc_expr *mold) +{ + gfc_expr *result; + + if (mold == NULL) + { + result = gfc_get_expr (); + result->ts.type = BT_UNKNOWN; + } + else + result = gfc_copy_expr (mold); + result->expr_type = EXPR_NULL; + + return result; +} + + +gfc_expr * +gfc_simplify_or (gfc_expr *x, gfc_expr *y) +{ + gfc_expr *result; + int kind; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + kind = x->ts.kind > y->ts.kind ? x->ts.kind : y->ts.kind; + if (x->ts.type == BT_INTEGER) + { + result = gfc_constant_result (BT_INTEGER, kind, &x->where); + mpz_ior (result->value.integer, x->value.integer, y->value.integer); + return range_check (result, "OR"); + } + else /* BT_LOGICAL */ + { + result = gfc_constant_result (BT_LOGICAL, kind, &x->where); + result->value.logical = x->value.logical || y->value.logical; + return result; + } +} + + +gfc_expr * +gfc_simplify_precision (gfc_expr *e) +{ + gfc_expr *result; + int i; + + i = gfc_validate_kind (e->ts.type, e->ts.kind, false); + + result = gfc_int_expr (gfc_real_kinds[i].precision); + result->where = e->where; + + return result; +} + + +gfc_expr * +gfc_simplify_radix (gfc_expr *e) +{ + gfc_expr *result; + int i; + + i = gfc_validate_kind (e->ts.type, e->ts.kind, false); + switch (e->ts.type) + { + case BT_INTEGER: + i = gfc_integer_kinds[i].radix; + break; + + case BT_REAL: + i = gfc_real_kinds[i].radix; + break; + + default: + gcc_unreachable (); + } + + result = gfc_int_expr (i); + result->where = e->where; + + return result; +} + + +gfc_expr * +gfc_simplify_range (gfc_expr *e) +{ + gfc_expr *result; + int i; + long j; + + i = gfc_validate_kind (e->ts.type, e->ts.kind, false); + + switch (e->ts.type) + { + case BT_INTEGER: + j = gfc_integer_kinds[i].range; + break; + + case BT_REAL: + case BT_COMPLEX: + j = gfc_real_kinds[i].range; + break; + + default: + gcc_unreachable (); + } + + result = gfc_int_expr (j); + result->where = e->where; + + return result; +} + + +gfc_expr * +gfc_simplify_real (gfc_expr *e, gfc_expr *k) +{ + gfc_expr *result = NULL; + int kind; + + if (e->ts.type == BT_COMPLEX) + kind = get_kind (BT_REAL, k, "REAL", e->ts.kind); + else + kind = get_kind (BT_REAL, k, "REAL", gfc_default_real_kind); + + if (kind == -1) + return &gfc_bad_expr; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + switch (e->ts.type) + { + case BT_INTEGER: + if (!e->is_boz) + result = gfc_int2real (e, kind); + break; + + case BT_REAL: + result = gfc_real2real (e, kind); + break; + + case BT_COMPLEX: + result = gfc_complex2real (e, kind); + break; + + default: + gfc_internal_error ("bad type in REAL"); + /* Not reached */ + } + + if (e->ts.type == BT_INTEGER && e->is_boz) + { + gfc_typespec ts; + gfc_clear_ts (&ts); + ts.type = BT_REAL; + ts.kind = kind; + result = gfc_copy_expr (e); + if (!gfc_convert_boz (result, &ts)) + { + gfc_free_expr (result); + return &gfc_bad_expr; + } + } + + return range_check (result, "REAL"); +} + + +gfc_expr * +gfc_simplify_realpart (gfc_expr *e) +{ + gfc_expr *result; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_REAL, e->ts.kind, &e->where); + mpfr_set (result->value.real, e->value.complex.r, GFC_RND_MODE); + + return range_check (result, "REALPART"); +} + +gfc_expr * +gfc_simplify_repeat (gfc_expr *e, gfc_expr *n) +{ + gfc_expr *result; + int i, j, len, ncop, nlen; + mpz_t ncopies; + bool have_length = false; + + /* If NCOPIES isn't a constant, there's nothing we can do. */ + if (n->expr_type != EXPR_CONSTANT) + return NULL; + + /* If NCOPIES is negative, it's an error. */ + if (mpz_sgn (n->value.integer) < 0) + { + gfc_error ("Argument NCOPIES of REPEAT intrinsic is negative at %L", + &n->where); + return &gfc_bad_expr; + } + + /* If we don't know the character length, we can do no more. */ + if (e->ts.cl && e->ts.cl->length + && e->ts.cl->length->expr_type == EXPR_CONSTANT) + { + len = mpz_get_si (e->ts.cl->length->value.integer); + have_length = true; + } + else if (e->expr_type == EXPR_CONSTANT + && (e->ts.cl == NULL || e->ts.cl->length == NULL)) + { + len = e->value.character.length; + } + else + return NULL; + + /* If the source length is 0, any value of NCOPIES is valid + and everything behaves as if NCOPIES == 0. */ + mpz_init (ncopies); + if (len == 0) + mpz_set_ui (ncopies, 0); + else + mpz_set (ncopies, n->value.integer); + + /* Check that NCOPIES isn't too large. */ + if (len) + { + mpz_t max, mlen; + int i; + + /* Compute the maximum value allowed for NCOPIES: huge(cl) / len. */ + mpz_init (max); + i = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false); + + if (have_length) + { + mpz_tdiv_q (max, gfc_integer_kinds[i].huge, + e->ts.cl->length->value.integer); + } + else + { + mpz_init_set_si (mlen, len); + mpz_tdiv_q (max, gfc_integer_kinds[i].huge, mlen); + mpz_clear (mlen); + } + + /* The check itself. */ + if (mpz_cmp (ncopies, max) > 0) + { + mpz_clear (max); + mpz_clear (ncopies); + gfc_error ("Argument NCOPIES of REPEAT intrinsic is too large at %L", + &n->where); + return &gfc_bad_expr; + } + + mpz_clear (max); + } + mpz_clear (ncopies); + + /* For further simplification, we need the character string to be + constant. */ + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + if (len || + (e->ts.cl->length && + mpz_sgn (e->ts.cl->length->value.integer)) != 0) + { + const char *res = gfc_extract_int (n, &ncop); + gcc_assert (res == NULL); + } + else + ncop = 0; + + len = e->value.character.length; + nlen = ncop * len; + + result = gfc_constant_result (BT_CHARACTER, e->ts.kind, &e->where); + + if (ncop == 0) + { + result->value.character.string = gfc_get_wide_string (1); + result->value.character.length = 0; + result->value.character.string[0] = '\0'; + return result; + } + + result->value.character.length = nlen; + result->value.character.string = gfc_get_wide_string (nlen + 1); + + for (i = 0; i < ncop; i++) + for (j = 0; j < len; j++) + result->value.character.string[j+i*len]= e->value.character.string[j]; + + result->value.character.string[nlen] = '\0'; /* For debugger */ + return result; +} + + +/* Test that the expression is an constant array. */ + +static bool +is_constant_array_expr (gfc_expr *e) +{ + gfc_constructor *c; + + if (e == NULL) + return true; + + if (e->expr_type != EXPR_ARRAY || !gfc_is_constant_expr (e)) + return false; + + for (c = e->value.constructor; c; c = c->next) + if (c->expr->expr_type != EXPR_CONSTANT) + return false; + + return true; +} + + +/* This one is a bear, but mainly has to do with shuffling elements. */ + +gfc_expr * +gfc_simplify_reshape (gfc_expr *source, gfc_expr *shape_exp, + gfc_expr *pad, gfc_expr *order_exp) +{ + int order[GFC_MAX_DIMENSIONS], shape[GFC_MAX_DIMENSIONS]; + int i, rank, npad, x[GFC_MAX_DIMENSIONS]; + gfc_constructor *head, *tail; + mpz_t index, size; + unsigned long j; + size_t nsource; + gfc_expr *e; + + /* Check that argument expression types are OK. */ + if (!is_constant_array_expr (source)) + return NULL; + + if (!is_constant_array_expr (shape_exp)) + return NULL; + + if (!is_constant_array_expr (pad)) + return NULL; + + if (!is_constant_array_expr (order_exp)) + return NULL; + + /* Proceed with simplification, unpacking the array. */ + + mpz_init (index); + rank = 0; + head = tail = NULL; + + for (;;) + { + e = gfc_get_array_element (shape_exp, rank); + if (e == NULL) + break; + + if (gfc_extract_int (e, &shape[rank]) != NULL) + { + gfc_error ("Integer too large in shape specification at %L", + &e->where); + gfc_free_expr (e); + goto bad_reshape; + } + + if (rank >= GFC_MAX_DIMENSIONS) + { + gfc_error ("Too many dimensions in shape specification for RESHAPE " + "at %L", &e->where); + gfc_free_expr (e); + goto bad_reshape; + } + + if (shape[rank] < 0) + { + gfc_error ("Shape specification at %L cannot be negative", + &e->where); + gfc_free_expr (e); + goto bad_reshape; + } + + gfc_free_expr (e); + rank++; + } + + if (rank == 0) + { + gfc_error ("Shape specification at %L cannot be the null array", + &shape_exp->where); + goto bad_reshape; + } + + /* Now unpack the order array if present. */ + if (order_exp == NULL) + { + for (i = 0; i < rank; i++) + order[i] = i; + } + else + { + for (i = 0; i < rank; i++) + x[i] = 0; + + for (i = 0; i < rank; i++) + { + e = gfc_get_array_element (order_exp, i); + if (e == NULL) + { + gfc_error ("ORDER parameter of RESHAPE at %L is not the same " + "size as SHAPE parameter", &order_exp->where); + goto bad_reshape; + } + + if (gfc_extract_int (e, &order[i]) != NULL) + { + gfc_error ("Error in ORDER parameter of RESHAPE at %L", + &e->where); + gfc_free_expr (e); + goto bad_reshape; + } + + if (order[i] < 1 || order[i] > rank) + { + gfc_error ("ORDER parameter of RESHAPE at %L is out of range", + &e->where); + gfc_free_expr (e); + goto bad_reshape; + } + + order[i]--; + + if (x[order[i]]) + { + gfc_error ("Invalid permutation in ORDER parameter at %L", + &e->where); + gfc_free_expr (e); + goto bad_reshape; + } + + gfc_free_expr (e); + + x[order[i]] = 1; + } + } + + /* Count the elements in the source and padding arrays. */ + + npad = 0; + if (pad != NULL) + { + gfc_array_size (pad, &size); + npad = mpz_get_ui (size); + mpz_clear (size); + } + + gfc_array_size (source, &size); + nsource = mpz_get_ui (size); + mpz_clear (size); + + /* If it weren't for that pesky permutation we could just loop + through the source and round out any shortage with pad elements. + But no, someone just had to have the compiler do something the + user should be doing. */ + + for (i = 0; i < rank; i++) + x[i] = 0; + + for (;;) + { + /* Figure out which element to extract. */ + mpz_set_ui (index, 0); + + for (i = rank - 1; i >= 0; i--) + { + mpz_add_ui (index, index, x[order[i]]); + if (i != 0) + mpz_mul_ui (index, index, shape[order[i - 1]]); + } + + if (mpz_cmp_ui (index, INT_MAX) > 0) + gfc_internal_error ("Reshaped array too large at %C"); + + j = mpz_get_ui (index); + + if (j < nsource) + e = gfc_get_array_element (source, j); + else + { + j = j - nsource; + + if (npad == 0) + { + gfc_error ("PAD parameter required for short SOURCE parameter " + "at %L", &source->where); + goto bad_reshape; + } + + j = j % npad; + e = gfc_get_array_element (pad, j); + } + + if (head == NULL) + head = tail = gfc_get_constructor (); + else + { + tail->next = gfc_get_constructor (); + tail = tail->next; + } + + if (e == NULL) + goto bad_reshape; + + tail->where = e->where; + tail->expr = e; + + /* Calculate the next element. */ + i = 0; + +inc: + if (++x[i] < shape[i]) + continue; + x[i++] = 0; + if (i < rank) + goto inc; + + break; + } + + mpz_clear (index); + + e = gfc_get_expr (); + e->where = source->where; + e->expr_type = EXPR_ARRAY; + e->value.constructor = head; + e->shape = gfc_get_shape (rank); + + for (i = 0; i < rank; i++) + mpz_init_set_ui (e->shape[i], shape[i]); + + e->ts = source->ts; + e->rank = rank; + + return e; + +bad_reshape: + gfc_free_constructor (head); + mpz_clear (index); + return &gfc_bad_expr; +} + + +gfc_expr * +gfc_simplify_rrspacing (gfc_expr *x) +{ + gfc_expr *result; + int i; + long int e, p; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + i = gfc_validate_kind (x->ts.type, x->ts.kind, false); + + result = gfc_constant_result (BT_REAL, x->ts.kind, &x->where); + + mpfr_abs (result->value.real, x->value.real, GFC_RND_MODE); + + /* Special case x = -0 and 0. */ + if (mpfr_sgn (result->value.real) == 0) + { + mpfr_set_ui (result->value.real, 0, GFC_RND_MODE); + return result; + } + + /* | x * 2**(-e) | * 2**p. */ + e = - (long int) mpfr_get_exp (x->value.real); + mpfr_mul_2si (result->value.real, result->value.real, e, GFC_RND_MODE); + + p = (long int) gfc_real_kinds[i].digits; + mpfr_mul_2si (result->value.real, result->value.real, p, GFC_RND_MODE); + + return range_check (result, "RRSPACING"); +} + + +gfc_expr * +gfc_simplify_scale (gfc_expr *x, gfc_expr *i) +{ + int k, neg_flag, power, exp_range; + mpfr_t scale, radix; + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT || i->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_REAL, x->ts.kind, &x->where); + + if (mpfr_sgn (x->value.real) == 0) + { + mpfr_set_ui (result->value.real, 0, GFC_RND_MODE); + return result; + } + + k = gfc_validate_kind (BT_REAL, x->ts.kind, false); + + exp_range = gfc_real_kinds[k].max_exponent - gfc_real_kinds[k].min_exponent; + + /* This check filters out values of i that would overflow an int. */ + if (mpz_cmp_si (i->value.integer, exp_range + 2) > 0 + || mpz_cmp_si (i->value.integer, -exp_range - 2) < 0) + { + gfc_error ("Result of SCALE overflows its kind at %L", &result->where); + gfc_free_expr (result); + return &gfc_bad_expr; + } + + /* Compute scale = radix ** power. */ + power = mpz_get_si (i->value.integer); + + if (power >= 0) + neg_flag = 0; + else + { + neg_flag = 1; + power = -power; + } + + gfc_set_model_kind (x->ts.kind); + mpfr_init (scale); + mpfr_init (radix); + mpfr_set_ui (radix, gfc_real_kinds[k].radix, GFC_RND_MODE); + mpfr_pow_ui (scale, radix, power, GFC_RND_MODE); + + if (neg_flag) + mpfr_div (result->value.real, x->value.real, scale, GFC_RND_MODE); + else + mpfr_mul (result->value.real, x->value.real, scale, GFC_RND_MODE); + + mpfr_clears (scale, radix, NULL); + + return range_check (result, "SCALE"); +} + + +/* Variants of strspn and strcspn that operate on wide characters. */ + +static size_t +wide_strspn (const gfc_char_t *s1, const gfc_char_t *s2) +{ + size_t i = 0; + const gfc_char_t *c; + + while (s1[i]) + { + for (c = s2; *c; c++) + { + if (s1[i] == *c) + break; + } + if (*c == '\0') + break; + i++; + } + + return i; +} + +static size_t +wide_strcspn (const gfc_char_t *s1, const gfc_char_t *s2) +{ + size_t i = 0; + const gfc_char_t *c; + + while (s1[i]) + { + for (c = s2; *c; c++) + { + if (s1[i] == *c) + break; + } + if (*c) + break; + i++; + } + + return i; +} + + +gfc_expr * +gfc_simplify_scan (gfc_expr *e, gfc_expr *c, gfc_expr *b, gfc_expr *kind) +{ + gfc_expr *result; + int back; + size_t i; + size_t indx, len, lenc; + int k = get_kind (BT_INTEGER, kind, "SCAN", gfc_default_integer_kind); + + if (k == -1) + return &gfc_bad_expr; + + if (e->expr_type != EXPR_CONSTANT || c->expr_type != EXPR_CONSTANT) + return NULL; + + if (b != NULL && b->value.logical != 0) + back = 1; + else + back = 0; + + result = gfc_constant_result (BT_INTEGER, k, &e->where); + + len = e->value.character.length; + lenc = c->value.character.length; + + if (len == 0 || lenc == 0) + { + indx = 0; + } + else + { + if (back == 0) + { + indx = wide_strcspn (e->value.character.string, + c->value.character.string) + 1; + if (indx > len) + indx = 0; + } + else + { + i = 0; + for (indx = len; indx > 0; indx--) + { + for (i = 0; i < lenc; i++) + { + if (c->value.character.string[i] + == e->value.character.string[indx - 1]) + break; + } + if (i < lenc) + break; + } + } + } + mpz_set_ui (result->value.integer, indx); + return range_check (result, "SCAN"); +} + + +gfc_expr * +gfc_simplify_selected_char_kind (gfc_expr *e) +{ + int kind; + gfc_expr *result; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + if (gfc_compare_with_Cstring (e, "ascii", false) == 0 + || gfc_compare_with_Cstring (e, "default", false) == 0) + kind = 1; + else if (gfc_compare_with_Cstring (e, "iso_10646", false) == 0) + kind = 4; + else + kind = -1; + + result = gfc_int_expr (kind); + result->where = e->where; + + return result; +} + + +gfc_expr * +gfc_simplify_selected_int_kind (gfc_expr *e) +{ + int i, kind, range; + gfc_expr *result; + + if (e->expr_type != EXPR_CONSTANT || gfc_extract_int (e, &range) != NULL) + return NULL; + + kind = INT_MAX; + + for (i = 0; gfc_integer_kinds[i].kind != 0; i++) + if (gfc_integer_kinds[i].range >= range + && gfc_integer_kinds[i].kind < kind) + kind = gfc_integer_kinds[i].kind; + + if (kind == INT_MAX) + kind = -1; + + result = gfc_int_expr (kind); + result->where = e->where; + + return result; +} + + +gfc_expr * +gfc_simplify_selected_real_kind (gfc_expr *p, gfc_expr *q) +{ + int range, precision, i, kind, found_precision, found_range; + gfc_expr *result; + + if (p == NULL) + precision = 0; + else + { + if (p->expr_type != EXPR_CONSTANT + || gfc_extract_int (p, &precision) != NULL) + return NULL; + } + + if (q == NULL) + range = 0; + else + { + if (q->expr_type != EXPR_CONSTANT + || gfc_extract_int (q, &range) != NULL) + return NULL; + } + + kind = INT_MAX; + found_precision = 0; + found_range = 0; + + for (i = 0; gfc_real_kinds[i].kind != 0; i++) + { + if (gfc_real_kinds[i].precision >= precision) + found_precision = 1; + + if (gfc_real_kinds[i].range >= range) + found_range = 1; + + if (gfc_real_kinds[i].precision >= precision + && gfc_real_kinds[i].range >= range && gfc_real_kinds[i].kind < kind) + kind = gfc_real_kinds[i].kind; + } + + if (kind == INT_MAX) + { + kind = 0; + + if (!found_precision) + kind = -1; + if (!found_range) + kind -= 2; + } + + result = gfc_int_expr (kind); + result->where = (p != NULL) ? p->where : q->where; + + return result; +} + + +gfc_expr * +gfc_simplify_set_exponent (gfc_expr *x, gfc_expr *i) +{ + gfc_expr *result; + mpfr_t exp, absv, log2, pow2, frac; + unsigned long exp2; + + if (x->expr_type != EXPR_CONSTANT || i->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (BT_REAL, x->ts.kind, &x->where); + + if (mpfr_sgn (x->value.real) == 0) + { + mpfr_set_ui (result->value.real, 0, GFC_RND_MODE); + return result; + } + + gfc_set_model_kind (x->ts.kind); + mpfr_init (absv); + mpfr_init (log2); + mpfr_init (exp); + mpfr_init (pow2); + mpfr_init (frac); + + mpfr_abs (absv, x->value.real, GFC_RND_MODE); + mpfr_log2 (log2, absv, GFC_RND_MODE); + + mpfr_trunc (log2, log2); + mpfr_add_ui (exp, log2, 1, GFC_RND_MODE); + + /* Old exponent value, and fraction. */ + mpfr_ui_pow (pow2, 2, exp, GFC_RND_MODE); + + mpfr_div (frac, absv, pow2, GFC_RND_MODE); + + /* New exponent. */ + exp2 = (unsigned long) mpz_get_d (i->value.integer); + mpfr_mul_2exp (result->value.real, frac, exp2, GFC_RND_MODE); + + mpfr_clears (absv, log2, pow2, frac, NULL); + + return range_check (result, "SET_EXPONENT"); +} + + +gfc_expr * +gfc_simplify_shape (gfc_expr *source) +{ + mpz_t shape[GFC_MAX_DIMENSIONS]; + gfc_expr *result, *e, *f; + gfc_array_ref *ar; + int n; + gfc_try t; + + if (source->rank == 0) + return gfc_start_constructor (BT_INTEGER, gfc_default_integer_kind, + &source->where); + + if (source->expr_type != EXPR_VARIABLE) + return NULL; + + result = gfc_start_constructor (BT_INTEGER, gfc_default_integer_kind, + &source->where); + + ar = gfc_find_array_ref (source); + + t = gfc_array_ref_shape (ar, shape); + + for (n = 0; n < source->rank; n++) + { + e = gfc_constant_result (BT_INTEGER, gfc_default_integer_kind, + &source->where); + + if (t == SUCCESS) + { + mpz_set (e->value.integer, shape[n]); + mpz_clear (shape[n]); + } + else + { + mpz_set_ui (e->value.integer, n + 1); + + f = gfc_simplify_size (source, e, NULL); + gfc_free_expr (e); + if (f == NULL) + { + gfc_free_expr (result); + return NULL; + } + else + { + e = f; + } + } + + gfc_append_constructor (result, e); + } + + return result; +} + + +gfc_expr * +gfc_simplify_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind) +{ + mpz_t size; + gfc_expr *result; + int d; + int k = get_kind (BT_INTEGER, kind, "SIZE", gfc_default_integer_kind); + + if (k == -1) + return &gfc_bad_expr; + + if (dim == NULL) + { + if (gfc_array_size (array, &size) == FAILURE) + return NULL; + } + else + { + if (dim->expr_type != EXPR_CONSTANT) + return NULL; + + d = mpz_get_ui (dim->value.integer) - 1; + if (gfc_array_dimen_size (array, d, &size) == FAILURE) + return NULL; + } + + result = gfc_constant_result (BT_INTEGER, k, &array->where); + mpz_set (result->value.integer, size); + return result; +} + + +gfc_expr * +gfc_simplify_sign (gfc_expr *x, gfc_expr *y) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + switch (x->ts.type) + { + case BT_INTEGER: + mpz_abs (result->value.integer, x->value.integer); + if (mpz_sgn (y->value.integer) < 0) + mpz_neg (result->value.integer, result->value.integer); + + break; + + case BT_REAL: + /* TODO: Handle -0.0 and +0.0 correctly on machines that support + it. */ + mpfr_abs (result->value.real, x->value.real, GFC_RND_MODE); + if (mpfr_sgn (y->value.real) < 0) + mpfr_neg (result->value.real, result->value.real, GFC_RND_MODE); + + break; + + default: + gfc_internal_error ("Bad type in gfc_simplify_sign"); + } + + return result; +} + + +gfc_expr * +gfc_simplify_sin (gfc_expr *x) +{ + gfc_expr *result; + mpfr_t xp, xq; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + switch (x->ts.type) + { + case BT_REAL: + mpfr_sin (result->value.real, x->value.real, GFC_RND_MODE); + break; + + case BT_COMPLEX: + gfc_set_model (x->value.real); + mpfr_init (xp); + mpfr_init (xq); + + mpfr_sin (xp, x->value.complex.r, GFC_RND_MODE); + mpfr_cosh (xq, x->value.complex.i, GFC_RND_MODE); + mpfr_mul (result->value.complex.r, xp, xq, GFC_RND_MODE); + + mpfr_cos (xp, x->value.complex.r, GFC_RND_MODE); + mpfr_sinh (xq, x->value.complex.i, GFC_RND_MODE); + mpfr_mul (result->value.complex.i, xp, xq, GFC_RND_MODE); + + mpfr_clears (xp, xq, NULL); + break; + + default: + gfc_internal_error ("in gfc_simplify_sin(): Bad type"); + } + + return range_check (result, "SIN"); +} + + +gfc_expr * +gfc_simplify_sinh (gfc_expr *x) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_sinh (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "SINH"); +} + + +/* The argument is always a double precision real that is converted to + single precision. TODO: Rounding! */ + +gfc_expr * +gfc_simplify_sngl (gfc_expr *a) +{ + gfc_expr *result; + + if (a->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_real2real (a, gfc_default_real_kind); + return range_check (result, "SNGL"); +} + + +gfc_expr * +gfc_simplify_spacing (gfc_expr *x) +{ + gfc_expr *result; + int i; + long int en, ep; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + i = gfc_validate_kind (x->ts.type, x->ts.kind, false); + + result = gfc_constant_result (BT_REAL, x->ts.kind, &x->where); + + /* Special case x = 0 and -0. */ + mpfr_abs (result->value.real, x->value.real, GFC_RND_MODE); + if (mpfr_sgn (result->value.real) == 0) + { + mpfr_set (result->value.real, gfc_real_kinds[i].tiny, GFC_RND_MODE); + return result; + } + + /* In the Fortran 95 standard, the result is b**(e - p) where b, e, and p + are the radix, exponent of x, and precision. This excludes the + possibility of subnormal numbers. Fortran 2003 states the result is + b**max(e - p, emin - 1). */ + + ep = (long int) mpfr_get_exp (x->value.real) - gfc_real_kinds[i].digits; + en = (long int) gfc_real_kinds[i].min_exponent - 1; + en = en > ep ? en : ep; + + mpfr_set_ui (result->value.real, 1, GFC_RND_MODE); + mpfr_mul_2si (result->value.real, result->value.real, en, GFC_RND_MODE); + + return range_check (result, "SPACING"); +} + + +gfc_expr * +gfc_simplify_sqrt (gfc_expr *e) +{ + gfc_expr *result; + mpfr_t ac, ad, s, t, w; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (e->ts.type, e->ts.kind, &e->where); + + switch (e->ts.type) + { + case BT_REAL: + if (mpfr_cmp_si (e->value.real, 0) < 0) + goto negative_arg; + mpfr_sqrt (result->value.real, e->value.real, GFC_RND_MODE); + + break; + + case BT_COMPLEX: + /* Formula taken from Numerical Recipes to avoid over- and + underflow. */ + + gfc_set_model (e->value.real); + mpfr_init (ac); + mpfr_init (ad); + mpfr_init (s); + mpfr_init (t); + mpfr_init (w); + + if (mpfr_cmp_ui (e->value.complex.r, 0) == 0 + && mpfr_cmp_ui (e->value.complex.i, 0) == 0) + { + mpfr_set_ui (result->value.complex.r, 0, GFC_RND_MODE); + mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE); + break; + } + + mpfr_abs (ac, e->value.complex.r, GFC_RND_MODE); + mpfr_abs (ad, e->value.complex.i, GFC_RND_MODE); + + if (mpfr_cmp (ac, ad) >= 0) + { + mpfr_div (t, e->value.complex.i, e->value.complex.r, GFC_RND_MODE); + mpfr_mul (t, t, t, GFC_RND_MODE); + mpfr_add_ui (t, t, 1, GFC_RND_MODE); + mpfr_sqrt (t, t, GFC_RND_MODE); + mpfr_add_ui (t, t, 1, GFC_RND_MODE); + mpfr_div_ui (t, t, 2, GFC_RND_MODE); + mpfr_sqrt (t, t, GFC_RND_MODE); + mpfr_sqrt (s, ac, GFC_RND_MODE); + mpfr_mul (w, s, t, GFC_RND_MODE); + } + else + { + mpfr_div (s, e->value.complex.r, e->value.complex.i, GFC_RND_MODE); + mpfr_mul (t, s, s, GFC_RND_MODE); + mpfr_add_ui (t, t, 1, GFC_RND_MODE); + mpfr_sqrt (t, t, GFC_RND_MODE); + mpfr_abs (s, s, GFC_RND_MODE); + mpfr_add (t, t, s, GFC_RND_MODE); + mpfr_div_ui (t, t, 2, GFC_RND_MODE); + mpfr_sqrt (t, t, GFC_RND_MODE); + mpfr_sqrt (s, ad, GFC_RND_MODE); + mpfr_mul (w, s, t, GFC_RND_MODE); + } + + if (mpfr_cmp_ui (w, 0) != 0 && mpfr_cmp_ui (e->value.complex.r, 0) >= 0) + { + mpfr_mul_ui (t, w, 2, GFC_RND_MODE); + mpfr_div (result->value.complex.i, e->value.complex.i, t, GFC_RND_MODE); + mpfr_set (result->value.complex.r, w, GFC_RND_MODE); + } + else if (mpfr_cmp_ui (w, 0) != 0 + && mpfr_cmp_ui (e->value.complex.r, 0) < 0 + && mpfr_cmp_ui (e->value.complex.i, 0) >= 0) + { + mpfr_mul_ui (t, w, 2, GFC_RND_MODE); + mpfr_div (result->value.complex.r, e->value.complex.i, t, GFC_RND_MODE); + mpfr_set (result->value.complex.i, w, GFC_RND_MODE); + } + else if (mpfr_cmp_ui (w, 0) != 0 + && mpfr_cmp_ui (e->value.complex.r, 0) < 0 + && mpfr_cmp_ui (e->value.complex.i, 0) < 0) + { + mpfr_mul_ui (t, w, 2, GFC_RND_MODE); + mpfr_div (result->value.complex.r, ad, t, GFC_RND_MODE); + mpfr_neg (w, w, GFC_RND_MODE); + mpfr_set (result->value.complex.i, w, GFC_RND_MODE); + } + else + gfc_internal_error ("invalid complex argument of SQRT at %L", + &e->where); + + mpfr_clears (s, t, ac, ad, w, NULL); + + break; + + default: + gfc_internal_error ("invalid argument of SQRT at %L", &e->where); + } + + return range_check (result, "SQRT"); + +negative_arg: + gfc_free_expr (result); + gfc_error ("Argument of SQRT at %L has a negative value", &e->where); + return &gfc_bad_expr; +} + + +gfc_expr * +gfc_simplify_tan (gfc_expr *x) +{ + int i; + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + i = gfc_validate_kind (BT_REAL, x->ts.kind, false); + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_tan (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "TAN"); +} + + +gfc_expr * +gfc_simplify_tanh (gfc_expr *x) +{ + gfc_expr *result; + + if (x->expr_type != EXPR_CONSTANT) + return NULL; + + result = gfc_constant_result (x->ts.type, x->ts.kind, &x->where); + + mpfr_tanh (result->value.real, x->value.real, GFC_RND_MODE); + + return range_check (result, "TANH"); + +} + + +gfc_expr * +gfc_simplify_tiny (gfc_expr *e) +{ + gfc_expr *result; + int i; + + i = gfc_validate_kind (BT_REAL, e->ts.kind, false); + + result = gfc_constant_result (BT_REAL, e->ts.kind, &e->where); + mpfr_set (result->value.real, gfc_real_kinds[i].tiny, GFC_RND_MODE); + + return result; +} + + +gfc_expr * +gfc_simplify_trailz (gfc_expr *e) +{ + gfc_expr *result; + unsigned long tz, bs; + int i; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + i = gfc_validate_kind (e->ts.type, e->ts.kind, false); + bs = gfc_integer_kinds[i].bit_size; + tz = mpz_scan1 (e->value.integer, 0); + + result = gfc_constant_result (BT_INTEGER, gfc_default_integer_kind, &e->where); + mpz_set_ui (result->value.integer, MIN (tz, bs)); + + return result; +} + + +gfc_expr * +gfc_simplify_transfer (gfc_expr *source, gfc_expr *mold, gfc_expr *size) +{ + gfc_expr *result; + gfc_expr *mold_element; + size_t source_size; + size_t result_size; + size_t result_elt_size; + size_t buffer_size; + mpz_t tmp; + unsigned char *buffer; + + if (!gfc_is_constant_expr (source) + || (gfc_init_expr && !gfc_is_constant_expr (mold)) + || !gfc_is_constant_expr (size)) + return NULL; + + if (source->expr_type == EXPR_FUNCTION) + return NULL; + + /* Calculate the size of the source. */ + if (source->expr_type == EXPR_ARRAY + && gfc_array_size (source, &tmp) == FAILURE) + gfc_internal_error ("Failure getting length of a constant array."); + + source_size = gfc_target_expr_size (source); + + /* Create an empty new expression with the appropriate characteristics. */ + result = gfc_constant_result (mold->ts.type, mold->ts.kind, + &source->where); + result->ts = mold->ts; + + mold_element = mold->expr_type == EXPR_ARRAY + ? mold->value.constructor->expr + : mold; + + /* Set result character length, if needed. Note that this needs to be + set even for array expressions, in order to pass this information into + gfc_target_interpret_expr. */ + if (result->ts.type == BT_CHARACTER && gfc_is_constant_expr (mold_element)) + result->value.character.length = mold_element->value.character.length; + + /* Set the number of elements in the result, and determine its size. */ + result_elt_size = gfc_target_expr_size (mold_element); + if (result_elt_size == 0) + { + gfc_free_expr (result); + return NULL; + } + + if (mold->expr_type == EXPR_ARRAY || mold->rank || size) + { + int result_length; + + result->expr_type = EXPR_ARRAY; + result->rank = 1; + + if (size) + result_length = (size_t)mpz_get_ui (size->value.integer); + else + { + result_length = source_size / result_elt_size; + if (result_length * result_elt_size < source_size) + result_length += 1; + } + + result->shape = gfc_get_shape (1); + mpz_init_set_ui (result->shape[0], result_length); + + result_size = result_length * result_elt_size; + } + else + { + result->rank = 0; + result_size = result_elt_size; + } + + if (gfc_option.warn_surprising && source_size < result_size) + gfc_warning("Intrinsic TRANSFER at %L has partly undefined result: " + "source size %ld < result size %ld", &source->where, + (long) source_size, (long) result_size); + + /* Allocate the buffer to store the binary version of the source. */ + buffer_size = MAX (source_size, result_size); + buffer = (unsigned char*)alloca (buffer_size); + memset (buffer, 0, buffer_size); + + /* Now write source to the buffer. */ + gfc_target_encode_expr (source, buffer, buffer_size); + + /* And read the buffer back into the new expression. */ + gfc_target_interpret_expr (buffer, buffer_size, result); + + return result; +} + + +gfc_expr * +gfc_simplify_trim (gfc_expr *e) +{ + gfc_expr *result; + int count, i, len, lentrim; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + len = e->value.character.length; + + result = gfc_constant_result (BT_CHARACTER, e->ts.kind, &e->where); + + for (count = 0, i = 1; i <= len; ++i) + { + if (e->value.character.string[len - i] == ' ') + count++; + else + break; + } + + lentrim = len - count; + + result->value.character.length = lentrim; + result->value.character.string = gfc_get_wide_string (lentrim + 1); + + for (i = 0; i < lentrim; i++) + result->value.character.string[i] = e->value.character.string[i]; + + result->value.character.string[lentrim] = '\0'; /* For debugger */ + + return result; +} + + +gfc_expr * +gfc_simplify_ubound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind) +{ + return simplify_bound (array, dim, kind, 1); +} + + +gfc_expr * +gfc_simplify_verify (gfc_expr *s, gfc_expr *set, gfc_expr *b, gfc_expr *kind) +{ + gfc_expr *result; + int back; + size_t index, len, lenset; + size_t i; + int k = get_kind (BT_INTEGER, kind, "VERIFY", gfc_default_integer_kind); + + if (k == -1) + return &gfc_bad_expr; + + if (s->expr_type != EXPR_CONSTANT || set->expr_type != EXPR_CONSTANT) + return NULL; + + if (b != NULL && b->value.logical != 0) + back = 1; + else + back = 0; + + result = gfc_constant_result (BT_INTEGER, k, &s->where); + + len = s->value.character.length; + lenset = set->value.character.length; + + if (len == 0) + { + mpz_set_ui (result->value.integer, 0); + return result; + } + + if (back == 0) + { + if (lenset == 0) + { + mpz_set_ui (result->value.integer, 1); + return result; + } + + index = wide_strspn (s->value.character.string, + set->value.character.string) + 1; + if (index > len) + index = 0; + + } + else + { + if (lenset == 0) + { + mpz_set_ui (result->value.integer, len); + return result; + } + for (index = len; index > 0; index --) + { + for (i = 0; i < lenset; i++) + { + if (s->value.character.string[index - 1] + == set->value.character.string[i]) + break; + } + if (i == lenset) + break; + } + } + + mpz_set_ui (result->value.integer, index); + return result; +} + + +gfc_expr * +gfc_simplify_xor (gfc_expr *x, gfc_expr *y) +{ + gfc_expr *result; + int kind; + + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + return NULL; + + kind = x->ts.kind > y->ts.kind ? x->ts.kind : y->ts.kind; + if (x->ts.type == BT_INTEGER) + { + result = gfc_constant_result (BT_INTEGER, kind, &x->where); + mpz_xor (result->value.integer, x->value.integer, y->value.integer); + return range_check (result, "XOR"); + } + else /* BT_LOGICAL */ + { + result = gfc_constant_result (BT_LOGICAL, kind, &x->where); + result->value.logical = (x->value.logical && !y->value.logical) + || (!x->value.logical && y->value.logical); + return result; + } + +} + + +/****************** Constant simplification *****************/ + +/* Master function to convert one constant to another. While this is + used as a simplification function, it requires the destination type + and kind information which is supplied by a special case in + do_simplify(). */ + +gfc_expr * +gfc_convert_constant (gfc_expr *e, bt type, int kind) +{ + gfc_expr *g, *result, *(*f) (gfc_expr *, int); + gfc_constructor *head, *c, *tail = NULL; + + switch (e->ts.type) + { + case BT_INTEGER: + switch (type) + { + case BT_INTEGER: + f = gfc_int2int; + break; + case BT_REAL: + f = gfc_int2real; + break; + case BT_COMPLEX: + f = gfc_int2complex; + break; + case BT_LOGICAL: + f = gfc_int2log; + break; + default: + goto oops; + } + break; + + case BT_REAL: + switch (type) + { + case BT_INTEGER: + f = gfc_real2int; + break; + case BT_REAL: + f = gfc_real2real; + break; + case BT_COMPLEX: + f = gfc_real2complex; + break; + default: + goto oops; + } + break; + + case BT_COMPLEX: + switch (type) + { + case BT_INTEGER: + f = gfc_complex2int; + break; + case BT_REAL: + f = gfc_complex2real; + break; + case BT_COMPLEX: + f = gfc_complex2complex; + break; + + default: + goto oops; + } + break; + + case BT_LOGICAL: + switch (type) + { + case BT_INTEGER: + f = gfc_log2int; + break; + case BT_LOGICAL: + f = gfc_log2log; + break; + default: + goto oops; + } + break; + + case BT_HOLLERITH: + switch (type) + { + case BT_INTEGER: + f = gfc_hollerith2int; + break; + + case BT_REAL: + f = gfc_hollerith2real; + break; + + case BT_COMPLEX: + f = gfc_hollerith2complex; + break; + + case BT_CHARACTER: + f = gfc_hollerith2character; + break; + + case BT_LOGICAL: + f = gfc_hollerith2logical; + break; + + default: + goto oops; + } + break; + + default: + oops: + gfc_internal_error ("gfc_convert_constant(): Unexpected type"); + } + + result = NULL; + + switch (e->expr_type) + { + case EXPR_CONSTANT: + result = f (e, kind); + if (result == NULL) + return &gfc_bad_expr; + break; + + case EXPR_ARRAY: + if (!gfc_is_constant_expr (e)) + break; + + head = NULL; + + for (c = e->value.constructor; c; c = c->next) + { + if (head == NULL) + head = tail = gfc_get_constructor (); + else + { + tail->next = gfc_get_constructor (); + tail = tail->next; + } + + tail->where = c->where; + + if (c->iterator == NULL) + tail->expr = f (c->expr, kind); + else + { + g = gfc_convert_constant (c->expr, type, kind); + if (g == &gfc_bad_expr) + return g; + tail->expr = g; + } + + if (tail->expr == NULL) + { + gfc_free_constructor (head); + return NULL; + } + } + + result = gfc_get_expr (); + result->ts.type = type; + result->ts.kind = kind; + result->expr_type = EXPR_ARRAY; + result->value.constructor = head; + result->shape = gfc_copy_shape (e->shape, e->rank); + result->where = e->where; + result->rank = e->rank; + break; + + default: + break; + } + + return result; +} + + +/* Function for converting character constants. */ +gfc_expr * +gfc_convert_char_constant (gfc_expr *e, bt type ATTRIBUTE_UNUSED, int kind) +{ + gfc_expr *result; + int i; + + if (!gfc_is_constant_expr (e)) + return NULL; + + if (e->expr_type == EXPR_CONSTANT) + { + /* Simple case of a scalar. */ + result = gfc_constant_result (BT_CHARACTER, kind, &e->where); + if (result == NULL) + return &gfc_bad_expr; + + result->value.character.length = e->value.character.length; + result->value.character.string + = gfc_get_wide_string (e->value.character.length + 1); + memcpy (result->value.character.string, e->value.character.string, + (e->value.character.length + 1) * sizeof (gfc_char_t)); + + /* Check we only have values representable in the destination kind. */ + for (i = 0; i < result->value.character.length; i++) + if (!gfc_check_character_range (result->value.character.string[i], + kind)) + { + gfc_error ("Character '%s' in string at %L cannot be converted " + "into character kind %d", + gfc_print_wide_char (result->value.character.string[i]), + &e->where, kind); + return &gfc_bad_expr; + } + + return result; + } + else if (e->expr_type == EXPR_ARRAY) + { + /* For an array constructor, we convert each constructor element. */ + gfc_constructor *head = NULL, *tail = NULL, *c; + + for (c = e->value.constructor; c; c = c->next) + { + if (head == NULL) + head = tail = gfc_get_constructor (); + else + { + tail->next = gfc_get_constructor (); + tail = tail->next; + } + + tail->where = c->where; + tail->expr = gfc_convert_char_constant (c->expr, type, kind); + if (tail->expr == &gfc_bad_expr) + { + tail->expr = NULL; + return &gfc_bad_expr; + } + + if (tail->expr == NULL) + { + gfc_free_constructor (head); + return NULL; + } + } + + result = gfc_get_expr (); + result->ts.type = type; + result->ts.kind = kind; + result->expr_type = EXPR_ARRAY; + result->value.constructor = head; + result->shape = gfc_copy_shape (e->shape, e->rank); + result->where = e->where; + result->rank = e->rank; + result->ts.cl = e->ts.cl; + + return result; + } + else + return NULL; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/st.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/st.c new file mode 100644 index 0000000000..18f1b6d91c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/st.c @@ -0,0 +1,220 @@ +/* Build executable statement trees. + Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* Executable statements are strung together into a singly linked list + of code structures. These structures are later translated into GCC + GENERIC tree structures and from there to executable code for a + target. */ + +#include "config.h" +#include "system.h" +#include "gfortran.h" + +gfc_code new_st; + + +/* Zeroes out the new_st structure. */ + +void +gfc_clear_new_st (void) +{ + memset (&new_st, '\0', sizeof (new_st)); + new_st.op = EXEC_NOP; +} + + +/* Get a gfc_code structure. */ + +gfc_code * +gfc_get_code (void) +{ + gfc_code *c; + + c = XCNEW (gfc_code); + c->loc = gfc_current_locus; + return c; +} + + +/* Given some part of a gfc_code structure, append a set of code to + its tail, returning a pointer to the new tail. */ + +gfc_code * +gfc_append_code (gfc_code *tail, gfc_code *new_code) +{ + if (tail != NULL) + { + while (tail->next != NULL) + tail = tail->next; + + tail->next = new_code; + } + + while (new_code->next != NULL) + new_code = new_code->next; + + return new_code; +} + + +/* Free a single code structure, but not the actual structure itself. */ + +void +gfc_free_statement (gfc_code *p) +{ + if (p->expr) + gfc_free_expr (p->expr); + if (p->expr2) + gfc_free_expr (p->expr2); + + switch (p->op) + { + case EXEC_NOP: + case EXEC_ASSIGN: + case EXEC_INIT_ASSIGN: + case EXEC_GOTO: + case EXEC_CYCLE: + case EXEC_RETURN: + case EXEC_IF: + case EXEC_PAUSE: + case EXEC_STOP: + case EXEC_EXIT: + case EXEC_WHERE: + case EXEC_IOLENGTH: + case EXEC_POINTER_ASSIGN: + case EXEC_DO_WHILE: + case EXEC_CONTINUE: + case EXEC_TRANSFER: + case EXEC_LABEL_ASSIGN: + case EXEC_ENTRY: + case EXEC_ARITHMETIC_IF: + break; + + case EXEC_COMPCALL: + case EXEC_CALL: + case EXEC_ASSIGN_CALL: + gfc_free_actual_arglist (p->ext.actual); + break; + + case EXEC_SELECT: + if (p->ext.case_list) + gfc_free_case_list (p->ext.case_list); + break; + + case EXEC_DO: + gfc_free_iterator (p->ext.iterator, 1); + break; + + case EXEC_ALLOCATE: + case EXEC_DEALLOCATE: + gfc_free_alloc_list (p->ext.alloc_list); + break; + + case EXEC_OPEN: + gfc_free_open (p->ext.open); + break; + + case EXEC_CLOSE: + gfc_free_close (p->ext.close); + break; + + case EXEC_BACKSPACE: + case EXEC_ENDFILE: + case EXEC_REWIND: + case EXEC_FLUSH: + gfc_free_filepos (p->ext.filepos); + break; + + case EXEC_INQUIRE: + gfc_free_inquire (p->ext.inquire); + break; + + case EXEC_WAIT: + gfc_free_wait (p->ext.wait); + break; + + case EXEC_READ: + case EXEC_WRITE: + gfc_free_dt (p->ext.dt); + break; + + case EXEC_DT_END: + /* The ext.dt member is a duplicate pointer and doesn't need to + be freed. */ + break; + + case EXEC_FORALL: + gfc_free_forall_iterator (p->ext.forall_iterator); + break; + + case EXEC_OMP_DO: + case EXEC_OMP_END_SINGLE: + case EXEC_OMP_PARALLEL: + case EXEC_OMP_PARALLEL_DO: + case EXEC_OMP_PARALLEL_SECTIONS: + case EXEC_OMP_SECTIONS: + case EXEC_OMP_SINGLE: + case EXEC_OMP_TASK: + case EXEC_OMP_WORKSHARE: + case EXEC_OMP_PARALLEL_WORKSHARE: + gfc_free_omp_clauses (p->ext.omp_clauses); + break; + + case EXEC_OMP_CRITICAL: + gfc_free (CONST_CAST (char *, p->ext.omp_name)); + break; + + case EXEC_OMP_FLUSH: + gfc_free_namelist (p->ext.omp_namelist); + break; + + case EXEC_OMP_ATOMIC: + case EXEC_OMP_BARRIER: + case EXEC_OMP_MASTER: + case EXEC_OMP_ORDERED: + case EXEC_OMP_END_NOWAIT: + case EXEC_OMP_TASKWAIT: + break; + + default: + gfc_internal_error ("gfc_free_statement(): Bad statement"); + } +} + + +/* Free a code statement and all other code structures linked to it. */ + +void +gfc_free_statements (gfc_code *p) +{ + gfc_code *q; + + for (; p; p = q) + { + q = p->next; + + if (p->block) + gfc_free_statements (p->block); + gfc_free_statement (p); + gfc_free (p); + } +} + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/symbol.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/symbol.c new file mode 100644 index 0000000000..ca9d0a3fe5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/symbol.c @@ -0,0 +1,4343 @@ +/* Maintain binary trees of symbols. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + + +#include "config.h" +#include "system.h" +#include "flags.h" +#include "gfortran.h" +#include "parse.h" +#include "match.h" + + +/* Strings for all symbol attributes. We use these for dumping the + parse tree, in error messages, and also when reading and writing + modules. */ + +const mstring flavors[] = +{ + minit ("UNKNOWN-FL", FL_UNKNOWN), minit ("PROGRAM", FL_PROGRAM), + minit ("BLOCK-DATA", FL_BLOCK_DATA), minit ("MODULE", FL_MODULE), + minit ("VARIABLE", FL_VARIABLE), minit ("PARAMETER", FL_PARAMETER), + minit ("LABEL", FL_LABEL), minit ("PROCEDURE", FL_PROCEDURE), + minit ("DERIVED", FL_DERIVED), minit ("NAMELIST", FL_NAMELIST), + minit (NULL, -1) +}; + +const mstring procedures[] = +{ + minit ("UNKNOWN-PROC", PROC_UNKNOWN), + minit ("MODULE-PROC", PROC_MODULE), + minit ("INTERNAL-PROC", PROC_INTERNAL), + minit ("DUMMY-PROC", PROC_DUMMY), + minit ("INTRINSIC-PROC", PROC_INTRINSIC), + minit ("EXTERNAL-PROC", PROC_EXTERNAL), + minit ("STATEMENT-PROC", PROC_ST_FUNCTION), + minit (NULL, -1) +}; + +const mstring intents[] = +{ + minit ("UNKNOWN-INTENT", INTENT_UNKNOWN), + minit ("IN", INTENT_IN), + minit ("OUT", INTENT_OUT), + minit ("INOUT", INTENT_INOUT), + minit (NULL, -1) +}; + +const mstring access_types[] = +{ + minit ("UNKNOWN-ACCESS", ACCESS_UNKNOWN), + minit ("PUBLIC", ACCESS_PUBLIC), + minit ("PRIVATE", ACCESS_PRIVATE), + minit (NULL, -1) +}; + +const mstring ifsrc_types[] = +{ + minit ("UNKNOWN", IFSRC_UNKNOWN), + minit ("DECL", IFSRC_DECL), + minit ("BODY", IFSRC_IFBODY), + minit ("USAGE", IFSRC_USAGE) +}; + +const mstring save_status[] = +{ + minit ("UNKNOWN", SAVE_NONE), + minit ("EXPLICIT-SAVE", SAVE_EXPLICIT), + minit ("IMPLICIT-SAVE", SAVE_IMPLICIT), +}; + +/* This is to make sure the backend generates setup code in the correct + order. */ + +static int next_dummy_order = 1; + + +gfc_namespace *gfc_current_ns; + +gfc_gsymbol *gfc_gsym_root = NULL; + +static gfc_symbol *changed_syms = NULL; + +gfc_dt_list *gfc_derived_types; + + +/*********** IMPLICIT NONE and IMPLICIT statement handlers ***********/ + +/* The following static variable indicates whether a particular element has + been explicitly set or not. */ + +static int new_flag[GFC_LETTERS]; + + +/* Handle a correctly parsed IMPLICIT NONE. */ + +void +gfc_set_implicit_none (void) +{ + int i; + + if (gfc_current_ns->seen_implicit_none) + { + gfc_error ("Duplicate IMPLICIT NONE statement at %C"); + return; + } + + gfc_current_ns->seen_implicit_none = 1; + + for (i = 0; i < GFC_LETTERS; i++) + { + gfc_clear_ts (&gfc_current_ns->default_type[i]); + gfc_current_ns->set_flag[i] = 1; + } +} + + +/* Reset the implicit range flags. */ + +void +gfc_clear_new_implicit (void) +{ + int i; + + for (i = 0; i < GFC_LETTERS; i++) + new_flag[i] = 0; +} + + +/* Prepare for a new implicit range. Sets flags in new_flag[]. */ + +gfc_try +gfc_add_new_implicit_range (int c1, int c2) +{ + int i; + + c1 -= 'a'; + c2 -= 'a'; + + for (i = c1; i <= c2; i++) + { + if (new_flag[i]) + { + gfc_error ("Letter '%c' already set in IMPLICIT statement at %C", + i + 'A'); + return FAILURE; + } + + new_flag[i] = 1; + } + + return SUCCESS; +} + + +/* Add a matched implicit range for gfc_set_implicit(). Check if merging + the new implicit types back into the existing types will work. */ + +gfc_try +gfc_merge_new_implicit (gfc_typespec *ts) +{ + int i; + + if (gfc_current_ns->seen_implicit_none) + { + gfc_error ("Cannot specify IMPLICIT at %C after IMPLICIT NONE"); + return FAILURE; + } + + for (i = 0; i < GFC_LETTERS; i++) + { + if (new_flag[i]) + { + if (gfc_current_ns->set_flag[i]) + { + gfc_error ("Letter %c already has an IMPLICIT type at %C", + i + 'A'); + return FAILURE; + } + + gfc_current_ns->default_type[i] = *ts; + gfc_current_ns->implicit_loc[i] = gfc_current_locus; + gfc_current_ns->set_flag[i] = 1; + } + } + return SUCCESS; +} + + +/* Given a symbol, return a pointer to the typespec for its default type. */ + +gfc_typespec * +gfc_get_default_type (gfc_symbol *sym, gfc_namespace *ns) +{ + char letter; + + letter = sym->name[0]; + + if (gfc_option.flag_allow_leading_underscore && letter == '_') + gfc_internal_error ("Option -fallow-leading-underscore is for use only by " + "gfortran developers, and should not be used for " + "implicitly typed variables"); + + if (letter < 'a' || letter > 'z') + gfc_internal_error ("gfc_get_default_type(): Bad symbol '%s'",sym->name); + + if (ns == NULL) + ns = gfc_current_ns; + + return &ns->default_type[letter - 'a']; +} + + +/* Given a pointer to a symbol, set its type according to the first + letter of its name. Fails if the letter in question has no default + type. */ + +gfc_try +gfc_set_default_type (gfc_symbol *sym, int error_flag, gfc_namespace *ns) +{ + gfc_typespec *ts; + + if (sym->ts.type != BT_UNKNOWN) + gfc_internal_error ("gfc_set_default_type(): symbol already has a type"); + + ts = gfc_get_default_type (sym, ns); + + if (ts->type == BT_UNKNOWN) + { + if (error_flag && !sym->attr.untyped) + { + gfc_error ("Symbol '%s' at %L has no IMPLICIT type", + sym->name, &sym->declared_at); + sym->attr.untyped = 1; /* Ensure we only give an error once. */ + } + + return FAILURE; + } + + sym->ts = *ts; + sym->attr.implicit_type = 1; + + if (ts->cl) + { + sym->ts.cl = gfc_get_charlen (); + *sym->ts.cl = *ts->cl; + } + + if (sym->attr.is_bind_c == 1) + { + /* BIND(C) variables should not be implicitly declared. */ + gfc_warning_now ("Implicitly declared BIND(C) variable '%s' at %L may " + "not be C interoperable", sym->name, &sym->declared_at); + sym->ts.f90_type = sym->ts.type; + } + + if (sym->attr.dummy != 0) + { + if (sym->ns->proc_name != NULL + && (sym->ns->proc_name->attr.subroutine != 0 + || sym->ns->proc_name->attr.function != 0) + && sym->ns->proc_name->attr.is_bind_c != 0) + { + /* Dummy args to a BIND(C) routine may not be interoperable if + they are implicitly typed. */ + gfc_warning_now ("Implicitly declared variable '%s' at %L may not " + "be C interoperable but it is a dummy argument to " + "the BIND(C) procedure '%s' at %L", sym->name, + &(sym->declared_at), sym->ns->proc_name->name, + &(sym->ns->proc_name->declared_at)); + sym->ts.f90_type = sym->ts.type; + } + } + + return SUCCESS; +} + + +/* This function is called from parse.c(parse_progunit) to check the + type of the function is not implicitly typed in the host namespace + and to implicitly type the function result, if necessary. */ + +void +gfc_check_function_type (gfc_namespace *ns) +{ + gfc_symbol *proc = ns->proc_name; + + if (!proc->attr.contained || proc->result->attr.implicit_type) + return; + + if (proc->result->ts.type == BT_UNKNOWN) + { + if (gfc_set_default_type (proc->result, 0, gfc_current_ns) + == SUCCESS) + { + if (proc->result != proc) + { + proc->ts = proc->result->ts; + proc->as = gfc_copy_array_spec (proc->result->as); + proc->attr.dimension = proc->result->attr.dimension; + proc->attr.pointer = proc->result->attr.pointer; + proc->attr.allocatable = proc->result->attr.allocatable; + } + } + else + { + gfc_error ("Function result '%s' at %L has no IMPLICIT type", + proc->result->name, &proc->result->declared_at); + proc->result->attr.untyped = 1; + } + } +} + + +/******************** Symbol attribute stuff *********************/ + +/* This is a generic conflict-checker. We do this to avoid having a + single conflict in two places. */ + +#define conf(a, b) if (attr->a && attr->b) { a1 = a; a2 = b; goto conflict; } +#define conf2(a) if (attr->a) { a2 = a; goto conflict; } +#define conf_std(a, b, std) if (attr->a && attr->b)\ + {\ + a1 = a;\ + a2 = b;\ + standard = std;\ + goto conflict_std;\ + } + +static gfc_try +check_conflict (symbol_attribute *attr, const char *name, locus *where) +{ + static const char *dummy = "DUMMY", *save = "SAVE", *pointer = "POINTER", + *target = "TARGET", *external = "EXTERNAL", *intent = "INTENT", + *intent_in = "INTENT(IN)", *intrinsic = "INTRINSIC", + *intent_out = "INTENT(OUT)", *intent_inout = "INTENT(INOUT)", + *allocatable = "ALLOCATABLE", *elemental = "ELEMENTAL", + *privat = "PRIVATE", *recursive = "RECURSIVE", + *in_common = "COMMON", *result = "RESULT", *in_namelist = "NAMELIST", + *publik = "PUBLIC", *optional = "OPTIONAL", *entry = "ENTRY", + *function = "FUNCTION", *subroutine = "SUBROUTINE", + *dimension = "DIMENSION", *in_equivalence = "EQUIVALENCE", + *use_assoc = "USE ASSOCIATED", *cray_pointer = "CRAY POINTER", + *cray_pointee = "CRAY POINTEE", *data = "DATA", *value = "VALUE", + *volatile_ = "VOLATILE", *is_protected = "PROTECTED", + *is_bind_c = "BIND(C)", *procedure = "PROCEDURE"; + static const char *threadprivate = "THREADPRIVATE"; + + const char *a1, *a2; + int standard; + + if (where == NULL) + where = &gfc_current_locus; + + if (attr->pointer && attr->intent != INTENT_UNKNOWN) + { + a1 = pointer; + a2 = intent; + standard = GFC_STD_F2003; + goto conflict_std; + } + + /* Check for attributes not allowed in a BLOCK DATA. */ + if (gfc_current_state () == COMP_BLOCK_DATA) + { + a1 = NULL; + + if (attr->in_namelist) + a1 = in_namelist; + if (attr->allocatable) + a1 = allocatable; + if (attr->external) + a1 = external; + if (attr->optional) + a1 = optional; + if (attr->access == ACCESS_PRIVATE) + a1 = privat; + if (attr->access == ACCESS_PUBLIC) + a1 = publik; + if (attr->intent != INTENT_UNKNOWN) + a1 = intent; + + if (a1 != NULL) + { + gfc_error + ("%s attribute not allowed in BLOCK DATA program unit at %L", + a1, where); + return FAILURE; + } + } + + if (attr->save == SAVE_EXPLICIT) + { + conf (dummy, save); + conf (in_common, save); + conf (result, save); + + switch (attr->flavor) + { + case FL_PROGRAM: + case FL_BLOCK_DATA: + case FL_MODULE: + case FL_LABEL: + case FL_DERIVED: + case FL_PARAMETER: + a1 = gfc_code2string (flavors, attr->flavor); + a2 = save; + goto conflict; + + case FL_PROCEDURE: + /* Conflicts between SAVE and PROCEDURE will be checked at + resolution stage, see "resolve_fl_procedure". */ + case FL_VARIABLE: + case FL_NAMELIST: + default: + break; + } + } + + conf (dummy, entry); + conf (dummy, intrinsic); + conf (dummy, threadprivate); + conf (pointer, target); + conf (pointer, intrinsic); + conf (pointer, elemental); + conf (allocatable, elemental); + + conf (target, external); + conf (target, intrinsic); + + if (!attr->if_source) + conf (external, dimension); /* See Fortran 95's R504. */ + + conf (external, intrinsic); + conf (entry, intrinsic); + + if ((attr->if_source == IFSRC_DECL && !attr->procedure) || attr->contained) + { + conf (external, subroutine); + conf (external, function); + } + + conf (allocatable, pointer); + conf_std (allocatable, dummy, GFC_STD_F2003); + conf_std (allocatable, function, GFC_STD_F2003); + conf_std (allocatable, result, GFC_STD_F2003); + conf (elemental, recursive); + + conf (in_common, dummy); + conf (in_common, allocatable); + conf (in_common, result); + + conf (dummy, result); + + conf (in_equivalence, use_assoc); + conf (in_equivalence, dummy); + conf (in_equivalence, target); + conf (in_equivalence, pointer); + conf (in_equivalence, function); + conf (in_equivalence, result); + conf (in_equivalence, entry); + conf (in_equivalence, allocatable); + conf (in_equivalence, threadprivate); + + conf (in_namelist, pointer); + conf (in_namelist, allocatable); + + conf (entry, result); + + conf (function, subroutine); + + if (!function && !subroutine) + conf (is_bind_c, dummy); + + conf (is_bind_c, cray_pointer); + conf (is_bind_c, cray_pointee); + conf (is_bind_c, allocatable); + conf (is_bind_c, elemental); + + /* Need to also get volatile attr, according to 5.1 of F2003 draft. + Parameter conflict caught below. Also, value cannot be specified + for a dummy procedure. */ + + /* Cray pointer/pointee conflicts. */ + conf (cray_pointer, cray_pointee); + conf (cray_pointer, dimension); + conf (cray_pointer, pointer); + conf (cray_pointer, target); + conf (cray_pointer, allocatable); + conf (cray_pointer, external); + conf (cray_pointer, intrinsic); + conf (cray_pointer, in_namelist); + conf (cray_pointer, function); + conf (cray_pointer, subroutine); + conf (cray_pointer, entry); + + conf (cray_pointee, allocatable); + conf (cray_pointee, intent); + conf (cray_pointee, optional); + conf (cray_pointee, dummy); + conf (cray_pointee, target); + conf (cray_pointee, intrinsic); + conf (cray_pointee, pointer); + conf (cray_pointee, entry); + conf (cray_pointee, in_common); + conf (cray_pointee, in_equivalence); + conf (cray_pointee, threadprivate); + + conf (data, dummy); + conf (data, function); + conf (data, result); + conf (data, allocatable); + conf (data, use_assoc); + + conf (value, pointer) + conf (value, allocatable) + conf (value, subroutine) + conf (value, function) + conf (value, volatile_) + conf (value, dimension) + conf (value, external) + + if (attr->value + && (attr->intent == INTENT_OUT || attr->intent == INTENT_INOUT)) + { + a1 = value; + a2 = attr->intent == INTENT_OUT ? intent_out : intent_inout; + goto conflict; + } + + conf (is_protected, intrinsic) + conf (is_protected, external) + conf (is_protected, in_common) + + conf (volatile_, intrinsic) + conf (volatile_, external) + + if (attr->volatile_ && attr->intent == INTENT_IN) + { + a1 = volatile_; + a2 = intent_in; + goto conflict; + } + + conf (procedure, allocatable) + conf (procedure, dimension) + conf (procedure, intrinsic) + conf (procedure, is_protected) + conf (procedure, target) + conf (procedure, value) + conf (procedure, volatile_) + conf (procedure, entry) + + a1 = gfc_code2string (flavors, attr->flavor); + + if (attr->in_namelist + && attr->flavor != FL_VARIABLE + && attr->flavor != FL_PROCEDURE + && attr->flavor != FL_UNKNOWN) + { + a2 = in_namelist; + goto conflict; + } + + switch (attr->flavor) + { + case FL_PROGRAM: + case FL_BLOCK_DATA: + case FL_MODULE: + case FL_LABEL: + conf2 (dimension); + conf2 (dummy); + conf2 (volatile_); + conf2 (pointer); + conf2 (is_protected); + conf2 (target); + conf2 (external); + conf2 (intrinsic); + conf2 (allocatable); + conf2 (result); + conf2 (in_namelist); + conf2 (optional); + conf2 (function); + conf2 (subroutine); + conf2 (threadprivate); + + if (attr->access == ACCESS_PUBLIC || attr->access == ACCESS_PRIVATE) + { + a2 = attr->access == ACCESS_PUBLIC ? publik : privat; + gfc_error ("%s attribute applied to %s %s at %L", a2, a1, + name, where); + return FAILURE; + } + + if (attr->is_bind_c) + { + gfc_error_now ("BIND(C) applied to %s %s at %L", a1, name, where); + return FAILURE; + } + + break; + + case FL_VARIABLE: + break; + + case FL_NAMELIST: + conf2 (result); + break; + + case FL_PROCEDURE: + /* Conflicts with INTENT will be checked at resolution stage, + see "resolve_fl_procedure". */ + + if (attr->subroutine) + { + conf2 (target); + conf2 (allocatable); + conf2 (result); + conf2 (in_namelist); + conf2 (dimension); + conf2 (function); + conf2 (threadprivate); + } + + if (!attr->proc_pointer) + conf2 (in_common); + + switch (attr->proc) + { + case PROC_ST_FUNCTION: + conf2 (dummy); + break; + + case PROC_MODULE: + conf2 (dummy); + break; + + case PROC_DUMMY: + conf2 (result); + conf2 (threadprivate); + break; + + default: + break; + } + + break; + + case FL_DERIVED: + conf2 (dummy); + conf2 (pointer); + conf2 (target); + conf2 (external); + conf2 (intrinsic); + conf2 (allocatable); + conf2 (optional); + conf2 (entry); + conf2 (function); + conf2 (subroutine); + conf2 (threadprivate); + conf2 (result); + + if (attr->intent != INTENT_UNKNOWN) + { + a2 = intent; + goto conflict; + } + break; + + case FL_PARAMETER: + conf2 (external); + conf2 (intrinsic); + conf2 (optional); + conf2 (allocatable); + conf2 (function); + conf2 (subroutine); + conf2 (entry); + conf2 (pointer); + conf2 (is_protected); + conf2 (target); + conf2 (dummy); + conf2 (in_common); + conf2 (value); + conf2 (volatile_); + conf2 (threadprivate); + conf2 (value); + conf2 (is_bind_c); + conf2 (result); + break; + + default: + break; + } + + return SUCCESS; + +conflict: + if (name == NULL) + gfc_error ("%s attribute conflicts with %s attribute at %L", + a1, a2, where); + else + gfc_error ("%s attribute conflicts with %s attribute in '%s' at %L", + a1, a2, name, where); + + return FAILURE; + +conflict_std: + if (name == NULL) + { + return gfc_notify_std (standard, "Fortran 2003: %s attribute " + "with %s attribute at %L", a1, a2, + where); + } + else + { + return gfc_notify_std (standard, "Fortran 2003: %s attribute " + "with %s attribute in '%s' at %L", + a1, a2, name, where); + } +} + +#undef conf +#undef conf2 +#undef conf_std + + +/* Mark a symbol as referenced. */ + +void +gfc_set_sym_referenced (gfc_symbol *sym) +{ + + if (sym->attr.referenced) + return; + + sym->attr.referenced = 1; + + /* Remember which order dummy variables are accessed in. */ + if (sym->attr.dummy) + sym->dummy_order = next_dummy_order++; +} + + +/* Common subroutine called by attribute changing subroutines in order + to prevent them from changing a symbol that has been + use-associated. Returns zero if it is OK to change the symbol, + nonzero if not. */ + +static int +check_used (symbol_attribute *attr, const char *name, locus *where) +{ + + if (attr->use_assoc == 0) + return 0; + + if (where == NULL) + where = &gfc_current_locus; + + if (name == NULL) + gfc_error ("Cannot change attributes of USE-associated symbol at %L", + where); + else + gfc_error ("Cannot change attributes of USE-associated symbol %s at %L", + name, where); + + return 1; +} + + +/* Generate an error because of a duplicate attribute. */ + +static void +duplicate_attr (const char *attr, locus *where) +{ + + if (where == NULL) + where = &gfc_current_locus; + + gfc_error ("Duplicate %s attribute specified at %L", attr, where); +} + + +/* Called from decl.c (attr_decl1) to check attributes, when declared + separately. */ + +gfc_try +gfc_add_attribute (symbol_attribute *attr, locus *where) +{ + + if (check_used (attr, NULL, where)) + return FAILURE; + + return check_conflict (attr, NULL, where); +} + +gfc_try +gfc_add_allocatable (symbol_attribute *attr, locus *where) +{ + + if (check_used (attr, NULL, where)) + return FAILURE; + + if (attr->allocatable) + { + duplicate_attr ("ALLOCATABLE", where); + return FAILURE; + } + + if (attr->flavor == FL_PROCEDURE && attr->if_source == IFSRC_IFBODY + && gfc_find_state (COMP_INTERFACE) == FAILURE) + { + gfc_error ("ALLOCATABLE specified outside of INTERFACE body at %L", + where); + return FAILURE; + } + + attr->allocatable = 1; + return check_conflict (attr, NULL, where); +} + + +gfc_try +gfc_add_dimension (symbol_attribute *attr, const char *name, locus *where) +{ + + if (check_used (attr, name, where)) + return FAILURE; + + if (attr->dimension) + { + duplicate_attr ("DIMENSION", where); + return FAILURE; + } + + if (attr->flavor == FL_PROCEDURE && attr->if_source == IFSRC_IFBODY + && gfc_find_state (COMP_INTERFACE) == FAILURE) + { + gfc_error ("DIMENSION specified for '%s' outside its INTERFACE body " + "at %L", name, where); + return FAILURE; + } + + attr->dimension = 1; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_external (symbol_attribute *attr, locus *where) +{ + + if (check_used (attr, NULL, where)) + return FAILURE; + + if (attr->external) + { + duplicate_attr ("EXTERNAL", where); + return FAILURE; + } + + if (attr->pointer && attr->if_source != IFSRC_IFBODY) + { + attr->pointer = 0; + attr->proc_pointer = 1; + } + + attr->external = 1; + + return check_conflict (attr, NULL, where); +} + + +gfc_try +gfc_add_intrinsic (symbol_attribute *attr, locus *where) +{ + + if (check_used (attr, NULL, where)) + return FAILURE; + + if (attr->intrinsic) + { + duplicate_attr ("INTRINSIC", where); + return FAILURE; + } + + attr->intrinsic = 1; + + return check_conflict (attr, NULL, where); +} + + +gfc_try +gfc_add_optional (symbol_attribute *attr, locus *where) +{ + + if (check_used (attr, NULL, where)) + return FAILURE; + + if (attr->optional) + { + duplicate_attr ("OPTIONAL", where); + return FAILURE; + } + + attr->optional = 1; + return check_conflict (attr, NULL, where); +} + + +gfc_try +gfc_add_pointer (symbol_attribute *attr, locus *where) +{ + + if (check_used (attr, NULL, where)) + return FAILURE; + + if (attr->pointer && !(attr->if_source == IFSRC_IFBODY + && gfc_find_state (COMP_INTERFACE) == FAILURE)) + { + duplicate_attr ("POINTER", where); + return FAILURE; + } + + if (attr->procedure || (attr->external && attr->if_source != IFSRC_IFBODY) + || (attr->if_source == IFSRC_IFBODY + && gfc_find_state (COMP_INTERFACE) == FAILURE)) + attr->proc_pointer = 1; + else + attr->pointer = 1; + + return check_conflict (attr, NULL, where); +} + + +gfc_try +gfc_add_cray_pointer (symbol_attribute *attr, locus *where) +{ + + if (check_used (attr, NULL, where)) + return FAILURE; + + attr->cray_pointer = 1; + return check_conflict (attr, NULL, where); +} + + +gfc_try +gfc_add_cray_pointee (symbol_attribute *attr, locus *where) +{ + + if (check_used (attr, NULL, where)) + return FAILURE; + + if (attr->cray_pointee) + { + gfc_error ("Cray Pointee at %L appears in multiple pointer()" + " statements", where); + return FAILURE; + } + + attr->cray_pointee = 1; + return check_conflict (attr, NULL, where); +} + + +gfc_try +gfc_add_protected (symbol_attribute *attr, const char *name, locus *where) +{ + if (check_used (attr, name, where)) + return FAILURE; + + if (attr->is_protected) + { + if (gfc_notify_std (GFC_STD_LEGACY, + "Duplicate PROTECTED attribute specified at %L", + where) + == FAILURE) + return FAILURE; + } + + attr->is_protected = 1; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_result (symbol_attribute *attr, const char *name, locus *where) +{ + + if (check_used (attr, name, where)) + return FAILURE; + + attr->result = 1; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_save (symbol_attribute *attr, const char *name, locus *where) +{ + + if (check_used (attr, name, where)) + return FAILURE; + + if (gfc_pure (NULL)) + { + gfc_error + ("SAVE attribute at %L cannot be specified in a PURE procedure", + where); + return FAILURE; + } + + if (attr->save == SAVE_EXPLICIT) + { + if (gfc_notify_std (GFC_STD_LEGACY, + "Duplicate SAVE attribute specified at %L", + where) + == FAILURE) + return FAILURE; + } + + attr->save = SAVE_EXPLICIT; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_value (symbol_attribute *attr, const char *name, locus *where) +{ + + if (check_used (attr, name, where)) + return FAILURE; + + if (attr->value) + { + if (gfc_notify_std (GFC_STD_LEGACY, + "Duplicate VALUE attribute specified at %L", + where) + == FAILURE) + return FAILURE; + } + + attr->value = 1; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_volatile (symbol_attribute *attr, const char *name, locus *where) +{ + /* No check_used needed as 11.2.1 of the F2003 standard allows + that the local identifier made accessible by a use statement can be + given a VOLATILE attribute. */ + + if (attr->volatile_ && attr->volatile_ns == gfc_current_ns) + if (gfc_notify_std (GFC_STD_LEGACY, + "Duplicate VOLATILE attribute specified at %L", where) + == FAILURE) + return FAILURE; + + attr->volatile_ = 1; + attr->volatile_ns = gfc_current_ns; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_threadprivate (symbol_attribute *attr, const char *name, locus *where) +{ + + if (check_used (attr, name, where)) + return FAILURE; + + if (attr->threadprivate) + { + duplicate_attr ("THREADPRIVATE", where); + return FAILURE; + } + + attr->threadprivate = 1; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_target (symbol_attribute *attr, locus *where) +{ + + if (check_used (attr, NULL, where)) + return FAILURE; + + if (attr->target) + { + duplicate_attr ("TARGET", where); + return FAILURE; + } + + attr->target = 1; + return check_conflict (attr, NULL, where); +} + + +gfc_try +gfc_add_dummy (symbol_attribute *attr, const char *name, locus *where) +{ + + if (check_used (attr, name, where)) + return FAILURE; + + /* Duplicate dummy arguments are allowed due to ENTRY statements. */ + attr->dummy = 1; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_in_common (symbol_attribute *attr, const char *name, locus *where) +{ + + if (check_used (attr, name, where)) + return FAILURE; + + /* Duplicate attribute already checked for. */ + attr->in_common = 1; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_in_equivalence (symbol_attribute *attr, const char *name, locus *where) +{ + + /* Duplicate attribute already checked for. */ + attr->in_equivalence = 1; + if (check_conflict (attr, name, where) == FAILURE) + return FAILURE; + + if (attr->flavor == FL_VARIABLE) + return SUCCESS; + + return gfc_add_flavor (attr, FL_VARIABLE, name, where); +} + + +gfc_try +gfc_add_data (symbol_attribute *attr, const char *name, locus *where) +{ + + if (check_used (attr, name, where)) + return FAILURE; + + attr->data = 1; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_in_namelist (symbol_attribute *attr, const char *name, locus *where) +{ + + attr->in_namelist = 1; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_sequence (symbol_attribute *attr, const char *name, locus *where) +{ + + if (check_used (attr, name, where)) + return FAILURE; + + attr->sequence = 1; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_elemental (symbol_attribute *attr, locus *where) +{ + + if (check_used (attr, NULL, where)) + return FAILURE; + + if (attr->elemental) + { + duplicate_attr ("ELEMENTAL", where); + return FAILURE; + } + + attr->elemental = 1; + return check_conflict (attr, NULL, where); +} + + +gfc_try +gfc_add_pure (symbol_attribute *attr, locus *where) +{ + + if (check_used (attr, NULL, where)) + return FAILURE; + + if (attr->pure) + { + duplicate_attr ("PURE", where); + return FAILURE; + } + + attr->pure = 1; + return check_conflict (attr, NULL, where); +} + + +gfc_try +gfc_add_recursive (symbol_attribute *attr, locus *where) +{ + + if (check_used (attr, NULL, where)) + return FAILURE; + + if (attr->recursive) + { + duplicate_attr ("RECURSIVE", where); + return FAILURE; + } + + attr->recursive = 1; + return check_conflict (attr, NULL, where); +} + + +gfc_try +gfc_add_entry (symbol_attribute *attr, const char *name, locus *where) +{ + + if (check_used (attr, name, where)) + return FAILURE; + + if (attr->entry) + { + duplicate_attr ("ENTRY", where); + return FAILURE; + } + + attr->entry = 1; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_function (symbol_attribute *attr, const char *name, locus *where) +{ + + if (attr->flavor != FL_PROCEDURE + && gfc_add_flavor (attr, FL_PROCEDURE, name, where) == FAILURE) + return FAILURE; + + attr->function = 1; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_subroutine (symbol_attribute *attr, const char *name, locus *where) +{ + + if (attr->flavor != FL_PROCEDURE + && gfc_add_flavor (attr, FL_PROCEDURE, name, where) == FAILURE) + return FAILURE; + + attr->subroutine = 1; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_generic (symbol_attribute *attr, const char *name, locus *where) +{ + + if (attr->flavor != FL_PROCEDURE + && gfc_add_flavor (attr, FL_PROCEDURE, name, where) == FAILURE) + return FAILURE; + + attr->generic = 1; + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_proc (symbol_attribute *attr, const char *name, locus *where) +{ + + if (check_used (attr, NULL, where)) + return FAILURE; + + if (attr->flavor != FL_PROCEDURE + && gfc_add_flavor (attr, FL_PROCEDURE, name, where) == FAILURE) + return FAILURE; + + if (attr->procedure) + { + duplicate_attr ("PROCEDURE", where); + return FAILURE; + } + + attr->procedure = 1; + + return check_conflict (attr, NULL, where); +} + + +gfc_try +gfc_add_abstract (symbol_attribute* attr, locus* where) +{ + if (attr->abstract) + { + duplicate_attr ("ABSTRACT", where); + return FAILURE; + } + + attr->abstract = 1; + return SUCCESS; +} + + +/* Flavors are special because some flavors are not what Fortran + considers attributes and can be reaffirmed multiple times. */ + +gfc_try +gfc_add_flavor (symbol_attribute *attr, sym_flavor f, const char *name, + locus *where) +{ + + if ((f == FL_PROGRAM || f == FL_BLOCK_DATA || f == FL_MODULE + || f == FL_PARAMETER || f == FL_LABEL || f == FL_DERIVED + || f == FL_NAMELIST) && check_used (attr, name, where)) + return FAILURE; + + if (attr->flavor == f && f == FL_VARIABLE) + return SUCCESS; + + if (attr->flavor != FL_UNKNOWN) + { + if (where == NULL) + where = &gfc_current_locus; + + if (name) + gfc_error ("%s attribute of '%s' conflicts with %s attribute at %L", + gfc_code2string (flavors, attr->flavor), name, + gfc_code2string (flavors, f), where); + else + gfc_error ("%s attribute conflicts with %s attribute at %L", + gfc_code2string (flavors, attr->flavor), + gfc_code2string (flavors, f), where); + + return FAILURE; + } + + attr->flavor = f; + + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_procedure (symbol_attribute *attr, procedure_type t, + const char *name, locus *where) +{ + + if (check_used (attr, name, where)) + return FAILURE; + + if (attr->flavor != FL_PROCEDURE + && gfc_add_flavor (attr, FL_PROCEDURE, name, where) == FAILURE) + return FAILURE; + + if (where == NULL) + where = &gfc_current_locus; + + if (attr->proc != PROC_UNKNOWN) + { + gfc_error ("%s procedure at %L is already declared as %s procedure", + gfc_code2string (procedures, t), where, + gfc_code2string (procedures, attr->proc)); + + return FAILURE; + } + + attr->proc = t; + + /* Statement functions are always scalar and functions. */ + if (t == PROC_ST_FUNCTION + && ((!attr->function && gfc_add_function (attr, name, where) == FAILURE) + || attr->dimension)) + return FAILURE; + + return check_conflict (attr, name, where); +} + + +gfc_try +gfc_add_intent (symbol_attribute *attr, sym_intent intent, locus *where) +{ + + if (check_used (attr, NULL, where)) + return FAILURE; + + if (attr->intent == INTENT_UNKNOWN) + { + attr->intent = intent; + return check_conflict (attr, NULL, where); + } + + if (where == NULL) + where = &gfc_current_locus; + + gfc_error ("INTENT (%s) conflicts with INTENT(%s) at %L", + gfc_intent_string (attr->intent), + gfc_intent_string (intent), where); + + return FAILURE; +} + + +/* No checks for use-association in public and private statements. */ + +gfc_try +gfc_add_access (symbol_attribute *attr, gfc_access access, + const char *name, locus *where) +{ + + if (attr->access == ACCESS_UNKNOWN + || (attr->use_assoc && attr->access != ACCESS_PRIVATE)) + { + attr->access = access; + return check_conflict (attr, name, where); + } + + if (where == NULL) + where = &gfc_current_locus; + gfc_error ("ACCESS specification at %L was already specified", where); + + return FAILURE; +} + + +/* Set the is_bind_c field for the given symbol_attribute. */ + +gfc_try +gfc_add_is_bind_c (symbol_attribute *attr, const char *name, locus *where, + int is_proc_lang_bind_spec) +{ + + if (is_proc_lang_bind_spec == 0 && attr->flavor == FL_PROCEDURE) + gfc_error_now ("BIND(C) attribute at %L can only be used for " + "variables or common blocks", where); + else if (attr->is_bind_c) + gfc_error_now ("Duplicate BIND attribute specified at %L", where); + else + attr->is_bind_c = 1; + + if (where == NULL) + where = &gfc_current_locus; + + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: BIND(C) at %L", where) + == FAILURE) + return FAILURE; + + return check_conflict (attr, name, where); +} + + +/* Set the extension field for the given symbol_attribute. */ + +gfc_try +gfc_add_extension (symbol_attribute *attr, locus *where) +{ + if (where == NULL) + where = &gfc_current_locus; + + if (attr->extension) + gfc_error_now ("Duplicate EXTENDS attribute specified at %L", where); + else + attr->extension = 1; + + if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: EXTENDS at %L", where) + == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +gfc_try +gfc_add_explicit_interface (gfc_symbol *sym, ifsrc source, + gfc_formal_arglist * formal, locus *where) +{ + + if (check_used (&sym->attr, sym->name, where)) + return FAILURE; + + if (where == NULL) + where = &gfc_current_locus; + + if (sym->attr.if_source != IFSRC_UNKNOWN + && sym->attr.if_source != IFSRC_DECL) + { + gfc_error ("Symbol '%s' at %L already has an explicit interface", + sym->name, where); + return FAILURE; + } + + if (source == IFSRC_IFBODY && (sym->attr.dimension || sym->attr.allocatable)) + { + gfc_error ("'%s' at %L has attributes specified outside its INTERFACE " + "body", sym->name, where); + return FAILURE; + } + + sym->formal = formal; + sym->attr.if_source = source; + + return SUCCESS; +} + + +/* Add a type to a symbol. */ + +gfc_try +gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where) +{ + sym_flavor flavor; + + if (where == NULL) + where = &gfc_current_locus; + + if (sym->ts.type != BT_UNKNOWN) + { + const char *msg = "Symbol '%s' at %L already has basic type of %s"; + if (!(sym->ts.type == ts->type + && (sym->attr.flavor == FL_PROCEDURE || sym->attr.result)) + || gfc_notification_std (GFC_STD_GNU) == ERROR + || pedantic) + { + gfc_error (msg, sym->name, where, gfc_basic_typename (sym->ts.type)); + return FAILURE; + } + if (gfc_notify_std (GFC_STD_GNU, msg, sym->name, where, + gfc_basic_typename (sym->ts.type)) == FAILURE) + return FAILURE; + if (gfc_option.warn_surprising) + gfc_warning (msg, sym->name, where, gfc_basic_typename (sym->ts.type)); + } + + flavor = sym->attr.flavor; + + if (flavor == FL_PROGRAM || flavor == FL_BLOCK_DATA || flavor == FL_MODULE + || flavor == FL_LABEL + || (flavor == FL_PROCEDURE && sym->attr.subroutine) + || flavor == FL_DERIVED || flavor == FL_NAMELIST) + { + gfc_error ("Symbol '%s' at %L cannot have a type", sym->name, where); + return FAILURE; + } + + sym->ts = *ts; + return SUCCESS; +} + + +/* Clears all attributes. */ + +void +gfc_clear_attr (symbol_attribute *attr) +{ + memset (attr, 0, sizeof (symbol_attribute)); +} + + +/* Check for missing attributes in the new symbol. Currently does + nothing, but it's not clear that it is unnecessary yet. */ + +gfc_try +gfc_missing_attr (symbol_attribute *attr ATTRIBUTE_UNUSED, + locus *where ATTRIBUTE_UNUSED) +{ + + return SUCCESS; +} + + +/* Copy an attribute to a symbol attribute, bit by bit. Some + attributes have a lot of side-effects but cannot be present given + where we are called from, so we ignore some bits. */ + +gfc_try +gfc_copy_attr (symbol_attribute *dest, symbol_attribute *src, locus *where) +{ + int is_proc_lang_bind_spec; + + if (src->allocatable && gfc_add_allocatable (dest, where) == FAILURE) + goto fail; + + if (src->dimension && gfc_add_dimension (dest, NULL, where) == FAILURE) + goto fail; + if (src->optional && gfc_add_optional (dest, where) == FAILURE) + goto fail; + if (src->pointer && gfc_add_pointer (dest, where) == FAILURE) + goto fail; + if (src->is_protected && gfc_add_protected (dest, NULL, where) == FAILURE) + goto fail; + if (src->save && gfc_add_save (dest, NULL, where) == FAILURE) + goto fail; + if (src->value && gfc_add_value (dest, NULL, where) == FAILURE) + goto fail; + if (src->volatile_ && gfc_add_volatile (dest, NULL, where) == FAILURE) + goto fail; + if (src->threadprivate + && gfc_add_threadprivate (dest, NULL, where) == FAILURE) + goto fail; + if (src->target && gfc_add_target (dest, where) == FAILURE) + goto fail; + if (src->dummy && gfc_add_dummy (dest, NULL, where) == FAILURE) + goto fail; + if (src->result && gfc_add_result (dest, NULL, where) == FAILURE) + goto fail; + if (src->entry) + dest->entry = 1; + + if (src->in_namelist && gfc_add_in_namelist (dest, NULL, where) == FAILURE) + goto fail; + + if (src->in_common && gfc_add_in_common (dest, NULL, where) == FAILURE) + goto fail; + + if (src->generic && gfc_add_generic (dest, NULL, where) == FAILURE) + goto fail; + if (src->function && gfc_add_function (dest, NULL, where) == FAILURE) + goto fail; + if (src->subroutine && gfc_add_subroutine (dest, NULL, where) == FAILURE) + goto fail; + + if (src->sequence && gfc_add_sequence (dest, NULL, where) == FAILURE) + goto fail; + if (src->elemental && gfc_add_elemental (dest, where) == FAILURE) + goto fail; + if (src->pure && gfc_add_pure (dest, where) == FAILURE) + goto fail; + if (src->recursive && gfc_add_recursive (dest, where) == FAILURE) + goto fail; + + if (src->flavor != FL_UNKNOWN + && gfc_add_flavor (dest, src->flavor, NULL, where) == FAILURE) + goto fail; + + if (src->intent != INTENT_UNKNOWN + && gfc_add_intent (dest, src->intent, where) == FAILURE) + goto fail; + + if (src->access != ACCESS_UNKNOWN + && gfc_add_access (dest, src->access, NULL, where) == FAILURE) + goto fail; + + if (gfc_missing_attr (dest, where) == FAILURE) + goto fail; + + if (src->cray_pointer && gfc_add_cray_pointer (dest, where) == FAILURE) + goto fail; + if (src->cray_pointee && gfc_add_cray_pointee (dest, where) == FAILURE) + goto fail; + + is_proc_lang_bind_spec = (src->flavor == FL_PROCEDURE ? 1 : 0); + if (src->is_bind_c + && gfc_add_is_bind_c (dest, NULL, where, is_proc_lang_bind_spec) + != SUCCESS) + return FAILURE; + + if (src->is_c_interop) + dest->is_c_interop = 1; + if (src->is_iso_c) + dest->is_iso_c = 1; + + if (src->external && gfc_add_external (dest, where) == FAILURE) + goto fail; + if (src->intrinsic && gfc_add_intrinsic (dest, where) == FAILURE) + goto fail; + if (src->proc_pointer) + dest->proc_pointer = 1; + + return SUCCESS; + +fail: + return FAILURE; +} + + +/************** Component name management ************/ + +/* Component names of a derived type form their own little namespaces + that are separate from all other spaces. The space is composed of + a singly linked list of gfc_component structures whose head is + located in the parent symbol. */ + + +/* Add a component name to a symbol. The call fails if the name is + already present. On success, the component pointer is modified to + point to the additional component structure. */ + +gfc_try +gfc_add_component (gfc_symbol *sym, const char *name, + gfc_component **component) +{ + gfc_component *p, *tail; + + tail = NULL; + + for (p = sym->components; p; p = p->next) + { + if (strcmp (p->name, name) == 0) + { + gfc_error ("Component '%s' at %C already declared at %L", + name, &p->loc); + return FAILURE; + } + + tail = p; + } + + if (sym->attr.extension + && gfc_find_component (sym->components->ts.derived, name, true, true)) + { + gfc_error ("Component '%s' at %C already in the parent type " + "at %L", name, &sym->components->ts.derived->declared_at); + return FAILURE; + } + + /* Allocate a new component. */ + p = gfc_get_component (); + + if (tail == NULL) + sym->components = p; + else + tail->next = p; + + p->name = gfc_get_string (name); + p->loc = gfc_current_locus; + + *component = p; + return SUCCESS; +} + + +/* Recursive function to switch derived types of all symbol in a + namespace. */ + +static void +switch_types (gfc_symtree *st, gfc_symbol *from, gfc_symbol *to) +{ + gfc_symbol *sym; + + if (st == NULL) + return; + + sym = st->n.sym; + if (sym->ts.type == BT_DERIVED && sym->ts.derived == from) + sym->ts.derived = to; + + switch_types (st->left, from, to); + switch_types (st->right, from, to); +} + + +/* This subroutine is called when a derived type is used in order to + make the final determination about which version to use. The + standard requires that a type be defined before it is 'used', but + such types can appear in IMPLICIT statements before the actual + definition. 'Using' in this context means declaring a variable to + be that type or using the type constructor. + + If a type is used and the components haven't been defined, then we + have to have a derived type in a parent unit. We find the node in + the other namespace and point the symtree node in this namespace to + that node. Further reference to this name point to the correct + node. If we can't find the node in a parent namespace, then we have + an error. + + This subroutine takes a pointer to a symbol node and returns a + pointer to the translated node or NULL for an error. Usually there + is no translation and we return the node we were passed. */ + +gfc_symbol * +gfc_use_derived (gfc_symbol *sym) +{ + gfc_symbol *s; + gfc_typespec *t; + gfc_symtree *st; + int i; + + if (sym->components != NULL || sym->attr.zero_comp) + return sym; /* Already defined. */ + + if (sym->ns->parent == NULL) + goto bad; + + if (gfc_find_symbol (sym->name, sym->ns->parent, 1, &s)) + { + gfc_error ("Symbol '%s' at %C is ambiguous", sym->name); + return NULL; + } + + if (s == NULL || s->attr.flavor != FL_DERIVED) + goto bad; + + /* Get rid of symbol sym, translating all references to s. */ + for (i = 0; i < GFC_LETTERS; i++) + { + t = &sym->ns->default_type[i]; + if (t->derived == sym) + t->derived = s; + } + + st = gfc_find_symtree (sym->ns->sym_root, sym->name); + st->n.sym = s; + + s->refs++; + + /* Unlink from list of modified symbols. */ + gfc_commit_symbol (sym); + + switch_types (sym->ns->sym_root, sym, s); + + /* TODO: Also have to replace sym -> s in other lists like + namelists, common lists and interface lists. */ + gfc_free_symbol (sym); + + return s; + +bad: + gfc_error ("Derived type '%s' at %C is being used before it is defined", + sym->name); + return NULL; +} + + +/* Given a derived type node and a component name, try to locate the + component structure. Returns the NULL pointer if the component is + not found or the components are private. If noaccess is set, no access + checks are done. */ + +gfc_component * +gfc_find_component (gfc_symbol *sym, const char *name, + bool noaccess, bool silent) +{ + gfc_component *p; + + if (name == NULL) + return NULL; + + sym = gfc_use_derived (sym); + + if (sym == NULL) + return NULL; + + for (p = sym->components; p; p = p->next) + if (strcmp (p->name, name) == 0) + break; + + if (p == NULL + && sym->attr.extension + && sym->components->ts.type == BT_DERIVED) + { + p = gfc_find_component (sym->components->ts.derived, name, + noaccess, silent); + /* Do not overwrite the error. */ + if (p == NULL) + return p; + } + + if (p == NULL && !silent) + gfc_error ("'%s' at %C is not a member of the '%s' structure", + name, sym->name); + + else if (sym->attr.use_assoc && !noaccess) + { + if (p->attr.access == ACCESS_PRIVATE) + { + if (!silent) + gfc_error ("Component '%s' at %C is a PRIVATE component of '%s'", + name, sym->name); + return NULL; + } + + /* If there were components given and all components are private, error + out at this place. */ + if (p->attr.access != ACCESS_PUBLIC && sym->component_access == ACCESS_PRIVATE) + { + if (!silent) + gfc_error ("All components of '%s' are PRIVATE in structure" + " constructor at %C", sym->name); + return NULL; + } + } + + return p; +} + + +/* Given a symbol, free all of the component structures and everything + they point to. */ + +static void +free_components (gfc_component *p) +{ + gfc_component *q; + + for (; p; p = q) + { + q = p->next; + + gfc_free_array_spec (p->as); + gfc_free_expr (p->initializer); + + gfc_free (p); + } +} + + +/******************** Statement label management ********************/ + +/* Comparison function for statement labels, used for managing the + binary tree. */ + +static int +compare_st_labels (void *a1, void *b1) +{ + int a = ((gfc_st_label *) a1)->value; + int b = ((gfc_st_label *) b1)->value; + + return (b - a); +} + + +/* Free a single gfc_st_label structure, making sure the tree is not + messed up. This function is called only when some parse error + occurs. */ + +void +gfc_free_st_label (gfc_st_label *label) +{ + + if (label == NULL) + return; + + gfc_delete_bbt (&gfc_current_ns->st_labels, label, compare_st_labels); + + if (label->format != NULL) + gfc_free_expr (label->format); + + gfc_free (label); +} + + +/* Free a whole tree of gfc_st_label structures. */ + +static void +free_st_labels (gfc_st_label *label) +{ + + if (label == NULL) + return; + + free_st_labels (label->left); + free_st_labels (label->right); + + if (label->format != NULL) + gfc_free_expr (label->format); + gfc_free (label); +} + + +/* Given a label number, search for and return a pointer to the label + structure, creating it if it does not exist. */ + +gfc_st_label * +gfc_get_st_label (int labelno) +{ + gfc_st_label *lp; + + /* First see if the label is already in this namespace. */ + lp = gfc_current_ns->st_labels; + while (lp) + { + if (lp->value == labelno) + return lp; + + if (lp->value < labelno) + lp = lp->left; + else + lp = lp->right; + } + + lp = XCNEW (gfc_st_label); + + lp->value = labelno; + lp->defined = ST_LABEL_UNKNOWN; + lp->referenced = ST_LABEL_UNKNOWN; + + gfc_insert_bbt (&gfc_current_ns->st_labels, lp, compare_st_labels); + + return lp; +} + + +/* Called when a statement with a statement label is about to be + accepted. We add the label to the list of the current namespace, + making sure it hasn't been defined previously and referenced + correctly. */ + +void +gfc_define_st_label (gfc_st_label *lp, gfc_sl_type type, locus *label_locus) +{ + int labelno; + + labelno = lp->value; + + if (lp->defined != ST_LABEL_UNKNOWN) + gfc_error ("Duplicate statement label %d at %L and %L", labelno, + &lp->where, label_locus); + else + { + lp->where = *label_locus; + + switch (type) + { + case ST_LABEL_FORMAT: + if (lp->referenced == ST_LABEL_TARGET) + gfc_error ("Label %d at %C already referenced as branch target", + labelno); + else + lp->defined = ST_LABEL_FORMAT; + + break; + + case ST_LABEL_TARGET: + if (lp->referenced == ST_LABEL_FORMAT) + gfc_error ("Label %d at %C already referenced as a format label", + labelno); + else + lp->defined = ST_LABEL_TARGET; + + break; + + default: + lp->defined = ST_LABEL_BAD_TARGET; + lp->referenced = ST_LABEL_BAD_TARGET; + } + } +} + + +/* Reference a label. Given a label and its type, see if that + reference is consistent with what is known about that label, + updating the unknown state. Returns FAILURE if something goes + wrong. */ + +gfc_try +gfc_reference_st_label (gfc_st_label *lp, gfc_sl_type type) +{ + gfc_sl_type label_type; + int labelno; + gfc_try rc; + + if (lp == NULL) + return SUCCESS; + + labelno = lp->value; + + if (lp->defined != ST_LABEL_UNKNOWN) + label_type = lp->defined; + else + { + label_type = lp->referenced; + lp->where = gfc_current_locus; + } + + if (label_type == ST_LABEL_FORMAT && type == ST_LABEL_TARGET) + { + gfc_error ("Label %d at %C previously used as a FORMAT label", labelno); + rc = FAILURE; + goto done; + } + + if ((label_type == ST_LABEL_TARGET || label_type == ST_LABEL_BAD_TARGET) + && type == ST_LABEL_FORMAT) + { + gfc_error ("Label %d at %C previously used as branch target", labelno); + rc = FAILURE; + goto done; + } + + lp->referenced = type; + rc = SUCCESS; + +done: + return rc; +} + + +/*******A helper function for creating new expressions*************/ + + +gfc_expr * +gfc_lval_expr_from_sym (gfc_symbol *sym) +{ + gfc_expr *lval; + lval = gfc_get_expr (); + lval->expr_type = EXPR_VARIABLE; + lval->where = sym->declared_at; + lval->ts = sym->ts; + lval->symtree = gfc_find_symtree (sym->ns->sym_root, sym->name); + + /* It will always be a full array. */ + lval->rank = sym->as ? sym->as->rank : 0; + if (lval->rank) + { + lval->ref = gfc_get_ref (); + lval->ref->type = REF_ARRAY; + lval->ref->u.ar.type = AR_FULL; + lval->ref->u.ar.dimen = lval->rank; + lval->ref->u.ar.where = sym->declared_at; + lval->ref->u.ar.as = sym->as; + } + + return lval; +} + + +/************** Symbol table management subroutines ****************/ + +/* Basic details: Fortran 95 requires a potentially unlimited number + of distinct namespaces when compiling a program unit. This case + occurs during a compilation of internal subprograms because all of + the internal subprograms must be read before we can start + generating code for the host. + + Given the tricky nature of the Fortran grammar, we must be able to + undo changes made to a symbol table if the current interpretation + of a statement is found to be incorrect. Whenever a symbol is + looked up, we make a copy of it and link to it. All of these + symbols are kept in a singly linked list so that we can commit or + undo the changes at a later time. + + A symtree may point to a symbol node outside of its namespace. In + this case, that symbol has been used as a host associated variable + at some previous time. */ + +/* Allocate a new namespace structure. Copies the implicit types from + PARENT if PARENT_TYPES is set. */ + +gfc_namespace * +gfc_get_namespace (gfc_namespace *parent, int parent_types) +{ + gfc_namespace *ns; + gfc_typespec *ts; + gfc_intrinsic_op in; + int i; + + ns = XCNEW (gfc_namespace); + ns->sym_root = NULL; + ns->uop_root = NULL; + ns->finalizers = NULL; + ns->default_access = ACCESS_UNKNOWN; + ns->parent = parent; + + for (in = GFC_INTRINSIC_BEGIN; in != GFC_INTRINSIC_END; in++) + ns->operator_access[in] = ACCESS_UNKNOWN; + + /* Initialize default implicit types. */ + for (i = 'a'; i <= 'z'; i++) + { + ns->set_flag[i - 'a'] = 0; + ts = &ns->default_type[i - 'a']; + + if (parent_types && ns->parent != NULL) + { + /* Copy parent settings. */ + *ts = ns->parent->default_type[i - 'a']; + continue; + } + + if (gfc_option.flag_implicit_none != 0) + { + gfc_clear_ts (ts); + continue; + } + + if ('i' <= i && i <= 'n') + { + ts->type = BT_INTEGER; + ts->kind = gfc_default_integer_kind; + } + else + { + ts->type = BT_REAL; + ts->kind = gfc_default_real_kind; + } + } + + ns->refs = 1; + + return ns; +} + + +/* Comparison function for symtree nodes. */ + +static int +compare_symtree (void *_st1, void *_st2) +{ + gfc_symtree *st1, *st2; + + st1 = (gfc_symtree *) _st1; + st2 = (gfc_symtree *) _st2; + + return strcmp (st1->name, st2->name); +} + + +/* Allocate a new symtree node and associate it with the new symbol. */ + +gfc_symtree * +gfc_new_symtree (gfc_symtree **root, const char *name) +{ + gfc_symtree *st; + + st = XCNEW (gfc_symtree); + st->name = gfc_get_string (name); + st->typebound = NULL; + + gfc_insert_bbt (root, st, compare_symtree); + return st; +} + + +/* Delete a symbol from the tree. Does not free the symbol itself! */ + +void +gfc_delete_symtree (gfc_symtree **root, const char *name) +{ + gfc_symtree st, *st0; + + st0 = gfc_find_symtree (*root, name); + + st.name = gfc_get_string (name); + gfc_delete_bbt (root, &st, compare_symtree); + + gfc_free (st0); +} + + +/* Given a root symtree node and a name, try to find the symbol within + the namespace. Returns NULL if the symbol is not found. */ + +gfc_symtree * +gfc_find_symtree (gfc_symtree *st, const char *name) +{ + int c; + + while (st != NULL) + { + c = strcmp (name, st->name); + if (c == 0) + return st; + + st = (c < 0) ? st->left : st->right; + } + + return NULL; +} + + +/* Return a symtree node with a name that is guaranteed to be unique + within the namespace and corresponds to an illegal fortran name. */ + +gfc_symtree * +gfc_get_unique_symtree (gfc_namespace *ns) +{ + char name[GFC_MAX_SYMBOL_LEN + 1]; + static int serial = 0; + + sprintf (name, "@%d", serial++); + return gfc_new_symtree (&ns->sym_root, name); +} + + +/* Given a name find a user operator node, creating it if it doesn't + exist. These are much simpler than symbols because they can't be + ambiguous with one another. */ + +gfc_user_op * +gfc_get_uop (const char *name) +{ + gfc_user_op *uop; + gfc_symtree *st; + + st = gfc_find_symtree (gfc_current_ns->uop_root, name); + if (st != NULL) + return st->n.uop; + + st = gfc_new_symtree (&gfc_current_ns->uop_root, name); + + uop = st->n.uop = XCNEW (gfc_user_op); + uop->name = gfc_get_string (name); + uop->access = ACCESS_UNKNOWN; + uop->ns = gfc_current_ns; + + return uop; +} + + +/* Given a name find the user operator node. Returns NULL if it does + not exist. */ + +gfc_user_op * +gfc_find_uop (const char *name, gfc_namespace *ns) +{ + gfc_symtree *st; + + if (ns == NULL) + ns = gfc_current_ns; + + st = gfc_find_symtree (ns->uop_root, name); + return (st == NULL) ? NULL : st->n.uop; +} + + +/* Remove a gfc_symbol structure and everything it points to. */ + +void +gfc_free_symbol (gfc_symbol *sym) +{ + + if (sym == NULL) + return; + + gfc_free_array_spec (sym->as); + + free_components (sym->components); + + gfc_free_expr (sym->value); + + gfc_free_namelist (sym->namelist); + + gfc_free_namespace (sym->formal_ns); + + if (!sym->attr.generic_copy) + gfc_free_interface (sym->generic); + + gfc_free_formal_arglist (sym->formal); + + gfc_free_namespace (sym->f2k_derived); + + gfc_free (sym); +} + + +/* Allocate and initialize a new symbol node. */ + +gfc_symbol * +gfc_new_symbol (const char *name, gfc_namespace *ns) +{ + gfc_symbol *p; + + p = XCNEW (gfc_symbol); + + gfc_clear_ts (&p->ts); + gfc_clear_attr (&p->attr); + p->ns = ns; + + p->declared_at = gfc_current_locus; + + if (strlen (name) > GFC_MAX_SYMBOL_LEN) + gfc_internal_error ("new_symbol(): Symbol name too long"); + + p->name = gfc_get_string (name); + + /* Make sure flags for symbol being C bound are clear initially. */ + p->attr.is_bind_c = 0; + p->attr.is_iso_c = 0; + /* Make sure the binding label field has a Nul char to start. */ + p->binding_label[0] = '\0'; + + /* Clear the ptrs we may need. */ + p->common_block = NULL; + p->f2k_derived = NULL; + + return p; +} + + +/* Generate an error if a symbol is ambiguous. */ + +static void +ambiguous_symbol (const char *name, gfc_symtree *st) +{ + + if (st->n.sym->module) + gfc_error ("Name '%s' at %C is an ambiguous reference to '%s' " + "from module '%s'", name, st->n.sym->name, st->n.sym->module); + else + gfc_error ("Name '%s' at %C is an ambiguous reference to '%s' " + "from current program unit", name, st->n.sym->name); +} + + +/* Search for a symtree starting in the current namespace, resorting to + any parent namespaces if requested by a nonzero parent_flag. + Returns nonzero if the name is ambiguous. */ + +int +gfc_find_sym_tree (const char *name, gfc_namespace *ns, int parent_flag, + gfc_symtree **result) +{ + gfc_symtree *st; + + if (ns == NULL) + ns = gfc_current_ns; + + do + { + st = gfc_find_symtree (ns->sym_root, name); + if (st != NULL) + { + *result = st; + /* Ambiguous generic interfaces are permitted, as long + as the specific interfaces are different. */ + if (st->ambiguous && !st->n.sym->attr.generic) + { + ambiguous_symbol (name, st); + return 1; + } + + return 0; + } + + if (!parent_flag) + break; + + ns = ns->parent; + } + while (ns != NULL); + + *result = NULL; + return 0; +} + + +/* Same, but returns the symbol instead. */ + +int +gfc_find_symbol (const char *name, gfc_namespace *ns, int parent_flag, + gfc_symbol **result) +{ + gfc_symtree *st; + int i; + + i = gfc_find_sym_tree (name, ns, parent_flag, &st); + + if (st == NULL) + *result = NULL; + else + *result = st->n.sym; + + return i; +} + + +/* Save symbol with the information necessary to back it out. */ + +static void +save_symbol_data (gfc_symbol *sym) +{ + + if (sym->gfc_new || sym->old_symbol != NULL) + return; + + sym->old_symbol = XCNEW (gfc_symbol); + *(sym->old_symbol) = *sym; + + sym->tlink = changed_syms; + changed_syms = sym; +} + + +/* Given a name, find a symbol, or create it if it does not exist yet + in the current namespace. If the symbol is found we make sure that + it's OK. + + The integer return code indicates + 0 All OK + 1 The symbol name was ambiguous + 2 The name meant to be established was already host associated. + + So if the return value is nonzero, then an error was issued. */ + +int +gfc_get_sym_tree (const char *name, gfc_namespace *ns, gfc_symtree **result) +{ + gfc_symtree *st; + gfc_symbol *p; + + /* This doesn't usually happen during resolution. */ + if (ns == NULL) + ns = gfc_current_ns; + + /* Try to find the symbol in ns. */ + st = gfc_find_symtree (ns->sym_root, name); + + if (st == NULL) + { + /* If not there, create a new symbol. */ + p = gfc_new_symbol (name, ns); + + /* Add to the list of tentative symbols. */ + p->old_symbol = NULL; + p->tlink = changed_syms; + p->mark = 1; + p->gfc_new = 1; + changed_syms = p; + + st = gfc_new_symtree (&ns->sym_root, name); + st->n.sym = p; + p->refs++; + + } + else + { + /* Make sure the existing symbol is OK. Ambiguous + generic interfaces are permitted, as long as the + specific interfaces are different. */ + if (st->ambiguous && !st->n.sym->attr.generic) + { + ambiguous_symbol (name, st); + return 1; + } + + p = st->n.sym; + + if (p->ns != ns && (!p->attr.function || ns->proc_name != p) + && !(ns->proc_name + && ns->proc_name->attr.if_source == IFSRC_IFBODY + && (ns->has_import_set || p->attr.imported))) + { + /* Symbol is from another namespace. */ + gfc_error ("Symbol '%s' at %C has already been host associated", + name); + return 2; + } + + p->mark = 1; + + /* Copy in case this symbol is changed. */ + save_symbol_data (p); + } + + *result = st; + return 0; +} + + +int +gfc_get_symbol (const char *name, gfc_namespace *ns, gfc_symbol **result) +{ + gfc_symtree *st; + int i; + + i = gfc_get_sym_tree (name, ns, &st); + if (i != 0) + return i; + + if (st) + *result = st->n.sym; + else + *result = NULL; + return i; +} + + +/* Subroutine that searches for a symbol, creating it if it doesn't + exist, but tries to host-associate the symbol if possible. */ + +int +gfc_get_ha_sym_tree (const char *name, gfc_symtree **result) +{ + gfc_symtree *st; + int i; + + i = gfc_find_sym_tree (name, gfc_current_ns, 0, &st); + if (st != NULL) + { + save_symbol_data (st->n.sym); + *result = st; + return i; + } + + if (gfc_current_ns->parent != NULL) + { + i = gfc_find_sym_tree (name, gfc_current_ns->parent, 1, &st); + if (i) + return i; + + if (st != NULL) + { + *result = st; + return 0; + } + } + + return gfc_get_sym_tree (name, gfc_current_ns, result); +} + + +int +gfc_get_ha_symbol (const char *name, gfc_symbol **result) +{ + int i; + gfc_symtree *st; + + i = gfc_get_ha_sym_tree (name, &st); + + if (st) + *result = st->n.sym; + else + *result = NULL; + + return i; +} + +/* Return true if both symbols could refer to the same data object. Does + not take account of aliasing due to equivalence statements. */ + +int +gfc_symbols_could_alias (gfc_symbol *lsym, gfc_symbol *rsym) +{ + /* Aliasing isn't possible if the symbols have different base types. */ + if (gfc_compare_types (&lsym->ts, &rsym->ts) == 0) + return 0; + + /* Pointers can point to other pointers, target objects and allocatable + objects. Two allocatable objects cannot share the same storage. */ + if (lsym->attr.pointer + && (rsym->attr.pointer || rsym->attr.allocatable || rsym->attr.target)) + return 1; + if (lsym->attr.target && rsym->attr.pointer) + return 1; + if (lsym->attr.allocatable && rsym->attr.pointer) + return 1; + + return 0; +} + + +/* Undoes all the changes made to symbols in the current statement. + This subroutine is made simpler due to the fact that attributes are + never removed once added. */ + +void +gfc_undo_symbols (void) +{ + gfc_symbol *p, *q, *old; + + for (p = changed_syms; p; p = q) + { + q = p->tlink; + + if (p->gfc_new) + { + /* Symbol was new. */ + if (p->attr.in_common && p->common_block->head) + { + /* If the symbol was added to any common block, it + needs to be removed to stop the resolver looking + for a (possibly) dead symbol. */ + + if (p->common_block->head == p) + p->common_block->head = p->common_next; + else + { + gfc_symbol *cparent, *csym; + + cparent = p->common_block->head; + csym = cparent->common_next; + + while (csym != p) + { + cparent = csym; + csym = csym->common_next; + } + + gcc_assert(cparent->common_next == p); + + cparent->common_next = csym->common_next; + } + } + + gfc_delete_symtree (&p->ns->sym_root, p->name); + + p->refs--; + if (p->refs < 0) + gfc_internal_error ("gfc_undo_symbols(): Negative refs"); + if (p->refs == 0) + gfc_free_symbol (p); + continue; + } + + /* Restore previous state of symbol. Just copy simple stuff. */ + p->mark = 0; + old = p->old_symbol; + + p->ts.type = old->ts.type; + p->ts.kind = old->ts.kind; + + p->attr = old->attr; + + if (p->value != old->value) + { + gfc_free_expr (old->value); + p->value = NULL; + } + + if (p->as != old->as) + { + if (p->as) + gfc_free_array_spec (p->as); + p->as = old->as; + } + + p->generic = old->generic; + p->component_access = old->component_access; + + if (p->namelist != NULL && old->namelist == NULL) + { + gfc_free_namelist (p->namelist); + p->namelist = NULL; + } + else + { + if (p->namelist_tail != old->namelist_tail) + { + gfc_free_namelist (old->namelist_tail); + old->namelist_tail->next = NULL; + } + } + + p->namelist_tail = old->namelist_tail; + + if (p->formal != old->formal) + { + gfc_free_formal_arglist (p->formal); + p->formal = old->formal; + } + + gfc_free (p->old_symbol); + p->old_symbol = NULL; + p->tlink = NULL; + } + + changed_syms = NULL; +} + + +/* Free sym->old_symbol. sym->old_symbol is mostly a shallow copy of sym; the + components of old_symbol that might need deallocation are the "allocatables" + that are restored in gfc_undo_symbols(), with two exceptions: namelist and + namelist_tail. In case these differ between old_symbol and sym, it's just + because sym->namelist has gotten a few more items. */ + +static void +free_old_symbol (gfc_symbol *sym) +{ + + if (sym->old_symbol == NULL) + return; + + if (sym->old_symbol->as != sym->as) + gfc_free_array_spec (sym->old_symbol->as); + + if (sym->old_symbol->value != sym->value) + gfc_free_expr (sym->old_symbol->value); + + if (sym->old_symbol->formal != sym->formal) + gfc_free_formal_arglist (sym->old_symbol->formal); + + gfc_free (sym->old_symbol); + sym->old_symbol = NULL; +} + + +/* Makes the changes made in the current statement permanent-- gets + rid of undo information. */ + +void +gfc_commit_symbols (void) +{ + gfc_symbol *p, *q; + + for (p = changed_syms; p; p = q) + { + q = p->tlink; + p->tlink = NULL; + p->mark = 0; + p->gfc_new = 0; + free_old_symbol (p); + } + changed_syms = NULL; +} + + +/* Makes the changes made in one symbol permanent -- gets rid of undo + information. */ + +void +gfc_commit_symbol (gfc_symbol *sym) +{ + gfc_symbol *p; + + if (changed_syms == sym) + changed_syms = sym->tlink; + else + { + for (p = changed_syms; p; p = p->tlink) + if (p->tlink == sym) + { + p->tlink = sym->tlink; + break; + } + } + + sym->tlink = NULL; + sym->mark = 0; + sym->gfc_new = 0; + + free_old_symbol (sym); +} + + +/* Recursive function that deletes an entire tree and all the common + head structures it points to. */ + +static void +free_common_tree (gfc_symtree * common_tree) +{ + if (common_tree == NULL) + return; + + free_common_tree (common_tree->left); + free_common_tree (common_tree->right); + + gfc_free (common_tree); +} + + +/* Recursive function that deletes an entire tree and all the user + operator nodes that it contains. */ + +static void +free_uop_tree (gfc_symtree *uop_tree) +{ + + if (uop_tree == NULL) + return; + + free_uop_tree (uop_tree->left); + free_uop_tree (uop_tree->right); + + gfc_free_interface (uop_tree->n.uop->op); + + gfc_free (uop_tree->n.uop); + gfc_free (uop_tree); +} + + +/* Recursive function that deletes an entire tree and all the symbols + that it contains. */ + +static void +free_sym_tree (gfc_symtree *sym_tree) +{ + gfc_namespace *ns; + gfc_symbol *sym; + + if (sym_tree == NULL) + return; + + free_sym_tree (sym_tree->left); + free_sym_tree (sym_tree->right); + + sym = sym_tree->n.sym; + + sym->refs--; + if (sym->refs < 0) + gfc_internal_error ("free_sym_tree(): Negative refs"); + + if (sym->formal_ns != NULL && sym->refs == 1) + { + /* As formal_ns contains a reference to sym, delete formal_ns just + before the deletion of sym. */ + ns = sym->formal_ns; + sym->formal_ns = NULL; + gfc_free_namespace (ns); + } + else if (sym->refs == 0) + { + /* Go ahead and delete the symbol. */ + gfc_free_symbol (sym); + } + + gfc_free (sym_tree); +} + + +/* Free the derived type list. */ + +static void +gfc_free_dt_list (void) +{ + gfc_dt_list *dt, *n; + + for (dt = gfc_derived_types; dt; dt = n) + { + n = dt->next; + gfc_free (dt); + } + + gfc_derived_types = NULL; +} + + +/* Free the gfc_equiv_info's. */ + +static void +gfc_free_equiv_infos (gfc_equiv_info *s) +{ + if (s == NULL) + return; + gfc_free_equiv_infos (s->next); + gfc_free (s); +} + + +/* Free the gfc_equiv_lists. */ + +static void +gfc_free_equiv_lists (gfc_equiv_list *l) +{ + if (l == NULL) + return; + gfc_free_equiv_lists (l->next); + gfc_free_equiv_infos (l->equiv); + gfc_free (l); +} + + +/* Free a finalizer procedure list. */ + +void +gfc_free_finalizer (gfc_finalizer* el) +{ + if (el) + { + if (el->proc_sym) + { + --el->proc_sym->refs; + if (!el->proc_sym->refs) + gfc_free_symbol (el->proc_sym); + } + + gfc_free (el); + } +} + +static void +gfc_free_finalizer_list (gfc_finalizer* list) +{ + while (list) + { + gfc_finalizer* current = list; + list = list->next; + gfc_free_finalizer (current); + } +} + + +/* Free the charlen list from cl to end (end is not freed). + Free the whole list if end is NULL. */ + +void gfc_free_charlen (gfc_charlen *cl, gfc_charlen *end) +{ + gfc_charlen *cl2; + + for (; cl != end; cl = cl2) + { + gcc_assert (cl); + + cl2 = cl->next; + gfc_free_expr (cl->length); + gfc_free (cl); + } +} + + +/* Free a namespace structure and everything below it. Interface + lists associated with intrinsic operators are not freed. These are + taken care of when a specific name is freed. */ + +void +gfc_free_namespace (gfc_namespace *ns) +{ + gfc_namespace *p, *q; + gfc_intrinsic_op i; + + if (ns == NULL) + return; + + ns->refs--; + if (ns->refs > 0) + return; + gcc_assert (ns->refs == 0); + + gfc_free_statements (ns->code); + + free_sym_tree (ns->sym_root); + free_uop_tree (ns->uop_root); + free_common_tree (ns->common_root); + gfc_free_finalizer_list (ns->finalizers); + gfc_free_charlen (ns->cl_list, NULL); + free_st_labels (ns->st_labels); + + gfc_free_equiv (ns->equiv); + gfc_free_equiv_lists (ns->equiv_lists); + gfc_free_use_stmts (ns->use_stmts); + + for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++) + gfc_free_interface (ns->op[i]); + + gfc_free_data (ns->data); + p = ns->contained; + gfc_free (ns); + + /* Recursively free any contained namespaces. */ + while (p != NULL) + { + q = p; + p = p->sibling; + gfc_free_namespace (q); + } +} + + +void +gfc_symbol_init_2 (void) +{ + + gfc_current_ns = gfc_get_namespace (NULL, 0); +} + + +void +gfc_symbol_done_2 (void) +{ + + gfc_free_namespace (gfc_current_ns); + gfc_current_ns = NULL; + gfc_free_dt_list (); +} + + +/* Clear mark bits from symbol nodes associated with a symtree node. */ + +static void +clear_sym_mark (gfc_symtree *st) +{ + + st->n.sym->mark = 0; +} + + +/* Recursively traverse the symtree nodes. */ + +void +gfc_traverse_symtree (gfc_symtree *st, void (*func) (gfc_symtree *)) +{ + if (!st) + return; + + gfc_traverse_symtree (st->left, func); + (*func) (st); + gfc_traverse_symtree (st->right, func); +} + + +/* Recursive namespace traversal function. */ + +static void +traverse_ns (gfc_symtree *st, void (*func) (gfc_symbol *)) +{ + + if (st == NULL) + return; + + traverse_ns (st->left, func); + + if (st->n.sym->mark == 0) + (*func) (st->n.sym); + st->n.sym->mark = 1; + + traverse_ns (st->right, func); +} + + +/* Call a given function for all symbols in the namespace. We take + care that each gfc_symbol node is called exactly once. */ + +void +gfc_traverse_ns (gfc_namespace *ns, void (*func) (gfc_symbol *)) +{ + + gfc_traverse_symtree (ns->sym_root, clear_sym_mark); + + traverse_ns (ns->sym_root, func); +} + + +/* Return TRUE when name is the name of an intrinsic type. */ + +bool +gfc_is_intrinsic_typename (const char *name) +{ + if (strcmp (name, "integer") == 0 + || strcmp (name, "real") == 0 + || strcmp (name, "character") == 0 + || strcmp (name, "logical") == 0 + || strcmp (name, "complex") == 0 + || strcmp (name, "doubleprecision") == 0 + || strcmp (name, "doublecomplex") == 0) + return true; + else + return false; +} + + +/* Return TRUE if the symbol is an automatic variable. */ + +static bool +gfc_is_var_automatic (gfc_symbol *sym) +{ + /* Pointer and allocatable variables are never automatic. */ + if (sym->attr.pointer || sym->attr.allocatable) + return false; + /* Check for arrays with non-constant size. */ + if (sym->attr.dimension && sym->as + && !gfc_is_compile_time_shape (sym->as)) + return true; + /* Check for non-constant length character variables. */ + if (sym->ts.type == BT_CHARACTER + && sym->ts.cl + && !gfc_is_constant_expr (sym->ts.cl->length)) + return true; + return false; +} + +/* Given a symbol, mark it as SAVEd if it is allowed. */ + +static void +save_symbol (gfc_symbol *sym) +{ + + if (sym->attr.use_assoc) + return; + + if (sym->attr.in_common + || sym->attr.dummy + || sym->attr.result + || sym->attr.flavor != FL_VARIABLE) + return; + /* Automatic objects are not saved. */ + if (gfc_is_var_automatic (sym)) + return; + gfc_add_save (&sym->attr, sym->name, &sym->declared_at); +} + + +/* Mark those symbols which can be SAVEd as such. */ + +void +gfc_save_all (gfc_namespace *ns) +{ + gfc_traverse_ns (ns, save_symbol); +} + + +#ifdef GFC_DEBUG +/* Make sure that no changes to symbols are pending. */ + +void +gfc_symbol_state(void) { + + if (changed_syms != NULL) + gfc_internal_error("Symbol changes still pending!"); +} +#endif + + +/************** Global symbol handling ************/ + + +/* Search a tree for the global symbol. */ + +gfc_gsymbol * +gfc_find_gsymbol (gfc_gsymbol *symbol, const char *name) +{ + int c; + + if (symbol == NULL) + return NULL; + + while (symbol) + { + c = strcmp (name, symbol->name); + if (!c) + return symbol; + + symbol = (c < 0) ? symbol->left : symbol->right; + } + + return NULL; +} + + +/* Compare two global symbols. Used for managing the BB tree. */ + +static int +gsym_compare (void *_s1, void *_s2) +{ + gfc_gsymbol *s1, *s2; + + s1 = (gfc_gsymbol *) _s1; + s2 = (gfc_gsymbol *) _s2; + return strcmp (s1->name, s2->name); +} + + +/* Get a global symbol, creating it if it doesn't exist. */ + +gfc_gsymbol * +gfc_get_gsymbol (const char *name) +{ + gfc_gsymbol *s; + + s = gfc_find_gsymbol (gfc_gsym_root, name); + if (s != NULL) + return s; + + s = XCNEW (gfc_gsymbol); + s->type = GSYM_UNKNOWN; + s->name = gfc_get_string (name); + + gfc_insert_bbt (&gfc_gsym_root, s, gsym_compare); + + return s; +} + + +static gfc_symbol * +get_iso_c_binding_dt (int sym_id) +{ + gfc_dt_list *dt_list; + + dt_list = gfc_derived_types; + + /* Loop through the derived types in the name list, searching for + the desired symbol from iso_c_binding. Search the parent namespaces + if necessary and requested to (parent_flag). */ + while (dt_list != NULL) + { + if (dt_list->derived->from_intmod != INTMOD_NONE + && dt_list->derived->intmod_sym_id == sym_id) + return dt_list->derived; + + dt_list = dt_list->next; + } + + return NULL; +} + + +/* Verifies that the given derived type symbol, derived_sym, is interoperable + with C. This is necessary for any derived type that is BIND(C) and for + derived types that are parameters to functions that are BIND(C). All + fields of the derived type are required to be interoperable, and are tested + for such. If an error occurs, the errors are reported here, allowing for + multiple errors to be handled for a single derived type. */ + +gfc_try +verify_bind_c_derived_type (gfc_symbol *derived_sym) +{ + gfc_component *curr_comp = NULL; + gfc_try is_c_interop = FAILURE; + gfc_try retval = SUCCESS; + + if (derived_sym == NULL) + gfc_internal_error ("verify_bind_c_derived_type(): Given symbol is " + "unexpectedly NULL"); + + /* If we've already looked at this derived symbol, do not look at it again + so we don't repeat warnings/errors. */ + if (derived_sym->ts.is_c_interop) + return SUCCESS; + + /* The derived type must have the BIND attribute to be interoperable + J3/04-007, Section 15.2.3. */ + if (derived_sym->attr.is_bind_c != 1) + { + derived_sym->ts.is_c_interop = 0; + gfc_error_now ("Derived type '%s' declared at %L must have the BIND " + "attribute to be C interoperable", derived_sym->name, + &(derived_sym->declared_at)); + retval = FAILURE; + } + + curr_comp = derived_sym->components; + + /* TODO: is this really an error? */ + if (curr_comp == NULL) + { + gfc_error ("Derived type '%s' at %L is empty", + derived_sym->name, &(derived_sym->declared_at)); + return FAILURE; + } + + /* Initialize the derived type as being C interoperable. + If we find an error in the components, this will be set false. */ + derived_sym->ts.is_c_interop = 1; + + /* Loop through the list of components to verify that the kind of + each is a C interoperable type. */ + do + { + /* The components cannot be pointers (fortran sense). + J3/04-007, Section 15.2.3, C1505. */ + if (curr_comp->attr.pointer != 0) + { + gfc_error ("Component '%s' at %L cannot have the " + "POINTER attribute because it is a member " + "of the BIND(C) derived type '%s' at %L", + curr_comp->name, &(curr_comp->loc), + derived_sym->name, &(derived_sym->declared_at)); + retval = FAILURE; + } + + /* The components cannot be allocatable. + J3/04-007, Section 15.2.3, C1505. */ + if (curr_comp->attr.allocatable != 0) + { + gfc_error ("Component '%s' at %L cannot have the " + "ALLOCATABLE attribute because it is a member " + "of the BIND(C) derived type '%s' at %L", + curr_comp->name, &(curr_comp->loc), + derived_sym->name, &(derived_sym->declared_at)); + retval = FAILURE; + } + + /* BIND(C) derived types must have interoperable components. */ + if (curr_comp->ts.type == BT_DERIVED + && curr_comp->ts.derived->ts.is_iso_c != 1 + && curr_comp->ts.derived != derived_sym) + { + /* This should be allowed; the draft says a derived-type can not + have type parameters if it is has the BIND attribute. Type + parameters seem to be for making parameterized derived types. + There's no need to verify the type if it is c_ptr/c_funptr. */ + retval = verify_bind_c_derived_type (curr_comp->ts.derived); + } + else + { + /* Grab the typespec for the given component and test the kind. */ + is_c_interop = verify_c_interop (&(curr_comp->ts)); + + if (is_c_interop != SUCCESS) + { + /* Report warning and continue since not fatal. The + draft does specify a constraint that requires all fields + to interoperate, but if the user says real(4), etc., it + may interoperate with *something* in C, but the compiler + most likely won't know exactly what. Further, it may not + interoperate with the same data type(s) in C if the user + recompiles with different flags (e.g., -m32 and -m64 on + x86_64 and using integer(4) to claim interop with a + C_LONG). */ + if (derived_sym->attr.is_bind_c == 1) + /* If the derived type is bind(c), all fields must be + interop. */ + gfc_warning ("Component '%s' in derived type '%s' at %L " + "may not be C interoperable, even though " + "derived type '%s' is BIND(C)", + curr_comp->name, derived_sym->name, + &(curr_comp->loc), derived_sym->name); + else + /* If derived type is param to bind(c) routine, or to one + of the iso_c_binding procs, it must be interoperable, so + all fields must interop too. */ + gfc_warning ("Component '%s' in derived type '%s' at %L " + "may not be C interoperable", + curr_comp->name, derived_sym->name, + &(curr_comp->loc)); + } + } + + curr_comp = curr_comp->next; + } while (curr_comp != NULL); + + + /* Make sure we don't have conflicts with the attributes. */ + if (derived_sym->attr.access == ACCESS_PRIVATE) + { + gfc_error ("Derived type '%s' at %L cannot be declared with both " + "PRIVATE and BIND(C) attributes", derived_sym->name, + &(derived_sym->declared_at)); + retval = FAILURE; + } + + if (derived_sym->attr.sequence != 0) + { + gfc_error ("Derived type '%s' at %L cannot have the SEQUENCE " + "attribute because it is BIND(C)", derived_sym->name, + &(derived_sym->declared_at)); + retval = FAILURE; + } + + /* Mark the derived type as not being C interoperable if we found an + error. If there were only warnings, proceed with the assumption + it's interoperable. */ + if (retval == FAILURE) + derived_sym->ts.is_c_interop = 0; + + return retval; +} + + +/* Generate symbols for the named constants c_null_ptr and c_null_funptr. */ + +static gfc_try +gen_special_c_interop_ptr (int ptr_id, const char *ptr_name, + const char *module_name) +{ + gfc_symtree *tmp_symtree; + gfc_symbol *tmp_sym; + + tmp_symtree = gfc_find_symtree (gfc_current_ns->sym_root, ptr_name); + + if (tmp_symtree != NULL) + tmp_sym = tmp_symtree->n.sym; + else + { + tmp_sym = NULL; + gfc_internal_error ("gen_special_c_interop_ptr(): Unable to " + "create symbol for %s", ptr_name); + } + + /* Set up the symbol's important fields. Save attr required so we can + initialize the ptr to NULL. */ + tmp_sym->attr.save = SAVE_EXPLICIT; + tmp_sym->ts.is_c_interop = 1; + tmp_sym->attr.is_c_interop = 1; + tmp_sym->ts.is_iso_c = 1; + tmp_sym->ts.type = BT_DERIVED; + + /* The c_ptr and c_funptr derived types will provide the + definition for c_null_ptr and c_null_funptr, respectively. */ + if (ptr_id == ISOCBINDING_NULL_PTR) + tmp_sym->ts.derived = get_iso_c_binding_dt (ISOCBINDING_PTR); + else + tmp_sym->ts.derived = get_iso_c_binding_dt (ISOCBINDING_FUNPTR); + if (tmp_sym->ts.derived == NULL) + { + /* This can occur if the user forgot to declare c_ptr or + c_funptr and they're trying to use one of the procedures + that has arg(s) of the missing type. In this case, a + regular version of the thing should have been put in the + current ns. */ + generate_isocbinding_symbol (module_name, ptr_id == ISOCBINDING_NULL_PTR + ? ISOCBINDING_PTR : ISOCBINDING_FUNPTR, + (const char *) (ptr_id == ISOCBINDING_NULL_PTR + ? "_gfortran_iso_c_binding_c_ptr" + : "_gfortran_iso_c_binding_c_funptr")); + + tmp_sym->ts.derived = + get_iso_c_binding_dt (ptr_id == ISOCBINDING_NULL_PTR + ? ISOCBINDING_PTR : ISOCBINDING_FUNPTR); + } + + /* Module name is some mangled version of iso_c_binding. */ + tmp_sym->module = gfc_get_string (module_name); + + /* Say it's from the iso_c_binding module. */ + tmp_sym->attr.is_iso_c = 1; + + tmp_sym->attr.use_assoc = 1; + tmp_sym->attr.is_bind_c = 1; + /* Set the binding_label. */ + sprintf (tmp_sym->binding_label, "%s_%s", module_name, tmp_sym->name); + + /* Set the c_address field of c_null_ptr and c_null_funptr to + the value of NULL. */ + tmp_sym->value = gfc_get_expr (); + tmp_sym->value->expr_type = EXPR_STRUCTURE; + tmp_sym->value->ts.type = BT_DERIVED; + tmp_sym->value->ts.derived = tmp_sym->ts.derived; + /* Create a constructor with no expr, that way we can recognize if the user + tries to call the structure constructor for one of the iso_c_binding + derived types during resolution (resolve_structure_cons). */ + tmp_sym->value->value.constructor = gfc_get_constructor (); + /* Must declare c_null_ptr and c_null_funptr as having the + PARAMETER attribute so they can be used in init expressions. */ + tmp_sym->attr.flavor = FL_PARAMETER; + + return SUCCESS; +} + + +/* Add a formal argument, gfc_formal_arglist, to the + end of the given list of arguments. Set the reference to the + provided symbol, param_sym, in the argument. */ + +static void +add_formal_arg (gfc_formal_arglist **head, + gfc_formal_arglist **tail, + gfc_formal_arglist *formal_arg, + gfc_symbol *param_sym) +{ + /* Put in list, either as first arg or at the tail (curr arg). */ + if (*head == NULL) + *head = *tail = formal_arg; + else + { + (*tail)->next = formal_arg; + (*tail) = formal_arg; + } + + (*tail)->sym = param_sym; + (*tail)->next = NULL; + + return; +} + + +/* Generates a symbol representing the CPTR argument to an + iso_c_binding procedure. Also, create a gfc_formal_arglist for the + CPTR and add it to the provided argument list. */ + +static void +gen_cptr_param (gfc_formal_arglist **head, + gfc_formal_arglist **tail, + const char *module_name, + gfc_namespace *ns, const char *c_ptr_name, + int iso_c_sym_id) +{ + gfc_symbol *param_sym = NULL; + gfc_symbol *c_ptr_sym = NULL; + gfc_symtree *param_symtree = NULL; + gfc_formal_arglist *formal_arg = NULL; + const char *c_ptr_in; + const char *c_ptr_type = NULL; + + if (iso_c_sym_id == ISOCBINDING_F_PROCPOINTER) + c_ptr_type = "_gfortran_iso_c_binding_c_funptr"; + else + c_ptr_type = "_gfortran_iso_c_binding_c_ptr"; + + if(c_ptr_name == NULL) + c_ptr_in = "gfc_cptr__"; + else + c_ptr_in = c_ptr_name; + gfc_get_sym_tree (c_ptr_in, ns, ¶m_symtree); + if (param_symtree != NULL) + param_sym = param_symtree->n.sym; + else + gfc_internal_error ("gen_cptr_param(): Unable to " + "create symbol for %s", c_ptr_in); + + /* Set up the appropriate fields for the new c_ptr param sym. */ + param_sym->refs++; + param_sym->attr.flavor = FL_DERIVED; + param_sym->ts.type = BT_DERIVED; + param_sym->attr.intent = INTENT_IN; + param_sym->attr.dummy = 1; + + /* This will pass the ptr to the iso_c routines as a (void *). */ + param_sym->attr.value = 1; + param_sym->attr.use_assoc = 1; + + /* Get the symbol for c_ptr or c_funptr, no matter what it's name is + (user renamed). */ + if (iso_c_sym_id == ISOCBINDING_F_PROCPOINTER) + c_ptr_sym = get_iso_c_binding_dt (ISOCBINDING_FUNPTR); + else + c_ptr_sym = get_iso_c_binding_dt (ISOCBINDING_PTR); + if (c_ptr_sym == NULL) + { + /* This can happen if the user did not define c_ptr but they are + trying to use one of the iso_c_binding functions that need it. */ + if (iso_c_sym_id == ISOCBINDING_F_PROCPOINTER) + generate_isocbinding_symbol (module_name, ISOCBINDING_FUNPTR, + (const char *)c_ptr_type); + else + generate_isocbinding_symbol (module_name, ISOCBINDING_PTR, + (const char *)c_ptr_type); + + gfc_get_ha_symbol (c_ptr_type, &(c_ptr_sym)); + } + + param_sym->ts.derived = c_ptr_sym; + param_sym->module = gfc_get_string (module_name); + + /* Make new formal arg. */ + formal_arg = gfc_get_formal_arglist (); + /* Add arg to list of formal args (the CPTR arg). */ + add_formal_arg (head, tail, formal_arg, param_sym); +} + + +/* Generates a symbol representing the FPTR argument to an + iso_c_binding procedure. Also, create a gfc_formal_arglist for the + FPTR and add it to the provided argument list. */ + +static void +gen_fptr_param (gfc_formal_arglist **head, + gfc_formal_arglist **tail, + const char *module_name, + gfc_namespace *ns, const char *f_ptr_name, int proc) +{ + gfc_symbol *param_sym = NULL; + gfc_symtree *param_symtree = NULL; + gfc_formal_arglist *formal_arg = NULL; + const char *f_ptr_out = "gfc_fptr__"; + + if (f_ptr_name != NULL) + f_ptr_out = f_ptr_name; + + gfc_get_sym_tree (f_ptr_out, ns, ¶m_symtree); + if (param_symtree != NULL) + param_sym = param_symtree->n.sym; + else + gfc_internal_error ("generateFPtrParam(): Unable to " + "create symbol for %s", f_ptr_out); + + /* Set up the necessary fields for the fptr output param sym. */ + param_sym->refs++; + if (proc) + param_sym->attr.proc_pointer = 1; + else + param_sym->attr.pointer = 1; + param_sym->attr.dummy = 1; + param_sym->attr.use_assoc = 1; + + /* ISO C Binding type to allow any pointer type as actual param. */ + param_sym->ts.type = BT_VOID; + param_sym->module = gfc_get_string (module_name); + + /* Make the arg. */ + formal_arg = gfc_get_formal_arglist (); + /* Add arg to list of formal args. */ + add_formal_arg (head, tail, formal_arg, param_sym); +} + + +/* Generates a symbol representing the optional SHAPE argument for the + iso_c_binding c_f_pointer() procedure. Also, create a + gfc_formal_arglist for the SHAPE and add it to the provided + argument list. */ + +static void +gen_shape_param (gfc_formal_arglist **head, + gfc_formal_arglist **tail, + const char *module_name, + gfc_namespace *ns, const char *shape_param_name) +{ + gfc_symbol *param_sym = NULL; + gfc_symtree *param_symtree = NULL; + gfc_formal_arglist *formal_arg = NULL; + const char *shape_param = "gfc_shape_array__"; + int i; + + if (shape_param_name != NULL) + shape_param = shape_param_name; + + gfc_get_sym_tree (shape_param, ns, ¶m_symtree); + if (param_symtree != NULL) + param_sym = param_symtree->n.sym; + else + gfc_internal_error ("generateShapeParam(): Unable to " + "create symbol for %s", shape_param); + + /* Set up the necessary fields for the shape input param sym. */ + param_sym->refs++; + param_sym->attr.dummy = 1; + param_sym->attr.use_assoc = 1; + + /* Integer array, rank 1, describing the shape of the object. Make it's + type BT_VOID initially so we can accept any type/kind combination of + integer. During gfc_iso_c_sub_interface (resolve.c), we'll make it + of BT_INTEGER type. */ + param_sym->ts.type = BT_VOID; + + /* Initialize the kind to default integer. However, it will be overridden + during resolution to match the kind of the SHAPE parameter given as + the actual argument (to allow for any valid integer kind). */ + param_sym->ts.kind = gfc_default_integer_kind; + param_sym->as = gfc_get_array_spec (); + + /* Clear out the dimension info for the array. */ + for (i = 0; i < GFC_MAX_DIMENSIONS; i++) + { + param_sym->as->lower[i] = NULL; + param_sym->as->upper[i] = NULL; + } + param_sym->as->rank = 1; + param_sym->as->lower[0] = gfc_int_expr (1); + + /* The extent is unknown until we get it. The length give us + the rank the incoming pointer. */ + param_sym->as->type = AS_ASSUMED_SHAPE; + + /* The arg is also optional; it is required iff the second arg + (fptr) is to an array, otherwise, it's ignored. */ + param_sym->attr.optional = 1; + param_sym->attr.intent = INTENT_IN; + param_sym->attr.dimension = 1; + param_sym->module = gfc_get_string (module_name); + + /* Make the arg. */ + formal_arg = gfc_get_formal_arglist (); + /* Add arg to list of formal args. */ + add_formal_arg (head, tail, formal_arg, param_sym); +} + +/* Add a procedure interface to the given symbol (i.e., store a + reference to the list of formal arguments). */ + +static void +add_proc_interface (gfc_symbol *sym, ifsrc source, + gfc_formal_arglist *formal) +{ + + sym->formal = formal; + sym->attr.if_source = source; +} + +/* Copy the formal args from an existing symbol, src, into a new + symbol, dest. New formal args are created, and the description of + each arg is set according to the existing ones. This function is + used when creating procedure declaration variables from a procedure + declaration statement (see match_proc_decl()) to create the formal + args based on the args of a given named interface. */ + +void +copy_formal_args (gfc_symbol *dest, gfc_symbol *src) +{ + gfc_formal_arglist *head = NULL; + gfc_formal_arglist *tail = NULL; + gfc_formal_arglist *formal_arg = NULL; + gfc_formal_arglist *curr_arg = NULL; + gfc_formal_arglist *formal_prev = NULL; + /* Save current namespace so we can change it for formal args. */ + gfc_namespace *parent_ns = gfc_current_ns; + + /* Create a new namespace, which will be the formal ns (namespace + of the formal args). */ + gfc_current_ns = gfc_get_namespace (parent_ns, 0); + gfc_current_ns->proc_name = dest; + + for (curr_arg = src->formal; curr_arg; curr_arg = curr_arg->next) + { + formal_arg = gfc_get_formal_arglist (); + gfc_get_symbol (curr_arg->sym->name, gfc_current_ns, &(formal_arg->sym)); + + /* May need to copy more info for the symbol. */ + formal_arg->sym->attr = curr_arg->sym->attr; + formal_arg->sym->ts = curr_arg->sym->ts; + formal_arg->sym->as = gfc_copy_array_spec (curr_arg->sym->as); + copy_formal_args (formal_arg->sym, curr_arg->sym); + + /* If this isn't the first arg, set up the next ptr. For the + last arg built, the formal_arg->next will never get set to + anything other than NULL. */ + if (formal_prev != NULL) + formal_prev->next = formal_arg; + else + formal_arg->next = NULL; + + formal_prev = formal_arg; + + /* Add arg to list of formal args. */ + add_formal_arg (&head, &tail, formal_arg, formal_arg->sym); + } + + /* Add the interface to the symbol. */ + add_proc_interface (dest, IFSRC_DECL, head); + + /* Store the formal namespace information. */ + if (dest->formal != NULL) + /* The current ns should be that for the dest proc. */ + dest->formal_ns = gfc_current_ns; + /* Restore the current namespace to what it was on entry. */ + gfc_current_ns = parent_ns; +} + +/* Builds the parameter list for the iso_c_binding procedure + c_f_pointer or c_f_procpointer. The old_sym typically refers to a + generic version of either the c_f_pointer or c_f_procpointer + functions. The new_proc_sym represents a "resolved" version of the + symbol. The functions are resolved to match the types of their + parameters; for example, c_f_pointer(cptr, fptr) would resolve to + something similar to c_f_pointer_i4 if the type of data object fptr + pointed to was a default integer. The actual name of the resolved + procedure symbol is further mangled with the module name, etc., but + the idea holds true. */ + +static void +build_formal_args (gfc_symbol *new_proc_sym, + gfc_symbol *old_sym, int add_optional_arg) +{ + gfc_formal_arglist *head = NULL, *tail = NULL; + gfc_namespace *parent_ns = NULL; + + parent_ns = gfc_current_ns; + /* Create a new namespace, which will be the formal ns (namespace + of the formal args). */ + gfc_current_ns = gfc_get_namespace(parent_ns, 0); + gfc_current_ns->proc_name = new_proc_sym; + + /* Generate the params. */ + if (old_sym->intmod_sym_id == ISOCBINDING_F_PROCPOINTER) + { + gen_cptr_param (&head, &tail, (const char *) new_proc_sym->module, + gfc_current_ns, "cptr", old_sym->intmod_sym_id); + gen_fptr_param (&head, &tail, (const char *) new_proc_sym->module, + gfc_current_ns, "fptr", 1); + } + else if (old_sym->intmod_sym_id == ISOCBINDING_F_POINTER) + { + gen_cptr_param (&head, &tail, (const char *) new_proc_sym->module, + gfc_current_ns, "cptr", old_sym->intmod_sym_id); + gen_fptr_param (&head, &tail, (const char *) new_proc_sym->module, + gfc_current_ns, "fptr", 0); + /* If we're dealing with c_f_pointer, it has an optional third arg. */ + gen_shape_param (&head, &tail,(const char *) new_proc_sym->module, + gfc_current_ns, "shape"); + + } + else if (old_sym->intmod_sym_id == ISOCBINDING_ASSOCIATED) + { + /* c_associated has one required arg and one optional; both + are c_ptrs. */ + gen_cptr_param (&head, &tail, (const char *) new_proc_sym->module, + gfc_current_ns, "c_ptr_1", ISOCBINDING_ASSOCIATED); + if (add_optional_arg) + { + gen_cptr_param (&head, &tail, (const char *) new_proc_sym->module, + gfc_current_ns, "c_ptr_2", ISOCBINDING_ASSOCIATED); + /* The last param is optional so mark it as such. */ + tail->sym->attr.optional = 1; + } + } + + /* Add the interface (store formal args to new_proc_sym). */ + add_proc_interface (new_proc_sym, IFSRC_DECL, head); + + /* Set up the formal_ns pointer to the one created for the + new procedure so it'll get cleaned up during gfc_free_symbol(). */ + new_proc_sym->formal_ns = gfc_current_ns; + + gfc_current_ns = parent_ns; +} + +static int +std_for_isocbinding_symbol (int id) +{ + switch (id) + { +#define NAMED_INTCST(a,b,c,d) \ + case a:\ + return d; +#include "iso-c-binding.def" +#undef NAMED_INTCST + default: + return GFC_STD_F2003; + } +} + +/* Generate the given set of C interoperable kind objects, or all + interoperable kinds. This function will only be given kind objects + for valid iso_c_binding defined types because this is verified when + the 'use' statement is parsed. If the user gives an 'only' clause, + the specific kinds are looked up; if they don't exist, an error is + reported. If the user does not give an 'only' clause, all + iso_c_binding symbols are generated. If a list of specific kinds + is given, it must have a NULL in the first empty spot to mark the + end of the list. */ + + +void +generate_isocbinding_symbol (const char *mod_name, iso_c_binding_symbol s, + const char *local_name) +{ + const char *const name = (local_name && local_name[0]) ? local_name + : c_interop_kinds_table[s].name; + gfc_symtree *tmp_symtree = NULL; + gfc_symbol *tmp_sym = NULL; + gfc_dt_list **dt_list_ptr = NULL; + gfc_component *tmp_comp = NULL; + char comp_name[(GFC_MAX_SYMBOL_LEN * 2) + 1]; + int index; + + if (gfc_notification_std (std_for_isocbinding_symbol (s)) == ERROR) + return; + tmp_symtree = gfc_find_symtree (gfc_current_ns->sym_root, name); + + /* Already exists in this scope so don't re-add it. + TODO: we should probably check that it's really the same symbol. */ + if (tmp_symtree != NULL) + return; + + /* Create the sym tree in the current ns. */ + gfc_get_sym_tree (name, gfc_current_ns, &tmp_symtree); + if (tmp_symtree) + tmp_sym = tmp_symtree->n.sym; + else + gfc_internal_error ("generate_isocbinding_symbol(): Unable to " + "create symbol"); + + /* Say what module this symbol belongs to. */ + tmp_sym->module = gfc_get_string (mod_name); + tmp_sym->from_intmod = INTMOD_ISO_C_BINDING; + tmp_sym->intmod_sym_id = s; + + switch (s) + { + +#define NAMED_INTCST(a,b,c,d) case a : +#define NAMED_REALCST(a,b,c) case a : +#define NAMED_CMPXCST(a,b,c) case a : +#define NAMED_LOGCST(a,b,c) case a : +#define NAMED_CHARKNDCST(a,b,c) case a : +#include "iso-c-binding.def" + + tmp_sym->value = gfc_int_expr (c_interop_kinds_table[s].value); + + /* Initialize an integer constant expression node. */ + tmp_sym->attr.flavor = FL_PARAMETER; + tmp_sym->ts.type = BT_INTEGER; + tmp_sym->ts.kind = gfc_default_integer_kind; + + /* Mark this type as a C interoperable one. */ + tmp_sym->ts.is_c_interop = 1; + tmp_sym->ts.is_iso_c = 1; + tmp_sym->value->ts.is_c_interop = 1; + tmp_sym->value->ts.is_iso_c = 1; + tmp_sym->attr.is_c_interop = 1; + + /* Tell what f90 type this c interop kind is valid. */ + tmp_sym->ts.f90_type = c_interop_kinds_table[s].f90_type; + + /* Say it's from the iso_c_binding module. */ + tmp_sym->attr.is_iso_c = 1; + + /* Make it use associated. */ + tmp_sym->attr.use_assoc = 1; + break; + + +#define NAMED_CHARCST(a,b,c) case a : +#include "iso-c-binding.def" + + /* Initialize an integer constant expression node for the + length of the character. */ + tmp_sym->value = gfc_get_expr (); + tmp_sym->value->expr_type = EXPR_CONSTANT; + tmp_sym->value->ts.type = BT_CHARACTER; + tmp_sym->value->ts.kind = gfc_default_character_kind; + tmp_sym->value->where = gfc_current_locus; + tmp_sym->value->ts.is_c_interop = 1; + tmp_sym->value->ts.is_iso_c = 1; + tmp_sym->value->value.character.length = 1; + tmp_sym->value->value.character.string = gfc_get_wide_string (2); + tmp_sym->value->value.character.string[0] + = (gfc_char_t) c_interop_kinds_table[s].value; + tmp_sym->value->value.character.string[1] = '\0'; + tmp_sym->ts.cl = gfc_get_charlen (); + tmp_sym->ts.cl->length = gfc_int_expr (1); + + /* May not need this in both attr and ts, but do need in + attr for writing module file. */ + tmp_sym->attr.is_c_interop = 1; + + tmp_sym->attr.flavor = FL_PARAMETER; + tmp_sym->ts.type = BT_CHARACTER; + + /* Need to set it to the C_CHAR kind. */ + tmp_sym->ts.kind = gfc_default_character_kind; + + /* Mark this type as a C interoperable one. */ + tmp_sym->ts.is_c_interop = 1; + tmp_sym->ts.is_iso_c = 1; + + /* Tell what f90 type this c interop kind is valid. */ + tmp_sym->ts.f90_type = BT_CHARACTER; + + /* Say it's from the iso_c_binding module. */ + tmp_sym->attr.is_iso_c = 1; + + /* Make it use associated. */ + tmp_sym->attr.use_assoc = 1; + break; + + case ISOCBINDING_PTR: + case ISOCBINDING_FUNPTR: + + /* Initialize an integer constant expression node. */ + tmp_sym->attr.flavor = FL_DERIVED; + tmp_sym->ts.is_c_interop = 1; + tmp_sym->attr.is_c_interop = 1; + tmp_sym->attr.is_iso_c = 1; + tmp_sym->ts.is_iso_c = 1; + tmp_sym->ts.type = BT_DERIVED; + + /* A derived type must have the bind attribute to be + interoperable (J3/04-007, Section 15.2.3), even though + the binding label is not used. */ + tmp_sym->attr.is_bind_c = 1; + + tmp_sym->attr.referenced = 1; + + tmp_sym->ts.derived = tmp_sym; + + /* Add the symbol created for the derived type to the current ns. */ + dt_list_ptr = &(gfc_derived_types); + while (*dt_list_ptr != NULL && (*dt_list_ptr)->next != NULL) + dt_list_ptr = &((*dt_list_ptr)->next); + + /* There is already at least one derived type in the list, so append + the one we're currently building for c_ptr or c_funptr. */ + if (*dt_list_ptr != NULL) + dt_list_ptr = &((*dt_list_ptr)->next); + (*dt_list_ptr) = gfc_get_dt_list (); + (*dt_list_ptr)->derived = tmp_sym; + (*dt_list_ptr)->next = NULL; + + /* Set up the component of the derived type, which will be + an integer with kind equal to c_ptr_size. Mangle the name of + the field for the c_address to prevent the curious user from + trying to access it from Fortran. */ + sprintf (comp_name, "__%s_%s", tmp_sym->name, "c_address"); + gfc_add_component (tmp_sym, comp_name, &tmp_comp); + if (tmp_comp == NULL) + gfc_internal_error ("generate_isocbinding_symbol(): Unable to " + "create component for c_address"); + + tmp_comp->ts.type = BT_INTEGER; + + /* Set this because the module will need to read/write this field. */ + tmp_comp->ts.f90_type = BT_INTEGER; + + /* The kinds for c_ptr and c_funptr are the same. */ + index = get_c_kind ("c_ptr", c_interop_kinds_table); + tmp_comp->ts.kind = c_interop_kinds_table[index].value; + + tmp_comp->attr.pointer = 0; + tmp_comp->attr.dimension = 0; + + /* Mark the component as C interoperable. */ + tmp_comp->ts.is_c_interop = 1; + + /* Make it use associated (iso_c_binding module). */ + tmp_sym->attr.use_assoc = 1; + break; + + case ISOCBINDING_NULL_PTR: + case ISOCBINDING_NULL_FUNPTR: + gen_special_c_interop_ptr (s, name, mod_name); + break; + + case ISOCBINDING_F_POINTER: + case ISOCBINDING_ASSOCIATED: + case ISOCBINDING_LOC: + case ISOCBINDING_FUNLOC: + case ISOCBINDING_F_PROCPOINTER: + + tmp_sym->attr.proc = PROC_MODULE; + + /* Use the procedure's name as it is in the iso_c_binding module for + setting the binding label in case the user renamed the symbol. */ + sprintf (tmp_sym->binding_label, "%s_%s", mod_name, + c_interop_kinds_table[s].name); + tmp_sym->attr.is_iso_c = 1; + if (s == ISOCBINDING_F_POINTER || s == ISOCBINDING_F_PROCPOINTER) + tmp_sym->attr.subroutine = 1; + else + { + /* TODO! This needs to be finished more for the expr of the + function or something! + This may not need to be here, because trying to do c_loc + as an external. */ + if (s == ISOCBINDING_ASSOCIATED) + { + tmp_sym->attr.function = 1; + tmp_sym->ts.type = BT_LOGICAL; + tmp_sym->ts.kind = gfc_default_logical_kind; + tmp_sym->result = tmp_sym; + } + else + { + /* Here, we're taking the simple approach. We're defining + c_loc as an external identifier so the compiler will put + what we expect on the stack for the address we want the + C address of. */ + tmp_sym->ts.type = BT_DERIVED; + if (s == ISOCBINDING_LOC) + tmp_sym->ts.derived = + get_iso_c_binding_dt (ISOCBINDING_PTR); + else + tmp_sym->ts.derived = + get_iso_c_binding_dt (ISOCBINDING_FUNPTR); + + if (tmp_sym->ts.derived == NULL) + { + /* Create the necessary derived type so we can continue + processing the file. */ + generate_isocbinding_symbol + (mod_name, s == ISOCBINDING_FUNLOC + ? ISOCBINDING_FUNPTR : ISOCBINDING_PTR, + (const char *)(s == ISOCBINDING_FUNLOC + ? "_gfortran_iso_c_binding_c_funptr" + : "_gfortran_iso_c_binding_c_ptr")); + tmp_sym->ts.derived = + get_iso_c_binding_dt (s == ISOCBINDING_FUNLOC + ? ISOCBINDING_FUNPTR + : ISOCBINDING_PTR); + } + + /* The function result is itself (no result clause). */ + tmp_sym->result = tmp_sym; + tmp_sym->attr.external = 1; + tmp_sym->attr.use_assoc = 0; + tmp_sym->attr.pure = 1; + tmp_sym->attr.if_source = IFSRC_UNKNOWN; + tmp_sym->attr.proc = PROC_UNKNOWN; + } + } + + tmp_sym->attr.flavor = FL_PROCEDURE; + tmp_sym->attr.contained = 0; + + /* Try using this builder routine, with the new and old symbols + both being the generic iso_c proc sym being created. This + will create the formal args (and the new namespace for them). + Don't build an arg list for c_loc because we're going to treat + c_loc as an external procedure. */ + if (s != ISOCBINDING_LOC && s != ISOCBINDING_FUNLOC) + /* The 1 says to add any optional args, if applicable. */ + build_formal_args (tmp_sym, tmp_sym, 1); + + /* Set this after setting up the symbol, to prevent error messages. */ + tmp_sym->attr.use_assoc = 1; + + /* This symbol will not be referenced directly. It will be + resolved to the implementation for the given f90 kind. */ + tmp_sym->attr.referenced = 0; + + break; + + default: + gcc_unreachable (); + } +} + + +/* Creates a new symbol based off of an old iso_c symbol, with a new + binding label. This function can be used to create a new, + resolved, version of a procedure symbol for c_f_pointer or + c_f_procpointer that is based on the generic symbols. A new + parameter list is created for the new symbol using + build_formal_args(). The add_optional_flag specifies whether the + to add the optional SHAPE argument. The new symbol is + returned. */ + +gfc_symbol * +get_iso_c_sym (gfc_symbol *old_sym, char *new_name, + char *new_binding_label, int add_optional_arg) +{ + gfc_symtree *new_symtree = NULL; + + /* See if we have a symbol by that name already available, looking + through any parent namespaces. */ + gfc_find_sym_tree (new_name, gfc_current_ns, 1, &new_symtree); + if (new_symtree != NULL) + /* Return the existing symbol. */ + return new_symtree->n.sym; + + /* Create the symtree/symbol, with attempted host association. */ + gfc_get_ha_sym_tree (new_name, &new_symtree); + if (new_symtree == NULL) + gfc_internal_error ("get_iso_c_sym(): Unable to create " + "symtree for '%s'", new_name); + + /* Now fill in the fields of the resolved symbol with the old sym. */ + strcpy (new_symtree->n.sym->binding_label, new_binding_label); + new_symtree->n.sym->attr = old_sym->attr; + new_symtree->n.sym->ts = old_sym->ts; + new_symtree->n.sym->module = gfc_get_string (old_sym->module); + new_symtree->n.sym->from_intmod = old_sym->from_intmod; + new_symtree->n.sym->intmod_sym_id = old_sym->intmod_sym_id; + /* Build the formal arg list. */ + build_formal_args (new_symtree->n.sym, old_sym, add_optional_arg); + + gfc_commit_symbol (new_symtree->n.sym); + + return new_symtree->n.sym; +} + + +/* Check that a symbol is already typed. If strict is not set, an untyped + symbol is acceptable for non-standard-conforming mode. */ + +gfc_try +gfc_check_symbol_typed (gfc_symbol* sym, gfc_namespace* ns, + bool strict, locus where) +{ + gcc_assert (sym); + + if (gfc_matching_prefix) + return SUCCESS; + + /* Check for the type and try to give it an implicit one. */ + if (sym->ts.type == BT_UNKNOWN + && gfc_set_default_type (sym, 0, ns) == FAILURE) + { + if (strict) + { + gfc_error ("Symbol '%s' is used before it is typed at %L", + sym->name, &where); + return FAILURE; + } + + if (gfc_notify_std (GFC_STD_GNU, + "Extension: Symbol '%s' is used before" + " it is typed at %L", sym->name, &where) == FAILURE) + return FAILURE; + } + + /* Everything is ok. */ + return SUCCESS; +} + + +/* Get the super-type of a given derived type. */ + +gfc_symbol* +gfc_get_derived_super_type (gfc_symbol* derived) +{ + if (!derived->attr.extension) + return NULL; + + gcc_assert (derived->components); + gcc_assert (derived->components->ts.type == BT_DERIVED); + gcc_assert (derived->components->ts.derived); + + return derived->components->ts.derived; +} + + +/* Find a type-bound procedure by name for a derived-type (looking recursively + through the super-types). */ + +gfc_symtree* +gfc_find_typebound_proc (gfc_symbol* derived, gfc_try* t, + const char* name, bool noaccess) +{ + gfc_symtree* res; + + /* Set default to failure. */ + if (t) + *t = FAILURE; + + /* Try to find it in the current type's namespace. */ + gcc_assert (derived->f2k_derived); + res = gfc_find_symtree (derived->f2k_derived->sym_root, name); + if (res && res->typebound) + { + /* We found one. */ + if (t) + *t = SUCCESS; + + if (!noaccess && derived->attr.use_assoc + && res->typebound->access == ACCESS_PRIVATE) + { + gfc_error ("'%s' of '%s' is PRIVATE at %C", name, derived->name); + if (t) + *t = FAILURE; + } + + return res; + } + + /* Otherwise, recurse on parent type if derived is an extension. */ + if (derived->attr.extension) + { + gfc_symbol* super_type; + super_type = gfc_get_derived_super_type (derived); + gcc_assert (super_type); + return gfc_find_typebound_proc (super_type, t, name, noaccess); + } + + /* Nothing found. */ + return NULL; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/target-memory.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/target-memory.c new file mode 100644 index 0000000000..dc10b53d92 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/target-memory.c @@ -0,0 +1,735 @@ +/* Simulate storage of variables into target memory. + Copyright (C) 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Paul Thomas and Brooks Moses + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "flags.h" +#include "machmode.h" +#include "tree.h" +#include "gfortran.h" +#include "arith.h" +#include "trans.h" +#include "trans-const.h" +#include "trans-types.h" +#include "target-memory.h" + +/* --------------------------------------------------------------- */ +/* Calculate the size of an expression. */ + +static size_t +size_array (gfc_expr *e) +{ + mpz_t array_size; + size_t elt_size = gfc_target_expr_size (e->value.constructor->expr); + + gfc_array_size (e, &array_size); + return (size_t)mpz_get_ui (array_size) * elt_size; +} + +static size_t +size_integer (int kind) +{ + return GET_MODE_SIZE (TYPE_MODE (gfc_get_int_type (kind)));; +} + + +static size_t +size_float (int kind) +{ + return GET_MODE_SIZE (TYPE_MODE (gfc_get_real_type (kind)));; +} + + +static size_t +size_complex (int kind) +{ + return 2 * size_float (kind); +} + + +static size_t +size_logical (int kind) +{ + return GET_MODE_SIZE (TYPE_MODE (gfc_get_logical_type (kind)));; +} + + +static size_t +size_character (int length, int kind) +{ + int i = gfc_validate_kind (BT_CHARACTER, kind, false); + return length * gfc_character_kinds[i].bit_size / 8; +} + + +size_t +gfc_target_expr_size (gfc_expr *e) +{ + tree type; + + gcc_assert (e != NULL); + + if (e->expr_type == EXPR_ARRAY) + return size_array (e); + + switch (e->ts.type) + { + case BT_INTEGER: + return size_integer (e->ts.kind); + case BT_REAL: + return size_float (e->ts.kind); + case BT_COMPLEX: + return size_complex (e->ts.kind); + case BT_LOGICAL: + return size_logical (e->ts.kind); + case BT_CHARACTER: + if (e->expr_type == EXPR_SUBSTRING && e->ref) + { + int start, end; + + gfc_extract_int (e->ref->u.ss.start, &start); + gfc_extract_int (e->ref->u.ss.end, &end); + return size_character (MAX(end - start + 1, 0), e->ts.kind); + } + else + return size_character (e->value.character.length, e->ts.kind); + case BT_HOLLERITH: + return e->representation.length; + case BT_DERIVED: + type = gfc_typenode_for_spec (&e->ts); + return int_size_in_bytes (type); + default: + gfc_internal_error ("Invalid expression in gfc_target_expr_size."); + return 0; + } +} + + +/* The encode_* functions export a value into a buffer, and + return the number of bytes of the buffer that have been + used. */ + +static int +encode_array (gfc_expr *expr, unsigned char *buffer, size_t buffer_size) +{ + mpz_t array_size; + int i; + int ptr = 0; + + gfc_array_size (expr, &array_size); + for (i = 0; i < (int)mpz_get_ui (array_size); i++) + { + ptr += gfc_target_encode_expr (gfc_get_array_element (expr, i), + &buffer[ptr], buffer_size - ptr); + } + + mpz_clear (array_size); + return ptr; +} + + +static int +encode_integer (int kind, mpz_t integer, unsigned char *buffer, + size_t buffer_size) +{ + return native_encode_expr (gfc_conv_mpz_to_tree (integer, kind), + buffer, buffer_size); +} + + +static int +encode_float (int kind, mpfr_t real, unsigned char *buffer, size_t buffer_size) +{ + return native_encode_expr (gfc_conv_mpfr_to_tree (real, kind), buffer, + buffer_size); +} + + +static int +encode_complex (int kind, mpfr_t real, mpfr_t imaginary, unsigned char *buffer, + size_t buffer_size) +{ + int size; + size = encode_float (kind, real, &buffer[0], buffer_size); + size += encode_float (kind, imaginary, &buffer[size], buffer_size - size); + return size; +} + + +static int +encode_logical (int kind, int logical, unsigned char *buffer, size_t buffer_size) +{ + return native_encode_expr (build_int_cst (gfc_get_logical_type (kind), + logical), + buffer, buffer_size); +} + + +int +gfc_encode_character (int kind, int length, const gfc_char_t *string, + unsigned char *buffer, size_t buffer_size) +{ + size_t elsize = size_character (1, kind); + tree type = gfc_get_char_type (kind); + int i; + + gcc_assert (buffer_size >= size_character (length, kind)); + + for (i = 0; i < length; i++) + native_encode_expr (build_int_cst (type, string[i]), &buffer[i*elsize], + elsize); + + return length; +} + + +static int +encode_derived (gfc_expr *source, unsigned char *buffer, size_t buffer_size) +{ + gfc_constructor *ctr; + gfc_component *cmp; + int ptr; + tree type; + + type = gfc_typenode_for_spec (&source->ts); + + ctr = source->value.constructor; + cmp = source->ts.derived->components; + for (;ctr; ctr = ctr->next, cmp = cmp->next) + { + gcc_assert (cmp); + if (!ctr->expr) + continue; + ptr = TREE_INT_CST_LOW(DECL_FIELD_OFFSET(cmp->backend_decl)) + + TREE_INT_CST_LOW(DECL_FIELD_BIT_OFFSET(cmp->backend_decl))/8; + + if (ctr->expr->expr_type == EXPR_NULL) + memset (&buffer[ptr], 0, + int_size_in_bytes (TREE_TYPE (cmp->backend_decl))); + else + gfc_target_encode_expr (ctr->expr, &buffer[ptr], + buffer_size - ptr); + } + + return int_size_in_bytes (type); +} + + +/* Write a constant expression in binary form to a buffer. */ +int +gfc_target_encode_expr (gfc_expr *source, unsigned char *buffer, + size_t buffer_size) +{ + if (source == NULL) + return 0; + + if (source->expr_type == EXPR_ARRAY) + return encode_array (source, buffer, buffer_size); + + gcc_assert (source->expr_type == EXPR_CONSTANT + || source->expr_type == EXPR_STRUCTURE + || source->expr_type == EXPR_SUBSTRING); + + /* If we already have a target-memory representation, we use that rather + than recreating one. */ + if (source->representation.string) + { + memcpy (buffer, source->representation.string, + source->representation.length); + return source->representation.length; + } + + switch (source->ts.type) + { + case BT_INTEGER: + return encode_integer (source->ts.kind, source->value.integer, buffer, + buffer_size); + case BT_REAL: + return encode_float (source->ts.kind, source->value.real, buffer, + buffer_size); + case BT_COMPLEX: + return encode_complex (source->ts.kind, source->value.complex.r, + source->value.complex.i, buffer, buffer_size); + case BT_LOGICAL: + return encode_logical (source->ts.kind, source->value.logical, buffer, + buffer_size); + case BT_CHARACTER: + if (source->expr_type == EXPR_CONSTANT || source->ref == NULL) + return gfc_encode_character (source->ts.kind, + source->value.character.length, + source->value.character.string, + buffer, buffer_size); + else + { + int start, end; + + gcc_assert (source->expr_type == EXPR_SUBSTRING); + gfc_extract_int (source->ref->u.ss.start, &start); + gfc_extract_int (source->ref->u.ss.end, &end); + return gfc_encode_character (source->ts.kind, MAX(end - start + 1, 0), + &source->value.character.string[start-1], + buffer, buffer_size); + } + + case BT_DERIVED: + return encode_derived (source, buffer, buffer_size); + default: + gfc_internal_error ("Invalid expression in gfc_target_encode_expr."); + return 0; + } +} + + +static int +interpret_array (unsigned char *buffer, size_t buffer_size, gfc_expr *result) +{ + int array_size = 1; + int i; + int ptr = 0; + gfc_constructor *head = NULL, *tail = NULL; + + /* Calculate array size from its shape and rank. */ + gcc_assert (result->rank > 0 && result->shape); + + for (i = 0; i < result->rank; i++) + array_size *= (int)mpz_get_ui (result->shape[i]); + + /* Iterate over array elements, producing constructors. */ + for (i = 0; i < array_size; i++) + { + if (head == NULL) + head = tail = gfc_get_constructor (); + else + { + tail->next = gfc_get_constructor (); + tail = tail->next; + } + + tail->where = result->where; + tail->expr = gfc_constant_result (result->ts.type, + result->ts.kind, &result->where); + tail->expr->ts = result->ts; + + if (tail->expr->ts.type == BT_CHARACTER) + tail->expr->value.character.length = result->value.character.length; + + ptr += gfc_target_interpret_expr (&buffer[ptr], buffer_size - ptr, + tail->expr); + } + result->value.constructor = head; + + return ptr; +} + + +int +gfc_interpret_integer (int kind, unsigned char *buffer, size_t buffer_size, + mpz_t integer) +{ + mpz_init (integer); + gfc_conv_tree_to_mpz (integer, + native_interpret_expr (gfc_get_int_type (kind), + buffer, buffer_size)); + return size_integer (kind); +} + + +int +gfc_interpret_float (int kind, unsigned char *buffer, size_t buffer_size, + mpfr_t real) +{ + gfc_set_model_kind (kind); + mpfr_init (real); + gfc_conv_tree_to_mpfr (real, + native_interpret_expr (gfc_get_real_type (kind), + buffer, buffer_size)); + + return size_float (kind); +} + + +int +gfc_interpret_complex (int kind, unsigned char *buffer, size_t buffer_size, + mpfr_t real, mpfr_t imaginary) +{ + int size; + size = gfc_interpret_float (kind, &buffer[0], buffer_size, real); + size += gfc_interpret_float (kind, &buffer[size], buffer_size - size, + imaginary); + return size; +} + + +int +gfc_interpret_logical (int kind, unsigned char *buffer, size_t buffer_size, + int *logical) +{ + tree t = native_interpret_expr (gfc_get_logical_type (kind), buffer, + buffer_size); + *logical = double_int_zero_p (tree_to_double_int (t)) + ? 0 : 1; + return size_logical (kind); +} + + +int +gfc_interpret_character (unsigned char *buffer, size_t buffer_size, + gfc_expr *result) +{ + int i; + + if (result->ts.cl && result->ts.cl->length) + result->value.character.length = + (int) mpz_get_ui (result->ts.cl->length->value.integer); + + gcc_assert (buffer_size >= size_character (result->value.character.length, + result->ts.kind)); + result->value.character.string = + gfc_get_wide_string (result->value.character.length + 1); + + if (result->ts.kind == gfc_default_character_kind) + for (i = 0; i < result->value.character.length; i++) + result->value.character.string[i] = (gfc_char_t) buffer[i]; + else + { + mpz_t integer; + unsigned bytes = size_character (1, result->ts.kind); + mpz_init (integer); + gcc_assert (bytes <= sizeof (unsigned long)); + + for (i = 0; i < result->value.character.length; i++) + { + gfc_conv_tree_to_mpz (integer, + native_interpret_expr (gfc_get_char_type (result->ts.kind), + &buffer[bytes*i], buffer_size-bytes*i)); + result->value.character.string[i] + = (gfc_char_t) mpz_get_ui (integer); + } + + mpz_clear (integer); + } + + result->value.character.string[result->value.character.length] = '\0'; + + return result->value.character.length; +} + + +int +gfc_interpret_derived (unsigned char *buffer, size_t buffer_size, gfc_expr *result) +{ + gfc_component *cmp; + gfc_constructor *head = NULL, *tail = NULL; + int ptr; + tree type; + + /* The attributes of the derived type need to be bolted to the floor. */ + result->expr_type = EXPR_STRUCTURE; + + type = gfc_typenode_for_spec (&result->ts); + cmp = result->ts.derived->components; + + /* Run through the derived type components. */ + for (;cmp; cmp = cmp->next) + { + if (head == NULL) + head = tail = gfc_get_constructor (); + else + { + tail->next = gfc_get_constructor (); + tail = tail->next; + } + + /* The constructor points to the component. */ + tail->n.component = cmp; + + tail->expr = gfc_constant_result (cmp->ts.type, cmp->ts.kind, + &result->where); + tail->expr->ts = cmp->ts; + + /* Copy shape, if needed. */ + if (cmp->as && cmp->as->rank) + { + int n; + + tail->expr->expr_type = EXPR_ARRAY; + tail->expr->rank = cmp->as->rank; + + tail->expr->shape = gfc_get_shape (tail->expr->rank); + for (n = 0; n < tail->expr->rank; n++) + { + mpz_init_set_ui (tail->expr->shape[n], 1); + mpz_add (tail->expr->shape[n], tail->expr->shape[n], + cmp->as->upper[n]->value.integer); + mpz_sub (tail->expr->shape[n], tail->expr->shape[n], + cmp->as->lower[n]->value.integer); + } + } + + ptr = TREE_INT_CST_LOW (DECL_FIELD_OFFSET (cmp->backend_decl)); + gfc_target_interpret_expr (&buffer[ptr], buffer_size - ptr, + tail->expr); + + result->value.constructor = head; + } + + return int_size_in_bytes (type); +} + + +/* Read a binary buffer to a constant expression. */ +int +gfc_target_interpret_expr (unsigned char *buffer, size_t buffer_size, + gfc_expr *result) +{ + if (result->expr_type == EXPR_ARRAY) + return interpret_array (buffer, buffer_size, result); + + switch (result->ts.type) + { + case BT_INTEGER: + result->representation.length = + gfc_interpret_integer (result->ts.kind, buffer, buffer_size, + result->value.integer); + break; + + case BT_REAL: + result->representation.length = + gfc_interpret_float (result->ts.kind, buffer, buffer_size, + result->value.real); + break; + + case BT_COMPLEX: + result->representation.length = + gfc_interpret_complex (result->ts.kind, buffer, buffer_size, + result->value.complex.r, + result->value.complex.i); + break; + + case BT_LOGICAL: + result->representation.length = + gfc_interpret_logical (result->ts.kind, buffer, buffer_size, + &result->value.logical); + break; + + case BT_CHARACTER: + result->representation.length = + gfc_interpret_character (buffer, buffer_size, result); + break; + + case BT_DERIVED: + result->representation.length = + gfc_interpret_derived (buffer, buffer_size, result); + break; + + default: + gfc_internal_error ("Invalid expression in gfc_target_interpret_expr."); + break; + } + + if (result->ts.type == BT_CHARACTER) + result->representation.string + = gfc_widechar_to_char (result->value.character.string, + result->value.character.length); + else + { + result->representation.string = + (char *) gfc_getmem (result->representation.length + 1); + memcpy (result->representation.string, buffer, + result->representation.length); + result->representation.string[result->representation.length] = '\0'; + } + + return result->representation.length; +} + + +/* --------------------------------------------------------------- */ +/* Two functions used by trans-common.c to write overlapping + equivalence initializers to a buffer. This is added to the union + and the original initializers freed. */ + + +/* Writes the values of a constant expression to a char buffer. If another + unequal initializer has already been written to the buffer, this is an + error. */ + +static size_t +expr_to_char (gfc_expr *e, unsigned char *data, unsigned char *chk, size_t len) +{ + int i; + int ptr; + gfc_constructor *ctr; + gfc_component *cmp; + unsigned char *buffer; + + if (e == NULL) + return 0; + + /* Take a derived type, one component at a time, using the offsets from the backend + declaration. */ + if (e->ts.type == BT_DERIVED) + { + ctr = e->value.constructor; + cmp = e->ts.derived->components; + for (;ctr; ctr = ctr->next, cmp = cmp->next) + { + gcc_assert (cmp && cmp->backend_decl); + if (!ctr->expr) + continue; + ptr = TREE_INT_CST_LOW(DECL_FIELD_OFFSET(cmp->backend_decl)) + + TREE_INT_CST_LOW(DECL_FIELD_BIT_OFFSET(cmp->backend_decl))/8; + expr_to_char (ctr->expr, &data[ptr], &chk[ptr], len); + } + return len; + } + + /* Otherwise, use the target-memory machinery to write a bitwise image, appropriate + to the target, in a buffer and check off the initialized part of the buffer. */ + len = gfc_target_expr_size (e); + buffer = (unsigned char*)alloca (len); + len = gfc_target_encode_expr (e, buffer, len); + + for (i = 0; i < (int)len; i++) + { + if (chk[i] && (buffer[i] != data[i])) + { + gfc_error ("Overlapping unequal initializers in EQUIVALENCE " + "at %L", &e->where); + return 0; + } + chk[i] = 0xFF; + } + + memcpy (data, buffer, len); + return len; +} + + +/* Writes the values from the equivalence initializers to a char* array + that will be written to the constructor to make the initializer for + the union declaration. */ + +size_t +gfc_merge_initializers (gfc_typespec ts, gfc_expr *e, unsigned char *data, + unsigned char *chk, size_t length) +{ + size_t len = 0; + gfc_constructor * c; + + switch (e->expr_type) + { + case EXPR_CONSTANT: + case EXPR_STRUCTURE: + len = expr_to_char (e, &data[0], &chk[0], length); + + break; + + case EXPR_ARRAY: + for (c = e->value.constructor; c; c = c->next) + { + size_t elt_size = gfc_target_expr_size (c->expr); + + if (c->n.offset) + len = elt_size * (size_t)mpz_get_si (c->n.offset); + + len = len + gfc_merge_initializers (ts, c->expr, &data[len], + &chk[len], length - len); + } + break; + + default: + return 0; + } + + return len; +} + + +/* Transfer the bitpattern of a (integer) BOZ to real or complex variables. + When successful, no BOZ or nothing to do, true is returned. */ + +bool +gfc_convert_boz (gfc_expr *expr, gfc_typespec *ts) +{ + size_t buffer_size, boz_bit_size, ts_bit_size; + int index; + unsigned char *buffer; + + if (!expr->is_boz) + return true; + + gcc_assert (expr->expr_type == EXPR_CONSTANT + && expr->ts.type == BT_INTEGER); + + /* Don't convert BOZ to logical, character, derived etc. */ + if (ts->type == BT_REAL) + { + buffer_size = size_float (ts->kind); + ts_bit_size = buffer_size * 8; + } + else if (ts->type == BT_COMPLEX) + { + buffer_size = size_complex (ts->kind); + ts_bit_size = buffer_size * 8 / 2; + } + else + return true; + + /* Convert BOZ to the smallest possible integer kind. */ + boz_bit_size = mpz_sizeinbase (expr->value.integer, 2); + + if (boz_bit_size > ts_bit_size) + { + gfc_error_now ("BOZ constant at %L is too large (%ld vs %ld bits)", + &expr->where, (long) boz_bit_size, (long) ts_bit_size); + return false; + } + + for (index = 0; gfc_integer_kinds[index].kind != 0; ++index) + if ((unsigned) gfc_integer_kinds[index].bit_size >= ts_bit_size) + break; + + expr->ts.kind = gfc_integer_kinds[index].kind; + buffer_size = MAX (buffer_size, size_integer (expr->ts.kind)); + + buffer = (unsigned char*)alloca (buffer_size); + encode_integer (expr->ts.kind, expr->value.integer, buffer, buffer_size); + mpz_clear (expr->value.integer); + + if (ts->type == BT_REAL) + { + mpfr_init (expr->value.real); + gfc_interpret_float (ts->kind, buffer, buffer_size, expr->value.real); + } + else + { + mpfr_init (expr->value.complex.r); + mpfr_init (expr->value.complex.i); + gfc_interpret_complex (ts->kind, buffer, buffer_size, + expr->value.complex.r, expr->value.complex.i); + } + expr->is_boz = 0; + expr->ts.type = ts->type; + expr->ts.kind = ts->kind; + + return true; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/target-memory.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/target-memory.h new file mode 100644 index 0000000000..bc3a1e8c04 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/target-memory.h @@ -0,0 +1,53 @@ +/* Simulate storage of variables into target memory, header. + Copyright (C) 2007, 2008 + Free Software Foundation, Inc. + Contributed by Paul Thomas and Brooks Moses + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#ifndef GFC_TARGET_MEMORY_H +#define GFC_TARGET_MEMORY_H + +#include "gfortran.h" + +/* Convert a BOZ to REAL or COMPLEX. */ +bool gfc_convert_boz (gfc_expr *, gfc_typespec *); + +/* Return the size of an expression in its target representation. */ +size_t gfc_target_expr_size (gfc_expr *); + +/* Write a constant expression in binary form to a target buffer. */ +int gfc_encode_character (int, int, const gfc_char_t *, unsigned char *, + size_t); +int gfc_target_encode_expr (gfc_expr *, unsigned char *, size_t); + +/* Read a target buffer into a constant expression. */ + +int gfc_interpret_integer (int, unsigned char *, size_t, mpz_t); +int gfc_interpret_float (int, unsigned char *, size_t, mpfr_t); +int gfc_interpret_complex (int, unsigned char *, size_t, mpfr_t, mpfr_t); +int gfc_interpret_logical (int, unsigned char *, size_t, int *); +int gfc_interpret_character (unsigned char *, size_t, gfc_expr *); +int gfc_interpret_derived (unsigned char *, size_t, gfc_expr *); +int gfc_target_interpret_expr (unsigned char *, size_t, gfc_expr *); + +/* Merge overlapping equivalence initializers for trans-common.c. */ +size_t gfc_merge_initializers (gfc_typespec, gfc_expr *, + unsigned char *, unsigned char *, + size_t); + +#endif /* GFC_TARGET_MEMORY_H */ diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-array.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-array.c new file mode 100644 index 0000000000..6c623504af --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-array.c @@ -0,0 +1,6232 @@ +/* Array translation routines + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Paul Brook + and Steven Bosscher + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* trans-array.c-- Various array related code, including scalarization, + allocation, initialization and other support routines. */ + +/* How the scalarizer works. + In gfortran, array expressions use the same core routines as scalar + expressions. + First, a Scalarization State (SS) chain is built. This is done by walking + the expression tree, and building a linear list of the terms in the + expression. As the tree is walked, scalar subexpressions are translated. + + The scalarization parameters are stored in a gfc_loopinfo structure. + First the start and stride of each term is calculated by + gfc_conv_ss_startstride. During this process the expressions for the array + descriptors and data pointers are also translated. + + If the expression is an assignment, we must then resolve any dependencies. + In fortran all the rhs values of an assignment must be evaluated before + any assignments take place. This can require a temporary array to store the + values. We also require a temporary when we are passing array expressions + or vector subscripts as procedure parameters. + + Array sections are passed without copying to a temporary. These use the + scalarizer to determine the shape of the section. The flag + loop->array_parameter tells the scalarizer that the actual values and loop + variables will not be required. + + The function gfc_conv_loop_setup generates the scalarization setup code. + It determines the range of the scalarizing loop variables. If a temporary + is required, this is created and initialized. Code for scalar expressions + taken outside the loop is also generated at this time. Next the offset and + scaling required to translate from loop variables to array indices for each + term is calculated. + + A call to gfc_start_scalarized_body marks the start of the scalarized + expression. This creates a scope and declares the loop variables. Before + calling this gfc_make_ss_chain_used must be used to indicate which terms + will be used inside this loop. + + The scalar gfc_conv_* functions are then used to build the main body of the + scalarization loop. Scalarization loop variables and precalculated scalar + values are automatically substituted. Note that gfc_advance_se_ss_chain + must be used, rather than changing the se->ss directly. + + For assignment expressions requiring a temporary two sub loops are + generated. The first stores the result of the expression in the temporary, + the second copies it to the result. A call to + gfc_trans_scalarized_loop_boundary marks the end of the main loop code and + the start of the copying loop. The temporary may be less than full rank. + + Finally gfc_trans_scalarizing_loops is called to generate the implicit do + loops. The loops are added to the pre chain of the loopinfo. The post + chain may still contain cleanup code. + + After the loop code has been added into its parent scope gfc_cleanup_loop + is called to free all the SS allocated by the scalarizer. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "gimple.h" +#include "ggc.h" +#include "toplev.h" +#include "real.h" +#include "flags.h" +#include "gfortran.h" +#include "trans.h" +#include "trans-stmt.h" +#include "trans-types.h" +#include "trans-array.h" +#include "trans-const.h" +#include "dependency.h" + +static gfc_ss *gfc_walk_subexpr (gfc_ss *, gfc_expr *); +static bool gfc_get_array_constructor_size (mpz_t *, gfc_constructor *); + +/* The contents of this structure aren't actually used, just the address. */ +static gfc_ss gfc_ss_terminator_var; +gfc_ss * const gfc_ss_terminator = &gfc_ss_terminator_var; + + +static tree +gfc_array_dataptr_type (tree desc) +{ + return (GFC_TYPE_ARRAY_DATAPTR_TYPE (TREE_TYPE (desc))); +} + + +/* Build expressions to access the members of an array descriptor. + It's surprisingly easy to mess up here, so never access + an array descriptor by "brute force", always use these + functions. This also avoids problems if we change the format + of an array descriptor. + + To understand these magic numbers, look at the comments + before gfc_build_array_type() in trans-types.c. + + The code within these defines should be the only code which knows the format + of an array descriptor. + + Any code just needing to read obtain the bounds of an array should use + gfc_conv_array_* rather than the following functions as these will return + know constant values, and work with arrays which do not have descriptors. + + Don't forget to #undef these! */ + +#define DATA_FIELD 0 +#define OFFSET_FIELD 1 +#define DTYPE_FIELD 2 +#define DIMENSION_FIELD 3 + +#define STRIDE_SUBFIELD 0 +#define LBOUND_SUBFIELD 1 +#define UBOUND_SUBFIELD 2 + +/* This provides READ-ONLY access to the data field. The field itself + doesn't have the proper type. */ + +tree +gfc_conv_descriptor_data_get (tree desc) +{ + tree field, type, t; + + type = TREE_TYPE (desc); + gcc_assert (GFC_DESCRIPTOR_TYPE_P (type)); + + field = TYPE_FIELDS (type); + gcc_assert (DATA_FIELD == 0); + + t = fold_build3 (COMPONENT_REF, TREE_TYPE (field), desc, field, NULL_TREE); + t = fold_convert (GFC_TYPE_ARRAY_DATAPTR_TYPE (type), t); + + return t; +} + +/* This provides WRITE access to the data field. + + TUPLES_P is true if we are generating tuples. + + This function gets called through the following macros: + gfc_conv_descriptor_data_set + gfc_conv_descriptor_data_set. */ + +void +gfc_conv_descriptor_data_set (stmtblock_t *block, tree desc, tree value) +{ + tree field, type, t; + + type = TREE_TYPE (desc); + gcc_assert (GFC_DESCRIPTOR_TYPE_P (type)); + + field = TYPE_FIELDS (type); + gcc_assert (DATA_FIELD == 0); + + t = fold_build3 (COMPONENT_REF, TREE_TYPE (field), desc, field, NULL_TREE); + gfc_add_modify (block, t, fold_convert (TREE_TYPE (field), value)); +} + + +/* This provides address access to the data field. This should only be + used by array allocation, passing this on to the runtime. */ + +tree +gfc_conv_descriptor_data_addr (tree desc) +{ + tree field, type, t; + + type = TREE_TYPE (desc); + gcc_assert (GFC_DESCRIPTOR_TYPE_P (type)); + + field = TYPE_FIELDS (type); + gcc_assert (DATA_FIELD == 0); + + t = fold_build3 (COMPONENT_REF, TREE_TYPE (field), desc, field, NULL_TREE); + return build_fold_addr_expr (t); +} + +tree +gfc_conv_descriptor_offset (tree desc) +{ + tree type; + tree field; + + type = TREE_TYPE (desc); + gcc_assert (GFC_DESCRIPTOR_TYPE_P (type)); + + field = gfc_advance_chain (TYPE_FIELDS (type), OFFSET_FIELD); + gcc_assert (field != NULL_TREE && TREE_TYPE (field) == gfc_array_index_type); + + return fold_build3 (COMPONENT_REF, TREE_TYPE (field), + desc, field, NULL_TREE); +} + +tree +gfc_conv_descriptor_dtype (tree desc) +{ + tree field; + tree type; + + type = TREE_TYPE (desc); + gcc_assert (GFC_DESCRIPTOR_TYPE_P (type)); + + field = gfc_advance_chain (TYPE_FIELDS (type), DTYPE_FIELD); + gcc_assert (field != NULL_TREE && TREE_TYPE (field) == gfc_array_index_type); + + return fold_build3 (COMPONENT_REF, TREE_TYPE (field), + desc, field, NULL_TREE); +} + +static tree +gfc_conv_descriptor_dimension (tree desc, tree dim) +{ + tree field; + tree type; + tree tmp; + + type = TREE_TYPE (desc); + gcc_assert (GFC_DESCRIPTOR_TYPE_P (type)); + + field = gfc_advance_chain (TYPE_FIELDS (type), DIMENSION_FIELD); + gcc_assert (field != NULL_TREE + && TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE + && TREE_CODE (TREE_TYPE (TREE_TYPE (field))) == RECORD_TYPE); + + tmp = fold_build3 (COMPONENT_REF, TREE_TYPE (field), + desc, field, NULL_TREE); + tmp = gfc_build_array_ref (tmp, dim, NULL); + return tmp; +} + +tree +gfc_conv_descriptor_stride (tree desc, tree dim) +{ + tree tmp; + tree field; + + tmp = gfc_conv_descriptor_dimension (desc, dim); + field = TYPE_FIELDS (TREE_TYPE (tmp)); + field = gfc_advance_chain (field, STRIDE_SUBFIELD); + gcc_assert (field != NULL_TREE && TREE_TYPE (field) == gfc_array_index_type); + + tmp = fold_build3 (COMPONENT_REF, TREE_TYPE (field), + tmp, field, NULL_TREE); + return tmp; +} + +tree +gfc_conv_descriptor_lbound (tree desc, tree dim) +{ + tree tmp; + tree field; + + tmp = gfc_conv_descriptor_dimension (desc, dim); + field = TYPE_FIELDS (TREE_TYPE (tmp)); + field = gfc_advance_chain (field, LBOUND_SUBFIELD); + gcc_assert (field != NULL_TREE && TREE_TYPE (field) == gfc_array_index_type); + + tmp = fold_build3 (COMPONENT_REF, TREE_TYPE (field), + tmp, field, NULL_TREE); + return tmp; +} + +tree +gfc_conv_descriptor_ubound (tree desc, tree dim) +{ + tree tmp; + tree field; + + tmp = gfc_conv_descriptor_dimension (desc, dim); + field = TYPE_FIELDS (TREE_TYPE (tmp)); + field = gfc_advance_chain (field, UBOUND_SUBFIELD); + gcc_assert (field != NULL_TREE && TREE_TYPE (field) == gfc_array_index_type); + + tmp = fold_build3 (COMPONENT_REF, TREE_TYPE (field), + tmp, field, NULL_TREE); + return tmp; +} + + +/* Build a null array descriptor constructor. */ + +tree +gfc_build_null_descriptor (tree type) +{ + tree field; + tree tmp; + + gcc_assert (GFC_DESCRIPTOR_TYPE_P (type)); + gcc_assert (DATA_FIELD == 0); + field = TYPE_FIELDS (type); + + /* Set a NULL data pointer. */ + tmp = build_constructor_single (type, field, null_pointer_node); + TREE_CONSTANT (tmp) = 1; + /* All other fields are ignored. */ + + return tmp; +} + + +/* Cleanup those #defines. */ + +#undef DATA_FIELD +#undef OFFSET_FIELD +#undef DTYPE_FIELD +#undef DIMENSION_FIELD +#undef STRIDE_SUBFIELD +#undef LBOUND_SUBFIELD +#undef UBOUND_SUBFIELD + + +/* Mark a SS chain as used. Flags specifies in which loops the SS is used. + flags & 1 = Main loop body. + flags & 2 = temp copy loop. */ + +void +gfc_mark_ss_chain_used (gfc_ss * ss, unsigned flags) +{ + for (; ss != gfc_ss_terminator; ss = ss->next) + ss->useflags = flags; +} + +static void gfc_free_ss (gfc_ss *); + + +/* Free a gfc_ss chain. */ + +static void +gfc_free_ss_chain (gfc_ss * ss) +{ + gfc_ss *next; + + while (ss != gfc_ss_terminator) + { + gcc_assert (ss != NULL); + next = ss->next; + gfc_free_ss (ss); + ss = next; + } +} + + +/* Free a SS. */ + +static void +gfc_free_ss (gfc_ss * ss) +{ + int n; + + switch (ss->type) + { + case GFC_SS_SECTION: + for (n = 0; n < GFC_MAX_DIMENSIONS; n++) + { + if (ss->data.info.subscript[n]) + gfc_free_ss_chain (ss->data.info.subscript[n]); + } + break; + + default: + break; + } + + gfc_free (ss); +} + + +/* Free all the SS associated with a loop. */ + +void +gfc_cleanup_loop (gfc_loopinfo * loop) +{ + gfc_ss *ss; + gfc_ss *next; + + ss = loop->ss; + while (ss != gfc_ss_terminator) + { + gcc_assert (ss != NULL); + next = ss->loop_chain; + gfc_free_ss (ss); + ss = next; + } +} + + +/* Associate a SS chain with a loop. */ + +void +gfc_add_ss_to_loop (gfc_loopinfo * loop, gfc_ss * head) +{ + gfc_ss *ss; + + if (head == gfc_ss_terminator) + return; + + ss = head; + for (; ss && ss != gfc_ss_terminator; ss = ss->next) + { + if (ss->next == gfc_ss_terminator) + ss->loop_chain = loop->ss; + else + ss->loop_chain = ss->next; + } + gcc_assert (ss == gfc_ss_terminator); + loop->ss = head; +} + + +/* Generate an initializer for a static pointer or allocatable array. */ + +void +gfc_trans_static_array_pointer (gfc_symbol * sym) +{ + tree type; + + gcc_assert (TREE_STATIC (sym->backend_decl)); + /* Just zero the data member. */ + type = TREE_TYPE (sym->backend_decl); + DECL_INITIAL (sym->backend_decl) = gfc_build_null_descriptor (type); +} + + +/* If the bounds of SE's loop have not yet been set, see if they can be + determined from array spec AS, which is the array spec of a called + function. MAPPING maps the callee's dummy arguments to the values + that the caller is passing. Add any initialization and finalization + code to SE. */ + +void +gfc_set_loop_bounds_from_array_spec (gfc_interface_mapping * mapping, + gfc_se * se, gfc_array_spec * as) +{ + int n, dim; + gfc_se tmpse; + tree lower; + tree upper; + tree tmp; + + if (as && as->type == AS_EXPLICIT) + for (dim = 0; dim < se->loop->dimen; dim++) + { + n = se->loop->order[dim]; + if (se->loop->to[n] == NULL_TREE) + { + /* Evaluate the lower bound. */ + gfc_init_se (&tmpse, NULL); + gfc_apply_interface_mapping (mapping, &tmpse, as->lower[dim]); + gfc_add_block_to_block (&se->pre, &tmpse.pre); + gfc_add_block_to_block (&se->post, &tmpse.post); + lower = fold_convert (gfc_array_index_type, tmpse.expr); + + /* ...and the upper bound. */ + gfc_init_se (&tmpse, NULL); + gfc_apply_interface_mapping (mapping, &tmpse, as->upper[dim]); + gfc_add_block_to_block (&se->pre, &tmpse.pre); + gfc_add_block_to_block (&se->post, &tmpse.post); + upper = fold_convert (gfc_array_index_type, tmpse.expr); + + /* Set the upper bound of the loop to UPPER - LOWER. */ + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, upper, lower); + tmp = gfc_evaluate_now (tmp, &se->pre); + se->loop->to[n] = tmp; + } + } +} + + +/* Generate code to allocate an array temporary, or create a variable to + hold the data. If size is NULL, zero the descriptor so that the + callee will allocate the array. If DEALLOC is true, also generate code to + free the array afterwards. + + If INITIAL is not NULL, it is packed using internal_pack and the result used + as data instead of allocating a fresh, unitialized area of memory. + + Initialization code is added to PRE and finalization code to POST. + DYNAMIC is true if the caller may want to extend the array later + using realloc. This prevents us from putting the array on the stack. */ + +static void +gfc_trans_allocate_array_storage (stmtblock_t * pre, stmtblock_t * post, + gfc_ss_info * info, tree size, tree nelem, + tree initial, bool dynamic, bool dealloc) +{ + tree tmp; + tree desc; + bool onstack; + + desc = info->descriptor; + info->offset = gfc_index_zero_node; + if (size == NULL_TREE || integer_zerop (size)) + { + /* A callee allocated array. */ + gfc_conv_descriptor_data_set (pre, desc, null_pointer_node); + onstack = FALSE; + } + else + { + /* Allocate the temporary. */ + onstack = !dynamic && initial == NULL_TREE + && gfc_can_put_var_on_stack (size); + + if (onstack) + { + /* Make a temporary variable to hold the data. */ + tmp = fold_build2 (MINUS_EXPR, TREE_TYPE (nelem), nelem, + gfc_index_one_node); + tmp = build_range_type (gfc_array_index_type, gfc_index_zero_node, + tmp); + tmp = build_array_type (gfc_get_element_type (TREE_TYPE (desc)), + tmp); + tmp = gfc_create_var (tmp, "A"); + tmp = build_fold_addr_expr (tmp); + gfc_conv_descriptor_data_set (pre, desc, tmp); + } + else + { + /* Allocate memory to hold the data or call internal_pack. */ + if (initial == NULL_TREE) + { + tmp = gfc_call_malloc (pre, NULL, size); + tmp = gfc_evaluate_now (tmp, pre); + } + else + { + tree packed; + tree source_data; + tree was_packed; + stmtblock_t do_copying; + + tmp = TREE_TYPE (initial); /* Pointer to descriptor. */ + gcc_assert (TREE_CODE (tmp) == POINTER_TYPE); + tmp = TREE_TYPE (tmp); /* The descriptor itself. */ + tmp = gfc_get_element_type (tmp); + gcc_assert (tmp == gfc_get_element_type (TREE_TYPE (desc))); + packed = gfc_create_var (build_pointer_type (tmp), "data"); + + tmp = build_call_expr (gfor_fndecl_in_pack, 1, initial); + tmp = fold_convert (TREE_TYPE (packed), tmp); + gfc_add_modify (pre, packed, tmp); + + tmp = build_fold_indirect_ref (initial); + source_data = gfc_conv_descriptor_data_get (tmp); + + /* internal_pack may return source->data without any allocation + or copying if it is already packed. If that's the case, we + need to allocate and copy manually. */ + + gfc_start_block (&do_copying); + tmp = gfc_call_malloc (&do_copying, NULL, size); + tmp = fold_convert (TREE_TYPE (packed), tmp); + gfc_add_modify (&do_copying, packed, tmp); + tmp = gfc_build_memcpy_call (packed, source_data, size); + gfc_add_expr_to_block (&do_copying, tmp); + + was_packed = fold_build2 (EQ_EXPR, boolean_type_node, + packed, source_data); + tmp = gfc_finish_block (&do_copying); + tmp = build3_v (COND_EXPR, was_packed, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (pre, tmp); + + tmp = fold_convert (pvoid_type_node, packed); + } + + gfc_conv_descriptor_data_set (pre, desc, tmp); + } + } + info->data = gfc_conv_descriptor_data_get (desc); + + /* The offset is zero because we create temporaries with a zero + lower bound. */ + tmp = gfc_conv_descriptor_offset (desc); + gfc_add_modify (pre, tmp, gfc_index_zero_node); + + if (dealloc && !onstack) + { + /* Free the temporary. */ + tmp = gfc_conv_descriptor_data_get (desc); + tmp = gfc_call_free (fold_convert (pvoid_type_node, tmp)); + gfc_add_expr_to_block (post, tmp); + } +} + + +/* Generate code to create and initialize the descriptor for a temporary + array. This is used for both temporaries needed by the scalarizer, and + functions returning arrays. Adjusts the loop variables to be + zero-based, and calculates the loop bounds for callee allocated arrays. + Allocate the array unless it's callee allocated (we have a callee + allocated array if 'callee_alloc' is true, or if loop->to[n] is + NULL_TREE for any n). Also fills in the descriptor, data and offset + fields of info if known. Returns the size of the array, or NULL for a + callee allocated array. + + PRE, POST, INITIAL, DYNAMIC and DEALLOC are as for + gfc_trans_allocate_array_storage. + */ + +tree +gfc_trans_create_temp_array (stmtblock_t * pre, stmtblock_t * post, + gfc_loopinfo * loop, gfc_ss_info * info, + tree eltype, tree initial, bool dynamic, + bool dealloc, bool callee_alloc, locus * where) +{ + tree type; + tree desc; + tree tmp; + tree size; + tree nelem; + tree cond; + tree or_expr; + int n; + int dim; + + gcc_assert (info->dimen > 0); + + if (gfc_option.warn_array_temp && where) + gfc_warning ("Creating array temporary at %L", where); + + /* Set the lower bound to zero. */ + for (dim = 0; dim < info->dimen; dim++) + { + n = loop->order[dim]; + /* Callee allocated arrays may not have a known bound yet. */ + if (loop->to[n]) + loop->to[n] = gfc_evaluate_now (fold_build2 (MINUS_EXPR, + gfc_array_index_type, + loop->to[n], loop->from[n]), pre); + loop->from[n] = gfc_index_zero_node; + + info->delta[dim] = gfc_index_zero_node; + info->start[dim] = gfc_index_zero_node; + info->end[dim] = gfc_index_zero_node; + info->stride[dim] = gfc_index_one_node; + info->dim[dim] = dim; + } + + /* Initialize the descriptor. */ + type = + gfc_get_array_type_bounds (eltype, info->dimen, loop->from, loop->to, 1, + GFC_ARRAY_UNKNOWN); + desc = gfc_create_var (type, "atmp"); + GFC_DECL_PACKED_ARRAY (desc) = 1; + + info->descriptor = desc; + size = gfc_index_one_node; + + /* Fill in the array dtype. */ + tmp = gfc_conv_descriptor_dtype (desc); + gfc_add_modify (pre, tmp, gfc_get_dtype (TREE_TYPE (desc))); + + /* + Fill in the bounds and stride. This is a packed array, so: + + size = 1; + for (n = 0; n < rank; n++) + { + stride[n] = size + delta = ubound[n] + 1 - lbound[n]; + size = size * delta; + } + size = size * sizeof(element); + */ + + or_expr = NULL_TREE; + + /* If there is at least one null loop->to[n], it is a callee allocated + array. */ + for (n = 0; n < info->dimen; n++) + if (loop->to[n] == NULL_TREE) + { + size = NULL_TREE; + break; + } + + for (n = 0; n < info->dimen; n++) + { + if (size == NULL_TREE) + { + /* For a callee allocated array express the loop bounds in terms + of the descriptor fields. */ + tmp = + fold_build2 (MINUS_EXPR, gfc_array_index_type, + gfc_conv_descriptor_ubound (desc, gfc_rank_cst[n]), + gfc_conv_descriptor_lbound (desc, gfc_rank_cst[n])); + loop->to[n] = tmp; + continue; + } + + /* Store the stride and bound components in the descriptor. */ + tmp = gfc_conv_descriptor_stride (desc, gfc_rank_cst[n]); + gfc_add_modify (pre, tmp, size); + + tmp = gfc_conv_descriptor_lbound (desc, gfc_rank_cst[n]); + gfc_add_modify (pre, tmp, gfc_index_zero_node); + + tmp = gfc_conv_descriptor_ubound (desc, gfc_rank_cst[n]); + gfc_add_modify (pre, tmp, loop->to[n]); + + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + loop->to[n], gfc_index_one_node); + + /* Check whether the size for this dimension is negative. */ + cond = fold_build2 (LE_EXPR, boolean_type_node, tmp, + gfc_index_zero_node); + cond = gfc_evaluate_now (cond, pre); + + if (n == 0) + or_expr = cond; + else + or_expr = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, or_expr, cond); + + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, tmp); + size = gfc_evaluate_now (size, pre); + } + + /* Get the size of the array. */ + + if (size && !callee_alloc) + { + /* If or_expr is true, then the extent in at least one + dimension is zero and the size is set to zero. */ + size = fold_build3 (COND_EXPR, gfc_array_index_type, + or_expr, gfc_index_zero_node, size); + + nelem = size; + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, + fold_convert (gfc_array_index_type, + TYPE_SIZE_UNIT (gfc_get_element_type (type)))); + } + else + { + nelem = size; + size = NULL_TREE; + } + + gfc_trans_allocate_array_storage (pre, post, info, size, nelem, initial, + dynamic, dealloc); + + if (info->dimen > loop->temp_dim) + loop->temp_dim = info->dimen; + + return size; +} + + +/* Generate code to transpose array EXPR by creating a new descriptor + in which the dimension specifications have been reversed. */ + +void +gfc_conv_array_transpose (gfc_se * se, gfc_expr * expr) +{ + tree dest, src, dest_index, src_index; + gfc_loopinfo *loop; + gfc_ss_info *dest_info, *src_info; + gfc_ss *dest_ss, *src_ss; + gfc_se src_se; + int n; + + loop = se->loop; + + src_ss = gfc_walk_expr (expr); + dest_ss = se->ss; + + src_info = &src_ss->data.info; + dest_info = &dest_ss->data.info; + gcc_assert (dest_info->dimen == 2); + gcc_assert (src_info->dimen == 2); + + /* Get a descriptor for EXPR. */ + gfc_init_se (&src_se, NULL); + gfc_conv_expr_descriptor (&src_se, expr, src_ss); + gfc_add_block_to_block (&se->pre, &src_se.pre); + gfc_add_block_to_block (&se->post, &src_se.post); + src = src_se.expr; + + /* Allocate a new descriptor for the return value. */ + dest = gfc_create_var (TREE_TYPE (src), "atmp"); + dest_info->descriptor = dest; + se->expr = dest; + + /* Copy across the dtype field. */ + gfc_add_modify (&se->pre, + gfc_conv_descriptor_dtype (dest), + gfc_conv_descriptor_dtype (src)); + + /* Copy the dimension information, renumbering dimension 1 to 0 and + 0 to 1. */ + for (n = 0; n < 2; n++) + { + dest_info->delta[n] = gfc_index_zero_node; + dest_info->start[n] = gfc_index_zero_node; + dest_info->end[n] = gfc_index_zero_node; + dest_info->stride[n] = gfc_index_one_node; + dest_info->dim[n] = n; + + dest_index = gfc_rank_cst[n]; + src_index = gfc_rank_cst[1 - n]; + + gfc_add_modify (&se->pre, + gfc_conv_descriptor_stride (dest, dest_index), + gfc_conv_descriptor_stride (src, src_index)); + + gfc_add_modify (&se->pre, + gfc_conv_descriptor_lbound (dest, dest_index), + gfc_conv_descriptor_lbound (src, src_index)); + + gfc_add_modify (&se->pre, + gfc_conv_descriptor_ubound (dest, dest_index), + gfc_conv_descriptor_ubound (src, src_index)); + + if (!loop->to[n]) + { + gcc_assert (integer_zerop (loop->from[n])); + loop->to[n] = + fold_build2 (MINUS_EXPR, gfc_array_index_type, + gfc_conv_descriptor_ubound (dest, dest_index), + gfc_conv_descriptor_lbound (dest, dest_index)); + } + } + + /* Copy the data pointer. */ + dest_info->data = gfc_conv_descriptor_data_get (src); + gfc_conv_descriptor_data_set (&se->pre, dest, dest_info->data); + + /* Copy the offset. This is not changed by transposition; the top-left + element is still at the same offset as before, except where the loop + starts at zero. */ + if (!integer_zerop (loop->from[0])) + dest_info->offset = gfc_conv_descriptor_offset (src); + else + dest_info->offset = gfc_index_zero_node; + + gfc_add_modify (&se->pre, + gfc_conv_descriptor_offset (dest), + dest_info->offset); + + if (dest_info->dimen > loop->temp_dim) + loop->temp_dim = dest_info->dimen; +} + + +/* Return the number of iterations in a loop that starts at START, + ends at END, and has step STEP. */ + +static tree +gfc_get_iteration_count (tree start, tree end, tree step) +{ + tree tmp; + tree type; + + type = TREE_TYPE (step); + tmp = fold_build2 (MINUS_EXPR, type, end, start); + tmp = fold_build2 (FLOOR_DIV_EXPR, type, tmp, step); + tmp = fold_build2 (PLUS_EXPR, type, tmp, build_int_cst (type, 1)); + tmp = fold_build2 (MAX_EXPR, type, tmp, build_int_cst (type, 0)); + return fold_convert (gfc_array_index_type, tmp); +} + + +/* Extend the data in array DESC by EXTRA elements. */ + +static void +gfc_grow_array (stmtblock_t * pblock, tree desc, tree extra) +{ + tree arg0, arg1; + tree tmp; + tree size; + tree ubound; + + if (integer_zerop (extra)) + return; + + ubound = gfc_conv_descriptor_ubound (desc, gfc_rank_cst[0]); + + /* Add EXTRA to the upper bound. */ + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, ubound, extra); + gfc_add_modify (pblock, ubound, tmp); + + /* Get the value of the current data pointer. */ + arg0 = gfc_conv_descriptor_data_get (desc); + + /* Calculate the new array size. */ + size = TYPE_SIZE_UNIT (gfc_get_element_type (TREE_TYPE (desc))); + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + ubound, gfc_index_one_node); + arg1 = fold_build2 (MULT_EXPR, size_type_node, + fold_convert (size_type_node, tmp), + fold_convert (size_type_node, size)); + + /* Call the realloc() function. */ + tmp = gfc_call_realloc (pblock, arg0, arg1); + gfc_conv_descriptor_data_set (pblock, desc, tmp); +} + + +/* Return true if the bounds of iterator I can only be determined + at run time. */ + +static inline bool +gfc_iterator_has_dynamic_bounds (gfc_iterator * i) +{ + return (i->start->expr_type != EXPR_CONSTANT + || i->end->expr_type != EXPR_CONSTANT + || i->step->expr_type != EXPR_CONSTANT); +} + + +/* Split the size of constructor element EXPR into the sum of two terms, + one of which can be determined at compile time and one of which must + be calculated at run time. Set *SIZE to the former and return true + if the latter might be nonzero. */ + +static bool +gfc_get_array_constructor_element_size (mpz_t * size, gfc_expr * expr) +{ + if (expr->expr_type == EXPR_ARRAY) + return gfc_get_array_constructor_size (size, expr->value.constructor); + else if (expr->rank > 0) + { + /* Calculate everything at run time. */ + mpz_set_ui (*size, 0); + return true; + } + else + { + /* A single element. */ + mpz_set_ui (*size, 1); + return false; + } +} + + +/* Like gfc_get_array_constructor_element_size, but applied to the whole + of array constructor C. */ + +static bool +gfc_get_array_constructor_size (mpz_t * size, gfc_constructor * c) +{ + gfc_iterator *i; + mpz_t val; + mpz_t len; + bool dynamic; + + mpz_set_ui (*size, 0); + mpz_init (len); + mpz_init (val); + + dynamic = false; + for (; c; c = c->next) + { + i = c->iterator; + if (i && gfc_iterator_has_dynamic_bounds (i)) + dynamic = true; + else + { + dynamic |= gfc_get_array_constructor_element_size (&len, c->expr); + if (i) + { + /* Multiply the static part of the element size by the + number of iterations. */ + mpz_sub (val, i->end->value.integer, i->start->value.integer); + mpz_fdiv_q (val, val, i->step->value.integer); + mpz_add_ui (val, val, 1); + if (mpz_sgn (val) > 0) + mpz_mul (len, len, val); + else + mpz_set_ui (len, 0); + } + mpz_add (*size, *size, len); + } + } + mpz_clear (len); + mpz_clear (val); + return dynamic; +} + + +/* Make sure offset is a variable. */ + +static void +gfc_put_offset_into_var (stmtblock_t * pblock, tree * poffset, + tree * offsetvar) +{ + /* We should have already created the offset variable. We cannot + create it here because we may be in an inner scope. */ + gcc_assert (*offsetvar != NULL_TREE); + gfc_add_modify (pblock, *offsetvar, *poffset); + *poffset = *offsetvar; + TREE_USED (*offsetvar) = 1; +} + + +/* Variables needed for bounds-checking. */ +static bool first_len; +static tree first_len_val; +static bool typespec_chararray_ctor; + +static void +gfc_trans_array_ctor_element (stmtblock_t * pblock, tree desc, + tree offset, gfc_se * se, gfc_expr * expr) +{ + tree tmp; + + gfc_conv_expr (se, expr); + + /* Store the value. */ + tmp = build_fold_indirect_ref (gfc_conv_descriptor_data_get (desc)); + tmp = gfc_build_array_ref (tmp, offset, NULL); + + if (expr->ts.type == BT_CHARACTER) + { + int i = gfc_validate_kind (BT_CHARACTER, expr->ts.kind, false); + tree esize; + + esize = size_in_bytes (gfc_get_element_type (TREE_TYPE (desc))); + esize = fold_convert (gfc_charlen_type_node, esize); + esize = fold_build2 (TRUNC_DIV_EXPR, gfc_charlen_type_node, esize, + build_int_cst (gfc_charlen_type_node, + gfc_character_kinds[i].bit_size / 8)); + + gfc_conv_string_parameter (se); + if (POINTER_TYPE_P (TREE_TYPE (tmp))) + { + /* The temporary is an array of pointers. */ + se->expr = fold_convert (TREE_TYPE (tmp), se->expr); + gfc_add_modify (&se->pre, tmp, se->expr); + } + else + { + /* The temporary is an array of string values. */ + tmp = gfc_build_addr_expr (gfc_get_pchar_type (expr->ts.kind), tmp); + /* We know the temporary and the value will be the same length, + so can use memcpy. */ + gfc_trans_string_copy (&se->pre, esize, tmp, expr->ts.kind, + se->string_length, se->expr, expr->ts.kind); + } + if (flag_bounds_check && !typespec_chararray_ctor) + { + if (first_len) + { + gfc_add_modify (&se->pre, first_len_val, + se->string_length); + first_len = false; + } + else + { + /* Verify that all constructor elements are of the same + length. */ + tree cond = fold_build2 (NE_EXPR, boolean_type_node, + first_len_val, se->string_length); + gfc_trans_runtime_check + (true, false, cond, &se->pre, &expr->where, + "Different CHARACTER lengths (%ld/%ld) in array constructor", + fold_convert (long_integer_type_node, first_len_val), + fold_convert (long_integer_type_node, se->string_length)); + } + } + } + else + { + /* TODO: Should the frontend already have done this conversion? */ + se->expr = fold_convert (TREE_TYPE (tmp), se->expr); + gfc_add_modify (&se->pre, tmp, se->expr); + } + + gfc_add_block_to_block (pblock, &se->pre); + gfc_add_block_to_block (pblock, &se->post); +} + + +/* Add the contents of an array to the constructor. DYNAMIC is as for + gfc_trans_array_constructor_value. */ + +static void +gfc_trans_array_constructor_subarray (stmtblock_t * pblock, + tree type ATTRIBUTE_UNUSED, + tree desc, gfc_expr * expr, + tree * poffset, tree * offsetvar, + bool dynamic) +{ + gfc_se se; + gfc_ss *ss; + gfc_loopinfo loop; + stmtblock_t body; + tree tmp; + tree size; + int n; + + /* We need this to be a variable so we can increment it. */ + gfc_put_offset_into_var (pblock, poffset, offsetvar); + + gfc_init_se (&se, NULL); + + /* Walk the array expression. */ + ss = gfc_walk_expr (expr); + gcc_assert (ss != gfc_ss_terminator); + + /* Initialize the scalarizer. */ + gfc_init_loopinfo (&loop); + gfc_add_ss_to_loop (&loop, ss); + + /* Initialize the loop. */ + gfc_conv_ss_startstride (&loop); + gfc_conv_loop_setup (&loop, &expr->where); + + /* Make sure the constructed array has room for the new data. */ + if (dynamic) + { + /* Set SIZE to the total number of elements in the subarray. */ + size = gfc_index_one_node; + for (n = 0; n < loop.dimen; n++) + { + tmp = gfc_get_iteration_count (loop.from[n], loop.to[n], + gfc_index_one_node); + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, tmp); + } + + /* Grow the constructed array by SIZE elements. */ + gfc_grow_array (&loop.pre, desc, size); + } + + /* Make the loop body. */ + gfc_mark_ss_chain_used (ss, 1); + gfc_start_scalarized_body (&loop, &body); + gfc_copy_loopinfo_to_se (&se, &loop); + se.ss = ss; + + gfc_trans_array_ctor_element (&body, desc, *poffset, &se, expr); + gcc_assert (se.ss == gfc_ss_terminator); + + /* Increment the offset. */ + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + *poffset, gfc_index_one_node); + gfc_add_modify (&body, *poffset, tmp); + + /* Finish the loop. */ + gfc_trans_scalarizing_loops (&loop, &body); + gfc_add_block_to_block (&loop.pre, &loop.post); + tmp = gfc_finish_block (&loop.pre); + gfc_add_expr_to_block (pblock, tmp); + + gfc_cleanup_loop (&loop); +} + + +/* Assign the values to the elements of an array constructor. DYNAMIC + is true if descriptor DESC only contains enough data for the static + size calculated by gfc_get_array_constructor_size. When true, memory + for the dynamic parts must be allocated using realloc. */ + +static void +gfc_trans_array_constructor_value (stmtblock_t * pblock, tree type, + tree desc, gfc_constructor * c, + tree * poffset, tree * offsetvar, + bool dynamic) +{ + tree tmp; + stmtblock_t body; + gfc_se se; + mpz_t size; + + mpz_init (size); + for (; c; c = c->next) + { + /* If this is an iterator or an array, the offset must be a variable. */ + if ((c->iterator || c->expr->rank > 0) && INTEGER_CST_P (*poffset)) + gfc_put_offset_into_var (pblock, poffset, offsetvar); + + gfc_start_block (&body); + + if (c->expr->expr_type == EXPR_ARRAY) + { + /* Array constructors can be nested. */ + gfc_trans_array_constructor_value (&body, type, desc, + c->expr->value.constructor, + poffset, offsetvar, dynamic); + } + else if (c->expr->rank > 0) + { + gfc_trans_array_constructor_subarray (&body, type, desc, c->expr, + poffset, offsetvar, dynamic); + } + else + { + /* This code really upsets the gimplifier so don't bother for now. */ + gfc_constructor *p; + HOST_WIDE_INT n; + HOST_WIDE_INT size; + + p = c; + n = 0; + while (p && !(p->iterator || p->expr->expr_type != EXPR_CONSTANT)) + { + p = p->next; + n++; + } + if (n < 4) + { + /* Scalar values. */ + gfc_init_se (&se, NULL); + gfc_trans_array_ctor_element (&body, desc, *poffset, + &se, c->expr); + + *poffset = fold_build2 (PLUS_EXPR, gfc_array_index_type, + *poffset, gfc_index_one_node); + } + else + { + /* Collect multiple scalar constants into a constructor. */ + tree list; + tree init; + tree bound; + tree tmptype; + HOST_WIDE_INT idx = 0; + + p = c; + list = NULL_TREE; + /* Count the number of consecutive scalar constants. */ + while (p && !(p->iterator + || p->expr->expr_type != EXPR_CONSTANT)) + { + gfc_init_se (&se, NULL); + gfc_conv_constant (&se, p->expr); + + /* For constant character array constructors we build + an array of pointers. */ + if (p->expr->ts.type == BT_CHARACTER + && POINTER_TYPE_P (type)) + se.expr = gfc_build_addr_expr + (gfc_get_pchar_type (p->expr->ts.kind), + se.expr); + + list = tree_cons (build_int_cst (gfc_array_index_type, + idx++), se.expr, list); + c = p; + p = p->next; + } + + bound = build_int_cst (NULL_TREE, n - 1); + /* Create an array type to hold them. */ + tmptype = build_range_type (gfc_array_index_type, + gfc_index_zero_node, bound); + tmptype = build_array_type (type, tmptype); + + init = build_constructor_from_list (tmptype, nreverse (list)); + TREE_CONSTANT (init) = 1; + TREE_STATIC (init) = 1; + /* Create a static variable to hold the data. */ + tmp = gfc_create_var (tmptype, "data"); + TREE_STATIC (tmp) = 1; + TREE_CONSTANT (tmp) = 1; + TREE_READONLY (tmp) = 1; + DECL_INITIAL (tmp) = init; + init = tmp; + + /* Use BUILTIN_MEMCPY to assign the values. */ + tmp = gfc_conv_descriptor_data_get (desc); + tmp = build_fold_indirect_ref (tmp); + tmp = gfc_build_array_ref (tmp, *poffset, NULL); + tmp = build_fold_addr_expr (tmp); + init = build_fold_addr_expr (init); + + size = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (type)); + bound = build_int_cst (NULL_TREE, n * size); + tmp = build_call_expr (built_in_decls[BUILT_IN_MEMCPY], 3, + tmp, init, bound); + gfc_add_expr_to_block (&body, tmp); + + *poffset = fold_build2 (PLUS_EXPR, gfc_array_index_type, + *poffset, + build_int_cst (gfc_array_index_type, n)); + } + if (!INTEGER_CST_P (*poffset)) + { + gfc_add_modify (&body, *offsetvar, *poffset); + *poffset = *offsetvar; + } + } + + /* The frontend should already have done any expansions + at compile-time. */ + if (!c->iterator) + { + /* Pass the code as is. */ + tmp = gfc_finish_block (&body); + gfc_add_expr_to_block (pblock, tmp); + } + else + { + /* Build the implied do-loop. */ + tree cond; + tree end; + tree step; + tree loopvar; + tree exit_label; + tree loopbody; + tree tmp2; + tree tmp_loopvar; + + loopbody = gfc_finish_block (&body); + + if (c->iterator->var->symtree->n.sym->backend_decl) + { + gfc_init_se (&se, NULL); + gfc_conv_expr (&se, c->iterator->var); + gfc_add_block_to_block (pblock, &se.pre); + loopvar = se.expr; + } + else + { + /* If the iterator appears in a specification expression in + an interface mapping, we need to make a temp for the loop + variable because it is not declared locally. */ + loopvar = gfc_typenode_for_spec (&c->iterator->var->ts); + loopvar = gfc_create_var (loopvar, "loopvar"); + } + + /* Make a temporary, store the current value in that + and return it, once the loop is done. */ + tmp_loopvar = gfc_create_var (TREE_TYPE (loopvar), "loopvar"); + gfc_add_modify (pblock, tmp_loopvar, loopvar); + + /* Initialize the loop. */ + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, c->iterator->start); + gfc_add_block_to_block (pblock, &se.pre); + gfc_add_modify (pblock, loopvar, se.expr); + + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, c->iterator->end); + gfc_add_block_to_block (pblock, &se.pre); + end = gfc_evaluate_now (se.expr, pblock); + + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, c->iterator->step); + gfc_add_block_to_block (pblock, &se.pre); + step = gfc_evaluate_now (se.expr, pblock); + + /* If this array expands dynamically, and the number of iterations + is not constant, we won't have allocated space for the static + part of C->EXPR's size. Do that now. */ + if (dynamic && gfc_iterator_has_dynamic_bounds (c->iterator)) + { + /* Get the number of iterations. */ + tmp = gfc_get_iteration_count (loopvar, end, step); + + /* Get the static part of C->EXPR's size. */ + gfc_get_array_constructor_element_size (&size, c->expr); + tmp2 = gfc_conv_mpz_to_tree (size, gfc_index_integer_kind); + + /* Grow the array by TMP * TMP2 elements. */ + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, tmp, tmp2); + gfc_grow_array (pblock, desc, tmp); + } + + /* Generate the loop body. */ + exit_label = gfc_build_label_decl (NULL_TREE); + gfc_start_block (&body); + + /* Generate the exit condition. Depending on the sign of + the step variable we have to generate the correct + comparison. */ + tmp = fold_build2 (GT_EXPR, boolean_type_node, step, + build_int_cst (TREE_TYPE (step), 0)); + cond = fold_build3 (COND_EXPR, boolean_type_node, tmp, + fold_build2 (GT_EXPR, boolean_type_node, + loopvar, end), + fold_build2 (LT_EXPR, boolean_type_node, + loopvar, end)); + tmp = build1_v (GOTO_EXPR, exit_label); + TREE_USED (exit_label) = 1; + tmp = build3_v (COND_EXPR, cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&body, tmp); + + /* The main loop body. */ + gfc_add_expr_to_block (&body, loopbody); + + /* Increase loop variable by step. */ + tmp = fold_build2 (PLUS_EXPR, TREE_TYPE (loopvar), loopvar, step); + gfc_add_modify (&body, loopvar, tmp); + + /* Finish the loop. */ + tmp = gfc_finish_block (&body); + tmp = build1_v (LOOP_EXPR, tmp); + gfc_add_expr_to_block (pblock, tmp); + + /* Add the exit label. */ + tmp = build1_v (LABEL_EXPR, exit_label); + gfc_add_expr_to_block (pblock, tmp); + + /* Restore the original value of the loop counter. */ + gfc_add_modify (pblock, loopvar, tmp_loopvar); + } + } + mpz_clear (size); +} + + +/* Figure out the string length of a variable reference expression. + Used by get_array_ctor_strlen. */ + +static void +get_array_ctor_var_strlen (gfc_expr * expr, tree * len) +{ + gfc_ref *ref; + gfc_typespec *ts; + mpz_t char_len; + + /* Don't bother if we already know the length is a constant. */ + if (*len && INTEGER_CST_P (*len)) + return; + + ts = &expr->symtree->n.sym->ts; + for (ref = expr->ref; ref; ref = ref->next) + { + switch (ref->type) + { + case REF_ARRAY: + /* Array references don't change the string length. */ + break; + + case REF_COMPONENT: + /* Use the length of the component. */ + ts = &ref->u.c.component->ts; + break; + + case REF_SUBSTRING: + if (ref->u.ss.start->expr_type != EXPR_CONSTANT + || ref->u.ss.end->expr_type != EXPR_CONSTANT) + break; + mpz_init_set_ui (char_len, 1); + mpz_add (char_len, char_len, ref->u.ss.end->value.integer); + mpz_sub (char_len, char_len, ref->u.ss.start->value.integer); + *len = gfc_conv_mpz_to_tree (char_len, gfc_default_integer_kind); + *len = convert (gfc_charlen_type_node, *len); + mpz_clear (char_len); + return; + + default: + /* TODO: Substrings are tricky because we can't evaluate the + expression more than once. For now we just give up, and hope + we can figure it out elsewhere. */ + return; + } + } + + *len = ts->cl->backend_decl; +} + + +/* A catch-all to obtain the string length for anything that is not a + constant, array or variable. */ +static void +get_array_ctor_all_strlen (stmtblock_t *block, gfc_expr *e, tree *len) +{ + gfc_se se; + gfc_ss *ss; + + /* Don't bother if we already know the length is a constant. */ + if (*len && INTEGER_CST_P (*len)) + return; + + if (!e->ref && e->ts.cl && e->ts.cl->length + && e->ts.cl->length->expr_type == EXPR_CONSTANT) + { + /* This is easy. */ + gfc_conv_const_charlen (e->ts.cl); + *len = e->ts.cl->backend_decl; + } + else + { + /* Otherwise, be brutal even if inefficient. */ + ss = gfc_walk_expr (e); + gfc_init_se (&se, NULL); + + /* No function call, in case of side effects. */ + se.no_function_call = 1; + if (ss == gfc_ss_terminator) + gfc_conv_expr (&se, e); + else + gfc_conv_expr_descriptor (&se, e, ss); + + /* Fix the value. */ + *len = gfc_evaluate_now (se.string_length, &se.pre); + + gfc_add_block_to_block (block, &se.pre); + gfc_add_block_to_block (block, &se.post); + + e->ts.cl->backend_decl = *len; + } +} + + +/* Figure out the string length of a character array constructor. + If len is NULL, don't calculate the length; this happens for recursive calls + when a sub-array-constructor is an element but not at the first position, + so when we're not interested in the length. + Returns TRUE if all elements are character constants. */ + +bool +get_array_ctor_strlen (stmtblock_t *block, gfc_constructor * c, tree * len) +{ + bool is_const; + + is_const = TRUE; + + if (c == NULL) + { + if (len) + *len = build_int_cstu (gfc_charlen_type_node, 0); + return is_const; + } + + /* Loop over all constructor elements to find out is_const, but in len we + want to store the length of the first, not the last, element. We can + of course exit the loop as soon as is_const is found to be false. */ + for (; c && is_const; c = c->next) + { + switch (c->expr->expr_type) + { + case EXPR_CONSTANT: + if (len && !(*len && INTEGER_CST_P (*len))) + *len = build_int_cstu (gfc_charlen_type_node, + c->expr->value.character.length); + break; + + case EXPR_ARRAY: + if (!get_array_ctor_strlen (block, c->expr->value.constructor, len)) + is_const = false; + break; + + case EXPR_VARIABLE: + is_const = false; + if (len) + get_array_ctor_var_strlen (c->expr, len); + break; + + default: + is_const = false; + if (len) + get_array_ctor_all_strlen (block, c->expr, len); + break; + } + + /* After the first iteration, we don't want the length modified. */ + len = NULL; + } + + return is_const; +} + +/* Check whether the array constructor C consists entirely of constant + elements, and if so returns the number of those elements, otherwise + return zero. Note, an empty or NULL array constructor returns zero. */ + +unsigned HOST_WIDE_INT +gfc_constant_array_constructor_p (gfc_constructor * c) +{ + unsigned HOST_WIDE_INT nelem = 0; + + while (c) + { + if (c->iterator + || c->expr->rank > 0 + || c->expr->expr_type != EXPR_CONSTANT) + return 0; + c = c->next; + nelem++; + } + return nelem; +} + + +/* Given EXPR, the constant array constructor specified by an EXPR_ARRAY, + and the tree type of it's elements, TYPE, return a static constant + variable that is compile-time initialized. */ + +tree +gfc_build_constant_array_constructor (gfc_expr * expr, tree type) +{ + tree tmptype, list, init, tmp; + HOST_WIDE_INT nelem; + gfc_constructor *c; + gfc_array_spec as; + gfc_se se; + int i; + + /* First traverse the constructor list, converting the constants + to tree to build an initializer. */ + nelem = 0; + list = NULL_TREE; + c = expr->value.constructor; + while (c) + { + gfc_init_se (&se, NULL); + gfc_conv_constant (&se, c->expr); + if (c->expr->ts.type == BT_CHARACTER && POINTER_TYPE_P (type)) + se.expr = gfc_build_addr_expr (gfc_get_pchar_type (c->expr->ts.kind), + se.expr); + list = tree_cons (build_int_cst (gfc_array_index_type, nelem), + se.expr, list); + c = c->next; + nelem++; + } + + /* Next determine the tree type for the array. We use the gfortran + front-end's gfc_get_nodesc_array_type in order to create a suitable + GFC_ARRAY_TYPE_P that may be used by the scalarizer. */ + + memset (&as, 0, sizeof (gfc_array_spec)); + + as.rank = expr->rank; + as.type = AS_EXPLICIT; + if (!expr->shape) + { + as.lower[0] = gfc_int_expr (0); + as.upper[0] = gfc_int_expr (nelem - 1); + } + else + for (i = 0; i < expr->rank; i++) + { + int tmp = (int) mpz_get_si (expr->shape[i]); + as.lower[i] = gfc_int_expr (0); + as.upper[i] = gfc_int_expr (tmp - 1); + } + + tmptype = gfc_get_nodesc_array_type (type, &as, PACKED_STATIC); + + init = build_constructor_from_list (tmptype, nreverse (list)); + + TREE_CONSTANT (init) = 1; + TREE_STATIC (init) = 1; + + tmp = gfc_create_var (tmptype, "A"); + TREE_STATIC (tmp) = 1; + TREE_CONSTANT (tmp) = 1; + TREE_READONLY (tmp) = 1; + DECL_INITIAL (tmp) = init; + + return tmp; +} + + +/* Translate a constant EXPR_ARRAY array constructor for the scalarizer. + This mostly initializes the scalarizer state info structure with the + appropriate values to directly use the array created by the function + gfc_build_constant_array_constructor. */ + +static void +gfc_trans_constant_array_constructor (gfc_loopinfo * loop, + gfc_ss * ss, tree type) +{ + gfc_ss_info *info; + tree tmp; + int i; + + tmp = gfc_build_constant_array_constructor (ss->expr, type); + + info = &ss->data.info; + + info->descriptor = tmp; + info->data = build_fold_addr_expr (tmp); + info->offset = gfc_index_zero_node; + + for (i = 0; i < info->dimen; i++) + { + info->delta[i] = gfc_index_zero_node; + info->start[i] = gfc_index_zero_node; + info->end[i] = gfc_index_zero_node; + info->stride[i] = gfc_index_one_node; + info->dim[i] = i; + } + + if (info->dimen > loop->temp_dim) + loop->temp_dim = info->dimen; +} + +/* Helper routine of gfc_trans_array_constructor to determine if the + bounds of the loop specified by LOOP are constant and simple enough + to use with gfc_trans_constant_array_constructor. Returns the + iteration count of the loop if suitable, and NULL_TREE otherwise. */ + +static tree +constant_array_constructor_loop_size (gfc_loopinfo * loop) +{ + tree size = gfc_index_one_node; + tree tmp; + int i; + + for (i = 0; i < loop->dimen; i++) + { + /* If the bounds aren't constant, return NULL_TREE. */ + if (!INTEGER_CST_P (loop->from[i]) || !INTEGER_CST_P (loop->to[i])) + return NULL_TREE; + if (!integer_zerop (loop->from[i])) + { + /* Only allow nonzero "from" in one-dimensional arrays. */ + if (loop->dimen != 1) + return NULL_TREE; + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + loop->to[i], loop->from[i]); + } + else + tmp = loop->to[i]; + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + tmp, gfc_index_one_node); + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, tmp); + } + + return size; +} + + +/* Array constructors are handled by constructing a temporary, then using that + within the scalarization loop. This is not optimal, but seems by far the + simplest method. */ + +static void +gfc_trans_array_constructor (gfc_loopinfo * loop, gfc_ss * ss, locus * where) +{ + gfc_constructor *c; + tree offset; + tree offsetvar; + tree desc; + tree type; + bool dynamic; + bool old_first_len, old_typespec_chararray_ctor; + tree old_first_len_val; + + /* Save the old values for nested checking. */ + old_first_len = first_len; + old_first_len_val = first_len_val; + old_typespec_chararray_ctor = typespec_chararray_ctor; + + /* Do bounds-checking here and in gfc_trans_array_ctor_element only if no + typespec was given for the array constructor. */ + typespec_chararray_ctor = (ss->expr->ts.cl + && ss->expr->ts.cl->length_from_typespec); + + if (flag_bounds_check && ss->expr->ts.type == BT_CHARACTER + && !typespec_chararray_ctor) + { + first_len_val = gfc_create_var (gfc_charlen_type_node, "len"); + first_len = true; + } + + ss->data.info.dimen = loop->dimen; + + c = ss->expr->value.constructor; + if (ss->expr->ts.type == BT_CHARACTER) + { + bool const_string; + + /* get_array_ctor_strlen walks the elements of the constructor, if a + typespec was given, we already know the string length and want the one + specified there. */ + if (typespec_chararray_ctor && ss->expr->ts.cl->length + && ss->expr->ts.cl->length->expr_type != EXPR_CONSTANT) + { + gfc_se length_se; + + const_string = false; + gfc_init_se (&length_se, NULL); + gfc_conv_expr_type (&length_se, ss->expr->ts.cl->length, + gfc_charlen_type_node); + ss->string_length = length_se.expr; + gfc_add_block_to_block (&loop->pre, &length_se.pre); + gfc_add_block_to_block (&loop->post, &length_se.post); + } + else + const_string = get_array_ctor_strlen (&loop->pre, c, + &ss->string_length); + + /* Complex character array constructors should have been taken care of + and not end up here. */ + gcc_assert (ss->string_length); + + ss->expr->ts.cl->backend_decl = ss->string_length; + + type = gfc_get_character_type_len (ss->expr->ts.kind, ss->string_length); + if (const_string) + type = build_pointer_type (type); + } + else + type = gfc_typenode_for_spec (&ss->expr->ts); + + /* See if the constructor determines the loop bounds. */ + dynamic = false; + + if (ss->expr->shape && loop->dimen > 1 && loop->to[0] == NULL_TREE) + { + /* We have a multidimensional parameter. */ + int n; + for (n = 0; n < ss->expr->rank; n++) + { + loop->from[n] = gfc_index_zero_node; + loop->to[n] = gfc_conv_mpz_to_tree (ss->expr->shape [n], + gfc_index_integer_kind); + loop->to[n] = fold_build2 (MINUS_EXPR, gfc_array_index_type, + loop->to[n], gfc_index_one_node); + } + } + + if (loop->to[0] == NULL_TREE) + { + mpz_t size; + + /* We should have a 1-dimensional, zero-based loop. */ + gcc_assert (loop->dimen == 1); + gcc_assert (integer_zerop (loop->from[0])); + + /* Split the constructor size into a static part and a dynamic part. + Allocate the static size up-front and record whether the dynamic + size might be nonzero. */ + mpz_init (size); + dynamic = gfc_get_array_constructor_size (&size, c); + mpz_sub_ui (size, size, 1); + loop->to[0] = gfc_conv_mpz_to_tree (size, gfc_index_integer_kind); + mpz_clear (size); + } + + /* Special case constant array constructors. */ + if (!dynamic) + { + unsigned HOST_WIDE_INT nelem = gfc_constant_array_constructor_p (c); + if (nelem > 0) + { + tree size = constant_array_constructor_loop_size (loop); + if (size && compare_tree_int (size, nelem) == 0) + { + gfc_trans_constant_array_constructor (loop, ss, type); + goto finish; + } + } + } + + gfc_trans_create_temp_array (&loop->pre, &loop->post, loop, &ss->data.info, + type, NULL_TREE, dynamic, true, false, where); + + desc = ss->data.info.descriptor; + offset = gfc_index_zero_node; + offsetvar = gfc_create_var_np (gfc_array_index_type, "offset"); + TREE_NO_WARNING (offsetvar) = 1; + TREE_USED (offsetvar) = 0; + gfc_trans_array_constructor_value (&loop->pre, type, desc, c, + &offset, &offsetvar, dynamic); + + /* If the array grows dynamically, the upper bound of the loop variable + is determined by the array's final upper bound. */ + if (dynamic) + loop->to[0] = gfc_conv_descriptor_ubound (desc, gfc_rank_cst[0]); + + if (TREE_USED (offsetvar)) + pushdecl (offsetvar); + else + gcc_assert (INTEGER_CST_P (offset)); +#if 0 + /* Disable bound checking for now because it's probably broken. */ + if (flag_bounds_check) + { + gcc_unreachable (); + } +#endif + +finish: + /* Restore old values of globals. */ + first_len = old_first_len; + first_len_val = old_first_len_val; + typespec_chararray_ctor = old_typespec_chararray_ctor; +} + + +/* INFO describes a GFC_SS_SECTION in loop LOOP, and this function is + called after evaluating all of INFO's vector dimensions. Go through + each such vector dimension and see if we can now fill in any missing + loop bounds. */ + +static void +gfc_set_vector_loop_bounds (gfc_loopinfo * loop, gfc_ss_info * info) +{ + gfc_se se; + tree tmp; + tree desc; + tree zero; + int n; + int dim; + + for (n = 0; n < loop->dimen; n++) + { + dim = info->dim[n]; + if (info->ref->u.ar.dimen_type[dim] == DIMEN_VECTOR + && loop->to[n] == NULL) + { + /* Loop variable N indexes vector dimension DIM, and we don't + yet know the upper bound of loop variable N. Set it to the + difference between the vector's upper and lower bounds. */ + gcc_assert (loop->from[n] == gfc_index_zero_node); + gcc_assert (info->subscript[dim] + && info->subscript[dim]->type == GFC_SS_VECTOR); + + gfc_init_se (&se, NULL); + desc = info->subscript[dim]->data.info.descriptor; + zero = gfc_rank_cst[0]; + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + gfc_conv_descriptor_ubound (desc, zero), + gfc_conv_descriptor_lbound (desc, zero)); + tmp = gfc_evaluate_now (tmp, &loop->pre); + loop->to[n] = tmp; + } + } +} + + +/* Add the pre and post chains for all the scalar expressions in a SS chain + to loop. This is called after the loop parameters have been calculated, + but before the actual scalarizing loops. */ + +static void +gfc_add_loop_ss_code (gfc_loopinfo * loop, gfc_ss * ss, bool subscript, + locus * where) +{ + gfc_se se; + int n; + + /* TODO: This can generate bad code if there are ordering dependencies, + e.g., a callee allocated function and an unknown size constructor. */ + gcc_assert (ss != NULL); + + for (; ss != gfc_ss_terminator; ss = ss->loop_chain) + { + gcc_assert (ss); + + switch (ss->type) + { + case GFC_SS_SCALAR: + /* Scalar expression. Evaluate this now. This includes elemental + dimension indices, but not array section bounds. */ + gfc_init_se (&se, NULL); + gfc_conv_expr (&se, ss->expr); + gfc_add_block_to_block (&loop->pre, &se.pre); + + if (ss->expr->ts.type != BT_CHARACTER) + { + /* Move the evaluation of scalar expressions outside the + scalarization loop, except for WHERE assignments. */ + if (subscript) + se.expr = convert(gfc_array_index_type, se.expr); + if (!ss->where) + se.expr = gfc_evaluate_now (se.expr, &loop->pre); + gfc_add_block_to_block (&loop->pre, &se.post); + } + else + gfc_add_block_to_block (&loop->post, &se.post); + + ss->data.scalar.expr = se.expr; + ss->string_length = se.string_length; + break; + + case GFC_SS_REFERENCE: + /* Scalar reference. Evaluate this now. */ + gfc_init_se (&se, NULL); + gfc_conv_expr_reference (&se, ss->expr); + gfc_add_block_to_block (&loop->pre, &se.pre); + gfc_add_block_to_block (&loop->post, &se.post); + + ss->data.scalar.expr = gfc_evaluate_now (se.expr, &loop->pre); + ss->string_length = se.string_length; + break; + + case GFC_SS_SECTION: + /* Add the expressions for scalar and vector subscripts. */ + for (n = 0; n < GFC_MAX_DIMENSIONS; n++) + if (ss->data.info.subscript[n]) + gfc_add_loop_ss_code (loop, ss->data.info.subscript[n], true, + where); + + gfc_set_vector_loop_bounds (loop, &ss->data.info); + break; + + case GFC_SS_VECTOR: + /* Get the vector's descriptor and store it in SS. */ + gfc_init_se (&se, NULL); + gfc_conv_expr_descriptor (&se, ss->expr, gfc_walk_expr (ss->expr)); + gfc_add_block_to_block (&loop->pre, &se.pre); + gfc_add_block_to_block (&loop->post, &se.post); + ss->data.info.descriptor = se.expr; + break; + + case GFC_SS_INTRINSIC: + gfc_add_intrinsic_ss_code (loop, ss); + break; + + case GFC_SS_FUNCTION: + /* Array function return value. We call the function and save its + result in a temporary for use inside the loop. */ + gfc_init_se (&se, NULL); + se.loop = loop; + se.ss = ss; + gfc_conv_expr (&se, ss->expr); + gfc_add_block_to_block (&loop->pre, &se.pre); + gfc_add_block_to_block (&loop->post, &se.post); + ss->string_length = se.string_length; + break; + + case GFC_SS_CONSTRUCTOR: + if (ss->expr->ts.type == BT_CHARACTER + && ss->string_length == NULL + && ss->expr->ts.cl + && ss->expr->ts.cl->length) + { + gfc_init_se (&se, NULL); + gfc_conv_expr_type (&se, ss->expr->ts.cl->length, + gfc_charlen_type_node); + ss->string_length = se.expr; + gfc_add_block_to_block (&loop->pre, &se.pre); + gfc_add_block_to_block (&loop->post, &se.post); + } + gfc_trans_array_constructor (loop, ss, where); + break; + + case GFC_SS_TEMP: + case GFC_SS_COMPONENT: + /* Do nothing. These are handled elsewhere. */ + break; + + default: + gcc_unreachable (); + } + } +} + + +/* Translate expressions for the descriptor and data pointer of a SS. */ +/*GCC ARRAYS*/ + +static void +gfc_conv_ss_descriptor (stmtblock_t * block, gfc_ss * ss, int base) +{ + gfc_se se; + tree tmp; + + /* Get the descriptor for the array to be scalarized. */ + gcc_assert (ss->expr->expr_type == EXPR_VARIABLE); + gfc_init_se (&se, NULL); + se.descriptor_only = 1; + gfc_conv_expr_lhs (&se, ss->expr); + gfc_add_block_to_block (block, &se.pre); + ss->data.info.descriptor = se.expr; + ss->string_length = se.string_length; + + if (base) + { + /* Also the data pointer. */ + tmp = gfc_conv_array_data (se.expr); + /* If this is a variable or address of a variable we use it directly. + Otherwise we must evaluate it now to avoid breaking dependency + analysis by pulling the expressions for elemental array indices + inside the loop. */ + if (!(DECL_P (tmp) + || (TREE_CODE (tmp) == ADDR_EXPR + && DECL_P (TREE_OPERAND (tmp, 0))))) + tmp = gfc_evaluate_now (tmp, block); + ss->data.info.data = tmp; + + tmp = gfc_conv_array_offset (se.expr); + ss->data.info.offset = gfc_evaluate_now (tmp, block); + } +} + + +/* Initialize a gfc_loopinfo structure. */ + +void +gfc_init_loopinfo (gfc_loopinfo * loop) +{ + int n; + + memset (loop, 0, sizeof (gfc_loopinfo)); + gfc_init_block (&loop->pre); + gfc_init_block (&loop->post); + + /* Initially scalarize in order. */ + for (n = 0; n < GFC_MAX_DIMENSIONS; n++) + loop->order[n] = n; + + loop->ss = gfc_ss_terminator; +} + + +/* Copies the loop variable info to a gfc_se structure. Does not copy the SS + chain. */ + +void +gfc_copy_loopinfo_to_se (gfc_se * se, gfc_loopinfo * loop) +{ + se->loop = loop; +} + + +/* Return an expression for the data pointer of an array. */ + +tree +gfc_conv_array_data (tree descriptor) +{ + tree type; + + type = TREE_TYPE (descriptor); + if (GFC_ARRAY_TYPE_P (type)) + { + if (TREE_CODE (type) == POINTER_TYPE) + return descriptor; + else + { + /* Descriptorless arrays. */ + return build_fold_addr_expr (descriptor); + } + } + else + return gfc_conv_descriptor_data_get (descriptor); +} + + +/* Return an expression for the base offset of an array. */ + +tree +gfc_conv_array_offset (tree descriptor) +{ + tree type; + + type = TREE_TYPE (descriptor); + if (GFC_ARRAY_TYPE_P (type)) + return GFC_TYPE_ARRAY_OFFSET (type); + else + return gfc_conv_descriptor_offset (descriptor); +} + + +/* Get an expression for the array stride. */ + +tree +gfc_conv_array_stride (tree descriptor, int dim) +{ + tree tmp; + tree type; + + type = TREE_TYPE (descriptor); + + /* For descriptorless arrays use the array size. */ + tmp = GFC_TYPE_ARRAY_STRIDE (type, dim); + if (tmp != NULL_TREE) + return tmp; + + tmp = gfc_conv_descriptor_stride (descriptor, gfc_rank_cst[dim]); + return tmp; +} + + +/* Like gfc_conv_array_stride, but for the lower bound. */ + +tree +gfc_conv_array_lbound (tree descriptor, int dim) +{ + tree tmp; + tree type; + + type = TREE_TYPE (descriptor); + + tmp = GFC_TYPE_ARRAY_LBOUND (type, dim); + if (tmp != NULL_TREE) + return tmp; + + tmp = gfc_conv_descriptor_lbound (descriptor, gfc_rank_cst[dim]); + return tmp; +} + + +/* Like gfc_conv_array_stride, but for the upper bound. */ + +tree +gfc_conv_array_ubound (tree descriptor, int dim) +{ + tree tmp; + tree type; + + type = TREE_TYPE (descriptor); + + tmp = GFC_TYPE_ARRAY_UBOUND (type, dim); + if (tmp != NULL_TREE) + return tmp; + + /* This should only ever happen when passing an assumed shape array + as an actual parameter. The value will never be used. */ + if (GFC_ARRAY_TYPE_P (TREE_TYPE (descriptor))) + return gfc_index_zero_node; + + tmp = gfc_conv_descriptor_ubound (descriptor, gfc_rank_cst[dim]); + return tmp; +} + + +/* Generate code to perform an array index bound check. */ + +static tree +gfc_trans_array_bound_check (gfc_se * se, tree descriptor, tree index, int n, + locus * where, bool check_upper) +{ + tree fault; + tree tmp; + char *msg; + const char * name = NULL; + + if (!flag_bounds_check) + return index; + + index = gfc_evaluate_now (index, &se->pre); + + /* We find a name for the error message. */ + if (se->ss) + name = se->ss->expr->symtree->name; + + if (!name && se->loop && se->loop->ss && se->loop->ss->expr + && se->loop->ss->expr->symtree) + name = se->loop->ss->expr->symtree->name; + + if (!name && se->loop && se->loop->ss && se->loop->ss->loop_chain + && se->loop->ss->loop_chain->expr + && se->loop->ss->loop_chain->expr->symtree) + name = se->loop->ss->loop_chain->expr->symtree->name; + + if (!name && se->loop && se->loop->ss && se->loop->ss->loop_chain + && se->loop->ss->loop_chain->expr->symtree) + name = se->loop->ss->loop_chain->expr->symtree->name; + + if (!name && se->loop && se->loop->ss && se->loop->ss->expr) + { + if (se->loop->ss->expr->expr_type == EXPR_FUNCTION + && se->loop->ss->expr->value.function.name) + name = se->loop->ss->expr->value.function.name; + else + if (se->loop->ss->type == GFC_SS_CONSTRUCTOR + || se->loop->ss->type == GFC_SS_SCALAR) + name = "unnamed constant"; + } + + /* Check lower bound. */ + tmp = gfc_conv_array_lbound (descriptor, n); + fault = fold_build2 (LT_EXPR, boolean_type_node, index, tmp); + if (name) + asprintf (&msg, "%s for array '%s', lower bound of dimension %d exceeded" + "(%%ld < %%ld)", gfc_msg_fault, name, n+1); + else + asprintf (&msg, "%s, lower bound of dimension %d exceeded (%%ld < %%ld)", + gfc_msg_fault, n+1); + gfc_trans_runtime_check (true, false, fault, &se->pre, where, msg, + fold_convert (long_integer_type_node, index), + fold_convert (long_integer_type_node, tmp)); + gfc_free (msg); + + /* Check upper bound. */ + if (check_upper) + { + tmp = gfc_conv_array_ubound (descriptor, n); + fault = fold_build2 (GT_EXPR, boolean_type_node, index, tmp); + if (name) + asprintf (&msg, "%s for array '%s', upper bound of dimension %d " + " exceeded (%%ld > %%ld)", gfc_msg_fault, name, n+1); + else + asprintf (&msg, "%s, upper bound of dimension %d exceeded (%%ld > %%ld)", + gfc_msg_fault, n+1); + gfc_trans_runtime_check (true, false, fault, &se->pre, where, msg, + fold_convert (long_integer_type_node, index), + fold_convert (long_integer_type_node, tmp)); + gfc_free (msg); + } + + return index; +} + + +/* Return the offset for an index. Performs bound checking for elemental + dimensions. Single element references are processed separately. */ + +static tree +gfc_conv_array_index_offset (gfc_se * se, gfc_ss_info * info, int dim, int i, + gfc_array_ref * ar, tree stride) +{ + tree index; + tree desc; + tree data; + + /* Get the index into the array for this dimension. */ + if (ar) + { + gcc_assert (ar->type != AR_ELEMENT); + switch (ar->dimen_type[dim]) + { + case DIMEN_ELEMENT: + /* Elemental dimension. */ + gcc_assert (info->subscript[dim] + && info->subscript[dim]->type == GFC_SS_SCALAR); + /* We've already translated this value outside the loop. */ + index = info->subscript[dim]->data.scalar.expr; + + index = gfc_trans_array_bound_check (se, info->descriptor, + index, dim, &ar->where, + (ar->as->type != AS_ASSUMED_SIZE + && !ar->as->cp_was_assumed) || dim < ar->dimen - 1); + break; + + case DIMEN_VECTOR: + gcc_assert (info && se->loop); + gcc_assert (info->subscript[dim] + && info->subscript[dim]->type == GFC_SS_VECTOR); + desc = info->subscript[dim]->data.info.descriptor; + + /* Get a zero-based index into the vector. */ + index = fold_build2 (MINUS_EXPR, gfc_array_index_type, + se->loop->loopvar[i], se->loop->from[i]); + + /* Multiply the index by the stride. */ + index = fold_build2 (MULT_EXPR, gfc_array_index_type, + index, gfc_conv_array_stride (desc, 0)); + + /* Read the vector to get an index into info->descriptor. */ + data = build_fold_indirect_ref (gfc_conv_array_data (desc)); + index = gfc_build_array_ref (data, index, NULL); + index = gfc_evaluate_now (index, &se->pre); + + /* Do any bounds checking on the final info->descriptor index. */ + index = gfc_trans_array_bound_check (se, info->descriptor, + index, dim, &ar->where, + (ar->as->type != AS_ASSUMED_SIZE + && !ar->as->cp_was_assumed) || dim < ar->dimen - 1); + break; + + case DIMEN_RANGE: + /* Scalarized dimension. */ + gcc_assert (info && se->loop); + + /* Multiply the loop variable by the stride and delta. */ + index = se->loop->loopvar[i]; + if (!integer_onep (info->stride[i])) + index = fold_build2 (MULT_EXPR, gfc_array_index_type, index, + info->stride[i]); + if (!integer_zerop (info->delta[i])) + index = fold_build2 (PLUS_EXPR, gfc_array_index_type, index, + info->delta[i]); + break; + + default: + gcc_unreachable (); + } + } + else + { + /* Temporary array or derived type component. */ + gcc_assert (se->loop); + index = se->loop->loopvar[se->loop->order[i]]; + if (!integer_zerop (info->delta[i])) + index = fold_build2 (PLUS_EXPR, gfc_array_index_type, + index, info->delta[i]); + } + + /* Multiply by the stride. */ + if (!integer_onep (stride)) + index = fold_build2 (MULT_EXPR, gfc_array_index_type, index, stride); + + return index; +} + + +/* Build a scalarized reference to an array. */ + +static void +gfc_conv_scalarized_array_ref (gfc_se * se, gfc_array_ref * ar) +{ + gfc_ss_info *info; + tree decl = NULL_TREE; + tree index; + tree tmp; + int n; + + info = &se->ss->data.info; + if (ar) + n = se->loop->order[0]; + else + n = 0; + + index = gfc_conv_array_index_offset (se, info, info->dim[n], n, ar, + info->stride0); + /* Add the offset for this dimension to the stored offset for all other + dimensions. */ + if (!integer_zerop (info->offset)) + index = fold_build2 (PLUS_EXPR, gfc_array_index_type, index, info->offset); + + if (se->ss->expr && is_subref_array (se->ss->expr)) + decl = se->ss->expr->symtree->n.sym->backend_decl; + + tmp = build_fold_indirect_ref (info->data); + se->expr = gfc_build_array_ref (tmp, index, decl); +} + + +/* Translate access of temporary array. */ + +void +gfc_conv_tmp_array_ref (gfc_se * se) +{ + se->string_length = se->ss->string_length; + gfc_conv_scalarized_array_ref (se, NULL); +} + + +/* Build an array reference. se->expr already holds the array descriptor. + This should be either a variable, indirect variable reference or component + reference. For arrays which do not have a descriptor, se->expr will be + the data pointer. + a(i, j, k) = base[offset + i * stride[0] + j * stride[1] + k * stride[2]]*/ + +void +gfc_conv_array_ref (gfc_se * se, gfc_array_ref * ar, gfc_symbol * sym, + locus * where) +{ + int n; + tree index; + tree tmp; + tree stride; + gfc_se indexse; + + /* Handle scalarized references separately. */ + if (ar->type != AR_ELEMENT) + { + gfc_conv_scalarized_array_ref (se, ar); + gfc_advance_se_ss_chain (se); + return; + } + + index = gfc_index_zero_node; + + /* Calculate the offsets from all the dimensions. */ + for (n = 0; n < ar->dimen; n++) + { + /* Calculate the index for this dimension. */ + gfc_init_se (&indexse, se); + gfc_conv_expr_type (&indexse, ar->start[n], gfc_array_index_type); + gfc_add_block_to_block (&se->pre, &indexse.pre); + + if (flag_bounds_check) + { + /* Check array bounds. */ + tree cond; + char *msg; + + /* Evaluate the indexse.expr only once. */ + indexse.expr = save_expr (indexse.expr); + + /* Lower bound. */ + tmp = gfc_conv_array_lbound (se->expr, n); + cond = fold_build2 (LT_EXPR, boolean_type_node, + indexse.expr, tmp); + asprintf (&msg, "%s for array '%s', " + "lower bound of dimension %d exceeded (%%ld < %%ld)", + gfc_msg_fault, sym->name, n+1); + gfc_trans_runtime_check (true, false, cond, &se->pre, where, msg, + fold_convert (long_integer_type_node, + indexse.expr), + fold_convert (long_integer_type_node, tmp)); + gfc_free (msg); + + /* Upper bound, but not for the last dimension of assumed-size + arrays. */ + if (n < ar->dimen - 1 + || (ar->as->type != AS_ASSUMED_SIZE && !ar->as->cp_was_assumed)) + { + tmp = gfc_conv_array_ubound (se->expr, n); + cond = fold_build2 (GT_EXPR, boolean_type_node, + indexse.expr, tmp); + asprintf (&msg, "%s for array '%s', " + "upper bound of dimension %d exceeded (%%ld > %%ld)", + gfc_msg_fault, sym->name, n+1); + gfc_trans_runtime_check (true, false, cond, &se->pre, where, msg, + fold_convert (long_integer_type_node, + indexse.expr), + fold_convert (long_integer_type_node, tmp)); + gfc_free (msg); + } + } + + /* Multiply the index by the stride. */ + stride = gfc_conv_array_stride (se->expr, n); + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, indexse.expr, + stride); + + /* And add it to the total. */ + index = fold_build2 (PLUS_EXPR, gfc_array_index_type, index, tmp); + } + + tmp = gfc_conv_array_offset (se->expr); + if (!integer_zerop (tmp)) + index = fold_build2 (PLUS_EXPR, gfc_array_index_type, index, tmp); + + /* Access the calculated element. */ + tmp = gfc_conv_array_data (se->expr); + tmp = build_fold_indirect_ref (tmp); + se->expr = gfc_build_array_ref (tmp, index, sym->backend_decl); +} + + +/* Generate the code to be executed immediately before entering a + scalarization loop. */ + +static void +gfc_trans_preloop_setup (gfc_loopinfo * loop, int dim, int flag, + stmtblock_t * pblock) +{ + tree index; + tree stride; + gfc_ss_info *info; + gfc_ss *ss; + gfc_se se; + int i; + + /* This code will be executed before entering the scalarization loop + for this dimension. */ + for (ss = loop->ss; ss != gfc_ss_terminator; ss = ss->loop_chain) + { + if ((ss->useflags & flag) == 0) + continue; + + if (ss->type != GFC_SS_SECTION + && ss->type != GFC_SS_FUNCTION && ss->type != GFC_SS_CONSTRUCTOR + && ss->type != GFC_SS_COMPONENT) + continue; + + info = &ss->data.info; + + if (dim >= info->dimen) + continue; + + if (dim == info->dimen - 1) + { + /* For the outermost loop calculate the offset due to any + elemental dimensions. It will have been initialized with the + base offset of the array. */ + if (info->ref) + { + for (i = 0; i < info->ref->u.ar.dimen; i++) + { + if (info->ref->u.ar.dimen_type[i] != DIMEN_ELEMENT) + continue; + + gfc_init_se (&se, NULL); + se.loop = loop; + se.expr = info->descriptor; + stride = gfc_conv_array_stride (info->descriptor, i); + index = gfc_conv_array_index_offset (&se, info, i, -1, + &info->ref->u.ar, + stride); + gfc_add_block_to_block (pblock, &se.pre); + + info->offset = fold_build2 (PLUS_EXPR, gfc_array_index_type, + info->offset, index); + info->offset = gfc_evaluate_now (info->offset, pblock); + } + + i = loop->order[0]; + stride = gfc_conv_array_stride (info->descriptor, info->dim[i]); + } + else + stride = gfc_conv_array_stride (info->descriptor, 0); + + /* Calculate the stride of the innermost loop. Hopefully this will + allow the backend optimizers to do their stuff more effectively. + */ + info->stride0 = gfc_evaluate_now (stride, pblock); + } + else + { + /* Add the offset for the previous loop dimension. */ + gfc_array_ref *ar; + + if (info->ref) + { + ar = &info->ref->u.ar; + i = loop->order[dim + 1]; + } + else + { + ar = NULL; + i = dim + 1; + } + + gfc_init_se (&se, NULL); + se.loop = loop; + se.expr = info->descriptor; + stride = gfc_conv_array_stride (info->descriptor, info->dim[i]); + index = gfc_conv_array_index_offset (&se, info, info->dim[i], i, + ar, stride); + gfc_add_block_to_block (pblock, &se.pre); + info->offset = fold_build2 (PLUS_EXPR, gfc_array_index_type, + info->offset, index); + info->offset = gfc_evaluate_now (info->offset, pblock); + } + + /* Remember this offset for the second loop. */ + if (dim == loop->temp_dim - 1) + info->saved_offset = info->offset; + } +} + + +/* Start a scalarized expression. Creates a scope and declares loop + variables. */ + +void +gfc_start_scalarized_body (gfc_loopinfo * loop, stmtblock_t * pbody) +{ + int dim; + int n; + int flags; + + gcc_assert (!loop->array_parameter); + + for (dim = loop->dimen - 1; dim >= 0; dim--) + { + n = loop->order[dim]; + + gfc_start_block (&loop->code[n]); + + /* Create the loop variable. */ + loop->loopvar[n] = gfc_create_var (gfc_array_index_type, "S"); + + if (dim < loop->temp_dim) + flags = 3; + else + flags = 1; + /* Calculate values that will be constant within this loop. */ + gfc_trans_preloop_setup (loop, dim, flags, &loop->code[n]); + } + gfc_start_block (pbody); +} + + +/* Generates the actual loop code for a scalarization loop. */ + +static void +gfc_trans_scalarized_loop_end (gfc_loopinfo * loop, int n, + stmtblock_t * pbody) +{ + stmtblock_t block; + tree cond; + tree tmp; + tree loopbody; + tree exit_label; + + loopbody = gfc_finish_block (pbody); + + /* Initialize the loopvar. */ + gfc_add_modify (&loop->code[n], loop->loopvar[n], loop->from[n]); + + exit_label = gfc_build_label_decl (NULL_TREE); + + /* Generate the loop body. */ + gfc_init_block (&block); + + /* The exit condition. */ + cond = fold_build2 (GT_EXPR, boolean_type_node, + loop->loopvar[n], loop->to[n]); + tmp = build1_v (GOTO_EXPR, exit_label); + TREE_USED (exit_label) = 1; + tmp = build3_v (COND_EXPR, cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&block, tmp); + + /* The main body. */ + gfc_add_expr_to_block (&block, loopbody); + + /* Increment the loopvar. */ + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + loop->loopvar[n], gfc_index_one_node); + gfc_add_modify (&block, loop->loopvar[n], tmp); + + /* Build the loop. */ + tmp = gfc_finish_block (&block); + tmp = build1_v (LOOP_EXPR, tmp); + gfc_add_expr_to_block (&loop->code[n], tmp); + + /* Add the exit label. */ + tmp = build1_v (LABEL_EXPR, exit_label); + gfc_add_expr_to_block (&loop->code[n], tmp); +} + + +/* Finishes and generates the loops for a scalarized expression. */ + +void +gfc_trans_scalarizing_loops (gfc_loopinfo * loop, stmtblock_t * body) +{ + int dim; + int n; + gfc_ss *ss; + stmtblock_t *pblock; + tree tmp; + + pblock = body; + /* Generate the loops. */ + for (dim = 0; dim < loop->dimen; dim++) + { + n = loop->order[dim]; + gfc_trans_scalarized_loop_end (loop, n, pblock); + loop->loopvar[n] = NULL_TREE; + pblock = &loop->code[n]; + } + + tmp = gfc_finish_block (pblock); + gfc_add_expr_to_block (&loop->pre, tmp); + + /* Clear all the used flags. */ + for (ss = loop->ss; ss; ss = ss->loop_chain) + ss->useflags = 0; +} + + +/* Finish the main body of a scalarized expression, and start the secondary + copying body. */ + +void +gfc_trans_scalarized_loop_boundary (gfc_loopinfo * loop, stmtblock_t * body) +{ + int dim; + int n; + stmtblock_t *pblock; + gfc_ss *ss; + + pblock = body; + /* We finish as many loops as are used by the temporary. */ + for (dim = 0; dim < loop->temp_dim - 1; dim++) + { + n = loop->order[dim]; + gfc_trans_scalarized_loop_end (loop, n, pblock); + loop->loopvar[n] = NULL_TREE; + pblock = &loop->code[n]; + } + + /* We don't want to finish the outermost loop entirely. */ + n = loop->order[loop->temp_dim - 1]; + gfc_trans_scalarized_loop_end (loop, n, pblock); + + /* Restore the initial offsets. */ + for (ss = loop->ss; ss != gfc_ss_terminator; ss = ss->loop_chain) + { + if ((ss->useflags & 2) == 0) + continue; + + if (ss->type != GFC_SS_SECTION + && ss->type != GFC_SS_FUNCTION && ss->type != GFC_SS_CONSTRUCTOR + && ss->type != GFC_SS_COMPONENT) + continue; + + ss->data.info.offset = ss->data.info.saved_offset; + } + + /* Restart all the inner loops we just finished. */ + for (dim = loop->temp_dim - 2; dim >= 0; dim--) + { + n = loop->order[dim]; + + gfc_start_block (&loop->code[n]); + + loop->loopvar[n] = gfc_create_var (gfc_array_index_type, "Q"); + + gfc_trans_preloop_setup (loop, dim, 2, &loop->code[n]); + } + + /* Start a block for the secondary copying code. */ + gfc_start_block (body); +} + + +/* Calculate the upper bound of an array section. */ + +static tree +gfc_conv_section_upper_bound (gfc_ss * ss, int n, stmtblock_t * pblock) +{ + int dim; + gfc_expr *end; + tree desc; + tree bound; + gfc_se se; + gfc_ss_info *info; + + gcc_assert (ss->type == GFC_SS_SECTION); + + info = &ss->data.info; + dim = info->dim[n]; + + if (info->ref->u.ar.dimen_type[dim] == DIMEN_VECTOR) + /* We'll calculate the upper bound once we have access to the + vector's descriptor. */ + return NULL; + + gcc_assert (info->ref->u.ar.dimen_type[dim] == DIMEN_RANGE); + desc = info->descriptor; + end = info->ref->u.ar.end[dim]; + + if (end) + { + /* The upper bound was specified. */ + gfc_init_se (&se, NULL); + gfc_conv_expr_type (&se, end, gfc_array_index_type); + gfc_add_block_to_block (pblock, &se.pre); + bound = se.expr; + } + else + { + /* No upper bound was specified, so use the bound of the array. */ + bound = gfc_conv_array_ubound (desc, dim); + } + + return bound; +} + + +/* Calculate the lower bound of an array section. */ + +static void +gfc_conv_section_startstride (gfc_loopinfo * loop, gfc_ss * ss, int n) +{ + gfc_expr *start; + gfc_expr *end; + gfc_expr *stride; + tree desc; + gfc_se se; + gfc_ss_info *info; + int dim; + + gcc_assert (ss->type == GFC_SS_SECTION); + + info = &ss->data.info; + dim = info->dim[n]; + + if (info->ref->u.ar.dimen_type[dim] == DIMEN_VECTOR) + { + /* We use a zero-based index to access the vector. */ + info->start[n] = gfc_index_zero_node; + info->end[n] = gfc_index_zero_node; + info->stride[n] = gfc_index_one_node; + return; + } + + gcc_assert (info->ref->u.ar.dimen_type[dim] == DIMEN_RANGE); + desc = info->descriptor; + start = info->ref->u.ar.start[dim]; + end = info->ref->u.ar.end[dim]; + stride = info->ref->u.ar.stride[dim]; + + /* Calculate the start of the range. For vector subscripts this will + be the range of the vector. */ + if (start) + { + /* Specified section start. */ + gfc_init_se (&se, NULL); + gfc_conv_expr_type (&se, start, gfc_array_index_type); + gfc_add_block_to_block (&loop->pre, &se.pre); + info->start[n] = se.expr; + } + else + { + /* No lower bound specified so use the bound of the array. */ + info->start[n] = gfc_conv_array_lbound (desc, dim); + } + info->start[n] = gfc_evaluate_now (info->start[n], &loop->pre); + + /* Similarly calculate the end. Although this is not used in the + scalarizer, it is needed when checking bounds and where the end + is an expression with side-effects. */ + if (end) + { + /* Specified section start. */ + gfc_init_se (&se, NULL); + gfc_conv_expr_type (&se, end, gfc_array_index_type); + gfc_add_block_to_block (&loop->pre, &se.pre); + info->end[n] = se.expr; + } + else + { + /* No upper bound specified so use the bound of the array. */ + info->end[n] = gfc_conv_array_ubound (desc, dim); + } + info->end[n] = gfc_evaluate_now (info->end[n], &loop->pre); + + /* Calculate the stride. */ + if (stride == NULL) + info->stride[n] = gfc_index_one_node; + else + { + gfc_init_se (&se, NULL); + gfc_conv_expr_type (&se, stride, gfc_array_index_type); + gfc_add_block_to_block (&loop->pre, &se.pre); + info->stride[n] = gfc_evaluate_now (se.expr, &loop->pre); + } +} + + +/* Calculates the range start and stride for a SS chain. Also gets the + descriptor and data pointer. The range of vector subscripts is the size + of the vector. Array bounds are also checked. */ + +void +gfc_conv_ss_startstride (gfc_loopinfo * loop) +{ + int n; + tree tmp; + gfc_ss *ss; + tree desc; + + loop->dimen = 0; + /* Determine the rank of the loop. */ + for (ss = loop->ss; + ss != gfc_ss_terminator && loop->dimen == 0; ss = ss->loop_chain) + { + switch (ss->type) + { + case GFC_SS_SECTION: + case GFC_SS_CONSTRUCTOR: + case GFC_SS_FUNCTION: + case GFC_SS_COMPONENT: + loop->dimen = ss->data.info.dimen; + break; + + /* As usual, lbound and ubound are exceptions!. */ + case GFC_SS_INTRINSIC: + switch (ss->expr->value.function.isym->id) + { + case GFC_ISYM_LBOUND: + case GFC_ISYM_UBOUND: + loop->dimen = ss->data.info.dimen; + + default: + break; + } + + default: + break; + } + } + + /* We should have determined the rank of the expression by now. If + not, that's bad news. */ + gcc_assert (loop->dimen != 0); + + /* Loop over all the SS in the chain. */ + for (ss = loop->ss; ss != gfc_ss_terminator; ss = ss->loop_chain) + { + if (ss->expr && ss->expr->shape && !ss->shape) + ss->shape = ss->expr->shape; + + switch (ss->type) + { + case GFC_SS_SECTION: + /* Get the descriptor for the array. */ + gfc_conv_ss_descriptor (&loop->pre, ss, !loop->array_parameter); + + for (n = 0; n < ss->data.info.dimen; n++) + gfc_conv_section_startstride (loop, ss, n); + break; + + case GFC_SS_INTRINSIC: + switch (ss->expr->value.function.isym->id) + { + /* Fall through to supply start and stride. */ + case GFC_ISYM_LBOUND: + case GFC_ISYM_UBOUND: + break; + default: + continue; + } + + case GFC_SS_CONSTRUCTOR: + case GFC_SS_FUNCTION: + for (n = 0; n < ss->data.info.dimen; n++) + { + ss->data.info.start[n] = gfc_index_zero_node; + ss->data.info.end[n] = gfc_index_zero_node; + ss->data.info.stride[n] = gfc_index_one_node; + } + break; + + default: + break; + } + } + + /* The rest is just runtime bound checking. */ + if (flag_bounds_check) + { + stmtblock_t block; + tree lbound, ubound; + tree end; + tree size[GFC_MAX_DIMENSIONS]; + tree stride_pos, stride_neg, non_zerosized, tmp2; + gfc_ss_info *info; + char *msg; + int dim; + + gfc_start_block (&block); + + for (n = 0; n < loop->dimen; n++) + size[n] = NULL_TREE; + + for (ss = loop->ss; ss != gfc_ss_terminator; ss = ss->loop_chain) + { + stmtblock_t inner; + + if (ss->type != GFC_SS_SECTION) + continue; + + gfc_start_block (&inner); + + /* TODO: range checking for mapped dimensions. */ + info = &ss->data.info; + + /* This code only checks ranges. Elemental and vector + dimensions are checked later. */ + for (n = 0; n < loop->dimen; n++) + { + bool check_upper; + + dim = info->dim[n]; + if (info->ref->u.ar.dimen_type[dim] != DIMEN_RANGE) + continue; + + if (dim == info->ref->u.ar.dimen - 1 + && (info->ref->u.ar.as->type == AS_ASSUMED_SIZE + || info->ref->u.ar.as->cp_was_assumed)) + check_upper = false; + else + check_upper = true; + + /* Zero stride is not allowed. */ + tmp = fold_build2 (EQ_EXPR, boolean_type_node, info->stride[n], + gfc_index_zero_node); + asprintf (&msg, "Zero stride is not allowed, for dimension %d " + "of array '%s'", info->dim[n]+1, + ss->expr->symtree->name); + gfc_trans_runtime_check (true, false, tmp, &inner, + &ss->expr->where, msg); + gfc_free (msg); + + desc = ss->data.info.descriptor; + + /* This is the run-time equivalent of resolve.c's + check_dimension(). The logical is more readable there + than it is here, with all the trees. */ + lbound = gfc_conv_array_lbound (desc, dim); + end = info->end[n]; + if (check_upper) + ubound = gfc_conv_array_ubound (desc, dim); + else + ubound = NULL; + + /* non_zerosized is true when the selected range is not + empty. */ + stride_pos = fold_build2 (GT_EXPR, boolean_type_node, + info->stride[n], gfc_index_zero_node); + tmp = fold_build2 (LE_EXPR, boolean_type_node, info->start[n], + end); + stride_pos = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, + stride_pos, tmp); + + stride_neg = fold_build2 (LT_EXPR, boolean_type_node, + info->stride[n], gfc_index_zero_node); + tmp = fold_build2 (GE_EXPR, boolean_type_node, info->start[n], + end); + stride_neg = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, + stride_neg, tmp); + non_zerosized = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, + stride_pos, stride_neg); + + /* Check the start of the range against the lower and upper + bounds of the array, if the range is not empty. */ + tmp = fold_build2 (LT_EXPR, boolean_type_node, info->start[n], + lbound); + tmp = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, + non_zerosized, tmp); + asprintf (&msg, "%s, lower bound of dimension %d of array '%s'" + " exceeded (%%ld < %%ld)", gfc_msg_fault, + info->dim[n]+1, ss->expr->symtree->name); + gfc_trans_runtime_check (true, false, tmp, &inner, + &ss->expr->where, msg, + fold_convert (long_integer_type_node, + info->start[n]), + fold_convert (long_integer_type_node, + lbound)); + gfc_free (msg); + + if (check_upper) + { + tmp = fold_build2 (GT_EXPR, boolean_type_node, + info->start[n], ubound); + tmp = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, + non_zerosized, tmp); + asprintf (&msg, "%s, upper bound of dimension %d of array " + "'%s' exceeded (%%ld > %%ld)", gfc_msg_fault, + info->dim[n]+1, ss->expr->symtree->name); + gfc_trans_runtime_check (true, false, tmp, &inner, + &ss->expr->where, msg, + fold_convert (long_integer_type_node, info->start[n]), + fold_convert (long_integer_type_node, ubound)); + gfc_free (msg); + } + + /* Compute the last element of the range, which is not + necessarily "end" (think 0:5:3, which doesn't contain 5) + and check it against both lower and upper bounds. */ + tmp2 = fold_build2 (MINUS_EXPR, gfc_array_index_type, end, + info->start[n]); + tmp2 = fold_build2 (TRUNC_MOD_EXPR, gfc_array_index_type, tmp2, + info->stride[n]); + tmp2 = fold_build2 (MINUS_EXPR, gfc_array_index_type, end, + tmp2); + + tmp = fold_build2 (LT_EXPR, boolean_type_node, tmp2, lbound); + tmp = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, + non_zerosized, tmp); + asprintf (&msg, "%s, lower bound of dimension %d of array '%s'" + " exceeded (%%ld < %%ld)", gfc_msg_fault, + info->dim[n]+1, ss->expr->symtree->name); + gfc_trans_runtime_check (true, false, tmp, &inner, + &ss->expr->where, msg, + fold_convert (long_integer_type_node, + tmp2), + fold_convert (long_integer_type_node, + lbound)); + gfc_free (msg); + + if (check_upper) + { + tmp = fold_build2 (GT_EXPR, boolean_type_node, tmp2, ubound); + tmp = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, + non_zerosized, tmp); + asprintf (&msg, "%s, upper bound of dimension %d of array " + "'%s' exceeded (%%ld > %%ld)", gfc_msg_fault, + info->dim[n]+1, ss->expr->symtree->name); + gfc_trans_runtime_check (true, false, tmp, &inner, + &ss->expr->where, msg, + fold_convert (long_integer_type_node, tmp2), + fold_convert (long_integer_type_node, ubound)); + gfc_free (msg); + } + + /* Check the section sizes match. */ + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, end, + info->start[n]); + tmp = fold_build2 (FLOOR_DIV_EXPR, gfc_array_index_type, tmp, + info->stride[n]); + tmp = fold_build2 (MAX_EXPR, gfc_array_index_type, tmp, + build_int_cst (gfc_array_index_type, 0)); + /* We remember the size of the first section, and check all the + others against this. */ + if (size[n]) + { + tree tmp3; + + tmp3 = fold_build2 (NE_EXPR, boolean_type_node, tmp, size[n]); + asprintf (&msg, "%s, size mismatch for dimension %d " + "of array '%s' (%%ld/%%ld)", gfc_msg_bounds, + info->dim[n]+1, ss->expr->symtree->name); + gfc_trans_runtime_check (true, false, tmp3, &inner, + &ss->expr->where, msg, + fold_convert (long_integer_type_node, tmp), + fold_convert (long_integer_type_node, size[n])); + gfc_free (msg); + } + else + size[n] = gfc_evaluate_now (tmp, &inner); + } + + tmp = gfc_finish_block (&inner); + + /* For optional arguments, only check bounds if the argument is + present. */ + if (ss->expr->symtree->n.sym->attr.optional + || ss->expr->symtree->n.sym->attr.not_always_present) + tmp = build3_v (COND_EXPR, + gfc_conv_expr_present (ss->expr->symtree->n.sym), + tmp, build_empty_stmt ()); + + gfc_add_expr_to_block (&block, tmp); + + } + + tmp = gfc_finish_block (&block); + gfc_add_expr_to_block (&loop->pre, tmp); + } +} + + +/* Return true if the two SS could be aliased, i.e. both point to the same data + object. */ +/* TODO: resolve aliases based on frontend expressions. */ + +static int +gfc_could_be_alias (gfc_ss * lss, gfc_ss * rss) +{ + gfc_ref *lref; + gfc_ref *rref; + gfc_symbol *lsym; + gfc_symbol *rsym; + + lsym = lss->expr->symtree->n.sym; + rsym = rss->expr->symtree->n.sym; + if (gfc_symbols_could_alias (lsym, rsym)) + return 1; + + if (rsym->ts.type != BT_DERIVED + && lsym->ts.type != BT_DERIVED) + return 0; + + /* For derived types we must check all the component types. We can ignore + array references as these will have the same base type as the previous + component ref. */ + for (lref = lss->expr->ref; lref != lss->data.info.ref; lref = lref->next) + { + if (lref->type != REF_COMPONENT) + continue; + + if (gfc_symbols_could_alias (lref->u.c.sym, rsym)) + return 1; + + for (rref = rss->expr->ref; rref != rss->data.info.ref; + rref = rref->next) + { + if (rref->type != REF_COMPONENT) + continue; + + if (gfc_symbols_could_alias (lref->u.c.sym, rref->u.c.sym)) + return 1; + } + } + + for (rref = rss->expr->ref; rref != rss->data.info.ref; rref = rref->next) + { + if (rref->type != REF_COMPONENT) + break; + + if (gfc_symbols_could_alias (rref->u.c.sym, lsym)) + return 1; + } + + return 0; +} + + +/* Resolve array data dependencies. Creates a temporary if required. */ +/* TODO: Calc dependencies with gfc_expr rather than gfc_ss, and move to + dependency.c. */ + +void +gfc_conv_resolve_dependencies (gfc_loopinfo * loop, gfc_ss * dest, + gfc_ss * rss) +{ + gfc_ss *ss; + gfc_ref *lref; + gfc_ref *rref; + gfc_ref *aref; + int nDepend = 0; + int temp_dim = 0; + + loop->temp_ss = NULL; + aref = dest->data.info.ref; + temp_dim = 0; + + for (ss = rss; ss != gfc_ss_terminator; ss = ss->next) + { + if (ss->type != GFC_SS_SECTION) + continue; + + if (dest->expr->symtree->n.sym != ss->expr->symtree->n.sym) + { + if (gfc_could_be_alias (dest, ss) + || gfc_are_equivalenced_arrays (dest->expr, ss->expr)) + { + nDepend = 1; + break; + } + } + else + { + lref = dest->expr->ref; + rref = ss->expr->ref; + + nDepend = gfc_dep_resolver (lref, rref); + if (nDepend == 1) + break; +#if 0 + /* TODO : loop shifting. */ + if (nDepend == 1) + { + /* Mark the dimensions for LOOP SHIFTING */ + for (n = 0; n < loop->dimen; n++) + { + int dim = dest->data.info.dim[n]; + + if (lref->u.ar.dimen_type[dim] == DIMEN_VECTOR) + depends[n] = 2; + else if (! gfc_is_same_range (&lref->u.ar, + &rref->u.ar, dim, 0)) + depends[n] = 1; + } + + /* Put all the dimensions with dependencies in the + innermost loops. */ + dim = 0; + for (n = 0; n < loop->dimen; n++) + { + gcc_assert (loop->order[n] == n); + if (depends[n]) + loop->order[dim++] = n; + } + temp_dim = dim; + for (n = 0; n < loop->dimen; n++) + { + if (! depends[n]) + loop->order[dim++] = n; + } + + gcc_assert (dim == loop->dimen); + break; + } +#endif + } + } + + if (nDepend == 1) + { + tree base_type = gfc_typenode_for_spec (&dest->expr->ts); + if (GFC_ARRAY_TYPE_P (base_type) + || GFC_DESCRIPTOR_TYPE_P (base_type)) + base_type = gfc_get_element_type (base_type); + loop->temp_ss = gfc_get_ss (); + loop->temp_ss->type = GFC_SS_TEMP; + loop->temp_ss->data.temp.type = base_type; + loop->temp_ss->string_length = dest->string_length; + loop->temp_ss->data.temp.dimen = loop->dimen; + loop->temp_ss->next = gfc_ss_terminator; + gfc_add_ss_to_loop (loop, loop->temp_ss); + } + else + loop->temp_ss = NULL; +} + + +/* Initialize the scalarization loop. Creates the loop variables. Determines + the range of the loop variables. Creates a temporary if required. + Calculates how to transform from loop variables to array indices for each + expression. Also generates code for scalar expressions which have been + moved outside the loop. */ + +void +gfc_conv_loop_setup (gfc_loopinfo * loop, locus * where) +{ + int n; + int dim; + gfc_ss_info *info; + gfc_ss_info *specinfo; + gfc_ss *ss; + tree tmp; + tree len; + gfc_ss *loopspec[GFC_MAX_DIMENSIONS]; + bool dynamic[GFC_MAX_DIMENSIONS]; + gfc_constructor *c; + mpz_t *cshape; + mpz_t i; + + mpz_init (i); + for (n = 0; n < loop->dimen; n++) + { + loopspec[n] = NULL; + dynamic[n] = false; + /* We use one SS term, and use that to determine the bounds of the + loop for this dimension. We try to pick the simplest term. */ + for (ss = loop->ss; ss != gfc_ss_terminator; ss = ss->loop_chain) + { + if (ss->shape) + { + /* The frontend has worked out the size for us. */ + if (!loopspec[n] || !loopspec[n]->shape + || !integer_zerop (loopspec[n]->data.info.start[n])) + /* Prefer zero-based descriptors if possible. */ + loopspec[n] = ss; + continue; + } + + if (ss->type == GFC_SS_CONSTRUCTOR) + { + /* An unknown size constructor will always be rank one. + Higher rank constructors will either have known shape, + or still be wrapped in a call to reshape. */ + gcc_assert (loop->dimen == 1); + + /* Always prefer to use the constructor bounds if the size + can be determined at compile time. Prefer not to otherwise, + since the general case involves realloc, and it's better to + avoid that overhead if possible. */ + c = ss->expr->value.constructor; + dynamic[n] = gfc_get_array_constructor_size (&i, c); + if (!dynamic[n] || !loopspec[n]) + loopspec[n] = ss; + continue; + } + + /* TODO: Pick the best bound if we have a choice between a + function and something else. */ + if (ss->type == GFC_SS_FUNCTION) + { + loopspec[n] = ss; + continue; + } + + if (ss->type != GFC_SS_SECTION) + continue; + + if (loopspec[n]) + specinfo = &loopspec[n]->data.info; + else + specinfo = NULL; + info = &ss->data.info; + + if (!specinfo) + loopspec[n] = ss; + /* Criteria for choosing a loop specifier (most important first): + doesn't need realloc + stride of one + known stride + known lower bound + known upper bound + */ + else if (loopspec[n]->type == GFC_SS_CONSTRUCTOR && dynamic[n]) + loopspec[n] = ss; + else if (integer_onep (info->stride[n]) + && !integer_onep (specinfo->stride[n])) + loopspec[n] = ss; + else if (INTEGER_CST_P (info->stride[n]) + && !INTEGER_CST_P (specinfo->stride[n])) + loopspec[n] = ss; + else if (INTEGER_CST_P (info->start[n]) + && !INTEGER_CST_P (specinfo->start[n])) + loopspec[n] = ss; + /* We don't work out the upper bound. + else if (INTEGER_CST_P (info->finish[n]) + && ! INTEGER_CST_P (specinfo->finish[n])) + loopspec[n] = ss; */ + } + + /* We should have found the scalarization loop specifier. If not, + that's bad news. */ + gcc_assert (loopspec[n]); + + info = &loopspec[n]->data.info; + + /* Set the extents of this range. */ + cshape = loopspec[n]->shape; + if (cshape && INTEGER_CST_P (info->start[n]) + && INTEGER_CST_P (info->stride[n])) + { + loop->from[n] = info->start[n]; + mpz_set (i, cshape[n]); + mpz_sub_ui (i, i, 1); + /* To = from + (size - 1) * stride. */ + tmp = gfc_conv_mpz_to_tree (i, gfc_index_integer_kind); + if (!integer_onep (info->stride[n])) + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, + tmp, info->stride[n]); + loop->to[n] = fold_build2 (PLUS_EXPR, gfc_array_index_type, + loop->from[n], tmp); + } + else + { + loop->from[n] = info->start[n]; + switch (loopspec[n]->type) + { + case GFC_SS_CONSTRUCTOR: + /* The upper bound is calculated when we expand the + constructor. */ + gcc_assert (loop->to[n] == NULL_TREE); + break; + + case GFC_SS_SECTION: + /* Use the end expression if it exists and is not constant, + so that it is only evaluated once. */ + if (info->end[n] && !INTEGER_CST_P (info->end[n])) + loop->to[n] = info->end[n]; + else + loop->to[n] = gfc_conv_section_upper_bound (loopspec[n], n, + &loop->pre); + break; + + case GFC_SS_FUNCTION: + /* The loop bound will be set when we generate the call. */ + gcc_assert (loop->to[n] == NULL_TREE); + break; + + default: + gcc_unreachable (); + } + } + + /* Transform everything so we have a simple incrementing variable. */ + if (integer_onep (info->stride[n])) + info->delta[n] = gfc_index_zero_node; + else + { + /* Set the delta for this section. */ + info->delta[n] = gfc_evaluate_now (loop->from[n], &loop->pre); + /* Number of iterations is (end - start + step) / step. + with start = 0, this simplifies to + last = end / step; + for (i = 0; i<=last; i++){...}; */ + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + loop->to[n], loop->from[n]); + tmp = fold_build2 (FLOOR_DIV_EXPR, gfc_array_index_type, + tmp, info->stride[n]); + tmp = fold_build2 (MAX_EXPR, gfc_array_index_type, tmp, + build_int_cst (gfc_array_index_type, -1)); + loop->to[n] = gfc_evaluate_now (tmp, &loop->pre); + /* Make the loop variable start at 0. */ + loop->from[n] = gfc_index_zero_node; + } + } + + /* Add all the scalar code that can be taken out of the loops. + This may include calculating the loop bounds, so do it before + allocating the temporary. */ + gfc_add_loop_ss_code (loop, loop->ss, false, where); + + /* If we want a temporary then create it. */ + if (loop->temp_ss != NULL) + { + gcc_assert (loop->temp_ss->type == GFC_SS_TEMP); + + /* Make absolutely sure that this is a complete type. */ + if (loop->temp_ss->string_length) + loop->temp_ss->data.temp.type + = gfc_get_character_type_len_for_eltype + (TREE_TYPE (loop->temp_ss->data.temp.type), + loop->temp_ss->string_length); + + tmp = loop->temp_ss->data.temp.type; + len = loop->temp_ss->string_length; + n = loop->temp_ss->data.temp.dimen; + memset (&loop->temp_ss->data.info, 0, sizeof (gfc_ss_info)); + loop->temp_ss->type = GFC_SS_SECTION; + loop->temp_ss->data.info.dimen = n; + gfc_trans_create_temp_array (&loop->pre, &loop->post, loop, + &loop->temp_ss->data.info, tmp, NULL_TREE, + false, true, false, where); + } + + for (n = 0; n < loop->temp_dim; n++) + loopspec[loop->order[n]] = NULL; + + mpz_clear (i); + + /* For array parameters we don't have loop variables, so don't calculate the + translations. */ + if (loop->array_parameter) + return; + + /* Calculate the translation from loop variables to array indices. */ + for (ss = loop->ss; ss != gfc_ss_terminator; ss = ss->loop_chain) + { + if (ss->type != GFC_SS_SECTION && ss->type != GFC_SS_COMPONENT + && ss->type != GFC_SS_CONSTRUCTOR) + + continue; + + info = &ss->data.info; + + for (n = 0; n < info->dimen; n++) + { + dim = info->dim[n]; + + /* If we are specifying the range the delta is already set. */ + if (loopspec[n] != ss) + { + /* Calculate the offset relative to the loop variable. + First multiply by the stride. */ + tmp = loop->from[n]; + if (!integer_onep (info->stride[n])) + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, + tmp, info->stride[n]); + + /* Then subtract this from our starting value. */ + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + info->start[n], tmp); + + info->delta[n] = gfc_evaluate_now (tmp, &loop->pre); + } + } + } +} + + +/* Fills in an array descriptor, and returns the size of the array. The size + will be a simple_val, ie a variable or a constant. Also calculates the + offset of the base. Returns the size of the array. + { + stride = 1; + offset = 0; + for (n = 0; n < rank; n++) + { + a.lbound[n] = specified_lower_bound; + offset = offset + a.lbond[n] * stride; + size = 1 - lbound; + a.ubound[n] = specified_upper_bound; + a.stride[n] = stride; + size = siz >= 0 ? ubound + size : 0; //size = ubound + 1 - lbound + stride = stride * size; + } + return (stride); + } */ +/*GCC ARRAYS*/ + +static tree +gfc_array_init_size (tree descriptor, int rank, tree * poffset, + gfc_expr ** lower, gfc_expr ** upper, + stmtblock_t * pblock) +{ + tree type; + tree tmp; + tree size; + tree offset; + tree stride; + tree cond; + tree or_expr; + tree thencase; + tree elsecase; + tree var; + stmtblock_t thenblock; + stmtblock_t elseblock; + gfc_expr *ubound; + gfc_se se; + int n; + + type = TREE_TYPE (descriptor); + + stride = gfc_index_one_node; + offset = gfc_index_zero_node; + + /* Set the dtype. */ + tmp = gfc_conv_descriptor_dtype (descriptor); + gfc_add_modify (pblock, tmp, gfc_get_dtype (TREE_TYPE (descriptor))); + + or_expr = NULL_TREE; + + for (n = 0; n < rank; n++) + { + /* We have 3 possibilities for determining the size of the array: + lower == NULL => lbound = 1, ubound = upper[n] + upper[n] = NULL => lbound = 1, ubound = lower[n] + upper[n] != NULL => lbound = lower[n], ubound = upper[n] */ + ubound = upper[n]; + + /* Set lower bound. */ + gfc_init_se (&se, NULL); + if (lower == NULL) + se.expr = gfc_index_one_node; + else + { + gcc_assert (lower[n]); + if (ubound) + { + gfc_conv_expr_type (&se, lower[n], gfc_array_index_type); + gfc_add_block_to_block (pblock, &se.pre); + } + else + { + se.expr = gfc_index_one_node; + ubound = lower[n]; + } + } + tmp = gfc_conv_descriptor_lbound (descriptor, gfc_rank_cst[n]); + gfc_add_modify (pblock, tmp, se.expr); + + /* Work out the offset for this component. */ + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, se.expr, stride); + offset = fold_build2 (MINUS_EXPR, gfc_array_index_type, offset, tmp); + + /* Start the calculation for the size of this dimension. */ + size = fold_build2 (MINUS_EXPR, gfc_array_index_type, + gfc_index_one_node, se.expr); + + /* Set upper bound. */ + gfc_init_se (&se, NULL); + gcc_assert (ubound); + gfc_conv_expr_type (&se, ubound, gfc_array_index_type); + gfc_add_block_to_block (pblock, &se.pre); + + tmp = gfc_conv_descriptor_ubound (descriptor, gfc_rank_cst[n]); + gfc_add_modify (pblock, tmp, se.expr); + + /* Store the stride. */ + tmp = gfc_conv_descriptor_stride (descriptor, gfc_rank_cst[n]); + gfc_add_modify (pblock, tmp, stride); + + /* Calculate the size of this dimension. */ + size = fold_build2 (PLUS_EXPR, gfc_array_index_type, se.expr, size); + + /* Check whether the size for this dimension is negative. */ + cond = fold_build2 (LE_EXPR, boolean_type_node, size, + gfc_index_zero_node); + if (n == 0) + or_expr = cond; + else + or_expr = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, or_expr, cond); + + size = fold_build3 (COND_EXPR, gfc_array_index_type, cond, + gfc_index_zero_node, size); + + /* Multiply the stride by the number of elements in this dimension. */ + stride = fold_build2 (MULT_EXPR, gfc_array_index_type, stride, size); + stride = gfc_evaluate_now (stride, pblock); + } + + /* The stride is the number of elements in the array, so multiply by the + size of an element to get the total size. */ + tmp = TYPE_SIZE_UNIT (gfc_get_element_type (type)); + size = fold_build2 (MULT_EXPR, gfc_array_index_type, stride, + fold_convert (gfc_array_index_type, tmp)); + + if (poffset != NULL) + { + offset = gfc_evaluate_now (offset, pblock); + *poffset = offset; + } + + if (integer_zerop (or_expr)) + return size; + if (integer_onep (or_expr)) + return gfc_index_zero_node; + + var = gfc_create_var (TREE_TYPE (size), "size"); + gfc_start_block (&thenblock); + gfc_add_modify (&thenblock, var, gfc_index_zero_node); + thencase = gfc_finish_block (&thenblock); + + gfc_start_block (&elseblock); + gfc_add_modify (&elseblock, var, size); + elsecase = gfc_finish_block (&elseblock); + + tmp = gfc_evaluate_now (or_expr, pblock); + tmp = build3_v (COND_EXPR, tmp, thencase, elsecase); + gfc_add_expr_to_block (pblock, tmp); + + return var; +} + + +/* Initializes the descriptor and generates a call to _gfor_allocate. Does + the work for an ALLOCATE statement. */ +/*GCC ARRAYS*/ + +bool +gfc_array_allocate (gfc_se * se, gfc_expr * expr, tree pstat) +{ + tree tmp; + tree pointer; + tree offset; + tree size; + gfc_expr **lower; + gfc_expr **upper; + gfc_ref *ref, *prev_ref = NULL; + bool allocatable_array; + + ref = expr->ref; + + /* Find the last reference in the chain. */ + while (ref && ref->next != NULL) + { + gcc_assert (ref->type != REF_ARRAY || ref->u.ar.type == AR_ELEMENT); + prev_ref = ref; + ref = ref->next; + } + + if (ref == NULL || ref->type != REF_ARRAY) + return false; + + if (!prev_ref) + allocatable_array = expr->symtree->n.sym->attr.allocatable; + else + allocatable_array = prev_ref->u.c.component->attr.allocatable; + + /* Figure out the size of the array. */ + switch (ref->u.ar.type) + { + case AR_ELEMENT: + lower = NULL; + upper = ref->u.ar.start; + break; + + case AR_FULL: + gcc_assert (ref->u.ar.as->type == AS_EXPLICIT); + + lower = ref->u.ar.as->lower; + upper = ref->u.ar.as->upper; + break; + + case AR_SECTION: + lower = ref->u.ar.start; + upper = ref->u.ar.end; + break; + + default: + gcc_unreachable (); + break; + } + + size = gfc_array_init_size (se->expr, ref->u.ar.as->rank, &offset, + lower, upper, &se->pre); + + /* Allocate memory to store the data. */ + pointer = gfc_conv_descriptor_data_get (se->expr); + STRIP_NOPS (pointer); + + /* The allocate_array variants take the old pointer as first argument. */ + if (allocatable_array) + tmp = gfc_allocate_array_with_status (&se->pre, pointer, size, pstat, expr); + else + tmp = gfc_allocate_with_status (&se->pre, size, pstat); + tmp = fold_build2 (MODIFY_EXPR, void_type_node, pointer, tmp); + gfc_add_expr_to_block (&se->pre, tmp); + + tmp = gfc_conv_descriptor_offset (se->expr); + gfc_add_modify (&se->pre, tmp, offset); + + if (expr->ts.type == BT_DERIVED + && expr->ts.derived->attr.alloc_comp) + { + tmp = gfc_nullify_alloc_comp (expr->ts.derived, se->expr, + ref->u.ar.as->rank); + gfc_add_expr_to_block (&se->pre, tmp); + } + + return true; +} + + +/* Deallocate an array variable. Also used when an allocated variable goes + out of scope. */ +/*GCC ARRAYS*/ + +tree +gfc_array_deallocate (tree descriptor, tree pstat, gfc_expr* expr) +{ + tree var; + tree tmp; + stmtblock_t block; + + gfc_start_block (&block); + /* Get a pointer to the data. */ + var = gfc_conv_descriptor_data_get (descriptor); + STRIP_NOPS (var); + + /* Parameter is the address of the data component. */ + tmp = gfc_deallocate_with_status (var, pstat, false, expr); + gfc_add_expr_to_block (&block, tmp); + + /* Zero the data pointer. */ + tmp = fold_build2 (MODIFY_EXPR, void_type_node, + var, build_int_cst (TREE_TYPE (var), 0)); + gfc_add_expr_to_block (&block, tmp); + + return gfc_finish_block (&block); +} + + +/* Create an array constructor from an initialization expression. + We assume the frontend already did any expansions and conversions. */ + +tree +gfc_conv_array_initializer (tree type, gfc_expr * expr) +{ + gfc_constructor *c; + tree tmp; + mpz_t maxval; + gfc_se se; + HOST_WIDE_INT hi; + unsigned HOST_WIDE_INT lo; + tree index, range; + VEC(constructor_elt,gc) *v = NULL; + + switch (expr->expr_type) + { + case EXPR_CONSTANT: + case EXPR_STRUCTURE: + /* A single scalar or derived type value. Create an array with all + elements equal to that value. */ + gfc_init_se (&se, NULL); + + if (expr->expr_type == EXPR_CONSTANT) + gfc_conv_constant (&se, expr); + else + gfc_conv_structure (&se, expr, 1); + + tmp = TYPE_MAX_VALUE (TYPE_DOMAIN (type)); + gcc_assert (tmp && INTEGER_CST_P (tmp)); + hi = TREE_INT_CST_HIGH (tmp); + lo = TREE_INT_CST_LOW (tmp); + lo++; + if (lo == 0) + hi++; + /* This will probably eat buckets of memory for large arrays. */ + while (hi != 0 || lo != 0) + { + CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, se.expr); + if (lo == 0) + hi--; + lo--; + } + break; + + case EXPR_ARRAY: + /* Create a vector of all the elements. */ + for (c = expr->value.constructor; c; c = c->next) + { + if (c->iterator) + { + /* Problems occur when we get something like + integer :: a(lots) = (/(i, i=1, lots)/) */ + gfc_error_now ("The number of elements in the array constructor " + "at %L requires an increase of the allowed %d " + "upper limit. See -fmax-array-constructor " + "option", &expr->where, + gfc_option.flag_max_array_constructor); + return NULL_TREE; + } + if (mpz_cmp_si (c->n.offset, 0) != 0) + index = gfc_conv_mpz_to_tree (c->n.offset, gfc_index_integer_kind); + else + index = NULL_TREE; + mpz_init (maxval); + if (mpz_cmp_si (c->repeat, 0) != 0) + { + tree tmp1, tmp2; + + mpz_set (maxval, c->repeat); + mpz_add (maxval, c->n.offset, maxval); + mpz_sub_ui (maxval, maxval, 1); + tmp2 = gfc_conv_mpz_to_tree (maxval, gfc_index_integer_kind); + if (mpz_cmp_si (c->n.offset, 0) != 0) + { + mpz_add_ui (maxval, c->n.offset, 1); + tmp1 = gfc_conv_mpz_to_tree (maxval, gfc_index_integer_kind); + } + else + tmp1 = gfc_conv_mpz_to_tree (c->n.offset, gfc_index_integer_kind); + + range = fold_build2 (RANGE_EXPR, integer_type_node, tmp1, tmp2); + } + else + range = NULL; + mpz_clear (maxval); + + gfc_init_se (&se, NULL); + switch (c->expr->expr_type) + { + case EXPR_CONSTANT: + gfc_conv_constant (&se, c->expr); + if (range == NULL_TREE) + CONSTRUCTOR_APPEND_ELT (v, index, se.expr); + else + { + if (index != NULL_TREE) + CONSTRUCTOR_APPEND_ELT (v, index, se.expr); + CONSTRUCTOR_APPEND_ELT (v, range, se.expr); + } + break; + + case EXPR_STRUCTURE: + gfc_conv_structure (&se, c->expr, 1); + CONSTRUCTOR_APPEND_ELT (v, index, se.expr); + break; + + + default: + /* Catch those occasional beasts that do not simplify + for one reason or another, assuming that if they are + standard defying the frontend will catch them. */ + gfc_conv_expr (&se, c->expr); + if (range == NULL_TREE) + CONSTRUCTOR_APPEND_ELT (v, index, se.expr); + else + { + if (index != NULL_TREE) + CONSTRUCTOR_APPEND_ELT (v, index, se.expr); + CONSTRUCTOR_APPEND_ELT (v, range, se.expr); + } + break; + } + } + break; + + case EXPR_NULL: + return gfc_build_null_descriptor (type); + + default: + gcc_unreachable (); + } + + /* Create a constructor from the list of elements. */ + tmp = build_constructor (type, v); + TREE_CONSTANT (tmp) = 1; + return tmp; +} + + +/* Generate code to evaluate non-constant array bounds. Sets *poffset and + returns the size (in elements) of the array. */ + +static tree +gfc_trans_array_bounds (tree type, gfc_symbol * sym, tree * poffset, + stmtblock_t * pblock) +{ + gfc_array_spec *as; + tree size; + tree stride; + tree offset; + tree ubound; + tree lbound; + tree tmp; + gfc_se se; + + int dim; + + as = sym->as; + + size = gfc_index_one_node; + offset = gfc_index_zero_node; + for (dim = 0; dim < as->rank; dim++) + { + /* Evaluate non-constant array bound expressions. */ + lbound = GFC_TYPE_ARRAY_LBOUND (type, dim); + if (as->lower[dim] && !INTEGER_CST_P (lbound)) + { + gfc_init_se (&se, NULL); + gfc_conv_expr_type (&se, as->lower[dim], gfc_array_index_type); + gfc_add_block_to_block (pblock, &se.pre); + gfc_add_modify (pblock, lbound, se.expr); + } + ubound = GFC_TYPE_ARRAY_UBOUND (type, dim); + if (as->upper[dim] && !INTEGER_CST_P (ubound)) + { + gfc_init_se (&se, NULL); + gfc_conv_expr_type (&se, as->upper[dim], gfc_array_index_type); + gfc_add_block_to_block (pblock, &se.pre); + gfc_add_modify (pblock, ubound, se.expr); + } + /* The offset of this dimension. offset = offset - lbound * stride. */ + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, lbound, size); + offset = fold_build2 (MINUS_EXPR, gfc_array_index_type, offset, tmp); + + /* The size of this dimension, and the stride of the next. */ + if (dim + 1 < as->rank) + stride = GFC_TYPE_ARRAY_STRIDE (type, dim + 1); + else + stride = GFC_TYPE_ARRAY_SIZE (type); + + if (ubound != NULL_TREE && !(stride && INTEGER_CST_P (stride))) + { + /* Calculate stride = size * (ubound + 1 - lbound). */ + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + gfc_index_one_node, lbound); + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, ubound, tmp); + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, size, tmp); + if (stride) + gfc_add_modify (pblock, stride, tmp); + else + stride = gfc_evaluate_now (tmp, pblock); + + /* Make sure that negative size arrays are translated + to being zero size. */ + tmp = fold_build2 (GE_EXPR, boolean_type_node, + stride, gfc_index_zero_node); + tmp = fold_build3 (COND_EXPR, gfc_array_index_type, tmp, + stride, gfc_index_zero_node); + gfc_add_modify (pblock, stride, tmp); + } + + size = stride; + } + + gfc_trans_vla_type_sizes (sym, pblock); + + *poffset = offset; + return size; +} + + +/* Generate code to initialize/allocate an array variable. */ + +tree +gfc_trans_auto_array_allocation (tree decl, gfc_symbol * sym, tree fnbody) +{ + stmtblock_t block; + tree type; + tree tmp; + tree size; + tree offset; + bool onstack; + + gcc_assert (!(sym->attr.pointer || sym->attr.allocatable)); + + /* Do nothing for USEd variables. */ + if (sym->attr.use_assoc) + return fnbody; + + type = TREE_TYPE (decl); + gcc_assert (GFC_ARRAY_TYPE_P (type)); + onstack = TREE_CODE (type) != POINTER_TYPE; + + gfc_start_block (&block); + + /* Evaluate character string length. */ + if (sym->ts.type == BT_CHARACTER + && onstack && !INTEGER_CST_P (sym->ts.cl->backend_decl)) + { + gfc_conv_string_length (sym->ts.cl, NULL, &block); + + gfc_trans_vla_type_sizes (sym, &block); + + /* Emit a DECL_EXPR for this variable, which will cause the + gimplifier to allocate storage, and all that good stuff. */ + tmp = fold_build1 (DECL_EXPR, TREE_TYPE (decl), decl); + gfc_add_expr_to_block (&block, tmp); + } + + if (onstack) + { + gfc_add_expr_to_block (&block, fnbody); + return gfc_finish_block (&block); + } + + type = TREE_TYPE (type); + + gcc_assert (!sym->attr.use_assoc); + gcc_assert (!TREE_STATIC (decl)); + gcc_assert (!sym->module); + + if (sym->ts.type == BT_CHARACTER + && !INTEGER_CST_P (sym->ts.cl->backend_decl)) + gfc_conv_string_length (sym->ts.cl, NULL, &block); + + size = gfc_trans_array_bounds (type, sym, &offset, &block); + + /* Don't actually allocate space for Cray Pointees. */ + if (sym->attr.cray_pointee) + { + if (TREE_CODE (GFC_TYPE_ARRAY_OFFSET (type)) == VAR_DECL) + gfc_add_modify (&block, GFC_TYPE_ARRAY_OFFSET (type), offset); + gfc_add_expr_to_block (&block, fnbody); + return gfc_finish_block (&block); + } + + /* The size is the number of elements in the array, so multiply by the + size of an element to get the total size. */ + tmp = TYPE_SIZE_UNIT (gfc_get_element_type (type)); + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, + fold_convert (gfc_array_index_type, tmp)); + + /* Allocate memory to hold the data. */ + tmp = gfc_call_malloc (&block, TREE_TYPE (decl), size); + gfc_add_modify (&block, decl, tmp); + + /* Set offset of the array. */ + if (TREE_CODE (GFC_TYPE_ARRAY_OFFSET (type)) == VAR_DECL) + gfc_add_modify (&block, GFC_TYPE_ARRAY_OFFSET (type), offset); + + + /* Automatic arrays should not have initializers. */ + gcc_assert (!sym->value); + + gfc_add_expr_to_block (&block, fnbody); + + /* Free the temporary. */ + tmp = gfc_call_free (convert (pvoid_type_node, decl)); + gfc_add_expr_to_block (&block, tmp); + + return gfc_finish_block (&block); +} + + +/* Generate entry and exit code for g77 calling convention arrays. */ + +tree +gfc_trans_g77_array (gfc_symbol * sym, tree body) +{ + tree parm; + tree type; + locus loc; + tree offset; + tree tmp; + tree stmt; + stmtblock_t block; + + gfc_get_backend_locus (&loc); + gfc_set_backend_locus (&sym->declared_at); + + /* Descriptor type. */ + parm = sym->backend_decl; + type = TREE_TYPE (parm); + gcc_assert (GFC_ARRAY_TYPE_P (type)); + + gfc_start_block (&block); + + if (sym->ts.type == BT_CHARACTER + && TREE_CODE (sym->ts.cl->backend_decl) == VAR_DECL) + gfc_conv_string_length (sym->ts.cl, NULL, &block); + + /* Evaluate the bounds of the array. */ + gfc_trans_array_bounds (type, sym, &offset, &block); + + /* Set the offset. */ + if (TREE_CODE (GFC_TYPE_ARRAY_OFFSET (type)) == VAR_DECL) + gfc_add_modify (&block, GFC_TYPE_ARRAY_OFFSET (type), offset); + + /* Set the pointer itself if we aren't using the parameter directly. */ + if (TREE_CODE (parm) != PARM_DECL) + { + tmp = convert (TREE_TYPE (parm), GFC_DECL_SAVED_DESCRIPTOR (parm)); + gfc_add_modify (&block, parm, tmp); + } + stmt = gfc_finish_block (&block); + + gfc_set_backend_locus (&loc); + + gfc_start_block (&block); + + /* Add the initialization code to the start of the function. */ + + if (sym->attr.optional || sym->attr.not_always_present) + { + tmp = gfc_conv_expr_present (sym); + stmt = build3_v (COND_EXPR, tmp, stmt, build_empty_stmt ()); + } + + gfc_add_expr_to_block (&block, stmt); + gfc_add_expr_to_block (&block, body); + + return gfc_finish_block (&block); +} + + +/* Modify the descriptor of an array parameter so that it has the + correct lower bound. Also move the upper bound accordingly. + If the array is not packed, it will be copied into a temporary. + For each dimension we set the new lower and upper bounds. Then we copy the + stride and calculate the offset for this dimension. We also work out + what the stride of a packed array would be, and see it the two match. + If the array need repacking, we set the stride to the values we just + calculated, recalculate the offset and copy the array data. + Code is also added to copy the data back at the end of the function. + */ + +tree +gfc_trans_dummy_array_bias (gfc_symbol * sym, tree tmpdesc, tree body) +{ + tree size; + tree type; + tree offset; + locus loc; + stmtblock_t block; + stmtblock_t cleanup; + tree lbound; + tree ubound; + tree dubound; + tree dlbound; + tree dumdesc; + tree tmp; + tree stmt; + tree stride, stride2; + tree stmt_packed; + tree stmt_unpacked; + tree partial; + gfc_se se; + int n; + int checkparm; + int no_repack; + bool optional_arg; + + /* Do nothing for pointer and allocatable arrays. */ + if (sym->attr.pointer || sym->attr.allocatable) + return body; + + if (sym->attr.dummy && gfc_is_nodesc_array (sym)) + return gfc_trans_g77_array (sym, body); + + gfc_get_backend_locus (&loc); + gfc_set_backend_locus (&sym->declared_at); + + /* Descriptor type. */ + type = TREE_TYPE (tmpdesc); + gcc_assert (GFC_ARRAY_TYPE_P (type)); + dumdesc = GFC_DECL_SAVED_DESCRIPTOR (tmpdesc); + dumdesc = build_fold_indirect_ref (dumdesc); + gfc_start_block (&block); + + if (sym->ts.type == BT_CHARACTER + && TREE_CODE (sym->ts.cl->backend_decl) == VAR_DECL) + gfc_conv_string_length (sym->ts.cl, NULL, &block); + + checkparm = (sym->as->type == AS_EXPLICIT && flag_bounds_check); + + no_repack = !(GFC_DECL_PACKED_ARRAY (tmpdesc) + || GFC_DECL_PARTIAL_PACKED_ARRAY (tmpdesc)); + + if (GFC_DECL_PARTIAL_PACKED_ARRAY (tmpdesc)) + { + /* For non-constant shape arrays we only check if the first dimension + is contiguous. Repacking higher dimensions wouldn't gain us + anything as we still don't know the array stride. */ + partial = gfc_create_var (boolean_type_node, "partial"); + TREE_USED (partial) = 1; + tmp = gfc_conv_descriptor_stride (dumdesc, gfc_rank_cst[0]); + tmp = fold_build2 (EQ_EXPR, boolean_type_node, tmp, gfc_index_one_node); + gfc_add_modify (&block, partial, tmp); + } + else + { + partial = NULL_TREE; + } + + /* The naming of stmt_unpacked and stmt_packed may be counter-intuitive + here, however I think it does the right thing. */ + if (no_repack) + { + /* Set the first stride. */ + stride = gfc_conv_descriptor_stride (dumdesc, gfc_rank_cst[0]); + stride = gfc_evaluate_now (stride, &block); + + tmp = fold_build2 (EQ_EXPR, boolean_type_node, + stride, gfc_index_zero_node); + tmp = fold_build3 (COND_EXPR, gfc_array_index_type, tmp, + gfc_index_one_node, stride); + stride = GFC_TYPE_ARRAY_STRIDE (type, 0); + gfc_add_modify (&block, stride, tmp); + + /* Allow the user to disable array repacking. */ + stmt_unpacked = NULL_TREE; + } + else + { + gcc_assert (integer_onep (GFC_TYPE_ARRAY_STRIDE (type, 0))); + /* A library call to repack the array if necessary. */ + tmp = GFC_DECL_SAVED_DESCRIPTOR (tmpdesc); + stmt_unpacked = build_call_expr (gfor_fndecl_in_pack, 1, tmp); + + stride = gfc_index_one_node; + + if (gfc_option.warn_array_temp) + gfc_warning ("Creating array temporary at %L", &loc); + } + + /* This is for the case where the array data is used directly without + calling the repack function. */ + if (no_repack || partial != NULL_TREE) + stmt_packed = gfc_conv_descriptor_data_get (dumdesc); + else + stmt_packed = NULL_TREE; + + /* Assign the data pointer. */ + if (stmt_packed != NULL_TREE && stmt_unpacked != NULL_TREE) + { + /* Don't repack unknown shape arrays when the first stride is 1. */ + tmp = fold_build3 (COND_EXPR, TREE_TYPE (stmt_packed), + partial, stmt_packed, stmt_unpacked); + } + else + tmp = stmt_packed != NULL_TREE ? stmt_packed : stmt_unpacked; + gfc_add_modify (&block, tmpdesc, fold_convert (type, tmp)); + + offset = gfc_index_zero_node; + size = gfc_index_one_node; + + /* Evaluate the bounds of the array. */ + for (n = 0; n < sym->as->rank; n++) + { + if (checkparm || !sym->as->upper[n]) + { + /* Get the bounds of the actual parameter. */ + dubound = gfc_conv_descriptor_ubound (dumdesc, gfc_rank_cst[n]); + dlbound = gfc_conv_descriptor_lbound (dumdesc, gfc_rank_cst[n]); + } + else + { + dubound = NULL_TREE; + dlbound = NULL_TREE; + } + + lbound = GFC_TYPE_ARRAY_LBOUND (type, n); + if (!INTEGER_CST_P (lbound)) + { + gfc_init_se (&se, NULL); + gfc_conv_expr_type (&se, sym->as->lower[n], + gfc_array_index_type); + gfc_add_block_to_block (&block, &se.pre); + gfc_add_modify (&block, lbound, se.expr); + } + + ubound = GFC_TYPE_ARRAY_UBOUND (type, n); + /* Set the desired upper bound. */ + if (sym->as->upper[n]) + { + /* We know what we want the upper bound to be. */ + if (!INTEGER_CST_P (ubound)) + { + gfc_init_se (&se, NULL); + gfc_conv_expr_type (&se, sym->as->upper[n], + gfc_array_index_type); + gfc_add_block_to_block (&block, &se.pre); + gfc_add_modify (&block, ubound, se.expr); + } + + /* Check the sizes match. */ + if (checkparm) + { + /* Check (ubound(a) - lbound(a) == ubound(b) - lbound(b)). */ + char * msg; + + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + ubound, lbound); + stride2 = fold_build2 (MINUS_EXPR, gfc_array_index_type, + dubound, dlbound); + tmp = fold_build2 (NE_EXPR, gfc_array_index_type, tmp, stride2); + asprintf (&msg, "%s for dimension %d of array '%s'", + gfc_msg_bounds, n+1, sym->name); + gfc_trans_runtime_check (true, false, tmp, &block, &loc, msg); + gfc_free (msg); + } + } + else + { + /* For assumed shape arrays move the upper bound by the same amount + as the lower bound. */ + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + dubound, dlbound); + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, tmp, lbound); + gfc_add_modify (&block, ubound, tmp); + } + /* The offset of this dimension. offset = offset - lbound * stride. */ + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, lbound, stride); + offset = fold_build2 (MINUS_EXPR, gfc_array_index_type, offset, tmp); + + /* The size of this dimension, and the stride of the next. */ + if (n + 1 < sym->as->rank) + { + stride = GFC_TYPE_ARRAY_STRIDE (type, n + 1); + + if (no_repack || partial != NULL_TREE) + { + stmt_unpacked = + gfc_conv_descriptor_stride (dumdesc, gfc_rank_cst[n+1]); + } + + /* Figure out the stride if not a known constant. */ + if (!INTEGER_CST_P (stride)) + { + if (no_repack) + stmt_packed = NULL_TREE; + else + { + /* Calculate stride = size * (ubound + 1 - lbound). */ + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + gfc_index_one_node, lbound); + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + ubound, tmp); + size = fold_build2 (MULT_EXPR, gfc_array_index_type, + size, tmp); + stmt_packed = size; + } + + /* Assign the stride. */ + if (stmt_packed != NULL_TREE && stmt_unpacked != NULL_TREE) + tmp = fold_build3 (COND_EXPR, gfc_array_index_type, partial, + stmt_unpacked, stmt_packed); + else + tmp = (stmt_packed != NULL_TREE) ? stmt_packed : stmt_unpacked; + gfc_add_modify (&block, stride, tmp); + } + } + else + { + stride = GFC_TYPE_ARRAY_SIZE (type); + + if (stride && !INTEGER_CST_P (stride)) + { + /* Calculate size = stride * (ubound + 1 - lbound). */ + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + gfc_index_one_node, lbound); + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + ubound, tmp); + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, + GFC_TYPE_ARRAY_STRIDE (type, n), tmp); + gfc_add_modify (&block, stride, tmp); + } + } + } + + /* Set the offset. */ + if (TREE_CODE (GFC_TYPE_ARRAY_OFFSET (type)) == VAR_DECL) + gfc_add_modify (&block, GFC_TYPE_ARRAY_OFFSET (type), offset); + + gfc_trans_vla_type_sizes (sym, &block); + + stmt = gfc_finish_block (&block); + + gfc_start_block (&block); + + /* Only do the entry/initialization code if the arg is present. */ + dumdesc = GFC_DECL_SAVED_DESCRIPTOR (tmpdesc); + optional_arg = (sym->attr.optional + || (sym->ns->proc_name->attr.entry_master + && sym->attr.dummy)); + if (optional_arg) + { + tmp = gfc_conv_expr_present (sym); + stmt = build3_v (COND_EXPR, tmp, stmt, build_empty_stmt ()); + } + gfc_add_expr_to_block (&block, stmt); + + /* Add the main function body. */ + gfc_add_expr_to_block (&block, body); + + /* Cleanup code. */ + if (!no_repack) + { + gfc_start_block (&cleanup); + + if (sym->attr.intent != INTENT_IN) + { + /* Copy the data back. */ + tmp = build_call_expr (gfor_fndecl_in_unpack, 2, dumdesc, tmpdesc); + gfc_add_expr_to_block (&cleanup, tmp); + } + + /* Free the temporary. */ + tmp = gfc_call_free (tmpdesc); + gfc_add_expr_to_block (&cleanup, tmp); + + stmt = gfc_finish_block (&cleanup); + + /* Only do the cleanup if the array was repacked. */ + tmp = build_fold_indirect_ref (dumdesc); + tmp = gfc_conv_descriptor_data_get (tmp); + tmp = fold_build2 (NE_EXPR, boolean_type_node, tmp, tmpdesc); + stmt = build3_v (COND_EXPR, tmp, stmt, build_empty_stmt ()); + + if (optional_arg) + { + tmp = gfc_conv_expr_present (sym); + stmt = build3_v (COND_EXPR, tmp, stmt, build_empty_stmt ()); + } + gfc_add_expr_to_block (&block, stmt); + } + /* We don't need to free any memory allocated by internal_pack as it will + be freed at the end of the function by pop_context. */ + return gfc_finish_block (&block); +} + + +/* Calculate the overall offset, including subreferences. */ +static void +gfc_get_dataptr_offset (stmtblock_t *block, tree parm, tree desc, tree offset, + bool subref, gfc_expr *expr) +{ + tree tmp; + tree field; + tree stride; + tree index; + gfc_ref *ref; + gfc_se start; + int n; + + /* If offset is NULL and this is not a subreferenced array, there is + nothing to do. */ + if (offset == NULL_TREE) + { + if (subref) + offset = gfc_index_zero_node; + else + return; + } + + tmp = gfc_conv_array_data (desc); + tmp = build_fold_indirect_ref (tmp); + tmp = gfc_build_array_ref (tmp, offset, NULL); + + /* Offset the data pointer for pointer assignments from arrays with + subreferences; e.g. my_integer => my_type(:)%integer_component. */ + if (subref) + { + /* Go past the array reference. */ + for (ref = expr->ref; ref; ref = ref->next) + if (ref->type == REF_ARRAY && + ref->u.ar.type != AR_ELEMENT) + { + ref = ref->next; + break; + } + + /* Calculate the offset for each subsequent subreference. */ + for (; ref; ref = ref->next) + { + switch (ref->type) + { + case REF_COMPONENT: + field = ref->u.c.component->backend_decl; + gcc_assert (field && TREE_CODE (field) == FIELD_DECL); + tmp = fold_build3 (COMPONENT_REF, TREE_TYPE (field), + tmp, field, NULL_TREE); + break; + + case REF_SUBSTRING: + gcc_assert (TREE_CODE (TREE_TYPE (tmp)) == ARRAY_TYPE); + gfc_init_se (&start, NULL); + gfc_conv_expr_type (&start, ref->u.ss.start, gfc_charlen_type_node); + gfc_add_block_to_block (block, &start.pre); + tmp = gfc_build_array_ref (tmp, start.expr, NULL); + break; + + case REF_ARRAY: + gcc_assert (TREE_CODE (TREE_TYPE (tmp)) == ARRAY_TYPE + && ref->u.ar.type == AR_ELEMENT); + + /* TODO - Add bounds checking. */ + stride = gfc_index_one_node; + index = gfc_index_zero_node; + for (n = 0; n < ref->u.ar.dimen; n++) + { + tree itmp; + tree jtmp; + + /* Update the index. */ + gfc_init_se (&start, NULL); + gfc_conv_expr_type (&start, ref->u.ar.start[n], gfc_array_index_type); + itmp = gfc_evaluate_now (start.expr, block); + gfc_init_se (&start, NULL); + gfc_conv_expr_type (&start, ref->u.ar.as->lower[n], gfc_array_index_type); + jtmp = gfc_evaluate_now (start.expr, block); + itmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, itmp, jtmp); + itmp = fold_build2 (MULT_EXPR, gfc_array_index_type, itmp, stride); + index = fold_build2 (PLUS_EXPR, gfc_array_index_type, itmp, index); + index = gfc_evaluate_now (index, block); + + /* Update the stride. */ + gfc_init_se (&start, NULL); + gfc_conv_expr_type (&start, ref->u.ar.as->upper[n], gfc_array_index_type); + itmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, start.expr, jtmp); + itmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + gfc_index_one_node, itmp); + stride = fold_build2 (MULT_EXPR, gfc_array_index_type, stride, itmp); + stride = gfc_evaluate_now (stride, block); + } + + /* Apply the index to obtain the array element. */ + tmp = gfc_build_array_ref (tmp, index, NULL); + break; + + default: + gcc_unreachable (); + break; + } + } + } + + /* Set the target data pointer. */ + offset = gfc_build_addr_expr (gfc_array_dataptr_type (desc), tmp); + gfc_conv_descriptor_data_set (block, parm, offset); +} + + +/* gfc_conv_expr_descriptor needs the character length of elemental + functions before the function is called so that the size of the + temporary can be obtained. The only way to do this is to convert + the expression, mapping onto the actual arguments. */ +static void +get_elemental_fcn_charlen (gfc_expr *expr, gfc_se *se) +{ + gfc_interface_mapping mapping; + gfc_formal_arglist *formal; + gfc_actual_arglist *arg; + gfc_se tse; + + formal = expr->symtree->n.sym->formal; + arg = expr->value.function.actual; + gfc_init_interface_mapping (&mapping); + + /* Set se = NULL in the calls to the interface mapping, to suppress any + backend stuff. */ + for (; arg != NULL; arg = arg->next, formal = formal ? formal->next : NULL) + { + if (!arg->expr) + continue; + if (formal->sym) + gfc_add_interface_mapping (&mapping, formal->sym, NULL, arg->expr); + } + + gfc_init_se (&tse, NULL); + + /* Build the expression for the character length and convert it. */ + gfc_apply_interface_mapping (&mapping, &tse, expr->ts.cl->length); + + gfc_add_block_to_block (&se->pre, &tse.pre); + gfc_add_block_to_block (&se->post, &tse.post); + tse.expr = fold_convert (gfc_charlen_type_node, tse.expr); + tse.expr = fold_build2 (MAX_EXPR, gfc_charlen_type_node, tse.expr, + build_int_cst (gfc_charlen_type_node, 0)); + expr->ts.cl->backend_decl = tse.expr; + gfc_free_interface_mapping (&mapping); +} + + +/* Convert an array for passing as an actual argument. Expressions and + vector subscripts are evaluated and stored in a temporary, which is then + passed. For whole arrays the descriptor is passed. For array sections + a modified copy of the descriptor is passed, but using the original data. + + This function is also used for array pointer assignments, and there + are three cases: + + - se->want_pointer && !se->direct_byref + EXPR is an actual argument. On exit, se->expr contains a + pointer to the array descriptor. + + - !se->want_pointer && !se->direct_byref + EXPR is an actual argument to an intrinsic function or the + left-hand side of a pointer assignment. On exit, se->expr + contains the descriptor for EXPR. + + - !se->want_pointer && se->direct_byref + EXPR is the right-hand side of a pointer assignment and + se->expr is the descriptor for the previously-evaluated + left-hand side. The function creates an assignment from + EXPR to se->expr. */ + +void +gfc_conv_expr_descriptor (gfc_se * se, gfc_expr * expr, gfc_ss * ss) +{ + gfc_loopinfo loop; + gfc_ss *secss; + gfc_ss_info *info; + int need_tmp; + int n; + tree tmp; + tree desc; + stmtblock_t block; + tree start; + tree offset; + int full; + bool subref_array_target = false; + + gcc_assert (ss != gfc_ss_terminator); + + /* Special case things we know we can pass easily. */ + switch (expr->expr_type) + { + case EXPR_VARIABLE: + /* If we have a linear array section, we can pass it directly. + Otherwise we need to copy it into a temporary. */ + + /* Find the SS for the array section. */ + secss = ss; + while (secss != gfc_ss_terminator && secss->type != GFC_SS_SECTION) + secss = secss->next; + + gcc_assert (secss != gfc_ss_terminator); + info = &secss->data.info; + + /* Get the descriptor for the array. */ + gfc_conv_ss_descriptor (&se->pre, secss, 0); + desc = info->descriptor; + + subref_array_target = se->direct_byref && is_subref_array (expr); + need_tmp = gfc_ref_needs_temporary_p (expr->ref) + && !subref_array_target; + + if (need_tmp) + full = 0; + else if (GFC_ARRAY_TYPE_P (TREE_TYPE (desc))) + { + /* Create a new descriptor if the array doesn't have one. */ + full = 0; + } + else if (info->ref->u.ar.type == AR_FULL) + full = 1; + else if (se->direct_byref) + full = 0; + else + full = gfc_full_array_ref_p (info->ref); + + if (full) + { + if (se->direct_byref) + { + /* Copy the descriptor for pointer assignments. */ + gfc_add_modify (&se->pre, se->expr, desc); + + /* Add any offsets from subreferences. */ + gfc_get_dataptr_offset (&se->pre, se->expr, desc, NULL_TREE, + subref_array_target, expr); + } + else if (se->want_pointer) + { + /* We pass full arrays directly. This means that pointers and + allocatable arrays should also work. */ + se->expr = build_fold_addr_expr (desc); + } + else + { + se->expr = desc; + } + + if (expr->ts.type == BT_CHARACTER) + se->string_length = gfc_get_expr_charlen (expr); + + return; + } + break; + + case EXPR_FUNCTION: + /* A transformational function return value will be a temporary + array descriptor. We still need to go through the scalarizer + to create the descriptor. Elemental functions ar handled as + arbitrary expressions, i.e. copy to a temporary. */ + secss = ss; + /* Look for the SS for this function. */ + while (secss != gfc_ss_terminator + && (secss->type != GFC_SS_FUNCTION || secss->expr != expr)) + secss = secss->next; + + if (se->direct_byref) + { + gcc_assert (secss != gfc_ss_terminator); + + /* For pointer assignments pass the descriptor directly. */ + se->ss = secss; + se->expr = build_fold_addr_expr (se->expr); + gfc_conv_expr (se, expr); + return; + } + + if (secss == gfc_ss_terminator) + { + /* Elemental function. */ + need_tmp = 1; + if (expr->ts.type == BT_CHARACTER + && expr->ts.cl->length->expr_type != EXPR_CONSTANT) + get_elemental_fcn_charlen (expr, se); + + info = NULL; + } + else + { + /* Transformational function. */ + info = &secss->data.info; + need_tmp = 0; + } + break; + + case EXPR_ARRAY: + /* Constant array constructors don't need a temporary. */ + if (ss->type == GFC_SS_CONSTRUCTOR + && expr->ts.type != BT_CHARACTER + && gfc_constant_array_constructor_p (expr->value.constructor)) + { + need_tmp = 0; + info = &ss->data.info; + secss = ss; + } + else + { + need_tmp = 1; + secss = NULL; + info = NULL; + } + break; + + default: + /* Something complicated. Copy it into a temporary. */ + need_tmp = 1; + secss = NULL; + info = NULL; + break; + } + + gfc_init_loopinfo (&loop); + + /* Associate the SS with the loop. */ + gfc_add_ss_to_loop (&loop, ss); + + /* Tell the scalarizer not to bother creating loop variables, etc. */ + if (!need_tmp) + loop.array_parameter = 1; + else + /* The right-hand side of a pointer assignment mustn't use a temporary. */ + gcc_assert (!se->direct_byref); + + /* Setup the scalarizing loops and bounds. */ + gfc_conv_ss_startstride (&loop); + + if (need_tmp) + { + /* Tell the scalarizer to make a temporary. */ + loop.temp_ss = gfc_get_ss (); + loop.temp_ss->type = GFC_SS_TEMP; + loop.temp_ss->next = gfc_ss_terminator; + + if (expr->ts.type == BT_CHARACTER && !expr->ts.cl->backend_decl) + gfc_conv_string_length (expr->ts.cl, expr, &se->pre); + + loop.temp_ss->data.temp.type = gfc_typenode_for_spec (&expr->ts); + + if (expr->ts.type == BT_CHARACTER) + loop.temp_ss->string_length = expr->ts.cl->backend_decl; + else + loop.temp_ss->string_length = NULL; + + se->string_length = loop.temp_ss->string_length; + loop.temp_ss->data.temp.dimen = loop.dimen; + gfc_add_ss_to_loop (&loop, loop.temp_ss); + } + + gfc_conv_loop_setup (&loop, & expr->where); + + if (need_tmp) + { + /* Copy into a temporary and pass that. We don't need to copy the data + back because expressions and vector subscripts must be INTENT_IN. */ + /* TODO: Optimize passing function return values. */ + gfc_se lse; + gfc_se rse; + + /* Start the copying loops. */ + gfc_mark_ss_chain_used (loop.temp_ss, 1); + gfc_mark_ss_chain_used (ss, 1); + gfc_start_scalarized_body (&loop, &block); + + /* Copy each data element. */ + gfc_init_se (&lse, NULL); + gfc_copy_loopinfo_to_se (&lse, &loop); + gfc_init_se (&rse, NULL); + gfc_copy_loopinfo_to_se (&rse, &loop); + + lse.ss = loop.temp_ss; + rse.ss = ss; + + gfc_conv_scalarized_array_ref (&lse, NULL); + if (expr->ts.type == BT_CHARACTER) + { + gfc_conv_expr (&rse, expr); + if (POINTER_TYPE_P (TREE_TYPE (rse.expr))) + rse.expr = build_fold_indirect_ref (rse.expr); + } + else + gfc_conv_expr_val (&rse, expr); + + gfc_add_block_to_block (&block, &rse.pre); + gfc_add_block_to_block (&block, &lse.pre); + + lse.string_length = rse.string_length; + tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts, true, + expr->expr_type == EXPR_VARIABLE); + gfc_add_expr_to_block (&block, tmp); + + /* Finish the copying loops. */ + gfc_trans_scalarizing_loops (&loop, &block); + + desc = loop.temp_ss->data.info.descriptor; + + gcc_assert (is_gimple_lvalue (desc)); + } + else if (expr->expr_type == EXPR_FUNCTION) + { + desc = info->descriptor; + se->string_length = ss->string_length; + } + else + { + /* We pass sections without copying to a temporary. Make a new + descriptor and point it at the section we want. The loop variable + limits will be the limits of the section. + A function may decide to repack the array to speed up access, but + we're not bothered about that here. */ + int dim, ndim; + tree parm; + tree parmtype; + tree stride; + tree from; + tree to; + tree base; + + /* Set the string_length for a character array. */ + if (expr->ts.type == BT_CHARACTER) + se->string_length = gfc_get_expr_charlen (expr); + + desc = info->descriptor; + gcc_assert (secss && secss != gfc_ss_terminator); + if (se->direct_byref) + { + /* For pointer assignments we fill in the destination. */ + parm = se->expr; + parmtype = TREE_TYPE (parm); + } + else + { + /* Otherwise make a new one. */ + parmtype = gfc_get_element_type (TREE_TYPE (desc)); + parmtype = gfc_get_array_type_bounds (parmtype, loop.dimen, + loop.from, loop.to, 0, + GFC_ARRAY_UNKNOWN); + parm = gfc_create_var (parmtype, "parm"); + } + + offset = gfc_index_zero_node; + dim = 0; + + /* The following can be somewhat confusing. We have two + descriptors, a new one and the original array. + {parm, parmtype, dim} refer to the new one. + {desc, type, n, secss, loop} refer to the original, which maybe + a descriptorless array. + The bounds of the scalarization are the bounds of the section. + We don't have to worry about numeric overflows when calculating + the offsets because all elements are within the array data. */ + + /* Set the dtype. */ + tmp = gfc_conv_descriptor_dtype (parm); + gfc_add_modify (&loop.pre, tmp, gfc_get_dtype (parmtype)); + + /* Set offset for assignments to pointer only to zero if it is not + the full array. */ + if (se->direct_byref + && info->ref && info->ref->u.ar.type != AR_FULL) + base = gfc_index_zero_node; + else if (GFC_ARRAY_TYPE_P (TREE_TYPE (desc))) + base = gfc_evaluate_now (gfc_conv_array_offset (desc), &loop.pre); + else + base = NULL_TREE; + + ndim = info->ref ? info->ref->u.ar.dimen : info->dimen; + for (n = 0; n < ndim; n++) + { + stride = gfc_conv_array_stride (desc, n); + + /* Work out the offset. */ + if (info->ref + && info->ref->u.ar.dimen_type[n] == DIMEN_ELEMENT) + { + gcc_assert (info->subscript[n] + && info->subscript[n]->type == GFC_SS_SCALAR); + start = info->subscript[n]->data.scalar.expr; + } + else + { + /* Check we haven't somehow got out of sync. */ + gcc_assert (info->dim[dim] == n); + + /* Evaluate and remember the start of the section. */ + start = info->start[dim]; + stride = gfc_evaluate_now (stride, &loop.pre); + } + + tmp = gfc_conv_array_lbound (desc, n); + tmp = fold_build2 (MINUS_EXPR, TREE_TYPE (tmp), start, tmp); + + tmp = fold_build2 (MULT_EXPR, TREE_TYPE (tmp), tmp, stride); + offset = fold_build2 (PLUS_EXPR, TREE_TYPE (tmp), offset, tmp); + + if (info->ref + && info->ref->u.ar.dimen_type[n] == DIMEN_ELEMENT) + { + /* For elemental dimensions, we only need the offset. */ + continue; + } + + /* Vector subscripts need copying and are handled elsewhere. */ + if (info->ref) + gcc_assert (info->ref->u.ar.dimen_type[n] == DIMEN_RANGE); + + /* Set the new lower bound. */ + from = loop.from[dim]; + to = loop.to[dim]; + + /* If we have an array section or are assigning make sure that + the lower bound is 1. References to the full + array should otherwise keep the original bounds. */ + if ((!info->ref + || info->ref->u.ar.type != AR_FULL) + && !integer_onep (from)) + { + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + gfc_index_one_node, from); + to = fold_build2 (PLUS_EXPR, gfc_array_index_type, to, tmp); + from = gfc_index_one_node; + } + tmp = gfc_conv_descriptor_lbound (parm, gfc_rank_cst[dim]); + gfc_add_modify (&loop.pre, tmp, from); + + /* Set the new upper bound. */ + tmp = gfc_conv_descriptor_ubound (parm, gfc_rank_cst[dim]); + gfc_add_modify (&loop.pre, tmp, to); + + /* Multiply the stride by the section stride to get the + total stride. */ + stride = fold_build2 (MULT_EXPR, gfc_array_index_type, + stride, info->stride[dim]); + + if (se->direct_byref && info->ref && info->ref->u.ar.type != AR_FULL) + { + base = fold_build2 (MINUS_EXPR, TREE_TYPE (base), + base, stride); + } + else if (GFC_ARRAY_TYPE_P (TREE_TYPE (desc))) + { + tmp = gfc_conv_array_lbound (desc, n); + tmp = fold_build2 (MINUS_EXPR, TREE_TYPE (base), + tmp, loop.from[dim]); + tmp = fold_build2 (MULT_EXPR, TREE_TYPE (base), + tmp, gfc_conv_array_stride (desc, n)); + base = fold_build2 (PLUS_EXPR, TREE_TYPE (base), + tmp, base); + } + + /* Store the new stride. */ + tmp = gfc_conv_descriptor_stride (parm, gfc_rank_cst[dim]); + gfc_add_modify (&loop.pre, tmp, stride); + + dim++; + } + + if (se->data_not_needed) + gfc_conv_descriptor_data_set (&loop.pre, parm, gfc_index_zero_node); + else + /* Point the data pointer at the first element in the section. */ + gfc_get_dataptr_offset (&loop.pre, parm, desc, offset, + subref_array_target, expr); + + if ((se->direct_byref || GFC_ARRAY_TYPE_P (TREE_TYPE (desc))) + && !se->data_not_needed) + { + /* Set the offset. */ + tmp = gfc_conv_descriptor_offset (parm); + gfc_add_modify (&loop.pre, tmp, base); + } + else + { + /* Only the callee knows what the correct offset it, so just set + it to zero here. */ + tmp = gfc_conv_descriptor_offset (parm); + gfc_add_modify (&loop.pre, tmp, gfc_index_zero_node); + } + desc = parm; + } + + if (!se->direct_byref) + { + /* Get a pointer to the new descriptor. */ + if (se->want_pointer) + se->expr = build_fold_addr_expr (desc); + else + se->expr = desc; + } + + gfc_add_block_to_block (&se->pre, &loop.pre); + gfc_add_block_to_block (&se->post, &loop.post); + + /* Cleanup the scalarizer. */ + gfc_cleanup_loop (&loop); +} + + +/* Convert an array for passing as an actual parameter. */ +/* TODO: Optimize passing g77 arrays. */ + +void +gfc_conv_array_parameter (gfc_se * se, gfc_expr * expr, gfc_ss * ss, int g77, + const gfc_symbol *fsym, const char *proc_name) +{ + tree ptr; + tree desc; + tree tmp = NULL_TREE; + tree stmt; + tree parent = DECL_CONTEXT (current_function_decl); + bool full_array_var, this_array_result; + gfc_symbol *sym; + stmtblock_t block; + + full_array_var = (expr->expr_type == EXPR_VARIABLE + && expr->ref->type == REF_ARRAY + && expr->ref->u.ar.type == AR_FULL); + sym = full_array_var ? expr->symtree->n.sym : NULL; + + /* The symbol should have an array specification. */ + gcc_assert (!sym || sym->as); + + if (expr->expr_type == EXPR_ARRAY && expr->ts.type == BT_CHARACTER) + { + get_array_ctor_strlen (&se->pre, expr->value.constructor, &tmp); + expr->ts.cl->backend_decl = tmp; + se->string_length = tmp; + } + + /* Is this the result of the enclosing procedure? */ + this_array_result = (full_array_var && sym->attr.flavor == FL_PROCEDURE); + if (this_array_result + && (sym->backend_decl != current_function_decl) + && (sym->backend_decl != parent)) + this_array_result = false; + + /* Passing address of the array if it is not pointer or assumed-shape. */ + if (full_array_var && g77 && !this_array_result) + { + tmp = gfc_get_symbol_decl (sym); + + if (sym->ts.type == BT_CHARACTER) + se->string_length = sym->ts.cl->backend_decl; + if (!sym->attr.pointer && sym->as->type != AS_ASSUMED_SHAPE + && !sym->attr.allocatable) + { + /* Some variables are declared directly, others are declared as + pointers and allocated on the heap. */ + if (sym->attr.dummy || POINTER_TYPE_P (TREE_TYPE (tmp))) + se->expr = tmp; + else + se->expr = build_fold_addr_expr (tmp); + return; + } + if (sym->attr.allocatable) + { + if (sym->attr.dummy || sym->attr.result) + { + gfc_conv_expr_descriptor (se, expr, ss); + se->expr = gfc_conv_array_data (se->expr); + } + else + se->expr = gfc_conv_array_data (tmp); + return; + } + } + + if (this_array_result) + { + /* Result of the enclosing function. */ + gfc_conv_expr_descriptor (se, expr, ss); + se->expr = build_fold_addr_expr (se->expr); + + if (g77 && TREE_TYPE (TREE_TYPE (se->expr)) != NULL_TREE + && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (TREE_TYPE (se->expr)))) + se->expr = gfc_conv_array_data (build_fold_indirect_ref (se->expr)); + + return; + } + else + { + /* Every other type of array. */ + se->want_pointer = 1; + gfc_conv_expr_descriptor (se, expr, ss); + } + + /* Deallocate the allocatable components of structures that are + not variable. */ + if (expr->ts.type == BT_DERIVED + && expr->ts.derived->attr.alloc_comp + && expr->expr_type != EXPR_VARIABLE) + { + tmp = build_fold_indirect_ref (se->expr); + tmp = gfc_deallocate_alloc_comp (expr->ts.derived, tmp, expr->rank); + gfc_add_expr_to_block (&se->post, tmp); + } + + if (g77) + { + desc = se->expr; + /* Repack the array. */ + + if (gfc_option.warn_array_temp) + { + if (fsym) + gfc_warning ("Creating array temporary at %L for argument '%s'", + &expr->where, fsym->name); + else + gfc_warning ("Creating array temporary at %L", &expr->where); + } + + ptr = build_call_expr (gfor_fndecl_in_pack, 1, desc); + + if (fsym && fsym->attr.optional && sym && sym->attr.optional) + { + tmp = gfc_conv_expr_present (sym); + ptr = build3 (COND_EXPR, TREE_TYPE (se->expr), tmp, + fold_convert (TREE_TYPE (se->expr), ptr), + fold_convert (TREE_TYPE (se->expr), null_pointer_node)); + } + + ptr = gfc_evaluate_now (ptr, &se->pre); + + se->expr = ptr; + + if (gfc_option.flag_check_array_temporaries) + { + char * msg; + + if (fsym && proc_name) + asprintf (&msg, "An array temporary was created for argument " + "'%s' of procedure '%s'", fsym->name, proc_name); + else + asprintf (&msg, "An array temporary was created"); + + tmp = build_fold_indirect_ref (desc); + tmp = gfc_conv_array_data (tmp); + tmp = fold_build2 (NE_EXPR, boolean_type_node, + fold_convert (TREE_TYPE (tmp), ptr), tmp); + + if (fsym && fsym->attr.optional && sym && sym->attr.optional) + tmp = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, + gfc_conv_expr_present (sym), tmp); + + gfc_trans_runtime_check (false, true, tmp, &se->pre, + &expr->where, msg); + gfc_free (msg); + } + + gfc_start_block (&block); + + /* Copy the data back. */ + if (fsym == NULL || fsym->attr.intent != INTENT_IN) + { + tmp = build_call_expr (gfor_fndecl_in_unpack, 2, desc, ptr); + gfc_add_expr_to_block (&block, tmp); + } + + /* Free the temporary. */ + tmp = gfc_call_free (convert (pvoid_type_node, ptr)); + gfc_add_expr_to_block (&block, tmp); + + stmt = gfc_finish_block (&block); + + gfc_init_block (&block); + /* Only if it was repacked. This code needs to be executed before the + loop cleanup code. */ + tmp = build_fold_indirect_ref (desc); + tmp = gfc_conv_array_data (tmp); + tmp = fold_build2 (NE_EXPR, boolean_type_node, + fold_convert (TREE_TYPE (tmp), ptr), tmp); + + if (fsym && fsym->attr.optional && sym && sym->attr.optional) + tmp = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, + gfc_conv_expr_present (sym), tmp); + + tmp = build3_v (COND_EXPR, tmp, stmt, build_empty_stmt ()); + + gfc_add_expr_to_block (&block, tmp); + gfc_add_block_to_block (&block, &se->post); + + gfc_init_block (&se->post); + gfc_add_block_to_block (&se->post, &block); + } +} + + +/* Generate code to deallocate an array, if it is allocated. */ + +tree +gfc_trans_dealloc_allocated (tree descriptor) +{ + tree tmp; + tree var; + stmtblock_t block; + + gfc_start_block (&block); + + var = gfc_conv_descriptor_data_get (descriptor); + STRIP_NOPS (var); + + /* Call array_deallocate with an int * present in the second argument. + Although it is ignored here, it's presence ensures that arrays that + are already deallocated are ignored. */ + tmp = gfc_deallocate_with_status (var, NULL_TREE, true, NULL); + gfc_add_expr_to_block (&block, tmp); + + /* Zero the data pointer. */ + tmp = fold_build2 (MODIFY_EXPR, void_type_node, + var, build_int_cst (TREE_TYPE (var), 0)); + gfc_add_expr_to_block (&block, tmp); + + return gfc_finish_block (&block); +} + + +/* This helper function calculates the size in words of a full array. */ + +static tree +get_full_array_size (stmtblock_t *block, tree decl, int rank) +{ + tree idx; + tree nelems; + tree tmp; + idx = gfc_rank_cst[rank - 1]; + nelems = gfc_conv_descriptor_ubound (decl, idx); + tmp = gfc_conv_descriptor_lbound (decl, idx); + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, nelems, tmp); + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + tmp, gfc_index_one_node); + tmp = gfc_evaluate_now (tmp, block); + + nelems = gfc_conv_descriptor_stride (decl, idx); + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, nelems, tmp); + return gfc_evaluate_now (tmp, block); +} + + +/* Allocate dest to the same size as src, and copy src -> dest. */ + +tree +gfc_duplicate_allocatable(tree dest, tree src, tree type, int rank) +{ + tree tmp; + tree size; + tree nelems; + tree null_cond; + tree null_data; + stmtblock_t block; + + /* If the source is null, set the destination to null. */ + gfc_init_block (&block); + gfc_conv_descriptor_data_set (&block, dest, null_pointer_node); + null_data = gfc_finish_block (&block); + + gfc_init_block (&block); + + nelems = get_full_array_size (&block, src, rank); + size = fold_build2 (MULT_EXPR, gfc_array_index_type, nelems, + fold_convert (gfc_array_index_type, + TYPE_SIZE_UNIT (gfc_get_element_type (type)))); + + /* Allocate memory to the destination. */ + tmp = gfc_call_malloc (&block, TREE_TYPE (gfc_conv_descriptor_data_get (src)), + size); + gfc_conv_descriptor_data_set (&block, dest, tmp); + + /* We know the temporary and the value will be the same length, + so can use memcpy. */ + tmp = built_in_decls[BUILT_IN_MEMCPY]; + tmp = build_call_expr (tmp, 3, gfc_conv_descriptor_data_get (dest), + gfc_conv_descriptor_data_get (src), size); + gfc_add_expr_to_block (&block, tmp); + tmp = gfc_finish_block (&block); + + /* Null the destination if the source is null; otherwise do + the allocate and copy. */ + null_cond = gfc_conv_descriptor_data_get (src); + null_cond = convert (pvoid_type_node, null_cond); + null_cond = fold_build2 (NE_EXPR, boolean_type_node, + null_cond, null_pointer_node); + return build3_v (COND_EXPR, null_cond, tmp, null_data); +} + + +/* Recursively traverse an object of derived type, generating code to + deallocate, nullify or copy allocatable components. This is the work horse + function for the functions named in this enum. */ + +enum {DEALLOCATE_ALLOC_COMP = 1, NULLIFY_ALLOC_COMP, COPY_ALLOC_COMP}; + +static tree +structure_alloc_comps (gfc_symbol * der_type, tree decl, + tree dest, int rank, int purpose) +{ + gfc_component *c; + gfc_loopinfo loop; + stmtblock_t fnblock; + stmtblock_t loopbody; + tree tmp; + tree comp; + tree dcmp; + tree nelems; + tree index; + tree var; + tree cdecl; + tree ctype; + tree vref, dref; + tree null_cond = NULL_TREE; + + gfc_init_block (&fnblock); + + if (POINTER_TYPE_P (TREE_TYPE (decl))) + decl = build_fold_indirect_ref (decl); + + /* If this an array of derived types with allocatable components + build a loop and recursively call this function. */ + if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE + || GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl))) + { + tmp = gfc_conv_array_data (decl); + var = build_fold_indirect_ref (tmp); + + /* Get the number of elements - 1 and set the counter. */ + if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl))) + { + /* Use the descriptor for an allocatable array. Since this + is a full array reference, we only need the descriptor + information from dimension = rank. */ + tmp = get_full_array_size (&fnblock, decl, rank); + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + tmp, gfc_index_one_node); + + null_cond = gfc_conv_descriptor_data_get (decl); + null_cond = fold_build2 (NE_EXPR, boolean_type_node, null_cond, + build_int_cst (TREE_TYPE (null_cond), 0)); + } + else + { + /* Otherwise use the TYPE_DOMAIN information. */ + tmp = array_type_nelts (TREE_TYPE (decl)); + tmp = fold_convert (gfc_array_index_type, tmp); + } + + /* Remember that this is, in fact, the no. of elements - 1. */ + nelems = gfc_evaluate_now (tmp, &fnblock); + index = gfc_create_var (gfc_array_index_type, "S"); + + /* Build the body of the loop. */ + gfc_init_block (&loopbody); + + vref = gfc_build_array_ref (var, index, NULL); + + if (purpose == COPY_ALLOC_COMP) + { + if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (dest))) + { + tmp = gfc_duplicate_allocatable (dest, decl, TREE_TYPE(decl), rank); + gfc_add_expr_to_block (&fnblock, tmp); + } + tmp = build_fold_indirect_ref (gfc_conv_array_data (dest)); + dref = gfc_build_array_ref (tmp, index, NULL); + tmp = structure_alloc_comps (der_type, vref, dref, rank, purpose); + } + else + tmp = structure_alloc_comps (der_type, vref, NULL_TREE, rank, purpose); + + gfc_add_expr_to_block (&loopbody, tmp); + + /* Build the loop and return. */ + gfc_init_loopinfo (&loop); + loop.dimen = 1; + loop.from[0] = gfc_index_zero_node; + loop.loopvar[0] = index; + loop.to[0] = nelems; + gfc_trans_scalarizing_loops (&loop, &loopbody); + gfc_add_block_to_block (&fnblock, &loop.pre); + + tmp = gfc_finish_block (&fnblock); + if (null_cond != NULL_TREE) + tmp = build3_v (COND_EXPR, null_cond, tmp, build_empty_stmt ()); + + return tmp; + } + + /* Otherwise, act on the components or recursively call self to + act on a chain of components. */ + for (c = der_type->components; c; c = c->next) + { + bool cmp_has_alloc_comps = (c->ts.type == BT_DERIVED) + && c->ts.derived->attr.alloc_comp; + cdecl = c->backend_decl; + ctype = TREE_TYPE (cdecl); + + switch (purpose) + { + case DEALLOCATE_ALLOC_COMP: + /* Do not deallocate the components of ultimate pointer + components. */ + if (cmp_has_alloc_comps && !c->attr.pointer) + { + comp = fold_build3 (COMPONENT_REF, ctype, + decl, cdecl, NULL_TREE); + rank = c->as ? c->as->rank : 0; + tmp = structure_alloc_comps (c->ts.derived, comp, NULL_TREE, + rank, purpose); + gfc_add_expr_to_block (&fnblock, tmp); + } + + if (c->attr.allocatable) + { + comp = fold_build3 (COMPONENT_REF, ctype, + decl, cdecl, NULL_TREE); + tmp = gfc_trans_dealloc_allocated (comp); + gfc_add_expr_to_block (&fnblock, tmp); + } + break; + + case NULLIFY_ALLOC_COMP: + if (c->attr.pointer) + continue; + else if (c->attr.allocatable) + { + comp = fold_build3 (COMPONENT_REF, ctype, + decl, cdecl, NULL_TREE); + gfc_conv_descriptor_data_set (&fnblock, comp, null_pointer_node); + } + else if (cmp_has_alloc_comps) + { + comp = fold_build3 (COMPONENT_REF, ctype, + decl, cdecl, NULL_TREE); + rank = c->as ? c->as->rank : 0; + tmp = structure_alloc_comps (c->ts.derived, comp, NULL_TREE, + rank, purpose); + gfc_add_expr_to_block (&fnblock, tmp); + } + break; + + case COPY_ALLOC_COMP: + if (c->attr.pointer) + continue; + + /* We need source and destination components. */ + comp = fold_build3 (COMPONENT_REF, ctype, decl, cdecl, NULL_TREE); + dcmp = fold_build3 (COMPONENT_REF, ctype, dest, cdecl, NULL_TREE); + dcmp = fold_convert (TREE_TYPE (comp), dcmp); + + if (c->attr.allocatable && !cmp_has_alloc_comps) + { + tmp = gfc_duplicate_allocatable(dcmp, comp, ctype, c->as->rank); + gfc_add_expr_to_block (&fnblock, tmp); + } + + if (cmp_has_alloc_comps) + { + rank = c->as ? c->as->rank : 0; + tmp = fold_convert (TREE_TYPE (dcmp), comp); + gfc_add_modify (&fnblock, dcmp, tmp); + tmp = structure_alloc_comps (c->ts.derived, comp, dcmp, + rank, purpose); + gfc_add_expr_to_block (&fnblock, tmp); + } + break; + + default: + gcc_unreachable (); + break; + } + } + + return gfc_finish_block (&fnblock); +} + +/* Recursively traverse an object of derived type, generating code to + nullify allocatable components. */ + +tree +gfc_nullify_alloc_comp (gfc_symbol * der_type, tree decl, int rank) +{ + return structure_alloc_comps (der_type, decl, NULL_TREE, rank, + NULLIFY_ALLOC_COMP); +} + + +/* Recursively traverse an object of derived type, generating code to + deallocate allocatable components. */ + +tree +gfc_deallocate_alloc_comp (gfc_symbol * der_type, tree decl, int rank) +{ + return structure_alloc_comps (der_type, decl, NULL_TREE, rank, + DEALLOCATE_ALLOC_COMP); +} + + +/* Recursively traverse an object of derived type, generating code to + copy its allocatable components. */ + +tree +gfc_copy_alloc_comp (gfc_symbol * der_type, tree decl, tree dest, int rank) +{ + return structure_alloc_comps (der_type, decl, dest, rank, COPY_ALLOC_COMP); +} + + +/* NULLIFY an allocatable/pointer array on function entry, free it on exit. + Do likewise, recursively if necessary, with the allocatable components of + derived types. */ + +tree +gfc_trans_deferred_array (gfc_symbol * sym, tree body) +{ + tree type; + tree tmp; + tree descriptor; + stmtblock_t fnblock; + locus loc; + int rank; + bool sym_has_alloc_comp; + + sym_has_alloc_comp = (sym->ts.type == BT_DERIVED) + && sym->ts.derived->attr.alloc_comp; + + /* Make sure the frontend gets these right. */ + if (!(sym->attr.pointer || sym->attr.allocatable || sym_has_alloc_comp)) + fatal_error ("Possible frontend bug: Deferred array size without pointer, " + "allocatable attribute or derived type without allocatable " + "components."); + + gfc_init_block (&fnblock); + + gcc_assert (TREE_CODE (sym->backend_decl) == VAR_DECL + || TREE_CODE (sym->backend_decl) == PARM_DECL); + + if (sym->ts.type == BT_CHARACTER + && !INTEGER_CST_P (sym->ts.cl->backend_decl)) + { + gfc_conv_string_length (sym->ts.cl, NULL, &fnblock); + gfc_trans_vla_type_sizes (sym, &fnblock); + } + + /* Dummy and use associated variables don't need anything special. */ + if (sym->attr.dummy || sym->attr.use_assoc) + { + gfc_add_expr_to_block (&fnblock, body); + + return gfc_finish_block (&fnblock); + } + + gfc_get_backend_locus (&loc); + gfc_set_backend_locus (&sym->declared_at); + descriptor = sym->backend_decl; + + /* Although static, derived types with default initializers and + allocatable components must not be nulled wholesale; instead they + are treated component by component. */ + if (TREE_STATIC (descriptor) && !sym_has_alloc_comp) + { + /* SAVEd variables are not freed on exit. */ + gfc_trans_static_array_pointer (sym); + return body; + } + + /* Get the descriptor type. */ + type = TREE_TYPE (sym->backend_decl); + + if (sym_has_alloc_comp && !(sym->attr.pointer || sym->attr.allocatable)) + { + if (!sym->attr.save) + { + rank = sym->as ? sym->as->rank : 0; + tmp = gfc_nullify_alloc_comp (sym->ts.derived, descriptor, rank); + gfc_add_expr_to_block (&fnblock, tmp); + if (sym->value) + { + tmp = gfc_init_default_dt (sym, NULL); + gfc_add_expr_to_block (&fnblock, tmp); + } + } + } + else if (!GFC_DESCRIPTOR_TYPE_P (type)) + { + /* If the backend_decl is not a descriptor, we must have a pointer + to one. */ + descriptor = build_fold_indirect_ref (sym->backend_decl); + type = TREE_TYPE (descriptor); + } + + /* NULLIFY the data pointer. */ + if (GFC_DESCRIPTOR_TYPE_P (type) && !sym->attr.save) + gfc_conv_descriptor_data_set (&fnblock, descriptor, null_pointer_node); + + gfc_add_expr_to_block (&fnblock, body); + + gfc_set_backend_locus (&loc); + + /* Allocatable arrays need to be freed when they go out of scope. + The allocatable components of pointers must not be touched. */ + if (sym_has_alloc_comp && !(sym->attr.function || sym->attr.result) + && !sym->attr.pointer && !sym->attr.save) + { + int rank; + rank = sym->as ? sym->as->rank : 0; + tmp = gfc_deallocate_alloc_comp (sym->ts.derived, descriptor, rank); + gfc_add_expr_to_block (&fnblock, tmp); + } + + if (sym->attr.allocatable && !sym->attr.save && !sym->attr.result) + { + tmp = gfc_trans_dealloc_allocated (sym->backend_decl); + gfc_add_expr_to_block (&fnblock, tmp); + } + + return gfc_finish_block (&fnblock); +} + +/************ Expression Walking Functions ******************/ + +/* Walk a variable reference. + + Possible extension - multiple component subscripts. + x(:,:) = foo%a(:)%b(:) + Transforms to + forall (i=..., j=...) + x(i,j) = foo%a(j)%b(i) + end forall + This adds a fair amount of complexity because you need to deal with more + than one ref. Maybe handle in a similar manner to vector subscripts. + Maybe not worth the effort. */ + + +static gfc_ss * +gfc_walk_variable_expr (gfc_ss * ss, gfc_expr * expr) +{ + gfc_ref *ref; + gfc_array_ref *ar; + gfc_ss *newss; + gfc_ss *head; + int n; + + for (ref = expr->ref; ref; ref = ref->next) + if (ref->type == REF_ARRAY && ref->u.ar.type != AR_ELEMENT) + break; + + for (; ref; ref = ref->next) + { + if (ref->type == REF_SUBSTRING) + { + newss = gfc_get_ss (); + newss->type = GFC_SS_SCALAR; + newss->expr = ref->u.ss.start; + newss->next = ss; + ss = newss; + + newss = gfc_get_ss (); + newss->type = GFC_SS_SCALAR; + newss->expr = ref->u.ss.end; + newss->next = ss; + ss = newss; + } + + /* We're only interested in array sections from now on. */ + if (ref->type != REF_ARRAY) + continue; + + ar = &ref->u.ar; + switch (ar->type) + { + case AR_ELEMENT: + for (n = 0; n < ar->dimen; n++) + { + newss = gfc_get_ss (); + newss->type = GFC_SS_SCALAR; + newss->expr = ar->start[n]; + newss->next = ss; + ss = newss; + } + break; + + case AR_FULL: + newss = gfc_get_ss (); + newss->type = GFC_SS_SECTION; + newss->expr = expr; + newss->next = ss; + newss->data.info.dimen = ar->as->rank; + newss->data.info.ref = ref; + + /* Make sure array is the same as array(:,:), this way + we don't need to special case all the time. */ + ar->dimen = ar->as->rank; + for (n = 0; n < ar->dimen; n++) + { + newss->data.info.dim[n] = n; + ar->dimen_type[n] = DIMEN_RANGE; + + gcc_assert (ar->start[n] == NULL); + gcc_assert (ar->end[n] == NULL); + gcc_assert (ar->stride[n] == NULL); + } + ss = newss; + break; + + case AR_SECTION: + newss = gfc_get_ss (); + newss->type = GFC_SS_SECTION; + newss->expr = expr; + newss->next = ss; + newss->data.info.dimen = 0; + newss->data.info.ref = ref; + + head = newss; + + /* We add SS chains for all the subscripts in the section. */ + for (n = 0; n < ar->dimen; n++) + { + gfc_ss *indexss; + + switch (ar->dimen_type[n]) + { + case DIMEN_ELEMENT: + /* Add SS for elemental (scalar) subscripts. */ + gcc_assert (ar->start[n]); + indexss = gfc_get_ss (); + indexss->type = GFC_SS_SCALAR; + indexss->expr = ar->start[n]; + indexss->next = gfc_ss_terminator; + indexss->loop_chain = gfc_ss_terminator; + newss->data.info.subscript[n] = indexss; + break; + + case DIMEN_RANGE: + /* We don't add anything for sections, just remember this + dimension for later. */ + newss->data.info.dim[newss->data.info.dimen] = n; + newss->data.info.dimen++; + break; + + case DIMEN_VECTOR: + /* Create a GFC_SS_VECTOR index in which we can store + the vector's descriptor. */ + indexss = gfc_get_ss (); + indexss->type = GFC_SS_VECTOR; + indexss->expr = ar->start[n]; + indexss->next = gfc_ss_terminator; + indexss->loop_chain = gfc_ss_terminator; + newss->data.info.subscript[n] = indexss; + newss->data.info.dim[newss->data.info.dimen] = n; + newss->data.info.dimen++; + break; + + default: + /* We should know what sort of section it is by now. */ + gcc_unreachable (); + } + } + /* We should have at least one non-elemental dimension. */ + gcc_assert (newss->data.info.dimen > 0); + ss = newss; + break; + + default: + /* We should know what sort of section it is by now. */ + gcc_unreachable (); + } + + } + return ss; +} + + +/* Walk an expression operator. If only one operand of a binary expression is + scalar, we must also add the scalar term to the SS chain. */ + +static gfc_ss * +gfc_walk_op_expr (gfc_ss * ss, gfc_expr * expr) +{ + gfc_ss *head; + gfc_ss *head2; + gfc_ss *newss; + + head = gfc_walk_subexpr (ss, expr->value.op.op1); + if (expr->value.op.op2 == NULL) + head2 = head; + else + head2 = gfc_walk_subexpr (head, expr->value.op.op2); + + /* All operands are scalar. Pass back and let the caller deal with it. */ + if (head2 == ss) + return head2; + + /* All operands require scalarization. */ + if (head != ss && (expr->value.op.op2 == NULL || head2 != head)) + return head2; + + /* One of the operands needs scalarization, the other is scalar. + Create a gfc_ss for the scalar expression. */ + newss = gfc_get_ss (); + newss->type = GFC_SS_SCALAR; + if (head == ss) + { + /* First operand is scalar. We build the chain in reverse order, so + add the scalar SS after the second operand. */ + head = head2; + while (head && head->next != ss) + head = head->next; + /* Check we haven't somehow broken the chain. */ + gcc_assert (head); + newss->next = ss; + head->next = newss; + newss->expr = expr->value.op.op1; + } + else /* head2 == head */ + { + gcc_assert (head2 == head); + /* Second operand is scalar. */ + newss->next = head2; + head2 = newss; + newss->expr = expr->value.op.op2; + } + + return head2; +} + + +/* Reverse a SS chain. */ + +gfc_ss * +gfc_reverse_ss (gfc_ss * ss) +{ + gfc_ss *next; + gfc_ss *head; + + gcc_assert (ss != NULL); + + head = gfc_ss_terminator; + while (ss != gfc_ss_terminator) + { + next = ss->next; + /* Check we didn't somehow break the chain. */ + gcc_assert (next != NULL); + ss->next = head; + head = ss; + ss = next; + } + + return (head); +} + + +/* Walk the arguments of an elemental function. */ + +gfc_ss * +gfc_walk_elemental_function_args (gfc_ss * ss, gfc_actual_arglist *arg, + gfc_ss_type type) +{ + int scalar; + gfc_ss *head; + gfc_ss *tail; + gfc_ss *newss; + + head = gfc_ss_terminator; + tail = NULL; + scalar = 1; + for (; arg; arg = arg->next) + { + if (!arg->expr) + continue; + + newss = gfc_walk_subexpr (head, arg->expr); + if (newss == head) + { + /* Scalar argument. */ + newss = gfc_get_ss (); + newss->type = type; + newss->expr = arg->expr; + newss->next = head; + } + else + scalar = 0; + + head = newss; + if (!tail) + { + tail = head; + while (tail->next != gfc_ss_terminator) + tail = tail->next; + } + } + + if (scalar) + { + /* If all the arguments are scalar we don't need the argument SS. */ + gfc_free_ss_chain (head); + /* Pass it back. */ + return ss; + } + + /* Add it onto the existing chain. */ + tail->next = ss; + return head; +} + + +/* Walk a function call. Scalar functions are passed back, and taken out of + scalarization loops. For elemental functions we walk their arguments. + The result of functions returning arrays is stored in a temporary outside + the loop, so that the function is only called once. Hence we do not need + to walk their arguments. */ + +static gfc_ss * +gfc_walk_function_expr (gfc_ss * ss, gfc_expr * expr) +{ + gfc_ss *newss; + gfc_intrinsic_sym *isym; + gfc_symbol *sym; + + isym = expr->value.function.isym; + + /* Handle intrinsic functions separately. */ + if (isym) + return gfc_walk_intrinsic_function (ss, expr, isym); + + sym = expr->value.function.esym; + if (!sym) + sym = expr->symtree->n.sym; + + /* A function that returns arrays. */ + if (gfc_return_by_reference (sym) && sym->result->attr.dimension) + { + newss = gfc_get_ss (); + newss->type = GFC_SS_FUNCTION; + newss->expr = expr; + newss->next = ss; + newss->data.info.dimen = expr->rank; + return newss; + } + + /* Walk the parameters of an elemental function. For now we always pass + by reference. */ + if (sym->attr.elemental) + return gfc_walk_elemental_function_args (ss, expr->value.function.actual, + GFC_SS_REFERENCE); + + /* Scalar functions are OK as these are evaluated outside the scalarization + loop. Pass back and let the caller deal with it. */ + return ss; +} + + +/* An array temporary is constructed for array constructors. */ + +static gfc_ss * +gfc_walk_array_constructor (gfc_ss * ss, gfc_expr * expr) +{ + gfc_ss *newss; + int n; + + newss = gfc_get_ss (); + newss->type = GFC_SS_CONSTRUCTOR; + newss->expr = expr; + newss->next = ss; + newss->data.info.dimen = expr->rank; + for (n = 0; n < expr->rank; n++) + newss->data.info.dim[n] = n; + + return newss; +} + + +/* Walk an expression. Add walked expressions to the head of the SS chain. + A wholly scalar expression will not be added. */ + +static gfc_ss * +gfc_walk_subexpr (gfc_ss * ss, gfc_expr * expr) +{ + gfc_ss *head; + + switch (expr->expr_type) + { + case EXPR_VARIABLE: + head = gfc_walk_variable_expr (ss, expr); + return head; + + case EXPR_OP: + head = gfc_walk_op_expr (ss, expr); + return head; + + case EXPR_FUNCTION: + head = gfc_walk_function_expr (ss, expr); + return head; + + case EXPR_CONSTANT: + case EXPR_NULL: + case EXPR_STRUCTURE: + /* Pass back and let the caller deal with it. */ + break; + + case EXPR_ARRAY: + head = gfc_walk_array_constructor (ss, expr); + return head; + + case EXPR_SUBSTRING: + /* Pass back and let the caller deal with it. */ + break; + + default: + internal_error ("bad expression type during walk (%d)", + expr->expr_type); + } + return ss; +} + + +/* Entry point for expression walking. + A return value equal to the passed chain means this is + a scalar expression. It is up to the caller to take whatever action is + necessary to translate these. */ + +gfc_ss * +gfc_walk_expr (gfc_expr * expr) +{ + gfc_ss *res; + + res = gfc_walk_subexpr (gfc_ss_terminator, expr); + return gfc_reverse_ss (res); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-array.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-array.h new file mode 100644 index 0000000000..49818d4fe6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-array.h @@ -0,0 +1,140 @@ +/* Header for array handling functions + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* Generate code to free an array. */ +tree gfc_array_deallocate (tree, tree, gfc_expr*); + +/* Generate code to initialize an allocate an array. Statements are added to + se, which should contain an expression for the array descriptor. */ +bool gfc_array_allocate (gfc_se *, gfc_expr *, tree); + +/* Allow the bounds of a loop to be set from a callee's array spec. */ +void gfc_set_loop_bounds_from_array_spec (gfc_interface_mapping *, + gfc_se *, gfc_array_spec *); + +/* Generate code to create a temporary array. */ +tree gfc_trans_create_temp_array (stmtblock_t *, stmtblock_t *, gfc_loopinfo *, + gfc_ss_info *, tree, tree, bool, bool, bool, + locus *); + +/* Generate function entry code for allocation of compiler allocated array + variables. */ +tree gfc_trans_auto_array_allocation (tree, gfc_symbol *, tree); +/* Generate entry and exit code for dummy array parameters. */ +tree gfc_trans_dummy_array_bias (gfc_symbol *, tree, tree); +/* Generate entry and exit code for g77 calling convention arrays. */ +tree gfc_trans_g77_array (gfc_symbol *, tree); +/* Generate code to deallocate an array, if it is allocated. */ +tree gfc_trans_dealloc_allocated (tree); + +tree gfc_duplicate_allocatable(tree dest, tree src, tree type, int rank); + +tree gfc_nullify_alloc_comp (gfc_symbol *, tree, int); + +tree gfc_deallocate_alloc_comp (gfc_symbol *, tree, int); + +tree gfc_copy_alloc_comp (gfc_symbol *, tree, tree, int); + +/* Add initialization for deferred arrays. */ +tree gfc_trans_deferred_array (gfc_symbol *, tree); +/* Generate an initializer for a static pointer or allocatable array. */ +void gfc_trans_static_array_pointer (gfc_symbol *); + +/* Generate scalarization information for an expression. */ +gfc_ss *gfc_walk_expr (gfc_expr *); +/* Walk the arguments of an elemental function. */ +gfc_ss *gfc_walk_elemental_function_args (gfc_ss *, gfc_actual_arglist *, + gfc_ss_type); +/* Walk an intrinsic function. */ +gfc_ss *gfc_walk_intrinsic_function (gfc_ss *, gfc_expr *, + gfc_intrinsic_sym *); +/* Reverse the order of an SS chain. */ +gfc_ss *gfc_reverse_ss (gfc_ss *); + +/* Free the SS associated with a loop. */ +void gfc_cleanup_loop (gfc_loopinfo *); +/* Associate a SS chain with a loop. */ +void gfc_add_ss_to_loop (gfc_loopinfo *, gfc_ss *); +/* Mark a SS chain as used in this loop. */ +void gfc_mark_ss_chain_used (gfc_ss *, unsigned); + +/* Calculates the lower bound and stride of array sections. */ +void gfc_conv_ss_startstride (gfc_loopinfo *); + +void gfc_init_loopinfo (gfc_loopinfo *); +void gfc_copy_loopinfo_to_se (gfc_se *, gfc_loopinfo *); + +/* Marks the start of a scalarized expression, and declares loop variables. */ +void gfc_start_scalarized_body (gfc_loopinfo *, stmtblock_t *); +/* Generates the actual loops for a scalarized expression. */ +void gfc_trans_scalarizing_loops (gfc_loopinfo *, stmtblock_t *); +/* Mark the end of the main loop body and the start of the copying loop. */ +void gfc_trans_scalarized_loop_boundary (gfc_loopinfo *, stmtblock_t *); +/* Initialize the scalarization loop parameters. */ +void gfc_conv_loop_setup (gfc_loopinfo *, locus *); +/* Resolve array assignment dependencies. */ +void gfc_conv_resolve_dependencies (gfc_loopinfo *, gfc_ss *, gfc_ss *); +/* Build a null array descriptor constructor. */ +tree gfc_build_null_descriptor (tree); + +/* Get a single array element. */ +void gfc_conv_array_ref (gfc_se *, gfc_array_ref *, gfc_symbol *, locus *); +/* Translate a reference to a temporary array. */ +void gfc_conv_tmp_array_ref (gfc_se * se); +/* Translate a reference to an array temporary. */ +void gfc_conv_tmp_ref (gfc_se *); + +/* Evaluate an array expression. */ +void gfc_conv_expr_descriptor (gfc_se *, gfc_expr *, gfc_ss *); +/* Convert an array for passing as an actual function parameter. */ +void gfc_conv_array_parameter (gfc_se *, gfc_expr *, gfc_ss *, int, + const gfc_symbol *, const char *); +/* Evaluate and transpose a matrix expression. */ +void gfc_conv_array_transpose (gfc_se *, gfc_expr *); + +/* These work with both descriptors and descriptorless arrays. */ +tree gfc_conv_array_data (tree); +tree gfc_conv_array_offset (tree); +/* Return either an INT_CST or an expression for that part of the descriptor. */ +tree gfc_conv_array_stride (tree, int); +tree gfc_conv_array_lbound (tree, int); +tree gfc_conv_array_ubound (tree, int); + +/* Build expressions for accessing components of an array descriptor. */ +tree gfc_conv_descriptor_data_get (tree); +void gfc_conv_descriptor_data_set (stmtblock_t *, tree, tree); +tree gfc_conv_descriptor_data_addr (tree); +tree gfc_conv_descriptor_offset (tree); +tree gfc_conv_descriptor_dtype (tree); +tree gfc_conv_descriptor_stride (tree, tree); +tree gfc_conv_descriptor_lbound (tree, tree); +tree gfc_conv_descriptor_ubound (tree, tree); + +/* Add pre-loop scalarization code for intrinsic functions which require + special handling. */ +void gfc_add_intrinsic_ss_code (gfc_loopinfo *, gfc_ss *); + +/* Functions for constant array constructor processing. */ +unsigned HOST_WIDE_INT gfc_constant_array_constructor_p (gfc_constructor *); +tree gfc_build_constant_array_constructor (gfc_expr *, tree); + +/* Copy a string from src to dest. */ +void gfc_trans_string_copy (stmtblock_t *, tree, tree, int, tree, tree, int); diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-common.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-common.c new file mode 100644 index 0000000000..92edd208da --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-common.c @@ -0,0 +1,1261 @@ +/* Common block and equivalence list handling + Copyright (C) 2000, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Canqun Yang + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* The core algorithm is based on Andy Vaught's g95 tree. Also the + way to build UNION_TYPE is borrowed from Richard Henderson. + + Transform common blocks. An integral part of this is processing + equivalence variables. Equivalenced variables that are not in a + common block end up in a private block of their own. + + Each common block or local equivalence list is declared as a union. + Variables within the block are represented as a field within the + block with the proper offset. + + So if two variables are equivalenced, they just point to a common + area in memory. + + Mathematically, laying out an equivalence block is equivalent to + solving a linear system of equations. The matrix is usually a + sparse matrix in which each row contains all zero elements except + for a +1 and a -1, a sort of a generalized Vandermonde matrix. The + matrix is usually block diagonal. The system can be + overdetermined, underdetermined or have a unique solution. If the + system is inconsistent, the program is not standard conforming. + The solution vector is integral, since all of the pivots are +1 or -1. + + How we lay out an equivalence block is a little less complicated. + In an equivalence list with n elements, there are n-1 conditions to + be satisfied. The conditions partition the variables into what we + will call segments. If A and B are equivalenced then A and B are + in the same segment. If B and C are equivalenced as well, then A, + B and C are in a segment and so on. Each segment is a block of + memory that has one or more variables equivalenced in some way. A + common block is made up of a series of segments that are joined one + after the other. In the linear system, a segment is a block + diagonal. + + To lay out a segment we first start with some variable and + determine its length. The first variable is assumed to start at + offset one and extends to however long it is. We then traverse the + list of equivalences to find an unused condition that involves at + least one of the variables currently in the segment. + + Each equivalence condition amounts to the condition B+b=C+c where B + and C are the offsets of the B and C variables, and b and c are + constants which are nonzero for array elements, substrings or + structure components. So for + + EQUIVALENCE(B(2), C(3)) + we have + B + 2*size of B's elements = C + 3*size of C's elements. + + If B and C are known we check to see if the condition already + holds. If B is known we can solve for C. Since we know the length + of C, we can see if the minimum and maximum extents of the segment + are affected. Eventually, we make a full pass through the + equivalence list without finding any new conditions and the segment + is fully specified. + + At this point, the segment is added to the current common block. + Since we know the minimum extent of the segment, everything in the + segment is translated to its position in the common block. The + usual case here is that there are no equivalence statements and the + common block is series of segments with one variable each, which is + a diagonal matrix in the matrix formulation. + + Each segment is described by a chain of segment_info structures. Each + segment_info structure describes the extents of a single variable within + the segment. This list is maintained in the order the elements are + positioned withing the segment. If two elements have the same starting + offset the smaller will come first. If they also have the same size their + ordering is undefined. + + Once all common blocks have been created, the list of equivalences + is examined for still-unused equivalence conditions. We create a + block for each merged equivalence list. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "target.h" +#include "tree.h" +#include "toplev.h" +#include "tm.h" +#include "rtl.h" +#include "gfortran.h" +#include "trans.h" +#include "trans-types.h" +#include "trans-const.h" +#include "target-memory.h" + + +/* Holds a single variable in an equivalence set. */ +typedef struct segment_info +{ + gfc_symbol *sym; + HOST_WIDE_INT offset; + HOST_WIDE_INT length; + /* This will contain the field type until the field is created. */ + tree field; + struct segment_info *next; +} segment_info; + +static segment_info * current_segment; +static gfc_namespace *gfc_common_ns = NULL; + + +/* Make a segment_info based on a symbol. */ + +static segment_info * +get_segment_info (gfc_symbol * sym, HOST_WIDE_INT offset) +{ + segment_info *s; + + /* Make sure we've got the character length. */ + if (sym->ts.type == BT_CHARACTER) + gfc_conv_const_charlen (sym->ts.cl); + + /* Create the segment_info and fill it in. */ + s = (segment_info *) gfc_getmem (sizeof (segment_info)); + s->sym = sym; + /* We will use this type when building the segment aggregate type. */ + s->field = gfc_sym_type (sym); + s->length = int_size_in_bytes (s->field); + s->offset = offset; + + return s; +} + + +/* Add a copy of a segment list to the namespace. This is specifically for + equivalence segments, so that dependency checking can be done on + equivalence group members. */ + +static void +copy_equiv_list_to_ns (segment_info *c) +{ + segment_info *f; + gfc_equiv_info *s; + gfc_equiv_list *l; + + l = (gfc_equiv_list *) gfc_getmem (sizeof (gfc_equiv_list)); + + l->next = c->sym->ns->equiv_lists; + c->sym->ns->equiv_lists = l; + + for (f = c; f; f = f->next) + { + s = (gfc_equiv_info *) gfc_getmem (sizeof (gfc_equiv_info)); + s->next = l->equiv; + l->equiv = s; + s->sym = f->sym; + s->offset = f->offset; + s->length = f->length; + } +} + + +/* Add combine segment V and segment LIST. */ + +static segment_info * +add_segments (segment_info *list, segment_info *v) +{ + segment_info *s; + segment_info *p; + segment_info *next; + + p = NULL; + s = list; + + while (v) + { + /* Find the location of the new element. */ + while (s) + { + if (v->offset < s->offset) + break; + if (v->offset == s->offset + && v->length <= s->length) + break; + + p = s; + s = s->next; + } + + /* Insert the new element in between p and s. */ + next = v->next; + v->next = s; + if (p == NULL) + list = v; + else + p->next = v; + + p = v; + v = next; + } + + return list; +} + + +/* Construct mangled common block name from symbol name. */ + +/* We need the bind(c) flag to tell us how/if we should mangle the symbol + name. There are few calls to this function, so few places that this + would need to be added. At the moment, there is only one call, in + build_common_decl(). We can't attempt to look up the common block + because we may be building it for the first time and therefore, it won't + be in the common_root. We also need the binding label, if it's bind(c). + Therefore, send in the pointer to the common block, so whatever info we + have so far can be used. All of the necessary info should be available + in the gfc_common_head by now, so it should be accurate to test the + isBindC flag and use the binding label given if it is bind(c). + + We may NOT know yet if it's bind(c) or not, but we can try at least. + Will have to figure out what to do later if it's labeled bind(c) + after this is called. */ + +static tree +gfc_sym_mangled_common_id (gfc_common_head *com) +{ + int has_underscore; + char mangled_name[GFC_MAX_MANGLED_SYMBOL_LEN + 1]; + char name[GFC_MAX_SYMBOL_LEN + 1]; + + /* Get the name out of the common block pointer. */ + strcpy (name, com->name); + + /* If we're suppose to do a bind(c). */ + if (com->is_bind_c == 1 && com->binding_label[0] != '\0') + return get_identifier (com->binding_label); + + if (strcmp (name, BLANK_COMMON_NAME) == 0) + return get_identifier (name); + + if (gfc_option.flag_underscoring) + { + has_underscore = strchr (name, '_') != 0; + if (gfc_option.flag_second_underscore && has_underscore) + snprintf (mangled_name, sizeof mangled_name, "%s__", name); + else + snprintf (mangled_name, sizeof mangled_name, "%s_", name); + + return get_identifier (mangled_name); + } + else + return get_identifier (name); +} + + +/* Build a field declaration for a common variable or a local equivalence + object. */ + +static void +build_field (segment_info *h, tree union_type, record_layout_info rli) +{ + tree field; + tree name; + HOST_WIDE_INT offset = h->offset; + unsigned HOST_WIDE_INT desired_align, known_align; + + name = get_identifier (h->sym->name); + field = build_decl (FIELD_DECL, name, h->field); + gfc_set_decl_location (field, &h->sym->declared_at); + known_align = (offset & -offset) * BITS_PER_UNIT; + if (known_align == 0 || known_align > BIGGEST_ALIGNMENT) + known_align = BIGGEST_ALIGNMENT; + + desired_align = update_alignment_for_field (rli, field, known_align); + if (desired_align > known_align) + DECL_PACKED (field) = 1; + + DECL_FIELD_CONTEXT (field) = union_type; + DECL_FIELD_OFFSET (field) = size_int (offset); + DECL_FIELD_BIT_OFFSET (field) = bitsize_zero_node; + SET_DECL_OFFSET_ALIGN (field, known_align); + + rli->offset = size_binop (MAX_EXPR, rli->offset, + size_binop (PLUS_EXPR, + DECL_FIELD_OFFSET (field), + DECL_SIZE_UNIT (field))); + /* If this field is assigned to a label, we create another two variables. + One will hold the address of target label or format label. The other will + hold the length of format label string. */ + if (h->sym->attr.assign) + { + tree len; + tree addr; + + gfc_allocate_lang_decl (field); + GFC_DECL_ASSIGN (field) = 1; + len = gfc_create_var_np (gfc_charlen_type_node,h->sym->name); + addr = gfc_create_var_np (pvoid_type_node, h->sym->name); + TREE_STATIC (len) = 1; + TREE_STATIC (addr) = 1; + DECL_INITIAL (len) = build_int_cst (NULL_TREE, -2); + gfc_set_decl_location (len, &h->sym->declared_at); + gfc_set_decl_location (addr, &h->sym->declared_at); + GFC_DECL_STRING_LEN (field) = pushdecl_top_level (len); + GFC_DECL_ASSIGN_ADDR (field) = pushdecl_top_level (addr); + } + + /* If this field is volatile, mark it. */ + if (h->sym->attr.volatile_) + { + tree new_type; + TREE_THIS_VOLATILE (field) = 1; + new_type = build_qualified_type (TREE_TYPE (field), TYPE_QUAL_VOLATILE); + TREE_TYPE (field) = new_type; + } + + h->field = field; +} + + +/* Get storage for local equivalence. */ + +static tree +build_equiv_decl (tree union_type, bool is_init, bool is_saved) +{ + tree decl; + char name[15]; + static int serial = 0; + + if (is_init) + { + decl = gfc_create_var (union_type, "equiv"); + TREE_STATIC (decl) = 1; + GFC_DECL_COMMON_OR_EQUIV (decl) = 1; + return decl; + } + + snprintf (name, sizeof (name), "equiv.%d", serial++); + decl = build_decl (VAR_DECL, get_identifier (name), union_type); + DECL_ARTIFICIAL (decl) = 1; + DECL_IGNORED_P (decl) = 1; + + if (!gfc_can_put_var_on_stack (DECL_SIZE_UNIT (decl)) + || is_saved) + TREE_STATIC (decl) = 1; + + TREE_ADDRESSABLE (decl) = 1; + TREE_USED (decl) = 1; + GFC_DECL_COMMON_OR_EQUIV (decl) = 1; + + /* The source location has been lost, and doesn't really matter. + We need to set it to something though. */ + gfc_set_decl_location (decl, &gfc_current_locus); + + gfc_add_decl_to_function (decl); + + return decl; +} + + +/* Get storage for common block. */ + +static tree +build_common_decl (gfc_common_head *com, tree union_type, bool is_init) +{ + gfc_symbol *common_sym; + tree decl; + + /* Create a namespace to store symbols for common blocks. */ + if (gfc_common_ns == NULL) + gfc_common_ns = gfc_get_namespace (NULL, 0); + + gfc_get_symbol (com->name, gfc_common_ns, &common_sym); + decl = common_sym->backend_decl; + + /* Update the size of this common block as needed. */ + if (decl != NULL_TREE) + { + tree size = TYPE_SIZE_UNIT (union_type); + if (tree_int_cst_lt (DECL_SIZE_UNIT (decl), size)) + { + /* Named common blocks of the same name shall be of the same size + in all scoping units of a program in which they appear, but + blank common blocks may be of different sizes. */ + if (strcmp (com->name, BLANK_COMMON_NAME)) + gfc_warning ("Named COMMON block '%s' at %L shall be of the " + "same size", com->name, &com->where); + DECL_SIZE_UNIT (decl) = size; + TREE_TYPE (decl) = union_type; + } + } + + /* If this common block has been declared in a previous program unit, + and either it is already initialized or there is no new initialization + for it, just return. */ + if ((decl != NULL_TREE) && (!is_init || DECL_INITIAL (decl))) + return decl; + + /* If there is no backend_decl for the common block, build it. */ + if (decl == NULL_TREE) + { + decl = build_decl (VAR_DECL, get_identifier (com->name), union_type); + SET_DECL_ASSEMBLER_NAME (decl, gfc_sym_mangled_common_id (com)); + TREE_PUBLIC (decl) = 1; + TREE_STATIC (decl) = 1; + DECL_IGNORED_P (decl) = 1; + if (!com->is_bind_c) + DECL_ALIGN (decl) = BIGGEST_ALIGNMENT; + else + { + /* Do not set the alignment for bind(c) common blocks to + BIGGEST_ALIGNMENT because that won't match what C does. Also, + for common blocks with one element, the alignment must be + that of the field within the common block in order to match + what C will do. */ + tree field = NULL_TREE; + field = TYPE_FIELDS (TREE_TYPE (decl)); + if (TREE_CHAIN (field) == NULL_TREE) + DECL_ALIGN (decl) = TYPE_ALIGN (TREE_TYPE (field)); + } + DECL_USER_ALIGN (decl) = 0; + GFC_DECL_COMMON_OR_EQUIV (decl) = 1; + + gfc_set_decl_location (decl, &com->where); + + if (com->threadprivate) + DECL_TLS_MODEL (decl) = decl_default_tls_model (decl); + + /* Place the back end declaration for this common block in + GLOBAL_BINDING_LEVEL. */ + common_sym->backend_decl = pushdecl_top_level (decl); + } + + /* Has no initial values. */ + if (!is_init) + { + DECL_INITIAL (decl) = NULL_TREE; + DECL_COMMON (decl) = 1; + DECL_DEFER_OUTPUT (decl) = 1; + } + else + { + DECL_INITIAL (decl) = error_mark_node; + DECL_COMMON (decl) = 0; + DECL_DEFER_OUTPUT (decl) = 0; + } + return decl; +} + + +/* Return a field that is the size of the union, if an equivalence has + overlapping initializers. Merge the initializers into a single + initializer for this new field, then free the old ones. */ + +static tree +get_init_field (segment_info *head, tree union_type, tree *field_init, + record_layout_info rli) +{ + segment_info *s; + HOST_WIDE_INT length = 0; + HOST_WIDE_INT offset = 0; + unsigned HOST_WIDE_INT known_align, desired_align; + bool overlap = false; + tree tmp, field; + tree init; + unsigned char *data, *chk; + VEC(constructor_elt,gc) *v = NULL; + + tree type = unsigned_char_type_node; + int i; + + /* Obtain the size of the union and check if there are any overlapping + initializers. */ + for (s = head; s; s = s->next) + { + HOST_WIDE_INT slen = s->offset + s->length; + if (s->sym->value) + { + if (s->offset < offset) + overlap = true; + offset = slen; + } + length = length < slen ? slen : length; + } + + if (!overlap) + return NULL_TREE; + + /* Now absorb all the initializer data into a single vector, + whilst checking for overlapping, unequal values. */ + data = (unsigned char*)gfc_getmem ((size_t)length); + chk = (unsigned char*)gfc_getmem ((size_t)length); + + /* TODO - change this when default initialization is implemented. */ + memset (data, '\0', (size_t)length); + memset (chk, '\0', (size_t)length); + for (s = head; s; s = s->next) + if (s->sym->value) + gfc_merge_initializers (s->sym->ts, s->sym->value, + &data[s->offset], + &chk[s->offset], + (size_t)s->length); + + for (i = 0; i < length; i++) + CONSTRUCTOR_APPEND_ELT (v, NULL, build_int_cst (type, data[i])); + + gfc_free (data); + gfc_free (chk); + + /* Build a char[length] array to hold the initializers. Much of what + follows is borrowed from build_field, above. */ + + tmp = build_int_cst (gfc_array_index_type, length - 1); + tmp = build_range_type (gfc_array_index_type, + gfc_index_zero_node, tmp); + tmp = build_array_type (type, tmp); + field = build_decl (FIELD_DECL, NULL_TREE, tmp); + gfc_set_decl_location (field, &gfc_current_locus); + + known_align = BIGGEST_ALIGNMENT; + + desired_align = update_alignment_for_field (rli, field, known_align); + if (desired_align > known_align) + DECL_PACKED (field) = 1; + + DECL_FIELD_CONTEXT (field) = union_type; + DECL_FIELD_OFFSET (field) = size_int (0); + DECL_FIELD_BIT_OFFSET (field) = bitsize_zero_node; + SET_DECL_OFFSET_ALIGN (field, known_align); + + rli->offset = size_binop (MAX_EXPR, rli->offset, + size_binop (PLUS_EXPR, + DECL_FIELD_OFFSET (field), + DECL_SIZE_UNIT (field))); + + init = build_constructor (TREE_TYPE (field), v); + TREE_CONSTANT (init) = 1; + + *field_init = init; + + for (s = head; s; s = s->next) + { + if (s->sym->value == NULL) + continue; + + gfc_free_expr (s->sym->value); + s->sym->value = NULL; + } + + return field; +} + + +/* Declare memory for the common block or local equivalence, and create + backend declarations for all of the elements. */ + +static void +create_common (gfc_common_head *com, segment_info *head, bool saw_equiv) +{ + segment_info *s, *next_s; + tree union_type; + tree *field_link; + tree field; + tree field_init = NULL_TREE; + record_layout_info rli; + tree decl; + bool is_init = false; + bool is_saved = false; + + /* Declare the variables inside the common block. + If the current common block contains any equivalence object, then + make a UNION_TYPE node, otherwise RECORD_TYPE. This will let the + alias analyzer work well when there is no address overlapping for + common variables in the current common block. */ + if (saw_equiv) + union_type = make_node (UNION_TYPE); + else + union_type = make_node (RECORD_TYPE); + + rli = start_record_layout (union_type); + field_link = &TYPE_FIELDS (union_type); + + /* Check for overlapping initializers and replace them with a single, + artificial field that contains all the data. */ + if (saw_equiv) + field = get_init_field (head, union_type, &field_init, rli); + else + field = NULL_TREE; + + if (field != NULL_TREE) + { + is_init = true; + *field_link = field; + field_link = &TREE_CHAIN (field); + } + + for (s = head; s; s = s->next) + { + build_field (s, union_type, rli); + + /* Link the field into the type. */ + *field_link = s->field; + field_link = &TREE_CHAIN (s->field); + + /* Has initial value. */ + if (s->sym->value) + is_init = true; + + /* Has SAVE attribute. */ + if (s->sym->attr.save) + is_saved = true; + } + + finish_record_layout (rli, true); + + if (com) + decl = build_common_decl (com, union_type, is_init); + else + decl = build_equiv_decl (union_type, is_init, is_saved); + + if (is_init) + { + tree ctor, tmp; + HOST_WIDE_INT offset = 0; + VEC(constructor_elt,gc) *v = NULL; + + if (field != NULL_TREE && field_init != NULL_TREE) + CONSTRUCTOR_APPEND_ELT (v, field, field_init); + else + for (s = head; s; s = s->next) + { + if (s->sym->value) + { + /* Add the initializer for this field. */ + tmp = gfc_conv_initializer (s->sym->value, &s->sym->ts, + TREE_TYPE (s->field), s->sym->attr.dimension, + s->sym->attr.pointer || s->sym->attr.allocatable); + + CONSTRUCTOR_APPEND_ELT (v, s->field, tmp); + offset = s->offset + s->length; + } + } + + gcc_assert (!VEC_empty (constructor_elt, v)); + ctor = build_constructor (union_type, v); + TREE_CONSTANT (ctor) = 1; + TREE_STATIC (ctor) = 1; + DECL_INITIAL (decl) = ctor; + +#ifdef ENABLE_CHECKING + { + tree field, value; + unsigned HOST_WIDE_INT idx; + FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (ctor), idx, field, value) + gcc_assert (TREE_CODE (field) == FIELD_DECL); + } +#endif + } + + /* Build component reference for each variable. */ + for (s = head; s; s = next_s) + { + tree var_decl; + + var_decl = build_decl (VAR_DECL, DECL_NAME (s->field), + TREE_TYPE (s->field)); + gfc_set_decl_location (var_decl, &s->sym->declared_at); + TREE_PUBLIC (var_decl) = TREE_PUBLIC (decl); + TREE_STATIC (var_decl) = TREE_STATIC (decl); + TREE_USED (var_decl) = TREE_USED (decl); + if (s->sym->attr.use_assoc) + DECL_IGNORED_P (var_decl) = 1; + if (s->sym->attr.target) + TREE_ADDRESSABLE (var_decl) = 1; + /* This is a fake variable just for debugging purposes. */ + TREE_ASM_WRITTEN (var_decl) = 1; + + /* To preserve identifier names in COMMON, chain to procedure + scope unless at top level in a module definition. */ + if (com + && s->sym->ns->proc_name + && s->sym->ns->proc_name->attr.flavor == FL_MODULE) + var_decl = pushdecl_top_level (var_decl); + else + gfc_add_decl_to_function (var_decl); + + SET_DECL_VALUE_EXPR (var_decl, + fold_build3 (COMPONENT_REF, TREE_TYPE (s->field), + decl, s->field, NULL_TREE)); + DECL_HAS_VALUE_EXPR_P (var_decl) = 1; + GFC_DECL_COMMON_OR_EQUIV (var_decl) = 1; + + if (s->sym->attr.assign) + { + gfc_allocate_lang_decl (var_decl); + GFC_DECL_ASSIGN (var_decl) = 1; + GFC_DECL_STRING_LEN (var_decl) = GFC_DECL_STRING_LEN (s->field); + GFC_DECL_ASSIGN_ADDR (var_decl) = GFC_DECL_ASSIGN_ADDR (s->field); + } + + s->sym->backend_decl = var_decl; + + next_s = s->next; + gfc_free (s); + } +} + + +/* Given a symbol, find it in the current segment list. Returns NULL if + not found. */ + +static segment_info * +find_segment_info (gfc_symbol *symbol) +{ + segment_info *n; + + for (n = current_segment; n; n = n->next) + { + if (n->sym == symbol) + return n; + } + + return NULL; +} + + +/* Given an expression node, make sure it is a constant integer and return + the mpz_t value. */ + +static mpz_t * +get_mpz (gfc_expr *e) +{ + + if (e->expr_type != EXPR_CONSTANT) + gfc_internal_error ("get_mpz(): Not an integer constant"); + + return &e->value.integer; +} + + +/* Given an array specification and an array reference, figure out the + array element number (zero based). Bounds and elements are guaranteed + to be constants. If something goes wrong we generate an error and + return zero. */ + +static HOST_WIDE_INT +element_number (gfc_array_ref *ar) +{ + mpz_t multiplier, offset, extent, n; + gfc_array_spec *as; + HOST_WIDE_INT i, rank; + + as = ar->as; + rank = as->rank; + mpz_init_set_ui (multiplier, 1); + mpz_init_set_ui (offset, 0); + mpz_init (extent); + mpz_init (n); + + for (i = 0; i < rank; i++) + { + if (ar->dimen_type[i] != DIMEN_ELEMENT) + gfc_internal_error ("element_number(): Bad dimension type"); + + mpz_sub (n, *get_mpz (ar->start[i]), *get_mpz (as->lower[i])); + + mpz_mul (n, n, multiplier); + mpz_add (offset, offset, n); + + mpz_sub (extent, *get_mpz (as->upper[i]), *get_mpz (as->lower[i])); + mpz_add_ui (extent, extent, 1); + + if (mpz_sgn (extent) < 0) + mpz_set_ui (extent, 0); + + mpz_mul (multiplier, multiplier, extent); + } + + i = mpz_get_ui (offset); + + mpz_clear (multiplier); + mpz_clear (offset); + mpz_clear (extent); + mpz_clear (n); + + return i; +} + + +/* Given a single element of an equivalence list, figure out the offset + from the base symbol. For simple variables or full arrays, this is + simply zero. For an array element we have to calculate the array + element number and multiply by the element size. For a substring we + have to calculate the further reference. */ + +static HOST_WIDE_INT +calculate_offset (gfc_expr *e) +{ + HOST_WIDE_INT n, element_size, offset; + gfc_typespec *element_type; + gfc_ref *reference; + + offset = 0; + element_type = &e->symtree->n.sym->ts; + + for (reference = e->ref; reference; reference = reference->next) + switch (reference->type) + { + case REF_ARRAY: + switch (reference->u.ar.type) + { + case AR_FULL: + break; + + case AR_ELEMENT: + n = element_number (&reference->u.ar); + if (element_type->type == BT_CHARACTER) + gfc_conv_const_charlen (element_type->cl); + element_size = + int_size_in_bytes (gfc_typenode_for_spec (element_type)); + offset += n * element_size; + break; + + default: + gfc_error ("Bad array reference at %L", &e->where); + } + break; + case REF_SUBSTRING: + if (reference->u.ss.start != NULL) + offset += mpz_get_ui (*get_mpz (reference->u.ss.start)) - 1; + break; + default: + gfc_error ("Illegal reference type at %L as EQUIVALENCE object", + &e->where); + } + return offset; +} + + +/* Add a new segment_info structure to the current segment. eq1 is already + in the list, eq2 is not. */ + +static void +new_condition (segment_info *v, gfc_equiv *eq1, gfc_equiv *eq2) +{ + HOST_WIDE_INT offset1, offset2; + segment_info *a; + + offset1 = calculate_offset (eq1->expr); + offset2 = calculate_offset (eq2->expr); + + a = get_segment_info (eq2->expr->symtree->n.sym, + v->offset + offset1 - offset2); + + current_segment = add_segments (current_segment, a); +} + + +/* Given two equivalence structures that are both already in the list, make + sure that this new condition is not violated, generating an error if it + is. */ + +static void +confirm_condition (segment_info *s1, gfc_equiv *eq1, segment_info *s2, + gfc_equiv *eq2) +{ + HOST_WIDE_INT offset1, offset2; + + offset1 = calculate_offset (eq1->expr); + offset2 = calculate_offset (eq2->expr); + + if (s1->offset + offset1 != s2->offset + offset2) + gfc_error ("Inconsistent equivalence rules involving '%s' at %L and " + "'%s' at %L", s1->sym->name, &s1->sym->declared_at, + s2->sym->name, &s2->sym->declared_at); +} + + +/* Process a new equivalence condition. eq1 is know to be in segment f. + If eq2 is also present then confirm that the condition holds. + Otherwise add a new variable to the segment list. */ + +static void +add_condition (segment_info *f, gfc_equiv *eq1, gfc_equiv *eq2) +{ + segment_info *n; + + n = find_segment_info (eq2->expr->symtree->n.sym); + + if (n == NULL) + new_condition (f, eq1, eq2); + else + confirm_condition (f, eq1, n, eq2); +} + + +/* Given a segment element, search through the equivalence lists for unused + conditions that involve the symbol. Add these rules to the segment. */ + +static bool +find_equivalence (segment_info *n) +{ + gfc_equiv *e1, *e2, *eq; + bool found; + + found = FALSE; + + for (e1 = n->sym->ns->equiv; e1; e1 = e1->next) + { + eq = NULL; + + /* Search the equivalence list, including the root (first) element + for the symbol that owns the segment. */ + for (e2 = e1; e2; e2 = e2->eq) + { + if (!e2->used && e2->expr->symtree->n.sym == n->sym) + { + eq = e2; + break; + } + } + + /* Go to the next root element. */ + if (eq == NULL) + continue; + + eq->used = 1; + + /* Now traverse the equivalence list matching the offsets. */ + for (e2 = e1; e2; e2 = e2->eq) + { + if (!e2->used && e2 != eq) + { + add_condition (n, eq, e2); + e2->used = 1; + found = TRUE; + } + } + } + return found; +} + + +/* Add all symbols equivalenced within a segment. We need to scan the + segment list multiple times to include indirect equivalences. Since + a new segment_info can inserted at the beginning of the segment list, + depending on its offset, we have to force a final pass through the + loop by demanding that completion sees a pass with no matches; i.e., + all symbols with equiv_built set and no new equivalences found. */ + +static void +add_equivalences (bool *saw_equiv) +{ + segment_info *f; + bool seen_one, more; + + seen_one = false; + more = TRUE; + while (more) + { + more = FALSE; + for (f = current_segment; f; f = f->next) + { + if (!f->sym->equiv_built) + { + f->sym->equiv_built = 1; + seen_one = find_equivalence (f); + if (seen_one) + { + *saw_equiv = true; + more = true; + } + } + } + } + + /* Add a copy of this segment list to the namespace. */ + copy_equiv_list_to_ns (current_segment); +} + + +/* Returns the offset necessary to properly align the current equivalence. + Sets *palign to the required alignment. */ + +static HOST_WIDE_INT +align_segment (unsigned HOST_WIDE_INT *palign) +{ + segment_info *s; + unsigned HOST_WIDE_INT offset; + unsigned HOST_WIDE_INT max_align; + unsigned HOST_WIDE_INT this_align; + unsigned HOST_WIDE_INT this_offset; + + max_align = 1; + offset = 0; + for (s = current_segment; s; s = s->next) + { + this_align = TYPE_ALIGN_UNIT (s->field); + if (s->offset & (this_align - 1)) + { + /* Field is misaligned. */ + this_offset = this_align - ((s->offset + offset) & (this_align - 1)); + if (this_offset & (max_align - 1)) + { + /* Aligning this field would misalign a previous field. */ + gfc_error ("The equivalence set for variable '%s' " + "declared at %L violates alignment requirements", + s->sym->name, &s->sym->declared_at); + } + offset += this_offset; + } + max_align = this_align; + } + if (palign) + *palign = max_align; + return offset; +} + + +/* Adjust segment offsets by the given amount. */ + +static void +apply_segment_offset (segment_info *s, HOST_WIDE_INT offset) +{ + for (; s; s = s->next) + s->offset += offset; +} + + +/* Lay out a symbol in a common block. If the symbol has already been seen + then check the location is consistent. Otherwise create segments + for that symbol and all the symbols equivalenced with it. */ + +/* Translate a single common block. */ + +static void +translate_common (gfc_common_head *common, gfc_symbol *var_list) +{ + gfc_symbol *sym; + segment_info *s; + segment_info *common_segment; + HOST_WIDE_INT offset; + HOST_WIDE_INT current_offset; + unsigned HOST_WIDE_INT align; + unsigned HOST_WIDE_INT max_align; + bool saw_equiv; + + common_segment = NULL; + offset = 0; + current_offset = 0; + align = 1; + max_align = 1; + saw_equiv = false; + + /* Add symbols to the segment. */ + for (sym = var_list; sym; sym = sym->common_next) + { + current_segment = common_segment; + s = find_segment_info (sym); + + /* Symbol has already been added via an equivalence. Multiple + use associations of the same common block result in equiv_built + being set but no information about the symbol in the segment. */ + if (s && sym->equiv_built) + { + /* Ensure the current location is properly aligned. */ + align = TYPE_ALIGN_UNIT (s->field); + current_offset = (current_offset + align - 1) &~ (align - 1); + + /* Verify that it ended up where we expect it. */ + if (s->offset != current_offset) + { + gfc_error ("Equivalence for '%s' does not match ordering of " + "COMMON '%s' at %L", sym->name, + common->name, &common->where); + } + } + else + { + /* A symbol we haven't seen before. */ + s = current_segment = get_segment_info (sym, current_offset); + + /* Add all objects directly or indirectly equivalenced with this + symbol. */ + add_equivalences (&saw_equiv); + + if (current_segment->offset < 0) + gfc_error ("The equivalence set for '%s' cause an invalid " + "extension to COMMON '%s' at %L", sym->name, + common->name, &common->where); + + if (gfc_option.flag_align_commons) + offset = align_segment (&align); + + if (offset & (max_align - 1)) + { + /* The required offset conflicts with previous alignment + requirements. Insert padding immediately before this + segment. */ + if (gfc_option.warn_align_commons) + { + if (strcmp (common->name, BLANK_COMMON_NAME)) + gfc_warning ("Padding of %d bytes required before '%s' in " + "COMMON '%s' at %L; reorder elements or use " + "-fno-align-commons", (int)offset, + s->sym->name, common->name, &common->where); + else + gfc_warning ("Padding of %d bytes required before '%s' in " + "COMMON at %L; reorder elements or use " + "-fno-align-commons", (int)offset, + s->sym->name, &common->where); + } + } + else + { + /* Offset the whole common block. */ + apply_segment_offset (common_segment, offset); + } + + /* Apply the offset to the new segments. */ + apply_segment_offset (current_segment, offset); + current_offset += offset; + if (max_align < align) + max_align = align; + + /* Add the new segments to the common block. */ + common_segment = add_segments (common_segment, current_segment); + } + + /* The offset of the next common variable. */ + current_offset += s->length; + } + + if (common_segment == NULL) + { + gfc_error ("COMMON '%s' at %L does not exist", + common->name, &common->where); + return; + } + + if (common_segment->offset != 0 && gfc_option.warn_align_commons) + { + if (strcmp (common->name, BLANK_COMMON_NAME)) + gfc_warning ("COMMON '%s' at %L requires %d bytes of padding at start; " + "reorder elements or use -fno-align-commons", + common->name, &common->where, (int)common_segment->offset); + else + gfc_warning ("COMMON at %L requires %d bytes of padding at start; " + "reorder elements or use -fno-align-commons", + &common->where, (int)common_segment->offset); + } + + create_common (common, common_segment, saw_equiv); +} + + +/* Create a new block for each merged equivalence list. */ + +static void +finish_equivalences (gfc_namespace *ns) +{ + gfc_equiv *z, *y; + gfc_symbol *sym; + gfc_common_head * c; + HOST_WIDE_INT offset; + unsigned HOST_WIDE_INT align; + bool dummy; + + for (z = ns->equiv; z; z = z->next) + for (y = z->eq; y; y = y->eq) + { + if (y->used) + continue; + sym = z->expr->symtree->n.sym; + current_segment = get_segment_info (sym, 0); + + /* All objects directly or indirectly equivalenced with this + symbol. */ + add_equivalences (&dummy); + + /* Align the block. */ + offset = align_segment (&align); + + /* Ensure all offsets are positive. */ + offset -= current_segment->offset & ~(align - 1); + + apply_segment_offset (current_segment, offset); + + /* Create the decl. If this is a module equivalence, it has a + unique name, pointed to by z->module. This is written to a + gfc_common_header to push create_common into using + build_common_decl, so that the equivalence appears as an + external symbol. Otherwise, a local declaration is built using + build_equiv_decl. */ + if (z->module) + { + c = gfc_get_common_head (); + /* We've lost the real location, so use the location of the + enclosing procedure. */ + c->where = ns->proc_name->declared_at; + strcpy (c->name, z->module); + } + else + c = NULL; + + create_common (c, current_segment, true); + break; + } +} + + +/* Work function for translating a named common block. */ + +static void +named_common (gfc_symtree *st) +{ + translate_common (st->n.common, st->n.common->head); +} + + +/* Translate the common blocks in a namespace. Unlike other variables, + these have to be created before code, because the backend_decl depends + on the rest of the common block. */ + +void +gfc_trans_common (gfc_namespace *ns) +{ + gfc_common_head *c; + + /* Translate the blank common block. */ + if (ns->blank_common.head != NULL) + { + c = gfc_get_common_head (); + c->where = ns->blank_common.head->common_head->where; + strcpy (c->name, BLANK_COMMON_NAME); + translate_common (c, ns->blank_common.head); + } + + /* Translate all named common blocks. */ + gfc_traverse_symtree (ns->common_root, named_common); + + /* Translate local equivalence. */ + finish_equivalences (ns); + + /* Commit the newly created symbols for common blocks and module + equivalences. */ + gfc_commit_symbols (); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-const.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-const.c new file mode 100644 index 0000000000..4db3512bc0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-const.c @@ -0,0 +1,373 @@ +/* Translation of constants + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software + Foundation, Inc. + Contributed by Paul Brook + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* trans-const.c -- convert constant values */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "ggc.h" +#include "toplev.h" +#include "real.h" +#include "double-int.h" +#include "gfortran.h" +#include "trans.h" +#include "trans-const.h" +#include "trans-types.h" +#include "target-memory.h" + +tree gfc_rank_cst[GFC_MAX_DIMENSIONS + 1]; + +/* Build a constant with given type from an int_cst. */ + +tree +gfc_build_const (tree type, tree intval) +{ + tree val; + tree zero; + + switch (TREE_CODE (type)) + { + case INTEGER_TYPE: + val = convert (type, intval); + break; + + case REAL_TYPE: + val = build_real_from_int_cst (type, intval); + break; + + case COMPLEX_TYPE: + val = build_real_from_int_cst (TREE_TYPE (type), intval); + zero = build_real_from_int_cst (TREE_TYPE (type), integer_zero_node); + val = build_complex (type, val, zero); + break; + + default: + gcc_unreachable (); + } + return val; +} + +/* Build a string constant with C char type. */ + +tree +gfc_build_string_const (int length, const char *s) +{ + tree str; + tree len; + + str = build_string (length, s); + len = build_int_cst (NULL_TREE, length); + TREE_TYPE (str) = + build_array_type (gfc_character1_type_node, + build_range_type (gfc_charlen_type_node, + integer_one_node, len)); + return str; +} + + +/* Build a string constant with a type given by its kind; take care of + non-default character kinds. */ + +tree +gfc_build_wide_string_const (int kind, int length, const gfc_char_t *string) +{ + int i; + tree str, len; + size_t size; + char *s; + + i = gfc_validate_kind (BT_CHARACTER, kind, false); + size = length * gfc_character_kinds[i].bit_size / 8; + + s = XCNEWVAR (char, size); + gfc_encode_character (kind, length, string, (unsigned char *) s, size); + + str = build_string (size, s); + gfc_free (s); + + len = build_int_cst (NULL_TREE, length); + TREE_TYPE (str) = + build_array_type (gfc_get_char_type (kind), + build_range_type (gfc_charlen_type_node, + integer_one_node, len)); + return str; +} + + +/* Build a Fortran character constant from a zero-terminated string. + There a two version of this function, one that translates the string + and one that doesn't. */ +tree +gfc_build_cstring_const (const char *string) +{ + return gfc_build_string_const (strlen (string) + 1, string); +} + +tree +gfc_build_localized_cstring_const (const char *msgid) +{ + const char *localized = _(msgid); + return gfc_build_string_const (strlen (localized) + 1, localized); +} + + +/* Return a string constant with the given length. Used for static + initializers. The constant will be padded or truncated to match + length. */ + +tree +gfc_conv_string_init (tree length, gfc_expr * expr) +{ + gfc_char_t *s; + HOST_WIDE_INT len; + int slen; + tree str; + bool free_s = false; + + gcc_assert (expr->expr_type == EXPR_CONSTANT); + gcc_assert (expr->ts.type == BT_CHARACTER); + gcc_assert (INTEGER_CST_P (length)); + gcc_assert (TREE_INT_CST_HIGH (length) == 0); + + len = TREE_INT_CST_LOW (length); + slen = expr->value.character.length; + + if (len > slen) + { + s = gfc_get_wide_string (len); + memcpy (s, expr->value.character.string, slen * sizeof (gfc_char_t)); + gfc_wide_memset (&s[slen], ' ', len - slen); + free_s = true; + } + else + s = expr->value.character.string; + + str = gfc_build_wide_string_const (expr->ts.kind, len, s); + + if (free_s) + gfc_free (s); + + return str; +} + + +/* Create a tree node for the string length if it is constant. */ + +void +gfc_conv_const_charlen (gfc_charlen * cl) +{ + if (cl->backend_decl) + return; + + if (cl->length && cl->length->expr_type == EXPR_CONSTANT) + { + cl->backend_decl = gfc_conv_mpz_to_tree (cl->length->value.integer, + cl->length->ts.kind); + cl->backend_decl = fold_convert (gfc_charlen_type_node, + cl->backend_decl); + } +} + +void +gfc_init_constants (void) +{ + int n; + + for (n = 0; n <= GFC_MAX_DIMENSIONS; n++) + gfc_rank_cst[n] = build_int_cst (gfc_array_index_type, n); +} + +/* Converts a GMP integer into a backend tree node. */ + +tree +gfc_conv_mpz_to_tree (mpz_t i, int kind) +{ + double_int val = mpz_get_double_int (gfc_get_int_type (kind), i, true); + return double_int_to_tree (gfc_get_int_type (kind), val); +} + +/* Converts a backend tree into a GMP integer. */ + +void +gfc_conv_tree_to_mpz (mpz_t i, tree source) +{ + double_int val = tree_to_double_int (source); + mpz_set_double_int (i, val, TYPE_UNSIGNED (TREE_TYPE (source))); +} + +/* Converts a real constant into backend form. */ + +tree +gfc_conv_mpfr_to_tree (mpfr_t f, int kind) +{ + tree type; + int n; + REAL_VALUE_TYPE real; + + n = gfc_validate_kind (BT_REAL, kind, false); + gcc_assert (gfc_real_kinds[n].radix == 2); + + type = gfc_get_real_type (kind); + real_from_mpfr (&real, f, type, GFC_RND_MODE); + return build_real (type, real); +} + +/* Converts a backend tree into a real constant. */ + +void +gfc_conv_tree_to_mpfr (mpfr_ptr f, tree source) +{ + mpfr_from_real (f, TREE_REAL_CST_PTR (source), GFC_RND_MODE); +} + +/* Translate any literal constant to a tree. Constants never have + pre or post chains. Character literal constants are special + special because they have a value and a length, so they cannot be + returned as a single tree. It is up to the caller to set the + length somewhere if necessary. + + Returns the translated constant, or aborts if it gets a type it + can't handle. */ + +tree +gfc_conv_constant_to_tree (gfc_expr * expr) +{ + tree res; + + gcc_assert (expr->expr_type == EXPR_CONSTANT); + + /* If it is has a prescribed memory representation, we build a string + constant and VIEW_CONVERT to its type. */ + + switch (expr->ts.type) + { + case BT_INTEGER: + if (expr->representation.string) + return fold_build1 (VIEW_CONVERT_EXPR, + gfc_get_int_type (expr->ts.kind), + gfc_build_string_const (expr->representation.length, + expr->representation.string)); + else + return gfc_conv_mpz_to_tree (expr->value.integer, expr->ts.kind); + + case BT_REAL: + if (expr->representation.string) + return fold_build1 (VIEW_CONVERT_EXPR, + gfc_get_real_type (expr->ts.kind), + gfc_build_string_const (expr->representation.length, + expr->representation.string)); + else + return gfc_conv_mpfr_to_tree (expr->value.real, expr->ts.kind); + + case BT_LOGICAL: + if (expr->representation.string) + { + tree tmp = fold_build1 (VIEW_CONVERT_EXPR, + gfc_get_int_type (expr->ts.kind), + gfc_build_string_const (expr->representation.length, + expr->representation.string)); + if (!integer_zerop (tmp) && !integer_onep (tmp)) + gfc_warning ("Assigning value other than 0 or 1 to LOGICAL" + " has undefined result at %L", &expr->where); + return fold_convert (gfc_get_logical_type (expr->ts.kind), tmp); + } + else + return build_int_cst (gfc_get_logical_type (expr->ts.kind), + expr->value.logical); + + case BT_COMPLEX: + if (expr->representation.string) + return fold_build1 (VIEW_CONVERT_EXPR, + gfc_get_complex_type (expr->ts.kind), + gfc_build_string_const (expr->representation.length, + expr->representation.string)); + else + { + tree real = gfc_conv_mpfr_to_tree (expr->value.complex.r, + expr->ts.kind); + tree imag = gfc_conv_mpfr_to_tree (expr->value.complex.i, + expr->ts.kind); + + return build_complex (gfc_typenode_for_spec (&expr->ts), + real, imag); + } + + case BT_CHARACTER: + res = gfc_build_wide_string_const (expr->ts.kind, + expr->value.character.length, + expr->value.character.string); + return res; + + case BT_HOLLERITH: + return gfc_build_string_const (expr->representation.length, + expr->representation.string); + + default: + fatal_error ("gfc_conv_constant_to_tree(): invalid type: %s", + gfc_typename (&expr->ts)); + } +} + + +/* Like gfc_conv_constant_to_tree, but for a simplified expression. + We can handle character literal constants here as well. */ + +void +gfc_conv_constant (gfc_se * se, gfc_expr * expr) +{ + /* We may be receiving an expression for C_NULL_PTR or C_NULL_FUNPTR. If + so, they expr_type will not yet be an EXPR_CONSTANT. We need to make + it so here. */ + if (expr->ts.type == BT_DERIVED && expr->ts.derived + && expr->ts.derived->attr.is_iso_c) + { + if (expr->symtree->n.sym->intmod_sym_id == ISOCBINDING_NULL_PTR + || expr->symtree->n.sym->intmod_sym_id == ISOCBINDING_NULL_FUNPTR) + { + /* Create a new EXPR_CONSTANT expression for our local uses. */ + expr = gfc_int_expr (0); + } + } + + gcc_assert (expr->expr_type == EXPR_CONSTANT); + + if (se->ss != NULL) + { + gcc_assert (se->ss != gfc_ss_terminator); + gcc_assert (se->ss->type == GFC_SS_SCALAR); + gcc_assert (se->ss->expr == expr); + + se->expr = se->ss->data.scalar.expr; + se->string_length = se->ss->string_length; + gfc_advance_se_ss_chain (se); + return; + } + + /* Translate the constant and put it in the simplifier structure. */ + se->expr = gfc_conv_constant_to_tree (expr); + + /* If this is a CHARACTER string, set its length in the simplifier + structure, too. */ + if (expr->ts.type == BT_CHARACTER) + se->string_length = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (se->expr))); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-const.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-const.h new file mode 100644 index 0000000000..2cba791c9c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-const.h @@ -0,0 +1,60 @@ +/* Header for code constant translation functions + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* Converts between INT_CST and GMP integer representations. */ +tree gfc_conv_mpz_to_tree (mpz_t, int); +void gfc_conv_tree_to_mpz (mpz_t, tree); + +/* Converts between REAL_CST and MPFR floating-point representations. */ +tree gfc_conv_mpfr_to_tree (mpfr_t, int); +void gfc_conv_tree_to_mpfr (mpfr_ptr, tree); + +/* Build a tree for a constant. Must be an EXPR_CONSTANT gfc_expr. + For CHARACTER literal constants, the caller still has to set the + string length as a separate operation. */ +tree gfc_conv_constant_to_tree (gfc_expr *); + +/* Like gfc_conv_noncharacter_constant, but works on simplified expression + structures. Also sets the length of CHARACTER strings in the gfc_se. */ +void gfc_conv_constant (gfc_se *, gfc_expr *); + +tree gfc_build_string_const (int, const char *); +tree gfc_build_wide_string_const (int, int, const gfc_char_t *); +tree gfc_build_cstring_const (const char *); +tree gfc_build_localized_cstring_const (const char *); + +/* Translate a string constant for a static initializer. */ +tree gfc_conv_string_init (tree, gfc_expr *); + +/* Create a tree node for the string length if it is constant. */ +void gfc_conv_const_charlen (gfc_charlen *); + +/* Initialize the nodes for constants. */ +void gfc_init_constants (void); + +/* Build a constant with given type from an int_cst. */ +tree gfc_build_const (tree, tree); + +/* Integer constants 0..GFC_MAX_DIMENSIONS. */ +extern GTY(()) tree gfc_rank_cst[GFC_MAX_DIMENSIONS + 1]; + +#define gfc_index_zero_node gfc_rank_cst[0] +#define gfc_index_one_node gfc_rank_cst[1] diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-decl.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-decl.c new file mode 100644 index 0000000000..18d8d1bfb8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-decl.c @@ -0,0 +1,4086 @@ +/* Backend function setup + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* trans-decl.c -- Handling of backend function and variable decls, etc */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "tree-dump.h" +#include "gimple.h" +#include "ggc.h" +#include "toplev.h" +#include "tm.h" +#include "rtl.h" +#include "target.h" +#include "function.h" +#include "flags.h" +#include "cgraph.h" +#include "debug.h" +#include "gfortran.h" +#include "trans.h" +#include "trans-types.h" +#include "trans-array.h" +#include "trans-const.h" +/* Only for gfc_trans_code. Shouldn't need to include this. */ +#include "trans-stmt.h" + +#define MAX_LABEL_VALUE 99999 + + +/* Holds the result of the function if no result variable specified. */ + +static GTY(()) tree current_fake_result_decl; +static GTY(()) tree parent_fake_result_decl; + +static GTY(()) tree current_function_return_label; + + +/* Holds the variable DECLs for the current function. */ + +static GTY(()) tree saved_function_decls; +static GTY(()) tree saved_parent_function_decls; + + +/* The namespace of the module we're currently generating. Only used while + outputting decls for module variables. Do not rely on this being set. */ + +static gfc_namespace *module_namespace; + + +/* List of static constructor functions. */ + +tree gfc_static_ctors; + + +/* Function declarations for builtin library functions. */ + +tree gfor_fndecl_pause_numeric; +tree gfor_fndecl_pause_string; +tree gfor_fndecl_stop_numeric; +tree gfor_fndecl_stop_string; +tree gfor_fndecl_runtime_error; +tree gfor_fndecl_runtime_error_at; +tree gfor_fndecl_runtime_warning_at; +tree gfor_fndecl_os_error; +tree gfor_fndecl_generate_error; +tree gfor_fndecl_set_fpe; +tree gfor_fndecl_set_options; +tree gfor_fndecl_set_convert; +tree gfor_fndecl_set_record_marker; +tree gfor_fndecl_set_max_subrecord_length; +tree gfor_fndecl_ctime; +tree gfor_fndecl_fdate; +tree gfor_fndecl_ttynam; +tree gfor_fndecl_in_pack; +tree gfor_fndecl_in_unpack; +tree gfor_fndecl_associated; + + +/* Math functions. Many other math functions are handled in + trans-intrinsic.c. */ + +gfc_powdecl_list gfor_fndecl_math_powi[4][3]; +tree gfor_fndecl_math_ishftc4; +tree gfor_fndecl_math_ishftc8; +tree gfor_fndecl_math_ishftc16; + + +/* String functions. */ + +tree gfor_fndecl_compare_string; +tree gfor_fndecl_concat_string; +tree gfor_fndecl_string_len_trim; +tree gfor_fndecl_string_index; +tree gfor_fndecl_string_scan; +tree gfor_fndecl_string_verify; +tree gfor_fndecl_string_trim; +tree gfor_fndecl_string_minmax; +tree gfor_fndecl_adjustl; +tree gfor_fndecl_adjustr; +tree gfor_fndecl_select_string; +tree gfor_fndecl_compare_string_char4; +tree gfor_fndecl_concat_string_char4; +tree gfor_fndecl_string_len_trim_char4; +tree gfor_fndecl_string_index_char4; +tree gfor_fndecl_string_scan_char4; +tree gfor_fndecl_string_verify_char4; +tree gfor_fndecl_string_trim_char4; +tree gfor_fndecl_string_minmax_char4; +tree gfor_fndecl_adjustl_char4; +tree gfor_fndecl_adjustr_char4; +tree gfor_fndecl_select_string_char4; + + +/* Conversion between character kinds. */ +tree gfor_fndecl_convert_char1_to_char4; +tree gfor_fndecl_convert_char4_to_char1; + + +/* Other misc. runtime library functions. */ + +tree gfor_fndecl_size0; +tree gfor_fndecl_size1; +tree gfor_fndecl_iargc; + +/* Intrinsic functions implemented in Fortran. */ +tree gfor_fndecl_sc_kind; +tree gfor_fndecl_si_kind; +tree gfor_fndecl_sr_kind; + +/* BLAS gemm functions. */ +tree gfor_fndecl_sgemm; +tree gfor_fndecl_dgemm; +tree gfor_fndecl_cgemm; +tree gfor_fndecl_zgemm; + + +static void +gfc_add_decl_to_parent_function (tree decl) +{ + gcc_assert (decl); + DECL_CONTEXT (decl) = DECL_CONTEXT (current_function_decl); + DECL_NONLOCAL (decl) = 1; + TREE_CHAIN (decl) = saved_parent_function_decls; + saved_parent_function_decls = decl; +} + +void +gfc_add_decl_to_function (tree decl) +{ + gcc_assert (decl); + TREE_USED (decl) = 1; + DECL_CONTEXT (decl) = current_function_decl; + TREE_CHAIN (decl) = saved_function_decls; + saved_function_decls = decl; +} + + +/* Build a backend label declaration. Set TREE_USED for named labels. + The context of the label is always the current_function_decl. All + labels are marked artificial. */ + +tree +gfc_build_label_decl (tree label_id) +{ + /* 2^32 temporaries should be enough. */ + static unsigned int tmp_num = 1; + tree label_decl; + char *label_name; + + if (label_id == NULL_TREE) + { + /* Build an internal label name. */ + ASM_FORMAT_PRIVATE_NAME (label_name, "L", tmp_num++); + label_id = get_identifier (label_name); + } + else + label_name = NULL; + + /* Build the LABEL_DECL node. Labels have no type. */ + label_decl = build_decl (LABEL_DECL, label_id, void_type_node); + DECL_CONTEXT (label_decl) = current_function_decl; + DECL_MODE (label_decl) = VOIDmode; + + /* We always define the label as used, even if the original source + file never references the label. We don't want all kinds of + spurious warnings for old-style Fortran code with too many + labels. */ + TREE_USED (label_decl) = 1; + + DECL_ARTIFICIAL (label_decl) = 1; + return label_decl; +} + + +/* Returns the return label for the current function. */ + +tree +gfc_get_return_label (void) +{ + char name[GFC_MAX_SYMBOL_LEN + 10]; + + if (current_function_return_label) + return current_function_return_label; + + sprintf (name, "__return_%s", + IDENTIFIER_POINTER (DECL_NAME (current_function_decl))); + + current_function_return_label = + gfc_build_label_decl (get_identifier (name)); + + DECL_ARTIFICIAL (current_function_return_label) = 1; + + return current_function_return_label; +} + + +/* Set the backend source location of a decl. */ + +void +gfc_set_decl_location (tree decl, locus * loc) +{ + DECL_SOURCE_LOCATION (decl) = loc->lb->location; +} + + +/* Return the backend label declaration for a given label structure, + or create it if it doesn't exist yet. */ + +tree +gfc_get_label_decl (gfc_st_label * lp) +{ + if (lp->backend_decl) + return lp->backend_decl; + else + { + char label_name[GFC_MAX_SYMBOL_LEN + 1]; + tree label_decl; + + /* Validate the label declaration from the front end. */ + gcc_assert (lp != NULL && lp->value <= MAX_LABEL_VALUE); + + /* Build a mangled name for the label. */ + sprintf (label_name, "__label_%.6d", lp->value); + + /* Build the LABEL_DECL node. */ + label_decl = gfc_build_label_decl (get_identifier (label_name)); + + /* Tell the debugger where the label came from. */ + if (lp->value <= MAX_LABEL_VALUE) /* An internal label. */ + gfc_set_decl_location (label_decl, &lp->where); + else + DECL_ARTIFICIAL (label_decl) = 1; + + /* Store the label in the label list and return the LABEL_DECL. */ + lp->backend_decl = label_decl; + return label_decl; + } +} + + +/* Convert a gfc_symbol to an identifier of the same name. */ + +static tree +gfc_sym_identifier (gfc_symbol * sym) +{ + return (get_identifier (sym->name)); +} + + +/* Construct mangled name from symbol name. */ + +static tree +gfc_sym_mangled_identifier (gfc_symbol * sym) +{ + char name[GFC_MAX_MANGLED_SYMBOL_LEN + 1]; + + /* Prevent the mangling of identifiers that have an assigned + binding label (mainly those that are bind(c)). */ + if (sym->attr.is_bind_c == 1 + && sym->binding_label[0] != '\0') + return get_identifier(sym->binding_label); + + if (sym->module == NULL) + return gfc_sym_identifier (sym); + else + { + snprintf (name, sizeof name, "__%s_MOD_%s", sym->module, sym->name); + return get_identifier (name); + } +} + + +/* Construct mangled function name from symbol name. */ + +static tree +gfc_sym_mangled_function_id (gfc_symbol * sym) +{ + int has_underscore; + char name[GFC_MAX_MANGLED_SYMBOL_LEN + 1]; + + /* It may be possible to simply use the binding label if it's + provided, and remove the other checks. Then we could use it + for other things if we wished. */ + if ((sym->attr.is_bind_c == 1 || sym->attr.is_iso_c == 1) && + sym->binding_label[0] != '\0') + /* use the binding label rather than the mangled name */ + return get_identifier (sym->binding_label); + + if (sym->module == NULL || sym->attr.proc == PROC_EXTERNAL + || (sym->module != NULL && (sym->attr.external + || sym->attr.if_source == IFSRC_IFBODY))) + { + /* Main program is mangled into MAIN__. */ + if (sym->attr.is_main_program) + return get_identifier ("MAIN__"); + + /* Intrinsic procedures are never mangled. */ + if (sym->attr.proc == PROC_INTRINSIC) + return get_identifier (sym->name); + + if (gfc_option.flag_underscoring) + { + has_underscore = strchr (sym->name, '_') != 0; + if (gfc_option.flag_second_underscore && has_underscore) + snprintf (name, sizeof name, "%s__", sym->name); + else + snprintf (name, sizeof name, "%s_", sym->name); + return get_identifier (name); + } + else + return get_identifier (sym->name); + } + else + { + snprintf (name, sizeof name, "__%s_MOD_%s", sym->module, sym->name); + return get_identifier (name); + } +} + + +/* Returns true if a variable of specified size should go on the stack. */ + +int +gfc_can_put_var_on_stack (tree size) +{ + unsigned HOST_WIDE_INT low; + + if (!INTEGER_CST_P (size)) + return 0; + + if (gfc_option.flag_max_stack_var_size < 0) + return 1; + + if (TREE_INT_CST_HIGH (size) != 0) + return 0; + + low = TREE_INT_CST_LOW (size); + if (low > (unsigned HOST_WIDE_INT) gfc_option.flag_max_stack_var_size) + return 0; + +/* TODO: Set a per-function stack size limit. */ + + return 1; +} + + +/* gfc_finish_cray_pointee sets DECL_VALUE_EXPR for a Cray pointee to + an expression involving its corresponding pointer. There are + 2 cases; one for variable size arrays, and one for everything else, + because variable-sized arrays require one fewer level of + indirection. */ + +static void +gfc_finish_cray_pointee (tree decl, gfc_symbol *sym) +{ + tree ptr_decl = gfc_get_symbol_decl (sym->cp_pointer); + tree value; + + /* Parameters need to be dereferenced. */ + if (sym->cp_pointer->attr.dummy) + ptr_decl = build_fold_indirect_ref (ptr_decl); + + /* Check to see if we're dealing with a variable-sized array. */ + if (sym->attr.dimension + && TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE) + { + /* These decls will be dereferenced later, so we don't dereference + them here. */ + value = convert (TREE_TYPE (decl), ptr_decl); + } + else + { + ptr_decl = convert (build_pointer_type (TREE_TYPE (decl)), + ptr_decl); + value = build_fold_indirect_ref (ptr_decl); + } + + SET_DECL_VALUE_EXPR (decl, value); + DECL_HAS_VALUE_EXPR_P (decl) = 1; + GFC_DECL_CRAY_POINTEE (decl) = 1; + /* This is a fake variable just for debugging purposes. */ + TREE_ASM_WRITTEN (decl) = 1; +} + + +/* Finish processing of a declaration without an initial value. */ + +static void +gfc_finish_decl (tree decl) +{ + gcc_assert (TREE_CODE (decl) == PARM_DECL + || DECL_INITIAL (decl) == NULL_TREE); + + if (TREE_CODE (decl) != VAR_DECL) + return; + + if (DECL_SIZE (decl) == NULL_TREE + && TYPE_SIZE (TREE_TYPE (decl)) != NULL_TREE) + layout_decl (decl, 0); + + /* A few consistency checks. */ + /* A static variable with an incomplete type is an error if it is + initialized. Also if it is not file scope. Otherwise, let it + through, but if it is not `extern' then it may cause an error + message later. */ + /* An automatic variable with an incomplete type is an error. */ + + /* We should know the storage size. */ + gcc_assert (DECL_SIZE (decl) != NULL_TREE + || (TREE_STATIC (decl) + ? (!DECL_INITIAL (decl) || !DECL_CONTEXT (decl)) + : DECL_EXTERNAL (decl))); + + /* The storage size should be constant. */ + gcc_assert ((!DECL_EXTERNAL (decl) && !TREE_STATIC (decl)) + || !DECL_SIZE (decl) + || TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST); +} + + +/* Apply symbol attributes to a variable, and add it to the function scope. */ + +static void +gfc_finish_var_decl (tree decl, gfc_symbol * sym) +{ + tree new_type; + /* TREE_ADDRESSABLE means the address of this variable is actually needed. + This is the equivalent of the TARGET variables. + We also need to set this if the variable is passed by reference in a + CALL statement. */ + + /* Set DECL_VALUE_EXPR for Cray Pointees. */ + if (sym->attr.cray_pointee) + gfc_finish_cray_pointee (decl, sym); + + if (sym->attr.target) + TREE_ADDRESSABLE (decl) = 1; + /* If it wasn't used we wouldn't be getting it. */ + TREE_USED (decl) = 1; + + /* Chain this decl to the pending declarations. Don't do pushdecl() + because this would add them to the current scope rather than the + function scope. */ + if (current_function_decl != NULL_TREE) + { + if (sym->ns->proc_name->backend_decl == current_function_decl + || sym->result == sym) + gfc_add_decl_to_function (decl); + else + gfc_add_decl_to_parent_function (decl); + } + + if (sym->attr.cray_pointee) + return; + + if(sym->attr.is_bind_c == 1) + { + /* We need to put variables that are bind(c) into the common + segment of the object file, because this is what C would do. + gfortran would typically put them in either the BSS or + initialized data segments, and only mark them as common if + they were part of common blocks. However, if they are not put + into common space, then C cannot initialize global fortran + variables that it interoperates with and the draft says that + either Fortran or C should be able to initialize it (but not + both, of course.) (J3/04-007, section 15.3). */ + TREE_PUBLIC(decl) = 1; + DECL_COMMON(decl) = 1; + } + + /* If a variable is USE associated, it's always external. */ + if (sym->attr.use_assoc) + { + DECL_EXTERNAL (decl) = 1; + TREE_PUBLIC (decl) = 1; + } + else if (sym->module && !sym->attr.result && !sym->attr.dummy) + { + /* TODO: Don't set sym->module for result or dummy variables. */ + gcc_assert (current_function_decl == NULL_TREE || sym->result == sym); + /* This is the declaration of a module variable. */ + TREE_PUBLIC (decl) = 1; + TREE_STATIC (decl) = 1; + } + + /* Derived types are a bit peculiar because of the possibility of + a default initializer; this must be applied each time the variable + comes into scope it therefore need not be static. These variables + are SAVE_NONE but have an initializer. Otherwise explicitly + initialized variables are SAVE_IMPLICIT and explicitly saved are + SAVE_EXPLICIT. */ + if (!sym->attr.use_assoc + && (sym->attr.save != SAVE_NONE || sym->attr.data + || (sym->value && sym->ns->proc_name->attr.is_main_program))) + TREE_STATIC (decl) = 1; + + if (sym->attr.volatile_) + { + TREE_THIS_VOLATILE (decl) = 1; + new_type = build_qualified_type (TREE_TYPE (decl), TYPE_QUAL_VOLATILE); + TREE_TYPE (decl) = new_type; + } + + /* Keep variables larger than max-stack-var-size off stack. */ + if (!sym->ns->proc_name->attr.recursive + && INTEGER_CST_P (DECL_SIZE_UNIT (decl)) + && !gfc_can_put_var_on_stack (DECL_SIZE_UNIT (decl)) + /* Put variable length auto array pointers always into stack. */ + && (TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE + || sym->attr.dimension == 0 + || sym->as->type != AS_EXPLICIT + || sym->attr.pointer + || sym->attr.allocatable) + && !DECL_ARTIFICIAL (decl)) + TREE_STATIC (decl) = 1; + + /* Handle threadprivate variables. */ + if (sym->attr.threadprivate + && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))) + DECL_TLS_MODEL (decl) = decl_default_tls_model (decl); +} + + +/* Allocate the lang-specific part of a decl. */ + +void +gfc_allocate_lang_decl (tree decl) +{ + DECL_LANG_SPECIFIC (decl) = (struct lang_decl *) + ggc_alloc_cleared (sizeof (struct lang_decl)); +} + +/* Remember a symbol to generate initialization/cleanup code at function + entry/exit. */ + +static void +gfc_defer_symbol_init (gfc_symbol * sym) +{ + gfc_symbol *p; + gfc_symbol *last; + gfc_symbol *head; + + /* Don't add a symbol twice. */ + if (sym->tlink) + return; + + last = head = sym->ns->proc_name; + p = last->tlink; + + /* Make sure that setup code for dummy variables which are used in the + setup of other variables is generated first. */ + if (sym->attr.dummy) + { + /* Find the first dummy arg seen after us, or the first non-dummy arg. + This is a circular list, so don't go past the head. */ + while (p != head + && (!p->attr.dummy || p->dummy_order > sym->dummy_order)) + { + last = p; + p = p->tlink; + } + } + /* Insert in between last and p. */ + last->tlink = sym; + sym->tlink = p; +} + + +/* Create an array index type variable with function scope. */ + +static tree +create_index_var (const char * pfx, int nest) +{ + tree decl; + + decl = gfc_create_var_np (gfc_array_index_type, pfx); + if (nest) + gfc_add_decl_to_parent_function (decl); + else + gfc_add_decl_to_function (decl); + return decl; +} + + +/* Create variables to hold all the non-constant bits of info for a + descriptorless array. Remember these in the lang-specific part of the + type. */ + +static void +gfc_build_qualified_array (tree decl, gfc_symbol * sym) +{ + tree type; + int dim; + int nest; + + type = TREE_TYPE (decl); + + /* We just use the descriptor, if there is one. */ + if (GFC_DESCRIPTOR_TYPE_P (type)) + return; + + gcc_assert (GFC_ARRAY_TYPE_P (type)); + nest = (sym->ns->proc_name->backend_decl != current_function_decl) + && !sym->attr.contained; + + for (dim = 0; dim < GFC_TYPE_ARRAY_RANK (type); dim++) + { + if (GFC_TYPE_ARRAY_LBOUND (type, dim) == NULL_TREE) + { + GFC_TYPE_ARRAY_LBOUND (type, dim) = create_index_var ("lbound", nest); + TREE_NO_WARNING (GFC_TYPE_ARRAY_LBOUND (type, dim)) = 1; + } + /* Don't try to use the unknown bound for assumed shape arrays. */ + if (GFC_TYPE_ARRAY_UBOUND (type, dim) == NULL_TREE + && (sym->as->type != AS_ASSUMED_SIZE + || dim < GFC_TYPE_ARRAY_RANK (type) - 1)) + { + GFC_TYPE_ARRAY_UBOUND (type, dim) = create_index_var ("ubound", nest); + TREE_NO_WARNING (GFC_TYPE_ARRAY_UBOUND (type, dim)) = 1; + } + + if (GFC_TYPE_ARRAY_STRIDE (type, dim) == NULL_TREE) + { + GFC_TYPE_ARRAY_STRIDE (type, dim) = create_index_var ("stride", nest); + TREE_NO_WARNING (GFC_TYPE_ARRAY_STRIDE (type, dim)) = 1; + } + } + if (GFC_TYPE_ARRAY_OFFSET (type) == NULL_TREE) + { + GFC_TYPE_ARRAY_OFFSET (type) = gfc_create_var_np (gfc_array_index_type, + "offset"); + TREE_NO_WARNING (GFC_TYPE_ARRAY_OFFSET (type)) = 1; + + if (nest) + gfc_add_decl_to_parent_function (GFC_TYPE_ARRAY_OFFSET (type)); + else + gfc_add_decl_to_function (GFC_TYPE_ARRAY_OFFSET (type)); + } + + if (GFC_TYPE_ARRAY_SIZE (type) == NULL_TREE + && sym->as->type != AS_ASSUMED_SIZE) + { + GFC_TYPE_ARRAY_SIZE (type) = create_index_var ("size", nest); + TREE_NO_WARNING (GFC_TYPE_ARRAY_SIZE (type)) = 1; + } + + if (POINTER_TYPE_P (type)) + { + gcc_assert (GFC_ARRAY_TYPE_P (TREE_TYPE (type))); + gcc_assert (TYPE_LANG_SPECIFIC (type) + == TYPE_LANG_SPECIFIC (TREE_TYPE (type))); + type = TREE_TYPE (type); + } + + if (! COMPLETE_TYPE_P (type) && GFC_TYPE_ARRAY_SIZE (type)) + { + tree size, range; + + size = fold_build2 (MINUS_EXPR, gfc_array_index_type, + GFC_TYPE_ARRAY_SIZE (type), gfc_index_one_node); + range = build_range_type (gfc_array_index_type, gfc_index_zero_node, + size); + TYPE_DOMAIN (type) = range; + layout_type (type); + } + + if (write_symbols == NO_DEBUG) + return; + + if (TYPE_NAME (type) != NULL_TREE + && GFC_TYPE_ARRAY_UBOUND (type, sym->as->rank - 1) != NULL_TREE + && TREE_CODE (GFC_TYPE_ARRAY_UBOUND (type, sym->as->rank - 1)) == VAR_DECL) + { + tree gtype = DECL_ORIGINAL_TYPE (TYPE_NAME (type)); + + for (dim = 0; dim < sym->as->rank - 1; dim++) + { + gcc_assert (TREE_CODE (gtype) == ARRAY_TYPE); + gtype = TREE_TYPE (gtype); + } + gcc_assert (TREE_CODE (gtype) == ARRAY_TYPE); + if (TYPE_MAX_VALUE (TYPE_DOMAIN (gtype)) == NULL) + TYPE_NAME (type) = NULL_TREE; + } + + if (TYPE_NAME (type) == NULL_TREE) + { + tree gtype = TREE_TYPE (type), rtype, type_decl; + + for (dim = sym->as->rank - 1; dim >= 0; dim--) + { + rtype = build_range_type (gfc_array_index_type, + GFC_TYPE_ARRAY_LBOUND (type, dim), + GFC_TYPE_ARRAY_UBOUND (type, dim)); + gtype = build_array_type (gtype, rtype); + /* Ensure the bound variables aren't optimized out at -O0. */ + if (!optimize) + { + if (GFC_TYPE_ARRAY_LBOUND (type, dim) + && TREE_CODE (GFC_TYPE_ARRAY_LBOUND (type, dim)) == VAR_DECL) + DECL_IGNORED_P (GFC_TYPE_ARRAY_LBOUND (type, dim)) = 0; + if (GFC_TYPE_ARRAY_UBOUND (type, dim) + && TREE_CODE (GFC_TYPE_ARRAY_UBOUND (type, dim)) == VAR_DECL) + DECL_IGNORED_P (GFC_TYPE_ARRAY_UBOUND (type, dim)) = 0; + } + } + TYPE_NAME (type) = type_decl = build_decl (TYPE_DECL, NULL, gtype); + DECL_ORIGINAL_TYPE (type_decl) = gtype; + } +} + + +/* For some dummy arguments we don't use the actual argument directly. + Instead we create a local decl and use that. This allows us to perform + initialization, and construct full type information. */ + +static tree +gfc_build_dummy_array_decl (gfc_symbol * sym, tree dummy) +{ + tree decl; + tree type; + gfc_array_spec *as; + char *name; + gfc_packed packed; + int n; + bool known_size; + + if (sym->attr.pointer || sym->attr.allocatable) + return dummy; + + /* Add to list of variables if not a fake result variable. */ + if (sym->attr.result || sym->attr.dummy) + gfc_defer_symbol_init (sym); + + type = TREE_TYPE (dummy); + gcc_assert (TREE_CODE (dummy) == PARM_DECL + && POINTER_TYPE_P (type)); + + /* Do we know the element size? */ + known_size = sym->ts.type != BT_CHARACTER + || INTEGER_CST_P (sym->ts.cl->backend_decl); + + if (known_size && !GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (type))) + { + /* For descriptorless arrays with known element size the actual + argument is sufficient. */ + gcc_assert (GFC_ARRAY_TYPE_P (type)); + gfc_build_qualified_array (dummy, sym); + return dummy; + } + + type = TREE_TYPE (type); + if (GFC_DESCRIPTOR_TYPE_P (type)) + { + /* Create a descriptorless array pointer. */ + as = sym->as; + packed = PACKED_NO; + + /* Even when -frepack-arrays is used, symbols with TARGET attribute + are not repacked. */ + if (!gfc_option.flag_repack_arrays || sym->attr.target) + { + if (as->type == AS_ASSUMED_SIZE) + packed = PACKED_FULL; + } + else + { + if (as->type == AS_EXPLICIT) + { + packed = PACKED_FULL; + for (n = 0; n < as->rank; n++) + { + if (!(as->upper[n] + && as->lower[n] + && as->upper[n]->expr_type == EXPR_CONSTANT + && as->lower[n]->expr_type == EXPR_CONSTANT)) + packed = PACKED_PARTIAL; + } + } + else + packed = PACKED_PARTIAL; + } + + type = gfc_typenode_for_spec (&sym->ts); + type = gfc_get_nodesc_array_type (type, sym->as, packed); + } + else + { + /* We now have an expression for the element size, so create a fully + qualified type. Reset sym->backend decl or this will just return the + old type. */ + DECL_ARTIFICIAL (sym->backend_decl) = 1; + sym->backend_decl = NULL_TREE; + type = gfc_sym_type (sym); + packed = PACKED_FULL; + } + + ASM_FORMAT_PRIVATE_NAME (name, IDENTIFIER_POINTER (DECL_NAME (dummy)), 0); + decl = build_decl (VAR_DECL, get_identifier (name), type); + + DECL_ARTIFICIAL (decl) = 1; + TREE_PUBLIC (decl) = 0; + TREE_STATIC (decl) = 0; + DECL_EXTERNAL (decl) = 0; + + /* We should never get deferred shape arrays here. We used to because of + frontend bugs. */ + gcc_assert (sym->as->type != AS_DEFERRED); + + if (packed == PACKED_PARTIAL) + GFC_DECL_PARTIAL_PACKED_ARRAY (decl) = 1; + else if (packed == PACKED_FULL) + GFC_DECL_PACKED_ARRAY (decl) = 1; + + gfc_build_qualified_array (decl, sym); + + if (DECL_LANG_SPECIFIC (dummy)) + DECL_LANG_SPECIFIC (decl) = DECL_LANG_SPECIFIC (dummy); + else + gfc_allocate_lang_decl (decl); + + GFC_DECL_SAVED_DESCRIPTOR (decl) = dummy; + + if (sym->ns->proc_name->backend_decl == current_function_decl + || sym->attr.contained) + gfc_add_decl_to_function (decl); + else + gfc_add_decl_to_parent_function (decl); + + return decl; +} + + +/* Return a constant or a variable to use as a string length. Does not + add the decl to the current scope. */ + +static tree +gfc_create_string_length (gfc_symbol * sym) +{ + tree length; + + gcc_assert (sym->ts.cl); + gfc_conv_const_charlen (sym->ts.cl); + + if (sym->ts.cl->backend_decl == NULL_TREE) + { + char name[GFC_MAX_MANGLED_SYMBOL_LEN + 2]; + + /* Also prefix the mangled name. */ + strcpy (&name[1], sym->name); + name[0] = '.'; + length = build_decl (VAR_DECL, get_identifier (name), + gfc_charlen_type_node); + DECL_ARTIFICIAL (length) = 1; + TREE_USED (length) = 1; + if (sym->ns->proc_name->tlink != NULL) + gfc_defer_symbol_init (sym); + sym->ts.cl->backend_decl = length; + } + + return sym->ts.cl->backend_decl; +} + +/* If a variable is assigned a label, we add another two auxiliary + variables. */ + +static void +gfc_add_assign_aux_vars (gfc_symbol * sym) +{ + tree addr; + tree length; + tree decl; + + gcc_assert (sym->backend_decl); + + decl = sym->backend_decl; + gfc_allocate_lang_decl (decl); + GFC_DECL_ASSIGN (decl) = 1; + length = build_decl (VAR_DECL, create_tmp_var_name (sym->name), + gfc_charlen_type_node); + addr = build_decl (VAR_DECL, create_tmp_var_name (sym->name), + pvoid_type_node); + gfc_finish_var_decl (length, sym); + gfc_finish_var_decl (addr, sym); + /* STRING_LENGTH is also used as flag. Less than -1 means that + ASSIGN_ADDR can not be used. Equal -1 means that ASSIGN_ADDR is the + target label's address. Otherwise, value is the length of a format string + and ASSIGN_ADDR is its address. */ + if (TREE_STATIC (length)) + DECL_INITIAL (length) = build_int_cst (NULL_TREE, -2); + else + gfc_defer_symbol_init (sym); + + GFC_DECL_STRING_LEN (decl) = length; + GFC_DECL_ASSIGN_ADDR (decl) = addr; +} + +/* Return the decl for a gfc_symbol, create it if it doesn't already + exist. */ + +tree +gfc_get_symbol_decl (gfc_symbol * sym) +{ + tree decl; + tree length = NULL_TREE; + int byref; + + gcc_assert (sym->attr.referenced + || sym->attr.use_assoc + || sym->ns->proc_name->attr.if_source == IFSRC_IFBODY); + + if (sym->ns && sym->ns->proc_name->attr.function) + byref = gfc_return_by_reference (sym->ns->proc_name); + else + byref = 0; + + if ((sym->attr.dummy && ! sym->attr.function) || (sym->attr.result && byref)) + { + /* Return via extra parameter. */ + if (sym->attr.result && byref + && !sym->backend_decl) + { + sym->backend_decl = + DECL_ARGUMENTS (sym->ns->proc_name->backend_decl); + /* For entry master function skip over the __entry + argument. */ + if (sym->ns->proc_name->attr.entry_master) + sym->backend_decl = TREE_CHAIN (sym->backend_decl); + } + + /* Dummy variables should already have been created. */ + gcc_assert (sym->backend_decl); + + /* Create a character length variable. */ + if (sym->ts.type == BT_CHARACTER) + { + if (sym->ts.cl->backend_decl == NULL_TREE) + length = gfc_create_string_length (sym); + else + length = sym->ts.cl->backend_decl; + if (TREE_CODE (length) == VAR_DECL + && DECL_CONTEXT (length) == NULL_TREE) + { + /* Add the string length to the same context as the symbol. */ + if (DECL_CONTEXT (sym->backend_decl) == current_function_decl) + gfc_add_decl_to_function (length); + else + gfc_add_decl_to_parent_function (length); + + gcc_assert (DECL_CONTEXT (sym->backend_decl) == + DECL_CONTEXT (length)); + + gfc_defer_symbol_init (sym); + } + } + + /* Use a copy of the descriptor for dummy arrays. */ + if (sym->attr.dimension && !TREE_USED (sym->backend_decl)) + { + decl = gfc_build_dummy_array_decl (sym, sym->backend_decl); + /* Prevent the dummy from being detected as unused if it is copied. */ + if (sym->backend_decl != NULL && decl != sym->backend_decl) + DECL_ARTIFICIAL (sym->backend_decl) = 1; + sym->backend_decl = decl; + } + + TREE_USED (sym->backend_decl) = 1; + if (sym->attr.assign && GFC_DECL_ASSIGN (sym->backend_decl) == 0) + { + gfc_add_assign_aux_vars (sym); + } + return sym->backend_decl; + } + + if (sym->backend_decl) + return sym->backend_decl; + + /* Catch function declarations. Only used for actual parameters and + procedure pointers. */ + if (sym->attr.flavor == FL_PROCEDURE) + { + decl = gfc_get_extern_function_decl (sym); + gfc_set_decl_location (decl, &sym->declared_at); + return decl; + } + + if (sym->attr.intrinsic) + internal_error ("intrinsic variable which isn't a procedure"); + + /* Create string length decl first so that they can be used in the + type declaration. */ + if (sym->ts.type == BT_CHARACTER) + length = gfc_create_string_length (sym); + + /* Create the decl for the variable. */ + decl = build_decl (VAR_DECL, gfc_sym_identifier (sym), gfc_sym_type (sym)); + + gfc_set_decl_location (decl, &sym->declared_at); + + /* Symbols from modules should have their assembler names mangled. + This is done here rather than in gfc_finish_var_decl because it + is different for string length variables. */ + if (sym->module) + { + SET_DECL_ASSEMBLER_NAME (decl, gfc_sym_mangled_identifier (sym)); + if (sym->attr.use_assoc) + DECL_IGNORED_P (decl) = 1; + } + + if (sym->attr.dimension) + { + /* Create variables to hold the non-constant bits of array info. */ + gfc_build_qualified_array (decl, sym); + + /* Remember this variable for allocation/cleanup. */ + gfc_defer_symbol_init (sym); + + if ((sym->attr.allocatable || !sym->attr.dummy) && !sym->attr.pointer) + GFC_DECL_PACKED_ARRAY (decl) = 1; + } + + if (sym->ts.type == BT_DERIVED && sym->ts.derived->attr.alloc_comp) + gfc_defer_symbol_init (sym); + /* This applies a derived type default initializer. */ + else if (sym->ts.type == BT_DERIVED + && sym->attr.save == SAVE_NONE + && !sym->attr.data + && !sym->attr.allocatable + && (sym->value && !sym->ns->proc_name->attr.is_main_program) + && !sym->attr.use_assoc) + gfc_defer_symbol_init (sym); + + gfc_finish_var_decl (decl, sym); + + if (sym->ts.type == BT_CHARACTER) + { + /* Character variables need special handling. */ + gfc_allocate_lang_decl (decl); + + if (TREE_CODE (length) != INTEGER_CST) + { + char name[GFC_MAX_MANGLED_SYMBOL_LEN + 2]; + + if (sym->module) + { + /* Also prefix the mangled name for symbols from modules. */ + strcpy (&name[1], sym->name); + name[0] = '.'; + strcpy (&name[1], + IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (length))); + SET_DECL_ASSEMBLER_NAME (decl, get_identifier (name)); + } + gfc_finish_var_decl (length, sym); + gcc_assert (!sym->value); + } + } + else if (sym->attr.subref_array_pointer) + { + /* We need the span for these beasts. */ + gfc_allocate_lang_decl (decl); + } + + if (sym->attr.subref_array_pointer) + { + tree span; + GFC_DECL_SUBREF_ARRAY_P (decl) = 1; + span = build_decl (VAR_DECL, create_tmp_var_name ("span"), + gfc_array_index_type); + gfc_finish_var_decl (span, sym); + TREE_STATIC (span) = TREE_STATIC (decl); + DECL_ARTIFICIAL (span) = 1; + DECL_INITIAL (span) = build_int_cst (gfc_array_index_type, 0); + + GFC_DECL_SPAN (decl) = span; + GFC_TYPE_ARRAY_SPAN (TREE_TYPE (decl)) = span; + } + + sym->backend_decl = decl; + + if (sym->attr.assign) + gfc_add_assign_aux_vars (sym); + + if (TREE_STATIC (decl) && !sym->attr.use_assoc) + { + /* Add static initializer. */ + DECL_INITIAL (decl) = gfc_conv_initializer (sym->value, &sym->ts, + TREE_TYPE (decl), sym->attr.dimension, + sym->attr.pointer || sym->attr.allocatable); + } + + return decl; +} + + +/* Substitute a temporary variable in place of the real one. */ + +void +gfc_shadow_sym (gfc_symbol * sym, tree decl, gfc_saved_var * save) +{ + save->attr = sym->attr; + save->decl = sym->backend_decl; + + gfc_clear_attr (&sym->attr); + sym->attr.referenced = 1; + sym->attr.flavor = FL_VARIABLE; + + sym->backend_decl = decl; +} + + +/* Restore the original variable. */ + +void +gfc_restore_sym (gfc_symbol * sym, gfc_saved_var * save) +{ + sym->attr = save->attr; + sym->backend_decl = save->decl; +} + + +/* Declare a procedure pointer. */ + +static tree +get_proc_pointer_decl (gfc_symbol *sym) +{ + tree decl; + + decl = sym->backend_decl; + if (decl) + return decl; + + decl = build_decl (VAR_DECL, get_identifier (sym->name), + build_pointer_type (gfc_get_function_type (sym))); + + if ((sym->ns->proc_name + && sym->ns->proc_name->backend_decl == current_function_decl) + || sym->attr.contained) + gfc_add_decl_to_function (decl); + else if (sym->ns->proc_name->attr.flavor != FL_MODULE) + gfc_add_decl_to_parent_function (decl); + + sym->backend_decl = decl; + + /* If a variable is USE associated, it's always external. */ + if (sym->attr.use_assoc) + { + DECL_EXTERNAL (decl) = 1; + TREE_PUBLIC (decl) = 1; + } + else if (sym->module && sym->ns->proc_name->attr.flavor == FL_MODULE) + { + /* This is the declaration of a module variable. */ + TREE_PUBLIC (decl) = 1; + TREE_STATIC (decl) = 1; + } + + if (!sym->attr.use_assoc + && (sym->attr.save != SAVE_NONE || sym->attr.data + || (sym->value && sym->ns->proc_name->attr.is_main_program))) + TREE_STATIC (decl) = 1; + + if (TREE_STATIC (decl) && sym->value) + { + /* Add static initializer. */ + DECL_INITIAL (decl) = gfc_conv_initializer (sym->value, &sym->ts, + TREE_TYPE (decl), sym->attr.dimension, sym->attr.proc_pointer); + } + + return decl; +} + + +/* Get a basic decl for an external function. */ + +tree +gfc_get_extern_function_decl (gfc_symbol * sym) +{ + tree type; + tree fndecl; + gfc_expr e; + gfc_intrinsic_sym *isym; + gfc_expr argexpr; + char s[GFC_MAX_SYMBOL_LEN + 23]; /* "_gfortran_f2c_specific" and '\0'. */ + tree name; + tree mangled_name; + + if (sym->backend_decl) + return sym->backend_decl; + + /* We should never be creating external decls for alternate entry points. + The procedure may be an alternate entry point, but we don't want/need + to know that. */ + gcc_assert (!(sym->attr.entry || sym->attr.entry_master)); + + if (sym->attr.proc_pointer) + return get_proc_pointer_decl (sym); + + if (sym->attr.intrinsic) + { + /* Call the resolution function to get the actual name. This is + a nasty hack which relies on the resolution functions only looking + at the first argument. We pass NULL for the second argument + otherwise things like AINT get confused. */ + isym = gfc_find_function (sym->name); + gcc_assert (isym->resolve.f0 != NULL); + + memset (&e, 0, sizeof (e)); + e.expr_type = EXPR_FUNCTION; + + memset (&argexpr, 0, sizeof (argexpr)); + gcc_assert (isym->formal); + argexpr.ts = isym->formal->ts; + + if (isym->formal->next == NULL) + isym->resolve.f1 (&e, &argexpr); + else + { + if (isym->formal->next->next == NULL) + isym->resolve.f2 (&e, &argexpr, NULL); + else + { + if (isym->formal->next->next->next == NULL) + isym->resolve.f3 (&e, &argexpr, NULL, NULL); + else + { + /* All specific intrinsics take less than 5 arguments. */ + gcc_assert (isym->formal->next->next->next->next == NULL); + isym->resolve.f4 (&e, &argexpr, NULL, NULL, NULL); + } + } + } + + if (gfc_option.flag_f2c + && ((e.ts.type == BT_REAL && e.ts.kind == gfc_default_real_kind) + || e.ts.type == BT_COMPLEX)) + { + /* Specific which needs a different implementation if f2c + calling conventions are used. */ + sprintf (s, "_gfortran_f2c_specific%s", e.value.function.name); + } + else + sprintf (s, "_gfortran_specific%s", e.value.function.name); + + name = get_identifier (s); + mangled_name = name; + } + else + { + name = gfc_sym_identifier (sym); + mangled_name = gfc_sym_mangled_function_id (sym); + } + + type = gfc_get_function_type (sym); + fndecl = build_decl (FUNCTION_DECL, name, type); + + SET_DECL_ASSEMBLER_NAME (fndecl, mangled_name); + /* If the return type is a pointer, avoid alias issues by setting + DECL_IS_MALLOC to nonzero. This means that the function should be + treated as if it were a malloc, meaning it returns a pointer that + is not an alias. */ + if (POINTER_TYPE_P (type)) + DECL_IS_MALLOC (fndecl) = 1; + + /* Set the context of this decl. */ + if (0 && sym->ns && sym->ns->proc_name) + { + /* TODO: Add external decls to the appropriate scope. */ + DECL_CONTEXT (fndecl) = sym->ns->proc_name->backend_decl; + } + else + { + /* Global declaration, e.g. intrinsic subroutine. */ + DECL_CONTEXT (fndecl) = NULL_TREE; + } + + DECL_EXTERNAL (fndecl) = 1; + + /* This specifies if a function is globally addressable, i.e. it is + the opposite of declaring static in C. */ + TREE_PUBLIC (fndecl) = 1; + + /* Set attributes for PURE functions. A call to PURE function in the + Fortran 95 sense is both pure and without side effects in the C + sense. */ + if (sym->attr.pure || sym->attr.elemental) + { + if (sym->attr.function && !gfc_return_by_reference (sym)) + DECL_PURE_P (fndecl) = 1; + /* TODO: check if pure SUBROUTINEs don't have INTENT(OUT) + parameters and don't use alternate returns (is this + allowed?). In that case, calls to them are meaningless, and + can be optimized away. See also in build_function_decl(). */ + TREE_SIDE_EFFECTS (fndecl) = 0; + } + + /* Mark non-returning functions. */ + if (sym->attr.noreturn) + TREE_THIS_VOLATILE(fndecl) = 1; + + sym->backend_decl = fndecl; + + if (DECL_CONTEXT (fndecl) == NULL_TREE) + pushdecl_top_level (fndecl); + + return fndecl; +} + + +/* Create a declaration for a procedure. For external functions (in the C + sense) use gfc_get_extern_function_decl. HAS_ENTRIES is true if this is + a master function with alternate entry points. */ + +static void +build_function_decl (gfc_symbol * sym) +{ + tree fndecl, type; + symbol_attribute attr; + tree result_decl; + gfc_formal_arglist *f; + + gcc_assert (!sym->backend_decl); + gcc_assert (!sym->attr.external); + + /* Set the line and filename. sym->declared_at seems to point to the + last statement for subroutines, but it'll do for now. */ + gfc_set_backend_locus (&sym->declared_at); + + /* Allow only one nesting level. Allow public declarations. */ + gcc_assert (current_function_decl == NULL_TREE + || DECL_CONTEXT (current_function_decl) == NULL_TREE + || TREE_CODE (DECL_CONTEXT (current_function_decl)) + == NAMESPACE_DECL); + + type = gfc_get_function_type (sym); + fndecl = build_decl (FUNCTION_DECL, gfc_sym_identifier (sym), type); + + /* Perform name mangling if this is a top level or module procedure. */ + if (current_function_decl == NULL_TREE) + SET_DECL_ASSEMBLER_NAME (fndecl, gfc_sym_mangled_function_id (sym)); + + /* Figure out the return type of the declared function, and build a + RESULT_DECL for it. If this is a subroutine with alternate + returns, build a RESULT_DECL for it. */ + attr = sym->attr; + + result_decl = NULL_TREE; + /* TODO: Shouldn't this just be TREE_TYPE (TREE_TYPE (fndecl)). */ + if (attr.function) + { + if (gfc_return_by_reference (sym)) + type = void_type_node; + else + { + if (sym->result != sym) + result_decl = gfc_sym_identifier (sym->result); + + type = TREE_TYPE (TREE_TYPE (fndecl)); + } + } + else + { + /* Look for alternate return placeholders. */ + int has_alternate_returns = 0; + for (f = sym->formal; f; f = f->next) + { + if (f->sym == NULL) + { + has_alternate_returns = 1; + break; + } + } + + if (has_alternate_returns) + type = integer_type_node; + else + type = void_type_node; + } + + result_decl = build_decl (RESULT_DECL, result_decl, type); + DECL_ARTIFICIAL (result_decl) = 1; + DECL_IGNORED_P (result_decl) = 1; + DECL_CONTEXT (result_decl) = fndecl; + DECL_RESULT (fndecl) = result_decl; + + /* Don't call layout_decl for a RESULT_DECL. + layout_decl (result_decl, 0); */ + + /* If the return type is a pointer, avoid alias issues by setting + DECL_IS_MALLOC to nonzero. This means that the function should be + treated as if it were a malloc, meaning it returns a pointer that + is not an alias. */ + if (POINTER_TYPE_P (type)) + DECL_IS_MALLOC (fndecl) = 1; + + /* Set up all attributes for the function. */ + DECL_CONTEXT (fndecl) = current_function_decl; + DECL_EXTERNAL (fndecl) = 0; + + /* This specifies if a function is globally visible, i.e. it is + the opposite of declaring static in C. */ + if (DECL_CONTEXT (fndecl) == NULL_TREE + && !sym->attr.entry_master) + TREE_PUBLIC (fndecl) = 1; + + /* TREE_STATIC means the function body is defined here. */ + TREE_STATIC (fndecl) = 1; + + /* Set attributes for PURE functions. A call to a PURE function in the + Fortran 95 sense is both pure and without side effects in the C + sense. */ + if (attr.pure || attr.elemental) + { + /* TODO: check if a pure SUBROUTINE has no INTENT(OUT) arguments + including an alternate return. In that case it can also be + marked as PURE. See also in gfc_get_extern_function_decl(). */ + if (attr.function && !gfc_return_by_reference (sym)) + DECL_PURE_P (fndecl) = 1; + TREE_SIDE_EFFECTS (fndecl) = 0; + } + + /* For -fwhole-program to work well, the main program needs to have the + "externally_visible" attribute. */ + if (attr.is_main_program) + DECL_ATTRIBUTES (fndecl) + = tree_cons (get_identifier("externally_visible"), NULL_TREE, NULL_TREE); + + /* Layout the function declaration and put it in the binding level + of the current function. */ + pushdecl (fndecl); + + sym->backend_decl = fndecl; +} + + +/* Create the DECL_ARGUMENTS for a procedure. */ + +static void +create_function_arglist (gfc_symbol * sym) +{ + tree fndecl; + gfc_formal_arglist *f; + tree typelist, hidden_typelist; + tree arglist, hidden_arglist; + tree type; + tree parm; + + fndecl = sym->backend_decl; + + /* Build formal argument list. Make sure that their TREE_CONTEXT is + the new FUNCTION_DECL node. */ + arglist = NULL_TREE; + hidden_arglist = NULL_TREE; + typelist = TYPE_ARG_TYPES (TREE_TYPE (fndecl)); + + if (sym->attr.entry_master) + { + type = TREE_VALUE (typelist); + parm = build_decl (PARM_DECL, get_identifier ("__entry"), type); + + DECL_CONTEXT (parm) = fndecl; + DECL_ARG_TYPE (parm) = type; + TREE_READONLY (parm) = 1; + gfc_finish_decl (parm); + DECL_ARTIFICIAL (parm) = 1; + + arglist = chainon (arglist, parm); + typelist = TREE_CHAIN (typelist); + } + + if (gfc_return_by_reference (sym)) + { + tree type = TREE_VALUE (typelist), length = NULL; + + if (sym->ts.type == BT_CHARACTER) + { + /* Length of character result. */ + tree len_type = TREE_VALUE (TREE_CHAIN (typelist)); + gcc_assert (len_type == gfc_charlen_type_node); + + length = build_decl (PARM_DECL, + get_identifier (".__result"), + len_type); + if (!sym->ts.cl->length) + { + sym->ts.cl->backend_decl = length; + TREE_USED (length) = 1; + } + gcc_assert (TREE_CODE (length) == PARM_DECL); + DECL_CONTEXT (length) = fndecl; + DECL_ARG_TYPE (length) = len_type; + TREE_READONLY (length) = 1; + DECL_ARTIFICIAL (length) = 1; + gfc_finish_decl (length); + if (sym->ts.cl->backend_decl == NULL + || sym->ts.cl->backend_decl == length) + { + gfc_symbol *arg; + tree backend_decl; + + if (sym->ts.cl->backend_decl == NULL) + { + tree len = build_decl (VAR_DECL, + get_identifier ("..__result"), + gfc_charlen_type_node); + DECL_ARTIFICIAL (len) = 1; + TREE_USED (len) = 1; + sym->ts.cl->backend_decl = len; + } + + /* Make sure PARM_DECL type doesn't point to incomplete type. */ + arg = sym->result ? sym->result : sym; + backend_decl = arg->backend_decl; + /* Temporary clear it, so that gfc_sym_type creates complete + type. */ + arg->backend_decl = NULL; + type = gfc_sym_type (arg); + arg->backend_decl = backend_decl; + type = build_reference_type (type); + } + } + + parm = build_decl (PARM_DECL, get_identifier ("__result"), type); + + DECL_CONTEXT (parm) = fndecl; + DECL_ARG_TYPE (parm) = TREE_VALUE (typelist); + TREE_READONLY (parm) = 1; + DECL_ARTIFICIAL (parm) = 1; + gfc_finish_decl (parm); + + arglist = chainon (arglist, parm); + typelist = TREE_CHAIN (typelist); + + if (sym->ts.type == BT_CHARACTER) + { + gfc_allocate_lang_decl (parm); + arglist = chainon (arglist, length); + typelist = TREE_CHAIN (typelist); + } + } + + hidden_typelist = typelist; + for (f = sym->formal; f; f = f->next) + if (f->sym != NULL) /* Ignore alternate returns. */ + hidden_typelist = TREE_CHAIN (hidden_typelist); + + for (f = sym->formal; f; f = f->next) + { + char name[GFC_MAX_SYMBOL_LEN + 2]; + + /* Ignore alternate returns. */ + if (f->sym == NULL) + continue; + + type = TREE_VALUE (typelist); + + if (f->sym->ts.type == BT_CHARACTER) + { + tree len_type = TREE_VALUE (hidden_typelist); + tree length = NULL_TREE; + gcc_assert (len_type == gfc_charlen_type_node); + + strcpy (&name[1], f->sym->name); + name[0] = '_'; + length = build_decl (PARM_DECL, get_identifier (name), len_type); + + hidden_arglist = chainon (hidden_arglist, length); + DECL_CONTEXT (length) = fndecl; + DECL_ARTIFICIAL (length) = 1; + DECL_ARG_TYPE (length) = len_type; + TREE_READONLY (length) = 1; + gfc_finish_decl (length); + + /* TODO: Check string lengths when -fbounds-check. */ + + /* Use the passed value for assumed length variables. */ + if (!f->sym->ts.cl->length) + { + TREE_USED (length) = 1; + gcc_assert (!f->sym->ts.cl->backend_decl); + f->sym->ts.cl->backend_decl = length; + } + + hidden_typelist = TREE_CHAIN (hidden_typelist); + + if (f->sym->ts.cl->backend_decl == NULL + || f->sym->ts.cl->backend_decl == length) + { + if (f->sym->ts.cl->backend_decl == NULL) + gfc_create_string_length (f->sym); + + /* Make sure PARM_DECL type doesn't point to incomplete type. */ + if (f->sym->attr.flavor == FL_PROCEDURE) + type = build_pointer_type (gfc_get_function_type (f->sym)); + else + type = gfc_sym_type (f->sym); + } + } + + /* For non-constant length array arguments, make sure they use + a different type node from TYPE_ARG_TYPES type. */ + if (f->sym->attr.dimension + && type == TREE_VALUE (typelist) + && TREE_CODE (type) == POINTER_TYPE + && GFC_ARRAY_TYPE_P (type) + && f->sym->as->type != AS_ASSUMED_SIZE + && ! COMPLETE_TYPE_P (TREE_TYPE (type))) + { + if (f->sym->attr.flavor == FL_PROCEDURE) + type = build_pointer_type (gfc_get_function_type (f->sym)); + else + type = gfc_sym_type (f->sym); + } + + if (f->sym->attr.proc_pointer) + type = build_pointer_type (type); + + /* Build the argument declaration. */ + parm = build_decl (PARM_DECL, gfc_sym_identifier (f->sym), type); + + /* Fill in arg stuff. */ + DECL_CONTEXT (parm) = fndecl; + DECL_ARG_TYPE (parm) = TREE_VALUE (typelist); + /* All implementation args are read-only. */ + TREE_READONLY (parm) = 1; + if (POINTER_TYPE_P (type) + && (!f->sym->attr.proc_pointer + && f->sym->attr.flavor != FL_PROCEDURE)) + DECL_BY_REFERENCE (parm) = 1; + + gfc_finish_decl (parm); + + f->sym->backend_decl = parm; + + arglist = chainon (arglist, parm); + typelist = TREE_CHAIN (typelist); + } + + /* Add the hidden string length parameters, unless the procedure + is bind(C). */ + if (!sym->attr.is_bind_c) + arglist = chainon (arglist, hidden_arglist); + + gcc_assert (hidden_typelist == NULL_TREE + || TREE_VALUE (hidden_typelist) == void_type_node); + DECL_ARGUMENTS (fndecl) = arglist; +} + +/* Convert FNDECL's code to GIMPLE and handle any nested functions. */ + +static void +gfc_gimplify_function (tree fndecl) +{ + struct cgraph_node *cgn; + + gimplify_function_tree (fndecl); + dump_function (TDI_generic, fndecl); + + /* Generate errors for structured block violations. */ + /* ??? Could be done as part of resolve_labels. */ + if (flag_openmp) + diagnose_omp_structured_block_errors (fndecl); + + /* Convert all nested functions to GIMPLE now. We do things in this order + so that items like VLA sizes are expanded properly in the context of the + correct function. */ + cgn = cgraph_node (fndecl); + for (cgn = cgn->nested; cgn; cgn = cgn->next_nested) + gfc_gimplify_function (cgn->decl); +} + + +/* Do the setup necessary before generating the body of a function. */ + +static void +trans_function_start (gfc_symbol * sym) +{ + tree fndecl; + + fndecl = sym->backend_decl; + + /* Let GCC know the current scope is this function. */ + current_function_decl = fndecl; + + /* Let the world know what we're about to do. */ + announce_function (fndecl); + + if (DECL_CONTEXT (fndecl) == NULL_TREE) + { + /* Create RTL for function declaration. */ + rest_of_decl_compilation (fndecl, 1, 0); + } + + /* Create RTL for function definition. */ + make_decl_rtl (fndecl); + + init_function_start (fndecl); + + /* Even though we're inside a function body, we still don't want to + call expand_expr to calculate the size of a variable-sized array. + We haven't necessarily assigned RTL to all variables yet, so it's + not safe to try to expand expressions involving them. */ + cfun->dont_save_pending_sizes_p = 1; + + /* function.c requires a push at the start of the function. */ + pushlevel (0); +} + +/* Create thunks for alternate entry points. */ + +static void +build_entry_thunks (gfc_namespace * ns) +{ + gfc_formal_arglist *formal; + gfc_formal_arglist *thunk_formal; + gfc_entry_list *el; + gfc_symbol *thunk_sym; + stmtblock_t body; + tree thunk_fndecl; + tree args; + tree string_args; + tree tmp; + locus old_loc; + + /* This should always be a toplevel function. */ + gcc_assert (current_function_decl == NULL_TREE); + + gfc_get_backend_locus (&old_loc); + for (el = ns->entries; el; el = el->next) + { + thunk_sym = el->sym; + + build_function_decl (thunk_sym); + create_function_arglist (thunk_sym); + + trans_function_start (thunk_sym); + + thunk_fndecl = thunk_sym->backend_decl; + + gfc_init_block (&body); + + /* Pass extra parameter identifying this entry point. */ + tmp = build_int_cst (gfc_array_index_type, el->id); + args = tree_cons (NULL_TREE, tmp, NULL_TREE); + string_args = NULL_TREE; + + if (thunk_sym->attr.function) + { + if (gfc_return_by_reference (ns->proc_name)) + { + tree ref = DECL_ARGUMENTS (current_function_decl); + args = tree_cons (NULL_TREE, ref, args); + if (ns->proc_name->ts.type == BT_CHARACTER) + args = tree_cons (NULL_TREE, TREE_CHAIN (ref), + args); + } + } + + for (formal = ns->proc_name->formal; formal; formal = formal->next) + { + /* Ignore alternate returns. */ + if (formal->sym == NULL) + continue; + + /* We don't have a clever way of identifying arguments, so resort to + a brute-force search. */ + for (thunk_formal = thunk_sym->formal; + thunk_formal; + thunk_formal = thunk_formal->next) + { + if (thunk_formal->sym == formal->sym) + break; + } + + if (thunk_formal) + { + /* Pass the argument. */ + DECL_ARTIFICIAL (thunk_formal->sym->backend_decl) = 1; + args = tree_cons (NULL_TREE, thunk_formal->sym->backend_decl, + args); + if (formal->sym->ts.type == BT_CHARACTER) + { + tmp = thunk_formal->sym->ts.cl->backend_decl; + string_args = tree_cons (NULL_TREE, tmp, string_args); + } + } + else + { + /* Pass NULL for a missing argument. */ + args = tree_cons (NULL_TREE, null_pointer_node, args); + if (formal->sym->ts.type == BT_CHARACTER) + { + tmp = build_int_cst (gfc_charlen_type_node, 0); + string_args = tree_cons (NULL_TREE, tmp, string_args); + } + } + } + + /* Call the master function. */ + args = nreverse (args); + args = chainon (args, nreverse (string_args)); + tmp = ns->proc_name->backend_decl; + tmp = build_function_call_expr (tmp, args); + if (ns->proc_name->attr.mixed_entry_master) + { + tree union_decl, field; + tree master_type = TREE_TYPE (ns->proc_name->backend_decl); + + union_decl = build_decl (VAR_DECL, get_identifier ("__result"), + TREE_TYPE (master_type)); + DECL_ARTIFICIAL (union_decl) = 1; + DECL_EXTERNAL (union_decl) = 0; + TREE_PUBLIC (union_decl) = 0; + TREE_USED (union_decl) = 1; + layout_decl (union_decl, 0); + pushdecl (union_decl); + + DECL_CONTEXT (union_decl) = current_function_decl; + tmp = fold_build2 (MODIFY_EXPR, TREE_TYPE (union_decl), + union_decl, tmp); + gfc_add_expr_to_block (&body, tmp); + + for (field = TYPE_FIELDS (TREE_TYPE (union_decl)); + field; field = TREE_CHAIN (field)) + if (strcmp (IDENTIFIER_POINTER (DECL_NAME (field)), + thunk_sym->result->name) == 0) + break; + gcc_assert (field != NULL_TREE); + tmp = fold_build3 (COMPONENT_REF, TREE_TYPE (field), + union_decl, field, NULL_TREE); + tmp = fold_build2 (MODIFY_EXPR, + TREE_TYPE (DECL_RESULT (current_function_decl)), + DECL_RESULT (current_function_decl), tmp); + tmp = build1_v (RETURN_EXPR, tmp); + } + else if (TREE_TYPE (DECL_RESULT (current_function_decl)) + != void_type_node) + { + tmp = fold_build2 (MODIFY_EXPR, + TREE_TYPE (DECL_RESULT (current_function_decl)), + DECL_RESULT (current_function_decl), tmp); + tmp = build1_v (RETURN_EXPR, tmp); + } + gfc_add_expr_to_block (&body, tmp); + + /* Finish off this function and send it for code generation. */ + DECL_SAVED_TREE (thunk_fndecl) = gfc_finish_block (&body); + tmp = getdecls (); + poplevel (1, 0, 1); + BLOCK_SUPERCONTEXT (DECL_INITIAL (thunk_fndecl)) = thunk_fndecl; + DECL_SAVED_TREE (thunk_fndecl) + = build3_v (BIND_EXPR, tmp, DECL_SAVED_TREE (thunk_fndecl), + DECL_INITIAL (thunk_fndecl)); + + /* Output the GENERIC tree. */ + dump_function (TDI_original, thunk_fndecl); + + /* Store the end of the function, so that we get good line number + info for the epilogue. */ + cfun->function_end_locus = input_location; + + /* We're leaving the context of this function, so zap cfun. + It's still in DECL_STRUCT_FUNCTION, and we'll restore it in + tree_rest_of_compilation. */ + set_cfun (NULL); + + current_function_decl = NULL_TREE; + + gfc_gimplify_function (thunk_fndecl); + cgraph_finalize_function (thunk_fndecl, false); + + /* We share the symbols in the formal argument list with other entry + points and the master function. Clear them so that they are + recreated for each function. */ + for (formal = thunk_sym->formal; formal; formal = formal->next) + if (formal->sym != NULL) /* Ignore alternate returns. */ + { + formal->sym->backend_decl = NULL_TREE; + if (formal->sym->ts.type == BT_CHARACTER) + formal->sym->ts.cl->backend_decl = NULL_TREE; + } + + if (thunk_sym->attr.function) + { + if (thunk_sym->ts.type == BT_CHARACTER) + thunk_sym->ts.cl->backend_decl = NULL_TREE; + if (thunk_sym->result->ts.type == BT_CHARACTER) + thunk_sym->result->ts.cl->backend_decl = NULL_TREE; + } + } + + gfc_set_backend_locus (&old_loc); +} + + +/* Create a decl for a function, and create any thunks for alternate entry + points. */ + +void +gfc_create_function_decl (gfc_namespace * ns) +{ + /* Create a declaration for the master function. */ + build_function_decl (ns->proc_name); + + /* Compile the entry thunks. */ + if (ns->entries) + build_entry_thunks (ns); + + /* Now create the read argument list. */ + create_function_arglist (ns->proc_name); +} + +/* Return the decl used to hold the function return value. If + parent_flag is set, the context is the parent_scope. */ + +tree +gfc_get_fake_result_decl (gfc_symbol * sym, int parent_flag) +{ + tree decl; + tree length; + tree this_fake_result_decl; + tree this_function_decl; + + char name[GFC_MAX_SYMBOL_LEN + 10]; + + if (parent_flag) + { + this_fake_result_decl = parent_fake_result_decl; + this_function_decl = DECL_CONTEXT (current_function_decl); + } + else + { + this_fake_result_decl = current_fake_result_decl; + this_function_decl = current_function_decl; + } + + if (sym + && sym->ns->proc_name->backend_decl == this_function_decl + && sym->ns->proc_name->attr.entry_master + && sym != sym->ns->proc_name) + { + tree t = NULL, var; + if (this_fake_result_decl != NULL) + for (t = TREE_CHAIN (this_fake_result_decl); t; t = TREE_CHAIN (t)) + if (strcmp (IDENTIFIER_POINTER (TREE_PURPOSE (t)), sym->name) == 0) + break; + if (t) + return TREE_VALUE (t); + decl = gfc_get_fake_result_decl (sym->ns->proc_name, parent_flag); + + if (parent_flag) + this_fake_result_decl = parent_fake_result_decl; + else + this_fake_result_decl = current_fake_result_decl; + + if (decl && sym->ns->proc_name->attr.mixed_entry_master) + { + tree field; + + for (field = TYPE_FIELDS (TREE_TYPE (decl)); + field; field = TREE_CHAIN (field)) + if (strcmp (IDENTIFIER_POINTER (DECL_NAME (field)), + sym->name) == 0) + break; + + gcc_assert (field != NULL_TREE); + decl = fold_build3 (COMPONENT_REF, TREE_TYPE (field), + decl, field, NULL_TREE); + } + + var = create_tmp_var_raw (TREE_TYPE (decl), sym->name); + if (parent_flag) + gfc_add_decl_to_parent_function (var); + else + gfc_add_decl_to_function (var); + + SET_DECL_VALUE_EXPR (var, decl); + DECL_HAS_VALUE_EXPR_P (var) = 1; + GFC_DECL_RESULT (var) = 1; + + TREE_CHAIN (this_fake_result_decl) + = tree_cons (get_identifier (sym->name), var, + TREE_CHAIN (this_fake_result_decl)); + return var; + } + + if (this_fake_result_decl != NULL_TREE) + return TREE_VALUE (this_fake_result_decl); + + /* Only when gfc_get_fake_result_decl is called by gfc_trans_return, + sym is NULL. */ + if (!sym) + return NULL_TREE; + + if (sym->ts.type == BT_CHARACTER) + { + if (sym->ts.cl->backend_decl == NULL_TREE) + length = gfc_create_string_length (sym); + else + length = sym->ts.cl->backend_decl; + if (TREE_CODE (length) == VAR_DECL + && DECL_CONTEXT (length) == NULL_TREE) + gfc_add_decl_to_function (length); + } + + if (gfc_return_by_reference (sym)) + { + decl = DECL_ARGUMENTS (this_function_decl); + + if (sym->ns->proc_name->backend_decl == this_function_decl + && sym->ns->proc_name->attr.entry_master) + decl = TREE_CHAIN (decl); + + TREE_USED (decl) = 1; + if (sym->as) + decl = gfc_build_dummy_array_decl (sym, decl); + } + else + { + sprintf (name, "__result_%.20s", + IDENTIFIER_POINTER (DECL_NAME (this_function_decl))); + + if (!sym->attr.mixed_entry_master && sym->attr.function) + decl = build_decl (VAR_DECL, get_identifier (name), + gfc_sym_type (sym)); + else + decl = build_decl (VAR_DECL, get_identifier (name), + TREE_TYPE (TREE_TYPE (this_function_decl))); + DECL_ARTIFICIAL (decl) = 1; + DECL_EXTERNAL (decl) = 0; + TREE_PUBLIC (decl) = 0; + TREE_USED (decl) = 1; + GFC_DECL_RESULT (decl) = 1; + TREE_ADDRESSABLE (decl) = 1; + + layout_decl (decl, 0); + + if (parent_flag) + gfc_add_decl_to_parent_function (decl); + else + gfc_add_decl_to_function (decl); + } + + if (parent_flag) + parent_fake_result_decl = build_tree_list (NULL, decl); + else + current_fake_result_decl = build_tree_list (NULL, decl); + + return decl; +} + + +/* Builds a function decl. The remaining parameters are the types of the + function arguments. Negative nargs indicates a varargs function. */ + +tree +gfc_build_library_function_decl (tree name, tree rettype, int nargs, ...) +{ + tree arglist; + tree argtype; + tree fntype; + tree fndecl; + va_list p; + int n; + + /* Library functions must be declared with global scope. */ + gcc_assert (current_function_decl == NULL_TREE); + + va_start (p, nargs); + + + /* Create a list of the argument types. */ + for (arglist = NULL_TREE, n = abs (nargs); n > 0; n--) + { + argtype = va_arg (p, tree); + arglist = gfc_chainon_list (arglist, argtype); + } + + if (nargs >= 0) + { + /* Terminate the list. */ + arglist = gfc_chainon_list (arglist, void_type_node); + } + + /* Build the function type and decl. */ + fntype = build_function_type (rettype, arglist); + fndecl = build_decl (FUNCTION_DECL, name, fntype); + + /* Mark this decl as external. */ + DECL_EXTERNAL (fndecl) = 1; + TREE_PUBLIC (fndecl) = 1; + + va_end (p); + + pushdecl (fndecl); + + rest_of_decl_compilation (fndecl, 1, 0); + + return fndecl; +} + +static void +gfc_build_intrinsic_function_decls (void) +{ + tree gfc_int4_type_node = gfc_get_int_type (4); + tree gfc_int8_type_node = gfc_get_int_type (8); + tree gfc_int16_type_node = gfc_get_int_type (16); + tree gfc_logical4_type_node = gfc_get_logical_type (4); + tree pchar1_type_node = gfc_get_pchar_type (1); + tree pchar4_type_node = gfc_get_pchar_type (4); + + /* String functions. */ + gfor_fndecl_compare_string = + gfc_build_library_function_decl (get_identifier (PREFIX("compare_string")), + integer_type_node, 4, + gfc_charlen_type_node, pchar1_type_node, + gfc_charlen_type_node, pchar1_type_node); + + gfor_fndecl_concat_string = + gfc_build_library_function_decl (get_identifier (PREFIX("concat_string")), + void_type_node, 6, + gfc_charlen_type_node, pchar1_type_node, + gfc_charlen_type_node, pchar1_type_node, + gfc_charlen_type_node, pchar1_type_node); + + gfor_fndecl_string_len_trim = + gfc_build_library_function_decl (get_identifier (PREFIX("string_len_trim")), + gfc_int4_type_node, 2, + gfc_charlen_type_node, pchar1_type_node); + + gfor_fndecl_string_index = + gfc_build_library_function_decl (get_identifier (PREFIX("string_index")), + gfc_int4_type_node, 5, + gfc_charlen_type_node, pchar1_type_node, + gfc_charlen_type_node, pchar1_type_node, + gfc_logical4_type_node); + + gfor_fndecl_string_scan = + gfc_build_library_function_decl (get_identifier (PREFIX("string_scan")), + gfc_int4_type_node, 5, + gfc_charlen_type_node, pchar1_type_node, + gfc_charlen_type_node, pchar1_type_node, + gfc_logical4_type_node); + + gfor_fndecl_string_verify = + gfc_build_library_function_decl (get_identifier (PREFIX("string_verify")), + gfc_int4_type_node, 5, + gfc_charlen_type_node, pchar1_type_node, + gfc_charlen_type_node, pchar1_type_node, + gfc_logical4_type_node); + + gfor_fndecl_string_trim = + gfc_build_library_function_decl (get_identifier (PREFIX("string_trim")), + void_type_node, 4, + build_pointer_type (gfc_charlen_type_node), + build_pointer_type (pchar1_type_node), + gfc_charlen_type_node, pchar1_type_node); + + gfor_fndecl_string_minmax = + gfc_build_library_function_decl (get_identifier (PREFIX("string_minmax")), + void_type_node, -4, + build_pointer_type (gfc_charlen_type_node), + build_pointer_type (pchar1_type_node), + integer_type_node, integer_type_node); + + gfor_fndecl_adjustl = + gfc_build_library_function_decl (get_identifier (PREFIX("adjustl")), + void_type_node, 3, pchar1_type_node, + gfc_charlen_type_node, pchar1_type_node); + + gfor_fndecl_adjustr = + gfc_build_library_function_decl (get_identifier (PREFIX("adjustr")), + void_type_node, 3, pchar1_type_node, + gfc_charlen_type_node, pchar1_type_node); + + gfor_fndecl_select_string = + gfc_build_library_function_decl (get_identifier (PREFIX("select_string")), + integer_type_node, 4, pvoid_type_node, + integer_type_node, pchar1_type_node, + gfc_charlen_type_node); + + gfor_fndecl_compare_string_char4 = + gfc_build_library_function_decl (get_identifier + (PREFIX("compare_string_char4")), + integer_type_node, 4, + gfc_charlen_type_node, pchar4_type_node, + gfc_charlen_type_node, pchar4_type_node); + + gfor_fndecl_concat_string_char4 = + gfc_build_library_function_decl (get_identifier + (PREFIX("concat_string_char4")), + void_type_node, 6, + gfc_charlen_type_node, pchar4_type_node, + gfc_charlen_type_node, pchar4_type_node, + gfc_charlen_type_node, pchar4_type_node); + + gfor_fndecl_string_len_trim_char4 = + gfc_build_library_function_decl (get_identifier + (PREFIX("string_len_trim_char4")), + gfc_charlen_type_node, 2, + gfc_charlen_type_node, pchar4_type_node); + + gfor_fndecl_string_index_char4 = + gfc_build_library_function_decl (get_identifier + (PREFIX("string_index_char4")), + gfc_charlen_type_node, 5, + gfc_charlen_type_node, pchar4_type_node, + gfc_charlen_type_node, pchar4_type_node, + gfc_logical4_type_node); + + gfor_fndecl_string_scan_char4 = + gfc_build_library_function_decl (get_identifier + (PREFIX("string_scan_char4")), + gfc_charlen_type_node, 5, + gfc_charlen_type_node, pchar4_type_node, + gfc_charlen_type_node, pchar4_type_node, + gfc_logical4_type_node); + + gfor_fndecl_string_verify_char4 = + gfc_build_library_function_decl (get_identifier + (PREFIX("string_verify_char4")), + gfc_charlen_type_node, 5, + gfc_charlen_type_node, pchar4_type_node, + gfc_charlen_type_node, pchar4_type_node, + gfc_logical4_type_node); + + gfor_fndecl_string_trim_char4 = + gfc_build_library_function_decl (get_identifier + (PREFIX("string_trim_char4")), + void_type_node, 4, + build_pointer_type (gfc_charlen_type_node), + build_pointer_type (pchar4_type_node), + gfc_charlen_type_node, pchar4_type_node); + + gfor_fndecl_string_minmax_char4 = + gfc_build_library_function_decl (get_identifier + (PREFIX("string_minmax_char4")), + void_type_node, -4, + build_pointer_type (gfc_charlen_type_node), + build_pointer_type (pchar4_type_node), + integer_type_node, integer_type_node); + + gfor_fndecl_adjustl_char4 = + gfc_build_library_function_decl (get_identifier (PREFIX("adjustl_char4")), + void_type_node, 3, pchar4_type_node, + gfc_charlen_type_node, pchar4_type_node); + + gfor_fndecl_adjustr_char4 = + gfc_build_library_function_decl (get_identifier (PREFIX("adjustr_char4")), + void_type_node, 3, pchar4_type_node, + gfc_charlen_type_node, pchar4_type_node); + + gfor_fndecl_select_string_char4 = + gfc_build_library_function_decl (get_identifier + (PREFIX("select_string_char4")), + integer_type_node, 4, pvoid_type_node, + integer_type_node, pvoid_type_node, + gfc_charlen_type_node); + + + /* Conversion between character kinds. */ + + gfor_fndecl_convert_char1_to_char4 = + gfc_build_library_function_decl (get_identifier + (PREFIX("convert_char1_to_char4")), + void_type_node, 3, + build_pointer_type (pchar4_type_node), + gfc_charlen_type_node, pchar1_type_node); + + gfor_fndecl_convert_char4_to_char1 = + gfc_build_library_function_decl (get_identifier + (PREFIX("convert_char4_to_char1")), + void_type_node, 3, + build_pointer_type (pchar1_type_node), + gfc_charlen_type_node, pchar4_type_node); + + /* Misc. functions. */ + + gfor_fndecl_ttynam = + gfc_build_library_function_decl (get_identifier (PREFIX("ttynam")), + void_type_node, + 3, + pchar_type_node, + gfc_charlen_type_node, + integer_type_node); + + gfor_fndecl_fdate = + gfc_build_library_function_decl (get_identifier (PREFIX("fdate")), + void_type_node, + 2, + pchar_type_node, + gfc_charlen_type_node); + + gfor_fndecl_ctime = + gfc_build_library_function_decl (get_identifier (PREFIX("ctime")), + void_type_node, + 3, + pchar_type_node, + gfc_charlen_type_node, + gfc_int8_type_node); + + gfor_fndecl_sc_kind = + gfc_build_library_function_decl (get_identifier + (PREFIX("selected_char_kind")), + gfc_int4_type_node, 2, + gfc_charlen_type_node, pchar_type_node); + + gfor_fndecl_si_kind = + gfc_build_library_function_decl (get_identifier + (PREFIX("selected_int_kind")), + gfc_int4_type_node, 1, pvoid_type_node); + + gfor_fndecl_sr_kind = + gfc_build_library_function_decl (get_identifier + (PREFIX("selected_real_kind")), + gfc_int4_type_node, 2, + pvoid_type_node, pvoid_type_node); + + /* Power functions. */ + { + tree ctype, rtype, itype, jtype; + int rkind, ikind, jkind; +#define NIKINDS 3 +#define NRKINDS 4 + static int ikinds[NIKINDS] = {4, 8, 16}; + static int rkinds[NRKINDS] = {4, 8, 10, 16}; + char name[PREFIX_LEN + 12]; /* _gfortran_pow_?n_?n */ + + for (ikind=0; ikind < NIKINDS; ikind++) + { + itype = gfc_get_int_type (ikinds[ikind]); + + for (jkind=0; jkind < NIKINDS; jkind++) + { + jtype = gfc_get_int_type (ikinds[jkind]); + if (itype && jtype) + { + sprintf(name, PREFIX("pow_i%d_i%d"), ikinds[ikind], + ikinds[jkind]); + gfor_fndecl_math_powi[jkind][ikind].integer = + gfc_build_library_function_decl (get_identifier (name), + jtype, 2, jtype, itype); + TREE_READONLY (gfor_fndecl_math_powi[jkind][ikind].integer) = 1; + } + } + + for (rkind = 0; rkind < NRKINDS; rkind ++) + { + rtype = gfc_get_real_type (rkinds[rkind]); + if (rtype && itype) + { + sprintf(name, PREFIX("pow_r%d_i%d"), rkinds[rkind], + ikinds[ikind]); + gfor_fndecl_math_powi[rkind][ikind].real = + gfc_build_library_function_decl (get_identifier (name), + rtype, 2, rtype, itype); + TREE_READONLY (gfor_fndecl_math_powi[rkind][ikind].real) = 1; + } + + ctype = gfc_get_complex_type (rkinds[rkind]); + if (ctype && itype) + { + sprintf(name, PREFIX("pow_c%d_i%d"), rkinds[rkind], + ikinds[ikind]); + gfor_fndecl_math_powi[rkind][ikind].cmplx = + gfc_build_library_function_decl (get_identifier (name), + ctype, 2,ctype, itype); + TREE_READONLY (gfor_fndecl_math_powi[rkind][ikind].cmplx) = 1; + } + } + } +#undef NIKINDS +#undef NRKINDS + } + + gfor_fndecl_math_ishftc4 = + gfc_build_library_function_decl (get_identifier (PREFIX("ishftc4")), + gfc_int4_type_node, + 3, gfc_int4_type_node, + gfc_int4_type_node, gfc_int4_type_node); + gfor_fndecl_math_ishftc8 = + gfc_build_library_function_decl (get_identifier (PREFIX("ishftc8")), + gfc_int8_type_node, + 3, gfc_int8_type_node, + gfc_int4_type_node, gfc_int4_type_node); + if (gfc_int16_type_node) + gfor_fndecl_math_ishftc16 = + gfc_build_library_function_decl (get_identifier (PREFIX("ishftc16")), + gfc_int16_type_node, 3, + gfc_int16_type_node, + gfc_int4_type_node, + gfc_int4_type_node); + + /* BLAS functions. */ + { + tree pint = build_pointer_type (integer_type_node); + tree ps = build_pointer_type (gfc_get_real_type (gfc_default_real_kind)); + tree pd = build_pointer_type (gfc_get_real_type (gfc_default_double_kind)); + tree pc = build_pointer_type (gfc_get_complex_type (gfc_default_real_kind)); + tree pz = build_pointer_type + (gfc_get_complex_type (gfc_default_double_kind)); + + gfor_fndecl_sgemm = gfc_build_library_function_decl + (get_identifier + (gfc_option.flag_underscoring ? "sgemm_" + : "sgemm"), + void_type_node, 15, pchar_type_node, + pchar_type_node, pint, pint, pint, ps, ps, pint, + ps, pint, ps, ps, pint, integer_type_node, + integer_type_node); + gfor_fndecl_dgemm = gfc_build_library_function_decl + (get_identifier + (gfc_option.flag_underscoring ? "dgemm_" + : "dgemm"), + void_type_node, 15, pchar_type_node, + pchar_type_node, pint, pint, pint, pd, pd, pint, + pd, pint, pd, pd, pint, integer_type_node, + integer_type_node); + gfor_fndecl_cgemm = gfc_build_library_function_decl + (get_identifier + (gfc_option.flag_underscoring ? "cgemm_" + : "cgemm"), + void_type_node, 15, pchar_type_node, + pchar_type_node, pint, pint, pint, pc, pc, pint, + pc, pint, pc, pc, pint, integer_type_node, + integer_type_node); + gfor_fndecl_zgemm = gfc_build_library_function_decl + (get_identifier + (gfc_option.flag_underscoring ? "zgemm_" + : "zgemm"), + void_type_node, 15, pchar_type_node, + pchar_type_node, pint, pint, pint, pz, pz, pint, + pz, pint, pz, pz, pint, integer_type_node, + integer_type_node); + } + + /* Other functions. */ + gfor_fndecl_size0 = + gfc_build_library_function_decl (get_identifier (PREFIX("size0")), + gfc_array_index_type, + 1, pvoid_type_node); + gfor_fndecl_size1 = + gfc_build_library_function_decl (get_identifier (PREFIX("size1")), + gfc_array_index_type, + 2, pvoid_type_node, + gfc_array_index_type); + + gfor_fndecl_iargc = + gfc_build_library_function_decl (get_identifier (PREFIX ("iargc")), + gfc_int4_type_node, + 0); +} + + +/* Make prototypes for runtime library functions. */ + +void +gfc_build_builtin_function_decls (void) +{ + tree gfc_int4_type_node = gfc_get_int_type (4); + + gfor_fndecl_stop_numeric = + gfc_build_library_function_decl (get_identifier (PREFIX("stop_numeric")), + void_type_node, 1, gfc_int4_type_node); + /* Stop doesn't return. */ + TREE_THIS_VOLATILE (gfor_fndecl_stop_numeric) = 1; + + gfor_fndecl_stop_string = + gfc_build_library_function_decl (get_identifier (PREFIX("stop_string")), + void_type_node, 2, pchar_type_node, + gfc_int4_type_node); + /* Stop doesn't return. */ + TREE_THIS_VOLATILE (gfor_fndecl_stop_string) = 1; + + gfor_fndecl_pause_numeric = + gfc_build_library_function_decl (get_identifier (PREFIX("pause_numeric")), + void_type_node, 1, gfc_int4_type_node); + + gfor_fndecl_pause_string = + gfc_build_library_function_decl (get_identifier (PREFIX("pause_string")), + void_type_node, 2, pchar_type_node, + gfc_int4_type_node); + + gfor_fndecl_runtime_error = + gfc_build_library_function_decl (get_identifier (PREFIX("runtime_error")), + void_type_node, -1, pchar_type_node); + /* The runtime_error function does not return. */ + TREE_THIS_VOLATILE (gfor_fndecl_runtime_error) = 1; + + gfor_fndecl_runtime_error_at = + gfc_build_library_function_decl (get_identifier (PREFIX("runtime_error_at")), + void_type_node, -2, pchar_type_node, + pchar_type_node); + /* The runtime_error_at function does not return. */ + TREE_THIS_VOLATILE (gfor_fndecl_runtime_error_at) = 1; + + gfor_fndecl_runtime_warning_at = + gfc_build_library_function_decl (get_identifier (PREFIX("runtime_warning_at")), + void_type_node, -2, pchar_type_node, + pchar_type_node); + gfor_fndecl_generate_error = + gfc_build_library_function_decl (get_identifier (PREFIX("generate_error")), + void_type_node, 3, pvoid_type_node, + integer_type_node, pchar_type_node); + + gfor_fndecl_os_error = + gfc_build_library_function_decl (get_identifier (PREFIX("os_error")), + void_type_node, 1, pchar_type_node); + /* The runtime_error function does not return. */ + TREE_THIS_VOLATILE (gfor_fndecl_os_error) = 1; + + gfor_fndecl_set_fpe = + gfc_build_library_function_decl (get_identifier (PREFIX("set_fpe")), + void_type_node, 1, integer_type_node); + + /* Keep the array dimension in sync with the call, later in this file. */ + gfor_fndecl_set_options = + gfc_build_library_function_decl (get_identifier (PREFIX("set_options")), + void_type_node, 2, integer_type_node, + pvoid_type_node); + + gfor_fndecl_set_convert = + gfc_build_library_function_decl (get_identifier (PREFIX("set_convert")), + void_type_node, 1, integer_type_node); + + gfor_fndecl_set_record_marker = + gfc_build_library_function_decl (get_identifier (PREFIX("set_record_marker")), + void_type_node, 1, integer_type_node); + + gfor_fndecl_set_max_subrecord_length = + gfc_build_library_function_decl (get_identifier (PREFIX("set_max_subrecord_length")), + void_type_node, 1, integer_type_node); + + gfor_fndecl_in_pack = gfc_build_library_function_decl ( + get_identifier (PREFIX("internal_pack")), + pvoid_type_node, 1, pvoid_type_node); + + gfor_fndecl_in_unpack = gfc_build_library_function_decl ( + get_identifier (PREFIX("internal_unpack")), + void_type_node, 2, pvoid_type_node, pvoid_type_node); + + gfor_fndecl_associated = + gfc_build_library_function_decl ( + get_identifier (PREFIX("associated")), + integer_type_node, 2, ppvoid_type_node, + ppvoid_type_node); + + gfc_build_intrinsic_function_decls (); + gfc_build_intrinsic_lib_fndecls (); + gfc_build_io_library_fndecls (); +} + + +/* Evaluate the length of dummy character variables. */ + +static tree +gfc_trans_dummy_character (gfc_symbol *sym, gfc_charlen *cl, tree fnbody) +{ + stmtblock_t body; + + gfc_finish_decl (cl->backend_decl); + + gfc_start_block (&body); + + /* Evaluate the string length expression. */ + gfc_conv_string_length (cl, NULL, &body); + + gfc_trans_vla_type_sizes (sym, &body); + + gfc_add_expr_to_block (&body, fnbody); + return gfc_finish_block (&body); +} + + +/* Allocate and cleanup an automatic character variable. */ + +static tree +gfc_trans_auto_character_variable (gfc_symbol * sym, tree fnbody) +{ + stmtblock_t body; + tree decl; + tree tmp; + + gcc_assert (sym->backend_decl); + gcc_assert (sym->ts.cl && sym->ts.cl->length); + + gfc_start_block (&body); + + /* Evaluate the string length expression. */ + gfc_conv_string_length (sym->ts.cl, NULL, &body); + + gfc_trans_vla_type_sizes (sym, &body); + + decl = sym->backend_decl; + + /* Emit a DECL_EXPR for this variable, which will cause the + gimplifier to allocate storage, and all that good stuff. */ + tmp = fold_build1 (DECL_EXPR, TREE_TYPE (decl), decl); + gfc_add_expr_to_block (&body, tmp); + + gfc_add_expr_to_block (&body, fnbody); + return gfc_finish_block (&body); +} + +/* Set the initial value of ASSIGN statement auxiliary variable explicitly. */ + +static tree +gfc_trans_assign_aux_var (gfc_symbol * sym, tree fnbody) +{ + stmtblock_t body; + + gcc_assert (sym->backend_decl); + gfc_start_block (&body); + + /* Set the initial value to length. See the comments in + function gfc_add_assign_aux_vars in this file. */ + gfc_add_modify (&body, GFC_DECL_STRING_LEN (sym->backend_decl), + build_int_cst (NULL_TREE, -2)); + + gfc_add_expr_to_block (&body, fnbody); + return gfc_finish_block (&body); +} + +static void +gfc_trans_vla_one_sizepos (tree *tp, stmtblock_t *body) +{ + tree t = *tp, var, val; + + if (t == NULL || t == error_mark_node) + return; + if (TREE_CONSTANT (t) || DECL_P (t)) + return; + + if (TREE_CODE (t) == SAVE_EXPR) + { + if (SAVE_EXPR_RESOLVED_P (t)) + { + *tp = TREE_OPERAND (t, 0); + return; + } + val = TREE_OPERAND (t, 0); + } + else + val = t; + + var = gfc_create_var_np (TREE_TYPE (t), NULL); + gfc_add_decl_to_function (var); + gfc_add_modify (body, var, val); + if (TREE_CODE (t) == SAVE_EXPR) + TREE_OPERAND (t, 0) = var; + *tp = var; +} + +static void +gfc_trans_vla_type_sizes_1 (tree type, stmtblock_t *body) +{ + tree t; + + if (type == NULL || type == error_mark_node) + return; + + type = TYPE_MAIN_VARIANT (type); + + if (TREE_CODE (type) == INTEGER_TYPE) + { + gfc_trans_vla_one_sizepos (&TYPE_MIN_VALUE (type), body); + gfc_trans_vla_one_sizepos (&TYPE_MAX_VALUE (type), body); + + for (t = TYPE_NEXT_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t)) + { + TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (type); + TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (type); + } + } + else if (TREE_CODE (type) == ARRAY_TYPE) + { + gfc_trans_vla_type_sizes_1 (TREE_TYPE (type), body); + gfc_trans_vla_type_sizes_1 (TYPE_DOMAIN (type), body); + gfc_trans_vla_one_sizepos (&TYPE_SIZE (type), body); + gfc_trans_vla_one_sizepos (&TYPE_SIZE_UNIT (type), body); + + for (t = TYPE_NEXT_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t)) + { + TYPE_SIZE (t) = TYPE_SIZE (type); + TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (type); + } + } +} + +/* Make sure all type sizes and array domains are either constant, + or variable or parameter decls. This is a simplified variant + of gimplify_type_sizes, but we can't use it here, as none of the + variables in the expressions have been gimplified yet. + As type sizes and domains for various variable length arrays + contain VAR_DECLs that are only initialized at gfc_trans_deferred_vars + time, without this routine gimplify_type_sizes in the middle-end + could result in the type sizes being gimplified earlier than where + those variables are initialized. */ + +void +gfc_trans_vla_type_sizes (gfc_symbol *sym, stmtblock_t *body) +{ + tree type = TREE_TYPE (sym->backend_decl); + + if (TREE_CODE (type) == FUNCTION_TYPE + && (sym->attr.function || sym->attr.result || sym->attr.entry)) + { + if (! current_fake_result_decl) + return; + + type = TREE_TYPE (TREE_VALUE (current_fake_result_decl)); + } + + while (POINTER_TYPE_P (type)) + type = TREE_TYPE (type); + + if (GFC_DESCRIPTOR_TYPE_P (type)) + { + tree etype = GFC_TYPE_ARRAY_DATAPTR_TYPE (type); + + while (POINTER_TYPE_P (etype)) + etype = TREE_TYPE (etype); + + gfc_trans_vla_type_sizes_1 (etype, body); + } + + gfc_trans_vla_type_sizes_1 (type, body); +} + + +/* Initialize a derived type by building an lvalue from the symbol + and using trans_assignment to do the work. */ +tree +gfc_init_default_dt (gfc_symbol * sym, tree body) +{ + stmtblock_t fnblock; + gfc_expr *e; + tree tmp; + tree present; + + gfc_init_block (&fnblock); + gcc_assert (!sym->attr.allocatable); + gfc_set_sym_referenced (sym); + e = gfc_lval_expr_from_sym (sym); + tmp = gfc_trans_assignment (e, sym->value, false); + if (sym->attr.dummy) + { + present = gfc_conv_expr_present (sym); + tmp = build3 (COND_EXPR, TREE_TYPE (tmp), present, + tmp, build_empty_stmt ()); + } + gfc_add_expr_to_block (&fnblock, tmp); + gfc_free_expr (e); + if (body) + gfc_add_expr_to_block (&fnblock, body); + return gfc_finish_block (&fnblock); +} + + +/* Initialize INTENT(OUT) derived type dummies. As well as giving + them their default initializer, if they do not have allocatable + components, they have their allocatable components deallocated. */ + +static tree +init_intent_out_dt (gfc_symbol * proc_sym, tree body) +{ + stmtblock_t fnblock; + gfc_formal_arglist *f; + tree tmp; + tree present; + + gfc_init_block (&fnblock); + for (f = proc_sym->formal; f; f = f->next) + if (f->sym && f->sym->attr.intent == INTENT_OUT + && f->sym->ts.type == BT_DERIVED) + { + if (f->sym->ts.derived->attr.alloc_comp) + { + tmp = gfc_deallocate_alloc_comp (f->sym->ts.derived, + f->sym->backend_decl, + f->sym->as ? f->sym->as->rank : 0); + + present = gfc_conv_expr_present (f->sym); + tmp = build3 (COND_EXPR, TREE_TYPE (tmp), present, + tmp, build_empty_stmt ()); + + gfc_add_expr_to_block (&fnblock, tmp); + } + + if (!f->sym->ts.derived->attr.alloc_comp + && f->sym->value) + body = gfc_init_default_dt (f->sym, body); + } + + gfc_add_expr_to_block (&fnblock, body); + return gfc_finish_block (&fnblock); +} + + +/* Generate function entry and exit code, and add it to the function body. + This includes: + Allocation and initialization of array variables. + Allocation of character string variables. + Initialization and possibly repacking of dummy arrays. + Initialization of ASSIGN statement auxiliary variable. */ + +static tree +gfc_trans_deferred_vars (gfc_symbol * proc_sym, tree fnbody) +{ + locus loc; + gfc_symbol *sym; + gfc_formal_arglist *f; + stmtblock_t body; + bool seen_trans_deferred_array = false; + + /* Deal with implicit return variables. Explicit return variables will + already have been added. */ + if (gfc_return_by_reference (proc_sym) && proc_sym->result == proc_sym) + { + if (!current_fake_result_decl) + { + gfc_entry_list *el = NULL; + if (proc_sym->attr.entry_master) + { + for (el = proc_sym->ns->entries; el; el = el->next) + if (el->sym != el->sym->result) + break; + } + /* TODO: move to the appropriate place in resolve.c. */ + if (warn_return_type && el == NULL) + gfc_warning ("Return value of function '%s' at %L not set", + proc_sym->name, &proc_sym->declared_at); + } + else if (proc_sym->as) + { + tree result = TREE_VALUE (current_fake_result_decl); + fnbody = gfc_trans_dummy_array_bias (proc_sym, result, fnbody); + + /* An automatic character length, pointer array result. */ + if (proc_sym->ts.type == BT_CHARACTER + && TREE_CODE (proc_sym->ts.cl->backend_decl) == VAR_DECL) + fnbody = gfc_trans_dummy_character (proc_sym, proc_sym->ts.cl, + fnbody); + } + else if (proc_sym->ts.type == BT_CHARACTER) + { + if (TREE_CODE (proc_sym->ts.cl->backend_decl) == VAR_DECL) + fnbody = gfc_trans_dummy_character (proc_sym, proc_sym->ts.cl, + fnbody); + } + else + gcc_assert (gfc_option.flag_f2c + && proc_sym->ts.type == BT_COMPLEX); + } + + /* Initialize the INTENT(OUT) derived type dummy arguments. This + should be done here so that the offsets and lbounds of arrays + are available. */ + fnbody = init_intent_out_dt (proc_sym, fnbody); + + for (sym = proc_sym->tlink; sym != proc_sym; sym = sym->tlink) + { + bool sym_has_alloc_comp = (sym->ts.type == BT_DERIVED) + && sym->ts.derived->attr.alloc_comp; + if (sym->attr.dimension) + { + switch (sym->as->type) + { + case AS_EXPLICIT: + if (sym->attr.dummy || sym->attr.result) + fnbody = + gfc_trans_dummy_array_bias (sym, sym->backend_decl, fnbody); + else if (sym->attr.pointer || sym->attr.allocatable) + { + if (TREE_STATIC (sym->backend_decl)) + gfc_trans_static_array_pointer (sym); + else + { + seen_trans_deferred_array = true; + fnbody = gfc_trans_deferred_array (sym, fnbody); + } + } + else + { + if (sym_has_alloc_comp) + { + seen_trans_deferred_array = true; + fnbody = gfc_trans_deferred_array (sym, fnbody); + } + else if (sym->ts.type == BT_DERIVED + && sym->value + && !sym->attr.data + && sym->attr.save == SAVE_NONE) + fnbody = gfc_init_default_dt (sym, fnbody); + + gfc_get_backend_locus (&loc); + gfc_set_backend_locus (&sym->declared_at); + fnbody = gfc_trans_auto_array_allocation (sym->backend_decl, + sym, fnbody); + gfc_set_backend_locus (&loc); + } + break; + + case AS_ASSUMED_SIZE: + /* Must be a dummy parameter. */ + gcc_assert (sym->attr.dummy); + + /* We should always pass assumed size arrays the g77 way. */ + fnbody = gfc_trans_g77_array (sym, fnbody); + break; + + case AS_ASSUMED_SHAPE: + /* Must be a dummy parameter. */ + gcc_assert (sym->attr.dummy); + + fnbody = gfc_trans_dummy_array_bias (sym, sym->backend_decl, + fnbody); + break; + + case AS_DEFERRED: + seen_trans_deferred_array = true; + fnbody = gfc_trans_deferred_array (sym, fnbody); + break; + + default: + gcc_unreachable (); + } + if (sym_has_alloc_comp && !seen_trans_deferred_array) + fnbody = gfc_trans_deferred_array (sym, fnbody); + } + else if (sym_has_alloc_comp) + fnbody = gfc_trans_deferred_array (sym, fnbody); + else if (sym->ts.type == BT_CHARACTER) + { + gfc_get_backend_locus (&loc); + gfc_set_backend_locus (&sym->declared_at); + if (sym->attr.dummy || sym->attr.result) + fnbody = gfc_trans_dummy_character (sym, sym->ts.cl, fnbody); + else + fnbody = gfc_trans_auto_character_variable (sym, fnbody); + gfc_set_backend_locus (&loc); + } + else if (sym->attr.assign) + { + gfc_get_backend_locus (&loc); + gfc_set_backend_locus (&sym->declared_at); + fnbody = gfc_trans_assign_aux_var (sym, fnbody); + gfc_set_backend_locus (&loc); + } + else if (sym->ts.type == BT_DERIVED + && sym->value + && !sym->attr.data + && sym->attr.save == SAVE_NONE) + fnbody = gfc_init_default_dt (sym, fnbody); + else + gcc_unreachable (); + } + + gfc_init_block (&body); + + for (f = proc_sym->formal; f; f = f->next) + { + if (f->sym && f->sym->tlink == NULL && f->sym->ts.type == BT_CHARACTER) + { + gcc_assert (f->sym->ts.cl->backend_decl != NULL); + if (TREE_CODE (f->sym->ts.cl->backend_decl) == PARM_DECL) + gfc_trans_vla_type_sizes (f->sym, &body); + } + } + + if (gfc_return_by_reference (proc_sym) && proc_sym->ts.type == BT_CHARACTER + && current_fake_result_decl != NULL) + { + gcc_assert (proc_sym->ts.cl->backend_decl != NULL); + if (TREE_CODE (proc_sym->ts.cl->backend_decl) == PARM_DECL) + gfc_trans_vla_type_sizes (proc_sym, &body); + } + + gfc_add_expr_to_block (&body, fnbody); + return gfc_finish_block (&body); +} + +static GTY ((param_is (struct module_htab_entry))) htab_t module_htab; + +/* Hash and equality functions for module_htab. */ + +static hashval_t +module_htab_do_hash (const void *x) +{ + return htab_hash_string (((const struct module_htab_entry *)x)->name); +} + +static int +module_htab_eq (const void *x1, const void *x2) +{ + return strcmp ((((const struct module_htab_entry *)x1)->name), + (const char *)x2) == 0; +} + +/* Hash and equality functions for module_htab's decls. */ + +static hashval_t +module_htab_decls_hash (const void *x) +{ + const_tree t = (const_tree) x; + const_tree n = DECL_NAME (t); + if (n == NULL_TREE) + n = TYPE_NAME (TREE_TYPE (t)); + return htab_hash_string (IDENTIFIER_POINTER (n)); +} + +static int +module_htab_decls_eq (const void *x1, const void *x2) +{ + const_tree t1 = (const_tree) x1; + const_tree n1 = DECL_NAME (t1); + if (n1 == NULL_TREE) + n1 = TYPE_NAME (TREE_TYPE (t1)); + return strcmp (IDENTIFIER_POINTER (n1), (const char *) x2) == 0; +} + +struct module_htab_entry * +gfc_find_module (const char *name) +{ + void **slot; + + if (! module_htab) + module_htab = htab_create_ggc (10, module_htab_do_hash, + module_htab_eq, NULL); + + slot = htab_find_slot_with_hash (module_htab, name, + htab_hash_string (name), INSERT); + if (*slot == NULL) + { + struct module_htab_entry *entry = GGC_CNEW (struct module_htab_entry); + + entry->name = gfc_get_string (name); + entry->decls = htab_create_ggc (10, module_htab_decls_hash, + module_htab_decls_eq, NULL); + *slot = (void *) entry; + } + return (struct module_htab_entry *) *slot; +} + +void +gfc_module_add_decl (struct module_htab_entry *entry, tree decl) +{ + void **slot; + const char *name; + + if (DECL_NAME (decl)) + name = IDENTIFIER_POINTER (DECL_NAME (decl)); + else + { + gcc_assert (TREE_CODE (decl) == TYPE_DECL); + name = IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (decl))); + } + slot = htab_find_slot_with_hash (entry->decls, name, + htab_hash_string (name), INSERT); + if (*slot == NULL) + *slot = (void *) decl; +} + +static struct module_htab_entry *cur_module; + +/* Output an initialized decl for a module variable. */ + +static void +gfc_create_module_variable (gfc_symbol * sym) +{ + tree decl; + + /* Module functions with alternate entries are dealt with later and + would get caught by the next condition. */ + if (sym->attr.entry) + return; + + /* Make sure we convert the types of the derived types from iso_c_binding + into (void *). */ + if (sym->attr.flavor != FL_PROCEDURE && sym->attr.is_iso_c + && sym->ts.type == BT_DERIVED) + sym->backend_decl = gfc_typenode_for_spec (&(sym->ts)); + + if (sym->attr.flavor == FL_DERIVED + && sym->backend_decl + && TREE_CODE (sym->backend_decl) == RECORD_TYPE) + { + decl = sym->backend_decl; + gcc_assert (sym->ns->proc_name->attr.flavor == FL_MODULE); + gcc_assert (TYPE_CONTEXT (decl) == NULL_TREE + || TYPE_CONTEXT (decl) == sym->ns->proc_name->backend_decl); + gcc_assert (DECL_CONTEXT (TYPE_STUB_DECL (decl)) == NULL_TREE + || DECL_CONTEXT (TYPE_STUB_DECL (decl)) + == sym->ns->proc_name->backend_decl); + TYPE_CONTEXT (decl) = sym->ns->proc_name->backend_decl; + DECL_CONTEXT (TYPE_STUB_DECL (decl)) = sym->ns->proc_name->backend_decl; + gfc_module_add_decl (cur_module, TYPE_STUB_DECL (decl)); + } + + /* Only output variables, procedure pointers and array valued, + or derived type, parameters. */ + if (sym->attr.flavor != FL_VARIABLE + && !(sym->attr.flavor == FL_PARAMETER + && (sym->attr.dimension || sym->ts.type == BT_DERIVED)) + && !(sym->attr.flavor == FL_PROCEDURE && sym->attr.proc_pointer)) + return; + + if ((sym->attr.in_common || sym->attr.in_equivalence) && sym->backend_decl) + { + decl = sym->backend_decl; + gcc_assert (DECL_CONTEXT (decl) == NULL_TREE); + gcc_assert (sym->ns->proc_name->attr.flavor == FL_MODULE); + DECL_CONTEXT (decl) = sym->ns->proc_name->backend_decl; + gfc_module_add_decl (cur_module, decl); + } + + /* Don't generate variables from other modules. Variables from + COMMONs will already have been generated. */ + if (sym->attr.use_assoc || sym->attr.in_common) + return; + + /* Equivalenced variables arrive here after creation. */ + if (sym->backend_decl + && (sym->equiv_built || sym->attr.in_equivalence)) + return; + + if (sym->backend_decl) + internal_error ("backend decl for module variable %s already exists", + sym->name); + + /* We always want module variables to be created. */ + sym->attr.referenced = 1; + /* Create the decl. */ + decl = gfc_get_symbol_decl (sym); + + /* Create the variable. */ + pushdecl (decl); + gcc_assert (DECL_CONTEXT (decl) == NULL_TREE); + gcc_assert (sym->ns->proc_name->attr.flavor == FL_MODULE); + DECL_CONTEXT (decl) = sym->ns->proc_name->backend_decl; + rest_of_decl_compilation (decl, 1, 0); + gfc_module_add_decl (cur_module, decl); + + /* Also add length of strings. */ + if (sym->ts.type == BT_CHARACTER) + { + tree length; + + length = sym->ts.cl->backend_decl; + if (!INTEGER_CST_P (length)) + { + pushdecl (length); + rest_of_decl_compilation (length, 1, 0); + } + } +} + +/* Emit debug information for USE statements. */ + +static void +gfc_trans_use_stmts (gfc_namespace * ns) +{ + gfc_use_list *use_stmt; + for (use_stmt = ns->use_stmts; use_stmt; use_stmt = use_stmt->next) + { + struct module_htab_entry *entry + = gfc_find_module (use_stmt->module_name); + gfc_use_rename *rent; + + if (entry->namespace_decl == NULL) + { + entry->namespace_decl + = build_decl (NAMESPACE_DECL, + get_identifier (use_stmt->module_name), + void_type_node); + DECL_EXTERNAL (entry->namespace_decl) = 1; + } + gfc_set_backend_locus (&use_stmt->where); + if (!use_stmt->only_flag) + (*debug_hooks->imported_module_or_decl) (entry->namespace_decl, + NULL_TREE, + ns->proc_name->backend_decl, + false); + for (rent = use_stmt->rename; rent; rent = rent->next) + { + tree decl, local_name; + void **slot; + + if (rent->op != INTRINSIC_NONE) + continue; + + slot = htab_find_slot_with_hash (entry->decls, rent->use_name, + htab_hash_string (rent->use_name), + INSERT); + if (*slot == NULL) + { + gfc_symtree *st; + + st = gfc_find_symtree (ns->sym_root, + rent->local_name[0] + ? rent->local_name : rent->use_name); + gcc_assert (st && st->n.sym->attr.use_assoc); + if (st->n.sym->backend_decl + && DECL_P (st->n.sym->backend_decl) + && st->n.sym->module + && strcmp (st->n.sym->module, use_stmt->module_name) == 0) + { + gcc_assert (DECL_EXTERNAL (entry->namespace_decl) + || (TREE_CODE (st->n.sym->backend_decl) + != VAR_DECL)); + decl = copy_node (st->n.sym->backend_decl); + DECL_CONTEXT (decl) = entry->namespace_decl; + DECL_EXTERNAL (decl) = 1; + DECL_IGNORED_P (decl) = 0; + DECL_INITIAL (decl) = NULL_TREE; + } + else + { + *slot = error_mark_node; + htab_clear_slot (entry->decls, slot); + continue; + } + *slot = decl; + } + decl = (tree) *slot; + if (rent->local_name[0]) + local_name = get_identifier (rent->local_name); + else + local_name = NULL_TREE; + gfc_set_backend_locus (&rent->where); + (*debug_hooks->imported_module_or_decl) (decl, local_name, + ns->proc_name->backend_decl, + !use_stmt->only_flag); + } + } +} + + +/* Return true if expr is a constant initializer that gfc_conv_initializer + will handle. */ + +static bool +check_constant_initializer (gfc_expr *expr, gfc_typespec *ts, bool array, + bool pointer) +{ + gfc_constructor *c; + gfc_component *cm; + + if (pointer) + return true; + else if (array) + { + if (expr->expr_type == EXPR_CONSTANT || expr->expr_type == EXPR_NULL) + return true; + else if (expr->expr_type == EXPR_STRUCTURE) + return check_constant_initializer (expr, ts, false, false); + else if (expr->expr_type != EXPR_ARRAY) + return false; + for (c = expr->value.constructor; c; c = c->next) + { + if (c->iterator) + return false; + if (c->expr->expr_type == EXPR_STRUCTURE) + { + if (!check_constant_initializer (c->expr, ts, false, false)) + return false; + } + else if (c->expr->expr_type != EXPR_CONSTANT) + return false; + } + return true; + } + else switch (ts->type) + { + case BT_DERIVED: + if (expr->expr_type != EXPR_STRUCTURE) + return false; + cm = expr->ts.derived->components; + for (c = expr->value.constructor; c; c = c->next, cm = cm->next) + { + if (!c->expr || cm->attr.allocatable) + continue; + if (!check_constant_initializer (c->expr, &cm->ts, + cm->attr.dimension, + cm->attr.pointer)) + return false; + } + return true; + default: + return expr->expr_type == EXPR_CONSTANT; + } +} + +/* Emit debug info for parameters and unreferenced variables with + initializers. */ + +static void +gfc_emit_parameter_debug_info (gfc_symbol *sym) +{ + tree decl; + + if (sym->attr.flavor != FL_PARAMETER + && (sym->attr.flavor != FL_VARIABLE || sym->attr.referenced)) + return; + + if (sym->backend_decl != NULL + || sym->value == NULL + || sym->attr.use_assoc + || sym->attr.dummy + || sym->attr.result + || sym->attr.function + || sym->attr.intrinsic + || sym->attr.pointer + || sym->attr.allocatable + || sym->attr.cray_pointee + || sym->attr.threadprivate + || sym->attr.is_bind_c + || sym->attr.subref_array_pointer + || sym->attr.assign) + return; + + if (sym->ts.type == BT_CHARACTER) + { + gfc_conv_const_charlen (sym->ts.cl); + if (sym->ts.cl->backend_decl == NULL + || TREE_CODE (sym->ts.cl->backend_decl) != INTEGER_CST) + return; + } + else if (sym->ts.type == BT_DERIVED && sym->ts.derived->attr.alloc_comp) + return; + + if (sym->as) + { + int n; + + if (sym->as->type != AS_EXPLICIT) + return; + for (n = 0; n < sym->as->rank; n++) + if (sym->as->lower[n]->expr_type != EXPR_CONSTANT + || sym->as->upper[n] == NULL + || sym->as->upper[n]->expr_type != EXPR_CONSTANT) + return; + } + + if (!check_constant_initializer (sym->value, &sym->ts, + sym->attr.dimension, false)) + return; + + /* Create the decl for the variable or constant. */ + decl = build_decl (sym->attr.flavor == FL_PARAMETER ? CONST_DECL : VAR_DECL, + gfc_sym_identifier (sym), gfc_sym_type (sym)); + if (sym->attr.flavor == FL_PARAMETER) + TREE_READONLY (decl) = 1; + gfc_set_decl_location (decl, &sym->declared_at); + if (sym->attr.dimension) + GFC_DECL_PACKED_ARRAY (decl) = 1; + DECL_CONTEXT (decl) = sym->ns->proc_name->backend_decl; + TREE_STATIC (decl) = 1; + TREE_USED (decl) = 1; + if (DECL_CONTEXT (decl) && TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL) + TREE_PUBLIC (decl) = 1; + DECL_INITIAL (decl) + = gfc_conv_initializer (sym->value, &sym->ts, TREE_TYPE (decl), + sym->attr.dimension, 0); + debug_hooks->global_decl (decl); +} + +/* Generate all the required code for module variables. */ + +void +gfc_generate_module_vars (gfc_namespace * ns) +{ + module_namespace = ns; + cur_module = gfc_find_module (ns->proc_name->name); + + /* Check if the frontend left the namespace in a reasonable state. */ + gcc_assert (ns->proc_name && !ns->proc_name->tlink); + + /* Generate COMMON blocks. */ + gfc_trans_common (ns); + + /* Create decls for all the module variables. */ + gfc_traverse_ns (ns, gfc_create_module_variable); + + cur_module = NULL; + + gfc_trans_use_stmts (ns); + gfc_traverse_ns (ns, gfc_emit_parameter_debug_info); +} + + +static void +gfc_generate_contained_functions (gfc_namespace * parent) +{ + gfc_namespace *ns; + + /* We create all the prototypes before generating any code. */ + for (ns = parent->contained; ns; ns = ns->sibling) + { + /* Skip namespaces from used modules. */ + if (ns->parent != parent) + continue; + + gfc_create_function_decl (ns); + } + + for (ns = parent->contained; ns; ns = ns->sibling) + { + /* Skip namespaces from used modules. */ + if (ns->parent != parent) + continue; + + gfc_generate_function_code (ns); + } +} + + +/* Drill down through expressions for the array specification bounds and + character length calling generate_local_decl for all those variables + that have not already been declared. */ + +static void +generate_local_decl (gfc_symbol *); + +/* Traverse expr, marking all EXPR_VARIABLE symbols referenced. */ + +static bool +expr_decls (gfc_expr *e, gfc_symbol *sym, + int *f ATTRIBUTE_UNUSED) +{ + if (e->expr_type != EXPR_VARIABLE + || sym == e->symtree->n.sym + || e->symtree->n.sym->mark + || e->symtree->n.sym->ns != sym->ns) + return false; + + generate_local_decl (e->symtree->n.sym); + return false; +} + +static void +generate_expr_decls (gfc_symbol *sym, gfc_expr *e) +{ + gfc_traverse_expr (e, sym, expr_decls, 0); +} + + +/* Check for dependencies in the character length and array spec. */ + +static void +generate_dependency_declarations (gfc_symbol *sym) +{ + int i; + + if (sym->ts.type == BT_CHARACTER + && sym->ts.cl + && sym->ts.cl->length + && sym->ts.cl->length->expr_type != EXPR_CONSTANT) + generate_expr_decls (sym, sym->ts.cl->length); + + if (sym->as && sym->as->rank) + { + for (i = 0; i < sym->as->rank; i++) + { + generate_expr_decls (sym, sym->as->lower[i]); + generate_expr_decls (sym, sym->as->upper[i]); + } + } +} + + +/* Generate decls for all local variables. We do this to ensure correct + handling of expressions which only appear in the specification of + other functions. */ + +static void +generate_local_decl (gfc_symbol * sym) +{ + if (sym->attr.flavor == FL_VARIABLE) + { + if (!sym->attr.dummy && !sym->ns->proc_name->attr.entry_master) + generate_dependency_declarations (sym); + + if (sym->attr.referenced) + gfc_get_symbol_decl (sym); + /* INTENT(out) dummy arguments are likely meant to be set. */ + else if (warn_unused_variable + && sym->attr.dummy + && sym->attr.intent == INTENT_OUT) + gfc_warning ("Dummy argument '%s' at %L was declared INTENT(OUT) but was not set", + sym->name, &sym->declared_at); + /* Specific warning for unused dummy arguments. */ + else if (warn_unused_variable && sym->attr.dummy) + gfc_warning ("Unused dummy argument '%s' at %L", sym->name, + &sym->declared_at); + /* Warn for unused variables, but not if they're inside a common + block or are use-associated. */ + else if (warn_unused_variable + && !(sym->attr.in_common || sym->attr.use_assoc || sym->mark)) + gfc_warning ("Unused variable '%s' declared at %L", sym->name, + &sym->declared_at); + + /* For variable length CHARACTER parameters, the PARM_DECL already + references the length variable, so force gfc_get_symbol_decl + even when not referenced. If optimize > 0, it will be optimized + away anyway. But do this only after emitting -Wunused-parameter + warning if requested. */ + if (sym->attr.dummy && !sym->attr.referenced + && sym->ts.type == BT_CHARACTER + && sym->ts.cl->backend_decl != NULL + && TREE_CODE (sym->ts.cl->backend_decl) == VAR_DECL) + { + sym->attr.referenced = 1; + gfc_get_symbol_decl (sym); + } + + /* INTENT(out) dummy arguments with allocatable components are reset + by default and need to be set referenced to generate the code for + automatic lengths. */ + if (sym->attr.dummy && !sym->attr.referenced + && sym->ts.type == BT_DERIVED + && sym->ts.derived->attr.alloc_comp + && sym->attr.intent == INTENT_OUT) + { + sym->attr.referenced = 1; + gfc_get_symbol_decl (sym); + } + + + /* Check for dependencies in the array specification and string + length, adding the necessary declarations to the function. We + mark the symbol now, as well as in traverse_ns, to prevent + getting stuck in a circular dependency. */ + sym->mark = 1; + + /* We do not want the middle-end to warn about unused parameters + as this was already done above. */ + if (sym->attr.dummy && sym->backend_decl != NULL_TREE) + TREE_NO_WARNING(sym->backend_decl) = 1; + } + else if (sym->attr.flavor == FL_PARAMETER) + { + if (warn_unused_parameter + && !sym->attr.referenced + && !sym->attr.use_assoc) + gfc_warning ("Unused parameter '%s' declared at %L", sym->name, + &sym->declared_at); + } + else if (sym->attr.flavor == FL_PROCEDURE) + { + /* TODO: move to the appropriate place in resolve.c. */ + if (warn_return_type + && sym->attr.function + && sym->result + && sym != sym->result + && !sym->result->attr.referenced + && !sym->attr.use_assoc + && sym->attr.if_source != IFSRC_IFBODY) + { + gfc_warning ("Return value '%s' of function '%s' declared at " + "%L not set", sym->result->name, sym->name, + &sym->result->declared_at); + + /* Prevents "Unused variable" warning for RESULT variables. */ + sym->result->mark = 1; + } + } + + if (sym->attr.dummy == 1) + { + /* Modify the tree type for scalar character dummy arguments of bind(c) + procedures if they are passed by value. The tree type for them will + be promoted to INTEGER_TYPE for the middle end, which appears to be + what C would do with characters passed by-value. The value attribute + implies the dummy is a scalar. */ + if (sym->attr.value == 1 && sym->backend_decl != NULL + && sym->ts.type == BT_CHARACTER && sym->ts.is_c_interop + && sym->ns->proc_name != NULL && sym->ns->proc_name->attr.is_bind_c) + gfc_conv_scalar_char_value (sym, NULL, NULL); + } + + /* Make sure we convert the types of the derived types from iso_c_binding + into (void *). */ + if (sym->attr.flavor != FL_PROCEDURE && sym->attr.is_iso_c + && sym->ts.type == BT_DERIVED) + sym->backend_decl = gfc_typenode_for_spec (&(sym->ts)); +} + +static void +generate_local_vars (gfc_namespace * ns) +{ + gfc_traverse_ns (ns, generate_local_decl); +} + + +/* Generate a switch statement to jump to the correct entry point. Also + creates the label decls for the entry points. */ + +static tree +gfc_trans_entry_master_switch (gfc_entry_list * el) +{ + stmtblock_t block; + tree label; + tree tmp; + tree val; + + gfc_init_block (&block); + for (; el; el = el->next) + { + /* Add the case label. */ + label = gfc_build_label_decl (NULL_TREE); + val = build_int_cst (gfc_array_index_type, el->id); + tmp = build3_v (CASE_LABEL_EXPR, val, NULL_TREE, label); + gfc_add_expr_to_block (&block, tmp); + + /* And jump to the actual entry point. */ + label = gfc_build_label_decl (NULL_TREE); + tmp = build1_v (GOTO_EXPR, label); + gfc_add_expr_to_block (&block, tmp); + + /* Save the label decl. */ + el->label = label; + } + tmp = gfc_finish_block (&block); + /* The first argument selects the entry point. */ + val = DECL_ARGUMENTS (current_function_decl); + tmp = build3_v (SWITCH_EXPR, val, tmp, NULL_TREE); + return tmp; +} + + +/* Generate code for a function. */ + +void +gfc_generate_function_code (gfc_namespace * ns) +{ + tree fndecl; + tree old_context; + tree decl; + tree tmp; + tree tmp2; + stmtblock_t block; + stmtblock_t body; + tree result; + gfc_symbol *sym; + int rank; + + sym = ns->proc_name; + + /* Check that the frontend isn't still using this. */ + gcc_assert (sym->tlink == NULL); + sym->tlink = sym; + + /* Create the declaration for functions with global scope. */ + if (!sym->backend_decl) + gfc_create_function_decl (ns); + + fndecl = sym->backend_decl; + old_context = current_function_decl; + + if (old_context) + { + push_function_context (); + saved_parent_function_decls = saved_function_decls; + saved_function_decls = NULL_TREE; + } + + trans_function_start (sym); + + gfc_init_block (&block); + + if (ns->entries && ns->proc_name->ts.type == BT_CHARACTER) + { + /* Copy length backend_decls to all entry point result + symbols. */ + gfc_entry_list *el; + tree backend_decl; + + gfc_conv_const_charlen (ns->proc_name->ts.cl); + backend_decl = ns->proc_name->result->ts.cl->backend_decl; + for (el = ns->entries; el; el = el->next) + el->sym->result->ts.cl->backend_decl = backend_decl; + } + + /* Translate COMMON blocks. */ + gfc_trans_common (ns); + + /* Null the parent fake result declaration if this namespace is + a module function or an external procedures. */ + if ((ns->parent && ns->parent->proc_name->attr.flavor == FL_MODULE) + || ns->parent == NULL) + parent_fake_result_decl = NULL_TREE; + + gfc_generate_contained_functions (ns); + + generate_local_vars (ns); + + /* Keep the parent fake result declaration in module functions + or external procedures. */ + if ((ns->parent && ns->parent->proc_name->attr.flavor == FL_MODULE) + || ns->parent == NULL) + current_fake_result_decl = parent_fake_result_decl; + else + current_fake_result_decl = NULL_TREE; + + current_function_return_label = NULL; + + /* Now generate the code for the body of this function. */ + gfc_init_block (&body); + + /* If this is the main program, add a call to set_options to set up the + runtime library Fortran language standard parameters. */ + if (sym->attr.is_main_program) + { + tree array_type, array, var; + + /* Passing a new option to the library requires four modifications: + + add it to the tree_cons list below + + change the array size in the call to build_array_type + + change the first argument to the library call + gfor_fndecl_set_options + + modify the library (runtime/compile_options.c)! */ + array = tree_cons (NULL_TREE, + build_int_cst (integer_type_node, + gfc_option.warn_std), NULL_TREE); + array = tree_cons (NULL_TREE, + build_int_cst (integer_type_node, + gfc_option.allow_std), array); + array = tree_cons (NULL_TREE, + build_int_cst (integer_type_node, pedantic), array); + array = tree_cons (NULL_TREE, + build_int_cst (integer_type_node, + gfc_option.flag_dump_core), array); + array = tree_cons (NULL_TREE, + build_int_cst (integer_type_node, + gfc_option.flag_backtrace), array); + array = tree_cons (NULL_TREE, + build_int_cst (integer_type_node, + gfc_option.flag_sign_zero), array); + + array = tree_cons (NULL_TREE, + build_int_cst (integer_type_node, + flag_bounds_check), array); + + array = tree_cons (NULL_TREE, + build_int_cst (integer_type_node, + gfc_option.flag_range_check), array); + + array_type = build_array_type (integer_type_node, + build_index_type (build_int_cst (NULL_TREE, + 7))); + array = build_constructor_from_list (array_type, nreverse (array)); + TREE_CONSTANT (array) = 1; + TREE_STATIC (array) = 1; + + /* Create a static variable to hold the jump table. */ + var = gfc_create_var (array_type, "options"); + TREE_CONSTANT (var) = 1; + TREE_STATIC (var) = 1; + TREE_READONLY (var) = 1; + DECL_INITIAL (var) = array; + var = gfc_build_addr_expr (pvoid_type_node, var); + + tmp = build_call_expr (gfor_fndecl_set_options, 2, + build_int_cst (integer_type_node, 8), var); + gfc_add_expr_to_block (&body, tmp); + } + + /* If this is the main program and a -ffpe-trap option was provided, + add a call to set_fpe so that the library will raise a FPE when + needed. */ + if (sym->attr.is_main_program && gfc_option.fpe != 0) + { + tmp = build_call_expr (gfor_fndecl_set_fpe, 1, + build_int_cst (integer_type_node, + gfc_option.fpe)); + gfc_add_expr_to_block (&body, tmp); + } + + /* If this is the main program and an -fconvert option was provided, + add a call to set_convert. */ + + if (sym->attr.is_main_program && gfc_option.convert != GFC_CONVERT_NATIVE) + { + tmp = build_call_expr (gfor_fndecl_set_convert, 1, + build_int_cst (integer_type_node, + gfc_option.convert)); + gfc_add_expr_to_block (&body, tmp); + } + + /* If this is the main program and an -frecord-marker option was provided, + add a call to set_record_marker. */ + + if (sym->attr.is_main_program && gfc_option.record_marker != 0) + { + tmp = build_call_expr (gfor_fndecl_set_record_marker, 1, + build_int_cst (integer_type_node, + gfc_option.record_marker)); + gfc_add_expr_to_block (&body, tmp); + } + + if (sym->attr.is_main_program && gfc_option.max_subrecord_length != 0) + { + tmp = build_call_expr (gfor_fndecl_set_max_subrecord_length, + 1, + build_int_cst (integer_type_node, + gfc_option.max_subrecord_length)); + gfc_add_expr_to_block (&body, tmp); + } + + if (TREE_TYPE (DECL_RESULT (fndecl)) != void_type_node + && sym->attr.subroutine) + { + tree alternate_return; + alternate_return = gfc_get_fake_result_decl (sym, 0); + gfc_add_modify (&body, alternate_return, integer_zero_node); + } + + if (ns->entries) + { + /* Jump to the correct entry point. */ + tmp = gfc_trans_entry_master_switch (ns->entries); + gfc_add_expr_to_block (&body, tmp); + } + + tmp = gfc_trans_code (ns->code); + gfc_add_expr_to_block (&body, tmp); + + /* Add a return label if needed. */ + if (current_function_return_label) + { + tmp = build1_v (LABEL_EXPR, current_function_return_label); + gfc_add_expr_to_block (&body, tmp); + } + + tmp = gfc_finish_block (&body); + /* Add code to create and cleanup arrays. */ + tmp = gfc_trans_deferred_vars (sym, tmp); + + if (TREE_TYPE (DECL_RESULT (fndecl)) != void_type_node) + { + if (sym->attr.subroutine || sym == sym->result) + { + if (current_fake_result_decl != NULL) + result = TREE_VALUE (current_fake_result_decl); + else + result = NULL_TREE; + current_fake_result_decl = NULL_TREE; + } + else + result = sym->result->backend_decl; + + if (result != NULL_TREE && sym->attr.function + && sym->ts.type == BT_DERIVED + && sym->ts.derived->attr.alloc_comp + && !sym->attr.pointer) + { + rank = sym->as ? sym->as->rank : 0; + tmp2 = gfc_nullify_alloc_comp (sym->ts.derived, result, rank); + gfc_add_expr_to_block (&block, tmp2); + } + + gfc_add_expr_to_block (&block, tmp); + + if (result == NULL_TREE) + { + /* TODO: move to the appropriate place in resolve.c. */ + if (warn_return_type && !sym->attr.referenced && sym == sym->result) + gfc_warning ("Return value of function '%s' at %L not set", + sym->name, &sym->declared_at); + + TREE_NO_WARNING(sym->backend_decl) = 1; + } + else + { + /* Set the return value to the dummy result variable. The + types may be different for scalar default REAL functions + with -ff2c, therefore we have to convert. */ + tmp = convert (TREE_TYPE (DECL_RESULT (fndecl)), result); + tmp = fold_build2 (MODIFY_EXPR, TREE_TYPE (tmp), + DECL_RESULT (fndecl), tmp); + tmp = build1_v (RETURN_EXPR, tmp); + gfc_add_expr_to_block (&block, tmp); + } + } + else + gfc_add_expr_to_block (&block, tmp); + + + /* Add all the decls we created during processing. */ + decl = saved_function_decls; + while (decl) + { + tree next; + + next = TREE_CHAIN (decl); + TREE_CHAIN (decl) = NULL_TREE; + pushdecl (decl); + decl = next; + } + saved_function_decls = NULL_TREE; + + DECL_SAVED_TREE (fndecl) = gfc_finish_block (&block); + decl = getdecls (); + + /* Finish off this function and send it for code generation. */ + poplevel (1, 0, 1); + BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl; + + DECL_SAVED_TREE (fndecl) + = build3_v (BIND_EXPR, decl, DECL_SAVED_TREE (fndecl), + DECL_INITIAL (fndecl)); + + /* Output the GENERIC tree. */ + dump_function (TDI_original, fndecl); + + /* Store the end of the function, so that we get good line number + info for the epilogue. */ + cfun->function_end_locus = input_location; + + /* We're leaving the context of this function, so zap cfun. + It's still in DECL_STRUCT_FUNCTION, and we'll restore it in + tree_rest_of_compilation. */ + set_cfun (NULL); + + if (old_context) + { + pop_function_context (); + saved_function_decls = saved_parent_function_decls; + } + current_function_decl = old_context; + + if (decl_function_context (fndecl)) + /* Register this function with cgraph just far enough to get it + added to our parent's nested function list. */ + (void) cgraph_node (fndecl); + else + { + gfc_gimplify_function (fndecl); + cgraph_finalize_function (fndecl, false); + } + + gfc_trans_use_stmts (ns); + gfc_traverse_ns (ns, gfc_emit_parameter_debug_info); +} + +void +gfc_generate_constructors (void) +{ + gcc_assert (gfc_static_ctors == NULL_TREE); +#if 0 + tree fnname; + tree type; + tree fndecl; + tree decl; + tree tmp; + + if (gfc_static_ctors == NULL_TREE) + return; + + fnname = get_file_function_name ("I"); + type = build_function_type (void_type_node, + gfc_chainon_list (NULL_TREE, void_type_node)); + + fndecl = build_decl (FUNCTION_DECL, fnname, type); + TREE_PUBLIC (fndecl) = 1; + + decl = build_decl (RESULT_DECL, NULL_TREE, void_type_node); + DECL_ARTIFICIAL (decl) = 1; + DECL_IGNORED_P (decl) = 1; + DECL_CONTEXT (decl) = fndecl; + DECL_RESULT (fndecl) = decl; + + pushdecl (fndecl); + + current_function_decl = fndecl; + + rest_of_decl_compilation (fndecl, 1, 0); + + make_decl_rtl (fndecl); + + init_function_start (fndecl); + + pushlevel (0); + + for (; gfc_static_ctors; gfc_static_ctors = TREE_CHAIN (gfc_static_ctors)) + { + tmp = build_call_expr (TREE_VALUE (gfc_static_ctors), 0); + DECL_SAVED_TREE (fndecl) = build_stmt (EXPR_STMT, tmp); + } + + decl = getdecls (); + poplevel (1, 0, 1); + + BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl; + DECL_SAVED_TREE (fndecl) + = build3_v (BIND_EXPR, decl, DECL_SAVED_TREE (fndecl), + DECL_INITIAL (fndecl)); + + free_after_parsing (cfun); + free_after_compilation (cfun); + + tree_rest_of_compilation (fndecl); + + current_function_decl = NULL_TREE; +#endif +} + +/* Translates a BLOCK DATA program unit. This means emitting the + commons contained therein plus their initializations. We also emit + a globally visible symbol to make sure that each BLOCK DATA program + unit remains unique. */ + +void +gfc_generate_block_data (gfc_namespace * ns) +{ + tree decl; + tree id; + + /* Tell the backend the source location of the block data. */ + if (ns->proc_name) + gfc_set_backend_locus (&ns->proc_name->declared_at); + else + gfc_set_backend_locus (&gfc_current_locus); + + /* Process the DATA statements. */ + gfc_trans_common (ns); + + /* Create a global symbol with the mane of the block data. This is to + generate linker errors if the same name is used twice. It is never + really used. */ + if (ns->proc_name) + id = gfc_sym_mangled_function_id (ns->proc_name); + else + id = get_identifier ("__BLOCK_DATA__"); + + decl = build_decl (VAR_DECL, id, gfc_array_index_type); + TREE_PUBLIC (decl) = 1; + TREE_STATIC (decl) = 1; + DECL_IGNORED_P (decl) = 1; + + pushdecl (decl); + rest_of_decl_compilation (decl, 1, 0); +} + + +#include "gt-fortran-trans-decl.h" diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-expr.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-expr.c new file mode 100644 index 0000000000..8c869f977c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-expr.c @@ -0,0 +1,4836 @@ +/* Expression translation + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Paul Brook + and Steven Bosscher + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* trans-expr.c-- generate GENERIC trees for gfc_expr. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "convert.h" +#include "ggc.h" +#include "toplev.h" +#include "real.h" +#include "gimple.h" +#include "langhooks.h" +#include "flags.h" +#include "gfortran.h" +#include "arith.h" +#include "trans.h" +#include "trans-const.h" +#include "trans-types.h" +#include "trans-array.h" +/* Only for gfc_trans_assign and gfc_trans_pointer_assign. */ +#include "trans-stmt.h" +#include "dependency.h" + +static tree gfc_trans_structure_assign (tree dest, gfc_expr * expr); +static void gfc_apply_interface_mapping_to_expr (gfc_interface_mapping *, + gfc_expr *); + +/* Copy the scalarization loop variables. */ + +static void +gfc_copy_se_loopvars (gfc_se * dest, gfc_se * src) +{ + dest->ss = src->ss; + dest->loop = src->loop; +} + + +/* Initialize a simple expression holder. + + Care must be taken when multiple se are created with the same parent. + The child se must be kept in sync. The easiest way is to delay creation + of a child se until after after the previous se has been translated. */ + +void +gfc_init_se (gfc_se * se, gfc_se * parent) +{ + memset (se, 0, sizeof (gfc_se)); + gfc_init_block (&se->pre); + gfc_init_block (&se->post); + + se->parent = parent; + + if (parent) + gfc_copy_se_loopvars (se, parent); +} + + +/* Advances to the next SS in the chain. Use this rather than setting + se->ss = se->ss->next because all the parents needs to be kept in sync. + See gfc_init_se. */ + +void +gfc_advance_se_ss_chain (gfc_se * se) +{ + gfc_se *p; + + gcc_assert (se != NULL && se->ss != NULL && se->ss != gfc_ss_terminator); + + p = se; + /* Walk down the parent chain. */ + while (p != NULL) + { + /* Simple consistency check. */ + gcc_assert (p->parent == NULL || p->parent->ss == p->ss); + + p->ss = p->ss->next; + + p = p->parent; + } +} + + +/* Ensures the result of the expression as either a temporary variable + or a constant so that it can be used repeatedly. */ + +void +gfc_make_safe_expr (gfc_se * se) +{ + tree var; + + if (CONSTANT_CLASS_P (se->expr)) + return; + + /* We need a temporary for this result. */ + var = gfc_create_var (TREE_TYPE (se->expr), NULL); + gfc_add_modify (&se->pre, var, se->expr); + se->expr = var; +} + + +/* Return an expression which determines if a dummy parameter is present. + Also used for arguments to procedures with multiple entry points. */ + +tree +gfc_conv_expr_present (gfc_symbol * sym) +{ + tree decl; + + gcc_assert (sym->attr.dummy); + + decl = gfc_get_symbol_decl (sym); + if (TREE_CODE (decl) != PARM_DECL) + { + /* Array parameters use a temporary descriptor, we want the real + parameter. */ + gcc_assert (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)) + || GFC_ARRAY_TYPE_P (TREE_TYPE (decl))); + decl = GFC_DECL_SAVED_DESCRIPTOR (decl); + } + return fold_build2 (NE_EXPR, boolean_type_node, decl, + fold_convert (TREE_TYPE (decl), null_pointer_node)); +} + + +/* Converts a missing, dummy argument into a null or zero. */ + +void +gfc_conv_missing_dummy (gfc_se * se, gfc_expr * arg, gfc_typespec ts, int kind) +{ + tree present; + tree tmp; + + present = gfc_conv_expr_present (arg->symtree->n.sym); + + if (kind > 0) + { + /* Create a temporary and convert it to the correct type. */ + tmp = gfc_get_int_type (kind); + tmp = fold_convert (tmp, build_fold_indirect_ref (se->expr)); + + /* Test for a NULL value. */ + tmp = build3 (COND_EXPR, TREE_TYPE (tmp), present, tmp, + fold_convert (TREE_TYPE (tmp), integer_one_node)); + tmp = gfc_evaluate_now (tmp, &se->pre); + se->expr = build_fold_addr_expr (tmp); + } + else + { + tmp = build3 (COND_EXPR, TREE_TYPE (se->expr), present, se->expr, + fold_convert (TREE_TYPE (se->expr), integer_zero_node)); + tmp = gfc_evaluate_now (tmp, &se->pre); + se->expr = tmp; + } + + if (ts.type == BT_CHARACTER) + { + tmp = build_int_cst (gfc_charlen_type_node, 0); + tmp = fold_build3 (COND_EXPR, gfc_charlen_type_node, + present, se->string_length, tmp); + tmp = gfc_evaluate_now (tmp, &se->pre); + se->string_length = tmp; + } + return; +} + + +/* Get the character length of an expression, looking through gfc_refs + if necessary. */ + +tree +gfc_get_expr_charlen (gfc_expr *e) +{ + gfc_ref *r; + tree length; + + gcc_assert (e->expr_type == EXPR_VARIABLE + && e->ts.type == BT_CHARACTER); + + length = NULL; /* To silence compiler warning. */ + + if (is_subref_array (e) && e->ts.cl->length) + { + gfc_se tmpse; + gfc_init_se (&tmpse, NULL); + gfc_conv_expr_type (&tmpse, e->ts.cl->length, gfc_charlen_type_node); + e->ts.cl->backend_decl = tmpse.expr; + return tmpse.expr; + } + + /* First candidate: if the variable is of type CHARACTER, the + expression's length could be the length of the character + variable. */ + if (e->symtree->n.sym->ts.type == BT_CHARACTER) + length = e->symtree->n.sym->ts.cl->backend_decl; + + /* Look through the reference chain for component references. */ + for (r = e->ref; r; r = r->next) + { + switch (r->type) + { + case REF_COMPONENT: + if (r->u.c.component->ts.type == BT_CHARACTER) + length = r->u.c.component->ts.cl->backend_decl; + break; + + case REF_ARRAY: + /* Do nothing. */ + break; + + default: + /* We should never got substring references here. These will be + broken down by the scalarizer. */ + gcc_unreachable (); + break; + } + } + + gcc_assert (length != NULL); + return length; +} + + +/* For each character array constructor subexpression without a ts.cl->length, + replace it by its first element (if there aren't any elements, the length + should already be set to zero). */ + +static void +flatten_array_ctors_without_strlen (gfc_expr* e) +{ + gfc_actual_arglist* arg; + gfc_constructor* c; + + if (!e) + return; + + switch (e->expr_type) + { + + case EXPR_OP: + flatten_array_ctors_without_strlen (e->value.op.op1); + flatten_array_ctors_without_strlen (e->value.op.op2); + break; + + case EXPR_COMPCALL: + /* TODO: Implement as with EXPR_FUNCTION when needed. */ + gcc_unreachable (); + + case EXPR_FUNCTION: + for (arg = e->value.function.actual; arg; arg = arg->next) + flatten_array_ctors_without_strlen (arg->expr); + break; + + case EXPR_ARRAY: + + /* We've found what we're looking for. */ + if (e->ts.type == BT_CHARACTER && !e->ts.cl->length) + { + gfc_expr* new_expr; + gcc_assert (e->value.constructor); + + new_expr = e->value.constructor->expr; + e->value.constructor->expr = NULL; + + flatten_array_ctors_without_strlen (new_expr); + gfc_replace_expr (e, new_expr); + break; + } + + /* Otherwise, fall through to handle constructor elements. */ + case EXPR_STRUCTURE: + for (c = e->value.constructor; c; c = c->next) + flatten_array_ctors_without_strlen (c->expr); + break; + + default: + break; + + } +} + + +/* Generate code to initialize a string length variable. Returns the + value. For array constructors, cl->length might be NULL and in this case, + the first element of the constructor is needed. expr is the original + expression so we can access it but can be NULL if this is not needed. */ + +void +gfc_conv_string_length (gfc_charlen * cl, gfc_expr * expr, stmtblock_t * pblock) +{ + gfc_se se; + + gfc_init_se (&se, NULL); + + /* If cl->length is NULL, use gfc_conv_expr to obtain the string length but + "flatten" array constructors by taking their first element; all elements + should be the same length or a cl->length should be present. */ + if (!cl->length) + { + gfc_expr* expr_flat; + gcc_assert (expr); + + expr_flat = gfc_copy_expr (expr); + flatten_array_ctors_without_strlen (expr_flat); + gfc_resolve_expr (expr_flat); + + gfc_conv_expr (&se, expr_flat); + gfc_add_block_to_block (pblock, &se.pre); + cl->backend_decl = convert (gfc_charlen_type_node, se.string_length); + + gfc_free_expr (expr_flat); + return; + } + + /* Convert cl->length. */ + + gcc_assert (cl->length); + + gfc_conv_expr_type (&se, cl->length, gfc_charlen_type_node); + se.expr = fold_build2 (MAX_EXPR, gfc_charlen_type_node, se.expr, + build_int_cst (gfc_charlen_type_node, 0)); + gfc_add_block_to_block (pblock, &se.pre); + + if (cl->backend_decl) + gfc_add_modify (pblock, cl->backend_decl, se.expr); + else + cl->backend_decl = gfc_evaluate_now (se.expr, pblock); +} + + +static void +gfc_conv_substring (gfc_se * se, gfc_ref * ref, int kind, + const char *name, locus *where) +{ + tree tmp; + tree type; + tree var; + tree fault; + gfc_se start; + gfc_se end; + char *msg; + + type = gfc_get_character_type (kind, ref->u.ss.length); + type = build_pointer_type (type); + + var = NULL_TREE; + gfc_init_se (&start, se); + gfc_conv_expr_type (&start, ref->u.ss.start, gfc_charlen_type_node); + gfc_add_block_to_block (&se->pre, &start.pre); + + if (integer_onep (start.expr)) + gfc_conv_string_parameter (se); + else + { + /* Avoid multiple evaluation of substring start. */ + if (!CONSTANT_CLASS_P (start.expr) && !DECL_P (start.expr)) + start.expr = gfc_evaluate_now (start.expr, &se->pre); + + /* Change the start of the string. */ + if (TYPE_STRING_FLAG (TREE_TYPE (se->expr))) + tmp = se->expr; + else + tmp = build_fold_indirect_ref (se->expr); + tmp = gfc_build_array_ref (tmp, start.expr, NULL); + se->expr = gfc_build_addr_expr (type, tmp); + } + + /* Length = end + 1 - start. */ + gfc_init_se (&end, se); + if (ref->u.ss.end == NULL) + end.expr = se->string_length; + else + { + gfc_conv_expr_type (&end, ref->u.ss.end, gfc_charlen_type_node); + gfc_add_block_to_block (&se->pre, &end.pre); + } + if (!CONSTANT_CLASS_P (end.expr) && !DECL_P (end.expr)) + end.expr = gfc_evaluate_now (end.expr, &se->pre); + + if (flag_bounds_check) + { + tree nonempty = fold_build2 (LE_EXPR, boolean_type_node, + start.expr, end.expr); + + /* Check lower bound. */ + fault = fold_build2 (LT_EXPR, boolean_type_node, start.expr, + build_int_cst (gfc_charlen_type_node, 1)); + fault = fold_build2 (TRUTH_ANDIF_EXPR, boolean_type_node, + nonempty, fault); + if (name) + asprintf (&msg, "Substring out of bounds: lower bound (%%ld) of '%s' " + "is less than one", name); + else + asprintf (&msg, "Substring out of bounds: lower bound (%%ld)" + "is less than one"); + gfc_trans_runtime_check (true, false, fault, &se->pre, where, msg, + fold_convert (long_integer_type_node, + start.expr)); + gfc_free (msg); + + /* Check upper bound. */ + fault = fold_build2 (GT_EXPR, boolean_type_node, end.expr, + se->string_length); + fault = fold_build2 (TRUTH_ANDIF_EXPR, boolean_type_node, + nonempty, fault); + if (name) + asprintf (&msg, "Substring out of bounds: upper bound (%%ld) of '%s' " + "exceeds string length (%%ld)", name); + else + asprintf (&msg, "Substring out of bounds: upper bound (%%ld) " + "exceeds string length (%%ld)"); + gfc_trans_runtime_check (true, false, fault, &se->pre, where, msg, + fold_convert (long_integer_type_node, end.expr), + fold_convert (long_integer_type_node, + se->string_length)); + gfc_free (msg); + } + + tmp = fold_build2 (MINUS_EXPR, gfc_charlen_type_node, + build_int_cst (gfc_charlen_type_node, 1), + start.expr); + tmp = fold_build2 (PLUS_EXPR, gfc_charlen_type_node, end.expr, tmp); + tmp = fold_build2 (MAX_EXPR, gfc_charlen_type_node, tmp, + build_int_cst (gfc_charlen_type_node, 0)); + se->string_length = tmp; +} + + +/* Convert a derived type component reference. */ + +static void +gfc_conv_component_ref (gfc_se * se, gfc_ref * ref) +{ + gfc_component *c; + tree tmp; + tree decl; + tree field; + + c = ref->u.c.component; + + gcc_assert (c->backend_decl); + + field = c->backend_decl; + gcc_assert (TREE_CODE (field) == FIELD_DECL); + decl = se->expr; + tmp = fold_build3 (COMPONENT_REF, TREE_TYPE (field), decl, field, NULL_TREE); + + se->expr = tmp; + + if (c->ts.type == BT_CHARACTER) + { + tmp = c->ts.cl->backend_decl; + /* Components must always be constant length. */ + gcc_assert (tmp && INTEGER_CST_P (tmp)); + se->string_length = tmp; + } + + if (c->attr.pointer && c->attr.dimension == 0 && c->ts.type != BT_CHARACTER) + se->expr = build_fold_indirect_ref (se->expr); +} + + +/* This function deals with component references to components of the + parent type for derived type extensons. */ +static void +conv_parent_component_references (gfc_se * se, gfc_ref * ref) +{ + gfc_component *c; + gfc_component *cmp; + gfc_symbol *dt; + gfc_ref parent; + + dt = ref->u.c.sym; + c = ref->u.c.component; + + /* Build a gfc_ref to recursively call gfc_conv_component_ref. */ + parent.type = REF_COMPONENT; + parent.next = NULL; + parent.u.c.sym = dt; + parent.u.c.component = dt->components; + + if (dt->attr.extension && dt->components) + { + /* Return if the component is not in the parent type. */ + for (cmp = dt->components->next; cmp; cmp = cmp->next) + if (strcmp (c->name, cmp->name) == 0) + return; + + /* Otherwise build the reference and call self. */ + gfc_conv_component_ref (se, &parent); + parent.u.c.sym = dt->components->ts.derived; + parent.u.c.component = c; + conv_parent_component_references (se, &parent); + } +} + +/* Return the contents of a variable. Also handles reference/pointer + variables (all Fortran pointer references are implicit). */ + +static void +gfc_conv_variable (gfc_se * se, gfc_expr * expr) +{ + gfc_ref *ref; + gfc_symbol *sym; + tree parent_decl; + int parent_flag; + bool return_value; + bool alternate_entry; + bool entry_master; + + sym = expr->symtree->n.sym; + if (se->ss != NULL) + { + /* Check that something hasn't gone horribly wrong. */ + gcc_assert (se->ss != gfc_ss_terminator); + gcc_assert (se->ss->expr == expr); + + /* A scalarized term. We already know the descriptor. */ + se->expr = se->ss->data.info.descriptor; + se->string_length = se->ss->string_length; + for (ref = se->ss->data.info.ref; ref; ref = ref->next) + if (ref->type == REF_ARRAY && ref->u.ar.type != AR_ELEMENT) + break; + } + else + { + tree se_expr = NULL_TREE; + + se->expr = gfc_get_symbol_decl (sym); + + /* Deal with references to a parent results or entries by storing + the current_function_decl and moving to the parent_decl. */ + return_value = sym->attr.function && sym->result == sym; + alternate_entry = sym->attr.function && sym->attr.entry + && sym->result == sym; + entry_master = sym->attr.result + && sym->ns->proc_name->attr.entry_master + && !gfc_return_by_reference (sym->ns->proc_name); + parent_decl = DECL_CONTEXT (current_function_decl); + + if ((se->expr == parent_decl && return_value) + || (sym->ns && sym->ns->proc_name + && parent_decl + && sym->ns->proc_name->backend_decl == parent_decl + && (alternate_entry || entry_master))) + parent_flag = 1; + else + parent_flag = 0; + + /* Special case for assigning the return value of a function. + Self recursive functions must have an explicit return value. */ + if (return_value && (se->expr == current_function_decl || parent_flag)) + se_expr = gfc_get_fake_result_decl (sym, parent_flag); + + /* Similarly for alternate entry points. */ + else if (alternate_entry + && (sym->ns->proc_name->backend_decl == current_function_decl + || parent_flag)) + { + gfc_entry_list *el = NULL; + + for (el = sym->ns->entries; el; el = el->next) + if (sym == el->sym) + { + se_expr = gfc_get_fake_result_decl (sym, parent_flag); + break; + } + } + + else if (entry_master + && (sym->ns->proc_name->backend_decl == current_function_decl + || parent_flag)) + se_expr = gfc_get_fake_result_decl (sym, parent_flag); + + if (se_expr) + se->expr = se_expr; + + /* Procedure actual arguments. */ + else if (sym->attr.flavor == FL_PROCEDURE + && se->expr != current_function_decl) + { + if (!sym->attr.dummy && !sym->attr.proc_pointer) + { + gcc_assert (TREE_CODE (se->expr) == FUNCTION_DECL); + se->expr = build_fold_addr_expr (se->expr); + } + return; + } + + + /* Dereference the expression, where needed. Since characters + are entirely different from other types, they are treated + separately. */ + if (sym->ts.type == BT_CHARACTER) + { + /* Dereference character pointer dummy arguments + or results. */ + if ((sym->attr.pointer || sym->attr.allocatable) + && (sym->attr.dummy + || sym->attr.function + || sym->attr.result)) + se->expr = build_fold_indirect_ref (se->expr); + + } + else if (!sym->attr.value) + { + /* Dereference non-character scalar dummy arguments. */ + if (sym->attr.dummy && !sym->attr.dimension) + se->expr = build_fold_indirect_ref (se->expr); + + /* Dereference scalar hidden result. */ + if (gfc_option.flag_f2c && sym->ts.type == BT_COMPLEX + && (sym->attr.function || sym->attr.result) + && !sym->attr.dimension && !sym->attr.pointer + && !sym->attr.always_explicit) + se->expr = build_fold_indirect_ref (se->expr); + + /* Dereference non-character pointer variables. + These must be dummies, results, or scalars. */ + if ((sym->attr.pointer || sym->attr.allocatable) + && (sym->attr.dummy + || sym->attr.function + || sym->attr.result + || !sym->attr.dimension)) + se->expr = build_fold_indirect_ref (se->expr); + } + + ref = expr->ref; + } + + /* For character variables, also get the length. */ + if (sym->ts.type == BT_CHARACTER) + { + /* If the character length of an entry isn't set, get the length from + the master function instead. */ + if (sym->attr.entry && !sym->ts.cl->backend_decl) + se->string_length = sym->ns->proc_name->ts.cl->backend_decl; + else + se->string_length = sym->ts.cl->backend_decl; + gcc_assert (se->string_length); + } + + while (ref) + { + switch (ref->type) + { + case REF_ARRAY: + /* Return the descriptor if that's what we want and this is an array + section reference. */ + if (se->descriptor_only && ref->u.ar.type != AR_ELEMENT) + return; +/* TODO: Pointers to single elements of array sections, eg elemental subs. */ + /* Return the descriptor for array pointers and allocations. */ + if (se->want_pointer + && ref->next == NULL && (se->descriptor_only)) + return; + + gfc_conv_array_ref (se, &ref->u.ar, sym, &expr->where); + /* Return a pointer to an element. */ + break; + + case REF_COMPONENT: + if (ref->u.c.sym->attr.extension) + conv_parent_component_references (se, ref); + + gfc_conv_component_ref (se, ref); + break; + + case REF_SUBSTRING: + gfc_conv_substring (se, ref, expr->ts.kind, + expr->symtree->name, &expr->where); + break; + + default: + gcc_unreachable (); + break; + } + ref = ref->next; + } + /* Pointer assignment, allocation or pass by reference. Arrays are handled + separately. */ + if (se->want_pointer) + { + if (expr->ts.type == BT_CHARACTER) + gfc_conv_string_parameter (se); + else + se->expr = build_fold_addr_expr (se->expr); + } +} + + +/* Unary ops are easy... Or they would be if ! was a valid op. */ + +static void +gfc_conv_unary_op (enum tree_code code, gfc_se * se, gfc_expr * expr) +{ + gfc_se operand; + tree type; + + gcc_assert (expr->ts.type != BT_CHARACTER); + /* Initialize the operand. */ + gfc_init_se (&operand, se); + gfc_conv_expr_val (&operand, expr->value.op.op1); + gfc_add_block_to_block (&se->pre, &operand.pre); + + type = gfc_typenode_for_spec (&expr->ts); + + /* TRUTH_NOT_EXPR is not a "true" unary operator in GCC. + We must convert it to a compare to 0 (e.g. EQ_EXPR (op1, 0)). + All other unary operators have an equivalent GIMPLE unary operator. */ + if (code == TRUTH_NOT_EXPR) + se->expr = fold_build2 (EQ_EXPR, type, operand.expr, + build_int_cst (type, 0)); + else + se->expr = fold_build1 (code, type, operand.expr); + +} + +/* Expand power operator to optimal multiplications when a value is raised + to a constant integer n. See section 4.6.3, "Evaluation of Powers" of + Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art of Computer + Programming", 3rd Edition, 1998. */ + +/* This code is mostly duplicated from expand_powi in the backend. + We establish the "optimal power tree" lookup table with the defined size. + The items in the table are the exponents used to calculate the index + exponents. Any integer n less than the value can get an "addition chain", + with the first node being one. */ +#define POWI_TABLE_SIZE 256 + +/* The table is from builtins.c. */ +static const unsigned char powi_table[POWI_TABLE_SIZE] = + { + 0, 1, 1, 2, 2, 3, 3, 4, /* 0 - 7 */ + 4, 6, 5, 6, 6, 10, 7, 9, /* 8 - 15 */ + 8, 16, 9, 16, 10, 12, 11, 13, /* 16 - 23 */ + 12, 17, 13, 18, 14, 24, 15, 26, /* 24 - 31 */ + 16, 17, 17, 19, 18, 33, 19, 26, /* 32 - 39 */ + 20, 25, 21, 40, 22, 27, 23, 44, /* 40 - 47 */ + 24, 32, 25, 34, 26, 29, 27, 44, /* 48 - 55 */ + 28, 31, 29, 34, 30, 60, 31, 36, /* 56 - 63 */ + 32, 64, 33, 34, 34, 46, 35, 37, /* 64 - 71 */ + 36, 65, 37, 50, 38, 48, 39, 69, /* 72 - 79 */ + 40, 49, 41, 43, 42, 51, 43, 58, /* 80 - 87 */ + 44, 64, 45, 47, 46, 59, 47, 76, /* 88 - 95 */ + 48, 65, 49, 66, 50, 67, 51, 66, /* 96 - 103 */ + 52, 70, 53, 74, 54, 104, 55, 74, /* 104 - 111 */ + 56, 64, 57, 69, 58, 78, 59, 68, /* 112 - 119 */ + 60, 61, 61, 80, 62, 75, 63, 68, /* 120 - 127 */ + 64, 65, 65, 128, 66, 129, 67, 90, /* 128 - 135 */ + 68, 73, 69, 131, 70, 94, 71, 88, /* 136 - 143 */ + 72, 128, 73, 98, 74, 132, 75, 121, /* 144 - 151 */ + 76, 102, 77, 124, 78, 132, 79, 106, /* 152 - 159 */ + 80, 97, 81, 160, 82, 99, 83, 134, /* 160 - 167 */ + 84, 86, 85, 95, 86, 160, 87, 100, /* 168 - 175 */ + 88, 113, 89, 98, 90, 107, 91, 122, /* 176 - 183 */ + 92, 111, 93, 102, 94, 126, 95, 150, /* 184 - 191 */ + 96, 128, 97, 130, 98, 133, 99, 195, /* 192 - 199 */ + 100, 128, 101, 123, 102, 164, 103, 138, /* 200 - 207 */ + 104, 145, 105, 146, 106, 109, 107, 149, /* 208 - 215 */ + 108, 200, 109, 146, 110, 170, 111, 157, /* 216 - 223 */ + 112, 128, 113, 130, 114, 182, 115, 132, /* 224 - 231 */ + 116, 200, 117, 132, 118, 158, 119, 206, /* 232 - 239 */ + 120, 240, 121, 162, 122, 147, 123, 152, /* 240 - 247 */ + 124, 166, 125, 214, 126, 138, 127, 153, /* 248 - 255 */ + }; + +/* If n is larger than lookup table's max index, we use the "window + method". */ +#define POWI_WINDOW_SIZE 3 + +/* Recursive function to expand the power operator. The temporary + values are put in tmpvar. The function returns tmpvar[1] ** n. */ +static tree +gfc_conv_powi (gfc_se * se, unsigned HOST_WIDE_INT n, tree * tmpvar) +{ + tree op0; + tree op1; + tree tmp; + int digit; + + if (n < POWI_TABLE_SIZE) + { + if (tmpvar[n]) + return tmpvar[n]; + + op0 = gfc_conv_powi (se, n - powi_table[n], tmpvar); + op1 = gfc_conv_powi (se, powi_table[n], tmpvar); + } + else if (n & 1) + { + digit = n & ((1 << POWI_WINDOW_SIZE) - 1); + op0 = gfc_conv_powi (se, n - digit, tmpvar); + op1 = gfc_conv_powi (se, digit, tmpvar); + } + else + { + op0 = gfc_conv_powi (se, n >> 1, tmpvar); + op1 = op0; + } + + tmp = fold_build2 (MULT_EXPR, TREE_TYPE (op0), op0, op1); + tmp = gfc_evaluate_now (tmp, &se->pre); + + if (n < POWI_TABLE_SIZE) + tmpvar[n] = tmp; + + return tmp; +} + + +/* Expand lhs ** rhs. rhs is a constant integer. If it expands successfully, + return 1. Else return 0 and a call to runtime library functions + will have to be built. */ +static int +gfc_conv_cst_int_power (gfc_se * se, tree lhs, tree rhs) +{ + tree cond; + tree tmp; + tree type; + tree vartmp[POWI_TABLE_SIZE]; + HOST_WIDE_INT m; + unsigned HOST_WIDE_INT n; + int sgn; + + /* If exponent is too large, we won't expand it anyway, so don't bother + with large integer values. */ + if (!double_int_fits_in_shwi_p (TREE_INT_CST (rhs))) + return 0; + + m = double_int_to_shwi (TREE_INT_CST (rhs)); + /* There's no ABS for HOST_WIDE_INT, so here we go. It also takes care + of the asymmetric range of the integer type. */ + n = (unsigned HOST_WIDE_INT) (m < 0 ? -m : m); + + type = TREE_TYPE (lhs); + sgn = tree_int_cst_sgn (rhs); + + if (((FLOAT_TYPE_P (type) && !flag_unsafe_math_optimizations) + || optimize_size) && (m > 2 || m < -1)) + return 0; + + /* rhs == 0 */ + if (sgn == 0) + { + se->expr = gfc_build_const (type, integer_one_node); + return 1; + } + + /* If rhs < 0 and lhs is an integer, the result is -1, 0 or 1. */ + if ((sgn == -1) && (TREE_CODE (type) == INTEGER_TYPE)) + { + tmp = fold_build2 (EQ_EXPR, boolean_type_node, + lhs, build_int_cst (TREE_TYPE (lhs), -1)); + cond = fold_build2 (EQ_EXPR, boolean_type_node, + lhs, build_int_cst (TREE_TYPE (lhs), 1)); + + /* If rhs is even, + result = (lhs == 1 || lhs == -1) ? 1 : 0. */ + if ((n & 1) == 0) + { + tmp = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, tmp, cond); + se->expr = fold_build3 (COND_EXPR, type, + tmp, build_int_cst (type, 1), + build_int_cst (type, 0)); + return 1; + } + /* If rhs is odd, + result = (lhs == 1) ? 1 : (lhs == -1) ? -1 : 0. */ + tmp = fold_build3 (COND_EXPR, type, tmp, build_int_cst (type, -1), + build_int_cst (type, 0)); + se->expr = fold_build3 (COND_EXPR, type, + cond, build_int_cst (type, 1), tmp); + return 1; + } + + memset (vartmp, 0, sizeof (vartmp)); + vartmp[1] = lhs; + if (sgn == -1) + { + tmp = gfc_build_const (type, integer_one_node); + vartmp[1] = fold_build2 (RDIV_EXPR, type, tmp, vartmp[1]); + } + + se->expr = gfc_conv_powi (se, n, vartmp); + + return 1; +} + + +/* Power op (**). Constant integer exponent has special handling. */ + +static void +gfc_conv_power_op (gfc_se * se, gfc_expr * expr) +{ + tree gfc_int4_type_node; + int kind; + int ikind; + gfc_se lse; + gfc_se rse; + tree fndecl; + + gfc_init_se (&lse, se); + gfc_conv_expr_val (&lse, expr->value.op.op1); + lse.expr = gfc_evaluate_now (lse.expr, &lse.pre); + gfc_add_block_to_block (&se->pre, &lse.pre); + + gfc_init_se (&rse, se); + gfc_conv_expr_val (&rse, expr->value.op.op2); + gfc_add_block_to_block (&se->pre, &rse.pre); + + if (expr->value.op.op2->ts.type == BT_INTEGER + && expr->value.op.op2->expr_type == EXPR_CONSTANT) + if (gfc_conv_cst_int_power (se, lse.expr, rse.expr)) + return; + + gfc_int4_type_node = gfc_get_int_type (4); + + kind = expr->value.op.op1->ts.kind; + switch (expr->value.op.op2->ts.type) + { + case BT_INTEGER: + ikind = expr->value.op.op2->ts.kind; + switch (ikind) + { + case 1: + case 2: + rse.expr = convert (gfc_int4_type_node, rse.expr); + /* Fall through. */ + + case 4: + ikind = 0; + break; + + case 8: + ikind = 1; + break; + + case 16: + ikind = 2; + break; + + default: + gcc_unreachable (); + } + switch (kind) + { + case 1: + case 2: + if (expr->value.op.op1->ts.type == BT_INTEGER) + lse.expr = convert (gfc_int4_type_node, lse.expr); + else + gcc_unreachable (); + /* Fall through. */ + + case 4: + kind = 0; + break; + + case 8: + kind = 1; + break; + + case 10: + kind = 2; + break; + + case 16: + kind = 3; + break; + + default: + gcc_unreachable (); + } + + switch (expr->value.op.op1->ts.type) + { + case BT_INTEGER: + if (kind == 3) /* Case 16 was not handled properly above. */ + kind = 2; + fndecl = gfor_fndecl_math_powi[kind][ikind].integer; + break; + + case BT_REAL: + /* Use builtins for real ** int4. */ + if (ikind == 0) + { + switch (kind) + { + case 0: + fndecl = built_in_decls[BUILT_IN_POWIF]; + break; + + case 1: + fndecl = built_in_decls[BUILT_IN_POWI]; + break; + + case 2: + case 3: + fndecl = built_in_decls[BUILT_IN_POWIL]; + break; + + default: + gcc_unreachable (); + } + } + else + fndecl = gfor_fndecl_math_powi[kind][ikind].real; + break; + + case BT_COMPLEX: + fndecl = gfor_fndecl_math_powi[kind][ikind].cmplx; + break; + + default: + gcc_unreachable (); + } + break; + + case BT_REAL: + switch (kind) + { + case 4: + fndecl = built_in_decls[BUILT_IN_POWF]; + break; + case 8: + fndecl = built_in_decls[BUILT_IN_POW]; + break; + case 10: + case 16: + fndecl = built_in_decls[BUILT_IN_POWL]; + break; + default: + gcc_unreachable (); + } + break; + + case BT_COMPLEX: + switch (kind) + { + case 4: + fndecl = built_in_decls[BUILT_IN_CPOWF]; + break; + case 8: + fndecl = built_in_decls[BUILT_IN_CPOW]; + break; + case 10: + case 16: + fndecl = built_in_decls[BUILT_IN_CPOWL]; + break; + default: + gcc_unreachable (); + } + break; + + default: + gcc_unreachable (); + break; + } + + se->expr = build_call_expr (fndecl, 2, lse.expr, rse.expr); +} + + +/* Generate code to allocate a string temporary. */ + +tree +gfc_conv_string_tmp (gfc_se * se, tree type, tree len) +{ + tree var; + tree tmp; + + gcc_assert (TREE_TYPE (len) == gfc_charlen_type_node); + + if (gfc_can_put_var_on_stack (len)) + { + /* Create a temporary variable to hold the result. */ + tmp = fold_build2 (MINUS_EXPR, gfc_charlen_type_node, len, + build_int_cst (gfc_charlen_type_node, 1)); + tmp = build_range_type (gfc_array_index_type, gfc_index_zero_node, tmp); + + if (TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE) + tmp = build_array_type (TREE_TYPE (TREE_TYPE (type)), tmp); + else + tmp = build_array_type (TREE_TYPE (type), tmp); + + var = gfc_create_var (tmp, "str"); + var = gfc_build_addr_expr (type, var); + } + else + { + /* Allocate a temporary to hold the result. */ + var = gfc_create_var (type, "pstr"); + tmp = gfc_call_malloc (&se->pre, type, + fold_build2 (MULT_EXPR, TREE_TYPE (len), len, + fold_convert (TREE_TYPE (len), + TYPE_SIZE (type)))); + gfc_add_modify (&se->pre, var, tmp); + + /* Free the temporary afterwards. */ + tmp = gfc_call_free (convert (pvoid_type_node, var)); + gfc_add_expr_to_block (&se->post, tmp); + } + + return var; +} + + +/* Handle a string concatenation operation. A temporary will be allocated to + hold the result. */ + +static void +gfc_conv_concat_op (gfc_se * se, gfc_expr * expr) +{ + gfc_se lse, rse; + tree len, type, var, tmp, fndecl; + + gcc_assert (expr->value.op.op1->ts.type == BT_CHARACTER + && expr->value.op.op2->ts.type == BT_CHARACTER); + gcc_assert (expr->value.op.op1->ts.kind == expr->value.op.op2->ts.kind); + + gfc_init_se (&lse, se); + gfc_conv_expr (&lse, expr->value.op.op1); + gfc_conv_string_parameter (&lse); + gfc_init_se (&rse, se); + gfc_conv_expr (&rse, expr->value.op.op2); + gfc_conv_string_parameter (&rse); + + gfc_add_block_to_block (&se->pre, &lse.pre); + gfc_add_block_to_block (&se->pre, &rse.pre); + + type = gfc_get_character_type (expr->ts.kind, expr->ts.cl); + len = TYPE_MAX_VALUE (TYPE_DOMAIN (type)); + if (len == NULL_TREE) + { + len = fold_build2 (PLUS_EXPR, TREE_TYPE (lse.string_length), + lse.string_length, rse.string_length); + } + + type = build_pointer_type (type); + + var = gfc_conv_string_tmp (se, type, len); + + /* Do the actual concatenation. */ + if (expr->ts.kind == 1) + fndecl = gfor_fndecl_concat_string; + else if (expr->ts.kind == 4) + fndecl = gfor_fndecl_concat_string_char4; + else + gcc_unreachable (); + + tmp = build_call_expr (fndecl, 6, len, var, lse.string_length, lse.expr, + rse.string_length, rse.expr); + gfc_add_expr_to_block (&se->pre, tmp); + + /* Add the cleanup for the operands. */ + gfc_add_block_to_block (&se->pre, &rse.post); + gfc_add_block_to_block (&se->pre, &lse.post); + + se->expr = var; + se->string_length = len; +} + +/* Translates an op expression. Common (binary) cases are handled by this + function, others are passed on. Recursion is used in either case. + We use the fact that (op1.ts == op2.ts) (except for the power + operator **). + Operators need no special handling for scalarized expressions as long as + they call gfc_conv_simple_val to get their operands. + Character strings get special handling. */ + +static void +gfc_conv_expr_op (gfc_se * se, gfc_expr * expr) +{ + enum tree_code code; + gfc_se lse; + gfc_se rse; + tree tmp, type; + int lop; + int checkstring; + + checkstring = 0; + lop = 0; + switch (expr->value.op.op) + { + case INTRINSIC_PARENTHESES: + if (expr->ts.type == BT_REAL + || expr->ts.type == BT_COMPLEX) + { + gfc_conv_unary_op (PAREN_EXPR, se, expr); + gcc_assert (FLOAT_TYPE_P (TREE_TYPE (se->expr))); + return; + } + + /* Fallthrough. */ + case INTRINSIC_UPLUS: + gfc_conv_expr (se, expr->value.op.op1); + return; + + case INTRINSIC_UMINUS: + gfc_conv_unary_op (NEGATE_EXPR, se, expr); + return; + + case INTRINSIC_NOT: + gfc_conv_unary_op (TRUTH_NOT_EXPR, se, expr); + return; + + case INTRINSIC_PLUS: + code = PLUS_EXPR; + break; + + case INTRINSIC_MINUS: + code = MINUS_EXPR; + break; + + case INTRINSIC_TIMES: + code = MULT_EXPR; + break; + + case INTRINSIC_DIVIDE: + /* If expr is a real or complex expr, use an RDIV_EXPR. If op1 is + an integer, we must round towards zero, so we use a + TRUNC_DIV_EXPR. */ + if (expr->ts.type == BT_INTEGER) + code = TRUNC_DIV_EXPR; + else + code = RDIV_EXPR; + break; + + case INTRINSIC_POWER: + gfc_conv_power_op (se, expr); + return; + + case INTRINSIC_CONCAT: + gfc_conv_concat_op (se, expr); + return; + + case INTRINSIC_AND: + code = TRUTH_ANDIF_EXPR; + lop = 1; + break; + + case INTRINSIC_OR: + code = TRUTH_ORIF_EXPR; + lop = 1; + break; + + /* EQV and NEQV only work on logicals, but since we represent them + as integers, we can use EQ_EXPR and NE_EXPR for them in GIMPLE. */ + case INTRINSIC_EQ: + case INTRINSIC_EQ_OS: + case INTRINSIC_EQV: + code = EQ_EXPR; + checkstring = 1; + lop = 1; + break; + + case INTRINSIC_NE: + case INTRINSIC_NE_OS: + case INTRINSIC_NEQV: + code = NE_EXPR; + checkstring = 1; + lop = 1; + break; + + case INTRINSIC_GT: + case INTRINSIC_GT_OS: + code = GT_EXPR; + checkstring = 1; + lop = 1; + break; + + case INTRINSIC_GE: + case INTRINSIC_GE_OS: + code = GE_EXPR; + checkstring = 1; + lop = 1; + break; + + case INTRINSIC_LT: + case INTRINSIC_LT_OS: + code = LT_EXPR; + checkstring = 1; + lop = 1; + break; + + case INTRINSIC_LE: + case INTRINSIC_LE_OS: + code = LE_EXPR; + checkstring = 1; + lop = 1; + break; + + case INTRINSIC_USER: + case INTRINSIC_ASSIGN: + /* These should be converted into function calls by the frontend. */ + gcc_unreachable (); + + default: + fatal_error ("Unknown intrinsic op"); + return; + } + + /* The only exception to this is **, which is handled separately anyway. */ + gcc_assert (expr->value.op.op1->ts.type == expr->value.op.op2->ts.type); + + if (checkstring && expr->value.op.op1->ts.type != BT_CHARACTER) + checkstring = 0; + + /* lhs */ + gfc_init_se (&lse, se); + gfc_conv_expr (&lse, expr->value.op.op1); + gfc_add_block_to_block (&se->pre, &lse.pre); + + /* rhs */ + gfc_init_se (&rse, se); + gfc_conv_expr (&rse, expr->value.op.op2); + gfc_add_block_to_block (&se->pre, &rse.pre); + + if (checkstring) + { + gfc_conv_string_parameter (&lse); + gfc_conv_string_parameter (&rse); + + lse.expr = gfc_build_compare_string (lse.string_length, lse.expr, + rse.string_length, rse.expr, + expr->value.op.op1->ts.kind); + rse.expr = build_int_cst (TREE_TYPE (lse.expr), 0); + gfc_add_block_to_block (&lse.post, &rse.post); + } + + type = gfc_typenode_for_spec (&expr->ts); + + if (lop) + { + /* The result of logical ops is always boolean_type_node. */ + tmp = fold_build2 (code, boolean_type_node, lse.expr, rse.expr); + se->expr = convert (type, tmp); + } + else + se->expr = fold_build2 (code, type, lse.expr, rse.expr); + + /* Add the post blocks. */ + gfc_add_block_to_block (&se->post, &rse.post); + gfc_add_block_to_block (&se->post, &lse.post); +} + +/* If a string's length is one, we convert it to a single character. */ + +static tree +string_to_single_character (tree len, tree str, int kind) +{ + gcc_assert (POINTER_TYPE_P (TREE_TYPE (str))); + + if (INTEGER_CST_P (len) && TREE_INT_CST_LOW (len) == 1 + && TREE_INT_CST_HIGH (len) == 0) + { + str = fold_convert (gfc_get_pchar_type (kind), str); + return build_fold_indirect_ref (str); + } + + return NULL_TREE; +} + + +void +gfc_conv_scalar_char_value (gfc_symbol *sym, gfc_se *se, gfc_expr **expr) +{ + + if (sym->backend_decl) + { + /* This becomes the nominal_type in + function.c:assign_parm_find_data_types. */ + TREE_TYPE (sym->backend_decl) = unsigned_char_type_node; + /* This becomes the passed_type in + function.c:assign_parm_find_data_types. C promotes char to + integer for argument passing. */ + DECL_ARG_TYPE (sym->backend_decl) = unsigned_type_node; + + DECL_BY_REFERENCE (sym->backend_decl) = 0; + } + + if (expr != NULL) + { + /* If we have a constant character expression, make it into an + integer. */ + if ((*expr)->expr_type == EXPR_CONSTANT) + { + gfc_typespec ts; + gfc_clear_ts (&ts); + + *expr = gfc_int_expr ((int)(*expr)->value.character.string[0]); + if ((*expr)->ts.kind != gfc_c_int_kind) + { + /* The expr needs to be compatible with a C int. If the + conversion fails, then the 2 causes an ICE. */ + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + gfc_convert_type (*expr, &ts, 2); + } + } + else if (se != NULL && (*expr)->expr_type == EXPR_VARIABLE) + { + if ((*expr)->ref == NULL) + { + se->expr = string_to_single_character + (build_int_cst (integer_type_node, 1), + gfc_build_addr_expr (gfc_get_pchar_type ((*expr)->ts.kind), + gfc_get_symbol_decl + ((*expr)->symtree->n.sym)), + (*expr)->ts.kind); + } + else + { + gfc_conv_variable (se, *expr); + se->expr = string_to_single_character + (build_int_cst (integer_type_node, 1), + gfc_build_addr_expr (gfc_get_pchar_type ((*expr)->ts.kind), + se->expr), + (*expr)->ts.kind); + } + } + } +} + + +/* Compare two strings. If they are all single characters, the result is the + subtraction of them. Otherwise, we build a library call. */ + +tree +gfc_build_compare_string (tree len1, tree str1, tree len2, tree str2, int kind) +{ + tree sc1; + tree sc2; + tree tmp; + + gcc_assert (POINTER_TYPE_P (TREE_TYPE (str1))); + gcc_assert (POINTER_TYPE_P (TREE_TYPE (str2))); + + sc1 = string_to_single_character (len1, str1, kind); + sc2 = string_to_single_character (len2, str2, kind); + + if (sc1 != NULL_TREE && sc2 != NULL_TREE) + { + /* Deal with single character specially. */ + sc1 = fold_convert (integer_type_node, sc1); + sc2 = fold_convert (integer_type_node, sc2); + tmp = fold_build2 (MINUS_EXPR, integer_type_node, sc1, sc2); + } + else + { + /* Build a call for the comparison. */ + tree fndecl; + + if (kind == 1) + fndecl = gfor_fndecl_compare_string; + else if (kind == 4) + fndecl = gfor_fndecl_compare_string_char4; + else + gcc_unreachable (); + + tmp = build_call_expr (fndecl, 4, len1, str1, len2, str2); + } + + return tmp; +} + +static void +gfc_conv_function_val (gfc_se * se, gfc_symbol * sym) +{ + tree tmp; + + if (sym->attr.dummy) + { + tmp = gfc_get_symbol_decl (sym); + if (sym->attr.proc_pointer) + tmp = build_fold_indirect_ref (tmp); + gcc_assert (TREE_CODE (TREE_TYPE (tmp)) == POINTER_TYPE + && TREE_CODE (TREE_TYPE (TREE_TYPE (tmp))) == FUNCTION_TYPE); + } + else + { + if (!sym->backend_decl) + sym->backend_decl = gfc_get_extern_function_decl (sym); + + tmp = sym->backend_decl; + + if (sym->attr.cray_pointee) + { + /* TODO - make the cray pointee a pointer to a procedure, + assign the pointer to it and use it for the call. This + will do for now! */ + tmp = convert (build_pointer_type (TREE_TYPE (tmp)), + gfc_get_symbol_decl (sym->cp_pointer)); + tmp = gfc_evaluate_now (tmp, &se->pre); + } + + if (!POINTER_TYPE_P (TREE_TYPE (tmp))) + { + gcc_assert (TREE_CODE (tmp) == FUNCTION_DECL); + tmp = build_fold_addr_expr (tmp); + } + } + se->expr = tmp; +} + + +/* Translate the call for an elemental subroutine call used in an operator + assignment. This is a simplified version of gfc_conv_function_call. */ + +tree +gfc_conv_operator_assign (gfc_se *lse, gfc_se *rse, gfc_symbol *sym) +{ + tree args; + tree tmp; + gfc_se se; + stmtblock_t block; + + /* Only elemental subroutines with two arguments. */ + gcc_assert (sym->attr.elemental && sym->attr.subroutine); + gcc_assert (sym->formal->next->next == NULL); + + gfc_init_block (&block); + + gfc_add_block_to_block (&block, &lse->pre); + gfc_add_block_to_block (&block, &rse->pre); + + /* Build the argument list for the call, including hidden string lengths. */ + args = gfc_chainon_list (NULL_TREE, build_fold_addr_expr (lse->expr)); + args = gfc_chainon_list (args, build_fold_addr_expr (rse->expr)); + if (lse->string_length != NULL_TREE) + args = gfc_chainon_list (args, lse->string_length); + if (rse->string_length != NULL_TREE) + args = gfc_chainon_list (args, rse->string_length); + + /* Build the function call. */ + gfc_init_se (&se, NULL); + gfc_conv_function_val (&se, sym); + tmp = TREE_TYPE (TREE_TYPE (TREE_TYPE (se.expr))); + tmp = build_call_list (tmp, se.expr, args); + gfc_add_expr_to_block (&block, tmp); + + gfc_add_block_to_block (&block, &lse->post); + gfc_add_block_to_block (&block, &rse->post); + + return gfc_finish_block (&block); +} + + +/* Initialize MAPPING. */ + +void +gfc_init_interface_mapping (gfc_interface_mapping * mapping) +{ + mapping->syms = NULL; + mapping->charlens = NULL; +} + + +/* Free all memory held by MAPPING (but not MAPPING itself). */ + +void +gfc_free_interface_mapping (gfc_interface_mapping * mapping) +{ + gfc_interface_sym_mapping *sym; + gfc_interface_sym_mapping *nextsym; + gfc_charlen *cl; + gfc_charlen *nextcl; + + for (sym = mapping->syms; sym; sym = nextsym) + { + nextsym = sym->next; + sym->new_sym->n.sym->formal = NULL; + gfc_free_symbol (sym->new_sym->n.sym); + gfc_free_expr (sym->expr); + gfc_free (sym->new_sym); + gfc_free (sym); + } + for (cl = mapping->charlens; cl; cl = nextcl) + { + nextcl = cl->next; + gfc_free_expr (cl->length); + gfc_free (cl); + } +} + + +/* Return a copy of gfc_charlen CL. Add the returned structure to + MAPPING so that it will be freed by gfc_free_interface_mapping. */ + +static gfc_charlen * +gfc_get_interface_mapping_charlen (gfc_interface_mapping * mapping, + gfc_charlen * cl) +{ + gfc_charlen *new_charlen; + + new_charlen = gfc_get_charlen (); + new_charlen->next = mapping->charlens; + new_charlen->length = gfc_copy_expr (cl->length); + + mapping->charlens = new_charlen; + return new_charlen; +} + + +/* A subroutine of gfc_add_interface_mapping. Return a descriptorless + array variable that can be used as the actual argument for dummy + argument SYM. Add any initialization code to BLOCK. PACKED is as + for gfc_get_nodesc_array_type and DATA points to the first element + in the passed array. */ + +static tree +gfc_get_interface_mapping_array (stmtblock_t * block, gfc_symbol * sym, + gfc_packed packed, tree data) +{ + tree type; + tree var; + + type = gfc_typenode_for_spec (&sym->ts); + type = gfc_get_nodesc_array_type (type, sym->as, packed); + + var = gfc_create_var (type, "ifm"); + gfc_add_modify (block, var, fold_convert (type, data)); + + return var; +} + + +/* A subroutine of gfc_add_interface_mapping. Set the stride, upper bounds + and offset of descriptorless array type TYPE given that it has the same + size as DESC. Add any set-up code to BLOCK. */ + +static void +gfc_set_interface_mapping_bounds (stmtblock_t * block, tree type, tree desc) +{ + int n; + tree dim; + tree offset; + tree tmp; + + offset = gfc_index_zero_node; + for (n = 0; n < GFC_TYPE_ARRAY_RANK (type); n++) + { + dim = gfc_rank_cst[n]; + GFC_TYPE_ARRAY_STRIDE (type, n) = gfc_conv_array_stride (desc, n); + if (GFC_TYPE_ARRAY_LBOUND (type, n) == NULL_TREE) + { + GFC_TYPE_ARRAY_LBOUND (type, n) + = gfc_conv_descriptor_lbound (desc, dim); + GFC_TYPE_ARRAY_UBOUND (type, n) + = gfc_conv_descriptor_ubound (desc, dim); + } + else if (GFC_TYPE_ARRAY_UBOUND (type, n) == NULL_TREE) + { + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + gfc_conv_descriptor_ubound (desc, dim), + gfc_conv_descriptor_lbound (desc, dim)); + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + GFC_TYPE_ARRAY_LBOUND (type, n), + tmp); + tmp = gfc_evaluate_now (tmp, block); + GFC_TYPE_ARRAY_UBOUND (type, n) = tmp; + } + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, + GFC_TYPE_ARRAY_LBOUND (type, n), + GFC_TYPE_ARRAY_STRIDE (type, n)); + offset = fold_build2 (MINUS_EXPR, gfc_array_index_type, offset, tmp); + } + offset = gfc_evaluate_now (offset, block); + GFC_TYPE_ARRAY_OFFSET (type) = offset; +} + + +/* Extend MAPPING so that it maps dummy argument SYM to the value stored + in SE. The caller may still use se->expr and se->string_length after + calling this function. */ + +void +gfc_add_interface_mapping (gfc_interface_mapping * mapping, + gfc_symbol * sym, gfc_se * se, + gfc_expr *expr) +{ + gfc_interface_sym_mapping *sm; + tree desc; + tree tmp; + tree value; + gfc_symbol *new_sym; + gfc_symtree *root; + gfc_symtree *new_symtree; + + /* Create a new symbol to represent the actual argument. */ + new_sym = gfc_new_symbol (sym->name, NULL); + new_sym->ts = sym->ts; + new_sym->as = gfc_copy_array_spec (sym->as); + new_sym->attr.referenced = 1; + new_sym->attr.dimension = sym->attr.dimension; + new_sym->attr.pointer = sym->attr.pointer; + new_sym->attr.allocatable = sym->attr.allocatable; + new_sym->attr.flavor = sym->attr.flavor; + new_sym->attr.function = sym->attr.function; + + /* Ensure that the interface is available and that + descriptors are passed for array actual arguments. */ + if (sym->attr.flavor == FL_PROCEDURE) + { + new_sym->formal = expr->symtree->n.sym->formal; + new_sym->attr.always_explicit + = expr->symtree->n.sym->attr.always_explicit; + } + + /* Create a fake symtree for it. */ + root = NULL; + new_symtree = gfc_new_symtree (&root, sym->name); + new_symtree->n.sym = new_sym; + gcc_assert (new_symtree == root); + + /* Create a dummy->actual mapping. */ + sm = XCNEW (gfc_interface_sym_mapping); + sm->next = mapping->syms; + sm->old = sym; + sm->new_sym = new_symtree; + sm->expr = gfc_copy_expr (expr); + mapping->syms = sm; + + /* Stabilize the argument's value. */ + if (!sym->attr.function && se) + se->expr = gfc_evaluate_now (se->expr, &se->pre); + + if (sym->ts.type == BT_CHARACTER) + { + /* Create a copy of the dummy argument's length. */ + new_sym->ts.cl = gfc_get_interface_mapping_charlen (mapping, sym->ts.cl); + sm->expr->ts.cl = new_sym->ts.cl; + + /* If the length is specified as "*", record the length that + the caller is passing. We should use the callee's length + in all other cases. */ + if (!new_sym->ts.cl->length && se) + { + se->string_length = gfc_evaluate_now (se->string_length, &se->pre); + new_sym->ts.cl->backend_decl = se->string_length; + } + } + + if (!se) + return; + + /* Use the passed value as-is if the argument is a function. */ + if (sym->attr.flavor == FL_PROCEDURE) + value = se->expr; + + /* If the argument is either a string or a pointer to a string, + convert it to a boundless character type. */ + else if (!sym->attr.dimension && sym->ts.type == BT_CHARACTER) + { + tmp = gfc_get_character_type_len (sym->ts.kind, NULL); + tmp = build_pointer_type (tmp); + if (sym->attr.pointer) + value = build_fold_indirect_ref (se->expr); + else + value = se->expr; + value = fold_convert (tmp, value); + } + + /* If the argument is a scalar, a pointer to an array or an allocatable, + dereference it. */ + else if (!sym->attr.dimension || sym->attr.pointer || sym->attr.allocatable) + value = build_fold_indirect_ref (se->expr); + + /* For character(*), use the actual argument's descriptor. */ + else if (sym->ts.type == BT_CHARACTER && !new_sym->ts.cl->length) + value = build_fold_indirect_ref (se->expr); + + /* If the argument is an array descriptor, use it to determine + information about the actual argument's shape. */ + else if (POINTER_TYPE_P (TREE_TYPE (se->expr)) + && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (TREE_TYPE (se->expr)))) + { + /* Get the actual argument's descriptor. */ + desc = build_fold_indirect_ref (se->expr); + + /* Create the replacement variable. */ + tmp = gfc_conv_descriptor_data_get (desc); + value = gfc_get_interface_mapping_array (&se->pre, sym, + PACKED_NO, tmp); + + /* Use DESC to work out the upper bounds, strides and offset. */ + gfc_set_interface_mapping_bounds (&se->pre, TREE_TYPE (value), desc); + } + else + /* Otherwise we have a packed array. */ + value = gfc_get_interface_mapping_array (&se->pre, sym, + PACKED_FULL, se->expr); + + new_sym->backend_decl = value; +} + + +/* Called once all dummy argument mappings have been added to MAPPING, + but before the mapping is used to evaluate expressions. Pre-evaluate + the length of each argument, adding any initialization code to PRE and + any finalization code to POST. */ + +void +gfc_finish_interface_mapping (gfc_interface_mapping * mapping, + stmtblock_t * pre, stmtblock_t * post) +{ + gfc_interface_sym_mapping *sym; + gfc_expr *expr; + gfc_se se; + + for (sym = mapping->syms; sym; sym = sym->next) + if (sym->new_sym->n.sym->ts.type == BT_CHARACTER + && !sym->new_sym->n.sym->ts.cl->backend_decl) + { + expr = sym->new_sym->n.sym->ts.cl->length; + gfc_apply_interface_mapping_to_expr (mapping, expr); + gfc_init_se (&se, NULL); + gfc_conv_expr (&se, expr); + se.expr = fold_convert (gfc_charlen_type_node, se.expr); + se.expr = gfc_evaluate_now (se.expr, &se.pre); + gfc_add_block_to_block (pre, &se.pre); + gfc_add_block_to_block (post, &se.post); + + sym->new_sym->n.sym->ts.cl->backend_decl = se.expr; + } +} + + +/* Like gfc_apply_interface_mapping_to_expr, but applied to + constructor C. */ + +static void +gfc_apply_interface_mapping_to_cons (gfc_interface_mapping * mapping, + gfc_constructor * c) +{ + for (; c; c = c->next) + { + gfc_apply_interface_mapping_to_expr (mapping, c->expr); + if (c->iterator) + { + gfc_apply_interface_mapping_to_expr (mapping, c->iterator->start); + gfc_apply_interface_mapping_to_expr (mapping, c->iterator->end); + gfc_apply_interface_mapping_to_expr (mapping, c->iterator->step); + } + } +} + + +/* Like gfc_apply_interface_mapping_to_expr, but applied to + reference REF. */ + +static void +gfc_apply_interface_mapping_to_ref (gfc_interface_mapping * mapping, + gfc_ref * ref) +{ + int n; + + for (; ref; ref = ref->next) + switch (ref->type) + { + case REF_ARRAY: + for (n = 0; n < ref->u.ar.dimen; n++) + { + gfc_apply_interface_mapping_to_expr (mapping, ref->u.ar.start[n]); + gfc_apply_interface_mapping_to_expr (mapping, ref->u.ar.end[n]); + gfc_apply_interface_mapping_to_expr (mapping, ref->u.ar.stride[n]); + } + gfc_apply_interface_mapping_to_expr (mapping, ref->u.ar.offset); + break; + + case REF_COMPONENT: + break; + + case REF_SUBSTRING: + gfc_apply_interface_mapping_to_expr (mapping, ref->u.ss.start); + gfc_apply_interface_mapping_to_expr (mapping, ref->u.ss.end); + break; + } +} + + +/* Convert intrinsic function calls into result expressions. */ + +static bool +gfc_map_intrinsic_function (gfc_expr *expr, gfc_interface_mapping *mapping) +{ + gfc_symbol *sym; + gfc_expr *new_expr; + gfc_expr *arg1; + gfc_expr *arg2; + int d, dup; + + arg1 = expr->value.function.actual->expr; + if (expr->value.function.actual->next) + arg2 = expr->value.function.actual->next->expr; + else + arg2 = NULL; + + sym = arg1->symtree->n.sym; + + if (sym->attr.dummy) + return false; + + new_expr = NULL; + + switch (expr->value.function.isym->id) + { + case GFC_ISYM_LEN: + /* TODO figure out why this condition is necessary. */ + if (sym->attr.function + && (arg1->ts.cl->length == NULL + || (arg1->ts.cl->length->expr_type != EXPR_CONSTANT + && arg1->ts.cl->length->expr_type != EXPR_VARIABLE))) + return false; + + new_expr = gfc_copy_expr (arg1->ts.cl->length); + break; + + case GFC_ISYM_SIZE: + if (!sym->as) + return false; + + if (arg2 && arg2->expr_type == EXPR_CONSTANT) + { + dup = mpz_get_si (arg2->value.integer); + d = dup - 1; + } + else + { + dup = sym->as->rank; + d = 0; + } + + for (; d < dup; d++) + { + gfc_expr *tmp; + + if (!sym->as->upper[d] || !sym->as->lower[d]) + { + gfc_free_expr (new_expr); + return false; + } + + tmp = gfc_add (gfc_copy_expr (sym->as->upper[d]), gfc_int_expr (1)); + tmp = gfc_subtract (tmp, gfc_copy_expr (sym->as->lower[d])); + if (new_expr) + new_expr = gfc_multiply (new_expr, tmp); + else + new_expr = tmp; + } + break; + + case GFC_ISYM_LBOUND: + case GFC_ISYM_UBOUND: + /* TODO These implementations of lbound and ubound do not limit if + the size < 0, according to F95's 13.14.53 and 13.14.113. */ + + if (!sym->as) + return false; + + if (arg2 && arg2->expr_type == EXPR_CONSTANT) + d = mpz_get_si (arg2->value.integer) - 1; + else + /* TODO: If the need arises, this could produce an array of + ubound/lbounds. */ + gcc_unreachable (); + + if (expr->value.function.isym->id == GFC_ISYM_LBOUND) + { + if (sym->as->lower[d]) + new_expr = gfc_copy_expr (sym->as->lower[d]); + } + else + { + if (sym->as->upper[d]) + new_expr = gfc_copy_expr (sym->as->upper[d]); + } + break; + + default: + break; + } + + gfc_apply_interface_mapping_to_expr (mapping, new_expr); + if (!new_expr) + return false; + + gfc_replace_expr (expr, new_expr); + return true; +} + + +static void +gfc_map_fcn_formal_to_actual (gfc_expr *expr, gfc_expr *map_expr, + gfc_interface_mapping * mapping) +{ + gfc_formal_arglist *f; + gfc_actual_arglist *actual; + + actual = expr->value.function.actual; + f = map_expr->symtree->n.sym->formal; + + for (; f && actual; f = f->next, actual = actual->next) + { + if (!actual->expr) + continue; + + gfc_add_interface_mapping (mapping, f->sym, NULL, actual->expr); + } + + if (map_expr->symtree->n.sym->attr.dimension) + { + int d; + gfc_array_spec *as; + + as = gfc_copy_array_spec (map_expr->symtree->n.sym->as); + + for (d = 0; d < as->rank; d++) + { + gfc_apply_interface_mapping_to_expr (mapping, as->lower[d]); + gfc_apply_interface_mapping_to_expr (mapping, as->upper[d]); + } + + expr->value.function.esym->as = as; + } + + if (map_expr->symtree->n.sym->ts.type == BT_CHARACTER) + { + expr->value.function.esym->ts.cl->length + = gfc_copy_expr (map_expr->symtree->n.sym->ts.cl->length); + + gfc_apply_interface_mapping_to_expr (mapping, + expr->value.function.esym->ts.cl->length); + } +} + + +/* EXPR is a copy of an expression that appeared in the interface + associated with MAPPING. Walk it recursively looking for references to + dummy arguments that MAPPING maps to actual arguments. Replace each such + reference with a reference to the associated actual argument. */ + +static void +gfc_apply_interface_mapping_to_expr (gfc_interface_mapping * mapping, + gfc_expr * expr) +{ + gfc_interface_sym_mapping *sym; + gfc_actual_arglist *actual; + + if (!expr) + return; + + /* Copying an expression does not copy its length, so do that here. */ + if (expr->ts.type == BT_CHARACTER && expr->ts.cl) + { + expr->ts.cl = gfc_get_interface_mapping_charlen (mapping, expr->ts.cl); + gfc_apply_interface_mapping_to_expr (mapping, expr->ts.cl->length); + } + + /* Apply the mapping to any references. */ + gfc_apply_interface_mapping_to_ref (mapping, expr->ref); + + /* ...and to the expression's symbol, if it has one. */ + /* TODO Find out why the condition on expr->symtree had to be moved into + the loop rather than being outside it, as originally. */ + for (sym = mapping->syms; sym; sym = sym->next) + if (expr->symtree && sym->old == expr->symtree->n.sym) + { + if (sym->new_sym->n.sym->backend_decl) + expr->symtree = sym->new_sym; + else if (sym->expr) + gfc_replace_expr (expr, gfc_copy_expr (sym->expr)); + } + + /* ...and to subexpressions in expr->value. */ + switch (expr->expr_type) + { + case EXPR_VARIABLE: + case EXPR_CONSTANT: + case EXPR_NULL: + case EXPR_SUBSTRING: + break; + + case EXPR_OP: + gfc_apply_interface_mapping_to_expr (mapping, expr->value.op.op1); + gfc_apply_interface_mapping_to_expr (mapping, expr->value.op.op2); + break; + + case EXPR_FUNCTION: + for (actual = expr->value.function.actual; actual; actual = actual->next) + gfc_apply_interface_mapping_to_expr (mapping, actual->expr); + + if (expr->value.function.esym == NULL + && expr->value.function.isym != NULL + && expr->value.function.actual->expr->symtree + && gfc_map_intrinsic_function (expr, mapping)) + break; + + for (sym = mapping->syms; sym; sym = sym->next) + if (sym->old == expr->value.function.esym) + { + expr->value.function.esym = sym->new_sym->n.sym; + gfc_map_fcn_formal_to_actual (expr, sym->expr, mapping); + expr->value.function.esym->result = sym->new_sym->n.sym; + } + break; + + case EXPR_ARRAY: + case EXPR_STRUCTURE: + gfc_apply_interface_mapping_to_cons (mapping, expr->value.constructor); + break; + + case EXPR_COMPCALL: + gcc_unreachable (); + break; + } + + return; +} + + +/* Evaluate interface expression EXPR using MAPPING. Store the result + in SE. */ + +void +gfc_apply_interface_mapping (gfc_interface_mapping * mapping, + gfc_se * se, gfc_expr * expr) +{ + expr = gfc_copy_expr (expr); + gfc_apply_interface_mapping_to_expr (mapping, expr); + gfc_conv_expr (se, expr); + se->expr = gfc_evaluate_now (se->expr, &se->pre); + gfc_free_expr (expr); +} + + +/* Returns a reference to a temporary array into which a component of + an actual argument derived type array is copied and then returned + after the function call. */ +void +gfc_conv_subref_array_arg (gfc_se * parmse, gfc_expr * expr, + int g77, sym_intent intent) +{ + gfc_se lse; + gfc_se rse; + gfc_ss *lss; + gfc_ss *rss; + gfc_loopinfo loop; + gfc_loopinfo loop2; + gfc_ss_info *info; + tree offset; + tree tmp_index; + tree tmp; + tree base_type; + stmtblock_t body; + int n; + + gcc_assert (expr->expr_type == EXPR_VARIABLE); + + gfc_init_se (&lse, NULL); + gfc_init_se (&rse, NULL); + + /* Walk the argument expression. */ + rss = gfc_walk_expr (expr); + + gcc_assert (rss != gfc_ss_terminator); + + /* Initialize the scalarizer. */ + gfc_init_loopinfo (&loop); + gfc_add_ss_to_loop (&loop, rss); + + /* Calculate the bounds of the scalarization. */ + gfc_conv_ss_startstride (&loop); + + /* Build an ss for the temporary. */ + if (expr->ts.type == BT_CHARACTER && !expr->ts.cl->backend_decl) + gfc_conv_string_length (expr->ts.cl, expr, &parmse->pre); + + base_type = gfc_typenode_for_spec (&expr->ts); + if (GFC_ARRAY_TYPE_P (base_type) + || GFC_DESCRIPTOR_TYPE_P (base_type)) + base_type = gfc_get_element_type (base_type); + + loop.temp_ss = gfc_get_ss ();; + loop.temp_ss->type = GFC_SS_TEMP; + loop.temp_ss->data.temp.type = base_type; + + if (expr->ts.type == BT_CHARACTER) + loop.temp_ss->string_length = expr->ts.cl->backend_decl; + else + loop.temp_ss->string_length = NULL; + + parmse->string_length = loop.temp_ss->string_length; + loop.temp_ss->data.temp.dimen = loop.dimen; + loop.temp_ss->next = gfc_ss_terminator; + + /* Associate the SS with the loop. */ + gfc_add_ss_to_loop (&loop, loop.temp_ss); + + /* Setup the scalarizing loops. */ + gfc_conv_loop_setup (&loop, &expr->where); + + /* Pass the temporary descriptor back to the caller. */ + info = &loop.temp_ss->data.info; + parmse->expr = info->descriptor; + + /* Setup the gfc_se structures. */ + gfc_copy_loopinfo_to_se (&lse, &loop); + gfc_copy_loopinfo_to_se (&rse, &loop); + + rse.ss = rss; + lse.ss = loop.temp_ss; + gfc_mark_ss_chain_used (rss, 1); + gfc_mark_ss_chain_used (loop.temp_ss, 1); + + /* Start the scalarized loop body. */ + gfc_start_scalarized_body (&loop, &body); + + /* Translate the expression. */ + gfc_conv_expr (&rse, expr); + + gfc_conv_tmp_array_ref (&lse); + gfc_advance_se_ss_chain (&lse); + + if (intent != INTENT_OUT) + { + tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts, true, false); + gfc_add_expr_to_block (&body, tmp); + gcc_assert (rse.ss == gfc_ss_terminator); + gfc_trans_scalarizing_loops (&loop, &body); + } + else + { + /* Make sure that the temporary declaration survives by merging + all the loop declarations into the current context. */ + for (n = 0; n < loop.dimen; n++) + { + gfc_merge_block_scope (&body); + body = loop.code[loop.order[n]]; + } + gfc_merge_block_scope (&body); + } + + /* Add the post block after the second loop, so that any + freeing of allocated memory is done at the right time. */ + gfc_add_block_to_block (&parmse->pre, &loop.pre); + + /**********Copy the temporary back again.*********/ + + gfc_init_se (&lse, NULL); + gfc_init_se (&rse, NULL); + + /* Walk the argument expression. */ + lss = gfc_walk_expr (expr); + rse.ss = loop.temp_ss; + lse.ss = lss; + + /* Initialize the scalarizer. */ + gfc_init_loopinfo (&loop2); + gfc_add_ss_to_loop (&loop2, lss); + + /* Calculate the bounds of the scalarization. */ + gfc_conv_ss_startstride (&loop2); + + /* Setup the scalarizing loops. */ + gfc_conv_loop_setup (&loop2, &expr->where); + + gfc_copy_loopinfo_to_se (&lse, &loop2); + gfc_copy_loopinfo_to_se (&rse, &loop2); + + gfc_mark_ss_chain_used (lss, 1); + gfc_mark_ss_chain_used (loop.temp_ss, 1); + + /* Declare the variable to hold the temporary offset and start the + scalarized loop body. */ + offset = gfc_create_var (gfc_array_index_type, NULL); + gfc_start_scalarized_body (&loop2, &body); + + /* Build the offsets for the temporary from the loop variables. The + temporary array has lbounds of zero and strides of one in all + dimensions, so this is very simple. The offset is only computed + outside the innermost loop, so the overall transfer could be + optimized further. */ + info = &rse.ss->data.info; + + tmp_index = gfc_index_zero_node; + for (n = info->dimen - 1; n > 0; n--) + { + tree tmp_str; + tmp = rse.loop->loopvar[n]; + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + tmp, rse.loop->from[n]); + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + tmp, tmp_index); + + tmp_str = fold_build2 (MINUS_EXPR, gfc_array_index_type, + rse.loop->to[n-1], rse.loop->from[n-1]); + tmp_str = fold_build2 (PLUS_EXPR, gfc_array_index_type, + tmp_str, gfc_index_one_node); + + tmp_index = fold_build2 (MULT_EXPR, gfc_array_index_type, + tmp, tmp_str); + } + + tmp_index = fold_build2 (MINUS_EXPR, gfc_array_index_type, + tmp_index, rse.loop->from[0]); + gfc_add_modify (&rse.loop->code[0], offset, tmp_index); + + tmp_index = fold_build2 (PLUS_EXPR, gfc_array_index_type, + rse.loop->loopvar[0], offset); + + /* Now use the offset for the reference. */ + tmp = build_fold_indirect_ref (info->data); + rse.expr = gfc_build_array_ref (tmp, tmp_index, NULL); + + if (expr->ts.type == BT_CHARACTER) + rse.string_length = expr->ts.cl->backend_decl; + + gfc_conv_expr (&lse, expr); + + gcc_assert (lse.ss == gfc_ss_terminator); + + tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts, false, false); + gfc_add_expr_to_block (&body, tmp); + + /* Generate the copying loops. */ + gfc_trans_scalarizing_loops (&loop2, &body); + + /* Wrap the whole thing up by adding the second loop to the post-block + and following it by the post-block of the first loop. In this way, + if the temporary needs freeing, it is done after use! */ + if (intent != INTENT_IN) + { + gfc_add_block_to_block (&parmse->post, &loop2.pre); + gfc_add_block_to_block (&parmse->post, &loop2.post); + } + + gfc_add_block_to_block (&parmse->post, &loop.post); + + gfc_cleanup_loop (&loop); + gfc_cleanup_loop (&loop2); + + /* Pass the string length to the argument expression. */ + if (expr->ts.type == BT_CHARACTER) + parmse->string_length = expr->ts.cl->backend_decl; + + /* We want either the address for the data or the address of the descriptor, + depending on the mode of passing array arguments. */ + if (g77) + parmse->expr = gfc_conv_descriptor_data_get (parmse->expr); + else + parmse->expr = build_fold_addr_expr (parmse->expr); + + return; +} + + +/* Generate the code for argument list functions. */ + +static void +conv_arglist_function (gfc_se *se, gfc_expr *expr, const char *name) +{ + /* Pass by value for g77 %VAL(arg), pass the address + indirectly for %LOC, else by reference. Thus %REF + is a "do-nothing" and %LOC is the same as an F95 + pointer. */ + if (strncmp (name, "%VAL", 4) == 0) + gfc_conv_expr (se, expr); + else if (strncmp (name, "%LOC", 4) == 0) + { + gfc_conv_expr_reference (se, expr); + se->expr = gfc_build_addr_expr (NULL, se->expr); + } + else if (strncmp (name, "%REF", 4) == 0) + gfc_conv_expr_reference (se, expr); + else + gfc_error ("Unknown argument list function at %L", &expr->where); +} + + +/* Generate code for a procedure call. Note can return se->post != NULL. + If se->direct_byref is set then se->expr contains the return parameter. + Return nonzero, if the call has alternate specifiers. */ + +int +gfc_conv_function_call (gfc_se * se, gfc_symbol * sym, + gfc_actual_arglist * arg, tree append_args) +{ + gfc_interface_mapping mapping; + tree arglist; + tree retargs; + tree tmp; + tree fntype; + gfc_se parmse; + gfc_ss *argss; + gfc_ss_info *info; + int byref; + int parm_kind; + tree type; + tree var; + tree len; + tree stringargs; + gfc_formal_arglist *formal; + int has_alternate_specifier = 0; + bool need_interface_mapping; + bool callee_alloc; + gfc_typespec ts; + gfc_charlen cl; + gfc_expr *e; + gfc_symbol *fsym; + stmtblock_t post; + enum {MISSING = 0, ELEMENTAL, SCALAR, SCALAR_POINTER, ARRAY}; + + arglist = NULL_TREE; + retargs = NULL_TREE; + stringargs = NULL_TREE; + var = NULL_TREE; + len = NULL_TREE; + gfc_clear_ts (&ts); + + if (sym->from_intmod == INTMOD_ISO_C_BINDING) + { + if (sym->intmod_sym_id == ISOCBINDING_LOC) + { + if (arg->expr->rank == 0) + gfc_conv_expr_reference (se, arg->expr); + else + { + int f; + /* This is really the actual arg because no formal arglist is + created for C_LOC. */ + fsym = arg->expr->symtree->n.sym; + + /* We should want it to do g77 calling convention. */ + f = (fsym != NULL) + && !(fsym->attr.pointer || fsym->attr.allocatable) + && fsym->as->type != AS_ASSUMED_SHAPE; + f = f || !sym->attr.always_explicit; + + argss = gfc_walk_expr (arg->expr); + gfc_conv_array_parameter (se, arg->expr, argss, f, NULL, NULL); + } + + /* TODO -- the following two lines shouldn't be necessary, but + they're removed a bug is exposed later in the codepath. + This is workaround was thus introduced, but will have to be + removed; please see PR 35150 for details about the issue. */ + se->expr = convert (pvoid_type_node, se->expr); + se->expr = gfc_evaluate_now (se->expr, &se->pre); + + return 0; + } + else if (sym->intmod_sym_id == ISOCBINDING_FUNLOC) + { + arg->expr->ts.type = sym->ts.derived->ts.type; + arg->expr->ts.f90_type = sym->ts.derived->ts.f90_type; + arg->expr->ts.kind = sym->ts.derived->ts.kind; + gfc_conv_expr_reference (se, arg->expr); + + return 0; + } + else if ((sym->intmod_sym_id == ISOCBINDING_F_POINTER + && arg->next->expr->rank == 0) + || sym->intmod_sym_id == ISOCBINDING_F_PROCPOINTER) + { + /* Convert c_f_pointer if fptr is a scalar + and convert c_f_procpointer. */ + gfc_se cptrse; + gfc_se fptrse; + + gfc_init_se (&cptrse, NULL); + gfc_conv_expr (&cptrse, arg->expr); + gfc_add_block_to_block (&se->pre, &cptrse.pre); + gfc_add_block_to_block (&se->post, &cptrse.post); + + gfc_init_se (&fptrse, NULL); + if (sym->intmod_sym_id == ISOCBINDING_F_POINTER) + fptrse.want_pointer = 1; + + gfc_conv_expr (&fptrse, arg->next->expr); + gfc_add_block_to_block (&se->pre, &fptrse.pre); + gfc_add_block_to_block (&se->post, &fptrse.post); + + tmp = arg->next->expr->symtree->n.sym->backend_decl; + se->expr = fold_build2 (MODIFY_EXPR, TREE_TYPE (tmp), fptrse.expr, + fold_convert (TREE_TYPE (tmp), cptrse.expr)); + + return 0; + } + else if (sym->intmod_sym_id == ISOCBINDING_ASSOCIATED) + { + gfc_se arg1se; + gfc_se arg2se; + + /* Build the addr_expr for the first argument. The argument is + already an *address* so we don't need to set want_pointer in + the gfc_se. */ + gfc_init_se (&arg1se, NULL); + gfc_conv_expr (&arg1se, arg->expr); + gfc_add_block_to_block (&se->pre, &arg1se.pre); + gfc_add_block_to_block (&se->post, &arg1se.post); + + /* See if we were given two arguments. */ + if (arg->next == NULL) + /* Only given one arg so generate a null and do a + not-equal comparison against the first arg. */ + se->expr = fold_build2 (NE_EXPR, boolean_type_node, arg1se.expr, + fold_convert (TREE_TYPE (arg1se.expr), + null_pointer_node)); + else + { + tree eq_expr; + tree not_null_expr; + + /* Given two arguments so build the arg2se from second arg. */ + gfc_init_se (&arg2se, NULL); + gfc_conv_expr (&arg2se, arg->next->expr); + gfc_add_block_to_block (&se->pre, &arg2se.pre); + gfc_add_block_to_block (&se->post, &arg2se.post); + + /* Generate test to compare that the two args are equal. */ + eq_expr = fold_build2 (EQ_EXPR, boolean_type_node, + arg1se.expr, arg2se.expr); + /* Generate test to ensure that the first arg is not null. */ + not_null_expr = fold_build2 (NE_EXPR, boolean_type_node, + arg1se.expr, null_pointer_node); + + /* Finally, the generated test must check that both arg1 is not + NULL and that it is equal to the second arg. */ + se->expr = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, + not_null_expr, eq_expr); + } + + return 0; + } + } + + if (se->ss != NULL) + { + if (!sym->attr.elemental) + { + gcc_assert (se->ss->type == GFC_SS_FUNCTION); + if (se->ss->useflags) + { + gcc_assert (gfc_return_by_reference (sym) + && sym->result->attr.dimension); + gcc_assert (se->loop != NULL); + + /* Access the previously obtained result. */ + gfc_conv_tmp_array_ref (se); + gfc_advance_se_ss_chain (se); + return 0; + } + } + info = &se->ss->data.info; + } + else + info = NULL; + + gfc_init_block (&post); + gfc_init_interface_mapping (&mapping); + need_interface_mapping = ((sym->ts.type == BT_CHARACTER + && sym->ts.cl->length + && sym->ts.cl->length->expr_type + != EXPR_CONSTANT) + || sym->attr.dimension); + formal = sym->formal; + /* Evaluate the arguments. */ + for (; arg != NULL; arg = arg->next, formal = formal ? formal->next : NULL) + { + e = arg->expr; + fsym = formal ? formal->sym : NULL; + parm_kind = MISSING; + if (e == NULL) + { + + if (se->ignore_optional) + { + /* Some intrinsics have already been resolved to the correct + parameters. */ + continue; + } + else if (arg->label) + { + has_alternate_specifier = 1; + continue; + } + else + { + /* Pass a NULL pointer for an absent arg. */ + gfc_init_se (&parmse, NULL); + parmse.expr = null_pointer_node; + if (arg->missing_arg_type == BT_CHARACTER) + parmse.string_length = build_int_cst (gfc_charlen_type_node, 0); + } + } + else if (se->ss && se->ss->useflags) + { + /* An elemental function inside a scalarized loop. */ + gfc_init_se (&parmse, se); + gfc_conv_expr_reference (&parmse, e); + parm_kind = ELEMENTAL; + } + else + { + /* A scalar or transformational function. */ + gfc_init_se (&parmse, NULL); + argss = gfc_walk_expr (e); + + if (argss == gfc_ss_terminator) + { + if (e->expr_type == EXPR_VARIABLE + && e->symtree->n.sym->attr.cray_pointee + && fsym && fsym->attr.flavor == FL_PROCEDURE) + { + /* The Cray pointer needs to be converted to a pointer to + a type given by the expression. */ + gfc_conv_expr (&parmse, e); + type = build_pointer_type (TREE_TYPE (parmse.expr)); + tmp = gfc_get_symbol_decl (e->symtree->n.sym->cp_pointer); + parmse.expr = convert (type, tmp); + } + else if (fsym && fsym->attr.value) + { + if (fsym->ts.type == BT_CHARACTER + && fsym->ts.is_c_interop + && fsym->ns->proc_name != NULL + && fsym->ns->proc_name->attr.is_bind_c) + { + parmse.expr = NULL; + gfc_conv_scalar_char_value (fsym, &parmse, &e); + if (parmse.expr == NULL) + gfc_conv_expr (&parmse, e); + } + else + gfc_conv_expr (&parmse, e); + } + else if (arg->name && arg->name[0] == '%') + /* Argument list functions %VAL, %LOC and %REF are signalled + through arg->name. */ + conv_arglist_function (&parmse, arg->expr, arg->name); + else if ((e->expr_type == EXPR_FUNCTION) + && e->symtree->n.sym->attr.pointer + && fsym && fsym->attr.target) + { + gfc_conv_expr (&parmse, e); + parmse.expr = build_fold_addr_expr (parmse.expr); + } + else + { + gfc_conv_expr_reference (&parmse, e); + if (fsym && e->expr_type != EXPR_NULL + && ((fsym->attr.pointer + && fsym->attr.flavor != FL_PROCEDURE) + || fsym->attr.proc_pointer)) + { + /* Scalar pointer dummy args require an extra level of + indirection. The null pointer already contains + this level of indirection. */ + parm_kind = SCALAR_POINTER; + parmse.expr = build_fold_addr_expr (parmse.expr); + } + } + } + else + { + /* If the procedure requires an explicit interface, the actual + argument is passed according to the corresponding formal + argument. If the corresponding formal argument is a POINTER, + ALLOCATABLE or assumed shape, we do not use g77's calling + convention, and pass the address of the array descriptor + instead. Otherwise we use g77's calling convention. */ + int f; + f = (fsym != NULL) + && !(fsym->attr.pointer || fsym->attr.allocatable) + && fsym->as->type != AS_ASSUMED_SHAPE; + f = f || !sym->attr.always_explicit; + + if (e->expr_type == EXPR_VARIABLE + && is_subref_array (e)) + /* The actual argument is a component reference to an + array of derived types. In this case, the argument + is converted to a temporary, which is passed and then + written back after the procedure call. */ + gfc_conv_subref_array_arg (&parmse, e, f, + fsym ? fsym->attr.intent : INTENT_INOUT); + else + gfc_conv_array_parameter (&parmse, e, argss, f, fsym, + sym->name); + + /* If an ALLOCATABLE dummy argument has INTENT(OUT) and is + allocated on entry, it must be deallocated. */ + if (fsym && fsym->attr.allocatable + && fsym->attr.intent == INTENT_OUT) + { + tmp = build_fold_indirect_ref (parmse.expr); + tmp = gfc_trans_dealloc_allocated (tmp); + gfc_add_expr_to_block (&se->pre, tmp); + } + + } + } + + /* The case with fsym->attr.optional is that of a user subroutine + with an interface indicating an optional argument. When we call + an intrinsic subroutine, however, fsym is NULL, but we might still + have an optional argument, so we proceed to the substitution + just in case. */ + if (e && (fsym == NULL || fsym->attr.optional)) + { + /* If an optional argument is itself an optional dummy argument, + check its presence and substitute a null if absent. */ + if (e->expr_type == EXPR_VARIABLE + && e->symtree->n.sym->attr.optional) + gfc_conv_missing_dummy (&parmse, e, fsym ? fsym->ts : e->ts, + e->representation.length); + } + + if (fsym && e) + { + /* Obtain the character length of an assumed character length + length procedure from the typespec. */ + if (fsym->ts.type == BT_CHARACTER + && parmse.string_length == NULL_TREE + && e->ts.type == BT_PROCEDURE + && e->symtree->n.sym->ts.type == BT_CHARACTER + && e->symtree->n.sym->ts.cl->length != NULL + && e->symtree->n.sym->ts.cl->length->expr_type == EXPR_CONSTANT) + { + gfc_conv_const_charlen (e->symtree->n.sym->ts.cl); + parmse.string_length = e->symtree->n.sym->ts.cl->backend_decl; + } + } + + if (fsym && need_interface_mapping && e) + gfc_add_interface_mapping (&mapping, fsym, &parmse, e); + + gfc_add_block_to_block (&se->pre, &parmse.pre); + gfc_add_block_to_block (&post, &parmse.post); + + /* Allocated allocatable components of derived types must be + deallocated for non-variable scalars. Non-variable arrays are + dealt with in trans-array.c(gfc_conv_array_parameter). */ + if (e && e->ts.type == BT_DERIVED + && e->ts.derived->attr.alloc_comp + && (e->expr_type != EXPR_VARIABLE && !e->rank)) + { + int parm_rank; + tmp = build_fold_indirect_ref (parmse.expr); + parm_rank = e->rank; + switch (parm_kind) + { + case (ELEMENTAL): + case (SCALAR): + parm_rank = 0; + break; + + case (SCALAR_POINTER): + tmp = build_fold_indirect_ref (tmp); + break; + } + + tmp = gfc_deallocate_alloc_comp (e->ts.derived, tmp, parm_rank); + gfc_add_expr_to_block (&se->post, tmp); + } + + /* Character strings are passed as two parameters, a length and a + pointer - except for Bind(c) which only passes the pointer. */ + if (parmse.string_length != NULL_TREE && !sym->attr.is_bind_c) + stringargs = gfc_chainon_list (stringargs, parmse.string_length); + + arglist = gfc_chainon_list (arglist, parmse.expr); + } + gfc_finish_interface_mapping (&mapping, &se->pre, &se->post); + + ts = sym->ts; + if (ts.type == BT_CHARACTER && sym->attr.is_bind_c) + se->string_length = build_int_cst (gfc_charlen_type_node, 1); + else if (ts.type == BT_CHARACTER) + { + if (sym->ts.cl->length == NULL) + { + /* Assumed character length results are not allowed by 5.1.1.5 of the + standard and are trapped in resolve.c; except in the case of SPREAD + (and other intrinsics?) and dummy functions. In the case of SPREAD, + we take the character length of the first argument for the result. + For dummies, we have to look through the formal argument list for + this function and use the character length found there.*/ + if (!sym->attr.dummy) + cl.backend_decl = TREE_VALUE (stringargs); + else + { + formal = sym->ns->proc_name->formal; + for (; formal; formal = formal->next) + if (strcmp (formal->sym->name, sym->name) == 0) + cl.backend_decl = formal->sym->ts.cl->backend_decl; + } + } + else + { + tree tmp; + + /* Calculate the length of the returned string. */ + gfc_init_se (&parmse, NULL); + if (need_interface_mapping) + gfc_apply_interface_mapping (&mapping, &parmse, sym->ts.cl->length); + else + gfc_conv_expr (&parmse, sym->ts.cl->length); + gfc_add_block_to_block (&se->pre, &parmse.pre); + gfc_add_block_to_block (&se->post, &parmse.post); + + tmp = fold_convert (gfc_charlen_type_node, parmse.expr); + tmp = fold_build2 (MAX_EXPR, gfc_charlen_type_node, tmp, + build_int_cst (gfc_charlen_type_node, 0)); + cl.backend_decl = tmp; + } + + /* Set up a charlen structure for it. */ + cl.next = NULL; + cl.length = NULL; + ts.cl = &cl; + + len = cl.backend_decl; + } + + byref = gfc_return_by_reference (sym); + if (byref) + { + if (se->direct_byref) + { + /* Sometimes, too much indirection can be applied; e.g. for + function_result = array_valued_recursive_function. */ + if (TREE_TYPE (TREE_TYPE (se->expr)) + && TREE_TYPE (TREE_TYPE (TREE_TYPE (se->expr))) + && GFC_DESCRIPTOR_TYPE_P + (TREE_TYPE (TREE_TYPE (TREE_TYPE (se->expr))))) + se->expr = build_fold_indirect_ref (se->expr); + + retargs = gfc_chainon_list (retargs, se->expr); + } + else if (sym->result->attr.dimension) + { + gcc_assert (se->loop && info); + + /* Set the type of the array. */ + tmp = gfc_typenode_for_spec (&ts); + info->dimen = se->loop->dimen; + + /* Evaluate the bounds of the result, if known. */ + gfc_set_loop_bounds_from_array_spec (&mapping, se, sym->result->as); + + /* Create a temporary to store the result. In case the function + returns a pointer, the temporary will be a shallow copy and + mustn't be deallocated. */ + callee_alloc = sym->attr.allocatable || sym->attr.pointer; + gfc_trans_create_temp_array (&se->pre, &se->post, se->loop, info, tmp, + NULL_TREE, false, !sym->attr.pointer, + callee_alloc, &se->ss->expr->where); + + /* Pass the temporary as the first argument. */ + tmp = info->descriptor; + tmp = build_fold_addr_expr (tmp); + retargs = gfc_chainon_list (retargs, tmp); + } + else if (ts.type == BT_CHARACTER) + { + /* Pass the string length. */ + type = gfc_get_character_type (ts.kind, ts.cl); + type = build_pointer_type (type); + + /* Return an address to a char[0:len-1]* temporary for + character pointers. */ + if (sym->attr.pointer || sym->attr.allocatable) + { + var = gfc_create_var (type, "pstr"); + + /* Provide an address expression for the function arguments. */ + var = build_fold_addr_expr (var); + } + else + var = gfc_conv_string_tmp (se, type, len); + + retargs = gfc_chainon_list (retargs, var); + } + else + { + gcc_assert (gfc_option.flag_f2c && ts.type == BT_COMPLEX); + + type = gfc_get_complex_type (ts.kind); + var = build_fold_addr_expr (gfc_create_var (type, "cmplx")); + retargs = gfc_chainon_list (retargs, var); + } + + /* Add the string length to the argument list. */ + if (ts.type == BT_CHARACTER) + retargs = gfc_chainon_list (retargs, len); + } + gfc_free_interface_mapping (&mapping); + + /* Add the return arguments. */ + arglist = chainon (retargs, arglist); + + /* Add the hidden string length parameters to the arguments. */ + arglist = chainon (arglist, stringargs); + + /* We may want to append extra arguments here. This is used e.g. for + calls to libgfortran_matmul_??, which need extra information. */ + if (append_args != NULL_TREE) + arglist = chainon (arglist, append_args); + + /* Generate the actual call. */ + gfc_conv_function_val (se, sym); + + /* If there are alternate return labels, function type should be + integer. Can't modify the type in place though, since it can be shared + with other functions. For dummy arguments, the typing is done to + to this result, even if it has to be repeated for each call. */ + if (has_alternate_specifier + && TREE_TYPE (TREE_TYPE (TREE_TYPE (se->expr))) != integer_type_node) + { + if (!sym->attr.dummy) + { + TREE_TYPE (sym->backend_decl) + = build_function_type (integer_type_node, + TYPE_ARG_TYPES (TREE_TYPE (sym->backend_decl))); + se->expr = build_fold_addr_expr (sym->backend_decl); + } + else + TREE_TYPE (TREE_TYPE (TREE_TYPE (se->expr))) = integer_type_node; + } + + fntype = TREE_TYPE (TREE_TYPE (se->expr)); + se->expr = build_call_list (TREE_TYPE (fntype), se->expr, arglist); + + /* If we have a pointer function, but we don't want a pointer, e.g. + something like + x = f() + where f is pointer valued, we have to dereference the result. */ + if (!se->want_pointer && !byref && sym->attr.pointer) + se->expr = build_fold_indirect_ref (se->expr); + + /* f2c calling conventions require a scalar default real function to + return a double precision result. Convert this back to default + real. We only care about the cases that can happen in Fortran 77. + */ + if (gfc_option.flag_f2c && sym->ts.type == BT_REAL + && sym->ts.kind == gfc_default_real_kind + && !sym->attr.always_explicit) + se->expr = fold_convert (gfc_get_real_type (sym->ts.kind), se->expr); + + /* A pure function may still have side-effects - it may modify its + parameters. */ + TREE_SIDE_EFFECTS (se->expr) = 1; +#if 0 + if (!sym->attr.pure) + TREE_SIDE_EFFECTS (se->expr) = 1; +#endif + + if (byref) + { + /* Add the function call to the pre chain. There is no expression. */ + gfc_add_expr_to_block (&se->pre, se->expr); + se->expr = NULL_TREE; + + if (!se->direct_byref) + { + if (sym->attr.dimension) + { + if (flag_bounds_check) + { + /* Check the data pointer hasn't been modified. This would + happen in a function returning a pointer. */ + tmp = gfc_conv_descriptor_data_get (info->descriptor); + tmp = fold_build2 (NE_EXPR, boolean_type_node, + tmp, info->data); + gfc_trans_runtime_check (true, false, tmp, &se->pre, NULL, + gfc_msg_fault); + } + se->expr = info->descriptor; + /* Bundle in the string length. */ + se->string_length = len; + } + else if (sym->ts.type == BT_CHARACTER) + { + /* Dereference for character pointer results. */ + if (sym->attr.pointer || sym->attr.allocatable) + se->expr = build_fold_indirect_ref (var); + else + se->expr = var; + + se->string_length = len; + } + else + { + gcc_assert (sym->ts.type == BT_COMPLEX && gfc_option.flag_f2c); + se->expr = build_fold_indirect_ref (var); + } + } + } + + /* Follow the function call with the argument post block. */ + if (byref) + gfc_add_block_to_block (&se->pre, &post); + else + gfc_add_block_to_block (&se->post, &post); + + return has_alternate_specifier; +} + + +/* Fill a character string with spaces. */ + +static tree +fill_with_spaces (tree start, tree type, tree size) +{ + stmtblock_t block, loop; + tree i, el, exit_label, cond, tmp; + + /* For a simple char type, we can call memset(). */ + if (compare_tree_int (TYPE_SIZE_UNIT (type), 1) == 0) + return build_call_expr (built_in_decls[BUILT_IN_MEMSET], 3, start, + build_int_cst (gfc_get_int_type (gfc_c_int_kind), + lang_hooks.to_target_charset (' ')), + size); + + /* Otherwise, we use a loop: + for (el = start, i = size; i > 0; el--, i+= TYPE_SIZE_UNIT (type)) + *el = (type) ' '; + */ + + /* Initialize variables. */ + gfc_init_block (&block); + i = gfc_create_var (sizetype, "i"); + gfc_add_modify (&block, i, fold_convert (sizetype, size)); + el = gfc_create_var (build_pointer_type (type), "el"); + gfc_add_modify (&block, el, fold_convert (TREE_TYPE (el), start)); + exit_label = gfc_build_label_decl (NULL_TREE); + TREE_USED (exit_label) = 1; + + + /* Loop body. */ + gfc_init_block (&loop); + + /* Exit condition. */ + cond = fold_build2 (LE_EXPR, boolean_type_node, i, + fold_convert (sizetype, integer_zero_node)); + tmp = build1_v (GOTO_EXPR, exit_label); + tmp = fold_build3 (COND_EXPR, void_type_node, cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&loop, tmp); + + /* Assignment. */ + gfc_add_modify (&loop, fold_build1 (INDIRECT_REF, type, el), + build_int_cst (type, + lang_hooks.to_target_charset (' '))); + + /* Increment loop variables. */ + gfc_add_modify (&loop, i, fold_build2 (MINUS_EXPR, sizetype, i, + TYPE_SIZE_UNIT (type))); + gfc_add_modify (&loop, el, fold_build2 (POINTER_PLUS_EXPR, + TREE_TYPE (el), el, + TYPE_SIZE_UNIT (type))); + + /* Making the loop... actually loop! */ + tmp = gfc_finish_block (&loop); + tmp = build1_v (LOOP_EXPR, tmp); + gfc_add_expr_to_block (&block, tmp); + + /* The exit label. */ + tmp = build1_v (LABEL_EXPR, exit_label); + gfc_add_expr_to_block (&block, tmp); + + + return gfc_finish_block (&block); +} + + +/* Generate code to copy a string. */ + +void +gfc_trans_string_copy (stmtblock_t * block, tree dlength, tree dest, + int dkind, tree slength, tree src, int skind) +{ + tree tmp, dlen, slen; + tree dsc; + tree ssc; + tree cond; + tree cond2; + tree tmp2; + tree tmp3; + tree tmp4; + tree chartype; + stmtblock_t tempblock; + + gcc_assert (dkind == skind); + + if (slength != NULL_TREE) + { + slen = fold_convert (size_type_node, gfc_evaluate_now (slength, block)); + ssc = string_to_single_character (slen, src, skind); + } + else + { + slen = build_int_cst (size_type_node, 1); + ssc = src; + } + + if (dlength != NULL_TREE) + { + dlen = fold_convert (size_type_node, gfc_evaluate_now (dlength, block)); + dsc = string_to_single_character (slen, dest, dkind); + } + else + { + dlen = build_int_cst (size_type_node, 1); + dsc = dest; + } + + if (slength != NULL_TREE && POINTER_TYPE_P (TREE_TYPE (src))) + ssc = string_to_single_character (slen, src, skind); + if (dlength != NULL_TREE && POINTER_TYPE_P (TREE_TYPE (dest))) + dsc = string_to_single_character (dlen, dest, dkind); + + + /* Assign directly if the types are compatible. */ + if (dsc != NULL_TREE && ssc != NULL_TREE + && TREE_TYPE (dsc) == TREE_TYPE (ssc)) + { + gfc_add_modify (block, dsc, ssc); + return; + } + + /* Do nothing if the destination length is zero. */ + cond = fold_build2 (GT_EXPR, boolean_type_node, dlen, + build_int_cst (size_type_node, 0)); + + /* The following code was previously in _gfortran_copy_string: + + // The two strings may overlap so we use memmove. + void + copy_string (GFC_INTEGER_4 destlen, char * dest, + GFC_INTEGER_4 srclen, const char * src) + { + if (srclen >= destlen) + { + // This will truncate if too long. + memmove (dest, src, destlen); + } + else + { + memmove (dest, src, srclen); + // Pad with spaces. + memset (&dest[srclen], ' ', destlen - srclen); + } + } + + We're now doing it here for better optimization, but the logic + is the same. */ + + /* For non-default character kinds, we have to multiply the string + length by the base type size. */ + chartype = gfc_get_char_type (dkind); + slen = fold_build2 (MULT_EXPR, size_type_node, + fold_convert (size_type_node, slen), + fold_convert (size_type_node, TYPE_SIZE_UNIT (chartype))); + dlen = fold_build2 (MULT_EXPR, size_type_node, + fold_convert (size_type_node, dlen), + fold_convert (size_type_node, TYPE_SIZE_UNIT (chartype))); + + if (dlength) + dest = fold_convert (pvoid_type_node, dest); + else + dest = gfc_build_addr_expr (pvoid_type_node, dest); + + if (slength) + src = fold_convert (pvoid_type_node, src); + else + src = gfc_build_addr_expr (pvoid_type_node, src); + + /* Truncate string if source is too long. */ + cond2 = fold_build2 (GE_EXPR, boolean_type_node, slen, dlen); + tmp2 = build_call_expr (built_in_decls[BUILT_IN_MEMMOVE], + 3, dest, src, dlen); + + /* Else copy and pad with spaces. */ + tmp3 = build_call_expr (built_in_decls[BUILT_IN_MEMMOVE], + 3, dest, src, slen); + + tmp4 = fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (dest), dest, + fold_convert (sizetype, slen)); + tmp4 = fill_with_spaces (tmp4, chartype, + fold_build2 (MINUS_EXPR, TREE_TYPE(dlen), + dlen, slen)); + + gfc_init_block (&tempblock); + gfc_add_expr_to_block (&tempblock, tmp3); + gfc_add_expr_to_block (&tempblock, tmp4); + tmp3 = gfc_finish_block (&tempblock); + + /* The whole copy_string function is there. */ + tmp = fold_build3 (COND_EXPR, void_type_node, cond2, tmp2, tmp3); + tmp = fold_build3 (COND_EXPR, void_type_node, cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (block, tmp); +} + + +/* Translate a statement function. + The value of a statement function reference is obtained by evaluating the + expression using the values of the actual arguments for the values of the + corresponding dummy arguments. */ + +static void +gfc_conv_statement_function (gfc_se * se, gfc_expr * expr) +{ + gfc_symbol *sym; + gfc_symbol *fsym; + gfc_formal_arglist *fargs; + gfc_actual_arglist *args; + gfc_se lse; + gfc_se rse; + gfc_saved_var *saved_vars; + tree *temp_vars; + tree type; + tree tmp; + int n; + + sym = expr->symtree->n.sym; + args = expr->value.function.actual; + gfc_init_se (&lse, NULL); + gfc_init_se (&rse, NULL); + + n = 0; + for (fargs = sym->formal; fargs; fargs = fargs->next) + n++; + saved_vars = (gfc_saved_var *)gfc_getmem (n * sizeof (gfc_saved_var)); + temp_vars = (tree *)gfc_getmem (n * sizeof (tree)); + + for (fargs = sym->formal, n = 0; fargs; fargs = fargs->next, n++) + { + /* Each dummy shall be specified, explicitly or implicitly, to be + scalar. */ + gcc_assert (fargs->sym->attr.dimension == 0); + fsym = fargs->sym; + + /* Create a temporary to hold the value. */ + type = gfc_typenode_for_spec (&fsym->ts); + temp_vars[n] = gfc_create_var (type, fsym->name); + + if (fsym->ts.type == BT_CHARACTER) + { + /* Copy string arguments. */ + tree arglen; + + gcc_assert (fsym->ts.cl && fsym->ts.cl->length + && fsym->ts.cl->length->expr_type == EXPR_CONSTANT); + + arglen = TYPE_MAX_VALUE (TYPE_DOMAIN (type)); + tmp = gfc_build_addr_expr (build_pointer_type (type), + temp_vars[n]); + + gfc_conv_expr (&rse, args->expr); + gfc_conv_string_parameter (&rse); + gfc_add_block_to_block (&se->pre, &lse.pre); + gfc_add_block_to_block (&se->pre, &rse.pre); + + gfc_trans_string_copy (&se->pre, arglen, tmp, fsym->ts.kind, + rse.string_length, rse.expr, fsym->ts.kind); + gfc_add_block_to_block (&se->pre, &lse.post); + gfc_add_block_to_block (&se->pre, &rse.post); + } + else + { + /* For everything else, just evaluate the expression. */ + gfc_conv_expr (&lse, args->expr); + + gfc_add_block_to_block (&se->pre, &lse.pre); + gfc_add_modify (&se->pre, temp_vars[n], lse.expr); + gfc_add_block_to_block (&se->pre, &lse.post); + } + + args = args->next; + } + + /* Use the temporary variables in place of the real ones. */ + for (fargs = sym->formal, n = 0; fargs; fargs = fargs->next, n++) + gfc_shadow_sym (fargs->sym, temp_vars[n], &saved_vars[n]); + + gfc_conv_expr (se, sym->value); + + if (sym->ts.type == BT_CHARACTER) + { + gfc_conv_const_charlen (sym->ts.cl); + + /* Force the expression to the correct length. */ + if (!INTEGER_CST_P (se->string_length) + || tree_int_cst_lt (se->string_length, + sym->ts.cl->backend_decl)) + { + type = gfc_get_character_type (sym->ts.kind, sym->ts.cl); + tmp = gfc_create_var (type, sym->name); + tmp = gfc_build_addr_expr (build_pointer_type (type), tmp); + gfc_trans_string_copy (&se->pre, sym->ts.cl->backend_decl, tmp, + sym->ts.kind, se->string_length, se->expr, + sym->ts.kind); + se->expr = tmp; + } + se->string_length = sym->ts.cl->backend_decl; + } + + /* Restore the original variables. */ + for (fargs = sym->formal, n = 0; fargs; fargs = fargs->next, n++) + gfc_restore_sym (fargs->sym, &saved_vars[n]); + gfc_free (saved_vars); +} + + +/* Translate a function expression. */ + +static void +gfc_conv_function_expr (gfc_se * se, gfc_expr * expr) +{ + gfc_symbol *sym; + + if (expr->value.function.isym) + { + gfc_conv_intrinsic_function (se, expr); + return; + } + + /* We distinguish statement functions from general functions to improve + runtime performance. */ + if (expr->symtree->n.sym->attr.proc == PROC_ST_FUNCTION) + { + gfc_conv_statement_function (se, expr); + return; + } + + /* expr.value.function.esym is the resolved (specific) function symbol for + most functions. However this isn't set for dummy procedures. */ + sym = expr->value.function.esym; + if (!sym) + sym = expr->symtree->n.sym; + gfc_conv_function_call (se, sym, expr->value.function.actual, NULL_TREE); +} + + +static void +gfc_conv_array_constructor_expr (gfc_se * se, gfc_expr * expr) +{ + gcc_assert (se->ss != NULL && se->ss != gfc_ss_terminator); + gcc_assert (se->ss->expr == expr && se->ss->type == GFC_SS_CONSTRUCTOR); + + gfc_conv_tmp_array_ref (se); + gfc_advance_se_ss_chain (se); +} + + +/* Build a static initializer. EXPR is the expression for the initial value. + The other parameters describe the variable of the component being + initialized. EXPR may be null. */ + +tree +gfc_conv_initializer (gfc_expr * expr, gfc_typespec * ts, tree type, + bool array, bool pointer) +{ + gfc_se se; + + if (!(expr || pointer)) + return NULL_TREE; + + /* Check if we have ISOCBINDING_NULL_PTR or ISOCBINDING_NULL_FUNPTR + (these are the only two iso_c_binding derived types that can be + used as initialization expressions). If so, we need to modify + the 'expr' to be that for a (void *). */ + if (expr != NULL && expr->ts.type == BT_DERIVED + && expr->ts.is_iso_c && expr->ts.derived) + { + gfc_symbol *derived = expr->ts.derived; + + expr = gfc_int_expr (0); + + /* The derived symbol has already been converted to a (void *). Use + its kind. */ + expr->ts.f90_type = derived->ts.f90_type; + expr->ts.kind = derived->ts.kind; + } + + if (array) + { + /* Arrays need special handling. */ + if (pointer) + return gfc_build_null_descriptor (type); + else + return gfc_conv_array_initializer (type, expr); + } + else if (pointer) + return fold_convert (type, null_pointer_node); + else + { + switch (ts->type) + { + case BT_DERIVED: + gfc_init_se (&se, NULL); + gfc_conv_structure (&se, expr, 1); + return se.expr; + + case BT_CHARACTER: + return gfc_conv_string_init (ts->cl->backend_decl,expr); + + default: + gfc_init_se (&se, NULL); + gfc_conv_constant (&se, expr); + return se.expr; + } + } +} + +static tree +gfc_trans_subarray_assign (tree dest, gfc_component * cm, gfc_expr * expr) +{ + gfc_se rse; + gfc_se lse; + gfc_ss *rss; + gfc_ss *lss; + stmtblock_t body; + stmtblock_t block; + gfc_loopinfo loop; + int n; + tree tmp; + + gfc_start_block (&block); + + /* Initialize the scalarizer. */ + gfc_init_loopinfo (&loop); + + gfc_init_se (&lse, NULL); + gfc_init_se (&rse, NULL); + + /* Walk the rhs. */ + rss = gfc_walk_expr (expr); + if (rss == gfc_ss_terminator) + { + /* The rhs is scalar. Add a ss for the expression. */ + rss = gfc_get_ss (); + rss->next = gfc_ss_terminator; + rss->type = GFC_SS_SCALAR; + rss->expr = expr; + } + + /* Create a SS for the destination. */ + lss = gfc_get_ss (); + lss->type = GFC_SS_COMPONENT; + lss->expr = NULL; + lss->shape = gfc_get_shape (cm->as->rank); + lss->next = gfc_ss_terminator; + lss->data.info.dimen = cm->as->rank; + lss->data.info.descriptor = dest; + lss->data.info.data = gfc_conv_array_data (dest); + lss->data.info.offset = gfc_conv_array_offset (dest); + for (n = 0; n < cm->as->rank; n++) + { + lss->data.info.dim[n] = n; + lss->data.info.start[n] = gfc_conv_array_lbound (dest, n); + lss->data.info.stride[n] = gfc_index_one_node; + + mpz_init (lss->shape[n]); + mpz_sub (lss->shape[n], cm->as->upper[n]->value.integer, + cm->as->lower[n]->value.integer); + mpz_add_ui (lss->shape[n], lss->shape[n], 1); + } + + /* Associate the SS with the loop. */ + gfc_add_ss_to_loop (&loop, lss); + gfc_add_ss_to_loop (&loop, rss); + + /* Calculate the bounds of the scalarization. */ + gfc_conv_ss_startstride (&loop); + + /* Setup the scalarizing loops. */ + gfc_conv_loop_setup (&loop, &expr->where); + + /* Setup the gfc_se structures. */ + gfc_copy_loopinfo_to_se (&lse, &loop); + gfc_copy_loopinfo_to_se (&rse, &loop); + + rse.ss = rss; + gfc_mark_ss_chain_used (rss, 1); + lse.ss = lss; + gfc_mark_ss_chain_used (lss, 1); + + /* Start the scalarized loop body. */ + gfc_start_scalarized_body (&loop, &body); + + gfc_conv_tmp_array_ref (&lse); + if (cm->ts.type == BT_CHARACTER) + lse.string_length = cm->ts.cl->backend_decl; + + gfc_conv_expr (&rse, expr); + + tmp = gfc_trans_scalar_assign (&lse, &rse, cm->ts, true, false); + gfc_add_expr_to_block (&body, tmp); + + gcc_assert (rse.ss == gfc_ss_terminator); + + /* Generate the copying loops. */ + gfc_trans_scalarizing_loops (&loop, &body); + + /* Wrap the whole thing up. */ + gfc_add_block_to_block (&block, &loop.pre); + gfc_add_block_to_block (&block, &loop.post); + + for (n = 0; n < cm->as->rank; n++) + mpz_clear (lss->shape[n]); + gfc_free (lss->shape); + + gfc_cleanup_loop (&loop); + + return gfc_finish_block (&block); +} + + +/* Assign a single component of a derived type constructor. */ + +static tree +gfc_trans_subcomponent_assign (tree dest, gfc_component * cm, gfc_expr * expr) +{ + gfc_se se; + gfc_se lse; + gfc_ss *rss; + stmtblock_t block; + tree tmp; + tree offset; + int n; + + gfc_start_block (&block); + + if (cm->attr.pointer) + { + gfc_init_se (&se, NULL); + /* Pointer component. */ + if (cm->attr.dimension) + { + /* Array pointer. */ + if (expr->expr_type == EXPR_NULL) + gfc_conv_descriptor_data_set (&block, dest, null_pointer_node); + else + { + rss = gfc_walk_expr (expr); + se.direct_byref = 1; + se.expr = dest; + gfc_conv_expr_descriptor (&se, expr, rss); + gfc_add_block_to_block (&block, &se.pre); + gfc_add_block_to_block (&block, &se.post); + } + } + else + { + /* Scalar pointers. */ + se.want_pointer = 1; + gfc_conv_expr (&se, expr); + gfc_add_block_to_block (&block, &se.pre); + gfc_add_modify (&block, dest, + fold_convert (TREE_TYPE (dest), se.expr)); + gfc_add_block_to_block (&block, &se.post); + } + } + else if (cm->attr.dimension) + { + if (cm->attr.allocatable && expr->expr_type == EXPR_NULL) + gfc_conv_descriptor_data_set (&block, dest, null_pointer_node); + else if (cm->attr.allocatable) + { + tree tmp2; + + gfc_init_se (&se, NULL); + + rss = gfc_walk_expr (expr); + se.want_pointer = 0; + gfc_conv_expr_descriptor (&se, expr, rss); + gfc_add_block_to_block (&block, &se.pre); + + tmp = fold_convert (TREE_TYPE (dest), se.expr); + gfc_add_modify (&block, dest, tmp); + + if (cm->ts.type == BT_DERIVED && cm->ts.derived->attr.alloc_comp) + tmp = gfc_copy_alloc_comp (cm->ts.derived, se.expr, dest, + cm->as->rank); + else + tmp = gfc_duplicate_allocatable (dest, se.expr, + TREE_TYPE(cm->backend_decl), + cm->as->rank); + + gfc_add_expr_to_block (&block, tmp); + gfc_add_block_to_block (&block, &se.post); + + if (expr->expr_type != EXPR_VARIABLE) + gfc_conv_descriptor_data_set (&block, se.expr, null_pointer_node); + + /* Shift the lbound and ubound of temporaries to being unity, rather + than zero, based. Calculate the offset for all cases. */ + offset = gfc_conv_descriptor_offset (dest); + gfc_add_modify (&block, offset, gfc_index_zero_node); + tmp2 =gfc_create_var (gfc_array_index_type, NULL); + for (n = 0; n < expr->rank; n++) + { + if (expr->expr_type != EXPR_VARIABLE + && expr->expr_type != EXPR_CONSTANT) + { + tree span; + tmp = gfc_conv_descriptor_ubound (dest, gfc_rank_cst[n]); + span = fold_build2 (MINUS_EXPR, gfc_array_index_type, tmp, + gfc_conv_descriptor_lbound (dest, gfc_rank_cst[n])); + gfc_add_modify (&block, tmp, + fold_build2 (PLUS_EXPR, + gfc_array_index_type, + span, gfc_index_one_node)); + tmp = gfc_conv_descriptor_lbound (dest, gfc_rank_cst[n]); + gfc_add_modify (&block, tmp, gfc_index_one_node); + } + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, + gfc_conv_descriptor_lbound (dest, + gfc_rank_cst[n]), + gfc_conv_descriptor_stride (dest, + gfc_rank_cst[n])); + gfc_add_modify (&block, tmp2, tmp); + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, offset, tmp2); + gfc_add_modify (&block, offset, tmp); + } + + if (expr->expr_type == EXPR_FUNCTION + && expr->value.function.isym + && expr->value.function.isym->conversion + && expr->value.function.actual->expr + && expr->value.function.actual->expr->expr_type + == EXPR_VARIABLE) + { + /* If a conversion expression has a null data pointer + argument, nullify the allocatable component. */ + gfc_symbol *s; + tree non_null_expr; + tree null_expr; + s = expr->value.function.actual->expr->symtree->n.sym; + if (s->attr.allocatable || s->attr.pointer) + { + non_null_expr = gfc_finish_block (&block); + gfc_start_block (&block); + gfc_conv_descriptor_data_set (&block, dest, + null_pointer_node); + null_expr = gfc_finish_block (&block); + tmp = gfc_conv_descriptor_data_get (s->backend_decl); + tmp = build2 (EQ_EXPR, boolean_type_node, tmp, + fold_convert (TREE_TYPE (tmp), + null_pointer_node)); + return build3_v (COND_EXPR, tmp, null_expr, + non_null_expr); + } + } + } + else + { + tmp = gfc_trans_subarray_assign (dest, cm, expr); + gfc_add_expr_to_block (&block, tmp); + } + } + else if (expr->ts.type == BT_DERIVED) + { + if (expr->expr_type != EXPR_STRUCTURE) + { + gfc_init_se (&se, NULL); + gfc_conv_expr (&se, expr); + gfc_add_block_to_block (&block, &se.pre); + gfc_add_modify (&block, dest, + fold_convert (TREE_TYPE (dest), se.expr)); + gfc_add_block_to_block (&block, &se.post); + } + else + { + /* Nested constructors. */ + tmp = gfc_trans_structure_assign (dest, expr); + gfc_add_expr_to_block (&block, tmp); + } + } + else + { + /* Scalar component. */ + gfc_init_se (&se, NULL); + gfc_init_se (&lse, NULL); + + gfc_conv_expr (&se, expr); + if (cm->ts.type == BT_CHARACTER) + lse.string_length = cm->ts.cl->backend_decl; + lse.expr = dest; + tmp = gfc_trans_scalar_assign (&lse, &se, cm->ts, true, false); + gfc_add_expr_to_block (&block, tmp); + } + return gfc_finish_block (&block); +} + +/* Assign a derived type constructor to a variable. */ + +static tree +gfc_trans_structure_assign (tree dest, gfc_expr * expr) +{ + gfc_constructor *c; + gfc_component *cm; + stmtblock_t block; + tree field; + tree tmp; + + gfc_start_block (&block); + cm = expr->ts.derived->components; + for (c = expr->value.constructor; c; c = c->next, cm = cm->next) + { + /* Skip absent members in default initializers. */ + if (!c->expr) + continue; + + field = cm->backend_decl; + tmp = fold_build3 (COMPONENT_REF, TREE_TYPE (field), + dest, field, NULL_TREE); + tmp = gfc_trans_subcomponent_assign (tmp, cm, c->expr); + gfc_add_expr_to_block (&block, tmp); + } + return gfc_finish_block (&block); +} + +/* Build an expression for a constructor. If init is nonzero then + this is part of a static variable initializer. */ + +void +gfc_conv_structure (gfc_se * se, gfc_expr * expr, int init) +{ + gfc_constructor *c; + gfc_component *cm; + tree val; + tree type; + tree tmp; + VEC(constructor_elt,gc) *v = NULL; + + gcc_assert (se->ss == NULL); + gcc_assert (expr->expr_type == EXPR_STRUCTURE); + type = gfc_typenode_for_spec (&expr->ts); + + if (!init) + { + /* Create a temporary variable and fill it in. */ + se->expr = gfc_create_var (type, expr->ts.derived->name); + tmp = gfc_trans_structure_assign (se->expr, expr); + gfc_add_expr_to_block (&se->pre, tmp); + return; + } + + cm = expr->ts.derived->components; + + for (c = expr->value.constructor; c; c = c->next, cm = cm->next) + { + /* Skip absent members in default initializers and allocatable + components. Although the latter have a default initializer + of EXPR_NULL,... by default, the static nullify is not needed + since this is done every time we come into scope. */ + if (!c->expr || cm->attr.allocatable) + continue; + + val = gfc_conv_initializer (c->expr, &cm->ts, + TREE_TYPE (cm->backend_decl), cm->attr.dimension, cm->attr.pointer); + + /* Append it to the constructor list. */ + CONSTRUCTOR_APPEND_ELT (v, cm->backend_decl, val); + } + se->expr = build_constructor (type, v); + if (init) + TREE_CONSTANT (se->expr) = 1; +} + + +/* Translate a substring expression. */ + +static void +gfc_conv_substring_expr (gfc_se * se, gfc_expr * expr) +{ + gfc_ref *ref; + + ref = expr->ref; + + gcc_assert (ref == NULL || ref->type == REF_SUBSTRING); + + se->expr = gfc_build_wide_string_const (expr->ts.kind, + expr->value.character.length, + expr->value.character.string); + + se->string_length = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (se->expr))); + TYPE_STRING_FLAG (TREE_TYPE (se->expr)) = 1; + + if (ref) + gfc_conv_substring (se, ref, expr->ts.kind, NULL, &expr->where); +} + + +/* Entry point for expression translation. Evaluates a scalar quantity. + EXPR is the expression to be translated, and SE is the state structure if + called from within the scalarized. */ + +void +gfc_conv_expr (gfc_se * se, gfc_expr * expr) +{ + if (se->ss && se->ss->expr == expr + && (se->ss->type == GFC_SS_SCALAR || se->ss->type == GFC_SS_REFERENCE)) + { + /* Substitute a scalar expression evaluated outside the scalarization + loop. */ + se->expr = se->ss->data.scalar.expr; + se->string_length = se->ss->string_length; + gfc_advance_se_ss_chain (se); + return; + } + + /* We need to convert the expressions for the iso_c_binding derived types. + C_NULL_PTR and C_NULL_FUNPTR will be made EXPR_NULL, which evaluates to + null_pointer_node. C_PTR and C_FUNPTR are converted to match the + typespec for the C_PTR and C_FUNPTR symbols, which has already been + updated to be an integer with a kind equal to the size of a (void *). */ + if (expr->ts.type == BT_DERIVED && expr->ts.derived + && expr->ts.derived->attr.is_iso_c) + { + if (expr->symtree->n.sym->intmod_sym_id == ISOCBINDING_NULL_PTR + || expr->symtree->n.sym->intmod_sym_id == ISOCBINDING_NULL_FUNPTR) + { + /* Set expr_type to EXPR_NULL, which will result in + null_pointer_node being used below. */ + expr->expr_type = EXPR_NULL; + } + else + { + /* Update the type/kind of the expression to be what the new + type/kind are for the updated symbols of C_PTR/C_FUNPTR. */ + expr->ts.type = expr->ts.derived->ts.type; + expr->ts.f90_type = expr->ts.derived->ts.f90_type; + expr->ts.kind = expr->ts.derived->ts.kind; + } + } + + switch (expr->expr_type) + { + case EXPR_OP: + gfc_conv_expr_op (se, expr); + break; + + case EXPR_FUNCTION: + gfc_conv_function_expr (se, expr); + break; + + case EXPR_CONSTANT: + gfc_conv_constant (se, expr); + break; + + case EXPR_VARIABLE: + gfc_conv_variable (se, expr); + break; + + case EXPR_NULL: + se->expr = null_pointer_node; + break; + + case EXPR_SUBSTRING: + gfc_conv_substring_expr (se, expr); + break; + + case EXPR_STRUCTURE: + gfc_conv_structure (se, expr, 0); + break; + + case EXPR_ARRAY: + gfc_conv_array_constructor_expr (se, expr); + break; + + default: + gcc_unreachable (); + break; + } +} + +/* Like gfc_conv_expr_val, but the value is also suitable for use in the lhs + of an assignment. */ +void +gfc_conv_expr_lhs (gfc_se * se, gfc_expr * expr) +{ + gfc_conv_expr (se, expr); + /* All numeric lvalues should have empty post chains. If not we need to + figure out a way of rewriting an lvalue so that it has no post chain. */ + gcc_assert (expr->ts.type == BT_CHARACTER || !se->post.head); +} + +/* Like gfc_conv_expr, but the POST block is guaranteed to be empty for + numeric expressions. Used for scalar values where inserting cleanup code + is inconvenient. */ +void +gfc_conv_expr_val (gfc_se * se, gfc_expr * expr) +{ + tree val; + + gcc_assert (expr->ts.type != BT_CHARACTER); + gfc_conv_expr (se, expr); + if (se->post.head) + { + val = gfc_create_var (TREE_TYPE (se->expr), NULL); + gfc_add_modify (&se->pre, val, se->expr); + se->expr = val; + gfc_add_block_to_block (&se->pre, &se->post); + } +} + +/* Helper to translate an expression and convert it to a particular type. */ +void +gfc_conv_expr_type (gfc_se * se, gfc_expr * expr, tree type) +{ + gfc_conv_expr_val (se, expr); + se->expr = convert (type, se->expr); +} + + +/* Converts an expression so that it can be passed by reference. Scalar + values only. */ + +void +gfc_conv_expr_reference (gfc_se * se, gfc_expr * expr) +{ + tree var; + + if (se->ss && se->ss->expr == expr + && se->ss->type == GFC_SS_REFERENCE) + { + se->expr = se->ss->data.scalar.expr; + se->string_length = se->ss->string_length; + gfc_advance_se_ss_chain (se); + return; + } + + if (expr->ts.type == BT_CHARACTER) + { + gfc_conv_expr (se, expr); + gfc_conv_string_parameter (se); + return; + } + + if (expr->expr_type == EXPR_VARIABLE) + { + se->want_pointer = 1; + gfc_conv_expr (se, expr); + if (se->post.head) + { + var = gfc_create_var (TREE_TYPE (se->expr), NULL); + gfc_add_modify (&se->pre, var, se->expr); + gfc_add_block_to_block (&se->pre, &se->post); + se->expr = var; + } + return; + } + + if (expr->expr_type == EXPR_FUNCTION + && expr->symtree->n.sym->attr.pointer + && !expr->symtree->n.sym->attr.dimension) + { + se->want_pointer = 1; + gfc_conv_expr (se, expr); + var = gfc_create_var (TREE_TYPE (se->expr), NULL); + gfc_add_modify (&se->pre, var, se->expr); + se->expr = var; + return; + } + + + gfc_conv_expr (se, expr); + + /* Create a temporary var to hold the value. */ + if (TREE_CONSTANT (se->expr)) + { + tree tmp = se->expr; + STRIP_TYPE_NOPS (tmp); + var = build_decl (CONST_DECL, NULL, TREE_TYPE (tmp)); + DECL_INITIAL (var) = tmp; + TREE_STATIC (var) = 1; + pushdecl (var); + } + else + { + var = gfc_create_var (TREE_TYPE (se->expr), NULL); + gfc_add_modify (&se->pre, var, se->expr); + } + gfc_add_block_to_block (&se->pre, &se->post); + + /* Take the address of that value. */ + se->expr = build_fold_addr_expr (var); +} + + +tree +gfc_trans_pointer_assign (gfc_code * code) +{ + return gfc_trans_pointer_assignment (code->expr, code->expr2); +} + + +/* Generate code for a pointer assignment. */ + +tree +gfc_trans_pointer_assignment (gfc_expr * expr1, gfc_expr * expr2) +{ + gfc_se lse; + gfc_se rse; + gfc_ss *lss; + gfc_ss *rss; + stmtblock_t block; + tree desc; + tree tmp; + tree decl; + + gfc_start_block (&block); + + gfc_init_se (&lse, NULL); + + lss = gfc_walk_expr (expr1); + rss = gfc_walk_expr (expr2); + if (lss == gfc_ss_terminator) + { + /* Scalar pointers. */ + lse.want_pointer = 1; + gfc_conv_expr (&lse, expr1); + gcc_assert (rss == gfc_ss_terminator); + gfc_init_se (&rse, NULL); + rse.want_pointer = 1; + gfc_conv_expr (&rse, expr2); + + if (expr1->symtree->n.sym->attr.proc_pointer + && expr1->symtree->n.sym->attr.dummy) + lse.expr = build_fold_indirect_ref (lse.expr); + + gfc_add_block_to_block (&block, &lse.pre); + gfc_add_block_to_block (&block, &rse.pre); + + /* Check character lengths if character expression. The test is only + really added if -fbounds-check is enabled. */ + if (expr1->ts.type == BT_CHARACTER && expr2->expr_type != EXPR_NULL) + { + gcc_assert (expr2->ts.type == BT_CHARACTER); + gcc_assert (lse.string_length && rse.string_length); + gfc_trans_same_strlen_check ("pointer assignment", &expr1->where, + lse.string_length, rse.string_length, + &block); + } + + gfc_add_modify (&block, lse.expr, + fold_convert (TREE_TYPE (lse.expr), rse.expr)); + + gfc_add_block_to_block (&block, &rse.post); + gfc_add_block_to_block (&block, &lse.post); + } + else + { + tree strlen_lhs; + tree strlen_rhs = NULL_TREE; + + /* Array pointer. */ + gfc_conv_expr_descriptor (&lse, expr1, lss); + strlen_lhs = lse.string_length; + switch (expr2->expr_type) + { + case EXPR_NULL: + /* Just set the data pointer to null. */ + gfc_conv_descriptor_data_set (&lse.pre, lse.expr, null_pointer_node); + break; + + case EXPR_VARIABLE: + /* Assign directly to the pointer's descriptor. */ + lse.direct_byref = 1; + gfc_conv_expr_descriptor (&lse, expr2, rss); + strlen_rhs = lse.string_length; + + /* If this is a subreference array pointer assignment, use the rhs + descriptor element size for the lhs span. */ + if (expr1->symtree->n.sym->attr.subref_array_pointer) + { + decl = expr1->symtree->n.sym->backend_decl; + gfc_init_se (&rse, NULL); + rse.descriptor_only = 1; + gfc_conv_expr (&rse, expr2); + tmp = gfc_get_element_type (TREE_TYPE (rse.expr)); + tmp = fold_convert (gfc_array_index_type, size_in_bytes (tmp)); + if (!INTEGER_CST_P (tmp)) + gfc_add_block_to_block (&lse.post, &rse.pre); + gfc_add_modify (&lse.post, GFC_DECL_SPAN(decl), tmp); + } + + break; + + default: + /* Assign to a temporary descriptor and then copy that + temporary to the pointer. */ + desc = lse.expr; + tmp = gfc_create_var (TREE_TYPE (desc), "ptrtemp"); + + lse.expr = tmp; + lse.direct_byref = 1; + gfc_conv_expr_descriptor (&lse, expr2, rss); + strlen_rhs = lse.string_length; + gfc_add_modify (&lse.pre, desc, tmp); + break; + } + + gfc_add_block_to_block (&block, &lse.pre); + + /* Check string lengths if applicable. The check is only really added + to the output code if -fbounds-check is enabled. */ + if (expr1->ts.type == BT_CHARACTER && expr2->expr_type != EXPR_NULL) + { + gcc_assert (expr2->ts.type == BT_CHARACTER); + gcc_assert (strlen_lhs && strlen_rhs); + gfc_trans_same_strlen_check ("pointer assignment", &expr1->where, + strlen_lhs, strlen_rhs, &block); + } + + gfc_add_block_to_block (&block, &lse.post); + } + return gfc_finish_block (&block); +} + + +/* Makes sure se is suitable for passing as a function string parameter. */ +/* TODO: Need to check all callers of this function. It may be abused. */ + +void +gfc_conv_string_parameter (gfc_se * se) +{ + tree type; + + if (TREE_CODE (se->expr) == STRING_CST) + { + type = TREE_TYPE (TREE_TYPE (se->expr)); + se->expr = gfc_build_addr_expr (build_pointer_type (type), se->expr); + return; + } + + if (TYPE_STRING_FLAG (TREE_TYPE (se->expr))) + { + if (TREE_CODE (se->expr) != INDIRECT_REF) + { + type = TREE_TYPE (se->expr); + se->expr = gfc_build_addr_expr (build_pointer_type (type), se->expr); + } + else + { + type = gfc_get_character_type_len (gfc_default_character_kind, + se->string_length); + type = build_pointer_type (type); + se->expr = gfc_build_addr_expr (type, se->expr); + } + } + + gcc_assert (POINTER_TYPE_P (TREE_TYPE (se->expr))); + gcc_assert (se->string_length + && TREE_CODE (TREE_TYPE (se->string_length)) == INTEGER_TYPE); +} + + +/* Generate code for assignment of scalar variables. Includes character + strings and derived types with allocatable components. */ + +tree +gfc_trans_scalar_assign (gfc_se * lse, gfc_se * rse, gfc_typespec ts, + bool l_is_temp, bool r_is_var) +{ + stmtblock_t block; + tree tmp; + tree cond; + + gfc_init_block (&block); + + if (ts.type == BT_CHARACTER) + { + tree rlen = NULL; + tree llen = NULL; + + if (lse->string_length != NULL_TREE) + { + gfc_conv_string_parameter (lse); + gfc_add_block_to_block (&block, &lse->pre); + llen = lse->string_length; + } + + if (rse->string_length != NULL_TREE) + { + gcc_assert (rse->string_length != NULL_TREE); + gfc_conv_string_parameter (rse); + gfc_add_block_to_block (&block, &rse->pre); + rlen = rse->string_length; + } + + gfc_trans_string_copy (&block, llen, lse->expr, ts.kind, rlen, + rse->expr, ts.kind); + } + else if (ts.type == BT_DERIVED && ts.derived->attr.alloc_comp) + { + cond = NULL_TREE; + + /* Are the rhs and the lhs the same? */ + if (r_is_var) + { + cond = fold_build2 (EQ_EXPR, boolean_type_node, + build_fold_addr_expr (lse->expr), + build_fold_addr_expr (rse->expr)); + cond = gfc_evaluate_now (cond, &lse->pre); + } + + /* Deallocate the lhs allocated components as long as it is not + the same as the rhs. This must be done following the assignment + to prevent deallocating data that could be used in the rhs + expression. */ + if (!l_is_temp) + { + tmp = gfc_evaluate_now (lse->expr, &lse->pre); + tmp = gfc_deallocate_alloc_comp (ts.derived, tmp, 0); + if (r_is_var) + tmp = build3_v (COND_EXPR, cond, build_empty_stmt (), tmp); + gfc_add_expr_to_block (&lse->post, tmp); + } + + gfc_add_block_to_block (&block, &rse->pre); + gfc_add_block_to_block (&block, &lse->pre); + + gfc_add_modify (&block, lse->expr, + fold_convert (TREE_TYPE (lse->expr), rse->expr)); + + /* Do a deep copy if the rhs is a variable, if it is not the + same as the lhs. */ + if (r_is_var) + { + tmp = gfc_copy_alloc_comp (ts.derived, rse->expr, lse->expr, 0); + tmp = build3_v (COND_EXPR, cond, build_empty_stmt (), tmp); + gfc_add_expr_to_block (&block, tmp); + } + } + else + { + gfc_add_block_to_block (&block, &lse->pre); + gfc_add_block_to_block (&block, &rse->pre); + + gfc_add_modify (&block, lse->expr, + fold_convert (TREE_TYPE (lse->expr), rse->expr)); + } + + gfc_add_block_to_block (&block, &lse->post); + gfc_add_block_to_block (&block, &rse->post); + + return gfc_finish_block (&block); +} + + +/* Try to translate array(:) = func (...), where func is a transformational + array function, without using a temporary. Returns NULL is this isn't the + case. */ + +static tree +gfc_trans_arrayfunc_assign (gfc_expr * expr1, gfc_expr * expr2) +{ + gfc_se se; + gfc_ss *ss; + gfc_ref * ref; + bool seen_array_ref; + + /* The caller has already checked rank>0 and expr_type == EXPR_FUNCTION. */ + if (expr2->value.function.isym && !gfc_is_intrinsic_libcall (expr2)) + return NULL; + + /* Elemental functions don't need a temporary anyway. */ + if (expr2->value.function.esym != NULL + && expr2->value.function.esym->attr.elemental) + return NULL; + + /* Fail if EXPR1 can't be expressed as a descriptor. */ + if (gfc_ref_needs_temporary_p (expr1->ref)) + return NULL; + + /* Functions returning pointers need temporaries. */ + if (expr2->symtree->n.sym->attr.pointer + || expr2->symtree->n.sym->attr.allocatable) + return NULL; + + /* Character array functions need temporaries unless the + character lengths are the same. */ + if (expr2->ts.type == BT_CHARACTER && expr2->rank > 0) + { + if (expr1->ts.cl->length == NULL + || expr1->ts.cl->length->expr_type != EXPR_CONSTANT) + return NULL; + + if (expr2->ts.cl->length == NULL + || expr2->ts.cl->length->expr_type != EXPR_CONSTANT) + return NULL; + + if (mpz_cmp (expr1->ts.cl->length->value.integer, + expr2->ts.cl->length->value.integer) != 0) + return NULL; + } + + /* Check that no LHS component references appear during an array + reference. This is needed because we do not have the means to + span any arbitrary stride with an array descriptor. This check + is not needed for the rhs because the function result has to be + a complete type. */ + seen_array_ref = false; + for (ref = expr1->ref; ref; ref = ref->next) + { + if (ref->type == REF_ARRAY) + seen_array_ref= true; + else if (ref->type == REF_COMPONENT && seen_array_ref) + return NULL; + } + + /* Check for a dependency. */ + if (gfc_check_fncall_dependency (expr1, INTENT_OUT, + expr2->value.function.esym, + expr2->value.function.actual, + NOT_ELEMENTAL)) + return NULL; + + /* The frontend doesn't seem to bother filling in expr->symtree for intrinsic + functions. */ + gcc_assert (expr2->value.function.isym + || (gfc_return_by_reference (expr2->value.function.esym) + && expr2->value.function.esym->result->attr.dimension)); + + ss = gfc_walk_expr (expr1); + gcc_assert (ss != gfc_ss_terminator); + gfc_init_se (&se, NULL); + gfc_start_block (&se.pre); + se.want_pointer = 1; + + gfc_conv_array_parameter (&se, expr1, ss, 0, NULL, NULL); + + se.direct_byref = 1; + se.ss = gfc_walk_expr (expr2); + gcc_assert (se.ss != gfc_ss_terminator); + gfc_conv_function_expr (&se, expr2); + gfc_add_block_to_block (&se.pre, &se.post); + + return gfc_finish_block (&se.pre); +} + +/* Determine whether the given EXPR_CONSTANT is a zero initializer. */ + +static bool +is_zero_initializer_p (gfc_expr * expr) +{ + if (expr->expr_type != EXPR_CONSTANT) + return false; + + /* We ignore constants with prescribed memory representations for now. */ + if (expr->representation.string) + return false; + + switch (expr->ts.type) + { + case BT_INTEGER: + return mpz_cmp_si (expr->value.integer, 0) == 0; + + case BT_REAL: + return mpfr_zero_p (expr->value.real) + && MPFR_SIGN (expr->value.real) >= 0; + + case BT_LOGICAL: + return expr->value.logical == 0; + + case BT_COMPLEX: + return mpfr_zero_p (expr->value.complex.r) + && MPFR_SIGN (expr->value.complex.r) >= 0 + && mpfr_zero_p (expr->value.complex.i) + && MPFR_SIGN (expr->value.complex.i) >= 0; + + default: + break; + } + return false; +} + +/* Try to efficiently translate array(:) = 0. Return NULL if this + can't be done. */ + +static tree +gfc_trans_zero_assign (gfc_expr * expr) +{ + tree dest, len, type; + tree tmp; + gfc_symbol *sym; + + sym = expr->symtree->n.sym; + dest = gfc_get_symbol_decl (sym); + + type = TREE_TYPE (dest); + if (POINTER_TYPE_P (type)) + type = TREE_TYPE (type); + if (!GFC_ARRAY_TYPE_P (type)) + return NULL_TREE; + + /* Determine the length of the array. */ + len = GFC_TYPE_ARRAY_SIZE (type); + if (!len || TREE_CODE (len) != INTEGER_CST) + return NULL_TREE; + + tmp = TYPE_SIZE_UNIT (gfc_get_element_type (type)); + len = fold_build2 (MULT_EXPR, gfc_array_index_type, len, + fold_convert (gfc_array_index_type, tmp)); + + /* Convert arguments to the correct types. */ + if (!POINTER_TYPE_P (TREE_TYPE (dest))) + dest = gfc_build_addr_expr (pvoid_type_node, dest); + else + dest = fold_convert (pvoid_type_node, dest); + len = fold_convert (size_type_node, len); + + /* Construct call to __builtin_memset. */ + tmp = build_call_expr (built_in_decls[BUILT_IN_MEMSET], + 3, dest, integer_zero_node, len); + return fold_convert (void_type_node, tmp); +} + + +/* Helper for gfc_trans_array_copy and gfc_trans_array_constructor_copy + that constructs the call to __builtin_memcpy. */ + +tree +gfc_build_memcpy_call (tree dst, tree src, tree len) +{ + tree tmp; + + /* Convert arguments to the correct types. */ + if (!POINTER_TYPE_P (TREE_TYPE (dst))) + dst = gfc_build_addr_expr (pvoid_type_node, dst); + else + dst = fold_convert (pvoid_type_node, dst); + + if (!POINTER_TYPE_P (TREE_TYPE (src))) + src = gfc_build_addr_expr (pvoid_type_node, src); + else + src = fold_convert (pvoid_type_node, src); + + len = fold_convert (size_type_node, len); + + /* Construct call to __builtin_memcpy. */ + tmp = build_call_expr (built_in_decls[BUILT_IN_MEMCPY], 3, dst, src, len); + return fold_convert (void_type_node, tmp); +} + + +/* Try to efficiently translate dst(:) = src(:). Return NULL if this + can't be done. EXPR1 is the destination/lhs and EXPR2 is the + source/rhs, both are gfc_full_array_ref_p which have been checked for + dependencies. */ + +static tree +gfc_trans_array_copy (gfc_expr * expr1, gfc_expr * expr2) +{ + tree dst, dlen, dtype; + tree src, slen, stype; + tree tmp; + + dst = gfc_get_symbol_decl (expr1->symtree->n.sym); + src = gfc_get_symbol_decl (expr2->symtree->n.sym); + + dtype = TREE_TYPE (dst); + if (POINTER_TYPE_P (dtype)) + dtype = TREE_TYPE (dtype); + stype = TREE_TYPE (src); + if (POINTER_TYPE_P (stype)) + stype = TREE_TYPE (stype); + + if (!GFC_ARRAY_TYPE_P (dtype) || !GFC_ARRAY_TYPE_P (stype)) + return NULL_TREE; + + /* Determine the lengths of the arrays. */ + dlen = GFC_TYPE_ARRAY_SIZE (dtype); + if (!dlen || TREE_CODE (dlen) != INTEGER_CST) + return NULL_TREE; + tmp = TYPE_SIZE_UNIT (gfc_get_element_type (dtype)); + dlen = fold_build2 (MULT_EXPR, gfc_array_index_type, dlen, + fold_convert (gfc_array_index_type, tmp)); + + slen = GFC_TYPE_ARRAY_SIZE (stype); + if (!slen || TREE_CODE (slen) != INTEGER_CST) + return NULL_TREE; + tmp = TYPE_SIZE_UNIT (gfc_get_element_type (stype)); + slen = fold_build2 (MULT_EXPR, gfc_array_index_type, slen, + fold_convert (gfc_array_index_type, tmp)); + + /* Sanity check that they are the same. This should always be + the case, as we should already have checked for conformance. */ + if (!tree_int_cst_equal (slen, dlen)) + return NULL_TREE; + + return gfc_build_memcpy_call (dst, src, dlen); +} + + +/* Try to efficiently translate array(:) = (/ ... /). Return NULL if + this can't be done. EXPR1 is the destination/lhs for which + gfc_full_array_ref_p is true, and EXPR2 is the source/rhs. */ + +static tree +gfc_trans_array_constructor_copy (gfc_expr * expr1, gfc_expr * expr2) +{ + unsigned HOST_WIDE_INT nelem; + tree dst, dtype; + tree src, stype; + tree len; + tree tmp; + + nelem = gfc_constant_array_constructor_p (expr2->value.constructor); + if (nelem == 0) + return NULL_TREE; + + dst = gfc_get_symbol_decl (expr1->symtree->n.sym); + dtype = TREE_TYPE (dst); + if (POINTER_TYPE_P (dtype)) + dtype = TREE_TYPE (dtype); + if (!GFC_ARRAY_TYPE_P (dtype)) + return NULL_TREE; + + /* Determine the lengths of the array. */ + len = GFC_TYPE_ARRAY_SIZE (dtype); + if (!len || TREE_CODE (len) != INTEGER_CST) + return NULL_TREE; + + /* Confirm that the constructor is the same size. */ + if (compare_tree_int (len, nelem) != 0) + return NULL_TREE; + + tmp = TYPE_SIZE_UNIT (gfc_get_element_type (dtype)); + len = fold_build2 (MULT_EXPR, gfc_array_index_type, len, + fold_convert (gfc_array_index_type, tmp)); + + stype = gfc_typenode_for_spec (&expr2->ts); + src = gfc_build_constant_array_constructor (expr2, stype); + + stype = TREE_TYPE (src); + if (POINTER_TYPE_P (stype)) + stype = TREE_TYPE (stype); + + return gfc_build_memcpy_call (dst, src, len); +} + + +/* Subroutine of gfc_trans_assignment that actually scalarizes the + assignment. EXPR1 is the destination/RHS and EXPR2 is the source/LHS. */ + +static tree +gfc_trans_assignment_1 (gfc_expr * expr1, gfc_expr * expr2, bool init_flag) +{ + gfc_se lse; + gfc_se rse; + gfc_ss *lss; + gfc_ss *lss_section; + gfc_ss *rss; + gfc_loopinfo loop; + tree tmp; + stmtblock_t block; + stmtblock_t body; + bool l_is_temp; + bool scalar_to_array; + + /* Assignment of the form lhs = rhs. */ + gfc_start_block (&block); + + gfc_init_se (&lse, NULL); + gfc_init_se (&rse, NULL); + + /* Walk the lhs. */ + lss = gfc_walk_expr (expr1); + rss = NULL; + if (lss != gfc_ss_terminator) + { + /* The assignment needs scalarization. */ + lss_section = lss; + + /* Find a non-scalar SS from the lhs. */ + while (lss_section != gfc_ss_terminator + && lss_section->type != GFC_SS_SECTION) + lss_section = lss_section->next; + + gcc_assert (lss_section != gfc_ss_terminator); + + /* Initialize the scalarizer. */ + gfc_init_loopinfo (&loop); + + /* Walk the rhs. */ + rss = gfc_walk_expr (expr2); + if (rss == gfc_ss_terminator) + { + /* The rhs is scalar. Add a ss for the expression. */ + rss = gfc_get_ss (); + rss->next = gfc_ss_terminator; + rss->type = GFC_SS_SCALAR; + rss->expr = expr2; + } + /* Associate the SS with the loop. */ + gfc_add_ss_to_loop (&loop, lss); + gfc_add_ss_to_loop (&loop, rss); + + /* Calculate the bounds of the scalarization. */ + gfc_conv_ss_startstride (&loop); + /* Resolve any data dependencies in the statement. */ + gfc_conv_resolve_dependencies (&loop, lss, rss); + /* Setup the scalarizing loops. */ + gfc_conv_loop_setup (&loop, &expr2->where); + + /* Setup the gfc_se structures. */ + gfc_copy_loopinfo_to_se (&lse, &loop); + gfc_copy_loopinfo_to_se (&rse, &loop); + + rse.ss = rss; + gfc_mark_ss_chain_used (rss, 1); + if (loop.temp_ss == NULL) + { + lse.ss = lss; + gfc_mark_ss_chain_used (lss, 1); + } + else + { + lse.ss = loop.temp_ss; + gfc_mark_ss_chain_used (lss, 3); + gfc_mark_ss_chain_used (loop.temp_ss, 3); + } + + /* Start the scalarized loop body. */ + gfc_start_scalarized_body (&loop, &body); + } + else + gfc_init_block (&body); + + l_is_temp = (lss != gfc_ss_terminator && loop.temp_ss != NULL); + + /* Translate the expression. */ + gfc_conv_expr (&rse, expr2); + + if (l_is_temp) + { + gfc_conv_tmp_array_ref (&lse); + gfc_advance_se_ss_chain (&lse); + } + else + gfc_conv_expr (&lse, expr1); + + /* Assignments of scalar derived types with allocatable components + to arrays must be done with a deep copy and the rhs temporary + must have its components deallocated afterwards. */ + scalar_to_array = (expr2->ts.type == BT_DERIVED + && expr2->ts.derived->attr.alloc_comp + && expr2->expr_type != EXPR_VARIABLE + && !gfc_is_constant_expr (expr2) + && expr1->rank && !expr2->rank); + if (scalar_to_array) + { + tmp = gfc_deallocate_alloc_comp (expr2->ts.derived, rse.expr, 0); + gfc_add_expr_to_block (&loop.post, tmp); + } + + tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts, + l_is_temp || init_flag, + (expr2->expr_type == EXPR_VARIABLE) + || scalar_to_array); + gfc_add_expr_to_block (&body, tmp); + + if (lss == gfc_ss_terminator) + { + /* Use the scalar assignment as is. */ + gfc_add_block_to_block (&block, &body); + } + else + { + gcc_assert (lse.ss == gfc_ss_terminator + && rse.ss == gfc_ss_terminator); + + if (l_is_temp) + { + gfc_trans_scalarized_loop_boundary (&loop, &body); + + /* We need to copy the temporary to the actual lhs. */ + gfc_init_se (&lse, NULL); + gfc_init_se (&rse, NULL); + gfc_copy_loopinfo_to_se (&lse, &loop); + gfc_copy_loopinfo_to_se (&rse, &loop); + + rse.ss = loop.temp_ss; + lse.ss = lss; + + gfc_conv_tmp_array_ref (&rse); + gfc_advance_se_ss_chain (&rse); + gfc_conv_expr (&lse, expr1); + + gcc_assert (lse.ss == gfc_ss_terminator + && rse.ss == gfc_ss_terminator); + + tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts, + false, false); + gfc_add_expr_to_block (&body, tmp); + } + + /* Generate the copying loops. */ + gfc_trans_scalarizing_loops (&loop, &body); + + /* Wrap the whole thing up. */ + gfc_add_block_to_block (&block, &loop.pre); + gfc_add_block_to_block (&block, &loop.post); + + gfc_cleanup_loop (&loop); + } + + return gfc_finish_block (&block); +} + + +/* Check whether EXPR is a copyable array. */ + +static bool +copyable_array_p (gfc_expr * expr) +{ + if (expr->expr_type != EXPR_VARIABLE) + return false; + + /* First check it's an array. */ + if (expr->rank < 1 || !expr->ref || expr->ref->next) + return false; + + if (!gfc_full_array_ref_p (expr->ref)) + return false; + + /* Next check that it's of a simple enough type. */ + switch (expr->ts.type) + { + case BT_INTEGER: + case BT_REAL: + case BT_COMPLEX: + case BT_LOGICAL: + return true; + + case BT_CHARACTER: + return false; + + case BT_DERIVED: + return !expr->ts.derived->attr.alloc_comp; + + default: + break; + } + + return false; +} + +/* Translate an assignment. */ + +tree +gfc_trans_assignment (gfc_expr * expr1, gfc_expr * expr2, bool init_flag) +{ + tree tmp; + + /* Special case a single function returning an array. */ + if (expr2->expr_type == EXPR_FUNCTION && expr2->rank > 0) + { + tmp = gfc_trans_arrayfunc_assign (expr1, expr2); + if (tmp) + return tmp; + } + + /* Special case assigning an array to zero. */ + if (copyable_array_p (expr1) + && is_zero_initializer_p (expr2)) + { + tmp = gfc_trans_zero_assign (expr1); + if (tmp) + return tmp; + } + + /* Special case copying one array to another. */ + if (copyable_array_p (expr1) + && copyable_array_p (expr2) + && gfc_compare_types (&expr1->ts, &expr2->ts) + && !gfc_check_dependency (expr1, expr2, 0)) + { + tmp = gfc_trans_array_copy (expr1, expr2); + if (tmp) + return tmp; + } + + /* Special case initializing an array from a constant array constructor. */ + if (copyable_array_p (expr1) + && expr2->expr_type == EXPR_ARRAY + && gfc_compare_types (&expr1->ts, &expr2->ts)) + { + tmp = gfc_trans_array_constructor_copy (expr1, expr2); + if (tmp) + return tmp; + } + + /* Fallback to the scalarizer to generate explicit loops. */ + return gfc_trans_assignment_1 (expr1, expr2, init_flag); +} + +tree +gfc_trans_init_assign (gfc_code * code) +{ + return gfc_trans_assignment (code->expr, code->expr2, true); +} + +tree +gfc_trans_assign (gfc_code * code) +{ + return gfc_trans_assignment (code->expr, code->expr2, false); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-intrinsic.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-intrinsic.c new file mode 100644 index 0000000000..c0ffc14b72 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-intrinsic.c @@ -0,0 +1,5070 @@ +/* Intrinsic translation + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Paul Brook + and Steven Bosscher + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* trans-intrinsic.c-- generate GENERIC trees for calls to intrinsics. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tm.h" +#include "tree.h" +#include "ggc.h" +#include "toplev.h" +#include "real.h" +#include "gimple.h" +#include "flags.h" +#include "gfortran.h" +#include "arith.h" +#include "intrinsic.h" +#include "trans.h" +#include "trans-const.h" +#include "trans-types.h" +#include "trans-array.h" +#include "defaults.h" +/* Only for gfc_trans_assign and gfc_trans_pointer_assign. */ +#include "trans-stmt.h" + +/* This maps fortran intrinsic math functions to external library or GCC + builtin functions. */ +typedef struct gfc_intrinsic_map_t GTY(()) +{ + /* The explicit enum is required to work around inadequacies in the + garbage collection/gengtype parsing mechanism. */ + enum gfc_isym_id id; + + /* Enum value from the "language-independent", aka C-centric, part + of gcc, or END_BUILTINS of no such value set. */ + enum built_in_function code_r4; + enum built_in_function code_r8; + enum built_in_function code_r10; + enum built_in_function code_r16; + enum built_in_function code_c4; + enum built_in_function code_c8; + enum built_in_function code_c10; + enum built_in_function code_c16; + + /* True if the naming pattern is to prepend "c" for complex and + append "f" for kind=4. False if the naming pattern is to + prepend "_gfortran_" and append "[rc](4|8|10|16)". */ + bool libm_name; + + /* True if a complex version of the function exists. */ + bool complex_available; + + /* True if the function should be marked const. */ + bool is_constant; + + /* The base library name of this function. */ + const char *name; + + /* Cache decls created for the various operand types. */ + tree real4_decl; + tree real8_decl; + tree real10_decl; + tree real16_decl; + tree complex4_decl; + tree complex8_decl; + tree complex10_decl; + tree complex16_decl; +} +gfc_intrinsic_map_t; + +/* ??? The NARGS==1 hack here is based on the fact that (c99 at least) + defines complex variants of all of the entries in mathbuiltins.def + except for atan2. */ +#define DEFINE_MATH_BUILTIN(ID, NAME, ARGTYPE) \ + { GFC_ISYM_ ## ID, BUILT_IN_ ## ID ## F, BUILT_IN_ ## ID, \ + BUILT_IN_ ## ID ## L, BUILT_IN_ ## ID ## L, 0, 0, 0, 0, true, \ + false, true, NAME, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE, \ + NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE}, + +#define DEFINE_MATH_BUILTIN_C(ID, NAME, ARGTYPE) \ + { GFC_ISYM_ ## ID, BUILT_IN_ ## ID ## F, BUILT_IN_ ## ID, \ + BUILT_IN_ ## ID ## L, BUILT_IN_ ## ID ## L, BUILT_IN_C ## ID ## F, \ + BUILT_IN_C ## ID, BUILT_IN_C ## ID ## L, BUILT_IN_C ## ID ## L, true, \ + true, true, NAME, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE, \ + NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE}, + +#define LIB_FUNCTION(ID, NAME, HAVE_COMPLEX) \ + { GFC_ISYM_ ## ID, END_BUILTINS, END_BUILTINS, END_BUILTINS, END_BUILTINS, \ + END_BUILTINS, END_BUILTINS, END_BUILTINS, END_BUILTINS, \ + false, HAVE_COMPLEX, true, NAME, NULL_TREE, NULL_TREE, NULL_TREE, \ + NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE } + +static GTY(()) gfc_intrinsic_map_t gfc_intrinsic_map[] = +{ + /* Functions built into gcc itself. */ +#include "mathbuiltins.def" + + /* Functions in libgfortran. */ + LIB_FUNCTION (ERFC_SCALED, "erfc_scaled", false), + + /* End the list. */ + LIB_FUNCTION (NONE, NULL, false) + +}; +#undef LIB_FUNCTION +#undef DEFINE_MATH_BUILTIN +#undef DEFINE_MATH_BUILTIN_C + +/* Structure for storing components of a floating number to be used by + elemental functions to manipulate reals. */ +typedef struct +{ + tree arg; /* Variable tree to view convert to integer. */ + tree expn; /* Variable tree to save exponent. */ + tree frac; /* Variable tree to save fraction. */ + tree smask; /* Constant tree of sign's mask. */ + tree emask; /* Constant tree of exponent's mask. */ + tree fmask; /* Constant tree of fraction's mask. */ + tree edigits; /* Constant tree of the number of exponent bits. */ + tree fdigits; /* Constant tree of the number of fraction bits. */ + tree f1; /* Constant tree of the f1 defined in the real model. */ + tree bias; /* Constant tree of the bias of exponent in the memory. */ + tree type; /* Type tree of arg1. */ + tree mtype; /* Type tree of integer type. Kind is that of arg1. */ +} +real_compnt_info; + +enum rounding_mode { RND_ROUND, RND_TRUNC, RND_CEIL, RND_FLOOR }; + +/* Evaluate the arguments to an intrinsic function. The value + of NARGS may be less than the actual number of arguments in EXPR + to allow optional "KIND" arguments that are not included in the + generated code to be ignored. */ + +static void +gfc_conv_intrinsic_function_args (gfc_se *se, gfc_expr *expr, + tree *argarray, int nargs) +{ + gfc_actual_arglist *actual; + gfc_expr *e; + gfc_intrinsic_arg *formal; + gfc_se argse; + int curr_arg; + + formal = expr->value.function.isym->formal; + actual = expr->value.function.actual; + + for (curr_arg = 0; curr_arg < nargs; curr_arg++, + actual = actual->next, + formal = formal ? formal->next : NULL) + { + gcc_assert (actual); + e = actual->expr; + /* Skip omitted optional arguments. */ + if (!e) + { + --curr_arg; + continue; + } + + /* Evaluate the parameter. This will substitute scalarized + references automatically. */ + gfc_init_se (&argse, se); + + if (e->ts.type == BT_CHARACTER) + { + gfc_conv_expr (&argse, e); + gfc_conv_string_parameter (&argse); + argarray[curr_arg++] = argse.string_length; + gcc_assert (curr_arg < nargs); + } + else + gfc_conv_expr_val (&argse, e); + + /* If an optional argument is itself an optional dummy argument, + check its presence and substitute a null if absent. */ + if (e->expr_type == EXPR_VARIABLE + && e->symtree->n.sym->attr.optional + && formal + && formal->optional) + gfc_conv_missing_dummy (&argse, e, formal->ts, 0); + + gfc_add_block_to_block (&se->pre, &argse.pre); + gfc_add_block_to_block (&se->post, &argse.post); + argarray[curr_arg] = argse.expr; + } +} + +/* Count the number of actual arguments to the intrinsic function EXPR + including any "hidden" string length arguments. */ + +static unsigned int +gfc_intrinsic_argument_list_length (gfc_expr *expr) +{ + int n = 0; + gfc_actual_arglist *actual; + + for (actual = expr->value.function.actual; actual; actual = actual->next) + { + if (!actual->expr) + continue; + + if (actual->expr->ts.type == BT_CHARACTER) + n += 2; + else + n++; + } + + return n; +} + + +/* Conversions between different types are output by the frontend as + intrinsic functions. We implement these directly with inline code. */ + +static void +gfc_conv_intrinsic_conversion (gfc_se * se, gfc_expr * expr) +{ + tree type; + tree *args; + int nargs; + + nargs = gfc_intrinsic_argument_list_length (expr); + args = (tree *) alloca (sizeof (tree) * nargs); + + /* Evaluate all the arguments passed. Whilst we're only interested in the + first one here, there are other parts of the front-end that assume this + and will trigger an ICE if it's not the case. */ + type = gfc_typenode_for_spec (&expr->ts); + gcc_assert (expr->value.function.actual->expr); + gfc_conv_intrinsic_function_args (se, expr, args, nargs); + + /* Conversion between character kinds involves a call to a library + function. */ + if (expr->ts.type == BT_CHARACTER) + { + tree fndecl, var, addr, tmp; + + if (expr->ts.kind == 1 + && expr->value.function.actual->expr->ts.kind == 4) + fndecl = gfor_fndecl_convert_char4_to_char1; + else if (expr->ts.kind == 4 + && expr->value.function.actual->expr->ts.kind == 1) + fndecl = gfor_fndecl_convert_char1_to_char4; + else + gcc_unreachable (); + + /* Create the variable storing the converted value. */ + type = gfc_get_pchar_type (expr->ts.kind); + var = gfc_create_var (type, "str"); + addr = gfc_build_addr_expr (build_pointer_type (type), var); + + /* Call the library function that will perform the conversion. */ + gcc_assert (nargs >= 2); + tmp = build_call_expr (fndecl, 3, addr, args[0], args[1]); + gfc_add_expr_to_block (&se->pre, tmp); + + /* Free the temporary afterwards. */ + tmp = gfc_call_free (var); + gfc_add_expr_to_block (&se->post, tmp); + + se->expr = var; + se->string_length = args[0]; + + return; + } + + /* Conversion from complex to non-complex involves taking the real + component of the value. */ + if (TREE_CODE (TREE_TYPE (args[0])) == COMPLEX_TYPE + && expr->ts.type != BT_COMPLEX) + { + tree artype; + + artype = TREE_TYPE (TREE_TYPE (args[0])); + args[0] = fold_build1 (REALPART_EXPR, artype, args[0]); + } + + se->expr = convert (type, args[0]); +} + +/* This is needed because the gcc backend only implements + FIX_TRUNC_EXPR, which is the same as INT() in Fortran. + FLOOR(x) = INT(x) <= x ? INT(x) : INT(x) - 1 + Similarly for CEILING. */ + +static tree +build_fixbound_expr (stmtblock_t * pblock, tree arg, tree type, int up) +{ + tree tmp; + tree cond; + tree argtype; + tree intval; + + argtype = TREE_TYPE (arg); + arg = gfc_evaluate_now (arg, pblock); + + intval = convert (type, arg); + intval = gfc_evaluate_now (intval, pblock); + + tmp = convert (argtype, intval); + cond = fold_build2 (up ? GE_EXPR : LE_EXPR, boolean_type_node, tmp, arg); + + tmp = fold_build2 (up ? PLUS_EXPR : MINUS_EXPR, type, intval, + build_int_cst (type, 1)); + tmp = fold_build3 (COND_EXPR, type, cond, intval, tmp); + return tmp; +} + + +/* Round to nearest integer, away from zero. */ + +static tree +build_round_expr (tree arg, tree restype) +{ + tree argtype; + tree fn; + bool longlong; + int argprec, resprec; + + argtype = TREE_TYPE (arg); + argprec = TYPE_PRECISION (argtype); + resprec = TYPE_PRECISION (restype); + + /* Depending on the type of the result, choose the long int intrinsic + (lround family) or long long intrinsic (llround). We might also + need to convert the result afterwards. */ + if (resprec <= LONG_TYPE_SIZE) + longlong = false; + else if (resprec <= LONG_LONG_TYPE_SIZE) + longlong = true; + else + gcc_unreachable (); + + /* Now, depending on the argument type, we choose between intrinsics. */ + if (argprec == TYPE_PRECISION (float_type_node)) + fn = built_in_decls[longlong ? BUILT_IN_LLROUNDF : BUILT_IN_LROUNDF]; + else if (argprec == TYPE_PRECISION (double_type_node)) + fn = built_in_decls[longlong ? BUILT_IN_LLROUND : BUILT_IN_LROUND]; + else if (argprec == TYPE_PRECISION (long_double_type_node)) + fn = built_in_decls[longlong ? BUILT_IN_LLROUNDL : BUILT_IN_LROUNDL]; + else + gcc_unreachable (); + + return fold_convert (restype, build_call_expr (fn, 1, arg)); +} + + +/* Convert a real to an integer using a specific rounding mode. + Ideally we would just build the corresponding GENERIC node, + however the RTL expander only actually supports FIX_TRUNC_EXPR. */ + +static tree +build_fix_expr (stmtblock_t * pblock, tree arg, tree type, + enum rounding_mode op) +{ + switch (op) + { + case RND_FLOOR: + return build_fixbound_expr (pblock, arg, type, 0); + break; + + case RND_CEIL: + return build_fixbound_expr (pblock, arg, type, 1); + break; + + case RND_ROUND: + return build_round_expr (arg, type); + break; + + case RND_TRUNC: + return fold_build1 (FIX_TRUNC_EXPR, type, arg); + break; + + default: + gcc_unreachable (); + } +} + + +/* Round a real value using the specified rounding mode. + We use a temporary integer of that same kind size as the result. + Values larger than those that can be represented by this kind are + unchanged, as they will not be accurate enough to represent the + rounding. + huge = HUGE (KIND (a)) + aint (a) = ((a > huge) || (a < -huge)) ? a : (real)(int)a + */ + +static void +gfc_conv_intrinsic_aint (gfc_se * se, gfc_expr * expr, enum rounding_mode op) +{ + tree type; + tree itype; + tree arg[2]; + tree tmp; + tree cond; + mpfr_t huge; + int n, nargs; + int kind; + + kind = expr->ts.kind; + nargs = gfc_intrinsic_argument_list_length (expr); + + n = END_BUILTINS; + /* We have builtin functions for some cases. */ + switch (op) + { + case RND_ROUND: + switch (kind) + { + case 4: + n = BUILT_IN_ROUNDF; + break; + + case 8: + n = BUILT_IN_ROUND; + break; + + case 10: + case 16: + n = BUILT_IN_ROUNDL; + break; + } + break; + + case RND_TRUNC: + switch (kind) + { + case 4: + n = BUILT_IN_TRUNCF; + break; + + case 8: + n = BUILT_IN_TRUNC; + break; + + case 10: + case 16: + n = BUILT_IN_TRUNCL; + break; + } + break; + + default: + gcc_unreachable (); + } + + /* Evaluate the argument. */ + gcc_assert (expr->value.function.actual->expr); + gfc_conv_intrinsic_function_args (se, expr, arg, nargs); + + /* Use a builtin function if one exists. */ + if (n != END_BUILTINS) + { + tmp = built_in_decls[n]; + se->expr = build_call_expr (tmp, 1, arg[0]); + return; + } + + /* This code is probably redundant, but we'll keep it lying around just + in case. */ + type = gfc_typenode_for_spec (&expr->ts); + arg[0] = gfc_evaluate_now (arg[0], &se->pre); + + /* Test if the value is too large to handle sensibly. */ + gfc_set_model_kind (kind); + mpfr_init (huge); + n = gfc_validate_kind (BT_INTEGER, kind, false); + mpfr_set_z (huge, gfc_integer_kinds[n].huge, GFC_RND_MODE); + tmp = gfc_conv_mpfr_to_tree (huge, kind); + cond = fold_build2 (LT_EXPR, boolean_type_node, arg[0], tmp); + + mpfr_neg (huge, huge, GFC_RND_MODE); + tmp = gfc_conv_mpfr_to_tree (huge, kind); + tmp = fold_build2 (GT_EXPR, boolean_type_node, arg[0], tmp); + cond = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, cond, tmp); + itype = gfc_get_int_type (kind); + + tmp = build_fix_expr (&se->pre, arg[0], itype, op); + tmp = convert (type, tmp); + se->expr = fold_build3 (COND_EXPR, type, cond, tmp, arg[0]); + mpfr_clear (huge); +} + + +/* Convert to an integer using the specified rounding mode. */ + +static void +gfc_conv_intrinsic_int (gfc_se * se, gfc_expr * expr, enum rounding_mode op) +{ + tree type; + tree *args; + int nargs; + + nargs = gfc_intrinsic_argument_list_length (expr); + args = (tree *) alloca (sizeof (tree) * nargs); + + /* Evaluate the argument, we process all arguments even though we only + use the first one for code generation purposes. */ + type = gfc_typenode_for_spec (&expr->ts); + gcc_assert (expr->value.function.actual->expr); + gfc_conv_intrinsic_function_args (se, expr, args, nargs); + + if (TREE_CODE (TREE_TYPE (args[0])) == INTEGER_TYPE) + { + /* Conversion to a different integer kind. */ + se->expr = convert (type, args[0]); + } + else + { + /* Conversion from complex to non-complex involves taking the real + component of the value. */ + if (TREE_CODE (TREE_TYPE (args[0])) == COMPLEX_TYPE + && expr->ts.type != BT_COMPLEX) + { + tree artype; + + artype = TREE_TYPE (TREE_TYPE (args[0])); + args[0] = fold_build1 (REALPART_EXPR, artype, args[0]); + } + + se->expr = build_fix_expr (&se->pre, args[0], type, op); + } +} + + +/* Get the imaginary component of a value. */ + +static void +gfc_conv_intrinsic_imagpart (gfc_se * se, gfc_expr * expr) +{ + tree arg; + + gfc_conv_intrinsic_function_args (se, expr, &arg, 1); + se->expr = fold_build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg); +} + + +/* Get the complex conjugate of a value. */ + +static void +gfc_conv_intrinsic_conjg (gfc_se * se, gfc_expr * expr) +{ + tree arg; + + gfc_conv_intrinsic_function_args (se, expr, &arg, 1); + se->expr = fold_build1 (CONJ_EXPR, TREE_TYPE (arg), arg); +} + + +/* Initialize function decls for library functions. The external functions + are created as required. Builtin functions are added here. */ + +void +gfc_build_intrinsic_lib_fndecls (void) +{ + gfc_intrinsic_map_t *m; + + /* Add GCC builtin functions. */ + for (m = gfc_intrinsic_map; m->id != GFC_ISYM_NONE; m++) + { + if (m->code_r4 != END_BUILTINS) + m->real4_decl = built_in_decls[m->code_r4]; + if (m->code_r8 != END_BUILTINS) + m->real8_decl = built_in_decls[m->code_r8]; + if (m->code_r10 != END_BUILTINS) + m->real10_decl = built_in_decls[m->code_r10]; + if (m->code_r16 != END_BUILTINS) + m->real16_decl = built_in_decls[m->code_r16]; + if (m->code_c4 != END_BUILTINS) + m->complex4_decl = built_in_decls[m->code_c4]; + if (m->code_c8 != END_BUILTINS) + m->complex8_decl = built_in_decls[m->code_c8]; + if (m->code_c10 != END_BUILTINS) + m->complex10_decl = built_in_decls[m->code_c10]; + if (m->code_c16 != END_BUILTINS) + m->complex16_decl = built_in_decls[m->code_c16]; + } +} + + +/* Create a fndecl for a simple intrinsic library function. */ + +static tree +gfc_get_intrinsic_lib_fndecl (gfc_intrinsic_map_t * m, gfc_expr * expr) +{ + tree type; + tree argtypes; + tree fndecl; + gfc_actual_arglist *actual; + tree *pdecl; + gfc_typespec *ts; + char name[GFC_MAX_SYMBOL_LEN + 3]; + + ts = &expr->ts; + if (ts->type == BT_REAL) + { + switch (ts->kind) + { + case 4: + pdecl = &m->real4_decl; + break; + case 8: + pdecl = &m->real8_decl; + break; + case 10: + pdecl = &m->real10_decl; + break; + case 16: + pdecl = &m->real16_decl; + break; + default: + gcc_unreachable (); + } + } + else if (ts->type == BT_COMPLEX) + { + gcc_assert (m->complex_available); + + switch (ts->kind) + { + case 4: + pdecl = &m->complex4_decl; + break; + case 8: + pdecl = &m->complex8_decl; + break; + case 10: + pdecl = &m->complex10_decl; + break; + case 16: + pdecl = &m->complex16_decl; + break; + default: + gcc_unreachable (); + } + } + else + gcc_unreachable (); + + if (*pdecl) + return *pdecl; + + if (m->libm_name) + { + if (ts->kind == 4) + snprintf (name, sizeof (name), "%s%s%s", + ts->type == BT_COMPLEX ? "c" : "", m->name, "f"); + else if (ts->kind == 8) + snprintf (name, sizeof (name), "%s%s", + ts->type == BT_COMPLEX ? "c" : "", m->name); + else + { + gcc_assert (ts->kind == 10 || ts->kind == 16); + snprintf (name, sizeof (name), "%s%s%s", + ts->type == BT_COMPLEX ? "c" : "", m->name, "l"); + } + } + else + { + snprintf (name, sizeof (name), PREFIX ("%s_%c%d"), m->name, + ts->type == BT_COMPLEX ? 'c' : 'r', + ts->kind); + } + + argtypes = NULL_TREE; + for (actual = expr->value.function.actual; actual; actual = actual->next) + { + type = gfc_typenode_for_spec (&actual->expr->ts); + argtypes = gfc_chainon_list (argtypes, type); + } + argtypes = gfc_chainon_list (argtypes, void_type_node); + type = build_function_type (gfc_typenode_for_spec (ts), argtypes); + fndecl = build_decl (FUNCTION_DECL, get_identifier (name), type); + + /* Mark the decl as external. */ + DECL_EXTERNAL (fndecl) = 1; + TREE_PUBLIC (fndecl) = 1; + + /* Mark it __attribute__((const)), if possible. */ + TREE_READONLY (fndecl) = m->is_constant; + + rest_of_decl_compilation (fndecl, 1, 0); + + (*pdecl) = fndecl; + return fndecl; +} + + +/* Convert an intrinsic function into an external or builtin call. */ + +static void +gfc_conv_intrinsic_lib_function (gfc_se * se, gfc_expr * expr) +{ + gfc_intrinsic_map_t *m; + tree fndecl; + tree rettype; + tree *args; + unsigned int num_args; + gfc_isym_id id; + + id = expr->value.function.isym->id; + /* Find the entry for this function. */ + for (m = gfc_intrinsic_map; m->id != GFC_ISYM_NONE; m++) + { + if (id == m->id) + break; + } + + if (m->id == GFC_ISYM_NONE) + { + internal_error ("Intrinsic function %s(%d) not recognized", + expr->value.function.name, id); + } + + /* Get the decl and generate the call. */ + num_args = gfc_intrinsic_argument_list_length (expr); + args = (tree *) alloca (sizeof (tree) * num_args); + + gfc_conv_intrinsic_function_args (se, expr, args, num_args); + fndecl = gfc_get_intrinsic_lib_fndecl (m, expr); + rettype = TREE_TYPE (TREE_TYPE (fndecl)); + + fndecl = build_addr (fndecl, current_function_decl); + se->expr = build_call_array (rettype, fndecl, num_args, args); +} + + +/* If bounds-checking is enabled, create code to verify at runtime that the + string lengths for both expressions are the same (needed for e.g. MERGE). + If bounds-checking is not enabled, does nothing. */ + +void +gfc_trans_same_strlen_check (const char* intr_name, locus* where, + tree a, tree b, stmtblock_t* target) +{ + tree cond; + tree name; + + /* If bounds-checking is disabled, do nothing. */ + if (!flag_bounds_check) + return; + + /* Compare the two string lengths. */ + cond = fold_build2 (NE_EXPR, boolean_type_node, a, b); + + /* Output the runtime-check. */ + name = gfc_build_cstring_const (intr_name); + name = gfc_build_addr_expr (pchar_type_node, name); + gfc_trans_runtime_check (true, false, cond, target, where, + "Unequal character lengths (%ld/%ld) in %s", + fold_convert (long_integer_type_node, a), + fold_convert (long_integer_type_node, b), name); +} + + +/* The EXPONENT(s) intrinsic function is translated into + int ret; + frexp (s, &ret); + return ret; + */ + +static void +gfc_conv_intrinsic_exponent (gfc_se *se, gfc_expr *expr) +{ + tree arg, type, res, tmp; + int frexp; + + switch (expr->value.function.actual->expr->ts.kind) + { + case 4: + frexp = BUILT_IN_FREXPF; + break; + case 8: + frexp = BUILT_IN_FREXP; + break; + case 10: + case 16: + frexp = BUILT_IN_FREXPL; + break; + default: + gcc_unreachable (); + } + + gfc_conv_intrinsic_function_args (se, expr, &arg, 1); + + res = gfc_create_var (integer_type_node, NULL); + tmp = build_call_expr (built_in_decls[frexp], 2, arg, + build_fold_addr_expr (res)); + gfc_add_expr_to_block (&se->pre, tmp); + + type = gfc_typenode_for_spec (&expr->ts); + se->expr = fold_convert (type, res); +} + +/* Evaluate a single upper or lower bound. */ +/* TODO: bound intrinsic generates way too much unnecessary code. */ + +static void +gfc_conv_intrinsic_bound (gfc_se * se, gfc_expr * expr, int upper) +{ + gfc_actual_arglist *arg; + gfc_actual_arglist *arg2; + tree desc; + tree type; + tree bound; + tree tmp; + tree cond, cond1, cond2, cond3, cond4, size; + tree ubound; + tree lbound; + gfc_se argse; + gfc_ss *ss; + gfc_array_spec * as; + gfc_ref *ref; + + arg = expr->value.function.actual; + arg2 = arg->next; + + if (se->ss) + { + /* Create an implicit second parameter from the loop variable. */ + gcc_assert (!arg2->expr); + gcc_assert (se->loop->dimen == 1); + gcc_assert (se->ss->expr == expr); + gfc_advance_se_ss_chain (se); + bound = se->loop->loopvar[0]; + bound = fold_build2 (MINUS_EXPR, gfc_array_index_type, bound, + se->loop->from[0]); + } + else + { + /* use the passed argument. */ + gcc_assert (arg->next->expr); + gfc_init_se (&argse, NULL); + gfc_conv_expr_type (&argse, arg->next->expr, gfc_array_index_type); + gfc_add_block_to_block (&se->pre, &argse.pre); + bound = argse.expr; + /* Convert from one based to zero based. */ + bound = fold_build2 (MINUS_EXPR, gfc_array_index_type, bound, + gfc_index_one_node); + } + + /* TODO: don't re-evaluate the descriptor on each iteration. */ + /* Get a descriptor for the first parameter. */ + ss = gfc_walk_expr (arg->expr); + gcc_assert (ss != gfc_ss_terminator); + gfc_init_se (&argse, NULL); + gfc_conv_expr_descriptor (&argse, arg->expr, ss); + gfc_add_block_to_block (&se->pre, &argse.pre); + gfc_add_block_to_block (&se->post, &argse.post); + + desc = argse.expr; + + if (INTEGER_CST_P (bound)) + { + int hi, low; + + hi = TREE_INT_CST_HIGH (bound); + low = TREE_INT_CST_LOW (bound); + if (hi || low < 0 || low >= GFC_TYPE_ARRAY_RANK (TREE_TYPE (desc))) + gfc_error ("'dim' argument of %s intrinsic at %L is not a valid " + "dimension index", upper ? "UBOUND" : "LBOUND", + &expr->where); + } + else + { + if (flag_bounds_check) + { + bound = gfc_evaluate_now (bound, &se->pre); + cond = fold_build2 (LT_EXPR, boolean_type_node, + bound, build_int_cst (TREE_TYPE (bound), 0)); + tmp = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (TREE_TYPE (desc))]; + tmp = fold_build2 (GE_EXPR, boolean_type_node, bound, tmp); + cond = fold_build2 (TRUTH_ORIF_EXPR, boolean_type_node, cond, tmp); + gfc_trans_runtime_check (true, false, cond, &se->pre, &expr->where, + gfc_msg_fault); + } + } + + ubound = gfc_conv_descriptor_ubound (desc, bound); + lbound = gfc_conv_descriptor_lbound (desc, bound); + + /* Follow any component references. */ + if (arg->expr->expr_type == EXPR_VARIABLE + || arg->expr->expr_type == EXPR_CONSTANT) + { + as = arg->expr->symtree->n.sym->as; + for (ref = arg->expr->ref; ref; ref = ref->next) + { + switch (ref->type) + { + case REF_COMPONENT: + as = ref->u.c.component->as; + continue; + + case REF_SUBSTRING: + continue; + + case REF_ARRAY: + { + switch (ref->u.ar.type) + { + case AR_ELEMENT: + case AR_SECTION: + case AR_UNKNOWN: + as = NULL; + continue; + + case AR_FULL: + break; + } + break; + } + } + } + } + else + as = NULL; + + /* 13.14.53: Result value for LBOUND + + Case (i): For an array section or for an array expression other than a + whole array or array structure component, LBOUND(ARRAY, DIM) + has the value 1. For a whole array or array structure + component, LBOUND(ARRAY, DIM) has the value: + (a) equal to the lower bound for subscript DIM of ARRAY if + dimension DIM of ARRAY does not have extent zero + or if ARRAY is an assumed-size array of rank DIM, + or (b) 1 otherwise. + + 13.14.113: Result value for UBOUND + + Case (i): For an array section or for an array expression other than a + whole array or array structure component, UBOUND(ARRAY, DIM) + has the value equal to the number of elements in the given + dimension; otherwise, it has a value equal to the upper bound + for subscript DIM of ARRAY if dimension DIM of ARRAY does + not have size zero and has value zero if dimension DIM has + size zero. */ + + if (as) + { + tree stride = gfc_conv_descriptor_stride (desc, bound); + + cond1 = fold_build2 (GE_EXPR, boolean_type_node, ubound, lbound); + cond2 = fold_build2 (LE_EXPR, boolean_type_node, ubound, lbound); + + cond3 = fold_build2 (GE_EXPR, boolean_type_node, stride, + gfc_index_zero_node); + cond3 = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, cond3, cond1); + + cond4 = fold_build2 (LT_EXPR, boolean_type_node, stride, + gfc_index_zero_node); + + if (upper) + { + tree cond5; + cond = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, cond3, cond4); + + cond5 = fold_build2 (EQ_EXPR, boolean_type_node, gfc_index_one_node, lbound); + cond5 = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, cond4, cond5); + + cond = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, cond, cond5); + + se->expr = fold_build3 (COND_EXPR, gfc_array_index_type, cond, + ubound, gfc_index_zero_node); + } + else + { + if (as->type == AS_ASSUMED_SIZE) + cond = fold_build2 (EQ_EXPR, boolean_type_node, bound, + build_int_cst (TREE_TYPE (bound), + arg->expr->rank - 1)); + else + cond = boolean_false_node; + + cond1 = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, cond3, cond4); + cond = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, cond, cond1); + + se->expr = fold_build3 (COND_EXPR, gfc_array_index_type, cond, + lbound, gfc_index_one_node); + } + } + else + { + if (upper) + { + size = fold_build2 (MINUS_EXPR, gfc_array_index_type, ubound, lbound); + se->expr = fold_build2 (PLUS_EXPR, gfc_array_index_type, size, + gfc_index_one_node); + se->expr = fold_build2 (MAX_EXPR, gfc_array_index_type, se->expr, + gfc_index_zero_node); + } + else + se->expr = gfc_index_one_node; + } + + type = gfc_typenode_for_spec (&expr->ts); + se->expr = convert (type, se->expr); +} + + +static void +gfc_conv_intrinsic_abs (gfc_se * se, gfc_expr * expr) +{ + tree arg; + int n; + + gfc_conv_intrinsic_function_args (se, expr, &arg, 1); + + switch (expr->value.function.actual->expr->ts.type) + { + case BT_INTEGER: + case BT_REAL: + se->expr = fold_build1 (ABS_EXPR, TREE_TYPE (arg), arg); + break; + + case BT_COMPLEX: + switch (expr->ts.kind) + { + case 4: + n = BUILT_IN_CABSF; + break; + case 8: + n = BUILT_IN_CABS; + break; + case 10: + case 16: + n = BUILT_IN_CABSL; + break; + default: + gcc_unreachable (); + } + se->expr = build_call_expr (built_in_decls[n], 1, arg); + break; + + default: + gcc_unreachable (); + } +} + + +/* Create a complex value from one or two real components. */ + +static void +gfc_conv_intrinsic_cmplx (gfc_se * se, gfc_expr * expr, int both) +{ + tree real; + tree imag; + tree type; + tree *args; + unsigned int num_args; + + num_args = gfc_intrinsic_argument_list_length (expr); + args = (tree *) alloca (sizeof (tree) * num_args); + + type = gfc_typenode_for_spec (&expr->ts); + gfc_conv_intrinsic_function_args (se, expr, args, num_args); + real = convert (TREE_TYPE (type), args[0]); + if (both) + imag = convert (TREE_TYPE (type), args[1]); + else if (TREE_CODE (TREE_TYPE (args[0])) == COMPLEX_TYPE) + { + imag = fold_build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (args[0])), + args[0]); + imag = convert (TREE_TYPE (type), imag); + } + else + imag = build_real_from_int_cst (TREE_TYPE (type), integer_zero_node); + + se->expr = fold_build2 (COMPLEX_EXPR, type, real, imag); +} + +/* Remainder function MOD(A, P) = A - INT(A / P) * P + MODULO(A, P) = A - FLOOR (A / P) * P */ +/* TODO: MOD(x, 0) */ + +static void +gfc_conv_intrinsic_mod (gfc_se * se, gfc_expr * expr, int modulo) +{ + tree type; + tree itype; + tree tmp; + tree test; + tree test2; + mpfr_t huge; + int n, ikind; + tree args[2]; + + gfc_conv_intrinsic_function_args (se, expr, args, 2); + + switch (expr->ts.type) + { + case BT_INTEGER: + /* Integer case is easy, we've got a builtin op. */ + type = TREE_TYPE (args[0]); + + if (modulo) + se->expr = fold_build2 (FLOOR_MOD_EXPR, type, args[0], args[1]); + else + se->expr = fold_build2 (TRUNC_MOD_EXPR, type, args[0], args[1]); + break; + + case BT_REAL: + n = END_BUILTINS; + /* Check if we have a builtin fmod. */ + switch (expr->ts.kind) + { + case 4: + n = BUILT_IN_FMODF; + break; + + case 8: + n = BUILT_IN_FMOD; + break; + + case 10: + case 16: + n = BUILT_IN_FMODL; + break; + + default: + break; + } + + /* Use it if it exists. */ + if (n != END_BUILTINS) + { + tmp = build_addr (built_in_decls[n], current_function_decl); + se->expr = build_call_array (TREE_TYPE (TREE_TYPE (built_in_decls[n])), + tmp, 2, args); + if (modulo == 0) + return; + } + + type = TREE_TYPE (args[0]); + + args[0] = gfc_evaluate_now (args[0], &se->pre); + args[1] = gfc_evaluate_now (args[1], &se->pre); + + /* Definition: + modulo = arg - floor (arg/arg2) * arg2, so + = test ? fmod (arg, arg2) : fmod (arg, arg2) + arg2, + where + test = (fmod (arg, arg2) != 0) && ((arg < 0) xor (arg2 < 0)) + thereby avoiding another division and retaining the accuracy + of the builtin function. */ + if (n != END_BUILTINS && modulo) + { + tree zero = gfc_build_const (type, integer_zero_node); + tmp = gfc_evaluate_now (se->expr, &se->pre); + test = fold_build2 (LT_EXPR, boolean_type_node, args[0], zero); + test2 = fold_build2 (LT_EXPR, boolean_type_node, args[1], zero); + test2 = fold_build2 (TRUTH_XOR_EXPR, boolean_type_node, test, test2); + test = fold_build2 (NE_EXPR, boolean_type_node, tmp, zero); + test = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, test, test2); + test = gfc_evaluate_now (test, &se->pre); + se->expr = fold_build3 (COND_EXPR, type, test, + fold_build2 (PLUS_EXPR, type, tmp, args[1]), + tmp); + return; + } + + /* If we do not have a built_in fmod, the calculation is going to + have to be done longhand. */ + tmp = fold_build2 (RDIV_EXPR, type, args[0], args[1]); + + /* Test if the value is too large to handle sensibly. */ + gfc_set_model_kind (expr->ts.kind); + mpfr_init (huge); + n = gfc_validate_kind (BT_INTEGER, expr->ts.kind, true); + ikind = expr->ts.kind; + if (n < 0) + { + n = gfc_validate_kind (BT_INTEGER, gfc_max_integer_kind, false); + ikind = gfc_max_integer_kind; + } + mpfr_set_z (huge, gfc_integer_kinds[n].huge, GFC_RND_MODE); + test = gfc_conv_mpfr_to_tree (huge, expr->ts.kind); + test2 = fold_build2 (LT_EXPR, boolean_type_node, tmp, test); + + mpfr_neg (huge, huge, GFC_RND_MODE); + test = gfc_conv_mpfr_to_tree (huge, expr->ts.kind); + test = fold_build2 (GT_EXPR, boolean_type_node, tmp, test); + test2 = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, test, test2); + + itype = gfc_get_int_type (ikind); + if (modulo) + tmp = build_fix_expr (&se->pre, tmp, itype, RND_FLOOR); + else + tmp = build_fix_expr (&se->pre, tmp, itype, RND_TRUNC); + tmp = convert (type, tmp); + tmp = fold_build3 (COND_EXPR, type, test2, tmp, args[0]); + tmp = fold_build2 (MULT_EXPR, type, tmp, args[1]); + se->expr = fold_build2 (MINUS_EXPR, type, args[0], tmp); + mpfr_clear (huge); + break; + + default: + gcc_unreachable (); + } +} + +/* Positive difference DIM (x, y) = ((x - y) < 0) ? 0 : x - y. */ + +static void +gfc_conv_intrinsic_dim (gfc_se * se, gfc_expr * expr) +{ + tree val; + tree tmp; + tree type; + tree zero; + tree args[2]; + + gfc_conv_intrinsic_function_args (se, expr, args, 2); + type = TREE_TYPE (args[0]); + + val = fold_build2 (MINUS_EXPR, type, args[0], args[1]); + val = gfc_evaluate_now (val, &se->pre); + + zero = gfc_build_const (type, integer_zero_node); + tmp = fold_build2 (LE_EXPR, boolean_type_node, val, zero); + se->expr = fold_build3 (COND_EXPR, type, tmp, zero, val); +} + + +/* SIGN(A, B) is absolute value of A times sign of B. + The real value versions use library functions to ensure the correct + handling of negative zero. Integer case implemented as: + SIGN(A, B) = { tmp = (A ^ B) >> C; (A + tmp) ^ tmp } + */ + +static void +gfc_conv_intrinsic_sign (gfc_se * se, gfc_expr * expr) +{ + tree tmp; + tree type; + tree args[2]; + + gfc_conv_intrinsic_function_args (se, expr, args, 2); + if (expr->ts.type == BT_REAL) + { + switch (expr->ts.kind) + { + case 4: + tmp = built_in_decls[BUILT_IN_COPYSIGNF]; + break; + case 8: + tmp = built_in_decls[BUILT_IN_COPYSIGN]; + break; + case 10: + case 16: + tmp = built_in_decls[BUILT_IN_COPYSIGNL]; + break; + default: + gcc_unreachable (); + } + se->expr = build_call_expr (tmp, 2, args[0], args[1]); + return; + } + + /* Having excluded floating point types, we know we are now dealing + with signed integer types. */ + type = TREE_TYPE (args[0]); + + /* Args[0] is used multiple times below. */ + args[0] = gfc_evaluate_now (args[0], &se->pre); + + /* Construct (A ^ B) >> 31, which generates a bit mask of all zeros if + the signs of A and B are the same, and of all ones if they differ. */ + tmp = fold_build2 (BIT_XOR_EXPR, type, args[0], args[1]); + tmp = fold_build2 (RSHIFT_EXPR, type, tmp, + build_int_cst (type, TYPE_PRECISION (type) - 1)); + tmp = gfc_evaluate_now (tmp, &se->pre); + + /* Construct (A + tmp) ^ tmp, which is A if tmp is zero, and -A if tmp] + is all ones (i.e. -1). */ + se->expr = fold_build2 (BIT_XOR_EXPR, type, + fold_build2 (PLUS_EXPR, type, args[0], tmp), + tmp); +} + + +/* Test for the presence of an optional argument. */ + +static void +gfc_conv_intrinsic_present (gfc_se * se, gfc_expr * expr) +{ + gfc_expr *arg; + + arg = expr->value.function.actual->expr; + gcc_assert (arg->expr_type == EXPR_VARIABLE); + se->expr = gfc_conv_expr_present (arg->symtree->n.sym); + se->expr = convert (gfc_typenode_for_spec (&expr->ts), se->expr); +} + + +/* Calculate the double precision product of two single precision values. */ + +static void +gfc_conv_intrinsic_dprod (gfc_se * se, gfc_expr * expr) +{ + tree type; + tree args[2]; + + gfc_conv_intrinsic_function_args (se, expr, args, 2); + + /* Convert the args to double precision before multiplying. */ + type = gfc_typenode_for_spec (&expr->ts); + args[0] = convert (type, args[0]); + args[1] = convert (type, args[1]); + se->expr = fold_build2 (MULT_EXPR, type, args[0], args[1]); +} + + +/* Return a length one character string containing an ascii character. */ + +static void +gfc_conv_intrinsic_char (gfc_se * se, gfc_expr * expr) +{ + tree arg[2]; + tree var; + tree type; + unsigned int num_args; + + num_args = gfc_intrinsic_argument_list_length (expr); + gfc_conv_intrinsic_function_args (se, expr, arg, num_args); + + type = gfc_get_char_type (expr->ts.kind); + var = gfc_create_var (type, "char"); + + arg[0] = fold_build1 (NOP_EXPR, type, arg[0]); + gfc_add_modify (&se->pre, var, arg[0]); + se->expr = gfc_build_addr_expr (build_pointer_type (type), var); + se->string_length = integer_one_node; +} + + +static void +gfc_conv_intrinsic_ctime (gfc_se * se, gfc_expr * expr) +{ + tree var; + tree len; + tree tmp; + tree cond; + tree fndecl; + tree *args; + unsigned int num_args; + + num_args = gfc_intrinsic_argument_list_length (expr) + 2; + args = (tree *) alloca (sizeof (tree) * num_args); + + var = gfc_create_var (pchar_type_node, "pstr"); + len = gfc_create_var (gfc_get_int_type (8), "len"); + + gfc_conv_intrinsic_function_args (se, expr, &args[2], num_args - 2); + args[0] = build_fold_addr_expr (var); + args[1] = build_fold_addr_expr (len); + + fndecl = build_addr (gfor_fndecl_ctime, current_function_decl); + tmp = build_call_array (TREE_TYPE (TREE_TYPE (gfor_fndecl_ctime)), + fndecl, num_args, args); + gfc_add_expr_to_block (&se->pre, tmp); + + /* Free the temporary afterwards, if necessary. */ + cond = fold_build2 (GT_EXPR, boolean_type_node, + len, build_int_cst (TREE_TYPE (len), 0)); + tmp = gfc_call_free (var); + tmp = build3_v (COND_EXPR, cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&se->post, tmp); + + se->expr = var; + se->string_length = len; +} + + +static void +gfc_conv_intrinsic_fdate (gfc_se * se, gfc_expr * expr) +{ + tree var; + tree len; + tree tmp; + tree cond; + tree fndecl; + tree *args; + unsigned int num_args; + + num_args = gfc_intrinsic_argument_list_length (expr) + 2; + args = (tree *) alloca (sizeof (tree) * num_args); + + var = gfc_create_var (pchar_type_node, "pstr"); + len = gfc_create_var (gfc_get_int_type (4), "len"); + + gfc_conv_intrinsic_function_args (se, expr, &args[2], num_args - 2); + args[0] = build_fold_addr_expr (var); + args[1] = build_fold_addr_expr (len); + + fndecl = build_addr (gfor_fndecl_fdate, current_function_decl); + tmp = build_call_array (TREE_TYPE (TREE_TYPE (gfor_fndecl_fdate)), + fndecl, num_args, args); + gfc_add_expr_to_block (&se->pre, tmp); + + /* Free the temporary afterwards, if necessary. */ + cond = fold_build2 (GT_EXPR, boolean_type_node, + len, build_int_cst (TREE_TYPE (len), 0)); + tmp = gfc_call_free (var); + tmp = build3_v (COND_EXPR, cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&se->post, tmp); + + se->expr = var; + se->string_length = len; +} + + +/* Return a character string containing the tty name. */ + +static void +gfc_conv_intrinsic_ttynam (gfc_se * se, gfc_expr * expr) +{ + tree var; + tree len; + tree tmp; + tree cond; + tree fndecl; + tree *args; + unsigned int num_args; + + num_args = gfc_intrinsic_argument_list_length (expr) + 2; + args = (tree *) alloca (sizeof (tree) * num_args); + + var = gfc_create_var (pchar_type_node, "pstr"); + len = gfc_create_var (gfc_get_int_type (4), "len"); + + gfc_conv_intrinsic_function_args (se, expr, &args[2], num_args - 2); + args[0] = build_fold_addr_expr (var); + args[1] = build_fold_addr_expr (len); + + fndecl = build_addr (gfor_fndecl_ttynam, current_function_decl); + tmp = build_call_array (TREE_TYPE (TREE_TYPE (gfor_fndecl_ttynam)), + fndecl, num_args, args); + gfc_add_expr_to_block (&se->pre, tmp); + + /* Free the temporary afterwards, if necessary. */ + cond = fold_build2 (GT_EXPR, boolean_type_node, + len, build_int_cst (TREE_TYPE (len), 0)); + tmp = gfc_call_free (var); + tmp = build3_v (COND_EXPR, cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&se->post, tmp); + + se->expr = var; + se->string_length = len; +} + + +/* Get the minimum/maximum value of all the parameters. + minmax (a1, a2, a3, ...) + { + mvar = a1; + if (a2 .op. mvar || isnan(mvar)) + mvar = a2; + if (a3 .op. mvar || isnan(mvar)) + mvar = a3; + ... + return mvar + } + */ + +/* TODO: Mismatching types can occur when specific names are used. + These should be handled during resolution. */ +static void +gfc_conv_intrinsic_minmax (gfc_se * se, gfc_expr * expr, int op) +{ + tree tmp; + tree mvar; + tree val; + tree thencase; + tree *args; + tree type; + gfc_actual_arglist *argexpr; + unsigned int i, nargs; + + nargs = gfc_intrinsic_argument_list_length (expr); + args = (tree *) alloca (sizeof (tree) * nargs); + + gfc_conv_intrinsic_function_args (se, expr, args, nargs); + type = gfc_typenode_for_spec (&expr->ts); + + argexpr = expr->value.function.actual; + if (TREE_TYPE (args[0]) != type) + args[0] = convert (type, args[0]); + /* Only evaluate the argument once. */ + if (TREE_CODE (args[0]) != VAR_DECL && !TREE_CONSTANT (args[0])) + args[0] = gfc_evaluate_now (args[0], &se->pre); + + mvar = gfc_create_var (type, "M"); + gfc_add_modify (&se->pre, mvar, args[0]); + for (i = 1, argexpr = argexpr->next; i < nargs; i++) + { + tree cond, isnan; + + val = args[i]; + + /* Handle absent optional arguments by ignoring the comparison. */ + if (argexpr->expr->expr_type == EXPR_VARIABLE + && argexpr->expr->symtree->n.sym->attr.optional + && TREE_CODE (val) == INDIRECT_REF) + cond = fold_build2 + (NE_EXPR, boolean_type_node, TREE_OPERAND (val, 0), + build_int_cst (TREE_TYPE (TREE_OPERAND (val, 0)), 0)); + else + { + cond = NULL_TREE; + + /* Only evaluate the argument once. */ + if (TREE_CODE (val) != VAR_DECL && !TREE_CONSTANT (val)) + val = gfc_evaluate_now (val, &se->pre); + } + + thencase = build2_v (MODIFY_EXPR, mvar, convert (type, val)); + + tmp = fold_build2 (op, boolean_type_node, convert (type, val), mvar); + + /* FIXME: When the IEEE_ARITHMETIC module is implemented, the call to + __builtin_isnan might be made dependent on that module being loaded, + to help performance of programs that don't rely on IEEE semantics. */ + if (FLOAT_TYPE_P (TREE_TYPE (mvar))) + { + isnan = build_call_expr (built_in_decls[BUILT_IN_ISNAN], 1, mvar); + tmp = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, tmp, + fold_convert (boolean_type_node, isnan)); + } + tmp = build3_v (COND_EXPR, tmp, thencase, build_empty_stmt ()); + + if (cond != NULL_TREE) + tmp = build3_v (COND_EXPR, cond, tmp, build_empty_stmt ()); + + gfc_add_expr_to_block (&se->pre, tmp); + argexpr = argexpr->next; + } + se->expr = mvar; +} + + +/* Generate library calls for MIN and MAX intrinsics for character + variables. */ +static void +gfc_conv_intrinsic_minmax_char (gfc_se * se, gfc_expr * expr, int op) +{ + tree *args; + tree var, len, fndecl, tmp, cond, function; + unsigned int nargs; + + nargs = gfc_intrinsic_argument_list_length (expr); + args = (tree *) alloca (sizeof (tree) * (nargs + 4)); + gfc_conv_intrinsic_function_args (se, expr, &args[4], nargs); + + /* Create the result variables. */ + len = gfc_create_var (gfc_charlen_type_node, "len"); + args[0] = build_fold_addr_expr (len); + var = gfc_create_var (gfc_get_pchar_type (expr->ts.kind), "pstr"); + args[1] = gfc_build_addr_expr (ppvoid_type_node, var); + args[2] = build_int_cst (NULL_TREE, op); + args[3] = build_int_cst (NULL_TREE, nargs / 2); + + if (expr->ts.kind == 1) + function = gfor_fndecl_string_minmax; + else if (expr->ts.kind == 4) + function = gfor_fndecl_string_minmax_char4; + else + gcc_unreachable (); + + /* Make the function call. */ + fndecl = build_addr (function, current_function_decl); + tmp = build_call_array (TREE_TYPE (TREE_TYPE (function)), fndecl, + nargs + 4, args); + gfc_add_expr_to_block (&se->pre, tmp); + + /* Free the temporary afterwards, if necessary. */ + cond = fold_build2 (GT_EXPR, boolean_type_node, + len, build_int_cst (TREE_TYPE (len), 0)); + tmp = gfc_call_free (var); + tmp = build3_v (COND_EXPR, cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&se->post, tmp); + + se->expr = var; + se->string_length = len; +} + + +/* Create a symbol node for this intrinsic. The symbol from the frontend + has the generic name. */ + +static gfc_symbol * +gfc_get_symbol_for_expr (gfc_expr * expr) +{ + gfc_symbol *sym; + + /* TODO: Add symbols for intrinsic function to the global namespace. */ + gcc_assert (strlen (expr->value.function.name) <= GFC_MAX_SYMBOL_LEN - 5); + sym = gfc_new_symbol (expr->value.function.name, NULL); + + sym->ts = expr->ts; + sym->attr.external = 1; + sym->attr.function = 1; + sym->attr.always_explicit = 1; + sym->attr.proc = PROC_INTRINSIC; + sym->attr.flavor = FL_PROCEDURE; + sym->result = sym; + if (expr->rank > 0) + { + sym->attr.dimension = 1; + sym->as = gfc_get_array_spec (); + sym->as->type = AS_ASSUMED_SHAPE; + sym->as->rank = expr->rank; + } + + /* TODO: proper argument lists for external intrinsics. */ + return sym; +} + +/* Generate a call to an external intrinsic function. */ +static void +gfc_conv_intrinsic_funcall (gfc_se * se, gfc_expr * expr) +{ + gfc_symbol *sym; + tree append_args; + + gcc_assert (!se->ss || se->ss->expr == expr); + + if (se->ss) + gcc_assert (expr->rank > 0); + else + gcc_assert (expr->rank == 0); + + sym = gfc_get_symbol_for_expr (expr); + + /* Calls to libgfortran_matmul need to be appended special arguments, + to be able to call the BLAS ?gemm functions if required and possible. */ + append_args = NULL_TREE; + if (expr->value.function.isym->id == GFC_ISYM_MATMUL + && sym->ts.type != BT_LOGICAL) + { + tree cint = gfc_get_int_type (gfc_c_int_kind); + + if (gfc_option.flag_external_blas + && (sym->ts.type == BT_REAL || sym->ts.type == BT_COMPLEX) + && (sym->ts.kind == gfc_default_real_kind + || sym->ts.kind == gfc_default_double_kind)) + { + tree gemm_fndecl; + + if (sym->ts.type == BT_REAL) + { + if (sym->ts.kind == gfc_default_real_kind) + gemm_fndecl = gfor_fndecl_sgemm; + else + gemm_fndecl = gfor_fndecl_dgemm; + } + else + { + if (sym->ts.kind == gfc_default_real_kind) + gemm_fndecl = gfor_fndecl_cgemm; + else + gemm_fndecl = gfor_fndecl_zgemm; + } + + append_args = gfc_chainon_list (NULL_TREE, build_int_cst (cint, 1)); + append_args = gfc_chainon_list + (append_args, build_int_cst + (cint, gfc_option.blas_matmul_limit)); + append_args = gfc_chainon_list (append_args, + gfc_build_addr_expr (NULL_TREE, + gemm_fndecl)); + } + else + { + append_args = gfc_chainon_list (NULL_TREE, build_int_cst (cint, 0)); + append_args = gfc_chainon_list (append_args, build_int_cst (cint, 0)); + append_args = gfc_chainon_list (append_args, null_pointer_node); + } + } + + gfc_conv_function_call (se, sym, expr->value.function.actual, append_args); + gfc_free (sym); +} + +/* ANY and ALL intrinsics. ANY->op == NE_EXPR, ALL->op == EQ_EXPR. + Implemented as + any(a) + { + forall (i=...) + if (a[i] != 0) + return 1 + end forall + return 0 + } + all(a) + { + forall (i=...) + if (a[i] == 0) + return 0 + end forall + return 1 + } + */ +static void +gfc_conv_intrinsic_anyall (gfc_se * se, gfc_expr * expr, int op) +{ + tree resvar; + stmtblock_t block; + stmtblock_t body; + tree type; + tree tmp; + tree found; + gfc_loopinfo loop; + gfc_actual_arglist *actual; + gfc_ss *arrayss; + gfc_se arrayse; + tree exit_label; + + if (se->ss) + { + gfc_conv_intrinsic_funcall (se, expr); + return; + } + + actual = expr->value.function.actual; + type = gfc_typenode_for_spec (&expr->ts); + /* Initialize the result. */ + resvar = gfc_create_var (type, "test"); + if (op == EQ_EXPR) + tmp = convert (type, boolean_true_node); + else + tmp = convert (type, boolean_false_node); + gfc_add_modify (&se->pre, resvar, tmp); + + /* Walk the arguments. */ + arrayss = gfc_walk_expr (actual->expr); + gcc_assert (arrayss != gfc_ss_terminator); + + /* Initialize the scalarizer. */ + gfc_init_loopinfo (&loop); + exit_label = gfc_build_label_decl (NULL_TREE); + TREE_USED (exit_label) = 1; + gfc_add_ss_to_loop (&loop, arrayss); + + /* Initialize the loop. */ + gfc_conv_ss_startstride (&loop); + gfc_conv_loop_setup (&loop, &expr->where); + + gfc_mark_ss_chain_used (arrayss, 1); + /* Generate the loop body. */ + gfc_start_scalarized_body (&loop, &body); + + /* If the condition matches then set the return value. */ + gfc_start_block (&block); + if (op == EQ_EXPR) + tmp = convert (type, boolean_false_node); + else + tmp = convert (type, boolean_true_node); + gfc_add_modify (&block, resvar, tmp); + + /* And break out of the loop. */ + tmp = build1_v (GOTO_EXPR, exit_label); + gfc_add_expr_to_block (&block, tmp); + + found = gfc_finish_block (&block); + + /* Check this element. */ + gfc_init_se (&arrayse, NULL); + gfc_copy_loopinfo_to_se (&arrayse, &loop); + arrayse.ss = arrayss; + gfc_conv_expr_val (&arrayse, actual->expr); + + gfc_add_block_to_block (&body, &arrayse.pre); + tmp = fold_build2 (op, boolean_type_node, arrayse.expr, + build_int_cst (TREE_TYPE (arrayse.expr), 0)); + tmp = build3_v (COND_EXPR, tmp, found, build_empty_stmt ()); + gfc_add_expr_to_block (&body, tmp); + gfc_add_block_to_block (&body, &arrayse.post); + + gfc_trans_scalarizing_loops (&loop, &body); + + /* Add the exit label. */ + tmp = build1_v (LABEL_EXPR, exit_label); + gfc_add_expr_to_block (&loop.pre, tmp); + + gfc_add_block_to_block (&se->pre, &loop.pre); + gfc_add_block_to_block (&se->pre, &loop.post); + gfc_cleanup_loop (&loop); + + se->expr = resvar; +} + +/* COUNT(A) = Number of true elements in A. */ +static void +gfc_conv_intrinsic_count (gfc_se * se, gfc_expr * expr) +{ + tree resvar; + tree type; + stmtblock_t body; + tree tmp; + gfc_loopinfo loop; + gfc_actual_arglist *actual; + gfc_ss *arrayss; + gfc_se arrayse; + + if (se->ss) + { + gfc_conv_intrinsic_funcall (se, expr); + return; + } + + actual = expr->value.function.actual; + + type = gfc_typenode_for_spec (&expr->ts); + /* Initialize the result. */ + resvar = gfc_create_var (type, "count"); + gfc_add_modify (&se->pre, resvar, build_int_cst (type, 0)); + + /* Walk the arguments. */ + arrayss = gfc_walk_expr (actual->expr); + gcc_assert (arrayss != gfc_ss_terminator); + + /* Initialize the scalarizer. */ + gfc_init_loopinfo (&loop); + gfc_add_ss_to_loop (&loop, arrayss); + + /* Initialize the loop. */ + gfc_conv_ss_startstride (&loop); + gfc_conv_loop_setup (&loop, &expr->where); + + gfc_mark_ss_chain_used (arrayss, 1); + /* Generate the loop body. */ + gfc_start_scalarized_body (&loop, &body); + + tmp = fold_build2 (PLUS_EXPR, TREE_TYPE (resvar), + resvar, build_int_cst (TREE_TYPE (resvar), 1)); + tmp = build2_v (MODIFY_EXPR, resvar, tmp); + + gfc_init_se (&arrayse, NULL); + gfc_copy_loopinfo_to_se (&arrayse, &loop); + arrayse.ss = arrayss; + gfc_conv_expr_val (&arrayse, actual->expr); + tmp = build3_v (COND_EXPR, arrayse.expr, tmp, build_empty_stmt ()); + + gfc_add_block_to_block (&body, &arrayse.pre); + gfc_add_expr_to_block (&body, tmp); + gfc_add_block_to_block (&body, &arrayse.post); + + gfc_trans_scalarizing_loops (&loop, &body); + + gfc_add_block_to_block (&se->pre, &loop.pre); + gfc_add_block_to_block (&se->pre, &loop.post); + gfc_cleanup_loop (&loop); + + se->expr = resvar; +} + +/* Inline implementation of the sum and product intrinsics. */ +static void +gfc_conv_intrinsic_arith (gfc_se * se, gfc_expr * expr, int op) +{ + tree resvar; + tree type; + stmtblock_t body; + stmtblock_t block; + tree tmp; + gfc_loopinfo loop; + gfc_actual_arglist *actual; + gfc_ss *arrayss; + gfc_ss *maskss; + gfc_se arrayse; + gfc_se maskse; + gfc_expr *arrayexpr; + gfc_expr *maskexpr; + + if (se->ss) + { + gfc_conv_intrinsic_funcall (se, expr); + return; + } + + type = gfc_typenode_for_spec (&expr->ts); + /* Initialize the result. */ + resvar = gfc_create_var (type, "val"); + if (op == PLUS_EXPR) + tmp = gfc_build_const (type, integer_zero_node); + else + tmp = gfc_build_const (type, integer_one_node); + + gfc_add_modify (&se->pre, resvar, tmp); + + /* Walk the arguments. */ + actual = expr->value.function.actual; + arrayexpr = actual->expr; + arrayss = gfc_walk_expr (arrayexpr); + gcc_assert (arrayss != gfc_ss_terminator); + + actual = actual->next->next; + gcc_assert (actual); + maskexpr = actual->expr; + if (maskexpr && maskexpr->rank != 0) + { + maskss = gfc_walk_expr (maskexpr); + gcc_assert (maskss != gfc_ss_terminator); + } + else + maskss = NULL; + + /* Initialize the scalarizer. */ + gfc_init_loopinfo (&loop); + gfc_add_ss_to_loop (&loop, arrayss); + if (maskss) + gfc_add_ss_to_loop (&loop, maskss); + + /* Initialize the loop. */ + gfc_conv_ss_startstride (&loop); + gfc_conv_loop_setup (&loop, &expr->where); + + gfc_mark_ss_chain_used (arrayss, 1); + if (maskss) + gfc_mark_ss_chain_used (maskss, 1); + /* Generate the loop body. */ + gfc_start_scalarized_body (&loop, &body); + + /* If we have a mask, only add this element if the mask is set. */ + if (maskss) + { + gfc_init_se (&maskse, NULL); + gfc_copy_loopinfo_to_se (&maskse, &loop); + maskse.ss = maskss; + gfc_conv_expr_val (&maskse, maskexpr); + gfc_add_block_to_block (&body, &maskse.pre); + + gfc_start_block (&block); + } + else + gfc_init_block (&block); + + /* Do the actual summation/product. */ + gfc_init_se (&arrayse, NULL); + gfc_copy_loopinfo_to_se (&arrayse, &loop); + arrayse.ss = arrayss; + gfc_conv_expr_val (&arrayse, arrayexpr); + gfc_add_block_to_block (&block, &arrayse.pre); + + tmp = fold_build2 (op, type, resvar, arrayse.expr); + gfc_add_modify (&block, resvar, tmp); + gfc_add_block_to_block (&block, &arrayse.post); + + if (maskss) + { + /* We enclose the above in if (mask) {...} . */ + tmp = gfc_finish_block (&block); + + tmp = build3_v (COND_EXPR, maskse.expr, tmp, build_empty_stmt ()); + } + else + tmp = gfc_finish_block (&block); + gfc_add_expr_to_block (&body, tmp); + + gfc_trans_scalarizing_loops (&loop, &body); + + /* For a scalar mask, enclose the loop in an if statement. */ + if (maskexpr && maskss == NULL) + { + gfc_init_se (&maskse, NULL); + gfc_conv_expr_val (&maskse, maskexpr); + gfc_init_block (&block); + gfc_add_block_to_block (&block, &loop.pre); + gfc_add_block_to_block (&block, &loop.post); + tmp = gfc_finish_block (&block); + + tmp = build3_v (COND_EXPR, maskse.expr, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&block, tmp); + gfc_add_block_to_block (&se->pre, &block); + } + else + { + gfc_add_block_to_block (&se->pre, &loop.pre); + gfc_add_block_to_block (&se->pre, &loop.post); + } + + gfc_cleanup_loop (&loop); + + se->expr = resvar; +} + + +/* Inline implementation of the dot_product intrinsic. This function + is based on gfc_conv_intrinsic_arith (the previous function). */ +static void +gfc_conv_intrinsic_dot_product (gfc_se * se, gfc_expr * expr) +{ + tree resvar; + tree type; + stmtblock_t body; + stmtblock_t block; + tree tmp; + gfc_loopinfo loop; + gfc_actual_arglist *actual; + gfc_ss *arrayss1, *arrayss2; + gfc_se arrayse1, arrayse2; + gfc_expr *arrayexpr1, *arrayexpr2; + + type = gfc_typenode_for_spec (&expr->ts); + + /* Initialize the result. */ + resvar = gfc_create_var (type, "val"); + if (expr->ts.type == BT_LOGICAL) + tmp = build_int_cst (type, 0); + else + tmp = gfc_build_const (type, integer_zero_node); + + gfc_add_modify (&se->pre, resvar, tmp); + + /* Walk argument #1. */ + actual = expr->value.function.actual; + arrayexpr1 = actual->expr; + arrayss1 = gfc_walk_expr (arrayexpr1); + gcc_assert (arrayss1 != gfc_ss_terminator); + + /* Walk argument #2. */ + actual = actual->next; + arrayexpr2 = actual->expr; + arrayss2 = gfc_walk_expr (arrayexpr2); + gcc_assert (arrayss2 != gfc_ss_terminator); + + /* Initialize the scalarizer. */ + gfc_init_loopinfo (&loop); + gfc_add_ss_to_loop (&loop, arrayss1); + gfc_add_ss_to_loop (&loop, arrayss2); + + /* Initialize the loop. */ + gfc_conv_ss_startstride (&loop); + gfc_conv_loop_setup (&loop, &expr->where); + + gfc_mark_ss_chain_used (arrayss1, 1); + gfc_mark_ss_chain_used (arrayss2, 1); + + /* Generate the loop body. */ + gfc_start_scalarized_body (&loop, &body); + gfc_init_block (&block); + + /* Make the tree expression for [conjg(]array1[)]. */ + gfc_init_se (&arrayse1, NULL); + gfc_copy_loopinfo_to_se (&arrayse1, &loop); + arrayse1.ss = arrayss1; + gfc_conv_expr_val (&arrayse1, arrayexpr1); + if (expr->ts.type == BT_COMPLEX) + arrayse1.expr = fold_build1 (CONJ_EXPR, type, arrayse1.expr); + gfc_add_block_to_block (&block, &arrayse1.pre); + + /* Make the tree expression for array2. */ + gfc_init_se (&arrayse2, NULL); + gfc_copy_loopinfo_to_se (&arrayse2, &loop); + arrayse2.ss = arrayss2; + gfc_conv_expr_val (&arrayse2, arrayexpr2); + gfc_add_block_to_block (&block, &arrayse2.pre); + + /* Do the actual product and sum. */ + if (expr->ts.type == BT_LOGICAL) + { + tmp = fold_build2 (TRUTH_AND_EXPR, type, arrayse1.expr, arrayse2.expr); + tmp = fold_build2 (TRUTH_OR_EXPR, type, resvar, tmp); + } + else + { + tmp = fold_build2 (MULT_EXPR, type, arrayse1.expr, arrayse2.expr); + tmp = fold_build2 (PLUS_EXPR, type, resvar, tmp); + } + gfc_add_modify (&block, resvar, tmp); + + /* Finish up the loop block and the loop. */ + tmp = gfc_finish_block (&block); + gfc_add_expr_to_block (&body, tmp); + + gfc_trans_scalarizing_loops (&loop, &body); + gfc_add_block_to_block (&se->pre, &loop.pre); + gfc_add_block_to_block (&se->pre, &loop.post); + gfc_cleanup_loop (&loop); + + se->expr = resvar; +} + + +static void +gfc_conv_intrinsic_minmaxloc (gfc_se * se, gfc_expr * expr, int op) +{ + stmtblock_t body; + stmtblock_t block; + stmtblock_t ifblock; + stmtblock_t elseblock; + tree limit; + tree type; + tree tmp; + tree elsetmp; + tree ifbody; + tree offset; + gfc_loopinfo loop; + gfc_actual_arglist *actual; + gfc_ss *arrayss; + gfc_ss *maskss; + gfc_se arrayse; + gfc_se maskse; + gfc_expr *arrayexpr; + gfc_expr *maskexpr; + tree pos; + int n; + + if (se->ss) + { + gfc_conv_intrinsic_funcall (se, expr); + return; + } + + /* Initialize the result. */ + pos = gfc_create_var (gfc_array_index_type, "pos"); + offset = gfc_create_var (gfc_array_index_type, "offset"); + type = gfc_typenode_for_spec (&expr->ts); + + /* Walk the arguments. */ + actual = expr->value.function.actual; + arrayexpr = actual->expr; + arrayss = gfc_walk_expr (arrayexpr); + gcc_assert (arrayss != gfc_ss_terminator); + + actual = actual->next->next; + gcc_assert (actual); + maskexpr = actual->expr; + if (maskexpr && maskexpr->rank != 0) + { + maskss = gfc_walk_expr (maskexpr); + gcc_assert (maskss != gfc_ss_terminator); + } + else + maskss = NULL; + + limit = gfc_create_var (gfc_typenode_for_spec (&arrayexpr->ts), "limit"); + n = gfc_validate_kind (arrayexpr->ts.type, arrayexpr->ts.kind, false); + switch (arrayexpr->ts.type) + { + case BT_REAL: + tmp = gfc_conv_mpfr_to_tree (gfc_real_kinds[n].huge, arrayexpr->ts.kind); + break; + + case BT_INTEGER: + tmp = gfc_conv_mpz_to_tree (gfc_integer_kinds[n].huge, + arrayexpr->ts.kind); + break; + + default: + gcc_unreachable (); + } + + /* We start with the most negative possible value for MAXLOC, and the most + positive possible value for MINLOC. The most negative possible value is + -HUGE for BT_REAL and (-HUGE - 1) for BT_INTEGER; the most positive + possible value is HUGE in both cases. */ + if (op == GT_EXPR) + tmp = fold_build1 (NEGATE_EXPR, TREE_TYPE (tmp), tmp); + gfc_add_modify (&se->pre, limit, tmp); + + if (op == GT_EXPR && expr->ts.type == BT_INTEGER) + tmp = fold_build2 (MINUS_EXPR, TREE_TYPE (tmp), tmp, + build_int_cst (type, 1)); + + /* Initialize the scalarizer. */ + gfc_init_loopinfo (&loop); + gfc_add_ss_to_loop (&loop, arrayss); + if (maskss) + gfc_add_ss_to_loop (&loop, maskss); + + /* Initialize the loop. */ + gfc_conv_ss_startstride (&loop); + gfc_conv_loop_setup (&loop, &expr->where); + + gcc_assert (loop.dimen == 1); + + /* Initialize the position to zero, following Fortran 2003. We are free + to do this because Fortran 95 allows the result of an entirely false + mask to be processor dependent. */ + gfc_add_modify (&loop.pre, pos, gfc_index_zero_node); + + gfc_mark_ss_chain_used (arrayss, 1); + if (maskss) + gfc_mark_ss_chain_used (maskss, 1); + /* Generate the loop body. */ + gfc_start_scalarized_body (&loop, &body); + + /* If we have a mask, only check this element if the mask is set. */ + if (maskss) + { + gfc_init_se (&maskse, NULL); + gfc_copy_loopinfo_to_se (&maskse, &loop); + maskse.ss = maskss; + gfc_conv_expr_val (&maskse, maskexpr); + gfc_add_block_to_block (&body, &maskse.pre); + + gfc_start_block (&block); + } + else + gfc_init_block (&block); + + /* Compare with the current limit. */ + gfc_init_se (&arrayse, NULL); + gfc_copy_loopinfo_to_se (&arrayse, &loop); + arrayse.ss = arrayss; + gfc_conv_expr_val (&arrayse, arrayexpr); + gfc_add_block_to_block (&block, &arrayse.pre); + + /* We do the following if this is a more extreme value. */ + gfc_start_block (&ifblock); + + /* Assign the value to the limit... */ + gfc_add_modify (&ifblock, limit, arrayse.expr); + + /* Remember where we are. An offset must be added to the loop + counter to obtain the required position. */ + if (loop.from[0]) + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + gfc_index_one_node, loop.from[0]); + else + tmp = gfc_index_one_node; + + gfc_add_modify (&block, offset, tmp); + + tmp = fold_build2 (PLUS_EXPR, TREE_TYPE (pos), + loop.loopvar[0], offset); + gfc_add_modify (&ifblock, pos, tmp); + + ifbody = gfc_finish_block (&ifblock); + + /* If it is a more extreme value or pos is still zero and the value + equal to the limit. */ + tmp = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, + fold_build2 (EQ_EXPR, boolean_type_node, + pos, gfc_index_zero_node), + fold_build2 (EQ_EXPR, boolean_type_node, + arrayse.expr, limit)); + tmp = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, + fold_build2 (op, boolean_type_node, + arrayse.expr, limit), tmp); + tmp = build3_v (COND_EXPR, tmp, ifbody, build_empty_stmt ()); + gfc_add_expr_to_block (&block, tmp); + + if (maskss) + { + /* We enclose the above in if (mask) {...}. */ + tmp = gfc_finish_block (&block); + + tmp = build3_v (COND_EXPR, maskse.expr, tmp, build_empty_stmt ()); + } + else + tmp = gfc_finish_block (&block); + gfc_add_expr_to_block (&body, tmp); + + gfc_trans_scalarizing_loops (&loop, &body); + + /* For a scalar mask, enclose the loop in an if statement. */ + if (maskexpr && maskss == NULL) + { + gfc_init_se (&maskse, NULL); + gfc_conv_expr_val (&maskse, maskexpr); + gfc_init_block (&block); + gfc_add_block_to_block (&block, &loop.pre); + gfc_add_block_to_block (&block, &loop.post); + tmp = gfc_finish_block (&block); + + /* For the else part of the scalar mask, just initialize + the pos variable the same way as above. */ + + gfc_init_block (&elseblock); + gfc_add_modify (&elseblock, pos, gfc_index_zero_node); + elsetmp = gfc_finish_block (&elseblock); + + tmp = build3_v (COND_EXPR, maskse.expr, tmp, elsetmp); + gfc_add_expr_to_block (&block, tmp); + gfc_add_block_to_block (&se->pre, &block); + } + else + { + gfc_add_block_to_block (&se->pre, &loop.pre); + gfc_add_block_to_block (&se->pre, &loop.post); + } + gfc_cleanup_loop (&loop); + + se->expr = convert (type, pos); +} + +static void +gfc_conv_intrinsic_minmaxval (gfc_se * se, gfc_expr * expr, int op) +{ + tree limit; + tree type; + tree tmp; + tree ifbody; + stmtblock_t body; + stmtblock_t block; + gfc_loopinfo loop; + gfc_actual_arglist *actual; + gfc_ss *arrayss; + gfc_ss *maskss; + gfc_se arrayse; + gfc_se maskse; + gfc_expr *arrayexpr; + gfc_expr *maskexpr; + int n; + + if (se->ss) + { + gfc_conv_intrinsic_funcall (se, expr); + return; + } + + type = gfc_typenode_for_spec (&expr->ts); + /* Initialize the result. */ + limit = gfc_create_var (type, "limit"); + n = gfc_validate_kind (expr->ts.type, expr->ts.kind, false); + switch (expr->ts.type) + { + case BT_REAL: + tmp = gfc_conv_mpfr_to_tree (gfc_real_kinds[n].huge, expr->ts.kind); + break; + + case BT_INTEGER: + tmp = gfc_conv_mpz_to_tree (gfc_integer_kinds[n].huge, expr->ts.kind); + break; + + default: + gcc_unreachable (); + } + + /* We start with the most negative possible value for MAXVAL, and the most + positive possible value for MINVAL. The most negative possible value is + -HUGE for BT_REAL and (-HUGE - 1) for BT_INTEGER; the most positive + possible value is HUGE in both cases. */ + if (op == GT_EXPR) + tmp = fold_build1 (NEGATE_EXPR, TREE_TYPE (tmp), tmp); + + if (op == GT_EXPR && expr->ts.type == BT_INTEGER) + tmp = fold_build2 (MINUS_EXPR, TREE_TYPE (tmp), + tmp, build_int_cst (type, 1)); + + gfc_add_modify (&se->pre, limit, tmp); + + /* Walk the arguments. */ + actual = expr->value.function.actual; + arrayexpr = actual->expr; + arrayss = gfc_walk_expr (arrayexpr); + gcc_assert (arrayss != gfc_ss_terminator); + + actual = actual->next->next; + gcc_assert (actual); + maskexpr = actual->expr; + if (maskexpr && maskexpr->rank != 0) + { + maskss = gfc_walk_expr (maskexpr); + gcc_assert (maskss != gfc_ss_terminator); + } + else + maskss = NULL; + + /* Initialize the scalarizer. */ + gfc_init_loopinfo (&loop); + gfc_add_ss_to_loop (&loop, arrayss); + if (maskss) + gfc_add_ss_to_loop (&loop, maskss); + + /* Initialize the loop. */ + gfc_conv_ss_startstride (&loop); + gfc_conv_loop_setup (&loop, &expr->where); + + gfc_mark_ss_chain_used (arrayss, 1); + if (maskss) + gfc_mark_ss_chain_used (maskss, 1); + /* Generate the loop body. */ + gfc_start_scalarized_body (&loop, &body); + + /* If we have a mask, only add this element if the mask is set. */ + if (maskss) + { + gfc_init_se (&maskse, NULL); + gfc_copy_loopinfo_to_se (&maskse, &loop); + maskse.ss = maskss; + gfc_conv_expr_val (&maskse, maskexpr); + gfc_add_block_to_block (&body, &maskse.pre); + + gfc_start_block (&block); + } + else + gfc_init_block (&block); + + /* Compare with the current limit. */ + gfc_init_se (&arrayse, NULL); + gfc_copy_loopinfo_to_se (&arrayse, &loop); + arrayse.ss = arrayss; + gfc_conv_expr_val (&arrayse, arrayexpr); + gfc_add_block_to_block (&block, &arrayse.pre); + + /* Assign the value to the limit... */ + ifbody = build2_v (MODIFY_EXPR, limit, arrayse.expr); + + /* If it is a more extreme value. */ + tmp = fold_build2 (op, boolean_type_node, arrayse.expr, limit); + tmp = build3_v (COND_EXPR, tmp, ifbody, build_empty_stmt ()); + gfc_add_expr_to_block (&block, tmp); + gfc_add_block_to_block (&block, &arrayse.post); + + tmp = gfc_finish_block (&block); + if (maskss) + /* We enclose the above in if (mask) {...}. */ + tmp = build3_v (COND_EXPR, maskse.expr, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&body, tmp); + + gfc_trans_scalarizing_loops (&loop, &body); + + /* For a scalar mask, enclose the loop in an if statement. */ + if (maskexpr && maskss == NULL) + { + gfc_init_se (&maskse, NULL); + gfc_conv_expr_val (&maskse, maskexpr); + gfc_init_block (&block); + gfc_add_block_to_block (&block, &loop.pre); + gfc_add_block_to_block (&block, &loop.post); + tmp = gfc_finish_block (&block); + + tmp = build3_v (COND_EXPR, maskse.expr, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&block, tmp); + gfc_add_block_to_block (&se->pre, &block); + } + else + { + gfc_add_block_to_block (&se->pre, &loop.pre); + gfc_add_block_to_block (&se->pre, &loop.post); + } + + gfc_cleanup_loop (&loop); + + se->expr = limit; +} + +/* BTEST (i, pos) = (i & (1 << pos)) != 0. */ +static void +gfc_conv_intrinsic_btest (gfc_se * se, gfc_expr * expr) +{ + tree args[2]; + tree type; + tree tmp; + + gfc_conv_intrinsic_function_args (se, expr, args, 2); + type = TREE_TYPE (args[0]); + + tmp = fold_build2 (LSHIFT_EXPR, type, build_int_cst (type, 1), args[1]); + tmp = fold_build2 (BIT_AND_EXPR, type, args[0], tmp); + tmp = fold_build2 (NE_EXPR, boolean_type_node, tmp, + build_int_cst (type, 0)); + type = gfc_typenode_for_spec (&expr->ts); + se->expr = convert (type, tmp); +} + +/* Generate code to perform the specified operation. */ +static void +gfc_conv_intrinsic_bitop (gfc_se * se, gfc_expr * expr, int op) +{ + tree args[2]; + + gfc_conv_intrinsic_function_args (se, expr, args, 2); + se->expr = fold_build2 (op, TREE_TYPE (args[0]), args[0], args[1]); +} + +/* Bitwise not. */ +static void +gfc_conv_intrinsic_not (gfc_se * se, gfc_expr * expr) +{ + tree arg; + + gfc_conv_intrinsic_function_args (se, expr, &arg, 1); + se->expr = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (arg), arg); +} + +/* Set or clear a single bit. */ +static void +gfc_conv_intrinsic_singlebitop (gfc_se * se, gfc_expr * expr, int set) +{ + tree args[2]; + tree type; + tree tmp; + int op; + + gfc_conv_intrinsic_function_args (se, expr, args, 2); + type = TREE_TYPE (args[0]); + + tmp = fold_build2 (LSHIFT_EXPR, type, build_int_cst (type, 1), args[1]); + if (set) + op = BIT_IOR_EXPR; + else + { + op = BIT_AND_EXPR; + tmp = fold_build1 (BIT_NOT_EXPR, type, tmp); + } + se->expr = fold_build2 (op, type, args[0], tmp); +} + +/* Extract a sequence of bits. + IBITS(I, POS, LEN) = (I >> POS) & ~((~0) << LEN). */ +static void +gfc_conv_intrinsic_ibits (gfc_se * se, gfc_expr * expr) +{ + tree args[3]; + tree type; + tree tmp; + tree mask; + + gfc_conv_intrinsic_function_args (se, expr, args, 3); + type = TREE_TYPE (args[0]); + + mask = build_int_cst (type, -1); + mask = fold_build2 (LSHIFT_EXPR, type, mask, args[2]); + mask = fold_build1 (BIT_NOT_EXPR, type, mask); + + tmp = fold_build2 (RSHIFT_EXPR, type, args[0], args[1]); + + se->expr = fold_build2 (BIT_AND_EXPR, type, tmp, mask); +} + +/* RSHIFT (I, SHIFT) = I >> SHIFT + LSHIFT (I, SHIFT) = I << SHIFT */ +static void +gfc_conv_intrinsic_rlshift (gfc_se * se, gfc_expr * expr, int right_shift) +{ + tree args[2]; + + gfc_conv_intrinsic_function_args (se, expr, args, 2); + + se->expr = fold_build2 (right_shift ? RSHIFT_EXPR : LSHIFT_EXPR, + TREE_TYPE (args[0]), args[0], args[1]); +} + +/* ISHFT (I, SHIFT) = (abs (shift) >= BIT_SIZE (i)) + ? 0 + : ((shift >= 0) ? i << shift : i >> -shift) + where all shifts are logical shifts. */ +static void +gfc_conv_intrinsic_ishft (gfc_se * se, gfc_expr * expr) +{ + tree args[2]; + tree type; + tree utype; + tree tmp; + tree width; + tree num_bits; + tree cond; + tree lshift; + tree rshift; + + gfc_conv_intrinsic_function_args (se, expr, args, 2); + type = TREE_TYPE (args[0]); + utype = unsigned_type_for (type); + + width = fold_build1 (ABS_EXPR, TREE_TYPE (args[1]), args[1]); + + /* Left shift if positive. */ + lshift = fold_build2 (LSHIFT_EXPR, type, args[0], width); + + /* Right shift if negative. + We convert to an unsigned type because we want a logical shift. + The standard doesn't define the case of shifting negative + numbers, and we try to be compatible with other compilers, most + notably g77, here. */ + rshift = fold_convert (type, fold_build2 (RSHIFT_EXPR, utype, + convert (utype, args[0]), width)); + + tmp = fold_build2 (GE_EXPR, boolean_type_node, args[1], + build_int_cst (TREE_TYPE (args[1]), 0)); + tmp = fold_build3 (COND_EXPR, type, tmp, lshift, rshift); + + /* The Fortran standard allows shift widths <= BIT_SIZE(I), whereas + gcc requires a shift width < BIT_SIZE(I), so we have to catch this + special case. */ + num_bits = build_int_cst (TREE_TYPE (args[1]), TYPE_PRECISION (type)); + cond = fold_build2 (GE_EXPR, boolean_type_node, width, num_bits); + + se->expr = fold_build3 (COND_EXPR, type, cond, + build_int_cst (type, 0), tmp); +} + + +/* Circular shift. AKA rotate or barrel shift. */ + +static void +gfc_conv_intrinsic_ishftc (gfc_se * se, gfc_expr * expr) +{ + tree *args; + tree type; + tree tmp; + tree lrot; + tree rrot; + tree zero; + unsigned int num_args; + + num_args = gfc_intrinsic_argument_list_length (expr); + args = (tree *) alloca (sizeof (tree) * num_args); + + gfc_conv_intrinsic_function_args (se, expr, args, num_args); + + if (num_args == 3) + { + /* Use a library function for the 3 parameter version. */ + tree int4type = gfc_get_int_type (4); + + type = TREE_TYPE (args[0]); + /* We convert the first argument to at least 4 bytes, and + convert back afterwards. This removes the need for library + functions for all argument sizes, and function will be + aligned to at least 32 bits, so there's no loss. */ + if (expr->ts.kind < 4) + args[0] = convert (int4type, args[0]); + + /* Convert the SHIFT and SIZE args to INTEGER*4 otherwise we would + need loads of library functions. They cannot have values > + BIT_SIZE (I) so the conversion is safe. */ + args[1] = convert (int4type, args[1]); + args[2] = convert (int4type, args[2]); + + switch (expr->ts.kind) + { + case 1: + case 2: + case 4: + tmp = gfor_fndecl_math_ishftc4; + break; + case 8: + tmp = gfor_fndecl_math_ishftc8; + break; + case 16: + tmp = gfor_fndecl_math_ishftc16; + break; + default: + gcc_unreachable (); + } + se->expr = build_call_expr (tmp, 3, args[0], args[1], args[2]); + /* Convert the result back to the original type, if we extended + the first argument's width above. */ + if (expr->ts.kind < 4) + se->expr = convert (type, se->expr); + + return; + } + type = TREE_TYPE (args[0]); + + /* Rotate left if positive. */ + lrot = fold_build2 (LROTATE_EXPR, type, args[0], args[1]); + + /* Rotate right if negative. */ + tmp = fold_build1 (NEGATE_EXPR, TREE_TYPE (args[1]), args[1]); + rrot = fold_build2 (RROTATE_EXPR, type, args[0], tmp); + + zero = build_int_cst (TREE_TYPE (args[1]), 0); + tmp = fold_build2 (GT_EXPR, boolean_type_node, args[1], zero); + rrot = fold_build3 (COND_EXPR, type, tmp, lrot, rrot); + + /* Do nothing if shift == 0. */ + tmp = fold_build2 (EQ_EXPR, boolean_type_node, args[1], zero); + se->expr = fold_build3 (COND_EXPR, type, tmp, args[0], rrot); +} + +/* LEADZ (i) = (i == 0) ? BIT_SIZE (i) + : __builtin_clz(i) - (BIT_SIZE('int') - BIT_SIZE(i)) + + The conditional expression is necessary because the result of LEADZ(0) + is defined, but the result of __builtin_clz(0) is undefined for most + targets. + + For INTEGER kinds smaller than the C 'int' type, we have to subtract the + difference in bit size between the argument of LEADZ and the C int. */ + +static void +gfc_conv_intrinsic_leadz (gfc_se * se, gfc_expr * expr) +{ + tree arg; + tree arg_type; + tree cond; + tree result_type; + tree leadz; + tree bit_size; + tree tmp; + int arg_kind; + int i, n, s; + + gfc_conv_intrinsic_function_args (se, expr, &arg, 1); + + /* Which variant of __builtin_clz* should we call? */ + arg_kind = expr->value.function.actual->expr->ts.kind; + i = gfc_validate_kind (BT_INTEGER, arg_kind, false); + switch (arg_kind) + { + case 1: + case 2: + case 4: + arg_type = unsigned_type_node; + n = BUILT_IN_CLZ; + break; + + case 8: + arg_type = long_unsigned_type_node; + n = BUILT_IN_CLZL; + break; + + case 16: + arg_type = long_long_unsigned_type_node; + n = BUILT_IN_CLZLL; + break; + + default: + gcc_unreachable (); + } + + /* Convert the actual argument to the proper argument type for the built-in + function. But the return type is of the default INTEGER kind. */ + arg = fold_convert (arg_type, arg); + result_type = gfc_get_int_type (gfc_default_integer_kind); + + /* Compute LEADZ for the case i .ne. 0. */ + s = TYPE_PRECISION (arg_type) - gfc_integer_kinds[i].bit_size; + tmp = fold_convert (result_type, build_call_expr (built_in_decls[n], 1, arg)); + leadz = fold_build2 (MINUS_EXPR, result_type, + tmp, build_int_cst (result_type, s)); + + /* Build BIT_SIZE. */ + bit_size = build_int_cst (result_type, gfc_integer_kinds[i].bit_size); + + /* ??? For some combinations of targets and integer kinds, the condition + can be avoided if CLZ_DEFINED_VALUE_AT_ZERO is used. Later. */ + cond = fold_build2 (EQ_EXPR, boolean_type_node, + arg, build_int_cst (arg_type, 0)); + se->expr = fold_build3 (COND_EXPR, result_type, cond, bit_size, leadz); +} + +/* TRAILZ(i) = (i == 0) ? BIT_SIZE (i) : __builtin_ctz(i) + + The conditional expression is necessary because the result of TRAILZ(0) + is defined, but the result of __builtin_ctz(0) is undefined for most + targets. */ + +static void +gfc_conv_intrinsic_trailz (gfc_se * se, gfc_expr *expr) +{ + tree arg; + tree arg_type; + tree cond; + tree result_type; + tree trailz; + tree bit_size; + int arg_kind; + int i, n; + + gfc_conv_intrinsic_function_args (se, expr, &arg, 1); + + /* Which variant of __builtin_clz* should we call? */ + arg_kind = expr->value.function.actual->expr->ts.kind; + i = gfc_validate_kind (BT_INTEGER, arg_kind, false); + switch (expr->ts.kind) + { + case 1: + case 2: + case 4: + arg_type = unsigned_type_node; + n = BUILT_IN_CTZ; + break; + + case 8: + arg_type = long_unsigned_type_node; + n = BUILT_IN_CTZL; + break; + + case 16: + arg_type = long_long_unsigned_type_node; + n = BUILT_IN_CTZLL; + break; + + default: + gcc_unreachable (); + } + + /* Convert the actual argument to the proper argument type for the built-in + function. But the return type is of the default INTEGER kind. */ + arg = fold_convert (arg_type, arg); + result_type = gfc_get_int_type (gfc_default_integer_kind); + + /* Compute TRAILZ for the case i .ne. 0. */ + trailz = fold_convert (result_type, build_call_expr (built_in_decls[n], 1, arg)); + + /* Build BIT_SIZE. */ + bit_size = build_int_cst (result_type, gfc_integer_kinds[i].bit_size); + + /* ??? For some combinations of targets and integer kinds, the condition + can be avoided if CTZ_DEFINED_VALUE_AT_ZERO is used. Later. */ + cond = fold_build2 (EQ_EXPR, boolean_type_node, + arg, build_int_cst (arg_type, 0)); + se->expr = fold_build3 (COND_EXPR, result_type, cond, bit_size, trailz); +} + +/* Process an intrinsic with unspecified argument-types that has an optional + argument (which could be of type character), e.g. EOSHIFT. For those, we + need to append the string length of the optional argument if it is not + present and the type is really character. + primary specifies the position (starting at 1) of the non-optional argument + specifying the type and optional gives the position of the optional + argument in the arglist. */ + +static void +conv_generic_with_optional_char_arg (gfc_se* se, gfc_expr* expr, + unsigned primary, unsigned optional) +{ + gfc_actual_arglist* prim_arg; + gfc_actual_arglist* opt_arg; + unsigned cur_pos; + gfc_actual_arglist* arg; + gfc_symbol* sym; + tree append_args; + + /* Find the two arguments given as position. */ + cur_pos = 0; + prim_arg = NULL; + opt_arg = NULL; + for (arg = expr->value.function.actual; arg; arg = arg->next) + { + ++cur_pos; + + if (cur_pos == primary) + prim_arg = arg; + if (cur_pos == optional) + opt_arg = arg; + + if (cur_pos >= primary && cur_pos >= optional) + break; + } + gcc_assert (prim_arg); + gcc_assert (prim_arg->expr); + gcc_assert (opt_arg); + + /* If we do have type CHARACTER and the optional argument is really absent, + append a dummy 0 as string length. */ + append_args = NULL_TREE; + if (prim_arg->expr->ts.type == BT_CHARACTER && !opt_arg->expr) + { + tree dummy; + + dummy = build_int_cst (gfc_charlen_type_node, 0); + append_args = gfc_chainon_list (append_args, dummy); + } + + /* Build the call itself. */ + sym = gfc_get_symbol_for_expr (expr); + gfc_conv_function_call (se, sym, expr->value.function.actual, append_args); + gfc_free (sym); +} + + +/* The length of a character string. */ +static void +gfc_conv_intrinsic_len (gfc_se * se, gfc_expr * expr) +{ + tree len; + tree type; + tree decl; + gfc_symbol *sym; + gfc_se argse; + gfc_expr *arg; + gfc_ss *ss; + + gcc_assert (!se->ss); + + arg = expr->value.function.actual->expr; + + type = gfc_typenode_for_spec (&expr->ts); + switch (arg->expr_type) + { + case EXPR_CONSTANT: + len = build_int_cst (NULL_TREE, arg->value.character.length); + break; + + case EXPR_ARRAY: + /* Obtain the string length from the function used by + trans-array.c(gfc_trans_array_constructor). */ + len = NULL_TREE; + get_array_ctor_strlen (&se->pre, arg->value.constructor, &len); + break; + + case EXPR_VARIABLE: + if (arg->ref == NULL + || (arg->ref->next == NULL && arg->ref->type == REF_ARRAY)) + { + /* This doesn't catch all cases. + See http://gcc.gnu.org/ml/fortran/2004-06/msg00165.html + and the surrounding thread. */ + sym = arg->symtree->n.sym; + decl = gfc_get_symbol_decl (sym); + if (decl == current_function_decl && sym->attr.function + && (sym->result == sym)) + decl = gfc_get_fake_result_decl (sym, 0); + + len = sym->ts.cl->backend_decl; + gcc_assert (len); + break; + } + + /* Otherwise fall through. */ + + default: + /* Anybody stupid enough to do this deserves inefficient code. */ + ss = gfc_walk_expr (arg); + gfc_init_se (&argse, se); + if (ss == gfc_ss_terminator) + gfc_conv_expr (&argse, arg); + else + gfc_conv_expr_descriptor (&argse, arg, ss); + gfc_add_block_to_block (&se->pre, &argse.pre); + gfc_add_block_to_block (&se->post, &argse.post); + len = argse.string_length; + break; + } + se->expr = convert (type, len); +} + +/* The length of a character string not including trailing blanks. */ +static void +gfc_conv_intrinsic_len_trim (gfc_se * se, gfc_expr * expr) +{ + int kind = expr->value.function.actual->expr->ts.kind; + tree args[2], type, fndecl; + + gfc_conv_intrinsic_function_args (se, expr, args, 2); + type = gfc_typenode_for_spec (&expr->ts); + + if (kind == 1) + fndecl = gfor_fndecl_string_len_trim; + else if (kind == 4) + fndecl = gfor_fndecl_string_len_trim_char4; + else + gcc_unreachable (); + + se->expr = build_call_expr (fndecl, 2, args[0], args[1]); + se->expr = convert (type, se->expr); +} + + +/* Returns the starting position of a substring within a string. */ + +static void +gfc_conv_intrinsic_index_scan_verify (gfc_se * se, gfc_expr * expr, + tree function) +{ + tree logical4_type_node = gfc_get_logical_type (4); + tree type; + tree fndecl; + tree *args; + unsigned int num_args; + + args = (tree *) alloca (sizeof (tree) * 5); + + /* Get number of arguments; characters count double due to the + string length argument. Kind= is not passed to the library + and thus ignored. */ + if (expr->value.function.actual->next->next->expr == NULL) + num_args = 4; + else + num_args = 5; + + gfc_conv_intrinsic_function_args (se, expr, args, num_args); + type = gfc_typenode_for_spec (&expr->ts); + + if (num_args == 4) + args[4] = build_int_cst (logical4_type_node, 0); + else + args[4] = convert (logical4_type_node, args[4]); + + fndecl = build_addr (function, current_function_decl); + se->expr = build_call_array (TREE_TYPE (TREE_TYPE (function)), fndecl, + 5, args); + se->expr = convert (type, se->expr); + +} + +/* The ascii value for a single character. */ +static void +gfc_conv_intrinsic_ichar (gfc_se * se, gfc_expr * expr) +{ + tree args[2], type, pchartype; + + gfc_conv_intrinsic_function_args (se, expr, args, 2); + gcc_assert (POINTER_TYPE_P (TREE_TYPE (args[1]))); + pchartype = gfc_get_pchar_type (expr->value.function.actual->expr->ts.kind); + args[1] = fold_build1 (NOP_EXPR, pchartype, args[1]); + type = gfc_typenode_for_spec (&expr->ts); + + se->expr = build_fold_indirect_ref (args[1]); + se->expr = convert (type, se->expr); +} + + +/* Intrinsic ISNAN calls __builtin_isnan. */ + +static void +gfc_conv_intrinsic_isnan (gfc_se * se, gfc_expr * expr) +{ + tree arg; + + gfc_conv_intrinsic_function_args (se, expr, &arg, 1); + se->expr = build_call_expr (built_in_decls[BUILT_IN_ISNAN], 1, arg); + STRIP_TYPE_NOPS (se->expr); + se->expr = fold_convert (gfc_typenode_for_spec (&expr->ts), se->expr); +} + + +/* Intrinsics IS_IOSTAT_END and IS_IOSTAT_EOR just need to compare + their argument against a constant integer value. */ + +static void +gfc_conv_has_intvalue (gfc_se * se, gfc_expr * expr, const int value) +{ + tree arg; + + gfc_conv_intrinsic_function_args (se, expr, &arg, 1); + se->expr = fold_build2 (EQ_EXPR, gfc_typenode_for_spec (&expr->ts), + arg, build_int_cst (TREE_TYPE (arg), value)); +} + + + +/* MERGE (tsource, fsource, mask) = mask ? tsource : fsource. */ + +static void +gfc_conv_intrinsic_merge (gfc_se * se, gfc_expr * expr) +{ + tree tsource; + tree fsource; + tree mask; + tree type; + tree len, len2; + tree *args; + unsigned int num_args; + + num_args = gfc_intrinsic_argument_list_length (expr); + args = (tree *) alloca (sizeof (tree) * num_args); + + gfc_conv_intrinsic_function_args (se, expr, args, num_args); + if (expr->ts.type != BT_CHARACTER) + { + tsource = args[0]; + fsource = args[1]; + mask = args[2]; + } + else + { + /* We do the same as in the non-character case, but the argument + list is different because of the string length arguments. We + also have to set the string length for the result. */ + len = args[0]; + tsource = args[1]; + len2 = args[2]; + fsource = args[3]; + mask = args[4]; + + gfc_trans_same_strlen_check ("MERGE intrinsic", &expr->where, len, len2, + &se->pre); + se->string_length = len; + } + type = TREE_TYPE (tsource); + se->expr = fold_build3 (COND_EXPR, type, mask, tsource, + fold_convert (type, fsource)); +} + + +/* FRACTION (s) is translated into frexp (s, &dummy_int). */ +static void +gfc_conv_intrinsic_fraction (gfc_se * se, gfc_expr * expr) +{ + tree arg, type, tmp; + int frexp; + + switch (expr->ts.kind) + { + case 4: + frexp = BUILT_IN_FREXPF; + break; + case 8: + frexp = BUILT_IN_FREXP; + break; + case 10: + case 16: + frexp = BUILT_IN_FREXPL; + break; + default: + gcc_unreachable (); + } + + type = gfc_typenode_for_spec (&expr->ts); + gfc_conv_intrinsic_function_args (se, expr, &arg, 1); + tmp = gfc_create_var (integer_type_node, NULL); + se->expr = build_call_expr (built_in_decls[frexp], 2, + fold_convert (type, arg), + build_fold_addr_expr (tmp)); + se->expr = fold_convert (type, se->expr); +} + + +/* NEAREST (s, dir) is translated into + tmp = copysign (INF, dir); + return nextafter (s, tmp); + */ +static void +gfc_conv_intrinsic_nearest (gfc_se * se, gfc_expr * expr) +{ + tree args[2], type, tmp; + int nextafter, copysign, inf; + + switch (expr->ts.kind) + { + case 4: + nextafter = BUILT_IN_NEXTAFTERF; + copysign = BUILT_IN_COPYSIGNF; + inf = BUILT_IN_INFF; + break; + case 8: + nextafter = BUILT_IN_NEXTAFTER; + copysign = BUILT_IN_COPYSIGN; + inf = BUILT_IN_INF; + break; + case 10: + case 16: + nextafter = BUILT_IN_NEXTAFTERL; + copysign = BUILT_IN_COPYSIGNL; + inf = BUILT_IN_INFL; + break; + default: + gcc_unreachable (); + } + + type = gfc_typenode_for_spec (&expr->ts); + gfc_conv_intrinsic_function_args (se, expr, args, 2); + tmp = build_call_expr (built_in_decls[copysign], 2, + build_call_expr (built_in_decls[inf], 0), + fold_convert (type, args[1])); + se->expr = build_call_expr (built_in_decls[nextafter], 2, + fold_convert (type, args[0]), tmp); + se->expr = fold_convert (type, se->expr); +} + + +/* SPACING (s) is translated into + int e; + if (s == 0) + res = tiny; + else + { + frexp (s, &e); + e = e - prec; + e = MAX_EXPR (e, emin); + res = scalbn (1., e); + } + return res; + + where prec is the precision of s, gfc_real_kinds[k].digits, + emin is min_exponent - 1, gfc_real_kinds[k].min_exponent - 1, + and tiny is tiny(s), gfc_real_kinds[k].tiny. */ + +static void +gfc_conv_intrinsic_spacing (gfc_se * se, gfc_expr * expr) +{ + tree arg, type, prec, emin, tiny, res, e; + tree cond, tmp; + int frexp, scalbn, k; + stmtblock_t block; + + k = gfc_validate_kind (BT_REAL, expr->ts.kind, false); + prec = build_int_cst (NULL_TREE, gfc_real_kinds[k].digits); + emin = build_int_cst (NULL_TREE, gfc_real_kinds[k].min_exponent - 1); + tiny = gfc_conv_mpfr_to_tree (gfc_real_kinds[k].tiny, expr->ts.kind); + + switch (expr->ts.kind) + { + case 4: + frexp = BUILT_IN_FREXPF; + scalbn = BUILT_IN_SCALBNF; + break; + case 8: + frexp = BUILT_IN_FREXP; + scalbn = BUILT_IN_SCALBN; + break; + case 10: + case 16: + frexp = BUILT_IN_FREXPL; + scalbn = BUILT_IN_SCALBNL; + break; + default: + gcc_unreachable (); + } + + gfc_conv_intrinsic_function_args (se, expr, &arg, 1); + arg = gfc_evaluate_now (arg, &se->pre); + + type = gfc_typenode_for_spec (&expr->ts); + e = gfc_create_var (integer_type_node, NULL); + res = gfc_create_var (type, NULL); + + + /* Build the block for s /= 0. */ + gfc_start_block (&block); + tmp = build_call_expr (built_in_decls[frexp], 2, arg, + build_fold_addr_expr (e)); + gfc_add_expr_to_block (&block, tmp); + + tmp = fold_build2 (MINUS_EXPR, integer_type_node, e, prec); + gfc_add_modify (&block, e, fold_build2 (MAX_EXPR, integer_type_node, + tmp, emin)); + + tmp = build_call_expr (built_in_decls[scalbn], 2, + build_real_from_int_cst (type, integer_one_node), e); + gfc_add_modify (&block, res, tmp); + + /* Finish by building the IF statement. */ + cond = fold_build2 (EQ_EXPR, boolean_type_node, arg, + build_real_from_int_cst (type, integer_zero_node)); + tmp = build3_v (COND_EXPR, cond, build2_v (MODIFY_EXPR, res, tiny), + gfc_finish_block (&block)); + + gfc_add_expr_to_block (&se->pre, tmp); + se->expr = res; +} + + +/* RRSPACING (s) is translated into + int e; + real x; + x = fabs (s); + if (x != 0) + { + frexp (s, &e); + x = scalbn (x, precision - e); + } + return x; + + where precision is gfc_real_kinds[k].digits. */ + +static void +gfc_conv_intrinsic_rrspacing (gfc_se * se, gfc_expr * expr) +{ + tree arg, type, e, x, cond, stmt, tmp; + int frexp, scalbn, fabs, prec, k; + stmtblock_t block; + + k = gfc_validate_kind (BT_REAL, expr->ts.kind, false); + prec = gfc_real_kinds[k].digits; + switch (expr->ts.kind) + { + case 4: + frexp = BUILT_IN_FREXPF; + scalbn = BUILT_IN_SCALBNF; + fabs = BUILT_IN_FABSF; + break; + case 8: + frexp = BUILT_IN_FREXP; + scalbn = BUILT_IN_SCALBN; + fabs = BUILT_IN_FABS; + break; + case 10: + case 16: + frexp = BUILT_IN_FREXPL; + scalbn = BUILT_IN_SCALBNL; + fabs = BUILT_IN_FABSL; + break; + default: + gcc_unreachable (); + } + + type = gfc_typenode_for_spec (&expr->ts); + gfc_conv_intrinsic_function_args (se, expr, &arg, 1); + arg = gfc_evaluate_now (arg, &se->pre); + + e = gfc_create_var (integer_type_node, NULL); + x = gfc_create_var (type, NULL); + gfc_add_modify (&se->pre, x, + build_call_expr (built_in_decls[fabs], 1, arg)); + + + gfc_start_block (&block); + tmp = build_call_expr (built_in_decls[frexp], 2, arg, + build_fold_addr_expr (e)); + gfc_add_expr_to_block (&block, tmp); + + tmp = fold_build2 (MINUS_EXPR, integer_type_node, + build_int_cst (NULL_TREE, prec), e); + tmp = build_call_expr (built_in_decls[scalbn], 2, x, tmp); + gfc_add_modify (&block, x, tmp); + stmt = gfc_finish_block (&block); + + cond = fold_build2 (NE_EXPR, boolean_type_node, x, + build_real_from_int_cst (type, integer_zero_node)); + tmp = build3_v (COND_EXPR, cond, stmt, build_empty_stmt ()); + gfc_add_expr_to_block (&se->pre, tmp); + + se->expr = fold_convert (type, x); +} + + +/* SCALE (s, i) is translated into scalbn (s, i). */ +static void +gfc_conv_intrinsic_scale (gfc_se * se, gfc_expr * expr) +{ + tree args[2], type; + int scalbn; + + switch (expr->ts.kind) + { + case 4: + scalbn = BUILT_IN_SCALBNF; + break; + case 8: + scalbn = BUILT_IN_SCALBN; + break; + case 10: + case 16: + scalbn = BUILT_IN_SCALBNL; + break; + default: + gcc_unreachable (); + } + + type = gfc_typenode_for_spec (&expr->ts); + gfc_conv_intrinsic_function_args (se, expr, args, 2); + se->expr = build_call_expr (built_in_decls[scalbn], 2, + fold_convert (type, args[0]), + fold_convert (integer_type_node, args[1])); + se->expr = fold_convert (type, se->expr); +} + + +/* SET_EXPONENT (s, i) is translated into + scalbn (frexp (s, &dummy_int), i). */ +static void +gfc_conv_intrinsic_set_exponent (gfc_se * se, gfc_expr * expr) +{ + tree args[2], type, tmp; + int frexp, scalbn; + + switch (expr->ts.kind) + { + case 4: + frexp = BUILT_IN_FREXPF; + scalbn = BUILT_IN_SCALBNF; + break; + case 8: + frexp = BUILT_IN_FREXP; + scalbn = BUILT_IN_SCALBN; + break; + case 10: + case 16: + frexp = BUILT_IN_FREXPL; + scalbn = BUILT_IN_SCALBNL; + break; + default: + gcc_unreachable (); + } + + type = gfc_typenode_for_spec (&expr->ts); + gfc_conv_intrinsic_function_args (se, expr, args, 2); + + tmp = gfc_create_var (integer_type_node, NULL); + tmp = build_call_expr (built_in_decls[frexp], 2, + fold_convert (type, args[0]), + build_fold_addr_expr (tmp)); + se->expr = build_call_expr (built_in_decls[scalbn], 2, tmp, + fold_convert (integer_type_node, args[1])); + se->expr = fold_convert (type, se->expr); +} + + +static void +gfc_conv_intrinsic_size (gfc_se * se, gfc_expr * expr) +{ + gfc_actual_arglist *actual; + tree arg1; + tree type; + tree fncall0; + tree fncall1; + gfc_se argse; + gfc_ss *ss; + + gfc_init_se (&argse, NULL); + actual = expr->value.function.actual; + + ss = gfc_walk_expr (actual->expr); + gcc_assert (ss != gfc_ss_terminator); + argse.want_pointer = 1; + argse.data_not_needed = 1; + gfc_conv_expr_descriptor (&argse, actual->expr, ss); + gfc_add_block_to_block (&se->pre, &argse.pre); + gfc_add_block_to_block (&se->post, &argse.post); + arg1 = gfc_evaluate_now (argse.expr, &se->pre); + + /* Build the call to size0. */ + fncall0 = build_call_expr (gfor_fndecl_size0, 1, arg1); + + actual = actual->next; + + if (actual->expr) + { + gfc_init_se (&argse, NULL); + gfc_conv_expr_type (&argse, actual->expr, + gfc_array_index_type); + gfc_add_block_to_block (&se->pre, &argse.pre); + + /* Unusually, for an intrinsic, size does not exclude + an optional arg2, so we must test for it. */ + if (actual->expr->expr_type == EXPR_VARIABLE + && actual->expr->symtree->n.sym->attr.dummy + && actual->expr->symtree->n.sym->attr.optional) + { + tree tmp; + /* Build the call to size1. */ + fncall1 = build_call_expr (gfor_fndecl_size1, 2, + arg1, argse.expr); + + gfc_init_se (&argse, NULL); + argse.want_pointer = 1; + argse.data_not_needed = 1; + gfc_conv_expr (&argse, actual->expr); + gfc_add_block_to_block (&se->pre, &argse.pre); + tmp = fold_build2 (NE_EXPR, boolean_type_node, + argse.expr, null_pointer_node); + tmp = gfc_evaluate_now (tmp, &se->pre); + se->expr = fold_build3 (COND_EXPR, pvoid_type_node, + tmp, fncall1, fncall0); + } + else + { + se->expr = NULL_TREE; + argse.expr = fold_build2 (MINUS_EXPR, gfc_array_index_type, + argse.expr, gfc_index_one_node); + } + } + else if (expr->value.function.actual->expr->rank == 1) + { + argse.expr = gfc_index_zero_node; + se->expr = NULL_TREE; + } + else + se->expr = fncall0; + + if (se->expr == NULL_TREE) + { + tree ubound, lbound; + + arg1 = build_fold_indirect_ref (arg1); + ubound = gfc_conv_descriptor_ubound (arg1, argse.expr); + lbound = gfc_conv_descriptor_lbound (arg1, argse.expr); + se->expr = fold_build2 (MINUS_EXPR, gfc_array_index_type, + ubound, lbound); + se->expr = fold_build2 (PLUS_EXPR, gfc_array_index_type, se->expr, + gfc_index_one_node); + se->expr = fold_build2 (MAX_EXPR, gfc_array_index_type, se->expr, + gfc_index_zero_node); + } + + type = gfc_typenode_for_spec (&expr->ts); + se->expr = convert (type, se->expr); +} + + +/* Helper function to compute the size of a character variable, + excluding the terminating null characters. The result has + gfc_array_index_type type. */ + +static tree +size_of_string_in_bytes (int kind, tree string_length) +{ + tree bytesize; + int i = gfc_validate_kind (BT_CHARACTER, kind, false); + + bytesize = build_int_cst (gfc_array_index_type, + gfc_character_kinds[i].bit_size / 8); + + return fold_build2 (MULT_EXPR, gfc_array_index_type, bytesize, + fold_convert (gfc_array_index_type, string_length)); +} + + +static void +gfc_conv_intrinsic_sizeof (gfc_se *se, gfc_expr *expr) +{ + gfc_expr *arg; + gfc_ss *ss; + gfc_se argse; + tree source; + tree source_bytes; + tree type; + tree tmp; + tree lower; + tree upper; + int n; + + arg = expr->value.function.actual->expr; + + gfc_init_se (&argse, NULL); + ss = gfc_walk_expr (arg); + + if (ss == gfc_ss_terminator) + { + gfc_conv_expr_reference (&argse, arg); + source = argse.expr; + + type = TREE_TYPE (build_fold_indirect_ref (argse.expr)); + + /* Obtain the source word length. */ + if (arg->ts.type == BT_CHARACTER) + se->expr = size_of_string_in_bytes (arg->ts.kind, + argse.string_length); + else + se->expr = fold_convert (gfc_array_index_type, size_in_bytes (type)); + } + else + { + source_bytes = gfc_create_var (gfc_array_index_type, "bytes"); + argse.want_pointer = 0; + gfc_conv_expr_descriptor (&argse, arg, ss); + source = gfc_conv_descriptor_data_get (argse.expr); + type = gfc_get_element_type (TREE_TYPE (argse.expr)); + + /* Obtain the argument's word length. */ + if (arg->ts.type == BT_CHARACTER) + tmp = size_of_string_in_bytes (arg->ts.kind, argse.string_length); + else + tmp = fold_convert (gfc_array_index_type, + size_in_bytes (type)); + gfc_add_modify (&argse.pre, source_bytes, tmp); + + /* Obtain the size of the array in bytes. */ + for (n = 0; n < arg->rank; n++) + { + tree idx; + idx = gfc_rank_cst[n]; + lower = gfc_conv_descriptor_lbound (argse.expr, idx); + upper = gfc_conv_descriptor_ubound (argse.expr, idx); + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + upper, lower); + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + tmp, gfc_index_one_node); + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, + tmp, source_bytes); + gfc_add_modify (&argse.pre, source_bytes, tmp); + } + se->expr = source_bytes; + } + + gfc_add_block_to_block (&se->pre, &argse.pre); +} + + +/* Intrinsic string comparison functions. */ + +static void +gfc_conv_intrinsic_strcmp (gfc_se * se, gfc_expr * expr, int op) +{ + tree args[4]; + + gfc_conv_intrinsic_function_args (se, expr, args, 4); + + se->expr + = gfc_build_compare_string (args[0], args[1], args[2], args[3], + expr->value.function.actual->expr->ts.kind); + se->expr = fold_build2 (op, gfc_typenode_for_spec (&expr->ts), se->expr, + build_int_cst (TREE_TYPE (se->expr), 0)); +} + +/* Generate a call to the adjustl/adjustr library function. */ +static void +gfc_conv_intrinsic_adjust (gfc_se * se, gfc_expr * expr, tree fndecl) +{ + tree args[3]; + tree len; + tree type; + tree var; + tree tmp; + + gfc_conv_intrinsic_function_args (se, expr, &args[1], 2); + len = args[1]; + + type = TREE_TYPE (args[2]); + var = gfc_conv_string_tmp (se, type, len); + args[0] = var; + + tmp = build_call_expr (fndecl, 3, args[0], args[1], args[2]); + gfc_add_expr_to_block (&se->pre, tmp); + se->expr = var; + se->string_length = len; +} + + +/* Generate code for the TRANSFER intrinsic: + For scalar results: + DEST = TRANSFER (SOURCE, MOLD) + where: + typeof = typeof + and: + MOLD is scalar. + + For array results: + DEST(1:N) = TRANSFER (SOURCE, MOLD[, SIZE]) + where: + typeof = typeof + and: + N = min (sizeof (SOURCE(:)), sizeof (DEST(:)), + sizeof (DEST(0) * SIZE). */ +static void +gfc_conv_intrinsic_transfer (gfc_se * se, gfc_expr * expr) +{ + tree tmp; + tree tmpdecl; + tree ptr; + tree extent; + tree source; + tree source_type; + tree source_bytes; + tree mold_type; + tree dest_word_len; + tree size_words; + tree size_bytes; + tree upper; + tree lower; + tree stride; + tree stmt; + gfc_actual_arglist *arg; + gfc_se argse; + gfc_ss *ss; + gfc_ss_info *info; + stmtblock_t block; + int n; + bool scalar_mold; + + info = NULL; + if (se->loop) + info = &se->ss->data.info; + + /* Convert SOURCE. The output from this stage is:- + source_bytes = length of the source in bytes + source = pointer to the source data. */ + arg = expr->value.function.actual; + + /* Ensure double transfer through LOGICAL preserves all + the needed bits. */ + if (arg->expr->expr_type == EXPR_FUNCTION + && arg->expr->value.function.esym == NULL + && arg->expr->value.function.isym != NULL + && arg->expr->value.function.isym->id == GFC_ISYM_TRANSFER + && arg->expr->ts.type == BT_LOGICAL + && expr->ts.type != arg->expr->ts.type) + arg->expr->value.function.name = "__transfer_in_transfer"; + + gfc_init_se (&argse, NULL); + ss = gfc_walk_expr (arg->expr); + + source_bytes = gfc_create_var (gfc_array_index_type, NULL); + + /* Obtain the pointer to source and the length of source in bytes. */ + if (ss == gfc_ss_terminator) + { + gfc_conv_expr_reference (&argse, arg->expr); + source = argse.expr; + + source_type = TREE_TYPE (build_fold_indirect_ref (argse.expr)); + + /* Obtain the source word length. */ + if (arg->expr->ts.type == BT_CHARACTER) + tmp = size_of_string_in_bytes (arg->expr->ts.kind, + argse.string_length); + else + tmp = fold_convert (gfc_array_index_type, + size_in_bytes (source_type)); + } + else + { + argse.want_pointer = 0; + gfc_conv_expr_descriptor (&argse, arg->expr, ss); + source = gfc_conv_descriptor_data_get (argse.expr); + source_type = gfc_get_element_type (TREE_TYPE (argse.expr)); + + /* Repack the source if not a full variable array. */ + if (arg->expr->expr_type == EXPR_VARIABLE + && arg->expr->ref->u.ar.type != AR_FULL) + { + tmp = build_fold_addr_expr (argse.expr); + + if (gfc_option.warn_array_temp) + gfc_warning ("Creating array temporary at %L", &expr->where); + + source = build_call_expr (gfor_fndecl_in_pack, 1, tmp); + source = gfc_evaluate_now (source, &argse.pre); + + /* Free the temporary. */ + gfc_start_block (&block); + tmp = gfc_call_free (convert (pvoid_type_node, source)); + gfc_add_expr_to_block (&block, tmp); + stmt = gfc_finish_block (&block); + + /* Clean up if it was repacked. */ + gfc_init_block (&block); + tmp = gfc_conv_array_data (argse.expr); + tmp = fold_build2 (NE_EXPR, boolean_type_node, source, tmp); + tmp = build3_v (COND_EXPR, tmp, stmt, build_empty_stmt ()); + gfc_add_expr_to_block (&block, tmp); + gfc_add_block_to_block (&block, &se->post); + gfc_init_block (&se->post); + gfc_add_block_to_block (&se->post, &block); + } + + /* Obtain the source word length. */ + if (arg->expr->ts.type == BT_CHARACTER) + tmp = size_of_string_in_bytes (arg->expr->ts.kind, + argse.string_length); + else + tmp = fold_convert (gfc_array_index_type, + size_in_bytes (source_type)); + + /* Obtain the size of the array in bytes. */ + extent = gfc_create_var (gfc_array_index_type, NULL); + for (n = 0; n < arg->expr->rank; n++) + { + tree idx; + idx = gfc_rank_cst[n]; + gfc_add_modify (&argse.pre, source_bytes, tmp); + stride = gfc_conv_descriptor_stride (argse.expr, idx); + lower = gfc_conv_descriptor_lbound (argse.expr, idx); + upper = gfc_conv_descriptor_ubound (argse.expr, idx); + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + upper, lower); + gfc_add_modify (&argse.pre, extent, tmp); + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + extent, gfc_index_one_node); + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, + tmp, source_bytes); + } + } + + gfc_add_modify (&argse.pre, source_bytes, tmp); + gfc_add_block_to_block (&se->pre, &argse.pre); + gfc_add_block_to_block (&se->post, &argse.post); + + /* Now convert MOLD. The outputs are: + mold_type = the TREE type of MOLD + dest_word_len = destination word length in bytes. */ + arg = arg->next; + + gfc_init_se (&argse, NULL); + ss = gfc_walk_expr (arg->expr); + + scalar_mold = arg->expr->rank == 0; + + if (ss == gfc_ss_terminator) + { + gfc_conv_expr_reference (&argse, arg->expr); + mold_type = TREE_TYPE (build_fold_indirect_ref (argse.expr)); + } + else + { + gfc_init_se (&argse, NULL); + argse.want_pointer = 0; + gfc_conv_expr_descriptor (&argse, arg->expr, ss); + mold_type = gfc_get_element_type (TREE_TYPE (argse.expr)); + } + + gfc_add_block_to_block (&se->pre, &argse.pre); + gfc_add_block_to_block (&se->post, &argse.post); + + if (strcmp (expr->value.function.name, "__transfer_in_transfer") == 0) + { + /* If this TRANSFER is nested in another TRANSFER, use a type + that preserves all bits. */ + if (arg->expr->ts.type == BT_LOGICAL) + mold_type = gfc_get_int_type (arg->expr->ts.kind); + } + + if (arg->expr->ts.type == BT_CHARACTER) + { + tmp = size_of_string_in_bytes (arg->expr->ts.kind, argse.string_length); + mold_type = gfc_get_character_type_len (arg->expr->ts.kind, tmp); + } + else + tmp = fold_convert (gfc_array_index_type, + size_in_bytes (mold_type)); + + dest_word_len = gfc_create_var (gfc_array_index_type, NULL); + gfc_add_modify (&se->pre, dest_word_len, tmp); + + /* Finally convert SIZE, if it is present. */ + arg = arg->next; + size_words = gfc_create_var (gfc_array_index_type, NULL); + + if (arg->expr) + { + gfc_init_se (&argse, NULL); + gfc_conv_expr_reference (&argse, arg->expr); + tmp = convert (gfc_array_index_type, + build_fold_indirect_ref (argse.expr)); + gfc_add_block_to_block (&se->pre, &argse.pre); + gfc_add_block_to_block (&se->post, &argse.post); + } + else + tmp = NULL_TREE; + + /* Separate array and scalar results. */ + if (scalar_mold && tmp == NULL_TREE) + goto scalar_transfer; + + size_bytes = gfc_create_var (gfc_array_index_type, NULL); + if (tmp != NULL_TREE) + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, + tmp, dest_word_len); + else + tmp = source_bytes; + + gfc_add_modify (&se->pre, size_bytes, tmp); + gfc_add_modify (&se->pre, size_words, + fold_build2 (CEIL_DIV_EXPR, gfc_array_index_type, + size_bytes, dest_word_len)); + + /* Evaluate the bounds of the result. If the loop range exists, we have + to check if it is too large. If so, we modify loop->to be consistent + with min(size, size(source)). Otherwise, size is made consistent with + the loop range, so that the right number of bytes is transferred.*/ + n = se->loop->order[0]; + if (se->loop->to[n] != NULL_TREE) + { + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + se->loop->to[n], se->loop->from[n]); + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + tmp, gfc_index_one_node); + tmp = fold_build2 (MIN_EXPR, gfc_array_index_type, + tmp, size_words); + gfc_add_modify (&se->pre, size_words, tmp); + gfc_add_modify (&se->pre, size_bytes, + fold_build2 (MULT_EXPR, gfc_array_index_type, + size_words, dest_word_len)); + upper = fold_build2 (PLUS_EXPR, gfc_array_index_type, + size_words, se->loop->from[n]); + upper = fold_build2 (MINUS_EXPR, gfc_array_index_type, + upper, gfc_index_one_node); + } + else + { + upper = fold_build2 (MINUS_EXPR, gfc_array_index_type, + size_words, gfc_index_one_node); + se->loop->from[n] = gfc_index_zero_node; + } + + se->loop->to[n] = upper; + + /* Build a destination descriptor, using the pointer, source, as the + data field. */ + gfc_trans_create_temp_array (&se->pre, &se->post, se->loop, + info, mold_type, NULL_TREE, false, true, false, + &expr->where); + + /* Cast the pointer to the result. */ + tmp = gfc_conv_descriptor_data_get (info->descriptor); + tmp = fold_convert (pvoid_type_node, tmp); + + /* Use memcpy to do the transfer. */ + tmp = build_call_expr (built_in_decls[BUILT_IN_MEMCPY], + 3, + tmp, + fold_convert (pvoid_type_node, source), + fold_build2 (MIN_EXPR, gfc_array_index_type, + size_bytes, source_bytes)); + gfc_add_expr_to_block (&se->pre, tmp); + + se->expr = info->descriptor; + if (expr->ts.type == BT_CHARACTER) + se->string_length = dest_word_len; + + return; + +/* Deal with scalar results. */ +scalar_transfer: + extent = fold_build2 (MIN_EXPR, gfc_array_index_type, + dest_word_len, source_bytes); + + if (expr->ts.type == BT_CHARACTER) + { + tree direct; + tree indirect; + + ptr = convert (gfc_get_pchar_type (expr->ts.kind), source); + tmpdecl = gfc_create_var (gfc_get_pchar_type (expr->ts.kind), + "transfer"); + + /* If source is longer than the destination, use a pointer to + the source directly. */ + gfc_init_block (&block); + gfc_add_modify (&block, tmpdecl, ptr); + direct = gfc_finish_block (&block); + + /* Otherwise, allocate a string with the length of the destination + and copy the source into it. */ + gfc_init_block (&block); + tmp = gfc_get_pchar_type (expr->ts.kind); + tmp = gfc_call_malloc (&block, tmp, dest_word_len); + gfc_add_modify (&block, tmpdecl, + fold_convert (TREE_TYPE (ptr), tmp)); + tmp = build_call_expr (built_in_decls[BUILT_IN_MEMCPY], 3, + fold_convert (pvoid_type_node, tmpdecl), + fold_convert (pvoid_type_node, ptr), + extent); + gfc_add_expr_to_block (&block, tmp); + indirect = gfc_finish_block (&block); + + /* Wrap it up with the condition. */ + tmp = fold_build2 (LE_EXPR, boolean_type_node, + dest_word_len, source_bytes); + tmp = build3_v (COND_EXPR, tmp, direct, indirect); + gfc_add_expr_to_block (&se->pre, tmp); + + se->expr = tmpdecl; + se->string_length = dest_word_len; + } + else + { + tmpdecl = gfc_create_var (mold_type, "transfer"); + + ptr = convert (build_pointer_type (mold_type), source); + + /* Use memcpy to do the transfer. */ + tmp = build_fold_addr_expr (tmpdecl); + tmp = build_call_expr (built_in_decls[BUILT_IN_MEMCPY], 3, + fold_convert (pvoid_type_node, tmp), + fold_convert (pvoid_type_node, ptr), + extent); + gfc_add_expr_to_block (&se->pre, tmp); + + se->expr = tmpdecl; + } +} + + +/* Generate code for the ALLOCATED intrinsic. + Generate inline code that directly check the address of the argument. */ + +static void +gfc_conv_allocated (gfc_se *se, gfc_expr *expr) +{ + gfc_actual_arglist *arg1; + gfc_se arg1se; + gfc_ss *ss1; + tree tmp; + + gfc_init_se (&arg1se, NULL); + arg1 = expr->value.function.actual; + ss1 = gfc_walk_expr (arg1->expr); + arg1se.descriptor_only = 1; + gfc_conv_expr_descriptor (&arg1se, arg1->expr, ss1); + + tmp = gfc_conv_descriptor_data_get (arg1se.expr); + tmp = fold_build2 (NE_EXPR, boolean_type_node, + tmp, fold_convert (TREE_TYPE (tmp), null_pointer_node)); + se->expr = convert (gfc_typenode_for_spec (&expr->ts), tmp); +} + + +/* Generate code for the ASSOCIATED intrinsic. + If both POINTER and TARGET are arrays, generate a call to library function + _gfor_associated, and pass descriptors of POINTER and TARGET to it. + In other cases, generate inline code that directly compare the address of + POINTER with the address of TARGET. */ + +static void +gfc_conv_associated (gfc_se *se, gfc_expr *expr) +{ + gfc_actual_arglist *arg1; + gfc_actual_arglist *arg2; + gfc_se arg1se; + gfc_se arg2se; + tree tmp2; + tree tmp; + tree nonzero_charlen; + tree nonzero_arraylen; + gfc_ss *ss1, *ss2; + + gfc_init_se (&arg1se, NULL); + gfc_init_se (&arg2se, NULL); + arg1 = expr->value.function.actual; + arg2 = arg1->next; + ss1 = gfc_walk_expr (arg1->expr); + + if (!arg2->expr) + { + /* No optional target. */ + if (ss1 == gfc_ss_terminator) + { + /* A pointer to a scalar. */ + arg1se.want_pointer = 1; + gfc_conv_expr (&arg1se, arg1->expr); + tmp2 = arg1se.expr; + } + else + { + /* A pointer to an array. */ + gfc_conv_expr_descriptor (&arg1se, arg1->expr, ss1); + tmp2 = gfc_conv_descriptor_data_get (arg1se.expr); + } + gfc_add_block_to_block (&se->pre, &arg1se.pre); + gfc_add_block_to_block (&se->post, &arg1se.post); + tmp = fold_build2 (NE_EXPR, boolean_type_node, tmp2, + fold_convert (TREE_TYPE (tmp2), null_pointer_node)); + se->expr = tmp; + } + else + { + /* An optional target. */ + ss2 = gfc_walk_expr (arg2->expr); + + nonzero_charlen = NULL_TREE; + if (arg1->expr->ts.type == BT_CHARACTER) + nonzero_charlen = fold_build2 (NE_EXPR, boolean_type_node, + arg1->expr->ts.cl->backend_decl, + integer_zero_node); + + if (ss1 == gfc_ss_terminator) + { + /* A pointer to a scalar. */ + gcc_assert (ss2 == gfc_ss_terminator); + arg1se.want_pointer = 1; + gfc_conv_expr (&arg1se, arg1->expr); + arg2se.want_pointer = 1; + gfc_conv_expr (&arg2se, arg2->expr); + gfc_add_block_to_block (&se->pre, &arg1se.pre); + gfc_add_block_to_block (&se->post, &arg1se.post); + tmp = fold_build2 (EQ_EXPR, boolean_type_node, + arg1se.expr, arg2se.expr); + tmp2 = fold_build2 (NE_EXPR, boolean_type_node, + arg1se.expr, null_pointer_node); + se->expr = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, + tmp, tmp2); + } + else + { + /* An array pointer of zero length is not associated if target is + present. */ + arg1se.descriptor_only = 1; + gfc_conv_expr_lhs (&arg1se, arg1->expr); + tmp = gfc_conv_descriptor_stride (arg1se.expr, + gfc_rank_cst[arg1->expr->rank - 1]); + nonzero_arraylen = fold_build2 (NE_EXPR, boolean_type_node, tmp, + build_int_cst (TREE_TYPE (tmp), 0)); + + /* A pointer to an array, call library function _gfor_associated. */ + gcc_assert (ss2 != gfc_ss_terminator); + arg1se.want_pointer = 1; + gfc_conv_expr_descriptor (&arg1se, arg1->expr, ss1); + + arg2se.want_pointer = 1; + gfc_conv_expr_descriptor (&arg2se, arg2->expr, ss2); + gfc_add_block_to_block (&se->pre, &arg2se.pre); + gfc_add_block_to_block (&se->post, &arg2se.post); + se->expr = build_call_expr (gfor_fndecl_associated, 2, + arg1se.expr, arg2se.expr); + se->expr = convert (boolean_type_node, se->expr); + se->expr = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, + se->expr, nonzero_arraylen); + } + + /* If target is present zero character length pointers cannot + be associated. */ + if (nonzero_charlen != NULL_TREE) + se->expr = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, + se->expr, nonzero_charlen); + } + + se->expr = convert (gfc_typenode_for_spec (&expr->ts), se->expr); +} + + +/* Generate code for SELECTED_CHAR_KIND (NAME) intrinsic function. */ + +static void +gfc_conv_intrinsic_sc_kind (gfc_se *se, gfc_expr *expr) +{ + tree args[2]; + + gfc_conv_intrinsic_function_args (se, expr, args, 2); + se->expr = build_call_expr (gfor_fndecl_sc_kind, 2, args[0], args[1]); + se->expr = fold_convert (gfc_typenode_for_spec (&expr->ts), se->expr); +} + + +/* Generate code for SELECTED_INT_KIND (R) intrinsic function. */ + +static void +gfc_conv_intrinsic_si_kind (gfc_se *se, gfc_expr *expr) +{ + tree arg, type; + + gfc_conv_intrinsic_function_args (se, expr, &arg, 1); + + /* The argument to SELECTED_INT_KIND is INTEGER(4). */ + type = gfc_get_int_type (4); + arg = build_fold_addr_expr (fold_convert (type, arg)); + + /* Convert it to the required type. */ + type = gfc_typenode_for_spec (&expr->ts); + se->expr = build_call_expr (gfor_fndecl_si_kind, 1, arg); + se->expr = fold_convert (type, se->expr); +} + + +/* Generate code for SELECTED_REAL_KIND (P, R) intrinsic function. */ + +static void +gfc_conv_intrinsic_sr_kind (gfc_se *se, gfc_expr *expr) +{ + gfc_actual_arglist *actual; + tree args, type; + gfc_se argse; + + args = NULL_TREE; + for (actual = expr->value.function.actual; actual; actual = actual->next) + { + gfc_init_se (&argse, se); + + /* Pass a NULL pointer for an absent arg. */ + if (actual->expr == NULL) + argse.expr = null_pointer_node; + else + { + gfc_typespec ts; + gfc_clear_ts (&ts); + + if (actual->expr->ts.kind != gfc_c_int_kind) + { + /* The arguments to SELECTED_REAL_KIND are INTEGER(4). */ + ts.type = BT_INTEGER; + ts.kind = gfc_c_int_kind; + gfc_convert_type (actual->expr, &ts, 2); + } + gfc_conv_expr_reference (&argse, actual->expr); + } + + gfc_add_block_to_block (&se->pre, &argse.pre); + gfc_add_block_to_block (&se->post, &argse.post); + args = gfc_chainon_list (args, argse.expr); + } + + /* Convert it to the required type. */ + type = gfc_typenode_for_spec (&expr->ts); + se->expr = build_function_call_expr (gfor_fndecl_sr_kind, args); + se->expr = fold_convert (type, se->expr); +} + + +/* Generate code for TRIM (A) intrinsic function. */ + +static void +gfc_conv_intrinsic_trim (gfc_se * se, gfc_expr * expr) +{ + tree var; + tree len; + tree addr; + tree tmp; + tree cond; + tree fndecl; + tree function; + tree *args; + unsigned int num_args; + + num_args = gfc_intrinsic_argument_list_length (expr) + 2; + args = (tree *) alloca (sizeof (tree) * num_args); + + var = gfc_create_var (gfc_get_pchar_type (expr->ts.kind), "pstr"); + addr = gfc_build_addr_expr (ppvoid_type_node, var); + len = gfc_create_var (gfc_get_int_type (4), "len"); + + gfc_conv_intrinsic_function_args (se, expr, &args[2], num_args - 2); + args[0] = build_fold_addr_expr (len); + args[1] = addr; + + if (expr->ts.kind == 1) + function = gfor_fndecl_string_trim; + else if (expr->ts.kind == 4) + function = gfor_fndecl_string_trim_char4; + else + gcc_unreachable (); + + fndecl = build_addr (function, current_function_decl); + tmp = build_call_array (TREE_TYPE (TREE_TYPE (function)), fndecl, + num_args, args); + gfc_add_expr_to_block (&se->pre, tmp); + + /* Free the temporary afterwards, if necessary. */ + cond = fold_build2 (GT_EXPR, boolean_type_node, + len, build_int_cst (TREE_TYPE (len), 0)); + tmp = gfc_call_free (var); + tmp = build3_v (COND_EXPR, cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&se->post, tmp); + + se->expr = var; + se->string_length = len; +} + + +/* Generate code for REPEAT (STRING, NCOPIES) intrinsic function. */ + +static void +gfc_conv_intrinsic_repeat (gfc_se * se, gfc_expr * expr) +{ + tree args[3], ncopies, dest, dlen, src, slen, ncopies_type; + tree type, cond, tmp, count, exit_label, n, max, largest; + tree size; + stmtblock_t block, body; + int i; + + /* We store in charsize the size of a character. */ + i = gfc_validate_kind (BT_CHARACTER, expr->ts.kind, false); + size = build_int_cst (size_type_node, gfc_character_kinds[i].bit_size / 8); + + /* Get the arguments. */ + gfc_conv_intrinsic_function_args (se, expr, args, 3); + slen = fold_convert (size_type_node, gfc_evaluate_now (args[0], &se->pre)); + src = args[1]; + ncopies = gfc_evaluate_now (args[2], &se->pre); + ncopies_type = TREE_TYPE (ncopies); + + /* Check that NCOPIES is not negative. */ + cond = fold_build2 (LT_EXPR, boolean_type_node, ncopies, + build_int_cst (ncopies_type, 0)); + gfc_trans_runtime_check (true, false, cond, &se->pre, &expr->where, + "Argument NCOPIES of REPEAT intrinsic is negative " + "(its value is %lld)", + fold_convert (long_integer_type_node, ncopies)); + + /* If the source length is zero, any non negative value of NCOPIES + is valid, and nothing happens. */ + n = gfc_create_var (ncopies_type, "ncopies"); + cond = fold_build2 (EQ_EXPR, boolean_type_node, slen, + build_int_cst (size_type_node, 0)); + tmp = fold_build3 (COND_EXPR, ncopies_type, cond, + build_int_cst (ncopies_type, 0), ncopies); + gfc_add_modify (&se->pre, n, tmp); + ncopies = n; + + /* Check that ncopies is not too large: ncopies should be less than + (or equal to) MAX / slen, where MAX is the maximal integer of + the gfc_charlen_type_node type. If slen == 0, we need a special + case to avoid the division by zero. */ + i = gfc_validate_kind (BT_INTEGER, gfc_charlen_int_kind, false); + max = gfc_conv_mpz_to_tree (gfc_integer_kinds[i].huge, gfc_charlen_int_kind); + max = fold_build2 (TRUNC_DIV_EXPR, size_type_node, + fold_convert (size_type_node, max), slen); + largest = TYPE_PRECISION (size_type_node) > TYPE_PRECISION (ncopies_type) + ? size_type_node : ncopies_type; + cond = fold_build2 (GT_EXPR, boolean_type_node, + fold_convert (largest, ncopies), + fold_convert (largest, max)); + tmp = fold_build2 (EQ_EXPR, boolean_type_node, slen, + build_int_cst (size_type_node, 0)); + cond = fold_build3 (COND_EXPR, boolean_type_node, tmp, boolean_false_node, + cond); + gfc_trans_runtime_check (true, false, cond, &se->pre, &expr->where, + "Argument NCOPIES of REPEAT intrinsic is too large"); + + /* Compute the destination length. */ + dlen = fold_build2 (MULT_EXPR, gfc_charlen_type_node, + fold_convert (gfc_charlen_type_node, slen), + fold_convert (gfc_charlen_type_node, ncopies)); + type = gfc_get_character_type (expr->ts.kind, expr->ts.cl); + dest = gfc_conv_string_tmp (se, build_pointer_type (type), dlen); + + /* Generate the code to do the repeat operation: + for (i = 0; i < ncopies; i++) + memmove (dest + (i * slen * size), src, slen*size); */ + gfc_start_block (&block); + count = gfc_create_var (ncopies_type, "count"); + gfc_add_modify (&block, count, build_int_cst (ncopies_type, 0)); + exit_label = gfc_build_label_decl (NULL_TREE); + + /* Start the loop body. */ + gfc_start_block (&body); + + /* Exit the loop if count >= ncopies. */ + cond = fold_build2 (GE_EXPR, boolean_type_node, count, ncopies); + tmp = build1_v (GOTO_EXPR, exit_label); + TREE_USED (exit_label) = 1; + tmp = fold_build3 (COND_EXPR, void_type_node, cond, tmp, + build_empty_stmt ()); + gfc_add_expr_to_block (&body, tmp); + + /* Call memmove (dest + (i*slen*size), src, slen*size). */ + tmp = fold_build2 (MULT_EXPR, gfc_charlen_type_node, + fold_convert (gfc_charlen_type_node, slen), + fold_convert (gfc_charlen_type_node, count)); + tmp = fold_build2 (MULT_EXPR, gfc_charlen_type_node, + tmp, fold_convert (gfc_charlen_type_node, size)); + tmp = fold_build2 (POINTER_PLUS_EXPR, pvoid_type_node, + fold_convert (pvoid_type_node, dest), + fold_convert (sizetype, tmp)); + tmp = build_call_expr (built_in_decls[BUILT_IN_MEMMOVE], 3, tmp, src, + fold_build2 (MULT_EXPR, size_type_node, slen, + fold_convert (size_type_node, size))); + gfc_add_expr_to_block (&body, tmp); + + /* Increment count. */ + tmp = fold_build2 (PLUS_EXPR, ncopies_type, + count, build_int_cst (TREE_TYPE (count), 1)); + gfc_add_modify (&body, count, tmp); + + /* Build the loop. */ + tmp = build1_v (LOOP_EXPR, gfc_finish_block (&body)); + gfc_add_expr_to_block (&block, tmp); + + /* Add the exit label. */ + tmp = build1_v (LABEL_EXPR, exit_label); + gfc_add_expr_to_block (&block, tmp); + + /* Finish the block. */ + tmp = gfc_finish_block (&block); + gfc_add_expr_to_block (&se->pre, tmp); + + /* Set the result value. */ + se->expr = dest; + se->string_length = dlen; +} + + +/* Generate code for the IARGC intrinsic. */ + +static void +gfc_conv_intrinsic_iargc (gfc_se * se, gfc_expr * expr) +{ + tree tmp; + tree fndecl; + tree type; + + /* Call the library function. This always returns an INTEGER(4). */ + fndecl = gfor_fndecl_iargc; + tmp = build_call_expr (fndecl, 0); + + /* Convert it to the required type. */ + type = gfc_typenode_for_spec (&expr->ts); + tmp = fold_convert (type, tmp); + + se->expr = tmp; +} + + +/* The loc intrinsic returns the address of its argument as + gfc_index_integer_kind integer. */ + +static void +gfc_conv_intrinsic_loc (gfc_se * se, gfc_expr * expr) +{ + tree temp_var; + gfc_expr *arg_expr; + gfc_ss *ss; + + gcc_assert (!se->ss); + + arg_expr = expr->value.function.actual->expr; + ss = gfc_walk_expr (arg_expr); + if (ss == gfc_ss_terminator) + gfc_conv_expr_reference (se, arg_expr); + else + gfc_conv_array_parameter (se, arg_expr, ss, 1, NULL, NULL); + se->expr= convert (gfc_get_int_type (gfc_index_integer_kind), se->expr); + + /* Create a temporary variable for loc return value. Without this, + we get an error an ICE in gcc/expr.c(expand_expr_addr_expr_1). */ + temp_var = gfc_create_var (gfc_get_int_type (gfc_index_integer_kind), NULL); + gfc_add_modify (&se->pre, temp_var, se->expr); + se->expr = temp_var; +} + +/* Generate code for an intrinsic function. Some map directly to library + calls, others get special handling. In some cases the name of the function + used depends on the type specifiers. */ + +void +gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) +{ + gfc_intrinsic_sym *isym; + const char *name; + int lib, kind; + tree fndecl; + + isym = expr->value.function.isym; + + name = &expr->value.function.name[2]; + + if (expr->rank > 0 && !expr->inline_noncopying_intrinsic) + { + lib = gfc_is_intrinsic_libcall (expr); + if (lib != 0) + { + if (lib == 1) + se->ignore_optional = 1; + + switch (expr->value.function.isym->id) + { + case GFC_ISYM_EOSHIFT: + case GFC_ISYM_PACK: + case GFC_ISYM_RESHAPE: + /* For all of those the first argument specifies the type and the + third is optional. */ + conv_generic_with_optional_char_arg (se, expr, 1, 3); + break; + + default: + gfc_conv_intrinsic_funcall (se, expr); + break; + } + + return; + } + } + + switch (expr->value.function.isym->id) + { + case GFC_ISYM_NONE: + gcc_unreachable (); + + case GFC_ISYM_REPEAT: + gfc_conv_intrinsic_repeat (se, expr); + break; + + case GFC_ISYM_TRIM: + gfc_conv_intrinsic_trim (se, expr); + break; + + case GFC_ISYM_SC_KIND: + gfc_conv_intrinsic_sc_kind (se, expr); + break; + + case GFC_ISYM_SI_KIND: + gfc_conv_intrinsic_si_kind (se, expr); + break; + + case GFC_ISYM_SR_KIND: + gfc_conv_intrinsic_sr_kind (se, expr); + break; + + case GFC_ISYM_EXPONENT: + gfc_conv_intrinsic_exponent (se, expr); + break; + + case GFC_ISYM_SCAN: + kind = expr->value.function.actual->expr->ts.kind; + if (kind == 1) + fndecl = gfor_fndecl_string_scan; + else if (kind == 4) + fndecl = gfor_fndecl_string_scan_char4; + else + gcc_unreachable (); + + gfc_conv_intrinsic_index_scan_verify (se, expr, fndecl); + break; + + case GFC_ISYM_VERIFY: + kind = expr->value.function.actual->expr->ts.kind; + if (kind == 1) + fndecl = gfor_fndecl_string_verify; + else if (kind == 4) + fndecl = gfor_fndecl_string_verify_char4; + else + gcc_unreachable (); + + gfc_conv_intrinsic_index_scan_verify (se, expr, fndecl); + break; + + case GFC_ISYM_ALLOCATED: + gfc_conv_allocated (se, expr); + break; + + case GFC_ISYM_ASSOCIATED: + gfc_conv_associated(se, expr); + break; + + case GFC_ISYM_ABS: + gfc_conv_intrinsic_abs (se, expr); + break; + + case GFC_ISYM_ADJUSTL: + if (expr->ts.kind == 1) + fndecl = gfor_fndecl_adjustl; + else if (expr->ts.kind == 4) + fndecl = gfor_fndecl_adjustl_char4; + else + gcc_unreachable (); + + gfc_conv_intrinsic_adjust (se, expr, fndecl); + break; + + case GFC_ISYM_ADJUSTR: + if (expr->ts.kind == 1) + fndecl = gfor_fndecl_adjustr; + else if (expr->ts.kind == 4) + fndecl = gfor_fndecl_adjustr_char4; + else + gcc_unreachable (); + + gfc_conv_intrinsic_adjust (se, expr, fndecl); + break; + + case GFC_ISYM_AIMAG: + gfc_conv_intrinsic_imagpart (se, expr); + break; + + case GFC_ISYM_AINT: + gfc_conv_intrinsic_aint (se, expr, RND_TRUNC); + break; + + case GFC_ISYM_ALL: + gfc_conv_intrinsic_anyall (se, expr, EQ_EXPR); + break; + + case GFC_ISYM_ANINT: + gfc_conv_intrinsic_aint (se, expr, RND_ROUND); + break; + + case GFC_ISYM_AND: + gfc_conv_intrinsic_bitop (se, expr, BIT_AND_EXPR); + break; + + case GFC_ISYM_ANY: + gfc_conv_intrinsic_anyall (se, expr, NE_EXPR); + break; + + case GFC_ISYM_BTEST: + gfc_conv_intrinsic_btest (se, expr); + break; + + case GFC_ISYM_ACHAR: + case GFC_ISYM_CHAR: + gfc_conv_intrinsic_char (se, expr); + break; + + case GFC_ISYM_CONVERSION: + case GFC_ISYM_REAL: + case GFC_ISYM_LOGICAL: + case GFC_ISYM_DBLE: + gfc_conv_intrinsic_conversion (se, expr); + break; + + /* Integer conversions are handled separately to make sure we get the + correct rounding mode. */ + case GFC_ISYM_INT: + case GFC_ISYM_INT2: + case GFC_ISYM_INT8: + case GFC_ISYM_LONG: + gfc_conv_intrinsic_int (se, expr, RND_TRUNC); + break; + + case GFC_ISYM_NINT: + gfc_conv_intrinsic_int (se, expr, RND_ROUND); + break; + + case GFC_ISYM_CEILING: + gfc_conv_intrinsic_int (se, expr, RND_CEIL); + break; + + case GFC_ISYM_FLOOR: + gfc_conv_intrinsic_int (se, expr, RND_FLOOR); + break; + + case GFC_ISYM_MOD: + gfc_conv_intrinsic_mod (se, expr, 0); + break; + + case GFC_ISYM_MODULO: + gfc_conv_intrinsic_mod (se, expr, 1); + break; + + case GFC_ISYM_CMPLX: + gfc_conv_intrinsic_cmplx (se, expr, name[5] == '1'); + break; + + case GFC_ISYM_COMMAND_ARGUMENT_COUNT: + gfc_conv_intrinsic_iargc (se, expr); + break; + + case GFC_ISYM_COMPLEX: + gfc_conv_intrinsic_cmplx (se, expr, 1); + break; + + case GFC_ISYM_CONJG: + gfc_conv_intrinsic_conjg (se, expr); + break; + + case GFC_ISYM_COUNT: + gfc_conv_intrinsic_count (se, expr); + break; + + case GFC_ISYM_CTIME: + gfc_conv_intrinsic_ctime (se, expr); + break; + + case GFC_ISYM_DIM: + gfc_conv_intrinsic_dim (se, expr); + break; + + case GFC_ISYM_DOT_PRODUCT: + gfc_conv_intrinsic_dot_product (se, expr); + break; + + case GFC_ISYM_DPROD: + gfc_conv_intrinsic_dprod (se, expr); + break; + + case GFC_ISYM_FDATE: + gfc_conv_intrinsic_fdate (se, expr); + break; + + case GFC_ISYM_FRACTION: + gfc_conv_intrinsic_fraction (se, expr); + break; + + case GFC_ISYM_IAND: + gfc_conv_intrinsic_bitop (se, expr, BIT_AND_EXPR); + break; + + case GFC_ISYM_IBCLR: + gfc_conv_intrinsic_singlebitop (se, expr, 0); + break; + + case GFC_ISYM_IBITS: + gfc_conv_intrinsic_ibits (se, expr); + break; + + case GFC_ISYM_IBSET: + gfc_conv_intrinsic_singlebitop (se, expr, 1); + break; + + case GFC_ISYM_IACHAR: + case GFC_ISYM_ICHAR: + /* We assume ASCII character sequence. */ + gfc_conv_intrinsic_ichar (se, expr); + break; + + case GFC_ISYM_IARGC: + gfc_conv_intrinsic_iargc (se, expr); + break; + + case GFC_ISYM_IEOR: + gfc_conv_intrinsic_bitop (se, expr, BIT_XOR_EXPR); + break; + + case GFC_ISYM_INDEX: + kind = expr->value.function.actual->expr->ts.kind; + if (kind == 1) + fndecl = gfor_fndecl_string_index; + else if (kind == 4) + fndecl = gfor_fndecl_string_index_char4; + else + gcc_unreachable (); + + gfc_conv_intrinsic_index_scan_verify (se, expr, fndecl); + break; + + case GFC_ISYM_IOR: + gfc_conv_intrinsic_bitop (se, expr, BIT_IOR_EXPR); + break; + + case GFC_ISYM_IS_IOSTAT_END: + gfc_conv_has_intvalue (se, expr, LIBERROR_END); + break; + + case GFC_ISYM_IS_IOSTAT_EOR: + gfc_conv_has_intvalue (se, expr, LIBERROR_EOR); + break; + + case GFC_ISYM_ISNAN: + gfc_conv_intrinsic_isnan (se, expr); + break; + + case GFC_ISYM_LSHIFT: + gfc_conv_intrinsic_rlshift (se, expr, 0); + break; + + case GFC_ISYM_RSHIFT: + gfc_conv_intrinsic_rlshift (se, expr, 1); + break; + + case GFC_ISYM_ISHFT: + gfc_conv_intrinsic_ishft (se, expr); + break; + + case GFC_ISYM_ISHFTC: + gfc_conv_intrinsic_ishftc (se, expr); + break; + + case GFC_ISYM_LEADZ: + gfc_conv_intrinsic_leadz (se, expr); + break; + + case GFC_ISYM_TRAILZ: + gfc_conv_intrinsic_trailz (se, expr); + break; + + case GFC_ISYM_LBOUND: + gfc_conv_intrinsic_bound (se, expr, 0); + break; + + case GFC_ISYM_TRANSPOSE: + if (se->ss && se->ss->useflags) + { + gfc_conv_tmp_array_ref (se); + gfc_advance_se_ss_chain (se); + } + else + gfc_conv_array_transpose (se, expr->value.function.actual->expr); + break; + + case GFC_ISYM_LEN: + gfc_conv_intrinsic_len (se, expr); + break; + + case GFC_ISYM_LEN_TRIM: + gfc_conv_intrinsic_len_trim (se, expr); + break; + + case GFC_ISYM_LGE: + gfc_conv_intrinsic_strcmp (se, expr, GE_EXPR); + break; + + case GFC_ISYM_LGT: + gfc_conv_intrinsic_strcmp (se, expr, GT_EXPR); + break; + + case GFC_ISYM_LLE: + gfc_conv_intrinsic_strcmp (se, expr, LE_EXPR); + break; + + case GFC_ISYM_LLT: + gfc_conv_intrinsic_strcmp (se, expr, LT_EXPR); + break; + + case GFC_ISYM_MAX: + if (expr->ts.type == BT_CHARACTER) + gfc_conv_intrinsic_minmax_char (se, expr, 1); + else + gfc_conv_intrinsic_minmax (se, expr, GT_EXPR); + break; + + case GFC_ISYM_MAXLOC: + gfc_conv_intrinsic_minmaxloc (se, expr, GT_EXPR); + break; + + case GFC_ISYM_MAXVAL: + gfc_conv_intrinsic_minmaxval (se, expr, GT_EXPR); + break; + + case GFC_ISYM_MERGE: + gfc_conv_intrinsic_merge (se, expr); + break; + + case GFC_ISYM_MIN: + if (expr->ts.type == BT_CHARACTER) + gfc_conv_intrinsic_minmax_char (se, expr, -1); + else + gfc_conv_intrinsic_minmax (se, expr, LT_EXPR); + break; + + case GFC_ISYM_MINLOC: + gfc_conv_intrinsic_minmaxloc (se, expr, LT_EXPR); + break; + + case GFC_ISYM_MINVAL: + gfc_conv_intrinsic_minmaxval (se, expr, LT_EXPR); + break; + + case GFC_ISYM_NEAREST: + gfc_conv_intrinsic_nearest (se, expr); + break; + + case GFC_ISYM_NOT: + gfc_conv_intrinsic_not (se, expr); + break; + + case GFC_ISYM_OR: + gfc_conv_intrinsic_bitop (se, expr, BIT_IOR_EXPR); + break; + + case GFC_ISYM_PRESENT: + gfc_conv_intrinsic_present (se, expr); + break; + + case GFC_ISYM_PRODUCT: + gfc_conv_intrinsic_arith (se, expr, MULT_EXPR); + break; + + case GFC_ISYM_RRSPACING: + gfc_conv_intrinsic_rrspacing (se, expr); + break; + + case GFC_ISYM_SET_EXPONENT: + gfc_conv_intrinsic_set_exponent (se, expr); + break; + + case GFC_ISYM_SCALE: + gfc_conv_intrinsic_scale (se, expr); + break; + + case GFC_ISYM_SIGN: + gfc_conv_intrinsic_sign (se, expr); + break; + + case GFC_ISYM_SIZE: + gfc_conv_intrinsic_size (se, expr); + break; + + case GFC_ISYM_SIZEOF: + gfc_conv_intrinsic_sizeof (se, expr); + break; + + case GFC_ISYM_SPACING: + gfc_conv_intrinsic_spacing (se, expr); + break; + + case GFC_ISYM_SUM: + gfc_conv_intrinsic_arith (se, expr, PLUS_EXPR); + break; + + case GFC_ISYM_TRANSFER: + if (se->ss && se->ss->useflags) + { + /* Access the previously obtained result. */ + gfc_conv_tmp_array_ref (se); + gfc_advance_se_ss_chain (se); + } + else + gfc_conv_intrinsic_transfer (se, expr); + break; + + case GFC_ISYM_TTYNAM: + gfc_conv_intrinsic_ttynam (se, expr); + break; + + case GFC_ISYM_UBOUND: + gfc_conv_intrinsic_bound (se, expr, 1); + break; + + case GFC_ISYM_XOR: + gfc_conv_intrinsic_bitop (se, expr, BIT_XOR_EXPR); + break; + + case GFC_ISYM_LOC: + gfc_conv_intrinsic_loc (se, expr); + break; + + case GFC_ISYM_ACCESS: + case GFC_ISYM_CHDIR: + case GFC_ISYM_CHMOD: + case GFC_ISYM_DTIME: + case GFC_ISYM_ETIME: + case GFC_ISYM_FGET: + case GFC_ISYM_FGETC: + case GFC_ISYM_FNUM: + case GFC_ISYM_FPUT: + case GFC_ISYM_FPUTC: + case GFC_ISYM_FSTAT: + case GFC_ISYM_FTELL: + case GFC_ISYM_GETCWD: + case GFC_ISYM_GETGID: + case GFC_ISYM_GETPID: + case GFC_ISYM_GETUID: + case GFC_ISYM_HOSTNM: + case GFC_ISYM_KILL: + case GFC_ISYM_IERRNO: + case GFC_ISYM_IRAND: + case GFC_ISYM_ISATTY: + case GFC_ISYM_LINK: + case GFC_ISYM_LSTAT: + case GFC_ISYM_MALLOC: + case GFC_ISYM_MATMUL: + case GFC_ISYM_MCLOCK: + case GFC_ISYM_MCLOCK8: + case GFC_ISYM_RAND: + case GFC_ISYM_RENAME: + case GFC_ISYM_SECOND: + case GFC_ISYM_SECNDS: + case GFC_ISYM_SIGNAL: + case GFC_ISYM_STAT: + case GFC_ISYM_SYMLNK: + case GFC_ISYM_SYSTEM: + case GFC_ISYM_TIME: + case GFC_ISYM_TIME8: + case GFC_ISYM_UMASK: + case GFC_ISYM_UNLINK: + gfc_conv_intrinsic_funcall (se, expr); + break; + + case GFC_ISYM_EOSHIFT: + case GFC_ISYM_PACK: + case GFC_ISYM_RESHAPE: + /* For those, expr->rank should always be >0 and thus the if above the + switch should have matched. */ + gcc_unreachable (); + break; + + default: + gfc_conv_intrinsic_lib_function (se, expr); + break; + } +} + + +/* This generates code to execute before entering the scalarization loop. + Currently does nothing. */ + +void +gfc_add_intrinsic_ss_code (gfc_loopinfo * loop ATTRIBUTE_UNUSED, gfc_ss * ss) +{ + switch (ss->expr->value.function.isym->id) + { + case GFC_ISYM_UBOUND: + case GFC_ISYM_LBOUND: + break; + + default: + gcc_unreachable (); + } +} + + +/* UBOUND and LBOUND intrinsics with one parameter are expanded into code + inside the scalarization loop. */ + +static gfc_ss * +gfc_walk_intrinsic_bound (gfc_ss * ss, gfc_expr * expr) +{ + gfc_ss *newss; + + /* The two argument version returns a scalar. */ + if (expr->value.function.actual->next->expr) + return ss; + + newss = gfc_get_ss (); + newss->type = GFC_SS_INTRINSIC; + newss->expr = expr; + newss->next = ss; + newss->data.info.dimen = 1; + + return newss; +} + + +/* Walk an intrinsic array libcall. */ + +static gfc_ss * +gfc_walk_intrinsic_libfunc (gfc_ss * ss, gfc_expr * expr) +{ + gfc_ss *newss; + + gcc_assert (expr->rank > 0); + + newss = gfc_get_ss (); + newss->type = GFC_SS_FUNCTION; + newss->expr = expr; + newss->next = ss; + newss->data.info.dimen = expr->rank; + + return newss; +} + + +/* Returns nonzero if the specified intrinsic function call maps directly to + an external library call. Should only be used for functions that return + arrays. */ + +int +gfc_is_intrinsic_libcall (gfc_expr * expr) +{ + gcc_assert (expr->expr_type == EXPR_FUNCTION && expr->value.function.isym); + gcc_assert (expr->rank > 0); + + switch (expr->value.function.isym->id) + { + case GFC_ISYM_ALL: + case GFC_ISYM_ANY: + case GFC_ISYM_COUNT: + case GFC_ISYM_MATMUL: + case GFC_ISYM_MAXLOC: + case GFC_ISYM_MAXVAL: + case GFC_ISYM_MINLOC: + case GFC_ISYM_MINVAL: + case GFC_ISYM_PRODUCT: + case GFC_ISYM_SUM: + case GFC_ISYM_SHAPE: + case GFC_ISYM_SPREAD: + case GFC_ISYM_TRANSPOSE: + /* Ignore absent optional parameters. */ + return 1; + + case GFC_ISYM_RESHAPE: + case GFC_ISYM_CSHIFT: + case GFC_ISYM_EOSHIFT: + case GFC_ISYM_PACK: + case GFC_ISYM_UNPACK: + /* Pass absent optional parameters. */ + return 2; + + default: + return 0; + } +} + +/* Walk an intrinsic function. */ +gfc_ss * +gfc_walk_intrinsic_function (gfc_ss * ss, gfc_expr * expr, + gfc_intrinsic_sym * isym) +{ + gcc_assert (isym); + + if (isym->elemental) + return gfc_walk_elemental_function_args (ss, expr->value.function.actual, GFC_SS_SCALAR); + + if (expr->rank == 0) + return ss; + + if (gfc_is_intrinsic_libcall (expr)) + return gfc_walk_intrinsic_libfunc (ss, expr); + + /* Special cases. */ + switch (isym->id) + { + case GFC_ISYM_LBOUND: + case GFC_ISYM_UBOUND: + return gfc_walk_intrinsic_bound (ss, expr); + + case GFC_ISYM_TRANSFER: + return gfc_walk_intrinsic_libfunc (ss, expr); + + default: + /* This probably meant someone forgot to add an intrinsic to the above + list(s) when they implemented it, or something's gone horribly + wrong. */ + gcc_unreachable (); + } +} + +#include "gt-fortran-trans-intrinsic.h" diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-io.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-io.c new file mode 100644 index 0000000000..b5749ec89a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-io.c @@ -0,0 +1,2250 @@ +/* IO Code translation/library interface + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "gimple.h" +#include "ggc.h" +#include "toplev.h" +#include "real.h" +#include "gfortran.h" +#include "trans.h" +#include "trans-stmt.h" +#include "trans-array.h" +#include "trans-types.h" +#include "trans-const.h" + +/* Members of the ioparm structure. */ + +enum ioparam_type +{ + IOPARM_ptype_common, + IOPARM_ptype_open, + IOPARM_ptype_close, + IOPARM_ptype_filepos, + IOPARM_ptype_inquire, + IOPARM_ptype_dt, + IOPARM_ptype_wait, + IOPARM_ptype_num +}; + +enum iofield_type +{ + IOPARM_type_int4, + IOPARM_type_intio, + IOPARM_type_pint4, + IOPARM_type_pintio, + IOPARM_type_pchar, + IOPARM_type_parray, + IOPARM_type_pad, + IOPARM_type_char1, + IOPARM_type_char2, + IOPARM_type_common, + IOPARM_type_num +}; + +typedef struct gfc_st_parameter_field GTY(()) +{ + const char *name; + unsigned int mask; + enum ioparam_type param_type; + enum iofield_type type; + tree field; + tree field_len; +} +gfc_st_parameter_field; + +typedef struct gfc_st_parameter GTY(()) +{ + const char *name; + tree type; +} +gfc_st_parameter; + +enum iofield +{ +#define IOPARM(param_type, name, mask, type) IOPARM_##param_type##_##name, +#include "ioparm.def" +#undef IOPARM + IOPARM_field_num +}; + +static GTY(()) gfc_st_parameter st_parameter[] = +{ + { "common", NULL }, + { "open", NULL }, + { "close", NULL }, + { "filepos", NULL }, + { "inquire", NULL }, + { "dt", NULL }, + { "wait", NULL } +}; + +static GTY(()) gfc_st_parameter_field st_parameter_field[] = +{ +#define IOPARM(param_type, name, mask, type) \ + { #name, mask, IOPARM_ptype_##param_type, IOPARM_type_##type, NULL, NULL }, +#include "ioparm.def" +#undef IOPARM + { NULL, 0, 0, 0, NULL, NULL } +}; + +/* Library I/O subroutines */ + +enum iocall +{ + IOCALL_READ, + IOCALL_READ_DONE, + IOCALL_WRITE, + IOCALL_WRITE_DONE, + IOCALL_X_INTEGER, + IOCALL_X_LOGICAL, + IOCALL_X_CHARACTER, + IOCALL_X_CHARACTER_WIDE, + IOCALL_X_REAL, + IOCALL_X_COMPLEX, + IOCALL_X_ARRAY, + IOCALL_OPEN, + IOCALL_CLOSE, + IOCALL_INQUIRE, + IOCALL_IOLENGTH, + IOCALL_IOLENGTH_DONE, + IOCALL_REWIND, + IOCALL_BACKSPACE, + IOCALL_ENDFILE, + IOCALL_FLUSH, + IOCALL_SET_NML_VAL, + IOCALL_SET_NML_VAL_DIM, + IOCALL_WAIT, + IOCALL_NUM +}; + +static GTY(()) tree iocall[IOCALL_NUM]; + +/* Variable for keeping track of what the last data transfer statement + was. Used for deciding which subroutine to call when the data + transfer is complete. */ +static enum { READ, WRITE, IOLENGTH } last_dt; + +/* The data transfer parameter block that should be shared by all + data transfer calls belonging to the same read/write/iolength. */ +static GTY(()) tree dt_parm; +static stmtblock_t *dt_post_end_block; + +static void +gfc_build_st_parameter (enum ioparam_type ptype, tree *types) +{ + enum iofield type; + gfc_st_parameter_field *p; + char name[64]; + size_t len; + tree t = make_node (RECORD_TYPE); + + len = strlen (st_parameter[ptype].name); + gcc_assert (len <= sizeof (name) - sizeof ("__st_parameter_")); + memcpy (name, "__st_parameter_", sizeof ("__st_parameter_")); + memcpy (name + sizeof ("__st_parameter_") - 1, st_parameter[ptype].name, + len + 1); + TYPE_NAME (t) = get_identifier (name); + + for (type = 0, p = st_parameter_field; type < IOPARM_field_num; type++, p++) + if (p->param_type == ptype) + switch (p->type) + { + case IOPARM_type_int4: + case IOPARM_type_intio: + case IOPARM_type_pint4: + case IOPARM_type_pintio: + case IOPARM_type_parray: + case IOPARM_type_pchar: + case IOPARM_type_pad: + p->field = gfc_add_field_to_struct (&TYPE_FIELDS (t), t, + get_identifier (p->name), + types[p->type]); + break; + case IOPARM_type_char1: + p->field = gfc_add_field_to_struct (&TYPE_FIELDS (t), t, + get_identifier (p->name), + pchar_type_node); + /* FALLTHROUGH */ + case IOPARM_type_char2: + len = strlen (p->name); + gcc_assert (len <= sizeof (name) - sizeof ("_len")); + memcpy (name, p->name, len); + memcpy (name + len, "_len", sizeof ("_len")); + p->field_len = gfc_add_field_to_struct (&TYPE_FIELDS (t), t, + get_identifier (name), + gfc_charlen_type_node); + if (p->type == IOPARM_type_char2) + p->field = gfc_add_field_to_struct (&TYPE_FIELDS (t), t, + get_identifier (p->name), + pchar_type_node); + break; + case IOPARM_type_common: + p->field + = gfc_add_field_to_struct (&TYPE_FIELDS (t), t, + get_identifier (p->name), + st_parameter[IOPARM_ptype_common].type); + break; + case IOPARM_type_num: + gcc_unreachable (); + } + + gfc_finish_type (t); + st_parameter[ptype].type = t; +} + + +/* Build code to test an error condition and call generate_error if needed. + Note: This builds calls to generate_error in the runtime library function. + The function generate_error is dependent on certain parameters in the + st_parameter_common flags to be set. (See libgfortran/runtime/error.c) + Therefore, the code to set these flags must be generated before + this function is used. */ + +void +gfc_trans_io_runtime_check (tree cond, tree var, int error_code, + const char * msgid, stmtblock_t * pblock) +{ + stmtblock_t block; + tree body; + tree tmp; + tree arg1, arg2, arg3; + char *message; + + if (integer_zerop (cond)) + return; + + /* The code to generate the error. */ + gfc_start_block (&block); + + arg1 = build_fold_addr_expr (var); + + arg2 = build_int_cst (integer_type_node, error_code), + + asprintf (&message, "%s", _(msgid)); + arg3 = gfc_build_addr_expr (pchar_type_node, + gfc_build_localized_cstring_const (message)); + gfc_free(message); + + tmp = build_call_expr (gfor_fndecl_generate_error, 3, arg1, arg2, arg3); + + gfc_add_expr_to_block (&block, tmp); + + body = gfc_finish_block (&block); + + if (integer_onep (cond)) + { + gfc_add_expr_to_block (pblock, body); + } + else + { + /* Tell the compiler that this isn't likely. */ + cond = fold_convert (long_integer_type_node, cond); + tmp = build_int_cst (long_integer_type_node, 0); + cond = build_call_expr (built_in_decls[BUILT_IN_EXPECT], 2, cond, tmp); + cond = fold_convert (boolean_type_node, cond); + + tmp = build3_v (COND_EXPR, cond, body, build_empty_stmt ()); + gfc_add_expr_to_block (pblock, tmp); + } +} + + +/* Create function decls for IO library functions. */ + +void +gfc_build_io_library_fndecls (void) +{ + tree types[IOPARM_type_num], pad_idx, gfc_int4_type_node; + tree gfc_intio_type_node; + tree parm_type, dt_parm_type; + HOST_WIDE_INT pad_size; + enum ioparam_type ptype; + + types[IOPARM_type_int4] = gfc_int4_type_node = gfc_get_int_type (4); + types[IOPARM_type_intio] = gfc_intio_type_node + = gfc_get_int_type (gfc_intio_kind); + types[IOPARM_type_pint4] = build_pointer_type (gfc_int4_type_node); + types[IOPARM_type_pintio] + = build_pointer_type (gfc_intio_type_node); + types[IOPARM_type_parray] = pchar_type_node; + types[IOPARM_type_pchar] = pchar_type_node; + pad_size = 16 * TREE_INT_CST_LOW (TYPE_SIZE_UNIT (pchar_type_node)); + pad_size += 32 * TREE_INT_CST_LOW (TYPE_SIZE_UNIT (integer_type_node)); + pad_idx = build_index_type (build_int_cst (NULL_TREE, pad_size - 1)); + types[IOPARM_type_pad] = build_array_type (char_type_node, pad_idx); + + /* pad actually contains pointers and integers so it needs to have an + alignment that is at least as large as the needed alignment for those + types. See the st_parameter_dt structure in libgfortran/io/io.h for + what really goes into this space. */ + TYPE_ALIGN (types[IOPARM_type_pad]) = MAX (TYPE_ALIGN (pchar_type_node), + TYPE_ALIGN (gfc_get_int_type (gfc_intio_kind))); + + for (ptype = IOPARM_ptype_common; ptype < IOPARM_ptype_num; ptype++) + gfc_build_st_parameter (ptype, types); + + /* Define the transfer functions. */ + + dt_parm_type = build_pointer_type (st_parameter[IOPARM_ptype_dt].type); + + iocall[IOCALL_X_INTEGER] = + gfc_build_library_function_decl (get_identifier + (PREFIX("transfer_integer")), + void_type_node, 3, dt_parm_type, + pvoid_type_node, gfc_int4_type_node); + + iocall[IOCALL_X_LOGICAL] = + gfc_build_library_function_decl (get_identifier + (PREFIX("transfer_logical")), + void_type_node, 3, dt_parm_type, + pvoid_type_node, gfc_int4_type_node); + + iocall[IOCALL_X_CHARACTER] = + gfc_build_library_function_decl (get_identifier + (PREFIX("transfer_character")), + void_type_node, 3, dt_parm_type, + pvoid_type_node, gfc_int4_type_node); + + iocall[IOCALL_X_CHARACTER_WIDE] = + gfc_build_library_function_decl (get_identifier + (PREFIX("transfer_character_wide")), + void_type_node, 4, dt_parm_type, + pvoid_type_node, gfc_charlen_type_node, + gfc_int4_type_node); + + iocall[IOCALL_X_REAL] = + gfc_build_library_function_decl (get_identifier (PREFIX("transfer_real")), + void_type_node, 3, dt_parm_type, + pvoid_type_node, gfc_int4_type_node); + + iocall[IOCALL_X_COMPLEX] = + gfc_build_library_function_decl (get_identifier + (PREFIX("transfer_complex")), + void_type_node, 3, dt_parm_type, + pvoid_type_node, gfc_int4_type_node); + + iocall[IOCALL_X_ARRAY] = + gfc_build_library_function_decl (get_identifier + (PREFIX("transfer_array")), + void_type_node, 4, dt_parm_type, + pvoid_type_node, integer_type_node, + gfc_charlen_type_node); + + /* Library entry points */ + + iocall[IOCALL_READ] = + gfc_build_library_function_decl (get_identifier (PREFIX("st_read")), + void_type_node, 1, dt_parm_type); + + iocall[IOCALL_WRITE] = + gfc_build_library_function_decl (get_identifier (PREFIX("st_write")), + void_type_node, 1, dt_parm_type); + + parm_type = build_pointer_type (st_parameter[IOPARM_ptype_open].type); + iocall[IOCALL_OPEN] = + gfc_build_library_function_decl (get_identifier (PREFIX("st_open")), + void_type_node, 1, parm_type); + + + parm_type = build_pointer_type (st_parameter[IOPARM_ptype_close].type); + iocall[IOCALL_CLOSE] = + gfc_build_library_function_decl (get_identifier (PREFIX("st_close")), + void_type_node, 1, parm_type); + + parm_type = build_pointer_type (st_parameter[IOPARM_ptype_inquire].type); + iocall[IOCALL_INQUIRE] = + gfc_build_library_function_decl (get_identifier (PREFIX("st_inquire")), + gfc_int4_type_node, 1, parm_type); + + iocall[IOCALL_IOLENGTH] = + gfc_build_library_function_decl(get_identifier (PREFIX("st_iolength")), + void_type_node, 1, dt_parm_type); + + parm_type = build_pointer_type (st_parameter[IOPARM_ptype_wait].type); + iocall[IOCALL_WAIT] = + gfc_build_library_function_decl (get_identifier (PREFIX("st_wait")), + gfc_int4_type_node, 1, parm_type); + + parm_type = build_pointer_type (st_parameter[IOPARM_ptype_filepos].type); + iocall[IOCALL_REWIND] = + gfc_build_library_function_decl (get_identifier (PREFIX("st_rewind")), + gfc_int4_type_node, 1, parm_type); + + iocall[IOCALL_BACKSPACE] = + gfc_build_library_function_decl (get_identifier (PREFIX("st_backspace")), + gfc_int4_type_node, 1, parm_type); + + iocall[IOCALL_ENDFILE] = + gfc_build_library_function_decl (get_identifier (PREFIX("st_endfile")), + gfc_int4_type_node, 1, parm_type); + + iocall[IOCALL_FLUSH] = + gfc_build_library_function_decl (get_identifier (PREFIX("st_flush")), + gfc_int4_type_node, 1, parm_type); + + /* Library helpers */ + + iocall[IOCALL_READ_DONE] = + gfc_build_library_function_decl (get_identifier (PREFIX("st_read_done")), + gfc_int4_type_node, 1, dt_parm_type); + + iocall[IOCALL_WRITE_DONE] = + gfc_build_library_function_decl (get_identifier (PREFIX("st_write_done")), + gfc_int4_type_node, 1, dt_parm_type); + + iocall[IOCALL_IOLENGTH_DONE] = + gfc_build_library_function_decl (get_identifier (PREFIX("st_iolength_done")), + gfc_int4_type_node, 1, dt_parm_type); + + + iocall[IOCALL_SET_NML_VAL] = + gfc_build_library_function_decl (get_identifier (PREFIX("st_set_nml_var")), + void_type_node, 6, dt_parm_type, + pvoid_type_node, pvoid_type_node, + gfc_int4_type_node, gfc_charlen_type_node, + gfc_int4_type_node); + + iocall[IOCALL_SET_NML_VAL_DIM] = + gfc_build_library_function_decl (get_identifier (PREFIX("st_set_nml_var_dim")), + void_type_node, 5, dt_parm_type, + gfc_int4_type_node, gfc_array_index_type, + gfc_array_index_type, gfc_array_index_type); +} + + +/* Generate code to store an integer constant into the + st_parameter_XXX structure. */ + +static unsigned int +set_parameter_const (stmtblock_t *block, tree var, enum iofield type, + unsigned int val) +{ + tree tmp; + gfc_st_parameter_field *p = &st_parameter_field[type]; + + if (p->param_type == IOPARM_ptype_common) + var = fold_build3 (COMPONENT_REF, st_parameter[IOPARM_ptype_common].type, + var, TYPE_FIELDS (TREE_TYPE (var)), NULL_TREE); + tmp = fold_build3 (COMPONENT_REF, TREE_TYPE (p->field), var, p->field, + NULL_TREE); + gfc_add_modify (block, tmp, build_int_cst (TREE_TYPE (p->field), val)); + return p->mask; +} + + +/* Generate code to store a non-string I/O parameter into the + st_parameter_XXX structure. This is a pass by value. */ + +static unsigned int +set_parameter_value (stmtblock_t *block, tree var, enum iofield type, + gfc_expr *e) +{ + gfc_se se; + tree tmp; + gfc_st_parameter_field *p = &st_parameter_field[type]; + tree dest_type = TREE_TYPE (p->field); + + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, e); + + /* If we're storing a UNIT number, we need to check it first. */ + if (type == IOPARM_common_unit && e->ts.kind != 4) + { + tree cond, max; + int i; + + /* Don't evaluate the UNIT number multiple times. */ + se.expr = gfc_evaluate_now (se.expr, &se.pre); + + /* UNIT numbers should be nonnegative. */ + cond = fold_build2 (LT_EXPR, boolean_type_node, se.expr, + build_int_cst (TREE_TYPE (se.expr),0)); + gfc_trans_io_runtime_check (cond, var, LIBERROR_BAD_UNIT, + "Negative unit number in I/O statement", + &se.pre); + + /* UNIT numbers should be less than the max. */ + i = gfc_validate_kind (BT_INTEGER, 4, false); + max = gfc_conv_mpz_to_tree (gfc_integer_kinds[i].huge, 4); + cond = fold_build2 (GT_EXPR, boolean_type_node, se.expr, + fold_convert (TREE_TYPE (se.expr), max)); + gfc_trans_io_runtime_check (cond, var, LIBERROR_BAD_UNIT, + "Unit number in I/O statement too large", + &se.pre); + + } + + se.expr = convert (dest_type, se.expr); + gfc_add_block_to_block (block, &se.pre); + + if (p->param_type == IOPARM_ptype_common) + var = fold_build3 (COMPONENT_REF, st_parameter[IOPARM_ptype_common].type, + var, TYPE_FIELDS (TREE_TYPE (var)), NULL_TREE); + + tmp = fold_build3 (COMPONENT_REF, dest_type, var, p->field, NULL_TREE); + gfc_add_modify (block, tmp, se.expr); + return p->mask; +} + + +/* Generate code to store a non-string I/O parameter into the + st_parameter_XXX structure. This is pass by reference. */ + +static unsigned int +set_parameter_ref (stmtblock_t *block, stmtblock_t *postblock, + tree var, enum iofield type, gfc_expr *e) +{ + gfc_se se; + tree tmp, addr; + gfc_st_parameter_field *p = &st_parameter_field[type]; + + gcc_assert (e->ts.type == BT_INTEGER || e->ts.type == BT_LOGICAL); + gfc_init_se (&se, NULL); + gfc_conv_expr_lhs (&se, e); + + gfc_add_block_to_block (block, &se.pre); + + if (TYPE_MODE (TREE_TYPE (se.expr)) + == TYPE_MODE (TREE_TYPE (TREE_TYPE (p->field)))) + { + addr = convert (TREE_TYPE (p->field), build_fold_addr_expr (se.expr)); + + /* If this is for the iostat variable initialize the + user variable to LIBERROR_OK which is zero. */ + if (type == IOPARM_common_iostat) + gfc_add_modify (block, se.expr, + build_int_cst (TREE_TYPE (se.expr), LIBERROR_OK)); + } + else + { + /* The type used by the library has different size + from the type of the variable supplied by the user. + Need to use a temporary. */ + tree tmpvar = gfc_create_var (TREE_TYPE (TREE_TYPE (p->field)), + st_parameter_field[type].name); + + /* If this is for the iostat variable, initialize the + user variable to LIBERROR_OK which is zero. */ + if (type == IOPARM_common_iostat) + gfc_add_modify (block, tmpvar, + build_int_cst (TREE_TYPE (tmpvar), LIBERROR_OK)); + + addr = build_fold_addr_expr (tmpvar); + /* After the I/O operation, we set the variable from the temporary. */ + tmp = convert (TREE_TYPE (se.expr), tmpvar); + gfc_add_modify (postblock, se.expr, tmp); + } + + if (p->param_type == IOPARM_ptype_common) + var = fold_build3 (COMPONENT_REF, st_parameter[IOPARM_ptype_common].type, + var, TYPE_FIELDS (TREE_TYPE (var)), NULL_TREE); + tmp = fold_build3 (COMPONENT_REF, TREE_TYPE (p->field), + var, p->field, NULL_TREE); + gfc_add_modify (block, tmp, addr); + return p->mask; +} + +/* Given an array expr, find its address and length to get a string. If the + array is full, the string's address is the address of array's first element + and the length is the size of the whole array. If it is an element, the + string's address is the element's address and the length is the rest size of + the array. +*/ + +static void +gfc_convert_array_to_string (gfc_se * se, gfc_expr * e) +{ + tree tmp; + tree array; + tree type; + tree size; + int rank; + gfc_symbol *sym; + + sym = e->symtree->n.sym; + rank = sym->as->rank - 1; + + if (e->ref->u.ar.type == AR_FULL) + { + se->expr = gfc_get_symbol_decl (sym); + se->expr = gfc_conv_array_data (se->expr); + } + else + { + gfc_conv_expr (se, e); + } + + array = sym->backend_decl; + type = TREE_TYPE (array); + + if (GFC_ARRAY_TYPE_P (type)) + size = GFC_TYPE_ARRAY_SIZE (type); + else + { + gcc_assert (GFC_DESCRIPTOR_TYPE_P (type)); + size = gfc_conv_array_stride (array, rank); + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + gfc_conv_array_ubound (array, rank), + gfc_conv_array_lbound (array, rank)); + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, tmp, + gfc_index_one_node); + size = fold_build2 (MULT_EXPR, gfc_array_index_type, tmp, size); + } + + gcc_assert (size); + + /* If it is an element, we need the its address and size of the rest. */ + if (e->ref->u.ar.type == AR_ELEMENT) + { + size = fold_build2 (MINUS_EXPR, gfc_array_index_type, size, + TREE_OPERAND (se->expr, 1)); + se->expr = build_fold_addr_expr (se->expr); + } + + tmp = TYPE_SIZE_UNIT (gfc_get_element_type (type)); + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, + fold_convert (gfc_array_index_type, tmp)); + + se->string_length = fold_convert (gfc_charlen_type_node, size); +} + + +/* Generate code to store a string and its length into the + st_parameter_XXX structure. */ + +static unsigned int +set_string (stmtblock_t * block, stmtblock_t * postblock, tree var, + enum iofield type, gfc_expr * e) +{ + gfc_se se; + tree tmp; + tree io; + tree len; + gfc_st_parameter_field *p = &st_parameter_field[type]; + + gfc_init_se (&se, NULL); + + if (p->param_type == IOPARM_ptype_common) + var = fold_build3 (COMPONENT_REF, st_parameter[IOPARM_ptype_common].type, + var, TYPE_FIELDS (TREE_TYPE (var)), NULL_TREE); + io = fold_build3 (COMPONENT_REF, TREE_TYPE (p->field), + var, p->field, NULL_TREE); + len = fold_build3 (COMPONENT_REF, TREE_TYPE (p->field_len), + var, p->field_len, NULL_TREE); + + /* Integer variable assigned a format label. */ + if (e->ts.type == BT_INTEGER && e->symtree->n.sym->attr.assign == 1) + { + char * msg; + tree cond; + + gfc_conv_label_variable (&se, e); + tmp = GFC_DECL_STRING_LEN (se.expr); + cond = fold_build2 (LT_EXPR, boolean_type_node, + tmp, build_int_cst (TREE_TYPE (tmp), 0)); + + asprintf(&msg, "Label assigned to variable '%s' (%%ld) is not a format " + "label", e->symtree->name); + gfc_trans_runtime_check (true, false, cond, &se.pre, &e->where, msg, + fold_convert (long_integer_type_node, tmp)); + gfc_free (msg); + + gfc_add_modify (&se.pre, io, + fold_convert (TREE_TYPE (io), GFC_DECL_ASSIGN_ADDR (se.expr))); + gfc_add_modify (&se.pre, len, GFC_DECL_STRING_LEN (se.expr)); + } + else + { + /* General character. */ + if (e->ts.type == BT_CHARACTER && e->rank == 0) + gfc_conv_expr (&se, e); + /* Array assigned Hollerith constant or character array. */ + else if (e->symtree && (e->symtree->n.sym->as->rank > 0)) + gfc_convert_array_to_string (&se, e); + else + gcc_unreachable (); + + gfc_conv_string_parameter (&se); + gfc_add_modify (&se.pre, io, fold_convert (TREE_TYPE (io), se.expr)); + gfc_add_modify (&se.pre, len, se.string_length); + } + + gfc_add_block_to_block (block, &se.pre); + gfc_add_block_to_block (postblock, &se.post); + return p->mask; +} + + +/* Generate code to store the character (array) and the character length + for an internal unit. */ + +static unsigned int +set_internal_unit (stmtblock_t * block, stmtblock_t * post_block, + tree var, gfc_expr * e) +{ + gfc_se se; + tree io; + tree len; + tree desc; + tree tmp; + gfc_st_parameter_field *p; + unsigned int mask; + + gfc_init_se (&se, NULL); + + p = &st_parameter_field[IOPARM_dt_internal_unit]; + mask = p->mask; + io = fold_build3 (COMPONENT_REF, TREE_TYPE (p->field), + var, p->field, NULL_TREE); + len = fold_build3 (COMPONENT_REF, TREE_TYPE (p->field_len), + var, p->field_len, NULL_TREE); + p = &st_parameter_field[IOPARM_dt_internal_unit_desc]; + desc = fold_build3 (COMPONENT_REF, TREE_TYPE (p->field), + var, p->field, NULL_TREE); + + gcc_assert (e->ts.type == BT_CHARACTER); + + /* Character scalars. */ + if (e->rank == 0) + { + gfc_conv_expr (&se, e); + gfc_conv_string_parameter (&se); + tmp = se.expr; + se.expr = build_int_cst (pchar_type_node, 0); + } + + /* Character array. */ + else if (e->rank > 0) + { + se.ss = gfc_walk_expr (e); + + if (is_subref_array (e)) + { + /* Use a temporary for components of arrays of derived types + or substring array references. */ + gfc_conv_subref_array_arg (&se, e, 0, + last_dt == READ ? INTENT_IN : INTENT_OUT); + tmp = build_fold_indirect_ref (se.expr); + se.expr = gfc_build_addr_expr (pchar_type_node, tmp); + tmp = gfc_conv_descriptor_data_get (tmp); + } + else + { + /* Return the data pointer and rank from the descriptor. */ + gfc_conv_expr_descriptor (&se, e, se.ss); + tmp = gfc_conv_descriptor_data_get (se.expr); + se.expr = gfc_build_addr_expr (pchar_type_node, se.expr); + } + } + else + gcc_unreachable (); + + /* The cast is needed for character substrings and the descriptor + data. */ + gfc_add_modify (&se.pre, io, fold_convert (TREE_TYPE (io), tmp)); + gfc_add_modify (&se.pre, len, + fold_convert (TREE_TYPE (len), se.string_length)); + gfc_add_modify (&se.pre, desc, se.expr); + + gfc_add_block_to_block (block, &se.pre); + gfc_add_block_to_block (post_block, &se.post); + return mask; +} + +/* Add a case to a IO-result switch. */ + +static void +add_case (int label_value, gfc_st_label * label, stmtblock_t * body) +{ + tree tmp, value; + + if (label == NULL) + return; /* No label, no case */ + + value = build_int_cst (NULL_TREE, label_value); + + /* Make a backend label for this case. */ + tmp = gfc_build_label_decl (NULL_TREE); + + /* And the case itself. */ + tmp = build3_v (CASE_LABEL_EXPR, value, NULL_TREE, tmp); + gfc_add_expr_to_block (body, tmp); + + /* Jump to the label. */ + tmp = build1_v (GOTO_EXPR, gfc_get_label_decl (label)); + gfc_add_expr_to_block (body, tmp); +} + + +/* Generate a switch statement that branches to the correct I/O + result label. The last statement of an I/O call stores the + result into a variable because there is often cleanup that + must be done before the switch, so a temporary would have to + be created anyway. */ + +static void +io_result (stmtblock_t * block, tree var, gfc_st_label * err_label, + gfc_st_label * end_label, gfc_st_label * eor_label) +{ + stmtblock_t body; + tree tmp, rc; + gfc_st_parameter_field *p = &st_parameter_field[IOPARM_common_flags]; + + /* If no labels are specified, ignore the result instead + of building an empty switch. */ + if (err_label == NULL + && end_label == NULL + && eor_label == NULL) + return; + + /* Build a switch statement. */ + gfc_start_block (&body); + + /* The label values here must be the same as the values + in the library_return enum in the runtime library */ + add_case (1, err_label, &body); + add_case (2, end_label, &body); + add_case (3, eor_label, &body); + + tmp = gfc_finish_block (&body); + + var = fold_build3 (COMPONENT_REF, st_parameter[IOPARM_ptype_common].type, + var, TYPE_FIELDS (TREE_TYPE (var)), NULL_TREE); + rc = fold_build3 (COMPONENT_REF, TREE_TYPE (p->field), + var, p->field, NULL_TREE); + rc = fold_build2 (BIT_AND_EXPR, TREE_TYPE (rc), + rc, build_int_cst (TREE_TYPE (rc), + IOPARM_common_libreturn_mask)); + + tmp = build3_v (SWITCH_EXPR, rc, tmp, NULL_TREE); + + gfc_add_expr_to_block (block, tmp); +} + + +/* Store the current file and line number to variables so that if a + library call goes awry, we can tell the user where the problem is. */ + +static void +set_error_locus (stmtblock_t * block, tree var, locus * where) +{ + gfc_file *f; + tree str, locus_file; + int line; + gfc_st_parameter_field *p = &st_parameter_field[IOPARM_common_filename]; + + locus_file = fold_build3 (COMPONENT_REF, + st_parameter[IOPARM_ptype_common].type, + var, TYPE_FIELDS (TREE_TYPE (var)), NULL_TREE); + locus_file = fold_build3 (COMPONENT_REF, TREE_TYPE (p->field), + locus_file, p->field, NULL_TREE); + f = where->lb->file; + str = gfc_build_cstring_const (f->filename); + + str = gfc_build_addr_expr (pchar_type_node, str); + gfc_add_modify (block, locus_file, str); + + line = LOCATION_LINE (where->lb->location); + set_parameter_const (block, var, IOPARM_common_line, line); +} + + +/* Translate an OPEN statement. */ + +tree +gfc_trans_open (gfc_code * code) +{ + stmtblock_t block, post_block; + gfc_open *p; + tree tmp, var; + unsigned int mask = 0; + + gfc_start_block (&block); + gfc_init_block (&post_block); + + var = gfc_create_var (st_parameter[IOPARM_ptype_open].type, "open_parm"); + + set_error_locus (&block, var, &code->loc); + p = code->ext.open; + + if (p->iomsg) + mask |= set_string (&block, &post_block, var, IOPARM_common_iomsg, + p->iomsg); + + if (p->iostat) + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_common_iostat, + p->iostat); + + if (p->err) + mask |= IOPARM_common_err; + + if (p->file) + mask |= set_string (&block, &post_block, var, IOPARM_open_file, p->file); + + if (p->status) + mask |= set_string (&block, &post_block, var, IOPARM_open_status, + p->status); + + if (p->access) + mask |= set_string (&block, &post_block, var, IOPARM_open_access, + p->access); + + if (p->form) + mask |= set_string (&block, &post_block, var, IOPARM_open_form, p->form); + + if (p->recl) + mask |= set_parameter_value (&block, var, IOPARM_open_recl_in, p->recl); + + if (p->blank) + mask |= set_string (&block, &post_block, var, IOPARM_open_blank, + p->blank); + + if (p->position) + mask |= set_string (&block, &post_block, var, IOPARM_open_position, + p->position); + + if (p->action) + mask |= set_string (&block, &post_block, var, IOPARM_open_action, + p->action); + + if (p->delim) + mask |= set_string (&block, &post_block, var, IOPARM_open_delim, + p->delim); + + if (p->pad) + mask |= set_string (&block, &post_block, var, IOPARM_open_pad, p->pad); + + if (p->decimal) + mask |= set_string (&block, &post_block, var, IOPARM_open_decimal, + p->decimal); + + if (p->encoding) + mask |= set_string (&block, &post_block, var, IOPARM_open_encoding, + p->encoding); + + if (p->round) + mask |= set_string (&block, &post_block, var, IOPARM_open_round, p->round); + + if (p->sign) + mask |= set_string (&block, &post_block, var, IOPARM_open_sign, p->sign); + + if (p->asynchronous) + mask |= set_string (&block, &post_block, var, IOPARM_open_asynchronous, + p->asynchronous); + + if (p->convert) + mask |= set_string (&block, &post_block, var, IOPARM_open_convert, + p->convert); + + set_parameter_const (&block, var, IOPARM_common_flags, mask); + + if (p->unit) + set_parameter_value (&block, var, IOPARM_common_unit, p->unit); + else + set_parameter_const (&block, var, IOPARM_common_unit, 0); + + tmp = build_fold_addr_expr (var); + tmp = build_call_expr (iocall[IOCALL_OPEN], 1, tmp); + gfc_add_expr_to_block (&block, tmp); + + gfc_add_block_to_block (&block, &post_block); + + io_result (&block, var, p->err, NULL, NULL); + + return gfc_finish_block (&block); +} + + +/* Translate a CLOSE statement. */ + +tree +gfc_trans_close (gfc_code * code) +{ + stmtblock_t block, post_block; + gfc_close *p; + tree tmp, var; + unsigned int mask = 0; + + gfc_start_block (&block); + gfc_init_block (&post_block); + + var = gfc_create_var (st_parameter[IOPARM_ptype_close].type, "close_parm"); + + set_error_locus (&block, var, &code->loc); + p = code->ext.close; + + if (p->iomsg) + mask |= set_string (&block, &post_block, var, IOPARM_common_iomsg, + p->iomsg); + + if (p->iostat) + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_common_iostat, + p->iostat); + + if (p->err) + mask |= IOPARM_common_err; + + if (p->status) + mask |= set_string (&block, &post_block, var, IOPARM_close_status, + p->status); + + set_parameter_const (&block, var, IOPARM_common_flags, mask); + + if (p->unit) + set_parameter_value (&block, var, IOPARM_common_unit, p->unit); + else + set_parameter_const (&block, var, IOPARM_common_unit, 0); + + tmp = build_fold_addr_expr (var); + tmp = build_call_expr (iocall[IOCALL_CLOSE], 1, tmp); + gfc_add_expr_to_block (&block, tmp); + + gfc_add_block_to_block (&block, &post_block); + + io_result (&block, var, p->err, NULL, NULL); + + return gfc_finish_block (&block); +} + + +/* Common subroutine for building a file positioning statement. */ + +static tree +build_filepos (tree function, gfc_code * code) +{ + stmtblock_t block, post_block; + gfc_filepos *p; + tree tmp, var; + unsigned int mask = 0; + + p = code->ext.filepos; + + gfc_start_block (&block); + gfc_init_block (&post_block); + + var = gfc_create_var (st_parameter[IOPARM_ptype_filepos].type, + "filepos_parm"); + + set_error_locus (&block, var, &code->loc); + + if (p->iomsg) + mask |= set_string (&block, &post_block, var, IOPARM_common_iomsg, + p->iomsg); + + if (p->iostat) + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_common_iostat, + p->iostat); + + if (p->err) + mask |= IOPARM_common_err; + + set_parameter_const (&block, var, IOPARM_common_flags, mask); + + if (p->unit) + set_parameter_value (&block, var, IOPARM_common_unit, p->unit); + else + set_parameter_const (&block, var, IOPARM_common_unit, 0); + + tmp = build_fold_addr_expr (var); + tmp = build_call_expr (function, 1, tmp); + gfc_add_expr_to_block (&block, tmp); + + gfc_add_block_to_block (&block, &post_block); + + io_result (&block, var, p->err, NULL, NULL); + + return gfc_finish_block (&block); +} + + +/* Translate a BACKSPACE statement. */ + +tree +gfc_trans_backspace (gfc_code * code) +{ + return build_filepos (iocall[IOCALL_BACKSPACE], code); +} + + +/* Translate an ENDFILE statement. */ + +tree +gfc_trans_endfile (gfc_code * code) +{ + return build_filepos (iocall[IOCALL_ENDFILE], code); +} + + +/* Translate a REWIND statement. */ + +tree +gfc_trans_rewind (gfc_code * code) +{ + return build_filepos (iocall[IOCALL_REWIND], code); +} + + +/* Translate a FLUSH statement. */ + +tree +gfc_trans_flush (gfc_code * code) +{ + return build_filepos (iocall[IOCALL_FLUSH], code); +} + + +/* Create a dummy iostat variable to catch any error due to bad unit. */ + +static gfc_expr * +create_dummy_iostat (void) +{ + gfc_symtree *st; + gfc_expr *e; + + gfc_get_ha_sym_tree ("@iostat", &st); + st->n.sym->ts.type = BT_INTEGER; + st->n.sym->ts.kind = gfc_default_integer_kind; + gfc_set_sym_referenced (st->n.sym); + gfc_commit_symbol (st->n.sym); + st->n.sym->backend_decl + = gfc_create_var (gfc_get_int_type (st->n.sym->ts.kind), + st->n.sym->name); + + e = gfc_get_expr (); + e->expr_type = EXPR_VARIABLE; + e->symtree = st; + e->ts.type = BT_INTEGER; + e->ts.kind = st->n.sym->ts.kind; + + return e; +} + + +/* Translate the non-IOLENGTH form of an INQUIRE statement. */ + +tree +gfc_trans_inquire (gfc_code * code) +{ + stmtblock_t block, post_block; + gfc_inquire *p; + tree tmp, var; + unsigned int mask = 0, mask2 = 0; + + gfc_start_block (&block); + gfc_init_block (&post_block); + + var = gfc_create_var (st_parameter[IOPARM_ptype_inquire].type, + "inquire_parm"); + + set_error_locus (&block, var, &code->loc); + p = code->ext.inquire; + + if (p->iomsg) + mask |= set_string (&block, &post_block, var, IOPARM_common_iomsg, + p->iomsg); + + if (p->iostat) + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_common_iostat, + p->iostat); + + if (p->err) + mask |= IOPARM_common_err; + + /* Sanity check. */ + if (p->unit && p->file) + gfc_error ("INQUIRE statement at %L cannot contain both FILE and UNIT specifiers", &code->loc); + + if (p->file) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_file, + p->file); + + if (p->exist) + { + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_exist, + p->exist); + + if (p->unit && !p->iostat) + { + p->iostat = create_dummy_iostat (); + mask |= set_parameter_ref (&block, &post_block, var, + IOPARM_common_iostat, p->iostat); + } + } + + if (p->opened) + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_opened, + p->opened); + + if (p->number) + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_number, + p->number); + + if (p->named) + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_named, + p->named); + + if (p->name) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_name, + p->name); + + if (p->access) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_access, + p->access); + + if (p->sequential) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_sequential, + p->sequential); + + if (p->direct) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_direct, + p->direct); + + if (p->form) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_form, + p->form); + + if (p->formatted) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_formatted, + p->formatted); + + if (p->unformatted) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_unformatted, + p->unformatted); + + if (p->recl) + mask |= set_parameter_ref (&block, &post_block, var, + IOPARM_inquire_recl_out, p->recl); + + if (p->nextrec) + mask |= set_parameter_ref (&block, &post_block, var, + IOPARM_inquire_nextrec, p->nextrec); + + if (p->blank) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_blank, + p->blank); + + if (p->delim) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_delim, + p->delim); + + if (p->position) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_position, + p->position); + + if (p->action) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_action, + p->action); + + if (p->read) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_read, + p->read); + + if (p->write) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_write, + p->write); + + if (p->readwrite) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_readwrite, + p->readwrite); + + if (p->pad) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_pad, + p->pad); + + if (p->convert) + mask |= set_string (&block, &post_block, var, IOPARM_inquire_convert, + p->convert); + + if (p->strm_pos) + mask |= set_parameter_ref (&block, &post_block, var, + IOPARM_inquire_strm_pos_out, p->strm_pos); + + /* The second series of flags. */ + if (p->asynchronous) + mask2 |= set_string (&block, &post_block, var, IOPARM_inquire_asynchronous, + p->asynchronous); + + if (p->decimal) + mask2 |= set_string (&block, &post_block, var, IOPARM_inquire_decimal, + p->decimal); + + if (p->encoding) + mask2 |= set_string (&block, &post_block, var, IOPARM_inquire_encoding, + p->encoding); + + if (p->round) + mask2 |= set_string (&block, &post_block, var, IOPARM_inquire_round, + p->round); + + if (p->sign) + mask2 |= set_string (&block, &post_block, var, IOPARM_inquire_sign, + p->sign); + + if (p->pending) + mask2 |= set_parameter_ref (&block, &post_block, var, + IOPARM_inquire_pending, p->pending); + + if (p->size) + mask2 |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_size, + p->size); + + if (p->id) + mask2 |= set_parameter_ref (&block, &post_block,var, IOPARM_inquire_id, + p->id); + + if (mask2) + mask |= set_parameter_const (&block, var, IOPARM_inquire_flags2, mask2); + + set_parameter_const (&block, var, IOPARM_common_flags, mask); + + if (p->unit) + set_parameter_value (&block, var, IOPARM_common_unit, p->unit); + else + set_parameter_const (&block, var, IOPARM_common_unit, 0); + + tmp = build_fold_addr_expr (var); + tmp = build_call_expr (iocall[IOCALL_INQUIRE], 1, tmp); + gfc_add_expr_to_block (&block, tmp); + + gfc_add_block_to_block (&block, &post_block); + + io_result (&block, var, p->err, NULL, NULL); + + return gfc_finish_block (&block); +} + + +tree +gfc_trans_wait (gfc_code * code) +{ + stmtblock_t block, post_block; + gfc_wait *p; + tree tmp, var; + unsigned int mask = 0; + + gfc_start_block (&block); + gfc_init_block (&post_block); + + var = gfc_create_var (st_parameter[IOPARM_ptype_wait].type, + "wait_parm"); + + set_error_locus (&block, var, &code->loc); + p = code->ext.wait; + + /* Set parameters here. */ + if (p->iomsg) + mask |= set_string (&block, &post_block, var, IOPARM_common_iomsg, + p->iomsg); + + if (p->iostat) + mask |= set_parameter_ref (&block, &post_block, var, IOPARM_common_iostat, + p->iostat); + + if (p->err) + mask |= IOPARM_common_err; + + if (p->id) + mask |= set_parameter_value (&block, var, IOPARM_wait_id, p->id); + + set_parameter_const (&block, var, IOPARM_common_flags, mask); + + if (p->unit) + set_parameter_value (&block, var, IOPARM_common_unit, p->unit); + + tmp = build_fold_addr_expr (var); + tmp = build_call_expr (iocall[IOCALL_WAIT], 1, tmp); + gfc_add_expr_to_block (&block, tmp); + + gfc_add_block_to_block (&block, &post_block); + + io_result (&block, var, p->err, NULL, NULL); + + return gfc_finish_block (&block); + +} + +static gfc_expr * +gfc_new_nml_name_expr (const char * name) +{ + gfc_expr * nml_name; + + nml_name = gfc_get_expr(); + nml_name->ref = NULL; + nml_name->expr_type = EXPR_CONSTANT; + nml_name->ts.kind = gfc_default_character_kind; + nml_name->ts.type = BT_CHARACTER; + nml_name->value.character.length = strlen(name); + nml_name->value.character.string = gfc_char_to_widechar (name); + + return nml_name; +} + +/* nml_full_name builds up the fully qualified name of a + derived type component. */ + +static char* +nml_full_name (const char* var_name, const char* cmp_name) +{ + int full_name_length; + char * full_name; + + full_name_length = strlen (var_name) + strlen (cmp_name) + 1; + full_name = (char*)gfc_getmem (full_name_length + 1); + strcpy (full_name, var_name); + full_name = strcat (full_name, "%"); + full_name = strcat (full_name, cmp_name); + return full_name; +} + +/* nml_get_addr_expr builds an address expression from the + gfc_symbol or gfc_component backend_decl's. An offset is + provided so that the address of an element of an array of + derived types is returned. This is used in the runtime to + determine that span of the derived type. */ + +static tree +nml_get_addr_expr (gfc_symbol * sym, gfc_component * c, + tree base_addr) +{ + tree decl = NULL_TREE; + tree tmp; + tree itmp; + int array_flagged; + int dummy_arg_flagged; + + if (sym) + { + sym->attr.referenced = 1; + decl = gfc_get_symbol_decl (sym); + + /* If this is the enclosing function declaration, use + the fake result instead. */ + if (decl == current_function_decl) + decl = gfc_get_fake_result_decl (sym, 0); + else if (decl == DECL_CONTEXT (current_function_decl)) + decl = gfc_get_fake_result_decl (sym, 1); + } + else + decl = c->backend_decl; + + gcc_assert (decl && ((TREE_CODE (decl) == FIELD_DECL + || TREE_CODE (decl) == VAR_DECL + || TREE_CODE (decl) == PARM_DECL) + || TREE_CODE (decl) == COMPONENT_REF)); + + tmp = decl; + + /* Build indirect reference, if dummy argument. */ + + dummy_arg_flagged = POINTER_TYPE_P (TREE_TYPE(tmp)); + + itmp = (dummy_arg_flagged) ? build_fold_indirect_ref (tmp) : tmp; + + /* If an array, set flag and use indirect ref. if built. */ + + array_flagged = (TREE_CODE (TREE_TYPE (itmp)) == ARRAY_TYPE + && !TYPE_STRING_FLAG (TREE_TYPE (itmp))); + + if (array_flagged) + tmp = itmp; + + /* Treat the component of a derived type, using base_addr for + the derived type. */ + + if (TREE_CODE (decl) == FIELD_DECL) + tmp = fold_build3 (COMPONENT_REF, TREE_TYPE (tmp), + base_addr, tmp, NULL_TREE); + + /* If we have a derived type component, a reference to the first + element of the array is built. This is done so that base_addr, + used in the build of the component reference, always points to + a RECORD_TYPE. */ + + if (array_flagged) + tmp = gfc_build_array_ref (tmp, gfc_index_zero_node, NULL); + + /* Now build the address expression. */ + + tmp = build_fold_addr_expr (tmp); + + /* If scalar dummy, resolve indirect reference now. */ + + if (dummy_arg_flagged && !array_flagged) + tmp = build_fold_indirect_ref (tmp); + + gcc_assert (tmp && POINTER_TYPE_P (TREE_TYPE (tmp))); + + return tmp; +} + +/* For an object VAR_NAME whose base address is BASE_ADDR, generate a + call to iocall[IOCALL_SET_NML_VAL]. For derived type variable, recursively + generate calls to iocall[IOCALL_SET_NML_VAL] for each component. */ + +#define IARG(i) build_int_cst (gfc_array_index_type, i) + +static void +transfer_namelist_element (stmtblock_t * block, const char * var_name, + gfc_symbol * sym, gfc_component * c, + tree base_addr) +{ + gfc_typespec * ts = NULL; + gfc_array_spec * as = NULL; + tree addr_expr = NULL; + tree dt = NULL; + tree string; + tree tmp; + tree dtype; + tree dt_parm_addr; + int n_dim; + int itype; + int rank = 0; + + gcc_assert (sym || c); + + /* Build the namelist object name. */ + + string = gfc_build_cstring_const (var_name); + string = gfc_build_addr_expr (pchar_type_node, string); + + /* Build ts, as and data address using symbol or component. */ + + ts = (sym) ? &sym->ts : &c->ts; + as = (sym) ? sym->as : c->as; + + addr_expr = nml_get_addr_expr (sym, c, base_addr); + + if (as) + rank = as->rank; + + if (rank) + { + dt = TREE_TYPE ((sym) ? sym->backend_decl : c->backend_decl); + dtype = gfc_get_dtype (dt); + } + else + { + itype = GFC_DTYPE_UNKNOWN; + + switch (ts->type) + + { + case BT_INTEGER: + itype = GFC_DTYPE_INTEGER; + break; + case BT_LOGICAL: + itype = GFC_DTYPE_LOGICAL; + break; + case BT_REAL: + itype = GFC_DTYPE_REAL; + break; + case BT_COMPLEX: + itype = GFC_DTYPE_COMPLEX; + break; + case BT_DERIVED: + itype = GFC_DTYPE_DERIVED; + break; + case BT_CHARACTER: + itype = GFC_DTYPE_CHARACTER; + break; + default: + gcc_unreachable (); + } + + dtype = IARG (itype << GFC_DTYPE_TYPE_SHIFT); + } + + /* Build up the arguments for the transfer call. + The call for the scalar part transfers: + (address, name, type, kind or string_length, dtype) */ + + dt_parm_addr = build_fold_addr_expr (dt_parm); + + if (ts->type == BT_CHARACTER) + tmp = ts->cl->backend_decl; + else + tmp = build_int_cst (gfc_charlen_type_node, 0); + tmp = build_call_expr (iocall[IOCALL_SET_NML_VAL], 6, + dt_parm_addr, addr_expr, string, + IARG (ts->kind), tmp, dtype); + gfc_add_expr_to_block (block, tmp); + + /* If the object is an array, transfer rank times: + (null pointer, name, stride, lbound, ubound) */ + + for ( n_dim = 0 ; n_dim < rank ; n_dim++ ) + { + tmp = build_call_expr (iocall[IOCALL_SET_NML_VAL_DIM], 5, + dt_parm_addr, + IARG (n_dim), + GFC_TYPE_ARRAY_STRIDE (dt, n_dim), + GFC_TYPE_ARRAY_LBOUND (dt, n_dim), + GFC_TYPE_ARRAY_UBOUND (dt, n_dim)); + gfc_add_expr_to_block (block, tmp); + } + + if (ts->type == BT_DERIVED) + { + gfc_component *cmp; + + /* Provide the RECORD_TYPE to build component references. */ + + tree expr = build_fold_indirect_ref (addr_expr); + + for (cmp = ts->derived->components; cmp; cmp = cmp->next) + { + char *full_name = nml_full_name (var_name, cmp->name); + transfer_namelist_element (block, + full_name, + NULL, cmp, expr); + gfc_free (full_name); + } + } +} + +#undef IARG + +/* Create a data transfer statement. Not all of the fields are valid + for both reading and writing, but improper use has been filtered + out by now. */ + +static tree +build_dt (tree function, gfc_code * code) +{ + stmtblock_t block, post_block, post_end_block, post_iu_block; + gfc_dt *dt; + tree tmp, var; + gfc_expr *nmlname; + gfc_namelist *nml; + unsigned int mask = 0; + + gfc_start_block (&block); + gfc_init_block (&post_block); + gfc_init_block (&post_end_block); + gfc_init_block (&post_iu_block); + + var = gfc_create_var (st_parameter[IOPARM_ptype_dt].type, "dt_parm"); + + set_error_locus (&block, var, &code->loc); + + if (last_dt == IOLENGTH) + { + gfc_inquire *inq; + + inq = code->ext.inquire; + + /* First check that preconditions are met. */ + gcc_assert (inq != NULL); + gcc_assert (inq->iolength != NULL); + + /* Connect to the iolength variable. */ + mask |= set_parameter_ref (&block, &post_end_block, var, + IOPARM_dt_iolength, inq->iolength); + dt = NULL; + } + else + { + dt = code->ext.dt; + gcc_assert (dt != NULL); + } + + if (dt && dt->io_unit) + { + if (dt->io_unit->ts.type == BT_CHARACTER) + { + mask |= set_internal_unit (&block, &post_iu_block, + var, dt->io_unit); + set_parameter_const (&block, var, IOPARM_common_unit, 0); + } + } + else + set_parameter_const (&block, var, IOPARM_common_unit, 0); + + if (dt) + { + if (dt->iomsg) + mask |= set_string (&block, &post_block, var, IOPARM_common_iomsg, + dt->iomsg); + + if (dt->iostat) + mask |= set_parameter_ref (&block, &post_end_block, var, + IOPARM_common_iostat, dt->iostat); + + if (dt->err) + mask |= IOPARM_common_err; + + if (dt->eor) + mask |= IOPARM_common_eor; + + if (dt->end) + mask |= IOPARM_common_end; + + if (dt->id) + mask |= set_parameter_ref (&block, &post_end_block, var, + IOPARM_dt_id, dt->id); + + if (dt->pos) + mask |= set_parameter_value (&block, var, IOPARM_dt_pos, dt->pos); + + if (dt->asynchronous) + mask |= set_string (&block, &post_block, var, IOPARM_dt_asynchronous, + dt->asynchronous); + + if (dt->blank) + mask |= set_string (&block, &post_block, var, IOPARM_dt_blank, + dt->blank); + + if (dt->decimal) + mask |= set_string (&block, &post_block, var, IOPARM_dt_decimal, + dt->decimal); + + if (dt->delim) + mask |= set_string (&block, &post_block, var, IOPARM_dt_delim, + dt->delim); + + if (dt->pad) + mask |= set_string (&block, &post_block, var, IOPARM_dt_pad, + dt->pad); + + if (dt->round) + mask |= set_string (&block, &post_block, var, IOPARM_dt_round, + dt->round); + + if (dt->sign) + mask |= set_string (&block, &post_block, var, IOPARM_dt_sign, + dt->sign); + + if (dt->rec) + mask |= set_parameter_value (&block, var, IOPARM_dt_rec, dt->rec); + + if (dt->advance) + mask |= set_string (&block, &post_block, var, IOPARM_dt_advance, + dt->advance); + + if (dt->format_expr) + mask |= set_string (&block, &post_end_block, var, IOPARM_dt_format, + dt->format_expr); + + if (dt->format_label) + { + if (dt->format_label == &format_asterisk) + mask |= IOPARM_dt_list_format; + else + mask |= set_string (&block, &post_block, var, IOPARM_dt_format, + dt->format_label->format); + } + + if (dt->size) + mask |= set_parameter_ref (&block, &post_end_block, var, + IOPARM_dt_size, dt->size); + + if (dt->namelist) + { + if (dt->format_expr || dt->format_label) + gfc_internal_error ("build_dt: format with namelist"); + + nmlname = gfc_new_nml_name_expr (dt->namelist->name); + + mask |= set_string (&block, &post_block, var, IOPARM_dt_namelist_name, + nmlname); + + if (last_dt == READ) + mask |= IOPARM_dt_namelist_read_mode; + + set_parameter_const (&block, var, IOPARM_common_flags, mask); + + dt_parm = var; + + for (nml = dt->namelist->namelist; nml; nml = nml->next) + transfer_namelist_element (&block, nml->sym->name, nml->sym, + NULL, NULL); + } + else + set_parameter_const (&block, var, IOPARM_common_flags, mask); + + if (dt->io_unit && dt->io_unit->ts.type == BT_INTEGER) + set_parameter_value (&block, var, IOPARM_common_unit, dt->io_unit); + } + else + set_parameter_const (&block, var, IOPARM_common_flags, mask); + + tmp = build_fold_addr_expr (var); + tmp = build_call_expr (function, 1, tmp); + gfc_add_expr_to_block (&block, tmp); + + gfc_add_block_to_block (&block, &post_block); + + dt_parm = var; + dt_post_end_block = &post_end_block; + + gfc_add_expr_to_block (&block, gfc_trans_code (code->block->next)); + + gfc_add_block_to_block (&block, &post_iu_block); + + dt_parm = NULL; + dt_post_end_block = NULL; + + return gfc_finish_block (&block); +} + + +/* Translate the IOLENGTH form of an INQUIRE statement. We treat + this as a third sort of data transfer statement, except that + lengths are summed instead of actually transferring any data. */ + +tree +gfc_trans_iolength (gfc_code * code) +{ + last_dt = IOLENGTH; + return build_dt (iocall[IOCALL_IOLENGTH], code); +} + + +/* Translate a READ statement. */ + +tree +gfc_trans_read (gfc_code * code) +{ + last_dt = READ; + return build_dt (iocall[IOCALL_READ], code); +} + + +/* Translate a WRITE statement */ + +tree +gfc_trans_write (gfc_code * code) +{ + last_dt = WRITE; + return build_dt (iocall[IOCALL_WRITE], code); +} + + +/* Finish a data transfer statement. */ + +tree +gfc_trans_dt_end (gfc_code * code) +{ + tree function, tmp; + stmtblock_t block; + + gfc_init_block (&block); + + switch (last_dt) + { + case READ: + function = iocall[IOCALL_READ_DONE]; + break; + + case WRITE: + function = iocall[IOCALL_WRITE_DONE]; + break; + + case IOLENGTH: + function = iocall[IOCALL_IOLENGTH_DONE]; + break; + + default: + gcc_unreachable (); + } + + tmp = build_fold_addr_expr (dt_parm); + tmp = build_call_expr (function, 1, tmp); + gfc_add_expr_to_block (&block, tmp); + gfc_add_block_to_block (&block, dt_post_end_block); + gfc_init_block (dt_post_end_block); + + if (last_dt != IOLENGTH) + { + gcc_assert (code->ext.dt != NULL); + io_result (&block, dt_parm, code->ext.dt->err, + code->ext.dt->end, code->ext.dt->eor); + } + + return gfc_finish_block (&block); +} + +static void +transfer_expr (gfc_se * se, gfc_typespec * ts, tree addr_expr, gfc_code * code); + +/* Given an array field in a derived type variable, generate the code + for the loop that iterates over array elements, and the code that + accesses those array elements. Use transfer_expr to generate code + for transferring that element. Because elements may also be + derived types, transfer_expr and transfer_array_component are mutually + recursive. */ + +static tree +transfer_array_component (tree expr, gfc_component * cm, locus * where) +{ + tree tmp; + stmtblock_t body; + stmtblock_t block; + gfc_loopinfo loop; + int n; + gfc_ss *ss; + gfc_se se; + + gfc_start_block (&block); + gfc_init_se (&se, NULL); + + /* Create and initialize Scalarization Status. Unlike in + gfc_trans_transfer, we can't simply use gfc_walk_expr to take + care of this task, because we don't have a gfc_expr at hand. + Build one manually, as in gfc_trans_subarray_assign. */ + + ss = gfc_get_ss (); + ss->type = GFC_SS_COMPONENT; + ss->expr = NULL; + ss->shape = gfc_get_shape (cm->as->rank); + ss->next = gfc_ss_terminator; + ss->data.info.dimen = cm->as->rank; + ss->data.info.descriptor = expr; + ss->data.info.data = gfc_conv_array_data (expr); + ss->data.info.offset = gfc_conv_array_offset (expr); + for (n = 0; n < cm->as->rank; n++) + { + ss->data.info.dim[n] = n; + ss->data.info.start[n] = gfc_conv_array_lbound (expr, n); + ss->data.info.stride[n] = gfc_index_one_node; + + mpz_init (ss->shape[n]); + mpz_sub (ss->shape[n], cm->as->upper[n]->value.integer, + cm->as->lower[n]->value.integer); + mpz_add_ui (ss->shape[n], ss->shape[n], 1); + } + + /* Once we got ss, we use scalarizer to create the loop. */ + + gfc_init_loopinfo (&loop); + gfc_add_ss_to_loop (&loop, ss); + gfc_conv_ss_startstride (&loop); + gfc_conv_loop_setup (&loop, where); + gfc_mark_ss_chain_used (ss, 1); + gfc_start_scalarized_body (&loop, &body); + + gfc_copy_loopinfo_to_se (&se, &loop); + se.ss = ss; + + /* gfc_conv_tmp_array_ref assumes that se.expr contains the array. */ + se.expr = expr; + gfc_conv_tmp_array_ref (&se); + + /* Now se.expr contains an element of the array. Take the address and pass + it to the IO routines. */ + tmp = build_fold_addr_expr (se.expr); + transfer_expr (&se, &cm->ts, tmp, NULL); + + /* We are done now with the loop body. Wrap up the scalarizer and + return. */ + + gfc_add_block_to_block (&body, &se.pre); + gfc_add_block_to_block (&body, &se.post); + + gfc_trans_scalarizing_loops (&loop, &body); + + gfc_add_block_to_block (&block, &loop.pre); + gfc_add_block_to_block (&block, &loop.post); + + for (n = 0; n < cm->as->rank; n++) + mpz_clear (ss->shape[n]); + gfc_free (ss->shape); + + gfc_cleanup_loop (&loop); + + return gfc_finish_block (&block); +} + +/* Generate the call for a scalar transfer node. */ + +static void +transfer_expr (gfc_se * se, gfc_typespec * ts, tree addr_expr, gfc_code * code) +{ + tree tmp, function, arg2, arg3, field, expr; + gfc_component *c; + int kind; + + /* It is possible to get a C_NULL_PTR or C_NULL_FUNPTR expression here if + the user says something like: print *, 'c_null_ptr: ', c_null_ptr + We need to translate the expression to a constant if it's either + C_NULL_PTR or C_NULL_FUNPTR. We could also get a user variable of + type C_PTR or C_FUNPTR, in which case the ts->type may no longer be + BT_DERIVED (could have been changed by gfc_conv_expr). */ + if ((ts->type == BT_DERIVED && ts->is_iso_c == 1 && ts->derived != NULL) + || (ts->derived != NULL && ts->derived->ts.is_iso_c == 1)) + { + /* C_PTR and C_FUNPTR have private components which means they can not + be printed. However, if -std=gnu and not -pedantic, allow + the component to be printed to help debugging. */ + if (gfc_notification_std (GFC_STD_GNU) != SILENT) + { + gfc_error_now ("Derived type '%s' at %L has PRIVATE components", + ts->derived->name, code != NULL ? &(code->loc) : + &gfc_current_locus); + return; + } + + ts->type = ts->derived->ts.type; + ts->kind = ts->derived->ts.kind; + ts->f90_type = ts->derived->ts.f90_type; + } + + kind = ts->kind; + function = NULL; + arg2 = NULL; + arg3 = NULL; + + switch (ts->type) + { + case BT_INTEGER: + arg2 = build_int_cst (NULL_TREE, kind); + function = iocall[IOCALL_X_INTEGER]; + break; + + case BT_REAL: + arg2 = build_int_cst (NULL_TREE, kind); + function = iocall[IOCALL_X_REAL]; + break; + + case BT_COMPLEX: + arg2 = build_int_cst (NULL_TREE, kind); + function = iocall[IOCALL_X_COMPLEX]; + break; + + case BT_LOGICAL: + arg2 = build_int_cst (NULL_TREE, kind); + function = iocall[IOCALL_X_LOGICAL]; + break; + + case BT_CHARACTER: + if (kind == 4) + { + if (se->string_length) + arg2 = se->string_length; + else + { + tmp = build_fold_indirect_ref (addr_expr); + gcc_assert (TREE_CODE (TREE_TYPE (tmp)) == ARRAY_TYPE); + arg2 = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (tmp))); + arg2 = fold_convert (gfc_charlen_type_node, arg2); + } + arg3 = build_int_cst (NULL_TREE, kind); + function = iocall[IOCALL_X_CHARACTER_WIDE]; + tmp = build_fold_addr_expr (dt_parm); + tmp = build_call_expr (function, 4, tmp, addr_expr, arg2, arg3); + gfc_add_expr_to_block (&se->pre, tmp); + gfc_add_block_to_block (&se->pre, &se->post); + return; + } + /* Fall through. */ + case BT_HOLLERITH: + if (se->string_length) + arg2 = se->string_length; + else + { + tmp = build_fold_indirect_ref (addr_expr); + gcc_assert (TREE_CODE (TREE_TYPE (tmp)) == ARRAY_TYPE); + arg2 = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (tmp))); + } + function = iocall[IOCALL_X_CHARACTER]; + break; + + case BT_DERIVED: + /* Recurse into the elements of the derived type. */ + expr = gfc_evaluate_now (addr_expr, &se->pre); + expr = build_fold_indirect_ref (expr); + + for (c = ts->derived->components; c; c = c->next) + { + field = c->backend_decl; + gcc_assert (field && TREE_CODE (field) == FIELD_DECL); + + tmp = fold_build3 (COMPONENT_REF, TREE_TYPE (field), + expr, field, NULL_TREE); + + if (c->attr.dimension) + { + tmp = transfer_array_component (tmp, c, & code->loc); + gfc_add_expr_to_block (&se->pre, tmp); + } + else + { + if (!c->attr.pointer) + tmp = build_fold_addr_expr (tmp); + transfer_expr (se, &c->ts, tmp, code); + } + } + return; + + default: + internal_error ("Bad IO basetype (%d)", ts->type); + } + + tmp = build_fold_addr_expr (dt_parm); + tmp = build_call_expr (function, 3, tmp, addr_expr, arg2); + gfc_add_expr_to_block (&se->pre, tmp); + gfc_add_block_to_block (&se->pre, &se->post); + +} + + +/* Generate a call to pass an array descriptor to the IO library. The + array should be of one of the intrinsic types. */ + +static void +transfer_array_desc (gfc_se * se, gfc_typespec * ts, tree addr_expr) +{ + tree tmp, charlen_arg, kind_arg; + + if (ts->type == BT_CHARACTER) + charlen_arg = se->string_length; + else + charlen_arg = build_int_cst (NULL_TREE, 0); + + kind_arg = build_int_cst (NULL_TREE, ts->kind); + + tmp = build_fold_addr_expr (dt_parm); + tmp = build_call_expr (iocall[IOCALL_X_ARRAY], 4, + tmp, addr_expr, kind_arg, charlen_arg); + gfc_add_expr_to_block (&se->pre, tmp); + gfc_add_block_to_block (&se->pre, &se->post); +} + + +/* gfc_trans_transfer()-- Translate a TRANSFER code node */ + +tree +gfc_trans_transfer (gfc_code * code) +{ + stmtblock_t block, body; + gfc_loopinfo loop; + gfc_expr *expr; + gfc_ref *ref; + gfc_ss *ss; + gfc_se se; + tree tmp; + int n; + + gfc_start_block (&block); + gfc_init_block (&body); + + expr = code->expr; + ss = gfc_walk_expr (expr); + + ref = NULL; + gfc_init_se (&se, NULL); + + if (ss == gfc_ss_terminator) + { + /* Transfer a scalar value. */ + gfc_conv_expr_reference (&se, expr); + transfer_expr (&se, &expr->ts, se.expr, code); + } + else + { + /* Transfer an array. If it is an array of an intrinsic + type, pass the descriptor to the library. Otherwise + scalarize the transfer. */ + if (expr->ref) + { + for (ref = expr->ref; ref && ref->type != REF_ARRAY; + ref = ref->next); + gcc_assert (ref->type == REF_ARRAY); + } + + if (expr->ts.type != BT_DERIVED + && ref && ref->next == NULL + && !is_subref_array (expr)) + { + bool seen_vector = false; + + if (ref && ref->u.ar.type == AR_SECTION) + { + for (n = 0; n < ref->u.ar.dimen; n++) + if (ref->u.ar.dimen_type[n] == DIMEN_VECTOR) + seen_vector = true; + } + + if (seen_vector && last_dt == READ) + { + /* Create a temp, read to that and copy it back. */ + gfc_conv_subref_array_arg (&se, expr, 0, INTENT_OUT); + tmp = se.expr; + } + else + { + /* Get the descriptor. */ + gfc_conv_expr_descriptor (&se, expr, ss); + tmp = build_fold_addr_expr (se.expr); + } + + transfer_array_desc (&se, &expr->ts, tmp); + goto finish_block_label; + } + + /* Initialize the scalarizer. */ + gfc_init_loopinfo (&loop); + gfc_add_ss_to_loop (&loop, ss); + + /* Initialize the loop. */ + gfc_conv_ss_startstride (&loop); + gfc_conv_loop_setup (&loop, &code->expr->where); + + /* The main loop body. */ + gfc_mark_ss_chain_used (ss, 1); + gfc_start_scalarized_body (&loop, &body); + + gfc_copy_loopinfo_to_se (&se, &loop); + se.ss = ss; + + gfc_conv_expr_reference (&se, expr); + transfer_expr (&se, &expr->ts, se.expr, code); + } + + finish_block_label: + + gfc_add_block_to_block (&body, &se.pre); + gfc_add_block_to_block (&body, &se.post); + + if (se.ss == NULL) + tmp = gfc_finish_block (&body); + else + { + gcc_assert (se.ss == gfc_ss_terminator); + gfc_trans_scalarizing_loops (&loop, &body); + + gfc_add_block_to_block (&loop.pre, &loop.post); + tmp = gfc_finish_block (&loop.pre); + gfc_cleanup_loop (&loop); + } + + gfc_add_expr_to_block (&block, tmp); + + return gfc_finish_block (&block); +} + +#include "gt-fortran-trans-io.h" + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-openmp.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-openmp.c new file mode 100644 index 0000000000..04ec4d4c12 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-openmp.c @@ -0,0 +1,1591 @@ +/* OpenMP directive translation -- generate GCC trees from gfc_code. + Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + Contributed by Jakub Jelinek + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "gimple.h" +#include "ggc.h" +#include "toplev.h" +#include "real.h" +#include "gfortran.h" +#include "trans.h" +#include "trans-stmt.h" +#include "trans-types.h" +#include "trans-array.h" +#include "trans-const.h" +#include "arith.h" + + +/* True if OpenMP should privatize what this DECL points to rather + than the DECL itself. */ + +bool +gfc_omp_privatize_by_reference (const_tree decl) +{ + tree type = TREE_TYPE (decl); + + if (TREE_CODE (type) == REFERENCE_TYPE + && (!DECL_ARTIFICIAL (decl) || TREE_CODE (decl) == PARM_DECL)) + return true; + + if (TREE_CODE (type) == POINTER_TYPE) + { + /* Array POINTER/ALLOCATABLE have aggregate types, all user variables + that have POINTER_TYPE type and don't have GFC_POINTER_TYPE_P + set are supposed to be privatized by reference. */ + if (GFC_POINTER_TYPE_P (type)) + return false; + + if (!DECL_ARTIFICIAL (decl)) + return true; + + /* Some arrays are expanded as DECL_ARTIFICIAL pointers + by the frontend. */ + if (DECL_LANG_SPECIFIC (decl) + && GFC_DECL_SAVED_DESCRIPTOR (decl)) + return true; + } + + return false; +} + +/* True if OpenMP sharing attribute of DECL is predetermined. */ + +enum omp_clause_default_kind +gfc_omp_predetermined_sharing (tree decl) +{ + if (DECL_ARTIFICIAL (decl) && ! GFC_DECL_RESULT (decl)) + return OMP_CLAUSE_DEFAULT_SHARED; + + /* Cray pointees shouldn't be listed in any clauses and should be + gimplified to dereference of the corresponding Cray pointer. + Make them all private, so that they are emitted in the debug + information. */ + if (GFC_DECL_CRAY_POINTEE (decl)) + return OMP_CLAUSE_DEFAULT_PRIVATE; + + /* Assumed-size arrays are predetermined to inherit sharing + attributes of the associated actual argument, which is shared + for all we care. */ + if (TREE_CODE (decl) == PARM_DECL + && GFC_ARRAY_TYPE_P (TREE_TYPE (decl)) + && GFC_TYPE_ARRAY_AKIND (TREE_TYPE (decl)) == GFC_ARRAY_UNKNOWN + && GFC_TYPE_ARRAY_UBOUND (TREE_TYPE (decl), + GFC_TYPE_ARRAY_RANK (TREE_TYPE (decl)) - 1) + == NULL) + return OMP_CLAUSE_DEFAULT_SHARED; + + /* COMMON and EQUIVALENCE decls are shared. They + are only referenced through DECL_VALUE_EXPR of the variables + contained in them. If those are privatized, they will not be + gimplified to the COMMON or EQUIVALENCE decls. */ + if (GFC_DECL_COMMON_OR_EQUIV (decl) && ! DECL_HAS_VALUE_EXPR_P (decl)) + return OMP_CLAUSE_DEFAULT_SHARED; + + if (GFC_DECL_RESULT (decl) && ! DECL_HAS_VALUE_EXPR_P (decl)) + return OMP_CLAUSE_DEFAULT_SHARED; + + return OMP_CLAUSE_DEFAULT_UNSPECIFIED; +} + + +/* Return true if DECL in private clause needs + OMP_CLAUSE_PRIVATE_OUTER_REF on the private clause. */ +bool +gfc_omp_private_outer_ref (tree decl) +{ + tree type = TREE_TYPE (decl); + + if (GFC_DESCRIPTOR_TYPE_P (type) + && GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE) + return true; + + return false; +} + +/* Return code to initialize DECL with its default constructor, or + NULL if there's nothing to do. */ + +tree +gfc_omp_clause_default_ctor (tree clause, tree decl, tree outer) +{ + tree type = TREE_TYPE (decl), rank, size, esize, ptr, cond, then_b, else_b; + stmtblock_t block, cond_block; + + if (! GFC_DESCRIPTOR_TYPE_P (type) + || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE) + return NULL; + + gcc_assert (outer != NULL); + gcc_assert (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_PRIVATE + || OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_LASTPRIVATE); + + /* Allocatable arrays in PRIVATE clauses need to be set to + "not currently allocated" allocation status if outer + array is "not currently allocated", otherwise should be allocated. */ + gfc_start_block (&block); + + gfc_init_block (&cond_block); + + gfc_add_modify (&cond_block, decl, outer); + rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1]; + size = gfc_conv_descriptor_ubound (decl, rank); + size = fold_build2 (MINUS_EXPR, gfc_array_index_type, size, + gfc_conv_descriptor_lbound (decl, rank)); + size = fold_build2 (PLUS_EXPR, gfc_array_index_type, size, + gfc_index_one_node); + if (GFC_TYPE_ARRAY_RANK (type) > 1) + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, + gfc_conv_descriptor_stride (decl, rank)); + esize = fold_convert (gfc_array_index_type, + TYPE_SIZE_UNIT (gfc_get_element_type (type))); + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, esize); + size = gfc_evaluate_now (fold_convert (size_type_node, size), &cond_block); + ptr = gfc_allocate_array_with_status (&cond_block, + build_int_cst (pvoid_type_node, 0), + size, NULL, NULL); + gfc_conv_descriptor_data_set (&cond_block, decl, ptr); + then_b = gfc_finish_block (&cond_block); + + gfc_init_block (&cond_block); + gfc_conv_descriptor_data_set (&cond_block, decl, null_pointer_node); + else_b = gfc_finish_block (&cond_block); + + cond = fold_build2 (NE_EXPR, boolean_type_node, + fold_convert (pvoid_type_node, + gfc_conv_descriptor_data_get (outer)), + null_pointer_node); + gfc_add_expr_to_block (&block, build3 (COND_EXPR, void_type_node, + cond, then_b, else_b)); + + return gfc_finish_block (&block); +} + +/* Build and return code for a copy constructor from SRC to DEST. */ + +tree +gfc_omp_clause_copy_ctor (tree clause, tree dest, tree src) +{ + tree type = TREE_TYPE (dest), ptr, size, esize, rank, call; + stmtblock_t block; + + if (! GFC_DESCRIPTOR_TYPE_P (type) + || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE) + return build2_v (MODIFY_EXPR, dest, src); + + gcc_assert (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_FIRSTPRIVATE); + + /* Allocatable arrays in FIRSTPRIVATE clauses need to be allocated + and copied from SRC. */ + gfc_start_block (&block); + + gfc_add_modify (&block, dest, src); + rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1]; + size = gfc_conv_descriptor_ubound (dest, rank); + size = fold_build2 (MINUS_EXPR, gfc_array_index_type, size, + gfc_conv_descriptor_lbound (dest, rank)); + size = fold_build2 (PLUS_EXPR, gfc_array_index_type, size, + gfc_index_one_node); + if (GFC_TYPE_ARRAY_RANK (type) > 1) + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, + gfc_conv_descriptor_stride (dest, rank)); + esize = fold_convert (gfc_array_index_type, + TYPE_SIZE_UNIT (gfc_get_element_type (type))); + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, esize); + size = gfc_evaluate_now (fold_convert (size_type_node, size), &block); + ptr = gfc_allocate_array_with_status (&block, + build_int_cst (pvoid_type_node, 0), + size, NULL, NULL); + gfc_conv_descriptor_data_set (&block, dest, ptr); + call = build_call_expr (built_in_decls[BUILT_IN_MEMCPY], 3, ptr, + fold_convert (pvoid_type_node, + gfc_conv_descriptor_data_get (src)), + size); + gfc_add_expr_to_block (&block, fold_convert (void_type_node, call)); + + return gfc_finish_block (&block); +} + +/* Similarly, except use an assignment operator instead. */ + +tree +gfc_omp_clause_assign_op (tree clause ATTRIBUTE_UNUSED, tree dest, tree src) +{ + tree type = TREE_TYPE (dest), rank, size, esize, call; + stmtblock_t block; + + if (! GFC_DESCRIPTOR_TYPE_P (type) + || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE) + return build2_v (MODIFY_EXPR, dest, src); + + /* Handle copying allocatable arrays. */ + gfc_start_block (&block); + + rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1]; + size = gfc_conv_descriptor_ubound (dest, rank); + size = fold_build2 (MINUS_EXPR, gfc_array_index_type, size, + gfc_conv_descriptor_lbound (dest, rank)); + size = fold_build2 (PLUS_EXPR, gfc_array_index_type, size, + gfc_index_one_node); + if (GFC_TYPE_ARRAY_RANK (type) > 1) + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, + gfc_conv_descriptor_stride (dest, rank)); + esize = fold_convert (gfc_array_index_type, + TYPE_SIZE_UNIT (gfc_get_element_type (type))); + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, esize); + size = gfc_evaluate_now (fold_convert (size_type_node, size), &block); + call = build_call_expr (built_in_decls[BUILT_IN_MEMCPY], 3, + fold_convert (pvoid_type_node, + gfc_conv_descriptor_data_get (dest)), + fold_convert (pvoid_type_node, + gfc_conv_descriptor_data_get (src)), + size); + gfc_add_expr_to_block (&block, fold_convert (void_type_node, call)); + + return gfc_finish_block (&block); +} + +/* Build and return code destructing DECL. Return NULL if nothing + to be done. */ + +tree +gfc_omp_clause_dtor (tree clause ATTRIBUTE_UNUSED, tree decl) +{ + tree type = TREE_TYPE (decl); + + if (! GFC_DESCRIPTOR_TYPE_P (type) + || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE) + return NULL; + + /* Allocatable arrays in FIRSTPRIVATE/LASTPRIVATE etc. clauses need + to be deallocated if they were allocated. */ + return gfc_trans_dealloc_allocated (decl); +} + + +/* Return true if DECL's DECL_VALUE_EXPR (if any) should be + disregarded in OpenMP construct, because it is going to be + remapped during OpenMP lowering. SHARED is true if DECL + is going to be shared, false if it is going to be privatized. */ + +bool +gfc_omp_disregard_value_expr (tree decl, bool shared) +{ + if (GFC_DECL_COMMON_OR_EQUIV (decl) + && DECL_HAS_VALUE_EXPR_P (decl)) + { + tree value = DECL_VALUE_EXPR (decl); + + if (TREE_CODE (value) == COMPONENT_REF + && TREE_CODE (TREE_OPERAND (value, 0)) == VAR_DECL + && GFC_DECL_COMMON_OR_EQUIV (TREE_OPERAND (value, 0))) + { + /* If variable in COMMON or EQUIVALENCE is privatized, return + true, as just that variable is supposed to be privatized, + not the whole COMMON or whole EQUIVALENCE. + For shared variables in COMMON or EQUIVALENCE, let them be + gimplified to DECL_VALUE_EXPR, so that for multiple shared vars + from the same COMMON or EQUIVALENCE just one sharing of the + whole COMMON or EQUIVALENCE is enough. */ + return ! shared; + } + } + + if (GFC_DECL_RESULT (decl) && DECL_HAS_VALUE_EXPR_P (decl)) + return ! shared; + + return false; +} + +/* Return true if DECL that is shared iff SHARED is true should + be put into OMP_CLAUSE_PRIVATE with OMP_CLAUSE_PRIVATE_DEBUG + flag set. */ + +bool +gfc_omp_private_debug_clause (tree decl, bool shared) +{ + if (GFC_DECL_CRAY_POINTEE (decl)) + return true; + + if (GFC_DECL_COMMON_OR_EQUIV (decl) + && DECL_HAS_VALUE_EXPR_P (decl)) + { + tree value = DECL_VALUE_EXPR (decl); + + if (TREE_CODE (value) == COMPONENT_REF + && TREE_CODE (TREE_OPERAND (value, 0)) == VAR_DECL + && GFC_DECL_COMMON_OR_EQUIV (TREE_OPERAND (value, 0))) + return shared; + } + + return false; +} + +/* Register language specific type size variables as potentially OpenMP + firstprivate variables. */ + +void +gfc_omp_firstprivatize_type_sizes (struct gimplify_omp_ctx *ctx, tree type) +{ + if (GFC_ARRAY_TYPE_P (type) || GFC_DESCRIPTOR_TYPE_P (type)) + { + int r; + + gcc_assert (TYPE_LANG_SPECIFIC (type) != NULL); + for (r = 0; r < GFC_TYPE_ARRAY_RANK (type); r++) + { + omp_firstprivatize_variable (ctx, GFC_TYPE_ARRAY_LBOUND (type, r)); + omp_firstprivatize_variable (ctx, GFC_TYPE_ARRAY_UBOUND (type, r)); + omp_firstprivatize_variable (ctx, GFC_TYPE_ARRAY_STRIDE (type, r)); + } + omp_firstprivatize_variable (ctx, GFC_TYPE_ARRAY_SIZE (type)); + omp_firstprivatize_variable (ctx, GFC_TYPE_ARRAY_OFFSET (type)); + } +} + + +static inline tree +gfc_trans_add_clause (tree node, tree tail) +{ + OMP_CLAUSE_CHAIN (node) = tail; + return node; +} + +static tree +gfc_trans_omp_variable (gfc_symbol *sym) +{ + tree t = gfc_get_symbol_decl (sym); + tree parent_decl; + int parent_flag; + bool return_value; + bool alternate_entry; + bool entry_master; + + return_value = sym->attr.function && sym->result == sym; + alternate_entry = sym->attr.function && sym->attr.entry + && sym->result == sym; + entry_master = sym->attr.result + && sym->ns->proc_name->attr.entry_master + && !gfc_return_by_reference (sym->ns->proc_name); + parent_decl = DECL_CONTEXT (current_function_decl); + + if ((t == parent_decl && return_value) + || (sym->ns && sym->ns->proc_name + && sym->ns->proc_name->backend_decl == parent_decl + && (alternate_entry || entry_master))) + parent_flag = 1; + else + parent_flag = 0; + + /* Special case for assigning the return value of a function. + Self recursive functions must have an explicit return value. */ + if (return_value && (t == current_function_decl || parent_flag)) + t = gfc_get_fake_result_decl (sym, parent_flag); + + /* Similarly for alternate entry points. */ + else if (alternate_entry + && (sym->ns->proc_name->backend_decl == current_function_decl + || parent_flag)) + { + gfc_entry_list *el = NULL; + + for (el = sym->ns->entries; el; el = el->next) + if (sym == el->sym) + { + t = gfc_get_fake_result_decl (sym, parent_flag); + break; + } + } + + else if (entry_master + && (sym->ns->proc_name->backend_decl == current_function_decl + || parent_flag)) + t = gfc_get_fake_result_decl (sym, parent_flag); + + return t; +} + +static tree +gfc_trans_omp_variable_list (enum omp_clause_code code, gfc_namelist *namelist, + tree list) +{ + for (; namelist != NULL; namelist = namelist->next) + if (namelist->sym->attr.referenced) + { + tree t = gfc_trans_omp_variable (namelist->sym); + if (t != error_mark_node) + { + tree node = build_omp_clause (code); + OMP_CLAUSE_DECL (node) = t; + list = gfc_trans_add_clause (node, list); + } + } + return list; +} + +static void +gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where) +{ + gfc_symtree *root1 = NULL, *root2 = NULL, *root3 = NULL, *root4 = NULL; + gfc_symtree *symtree1, *symtree2, *symtree3, *symtree4 = NULL; + gfc_symbol init_val_sym, outer_sym, intrinsic_sym; + gfc_expr *e1, *e2, *e3, *e4; + gfc_ref *ref; + tree decl, backend_decl, stmt; + locus old_loc = gfc_current_locus; + const char *iname; + gfc_try t; + + decl = OMP_CLAUSE_DECL (c); + gfc_current_locus = where; + + /* Create a fake symbol for init value. */ + memset (&init_val_sym, 0, sizeof (init_val_sym)); + init_val_sym.ns = sym->ns; + init_val_sym.name = sym->name; + init_val_sym.ts = sym->ts; + init_val_sym.attr.referenced = 1; + init_val_sym.declared_at = where; + init_val_sym.attr.flavor = FL_VARIABLE; + backend_decl = omp_reduction_init (c, gfc_sym_type (&init_val_sym)); + init_val_sym.backend_decl = backend_decl; + + /* Create a fake symbol for the outer array reference. */ + outer_sym = *sym; + outer_sym.as = gfc_copy_array_spec (sym->as); + outer_sym.attr.dummy = 0; + outer_sym.attr.result = 0; + outer_sym.attr.flavor = FL_VARIABLE; + outer_sym.backend_decl = create_tmp_var_raw (TREE_TYPE (decl), NULL); + + /* Create fake symtrees for it. */ + symtree1 = gfc_new_symtree (&root1, sym->name); + symtree1->n.sym = sym; + gcc_assert (symtree1 == root1); + + symtree2 = gfc_new_symtree (&root2, sym->name); + symtree2->n.sym = &init_val_sym; + gcc_assert (symtree2 == root2); + + symtree3 = gfc_new_symtree (&root3, sym->name); + symtree3->n.sym = &outer_sym; + gcc_assert (symtree3 == root3); + + /* Create expressions. */ + e1 = gfc_get_expr (); + e1->expr_type = EXPR_VARIABLE; + e1->where = where; + e1->symtree = symtree1; + e1->ts = sym->ts; + e1->ref = ref = gfc_get_ref (); + ref->type = REF_ARRAY; + ref->u.ar.where = where; + ref->u.ar.as = sym->as; + ref->u.ar.type = AR_FULL; + ref->u.ar.dimen = 0; + t = gfc_resolve_expr (e1); + gcc_assert (t == SUCCESS); + + e2 = gfc_get_expr (); + e2->expr_type = EXPR_VARIABLE; + e2->where = where; + e2->symtree = symtree2; + e2->ts = sym->ts; + t = gfc_resolve_expr (e2); + gcc_assert (t == SUCCESS); + + e3 = gfc_copy_expr (e1); + e3->symtree = symtree3; + t = gfc_resolve_expr (e3); + gcc_assert (t == SUCCESS); + + iname = NULL; + switch (OMP_CLAUSE_REDUCTION_CODE (c)) + { + case PLUS_EXPR: + case MINUS_EXPR: + e4 = gfc_add (e3, e1); + break; + case MULT_EXPR: + e4 = gfc_multiply (e3, e1); + break; + case TRUTH_ANDIF_EXPR: + e4 = gfc_and (e3, e1); + break; + case TRUTH_ORIF_EXPR: + e4 = gfc_or (e3, e1); + break; + case EQ_EXPR: + e4 = gfc_eqv (e3, e1); + break; + case NE_EXPR: + e4 = gfc_neqv (e3, e1); + break; + case MIN_EXPR: + iname = "min"; + break; + case MAX_EXPR: + iname = "max"; + break; + case BIT_AND_EXPR: + iname = "iand"; + break; + case BIT_IOR_EXPR: + iname = "ior"; + break; + case BIT_XOR_EXPR: + iname = "ieor"; + break; + default: + gcc_unreachable (); + } + if (iname != NULL) + { + memset (&intrinsic_sym, 0, sizeof (intrinsic_sym)); + intrinsic_sym.ns = sym->ns; + intrinsic_sym.name = iname; + intrinsic_sym.ts = sym->ts; + intrinsic_sym.attr.referenced = 1; + intrinsic_sym.attr.intrinsic = 1; + intrinsic_sym.attr.function = 1; + intrinsic_sym.result = &intrinsic_sym; + intrinsic_sym.declared_at = where; + + symtree4 = gfc_new_symtree (&root4, iname); + symtree4->n.sym = &intrinsic_sym; + gcc_assert (symtree4 == root4); + + e4 = gfc_get_expr (); + e4->expr_type = EXPR_FUNCTION; + e4->where = where; + e4->symtree = symtree4; + e4->value.function.isym = gfc_find_function (iname); + e4->value.function.actual = gfc_get_actual_arglist (); + e4->value.function.actual->expr = e3; + e4->value.function.actual->next = gfc_get_actual_arglist (); + e4->value.function.actual->next->expr = e1; + } + /* e1 and e3 have been stored as arguments of e4, avoid sharing. */ + e1 = gfc_copy_expr (e1); + e3 = gfc_copy_expr (e3); + t = gfc_resolve_expr (e4); + gcc_assert (t == SUCCESS); + + /* Create the init statement list. */ + pushlevel (0); + if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)) + && GFC_TYPE_ARRAY_AKIND (TREE_TYPE (decl)) == GFC_ARRAY_ALLOCATABLE) + { + /* If decl is an allocatable array, it needs to be allocated + with the same bounds as the outer var. */ + tree type = TREE_TYPE (decl), rank, size, esize, ptr; + stmtblock_t block; + + gfc_start_block (&block); + + gfc_add_modify (&block, decl, outer_sym.backend_decl); + rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1]; + size = gfc_conv_descriptor_ubound (decl, rank); + size = fold_build2 (MINUS_EXPR, gfc_array_index_type, size, + gfc_conv_descriptor_lbound (decl, rank)); + size = fold_build2 (PLUS_EXPR, gfc_array_index_type, size, + gfc_index_one_node); + if (GFC_TYPE_ARRAY_RANK (type) > 1) + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, + gfc_conv_descriptor_stride (decl, rank)); + esize = fold_convert (gfc_array_index_type, + TYPE_SIZE_UNIT (gfc_get_element_type (type))); + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, esize); + size = gfc_evaluate_now (fold_convert (size_type_node, size), &block); + ptr = gfc_allocate_array_with_status (&block, + build_int_cst (pvoid_type_node, 0), + size, NULL, NULL); + gfc_conv_descriptor_data_set (&block, decl, ptr); + gfc_add_expr_to_block (&block, gfc_trans_assignment (e1, e2, false)); + stmt = gfc_finish_block (&block); + } + else + stmt = gfc_trans_assignment (e1, e2, false); + if (TREE_CODE (stmt) != BIND_EXPR) + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0)); + else + poplevel (0, 0, 0); + OMP_CLAUSE_REDUCTION_INIT (c) = stmt; + + /* Create the merge statement list. */ + pushlevel (0); + if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)) + && GFC_TYPE_ARRAY_AKIND (TREE_TYPE (decl)) == GFC_ARRAY_ALLOCATABLE) + { + /* If decl is an allocatable array, it needs to be deallocated + afterwards. */ + stmtblock_t block; + + gfc_start_block (&block); + gfc_add_expr_to_block (&block, gfc_trans_assignment (e3, e4, false)); + gfc_add_expr_to_block (&block, gfc_trans_dealloc_allocated (decl)); + stmt = gfc_finish_block (&block); + } + else + stmt = gfc_trans_assignment (e3, e4, false); + if (TREE_CODE (stmt) != BIND_EXPR) + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0)); + else + poplevel (0, 0, 0); + OMP_CLAUSE_REDUCTION_MERGE (c) = stmt; + + /* And stick the placeholder VAR_DECL into the clause as well. */ + OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) = outer_sym.backend_decl; + + gfc_current_locus = old_loc; + + gfc_free_expr (e1); + gfc_free_expr (e2); + gfc_free_expr (e3); + gfc_free_expr (e4); + gfc_free (symtree1); + gfc_free (symtree2); + gfc_free (symtree3); + if (symtree4) + gfc_free (symtree4); + gfc_free_array_spec (outer_sym.as); +} + +static tree +gfc_trans_omp_reduction_list (gfc_namelist *namelist, tree list, + enum tree_code reduction_code, locus where) +{ + for (; namelist != NULL; namelist = namelist->next) + if (namelist->sym->attr.referenced) + { + tree t = gfc_trans_omp_variable (namelist->sym); + if (t != error_mark_node) + { + tree node = build_omp_clause (OMP_CLAUSE_REDUCTION); + OMP_CLAUSE_DECL (node) = t; + OMP_CLAUSE_REDUCTION_CODE (node) = reduction_code; + if (namelist->sym->attr.dimension) + gfc_trans_omp_array_reduction (node, namelist->sym, where); + list = gfc_trans_add_clause (node, list); + } + } + return list; +} + +static tree +gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, + locus where) +{ + tree omp_clauses = NULL_TREE, chunk_size, c, old_clauses; + int list; + enum omp_clause_code clause_code; + gfc_se se; + + if (clauses == NULL) + return NULL_TREE; + + for (list = 0; list < OMP_LIST_NUM; list++) + { + gfc_namelist *n = clauses->lists[list]; + + if (n == NULL) + continue; + if (list >= OMP_LIST_REDUCTION_FIRST + && list <= OMP_LIST_REDUCTION_LAST) + { + enum tree_code reduction_code; + switch (list) + { + case OMP_LIST_PLUS: + reduction_code = PLUS_EXPR; + break; + case OMP_LIST_MULT: + reduction_code = MULT_EXPR; + break; + case OMP_LIST_SUB: + reduction_code = MINUS_EXPR; + break; + case OMP_LIST_AND: + reduction_code = TRUTH_ANDIF_EXPR; + break; + case OMP_LIST_OR: + reduction_code = TRUTH_ORIF_EXPR; + break; + case OMP_LIST_EQV: + reduction_code = EQ_EXPR; + break; + case OMP_LIST_NEQV: + reduction_code = NE_EXPR; + break; + case OMP_LIST_MAX: + reduction_code = MAX_EXPR; + break; + case OMP_LIST_MIN: + reduction_code = MIN_EXPR; + break; + case OMP_LIST_IAND: + reduction_code = BIT_AND_EXPR; + break; + case OMP_LIST_IOR: + reduction_code = BIT_IOR_EXPR; + break; + case OMP_LIST_IEOR: + reduction_code = BIT_XOR_EXPR; + break; + default: + gcc_unreachable (); + } + old_clauses = omp_clauses; + omp_clauses + = gfc_trans_omp_reduction_list (n, omp_clauses, reduction_code, + where); + continue; + } + switch (list) + { + case OMP_LIST_PRIVATE: + clause_code = OMP_CLAUSE_PRIVATE; + goto add_clause; + case OMP_LIST_SHARED: + clause_code = OMP_CLAUSE_SHARED; + goto add_clause; + case OMP_LIST_FIRSTPRIVATE: + clause_code = OMP_CLAUSE_FIRSTPRIVATE; + goto add_clause; + case OMP_LIST_LASTPRIVATE: + clause_code = OMP_CLAUSE_LASTPRIVATE; + goto add_clause; + case OMP_LIST_COPYIN: + clause_code = OMP_CLAUSE_COPYIN; + goto add_clause; + case OMP_LIST_COPYPRIVATE: + clause_code = OMP_CLAUSE_COPYPRIVATE; + /* FALLTHROUGH */ + add_clause: + omp_clauses + = gfc_trans_omp_variable_list (clause_code, n, omp_clauses); + break; + default: + break; + } + } + + if (clauses->if_expr) + { + tree if_var; + + gfc_init_se (&se, NULL); + gfc_conv_expr (&se, clauses->if_expr); + gfc_add_block_to_block (block, &se.pre); + if_var = gfc_evaluate_now (se.expr, block); + gfc_add_block_to_block (block, &se.post); + + c = build_omp_clause (OMP_CLAUSE_IF); + OMP_CLAUSE_IF_EXPR (c) = if_var; + omp_clauses = gfc_trans_add_clause (c, omp_clauses); + } + + if (clauses->num_threads) + { + tree num_threads; + + gfc_init_se (&se, NULL); + gfc_conv_expr (&se, clauses->num_threads); + gfc_add_block_to_block (block, &se.pre); + num_threads = gfc_evaluate_now (se.expr, block); + gfc_add_block_to_block (block, &se.post); + + c = build_omp_clause (OMP_CLAUSE_NUM_THREADS); + OMP_CLAUSE_NUM_THREADS_EXPR (c) = num_threads; + omp_clauses = gfc_trans_add_clause (c, omp_clauses); + } + + chunk_size = NULL_TREE; + if (clauses->chunk_size) + { + gfc_init_se (&se, NULL); + gfc_conv_expr (&se, clauses->chunk_size); + gfc_add_block_to_block (block, &se.pre); + chunk_size = gfc_evaluate_now (se.expr, block); + gfc_add_block_to_block (block, &se.post); + } + + if (clauses->sched_kind != OMP_SCHED_NONE) + { + c = build_omp_clause (OMP_CLAUSE_SCHEDULE); + OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = chunk_size; + switch (clauses->sched_kind) + { + case OMP_SCHED_STATIC: + OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC; + break; + case OMP_SCHED_DYNAMIC: + OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC; + break; + case OMP_SCHED_GUIDED: + OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED; + break; + case OMP_SCHED_RUNTIME: + OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME; + break; + case OMP_SCHED_AUTO: + OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_AUTO; + break; + default: + gcc_unreachable (); + } + omp_clauses = gfc_trans_add_clause (c, omp_clauses); + } + + if (clauses->default_sharing != OMP_DEFAULT_UNKNOWN) + { + c = build_omp_clause (OMP_CLAUSE_DEFAULT); + switch (clauses->default_sharing) + { + case OMP_DEFAULT_NONE: + OMP_CLAUSE_DEFAULT_KIND (c) = OMP_CLAUSE_DEFAULT_NONE; + break; + case OMP_DEFAULT_SHARED: + OMP_CLAUSE_DEFAULT_KIND (c) = OMP_CLAUSE_DEFAULT_SHARED; + break; + case OMP_DEFAULT_PRIVATE: + OMP_CLAUSE_DEFAULT_KIND (c) = OMP_CLAUSE_DEFAULT_PRIVATE; + break; + case OMP_DEFAULT_FIRSTPRIVATE: + OMP_CLAUSE_DEFAULT_KIND (c) = OMP_CLAUSE_DEFAULT_FIRSTPRIVATE; + break; + default: + gcc_unreachable (); + } + omp_clauses = gfc_trans_add_clause (c, omp_clauses); + } + + if (clauses->nowait) + { + c = build_omp_clause (OMP_CLAUSE_NOWAIT); + omp_clauses = gfc_trans_add_clause (c, omp_clauses); + } + + if (clauses->ordered) + { + c = build_omp_clause (OMP_CLAUSE_ORDERED); + omp_clauses = gfc_trans_add_clause (c, omp_clauses); + } + + if (clauses->untied) + { + c = build_omp_clause (OMP_CLAUSE_UNTIED); + omp_clauses = gfc_trans_add_clause (c, omp_clauses); + } + + if (clauses->collapse) + { + c = build_omp_clause (OMP_CLAUSE_COLLAPSE); + OMP_CLAUSE_COLLAPSE_EXPR (c) = build_int_cst (NULL, clauses->collapse); + omp_clauses = gfc_trans_add_clause (c, omp_clauses); + } + + return omp_clauses; +} + +/* Like gfc_trans_code, but force creation of a BIND_EXPR around it. */ + +static tree +gfc_trans_omp_code (gfc_code *code, bool force_empty) +{ + tree stmt; + + pushlevel (0); + stmt = gfc_trans_code (code); + if (TREE_CODE (stmt) != BIND_EXPR) + { + if (!IS_EMPTY_STMT (stmt) || force_empty) + { + tree block = poplevel (1, 0, 0); + stmt = build3_v (BIND_EXPR, NULL, stmt, block); + } + else + poplevel (0, 0, 0); + } + else + poplevel (0, 0, 0); + return stmt; +} + + +static tree gfc_trans_omp_sections (gfc_code *, gfc_omp_clauses *); +static tree gfc_trans_omp_workshare (gfc_code *, gfc_omp_clauses *); + +static tree +gfc_trans_omp_atomic (gfc_code *code) +{ + gfc_se lse; + gfc_se rse; + gfc_expr *expr2, *e; + gfc_symbol *var; + stmtblock_t block; + tree lhsaddr, type, rhs, x; + enum tree_code op = ERROR_MARK; + bool var_on_left = false; + + code = code->block->next; + gcc_assert (code->op == EXEC_ASSIGN); + gcc_assert (code->next == NULL); + var = code->expr->symtree->n.sym; + + gfc_init_se (&lse, NULL); + gfc_init_se (&rse, NULL); + gfc_start_block (&block); + + gfc_conv_expr (&lse, code->expr); + gfc_add_block_to_block (&block, &lse.pre); + type = TREE_TYPE (lse.expr); + lhsaddr = gfc_build_addr_expr (NULL, lse.expr); + + expr2 = code->expr2; + if (expr2->expr_type == EXPR_FUNCTION + && expr2->value.function.isym->id == GFC_ISYM_CONVERSION) + expr2 = expr2->value.function.actual->expr; + + if (expr2->expr_type == EXPR_OP) + { + gfc_expr *e; + switch (expr2->value.op.op) + { + case INTRINSIC_PLUS: + op = PLUS_EXPR; + break; + case INTRINSIC_TIMES: + op = MULT_EXPR; + break; + case INTRINSIC_MINUS: + op = MINUS_EXPR; + break; + case INTRINSIC_DIVIDE: + if (expr2->ts.type == BT_INTEGER) + op = TRUNC_DIV_EXPR; + else + op = RDIV_EXPR; + break; + case INTRINSIC_AND: + op = TRUTH_ANDIF_EXPR; + break; + case INTRINSIC_OR: + op = TRUTH_ORIF_EXPR; + break; + case INTRINSIC_EQV: + op = EQ_EXPR; + break; + case INTRINSIC_NEQV: + op = NE_EXPR; + break; + default: + gcc_unreachable (); + } + e = expr2->value.op.op1; + if (e->expr_type == EXPR_FUNCTION + && e->value.function.isym->id == GFC_ISYM_CONVERSION) + e = e->value.function.actual->expr; + if (e->expr_type == EXPR_VARIABLE + && e->symtree != NULL + && e->symtree->n.sym == var) + { + expr2 = expr2->value.op.op2; + var_on_left = true; + } + else + { + e = expr2->value.op.op2; + if (e->expr_type == EXPR_FUNCTION + && e->value.function.isym->id == GFC_ISYM_CONVERSION) + e = e->value.function.actual->expr; + gcc_assert (e->expr_type == EXPR_VARIABLE + && e->symtree != NULL + && e->symtree->n.sym == var); + expr2 = expr2->value.op.op1; + var_on_left = false; + } + gfc_conv_expr (&rse, expr2); + gfc_add_block_to_block (&block, &rse.pre); + } + else + { + gcc_assert (expr2->expr_type == EXPR_FUNCTION); + switch (expr2->value.function.isym->id) + { + case GFC_ISYM_MIN: + op = MIN_EXPR; + break; + case GFC_ISYM_MAX: + op = MAX_EXPR; + break; + case GFC_ISYM_IAND: + op = BIT_AND_EXPR; + break; + case GFC_ISYM_IOR: + op = BIT_IOR_EXPR; + break; + case GFC_ISYM_IEOR: + op = BIT_XOR_EXPR; + break; + default: + gcc_unreachable (); + } + e = expr2->value.function.actual->expr; + gcc_assert (e->expr_type == EXPR_VARIABLE + && e->symtree != NULL + && e->symtree->n.sym == var); + + gfc_conv_expr (&rse, expr2->value.function.actual->next->expr); + gfc_add_block_to_block (&block, &rse.pre); + if (expr2->value.function.actual->next->next != NULL) + { + tree accum = gfc_create_var (TREE_TYPE (rse.expr), NULL); + gfc_actual_arglist *arg; + + gfc_add_modify (&block, accum, rse.expr); + for (arg = expr2->value.function.actual->next->next; arg; + arg = arg->next) + { + gfc_init_block (&rse.pre); + gfc_conv_expr (&rse, arg->expr); + gfc_add_block_to_block (&block, &rse.pre); + x = fold_build2 (op, TREE_TYPE (accum), accum, rse.expr); + gfc_add_modify (&block, accum, x); + } + + rse.expr = accum; + } + + expr2 = expr2->value.function.actual->next->expr; + } + + lhsaddr = save_expr (lhsaddr); + rhs = gfc_evaluate_now (rse.expr, &block); + x = convert (TREE_TYPE (rhs), build_fold_indirect_ref (lhsaddr)); + + if (var_on_left) + x = fold_build2 (op, TREE_TYPE (rhs), x, rhs); + else + x = fold_build2 (op, TREE_TYPE (rhs), rhs, x); + + if (TREE_CODE (TREE_TYPE (rhs)) == COMPLEX_TYPE + && TREE_CODE (type) != COMPLEX_TYPE) + x = fold_build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (rhs)), x); + + x = build2_v (OMP_ATOMIC, lhsaddr, convert (type, x)); + gfc_add_expr_to_block (&block, x); + + gfc_add_block_to_block (&block, &lse.pre); + gfc_add_block_to_block (&block, &rse.pre); + + return gfc_finish_block (&block); +} + +static tree +gfc_trans_omp_barrier (void) +{ + tree decl = built_in_decls [BUILT_IN_GOMP_BARRIER]; + return build_call_expr (decl, 0); +} + +static tree +gfc_trans_omp_critical (gfc_code *code) +{ + tree name = NULL_TREE, stmt; + if (code->ext.omp_name != NULL) + name = get_identifier (code->ext.omp_name); + stmt = gfc_trans_code (code->block->next); + return build2 (OMP_CRITICAL, void_type_node, stmt, name); +} + +static tree +gfc_trans_omp_do (gfc_code *code, stmtblock_t *pblock, + gfc_omp_clauses *do_clauses, tree par_clauses) +{ + gfc_se se; + tree dovar, stmt, from, to, step, type, init, cond, incr; + tree count = NULL_TREE, cycle_label, tmp, omp_clauses; + stmtblock_t block; + stmtblock_t body; + gfc_omp_clauses *clauses = code->ext.omp_clauses; + gfc_code *outermost; + int i, collapse = clauses->collapse; + tree dovar_init = NULL_TREE; + + if (collapse <= 0) + collapse = 1; + + outermost = code = code->block->next; + gcc_assert (code->op == EXEC_DO); + + init = make_tree_vec (collapse); + cond = make_tree_vec (collapse); + incr = make_tree_vec (collapse); + + if (pblock == NULL) + { + gfc_start_block (&block); + pblock = █ + } + + omp_clauses = gfc_trans_omp_clauses (pblock, do_clauses, code->loc); + + for (i = 0; i < collapse; i++) + { + int simple = 0; + int dovar_found = 0; + + if (clauses) + { + gfc_namelist *n; + for (n = clauses->lists[OMP_LIST_LASTPRIVATE]; n != NULL; + n = n->next) + if (code->ext.iterator->var->symtree->n.sym == n->sym) + break; + if (n != NULL) + dovar_found = 1; + else if (n == NULL) + for (n = clauses->lists[OMP_LIST_PRIVATE]; n != NULL; n = n->next) + if (code->ext.iterator->var->symtree->n.sym == n->sym) + break; + if (n != NULL) + dovar_found++; + } + + /* Evaluate all the expressions in the iterator. */ + gfc_init_se (&se, NULL); + gfc_conv_expr_lhs (&se, code->ext.iterator->var); + gfc_add_block_to_block (pblock, &se.pre); + dovar = se.expr; + type = TREE_TYPE (dovar); + gcc_assert (TREE_CODE (type) == INTEGER_TYPE); + + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, code->ext.iterator->start); + gfc_add_block_to_block (pblock, &se.pre); + from = gfc_evaluate_now (se.expr, pblock); + + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, code->ext.iterator->end); + gfc_add_block_to_block (pblock, &se.pre); + to = gfc_evaluate_now (se.expr, pblock); + + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, code->ext.iterator->step); + gfc_add_block_to_block (pblock, &se.pre); + step = gfc_evaluate_now (se.expr, pblock); + + /* Special case simple loops. */ + if (integer_onep (step)) + simple = 1; + else if (tree_int_cst_equal (step, integer_minus_one_node)) + simple = -1; + + /* Loop body. */ + if (simple) + { + TREE_VEC_ELT (init, i) = build2_v (MODIFY_EXPR, dovar, from); + TREE_VEC_ELT (cond, i) = fold_build2 (simple > 0 ? LE_EXPR : GE_EXPR, + boolean_type_node, dovar, to); + TREE_VEC_ELT (incr, i) = fold_build2 (PLUS_EXPR, type, dovar, step); + TREE_VEC_ELT (incr, i) = fold_build2 (MODIFY_EXPR, type, dovar, + TREE_VEC_ELT (incr, i)); + } + else + { + /* STEP is not 1 or -1. Use: + for (count = 0; count < (to + step - from) / step; count++) + { + dovar = from + count * step; + body; + cycle_label:; + } */ + tmp = fold_build2 (MINUS_EXPR, type, step, from); + tmp = fold_build2 (PLUS_EXPR, type, to, tmp); + tmp = fold_build2 (TRUNC_DIV_EXPR, type, tmp, step); + tmp = gfc_evaluate_now (tmp, pblock); + count = gfc_create_var (type, "count"); + TREE_VEC_ELT (init, i) = build2_v (MODIFY_EXPR, count, + build_int_cst (type, 0)); + TREE_VEC_ELT (cond, i) = fold_build2 (LT_EXPR, boolean_type_node, + count, tmp); + TREE_VEC_ELT (incr, i) = fold_build2 (PLUS_EXPR, type, count, + build_int_cst (type, 1)); + TREE_VEC_ELT (incr, i) = fold_build2 (MODIFY_EXPR, type, + count, TREE_VEC_ELT (incr, i)); + + /* Initialize DOVAR. */ + tmp = fold_build2 (MULT_EXPR, type, count, step); + tmp = fold_build2 (PLUS_EXPR, type, from, tmp); + dovar_init = tree_cons (dovar, tmp, dovar_init); + } + + if (!dovar_found) + { + tmp = build_omp_clause (OMP_CLAUSE_PRIVATE); + OMP_CLAUSE_DECL (tmp) = dovar; + omp_clauses = gfc_trans_add_clause (tmp, omp_clauses); + } + else if (dovar_found == 2) + { + tree c = NULL; + + tmp = NULL; + if (!simple) + { + /* If dovar is lastprivate, but different counter is used, + dovar += step needs to be added to + OMP_CLAUSE_LASTPRIVATE_STMT, otherwise the copied dovar + will have the value on entry of the last loop, rather + than value after iterator increment. */ + tmp = gfc_evaluate_now (step, pblock); + tmp = fold_build2 (PLUS_EXPR, type, dovar, tmp); + tmp = fold_build2 (MODIFY_EXPR, type, dovar, tmp); + for (c = omp_clauses; c ; c = OMP_CLAUSE_CHAIN (c)) + if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE + && OMP_CLAUSE_DECL (c) == dovar) + { + OMP_CLAUSE_LASTPRIVATE_STMT (c) = tmp; + break; + } + } + if (c == NULL && par_clauses != NULL) + { + for (c = par_clauses; c ; c = OMP_CLAUSE_CHAIN (c)) + if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE + && OMP_CLAUSE_DECL (c) == dovar) + { + tree l = build_omp_clause (OMP_CLAUSE_LASTPRIVATE); + OMP_CLAUSE_DECL (l) = dovar; + OMP_CLAUSE_CHAIN (l) = omp_clauses; + OMP_CLAUSE_LASTPRIVATE_STMT (l) = tmp; + omp_clauses = l; + OMP_CLAUSE_SET_CODE (c, OMP_CLAUSE_SHARED); + break; + } + } + gcc_assert (simple || c != NULL); + } + if (!simple) + { + tmp = build_omp_clause (OMP_CLAUSE_PRIVATE); + OMP_CLAUSE_DECL (tmp) = count; + omp_clauses = gfc_trans_add_clause (tmp, omp_clauses); + } + + if (i + 1 < collapse) + code = code->block->next; + } + + if (pblock != &block) + { + pushlevel (0); + gfc_start_block (&block); + } + + gfc_start_block (&body); + + dovar_init = nreverse (dovar_init); + while (dovar_init) + { + gfc_add_modify (&body, TREE_PURPOSE (dovar_init), + TREE_VALUE (dovar_init)); + dovar_init = TREE_CHAIN (dovar_init); + } + + /* Cycle statement is implemented with a goto. Exit statement must not be + present for this loop. */ + cycle_label = gfc_build_label_decl (NULL_TREE); + + /* Put these labels where they can be found later. We put the + labels in a TREE_LIST node (because TREE_CHAIN is already + used). cycle_label goes in TREE_PURPOSE (backend_decl), exit + label in TREE_VALUE (backend_decl). */ + + code->block->backend_decl = tree_cons (cycle_label, NULL, NULL); + + /* Main loop body. */ + tmp = gfc_trans_omp_code (code->block->next, true); + gfc_add_expr_to_block (&body, tmp); + + /* Label for cycle statements (if needed). */ + if (TREE_USED (cycle_label)) + { + tmp = build1_v (LABEL_EXPR, cycle_label); + gfc_add_expr_to_block (&body, tmp); + } + + /* End of loop body. */ + stmt = make_node (OMP_FOR); + + TREE_TYPE (stmt) = void_type_node; + OMP_FOR_BODY (stmt) = gfc_finish_block (&body); + OMP_FOR_CLAUSES (stmt) = omp_clauses; + OMP_FOR_INIT (stmt) = init; + OMP_FOR_COND (stmt) = cond; + OMP_FOR_INCR (stmt) = incr; + gfc_add_expr_to_block (&block, stmt); + + return gfc_finish_block (&block); +} + +static tree +gfc_trans_omp_flush (void) +{ + tree decl = built_in_decls [BUILT_IN_SYNCHRONIZE]; + return build_call_expr (decl, 0); +} + +static tree +gfc_trans_omp_master (gfc_code *code) +{ + tree stmt = gfc_trans_code (code->block->next); + if (IS_EMPTY_STMT (stmt)) + return stmt; + return build1_v (OMP_MASTER, stmt); +} + +static tree +gfc_trans_omp_ordered (gfc_code *code) +{ + return build1_v (OMP_ORDERED, gfc_trans_code (code->block->next)); +} + +static tree +gfc_trans_omp_parallel (gfc_code *code) +{ + stmtblock_t block; + tree stmt, omp_clauses; + + gfc_start_block (&block); + omp_clauses = gfc_trans_omp_clauses (&block, code->ext.omp_clauses, + code->loc); + stmt = gfc_trans_omp_code (code->block->next, true); + stmt = build2 (OMP_PARALLEL, void_type_node, stmt, omp_clauses); + gfc_add_expr_to_block (&block, stmt); + return gfc_finish_block (&block); +} + +static tree +gfc_trans_omp_parallel_do (gfc_code *code) +{ + stmtblock_t block, *pblock = NULL; + gfc_omp_clauses parallel_clauses, do_clauses; + tree stmt, omp_clauses = NULL_TREE; + + gfc_start_block (&block); + + memset (&do_clauses, 0, sizeof (do_clauses)); + if (code->ext.omp_clauses != NULL) + { + memcpy (¶llel_clauses, code->ext.omp_clauses, + sizeof (parallel_clauses)); + do_clauses.sched_kind = parallel_clauses.sched_kind; + do_clauses.chunk_size = parallel_clauses.chunk_size; + do_clauses.ordered = parallel_clauses.ordered; + do_clauses.collapse = parallel_clauses.collapse; + parallel_clauses.sched_kind = OMP_SCHED_NONE; + parallel_clauses.chunk_size = NULL; + parallel_clauses.ordered = false; + parallel_clauses.collapse = 0; + omp_clauses = gfc_trans_omp_clauses (&block, ¶llel_clauses, + code->loc); + } + do_clauses.nowait = true; + if (!do_clauses.ordered && do_clauses.sched_kind != OMP_SCHED_STATIC) + pblock = █ + else + pushlevel (0); + stmt = gfc_trans_omp_do (code, pblock, &do_clauses, omp_clauses); + if (TREE_CODE (stmt) != BIND_EXPR) + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0)); + else + poplevel (0, 0, 0); + stmt = build2 (OMP_PARALLEL, void_type_node, stmt, omp_clauses); + OMP_PARALLEL_COMBINED (stmt) = 1; + gfc_add_expr_to_block (&block, stmt); + return gfc_finish_block (&block); +} + +static tree +gfc_trans_omp_parallel_sections (gfc_code *code) +{ + stmtblock_t block; + gfc_omp_clauses section_clauses; + tree stmt, omp_clauses; + + memset (§ion_clauses, 0, sizeof (section_clauses)); + section_clauses.nowait = true; + + gfc_start_block (&block); + omp_clauses = gfc_trans_omp_clauses (&block, code->ext.omp_clauses, + code->loc); + pushlevel (0); + stmt = gfc_trans_omp_sections (code, §ion_clauses); + if (TREE_CODE (stmt) != BIND_EXPR) + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0)); + else + poplevel (0, 0, 0); + stmt = build2 (OMP_PARALLEL, void_type_node, stmt, omp_clauses); + OMP_PARALLEL_COMBINED (stmt) = 1; + gfc_add_expr_to_block (&block, stmt); + return gfc_finish_block (&block); +} + +static tree +gfc_trans_omp_parallel_workshare (gfc_code *code) +{ + stmtblock_t block; + gfc_omp_clauses workshare_clauses; + tree stmt, omp_clauses; + + memset (&workshare_clauses, 0, sizeof (workshare_clauses)); + workshare_clauses.nowait = true; + + gfc_start_block (&block); + omp_clauses = gfc_trans_omp_clauses (&block, code->ext.omp_clauses, + code->loc); + pushlevel (0); + stmt = gfc_trans_omp_workshare (code, &workshare_clauses); + if (TREE_CODE (stmt) != BIND_EXPR) + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0, 0)); + else + poplevel (0, 0, 0); + stmt = build2 (OMP_PARALLEL, void_type_node, stmt, omp_clauses); + OMP_PARALLEL_COMBINED (stmt) = 1; + gfc_add_expr_to_block (&block, stmt); + return gfc_finish_block (&block); +} + +static tree +gfc_trans_omp_sections (gfc_code *code, gfc_omp_clauses *clauses) +{ + stmtblock_t block, body; + tree omp_clauses, stmt; + bool has_lastprivate = clauses->lists[OMP_LIST_LASTPRIVATE] != NULL; + + gfc_start_block (&block); + + omp_clauses = gfc_trans_omp_clauses (&block, clauses, code->loc); + + gfc_init_block (&body); + for (code = code->block; code; code = code->block) + { + /* Last section is special because of lastprivate, so even if it + is empty, chain it in. */ + stmt = gfc_trans_omp_code (code->next, + has_lastprivate && code->block == NULL); + if (! IS_EMPTY_STMT (stmt)) + { + stmt = build1_v (OMP_SECTION, stmt); + gfc_add_expr_to_block (&body, stmt); + } + } + stmt = gfc_finish_block (&body); + + stmt = build2 (OMP_SECTIONS, void_type_node, stmt, omp_clauses); + gfc_add_expr_to_block (&block, stmt); + + return gfc_finish_block (&block); +} + +static tree +gfc_trans_omp_single (gfc_code *code, gfc_omp_clauses *clauses) +{ + tree omp_clauses = gfc_trans_omp_clauses (NULL, clauses, code->loc); + tree stmt = gfc_trans_omp_code (code->block->next, true); + stmt = build2 (OMP_SINGLE, void_type_node, stmt, omp_clauses); + return stmt; +} + +static tree +gfc_trans_omp_task (gfc_code *code) +{ + stmtblock_t block; + tree stmt, omp_clauses; + + gfc_start_block (&block); + omp_clauses = gfc_trans_omp_clauses (&block, code->ext.omp_clauses, + code->loc); + stmt = gfc_trans_omp_code (code->block->next, true); + stmt = build2 (OMP_TASK, void_type_node, stmt, omp_clauses); + gfc_add_expr_to_block (&block, stmt); + return gfc_finish_block (&block); +} + +static tree +gfc_trans_omp_taskwait (void) +{ + tree decl = built_in_decls [BUILT_IN_GOMP_TASKWAIT]; + return build_call_expr (decl, 0); +} + +static tree +gfc_trans_omp_workshare (gfc_code *code, gfc_omp_clauses *clauses) +{ + /* XXX */ + return gfc_trans_omp_single (code, clauses); +} + +tree +gfc_trans_omp_directive (gfc_code *code) +{ + switch (code->op) + { + case EXEC_OMP_ATOMIC: + return gfc_trans_omp_atomic (code); + case EXEC_OMP_BARRIER: + return gfc_trans_omp_barrier (); + case EXEC_OMP_CRITICAL: + return gfc_trans_omp_critical (code); + case EXEC_OMP_DO: + return gfc_trans_omp_do (code, NULL, code->ext.omp_clauses, NULL); + case EXEC_OMP_FLUSH: + return gfc_trans_omp_flush (); + case EXEC_OMP_MASTER: + return gfc_trans_omp_master (code); + case EXEC_OMP_ORDERED: + return gfc_trans_omp_ordered (code); + case EXEC_OMP_PARALLEL: + return gfc_trans_omp_parallel (code); + case EXEC_OMP_PARALLEL_DO: + return gfc_trans_omp_parallel_do (code); + case EXEC_OMP_PARALLEL_SECTIONS: + return gfc_trans_omp_parallel_sections (code); + case EXEC_OMP_PARALLEL_WORKSHARE: + return gfc_trans_omp_parallel_workshare (code); + case EXEC_OMP_SECTIONS: + return gfc_trans_omp_sections (code, code->ext.omp_clauses); + case EXEC_OMP_SINGLE: + return gfc_trans_omp_single (code, code->ext.omp_clauses); + case EXEC_OMP_TASK: + return gfc_trans_omp_task (code); + case EXEC_OMP_TASKWAIT: + return gfc_trans_omp_taskwait (); + case EXEC_OMP_WORKSHARE: + return gfc_trans_omp_workshare (code, code->ext.omp_clauses); + default: + gcc_unreachable (); + } +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-stmt.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-stmt.c new file mode 100644 index 0000000000..42f0ac438a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-stmt.c @@ -0,0 +1,4083 @@ +/* Statement translation -- generate GCC trees from gfc_code. + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Paul Brook + and Steven Bosscher + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "gimple.h" +#include "ggc.h" +#include "toplev.h" +#include "real.h" +#include "gfortran.h" +#include "flags.h" +#include "trans.h" +#include "trans-stmt.h" +#include "trans-types.h" +#include "trans-array.h" +#include "trans-const.h" +#include "arith.h" +#include "dependency.h" + +typedef struct iter_info +{ + tree var; + tree start; + tree end; + tree step; + struct iter_info *next; +} +iter_info; + +typedef struct forall_info +{ + iter_info *this_loop; + tree mask; + tree maskindex; + int nvar; + tree size; + struct forall_info *prev_nest; +} +forall_info; + +static void gfc_trans_where_2 (gfc_code *, tree, bool, + forall_info *, stmtblock_t *); + +/* Translate a F95 label number to a LABEL_EXPR. */ + +tree +gfc_trans_label_here (gfc_code * code) +{ + return build1_v (LABEL_EXPR, gfc_get_label_decl (code->here)); +} + + +/* Given a variable expression which has been ASSIGNed to, find the decl + containing the auxiliary variables. For variables in common blocks this + is a field_decl. */ + +void +gfc_conv_label_variable (gfc_se * se, gfc_expr * expr) +{ + gcc_assert (expr->symtree->n.sym->attr.assign == 1); + gfc_conv_expr (se, expr); + /* Deals with variable in common block. Get the field declaration. */ + if (TREE_CODE (se->expr) == COMPONENT_REF) + se->expr = TREE_OPERAND (se->expr, 1); + /* Deals with dummy argument. Get the parameter declaration. */ + else if (TREE_CODE (se->expr) == INDIRECT_REF) + se->expr = TREE_OPERAND (se->expr, 0); +} + +/* Translate a label assignment statement. */ + +tree +gfc_trans_label_assign (gfc_code * code) +{ + tree label_tree; + gfc_se se; + tree len; + tree addr; + tree len_tree; + int label_len; + + /* Start a new block. */ + gfc_init_se (&se, NULL); + gfc_start_block (&se.pre); + gfc_conv_label_variable (&se, code->expr); + + len = GFC_DECL_STRING_LEN (se.expr); + addr = GFC_DECL_ASSIGN_ADDR (se.expr); + + label_tree = gfc_get_label_decl (code->label); + + if (code->label->defined == ST_LABEL_TARGET) + { + label_tree = gfc_build_addr_expr (pvoid_type_node, label_tree); + len_tree = integer_minus_one_node; + } + else + { + gfc_expr *format = code->label->format; + + label_len = format->value.character.length; + len_tree = build_int_cst (NULL_TREE, label_len); + label_tree = gfc_build_wide_string_const (format->ts.kind, label_len + 1, + format->value.character.string); + label_tree = gfc_build_addr_expr (pvoid_type_node, label_tree); + } + + gfc_add_modify (&se.pre, len, len_tree); + gfc_add_modify (&se.pre, addr, label_tree); + + return gfc_finish_block (&se.pre); +} + +/* Translate a GOTO statement. */ + +tree +gfc_trans_goto (gfc_code * code) +{ + locus loc = code->loc; + tree assigned_goto; + tree target; + tree tmp; + gfc_se se; + + if (code->label != NULL) + return build1_v (GOTO_EXPR, gfc_get_label_decl (code->label)); + + /* ASSIGNED GOTO. */ + gfc_init_se (&se, NULL); + gfc_start_block (&se.pre); + gfc_conv_label_variable (&se, code->expr); + tmp = GFC_DECL_STRING_LEN (se.expr); + tmp = fold_build2 (NE_EXPR, boolean_type_node, tmp, + build_int_cst (TREE_TYPE (tmp), -1)); + gfc_trans_runtime_check (true, false, tmp, &se.pre, &loc, + "Assigned label is not a target label"); + + assigned_goto = GFC_DECL_ASSIGN_ADDR (se.expr); + + code = code->block; + if (code == NULL) + { + target = fold_build1 (GOTO_EXPR, void_type_node, assigned_goto); + gfc_add_expr_to_block (&se.pre, target); + return gfc_finish_block (&se.pre); + } + + /* Check the label list. */ + do + { + target = gfc_get_label_decl (code->label); + tmp = gfc_build_addr_expr (pvoid_type_node, target); + tmp = fold_build2 (EQ_EXPR, boolean_type_node, tmp, assigned_goto); + tmp = build3_v (COND_EXPR, tmp, + fold_build1 (GOTO_EXPR, void_type_node, target), + build_empty_stmt ()); + gfc_add_expr_to_block (&se.pre, tmp); + code = code->block; + } + while (code != NULL); + gfc_trans_runtime_check (true, false, boolean_true_node, &se.pre, &loc, + "Assigned label is not in the list"); + + return gfc_finish_block (&se.pre); +} + + +/* Translate an ENTRY statement. Just adds a label for this entry point. */ +tree +gfc_trans_entry (gfc_code * code) +{ + return build1_v (LABEL_EXPR, code->ext.entry->label); +} + + +/* Check for dependencies between INTENT(IN) and INTENT(OUT) arguments of + elemental subroutines. Make temporaries for output arguments if any such + dependencies are found. Output arguments are chosen because internal_unpack + can be used, as is, to copy the result back to the variable. */ +static void +gfc_conv_elemental_dependencies (gfc_se * se, gfc_se * loopse, + gfc_symbol * sym, gfc_actual_arglist * arg, + gfc_dep_check check_variable) +{ + gfc_actual_arglist *arg0; + gfc_expr *e; + gfc_formal_arglist *formal; + gfc_loopinfo tmp_loop; + gfc_se parmse; + gfc_ss *ss; + gfc_ss_info *info; + gfc_symbol *fsym; + int n; + tree data; + tree offset; + tree size; + tree tmp; + + if (loopse->ss == NULL) + return; + + ss = loopse->ss; + arg0 = arg; + formal = sym->formal; + + /* Loop over all the arguments testing for dependencies. */ + for (; arg != NULL; arg = arg->next, formal = formal ? formal->next : NULL) + { + e = arg->expr; + if (e == NULL) + continue; + + /* Obtain the info structure for the current argument. */ + info = NULL; + for (ss = loopse->ss; ss && ss != gfc_ss_terminator; ss = ss->next) + { + if (ss->expr != e) + continue; + info = &ss->data.info; + break; + } + + /* If there is a dependency, create a temporary and use it + instead of the variable. */ + fsym = formal ? formal->sym : NULL; + if (e->expr_type == EXPR_VARIABLE + && e->rank && fsym + && fsym->attr.intent != INTENT_IN + && gfc_check_fncall_dependency (e, fsym->attr.intent, + sym, arg0, check_variable)) + { + tree initial, temptype; + stmtblock_t temp_post; + + /* Make a local loopinfo for the temporary creation, so that + none of the other ss->info's have to be renormalized. */ + gfc_init_loopinfo (&tmp_loop); + for (n = 0; n < info->dimen; n++) + { + tmp_loop.to[n] = loopse->loop->to[n]; + tmp_loop.from[n] = loopse->loop->from[n]; + tmp_loop.order[n] = loopse->loop->order[n]; + } + + /* Obtain the argument descriptor for unpacking. */ + gfc_init_se (&parmse, NULL); + parmse.want_pointer = 1; + gfc_conv_expr_descriptor (&parmse, e, gfc_walk_expr (e)); + gfc_add_block_to_block (&se->pre, &parmse.pre); + + /* If we've got INTENT(INOUT), initialize the array temporary with + a copy of the values. */ + if (fsym->attr.intent == INTENT_INOUT) + initial = parmse.expr; + else + initial = NULL_TREE; + + /* Find the type of the temporary to create; we don't use the type + of e itself as this breaks for subcomponent-references in e (where + the type of e is that of the final reference, but parmse.expr's + type corresponds to the full derived-type). */ + /* TODO: Fix this somehow so we don't need a temporary of the whole + array but instead only the components referenced. */ + temptype = TREE_TYPE (parmse.expr); /* Pointer to descriptor. */ + gcc_assert (TREE_CODE (temptype) == POINTER_TYPE); + temptype = TREE_TYPE (temptype); + temptype = gfc_get_element_type (temptype); + + /* Generate the temporary. Cleaning up the temporary should be the + very last thing done, so we add the code to a new block and add it + to se->post as last instructions. */ + size = gfc_create_var (gfc_array_index_type, NULL); + data = gfc_create_var (pvoid_type_node, NULL); + gfc_init_block (&temp_post); + tmp = gfc_trans_create_temp_array (&se->pre, &temp_post, + &tmp_loop, info, temptype, + initial, + false, true, false, + &arg->expr->where); + gfc_add_modify (&se->pre, size, tmp); + tmp = fold_convert (pvoid_type_node, info->data); + gfc_add_modify (&se->pre, data, tmp); + + /* Calculate the offset for the temporary. */ + offset = gfc_index_zero_node; + for (n = 0; n < info->dimen; n++) + { + tmp = gfc_conv_descriptor_stride (info->descriptor, + gfc_rank_cst[n]); + tmp = fold_build2 (MULT_EXPR, gfc_array_index_type, + loopse->loop->from[n], tmp); + offset = fold_build2 (MINUS_EXPR, gfc_array_index_type, + offset, tmp); + } + info->offset = gfc_create_var (gfc_array_index_type, NULL); + gfc_add_modify (&se->pre, info->offset, offset); + + /* Copy the result back using unpack. */ + tmp = build_call_expr (gfor_fndecl_in_unpack, 2, parmse.expr, data); + gfc_add_expr_to_block (&se->post, tmp); + + /* parmse.pre is already added above. */ + gfc_add_block_to_block (&se->post, &parmse.post); + gfc_add_block_to_block (&se->post, &temp_post); + } + } +} + + +/* Translate the CALL statement. Builds a call to an F95 subroutine. */ + +tree +gfc_trans_call (gfc_code * code, bool dependency_check) +{ + gfc_se se; + gfc_ss * ss; + int has_alternate_specifier; + gfc_dep_check check_variable; + + /* A CALL starts a new block because the actual arguments may have to + be evaluated first. */ + gfc_init_se (&se, NULL); + gfc_start_block (&se.pre); + + gcc_assert (code->resolved_sym); + + ss = gfc_ss_terminator; + if (code->resolved_sym->attr.elemental) + ss = gfc_walk_elemental_function_args (ss, code->ext.actual, GFC_SS_REFERENCE); + + /* Is not an elemental subroutine call with array valued arguments. */ + if (ss == gfc_ss_terminator) + { + + /* Translate the call. */ + has_alternate_specifier + = gfc_conv_function_call (&se, code->resolved_sym, code->ext.actual, + NULL_TREE); + + /* A subroutine without side-effect, by definition, does nothing! */ + TREE_SIDE_EFFECTS (se.expr) = 1; + + /* Chain the pieces together and return the block. */ + if (has_alternate_specifier) + { + gfc_code *select_code; + gfc_symbol *sym; + select_code = code->next; + gcc_assert(select_code->op == EXEC_SELECT); + sym = select_code->expr->symtree->n.sym; + se.expr = convert (gfc_typenode_for_spec (&sym->ts), se.expr); + if (sym->backend_decl == NULL) + sym->backend_decl = gfc_get_symbol_decl (sym); + gfc_add_modify (&se.pre, sym->backend_decl, se.expr); + } + else + gfc_add_expr_to_block (&se.pre, se.expr); + + gfc_add_block_to_block (&se.pre, &se.post); + } + + else + { + /* An elemental subroutine call with array valued arguments has + to be scalarized. */ + gfc_loopinfo loop; + stmtblock_t body; + stmtblock_t block; + gfc_se loopse; + gfc_se depse; + + /* gfc_walk_elemental_function_args renders the ss chain in the + reverse order to the actual argument order. */ + ss = gfc_reverse_ss (ss); + + /* Initialize the loop. */ + gfc_init_se (&loopse, NULL); + gfc_init_loopinfo (&loop); + gfc_add_ss_to_loop (&loop, ss); + + gfc_conv_ss_startstride (&loop); + /* TODO: gfc_conv_loop_setup generates a temporary for vector + subscripts. This could be prevented in the elemental case + as temporaries are handled separatedly + (below in gfc_conv_elemental_dependencies). */ + gfc_conv_loop_setup (&loop, &code->expr->where); + gfc_mark_ss_chain_used (ss, 1); + + /* Convert the arguments, checking for dependencies. */ + gfc_copy_loopinfo_to_se (&loopse, &loop); + loopse.ss = ss; + + /* For operator assignment, do dependency checking. */ + if (dependency_check) + check_variable = ELEM_CHECK_VARIABLE; + else + check_variable = ELEM_DONT_CHECK_VARIABLE; + + gfc_init_se (&depse, NULL); + gfc_conv_elemental_dependencies (&depse, &loopse, code->resolved_sym, + code->ext.actual, check_variable); + + gfc_add_block_to_block (&loop.pre, &depse.pre); + gfc_add_block_to_block (&loop.post, &depse.post); + + /* Generate the loop body. */ + gfc_start_scalarized_body (&loop, &body); + gfc_init_block (&block); + + /* Add the subroutine call to the block. */ + gfc_conv_function_call (&loopse, code->resolved_sym, code->ext.actual, + NULL_TREE); + gfc_add_expr_to_block (&loopse.pre, loopse.expr); + + gfc_add_block_to_block (&block, &loopse.pre); + gfc_add_block_to_block (&block, &loopse.post); + + /* Finish up the loop block and the loop. */ + gfc_add_expr_to_block (&body, gfc_finish_block (&block)); + gfc_trans_scalarizing_loops (&loop, &body); + gfc_add_block_to_block (&se.pre, &loop.pre); + gfc_add_block_to_block (&se.pre, &loop.post); + gfc_add_block_to_block (&se.pre, &se.post); + gfc_cleanup_loop (&loop); + } + + return gfc_finish_block (&se.pre); +} + + +/* Translate the RETURN statement. */ + +tree +gfc_trans_return (gfc_code * code ATTRIBUTE_UNUSED) +{ + if (code->expr) + { + gfc_se se; + tree tmp; + tree result; + + /* If code->expr is not NULL, this return statement must appear + in a subroutine and current_fake_result_decl has already + been generated. */ + + result = gfc_get_fake_result_decl (NULL, 0); + if (!result) + { + gfc_warning ("An alternate return at %L without a * dummy argument", + &code->expr->where); + return build1_v (GOTO_EXPR, gfc_get_return_label ()); + } + + /* Start a new block for this statement. */ + gfc_init_se (&se, NULL); + gfc_start_block (&se.pre); + + gfc_conv_expr (&se, code->expr); + + tmp = fold_build2 (MODIFY_EXPR, TREE_TYPE (result), result, + fold_convert (TREE_TYPE (result), se.expr)); + gfc_add_expr_to_block (&se.pre, tmp); + + tmp = build1_v (GOTO_EXPR, gfc_get_return_label ()); + gfc_add_expr_to_block (&se.pre, tmp); + gfc_add_block_to_block (&se.pre, &se.post); + return gfc_finish_block (&se.pre); + } + else + return build1_v (GOTO_EXPR, gfc_get_return_label ()); +} + + +/* Translate the PAUSE statement. We have to translate this statement + to a runtime library call. */ + +tree +gfc_trans_pause (gfc_code * code) +{ + tree gfc_int4_type_node = gfc_get_int_type (4); + gfc_se se; + tree tmp; + + /* Start a new block for this statement. */ + gfc_init_se (&se, NULL); + gfc_start_block (&se.pre); + + + if (code->expr == NULL) + { + tmp = build_int_cst (gfc_int4_type_node, code->ext.stop_code); + tmp = build_call_expr (gfor_fndecl_pause_numeric, 1, tmp); + } + else + { + gfc_conv_expr_reference (&se, code->expr); + tmp = build_call_expr (gfor_fndecl_pause_string, 2, + se.expr, se.string_length); + } + + gfc_add_expr_to_block (&se.pre, tmp); + + gfc_add_block_to_block (&se.pre, &se.post); + + return gfc_finish_block (&se.pre); +} + + +/* Translate the STOP statement. We have to translate this statement + to a runtime library call. */ + +tree +gfc_trans_stop (gfc_code * code) +{ + tree gfc_int4_type_node = gfc_get_int_type (4); + gfc_se se; + tree tmp; + + /* Start a new block for this statement. */ + gfc_init_se (&se, NULL); + gfc_start_block (&se.pre); + + + if (code->expr == NULL) + { + tmp = build_int_cst (gfc_int4_type_node, code->ext.stop_code); + tmp = build_call_expr (gfor_fndecl_stop_numeric, 1, tmp); + } + else + { + gfc_conv_expr_reference (&se, code->expr); + tmp = build_call_expr (gfor_fndecl_stop_string, 2, + se.expr, se.string_length); + } + + gfc_add_expr_to_block (&se.pre, tmp); + + gfc_add_block_to_block (&se.pre, &se.post); + + return gfc_finish_block (&se.pre); +} + + +/* Generate GENERIC for the IF construct. This function also deals with + the simple IF statement, because the front end translates the IF + statement into an IF construct. + + We translate: + + IF (cond) THEN + then_clause + ELSEIF (cond2) + elseif_clause + ELSE + else_clause + ENDIF + + into: + + pre_cond_s; + if (cond_s) + { + then_clause; + } + else + { + pre_cond_s + if (cond_s) + { + elseif_clause + } + else + { + else_clause; + } + } + + where COND_S is the simplified version of the predicate. PRE_COND_S + are the pre side-effects produced by the translation of the + conditional. + We need to build the chain recursively otherwise we run into + problems with folding incomplete statements. */ + +static tree +gfc_trans_if_1 (gfc_code * code) +{ + gfc_se if_se; + tree stmt, elsestmt; + + /* Check for an unconditional ELSE clause. */ + if (!code->expr) + return gfc_trans_code (code->next); + + /* Initialize a statement builder for each block. Puts in NULL_TREEs. */ + gfc_init_se (&if_se, NULL); + gfc_start_block (&if_se.pre); + + /* Calculate the IF condition expression. */ + gfc_conv_expr_val (&if_se, code->expr); + + /* Translate the THEN clause. */ + stmt = gfc_trans_code (code->next); + + /* Translate the ELSE clause. */ + if (code->block) + elsestmt = gfc_trans_if_1 (code->block); + else + elsestmt = build_empty_stmt (); + + /* Build the condition expression and add it to the condition block. */ + stmt = fold_build3 (COND_EXPR, void_type_node, if_se.expr, stmt, elsestmt); + + gfc_add_expr_to_block (&if_se.pre, stmt); + + /* Finish off this statement. */ + return gfc_finish_block (&if_se.pre); +} + +tree +gfc_trans_if (gfc_code * code) +{ + /* Ignore the top EXEC_IF, it only announces an IF construct. The + actual code we must translate is in code->block. */ + + return gfc_trans_if_1 (code->block); +} + + +/* Translate an arithmetic IF expression. + + IF (cond) label1, label2, label3 translates to + + if (cond <= 0) + { + if (cond < 0) + goto label1; + else // cond == 0 + goto label2; + } + else // cond > 0 + goto label3; + + An optimized version can be generated in case of equal labels. + E.g., if label1 is equal to label2, we can translate it to + + if (cond <= 0) + goto label1; + else + goto label3; +*/ + +tree +gfc_trans_arithmetic_if (gfc_code * code) +{ + gfc_se se; + tree tmp; + tree branch1; + tree branch2; + tree zero; + + /* Start a new block. */ + gfc_init_se (&se, NULL); + gfc_start_block (&se.pre); + + /* Pre-evaluate COND. */ + gfc_conv_expr_val (&se, code->expr); + se.expr = gfc_evaluate_now (se.expr, &se.pre); + + /* Build something to compare with. */ + zero = gfc_build_const (TREE_TYPE (se.expr), integer_zero_node); + + if (code->label->value != code->label2->value) + { + /* If (cond < 0) take branch1 else take branch2. + First build jumps to the COND .LT. 0 and the COND .EQ. 0 cases. */ + branch1 = build1_v (GOTO_EXPR, gfc_get_label_decl (code->label)); + branch2 = build1_v (GOTO_EXPR, gfc_get_label_decl (code->label2)); + + if (code->label->value != code->label3->value) + tmp = fold_build2 (LT_EXPR, boolean_type_node, se.expr, zero); + else + tmp = fold_build2 (NE_EXPR, boolean_type_node, se.expr, zero); + + branch1 = fold_build3 (COND_EXPR, void_type_node, tmp, branch1, branch2); + } + else + branch1 = build1_v (GOTO_EXPR, gfc_get_label_decl (code->label)); + + if (code->label->value != code->label3->value + && code->label2->value != code->label3->value) + { + /* if (cond <= 0) take branch1 else take branch2. */ + branch2 = build1_v (GOTO_EXPR, gfc_get_label_decl (code->label3)); + tmp = fold_build2 (LE_EXPR, boolean_type_node, se.expr, zero); + branch1 = fold_build3 (COND_EXPR, void_type_node, tmp, branch1, branch2); + } + + /* Append the COND_EXPR to the evaluation of COND, and return. */ + gfc_add_expr_to_block (&se.pre, branch1); + return gfc_finish_block (&se.pre); +} + + +/* Translate the simple DO construct. This is where the loop variable has + integer type and step +-1. We can't use this in the general case + because integer overflow and floating point errors could give incorrect + results. + We translate a do loop from: + + DO dovar = from, to, step + body + END DO + + to: + + [Evaluate loop bounds and step] + dovar = from; + if ((step > 0) ? (dovar <= to) : (dovar => to)) + { + for (;;) + { + body; + cycle_label: + cond = (dovar == to); + dovar += step; + if (cond) goto end_label; + } + } + end_label: + + This helps the optimizers by avoiding the extra induction variable + used in the general case. */ + +static tree +gfc_trans_simple_do (gfc_code * code, stmtblock_t *pblock, tree dovar, + tree from, tree to, tree step) +{ + stmtblock_t body; + tree type; + tree cond; + tree tmp; + tree cycle_label; + tree exit_label; + + type = TREE_TYPE (dovar); + + /* Initialize the DO variable: dovar = from. */ + gfc_add_modify (pblock, dovar, from); + + /* Cycle and exit statements are implemented with gotos. */ + cycle_label = gfc_build_label_decl (NULL_TREE); + exit_label = gfc_build_label_decl (NULL_TREE); + + /* Put the labels where they can be found later. See gfc_trans_do(). */ + code->block->backend_decl = tree_cons (cycle_label, exit_label, NULL); + + /* Loop body. */ + gfc_start_block (&body); + + /* Main loop body. */ + tmp = gfc_trans_code (code->block->next); + gfc_add_expr_to_block (&body, tmp); + + /* Label for cycle statements (if needed). */ + if (TREE_USED (cycle_label)) + { + tmp = build1_v (LABEL_EXPR, cycle_label); + gfc_add_expr_to_block (&body, tmp); + } + + /* Evaluate the loop condition. */ + cond = fold_build2 (EQ_EXPR, boolean_type_node, dovar, to); + cond = gfc_evaluate_now (cond, &body); + + /* Increment the loop variable. */ + tmp = fold_build2 (PLUS_EXPR, type, dovar, step); + gfc_add_modify (&body, dovar, tmp); + + /* The loop exit. */ + tmp = build1_v (GOTO_EXPR, exit_label); + TREE_USED (exit_label) = 1; + tmp = fold_build3 (COND_EXPR, void_type_node, + cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&body, tmp); + + /* Finish the loop body. */ + tmp = gfc_finish_block (&body); + tmp = build1_v (LOOP_EXPR, tmp); + + /* Only execute the loop if the number of iterations is positive. */ + if (tree_int_cst_sgn (step) > 0) + cond = fold_build2 (LE_EXPR, boolean_type_node, dovar, to); + else + cond = fold_build2 (GE_EXPR, boolean_type_node, dovar, to); + tmp = fold_build3 (COND_EXPR, void_type_node, + cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (pblock, tmp); + + /* Add the exit label. */ + tmp = build1_v (LABEL_EXPR, exit_label); + gfc_add_expr_to_block (pblock, tmp); + + return gfc_finish_block (pblock); +} + +/* Translate the DO construct. This obviously is one of the most + important ones to get right with any compiler, but especially + so for Fortran. + + We special case some loop forms as described in gfc_trans_simple_do. + For other cases we implement them with a separate loop count, + as described in the standard. + + We translate a do loop from: + + DO dovar = from, to, step + body + END DO + + to: + + [evaluate loop bounds and step] + empty = (step > 0 ? to < from : to > from); + countm1 = (to - from) / step; + dovar = from; + if (empty) goto exit_label; + for (;;) + { + body; +cycle_label: + dovar += step + if (countm1 ==0) goto exit_label; + countm1--; + } +exit_label: + + countm1 is an unsigned integer. It is equal to the loop count minus one, + because the loop count itself can overflow. */ + +tree +gfc_trans_do (gfc_code * code) +{ + gfc_se se; + tree dovar; + tree from; + tree to; + tree step; + tree countm1; + tree type; + tree utype; + tree cond; + tree cycle_label; + tree exit_label; + tree tmp; + tree pos_step; + stmtblock_t block; + stmtblock_t body; + + gfc_start_block (&block); + + /* Evaluate all the expressions in the iterator. */ + gfc_init_se (&se, NULL); + gfc_conv_expr_lhs (&se, code->ext.iterator->var); + gfc_add_block_to_block (&block, &se.pre); + dovar = se.expr; + type = TREE_TYPE (dovar); + + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, code->ext.iterator->start); + gfc_add_block_to_block (&block, &se.pre); + from = gfc_evaluate_now (se.expr, &block); + + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, code->ext.iterator->end); + gfc_add_block_to_block (&block, &se.pre); + to = gfc_evaluate_now (se.expr, &block); + + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, code->ext.iterator->step); + gfc_add_block_to_block (&block, &se.pre); + step = gfc_evaluate_now (se.expr, &block); + + /* Special case simple loops. */ + if (TREE_CODE (type) == INTEGER_TYPE + && (integer_onep (step) + || tree_int_cst_equal (step, integer_minus_one_node))) + return gfc_trans_simple_do (code, &block, dovar, from, to, step); + + pos_step = fold_build2 (GT_EXPR, boolean_type_node, step, + fold_convert (type, integer_zero_node)); + + if (TREE_CODE (type) == INTEGER_TYPE) + utype = unsigned_type_for (type); + else + utype = unsigned_type_for (gfc_array_index_type); + countm1 = gfc_create_var (utype, "countm1"); + + /* Cycle and exit statements are implemented with gotos. */ + cycle_label = gfc_build_label_decl (NULL_TREE); + exit_label = gfc_build_label_decl (NULL_TREE); + TREE_USED (exit_label) = 1; + + /* Initialize the DO variable: dovar = from. */ + gfc_add_modify (&block, dovar, from); + + /* Initialize loop count and jump to exit label if the loop is empty. + This code is executed before we enter the loop body. We generate: + if (step > 0) + { + if (to < from) goto exit_label; + countm1 = (to - from) / step; + } + else + { + if (to > from) goto exit_label; + countm1 = (from - to) / -step; + } */ + if (TREE_CODE (type) == INTEGER_TYPE) + { + tree pos, neg; + + tmp = fold_build2 (LT_EXPR, boolean_type_node, to, from); + pos = fold_build3 (COND_EXPR, void_type_node, tmp, + build1_v (GOTO_EXPR, exit_label), + build_empty_stmt ()); + tmp = fold_build2 (MINUS_EXPR, type, to, from); + tmp = fold_convert (utype, tmp); + tmp = fold_build2 (TRUNC_DIV_EXPR, utype, tmp, + fold_convert (utype, step)); + tmp = build2 (MODIFY_EXPR, void_type_node, countm1, tmp); + pos = build2 (COMPOUND_EXPR, void_type_node, pos, tmp); + + tmp = fold_build2 (GT_EXPR, boolean_type_node, to, from); + neg = fold_build3 (COND_EXPR, void_type_node, tmp, + build1_v (GOTO_EXPR, exit_label), + build_empty_stmt ()); + tmp = fold_build2 (MINUS_EXPR, type, from, to); + tmp = fold_convert (utype, tmp); + tmp = fold_build2 (TRUNC_DIV_EXPR, utype, tmp, + fold_convert (utype, fold_build1 (NEGATE_EXPR, + type, step))); + tmp = build2 (MODIFY_EXPR, void_type_node, countm1, tmp); + neg = build2 (COMPOUND_EXPR, void_type_node, neg, tmp); + + tmp = fold_build3 (COND_EXPR, void_type_node, pos_step, pos, neg); + gfc_add_expr_to_block (&block, tmp); + } + else + { + /* TODO: We could use the same width as the real type. + This would probably cause more problems that it solves + when we implement "long double" types. */ + + tmp = fold_build2 (MINUS_EXPR, type, to, from); + tmp = fold_build2 (RDIV_EXPR, type, tmp, step); + tmp = fold_build1 (FIX_TRUNC_EXPR, utype, tmp); + gfc_add_modify (&block, countm1, tmp); + + /* We need a special check for empty loops: + empty = (step > 0 ? to < from : to > from); */ + tmp = fold_build3 (COND_EXPR, boolean_type_node, pos_step, + fold_build2 (LT_EXPR, boolean_type_node, to, from), + fold_build2 (GT_EXPR, boolean_type_node, to, from)); + /* If the loop is empty, go directly to the exit label. */ + tmp = fold_build3 (COND_EXPR, void_type_node, tmp, + build1_v (GOTO_EXPR, exit_label), + build_empty_stmt ()); + gfc_add_expr_to_block (&block, tmp); + } + + /* Loop body. */ + gfc_start_block (&body); + + /* Put these labels where they can be found later. We put the + labels in a TREE_LIST node (because TREE_CHAIN is already + used). cycle_label goes in TREE_PURPOSE (backend_decl), exit + label in TREE_VALUE (backend_decl). */ + + code->block->backend_decl = tree_cons (cycle_label, exit_label, NULL); + + /* Main loop body. */ + tmp = gfc_trans_code (code->block->next); + gfc_add_expr_to_block (&body, tmp); + + /* Label for cycle statements (if needed). */ + if (TREE_USED (cycle_label)) + { + tmp = build1_v (LABEL_EXPR, cycle_label); + gfc_add_expr_to_block (&body, tmp); + } + + /* Increment the loop variable. */ + tmp = fold_build2 (PLUS_EXPR, type, dovar, step); + gfc_add_modify (&body, dovar, tmp); + + /* End with the loop condition. Loop until countm1 == 0. */ + cond = fold_build2 (EQ_EXPR, boolean_type_node, countm1, + build_int_cst (utype, 0)); + tmp = build1_v (GOTO_EXPR, exit_label); + tmp = fold_build3 (COND_EXPR, void_type_node, + cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&body, tmp); + + /* Decrement the loop count. */ + tmp = fold_build2 (MINUS_EXPR, utype, countm1, build_int_cst (utype, 1)); + gfc_add_modify (&body, countm1, tmp); + + /* End of loop body. */ + tmp = gfc_finish_block (&body); + + /* The for loop itself. */ + tmp = build1_v (LOOP_EXPR, tmp); + gfc_add_expr_to_block (&block, tmp); + + /* Add the exit label. */ + tmp = build1_v (LABEL_EXPR, exit_label); + gfc_add_expr_to_block (&block, tmp); + + return gfc_finish_block (&block); +} + + +/* Translate the DO WHILE construct. + + We translate + + DO WHILE (cond) + body + END DO + + to: + + for ( ; ; ) + { + pre_cond; + if (! cond) goto exit_label; + body; +cycle_label: + } +exit_label: + + Because the evaluation of the exit condition `cond' may have side + effects, we can't do much for empty loop bodies. The backend optimizers + should be smart enough to eliminate any dead loops. */ + +tree +gfc_trans_do_while (gfc_code * code) +{ + gfc_se cond; + tree tmp; + tree cycle_label; + tree exit_label; + stmtblock_t block; + + /* Everything we build here is part of the loop body. */ + gfc_start_block (&block); + + /* Cycle and exit statements are implemented with gotos. */ + cycle_label = gfc_build_label_decl (NULL_TREE); + exit_label = gfc_build_label_decl (NULL_TREE); + + /* Put the labels where they can be found later. See gfc_trans_do(). */ + code->block->backend_decl = tree_cons (cycle_label, exit_label, NULL); + + /* Create a GIMPLE version of the exit condition. */ + gfc_init_se (&cond, NULL); + gfc_conv_expr_val (&cond, code->expr); + gfc_add_block_to_block (&block, &cond.pre); + cond.expr = fold_build1 (TRUTH_NOT_EXPR, boolean_type_node, cond.expr); + + /* Build "IF (! cond) GOTO exit_label". */ + tmp = build1_v (GOTO_EXPR, exit_label); + TREE_USED (exit_label) = 1; + tmp = fold_build3 (COND_EXPR, void_type_node, + cond.expr, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&block, tmp); + + /* The main body of the loop. */ + tmp = gfc_trans_code (code->block->next); + gfc_add_expr_to_block (&block, tmp); + + /* Label for cycle statements (if needed). */ + if (TREE_USED (cycle_label)) + { + tmp = build1_v (LABEL_EXPR, cycle_label); + gfc_add_expr_to_block (&block, tmp); + } + + /* End of loop body. */ + tmp = gfc_finish_block (&block); + + gfc_init_block (&block); + /* Build the loop. */ + tmp = build1_v (LOOP_EXPR, tmp); + gfc_add_expr_to_block (&block, tmp); + + /* Add the exit label. */ + tmp = build1_v (LABEL_EXPR, exit_label); + gfc_add_expr_to_block (&block, tmp); + + return gfc_finish_block (&block); +} + + +/* Translate the SELECT CASE construct for INTEGER case expressions, + without killing all potential optimizations. The problem is that + Fortran allows unbounded cases, but the back-end does not, so we + need to intercept those before we enter the equivalent SWITCH_EXPR + we can build. + + For example, we translate this, + + SELECT CASE (expr) + CASE (:100,101,105:115) + block_1 + CASE (190:199,200:) + block_2 + CASE (300) + block_3 + CASE DEFAULT + block_4 + END SELECT + + to the GENERIC equivalent, + + switch (expr) + { + case (minimum value for typeof(expr) ... 100: + case 101: + case 105 ... 114: + block1: + goto end_label; + + case 200 ... (maximum value for typeof(expr): + case 190 ... 199: + block2; + goto end_label; + + case 300: + block_3; + goto end_label; + + default: + block_4; + goto end_label; + } + + end_label: */ + +static tree +gfc_trans_integer_select (gfc_code * code) +{ + gfc_code *c; + gfc_case *cp; + tree end_label; + tree tmp; + gfc_se se; + stmtblock_t block; + stmtblock_t body; + + gfc_start_block (&block); + + /* Calculate the switch expression. */ + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, code->expr); + gfc_add_block_to_block (&block, &se.pre); + + end_label = gfc_build_label_decl (NULL_TREE); + + gfc_init_block (&body); + + for (c = code->block; c; c = c->block) + { + for (cp = c->ext.case_list; cp; cp = cp->next) + { + tree low, high; + tree label; + + /* Assume it's the default case. */ + low = high = NULL_TREE; + + if (cp->low) + { + low = gfc_conv_mpz_to_tree (cp->low->value.integer, + cp->low->ts.kind); + + /* If there's only a lower bound, set the high bound to the + maximum value of the case expression. */ + if (!cp->high) + high = TYPE_MAX_VALUE (TREE_TYPE (se.expr)); + } + + if (cp->high) + { + /* Three cases are possible here: + + 1) There is no lower bound, e.g. CASE (:N). + 2) There is a lower bound .NE. high bound, that is + a case range, e.g. CASE (N:M) where M>N (we make + sure that M>N during type resolution). + 3) There is a lower bound, and it has the same value + as the high bound, e.g. CASE (N:N). This is our + internal representation of CASE(N). + + In the first and second case, we need to set a value for + high. In the third case, we don't because the GCC middle + end represents a single case value by just letting high be + a NULL_TREE. We can't do that because we need to be able + to represent unbounded cases. */ + + if (!cp->low + || (cp->low + && mpz_cmp (cp->low->value.integer, + cp->high->value.integer) != 0)) + high = gfc_conv_mpz_to_tree (cp->high->value.integer, + cp->high->ts.kind); + + /* Unbounded case. */ + if (!cp->low) + low = TYPE_MIN_VALUE (TREE_TYPE (se.expr)); + } + + /* Build a label. */ + label = gfc_build_label_decl (NULL_TREE); + + /* Add this case label. + Add parameter 'label', make it match GCC backend. */ + tmp = fold_build3 (CASE_LABEL_EXPR, void_type_node, + low, high, label); + gfc_add_expr_to_block (&body, tmp); + } + + /* Add the statements for this case. */ + tmp = gfc_trans_code (c->next); + gfc_add_expr_to_block (&body, tmp); + + /* Break to the end of the construct. */ + tmp = build1_v (GOTO_EXPR, end_label); + gfc_add_expr_to_block (&body, tmp); + } + + tmp = gfc_finish_block (&body); + tmp = build3_v (SWITCH_EXPR, se.expr, tmp, NULL_TREE); + gfc_add_expr_to_block (&block, tmp); + + tmp = build1_v (LABEL_EXPR, end_label); + gfc_add_expr_to_block (&block, tmp); + + return gfc_finish_block (&block); +} + + +/* Translate the SELECT CASE construct for LOGICAL case expressions. + + There are only two cases possible here, even though the standard + does allow three cases in a LOGICAL SELECT CASE construct: .TRUE., + .FALSE., and DEFAULT. + + We never generate more than two blocks here. Instead, we always + try to eliminate the DEFAULT case. This way, we can translate this + kind of SELECT construct to a simple + + if {} else {}; + + expression in GENERIC. */ + +static tree +gfc_trans_logical_select (gfc_code * code) +{ + gfc_code *c; + gfc_code *t, *f, *d; + gfc_case *cp; + gfc_se se; + stmtblock_t block; + + /* Assume we don't have any cases at all. */ + t = f = d = NULL; + + /* Now see which ones we actually do have. We can have at most two + cases in a single case list: one for .TRUE. and one for .FALSE. + The default case is always separate. If the cases for .TRUE. and + .FALSE. are in the same case list, the block for that case list + always executed, and we don't generate code a COND_EXPR. */ + for (c = code->block; c; c = c->block) + { + for (cp = c->ext.case_list; cp; cp = cp->next) + { + if (cp->low) + { + if (cp->low->value.logical == 0) /* .FALSE. */ + f = c; + else /* if (cp->value.logical != 0), thus .TRUE. */ + t = c; + } + else + d = c; + } + } + + /* Start a new block. */ + gfc_start_block (&block); + + /* Calculate the switch expression. We always need to do this + because it may have side effects. */ + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, code->expr); + gfc_add_block_to_block (&block, &se.pre); + + if (t == f && t != NULL) + { + /* Cases for .TRUE. and .FALSE. are in the same block. Just + translate the code for these cases, append it to the current + block. */ + gfc_add_expr_to_block (&block, gfc_trans_code (t->next)); + } + else + { + tree true_tree, false_tree, stmt; + + true_tree = build_empty_stmt (); + false_tree = build_empty_stmt (); + + /* If we have a case for .TRUE. and for .FALSE., discard the default case. + Otherwise, if .TRUE. or .FALSE. is missing and there is a default case, + make the missing case the default case. */ + if (t != NULL && f != NULL) + d = NULL; + else if (d != NULL) + { + if (t == NULL) + t = d; + else + f = d; + } + + /* Translate the code for each of these blocks, and append it to + the current block. */ + if (t != NULL) + true_tree = gfc_trans_code (t->next); + + if (f != NULL) + false_tree = gfc_trans_code (f->next); + + stmt = fold_build3 (COND_EXPR, void_type_node, se.expr, + true_tree, false_tree); + gfc_add_expr_to_block (&block, stmt); + } + + return gfc_finish_block (&block); +} + + +/* Translate the SELECT CASE construct for CHARACTER case expressions. + Instead of generating compares and jumps, it is far simpler to + generate a data structure describing the cases in order and call a + library subroutine that locates the right case. + This is particularly true because this is the only case where we + might have to dispose of a temporary. + The library subroutine returns a pointer to jump to or NULL if no + branches are to be taken. */ + +static tree +gfc_trans_character_select (gfc_code *code) +{ + tree init, node, end_label, tmp, type, case_num, label, fndecl; + stmtblock_t block, body; + gfc_case *cp, *d; + gfc_code *c; + gfc_se se; + int n, k; + + /* The jump table types are stored in static variables to avoid + constructing them from scratch every single time. */ + static tree select_struct[2]; + static tree ss_string1[2], ss_string1_len[2]; + static tree ss_string2[2], ss_string2_len[2]; + static tree ss_target[2]; + + tree pchartype = gfc_get_pchar_type (code->expr->ts.kind); + + if (code->expr->ts.kind == 1) + k = 0; + else if (code->expr->ts.kind == 4) + k = 1; + else + gcc_unreachable (); + + if (select_struct[k] == NULL) + { + select_struct[k] = make_node (RECORD_TYPE); + + if (code->expr->ts.kind == 1) + TYPE_NAME (select_struct[k]) = get_identifier ("_jump_struct_char1"); + else if (code->expr->ts.kind == 4) + TYPE_NAME (select_struct[k]) = get_identifier ("_jump_struct_char4"); + else + gcc_unreachable (); + +#undef ADD_FIELD +#define ADD_FIELD(NAME, TYPE) \ + ss_##NAME[k] = gfc_add_field_to_struct \ + (&(TYPE_FIELDS (select_struct[k])), select_struct[k], \ + get_identifier (stringize(NAME)), TYPE) + + ADD_FIELD (string1, pchartype); + ADD_FIELD (string1_len, gfc_charlen_type_node); + + ADD_FIELD (string2, pchartype); + ADD_FIELD (string2_len, gfc_charlen_type_node); + + ADD_FIELD (target, integer_type_node); +#undef ADD_FIELD + + gfc_finish_type (select_struct[k]); + } + + cp = code->block->ext.case_list; + while (cp->left != NULL) + cp = cp->left; + + n = 0; + for (d = cp; d; d = d->right) + d->n = n++; + + end_label = gfc_build_label_decl (NULL_TREE); + + /* Generate the body */ + gfc_start_block (&block); + gfc_init_block (&body); + + for (c = code->block; c; c = c->block) + { + for (d = c->ext.case_list; d; d = d->next) + { + label = gfc_build_label_decl (NULL_TREE); + tmp = fold_build3 (CASE_LABEL_EXPR, void_type_node, + build_int_cst (NULL_TREE, d->n), + build_int_cst (NULL_TREE, d->n), label); + gfc_add_expr_to_block (&body, tmp); + } + + tmp = gfc_trans_code (c->next); + gfc_add_expr_to_block (&body, tmp); + + tmp = build1_v (GOTO_EXPR, end_label); + gfc_add_expr_to_block (&body, tmp); + } + + /* Generate the structure describing the branches */ + init = NULL_TREE; + + for(d = cp; d; d = d->right) + { + node = NULL_TREE; + + gfc_init_se (&se, NULL); + + if (d->low == NULL) + { + node = tree_cons (ss_string1[k], null_pointer_node, node); + node = tree_cons (ss_string1_len[k], integer_zero_node, node); + } + else + { + gfc_conv_expr_reference (&se, d->low); + + node = tree_cons (ss_string1[k], se.expr, node); + node = tree_cons (ss_string1_len[k], se.string_length, node); + } + + if (d->high == NULL) + { + node = tree_cons (ss_string2[k], null_pointer_node, node); + node = tree_cons (ss_string2_len[k], integer_zero_node, node); + } + else + { + gfc_init_se (&se, NULL); + gfc_conv_expr_reference (&se, d->high); + + node = tree_cons (ss_string2[k], se.expr, node); + node = tree_cons (ss_string2_len[k], se.string_length, node); + } + + node = tree_cons (ss_target[k], build_int_cst (integer_type_node, d->n), + node); + + tmp = build_constructor_from_list (select_struct[k], nreverse (node)); + init = tree_cons (NULL_TREE, tmp, init); + } + + type = build_array_type (select_struct[k], + build_index_type (build_int_cst (NULL_TREE, n-1))); + + init = build_constructor_from_list (type, nreverse(init)); + TREE_CONSTANT (init) = 1; + TREE_STATIC (init) = 1; + /* Create a static variable to hold the jump table. */ + tmp = gfc_create_var (type, "jumptable"); + TREE_CONSTANT (tmp) = 1; + TREE_STATIC (tmp) = 1; + TREE_READONLY (tmp) = 1; + DECL_INITIAL (tmp) = init; + init = tmp; + + /* Build the library call */ + init = gfc_build_addr_expr (pvoid_type_node, init); + + gfc_init_se (&se, NULL); + gfc_conv_expr_reference (&se, code->expr); + + gfc_add_block_to_block (&block, &se.pre); + + if (code->expr->ts.kind == 1) + fndecl = gfor_fndecl_select_string; + else if (code->expr->ts.kind == 4) + fndecl = gfor_fndecl_select_string_char4; + else + gcc_unreachable (); + + tmp = build_call_expr (fndecl, 4, init, build_int_cst (NULL_TREE, n), + se.expr, se.string_length); + case_num = gfc_create_var (integer_type_node, "case_num"); + gfc_add_modify (&block, case_num, tmp); + + gfc_add_block_to_block (&block, &se.post); + + tmp = gfc_finish_block (&body); + tmp = build3_v (SWITCH_EXPR, case_num, tmp, NULL_TREE); + gfc_add_expr_to_block (&block, tmp); + + tmp = build1_v (LABEL_EXPR, end_label); + gfc_add_expr_to_block (&block, tmp); + + return gfc_finish_block (&block); +} + + +/* Translate the three variants of the SELECT CASE construct. + + SELECT CASEs with INTEGER case expressions can be translated to an + equivalent GENERIC switch statement, and for LOGICAL case + expressions we build one or two if-else compares. + + SELECT CASEs with CHARACTER case expressions are a whole different + story, because they don't exist in GENERIC. So we sort them and + do a binary search at runtime. + + Fortran has no BREAK statement, and it does not allow jumps from + one case block to another. That makes things a lot easier for + the optimizers. */ + +tree +gfc_trans_select (gfc_code * code) +{ + gcc_assert (code && code->expr); + + /* Empty SELECT constructs are legal. */ + if (code->block == NULL) + return build_empty_stmt (); + + /* Select the correct translation function. */ + switch (code->expr->ts.type) + { + case BT_LOGICAL: return gfc_trans_logical_select (code); + case BT_INTEGER: return gfc_trans_integer_select (code); + case BT_CHARACTER: return gfc_trans_character_select (code); + default: + gfc_internal_error ("gfc_trans_select(): Bad type for case expr."); + /* Not reached */ + } +} + + +/* Traversal function to substitute a replacement symtree if the symbol + in the expression is the same as that passed. f == 2 signals that + that variable itself is not to be checked - only the references. + This group of functions is used when the variable expression in a + FORALL assignment has internal references. For example: + FORALL (i = 1:4) p(p(i)) = i + The only recourse here is to store a copy of 'p' for the index + expression. */ + +static gfc_symtree *new_symtree; +static gfc_symtree *old_symtree; + +static bool +forall_replace (gfc_expr *expr, gfc_symbol *sym, int *f) +{ + if (expr->expr_type != EXPR_VARIABLE) + return false; + + if (*f == 2) + *f = 1; + else if (expr->symtree->n.sym == sym) + expr->symtree = new_symtree; + + return false; +} + +static void +forall_replace_symtree (gfc_expr *e, gfc_symbol *sym, int f) +{ + gfc_traverse_expr (e, sym, forall_replace, f); +} + +static bool +forall_restore (gfc_expr *expr, + gfc_symbol *sym ATTRIBUTE_UNUSED, + int *f ATTRIBUTE_UNUSED) +{ + if (expr->expr_type != EXPR_VARIABLE) + return false; + + if (expr->symtree == new_symtree) + expr->symtree = old_symtree; + + return false; +} + +static void +forall_restore_symtree (gfc_expr *e) +{ + gfc_traverse_expr (e, NULL, forall_restore, 0); +} + +static void +forall_make_variable_temp (gfc_code *c, stmtblock_t *pre, stmtblock_t *post) +{ + gfc_se tse; + gfc_se rse; + gfc_expr *e; + gfc_symbol *new_sym; + gfc_symbol *old_sym; + gfc_symtree *root; + tree tmp; + + /* Build a copy of the lvalue. */ + old_symtree = c->expr->symtree; + old_sym = old_symtree->n.sym; + e = gfc_lval_expr_from_sym (old_sym); + if (old_sym->attr.dimension) + { + gfc_init_se (&tse, NULL); + gfc_conv_subref_array_arg (&tse, e, 0, INTENT_IN); + gfc_add_block_to_block (pre, &tse.pre); + gfc_add_block_to_block (post, &tse.post); + tse.expr = build_fold_indirect_ref (tse.expr); + + if (e->ts.type != BT_CHARACTER) + { + /* Use the variable offset for the temporary. */ + tmp = gfc_conv_descriptor_offset (tse.expr); + gfc_add_modify (pre, tmp, + gfc_conv_array_offset (old_sym->backend_decl)); + } + } + else + { + gfc_init_se (&tse, NULL); + gfc_init_se (&rse, NULL); + gfc_conv_expr (&rse, e); + if (e->ts.type == BT_CHARACTER) + { + tse.string_length = rse.string_length; + tmp = gfc_get_character_type_len (gfc_default_character_kind, + tse.string_length); + tse.expr = gfc_conv_string_tmp (&tse, build_pointer_type (tmp), + rse.string_length); + gfc_add_block_to_block (pre, &tse.pre); + gfc_add_block_to_block (post, &tse.post); + } + else + { + tmp = gfc_typenode_for_spec (&e->ts); + tse.expr = gfc_create_var (tmp, "temp"); + } + + tmp = gfc_trans_scalar_assign (&tse, &rse, e->ts, true, + e->expr_type == EXPR_VARIABLE); + gfc_add_expr_to_block (pre, tmp); + } + gfc_free_expr (e); + + /* Create a new symbol to represent the lvalue. */ + new_sym = gfc_new_symbol (old_sym->name, NULL); + new_sym->ts = old_sym->ts; + new_sym->attr.referenced = 1; + new_sym->attr.dimension = old_sym->attr.dimension; + new_sym->attr.flavor = old_sym->attr.flavor; + + /* Use the temporary as the backend_decl. */ + new_sym->backend_decl = tse.expr; + + /* Create a fake symtree for it. */ + root = NULL; + new_symtree = gfc_new_symtree (&root, old_sym->name); + new_symtree->n.sym = new_sym; + gcc_assert (new_symtree == root); + + /* Go through the expression reference replacing the old_symtree + with the new. */ + forall_replace_symtree (c->expr, old_sym, 2); + + /* Now we have made this temporary, we might as well use it for + the right hand side. */ + forall_replace_symtree (c->expr2, old_sym, 1); +} + + +/* Handles dependencies in forall assignments. */ +static int +check_forall_dependencies (gfc_code *c, stmtblock_t *pre, stmtblock_t *post) +{ + gfc_ref *lref; + gfc_ref *rref; + int need_temp; + gfc_symbol *lsym; + + lsym = c->expr->symtree->n.sym; + need_temp = gfc_check_dependency (c->expr, c->expr2, 0); + + /* Now check for dependencies within the 'variable' + expression itself. These are treated by making a complete + copy of variable and changing all the references to it + point to the copy instead. Note that the shallow copy of + the variable will not suffice for derived types with + pointer components. We therefore leave these to their + own devices. */ + if (lsym->ts.type == BT_DERIVED + && lsym->ts.derived->attr.pointer_comp) + return need_temp; + + new_symtree = NULL; + if (find_forall_index (c->expr, lsym, 2) == SUCCESS) + { + forall_make_variable_temp (c, pre, post); + need_temp = 0; + } + + /* Substrings with dependencies are treated in the same + way. */ + if (c->expr->ts.type == BT_CHARACTER + && c->expr->ref + && c->expr2->expr_type == EXPR_VARIABLE + && lsym == c->expr2->symtree->n.sym) + { + for (lref = c->expr->ref; lref; lref = lref->next) + if (lref->type == REF_SUBSTRING) + break; + for (rref = c->expr2->ref; rref; rref = rref->next) + if (rref->type == REF_SUBSTRING) + break; + + if (rref && lref + && gfc_dep_compare_expr (rref->u.ss.start, lref->u.ss.start) < 0) + { + forall_make_variable_temp (c, pre, post); + need_temp = 0; + } + } + return need_temp; +} + + +static void +cleanup_forall_symtrees (gfc_code *c) +{ + forall_restore_symtree (c->expr); + forall_restore_symtree (c->expr2); + gfc_free (new_symtree->n.sym); + gfc_free (new_symtree); +} + + +/* Generate the loops for a FORALL block, specified by FORALL_TMP. BODY + is the contents of the FORALL block/stmt to be iterated. MASK_FLAG + indicates whether we should generate code to test the FORALLs mask + array. OUTER is the loop header to be used for initializing mask + indices. + + The generated loop format is: + count = (end - start + step) / step + loopvar = start + while (1) + { + if (count <=0 ) + goto end_of_loop + + loopvar += step + count -- + } + end_of_loop: */ + +static tree +gfc_trans_forall_loop (forall_info *forall_tmp, tree body, + int mask_flag, stmtblock_t *outer) +{ + int n, nvar; + tree tmp; + tree cond; + stmtblock_t block; + tree exit_label; + tree count; + tree var, start, end, step; + iter_info *iter; + + /* Initialize the mask index outside the FORALL nest. */ + if (mask_flag && forall_tmp->mask) + gfc_add_modify (outer, forall_tmp->maskindex, gfc_index_zero_node); + + iter = forall_tmp->this_loop; + nvar = forall_tmp->nvar; + for (n = 0; n < nvar; n++) + { + var = iter->var; + start = iter->start; + end = iter->end; + step = iter->step; + + exit_label = gfc_build_label_decl (NULL_TREE); + TREE_USED (exit_label) = 1; + + /* The loop counter. */ + count = gfc_create_var (TREE_TYPE (var), "count"); + + /* The body of the loop. */ + gfc_init_block (&block); + + /* The exit condition. */ + cond = fold_build2 (LE_EXPR, boolean_type_node, + count, build_int_cst (TREE_TYPE (count), 0)); + tmp = build1_v (GOTO_EXPR, exit_label); + tmp = fold_build3 (COND_EXPR, void_type_node, + cond, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&block, tmp); + + /* The main loop body. */ + gfc_add_expr_to_block (&block, body); + + /* Increment the loop variable. */ + tmp = fold_build2 (PLUS_EXPR, TREE_TYPE (var), var, step); + gfc_add_modify (&block, var, tmp); + + /* Advance to the next mask element. Only do this for the + innermost loop. */ + if (n == 0 && mask_flag && forall_tmp->mask) + { + tree maskindex = forall_tmp->maskindex; + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + maskindex, gfc_index_one_node); + gfc_add_modify (&block, maskindex, tmp); + } + + /* Decrement the loop counter. */ + tmp = fold_build2 (MINUS_EXPR, TREE_TYPE (var), count, + build_int_cst (TREE_TYPE (var), 1)); + gfc_add_modify (&block, count, tmp); + + body = gfc_finish_block (&block); + + /* Loop var initialization. */ + gfc_init_block (&block); + gfc_add_modify (&block, var, start); + + + /* Initialize the loop counter. */ + tmp = fold_build2 (MINUS_EXPR, TREE_TYPE (var), step, start); + tmp = fold_build2 (PLUS_EXPR, TREE_TYPE (var), end, tmp); + tmp = fold_build2 (TRUNC_DIV_EXPR, TREE_TYPE (var), tmp, step); + gfc_add_modify (&block, count, tmp); + + /* The loop expression. */ + tmp = build1_v (LOOP_EXPR, body); + gfc_add_expr_to_block (&block, tmp); + + /* The exit label. */ + tmp = build1_v (LABEL_EXPR, exit_label); + gfc_add_expr_to_block (&block, tmp); + + body = gfc_finish_block (&block); + iter = iter->next; + } + return body; +} + + +/* Generate the body and loops according to MASK_FLAG. If MASK_FLAG + is nonzero, the body is controlled by all masks in the forall nest. + Otherwise, the innermost loop is not controlled by it's mask. This + is used for initializing that mask. */ + +static tree +gfc_trans_nested_forall_loop (forall_info * nested_forall_info, tree body, + int mask_flag) +{ + tree tmp; + stmtblock_t header; + forall_info *forall_tmp; + tree mask, maskindex; + + gfc_start_block (&header); + + forall_tmp = nested_forall_info; + while (forall_tmp != NULL) + { + /* Generate body with masks' control. */ + if (mask_flag) + { + mask = forall_tmp->mask; + maskindex = forall_tmp->maskindex; + + /* If a mask was specified make the assignment conditional. */ + if (mask) + { + tmp = gfc_build_array_ref (mask, maskindex, NULL); + body = build3_v (COND_EXPR, tmp, body, build_empty_stmt ()); + } + } + body = gfc_trans_forall_loop (forall_tmp, body, mask_flag, &header); + forall_tmp = forall_tmp->prev_nest; + mask_flag = 1; + } + + gfc_add_expr_to_block (&header, body); + return gfc_finish_block (&header); +} + + +/* Allocate data for holding a temporary array. Returns either a local + temporary array or a pointer variable. */ + +static tree +gfc_do_allocate (tree bytesize, tree size, tree * pdata, stmtblock_t * pblock, + tree elem_type) +{ + tree tmpvar; + tree type; + tree tmp; + + if (INTEGER_CST_P (size)) + { + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, size, + gfc_index_one_node); + } + else + tmp = NULL_TREE; + + type = build_range_type (gfc_array_index_type, gfc_index_zero_node, tmp); + type = build_array_type (elem_type, type); + if (gfc_can_put_var_on_stack (bytesize)) + { + gcc_assert (INTEGER_CST_P (size)); + tmpvar = gfc_create_var (type, "temp"); + *pdata = NULL_TREE; + } + else + { + tmpvar = gfc_create_var (build_pointer_type (type), "temp"); + *pdata = convert (pvoid_type_node, tmpvar); + + tmp = gfc_call_malloc (pblock, TREE_TYPE (tmpvar), bytesize); + gfc_add_modify (pblock, tmpvar, tmp); + } + return tmpvar; +} + + +/* Generate codes to copy the temporary to the actual lhs. */ + +static tree +generate_loop_for_temp_to_lhs (gfc_expr *expr, tree tmp1, tree count3, + tree count1, tree wheremask, bool invert) +{ + gfc_ss *lss; + gfc_se lse, rse; + stmtblock_t block, body; + gfc_loopinfo loop1; + tree tmp; + tree wheremaskexpr; + + /* Walk the lhs. */ + lss = gfc_walk_expr (expr); + + if (lss == gfc_ss_terminator) + { + gfc_start_block (&block); + + gfc_init_se (&lse, NULL); + + /* Translate the expression. */ + gfc_conv_expr (&lse, expr); + + /* Form the expression for the temporary. */ + tmp = gfc_build_array_ref (tmp1, count1, NULL); + + /* Use the scalar assignment as is. */ + gfc_add_block_to_block (&block, &lse.pre); + gfc_add_modify (&block, lse.expr, tmp); + gfc_add_block_to_block (&block, &lse.post); + + /* Increment the count1. */ + tmp = fold_build2 (PLUS_EXPR, TREE_TYPE (count1), count1, + gfc_index_one_node); + gfc_add_modify (&block, count1, tmp); + + tmp = gfc_finish_block (&block); + } + else + { + gfc_start_block (&block); + + gfc_init_loopinfo (&loop1); + gfc_init_se (&rse, NULL); + gfc_init_se (&lse, NULL); + + /* Associate the lss with the loop. */ + gfc_add_ss_to_loop (&loop1, lss); + + /* Calculate the bounds of the scalarization. */ + gfc_conv_ss_startstride (&loop1); + /* Setup the scalarizing loops. */ + gfc_conv_loop_setup (&loop1, &expr->where); + + gfc_mark_ss_chain_used (lss, 1); + + /* Start the scalarized loop body. */ + gfc_start_scalarized_body (&loop1, &body); + + /* Setup the gfc_se structures. */ + gfc_copy_loopinfo_to_se (&lse, &loop1); + lse.ss = lss; + + /* Form the expression of the temporary. */ + if (lss != gfc_ss_terminator) + rse.expr = gfc_build_array_ref (tmp1, count1, NULL); + /* Translate expr. */ + gfc_conv_expr (&lse, expr); + + /* Use the scalar assignment. */ + rse.string_length = lse.string_length; + tmp = gfc_trans_scalar_assign (&lse, &rse, expr->ts, false, false); + + /* Form the mask expression according to the mask tree list. */ + if (wheremask) + { + wheremaskexpr = gfc_build_array_ref (wheremask, count3, NULL); + if (invert) + wheremaskexpr = fold_build1 (TRUTH_NOT_EXPR, + TREE_TYPE (wheremaskexpr), + wheremaskexpr); + tmp = fold_build3 (COND_EXPR, void_type_node, + wheremaskexpr, tmp, build_empty_stmt ()); + } + + gfc_add_expr_to_block (&body, tmp); + + /* Increment count1. */ + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + count1, gfc_index_one_node); + gfc_add_modify (&body, count1, tmp); + + /* Increment count3. */ + if (count3) + { + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + count3, gfc_index_one_node); + gfc_add_modify (&body, count3, tmp); + } + + /* Generate the copying loops. */ + gfc_trans_scalarizing_loops (&loop1, &body); + gfc_add_block_to_block (&block, &loop1.pre); + gfc_add_block_to_block (&block, &loop1.post); + gfc_cleanup_loop (&loop1); + + tmp = gfc_finish_block (&block); + } + return tmp; +} + + +/* Generate codes to copy rhs to the temporary. TMP1 is the address of + temporary, LSS and RSS are formed in function compute_inner_temp_size(), + and should not be freed. WHEREMASK is the conditional execution mask + whose sense may be inverted by INVERT. */ + +static tree +generate_loop_for_rhs_to_temp (gfc_expr *expr2, tree tmp1, tree count3, + tree count1, gfc_ss *lss, gfc_ss *rss, + tree wheremask, bool invert) +{ + stmtblock_t block, body1; + gfc_loopinfo loop; + gfc_se lse; + gfc_se rse; + tree tmp; + tree wheremaskexpr; + + gfc_start_block (&block); + + gfc_init_se (&rse, NULL); + gfc_init_se (&lse, NULL); + + if (lss == gfc_ss_terminator) + { + gfc_init_block (&body1); + gfc_conv_expr (&rse, expr2); + lse.expr = gfc_build_array_ref (tmp1, count1, NULL); + } + else + { + /* Initialize the loop. */ + gfc_init_loopinfo (&loop); + + /* We may need LSS to determine the shape of the expression. */ + gfc_add_ss_to_loop (&loop, lss); + gfc_add_ss_to_loop (&loop, rss); + + gfc_conv_ss_startstride (&loop); + gfc_conv_loop_setup (&loop, &expr2->where); + + gfc_mark_ss_chain_used (rss, 1); + /* Start the loop body. */ + gfc_start_scalarized_body (&loop, &body1); + + /* Translate the expression. */ + gfc_copy_loopinfo_to_se (&rse, &loop); + rse.ss = rss; + gfc_conv_expr (&rse, expr2); + + /* Form the expression of the temporary. */ + lse.expr = gfc_build_array_ref (tmp1, count1, NULL); + } + + /* Use the scalar assignment. */ + lse.string_length = rse.string_length; + tmp = gfc_trans_scalar_assign (&lse, &rse, expr2->ts, true, + expr2->expr_type == EXPR_VARIABLE); + + /* Form the mask expression according to the mask tree list. */ + if (wheremask) + { + wheremaskexpr = gfc_build_array_ref (wheremask, count3, NULL); + if (invert) + wheremaskexpr = fold_build1 (TRUTH_NOT_EXPR, + TREE_TYPE (wheremaskexpr), + wheremaskexpr); + tmp = fold_build3 (COND_EXPR, void_type_node, + wheremaskexpr, tmp, build_empty_stmt ()); + } + + gfc_add_expr_to_block (&body1, tmp); + + if (lss == gfc_ss_terminator) + { + gfc_add_block_to_block (&block, &body1); + + /* Increment count1. */ + tmp = fold_build2 (PLUS_EXPR, TREE_TYPE (count1), count1, + gfc_index_one_node); + gfc_add_modify (&block, count1, tmp); + } + else + { + /* Increment count1. */ + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + count1, gfc_index_one_node); + gfc_add_modify (&body1, count1, tmp); + + /* Increment count3. */ + if (count3) + { + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + count3, gfc_index_one_node); + gfc_add_modify (&body1, count3, tmp); + } + + /* Generate the copying loops. */ + gfc_trans_scalarizing_loops (&loop, &body1); + + gfc_add_block_to_block (&block, &loop.pre); + gfc_add_block_to_block (&block, &loop.post); + + gfc_cleanup_loop (&loop); + /* TODO: Reuse lss and rss when copying temp->lhs. Need to be careful + as tree nodes in SS may not be valid in different scope. */ + } + + tmp = gfc_finish_block (&block); + return tmp; +} + + +/* Calculate the size of temporary needed in the assignment inside forall. + LSS and RSS are filled in this function. */ + +static tree +compute_inner_temp_size (gfc_expr *expr1, gfc_expr *expr2, + stmtblock_t * pblock, + gfc_ss **lss, gfc_ss **rss) +{ + gfc_loopinfo loop; + tree size; + int i; + int save_flag; + tree tmp; + + *lss = gfc_walk_expr (expr1); + *rss = NULL; + + size = gfc_index_one_node; + if (*lss != gfc_ss_terminator) + { + gfc_init_loopinfo (&loop); + + /* Walk the RHS of the expression. */ + *rss = gfc_walk_expr (expr2); + if (*rss == gfc_ss_terminator) + { + /* The rhs is scalar. Add a ss for the expression. */ + *rss = gfc_get_ss (); + (*rss)->next = gfc_ss_terminator; + (*rss)->type = GFC_SS_SCALAR; + (*rss)->expr = expr2; + } + + /* Associate the SS with the loop. */ + gfc_add_ss_to_loop (&loop, *lss); + /* We don't actually need to add the rhs at this point, but it might + make guessing the loop bounds a bit easier. */ + gfc_add_ss_to_loop (&loop, *rss); + + /* We only want the shape of the expression, not rest of the junk + generated by the scalarizer. */ + loop.array_parameter = 1; + + /* Calculate the bounds of the scalarization. */ + save_flag = flag_bounds_check; + flag_bounds_check = 0; + gfc_conv_ss_startstride (&loop); + flag_bounds_check = save_flag; + gfc_conv_loop_setup (&loop, &expr2->where); + + /* Figure out how many elements we need. */ + for (i = 0; i < loop.dimen; i++) + { + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + gfc_index_one_node, loop.from[i]); + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + tmp, loop.to[i]); + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, tmp); + } + gfc_add_block_to_block (pblock, &loop.pre); + size = gfc_evaluate_now (size, pblock); + gfc_add_block_to_block (pblock, &loop.post); + + /* TODO: write a function that cleans up a loopinfo without freeing + the SS chains. Currently a NOP. */ + } + + return size; +} + + +/* Calculate the overall iterator number of the nested forall construct. + This routine actually calculates the number of times the body of the + nested forall specified by NESTED_FORALL_INFO is executed and multiplies + that by the expression INNER_SIZE. The BLOCK argument specifies the + block in which to calculate the result, and the optional INNER_SIZE_BODY + argument contains any statements that need to executed (inside the loop) + to initialize or calculate INNER_SIZE. */ + +static tree +compute_overall_iter_number (forall_info *nested_forall_info, tree inner_size, + stmtblock_t *inner_size_body, stmtblock_t *block) +{ + forall_info *forall_tmp = nested_forall_info; + tree tmp, number; + stmtblock_t body; + + /* We can eliminate the innermost unconditional loops with constant + array bounds. */ + if (INTEGER_CST_P (inner_size)) + { + while (forall_tmp + && !forall_tmp->mask + && INTEGER_CST_P (forall_tmp->size)) + { + inner_size = fold_build2 (MULT_EXPR, gfc_array_index_type, + inner_size, forall_tmp->size); + forall_tmp = forall_tmp->prev_nest; + } + + /* If there are no loops left, we have our constant result. */ + if (!forall_tmp) + return inner_size; + } + + /* Otherwise, create a temporary variable to compute the result. */ + number = gfc_create_var (gfc_array_index_type, "num"); + gfc_add_modify (block, number, gfc_index_zero_node); + + gfc_start_block (&body); + if (inner_size_body) + gfc_add_block_to_block (&body, inner_size_body); + if (forall_tmp) + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + number, inner_size); + else + tmp = inner_size; + gfc_add_modify (&body, number, tmp); + tmp = gfc_finish_block (&body); + + /* Generate loops. */ + if (forall_tmp != NULL) + tmp = gfc_trans_nested_forall_loop (forall_tmp, tmp, 1); + + gfc_add_expr_to_block (block, tmp); + + return number; +} + + +/* Allocate temporary for forall construct. SIZE is the size of temporary + needed. PTEMP1 is returned for space free. */ + +static tree +allocate_temp_for_forall_nest_1 (tree type, tree size, stmtblock_t * block, + tree * ptemp1) +{ + tree bytesize; + tree unit; + tree tmp; + + unit = fold_convert (gfc_array_index_type, TYPE_SIZE_UNIT (type)); + if (!integer_onep (unit)) + bytesize = fold_build2 (MULT_EXPR, gfc_array_index_type, size, unit); + else + bytesize = size; + + *ptemp1 = NULL; + tmp = gfc_do_allocate (bytesize, size, ptemp1, block, type); + + if (*ptemp1) + tmp = build_fold_indirect_ref (tmp); + return tmp; +} + + +/* Allocate temporary for forall construct according to the information in + nested_forall_info. INNER_SIZE is the size of temporary needed in the + assignment inside forall. PTEMP1 is returned for space free. */ + +static tree +allocate_temp_for_forall_nest (forall_info * nested_forall_info, tree type, + tree inner_size, stmtblock_t * inner_size_body, + stmtblock_t * block, tree * ptemp1) +{ + tree size; + + /* Calculate the total size of temporary needed in forall construct. */ + size = compute_overall_iter_number (nested_forall_info, inner_size, + inner_size_body, block); + + return allocate_temp_for_forall_nest_1 (type, size, block, ptemp1); +} + + +/* Handle assignments inside forall which need temporary. + + forall (i=start:end:stride; maskexpr) + e = f + end forall + (where e,f are arbitrary expressions possibly involving i + and there is a dependency between e and f) + Translates to: + masktmp(:) = maskexpr(:) + + maskindex = 0; + count1 = 0; + num = 0; + for (i = start; i <= end; i += stride) + num += SIZE (f) + count1 = 0; + ALLOCATE (tmp(num)) + for (i = start; i <= end; i += stride) + { + if (masktmp[maskindex++]) + tmp[count1++] = f + } + maskindex = 0; + count1 = 0; + for (i = start; i <= end; i += stride) + { + if (masktmp[maskindex++]) + e = tmp[count1++] + } + DEALLOCATE (tmp) + */ +static void +gfc_trans_assign_need_temp (gfc_expr * expr1, gfc_expr * expr2, + tree wheremask, bool invert, + forall_info * nested_forall_info, + stmtblock_t * block) +{ + tree type; + tree inner_size; + gfc_ss *lss, *rss; + tree count, count1; + tree tmp, tmp1; + tree ptemp1; + stmtblock_t inner_size_body; + + /* Create vars. count1 is the current iterator number of the nested + forall. */ + count1 = gfc_create_var (gfc_array_index_type, "count1"); + + /* Count is the wheremask index. */ + if (wheremask) + { + count = gfc_create_var (gfc_array_index_type, "count"); + gfc_add_modify (block, count, gfc_index_zero_node); + } + else + count = NULL; + + /* Initialize count1. */ + gfc_add_modify (block, count1, gfc_index_zero_node); + + /* Calculate the size of temporary needed in the assignment. Return loop, lss + and rss which are used in function generate_loop_for_rhs_to_temp(). */ + gfc_init_block (&inner_size_body); + inner_size = compute_inner_temp_size (expr1, expr2, &inner_size_body, + &lss, &rss); + + /* The type of LHS. Used in function allocate_temp_for_forall_nest */ + if (expr1->ts.type == BT_CHARACTER && expr1->ts.cl->length) + { + if (!expr1->ts.cl->backend_decl) + { + gfc_se tse; + gfc_init_se (&tse, NULL); + gfc_conv_expr (&tse, expr1->ts.cl->length); + expr1->ts.cl->backend_decl = tse.expr; + } + type = gfc_get_character_type_len (gfc_default_character_kind, + expr1->ts.cl->backend_decl); + } + else + type = gfc_typenode_for_spec (&expr1->ts); + + /* Allocate temporary for nested forall construct according to the + information in nested_forall_info and inner_size. */ + tmp1 = allocate_temp_for_forall_nest (nested_forall_info, type, inner_size, + &inner_size_body, block, &ptemp1); + + /* Generate codes to copy rhs to the temporary . */ + tmp = generate_loop_for_rhs_to_temp (expr2, tmp1, count, count1, lss, rss, + wheremask, invert); + + /* Generate body and loops according to the information in + nested_forall_info. */ + tmp = gfc_trans_nested_forall_loop (nested_forall_info, tmp, 1); + gfc_add_expr_to_block (block, tmp); + + /* Reset count1. */ + gfc_add_modify (block, count1, gfc_index_zero_node); + + /* Reset count. */ + if (wheremask) + gfc_add_modify (block, count, gfc_index_zero_node); + + /* Generate codes to copy the temporary to lhs. */ + tmp = generate_loop_for_temp_to_lhs (expr1, tmp1, count, count1, + wheremask, invert); + + /* Generate body and loops according to the information in + nested_forall_info. */ + tmp = gfc_trans_nested_forall_loop (nested_forall_info, tmp, 1); + gfc_add_expr_to_block (block, tmp); + + if (ptemp1) + { + /* Free the temporary. */ + tmp = gfc_call_free (ptemp1); + gfc_add_expr_to_block (block, tmp); + } +} + + +/* Translate pointer assignment inside FORALL which need temporary. */ + +static void +gfc_trans_pointer_assign_need_temp (gfc_expr * expr1, gfc_expr * expr2, + forall_info * nested_forall_info, + stmtblock_t * block) +{ + tree type; + tree inner_size; + gfc_ss *lss, *rss; + gfc_se lse; + gfc_se rse; + gfc_ss_info *info; + gfc_loopinfo loop; + tree desc; + tree parm; + tree parmtype; + stmtblock_t body; + tree count; + tree tmp, tmp1, ptemp1; + + count = gfc_create_var (gfc_array_index_type, "count"); + gfc_add_modify (block, count, gfc_index_zero_node); + + inner_size = integer_one_node; + lss = gfc_walk_expr (expr1); + rss = gfc_walk_expr (expr2); + if (lss == gfc_ss_terminator) + { + type = gfc_typenode_for_spec (&expr1->ts); + type = build_pointer_type (type); + + /* Allocate temporary for nested forall construct according to the + information in nested_forall_info and inner_size. */ + tmp1 = allocate_temp_for_forall_nest (nested_forall_info, type, + inner_size, NULL, block, &ptemp1); + gfc_start_block (&body); + gfc_init_se (&lse, NULL); + lse.expr = gfc_build_array_ref (tmp1, count, NULL); + gfc_init_se (&rse, NULL); + rse.want_pointer = 1; + gfc_conv_expr (&rse, expr2); + gfc_add_block_to_block (&body, &rse.pre); + gfc_add_modify (&body, lse.expr, + fold_convert (TREE_TYPE (lse.expr), rse.expr)); + gfc_add_block_to_block (&body, &rse.post); + + /* Increment count. */ + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + count, gfc_index_one_node); + gfc_add_modify (&body, count, tmp); + + tmp = gfc_finish_block (&body); + + /* Generate body and loops according to the information in + nested_forall_info. */ + tmp = gfc_trans_nested_forall_loop (nested_forall_info, tmp, 1); + gfc_add_expr_to_block (block, tmp); + + /* Reset count. */ + gfc_add_modify (block, count, gfc_index_zero_node); + + gfc_start_block (&body); + gfc_init_se (&lse, NULL); + gfc_init_se (&rse, NULL); + rse.expr = gfc_build_array_ref (tmp1, count, NULL); + lse.want_pointer = 1; + gfc_conv_expr (&lse, expr1); + gfc_add_block_to_block (&body, &lse.pre); + gfc_add_modify (&body, lse.expr, rse.expr); + gfc_add_block_to_block (&body, &lse.post); + /* Increment count. */ + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + count, gfc_index_one_node); + gfc_add_modify (&body, count, tmp); + tmp = gfc_finish_block (&body); + + /* Generate body and loops according to the information in + nested_forall_info. */ + tmp = gfc_trans_nested_forall_loop (nested_forall_info, tmp, 1); + gfc_add_expr_to_block (block, tmp); + } + else + { + gfc_init_loopinfo (&loop); + + /* Associate the SS with the loop. */ + gfc_add_ss_to_loop (&loop, rss); + + /* Setup the scalarizing loops and bounds. */ + gfc_conv_ss_startstride (&loop); + + gfc_conv_loop_setup (&loop, &expr2->where); + + info = &rss->data.info; + desc = info->descriptor; + + /* Make a new descriptor. */ + parmtype = gfc_get_element_type (TREE_TYPE (desc)); + parmtype = gfc_get_array_type_bounds (parmtype, loop.dimen, + loop.from, loop.to, 1, + GFC_ARRAY_UNKNOWN); + + /* Allocate temporary for nested forall construct. */ + tmp1 = allocate_temp_for_forall_nest (nested_forall_info, parmtype, + inner_size, NULL, block, &ptemp1); + gfc_start_block (&body); + gfc_init_se (&lse, NULL); + lse.expr = gfc_build_array_ref (tmp1, count, NULL); + lse.direct_byref = 1; + rss = gfc_walk_expr (expr2); + gfc_conv_expr_descriptor (&lse, expr2, rss); + + gfc_add_block_to_block (&body, &lse.pre); + gfc_add_block_to_block (&body, &lse.post); + + /* Increment count. */ + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + count, gfc_index_one_node); + gfc_add_modify (&body, count, tmp); + + tmp = gfc_finish_block (&body); + + /* Generate body and loops according to the information in + nested_forall_info. */ + tmp = gfc_trans_nested_forall_loop (nested_forall_info, tmp, 1); + gfc_add_expr_to_block (block, tmp); + + /* Reset count. */ + gfc_add_modify (block, count, gfc_index_zero_node); + + parm = gfc_build_array_ref (tmp1, count, NULL); + lss = gfc_walk_expr (expr1); + gfc_init_se (&lse, NULL); + gfc_conv_expr_descriptor (&lse, expr1, lss); + gfc_add_modify (&lse.pre, lse.expr, parm); + gfc_start_block (&body); + gfc_add_block_to_block (&body, &lse.pre); + gfc_add_block_to_block (&body, &lse.post); + + /* Increment count. */ + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + count, gfc_index_one_node); + gfc_add_modify (&body, count, tmp); + + tmp = gfc_finish_block (&body); + + tmp = gfc_trans_nested_forall_loop (nested_forall_info, tmp, 1); + gfc_add_expr_to_block (block, tmp); + } + /* Free the temporary. */ + if (ptemp1) + { + tmp = gfc_call_free (ptemp1); + gfc_add_expr_to_block (block, tmp); + } +} + + +/* FORALL and WHERE statements are really nasty, especially when you nest + them. All the rhs of a forall assignment must be evaluated before the + actual assignments are performed. Presumably this also applies to all the + assignments in an inner where statement. */ + +/* Generate code for a FORALL statement. Any temporaries are allocated as a + linear array, relying on the fact that we process in the same order in all + loops. + + forall (i=start:end:stride; maskexpr) + e = f + g = h + end forall + (where e,f,g,h are arbitrary expressions possibly involving i) + Translates to: + count = ((end + 1 - start) / stride) + masktmp(:) = maskexpr(:) + + maskindex = 0; + for (i = start; i <= end; i += stride) + { + if (masktmp[maskindex++]) + e = f + } + maskindex = 0; + for (i = start; i <= end; i += stride) + { + if (masktmp[maskindex++]) + g = h + } + + Note that this code only works when there are no dependencies. + Forall loop with array assignments and data dependencies are a real pain, + because the size of the temporary cannot always be determined before the + loop is executed. This problem is compounded by the presence of nested + FORALL constructs. + */ + +static tree +gfc_trans_forall_1 (gfc_code * code, forall_info * nested_forall_info) +{ + stmtblock_t pre; + stmtblock_t post; + stmtblock_t block; + stmtblock_t body; + tree *var; + tree *start; + tree *end; + tree *step; + gfc_expr **varexpr; + tree tmp; + tree assign; + tree size; + tree maskindex; + tree mask; + tree pmask; + int n; + int nvar; + int need_temp; + gfc_forall_iterator *fa; + gfc_se se; + gfc_code *c; + gfc_saved_var *saved_vars; + iter_info *this_forall; + forall_info *info; + bool need_mask; + + /* Do nothing if the mask is false. */ + if (code->expr + && code->expr->expr_type == EXPR_CONSTANT + && !code->expr->value.logical) + return build_empty_stmt (); + + n = 0; + /* Count the FORALL index number. */ + for (fa = code->ext.forall_iterator; fa; fa = fa->next) + n++; + nvar = n; + + /* Allocate the space for var, start, end, step, varexpr. */ + var = (tree *) gfc_getmem (nvar * sizeof (tree)); + start = (tree *) gfc_getmem (nvar * sizeof (tree)); + end = (tree *) gfc_getmem (nvar * sizeof (tree)); + step = (tree *) gfc_getmem (nvar * sizeof (tree)); + varexpr = (gfc_expr **) gfc_getmem (nvar * sizeof (gfc_expr *)); + saved_vars = (gfc_saved_var *) gfc_getmem (nvar * sizeof (gfc_saved_var)); + + /* Allocate the space for info. */ + info = (forall_info *) gfc_getmem (sizeof (forall_info)); + + gfc_start_block (&pre); + gfc_init_block (&post); + gfc_init_block (&block); + + n = 0; + for (fa = code->ext.forall_iterator; fa; fa = fa->next) + { + gfc_symbol *sym = fa->var->symtree->n.sym; + + /* Allocate space for this_forall. */ + this_forall = (iter_info *) gfc_getmem (sizeof (iter_info)); + + /* Create a temporary variable for the FORALL index. */ + tmp = gfc_typenode_for_spec (&sym->ts); + var[n] = gfc_create_var (tmp, sym->name); + gfc_shadow_sym (sym, var[n], &saved_vars[n]); + + /* Record it in this_forall. */ + this_forall->var = var[n]; + + /* Replace the index symbol's backend_decl with the temporary decl. */ + sym->backend_decl = var[n]; + + /* Work out the start, end and stride for the loop. */ + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, fa->start); + /* Record it in this_forall. */ + this_forall->start = se.expr; + gfc_add_block_to_block (&block, &se.pre); + start[n] = se.expr; + + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, fa->end); + /* Record it in this_forall. */ + this_forall->end = se.expr; + gfc_make_safe_expr (&se); + gfc_add_block_to_block (&block, &se.pre); + end[n] = se.expr; + + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, fa->stride); + /* Record it in this_forall. */ + this_forall->step = se.expr; + gfc_make_safe_expr (&se); + gfc_add_block_to_block (&block, &se.pre); + step[n] = se.expr; + + /* Set the NEXT field of this_forall to NULL. */ + this_forall->next = NULL; + /* Link this_forall to the info construct. */ + if (info->this_loop) + { + iter_info *iter_tmp = info->this_loop; + while (iter_tmp->next != NULL) + iter_tmp = iter_tmp->next; + iter_tmp->next = this_forall; + } + else + info->this_loop = this_forall; + + n++; + } + nvar = n; + + /* Calculate the size needed for the current forall level. */ + size = gfc_index_one_node; + for (n = 0; n < nvar; n++) + { + /* size = (end + step - start) / step. */ + tmp = fold_build2 (MINUS_EXPR, TREE_TYPE (start[n]), + step[n], start[n]); + tmp = fold_build2 (PLUS_EXPR, TREE_TYPE (end[n]), end[n], tmp); + + tmp = fold_build2 (FLOOR_DIV_EXPR, TREE_TYPE (tmp), tmp, step[n]); + tmp = convert (gfc_array_index_type, tmp); + + size = fold_build2 (MULT_EXPR, gfc_array_index_type, size, tmp); + } + + /* Record the nvar and size of current forall level. */ + info->nvar = nvar; + info->size = size; + + if (code->expr) + { + /* If the mask is .true., consider the FORALL unconditional. */ + if (code->expr->expr_type == EXPR_CONSTANT + && code->expr->value.logical) + need_mask = false; + else + need_mask = true; + } + else + need_mask = false; + + /* First we need to allocate the mask. */ + if (need_mask) + { + /* As the mask array can be very big, prefer compact boolean types. */ + tree mask_type = gfc_get_logical_type (gfc_logical_kinds[0].kind); + mask = allocate_temp_for_forall_nest (nested_forall_info, mask_type, + size, NULL, &block, &pmask); + maskindex = gfc_create_var_np (gfc_array_index_type, "mi"); + + /* Record them in the info structure. */ + info->maskindex = maskindex; + info->mask = mask; + } + else + { + /* No mask was specified. */ + maskindex = NULL_TREE; + mask = pmask = NULL_TREE; + } + + /* Link the current forall level to nested_forall_info. */ + info->prev_nest = nested_forall_info; + nested_forall_info = info; + + /* Copy the mask into a temporary variable if required. + For now we assume a mask temporary is needed. */ + if (need_mask) + { + /* As the mask array can be very big, prefer compact boolean types. */ + tree mask_type = gfc_get_logical_type (gfc_logical_kinds[0].kind); + + gfc_add_modify (&block, maskindex, gfc_index_zero_node); + + /* Start of mask assignment loop body. */ + gfc_start_block (&body); + + /* Evaluate the mask expression. */ + gfc_init_se (&se, NULL); + gfc_conv_expr_val (&se, code->expr); + gfc_add_block_to_block (&body, &se.pre); + + /* Store the mask. */ + se.expr = convert (mask_type, se.expr); + + tmp = gfc_build_array_ref (mask, maskindex, NULL); + gfc_add_modify (&body, tmp, se.expr); + + /* Advance to the next mask element. */ + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + maskindex, gfc_index_one_node); + gfc_add_modify (&body, maskindex, tmp); + + /* Generate the loops. */ + tmp = gfc_finish_block (&body); + tmp = gfc_trans_nested_forall_loop (info, tmp, 0); + gfc_add_expr_to_block (&block, tmp); + } + + c = code->block->next; + + /* TODO: loop merging in FORALL statements. */ + /* Now that we've got a copy of the mask, generate the assignment loops. */ + while (c) + { + switch (c->op) + { + case EXEC_ASSIGN: + /* A scalar or array assignment. DO the simple check for + lhs to rhs dependencies. These make a temporary for the + rhs and form a second forall block to copy to variable. */ + need_temp = check_forall_dependencies(c, &pre, &post); + + /* Temporaries due to array assignment data dependencies introduce + no end of problems. */ + if (need_temp) + gfc_trans_assign_need_temp (c->expr, c->expr2, NULL, false, + nested_forall_info, &block); + else + { + /* Use the normal assignment copying routines. */ + assign = gfc_trans_assignment (c->expr, c->expr2, false); + + /* Generate body and loops. */ + tmp = gfc_trans_nested_forall_loop (nested_forall_info, + assign, 1); + gfc_add_expr_to_block (&block, tmp); + } + + /* Cleanup any temporary symtrees that have been made to deal + with dependencies. */ + if (new_symtree) + cleanup_forall_symtrees (c); + + break; + + case EXEC_WHERE: + /* Translate WHERE or WHERE construct nested in FORALL. */ + gfc_trans_where_2 (c, NULL, false, nested_forall_info, &block); + break; + + /* Pointer assignment inside FORALL. */ + case EXEC_POINTER_ASSIGN: + need_temp = gfc_check_dependency (c->expr, c->expr2, 0); + if (need_temp) + gfc_trans_pointer_assign_need_temp (c->expr, c->expr2, + nested_forall_info, &block); + else + { + /* Use the normal assignment copying routines. */ + assign = gfc_trans_pointer_assignment (c->expr, c->expr2); + + /* Generate body and loops. */ + tmp = gfc_trans_nested_forall_loop (nested_forall_info, + assign, 1); + gfc_add_expr_to_block (&block, tmp); + } + break; + + case EXEC_FORALL: + tmp = gfc_trans_forall_1 (c, nested_forall_info); + gfc_add_expr_to_block (&block, tmp); + break; + + /* Explicit subroutine calls are prevented by the frontend but interface + assignments can legitimately produce them. */ + case EXEC_ASSIGN_CALL: + assign = gfc_trans_call (c, true); + tmp = gfc_trans_nested_forall_loop (nested_forall_info, assign, 1); + gfc_add_expr_to_block (&block, tmp); + break; + + default: + gcc_unreachable (); + } + + c = c->next; + } + + /* Restore the original index variables. */ + for (fa = code->ext.forall_iterator, n = 0; fa; fa = fa->next, n++) + gfc_restore_sym (fa->var->symtree->n.sym, &saved_vars[n]); + + /* Free the space for var, start, end, step, varexpr. */ + gfc_free (var); + gfc_free (start); + gfc_free (end); + gfc_free (step); + gfc_free (varexpr); + gfc_free (saved_vars); + + /* Free the space for this forall_info. */ + gfc_free (info); + + if (pmask) + { + /* Free the temporary for the mask. */ + tmp = gfc_call_free (pmask); + gfc_add_expr_to_block (&block, tmp); + } + if (maskindex) + pushdecl (maskindex); + + gfc_add_block_to_block (&pre, &block); + gfc_add_block_to_block (&pre, &post); + + return gfc_finish_block (&pre); +} + + +/* Translate the FORALL statement or construct. */ + +tree gfc_trans_forall (gfc_code * code) +{ + return gfc_trans_forall_1 (code, NULL); +} + + +/* Evaluate the WHERE mask expression, copy its value to a temporary. + If the WHERE construct is nested in FORALL, compute the overall temporary + needed by the WHERE mask expression multiplied by the iterator number of + the nested forall. + ME is the WHERE mask expression. + MASK is the current execution mask upon input, whose sense may or may + not be inverted as specified by the INVERT argument. + CMASK is the updated execution mask on output, or NULL if not required. + PMASK is the pending execution mask on output, or NULL if not required. + BLOCK is the block in which to place the condition evaluation loops. */ + +static void +gfc_evaluate_where_mask (gfc_expr * me, forall_info * nested_forall_info, + tree mask, bool invert, tree cmask, tree pmask, + tree mask_type, stmtblock_t * block) +{ + tree tmp, tmp1; + gfc_ss *lss, *rss; + gfc_loopinfo loop; + stmtblock_t body, body1; + tree count, cond, mtmp; + gfc_se lse, rse; + + gfc_init_loopinfo (&loop); + + lss = gfc_walk_expr (me); + rss = gfc_walk_expr (me); + + /* Variable to index the temporary. */ + count = gfc_create_var (gfc_array_index_type, "count"); + /* Initialize count. */ + gfc_add_modify (block, count, gfc_index_zero_node); + + gfc_start_block (&body); + + gfc_init_se (&rse, NULL); + gfc_init_se (&lse, NULL); + + if (lss == gfc_ss_terminator) + { + gfc_init_block (&body1); + } + else + { + /* Initialize the loop. */ + gfc_init_loopinfo (&loop); + + /* We may need LSS to determine the shape of the expression. */ + gfc_add_ss_to_loop (&loop, lss); + gfc_add_ss_to_loop (&loop, rss); + + gfc_conv_ss_startstride (&loop); + gfc_conv_loop_setup (&loop, &me->where); + + gfc_mark_ss_chain_used (rss, 1); + /* Start the loop body. */ + gfc_start_scalarized_body (&loop, &body1); + + /* Translate the expression. */ + gfc_copy_loopinfo_to_se (&rse, &loop); + rse.ss = rss; + gfc_conv_expr (&rse, me); + } + + /* Variable to evaluate mask condition. */ + cond = gfc_create_var (mask_type, "cond"); + if (mask && (cmask || pmask)) + mtmp = gfc_create_var (mask_type, "mask"); + else mtmp = NULL_TREE; + + gfc_add_block_to_block (&body1, &lse.pre); + gfc_add_block_to_block (&body1, &rse.pre); + + gfc_add_modify (&body1, cond, fold_convert (mask_type, rse.expr)); + + if (mask && (cmask || pmask)) + { + tmp = gfc_build_array_ref (mask, count, NULL); + if (invert) + tmp = fold_build1 (TRUTH_NOT_EXPR, mask_type, tmp); + gfc_add_modify (&body1, mtmp, tmp); + } + + if (cmask) + { + tmp1 = gfc_build_array_ref (cmask, count, NULL); + tmp = cond; + if (mask) + tmp = fold_build2 (TRUTH_AND_EXPR, mask_type, mtmp, tmp); + gfc_add_modify (&body1, tmp1, tmp); + } + + if (pmask) + { + tmp1 = gfc_build_array_ref (pmask, count, NULL); + tmp = fold_build1 (TRUTH_NOT_EXPR, mask_type, cond); + if (mask) + tmp = fold_build2 (TRUTH_AND_EXPR, mask_type, mtmp, tmp); + gfc_add_modify (&body1, tmp1, tmp); + } + + gfc_add_block_to_block (&body1, &lse.post); + gfc_add_block_to_block (&body1, &rse.post); + + if (lss == gfc_ss_terminator) + { + gfc_add_block_to_block (&body, &body1); + } + else + { + /* Increment count. */ + tmp1 = fold_build2 (PLUS_EXPR, gfc_array_index_type, count, + gfc_index_one_node); + gfc_add_modify (&body1, count, tmp1); + + /* Generate the copying loops. */ + gfc_trans_scalarizing_loops (&loop, &body1); + + gfc_add_block_to_block (&body, &loop.pre); + gfc_add_block_to_block (&body, &loop.post); + + gfc_cleanup_loop (&loop); + /* TODO: Reuse lss and rss when copying temp->lhs. Need to be careful + as tree nodes in SS may not be valid in different scope. */ + } + + tmp1 = gfc_finish_block (&body); + /* If the WHERE construct is inside FORALL, fill the full temporary. */ + if (nested_forall_info != NULL) + tmp1 = gfc_trans_nested_forall_loop (nested_forall_info, tmp1, 1); + + gfc_add_expr_to_block (block, tmp1); +} + + +/* Translate an assignment statement in a WHERE statement or construct + statement. The MASK expression is used to control which elements + of EXPR1 shall be assigned. The sense of MASK is specified by + INVERT. */ + +static tree +gfc_trans_where_assign (gfc_expr *expr1, gfc_expr *expr2, + tree mask, bool invert, + tree count1, tree count2, + gfc_symbol *sym) +{ + gfc_se lse; + gfc_se rse; + gfc_ss *lss; + gfc_ss *lss_section; + gfc_ss *rss; + + gfc_loopinfo loop; + tree tmp; + stmtblock_t block; + stmtblock_t body; + tree index, maskexpr; + +#if 0 + /* TODO: handle this special case. + Special case a single function returning an array. */ + if (expr2->expr_type == EXPR_FUNCTION && expr2->rank > 0) + { + tmp = gfc_trans_arrayfunc_assign (expr1, expr2); + if (tmp) + return tmp; + } +#endif + + /* Assignment of the form lhs = rhs. */ + gfc_start_block (&block); + + gfc_init_se (&lse, NULL); + gfc_init_se (&rse, NULL); + + /* Walk the lhs. */ + lss = gfc_walk_expr (expr1); + rss = NULL; + + /* In each where-assign-stmt, the mask-expr and the variable being + defined shall be arrays of the same shape. */ + gcc_assert (lss != gfc_ss_terminator); + + /* The assignment needs scalarization. */ + lss_section = lss; + + /* Find a non-scalar SS from the lhs. */ + while (lss_section != gfc_ss_terminator + && lss_section->type != GFC_SS_SECTION) + lss_section = lss_section->next; + + gcc_assert (lss_section != gfc_ss_terminator); + + /* Initialize the scalarizer. */ + gfc_init_loopinfo (&loop); + + /* Walk the rhs. */ + rss = gfc_walk_expr (expr2); + if (rss == gfc_ss_terminator) + { + /* The rhs is scalar. Add a ss for the expression. */ + rss = gfc_get_ss (); + rss->where = 1; + rss->next = gfc_ss_terminator; + rss->type = GFC_SS_SCALAR; + rss->expr = expr2; + } + + /* Associate the SS with the loop. */ + gfc_add_ss_to_loop (&loop, lss); + gfc_add_ss_to_loop (&loop, rss); + + /* Calculate the bounds of the scalarization. */ + gfc_conv_ss_startstride (&loop); + + /* Resolve any data dependencies in the statement. */ + gfc_conv_resolve_dependencies (&loop, lss_section, rss); + + /* Setup the scalarizing loops. */ + gfc_conv_loop_setup (&loop, &expr2->where); + + /* Setup the gfc_se structures. */ + gfc_copy_loopinfo_to_se (&lse, &loop); + gfc_copy_loopinfo_to_se (&rse, &loop); + + rse.ss = rss; + gfc_mark_ss_chain_used (rss, 1); + if (loop.temp_ss == NULL) + { + lse.ss = lss; + gfc_mark_ss_chain_used (lss, 1); + } + else + { + lse.ss = loop.temp_ss; + gfc_mark_ss_chain_used (lss, 3); + gfc_mark_ss_chain_used (loop.temp_ss, 3); + } + + /* Start the scalarized loop body. */ + gfc_start_scalarized_body (&loop, &body); + + /* Translate the expression. */ + gfc_conv_expr (&rse, expr2); + if (lss != gfc_ss_terminator && loop.temp_ss != NULL) + { + gfc_conv_tmp_array_ref (&lse); + gfc_advance_se_ss_chain (&lse); + } + else + gfc_conv_expr (&lse, expr1); + + /* Form the mask expression according to the mask. */ + index = count1; + maskexpr = gfc_build_array_ref (mask, index, NULL); + if (invert) + maskexpr = fold_build1 (TRUTH_NOT_EXPR, TREE_TYPE (maskexpr), maskexpr); + + /* Use the scalar assignment as is. */ + if (sym == NULL) + tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts, + loop.temp_ss != NULL, false); + else + tmp = gfc_conv_operator_assign (&lse, &rse, sym); + + tmp = build3_v (COND_EXPR, maskexpr, tmp, build_empty_stmt ()); + + gfc_add_expr_to_block (&body, tmp); + + if (lss == gfc_ss_terminator) + { + /* Increment count1. */ + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + count1, gfc_index_one_node); + gfc_add_modify (&body, count1, tmp); + + /* Use the scalar assignment as is. */ + gfc_add_block_to_block (&block, &body); + } + else + { + gcc_assert (lse.ss == gfc_ss_terminator + && rse.ss == gfc_ss_terminator); + + if (loop.temp_ss != NULL) + { + /* Increment count1 before finish the main body of a scalarized + expression. */ + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + count1, gfc_index_one_node); + gfc_add_modify (&body, count1, tmp); + gfc_trans_scalarized_loop_boundary (&loop, &body); + + /* We need to copy the temporary to the actual lhs. */ + gfc_init_se (&lse, NULL); + gfc_init_se (&rse, NULL); + gfc_copy_loopinfo_to_se (&lse, &loop); + gfc_copy_loopinfo_to_se (&rse, &loop); + + rse.ss = loop.temp_ss; + lse.ss = lss; + + gfc_conv_tmp_array_ref (&rse); + gfc_advance_se_ss_chain (&rse); + gfc_conv_expr (&lse, expr1); + + gcc_assert (lse.ss == gfc_ss_terminator + && rse.ss == gfc_ss_terminator); + + /* Form the mask expression according to the mask tree list. */ + index = count2; + maskexpr = gfc_build_array_ref (mask, index, NULL); + if (invert) + maskexpr = fold_build1 (TRUTH_NOT_EXPR, TREE_TYPE (maskexpr), + maskexpr); + + /* Use the scalar assignment as is. */ + tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts, false, false); + tmp = build3_v (COND_EXPR, maskexpr, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&body, tmp); + + /* Increment count2. */ + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + count2, gfc_index_one_node); + gfc_add_modify (&body, count2, tmp); + } + else + { + /* Increment count1. */ + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, + count1, gfc_index_one_node); + gfc_add_modify (&body, count1, tmp); + } + + /* Generate the copying loops. */ + gfc_trans_scalarizing_loops (&loop, &body); + + /* Wrap the whole thing up. */ + gfc_add_block_to_block (&block, &loop.pre); + gfc_add_block_to_block (&block, &loop.post); + gfc_cleanup_loop (&loop); + } + + return gfc_finish_block (&block); +} + + +/* Translate the WHERE construct or statement. + This function can be called iteratively to translate the nested WHERE + construct or statement. + MASK is the control mask. */ + +static void +gfc_trans_where_2 (gfc_code * code, tree mask, bool invert, + forall_info * nested_forall_info, stmtblock_t * block) +{ + stmtblock_t inner_size_body; + tree inner_size, size; + gfc_ss *lss, *rss; + tree mask_type; + gfc_expr *expr1; + gfc_expr *expr2; + gfc_code *cblock; + gfc_code *cnext; + tree tmp; + tree cond; + tree count1, count2; + bool need_cmask; + bool need_pmask; + int need_temp; + tree pcmask = NULL_TREE; + tree ppmask = NULL_TREE; + tree cmask = NULL_TREE; + tree pmask = NULL_TREE; + gfc_actual_arglist *arg; + + /* the WHERE statement or the WHERE construct statement. */ + cblock = code->block; + + /* As the mask array can be very big, prefer compact boolean types. */ + mask_type = gfc_get_logical_type (gfc_logical_kinds[0].kind); + + /* Determine which temporary masks are needed. */ + if (!cblock->block) + { + /* One clause: No ELSEWHEREs. */ + need_cmask = (cblock->next != 0); + need_pmask = false; + } + else if (cblock->block->block) + { + /* Three or more clauses: Conditional ELSEWHEREs. */ + need_cmask = true; + need_pmask = true; + } + else if (cblock->next) + { + /* Two clauses, the first non-empty. */ + need_cmask = true; + need_pmask = (mask != NULL_TREE + && cblock->block->next != 0); + } + else if (!cblock->block->next) + { + /* Two clauses, both empty. */ + need_cmask = false; + need_pmask = false; + } + /* Two clauses, the first empty, the second non-empty. */ + else if (mask) + { + need_cmask = (cblock->block->expr != 0); + need_pmask = true; + } + else + { + need_cmask = true; + need_pmask = false; + } + + if (need_cmask || need_pmask) + { + /* Calculate the size of temporary needed by the mask-expr. */ + gfc_init_block (&inner_size_body); + inner_size = compute_inner_temp_size (cblock->expr, cblock->expr, + &inner_size_body, &lss, &rss); + + /* Calculate the total size of temporary needed. */ + size = compute_overall_iter_number (nested_forall_info, inner_size, + &inner_size_body, block); + + /* Check whether the size is negative. */ + cond = fold_build2 (LE_EXPR, boolean_type_node, size, + gfc_index_zero_node); + size = fold_build3 (COND_EXPR, gfc_array_index_type, cond, + gfc_index_zero_node, size); + size = gfc_evaluate_now (size, block); + + /* Allocate temporary for WHERE mask if needed. */ + if (need_cmask) + cmask = allocate_temp_for_forall_nest_1 (mask_type, size, block, + &pcmask); + + /* Allocate temporary for !mask if needed. */ + if (need_pmask) + pmask = allocate_temp_for_forall_nest_1 (mask_type, size, block, + &ppmask); + } + + while (cblock) + { + /* Each time around this loop, the where clause is conditional + on the value of mask and invert, which are updated at the + bottom of the loop. */ + + /* Has mask-expr. */ + if (cblock->expr) + { + /* Ensure that the WHERE mask will be evaluated exactly once. + If there are no statements in this WHERE/ELSEWHERE clause, + then we don't need to update the control mask (cmask). + If this is the last clause of the WHERE construct, then + we don't need to update the pending control mask (pmask). */ + if (mask) + gfc_evaluate_where_mask (cblock->expr, nested_forall_info, + mask, invert, + cblock->next ? cmask : NULL_TREE, + cblock->block ? pmask : NULL_TREE, + mask_type, block); + else + gfc_evaluate_where_mask (cblock->expr, nested_forall_info, + NULL_TREE, false, + (cblock->next || cblock->block) + ? cmask : NULL_TREE, + NULL_TREE, mask_type, block); + + invert = false; + } + /* It's a final elsewhere-stmt. No mask-expr is present. */ + else + cmask = mask; + + /* The body of this where clause are controlled by cmask with + sense specified by invert. */ + + /* Get the assignment statement of a WHERE statement, or the first + statement in where-body-construct of a WHERE construct. */ + cnext = cblock->next; + while (cnext) + { + switch (cnext->op) + { + /* WHERE assignment statement. */ + case EXEC_ASSIGN_CALL: + + arg = cnext->ext.actual; + expr1 = expr2 = NULL; + for (; arg; arg = arg->next) + { + if (!arg->expr) + continue; + if (expr1 == NULL) + expr1 = arg->expr; + else + expr2 = arg->expr; + } + goto evaluate; + + case EXEC_ASSIGN: + expr1 = cnext->expr; + expr2 = cnext->expr2; + evaluate: + if (nested_forall_info != NULL) + { + need_temp = gfc_check_dependency (expr1, expr2, 0); + if (need_temp && cnext->op != EXEC_ASSIGN_CALL) + gfc_trans_assign_need_temp (expr1, expr2, + cmask, invert, + nested_forall_info, block); + else + { + /* Variables to control maskexpr. */ + count1 = gfc_create_var (gfc_array_index_type, "count1"); + count2 = gfc_create_var (gfc_array_index_type, "count2"); + gfc_add_modify (block, count1, gfc_index_zero_node); + gfc_add_modify (block, count2, gfc_index_zero_node); + + tmp = gfc_trans_where_assign (expr1, expr2, + cmask, invert, + count1, count2, + cnext->resolved_sym); + + tmp = gfc_trans_nested_forall_loop (nested_forall_info, + tmp, 1); + gfc_add_expr_to_block (block, tmp); + } + } + else + { + /* Variables to control maskexpr. */ + count1 = gfc_create_var (gfc_array_index_type, "count1"); + count2 = gfc_create_var (gfc_array_index_type, "count2"); + gfc_add_modify (block, count1, gfc_index_zero_node); + gfc_add_modify (block, count2, gfc_index_zero_node); + + tmp = gfc_trans_where_assign (expr1, expr2, + cmask, invert, + count1, count2, + cnext->resolved_sym); + gfc_add_expr_to_block (block, tmp); + + } + break; + + /* WHERE or WHERE construct is part of a where-body-construct. */ + case EXEC_WHERE: + gfc_trans_where_2 (cnext, cmask, invert, + nested_forall_info, block); + break; + + default: + gcc_unreachable (); + } + + /* The next statement within the same where-body-construct. */ + cnext = cnext->next; + } + /* The next masked-elsewhere-stmt, elsewhere-stmt, or end-where-stmt. */ + cblock = cblock->block; + if (mask == NULL_TREE) + { + /* If we're the initial WHERE, we can simply invert the sense + of the current mask to obtain the "mask" for the remaining + ELSEWHEREs. */ + invert = true; + mask = cmask; + } + else + { + /* Otherwise, for nested WHERE's we need to use the pending mask. */ + invert = false; + mask = pmask; + } + } + + /* If we allocated a pending mask array, deallocate it now. */ + if (ppmask) + { + tmp = gfc_call_free (ppmask); + gfc_add_expr_to_block (block, tmp); + } + + /* If we allocated a current mask array, deallocate it now. */ + if (pcmask) + { + tmp = gfc_call_free (pcmask); + gfc_add_expr_to_block (block, tmp); + } +} + +/* Translate a simple WHERE construct or statement without dependencies. + CBLOCK is the "then" clause of the WHERE statement, where CBLOCK->EXPR + is the mask condition, and EBLOCK if non-NULL is the "else" clause. + Currently both CBLOCK and EBLOCK are restricted to single assignments. */ + +static tree +gfc_trans_where_3 (gfc_code * cblock, gfc_code * eblock) +{ + stmtblock_t block, body; + gfc_expr *cond, *tdst, *tsrc, *edst, *esrc; + tree tmp, cexpr, tstmt, estmt; + gfc_ss *css, *tdss, *tsss; + gfc_se cse, tdse, tsse, edse, esse; + gfc_loopinfo loop; + gfc_ss *edss = 0; + gfc_ss *esss = 0; + + cond = cblock->expr; + tdst = cblock->next->expr; + tsrc = cblock->next->expr2; + edst = eblock ? eblock->next->expr : NULL; + esrc = eblock ? eblock->next->expr2 : NULL; + + gfc_start_block (&block); + gfc_init_loopinfo (&loop); + + /* Handle the condition. */ + gfc_init_se (&cse, NULL); + css = gfc_walk_expr (cond); + gfc_add_ss_to_loop (&loop, css); + + /* Handle the then-clause. */ + gfc_init_se (&tdse, NULL); + gfc_init_se (&tsse, NULL); + tdss = gfc_walk_expr (tdst); + tsss = gfc_walk_expr (tsrc); + if (tsss == gfc_ss_terminator) + { + tsss = gfc_get_ss (); + tsss->where = 1; + tsss->next = gfc_ss_terminator; + tsss->type = GFC_SS_SCALAR; + tsss->expr = tsrc; + } + gfc_add_ss_to_loop (&loop, tdss); + gfc_add_ss_to_loop (&loop, tsss); + + if (eblock) + { + /* Handle the else clause. */ + gfc_init_se (&edse, NULL); + gfc_init_se (&esse, NULL); + edss = gfc_walk_expr (edst); + esss = gfc_walk_expr (esrc); + if (esss == gfc_ss_terminator) + { + esss = gfc_get_ss (); + esss->where = 1; + esss->next = gfc_ss_terminator; + esss->type = GFC_SS_SCALAR; + esss->expr = esrc; + } + gfc_add_ss_to_loop (&loop, edss); + gfc_add_ss_to_loop (&loop, esss); + } + + gfc_conv_ss_startstride (&loop); + gfc_conv_loop_setup (&loop, &tdst->where); + + gfc_mark_ss_chain_used (css, 1); + gfc_mark_ss_chain_used (tdss, 1); + gfc_mark_ss_chain_used (tsss, 1); + if (eblock) + { + gfc_mark_ss_chain_used (edss, 1); + gfc_mark_ss_chain_used (esss, 1); + } + + gfc_start_scalarized_body (&loop, &body); + + gfc_copy_loopinfo_to_se (&cse, &loop); + gfc_copy_loopinfo_to_se (&tdse, &loop); + gfc_copy_loopinfo_to_se (&tsse, &loop); + cse.ss = css; + tdse.ss = tdss; + tsse.ss = tsss; + if (eblock) + { + gfc_copy_loopinfo_to_se (&edse, &loop); + gfc_copy_loopinfo_to_se (&esse, &loop); + edse.ss = edss; + esse.ss = esss; + } + + gfc_conv_expr (&cse, cond); + gfc_add_block_to_block (&body, &cse.pre); + cexpr = cse.expr; + + gfc_conv_expr (&tsse, tsrc); + if (tdss != gfc_ss_terminator && loop.temp_ss != NULL) + { + gfc_conv_tmp_array_ref (&tdse); + gfc_advance_se_ss_chain (&tdse); + } + else + gfc_conv_expr (&tdse, tdst); + + if (eblock) + { + gfc_conv_expr (&esse, esrc); + if (edss != gfc_ss_terminator && loop.temp_ss != NULL) + { + gfc_conv_tmp_array_ref (&edse); + gfc_advance_se_ss_chain (&edse); + } + else + gfc_conv_expr (&edse, edst); + } + + tstmt = gfc_trans_scalar_assign (&tdse, &tsse, tdst->ts, false, false); + estmt = eblock ? gfc_trans_scalar_assign (&edse, &esse, edst->ts, false, false) + : build_empty_stmt (); + tmp = build3_v (COND_EXPR, cexpr, tstmt, estmt); + gfc_add_expr_to_block (&body, tmp); + gfc_add_block_to_block (&body, &cse.post); + + gfc_trans_scalarizing_loops (&loop, &body); + gfc_add_block_to_block (&block, &loop.pre); + gfc_add_block_to_block (&block, &loop.post); + gfc_cleanup_loop (&loop); + + return gfc_finish_block (&block); +} + +/* As the WHERE or WHERE construct statement can be nested, we call + gfc_trans_where_2 to do the translation, and pass the initial + NULL values for both the control mask and the pending control mask. */ + +tree +gfc_trans_where (gfc_code * code) +{ + stmtblock_t block; + gfc_code *cblock; + gfc_code *eblock; + + cblock = code->block; + if (cblock->next + && cblock->next->op == EXEC_ASSIGN + && !cblock->next->next) + { + eblock = cblock->block; + if (!eblock) + { + /* A simple "WHERE (cond) x = y" statement or block is + dependence free if cond is not dependent upon writing x, + and the source y is unaffected by the destination x. */ + if (!gfc_check_dependency (cblock->next->expr, + cblock->expr, 0) + && !gfc_check_dependency (cblock->next->expr, + cblock->next->expr2, 0)) + return gfc_trans_where_3 (cblock, NULL); + } + else if (!eblock->expr + && !eblock->block + && eblock->next + && eblock->next->op == EXEC_ASSIGN + && !eblock->next->next) + { + /* A simple "WHERE (cond) x1 = y1 ELSEWHERE x2 = y2 ENDWHERE" + block is dependence free if cond is not dependent on writes + to x1 and x2, y1 is not dependent on writes to x2, and y2 + is not dependent on writes to x1, and both y's are not + dependent upon their own x's. In addition to this, the + final two dependency checks below exclude all but the same + array reference if the where and elswhere destinations + are the same. In short, this is VERY conservative and this + is needed because the two loops, required by the standard + are coalesced in gfc_trans_where_3. */ + if (!gfc_check_dependency(cblock->next->expr, + cblock->expr, 0) + && !gfc_check_dependency(eblock->next->expr, + cblock->expr, 0) + && !gfc_check_dependency(cblock->next->expr, + eblock->next->expr2, 1) + && !gfc_check_dependency(eblock->next->expr, + cblock->next->expr2, 1) + && !gfc_check_dependency(cblock->next->expr, + cblock->next->expr2, 1) + && !gfc_check_dependency(eblock->next->expr, + eblock->next->expr2, 1) + && !gfc_check_dependency(cblock->next->expr, + eblock->next->expr, 0) + && !gfc_check_dependency(eblock->next->expr, + cblock->next->expr, 0)) + return gfc_trans_where_3 (cblock, eblock); + } + } + + gfc_start_block (&block); + + gfc_trans_where_2 (code, NULL, false, NULL, &block); + + return gfc_finish_block (&block); +} + + +/* CYCLE a DO loop. The label decl has already been created by + gfc_trans_do(), it's in TREE_PURPOSE (backend_decl) of the gfc_code + node at the head of the loop. We must mark the label as used. */ + +tree +gfc_trans_cycle (gfc_code * code) +{ + tree cycle_label; + + cycle_label = TREE_PURPOSE (code->ext.whichloop->backend_decl); + TREE_USED (cycle_label) = 1; + return build1_v (GOTO_EXPR, cycle_label); +} + + +/* EXIT a DO loop. Similar to CYCLE, but now the label is in + TREE_VALUE (backend_decl) of the gfc_code node at the head of the + loop. */ + +tree +gfc_trans_exit (gfc_code * code) +{ + tree exit_label; + + exit_label = TREE_VALUE (code->ext.whichloop->backend_decl); + TREE_USED (exit_label) = 1; + return build1_v (GOTO_EXPR, exit_label); +} + + +/* Translate the ALLOCATE statement. */ + +tree +gfc_trans_allocate (gfc_code * code) +{ + gfc_alloc *al; + gfc_expr *expr; + gfc_se se; + tree tmp; + tree parm; + tree stat; + tree pstat; + tree error_label; + stmtblock_t block; + + if (!code->ext.alloc_list) + return NULL_TREE; + + gfc_start_block (&block); + + if (code->expr) + { + tree gfc_int4_type_node = gfc_get_int_type (4); + + stat = gfc_create_var (gfc_int4_type_node, "stat"); + pstat = build_fold_addr_expr (stat); + + error_label = gfc_build_label_decl (NULL_TREE); + TREE_USED (error_label) = 1; + } + else + pstat = stat = error_label = NULL_TREE; + + for (al = code->ext.alloc_list; al != NULL; al = al->next) + { + expr = al->expr; + + gfc_init_se (&se, NULL); + gfc_start_block (&se.pre); + + se.want_pointer = 1; + se.descriptor_only = 1; + gfc_conv_expr (&se, expr); + + if (!gfc_array_allocate (&se, expr, pstat)) + { + /* A scalar or derived type. */ + tmp = TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (se.expr))); + + if (expr->ts.type == BT_CHARACTER && tmp == NULL_TREE) + tmp = se.string_length; + + tmp = gfc_allocate_with_status (&se.pre, tmp, pstat); + tmp = fold_build2 (MODIFY_EXPR, void_type_node, se.expr, + fold_convert (TREE_TYPE (se.expr), tmp)); + gfc_add_expr_to_block (&se.pre, tmp); + + if (code->expr) + { + tmp = build1_v (GOTO_EXPR, error_label); + parm = fold_build2 (NE_EXPR, boolean_type_node, + stat, build_int_cst (TREE_TYPE (stat), 0)); + tmp = fold_build3 (COND_EXPR, void_type_node, + parm, tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&se.pre, tmp); + } + + if (expr->ts.type == BT_DERIVED && expr->ts.derived->attr.alloc_comp) + { + tmp = build_fold_indirect_ref (se.expr); + tmp = gfc_nullify_alloc_comp (expr->ts.derived, tmp, 0); + gfc_add_expr_to_block (&se.pre, tmp); + } + + } + + tmp = gfc_finish_block (&se.pre); + gfc_add_expr_to_block (&block, tmp); + } + + /* Assign the value to the status variable. */ + if (code->expr) + { + tmp = build1_v (LABEL_EXPR, error_label); + gfc_add_expr_to_block (&block, tmp); + + gfc_init_se (&se, NULL); + gfc_conv_expr_lhs (&se, code->expr); + tmp = convert (TREE_TYPE (se.expr), stat); + gfc_add_modify (&block, se.expr, tmp); + } + + return gfc_finish_block (&block); +} + + +/* Translate a DEALLOCATE statement. + There are two cases within the for loop: + (1) deallocate(a1, a2, a3) is translated into the following sequence + _gfortran_deallocate(a1, 0B) + _gfortran_deallocate(a2, 0B) + _gfortran_deallocate(a3, 0B) + where the STAT= variable is passed a NULL pointer. + (2) deallocate(a1, a2, a3, stat=i) is translated into the following + astat = 0 + _gfortran_deallocate(a1, &stat) + astat = astat + stat + _gfortran_deallocate(a2, &stat) + astat = astat + stat + _gfortran_deallocate(a3, &stat) + astat = astat + stat + In case (1), we simply return at the end of the for loop. In case (2) + we set STAT= astat. */ +tree +gfc_trans_deallocate (gfc_code * code) +{ + gfc_se se; + gfc_alloc *al; + gfc_expr *expr; + tree apstat, astat, pstat, stat, tmp; + stmtblock_t block; + + gfc_start_block (&block); + + /* Set up the optional STAT= */ + if (code->expr) + { + tree gfc_int4_type_node = gfc_get_int_type (4); + + /* Variable used with the library call. */ + stat = gfc_create_var (gfc_int4_type_node, "stat"); + pstat = build_fold_addr_expr (stat); + + /* Running total of possible deallocation failures. */ + astat = gfc_create_var (gfc_int4_type_node, "astat"); + apstat = build_fold_addr_expr (astat); + + /* Initialize astat to 0. */ + gfc_add_modify (&block, astat, build_int_cst (TREE_TYPE (astat), 0)); + } + else + pstat = apstat = stat = astat = NULL_TREE; + + for (al = code->ext.alloc_list; al != NULL; al = al->next) + { + expr = al->expr; + gcc_assert (expr->expr_type == EXPR_VARIABLE); + + gfc_init_se (&se, NULL); + gfc_start_block (&se.pre); + + se.want_pointer = 1; + se.descriptor_only = 1; + gfc_conv_expr (&se, expr); + + if (expr->ts.type == BT_DERIVED + && expr->ts.derived->attr.alloc_comp) + { + gfc_ref *ref; + gfc_ref *last = NULL; + for (ref = expr->ref; ref; ref = ref->next) + if (ref->type == REF_COMPONENT) + last = ref; + + /* Do not deallocate the components of a derived type + ultimate pointer component. */ + if (!(last && last->u.c.component->attr.pointer) + && !(!last && expr->symtree->n.sym->attr.pointer)) + { + tmp = gfc_deallocate_alloc_comp (expr->ts.derived, se.expr, + expr->rank); + gfc_add_expr_to_block (&se.pre, tmp); + } + } + + if (expr->rank) + tmp = gfc_array_deallocate (se.expr, pstat, expr); + else + { + tmp = gfc_deallocate_with_status (se.expr, pstat, false, expr); + gfc_add_expr_to_block (&se.pre, tmp); + + tmp = fold_build2 (MODIFY_EXPR, void_type_node, + se.expr, build_int_cst (TREE_TYPE (se.expr), 0)); + } + + gfc_add_expr_to_block (&se.pre, tmp); + + /* Keep track of the number of failed deallocations by adding stat + of the last deallocation to the running total. */ + if (code->expr) + { + apstat = fold_build2 (PLUS_EXPR, TREE_TYPE (stat), astat, stat); + gfc_add_modify (&se.pre, astat, apstat); + } + + tmp = gfc_finish_block (&se.pre); + gfc_add_expr_to_block (&block, tmp); + + } + + /* Assign the value to the status variable. */ + if (code->expr) + { + gfc_init_se (&se, NULL); + gfc_conv_expr_lhs (&se, code->expr); + tmp = convert (TREE_TYPE (se.expr), astat); + gfc_add_modify (&block, se.expr, tmp); + } + + return gfc_finish_block (&block); +} + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-stmt.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-stmt.h new file mode 100644 index 0000000000..5d92a9c756 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-stmt.h @@ -0,0 +1,72 @@ +/* Header for statement translation functions + Copyright (C) 2002, 2003, 2006, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* Statement translators (gfc_trans_*) return a fully translated tree. + Calls gfc_trans_*. */ +tree gfc_trans_code (gfc_code *); + +/* All other gfc_trans_* should only need be called by gfc_trans_code */ + +/* trans-expr.c */ +tree gfc_trans_assign (gfc_code *); +tree gfc_trans_pointer_assign (gfc_code *); +tree gfc_trans_init_assign (gfc_code *); + +/* trans-stmt.c */ +tree gfc_trans_cycle (gfc_code *); +tree gfc_trans_exit (gfc_code *); +tree gfc_trans_label_assign (gfc_code *); +tree gfc_trans_label_here (gfc_code *); +tree gfc_trans_goto (gfc_code *); +tree gfc_trans_entry (gfc_code *); +tree gfc_trans_pause (gfc_code *); +tree gfc_trans_stop (gfc_code *); +tree gfc_trans_call (gfc_code *, bool); +tree gfc_trans_return (gfc_code *); +tree gfc_trans_if (gfc_code *); +tree gfc_trans_arithmetic_if (gfc_code *); +tree gfc_trans_do (gfc_code *); +tree gfc_trans_do_while (gfc_code *); +tree gfc_trans_select (gfc_code *); +tree gfc_trans_forall (gfc_code *); +tree gfc_trans_where (gfc_code *); +tree gfc_trans_allocate (gfc_code *); +tree gfc_trans_deallocate (gfc_code *); +tree gfc_trans_deallocate_array (tree); + +/* trans-openmp.c */ +tree gfc_trans_omp_directive (gfc_code *); + +/* trans-io.c */ +tree gfc_trans_open (gfc_code *); +tree gfc_trans_close (gfc_code *); +tree gfc_trans_read (gfc_code *); +tree gfc_trans_write (gfc_code *); +tree gfc_trans_iolength (gfc_code *); +tree gfc_trans_backspace (gfc_code *); +tree gfc_trans_endfile (gfc_code *); +tree gfc_trans_inquire (gfc_code *); +tree gfc_trans_rewind (gfc_code *); +tree gfc_trans_flush (gfc_code *); + +tree gfc_trans_transfer (gfc_code *); +tree gfc_trans_dt_end (gfc_code *); +tree gfc_trans_wait (gfc_code *); diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-types.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-types.c new file mode 100644 index 0000000000..717859c536 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-types.c @@ -0,0 +1,2366 @@ +/* Backend support for Fortran 95 basic types and derived types. + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Paul Brook + and Steven Bosscher + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* trans-types.c -- gfortran backend types */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "langhooks.h" +#include "tm.h" +#include "target.h" +#include "ggc.h" +#include "toplev.h" +#include "gfortran.h" +#include "trans.h" +#include "trans-types.h" +#include "trans-const.h" +#include "real.h" +#include "flags.h" +#include "dwarf2out.h" + + +#if (GFC_MAX_DIMENSIONS < 10) +#define GFC_RANK_DIGITS 1 +#define GFC_RANK_PRINTF_FORMAT "%01d" +#elif (GFC_MAX_DIMENSIONS < 100) +#define GFC_RANK_DIGITS 2 +#define GFC_RANK_PRINTF_FORMAT "%02d" +#else +#error If you really need >99 dimensions, continue the sequence above... +#endif + +/* array of structs so we don't have to worry about xmalloc or free */ +CInteropKind_t c_interop_kinds_table[ISOCBINDING_NUMBER]; + +static tree gfc_get_derived_type (gfc_symbol * derived); + +tree gfc_array_index_type; +tree gfc_array_range_type; +tree gfc_character1_type_node; +tree pvoid_type_node; +tree ppvoid_type_node; +tree pchar_type_node; +tree pfunc_type_node; + +tree gfc_charlen_type_node; + +static GTY(()) tree gfc_desc_dim_type; +static GTY(()) tree gfc_max_array_element_size; +static GTY(()) tree gfc_array_descriptor_base[GFC_MAX_DIMENSIONS]; + +/* Arrays for all integral and real kinds. We'll fill this in at runtime + after the target has a chance to process command-line options. */ + +#define MAX_INT_KINDS 5 +gfc_integer_info gfc_integer_kinds[MAX_INT_KINDS + 1]; +gfc_logical_info gfc_logical_kinds[MAX_INT_KINDS + 1]; +static GTY(()) tree gfc_integer_types[MAX_INT_KINDS + 1]; +static GTY(()) tree gfc_logical_types[MAX_INT_KINDS + 1]; + +#define MAX_REAL_KINDS 5 +gfc_real_info gfc_real_kinds[MAX_REAL_KINDS + 1]; +static GTY(()) tree gfc_real_types[MAX_REAL_KINDS + 1]; +static GTY(()) tree gfc_complex_types[MAX_REAL_KINDS + 1]; + +#define MAX_CHARACTER_KINDS 2 +gfc_character_info gfc_character_kinds[MAX_CHARACTER_KINDS + 1]; +static GTY(()) tree gfc_character_types[MAX_CHARACTER_KINDS + 1]; +static GTY(()) tree gfc_pcharacter_types[MAX_CHARACTER_KINDS + 1]; + + +/* The integer kind to use for array indices. This will be set to the + proper value based on target information from the backend. */ + +int gfc_index_integer_kind; + +/* The default kinds of the various types. */ + +int gfc_default_integer_kind; +int gfc_max_integer_kind; +int gfc_default_real_kind; +int gfc_default_double_kind; +int gfc_default_character_kind; +int gfc_default_logical_kind; +int gfc_default_complex_kind; +int gfc_c_int_kind; + +/* The kind size used for record offsets. If the target system supports + kind=8, this will be set to 8, otherwise it is set to 4. */ +int gfc_intio_kind; + +/* The integer kind used to store character lengths. */ +int gfc_charlen_int_kind; + +/* The size of the numeric storage unit and character storage unit. */ +int gfc_numeric_storage_size; +int gfc_character_storage_size; + + +gfc_try +gfc_check_any_c_kind (gfc_typespec *ts) +{ + int i; + + for (i = 0; i < ISOCBINDING_NUMBER; i++) + { + /* Check for any C interoperable kind for the given type/kind in ts. + This can be used after verify_c_interop to make sure that the + Fortran kind being used exists in at least some form for C. */ + if (c_interop_kinds_table[i].f90_type == ts->type && + c_interop_kinds_table[i].value == ts->kind) + return SUCCESS; + } + + return FAILURE; +} + + +static int +get_real_kind_from_node (tree type) +{ + int i; + + for (i = 0; gfc_real_kinds[i].kind != 0; i++) + if (gfc_real_kinds[i].mode_precision == TYPE_PRECISION (type)) + return gfc_real_kinds[i].kind; + + return -4; +} + +static int +get_int_kind_from_node (tree type) +{ + int i; + + if (!type) + return -2; + + for (i = 0; gfc_integer_kinds[i].kind != 0; i++) + if (gfc_integer_kinds[i].bit_size == TYPE_PRECISION (type)) + return gfc_integer_kinds[i].kind; + + return -1; +} + +static int +get_int_kind_from_width (int size) +{ + int i; + + for (i = 0; gfc_integer_kinds[i].kind != 0; i++) + if (gfc_integer_kinds[i].bit_size == size) + return gfc_integer_kinds[i].kind; + + return -2; +} + +static int +get_int_kind_from_minimal_width (int size) +{ + int i; + + for (i = 0; gfc_integer_kinds[i].kind != 0; i++) + if (gfc_integer_kinds[i].bit_size >= size) + return gfc_integer_kinds[i].kind; + + return -2; +} + + +/* Generate the CInteropKind_t objects for the C interoperable + kinds. */ + +static +void init_c_interop_kinds (void) +{ + int i; + tree intmax_type_node = INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE ? + integer_type_node : + (LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE ? + long_integer_type_node : + long_long_integer_type_node); + + /* init all pointers in the list to NULL */ + for (i = 0; i < ISOCBINDING_NUMBER; i++) + { + /* Initialize the name and value fields. */ + c_interop_kinds_table[i].name[0] = '\0'; + c_interop_kinds_table[i].value = -100; + c_interop_kinds_table[i].f90_type = BT_UNKNOWN; + } + +#define NAMED_INTCST(a,b,c,d) \ + strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].f90_type = BT_INTEGER; \ + c_interop_kinds_table[a].value = c; +#define NAMED_REALCST(a,b,c) \ + strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].f90_type = BT_REAL; \ + c_interop_kinds_table[a].value = c; +#define NAMED_CMPXCST(a,b,c) \ + strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].f90_type = BT_COMPLEX; \ + c_interop_kinds_table[a].value = c; +#define NAMED_LOGCST(a,b,c) \ + strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].f90_type = BT_LOGICAL; \ + c_interop_kinds_table[a].value = c; +#define NAMED_CHARKNDCST(a,b,c) \ + strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].f90_type = BT_CHARACTER; \ + c_interop_kinds_table[a].value = c; +#define NAMED_CHARCST(a,b,c) \ + strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].f90_type = BT_CHARACTER; \ + c_interop_kinds_table[a].value = c; +#define DERIVED_TYPE(a,b,c) \ + strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].f90_type = BT_DERIVED; \ + c_interop_kinds_table[a].value = c; +#define PROCEDURE(a,b) \ + strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].f90_type = BT_PROCEDURE; \ + c_interop_kinds_table[a].value = 0; +#include "iso-c-binding.def" +} + + +/* Query the target to determine which machine modes are available for + computation. Choose KIND numbers for them. */ + +void +gfc_init_kinds (void) +{ + enum machine_mode mode; + int i_index, r_index, kind; + bool saw_i4 = false, saw_i8 = false; + bool saw_r4 = false, saw_r8 = false, saw_r16 = false; + + for (i_index = 0, mode = MIN_MODE_INT; mode <= MAX_MODE_INT; mode++) + { + int kind, bitsize; + + if (!targetm.scalar_mode_supported_p (mode)) + continue; + + /* The middle end doesn't support constants larger than 2*HWI. + Perhaps the target hook shouldn't have accepted these either, + but just to be safe... */ + bitsize = GET_MODE_BITSIZE (mode); + if (bitsize > 2*HOST_BITS_PER_WIDE_INT) + continue; + + gcc_assert (i_index != MAX_INT_KINDS); + + /* Let the kind equal the bit size divided by 8. This insulates the + programmer from the underlying byte size. */ + kind = bitsize / 8; + + if (kind == 4) + saw_i4 = true; + if (kind == 8) + saw_i8 = true; + + gfc_integer_kinds[i_index].kind = kind; + gfc_integer_kinds[i_index].radix = 2; + gfc_integer_kinds[i_index].digits = bitsize - 1; + gfc_integer_kinds[i_index].bit_size = bitsize; + + gfc_logical_kinds[i_index].kind = kind; + gfc_logical_kinds[i_index].bit_size = bitsize; + + i_index += 1; + } + + /* Set the kind used to match GFC_INT_IO in libgfortran. This is + used for large file access. */ + + if (saw_i8) + gfc_intio_kind = 8; + else + gfc_intio_kind = 4; + + /* If we do not at least have kind = 4, everything is pointless. */ + gcc_assert(saw_i4); + + /* Set the maximum integer kind. Used with at least BOZ constants. */ + gfc_max_integer_kind = gfc_integer_kinds[i_index - 1].kind; + + for (r_index = 0, mode = MIN_MODE_FLOAT; mode <= MAX_MODE_FLOAT; mode++) + { + const struct real_format *fmt = REAL_MODE_FORMAT (mode); + int kind; + + if (fmt == NULL) + continue; + if (!targetm.scalar_mode_supported_p (mode)) + continue; + + /* Only let float/double/long double go through because the fortran + library assumes these are the only floating point types. */ + + if (mode != TYPE_MODE (float_type_node) + && (mode != TYPE_MODE (double_type_node)) + && (mode != TYPE_MODE (long_double_type_node))) + continue; + + /* Let the kind equal the precision divided by 8, rounding up. Again, + this insulates the programmer from the underlying byte size. + + Also, it effectively deals with IEEE extended formats. There, the + total size of the type may equal 16, but it's got 6 bytes of padding + and the increased size can get in the way of a real IEEE quad format + which may also be supported by the target. + + We round up so as to handle IA-64 __floatreg (RFmode), which is an + 82 bit type. Not to be confused with __float80 (XFmode), which is + an 80 bit type also supported by IA-64. So XFmode should come out + to be kind=10, and RFmode should come out to be kind=11. Egads. */ + + kind = (GET_MODE_PRECISION (mode) + 7) / 8; + + if (kind == 4) + saw_r4 = true; + if (kind == 8) + saw_r8 = true; + if (kind == 16) + saw_r16 = true; + + /* Careful we don't stumble a weird internal mode. */ + gcc_assert (r_index <= 0 || gfc_real_kinds[r_index-1].kind != kind); + /* Or have too many modes for the allocated space. */ + gcc_assert (r_index != MAX_REAL_KINDS); + + gfc_real_kinds[r_index].kind = kind; + gfc_real_kinds[r_index].radix = fmt->b; + gfc_real_kinds[r_index].digits = fmt->p; + gfc_real_kinds[r_index].min_exponent = fmt->emin; + gfc_real_kinds[r_index].max_exponent = fmt->emax; + if (fmt->pnan < fmt->p) + /* This is an IBM extended double format (or the MIPS variant) + made up of two IEEE doubles. The value of the long double is + the sum of the values of the two parts. The most significant + part is required to be the value of the long double rounded + to the nearest double. If we use emax of 1024 then we can't + represent huge(x) = (1 - b**(-p)) * b**(emax-1) * b, because + rounding will make the most significant part overflow. */ + gfc_real_kinds[r_index].max_exponent = fmt->emax - 1; + gfc_real_kinds[r_index].mode_precision = GET_MODE_PRECISION (mode); + r_index += 1; + } + + /* Choose the default integer kind. We choose 4 unless the user + directs us otherwise. */ + if (gfc_option.flag_default_integer) + { + if (!saw_i8) + fatal_error ("integer kind=8 not available for -fdefault-integer-8 option"); + gfc_default_integer_kind = 8; + + /* Even if the user specified that the default integer kind be 8, + the numeric storage size isn't 64. In this case, a warning will + be issued when NUMERIC_STORAGE_SIZE is used. */ + gfc_numeric_storage_size = 4 * 8; + } + else if (saw_i4) + { + gfc_default_integer_kind = 4; + gfc_numeric_storage_size = 4 * 8; + } + else + { + gfc_default_integer_kind = gfc_integer_kinds[i_index - 1].kind; + gfc_numeric_storage_size = gfc_integer_kinds[i_index - 1].bit_size; + } + + /* Choose the default real kind. Again, we choose 4 when possible. */ + if (gfc_option.flag_default_real) + { + if (!saw_r8) + fatal_error ("real kind=8 not available for -fdefault-real-8 option"); + gfc_default_real_kind = 8; + } + else if (saw_r4) + gfc_default_real_kind = 4; + else + gfc_default_real_kind = gfc_real_kinds[0].kind; + + /* Choose the default double kind. If -fdefault-real and -fdefault-double + are specified, we use kind=8, if it's available. If -fdefault-real is + specified without -fdefault-double, we use kind=16, if it's available. + Otherwise we do not change anything. */ + if (gfc_option.flag_default_double && !gfc_option.flag_default_real) + fatal_error ("Use of -fdefault-double-8 requires -fdefault-real-8"); + + if (gfc_option.flag_default_real && gfc_option.flag_default_double && saw_r8) + gfc_default_double_kind = 8; + else if (gfc_option.flag_default_real && saw_r16) + gfc_default_double_kind = 16; + else if (saw_r4 && saw_r8) + gfc_default_double_kind = 8; + else + { + /* F95 14.6.3.1: A nonpointer scalar object of type double precision + real ... occupies two contiguous numeric storage units. + + Therefore we must be supplied a kind twice as large as we chose + for single precision. There are loopholes, in that double + precision must *occupy* two storage units, though it doesn't have + to *use* two storage units. Which means that you can make this + kind artificially wide by padding it. But at present there are + no GCC targets for which a two-word type does not exist, so we + just let gfc_validate_kind abort and tell us if something breaks. */ + + gfc_default_double_kind + = gfc_validate_kind (BT_REAL, gfc_default_real_kind * 2, false); + } + + /* The default logical kind is constrained to be the same as the + default integer kind. Similarly with complex and real. */ + gfc_default_logical_kind = gfc_default_integer_kind; + gfc_default_complex_kind = gfc_default_real_kind; + + /* We only have two character kinds: ASCII and UCS-4. + ASCII corresponds to a 8-bit integer type, if one is available. + UCS-4 corresponds to a 32-bit integer type, if one is available. */ + i_index = 0; + if ((kind = get_int_kind_from_width (8)) > 0) + { + gfc_character_kinds[i_index].kind = kind; + gfc_character_kinds[i_index].bit_size = 8; + gfc_character_kinds[i_index].name = "ascii"; + i_index++; + } + if ((kind = get_int_kind_from_width (32)) > 0) + { + gfc_character_kinds[i_index].kind = kind; + gfc_character_kinds[i_index].bit_size = 32; + gfc_character_kinds[i_index].name = "iso_10646"; + i_index++; + } + + /* Choose the smallest integer kind for our default character. */ + gfc_default_character_kind = gfc_character_kinds[0].kind; + gfc_character_storage_size = gfc_default_character_kind * 8; + + /* Choose the integer kind the same size as "void*" for our index kind. */ + gfc_index_integer_kind = POINTER_SIZE / 8; + /* Pick a kind the same size as the C "int" type. */ + gfc_c_int_kind = INT_TYPE_SIZE / 8; + + /* initialize the C interoperable kinds */ + init_c_interop_kinds(); +} + +/* Make sure that a valid kind is present. Returns an index into the + associated kinds array, -1 if the kind is not present. */ + +static int +validate_integer (int kind) +{ + int i; + + for (i = 0; gfc_integer_kinds[i].kind != 0; i++) + if (gfc_integer_kinds[i].kind == kind) + return i; + + return -1; +} + +static int +validate_real (int kind) +{ + int i; + + for (i = 0; gfc_real_kinds[i].kind != 0; i++) + if (gfc_real_kinds[i].kind == kind) + return i; + + return -1; +} + +static int +validate_logical (int kind) +{ + int i; + + for (i = 0; gfc_logical_kinds[i].kind; i++) + if (gfc_logical_kinds[i].kind == kind) + return i; + + return -1; +} + +static int +validate_character (int kind) +{ + int i; + + for (i = 0; gfc_character_kinds[i].kind; i++) + if (gfc_character_kinds[i].kind == kind) + return i; + + return -1; +} + +/* Validate a kind given a basic type. The return value is the same + for the child functions, with -1 indicating nonexistence of the + type. If MAY_FAIL is false, then -1 is never returned, and we ICE. */ + +int +gfc_validate_kind (bt type, int kind, bool may_fail) +{ + int rc; + + switch (type) + { + case BT_REAL: /* Fall through */ + case BT_COMPLEX: + rc = validate_real (kind); + break; + case BT_INTEGER: + rc = validate_integer (kind); + break; + case BT_LOGICAL: + rc = validate_logical (kind); + break; + case BT_CHARACTER: + rc = validate_character (kind); + break; + + default: + gfc_internal_error ("gfc_validate_kind(): Got bad type"); + } + + if (rc < 0 && !may_fail) + gfc_internal_error ("gfc_validate_kind(): Got bad kind"); + + return rc; +} + + +/* Four subroutines of gfc_init_types. Create type nodes for the given kind. + Reuse common type nodes where possible. Recognize if the kind matches up + with a C type. This will be used later in determining which routines may + be scarfed from libm. */ + +static tree +gfc_build_int_type (gfc_integer_info *info) +{ + int mode_precision = info->bit_size; + + if (mode_precision == CHAR_TYPE_SIZE) + info->c_char = 1; + if (mode_precision == SHORT_TYPE_SIZE) + info->c_short = 1; + if (mode_precision == INT_TYPE_SIZE) + info->c_int = 1; + if (mode_precision == LONG_TYPE_SIZE) + info->c_long = 1; + if (mode_precision == LONG_LONG_TYPE_SIZE) + info->c_long_long = 1; + + if (TYPE_PRECISION (intQI_type_node) == mode_precision) + return intQI_type_node; + if (TYPE_PRECISION (intHI_type_node) == mode_precision) + return intHI_type_node; + if (TYPE_PRECISION (intSI_type_node) == mode_precision) + return intSI_type_node; + if (TYPE_PRECISION (intDI_type_node) == mode_precision) + return intDI_type_node; + if (TYPE_PRECISION (intTI_type_node) == mode_precision) + return intTI_type_node; + + return make_signed_type (mode_precision); +} + +static tree +gfc_build_uint_type (int size) +{ + if (size == CHAR_TYPE_SIZE) + return unsigned_char_type_node; + if (size == SHORT_TYPE_SIZE) + return short_unsigned_type_node; + if (size == INT_TYPE_SIZE) + return unsigned_type_node; + if (size == LONG_TYPE_SIZE) + return long_unsigned_type_node; + if (size == LONG_LONG_TYPE_SIZE) + return long_long_unsigned_type_node; + + return make_unsigned_type (size); +} + + +static tree +gfc_build_real_type (gfc_real_info *info) +{ + int mode_precision = info->mode_precision; + tree new_type; + + if (mode_precision == FLOAT_TYPE_SIZE) + info->c_float = 1; + if (mode_precision == DOUBLE_TYPE_SIZE) + info->c_double = 1; + if (mode_precision == LONG_DOUBLE_TYPE_SIZE) + info->c_long_double = 1; + + if (TYPE_PRECISION (float_type_node) == mode_precision) + return float_type_node; + if (TYPE_PRECISION (double_type_node) == mode_precision) + return double_type_node; + if (TYPE_PRECISION (long_double_type_node) == mode_precision) + return long_double_type_node; + + new_type = make_node (REAL_TYPE); + TYPE_PRECISION (new_type) = mode_precision; + layout_type (new_type); + return new_type; +} + +static tree +gfc_build_complex_type (tree scalar_type) +{ + tree new_type; + + if (scalar_type == NULL) + return NULL; + if (scalar_type == float_type_node) + return complex_float_type_node; + if (scalar_type == double_type_node) + return complex_double_type_node; + if (scalar_type == long_double_type_node) + return complex_long_double_type_node; + + new_type = make_node (COMPLEX_TYPE); + TREE_TYPE (new_type) = scalar_type; + layout_type (new_type); + return new_type; +} + +static tree +gfc_build_logical_type (gfc_logical_info *info) +{ + int bit_size = info->bit_size; + tree new_type; + + if (bit_size == BOOL_TYPE_SIZE) + { + info->c_bool = 1; + return boolean_type_node; + } + + new_type = make_unsigned_type (bit_size); + TREE_SET_CODE (new_type, BOOLEAN_TYPE); + TYPE_MAX_VALUE (new_type) = build_int_cst (new_type, 1); + TYPE_PRECISION (new_type) = 1; + + return new_type; +} + +#if 0 +/* Return the bit size of the C "size_t". */ + +static unsigned int +c_size_t_size (void) +{ +#ifdef SIZE_TYPE + if (strcmp (SIZE_TYPE, "unsigned int") == 0) + return INT_TYPE_SIZE; + if (strcmp (SIZE_TYPE, "long unsigned int") == 0) + return LONG_TYPE_SIZE; + if (strcmp (SIZE_TYPE, "short unsigned int") == 0) + return SHORT_TYPE_SIZE; + gcc_unreachable (); +#else + return LONG_TYPE_SIZE; +#endif +} +#endif + +/* Create the backend type nodes. We map them to their + equivalent C type, at least for now. We also give + names to the types here, and we push them in the + global binding level context.*/ + +void +gfc_init_types (void) +{ + char name_buf[18]; + int index; + tree type; + unsigned n; + unsigned HOST_WIDE_INT hi; + unsigned HOST_WIDE_INT lo; + + /* Create and name the types. */ +#define PUSH_TYPE(name, node) \ + pushdecl (build_decl (TYPE_DECL, get_identifier (name), node)) + + for (index = 0; gfc_integer_kinds[index].kind != 0; ++index) + { + type = gfc_build_int_type (&gfc_integer_kinds[index]); + gfc_integer_types[index] = type; + snprintf (name_buf, sizeof(name_buf), "integer(kind=%d)", + gfc_integer_kinds[index].kind); + PUSH_TYPE (name_buf, type); + } + + for (index = 0; gfc_logical_kinds[index].kind != 0; ++index) + { + type = gfc_build_logical_type (&gfc_logical_kinds[index]); + gfc_logical_types[index] = type; + snprintf (name_buf, sizeof(name_buf), "logical(kind=%d)", + gfc_logical_kinds[index].kind); + PUSH_TYPE (name_buf, type); + } + + for (index = 0; gfc_real_kinds[index].kind != 0; index++) + { + type = gfc_build_real_type (&gfc_real_kinds[index]); + gfc_real_types[index] = type; + snprintf (name_buf, sizeof(name_buf), "real(kind=%d)", + gfc_real_kinds[index].kind); + PUSH_TYPE (name_buf, type); + + type = gfc_build_complex_type (type); + gfc_complex_types[index] = type; + snprintf (name_buf, sizeof(name_buf), "complex(kind=%d)", + gfc_real_kinds[index].kind); + PUSH_TYPE (name_buf, type); + } + + for (index = 0; gfc_character_kinds[index].kind != 0; ++index) + { + type = gfc_build_uint_type (gfc_character_kinds[index].bit_size); + type = build_qualified_type (type, TYPE_UNQUALIFIED); + snprintf (name_buf, sizeof(name_buf), "character(kind=%d)", + gfc_character_kinds[index].kind); + PUSH_TYPE (name_buf, type); + gfc_character_types[index] = type; + gfc_pcharacter_types[index] = build_pointer_type (type); + } + gfc_character1_type_node = gfc_character_types[0]; + + PUSH_TYPE ("byte", unsigned_char_type_node); + PUSH_TYPE ("void", void_type_node); + + /* DBX debugging output gets upset if these aren't set. */ + if (!TYPE_NAME (integer_type_node)) + PUSH_TYPE ("c_integer", integer_type_node); + if (!TYPE_NAME (char_type_node)) + PUSH_TYPE ("c_char", char_type_node); + +#undef PUSH_TYPE + + pvoid_type_node = build_pointer_type (void_type_node); + ppvoid_type_node = build_pointer_type (pvoid_type_node); + pchar_type_node = build_pointer_type (gfc_character1_type_node); + pfunc_type_node + = build_pointer_type (build_function_type (void_type_node, NULL_TREE)); + + gfc_array_index_type = gfc_get_int_type (gfc_index_integer_kind); + /* We cannot use gfc_index_zero_node in definition of gfc_array_range_type, + since this function is called before gfc_init_constants. */ + gfc_array_range_type + = build_range_type (gfc_array_index_type, + build_int_cst (gfc_array_index_type, 0), + NULL_TREE); + + /* The maximum array element size that can be handled is determined + by the number of bits available to store this field in the array + descriptor. */ + + n = TYPE_PRECISION (gfc_array_index_type) - GFC_DTYPE_SIZE_SHIFT; + lo = ~ (unsigned HOST_WIDE_INT) 0; + if (n > HOST_BITS_PER_WIDE_INT) + hi = lo >> (2*HOST_BITS_PER_WIDE_INT - n); + else + hi = 0, lo >>= HOST_BITS_PER_WIDE_INT - n; + gfc_max_array_element_size + = build_int_cst_wide (long_unsigned_type_node, lo, hi); + + size_type_node = gfc_array_index_type; + + boolean_type_node = gfc_get_logical_type (gfc_default_logical_kind); + boolean_true_node = build_int_cst (boolean_type_node, 1); + boolean_false_node = build_int_cst (boolean_type_node, 0); + + /* ??? Shouldn't this be based on gfc_index_integer_kind or so? */ + gfc_charlen_int_kind = 4; + gfc_charlen_type_node = gfc_get_int_type (gfc_charlen_int_kind); +} + +/* Get the type node for the given type and kind. */ + +tree +gfc_get_int_type (int kind) +{ + int index = gfc_validate_kind (BT_INTEGER, kind, true); + return index < 0 ? 0 : gfc_integer_types[index]; +} + +tree +gfc_get_real_type (int kind) +{ + int index = gfc_validate_kind (BT_REAL, kind, true); + return index < 0 ? 0 : gfc_real_types[index]; +} + +tree +gfc_get_complex_type (int kind) +{ + int index = gfc_validate_kind (BT_COMPLEX, kind, true); + return index < 0 ? 0 : gfc_complex_types[index]; +} + +tree +gfc_get_logical_type (int kind) +{ + int index = gfc_validate_kind (BT_LOGICAL, kind, true); + return index < 0 ? 0 : gfc_logical_types[index]; +} + +tree +gfc_get_char_type (int kind) +{ + int index = gfc_validate_kind (BT_CHARACTER, kind, true); + return index < 0 ? 0 : gfc_character_types[index]; +} + +tree +gfc_get_pchar_type (int kind) +{ + int index = gfc_validate_kind (BT_CHARACTER, kind, true); + return index < 0 ? 0 : gfc_pcharacter_types[index]; +} + + +/* Create a character type with the given kind and length. */ + +tree +gfc_get_character_type_len_for_eltype (tree eltype, tree len) +{ + tree bounds, type; + + bounds = build_range_type (gfc_charlen_type_node, gfc_index_one_node, len); + type = build_array_type (eltype, bounds); + TYPE_STRING_FLAG (type) = 1; + + return type; +} + +tree +gfc_get_character_type_len (int kind, tree len) +{ + gfc_validate_kind (BT_CHARACTER, kind, false); + return gfc_get_character_type_len_for_eltype (gfc_get_char_type (kind), len); +} + + +/* Get a type node for a character kind. */ + +tree +gfc_get_character_type (int kind, gfc_charlen * cl) +{ + tree len; + + len = (cl == NULL) ? NULL_TREE : cl->backend_decl; + + return gfc_get_character_type_len (kind, len); +} + +/* Covert a basic type. This will be an array for character types. */ + +tree +gfc_typenode_for_spec (gfc_typespec * spec) +{ + tree basetype; + + switch (spec->type) + { + case BT_UNKNOWN: + gcc_unreachable (); + + case BT_INTEGER: + /* We use INTEGER(c_intptr_t) for C_PTR and C_FUNPTR once the symbol + has been resolved. This is done so we can convert C_PTR and + C_FUNPTR to simple variables that get translated to (void *). */ + if (spec->f90_type == BT_VOID) + { + if (spec->derived + && spec->derived->intmod_sym_id == ISOCBINDING_PTR) + basetype = ptr_type_node; + else + basetype = pfunc_type_node; + } + else + basetype = gfc_get_int_type (spec->kind); + break; + + case BT_REAL: + basetype = gfc_get_real_type (spec->kind); + break; + + case BT_COMPLEX: + basetype = gfc_get_complex_type (spec->kind); + break; + + case BT_LOGICAL: + basetype = gfc_get_logical_type (spec->kind); + break; + + case BT_CHARACTER: + basetype = gfc_get_character_type (spec->kind, spec->cl); + break; + + case BT_DERIVED: + basetype = gfc_get_derived_type (spec->derived); + + /* If we're dealing with either C_PTR or C_FUNPTR, we modified the + type and kind to fit a (void *) and the basetype returned was a + ptr_type_node. We need to pass up this new information to the + symbol that was declared of type C_PTR or C_FUNPTR. */ + if (spec->derived->attr.is_iso_c) + { + spec->type = spec->derived->ts.type; + spec->kind = spec->derived->ts.kind; + spec->f90_type = spec->derived->ts.f90_type; + } + break; + case BT_VOID: + /* This is for the second arg to c_f_pointer and c_f_procpointer + of the iso_c_binding module, to accept any ptr type. */ + basetype = ptr_type_node; + if (spec->f90_type == BT_VOID) + { + if (spec->derived + && spec->derived->intmod_sym_id == ISOCBINDING_PTR) + basetype = ptr_type_node; + else + basetype = pfunc_type_node; + } + break; + default: + gcc_unreachable (); + } + return basetype; +} + +/* Build an INT_CST for constant expressions, otherwise return NULL_TREE. */ + +static tree +gfc_conv_array_bound (gfc_expr * expr) +{ + /* If expr is an integer constant, return that. */ + if (expr != NULL && expr->expr_type == EXPR_CONSTANT) + return gfc_conv_mpz_to_tree (expr->value.integer, gfc_index_integer_kind); + + /* Otherwise return NULL. */ + return NULL_TREE; +} + +tree +gfc_get_element_type (tree type) +{ + tree element; + + if (GFC_ARRAY_TYPE_P (type)) + { + if (TREE_CODE (type) == POINTER_TYPE) + type = TREE_TYPE (type); + gcc_assert (TREE_CODE (type) == ARRAY_TYPE); + element = TREE_TYPE (type); + } + else + { + gcc_assert (GFC_DESCRIPTOR_TYPE_P (type)); + element = GFC_TYPE_ARRAY_DATAPTR_TYPE (type); + + gcc_assert (TREE_CODE (element) == POINTER_TYPE); + element = TREE_TYPE (element); + + gcc_assert (TREE_CODE (element) == ARRAY_TYPE); + element = TREE_TYPE (element); + } + + return element; +} + +/* Build an array. This function is called from gfc_sym_type(). + Actually returns array descriptor type. + + Format of array descriptors is as follows: + + struct gfc_array_descriptor + { + array *data + index offset; + index dtype; + struct descriptor_dimension dimension[N_DIM]; + } + + struct descriptor_dimension + { + index stride; + index lbound; + index ubound; + } + + Translation code should use gfc_conv_descriptor_* rather than + accessing the descriptor directly. Any changes to the array + descriptor type will require changes in gfc_conv_descriptor_* and + gfc_build_array_initializer. + + This is represented internally as a RECORD_TYPE. The index nodes + are gfc_array_index_type and the data node is a pointer to the + data. See below for the handling of character types. + + The dtype member is formatted as follows: + rank = dtype & GFC_DTYPE_RANK_MASK // 3 bits + type = (dtype & GFC_DTYPE_TYPE_MASK) >> GFC_DTYPE_TYPE_SHIFT // 3 bits + size = dtype >> GFC_DTYPE_SIZE_SHIFT + + I originally used nested ARRAY_TYPE nodes to represent arrays, but + this generated poor code for assumed/deferred size arrays. These + require use of PLACEHOLDER_EXPR/WITH_RECORD_EXPR, which isn't part + of the GENERIC grammar. Also, there is no way to explicitly set + the array stride, so all data must be packed(1). I've tried to + mark all the functions which would require modification with a GCC + ARRAYS comment. + + The data component points to the first element in the array. The + offset field is the position of the origin of the array (i.e. element + (0, 0 ...)). This may be outside the bounds of the array. + + An element is accessed by + data[offset + index0*stride0 + index1*stride1 + index2*stride2] + This gives good performance as the computation does not involve the + bounds of the array. For packed arrays, this is optimized further + by substituting the known strides. + + This system has one problem: all array bounds must be within 2^31 + elements of the origin (2^63 on 64-bit machines). For example + integer, dimension (80000:90000, 80000:90000, 2) :: array + may not work properly on 32-bit machines because 80000*80000 > + 2^31, so the calculation for stride2 would overflow. This may + still work, but I haven't checked, and it relies on the overflow + doing the right thing. + + The way to fix this problem is to access elements as follows: + data[(index0-lbound0)*stride0 + (index1-lbound1)*stride1] + Obviously this is much slower. I will make this a compile time + option, something like -fsmall-array-offsets. Mixing code compiled + with and without this switch will work. + + (1) This can be worked around by modifying the upper bound of the + previous dimension. This requires extra fields in the descriptor + (both real_ubound and fake_ubound). */ + + +/* Returns true if the array sym does not require a descriptor. */ + +int +gfc_is_nodesc_array (gfc_symbol * sym) +{ + gcc_assert (sym->attr.dimension); + + /* We only want local arrays. */ + if (sym->attr.pointer || sym->attr.allocatable) + return 0; + + if (sym->attr.dummy) + { + if (sym->as->type != AS_ASSUMED_SHAPE) + return 1; + else + return 0; + } + + if (sym->attr.result || sym->attr.function) + return 0; + + gcc_assert (sym->as->type == AS_EXPLICIT); + + return 1; +} + + +/* Create an array descriptor type. */ + +static tree +gfc_build_array_type (tree type, gfc_array_spec * as, + enum gfc_array_kind akind) +{ + tree lbound[GFC_MAX_DIMENSIONS]; + tree ubound[GFC_MAX_DIMENSIONS]; + int n; + + for (n = 0; n < as->rank; n++) + { + /* Create expressions for the known bounds of the array. */ + if (as->type == AS_ASSUMED_SHAPE && as->lower[n] == NULL) + lbound[n] = gfc_index_one_node; + else + lbound[n] = gfc_conv_array_bound (as->lower[n]); + ubound[n] = gfc_conv_array_bound (as->upper[n]); + } + + if (as->type == AS_ASSUMED_SHAPE) + akind = GFC_ARRAY_ASSUMED_SHAPE; + return gfc_get_array_type_bounds (type, as->rank, lbound, ubound, 0, akind); +} + +/* Returns the struct descriptor_dimension type. */ + +static tree +gfc_get_desc_dim_type (void) +{ + tree type; + tree decl; + tree fieldlist; + + if (gfc_desc_dim_type) + return gfc_desc_dim_type; + + /* Build the type node. */ + type = make_node (RECORD_TYPE); + + TYPE_NAME (type) = get_identifier ("descriptor_dimension"); + TYPE_PACKED (type) = 1; + + /* Consists of the stride, lbound and ubound members. */ + decl = build_decl (FIELD_DECL, + get_identifier ("stride"), gfc_array_index_type); + DECL_CONTEXT (decl) = type; + TREE_NO_WARNING (decl) = 1; + fieldlist = decl; + + decl = build_decl (FIELD_DECL, + get_identifier ("lbound"), gfc_array_index_type); + DECL_CONTEXT (decl) = type; + TREE_NO_WARNING (decl) = 1; + fieldlist = chainon (fieldlist, decl); + + decl = build_decl (FIELD_DECL, + get_identifier ("ubound"), gfc_array_index_type); + DECL_CONTEXT (decl) = type; + TREE_NO_WARNING (decl) = 1; + fieldlist = chainon (fieldlist, decl); + + /* Finish off the type. */ + TYPE_FIELDS (type) = fieldlist; + + gfc_finish_type (type); + TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 1; + + gfc_desc_dim_type = type; + return type; +} + + +/* Return the DTYPE for an array. This describes the type and type parameters + of the array. */ +/* TODO: Only call this when the value is actually used, and make all the + unknown cases abort. */ + +tree +gfc_get_dtype (tree type) +{ + tree size; + int n; + HOST_WIDE_INT i; + tree tmp; + tree dtype; + tree etype; + int rank; + + gcc_assert (GFC_DESCRIPTOR_TYPE_P (type) || GFC_ARRAY_TYPE_P (type)); + + if (GFC_TYPE_ARRAY_DTYPE (type)) + return GFC_TYPE_ARRAY_DTYPE (type); + + rank = GFC_TYPE_ARRAY_RANK (type); + etype = gfc_get_element_type (type); + + switch (TREE_CODE (etype)) + { + case INTEGER_TYPE: + n = GFC_DTYPE_INTEGER; + break; + + case BOOLEAN_TYPE: + n = GFC_DTYPE_LOGICAL; + break; + + case REAL_TYPE: + n = GFC_DTYPE_REAL; + break; + + case COMPLEX_TYPE: + n = GFC_DTYPE_COMPLEX; + break; + + /* We will never have arrays of arrays. */ + case RECORD_TYPE: + n = GFC_DTYPE_DERIVED; + break; + + case ARRAY_TYPE: + n = GFC_DTYPE_CHARACTER; + break; + + default: + /* TODO: Don't do dtype for temporary descriptorless arrays. */ + /* We can strange array types for temporary arrays. */ + return gfc_index_zero_node; + } + + gcc_assert (rank <= GFC_DTYPE_RANK_MASK); + size = TYPE_SIZE_UNIT (etype); + + i = rank | (n << GFC_DTYPE_TYPE_SHIFT); + if (size && INTEGER_CST_P (size)) + { + if (tree_int_cst_lt (gfc_max_array_element_size, size)) + internal_error ("Array element size too big"); + + i += TREE_INT_CST_LOW (size) << GFC_DTYPE_SIZE_SHIFT; + } + dtype = build_int_cst (gfc_array_index_type, i); + + if (size && !INTEGER_CST_P (size)) + { + tmp = build_int_cst (gfc_array_index_type, GFC_DTYPE_SIZE_SHIFT); + tmp = fold_build2 (LSHIFT_EXPR, gfc_array_index_type, + fold_convert (gfc_array_index_type, size), tmp); + dtype = fold_build2 (PLUS_EXPR, gfc_array_index_type, tmp, dtype); + } + /* If we don't know the size we leave it as zero. This should never happen + for anything that is actually used. */ + /* TODO: Check this is actually true, particularly when repacking + assumed size parameters. */ + + GFC_TYPE_ARRAY_DTYPE (type) = dtype; + return dtype; +} + + +/* Build an array type for use without a descriptor, packed according + to the value of PACKED. */ + +tree +gfc_get_nodesc_array_type (tree etype, gfc_array_spec * as, gfc_packed packed) +{ + tree range; + tree type; + tree tmp; + int n; + int known_stride; + int known_offset; + mpz_t offset; + mpz_t stride; + mpz_t delta; + gfc_expr *expr; + + mpz_init_set_ui (offset, 0); + mpz_init_set_ui (stride, 1); + mpz_init (delta); + + /* We don't use build_array_type because this does not include include + lang-specific information (i.e. the bounds of the array) when checking + for duplicates. */ + type = make_node (ARRAY_TYPE); + + GFC_ARRAY_TYPE_P (type) = 1; + TYPE_LANG_SPECIFIC (type) = (struct lang_type *) + ggc_alloc_cleared (sizeof (struct lang_type)); + + known_stride = (packed != PACKED_NO); + known_offset = 1; + for (n = 0; n < as->rank; n++) + { + /* Fill in the stride and bound components of the type. */ + if (known_stride) + tmp = gfc_conv_mpz_to_tree (stride, gfc_index_integer_kind); + else + tmp = NULL_TREE; + GFC_TYPE_ARRAY_STRIDE (type, n) = tmp; + + expr = as->lower[n]; + if (expr->expr_type == EXPR_CONSTANT) + { + tmp = gfc_conv_mpz_to_tree (expr->value.integer, + gfc_index_integer_kind); + } + else + { + known_stride = 0; + tmp = NULL_TREE; + } + GFC_TYPE_ARRAY_LBOUND (type, n) = tmp; + + if (known_stride) + { + /* Calculate the offset. */ + mpz_mul (delta, stride, as->lower[n]->value.integer); + mpz_sub (offset, offset, delta); + } + else + known_offset = 0; + + expr = as->upper[n]; + if (expr && expr->expr_type == EXPR_CONSTANT) + { + tmp = gfc_conv_mpz_to_tree (expr->value.integer, + gfc_index_integer_kind); + } + else + { + tmp = NULL_TREE; + known_stride = 0; + } + GFC_TYPE_ARRAY_UBOUND (type, n) = tmp; + + if (known_stride) + { + /* Calculate the stride. */ + mpz_sub (delta, as->upper[n]->value.integer, + as->lower[n]->value.integer); + mpz_add_ui (delta, delta, 1); + mpz_mul (stride, stride, delta); + } + + /* Only the first stride is known for partial packed arrays. */ + if (packed == PACKED_NO || packed == PACKED_PARTIAL) + known_stride = 0; + } + + if (known_offset) + { + GFC_TYPE_ARRAY_OFFSET (type) = + gfc_conv_mpz_to_tree (offset, gfc_index_integer_kind); + } + else + GFC_TYPE_ARRAY_OFFSET (type) = NULL_TREE; + + if (known_stride) + { + GFC_TYPE_ARRAY_SIZE (type) = + gfc_conv_mpz_to_tree (stride, gfc_index_integer_kind); + } + else + GFC_TYPE_ARRAY_SIZE (type) = NULL_TREE; + + GFC_TYPE_ARRAY_RANK (type) = as->rank; + GFC_TYPE_ARRAY_DTYPE (type) = NULL_TREE; + range = build_range_type (gfc_array_index_type, gfc_index_zero_node, + NULL_TREE); + /* TODO: use main type if it is unbounded. */ + GFC_TYPE_ARRAY_DATAPTR_TYPE (type) = + build_pointer_type (build_array_type (etype, range)); + + if (known_stride) + { + mpz_sub_ui (stride, stride, 1); + range = gfc_conv_mpz_to_tree (stride, gfc_index_integer_kind); + } + else + range = NULL_TREE; + + range = build_range_type (gfc_array_index_type, gfc_index_zero_node, range); + TYPE_DOMAIN (type) = range; + + build_pointer_type (etype); + TREE_TYPE (type) = etype; + + layout_type (type); + + mpz_clear (offset); + mpz_clear (stride); + mpz_clear (delta); + + /* Represent packed arrays as multi-dimensional if they have rank > + 1 and with proper bounds, instead of flat arrays. This makes for + better debug info. */ + if (known_offset) + { + tree gtype = etype, rtype, type_decl; + + for (n = as->rank - 1; n >= 0; n--) + { + rtype = build_range_type (gfc_array_index_type, + GFC_TYPE_ARRAY_LBOUND (type, n), + GFC_TYPE_ARRAY_UBOUND (type, n)); + gtype = build_array_type (gtype, rtype); + } + TYPE_NAME (type) = type_decl = build_decl (TYPE_DECL, NULL, gtype); + DECL_ORIGINAL_TYPE (type_decl) = gtype; + } + + if (packed != PACKED_STATIC || !known_stride) + { + /* For dummy arrays and automatic (heap allocated) arrays we + want a pointer to the array. */ + type = build_pointer_type (type); + GFC_ARRAY_TYPE_P (type) = 1; + TYPE_LANG_SPECIFIC (type) = TYPE_LANG_SPECIFIC (TREE_TYPE (type)); + } + return type; +} + +/* Return or create the base type for an array descriptor. */ + +static tree +gfc_get_array_descriptor_base (int dimen) +{ + tree fat_type, fieldlist, decl, arraytype; + char name[16 + GFC_RANK_DIGITS + 1]; + + gcc_assert (dimen >= 1 && dimen <= GFC_MAX_DIMENSIONS); + if (gfc_array_descriptor_base[dimen - 1]) + return gfc_array_descriptor_base[dimen - 1]; + + /* Build the type node. */ + fat_type = make_node (RECORD_TYPE); + + sprintf (name, "array_descriptor" GFC_RANK_PRINTF_FORMAT, dimen); + TYPE_NAME (fat_type) = get_identifier (name); + + /* Add the data member as the first element of the descriptor. */ + decl = build_decl (FIELD_DECL, get_identifier ("data"), ptr_type_node); + + DECL_CONTEXT (decl) = fat_type; + fieldlist = decl; + + /* Add the base component. */ + decl = build_decl (FIELD_DECL, get_identifier ("offset"), + gfc_array_index_type); + DECL_CONTEXT (decl) = fat_type; + TREE_NO_WARNING (decl) = 1; + fieldlist = chainon (fieldlist, decl); + + /* Add the dtype component. */ + decl = build_decl (FIELD_DECL, get_identifier ("dtype"), + gfc_array_index_type); + DECL_CONTEXT (decl) = fat_type; + TREE_NO_WARNING (decl) = 1; + fieldlist = chainon (fieldlist, decl); + + /* Build the array type for the stride and bound components. */ + arraytype = + build_array_type (gfc_get_desc_dim_type (), + build_range_type (gfc_array_index_type, + gfc_index_zero_node, + gfc_rank_cst[dimen - 1])); + + decl = build_decl (FIELD_DECL, get_identifier ("dim"), arraytype); + DECL_CONTEXT (decl) = fat_type; + TREE_NO_WARNING (decl) = 1; + fieldlist = chainon (fieldlist, decl); + + /* Finish off the type. */ + TYPE_FIELDS (fat_type) = fieldlist; + + gfc_finish_type (fat_type); + TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (fat_type)) = 1; + + gfc_array_descriptor_base[dimen - 1] = fat_type; + return fat_type; +} + +/* Build an array (descriptor) type with given bounds. */ + +tree +gfc_get_array_type_bounds (tree etype, int dimen, tree * lbound, + tree * ubound, int packed, + enum gfc_array_kind akind) +{ + char name[8 + GFC_RANK_DIGITS + GFC_MAX_SYMBOL_LEN]; + tree fat_type, base_type, arraytype, lower, upper, stride, tmp, rtype; + const char *type_name; + int n; + + base_type = gfc_get_array_descriptor_base (dimen); + fat_type = build_variant_type_copy (base_type); + + tmp = TYPE_NAME (etype); + if (tmp && TREE_CODE (tmp) == TYPE_DECL) + tmp = DECL_NAME (tmp); + if (tmp) + type_name = IDENTIFIER_POINTER (tmp); + else + type_name = "unknown"; + sprintf (name, "array" GFC_RANK_PRINTF_FORMAT "_%.*s", dimen, + GFC_MAX_SYMBOL_LEN, type_name); + TYPE_NAME (fat_type) = get_identifier (name); + + GFC_DESCRIPTOR_TYPE_P (fat_type) = 1; + TYPE_LANG_SPECIFIC (fat_type) = (struct lang_type *) + ggc_alloc_cleared (sizeof (struct lang_type)); + + GFC_TYPE_ARRAY_RANK (fat_type) = dimen; + GFC_TYPE_ARRAY_DTYPE (fat_type) = NULL_TREE; + GFC_TYPE_ARRAY_AKIND (fat_type) = akind; + + /* Build an array descriptor record type. */ + if (packed != 0) + stride = gfc_index_one_node; + else + stride = NULL_TREE; + for (n = 0; n < dimen; n++) + { + GFC_TYPE_ARRAY_STRIDE (fat_type, n) = stride; + + if (lbound) + lower = lbound[n]; + else + lower = NULL_TREE; + + if (lower != NULL_TREE) + { + if (INTEGER_CST_P (lower)) + GFC_TYPE_ARRAY_LBOUND (fat_type, n) = lower; + else + lower = NULL_TREE; + } + + upper = ubound[n]; + if (upper != NULL_TREE) + { + if (INTEGER_CST_P (upper)) + GFC_TYPE_ARRAY_UBOUND (fat_type, n) = upper; + else + upper = NULL_TREE; + } + + if (upper != NULL_TREE && lower != NULL_TREE && stride != NULL_TREE) + { + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, upper, lower); + tmp = fold_build2 (PLUS_EXPR, gfc_array_index_type, tmp, + gfc_index_one_node); + stride = + fold_build2 (MULT_EXPR, gfc_array_index_type, tmp, stride); + /* Check the folding worked. */ + gcc_assert (INTEGER_CST_P (stride)); + } + else + stride = NULL_TREE; + } + GFC_TYPE_ARRAY_SIZE (fat_type) = stride; + + /* TODO: known offsets for descriptors. */ + GFC_TYPE_ARRAY_OFFSET (fat_type) = NULL_TREE; + + /* We define data as an array with the correct size if possible. + Much better than doing pointer arithmetic. */ + if (stride) + rtype = build_range_type (gfc_array_index_type, gfc_index_zero_node, + int_const_binop (MINUS_EXPR, stride, + integer_one_node, 0)); + else + rtype = gfc_array_range_type; + arraytype = build_array_type (etype, rtype); + arraytype = build_pointer_type (arraytype); + GFC_TYPE_ARRAY_DATAPTR_TYPE (fat_type) = arraytype; + + return fat_type; +} + +/* Build a pointer type. This function is called from gfc_sym_type(). */ + +static tree +gfc_build_pointer_type (gfc_symbol * sym, tree type) +{ + /* Array pointer types aren't actually pointers. */ + if (sym->attr.dimension) + return type; + else + return build_pointer_type (type); +} + +/* Return the type for a symbol. Special handling is required for character + types to get the correct level of indirection. + For functions return the return type. + For subroutines return void_type_node. + Calling this multiple times for the same symbol should be avoided, + especially for character and array types. */ + +tree +gfc_sym_type (gfc_symbol * sym) +{ + tree type; + int byref; + + /* Procedure Pointers inside COMMON blocks or as function result. */ + if (sym->attr.proc_pointer && (sym->attr.in_common || sym->attr.result)) + { + /* Unset proc_pointer as gfc_get_function_type calls gfc_sym_type. */ + sym->attr.proc_pointer = 0; + type = build_pointer_type (gfc_get_function_type (sym)); + sym->attr.proc_pointer = 1; + return type; + } + + if (sym->attr.flavor == FL_PROCEDURE && !sym->attr.function) + return void_type_node; + + /* In the case of a function the fake result variable may have a + type different from the function type, so don't return early in + that case. */ + if (sym->backend_decl && !sym->attr.function) + return TREE_TYPE (sym->backend_decl); + + if (sym->ts.type == BT_CHARACTER + && ((sym->attr.function && sym->attr.is_bind_c) + || (sym->attr.result + && sym->ns->proc_name + && sym->ns->proc_name->attr.is_bind_c))) + type = gfc_character1_type_node; + else + type = gfc_typenode_for_spec (&sym->ts); + + if (sym->attr.dummy && !sym->attr.function && !sym->attr.value) + byref = 1; + else + byref = 0; + + if (sym->attr.dimension) + { + if (gfc_is_nodesc_array (sym)) + { + /* If this is a character argument of unknown length, just use the + base type. */ + if (sym->ts.type != BT_CHARACTER + || !(sym->attr.dummy || sym->attr.function) + || sym->ts.cl->backend_decl) + { + type = gfc_get_nodesc_array_type (type, sym->as, + byref ? PACKED_FULL + : PACKED_STATIC); + byref = 0; + } + } + else + { + enum gfc_array_kind akind = GFC_ARRAY_UNKNOWN; + if (sym->attr.pointer) + akind = GFC_ARRAY_POINTER; + else if (sym->attr.allocatable) + akind = GFC_ARRAY_ALLOCATABLE; + type = gfc_build_array_type (type, sym->as, akind); + } + } + else + { + if (sym->attr.allocatable || sym->attr.pointer) + type = gfc_build_pointer_type (sym, type); + if (sym->attr.pointer) + GFC_POINTER_TYPE_P (type) = 1; + } + + /* We currently pass all parameters by reference. + See f95_get_function_decl. For dummy function parameters return the + function type. */ + if (byref) + { + /* We must use pointer types for potentially absent variables. The + optimizers assume a reference type argument is never NULL. */ + if (sym->attr.optional || sym->ns->proc_name->attr.entry_master) + type = build_pointer_type (type); + else + type = build_reference_type (type); + } + + return (type); +} + +/* Layout and output debug info for a record type. */ + +void +gfc_finish_type (tree type) +{ + tree decl; + + decl = build_decl (TYPE_DECL, NULL_TREE, type); + TYPE_STUB_DECL (type) = decl; + layout_type (type); + rest_of_type_compilation (type, 1); + rest_of_decl_compilation (decl, 1, 0); +} + +/* Add a field of given NAME and TYPE to the context of a UNION_TYPE + or RECORD_TYPE pointed to by STYPE. The new field is chained + to the fieldlist pointed to by FIELDLIST. + + Returns a pointer to the new field. */ + +tree +gfc_add_field_to_struct (tree *fieldlist, tree context, + tree name, tree type) +{ + tree decl; + + decl = build_decl (FIELD_DECL, name, type); + + DECL_CONTEXT (decl) = context; + DECL_INITIAL (decl) = 0; + DECL_ALIGN (decl) = 0; + DECL_USER_ALIGN (decl) = 0; + TREE_CHAIN (decl) = NULL_TREE; + *fieldlist = chainon (*fieldlist, decl); + + return decl; +} + + +/* Copy the backend_decl and component backend_decls if + the two derived type symbols are "equal", as described + in 4.4.2 and resolved by gfc_compare_derived_types. */ + +static int +copy_dt_decls_ifequal (gfc_symbol *from, gfc_symbol *to) +{ + gfc_component *to_cm; + gfc_component *from_cm; + + if (from->backend_decl == NULL + || !gfc_compare_derived_types (from, to)) + return 0; + + to->backend_decl = from->backend_decl; + + to_cm = to->components; + from_cm = from->components; + + /* Copy the component declarations. If a component is itself + a derived type, we need a copy of its component declarations. + This is done by recursing into gfc_get_derived_type and + ensures that the component's component declarations have + been built. If it is a character, we need the character + length, as well. */ + for (; to_cm; to_cm = to_cm->next, from_cm = from_cm->next) + { + to_cm->backend_decl = from_cm->backend_decl; + if (!from_cm->attr.pointer && from_cm->ts.type == BT_DERIVED) + gfc_get_derived_type (to_cm->ts.derived); + + else if (from_cm->ts.type == BT_CHARACTER) + to_cm->ts.cl->backend_decl = from_cm->ts.cl->backend_decl; + } + + return 1; +} + + +/* Build a tree node for a derived type. If there are equal + derived types, with different local names, these are built + at the same time. If an equal derived type has been built + in a parent namespace, this is used. */ + +static tree +gfc_get_derived_type (gfc_symbol * derived) +{ + tree typenode = NULL, field = NULL, field_type = NULL, fieldlist = NULL; + gfc_component *c; + gfc_dt_list *dt; + + gcc_assert (derived && derived->attr.flavor == FL_DERIVED); + + /* See if it's one of the iso_c_binding derived types. */ + if (derived->attr.is_iso_c == 1) + { + if (derived->backend_decl) + return derived->backend_decl; + + if (derived->intmod_sym_id == ISOCBINDING_PTR) + derived->backend_decl = ptr_type_node; + else + derived->backend_decl = pfunc_type_node; + + /* Create a backend_decl for the __c_ptr_c_address field. */ + derived->components->backend_decl = + gfc_add_field_to_struct (&(derived->backend_decl->type.values), + derived->backend_decl, + get_identifier (derived->components->name), + gfc_typenode_for_spec ( + &(derived->components->ts))); + + derived->ts.kind = gfc_index_integer_kind; + derived->ts.type = BT_INTEGER; + /* Set the f90_type to BT_VOID as a way to recognize something of type + BT_INTEGER that needs to fit a void * for the purpose of the + iso_c_binding derived types. */ + derived->ts.f90_type = BT_VOID; + + return derived->backend_decl; + } + + /* derived->backend_decl != 0 means we saw it before, but its + components' backend_decl may have not been built. */ + if (derived->backend_decl) + { + /* Its components' backend_decl have been built. */ + if (TYPE_FIELDS (derived->backend_decl)) + return derived->backend_decl; + else + typenode = derived->backend_decl; + } + else + { + + /* We see this derived type first time, so build the type node. */ + typenode = make_node (RECORD_TYPE); + TYPE_NAME (typenode) = get_identifier (derived->name); + TYPE_PACKED (typenode) = gfc_option.flag_pack_derived; + derived->backend_decl = typenode; + } + + /* Go through the derived type components, building them as + necessary. The reason for doing this now is that it is + possible to recurse back to this derived type through a + pointer component (PR24092). If this happens, the fields + will be built and so we can return the type. */ + for (c = derived->components; c; c = c->next) + { + if (c->ts.type != BT_DERIVED) + continue; + + if (!c->attr.pointer || c->ts.derived->backend_decl == NULL) + c->ts.derived->backend_decl = gfc_get_derived_type (c->ts.derived); + + if (c->ts.derived && c->ts.derived->attr.is_iso_c) + { + /* Need to copy the modified ts from the derived type. The + typespec was modified because C_PTR/C_FUNPTR are translated + into (void *) from derived types. */ + c->ts.type = c->ts.derived->ts.type; + c->ts.kind = c->ts.derived->ts.kind; + c->ts.f90_type = c->ts.derived->ts.f90_type; + if (c->initializer) + { + c->initializer->ts.type = c->ts.type; + c->initializer->ts.kind = c->ts.kind; + c->initializer->ts.f90_type = c->ts.f90_type; + c->initializer->expr_type = EXPR_NULL; + } + } + } + + if (TYPE_FIELDS (derived->backend_decl)) + return derived->backend_decl; + + /* Build the type member list. Install the newly created RECORD_TYPE + node as DECL_CONTEXT of each FIELD_DECL. */ + fieldlist = NULL_TREE; + for (c = derived->components; c; c = c->next) + { + if (c->ts.type == BT_DERIVED) + field_type = c->ts.derived->backend_decl; + else + { + if (c->ts.type == BT_CHARACTER) + { + /* Evaluate the string length. */ + gfc_conv_const_charlen (c->ts.cl); + gcc_assert (c->ts.cl->backend_decl); + } + + field_type = gfc_typenode_for_spec (&c->ts); + } + + /* This returns an array descriptor type. Initialization may be + required. */ + if (c->attr.dimension) + { + if (c->attr.pointer || c->attr.allocatable) + { + enum gfc_array_kind akind; + if (c->attr.pointer) + akind = GFC_ARRAY_POINTER; + else + akind = GFC_ARRAY_ALLOCATABLE; + /* Pointers to arrays aren't actually pointer types. The + descriptors are separate, but the data is common. */ + field_type = gfc_build_array_type (field_type, c->as, akind); + } + else + field_type = gfc_get_nodesc_array_type (field_type, c->as, + PACKED_STATIC); + } + else if (c->attr.pointer) + field_type = build_pointer_type (field_type); + + field = gfc_add_field_to_struct (&fieldlist, typenode, + get_identifier (c->name), + field_type); + if (c->loc.lb) + gfc_set_decl_location (field, &c->loc); + else if (derived->declared_at.lb) + gfc_set_decl_location (field, &derived->declared_at); + + DECL_PACKED (field) |= TYPE_PACKED (typenode); + + gcc_assert (field); + if (!c->backend_decl) + c->backend_decl = field; + } + + /* Now we have the final fieldlist. Record it, then lay out the + derived type, including the fields. */ + TYPE_FIELDS (typenode) = fieldlist; + + gfc_finish_type (typenode); + gfc_set_decl_location (TYPE_STUB_DECL (typenode), &derived->declared_at); + if (derived->module && derived->ns->proc_name + && derived->ns->proc_name->attr.flavor == FL_MODULE) + { + if (derived->ns->proc_name->backend_decl + && TREE_CODE (derived->ns->proc_name->backend_decl) + == NAMESPACE_DECL) + { + TYPE_CONTEXT (typenode) = derived->ns->proc_name->backend_decl; + DECL_CONTEXT (TYPE_STUB_DECL (typenode)) + = derived->ns->proc_name->backend_decl; + } + } + + derived->backend_decl = typenode; + + /* Add this backend_decl to all the other, equal derived types. */ + for (dt = gfc_derived_types; dt; dt = dt->next) + copy_dt_decls_ifequal (derived, dt->derived); + + return derived->backend_decl; +} + + +int +gfc_return_by_reference (gfc_symbol * sym) +{ + if (!sym->attr.function) + return 0; + + if (sym->attr.dimension) + return 1; + + if (sym->ts.type == BT_CHARACTER + && !sym->attr.is_bind_c + && (!sym->attr.result + || !sym->ns->proc_name + || !sym->ns->proc_name->attr.is_bind_c)) + return 1; + + /* Possibly return complex numbers by reference for g77 compatibility. + We don't do this for calls to intrinsics (as the library uses the + -fno-f2c calling convention), nor for calls to functions which always + require an explicit interface, as no compatibility problems can + arise there. */ + if (gfc_option.flag_f2c + && sym->ts.type == BT_COMPLEX + && !sym->attr.intrinsic && !sym->attr.always_explicit) + return 1; + + return 0; +} + +static tree +gfc_get_mixed_entry_union (gfc_namespace *ns) +{ + tree type; + tree decl; + tree fieldlist; + char name[GFC_MAX_SYMBOL_LEN + 1]; + gfc_entry_list *el, *el2; + + gcc_assert (ns->proc_name->attr.mixed_entry_master); + gcc_assert (memcmp (ns->proc_name->name, "master.", 7) == 0); + + snprintf (name, GFC_MAX_SYMBOL_LEN, "munion.%s", ns->proc_name->name + 7); + + /* Build the type node. */ + type = make_node (UNION_TYPE); + + TYPE_NAME (type) = get_identifier (name); + fieldlist = NULL; + + for (el = ns->entries; el; el = el->next) + { + /* Search for duplicates. */ + for (el2 = ns->entries; el2 != el; el2 = el2->next) + if (el2->sym->result == el->sym->result) + break; + + if (el == el2) + { + decl = build_decl (FIELD_DECL, + get_identifier (el->sym->result->name), + gfc_sym_type (el->sym->result)); + DECL_CONTEXT (decl) = type; + fieldlist = chainon (fieldlist, decl); + } + } + + /* Finish off the type. */ + TYPE_FIELDS (type) = fieldlist; + + gfc_finish_type (type); + TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 1; + return type; +} + +tree +gfc_get_function_type (gfc_symbol * sym) +{ + tree type; + tree typelist; + gfc_formal_arglist *f; + gfc_symbol *arg; + int nstr; + int alternate_return; + + /* Make sure this symbol is a function, a subroutine or the main + program. */ + gcc_assert (sym->attr.flavor == FL_PROCEDURE + || sym->attr.flavor == FL_PROGRAM); + + if (sym->backend_decl) + return TREE_TYPE (sym->backend_decl); + + nstr = 0; + alternate_return = 0; + typelist = NULL_TREE; + + if (sym->attr.entry_master) + { + /* Additional parameter for selecting an entry point. */ + typelist = gfc_chainon_list (typelist, gfc_array_index_type); + } + + if (sym->result) + arg = sym->result; + else + arg = sym; + + if (arg->ts.type == BT_CHARACTER) + gfc_conv_const_charlen (arg->ts.cl); + + /* Some functions we use an extra parameter for the return value. */ + if (gfc_return_by_reference (sym)) + { + type = gfc_sym_type (arg); + if (arg->ts.type == BT_COMPLEX + || arg->attr.dimension + || arg->ts.type == BT_CHARACTER) + type = build_reference_type (type); + + typelist = gfc_chainon_list (typelist, type); + if (arg->ts.type == BT_CHARACTER) + typelist = gfc_chainon_list (typelist, gfc_charlen_type_node); + } + + /* Build the argument types for the function. */ + for (f = sym->formal; f; f = f->next) + { + arg = f->sym; + if (arg) + { + /* Evaluate constant character lengths here so that they can be + included in the type. */ + if (arg->ts.type == BT_CHARACTER) + gfc_conv_const_charlen (arg->ts.cl); + + if (arg->attr.flavor == FL_PROCEDURE) + { + type = gfc_get_function_type (arg); + type = build_pointer_type (type); + } + else + type = gfc_sym_type (arg); + + /* Parameter Passing Convention + + We currently pass all parameters by reference. + Parameters with INTENT(IN) could be passed by value. + The problem arises if a function is called via an implicit + prototype. In this situation the INTENT is not known. + For this reason all parameters to global functions must be + passed by reference. Passing by value would potentially + generate bad code. Worse there would be no way of telling that + this code was bad, except that it would give incorrect results. + + Contained procedures could pass by value as these are never + used without an explicit interface, and cannot be passed as + actual parameters for a dummy procedure. */ + if (arg->ts.type == BT_CHARACTER) + nstr++; + typelist = gfc_chainon_list (typelist, type); + } + else + { + if (sym->attr.subroutine) + alternate_return = 1; + } + } + + /* Add hidden string length parameters. */ + while (nstr--) + typelist = gfc_chainon_list (typelist, gfc_charlen_type_node); + + if (typelist) + typelist = gfc_chainon_list (typelist, void_type_node); + + if (alternate_return) + type = integer_type_node; + else if (!sym->attr.function || gfc_return_by_reference (sym)) + type = void_type_node; + else if (sym->attr.mixed_entry_master) + type = gfc_get_mixed_entry_union (sym->ns); + else if (gfc_option.flag_f2c + && sym->ts.type == BT_REAL + && sym->ts.kind == gfc_default_real_kind + && !sym->attr.always_explicit) + { + /* Special case: f2c calling conventions require that (scalar) + default REAL functions return the C type double instead. f2c + compatibility is only an issue with functions that don't + require an explicit interface, as only these could be + implemented in Fortran 77. */ + sym->ts.kind = gfc_default_double_kind; + type = gfc_typenode_for_spec (&sym->ts); + sym->ts.kind = gfc_default_real_kind; + } + else if (sym->result && sym->result->attr.proc_pointer) + /* Procedure pointer return values. */ + type = gfc_sym_type (sym->result); + else + type = gfc_sym_type (sym); + + type = build_function_type (type, typelist); + + return type; +} + +/* Language hooks for middle-end access to type nodes. */ + +/* Return an integer type with BITS bits of precision, + that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */ + +tree +gfc_type_for_size (unsigned bits, int unsignedp) +{ + if (!unsignedp) + { + int i; + for (i = 0; i <= MAX_INT_KINDS; ++i) + { + tree type = gfc_integer_types[i]; + if (type && bits == TYPE_PRECISION (type)) + return type; + } + + /* Handle TImode as a special case because it is used by some backends + (e.g. ARM) even though it is not available for normal use. */ +#if HOST_BITS_PER_WIDE_INT >= 64 + if (bits == TYPE_PRECISION (intTI_type_node)) + return intTI_type_node; +#endif + } + else + { + if (bits == TYPE_PRECISION (unsigned_intQI_type_node)) + return unsigned_intQI_type_node; + if (bits == TYPE_PRECISION (unsigned_intHI_type_node)) + return unsigned_intHI_type_node; + if (bits == TYPE_PRECISION (unsigned_intSI_type_node)) + return unsigned_intSI_type_node; + if (bits == TYPE_PRECISION (unsigned_intDI_type_node)) + return unsigned_intDI_type_node; + if (bits == TYPE_PRECISION (unsigned_intTI_type_node)) + return unsigned_intTI_type_node; + } + + return NULL_TREE; +} + +/* Return a data type that has machine mode MODE. If the mode is an + integer, then UNSIGNEDP selects between signed and unsigned types. */ + +tree +gfc_type_for_mode (enum machine_mode mode, int unsignedp) +{ + int i; + tree *base; + + if (GET_MODE_CLASS (mode) == MODE_FLOAT) + base = gfc_real_types; + else if (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT) + base = gfc_complex_types; + else if (SCALAR_INT_MODE_P (mode)) + return gfc_type_for_size (GET_MODE_PRECISION (mode), unsignedp); + else if (VECTOR_MODE_P (mode)) + { + enum machine_mode inner_mode = GET_MODE_INNER (mode); + tree inner_type = gfc_type_for_mode (inner_mode, unsignedp); + if (inner_type != NULL_TREE) + return build_vector_type_for_mode (inner_type, mode); + return NULL_TREE; + } + else + return NULL_TREE; + + for (i = 0; i <= MAX_REAL_KINDS; ++i) + { + tree type = base[i]; + if (type && mode == TYPE_MODE (type)) + return type; + } + + return NULL_TREE; +} + +/* Return TRUE if TYPE is a type with a hidden descriptor, fill in INFO + in that case. */ + +bool +gfc_get_array_descr_info (const_tree type, struct array_descr_info *info) +{ + int rank, dim; + bool indirect = false; + tree etype, ptype, field, t, base_decl; + tree data_off, offset_off, dim_off, dim_size, elem_size; + tree lower_suboff, upper_suboff, stride_suboff; + + if (! GFC_DESCRIPTOR_TYPE_P (type)) + { + if (! POINTER_TYPE_P (type)) + return false; + type = TREE_TYPE (type); + if (! GFC_DESCRIPTOR_TYPE_P (type)) + return false; + indirect = true; + } + + rank = GFC_TYPE_ARRAY_RANK (type); + if (rank >= (int) (sizeof (info->dimen) / sizeof (info->dimen[0]))) + return false; + + etype = GFC_TYPE_ARRAY_DATAPTR_TYPE (type); + gcc_assert (POINTER_TYPE_P (etype)); + etype = TREE_TYPE (etype); + gcc_assert (TREE_CODE (etype) == ARRAY_TYPE); + etype = TREE_TYPE (etype); + /* Can't handle variable sized elements yet. */ + if (int_size_in_bytes (etype) <= 0) + return false; + /* Nor non-constant lower bounds in assumed shape arrays. */ + if (GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ASSUMED_SHAPE) + { + for (dim = 0; dim < rank; dim++) + if (GFC_TYPE_ARRAY_LBOUND (type, dim) == NULL_TREE + || TREE_CODE (GFC_TYPE_ARRAY_LBOUND (type, dim)) != INTEGER_CST) + return false; + } + + memset (info, '\0', sizeof (*info)); + info->ndimensions = rank; + info->element_type = etype; + ptype = build_pointer_type (gfc_array_index_type); + if (indirect) + { + info->base_decl = build_decl (VAR_DECL, NULL_TREE, + build_pointer_type (ptype)); + base_decl = build1 (INDIRECT_REF, ptype, info->base_decl); + } + else + info->base_decl = base_decl = build_decl (VAR_DECL, NULL_TREE, ptype); + + if (GFC_TYPE_ARRAY_SPAN (type)) + elem_size = GFC_TYPE_ARRAY_SPAN (type); + else + elem_size = fold_convert (gfc_array_index_type, TYPE_SIZE_UNIT (etype)); + field = TYPE_FIELDS (TYPE_MAIN_VARIANT (type)); + data_off = byte_position (field); + field = TREE_CHAIN (field); + offset_off = byte_position (field); + field = TREE_CHAIN (field); + field = TREE_CHAIN (field); + dim_off = byte_position (field); + dim_size = TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (field))); + field = TYPE_FIELDS (TREE_TYPE (TREE_TYPE (field))); + stride_suboff = byte_position (field); + field = TREE_CHAIN (field); + lower_suboff = byte_position (field); + field = TREE_CHAIN (field); + upper_suboff = byte_position (field); + + t = base_decl; + if (!integer_zerop (data_off)) + t = build2 (POINTER_PLUS_EXPR, ptype, t, data_off); + t = build1 (NOP_EXPR, build_pointer_type (ptr_type_node), t); + info->data_location = build1 (INDIRECT_REF, ptr_type_node, t); + if (GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE) + info->allocated = build2 (NE_EXPR, boolean_type_node, + info->data_location, null_pointer_node); + else if (GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_POINTER) + info->associated = build2 (NE_EXPR, boolean_type_node, + info->data_location, null_pointer_node); + + for (dim = 0; dim < rank; dim++) + { + t = build2 (POINTER_PLUS_EXPR, ptype, base_decl, + size_binop (PLUS_EXPR, dim_off, lower_suboff)); + t = build1 (INDIRECT_REF, gfc_array_index_type, t); + info->dimen[dim].lower_bound = t; + t = build2 (POINTER_PLUS_EXPR, ptype, base_decl, + size_binop (PLUS_EXPR, dim_off, upper_suboff)); + t = build1 (INDIRECT_REF, gfc_array_index_type, t); + info->dimen[dim].upper_bound = t; + if (GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ASSUMED_SHAPE) + { + /* Assumed shape arrays have known lower bounds. */ + info->dimen[dim].upper_bound + = build2 (MINUS_EXPR, gfc_array_index_type, + info->dimen[dim].upper_bound, + info->dimen[dim].lower_bound); + info->dimen[dim].lower_bound + = fold_convert (gfc_array_index_type, + GFC_TYPE_ARRAY_LBOUND (type, dim)); + info->dimen[dim].upper_bound + = build2 (PLUS_EXPR, gfc_array_index_type, + info->dimen[dim].lower_bound, + info->dimen[dim].upper_bound); + } + t = build2 (POINTER_PLUS_EXPR, ptype, base_decl, + size_binop (PLUS_EXPR, dim_off, stride_suboff)); + t = build1 (INDIRECT_REF, gfc_array_index_type, t); + t = build2 (MULT_EXPR, gfc_array_index_type, t, elem_size); + info->dimen[dim].stride = t; + dim_off = size_binop (PLUS_EXPR, dim_off, dim_size); + } + + return true; +} + +#include "gt-fortran-trans-types.h" diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-types.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-types.h new file mode 100644 index 0000000000..7074913d4e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-types.h @@ -0,0 +1,92 @@ +/* Header for Fortran 95 types backend support. + Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008 + Free Software Foundation, Inc. + Contributed by Paul Brook + and Steven Bosscher + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + + +#ifndef GFC_BACKEND_H +#define GFC_BACKEND_H + +extern GTY(()) tree gfc_array_index_type; +extern GTY(()) tree gfc_array_range_type; +extern GTY(()) tree gfc_character1_type_node; +extern GTY(()) tree ppvoid_type_node; +extern GTY(()) tree pvoid_type_node; +extern GTY(()) tree pchar_type_node; + +/* This is the type used to hold the lengths of character variables. + It must be the same as the corresponding definition in gfortran.h. */ +/* TODO: This is still hardcoded as kind=4 in some bits of the compiler + and runtime library. */ +extern GTY(()) tree gfc_charlen_type_node; + +typedef enum { + PACKED_NO = 0, + PACKED_PARTIAL, + PACKED_FULL, + PACKED_STATIC +} gfc_packed; + +/* be-function.c */ +void gfc_convert_function_code (gfc_namespace *); + +/* trans-types.c */ +void gfc_init_kinds (void); +void gfc_init_types (void); + +tree gfc_get_int_type (int); +tree gfc_get_real_type (int); +tree gfc_get_complex_type (int); +tree gfc_get_logical_type (int); +tree gfc_get_char_type (int); +tree gfc_get_pchar_type (int); +tree gfc_get_character_type (int, gfc_charlen *); +tree gfc_get_character_type_len (int, tree); +tree gfc_get_character_type_len_for_eltype (tree, tree); + +tree gfc_sym_type (gfc_symbol *); +tree gfc_typenode_for_spec (gfc_typespec *); + +tree gfc_get_function_type (gfc_symbol *); + +tree gfc_type_for_size (unsigned, int); +tree gfc_type_for_mode (enum machine_mode, int); + +tree gfc_get_element_type (tree); +tree gfc_get_array_type_bounds (tree, int, tree *, tree *, int, + enum gfc_array_kind); +tree gfc_get_nodesc_array_type (tree, gfc_array_spec *, gfc_packed); + +/* Add a field of given name and type to a UNION_TYPE or RECORD_TYPE. */ +tree gfc_add_field_to_struct (tree *, tree, tree, tree); + +/* Layout and output debugging info for a type. */ +void gfc_finish_type (tree); + +/* Some functions have an extra parameter for the return value. */ +int gfc_return_by_reference (gfc_symbol *); + +/* Returns true if the array sym does not require a descriptor. */ +int gfc_is_nodesc_array (gfc_symbol *); + +/* Return the DTYPE for an array. */ +tree gfc_get_dtype (tree); + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans.c new file mode 100644 index 0000000000..628c2a0834 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans.c @@ -0,0 +1,1322 @@ +/* Code translation -- generate GCC trees from gfc_code. + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software + Foundation, Inc. + Contributed by Paul Brook + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tree.h" +#include "gimple.h" +#include "tree-iterator.h" +#include "ggc.h" +#include "toplev.h" +#include "defaults.h" +#include "real.h" +#include "flags.h" +#include "gfortran.h" +#include "trans.h" +#include "trans-stmt.h" +#include "trans-array.h" +#include "trans-types.h" +#include "trans-const.h" + +/* Naming convention for backend interface code: + + gfc_trans_* translate gfc_code into STMT trees. + + gfc_conv_* expression conversion + + gfc_get_* get a backend tree representation of a decl or type */ + +static gfc_file *gfc_current_backend_file; + +const char gfc_msg_bounds[] = N_("Array bound mismatch"); +const char gfc_msg_fault[] = N_("Array reference out of bounds"); +const char gfc_msg_wrong_return[] = N_("Incorrect function return value"); + + +/* Advance along TREE_CHAIN n times. */ + +tree +gfc_advance_chain (tree t, int n) +{ + for (; n > 0; n--) + { + gcc_assert (t != NULL_TREE); + t = TREE_CHAIN (t); + } + return t; +} + + +/* Wrap a node in a TREE_LIST node and add it to the end of a list. */ + +tree +gfc_chainon_list (tree list, tree add) +{ + tree l; + + l = tree_cons (NULL_TREE, add, NULL_TREE); + + return chainon (list, l); +} + + +/* Strip off a legitimate source ending from the input + string NAME of length LEN. */ + +static inline void +remove_suffix (char *name, int len) +{ + int i; + + for (i = 2; i < 8 && len > i; i++) + { + if (name[len - i] == '.') + { + name[len - i] = '\0'; + break; + } + } +} + + +/* Creates a variable declaration with a given TYPE. */ + +tree +gfc_create_var_np (tree type, const char *prefix) +{ + tree t; + + t = create_tmp_var_raw (type, prefix); + + /* No warnings for anonymous variables. */ + if (prefix == NULL) + TREE_NO_WARNING (t) = 1; + + return t; +} + + +/* Like above, but also adds it to the current scope. */ + +tree +gfc_create_var (tree type, const char *prefix) +{ + tree tmp; + + tmp = gfc_create_var_np (type, prefix); + + pushdecl (tmp); + + return tmp; +} + + +/* If the expression is not constant, evaluate it now. We assign the + result of the expression to an artificially created variable VAR, and + return a pointer to the VAR_DECL node for this variable. */ + +tree +gfc_evaluate_now (tree expr, stmtblock_t * pblock) +{ + tree var; + + if (CONSTANT_CLASS_P (expr)) + return expr; + + var = gfc_create_var (TREE_TYPE (expr), NULL); + gfc_add_modify (pblock, var, expr); + + return var; +} + + +/* Build a MODIFY_EXPR node and add it to a given statement block PBLOCK. + A MODIFY_EXPR is an assignment: + LHS <- RHS. */ + +void +gfc_add_modify (stmtblock_t * pblock, tree lhs, tree rhs) +{ + tree tmp; + +#ifdef ENABLE_CHECKING + /* Make sure that the types of the rhs and the lhs are the same + for scalar assignments. We should probably have something + similar for aggregates, but right now removing that check just + breaks everything. */ + gcc_assert (TREE_TYPE (rhs) == TREE_TYPE (lhs) + || AGGREGATE_TYPE_P (TREE_TYPE (lhs))); +#endif + + tmp = fold_build2 (MODIFY_EXPR, void_type_node, lhs, rhs); + gfc_add_expr_to_block (pblock, tmp); +} + + +/* Create a new scope/binding level and initialize a block. Care must be + taken when translating expressions as any temporaries will be placed in + the innermost scope. */ + +void +gfc_start_block (stmtblock_t * block) +{ + /* Start a new binding level. */ + pushlevel (0); + block->has_scope = 1; + + /* The block is empty. */ + block->head = NULL_TREE; +} + + +/* Initialize a block without creating a new scope. */ + +void +gfc_init_block (stmtblock_t * block) +{ + block->head = NULL_TREE; + block->has_scope = 0; +} + + +/* Sometimes we create a scope but it turns out that we don't actually + need it. This function merges the scope of BLOCK with its parent. + Only variable decls will be merged, you still need to add the code. */ + +void +gfc_merge_block_scope (stmtblock_t * block) +{ + tree decl; + tree next; + + gcc_assert (block->has_scope); + block->has_scope = 0; + + /* Remember the decls in this scope. */ + decl = getdecls (); + poplevel (0, 0, 0); + + /* Add them to the parent scope. */ + while (decl != NULL_TREE) + { + next = TREE_CHAIN (decl); + TREE_CHAIN (decl) = NULL_TREE; + + pushdecl (decl); + decl = next; + } +} + + +/* Finish a scope containing a block of statements. */ + +tree +gfc_finish_block (stmtblock_t * stmtblock) +{ + tree decl; + tree expr; + tree block; + + expr = stmtblock->head; + if (!expr) + expr = build_empty_stmt (); + + stmtblock->head = NULL_TREE; + + if (stmtblock->has_scope) + { + decl = getdecls (); + + if (decl) + { + block = poplevel (1, 0, 0); + expr = build3_v (BIND_EXPR, decl, expr, block); + } + else + poplevel (0, 0, 0); + } + + return expr; +} + + +/* Build an ADDR_EXPR and cast the result to TYPE. If TYPE is NULL, the + natural type is used. */ + +tree +gfc_build_addr_expr (tree type, tree t) +{ + tree base_type = TREE_TYPE (t); + tree natural_type; + + if (type && POINTER_TYPE_P (type) + && TREE_CODE (base_type) == ARRAY_TYPE + && TYPE_MAIN_VARIANT (TREE_TYPE (type)) + == TYPE_MAIN_VARIANT (TREE_TYPE (base_type))) + { + tree min_val = size_zero_node; + tree type_domain = TYPE_DOMAIN (base_type); + if (type_domain && TYPE_MIN_VALUE (type_domain)) + min_val = TYPE_MIN_VALUE (type_domain); + t = fold (build4 (ARRAY_REF, TREE_TYPE (type), + t, min_val, NULL_TREE, NULL_TREE)); + natural_type = type; + } + else + natural_type = build_pointer_type (base_type); + + if (TREE_CODE (t) == INDIRECT_REF) + { + if (!type) + type = natural_type; + t = TREE_OPERAND (t, 0); + natural_type = TREE_TYPE (t); + } + else + { + if (DECL_P (t)) + TREE_ADDRESSABLE (t) = 1; + t = fold_build1 (ADDR_EXPR, natural_type, t); + } + + if (type && natural_type != type) + t = convert (type, t); + + return t; +} + + +/* Build an ARRAY_REF with its natural type. */ + +tree +gfc_build_array_ref (tree base, tree offset, tree decl) +{ + tree type = TREE_TYPE (base); + tree tmp; + + gcc_assert (TREE_CODE (type) == ARRAY_TYPE); + type = TREE_TYPE (type); + + if (DECL_P (base)) + TREE_ADDRESSABLE (base) = 1; + + /* Strip NON_LVALUE_EXPR nodes. */ + STRIP_TYPE_NOPS (offset); + + /* If the array reference is to a pointer, whose target contains a + subreference, use the span that is stored with the backend decl + and reference the element with pointer arithmetic. */ + if (decl && (TREE_CODE (decl) == FIELD_DECL + || TREE_CODE (decl) == VAR_DECL + || TREE_CODE (decl) == PARM_DECL) + && GFC_DECL_SUBREF_ARRAY_P (decl) + && !integer_zerop (GFC_DECL_SPAN(decl))) + { + offset = fold_build2 (MULT_EXPR, gfc_array_index_type, + offset, GFC_DECL_SPAN(decl)); + tmp = gfc_build_addr_expr (pvoid_type_node, base); + tmp = fold_build2 (POINTER_PLUS_EXPR, pvoid_type_node, + tmp, fold_convert (sizetype, offset)); + tmp = fold_convert (build_pointer_type (type), tmp); + if (!TYPE_STRING_FLAG (type)) + tmp = build_fold_indirect_ref (tmp); + return tmp; + } + else + /* Otherwise use a straightforward array reference. */ + return build4 (ARRAY_REF, type, base, offset, NULL_TREE, NULL_TREE); +} + + +/* Generate a call to print a runtime error possibly including multiple + arguments and a locus. */ + +tree +gfc_trans_runtime_error (bool error, locus* where, const char* msgid, ...) +{ + va_list ap; + + va_start (ap, msgid); + return gfc_trans_runtime_error_vararg (error, where, msgid, ap); +} + +tree +gfc_trans_runtime_error_vararg (bool error, locus* where, const char* msgid, + va_list ap) +{ + stmtblock_t block; + tree tmp; + tree arg, arg2; + tree *argarray; + tree fntype; + char *message; + const char *p; + int line, nargs, i; + + /* Compute the number of extra arguments from the format string. */ + for (p = msgid, nargs = 0; *p; p++) + if (*p == '%') + { + p++; + if (*p != '%') + nargs++; + } + + /* The code to generate the error. */ + gfc_start_block (&block); + + if (where) + { + line = LOCATION_LINE (where->lb->location); + asprintf (&message, "At line %d of file %s", line, + where->lb->file->filename); + } + else + asprintf (&message, "In file '%s', around line %d", + gfc_source_file, input_line + 1); + + arg = gfc_build_addr_expr (pchar_type_node, + gfc_build_localized_cstring_const (message)); + gfc_free(message); + + asprintf (&message, "%s", _(msgid)); + arg2 = gfc_build_addr_expr (pchar_type_node, + gfc_build_localized_cstring_const (message)); + gfc_free(message); + + /* Build the argument array. */ + argarray = (tree *) alloca (sizeof (tree) * (nargs + 2)); + argarray[0] = arg; + argarray[1] = arg2; + for (i = 0; i < nargs; i++) + argarray[2 + i] = va_arg (ap, tree); + va_end (ap); + + /* Build the function call to runtime_(warning,error)_at; because of the + variable number of arguments, we can't use build_call_expr directly. */ + if (error) + fntype = TREE_TYPE (gfor_fndecl_runtime_error_at); + else + fntype = TREE_TYPE (gfor_fndecl_runtime_warning_at); + + tmp = fold_builtin_call_array (TREE_TYPE (fntype), + fold_build1 (ADDR_EXPR, + build_pointer_type (fntype), + error + ? gfor_fndecl_runtime_error_at + : gfor_fndecl_runtime_warning_at), + nargs + 2, argarray); + gfc_add_expr_to_block (&block, tmp); + + return gfc_finish_block (&block); +} + + +/* Generate a runtime error if COND is true. */ + +void +gfc_trans_runtime_check (bool error, bool once, tree cond, stmtblock_t * pblock, + locus * where, const char * msgid, ...) +{ + va_list ap; + stmtblock_t block; + tree body; + tree tmp; + tree tmpvar = NULL; + + if (integer_zerop (cond)) + return; + + if (once) + { + tmpvar = gfc_create_var (boolean_type_node, "print_warning"); + TREE_STATIC (tmpvar) = 1; + DECL_INITIAL (tmpvar) = boolean_true_node; + gfc_add_expr_to_block (pblock, tmpvar); + } + + gfc_start_block (&block); + + /* The code to generate the error. */ + va_start (ap, msgid); + gfc_add_expr_to_block (&block, + gfc_trans_runtime_error_vararg (error, where, + msgid, ap)); + + if (once) + gfc_add_modify (&block, tmpvar, boolean_false_node); + + body = gfc_finish_block (&block); + + if (integer_onep (cond)) + { + gfc_add_expr_to_block (pblock, body); + } + else + { + /* Tell the compiler that this isn't likely. */ + if (once) + cond = fold_build2 (TRUTH_AND_EXPR, long_integer_type_node, tmpvar, + cond); + else + cond = fold_convert (long_integer_type_node, cond); + + tmp = build_int_cst (long_integer_type_node, 0); + cond = build_call_expr (built_in_decls[BUILT_IN_EXPECT], 2, cond, tmp); + cond = fold_convert (boolean_type_node, cond); + + tmp = build3_v (COND_EXPR, cond, body, build_empty_stmt ()); + gfc_add_expr_to_block (pblock, tmp); + } +} + + +/* Call malloc to allocate size bytes of memory, with special conditions: + + if size < 0, generate a runtime error, + + if size == 0, return a malloced area of size 1, + + if malloc returns NULL, issue a runtime error. */ +tree +gfc_call_malloc (stmtblock_t * block, tree type, tree size) +{ + tree tmp, msg, negative, malloc_result, null_result, res; + stmtblock_t block2; + + size = gfc_evaluate_now (size, block); + + if (TREE_TYPE (size) != TREE_TYPE (size_type_node)) + size = fold_convert (size_type_node, size); + + /* Create a variable to hold the result. */ + res = gfc_create_var (pvoid_type_node, NULL); + + /* size < 0 ? */ + negative = fold_build2 (LT_EXPR, boolean_type_node, size, + build_int_cst (size_type_node, 0)); + msg = gfc_build_addr_expr (pchar_type_node, gfc_build_localized_cstring_const + ("Attempt to allocate a negative amount of memory.")); + tmp = fold_build3 (COND_EXPR, void_type_node, negative, + build_call_expr (gfor_fndecl_runtime_error, 1, msg), + build_empty_stmt ()); + gfc_add_expr_to_block (block, tmp); + + /* Call malloc and check the result. */ + gfc_start_block (&block2); + + size = fold_build2 (MAX_EXPR, size_type_node, size, + build_int_cst (size_type_node, 1)); + + gfc_add_modify (&block2, res, + build_call_expr (built_in_decls[BUILT_IN_MALLOC], 1, + size)); + null_result = fold_build2 (EQ_EXPR, boolean_type_node, res, + build_int_cst (pvoid_type_node, 0)); + msg = gfc_build_addr_expr (pchar_type_node, gfc_build_localized_cstring_const + ("Memory allocation failed")); + tmp = fold_build3 (COND_EXPR, void_type_node, null_result, + build_call_expr (gfor_fndecl_os_error, 1, msg), + build_empty_stmt ()); + gfc_add_expr_to_block (&block2, tmp); + malloc_result = gfc_finish_block (&block2); + + gfc_add_expr_to_block (block, malloc_result); + + if (type != NULL) + res = fold_convert (type, res); + return res; +} + +/* Allocate memory, using an optional status argument. + + This function follows the following pseudo-code: + + void * + allocate (size_t size, integer_type* stat) + { + void *newmem; + + if (stat) + *stat = 0; + + // The only time this can happen is the size wraps around. + if (size < 0) + { + if (stat) + { + *stat = LIBERROR_ALLOCATION; + newmem = NULL; + } + else + runtime_error ("Attempt to allocate negative amount of memory. " + "Possible integer overflow"); + } + else + { + newmem = malloc (MAX (size, 1)); + if (newmem == NULL) + { + if (stat) + *stat = LIBERROR_ALLOCATION; + else + runtime_error ("Out of memory"); + } + } + + return newmem; + } */ +tree +gfc_allocate_with_status (stmtblock_t * block, tree size, tree status) +{ + stmtblock_t alloc_block; + tree res, tmp, error, msg, cond; + tree status_type = status ? TREE_TYPE (TREE_TYPE (status)) : NULL_TREE; + + /* Evaluate size only once, and make sure it has the right type. */ + size = gfc_evaluate_now (size, block); + if (TREE_TYPE (size) != TREE_TYPE (size_type_node)) + size = fold_convert (size_type_node, size); + + /* Create a variable to hold the result. */ + res = gfc_create_var (pvoid_type_node, NULL); + + /* Set the optional status variable to zero. */ + if (status != NULL_TREE && !integer_zerop (status)) + { + tmp = fold_build2 (MODIFY_EXPR, status_type, + fold_build1 (INDIRECT_REF, status_type, status), + build_int_cst (status_type, 0)); + tmp = fold_build3 (COND_EXPR, void_type_node, + fold_build2 (NE_EXPR, boolean_type_node, + status, build_int_cst (status_type, 0)), + tmp, build_empty_stmt ()); + gfc_add_expr_to_block (block, tmp); + } + + /* Generate the block of code handling (size < 0). */ + msg = gfc_build_addr_expr (pchar_type_node, gfc_build_localized_cstring_const + ("Attempt to allocate negative amount of memory. " + "Possible integer overflow")); + error = build_call_expr (gfor_fndecl_runtime_error, 1, msg); + + if (status != NULL_TREE && !integer_zerop (status)) + { + /* Set the status variable if it's present. */ + stmtblock_t set_status_block; + + gfc_start_block (&set_status_block); + gfc_add_modify (&set_status_block, + fold_build1 (INDIRECT_REF, status_type, status), + build_int_cst (status_type, LIBERROR_ALLOCATION)); + gfc_add_modify (&set_status_block, res, + build_int_cst (pvoid_type_node, 0)); + + tmp = fold_build2 (EQ_EXPR, boolean_type_node, status, + build_int_cst (status_type, 0)); + error = fold_build3 (COND_EXPR, void_type_node, tmp, error, + gfc_finish_block (&set_status_block)); + } + + /* The allocation itself. */ + gfc_start_block (&alloc_block); + gfc_add_modify (&alloc_block, res, + build_call_expr (built_in_decls[BUILT_IN_MALLOC], 1, + fold_build2 (MAX_EXPR, size_type_node, + size, + build_int_cst (size_type_node, 1)))); + + msg = gfc_build_addr_expr (pchar_type_node, gfc_build_localized_cstring_const + ("Out of memory")); + tmp = build_call_expr (gfor_fndecl_os_error, 1, msg); + + if (status != NULL_TREE && !integer_zerop (status)) + { + /* Set the status variable if it's present. */ + tree tmp2; + + cond = fold_build2 (EQ_EXPR, boolean_type_node, status, + build_int_cst (status_type, 0)); + tmp2 = fold_build2 (MODIFY_EXPR, status_type, + fold_build1 (INDIRECT_REF, status_type, status), + build_int_cst (status_type, LIBERROR_ALLOCATION)); + tmp = fold_build3 (COND_EXPR, void_type_node, cond, tmp, + tmp2); + } + + tmp = fold_build3 (COND_EXPR, void_type_node, + fold_build2 (EQ_EXPR, boolean_type_node, res, + build_int_cst (pvoid_type_node, 0)), + tmp, build_empty_stmt ()); + gfc_add_expr_to_block (&alloc_block, tmp); + + cond = fold_build2 (LT_EXPR, boolean_type_node, size, + build_int_cst (TREE_TYPE (size), 0)); + tmp = fold_build3 (COND_EXPR, void_type_node, cond, error, + gfc_finish_block (&alloc_block)); + gfc_add_expr_to_block (block, tmp); + + return res; +} + + +/* Generate code for an ALLOCATE statement when the argument is an + allocatable array. If the array is currently allocated, it is an + error to allocate it again. + + This function follows the following pseudo-code: + + void * + allocate_array (void *mem, size_t size, integer_type *stat) + { + if (mem == NULL) + return allocate (size, stat); + else + { + if (stat) + { + free (mem); + mem = allocate (size, stat); + *stat = LIBERROR_ALLOCATION; + return mem; + } + else + runtime_error ("Attempting to allocate already allocated array"); + } + + expr must be set to the original expression being allocated for its locus + and variable name in case a runtime error has to be printed. */ +tree +gfc_allocate_array_with_status (stmtblock_t * block, tree mem, tree size, + tree status, gfc_expr* expr) +{ + stmtblock_t alloc_block; + tree res, tmp, null_mem, alloc, error; + tree type = TREE_TYPE (mem); + + if (TREE_TYPE (size) != TREE_TYPE (size_type_node)) + size = fold_convert (size_type_node, size); + + /* Create a variable to hold the result. */ + res = gfc_create_var (pvoid_type_node, NULL); + null_mem = fold_build2 (EQ_EXPR, boolean_type_node, mem, + build_int_cst (type, 0)); + + /* If mem is NULL, we call gfc_allocate_with_status. */ + gfc_start_block (&alloc_block); + tmp = gfc_allocate_with_status (&alloc_block, size, status); + gfc_add_modify (&alloc_block, res, fold_convert (type, tmp)); + alloc = gfc_finish_block (&alloc_block); + + /* Otherwise, we issue a runtime error or set the status variable. */ + if (expr) + { + tree varname; + + gcc_assert (expr->expr_type == EXPR_VARIABLE && expr->symtree); + varname = gfc_build_cstring_const (expr->symtree->name); + varname = gfc_build_addr_expr (pchar_type_node, varname); + + error = gfc_trans_runtime_error (true, &expr->where, + "Attempting to allocate already" + " allocated array '%s'", + varname); + } + else + error = gfc_trans_runtime_error (true, NULL, + "Attempting to allocate already allocated" + "array"); + + if (status != NULL_TREE && !integer_zerop (status)) + { + tree status_type = TREE_TYPE (TREE_TYPE (status)); + stmtblock_t set_status_block; + + gfc_start_block (&set_status_block); + tmp = build_call_expr (built_in_decls[BUILT_IN_FREE], 1, + fold_convert (pvoid_type_node, mem)); + gfc_add_expr_to_block (&set_status_block, tmp); + + tmp = gfc_allocate_with_status (&set_status_block, size, status); + gfc_add_modify (&set_status_block, res, fold_convert (type, tmp)); + + gfc_add_modify (&set_status_block, + fold_build1 (INDIRECT_REF, status_type, status), + build_int_cst (status_type, LIBERROR_ALLOCATION)); + + tmp = fold_build2 (EQ_EXPR, boolean_type_node, status, + build_int_cst (status_type, 0)); + error = fold_build3 (COND_EXPR, void_type_node, tmp, error, + gfc_finish_block (&set_status_block)); + } + + tmp = fold_build3 (COND_EXPR, void_type_node, null_mem, alloc, error); + gfc_add_expr_to_block (block, tmp); + + return res; +} + + +/* Free a given variable, if it's not NULL. */ +tree +gfc_call_free (tree var) +{ + stmtblock_t block; + tree tmp, cond, call; + + if (TREE_TYPE (var) != TREE_TYPE (pvoid_type_node)) + var = fold_convert (pvoid_type_node, var); + + gfc_start_block (&block); + var = gfc_evaluate_now (var, &block); + cond = fold_build2 (NE_EXPR, boolean_type_node, var, + build_int_cst (pvoid_type_node, 0)); + call = build_call_expr (built_in_decls[BUILT_IN_FREE], 1, var); + tmp = fold_build3 (COND_EXPR, void_type_node, cond, call, + build_empty_stmt ()); + gfc_add_expr_to_block (&block, tmp); + + return gfc_finish_block (&block); +} + + + +/* User-deallocate; we emit the code directly from the front-end, and the + logic is the same as the previous library function: + + void + deallocate (void *pointer, GFC_INTEGER_4 * stat) + { + if (!pointer) + { + if (stat) + *stat = 1; + else + runtime_error ("Attempt to DEALLOCATE unallocated memory."); + } + else + { + free (pointer); + if (stat) + *stat = 0; + } + } + + In this front-end version, status doesn't have to be GFC_INTEGER_4. + Moreover, if CAN_FAIL is true, then we will not emit a runtime error, + even when no status variable is passed to us (this is used for + unconditional deallocation generated by the front-end at end of + each procedure). + + If a runtime-message is possible, `expr' must point to the original + expression being deallocated for its locus and variable name. */ +tree +gfc_deallocate_with_status (tree pointer, tree status, bool can_fail, + gfc_expr* expr) +{ + stmtblock_t null, non_null; + tree cond, tmp, error; + + cond = fold_build2 (EQ_EXPR, boolean_type_node, pointer, + build_int_cst (TREE_TYPE (pointer), 0)); + + /* When POINTER is NULL, we set STATUS to 1 if it's present, otherwise + we emit a runtime error. */ + gfc_start_block (&null); + if (!can_fail) + { + tree varname; + + gcc_assert (expr && expr->expr_type == EXPR_VARIABLE && expr->symtree); + + varname = gfc_build_cstring_const (expr->symtree->name); + varname = gfc_build_addr_expr (pchar_type_node, varname); + + error = gfc_trans_runtime_error (true, &expr->where, + "Attempt to DEALLOCATE unallocated '%s'", + varname); + } + else + error = build_empty_stmt (); + + if (status != NULL_TREE && !integer_zerop (status)) + { + tree status_type = TREE_TYPE (TREE_TYPE (status)); + tree cond2; + + cond2 = fold_build2 (NE_EXPR, boolean_type_node, status, + build_int_cst (TREE_TYPE (status), 0)); + tmp = fold_build2 (MODIFY_EXPR, status_type, + fold_build1 (INDIRECT_REF, status_type, status), + build_int_cst (status_type, 1)); + error = fold_build3 (COND_EXPR, void_type_node, cond2, tmp, error); + } + + gfc_add_expr_to_block (&null, error); + + /* When POINTER is not NULL, we free it. */ + gfc_start_block (&non_null); + tmp = build_call_expr (built_in_decls[BUILT_IN_FREE], 1, + fold_convert (pvoid_type_node, pointer)); + gfc_add_expr_to_block (&non_null, tmp); + + if (status != NULL_TREE && !integer_zerop (status)) + { + /* We set STATUS to zero if it is present. */ + tree status_type = TREE_TYPE (TREE_TYPE (status)); + tree cond2; + + cond2 = fold_build2 (NE_EXPR, boolean_type_node, status, + build_int_cst (TREE_TYPE (status), 0)); + tmp = fold_build2 (MODIFY_EXPR, status_type, + fold_build1 (INDIRECT_REF, status_type, status), + build_int_cst (status_type, 0)); + tmp = fold_build3 (COND_EXPR, void_type_node, cond2, tmp, + build_empty_stmt ()); + gfc_add_expr_to_block (&non_null, tmp); + } + + return fold_build3 (COND_EXPR, void_type_node, cond, + gfc_finish_block (&null), gfc_finish_block (&non_null)); +} + + +/* Reallocate MEM so it has SIZE bytes of data. This behaves like the + following pseudo-code: + +void * +internal_realloc (void *mem, size_t size) +{ + if (size < 0) + runtime_error ("Attempt to allocate a negative amount of memory."); + res = realloc (mem, size); + if (!res && size != 0) + _gfortran_os_error ("Out of memory"); + + if (size == 0) + return NULL; + + return res; +} */ +tree +gfc_call_realloc (stmtblock_t * block, tree mem, tree size) +{ + tree msg, res, negative, nonzero, zero, null_result, tmp; + tree type = TREE_TYPE (mem); + + size = gfc_evaluate_now (size, block); + + if (TREE_TYPE (size) != TREE_TYPE (size_type_node)) + size = fold_convert (size_type_node, size); + + /* Create a variable to hold the result. */ + res = gfc_create_var (type, NULL); + + /* size < 0 ? */ + negative = fold_build2 (LT_EXPR, boolean_type_node, size, + build_int_cst (size_type_node, 0)); + msg = gfc_build_addr_expr (pchar_type_node, gfc_build_localized_cstring_const + ("Attempt to allocate a negative amount of memory.")); + tmp = fold_build3 (COND_EXPR, void_type_node, negative, + build_call_expr (gfor_fndecl_runtime_error, 1, msg), + build_empty_stmt ()); + gfc_add_expr_to_block (block, tmp); + + /* Call realloc and check the result. */ + tmp = build_call_expr (built_in_decls[BUILT_IN_REALLOC], 2, + fold_convert (pvoid_type_node, mem), size); + gfc_add_modify (block, res, fold_convert (type, tmp)); + null_result = fold_build2 (EQ_EXPR, boolean_type_node, res, + build_int_cst (pvoid_type_node, 0)); + nonzero = fold_build2 (NE_EXPR, boolean_type_node, size, + build_int_cst (size_type_node, 0)); + null_result = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, null_result, + nonzero); + msg = gfc_build_addr_expr (pchar_type_node, gfc_build_localized_cstring_const + ("Out of memory")); + tmp = fold_build3 (COND_EXPR, void_type_node, null_result, + build_call_expr (gfor_fndecl_os_error, 1, msg), + build_empty_stmt ()); + gfc_add_expr_to_block (block, tmp); + + /* if (size == 0) then the result is NULL. */ + tmp = fold_build2 (MODIFY_EXPR, type, res, build_int_cst (type, 0)); + zero = fold_build1 (TRUTH_NOT_EXPR, boolean_type_node, nonzero); + tmp = fold_build3 (COND_EXPR, void_type_node, zero, tmp, + build_empty_stmt ()); + gfc_add_expr_to_block (block, tmp); + + return res; +} + +/* Add a statement to a block. */ + +void +gfc_add_expr_to_block (stmtblock_t * block, tree expr) +{ + gcc_assert (block); + + if (expr == NULL_TREE || IS_EMPTY_STMT (expr)) + return; + + if (block->head) + { + if (TREE_CODE (block->head) != STATEMENT_LIST) + { + tree tmp; + + tmp = block->head; + block->head = NULL_TREE; + append_to_statement_list (tmp, &block->head); + } + append_to_statement_list (expr, &block->head); + } + else + /* Don't bother creating a list if we only have a single statement. */ + block->head = expr; +} + + +/* Add a block the end of a block. */ + +void +gfc_add_block_to_block (stmtblock_t * block, stmtblock_t * append) +{ + gcc_assert (append); + gcc_assert (!append->has_scope); + + gfc_add_expr_to_block (block, append->head); + append->head = NULL_TREE; +} + + +/* Get the current locus. The structure may not be complete, and should + only be used with gfc_set_backend_locus. */ + +void +gfc_get_backend_locus (locus * loc) +{ + loc->lb = XCNEW (gfc_linebuf); + loc->lb->location = input_location; + loc->lb->file = gfc_current_backend_file; +} + + +/* Set the current locus. */ + +void +gfc_set_backend_locus (locus * loc) +{ + gfc_current_backend_file = loc->lb->file; + input_location = loc->lb->location; +} + + +/* Translate an executable statement. */ + +tree +gfc_trans_code (gfc_code * code) +{ + stmtblock_t block; + tree res; + + if (!code) + return build_empty_stmt (); + + gfc_start_block (&block); + + /* Translate statements one by one into GENERIC trees until we reach + the end of this gfc_code branch. */ + for (; code; code = code->next) + { + if (code->here != 0) + { + res = gfc_trans_label_here (code); + gfc_add_expr_to_block (&block, res); + } + + switch (code->op) + { + case EXEC_NOP: + res = NULL_TREE; + break; + + case EXEC_ASSIGN: + res = gfc_trans_assign (code); + break; + + case EXEC_LABEL_ASSIGN: + res = gfc_trans_label_assign (code); + break; + + case EXEC_POINTER_ASSIGN: + res = gfc_trans_pointer_assign (code); + break; + + case EXEC_INIT_ASSIGN: + res = gfc_trans_init_assign (code); + break; + + case EXEC_CONTINUE: + res = NULL_TREE; + break; + + case EXEC_CYCLE: + res = gfc_trans_cycle (code); + break; + + case EXEC_EXIT: + res = gfc_trans_exit (code); + break; + + case EXEC_GOTO: + res = gfc_trans_goto (code); + break; + + case EXEC_ENTRY: + res = gfc_trans_entry (code); + break; + + case EXEC_PAUSE: + res = gfc_trans_pause (code); + break; + + case EXEC_STOP: + res = gfc_trans_stop (code); + break; + + case EXEC_CALL: + /* For MVBITS we've got the special exception that we need a + dependency check, too. */ + { + bool is_mvbits = false; + if (code->resolved_isym + && code->resolved_isym->id == GFC_ISYM_MVBITS) + is_mvbits = true; + res = gfc_trans_call (code, is_mvbits); + } + break; + + case EXEC_ASSIGN_CALL: + res = gfc_trans_call (code, true); + break; + + case EXEC_RETURN: + res = gfc_trans_return (code); + break; + + case EXEC_IF: + res = gfc_trans_if (code); + break; + + case EXEC_ARITHMETIC_IF: + res = gfc_trans_arithmetic_if (code); + break; + + case EXEC_DO: + res = gfc_trans_do (code); + break; + + case EXEC_DO_WHILE: + res = gfc_trans_do_while (code); + break; + + case EXEC_SELECT: + res = gfc_trans_select (code); + break; + + case EXEC_FLUSH: + res = gfc_trans_flush (code); + break; + + case EXEC_FORALL: + res = gfc_trans_forall (code); + break; + + case EXEC_WHERE: + res = gfc_trans_where (code); + break; + + case EXEC_ALLOCATE: + res = gfc_trans_allocate (code); + break; + + case EXEC_DEALLOCATE: + res = gfc_trans_deallocate (code); + break; + + case EXEC_OPEN: + res = gfc_trans_open (code); + break; + + case EXEC_CLOSE: + res = gfc_trans_close (code); + break; + + case EXEC_READ: + res = gfc_trans_read (code); + break; + + case EXEC_WRITE: + res = gfc_trans_write (code); + break; + + case EXEC_IOLENGTH: + res = gfc_trans_iolength (code); + break; + + case EXEC_BACKSPACE: + res = gfc_trans_backspace (code); + break; + + case EXEC_ENDFILE: + res = gfc_trans_endfile (code); + break; + + case EXEC_INQUIRE: + res = gfc_trans_inquire (code); + break; + + case EXEC_WAIT: + res = gfc_trans_wait (code); + break; + + case EXEC_REWIND: + res = gfc_trans_rewind (code); + break; + + case EXEC_TRANSFER: + res = gfc_trans_transfer (code); + break; + + case EXEC_DT_END: + res = gfc_trans_dt_end (code); + break; + + case EXEC_OMP_ATOMIC: + case EXEC_OMP_BARRIER: + case EXEC_OMP_CRITICAL: + case EXEC_OMP_DO: + case EXEC_OMP_FLUSH: + case EXEC_OMP_MASTER: + case EXEC_OMP_ORDERED: + case EXEC_OMP_PARALLEL: + case EXEC_OMP_PARALLEL_DO: + case EXEC_OMP_PARALLEL_SECTIONS: + case EXEC_OMP_PARALLEL_WORKSHARE: + case EXEC_OMP_SECTIONS: + case EXEC_OMP_SINGLE: + case EXEC_OMP_TASK: + case EXEC_OMP_TASKWAIT: + case EXEC_OMP_WORKSHARE: + res = gfc_trans_omp_directive (code); + break; + + default: + internal_error ("gfc_trans_code(): Bad statement code"); + } + + gfc_set_backend_locus (&code->loc); + + if (res != NULL_TREE && ! IS_EMPTY_STMT (res)) + { + if (TREE_CODE (res) == STATEMENT_LIST) + tree_annotate_all_with_location (&res, input_location); + else + SET_EXPR_LOCATION (res, input_location); + + /* Add the new statement to the block. */ + gfc_add_expr_to_block (&block, res); + } + } + + /* Return the finished block. */ + return gfc_finish_block (&block); +} + + +/* This function is called after a complete program unit has been parsed + and resolved. */ + +void +gfc_generate_code (gfc_namespace * ns) +{ + if (ns->is_block_data) + { + gfc_generate_block_data (ns); + return; + } + + gfc_generate_function_code (ns); +} + + +/* This function is called after a complete module has been parsed + and resolved. */ + +void +gfc_generate_module_code (gfc_namespace * ns) +{ + gfc_namespace *n; + struct module_htab_entry *entry; + + gcc_assert (ns->proc_name->backend_decl == NULL); + ns->proc_name->backend_decl + = build_decl (NAMESPACE_DECL, get_identifier (ns->proc_name->name), + void_type_node); + gfc_set_decl_location (ns->proc_name->backend_decl, + &ns->proc_name->declared_at); + entry = gfc_find_module (ns->proc_name->name); + if (entry->namespace_decl) + /* Buggy sourcecode, using a module before defining it? */ + htab_empty (entry->decls); + entry->namespace_decl = ns->proc_name->backend_decl; + + gfc_generate_module_vars (ns); + + /* We need to generate all module function prototypes first, to allow + sibling calls. */ + for (n = ns->contained; n; n = n->sibling) + { + gfc_entry_list *el; + + if (!n->proc_name) + continue; + + gfc_create_function_decl (n); + gcc_assert (DECL_CONTEXT (n->proc_name->backend_decl) == NULL_TREE); + DECL_CONTEXT (n->proc_name->backend_decl) = ns->proc_name->backend_decl; + gfc_module_add_decl (entry, n->proc_name->backend_decl); + for (el = ns->entries; el; el = el->next) + { + gcc_assert (DECL_CONTEXT (el->sym->backend_decl) == NULL_TREE); + DECL_CONTEXT (el->sym->backend_decl) = ns->proc_name->backend_decl; + gfc_module_add_decl (entry, el->sym->backend_decl); + } + } + + for (n = ns->contained; n; n = n->sibling) + { + if (!n->proc_name) + continue; + + gfc_generate_function_code (n); + } +} + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans.h new file mode 100644 index 0000000000..aa217751a3 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans.h @@ -0,0 +1,770 @@ +/* Header for code translation functions + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software + Foundation, Inc. + Contributed by Paul Brook + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +#ifndef GFC_TRANS_H +#define GFC_TRANS_H + +/* Mangled symbols take the form __module__name. */ +#define GFC_MAX_MANGLED_SYMBOL_LEN (GFC_MAX_SYMBOL_LEN*2+4) + +/* Struct for holding a block of statements. It should be treated as an + opaque entity and not modified directly. This allows us to change the + underlying representation of statement lists. */ +typedef struct +{ + tree head; + unsigned int has_scope:1; +} +stmtblock_t; + +/* a simplified expression */ +typedef struct gfc_se +{ + /* Code blocks to be executed before and after using the value. */ + stmtblock_t pre; + stmtblock_t post; + + /* the result of the expression */ + tree expr; + + /* The length of a character string value. */ + tree string_length; + + /* If set gfc_conv_variable will return an expression for the array + descriptor. When set, want_pointer should also be set. + If not set scalarizing variables will be substituted. */ + unsigned descriptor_only:1; + + /* When this is set gfc_conv_expr returns the address of a variable. Only + applies to EXPR_VARIABLE nodes. + Also used by gfc_conv_array_parameter. When set this indicates a pointer + to the descriptor should be returned, rather than the descriptor itself. + */ + unsigned want_pointer:1; + + /* An array function call returning without a temporary. Also used for array + pointer assignments. */ + unsigned direct_byref:1; + + /* Ignore absent optional arguments. Used for some intrinsics. */ + unsigned ignore_optional:1; + + /* When this is set the data and offset fields of the returned descriptor + are NULL. Used by intrinsic size. */ + unsigned data_not_needed:1; + + /* If set, gfc_conv_function_call does not put byref calls into se->pre. */ + unsigned no_function_call:1; + + /* Scalarization parameters. */ + struct gfc_se *parent; + struct gfc_ss *ss; + struct gfc_loopinfo *loop; +} +gfc_se; + + +/* Scalarization State chain. Created by walking an expression tree before + creating the scalarization loops. Then passed as part of a gfc_se structure + to translate the expression inside the loop. Note that these chains are + terminated by gfc_se_terminator, not NULL. A NULL pointer in a gfc_se + indicates to gfc_conv_* that this is a scalar expression. + Note that some member arrays correspond to scalarizer rank and others + are the variable rank. */ + +typedef struct gfc_ss_info +{ + int dimen; + /* The ref that holds information on this section. */ + gfc_ref *ref; + /* The descriptor of this array. */ + tree descriptor; + /* holds the pointer to the data array. */ + tree data; + /* To move some of the array index calculation out of the innermost loop. */ + tree offset; + tree saved_offset; + tree stride0; + /* Holds the SS for a subscript. Indexed by actual dimension. */ + struct gfc_ss *subscript[GFC_MAX_DIMENSIONS]; + + /* stride and delta are used to access this inside a scalarization loop. + start is used in the calculation of these. Indexed by scalarizer + dimension. */ + tree start[GFC_MAX_DIMENSIONS]; + tree end[GFC_MAX_DIMENSIONS]; + tree stride[GFC_MAX_DIMENSIONS]; + tree delta[GFC_MAX_DIMENSIONS]; + + /* Translation from scalarizer dimensions to actual dimensions. + actual = dim[scalarizer] */ + int dim[GFC_MAX_DIMENSIONS]; +} +gfc_ss_info; + +typedef enum +{ + /* A scalar value. This will be evaluated before entering the + scalarization loop. */ + GFC_SS_SCALAR, + + /* Like GFC_SS_SCALAR except it evaluates a pointer to the expression. + Used for elemental function parameters. */ + GFC_SS_REFERENCE, + + /* An array section. Scalarization indices will be substituted during + expression translation. */ + GFC_SS_SECTION, + + /* A non-elemental function call returning an array. The call is executed + before entering the scalarization loop, storing the result in a + temporary. This temporary is then used inside the scalarization loop. + Simple assignments, e.g. a(:) = fn(), are handled without a temporary + as a special case. */ + GFC_SS_FUNCTION, + + /* An array constructor. The current implementation is sub-optimal in + many cases. It allocated a temporary, assigns the values to it, then + uses this temporary inside the scalarization loop. */ + GFC_SS_CONSTRUCTOR, + + /* A vector subscript. The vector's descriptor is cached in the + "descriptor" field of the associated gfc_ss_info. */ + GFC_SS_VECTOR, + + /* A temporary array allocated by the scalarizer. Its rank can be less + than that of the assignment expression. */ + GFC_SS_TEMP, + + /* An intrinsic function call. Many intrinsic functions which map directly + to library calls are created as GFC_SS_FUNCTION nodes. */ + GFC_SS_INTRINSIC, + + /* A component of a derived type. */ + GFC_SS_COMPONENT +} +gfc_ss_type; + +/* SS structures can only belong to a single loopinfo. They must be added + otherwise they will not get freed. */ +typedef struct gfc_ss +{ + gfc_ss_type type; + gfc_expr *expr; + mpz_t *shape; + tree string_length; + union + { + /* If type is GFC_SS_SCALAR or GFC_SS_REFERENCE. */ + struct + { + tree expr; + } + scalar; + + /* GFC_SS_TEMP. */ + struct + { + /* The rank of the temporary. May be less than the rank of the + assigned expression. */ + int dimen; + tree type; + } + temp; + /* All other types. */ + gfc_ss_info info; + } + data; + + /* All the SS in a loop and linked through loop_chain. The SS for an + expression are linked by the next pointer. */ + struct gfc_ss *loop_chain; + struct gfc_ss *next; + + /* This is used by assignments requiring temporaries. The bits specify which + loops the terms appear in. This will be 1 for the RHS expressions, + 2 for the LHS expressions, and 3(=1|2) for the temporary. The bit + 'where' suppresses precalculation of scalars in WHERE assignments. */ + unsigned useflags:2, where:1; +} +gfc_ss; +#define gfc_get_ss() XCNEW (gfc_ss) + +/* The contents of this aren't actually used. A NULL SS chain indicates a + scalar expression, so this pointer is used to terminate SS chains. */ +extern gfc_ss * const gfc_ss_terminator; + +/* Holds information about an expression while it is being scalarized. */ +typedef struct gfc_loopinfo +{ + stmtblock_t pre; + stmtblock_t post; + + int dimen; + + /* All the SS involved with this loop. */ + gfc_ss *ss; + /* The SS describing the temporary used in an assignment. */ + gfc_ss *temp_ss; + + /* The scalarization loop index variables. */ + tree loopvar[GFC_MAX_DIMENSIONS]; + + /* The bounds of the scalarization loops. */ + tree from[GFC_MAX_DIMENSIONS]; + tree to[GFC_MAX_DIMENSIONS]; + gfc_ss *specloop[GFC_MAX_DIMENSIONS]; + + /* The code member contains the code for the body of the next outer loop. */ + stmtblock_t code[GFC_MAX_DIMENSIONS]; + + /* Order in which the dimensions should be looped, innermost first. */ + int order[GFC_MAX_DIMENSIONS]; + + /* The number of dimensions for which a temporary is used. */ + int temp_dim; + + /* If set we don't need the loop variables. */ + unsigned array_parameter:1; +} +gfc_loopinfo; + + +/* Information about a symbol that has been shadowed by a temporary. */ +typedef struct +{ + symbol_attribute attr; + tree decl; +} +gfc_saved_var; + + +/* Advance the SS chain to the next term. */ +void gfc_advance_se_ss_chain (gfc_se *); + +/* Call this to initialize a gfc_se structure before use + first parameter is structure to initialize, second is + parent to get scalarization data from, or NULL. */ +void gfc_init_se (gfc_se *, gfc_se *); + +/* Create an artificial variable decl and add it to the current scope. */ +tree gfc_create_var (tree, const char *); +/* Like above but doesn't add it to the current scope. */ +tree gfc_create_var_np (tree, const char *); + +/* Store the result of an expression in a temp variable so it can be used + repeatedly even if the original changes */ +void gfc_make_safe_expr (gfc_se * se); + +/* Makes sure se is suitable for passing as a function string parameter. */ +void gfc_conv_string_parameter (gfc_se * se); + +/* Compare two strings. */ +tree gfc_build_compare_string (tree, tree, tree, tree, int); + +/* Add an item to the end of TREE_LIST. */ +tree gfc_chainon_list (tree, tree); + +/* When using the gfc_conv_* make sure you understand what they do, i.e. + when a POST chain may be created, and what the returned expression may be + used for. Note that character strings have special handling. This + should not be a problem as most statements/operations only deal with + numeric/logical types. See the implementations in trans-expr.c + for details of the individual functions. */ + +void gfc_conv_expr (gfc_se * se, gfc_expr * expr); +void gfc_conv_expr_val (gfc_se * se, gfc_expr * expr); +void gfc_conv_expr_lhs (gfc_se * se, gfc_expr * expr); +void gfc_conv_expr_reference (gfc_se * se, gfc_expr *); +void gfc_conv_expr_type (gfc_se * se, gfc_expr *, tree); + +/* trans-expr.c */ +void gfc_conv_scalar_char_value (gfc_symbol *sym, gfc_se *se, gfc_expr **expr); + +/* Find the decl containing the auxiliary variables for assigned variables. */ +void gfc_conv_label_variable (gfc_se * se, gfc_expr * expr); +/* If the value is not constant, Create a temporary and copy the value. */ +tree gfc_evaluate_now (tree, stmtblock_t *); + +/* Intrinsic function handling. */ +void gfc_conv_intrinsic_function (gfc_se *, gfc_expr *); + +/* Does an intrinsic map directly to an external library call. */ +int gfc_is_intrinsic_libcall (gfc_expr *); + +/* Used to call the elemental subroutines used in operator assignments. */ +tree gfc_conv_operator_assign (gfc_se *, gfc_se *, gfc_symbol *); + +/* Also used to CALL subroutines. */ +int gfc_conv_function_call (gfc_se *, gfc_symbol *, gfc_actual_arglist *, + tree); + +void gfc_conv_subref_array_arg (gfc_se *, gfc_expr *, int, sym_intent); + +/* gfc_trans_* shouldn't call push/poplevel, use gfc_push/pop_scope */ + +/* Generate code for a scalar assignment. */ +tree gfc_trans_scalar_assign (gfc_se *, gfc_se *, gfc_typespec, bool, bool); + +/* Translate COMMON blocks. */ +void gfc_trans_common (gfc_namespace *); + +/* Translate a derived type constructor. */ +void gfc_conv_structure (gfc_se *, gfc_expr *, int); + +/* Return an expression which determines if a dummy parameter is present. */ +tree gfc_conv_expr_present (gfc_symbol *); +/* Convert a missing, dummy argument into a null or zero. */ +void gfc_conv_missing_dummy (gfc_se *, gfc_expr *, gfc_typespec, int); + +/* Generate code to allocate a string temporary. */ +tree gfc_conv_string_tmp (gfc_se *, tree, tree); +/* Get the string length variable belonging to an expression. */ +tree gfc_get_expr_charlen (gfc_expr *); +/* Initialize a string length variable. */ +void gfc_conv_string_length (gfc_charlen *, gfc_expr *, stmtblock_t *); +/* Ensure type sizes can be gimplified. */ +void gfc_trans_vla_type_sizes (gfc_symbol *, stmtblock_t *); + +/* Add an expression to the end of a block. */ +void gfc_add_expr_to_block (stmtblock_t *, tree); +/* Add a block to the end of a block. */ +void gfc_add_block_to_block (stmtblock_t *, stmtblock_t *); +/* Add a MODIFY_EXPR to a block. */ +void gfc_add_modify (stmtblock_t *, tree, tree); + +/* Initialize a statement block. */ +void gfc_init_block (stmtblock_t *); +/* Start a new statement block. Like gfc_init_block but also starts a new + variable scope. */ +void gfc_start_block (stmtblock_t *); +/* Finish a statement block. Also closes the scope if the block was created + with gfc_start_block. */ +tree gfc_finish_block (stmtblock_t *); +/* Merge the scope of a block with its parent. */ +void gfc_merge_block_scope (stmtblock_t * block); + +/* Return the backend label decl. */ +tree gfc_get_label_decl (gfc_st_label *); + +/* Return the decl for an external function. */ +tree gfc_get_extern_function_decl (gfc_symbol *); + +/* Return the decl for a function. */ +tree gfc_get_function_decl (gfc_symbol *); + +/* Build an ADDR_EXPR. */ +tree gfc_build_addr_expr (tree, tree); + +/* Build an ARRAY_REF. */ +tree gfc_build_array_ref (tree, tree, tree); + +/* Creates a label. Decl is artificial if label_id == NULL_TREE. */ +tree gfc_build_label_decl (tree); + +/* Return the decl used to hold the function return value. + Do not use if the function has an explicit result variable. */ +tree gfc_get_fake_result_decl (gfc_symbol *, int); + +/* Get the return label for the current function. */ +tree gfc_get_return_label (void); + +/* Add a decl to the binding level for the current function. */ +void gfc_add_decl_to_function (tree); + +/* Make prototypes for runtime library functions. */ +void gfc_build_builtin_function_decls (void); + +/* Set the backend source location of a decl. */ +void gfc_set_decl_location (tree, locus *); + +/* Return the variable decl for a symbol. */ +tree gfc_get_symbol_decl (gfc_symbol *); + +/* Build a static initializer. */ +tree gfc_conv_initializer (gfc_expr *, gfc_typespec *, tree, bool, bool); + +/* Assign a default initializer to a derived type. */ +tree gfc_init_default_dt (gfc_symbol *, tree); + +/* Substitute a temporary variable in place of the real one. */ +void gfc_shadow_sym (gfc_symbol *, tree, gfc_saved_var *); + +/* Restore the original variable. */ +void gfc_restore_sym (gfc_symbol *, gfc_saved_var *); + +/* Returns true if a variable of specified size should go on the stack. */ +int gfc_can_put_var_on_stack (tree); + +/* Allocate the lang-specific part of a decl node. */ +void gfc_allocate_lang_decl (tree); + +/* Advance along a TREE_CHAIN. */ +tree gfc_advance_chain (tree, int); + +/* Create a decl for a function. */ +void gfc_create_function_decl (gfc_namespace *); +/* Generate the code for a function. */ +void gfc_generate_function_code (gfc_namespace *); +/* Output a BLOCK DATA program unit. */ +void gfc_generate_block_data (gfc_namespace *); +/* Output a decl for a module variable. */ +void gfc_generate_module_vars (gfc_namespace *); + +struct module_htab_entry GTY(()) +{ + const char *name; + tree namespace_decl; + htab_t GTY ((param_is (union tree_node))) decls; +}; + +struct module_htab_entry *gfc_find_module (const char *); +void gfc_module_add_decl (struct module_htab_entry *, tree); + +/* Get and set the current location. */ +void gfc_set_backend_locus (locus *); +void gfc_get_backend_locus (locus *); + +/* Handle static constructor functions. */ +extern GTY(()) tree gfc_static_ctors; +void gfc_generate_constructors (void); + +/* Get the string length of an array constructor. */ +bool get_array_ctor_strlen (stmtblock_t *, gfc_constructor *, tree *); + +/* Generate a runtime error call. */ +tree gfc_trans_runtime_error (bool, locus*, const char*, ...); +tree gfc_trans_runtime_error_vararg (bool, locus*, const char*, va_list); + +/* Generate a runtime warning/error check. */ +void gfc_trans_runtime_check (bool, bool, tree, stmtblock_t *, locus *, + const char *, ...); + +/* Generate a runtime check for same string length. */ +void gfc_trans_same_strlen_check (const char*, locus*, tree, tree, + stmtblock_t*); + +/* Generate a call to free() after checking that its arg is non-NULL. */ +tree gfc_call_free (tree); + +/* Allocate memory after performing a few checks. */ +tree gfc_call_malloc (stmtblock_t *, tree, tree); + +/* Build a memcpy call. */ +tree gfc_build_memcpy_call (tree, tree, tree); + +/* Allocate memory for arrays, with optional status variable. */ +tree gfc_allocate_array_with_status (stmtblock_t*, tree, tree, tree, gfc_expr*); + +/* Allocate memory, with optional status variable. */ +tree gfc_allocate_with_status (stmtblock_t *, tree, tree); + +/* Generate code to deallocate an array. */ +tree gfc_deallocate_with_status (tree, tree, bool, gfc_expr*); + +/* Generate code to call realloc(). */ +tree gfc_call_realloc (stmtblock_t *, tree, tree); + +/* Generate code for an assignment, includes scalarization. */ +tree gfc_trans_assignment (gfc_expr *, gfc_expr *, bool); + +/* Generate code for a pointer assignment. */ +tree gfc_trans_pointer_assignment (gfc_expr *, gfc_expr *); + +/* Initialize function decls for library functions. */ +void gfc_build_intrinsic_lib_fndecls (void); +/* Create function decls for IO library functions. */ +void gfc_trans_io_runtime_check (tree, tree, int, const char *, stmtblock_t *); +void gfc_build_io_library_fndecls (void); +/* Build a function decl for a library function. */ +tree gfc_build_library_function_decl (tree, tree, int, ...); + +/* somewhere! */ +tree pushdecl (tree); +tree pushdecl_top_level (tree); +void pushlevel (int); +tree poplevel (int, int, int); +tree getdecls (void); +tree gfc_truthvalue_conversion (tree); +tree gfc_builtin_function (tree); +struct array_descr_info; +bool gfc_get_array_descr_info (const_tree, struct array_descr_info *); + +/* In trans-openmp.c */ +bool gfc_omp_privatize_by_reference (const_tree); +enum omp_clause_default_kind gfc_omp_predetermined_sharing (tree); +tree gfc_omp_clause_default_ctor (tree, tree, tree); +tree gfc_omp_clause_copy_ctor (tree, tree, tree); +tree gfc_omp_clause_assign_op (tree, tree, tree); +tree gfc_omp_clause_dtor (tree, tree); +bool gfc_omp_disregard_value_expr (tree, bool); +bool gfc_omp_private_debug_clause (tree, bool); +bool gfc_omp_private_outer_ref (tree); +struct gimplify_omp_ctx; +void gfc_omp_firstprivatize_type_sizes (struct gimplify_omp_ctx *, tree); + +/* Runtime library function decls. */ +extern GTY(()) tree gfor_fndecl_pause_numeric; +extern GTY(()) tree gfor_fndecl_pause_string; +extern GTY(()) tree gfor_fndecl_stop_numeric; +extern GTY(()) tree gfor_fndecl_stop_string; +extern GTY(()) tree gfor_fndecl_runtime_error; +extern GTY(()) tree gfor_fndecl_runtime_error_at; +extern GTY(()) tree gfor_fndecl_runtime_warning_at; +extern GTY(()) tree gfor_fndecl_os_error; +extern GTY(()) tree gfor_fndecl_generate_error; +extern GTY(()) tree gfor_fndecl_set_fpe; +extern GTY(()) tree gfor_fndecl_set_options; +extern GTY(()) tree gfor_fndecl_ttynam; +extern GTY(()) tree gfor_fndecl_ctime; +extern GTY(()) tree gfor_fndecl_fdate; +extern GTY(()) tree gfor_fndecl_in_pack; +extern GTY(()) tree gfor_fndecl_in_unpack; +extern GTY(()) tree gfor_fndecl_associated; + +/* Math functions. Many other math functions are handled in + trans-intrinsic.c. */ + +typedef struct gfc_powdecl_list GTY(()) +{ + tree integer; + tree real; + tree cmplx; +} +gfc_powdecl_list; + +extern GTY(()) gfc_powdecl_list gfor_fndecl_math_powi[4][3]; +extern GTY(()) tree gfor_fndecl_math_ishftc4; +extern GTY(()) tree gfor_fndecl_math_ishftc8; +extern GTY(()) tree gfor_fndecl_math_ishftc16; + +/* BLAS functions. */ +extern GTY(()) tree gfor_fndecl_sgemm; +extern GTY(()) tree gfor_fndecl_dgemm; +extern GTY(()) tree gfor_fndecl_cgemm; +extern GTY(()) tree gfor_fndecl_zgemm; + +/* String functions. */ +extern GTY(()) tree gfor_fndecl_compare_string; +extern GTY(()) tree gfor_fndecl_concat_string; +extern GTY(()) tree gfor_fndecl_string_len_trim; +extern GTY(()) tree gfor_fndecl_string_index; +extern GTY(()) tree gfor_fndecl_string_scan; +extern GTY(()) tree gfor_fndecl_string_verify; +extern GTY(()) tree gfor_fndecl_string_trim; +extern GTY(()) tree gfor_fndecl_string_minmax; +extern GTY(()) tree gfor_fndecl_adjustl; +extern GTY(()) tree gfor_fndecl_adjustr; +extern GTY(()) tree gfor_fndecl_select_string; +extern GTY(()) tree gfor_fndecl_compare_string_char4; +extern GTY(()) tree gfor_fndecl_concat_string_char4; +extern GTY(()) tree gfor_fndecl_string_len_trim_char4; +extern GTY(()) tree gfor_fndecl_string_index_char4; +extern GTY(()) tree gfor_fndecl_string_scan_char4; +extern GTY(()) tree gfor_fndecl_string_verify_char4; +extern GTY(()) tree gfor_fndecl_string_trim_char4; +extern GTY(()) tree gfor_fndecl_string_minmax_char4; +extern GTY(()) tree gfor_fndecl_adjustl_char4; +extern GTY(()) tree gfor_fndecl_adjustr_char4; +extern GTY(()) tree gfor_fndecl_select_string_char4; + +/* Conversion between character kinds. */ +extern GTY(()) tree gfor_fndecl_convert_char1_to_char4; +extern GTY(()) tree gfor_fndecl_convert_char4_to_char1; + +/* Other misc. runtime library functions. */ +extern GTY(()) tree gfor_fndecl_size0; +extern GTY(()) tree gfor_fndecl_size1; +extern GTY(()) tree gfor_fndecl_iargc; + +/* Implemented in Fortran. */ +extern GTY(()) tree gfor_fndecl_sc_kind; +extern GTY(()) tree gfor_fndecl_si_kind; +extern GTY(()) tree gfor_fndecl_sr_kind; + + +/* True if node is an integer constant. */ +#define INTEGER_CST_P(node) (TREE_CODE(node) == INTEGER_CST) + +/* G95-specific declaration information. */ + +enum gfc_array_kind +{ + GFC_ARRAY_UNKNOWN, + GFC_ARRAY_ASSUMED_SHAPE, + GFC_ARRAY_ALLOCATABLE, + GFC_ARRAY_POINTER +}; + +/* Array types only. */ +struct lang_type GTY(()) +{ + int rank; + enum gfc_array_kind akind; + tree lbound[GFC_MAX_DIMENSIONS]; + tree ubound[GFC_MAX_DIMENSIONS]; + tree stride[GFC_MAX_DIMENSIONS]; + tree size; + tree offset; + tree dtype; + tree dataptr_type; + tree span; +}; + +struct lang_decl GTY(()) +{ + /* Dummy variables. */ + tree saved_descriptor; + /* Assigned integer nodes. Stringlength is the IO format string's length. + Addr is the address of the string or the target label. Stringlength is + initialized to -2 and assigned to -1 when addr is assigned to the + address of target label. */ + tree stringlen; + tree addr; + tree span; +}; + + +#define GFC_DECL_ASSIGN_ADDR(node) DECL_LANG_SPECIFIC(node)->addr +#define GFC_DECL_STRING_LEN(node) DECL_LANG_SPECIFIC(node)->stringlen +#define GFC_DECL_SPAN(node) DECL_LANG_SPECIFIC(node)->span +#define GFC_DECL_SAVED_DESCRIPTOR(node) \ + (DECL_LANG_SPECIFIC(node)->saved_descriptor) +#define GFC_DECL_PACKED_ARRAY(node) DECL_LANG_FLAG_0(node) +#define GFC_DECL_PARTIAL_PACKED_ARRAY(node) DECL_LANG_FLAG_1(node) +#define GFC_DECL_ASSIGN(node) DECL_LANG_FLAG_2(node) +#define GFC_DECL_COMMON_OR_EQUIV(node) DECL_LANG_FLAG_3(node) +#define GFC_DECL_CRAY_POINTEE(node) DECL_LANG_FLAG_4(node) +#define GFC_DECL_RESULT(node) DECL_LANG_FLAG_5(node) +#define GFC_DECL_SUBREF_ARRAY_P(node) DECL_LANG_FLAG_6(node) + +/* An array descriptor. */ +#define GFC_DESCRIPTOR_TYPE_P(node) TYPE_LANG_FLAG_1(node) +/* An array without a descriptor. */ +#define GFC_ARRAY_TYPE_P(node) TYPE_LANG_FLAG_2(node) +/* Fortran POINTER type. */ +#define GFC_POINTER_TYPE_P(node) TYPE_LANG_FLAG_3(node) +/* The GFC_TYPE_ARRAY_* members are present in both descriptor and + descriptorless array types. */ +#define GFC_TYPE_ARRAY_LBOUND(node, dim) \ + (TYPE_LANG_SPECIFIC(node)->lbound[dim]) +#define GFC_TYPE_ARRAY_UBOUND(node, dim) \ + (TYPE_LANG_SPECIFIC(node)->ubound[dim]) +#define GFC_TYPE_ARRAY_STRIDE(node, dim) \ + (TYPE_LANG_SPECIFIC(node)->stride[dim]) +#define GFC_TYPE_ARRAY_RANK(node) (TYPE_LANG_SPECIFIC(node)->rank) +#define GFC_TYPE_ARRAY_SIZE(node) (TYPE_LANG_SPECIFIC(node)->size) +#define GFC_TYPE_ARRAY_OFFSET(node) (TYPE_LANG_SPECIFIC(node)->offset) +#define GFC_TYPE_ARRAY_AKIND(node) (TYPE_LANG_SPECIFIC(node)->akind) +/* Code should use gfc_get_dtype instead of accessing this directly. It may + not be known when the type is created. */ +#define GFC_TYPE_ARRAY_DTYPE(node) (TYPE_LANG_SPECIFIC(node)->dtype) +#define GFC_TYPE_ARRAY_DATAPTR_TYPE(node) \ + (TYPE_LANG_SPECIFIC(node)->dataptr_type) +#define GFC_TYPE_ARRAY_SPAN(node) (TYPE_LANG_SPECIFIC(node)->span) + +/* Build an expression with void type. */ +#define build1_v(code, arg) fold_build1(code, void_type_node, arg) +#define build2_v(code, arg1, arg2) fold_build2(code, void_type_node, \ + arg1, arg2) +#define build3_v(code, arg1, arg2, arg3) fold_build3(code, void_type_node, \ + arg1, arg2, arg3) +#define build4_v(code, arg1, arg2, arg3, arg4) build4(code, void_type_node, \ + arg1, arg2, arg3, arg4) + +/* This group of functions allows a caller to evaluate an expression from + the callee's interface. It establishes a mapping between the interface's + dummy arguments and the caller's actual arguments, then applies that + mapping to a given gfc_expr. + + You can initialize a mapping structure like so: + + gfc_interface_mapping mapping; + ... + gfc_init_interface_mapping (&mapping); + + You should then evaluate each actual argument into a temporary + gfc_se structure, here called "se", and map the result to the + dummy argument's symbol, here called "sym": + + gfc_add_interface_mapping (&mapping, sym, &se); + + After adding all mappings, you should call: + + gfc_finish_interface_mapping (&mapping, pre, post); + + where "pre" and "post" are statement blocks for initialization + and finalization code respectively. You can then evaluate an + interface expression "expr" as follows: + + gfc_apply_interface_mapping (&mapping, se, expr); + + Once you've evaluated all expressions, you should free + the mapping structure with: + + gfc_free_interface_mapping (&mapping); */ + + +/* This structure represents a mapping from OLD to NEW, where OLD is a + dummy argument symbol and NEW is a symbol that represents the value + of an actual argument. Mappings are linked together using NEXT + (in no particular order). */ +typedef struct gfc_interface_sym_mapping +{ + struct gfc_interface_sym_mapping *next; + gfc_symbol *old; + gfc_symtree *new_sym; + gfc_expr *expr; +} +gfc_interface_sym_mapping; + + +/* This structure is used by callers to evaluate an expression from + a callee's interface. */ +typedef struct gfc_interface_mapping +{ + /* Maps the interface's dummy arguments to the values that the caller + is passing. The whole list is owned by this gfc_interface_mapping. */ + gfc_interface_sym_mapping *syms; + + /* A list of gfc_charlens that were needed when creating copies of + expressions. The whole list is owned by this gfc_interface_mapping. */ + gfc_charlen *charlens; +} +gfc_interface_mapping; + +void gfc_init_interface_mapping (gfc_interface_mapping *); +void gfc_free_interface_mapping (gfc_interface_mapping *); +void gfc_add_interface_mapping (gfc_interface_mapping *, + gfc_symbol *, gfc_se *, gfc_expr *); +void gfc_finish_interface_mapping (gfc_interface_mapping *, + stmtblock_t *, stmtblock_t *); +void gfc_apply_interface_mapping (gfc_interface_mapping *, + gfc_se *, gfc_expr *); + + +/* Standard error messages used in all the trans-*.c files. */ +extern const char gfc_msg_bounds[]; +extern const char gfc_msg_fault[]; +extern const char gfc_msg_wrong_return[]; + + +#endif /* GFC_TRANS_H */ diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/types.def b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/types.def new file mode 100644 index 0000000000..5bcdb5261d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/types.def @@ -0,0 +1,154 @@ +/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. + +This file is part of GCC. + +GCC 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 3, or (at your option) any later +version. + +GCC 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 GCC; see the file COPYING3. If not see +. */ + +/* This header contains a subset of ../builtin-types.def needed for + Fortran frontend builtins. + + Before including this header, you must define the following macros: + + DEF_PRIMITIVE_TYPE (ENUM, TYPE) + + The ENUM is an identifier indicating which type is being defined. + TYPE is an expression for a `tree' that represents the type. + + DEF_FUNCTION_TYPE_0 (ENUM, RETURN) + DEF_FUNCTION_TYPE_1 (ENUM, RETURN, ARG1) + DEF_FUNCTION_TYPE_2 (ENUM, RETURN, ARG1, ARG2) + DEF_FUNCTION_TYPE_3 (ENUM, RETURN, ARG1, ARG2, ARG3) + DEF_FUNCTION_TYPE_4 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) + DEF_FUNCTION_TYPE_5 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) + DEF_FUNCTION_TYPE_6 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) + DEF_FUNCTION_TYPE_7 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) + + These macros describe function types. ENUM is as above. The + RETURN type is one of the enumerals already defined. ARG1, ARG2, + and ARG3 give the types of the arguments, similarly. + + DEF_FUNCTION_TYPE_VAR_0 (ENUM, RETURN) + + Similar, but for function types that take variable arguments. + + DEF_POINTER_TYPE (ENUM, TYPE) + + This macro describes a pointer type. ENUM is as above; TYPE is + the type pointed to. */ + +DEF_PRIMITIVE_TYPE (BT_VOID, void_type_node) +DEF_PRIMITIVE_TYPE (BT_BOOL, + (*lang_hooks.types.type_for_size) (BOOL_TYPE_SIZE, 1)) +DEF_PRIMITIVE_TYPE (BT_INT, integer_type_node) +DEF_PRIMITIVE_TYPE (BT_UINT, unsigned_type_node) +DEF_PRIMITIVE_TYPE (BT_LONG, long_integer_type_node) +DEF_PRIMITIVE_TYPE (BT_ULONGLONG, long_long_unsigned_type_node) +DEF_PRIMITIVE_TYPE (BT_WORD, (*lang_hooks.types.type_for_mode) (word_mode, 1)) + +DEF_PRIMITIVE_TYPE (BT_I1, builtin_type_for_size (BITS_PER_UNIT*1, 1)) +DEF_PRIMITIVE_TYPE (BT_I2, builtin_type_for_size (BITS_PER_UNIT*2, 1)) +DEF_PRIMITIVE_TYPE (BT_I4, builtin_type_for_size (BITS_PER_UNIT*4, 1)) +DEF_PRIMITIVE_TYPE (BT_I8, builtin_type_for_size (BITS_PER_UNIT*8, 1)) +DEF_PRIMITIVE_TYPE (BT_I16, builtin_type_for_size (BITS_PER_UNIT*16, 1)) + +DEF_PRIMITIVE_TYPE (BT_PTR, ptr_type_node) +DEF_PRIMITIVE_TYPE (BT_CONST_PTR, const_ptr_type_node) +DEF_PRIMITIVE_TYPE (BT_VOLATILE_PTR, + build_pointer_type + (build_qualified_type (void_type_node, + TYPE_QUAL_VOLATILE))) + +DEF_POINTER_TYPE (BT_PTR_LONG, BT_LONG) +DEF_POINTER_TYPE (BT_PTR_ULONGLONG, BT_ULONGLONG) +DEF_POINTER_TYPE (BT_PTR_PTR, BT_PTR) +DEF_FUNCTION_TYPE_0 (BT_FN_BOOL, BT_BOOL) +DEF_FUNCTION_TYPE_0 (BT_FN_PTR, BT_PTR) +DEF_FUNCTION_TYPE_0 (BT_FN_INT, BT_INT) +DEF_FUNCTION_TYPE_0 (BT_FN_UINT, BT_UINT) +DEF_FUNCTION_TYPE_0 (BT_FN_VOID, BT_VOID) + +DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTR, BT_VOID, BT_PTR) +DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTRPTR, BT_VOID, BT_PTR_PTR) +DEF_FUNCTION_TYPE_1 (BT_FN_VOID_VPTR, BT_VOID, BT_VOLATILE_PTR) +DEF_FUNCTION_TYPE_1 (BT_FN_UINT_UINT, BT_UINT, BT_UINT) +DEF_FUNCTION_TYPE_1 (BT_FN_PTR_PTR, BT_PTR, BT_PTR) + +DEF_POINTER_TYPE (BT_PTR_FN_VOID_PTR, BT_FN_VOID_PTR) + +DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_LONGPTR_LONGPTR, + BT_BOOL, BT_PTR_LONG, BT_PTR_LONG) +DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, + BT_BOOL, BT_PTR_ULONGLONG, BT_PTR_ULONGLONG) +DEF_FUNCTION_TYPE_2 (BT_FN_I1_VPTR_I1, BT_I1, BT_VOLATILE_PTR, BT_I1) +DEF_FUNCTION_TYPE_2 (BT_FN_I2_VPTR_I2, BT_I2, BT_VOLATILE_PTR, BT_I2) +DEF_FUNCTION_TYPE_2 (BT_FN_I4_VPTR_I4, BT_I4, BT_VOLATILE_PTR, BT_I4) +DEF_FUNCTION_TYPE_2 (BT_FN_I8_VPTR_I8, BT_I8, BT_VOLATILE_PTR, BT_I8) +DEF_FUNCTION_TYPE_2 (BT_FN_I16_VPTR_I16, BT_I16, BT_VOLATILE_PTR, BT_I16) +DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_PTR, BT_VOID, BT_PTR, BT_PTR) + +DEF_POINTER_TYPE (BT_PTR_FN_VOID_PTR_PTR, BT_FN_VOID_PTR_PTR) + +DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I1_I1, BT_BOOL, BT_VOLATILE_PTR, + BT_I1, BT_I1) +DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I2_I2, BT_BOOL, BT_VOLATILE_PTR, + BT_I2, BT_I2) +DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I4_I4, BT_BOOL, BT_VOLATILE_PTR, + BT_I4, BT_I4) +DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I8_I8, BT_BOOL, BT_VOLATILE_PTR, + BT_I8, BT_I8) +DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I16_I16, BT_BOOL, BT_VOLATILE_PTR, + BT_I16, BT_I16) +DEF_FUNCTION_TYPE_3 (BT_FN_I1_VPTR_I1_I1, BT_I1, BT_VOLATILE_PTR, BT_I1, BT_I1) +DEF_FUNCTION_TYPE_3 (BT_FN_I2_VPTR_I2_I2, BT_I2, BT_VOLATILE_PTR, BT_I2, BT_I2) +DEF_FUNCTION_TYPE_3 (BT_FN_I4_VPTR_I4_I4, BT_I4, BT_VOLATILE_PTR, BT_I4, BT_I4) +DEF_FUNCTION_TYPE_3 (BT_FN_I8_VPTR_I8_I8, BT_I8, BT_VOLATILE_PTR, BT_I8, BT_I8) +DEF_FUNCTION_TYPE_3 (BT_FN_I16_VPTR_I16_I16, BT_I16, BT_VOLATILE_PTR, + BT_I16, BT_I16) +DEF_FUNCTION_TYPE_3 (BT_FN_VOID_OMPFN_PTR_UINT, BT_VOID, BT_PTR_FN_VOID_PTR, + BT_PTR, BT_UINT) + +DEF_FUNCTION_TYPE_4 (BT_FN_VOID_OMPFN_PTR_UINT_UINT, + BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT, BT_UINT) +DEF_FUNCTION_TYPE_4 (BT_FN_VOID_PTR_WORD_WORD_PTR, + BT_VOID, BT_PTR, BT_WORD, BT_WORD, BT_PTR) + +DEF_FUNCTION_TYPE_5 (BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR, + BT_BOOL, BT_LONG, BT_LONG, BT_LONG, + BT_PTR_LONG, BT_PTR_LONG) + +DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR, + BT_BOOL, BT_LONG, BT_LONG, BT_LONG, BT_LONG, + BT_PTR_LONG, BT_PTR_LONG) +DEF_FUNCTION_TYPE_6 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG, + BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT, + BT_LONG, BT_LONG, BT_LONG) +DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR, + BT_BOOL, BT_BOOL, BT_ULONGLONG, BT_ULONGLONG, + BT_ULONGLONG, BT_PTR_ULONGLONG, BT_PTR_ULONGLONG) + +DEF_FUNCTION_TYPE_7 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG, + BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT, + BT_LONG, BT_LONG, BT_LONG, BT_LONG) +DEF_FUNCTION_TYPE_7 (BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT, + BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, + BT_PTR_FN_VOID_PTR_PTR, BT_LONG, BT_LONG, + BT_BOOL, BT_UINT) +DEF_FUNCTION_TYPE_7 (BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR, + BT_BOOL, BT_BOOL, BT_ULONGLONG, BT_ULONGLONG, + BT_ULONGLONG, BT_ULONGLONG, + BT_PTR_ULONGLONG, BT_PTR_ULONGLONG) + +DEF_FUNCTION_TYPE_VAR_0 (BT_FN_VOID_VAR, BT_VOID) diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog new file mode 100644 index 0000000000..9980e049b8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog @@ -0,0 +1,3203 @@ +2009-04-21 Release Manager + + * GCC 4.4.0 released. + +2009-04-09 Nick Clifton + + * m4/cshift0.m4: Change copyright header to refer to version 3 + of the GNU General Public License with version 3.1 of the GCC + Runtime Library Exception and to point readers at the COPYING3 + and COPYING3.RUNTIME files and the FSF's license web page. + * c99_protos.h: Likewise. + * config/fpu-387.h: Likewise. + * config/fpu-aix.h: Likewise. + * config/fpu-generic.h: Likewise. + * config/fpu-glibc.h: Likewise. + * config/fpu-sysv.h: Likewise. + * intrinsics/abort.c: Likewise. + * intrinsics/access.c: Likewise. + * intrinsics/args.c: Likewise. + * intrinsics/associated.c: Likewise. + * intrinsics/c99_functions.c: Likewise. + * intrinsics/chdir.c: Likewise. + * intrinsics/chmod.c: Likewise. + * intrinsics/clock.c: Likewise. + * intrinsics/cpu_time.c: Likewise. + * intrinsics/cshift0.c: Likewise. + * intrinsics/ctime.c: Likewise. + * intrinsics/date_and_time.c: Likewise. + * intrinsics/dprod_r8.f90: Likewise. + * intrinsics/dtime.c: Likewise. + * intrinsics/env.c: Likewise. + * intrinsics/eoshift0.c: Likewise. + * intrinsics/eoshift2.c: Likewise. + * intrinsics/erfc_scaled.c: Likewise. + * intrinsics/erfc_scaled_inc.c: Likewise. + * intrinsics/etime.c: Likewise. + * intrinsics/exit.c: Likewise. + * intrinsics/f2c_specifics.F90: Likewise. + * intrinsics/fnum.c: Likewise. + * intrinsics/gerror.c: Likewise. + * intrinsics/getXid.c: Likewise. + * intrinsics/getcwd.c: Likewise. + * intrinsics/getlog.c: Likewise. + * intrinsics/hostnm.c: Likewise. + * intrinsics/ierrno.c: Likewise. + * intrinsics/ishftc.c: Likewise. + * intrinsics/iso_c_binding.c: Likewise. + * intrinsics/iso_c_binding.h: Likewise. + * intrinsics/iso_c_generated_procs.c: Likewise. + * intrinsics/kill.c: Likewise. + * intrinsics/link.c: Likewise. + * intrinsics/malloc.c: Likewise. + * intrinsics/move_alloc.c: Likewise. + * intrinsics/mvbits.c: Likewise. + * intrinsics/pack_generic.c: Likewise. + * intrinsics/perror.c: Likewise. + * intrinsics/rand.c: Likewise. + * intrinsics/random.c: Likewise. + * intrinsics/rename.c: Likewise. + * intrinsics/reshape_generic.c: Likewise. + * intrinsics/reshape_packed.c: Likewise. + * intrinsics/selected_char_kind.c: Likewise. + * intrinsics/selected_int_kind.f90: Likewise. + * intrinsics/selected_real_kind.f90: Likewise. + * intrinsics/signal.c: Likewise. + * intrinsics/size.c: Likewise. + * intrinsics/sleep.c: Likewise. + * intrinsics/spread_generic.c: Likewise. + * intrinsics/stat.c: Likewise. + * intrinsics/string_intrinsics.c: Likewise. + * intrinsics/string_intrinsics_inc.c: Likewise. + * intrinsics/symlnk.c: Likewise. + * intrinsics/system.c: Likewise. + * intrinsics/system_clock.c: Likewise. + * intrinsics/time.c: Likewise. + * intrinsics/time_1.h: Likewise. + * intrinsics/transpose_generic.c: Likewise. + * intrinsics/umask.c: Likewise. + * intrinsics/unlink.c: Likewise. + * intrinsics/unpack_generic.c: Likewise. + * io/close.c: Likewise. + * io/fbuf.c: Likewise. + * io/file_pos.c: Likewise. + * io/format.c: Likewise. + * io/inquire.c: Likewise. + * io/intrinsics.c: Likewise. + * io/io.h: Likewise. + * io/list_read.c: Likewise. + * io/lock.c: Likewise. + * io/open.c: Likewise. + * io/read.c: Likewise. + * io/size_from_kind.c: Likewise. + * io/transfer.c: Likewise. + * io/unit.c: Likewise. + * io/unix.c: Likewise. + * io/write.c: Likewise. + * io/write_float.def: Likewise. + * libgfortran.h: Likewise. + * m4/all.m4: Likewise. + * m4/any.m4: Likewise. + * m4/count.m4: Likewise. + * m4/cshift1.m4: Likewise. + * m4/eoshift1.m4: Likewise. + * m4/eoshift3.m4: Likewise. + * m4/exponent.m4: Likewise. + * m4/fraction.m4: Likewise. + * m4/head.m4: Likewise. + * m4/in_pack.m4: Likewise. + * m4/in_unpack.m4: Likewise. + * m4/matmul.m4: Likewise. + * m4/matmull.m4: Likewise. + * m4/maxloc0.m4: Likewise. + * m4/maxloc1.m4: Likewise. + * m4/maxval.m4: Likewise. + * m4/minloc0.m4: Likewise. + * m4/minloc1.m4: Likewise. + * m4/minval.m4: Likewise. + * m4/nearest.m4: Likewise. + * m4/pack.m4: Likewise. + * m4/pow.m4: Likewise. + * m4/product.m4: Likewise. + * m4/reshape.m4: Likewise. + * m4/rrspacing.m4: Likewise. + * m4/set_exponent.m4: Likewise. + * m4/shape.m4: Likewise. + * m4/spacing.m4: Likewise. + * m4/spread.m4: Likewise. + * m4/sum.m4: Likewise. + * m4/transpose.m4: Likewise. + * m4/unpack.m4: Likewise. + * runtime/backtrace.c: Likewise. + * runtime/compile_options.c: Likewise. + * runtime/convert_char.c: Likewise. + * runtime/environ.c: Likewise. + * runtime/error.c: Likewise. + * runtime/in_pack_generic.c: Likewise. + * runtime/in_unpack_generic.c: Likewise. + * runtime/main.c: Likewise. + * runtime/memory.c: Likewise. + * runtime/pause.c: Likewise. + * runtime/select.c: Likewise. + * runtime/select_inc.c: Likewise. + * runtime/stop.c: Likewise. + * runtime/string.c: Likewise. + * generated/_abs_c10.F90: Regenerate. + * generated/_abs_c16.F90: Regenerate. + * generated/_abs_c4.F90: Regenerate. + * generated/_abs_c8.F90: Regenerate. + * generated/_abs_i16.F90: Regenerate. + * generated/_abs_i4.F90: Regenerate. + * generated/_abs_i8.F90: Regenerate. + * generated/_abs_r10.F90: Regenerate. + * generated/_abs_r16.F90: Regenerate. + * generated/_abs_r4.F90: Regenerate. + * generated/_abs_r8.F90: Regenerate. + * generated/_acos_r10.F90: Regenerate. + * generated/_acos_r16.F90: Regenerate. + * generated/_acos_r4.F90: Regenerate. + * generated/_acos_r8.F90: Regenerate. + * generated/_acosh_r10.F90: Regenerate. + * generated/_acosh_r16.F90: Regenerate. + * generated/_acosh_r4.F90: Regenerate. + * generated/_acosh_r8.F90: Regenerate. + * generated/_aimag_c10.F90: Regenerate. + * generated/_aimag_c16.F90: Regenerate. + * generated/_aimag_c4.F90: Regenerate. + * generated/_aimag_c8.F90: Regenerate. + * generated/_aint_r10.F90: Regenerate. + * generated/_aint_r16.F90: Regenerate. + * generated/_aint_r4.F90: Regenerate. + * generated/_aint_r8.F90: Regenerate. + * generated/_anint_r10.F90: Regenerate. + * generated/_anint_r16.F90: Regenerate. + * generated/_anint_r4.F90: Regenerate. + * generated/_anint_r8.F90: Regenerate. + * generated/_asin_r10.F90: Regenerate. + * generated/_asin_r16.F90: Regenerate. + * generated/_asin_r4.F90: Regenerate. + * generated/_asin_r8.F90: Regenerate. + * generated/_asinh_r10.F90: Regenerate. + * generated/_asinh_r16.F90: Regenerate. + * generated/_asinh_r4.F90: Regenerate. + * generated/_asinh_r8.F90: Regenerate. + * generated/_atan2_r10.F90: Regenerate. + * generated/_atan2_r16.F90: Regenerate. + * generated/_atan2_r4.F90: Regenerate. + * generated/_atan2_r8.F90: Regenerate. + * generated/_atan_r10.F90: Regenerate. + * generated/_atan_r16.F90: Regenerate. + * generated/_atan_r4.F90: Regenerate. + * generated/_atan_r8.F90: Regenerate. + * generated/_atanh_r10.F90: Regenerate. + * generated/_atanh_r16.F90: Regenerate. + * generated/_atanh_r4.F90: Regenerate. + * generated/_atanh_r8.F90: Regenerate. + * generated/_conjg_c10.F90: Regenerate. + * generated/_conjg_c16.F90: Regenerate. + * generated/_conjg_c4.F90: Regenerate. + * generated/_conjg_c8.F90: Regenerate. + * generated/_cos_c10.F90: Regenerate. + * generated/_cos_c16.F90: Regenerate. + * generated/_cos_c4.F90: Regenerate. + * generated/_cos_c8.F90: Regenerate. + * generated/_cos_r10.F90: Regenerate. + * generated/_cos_r16.F90: Regenerate. + * generated/_cos_r4.F90: Regenerate. + * generated/_cos_r8.F90: Regenerate. + * generated/_cosh_r10.F90: Regenerate. + * generated/_cosh_r16.F90: Regenerate. + * generated/_cosh_r4.F90: Regenerate. + * generated/_cosh_r8.F90: Regenerate. + * generated/_dim_i16.F90: Regenerate. + * generated/_dim_i4.F90: Regenerate. + * generated/_dim_i8.F90: Regenerate. + * generated/_dim_r10.F90: Regenerate. + * generated/_dim_r16.F90: Regenerate. + * generated/_dim_r4.F90: Regenerate. + * generated/_dim_r8.F90: Regenerate. + * generated/_exp_c10.F90: Regenerate. + * generated/_exp_c16.F90: Regenerate. + * generated/_exp_c4.F90: Regenerate. + * generated/_exp_c8.F90: Regenerate. + * generated/_exp_r10.F90: Regenerate. + * generated/_exp_r16.F90: Regenerate. + * generated/_exp_r4.F90: Regenerate. + * generated/_exp_r8.F90: Regenerate. + * generated/_log10_r10.F90: Regenerate. + * generated/_log10_r16.F90: Regenerate. + * generated/_log10_r4.F90: Regenerate. + * generated/_log10_r8.F90: Regenerate. + * generated/_log_c10.F90: Regenerate. + * generated/_log_c16.F90: Regenerate. + * generated/_log_c4.F90: Regenerate. + * generated/_log_c8.F90: Regenerate. + * generated/_log_r10.F90: Regenerate. + * generated/_log_r16.F90: Regenerate. + * generated/_log_r4.F90: Regenerate. + * generated/_log_r8.F90: Regenerate. + * generated/_mod_i16.F90: Regenerate. + * generated/_mod_i4.F90: Regenerate. + * generated/_mod_i8.F90: Regenerate. + * generated/_mod_r10.F90: Regenerate. + * generated/_mod_r16.F90: Regenerate. + * generated/_mod_r4.F90: Regenerate. + * generated/_mod_r8.F90: Regenerate. + * generated/_sign_i16.F90: Regenerate. + * generated/_sign_i4.F90: Regenerate. + * generated/_sign_i8.F90: Regenerate. + * generated/_sign_r10.F90: Regenerate. + * generated/_sign_r16.F90: Regenerate. + * generated/_sign_r4.F90: Regenerate. + * generated/_sign_r8.F90: Regenerate. + * generated/_sin_c10.F90: Regenerate. + * generated/_sin_c16.F90: Regenerate. + * generated/_sin_c4.F90: Regenerate. + * generated/_sin_c8.F90: Regenerate. + * generated/_sin_r10.F90: Regenerate. + * generated/_sin_r16.F90: Regenerate. + * generated/_sin_r4.F90: Regenerate. + * generated/_sin_r8.F90: Regenerate. + * generated/_sinh_r10.F90: Regenerate. + * generated/_sinh_r16.F90: Regenerate. + * generated/_sinh_r4.F90: Regenerate. + * generated/_sinh_r8.F90: Regenerate. + * generated/_sqrt_c10.F90: Regenerate. + * generated/_sqrt_c16.F90: Regenerate. + * generated/_sqrt_c4.F90: Regenerate. + * generated/_sqrt_c8.F90: Regenerate. + * generated/_sqrt_r10.F90: Regenerate. + * generated/_sqrt_r16.F90: Regenerate. + * generated/_sqrt_r4.F90: Regenerate. + * generated/_sqrt_r8.F90: Regenerate. + * generated/_tan_r10.F90: Regenerate. + * generated/_tan_r16.F90: Regenerate. + * generated/_tan_r4.F90: Regenerate. + * generated/_tan_r8.F90: Regenerate. + * generated/_tanh_r10.F90: Regenerate. + * generated/_tanh_r16.F90: Regenerate. + * generated/_tanh_r4.F90: Regenerate. + * generated/_tanh_r8.F90: Regenerate. + * generated/all_l1.c: Regenerate. + * generated/all_l16.c: Regenerate. + * generated/all_l2.c: Regenerate. + * generated/all_l4.c: Regenerate. + * generated/all_l8.c: Regenerate. + * generated/any_l1.c: Regenerate. + * generated/any_l16.c: Regenerate. + * generated/any_l2.c: Regenerate. + * generated/any_l4.c: Regenerate. + * generated/any_l8.c: Regenerate. + * generated/count_16_l.c: Regenerate. + * generated/count_1_l.c: Regenerate. + * generated/count_2_l.c: Regenerate. + * generated/count_4_l.c: Regenerate. + * generated/count_8_l.c: Regenerate. + * generated/cshift0_c10.c: Regenerate. + * generated/cshift0_c16.c: Regenerate. + * generated/cshift0_c4.c: Regenerate. + * generated/cshift0_c8.c: Regenerate. + * generated/cshift0_i1.c: Regenerate. + * generated/cshift0_i16.c: Regenerate. + * generated/cshift0_i2.c: Regenerate. + * generated/cshift0_i4.c: Regenerate. + * generated/cshift0_i8.c: Regenerate. + * generated/cshift0_r10.c: Regenerate. + * generated/cshift0_r16.c: Regenerate. + * generated/cshift0_r4.c: Regenerate. + * generated/cshift0_r8.c: Regenerate. + * generated/cshift1_16.c: Regenerate. + * generated/cshift1_4.c: Regenerate. + * generated/cshift1_8.c: Regenerate. + * generated/eoshift1_16.c: Regenerate. + * generated/eoshift1_4.c: Regenerate. + * generated/eoshift1_8.c: Regenerate. + * generated/eoshift3_16.c: Regenerate. + * generated/eoshift3_4.c: Regenerate. + * generated/eoshift3_8.c: Regenerate. + * generated/exponent_r10.c: Regenerate. + * generated/exponent_r16.c: Regenerate. + * generated/exponent_r4.c: Regenerate. + * generated/exponent_r8.c: Regenerate. + * generated/fraction_r10.c: Regenerate. + * generated/fraction_r16.c: Regenerate. + * generated/fraction_r4.c: Regenerate. + * generated/fraction_r8.c: Regenerate. + * generated/in_pack_c10.c: Regenerate. + * generated/in_pack_c16.c: Regenerate. + * generated/in_pack_c4.c: Regenerate. + * generated/in_pack_c8.c: Regenerate. + * generated/in_pack_i1.c: Regenerate. + * generated/in_pack_i16.c: Regenerate. + * generated/in_pack_i2.c: Regenerate. + * generated/in_pack_i4.c: Regenerate. + * generated/in_pack_i8.c: Regenerate. + * generated/in_pack_r10.c: Regenerate. + * generated/in_pack_r16.c: Regenerate. + * generated/in_pack_r4.c: Regenerate. + * generated/in_pack_r8.c: Regenerate. + * generated/in_unpack_c10.c: Regenerate. + * generated/in_unpack_c16.c: Regenerate. + * generated/in_unpack_c4.c: Regenerate. + * generated/in_unpack_c8.c: Regenerate. + * generated/in_unpack_i1.c: Regenerate. + * generated/in_unpack_i16.c: Regenerate. + * generated/in_unpack_i2.c: Regenerate. + * generated/in_unpack_i4.c: Regenerate. + * generated/in_unpack_i8.c: Regenerate. + * generated/in_unpack_r10.c: Regenerate. + * generated/in_unpack_r16.c: Regenerate. + * generated/in_unpack_r4.c: Regenerate. + * generated/in_unpack_r8.c: Regenerate. + * generated/matmul_c10.c: Regenerate. + * generated/matmul_c16.c: Regenerate. + * generated/matmul_c4.c: Regenerate. + * generated/matmul_c8.c: Regenerate. + * generated/matmul_i1.c: Regenerate. + * generated/matmul_i16.c: Regenerate. + * generated/matmul_i2.c: Regenerate. + * generated/matmul_i4.c: Regenerate. + * generated/matmul_i8.c: Regenerate. + * generated/matmul_l16.c: Regenerate. + * generated/matmul_l4.c: Regenerate. + * generated/matmul_l8.c: Regenerate. + * generated/matmul_r10.c: Regenerate. + * generated/matmul_r16.c: Regenerate. + * generated/matmul_r4.c: Regenerate. + * generated/matmul_r8.c: Regenerate. + * generated/maxloc0_16_i1.c: Regenerate. + * generated/maxloc0_16_i16.c: Regenerate. + * generated/maxloc0_16_i2.c: Regenerate. + * generated/maxloc0_16_i4.c: Regenerate. + * generated/maxloc0_16_i8.c: Regenerate. + * generated/maxloc0_16_r10.c: Regenerate. + * generated/maxloc0_16_r16.c: Regenerate. + * generated/maxloc0_16_r4.c: Regenerate. + * generated/maxloc0_16_r8.c: Regenerate. + * generated/maxloc0_4_i1.c: Regenerate. + * generated/maxloc0_4_i16.c: Regenerate. + * generated/maxloc0_4_i2.c: Regenerate. + * generated/maxloc0_4_i4.c: Regenerate. + * generated/maxloc0_4_i8.c: Regenerate. + * generated/maxloc0_4_r10.c: Regenerate. + * generated/maxloc0_4_r16.c: Regenerate. + * generated/maxloc0_4_r4.c: Regenerate. + * generated/maxloc0_4_r8.c: Regenerate. + * generated/maxloc0_8_i1.c: Regenerate. + * generated/maxloc0_8_i16.c: Regenerate. + * generated/maxloc0_8_i2.c: Regenerate. + * generated/maxloc0_8_i4.c: Regenerate. + * generated/maxloc0_8_i8.c: Regenerate. + * generated/maxloc0_8_r10.c: Regenerate. + * generated/maxloc0_8_r16.c: Regenerate. + * generated/maxloc0_8_r4.c: Regenerate. + * generated/maxloc0_8_r8.c: Regenerate. + * generated/maxloc1_16_i1.c: Regenerate. + * generated/maxloc1_16_i16.c: Regenerate. + * generated/maxloc1_16_i2.c: Regenerate. + * generated/maxloc1_16_i4.c: Regenerate. + * generated/maxloc1_16_i8.c: Regenerate. + * generated/maxloc1_16_r10.c: Regenerate. + * generated/maxloc1_16_r16.c: Regenerate. + * generated/maxloc1_16_r4.c: Regenerate. + * generated/maxloc1_16_r8.c: Regenerate. + * generated/maxloc1_4_i1.c: Regenerate. + * generated/maxloc1_4_i16.c: Regenerate. + * generated/maxloc1_4_i2.c: Regenerate. + * generated/maxloc1_4_i4.c: Regenerate. + * generated/maxloc1_4_i8.c: Regenerate. + * generated/maxloc1_4_r10.c: Regenerate. + * generated/maxloc1_4_r16.c: Regenerate. + * generated/maxloc1_4_r4.c: Regenerate. + * generated/maxloc1_4_r8.c: Regenerate. + * generated/maxloc1_8_i1.c: Regenerate. + * generated/maxloc1_8_i16.c: Regenerate. + * generated/maxloc1_8_i2.c: Regenerate. + * generated/maxloc1_8_i4.c: Regenerate. + * generated/maxloc1_8_i8.c: Regenerate. + * generated/maxloc1_8_r10.c: Regenerate. + * generated/maxloc1_8_r16.c: Regenerate. + * generated/maxloc1_8_r4.c: Regenerate. + * generated/maxloc1_8_r8.c: Regenerate. + * generated/maxval_i1.c: Regenerate. + * generated/maxval_i16.c: Regenerate. + * generated/maxval_i2.c: Regenerate. + * generated/maxval_i4.c: Regenerate. + * generated/maxval_i8.c: Regenerate. + * generated/maxval_r10.c: Regenerate. + * generated/maxval_r16.c: Regenerate. + * generated/maxval_r4.c: Regenerate. + * generated/maxval_r8.c: Regenerate. + * generated/minloc0_16_i1.c: Regenerate. + * generated/minloc0_16_i16.c: Regenerate. + * generated/minloc0_16_i2.c: Regenerate. + * generated/minloc0_16_i4.c: Regenerate. + * generated/minloc0_16_i8.c: Regenerate. + * generated/minloc0_16_r10.c: Regenerate. + * generated/minloc0_16_r16.c: Regenerate. + * generated/minloc0_16_r4.c: Regenerate. + * generated/minloc0_16_r8.c: Regenerate. + * generated/minloc0_4_i1.c: Regenerate. + * generated/minloc0_4_i16.c: Regenerate. + * generated/minloc0_4_i2.c: Regenerate. + * generated/minloc0_4_i4.c: Regenerate. + * generated/minloc0_4_i8.c: Regenerate. + * generated/minloc0_4_r10.c: Regenerate. + * generated/minloc0_4_r16.c: Regenerate. + * generated/minloc0_4_r4.c: Regenerate. + * generated/minloc0_4_r8.c: Regenerate. + * generated/minloc0_8_i1.c: Regenerate. + * generated/minloc0_8_i16.c: Regenerate. + * generated/minloc0_8_i2.c: Regenerate. + * generated/minloc0_8_i4.c: Regenerate. + * generated/minloc0_8_i8.c: Regenerate. + * generated/minloc0_8_r10.c: Regenerate. + * generated/minloc0_8_r16.c: Regenerate. + * generated/minloc0_8_r4.c: Regenerate. + * generated/minloc0_8_r8.c: Regenerate. + * generated/minloc1_16_i1.c: Regenerate. + * generated/minloc1_16_i16.c: Regenerate. + * generated/minloc1_16_i2.c: Regenerate. + * generated/minloc1_16_i4.c: Regenerate. + * generated/minloc1_16_i8.c: Regenerate. + * generated/minloc1_16_r10.c: Regenerate. + * generated/minloc1_16_r16.c: Regenerate. + * generated/minloc1_16_r4.c: Regenerate. + * generated/minloc1_16_r8.c: Regenerate. + * generated/minloc1_4_i1.c: Regenerate. + * generated/minloc1_4_i16.c: Regenerate. + * generated/minloc1_4_i2.c: Regenerate. + * generated/minloc1_4_i4.c: Regenerate. + * generated/minloc1_4_i8.c: Regenerate. + * generated/minloc1_4_r10.c: Regenerate. + * generated/minloc1_4_r16.c: Regenerate. + * generated/minloc1_4_r4.c: Regenerate. + * generated/minloc1_4_r8.c: Regenerate. + * generated/minloc1_8_i1.c: Regenerate. + * generated/minloc1_8_i16.c: Regenerate. + * generated/minloc1_8_i2.c: Regenerate. + * generated/minloc1_8_i4.c: Regenerate. + * generated/minloc1_8_i8.c: Regenerate. + * generated/minloc1_8_r10.c: Regenerate. + * generated/minloc1_8_r16.c: Regenerate. + * generated/minloc1_8_r4.c: Regenerate. + * generated/minloc1_8_r8.c: Regenerate. + * generated/minval_i1.c: Regenerate. + * generated/minval_i16.c: Regenerate. + * generated/minval_i2.c: Regenerate. + * generated/minval_i4.c: Regenerate. + * generated/minval_i8.c: Regenerate. + * generated/minval_r10.c: Regenerate. + * generated/minval_r16.c: Regenerate. + * generated/minval_r4.c: Regenerate. + * generated/minval_r8.c: Regenerate. + * generated/misc_specifics.F90: Regenerate. + * generated/nearest_r10.c: Regenerate. + * generated/nearest_r16.c: Regenerate. + * generated/nearest_r4.c: Regenerate. + * generated/nearest_r8.c: Regenerate. + * generated/pack_c10.c: Regenerate. + * generated/pack_c16.c: Regenerate. + * generated/pack_c4.c: Regenerate. + * generated/pack_c8.c: Regenerate. + * generated/pack_i1.c: Regenerate. + * generated/pack_i16.c: Regenerate. + * generated/pack_i2.c: Regenerate. + * generated/pack_i4.c: Regenerate. + * generated/pack_i8.c: Regenerate. + * generated/pack_r10.c: Regenerate. + * generated/pack_r16.c: Regenerate. + * generated/pack_r4.c: Regenerate. + * generated/pack_r8.c: Regenerate. + * generated/pow_c10_i16.c: Regenerate. + * generated/pow_c10_i4.c: Regenerate. + * generated/pow_c10_i8.c: Regenerate. + * generated/pow_c16_i16.c: Regenerate. + * generated/pow_c16_i4.c: Regenerate. + * generated/pow_c16_i8.c: Regenerate. + * generated/pow_c4_i16.c: Regenerate. + * generated/pow_c4_i4.c: Regenerate. + * generated/pow_c4_i8.c: Regenerate. + * generated/pow_c8_i16.c: Regenerate. + * generated/pow_c8_i4.c: Regenerate. + * generated/pow_c8_i8.c: Regenerate. + * generated/pow_i16_i16.c: Regenerate. + * generated/pow_i16_i4.c: Regenerate. + * generated/pow_i16_i8.c: Regenerate. + * generated/pow_i4_i16.c: Regenerate. + * generated/pow_i4_i4.c: Regenerate. + * generated/pow_i4_i8.c: Regenerate. + * generated/pow_i8_i16.c: Regenerate. + * generated/pow_i8_i4.c: Regenerate. + * generated/pow_i8_i8.c: Regenerate. + * generated/pow_r10_i16.c: Regenerate. + * generated/pow_r10_i8.c: Regenerate. + * generated/pow_r16_i16.c: Regenerate. + * generated/pow_r16_i8.c: Regenerate. + * generated/pow_r4_i16.c: Regenerate. + * generated/pow_r4_i8.c: Regenerate. + * generated/pow_r8_i16.c: Regenerate. + * generated/pow_r8_i8.c: Regenerate. + * generated/product_c10.c: Regenerate. + * generated/product_c16.c: Regenerate. + * generated/product_c4.c: Regenerate. + * generated/product_c8.c: Regenerate. + * generated/product_i1.c: Regenerate. + * generated/product_i16.c: Regenerate. + * generated/product_i2.c: Regenerate. + * generated/product_i4.c: Regenerate. + * generated/product_i8.c: Regenerate. + * generated/product_r10.c: Regenerate. + * generated/product_r16.c: Regenerate. + * generated/product_r4.c: Regenerate. + * generated/product_r8.c: Regenerate. + * generated/reshape_c10.c: Regenerate. + * generated/reshape_c16.c: Regenerate. + * generated/reshape_c4.c: Regenerate. + * generated/reshape_c8.c: Regenerate. + * generated/reshape_i16.c: Regenerate. + * generated/reshape_i4.c: Regenerate. + * generated/reshape_i8.c: Regenerate. + * generated/reshape_r10.c: Regenerate. + * generated/reshape_r16.c: Regenerate. + * generated/reshape_r4.c: Regenerate. + * generated/reshape_r8.c: Regenerate. + * generated/rrspacing_r10.c: Regenerate. + * generated/rrspacing_r16.c: Regenerate. + * generated/rrspacing_r4.c: Regenerate. + * generated/rrspacing_r8.c: Regenerate. + * generated/set_exponent_r10.c: Regenerate. + * generated/set_exponent_r16.c: Regenerate. + * generated/set_exponent_r4.c: Regenerate. + * generated/set_exponent_r8.c: Regenerate. + * generated/shape_i16.c: Regenerate. + * generated/shape_i4.c: Regenerate. + * generated/shape_i8.c: Regenerate. + * generated/spacing_r10.c: Regenerate. + * generated/spacing_r16.c: Regenerate. + * generated/spacing_r4.c: Regenerate. + * generated/spacing_r8.c: Regenerate. + * generated/spread_c10.c: Regenerate. + * generated/spread_c16.c: Regenerate. + * generated/spread_c4.c: Regenerate. + * generated/spread_c8.c: Regenerate. + * generated/spread_i1.c: Regenerate. + * generated/spread_i16.c: Regenerate. + * generated/spread_i2.c: Regenerate. + * generated/spread_i4.c: Regenerate. + * generated/spread_i8.c: Regenerate. + * generated/spread_r10.c: Regenerate. + * generated/spread_r16.c: Regenerate. + * generated/spread_r4.c: Regenerate. + * generated/spread_r8.c: Regenerate. + * generated/sum_c10.c: Regenerate. + * generated/sum_c16.c: Regenerate. + * generated/sum_c4.c: Regenerate. + * generated/sum_c8.c: Regenerate. + * generated/sum_i1.c: Regenerate. + * generated/sum_i16.c: Regenerate. + * generated/sum_i2.c: Regenerate. + * generated/sum_i4.c: Regenerate. + * generated/sum_i8.c: Regenerate. + * generated/sum_r10.c: Regenerate. + * generated/sum_r16.c: Regenerate. + * generated/sum_r4.c: Regenerate. + * generated/sum_r8.c: Regenerate. + * generated/transpose_c10.c: Regenerate. + * generated/transpose_c16.c: Regenerate. + * generated/transpose_c4.c: Regenerate. + * generated/transpose_c8.c: Regenerate. + * generated/transpose_i16.c: Regenerate. + * generated/transpose_i4.c: Regenerate. + * generated/transpose_i8.c: Regenerate. + * generated/transpose_r10.c: Regenerate. + * generated/transpose_r16.c: Regenerate. + * generated/transpose_r4.c: Regenerate. + * generated/transpose_r8.c: Regenerate. + * generated/unpack_c10.c: Regenerate. + * generated/unpack_c16.c: Regenerate. + * generated/unpack_c4.c: Regenerate. + * generated/unpack_c8.c: Regenerate. + * generated/unpack_i1.c: Regenerate. + * generated/unpack_i16.c: Regenerate. + * generated/unpack_i2.c: Regenerate. + * generated/unpack_i4.c: Regenerate. + * generated/unpack_i8.c: Regenerate. + * generated/unpack_r10.c: Regenerate. + * generated/unpack_r16.c: Regenerate. + * generated/unpack_r4.c: Regenerate. + * generated/unpack_r8.c: Regenerate. + +2009-03-24 Jerry DeLisle + + PR libfortran/39528 + * io/list_read.c (list_formatted_read_scalar): Move check for read + completion to just after the check for a repeated value. + +2009-03-08 Jerry DeLisle + + PR libfortran/39402 + * io/write_float.def (output_float): Handle F0.d formatting correctly + for any d when value is 0.0. + +2009-03-01 Ralf Wildenhues + + * configure: Regenerate. + +2009-01-21 Daniel Kraft + + PR fortran/38887 + * runtime/in_unpack_generic.c (internal_unpack): Return instead of + abort when called with empty array. + * m4/in_unpack.m4: Ditto. + * generated/in_unpack_i1.c: Regenerated. + * generated/in_unpack_i2.c: Regenerated. + * generated/in_unpack_i4.c: Regenerated. + * generated/in_unpack_i8.c: Regenerated. + * generated/in_unpack_i16.c: Regenerated. + * generated/in_unpack_r4.c: Regenerated. + * generated/in_unpack_r8.c: Regenerated. + * generated/in_unpack_r10.c: Regenerated. + * generated/in_unpack_r16.c: Regenerated. + * generated/in_unpack_c4.c: Regenerated. + * generated/in_unpack_c8.c: Regenerated. + * generated/in_unpack_c10.c: Regenerated. + * generated/in_unpack_c16.c: Regenerated. + +2009-01-12 Jerry DeLisle + + PR libfortran/38772 + * io/read.c (read_f): Clean up loop conditions for BZ/BN, + allowing proper digit testing. White space fix. + +2009-01-05 Jerry DeLisle + + PR libfortran/38735 + * io/unit.c (get_internal_unit): Set default BLANK= status to NULL for + internal units. + +2008-12-29 John David Anglin + + PR fortran/31832 + * acinclude.m4 (LIBGFOR_CHECK_FOR_BROKEN_POWF): New autoconf check for + broken powf. + * configure.ac (LIBGFOR_CHECK_FOR_BROKEN_POWF): Use it. + * intrinsics/c99_functions.c: Use internal powf implementation if + HAVE_BROKEN_POWF is defined. + * configure: Rebuilt. + * config.h.in: Rebuilt. + +2008-12-22 Jerry DeLisle + + PR libfortran/37472 + * io/write_float.def (output_float_FMT_G_): Modify calculation of temp + to avoid sensitivity to round-off. + +2008-12-21 Jerry DeLisle + + PR libfortran/38398 + * io/io.h (st_parameter_dt): Add new bit to keep track of when to + suppress blanks for g0 formatting. + * io/transfer.c (formatted_transfer_scalar): Always call write_real_g0 + for g0 formatting. + * io.c (write.c): Do not use ES formatting and use new bit to suppress + blanks. + * io/write_float.def (output_float): Adjust the location of setting the + width so that it can be adjusted when suppressing blanks. Set number of + blanks to zero when dtp->u.p.g0_no_blanks is set. Do some minor code + clean-up and add some white space for readability. + +2008-12-18 Ralf Wildenhues + + * configure: Regenerate. + +2008-12-13 Jerry DeLisle + + PR libfortran/38504 + io/write.c (write_decimal): Skip extra sign '-' at beginning of string + returned by gfc_itoa. + +2008-12-08 Jerry DeLisle + + PR libfortran/38430 + * io/transfer.c (data_transfer_init): Move constraint check for REC= + and STREAM access into condition for other REC= constraints to simplify. + Comment out this constraint to avoid breaking compatibility with 4.3 + until later. Added a TODO for above comment and this one. + Fix test for max pos. + +2008-12-06 Jerry DeLisle + + PR libfortran/38291 + * io/transfer.c (data_transfer_init): Add fbuf_flush inadvertently + ommitted. Add check for invalid use of REC= with ACCESS="stream". Fix + comment. + +2008-12-06 Adam Nemet + + * runtime/main.c (store_exe_path): Don't crash if argv0 is NULL. + +2008-12-05 Jerry DeLisle + + PR libfortran/38291 + * io/transfer.c (data_transfer_init): Add checks for POS= valid range. + Add check for unit opened with ACCESS="stream". Flush and seek if + current stream position does not match. Check ENDFILE on read. + +2008-12-04 Jerry DeLisle + + PR fortran/38285 + * write_float.def (WRITE_FLOAT): Zero the float value for special case + only if scale_factor = 0. + +2008-11-23 Thomas Koenig + + PR libfortran/38234 + * intrinsics/reshape_generic.c (reshape_internal): + Source can be larger than shape. + * m4/reshape.m4: Likewise. + * generated/reshape_c10.c Regenerated. + * generated/reshape_c16.c Regenerated. + * generated/reshape_c4.c Regenerated. + * generated/reshape_c8.c Regenerated. + * generated/reshape_i16.c Regenerated. + * generated/reshape_i4.c Regenerated. + * generated/reshape_i8.c Regenerated. + * generated/reshape_r10.c Regenerated. + * generated/reshape_r16.c Regenerated. + * generated/reshape_r4.c Regenerated. + * generated/reshape_r8.c Regenerated. + +2008-11-22 Danny Smith + + * libgfortran.h (__mingw_snprintf): Declare with gnu_printf + format attribute. + + +2008-11-22 Thomas Koenig + + PR libfortran/38225 + * intrinsics/reshape_generic.c (reshape_internal): + Use all dimensions of source for bounds checking. + * m4/reshape.m4: Likewise. + * generated/reshape_c10.c Regenerated. + * generated/reshape_c16.c Regenerated. + * generated/reshape_c4.c Regenerated. + * generated/reshape_c8.c Regenerated. + * generated/reshape_i16.c Regenerated. + * generated/reshape_i4.c Regenerated. + * generated/reshape_i8.c Regenerated. + * generated/reshape_r10.c Regenerated. + * generated/reshape_r16.c Regenerated. + * generated/reshape_r4.c Regenerated. + * generated/reshape_r8.c Regenerated. + +2008-11-22 Jakub Jelinek + + PR libfortran/37839 + * io/io.h (IOPARM_INQUIRE_HAS_ROUND, IOPARM_INQUIRE_HAS_SIGN, + IOPARM_INQUIRE_HAS_PENDING): Adjust values. + (st_parameter_inquire): Reorder and fix types of round, sign and + pending fields. + (st_parameter_43, st_parameter_44): Removed. + (st_parameter_dt): Put back struct definition directly to u.p + declaration. Change type of u.p.size_used from gfc_offset to + GFC_IO_INT. Decrease back size of u.pad to 16 pointers and + 32 ints. Put id, pos, asynchronous, blank, decimal, delim, + pad, round and sign fields after the union. + * io/inquire.c (inquire_via_unit, inquire_via_filename): Only read + flags2 if it is defined. + * io/transfer.c (read_sf, read_block_form, write_block): Cast + additions to size_used to GFC_IO_INT instead of gfc_offset. + (data_transfer_init): Clear whole u.p struct. Adjust + for moving id, pos, asynchronous, blank, decimal, delim, pad, + round and sign fields from u.p directly into st_parameter_dt. + (finalize_transfer): Don't cast size_used to GFC_IO_INT. + * io/file_pos.c (st_endfile): Clear whole u.p struct. + +2008-11-20 Jerry DeLisle + + PR libfortran/37472 + * io/write_float.def (output_float_FMT_G_): Adjust conversion of + G format specification to F format. + +2008-11-18 Thomas Koenig + + PR libfortran/38135 + * m4/reshape.m4: Correct bounds checking when PAD is present. + Treat PAD as if it were SOURCE when SOURCE is empty. + * intrinsics/reshape_generic.c: Likewise. + * generated/reshape_c10.c Regenerated. + * generated/reshape_c16.c Regenerated. + * generated/reshape_c4.c Regenerated. + * generated/reshape_c8.c Regenerated. + * generated/reshape_i16.c Regenerated. + * generated/reshape_i4.c Regenerated. + * generated/reshape_i8.c Regenerated. + * generated/reshape_r10.c Regenerated. + * generated/reshape_r16.c Regenerated. + * generated/reshape_r4.c Regenerated. + * generated/reshape_r8.c Regenerated. + +2008-11-16 Jerry DeLisle + + PR libfortran/38097 + * io/read.c (read_f): Initialize exponent. Fix comment. Set loop + conditions for BZ/BN. + * io/unit.c (get_internal_unit): Initialize flags.blank. + * io/transfer.c (data_transfer_init): Fix whitespace. + +2008-11-15 Jerry DeLisle + + PR libfortran/37294 + * io/write.c (namelist_write_newline): Use array loop specification to + advance to next internal array unit record. (namelist_write): Adjust to + accomodate the internal array unit behavior. + +2008-11-01 Dennis Wassel + + PR fortran/37159 + * intrinsics/random.c: Added comment to adapt check.c, should + kiss_size change. + Few cosmetic changes to existing comments. + +2008-10-22 Jerry DeLisle + + PR libfortran/37707 + * io/list_read.c (read_character): Remove code to look ahead in namelist + reads to descriminate non-delimited strings from namelist objects. + * io/write.c (namelist_write): Delimit character strings with quote or + apostrophe, defaulting to quote. + +2008-10-21 Thomas Koenig + + PR libfortran/34670 + * intrinsics/transpose_generic.c: Implement bounds checking. + * m4/transpose.m4: Likewise. + * generated/transpose_c8.c: Regenerated. + * generated/transpose_c16.c: Regenerated. + * generated/transpose_r10.c: Regenerated. + * generated/transpose_i8.c: Regenerated. + * generated/transpose_c10.c: Regenerated. + * generated/transpose_r4.c: Regenerated. + * generated/transpose_c4.c: Regenerated. + * generated/transpose_i16.c: Regenerated. + * generated/transpose_i4.c: Regenerated. + * generated/transpose_r8.c: Regenerated. + * generated/transpose_r16.c: Regenerated. + +2008-10-19 Jerry DeLisle + + * io/file_pos.c (unformatted_backspace): Normal case is + GFC_CONVERT_NATIVE. + * io/transfer.c (read_sf): Mark paths leading to generate_error() + as unlikely. + (readl_block_form): Likewise. + (read_block_direct): Likewise. + (write_block): Likewise. + (write_buf): Likewise. + (us_read): Likewise. Normal case is GFC_CONVERT_NATIVE. + (next_record_w_unf): Mark paths leading to generate_error() + as unlikely. + +2008-10-16 Thomas Koenig + + PR libfortran/34670 + * generated/spread_r4.c: Regenerated. + +2008-10-15 Thomas Koenig + + PR libfortran/34670 + * intrinsics/reshape_generic.c: Add bounds checking. + * m4/reshape.m4: Likewise. + * generated/reshape_c10.c: Regenerated. + * generated/reshape_c16.c: Regenerated. + * generated/reshape_c4.c: Regenerated. + * generated/reshape_c8.c: Regenerated. + * generated/reshape_i16.c: Regenerated. + * generated/reshape_i4.c: Regenerated. + * generated/reshape_i8.c: Regenerated. + * generated/reshape_r10.c: Regenerated. + * generated/reshape_r16.c: Regenerated. + * generated/reshape_r4.c: Regenerated. + * generated/reshape_r8.c: Regenerated. + * generated/spread_r4.c: Regenerated. + +2008-10-13 Jerry DeLisle + + PR libfortran/37753 + * io/transfer.c (unformatted_read): CONVERT_NATIVE + is the usual case. Check for kind==1 for non-byte-reversing + operation. + (unformatted_write): Likewise. + +2008-10-08 Jerry DeLisle + Steve Ellcey + + * configure: Regenerate for new libtool. + * Makefile.in: Ditto. + +2008-09-25 Jerry DeLisle + + * runtime/compile_options.c (init_compile_options): + Sync flags with front end. + +2008-09-22 Jerry DeLisle + H. J. Lu + + * mk-sik-inc.sh: Make -Wunused-variable proof. + * mk-srk-inc.sh: Make -Wunused-variable proof. + +2008-09-10 Tobias Burnus + + * mk-kinds-h.sh: Make -Wunused-variable proof. + +2008-09-07 Thomas Koenig + + PR fortran/37203 + * intrinsics/reshape_generic.c: Add checking on + out-of-bounds and duplicate values of order argument. + * m4/reshape.m4: Likewise. + * generated/reshape_c10.c: Regenerated. + * generated/reshape_c16.c: Regenerated. + * generated/reshape_c4.c: Regenerated. + * generated/reshape_c8.c: Regenerated. + * generated/reshape_i16.c: Regenerated. + * generated/reshape_i4.c: Regenerated. + * generated/reshape_i8.c: Regenerated. + * generated/reshape_r10.c: Regenerated. + * generated/reshape_r16.c: Regenerated. + * generated/reshape_r4.c: Regenerated. + * generated/reshape_r8.c: Regenerated. + +2008-09-06 Tobias Burnus + + * libgfortran.h (likely,unlikely): New makros. + (runtime_warning_at,__mingw_snprintf): Add __attribute__(format()). + * m4/spread.m4 (spread_'rtype_code`): Use unlikely for bounds_check. + * m4/iforeach.m4 (name`'rtype_qual`_'atype_code): Ditto. + * m4/matmull.m4 (matmul_'rtype_code`): Ditto. + * m4/ifunction_logical.m4 (name`'rtype_qual`_'atype_code): Ditto. + * m4/ifunction.m4 (name`'rtype_qual`_'atype_code): Ditto. + * m4/matmul.m4 (matmul_'rtype_code`): Ditto. + + * generated/minval_r8.c: Regenerated. + * generated/spread_r10.c: Regenerated. + * generated/minloc1_16_r16.c: Regenerated. + * generated/maxloc1_4_r8.c: Regenerated. + * generated/sum_i8.c: Regenerated. + * generated/any_l16.c: Regenerated. + * generated/spread_i8.c: Regenerated. + * generated/maxval_i2.c: Regenerated. + * generated/any_l2.c: Regenerated. + * generated/product_r4.c: Regenerated. + * generated/maxloc1_8_i4.c: Regenerated. + * generated/maxloc0_4_r4.c: Regenerated. + * generated/all_l1.c: Regenerated. + * generated/matmul_r8.c: Regenerated. + * generated/product_i2.c: Regenerated. + * generated/minloc0_4_r16.c: Regenerated. + * generated/minloc0_4_i1.c: Regenerated. + * generated/maxloc0_4_r16.c: Regenerated. + * generated/maxloc0_4_i2.c: Regenerated. + * generated/minloc1_8_r16.c: Regenerated. + * generated/maxloc1_8_r16.c: Regenerated. + * generated/maxloc0_8_i8.c: Regenerated. + * generated/sum_r16.c: Regenerated. + * generated/sum_i1.c: Regenerated. + * generated/minloc1_4_r8.c: Regenerated. + * generated/maxloc1_16_r16.c: Regenerated. + * generated/minloc1_16_i4.c: Regenerated. + * generated/maxloc1_16_i4.c: Regenerated. + * generated/minloc0_16_i8.c: Regenerated. + * generated/spread_i1.c: Regenerated. + * generated/maxloc0_16_i8.c: Regenerated. + * generated/maxval_r16.c: Regenerated. + * generated/product_c10.c: Regenerated. + * generated/minloc1_8_i4.c: Regenerated. + * generated/minloc0_16_i16.c: Regenerated. + * generated/matmul_r16.c: Regenerated. + * generated/minloc0_4_r4.c: Regenerated. + * generated/all_l2.c: Regenerated. + * generated/product_c4.c: Regenerated. + * generated/sum_r4.c: Regenerated. + * generated/minloc0_4_i2.c: Regenerated. + * generated/spread_c10.c: Regenerated. + * generated/maxloc0_8_i1.c: Regenerated. + * generated/spread_r4.c: Regenerated. + * generated/minloc0_8_i8.c: Regenerated. + * generated/matmul_c8.c: Regenerated. + * generated/all_l16.c: Regenerated. + * generated/minloc1_16_r10.c: Regenerated. + * generated/sum_i2.c: Regenerated. + * generated/minloc0_16_i1.c: Regenerated. + * generated/maxloc0_16_i1.c: Regenerated. + * generated/maxloc1_8_r8.c: Regenerated. + * generated/minval_i16.c: Regenerated. + * generated/spread_i2.c: Regenerated. + * generated/maxval_i4.c: Regenerated. + * generated/minval_i8.c: Regenerated. + * generated/any_l4.c: Regenerated. + * generated/maxloc1_4_i8.c: Regenerated. + * generated/maxloc0_16_i16.c: Regenerated. + * generated/maxloc0_8_r4.c: Regenerated. + * generated/minloc1_4_i16.c: Regenerated. + * generated/maxloc1_4_i16.c: Regenerated. + * generated/minloc0_4_r10.c: Regenerated. + * generated/minloc0_8_i16.c: Regenerated. + * generated/maxloc0_4_r10.c: Regenerated. + * generated/maxloc0_8_i16.c: Regenerated. + * generated/minloc1_8_r10.c: Regenerated. + * generated/product_i4.c: Regenerated. + * generated/minloc0_16_r4.c: Regenerated. + * generated/sum_c16.c: Regenerated. + * generated/maxloc1_8_r10.c: Regenerated. + * generated/maxloc0_16_r4.c: Regenerated. + * generated/minloc1_16_r8.c: Regenerated. + * generated/minloc0_8_i1.c: Regenerated. + * generated/maxloc0_4_i4.c: Regenerated. + * generated/maxloc1_16_r8.c: Regenerated. + * generated/maxloc0_8_i2.c: Regenerated. + * generated/sum_r10.c: Regenerated. + * generated/count_4_l.c: Regenerated. + * generated/sum_c4.c: Regenerated. + * generated/count_8_l.c: Regenerated. + * generated/maxloc1_16_r10.c: Regenerated. + * generated/matmul_i8.c: Regenerated. + * generated/minloc0_16_i2.c: Regenerated. + * generated/minloc1_8_r8.c: Regenerated. + * generated/maxloc0_16_i2.c: Regenerated. + * generated/spread_c4.c: Regenerated. + * generated/matmul_c16.c: Regenerated. + * generated/maxval_r10.c: Regenerated. + * generated/minval_i1.c: Regenerated. + * generated/maxloc1_4_i1.c: Regenerated. + * generated/matmul_r10.c: Regenerated. + * generated/minloc1_4_i8.c: Regenerated. + * generated/minloc0_8_r4.c: Regenerated. + * generated/matmul_l4.c: Regenerated. + * generated/product_i16.c: Regenerated. + * generated/minloc0_16_r16.c: Regenerated. + * generated/all_l4.c: Regenerated. + * generated/minloc0_4_i4.c: Regenerated. + * generated/minloc0_8_i2.c: Regenerated. + * generated/matmul_i1.c: Regenerated. + * generated/minval_r4.c: Regenerated. + * generated/maxloc1_4_r4.c: Regenerated. + * generated/spread_i16.c: Regenerated. + * generated/sum_i4.c: Regenerated. + * generated/maxval_r8.c: Regenerated. + * generated/spread_i4.c: Regenerated. + * generated/minloc1_4_i1.c: Regenerated. + * generated/minval_r16.c: Regenerated. + * generated/minval_i2.c: Regenerated. + * generated/maxloc1_4_i2.c: Regenerated. + * generated/product_r8.c: Regenerated. + * generated/maxloc1_8_i8.c: Regenerated. + * generated/maxloc0_4_r8.c: Regenerated. + * generated/maxloc0_16_r16.c: Regenerated. + * generated/matmul_r4.c: Regenerated. + * generated/sum_c10.c: Regenerated. + * generated/minloc1_4_r16.c: Regenerated. + * generated/maxloc1_4_r16.c: Regenerated. + * generated/minloc0_8_r16.c: Regenerated. + * generated/maxloc0_8_r16.c: Regenerated. + * generated/count_1_l.c: Regenerated. + * generated/maxloc0_8_i4.c: Regenerated. + * generated/matmul_i2.c: Regenerated. + * generated/minloc1_4_r4.c: Regenerated. + * generated/matmul_c10.c: Regenerated. + * generated/minloc0_16_i4.c: Regenerated. + * generated/maxloc0_16_i4.c: Regenerated. + * generated/minloc1_16_i8.c: Regenerated. + * generated/maxloc1_16_i8.c: Regenerated. + * generated/minloc1_4_i2.c: Regenerated. + * generated/matmul_l16.c: Regenerated. + * generated/maxloc1_8_i1.c: Regenerated. + * generated/minloc0_16_r10.c: Regenerated. + * generated/minloc1_8_i8.c: Regenerated. + * generated/minloc0_4_r8.c: Regenerated. + * generated/product_r16.c: Regenerated. + * generated/product_c8.c: Regenerated. + * generated/sum_r8.c: Regenerated. + * generated/minloc0_8_i4.c: Regenerated. + * generated/matmul_c4.c: Regenerated. + * generated/minloc1_16_i16.c: Regenerated. + * generated/spread_r8.c: Regenerated. + * generated/maxloc1_8_r4.c: Regenerated. + * generated/minloc1_16_i1.c: Regenerated. + * generated/maxloc1_16_i1.c: Regenerated. + * generated/spread_r16.c: Regenerated. + * generated/minval_r10.c: Regenerated. + * generated/count_16_l.c: Regenerated. + * generated/minval_i4.c: Regenerated. + * generated/minloc1_8_i1.c: Regenerated. + * generated/maxloc1_4_i4.c: Regenerated. + * generated/maxloc1_8_i2.c: Regenerated. + * generated/maxval_i8.c: Regenerated. + * generated/any_l8.c: Regenerated. + * generated/maxloc0_16_r10.c: Regenerated. + * generated/minloc0_4_i16.c: Regenerated. + * generated/maxloc0_8_r8.c: Regenerated. + * generated/maxloc0_4_i16.c: Regenerated. + * generated/minloc1_4_r10.c: Regenerated. + * generated/minloc1_8_i16.c: Regenerated. + * generated/maxloc1_4_r10.c: Regenerated. + * generated/maxloc1_8_i16.c: Regenerated. + * generated/minloc0_8_r10.c: Regenerated. + * generated/maxloc0_8_r10.c: Regenerated. + * generated/minloc1_16_r4.c: Regenerated. + * generated/maxloc1_16_r4.c: Regenerated. + * generated/minloc0_16_r8.c: Regenerated. + * generated/product_i8.c: Regenerated. + * generated/maxloc0_16_r8.c: Regenerated. + * generated/sum_i16.c: Regenerated. + * generated/count_2_l.c: Regenerated. + * generated/maxloc0_4_i8.c: Regenerated. + * generated/maxloc1_16_i16.c: Regenerated. + * generated/matmul_i4.c: Regenerated. + * generated/minloc1_8_r4.c: Regenerated. + * generated/sum_c8.c: Regenerated. + * generated/minloc1_16_i2.c: Regenerated. + * generated/maxloc1_16_i2.c: Regenerated. + * generated/maxval_i16.c: Regenerated. + * generated/spread_c8.c: Regenerated. + * generated/matmul_i16.c: Regenerated. + * generated/minloc1_4_i4.c: Regenerated. + * generated/maxval_i1.c: Regenerated. + * generated/minloc1_8_i2.c: Regenerated. + * generated/any_l1.c: Regenerated. + * generated/product_c16.c: Regenerated. + * generated/minloc0_8_r8.c: Regenerated. + * generated/matmul_l8.c: Regenerated. + * generated/product_r10.c: Regenerated. + * generated/product_i1.c: Regenerated. + * generated/all_l8.c: Regenerated. + * generated/maxloc0_4_i1.c: Regenerated. + * generated/minloc0_4_i8.c: Regenerated. + * generated/spread_c16.c: Regenerated. + * generated/maxval_r4.c: Regenerated. + +2008-09-01 Jerry DeLisle + + PR libfortran/37301 + PR libfortran/37228 + * io/io.h (write_real_g0): Declare new function to handle g0.d format. + * io/transfer.c (formatted_transfer_scalar): Use new function. + * io/format.c (parse_format_list): Enable g0.d. + * io/write.c (write_a_char4): Delete unused var. + (set_fnode_default): New function to set the default fnode w, d, and e + factored from write_real. (write_real): Use new factored function. + (write_real_g0): New function that sets d to that passed by g0.d format + specifier and set format to ES. Default values for w and e are used + from the new function, set_fnode_default. + +2008-09-01 Jerry DeLisle + + * runtime/error.c: Fix cast for printf. + +2008-08-30 Jerry DeLisle + + PR libfortran/36895 + * io/write.c (namelist_write_newline): New function to correctly mark + next records in both external and internal units. + (nml_write_obj): Use new function. + (namelist_write: Use new function. + +2008-08-19 Tobias Burnus + + PR libfortran/35863 + * io/write.c (write_a_char4): Add missing variable declaration + in HAVE_CRLF block. + +2008-08-15 Jerry DeLisle + + PR libfortran/35863 + * intrinsics/selected_char_kind.c: Enable iso_10646. + * io/read.c (typedef uchar): New type. + (read_utf8): New function to read a single UTF-8 encoded character. + (read_utf8_char1): New function to read UTF-8 into a KIND=1 string. + (read_default_char1): New functio to read default into KIND=1 string. + (read_utf8_char4): New function to read UTF-8 into a KIND=4 string. + (read_default_char4): New function to read UTF-8 into a KIND=4 string. + (read_a): Modify to use the new functions. + (read_a_char4): Modify to use the new functions. + * io/write.c (error.h): Add include. (typedef uchar): New type. + (write_default_char4): New function to default write KIND=4 string. + (write_utf8_char4): New function to UTF-8 write KIND=4 string. + (write_a_char4): Modify to use new functions. + (write_character): Modify to use new functions. + +2008-08-14 H.J. Lu + + PR libfortran/37123 + * intrinsics/cshift0.c (cshift0): Fix 2 typos. + +2008-08-14 Thomas Koenig + + PR libfortran/36886 + * Makefile.am: Added $(i_cshift0_c). + Added $(i_cshift0_c) to gfor_built_specific_src. + Add rule to build from cshift0.m4. + * Makefile.in: Regenerated. + * libgfortran.h: Addedd prototypes for cshift0_i1, + cshift0_i2, cshift0_i4, cshift0_i8, cshift0_i16, + cshift0_r4, cshift0_r8, cshift0_r10, cshift0_r16, + cshift0_c4, cshift0_c8, cshift0_c10, cshift0_c16. + Define Macros GFC_UNALIGNED_C4 and GFC_UNALIGNED_C8. + * intrinsics/cshift0.c: Remove helper functions for + the innter shift loop. + (cshift0): Call specific functions depending on type + of array argument. Only call specific functions for + correct alignment for other types. + * m4/cshift0.m4: New file. + * generated/cshift0_i1.c: New file. + * generated/cshift0_i2.c: New file. + * generated/cshift0_i4.c: New file. + * generated/cshift0_i8:.c New file. + * generated/cshift0_i16.c: New file. + * generated/cshift0_r4.c: New file. + * generated/cshift0_r8.c: New file. + * generated/cshift0_r10.c: New file. + * generated/cshift0_r16.c: New file. + * generated/cshift0_c4.c: New file. + * generated/cshift0_c8.c: New file. + * generated/cshift0_c10.c: New file. + * generated/cshift0_c16.c: New file. + +2008-07-27 Tobias Burnus + + PR fortran/36132 + PR fortran/29952 + PR fortran/36909 + * runtime/error.c: New function runtime_error_at. + * gfortran.map: Ditto. + * libgfortran.h: Ditto. + +2008-07-22 Jerry DeLisle + + PR fortran/36582 + * io/list_read.c: If variable rank is zero, do not adjust the found + namelist object pointer. + +2008-07-22 Daniel Kraft + + PR fortran/29835 + * io/format.c (struct format_data): New member error_element. + (unexpected_element): Added '%c' to message. + (next_char): Keep track of last parsed character in fmt->error_element. + (format_error): If the message is unexpected_element, output the + offending character, too. + +2008-07-22 Thomas Koenig + + PR libfortran/36890 + * io/file_pos.c: Declare READ_CHUNK as signed to avoid + signed/unsigned comparison warning in formatted_backspace. + +2008-07-21 Thomas Koenig + + PR libfortran/36773 + * intrinsics/cshift0.c (cshift0): Return early if size of array + is zero. + * intrinsics/eoshift0.c (eoshift0): Return early if size of + return array is zero. + * intrinsics/eoshift2.c (eoshift2): Likewise. + * m4/eoshift1.m4 (eoshift1): Return early if size of array + is zero. + * m4/eoshift3.m4 (eoshift3): Likewise. + * m4/eoshift2.m4 (eoshift2): Return early if size of return + array is zero. + * m4/eoshift4.m4 (eoshift2): Return early if size of return + array is zero. + * generated/cshift1_16.c: Regenerated. + * generated/cshift1_4.c: Regenerated. + * generated/cshift1_8.c: Regenerated. + * generated/eoshift1_16.c: Regenerated. + * generated/eoshift1_4.c: Regenerated. + * generated/eoshift1_8.c: Regenerated. + * generated/eoshift3_16.c: Regenerated. + * generated/eoshift3_4.c: Regenerated. + * generated/eoshift3_8.c: Regenerated. + +2008-07-20 Jerry DeLisle + + PR fortran/36857 + * io/write_float.def: Comment out locale dependent code and fix general + comments. + +2008-07-07 Thomas Koenig + + PR fortran/36341 + PR fortran/34670 + * m4/matmul.m4: Add bounds checking. + * m4/matmull.m4: Likewise. + * generated/matmul_c10.c: Regenerated. + * generated/matmul_c16.c: Regenerated. + * generated/matmul_c4.c: Regenerated. + * generated/matmul_c8.c: Regenerated. + * generated/matmul_i1.c: Regenerated. + * generated/matmul_i16.c: Regenerated. + * generated/matmul_i2.c: Regenerated. + * generated/matmul_i4.c: Regenerated. + * generated/matmul_i8.c: Regenerated. + * generated/matmul_l16.c: Regenerated. + * generated/matmul_l4.c: Regenerated. + * generated/matmul_l8.c: Regenerated. + * generated/matmul_r10.c: Regenerated. + * generated/matmul_r16.c: Regenerated. + * generated/matmul_r4.c: Regenerated. + * generated/matmul_r8.c: Regenerated. + +2008-07-07 Ralf Wildenhues + + * acinclude.m4 (LIBGFOR_CHECK_GTHR_DEFAULT): Fix configure cache + variable name. + * configure: Regenerate. + +2008-07-01 Jerry DeLisle + + PR fortran/36676 + * io/list_read.c (find_nml_name): Use eat_separator instead of eat_line. + +2008-06-28 Jerry DeLisle + + PR fortran/36657 + * io/list_read.c (read_character): Check for '!' along with separators. + (find_nml_name): Likewise and eat the comment if found. + +2008-06-17 Ralf Wildenhues + + * configure: Regenerate. + +2008-06-16 Jerry DeLisle + + PR fortran/36546 + * io/list_read.c (eat_separator): Add tab character to condition + for looping past whitespace. + +2008-06-14 Jerry DeLisle + + PR fortran/36515 + * libgfortran.h (compile_options_t): Add int range_check to structure. + * runtime/compile_options.c (set_options): Add range_check option. + (init_compile_options): Likewise. + *io/read.c (read_decimal): Change overflow checks to include + range_check. + +2008-06-13 Jerry DeLisle + + PR fortran/36538 + * io/list_read.c (namelist_read): Add eat_separator to eliminate leading + tabs. + +2008-06-13 Jerry DeLisle + + PR fortran/35863 + * libgfortran.h: Change l8_to_l4_offset to big_endian and add endian_off. + * runtime/main.c: Fix error in comment. Change l8_to_l4_offset to + big_endian. (determine_endianness): Add endian_off and set its value + according to big_endian. + * gfortran.map: Add symbol for new _gfortran_transfer_character_wide. + * io/io.h: Add prototype declarations for new functions. + * io/list_read.c (list_formatted_read_scalar): Modify to handle kind=4. + (list_formatted_read): Calculate stride based on kind for character type + and use it when calling list_formatted_read_scalar. + * io/inquire.c (inquire_via_unit): Change l8_to_l4_offset to big_endian. + * io/open.c (st_open): Change l8_to_l4_offset to big_endian. + * io/read.c (read_a_char4): New function to handle formatted read. + * io/write.c: Define GFC_CHAR4(x) to improve readability of code. + (write_a_char4): New function to handle formatted write. + (write_character): Modify to accept the kind parameter and adjust for + endianess of the machine. (list_formatted_write): Calculate the stride + resulting from the kind and adjust the list_formatted_write_scalar call + accordingly. (nml_write_obj): Adjust calls to write_character. + (namelist_write): Likewise. + * io/transfer.c (formatted_transfer_scaler): Rename 'len' argument to + 'kind' argument to better describe what it is. Add calls to new + functions for kind == 4. (formatted_transfer): Modify to handle the case + of type character and kind equals 4 to pass in the kind to the transfer + routines. (transfer_character_wide): Add this new function. + (transfer_array): Don't set kind to the character string length. Adjust + strides bases on character kind. + (unformatted_read): Adjust size based on kind for character types. + (unformatted_write): Likewise. (data_transfer_init): Change + l8_to_l4_offset to big_endian. + io/fbuf.c (fbuf_seek): Add cast to eliminate warning. + +2008-06-13 Tobias Burnus + + * configure.ac (AM_CFLAGS): Remove -Werror again. + * configure: Regenerate. + +2008-06-13 Tobias Burnus + + PR libgfortran/36518 + * configure.ac (AM_CFLAGS): Add -Werror. + * configure: Regenerate. + * m4/ifunction_logical.m4: Cast "n" to "(int)". + * generated/any_l16.c: Regenerate. + * generated/any_l2.c: Regenerate. + * generated/all_l1.c: Regenerate. + * generated/all_l2.c: Regenerate. + * generated/all_l16.c: Regenerate. + * generated/any_l4.c: Regenerate. + * generated/count_4_l.c: Regenerate. + * generated/count_8_l.c: Regenerate. + * generated/all_l4.c: Regenerate. + * generated/count_1_l.c: Regenerate. + * generated/count_16_l.c: Regenerate. + * generated/any_l8.c: Regenerate. + * generated/count_2_l.c: Regenerate. + * generated/any_l1.c: Regenerate. + * generated/all_l8.c: Regenerate. + +2008-06-13 Tobias Burnus + + PR fortran/36495 + * configure.ac (AM_FCFLAGS): Add "-Werror -fimplicit-none". + * configure: (generated) ditto. + * intrinsics/dprod_r8.f90: Add "implicit none". + +2008-06-07 Jerry DeLisle + + PR libfortran/36420 + PR libfortran/36421 + PR libfortran/36422 + * io/io.h: Add prototype for write_real. + * io/transfer.c (formatted_transfer_scalar): For FMT_G and width zero, + use write_real. + * io/format.c: Add zero width error message. (parse_format_list): Use + error message for FMT_A if followed by FMT_ZERO. Use zero width error + message for FMT_G if mode is READ or if -std=f95 or f2003. (fmormat0): + Fix typo in comment. + * io/write.c(write_a): Set wlen to len if FMT_G and length is zero. + (write_l): Add wlen variable and use it if FMT_G and width is zero. + (write_decimal): If FMT_G, set m to -1 to flag processor dependent + formatting. (write_real): Remove static declaration. + +2008-05-28 Francois-Xavier Coudert + + PR fortran/36319 + * intrinsics/string_intrinsics_inc.c (string_index): Return + correct value for zero-length substring. + * intrinsics/cshift0.c: Add _char4 variant. + * intrinsics/eoshift0.c (eoshift0): Allow filler to be a pattern + wider than a single byte. Add _char4 variant and use above + functionality. + * intrinsics/eoshift2.c (eoshift2): Likewise. + * m4/eoshift1.m4: Likewise. + * m4/eoshift3.m4: Likewise. + * m4/cshift1.m4: Add _char4 variants. + * gfortran.map (GFORTRAN_1.1): Add _gfortran_cshift0_1_char4, + _gfortran_cshift0_2_char4, _gfortran_cshift0_4_char4, + _gfortran_cshift0_8_char4, _gfortran_cshift1_16_char4, + _gfortran_cshift1_4_char4, _gfortran_cshift1_8_char4, + _gfortran_eoshift0_1_char4, _gfortran_eoshift0_2_char4, + _gfortran_eoshift0_4_char4, _gfortran_eoshift0_8_char4, + _gfortran_eoshift1_16_char4, _gfortran_eoshift1_4_char4, + _gfortran_eoshift1_8_char4, _gfortran_eoshift2_1_char4, + _gfortran_eoshift2_2_char4, _gfortran_eoshift2_4_char4, + _gfortran_eoshift2_8_char4, _gfortran_eoshift3_16_char4, + _gfortran_eoshift3_4_char4 and _gfortran_eoshift3_8_char4. + * generated/eoshift3_4.c: Regenerate. + * generated/eoshift1_8.c: Regenerate. + * generated/eoshift1_16.c: Regenerate. + * generated/cshift1_4.c: Regenerate. + * generated/eoshift1_4.c: Regenerate. + * generated/eoshift3_8.c: Regenerate. + * generated/eoshift3_16.c: Regenerate. + * generated/cshift1_8.c: Regenerate. + * generated/cshift1_16.c: Regenerate. + +2008-05-25 Tobias Burnus + + PR fortran/32600 + * intrinsics/iso_c_binding.c (c_f_procpointer): Remove. + * intrinsics/iso_c_binding.h (c_f_procpointer): Remove. + * gfortran.map (c_f_procpointer): Remove. + +2008-05-22 Thomas Koenig + + PR libgfortran/36302 + * gfortran.map (GFORTRAN_1.1): Add _gfortran_eoshift0_16, + _gfortran_eoshift0_16_char, _gfortran_eoshift2_16, + _gfortran_eoshift2_16_char,_gfortran_cshift0_16, + _gfortran_cshift0_16_char. Sort alphabetically. + * intrinsics/eoshift0.c: Add function for kind=16 integer. + * intrinsics/eoshift2.c: Likewise. + * intrinsics/cshift0.c: Likewise. + +2008-05-18 Thomas Koenig + + * m4/in_pack.m4 (internal_pack_'rtype_code`): Destination + pointer is restrict. + * m4/transpose.m4 (transpose_'rtype_code`): Likewise. + * m4/pack.m4 (pack_'rtype_code`): Likewise. + * m4/spread.m4 (spread_'rtype_code`): Likewise. + (spread_scalar_'rtype_code`): Likewise. + * m4/iforeach.m4 (name`'rtype_qual`_'atype_code): Likewise. + * m4/eoshift1.m4 (eoshift1): Likewise. + * m4/eoshift3.m4 (eoshift3): Likewise. + * m4/in_unpack.m4 (internal_unpack_'rtype_ccode`): Likewise. + * m4/unpack.m4 (unpack0_'rtype_code`): Likewise. + (unpack1_'rtype_code`): Likewise. + * intrinsics/pack_generic.c (pack_generic.c): Likewise. + * intrinsics/unpack_generic.c (unpack_internal): Likewise. + * intrinsics/eoshift0.c (eoshift0): Likewise. + * intrinsics/eoshift2.c (eoshift2): Likewise. + * intrinsics/reshape_generic.c (reshape_internal): Likewise. + * intrinsics/reshape_packed.c (reshape_packed): Likewise. + * generated/eoshift1_16.c: Regenerated. + * generated/eoshift1_4.c: Regenerated. + * generated/eoshift1_8.c: Regenerated. + * generated/eoshift3_16.c: Regenerated. + * generated/eoshift3_4.c: Regenerated. + * generated/eoshift3_8.c: Regenerated. + * generated/in_pack_c10.c: Regenerated. + * generated/in_pack_c16.c: Regenerated. + * generated/in_pack_c4.c: Regenerated. + * generated/in_pack_c8.c: Regenerated. + * generated/in_pack_i1.c: Regenerated. + * generated/in_pack_i16.c: Regenerated. + * generated/in_pack_i2.c: Regenerated. + * generated/in_pack_i4.c: Regenerated. + * generated/in_pack_i8.c: Regenerated. + * generated/in_pack_r10.c: Regenerated. + * generated/in_pack_r16.c: Regenerated. + * generated/in_pack_r4.c: Regenerated. + * generated/in_pack_r8.c: Regenerated. + * generated/in_unpack_c10.c: Regenerated. + * generated/in_unpack_c16.c: Regenerated. + * generated/in_unpack_c4.c: Regenerated. + * generated/in_unpack_c8.c: Regenerated. + * generated/in_unpack_i1.c: Regenerated. + * generated/in_unpack_i16.c: Regenerated. + * generated/in_unpack_i2.c: Regenerated. + * generated/in_unpack_i4.c: Regenerated. + * generated/in_unpack_i8.c: Regenerated. + * generated/in_unpack_r10.c: Regenerated. + * generated/in_unpack_r16.c: Regenerated. + * generated/in_unpack_r4.c: Regenerated. + * generated/in_unpack_r8.c: Regenerated. + * generated/maxloc0_16_i1.c: Regenerated. + * generated/maxloc0_16_i16.c: Regenerated. + * generated/maxloc0_16_i2.c: Regenerated. + * generated/maxloc0_16_i4.c: Regenerated. + * generated/maxloc0_16_i8.c: Regenerated. + * generated/maxloc0_16_r10.c: Regenerated. + * generated/maxloc0_16_r16.c: Regenerated. + * generated/maxloc0_16_r4.c: Regenerated. + * generated/maxloc0_16_r8.c: Regenerated. + * generated/maxloc0_4_i1.c: Regenerated. + * generated/maxloc0_4_i16.c: Regenerated. + * generated/maxloc0_4_i2.c: Regenerated. + * generated/maxloc0_4_i4.c: Regenerated. + * generated/maxloc0_4_i8.c: Regenerated. + * generated/maxloc0_4_r10.c: Regenerated. + * generated/maxloc0_4_r16.c: Regenerated. + * generated/maxloc0_4_r4.c: Regenerated. + * generated/maxloc0_4_r8.c: Regenerated. + * generated/maxloc0_8_i1.c: Regenerated. + * generated/maxloc0_8_i16.c: Regenerated. + * generated/maxloc0_8_i2.c: Regenerated. + * generated/maxloc0_8_i4.c: Regenerated. + * generated/maxloc0_8_i8.c: Regenerated. + * generated/maxloc0_8_r10.c: Regenerated. + * generated/maxloc0_8_r16.c: Regenerated. + * generated/maxloc0_8_r4.c: Regenerated. + * generated/maxloc0_8_r8.c: Regenerated. + * generated/minloc0_16_i1.c: Regenerated. + * generated/minloc0_16_i16.c: Regenerated. + * generated/minloc0_16_i2.c: Regenerated. + * generated/minloc0_16_i4.c: Regenerated. + * generated/minloc0_16_i8.c: Regenerated. + * generated/minloc0_16_r10.c: Regenerated. + * generated/minloc0_16_r16.c: Regenerated. + * generated/minloc0_16_r4.c: Regenerated. + * generated/minloc0_16_r8.c: Regenerated. + * generated/minloc0_4_i1.c: Regenerated. + * generated/minloc0_4_i16.c: Regenerated. + * generated/minloc0_4_i2.c: Regenerated. + * generated/minloc0_4_i4.c: Regenerated. + * generated/minloc0_4_i8.c: Regenerated. + * generated/minloc0_4_r10.c: Regenerated. + * generated/minloc0_4_r16.c: Regenerated. + * generated/minloc0_4_r4.c: Regenerated. + * generated/minloc0_4_r8.c: Regenerated. + * generated/minloc0_8_i1.c: Regenerated. + * generated/minloc0_8_i16.c: Regenerated. + * generated/minloc0_8_i2.c: Regenerated. + * generated/minloc0_8_i4.c: Regenerated. + * generated/minloc0_8_i8.c: Regenerated. + * generated/minloc0_8_r10.c: Regenerated. + * generated/minloc0_8_r16.c: Regenerated. + * generated/minloc0_8_r4.c: Regenerated. + * generated/minloc0_8_r8.c: Regenerated. + * generated/pack_c10.c: Regenerated. + * generated/pack_c16.c: Regenerated. + * generated/pack_c4.c: Regenerated. + * generated/pack_c8.c: Regenerated. + * generated/pack_i1.c: Regenerated. + * generated/pack_i16.c: Regenerated. + * generated/pack_i2.c: Regenerated. + * generated/pack_i4.c: Regenerated. + * generated/pack_i8.c: Regenerated. + * generated/pack_r10.c: Regenerated. + * generated/pack_r16.c: Regenerated. + * generated/pack_r4.c: Regenerated. + * generated/pack_r8.c: Regenerated. + * generated/spread_c10.c: Regenerated. + * generated/spread_c16.c: Regenerated. + * generated/spread_c4.c: Regenerated. + * generated/spread_c8.c: Regenerated. + * generated/spread_i1.c: Regenerated. + * generated/spread_i16.c: Regenerated. + * generated/spread_i2.c: Regenerated. + * generated/spread_i4.c: Regenerated. + * generated/spread_i8.c: Regenerated. + * generated/spread_r10.c: Regenerated. + * generated/spread_r16.c: Regenerated. + * generated/spread_r4.c: Regenerated. + * generated/spread_r8.c: Regenerated. + * generated/transpose_c10.c: Regenerated. + * generated/transpose_c16.c: Regenerated. + * generated/transpose_c4.c: Regenerated. + * generated/transpose_c8.c: Regenerated. + * generated/transpose_i16.c: Regenerated. + * generated/transpose_i4.c: Regenerated. + * generated/transpose_i8.c: Regenerated. + * generated/transpose_r10.c: Regenerated. + * generated/transpose_r16.c: Regenerated. + * generated/transpose_r4.c: Regenerated. + * generated/transpose_r8.c: Regenerated. + * generated/unpack_c10.c: Regenerated. + * generated/unpack_c16.c: Regenerated. + * generated/unpack_c4.c: Regenerated. + * generated/unpack_c8.c: Regenerated. + * generated/unpack_i1.c: Regenerated. + * generated/unpack_i16.c: Regenerated. + * generated/unpack_i2.c: Regenerated. + * generated/unpack_i4.c: Regenerated. + * generated/unpack_i8.c: Regenerated. + * generated/unpack_r10.c: Regenerated. + * generated/unpack_r16.c: Regenerated. + * generated/unpack_r4.c: Regenerated. + * generated/unpack_r8.c: Regenerated. + +2008-05-18 Francois-Xavier Coudert + + * runtime/select.c: Moved content to select_inc.c. Include it. + Add macros for different character types. + * runtime/select_inc.c: New file. + * runtime/convert_char.c: New file. + * intrinsics/pack_generic.c (pack_char4, pack_s_char4): New + functions. + * intrinsics/transpose_generic.c (transpose_char4): New function. + * intrinsics/spread_generic.c (spread_char4, spread_char4_scalar): + New functions. + * intrinsics/unpack_generic.c (unpack1_char4, unpack0_char4): + New functions. + * intrinsics/reshape_generic.c (reshape_char): Use + gfc_charlen_type as type for length variables. + (reshape_char4): New function. + * gfortran.map (GFORTRAN_1.1): Add _gfortran_select_string_char4, + _gfortran_convert_char1_to_char4, _gfortran_convert_char4_to_char1, + _gfortran_transpose_char4, _gfortran_spread_char4, + _gfortran_spread_char4_scalar, _gfortran_reshape_char4, + _gfortran_pack_char4, _gfortran_pack_s_char4, + _gfortran_unpack0_char4 and _gfortran_unpack1_char4. + * Makefile.am: Add runtime/convert_char.c. + * Makefile.in: Regenerate. + +2008-05-17 Thomas Koenig + + * io/list_read.c (list_formatted_read_scalar): Declare + type as volatile to shut up compiler warning. + +2008-05-16 Janne Blomqvist + + PR libfortran/25561 + * io/io.h (struct fbuf): Change pointer to position offset. + * io/fbuf.c (fbuf_init): Reduce default size of buffer, ptr=>pos + changes. + (fbuf_reset): ptr=>pos changes. + (fbuf_alloc): If the request doesn't fit, don't waste memory by + keeping flushed bytes. ptr=>pos changes. + (fbuf_flush): ptr=>pos changes. + (fbuf_seek): Don't seek past the left tab limit, don't update active + byte count. + * io/open.c (new_unit): If RECL has been specified, used that as + initial buffer size. + +2008-05-16 Janne Blomqvist + + PR libfortran/35632 + * io/open.c (new_unit): Set stream position to correct value. + +2008-05-15 Janne Blomqvist + + PR libfortran/25561 + * Makefile.am: Add fbuf.c to gfor_io_src. + * Makefile.in: Regenerate. + * io/io.h (read_block): Remove. + (struct stream): Remove alloc_r_at function pointer. + (salloc_r): Remove. + (salloc_r_at): Remove. + (salloc_w_at): Remove. + (salloc_w): Remove offset argument. + (struct fbuf): New struct for format buffer. + (struct gfc_unit): Add fbuf. + (read_block_form): New prototype. + (fbuf_init): Likewise. + (fbuf_destroy): Likewise. + (fbuf_reset): Likewise. + (fbuf_alloc): Likewise. + (fbuf_flush): Likewise. + (fbuf_seek): Likewise. + * io/file_pos.c (formatted_backspace): Change to use sread. + (unformatted_backspace): Likewise. + (st_backspace): Flush format buffer. + (st_rewind): Likewise. + * io/list_read.c (next_char): Likewise. + (nml_query): Tidying, flush format buffer. + * io/open.c (new_unit): Init format buffer. + * io/read.c (read_l): Change to use read_block_form. + (read_a): Likewise. + (read_decimal): Likewise. + (read_radix): Likewise. + (read_f): Likewise. + (read_x): Empty reads also for stream I/O. + * io/transfer.c (read_sf): Change to use sread. + (read_block): Rename to read_block_form, change prototype, use sread. + (read_block_direct): Don't seek stream files. + (write_block): Change to use fbuf if external file, don't seek stream + files. + (write_buf): Don't seek stream files. + (formatted_transfer_scalar): Use fbuf for external files. + (us_read): Change to use sread. + (pre_position): Do nothing for stream I/O. + (data_transfer_init): Flush fbuf when switching from write to read, if + POS is specified, seek stream file to correct offset. + (skip_record): Change to use sread. + (min_off): New function. + (next_record_r): Change to use sread. + (next_record_w): Change to use sset/sseek, flush fbuf. + (finalize_transfer): Flush fbuf. + * io/unit.c (init_units): Init fbuf for stdout, stderr. + (close_unit_1): Destroy fbuf. + (finish_last_advance_record): Flush fbuf, no need to seek. + * io/unix.c (fd_alloc_r_at): Remove unused where argument. + (fd_alloc_w_at): Likewise. + (fd_read): Remove third argument to fd_alloc_r_at. + (fd_write): Remove third argument to fd_alloc_w_at. + (fd_sset): Likewise. + (fd_open): Don't set alloc_r_at. + (mem_alloc_r_at): Remove unused where argument. + (mem_alloc_w_at): Likewise. + (mem_read): Don't incorrectly return previous errno, remove unused + third argument to alloc function. + (mem_write): Likewise. + (mem_set): Likewise. + (open_internal): Don't set alloc_r_at pointer. + * io/fbuf.c: New file. + +2008-05-14 Francois-Xavier Coudert + + * libgfortran.h (gfc_char4_t): New type. + (GFC_SIZE_OF_CHAR_KIND): New macro. + (compare_string): Adjust prototype. + (compare_string_char4): New prototype. + * gfortran.map (GFORTRAN_1.1): Add _gfortran_adjustl_char4, + _gfortran_adjustr_char4, _gfortran_compare_string_char4, + _gfortran_concat_string_char4, _gfortran_string_index_char4, + _gfortran_string_len_trim_char4, _gfortran_string_minmax_char4, + _gfortran_string_scan_char4, _gfortran_string_trim_char4 and + _gfortran_string_verify_char4. + * intrinsics/string_intrinsics_inc.c: New file from content of + string_intrinsics.c with types replaced by macros. + * intrinsics/string_intrinsics.c: Move content to + string_intrinsics_inc.c. + +2008-05-11 Jerry DeLisle + + PR libfortran/36202 + * io/list_read (eat_separator): Handle the CR-LF case correctly. + +2008-05-09 Julian Brown + + * Makefile.am (LTLDFLAGS): New. + (libgfortran_la_LDFLAGS): Use above. + * Makefile.in: Regenerate. + +2008-05-05 Jerry DeLisle + + PR libfortran/36131 + * io/transfer.c (formatted_transfer_scalar): Revert patch for PR34974. + (next_record_w): Likewise. + +2008-05-04 Thomas Koenig + + PR libfortran/35995 + * m4/ifunction_logical.m4: If the extent of "array" + is less than zero, set it to zero. Use an explicit + flag for breaking out of the main loop to avoid, because + the data pointer for "array" may be NULL for an empty + array. + * m4/ifunction.m4: Likewise. + * generated/all_l1.c: Regenerated. + * generated/all_l16.c: Regenerated. + * generated/all_l2.c: Regenerated. + * generated/all_l4.c: Regenerated. + * generated/all_l8.c: Regenerated. + * generated/any_l1.c: Regenerated. + * generated/any_l16.c: Regenerated. + * generated/any_l2.c: Regenerated. + * generated/any_l4.c: Regenerated. + * generated/any_l8.c: Regenerated. + * generated/count_16_l.c: Regenerated. + * generated/count_1_l.c: Regenerated. + * generated/count_2_l.c: Regenerated. + * generated/count_4_l.c: Regenerated. + * generated/count_8_l.c: Regenerated. + * generated/maxloc1_16_i1.c: Regenerated. + * generated/maxloc1_16_i16.c: Regenerated. + * generated/maxloc1_16_i2.c: Regenerated. + * generated/maxloc1_16_i4.c: Regenerated. + * generated/maxloc1_16_i8.c: Regenerated. + * generated/maxloc1_16_r10.c: Regenerated. + * generated/maxloc1_16_r16.c: Regenerated. + * generated/maxloc1_16_r4.c: Regenerated. + * generated/maxloc1_16_r8.c: Regenerated. + * generated/maxloc1_4_i1.c: Regenerated. + * generated/maxloc1_4_i16.c: Regenerated. + * generated/maxloc1_4_i2.c: Regenerated. + * generated/maxloc1_4_i4.c: Regenerated. + * generated/maxloc1_4_i8.c: Regenerated. + * generated/maxloc1_4_r10.c: Regenerated. + * generated/maxloc1_4_r16.c: Regenerated. + * generated/maxloc1_4_r4.c: Regenerated. + * generated/maxloc1_4_r8.c: Regenerated. + * generated/maxloc1_8_i1.c: Regenerated. + * generated/maxloc1_8_i16.c: Regenerated. + * generated/maxloc1_8_i2.c: Regenerated. + * generated/maxloc1_8_i4.c: Regenerated. + * generated/maxloc1_8_i8.c: Regenerated. + * generated/maxloc1_8_r10.c: Regenerated. + * generated/maxloc1_8_r16.c: Regenerated. + * generated/maxloc1_8_r4.c: Regenerated. + * generated/maxloc1_8_r8.c: Regenerated. + * generated/maxval_i1.c: Regenerated. + * generated/maxval_i16.c: Regenerated. + * generated/maxval_i2.c: Regenerated. + * generated/maxval_i4.c: Regenerated. + * generated/maxval_i8.c: Regenerated. + * generated/maxval_r10.c: Regenerated. + * generated/maxval_r16.c: Regenerated. + * generated/maxval_r4.c: Regenerated. + * generated/maxval_r8.c: Regenerated. + * generated/minloc1_16_i1.c: Regenerated. + * generated/minloc1_16_i16.c: Regenerated. + * generated/minloc1_16_i2.c: Regenerated. + * generated/minloc1_16_i4.c: Regenerated. + * generated/minloc1_16_i8.c: Regenerated. + * generated/minloc1_16_r10.c: Regenerated. + * generated/minloc1_16_r16.c: Regenerated. + * generated/minloc1_16_r4.c: Regenerated. + * generated/minloc1_16_r8.c: Regenerated. + * generated/minloc1_4_i1.c: Regenerated. + * generated/minloc1_4_i16.c: Regenerated. + * generated/minloc1_4_i2.c: Regenerated. + * generated/minloc1_4_i4.c: Regenerated. + * generated/minloc1_4_i8.c: Regenerated. + * generated/minloc1_4_r10.c: Regenerated. + * generated/minloc1_4_r16.c: Regenerated. + * generated/minloc1_4_r4.c: Regenerated. + * generated/minloc1_4_r8.c: Regenerated. + * generated/minloc1_8_i1.c: Regenerated. + * generated/minloc1_8_i16.c: Regenerated. + * generated/minloc1_8_i2.c: Regenerated. + * generated/minloc1_8_i4.c: Regenerated. + * generated/minloc1_8_i8.c: Regenerated. + * generated/minloc1_8_r10.c: Regenerated. + * generated/minloc1_8_r16.c: Regenerated. + * generated/minloc1_8_r4.c: Regenerated. + * generated/minloc1_8_r8.c: Regenerated. + * generated/minval_i1.c: Regenerated. + * generated/minval_i16.c: Regenerated. + * generated/minval_i2.c: Regenerated. + * generated/minval_i4.c: Regenerated. + * generated/minval_i8.c: Regenerated. + * generated/minval_r10.c: Regenerated. + * generated/minval_r16.c: Regenerated. + * generated/minval_r4.c: Regenerated. + * generated/minval_r8.c: Regenerated. + * generated/product_c10.c: Regenerated. + * generated/product_c16.c: Regenerated. + * generated/product_c4.c: Regenerated. + * generated/product_c8.c: Regenerated. + * generated/product_i1.c: Regenerated. + * generated/product_i16.c: Regenerated. + * generated/product_i2.c: Regenerated. + * generated/product_i4.c: Regenerated. + * generated/product_i8.c: Regenerated. + * generated/product_r10.c: Regenerated. + * generated/product_r16.c: Regenerated. + * generated/product_r4.c: Regenerated. + * generated/product_r8.c: Regenerated. + * generated/sum_c10.c: Regenerated. + * generated/sum_c16.c: Regenerated. + * generated/sum_c4.c: Regenerated. + * generated/sum_c8.c: Regenerated. + * generated/sum_i1.c: Regenerated. + * generated/sum_i16.c: Regenerated. + * generated/sum_i2.c: Regenerated. + * generated/sum_i4.c: Regenerated. + * generated/sum_i8.c: Regenerated. + * generated/sum_r10.c: Regenerated. + * generated/sum_r16.c: Regenerated. + * generated/sum_r4.c: Regenerated. + * generated/sum_r8.c: Regenerated. + +2008-05-04 Thomas Koenig + + PR libfortran/35990 + * intrinsics/pack_generic.c: Really commit. + +2008-05-04 Thomas Koenig + + PR libfortran/35990 + * intrinsics/pack_generic.c: If an extent of the source + array is less then zero, set it to zero. Set the source + pointer to NULL if the source size is zero. Set the total + number of elements to zero if the vector has an extent + less or equal to zero. + * m4/pack.m4: Set the source pointer to NULL if the + source array is zero-sized. Set the total number of + elemements to zero if the vector has an extent less or + equal to zero. + * generated/pack_i1.c: Regenerated. + * generated/pack_i2.c: Regenerated. + * generated/pack_i4.c: Regenerated. + * generated/pack_i8.c: Regenerated. + * generated/pack_i16.c: Regenerated. + * generated/pack_r4.c: Regenerated. + * generated/pack_r8.c: Regenerated. + * generated/pack_r10.c: Regenerated. + * generated/pack_r16.c: Regenerated. + * generated/pack_c4.c: Regenerated. + * generated/pack_c8.c: Regenerated. + * generated/pack_c10.c: Regenerated. + * generated/pack_c16.c: Regenerated. + +2008-05-01 Jerry DeLisle + + PR libfortran/36094 + * runtime/error.c (show_locus): Provide modified error message when + filename has not yet been associated with a unit number. + * io/open.c (encoding_opt[]): Comment out "utf-8" option and add TODO. + +2008-04-30 Francois-Xavier Coudert + + * intrinsics/selected_char_kind.c: New file. + * gfortran.map (GFORTRAN_1.1): Add _gfortran_selected_char_kind. + * Makefile.am: Add intrinsics/selected_char_kind.c. + * Makefile.in: Regenerate. + +2008-04-30 Thomas Koenig + + PR libfortran/35993 + * ifunction.m4 (SCALAR_ARRAY_FUNCTION): Use correct + implementation for multi-dimensional return arrays when + the mask is .false. + * generated/maxloc1_16_i1.c: Regenerated. + * generated/maxloc1_16_i16.c: Regenerated. + * generated/maxloc1_16_i2.c: Regenerated. + * generated/maxloc1_16_i4.c: Regenerated. + * generated/maxloc1_16_i8.c: Regenerated. + * generated/maxloc1_16_r10.c: Regenerated. + * generated/maxloc1_16_r16.c: Regenerated. + * generated/maxloc1_16_r4.c: Regenerated. + * generated/maxloc1_16_r8.c: Regenerated. + * generated/maxloc1_4_i1.c: Regenerated. + * generated/maxloc1_4_i16.c: Regenerated. + * generated/maxloc1_4_i2.c: Regenerated. + * generated/maxloc1_4_i4.c: Regenerated. + * generated/maxloc1_4_i8.c: Regenerated. + * generated/maxloc1_4_r10.c: Regenerated. + * generated/maxloc1_4_r16.c: Regenerated. + * generated/maxloc1_4_r4.c: Regenerated. + * generated/maxloc1_4_r8.c: Regenerated. + * generated/maxloc1_8_i1.c: Regenerated. + * generated/maxloc1_8_i16.c: Regenerated. + * generated/maxloc1_8_i2.c: Regenerated. + * generated/maxloc1_8_i4.c: Regenerated. + * generated/maxloc1_8_i8.c: Regenerated. + * generated/maxloc1_8_r10.c: Regenerated. + * generated/maxloc1_8_r16.c: Regenerated. + * generated/maxloc1_8_r4.c: Regenerated. + * generated/maxloc1_8_r8.c: Regenerated. + * generated/maxval_i1.c: Regenerated. + * generated/maxval_i16.c: Regenerated. + * generated/maxval_i2.c: Regenerated. + * generated/maxval_i4.c: Regenerated. + * generated/maxval_i8.c: Regenerated. + * generated/maxval_r10.c: Regenerated. + * generated/maxval_r16.c: Regenerated. + * generated/maxval_r4.c: Regenerated. + * generated/maxval_r8.c: Regenerated. + * generated/minloc1_16_i1.c: Regenerated. + * generated/minloc1_16_i16.c: Regenerated. + * generated/minloc1_16_i2.c: Regenerated. + * generated/minloc1_16_i4.c: Regenerated. + * generated/minloc1_16_i8.c: Regenerated. + * generated/minloc1_16_r10.c: Regenerated. + * generated/minloc1_16_r16.c: Regenerated. + * generated/minloc1_16_r4.c: Regenerated. + * generated/minloc1_16_r8.c: Regenerated. + * generated/minloc1_4_i1.c: Regenerated. + * generated/minloc1_4_i16.c: Regenerated. + * generated/minloc1_4_i2.c: Regenerated. + * generated/minloc1_4_i4.c: Regenerated. + * generated/minloc1_4_i8.c: Regenerated. + * generated/minloc1_4_r10.c: Regenerated. + * generated/minloc1_4_r16.c: Regenerated. + * generated/minloc1_4_r4.c: Regenerated. + * generated/minloc1_4_r8.c: Regenerated. + * generated/minloc1_8_i1.c: Regenerated. + * generated/minloc1_8_i16.c: Regenerated. + * generated/minloc1_8_i2.c: Regenerated. + * generated/minloc1_8_i4.c: Regenerated. + * generated/minloc1_8_i8.c: Regenerated. + * generated/minloc1_8_r10.c: Regenerated. + * generated/minloc1_8_r16.c: Regenerated. + * generated/minloc1_8_r4.c: Regenerated. + * generated/minloc1_8_r8.c: Regenerated. + * generated/minval_i1.c: Regenerated. + * generated/minval_i16.c: Regenerated. + * generated/minval_i2.c: Regenerated. + * generated/minval_i4.c: Regenerated. + * generated/minval_i8.c: Regenerated. + * generated/minval_r10.c: Regenerated. + * generated/minval_r16.c: Regenerated. + * generated/minval_r4.c: Regenerated. + * generated/minval_r8.c: Regenerated. + * generated/product_c10.c: Regenerated. + * generated/product_c16.c: Regenerated. + * generated/product_c4.c: Regenerated. + * generated/product_c8.c: Regenerated. + * generated/product_i1.c: Regenerated. + * generated/product_i16.c: Regenerated. + * generated/product_i2.c: Regenerated. + * generated/product_i4.c: Regenerated. + * generated/product_i8.c: Regenerated. + * generated/product_r10.c: Regenerated. + * generated/product_r16.c: Regenerated. + * generated/product_r4.c: Regenerated. + * generated/product_r8.c: Regenerated. + * generated/sum_c10.c: Regenerated. + * generated/sum_c16.c: Regenerated. + * generated/sum_c4.c: Regenerated. + * generated/sum_c8.c: Regenerated. + * generated/sum_i1.c: Regenerated. + * generated/sum_i16.c: Regenerated. + * generated/sum_i2.c: Regenerated. + * generated/sum_i4.c: Regenerated. + * generated/sum_i8.c: Regenerated. + * generated/sum_r10.c: Regenerated. + * generated/sum_r16.c: Regenerated. + * generated/sum_r4.c: Regenerated. + * generated/sum_r8.c: Regenerated. + +2008-04-25 Thomas Koenig + + PR libfortran/35960 + * m4/reshape.m4: Fix typo in last commit. + * generated/reshape_i4.c: Regererated. + * generated/reshape_i8.c: Regenerated. + * generated/reshape_i16.c: Regenerated. + * generated/reshape_r4.c: Regenerated. + * generated/reshape_r8.c: Regenerated. + * generated/reshape_r10.c: Regenerated. + * generated/reshape_r16.c: Regenerated. + * generated/reshape_c4.c: Regenerated. + * generated/reshape_c8.c: Regenerated. + * generated/reshape_c10.c: Regenerated. + * generated/reshape_c16.c: Regenerated. + +2008-04-24 Francois-Xavier Coudert + + * intrinsics/time_1.h (__time_1): Remove unused variable. + +2008-04-23 Thomas Koenig + + PR libfortran/35988 + * m4/matmul.m4: Only issue a runtime error if extents are + non-zero. + * generated/matmul_i1.c: Regenerated. + * generated/matmul_i2.c: Regenerated. + * generated/matmul_i4.c: Regenerated. + * generated/matmul_i8.c: Regenerated. + * generated/matmul_i16.c: Regenerated. + * generated/matmul_r4.c: Regenerated. + * generated/matmul_r8.c: Regenerated. + * generated/matmul_r10.c: Regenerated. + * generated/matmul_r16.c: Regenerated. + * generated/matmul_c4.c: Regenerated. + * generated/matmul_c8.c: Regenerated. + * generated/matmul_c10.c: Regenerated. + * generated/matmul_c16.c: Regenerated. + +2008-04-21 Ralf Wildenhues + + * acinclude.m4 (LIBGFOR_CHECK_ATTRIBUTE_VISIBILITY) + (LIBGFOR_CHECK_ATTRIBUTE_DLLEXPORT) + (LIBGFOR_CHECK_ATTRIBUTE_ALIAS, LIBGFOR_CHECK_SYNC_FETCH_AND_ADD) + (LIBGFOR_GTHREAD_WEAK, LIBGFOR_CHECK_UNLINK_OPEN_FILE) + (LIBGFOR_CHECK_CRLF, LIBGFOR_CHECK_FOR_BROKEN_ISFINITE) + (LIBGFOR_CHECK_FOR_BROKEN_ISNAN) + (LIBGFOR_CHECK_FOR_BROKEN_FPCLASSIFY, LIBGFOR_CHECK_WORKING_STAT) + (LIBGFOR_CHECK_FPSETMASK, LIBGFOR_CHECK_MINGW_SNPRINTF): + Fix cache variable names. + * configure, Makefile.in: Regenerate. + +2008-04-20 Jerry DeLisle + + PR fortran/35991 + * intrinsics/cshift0.c (cshift0): Avoid divide by zero. + +2008-04-20 Thomas Koenig + + PR libfortran/35960 + * intrinsics/reshape_generic.c (reshape_internal): If the size + of the resized array is zero, as determined by the SHAPE + argument, return early. + * m4/reshape.m4: Likewise. + * generated/reshape_i4.c: Regererated. + * generated/reshape_i8.c: Regenerated. + * generated/reshape_i16.c: Regenerated. + * generated/reshape_r4.c: Regenerated. + * generated/reshape_r8.c: Regenerated. + * generated/reshape_r10.c: Regenerated. + * generated/reshape_r16.c: Regenerated. + * generated/reshape_c4.c: Regenerated. + * generated/reshape_c8.c: Regenerated. + * generated/reshape_c10.c: Regenerated. + * generated/reshape_c16.c: Regenerated. + +2008-04-18 Paolo Bonzini + + PR bootstrap/35457 + * aclocal.m4: Regenerate. + * configure: Regenerate. + +2008-04-14 Thomas Koenig + + PR libfortran/32972 + * intrinsics/spread_generic.c (spread): Use spread_i2() + for GFC_DTYPE_DERIVED_2 (fix typo from previous commit). + +2008-04-13 Thomas Koenig + Francois-Xavier Coudert + + PR libfortran/32972 + PR libfortran/32512 + configure.ac: Add test for uintptr_t. + configure: Regenerated. + config.h.in: Regenerated. + * libgfortran.h: GFC_DTYPE_DERIVED_1: New macro. + GFC_DTYPE_DERIVED_2: New macro. + GFC_DTYPE_DERIVED_4: New macro. + GFC_DTYPE_DERIVED_8: New macro. + GFC_DTYPE_DERIVED_16: New macro. + GFC_UNALIGNED_2: New macro. + GFC_UNALIGNED_4: New macro. + GFC_UNALIGNED_8: New macro. + GFC_UNALIGNED_16: New macro. + intptr_t: Define if we don't have it. + uintptr_t: Likewise. + * runtime/backtrace.c (show_backtrace): Use intptr_t. + * intrinsics/signal.c (signal_sub): Likewise. + (signal_sub_int): Likewise. + (alarm_sub_int_i4): Likewise. + * intrinsics/spread_generic.c (spread): Use the integer + routines for handling derived types of sizes 1, 2, 4, 8 and 16 + if the alignment of all pointers is correct. + (spread_scalar): Likewise. + * intrinsics/pack_generic.c (pack): Likewise. + Use GFD_DTYPE_TYPE_SIZE to avoid nested switch statements. + * intrinsics/unpack_generic.c (unpack1): Likewise. + (unpack0): Likewise. + * runtime/in_pack_generic.c (internal_pack): Likewise. + * runtime/in_unpack_generic.c (internal_unpack): Likewise. + +2008-04-09 Jakub Jelinek + + * io/list_read.c (snprintf): Define if HAVE_SNPRINTF isn't defined. + (nml_read_obj): Add nml_err_msg_size argument. Pass it down to + recursive call. Use snprintf instead of sprintf when %s nl->var_name + is used. + (nml_get_obj_data): Add nml_err_msg_size argument. Pass it down to + nml_read_obj call. Use snprintf instead of sprintf when %s + nl->var_name is used. Pass nml_err_msg to nml_parse_qualifier instead + of parse_err_msg array. Append " for namelist variable " and + nl->var_name to it. + (namelist_read): Increase size of nml_err_msg array to 200. Pass + sizeof nml_err_msg as extra argument to nml_get_obj_data. + +2008-04-07 Jerry DeLisle + + PR fortran/25829 28655 + * io/open.c (edit_modes): Set flags.async. (new_unit) Set flags.async + and flags.status. (st_open): Initialize flags.async. + * io/list_read.c (read_charactor): Use delim_status instead of + flags.delim. + * io/read.c (read_x): Use pad_status instead of flags.pad. + * io/inquire.c (inquire_via_unit): Add new checks. + (inquire_via_filename): Likewise. + * io/io.h (st_parameter_inquire): Add new flags. + (st_parameter_dt): Likewise. + * io/unit.c (get_internal_unit): Set flags.async. (init_units): Set + flags.async. + * io/transfer.c: Add delim and pad option arrays. (read_sf): Use + pad_status instead of flags.pad. (read_block): Likewise. + (data_transfer_init): Set flags.async and add checks. + * io/write.c (write_character): Use delim_status. + (list_formatted_write_scalar): Likewise. (nml_write_obj): Likewise. + (namelist_write): Likewise. + +2008-04-05 Jerry DeLisle + + PR fortran/25829 28655 + * gfortran.map: Add new symbol, _gfortran_st_wait. + * libgfortran.h (st_paramter_common): Add new I/O parameters. + * open.c (st_option decimal_opt[], st_option encoding_opt[], + st_option round_opt[], st_option sign_opt[], st_option async_opt[]): New + parameter option arrays. (edit_modes): Add checks for new parameters. + (new_unit): Likewise. (st_open): Likewise. + * list_read.c (CASE_SEPERATORS): Add ';' as a valid separator. + (eat_separator): Handle deimal comma. (read_logical): Fix whitespace. + (parse_real): Handle decimal comma. (read_real): Handle decimal comma. + * read.c (read_a): Use decimal status flag to allow comma in place of a + decimal point. (read_f): Allow comma as acceptable character in float. + According to decimal flag, substitute a period for a comma. + (read_x): If decimal status flag is comma, disable the read_comma flag, + not allowing comma as a delimiter, an extension otherwise. + * io.h: (unit_decimal, unit_encoding, unit_round, unit_sign, + unit_async): New enumerators. Add all new I/O parameters. + * unix.c (unix_stream, int_stream): Add io_mode asychronous I/O control. + (move_pos_offset, fd_alloc_w_at): Fix some whitespace. + (fd_sfree): Use new enumerator. (fd_read): Likewise. + (fd_write): Likewise. (fd_close): Fix whitespace. + (fd_open): Use new enumertors. (tempfile, regular_file, + open_external): Fix whitespace. (output_stream, error_stream): Set + method. (stream_offset): Fix whitespace. + * transfer.c: (st_option decimal_opt[], sign_opt[], blank_opt[]): New + option arrays. (formatted_transfer_scalar): Set sf_read_comma flag + based on new decimal_status flag. (data_transfer_init): Initialize new + parameters. Add checks for decimal, sign, and blank. (st_wait): New stub. + * format.c: (format_lex): Add format specifiers DP, DC, and D. + (parse_format_list): Parse the new specifiers. + * write.c (write_decimal): Use new sign enumerators to set the sign. + (write_complex): Handle decimal comma and semi-colon separator. + (nml_write_obj): Likewise. + * write_float.def: Revise sign enumerators. (calculate_sign): Use new + sign enumerators. (output_float): Likewise. Use new decimal_status flag + to set the decimal character to a point or a comma. + +2008-03-28 Thomas Koenig + + PR libfortran/32972 + PR libfortran/32512 + * Makefile.am: Add new variable, i_spread_c, containing + pack_i1.c, pack_i2.c, pack_i4.c, pack_i8.c, spread_i16.c, + spread_r4.c, spread_r8.c, spread_r10.c, spread_r16.c, + spread_c4.c, spread_c8.c, spread_c10.c, spread_c16.c. + * Makefile.in: Regenerated. + * libgfortran.h: Add prototypes for spread_i1, spread_i2, + spread_i4, spread_i8, spread_i16, spread_r4, spread_r8, + spread_c4, spread_c8, spread_c10, spread_c16, + spread_scalar_i1, spread_scalar_i2, spread_scalar_i4, + spread_scalar_i8, spread_scalar_i16, spread_scalar_r4 + spread_scalar_r8, spread_scalar_c4, spread_scalar_c8, + spread_scalar_c10 and spread_scalar_c16. + Add macros to isolate both type and size information + from array descriptors with a single mask operation. + * intrinsics/spread_generic.c: Add calls to specific + spread functions. + * m4/spread.m4: New file. + * generated/spread_i1.c: New file. + * generated/spread_i2.c: New file. + * generated/spread_i4.c: New file. + * generated/spread_i8.c: New file. + * generated/spread_i16.c: New file. + * generated/spread_r4.c: New file. + * generated/spread_r8.c: New file. + * generated/spread_r10.c: New file. + * generated/spread_r16.c: New file. + * generated/spread_c4.c: New file. + * generated/spread_c8.c: New file. + * generated/spread_c10.c: New file. + * generated/spread_c16.c: New file. + +2008-03-28 Jerry DeLisle + + PR libfortran/35699 + * io/transfer.c (write_buf): Don't pad the record, just return if the + data is NULL. (next_record_w): If there are bytes left in the record + for unformatted direct I/O, pad out the record with zero bytes. + +2008-03-28 Tobias Burnus + + PR fortran/35721 + * intrinsics/associated.c (associated): Ignore different + stride of pointer vs. target if only one element is referred. + +2008-03-26 Jerry DeLisle + + * io/unix.c (fd_close): Do not close STDIN. + +2007-03-23 Thomas Koenig + + PR libfortran/35632 + * io/transfer.c (data_transfer_init): Fix whitespace. + (next_record_w): Truncate the file only if the stream + position is short of the file end. + +2008-03-21 Jerry DeLisle + + * intrinsics/pack_generic.c: Fix typo. + +2008-03-21 Janne Blomqvist + + * gfortran.map: Move erfc_scaled symbols to new symbol node + GFORTRAN_1.1, thereby fixing ABI bug introduced in r132846. + +2008-03-21 Thomas Koenig + + PR libfortran/32972 + * runtime/in_pack_generic.c (internal_pack): Call correct + function, pack_i16, for GFC_INTEGER_16. + +2008-03-21 Thomas Koenig + + PR libfortran/32972 + * Makefile.am: Add new variable, i_pack_c, containing + pack_i1.c, pack_i2.c, pack_i4.c, pack_i8.c, pack_i16.c, + pack_r4.c, pack_r8.c, pack_r10.c, pack_r16.c, pack_c4.c, + pack_c8.c, pack_c10.c, pack_c16.c. + Add m4/pack.m4 to m4_files. + Add i_pack_c to gfor_built_src. + Add rule to generate i_pack_c from m4/pack.m4. + * Makefile.in: Regenerated. + * libgfortran.h: Add prototypes for pack_i1, pack_i2, pack_i4, + pack_i8, pack_i16, pack_r4, pack_r8, pack_c4, pack_c8, + pack_c10, pack_c16. + * intrinsics/pack_generic.c: Add calls to specific + pack functions. + * m4/pack.m4: New file. + * generated/pack_i1.c: New file. + * generated/pack_i2.c: New file. + * generated/pack_i4.c: New file. + * generated/pack_i8.c: New file. + * generated/pack_i16.c: New file. + * generated/pack_r4.c: New file. + * generated/pack_r8.c: New file. + * generated/pack_r10.c: New file. + * generated/pack_r16.c: New file. + * generated/pack_c4.c: New file. + * generated/pack_c8.c: New file. + * generated/pack_c10.c: New file. + * generated/pack_c16.c: New file. + +2008-03-19 Jerry DeLisle + + PR libfortran/35627 + * io/list_read.c (free_line): Clear the line buffer enable flag and + reset the index into line_buffer, aka item_count. + (next_char): Cleanup whitespace. + (read_logical): Use unget_char to assure that the first character of the + bad logical is saved in case it is part of an object name. Remove the + clearing of index and flag that is now in free_line. + (read_real): Likewise. + +2008-03-19 Thomas Koenig + + PR libfortran/32972 + * runtime/in_pack_generic.c (internal_pack): Fix typo in + last commit. + +2008-03-19 Thomas Koenig + + PR libfortran/32972 + * Makefile.am (in_pack_c): Add in_pack_i1.c, in_pack_i2.c, + in_pack_r4.c, in_pack_r8.c, in_pack_r10.c and in_pack_r16.c. + (in_unpack_c): Add in_unpack_i1.c, in_unpack_i2.c, + in_unpack_r4.c, in_unpack_r8.c, in_unpack_r10.c and + in_unpack_r16.c. + * Makefile.in: Regenerate. + * libgfortran.h: Add prototypes for internal_pack_1, + internal_pack_2, internal_pack_16, internal_pack_r4, + internal_pack_r8, internal_pack_r10, internal_pack_r16, + internal_pack_c10 and internal_pack_c16. Add prototypes for + internal_unpack_1, internal_unpack_2, internal_unpack_16, + internal_unpack_r4, internal_unpack_r8, internal_unpack_r10, + internal_unpack_r16, internal_unpack_c10 and + internal_unpack_c16. + * runtime/in_pack_generic.c (internal_pack): Use sizeof instead + of hardwired sizes. + Add calls to internal_pack_1, internal_pack_2, + internal_pack_16, internal_pack_r4, internal_pack_r8, + internal_pack_r10, internal_pack_r16, internal_pack_c10 and + internal_pack_c16. + * runtime/in_unpack_generic.c (internal_unpack): Use sizeof + instead of hardwired sizes. + Add calls to internal_unpack_1, internal_unpack_2, + internal_unpack_16, internal_unpack_r4, internal_unpack_r8, + internal_unpack_r10, internal_unpack_r16, internal_unpack_c10 + and internal_unpack_c16. + * generated/in_pack_r4.c: New file. + * generated/in_pack_i2.c: New file. + * generated/in_unpack_i1.c: New file. + * generated/in_pack_r10.c: New file. + * generated/in_unpack_r4.c: New file. + * generated/in_unpack_i2.c: New file. + * generated/in_unpack_r16.c: New file. + * generated/in_pack_r8.c: New file. + * generated/in_unpack_r10.c: New file. + * generated/in_unpack_r8.c: New file. + * generated/in_pack_r16.c: New file. + * generated/in_pack_i1.c: New file. + +2008-03-17 Jerry DeLisle + + PR libfortran/35617 + * io/list_read.c (eat_separator): If next character after eatline is '!' + then eatline again. + +2008-03-16 Ralf Wildenhues + + * aclocal.m4: Regenerate. + * configure: Likewise. + * Makefile.in: Likewise. + +2008-03-12 Francois-Xavier Coudert + + PR libfortran/35524 + * intrinsics/erfc_scaled_inc.c: Only define the long double + variant of erfc_scaled if expl is available. + +2008-03-11 Francois-Xavier Coudert + + PR libfortran/32812 + * intrinsics/random.c (scramble_seed, unscramble_seed): New + functions. + (random_seed_i4): Scramble the seed the user gives us before + storing it, and unscramble it when we return it back later. + +2008-03-05 Hans-Peter Nilsson + + PR libfortran/35293 + * io/unix.c (fd_truncate): Fold s->special_file case into + success case of ftruncate/chsize call instead of the failure case. + Make failure case actually return failure. Properly update stream + pointers on failure. Call runtime_error for targets without + neither ftruncate nor chsize where such a call would be needed. + +2008-03-03 Francois-Xavier Coudert + + PR fortran/33197 + * intrinsics/erfc_scaled_inc.c: New file. + * intrinsics/erfc_scaled.c: New file. + * gfortran.map (GFORTRAN_1.0): Add _gfortran_erfc_scaled_r*. + * Makefile.am: Add intrinsics/erfc_scaled.c. + * config.h.in: Regenerate. + * configure: Regenerate. + * Makefile.in: Regenerate. + +2008-03-01 Francois-Xavier Coudert + + PR libfortran/35355 + * intrinsics/time_1.h (__time_1): Fix calculation of user_usec + for mingw. + +2008-03-01 Janne Blomqvist + + PR libfortran/35063 + * io/unit.c (destroy_unit_mutex): Call __gthread_mutex_destroy + instead of macro kludge. + +2008-02-25 Janne Blomqvist + + PR fortran/29549 + * Makefile.am: Add -fcx-fortran-rules to AM_CFLAGS for all of + libgfortran. + * Makefile.in: Regenerated. + +2008-02-25 Francois-Xavier Coudert + + * m4/ifunction_logical.m4: Add casts to get rid of warnings. + * generated/all_l1.c: Regenerate. + * generated/all_l2.c: Regenerate. + * generated/all_l4.c: Regenerate. + * generated/all_l8.c: Regenerate. + * generated/all_l16.c: Regenerate. + * generated/any_l1.c: Regenerate. + * generated/any_l2.c: Regenerate. + * generated/any_l4.c: Regenerate. + * generated/any_l8.c: Regenerate. + * generated/any_l16.c: Regenerate. + * generated/count_1_l.c: Regenerate. + * generated/count_2_l.c: Regenerate. + * generated/count_4_l.c: Regenerate. + * generated/count_8_l.c: Regenerate. + * generated/count_16_l.c: Regenerate. + +2008-02-24 Francois-Xavier Coudert + + PR libfortran/32841 + * acinclude.m4: Don't use HAVE_MATH_H. + * configure: Regenerate. + +2008-02-20 Jerry DeLisle + + PR libfortran/35132 + * io/transfer.c (next_record_w): Truncate after the last record for + STREAM I/O. + + PR libfortran/34954 + * io/transfer.c (data_transfer_init): Initialize dtp->rec if writing. + + PR libfortran/34974 + * io/transfer.c (formatted_transfer_scalar): Flush the buffer if skips + is less than zero. (next_record_w): Use sseek to position the file to + the max position reached. + +2008-02-20 Jerry DeLisle + + PR libfortran/35036 + * write_float.def (output_float): Add error checks for zero digits + after decimal point in E and D format specifiers. + +2008-02-10 Jerry DeLisle + + PR libfortran/35063 + * io/unit.c (destroy_unit_mutex): New function that uses + __gthread_mutex_destroy_function or pthread_mutex_destroy after + unlocking and before free_mem for final closure of I/O unit. + (delete_root): Use new function. + (free_internal_unit): Likewise. + (close_unit_1): Likewise. + +2008-02-02 Thomas Koenig + + PR libfortran/35001 + * m4/shape.m4: Return 0 for extents <= 0. + * generated/shape_i4.c: Regenerated. + * generated/shape_i8.c: Regenerated. + * generated/shape_i16.c: Regenerated. + +2008-01-27 Thomas Koenig + + PR libfortran/34980 + * m4/shape.m4: If return array is empty, return early. + * generated/shape_i4.c: Regenerated. + * generated/shape_i8.c: Regenerated. + * generated/shape_i16.c: Regenerated. + +2008-01-26 Thomas Koenig + + PR libfofortran/34887 + * io/transfer.c (next_record_w): Always move to the farthest + position when completing the record (also when we are + processing a slash edit descriptor). + +2008-01-25 Jerry DeLisle + + PR libfortran/34876 + * io/transfer.c (write_buf): Handle case of zero sized array. + (transfer_array): Set data pointer to NULL and size to zero. Then + make a data transfer and return. + +2008-01-24 David Edelsohn + + * configure: Regenerate. + +2008-01-19 Jerry DeLisle + + PR libfortran/34795 + * io/inquire.c (inquire_via_unit): If a unit is opened, return values + according to the open action for DIRECT, FORMATTED, and UNFORMATTED. + (inquire_via_filename): Return "UNKNOWN" for SEQUENTIAL, DIRECT, + FORAMATTED, and UNFORMATTED inquiries. + * io/unix.c (inquire_sequential): Return "UNKNOWN" when appropriate + for files that are not opened. (inquire_direct): Same. + (inquire_formatted): Same. + +2008-01-18 Jerry DeLisle + + PR libfortran/34782 + * io/transfer.c (formatted_transfer_scalar): Set max_pos to the greater + of the current max_pos or the newly calculated position. + +2008-01-18 Tobias Burnus + + * io/write.c (write_real): Increase default precision + for REAL(16) by one. + +2008-01-16 Steven Bosscher + + PR libfortran/34669 + * mk-kinds-h.sh: Compile with -S to avoid calling the assembler, + to avoid piping the -fdump-parse-tree output to the assembler + when configuring with -pipe. + * mk-sik-inc.sh: Likewise. + * mk-srk-inc.sh: Likewise. + +2008-01-15 Thomas Koenig + + PR libfortran/34671 + * gfortran.am: Added _gfortran_all_l1, _gfortran_all_l2, + _gfortran_any_l1, _gfortran_any_l2, -28,15 _gfortran_count_1_l, + _gfortran_count_16_l, _gfortran_count_2_l, _gfortran_count_4_l and + _gfortran_count_8_l Removed _gfortran_count_16_l16, + _gfortran_count_16_l4, _gfortran_count_16_l8, + _gfortran_count_4_l16, _gfortran_count_4_l4, _gfortran_count_4_l8, + _gfortran_count_8_l16, _gfortran_count_8_l4 and + _gfortran_count_8_l8. + * Makefile.am: Added generated/any_l1.c and generated/any_l2.c to + i_any_c. Added generated/all_l1. and generated/all_l2.c to + i_all_c. Removed generated/count_4_l4.c, generated/count_8_l4.c, + generated/count_16_l4.c, generated/count_4_l8.c, + generated/count_8_l8.c, generated/count_16_l8.c, + generated/count_4_l16.c, generated/count_8_l16.c, and + generated/count_16_l16.c from i_count_c. Added count_1_l.c, + count_2_l.c, count_4_l.c, count_8_l.c and count_16_l.c to + i_count_c. I_M4_DEPS2 depends on ifunction_logical.m4, for + any of the files generated from all.m4, any.m4 and count.m4. + * Makefile.in: Regenerated. + * m4/ifunction_logical.m4: New file. Use + GFC_LOGICAL_1 pointer for access to source arrays. + * m4/any.m4: Include ifunction_logical.m4 instead of + ifunction.m4. Don't check atype_name. + * m4/all.m4: Likewise. + * m4/count.m4: Likewise. + * generated/any_l1.c: New file. + * generated/any_l2.c: New file. + * generated/all_l1.c: New file. + * generated/count_1_l.c: New file. + * generated/count_2_l.c: New file. + * generated/count_4_l.c: New file. + * generated/count_8_l.c: New file. + * generated/count_16_l.c: New file. + * generated/any_l4.c: Regenerated. + * generated/any_l8.c: Regenerated. + * generated/any_l16.c: Regenerated. + * generated/all_l4.c: Regenerated. + * generated/all_l8.c: Regenerated. + * generated/all_l16.c: Regenerated. + * generated/count_4_l4.c: Removed. + * generated/count_4_l8.c: Removed. + * generated/count_4_l16.c: Removed. + * generated/count_8_l4.c: Removed. + * generated/count_8_l8.c: Removed. + * generated/count_8_l16.c: Removed. + * generated/count_16_l4.c: Removed. + * generated/count_16_l8.c: Removed. + * generated/count_16_l16.c: Removed. + +2008-01-13 Thomas Koenig + + PR libfortran/34746 + * m4/iforeach.m4 (name`'rtype_qual`_'atype_code): Use %ld + in printf format for all bounds checking; cast all + integer-like arguments to runtime_error() to long int. + (`m'name`'rtype_qual`_'atype_code): Likewise. + (`s'name`'rtype_qual`_'atype_code): Likewise. + * m4/ifunction.m4 (name`'rtype_qual`_'atype_code): Likewise. + (`m'name`'rtype_qual`_'atype_code): Likewise. + (`s'name`'rtype_qual`_'atype_code): Likewise. + * generated/all_l16.c: Regenerated. + * generated/all_l4.c: Regenerated. + * generated/all_l8.c: Regenerated. + * generated/any_l16.c: Regenerated. + * generated/any_l4.c: Regenerated. + * generated/any_l8.c: Regenerated. + * generated/count_16_l16.c: Regenerated. + * generated/count_16_l4.c: Regenerated. + * generated/count_16_l8.c: Regenerated. + * generated/count_4_l16.c: Regenerated. + * generated/count_4_l4.c: Regenerated. + * generated/count_4_l8.c: Regenerated. + * generated/count_8_l16.c: Regenerated. + * generated/count_8_l4.c: Regenerated. + * generated/count_8_l8.c: Regenerated. + * generated/maxloc0_16_i1.c: Regenerated. + * generated/maxloc0_16_i16.c: Regenerated. + * generated/maxloc0_16_i2.c: Regenerated. + * generated/maxloc0_16_i4.c: Regenerated. + * generated/maxloc0_16_i8.c: Regenerated. + * generated/maxloc0_16_r10.c: Regenerated. + * generated/maxloc0_16_r16.c: Regenerated. + * generated/maxloc0_16_r4.c: Regenerated. + * generated/maxloc0_16_r8.c: Regenerated. + * generated/maxloc0_4_i1.c: Regenerated. + * generated/maxloc0_4_i16.c: Regenerated. + * generated/maxloc0_4_i2.c: Regenerated. + * generated/maxloc0_4_i4.c: Regenerated. + * generated/maxloc0_4_i8.c: Regenerated. + * generated/maxloc0_4_r10.c: Regenerated. + * generated/maxloc0_4_r16.c: Regenerated. + * generated/maxloc0_4_r4.c: Regenerated. + * generated/maxloc0_4_r8.c: Regenerated. + * generated/maxloc0_8_i1.c: Regenerated. + * generated/maxloc0_8_i16.c: Regenerated. + * generated/maxloc0_8_i2.c: Regenerated. + * generated/maxloc0_8_i4.c: Regenerated. + * generated/maxloc0_8_i8.c: Regenerated. + * generated/maxloc0_8_r10.c: Regenerated. + * generated/maxloc0_8_r16.c: Regenerated. + * generated/maxloc0_8_r4.c: Regenerated. + * generated/maxloc0_8_r8.c: Regenerated. + * generated/maxloc1_16_i1.c: Regenerated. + * generated/maxloc1_16_i16.c: Regenerated. + * generated/maxloc1_16_i2.c: Regenerated. + * generated/maxloc1_16_i4.c: Regenerated. + * generated/maxloc1_16_i8.c: Regenerated. + * generated/maxloc1_16_r10.c: Regenerated. + * generated/maxloc1_16_r16.c: Regenerated. + * generated/maxloc1_16_r4.c: Regenerated. + * generated/maxloc1_16_r8.c: Regenerated. + * generated/maxloc1_4_i1.c: Regenerated. + * generated/maxloc1_4_i16.c: Regenerated. + * generated/maxloc1_4_i2.c: Regenerated. + * generated/maxloc1_4_i4.c: Regenerated. + * generated/maxloc1_4_i8.c: Regenerated. + * generated/maxloc1_4_r10.c: Regenerated. + * generated/maxloc1_4_r16.c: Regenerated. + * generated/maxloc1_4_r4.c: Regenerated. + * generated/maxloc1_4_r8.c: Regenerated. + * generated/maxloc1_8_i1.c: Regenerated. + * generated/maxloc1_8_i16.c: Regenerated. + * generated/maxloc1_8_i2.c: Regenerated. + * generated/maxloc1_8_i4.c: Regenerated. + * generated/maxloc1_8_i8.c: Regenerated. + * generated/maxloc1_8_r10.c: Regenerated. + * generated/maxloc1_8_r16.c: Regenerated. + * generated/maxloc1_8_r4.c: Regenerated. + * generated/maxloc1_8_r8.c: Regenerated. + * generated/maxval_i1.c: Regenerated. + * generated/maxval_i16.c: Regenerated. + * generated/maxval_i2.c: Regenerated. + * generated/maxval_i4.c: Regenerated. + * generated/maxval_i8.c: Regenerated. + * generated/maxval_r10.c: Regenerated. + * generated/maxval_r16.c: Regenerated. + * generated/maxval_r4.c: Regenerated. + * generated/maxval_r8.c: Regenerated. + * generated/minloc0_16_i1.c: Regenerated. + * generated/minloc0_16_i16.c: Regenerated. + * generated/minloc0_16_i2.c: Regenerated. + * generated/minloc0_16_i4.c: Regenerated. + * generated/minloc0_16_i8.c: Regenerated. + * generated/minloc0_16_r10.c: Regenerated. + * generated/minloc0_16_r16.c: Regenerated. + * generated/minloc0_16_r4.c: Regenerated. + * generated/minloc0_16_r8.c: Regenerated. + * generated/minloc0_4_i1.c: Regenerated. + * generated/minloc0_4_i16.c: Regenerated. + * generated/minloc0_4_i2.c: Regenerated. + * generated/minloc0_4_i4.c: Regenerated. + * generated/minloc0_4_i8.c: Regenerated. + * generated/minloc0_4_r10.c: Regenerated. + * generated/minloc0_4_r16.c: Regenerated. + * generated/minloc0_4_r4.c: Regenerated. + * generated/minloc0_4_r8.c: Regenerated. + * generated/minloc0_8_i1.c: Regenerated. + * generated/minloc0_8_i16.c: Regenerated. + * generated/minloc0_8_i2.c: Regenerated. + * generated/minloc0_8_i4.c: Regenerated. + * generated/minloc0_8_i8.c: Regenerated. + * generated/minloc0_8_r10.c: Regenerated. + * generated/minloc0_8_r16.c: Regenerated. + * generated/minloc0_8_r4.c: Regenerated. + * generated/minloc0_8_r8.c: Regenerated. + * generated/minloc1_16_i1.c: Regenerated. + * generated/minloc1_16_i16.c: Regenerated. + * generated/minloc1_16_i2.c: Regenerated. + * generated/minloc1_16_i4.c: Regenerated. + * generated/minloc1_16_i8.c: Regenerated. + * generated/minloc1_16_r10.c: Regenerated. + * generated/minloc1_16_r16.c: Regenerated. + * generated/minloc1_16_r4.c: Regenerated. + * generated/minloc1_16_r8.c: Regenerated. + * generated/minloc1_4_i1.c: Regenerated. + * generated/minloc1_4_i16.c: Regenerated. + * generated/minloc1_4_i2.c: Regenerated. + * generated/minloc1_4_i4.c: Regenerated. + * generated/minloc1_4_i8.c: Regenerated. + * generated/minloc1_4_r10.c: Regenerated. + * generated/minloc1_4_r16.c: Regenerated. + * generated/minloc1_4_r4.c: Regenerated. + * generated/minloc1_4_r8.c: Regenerated. + * generated/minloc1_8_i1.c: Regenerated. + * generated/minloc1_8_i16.c: Regenerated. + * generated/minloc1_8_i2.c: Regenerated. + * generated/minloc1_8_i4.c: Regenerated. + * generated/minloc1_8_i8.c: Regenerated. + * generated/minloc1_8_r10.c: Regenerated. + * generated/minloc1_8_r16.c: Regenerated. + * generated/minloc1_8_r4.c: Regenerated. + * generated/minloc1_8_r8.c: Regenerated. + * generated/minval_i1.c: Regenerated. + * generated/minval_i16.c: Regenerated. + * generated/minval_i2.c: Regenerated. + * generated/minval_i4.c: Regenerated. + * generated/minval_i8.c: Regenerated. + * generated/minval_r10.c: Regenerated. + * generated/minval_r16.c: Regenerated. + * generated/minval_r4.c: Regenerated. + * generated/minval_r8.c: Regenerated. + * generated/product_c10.c: Regenerated. + * generated/product_c16.c: Regenerated. + * generated/product_c4.c: Regenerated. + * generated/product_c8.c: Regenerated. + * generated/product_i1.c: Regenerated. + * generated/product_i16.c: Regenerated. + * generated/product_i2.c: Regenerated. + * generated/product_i4.c: Regenerated. + * generated/product_i8.c: Regenerated. + * generated/product_r10.c: Regenerated. + * generated/product_r16.c: Regenerated. + * generated/product_r4.c: Regenerated. + * generated/product_r8.c: Regenerated. + * generated/sum_c10.c: Regenerated. + * generated/sum_c16.c: Regenerated. + * generated/sum_c4.c: Regenerated. + * generated/sum_c8.c: Regenerated. + * generated/sum_i1.c: Regenerated. + * generated/sum_i16.c: Regenerated. + * generated/sum_i2.c: Regenerated. + * generated/sum_i4.c: Regenerated. + * generated/sum_i8.c: Regenerated. + * generated/sum_r10.c: Regenerated. + * generated/sum_r16.c: Regenerated. + * generated/sum_r4.c: Regenerated. + * generated/sum_r8.c: Regenerated. + +2008-01-11 Thomas Koenig + + PR libfortran/34670 + * m4/iparm.m4 (upcase): New macro (copied from the m4 manual). + (u_name): New macro for the upper case name of the intrinsic. + * m4/iforeach.m4 (name`'rtype_qual`_'atype_code): Add + bounds checking and rank check, depending on + compile_options.bounds_check. + (`m'name`'rtype_qual`_'atype_code): Likewise. + (`s'name`'rtype_qual`_'atype_code): Likewise. + * m4/ifunction.m4 (name`'rtype_qual`_'atype_code): Add + bounds checking and rank check, depending on + compile_options.bounds_check. + (`m'name`'rtype_qual`_'atype_code): Likewise. + (`s'name`'rtype_qual`_'atype_code): Likewise. + * generated/all_l16.c: Regenerated. + * generated/all_l4.c: Regenerated. + * generated/all_l8.c: Regenerated. + * generated/any_l16.c: Regenerated. + * generated/any_l4.c: Regenerated. + * generated/any_l8.c: Regenerated. + * generated/count_16_l16.c: Regenerated. + * generated/count_16_l4.c: Regenerated. + * generated/count_16_l8.c: Regenerated. + * generated/count_4_l16.c: Regenerated. + * generated/count_4_l4.c: Regenerated. + * generated/count_4_l8.c: Regenerated. + * generated/count_8_l16.c: Regenerated. + * generated/count_8_l4.c: Regenerated. + * generated/count_8_l8.c: Regenerated. + * generated/maxloc0_16_i1.c: Regenerated. + * generated/maxloc0_16_i16.c: Regenerated. + * generated/maxloc0_16_i2.c: Regenerated. + * generated/maxloc0_16_i4.c: Regenerated. + * generated/maxloc0_16_i8.c: Regenerated. + * generated/maxloc0_16_r10.c: Regenerated. + * generated/maxloc0_16_r16.c: Regenerated. + * generated/maxloc0_16_r4.c: Regenerated. + * generated/maxloc0_16_r8.c: Regenerated. + * generated/maxloc0_4_i1.c: Regenerated. + * generated/maxloc0_4_i16.c: Regenerated. + * generated/maxloc0_4_i2.c: Regenerated. + * generated/maxloc0_4_i4.c: Regenerated. + * generated/maxloc0_4_i8.c: Regenerated. + * generated/maxloc0_4_r10.c: Regenerated. + * generated/maxloc0_4_r16.c: Regenerated. + * generated/maxloc0_4_r4.c: Regenerated. + * generated/maxloc0_4_r8.c: Regenerated. + * generated/maxloc0_8_i1.c: Regenerated. + * generated/maxloc0_8_i16.c: Regenerated. + * generated/maxloc0_8_i2.c: Regenerated. + * generated/maxloc0_8_i4.c: Regenerated. + * generated/maxloc0_8_i8.c: Regenerated. + * generated/maxloc0_8_r10.c: Regenerated. + * generated/maxloc0_8_r16.c: Regenerated. + * generated/maxloc0_8_r4.c: Regenerated. + * generated/maxloc0_8_r8.c: Regenerated. + * generated/maxloc1_16_i1.c: Regenerated. + * generated/maxloc1_16_i16.c: Regenerated. + * generated/maxloc1_16_i2.c: Regenerated. + * generated/maxloc1_16_i4.c: Regenerated. + * generated/maxloc1_16_i8.c: Regenerated. + * generated/maxloc1_16_r10.c: Regenerated. + * generated/maxloc1_16_r16.c: Regenerated. + * generated/maxloc1_16_r4.c: Regenerated. + * generated/maxloc1_16_r8.c: Regenerated. + * generated/maxloc1_4_i1.c: Regenerated. + * generated/maxloc1_4_i16.c: Regenerated. + * generated/maxloc1_4_i2.c: Regenerated. + * generated/maxloc1_4_i4.c: Regenerated. + * generated/maxloc1_4_i8.c: Regenerated. + * generated/maxloc1_4_r10.c: Regenerated. + * generated/maxloc1_4_r16.c: Regenerated. + * generated/maxloc1_4_r4.c: Regenerated. + * generated/maxloc1_4_r8.c: Regenerated. + * generated/maxloc1_8_i1.c: Regenerated. + * generated/maxloc1_8_i16.c: Regenerated. + * generated/maxloc1_8_i2.c: Regenerated. + * generated/maxloc1_8_i4.c: Regenerated. + * generated/maxloc1_8_i8.c: Regenerated. + * generated/maxloc1_8_r10.c: Regenerated. + * generated/maxloc1_8_r16.c: Regenerated. + * generated/maxloc1_8_r4.c: Regenerated. + * generated/maxloc1_8_r8.c: Regenerated. + * generated/maxval_i1.c: Regenerated. + * generated/maxval_i16.c: Regenerated. + * generated/maxval_i2.c: Regenerated. + * generated/maxval_i4.c: Regenerated. + * generated/maxval_i8.c: Regenerated. + * generated/maxval_r10.c: Regenerated. + * generated/maxval_r16.c: Regenerated. + * generated/maxval_r4.c: Regenerated. + * generated/maxval_r8.c: Regenerated. + * generated/minloc0_16_i1.c: Regenerated. + * generated/minloc0_16_i16.c: Regenerated. + * generated/minloc0_16_i2.c: Regenerated. + * generated/minloc0_16_i4.c: Regenerated. + * generated/minloc0_16_i8.c: Regenerated. + * generated/minloc0_16_r10.c: Regenerated. + * generated/minloc0_16_r16.c: Regenerated. + * generated/minloc0_16_r4.c: Regenerated. + * generated/minloc0_16_r8.c: Regenerated. + * generated/minloc0_4_i1.c: Regenerated. + * generated/minloc0_4_i16.c: Regenerated. + * generated/minloc0_4_i2.c: Regenerated. + * generated/minloc0_4_i4.c: Regenerated. + * generated/minloc0_4_i8.c: Regenerated. + * generated/minloc0_4_r10.c: Regenerated. + * generated/minloc0_4_r16.c: Regenerated. + * generated/minloc0_4_r4.c: Regenerated. + * generated/minloc0_4_r8.c: Regenerated. + * generated/minloc0_8_i1.c: Regenerated. + * generated/minloc0_8_i16.c: Regenerated. + * generated/minloc0_8_i2.c: Regenerated. + * generated/minloc0_8_i4.c: Regenerated. + * generated/minloc0_8_i8.c: Regenerated. + * generated/minloc0_8_r10.c: Regenerated. + * generated/minloc0_8_r16.c: Regenerated. + * generated/minloc0_8_r4.c: Regenerated. + * generated/minloc0_8_r8.c: Regenerated. + * generated/minloc1_16_i1.c: Regenerated. + * generated/minloc1_16_i16.c: Regenerated. + * generated/minloc1_16_i2.c: Regenerated. + * generated/minloc1_16_i4.c: Regenerated. + * generated/minloc1_16_i8.c: Regenerated. + * generated/minloc1_16_r10.c: Regenerated. + * generated/minloc1_16_r16.c: Regenerated. + * generated/minloc1_16_r4.c: Regenerated. + * generated/minloc1_16_r8.c: Regenerated. + * generated/minloc1_4_i1.c: Regenerated. + * generated/minloc1_4_i16.c: Regenerated. + * generated/minloc1_4_i2.c: Regenerated. + * generated/minloc1_4_i4.c: Regenerated. + * generated/minloc1_4_i8.c: Regenerated. + * generated/minloc1_4_r10.c: Regenerated. + * generated/minloc1_4_r16.c: Regenerated. + * generated/minloc1_4_r4.c: Regenerated. + * generated/minloc1_4_r8.c: Regenerated. + * generated/minloc1_8_i1.c: Regenerated. + * generated/minloc1_8_i16.c: Regenerated. + * generated/minloc1_8_i2.c: Regenerated. + * generated/minloc1_8_i4.c: Regenerated. + * generated/minloc1_8_i8.c: Regenerated. + * generated/minloc1_8_r10.c: Regenerated. + * generated/minloc1_8_r16.c: Regenerated. + * generated/minloc1_8_r4.c: Regenerated. + * generated/minloc1_8_r8.c: Regenerated. + * generated/minval_i1.c: Regenerated. + * generated/minval_i16.c: Regenerated. + * generated/minval_i2.c: Regenerated. + * generated/minval_i4.c: Regenerated. + * generated/minval_i8.c: Regenerated. + * generated/minval_r10.c: Regenerated. + * generated/minval_r16.c: Regenerated. + * generated/minval_r4.c: Regenerated. + * generated/minval_r8.c: Regenerated. + * generated/product_c10.c: Regenerated. + * generated/product_c16.c: Regenerated. + * generated/product_c4.c: Regenerated. + * generated/product_c8.c: Regenerated. + * generated/product_i1.c: Regenerated. + * generated/product_i16.c: Regenerated. + * generated/product_i2.c: Regenerated. + * generated/product_i4.c: Regenerated. + * generated/product_i8.c: Regenerated. + * generated/product_r10.c: Regenerated. + * generated/product_r16.c: Regenerated. + * generated/product_r4.c: Regenerated. + * generated/product_r8.c: Regenerated. + * generated/sum_c10.c: Regenerated. + * generated/sum_c16.c: Regenerated. + * generated/sum_c4.c: Regenerated. + * generated/sum_c8.c: Regenerated. + * generated/sum_i1.c: Regenerated. + * generated/sum_i16.c: Regenerated. + * generated/sum_i2.c: Regenerated. + * generated/sum_i4.c: Regenerated. + * generated/sum_i8.c: Regenerated. + * generated/sum_r10.c: Regenerated. + * generated/sum_r16.c: Regenerated. + * generated/sum_r4.c: Regenerated. + * generated/sum_r8.c: Regenerated. + +2008-01-05 Jerry DeLisle + + PR libfortran/34676 + * io/list_read.c (next_char): Only save the EOF condition for later if + advance="no". + +2008-01-03 Thomas Koenig + + PR libfortran/34565 + * io/io.h: Adjust protoypes for open_internal(), + next_array_record() and init_loop_spec(). + * io/list_read.c (next_char): Use argument "finished" + of next_array_record to check for end on internal file. + * io/unit.c: Calculate the offset for an array + internal file and supply this informatin to open_internal(). + * io/unix.c (open_internal): Set the offset for the internal + file on open. + * io/transfer.c (init_loop_spec): Calculate the starting + record in case of negative strides. Return size of 0 for + an empty array. + (next_array_record): Use an extra flag to signal that the + array is finished. + (next_record_r): Use the new flag to next_array_record(). + (next_record_w): Likewise. diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2002 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2002 new file mode 100644 index 0000000000..2411f626ce --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2002 @@ -0,0 +1,60 @@ +2002-12-29 Paul Brook + + * intrinsics/reshape.*: New files. + * gcc_config.patch: Update to new GCC configure system. + +2002-10-10 Paul Brook + + * intrinsics/size.c: New file. + * intrinsics/shape.m4: New file. + * Makefile.am: Add above files. + +2002-10-02 Paul Brook + + * fmain.c (main): Move here. + * libgfor.c: From here. + * libgfor.h (gfor_init, gfor_runtime_cleanup): Declare. + * Makefile.am: Build libgforbegin. + * gcc_config.patch: Remove stray -march=athlon. + * dotprodl.m4: Fix use of L8_TO_L4 macro. + * ifunction.m4: Move variable declarations to allow compilation with + gcc < 3.0 + * specific.m4, specific4.m4: Fix typo typecode->type_code. + * README: Document use of patch -p1. + +2002-09-12 Paul Brook + + * math/*: Add complex math library functions. + * intrinsics/specific(2).m4: Generate Specific intrinsic functions. + * Makefile.am: Add details for above. + * configure.in: Use AC_PROG_F95. Test for the presence of csin. + +2002-09-09 Paul Brook + + * libgfor.c (determine_endianness): Use an array rather than a struct. + * intrinsics/dotprod*, matmul*: Implement DOT_PRODUCT and MATMUL. + +2002-09-09 Steven Bosscher + + * libgfor.c: Add fatal signal handler. + Romove superfluous abort() calls. + +2002-09-07 Paul Brook + + * Makefile.am, intrinsics: Major rewrite. + +2002-09-02 Paul Brook + + * Makefile.am: Added -I$(srcdir) to m4 rule. + +2002-08-30 Paul Brook + + * io/*: Integrated libgforio. + * Makefile.am, configure.in: Make compatable with GCC. Build code for + intrinsics in the intrisics directory. + * intrinsics/intrinsics.m4: Move here. Strip directories from the + filename. Add 'and' and 'all' intrinsics. + +2002-08-17 Paul Brook + + * ALL: First release as more than just a single file diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2003 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2003 new file mode 100644 index 0000000000..1c8b99f45f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2003 @@ -0,0 +1,542 @@ +2003-12-12 Huang Chun + + * intrinsics/string_intrinsics.c (string_index): Fix logics thinko. + +2003-12-05 Melvin Hadasht + + * io/transfer.c (data_transfer_init): Give a runtime error for list + formatted reads and writes from/to files opened for unformatted IO. + +2003-11-30 Paul Brook + + * runtime/memory.c (push_context): Remove. + (pop_context): Remove. + * libgfortran.h: Remove prototypes. + +2003-11-27 Paul Brook + + * runtime/memory.c (deallocate): Nullify pointer after freeing. + +2003-11-27 Paul Brook + + * intrinsics/string_intrinsics.c: Use new memory allocation interface. + * libgfortran.h: Ditto. + * m4/in_pack.m4: Ditto. + * runtime/in_pack_generic.c: Ditto. + * runtime/memory.c: Ditto. + +2003-11-26 Richard Henderson + + * m4/exponent.m4, m4/fraction.m4: New. + * m4/nearest.m4, m4/set_exponent.m4: New. + * generated/*: Update. + * Makefile.am: Add them. + (AM_CFLAGS): New. Use -std=gnu99. + * Makefile.in: Regenerate. + +2003-11-08 Paul Brook + + PR fortran/12704 + * m4/maxloc0.m4: Use default value of 1. Handle zero sized arrays. + * m4/maxloc1.m4: Ditto. + * m4/minloc0.m4: Ditto. + * m4/minloc1.m4: Ditto. + * m4/ifunction.m4: Set return value for zero sized arrays. + * m4/iforeach.m4: Ditto. + * m4/all.m4, m4/any.m4, m4/count.m4, m4/maxloc1.m4, m4/minloc1.m4, + m4/mxaval.m4, m4/minval.m4, m4/product.m4, m4/sum.m4: Ditto. + * generated/*: Update. + +2003-10-30 Toon Moene + + PR fortran/12702 + * io/list_read.c (eat_spaces): Treat tab as space. + +2003-10-30 Lars Segerlund + + * intrinsics/random.c: Add reference to paper containing algorithm. + (random_seed): Extra error checking and proper handling of arrays. + (arandom_r4, arandom_r8): Implement. + +2003-10-29 Toon Moene + + PR fortran/12703 + * runtime/memory.c (allocate_size): Allow allocation + of zero-sized objects. + +2003-10-29 Toon Moene + + PR fortran/12701 + * open.c (new_unit): Open without a file name opens + a file with name fort.. + +2003-10-12 Feng Wang + + * intrinsics/cshift0.c: New file. + * m4/cshift1.m4: New file + * generated/cshift*.c: New files. + * Makefile.am: Add them. + * Makefile.in: Regenerate. + +2003-10-12 XiaoQiang Zhang + + * io/list_read.c (read_character): Remove unwanted call to free_saved. + +2003-10-11 Huang Chun + + * intrinsics/string_intrinsics.c (string_trim): New function. + (string_repeat): New function. + +2003-10-11 Paul Brook + + * intrinsics/dprod_r8.f90: New file. + * Makefile.am (gfor_specific_src): Add it. + (gfor_built_specific_src): Rename from gfor_build_specific_c. + Add new intrinsics. + (gfor_specific2_src): Rename from gfor_built_specific2_c. + Add new intrinsics. + * Makefile.in: Regenerate. + * generated/_aint_*.f90: New files. + * generated/_anint*.f90: New files. + * generated/_atan2*.f90: New files. + * generated/_mod*.f90: New files. + +2003-09-20 Kejia Zhao + + * intrinsics/selected_kind.f90: New file. + * Makefile.am: Add it. + * Makefile.in: regenerate. + +2003-09-19 Lars Segerlund + Paul Brook + + * intrinsics/random.c: New file. + * Makefile.am (gfor_hemper_src): Add it. + (gfor_specific_c): Fix typo. + +2003-09-19 Paul Brook + + * All: rename g95->gfc. + +2003-09-18 XiaoQiang Zhang + + * io/write.c (output_float): Fix bug of FMT_E, Add comments. + +2003-09-09 XiaoQiang Zhang + + * io/write.c (write_float): Dectection of positive infinite number, + Not a Number(NaN) and negative infinite number. + (ioutput_float): Bug fix for FMT_E and FMT_D processing to + output a very_very small number ( < 0.1e-100 ). + +2003-09-07 XiaoQiang Zhang + + * libgfortran.h (xtoa, itoa): Parameter modified. + * io/io.h (namelist_info): Declaration to support namelist I/O + (st_parameter): Add namelist related component + (ionml, empty_internal_buffer, st_set_nml_var_int, + st_set_nml_var_float, st_set_nml_var_char, st_set_nml_var_complex, + st_set_nml_var_log): Declaration + (set_integer, set_integer): Parameter changed + * io/format.c (free_nodes): Fix annoying bug of lefting "deallocated" + fnodes + (parse_format_list): Fix bug about FMT_SLASH + * io/list_read.c (push_char): Totally clear old saved_string, zeroize + newly allocated saved_string + (next_char): Add detection of End_Of_Line support + (convert_integer): Now can process 64 bits interger + (read_real): Bug fixed + (init_at_eol, find_nml_node, match_namelist_name): Add new functions + (match_namelist_name): New implemention + * io/lock.c (ionml): New global variable + (library_end): Free memory in ionml + * io/open.c (st_open): Variable initializtion + * io/read.c (max_value): 64 bits interger support + (convert_precsion_real): New procedure to replace "strtod" with more + features + (read_f, read_radix): Input bug fix + * io/transfer.c: (sf_seen_eor): New static variable + (read_sf): Zeroize base buffer; fix bugs: single read statement can + not get input in mutli line when read from stdin + (formatted_transfer): Fix bug of FMT_O, FMT_B, FMT_Z for INTEGER type + request + (data_transfer_init): Clear internal buffer for Internel File I/O. + Internal File now worked. Detect some error condition for namelist. + Some minor bug fix + (next_record_w): Internal file and Namelist I/O support. + (st_set_nml_var, st_set_nml_var_float, st_set_nml_var_char, + st_set_nml_var_complex, st_set_nml_var_log): Implemention. + * io/unit.c (implicit_unit): Deletion + (get_unit): Now cannot open a unit implicitly. + * io/unix.c (mmap_alloc): Fix fatal error in calculating the length of + mapped buffer. + (mem_alloc_r_at): Internal file I/O support added + (empty_internal_buffer): New function + * io/write.c (extract_int): Support 64 bits interger processing + (output_float): Varibale initialization + (write_float): Infinite real number detection. + (write_int): 64 bits integer I/O support + (write_decimal): New function to output decimal number + (otoa, btoa): Better implemention and 64 bits interger support + (namelist_write): New function + * runtime/error.c (itoa, xtoa): Better implemention and 64 bits + interger support + +2003-08-15 Arnaud Desitter + + * libgfortran.h (os_error, runtime_error,internal_error, sys_exit, + get_mem ): Add attribute. + * intrinsics/spread_generic.c (__spread): Fix spelling. + * io/inquire.c (inquire_via_filename): Add const. + * io/io.h (sys_exit): Add attribute. + * io/io.h (move_pos_offset): Add move_pos_offset. + * io/io.h (compare_file_filename, inquire_sequential, inquire_direct, + inquire_formatted, inquire_unformatted, inquire_read, inquire_write, + inquire_readwrite, convert_real, write_a, write_b, write_d, write_e, + write_en, write_es, write_f, write_i, write_l, write_o, write_x, + write_z): Add const. + * io/read.c (convert_real): Add const. + * io/transfer.c (type_name): Add const. + * io/unix.c (unpack_filename, compare_file_filename,inquire_sequential, + inquire_direct, inquire_formatted, inquire_unformatted, inquire_access, + inquire_read, inquire_write, inquire_readwrite): Add const. + * io/write.c (output_float): Remove unused variable. + * io/write.c (write_a, extract_int, extract_real, output_float, + write_float, write_int, write_i, write_b, write_o, write_z, write_d, + write_e, write_f, write_en, write_es, write_logical, write_integer, + write_character, write_real, write_complex): Add const. + * runtime/error.c (rtoa): Remove unused variable. + * runtime/select.c (select_string): Add const. + * runtime/stop.c (stop_string): Add const. + +2003-08-10 Paul Brook + + * Makefile.am (gfor_helper_src): Add intrinsics/abort.c. + (FFLAGS): Add -fno-underscoring. + * Makefile.in: Regenerate. + * intrinsics/abort.c: New file. + +2003-08-10 Erik Schnetter + + * fmain.c (main): Do not call init and cleanup; call set_args instead. + * libgfortran.h (init, cleanup): Remove declarations. + (set_args): Add declaration. + * runtime/main.c (init, cleanup): Make them static, and give them + the constructor and destructor attributes. + (set_args): New function. + +2003-08-10 Paul Brook + + * intrinsics/strinf_intrinsics.c (compare_string): Return value based + on which string is longest. + +2003-08-10 Paul Brook + + * Makefile.am (EXTRA_DIST): Remove old files. + * Makefile.in: Regenerate. + +2003-07-26 Paul Brook + + Rename library to libgfortran. + * libgfortran.h: Change prefix to _libgfortran_. + +2003-07-24 Paul Brook + + * configure.in: Don't pull in system libtool. Use toplevel + auxiliary files. + +2003-07-22 Paul Brook + + Regenerate all configury files. + +2003-07-09 Chun Huang + + * intrinsics/string_intrinsic.c (string_scan): New function. + (string_verify): New function. + +2003-06-25 Paul Brook + + * io/unix.c (mem_alloc_r_at, mem_alloc_w_at): Advance logical_offset. + (mem_seek): Don't bother setting physical_offset. + +2003-06-20 Paul Brook + + * libgfor.h (stop_numeric): Declare. + * runtime/pause.c: New file. + * Makefile.am: Add it. + +2003-06-08 Paul Brook + + * m4/cexp.m4 (cabs): Use correct typed version. + (csqrt): New function. + +2003-06-07 Canqun Yang + + Spotted by Benjamin and Tobias: + * io/list_read.c: Add Separator '\t'. + (parse_real, read_real): Accept real values starting with an optional + sign follows a decimal point. + +2003-06-06 Steven Bosscher + + * Makefile.am: Don't put cmath objects in subdir. + * configure.in: Rename MATHOBJ to MATH_OBJ. + +2003-06-02 Kejia Zhao + + * intrinsics/associated.c: New file. + * Makefile.am: Add it. Regenerate Makefile.in. + * libgfor.h: Define g95_array_void, G95_DESCRIPTOR_DATA, and + G95_DESCRIPTOR_DTYPE. + +2003-06-01 Canqun Yang + + * io/write.c (calcuate_exp): Rewrite it to avoid overflow. + (calculate_G_format): Rewrite it to eliminate an infinte loop and set + the scale_factor to 0 for F editing. + +2003-05-11 Tobias Schlter + + * libgfor.h: Only include stdint.h if it exists. + +2003-05-07 Paul Brook + + * libgfor.h: Use stdint.h types. + * intrinsics/ishift.c: Ditto. + * runtime/memory.c (malloc_t): Reorder fields for better alignment. + +2003-05-05 Steven Bosscher + + * libgfor.h (offsetof): Define if nobody else does. + * runtime/memory.c (HEADER_SIZE): Use it. + +2003-05-01 Tobias Schlter + + * configure.in: Require autoconf 2.54. + +2003-04-28 Tobias Schlter + Paul Brook + + * intrinsics/reshape_generic.c: Copy the whole element, not just the + first byte. + * m4/transpose.m4: New file. + * Makefile.am: Add them. + Regenerate generated files. + +2003-04-18 Steven Bosscher + + * io/format.c (parse_format_list): Allow 'X' without integer + prefix. This is an extension. Interpretation is '1X'. + +2003-04-18 Tobias Schlter + + * io/format.c (parse_format_list): Allow '0P'. + +2003-04-18 Steven Bosscher + + * Makefile.in: Re-regenerate for automake 1.7.3. + +2003-04-18 Canqun Yang + + Port implementation for CHARACTER SELECT from Andy's tree. + * runtime/select.c: New file + * Makefile.am: Add it. + * Makefile.in: Regenerate. + +2003-04-17 Xiaoqiang Zhang + + * io/transfer.c (formatted_transfer): Modified + * io/unix.c (move_pos_offset): New Function. + * io/format.c (parse_format_list): Modified. + +2003-04-15 Xiaoqiang Zhang + + * io/write.c (write_float,write_real): New implemention of + FMT_G and default float editing. + (calculate_exp,calculate_G_format,output_float): New Function. + (write_float,write_real,write_logical): Modified + * libgfor.h (default_rtoa): Remove Declaration. + * runtime/error.c (default_rtoa): Remove Function. + +2003-04-15 Steven Bosscher + + Spotted by Yang: + * io/write.c (extract_real): Add missing break statement. + +2003-04-13 Steven Bosscher + + * cpu_time.c: Make sure we have a definition of HZ. Don't + rely on CLOCKS_PER_SEC, it is always 1000000, on any system. + +2003-04-13 Steven Bosscher + Paul Brook + + * configure.in: Check for process time headers and GETTIMEOFDAY. + * makefile.am: Add intrinsics/cpu_time.c. + * acinclude.m4: New file. + * intrinsics/cpu_time.c: New file. + * m4/dotprodl.m4: Fix typo. + Regenerate generated files. + +2003-04-11 Xiaoqiang Zhang + + * io/write.c (extract_real): Ouput floating point value. + (write_float): New Function. + (write_e, write_f, write_en, write_es): Modified + * io/transfer.c (formatted_transfer): Modified. + * libgfor.h (default_rtoa): Declaration. + (rtoa): Declaration. + * runtime/error.c (default_rtoa): New Function. + (rtoa): New Function. + +2003-04-05 Paul Brook + + * intrinsics/spread_generic.c: New file. + * Makefile.am: Add it. Regenerate Makefile.in. + +2003-03-29 Paul Brook + + * intrinsics/pack_generic.c: New file. + * intrinsics/unpack_generic.c: New file. + * Makefile.am: Add them. Regenerate Makefile.in. + +2003-03-25 Paul Brook + + * intrinsics/eoshift0.c: New file. + * intrinsics/eoshift2.c: New file. + * m4/eoshift1.m4: New file. + * m4/eoshift3.m4: New file. + * Makefile.am: Add them. + * in_unpack_generic.c: Initialize src. + Regenerate generated files. + +2003-03-14 Paul Brook + + * m4/shape.m4: Work properly with array temporaries. + * m4/in_pack.m4: Skip redundant checks for array temporaries. + * runtime/in_pack_generic.c: Ditto. + +2003-03-12 Paul Brook + + * m4/shape.m4: Work properly with noncontiguous arrays. + +2003-03-08 Paul Brook + + * m4/in_pack.m4: Correctly handle zero sized and assumed size arrays. + * runtime/in_pack_generic.c: Ditto. + +2003-02-08 Paul Brook + + * intrinsics/reshape_generic.c: Use runtime_error to report errors. + * io/close.c (st_close): Return void. + * io/open.c (st_open): Return void. + * libgfor.h (g95_array_char): Declare. + (internal_malloc_size): Ditto. + (internal_pack*, internal_unpack*): Ditto. + * m4/in_pack.m4: Allocate storage if neccessary. Fix logic for packed + arrays. + * m4/in_unpack.m4: Include file fixes. + * m4/reshape.m4: Increment the correct source pointer. + * Makefile.am (maxloc): Fix typo. + * runtime/in_pack_generic.c: Call optimized functions. Allocate + storage if neccessary. Fix logic for packed arrays. + * runtime/in_unpack_generic.c: Call optimized functions. + * runtime/main.c: Use runtime_error to report errors. + * memory.c (internal_malloc_size): Make non-static. + +2003-02-02 Arnaud Desitter + + * reshape_packed.c, lock.c: Add #include . + * libgfor.h, format.c, inquire.c, io.h, transfer.c, unix.c, + environ.c, error.c, memory.c, string.c: Add const. + * error.c (show_locus): Add void. + +2003-02-21 Paul Brook + + * m4/in_pack.m4: Avoid returning const * parameter. + * Makefile.am: Only regenerate files in maintainer mode. + +2003-02-20 Paul Brook + + Add array repacking support functions. + * m4/in_pack.m4, m4/in_unpack.m4: New files. + * runtime/in_pack_generic.c, runtime/in_unpack_generic.c: New files. + * Makefile.am: Build them. Regenerate configury files. + * generated/: New directory for generated files (need to move + everything else there). + +2003-02-07 Tobias Schlueter + + * m4/cexp.m4: Fix typo. + +2003-01-26 Paul Brook + + * intrinsics/: Add missing generated files. + +2003-01-26 Paul Brook + + * Makefile.am: Put -I before the filename. + +2003-01-24 Paul Brook + + * configure.in: Add AM_MAINTAINER_MODE. + +2003-01-23 Paul Brook + + * configure.in, Makefile.am: Modify to work with unmodified autoconf + and auotmake. + Also regenerate other configury files. + +2003-01-21 Paul Brook + + * io/read.c: Don't use stdint.h, it doesn't exist on cygwin. + +2003-01-20 Steven Bosscher + + * io/read.c (read_f): Don't use alloca, but safe get_mem instead. + Don't include "alloca.h". + +2003-01-20 Steven Bosscher + + * intrinsics/string.c: Rename to intrinsics/string_intrinsics.c. + * Makefile.am: Adjust file name. + * Makefile.in: Regenerate. + * gfortypes.h: Kill, include everything in... + * libgfor.h: ...here. Include config.h + * fmain.c, intrinsics/ishftc.c, intrinsic/reshape_generic.c, + intrinsics/reshape_i4.c, intrinsics/reshape_i8.c, + intrinsics/reshape_packed.c, intrinsics/size.c, + m4/reshape.m4, runtime/main.c, runtime/memory.c: Use macro + for prefix for all functions instead of hardcoded. + +2003-01-19 Steven Bosscher + + * io/lock.c (library_end): Propagate library return + code. + +2003-01-19 Steven Bosscher + + Port fixes from Andy's tree: + * io/read.c (read_decimal): Reverse sense of overflow + comparison during integer reads. + * io/format.c (revert): Fix comment. + (next_format): Fix format revision. + * io/unix.c: Fix and simplify mmap version of stream + functions. + +2003-01-11 Paul Brook + + * configure, Makefile.in: Regenerate. + +2003-01-11 Paul Brook + + * runtime/stop.c: Rewrite. + +2003-01-08 Paul Brook + + * configure, Makefile.in: Regenerate. + +2003-01-05 Paul Brook + + * (*.m4) Move to m4/. + * intrinsics/string.c (_gfor_string_index): New Function. diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2004 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2004 new file mode 100644 index 0000000000..0193040228 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2004 @@ -0,0 +1,1104 @@ +2004-12-27 Tobias Schlueter + + * libgfortran/libgfortran.h (GFC_UINTEGER_1, GFC_UINTEGER_2): + Define. + * intrinsics/ishftc.c: Update copyright years. + (ishftc8): Change 'shift' and 'size' to GFC_INTEGER_4. + * intrinsics/mvbits.c: Correct non-ASCII character in my name. + Add implementations for GFC_INTEGER_1 and GFC_INTEGER_2. + +2004-12-23 Bud Davis + + PR fortran/19071 + * io/tranfer.c (formatted_transfer): moved check for + format reversion inside the processing loop. + +2004-12-19 Aaron W. LaFramboise + + PR libfortran/19074 + * libgfortran.h (itoa): Rename to gfc_itoa. + * io/write.c (itoa): Same. + * runtime/environ.c (itoa): Same. + * runtime/error.c (itoa): Same. + +2004-12-15 Bud Davis + Steven G. Kargl + + PR fortran/17597 + * io/list_read.c (read_real): do not push back a comma when + it delimits a real value without a decimal point + +2004-12-14 Steve Ellcey + + * libgfortran/io/transfer.c (us_read): Use memcpy/memset + instead of assignment to fill unaligned buffer. + (us_write): Ditto. + (next_record_w): Ditto. + +2004-12-14 Steven G. Kargl + + PR libfortran/18966 + * gfortran.h: typedef GFC_INTEGER_1 and GFC_INTEGER_2 + * intrinsics/cshift0.c (cshift0_1,cshift0_2): New functions. + * intrinsics/eoshift0.c (eoshift0_1,eoshift0_2): New functions. + * intrinsics/eoshift2.c (eoshift2_1,eoshift2_2): New functions. + +2004-12-13 David Edelsohn + + * io/transfer.c (read_sf): Change bitwise "and" to logical "and". + +2004-12-12 Richard Henderson + + * intrinsics/cshift0.c, intrinsics/eoshift0.c, intrinsics/eoshift2.c, + intrinsics/pack_generic.c, intrinsics/reshape_generic.c, + intrinsics/spread_generic.c, intrinsics/transpose_generic.c, + intrinsics/unpack_generic.c, m4/cshift1.m4, m4/dotprod.m4, + m4/dotprodc.m4, m4/dotprodl.m4, m4/eoshift1.m4, m4/eoshift3.m4, + m4/iforeach.m4, m4/ifunction.m4, m4/matmul.m4, m4/matmull.m4, + m4/reshape.m4, m4/shape.m4, m4/transpose.m4: Use standard prefix + instead of "__". + * generated/*: Rebuild. + +2004-12-12 Richard Henderson + + * acinclude.m4 (LIBGFOR_CHECK_ATTRIBUTE_VISIBILITY): New. + (LIBGFOR_CHECK_ATTRIBUTE_DLLEXPORT): New. + (LIBGFOR_CHECK_ATTRIBUTE_ALIAS): New. + * configure.ac: Use them. + * configure, config.h.in, aclocal.m4: Rebuild. + * libgfortran.h (prefix): Remove. + (PREFIX, IPREFIX): New. + (sym_rename, sym_rename1, sym_rename2): New. + (internal_proto, export_proto, export_proto_np): New. + (iexport_proto, iexport): New. + (iexport_data_proto, iexport_data): New. + * intrinsics/abort.c, intrinsics/args.c, intrinsics/associated.c, + intrinsics/cpu_time.c, intrinsics/cshift0.c, + intrinsics/date_and_time.c, intrinsics/env.c, intrinsics/eoshift0.c, + intrinsics/eoshift2.c, intrinsics/etime.c, intrinsics/exit.c, + intrinsics/flush.c, intrinsics/fnum.c, intrinsics/getXid.c, + intrinsics/getcwd.c, intrinsics/ishftc.c, intrinsics/mvbits.c, + intrinsics/pack_generic.c, intrinsics/rand.c, intrinsics/random.c, + intrinsics/reshape_generic.c, intrinsics/size.c, + intrinsics/spread_generic.c, intrinsics/stat.c, + intrinsics/string_intrinsics.c, intrinsics/system.c, + intrinsics/system_clock.c, intrinsics/transpose_generic.c, + intrinsics/umask.c, intrinsics/unlink.c, intrinsics/unpack_generic.c, + io/backspace.c, io/close.c, io/endfile.c, io/inquire.c, io/io.h, + io/open.c, io/rewind.c, io/transfer.c, libgfortran.h, m4/cshift1.m4, + m4/dotprod.m4, m4/dotprodc.m4, m4/dotprodl.m4, m4/eoshift1.m4, + m4/eoshift3.m4, m4/exponent.m4, m4/fraction.m4, m4/iforeach.m4, + m4/ifunction.m4, m4/matmul.m4, m4/matmull.m4, m4/nearest.m4, + m4/pow.m4, m4/reshape.m4, m4/set_exponent.m4, m4/shape.m4, + m4/transpose.m4, runtime/environ.c, runtime/error.c, + runtime/in_pack_generic.c, runtime/in_unpack_generic.c, + runtime/main.c, runtime/memory.c, runtime/pause.c, runtime/select.c, + runtime/stop.c: Use them to mark symbols internal or external. + * generated/*: Rebuild. + +2004-12-09 David Edelsohn + + PR bootstrap/18895 + Revert 2004-12-07 change. + * Makefile.am (AM_MAKEFLAGS): Delete. + * Makefile.in: Regenerate. + +2004-12-07 Steve Ellcey + + * libgfortran/Makefile.am (AM_MAKEFLAGS): New. + * libgfortran/Makefile.in: Regenerate + +2004-12-07 Steve Ellcey + + * io/io.h (open_external): Change prototype. + * io/unix.c (regular_file): Change prototype and set flags->action if + needed. + (open_external): Ditto. + * io/open.c (new_unit): Let open_external set flags->action. + +2004-12-07 Eric Botcazou + + * configure.ac: Check for ieeefp.h. Check for fabsf in libm. + * configure: Regenerate. + * config.h.in: Likewise. + * c99_protos.h: New file. + * libgfortran.h: Include c99_protos.h and conditionally ieeefp.h. + * intrinsics/c99_functions.c (fabsf): New function. + +2004-12-06 Richard Henderson + + * intrinsics/cshift0.c, intrinsics/eoshift0.c, intrinsics/eoshift2.c, + intrinsics/pack_generic.c, intrinsics/string_intrinsics.c, + intrinsics/transpose_generic.c, m4/ifunction.m4, m4/matmul.m4, + m4/matmull.m4, m4/transpose.m4: Use internal_malloc_size instead + of internal_malloc. + * generated/*: Rebuild. + +2004-12-06 Richard Henderson + + * intrinsics/c99_functions.c, intrinsics/eoshift0.c, + intrinsics/eoshift2.c, intrinsics/exit.c, intrinsics/flush.c, + intrinsics/ishftc.c, intrinsics/mvbits.c, intrinsics/pack_generic.c, + intrinsics/random.c, intrinsics/reshape_generic.c, intrinsics/size.c, + intrinsics/spread_generic.c, intrinsics/stat.c, + intrinsics/string_intrinsics.c, intrinsics/system_clock.c, + intrinsics/transpose_generic.c, intrinsics/unlink.c, + intrinsics/unpack_generic.c, io/backspace.c, io/format.c, + io/list_read.c, io/lock.c, io/open.c, io/transfer.c, io/unix.c, + io/write.c, runtime/environ.c, runtime/error.c, + runtime/in_pack_generic.c, runtime/in_unpack_generic.c, runtime/main.c, + runtime/memory.c, runtime/pause.c, runtime/stop.c, + runtime/string.c: Whitespace fixes. + +2004-12-06 Richard Henderson + + * Makefile.am: Generate all m4 output under $(srcdir). + * Makefile.in: Regenerate. + +2004-12-02 Tobias Schlueter + + PR fortran/18710 + * io/transfer.c (unformatted_read, unformatted_write): width of + a COMPLEX is twice its kind. + +2004-12-02 Richard Sandiford + + * configure.ac: Use TL_AC_GCC_VERSION to set gcc_version. + * configure, aclocal.m4, Makefile.in: Regenerate. + +2004-12-02 Bud Davis + + PR libfortran/18284 + * io/unix.c (fd_alloc_w_at): Update file_length when extending. + * io/backspace.c (formatted_backspace): Reset endfile after backspace. + +2004-12-02 Bud Davis + + * io/inquire.c (inquire_via_unit): do not allow a direct access + file to be opened for sequential I/O. + +2004-12-02 Steven G. Kargl + Paul Brook + + * intrinsics/flush.c: New file. + * intrinsics/fnum.c: ditto + * intrinsics/stat.c: ditto + * io/io.h (unit_to_fd): Add prototype. + * io/unix.c (unit_to_fd): New function. + * configure.ac: Add test for members of struct stat. Check for + sys/types.h and sys/stat.h + * Makefile.am: Add intrinsics/{flush.c,fnum.c,stat.c} + * configure.in: Regenerate. + * config.h.in: Regenerate. + * Makefile.in: Regenerate. + +2004-12-01 Aaron W. LaFramboise + + * Makefile.am (AM_CPPFLAGS): Use -iquote instead of -I. + +2004-11-28 Bud Davis + + * io/unix.c (mmap_alloc_w_a): check for a write to a location + less than the mapped area. + +2004-11-27 Bud Davis + + PR fortran/18364 + * io/endfile.c (st_endfile): flush the stream before truncating. + +2004-11-24 Kelley Cook + + * configure: Regenerate for libtool change. + +2004-11-22 Steven Bosscher + + PR libfortran/15960 + * configure.ac: Check for finite in libm. + * libgfortran.h: Define isfinite macro if not defined. + * intrinsics/c99_functions.c: Use defined(fpclassify) instead of + HAVE_FPCLASSIFY. + * io/write.c (write_float): Use isfinite instead of finite. + * configure, config.h.in: Rebuilt. + +2004-11-20 Roger Sayle + + * io/write.c (write_float, list_formatted_write): Fix indentation. + +2004-11-20 Eric Botcazou + + PR target/16135 + * acinclude.m4 (LIBGFOR_TARGET_ILP32): New check. + * configure.ac: Include LIBGFOR_TARGET_ILP32. + * configure: Regenerate. + * config.h.in: Likewise. + * libgfortran.h: Provide default definitions for C99 types + on ILP32 targets that don't have them. + + PR target/17999 + * configure.ac: Check for snprintf. + * configure: Regenerate. + * config.h.in: Likewise. + * intrinsics/date_and_time.c (date_and_time): Do not + use snprinf if it is not available. + * io/write.c (output_float): Likewise. + +2004-11-20 Steven G. Kargl + + * Makefile.am: Add intrinsics/{umask.c,unlink.c,exit.c} + * Makefile.in: Regenerated + * intrinsics/umask.c: New file + * intrinsics/unlink.c: ditto + * intrinsics/exit.c: ditto + +2004-11-18 Victor Leikehman + + * m4/matmul.m4: Loops reordered to improve cache behavior. + * generated/matmul_??.c: Regenerated. + +2004-11-10 Paul Brook + + PR fortran/18218 + * configure.ac: Check for strtof. + * configure: Regenerate. + * config.h.in: Regenerate. + * io/read.c (convert_real): Use strtof if available. + (convert_precision_real): Remove. + (read_f): Avoid poor exponentiation algorithm. + +2004-11-05 Andreas Schwab + + * configure.ac: Use AC_PROG_FC, FC and FCFLAGS instead of + AC_PROG_F77, F77 and FFLAGS. + * Makefile.am (selected_int_kind.inc, selected_real_kind.inc): Use + FCCOMPILE instead of F77COMPILE. + * configure, Makefile.in: Regenerate. + +2004-11-05 Kelley Cook + + * acinclude.m4: Properly quote AC_CACHE_CHECK. + * Makefile.am: Add in ACLOCAL_AMFLAGS. + * aclocal.m4, configure, Makefile.in: Regenerate. + +2004-10-30 Aaron W. LaFramboise + + * config.h.in: Regenerate. + * configure: Regenerate. + * configure.ac (AC_CHECK_FUNCS): Add mkstemp. + * io/unix.c (S_IRGRP): Define if undefined. + (S_IWGRP): Same. + (S_IROTH): Same. + (S_IWOTH): Same. + (tempfile): Use mktemp if mkstemp missing, fix typos. + +2004-10-30 Aaron W. LaFramboise + + * intrinsics/system.c ("libgfortran.h"): Move after system headers. + +2004-10-30 Canqun Yang + + * intrinsics/rand.c (irand): Handle NULL argument. + +2004-10-07 Paul Brook + + * io/transfer.c (finalize_transfer): Free internal streams. + * io/unix.c (mem_close): Free stream object. + +2004-10-07 Paul Brook + + * intrinsics/string_intrinsics.c (string_verify): Fix off by one + error. + +2004-10-06 Paul Brook + + PR libfortran/17709 + * io/transfer.c (data_transfer_init): Reset sf_seen_eor. + +2004-10-04 Andrew Pinski + + * intrinsics/mvbits.c: Commit the file. + +2004-10-04 Tobias Schlueter + + PR fortran/17283 + * intrinsics/pack_generic.c (__pack): Allocate memory for return array + if not done by caller. + (__pack_s): New function. + * runtime/memory.c (internal_malloc, internal_malloc64): Allow + allocating zero memory. + + PR fortran/17631 + * Makefile.am (gfor_helper_src): Add intrinsics/mvbits.h. + * Makefile.in: Regenerate. + * intrinsics/mvbits.h: New file. + + PR fortran/17776 + * intrinsics/system.c: New file. + * Makefile.am: Add dependency for the new file. + * Makefile.in: Regenerate. + +2004-10-04 Paul Brook + Bud Davis + + PR fortran/17706 + PR fortran/16434 + * io/format.c (parse_format_list): Set repeat count for S, SP, SS, + BN and BZ formats. + * io/write.c (output_float): Don't output minus zero. + +2004-10-03 Aaron W. LaFramboise + + * intrinsics/abort.c ("libgfortran.h"): Move. + * intrinsics/date_and_time.c ("libgfortran.h"): Same. + * intrinsics/write.c ("libgfortran.h"): Same. + +2004-09-26 Tobias Schlueter + + PR libfortran/16137 + * config.h.in (HAVE_POWF): Undefine. + * configure.ac: Check for 'powf' in library. + * configure: Regenerate. + * intrinsics/c99_functions.c (powf): New function. + +2004-09-24 Tobias Schlueter + + * intrinsics/etime.c (etime_): New function. + +2004-09-21 Steven G. Kargl + + * libgfortran.h: define gfc_alloca() + * intrinsics/env.c (getenv, get_environment_variable_i4): Use it. + +2004-09-21 Bud Davis + + PR fortran/17286 + * io/list_read.c (namelist_read): ignore spaces after + the '=' for namelist reads. + +2004-09-15 Aaron W. LaFramboise + + * config.h.in: Regenerate. + * configure: Regenerate. + * configure.ac (AC_CHECK_HEADERS): Check for sys/mman.h. + * unix.c: Include stdio.h. + (HAVE_SYS_MMAN_H): Check. + (PROT_READ, PROT_WRITE): Provide default definitions. + +2004-09-15 Steven G. Kargl + + * intrincics/getcwd.c: New file. + * Makefile.am: Add getcwd.c. + * Makefile.in: Regenerated. + +2004-09-15 Steven G. Kargl + Paul Brook + + * intrinsics/env.c (getenv, get_environmental_variable): Remove + trailing white space. Use alloca. Honour trim_name. + +2004-09-13 Bud Davis + + PR fortran/17090 + + * io/list_read.c (list_formatted_read): Handle trailing spaces + at end of line. + +2004-09-06 Steven G. Kargl + + * io/write.c (output_float): Typo in comment. Remove debugging + printf. Fix format for FP of form 1e10. + +2004-09-03 Richard Henderson + + * intrinsics/cshift0.c (DEF_COPY_LOOP, copy_loop_int, copy_loop_long, + copy_loop_double, copy_loop_ldouble): New. + (__cshift0): Make shift type ssize_t. Use % operator instead of + div. Use specialized versions of copy loop depending on the shape. + +2004-09-02 Paul Brook + + * io/format.c (parse_format_list): Set repeat count for P descriptors. + * write.c (output_float): Fix condition. Correctly handle nonzero + scale factor. + +2004-09-01 Eric Botcazou + + * mk-sik-inc.sh: Use a temporary string instead of 'echo -n'. + * mk-srk-inc.sh: Likewise. + +2004-09-01 Paul Brook + + * runtime/error.c (generate_error): Set both iostat and + library_return. + +2004-08-31 Paul Brook + + PR libfortran/16805 + * io/list_read.c (next_char): Don't signal EOF for internal files. + * io/unix.c (mem_alloc_r_at): Don't return NULL for incomplete reads. + +2004-08-31 Tobias Schlueter + + * io/unit.c: Separate copyright years by ','. + (compare, insert_unit, delete_unit, is_internal_unit, close_units): + Remove blank line in beginning of function. + (get_unit): Simplify code. + +2004-08-31 Paul Brook + + * io/unit.c (get_unit): Remove superfluous if. + +2004-08-31 Paul Brook + + * io/transfer.c (read_sf): Rename uinty to readlen. Detect EOF. + (finalize_transfer): Move setjmp after namlist IO. + * io/unix.c (mem_alloc_r_at): Calculate remaining length correctly. + +2004-08-31 Paul Brook + + * list_read.c (eat_separator): Set at_eo when a '/' is seen. + +2004-08-31 Tobias Schlueter + + * libgfortran.h: Replace 'gfc_strlen_type' by + 'gfc_charlen_type'. Update comment accordingly. + * intrinsics/args.c, intrinsics/env.c, io/io.h, io/transfer.c: + Replace all occurences of 'gfc_strlen_type' by 'gfc_charlen_type'. + +2004-08-31 Paul Brook + + * libgfortran.h: Add comments. + +2004-08-30 Richard Henderson + + * Makefile.am (gfor_helper_src): Split selected_kind.f90. + (gfor_built_src): Add selected_int_kind.inc selected_real_kind.inc. + (selected_int_kind.inc selected_real_kind.inc): New rules. + * Makefile.in: Regenerate. + * mk-sik-inc.sh, mk-srk-inc.sh: New files. + * intrinsics/selected_int_kind.f90: Split from selected_kind.f90, + include table of detected kinds. + * intrinsics/selected_real_kind.f90: Similarly. + +2004-08-29 Steven G. Kargl + Paul Brook + + * intrinsics/bessel.c: New file. + * intrinsics/erf.c: New file. + * Makefie.am: Add intrinsics/bessel.c and intrinsics/erf.c. + * configure.ac: Test for C99 Bessel and Error functions. + * Makefile.in: Regenerate. + * config.h.in: Regenerate. + * configure: Regenerate. + +2004-08-29 Steven G. Kargl + Paul Brook + + * Makefile.am: Add intrinsics/getXid.c. + * configure.ac: Add tests for get{g,p,u}id. + * config.h.in: Regenerate. + * Makefile.in: Regenerate. + * configure: Regenerate. + +2004-08-28 Paul Brook + + PR libfortran/17195 + * libgfortran.h (rtoa): Remove prototype. + * runtime/error.c (rtoa): Remove. + * io/write.c (calculate_G_format): Don't add blanks if E format is + used. Add correct number of blanks when exponent width is specified. + (output_float): Rewrite. + +2004-08-27 Paul Brook + + * io/rewind.c (st_rewind): Reset unit to read mode. + +2004-08-27 Bud Davis + + PR fortran/16597 + * io/io.h: created typedef for unit_mode. + * io/io.h (gfc_unit): added mode to unit structure. + * io/transfer.c (data_transfer_init): flush if a write then + read is done on a unit (direct access files). + * io/rewind.c (st_rewind): Used unit mode instead of global. + +2004-08-24 Bud Davis + + PR fortran/17143 + * runtime/error.c (itoa): keep from overflowing during + mod operation by using unsigned variable. + +2004-08-24 Bud Davis + + PR fortran/17164 + * runtime/string_intrinsics.c (string_index):check for + substring longer than string. + +2004-08-24 David Edelsohn + + * Makefile.am (libgfortran_la_LDFLAGS): Add -lm. + * Makefile.in: Rebuilt. + +2004-08-23 Tobias Schlueter + + * io/io.h, io/list_read.c, io/open.c, io/transfer.c, io/write.c: + Fix formatting issues, update copyright years. + +2004-08-21 Bud Davis + + PR 16908 + * io/transfer.c (next_record_w): Do not blank pad. + * io/transfer.c (next_record): Take into account partial records. + +2004-08-18 Victor Leikehman + + PR fortran/13278 + * io/transfer.c (st_set_nml_var) + * io/write.c (namelist_write): Allow var_name and var_name_len to be + null. For strings, use string_length field instead of len. + * io/io.h (struct namelist_type): New field string_length. + (st_set_nml_var_char): New argument string_length. + +2004-08-13 Bud Davis + + PR gfortran/16935 + * io/open.c (st_open): use flags instead of the unit structure. + +2004-08-10 Victor Leikehman + + * io/list_read.c (namelist_read): Convert variable names + to lower case, so that mixed-case names are recognized. + Don't read beyond terminating slash. + +2004-08-09 Richard Henderson + Roger Sayle + + * intrinsics/c99_functions.c (nextafterf): New implementation that + works correctly with denormalized numbers. + +2004-08-09 Victor Leikehman + + * m4/matmul.m4, m4/matmull.m4, intrinsics/eoshift0.c, + intrinsics/eoshift2.c, intrinsics/transpose_generic.c: + Allocate space if return value has NULL in its data field. + * generated/*.c: Regenerate. + +2004-08-06 Janne Blomqvist + + * intrinsics/env.c: New file. + * Makefile.am: Add env.c to build. + * Makefile.in: Regenerate. + +2004-08-05 Victor Leikehman + + PR libfortran/16704 + * io/read.c (read_radix): Understand letters f and F as hex digits. + +2004-08-04 Victor Leikehman + + * libgfortran.h (array_t, size0) New declarations. + * m4/ifunction.m4, m4/transpose.m4, intrinsics/cshift0.c: Allocate + space if return value descriptor has NULL in its data field, + and initialize bounds and stride. + * intrinsics/size.c (array_t, size0): Declarations moved to + libgfortran.h. + * generated/*.c: Regenerate. + +2004-08-03 Roger Sayle + + PR libfortran/16137 + * configure.ac: Add tests for acosf, asinf, atan2f, atanf, ceilf, + copysignf, cosf, coshf, expf, floorf, frexpf, hypotf, logf, log10f, + scalbnf, sinf, sinhf, sqrtf, tanf and tanhf in libm. + * config.h.in: Regenerate. + * configure: Regenerate. + + * instrinsics/c99_functions.c (acosf, asinf, atan2f, atanf, ceilf, + copysignf, cosf, coshf, expf, floorf, frexpf, hypotf, logf, log10f, + nextafterf, scalbnf, sinf, sinhf, sqrtf, tanf, tanhf): New stub + implementations for targets that don't support C99 float functions. + +2004-08-01 Roger Sayle + + * io/write.c (write_float): Use the slightly more portable isnan + in preference to isinf. + +2004-07-18 Bud Davis + + * configure.ac: Add check for LFS support. + * configure: Regenerate + +2004-07-11 Paul Brook + + PR fortran/16303 + * m4/cexp.m4 (carg): Return -pi to pi. + * generated/exp_c?.c: Regenerate. + +2004-07-08 Andreas Krebbel + + PR fortran/16291 + * libgfortran/io/write.c: (write_float): Added length check. + Remove pointless memset calls. + +2004-07-04 Bud Davis + Paul Brook + + PR fortran/15472 + * io/transfer.c(us_write): set recl for seq unform writes to max size. + * io/transfer.c(data_transfer_init): handle un-opened seq unform unit. + * io/unix.c(fd_alloc_w_at): handle requests at start, fd_flush at + right time. + * io/unix.c(is_seekable): set based upon the file/device, not the + method being used to access it (fd or mmap). + * io/unix.c(fd_flush): don't set file_size if !seekable. + * io/unix.c(fd_truncate: ditto. + +2004-07-04 Janne Blomqvist + Paul Brook + + PR fortran/15280 + PR fortran/15665 + * libgfortran.h (gfc_strlen_type): Define. + * intrinsics/args.c (getarg): Rename ... + (getarg_i4): ... to this. + (getarg_i8, get_command_argument_i4, get_command_argument_i8, + get_command_i4, get_command_i8): New functions. + +2004-07-04 Matthias Klose + + * libtool-version: New. + * Makefile.am (libgfortran_la_LDFLAGS): Use -version-info for soname. + * Makefile.in: Regenerate. + * configure.ac: Remove libtool_VERSION macro + * configure: Regenerate + +2004-06-30 Steve Kargl + Steven Bosscher + + * intrinsics/rand.c (rand): Wrap the irand() call from the previous + commit in prefix. + +2004-06-29 Tobias Schlueter + Paul Brook + + * runtime/normalize.c (normalize_r4_i4, normalize_r8_i8): Fix + comments. + * intrinsics/rand.c (rand): Call irand() in call to normalize_r4_i4. + +2004-06-27 Bud Davis + + PR gfortran/12839 + * io/write.c (write_float): check signbit for Infinity. + +2004-06-26 Bud Davis + + PR gfortran/16196 + * unix.c(regular_file): create file if it does not exist. + +2004-06-24 Andrew Pinski + + * configure.ac: Remove check for libmx. + * configure: Regenerate. + +2004-06-22 Janne Blomqvist + + PR fortran/15750 + * inquire.c (st_inquire): Add comment + * io.h (st_parameter): Add iolength. + (st_iolength, st_iolength_done): Declare. + * transfer.c (iolength_transfer, iolength_transfer_init, + st_iolength, st_iolength_done): New functions. + +2004-06-21 Steven G. Kargl + + * etime.c (etime_sub): Remove array rank check; + Add check for sufficient space. + +2004-06-19 Bud Davis + + PR gfortran/16080 + * io/list_read.c(set_value): fixed spelling. + +2004-06-19 Bud Davis + + PR gfortran/16080 + * io/list_read.c(set_value): don't copy if the string is null. + +2004-06-14 Bud Davis + + PR gfortran/15292 + * intrinsics/c99_functions.c: Use fpclassify if it exists. + +2004-06-13 Paul Brook + + * Makefile.am (gfor_helper_src): Add runtime/normalize.f90. + * configure.ac: Add checks for nextafter and nextafterf. + * Makefile.in, config.h.in, configure: Regenerate. + * libgfortran.h (normalize_r4_i4, normalize_r8_i8): Declare. + * intrinsics/rand.c (rand): Use normalize_r4_i4. + * intrinsics/random.c (random_r4): Use normalize_r4_i4. + (random_r8): Use normalize_r8_i8. + * runtime/normalize.c: New file. + +2004-06-13 Steven G. Kargl + Tobias Schlueter + + * random.c: Fix several spelling and formatting mistakes in + comments. + (random_r8): Fix loop to make random numbers range in [0,1(. + + +2004-06-13 Steven G. Kargl + + * random.c (random_r4): Burn a random number. + (random_r8): fix infinite loop. + +2004-06-12 Bud Davis + Steve Kargl + + PR gfortran/15292 + * intrinsics/c99_functions.c: New file. + * Makefile.am: Add new file. + * configure.ac: Added test for round/roundf. + * Makefile.in: Regenerate. + * configure: Regenerate. + * configure.h.in: Regenerate. + +2004-06-12 Steven G. Kargl + + * Makefile.am: Add rand.c and etime.c + * Makefile.in: Regenerated. + * aclocal.in: Regenerated. + * cpu_time.c (second_sub, second): New functions. + * rand.c (irand, rand, srand): New file. + * etime.c (etime_sub, etime): New file. + +2004-06-12 Tobias Schlueter + Steven Bosscher + + PR fortran/14923 + * intrinsics/date_and_time.c: New file. + * Makefile.am (gfor_helper_src): Add intrinsics/date_and_time.c. + * Makefile.in, aclocal.m4: Regenerate. + * libgfortran.h: Prototype date_and_time(). + +2004-06-12 Bud Davis + + PR fortran/15665 + * intrinsics/args.c: Implement GETARG and IARGC. + * Makefile.am: Add it. + * Makefile.in: Regenerate. + +2004-06-12 Bud Davis + + PR gfortran/12839 + * io/write.c(write_float): Format inf and nan IAW F2003. + +2004-06-09 Bud Davis + + PR gfortran/14897 + * io/transfer.c (formatted_transfer): position is unique + for T and TL edit descriptors. + (data_transfer_init): set record length to size of internal + file. + +2004-06-09 Bud Davis + + PR gfortran/15755 + * io/backspace.c(st_backspace): call correct routine for + formatted and un-formatted units. + +2004-05-30 Andreas Jaeger , Steven Bosscher + + PR gfortran/11800 + * Makefile.am (AM_CPPFLAGS): Renamed from INCLUDES. + (lib_LTLIBRARIES): Rename to ... + (toolexeclib_LTLIBRARIES): this for multilib support. + * configure.in: Rename to ... + * configure.ac: this. Update to modern autoconf style, enable + multilibs, support --enable-version-specific-runtime-libs. + * Makefile.in: Regenerated. + * configure: Regenerated. + * aclocal.m4: Regenerated. + +2004-05-30 Steven G. Kargl + + * libgfortran.h (random_seed): Update prototype. + * intrinsics/random.c: Disable old implementation and add new one. + +2004-05-30 Andreas Jaeger + + * intrinsics/random.c: Include unistd.h for close and read + prototypes, remove unneeded inclusion of assert.h. + + * intrinsics/abort.c: Include stdlib.h for abort prototype, remove + unneeded inclusion of assert.h. + +2004-05-27 Tobias Schlueter + + PR fortran/15234 + * intrinsics/associated.c: Remove enum. + (associated): Replace TRUE/FALSE by 1/0. + +2004-05-23 Steven G. Kargl + + * random.c (random_seed): Use correct variable. + +2004-05-22 Steven G. Kargl + + * intrinsics/system_clock: New file. + * Makefile.am: Add intrinsics/system_clock.c. + * Makefile.in: Regenerate. + +2004-05-21 Roger Sayle + + * io/format.c (parse_format_list): Allow the comma after a string + literal to be optional. + +2004-05-18 Paul Brook + Feng Wang + + * Makefile.am (i_pow_c): Set it. Add build rule. + (gfor_built_src): Use it. + (m4_files): add m4/pow.m4. + * Makefile.in: Regenerate. + * m4/pow.m4: New file. + * generated/pow_*.c: Regenerate. + +2004-05-18 Paul Brook + + * Makefile.am: Remove references to types.m4. + * m4/iparm.m4: Merge with types.m4. + * m4/types.m4: Remove. + * m4/cshift1.m4, m4/dotprod.m4, m4/dotprodc.m4, m4/dotprodl.m4, + m4/eoshift1.m4, m4/eoshift3.m4, m4/iforeach.m4, m4/ifunction.m4, + m4/in_pack.m4, m4/in_unpack.m4, m4/iparm.m4, m4/matmul.m4, + m4/matmull.m4, m4/maxloc0.m4, m4/maxloc1.m4, m4/maxval.m4, + m4/minloc0.m4, m4/minloc1.m4, m4/minval.m4, m4/reshape.m4, + m4/shape.m4, m4/specific.m4, m4/specific2.m4, m4/transpose.m4): + Update to use new iparm.m4. + * generated/*.c: Regenerate. + +2004-05-18 Tobias Schlueter + + PR fortran/15235 + * gfortran.h (offset_t): Rename to ... + (gfc_offset): ... this. + * io/backspace.c (formatted_backspace, unformatted_backspace), + io/io.h (stream, gfc_unit, global_t, file_length, file_position), + transfer.c (us_read, us_write, next_record_r, next_record_w), + io/unit.c (init_units), unix.c (unix_stream, fd_alloc, + fd_alloc_r_at, fd_alloc_w_at, fd_seek, mmap_alloc, + mmap_alloc_r_at, mmap_alloc_w_at, mmap_seek, mem_alloc_r_at, + mem_alloc_w_at, mem_seek, file_length, file_position): Replace all + occurences of offset_t by gfc_offset. + +2004-05-16 Paul Brook + + * io/format.c (write_real): Don't include padding in format. + +2004-05-16 Paul Brook + + * io/format.c (format_lex): Make c an int. + +2004-05-16 Janne Blomqvist + Paul Brook + + * io/write.c (write_logical): Don't print extra blank. + (write_integer): Base field width on kind. + (list_formatted_write): Output initial blank. + +2004-05-16 Janne Blomqvist + + * io/io.h (flush): Add prototype. + * io/transfer.c (finalize_transfer): Flush partial records. + * io/unix.c (flush): New function. + +2004-05-15 Tobias Schlueter + + PR fortran/15234 + * io/io.h (unit_t): Rename to ... + (gfc_unit) ... this. + (unit_root, current_unit, find_file, find_unit, get_unit): Now + of type gfc_unit. + (delete_file, insert_unit, close_unit): Argument now of type + gfc_unit. + * backspace.c (st_backspace), close.c (st_close), endfile.c + (st_endfile), inquire.c (inquire_via_unit, st_inquire), open.c + (test_endfile, edit_modes, new_unit, already_open, st_open), + rewind.c (st_rewind), transfer.c (current_unit), unit.c + (internal_unit, unit_cache, rotate_left, rotate_right, insert, + insert_unit, delete_root, delete_treap, delete_unit, find_unit, + get_unit, init_units, close_unit), unix.c (find_file0, + find_file, delete_file): Replace all occurences of unit_t by + gfc_unit. + +2004-05-15 Bud Davis + + PR fortran/15311 + * io/write.c (write_a): right justify A edit output. + +2004-05-14 Bud Davis + + PR fortran/15149 + * libgfortan.h,intrinsics/random.c: Made random_seed visible. + * runtime/main.c(init): Call random_seed as part of MAIN init. + +2004-05-13 Tobias Schlter + + * io/format.c: (parse_format_list): No comma is required after + P descriptor. + +2004-05-13 Bud Davis + + PR fortran/15204 + * io/intrinsic/string_intrinsics.c (adjustr): rework logic. + +2004-05-06 Rainer Orth + Steven Bosscher + + PR libfortran/15234 + * libgfortran.h: Include if available. + +2004-05-03 Rainer Orth + + * io/unix.c (MAP_FAILED): Define if missing. + (mmap_alloc): Cast MAP_FAILED to char *. + (mmap_open): Likewise. + +2004-04-26 Bud Davis + + * generated/_abs_i8.f90: New file. + * generated/_abs_c4.f90: New file. + * generated/_abs_c8.f90: New file. + * Makefile.am: Add them. + * Makefile.in: Regenerate. +` +2004-04-26 Bud Davis + + PR fortran/14056 + * generated/_abs_i4.f90: New file. + * Makefile.am: Add it. + * Makefile.in: Regenerate. + +2004-04-25 Bud Davis + + PR fortran/14942 + * io/list_read.c(list_formatted_read): finish consuming the + spaces and seperators at eoln to get ready for next item. + +2004-04-23 Bud Davis + + PR fortran/15113 + * io/read.c(read_a): Handle field width > destination and no field width. + +2004-04-22 Bud Davis + + PR fortran/14906 + * io/format.c (format_item): gracefully handle a ')' + when it is the first character encountered in the string. + +2004-04-11 Bud Davis + + PR fortran/14904 + * io/transfer.c (next_record): Update last_record when + more than one record is written to a direct access file + with one write statement. + +2004-04-11 Bud Davis + + PR fortran/14901 + * io/transfer.c (next_record_w) : No '\n' if internal. + * io/unix.c (empty_internal_buffer) : Init to spaces, not '\n'. + +2004-04-11 Bud Davis + + * io.h (ioparm): Interface from FE is 32 bit, irregardless of offset_t. + Will need to change this later to support direct access files > 2gb. + +2004-04-03 Bud Davis + + PR gfortran/14762 + * io/transfer.c (next_record_r) : Skip to next record. + +2004-04-03 Bud Davis + + PR gfortran/14836 + * io/transfer.c (next_record): Update last_record for DIRECT + +2004-04-03 Bud Davis + + PR gfortran/14837 + * io/unix.c (find_file0): Use fd field of struct + +2004-04-03 Bud Davis + + PR 14831 + * io/inquire.c (inquire_via_unit): Changed return string for + BLANK=NULL. Use correct variable for ACTION. + +2004-04-01 Bud Davis + + PR 14746 + * io/read.c (read_f): Allow a decimal without a leading digit. + * io/write.c (output_float): remove a leading '0' to keep from + overflowing the field (F edit descriptor). + +2004-04-01 Bud Davis + + PR gfortran/14565 + * io/open.c (new_unit), + * io/io.h : new_unit is now visible + * io/transfer.c (data_transfer_init): open unit if no OPEN statement. + * io/transfer.c (data_transfer_init): remove compile warnings. + * io/rewind.c (st_rewind): ftruncate if writing. + +2004-03-24 Bud Davis + + * write.c (write_l): Use extract_int for 'L' edit descriptor. + +2004-03-24 Bud Davis + + PR 13919 + * io/io.h (global_t): + * io/list_read.c (next_char,list_formatted_read,ist_formatted_read): + Move eof_jmp to a global structure. + * io/transfer.c(finalize_transfer) : Set up eof_jump for callers. + +2004-03-24 Bud Davis + + * m4/cexp.m4 (csqrt): Actually use the passed value. + * generated/exp_c?.c: Regenerate. + +2004-03-24 Bud Davis + + PR 12921 + * io.h, transfer.c, open.c : recl_in changed from ptr to variable. + * open.c (new_unit): Moved test for positioned direct access error. + (init_units): Corrected calculation of max records. + +2004-02-06 Feng Wang + + * Makefile.am: Add m4/dotprodc.m4. And fix spelling. + * Makefile.in: Regenerate. + * m4/dotprodc.m4: New file. Implement complex dot_product. + * m4/dotprod.m4: Delete the complex implementation. + * generated/dotprod_*: Update. + +2004-02-07 Bud Davis + + * transfer.c (write_constant_string): Do not delete H's in hollerith + formats. + +2004-01-05 Andrew Pinski + + * configure.in: Check for csin in -lmx also. + * configure: Regenerate. + +2004-01-01 Paul Brook + + * io/list_read.c (find_nml_node): Make static. + (match_namelist_name): Ditto. + * io/read.c (convert_precision_real): Make static, fix spelling. + * io/transfer.c (extract_real): Remove unused prototype. + (st_set_nml_var): Make static. + * io/write.c (extract_real): Make static. diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2005 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2005 new file mode 100644 index 0000000000..0214e44001 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2005 @@ -0,0 +1,2915 @@ +2005-12-31 Jerry DeLisle + + PR libfortran/25594 + PR libfortran/25419 + * io/list_read.c (list_formatted_read_scalar): Test for comma to return + a null value (default). Revert patch of 25419 on 2005-12-28. + +2005-12-28 Jerry DeLisle + + PR libfortran/25139 + * io/unix.c (fd_truncate): Set s->active to zero. + PR libfortran/25510 + * libgfortran.h: Add ERROR_INTERNAL and ERROR_INTERNAL_UNIT. + * runtime/error.c (translate_error): Add messages for new errors. + * io/list_read.c (next_char): Use new errors. + * io/transfer.c (next_record_r) (next_record_w): Use new errors. + +2005-12-28 Jerry DeLisle + + PR libfortran/25550 + * io/file_pos.c (st_rewind): Reset bytes left so no error occurs in + next_record_r. + +2005-12-28 Jerry DeLisle + + PR libfortran/25419 + * io/list_read.c (list_formatted_read_scalar): Allow comma to return a + null value (default). + +2005-12-21 Jerry DeLisle + + PR libfortran/25307 + * io/list_read.c (next_char): Handle end-of-file conditions for + internal units and add support for internal character array units. + +2005-12-18 Jerry DeLisle + + PR libfortran/25463 + * io/transfer.c (finalize_transfer): Fix execution order so that + next_record is set to zero in all cases. + +2005-12-16 Jerry DeLisle + + PR libfortran/25264 + PR libfortran/25349 + * io/unit.c (get_unit): Delete code that cleared the string when the + unit was opened, which is too soon. + * io/transfer.c (next_record_w): Pass done flag in. Change logic for + setting max_pos. Add code to position unit and pad record as needed. + +2005-12-13 Richard Sandiford + Victor Leikehman + + * m4/matmul.m4: Use a different order in the special case of a + transposed first argument. + * generated/matmul_c4.c, generated/matmul_c8.c, generated/matmul_c10.c, + * generated/matmul_c16.c, generated/matmul_i4.c, generated/matmul_i8.c, + * generated/matmul_i10.c, generated/matmul_r4.c, generated/matmul_r8.c + * generated/matmul_r10.c, generated/matmul_r16.c: Regenerated. + +2005-12-10 Janne Blomqvist + + * Makefile.am: Enable loop unrolling for matmul. + * configure: Regenerated. + * Makefile.in: Regenerated. + * aclocal.m4: Regenerated. + +2005-12-10 Thomas Koenig + + PR fortran/23815 + * io/file_pos.c (unformatted_backspace): If flags.convert + does not equal CONVERT_NATIVE, reverse the record marker. + * io/open.c: Add convert_opt[]. + (st_open): If no convert option is given, set CONVERT_NATIVE. + If CONVERT_BIG or CONVERT_LITTLE are given, set flags.convert to + CONVERT_NATIVE or CONVERT_SWAP (depending on wether we have + a big- or little-endian system). + * io/transfer.c (unformatted_read): Remove unused attribute + from arguments. + If we need to reverse + bytes, break up large transfers into a loop. Split complex + numbers into its two parts. + (unformatted_write): Likewise. + (us_read): If flags.convert does not equal CONVERT_NATIVE, + reverse the record marker. + (next_record_w): Likewise. + (reverse_memcpy): New function. + * io/inquire.c (inquire_via_unit): Implement convert. + * io/io.h (top level): Add enum unit_convert. + Add convert to st_parameter_open and st_parameter_inquire. + Define IOPARM_OPEN_HAS_CONVERT and IOPARM_INQUIRE_HAS_CONVERT. + Increase padding for st_parameter_dt. + Declare reverse_memcpy(). + +2005-12-09 Jakub Jelinek + + PR libfortran/24991 + * acinclude.m4: Include acx.m4 and no-executables.m4. + * configure.ac: Add GCC_TOPLEVEL_SUBDIRS. + * configure: Rebuilt. + * Makefile.am (AM_CPPFLAGS): Use $(host_subdir) in build dir + path. + * Makefile.in: Rebuilt. + +2005-12-08 Jerry DeLisle + + PR libfortran/25039 + * io/io.h: Create a new flag sf_read_comma to control comma + separators in numeric reads. + * io/transfer.c (formatted_transfer_scalar): Initialize the flag. + (read_sf): Check for commas coming in and if the flag is set, + shortcut the read. + * io/read.c (read_a) (read_x): Clear the flag for character reads and + reset it after the reads. + +2005-12-04 Francois-Xavier Coudert + + * io/format.c: Removing unused code. + * intrinsics/random.c: Likewise. + +2005-12-02 Francois-Xavier Coudert + + PR libfortran/25116 + * io/transfer.c (data_transfer_init): Don't set the default for + namelist I/O on preconnected files to UNFORMATTED. + +2005-11-30 Eric Botcazou + + * libgfortran.h (ILP32 typedefs): Define _UINT8_T, _UINT32_T and + _UINT64_T on Solaris. + +2005-11-28 Steven G. Kargl + + PR libfortran/25149 + * intrinsics/abort.c: Add external abort_ to allow linking when + invoking -std=f95 in testsuite. + +2005-11-28 Jakub Jelinek + + PR libfortran/24991 + * acinclude.m4 (LIBGFOR_CHECK_PRAGMA_WEAK): Rename to... + (LIBGFOR_GTHREAD_WEAK): ... this. Define SUPPORTS_WEAK rather + than HAVE_PRAGMA_WEAK. Define GTHREAD_USE_WEAK to 0 on hosts + that shouldn't use weak in gthr.h. + * configure.ac: Use LIBGFOR_GTHREAD_WEAK instead of + LIBGFOR_CHECK_PRAGMA_WEAK. + * config.h.in: Regenerated. + * configure: Regenerated. + * io/io.h (SUPPORTS_WEAK): Don't define here. + + * intrinsics/ftell.c (ftell, FTELL_SUB): Add unlock_unit call. + * intrinsics/fget.c (fgetc, fputs): Likewise. + * intrinsics/tty.c (ttynam): Likewise. + +2005-11-27 Jerry DeLisle + + PR libfortran/25109 + * io/unit.c (init_units): Set default flag to BLANK_NULL per + requirement of F95 standard. Set PAD_YES for stdin. + +2005-11-27 David Edelsohn + + * intrinsics/random.c: Include config.h + * io/size_from_kind.c: Include config.h and libgfortran.h + * io/io.h: Revert 2005-11-21 change. + +2005-11-27 Francois-Xavier Coudert + + * io/write.c (namelist_write): Correct type in previous + commit. + +2005-11-27 Francois-Xavier Coudert + + PR libfortran/24919 + * io/list_read.c (eat_separator, finish_separator, + read_character): Handle CRLF separators correctly during reads. + (nml_query): Use the HAVE_CRLF macro to print adequate newlines. + * io/io.h (st_parameter_dt): Add comment about the possible + values for sf_seen_eor. + * io/unix.c (tempfile, regular_file): HAVE_CRLF doesn't imply + that O_BINARY is defined, so we add that condition. + (stream_at_bof): Fix typo in comment. + * io/transfer.c (read_sf): Handle correctly CRLF, setting + sf_seen_eor value to 2 instead of 1. + (formatted_transfer_scalar): Use the sf_seen_eor value to + handle CRLF the right way. + * io/write.c (nml_write_obj, namelist_write): Use CRLF as newline + when HAVE_CRLF is defined. + +2005-11-27 Janne Blomqvist + + * m4/ifunction.m4: Add const restrict to function arguments. + * m4/iforeach.m4: Likewise. + * m4/eoshift1.m4: Likewise. + * m4/eoshift3.m4: Likewise. + * m4/dotprod.m4: Likewise. + * m4/dotprodc.m4: Likewise. + * m4/dotprodl.m4: Likewise. + * m4/shape.m4: Likewise. + * m4/cshift1.m4: Likewise. + * m4/reshape.m4: Likewise. + * m4/transpose.m4: Likewise. + * generated/eoshift*: Regenerated + * generated/dotprod*: Likewise. + * generated/shape*: Likewise. + * generated/cshift1*: Likewise. + * generated/reshape*: Likewise. + * generated/transpose*: Likewise. + +2005-11-26 Richard Henderson + + * io/list_read.c (nml_parse_qualifier): Use ssize_t instead of int + in dtp->u.p.value. + +2005-11-26 Janne Blomqvist + + PR libfortran/24945 + * io/open.c (edit_modes): Check for STATUS_UNKNOWN flag. + +2005-11-25 Richard Henderson + + * io/list_read.c (nml_parse_qualifier): Use memcpy to extract + values from dtp->u.p.value. + * io/io.h (struct st_parameter_dt): Change reversion_flag, first_item, + seen_dollar, sf_seen_eor, eor_condition, no_leading_blank, char_flag, + input_complete, at_eol, comma_flag, namelist_mode, nml_read_error to + single-bit fields. Move value to where it'll be at least pointer + aligned. + +2005-11-23 Alan Modra + + * io/open.c (new_unit): Use the right unit number when checking + for stdin, stdout, stderr. + +2005-11-22 Jerry DeLisle + + PR libfortran/24794 + * io/list_read.c (read_character): Add auto completion on short + namelist reads. + +2005-11-21 David Edelsohn + + * io/io.h (_LARGE_FILES): Undefine for AIX. + (_LARGE_FILE_API): Define for AIX. + +2005-11-21 Jakub Jelinek + + PR fortran/24774 + PR fortran/14943 + PR fortran/21647 + * Makefile.am (AM_CPPFLAGS): Add gcc directories as -I paths, + add -D_GNU_SOURCE. + * Makefile.in: Regenerated. + * acinclude.m4 (LIBGFOR_CHECK_SYNC_FETCH_AND_ADD, + LIBGFOR_CHECK_GTHR_DEFAULT, LIBGFOR_CHECK_PRAGMA_WEAK): New macros. + * configure.ac: Add them. + * configure: Rebuilt. + * config.h.in: Rebuilt. + * libtool-version: Bump libgfortran.so SONAME to libgfortran.so.1. + * libgfortran.h (library_start, show_locus, internal_error, + generate_error, find_option): Add st_parameter_common * argument. + (library_end): Change into a dummy macro. + * io/io.h: Include gthr.h. + (SUPPORTS_WEAK): Define if HAVE_PRAGMA_WEAK. + (CHARACTER): Remove define. + (st_parameter, global_t): Remove typedef. + (ioparm, g, ionml, current_unit): Remove variables. + (init_error_stream): Remove prototype. + (CHARACTER1, CHARACTER2): Define. + (st_parameter_common, st_parameter_open, st_parameter_close, + st_parameter_filepos, st_parameter_inquire, st_parameter_dt): New + typedefs. + (IOPARM_LIBRETURN_MASK, IOPARM_LIBRETURN_OK, IOPARM_LIBRETURN_ERROR, + IOPARM_LIBRETURN_END, IOPARM_LIBRETURN_EOR, IOPARM_ERR, IOPARM_END, + IOPARM_EOR, IOPARM_HAS_IOSTAT, IOPARM_HAS_IOMSG, IOPARM_COMMON_MASK, + IOPARM_OPEN_HAS_RECL_IN, IOPARM_OPEN_HAS_FILE, IOPARM_OPEN_HAS_STATUS, + IOPARM_OPEN_HAS_ACCESS, IOPARM_OPEN_HAS_FORM, IOPARM_OPEN_HAS_BLANK, + IOPARM_OPEN_HAS_POSITION, IOPARM_OPEN_HAS_ACTION, + IOPARM_OPEN_HAS_DELIM, IOPARM_OPEN_HAS_PAD, IOPARM_CLOSE_HAS_STATUS, + IOPARM_INQUIRE_HAS_EXIST, IOPARM_INQUIRE_HAS_OPENED, + IOPARM_INQUIRE_HAS_NUMBER, IOPARM_INQUIRE_HAS_NAMED, + IOPARM_INQUIRE_HAS_NEXTREC, IOPARM_INQUIRE_HAS_RECL_OUT, + IOPARM_INQUIRE_HAS_FILE, IOPARM_INQUIRE_HAS_ACCESS, + IOPARM_INQUIRE_HAS_FORM, IOPARM_INQUIRE_HAS_BLANK, + IOPARM_INQUIRE_HAS_POSITION, IOPARM_INQUIRE_HAS_ACTION, + IOPARM_INQUIRE_HAS_DELIM, IOPARM_INQUIRE_HAS_PAD, + IOPARM_INQUIRE_HAS_NAME, IOPARM_INQUIRE_HAS_SEQUENTIAL, + IOPARM_INQUIRE_HAS_DIRECT, IOPARM_INQUIRE_HAS_FORMATTED, + IOPARM_INQUIRE_HAS_UNFORMATTED, IOPARM_INQUIRE_HAS_READ, + IOPARM_INQUIRE_HAS_WRITE, IOPARM_INQUIRE_HAS_READWRITE, + IOPARM_DT_LIST_FORMAT, IOPARM_DT_NAMELIST_READ_MODE, + IOPARM_DT_HAS_REC, IOPARM_DT_HAS_SIZE, IOPARM_DT_HAS_IOLENGTH, + IOPARM_DT_HAS_FORMAT, IOPARM_DT_HAS_ADVANCE, + IOPARM_DT_HAS_INTERNAL_UNIT, IOPARM_DT_HAS_NAMELIST_NAME, + IOPARM_DT_IONML_SET): Define. + (gfc_unit): Add lock, waiting and close fields. Change file + from flexible array member into pointer to char. + (open_external): Add st_parameter_open * argument. + (find_file, file_exists): Add file and file_len arguments. + (flush_all_units): New prototype. + (max_offset, unit_root, unit_lock): New variable. + (is_internal_unit, is_array_io, next_array_record, + parse_format, next_format, unget_format, format_error, + read_block, write_block, next_record, convert_real, + read_a, read_f, read_l, read_x, read_radix, read_decimal, + list_formatted_read, finish_list_read, namelist_read, + namelist_write, write_a, write_b, write_d, write_e, write_en, + write_es, write_f, write_i, write_l, write_o, write_x, write_z, + list_formatted_write, get_unit): Add st_parameter_dt * argument. + (insert_unit): Remove prototype. + (find_or_create_unit, unlock_unit): New prototype. + (new_unit): Return gfc_unit *. Add st_parameter_open * + and gfc_unit * arguments. + (free_fnodes): Remove prototype. + (free_format_data): New prototype. + (scratch): Remove. + (init_at_eol): Remove prototype. + (free_ionml): New prototype. + (inc_waiting_locked, predec_waiting_locked, dec_waiting_unlocked): + New inline functions. + * io/unit.c (max_offset, unit_root, unit_lock): New variables. + (insert): Adjust os_error caller. + (insert_unit): Made static. Allocate memory here, initialize + lock and after inserting it return it, locked. + (delete_unit): Adjust for deletion of g. + (find_unit_1): New function. + (find_unit): Use it. + (find_or_create_unit): New function. + (get_unit): Add dtp argument, change meaning of the int argument + as creation request flag. Adjust for different st_* calling + conventions, lock internal unit's lock before returning it + and removal of g. Call find_unit_1 instead of find_unit. + (is_internal_unit, is_array_io): Add dtp argument, adjust for + removal of most of global variables. + (init_units): Initialize unit_lock. Adjust insert_unit callers + and adjust for g removal. + (close_unit_1): New function. + (close_unit): Use it. + (unlock_unit): New function. + (close_units): Lock unit_lock, use close_unit_1 rather than + close_unit. + * io/close.c (st_close): Add clp argument. Adjust for new + st_* calling conventions and internal function API changes. + * io/file_pos.c (st_backspace, st_endfile, st_rewind, st_flush): + Add fpp argument. Adjust for new st_* calling conventions and + internal function API changes. + (formatted_backspace, unformatted_backspace): Likewise. Add + u argument. + * io/open.c (edit_modes, st_open): Add opp argument. Adjust for + new st_* calling conventions and internal function API changes. + (already_open): Likewise. If not HAVE_UNLINK_OPEN_FILE, unlink + scratch file. Instead of calling close_unit just call sclose, + free u->file if any and clear a few u fields before calling + new_unit. + (new_unit): Return gfc_unit *. Add opp and u arguments. + Adjust for new st_* calling conventions and internal function + API changes. Don't allocate unit here, rather than work with + already created unit u already locked on entry. In case + of failure, close_unit it. + * io/unix.c: Include unix.h. + (BUFFER_SIZE, unix_stream): Moved to unix.h. + (unit_to_fd): Add unlock_unit call. + (tempfile): Add opp argument, use its fields rather than ioparm. + (regular_file): Likewise. + (open_external): Likewise. Only unlink file if fd >= 0. + (init_error_stream): Add error argument, set structure it points + to rather than filling static variable and returning its address. + (FIND_FILE0_DECL, FIND_FILE0_ARGS): Define. + (find_file0): Use them. Don't crash if u->s == NULL. + (find_file): Add file and file_len arguments, use them instead + of ioparm. Add locking. Pass either an array of 2 struct stat + or file and file_len pair to find_file0. + (flush_all_units_1, flush_all_units): New functions. + (file_exists): Add file and file_len arguments, use them instead + of ioparm. + * io/unix.h: New file. + * io/lock.c (ioparm, g, ionml): Remove variables. + (library_start): Add cmp argument, adjust for new st_* calling + conventions. + (library_end): Remove. + (free_ionml): New function. + * io/inquire.c (inquire_via_unit, inquire_via_filename, + st_inquire): Add iqp argument, adjust for new st_* calling + conventions and internal function API changes. + * io/format.c (FARRAY_SIZE): Decrease to 64. + (fnode_array, format_data): New typedefs. + (avail, array, format_string, string, error, saved_token, value, + format_string_len, reversion_ok, saved_format): Remove variables. + (colon_node): Add const. + (free_fnode, free_fnodes): Remove. + (free_format_data): New function. + (next_char, unget_char, get_fnode, format_lex, parse_format_list, + format_error, parse_format, revert, unget_format, next_test): Add + fmt or dtp arguments, pass it all around, adjust for internal + function API changes and adjust for removal of global variables. + (next_format): Likewise. Constify return type. + (next_format0): Constify return type. + * io/transfer.c (current_unit, sf_seen_eor, eor_condition, max_pos, + skips, pending_spaces, scratch, line_buffer, advance_status, + transfer): Remove variables. + (transfer_integer, transfer_real, transfer_logical, + transfer_character, transfer_complex, transfer_array, current_mode, + read_sf, read_block, read_block_direct, write_block, + write_block_direct, unformatted_read, unformatted_write, + type_name, write_constant_string, require_type, + formatted_transfer_scalar, us_read, us_write, pre_position, + data_transfer_init, next_record_r, next_record_w, next_record, + finalize_transfer, iolength_transfer, iolength_transfer_init, + st_iolength, st_iolength_done, st_read, st_read_done, st_write, + st_write_done, st_set_nml_var, st_set_nml_var_dim, + next_array_record): Add dtp argument, pass it all around, adjust for + internal function API changes and removal of global variables. + * io/list_read.c (repeat_count, saved_length, saved_used, + input_complete, at_eol, comma_flag, last_char, saved_string, + saved_type, namelist_mode, nml_read_error, value, parse_err_msg, + nml_err_msg, prev_nl): Remove variables. + (push_char, free_saved, next_char, unget_char, eat_spaces, + eat_separator, finish_separator, nml_bad_return, convert_integer, + parse_repeat, read_logical, read_integer, read_character, + parse_real, read_complex, read_real, check_type, + list_formatted_read_scalar, list_formatted_read, finish_list_read, + find_nml_node, nml_untouch_nodes, nml_match_name, nml_query, + namelist_read): Add dtp argument, pass it all around, adjust for + internal function API changes and removal of global variables. + (nml_parse_qualifier): Likewise. Add parse_err_msg argument. + (nml_read_obj): Likewise. Add pprev_nl, nml_err_msg, clow and + chigh arguments. + (nml_get_obj_data): Likewise. Add pprev_nl and nml_err_msg + arguments. + (init_at_eol): Removed. + * io/read.c (convert_real, read_l, read_a, next_char, read_decimal, + read_radix, read_f, read_x): Add dtp argument, pass it all around, + adjust for internal function API changes and removal of global + variables. + (set_integer): Adjust internal_error caller. + * io/write.c (no_leading_blank, nml_delim): Remove variables. + (write_a, calculate_sign, calculate_G_format, output_float, + write_l, write_float, write_int, write_decimal, write_i, write_b, + write_o, write_z, write_d, write_e, write_f, write_en, write_es, + write_x, write_char, write_logical, write_integer, write_character, + write_real, write_complex, write_separator, + list_formatted_write_scalar, list_formatted_write, nml_write_obj, + namelist_write): Add dtp argument, pass it all around, adjust for + internal function API changes and removal of global variables. + (extract_int, extract_uint, extract_real): Adjust internal_error + callers. + * runtime/fpu.c (_GNU_SOURCE): Don't define here. + * runtime/error.c: Include ../io/unix.h. + (filename, line): Remove variables. + (st_printf): Pass address of a local variable to init_error_stream. + (show_locus): Add cmp argument. Use fields it points to rather than + filename and line variables. + (os_error, runtime_error): Remove show_locus calls. + (internal_error): Add cmp argument. Pass it down to show_locus. + (generate_error): Likewise. Use flags bitmask instead of non-NULL + check for iostat and iomsg parameter presence, adjust for st_* + calling convention changes. + * runtime/stop.c (stop_numeric, stop_string): Remove show_locus + calls. + * runtime/pause.c (pause_numeric, pause_string): Likewise. + * runtime/string.c: Include ../io/io.h. + (find_option): Add cmp argument. Pass it down to generate_error. + * intrinsics/flush.c (recursive_flush): Remove. + (flush_i4, flush_i8): Use flush_all_units. Add unlock_unit + call. + * intrinsics/rand.c: Include ../io/io.h. + (rand_seed_lock): New variable. + (srand, irand): Add locking. + (init): New constructor function. + * intrinsics/random.c: Include ../io/io.h. + (random_lock): New variable. + (random_r4, random_r8, arandom_r4, arandom_r8): Add locking. + (random_seed): Likewise. open failed if fd < 0. Set i correctly. + (init): New constructor function. + * intrinsics/system_clock.c (tp0, t0): Remove. + (system_clock_4, system_clock_8): Don't subtract tp0/t0 from current + time, use just integer arithmetics. + * intrinsics/tty.c (isatty_l4, isatty_l8, ttynam_sub): Add + unlock_unit calls. + +2005-11-20 Richard Henderson + + * Makefile.am: Revert 2005-11-14 change. Enable -free-vectorize + via gmake per-target variables. + * Makefile.in, aclocal.m4: Regenerate. + +2005-11-18 Francois-Xavier Coudert + + * configure.ac: Add "-I ." to the AM_FCFLAGS. + * configure: Regenerate. + +2005-11-18 Hans-Peter Nilsson + + * config/fpu-glibc.h (set_fpu): Only call fedisableexcept for + nonzero FE_ALL_EXCEPT. + +2005-11-17 Francois-Xavier Coudert + + PR fortran/24892 + * io/io.h (unit_access): Add ACCESS_APPEND. + * io/open.c (access_opt): Add APPEND value for ACCESS keyword. + (st_open): Use that new value to set the POSITION accordingly. + +2005-11-14 Janne Blomqvist + + PR fortran/21468 + * Makefile.am: Add -ftree-vectorize for compiling matmul. + * m4/matmul.m4: Add const and restrict to type declarations as + appropriate. + * m4/matmull.m4: Likewise. + * Makefile.in: Regenerated. + * generated/matmul_*.c: Likewise. + +2005-11-13 Francois-Xavier Coudert + + * intrinsics/fget.c: New file. + * intrinsics/ftell.c: New file. + * io/unix.c (stream_offset): New function. + * io/io.h: Add prototype for stream_offset. + * Makefile.am: Add intrinsics/fget.c and intrinsics/ftell.c. + * Makefile.in: Regenerate. + +2005-11-12 Steven G. Kargl + + PR libfortran/24787 + * intrinsics/string_intrinsics.c (string_scan): Off by one; Fix typos + in nearby comment. + +2005-11-10 Andreas Jaeger + + * libgfortran.h: Add proper defines where needed. + +2005-11-10 Andreas Jaeger + + * libgfortran.h: Add missing prototypes for internal_pack + functions. + +2005-11-06 Janne Blomqvist + + PR fortran/24174 + PR fortran/24305 + * io/io.h: Add argument to prototypes, add prototypes for + size_from_*_kind functions. + * io/list_read.c (read_complex): Add size argument, use + it. + (list_formatted_read): Add size argument, cleanup. + (list_formatted_read_scalar): Add size argument. + (nml_read_obj): Fix for padding. + * io/transfer.c: Add argument to transfer function pointer. + (unformatted_read): Add size argument. + (unformatted_write): Likewise. + (formatted_transfer_scalar): Fix for padding with complex(10). + (formatted_transfer): Add size argument, cleanup. + (transfer_integer): Add size argument to transfer call. + (transfer_real): Likewise. + (transfer_logical): Likewise. + (transfer_character): Likewise. + (transfer_complex): Likewise. + (transfer_array): New kind argument, use it. + (data_transfer_init): Add size argument to formatted_transfer + call. + (iolength_transfer): Add size argument, cleanup. + * io/write.c (write_complex): Add size argument, fix for padding + with complex(10). + (list_formatted_write): Add size argument, cleanup. + (list_formatted_write_scalar): Add size argument, use it. + (nml_write_obj): Fix for size vs. kind issue. + * io/size_from_kind.c: New file. + * Makefile.am: Add io/size_from_kind.c. + * configure: Regenerate. + * Makefile.in: Regenerate. + +2005-11-06 Francois-Xavier Coudert + + * intrinsics/ctime.c: New file. + * configure.ac: Add check for ctime. + * Makefile.am: Add ctime.c + * configure: Regenerate. + * config.h.in: Regenerate. + * Makefile.in: Regenerate. + +2005-11-05 Richard Guenther + + * configure.ac: Use AM_FCFLAGS for extra flags, not FCFLAGS. + * configure: Regenerate. + +2005-11-05 Francois-Xavier Coudert + + * intrinsics/tty.c (ttynam): New function. + +2005-11-04 Steven G. Kargl + + PR fortran/24636 + * runtime/stop.c (stop_numeric): Use stop_code = -1. + +2005-11-04 Francois-Xavier Coudert + + PR libfortran/22298 + * runtime/main.c (stupid_function_name_for_static_linking): New + function. + * runtime/error.c (internal_error): Call + stupid_function_name_for_static_linking. + * libgfortran.h: Add prototype for + stupid_function_name_for_static_linking. + +2005-11-01 Paul Thomas + + PR fortran/14994 + * libgfortran/intrinsics/date_and_time.c: Add interface to + the functions date_and_time for the intrinsic function secnds. + +2005-10-31 Jerry DeLisle + + PR libfortran/24584 + * io/list_read.c (free_saved): Set saved_used to zero. + +2005-10-30 Francois-Xavier Coudert + + PR libfortran/20179 + * io/unix.c (flush_if_preconnected): New function. + * io/io.h: Add prototype for flush_if_preconnected. + * io/transfer.c (data_transfer_init): Use flush_if_preconnected + to workaround buggy mixed C-Fortran code. + +2005-10-30 Francois-Xavier Coudert + + * Makefile.am: Add intrinsics/malloc.c file. + * Makefile.in: Regenerate. + * intrinsics/malloc.c: New file, with implementations for free + and malloc library functions. + +2005-10-29 Mike Stump + + * Makefile.am (kinds.h): Remove target, if command fails. + (selected_int_kind.inc): Likewise. + (selected_real_kind.inc): Likewise. + * Makefile.in: Regenerate. + +2005-10-28 Francois-Xavier Coudert + + + * Makefile.am (intrinsics): Add signal.c. + * Makefile.in: Regenerate. + * configure.ac: Checks for signal and alarm. + * config.h.in: Regenerate. + * configure: Regenerate. + * intrinsics/signal.c: New file for SIGNAL and ALARM intrinsics. + +2005-10-28 Francois-Xavier Coudert + + * acinclude.m4 (LIBGFOR_CHECK_FPSETMASK): New check. + * configure.ac: Check for floatingpoint.h, fptrap.h and float.h + headers. Use LIBGFOR_CHECK_FPSETMASK. Check for fp_trap and + fp_enable functions. + * configure.host: Add case for systems with fpsetmask and systems + with fp_trap/fp_enable. + * config/fpu-sysv.h: New file, FPU code using fpsetmask. + * config/fpu-aix.h: New file, FPU code for AIX using fp_trap and + fp_enable. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * config.h.in: Regenerate. + +2005-10-24 Jerry DeLisle + + PR libfortran/24224 + * libgfortran.h: Remove array stride error code. + * runtime/error.c: Remove array stride error. + * io/io.h: Change name of 'nml_loop_spec' to 'array_loop_spec' to be + generic. Add pointer to array_loop_spec and rank to gfc_unit + structure. + * io/list_read.c: Revise nml_loop_spec references to array_loop_spec. + * io/transfer.c (init_loop_spec): New function to initialize + an array_loop_spec. + (next_array_record): New function to return the index to the next array + record by incrementing through the array_loop_spec. + (next_record_r): Use new function. + (next_record_w): Use new function. + (finalize_transfer): Free memory allocated for array_loop_spec. + * io/unit.c (get_array_unit_len): Delete this function. Use new + function init_loop_spec to initialize the array_loop_spec. + +2005-10-24 Paul Thomas + + PR fortran/24416 + * libgfortran/io/list_read.c (namelist_read): Exit with call to + free_saved () so that character strings do not accumulate. + +2005-10-23 Jerry DeLisle + + PR libfortran/24489 + * io/transfer.c (read_block): Change the order of execution to not read + past end-of-record. + (read_block_direct): Same change. + +2005-10-23 Francois-Xavier Coudert + + PR libfortran/23272 + * acinclude.m4 (LIBGFOR_CHECK_WORKING_STAT): New check. + * configure.ac: Use LIBGFOR_CHECK_WORKING_STAT. + * Makefile.in: Regenerate. + * configure: Regenerate. + * config.h.in: Regenerate. + * aclocal.m4: Regenerate. + * io/unix.c (compare_file_filename): Add fallback case for + systems without working stat. + * io/open.c (already_open): Correct call to + compare_file_filename. + * io/io.h: Correct proto for compare_file_filename. + +2005-10-23 Francois-Xavier Coudert + + * runtime/fpu.c: Add _GNU_SOURCE definition. + * config/fpu-glibc.h: Remove __USE_GNU definition. + +2005-10-23 Paul Thomas + + PR fortran/24384 + * intrinsics/spread_generic.c (spread_internal_scalar): New + function that handles the special case of spread with a scalar + source. This has new interface functions - + (spread_scalar, spread_char_scalar): New functions to interface + with the calls specified in gfc_resolve_spread. + +2005-10-21 Francois-Xavier Coudert + + PR libfortran/24383 + * io/unix.c: Add fallback definition for SSIZE_MAX. + +2005-10-19 Francois-Xavier Coudert + + * c99_protos.h: Define preprocessor HAVE_ macros with value 1 + instead of empty value. + * intrinsics/c99_functions.c: Likewise. + * intrinsics/getXid.c: Define HAVE_GETPID with value 1 instead of + empty value. + * intrinsics/sleep.c: Define HAVE_SLEEP with value 1 instead of + empty value. + +2005-10-19 Francois-Xavier Coudert + + PR libfortran/24432 + * c99_protos.h: Define HAVE_ macros for all provided functions. + +2005-10-14 Uros Bizjak + + * config/fpu-387.h (set_fpu): Remove extra ":" in stmxcsr. + Change cw and cw_sse variables to unsigned. + (SSE): New definition. + (has_sse): Use it. + +2005-10-13 Thomas Koenig + + * io/unix.c(fd_alloc_r_at): Use read() instead of do_read() + only in case of special files (e.g. terminals). + +2005-10-13 Uros Bizjak + + * config/fpu-387.h (set_fpu): Add "=m" for stmxcsr. + +2005-10-12 Francois-Xavier Coudert + + * Makefile.am: Add fpu.c to the build process, and + target-dependent code as fpu-target.h. + * Makefile.in: Regenerate. + * configure.ac: Add call to configure.host to set + FPU_HOST_HEADER. + * configure: Regenerate. + * configure.host: New script to determine which host-dependent + code should go in. + * libgfortran.h: Add fpe option, remove previous fpu_ options. + Add bitmasks for different FPE traps. Add prototype for set_fpu. + * runtime/environ.c: Remove environment variables to control + fpu behaviour. + * runtime/fpu.c (set_fpe): New function for the front-end. + * runtime/main.c (init): Set FPU state. + * config: New directory to store host-dependent code. + * config/fpu-387.h: New file with code handling the i387 FPU. + * config/fpu-glibc.h: New file with code for glibc systems. + * config/fpu-generic.h: Fallback for the most generic host. Issue + warnings. + +2005-10-12 Janne Blomqvist + + * io/unix.c(fd_alloc_r_at): Remove parts of patch of 2005/10/07 that + cause input from the terminal to hang. + +2005-10-11 Steven G. Kargl + + PR libfortran/24313 + * c99_functions.c (csqrtf, csqrt): Fix choice of branch cut. Note + csqrt{f} were imported from glibc, and this bug is still present + there. glibc PR is 1146. + +2005-10-07 Janne Blomqvist + + PR fortran/16339 + PR fortran/23363 + * io/io.h: Add read and write members to stream, define access + macros. + * io/transfer.c (read_block_direct): New function. + (write_block_direct): New function. + (unformatted_read): Change to use read_block_direct. + (unformatted_write): Change to use write_block_direct. + * io/unix.c: Remove mmap includes and defines. + (writen): Remove. + (readn): Remove. + (reset_stream): New function. + (do_read): New function. + (do_write): New function. + (fd_flush): Change to use do_write() instead of writen(). + (fd_alloc_r_at): Change to use do_read(). + (fd_seek): Change return type to try, as the prototype. Add check + to avoid syscall overhead if possible. + (fd_read): New function. + (fd_write): New function. + (fd_open): Set pointers for new functions. + (mem_read): New function. + (mem_write): New function. + (open_internal): Set pointers for new functions. + (is_seekable): Clean up comment. + +2005-10-07 Jerry DeLisle + + * io/transfer.c (write_block): Add test for end-of-file condition, + removed from mem_alloc_w_at. (next_record_w): Clean up checks for + NULL pointer returns from s_alloc_w. + * io/unix.c (mem_alloc_w_at): Remove call to generate_error end-of-file. + * io/write.c (write_float): Add checks for NULL pointer returns from + write_block calls. (write_integer): Same. + +2005-10-03 Jakub Jelinek + + * runtime/memory.c (allocate_size): Malloc 1 byte if size == 0. + +2005-10-03 Francois-Xavier Coudert + + PR libfortran/19308 + PR libfortran/22437 + * Makefile.am: Add generated files for large real and integers + kinds. Add a rule to create the kinds.inc c99_protos.inc files. + Use kinds.inc to preprocess Fortran generated files. + * libgfortran.h: Add macro definitions for GFC_INTEGER_16_HUGE, + GFC_REAL_10_HUGE and GFC_REAL_16_HUGE. Add types gfc_array_i16, + gfc_array_r10, gfc_array_r16, gfc_array_c10, gfc_array_c16, + gfc_array_l16. + * mk-kinds-h.sh: Define macros HAVE_GFC_LOGICAL_* and + HAVE_GFC_COMPLEX_* when these types are available. + * intrinsics/ishftc.c (ishftc16): New function for GFC_INTEGER_16. + * m4/all.m4, m4/any.m4, m4/count.m4, m4/cshift1.m4, m4/dotprod.m4, + m4/dotprodc.m4, m4/dotprodl.m4, m4/eoshift1.m4, m4/eoshift3.m4, + m4/exponent.m4, m4/fraction.m4, m4/in_pack.m4, m4/in_unpack.m4, + m4/matmul.m4, m4/matmull.m4, m4/maxloc0.m4, m4/maxloc1.m4, + m4/maxval.m4, m4/minloc0.m4, m4/minloc1.m4, m4/minval.m4, m4/mtype.m4, + m4/nearest.m4, m4/pow.m4, m4/product.m4, m4/reshape.m4, + m4/set_exponent.m4, m4/shape.m4, m4/specific.m4, m4/specific2.m4, + m4/sum.m4, m4/transpose.m4: Protect generated functions with + appropriate "#if defined (HAVE_GFC_type_kind)" preprocessor directives. + * Makefile.in: Regenerate. + * all files in generated/: Regenerate. + +2005-10-01 Jakub Jelinek + + * runtime/memory.c (malloc_t): Remove. + (GFC_MALLOC_MAGIC, HEADER_SIZE, DATA_POINTER, DATA_HEADER): Remove. + (mem_root, runtime_cleanup, malloc_with_header): Remove. + (internal_malloc_size): Use just get_mem if size != 0, return NULL + otherwise. + (internal_free): Just free if non-NULL. + (internal_realloc_size): Remove debugging stuff. + (allocate_size): Use malloc directly, remove debugging stuff. + (deallocate): Use free directly, fix error message wording. + + * libgfortran.h (GFC_ITOA_BUF_SIZE, GFC_XTOA_BUF_SIZE, + GFC_OTOA_BUF_SIZE, GFC_BTOA_BUF_SIZE): Define. + (gfc_itoa, xtoa): Add 2 extra arguments. + * runtime/environ.c: Include stdio.h. + (check_buffered): Use sprintf. + * runtime/error.c: Include assert.h. + (gfc_itoa, xtoa): Add 2 extra arguments, avoid using static + buffers. + (st_printf, st_sprintf): Adjust callers. + * io/write.c (otoa, btoa): Add 2 extra arguments, avoid using + static buffers. + (write_int, write_decimal): Add 2 extra arguments to conv + function pointer, adjust caller. + (write_integer): Adjust gfc_itoa caller. + + * io/unit.c (get_array_unit_len): Return 0 rather than NULL. + + * io/read.c (read_f): Remove spurious pointer dereference. + +2005-09-30 Janne Blomqvist + + PR 24112 + * io/open.c (edit_modes): Check for correct flag. + +2005-09-29 Jakub Jelinek + + * runtime/string.c (find_option): Change 3rd argument to + const st_option *. + * libgfortran.h (find_option): Likewise. + * runtime/environ.c (rounding, precision, signal_choices): Constify. + (init_choice, show_choice): Change 2nd argument to const choice *. + * io/open.c (access_opt, action_opt, blank_opt, delim_opt, form_opt, + position_opt, status_opt, pad_opt): Constify. + * io/transfer.c (advance_opt): Likewise. + * io/inquire.c (undefined): Likewise. + * io/close.c (status_opt): Likewise. + * io/format.c (posint_required, period_required, nonneg_required, + unexpected_element, unexpected_end, bad_string, bad_hollerith, + reversion_error): Likewise. + * io/unix.c (yes, no, unknown): Change from const char * + into const char []. + +2005-09-27 Steve Ellcey + + PR target/23552 + * acinclude.m4 (LIBGFOR_CHECK_FOR_BROKEN_ISFINITE): New. + (LIBGFOR_CHECK_FOR_BROKEN_ISNAN): New. + (LIBGFOR_CHECK_FOR_BROKEN_FPCLASSIFY): New. + * configure.ac (LIBGFOR_CHECK_FOR_BROKEN_ISFINITE): Add use. + (LIBGFOR_CHECK_FOR_BROKEN_ISNAN): Add use. + (LIBGFOR_CHECK_FOR_BROKEN_FPCLASSIFY): Add use. + * configure: Regenerate. + * config.h.in: Regenerate. + * libgfortan.h (isfinite): undef if broken, set if needed. + (isnan): undef if broken, set if needed. + (fpclassify): undef if broken, set if needed. + * io/write.c: Remove TODO comment about working isfinite. + * intrinsics/c99_functions.c (round): Use isfinite instead + of fpclassify. + * intrinsics/c99_functions.c (roundf): Ditto. + +2005-09-24 Janne Blomqvist + + * io.h: Changed prototypes of list_formatted_{read|write}. + * list_read.c (list_formatted_read): Renamed to + list_formatted_read_scalar and made static. + (list_formatted_read): New function. + * transfer.c: Prototype for transfer_array. Changed transfer + function pointer. + (unformatted_read): Add nelems argument, use it. + (unformatted_write): Likewise. + (formatted_transfer): Changed name to formatted_transfer_scalar. + (formatted_transfer): New function. + (transfer_integer): Add nelems argument to transfer call, move + updating item count to transfer functions. + (transfer_real): Likewise. + (transfer_logical): Likewise. + (transfer_character): Likewise. + (transfer_complex): Likewise. + (transfer_array): New function. + (data_transfer_init): Call formatted_transfer with new argument. + (iolength_transfer): New argument, use it. + * write.c (list_formatted_write): Renamed to + list_formatted_write_scalar, made static. + (list_formatted_write): New function. + +2005-09-26 David Edelsohn + + * configure.ac: Add check for __clog. + * configure: Regenerate. + +2005-09-25 Francois-Xavier Coudert + + * c99_protos.h: Add prototypes for C99 complex functions. + * libgfortran.h: Include complex.h before c99_protos.h. + * intrinsics/c99_functions.c: Define HAVE_ macros for the + fallback functions we provide. + (cabsf, cabs, cabsl, cargf, carg, cargl, cexpf, cexp, cexpl, + clogf, clog, clogl, clog10f, clog10, clog10l, cpowf, cpow, cpowl, + cqsrtf, csqrt, csqrtl, csinhf, csinh, csinhl, ccoshf, ccosh, + ccoshl, ctanhf, ctanh, ctanhl, csinf, csin, csinl, ccosf, ccos, + ccosl, ctanf, ctan, ctanl): New fallback functions. + * Makefile.am (gfor_math_trig_c, gfor_math_trig_obj, + gfor_specific_c, gfor_cmath_src, gfor_cmath_obj): Remove. + * Makefile.in: Regenerate. + * configure.ac: Remove checks for csin. Add checks for all C99 + complex functions. + * config.h.in: Regenerate. + * configure: Regenerate. + * aclocal.m4: Regenerate. + +2005-09-25 Francois-Xavier Coudert + Danny Smith + + PR libfortran/23803 + * intrinsics/getXid.c: Add getpid wrapper for MinGW. + * intrinsics/getlog.c: Add getlogin wrapper for MinGW. + * intrinsics/hostnm.c: Add gethostname wrapper for MinGW. + +2005-09-24 Francois-Xavier Coudert + + PR libfortran/23802 + * intrinsics/sleep.c: Add correct sleep macro for MinGW. + +2005-09-24 Francois-Xavier Coudert + + PR libfortran/23380 + * intrinsics/cpu_time.c (__cpu_time_1): Provide a MS Windows + version. + +2005-09-14 Jerry DeLisle + + PR target/19269 + * intrinsics/cshift0.c (cshift0): Add an extra size argument. + (cshift0_1, cshift0_2, cshift0_4, cshift0_8): Replace explicit + implementations with... + (DEFINE_CSHIFT): ...this new macro. Define character versions too. + * intrinsics/eoshift0.c (zeros): Delete. + (eoshift0): Add extra size and filler arguments. Use memset if no + bound is provided. + (eoshift0_1, eoshift0_2, eoshift0_4, eoshift0_8): Replace explicit + implementations with... + (DEFINE_EOSHIFT): ...this new macro. Define character versions too. + * intrinsics/eoshift2.c (zeros): Delete. + (eoshift2): Add extra size and filler arguments. Use memset if no + bound is provided. + (eoshift2_1, eoshift2_2, eoshift2_4, eoshift2_8): Replace explicit + implementations with... + (DEFINE_EOSHIFT): ...this new macro. Define character versions too. + * intrinsics/pack.c (pack_internal): New static function, reusing + the contents of pack and adding an extra size argument. Change + "mptr" rather than "m" when calculating the array size. + (pack): Redefine as a forwarder to pack_internal. + (pack_s_internal): New static function, reusing the contents of + pack_s and adding an extra size argument. + (pack_s): Redefine as a forwarder to pack_s_internal. + (pack_char, pack_s_char): New functions. + * intrinsics/reshape.c (reshape_internal): New static function, + reusing the contents of reshape and adding an extra size argument. + (reshape): Redefine as a forwarder to reshape_internal. + (reshape_char): New function. + * intrinsics/spread.c (spread_internal): New static function, + reusing the contents of spread and adding an extra size argument. + (spread): Redefine as a forwarder to spread_internal. + (spread_char): New function. + * intrinsics/transpose.c (transpose_internal): New static function, + reusing the contents of transpose and adding an extra size argument. + (transpose): Redefine as a forwarder to transpose_internal. + (transpose_char): New function. + * intrinsics/unpack.c (unpack_internal): New static function, reusing + the contents of unpack1 and adding extra size and fsize arguments. + (unpack1): Redefine as a forwarder to unpack_internal. + (unpack0): Call unpack_internal instead of unpack1. + (unpack1_char, unpack0_char): New functions. + * m4/cshift1.m4 (cshift1): New static function, reusing the contents + of cshift1_ and adding an extra size argument. + (cshift1_): Redefine as a forwarder to cshift1. + (cshift1__char): New function. + * m4/eoshift1.m4 (zeros): Delete. + (eoshift1): New static function, reusing the contents of + eoshift1_ and adding extra size and filler arguments. + Fix calculation of hstride. Use memset if no bound is provided. + (eoshift1_): Redefine as a forwarder to eoshift1. + (eoshift1__char): New function. + * m4/eoshift3.m4 (zeros): Delete. + (eoshift3): New static function, reusing the contents of + eoshift3_ and adding extra size and filler arguments. + Use memset if no bound is provided. + (eoshift3_): Redefine as a forwarder to eoshift3. + (eoshift3__char): New function. + * generated/cshift1_4.c, generated/cshift1_8.c, + * generated/eoshift1_4.c, generated/eoshift1_8.c, + * generated/eoshift3_4.c, generated/eoshift3_8.c: Regenerate. + +2005-09-11 Francois-Xavier Coudert + + PR libfortran/20179 + * io/unix.c (is_preconnected): Add function to test if a stream + corresponds to a preconnected unit. + * io/io.h: Add prototype for is_preconnected. + * io/transfer.c (data_transfer_init): Do not truncate + preconnected units. + +2005-09-10 Janne Blomqvist + + * io/unix.c: Remove mmap code. + +2005-09-09 Francois-Xavier Coudert + + PR libfortran/23784 + * io/close.c (st_close): Call library_end even in case of error. + +2005-09-09 Thomas Koenig + + * io/io.h: Add iomsg as last field of st_parameter. + * runtime/error.c (generate_error): If iomsg is present, copy + the message there. + +2005-09-09 Richard Sandiford + + PR fortran/12840 + * runtime/memory.c (internal_malloc_size): Return a null pointer + if the size is zero. + (internal_free): Do nothing if the pointer is null. + (internal_realloc_size, internal_realloc, internal_realloc64): New. + +2005-09-07 Francois-Xavier Coudert + + PR libfortran/23262 + * acinclude.m4 (LIBGFOR_CHECK_CRLF): New check. + * configure.ac: Use new check. + * configure.in: Regenerate. + * config.h.in: Regenerate. + * configure: Regenerate. + * io/transfer.c (next_record_w): Add case for CRLF as line + terminator. + * io/unix.c (tempfile, regular_file): Open files with + O_BINARY on systems with CRLF. + +2005-09-07 Steve Ellcey + + PR libfortran/23419 + * io/write.c (extract_int): Use memcpy to access buffer. + (extract_uint): Ditto. + (extract_real): Ditto. + +2005-09-05 Thomas Koenig + + * io/list_read.c: Adjust size of of value to 32 (to hold + kind=16 complex values). + +2005-09-04 Thomas Koenig + + PR libfortran/23321 + * io/transfer.c(data_transfer_init): Check for a too-large + record number. Return if sseek failed. + +2005-09-03 Jakub Jelinek + + * io/read.c (read_x): Take int argument instead of fnode * and + digging the N from F->u.n. + * io/io.h (read_x): Adjust prototype. + * io/transfer.c (formatted_transfer): Adjust callers. Don't clobber + f->u.n for FMT_T. + +2005-09-02 Francois-Xavier Coudert + + * io/unix.c (stream_ttyname): Protect use of ttyname by + HAVE_TTYNAME macro. + * configure.ac: Add check for ttyname. + * config.h.in: Regenerate. + * configure: Regenerate. + +2005-09-02 Andreas Jaeger + + * libgfortran.h: Add prototype for init_compile_options. + + * io/io.h: Add prototype for notify_std. + +2005-08-31 Steve Ellcey + + * io/read.c (set_integer): Use memcpy to fill buffer. + +2005-08-31 Steve Ellcey + + PR target/23556 + * io/read.c (convert_real): Use memcpy to fill buffer. + +2005-08-29 Thomas Koenig + + PR libfortran/23598 + * io/lock.c(library_start): If ioparm.iostat is present, clear + it unconditionally. + +2005-08-27 Francois-Xavier Coudert + + * acinclude.m4 (LIBGFOR_CHECK_UNLINK_OPEN_FILE): Add check to see + if target can unlink open files. + * configure.ac: Use this new test. + * config.h.in: Regenerate. + * configure: Regenerate. + * Makefile.in: Regenerate. + * aclocal.ac: Regenerate. + * io/io.h: Add prototype for unpack_filename. + * io/close.c (st_close): Delete file after closing unit if + HAVE_UNLINK_OPEN_FILE is not defined. + * io/unix.c (unpack_filename): Unlink scratch file after opening + it only if HAVE_UNLINK_OPEN_FILE is defined. + +2005-08-17 Kelley Cook + + * All files: Update FSF address. + +2005-08-16 Thomas Koenig + + PR libfortran/23428 + * io/transfer.c (iolength_transfer): Remove __attribute__ ((unused)) + from type. Return correct length for inquire(iolength=) + for complex variables. + +2005-08-11 Francois-Xavier Coudert + Steven Bosscher + + PR libfortran/20006 + * Makefile.am: Add file runtime/compile_options.c. + * Makefile.in: Regenerate. + * libgfortran.h: Create structure compile_options_t. Define the + compile_options variable and GFC_STD_ macros. + * runtime/compile_options.c: New file. + * runtime/error.c (notify_std): New function. + * runtime/main.c (init): Call init_compile_options during + initialization. + * io/format.c: Use the new notify_std function for the $ + descriptor extension. + +2005-08-09 Francois-Xavier Coudert + * Makefile.am: Add file intrinsics/tty.c to Makefile process. + * Makefile.in: Regenerate. + * io/io.h: Prototypes for new functions stream_isatty and + stream_ttyname. + * io/unix (stream_isatty, stream_ttyname): New functions to call + isatty() and ttyname() on a given unit. + * intrinsics/tty.c: New file to implement g77 intrinsics TTYNAM + and ISATTY. + +2005-08-08 Jerry DeLisle + + PR libfortran/23154 + * io/transfer.c (data_transfer_init): Initialize + current_unit->bytes_left for a read. + +2005-08-07 Janne Blomqvist + + PR fortran/22390 + * io/backspace.c: File removed, contents moved to ... + * io/endfile.c: Ditto. + * io/rewind.c: Ditto. + * io/file_pos.c: New file, ... here. + * Makefile.am: Add file_pos.c to list, remove obsolete files. + * Makefile.in: Regenerated. + +2005-08-07 Francois-Xavier Coudert + + * io/io.h: Change DEFAULT_TEMPDIR to /tmp instead of /var/tmp. + * io/unix.c (tempfile): Look at the TEMP environment variable + to find the temporary files directory. Whitespace correction. + +2005-08-06 Francois-Xavier Coudert + + * io/unix.c: Add O_RDWR to open() call. + +2005-08-04 Paul Thomas + + * transfer.c (data_transfer_init): Truncate file in + sequential WRITE when last_record == 0, rather than + current_record. Cures problem on RH9. + +2005-08-03 Francois-Xavier Coudert + + * libgfortran.h: When isfinite is not provided by the system, + define it as a macro, so that it can accept any floating point + type. + +2005-08-01 Francois-Xavier Coudert + + PR libfortran/23178 + * intrinsics/flush.c (flush_i8): Add function flush_i8. Update + copyright years. + +2005-07-31 Francois-Xavier Coudert + + PR libfortran/21787 + * intrinsics/abort.c (abort): Close units before aborting. + Updated copyright years. + +2005-07-30 Francois-Xavier Coudert + + PR libfortran/22436 + * io/write.c (write_real): Add default formats for real(10) and + real(16). + +2005-07-30 Paul Thomas + + PR fortran/22570 and related issues. + * transfer.c (formatted_transfer): Make sure that there + really is data present before X- or T- editing. Move all + treatment of tabbing during writes to start of next data + producing format. Suppress incorrect zeroing of bytes_left + in slash formating. Insert int cast for assignment of a + difference of two gfc_offsets. + +2005-07-23 Jerry DeLisle + + * io/write.c (write_float): Revise output of IEEE exceptional + values to comply with F95 and F2003 standards. + +2005-07-22 Jerry DeLisle + + PR libfortran/22570 + * io/unit.c (init_units): Replace BLANK_ZERO with + BLANK_UNSPECIFIED. + +2005-07-22 Jerry DeLisle + + PR libfortran/21875 (FM111.f) + * io/read.c (next_char): Return a ' ' character when BLANK_ZERO + or BLANK_NULL are active. + (read_decimal): Interpret ' ' character correctly for BZ or BN. + (read_radix): Interpret ' ' character correctly for BZ or BN. + (read_f): Interpret ' ' character correctly for BZ or BN. + +2005-07-22 Paul Thomas + + PR libfortran/22570 + * read.c (read_x): Correct the condition for doing the + x-editing during formatted input. + * transfer.c (formatted_transfer): Cast offset difference + as int, clean-up arithmetic with new variable, bytes_used, + zero counters for FMT_SLASH, + (data_transfer_init) Zero X- and T-editing counters + unconditionally. + (next_record_w) Zero X- and T-editing counters. + unconditionally. + +2005-07-17 Jerry DeLisle + + * io/write.c (write_float): Fix field width checks for + printing 'Infinity' or 'Inf'. + (output_float): Fix typo in comment. + +2005-07-12 Paul Thomas + + PR libfortran/16435 + * transfer.c (formatted_transfer): Correct the problems + with X- and T-editting that caused TLs followed by TRs + to overwrite data, which caused NIST FM908.FOR to fail + on many tests. + (data_transfer_init): Zero X- and T-editting counters at + the start of formatted IO. + * write.c (write_x): Write specified number of skips with + specified number of spaces at the end. + +2005-07-13 Paul Thomas + + * io/read.c (read_complex): Prevent X formatting during reads + from going beyond EOR to fix NIST fm908.FOR failure. + * io/list_read.c (read_complex): Allow complex data in list- + directed reads to have eols either side of the comma to + fix NIST FM906.FOR failure. + +2005-07-12 Thomas Koenig + + PR libfortran/21593 + * io/unix.c: Add member special_file to type unix_stream. + (fd_truncate): Don't call ftruncate or chsize if + s refers to a special file. + (fd_to_stream): initialize s->special_file. + +2005-07-11 David Edelsohn + + PR libfortran/22412 + * io/write.c (otoa): Bias p by SCRATCH_SIZE, not + sizeof (SCRATCH_SIZE). + (btoa): Same. + +2005-07-09 Jerry DeLisle + + PR libfortran/21875 (FM111.f) + * io/read.c (next_char): Return a ' ' character when BLANK_ZERO or + BLANK_NULL are active. + (read_decimal): Interpret ' ' character correctly for BZ or BN. + (read_radix): Interpret ' ' character correctly for BZ or BN. + (read_f): Interpret ' ' character correctly for BZ or BN. + * gfortran.dg/test (fmt_read_bz_bn.f90): New test case. + +2005-07-09 Francois-Xavier Coudert + Thomas Koenig + + PR libfortran/22217 + * io/write.c (extract_unit): New function; extract + ints as unsigned signed int of the correct size. + (write_int): Use it. + * runtime/error.c: Adjust copyright years. + Adjust size of buffer to maximum that can occur. + +2005-07-07 Tobias Schl"uter + + * libgfortran.h (GFC_ARRAY_DESCRIPTOR): Replace 'type *base' by + 'size_t offset'. + * intrinsics/cshift0.c, intrinsics/eoshift0.c, + intrinsics/eoshift2.c,intrinsics/pack_generic.c, + intrinsics/reshape_generic.c, intrinsics/spread_generic.c, + intrinsics/transpose_generic.c, intrinsics/unpack_generic, + m4/cshift1.m4, m4/eoshift1.m4, m4/eoshift3.m4, m4/iforeach.m4, + m4/ifunction.m4, m4/matmul.m4, m4/matmull.m4, m4/reshape.m4, + m4,transpose.m4: Set renamed field 'offset' to zero instead of + 'base'. + * generated/all_l4.c, generated/all_l8.c, + generated/any_l4.c, generated/any_l8.c, generated/count_4_l4.c, + generated/count_4_l8.c, generated/count_8_l4.c, + generated/count_8_l8.c, generated/chift1_4.c, + generated/cshift1_8.c, generated/eoshift1_4.c, + generated/eoshift1_8.c, generated/eoshift3_4.c, + generated/eoshift3_8.c, generated/matmul_c4.c, + generated/matmul_c8.c, generated/matmul_i4.c, matmul_i8.c, + generated/matmul_l4.c, generated/matmul_l8.c, + generated/matmul_r4.c, generated/matmul_r8.c, + generated/maxloc0_4_i4.c, generated/maxloc0_4_i8.c, + generated/maxloc0_4_r4.c, generated/maxloc0_4_r8.c, + generated/maxloc0_8_i4.c, generated/maxloc0_8_i8.c, + generated/maxloc0_8_r4.c, generated/maxloc0_8_r8.c, + generated/maxloc1_4_i4.c, generated/maxloc1_4_i8.c, + generated/maxloc1_4_r4.c, generated/maxloc1_4_r8.c, + generated/maxloc1_8_i4.c, generated/maxloc1_8_i8.c, + generated/maxloc1_8_r4.c, generated/maxloc1_8_r8.c, + generated/maxval_i4.c, generated/maxval_i8.c, + generated/maxval_r4.c, generated/maxval_r8.c, + generated/minloc0_4_i4.c, generated/minloc0_4_i8.c, + generated/minloc0_4_r4.c, generated/minloc0_4_r8.c, + generated/minloc0_8_i4.c, generated/minloc0_8_i8.c, + generated/minloc0_8_r4.c, generated/minloc0_8_r8.c, + generated/minloc1_4_i4.c, generated/minloc1_4_i8.c, + generated/minloc1_4_r4.c, generated/minloc1_4_r8.c, + generated/minloc1_8_i4.c, generated/minloc1_8_i8.c, + generated/minloc1_8_r4.c, generated/minloc1_8_r8.c, + generated/minval_i4.c, generated/minval_i8.c, + generated/minval_r4.c, generated/minval_r8.c, + generated/product_c4.c, generated/product_c8.c, + generated/product_i4.c, generated/product_i8.c, + generated/product_r4.c, generated/product_r8.c, + generated/reshape_c4.c, generated/reshape_c8.c, + generated/reshape_i4.c, generated/reshape_i8.c, + generated/sum_c4.c, generated/sum_c8.c, generated/sum_i4.c, + generated/sum_i8.c, generated/sum_r4.c, generated/sum_r8.c, + generated/transpose_c4.c, generated/transpose_c8.c, + generated/transpose_i4.c, generated/transpose_i8.c: Regenerate: + +2005-07-07 Thomas Koenig + + PR libfortran/21594 + * intrinsics/eoshift0.c: If abs(shift) > len, fill the + the whole array with the boundary value, but don't overrun it. + * intrinsics/eoshift2.c: Likewise. + * m4/eoshift1.m4: Likewise. + * m4/eoshift3.m4: Likewise. + * generated/eoshift1_4.c: Regenerated. + * generated/eoshift1_8.c: Regenerated. + * generated/eoshift3_4.c: Regenerated. + * generated/eoshift3_8.c: Regenerated. + +2005-07-07 Feng Wang + + PR fortran/16531 + * io/transfer.c (formatted_transfer): Enable FMT_A on other types to + support Hollerith constants. + +2005-07-01 Andreas Jaeger + + * intrinsics/unpack_generic.c: Remove const from parameter. + + * io/transfer.c (formatted_transfer): Remove unused variable. + +2005-06-28 Thomas Koenig + + PR libfortran/22142 + * m4/eoshift1.m4: Correct bstride (it needs to be multiplied + by size since it's a char pointer). + * m4/eoshift1_4.c: Regenerated. + * m4/eoshift1_8.c: Regenerated. + +2005-06-28 Thomas Koenig + + PR libfortran/22142 + * m4/eoshift3.m4: Correct bstride (it needs to be multiplied + by size since it's a char pointer). + * m4/eoshift3_4.c: Regenerated. + * m4/eoshift3_8.c: Regenerated. + +2005-06-28 Francois-Xavier Coudert + + PR libfortran/22170 + * io/transfer.c (formatted_transfer): Do not iterate on the + repeat count of a FMT_SLASH, since this is already done in + next_format(). + +2005-06-25 Thomas Koenig + + PR libfortran/22144 + * m4/cshift1.m4: Remove const from argument ret. + Populate return array descriptor if ret->data is NULL. + * m4/eoshift1.m4: Likewise. + * m4/eoshift3.m4: Likewise. + * generated/cshift1_4.c: Regenerated. + * generated/cshift1_8.c: Regenerated. + * generated/eoshift1_4.c: Regenerated. + * generated/eoshift1_8.c: Regenerated. + * generated/eoshift3_4.c: Regenerated. + * generated/eoshift3_8.c: Regenerated. + +2005-06-24 Jerry DeLisle + + PR libfortran/21915 + * Makefile.am: Include intrinsics/hyper.c. + * c99_protos.h: Add prototypes for single precision versions of + acosh, asinh, and atanh for platforms that do not have these. + * config.h.in: Add #undef for wrappers. + * configure.ac: Add checks for single precision versions. + * aclocal.m4: Regenerated. + * Makefile.in: Regenerated. + * configure: Regenerated. + * intrinsics/hyper.c: New file, adds new wrapper functions. + +2005-06-23 Francois-Xavier Coudert + + * intrinsics/c99_functions.c (log10l): New log10l function for + systems where this is not available. + * c99_protos.h: Prototype for log10l function. + * libgfortran.h: Use generated kinds.h to define GFC_INTEGER_*, + GFC_UINTEGER_*, GFC_LOGICAL_*, GFC_REAL_*, GFC_COMPLEX_*. Update + prototypes for gfc_itoa and xtoa. + * io/io.h: Update prototypes for set_integer and max_value. + * io/list_read.c (convert_integer): Use new + GFC_(INTEGER|REAL)_LARGEST type. + * io/read.c (set_integer): Likewise. + (max_value): Likewise. + (convert_real): Likewise. + (real_l): Likewise. + (next_char): Likewise. + (read_decimal): Likewise. + (read_radix): Likewise. + (read_f): Likewise. + * io/write.c (extract_int): Use new GFC_INTEGER_LARGEST type. + (extract_real): Use new GFC_REAL_LARGEST type. + (calculate_exp): Likewise. + (calculate_G_format): Likewise. + (output_float): Likewise. Use log10l for long double values. + Add comment for sprintf format. Use GFC_REAL_LARGEST_FORMAT. + (write_l): Use new GFC_INTEGER_LARGEST type. + (write_float): Use new GFC_REAL_LARGEST type. + (write_int): Remove useless special case for (len < 8). + (write_decimal): Use GFC_INTEGER_LARGEST. + (otoa): Use GFC_UINTEGER_LARGEST as argument. + (btoa): Use GFC_UINTEGER_LARGEST as argument. + * runtime/error.c (gfc_itoa): Use GFC_INTEGER_LARGEST as + argument. + (xtoa): Use GFC_UINTEGER_LARGEST as argument. + * Makefile.am: Use mk-kinds-h.sh to generate header kinds.h + with all Fortran kinds available. + * configure.ac: Check for strtold and log10l. + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * config.h.in: Regenerate. + * mk-kinds-h.sh: Configuration script for available integer + and real kinds. + + +2005-06-18 Janne Blomqvist + + * unix.c (stream_at_bof): Don't assume that all non-mmapped files + are non-seekable. + (stream_at_eof): Likewise. + +2005-06-18 Francois-Xavier Coudert + + PR libfortran/19155 + * io/read.c (convert_real): strtod can set errno to EINVAL on an + empty string, but we shouldn't have an error in that case. + +2005-06-17 Francois-Xavier Coudert + + PR libfortran/19216 + * io/list_read.c (eat_separator): No need to call next_record, + even in non-namelist_mode. + +2005-06-17 Francois-Xavier Coudert + + * io/transfer.c (formatted_transfer): Fix typo in error message. + +2005-06-17 Francois-Xavier Coudert + + PR libfortran/16436 + * io/transfer.c (read_sf): Correct updating of bytes_left field. + (formatted_transfer): Correct updating of bytes_left field and + reformatting code (comments and whitespace). + * io/unix.c (move_pos_offset): "active" field should not be + changed here. Whitespace corrections. + +2005-06-15 Francois-Xavier Coudert + + PR libfortran/21950 + * intrinsics/c99_functions.c (scalbn): Provide fallback + implementation for scalbn. + * c99_protos.h: Prototype for scalbn. + * configure.ac: Add check for scalbn. + * configure: Regenerate. + * config.h.in: Regenerate. + +2005-06-14 Thomas Koenig + + * intrinsics/eoshift0.c: Removed prototype for eoshift0. + * intrinsics/eoshift2.c: Removed prototype for eoshift2. + +2005-06-14 Tom Tromey + + PR libgcj/19877: + * configure, aclocal.m4, Makefile.in: Rebuilt. + +2005-06-12 Thomas Koenig + + PR libfortran/21594 + * intrinsics/eoshift0.c: Add prototype for eoshift0. + * intrinsics/eoshift2.c: Add prototype for eoshift2. + +2005-06-12 Steven G. Kargl + Thomas Koenig + + PR libfortran/PR21797 + * m4/cexp.m4 (csqrt`'q): Add type qualifyer to + sqrt and fabs. + * generated/exp_c4.c: Regenerated. + +2005-06-12 Francois-Xavier Coudert + + PR libfortran/19155 + * io/read.c (read_f): Take care of spaces after initial sign. + +2005-06-11 Thomas Koenig + + PR libfortran/21333 + * Makefile.am: Add in_pack_c4.c, in_pack_c8.c, in_unpack_c4.c + and in_unpack_c8.c. + * Makefile.in: Regenerate. + * libgfortran.h: Declare internal_pack_c4, internal_pack_c8, + internal_unpack_c4 and internal_unpack_c8. + * m4/in_pack.m4: Use rtype_ccode insteald of rtype_kind + in function name. + Use sizeof (rtype_name) as size for memory allocation. + * m4/in_unpack.m4: Use rtype_ccode insteald of rtype_kind + in function name. + Use sizeof (rtype_name) for calculation of sizes for memcpy. + * runtime/in_pack_generic.c: For real, integer and logical + call internal_pack_4 if size==4 and internal_pack_8 if + size==8. + For complex, call internal_pack_c4 if size==8 and + internal_pack_c8 if size==16. + * runtime/in_unpack_generic.c: For real, integer and logical + call internal_unpack_4 if size==4 and internal_unpack_8 if + size==8. + For complex, call internal_unpack_c4 if size==8 and + internal_unpack_c8 if size==16. + * generated/in_pack_i4.c: Regenerated. + * generated/in_pack_i8.c: Regenerated. + * generated/in_unpack_i4.c: Regenerated. + * generated/in_unpack_i8.c: Regenerated. + * generated/in_pack_c4.c: New file. + * generated/in_pack_c8.c: New file. + * generated/in_unpack_c4.c: New file. + * generated/in_unpack_c8.c: New file. + +2005-06-09 Thomas Koenig + + PR libfortran/21480 + * m4/reshape.m4: Use sizeof (rtype_name) for sizes to be passed + to reshape_packed. + * generated/reshape_c4.c: Regenerated. + * generated/reshape_c8.c: Regenerated. + * generated/reshape_i4.c: Regenerated. + * generated/reshape_i8.c: Regenerated. + +2005-06-07 Thomas Koenig + + PR libfortran/21926 + * m4/matmul.m4: Correct zeroing of result for non-packed + arrays with lowest stride is one. + * generated/matmul_c4.c: Regenerated. + * generated/matmul_c8.c: Regenerated. + * generated/matmul_i4.c: Regenerated. + * generated/matmul_i8.c: Regenerated. + * generated/matmul_r4.c: Regenerated. + * generated/matmul_r8.c: Regenerated. + +2005-05-30 Francois-Xavier Coudert + + PR libfortran/20179 + * io/unix.c (fd_close): Add test so that we don't close() + stdout and stderr. + +2005-05-29 Francois-Xavier Coudert + + PR libfortran/20006 + * io/format.c (parse_format_list): Set repeat count of $ format + node to 1. + * io/transfer.c (read_sf): Add g.seen_dollar to the test + concerning advancing I/O. + (data_transfer_init): Likewise. + (finalize_transfer): Likewise. + +2005-05-27 Thomas Koenig + + * runtime/in_pack_generic.c: Adjust copyright years. + (in_pack_generic): Change dimension of auxiliary arrays from + GFC_MAX_DIMENSION - 1 to GFC_MAX_DIMENSION. + * runtime/in_unpack_generic.c: Adjust copyright years. + (in_unpack_generic): Change dimension of auxiliary arrays from + GFC_MAX_DIMENSION - 1 to GFC_MAX_DIMENSION. + +2005-05-26 Thomas Koenig + + PR libfortran/17283 + * intrinsics/unpack_generic.c: Fix name of routine + on top. Update copyright years. + (unpack1): Remove const from return array descriptor. + rs: New variable, for calculating return sizes. + Populate return array descriptor if ret->data is NULL. + +2005-05-22 Peter Wainwright + + PR libfortran/21376 + * io/write.c (output_float): Rework logic to avoid call to log10 + with argument equal to zero. + +2005-05-21 Eric Botcazou + + * configure.ac: Check for trunc and truncf in libm. + * configure: Regenerate. + * config.h.in: Likewise. + * intrinsics/c99_functions.c (trunc, truncf): New functions. + * c99_protos.h (trunc, truncf): Declare them. + +2005-05-18 Thomas Koenig + + PR libfortran/21127 + * Makefile.am: Really commit. + * Makefile.in: Really commit. + +2005-05-18 Thomas Koenig + + PR libfortran/21127 + * Makefile.am: Add generated/reshape_c4.c and + generated/reshape_c8.c. + * Makefile.in: Regenerated. + * m4/iparm.m4: Define rtype_ccode to be c4 or c8 for + complex types, 4 or 8 otherwise. + * m4/reshape.m4: Use rtype_ccode instead of rtype_kind + in function name. + * generated/reshape_c4.c: New file. + * generated/reshape_c8.c: New file. + +2005-05-16 Andreas Jaeger + + * configure.ac: Add additional warning flags. + * configure: Regenerate. + + * io/write.c (calculate_G_format): Remove unused parameter. + (output_float): Remove unused parameter. + (write_float): Change callers. + (nml_write_obj): Avoid signed warning. + Make variable const to support -Wwrite-strings. + + * io/unix.c (fd_alloc, mmap_open, mmap_sfree, mem_sfree, + mem_truncate): Mark argument as unused. + + * io/unit.c (get_unit): Mark argument as unused. + (init_units): Avoid warning about signed comparision. + + * io/transfer.c (next_record_r): Remove unused parameter. + (next_record_w): Remove unused parameter. + (next_record): Change callers. + (iolength_transfer): Mark arguments as unused. + + * io/open.c: Add initializer. + + * io/list_read.c (read_character): Mark argument as unused. + (nml_match_name): Add const to make compile with -Wwrite-strings. + + * io/format.c: Add initializer. + +2005-05-15 Andreas Jaeger + + * m4/eoshift1.m4: Initialize variables to avoid warnings. + * m4/eoshift3.m4: Initialize variables to avoid warnings. + * generated/eoshift1_4.c, generated/eoshift1_8.c, + generated/eoshift3_4.c, generated/eoshift3_8.c: Regenerated. + + * intrinsics/spread_generic.c (spread): Initialize variables to + avoid warnings. + + * intrinsics/eoshift0.c (eoshift0): Initialize variables to avoid + warnings. + * intrinsics/eoshift2.c (eoshift2): Initialize variables to avoid + warnings. + + * io/list_read.c (nml_get_obj_data): Initialize variables to avoid + warnings. + + * intrinsics/pack_generic.c (pack): Remove unneeded calculation. + + * m4/matmull.m4 (matmul_): Remove unneeded calculations, fix + pointer cast to avoid warning. + * generated/matmul_l4.c: Regenerated. + * generated/matmul_l8.c: Regenerated. + + * Makefile.am: Remove AM_CFLAGS here. + * configure.ac: Define AM_CFLAGS and AM_FCFLAGS so that warnings + are set. Set additionally -Wstrict-prototypes for CFLAGS. + * Makefile.in: Regenerated. + * aclocal.m4: Regenerated. + * configure: Regenerated. + + * intrinsics/system_clock.c (system_clock_4, system_clock_8): Add + missing returns, reformat a bit. + + * io/write.c (nml_write_obj): Use %d again - and cast to int, + st_sprintf does not handle %ld. + + * io/unit.c (is_internal_unit): Add void as parameter list. + + * io/transfer.c: Move prototype declarations before the functions. + + * runtime/normalize.c (almostone_r4, almostone_r8): Fix parameter + list. + + * intrinsics/random.c (KISS_DEFAULT_SEED): Remove extra semicolon. + + * io/transfer.c: Do not use empty initializers for global objects. + Add missing initializers. + + * io/lock.c: Do not use empty initializers for global objects. + + * io/close.c: Add missing initializers. + + * runtime/environ.c: Add missing initializers. Do not use empty + initializers for global object. + (init_string): Mark argument as unused. + + * runtime/main.c (cleanup): Fix parameter list. + + * io/io.h: Fix parameter lists. + + * m4/transpose.m4, m4/matmul.m4: Fix pointer cast to avoid + warning. + + * generated/transpose_c4.c, generated/transpose_c8.c, + generated/transpose_i4.c, generated/transpose_i8.c, + generated/matmul_c4.c, generated/matmul_c8.c, + generated/matmul_i4.c, generated/matmul_i8.c, + generated/matmul_r4.c, generated/matmul_r8.c: Regenerated. + + * io/write.c (nml_write_obj): Fix 64-bit problem. + + * io/list_read.c (nml_get_obj_data): Add missing braces around + initializer to avoid warnings. + + * intrinsics/etime.c (etime_sub): Remove unused variable. + + * intrinsics/chdir.c, intrinsics/getlog.c, intrinsics/link.c, + intrinsics/symlnk.c, intrinsics/perror.c: Include for + prototypes. + + * runtime/string.c (compare0): Remove unused variable. + * io/unit.c (init_units): Remove unused variables. + * intrinsics/getcwd.c (getcwd_i4_sub): Remove unused variable. + * intrinsics/unlink.c (unlink_i4_sub): Remove unused variable. + * intrinsics/stat.c (stat_i4_sub, fstat_i8_sub, fstat_i4_sub, + stat_i8_sub): Remove unused variable. + +2005-05-12 Thomas Koenig + + PR libfortran/21324 + * runtime/memory.c: Don't define GFC_CLEAR_MEMORY (it's a + performance hog). + * io/open.c (new_unit): Zero freshly allocated memory for + unit structure. + * io/unit.c (init_units): Zero freshly allocated memory for + STDIN, STDOUT and STDERR. + * io/unix.c (open_internal): Zero freshly allocated memory + for unix_stream. + (fd_to_stream): Likewise. + +2005-05-11 Bud Davis + + PR fortran/19478 + * io/unix.c (fd_truncate): update positions when ftruncate + fails (like writing to /dev/null). + +2005-05-10 Francois-Xavier Coudert + + PR libfortran/21471 + * open.c (new_unit): Take care of the case where POSITION_APPEND + is specified (sseek to the end, and set u>-endfile). + +2005-05-10 Tobias Schl"uter + + PR fortran/20178 + * Makefile.am (gfor_specific_src): Add 'intrinsics/f2c_intrinsics.F90' + to dependencies. + * Makefile.in: Regenerate. + * intrinsics/f2c_specific.F90: New file. + +2005-05-10 Francois-Xavier Coudert + + PR libfortran/20788 + * io/unix.c (fd_to_stream): Add an avoid_mmap argument indicating + we don't we to mmap this stream. Use fd_open instead of mmap_open + in that case. + (open_external): Call fd_to_stream with avoid_mmap = 0. + (input_stream): Call fd_to_stream with avoid_mmap = 1. + (output_stream): Likewise. + (error_stream): Likewise. + +2005-05-09 Mike Stump + + * configure: Regenerate. + +2005-05-09 Francois-Xavier Coudert + + PR libfortran/19155 + * io/read.c (read_f): Accept 'e', 'E', 'd' and 'D' as first + non-blank characters of a real number. + +2005-05-04 Thomas Koenig + + PR libfortran/21354 + * m4/cshift1.m4: Change dimension of auxiliary arrays from + GFC_MAX_DIMENSION - 1 to GFC_MAX_DIMENSION. + * m4/eoshift1.m4: Likewise. + * m4/eoshift3.m4: Likewise. + * m4/ifunction.m4: Likewise. + * m4/in_pack.m4: Likewise. + * m4/in_unpack.m4: Likewise. + * intrinsics/cshift0.c: Likewise. + * intrinsics/eoshift0.c: Likewise. + * intrinsics/eoshift2.c: Likewise. + * intrinsics/random.c: Likewise. + * intrinsics/spread_generic.c: Likewise. + * intrinsics/stat.c: Likewise. + * generated/all_l4.c: Regenerated. + * generated/all_l8.c: Regenerated. + * generated/any_l4.c: Regenerated. + * generated/any_l8.c: Regenerated. + * generated/count_4_l4.c: Regenerated. + * generated/count_4_l8.c: Regenerated. + * generated/count_8_l4.c: Regenerated. + * generated/count_8_l8.c: Regenerated. + * generated/cshift1_4.c: Regenerated. + * generated/cshift1_8.c: Regenerated. + * generated/eoshift1_4.c: Regenerated. + * generated/eoshift1_8.c: Regenerated. + * generated/eoshift3_4.c: Regenerated. + * generated/eoshift3_8.c: Regenerated. + * generated/in_pack_i4.c: Regenerated. + * generated/in_pack_i8.c: Regenerated. + * generated/in_unpack_i4.c: Regenerated. + * generated/in_unpack_i8.c: Regenerated. + * generated/maxloc0_4_i4.c: Regenerated. + * generated/maxloc0_4_i8.c: Regenerated. + * generated/maxloc0_4_r4.c: Regenerated. + * generated/maxloc0_4_r8.c: Regenerated. + * generated/maxloc0_8_i4.c: Regenerated. + * generated/maxloc0_8_i8.c: Regenerated. + * generated/maxloc0_8_r4.c: Regenerated. + * generated/maxloc0_8_r8.c: Regenerated. + * generated/maxloc1_4_i4.c: Regenerated. + * generated/maxloc1_4_i8.c: Regenerated. + * generated/maxloc1_4_r4.c: Regenerated. + * generated/maxloc1_4_r8.c: Regenerated. + * generated/maxloc1_8_i4.c: Regenerated. + * generated/maxloc1_8_i8.c: Regenerated. + * generated/maxloc1_8_r4.c: Regenerated. + * generated/maxloc1_8_r8.c: Regenerated. + * generated/maxval_i4.c: Regenerated. + * generated/maxval_i8.c: Regenerated. + * generated/maxval_r4.c: Regenerated. + * generated/maxval_r8.c: Regenerated. + * generated/minloc0_4_i4.c: Regenerated. + * generated/minloc0_4_i8.c: Regenerated. + * generated/minloc0_4_r4.c: Regenerated. + * generated/minloc0_4_r8.c: Regenerated. + * generated/minloc0_8_i4.c: Regenerated. + * generated/minloc0_8_i8.c: Regenerated. + * generated/minloc0_8_r4.c: Regenerated. + * generated/minloc0_8_r8.c: Regenerated. + * generated/minloc1_4_i4.c: Regenerated. + * generated/minloc1_4_i8.c: Regenerated. + * generated/minloc1_4_r4.c: Regenerated. + * generated/minloc1_4_r8.c: Regenerated. + * generated/minloc1_8_i4.c: Regenerated. + * generated/minloc1_8_i8.c: Regenerated. + * generated/minloc1_8_r4.c: Regenerated. + * generated/minloc1_8_r8.c: Regenerated. + * generated/minval_i4.c: Regenerated. + * generated/minval_i8.c: Regenerated. + * generated/minval_r4.c: Regenerated. + * generated/minval_r8.c: Regenerated. + * generated/product_c4.c: Regenerated. + * generated/product_c8.c: Regenerated. + * generated/product_i4.c: Regenerated. + * generated/product_i8.c: Regenerated. + * generated/product_r4.c: Regenerated. + * generated/product_r8.c: Regenerated. + * generated/sum_c4.c: Regenerated. + * generated/sum_c8.c: Regenerated. + * generated/sum_i4.c: Regenerated. + * generated/sum_i8.c: Regenerated. + * generated/sum_r4.c: Regenerated. + * generated/sum_r8.c: Regenerated. + +2005-04-30 Thomas Koenig + + PR libfortran/18958 + libgfortran.h: Change typedef of index_type from size_t + to ssize_t. + +2005-04-30 Paul Thomas + + PR libfortran/18857 + * generated/matmul_r8.c: Remove incorrect assertions. + * generated/matmul_c4.c: Regenerate + * generated/matmul_c8.c: Regenerate + * generated/matmul_i4.c: Regenerate + * generated/matmul_i8.c: Regenerate + * generated/matmul_r4.c: Regenerate + * generated/matmul_r8.c: Regenerate + +2005-04-29 Francois-Xavier Coudert + + * configure.ac: Check for ftruncate and chsize. + * io/unix.c (fd_truncate): Provide chsize as alternative to + ftruncate. + * config.h.in: Regenerate. + * configure: Regenerate. + +2005-04-29 Tobias Schl"uter + + * intrinsics/rename.c: Add missing #includes. + +2005-04-28 Tobias Schl"uter + + * AUTHORS, COPYING, INSTALL, NEWS, README: Remove. + +2005-04-26 David Edelsohn + + PR libfortran/20930 + * io/rewind.c (st_rewind): Flush the stream when resetting the mode + from WRITING to READING. + +2005-04-22 Paul Thomas + Jerry DeLisle + + * io/write.c (nml_write_obj): Provide 1 more byte for ext_name. + * io/list_read.c (nml_get_obj_data): Put extra brackets in get_mem + call for ext_name. These fix the bug reported by Jerry DeLisle to + the fortran list and are based on his suggested fix. + +2005-04-22 Thomas Koenig + + PR libfortran/20074 + PR libfortran/20436 + PR libfortran/21108 + * m4/reshape.m4 (reshape_`'rtype_kind): rs, rex: New + variables, to be used in calculation of return array sizes. + Populate return array descriptor if ret->data is NULL. + Fix condition for early return (it used to test something + undefined if order was used). + Remove duplicate check wether pad is used. + * intrinsics/reshape_generic.c (reshape_generic): Likewise. + Fix a few places where the wrong variables were set. + * generated/reshape_i4.c: Regenerated. + * generated/reshape_i8.c: Regenerated. + +2005-04-18 Paul Thomas + + * io/list_read.c (nml_touch_nodes, nml_read_obj, + nml_get_obj_data): Fix memory leaks in code for derived types. + +2005-04-11 Francois-Xavier Coudert + + PR libfortran/20950 + * io/inquire.c (inquire_via_unit): Check for the gfc_unit being + NULL when setting ioparm.sequential. + +2005-04-17 Thomas Koenig + + PR libfortran/21075 + * m4/reshape.m4 (reshape_`'rtype_kind): Change dimension + of auxiliary arrays from GFC_MAX_DIMENSIONS - 1 to + GFC_MAX_DIMENSIONS. + * intrinsics/reshape_generic.c (reshape_generic): Likewise. + * generated/reshape_i4.c: Regenerated. + * generated/reshape_i8.c: Regenerated. + +2005-04-17 Paul Thomas + + * io/list_read.c (eat_separator): at_eol = 1 replaced + (zapped at some time?). + +2005-04-17 Paul Thomas + + PR libfortran/12884 + PR libfortran/17285 + PR libfortran/18122 + PR libfortran/18210 + PR libfortran/18392 + PR libfortran/18591 + PR libfortran/18879 + * io/io.h (nml_ls): Declare. + (namelist_info): Modify for arrays. + * io/list_read.c (namelist_read): Reduced to call to new functions. + (match_namelist_name): Simplified. + (nml_query): Handles stdin queries ? and =?. New function. + (nml_get_obj_data): Parses object name. New function. + (touch_nml_nodes): Marks objects for read. New function. + (untouch_nml_nodes): Resets objects. New function. + (parse_qualifier): Parses and checks qualifiers. New function + (nml_read_object): Reads and stores object data. New function. + (eat_separator): No new_record on '/' in namelist. + (finish_separator): No new_record on '/' in namelist. + (read_logical): Error return for namelist. + (read_integer): Error return for namelist. + (read_complex): Error return for namelist. + (read_real): Error return for namelist. + * io/lock.c (library_end): Free extended namelist_info types. + * io/transfer.c (st_set_nml_var): Modified for arrays. + (st_set_nml_var_dim): Dimension descriptors. New function. + * io/write.c (namelist_write): Reduced to call to new functions. + (nml_write_obj): Writes output for object. New function. + (write_integer): Suppress leading blanks for repeat counts. + (write_int): Suppress leading blanks for repeat counts. + (write_float): Suppress leading blanks for repeat counts. + (output_float): Suppress leading blanks for repeat counts. + +2005-04-15 Thomas Koenig + + PR libfortran/18495 + * intrinsics/spread_generic.c (spread): Remove const from + return array descriptor. + New variables: rrank (rank of return array), rs (for + calculating the size of the return array), srank (rank + of the source array). + Generate runtime error if the dim= argument is larger than + the rank of the return array. + Generate runtime error if the needed rank of the return + array is larger than 7. + If ret->data is null, populate the return array descriptor + and initialize the variables for the actual operation. + Otherwise, set ret->dim[0].stride to one if it is zero. + Change second, independent use of variable dim to srank. + +2005-04-12 Mike Stump + + * configure: Regenerate. + +2005-04-13 Thomas Koenig + + PR libfortran/19106 + * m4/iforeach.c (name`'rtype_qual`_'atype_code): Add TODO + that setting correct strides is a front end job. + (`m'name`'rtype_qual`_'atype_code): Likewise. If mask has + a lowest stride of 0, adjust to 1. + * m4/ifunction.c (name`'rtype_qual`_'atype_code): Add TODO + that setting correct strides is a front end job. + (`m'name`'rtype_qual`_'atype_code): Likewise. If mask has + a lowest stride of 0, adjust to 1. + * maxloc0_4_i4.c: Regenerated + * maxloc0_4_i8.c: Regenerated + * maxloc0_4_r4.c: Regenerated + * maxloc0_4_r8.c: Regenerated + * maxloc0_8_i4.c: Regenerated + * maxloc0_8_i8.c: Regenerated + * maxloc0_8_r4.c: Regenerated + * maxloc0_8_r8.c: Regenerated + * maxloc1_4_i4.c: Regenerated + * maxloc1_4_i8.c: Regenerated + * maxloc1_4_r4.c: Regenerated + * maxloc1_4_r8.c: Regenerated + * maxloc1_8_i4.c: Regenerated + * maxloc1_8_i8.c: Regenerated + * maxloc1_8_r4.c: Regenerated + * maxloc1_8_r8.c: Regenerated + * maxval_i4.c: Regenerated + * maxval_i8.c: Regenerated + * maxval_r4.c: Regenerated + * maxval_r8.c: Regenerated + * minloc0_4_i4.c: Regenerated + * minloc0_4_i8.c: Regenerated + * minloc0_4_r4.c: Regenerated + * minloc0_4_r8.c: Regenerated + * minloc0_8_i4.c: Regenerated + * minloc0_8_i8.c: Regenerated + * minloc0_8_r4.c: Regenerated + * minloc0_8_r8.c: Regenerated + * minloc1_4_i4.c: Regenerated + * minloc1_4_i8.c: Regenerated + * minloc1_4_r4.c: Regenerated + * minloc1_4_r8.c: Regenerated + * minloc1_8_i4.c: Regenerated + * minloc1_8_i8.c: Regenerated + * minloc1_8_r4.c: Regenerated + * minloc1_8_r8.c: Regenerated + * minval_i4.c: Regenerated + * minval_i8.c: Regenerated + * minval_r4.c: Regenerated + * minval_r8.c: Regenerated + * product_c4.c: Regenerated + * product_c8.c: Regenerated + * product_i4.c: Regenerated + * product_i8.c: Regenerated + * product_r4.c: Regenerated + * product_r8.c: Regenerated + * sum_c4.c: Regenerated + * sum_c8.c: Regenerated + * sum_i4.c: Regenerated + * sum_i8.c: Regenerated + * sum_r4.c: Regenerated + * sum_r8.c: Regenerated + +2005-04-10 Francois-Xavier Coudert + + PR libfortran/20788 + * runtime/environ.c (init_unsigned_integer): Function for + environment variables we want to be positive. + (init_integer): Function to allow negative environment + variables (e.g. for GFORTRAN_STDIN_UNIT). + +2005-04-10 Thomas Koenig + + PR libfortran/17992 + PR libfortran/19568 + PR libfortran/19595 + PR libfortran/20005 + PR libfortran/20092 + PR libfortran/20131 + PR libfortran/20661 + PR libfortran/20744 + * io/transfer.c (top level): eor_condition: New static variable. + (read_sf): Remove unnecessary zeroing of buffer (there is enough + information in its length). + Return a string of length 0 (to be padded by caller) if EOR was + seen previously. + Remove erroneous special casing of EOR for standard input. + Set eor_condition for non-advancing I/O if an end of line was + detected. + Increment ioparm.size if necessary. + (formatted_transfer): Skip the function if there is an EOR condition. + (data_transfer_init): Initialize eor_condition to zero (false). + (next_record_r): Clear sf_seen_eor if a \n has been seen already. + (finalize_transfer): If there is an EOR condition, raise the error. + +2005-04-09 Bud Davis + Steven G. Kargl + + PR fortran/19872 + * io/transfer.c (data_transfer_init): truncate an existing + file on the first write. + +2005-04-09 Thomas Koenig + + PR libfortran/19106 + PR libfortran/19014 + * m4/ifunction.m4 (name`'rtype_qual`_'atype_code): ditto. + If retarray->data is NULL (i.e. the front end does not + know the rank and dimenson of the array), fill in its + properties and allocate memory. + Change the assertions about rank and dimension of retarray into + runtime errors and only check them for retarray->data != NULL. + Do the same for correcting the stride from 0 to 1 in retarray. + (`m'name`'rtype_qual`_'atype_code): Likewise. + * m4/iforeach.m4 (name`'rtype_qual`_'atype_code): Likewise. + Change assertion about rank of array to runtime error. + (`m'name`'rtype_qual`_'atype_code): Likewise. + * generated/all_l4.c: Regenerated. + * generated/all_l8.c: Regenerated. + * generated/any_l4.c: Regenerated. + * generated/any_l8.c: Regenerated. + * generated/count_4_l4.c: Regenerated. + * generated/count_4_l8.c: Regenerated. + * generated/count_8_l4.c: Regenerated. + * generated/count_8_l8.c: Regenerated. + * generated/maxloc0_4_i4.c: Regenerated. + * generated/maxloc0_4_i8.c: Regenerated. + * generated/maxloc0_4_r4.c: Regenerated. + * generated/maxloc0_4_r8.c: Regenerated. + * generated/maxloc0_8_i4.c: Regenerated. + * generated/maxloc0_8_i8.c: Regenerated. + * generated/maxloc0_8_r4.c: Regenerated. + * generated/maxloc0_8_r8.c: Regenerated. + * generated/maxloc1_4_i4.c: Regenerated. + * generated/maxloc1_4_i8.c: Regenerated. + * generated/maxloc1_4_r4.c: Regenerated. + * generated/maxloc1_4_r8.c: Regenerated. + * generated/maxloc1_8_i4.c: Regenerated. + * generated/maxloc1_8_i8.c: Regenerated. + * generated/maxloc1_8_r4.c: Regenerated. + * generated/maxloc1_8_r8.c: Regenerated. + * generated/maxval_i4.c: Regenerated. + * generated/maxval_i8.c: Regenerated. + * generated/maxval_r4.c: Regenerated. + * generated/maxval_r8.c: Regenerated. + * generated/minloc0_4_i4.c: Regenerated. + * generated/minloc0_4_i8.c: Regenerated. + * generated/minloc0_4_r4.c: Regenerated. + * generated/minloc0_4_r8.c: Regenerated. + * generated/minloc0_8_i4.c: Regenerated. + * generated/minloc0_8_i8.c: Regenerated. + * generated/minloc0_8_r4.c: Regenerated. + * generated/minloc0_8_r8.c: Regenerated. + * generated/minloc1_4_i4.c: Regenerated. + * generated/minloc1_4_i8.c: Regenerated. + * generated/minloc1_4_r4.c: Regenerated. + * generated/minloc1_4_r8.c: Regenerated. + * generated/minloc1_8_i4.c: Regenerated. + * generated/minloc1_8_i8.c: Regenerated. + * generated/minloc1_8_r4.c: Regenerated. + * generated/minloc1_8_r8.c: Regenerated. + * generated/minval_i4.c: Regenerated. + * generated/minval_i8.c: Regenerated. + * generated/minval_r4.c: Regenerated. + * generated/minval_r8.c: Regenerated. + * generated/product_c4.c: Regenerated. + * generated/product_c8.c: Regenerated. + * generated/product_i4.c: Regenerated. + * generated/product_i8.c: Regenerated. + * generated/product_r4.c: Regenerated. + * generated/product_r8.c: Regenerated. + * generated/sum_c4.c: Regenerated. + * generated/sum_c8.c: Regenerated. + * generated/sum_i4.c: Regenerated. + * generated/sum_i8.c: Regenerated. + * generated/sum_r4.c: Regenerated. + * generated/sum_r8.c: Regenerated. + +2005-04-09 Thomas Koenig + + PR libfortran/20163 + * runtime/string.c (compare0): Use fstrlen() to + strip trailing blanks from option string. + +2005-04-09 Andrew Pinski + + PR fortran/13257 + * format.c (parse_format_list): Allow an optional comma + between descriptors. + +2005-04-08 Eric Botcazou + + * io/backspace.c (unformatted_backspace): Do not dereference + the pointer to the stream. + +2005-04-07 Andrew Pinski + + PR libfortran/20766 + * configure.ac (extra_ldflags_libgfortran): Set for *-darwin* to + "-Wl,-single_module". + * configure: Regenerate. + * Makefile.am (libgfortran_la_LDFLAGS): Add extra_ldflags_libgfortran. + * Makefile.in: Regenerate. + +2005-04-05 Francois-Xavier Coudert + + PR libfortran/20755 + * write.c (write_float): A G edit descriptor may locally change + the scale factor, but it needs to be restored afterwards. + +2005-04-03 Dale Ranta + Francois-Xavier Coudert + + PR libfortran/20068 + PR libfortran/20125 + PR libfortran/20156 + PR libfortran/20471 + * io/backspace.c (unformatted_backspace): Fix error in arithmetic. + (st_backspace): When in WRITING mode, we flush and falling back + into READING mode. In all cases, correctly position the stream. + +2005-03-31 Francois-Xavier Coudert + + PR libfortran/20660 + * io/inquire.c (inquire_via_unit): Non-opened units should still be + reported by an INQUIRE statement as existing. + * io/transfer.c (data_transfer_init): Never accept negative units. + +2005-03-29 Dale Ranta + Francois-Xavier Coudert + + PR libfortran/20163 + * io/open.c (st_open): call library_end() before returning even if + an error arises. + +2005-03-25 Francois-Xavier Coudert + + PR libfortran/19678 + * list_read.c (next_char, eat_separator, finish_separator, read_real) + (namelist_read): Add support for '\r' as well as '\n' as EOL + character. + + PR libfortran/19679 + * list_read.c (read_sf): Add a '\r' in a test to support DOS + line-endings when line length is exceeded. + +2005-03-25 Francois-Xavier Coudert + + PR libfortran/15332 + * io/format.c (parse_format_list): format node for colon edit + descriptor needs a repeat counter set to 1. + +2005-02-24 Francois-Xavier Coudert + + * config.h.in: Regenerate. + +2005-02-23 Francois-Xavier Coudert + + PR libfortran/18025 + * write.c (output_float): Handling the "F0.d" format similarly as + commercial compilers. + +2005-03-22 Francois-Xavier Coudert + + * Makefile.am: Added new files. + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure.ac: add checks for signal.h headers file, as well as + following functions: chdir, strerror, getlogin, gethostname, kill, + link, symlink, perror, sleep, time. + * configure: Regenerate. + * intrinsics/chdir.c, intrinsics/gerror.c, intrinsics/getlog.c, + intrinsics/hostnm.c, intrinsics/ierrno.c, intrinsics/kill.c, + intrinsics/link.c, intrinsics/perror.c, intrinsics/rename.c, + intrinsics/sleep.c, intrinsics/symlnk.c, intrinsics/time.c: Newly + implementend g77 intrinsics. + +2005-03-21 Zack Weinberg + + * configure.ac: Do not invoke TL_AC_GCC_VERSION. + In all substitutions, leave gcc_version to be expanded by the Makefile. + * aclocal.m4, configure: Regenerate. + * Makefile.am: Set gcc_version. + * Makefile.in: Regenerate. + +2005-03-16 Francois-Xavier Coudert + + PR libfortran/20257 + * open.c (new_unit): set record length to max_offset rather than + using a hard-coded limit (which was too low). + +2005-03-16 Francois-Xavier Coudert + + PR libfortran/20480 + * write.c (output_float): special check when writing 0.0 with + EN and ES formats. + +2005-03-11 Francois-Xavier Coudert + + PR libfortran/20124 + * write.c (output_float): Adds a nzero_real variable to store + the number of leading zeros whatever the format width is. Corrects + the rounding of numbers less than 10^(-width). Fixes typo in an + error message. Updates copyright years + +2005-02-27 Toon Moene + + * runtime/environ.c: Update copyright years. + +2005-02-27 Tobias Schl"uter + + * io/write.c: Update copyright years. + +2005-02-27 Francois-Xavier Coudert + + PR libfortran/20101 + * io/write.c (output_float): Added special check for value 0.0 in + PE format. + +2005-02-27 Tobias Schl"uter + + * io/write.c (output_float): Fix typo in condition. + +2005-02-25 Peter O'Gorman + Toon Moene + + PR libfortran/17748 + * runtime/environ.c: Remove references to environ. + (show_variables): remove GFORTRAN_UNBUFFERED_* and + GFORTRAN_NAME_* because they require environ. + (pattern_scan): Remove function. + +2005-02-22 Paul Thomas + Bud Davis + + * io/list_read.c (read_real): Handle separators properly + in list directed read. + +2005-02-21 Bud Davis + + PR fortran/20086 + * io/transfer.c (write_constant_string): accept an 'h' as + the start of a hollerith format string. + +2005-02-21 Eric Botcazou + + PR libfortran/19302 + * intrinsics/c99_functions.c (nextafterf): Special-case infinite + numbers. + +2005-02-21 Steven G. Kargl + + * io/write.c (output_float): Typo in error meesage. + +2005-02-20 Steven G. Kargl + + PR 20085 + * intrinsic/args.c (iargc): Off by 1. + +2005-02-19 Steven G. Kargl + + * intrinsic/date_and_time.c: Fix conformance problems. + +2005-02-01 Paul Thomas + + PR libfortran/19363 + PR libfortran/19691 + * libgfortran.h (isfinite): Work around broken isfinite(x) in Cygwin. + +2005-01-30 Bud Davis + + PR fortran/19647 + * io/inquire.c (inquire_via_unit): Use correct variable for + pad. + +2005-01-29 Thomas Koenig + + PR libfortran/19595 + * io/transfer.c (data_transfer_init): eor requires advance="NO". + +2005-01-25 Tobias Schl"uter + + PR libfortran/19524 + * io/read.c (read_f): Don't free uninitialized pointer. + +2005-01-23 James A. Morrison + Paul Brook + + PR fortran/19294 + * Makefile.am: Add transpose_c4.c and transpose_c8.c. + * intrinsics/cshift0.c: Use separate optimized loops for complex types. + * m4/transpose.m4: Include type letter in function name. + * Makefile.in: Regenerate. + * generated/transpose_*.c: Regenerate. + +2005-01-22 Thomas Koenig + + PR libfortran/19451 + * io/transfer.c (finalize_transfer): Don't do anything if + there is an error condition. + +2005-01-22 David Edelsohn + + PR libfortran/19052 + * libgfortran.h (options_t): Add stderr_unit. + * io/io.h (error_stream): Declare. + * io/open.c (new_unit): Do not terminate abnormally if opening + file preconnected to stdin, stdout, or stderr. + * io/unit.c (init_units): Initialize stderr_unit. + * io/unix.c (error_stream): New function. + * runtime/environ.c (GFORTRAN_STDERR_UNIT): New environment variable. + +2005-01-22 Thomas Koenig + + PR libfortran/18982 + * io/unix.c (regular_file): No need to change flags->action + if an error occurs. Document this. + No need to call stat() for STATUS_OLD, open() will + fail anyway. + For ACTION_UNSPECIFIED, try open for read-write, then for + read-only if open fails with EACCES, then for write-only + if that fails with EACCES again. + * io/unix.c (open_external): Document changed behavior of + regular_file. + +2005-01-22 Tobias Schl"uter + + PR fortran/19194 + * io/io.h (st_parameter): Use 'GFC_INTEGER_4' instead of 'int', + use CHARACTER macro for definition of string valued paramters. + +2005-01-22 Bud Davis + + PR fortran/19314 + * io/inquire.c(inquire_via_unit): implement POSITION=. + * io/transfer.c(next_record): update position for + INQUIRE. + * io/rewind.c(st_rewind): update position for + INQUIRE. + +2005-01-16 Bud Davis + + PR fortran/18778 + * io/transfer.c (us_read): no bytes available is not a + runtime error. + +2005-01-15 Bud Davis + + PR fortran/18983 + * io/transfer.c (st_write_done): only truncate when it + is required. + +2005-01-12 Toon Moene + + PR libfortran/19280 + c99_protos.h: License changed to GPL+exception. + libgfortran.h: Ditto. + intrinsics/abort.c: Ditto. + intrinsics/args.c: Ditto. + intrinsics/associated.c: Ditto. + intrinsics/bessel.c: Ditto. + intrinsics/c99_functions.c: Ditto. + intrinsics/cpu_time.c: Ditto. + intrinsics/cshift0.c: Ditto. + intrinsics/date_and_time.c: Ditto. + intrinsics/env.c: Ditto. + intrinsics/eoshift0.c: Ditto. + intrinsics/eoshift2.c: Ditto. + intrinsics/erf.c: Ditto. + intrinsics/etime.c: Ditto. + intrinsics/exit.c: Ditto. + intrinsics/flush.c: Ditto. + intrinsics/fnum.c: Ditto. + intrinsics/getXid.c: Ditto. + intrinsics/getcwd.c: Ditto. + intrinsics/ishftc.c: Ditto. + intrinsics/mvbits.c: Ditto. + intrinsics/pack_generic.c: Ditto. + intrinsics/rand.c: Ditto. + intrinsics/random.c: Ditto. + intrinsics/reshape_generic.c: Ditto. + intrinsics/reshape_packed.c: Ditto. + intrinsics/size.c: Ditto. + intrinsics/spread_generic.c: Ditto. + intrinsics/stat.c: Ditto. + intrinsics/string_intrinsics.c: Ditto. + intrinsics/system.c: Ditto. + intrinsics/system_clock.c: Ditto. + intrinsics/transpose_generic.c: Ditto. + intrinsics/umask.c: Ditto. + intrinsics/unlink.c: Ditto. + intrinsics/unpack_generic.c: Ditto. + io/backspace.c: Ditto. + io/close.c: Ditto. + io/endfile.c: Ditto. + io/format.c: Ditto. + io/inquire.c: Ditto. + io/io.h: Ditto. + io/list_read.c: Ditto. + io/lock.c: Ditto. + io/open.c: Ditto. + io/read.c: Ditto. + io/rewind.c: Ditto. + io/transfer.c: Ditto. + io/unit.c: Ditto. + io/unix.c: Ditto. + io/write.c: Ditto. + m4/all.m4: Ditto. + m4/any.m4: Ditto. + m4/cexp.m4: Ditto. + m4/chyp.m4: Ditto. + m4/count.m4: Ditto. + m4/cshift1.m4: Ditto. + m4/ctrig.m4: Ditto. + m4/dotprod.m4: Ditto. + m4/dotprodc.m4: Ditto. + m4/dotprodl.m4: Ditto. + m4/eoshift1.m4: Ditto. + m4/eoshift3.m4: Ditto. + m4/exponent.m4: Ditto. + m4/fraction.m4: Ditto. + m4/head.m4: Ditto. + m4/iforeach.m4: Ditto. + m4/ifunction.m4: Ditto. + m4/in_pack.m4: Ditto. + m4/in_unpack.m4: Ditto. + m4/iparm.m4: Ditto. + m4/matmul.m4: Ditto. + m4/matmull.m4: Ditto. + m4/maxloc0.m4: Ditto. + m4/maxloc1.m4: Ditto. + m4/maxval.m4: Ditto. + m4/minloc0.m4: Ditto. + m4/minloc1.m4: Ditto. + m4/minval.m4: Ditto. + m4/mtype.m4: Ditto. + m4/nearest.m4: Ditto. + m4/pow.m4: Ditto. + m4/product.m4: Ditto. + m4/reshape.m4: Ditto. + m4/set_exponent.m4: Ditto. + m4/shape.m4: Ditto. + m4/specific.m4: Ditto. + m4/specific2.m4: Ditto. + m4/sum.m4: Ditto. + m4/transpose.m4: Ditto. + m4/types.m4: Ditto. + runtime/environ.c: Ditto. + runtime/error.c: Ditto. + runtime/in_pack_generic.c: Ditto. + runtime/in_unpack_generic.c: Ditto. + runtime/main.c: Ditto. + runtime/memory.c: Ditto. + runtime/normalize.c: Ditto. + runtime/pause.c: Ditto. + runtime/select.c: Ditto. + runtime/stop.c: Ditto. + runtime/string.c: Ditto. + generated/_abs_c4.f90: Regenerated. + generated/_abs_c8.f90: Regenerated. + generated/_abs_i4.f90: Regenerated. + generated/_abs_i8.f90: Regenerated. + generated/_abs_r4.f90: Regenerated. + generated/_abs_r8.f90: Regenerated. + generated/_acos_r4.f90: Regenerated. + generated/_acos_r8.f90: Regenerated. + generated/_aint_r4.f90: Regenerated. + generated/_aint_r8.f90: Regenerated. + generated/_anint_r4.f90: Regenerated. + generated/_anint_r8.f90: Regenerated. + generated/_asin_r4.f90: Regenerated. + generated/_asin_r8.f90: Regenerated. + generated/_atan2_r4.f90: Regenerated. + generated/_atan2_r8.f90: Regenerated. + generated/_atan_r4.f90: Regenerated. + generated/_atan_r8.f90: Regenerated. + generated/_conjg_c4.f90: Regenerated. + generated/_conjg_c8.f90: Regenerated. + generated/_cos_c4.f90: Regenerated. + generated/_cos_c8.f90: Regenerated. + generated/_cos_r4.f90: Regenerated. + generated/_cos_r8.f90: Regenerated. + generated/_cosh_r4.f90: Regenerated. + generated/_cosh_r8.f90: Regenerated. + generated/_dim_i4.f90: Regenerated. + generated/_dim_i8.f90: Regenerated. + generated/_dim_r4.f90: Regenerated. + generated/_dim_r8.f90: Regenerated. + generated/_exp_c4.f90: Regenerated. + generated/_exp_c8.f90: Regenerated. + generated/_exp_r4.f90: Regenerated. + generated/_exp_r8.f90: Regenerated. + generated/_log10_r4.f90: Regenerated. + generated/_log10_r8.f90: Regenerated. + generated/_log_c4.f90: Regenerated. + generated/_log_c8.f90: Regenerated. + generated/_log_r4.f90: Regenerated. + generated/_log_r8.f90: Regenerated. + generated/_mod_i4.f90: Regenerated. + generated/_mod_i8.f90: Regenerated. + generated/_mod_r4.f90: Regenerated. + generated/_mod_r8.f90: Regenerated. + generated/_sign_i4.f90: Regenerated. + generated/_sign_i8.f90: Regenerated. + generated/_sign_r4.f90: Regenerated. + generated/_sign_r8.f90: Regenerated. + generated/_sin_c4.f90: Regenerated. + generated/_sin_c8.f90: Regenerated. + generated/_sin_r4.f90: Regenerated. + generated/_sin_r8.f90: Regenerated. + generated/_sinh_r4.f90: Regenerated. + generated/_sinh_r8.f90: Regenerated. + generated/_sqrt_c4.f90: Regenerated. + generated/_sqrt_c8.f90: Regenerated. + generated/_sqrt_r4.f90: Regenerated. + generated/_sqrt_r8.f90: Regenerated. + generated/_tan_r4.f90: Regenerated. + generated/_tan_r8.f90: Regenerated. + generated/_tanh_r4.f90: Regenerated. + generated/_tanh_r8.f90: Regenerated. + generated/all_l4.c: Regenerated. + generated/all_l8.c: Regenerated. + generated/any_l4.c: Regenerated. + generated/any_l8.c: Regenerated. + generated/count_4_l4.c: Regenerated. + generated/count_4_l8.c: Regenerated. + generated/count_8_l4.c: Regenerated. + generated/count_8_l8.c: Regenerated. + generated/cshift1_4.c: Regenerated. + generated/cshift1_8.c: Regenerated. + generated/dotprod_c4.c: Regenerated. + generated/dotprod_c8.c: Regenerated. + generated/dotprod_i4.c: Regenerated. + generated/dotprod_i8.c: Regenerated. + generated/dotprod_l4.c: Regenerated. + generated/dotprod_l8.c: Regenerated. + generated/dotprod_r4.c: Regenerated. + generated/dotprod_r8.c: Regenerated. + generated/eoshift1_4.c: Regenerated. + generated/eoshift1_8.c: Regenerated. + generated/eoshift3_4.c: Regenerated. + generated/eoshift3_8.c: Regenerated. + generated/exp_c4.c: Regenerated. + generated/exp_c8.c: Regenerated. + generated/exponent_r4.c: Regenerated. + generated/exponent_r8.c: Regenerated. + generated/fraction_r4.c: Regenerated. + generated/fraction_r8.c: Regenerated. + generated/hyp_c4.c: Regenerated. + generated/hyp_c8.c: Regenerated. + generated/in_pack_i4.c: Regenerated. + generated/in_pack_i8.c: Regenerated. + generated/in_unpack_i4.c: Regenerated. + generated/in_unpack_i8.c: Regenerated. + generated/matmul_c4.c: Regenerated. + generated/matmul_c8.c: Regenerated. + generated/matmul_i4.c: Regenerated. + generated/matmul_i8.c: Regenerated. + generated/matmul_l4.c: Regenerated. + generated/matmul_l8.c: Regenerated. + generated/matmul_r4.c: Regenerated. + generated/matmul_r8.c: Regenerated. + generated/maxloc0_4_i4.c: Regenerated. + generated/maxloc0_4_i8.c: Regenerated. + generated/maxloc0_4_r4.c: Regenerated. + generated/maxloc0_4_r8.c: Regenerated. + generated/maxloc0_8_i4.c: Regenerated. + generated/maxloc0_8_i8.c: Regenerated. + generated/maxloc0_8_r4.c: Regenerated. + generated/maxloc0_8_r8.c: Regenerated. + generated/maxloc1_4_i4.c: Regenerated. + generated/maxloc1_4_i8.c: Regenerated. + generated/maxloc1_4_r4.c: Regenerated. + generated/maxloc1_4_r8.c: Regenerated. + generated/maxloc1_8_i4.c: Regenerated. + generated/maxloc1_8_i8.c: Regenerated. + generated/maxloc1_8_r4.c: Regenerated. + generated/maxloc1_8_r8.c: Regenerated. + generated/maxval_i4.c: Regenerated. + generated/maxval_i8.c: Regenerated. + generated/maxval_r4.c: Regenerated. + generated/maxval_r8.c: Regenerated. + generated/minloc0_4_i4.c: Regenerated. + generated/minloc0_4_i8.c: Regenerated. + generated/minloc0_4_r4.c: Regenerated. + generated/minloc0_4_r8.c: Regenerated. + generated/minloc0_8_i4.c: Regenerated. + generated/minloc0_8_i8.c: Regenerated. + generated/minloc0_8_r4.c: Regenerated. + generated/minloc0_8_r8.c: Regenerated. + generated/minloc1_4_i4.c: Regenerated. + generated/minloc1_4_i8.c: Regenerated. + generated/minloc1_4_r4.c: Regenerated. + generated/minloc1_4_r8.c: Regenerated. + generated/minloc1_8_i4.c: Regenerated. + generated/minloc1_8_i8.c: Regenerated. + generated/minloc1_8_r4.c: Regenerated. + generated/minloc1_8_r8.c: Regenerated. + generated/minval_i4.c: Regenerated. + generated/minval_i8.c: Regenerated. + generated/minval_r4.c: Regenerated. + generated/minval_r8.c: Regenerated. + generated/nearest_r4.c: Regenerated. + generated/nearest_r8.c: Regenerated. + generated/pow_c4_i4.c: Regenerated. + generated/pow_c4_i8.c: Regenerated. + generated/pow_c8_i4.c: Regenerated. + generated/pow_c8_i8.c: Regenerated. + generated/pow_i4_i4.c: Regenerated. + generated/pow_i4_i8.c: Regenerated. + generated/pow_i8_i4.c: Regenerated. + generated/pow_i8_i8.c: Regenerated. + generated/pow_r4_i4.c: Regenerated. + generated/pow_r4_i8.c: Regenerated. + generated/pow_r8_i4.c: Regenerated. + generated/pow_r8_i8.c: Regenerated. + generated/product_c4.c: Regenerated. + generated/product_c8.c: Regenerated. + generated/product_i4.c: Regenerated. + generated/product_i8.c: Regenerated. + generated/product_r4.c: Regenerated. + generated/product_r8.c: Regenerated. + generated/reshape_i4.c: Regenerated. + generated/reshape_i8.c: Regenerated. + generated/set_exponent_r4.c: Regenerated. + generated/set_exponent_r8.c: Regenerated. + generated/shape_i4.c: Regenerated. + generated/shape_i8.c: Regenerated. + generated/sum_c4.c: Regenerated. + generated/sum_c8.c: Regenerated. + generated/sum_i4.c: Regenerated. + generated/sum_i8.c: Regenerated. + generated/sum_r4.c: Regenerated. + generated/sum_r8.c: Regenerated. + generated/transpose_i4.c: Regenerated. + generated/transpose_i8.c: Regenerated. + generated/trig_c4.c: Regenerated. + generated/trig_c8.c: Regenerated. + +2005-01-07 Bud Davis + + PR fortran/18398 + * transfer.c (next_record_r): always skip the + eol search if it was found during sf_read. diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2006 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2006 new file mode 100644 index 0000000000..b11f37edec --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2006 @@ -0,0 +1,1634 @@ +2006-12-30 Thomas Koenig + + PR libfortran/30321 + * m4/ifunction.m4 (name`'rtype_qual`_'atype_code): + Check for extents < 0 for zero-sized arrays. If + no retarray has been specified and the size is zero, + return early. + (`m'name`'rtype_qual`_'atype_code): Likewise. + * generated/all_l16.c: Regenerated. + * generated/all_l4.c: Regenerated. + * generated/all_l8.c: Regenerated. + * generated/any_l16.c: Regenerated. + * generated/any_l4.c: Regenerated. + * generated/any_l8.c: Regenerated. + * generated/count_16_l16.c: Regenerated. + * generated/count_16_l4.c: Regenerated. + * generated/count_16_l8.c: Regenerated. + * generated/count_4_l16.c: Regenerated. + * generated/count_4_l4.c: Regenerated. + * generated/count_4_l8.c: Regenerated. + * generated/count_8_l16.c: Regenerated. + * generated/count_8_l4.c: Regenerated. + * generated/count_8_l8.c: Regenerated. + * generated/cshift1_16.c: Regenerated. + * generated/cshift1_4.c: Regenerated. + * generated/cshift1_8.c: Regenerated. + * generated/maxloc1_16_i16.c: Regenerated. + * generated/maxloc1_16_i4.c: Regenerated. + * generated/maxloc1_16_i8.c: Regenerated. + * generated/maxloc1_16_r10.c: Regenerated. + * generated/maxloc1_16_r16.c: Regenerated. + * generated/maxloc1_16_r4.c: Regenerated. + * generated/maxloc1_16_r8.c: Regenerated. + * generated/maxloc1_4_i16.c: Regenerated. + * generated/maxloc1_4_i4.c: Regenerated. + * generated/maxloc1_4_i8.c: Regenerated. + * generated/maxloc1_4_r10.c: Regenerated. + * generated/maxloc1_4_r16.c: Regenerated. + * generated/maxloc1_4_r4.c: Regenerated. + * generated/maxloc1_4_r8.c: Regenerated. + * generated/maxloc1_8_i16.c: Regenerated. + * generated/maxloc1_8_i4.c: Regenerated. + * generated/maxloc1_8_i8.c: Regenerated. + * generated/maxloc1_8_r10.c: Regenerated. + * generated/maxloc1_8_r16.c: Regenerated. + * generated/maxloc1_8_r4.c: Regenerated. + * generated/maxloc1_8_r8.c: Regenerated. + * generated/maxval_i16.c: Regenerated. + * generated/maxval_i4.c: Regenerated. + * generated/maxval_i8.c: Regenerated. + * generated/maxval_r10.c: Regenerated. + * generated/maxval_r16.c: Regenerated. + * generated/maxval_r4.c: Regenerated. + * generated/maxval_r8.c: Regenerated. + * generated/minloc1_16_i16.c: Regenerated. + * generated/minloc1_16_i4.c: Regenerated. + * generated/minloc1_16_i8.c: Regenerated. + * generated/minloc1_16_r10.c: Regenerated. + * generated/minloc1_16_r16.c: Regenerated. + * generated/minloc1_16_r4.c: Regenerated. + * generated/minloc1_16_r8.c: Regenerated. + * generated/minloc1_4_i16.c: Regenerated. + * generated/minloc1_4_i4.c: Regenerated. + * generated/minloc1_4_i8.c: Regenerated. + * generated/minloc1_4_r10.c: Regenerated. + * generated/minloc1_4_r16.c: Regenerated. + * generated/minloc1_4_r4.c: Regenerated. + * generated/minloc1_4_r8.c: Regenerated. + * generated/minloc1_8_i16.c: Regenerated. + * generated/minloc1_8_i4.c: Regenerated. + * generated/minloc1_8_i8.c: Regenerated. + * generated/minloc1_8_r10.c: Regenerated. + * generated/minloc1_8_r16.c: Regenerated. + * generated/minloc1_8_r4.c: Regenerated. + * generated/minloc1_8_r8.c: Regenerated. + * generated/minval_i16.c: Regenerated. + * generated/minval_i4.c: Regenerated. + * generated/minval_i8.c: Regenerated. + * generated/minval_r10.c: Regenerated. + * generated/minval_r16.c: Regenerated. + * generated/minval_r4.c: Regenerated. + * generated/minval_r8.c: Regenerated. + * generated/product_c10.c: Regenerated. + * generated/product_c16.c: Regenerated. + * generated/product_c4.c: Regenerated. + * generated/product_c8.c: Regenerated. + * generated/product_i16.c: Regenerated. + * generated/product_i4.c: Regenerated. + * generated/product_i8.c: Regenerated. + * generated/product_r10.c: Regenerated. + * generated/product_r16.c: Regenerated. + * generated/product_r4.c: Regenerated. + * generated/product_r8.c: Regenerated. + * generated/sum_c10.c: Regenerated. + * generated/sum_c16.c: Regenerated. + * generated/sum_c4.c: Regenerated. + * generated/sum_c8.c: Regenerated. + * generated/sum_i16.c: Regenerated. + * generated/sum_i4.c: Regenerated. + * generated/sum_i8.c: Regenerated. + * generated/sum_r10.c: Regenerated. + * generated/sum_r16.c: Regenerated. + * generated/sum_r4.c: Regenerated. + * generated/sum_r8.c: Regenerated. + +2006-12-27 Jerry DeLisle + + PR libfortran/30014 + *io/io.h (st_parameter_dt): Change *size and *iolength type to + GFC_IO_INT. + *io/transfer.c (finalize_transfer): Cast dtp->u.p.size_used to + GFC_IO_INT. (iolength_transfer): Cast size * nelems to GFC_IO_INT. + +2006-12-17 Tobias Burnus + + * intrinsics/associated.c: Check for associated(NULL,NULL). + +2006-12-15 Jerry DeLisle + + PR libfortran/30145 + * io/transfer.c (transfer_array): Check for negative extent. + +2006-12-13 Richard Guenther + + PR fortran/30115 + * runtime/memory.c (allocate_size): Change interface to + void *()(size_t, GFC_INTEGER_4 *). + (allocate): Likewise. + (allocate64): Likewise. + (allocate_array): Change interface to + void *()(void *, size_t, GFC_INTEGER_4 *). + (allocate64_array): Likewise. + (deallocate): Change interface to + void ()(void *, GFC_INTEGER_4 *). + +2006-12-06 Francois-Xavier Coudert + + PR libfortran/29810 + * intrinsics/c99_functions.c (fmodf, fmodl, floorl): New functions. + * c99_protos.h (fmodf, fmodl, floorl): New prototypes. + * configure.ac: Check for fmodf, fmod and fmodl. + * configure: Regenerate. + * config.h.in: Regenerate. + +2006-12-06 Thomas Koenig + + PR libfortran/30009 + PR libfortran/30056 + * libgfortran.h: Add ERROR_CORRUPT_FILE to error_codes. + * runtime/error.c (translate_error): Add handling for + ERROR_CORRUPT_FILE. + * io/transfer.c (read_block_direct): Add comment about + EOR for stream files. + Remove test for no bytes left for direct access files. + Generate an ERROR_SHORT_RECORD if the read was short. + For unformatted sequential files: Check endfile condition. + Remove test for no bytes left. End of file here means + that the file structure has been corrupted. Pre-position + the file for the next record in case of error. + (write_buf): Whitespace fix. Subtract the number of bytes + written from bytes_left. + +2006-12-04 Jerry DeLisle + + PR libfortran/30005 + * io/open.c: Add errno.h include. + (new_unit): Add new error messages with file name for file open. + +2006-12-01 Thomas Koenig + + PR libfortran/29568 + * libgfortran/libgfortran.h (compile_options_t): Add + record_marker. (top level): Define GFC_MAX_SUBRECORD_LENGTH. + * runtime/compile_options.c (set_record_marker): Change + default to four-byte record marker. + (set_max_subrecord_length): New function. + * runtime/error.c (translate_error): Change error message + for short record on unformatted read. + * io/io.h (gfc_unit): Add recl_subrecord, bytes_left_subrecord + and continued. + * io/file_pos.c (unformatted_backspace): Change default of record + marker size to four bytes. Loop over subrecords. + * io/open.c: Default recl is max_offset. If + compile_options.max_subrecord_length has been set, set set + u->recl_subrecord to its value, to the maximum value otherwise. + * io/transfer.c (top level): Add prototypes for us_read, us_write, + next_record_r_unf and next_record_w_unf. + (read_block_direct): Separate codepaths for unformatted direct + and unformatted sequential. If a recl has been set by the + user, use the number of bytes left for the record if it is smaller + than the read request. Loop over subrecords. Set an error if the + user has set a recl and the read was short. + (write_buf): Separate codepaths for unformatted direct and + unformatted sequential. If a recl has been set by the + user, use the number of bytes left for the record if it is smaller + than the read request. Loop over subrecords. Set an error if the + user has set a recl and the read was short. + (us_read): Add parameter continued (to indicate that bytes_left + should not be intialized). Change default of record marker size + to four bytes. Use subrecord. If the subrecord length is smaller than + zero, this indicates a continuation. + (us_write): Add parameter continued (to indicate that the continued + flag should be set). Use subrecord. + (pre_position): Use 0 for continued on us_write and us_read calls. + (skip_record): New function. + (next_record_r_unf): New function. + (next_record_r): Use next_record_r_unf. + (write_us_marker): Default size for record markers is four bytes. + (next_record_w_unf): New function. + (next_record_w): Use next_record_w_unf. + +2006-11-25 Francois-Xavier Coudert + + * Makefile.am: Remove intrinsics/erf.c and intrinsics/bessel.c. + * Makefile.in: Regenerate. + * intrinsics/erf.c: Remove. + * intrinsics/bessel.c: Remove. + * c99_protos.h: Add prototypes for bessel and error functions. + * intrinsics/c99_functions.c: Move content for intrinsics/erf.c + and intrinsics/bessel.c here. + +2006-11-22 Jerry DeLisle + + * io/io.h (unit_flags): Add new flag has_recl. + * io.open.c (new_unit): Set flag if RECL= was specified. + * io/transfer.c (us_write): If flag set, leave recl as initialized by + new_unit. + +2006-11-16 Francois-Xavier Coudert + + * io/open.c (new_unit): Format %d expects an int variable. + * runtime/error.c (show_locus): Format %d expects an int variable. + +2006-11-08 Steven G. Kargl + + * io/read.c (max_value): Hide "int n" in an #ifdef. + +2006-11-08 Jerry DeLisle + + PR libfortran/29752 + * io/transfer.c (finalize_transfer): Flush on ADVANCE_NO. + +2006-11-05 Jerry DeLisle + + * io/transfer.c (next_record_w): Fix indentation. + +2006-11-04 Jerry DeLisle + + PR libfortran/25545 + * io/transfer.c (write_block): Cleanup code paths between + stream and non-stream I/O. + (write_buf): Cleanup. + (read_block): Cleanup. + (finalize_transfer): Call next_record for '$' edit descriptor handling + of internal unit. Cleanup code for readability. + +2006-11-03 Francois-Xavier Coudert + + PR libfortran/27895 + * intrinsics/reshape_generic.c (reshape_internal): Fix so that it + works correctly for zero-sized arrays. + * m4/reshape.m4: Likewise. + * generated/reshape_r16.c: Regenerate. + * generated/reshape_c4.c: Regenerate. + * generated/reshape_i4.c: Regenerate. + * generated/reshape_c16.c: Regenerate. + * generated/reshape_r10.c: Regenerate. + * generated/reshape_r8.c: Regenerate. + * generated/reshape_c10.c: Regenerate. + * generated/reshape_c8.c: Regenerate. + * generated/reshape_i8.c: Regenerate. + * generated/reshape_i16.c: Regenerate. + * generated/reshape_r4.c: Regenerate. + +2006-10-31 Thomas Koenig + + PR libfortran/29627 + * libgfortran.h: Add ERROR_SHORT_RECORD + * runtime/error.c (translate_error): Add case + for ERROR_SHORT_RECORD. + * io/transfer.c (read_block_direct): Separate codepaths + for stream and record unformatted I/O. Remove unneeded + tests for standard input, padding and formatted I/O. + If the record is short, read in as much data as possible, + then raise the error. + +2006-10-30 Tobias Burnus + + PR fortran/29452 + * runtime/string.c (compare0): Check whether string lengths match. + +2006-10-29 Francois-Xavier Coudert + + * configure: Regenerate. + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + +2006-10-28 Tobias Burnus + + PR fortran/29625 + * io/transfer.c (formatted_transfer_scalar): Allow binary edit + descriptors for real variables; give error for BOZ edit + descriptor for non-integers when using -std=f*. + +2006-10-26 Jerry DeLisle + + PR libfortran/29563 + * io/list_read.c (next_char): Fix an error in previous commit. + +2006-10-25 Jerry DeLisle + + PR libfortran/29563 + * io/io.h (st_parameter_dt): Add new flag at_eof. + * io/list_read.c (next_char): Set flag when EOF and return '\n' to + signal EOR. Check flag on next call and jump out. + * io/unit.c (get_internal_unit): Initialize new flag. + +2006-10-22 Francois-Xavier Coudert + + PR fortran/26025 + * m4/matmul.m4: Add possible call to gemm routine. + * generated/matmul_r8.c: Regenerate. + * generated/matmul_r16.c: Regenerate. + * generated/matmul_c8.c: Regenerate. + * generated/matmul_i8.c: Regenerate. + * generated/matmul_c16.c: Regenerate. + * generated/matmul_r10.c: Regenerate. + * generated/matmul_r4.c: Regenerate. + * generated/matmul_c10.c: Regenerate. + * generated/matmul_c4.c: Regenerate. + * generated/matmul_i4.c: Regenerate. + * generated/matmul_i16.c: Regenerate. + +2006-10-21 Steven G. Kargl + + * runtime/error.c: Add errno.h + (generate_error): Set iostat to errno on OS error. + * libgfortran.h: Set ERROR_OS to 5000 + +2006-10-20 Francois-Xavier Coudert + + * generated/minval_r8.c: Regenerate. + * generated/maxloc1_4_r8.c: Regenerate. + * generated/minloc1_16_r16.c: Regenerate. + * generated/sum_i8.c: Regenerate. + * generated/eoshift3_4.c: Regenerate. + * generated/any_l16.c: Regenerate. + * generated/eoshift1_8.c: Regenerate. + * generated/reshape_r16.c: Regenerate. + * generated/product_r4.c: Regenerate. + * generated/maxloc1_8_i4.c: Regenerate. + * generated/maxloc0_4_r4.c: Regenerate. + * generated/in_unpack_i8.c: Regenerate. + * generated/minloc0_4_r16.c: Regenerate. + * generated/reshape_c4.c: Regenerate. + * generated/maxloc0_4_r16.c: Regenerate. + * generated/minloc1_8_r16.c: Regenerate. + * generated/maxloc1_8_r16.c: Regenerate. + * generated/in_unpack_i16.c: Regenerate. + * generated/maxloc0_8_i8.c: Regenerate. + * generated/sum_r16.c: Regenerate. + * generated/minloc1_4_r8.c: Regenerate. + * generated/maxloc1_16_r16.c: Regenerate. + * generated/minloc1_16_i4.c: Regenerate. + * generated/maxloc1_16_i4.c: Regenerate. + * generated/minloc0_16_i8.c: Regenerate. + * generated/maxloc0_16_i8.c: Regenerate. + * generated/maxval_r16.c: Regenerate. + * generated/count_16_l16.c: Regenerate. + * generated/count_8_l8.c: Regenerate. + * generated/product_c10.c: Regenerate. + * generated/minloc1_8_i4.c: Regenerate. + * generated/minloc0_16_i16.c: Regenerate. + * generated/eoshift1_16.c: Regenerate. + * generated/minloc0_4_r4.c: Regenerate. + * generated/product_c4.c: Regenerate. + * generated/sum_r4.c: Regenerate. + * generated/in_pack_c16.c: Regenerate. + * generated/reshape_i4.c: Regenerate. + * generated/minloc0_8_i8.c: Regenerate. + * generated/minloc1_16_r10.c: Regenerate. + * generated/in_pack_c4.c: Regenerate. + * generated/all_l16.c: Regenerate. + * generated/reshape_c16.c: Regenerate. + * generated/maxloc1_8_r8.c: Regenerate. + * generated/minval_i16.c: Regenerate. + * generated/reshape_r10.c: Regenerate. + * generated/maxval_i4.c: Regenerate. + * generated/any_l4.c: Regenerate. + * generated/minval_i8.c: Regenerate. + * generated/maxloc1_4_i8.c: Regenerate. + * generated/maxloc0_16_i16.c: Regenerate. + * generated/maxloc0_8_r4.c: Regenerate. + * generated/minloc1_4_i16.c: Regenerate. + * generated/minloc0_4_r10.c: Regenerate. + * generated/maxloc1_4_i16.c: Regenerate. + * generated/minloc0_8_i16.c: Regenerate. + * generated/maxloc0_4_r10.c: Regenerate. + * generated/maxloc0_8_i16.c: Regenerate. + * generated/minloc1_8_r10.c: Regenerate. + * generated/product_i4.c: Regenerate. + * generated/minloc0_16_r4.c: Regenerate. + * generated/sum_c16.c: Regenerate. + * generated/maxloc1_8_r10.c: Regenerate. + * generated/maxloc0_16_r4.c: Regenerate. + * generated/minloc1_16_r8.c: Regenerate. + * generated/maxloc0_4_i4.c: Regenerate. + * generated/maxloc1_16_r8.c: Regenerate. + * generated/cshift1_4.c: Regenerate. + * generated/sum_r10.c: Regenerate. + * generated/sum_c4.c: Regenerate. + * generated/maxloc1_16_r10.c: Regenerate. + * generated/count_4_l16.c: Regenerate. + * generated/in_pack_i4.c: Regenerate. + * generated/minloc1_8_r8.c: Regenerate. + * generated/count_4_l4.c: Regenerate. + * generated/maxval_r10.c: Regenerate. + * generated/minloc1_4_i8.c: Regenerate. + * generated/in_unpack_c4.c: Regenerate. + * generated/minloc0_8_r4.c: Regenerate. + * generated/product_i16.c: Regenerate. + * generated/minloc0_16_r16.c: Regenerate. + * generated/reshape_r8.c: Regenerate. + * generated/all_l4.c: Regenerate. + * generated/in_pack_c10.c: Regenerate. + * generated/minloc0_4_i4.c: Regenerate. + * generated/reshape_c10.c: Regenerate. + * generated/minval_r4.c: Regenerate. + * generated/maxloc1_4_r4.c: Regenerate. + * generated/sum_i4.c: Regenerate. + * generated/count_16_l8.c: Regenerate. + * generated/maxval_r8.c: Regenerate. + * generated/eoshift1_4.c: Regenerate. + * generated/eoshift3_8.c: Regenerate. + * generated/minval_r16.c: Regenerate. + * generated/product_r8.c: Regenerate. + * generated/maxloc1_8_i8.c: Regenerate. + * generated/maxloc0_4_r8.c: Regenerate. + * generated/maxloc0_16_r16.c: Regenerate. + * generated/in_unpack_i4.c: Regenerate. + * generated/sum_c10.c: Regenerate. + * generated/minloc1_4_r16.c: Regenerate. + * generated/maxloc1_4_r16.c: Regenerate. + * generated/in_unpack_c16.c: Regenerate. + * generated/minloc0_8_r16.c: Regenerate. + * generated/reshape_c8.c: Regenerate. + * generated/maxloc0_8_r16.c: Regenerate. + * generated/maxloc0_8_i4.c: Regenerate. + * generated/minloc1_4_r4.c: Regenerate. + * generated/minloc0_16_i4.c: Regenerate. + * generated/maxloc0_16_i4.c: Regenerate. + * generated/minloc1_16_i8.c: Regenerate. + * generated/maxloc1_16_i8.c: Regenerate. + * generated/count_8_l4.c: Regenerate. + * generated/minloc0_16_r10.c: Regenerate. + * generated/minloc1_8_i8.c: Regenerate. + * generated/minloc0_4_r8.c: Regenerate. + * generated/product_r16.c: Regenerate. + * generated/product_c8.c: Regenerate. + * generated/sum_r8.c: Regenerate. + * generated/in_pack_i16.c: Regenerate. + * generated/minloc0_8_i4.c: Regenerate. + * generated/minloc1_16_i16.c: Regenerate. + * generated/reshape_i8.c: Regenerate. + * generated/in_pack_c8.c: Regenerate. + * generated/maxloc1_8_r4.c: Regenerate. + * generated/reshape_i16.c: Regenerate. + * generated/minval_r10.c: Regenerate. + * generated/minval_i4.c: Regenerate. + * generated/maxloc1_4_i4.c: Regenerate. + * generated/maxval_i8.c: Regenerate. + * generated/eoshift3_16.c: Regenerate. + * generated/any_l8.c: Regenerate. + * generated/maxloc0_16_r10.c: Regenerate. + * generated/minloc0_4_i16.c: Regenerate. + * generated/maxloc0_8_r8.c: Regenerate. + * generated/maxloc0_4_i16.c: Regenerate. + * generated/minloc1_4_r10.c: Regenerate. + * generated/minloc1_8_i16.c: Regenerate. + * generated/maxloc1_4_r10.c: Regenerate. + * generated/minloc0_8_r10.c: Regenerate. + * generated/maxloc1_8_i16.c: Regenerate. + * generated/in_unpack_c10.c: Regenerate. + * generated/maxloc0_8_r10.c: Regenerate. + * generated/minloc1_16_r4.c: Regenerate. + * generated/maxloc1_16_r4.c: Regenerate. + * generated/minloc0_16_r8.c: Regenerate. + * generated/product_i8.c: Regenerate. + * generated/maxloc0_16_r8.c: Regenerate. + * generated/sum_i16.c: Regenerate. + * generated/maxloc0_4_i8.c: Regenerate. + * generated/cshift1_8.c: Regenerate. + * generated/maxloc1_16_i16.c: Regenerate. + * generated/minloc1_8_r4.c: Regenerate. + * generated/sum_c8.c: Regenerate. + * generated/count_8_l16.c: Regenerate. + * generated/in_pack_i8.c: Regenerate. + * generated/maxval_i16.c: Regenerate. + * generated/count_4_l8.c: Regenerate. + * generated/minloc1_4_i4.c: Regenerate. + * generated/product_c16.c: Regenerate. + * generated/reshape_r4.c: Regenerate. + * generated/minloc0_8_r8.c: Regenerate. + * generated/in_unpack_c8.c: Regenerate. + * generated/product_r10.c: Regenerate. + * generated/cshift1_16.c: Regenerate. + * generated/all_l8.c: Regenerate. + * generated/minloc0_4_i8.c: Regenerate. + * generated/maxval_r4.c: Regenerate. + * generated/count_16_l4.c: Regenerate. + +2006-10-19 Francois-Xavier Coudert + + PR libfortran/27895 + * intrinsics/cshift0.c: Special cases for zero-sized arrays. + * intrinsics/pack_generic.c: Likewise. + * intrinsics/spread_generic.c: Likewise. + +2006-10-18 Jerry DeLisle + + PR libfortran/29277 + * io/write.c (write_a): Add conversion of LF to CR-LF for systems with + #define HAVE_CRLF. + +2006-10-18 Tobias Burnus + + * m4/in_pack.m4: Fixed a typo. + * m4/iforeach.m4: Fixed a typo. + * m4/eoshift1.m4: Fixed a typo. + * m4/eoshift3.m4: Fixed a typo. + * m4/cshift1.m4: Fixed a typo. + * m4/in_unpack.m4: Fixed a typo. + * m4/reshape.m4: Fixed a typo. + * m4/ifunction.m4: Fixed a typo. + * runtime/environ.c: Fixed a typo. + * runtime/in_pack_generic.c: Fixed a typo. + * runtime/in_unpack_generic.c: Fixed a typo. + * runtime/memory.c: Fixed a typo. + * intrinsics/cshift0.c: Fixed a typo. + * intrinsics/cpu_time.c: Fixed a typo. + * intrinsics/pack_generic.c: Fixed a typo. + * intrinsics/unpack_generic.c: Fixed a typo. + * intrinsics/eoshift0.c: Fixed a typo. + * intrinsics/eoshift2.c: Fixed a typo. + * intrinsics/reshape_generic.c: Fixed a typo. + * io/open.c: Fixed a typo. + * io/list_read.c: Fixed a typo. + * io/io.h: Fixed a typo. + * io/transfer.c: Fixed a typo. + * io/write.c: Fixed a typo. + +2006-10-17 Jerry DeLisle + + PR libfortran/29277 + * io/list_read.c (next_char): Update strm_pos. + (eat_separator): Delete extra call to unget_char. + * io/transfer.c (read_block): Use read_sf for formatted stream I/O. + (next_record_r): Update strm_pos for formatted stream I/O and handle + end-of-record correctly. + (next_record_w): Ditto. + (next_record): Enable next record (r/w) functions and update strm_pos. + (finalize_transfer): Call next_record to finish the record. + +2006-10-13 Steven G. Kargl + + * m4/spacing.m4: Use scalbn[f,l] if ldexp[f,l] is unavailable. + * m4/rrspacing.m4: Ditto. + * generated/spacing_r4.c: Regenerated. + * generated/spacing_r8.c: Ditto. + * generated/spacing_r10.c: Ditto. + * generated/spacing_r16.c: Ditto. + * generated/rrspacing_r4.c: Ditto. + * generated/rrspacing_r8.c: Ditto. + * generated/rrspacing_r10.c: Ditto. + * generated/rrspacing_r16.c: Ditto. + +2006-10-06 Steven G. Kargl + + PR fortran/15441 + PR fortran/29312 + * configure.ac: Add HAVE_LDEXPF, HAVE_LDEXP, and HAVE_LDEXPL + * m4/spacing.m4: New file. Use new HAVE_* defines. + * m4/rrspacing.m4: Ditto. + * Makefile.am: Handle new files. + * configure: Regenerated. + * Makefile.in: Ditto. + * config.h.in: Ditto. + * generated/spacing_r4.c: Generated. + * generated/spacing_r8.c: Ditto. + * generated/spacing_r10.c: Ditto. + * generated/spacing_r16.c: Ditto. + * generated/rrspacing_r4.c: Ditto. + * generated/rrspacing_r8.c: Ditto. + * generated/rrspacing_r10.c: Ditto. + * generated/rrspacing_r16.c: Ditto. + +2006-10-08 Francois-Xavier Coudert + + * intrinsics/hyper.c: Remove file. + * intrinsics/c99_functions.c: Add fallback functions asinhf, + acoshf and atanhf. + * Makefile.am: Remove file intrinsics/hyper.c. + * Makefile.in: Regenerate. + +2006-10-08 Francois-Xavier Coudert + + * c99_protos.h: Correctly protect definitions of prototypes for + asinhf, acoshf and atanhf to be the same as in intrinsics/hyper.c. + +2006-10-08 Paul Thomas + Erik Edelmann + + PR libfortran/20541 + * Makefile.in : Add move_alloc. + * intrinsics/move_alloc.c: New function. + * Makefile.am : Add move_alloc. + +2006-10-08 Francois-Xavier Coudert + + PR libfortran/26540 + * intrinsics/signal.c (signal_sub, signal_sub_int): Use intptr_t + if available to cast function pointers to int and back. + * configure.ac: Check for intptr_t. + * config.h.in: Regenerate. + * configure: Regenerate. + +2006-10-01 Francois-Xavier Coudert + + PR fortran/16580 + PR fortran/29288 + * libgfortran/Makefile.am: Add the new files to the build + process, and rules to build them. + * libgfortran/Makefile.in: Regenerate. + * libgfortran/m4/misc_specifics.m4: New file. + * libgfortran/m4/specific.m4: Add new special cases for function + with complex argument and real result, like abs_c* and aimag_c*. + * libgfortran/intrinsics/f2c_specifics.F90: Add specifics for + AIMAG, ASINH, ACOSH and ATANH. + * libgfortran/generated/_aimag_c4.F90: New file. + * libgfortran/generated/_aimag_c8.F90: New file. + * libgfortran/generated/_asinh_r10.F90: New file. + * libgfortran/generated/_acosh_r16.F90: New file. + * libgfortran/generated/_aimag_c10.F90: New file. + * libgfortran/generated/_atanh_r16.F90: New file. + * libgfortran/generated/_acosh_r4.F90: New file. + * libgfortran/generated/_acosh_r8.F90: New file. + * libgfortran/generated/_asinh_r4.F90: New file. + * libgfortran/generated/_asinh_r8.F90: New file. + * libgfortran/generated/_asinh_r16.F90: New file. + * libgfortran/generated/_atanh_r4.F90: New file. + * libgfortran/generated/_atanh_r8.F90: New file. + * libgfortran/generated/_acosh_r10.F90: New file. + * libgfortran/generated/misc_specifics.F90: New file. + * libgfortran/generated/_aimag_c16.F90: New file. + * libgfortran/generated/_atanh_r10.F90: New file. + +2006-10-05 Danny Smith + + * acinclude.m4 (HAVE_ATTRIBUTE_ALIAS): Remove __USER_LABEL_PREFIX__ + from test. + * configure: Regenerate. + +2006-10-05 Steven G. Kargl + + * Makefile.am: Use $(M4) instead of m4. + * Makefile.in: Regenerated. + +2006-10-01 Francois-Xavier Coudert + + * libgfortran.h: Add prototype for internal_unpack_c16. + +2006-09-29 Francois-Xavier Coudert + + PR libfortran/18791 + * m4/specific.m4: Special-case cabs so that its return type is + real. Special-case conjg so that their suffices are _4, _8, _10 and + _16 instead of _c4, _c8, _c10 and _c16. + * intrinsics/f2c_specifics.F90: Special-case conjg functions so + that their suffices are _4 and _8 instead of _c4 and _c8. + * generated/_conjg_c4.F90: Regenerate. + * generated/_conjg_c8.F90: Regenerate. + * generated/_conjg_c10.F90: Regenerate. + * generated/_conjg_c16.F90: Regenerate. + * generated/_abs_c4.F90: Regenerate. + * generated/_abs_c8.F90: Regenerate. + * generated/_abs_c10.F90: Regenerate. + * generated/_abs_c16.F90: Regenerate. + +2006-09-29 Steven G. Kargl + + * intrinsics/cpu_time.c: Add cpu_time_10 and cpu_time_16 routines. + +2006-09-28 Francois-Xavier Coudert +D + * Makefile.am: Install libgfortranbegin inside compiler libraries + directory instead of system libraries directory. + * Makefile.in: Regenerate. + +2006-09-24 Francois-Xavier Coudert + + * Makefile.am: Remove dependency on gfortypes.h. + * Makefile.in: Regenerate. + +2006-09-22 Danny Smith + + PR libfortran/27964 + * configure.ac: Check for setmode() function. + * configure: Regenerate. + * config.h.in: Regenerate. + * io/unix.c (output_stream): Force stdout to binary mode. + (error_stream): Force stderr to binary mode. + +2006-09-15 Jerry DeLisle + + PR libfortran/29099 + * intrinsics/date_and_time.c (secnds): Fix case of zero time. + +2006-09-15 Jerry DeLisle + + PR libfortran/29053 + * io.h (gfc_unit): Add variable, strm_pos, to track + STREAM I/O file position. + * file_pos.c (st_rewind): Set strm_pos to beginning. + * open.c (new_unit): Initialize strm_pos. + * read.c (read_x): Bump strm_pos. + * inquire.c (inquire_via_unit): Return strm_pos value. + * transfer.c (read_block),(read_block_direct),(write_block) + (write_buf): Seek to strm_pos - 1. Update strm_pos when done. + (pre_position): Initialize strm_pos. + (data_transfer_init): Set strm_pos if DT_HAS_REC. + (finalize_transfer): Flush file, no need to update strm_pos. + +2006-09-10 Paul Thomas + + PR libfortran/28947 + * m4/matmul.m4: For the case where the second input argument is + transposed, ensure that the case with rank (a) == 1 is + correctly calculated. + * generated/matmul_r4.c: Regenerate. + * generated/matmul_r8.c: Regenerate. + * generated/matmul_r10.c: Regenerate. + * generated/matmul_r16.c: Regenerate. + * generated/matmul_c4.c: Regenerate. + * generated/matmul_c8.c: Regenerate. + * generated/matmul_c10.c: Regenerate. + * generated/matmul_c16.c: Regenerate. + * generated/matmul_i4.c: Regenerate. + * generated/matmul_i8.c: Regenerate. + * generated/matmul_i16.c: Regenerate. + +2006-08-27 Jerry DeLisle + + PR libfortran/28354 + * io/write.c: Check for special case of zero precision in format + and pre-round the real value. + +2006-08-15 Jerry DeLisle + + PR libfortran/25828 + * libgfortran.h: Rename GFC_LARGE_IO_INT to GFC_IO_INT. + * io/file_pos.c (st_backspace): Ignore if access=STREAM. + (st_rewind): Handle case of access=STREAM. + * io/open.c (access_opt): Add STREAM_ACCESS. + (edit_modes): Set current_record to zero only if not STREAM. + (new_unit): Initialize maxrec, recl, and last_record for STREAM. + * io/read.c (read_x): Advance file position for STREAM. + * io/io.h (enum unit_access): Align IOPARM flags with frontend. + Add ACCESS_STREAM. Add prototype for is_stream_io () function. + Use GFC_IO_INT. + * io/inquire.c (inquire_via_unit): Add text for access = "STREAM". + * io/unit.c (is_stream_io): New function to return true if access = + STREAM. + * io/transfer.c (file_mode): Add modes for unformatted stream and + formatted stream. (current_mode): Return appropriate file mode based + on access flags. + (read_block): Handle formatted stream reads. + (read_block_direct): Handle unformatted stream reads. + (write_block): Handle formatted stream writes. + (write_buf): Handle unformatted stream writes. + (unformatted_read): Fix up, use temporary for size. + (pre_position): Position file for STREAM access. + (data_transfer_init): Initialize for stream access, skip irrelevent + error checks. + (next_record_r),(next_record_w), and (next_record): Do nothing for + stream I/O. + (finalize_transfer): Flush when all done if stream I/O. + +2006-08-12 Francois-Xavier Coudert + + * intrinsics/bessel.c: Add prototypes for all functions. + +2006-08-05 Francois-Xavier Coudert + + * intrinsics/access.c (access_func): Remove export directive. + +2006-08-02 Thomas Koenig + + * Makefile.in: Regenerate using automake 1.9.6. + * aclocal.m4: Revert to previous version. + +2006-08-01 Thomas Koenig + + PR libfortran/28452 + * Makefile.am: Remove normalize.c. + * aclocal.m4: Regenerate using aclocal 1.9.3. + * Makefile.in: Regenerate using automake 1.9.3. + * libgfortran.h: #include . + Define GFC_REAL_*_DIGITS and GFC_REAL_*_RADIX. + Remove prototypes for normalize_r4_i4 and normalize_r8_i8. + * intrinsics/random.c (top level): Add prototypes for + random_r10, arandom_r10, random_r16 and arandom_r16. + (rnumber_4): New static function. + (rnumber_8): New static function. + (rnumber_10): New static function. + (rnumber_16): New static function. + (top level): Set to kiss_size to 12 if we have + REAL(KIND=16), to 8 otherwise. + Define KISS_DEFAULT_SEED_1, KISS_DEFAULT_SEED_2 and + KISS_DEFAULT_SEED_3. + (kiss_random_kernel): Take argument to differentiate + between different random number generators. + (random_r4): Add argument to call to kiss_random_kernel, + use rnumber_*. + (random_r8): Likewise. + (random_r10): New function. + (random_r16): New function. + (arandom_r4): Add argument to call to kiss_random_kernel, + use_rnumber_*. + (arandom_r8): Likewise. + (arandom_r10): New function. + (arandom_r16): New function. + * intrinsics/rand.c (rand): Use shift and mask. + * runtime/normalize.c: Remove. + +2006-07-30 Jerry DeLisle + + PR libfortran/28335 + * file_position.c (st_flush): Add clearer error when UNIT does not + exist. Add reference to standard in comment. + +2006-07-30 Jerry DeLisle + + PR libfortran/28335 + * close.c (st_close): Revert previous patch and add comment. + * file_position.c (st_flush): Revert previous patch and add comment. + +2006-07-30 Francois-Xavier Coudert + + * intrinsics/date_and_time.c: Add functions for GMTIME and LTIME. + * intrinsics/access.c: New file. + * intrinsics/chmod.c: New file. + * configure.ac: Add checks for , access, fork,execl + and wait. + * Makefile.am: Add new files intrinsics/access.c and + intrinsics/chmod.c. + * configure: Regenerate. + * config.h.in: Regenerate. + * Makefile.in: Regenerate. + +2006-07-30 Janne Blomqvist + + * io/transfer.c (transfer_array): Remove stride0 fix. + +2006-07-26 Francois-Xavier Coudert + + * configure.ac: Check for function clock. + * Makefile.am: Compile new file intrinsics/clock.c. + * intrinsics/clock.c: New file. + * Makefile.in: Regenerate. + * configure: Regenerate. + * config.h.in: Regenerate. + * intrinsics/stat.c: Rename the old stat_i?_sub functions to + helper functions stat_i?_sub_0, and use them for both STAT and + LSTAT. + +2006-07-25 Jerry DeLisle + + PR libfortran/28335 + * close.c (st_close): Add error when UNIT does not exist. + * file_position.c (st_flush): Add error when UNIT does not exist. + +2006-07-25 Paolo Bonzini + + PR build/26188 + * configure: Regenerate. + +2006-07-23 Jerry DeLisle + + PR libfortran/25289 + * libgfortran.h: Add conditional definition of GFC_LARGE_IO_INT type. + * io/io.h (st_parameter_dt): Define rec as type GFC_LARGE_IO_INT. + +2006-07-21 Jerry DeLisle + + PR libfortran/28339 + * io/transfer.c (next_record_w): Use next_array_record result to set + END_FILE. (write_block): Test for END_FILE before the next write occurs. + * io/unit.c (get_internal_unit): Initialize iunit->endfile for internal + unit. + +2006-07-19 Janne Blomqvist + + PR fortran/27919 + * m4/dotprodc.m4: Remove. + * m4/dotprodl.m4: Remove. + * m4/dotprod.m4: Remove. + * generated/dotprod_*.c: Remove. + * Makefile.am: Remove any references to dot_product + implementation. + * Makefile.in: Regenerated. + +2006-07-18 Paolo Bonzini + + * configure: Regenerate. + +2006-07-15 Steven G. Kargl + + * intrinsics/etime.c: Remove etime_ + * libtool-version: Bump from libgfortran.so.1 to libgfortran.so.2 + +2006-07-12 Francois-Xavier Coudert + + PR fortran/28163 + * intrinsics/string_intrinsics.c (copy_string): Remove function. + +2006-07-04 Francois-Xavier Coudert + + * intrinsics/date_and_time.c (itime0,idate0,itime_i4,itime_i8, + idate_i4,idate_i8): New functions. + +2006-07-03 Jerry DeLisle + + PR libfortran/27704 + * runtime/error.c (notify_std): Pass common flags into function. Use + flags to show locus of error or warning. + * libgfortran.h: Add enum try. Add prototype for notify_std. + * io/open.c (edit_modes): Allow status="old" and add extension to + allow status="scratch" + *io/list_read.c (nml_read_obj): Update call to notify_std. + *io/io.h: Remove enum try and prototype for notify_std. + *io/transfer.c (read_sf): Update call to notify_std. + *io/format.c (parse_format_list): Update call to notify_std. + +2006-06-25 Francois-Xavier Coudert + + * io/io.h: Move proto for unit_to_fd... + * libgfortran.h: ...here. + +2006-06-24 Francois-Xavier Coudert + + * intrinsics/ierrno.c: Don't include "io/io.h". + * intrinsics/sleep.c: Likewise. + * intrinsics/perror.c: Likewise. + * intrinsics/stat.c: Likewise. + * intrinsics/kill.c: Likewise. + * intrinsics/time.c: Likewise. + * intrinsics/fnum.c: Likewise. + * intrinsics/rename.c: Likewise. + * intrinsics/symlnk.c: Likewise. + * intrinsics/chdir.c: Likewise. + * intrinsics/link.c: Likewise. + * intrinsics/random.c: Don't include "io/io.h". Include . + * intrinsics/rand.c: Likewise. + +2006-06-24 Francois-Xavier Coudert + + PR fortran/28094 + * Makefile.am: Add _mod_r10.F90 and _mod_r16.F90. + * Makefile.in: Regenerate. + * generated/_mod_r10.F90: New file. + * generated/_mod_r16.F90: New file. + +2006-06-22 Francois-Xavier Coudert + + PR libfortran/26769 + * Makefile.am: Add r4 and r8 versions of reshape and transpose. + * Makefile.in: Regenerate. + * generated/reshape_r4.c: New file. + * generated/reshape_r8.c: New file. + * generated/transpose_r4.c: New file. + * generated/transpose_r8.c: New file. + +2006-06-20 Paul Thomas + + PR libfortran/28005 + * m4/matmul.m4: aystride = 1 does not uniquely detect the + presence of a temporary transpose; an array element in the + first dimension produces the same signature. Detect this + using the rank of a and add specific code. + * generated/matmul_r4.c: Regenerate. + * generated/matmul_r8.c: Regenerate. + * generated/matmul_r10.c: Regenerate. + * generated/matmul_r16.c: Regenerate. + * generated/matmul_c4.c: Regenerate. + * generated/matmul_c8.c: Regenerate. + * generated/matmul_c10.c: Regenerate. + * generated/matmul_c16.c: Regenerate. + * generated/matmul_i4.c: Regenerate. + * generated/matmul_i8.c: Regenerate. + * generated/matmul_i16.c: Regenerate. + +2006-06-18 John David Anglin + + PR libgomp/27254 + * io/unit.c (get_internal_unit): Initialize and lock thread mutex + for internal units. + +2006-06-06 Janne Blomqvist + + * m4/in_pack.m4: Add TODO comment about detecting temporaries, + remove test for stride 0, update copyright year. + * m4/transpose.m4: Remove test for stride 0, update copyright + year. + * m4/iforeach.m4: Likewise. + * m4/shape.m4: Likewise. + * m4/in_unpack.m4: Likewise. + * m4/reshape.m4: Likewise. + * m4/ifunction.m4: Likewise. + * m4/matmul.m4: Likewise. + * m4/matmull.m4: Likewise. + * intrinsics/etime.c: Likewise. + * intrinsics/transpose_generic.c: Likewise. + * intrinsics/spread_generic.c: Likewise. + * intrinsics/stat.c: Likewise. + * intrinsics/reshape_generic.c: Likewise. + * intrinsics/random.c: Likewise. + * generated/*: Regenerated from above changed m4 files. + +2006-05-29 Jerry DeLisle + + PR libfortran/27757 + * io/unix.c (fd_seek): Set active to zero. + +2006-05-29 Jerry DeLisle + + PR libfortran/27634 + * io/format.c (parse_format_list): Allow missing period in format only + if -std=legacy. + +2006-05-28 Thomas Koenig + + * intrinsics/string_intrinsics.c (compare_string): + Use memcmp instead of strncmp to avoid tripping over + CHAR(0) in a string. + +2006-05-27 Janne Blomqvist + + * io/io.h (find_or_create_unit): Correct export declaration. + +2006-05-27 Janne Blomqvist + + * intrinsics/abort.c (abort_): Remove. + +2006-05-26 Janne Blomqvist + + * configure.ac: Remove AC_FUNC_MMAP. + * configure: Regenerated. + * Makefile.in: Regenerated. + * config.h.in: Regenerated. + * aclocal.m4: Regenerated. + +2006-05-25 Francois-Xavier Coudert + + * intrinsics/associated.c (associated): Zero-sized arrays should + not be reported as ASSOCIATED. + +2006-05-24 Carlos O'Donell + + * Makefile.am: Add install-html target. Add install-html to .PHONY + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + +2006-05-20 Jerry DeLisle + + PR libfortran/24459 + * io/list_read.c (nml_parse_qualifier): Leave loop spec end value + at default value unless -std=f95 or if an array section + is specified in namelist input. Warn if -pedantic. + * io/io.h (st_parameter_dt): Add expanded_read flag. + +2006-05-19 Jerry DeLisle + + PR libfortran/22423 + * io/transfer.c (read_block): Return NULL instead of nothing. + +2006-05-16 Jerry DeLisle + + PR libfortran/27575 + * io/transfer.c (read_block): Add check for end file condition. + (read_block_direct): Add check for end file condition. + +2006-05-05 Francois-Xavier Coudert + + PR libfortran/26985 + * m4/matmul.m4: Correct the condition for the memset call, + and remove the unneeded call to size0. + * generated/matmul_r4.c: Regenerate. + * generated/matmul_r8.c: Regenerate. + * generated/matmul_r10.c: Regenerate. + * generated/matmul_r16.c: Regenerate. + * generated/matmul_c4.c: Regenerate. + * generated/matmul_c8.c: Regenerate. + * generated/matmul_c10.c: Regenerate. + * generated/matmul_c16.c: Regenerate. + * generated/matmul_i4.c: Regenerate. + * generated/matmul_i8.c: Regenerate. + * generated/matmul_i16.c: Regenerate. + +2006-04-29 Jerry DeLisle + + PR libfortran/27360 + * io/list_read.c (read_logical): Free line_buffer and free saved. + +2006-04-28 Jerry DeLisle + + PR libfortran/27304 + * io/transfer.c (formatted_transfer_scalar): Generate error if data + descriptors are exhausted. + * io/format.c (next_format0): Fix comment. + +2006-04-22 Jerry DeLisle + + PR libfortran/20257 + * io/io.h: Add prototypes for get_internal_unit and free_internal_unit. + * io/unit.c (get_internal_unit): Initialize unit number, not zero. + (free_internal_unit): New function to consolidate freeing memory. + (get_unit): Initialize internal_unit_desc to NULL when unit is + external. + * io/unix.c (mem_close): Check for not NULL before freeing memory. + * io/transfer.c (read_block): Reset bytes_left and skip error if unit + is preconnected and default record length is reached. + (read_block_direct): Ditto. + (write_block): Ditto. + (write_buf): Ditto. + (data_transfer_init): Only flush if not internal unit. + (finalize_transfer): Ditto and delete code to free memory used by + internal units. + (st_read_done): Use new function - free_internal_unit. + (st_write_done): Use new function - free_internal unit. + +2006-04-22 Jakub Jelinek + + PR fortran/26769 + * Makefile.am (i_transpose_c): Add generated/transpose_r16.c. + (i_reshape_c): Add generated/reshape_r16.c. + * Makefile.in: Regenerated. + * generated/transpose_r16.c: Generated new file. + * generated/redhape_r16.c: Generated new file. + +2006-04-14 Jerry DeLisle + + PR libfortran/27138 + * io/list_read.c (eat_line): New function. + (parse_repeat): Use new function and free_saved. + (read_logical): Same. + (read_integer): Use new function. + (parse_real): Use nml_bad_return and new function. + (read_complex): Use new function and free_saved. + (read_real): Same. + +2006-04-12 Jerry DeLisle + + PR libfortran/26766 + * io/io.h: Add bit to identify associated unit as internal. + * io/unit.c (get_external_unit): Renamed the find_unit_1 function to + reflect the external unit functionality vs internal unit. + (get_internal_unit): New function to allocate and initialize an internal + unit structure. + (get_unit): Use get_internal_unit and get_external_unit. + (is_internal_unit): Revised to use new bit added in io.h. + * io/transfer.c (data_transfer_init): Fix line width. + (st_read_done): Free memory allocated for internal unit. + (st_write_done): Add test to only flush and truncate when not an + internal unit. Free memory allocated for internal unit. + +2006-04-11 Jakub Jelinek + + * io/io.h (st_parameter_dt): Revert 2005-12-10 change to + u.pad, fix comment. + (check_st_parameter_dt): New compile time assert. + +2006-04-10 Jakub Jelinek + + PR libfortran/24685 + * io/write.c (MIN_FIELD_WIDTH, STR, STR1): Define. + (output_float): Increase buffer sizes for IEEE quad and IBM extended + long double. + (write_real): Output REAL(16) as 1PG43.34E4 rather than 1PG40.31E4. + +2006-04-07 Jerry DeLisle + + PR libfortran/26890 + * io/io.h: Revert change to pad size made on 2006-03-30. + Add comment explaining dependency with fortran/trans-io.c. + +2006-04-03 Jerry DeLisle + + * io/write.c (output_float): Update condition to not error when + decimal precision in format specifier is zero. + +2006-04-01 Francois-Xavier Coudert + + * config/fpu-387.h: Use previously added SSE code in all + cases, as it really is the right thing to do. + +2006-03-30 Jerry DeLisle + + PR libfortran/26890 + * io/io.h: Add size_used to st_parameter_dt, adjust pad size. + *io/transfer.c (data_transfer_init): Initialize size_used to zero. + (read_sf): Use size_used. + (read_block): Likewise. + (read_block_direct): Likewise. + (write_block): Likewise. + (write_buf): Likewise and eliminate erroneous FAILURE return. + (finalize_transfer): Assign value of size_used to *dtp->size. + +2006-03-30 Francois-Xavier Coudert + + PR libfortran/26712 + * config/fpu-387.h: Add special case for handling of SSE + control bit on i386-darwin. + +2006-03-30 Thomas Koenig + + PR fortran/25031 + * runtime/memory.c (allocate_array): If stat is present and + the variable is already allocated, free the variable, do + the allocation and set stat. + (allocate_array_64): Likewise. Whitespace fix. + +2006-03-26 Jerry DeLisle + + PR libfortran/26880 + * io/file_pos.c (st_rewind): Clear read_bad flag. + +2006-03-25 Jerry DeLisle + + PR libfortran/26661 + * io/io.h: Add read_sf so it can be used by read_x. + * io/transfer.c (read_sf): Pass no_error flag to read_sf. Use it to + break out rather than error on EOF or EOR conditions. + (read_block): Update call to read_sf. + (read_block_direct): Ditto. + * io/read.c (read_x): Use the modified read_sf instead of read_block. + +2006-03-25 Thomas Koenig + + PR libfortran/26735 + * io/transfer.c (data_transfer_init): Set u_flags.convert + on an unopened unit if specified by environment variable + (via get_unformatted_convert) or by compile-time option. + +2006-03-25 Thomas Koenig + + PR fortran/26769 + * Makefile.am: Add transpose_r10.c and reshape_r10.c. + * aclocal.m4: Regenerate using aclocal 1.9.3. + * Makefile.in: Regenerate using automake 1.9.3. + * m4/iparm.m4 (rtype_ccode): If rtype_letter is `i', + evaluate to rtype_kind, otherwise to rtype_code. + * generated/transpose_r10.c: Add. + * generated/reshape_r10.c: Add. + +2006-03-22 Thomas Koenig + + PR fortran/19303 + * libgfortran.h (compile_options_t): Add record_marker. + * runtime/compile_options.c (set_record_marker): + New function. + * io/open.c: If we have four-byte record markers, use + GFC_INTEGER_4_HUGE as default record length. + * io/file_pos.c (unformatted_backspace): Handle + different size record markers. + * io/transfer.c (us_read): Likewise. + (us_write): Likewise. + (next_record_r): Likewise. + (write_us_marker): Likewise. + (next_record_w): Likewise. + +2006-03-20 Thomas Koenig + + PR fortran/20935 + * m4/iforeach.m4: Add SCALAR_FOREACH_FUNCTION macro. + * m4/ifunction.m4: Add SCALAR_ARRAY_FUNCTION macro. + * m4/minloc0.m4: Use SCALAR_FOREACH_FUNCTION. + * m4/minloc1.m4: Use SCALAR_ARRAY_FUNCTION. + * m4/maxloc0.m4: Use SCALAR_FOREACH_FUNCTION. + * m4/maxloc1.m4: Use SCALAR_ARRAY_FUNCTION. + * m4/minval.m4: Likewise. + * m4/maxval.m4: Likewise. + * m4/product.m4: Likewise. + * m4/sum.m4: Likewise. + * minloc0_16_i16.c : Regenerated. + * minloc0_16_i4.c : Regenerated. + * minloc0_16_i8.c : Regenerated. + * minloc0_16_r10.c : Regenerated. + * minloc0_16_r16.c : Regenerated. + * minloc0_16_r4.c : Regenerated. + * minloc0_16_r8.c : Regenerated. + * minloc0_4_i16.c : Regenerated. + * minloc0_4_i4.c : Regenerated. + * minloc0_4_i8.c : Regenerated. + * minloc0_4_r10.c : Regenerated. + * minloc0_4_r16.c : Regenerated. + * minloc0_4_r4.c : Regenerated. + * minloc0_4_r8.c : Regenerated. + * minloc0_8_i16.c : Regenerated. + * minloc0_8_i4.c : Regenerated. + * minloc0_8_i8.c : Regenerated. + * minloc0_8_r10.c : Regenerated. + * minloc0_8_r16.c : Regenerated. + * minloc0_8_r4.c : Regenerated. + * minloc0_8_r8.c : Regenerated. + * minloc1_16_i16.c : Regenerated. + * minloc1_16_i4.c : Regenerated. + * minloc1_16_i8.c : Regenerated. + * minloc1_16_r10.c : Regenerated. + * minloc1_16_r16.c : Regenerated. + * minloc1_16_r4.c : Regenerated. + * minloc1_16_r8.c : Regenerated. + * minloc1_4_i16.c : Regenerated. + * minloc1_4_i4.c : Regenerated. + * minloc1_4_i8.c : Regenerated. + * minloc1_4_r10.c : Regenerated. + * minloc1_4_r16.c : Regenerated. + * minloc1_4_r4.c : Regenerated. + * minloc1_4_r8.c : Regenerated. + * minloc1_8_i16.c : Regenerated. + * minloc1_8_i4.c : Regenerated. + * minloc1_8_i8.c : Regenerated. + * minloc1_8_r10.c : Regenerated. + * minloc1_8_r16.c : Regenerated. + * minloc1_8_r4.c : Regenerated. + * minloc1_8_r8.c : Regenerated. + * maxloc0_16_i16.c : Regenerated. + * maxloc0_16_i4.c : Regenerated. + * maxloc0_16_i8.c : Regenerated. + * maxloc0_16_r10.c : Regenerated. + * maxloc0_16_r16.c : Regenerated. + * maxloc0_16_r4.c : Regenerated. + * maxloc0_16_r8.c : Regenerated. + * maxloc0_4_i16.c : Regenerated. + * maxloc0_4_i4.c : Regenerated. + * maxloc0_4_i8.c : Regenerated. + * maxloc0_4_r10.c : Regenerated. + * maxloc0_4_r16.c : Regenerated. + * maxloc0_4_r4.c : Regenerated. + * maxloc0_4_r8.c : Regenerated. + * maxloc0_8_i16.c : Regenerated. + * maxloc0_8_i4.c : Regenerated. + * maxloc0_8_i8.c : Regenerated. + * maxloc0_8_r10.c : Regenerated. + * maxloc0_8_r16.c : Regenerated. + * maxloc0_8_r4.c : Regenerated. + * maxloc0_8_r8.c : Regenerated. + * maxloc1_16_i16.c : Regenerated. + * maxloc1_16_i4.c : Regenerated. + * maxloc1_16_i8.c : Regenerated. + * maxloc1_16_r10.c : Regenerated. + * maxloc1_16_r16.c : Regenerated. + * maxloc1_16_r4.c : Regenerated. + * maxloc1_16_r8.c : Regenerated. + * maxloc1_4_i16.c : Regenerated. + * maxloc1_4_i4.c : Regenerated. + * maxloc1_4_i8.c : Regenerated. + * maxloc1_4_r10.c : Regenerated. + * maxloc1_4_r16.c : Regenerated. + * maxloc1_4_r4.c : Regenerated. + * maxloc1_4_r8.c : Regenerated. + * maxloc1_8_i16.c : Regenerated. + * maxloc1_8_i4.c : Regenerated. + * maxloc1_8_i8.c : Regenerated. + * maxloc1_8_r10.c : Regenerated. + * maxloc1_8_r16.c : Regenerated. + * maxloc1_8_r4.c : Regenerated. + * maxloc1_8_r8.c : Regenerated. + * maxval_i16.c : Regenerated. + * maxval_i4.c : Regenerated. + * maxval_i8.c : Regenerated. + * maxval_r10.c : Regenerated. + * maxval_r16.c : Regenerated. + * maxval_r4.c : Regenerated. + * maxval_r8.c : Regenerated. + * minval_i16.c : Regenerated. + * minval_i4.c : Regenerated. + * minval_i8.c : Regenerated. + * minval_r10.c : Regenerated. + * minval_r16.c : Regenerated. + * minval_r4.c : Regenerated. + * minval_r8.c : Regenerated. + * sum_c10.c : Regenerated. + * sum_c16.c : Regenerated. + * sum_c4.c : Regenerated. + * sum_c8.c : Regenerated. + * sum_i16.c : Regenerated. + * sum_i4.c : Regenerated. + * sum_i8.c : Regenerated. + * sum_r10.c : Regenerated. + * sum_r16.c : Regenerated. + * sum_r4.c : Regenerated. + * sum_r8.c : Regenerated. + * product_c10.c : Regenerated. + * product_c16.c : Regenerated. + * product_c4.c : Regenerated. + * product_c8.c : Regenerated. + * product_i16.c : Regenerated. + * product_i4.c : Regenerated. + * product_i8.c : Regenerated. + * product_r10.c : Regenerated. + * product_r16.c : Regenerated. + * product_r4.c : Regenerated. + * product_r8.c : Regenerated. + +2006-03-17 Jerry DeLisle + + PR libfortran/26509 + * libgfortran.h: Add ERROR_DIRECT_EOR. + * runtime/error.c (translate_error): Add translation for new error. + * io/transfer.c (write_buf): Add check for EOR when mode is + direct access. + +2006-03-13 Paul Thomas + + PR fortran/25378 + * libgfortran/m4/minloc1.m4: Set the initial position to zero and + modify the condition for updating it, to implement the F2003 + requirement for all(mask).eq.false. + * libgfortran/m4/maxloc1.m4: The same. + * libgfortran/m4/iforeach.m4: The same. + * libgfortran/m4/minloc0.m4: The same. + * libgfortran/m4/maxloc0.m4: The same. + * libgfortran/generated/maxloc0_16_i16.c: Regenerated, together + with 41 others. + * libgfortran/generated/minloc0_16_i16.c: Regenerated, together + with 41 others. + +2006-03-09 Jerry DeLisle + + PR libfortran/26499 + * io/file_pos (st_rewind): Flush always. + * io/unix.c (fd_truncate): Return SUCCESS rather than FAILURE for + special files like /dev/null. + * io/transfer.c (st_write_done): Remove broken logic that + prevented calling fd_truncate. + +2006-03-05 Jerry DeLisle + + PR libfortran/26554 + * io/list_read.c (read_logical): Return the value if not in namelist + mode. + +2006-03-03 Thomas Koenig + + PR fortran/25031 + * runtime/memory.c: Adjust copyright years. + (allocate_array): New function. + (allocate64_array): New function. + * libgfortran.h (error_codes): Add ERROR_ALLOCATION. + +2006-02-28 Jerry DeLisle + + PR libfortran/26136 + * io/io.h: Add flag for reading from line_buffer. + * io/list_read.c (l_push_char): New function to save namelist + input when reading logicals. + (free_line): New function to free line_buffer memory. + (next_char): Added feature to read from line_buffer. + (read_logical): Use new functions to test for '=' after reading a + logical value, checking for possible variable name. + (namelist_read): Use free_line when all done. + +2006-02-27 Jerry DeLisle + + PR libfortran/26464 + * io/file_pos.c (st_backspace): Flush and truncate file + when in AFTER_ENDFILE condition. + * io/transfer.c (st_read_done): Remove flush, no longer needed. + +2006-02-24 Jerry DeLisle + + PR libfortran/26423 + * io/unix.c (fd_seek): Revert change from 25949. + (fd_read): Same. + (fd_write): Same. + +2006-02-19 Francois-Xavier Coudert + + * io/open.c (edit_modes): Correct abusive copy-pasting. + +2006-02-16 Francois-Xavier Coudert + + PR libfortran/24903 + * m4/dotprodc.m4: Use __builtin_conj instead of assigning real + and imaginary parts separately. + * generated/dotprod_c4.c: Regenerated. + * generated/dotprod_c8.c: Regenerated. + * generated/dotprod_c10.c: Regenerated. + * generated/dotprod_c16.c: Regenerated. + +2006-02-12 Janne Blomqvist + + PR libfortran/25949 + * io/io.h: Add set function pointer to struct stream. + * io/unix.c (fd_seek): Only update offset, don't seek. + (fd_sset): New function. + (fd_read): Call lseek directly if necessary. + (fd_write): Likewise. + (fd_open): Set pointer to fd_sset. + (mem_set): New function. + (open_internal): Set pointer to mem_set. + * io/transfer.c (write_block_direct): Rename to write_buf, add + error return, non-pointer length argument. + (unformatted_write): Update to use write_buf. + (us_write): Simplify by using swrite instead of salloc_w. + (write_us_marker): New function. + (new_record_w): Use sset instead of memset, use write_us_marker, + simplify by using swrite instead of salloc_w. + +2006-02-08 Francois-Xavier Coudert + + PR libfortran/25425 + * libgfortran.h: Add pedantic field to compile_options struct. + * io/write.c (calculate_G_format): Depending on the standard, + choose E or F format for list-directed output of 0.0. + * runtime/error.c (notify_std): Make warning and error dependent + on pedanticity. + * runtime/compile_options.c (set_std): Use new pedantic argument. + +2006-02-07 Dale Ranta + + PR fortran/25577 + * intrinsics/mvbits.c: Shift '(TYPE)1' type when building 'lenmask'. + +2006-02-07 Rainer Emrich + + * intrinsics/c99_functions.c: Work around incompatible + declarations of cabs{,f,l} on pre-C99 IRIX systems. + +2005-02-06 Thomas Koenig + + PR libfortran/23815 + * runtime/environ.c (init_unformatted): Add GFORTRAN_CONVERT_UNIT + environment variable. + (top level): Add defines, type and static variables for + GFORTRAN_CONVERT_UNIT handling. + (search_unit): New function. + (match_word): New function. + (match_integer): New function. + (next_token): New function. + (push_token): New function. + (mark_single): New function. + (mark_range): New funciton. + (do_parse): New function. + (init_unformatted): New function. + (get_unformatted_convert): New function. + * runtime/compile_options.c: Add set_convert(). + * libgfortran.h: Add convert to compile_options_t. + * io/open.c (st_open): Call get_unformatted_convert to get + unit default; if CONVERT_NONE is returned, check for + the presence of a CONVERT specifier and use it. + As default, use compile_options.convert. + * io/io.h (top level): Add CONVERT_NONE to unit_convert, to signal + "nothing has been set". + (top level): Add prototype for get_unformatted_convert. + +2006-02-06 Francois-Xavier Coudert + + PR libfortran/24685 + * io/write.c (write_real): Widen the default format for real(10) + variables output. + +2006-01-24 Jerry DeLisle + + PR libfortran/25835 + * io/transfer.c (st_read_done): Flush buffers when read is done. + +2006-01-17 Jerry DeLisle + + PR libfortran/25697 + * io/transfer.c (us_read): Detect end of file condition from previous + operations and bail out (no need to pre-position). + +2006-01-17 Jerry DeLisle + + PR libfortran/25631 + * io/transfer.c (formatted_transfer_scalar): Adjust pending_spaces and + skips so that TL works correctly when no bytes_used yet. + +2006-01-16 Roger Sayle + + * configure.ac (CFLAGS): Update to include -std=gnu99 so that + the configure tests will be run with the same environment as + used to compile the libgfortran source code. + * configure: Regenerate. + +2006-01-12 Roger Sayle + + * intrinsics/c99_functions.c: Add function prototypes to avoid + warnings from -Wstrict-prototypes -Wmissing-prototypes. On Tru64 + work around a brain-dead libm by redirecting calls to cabs{,f,l} + to a local __gfc_cabs{,f,l}. + +2006-01-07 Janne Blomqvist + + * configure.ac: Remove check for sys/mman.h. + * configure: Regenerated. + * Makefile.in: Regenerated. + * config.h.in: Regenerated. + * aclocal.m4: Regenerated. + +2006-01-05 Jerry DeLisle + + PR libfortran/25598 + * io/file_pos.c (unformatted_backspace): Assure the new file position + to seek is not less than zero. + (st_backspace): Set unit bytes_left to zero. + * io/transfer.c (next_record_r): Fix line lengths, no functional change. + +2006-01-02 Paolo Bonzini + + PR target/25259 + * configure.ac: Use GCC_HEADER_STDINT. + * libgfortran.h: Include gstdint.h. + * aclocal.m4: Regenerate. + * configure: Regenerate. + +2006-01-01 Steven G. Kargl + + * ChangeLog: Split into years ... + * ChangeLog-2002: here. + * ChangeLog-2003: here. + * ChangeLog-2004: here. + * ChangeLog-2005: here. diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2007 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2007 new file mode 100644 index 0000000000..2b8611018c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2007 @@ -0,0 +1,2480 @@ +2007-12-27 Thomas Koenig + + PR libfortran/22423 + * intrinsics/pack_generic.c (pack): Change type of mask argument + to gfc_array_l1 * in prototype and function. + (pack_char): Likewise. + * intrinsics/unpack_generic.c (unpack1): Likewise. + (unpack1_char): Likewise. + (unpack0): Likewise. + (unpack0_char): Likewise. + +2007-12-27 Thomas Koenig + + PR libfortran/34594 + * runtime/error.c: If there was a previous error, don't + mask it with another error mesage, EOF or EOR condition. + +2007-12-25 Jerry DeLisle + + PR libfortran/34560 + * io/transfer.c (read_sf): Check if readlen was less than the requested + number of bytes to read and if so, generate error. + +2007-12-25 Daniel Franke + + PR fortran/34533 + * intrinsics/cpu_time.c: Moved code commonly usable for CPU_TIME, + DTIME and ETIME to ... + * intrinsics/time_1.h: ... here. + * intrinsics/dtime.c: New file. + * intrinsics/etime.c: Newly implemented using the common + time-aquisition function from time_1.h. + * gfortran.map (_gfortran_dtime, _gfortran_dtime_sub): New. + * Makefile.am: Added new file. + * Makefile.in: Regenerated. + * configure: Regenerated. + +2007-12-25 Thomas Koenig + + PR libfortran/34566 + * m4/matmull.m4: Multiply xstride and ystride by correct kind. + * generated/matmul_l4.c: Regenerated. + * generated/matmul_l8.c: Regenerated. + * generated/matmul_l16.c: Regenerated. + +2007-12-19 Tobias Burnus + + PR fortran/34530 + * io/list_read.c (eat_line): Move up in the file. + (eat_separator): In namelist mode, skip over comment lines. + +2007-12-16 Jerry DeLisle + + PR fortran/34427 + * io/list_read.c (read_real): Handle intervening line ends and spaces. + (get_name): Don't push separators to saved_string. + (eat_separator): If in namelist mode eat spaces and line ends as well. + +2007-12-13 Thomas Koenig + + PR libfortran/34370 + PR libfortran/34323 + PR libfortran/34405 + * io/io.h: Add previous_nonadvancing_write to gfc_unit. + Add prototype for finish_last_advance_record. + * io/file_pos.c (st_backspace): Generate error if backspace is + attempted for direct access or unformatted stream. + If there are bytes left from a previous ADVANCE="no", write + them out before performing the backspace. + (st_endfile): Generate error if endfile is attempted for + direct access. + If there are bytes left from a previous ADVANCE="no", write + them out before performing the endfile. + (st_rewind): Generate error if rewind is attempted for + direct access. + * unit.c (close_unit_1): Move functionality to write + previously written bytes to... + (finish_last_advance_record): ... here. + * transfer.c (data_transfer_init): If reading, reset + previous_nonadvancing_write. + (finalize_transfer): Set the previous_noadvancing_write + flag if we are writing and ADVANCE="no" was specified. + Only call next_record() if advance="no" wasn't specified. + +2007-12-13 Tobias Burnus + + PR fortran/34427 + * io/list_read.c (read_real): Fix unwinding for namelists. + +2007-12-10 Jerry DeLisle + + PR libfortran/34411 + * io/read.c (convert_real, read_l, read_decimal, read_radix, read_f): + Call next_record after bad read or overflow error. + +2007-12-09 Tobias Burnus + + PR fortran/34404 + * io/list_read.c (parse_real): Remove superfluous "goto bad;". + +2007-12-08 Tobias Burnus + + PR fortran/34319 + * io/list_read.c (parse_real, read_real): Support NaN/Infinity. + +2007-12-02 Jerry DeLisle + Thomas Koenig + + PR libfortran/33985 + * io/transfer.c (read_block, read_block_direct, write_block, write_buf): + Don't seek if file position is already there for STREAM I/O. + (finalize_transfer): For STREAM I/O don't flush unless the file position + has moved past the start position before the transfer. + +2007-12-01 Francois-Xavier Coudert + + * intrinsic/stat.c (stat_i4_sub_0, stat_i8_sub_0): Mark parameter + with unused attribute. + * intrinsics/system_clock.c (system_clock_4, system_clock_8): + Remove unused variable. + * intrinsics/umask.c: Include unistd.h. + +2007-11-30 Jerry DeLisle + + PR libfortran/34291 + * io/list_read.c (read_character): When reading an unquoted string, + return if special characters that could signify the end of the namelist + read are encountered. + +2007-11-29 Steven G. Kargl + + PR libfortran/33583 + * libgfortran/gfortran.map: Add tgammaf, tgamma, lgamma, and lgammaf. + * gfortran.dg/gamma_5.f90: Remove xfail. + +2007-11-16 Francois-Xavier Coudert + + PR libfortran/33583 + PR libfortran/33698 + * intrinsics/c99_functions.c (tgamma, tgammaf, lgamma, lgammaf): + New fallback functions. + * c99_protos.h (tgamma, tgammaf, lgamma, lgammaf): New prototypes. + * configure.ac: Add checks for tgamma, tgammaf, tgammal, lgamma, + lgammaf and lgammal. + * config.h.in: Regenerate. + * configure: Regenerate. + +2007-11-08 Francois-Xavier Coudert + + * mk-kinds-h.sh: Change sed syntax. + +2007-11-06 Jerry DeLisle + + PR libfortran/33985 + * io/transfer.c (finalize_transfer): Revert previous patch. + +2007-11-03 Jerry DeLisle + + PR libfortran/33985 + * io/transfer.c (finalize_transfer): Do not flush for + unformatted STREAM I/O. + +2007-10-27 Tobias Burnus + + * mk-kinds-h.sh: Change LANG=C to LC_ALL=C. + +2007-10-26 Tobias Burnus + + * mk-kinds-h.sh: Add "LANG=C". + +2007-10-26 Francois-Xavier Coudert + + * libgfortran.h (GFC_REAL_*_HUGE, GFC_REAL_*_DIGITS, + GFC_REAL_*_RADIX): Remove. + * mk-kinds-h.sh: Define GFC_REAL_*_HUGE, GFC_REAL_*_DIGITS and + GFC_REAL_*_RADIX. Don't define GFC_REAL_LARGEST_FORMAT and + GFC_REAL_LARGEST. + +2007-10-19 Ben Elliston + + * intrinsics/signal.c (alarm_sub_i4): Mark conditionally unused + parameters with __attribute__ ((unused)). + (alarm_sub_i8): Likewise. + (alarm_sub_int_i4): Likewise. + (alarm_sub_int_i8): Likewise. + +2007-10-18 Francois-Xavier Coudert + Jerry DeLisle + + PR libfortran/33795 + * libgfortran.h: Add unbuffered_preconnected. + * io/unix.c (output_stream): Set stream unbuffered flag if + options.unbuffered_preconnected has been set. + (error_stream): Ditto. + * runtime/environ.c (variable_table): Add to environment variable table + the entry: GFORTRAN_UNBUFFERED_PRECONNECTED. + +2007-10-18 Francois-Xavier Coudert + + PR libfortran/32021 + * runtime/backtrace.c (local_strcasestr): Protect by appropriate + macros. + * runtime/main.c (cleanup): Cast argument to free. + * intrinsics/spread_generic.c (spread_internal): Match runtime_error + arguments and format. + * intrinsics/signal.c (alarm_sub_int_i4, alarm_sub_int_i8): Cast + pointers to avoid warnings. + +2007-10-18 Ben Elliston + + * runtime/environ.c (init_choice): Remove unused function. + (show_choice): Likewise. + (choice): Remove. + (FP_ROUND_NEAREST, FP_ROUND_UP, FP_ROUND_DOWN, FP_ROUND_ZERO): + Remove. + (precision, signal_choices): Remove. + +2007-10-15 Christopher D. Rickett + + PR fortran/32600 + * libgfortran/intrinsics/iso_c_binding.c: Remove c_associated_1 + and c_associated_2. + * libgfortran/intrinsics/iso_c_binding.h: Ditto. + * libgfortran/gfortran.map: Ditto. + +2007-10-15 Jerry DeLisle + + PR libfortran/33055 + * io/inquire.c (inquire_via_unit): If inquiring by unit, check for + an error condition from the IOSTAT variable and set EXIST to false if + there was a bad unit number. + +2007-10-14 Jerry DeLisle + + PR libfortran/33672 + * io/list_read.c (nml_parse_qualifier): Add character specific error + messages. Check for proper form of sub-string qualifiers. Return the + parsed_rank flag indicating a non-zero rank qualifier. + (nml_get_obj_data): Count the instances of non-zero rank qualifiers. + Issue an error if more that one non-zero rank qualifier is found. + +2007-10-04 Jerry DeLisle + + PR libfortran/33253 + * io/list_read.c (read_character): Use line_buffer to scan ahead for + object name or string when no delimiter is found. + +2007-10-04 Francois-Xavier Coudert + + PR libfortran/32021 + * runtime/environ.c (init_mem, show_mem, init_round, show_round, + init_precision, show_precision, init_signal, show_signal): Remove. + (variable_table): Remove GFORTRAN_MEM_INIT, GFORTRAN_MEM_CHECK, + GFORTRAN_SIGHUP, GFORTRAN_SIGINT, GFORTRAN_FPU_ROUND and + GFORTRAN_FPU_PRECISION. + * libgfortran.h (options_t): Remove mem_check, fpu_round, + fpu_precision, sighup, sigint, allocate_init_flag and + allocate_init_value. + +2007-10-02 Jerry DeLisle + + PR libfortran/33253 + * io/list_read.c (read_character): Use DELIM_APOSTROPHE and DELIM_QUOTE + and quote value in check of first character in string. + +2007-10-02 Francois-Xavier Coudert + + PR fortran/33469 + * io/write.c (write_real): Widen the default formats. + +2007-09-28 Jerry DeLisle + + PR libfortran/33400 + * io/list_read.c (next_char): Interpret encountering the end of file the + first time as an end of line. Subsequent reads give EOF error. + +2007-09-27 Jerry DeLisle + + PR libfortran/33421 + * io/list_read.c (read_character): Revert r128057. + +2007-09-21 Bernhard Fischer + + PR fortran/31546 + * (configure.ac): Add --enable-intermodule for onestep build. + * (Makefile.am): Handle onestep build. + * (configure, Makefile.in): Regenerate. + +2007-09-21 Francois-Xavier Coudert + + PR libfortran/26253 + * intrinsics/c99_functions.c (scalbn): Use ldexp if appopriate. + +2007-09-21 Francois-Xavier Coudert + + PR libfortran/23272 + * io/unix.c (id_from_handle, id_from_path, id_from_fd): New + functions. + (compare_file_filename, find_file, find_file0): Use the new + functions above. + +2007-09-21 Francois-Xavier Coudert + + * acinclude.m4 (LIBGFOR_TARGET_ILP32): Remove test. + * configure.ac: Don't call LIBGFOR_TARGET_ILP32. + * configure: Regenerate. + * config.h.in: Regenerate. + +2007-09-15 Francois-Xavier Coudert + + PR libfortran/21185 + * runtime/compile_options.c (set_options): Fix typo. + * runtime/main.c (store_exe_path): If getcwd is not available, + don't use it. + * intrinsics/getcwd.c: Same thing here. + * io/unix.c (fallback_access): New fallback function for access. + (fix_fd): Don't use dup if it's not available. + * configure.ac: Check for dup and getcwd. + * configure: Regenerate. + * config.h.in: Regenerate. + +2007-09-12 Francois-Xavier Coudert + + * io/io.h: Include libgfortran.h first. + +2007-09-11 Francois-Xavier Coudert + + PR libfortran/33386 + * runtime/select.c (select_string): Initialize default_jump. + +2007-09-07 Jerry DeLisle + + PR libfortran/33307 + * io/filepos.c (st_backspace): Don't truncate when already at the end + of the file. + +2007-09-07 Uros Bizjak + + * config/fpu-387.h: Include cpuid.h. + (set_fpu): Use __get_cpuid to check for SSE. + +2007-09-06 Thomas Koenig + + PR fortran/33298 + * intrinsics/spread_generic.c(spread_internal): Enable + bounds checking by comparing extents if the bounds_check + option has been set. If any extent is <=0, return early. + +2007-09-06 David Edelsohn + + * libgfortran.h: Include config.h first. + * io/io.h (struct stream): Rename truncate to trunc. + * io/unix.c (fd_open): Same. + (open_internal): Same. + +2007-09-05 Jerry DeLisle + + PR libfortran/33253 + * io/write.c (nml_write_obj): Set the delimiter correctly before + calling write_character. (namelist_write): Clean up the code a little + and add comments to clarify what its doing. + +2007-09-04 Jerry DeLisle + + PR libfortran/33225 + * io/write.c (stdbool.h): Add include. (sign_t): Move typedef to + new file write_float.def. Include write_float.def. + (extract_real): Delete. (calculate_sign): Delete. + (calculate_exp): Delete. (calculate_G_format): Delete. + (output_float): Delete. (write_float): Delete. + * io/write_float.def (calculate_sign): Added. + (output_float): Refactored to be independent of kind and added to this + file for inclusion. (write_infnan): New function to write "Infinite" + or "NaN" depending on flags passed, independent of kind. + (CALCULATE_EXP): New macro to build kind specific functions. Use it. + (OUTPUT_FLOAT_FMT_G): New macro, likewise. Use it. + (DTOA, DTOAL): Macros to implement "decimal to ascii". + (WRITE_FLOAT): New macro for kind specific write_float functions. + (write_float): Revised function to determine kind and use WRITE_FLOAT + to implement kind specific output. + +2007-09-03 Jerry DeLisle + + PR libfortran/33253 + * io/list_read.c (read_character): Use DELIM_APOSTROPHE and + DELIM_QUOTE in check of first character in string. + +2007-09-03 Francois-Xavier Coudert + + PR fortran/31675 + * libgfortran.h: Include gcc/fortran/libgfortran.h. + Remove M_PI, GFC_MAX_DIMENSIONS, GFC_DTYPE_*, GFC_NUM_RANK_BITS, + error_codes, GFC_STD_*, GFC_FPE_* and unit_convert. + * runtime/environ.c (variable_table): Use GFC_*_UNIT_NUMBER instead + of hardcoded constants. + (do_parse, init_unformatted): Use GFC_CONVERT_* macros instead of + CONVERT_*. + * runtime/string.c (find_option): Use LIBERROR_BAD_OPTION instead + of ERROR_BAD_OPTION. + * runtime/error.c (translate_error, generate_error): Use + LIBERROR_* macros instead of ERROR_*. + * io/file_pos.c (formatted_backspace, unformatted_backspace, + st_backspace, st_rewind, st_flush): Rename macros. + * io/open.c (convert_opt, edit_modes, new_unit, already_open, + st_open): Likewise. + * io/close.c (st_close): Likewise. + * io/list_read.c (next_char, convert_integer, parse_repeat, + read_logical, read_integer, read_character, parse_real, + check_type, list_formatted_read_scalar, namelist_read, + nml_err_ret): Likewise. + * io/read.c (convert_real, read_l, read_decimal, read_radix, + read_f): Likewise. + * io/inquire.c (inquire_via_unit): Likewise. + * io/unit.c (get_internal_unit): Likewise. + * io/transfer.c (read_sf, read_block, read_block_direct, + write_block, write_buf, unformatted_read, unformatted_write, + formatted_transfer_scalar, us_read, us_write, data_transfer_init, + skip_record, next_record_r, write_us_marker, next_record_w_unf, + next_record_w, finalize_transfer, st_read, st_write_done): + Likewise. + * io/format.c (format_error): Likewise. + +2007-08-31 Francois-Xavier Coudert + + * m4/minloc1.m4: Update copyright year and ajust headers order. + * m4/maxloc1.m4: Likewise. + * m4/in_pack.m4: Likewise. + * m4/sum.m4: Likewise. + * m4/fraction.m4: Likewise. + * m4/all.m4: Likewise. + * m4/set_exponent.m4: Likewise. + * m4/transpose.m4: Likewise. + * m4/eoshift1.m4: Likewise. + * m4/spacing.m4: Likewise. + * m4/eoshift3.m4: Likewise. + * m4/minval.m4: Likewise. + * m4/count.m4: Likewise. + * m4/maxval.m4: Likewise. + * m4/exponent.m4: Likewise. + * m4/shape.m4: Likewise. + * m4/head.m4: Likewise. + * m4/cshift1.m4: Likewise. + * m4/minloc0.m4: Likewise. + * m4/nearest.m4: Likewise. + * m4/maxloc0.m4: Likewise. + * m4/pow.m4: Likewise. + * m4/in_unpack.m4: Likewise. + * m4/matmull.m4: Likewise. + * m4/product.m4: Likewise. + * m4/reshape.m4: Likewise. + * m4/any.m4: Likewise. + * m4/rrspacing.m4: Likewise. + * m4/matmul.m4: Likewise. + * runtime/backtrace.c: Likewise. + * runtime/environ.c: Likewise. + * runtime/in_pack_generic.c: Likewise. + * runtime/compile_options.c: Likewise. + * runtime/in_unpack_generic.c: Likewise. + * runtime/main.c: Likewise. + * runtime/stop.c: Likewise. + * runtime/string.c: Likewise. + * runtime/memory.c: Likewise. + * runtime/error.c: Likewise. + * runtime/pause.c: Likewise. + * intrinsics/ierrno.c: Likewise. + * intrinsics/system_clock.c: Likewise. + * intrinsics/cshift0.c: Likewise. + * intrinsics/unlink.c: Likewise. + * intrinsics/ctime.c: Likewise. + * intrinsics/etime.c: Likewise. + * intrinsics/cpu_time.c: Likewise. + * intrinsics/malloc.c: Likewise. + * intrinsics/hostnm.c: Likewise. + * intrinsics/sleep.c: Likewise. + * intrinsics/exit.c: Likewise. + * intrinsics/perror.c: Likewise. + * intrinsics/transpose_generic.c: Likewise. + * intrinsics/pack_generic.c: Likewise. + * intrinsics/spread_generic.c: Likewise. + * intrinsics/stat.c: Likewise. + * intrinsics/string_intrinsics.c: Likewise. + * intrinsics/getcwd.c: Likewise. + * intrinsics/date_and_time.c: Likewise. + * intrinsics/unpack_generic.c: Likewise. + * intrinsics/move_alloc.c: Likewise. + * intrinsics/getlog.c: Likewise. + * intrinsics/eoshift0.c: Likewise. + * intrinsics/eoshift2.c: Likewise. + * intrinsics/reshape_generic.c: Likewise. + * intrinsics/system.c: Likewise. + * intrinsics/iso_c_binding.c: Likewise. + * intrinsics/env.c: Likewise. + * intrinsics/kill.c: Likewise. + * intrinsics/reshape_packed.c: Likewise. + * intrinsics/time.c: Likewise. + * intrinsics/gerror.c: Likewise. + * intrinsics/access.c: Likewise. + * intrinsics/fnum.c: Likewise. + * intrinsics/abort.c: Likewise. + * intrinsics/rename.c: Likewise. + * intrinsics/signal.c: Likewise. + * intrinsics/symlnk.c: Likewise. + * intrinsics/random.c: Likewise. + * intrinsics/umask.c: Likewise. + * intrinsics/getXid.c: Likewise. + * intrinsics/rand.c: Likewise. + * intrinsics/chdir.c: Likewise. + * intrinsics/chmod.c: Likewise. + * intrinsics/clock.c: Likewise. + * intrinsics/args.c: Likewise. + * intrinsics/link.c: Likewise. + * c99_protos.h: Likewise. + * config/fpu-387.h: Likewise. + * config/fpu-aix.h: Likewise. + * config/fpu-sysv.h: Likewise. + * config/fpu-generic.h: Likewise. + * config/fpu-glibc.h: Likewise. + * io/file_pos.c: Likewise. + * io/open.c: Likewise. + * io/size_from_kind.c: Likewise. + * io/close.c: Likewise. + * io/list_read.c: Likewise. + * io/read.c: Likewise. + * io/inquire.c: Likewise. + * io/unit.c: Likewise. + * io/unix.c: Likewise. + * io/transfer.c: Likewise. + * io/intrinsics.c: Likewise. + * io/format.c: Likewise. + * io/lock.c: Likewise. + * io/write.c: Likewise. + * io/write_float.def: Likewise. + * fmain.c: Likewise. + * generated/minval_r8.c: Regenerate. + * generated/minloc1_16_r16.c: Regenerate. + * generated/maxloc1_4_r8.c: Regenerate. + * generated/sum_i8.c: Regenerate. + * generated/eoshift3_4.c: Regenerate. + * generated/transpose_c8.c: Regenerate. + * generated/any_l16.c: Regenerate. + * generated/eoshift1_8.c: Regenerate. + * generated/pow_r8_i8.c: Regenerate. + * generated/reshape_r16.c: Regenerate. + * generated/pow_i4_i16.c: Regenerate. + * generated/maxval_i2.c: Regenerate. + * generated/product_r4.c: Regenerate. + * generated/maxloc1_8_i4.c: Regenerate. + * generated/exponent_r16.c: Regenerate. + * generated/maxloc0_4_r4.c: Regenerate. + * generated/fraction_r16.c: Regenerate. + * generated/in_unpack_i8.c: Regenerate. + * generated/matmul_r8.c: Regenerate. + * generated/product_i2.c: Regenerate. + * generated/fraction_r4.c: Regenerate. + * generated/minloc0_4_r16.c: Regenerate. + * generated/reshape_c4.c: Regenerate. + * generated/minloc0_4_i1.c: Regenerate. + * generated/maxloc0_4_r16.c: Regenerate. + * generated/maxloc0_4_i2.c: Regenerate. + * generated/minloc1_8_r16.c: Regenerate. + * generated/maxloc1_8_r16.c: Regenerate. + * generated/set_exponent_r8.c: Regenerate. + * generated/in_unpack_i16.c: Regenerate. + * generated/transpose_c16.c: Regenerate. + * generated/maxloc0_8_i8.c: Regenerate. + * generated/pow_c4_i8.c: Regenerate. + * generated/sum_r16.c: Regenerate. + * generated/sum_i1.c: Regenerate. + * generated/minloc1_4_r8.c: Regenerate. + * generated/transpose_r10.c: Regenerate. + * generated/pow_i8_i4.c: Regenerate. + * generated/maxloc1_16_r16.c: Regenerate. + * generated/minloc1_16_i4.c: Regenerate. + * generated/maxloc1_16_i4.c: Regenerate. + * generated/minloc0_16_i8.c: Regenerate. + * generated/maxloc0_16_i8.c: Regenerate. + * generated/nearest_r8.c: Regenerate. + * generated/spacing_r16.c: Regenerate. + * generated/transpose_i8.c: Regenerate. + * generated/count_16_l16.c: Regenerate. + * generated/maxval_r16.c: Regenerate. + * generated/count_8_l8.c: Regenerate. + * generated/product_c10.c: Regenerate. + * generated/minloc1_8_i4.c: Regenerate. + * generated/minloc0_16_i16.c: Regenerate. + * generated/matmul_r16.c: Regenerate. + * generated/eoshift1_16.c: Regenerate. + * generated/minloc0_4_r4.c: Regenerate. + * generated/pow_c16_i16.c: Regenerate. + * generated/set_exponent_r10.c: Regenerate. + * generated/pow_i16_i16.c: Regenerate. + * generated/product_c4.c: Regenerate. + * generated/sum_r4.c: Regenerate. + * generated/pow_c16_i4.c: Regenerate. + * generated/rrspacing_r10.c: Regenerate. + * generated/in_pack_c16.c: Regenerate. + * generated/minloc0_4_i2.c: Regenerate. + * generated/maxloc0_8_i1.c: Regenerate. + * generated/reshape_i4.c: Regenerate. + * generated/minloc0_8_i8.c: Regenerate. + * generated/matmul_c8.c: Regenerate. + * generated/spacing_r4.c: Regenerate. + * generated/in_pack_c4.c: Regenerate. + * generated/all_l16.c: Regenerate. + * generated/minloc1_16_r10.c: Regenerate. + * generated/sum_i2.c: Regenerate. + * generated/minloc0_16_i1.c: Regenerate. + * generated/reshape_c16.c: Regenerate. + * generated/maxloc0_16_i1.c: Regenerate. + * generated/maxloc1_8_r8.c: Regenerate. + * generated/minval_i16.c: Regenerate. + * generated/reshape_r10.c: Regenerate. + * generated/exponent_r10.c: Regenerate. + * generated/maxval_i4.c: Regenerate. + * generated/any_l4.c: Regenerate. + * generated/minval_i8.c: Regenerate. + * generated/maxloc1_4_i8.c: Regenerate. + * generated/fraction_r10.c: Regenerate. + * generated/maxloc0_16_i16.c: Regenerate. + * generated/shape_i4.c: Regenerate. + * generated/pow_r16_i8.c: Regenerate. + * generated/maxloc0_8_r4.c: Regenerate. + * generated/rrspacing_r8.c: Regenerate. + * generated/pow_c10_i4.c: Regenerate. + * generated/minloc1_4_i16.c: Regenerate. + * generated/minloc0_4_r10.c: Regenerate. + * generated/maxloc1_4_i16.c: Regenerate. + * generated/minloc0_8_i16.c: Regenerate. + * generated/maxloc0_4_r10.c: Regenerate. + * generated/maxloc0_8_i16.c: Regenerate. + * generated/minloc1_8_r10.c: Regenerate. + * generated/product_i4.c: Regenerate. + * generated/minloc0_16_r4.c: Regenerate. + * generated/sum_c16.c: Regenerate. + * generated/maxloc1_8_r10.c: Regenerate. + * generated/maxloc0_16_r4.c: Regenerate. + * generated/transpose_c10.c: Regenerate. + * generated/minloc1_16_r8.c: Regenerate. + * generated/minloc0_8_i1.c: Regenerate. + * generated/maxloc0_4_i4.c: Regenerate. + * generated/transpose_r4.c: Regenerate. + * generated/maxloc1_16_r8.c: Regenerate. + * generated/pow_i16_i8.c: Regenerate. + * generated/cshift1_4.c: Regenerate. + * generated/maxloc0_8_i2.c: Regenerate. + * generated/sum_r10.c: Regenerate. + * generated/nearest_r16.c: Regenerate. + * generated/sum_c4.c: Regenerate. + * generated/maxloc1_16_r10.c: Regenerate. + * generated/count_4_l16.c: Regenerate. + * generated/pow_c8_i8.c: Regenerate. + * generated/matmul_i8.c: Regenerate. + * generated/in_pack_i4.c: Regenerate. + * generated/pow_i4_i8.c: Regenerate. + * generated/minloc0_16_i2.c: Regenerate. + * generated/minloc1_8_r8.c: Regenerate. + * generated/maxloc0_16_i2.c: Regenerate. + * generated/exponent_r4.c: Regenerate. + * generated/spacing_r10.c: Regenerate. + * generated/matmul_c16.c: Regenerate. + * generated/pow_c4_i16.c: Regenerate. + * generated/maxval_r10.c: Regenerate. + * generated/count_4_l4.c: Regenerate. + * generated/shape_i16.c: Regenerate. + * generated/minval_i1.c: Regenerate. + * generated/maxloc1_4_i1.c: Regenerate. + * generated/matmul_r10.c: Regenerate. + * generated/minloc1_4_i8.c: Regenerate. + * generated/pow_r10_i8.c: Regenerate. + * generated/minloc0_8_r4.c: Regenerate. + * generated/in_unpack_c4.c: Regenerate. + * generated/matmul_l4.c: Regenerate. + * generated/product_i16.c: Regenerate. + * generated/minloc0_16_r16.c: Regenerate. + * generated/reshape_r8.c: Regenerate. + * generated/pow_r10_i16.c: Regenerate. + * generated/all_l4.c: Regenerate. + * generated/in_pack_c10.c: Regenerate. + * generated/minloc0_4_i4.c: Regenerate. + * generated/minloc0_8_i2.c: Regenerate. + * generated/matmul_i1.c: Regenerate. + * generated/reshape_c10.c: Regenerate. + * generated/minval_r4.c: Regenerate. + * generated/maxloc1_4_r4.c: Regenerate. + * generated/pow_r8_i16.c: Regenerate. + * generated/sum_i4.c: Regenerate. + * generated/maxval_r8.c: Regenerate. + * generated/count_16_l8.c: Regenerate. + * generated/transpose_c4.c: Regenerate. + * generated/eoshift1_4.c: Regenerate. + * generated/eoshift3_8.c: Regenerate. + * generated/minval_r16.c: Regenerate. + * generated/minloc1_4_i1.c: Regenerate. + * generated/minval_i2.c: Regenerate. + * generated/maxloc1_4_i2.c: Regenerate. + * generated/pow_i8_i16.c: Regenerate. + * generated/product_r8.c: Regenerate. + * generated/maxloc1_8_i8.c: Regenerate. + * generated/maxloc0_4_r8.c: Regenerate. + * generated/maxloc0_16_r16.c: Regenerate. + * generated/in_unpack_i4.c: Regenerate. + * generated/matmul_r4.c: Regenerate. + * generated/sum_c10.c: Regenerate. + * generated/minloc1_4_r16.c: Regenerate. + * generated/fraction_r8.c: Regenerate. + * generated/maxloc1_4_r16.c: Regenerate. + * generated/set_exponent_r4.c: Regenerate. + * generated/minloc0_8_r16.c: Regenerate. + * generated/in_unpack_c16.c: Regenerate. + * generated/reshape_c8.c: Regenerate. + * generated/maxloc0_8_r16.c: Regenerate. + * generated/nearest_r10.c: Regenerate. + * generated/maxloc0_8_i4.c: Regenerate. + * generated/pow_c4_i4.c: Regenerate. + * generated/matmul_i2.c: Regenerate. + * generated/minloc1_4_r4.c: Regenerate. + * generated/transpose_i16.c: Regenerate. + * generated/matmul_c10.c: Regenerate. + * generated/minloc0_16_i4.c: Regenerate. + * generated/maxloc0_16_i4.c: Regenerate. + * generated/pow_i8_i8.c: Regenerate. + * generated/nearest_r4.c: Regenerate. + * generated/minloc1_16_i8.c: Regenerate. + * generated/maxloc1_16_i8.c: Regenerate. + * generated/transpose_i4.c: Regenerate. + * generated/count_8_l4.c: Regenerate. + * generated/minloc1_4_i2.c: Regenerate. + * generated/matmul_l16.c: Regenerate. + * generated/maxloc1_8_i1.c: Regenerate. + * generated/minloc0_16_r10.c: Regenerate. + * generated/minloc1_8_i8.c: Regenerate. + * generated/minloc0_4_r8.c: Regenerate. + * generated/product_r16.c: Regenerate. + * generated/product_c8.c: Regenerate. + * generated/pow_r16_i16.c: Regenerate. + * generated/sum_r8.c: Regenerate. + * generated/pow_c16_i8.c: Regenerate. + * generated/in_pack_i16.c: Regenerate. + * generated/minloc0_8_i4.c: Regenerate. + * generated/matmul_c4.c: Regenerate. + * generated/minloc1_16_i16.c: Regenerate. + * generated/reshape_i8.c: Regenerate. + * generated/spacing_r8.c: Regenerate. + * generated/in_pack_c8.c: Regenerate. + * generated/maxloc1_8_r4.c: Regenerate. + * generated/minloc1_16_i1.c: Regenerate. + * generated/maxloc1_16_i1.c: Regenerate. + * generated/reshape_i16.c: Regenerate. + * generated/minval_r10.c: Regenerate. + * generated/pow_r4_i8.c: Regenerate. + * generated/minloc1_8_i1.c: Regenerate. + * generated/minval_i4.c: Regenerate. + * generated/maxloc1_4_i4.c: Regenerate. + * generated/maxloc1_8_i2.c: Regenerate. + * generated/maxval_i8.c: Regenerate. + * generated/eoshift3_16.c: Regenerate. + * generated/any_l8.c: Regenerate. + * generated/maxloc0_16_r10.c: Regenerate. + * generated/rrspacing_r4.c: Regenerate. + * generated/shape_i8.c: Regenerate. + * generated/maxloc0_8_r8.c: Regenerate. + * generated/minloc0_4_i16.c: Regenerate. + * generated/maxloc0_4_i16.c: Regenerate. + * generated/minloc1_4_r10.c: Regenerate. + * generated/minloc1_8_i16.c: Regenerate. + * generated/pow_c10_i8.c: Regenerate. + * generated/maxloc1_4_r10.c: Regenerate. + * generated/maxloc1_8_i16.c: Regenerate. + * generated/in_unpack_c10.c: Regenerate. + * generated/minloc0_8_r10.c: Regenerate. + * generated/maxloc0_8_r10.c: Regenerate. + * generated/minloc1_16_r4.c: Regenerate. + * generated/maxloc1_16_r4.c: Regenerate. + * generated/minloc0_16_r8.c: Regenerate. + * generated/pow_i16_i4.c: Regenerate. + * generated/product_i8.c: Regenerate. + * generated/maxloc0_16_r8.c: Regenerate. + * generated/sum_i16.c: Regenerate. + * generated/maxloc0_4_i8.c: Regenerate. + * generated/transpose_r8.c: Regenerate. + * generated/cshift1_8.c: Regenerate. + * generated/maxloc1_16_i16.c: Regenerate. + * generated/matmul_i4.c: Regenerate. + * generated/pow_c8_i4.c: Regenerate. + * generated/pow_i4_i4.c: Regenerate. + * generated/minloc1_8_r4.c: Regenerate. + * generated/sum_c8.c: Regenerate. + * generated/count_8_l16.c: Regenerate. + * generated/minloc1_16_i2.c: Regenerate. + * generated/maxloc1_16_i2.c: Regenerate. + * generated/in_pack_i8.c: Regenerate. + * generated/transpose_r16.c: Regenerate. + * generated/maxval_i16.c: Regenerate. + * generated/exponent_r8.c: Regenerate. + * generated/matmul_i16.c: Regenerate. + * generated/count_4_l8.c: Regenerate. + * generated/pow_c8_i16.c: Regenerate. + * generated/maxval_i1.c: Regenerate. + * generated/minloc1_4_i4.c: Regenerate. + * generated/minloc1_8_i2.c: Regenerate. + * generated/pow_c10_i16.c: Regenerate. + * generated/product_c16.c: Regenerate. + * generated/reshape_r4.c: Regenerate. + * generated/in_unpack_c8.c: Regenerate. + * generated/minloc0_8_r8.c: Regenerate. + * generated/matmul_l8.c: Regenerate. + * generated/product_r10.c: Regenerate. + * generated/set_exponent_r16.c: Regenerate. + * generated/cshift1_16.c: Regenerate. + * generated/product_i1.c: Regenerate. + * generated/all_l8.c: Regenerate. + * generated/maxloc0_4_i1.c: Regenerate. + * generated/rrspacing_r16.c: Regenerate. + * generated/minloc0_4_i8.c: Regenerate. + * generated/pow_r4_i16.c: Regenerate. + * generated/count_16_l4.c: Regenerate. + * generated/maxval_r4.c: Regenerate. + +2007-08-30 Jerry DeLisle + + PR libfortran/33225 + * io/write.c: Revert changes from patch of 2007-08-27. + * io/write_float.def: Remove file, reverting addition. + +2007-08-29 Francois-Xavier Coudert + + * runtime/memory.c (internal_realloc, allocate, allocate_array, + deallocate): Remove functions. + * gfortran.map (_gfortran_allocate, _gfortran_allocate_array, + _gfortran_deallocate, _gfortran_internal_realloc): Remove symbols. + * libgfortran.h (error_codes): Add comment. + +2007-08-28 Jerry DeLisle + + PR libfortran/33055 + Revert previous patch. + +2007-08-27 Jerry DeLisle + + * io/write.c (stdbool.h): Add include. (sign_t): Move typedef to + new file write_float.def. Include write_float.def. + (extract_real): Delete. (calculate_sign): Delete. + (calculate_exp): Delete. (calculate_G_format): Delete. + (output_float): Delete. (write_float): Delete. + * io/write_float.def (calculate_sign): Added. + (output_float): Refactored to be independent of kind and added to this + file for inclusion. (write_infnan): New function to write "Infinite" + or "NaN" depending on flags passed, independent of kind. + (CALCULATE_EXP): New macro to build kind specific functions. Use it. + (OUTPUT_FLOAT_FMT_G): New macro, likewise. Use it. + (DTOA, DTOAL): Macros to implement "decimal to ascii". + (WRITE_FLOAT): New macro for kind specific write_float functions. + (write_float): Revised function to determine kind and use WRITE_FLOAT + to implement kind specific output. + +2007-08-26 Jerry DeLisle + + PR libfortran/33055 + * io/inquire.c (inquire_via_unit): If inquiring by unit, check for + an error condition from the IOSTAT variable and set EXIST to false if + there was a bad unit number. + +2007-08-24 Thomas Koenig + + PR fortran/32972 + * libgfortran.h: Remove GFOR_POINTER_L8_TO_L4 macro. + Add GFOR_POINTER_TO_L1 macro. + * m4/iforeach.m4(`m'name`'rtype_qual`_'atype_code): + Change argument 'mask' to gfc_array_l1. Adjust prototype. + Change mask pointer to GFC_LOGICAL_1. Multiply strides + by kind of mask + * m4/ifunction.m4: Likewise. + * intrinsics/pack_generic.c(pack_internal): Likewise. + * intrinsics/unpack_generic.c(unpack_internal): Likewise. + * m4/matmull.m4: Switch to GFC_LOGICAL_1. Multiply strides by + kind of logical arguments a and b. + * generated/matmul_l16.c: Regenerated. + * generated/matmul_l4.c: Regenerated. + * generated/matmul_l8.c: Regenerated. + * generated/maxloc0_16_i1.c: Regenerated. + * generated/maxloc0_16_i16.c: Regenerated. + * generated/maxloc0_16_i2.c: Regenerated. + * generated/maxloc0_16_i4.c: Regenerated. + * generated/maxloc0_16_i8.c: Regenerated. + * generated/maxloc0_16_r10.c: Regenerated. + * generated/maxloc0_16_r16.c: Regenerated. + * generated/maxloc0_16_r4.c: Regenerated. + * generated/maxloc0_16_r8.c: Regenerated. + * generated/maxloc0_4_i1.c: Regenerated. + * generated/maxloc0_4_i16.c: Regenerated. + * generated/maxloc0_4_i2.c: Regenerated. + * generated/maxloc0_4_i4.c: Regenerated. + * generated/maxloc0_4_i8.c: Regenerated. + * generated/maxloc0_4_r10.c: Regenerated. + * generated/maxloc0_4_r16.c: Regenerated. + * generated/maxloc0_4_r4.c: Regenerated. + * generated/maxloc0_4_r8.c: Regenerated. + * generated/maxloc0_8_i1.c: Regenerated. + * generated/maxloc0_8_i16.c: Regenerated. + * generated/maxloc0_8_i2.c: Regenerated. + * generated/maxloc0_8_i4.c: Regenerated. + * generated/maxloc0_8_i8.c: Regenerated. + * generated/maxloc0_8_r10.c: Regenerated. + * generated/maxloc0_8_r16.c: Regenerated. + * generated/maxloc0_8_r4.c: Regenerated. + * generated/maxloc0_8_r8.c: Regenerated. + * generated/maxloc1_16_i1.c: Regenerated. + * generated/maxloc1_16_i16.c: Regenerated. + * generated/maxloc1_16_i2.c: Regenerated. + * generated/maxloc1_16_i4.c: Regenerated. + * generated/maxloc1_16_i8.c: Regenerated. + * generated/maxloc1_16_r10.c: Regenerated. + * generated/maxloc1_16_r16.c: Regenerated. + * generated/maxloc1_16_r4.c: Regenerated. + * generated/maxloc1_16_r8.c: Regenerated. + * generated/maxloc1_4_i1.c: Regenerated. + * generated/maxloc1_4_i16.c: Regenerated. + * generated/maxloc1_4_i2.c: Regenerated. + * generated/maxloc1_4_i4.c: Regenerated. + * generated/maxloc1_4_i8.c: Regenerated. + * generated/maxloc1_4_r10.c: Regenerated. + * generated/maxloc1_4_r16.c: Regenerated. + * generated/maxloc1_4_r4.c: Regenerated. + * generated/maxloc1_4_r8.c: Regenerated. + * generated/maxloc1_8_i1.c: Regenerated. + * generated/maxloc1_8_i16.c: Regenerated. + * generated/maxloc1_8_i2.c: Regenerated. + * generated/maxloc1_8_i4.c: Regenerated. + * generated/maxloc1_8_i8.c: Regenerated. + * generated/maxloc1_8_r10.c: Regenerated. + * generated/maxloc1_8_r16.c: Regenerated. + * generated/maxloc1_8_r4.c: Regenerated. + * generated/maxloc1_8_r8.c: Regenerated. + * generated/maxval_i1.c: Regenerated. + * generated/maxval_i16.c: Regenerated. + * generated/maxval_i2.c: Regenerated. + * generated/maxval_i4.c: Regenerated. + * generated/maxval_i8.c: Regenerated. + * generated/maxval_r10.c: Regenerated. + * generated/maxval_r16.c: Regenerated. + * generated/maxval_r4.c: Regenerated. + * generated/maxval_r8.c: Regenerated. + * generated/minloc0_16_i1.c: Regenerated. + * generated/minloc0_16_i16.c: Regenerated. + * generated/minloc0_16_i2.c: Regenerated. + * generated/minloc0_16_i4.c: Regenerated. + * generated/minloc0_16_i8.c: Regenerated. + * generated/minloc0_16_r10.c: Regenerated. + * generated/minloc0_16_r16.c: Regenerated. + * generated/minloc0_16_r4.c: Regenerated. + * generated/minloc0_16_r8.c: Regenerated. + * generated/minloc0_4_i1.c: Regenerated. + * generated/minloc0_4_i16.c: Regenerated. + * generated/minloc0_4_i2.c: Regenerated. + * generated/minloc0_4_i4.c: Regenerated. + * generated/minloc0_4_i8.c: Regenerated. + * generated/minloc0_4_r10.c: Regenerated. + * generated/minloc0_4_r16.c: Regenerated. + * generated/minloc0_4_r4.c: Regenerated. + * generated/minloc0_4_r8.c: Regenerated. + * generated/minloc0_8_i1.c: Regenerated. + * generated/minloc0_8_i16.c: Regenerated. + * generated/minloc0_8_i2.c: Regenerated. + * generated/minloc0_8_i4.c: Regenerated. + * generated/minloc0_8_i8.c: Regenerated. + * generated/minloc0_8_r10.c: Regenerated. + * generated/minloc0_8_r16.c: Regenerated. + * generated/minloc0_8_r4.c: Regenerated. + * generated/minloc0_8_r8.c: Regenerated. + * generated/minloc1_16_i1.c: Regenerated. + * generated/minloc1_16_i16.c: Regenerated. + * generated/minloc1_16_i2.c: Regenerated. + * generated/minloc1_16_i4.c: Regenerated. + * generated/minloc1_16_i8.c: Regenerated. + * generated/minloc1_16_r10.c: Regenerated. + * generated/minloc1_16_r16.c: Regenerated. + * generated/minloc1_16_r4.c: Regenerated. + * generated/minloc1_16_r8.c: Regenerated. + * generated/minloc1_4_i1.c: Regenerated. + * generated/minloc1_4_i16.c: Regenerated. + * generated/minloc1_4_i2.c: Regenerated. + * generated/minloc1_4_i4.c: Regenerated. + * generated/minloc1_4_i8.c: Regenerated. + * generated/minloc1_4_r10.c: Regenerated. + * generated/minloc1_4_r16.c: Regenerated. + * generated/minloc1_4_r4.c: Regenerated. + * generated/minloc1_4_r8.c: Regenerated. + * generated/minloc1_8_i1.c: Regenerated. + * generated/minloc1_8_i16.c: Regenerated. + * generated/minloc1_8_i2.c: Regenerated. + * generated/minloc1_8_i4.c: Regenerated. + * generated/minloc1_8_i8.c: Regenerated. + * generated/minloc1_8_r10.c: Regenerated. + * generated/minloc1_8_r16.c: Regenerated. + * generated/minloc1_8_r4.c: Regenerated. + * generated/minloc1_8_r8.c: Regenerated. + * generated/minval_i1.c: Regenerated. + * generated/minval_i16.c: Regenerated. + * generated/minval_i2.c: Regenerated. + * generated/minval_i4.c: Regenerated. + * generated/minval_i8.c: Regenerated. + * generated/minval_r10.c: Regenerated. + * generated/minval_r16.c: Regenerated. + * generated/minval_r4.c: Regenerated. + * generated/minval_r8.c: Regenerated. + * generated/product_c10.c: Regenerated. + * generated/product_c16.c: Regenerated. + * generated/product_c4.c: Regenerated. + * generated/product_c8.c: Regenerated. + * generated/product_i1.c: Regenerated. + * generated/product_i16.c: Regenerated. + * generated/product_i2.c: Regenerated. + * generated/product_i4.c: Regenerated. + * generated/product_i8.c: Regenerated. + * generated/product_r10.c: Regenerated. + * generated/product_r16.c: Regenerated. + * generated/product_r4.c: Regenerated. + * generated/product_r8.c: Regenerated. + * generated/sum_c10.c: Regenerated. + * generated/sum_c16.c: Regenerated. + * generated/sum_c4.c: Regenerated. + * generated/sum_c8.c: Regenerated. + * generated/sum_i1.c: Regenerated. + * generated/sum_i16.c: Regenerated. + * generated/sum_i2.c: Regenerated. + * generated/sum_i4.c: Regenerated. + * generated/sum_i8.c: Regenerated. + * generated/sum_r10.c: Regenerated. + * generated/sum_r16.c: Regenerated. + * generated/sum_r4.c: Regenerated. + * generated/sum_r8.c: Regenerated. + +2007-08-23 Francois-Xavier Coudert + + PR libfortran/23138 + * acinclude.m4 (LIBGFOR_CHECK_MINGW_SNPRINTF): New check. + * configure.ac: Use LIBGFOR_CHECK_MINGW_SNPRINTF. + * libgfortran.h: If HAVE_MINGW_SNPRINTF is true, use __mingw_snprintf + instead of snprintf. + * config.h.in: Regenerate. + * configure: Regenerate. + +2007-08-22 Bernhard Fischer + + * libgfortran/Makefile.am (AM_CPPFLAGS): Commentary typo fix. + +2007-08-17 Francois-Xavier Coudert + + PR fortran/33079 + * intrinsics/string_intrinsics.c (string_trim, string_minmax): Fix + the zero-length result case. + +2007-08-15 Francois-Xavier Coudert + + PR fortran/33077 + * intrinsics/random.c (random_seed_i8): Fix code logic. + +2007-08-13 Danny Smith + + * acinclude.m4 (GTHREAD_USE_WEAK) Define to 0 for mingw32. + * configure: Regenerate. + +2007-08-12 Francois-Xavier Coudert + + PR fortran/30964 + PR fortran/33054 + * intrinsics/random.c (random_seed): Rename into random_seed_i4. + (random_seed_i8): New function. + * gfortran.map (GFORTRAN_1.0): Remove _gfortran_random_seed, + add _gfortran_random_seed_i4 and _gfortran_random_seed_i8. + * libgfortran.h (iexport_proto): Replace random_seed by + random_seed_i4 and random_seed_i8. + * runtime/main.c (init): Call the new random_seed_i4. + +2007-08-11 Francois-Xavier Coudert + Tobias Burnus + + PR fortran/31189 + * runtime/backtrace.c (show_backtrace): Skip _gfortrani_handler + when displaying backtrace. + * runtime/compile_options.c: Include . + (handler): New function. + (set_options): Set signal handlers for backtrace. + * libgfortran.h (handler): Add prototype. + +2007-08-11 Francois-Xavier Coudert + + * intrinsics/string_intrinsics.c (compare_string): Return an int. + * libgfortran.h (compare_string): Likewise. + +2007-08-10 Francois-Xavier Coudert + + PR fortran/31270 + * runtime/error.c (runtime_error_at): Add a variable number of + arguments. + * libgfortran.h (runtime_error_at): Update prototype. + +2007-08-10 Francois-Xavier Coudert + + PR fortran/32933 + * intrinsics/associated.c: Change return type of associated into + a C int. + +2007-08-10 Jerry DeLisle + + PR libfortran/33039 + * io/list_read.c (find_nml_name): Check for a space after a namelist + name match. + +2007-08-09 Tobias Burnus + + PR fortran/32987 + * io/format.c (next_char): Treat '\t' as ' ' in format specification. + +2007-08-06 Francois-Xavier Coudert + + PR fortran/30947 + * intrinsics/signal.c: Create specific versions of alarm_sub and + alarm_sub_int according to the integer kind of the last argument. + * gfortran.map (GFORTRAN_1.0): Remove _gfortran_alarm_sub and + _gfortran_alarm_sub_int, add _gfortran_alarm_sub_i4, + _gfortran_alarm_sub_i8, _gfortran_alarm_sub_int_i4 and + _gfortran_alarm_sub_int_i8. + +2007-08-06 Francois-Xavier Coudert + + PR fortran/29828 + * intrinsics/string_intrinsics.c (string_minmax): New function + and prototype. + * gfortran.map (GFORTRAN_1.0): Add _gfortran_string_minmax + +2007-08-05 Francois-Xavier Coudert + + PR fortran/31202 + * intrinsics/c99_functions.c (roundl): Provide fallback + implementation for systems without ceill. + * c99_protos.h (roundl): Define prototype in all cases. + +2007-08-03 Thomas Koenig + + PR libfortran/32977 + * io/unix.c: If there is no vsnprintf, use vsprintf and issue + a fatal error when a buffer overrun occurs. + +2007-08-03 Francois-Xavier Coudert + + PR fortran/31202 + * intrinsics/c99_functions.c (roundl,lroundf,lround,lroundl, + llroundf,llround,llroundl): New functions. + * c99_protos.h (roundl,lroundf,lround,lroundl,llroundf,llround, + llroundl): New prototypes. + * configure.ac: Check for lroundf, lround, lroundl, llroundf, + llround and llroundl. + * configure: Regenerate. + * Makefile.in: Regenerate. + * config.h.in: Regenerate. + +2007-07-30 Francois-Xavier Coudert + + * libgfortran.h: Include . + +2007-07-29 Thomas Koenig + + PR libfortran/32858 + PR libfortran/30814 + * configure.ac: Added checks for presence of stdio.h and + stdarg.h. Test presence of vsnprintf(). + * configure: Regenerated. + * config.h.in: Regenerated. + * libgfortran.h: Include . Add printf attribute to + prototype of runtime_error. Remove prototype for st_sprintf. + Add prototype for st_vprintf. + * runtime/main.c (store_exec_path): Replace st_sprintf by sprintf. + * runtime/error.c (st_sprintf): Remove. + (runtime_error): Rewrite as a variadic function. Call + st_vprintf(). + * intrinsics/pack_generic.c: Output extents of LHS and RHS for + bounds error. + * io/open.c (new_unit): Replace st_sprintf by sprintf. + * io/list_read.c (convert_integer): Likewise. + (parse_repeat): Likewise. + (read_logical): Likewise. + (read_character): Likewise. + (parse_real): Likewise. + (read_real): Likewise. + (check_type): Likewise. + (nml_parse_qualifyer): Likewise. + (nml_read_obj): Likewise. + (nml_get_ojb_data): Likewise. + * io/unix.c (init_error_stream): Remove. + (tempfile): Replace st_sprintf by sprintf. + (st_vprintf): New function. + (st_printf): Rewrite to call st_vprintf. + * io/transfer.c (require_type): Replace st_sprintf by sprintf. + * io/format.c (format_error): Likewise. + * io/write.c (nml_write_obj): Likewise. + +2007-07-27 Janne Blomqvist + + * io/transfer.c (st_set_nml_var_dim): Use index_type instead of + GFC_INTEGER_4 for array descriptor triplets. + +2007-07-27 Francois-Xavier Coudert + + * io/unix.c (stream_ttyname): Mark argument as potentialy unused. + +2007-07-27 Francois-Xavier Coudert + + PR fortran/32035 + * runtime/select.c (select_string): Adjust prototype and function + so that the return value is an integer, not a pointer. + +2007-07-24 Tobias Burnus + + * libgfortran.h: Add bounds_check to compile_options_t. + +2007-07-24 Thomas Koenig + + PR fortran/30814 + * libgfortran.h: Add bounds_check to compile_options_t. + * runtime/compile_options.c (set_options): Add handling + of compile_options.bounds_check. + * intrinsics/pack_generic.c (pack_internal): Also determine + the number of elements if compile_options.bounds_check is + true. Raise runtime error if a different array shape is + detected. + +2007-07-23 Christopher D. Rickett + + PR fortran/32600 + * intrinsics/iso_c_binding.c (c_funloc): Remove. + * intrinsics/iso_c_binding.h: Remove c_funloc. + * gfortran.map: Ditto. + +2007-07-22 Jerry DeLisle + + * io/read.c (convert_real): Generate error only on EINVAL. + +2007-07-21 Christopher D. Rickett + + PR fortran/32627 + * libgfortran/intrinsics/iso_c_generated_procs.c: Add c_f_pointer + for character/string arguments. + * libgfortran/intrinsic/iso_c_binding.c (c_f_pointer_u0): Allow + the optional SHAPE arg to be any valid integer kind. + * libgfortran/gfortran.map: Add c_f_pointer_s0. + * libgfortran/mk-kinds-h.sh: Save smallest integer kind as default + character kind. + * libgfortran/intrinsics/iso_c_generated_procs.c: Add versions of + c_f_pointer for complex and logical types. + * libgfortran/gfortran.map: Add c_f_pointer versions for logical + and complex types. + +2007-07-19 Christopher D. Rickett + + PR fortran/32600 + * libgfortran/intrinsics/iso_c_binding.c: Remove C_LOC. + * libgfortran/intrinsics/iso_c_binding.h: Ditto. + * libgfortran/gfortran.map: Ditto. + +2007-07-15 Jerry DeLisle + Francois-Xavier Coudert + + PR fortran/32611 + * runtime/compile_options.c (set_std): Remove. + (set_options): New function. + (init_compile_options): Add initialization for -fsign-zero option. + * gfortran.map (GFORTRAN_1.0): Rename _gfortran_set_std into + _gfortran_set_options. + * libgfortran.h (compile_options_t): Add sign_zero field. + * io/write.c (output_float): Use the sign bit of the value to determine + if a negative sign should be emitted for zero values. Do not emit the + negative sign for zero if -fno-sign-zero was set during compile. + +2007-07-14 Jerry DeLisle + + PR libgfortran/32752 + * io/unix.c (unix_stream): Move buffer pointer adjacent to + small_buffer. + * io/transfer.c (formatted_transfer_scalar): If stream I/O, set + bytes_used to zero. Fix off by one error in calculation of pos and + skips. Eliminate duplicate pending_spaces check. + +2007-07-15 Francois-Xavier Coudert + + PR fortran/32357 + * intrinsics/mvbits.c: Change prototype so that FROMPOS, LEN and + TOPOS arguments are C int. + +2007-07-09 Jerry DeLisle + + PR libgfortran/32702 + * io/unix.c (unix_stream): Restore buffer pointer and small_buffer. + (fd_alloc): If the number of bytes needed is greater than the default + BUFFER_SIZE, allocate a new buffer large enough. Free the old buffer + if necessary. (fd_sfree): Restore use of buffer pointer. + (fd_close): Likewise. (fd_open): Likewise. + (init_error_stream): Likewise. + +2007-07-09 Thomas Koenig + + PR libfortran/32336 + * m4/matmul.m4: When the dimension of b is incorrect, + raise a runtime error instead of a failed assertion. + * generated/matmul_i1.c: Regenerated. + * generated/matmul_i2.c: Regenerated. + * generated/matmul_i4.c: Regenerated. + * generated/matmul_i8.c: Regenerated. + * generated/matmul_i16.c: Regenerated. + * generated/matmul_r4.c: Regenerated. + * generated/matmul_r8.c: Regenerated. + * generated/matmul_r10.c: Regenerated. + * generated/matmul_r16.c: Regenerated. + +2007-07-08 Jerry DeLisle + + PR libgfortran/32678 + * io/transfer.c (formatted_transfer_scalar): Don't allow + pending_spaces to go negative. + +2007-07-08 Thomas Koenig + + PR libfortran/32217 + * intrinsics/unpack_generic.c: If the destination array is + empty, return early. + +2007-07-05 H.J. Lu + + * aclocal.m4: Regenerated. + +2007-07-04 David Edelsohn + + * configure.ac: SUBST CFLAGS. + * configure: Regenerate. + +2007-07-03 Janne Blomqvist + + * libgfortran.h: Mark internal_malloc_size as a malloc function. + * runtime/memory.c (internal_realloc_size): Remove. + (internal_realloc): Call realloc directly instead of + internal_realloc_size. + (allocate_size): Remove. + (allocate): Call malloc directly instead of allocate_size, mark as + malloc function. + +2007-07-02 Steven G. Kargl + + Restore collateral damage from ISO C Binding merge. + +2007-06-29 Jerry DeLisle + + PR libgfortran/32456 + * io/unit.c (filename_from_unit): Don't use find_unit, instead search + for unit directly. + +2007-07-02 Steven G. Kargl + + * Makefile.in: Regenerated with automake 1.9.6. + +2007-07-02 Steven G. Kargl + + * Makefile.in: Remove extraneous kill.lo rule. + +2007-07-02 Janne Blomqvist + + PR fortran/32239 + * generated/pow_r*_i4.c: Removed. + +2007-07-01 Christopher D. Rickett + + * Makefile.in: Add support for iso_c_generated_procs.c and + iso_c_binding.c. + * Makefile.am: Ditto. + * intrinsics/iso_c_generated_procs.c: New file containing helper + functions. + * intrinsics/iso_c_binding.c: Ditto. + * intrinsics/iso_c_binding.h: New file + * gfortran.map: Include the __iso_c_binding_c_* functions. + * libgfortran.h: define GFC_NUM_RANK_BITS. + +2007-07-01 Janne Blomqvist + + PR fortran/32239 + * Makefile.am: Don't generate real**int4 pow functions. + * gfortran.map: Remove real**int4 pow symbols. + * Makefile.in: Regenerated. + +2007-07-01 Jerry DeLisle + + PR libgfortran/32554 + * io/write.c (output_float): Set edigits to a fixed size, avoiding + variation in field width calculation and eliminate buffer overrun. + +2007-07-01 Janne Blomqvist + + * runtime/memory.c (internal_realloc): Use index_type for size + argument instead of GFC_INTEGER_4. + (allocate_array): Likewise. + (allocate): Likewise, add ifdef around unnecessary check. + (internal_reallo64): Remove. + (allocate_array64): Remove. + (allocate64): Remove. + * gfortran.map: Remove symbols for 64-bit allocation functions. + +2007-06-29 Jerry DeLisle + + PR libgfortran/32456 + * io/unit.c (filename_from_unit): Don't use find_unit, instead search + for unit directly. + +2007-06-24 Adam Nemet + + PR libfortran/32495 + * runtime/backtrace.c (local_strcasestr): Rename from strcasestr. + (show_backtrace): Rename strcasestr to local_strcasestr. + +2007-06-24 Jerry DeLisle + + PR libgfortran/32456 + * runtime/error.c (show_locus): Update to emit the unit number + and file name involved with the error. Use new function + filename_from_unit. + * libgfortran.h (filename_from_unit): Declare new function. + * io/unit.c (init_units): Set the unit file name for stdin, stdout, + and stderr for use later in error reporting. + (filename_from_unit): Add this new function. + +2007-06-24 Jerry DeLisle + + PR libgfortran/32446 + * io/write.c (output_float): Calculate ndigits correctly for large + numbered formats that must pad zeros before the decimal point. + +2007-06-15 Rainer Orth + + PR libfortran/32345 + * runtime/backtrace.c (show_backtrace): Only use snprintf if + available. + +2007-06-10 Jerry DeLisle + + PR libgfortran/32235 + * io/transfer.c (st_read): Remove test for end of file condition. + (next_record_r): Add test for end of file condition. + +2007-06-02 Paolo Bonzini + + * configure: Regenerate. + +2007-05-28 Tobias Burnus + + PR fortran/32124 + * runtime/memory.c (allocate_size): Use ERROR_ALLOCATION. + (allocate,allocate64): Use stat variable if present. + +2007-05-27 Janne Blomqvist + + * runtime/string.c (compare0): Use gfc_charlen_type instead of + int. + (fstrlen): Likewise. + (find_option): Likewise. + (fstrcpy): Use gfc_charlen_type instead of int, return length. + (cf_strcpy): Likewise. + * libgfortran.h: Change string prototypes to use gfc_charlen_type. + * io/open.c (new_unit): Use snprintf if available. + * io/list_read.c (nml_touch_nodes): Use memcpy instead of + strcpy/strcat. + (nml_read_obj): Likewise. + * io/transfer.c (st_set_nml_var): Likewise. + * io/write.c (output_float): Use snprintf if available. + (nml_write_obj) Use memcpy instead of strcpy/strcat. + +2007-05-26 Janne Blomqvist + + * io/unix.c (unix_stream): Rearrange struct members, remove + small_buffer. + (int_stream): New struct. + (fd_alloc): Always use existing buffer, never reallocate. + (fd_sfree): Remove check for buffer != small_buffer. + (fd_close): Likewise. + (mem_alloc_r_at): Change to use int_stream. + (mem_alloc_w_at): Likewise. + (mem_read): Likewise. + (mem_write): Likewise. + (mem_set): Likewise. + (mem_truncate): Likewise. + (mem_close): Likewise. + (mem_sfree): Likewise. + (empty_internal_buffer): Likewise. + (open_internal): Likewise. + +2007-05-25 Jerry DeLisle + + * io/transfer.c (unformatted_read): Use size from front end + eliminating use of size_from_real_kind. + (unformatted_write): Ditto. + +2007-05-23 Steve Ellcey + + * Makefile.in: Regenerate. + * configure: Regenerate. + * aclocal.m4: Regenerate. + +2007-05-22 Tobias Burnus + + * libgfortran.h: Mark stop_numeric as noreturn. + +2007-05-22 Tobias Burnus + + PR libgfortran/31295 + * intrinsics/eoshift0.c (eoshift0): Silence uninitialized warning. + * intrinsics/eoshift2.c (eoshift2): Ditto. + +2007-05-18 Jerry DeLisle + + PR libfortran/31964 + * intrinsics/ishftc.c (ishftc4, ishftc8, ishftc16): Fix mask to handle + shift of bit-size number of bits. + +2007-05-17 Tobias Burnus + + PR fortran/31917 + * runtime/environ.c (mark_range): Fix setting default convert unit. + +2007-05-15 Jerry DeLisle + + PR libfortran/31922 + * intrinsics/string_intrinsics.c (string_trim): Set result to null if + string length is zero. + +2007-05-15 Tobias Burnus + + PR libfortran/31915 + * io/transfer.c (unformatted_read): Use proper size for real(10). + (unformatted_write): Ditto. + +2007-05-14 Francois-Xavier Coudert + + PR fortran/30723 + * runtime/memory.c (internal_malloc, internal_malloc64, + internal_free): Remove. + * runtime/error.c (os_error): Export function. + * intrinsics/move_alloc.c: Include stdlib.h. + (move_alloc): Call free instead of internal_free. + (move_alloc_c): Wrap long lines. + * libgfortran.h (os_error): Export prototype. + (internal_free): Remove prototype. + * gfortran.map (GFORTRAN_1.0): Remove _gfortran_internal_free, + _gfortran_internal_malloc and _gfortran_internal_malloc64. + Add _gfortran_os_error. + +2007-05-09 Jerry DeLisle + + PR libfortran/31880 + * io/unix.c (fd_alloc_r_at): Fix calculation of physical offset. + +2007-05-07 Francois-Xavier Coudert + + PR libfortran/31607 + * intrinsics/system.c (system_sub): Call flush_all_units. + * io/io.h (flush_all_units): Move prototype to libgfortran.h. + * libgfortran.h (flush_all_units): Add prototype. + +2007-05-06 Jerry DeLisle + + PR libfortran/31201 + * runtime/error.c (runtime_error_at): New function. + (generate_error): Export this function. + * gfortran.map: Add _gfortran_generate_error and + _gfortran_runtime_error_at. + * libgfortran.h: Add comment to reference error codes in front end. + (library_start): Locate prototype with library_end macro and add + a new comment. Add prototype for runtime_error_at. Export prototype + for generate_error. + * io/lock.c (library_start): Fix check for error condition. + * io/transfer.c (data_transfer_init): Add library check. + +2007-05-04 Daniel Franke + + PR fortran/22359 + * io/intrinsics.c (fseek_sub): New. + * io/unix.c (fd_fseek): Change logical and physical offsets only + if seek succeeds. + * gfortran.map (fseek_sub): New. + +2007-05-04 Francois-Xavier Coudert + + PR libfortran/31210 + * io/transfer.c (transfer_character): Avoid passing a NULL + pointer as source to the transfer routines, if the string length + is zero. + +2007-04-28 Jerry DeLisle + + PR libfortran/31501 + * io/list_read.c (next_char): Fix whitespace. + * io/io.h: Remove prototypes and define macros for is_array_io, + is_stream_io, and is_internal_unit. + * io/unit.c (is_array_io), (is_internal_unit), (is_stream_io): Delete + these functions. + * io/transfer.c (read_sf): Change handling of internal_unit to make a + single call to salloc_r and use memcpy to transfer the data. + +2007-04-27 Jerry DeLisle + + PR libfortran/31532 + * io/file_pos.c (st_backspace): Set flags.position for end of file + condition and use new function update_position. + (st_endfile): Use new function update_position. + * io/io.h: Add prototype for new function. + * io/inquire.c (inquire_via_unit): If not direct access, set NEXTREC + to zero. + * io/unit.c (update_position): New function to update position info + used by inquire. + * io/transfer.c (next_record): Fix typo and use new function. + +2007-04-25 Francois-Xavier Coudert + + PR libfortran/31299 + * intrinsics/getlog.c: Use getpwuid and geteuid instead of + getlogin if they are available. + * configure.ac: Add checks for getpwuid and geteuid. + * configure: Regenerate. + * config.h.in: Regenerate. + +2007-04-25 Janne Blomqvist + + * configure: Regenerate using autoconf 2.59. + * Makefile.in: Likewise. + * config.h.in: Likewise. + +2007-04-24 Janne Blomqvist + + PR libfortran/27740 + * configure.ac: New test to determine if symbol versioning is + supported. + * Makefile.am: Use result of above test to add appropriate linker + flags. + * gfortran.map: New file. + * configure: Regenerated. + * Makefile.in: Regenerated. + * config.h.in: Regenerated. + +2007-04-23 Thomas Koenig + + PR fortran/31618 + * io/transfer.c (read_block_direct): Instead of calling us_read, + set dtp->u.p.current_unit->current_record = 0 so that pre_position + will read the record marker. + (data_transfer_init): For different error conditions, call + generate_error, then return. + +2007-04-19 Francois-Xavier Coudert + + * runtime/main.c (please_free_exe_path_when_done): New variable. + (store_exe_path): Initialize character buffer, and mark whether + exe_path should be free'd by the library destructor function. + (cleanup): Only free exe_path if needed. + +2007-04-18 Francois-Xavier Coudert + Tobias Burnus + + PR libfortran/31286 + PR libfortran/31296 + * intrinsics/cshift0.c (cshift0): Initialize sstride[0] and rstride[0]. + * intrinsics/unpack_generic.c (unpack0, unpack0_char): Zero the + array structures we pass to unpack_internal. + +2007-04-14 Jerry DeLisle + + * io/open.c (test_endfile): Revert changes for 31052, restoring this + function. + +2007-04-14 Steve Ellcey + + * Makefile.am: Add -I .. to ACLOCAL_AMFLAGS. Add libgfortran_la_LINK. + * Makefile.in: Regenerate. + +2007-04-11 Kai Tietz + + * configure: Regenerate. + +2007-04-06 Francois-Xavier Coudert + + * intrinsics/cpu_time.c: Don't include headers already included + by libgfortran.h. Protect inclusion of sys/times.h. + * configure.ac: Remove unneeded checks for finit, stdio.h, + stddef.h, math.h and sys/params.h. + * config/fpu-aix.h: Don't include headers already included by + libgfortran.h. + * config/fpu-sysv.h: Likewise. + * io/write.c: Likewise. + * m4/minloc1.m4: Likewise. + * m4/maxloc1.m4: Likewise. + * m4/fraction.m4: Likewise. + * m4/set_exponent.m4: Likewise. + * m4/spacing.m4: Likewise. + * m4/minval.m4: Likewise. + * m4/maxval.m4: Likewise. + * m4/exponent.m4: Likewise. + * m4/nearest.m4: Likewise. + * m4/minloc0.m4: Likewise. + * m4/maxloc0.m4: Likewise. + * m4/rrspacing.m4: Likewise. + * runtime/main.c: Likewise. + * runtime/error.c: Likewise. + * intrinsics/system_clock.c: Likewise. + * intrinsics/etime.c: Likewise. + * intrinsics/stat.c: Likewise. + * intrinsics/date_and_time.c: Likewise. + * intrinsics/env.c: Likewise. + * intrinsics/kill.c: Likewise. + * intrinsics/getXid.c: Likewise. + * intrinsics/chmod.c: Likewise. + * intrinsics/args.c: Likewise. + * intrinsics/c99_functions.c: Likewise. + * generated/minval_r8.c: Regenerate. + * generated/maxloc1_4_r8.c: Regenerate. + * generated/minloc1_16_r16.c: Regenerate. + * generated/maxval_i2.c: Regenerate. + * generated/maxloc1_8_i4.c: Regenerate. + * generated/exponent_r16.c: Regenerate. + * generated/maxloc0_4_r4.c: Regenerate. + * generated/fraction_r16.c: Regenerate. + * generated/fraction_r4.c: Regenerate. + * generated/minloc0_4_r16.c: Regenerate. + * generated/minloc0_4_i1.c: Regenerate. + * generated/maxloc0_4_r16.c: Regenerate. + * generated/maxloc0_4_i2.c: Regenerate. + * generated/minloc1_8_r16.c: Regenerate. + * generated/maxloc1_8_r16.c: Regenerate. + * generated/set_exponent_r8.c: Regenerate. + * generated/maxloc0_8_i8.c: Regenerate. + * generated/minloc1_4_r8.c: Regenerate. + * generated/maxloc1_16_r16.c: Regenerate. + * generated/minloc1_16_i4.c: Regenerate. + * generated/maxloc1_16_i4.c: Regenerate. + * generated/minloc0_16_i8.c: Regenerate. + * generated/maxloc0_16_i8.c: Regenerate. + * generated/nearest_r8.c: Regenerate. + * generated/spacing_r16.c: Regenerate. + * generated/maxval_r16.c: Regenerate. + * generated/minloc1_8_i4.c: Regenerate. + * generated/minloc0_16_i16.c: Regenerate. + * generated/minloc0_4_r4.c: Regenerate. + * generated/set_exponent_r10.c: Regenerate. + * generated/rrspacing_r10.c: Regenerate. + * generated/minloc0_4_i2.c: Regenerate. + * generated/maxloc0_8_i1.c: Regenerate. + * generated/minloc0_8_i8.c: Regenerate. + * generated/spacing_r4.c: Regenerate. + * generated/minloc1_16_r10.c: Regenerate. + * generated/minloc0_16_i1.c: Regenerate. + * generated/maxloc0_16_i1.c: Regenerate. + * generated/maxloc1_8_r8.c: Regenerate. + * generated/minval_i16.c: Regenerate. + * generated/exponent_r10.c: Regenerate. + * generated/maxval_i4.c: Regenerate. + * generated/minval_i8.c: Regenerate. + * generated/maxloc1_4_i8.c: Regenerate. + * generated/fraction_r10.c: Regenerate. + * generated/maxloc0_16_i16.c: Regenerate. + * generated/maxloc0_8_r4.c: Regenerate. + * generated/rrspacing_r8.c: Regenerate. + * generated/minloc1_4_i16.c: Regenerate. + * generated/minloc0_4_r10.c: Regenerate. + * generated/maxloc1_4_i16.c: Regenerate. + * generated/minloc0_8_i16.c: Regenerate. + * generated/maxloc0_4_r10.c: Regenerate. + * generated/maxloc0_8_i16.c: Regenerate. + * generated/minloc1_8_r10.c: Regenerate. + * generated/minloc0_16_r4.c: Regenerate. + * generated/maxloc1_8_r10.c: Regenerate. + * generated/maxloc0_16_r4.c: Regenerate. + * generated/minloc1_16_r8.c: Regenerate. + * generated/minloc0_8_i1.c: Regenerate. + * generated/maxloc0_4_i4.c: Regenerate. + * generated/maxloc1_16_r8.c: Regenerate. + * generated/maxloc0_8_i2.c: Regenerate. + * generated/nearest_r16.c: Regenerate. + * generated/maxloc1_16_r10.c: Regenerate. + * generated/minloc0_16_i2.c: Regenerate. + * generated/minloc1_8_r8.c: Regenerate. + * generated/maxloc0_16_i2.c: Regenerate. + * generated/exponent_r4.c: Regenerate. + * generated/spacing_r10.c: Regenerate. + * generated/maxval_r10.c: Regenerate. + * generated/minval_i1.c: Regenerate. + * generated/maxloc1_4_i1.c: Regenerate. + * generated/minloc1_4_i8.c: Regenerate. + * generated/minloc0_8_r4.c: Regenerate. + * generated/minloc0_16_r16.c: Regenerate. + * generated/minloc0_4_i4.c: Regenerate. + * generated/minloc0_8_i2.c: Regenerate. + * generated/minval_r4.c: Regenerate. + * generated/maxloc1_4_r4.c: Regenerate. + * generated/maxval_r8.c: Regenerate. + * generated/minval_r16.c: Regenerate. + * generated/minloc1_4_i1.c: Regenerate. + * generated/minval_i2.c: Regenerate. + * generated/maxloc1_4_i2.c: Regenerate. + * generated/maxloc1_8_i8.c: Regenerate. + * generated/maxloc0_4_r8.c: Regenerate. + * generated/maxloc0_16_r16.c: Regenerate. + * generated/minloc1_4_r16.c: Regenerate. + * generated/fraction_r8.c: Regenerate. + * generated/maxloc1_4_r16.c: Regenerate. + * generated/set_exponent_r4.c: Regenerate. + * generated/minloc0_8_r16.c: Regenerate. + * generated/maxloc0_8_r16.c: Regenerate. + * generated/nearest_r10.c: Regenerate. + * generated/maxloc0_8_i4.c: Regenerate. + * generated/minloc1_4_r4.c: Regenerate. + * generated/minloc0_16_i4.c: Regenerate. + * generated/maxloc0_16_i4.c: Regenerate. + * generated/nearest_r4.c: Regenerate. + * generated/minloc1_16_i8.c: Regenerate. + * generated/maxloc1_16_i8.c: Regenerate. + * generated/minloc1_4_i2.c: Regenerate. + * generated/maxloc1_8_i1.c: Regenerate. + * generated/minloc0_16_r10.c: Regenerate. + * generated/minloc1_8_i8.c: Regenerate. + * generated/minloc0_4_r8.c: Regenerate. + * generated/minloc0_8_i4.c: Regenerate. + * generated/minloc1_16_i16.c: Regenerate. + * generated/spacing_r8.c: Regenerate. + * generated/maxloc1_8_r4.c: Regenerate. + * generated/minloc1_16_i1.c: Regenerate. + * generated/maxloc1_16_i1.c: Regenerate. + * generated/minval_r10.c: Regenerate. + * generated/minval_i4.c: Regenerate. + * generated/minloc1_8_i1.c: Regenerate. + * generated/maxloc1_4_i4.c: Regenerate. + * generated/maxloc1_8_i2.c: Regenerate. + * generated/maxval_i8.c: Regenerate. + * generated/maxloc0_16_r10.c: Regenerate. + * generated/rrspacing_r4.c: Regenerate. + * generated/minloc0_4_i16.c: Regenerate. + * generated/maxloc0_8_r8.c: Regenerate. + * generated/maxloc0_4_i16.c: Regenerate. + * generated/minloc1_4_r10.c: Regenerate. + * generated/minloc1_8_i16.c: Regenerate. + * generated/maxloc1_4_r10.c: Regenerate. + * generated/minloc0_8_r10.c: Regenerate. + * generated/maxloc1_8_i16.c: Regenerate. + * generated/maxloc0_8_r10.c: Regenerate. + * generated/minloc1_16_r4.c: Regenerate. + * generated/maxloc1_16_r4.c: Regenerate. + * generated/minloc0_16_r8.c: Regenerate. + * generated/maxloc0_16_r8.c: Regenerate. + * generated/maxloc0_4_i8.c: Regenerate. + * generated/maxloc1_16_i16.c: Regenerate. + * generated/minloc1_8_r4.c: Regenerate. + * generated/minloc1_16_i2.c: Regenerate. + * generated/maxloc1_16_i2.c: Regenerate. + * generated/maxval_i16.c: Regenerate. + * generated/exponent_r8.c: Regenerate. + * generated/minloc1_4_i4.c: Regenerate. + * generated/maxval_i1.c: Regenerate. + * generated/minloc1_8_i2.c: Regenerate. + * generated/minloc0_8_r8.c: Regenerate. + * generated/set_exponent_r16.c: Regenerate. + * generated/maxloc0_4_i1.c: Regenerate. + * generated/rrspacing_r16.c: Regenerate. + * generated/minloc0_4_i8.c: Regenerate. + * generated/maxval_r4.c: Regenerate. + * configure: Regenerate. + * config.h.in: Regenerate. + +2007-04-06 Jerry DeLisle + + PR libfortran/31395 + * io/format.c (parse_format_list): Fix parsing. + +2007-04-03 Francois-Xavier Coudert + + PR fortran/31304 + intrinsics/string_intrinsics.c (string_repeat): Remove. + +2007-04-01 Jerry DeLisle + + PR libfortran/31052 + * io/open.c (test_endfile): Delete this function. + (edit_modes): Delete call to test_endfile. + (new_unit): Likewise. + * io/io.h: Delete prototype for test_endfile. + * io/transfer.c (next_record_r): Remove use of test_endfile. + (st_read): Add test for end file condition and adjust status. + +2007-04-01 Jerry DeLisle + + PR libfortran/31366 + * io/transfer.c (read_block_direct): Do not generate error when reading + past EOF on a short record that is less than the RECL= specified. + +2007-04-01 Jerry DeLisle + + PR libfortran/31207 + * io/unit.c (close_unit_1): If there are bytes previously written from + ADVANCE="no", move to the end before closing. + +2007-03-31 Francois-Xavier Coudert + + PR libfortran/31335 + * intrinsics/stat.c: Only provide STAT and FSTAT library routines + if stat() and fstat() library functions are available. When lstat() + is not available, use stat() instead. + * configure.ac: Add checks for stat, fstat and lstat. + * configure: Regenerate. + * config.h.in: Regenerate. + +2007-03-27 Jerry DeLisle + + PR libfortran/31052 + * io/transfer.c (next_record_r): Do not call test_endfile if in + namelist mode. + +2007-03-25 Jerry DeLisle + + PR libfortran/31199 + * io/io.h: Add saved_pos to gfc_unit structure. + * io/open.c (new_unit): Initialize saved_pos. + * io/transfer.c (data_transfer_init): Set max_pos to value in + saved_pos. + (next_record_w): Fix whitespace. + (finalze_transfer): Calculate max_pos for ADVANCE="no" and save it for + later use. If not ADVANCE="no" set saved_pos to zero. + +2007-03-25 Thomas Koenig + + PR libfortran/31196 + * intrinsics/reshape_generic.c (reshape_internal): Increment + correct variable. + +2007-03-22 Jerry DeLisle + + PR libfortran/31052 + * file_pos.c: Update Copyright year. + * io/open.c (test_endfile): Restore test_endfile to fix SPEC + regression. Update Copyright year. + * io/io.h: Same. + * io/unix.c (is_special): Add missing type for this function. + Update Copyright year. + * io/transfer.c (next_record_r): Restore test_endfile. + (st_read): Fix whitespace. Update Copyright year + +2007-03-20 Francois-Xavier Coudert + + * configure.ac: Add missing check for gettimeofday. + * config.h.in: Renegerate. + * configure: Regenerate. + +2007-03-18 Jerry DeLisle + + PR libfortran/31052 + * io/file_position (st_rewind): Fix comments. Remove use of + test_endfile. Don't seek if already at 0 position. Use new is_special + function to set endfile state. + * io/open.c (test_endfile): Delete this function. + * io/io.h: Delete prototype for test_endfile. Add prototype + for is_special. + * io/unix.c (is_special): New function. Fix whitespace. + * io/transfer.c (next_record_r): Remove use of test_endfile. + +2007-03-16 David Edelsohn + + * runtime/main.c: Include "config.h" first. + +2007-03-15 Jerry DeLisle + + PR libfortran/31099 + * io/file_pos.c (st_rewind): Don't set bytes_left to zero. + +2007-03-15 Francois-Xavier Coudert + + * runtime/backtrace.c: New file. + * runtime/environ.c (variable_table): New GFORTRAN_ERROR_BACKTRACE + environment variable. + * runtime/compile_options.c (set_std): Add new argument. + * runtime/main.c (store_exe_path, full_exe_path): New functions. + * runtime/error.c (sys_exit): Add call to show_backtrace. + * libgfortran.h (options_t): New backtrace field. + (store_exe_path, full_exe_path, show_backtrace): New prototypes. + * configure.ac: Add checks for execinfo.h, execvp, pipe, dup2, + close, fdopen, strcasestr, getrlimit, backtrace, backtrace_symbols + and getppid. + * Makefile.am: Add runtime/backtrace.c. + * fmain.c (main): Add call to store_exe_path. + * Makefile.in: Renegerate. + * config.h.in: Renegerate. + * configure: Regenerate. + +2007-03-14 Jerry DeLisle + + PR libfortran/31051 + * io/transfer.c (formatted_transfer_scalar): Adjust position for + pending spaces when in writing mode. Clean up some formatting. + +2007-03-14 Thomas Koenig + + PR libfortran/30690 + * all.m4: Quote everything, except for m4 macros. + * any.m4: Likewise. + * count.m4: Likewise. + * cshift1.m4: Likewise. + * eoshift1.m4: Likewise. + * eoshift3.m4: Likewise. + * exponent.m4: Likewise. + * fraction.m4: Likewise. + * in_pack.m4: Likewise. + * in_unpack.m4: Likewise. + * matmul.m4: Likewise. + * matmull.m4: Likewise. + * nearest.m4: Likewise. + * pow.m4: Likewise. + * product.m4: Likewise. + * reshape.m4: Likewise. + * rrspacing.m4: Likewise. + * set_exponent.m4: Likewise. + * shape.m4: Likewise. + * spacing.m4: Likewise. + * transpose.m4: Likewise. + +2007-03-14 Jakub Jelinek + + * io/unix.c (regular_file): For ACTION_UNSPECIFIED retry with + O_RDONLY even if errno is EROFS. + +2007-03-09 Jerry DeLisle + + PR libfortran/31099 + * io/open.c (new_unit): Initialize bytes_left and recl_subrecord. + * io/transfer.c (next_record_w): Set bytes left to record length for + sequential unformatted I/O. + (next_record_r): Ditto. + (read_block_direct): Fix test for exceeding bytes_left. + +2007-03-08 Daniel Franke + + PR fortran/30947 + * intrinsics/signal.c (alarm_sub_int): Avoid SEGFAULT with + integer arguments. + +2007-03-04 Thomas Koenig + + PR libfortran/30981 + * m4/pow_m4: Use appropriate unsigned int type for u. + * generated/pow_c10_i16.c: Regenerated. + * generated/pow_c10_i4.c: Regenerated. + * generated/pow_c10_i8.c: Regenerated. + * generated/pow_c16_i16.c: Regenerated. + * generated/pow_c16_i4.c: Regenerated. + * generated/pow_c16_i8.c: Regenerated. + * generated/pow_c4_i16.c: Regenerated. + * generated/pow_c4_i4.c: Regenerated. + * generated/pow_c4_i8.c: Regenerated. + * generated/pow_c8_i16.c: Regenerated. + * generated/pow_c8_i4.c: Regenerated. + * generated/pow_c8_i8.c: Regenerated. + * generated/pow_i16_i16.c: Regenerated. + * generated/pow_i16_i4.c: Regenerated. + * generated/pow_i16_i8.c: Regenerated. + * generated/pow_i4_i16.c: Regenerated. + * generated/pow_i4_i4.c: Regenerated. + * generated/pow_i4_i8.c: Regenerated. + * generated/pow_i8_i16.c: Regenerated. + * generated/pow_i8_i4.c: Regenerated. + * generated/pow_i8_i8.c: Regenerated. + * generated/pow_r10_i16.c: Regenerated. + * generated/pow_r10_i4.c: Regenerated. + * generated/pow_r10_i8.c: Regenerated. + * generated/pow_r16_i16.c: Regenerated. + * generated/pow_r16_i4.c: Regenerated. + * generated/pow_r16_i8.c: Regenerated. + * generated/pow_r4_i16.c: Regenerated. + * generated/pow_r4_i4.c: Regenerated. + * generated/pow_r4_i8.c: Regenerated. + * generated/pow_r8_i16.c: Regenerated. + * generated/pow_r8_i4.c: Regenerated. + * generated/pow_r8_i8.c: Regenerated. + +2007-03-03 Francois-Xavier Coudert + + PR libfortran/31001 + * intrinsics/pack_generic.c (pack_internal): Add special checks + for zero-sized arrays. + +2007-03-01 Brooks Moses + + * Makefile.am: Add dummy install-pdf target. + * Makefile.in: Regenerate + +2007-02-24 Jerry DeLisle + + PR libfortran/30918 + * io/listread.c (namelist_read): Eat comment line. + +2007-02-22 Jerry DeLisle + + PR libfortran/30910 + * io/write.c (output_float): Add condition of format F only for + special case rounding with zero precision. + +2007-02-19 Thomas Koenig + + PR libfortran/30533 + PR libfortran/30765 + * Makefile.am: Add $(srcdir) too all files in generated/. + (i_maxloc0_c): Add maxloc0_4_i1.c, maxloc0_8_i1.c, + maxloc0_16_i1.c, maxloc0_4_i2.c, maxloc0_8_i2.c and + maxloc0_16_i2.c. + (i_maxloc1_c): Add maxloc1_4_i1.c, maxloc1_8_i1.c, + maxloc1_16_i1.c, maxloc1_4_i2.c, maxloc1_8_i2.c and + maxloc1_16_i2.c. + (i_maxval_c): Add maxval_i1.c and maxval_i2.c. + (i_minloc0_c): Add minloc0_4_i1.c, minloc0_8_i1.c, + minloc0_16_i1.c, minloc0_4_i2.c, minloc0_8_i2.c and + minloc0_16_i2.c. + (i_minloc_1.c): Add minloc1_4_i1.c, minloc1_8_i1.c, + minloc1_16_i1.c, minloc1_4_i2.c, minloc1_8_i2.c and + minloc1_16_i2.c. + (i_minval_c): Add minval_i1.c and minval_i2.c. + (i_sum_c): Add sum_i1.c and sum_i2.c. + (i_product_c): Add product_i1.c and product_i2.c. + (i_matmul_c): Add matmul_i1.c and matmul_i2.c. + (gfor_built_specific_src): Remove $(srcdir) from target. + (gfor_bulit_specific2_src): Likewise. + Makefile.in: Regenerated. + libgfortran.h: Add GFC_INTEGER_1_HUGE and GFC_INTEGER_2_HUGE. + Add gfc_array_i1 and gfc_array_i2. + * generated/matmul_i1.c: New file. + * generated/matmul_i2.c: New file. + * generated/maxloc0_16_i1.c: New file. + * generated/maxloc0_16_i2.c: New file. + * generated/maxloc0_4_i1.c: New file. + * generated/maxloc0_4_i2.c: New file. + * generated/maxloc0_8_i1.c: New file. + * generated/maxloc0_8_i2.c: New file. + * generated/maxloc1_16_i1.c: New file. + * generated/maxloc1_16_i2.c: New file. + * generated/maxloc1_4_i1.c: New file. + * generated/maxloc1_4_i2.c: New file. + * generated/maxloc1_8_i1.c: New file. + * generated/maxloc1_8_i2.c: New file. + * generated/maxval_i1.c: New file. + * generated/maxval_i2.c: New file. + * generated/minloc0_16_i1.c: New file. + * generated/minloc0_16_i2.c: New file. + * generated/minloc0_4_i1.c: New file. + * generated/minloc0_4_i2.c: New file. + * generated/minloc0_8_i1.c: New file. + * generated/minloc0_8_i2.c: New file. + * generated/minloc1_16_i1.c: New file. + * generated/minloc1_16_i2.c: New file. + * generated/minloc1_4_i1.c: New file. + * generated/minloc1_4_i2.c: New file. + * generated/minloc1_8_i1.c: New file. + * generated/minloc1_8_i2.c: New file. + * generated/minval_i1.c: New file. + * generated/minval_i2.c: New file. + * generated/product_i1.c: New file. + * generated/product_i2.c: New file. + * generated/sum_i1.c: New file. + * generated/sum_i2.c: New file. + +2007-02-16 Francois-Xavier Coudert + + * runtime/memory.c (deallocate): Correct comment. + +2007-02-10 Thomas Koenig + + * Makefile.am: Use $(M4) instead of m4. + * Makefile.in: Regenerate. + +2007-02-10 Thomas Koenig + + * Makefile.am: Remove $(srcdir) from assorted targets + in maintainer mode. + * Makefile.in: Regenerate. + +2007-02-09 Thomas Koenig + Tobias Burnus + + PR fortran/30512 + * m4/iparm.m4: Use HUGE-1 for most negative integer. + * generated/maxloc1_8_i4.c: Regenerate. + * generated/maxloc0_8_i8.c: Regenerate. + * generated/maxloc1_16_i4.c: Regenerate. + * generated/maxloc0_16_i8.c: Regenerate. + * generated/maxval_i4.c: Regenerate. + * generated/maxloc1_4_i8.c: Regenerate. + * generated/maxloc0_16_i16.c: Regenerate. + * generated/maxloc1_4_i16.c: Regenerate. + * generated/maxloc0_8_i16.c: Regenerate. + * generated/maxloc0_4_i4.c: Regenerate. + * generated/maxloc1_8_i8.c: Regenerate. + * generated/maxloc0_8_i4.c: Regenerate. + * generated/maxloc0_16_i4.c: Regenerate. + * generated/maxloc1_16_i8.c: Regenerate. + * generated/maxloc1_4_i4.c: Regenerate. + * generated/maxval_i8.c: Regenerate. + * generated/maxloc0_4_i16.c: Regenerate. + * generated/maxloc1_8_i16.c: Regenerate. + * generated/maxloc0_4_i8.c: Regenerate. + * generated/maxloc1_16_i16.c: Regenerate. + * generated/maxval_i16.c: Regenerate. + +2007-02-04 Francois-Xavier Coudert + + PR fortran/30611 + * intrinsics/string_intrinsics.c (string_repeat): Don't check + if ncopies is negative. + +2007-02-04 Francois-Xavier Coudert + + PR libfortran/30007 + * libgfortran.h: Do not prefix symbol name with + __USER_LABEL_PREFIX__ when used in __attribute__((__alias__(...))). + +2007-02-02 Paul Thomas + + PR fortran/30284 + PR fortran/30626 + * io/transfer.c (init_loop_spec, next_array_record): Change to + lbound rather than unity base. + +2007-01-21 Francois-Xavier Coudert + + * runtime/error.c: Include sys/time.h before sys/resource.h. + +2007-01-21 Thomas Koenig + + PR libfortran/30525 + * intrinsics/string_intrinsics.c(compare_string): Make + sure that comparisons are done unsigned. + +2007-01-21 Tobias Burnus + + PR libfortran/30015 + * intrinsics/date_and_time.c (date_and_time): Fix case where time + can go backwards. + * configure.ac: Remove AC_TRY_RUN test for timezone in + gettimeofday. + * acinclude.m4: Ditto. + * configure: Regenerate. + * config.h.in: Regenerate. + +2007-01-20 Francois-Xavier Coudert + + * m4/misc_specifics.m4: Add _gfortran prefix to specific names. + * m4/specific2.m4: Likewise. + * m4/specific.m4: Likewise. + * intrinsics/f2c_specifics.F90: Likewise. + * intrinsics/selected_int_kind.f90: Add _gfortran prefix. + * intrinsics/selected_real_kind.f90: Likewise. + * intrinsics/dprod_r8.f90: Likewise. + * Makefile.am: Add -fallow-leading-underscore to the + gfor_specific_src files, as well as selected_real_kind.F90 + and selected_int_kind.F90 + * Makefile.in: Regenerate. + * generated/_sqrt_c8.F90: Regenerate. + * generated/_sign_r16.F90: Regenerate. + * generated/_log_c16.F90: Regenerate. + * generated/_sin_c10.F90: Regenerate. + * generated/_tanh_r4.F90: Regenerate. + * generated/_tanh_r8.F90: Regenerate. + * generated/_log10_r10.F90: Regenerate. + * generated/_aimag_c4.F90: Regenerate. + * generated/_sign_r4.F90: Regenerate. + * generated/_aimag_c8.F90: Regenerate. + * generated/_sign_r8.F90: Regenerate. + * generated/_mod_i4.F90: Regenerate. + * generated/_cos_r16.F90: Regenerate. + * generated/_aint_r10.F90: Regenerate. + * generated/_mod_i8.F90: Regenerate. + * generated/_abs_i16.F90: Regenerate. + * generated/_sqrt_c10.F90: Regenerate. + * generated/_atan2_r4.F90: Regenerate. + * generated/_cos_c4.F90: Regenerate. + * generated/_atan_r16.F90: Regenerate. + * generated/_tanh_r10.F90: Regenerate. + * generated/_atan2_r8.F90: Regenerate. + * generated/_cos_c8.F90: Regenerate. + * generated/_exp_r4.F90: Regenerate. + * generated/_log_r10.F90: Regenerate. + * generated/_exp_r8.F90: Regenerate. + * generated/_abs_r4.F90: Regenerate. + * generated/_abs_r8.F90: Regenerate. + * generated/_sin_r16.F90: Regenerate. + * generated/_tan_r4.F90: Regenerate. + * generated/_tan_r8.F90: Regenerate. + * generated/_sign_i4.F90: Regenerate. + * generated/_sign_i8.F90: Regenerate. + * generated/_exp_c16.F90: Regenerate. + * generated/_sqrt_r16.F90: Regenerate. + * generated/_conjg_c4.F90: Regenerate. + * generated/_conjg_c8.F90: Regenerate. + * generated/_dim_r16.F90: Regenerate. + * generated/_mod_r10.F90: Regenerate. + * generated/_abs_c10.F90: Regenerate. + * generated/_conjg_c16.F90: Regenerate. + * generated/_tan_r16.F90: Regenerate. + * generated/_asinh_r10.F90: Regenerate. + * generated/_abs_i4.F90: Regenerate. + * generated/_abs_i8.F90: Regenerate. + * generated/_acos_r10.F90: Regenerate. + * generated/_exp_r10.F90: Regenerate. + * generated/_acosh_r16.F90: Regenerate. + * generated/_atan2_r16.F90: Regenerate. + * generated/_cos_c16.F90: Regenerate. + * generated/_mod_i16.F90: Regenerate. + * generated/_asin_r4.F90: Regenerate. + * generated/_anint_r16.F90: Regenerate. + * generated/_asin_r8.F90: Regenerate. + * generated/_aimag_c10.F90: Regenerate. + * generated/_exp_c4.F90: Regenerate. + * generated/_sinh_r10.F90: Regenerate. + * generated/_exp_c8.F90: Regenerate. + * generated/_log10_r4.F90: Regenerate. + * generated/_log10_r8.F90: Regenerate. + * generated/_abs_c4.F90: Regenerate. + * generated/_abs_r16.F90: Regenerate. + * generated/_abs_c8.F90: Regenerate. + * generated/_asin_r10.F90: Regenerate. + * generated/_sign_r10.F90: Regenerate. + * generated/_atanh_r16.F90: Regenerate. + * generated/_log_c10.F90: Regenerate. + * generated/_cosh_r16.F90: Regenerate. + * generated/_sin_c16.F90: Regenerate. + * generated/_cos_r10.F90: Regenerate. + * generated/_log10_r16.F90: Regenerate. + * generated/_aint_r16.F90: Regenerate. + * generated/_acos_r4.F90: Regenerate. + * generated/_acos_r8.F90: Regenerate. + * generated/_sqrt_c16.F90: Regenerate. + * generated/_acosh_r4.F90: Regenerate. + * generated/_atan_r10.F90: Regenerate. + * generated/_acosh_r8.F90: Regenerate. + * generated/_sign_i16.F90: Regenerate. + * generated/_tanh_r16.F90: Regenerate. + * generated/_log_r4.F90: Regenerate. + * generated/_log_r8.F90: Regenerate. + * generated/_sin_r4.F90: Regenerate. + * generated/_sin_r8.F90: Regenerate. + * generated/_log_r16.F90: Regenerate. + * generated/_sin_r10.F90: Regenerate. + * generated/_sqrt_r4.F90: Regenerate. + * generated/_exp_c10.F90: Regenerate. + * generated/_sqrt_r8.F90: Regenerate. + * generated/_asinh_r4.F90: Regenerate. + * generated/_sqrt_r10.F90: Regenerate. + * generated/_asinh_r8.F90: Regenerate. + * generated/_dim_r4.F90: Regenerate. + * generated/_dim_r8.F90: Regenerate. + * generated/_dim_r10.F90: Regenerate. + * generated/_cosh_r4.F90: Regenerate. + * generated/_conjg_c10.F90: Regenerate. + * generated/_tan_r10.F90: Regenerate. + * generated/_cosh_r8.F90: Regenerate. + * generated/_mod_r16.F90: Regenerate. + * generated/_abs_c16.F90: Regenerate. + * generated/_cos_r4.F90: Regenerate. + * generated/_asinh_r16.F90: Regenerate. + * generated/_cos_r8.F90: Regenerate. + * generated/_atanh_r4.F90: Regenerate. + * generated/_atanh_r8.F90: Regenerate. + * generated/_acos_r16.F90: Regenerate. + * generated/_anint_r4.F90: Regenerate. + * generated/_acosh_r10.F90: Regenerate. + * generated/_anint_r8.F90: Regenerate. + * generated/_exp_r16.F90: Regenerate. + * generated/_mod_r4.F90: Regenerate. + * generated/_cos_c10.F90: Regenerate. + * generated/_atan2_r10.F90: Regenerate. + * generated/_dim_i16.F90: Regenerate. + * generated/_mod_r8.F90: Regenerate. + * generated/_anint_r10.F90: Regenerate. + * generated/_aint_r4.F90: Regenerate. + * generated/_aint_r8.F90: Regenerate. + * generated/_dim_i4.F90: Regenerate. + * generated/_sinh_r4.F90: Regenerate. + * generated/_log_c4.F90: Regenerate. + * generated/_dim_i8.F90: Regenerate. + * generated/_sinh_r8.F90: Regenerate. + * generated/_log_c8.F90: Regenerate. + * generated/_sin_c4.F90: Regenerate. + * generated/_sin_c8.F90: Regenerate. + * generated/misc_specifics.F90: Regenerate. + * generated/_abs_r10.F90: Regenerate. + * generated/_aimag_c16.F90: Regenerate. + * generated/_atan_r4.F90: Regenerate. + * generated/_sinh_r16.F90: Regenerate. + * generated/_atan_r8.F90: Regenerate. + * generated/_atanh_r10.F90: Regenerate. + * generated/_cosh_r10.F90: Regenerate. + * generated/_sqrt_c4.F90: Regenerate. + * generated/_asin_r16.F90: Regenerate. + +2007-01-19 Francois-Xavier Coudert + + PR libfortran/26893 + * acinclude.m4 (LIBGFOR_WORKING_GFORTRAN): New check. + * configure.ac: Add call to LIBGFOR_WORKING_GFORTRAN. + * configure: Regenerate. + * config.h.in: Regenerate because it was forgottent in the last + commit. + +2007-01-18 Francois-Xavier Coudert + Tobias Burnus + + PR libfortran/29649 + * runtime/environ.c (variable_table): New GFORTRAN_ERROR_DUMPCORE + environment variable. + * runtime/compile_options.c (set_std): Add new argument. + * runtime/error.c (sys_exit): Move from io/unix.c. Add coredump + functionality. + * libgfortran.h (options_t): New dump_core and backtrace members. + (sys_exit): Move prototype. + * io/unix.c (sys_exit): Move to runtime/error.c. + * configure.ac: Add check for getrlimit. + * configure: Regenerate. + +2007-01-17 Tom Tromey + + PR libfortran/27107: + * aclocal.m4, configure, Makefile.in: Rebuilt. + * configure.ac: Enable automake dependency tracking. Update + minimum automake version. + +2007-01-17 Francois-Xavier Coudert + + PR libfortran/27107 + * runtime/environ.c: Don't include io/io.h. + * runtime/string.c: Don't include io/io.h. + (compare0): Add cast to avoid warning. + * runtime/error.c: Don't include io/io.h. + (st_printf): Move to io/unix.c. + * intrinsics/flush.c: Delete, contents moved to io/intrinsics.c. + * intrinsics/fget.c: Likewise. + * intrinsics/ftell.c: Likewise. + * intrinsics/tty.c: Likewise. + * libgfortran.h (DEFAULT_RECL, notification_std, + get_unformatted_convert, IOPARM_*, st_parameter_common, unit_convert, + DEFAULT_TEMPDIR): New declarations. + * io/io.h (DEFAULT_RECL, notification_std, get_unformatted_convert, + IOPARM_*, st_parameter_common, unit_convert, DEFAULT_TEMPDIR): + Move to libgfortran.h. + * io/unix.c: Add io/unix.h content. + (st_printf): New function. + * io/intrinsics.c: New file. + * io/unix.h: Remove, contents moved into unix.c. + * libtool-version: Update library version to 3.0.0. + * configure.ac: Update library version to 0.3. + * Makefile.am (intrinsics/fget.c, intrinsics/flush.c, + intrinsics/ftell.c, intrinsics/tty.c, libgfortran.h): Remove targets. + * Makefile.in: Regenerate. + * configure: Regenerate. + +2007-01-12 Jerry DeLisle + + PR libfortran/30435 + * io/list_read.c (finish_separator): Don't call next_record. + (list_formatted_read_scalar): Clean up some comments and whitespace. + (nml_read_obj): Whitespace fix. + +2007-01-05 Jerry DeLisle + + PR libfortran/30162 + * io/unix.c (fd_flush): Don't seek if file is not seekable, defined as + s->file_length == -1. + (fd_alloc_w_at): Do not adjust file_length if file is not seekable. + (fd_seek): If not seekable, just return success. + (fd_truncate): If not seekable, no need to truncate. Return failure + if seek fails and the stream is not a pipe. + (fd_to_stream): Make test for non-seekable file more robust. + +2007-01-01 Steven G. Kargl + + * ChangeLog: Copied to ... + * ChangeLog-2006: here. diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/Makefile.am b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/Makefile.am new file mode 100644 index 0000000000..2223d61fcf --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/Makefile.am @@ -0,0 +1,901 @@ +## Process this file with automake to produce Makefile.in + + +ACLOCAL_AMFLAGS = -I .. -I ../config + +## May be used by toolexeclibdir. +gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) + +## Symbol versioning (copied from libssp). +if LIBGFOR_USE_SYMVER +version_arg = -Wl,--version-script=$(srcdir)/gfortran.map +else +version_arg = +endif + +LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) + +toolexeclib_LTLIBRARIES = libgfortran.la +libgfortran_la_LINK = $(LINK) +libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) -lm $(extra_ldflags_libgfortran) $(version_arg) + +myexeclib_LTLIBRARIES = libgfortranbegin.la +myexeclibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR) +libgfortranbegin_la_SOURCES = fmain.c +libgfortranbegin_la_LDFLAGS = -static + +## io.h conflicts with a system header on some platforms, so +## use -iquote +AM_CPPFLAGS = -iquote$(srcdir)/io -I$(srcdir)/$(MULTISRCTOP)../gcc \ + -I$(srcdir)/$(MULTISRCTOP)../gcc/config \ + -I$(MULTIBUILDTOP)../../$(host_subdir)/gcc -D_GNU_SOURCE + +# Fortran rules for complex multiplication and division +AM_CFLAGS += -fcx-fortran-rules + +gfor_io_src= \ +io/close.c \ +io/file_pos.c \ +io/format.c \ +io/inquire.c \ +io/intrinsics.c \ +io/list_read.c \ +io/lock.c \ +io/open.c \ +io/read.c \ +io/size_from_kind.c \ +io/transfer.c \ +io/unit.c \ +io/unix.c \ +io/write.c \ +io/fbuf.c + +gfor_io_headers= \ +io/io.h + +gfor_helper_src= \ +intrinsics/associated.c \ +intrinsics/abort.c \ +intrinsics/access.c \ +intrinsics/args.c \ +intrinsics/c99_functions.c \ +intrinsics/chdir.c \ +intrinsics/chmod.c \ +intrinsics/clock.c \ +intrinsics/cpu_time.c \ +intrinsics/cshift0.c \ +intrinsics/ctime.c \ +intrinsics/date_and_time.c \ +intrinsics/dtime.c \ +intrinsics/env.c \ +intrinsics/eoshift0.c \ +intrinsics/eoshift2.c \ +intrinsics/erfc_scaled.c \ +intrinsics/etime.c \ +intrinsics/exit.c \ +intrinsics/fnum.c \ +intrinsics/gerror.c \ +intrinsics/getcwd.c \ +intrinsics/getlog.c \ +intrinsics/getXid.c \ +intrinsics/hostnm.c \ +intrinsics/ierrno.c \ +intrinsics/ishftc.c \ +intrinsics/iso_c_generated_procs.c \ +intrinsics/iso_c_binding.c \ +intrinsics/kill.c \ +intrinsics/link.c \ +intrinsics/malloc.c \ +intrinsics/mvbits.c \ +intrinsics/move_alloc.c \ +intrinsics/pack_generic.c \ +intrinsics/perror.c \ +intrinsics/selected_char_kind.c \ +intrinsics/signal.c \ +intrinsics/size.c \ +intrinsics/sleep.c \ +intrinsics/spread_generic.c \ +intrinsics/string_intrinsics.c \ +intrinsics/system.c \ +intrinsics/rand.c \ +intrinsics/random.c \ +intrinsics/rename.c \ +intrinsics/reshape_generic.c \ +intrinsics/reshape_packed.c \ +intrinsics/selected_int_kind.f90 \ +intrinsics/selected_real_kind.f90 \ +intrinsics/stat.c \ +intrinsics/symlnk.c \ +intrinsics/system_clock.c \ +intrinsics/time.c \ +intrinsics/transpose_generic.c \ +intrinsics/umask.c \ +intrinsics/unlink.c \ +intrinsics/unpack_generic.c \ +runtime/in_pack_generic.c \ +runtime/in_unpack_generic.c + +gfor_src= \ +runtime/backtrace.c \ +runtime/compile_options.c \ +runtime/convert_char.c \ +runtime/environ.c \ +runtime/error.c \ +runtime/fpu.c \ +runtime/main.c \ +runtime/memory.c \ +runtime/pause.c \ +runtime/stop.c \ +runtime/string.c \ +runtime/select.c + +i_all_c= \ +$(srcdir)/generated/all_l1.c \ +$(srcdir)/generated/all_l2.c \ +$(srcdir)/generated/all_l4.c \ +$(srcdir)/generated/all_l8.c \ +$(srcdir)/generated/all_l16.c + +i_any_c= \ +$(srcdir)/generated/any_l1.c \ +$(srcdir)/generated/any_l2.c \ +$(srcdir)/generated/any_l4.c \ +$(srcdir)/generated/any_l8.c \ +$(srcdir)/generated/any_l16.c + +i_count_c= \ +$(srcdir)/generated/count_1_l.c \ +$(srcdir)/generated/count_2_l.c \ +$(srcdir)/generated/count_4_l.c \ +$(srcdir)/generated/count_8_l.c \ +$(srcdir)/generated/count_16_l.c + +i_maxloc0_c= \ +$(srcdir)/generated/maxloc0_4_i1.c \ +$(srcdir)/generated/maxloc0_8_i1.c \ +$(srcdir)/generated/maxloc0_16_i1.c \ +$(srcdir)/generated/maxloc0_4_i2.c \ +$(srcdir)/generated/maxloc0_8_i2.c \ +$(srcdir)/generated/maxloc0_16_i2.c \ +$(srcdir)/generated/maxloc0_4_i4.c \ +$(srcdir)/generated/maxloc0_8_i4.c \ +$(srcdir)/generated/maxloc0_16_i4.c \ +$(srcdir)/generated/maxloc0_4_i8.c \ +$(srcdir)/generated/maxloc0_8_i8.c \ +$(srcdir)/generated/maxloc0_16_i8.c \ +$(srcdir)/generated/maxloc0_4_i16.c \ +$(srcdir)/generated/maxloc0_8_i16.c \ +$(srcdir)/generated/maxloc0_16_i16.c \ +$(srcdir)/generated/maxloc0_4_r4.c \ +$(srcdir)/generated/maxloc0_8_r4.c \ +$(srcdir)/generated/maxloc0_16_r4.c \ +$(srcdir)/generated/maxloc0_4_r8.c \ +$(srcdir)/generated/maxloc0_8_r8.c \ +$(srcdir)/generated/maxloc0_16_r8.c \ +$(srcdir)/generated/maxloc0_4_r10.c \ +$(srcdir)/generated/maxloc0_8_r10.c \ +$(srcdir)/generated/maxloc0_16_r10.c \ +$(srcdir)/generated/maxloc0_4_r16.c \ +$(srcdir)/generated/maxloc0_8_r16.c \ +$(srcdir)/generated/maxloc0_16_r16.c + +i_maxloc1_c= \ +$(srcdir)/generated/maxloc1_4_i1.c \ +$(srcdir)/generated/maxloc1_8_i1.c \ +$(srcdir)/generated/maxloc1_16_i1.c \ +$(srcdir)/generated/maxloc1_4_i2.c \ +$(srcdir)/generated/maxloc1_8_i2.c \ +$(srcdir)/generated/maxloc1_16_i2.c \ +$(srcdir)/generated/maxloc1_4_i4.c \ +$(srcdir)/generated/maxloc1_8_i4.c \ +$(srcdir)/generated/maxloc1_16_i4.c \ +$(srcdir)/generated/maxloc1_4_i8.c \ +$(srcdir)/generated/maxloc1_8_i8.c \ +$(srcdir)/generated/maxloc1_16_i8.c \ +$(srcdir)/generated/maxloc1_4_i16.c \ +$(srcdir)/generated/maxloc1_8_i16.c \ +$(srcdir)/generated/maxloc1_16_i16.c \ +$(srcdir)/generated/maxloc1_4_r4.c \ +$(srcdir)/generated/maxloc1_8_r4.c \ +$(srcdir)/generated/maxloc1_16_r4.c \ +$(srcdir)/generated/maxloc1_4_r8.c \ +$(srcdir)/generated/maxloc1_8_r8.c \ +$(srcdir)/generated/maxloc1_16_r8.c \ +$(srcdir)/generated/maxloc1_4_r10.c \ +$(srcdir)/generated/maxloc1_8_r10.c \ +$(srcdir)/generated/maxloc1_16_r10.c \ +$(srcdir)/generated/maxloc1_4_r16.c \ +$(srcdir)/generated/maxloc1_8_r16.c \ +$(srcdir)/generated/maxloc1_16_r16.c + +i_maxval_c= \ +$(srcdir)/generated/maxval_i1.c \ +$(srcdir)/generated/maxval_i2.c \ +$(srcdir)/generated/maxval_i4.c \ +$(srcdir)/generated/maxval_i8.c \ +$(srcdir)/generated/maxval_i16.c \ +$(srcdir)/generated/maxval_r4.c \ +$(srcdir)/generated/maxval_r8.c \ +$(srcdir)/generated/maxval_r10.c \ +$(srcdir)/generated/maxval_r16.c + +i_minloc0_c= \ +$(srcdir)/generated/minloc0_4_i1.c \ +$(srcdir)/generated/minloc0_8_i1.c \ +$(srcdir)/generated/minloc0_16_i1.c \ +$(srcdir)/generated/minloc0_4_i2.c \ +$(srcdir)/generated/minloc0_8_i2.c \ +$(srcdir)/generated/minloc0_16_i2.c \ +$(srcdir)/generated/minloc0_4_i4.c \ +$(srcdir)/generated/minloc0_8_i4.c \ +$(srcdir)/generated/minloc0_16_i4.c \ +$(srcdir)/generated/minloc0_4_i8.c \ +$(srcdir)/generated/minloc0_8_i8.c \ +$(srcdir)/generated/minloc0_16_i8.c \ +$(srcdir)/generated/minloc0_4_i16.c \ +$(srcdir)/generated/minloc0_8_i16.c \ +$(srcdir)/generated/minloc0_16_i16.c \ +$(srcdir)/generated/minloc0_4_r4.c \ +$(srcdir)/generated/minloc0_8_r4.c \ +$(srcdir)/generated/minloc0_16_r4.c \ +$(srcdir)/generated/minloc0_4_r8.c \ +$(srcdir)/generated/minloc0_8_r8.c \ +$(srcdir)/generated/minloc0_16_r8.c \ +$(srcdir)/generated/minloc0_4_r10.c \ +$(srcdir)/generated/minloc0_8_r10.c \ +$(srcdir)/generated/minloc0_16_r10.c \ +$(srcdir)/generated/minloc0_4_r16.c \ +$(srcdir)/generated/minloc0_8_r16.c \ +$(srcdir)/generated/minloc0_16_r16.c + +i_minloc1_c= \ +$(srcdir)/generated/minloc1_4_i1.c \ +$(srcdir)/generated/minloc1_8_i1.c \ +$(srcdir)/generated/minloc1_16_i1.c \ +$(srcdir)/generated/minloc1_4_i2.c \ +$(srcdir)/generated/minloc1_8_i2.c \ +$(srcdir)/generated/minloc1_16_i2.c \ +$(srcdir)/generated/minloc1_4_i4.c \ +$(srcdir)/generated/minloc1_8_i4.c \ +$(srcdir)/generated/minloc1_16_i4.c \ +$(srcdir)/generated/minloc1_4_i8.c \ +$(srcdir)/generated/minloc1_8_i8.c \ +$(srcdir)/generated/minloc1_16_i8.c \ +$(srcdir)/generated/minloc1_4_i16.c \ +$(srcdir)/generated/minloc1_8_i16.c \ +$(srcdir)/generated/minloc1_16_i16.c \ +$(srcdir)/generated/minloc1_4_r4.c \ +$(srcdir)/generated/minloc1_8_r4.c \ +$(srcdir)/generated/minloc1_16_r4.c \ +$(srcdir)/generated/minloc1_4_r8.c \ +$(srcdir)/generated/minloc1_8_r8.c \ +$(srcdir)/generated/minloc1_16_r8.c \ +$(srcdir)/generated/minloc1_4_r10.c \ +$(srcdir)/generated/minloc1_8_r10.c \ +$(srcdir)/generated/minloc1_16_r10.c \ +$(srcdir)/generated/minloc1_4_r16.c \ +$(srcdir)/generated/minloc1_8_r16.c \ +$(srcdir)/generated/minloc1_16_r16.c + +i_minval_c= \ +$(srcdir)/generated/minval_i1.c \ +$(srcdir)/generated/minval_i2.c \ +$(srcdir)/generated/minval_i4.c \ +$(srcdir)/generated/minval_i8.c \ +$(srcdir)/generated/minval_i16.c \ +$(srcdir)/generated/minval_r4.c \ +$(srcdir)/generated/minval_r8.c \ +$(srcdir)/generated/minval_r10.c \ +$(srcdir)/generated/minval_r16.c + +i_sum_c= \ +$(srcdir)/generated/sum_i1.c \ +$(srcdir)/generated/sum_i2.c \ +$(srcdir)/generated/sum_i4.c \ +$(srcdir)/generated/sum_i8.c \ +$(srcdir)/generated/sum_i16.c \ +$(srcdir)/generated/sum_r4.c \ +$(srcdir)/generated/sum_r8.c \ +$(srcdir)/generated/sum_r10.c \ +$(srcdir)/generated/sum_r16.c \ +$(srcdir)/generated/sum_c4.c \ +$(srcdir)/generated/sum_c8.c \ +$(srcdir)/generated/sum_c10.c \ +$(srcdir)/generated/sum_c16.c + +i_product_c= \ +$(srcdir)/generated/product_i1.c \ +$(srcdir)/generated/product_i2.c \ +$(srcdir)/generated/product_i4.c \ +$(srcdir)/generated/product_i8.c \ +$(srcdir)/generated/product_i16.c \ +$(srcdir)/generated/product_r4.c \ +$(srcdir)/generated/product_r8.c \ +$(srcdir)/generated/product_r10.c \ +$(srcdir)/generated/product_r16.c \ +$(srcdir)/generated/product_c4.c \ +$(srcdir)/generated/product_c8.c \ +$(srcdir)/generated/product_c10.c \ +$(srcdir)/generated/product_c16.c + +i_matmul_c= \ +$(srcdir)/generated/matmul_i1.c \ +$(srcdir)/generated/matmul_i2.c \ +$(srcdir)/generated/matmul_i4.c \ +$(srcdir)/generated/matmul_i8.c \ +$(srcdir)/generated/matmul_i16.c \ +$(srcdir)/generated/matmul_r4.c \ +$(srcdir)/generated/matmul_r8.c \ +$(srcdir)/generated/matmul_r10.c \ +$(srcdir)/generated/matmul_r16.c \ +$(srcdir)/generated/matmul_c4.c \ +$(srcdir)/generated/matmul_c8.c \ +$(srcdir)/generated/matmul_c10.c \ +$(srcdir)/generated/matmul_c16.c + +i_matmull_c= \ +$(srcdir)/generated/matmul_l4.c \ +$(srcdir)/generated/matmul_l8.c \ +$(srcdir)/generated/matmul_l16.c + +i_transpose_c= \ +$(srcdir)/generated/transpose_i4.c \ +$(srcdir)/generated/transpose_i8.c \ +$(srcdir)/generated/transpose_i16.c \ +$(srcdir)/generated/transpose_r4.c \ +$(srcdir)/generated/transpose_r8.c \ +$(srcdir)/generated/transpose_r10.c \ +$(srcdir)/generated/transpose_r16.c \ +$(srcdir)/generated/transpose_c4.c \ +$(srcdir)/generated/transpose_c8.c \ +$(srcdir)/generated/transpose_c10.c \ +$(srcdir)/generated/transpose_c16.c + +i_shape_c= \ +$(srcdir)/generated/shape_i4.c \ +$(srcdir)/generated/shape_i8.c \ +$(srcdir)/generated/shape_i16.c + +i_reshape_c= \ +$(srcdir)/generated/reshape_i4.c \ +$(srcdir)/generated/reshape_i8.c \ +$(srcdir)/generated/reshape_i16.c \ +$(srcdir)/generated/reshape_r4.c \ +$(srcdir)/generated/reshape_r8.c \ +$(srcdir)/generated/reshape_r10.c \ +$(srcdir)/generated/reshape_r16.c \ +$(srcdir)/generated/reshape_c4.c \ +$(srcdir)/generated/reshape_c8.c \ +$(srcdir)/generated/reshape_c10.c \ +$(srcdir)/generated/reshape_c16.c + +i_eoshift1_c= \ +$(srcdir)/generated/eoshift1_4.c \ +$(srcdir)/generated/eoshift1_8.c \ +$(srcdir)/generated/eoshift1_16.c + +i_eoshift3_c= \ +$(srcdir)/generated/eoshift3_4.c \ +$(srcdir)/generated/eoshift3_8.c \ +$(srcdir)/generated/eoshift3_16.c + +i_cshift0_c= \ +$(srcdir)/generated/cshift0_i1.c \ +$(srcdir)/generated/cshift0_i2.c \ +$(srcdir)/generated/cshift0_i4.c \ +$(srcdir)/generated/cshift0_i8.c \ +$(srcdir)/generated/cshift0_i16.c \ +$(srcdir)/generated/cshift0_r4.c \ +$(srcdir)/generated/cshift0_r8.c \ +$(srcdir)/generated/cshift0_r10.c \ +$(srcdir)/generated/cshift0_r16.c \ +$(srcdir)/generated/cshift0_c4.c \ +$(srcdir)/generated/cshift0_c8.c \ +$(srcdir)/generated/cshift0_c10.c \ +$(srcdir)/generated/cshift0_c16.c + + +i_cshift1_c= \ +$(srcdir)/generated/cshift1_4.c \ +$(srcdir)/generated/cshift1_8.c \ +$(srcdir)/generated/cshift1_16.c + +in_pack_c = \ +$(srcdir)/generated/in_pack_i1.c \ +$(srcdir)/generated/in_pack_i2.c \ +$(srcdir)/generated/in_pack_i4.c \ +$(srcdir)/generated/in_pack_i8.c \ +$(srcdir)/generated/in_pack_i16.c \ +$(srcdir)/generated/in_pack_r4.c \ +$(srcdir)/generated/in_pack_r8.c \ +$(srcdir)/generated/in_pack_r10.c \ +$(srcdir)/generated/in_pack_r16.c \ +$(srcdir)/generated/in_pack_c4.c \ +$(srcdir)/generated/in_pack_c8.c \ +$(srcdir)/generated/in_pack_c10.c \ +$(srcdir)/generated/in_pack_c16.c + +in_unpack_c = \ +$(srcdir)/generated/in_unpack_i1.c \ +$(srcdir)/generated/in_unpack_i2.c \ +$(srcdir)/generated/in_unpack_i4.c \ +$(srcdir)/generated/in_unpack_i8.c \ +$(srcdir)/generated/in_unpack_i16.c \ +$(srcdir)/generated/in_unpack_r4.c \ +$(srcdir)/generated/in_unpack_r8.c \ +$(srcdir)/generated/in_unpack_r10.c \ +$(srcdir)/generated/in_unpack_r16.c \ +$(srcdir)/generated/in_unpack_c4.c \ +$(srcdir)/generated/in_unpack_c8.c \ +$(srcdir)/generated/in_unpack_c10.c \ +$(srcdir)/generated/in_unpack_c16.c + +i_exponent_c = \ +$(srcdir)/generated/exponent_r4.c \ +$(srcdir)/generated/exponent_r8.c \ +$(srcdir)/generated/exponent_r10.c \ +$(srcdir)/generated/exponent_r16.c + +i_spacing_c = \ +$(srcdir)/generated/spacing_r4.c \ +$(srcdir)/generated/spacing_r8.c \ +$(srcdir)/generated/spacing_r10.c \ +$(srcdir)/generated/spacing_r16.c + +i_rrspacing_c = \ +$(srcdir)/generated/rrspacing_r4.c \ +$(srcdir)/generated/rrspacing_r8.c \ +$(srcdir)/generated/rrspacing_r10.c \ +$(srcdir)/generated/rrspacing_r16.c + +i_fraction_c = \ +$(srcdir)/generated/fraction_r4.c \ +$(srcdir)/generated/fraction_r8.c \ +$(srcdir)/generated/fraction_r10.c \ +$(srcdir)/generated/fraction_r16.c + +i_nearest_c = \ +$(srcdir)/generated/nearest_r4.c \ +$(srcdir)/generated/nearest_r8.c \ +$(srcdir)/generated/nearest_r10.c \ +$(srcdir)/generated/nearest_r16.c + +i_set_exponent_c = \ +$(srcdir)/generated/set_exponent_r4.c \ +$(srcdir)/generated/set_exponent_r8.c \ +$(srcdir)/generated/set_exponent_r10.c \ +$(srcdir)/generated/set_exponent_r16.c + +i_pow_c = \ +$(srcdir)/generated/pow_i4_i4.c \ +$(srcdir)/generated/pow_i8_i4.c \ +$(srcdir)/generated/pow_i16_i4.c \ +$(srcdir)/generated/pow_c4_i4.c \ +$(srcdir)/generated/pow_c8_i4.c \ +$(srcdir)/generated/pow_c10_i4.c \ +$(srcdir)/generated/pow_c16_i4.c \ +$(srcdir)/generated/pow_i4_i8.c \ +$(srcdir)/generated/pow_i8_i8.c \ +$(srcdir)/generated/pow_i16_i8.c \ +$(srcdir)/generated/pow_r4_i8.c \ +$(srcdir)/generated/pow_r8_i8.c \ +$(srcdir)/generated/pow_r10_i8.c \ +$(srcdir)/generated/pow_r16_i8.c \ +$(srcdir)/generated/pow_c4_i8.c \ +$(srcdir)/generated/pow_c8_i8.c \ +$(srcdir)/generated/pow_c10_i8.c \ +$(srcdir)/generated/pow_c16_i8.c \ +$(srcdir)/generated/pow_i4_i16.c \ +$(srcdir)/generated/pow_i8_i16.c \ +$(srcdir)/generated/pow_i16_i16.c \ +$(srcdir)/generated/pow_r4_i16.c \ +$(srcdir)/generated/pow_r8_i16.c \ +$(srcdir)/generated/pow_r10_i16.c \ +$(srcdir)/generated/pow_r16_i16.c \ +$(srcdir)/generated/pow_c4_i16.c \ +$(srcdir)/generated/pow_c8_i16.c \ +$(srcdir)/generated/pow_c10_i16.c \ +$(srcdir)/generated/pow_c16_i16.c + +i_pack_c = \ +$(srcdir)/generated/pack_i1.c \ +$(srcdir)/generated/pack_i2.c \ +$(srcdir)/generated/pack_i4.c \ +$(srcdir)/generated/pack_i8.c \ +$(srcdir)/generated/pack_i16.c \ +$(srcdir)/generated/pack_r4.c \ +$(srcdir)/generated/pack_r8.c \ +$(srcdir)/generated/pack_r10.c \ +$(srcdir)/generated/pack_r16.c \ +$(srcdir)/generated/pack_c4.c \ +$(srcdir)/generated/pack_c8.c \ +$(srcdir)/generated/pack_c10.c \ +$(srcdir)/generated/pack_c16.c + +i_unpack_c = \ +$(srcdir)/generated/unpack_i1.c \ +$(srcdir)/generated/unpack_i2.c \ +$(srcdir)/generated/unpack_i4.c \ +$(srcdir)/generated/unpack_i8.c \ +$(srcdir)/generated/unpack_i16.c \ +$(srcdir)/generated/unpack_r4.c \ +$(srcdir)/generated/unpack_r8.c \ +$(srcdir)/generated/unpack_r10.c \ +$(srcdir)/generated/unpack_r16.c \ +$(srcdir)/generated/unpack_c4.c \ +$(srcdir)/generated/unpack_c8.c \ +$(srcdir)/generated/unpack_c10.c \ +$(srcdir)/generated/unpack_c16.c + +i_spread_c = \ +$(srcdir)/generated/spread_i1.c \ +$(srcdir)/generated/spread_i2.c \ +$(srcdir)/generated/spread_i4.c \ +$(srcdir)/generated/spread_i8.c \ +$(srcdir)/generated/spread_i16.c \ +$(srcdir)/generated/spread_r4.c \ +$(srcdir)/generated/spread_r8.c \ +$(srcdir)/generated/spread_r10.c \ +$(srcdir)/generated/spread_r16.c \ +$(srcdir)/generated/spread_c4.c \ +$(srcdir)/generated/spread_c8.c \ +$(srcdir)/generated/spread_c10.c \ +$(srcdir)/generated/spread_c16.c + +m4_files= m4/iparm.m4 m4/ifunction.m4 m4/iforeach.m4 m4/all.m4 \ + m4/any.m4 m4/count.m4 m4/maxloc0.m4 m4/maxloc1.m4 m4/maxval.m4 \ + m4/minloc0.m4 m4/minloc1.m4 m4/minval.m4 m4/product.m4 m4/sum.m4 \ + m4/matmul.m4 m4/matmull.m4 m4/ifunction_logical.m4 \ + m4/ctrig.m4 m4/cexp.m4 m4/chyp.m4 m4/mtype.m4 \ + m4/specific.m4 m4/specific2.m4 m4/head.m4 m4/shape.m4 m4/reshape.m4 \ + m4/transpose.m4 m4/eoshift1.m4 m4/eoshift3.m4 m4/exponent.m4 \ + m4/fraction.m4 m4/nearest.m4 m4/set_exponent.m4 m4/pow.m4 \ + m4/misc_specifics.m4 m4/rrspacing.m4 m4/spacing.m4 m4/pack.m4 \ + m4/unpack.m4 m4/spread.m4 + +gfor_built_src= $(i_all_c) $(i_any_c) $(i_count_c) $(i_maxloc0_c) \ + $(i_maxloc1_c) $(i_maxval_c) $(i_minloc0_c) $(i_minloc1_c) $(i_minval_c) \ + $(i_product_c) $(i_sum_c) \ + $(i_matmul_c) $(i_matmull_c) $(i_transpose_c) $(i_shape_c) $(i_eoshift1_c) \ + $(i_eoshift3_c) $(i_cshift1_c) $(i_reshape_c) $(in_pack_c) $(in_unpack_c) \ + $(i_exponent_c) $(i_fraction_c) $(i_nearest_c) $(i_set_exponent_c) \ + $(i_pow_c) $(i_rrspacing_c) $(i_spacing_c) $(i_pack_c) $(i_unpack_c) \ + $(i_spread_c) selected_int_kind.inc selected_real_kind.inc kinds.h \ + $(i_cshift0_c) kinds.inc c99_protos.inc fpu-target.h + +# Machine generated specifics +gfor_built_specific_src= \ +$(srcdir)/generated/_abs_c4.F90 \ +$(srcdir)/generated/_abs_c8.F90 \ +$(srcdir)/generated/_abs_c10.F90 \ +$(srcdir)/generated/_abs_c16.F90 \ +$(srcdir)/generated/_abs_i4.F90 \ +$(srcdir)/generated/_abs_i8.F90 \ +$(srcdir)/generated/_abs_i16.F90 \ +$(srcdir)/generated/_abs_r4.F90 \ +$(srcdir)/generated/_abs_r8.F90 \ +$(srcdir)/generated/_abs_r10.F90 \ +$(srcdir)/generated/_abs_r16.F90 \ +$(srcdir)/generated/_aimag_c4.F90 \ +$(srcdir)/generated/_aimag_c8.F90 \ +$(srcdir)/generated/_aimag_c10.F90 \ +$(srcdir)/generated/_aimag_c16.F90 \ +$(srcdir)/generated/_exp_r4.F90 \ +$(srcdir)/generated/_exp_r8.F90 \ +$(srcdir)/generated/_exp_r10.F90 \ +$(srcdir)/generated/_exp_r16.F90 \ +$(srcdir)/generated/_exp_c4.F90 \ +$(srcdir)/generated/_exp_c8.F90 \ +$(srcdir)/generated/_exp_c10.F90 \ +$(srcdir)/generated/_exp_c16.F90 \ +$(srcdir)/generated/_log_r4.F90 \ +$(srcdir)/generated/_log_r8.F90 \ +$(srcdir)/generated/_log_r10.F90 \ +$(srcdir)/generated/_log_r16.F90 \ +$(srcdir)/generated/_log_c4.F90 \ +$(srcdir)/generated/_log_c8.F90 \ +$(srcdir)/generated/_log_c10.F90 \ +$(srcdir)/generated/_log_c16.F90 \ +$(srcdir)/generated/_log10_r4.F90 \ +$(srcdir)/generated/_log10_r8.F90 \ +$(srcdir)/generated/_log10_r10.F90 \ +$(srcdir)/generated/_log10_r16.F90 \ +$(srcdir)/generated/_sqrt_r4.F90 \ +$(srcdir)/generated/_sqrt_r8.F90 \ +$(srcdir)/generated/_sqrt_r10.F90 \ +$(srcdir)/generated/_sqrt_r16.F90 \ +$(srcdir)/generated/_sqrt_c4.F90 \ +$(srcdir)/generated/_sqrt_c8.F90 \ +$(srcdir)/generated/_sqrt_c10.F90 \ +$(srcdir)/generated/_sqrt_c16.F90 \ +$(srcdir)/generated/_asin_r4.F90 \ +$(srcdir)/generated/_asin_r8.F90 \ +$(srcdir)/generated/_asin_r10.F90 \ +$(srcdir)/generated/_asin_r16.F90 \ +$(srcdir)/generated/_asinh_r4.F90 \ +$(srcdir)/generated/_asinh_r8.F90 \ +$(srcdir)/generated/_asinh_r10.F90 \ +$(srcdir)/generated/_asinh_r16.F90 \ +$(srcdir)/generated/_acos_r4.F90 \ +$(srcdir)/generated/_acos_r8.F90 \ +$(srcdir)/generated/_acos_r10.F90 \ +$(srcdir)/generated/_acos_r16.F90 \ +$(srcdir)/generated/_acosh_r4.F90 \ +$(srcdir)/generated/_acosh_r8.F90 \ +$(srcdir)/generated/_acosh_r10.F90 \ +$(srcdir)/generated/_acosh_r16.F90 \ +$(srcdir)/generated/_atan_r4.F90 \ +$(srcdir)/generated/_atan_r8.F90 \ +$(srcdir)/generated/_atan_r10.F90 \ +$(srcdir)/generated/_atan_r16.F90 \ +$(srcdir)/generated/_atanh_r4.F90 \ +$(srcdir)/generated/_atanh_r8.F90 \ +$(srcdir)/generated/_atanh_r10.F90 \ +$(srcdir)/generated/_atanh_r16.F90 \ +$(srcdir)/generated/_sin_r4.F90 \ +$(srcdir)/generated/_sin_r8.F90 \ +$(srcdir)/generated/_sin_r10.F90 \ +$(srcdir)/generated/_sin_r16.F90 \ +$(srcdir)/generated/_sin_c4.F90 \ +$(srcdir)/generated/_sin_c8.F90 \ +$(srcdir)/generated/_sin_c10.F90 \ +$(srcdir)/generated/_sin_c16.F90 \ +$(srcdir)/generated/_cos_r4.F90 \ +$(srcdir)/generated/_cos_r8.F90 \ +$(srcdir)/generated/_cos_r10.F90 \ +$(srcdir)/generated/_cos_r16.F90 \ +$(srcdir)/generated/_cos_c4.F90 \ +$(srcdir)/generated/_cos_c8.F90 \ +$(srcdir)/generated/_cos_c10.F90 \ +$(srcdir)/generated/_cos_c16.F90 \ +$(srcdir)/generated/_tan_r4.F90 \ +$(srcdir)/generated/_tan_r8.F90 \ +$(srcdir)/generated/_tan_r10.F90 \ +$(srcdir)/generated/_tan_r16.F90 \ +$(srcdir)/generated/_sinh_r4.F90 \ +$(srcdir)/generated/_sinh_r8.F90 \ +$(srcdir)/generated/_sinh_r10.F90 \ +$(srcdir)/generated/_sinh_r16.F90 \ +$(srcdir)/generated/_cosh_r4.F90 \ +$(srcdir)/generated/_cosh_r8.F90 \ +$(srcdir)/generated/_cosh_r10.F90 \ +$(srcdir)/generated/_cosh_r16.F90 \ +$(srcdir)/generated/_tanh_r4.F90 \ +$(srcdir)/generated/_tanh_r8.F90 \ +$(srcdir)/generated/_tanh_r10.F90 \ +$(srcdir)/generated/_tanh_r16.F90 \ +$(srcdir)/generated/_conjg_c4.F90 \ +$(srcdir)/generated/_conjg_c8.F90 \ +$(srcdir)/generated/_conjg_c10.F90 \ +$(srcdir)/generated/_conjg_c16.F90 \ +$(srcdir)/generated/_aint_r4.F90 \ +$(srcdir)/generated/_aint_r8.F90 \ +$(srcdir)/generated/_aint_r10.F90 \ +$(srcdir)/generated/_aint_r16.F90 \ +$(srcdir)/generated/_anint_r4.F90 \ +$(srcdir)/generated/_anint_r8.F90 \ +$(srcdir)/generated/_anint_r10.F90 \ +$(srcdir)/generated/_anint_r16.F90 + +gfor_built_specific2_src= \ +$(srcdir)/generated/_sign_i4.F90 \ +$(srcdir)/generated/_sign_i8.F90 \ +$(srcdir)/generated/_sign_i16.F90 \ +$(srcdir)/generated/_sign_r4.F90 \ +$(srcdir)/generated/_sign_r8.F90 \ +$(srcdir)/generated/_sign_r10.F90 \ +$(srcdir)/generated/_sign_r16.F90 \ +$(srcdir)/generated/_dim_i4.F90 \ +$(srcdir)/generated/_dim_i8.F90 \ +$(srcdir)/generated/_dim_i16.F90 \ +$(srcdir)/generated/_dim_r4.F90 \ +$(srcdir)/generated/_dim_r8.F90 \ +$(srcdir)/generated/_dim_r10.F90 \ +$(srcdir)/generated/_dim_r16.F90 \ +$(srcdir)/generated/_atan2_r4.F90 \ +$(srcdir)/generated/_atan2_r8.F90 \ +$(srcdir)/generated/_atan2_r10.F90 \ +$(srcdir)/generated/_atan2_r16.F90 \ +$(srcdir)/generated/_mod_i4.F90 \ +$(srcdir)/generated/_mod_i8.F90 \ +$(srcdir)/generated/_mod_i16.F90 \ +$(srcdir)/generated/_mod_r4.F90 \ +$(srcdir)/generated/_mod_r8.F90 \ +$(srcdir)/generated/_mod_r10.F90 \ +$(srcdir)/generated/_mod_r16.F90 + +gfor_misc_specifics = $(srcdir)/generated/misc_specifics.F90 + +gfor_specific_src= \ +$(gfor_built_specific_src) \ +$(gfor_built_specific2_src) \ +$(gfor_misc_specifics) \ +intrinsics/dprod_r8.f90 \ +intrinsics/f2c_specifics.F90 + +# No install-html or install-pdf support in automake yet +.PHONY: install-html install-pdf +install-html: +install-pdf: + +# Turn on vectorization and loop unrolling for matmul. +$(patsubst %.c,%.lo,$(notdir $(i_matmul_c))): AM_CFLAGS += -ftree-vectorize -funroll-loops +# Logical matmul doesn't vectorize. +$(patsubst %.c,%.lo,$(notdir $(i_matmull_c))): AM_CFLAGS += -funroll-loops + +# Add the -fallow-leading-underscore option when needed +$(patsubst %.F90,%.lo,$(patsubst %.f90,%.lo,$(notdir $(gfor_specific_src)))): AM_FCFLAGS += -fallow-leading-underscore +selected_real_kind.lo selected_int_kind.lo: AM_FCFLAGS += -fallow-leading-underscore + +BUILT_SOURCES=$(gfor_built_src) $(gfor_built_specific_src) \ + $(gfor_built_specific2_src) $(gfor_misc_specifics) + +prereq_SRC = $(gfor_src) $(gfor_built_src) $(gfor_io_src) \ + $(gfor_helper_src) $(gfor_io_headers) $(gfor_specific_src) + +if onestep +# dummy sources for libtool +BUILT_SOURCES+=libgfortran_c.c libgfortran_f.f90 +libgfortran_c.c libgfortran_f.f90 libgfortran_F.F90: + echo > $@ +# overrides for libtool perusing the dummy sources +libgfortran_c.o: $(filter %.c,$(prereq_SRC)) + $(COMPILE) -c $^ -o $@ -combine + +libgfortran_c.lo: $(filter %.c,$(prereq_SRC)) + $(LTCOMPILE) -c -o $@ $^ -combine + +#libgfortran_f.o: $(filter %.f %.f90,$(prereq_SRC)) +# $(FCCOMPILE) -c $^ -o $@ -combine + +#libgfortran_f.lo: $(filter %.f %.f90,$(prereq_SRC)) +# $(LTFCCOMPILE) -c -o $@ $^ -combine +# not currently used: +#libgfortran_F.o: $(filter %.F %.F90,$(prereq_SRC)) +# $(PPFCCOMPILE) -c $^ -o $@ -combine +# +#libgfortran_F.lo: +# $(LTPPFCCOMPILE) -c -o $@ $^ -combine + +libgfortran_la_SOURCES = libgfortran_c.c $(filter-out %.c,$(prereq_SRC)) + +else +libgfortran_la_SOURCES = $(prereq_SRC) + +endif + +I_M4_DEPS=m4/iparm.m4 +I_M4_DEPS0=$(I_M4_DEPS) m4/iforeach.m4 +I_M4_DEPS1=$(I_M4_DEPS) m4/ifunction.m4 +I_M4_DEPS2=$(I_M4_DEPS) m4/ifunction_logical.m4 + +kinds.h: $(srcdir)/mk-kinds-h.sh + $(SHELL) $(srcdir)/mk-kinds-h.sh '$(FCCOMPILE)' > $@ || rm $@ + +kinds.inc: kinds.h + grep '^#' < kinds.h > $@ + +c99_protos.inc: $(srcdir)/c99_protos.h + grep '^#' < $(srcdir)/c99_protos.h > $@ + +selected_int_kind.inc: $(srcdir)/mk-sik-inc.sh + $(SHELL) $(srcdir)/mk-sik-inc.sh '$(FCCOMPILE)' > $@ || rm $@ + +selected_real_kind.inc: $(srcdir)/mk-srk-inc.sh + $(SHELL) $(srcdir)/mk-srk-inc.sh '$(FCCOMPILE)' > $@ || rm $@ + +fpu-target.h: $(srcdir)/$(FPU_HOST_HEADER) + cp $(srcdir)/$(FPU_HOST_HEADER) $@ + +## A 'normal' build shouldn't need to regenerate these +## so we only include them in maintainer mode + +if MAINTAINER_MODE +$(i_all_c): m4/all.m4 $(I_M4_DEPS2) + $(M4) -Dfile=$@ -I$(srcdir)/m4 all.m4 > $@ + +$(i_any_c): m4/any.m4 $(I_M4_DEPS2) + $(M4) -Dfile=$@ -I$(srcdir)/m4 any.m4 > $@ + +$(i_count_c): m4/count.m4 $(I_M4_DEPS2) + $(M4) -Dfile=$@ -I$(srcdir)/m4 count.m4 > $@ + +$(i_maxloc0_c): m4/maxloc0.m4 $(I_M4_DEPS0) + $(M4) -Dfile=$@ -I$(srcdir)/m4 maxloc0.m4 > $@ + +$(i_maxloc1_c): m4/maxloc1.m4 $(I_M4_DEPS1) + $(M4) -Dfile=$@ -I$(srcdir)/m4 maxloc1.m4 > $@ + +$(i_maxval_c): m4/maxval.m4 $(I_M4_DEPS1) + $(M4) -Dfile=$@ -I$(srcdir)/m4 maxval.m4 > $@ + +$(i_minloc0_c): m4/minloc0.m4 $(I_M4_DEPS0) + $(M4) -Dfile=$@ -I$(srcdir)/m4 minloc0.m4 > $@ + +$(i_minloc1_c): m4/minloc1.m4 $(I_M4_DEPS1) + $(M4) -Dfile=$@ -I$(srcdir)/m4 minloc1.m4 > $@ + +$(i_minval_c): m4/minval.m4 $(I_M4_DEPS1) + $(M4) -Dfile=$@ -I$(srcdir)/m4 minval.m4 > $@ + +$(i_product_c): m4/product.m4 $(I_M4_DEPS1) + $(M4) -Dfile=$@ -I$(srcdir)/m4 product.m4 > $@ + +$(i_sum_c): m4/sum.m4 $(I_M4_DEPS1) + $(M4) -Dfile=$@ -I$(srcdir)/m4 sum.m4 > $@ + +$(i_matmul_c): m4/matmul.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 matmul.m4 > $@ + +$(i_matmull_c): m4/matmull.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 matmull.m4 > $@ + +$(i_transpose_c): m4/transpose.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 transpose.m4 > $@ + +$(i_shape_c): m4/shape.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 shape.m4 > $@ + +$(i_reshape_c): m4/reshape.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 reshape.m4 > $@ + +$(i_eoshift1_c): m4/eoshift1.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 eoshift1.m4 > $@ + +$(i_eoshift3_c): m4/eoshift3.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 eoshift3.m4 > $@ + +$(i_cshift0_c): m4/cshift0.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 cshift0.m4 > $@ + +$(i_cshift1_c): m4/cshift1.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 cshift1.m4 > $@ + +$(in_pack_c): m4/in_pack.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 in_pack.m4 > $@ + +$(in_unpack_c): m4/in_unpack.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 in_unpack.m4 > $@ + +$(i_exponent_c): m4/exponent.m4 m4/mtype.m4 + $(M4) -Dfile=$@ -I$(srcdir)/m4 exponent.m4 > $@ + +$(i_rrspacing_c): m4/rrspacing.m4 m4/mtype.m4 + $(M4) -Dfile=$@ -I$(srcdir)/m4 rrspacing.m4 > $@ + +$(i_spacing_c): m4/spacing.m4 m4/mtype.m4 + $(M4) -Dfile=$@ -I$(srcdir)/m4 spacing.m4 > $@ + +$(i_fraction_c): m4/fraction.m4 m4/mtype.m4 + $(M4) -Dfile=$@ -I$(srcdir)/m4 fraction.m4 > $@ + +$(i_nearest_c): m4/nearest.m4 m4/mtype.m4 + $(M4) -Dfile=$@ -I$(srcdir)/m4 nearest.m4 > $@ + +$(i_set_exponent_c): m4/set_exponent.m4 m4/mtype.m4 + $(M4) -Dfile=$@ -I$(srcdir)/m4 set_exponent.m4 > $@ + +$(i_pow_c): m4/pow.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 pow.m4 > $@ + +$(i_pack_c): m4/pack.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 pack.m4 > $@ + +$(i_unpack_c): m4/unpack.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 unpack.m4 > $@ + +$(i_spread_c): m4/spread.m4 $(I_M4_DEPS) + $(M4) -Dfile=$@ -I$(srcdir)/m4 spread.m4 > $@ + +$(gfor_built_specific_src): m4/specific.m4 m4/head.m4 + $(M4) -Dfile=$@ -I$(srcdir)/m4 specific.m4 > $@ + +$(gfor_built_specific2_src): m4/specific2.m4 m4/head.m4 + $(M4) -Dfile=$@ -I$(srcdir)/m4 specific2.m4 > $@ + +$(gfor_misc_specifics): m4/misc_specifics.m4 m4/head.m4 + $(M4) -Dfile=$@ -I$(srcdir)/m4 misc_specifics.m4 > $@ +## end of maintainer mode only rules +endif + +EXTRA_DIST = $(m4_files) diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/Makefile.in b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/Makefile.in new file mode 100644 index 0000000000..eb3a12ef25 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/Makefile.in @@ -0,0 +1,6176 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = . +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ + +# dummy sources for libtool +@onestep_TRUE@am__append_1 = libgfortran_c.c libgfortran_f.f90 +DIST_COMMON = $(am__configure_deps) $(srcdir)/../config.guess \ + $(srcdir)/../config.sub $(srcdir)/../depcomp \ + $(srcdir)/../install-sh $(srcdir)/../ltmain.sh \ + $(srcdir)/../missing $(srcdir)/../mkinstalldirs \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/config.h.in $(top_srcdir)/configure ChangeLog +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/lead-dot.m4 \ + $(top_srcdir)/../config/multi.m4 \ + $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/proginstall.m4 \ + $(top_srcdir)/../config/stdint.m4 \ + $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \ + $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/no-executables.m4 \ + $(top_srcdir)/../libtool.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno configure.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(myexeclibdir)" \ + "$(DESTDIR)$(toolexeclibdir)" +myexeclibLTLIBRARIES_INSTALL = $(INSTALL) +toolexeclibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(myexeclib_LTLIBRARIES) $(toolexeclib_LTLIBRARIES) +libgfortran_la_LIBADD = +am__libgfortran_la_SOURCES_DIST = runtime/backtrace.c \ + runtime/compile_options.c runtime/convert_char.c \ + runtime/environ.c runtime/error.c runtime/fpu.c runtime/main.c \ + runtime/memory.c runtime/pause.c runtime/stop.c \ + runtime/string.c runtime/select.c $(srcdir)/generated/all_l1.c \ + $(srcdir)/generated/all_l2.c $(srcdir)/generated/all_l4.c \ + $(srcdir)/generated/all_l8.c $(srcdir)/generated/all_l16.c \ + $(srcdir)/generated/any_l1.c $(srcdir)/generated/any_l2.c \ + $(srcdir)/generated/any_l4.c $(srcdir)/generated/any_l8.c \ + $(srcdir)/generated/any_l16.c $(srcdir)/generated/count_1_l.c \ + $(srcdir)/generated/count_2_l.c \ + $(srcdir)/generated/count_4_l.c \ + $(srcdir)/generated/count_8_l.c \ + $(srcdir)/generated/count_16_l.c \ + $(srcdir)/generated/maxloc0_4_i1.c \ + $(srcdir)/generated/maxloc0_8_i1.c \ + $(srcdir)/generated/maxloc0_16_i1.c \ + $(srcdir)/generated/maxloc0_4_i2.c \ + $(srcdir)/generated/maxloc0_8_i2.c \ + $(srcdir)/generated/maxloc0_16_i2.c \ + $(srcdir)/generated/maxloc0_4_i4.c \ + $(srcdir)/generated/maxloc0_8_i4.c \ + $(srcdir)/generated/maxloc0_16_i4.c \ + $(srcdir)/generated/maxloc0_4_i8.c \ + $(srcdir)/generated/maxloc0_8_i8.c \ + $(srcdir)/generated/maxloc0_16_i8.c \ + $(srcdir)/generated/maxloc0_4_i16.c \ + $(srcdir)/generated/maxloc0_8_i16.c \ + $(srcdir)/generated/maxloc0_16_i16.c \ + $(srcdir)/generated/maxloc0_4_r4.c \ + $(srcdir)/generated/maxloc0_8_r4.c \ + $(srcdir)/generated/maxloc0_16_r4.c \ + $(srcdir)/generated/maxloc0_4_r8.c \ + $(srcdir)/generated/maxloc0_8_r8.c \ + $(srcdir)/generated/maxloc0_16_r8.c \ + $(srcdir)/generated/maxloc0_4_r10.c \ + $(srcdir)/generated/maxloc0_8_r10.c \ + $(srcdir)/generated/maxloc0_16_r10.c \ + $(srcdir)/generated/maxloc0_4_r16.c \ + $(srcdir)/generated/maxloc0_8_r16.c \ + $(srcdir)/generated/maxloc0_16_r16.c \ + $(srcdir)/generated/maxloc1_4_i1.c \ + $(srcdir)/generated/maxloc1_8_i1.c \ + $(srcdir)/generated/maxloc1_16_i1.c \ + $(srcdir)/generated/maxloc1_4_i2.c \ + $(srcdir)/generated/maxloc1_8_i2.c \ + $(srcdir)/generated/maxloc1_16_i2.c \ + $(srcdir)/generated/maxloc1_4_i4.c \ + $(srcdir)/generated/maxloc1_8_i4.c \ + $(srcdir)/generated/maxloc1_16_i4.c \ + $(srcdir)/generated/maxloc1_4_i8.c \ + $(srcdir)/generated/maxloc1_8_i8.c \ + $(srcdir)/generated/maxloc1_16_i8.c \ + $(srcdir)/generated/maxloc1_4_i16.c \ + $(srcdir)/generated/maxloc1_8_i16.c \ + $(srcdir)/generated/maxloc1_16_i16.c \ + $(srcdir)/generated/maxloc1_4_r4.c \ + $(srcdir)/generated/maxloc1_8_r4.c \ + $(srcdir)/generated/maxloc1_16_r4.c \ + $(srcdir)/generated/maxloc1_4_r8.c \ + $(srcdir)/generated/maxloc1_8_r8.c \ + $(srcdir)/generated/maxloc1_16_r8.c \ + $(srcdir)/generated/maxloc1_4_r10.c \ + $(srcdir)/generated/maxloc1_8_r10.c \ + $(srcdir)/generated/maxloc1_16_r10.c \ + $(srcdir)/generated/maxloc1_4_r16.c \ + $(srcdir)/generated/maxloc1_8_r16.c \ + $(srcdir)/generated/maxloc1_16_r16.c \ + $(srcdir)/generated/maxval_i1.c \ + $(srcdir)/generated/maxval_i2.c \ + $(srcdir)/generated/maxval_i4.c \ + $(srcdir)/generated/maxval_i8.c \ + $(srcdir)/generated/maxval_i16.c \ + $(srcdir)/generated/maxval_r4.c \ + $(srcdir)/generated/maxval_r8.c \ + $(srcdir)/generated/maxval_r10.c \ + $(srcdir)/generated/maxval_r16.c \ + $(srcdir)/generated/minloc0_4_i1.c \ + $(srcdir)/generated/minloc0_8_i1.c \ + $(srcdir)/generated/minloc0_16_i1.c \ + $(srcdir)/generated/minloc0_4_i2.c \ + $(srcdir)/generated/minloc0_8_i2.c \ + $(srcdir)/generated/minloc0_16_i2.c \ + $(srcdir)/generated/minloc0_4_i4.c \ + $(srcdir)/generated/minloc0_8_i4.c \ + $(srcdir)/generated/minloc0_16_i4.c \ + $(srcdir)/generated/minloc0_4_i8.c \ + $(srcdir)/generated/minloc0_8_i8.c \ + $(srcdir)/generated/minloc0_16_i8.c \ + $(srcdir)/generated/minloc0_4_i16.c \ + $(srcdir)/generated/minloc0_8_i16.c \ + $(srcdir)/generated/minloc0_16_i16.c \ + $(srcdir)/generated/minloc0_4_r4.c \ + $(srcdir)/generated/minloc0_8_r4.c \ + $(srcdir)/generated/minloc0_16_r4.c \ + $(srcdir)/generated/minloc0_4_r8.c \ + $(srcdir)/generated/minloc0_8_r8.c \ + $(srcdir)/generated/minloc0_16_r8.c \ + $(srcdir)/generated/minloc0_4_r10.c \ + $(srcdir)/generated/minloc0_8_r10.c \ + $(srcdir)/generated/minloc0_16_r10.c \ + $(srcdir)/generated/minloc0_4_r16.c \ + $(srcdir)/generated/minloc0_8_r16.c \ + $(srcdir)/generated/minloc0_16_r16.c \ + $(srcdir)/generated/minloc1_4_i1.c \ + $(srcdir)/generated/minloc1_8_i1.c \ + $(srcdir)/generated/minloc1_16_i1.c \ + $(srcdir)/generated/minloc1_4_i2.c \ + $(srcdir)/generated/minloc1_8_i2.c \ + $(srcdir)/generated/minloc1_16_i2.c \ + $(srcdir)/generated/minloc1_4_i4.c \ + $(srcdir)/generated/minloc1_8_i4.c \ + $(srcdir)/generated/minloc1_16_i4.c \ + $(srcdir)/generated/minloc1_4_i8.c \ + $(srcdir)/generated/minloc1_8_i8.c \ + $(srcdir)/generated/minloc1_16_i8.c \ + $(srcdir)/generated/minloc1_4_i16.c \ + $(srcdir)/generated/minloc1_8_i16.c \ + $(srcdir)/generated/minloc1_16_i16.c \ + $(srcdir)/generated/minloc1_4_r4.c \ + $(srcdir)/generated/minloc1_8_r4.c \ + $(srcdir)/generated/minloc1_16_r4.c \ + $(srcdir)/generated/minloc1_4_r8.c \ + $(srcdir)/generated/minloc1_8_r8.c \ + $(srcdir)/generated/minloc1_16_r8.c \ + $(srcdir)/generated/minloc1_4_r10.c \ + $(srcdir)/generated/minloc1_8_r10.c \ + $(srcdir)/generated/minloc1_16_r10.c \ + $(srcdir)/generated/minloc1_4_r16.c \ + $(srcdir)/generated/minloc1_8_r16.c \ + $(srcdir)/generated/minloc1_16_r16.c \ + $(srcdir)/generated/minval_i1.c \ + $(srcdir)/generated/minval_i2.c \ + $(srcdir)/generated/minval_i4.c \ + $(srcdir)/generated/minval_i8.c \ + $(srcdir)/generated/minval_i16.c \ + $(srcdir)/generated/minval_r4.c \ + $(srcdir)/generated/minval_r8.c \ + $(srcdir)/generated/minval_r10.c \ + $(srcdir)/generated/minval_r16.c \ + $(srcdir)/generated/product_i1.c \ + $(srcdir)/generated/product_i2.c \ + $(srcdir)/generated/product_i4.c \ + $(srcdir)/generated/product_i8.c \ + $(srcdir)/generated/product_i16.c \ + $(srcdir)/generated/product_r4.c \ + $(srcdir)/generated/product_r8.c \ + $(srcdir)/generated/product_r10.c \ + $(srcdir)/generated/product_r16.c \ + $(srcdir)/generated/product_c4.c \ + $(srcdir)/generated/product_c8.c \ + $(srcdir)/generated/product_c10.c \ + $(srcdir)/generated/product_c16.c $(srcdir)/generated/sum_i1.c \ + $(srcdir)/generated/sum_i2.c $(srcdir)/generated/sum_i4.c \ + $(srcdir)/generated/sum_i8.c $(srcdir)/generated/sum_i16.c \ + $(srcdir)/generated/sum_r4.c $(srcdir)/generated/sum_r8.c \ + $(srcdir)/generated/sum_r10.c $(srcdir)/generated/sum_r16.c \ + $(srcdir)/generated/sum_c4.c $(srcdir)/generated/sum_c8.c \ + $(srcdir)/generated/sum_c10.c $(srcdir)/generated/sum_c16.c \ + $(srcdir)/generated/matmul_i1.c \ + $(srcdir)/generated/matmul_i2.c \ + $(srcdir)/generated/matmul_i4.c \ + $(srcdir)/generated/matmul_i8.c \ + $(srcdir)/generated/matmul_i16.c \ + $(srcdir)/generated/matmul_r4.c \ + $(srcdir)/generated/matmul_r8.c \ + $(srcdir)/generated/matmul_r10.c \ + $(srcdir)/generated/matmul_r16.c \ + $(srcdir)/generated/matmul_c4.c \ + $(srcdir)/generated/matmul_c8.c \ + $(srcdir)/generated/matmul_c10.c \ + $(srcdir)/generated/matmul_c16.c \ + $(srcdir)/generated/matmul_l4.c \ + $(srcdir)/generated/matmul_l8.c \ + $(srcdir)/generated/matmul_l16.c \ + $(srcdir)/generated/transpose_i4.c \ + $(srcdir)/generated/transpose_i8.c \ + $(srcdir)/generated/transpose_i16.c \ + $(srcdir)/generated/transpose_r4.c \ + $(srcdir)/generated/transpose_r8.c \ + $(srcdir)/generated/transpose_r10.c \ + $(srcdir)/generated/transpose_r16.c \ + $(srcdir)/generated/transpose_c4.c \ + $(srcdir)/generated/transpose_c8.c \ + $(srcdir)/generated/transpose_c10.c \ + $(srcdir)/generated/transpose_c16.c \ + $(srcdir)/generated/shape_i4.c $(srcdir)/generated/shape_i8.c \ + $(srcdir)/generated/shape_i16.c \ + $(srcdir)/generated/eoshift1_4.c \ + $(srcdir)/generated/eoshift1_8.c \ + $(srcdir)/generated/eoshift1_16.c \ + $(srcdir)/generated/eoshift3_4.c \ + $(srcdir)/generated/eoshift3_8.c \ + $(srcdir)/generated/eoshift3_16.c \ + $(srcdir)/generated/cshift1_4.c \ + $(srcdir)/generated/cshift1_8.c \ + $(srcdir)/generated/cshift1_16.c \ + $(srcdir)/generated/reshape_i4.c \ + $(srcdir)/generated/reshape_i8.c \ + $(srcdir)/generated/reshape_i16.c \ + $(srcdir)/generated/reshape_r4.c \ + $(srcdir)/generated/reshape_r8.c \ + $(srcdir)/generated/reshape_r10.c \ + $(srcdir)/generated/reshape_r16.c \ + $(srcdir)/generated/reshape_c4.c \ + $(srcdir)/generated/reshape_c8.c \ + $(srcdir)/generated/reshape_c10.c \ + $(srcdir)/generated/reshape_c16.c \ + $(srcdir)/generated/in_pack_i1.c \ + $(srcdir)/generated/in_pack_i2.c \ + $(srcdir)/generated/in_pack_i4.c \ + $(srcdir)/generated/in_pack_i8.c \ + $(srcdir)/generated/in_pack_i16.c \ + $(srcdir)/generated/in_pack_r4.c \ + $(srcdir)/generated/in_pack_r8.c \ + $(srcdir)/generated/in_pack_r10.c \ + $(srcdir)/generated/in_pack_r16.c \ + $(srcdir)/generated/in_pack_c4.c \ + $(srcdir)/generated/in_pack_c8.c \ + $(srcdir)/generated/in_pack_c10.c \ + $(srcdir)/generated/in_pack_c16.c \ + $(srcdir)/generated/in_unpack_i1.c \ + $(srcdir)/generated/in_unpack_i2.c \ + $(srcdir)/generated/in_unpack_i4.c \ + $(srcdir)/generated/in_unpack_i8.c \ + $(srcdir)/generated/in_unpack_i16.c \ + $(srcdir)/generated/in_unpack_r4.c \ + $(srcdir)/generated/in_unpack_r8.c \ + $(srcdir)/generated/in_unpack_r10.c \ + $(srcdir)/generated/in_unpack_r16.c \ + $(srcdir)/generated/in_unpack_c4.c \ + $(srcdir)/generated/in_unpack_c8.c \ + $(srcdir)/generated/in_unpack_c10.c \ + $(srcdir)/generated/in_unpack_c16.c \ + $(srcdir)/generated/exponent_r4.c \ + $(srcdir)/generated/exponent_r8.c \ + $(srcdir)/generated/exponent_r10.c \ + $(srcdir)/generated/exponent_r16.c \ + $(srcdir)/generated/fraction_r4.c \ + $(srcdir)/generated/fraction_r8.c \ + $(srcdir)/generated/fraction_r10.c \ + $(srcdir)/generated/fraction_r16.c \ + $(srcdir)/generated/nearest_r4.c \ + $(srcdir)/generated/nearest_r8.c \ + $(srcdir)/generated/nearest_r10.c \ + $(srcdir)/generated/nearest_r16.c \ + $(srcdir)/generated/set_exponent_r4.c \ + $(srcdir)/generated/set_exponent_r8.c \ + $(srcdir)/generated/set_exponent_r10.c \ + $(srcdir)/generated/set_exponent_r16.c \ + $(srcdir)/generated/pow_i4_i4.c \ + $(srcdir)/generated/pow_i8_i4.c \ + $(srcdir)/generated/pow_i16_i4.c \ + $(srcdir)/generated/pow_c4_i4.c \ + $(srcdir)/generated/pow_c8_i4.c \ + $(srcdir)/generated/pow_c10_i4.c \ + $(srcdir)/generated/pow_c16_i4.c \ + $(srcdir)/generated/pow_i4_i8.c \ + $(srcdir)/generated/pow_i8_i8.c \ + $(srcdir)/generated/pow_i16_i8.c \ + $(srcdir)/generated/pow_r4_i8.c \ + $(srcdir)/generated/pow_r8_i8.c \ + $(srcdir)/generated/pow_r10_i8.c \ + $(srcdir)/generated/pow_r16_i8.c \ + $(srcdir)/generated/pow_c4_i8.c \ + $(srcdir)/generated/pow_c8_i8.c \ + $(srcdir)/generated/pow_c10_i8.c \ + $(srcdir)/generated/pow_c16_i8.c \ + $(srcdir)/generated/pow_i4_i16.c \ + $(srcdir)/generated/pow_i8_i16.c \ + $(srcdir)/generated/pow_i16_i16.c \ + $(srcdir)/generated/pow_r4_i16.c \ + $(srcdir)/generated/pow_r8_i16.c \ + $(srcdir)/generated/pow_r10_i16.c \ + $(srcdir)/generated/pow_r16_i16.c \ + $(srcdir)/generated/pow_c4_i16.c \ + $(srcdir)/generated/pow_c8_i16.c \ + $(srcdir)/generated/pow_c10_i16.c \ + $(srcdir)/generated/pow_c16_i16.c \ + $(srcdir)/generated/rrspacing_r4.c \ + $(srcdir)/generated/rrspacing_r8.c \ + $(srcdir)/generated/rrspacing_r10.c \ + $(srcdir)/generated/rrspacing_r16.c \ + $(srcdir)/generated/spacing_r4.c \ + $(srcdir)/generated/spacing_r8.c \ + $(srcdir)/generated/spacing_r10.c \ + $(srcdir)/generated/spacing_r16.c \ + $(srcdir)/generated/pack_i1.c $(srcdir)/generated/pack_i2.c \ + $(srcdir)/generated/pack_i4.c $(srcdir)/generated/pack_i8.c \ + $(srcdir)/generated/pack_i16.c $(srcdir)/generated/pack_r4.c \ + $(srcdir)/generated/pack_r8.c $(srcdir)/generated/pack_r10.c \ + $(srcdir)/generated/pack_r16.c $(srcdir)/generated/pack_c4.c \ + $(srcdir)/generated/pack_c8.c $(srcdir)/generated/pack_c10.c \ + $(srcdir)/generated/pack_c16.c $(srcdir)/generated/unpack_i1.c \ + $(srcdir)/generated/unpack_i2.c \ + $(srcdir)/generated/unpack_i4.c \ + $(srcdir)/generated/unpack_i8.c \ + $(srcdir)/generated/unpack_i16.c \ + $(srcdir)/generated/unpack_r4.c \ + $(srcdir)/generated/unpack_r8.c \ + $(srcdir)/generated/unpack_r10.c \ + $(srcdir)/generated/unpack_r16.c \ + $(srcdir)/generated/unpack_c4.c \ + $(srcdir)/generated/unpack_c8.c \ + $(srcdir)/generated/unpack_c10.c \ + $(srcdir)/generated/unpack_c16.c \ + $(srcdir)/generated/spread_i1.c \ + $(srcdir)/generated/spread_i2.c \ + $(srcdir)/generated/spread_i4.c \ + $(srcdir)/generated/spread_i8.c \ + $(srcdir)/generated/spread_i16.c \ + $(srcdir)/generated/spread_r4.c \ + $(srcdir)/generated/spread_r8.c \ + $(srcdir)/generated/spread_r10.c \ + $(srcdir)/generated/spread_r16.c \ + $(srcdir)/generated/spread_c4.c \ + $(srcdir)/generated/spread_c8.c \ + $(srcdir)/generated/spread_c10.c \ + $(srcdir)/generated/spread_c16.c selected_int_kind.inc \ + selected_real_kind.inc kinds.h \ + $(srcdir)/generated/cshift0_i1.c \ + $(srcdir)/generated/cshift0_i2.c \ + $(srcdir)/generated/cshift0_i4.c \ + $(srcdir)/generated/cshift0_i8.c \ + $(srcdir)/generated/cshift0_i16.c \ + $(srcdir)/generated/cshift0_r4.c \ + $(srcdir)/generated/cshift0_r8.c \ + $(srcdir)/generated/cshift0_r10.c \ + $(srcdir)/generated/cshift0_r16.c \ + $(srcdir)/generated/cshift0_c4.c \ + $(srcdir)/generated/cshift0_c8.c \ + $(srcdir)/generated/cshift0_c10.c \ + $(srcdir)/generated/cshift0_c16.c kinds.inc c99_protos.inc \ + fpu-target.h io/close.c io/file_pos.c io/format.c io/inquire.c \ + io/intrinsics.c io/list_read.c io/lock.c io/open.c io/read.c \ + io/size_from_kind.c io/transfer.c io/unit.c io/unix.c \ + io/write.c io/fbuf.c intrinsics/associated.c \ + intrinsics/abort.c intrinsics/access.c intrinsics/args.c \ + intrinsics/c99_functions.c intrinsics/chdir.c \ + intrinsics/chmod.c intrinsics/clock.c intrinsics/cpu_time.c \ + intrinsics/cshift0.c intrinsics/ctime.c \ + intrinsics/date_and_time.c intrinsics/dtime.c intrinsics/env.c \ + intrinsics/eoshift0.c intrinsics/eoshift2.c \ + intrinsics/erfc_scaled.c intrinsics/etime.c intrinsics/exit.c \ + intrinsics/fnum.c intrinsics/gerror.c intrinsics/getcwd.c \ + intrinsics/getlog.c intrinsics/getXid.c intrinsics/hostnm.c \ + intrinsics/ierrno.c intrinsics/ishftc.c \ + intrinsics/iso_c_generated_procs.c intrinsics/iso_c_binding.c \ + intrinsics/kill.c intrinsics/link.c intrinsics/malloc.c \ + intrinsics/mvbits.c intrinsics/move_alloc.c \ + intrinsics/pack_generic.c intrinsics/perror.c \ + intrinsics/selected_char_kind.c intrinsics/signal.c \ + intrinsics/size.c intrinsics/sleep.c \ + intrinsics/spread_generic.c intrinsics/string_intrinsics.c \ + intrinsics/system.c intrinsics/rand.c intrinsics/random.c \ + intrinsics/rename.c intrinsics/reshape_generic.c \ + intrinsics/reshape_packed.c intrinsics/selected_int_kind.f90 \ + intrinsics/selected_real_kind.f90 intrinsics/stat.c \ + intrinsics/symlnk.c intrinsics/system_clock.c \ + intrinsics/time.c intrinsics/transpose_generic.c \ + intrinsics/umask.c intrinsics/unlink.c \ + intrinsics/unpack_generic.c runtime/in_pack_generic.c \ + runtime/in_unpack_generic.c io/io.h \ + $(srcdir)/generated/_abs_c4.F90 \ + $(srcdir)/generated/_abs_c8.F90 \ + $(srcdir)/generated/_abs_c10.F90 \ + $(srcdir)/generated/_abs_c16.F90 \ + $(srcdir)/generated/_abs_i4.F90 \ + $(srcdir)/generated/_abs_i8.F90 \ + $(srcdir)/generated/_abs_i16.F90 \ + $(srcdir)/generated/_abs_r4.F90 \ + $(srcdir)/generated/_abs_r8.F90 \ + $(srcdir)/generated/_abs_r10.F90 \ + $(srcdir)/generated/_abs_r16.F90 \ + $(srcdir)/generated/_aimag_c4.F90 \ + $(srcdir)/generated/_aimag_c8.F90 \ + $(srcdir)/generated/_aimag_c10.F90 \ + $(srcdir)/generated/_aimag_c16.F90 \ + $(srcdir)/generated/_exp_r4.F90 \ + $(srcdir)/generated/_exp_r8.F90 \ + $(srcdir)/generated/_exp_r10.F90 \ + $(srcdir)/generated/_exp_r16.F90 \ + $(srcdir)/generated/_exp_c4.F90 \ + $(srcdir)/generated/_exp_c8.F90 \ + $(srcdir)/generated/_exp_c10.F90 \ + $(srcdir)/generated/_exp_c16.F90 \ + $(srcdir)/generated/_log_r4.F90 \ + $(srcdir)/generated/_log_r8.F90 \ + $(srcdir)/generated/_log_r10.F90 \ + $(srcdir)/generated/_log_r16.F90 \ + $(srcdir)/generated/_log_c4.F90 \ + $(srcdir)/generated/_log_c8.F90 \ + $(srcdir)/generated/_log_c10.F90 \ + $(srcdir)/generated/_log_c16.F90 \ + $(srcdir)/generated/_log10_r4.F90 \ + $(srcdir)/generated/_log10_r8.F90 \ + $(srcdir)/generated/_log10_r10.F90 \ + $(srcdir)/generated/_log10_r16.F90 \ + $(srcdir)/generated/_sqrt_r4.F90 \ + $(srcdir)/generated/_sqrt_r8.F90 \ + $(srcdir)/generated/_sqrt_r10.F90 \ + $(srcdir)/generated/_sqrt_r16.F90 \ + $(srcdir)/generated/_sqrt_c4.F90 \ + $(srcdir)/generated/_sqrt_c8.F90 \ + $(srcdir)/generated/_sqrt_c10.F90 \ + $(srcdir)/generated/_sqrt_c16.F90 \ + $(srcdir)/generated/_asin_r4.F90 \ + $(srcdir)/generated/_asin_r8.F90 \ + $(srcdir)/generated/_asin_r10.F90 \ + $(srcdir)/generated/_asin_r16.F90 \ + $(srcdir)/generated/_asinh_r4.F90 \ + $(srcdir)/generated/_asinh_r8.F90 \ + $(srcdir)/generated/_asinh_r10.F90 \ + $(srcdir)/generated/_asinh_r16.F90 \ + $(srcdir)/generated/_acos_r4.F90 \ + $(srcdir)/generated/_acos_r8.F90 \ + $(srcdir)/generated/_acos_r10.F90 \ + $(srcdir)/generated/_acos_r16.F90 \ + $(srcdir)/generated/_acosh_r4.F90 \ + $(srcdir)/generated/_acosh_r8.F90 \ + $(srcdir)/generated/_acosh_r10.F90 \ + $(srcdir)/generated/_acosh_r16.F90 \ + $(srcdir)/generated/_atan_r4.F90 \ + $(srcdir)/generated/_atan_r8.F90 \ + $(srcdir)/generated/_atan_r10.F90 \ + $(srcdir)/generated/_atan_r16.F90 \ + $(srcdir)/generated/_atanh_r4.F90 \ + $(srcdir)/generated/_atanh_r8.F90 \ + $(srcdir)/generated/_atanh_r10.F90 \ + $(srcdir)/generated/_atanh_r16.F90 \ + $(srcdir)/generated/_sin_r4.F90 \ + $(srcdir)/generated/_sin_r8.F90 \ + $(srcdir)/generated/_sin_r10.F90 \ + $(srcdir)/generated/_sin_r16.F90 \ + $(srcdir)/generated/_sin_c4.F90 \ + $(srcdir)/generated/_sin_c8.F90 \ + $(srcdir)/generated/_sin_c10.F90 \ + $(srcdir)/generated/_sin_c16.F90 \ + $(srcdir)/generated/_cos_r4.F90 \ + $(srcdir)/generated/_cos_r8.F90 \ + $(srcdir)/generated/_cos_r10.F90 \ + $(srcdir)/generated/_cos_r16.F90 \ + $(srcdir)/generated/_cos_c4.F90 \ + $(srcdir)/generated/_cos_c8.F90 \ + $(srcdir)/generated/_cos_c10.F90 \ + $(srcdir)/generated/_cos_c16.F90 \ + $(srcdir)/generated/_tan_r4.F90 \ + $(srcdir)/generated/_tan_r8.F90 \ + $(srcdir)/generated/_tan_r10.F90 \ + $(srcdir)/generated/_tan_r16.F90 \ + $(srcdir)/generated/_sinh_r4.F90 \ + $(srcdir)/generated/_sinh_r8.F90 \ + $(srcdir)/generated/_sinh_r10.F90 \ + $(srcdir)/generated/_sinh_r16.F90 \ + $(srcdir)/generated/_cosh_r4.F90 \ + $(srcdir)/generated/_cosh_r8.F90 \ + $(srcdir)/generated/_cosh_r10.F90 \ + $(srcdir)/generated/_cosh_r16.F90 \ + $(srcdir)/generated/_tanh_r4.F90 \ + $(srcdir)/generated/_tanh_r8.F90 \ + $(srcdir)/generated/_tanh_r10.F90 \ + $(srcdir)/generated/_tanh_r16.F90 \ + $(srcdir)/generated/_conjg_c4.F90 \ + $(srcdir)/generated/_conjg_c8.F90 \ + $(srcdir)/generated/_conjg_c10.F90 \ + $(srcdir)/generated/_conjg_c16.F90 \ + $(srcdir)/generated/_aint_r4.F90 \ + $(srcdir)/generated/_aint_r8.F90 \ + $(srcdir)/generated/_aint_r10.F90 \ + $(srcdir)/generated/_aint_r16.F90 \ + $(srcdir)/generated/_anint_r4.F90 \ + $(srcdir)/generated/_anint_r8.F90 \ + $(srcdir)/generated/_anint_r10.F90 \ + $(srcdir)/generated/_anint_r16.F90 \ + $(srcdir)/generated/_sign_i4.F90 \ + $(srcdir)/generated/_sign_i8.F90 \ + $(srcdir)/generated/_sign_i16.F90 \ + $(srcdir)/generated/_sign_r4.F90 \ + $(srcdir)/generated/_sign_r8.F90 \ + $(srcdir)/generated/_sign_r10.F90 \ + $(srcdir)/generated/_sign_r16.F90 \ + $(srcdir)/generated/_dim_i4.F90 \ + $(srcdir)/generated/_dim_i8.F90 \ + $(srcdir)/generated/_dim_i16.F90 \ + $(srcdir)/generated/_dim_r4.F90 \ + $(srcdir)/generated/_dim_r8.F90 \ + $(srcdir)/generated/_dim_r10.F90 \ + $(srcdir)/generated/_dim_r16.F90 \ + $(srcdir)/generated/_atan2_r4.F90 \ + $(srcdir)/generated/_atan2_r8.F90 \ + $(srcdir)/generated/_atan2_r10.F90 \ + $(srcdir)/generated/_atan2_r16.F90 \ + $(srcdir)/generated/_mod_i4.F90 \ + $(srcdir)/generated/_mod_i8.F90 \ + $(srcdir)/generated/_mod_i16.F90 \ + $(srcdir)/generated/_mod_r4.F90 \ + $(srcdir)/generated/_mod_r8.F90 \ + $(srcdir)/generated/_mod_r10.F90 \ + $(srcdir)/generated/_mod_r16.F90 \ + $(srcdir)/generated/misc_specifics.F90 intrinsics/dprod_r8.f90 \ + intrinsics/f2c_specifics.F90 libgfortran_c.c $(filter-out \ + %.c,$(prereq_SRC)) +am__objects_1 = backtrace.lo compile_options.lo convert_char.lo \ + environ.lo error.lo fpu.lo main.lo memory.lo pause.lo stop.lo \ + string.lo select.lo +am__objects_2 = all_l1.lo all_l2.lo all_l4.lo all_l8.lo all_l16.lo +am__objects_3 = any_l1.lo any_l2.lo any_l4.lo any_l8.lo any_l16.lo +am__objects_4 = count_1_l.lo count_2_l.lo count_4_l.lo count_8_l.lo \ + count_16_l.lo +am__objects_5 = maxloc0_4_i1.lo maxloc0_8_i1.lo maxloc0_16_i1.lo \ + maxloc0_4_i2.lo maxloc0_8_i2.lo maxloc0_16_i2.lo \ + maxloc0_4_i4.lo maxloc0_8_i4.lo maxloc0_16_i4.lo \ + maxloc0_4_i8.lo maxloc0_8_i8.lo maxloc0_16_i8.lo \ + maxloc0_4_i16.lo maxloc0_8_i16.lo maxloc0_16_i16.lo \ + maxloc0_4_r4.lo maxloc0_8_r4.lo maxloc0_16_r4.lo \ + maxloc0_4_r8.lo maxloc0_8_r8.lo maxloc0_16_r8.lo \ + maxloc0_4_r10.lo maxloc0_8_r10.lo maxloc0_16_r10.lo \ + maxloc0_4_r16.lo maxloc0_8_r16.lo maxloc0_16_r16.lo +am__objects_6 = maxloc1_4_i1.lo maxloc1_8_i1.lo maxloc1_16_i1.lo \ + maxloc1_4_i2.lo maxloc1_8_i2.lo maxloc1_16_i2.lo \ + maxloc1_4_i4.lo maxloc1_8_i4.lo maxloc1_16_i4.lo \ + maxloc1_4_i8.lo maxloc1_8_i8.lo maxloc1_16_i8.lo \ + maxloc1_4_i16.lo maxloc1_8_i16.lo maxloc1_16_i16.lo \ + maxloc1_4_r4.lo maxloc1_8_r4.lo maxloc1_16_r4.lo \ + maxloc1_4_r8.lo maxloc1_8_r8.lo maxloc1_16_r8.lo \ + maxloc1_4_r10.lo maxloc1_8_r10.lo maxloc1_16_r10.lo \ + maxloc1_4_r16.lo maxloc1_8_r16.lo maxloc1_16_r16.lo +am__objects_7 = maxval_i1.lo maxval_i2.lo maxval_i4.lo maxval_i8.lo \ + maxval_i16.lo maxval_r4.lo maxval_r8.lo maxval_r10.lo \ + maxval_r16.lo +am__objects_8 = minloc0_4_i1.lo minloc0_8_i1.lo minloc0_16_i1.lo \ + minloc0_4_i2.lo minloc0_8_i2.lo minloc0_16_i2.lo \ + minloc0_4_i4.lo minloc0_8_i4.lo minloc0_16_i4.lo \ + minloc0_4_i8.lo minloc0_8_i8.lo minloc0_16_i8.lo \ + minloc0_4_i16.lo minloc0_8_i16.lo minloc0_16_i16.lo \ + minloc0_4_r4.lo minloc0_8_r4.lo minloc0_16_r4.lo \ + minloc0_4_r8.lo minloc0_8_r8.lo minloc0_16_r8.lo \ + minloc0_4_r10.lo minloc0_8_r10.lo minloc0_16_r10.lo \ + minloc0_4_r16.lo minloc0_8_r16.lo minloc0_16_r16.lo +am__objects_9 = minloc1_4_i1.lo minloc1_8_i1.lo minloc1_16_i1.lo \ + minloc1_4_i2.lo minloc1_8_i2.lo minloc1_16_i2.lo \ + minloc1_4_i4.lo minloc1_8_i4.lo minloc1_16_i4.lo \ + minloc1_4_i8.lo minloc1_8_i8.lo minloc1_16_i8.lo \ + minloc1_4_i16.lo minloc1_8_i16.lo minloc1_16_i16.lo \ + minloc1_4_r4.lo minloc1_8_r4.lo minloc1_16_r4.lo \ + minloc1_4_r8.lo minloc1_8_r8.lo minloc1_16_r8.lo \ + minloc1_4_r10.lo minloc1_8_r10.lo minloc1_16_r10.lo \ + minloc1_4_r16.lo minloc1_8_r16.lo minloc1_16_r16.lo +am__objects_10 = minval_i1.lo minval_i2.lo minval_i4.lo minval_i8.lo \ + minval_i16.lo minval_r4.lo minval_r8.lo minval_r10.lo \ + minval_r16.lo +am__objects_11 = product_i1.lo product_i2.lo product_i4.lo \ + product_i8.lo product_i16.lo product_r4.lo product_r8.lo \ + product_r10.lo product_r16.lo product_c4.lo product_c8.lo \ + product_c10.lo product_c16.lo +am__objects_12 = sum_i1.lo sum_i2.lo sum_i4.lo sum_i8.lo sum_i16.lo \ + sum_r4.lo sum_r8.lo sum_r10.lo sum_r16.lo sum_c4.lo sum_c8.lo \ + sum_c10.lo sum_c16.lo +am__objects_13 = matmul_i1.lo matmul_i2.lo matmul_i4.lo matmul_i8.lo \ + matmul_i16.lo matmul_r4.lo matmul_r8.lo matmul_r10.lo \ + matmul_r16.lo matmul_c4.lo matmul_c8.lo matmul_c10.lo \ + matmul_c16.lo +am__objects_14 = matmul_l4.lo matmul_l8.lo matmul_l16.lo +am__objects_15 = transpose_i4.lo transpose_i8.lo transpose_i16.lo \ + transpose_r4.lo transpose_r8.lo transpose_r10.lo \ + transpose_r16.lo transpose_c4.lo transpose_c8.lo \ + transpose_c10.lo transpose_c16.lo +am__objects_16 = shape_i4.lo shape_i8.lo shape_i16.lo +am__objects_17 = eoshift1_4.lo eoshift1_8.lo eoshift1_16.lo +am__objects_18 = eoshift3_4.lo eoshift3_8.lo eoshift3_16.lo +am__objects_19 = cshift1_4.lo cshift1_8.lo cshift1_16.lo +am__objects_20 = reshape_i4.lo reshape_i8.lo reshape_i16.lo \ + reshape_r4.lo reshape_r8.lo reshape_r10.lo reshape_r16.lo \ + reshape_c4.lo reshape_c8.lo reshape_c10.lo reshape_c16.lo +am__objects_21 = in_pack_i1.lo in_pack_i2.lo in_pack_i4.lo \ + in_pack_i8.lo in_pack_i16.lo in_pack_r4.lo in_pack_r8.lo \ + in_pack_r10.lo in_pack_r16.lo in_pack_c4.lo in_pack_c8.lo \ + in_pack_c10.lo in_pack_c16.lo +am__objects_22 = in_unpack_i1.lo in_unpack_i2.lo in_unpack_i4.lo \ + in_unpack_i8.lo in_unpack_i16.lo in_unpack_r4.lo \ + in_unpack_r8.lo in_unpack_r10.lo in_unpack_r16.lo \ + in_unpack_c4.lo in_unpack_c8.lo in_unpack_c10.lo \ + in_unpack_c16.lo +am__objects_23 = exponent_r4.lo exponent_r8.lo exponent_r10.lo \ + exponent_r16.lo +am__objects_24 = fraction_r4.lo fraction_r8.lo fraction_r10.lo \ + fraction_r16.lo +am__objects_25 = nearest_r4.lo nearest_r8.lo nearest_r10.lo \ + nearest_r16.lo +am__objects_26 = set_exponent_r4.lo set_exponent_r8.lo \ + set_exponent_r10.lo set_exponent_r16.lo +am__objects_27 = pow_i4_i4.lo pow_i8_i4.lo pow_i16_i4.lo pow_c4_i4.lo \ + pow_c8_i4.lo pow_c10_i4.lo pow_c16_i4.lo pow_i4_i8.lo \ + pow_i8_i8.lo pow_i16_i8.lo pow_r4_i8.lo pow_r8_i8.lo \ + pow_r10_i8.lo pow_r16_i8.lo pow_c4_i8.lo pow_c8_i8.lo \ + pow_c10_i8.lo pow_c16_i8.lo pow_i4_i16.lo pow_i8_i16.lo \ + pow_i16_i16.lo pow_r4_i16.lo pow_r8_i16.lo pow_r10_i16.lo \ + pow_r16_i16.lo pow_c4_i16.lo pow_c8_i16.lo pow_c10_i16.lo \ + pow_c16_i16.lo +am__objects_28 = rrspacing_r4.lo rrspacing_r8.lo rrspacing_r10.lo \ + rrspacing_r16.lo +am__objects_29 = spacing_r4.lo spacing_r8.lo spacing_r10.lo \ + spacing_r16.lo +am__objects_30 = pack_i1.lo pack_i2.lo pack_i4.lo pack_i8.lo \ + pack_i16.lo pack_r4.lo pack_r8.lo pack_r10.lo pack_r16.lo \ + pack_c4.lo pack_c8.lo pack_c10.lo pack_c16.lo +am__objects_31 = unpack_i1.lo unpack_i2.lo unpack_i4.lo unpack_i8.lo \ + unpack_i16.lo unpack_r4.lo unpack_r8.lo unpack_r10.lo \ + unpack_r16.lo unpack_c4.lo unpack_c8.lo unpack_c10.lo \ + unpack_c16.lo +am__objects_32 = spread_i1.lo spread_i2.lo spread_i4.lo spread_i8.lo \ + spread_i16.lo spread_r4.lo spread_r8.lo spread_r10.lo \ + spread_r16.lo spread_c4.lo spread_c8.lo spread_c10.lo \ + spread_c16.lo +am__objects_33 = cshift0_i1.lo cshift0_i2.lo cshift0_i4.lo \ + cshift0_i8.lo cshift0_i16.lo cshift0_r4.lo cshift0_r8.lo \ + cshift0_r10.lo cshift0_r16.lo cshift0_c4.lo cshift0_c8.lo \ + cshift0_c10.lo cshift0_c16.lo +am__objects_34 = $(am__objects_2) $(am__objects_3) $(am__objects_4) \ + $(am__objects_5) $(am__objects_6) $(am__objects_7) \ + $(am__objects_8) $(am__objects_9) $(am__objects_10) \ + $(am__objects_11) $(am__objects_12) $(am__objects_13) \ + $(am__objects_14) $(am__objects_15) $(am__objects_16) \ + $(am__objects_17) $(am__objects_18) $(am__objects_19) \ + $(am__objects_20) $(am__objects_21) $(am__objects_22) \ + $(am__objects_23) $(am__objects_24) $(am__objects_25) \ + $(am__objects_26) $(am__objects_27) $(am__objects_28) \ + $(am__objects_29) $(am__objects_30) $(am__objects_31) \ + $(am__objects_32) $(am__objects_33) +am__objects_35 = close.lo file_pos.lo format.lo inquire.lo \ + intrinsics.lo list_read.lo lock.lo open.lo read.lo \ + size_from_kind.lo transfer.lo unit.lo unix.lo write.lo fbuf.lo +am__objects_36 = associated.lo abort.lo access.lo args.lo \ + c99_functions.lo chdir.lo chmod.lo clock.lo cpu_time.lo \ + cshift0.lo ctime.lo date_and_time.lo dtime.lo env.lo \ + eoshift0.lo eoshift2.lo erfc_scaled.lo etime.lo exit.lo \ + fnum.lo gerror.lo getcwd.lo getlog.lo getXid.lo hostnm.lo \ + ierrno.lo ishftc.lo iso_c_generated_procs.lo iso_c_binding.lo \ + kill.lo link.lo malloc.lo mvbits.lo move_alloc.lo \ + pack_generic.lo perror.lo selected_char_kind.lo signal.lo \ + size.lo sleep.lo spread_generic.lo string_intrinsics.lo \ + system.lo rand.lo random.lo rename.lo reshape_generic.lo \ + reshape_packed.lo selected_int_kind.lo selected_real_kind.lo \ + stat.lo symlnk.lo system_clock.lo time.lo transpose_generic.lo \ + umask.lo unlink.lo unpack_generic.lo in_pack_generic.lo \ + in_unpack_generic.lo +am__objects_37 = +am__objects_38 = _abs_c4.lo _abs_c8.lo _abs_c10.lo _abs_c16.lo \ + _abs_i4.lo _abs_i8.lo _abs_i16.lo _abs_r4.lo _abs_r8.lo \ + _abs_r10.lo _abs_r16.lo _aimag_c4.lo _aimag_c8.lo \ + _aimag_c10.lo _aimag_c16.lo _exp_r4.lo _exp_r8.lo _exp_r10.lo \ + _exp_r16.lo _exp_c4.lo _exp_c8.lo _exp_c10.lo _exp_c16.lo \ + _log_r4.lo _log_r8.lo _log_r10.lo _log_r16.lo _log_c4.lo \ + _log_c8.lo _log_c10.lo _log_c16.lo _log10_r4.lo _log10_r8.lo \ + _log10_r10.lo _log10_r16.lo _sqrt_r4.lo _sqrt_r8.lo \ + _sqrt_r10.lo _sqrt_r16.lo _sqrt_c4.lo _sqrt_c8.lo _sqrt_c10.lo \ + _sqrt_c16.lo _asin_r4.lo _asin_r8.lo _asin_r10.lo _asin_r16.lo \ + _asinh_r4.lo _asinh_r8.lo _asinh_r10.lo _asinh_r16.lo \ + _acos_r4.lo _acos_r8.lo _acos_r10.lo _acos_r16.lo _acosh_r4.lo \ + _acosh_r8.lo _acosh_r10.lo _acosh_r16.lo _atan_r4.lo \ + _atan_r8.lo _atan_r10.lo _atan_r16.lo _atanh_r4.lo \ + _atanh_r8.lo _atanh_r10.lo _atanh_r16.lo _sin_r4.lo _sin_r8.lo \ + _sin_r10.lo _sin_r16.lo _sin_c4.lo _sin_c8.lo _sin_c10.lo \ + _sin_c16.lo _cos_r4.lo _cos_r8.lo _cos_r10.lo _cos_r16.lo \ + _cos_c4.lo _cos_c8.lo _cos_c10.lo _cos_c16.lo _tan_r4.lo \ + _tan_r8.lo _tan_r10.lo _tan_r16.lo _sinh_r4.lo _sinh_r8.lo \ + _sinh_r10.lo _sinh_r16.lo _cosh_r4.lo _cosh_r8.lo _cosh_r10.lo \ + _cosh_r16.lo _tanh_r4.lo _tanh_r8.lo _tanh_r10.lo _tanh_r16.lo \ + _conjg_c4.lo _conjg_c8.lo _conjg_c10.lo _conjg_c16.lo \ + _aint_r4.lo _aint_r8.lo _aint_r10.lo _aint_r16.lo _anint_r4.lo \ + _anint_r8.lo _anint_r10.lo _anint_r16.lo +am__objects_39 = _sign_i4.lo _sign_i8.lo _sign_i16.lo _sign_r4.lo \ + _sign_r8.lo _sign_r10.lo _sign_r16.lo _dim_i4.lo _dim_i8.lo \ + _dim_i16.lo _dim_r4.lo _dim_r8.lo _dim_r10.lo _dim_r16.lo \ + _atan2_r4.lo _atan2_r8.lo _atan2_r10.lo _atan2_r16.lo \ + _mod_i4.lo _mod_i8.lo _mod_i16.lo _mod_r4.lo _mod_r8.lo \ + _mod_r10.lo _mod_r16.lo +am__objects_40 = misc_specifics.lo +am__objects_41 = $(am__objects_38) $(am__objects_39) $(am__objects_40) \ + dprod_r8.lo f2c_specifics.lo +am__objects_42 = $(am__objects_1) $(am__objects_34) $(am__objects_35) \ + $(am__objects_36) $(am__objects_37) $(am__objects_41) +@onestep_FALSE@am_libgfortran_la_OBJECTS = $(am__objects_42) +@onestep_TRUE@am_libgfortran_la_OBJECTS = libgfortran_c.lo +libgfortran_la_OBJECTS = $(am_libgfortran_la_OBJECTS) +libgfortranbegin_la_LIBADD = +am_libgfortranbegin_la_OBJECTS = fmain.lo +libgfortranbegin_la_OBJECTS = $(am_libgfortranbegin_la_OBJECTS) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I. +depcomp = $(SHELL) $(top_srcdir)/../depcomp +am__depfiles_maybe = depfiles +PPFCCOMPILE = $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) +LTPPFCCOMPILE = $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_FCFLAGS) $(FCFLAGS) +FCLD = $(FC) +FCLINK = $(LIBTOOL) --tag=FC --mode=link $(FCLD) $(AM_FCFLAGS) \ + $(FCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS) +LTFCCOMPILE = $(LIBTOOL) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS) +SOURCES = $(libgfortran_la_SOURCES) $(libgfortranbegin_la_SOURCES) +DIST_SOURCES = $(am__libgfortran_la_SOURCES_DIST) \ + $(libgfortranbegin_la_SOURCES) +MULTISRCTOP = +MULTIBUILDTOP = +MULTIDIRS = +MULTISUBDIR = +MULTIDO = true +MULTICLEAN = true +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d $(distdir) \ + || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr $(distdir); }; } +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ + +# Fortran rules for complex multiplication and division +AM_CFLAGS = @AM_CFLAGS@ -fcx-fortran-rules +AM_FCFLAGS = @AM_FCFLAGS@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FC = @FC@ +FCFLAGS = @FCFLAGS@ +FGREP = @FGREP@ +FPU_HOST_HEADER = @FPU_HOST_HEADER@ +GREP = @GREP@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGFOR_USE_SYMVER_FALSE = @LIBGFOR_USE_SYMVER_FALSE@ +LIBGFOR_USE_SYMVER_TRUE = @LIBGFOR_USE_SYMVER_TRUE@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_AS = @ac_ct_AS@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DSYMUTIL = @ac_ct_DSYMUTIL@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_FC = @ac_ct_FC@ +ac_ct_LIPO = @ac_ct_LIPO@ +ac_ct_NMEDIT = @ac_ct_NMEDIT@ +ac_ct_OBJDUMP = @ac_ct_OBJDUMP@ +ac_ct_OTOOL = @ac_ct_OTOOL@ +ac_ct_OTOOL64 = @ac_ct_OTOOL64@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_libsubdir = @build_libsubdir@ +build_os = @build_os@ +build_subdir = @build_subdir@ +build_vendor = @build_vendor@ +datadir = @datadir@ +enable_shared = @enable_shared@ +enable_static = @enable_static@ +exec_prefix = @exec_prefix@ +extra_ldflags_libgfortran = @extra_ldflags_libgfortran@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_subdir = @host_subdir@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +multi_basedir = @multi_basedir@ +oldincludedir = @oldincludedir@ +onestep = @onestep@ +onestep_FALSE = @onestep_FALSE@ +onestep_TRUE = @onestep_TRUE@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_subdir = @target_subdir@ +target_vendor = @target_vendor@ +toolexecdir = @toolexecdir@ +toolexeclibdir = @toolexeclibdir@ +ACLOCAL_AMFLAGS = -I .. -I ../config +gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) +@LIBGFOR_USE_SYMVER_FALSE@version_arg = +@LIBGFOR_USE_SYMVER_TRUE@version_arg = -Wl,--version-script=$(srcdir)/gfortran.map +LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) +toolexeclib_LTLIBRARIES = libgfortran.la +libgfortran_la_LINK = $(LINK) +libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) -lm $(extra_ldflags_libgfortran) $(version_arg) +myexeclib_LTLIBRARIES = libgfortranbegin.la +myexeclibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR) +libgfortranbegin_la_SOURCES = fmain.c +libgfortranbegin_la_LDFLAGS = -static +AM_CPPFLAGS = -iquote$(srcdir)/io -I$(srcdir)/$(MULTISRCTOP)../gcc \ + -I$(srcdir)/$(MULTISRCTOP)../gcc/config \ + -I$(MULTIBUILDTOP)../../$(host_subdir)/gcc -D_GNU_SOURCE + +gfor_io_src = \ +io/close.c \ +io/file_pos.c \ +io/format.c \ +io/inquire.c \ +io/intrinsics.c \ +io/list_read.c \ +io/lock.c \ +io/open.c \ +io/read.c \ +io/size_from_kind.c \ +io/transfer.c \ +io/unit.c \ +io/unix.c \ +io/write.c \ +io/fbuf.c + +gfor_io_headers = \ +io/io.h + +gfor_helper_src = \ +intrinsics/associated.c \ +intrinsics/abort.c \ +intrinsics/access.c \ +intrinsics/args.c \ +intrinsics/c99_functions.c \ +intrinsics/chdir.c \ +intrinsics/chmod.c \ +intrinsics/clock.c \ +intrinsics/cpu_time.c \ +intrinsics/cshift0.c \ +intrinsics/ctime.c \ +intrinsics/date_and_time.c \ +intrinsics/dtime.c \ +intrinsics/env.c \ +intrinsics/eoshift0.c \ +intrinsics/eoshift2.c \ +intrinsics/erfc_scaled.c \ +intrinsics/etime.c \ +intrinsics/exit.c \ +intrinsics/fnum.c \ +intrinsics/gerror.c \ +intrinsics/getcwd.c \ +intrinsics/getlog.c \ +intrinsics/getXid.c \ +intrinsics/hostnm.c \ +intrinsics/ierrno.c \ +intrinsics/ishftc.c \ +intrinsics/iso_c_generated_procs.c \ +intrinsics/iso_c_binding.c \ +intrinsics/kill.c \ +intrinsics/link.c \ +intrinsics/malloc.c \ +intrinsics/mvbits.c \ +intrinsics/move_alloc.c \ +intrinsics/pack_generic.c \ +intrinsics/perror.c \ +intrinsics/selected_char_kind.c \ +intrinsics/signal.c \ +intrinsics/size.c \ +intrinsics/sleep.c \ +intrinsics/spread_generic.c \ +intrinsics/string_intrinsics.c \ +intrinsics/system.c \ +intrinsics/rand.c \ +intrinsics/random.c \ +intrinsics/rename.c \ +intrinsics/reshape_generic.c \ +intrinsics/reshape_packed.c \ +intrinsics/selected_int_kind.f90 \ +intrinsics/selected_real_kind.f90 \ +intrinsics/stat.c \ +intrinsics/symlnk.c \ +intrinsics/system_clock.c \ +intrinsics/time.c \ +intrinsics/transpose_generic.c \ +intrinsics/umask.c \ +intrinsics/unlink.c \ +intrinsics/unpack_generic.c \ +runtime/in_pack_generic.c \ +runtime/in_unpack_generic.c + +gfor_src = \ +runtime/backtrace.c \ +runtime/compile_options.c \ +runtime/convert_char.c \ +runtime/environ.c \ +runtime/error.c \ +runtime/fpu.c \ +runtime/main.c \ +runtime/memory.c \ +runtime/pause.c \ +runtime/stop.c \ +runtime/string.c \ +runtime/select.c + +i_all_c = \ +$(srcdir)/generated/all_l1.c \ +$(srcdir)/generated/all_l2.c \ +$(srcdir)/generated/all_l4.c \ +$(srcdir)/generated/all_l8.c \ +$(srcdir)/generated/all_l16.c + +i_any_c = \ +$(srcdir)/generated/any_l1.c \ +$(srcdir)/generated/any_l2.c \ +$(srcdir)/generated/any_l4.c \ +$(srcdir)/generated/any_l8.c \ +$(srcdir)/generated/any_l16.c + +i_count_c = \ +$(srcdir)/generated/count_1_l.c \ +$(srcdir)/generated/count_2_l.c \ +$(srcdir)/generated/count_4_l.c \ +$(srcdir)/generated/count_8_l.c \ +$(srcdir)/generated/count_16_l.c + +i_maxloc0_c = \ +$(srcdir)/generated/maxloc0_4_i1.c \ +$(srcdir)/generated/maxloc0_8_i1.c \ +$(srcdir)/generated/maxloc0_16_i1.c \ +$(srcdir)/generated/maxloc0_4_i2.c \ +$(srcdir)/generated/maxloc0_8_i2.c \ +$(srcdir)/generated/maxloc0_16_i2.c \ +$(srcdir)/generated/maxloc0_4_i4.c \ +$(srcdir)/generated/maxloc0_8_i4.c \ +$(srcdir)/generated/maxloc0_16_i4.c \ +$(srcdir)/generated/maxloc0_4_i8.c \ +$(srcdir)/generated/maxloc0_8_i8.c \ +$(srcdir)/generated/maxloc0_16_i8.c \ +$(srcdir)/generated/maxloc0_4_i16.c \ +$(srcdir)/generated/maxloc0_8_i16.c \ +$(srcdir)/generated/maxloc0_16_i16.c \ +$(srcdir)/generated/maxloc0_4_r4.c \ +$(srcdir)/generated/maxloc0_8_r4.c \ +$(srcdir)/generated/maxloc0_16_r4.c \ +$(srcdir)/generated/maxloc0_4_r8.c \ +$(srcdir)/generated/maxloc0_8_r8.c \ +$(srcdir)/generated/maxloc0_16_r8.c \ +$(srcdir)/generated/maxloc0_4_r10.c \ +$(srcdir)/generated/maxloc0_8_r10.c \ +$(srcdir)/generated/maxloc0_16_r10.c \ +$(srcdir)/generated/maxloc0_4_r16.c \ +$(srcdir)/generated/maxloc0_8_r16.c \ +$(srcdir)/generated/maxloc0_16_r16.c + +i_maxloc1_c = \ +$(srcdir)/generated/maxloc1_4_i1.c \ +$(srcdir)/generated/maxloc1_8_i1.c \ +$(srcdir)/generated/maxloc1_16_i1.c \ +$(srcdir)/generated/maxloc1_4_i2.c \ +$(srcdir)/generated/maxloc1_8_i2.c \ +$(srcdir)/generated/maxloc1_16_i2.c \ +$(srcdir)/generated/maxloc1_4_i4.c \ +$(srcdir)/generated/maxloc1_8_i4.c \ +$(srcdir)/generated/maxloc1_16_i4.c \ +$(srcdir)/generated/maxloc1_4_i8.c \ +$(srcdir)/generated/maxloc1_8_i8.c \ +$(srcdir)/generated/maxloc1_16_i8.c \ +$(srcdir)/generated/maxloc1_4_i16.c \ +$(srcdir)/generated/maxloc1_8_i16.c \ +$(srcdir)/generated/maxloc1_16_i16.c \ +$(srcdir)/generated/maxloc1_4_r4.c \ +$(srcdir)/generated/maxloc1_8_r4.c \ +$(srcdir)/generated/maxloc1_16_r4.c \ +$(srcdir)/generated/maxloc1_4_r8.c \ +$(srcdir)/generated/maxloc1_8_r8.c \ +$(srcdir)/generated/maxloc1_16_r8.c \ +$(srcdir)/generated/maxloc1_4_r10.c \ +$(srcdir)/generated/maxloc1_8_r10.c \ +$(srcdir)/generated/maxloc1_16_r10.c \ +$(srcdir)/generated/maxloc1_4_r16.c \ +$(srcdir)/generated/maxloc1_8_r16.c \ +$(srcdir)/generated/maxloc1_16_r16.c + +i_maxval_c = \ +$(srcdir)/generated/maxval_i1.c \ +$(srcdir)/generated/maxval_i2.c \ +$(srcdir)/generated/maxval_i4.c \ +$(srcdir)/generated/maxval_i8.c \ +$(srcdir)/generated/maxval_i16.c \ +$(srcdir)/generated/maxval_r4.c \ +$(srcdir)/generated/maxval_r8.c \ +$(srcdir)/generated/maxval_r10.c \ +$(srcdir)/generated/maxval_r16.c + +i_minloc0_c = \ +$(srcdir)/generated/minloc0_4_i1.c \ +$(srcdir)/generated/minloc0_8_i1.c \ +$(srcdir)/generated/minloc0_16_i1.c \ +$(srcdir)/generated/minloc0_4_i2.c \ +$(srcdir)/generated/minloc0_8_i2.c \ +$(srcdir)/generated/minloc0_16_i2.c \ +$(srcdir)/generated/minloc0_4_i4.c \ +$(srcdir)/generated/minloc0_8_i4.c \ +$(srcdir)/generated/minloc0_16_i4.c \ +$(srcdir)/generated/minloc0_4_i8.c \ +$(srcdir)/generated/minloc0_8_i8.c \ +$(srcdir)/generated/minloc0_16_i8.c \ +$(srcdir)/generated/minloc0_4_i16.c \ +$(srcdir)/generated/minloc0_8_i16.c \ +$(srcdir)/generated/minloc0_16_i16.c \ +$(srcdir)/generated/minloc0_4_r4.c \ +$(srcdir)/generated/minloc0_8_r4.c \ +$(srcdir)/generated/minloc0_16_r4.c \ +$(srcdir)/generated/minloc0_4_r8.c \ +$(srcdir)/generated/minloc0_8_r8.c \ +$(srcdir)/generated/minloc0_16_r8.c \ +$(srcdir)/generated/minloc0_4_r10.c \ +$(srcdir)/generated/minloc0_8_r10.c \ +$(srcdir)/generated/minloc0_16_r10.c \ +$(srcdir)/generated/minloc0_4_r16.c \ +$(srcdir)/generated/minloc0_8_r16.c \ +$(srcdir)/generated/minloc0_16_r16.c + +i_minloc1_c = \ +$(srcdir)/generated/minloc1_4_i1.c \ +$(srcdir)/generated/minloc1_8_i1.c \ +$(srcdir)/generated/minloc1_16_i1.c \ +$(srcdir)/generated/minloc1_4_i2.c \ +$(srcdir)/generated/minloc1_8_i2.c \ +$(srcdir)/generated/minloc1_16_i2.c \ +$(srcdir)/generated/minloc1_4_i4.c \ +$(srcdir)/generated/minloc1_8_i4.c \ +$(srcdir)/generated/minloc1_16_i4.c \ +$(srcdir)/generated/minloc1_4_i8.c \ +$(srcdir)/generated/minloc1_8_i8.c \ +$(srcdir)/generated/minloc1_16_i8.c \ +$(srcdir)/generated/minloc1_4_i16.c \ +$(srcdir)/generated/minloc1_8_i16.c \ +$(srcdir)/generated/minloc1_16_i16.c \ +$(srcdir)/generated/minloc1_4_r4.c \ +$(srcdir)/generated/minloc1_8_r4.c \ +$(srcdir)/generated/minloc1_16_r4.c \ +$(srcdir)/generated/minloc1_4_r8.c \ +$(srcdir)/generated/minloc1_8_r8.c \ +$(srcdir)/generated/minloc1_16_r8.c \ +$(srcdir)/generated/minloc1_4_r10.c \ +$(srcdir)/generated/minloc1_8_r10.c \ +$(srcdir)/generated/minloc1_16_r10.c \ +$(srcdir)/generated/minloc1_4_r16.c \ +$(srcdir)/generated/minloc1_8_r16.c \ +$(srcdir)/generated/minloc1_16_r16.c + +i_minval_c = \ +$(srcdir)/generated/minval_i1.c \ +$(srcdir)/generated/minval_i2.c \ +$(srcdir)/generated/minval_i4.c \ +$(srcdir)/generated/minval_i8.c \ +$(srcdir)/generated/minval_i16.c \ +$(srcdir)/generated/minval_r4.c \ +$(srcdir)/generated/minval_r8.c \ +$(srcdir)/generated/minval_r10.c \ +$(srcdir)/generated/minval_r16.c + +i_sum_c = \ +$(srcdir)/generated/sum_i1.c \ +$(srcdir)/generated/sum_i2.c \ +$(srcdir)/generated/sum_i4.c \ +$(srcdir)/generated/sum_i8.c \ +$(srcdir)/generated/sum_i16.c \ +$(srcdir)/generated/sum_r4.c \ +$(srcdir)/generated/sum_r8.c \ +$(srcdir)/generated/sum_r10.c \ +$(srcdir)/generated/sum_r16.c \ +$(srcdir)/generated/sum_c4.c \ +$(srcdir)/generated/sum_c8.c \ +$(srcdir)/generated/sum_c10.c \ +$(srcdir)/generated/sum_c16.c + +i_product_c = \ +$(srcdir)/generated/product_i1.c \ +$(srcdir)/generated/product_i2.c \ +$(srcdir)/generated/product_i4.c \ +$(srcdir)/generated/product_i8.c \ +$(srcdir)/generated/product_i16.c \ +$(srcdir)/generated/product_r4.c \ +$(srcdir)/generated/product_r8.c \ +$(srcdir)/generated/product_r10.c \ +$(srcdir)/generated/product_r16.c \ +$(srcdir)/generated/product_c4.c \ +$(srcdir)/generated/product_c8.c \ +$(srcdir)/generated/product_c10.c \ +$(srcdir)/generated/product_c16.c + +i_matmul_c = \ +$(srcdir)/generated/matmul_i1.c \ +$(srcdir)/generated/matmul_i2.c \ +$(srcdir)/generated/matmul_i4.c \ +$(srcdir)/generated/matmul_i8.c \ +$(srcdir)/generated/matmul_i16.c \ +$(srcdir)/generated/matmul_r4.c \ +$(srcdir)/generated/matmul_r8.c \ +$(srcdir)/generated/matmul_r10.c \ +$(srcdir)/generated/matmul_r16.c \ +$(srcdir)/generated/matmul_c4.c \ +$(srcdir)/generated/matmul_c8.c \ +$(srcdir)/generated/matmul_c10.c \ +$(srcdir)/generated/matmul_c16.c + +i_matmull_c = \ +$(srcdir)/generated/matmul_l4.c \ +$(srcdir)/generated/matmul_l8.c \ +$(srcdir)/generated/matmul_l16.c + +i_transpose_c = \ +$(srcdir)/generated/transpose_i4.c \ +$(srcdir)/generated/transpose_i8.c \ +$(srcdir)/generated/transpose_i16.c \ +$(srcdir)/generated/transpose_r4.c \ +$(srcdir)/generated/transpose_r8.c \ +$(srcdir)/generated/transpose_r10.c \ +$(srcdir)/generated/transpose_r16.c \ +$(srcdir)/generated/transpose_c4.c \ +$(srcdir)/generated/transpose_c8.c \ +$(srcdir)/generated/transpose_c10.c \ +$(srcdir)/generated/transpose_c16.c + +i_shape_c = \ +$(srcdir)/generated/shape_i4.c \ +$(srcdir)/generated/shape_i8.c \ +$(srcdir)/generated/shape_i16.c + +i_reshape_c = \ +$(srcdir)/generated/reshape_i4.c \ +$(srcdir)/generated/reshape_i8.c \ +$(srcdir)/generated/reshape_i16.c \ +$(srcdir)/generated/reshape_r4.c \ +$(srcdir)/generated/reshape_r8.c \ +$(srcdir)/generated/reshape_r10.c \ +$(srcdir)/generated/reshape_r16.c \ +$(srcdir)/generated/reshape_c4.c \ +$(srcdir)/generated/reshape_c8.c \ +$(srcdir)/generated/reshape_c10.c \ +$(srcdir)/generated/reshape_c16.c + +i_eoshift1_c = \ +$(srcdir)/generated/eoshift1_4.c \ +$(srcdir)/generated/eoshift1_8.c \ +$(srcdir)/generated/eoshift1_16.c + +i_eoshift3_c = \ +$(srcdir)/generated/eoshift3_4.c \ +$(srcdir)/generated/eoshift3_8.c \ +$(srcdir)/generated/eoshift3_16.c + +i_cshift0_c = \ +$(srcdir)/generated/cshift0_i1.c \ +$(srcdir)/generated/cshift0_i2.c \ +$(srcdir)/generated/cshift0_i4.c \ +$(srcdir)/generated/cshift0_i8.c \ +$(srcdir)/generated/cshift0_i16.c \ +$(srcdir)/generated/cshift0_r4.c \ +$(srcdir)/generated/cshift0_r8.c \ +$(srcdir)/generated/cshift0_r10.c \ +$(srcdir)/generated/cshift0_r16.c \ +$(srcdir)/generated/cshift0_c4.c \ +$(srcdir)/generated/cshift0_c8.c \ +$(srcdir)/generated/cshift0_c10.c \ +$(srcdir)/generated/cshift0_c16.c + +i_cshift1_c = \ +$(srcdir)/generated/cshift1_4.c \ +$(srcdir)/generated/cshift1_8.c \ +$(srcdir)/generated/cshift1_16.c + +in_pack_c = \ +$(srcdir)/generated/in_pack_i1.c \ +$(srcdir)/generated/in_pack_i2.c \ +$(srcdir)/generated/in_pack_i4.c \ +$(srcdir)/generated/in_pack_i8.c \ +$(srcdir)/generated/in_pack_i16.c \ +$(srcdir)/generated/in_pack_r4.c \ +$(srcdir)/generated/in_pack_r8.c \ +$(srcdir)/generated/in_pack_r10.c \ +$(srcdir)/generated/in_pack_r16.c \ +$(srcdir)/generated/in_pack_c4.c \ +$(srcdir)/generated/in_pack_c8.c \ +$(srcdir)/generated/in_pack_c10.c \ +$(srcdir)/generated/in_pack_c16.c + +in_unpack_c = \ +$(srcdir)/generated/in_unpack_i1.c \ +$(srcdir)/generated/in_unpack_i2.c \ +$(srcdir)/generated/in_unpack_i4.c \ +$(srcdir)/generated/in_unpack_i8.c \ +$(srcdir)/generated/in_unpack_i16.c \ +$(srcdir)/generated/in_unpack_r4.c \ +$(srcdir)/generated/in_unpack_r8.c \ +$(srcdir)/generated/in_unpack_r10.c \ +$(srcdir)/generated/in_unpack_r16.c \ +$(srcdir)/generated/in_unpack_c4.c \ +$(srcdir)/generated/in_unpack_c8.c \ +$(srcdir)/generated/in_unpack_c10.c \ +$(srcdir)/generated/in_unpack_c16.c + +i_exponent_c = \ +$(srcdir)/generated/exponent_r4.c \ +$(srcdir)/generated/exponent_r8.c \ +$(srcdir)/generated/exponent_r10.c \ +$(srcdir)/generated/exponent_r16.c + +i_spacing_c = \ +$(srcdir)/generated/spacing_r4.c \ +$(srcdir)/generated/spacing_r8.c \ +$(srcdir)/generated/spacing_r10.c \ +$(srcdir)/generated/spacing_r16.c + +i_rrspacing_c = \ +$(srcdir)/generated/rrspacing_r4.c \ +$(srcdir)/generated/rrspacing_r8.c \ +$(srcdir)/generated/rrspacing_r10.c \ +$(srcdir)/generated/rrspacing_r16.c + +i_fraction_c = \ +$(srcdir)/generated/fraction_r4.c \ +$(srcdir)/generated/fraction_r8.c \ +$(srcdir)/generated/fraction_r10.c \ +$(srcdir)/generated/fraction_r16.c + +i_nearest_c = \ +$(srcdir)/generated/nearest_r4.c \ +$(srcdir)/generated/nearest_r8.c \ +$(srcdir)/generated/nearest_r10.c \ +$(srcdir)/generated/nearest_r16.c + +i_set_exponent_c = \ +$(srcdir)/generated/set_exponent_r4.c \ +$(srcdir)/generated/set_exponent_r8.c \ +$(srcdir)/generated/set_exponent_r10.c \ +$(srcdir)/generated/set_exponent_r16.c + +i_pow_c = \ +$(srcdir)/generated/pow_i4_i4.c \ +$(srcdir)/generated/pow_i8_i4.c \ +$(srcdir)/generated/pow_i16_i4.c \ +$(srcdir)/generated/pow_c4_i4.c \ +$(srcdir)/generated/pow_c8_i4.c \ +$(srcdir)/generated/pow_c10_i4.c \ +$(srcdir)/generated/pow_c16_i4.c \ +$(srcdir)/generated/pow_i4_i8.c \ +$(srcdir)/generated/pow_i8_i8.c \ +$(srcdir)/generated/pow_i16_i8.c \ +$(srcdir)/generated/pow_r4_i8.c \ +$(srcdir)/generated/pow_r8_i8.c \ +$(srcdir)/generated/pow_r10_i8.c \ +$(srcdir)/generated/pow_r16_i8.c \ +$(srcdir)/generated/pow_c4_i8.c \ +$(srcdir)/generated/pow_c8_i8.c \ +$(srcdir)/generated/pow_c10_i8.c \ +$(srcdir)/generated/pow_c16_i8.c \ +$(srcdir)/generated/pow_i4_i16.c \ +$(srcdir)/generated/pow_i8_i16.c \ +$(srcdir)/generated/pow_i16_i16.c \ +$(srcdir)/generated/pow_r4_i16.c \ +$(srcdir)/generated/pow_r8_i16.c \ +$(srcdir)/generated/pow_r10_i16.c \ +$(srcdir)/generated/pow_r16_i16.c \ +$(srcdir)/generated/pow_c4_i16.c \ +$(srcdir)/generated/pow_c8_i16.c \ +$(srcdir)/generated/pow_c10_i16.c \ +$(srcdir)/generated/pow_c16_i16.c + +i_pack_c = \ +$(srcdir)/generated/pack_i1.c \ +$(srcdir)/generated/pack_i2.c \ +$(srcdir)/generated/pack_i4.c \ +$(srcdir)/generated/pack_i8.c \ +$(srcdir)/generated/pack_i16.c \ +$(srcdir)/generated/pack_r4.c \ +$(srcdir)/generated/pack_r8.c \ +$(srcdir)/generated/pack_r10.c \ +$(srcdir)/generated/pack_r16.c \ +$(srcdir)/generated/pack_c4.c \ +$(srcdir)/generated/pack_c8.c \ +$(srcdir)/generated/pack_c10.c \ +$(srcdir)/generated/pack_c16.c + +i_unpack_c = \ +$(srcdir)/generated/unpack_i1.c \ +$(srcdir)/generated/unpack_i2.c \ +$(srcdir)/generated/unpack_i4.c \ +$(srcdir)/generated/unpack_i8.c \ +$(srcdir)/generated/unpack_i16.c \ +$(srcdir)/generated/unpack_r4.c \ +$(srcdir)/generated/unpack_r8.c \ +$(srcdir)/generated/unpack_r10.c \ +$(srcdir)/generated/unpack_r16.c \ +$(srcdir)/generated/unpack_c4.c \ +$(srcdir)/generated/unpack_c8.c \ +$(srcdir)/generated/unpack_c10.c \ +$(srcdir)/generated/unpack_c16.c + +i_spread_c = \ +$(srcdir)/generated/spread_i1.c \ +$(srcdir)/generated/spread_i2.c \ +$(srcdir)/generated/spread_i4.c \ +$(srcdir)/generated/spread_i8.c \ +$(srcdir)/generated/spread_i16.c \ +$(srcdir)/generated/spread_r4.c \ +$(srcdir)/generated/spread_r8.c \ +$(srcdir)/generated/spread_r10.c \ +$(srcdir)/generated/spread_r16.c \ +$(srcdir)/generated/spread_c4.c \ +$(srcdir)/generated/spread_c8.c \ +$(srcdir)/generated/spread_c10.c \ +$(srcdir)/generated/spread_c16.c + +m4_files = m4/iparm.m4 m4/ifunction.m4 m4/iforeach.m4 m4/all.m4 \ + m4/any.m4 m4/count.m4 m4/maxloc0.m4 m4/maxloc1.m4 m4/maxval.m4 \ + m4/minloc0.m4 m4/minloc1.m4 m4/minval.m4 m4/product.m4 m4/sum.m4 \ + m4/matmul.m4 m4/matmull.m4 m4/ifunction_logical.m4 \ + m4/ctrig.m4 m4/cexp.m4 m4/chyp.m4 m4/mtype.m4 \ + m4/specific.m4 m4/specific2.m4 m4/head.m4 m4/shape.m4 m4/reshape.m4 \ + m4/transpose.m4 m4/eoshift1.m4 m4/eoshift3.m4 m4/exponent.m4 \ + m4/fraction.m4 m4/nearest.m4 m4/set_exponent.m4 m4/pow.m4 \ + m4/misc_specifics.m4 m4/rrspacing.m4 m4/spacing.m4 m4/pack.m4 \ + m4/unpack.m4 m4/spread.m4 + +gfor_built_src = $(i_all_c) $(i_any_c) $(i_count_c) $(i_maxloc0_c) \ + $(i_maxloc1_c) $(i_maxval_c) $(i_minloc0_c) $(i_minloc1_c) $(i_minval_c) \ + $(i_product_c) $(i_sum_c) \ + $(i_matmul_c) $(i_matmull_c) $(i_transpose_c) $(i_shape_c) $(i_eoshift1_c) \ + $(i_eoshift3_c) $(i_cshift1_c) $(i_reshape_c) $(in_pack_c) $(in_unpack_c) \ + $(i_exponent_c) $(i_fraction_c) $(i_nearest_c) $(i_set_exponent_c) \ + $(i_pow_c) $(i_rrspacing_c) $(i_spacing_c) $(i_pack_c) $(i_unpack_c) \ + $(i_spread_c) selected_int_kind.inc selected_real_kind.inc kinds.h \ + $(i_cshift0_c) kinds.inc c99_protos.inc fpu-target.h + + +# Machine generated specifics +gfor_built_specific_src = \ +$(srcdir)/generated/_abs_c4.F90 \ +$(srcdir)/generated/_abs_c8.F90 \ +$(srcdir)/generated/_abs_c10.F90 \ +$(srcdir)/generated/_abs_c16.F90 \ +$(srcdir)/generated/_abs_i4.F90 \ +$(srcdir)/generated/_abs_i8.F90 \ +$(srcdir)/generated/_abs_i16.F90 \ +$(srcdir)/generated/_abs_r4.F90 \ +$(srcdir)/generated/_abs_r8.F90 \ +$(srcdir)/generated/_abs_r10.F90 \ +$(srcdir)/generated/_abs_r16.F90 \ +$(srcdir)/generated/_aimag_c4.F90 \ +$(srcdir)/generated/_aimag_c8.F90 \ +$(srcdir)/generated/_aimag_c10.F90 \ +$(srcdir)/generated/_aimag_c16.F90 \ +$(srcdir)/generated/_exp_r4.F90 \ +$(srcdir)/generated/_exp_r8.F90 \ +$(srcdir)/generated/_exp_r10.F90 \ +$(srcdir)/generated/_exp_r16.F90 \ +$(srcdir)/generated/_exp_c4.F90 \ +$(srcdir)/generated/_exp_c8.F90 \ +$(srcdir)/generated/_exp_c10.F90 \ +$(srcdir)/generated/_exp_c16.F90 \ +$(srcdir)/generated/_log_r4.F90 \ +$(srcdir)/generated/_log_r8.F90 \ +$(srcdir)/generated/_log_r10.F90 \ +$(srcdir)/generated/_log_r16.F90 \ +$(srcdir)/generated/_log_c4.F90 \ +$(srcdir)/generated/_log_c8.F90 \ +$(srcdir)/generated/_log_c10.F90 \ +$(srcdir)/generated/_log_c16.F90 \ +$(srcdir)/generated/_log10_r4.F90 \ +$(srcdir)/generated/_log10_r8.F90 \ +$(srcdir)/generated/_log10_r10.F90 \ +$(srcdir)/generated/_log10_r16.F90 \ +$(srcdir)/generated/_sqrt_r4.F90 \ +$(srcdir)/generated/_sqrt_r8.F90 \ +$(srcdir)/generated/_sqrt_r10.F90 \ +$(srcdir)/generated/_sqrt_r16.F90 \ +$(srcdir)/generated/_sqrt_c4.F90 \ +$(srcdir)/generated/_sqrt_c8.F90 \ +$(srcdir)/generated/_sqrt_c10.F90 \ +$(srcdir)/generated/_sqrt_c16.F90 \ +$(srcdir)/generated/_asin_r4.F90 \ +$(srcdir)/generated/_asin_r8.F90 \ +$(srcdir)/generated/_asin_r10.F90 \ +$(srcdir)/generated/_asin_r16.F90 \ +$(srcdir)/generated/_asinh_r4.F90 \ +$(srcdir)/generated/_asinh_r8.F90 \ +$(srcdir)/generated/_asinh_r10.F90 \ +$(srcdir)/generated/_asinh_r16.F90 \ +$(srcdir)/generated/_acos_r4.F90 \ +$(srcdir)/generated/_acos_r8.F90 \ +$(srcdir)/generated/_acos_r10.F90 \ +$(srcdir)/generated/_acos_r16.F90 \ +$(srcdir)/generated/_acosh_r4.F90 \ +$(srcdir)/generated/_acosh_r8.F90 \ +$(srcdir)/generated/_acosh_r10.F90 \ +$(srcdir)/generated/_acosh_r16.F90 \ +$(srcdir)/generated/_atan_r4.F90 \ +$(srcdir)/generated/_atan_r8.F90 \ +$(srcdir)/generated/_atan_r10.F90 \ +$(srcdir)/generated/_atan_r16.F90 \ +$(srcdir)/generated/_atanh_r4.F90 \ +$(srcdir)/generated/_atanh_r8.F90 \ +$(srcdir)/generated/_atanh_r10.F90 \ +$(srcdir)/generated/_atanh_r16.F90 \ +$(srcdir)/generated/_sin_r4.F90 \ +$(srcdir)/generated/_sin_r8.F90 \ +$(srcdir)/generated/_sin_r10.F90 \ +$(srcdir)/generated/_sin_r16.F90 \ +$(srcdir)/generated/_sin_c4.F90 \ +$(srcdir)/generated/_sin_c8.F90 \ +$(srcdir)/generated/_sin_c10.F90 \ +$(srcdir)/generated/_sin_c16.F90 \ +$(srcdir)/generated/_cos_r4.F90 \ +$(srcdir)/generated/_cos_r8.F90 \ +$(srcdir)/generated/_cos_r10.F90 \ +$(srcdir)/generated/_cos_r16.F90 \ +$(srcdir)/generated/_cos_c4.F90 \ +$(srcdir)/generated/_cos_c8.F90 \ +$(srcdir)/generated/_cos_c10.F90 \ +$(srcdir)/generated/_cos_c16.F90 \ +$(srcdir)/generated/_tan_r4.F90 \ +$(srcdir)/generated/_tan_r8.F90 \ +$(srcdir)/generated/_tan_r10.F90 \ +$(srcdir)/generated/_tan_r16.F90 \ +$(srcdir)/generated/_sinh_r4.F90 \ +$(srcdir)/generated/_sinh_r8.F90 \ +$(srcdir)/generated/_sinh_r10.F90 \ +$(srcdir)/generated/_sinh_r16.F90 \ +$(srcdir)/generated/_cosh_r4.F90 \ +$(srcdir)/generated/_cosh_r8.F90 \ +$(srcdir)/generated/_cosh_r10.F90 \ +$(srcdir)/generated/_cosh_r16.F90 \ +$(srcdir)/generated/_tanh_r4.F90 \ +$(srcdir)/generated/_tanh_r8.F90 \ +$(srcdir)/generated/_tanh_r10.F90 \ +$(srcdir)/generated/_tanh_r16.F90 \ +$(srcdir)/generated/_conjg_c4.F90 \ +$(srcdir)/generated/_conjg_c8.F90 \ +$(srcdir)/generated/_conjg_c10.F90 \ +$(srcdir)/generated/_conjg_c16.F90 \ +$(srcdir)/generated/_aint_r4.F90 \ +$(srcdir)/generated/_aint_r8.F90 \ +$(srcdir)/generated/_aint_r10.F90 \ +$(srcdir)/generated/_aint_r16.F90 \ +$(srcdir)/generated/_anint_r4.F90 \ +$(srcdir)/generated/_anint_r8.F90 \ +$(srcdir)/generated/_anint_r10.F90 \ +$(srcdir)/generated/_anint_r16.F90 + +gfor_built_specific2_src = \ +$(srcdir)/generated/_sign_i4.F90 \ +$(srcdir)/generated/_sign_i8.F90 \ +$(srcdir)/generated/_sign_i16.F90 \ +$(srcdir)/generated/_sign_r4.F90 \ +$(srcdir)/generated/_sign_r8.F90 \ +$(srcdir)/generated/_sign_r10.F90 \ +$(srcdir)/generated/_sign_r16.F90 \ +$(srcdir)/generated/_dim_i4.F90 \ +$(srcdir)/generated/_dim_i8.F90 \ +$(srcdir)/generated/_dim_i16.F90 \ +$(srcdir)/generated/_dim_r4.F90 \ +$(srcdir)/generated/_dim_r8.F90 \ +$(srcdir)/generated/_dim_r10.F90 \ +$(srcdir)/generated/_dim_r16.F90 \ +$(srcdir)/generated/_atan2_r4.F90 \ +$(srcdir)/generated/_atan2_r8.F90 \ +$(srcdir)/generated/_atan2_r10.F90 \ +$(srcdir)/generated/_atan2_r16.F90 \ +$(srcdir)/generated/_mod_i4.F90 \ +$(srcdir)/generated/_mod_i8.F90 \ +$(srcdir)/generated/_mod_i16.F90 \ +$(srcdir)/generated/_mod_r4.F90 \ +$(srcdir)/generated/_mod_r8.F90 \ +$(srcdir)/generated/_mod_r10.F90 \ +$(srcdir)/generated/_mod_r16.F90 + +gfor_misc_specifics = $(srcdir)/generated/misc_specifics.F90 +gfor_specific_src = \ +$(gfor_built_specific_src) \ +$(gfor_built_specific2_src) \ +$(gfor_misc_specifics) \ +intrinsics/dprod_r8.f90 \ +intrinsics/f2c_specifics.F90 + +BUILT_SOURCES = $(gfor_built_src) $(gfor_built_specific_src) \ + $(gfor_built_specific2_src) $(gfor_misc_specifics) \ + $(am__append_1) +prereq_SRC = $(gfor_src) $(gfor_built_src) $(gfor_io_src) \ + $(gfor_helper_src) $(gfor_io_headers) $(gfor_specific_src) + +@onestep_FALSE@libgfortran_la_SOURCES = $(prereq_SRC) + +#libgfortran_f.o: $(filter %.f %.f90,$(prereq_SRC)) +# $(FCCOMPILE) -c $^ -o $@ -combine + +#libgfortran_f.lo: $(filter %.f %.f90,$(prereq_SRC)) +# $(LTFCCOMPILE) -c -o $@ $^ -combine +# not currently used: +#libgfortran_F.o: $(filter %.F %.F90,$(prereq_SRC)) +# $(PPFCCOMPILE) -c $^ -o $@ -combine +# +#libgfortran_F.lo: +# $(LTPPFCCOMPILE) -c -o $@ $^ -combine +@onestep_TRUE@libgfortran_la_SOURCES = libgfortran_c.c $(filter-out %.c,$(prereq_SRC)) +I_M4_DEPS = m4/iparm.m4 +I_M4_DEPS0 = $(I_M4_DEPS) m4/iforeach.m4 +I_M4_DEPS1 = $(I_M4_DEPS) m4/ifunction.m4 +I_M4_DEPS2 = $(I_M4_DEPS) m4/ifunction_logical.m4 +EXTRA_DIST = $(m4_files) +all: $(BUILT_SOURCES) config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .F90 .c .f90 .lo .o .obj +am--refresh: + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ + cd $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_srcdir) && $(AUTOHEADER) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +install-myexeclibLTLIBRARIES: $(myexeclib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(myexeclibdir)" || $(mkdir_p) "$(DESTDIR)$(myexeclibdir)" + @list='$(myexeclib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(myexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(myexeclibdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(myexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(myexeclibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-myexeclibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @set -x; list='$(myexeclib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(myexeclibdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(myexeclibdir)/$$p"; \ + done + +clean-myexeclibLTLIBRARIES: + -test -z "$(myexeclib_LTLIBRARIES)" || rm -f $(myexeclib_LTLIBRARIES) + @list='$(myexeclib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(toolexeclibdir)" || $(mkdir_p) "$(DESTDIR)$(toolexeclibdir)" + @list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(toolexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(toolexeclibdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(toolexeclibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(toolexeclibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-toolexeclibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @set -x; list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(toolexeclibdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(toolexeclibdir)/$$p"; \ + done + +clean-toolexeclibLTLIBRARIES: + -test -z "$(toolexeclib_LTLIBRARIES)" || rm -f $(toolexeclib_LTLIBRARIES) + @list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libgfortran.la: $(libgfortran_la_OBJECTS) $(libgfortran_la_DEPENDENCIES) + $(libgfortran_la_LINK) -rpath $(toolexeclibdir) $(libgfortran_la_LDFLAGS) $(libgfortran_la_OBJECTS) $(libgfortran_la_LIBADD) $(LIBS) +libgfortranbegin.la: $(libgfortranbegin_la_OBJECTS) $(libgfortranbegin_la_DEPENDENCIES) + $(LINK) -rpath $(myexeclibdir) $(libgfortranbegin_la_LDFLAGS) $(libgfortranbegin_la_OBJECTS) $(libgfortranbegin_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abort.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/access.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/all_l1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/all_l16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/all_l2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/all_l4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/all_l8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/any_l1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/any_l16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/any_l2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/any_l4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/any_l8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/args.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/associated.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/backtrace.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c99_functions.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chdir.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chmod.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compile_options.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convert_char.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/count_16_l.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/count_1_l.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/count_2_l.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/count_4_l.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/count_8_l.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu_time.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift0.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift0_c10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift0_c16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift0_c4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift0_c8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift0_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift0_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift0_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift0_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift0_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift0_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift0_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift0_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift0_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift1_16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift1_4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cshift1_8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctime.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/date_and_time.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtime.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/env.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/environ.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eoshift0.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eoshift1_16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eoshift1_4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eoshift1_8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eoshift2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eoshift3_16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eoshift3_4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eoshift3_8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/erfc_scaled.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etime.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exit.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exponent_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exponent_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exponent_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exponent_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fbuf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_pos.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmain.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnum.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fpu.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fraction_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fraction_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fraction_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fraction_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gerror.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getXid.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getcwd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getlog.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hostnm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ierrno.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_pack_c10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_pack_c16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_pack_c4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_pack_c8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_pack_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_pack_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_pack_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_pack_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_pack_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_pack_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_pack_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_pack_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_pack_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_pack_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_unpack_c10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_unpack_c16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_unpack_c4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_unpack_c8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_unpack_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_unpack_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_unpack_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_unpack_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_unpack_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_unpack_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_unpack_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_unpack_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_unpack_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_unpack_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inquire.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/intrinsics.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ishftc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso_c_binding.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso_c_generated_procs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kill.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgfortran_c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list_read.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lock.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_c10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_c16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_c4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_c8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_l16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_l4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_l8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matmul_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_16_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_16_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_16_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_16_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_16_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_16_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_16_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_16_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_16_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_4_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_4_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_4_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_4_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_4_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_4_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_4_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_4_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_4_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_8_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_8_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_8_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_8_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_8_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_8_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_8_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_8_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc0_8_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_16_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_16_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_16_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_16_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_16_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_16_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_16_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_16_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_16_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_4_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_4_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_4_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_4_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_4_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_4_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_4_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_4_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_4_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_8_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_8_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_8_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_8_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_8_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_8_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_8_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_8_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxloc1_8_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxval_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxval_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxval_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxval_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxval_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxval_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxval_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxval_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxval_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_16_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_16_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_16_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_16_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_16_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_16_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_16_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_16_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_16_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_4_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_4_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_4_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_4_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_4_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_4_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_4_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_4_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_4_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_8_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_8_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_8_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_8_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_8_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_8_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_8_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_8_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc0_8_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_16_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_16_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_16_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_16_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_16_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_16_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_16_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_16_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_16_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_4_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_4_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_4_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_4_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_4_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_4_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_4_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_4_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_4_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_8_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_8_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_8_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_8_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_8_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_8_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_8_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_8_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minloc1_8_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minval_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minval_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minval_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minval_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minval_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minval_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minval_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minval_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minval_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/move_alloc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mvbits.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nearest_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nearest_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nearest_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nearest_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_c10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_c16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_c4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_c8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pause.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perror.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c10_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c10_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c10_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c16_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c16_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c16_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c4_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c4_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c4_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c8_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c8_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c8_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_i16_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_i16_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_i16_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_i4_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_i4_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_i4_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_i8_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_i8_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_i8_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_r10_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_r10_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_r16_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_r16_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_r4_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_r4_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_r8_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_r8_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_c10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_c16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_c4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_c8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rand.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rename.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reshape_c10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reshape_c16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reshape_c4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reshape_c8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reshape_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reshape_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reshape_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reshape_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reshape_packed.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reshape_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reshape_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reshape_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reshape_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rrspacing_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rrspacing_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rrspacing_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rrspacing_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/select.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/selected_char_kind.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_exponent_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_exponent_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_exponent_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_exponent_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shape_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shape_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shape_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signal.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/size.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/size_from_kind.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sleep.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spacing_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spacing_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spacing_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spacing_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spread_c10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spread_c16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spread_c4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spread_c8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spread_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spread_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spread_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spread_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spread_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spread_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spread_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spread_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spread_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spread_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stop.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_intrinsics.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sum_c10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sum_c16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sum_c4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sum_c8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sum_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sum_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sum_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sum_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sum_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sum_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sum_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sum_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sum_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symlnk.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/system.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/system_clock.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transfer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transpose_c10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transpose_c16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transpose_c4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transpose_c8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transpose_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transpose_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transpose_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transpose_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transpose_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transpose_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transpose_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transpose_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umask.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack_c10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack_c16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack_c4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack_c8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack_generic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack_i1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack_i16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack_i2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack_i4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack_i8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack_r10.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack_r16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack_r4.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unpack_r8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/write.Plo@am__quote@ + +.F90.o: + $(PPFCCOMPILE) -c -o $@ $< + +.F90.obj: + $(PPFCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.F90.lo: + $(LTPPFCCOMPILE) -c -o $@ $< + +_abs_c4.lo: $(srcdir)/generated/_abs_c4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _abs_c4.lo `test -f '$(srcdir)/generated/_abs_c4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_abs_c4.F90 + +_abs_c8.lo: $(srcdir)/generated/_abs_c8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _abs_c8.lo `test -f '$(srcdir)/generated/_abs_c8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_abs_c8.F90 + +_abs_c10.lo: $(srcdir)/generated/_abs_c10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _abs_c10.lo `test -f '$(srcdir)/generated/_abs_c10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_abs_c10.F90 + +_abs_c16.lo: $(srcdir)/generated/_abs_c16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _abs_c16.lo `test -f '$(srcdir)/generated/_abs_c16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_abs_c16.F90 + +_abs_i4.lo: $(srcdir)/generated/_abs_i4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _abs_i4.lo `test -f '$(srcdir)/generated/_abs_i4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_abs_i4.F90 + +_abs_i8.lo: $(srcdir)/generated/_abs_i8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _abs_i8.lo `test -f '$(srcdir)/generated/_abs_i8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_abs_i8.F90 + +_abs_i16.lo: $(srcdir)/generated/_abs_i16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _abs_i16.lo `test -f '$(srcdir)/generated/_abs_i16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_abs_i16.F90 + +_abs_r4.lo: $(srcdir)/generated/_abs_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _abs_r4.lo `test -f '$(srcdir)/generated/_abs_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_abs_r4.F90 + +_abs_r8.lo: $(srcdir)/generated/_abs_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _abs_r8.lo `test -f '$(srcdir)/generated/_abs_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_abs_r8.F90 + +_abs_r10.lo: $(srcdir)/generated/_abs_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _abs_r10.lo `test -f '$(srcdir)/generated/_abs_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_abs_r10.F90 + +_abs_r16.lo: $(srcdir)/generated/_abs_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _abs_r16.lo `test -f '$(srcdir)/generated/_abs_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_abs_r16.F90 + +_aimag_c4.lo: $(srcdir)/generated/_aimag_c4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _aimag_c4.lo `test -f '$(srcdir)/generated/_aimag_c4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_aimag_c4.F90 + +_aimag_c8.lo: $(srcdir)/generated/_aimag_c8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _aimag_c8.lo `test -f '$(srcdir)/generated/_aimag_c8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_aimag_c8.F90 + +_aimag_c10.lo: $(srcdir)/generated/_aimag_c10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _aimag_c10.lo `test -f '$(srcdir)/generated/_aimag_c10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_aimag_c10.F90 + +_aimag_c16.lo: $(srcdir)/generated/_aimag_c16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _aimag_c16.lo `test -f '$(srcdir)/generated/_aimag_c16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_aimag_c16.F90 + +_exp_r4.lo: $(srcdir)/generated/_exp_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _exp_r4.lo `test -f '$(srcdir)/generated/_exp_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_exp_r4.F90 + +_exp_r8.lo: $(srcdir)/generated/_exp_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _exp_r8.lo `test -f '$(srcdir)/generated/_exp_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_exp_r8.F90 + +_exp_r10.lo: $(srcdir)/generated/_exp_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _exp_r10.lo `test -f '$(srcdir)/generated/_exp_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_exp_r10.F90 + +_exp_r16.lo: $(srcdir)/generated/_exp_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _exp_r16.lo `test -f '$(srcdir)/generated/_exp_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_exp_r16.F90 + +_exp_c4.lo: $(srcdir)/generated/_exp_c4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _exp_c4.lo `test -f '$(srcdir)/generated/_exp_c4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_exp_c4.F90 + +_exp_c8.lo: $(srcdir)/generated/_exp_c8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _exp_c8.lo `test -f '$(srcdir)/generated/_exp_c8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_exp_c8.F90 + +_exp_c10.lo: $(srcdir)/generated/_exp_c10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _exp_c10.lo `test -f '$(srcdir)/generated/_exp_c10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_exp_c10.F90 + +_exp_c16.lo: $(srcdir)/generated/_exp_c16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _exp_c16.lo `test -f '$(srcdir)/generated/_exp_c16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_exp_c16.F90 + +_log_r4.lo: $(srcdir)/generated/_log_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _log_r4.lo `test -f '$(srcdir)/generated/_log_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_log_r4.F90 + +_log_r8.lo: $(srcdir)/generated/_log_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _log_r8.lo `test -f '$(srcdir)/generated/_log_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_log_r8.F90 + +_log_r10.lo: $(srcdir)/generated/_log_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _log_r10.lo `test -f '$(srcdir)/generated/_log_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_log_r10.F90 + +_log_r16.lo: $(srcdir)/generated/_log_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _log_r16.lo `test -f '$(srcdir)/generated/_log_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_log_r16.F90 + +_log_c4.lo: $(srcdir)/generated/_log_c4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _log_c4.lo `test -f '$(srcdir)/generated/_log_c4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_log_c4.F90 + +_log_c8.lo: $(srcdir)/generated/_log_c8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _log_c8.lo `test -f '$(srcdir)/generated/_log_c8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_log_c8.F90 + +_log_c10.lo: $(srcdir)/generated/_log_c10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _log_c10.lo `test -f '$(srcdir)/generated/_log_c10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_log_c10.F90 + +_log_c16.lo: $(srcdir)/generated/_log_c16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _log_c16.lo `test -f '$(srcdir)/generated/_log_c16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_log_c16.F90 + +_log10_r4.lo: $(srcdir)/generated/_log10_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _log10_r4.lo `test -f '$(srcdir)/generated/_log10_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_log10_r4.F90 + +_log10_r8.lo: $(srcdir)/generated/_log10_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _log10_r8.lo `test -f '$(srcdir)/generated/_log10_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_log10_r8.F90 + +_log10_r10.lo: $(srcdir)/generated/_log10_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _log10_r10.lo `test -f '$(srcdir)/generated/_log10_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_log10_r10.F90 + +_log10_r16.lo: $(srcdir)/generated/_log10_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _log10_r16.lo `test -f '$(srcdir)/generated/_log10_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_log10_r16.F90 + +_sqrt_r4.lo: $(srcdir)/generated/_sqrt_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sqrt_r4.lo `test -f '$(srcdir)/generated/_sqrt_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sqrt_r4.F90 + +_sqrt_r8.lo: $(srcdir)/generated/_sqrt_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sqrt_r8.lo `test -f '$(srcdir)/generated/_sqrt_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sqrt_r8.F90 + +_sqrt_r10.lo: $(srcdir)/generated/_sqrt_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sqrt_r10.lo `test -f '$(srcdir)/generated/_sqrt_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sqrt_r10.F90 + +_sqrt_r16.lo: $(srcdir)/generated/_sqrt_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sqrt_r16.lo `test -f '$(srcdir)/generated/_sqrt_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sqrt_r16.F90 + +_sqrt_c4.lo: $(srcdir)/generated/_sqrt_c4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sqrt_c4.lo `test -f '$(srcdir)/generated/_sqrt_c4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sqrt_c4.F90 + +_sqrt_c8.lo: $(srcdir)/generated/_sqrt_c8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sqrt_c8.lo `test -f '$(srcdir)/generated/_sqrt_c8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sqrt_c8.F90 + +_sqrt_c10.lo: $(srcdir)/generated/_sqrt_c10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sqrt_c10.lo `test -f '$(srcdir)/generated/_sqrt_c10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sqrt_c10.F90 + +_sqrt_c16.lo: $(srcdir)/generated/_sqrt_c16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sqrt_c16.lo `test -f '$(srcdir)/generated/_sqrt_c16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sqrt_c16.F90 + +_asin_r4.lo: $(srcdir)/generated/_asin_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _asin_r4.lo `test -f '$(srcdir)/generated/_asin_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_asin_r4.F90 + +_asin_r8.lo: $(srcdir)/generated/_asin_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _asin_r8.lo `test -f '$(srcdir)/generated/_asin_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_asin_r8.F90 + +_asin_r10.lo: $(srcdir)/generated/_asin_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _asin_r10.lo `test -f '$(srcdir)/generated/_asin_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_asin_r10.F90 + +_asin_r16.lo: $(srcdir)/generated/_asin_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _asin_r16.lo `test -f '$(srcdir)/generated/_asin_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_asin_r16.F90 + +_asinh_r4.lo: $(srcdir)/generated/_asinh_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _asinh_r4.lo `test -f '$(srcdir)/generated/_asinh_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_asinh_r4.F90 + +_asinh_r8.lo: $(srcdir)/generated/_asinh_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _asinh_r8.lo `test -f '$(srcdir)/generated/_asinh_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_asinh_r8.F90 + +_asinh_r10.lo: $(srcdir)/generated/_asinh_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _asinh_r10.lo `test -f '$(srcdir)/generated/_asinh_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_asinh_r10.F90 + +_asinh_r16.lo: $(srcdir)/generated/_asinh_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _asinh_r16.lo `test -f '$(srcdir)/generated/_asinh_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_asinh_r16.F90 + +_acos_r4.lo: $(srcdir)/generated/_acos_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _acos_r4.lo `test -f '$(srcdir)/generated/_acos_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_acos_r4.F90 + +_acos_r8.lo: $(srcdir)/generated/_acos_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _acos_r8.lo `test -f '$(srcdir)/generated/_acos_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_acos_r8.F90 + +_acos_r10.lo: $(srcdir)/generated/_acos_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _acos_r10.lo `test -f '$(srcdir)/generated/_acos_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_acos_r10.F90 + +_acos_r16.lo: $(srcdir)/generated/_acos_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _acos_r16.lo `test -f '$(srcdir)/generated/_acos_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_acos_r16.F90 + +_acosh_r4.lo: $(srcdir)/generated/_acosh_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _acosh_r4.lo `test -f '$(srcdir)/generated/_acosh_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_acosh_r4.F90 + +_acosh_r8.lo: $(srcdir)/generated/_acosh_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _acosh_r8.lo `test -f '$(srcdir)/generated/_acosh_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_acosh_r8.F90 + +_acosh_r10.lo: $(srcdir)/generated/_acosh_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _acosh_r10.lo `test -f '$(srcdir)/generated/_acosh_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_acosh_r10.F90 + +_acosh_r16.lo: $(srcdir)/generated/_acosh_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _acosh_r16.lo `test -f '$(srcdir)/generated/_acosh_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_acosh_r16.F90 + +_atan_r4.lo: $(srcdir)/generated/_atan_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _atan_r4.lo `test -f '$(srcdir)/generated/_atan_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_atan_r4.F90 + +_atan_r8.lo: $(srcdir)/generated/_atan_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _atan_r8.lo `test -f '$(srcdir)/generated/_atan_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_atan_r8.F90 + +_atan_r10.lo: $(srcdir)/generated/_atan_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _atan_r10.lo `test -f '$(srcdir)/generated/_atan_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_atan_r10.F90 + +_atan_r16.lo: $(srcdir)/generated/_atan_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _atan_r16.lo `test -f '$(srcdir)/generated/_atan_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_atan_r16.F90 + +_atanh_r4.lo: $(srcdir)/generated/_atanh_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _atanh_r4.lo `test -f '$(srcdir)/generated/_atanh_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_atanh_r4.F90 + +_atanh_r8.lo: $(srcdir)/generated/_atanh_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _atanh_r8.lo `test -f '$(srcdir)/generated/_atanh_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_atanh_r8.F90 + +_atanh_r10.lo: $(srcdir)/generated/_atanh_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _atanh_r10.lo `test -f '$(srcdir)/generated/_atanh_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_atanh_r10.F90 + +_atanh_r16.lo: $(srcdir)/generated/_atanh_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _atanh_r16.lo `test -f '$(srcdir)/generated/_atanh_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_atanh_r16.F90 + +_sin_r4.lo: $(srcdir)/generated/_sin_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sin_r4.lo `test -f '$(srcdir)/generated/_sin_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sin_r4.F90 + +_sin_r8.lo: $(srcdir)/generated/_sin_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sin_r8.lo `test -f '$(srcdir)/generated/_sin_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sin_r8.F90 + +_sin_r10.lo: $(srcdir)/generated/_sin_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sin_r10.lo `test -f '$(srcdir)/generated/_sin_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sin_r10.F90 + +_sin_r16.lo: $(srcdir)/generated/_sin_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sin_r16.lo `test -f '$(srcdir)/generated/_sin_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sin_r16.F90 + +_sin_c4.lo: $(srcdir)/generated/_sin_c4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sin_c4.lo `test -f '$(srcdir)/generated/_sin_c4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sin_c4.F90 + +_sin_c8.lo: $(srcdir)/generated/_sin_c8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sin_c8.lo `test -f '$(srcdir)/generated/_sin_c8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sin_c8.F90 + +_sin_c10.lo: $(srcdir)/generated/_sin_c10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sin_c10.lo `test -f '$(srcdir)/generated/_sin_c10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sin_c10.F90 + +_sin_c16.lo: $(srcdir)/generated/_sin_c16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sin_c16.lo `test -f '$(srcdir)/generated/_sin_c16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sin_c16.F90 + +_cos_r4.lo: $(srcdir)/generated/_cos_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _cos_r4.lo `test -f '$(srcdir)/generated/_cos_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_cos_r4.F90 + +_cos_r8.lo: $(srcdir)/generated/_cos_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _cos_r8.lo `test -f '$(srcdir)/generated/_cos_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_cos_r8.F90 + +_cos_r10.lo: $(srcdir)/generated/_cos_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _cos_r10.lo `test -f '$(srcdir)/generated/_cos_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_cos_r10.F90 + +_cos_r16.lo: $(srcdir)/generated/_cos_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _cos_r16.lo `test -f '$(srcdir)/generated/_cos_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_cos_r16.F90 + +_cos_c4.lo: $(srcdir)/generated/_cos_c4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _cos_c4.lo `test -f '$(srcdir)/generated/_cos_c4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_cos_c4.F90 + +_cos_c8.lo: $(srcdir)/generated/_cos_c8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _cos_c8.lo `test -f '$(srcdir)/generated/_cos_c8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_cos_c8.F90 + +_cos_c10.lo: $(srcdir)/generated/_cos_c10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _cos_c10.lo `test -f '$(srcdir)/generated/_cos_c10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_cos_c10.F90 + +_cos_c16.lo: $(srcdir)/generated/_cos_c16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _cos_c16.lo `test -f '$(srcdir)/generated/_cos_c16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_cos_c16.F90 + +_tan_r4.lo: $(srcdir)/generated/_tan_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _tan_r4.lo `test -f '$(srcdir)/generated/_tan_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_tan_r4.F90 + +_tan_r8.lo: $(srcdir)/generated/_tan_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _tan_r8.lo `test -f '$(srcdir)/generated/_tan_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_tan_r8.F90 + +_tan_r10.lo: $(srcdir)/generated/_tan_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _tan_r10.lo `test -f '$(srcdir)/generated/_tan_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_tan_r10.F90 + +_tan_r16.lo: $(srcdir)/generated/_tan_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _tan_r16.lo `test -f '$(srcdir)/generated/_tan_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_tan_r16.F90 + +_sinh_r4.lo: $(srcdir)/generated/_sinh_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sinh_r4.lo `test -f '$(srcdir)/generated/_sinh_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sinh_r4.F90 + +_sinh_r8.lo: $(srcdir)/generated/_sinh_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sinh_r8.lo `test -f '$(srcdir)/generated/_sinh_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sinh_r8.F90 + +_sinh_r10.lo: $(srcdir)/generated/_sinh_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sinh_r10.lo `test -f '$(srcdir)/generated/_sinh_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sinh_r10.F90 + +_sinh_r16.lo: $(srcdir)/generated/_sinh_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sinh_r16.lo `test -f '$(srcdir)/generated/_sinh_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sinh_r16.F90 + +_cosh_r4.lo: $(srcdir)/generated/_cosh_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _cosh_r4.lo `test -f '$(srcdir)/generated/_cosh_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_cosh_r4.F90 + +_cosh_r8.lo: $(srcdir)/generated/_cosh_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _cosh_r8.lo `test -f '$(srcdir)/generated/_cosh_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_cosh_r8.F90 + +_cosh_r10.lo: $(srcdir)/generated/_cosh_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _cosh_r10.lo `test -f '$(srcdir)/generated/_cosh_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_cosh_r10.F90 + +_cosh_r16.lo: $(srcdir)/generated/_cosh_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _cosh_r16.lo `test -f '$(srcdir)/generated/_cosh_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_cosh_r16.F90 + +_tanh_r4.lo: $(srcdir)/generated/_tanh_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _tanh_r4.lo `test -f '$(srcdir)/generated/_tanh_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_tanh_r4.F90 + +_tanh_r8.lo: $(srcdir)/generated/_tanh_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _tanh_r8.lo `test -f '$(srcdir)/generated/_tanh_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_tanh_r8.F90 + +_tanh_r10.lo: $(srcdir)/generated/_tanh_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _tanh_r10.lo `test -f '$(srcdir)/generated/_tanh_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_tanh_r10.F90 + +_tanh_r16.lo: $(srcdir)/generated/_tanh_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _tanh_r16.lo `test -f '$(srcdir)/generated/_tanh_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_tanh_r16.F90 + +_conjg_c4.lo: $(srcdir)/generated/_conjg_c4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _conjg_c4.lo `test -f '$(srcdir)/generated/_conjg_c4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_conjg_c4.F90 + +_conjg_c8.lo: $(srcdir)/generated/_conjg_c8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _conjg_c8.lo `test -f '$(srcdir)/generated/_conjg_c8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_conjg_c8.F90 + +_conjg_c10.lo: $(srcdir)/generated/_conjg_c10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _conjg_c10.lo `test -f '$(srcdir)/generated/_conjg_c10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_conjg_c10.F90 + +_conjg_c16.lo: $(srcdir)/generated/_conjg_c16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _conjg_c16.lo `test -f '$(srcdir)/generated/_conjg_c16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_conjg_c16.F90 + +_aint_r4.lo: $(srcdir)/generated/_aint_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _aint_r4.lo `test -f '$(srcdir)/generated/_aint_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_aint_r4.F90 + +_aint_r8.lo: $(srcdir)/generated/_aint_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _aint_r8.lo `test -f '$(srcdir)/generated/_aint_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_aint_r8.F90 + +_aint_r10.lo: $(srcdir)/generated/_aint_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _aint_r10.lo `test -f '$(srcdir)/generated/_aint_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_aint_r10.F90 + +_aint_r16.lo: $(srcdir)/generated/_aint_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _aint_r16.lo `test -f '$(srcdir)/generated/_aint_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_aint_r16.F90 + +_anint_r4.lo: $(srcdir)/generated/_anint_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _anint_r4.lo `test -f '$(srcdir)/generated/_anint_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_anint_r4.F90 + +_anint_r8.lo: $(srcdir)/generated/_anint_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _anint_r8.lo `test -f '$(srcdir)/generated/_anint_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_anint_r8.F90 + +_anint_r10.lo: $(srcdir)/generated/_anint_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _anint_r10.lo `test -f '$(srcdir)/generated/_anint_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_anint_r10.F90 + +_anint_r16.lo: $(srcdir)/generated/_anint_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _anint_r16.lo `test -f '$(srcdir)/generated/_anint_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_anint_r16.F90 + +_sign_i4.lo: $(srcdir)/generated/_sign_i4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sign_i4.lo `test -f '$(srcdir)/generated/_sign_i4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sign_i4.F90 + +_sign_i8.lo: $(srcdir)/generated/_sign_i8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sign_i8.lo `test -f '$(srcdir)/generated/_sign_i8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sign_i8.F90 + +_sign_i16.lo: $(srcdir)/generated/_sign_i16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sign_i16.lo `test -f '$(srcdir)/generated/_sign_i16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sign_i16.F90 + +_sign_r4.lo: $(srcdir)/generated/_sign_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sign_r4.lo `test -f '$(srcdir)/generated/_sign_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sign_r4.F90 + +_sign_r8.lo: $(srcdir)/generated/_sign_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sign_r8.lo `test -f '$(srcdir)/generated/_sign_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sign_r8.F90 + +_sign_r10.lo: $(srcdir)/generated/_sign_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sign_r10.lo `test -f '$(srcdir)/generated/_sign_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sign_r10.F90 + +_sign_r16.lo: $(srcdir)/generated/_sign_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _sign_r16.lo `test -f '$(srcdir)/generated/_sign_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_sign_r16.F90 + +_dim_i4.lo: $(srcdir)/generated/_dim_i4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _dim_i4.lo `test -f '$(srcdir)/generated/_dim_i4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_dim_i4.F90 + +_dim_i8.lo: $(srcdir)/generated/_dim_i8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _dim_i8.lo `test -f '$(srcdir)/generated/_dim_i8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_dim_i8.F90 + +_dim_i16.lo: $(srcdir)/generated/_dim_i16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _dim_i16.lo `test -f '$(srcdir)/generated/_dim_i16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_dim_i16.F90 + +_dim_r4.lo: $(srcdir)/generated/_dim_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _dim_r4.lo `test -f '$(srcdir)/generated/_dim_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_dim_r4.F90 + +_dim_r8.lo: $(srcdir)/generated/_dim_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _dim_r8.lo `test -f '$(srcdir)/generated/_dim_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_dim_r8.F90 + +_dim_r10.lo: $(srcdir)/generated/_dim_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _dim_r10.lo `test -f '$(srcdir)/generated/_dim_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_dim_r10.F90 + +_dim_r16.lo: $(srcdir)/generated/_dim_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _dim_r16.lo `test -f '$(srcdir)/generated/_dim_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_dim_r16.F90 + +_atan2_r4.lo: $(srcdir)/generated/_atan2_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _atan2_r4.lo `test -f '$(srcdir)/generated/_atan2_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_atan2_r4.F90 + +_atan2_r8.lo: $(srcdir)/generated/_atan2_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _atan2_r8.lo `test -f '$(srcdir)/generated/_atan2_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_atan2_r8.F90 + +_atan2_r10.lo: $(srcdir)/generated/_atan2_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _atan2_r10.lo `test -f '$(srcdir)/generated/_atan2_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_atan2_r10.F90 + +_atan2_r16.lo: $(srcdir)/generated/_atan2_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _atan2_r16.lo `test -f '$(srcdir)/generated/_atan2_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_atan2_r16.F90 + +_mod_i4.lo: $(srcdir)/generated/_mod_i4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _mod_i4.lo `test -f '$(srcdir)/generated/_mod_i4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_mod_i4.F90 + +_mod_i8.lo: $(srcdir)/generated/_mod_i8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _mod_i8.lo `test -f '$(srcdir)/generated/_mod_i8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_mod_i8.F90 + +_mod_i16.lo: $(srcdir)/generated/_mod_i16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _mod_i16.lo `test -f '$(srcdir)/generated/_mod_i16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_mod_i16.F90 + +_mod_r4.lo: $(srcdir)/generated/_mod_r4.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _mod_r4.lo `test -f '$(srcdir)/generated/_mod_r4.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_mod_r4.F90 + +_mod_r8.lo: $(srcdir)/generated/_mod_r8.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _mod_r8.lo `test -f '$(srcdir)/generated/_mod_r8.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_mod_r8.F90 + +_mod_r10.lo: $(srcdir)/generated/_mod_r10.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _mod_r10.lo `test -f '$(srcdir)/generated/_mod_r10.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_mod_r10.F90 + +_mod_r16.lo: $(srcdir)/generated/_mod_r16.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o _mod_r16.lo `test -f '$(srcdir)/generated/_mod_r16.F90' || echo '$(srcdir)/'`$(srcdir)/generated/_mod_r16.F90 + +misc_specifics.lo: $(srcdir)/generated/misc_specifics.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o misc_specifics.lo `test -f '$(srcdir)/generated/misc_specifics.F90' || echo '$(srcdir)/'`$(srcdir)/generated/misc_specifics.F90 + +f2c_specifics.lo: intrinsics/f2c_specifics.F90 + $(LIBTOOL) --tag=FC --mode=compile $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) -c -o f2c_specifics.lo `test -f 'intrinsics/f2c_specifics.F90' || echo '$(srcdir)/'`intrinsics/f2c_specifics.F90 + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +backtrace.lo: runtime/backtrace.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT backtrace.lo -MD -MP -MF "$(DEPDIR)/backtrace.Tpo" -c -o backtrace.lo `test -f 'runtime/backtrace.c' || echo '$(srcdir)/'`runtime/backtrace.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/backtrace.Tpo" "$(DEPDIR)/backtrace.Plo"; else rm -f "$(DEPDIR)/backtrace.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/backtrace.c' object='backtrace.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o backtrace.lo `test -f 'runtime/backtrace.c' || echo '$(srcdir)/'`runtime/backtrace.c + +compile_options.lo: runtime/compile_options.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT compile_options.lo -MD -MP -MF "$(DEPDIR)/compile_options.Tpo" -c -o compile_options.lo `test -f 'runtime/compile_options.c' || echo '$(srcdir)/'`runtime/compile_options.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/compile_options.Tpo" "$(DEPDIR)/compile_options.Plo"; else rm -f "$(DEPDIR)/compile_options.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/compile_options.c' object='compile_options.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o compile_options.lo `test -f 'runtime/compile_options.c' || echo '$(srcdir)/'`runtime/compile_options.c + +convert_char.lo: runtime/convert_char.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT convert_char.lo -MD -MP -MF "$(DEPDIR)/convert_char.Tpo" -c -o convert_char.lo `test -f 'runtime/convert_char.c' || echo '$(srcdir)/'`runtime/convert_char.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/convert_char.Tpo" "$(DEPDIR)/convert_char.Plo"; else rm -f "$(DEPDIR)/convert_char.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/convert_char.c' object='convert_char.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o convert_char.lo `test -f 'runtime/convert_char.c' || echo '$(srcdir)/'`runtime/convert_char.c + +environ.lo: runtime/environ.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT environ.lo -MD -MP -MF "$(DEPDIR)/environ.Tpo" -c -o environ.lo `test -f 'runtime/environ.c' || echo '$(srcdir)/'`runtime/environ.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/environ.Tpo" "$(DEPDIR)/environ.Plo"; else rm -f "$(DEPDIR)/environ.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/environ.c' object='environ.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o environ.lo `test -f 'runtime/environ.c' || echo '$(srcdir)/'`runtime/environ.c + +error.lo: runtime/error.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT error.lo -MD -MP -MF "$(DEPDIR)/error.Tpo" -c -o error.lo `test -f 'runtime/error.c' || echo '$(srcdir)/'`runtime/error.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/error.Tpo" "$(DEPDIR)/error.Plo"; else rm -f "$(DEPDIR)/error.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/error.c' object='error.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o error.lo `test -f 'runtime/error.c' || echo '$(srcdir)/'`runtime/error.c + +fpu.lo: runtime/fpu.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fpu.lo -MD -MP -MF "$(DEPDIR)/fpu.Tpo" -c -o fpu.lo `test -f 'runtime/fpu.c' || echo '$(srcdir)/'`runtime/fpu.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fpu.Tpo" "$(DEPDIR)/fpu.Plo"; else rm -f "$(DEPDIR)/fpu.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/fpu.c' object='fpu.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fpu.lo `test -f 'runtime/fpu.c' || echo '$(srcdir)/'`runtime/fpu.c + +main.lo: runtime/main.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT main.lo -MD -MP -MF "$(DEPDIR)/main.Tpo" -c -o main.lo `test -f 'runtime/main.c' || echo '$(srcdir)/'`runtime/main.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/main.Tpo" "$(DEPDIR)/main.Plo"; else rm -f "$(DEPDIR)/main.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/main.c' object='main.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o main.lo `test -f 'runtime/main.c' || echo '$(srcdir)/'`runtime/main.c + +memory.lo: runtime/memory.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT memory.lo -MD -MP -MF "$(DEPDIR)/memory.Tpo" -c -o memory.lo `test -f 'runtime/memory.c' || echo '$(srcdir)/'`runtime/memory.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/memory.Tpo" "$(DEPDIR)/memory.Plo"; else rm -f "$(DEPDIR)/memory.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/memory.c' object='memory.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o memory.lo `test -f 'runtime/memory.c' || echo '$(srcdir)/'`runtime/memory.c + +pause.lo: runtime/pause.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pause.lo -MD -MP -MF "$(DEPDIR)/pause.Tpo" -c -o pause.lo `test -f 'runtime/pause.c' || echo '$(srcdir)/'`runtime/pause.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pause.Tpo" "$(DEPDIR)/pause.Plo"; else rm -f "$(DEPDIR)/pause.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/pause.c' object='pause.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pause.lo `test -f 'runtime/pause.c' || echo '$(srcdir)/'`runtime/pause.c + +stop.lo: runtime/stop.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stop.lo -MD -MP -MF "$(DEPDIR)/stop.Tpo" -c -o stop.lo `test -f 'runtime/stop.c' || echo '$(srcdir)/'`runtime/stop.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/stop.Tpo" "$(DEPDIR)/stop.Plo"; else rm -f "$(DEPDIR)/stop.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/stop.c' object='stop.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stop.lo `test -f 'runtime/stop.c' || echo '$(srcdir)/'`runtime/stop.c + +string.lo: runtime/string.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT string.lo -MD -MP -MF "$(DEPDIR)/string.Tpo" -c -o string.lo `test -f 'runtime/string.c' || echo '$(srcdir)/'`runtime/string.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/string.Tpo" "$(DEPDIR)/string.Plo"; else rm -f "$(DEPDIR)/string.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/string.c' object='string.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o string.lo `test -f 'runtime/string.c' || echo '$(srcdir)/'`runtime/string.c + +select.lo: runtime/select.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT select.lo -MD -MP -MF "$(DEPDIR)/select.Tpo" -c -o select.lo `test -f 'runtime/select.c' || echo '$(srcdir)/'`runtime/select.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/select.Tpo" "$(DEPDIR)/select.Plo"; else rm -f "$(DEPDIR)/select.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/select.c' object='select.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o select.lo `test -f 'runtime/select.c' || echo '$(srcdir)/'`runtime/select.c + +all_l1.lo: $(srcdir)/generated/all_l1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT all_l1.lo -MD -MP -MF "$(DEPDIR)/all_l1.Tpo" -c -o all_l1.lo `test -f '$(srcdir)/generated/all_l1.c' || echo '$(srcdir)/'`$(srcdir)/generated/all_l1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/all_l1.Tpo" "$(DEPDIR)/all_l1.Plo"; else rm -f "$(DEPDIR)/all_l1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/all_l1.c' object='all_l1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o all_l1.lo `test -f '$(srcdir)/generated/all_l1.c' || echo '$(srcdir)/'`$(srcdir)/generated/all_l1.c + +all_l2.lo: $(srcdir)/generated/all_l2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT all_l2.lo -MD -MP -MF "$(DEPDIR)/all_l2.Tpo" -c -o all_l2.lo `test -f '$(srcdir)/generated/all_l2.c' || echo '$(srcdir)/'`$(srcdir)/generated/all_l2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/all_l2.Tpo" "$(DEPDIR)/all_l2.Plo"; else rm -f "$(DEPDIR)/all_l2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/all_l2.c' object='all_l2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o all_l2.lo `test -f '$(srcdir)/generated/all_l2.c' || echo '$(srcdir)/'`$(srcdir)/generated/all_l2.c + +all_l4.lo: $(srcdir)/generated/all_l4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT all_l4.lo -MD -MP -MF "$(DEPDIR)/all_l4.Tpo" -c -o all_l4.lo `test -f '$(srcdir)/generated/all_l4.c' || echo '$(srcdir)/'`$(srcdir)/generated/all_l4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/all_l4.Tpo" "$(DEPDIR)/all_l4.Plo"; else rm -f "$(DEPDIR)/all_l4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/all_l4.c' object='all_l4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o all_l4.lo `test -f '$(srcdir)/generated/all_l4.c' || echo '$(srcdir)/'`$(srcdir)/generated/all_l4.c + +all_l8.lo: $(srcdir)/generated/all_l8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT all_l8.lo -MD -MP -MF "$(DEPDIR)/all_l8.Tpo" -c -o all_l8.lo `test -f '$(srcdir)/generated/all_l8.c' || echo '$(srcdir)/'`$(srcdir)/generated/all_l8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/all_l8.Tpo" "$(DEPDIR)/all_l8.Plo"; else rm -f "$(DEPDIR)/all_l8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/all_l8.c' object='all_l8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o all_l8.lo `test -f '$(srcdir)/generated/all_l8.c' || echo '$(srcdir)/'`$(srcdir)/generated/all_l8.c + +all_l16.lo: $(srcdir)/generated/all_l16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT all_l16.lo -MD -MP -MF "$(DEPDIR)/all_l16.Tpo" -c -o all_l16.lo `test -f '$(srcdir)/generated/all_l16.c' || echo '$(srcdir)/'`$(srcdir)/generated/all_l16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/all_l16.Tpo" "$(DEPDIR)/all_l16.Plo"; else rm -f "$(DEPDIR)/all_l16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/all_l16.c' object='all_l16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o all_l16.lo `test -f '$(srcdir)/generated/all_l16.c' || echo '$(srcdir)/'`$(srcdir)/generated/all_l16.c + +any_l1.lo: $(srcdir)/generated/any_l1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT any_l1.lo -MD -MP -MF "$(DEPDIR)/any_l1.Tpo" -c -o any_l1.lo `test -f '$(srcdir)/generated/any_l1.c' || echo '$(srcdir)/'`$(srcdir)/generated/any_l1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/any_l1.Tpo" "$(DEPDIR)/any_l1.Plo"; else rm -f "$(DEPDIR)/any_l1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/any_l1.c' object='any_l1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o any_l1.lo `test -f '$(srcdir)/generated/any_l1.c' || echo '$(srcdir)/'`$(srcdir)/generated/any_l1.c + +any_l2.lo: $(srcdir)/generated/any_l2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT any_l2.lo -MD -MP -MF "$(DEPDIR)/any_l2.Tpo" -c -o any_l2.lo `test -f '$(srcdir)/generated/any_l2.c' || echo '$(srcdir)/'`$(srcdir)/generated/any_l2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/any_l2.Tpo" "$(DEPDIR)/any_l2.Plo"; else rm -f "$(DEPDIR)/any_l2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/any_l2.c' object='any_l2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o any_l2.lo `test -f '$(srcdir)/generated/any_l2.c' || echo '$(srcdir)/'`$(srcdir)/generated/any_l2.c + +any_l4.lo: $(srcdir)/generated/any_l4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT any_l4.lo -MD -MP -MF "$(DEPDIR)/any_l4.Tpo" -c -o any_l4.lo `test -f '$(srcdir)/generated/any_l4.c' || echo '$(srcdir)/'`$(srcdir)/generated/any_l4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/any_l4.Tpo" "$(DEPDIR)/any_l4.Plo"; else rm -f "$(DEPDIR)/any_l4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/any_l4.c' object='any_l4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o any_l4.lo `test -f '$(srcdir)/generated/any_l4.c' || echo '$(srcdir)/'`$(srcdir)/generated/any_l4.c + +any_l8.lo: $(srcdir)/generated/any_l8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT any_l8.lo -MD -MP -MF "$(DEPDIR)/any_l8.Tpo" -c -o any_l8.lo `test -f '$(srcdir)/generated/any_l8.c' || echo '$(srcdir)/'`$(srcdir)/generated/any_l8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/any_l8.Tpo" "$(DEPDIR)/any_l8.Plo"; else rm -f "$(DEPDIR)/any_l8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/any_l8.c' object='any_l8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o any_l8.lo `test -f '$(srcdir)/generated/any_l8.c' || echo '$(srcdir)/'`$(srcdir)/generated/any_l8.c + +any_l16.lo: $(srcdir)/generated/any_l16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT any_l16.lo -MD -MP -MF "$(DEPDIR)/any_l16.Tpo" -c -o any_l16.lo `test -f '$(srcdir)/generated/any_l16.c' || echo '$(srcdir)/'`$(srcdir)/generated/any_l16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/any_l16.Tpo" "$(DEPDIR)/any_l16.Plo"; else rm -f "$(DEPDIR)/any_l16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/any_l16.c' object='any_l16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o any_l16.lo `test -f '$(srcdir)/generated/any_l16.c' || echo '$(srcdir)/'`$(srcdir)/generated/any_l16.c + +count_1_l.lo: $(srcdir)/generated/count_1_l.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT count_1_l.lo -MD -MP -MF "$(DEPDIR)/count_1_l.Tpo" -c -o count_1_l.lo `test -f '$(srcdir)/generated/count_1_l.c' || echo '$(srcdir)/'`$(srcdir)/generated/count_1_l.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/count_1_l.Tpo" "$(DEPDIR)/count_1_l.Plo"; else rm -f "$(DEPDIR)/count_1_l.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/count_1_l.c' object='count_1_l.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o count_1_l.lo `test -f '$(srcdir)/generated/count_1_l.c' || echo '$(srcdir)/'`$(srcdir)/generated/count_1_l.c + +count_2_l.lo: $(srcdir)/generated/count_2_l.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT count_2_l.lo -MD -MP -MF "$(DEPDIR)/count_2_l.Tpo" -c -o count_2_l.lo `test -f '$(srcdir)/generated/count_2_l.c' || echo '$(srcdir)/'`$(srcdir)/generated/count_2_l.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/count_2_l.Tpo" "$(DEPDIR)/count_2_l.Plo"; else rm -f "$(DEPDIR)/count_2_l.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/count_2_l.c' object='count_2_l.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o count_2_l.lo `test -f '$(srcdir)/generated/count_2_l.c' || echo '$(srcdir)/'`$(srcdir)/generated/count_2_l.c + +count_4_l.lo: $(srcdir)/generated/count_4_l.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT count_4_l.lo -MD -MP -MF "$(DEPDIR)/count_4_l.Tpo" -c -o count_4_l.lo `test -f '$(srcdir)/generated/count_4_l.c' || echo '$(srcdir)/'`$(srcdir)/generated/count_4_l.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/count_4_l.Tpo" "$(DEPDIR)/count_4_l.Plo"; else rm -f "$(DEPDIR)/count_4_l.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/count_4_l.c' object='count_4_l.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o count_4_l.lo `test -f '$(srcdir)/generated/count_4_l.c' || echo '$(srcdir)/'`$(srcdir)/generated/count_4_l.c + +count_8_l.lo: $(srcdir)/generated/count_8_l.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT count_8_l.lo -MD -MP -MF "$(DEPDIR)/count_8_l.Tpo" -c -o count_8_l.lo `test -f '$(srcdir)/generated/count_8_l.c' || echo '$(srcdir)/'`$(srcdir)/generated/count_8_l.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/count_8_l.Tpo" "$(DEPDIR)/count_8_l.Plo"; else rm -f "$(DEPDIR)/count_8_l.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/count_8_l.c' object='count_8_l.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o count_8_l.lo `test -f '$(srcdir)/generated/count_8_l.c' || echo '$(srcdir)/'`$(srcdir)/generated/count_8_l.c + +count_16_l.lo: $(srcdir)/generated/count_16_l.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT count_16_l.lo -MD -MP -MF "$(DEPDIR)/count_16_l.Tpo" -c -o count_16_l.lo `test -f '$(srcdir)/generated/count_16_l.c' || echo '$(srcdir)/'`$(srcdir)/generated/count_16_l.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/count_16_l.Tpo" "$(DEPDIR)/count_16_l.Plo"; else rm -f "$(DEPDIR)/count_16_l.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/count_16_l.c' object='count_16_l.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o count_16_l.lo `test -f '$(srcdir)/generated/count_16_l.c' || echo '$(srcdir)/'`$(srcdir)/generated/count_16_l.c + +maxloc0_4_i1.lo: $(srcdir)/generated/maxloc0_4_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_4_i1.lo -MD -MP -MF "$(DEPDIR)/maxloc0_4_i1.Tpo" -c -o maxloc0_4_i1.lo `test -f '$(srcdir)/generated/maxloc0_4_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_4_i1.Tpo" "$(DEPDIR)/maxloc0_4_i1.Plo"; else rm -f "$(DEPDIR)/maxloc0_4_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_4_i1.c' object='maxloc0_4_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_4_i1.lo `test -f '$(srcdir)/generated/maxloc0_4_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_i1.c + +maxloc0_8_i1.lo: $(srcdir)/generated/maxloc0_8_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_8_i1.lo -MD -MP -MF "$(DEPDIR)/maxloc0_8_i1.Tpo" -c -o maxloc0_8_i1.lo `test -f '$(srcdir)/generated/maxloc0_8_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_8_i1.Tpo" "$(DEPDIR)/maxloc0_8_i1.Plo"; else rm -f "$(DEPDIR)/maxloc0_8_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_8_i1.c' object='maxloc0_8_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_8_i1.lo `test -f '$(srcdir)/generated/maxloc0_8_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_i1.c + +maxloc0_16_i1.lo: $(srcdir)/generated/maxloc0_16_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_16_i1.lo -MD -MP -MF "$(DEPDIR)/maxloc0_16_i1.Tpo" -c -o maxloc0_16_i1.lo `test -f '$(srcdir)/generated/maxloc0_16_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_16_i1.Tpo" "$(DEPDIR)/maxloc0_16_i1.Plo"; else rm -f "$(DEPDIR)/maxloc0_16_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_16_i1.c' object='maxloc0_16_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_16_i1.lo `test -f '$(srcdir)/generated/maxloc0_16_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_i1.c + +maxloc0_4_i2.lo: $(srcdir)/generated/maxloc0_4_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_4_i2.lo -MD -MP -MF "$(DEPDIR)/maxloc0_4_i2.Tpo" -c -o maxloc0_4_i2.lo `test -f '$(srcdir)/generated/maxloc0_4_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_4_i2.Tpo" "$(DEPDIR)/maxloc0_4_i2.Plo"; else rm -f "$(DEPDIR)/maxloc0_4_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_4_i2.c' object='maxloc0_4_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_4_i2.lo `test -f '$(srcdir)/generated/maxloc0_4_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_i2.c + +maxloc0_8_i2.lo: $(srcdir)/generated/maxloc0_8_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_8_i2.lo -MD -MP -MF "$(DEPDIR)/maxloc0_8_i2.Tpo" -c -o maxloc0_8_i2.lo `test -f '$(srcdir)/generated/maxloc0_8_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_8_i2.Tpo" "$(DEPDIR)/maxloc0_8_i2.Plo"; else rm -f "$(DEPDIR)/maxloc0_8_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_8_i2.c' object='maxloc0_8_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_8_i2.lo `test -f '$(srcdir)/generated/maxloc0_8_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_i2.c + +maxloc0_16_i2.lo: $(srcdir)/generated/maxloc0_16_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_16_i2.lo -MD -MP -MF "$(DEPDIR)/maxloc0_16_i2.Tpo" -c -o maxloc0_16_i2.lo `test -f '$(srcdir)/generated/maxloc0_16_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_16_i2.Tpo" "$(DEPDIR)/maxloc0_16_i2.Plo"; else rm -f "$(DEPDIR)/maxloc0_16_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_16_i2.c' object='maxloc0_16_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_16_i2.lo `test -f '$(srcdir)/generated/maxloc0_16_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_i2.c + +maxloc0_4_i4.lo: $(srcdir)/generated/maxloc0_4_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_4_i4.lo -MD -MP -MF "$(DEPDIR)/maxloc0_4_i4.Tpo" -c -o maxloc0_4_i4.lo `test -f '$(srcdir)/generated/maxloc0_4_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_4_i4.Tpo" "$(DEPDIR)/maxloc0_4_i4.Plo"; else rm -f "$(DEPDIR)/maxloc0_4_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_4_i4.c' object='maxloc0_4_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_4_i4.lo `test -f '$(srcdir)/generated/maxloc0_4_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_i4.c + +maxloc0_8_i4.lo: $(srcdir)/generated/maxloc0_8_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_8_i4.lo -MD -MP -MF "$(DEPDIR)/maxloc0_8_i4.Tpo" -c -o maxloc0_8_i4.lo `test -f '$(srcdir)/generated/maxloc0_8_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_8_i4.Tpo" "$(DEPDIR)/maxloc0_8_i4.Plo"; else rm -f "$(DEPDIR)/maxloc0_8_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_8_i4.c' object='maxloc0_8_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_8_i4.lo `test -f '$(srcdir)/generated/maxloc0_8_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_i4.c + +maxloc0_16_i4.lo: $(srcdir)/generated/maxloc0_16_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_16_i4.lo -MD -MP -MF "$(DEPDIR)/maxloc0_16_i4.Tpo" -c -o maxloc0_16_i4.lo `test -f '$(srcdir)/generated/maxloc0_16_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_16_i4.Tpo" "$(DEPDIR)/maxloc0_16_i4.Plo"; else rm -f "$(DEPDIR)/maxloc0_16_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_16_i4.c' object='maxloc0_16_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_16_i4.lo `test -f '$(srcdir)/generated/maxloc0_16_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_i4.c + +maxloc0_4_i8.lo: $(srcdir)/generated/maxloc0_4_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_4_i8.lo -MD -MP -MF "$(DEPDIR)/maxloc0_4_i8.Tpo" -c -o maxloc0_4_i8.lo `test -f '$(srcdir)/generated/maxloc0_4_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_4_i8.Tpo" "$(DEPDIR)/maxloc0_4_i8.Plo"; else rm -f "$(DEPDIR)/maxloc0_4_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_4_i8.c' object='maxloc0_4_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_4_i8.lo `test -f '$(srcdir)/generated/maxloc0_4_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_i8.c + +maxloc0_8_i8.lo: $(srcdir)/generated/maxloc0_8_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_8_i8.lo -MD -MP -MF "$(DEPDIR)/maxloc0_8_i8.Tpo" -c -o maxloc0_8_i8.lo `test -f '$(srcdir)/generated/maxloc0_8_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_8_i8.Tpo" "$(DEPDIR)/maxloc0_8_i8.Plo"; else rm -f "$(DEPDIR)/maxloc0_8_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_8_i8.c' object='maxloc0_8_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_8_i8.lo `test -f '$(srcdir)/generated/maxloc0_8_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_i8.c + +maxloc0_16_i8.lo: $(srcdir)/generated/maxloc0_16_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_16_i8.lo -MD -MP -MF "$(DEPDIR)/maxloc0_16_i8.Tpo" -c -o maxloc0_16_i8.lo `test -f '$(srcdir)/generated/maxloc0_16_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_16_i8.Tpo" "$(DEPDIR)/maxloc0_16_i8.Plo"; else rm -f "$(DEPDIR)/maxloc0_16_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_16_i8.c' object='maxloc0_16_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_16_i8.lo `test -f '$(srcdir)/generated/maxloc0_16_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_i8.c + +maxloc0_4_i16.lo: $(srcdir)/generated/maxloc0_4_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_4_i16.lo -MD -MP -MF "$(DEPDIR)/maxloc0_4_i16.Tpo" -c -o maxloc0_4_i16.lo `test -f '$(srcdir)/generated/maxloc0_4_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_4_i16.Tpo" "$(DEPDIR)/maxloc0_4_i16.Plo"; else rm -f "$(DEPDIR)/maxloc0_4_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_4_i16.c' object='maxloc0_4_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_4_i16.lo `test -f '$(srcdir)/generated/maxloc0_4_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_i16.c + +maxloc0_8_i16.lo: $(srcdir)/generated/maxloc0_8_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_8_i16.lo -MD -MP -MF "$(DEPDIR)/maxloc0_8_i16.Tpo" -c -o maxloc0_8_i16.lo `test -f '$(srcdir)/generated/maxloc0_8_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_8_i16.Tpo" "$(DEPDIR)/maxloc0_8_i16.Plo"; else rm -f "$(DEPDIR)/maxloc0_8_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_8_i16.c' object='maxloc0_8_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_8_i16.lo `test -f '$(srcdir)/generated/maxloc0_8_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_i16.c + +maxloc0_16_i16.lo: $(srcdir)/generated/maxloc0_16_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_16_i16.lo -MD -MP -MF "$(DEPDIR)/maxloc0_16_i16.Tpo" -c -o maxloc0_16_i16.lo `test -f '$(srcdir)/generated/maxloc0_16_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_16_i16.Tpo" "$(DEPDIR)/maxloc0_16_i16.Plo"; else rm -f "$(DEPDIR)/maxloc0_16_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_16_i16.c' object='maxloc0_16_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_16_i16.lo `test -f '$(srcdir)/generated/maxloc0_16_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_i16.c + +maxloc0_4_r4.lo: $(srcdir)/generated/maxloc0_4_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_4_r4.lo -MD -MP -MF "$(DEPDIR)/maxloc0_4_r4.Tpo" -c -o maxloc0_4_r4.lo `test -f '$(srcdir)/generated/maxloc0_4_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_4_r4.Tpo" "$(DEPDIR)/maxloc0_4_r4.Plo"; else rm -f "$(DEPDIR)/maxloc0_4_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_4_r4.c' object='maxloc0_4_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_4_r4.lo `test -f '$(srcdir)/generated/maxloc0_4_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_r4.c + +maxloc0_8_r4.lo: $(srcdir)/generated/maxloc0_8_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_8_r4.lo -MD -MP -MF "$(DEPDIR)/maxloc0_8_r4.Tpo" -c -o maxloc0_8_r4.lo `test -f '$(srcdir)/generated/maxloc0_8_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_8_r4.Tpo" "$(DEPDIR)/maxloc0_8_r4.Plo"; else rm -f "$(DEPDIR)/maxloc0_8_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_8_r4.c' object='maxloc0_8_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_8_r4.lo `test -f '$(srcdir)/generated/maxloc0_8_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_r4.c + +maxloc0_16_r4.lo: $(srcdir)/generated/maxloc0_16_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_16_r4.lo -MD -MP -MF "$(DEPDIR)/maxloc0_16_r4.Tpo" -c -o maxloc0_16_r4.lo `test -f '$(srcdir)/generated/maxloc0_16_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_16_r4.Tpo" "$(DEPDIR)/maxloc0_16_r4.Plo"; else rm -f "$(DEPDIR)/maxloc0_16_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_16_r4.c' object='maxloc0_16_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_16_r4.lo `test -f '$(srcdir)/generated/maxloc0_16_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_r4.c + +maxloc0_4_r8.lo: $(srcdir)/generated/maxloc0_4_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_4_r8.lo -MD -MP -MF "$(DEPDIR)/maxloc0_4_r8.Tpo" -c -o maxloc0_4_r8.lo `test -f '$(srcdir)/generated/maxloc0_4_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_4_r8.Tpo" "$(DEPDIR)/maxloc0_4_r8.Plo"; else rm -f "$(DEPDIR)/maxloc0_4_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_4_r8.c' object='maxloc0_4_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_4_r8.lo `test -f '$(srcdir)/generated/maxloc0_4_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_r8.c + +maxloc0_8_r8.lo: $(srcdir)/generated/maxloc0_8_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_8_r8.lo -MD -MP -MF "$(DEPDIR)/maxloc0_8_r8.Tpo" -c -o maxloc0_8_r8.lo `test -f '$(srcdir)/generated/maxloc0_8_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_8_r8.Tpo" "$(DEPDIR)/maxloc0_8_r8.Plo"; else rm -f "$(DEPDIR)/maxloc0_8_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_8_r8.c' object='maxloc0_8_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_8_r8.lo `test -f '$(srcdir)/generated/maxloc0_8_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_r8.c + +maxloc0_16_r8.lo: $(srcdir)/generated/maxloc0_16_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_16_r8.lo -MD -MP -MF "$(DEPDIR)/maxloc0_16_r8.Tpo" -c -o maxloc0_16_r8.lo `test -f '$(srcdir)/generated/maxloc0_16_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_16_r8.Tpo" "$(DEPDIR)/maxloc0_16_r8.Plo"; else rm -f "$(DEPDIR)/maxloc0_16_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_16_r8.c' object='maxloc0_16_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_16_r8.lo `test -f '$(srcdir)/generated/maxloc0_16_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_r8.c + +maxloc0_4_r10.lo: $(srcdir)/generated/maxloc0_4_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_4_r10.lo -MD -MP -MF "$(DEPDIR)/maxloc0_4_r10.Tpo" -c -o maxloc0_4_r10.lo `test -f '$(srcdir)/generated/maxloc0_4_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_4_r10.Tpo" "$(DEPDIR)/maxloc0_4_r10.Plo"; else rm -f "$(DEPDIR)/maxloc0_4_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_4_r10.c' object='maxloc0_4_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_4_r10.lo `test -f '$(srcdir)/generated/maxloc0_4_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_r10.c + +maxloc0_8_r10.lo: $(srcdir)/generated/maxloc0_8_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_8_r10.lo -MD -MP -MF "$(DEPDIR)/maxloc0_8_r10.Tpo" -c -o maxloc0_8_r10.lo `test -f '$(srcdir)/generated/maxloc0_8_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_8_r10.Tpo" "$(DEPDIR)/maxloc0_8_r10.Plo"; else rm -f "$(DEPDIR)/maxloc0_8_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_8_r10.c' object='maxloc0_8_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_8_r10.lo `test -f '$(srcdir)/generated/maxloc0_8_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_r10.c + +maxloc0_16_r10.lo: $(srcdir)/generated/maxloc0_16_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_16_r10.lo -MD -MP -MF "$(DEPDIR)/maxloc0_16_r10.Tpo" -c -o maxloc0_16_r10.lo `test -f '$(srcdir)/generated/maxloc0_16_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_16_r10.Tpo" "$(DEPDIR)/maxloc0_16_r10.Plo"; else rm -f "$(DEPDIR)/maxloc0_16_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_16_r10.c' object='maxloc0_16_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_16_r10.lo `test -f '$(srcdir)/generated/maxloc0_16_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_r10.c + +maxloc0_4_r16.lo: $(srcdir)/generated/maxloc0_4_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_4_r16.lo -MD -MP -MF "$(DEPDIR)/maxloc0_4_r16.Tpo" -c -o maxloc0_4_r16.lo `test -f '$(srcdir)/generated/maxloc0_4_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_4_r16.Tpo" "$(DEPDIR)/maxloc0_4_r16.Plo"; else rm -f "$(DEPDIR)/maxloc0_4_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_4_r16.c' object='maxloc0_4_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_4_r16.lo `test -f '$(srcdir)/generated/maxloc0_4_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_4_r16.c + +maxloc0_8_r16.lo: $(srcdir)/generated/maxloc0_8_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_8_r16.lo -MD -MP -MF "$(DEPDIR)/maxloc0_8_r16.Tpo" -c -o maxloc0_8_r16.lo `test -f '$(srcdir)/generated/maxloc0_8_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_8_r16.Tpo" "$(DEPDIR)/maxloc0_8_r16.Plo"; else rm -f "$(DEPDIR)/maxloc0_8_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_8_r16.c' object='maxloc0_8_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_8_r16.lo `test -f '$(srcdir)/generated/maxloc0_8_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_8_r16.c + +maxloc0_16_r16.lo: $(srcdir)/generated/maxloc0_16_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc0_16_r16.lo -MD -MP -MF "$(DEPDIR)/maxloc0_16_r16.Tpo" -c -o maxloc0_16_r16.lo `test -f '$(srcdir)/generated/maxloc0_16_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc0_16_r16.Tpo" "$(DEPDIR)/maxloc0_16_r16.Plo"; else rm -f "$(DEPDIR)/maxloc0_16_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc0_16_r16.c' object='maxloc0_16_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc0_16_r16.lo `test -f '$(srcdir)/generated/maxloc0_16_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc0_16_r16.c + +maxloc1_4_i1.lo: $(srcdir)/generated/maxloc1_4_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_4_i1.lo -MD -MP -MF "$(DEPDIR)/maxloc1_4_i1.Tpo" -c -o maxloc1_4_i1.lo `test -f '$(srcdir)/generated/maxloc1_4_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_4_i1.Tpo" "$(DEPDIR)/maxloc1_4_i1.Plo"; else rm -f "$(DEPDIR)/maxloc1_4_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_4_i1.c' object='maxloc1_4_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_4_i1.lo `test -f '$(srcdir)/generated/maxloc1_4_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_i1.c + +maxloc1_8_i1.lo: $(srcdir)/generated/maxloc1_8_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_8_i1.lo -MD -MP -MF "$(DEPDIR)/maxloc1_8_i1.Tpo" -c -o maxloc1_8_i1.lo `test -f '$(srcdir)/generated/maxloc1_8_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_8_i1.Tpo" "$(DEPDIR)/maxloc1_8_i1.Plo"; else rm -f "$(DEPDIR)/maxloc1_8_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_8_i1.c' object='maxloc1_8_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_8_i1.lo `test -f '$(srcdir)/generated/maxloc1_8_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_i1.c + +maxloc1_16_i1.lo: $(srcdir)/generated/maxloc1_16_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_16_i1.lo -MD -MP -MF "$(DEPDIR)/maxloc1_16_i1.Tpo" -c -o maxloc1_16_i1.lo `test -f '$(srcdir)/generated/maxloc1_16_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_16_i1.Tpo" "$(DEPDIR)/maxloc1_16_i1.Plo"; else rm -f "$(DEPDIR)/maxloc1_16_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_16_i1.c' object='maxloc1_16_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_16_i1.lo `test -f '$(srcdir)/generated/maxloc1_16_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_i1.c + +maxloc1_4_i2.lo: $(srcdir)/generated/maxloc1_4_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_4_i2.lo -MD -MP -MF "$(DEPDIR)/maxloc1_4_i2.Tpo" -c -o maxloc1_4_i2.lo `test -f '$(srcdir)/generated/maxloc1_4_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_4_i2.Tpo" "$(DEPDIR)/maxloc1_4_i2.Plo"; else rm -f "$(DEPDIR)/maxloc1_4_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_4_i2.c' object='maxloc1_4_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_4_i2.lo `test -f '$(srcdir)/generated/maxloc1_4_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_i2.c + +maxloc1_8_i2.lo: $(srcdir)/generated/maxloc1_8_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_8_i2.lo -MD -MP -MF "$(DEPDIR)/maxloc1_8_i2.Tpo" -c -o maxloc1_8_i2.lo `test -f '$(srcdir)/generated/maxloc1_8_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_8_i2.Tpo" "$(DEPDIR)/maxloc1_8_i2.Plo"; else rm -f "$(DEPDIR)/maxloc1_8_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_8_i2.c' object='maxloc1_8_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_8_i2.lo `test -f '$(srcdir)/generated/maxloc1_8_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_i2.c + +maxloc1_16_i2.lo: $(srcdir)/generated/maxloc1_16_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_16_i2.lo -MD -MP -MF "$(DEPDIR)/maxloc1_16_i2.Tpo" -c -o maxloc1_16_i2.lo `test -f '$(srcdir)/generated/maxloc1_16_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_16_i2.Tpo" "$(DEPDIR)/maxloc1_16_i2.Plo"; else rm -f "$(DEPDIR)/maxloc1_16_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_16_i2.c' object='maxloc1_16_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_16_i2.lo `test -f '$(srcdir)/generated/maxloc1_16_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_i2.c + +maxloc1_4_i4.lo: $(srcdir)/generated/maxloc1_4_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_4_i4.lo -MD -MP -MF "$(DEPDIR)/maxloc1_4_i4.Tpo" -c -o maxloc1_4_i4.lo `test -f '$(srcdir)/generated/maxloc1_4_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_4_i4.Tpo" "$(DEPDIR)/maxloc1_4_i4.Plo"; else rm -f "$(DEPDIR)/maxloc1_4_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_4_i4.c' object='maxloc1_4_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_4_i4.lo `test -f '$(srcdir)/generated/maxloc1_4_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_i4.c + +maxloc1_8_i4.lo: $(srcdir)/generated/maxloc1_8_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_8_i4.lo -MD -MP -MF "$(DEPDIR)/maxloc1_8_i4.Tpo" -c -o maxloc1_8_i4.lo `test -f '$(srcdir)/generated/maxloc1_8_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_8_i4.Tpo" "$(DEPDIR)/maxloc1_8_i4.Plo"; else rm -f "$(DEPDIR)/maxloc1_8_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_8_i4.c' object='maxloc1_8_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_8_i4.lo `test -f '$(srcdir)/generated/maxloc1_8_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_i4.c + +maxloc1_16_i4.lo: $(srcdir)/generated/maxloc1_16_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_16_i4.lo -MD -MP -MF "$(DEPDIR)/maxloc1_16_i4.Tpo" -c -o maxloc1_16_i4.lo `test -f '$(srcdir)/generated/maxloc1_16_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_16_i4.Tpo" "$(DEPDIR)/maxloc1_16_i4.Plo"; else rm -f "$(DEPDIR)/maxloc1_16_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_16_i4.c' object='maxloc1_16_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_16_i4.lo `test -f '$(srcdir)/generated/maxloc1_16_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_i4.c + +maxloc1_4_i8.lo: $(srcdir)/generated/maxloc1_4_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_4_i8.lo -MD -MP -MF "$(DEPDIR)/maxloc1_4_i8.Tpo" -c -o maxloc1_4_i8.lo `test -f '$(srcdir)/generated/maxloc1_4_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_4_i8.Tpo" "$(DEPDIR)/maxloc1_4_i8.Plo"; else rm -f "$(DEPDIR)/maxloc1_4_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_4_i8.c' object='maxloc1_4_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_4_i8.lo `test -f '$(srcdir)/generated/maxloc1_4_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_i8.c + +maxloc1_8_i8.lo: $(srcdir)/generated/maxloc1_8_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_8_i8.lo -MD -MP -MF "$(DEPDIR)/maxloc1_8_i8.Tpo" -c -o maxloc1_8_i8.lo `test -f '$(srcdir)/generated/maxloc1_8_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_8_i8.Tpo" "$(DEPDIR)/maxloc1_8_i8.Plo"; else rm -f "$(DEPDIR)/maxloc1_8_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_8_i8.c' object='maxloc1_8_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_8_i8.lo `test -f '$(srcdir)/generated/maxloc1_8_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_i8.c + +maxloc1_16_i8.lo: $(srcdir)/generated/maxloc1_16_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_16_i8.lo -MD -MP -MF "$(DEPDIR)/maxloc1_16_i8.Tpo" -c -o maxloc1_16_i8.lo `test -f '$(srcdir)/generated/maxloc1_16_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_16_i8.Tpo" "$(DEPDIR)/maxloc1_16_i8.Plo"; else rm -f "$(DEPDIR)/maxloc1_16_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_16_i8.c' object='maxloc1_16_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_16_i8.lo `test -f '$(srcdir)/generated/maxloc1_16_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_i8.c + +maxloc1_4_i16.lo: $(srcdir)/generated/maxloc1_4_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_4_i16.lo -MD -MP -MF "$(DEPDIR)/maxloc1_4_i16.Tpo" -c -o maxloc1_4_i16.lo `test -f '$(srcdir)/generated/maxloc1_4_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_4_i16.Tpo" "$(DEPDIR)/maxloc1_4_i16.Plo"; else rm -f "$(DEPDIR)/maxloc1_4_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_4_i16.c' object='maxloc1_4_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_4_i16.lo `test -f '$(srcdir)/generated/maxloc1_4_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_i16.c + +maxloc1_8_i16.lo: $(srcdir)/generated/maxloc1_8_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_8_i16.lo -MD -MP -MF "$(DEPDIR)/maxloc1_8_i16.Tpo" -c -o maxloc1_8_i16.lo `test -f '$(srcdir)/generated/maxloc1_8_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_8_i16.Tpo" "$(DEPDIR)/maxloc1_8_i16.Plo"; else rm -f "$(DEPDIR)/maxloc1_8_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_8_i16.c' object='maxloc1_8_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_8_i16.lo `test -f '$(srcdir)/generated/maxloc1_8_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_i16.c + +maxloc1_16_i16.lo: $(srcdir)/generated/maxloc1_16_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_16_i16.lo -MD -MP -MF "$(DEPDIR)/maxloc1_16_i16.Tpo" -c -o maxloc1_16_i16.lo `test -f '$(srcdir)/generated/maxloc1_16_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_16_i16.Tpo" "$(DEPDIR)/maxloc1_16_i16.Plo"; else rm -f "$(DEPDIR)/maxloc1_16_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_16_i16.c' object='maxloc1_16_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_16_i16.lo `test -f '$(srcdir)/generated/maxloc1_16_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_i16.c + +maxloc1_4_r4.lo: $(srcdir)/generated/maxloc1_4_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_4_r4.lo -MD -MP -MF "$(DEPDIR)/maxloc1_4_r4.Tpo" -c -o maxloc1_4_r4.lo `test -f '$(srcdir)/generated/maxloc1_4_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_4_r4.Tpo" "$(DEPDIR)/maxloc1_4_r4.Plo"; else rm -f "$(DEPDIR)/maxloc1_4_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_4_r4.c' object='maxloc1_4_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_4_r4.lo `test -f '$(srcdir)/generated/maxloc1_4_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_r4.c + +maxloc1_8_r4.lo: $(srcdir)/generated/maxloc1_8_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_8_r4.lo -MD -MP -MF "$(DEPDIR)/maxloc1_8_r4.Tpo" -c -o maxloc1_8_r4.lo `test -f '$(srcdir)/generated/maxloc1_8_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_8_r4.Tpo" "$(DEPDIR)/maxloc1_8_r4.Plo"; else rm -f "$(DEPDIR)/maxloc1_8_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_8_r4.c' object='maxloc1_8_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_8_r4.lo `test -f '$(srcdir)/generated/maxloc1_8_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_r4.c + +maxloc1_16_r4.lo: $(srcdir)/generated/maxloc1_16_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_16_r4.lo -MD -MP -MF "$(DEPDIR)/maxloc1_16_r4.Tpo" -c -o maxloc1_16_r4.lo `test -f '$(srcdir)/generated/maxloc1_16_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_16_r4.Tpo" "$(DEPDIR)/maxloc1_16_r4.Plo"; else rm -f "$(DEPDIR)/maxloc1_16_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_16_r4.c' object='maxloc1_16_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_16_r4.lo `test -f '$(srcdir)/generated/maxloc1_16_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_r4.c + +maxloc1_4_r8.lo: $(srcdir)/generated/maxloc1_4_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_4_r8.lo -MD -MP -MF "$(DEPDIR)/maxloc1_4_r8.Tpo" -c -o maxloc1_4_r8.lo `test -f '$(srcdir)/generated/maxloc1_4_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_4_r8.Tpo" "$(DEPDIR)/maxloc1_4_r8.Plo"; else rm -f "$(DEPDIR)/maxloc1_4_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_4_r8.c' object='maxloc1_4_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_4_r8.lo `test -f '$(srcdir)/generated/maxloc1_4_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_r8.c + +maxloc1_8_r8.lo: $(srcdir)/generated/maxloc1_8_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_8_r8.lo -MD -MP -MF "$(DEPDIR)/maxloc1_8_r8.Tpo" -c -o maxloc1_8_r8.lo `test -f '$(srcdir)/generated/maxloc1_8_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_8_r8.Tpo" "$(DEPDIR)/maxloc1_8_r8.Plo"; else rm -f "$(DEPDIR)/maxloc1_8_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_8_r8.c' object='maxloc1_8_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_8_r8.lo `test -f '$(srcdir)/generated/maxloc1_8_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_r8.c + +maxloc1_16_r8.lo: $(srcdir)/generated/maxloc1_16_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_16_r8.lo -MD -MP -MF "$(DEPDIR)/maxloc1_16_r8.Tpo" -c -o maxloc1_16_r8.lo `test -f '$(srcdir)/generated/maxloc1_16_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_16_r8.Tpo" "$(DEPDIR)/maxloc1_16_r8.Plo"; else rm -f "$(DEPDIR)/maxloc1_16_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_16_r8.c' object='maxloc1_16_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_16_r8.lo `test -f '$(srcdir)/generated/maxloc1_16_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_r8.c + +maxloc1_4_r10.lo: $(srcdir)/generated/maxloc1_4_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_4_r10.lo -MD -MP -MF "$(DEPDIR)/maxloc1_4_r10.Tpo" -c -o maxloc1_4_r10.lo `test -f '$(srcdir)/generated/maxloc1_4_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_4_r10.Tpo" "$(DEPDIR)/maxloc1_4_r10.Plo"; else rm -f "$(DEPDIR)/maxloc1_4_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_4_r10.c' object='maxloc1_4_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_4_r10.lo `test -f '$(srcdir)/generated/maxloc1_4_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_r10.c + +maxloc1_8_r10.lo: $(srcdir)/generated/maxloc1_8_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_8_r10.lo -MD -MP -MF "$(DEPDIR)/maxloc1_8_r10.Tpo" -c -o maxloc1_8_r10.lo `test -f '$(srcdir)/generated/maxloc1_8_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_8_r10.Tpo" "$(DEPDIR)/maxloc1_8_r10.Plo"; else rm -f "$(DEPDIR)/maxloc1_8_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_8_r10.c' object='maxloc1_8_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_8_r10.lo `test -f '$(srcdir)/generated/maxloc1_8_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_r10.c + +maxloc1_16_r10.lo: $(srcdir)/generated/maxloc1_16_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_16_r10.lo -MD -MP -MF "$(DEPDIR)/maxloc1_16_r10.Tpo" -c -o maxloc1_16_r10.lo `test -f '$(srcdir)/generated/maxloc1_16_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_16_r10.Tpo" "$(DEPDIR)/maxloc1_16_r10.Plo"; else rm -f "$(DEPDIR)/maxloc1_16_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_16_r10.c' object='maxloc1_16_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_16_r10.lo `test -f '$(srcdir)/generated/maxloc1_16_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_r10.c + +maxloc1_4_r16.lo: $(srcdir)/generated/maxloc1_4_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_4_r16.lo -MD -MP -MF "$(DEPDIR)/maxloc1_4_r16.Tpo" -c -o maxloc1_4_r16.lo `test -f '$(srcdir)/generated/maxloc1_4_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_4_r16.Tpo" "$(DEPDIR)/maxloc1_4_r16.Plo"; else rm -f "$(DEPDIR)/maxloc1_4_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_4_r16.c' object='maxloc1_4_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_4_r16.lo `test -f '$(srcdir)/generated/maxloc1_4_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_4_r16.c + +maxloc1_8_r16.lo: $(srcdir)/generated/maxloc1_8_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_8_r16.lo -MD -MP -MF "$(DEPDIR)/maxloc1_8_r16.Tpo" -c -o maxloc1_8_r16.lo `test -f '$(srcdir)/generated/maxloc1_8_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_8_r16.Tpo" "$(DEPDIR)/maxloc1_8_r16.Plo"; else rm -f "$(DEPDIR)/maxloc1_8_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_8_r16.c' object='maxloc1_8_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_8_r16.lo `test -f '$(srcdir)/generated/maxloc1_8_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_8_r16.c + +maxloc1_16_r16.lo: $(srcdir)/generated/maxloc1_16_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxloc1_16_r16.lo -MD -MP -MF "$(DEPDIR)/maxloc1_16_r16.Tpo" -c -o maxloc1_16_r16.lo `test -f '$(srcdir)/generated/maxloc1_16_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxloc1_16_r16.Tpo" "$(DEPDIR)/maxloc1_16_r16.Plo"; else rm -f "$(DEPDIR)/maxloc1_16_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxloc1_16_r16.c' object='maxloc1_16_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxloc1_16_r16.lo `test -f '$(srcdir)/generated/maxloc1_16_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxloc1_16_r16.c + +maxval_i1.lo: $(srcdir)/generated/maxval_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxval_i1.lo -MD -MP -MF "$(DEPDIR)/maxval_i1.Tpo" -c -o maxval_i1.lo `test -f '$(srcdir)/generated/maxval_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxval_i1.Tpo" "$(DEPDIR)/maxval_i1.Plo"; else rm -f "$(DEPDIR)/maxval_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxval_i1.c' object='maxval_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxval_i1.lo `test -f '$(srcdir)/generated/maxval_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_i1.c + +maxval_i2.lo: $(srcdir)/generated/maxval_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxval_i2.lo -MD -MP -MF "$(DEPDIR)/maxval_i2.Tpo" -c -o maxval_i2.lo `test -f '$(srcdir)/generated/maxval_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxval_i2.Tpo" "$(DEPDIR)/maxval_i2.Plo"; else rm -f "$(DEPDIR)/maxval_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxval_i2.c' object='maxval_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxval_i2.lo `test -f '$(srcdir)/generated/maxval_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_i2.c + +maxval_i4.lo: $(srcdir)/generated/maxval_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxval_i4.lo -MD -MP -MF "$(DEPDIR)/maxval_i4.Tpo" -c -o maxval_i4.lo `test -f '$(srcdir)/generated/maxval_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxval_i4.Tpo" "$(DEPDIR)/maxval_i4.Plo"; else rm -f "$(DEPDIR)/maxval_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxval_i4.c' object='maxval_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxval_i4.lo `test -f '$(srcdir)/generated/maxval_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_i4.c + +maxval_i8.lo: $(srcdir)/generated/maxval_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxval_i8.lo -MD -MP -MF "$(DEPDIR)/maxval_i8.Tpo" -c -o maxval_i8.lo `test -f '$(srcdir)/generated/maxval_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxval_i8.Tpo" "$(DEPDIR)/maxval_i8.Plo"; else rm -f "$(DEPDIR)/maxval_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxval_i8.c' object='maxval_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxval_i8.lo `test -f '$(srcdir)/generated/maxval_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_i8.c + +maxval_i16.lo: $(srcdir)/generated/maxval_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxval_i16.lo -MD -MP -MF "$(DEPDIR)/maxval_i16.Tpo" -c -o maxval_i16.lo `test -f '$(srcdir)/generated/maxval_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxval_i16.Tpo" "$(DEPDIR)/maxval_i16.Plo"; else rm -f "$(DEPDIR)/maxval_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxval_i16.c' object='maxval_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxval_i16.lo `test -f '$(srcdir)/generated/maxval_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_i16.c + +maxval_r4.lo: $(srcdir)/generated/maxval_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxval_r4.lo -MD -MP -MF "$(DEPDIR)/maxval_r4.Tpo" -c -o maxval_r4.lo `test -f '$(srcdir)/generated/maxval_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxval_r4.Tpo" "$(DEPDIR)/maxval_r4.Plo"; else rm -f "$(DEPDIR)/maxval_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxval_r4.c' object='maxval_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxval_r4.lo `test -f '$(srcdir)/generated/maxval_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_r4.c + +maxval_r8.lo: $(srcdir)/generated/maxval_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxval_r8.lo -MD -MP -MF "$(DEPDIR)/maxval_r8.Tpo" -c -o maxval_r8.lo `test -f '$(srcdir)/generated/maxval_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxval_r8.Tpo" "$(DEPDIR)/maxval_r8.Plo"; else rm -f "$(DEPDIR)/maxval_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxval_r8.c' object='maxval_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxval_r8.lo `test -f '$(srcdir)/generated/maxval_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_r8.c + +maxval_r10.lo: $(srcdir)/generated/maxval_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxval_r10.lo -MD -MP -MF "$(DEPDIR)/maxval_r10.Tpo" -c -o maxval_r10.lo `test -f '$(srcdir)/generated/maxval_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxval_r10.Tpo" "$(DEPDIR)/maxval_r10.Plo"; else rm -f "$(DEPDIR)/maxval_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxval_r10.c' object='maxval_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxval_r10.lo `test -f '$(srcdir)/generated/maxval_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_r10.c + +maxval_r16.lo: $(srcdir)/generated/maxval_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT maxval_r16.lo -MD -MP -MF "$(DEPDIR)/maxval_r16.Tpo" -c -o maxval_r16.lo `test -f '$(srcdir)/generated/maxval_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/maxval_r16.Tpo" "$(DEPDIR)/maxval_r16.Plo"; else rm -f "$(DEPDIR)/maxval_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/maxval_r16.c' object='maxval_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o maxval_r16.lo `test -f '$(srcdir)/generated/maxval_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/maxval_r16.c + +minloc0_4_i1.lo: $(srcdir)/generated/minloc0_4_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_4_i1.lo -MD -MP -MF "$(DEPDIR)/minloc0_4_i1.Tpo" -c -o minloc0_4_i1.lo `test -f '$(srcdir)/generated/minloc0_4_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_4_i1.Tpo" "$(DEPDIR)/minloc0_4_i1.Plo"; else rm -f "$(DEPDIR)/minloc0_4_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_4_i1.c' object='minloc0_4_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_4_i1.lo `test -f '$(srcdir)/generated/minloc0_4_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_i1.c + +minloc0_8_i1.lo: $(srcdir)/generated/minloc0_8_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_8_i1.lo -MD -MP -MF "$(DEPDIR)/minloc0_8_i1.Tpo" -c -o minloc0_8_i1.lo `test -f '$(srcdir)/generated/minloc0_8_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_8_i1.Tpo" "$(DEPDIR)/minloc0_8_i1.Plo"; else rm -f "$(DEPDIR)/minloc0_8_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_8_i1.c' object='minloc0_8_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_8_i1.lo `test -f '$(srcdir)/generated/minloc0_8_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_i1.c + +minloc0_16_i1.lo: $(srcdir)/generated/minloc0_16_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_16_i1.lo -MD -MP -MF "$(DEPDIR)/minloc0_16_i1.Tpo" -c -o minloc0_16_i1.lo `test -f '$(srcdir)/generated/minloc0_16_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_16_i1.Tpo" "$(DEPDIR)/minloc0_16_i1.Plo"; else rm -f "$(DEPDIR)/minloc0_16_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_16_i1.c' object='minloc0_16_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_16_i1.lo `test -f '$(srcdir)/generated/minloc0_16_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_i1.c + +minloc0_4_i2.lo: $(srcdir)/generated/minloc0_4_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_4_i2.lo -MD -MP -MF "$(DEPDIR)/minloc0_4_i2.Tpo" -c -o minloc0_4_i2.lo `test -f '$(srcdir)/generated/minloc0_4_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_4_i2.Tpo" "$(DEPDIR)/minloc0_4_i2.Plo"; else rm -f "$(DEPDIR)/minloc0_4_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_4_i2.c' object='minloc0_4_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_4_i2.lo `test -f '$(srcdir)/generated/minloc0_4_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_i2.c + +minloc0_8_i2.lo: $(srcdir)/generated/minloc0_8_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_8_i2.lo -MD -MP -MF "$(DEPDIR)/minloc0_8_i2.Tpo" -c -o minloc0_8_i2.lo `test -f '$(srcdir)/generated/minloc0_8_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_8_i2.Tpo" "$(DEPDIR)/minloc0_8_i2.Plo"; else rm -f "$(DEPDIR)/minloc0_8_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_8_i2.c' object='minloc0_8_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_8_i2.lo `test -f '$(srcdir)/generated/minloc0_8_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_i2.c + +minloc0_16_i2.lo: $(srcdir)/generated/minloc0_16_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_16_i2.lo -MD -MP -MF "$(DEPDIR)/minloc0_16_i2.Tpo" -c -o minloc0_16_i2.lo `test -f '$(srcdir)/generated/minloc0_16_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_16_i2.Tpo" "$(DEPDIR)/minloc0_16_i2.Plo"; else rm -f "$(DEPDIR)/minloc0_16_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_16_i2.c' object='minloc0_16_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_16_i2.lo `test -f '$(srcdir)/generated/minloc0_16_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_i2.c + +minloc0_4_i4.lo: $(srcdir)/generated/minloc0_4_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_4_i4.lo -MD -MP -MF "$(DEPDIR)/minloc0_4_i4.Tpo" -c -o minloc0_4_i4.lo `test -f '$(srcdir)/generated/minloc0_4_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_4_i4.Tpo" "$(DEPDIR)/minloc0_4_i4.Plo"; else rm -f "$(DEPDIR)/minloc0_4_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_4_i4.c' object='minloc0_4_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_4_i4.lo `test -f '$(srcdir)/generated/minloc0_4_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_i4.c + +minloc0_8_i4.lo: $(srcdir)/generated/minloc0_8_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_8_i4.lo -MD -MP -MF "$(DEPDIR)/minloc0_8_i4.Tpo" -c -o minloc0_8_i4.lo `test -f '$(srcdir)/generated/minloc0_8_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_8_i4.Tpo" "$(DEPDIR)/minloc0_8_i4.Plo"; else rm -f "$(DEPDIR)/minloc0_8_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_8_i4.c' object='minloc0_8_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_8_i4.lo `test -f '$(srcdir)/generated/minloc0_8_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_i4.c + +minloc0_16_i4.lo: $(srcdir)/generated/minloc0_16_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_16_i4.lo -MD -MP -MF "$(DEPDIR)/minloc0_16_i4.Tpo" -c -o minloc0_16_i4.lo `test -f '$(srcdir)/generated/minloc0_16_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_16_i4.Tpo" "$(DEPDIR)/minloc0_16_i4.Plo"; else rm -f "$(DEPDIR)/minloc0_16_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_16_i4.c' object='minloc0_16_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_16_i4.lo `test -f '$(srcdir)/generated/minloc0_16_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_i4.c + +minloc0_4_i8.lo: $(srcdir)/generated/minloc0_4_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_4_i8.lo -MD -MP -MF "$(DEPDIR)/minloc0_4_i8.Tpo" -c -o minloc0_4_i8.lo `test -f '$(srcdir)/generated/minloc0_4_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_4_i8.Tpo" "$(DEPDIR)/minloc0_4_i8.Plo"; else rm -f "$(DEPDIR)/minloc0_4_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_4_i8.c' object='minloc0_4_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_4_i8.lo `test -f '$(srcdir)/generated/minloc0_4_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_i8.c + +minloc0_8_i8.lo: $(srcdir)/generated/minloc0_8_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_8_i8.lo -MD -MP -MF "$(DEPDIR)/minloc0_8_i8.Tpo" -c -o minloc0_8_i8.lo `test -f '$(srcdir)/generated/minloc0_8_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_8_i8.Tpo" "$(DEPDIR)/minloc0_8_i8.Plo"; else rm -f "$(DEPDIR)/minloc0_8_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_8_i8.c' object='minloc0_8_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_8_i8.lo `test -f '$(srcdir)/generated/minloc0_8_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_i8.c + +minloc0_16_i8.lo: $(srcdir)/generated/minloc0_16_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_16_i8.lo -MD -MP -MF "$(DEPDIR)/minloc0_16_i8.Tpo" -c -o minloc0_16_i8.lo `test -f '$(srcdir)/generated/minloc0_16_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_16_i8.Tpo" "$(DEPDIR)/minloc0_16_i8.Plo"; else rm -f "$(DEPDIR)/minloc0_16_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_16_i8.c' object='minloc0_16_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_16_i8.lo `test -f '$(srcdir)/generated/minloc0_16_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_i8.c + +minloc0_4_i16.lo: $(srcdir)/generated/minloc0_4_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_4_i16.lo -MD -MP -MF "$(DEPDIR)/minloc0_4_i16.Tpo" -c -o minloc0_4_i16.lo `test -f '$(srcdir)/generated/minloc0_4_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_4_i16.Tpo" "$(DEPDIR)/minloc0_4_i16.Plo"; else rm -f "$(DEPDIR)/minloc0_4_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_4_i16.c' object='minloc0_4_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_4_i16.lo `test -f '$(srcdir)/generated/minloc0_4_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_i16.c + +minloc0_8_i16.lo: $(srcdir)/generated/minloc0_8_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_8_i16.lo -MD -MP -MF "$(DEPDIR)/minloc0_8_i16.Tpo" -c -o minloc0_8_i16.lo `test -f '$(srcdir)/generated/minloc0_8_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_8_i16.Tpo" "$(DEPDIR)/minloc0_8_i16.Plo"; else rm -f "$(DEPDIR)/minloc0_8_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_8_i16.c' object='minloc0_8_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_8_i16.lo `test -f '$(srcdir)/generated/minloc0_8_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_i16.c + +minloc0_16_i16.lo: $(srcdir)/generated/minloc0_16_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_16_i16.lo -MD -MP -MF "$(DEPDIR)/minloc0_16_i16.Tpo" -c -o minloc0_16_i16.lo `test -f '$(srcdir)/generated/minloc0_16_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_16_i16.Tpo" "$(DEPDIR)/minloc0_16_i16.Plo"; else rm -f "$(DEPDIR)/minloc0_16_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_16_i16.c' object='minloc0_16_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_16_i16.lo `test -f '$(srcdir)/generated/minloc0_16_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_i16.c + +minloc0_4_r4.lo: $(srcdir)/generated/minloc0_4_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_4_r4.lo -MD -MP -MF "$(DEPDIR)/minloc0_4_r4.Tpo" -c -o minloc0_4_r4.lo `test -f '$(srcdir)/generated/minloc0_4_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_4_r4.Tpo" "$(DEPDIR)/minloc0_4_r4.Plo"; else rm -f "$(DEPDIR)/minloc0_4_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_4_r4.c' object='minloc0_4_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_4_r4.lo `test -f '$(srcdir)/generated/minloc0_4_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_r4.c + +minloc0_8_r4.lo: $(srcdir)/generated/minloc0_8_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_8_r4.lo -MD -MP -MF "$(DEPDIR)/minloc0_8_r4.Tpo" -c -o minloc0_8_r4.lo `test -f '$(srcdir)/generated/minloc0_8_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_8_r4.Tpo" "$(DEPDIR)/minloc0_8_r4.Plo"; else rm -f "$(DEPDIR)/minloc0_8_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_8_r4.c' object='minloc0_8_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_8_r4.lo `test -f '$(srcdir)/generated/minloc0_8_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_r4.c + +minloc0_16_r4.lo: $(srcdir)/generated/minloc0_16_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_16_r4.lo -MD -MP -MF "$(DEPDIR)/minloc0_16_r4.Tpo" -c -o minloc0_16_r4.lo `test -f '$(srcdir)/generated/minloc0_16_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_16_r4.Tpo" "$(DEPDIR)/minloc0_16_r4.Plo"; else rm -f "$(DEPDIR)/minloc0_16_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_16_r4.c' object='minloc0_16_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_16_r4.lo `test -f '$(srcdir)/generated/minloc0_16_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_r4.c + +minloc0_4_r8.lo: $(srcdir)/generated/minloc0_4_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_4_r8.lo -MD -MP -MF "$(DEPDIR)/minloc0_4_r8.Tpo" -c -o minloc0_4_r8.lo `test -f '$(srcdir)/generated/minloc0_4_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_4_r8.Tpo" "$(DEPDIR)/minloc0_4_r8.Plo"; else rm -f "$(DEPDIR)/minloc0_4_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_4_r8.c' object='minloc0_4_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_4_r8.lo `test -f '$(srcdir)/generated/minloc0_4_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_r8.c + +minloc0_8_r8.lo: $(srcdir)/generated/minloc0_8_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_8_r8.lo -MD -MP -MF "$(DEPDIR)/minloc0_8_r8.Tpo" -c -o minloc0_8_r8.lo `test -f '$(srcdir)/generated/minloc0_8_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_8_r8.Tpo" "$(DEPDIR)/minloc0_8_r8.Plo"; else rm -f "$(DEPDIR)/minloc0_8_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_8_r8.c' object='minloc0_8_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_8_r8.lo `test -f '$(srcdir)/generated/minloc0_8_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_r8.c + +minloc0_16_r8.lo: $(srcdir)/generated/minloc0_16_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_16_r8.lo -MD -MP -MF "$(DEPDIR)/minloc0_16_r8.Tpo" -c -o minloc0_16_r8.lo `test -f '$(srcdir)/generated/minloc0_16_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_16_r8.Tpo" "$(DEPDIR)/minloc0_16_r8.Plo"; else rm -f "$(DEPDIR)/minloc0_16_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_16_r8.c' object='minloc0_16_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_16_r8.lo `test -f '$(srcdir)/generated/minloc0_16_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_r8.c + +minloc0_4_r10.lo: $(srcdir)/generated/minloc0_4_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_4_r10.lo -MD -MP -MF "$(DEPDIR)/minloc0_4_r10.Tpo" -c -o minloc0_4_r10.lo `test -f '$(srcdir)/generated/minloc0_4_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_4_r10.Tpo" "$(DEPDIR)/minloc0_4_r10.Plo"; else rm -f "$(DEPDIR)/minloc0_4_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_4_r10.c' object='minloc0_4_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_4_r10.lo `test -f '$(srcdir)/generated/minloc0_4_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_r10.c + +minloc0_8_r10.lo: $(srcdir)/generated/minloc0_8_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_8_r10.lo -MD -MP -MF "$(DEPDIR)/minloc0_8_r10.Tpo" -c -o minloc0_8_r10.lo `test -f '$(srcdir)/generated/minloc0_8_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_8_r10.Tpo" "$(DEPDIR)/minloc0_8_r10.Plo"; else rm -f "$(DEPDIR)/minloc0_8_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_8_r10.c' object='minloc0_8_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_8_r10.lo `test -f '$(srcdir)/generated/minloc0_8_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_r10.c + +minloc0_16_r10.lo: $(srcdir)/generated/minloc0_16_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_16_r10.lo -MD -MP -MF "$(DEPDIR)/minloc0_16_r10.Tpo" -c -o minloc0_16_r10.lo `test -f '$(srcdir)/generated/minloc0_16_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_16_r10.Tpo" "$(DEPDIR)/minloc0_16_r10.Plo"; else rm -f "$(DEPDIR)/minloc0_16_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_16_r10.c' object='minloc0_16_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_16_r10.lo `test -f '$(srcdir)/generated/minloc0_16_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_r10.c + +minloc0_4_r16.lo: $(srcdir)/generated/minloc0_4_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_4_r16.lo -MD -MP -MF "$(DEPDIR)/minloc0_4_r16.Tpo" -c -o minloc0_4_r16.lo `test -f '$(srcdir)/generated/minloc0_4_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_4_r16.Tpo" "$(DEPDIR)/minloc0_4_r16.Plo"; else rm -f "$(DEPDIR)/minloc0_4_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_4_r16.c' object='minloc0_4_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_4_r16.lo `test -f '$(srcdir)/generated/minloc0_4_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_4_r16.c + +minloc0_8_r16.lo: $(srcdir)/generated/minloc0_8_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_8_r16.lo -MD -MP -MF "$(DEPDIR)/minloc0_8_r16.Tpo" -c -o minloc0_8_r16.lo `test -f '$(srcdir)/generated/minloc0_8_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_8_r16.Tpo" "$(DEPDIR)/minloc0_8_r16.Plo"; else rm -f "$(DEPDIR)/minloc0_8_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_8_r16.c' object='minloc0_8_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_8_r16.lo `test -f '$(srcdir)/generated/minloc0_8_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_8_r16.c + +minloc0_16_r16.lo: $(srcdir)/generated/minloc0_16_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc0_16_r16.lo -MD -MP -MF "$(DEPDIR)/minloc0_16_r16.Tpo" -c -o minloc0_16_r16.lo `test -f '$(srcdir)/generated/minloc0_16_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc0_16_r16.Tpo" "$(DEPDIR)/minloc0_16_r16.Plo"; else rm -f "$(DEPDIR)/minloc0_16_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc0_16_r16.c' object='minloc0_16_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc0_16_r16.lo `test -f '$(srcdir)/generated/minloc0_16_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc0_16_r16.c + +minloc1_4_i1.lo: $(srcdir)/generated/minloc1_4_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_4_i1.lo -MD -MP -MF "$(DEPDIR)/minloc1_4_i1.Tpo" -c -o minloc1_4_i1.lo `test -f '$(srcdir)/generated/minloc1_4_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_4_i1.Tpo" "$(DEPDIR)/minloc1_4_i1.Plo"; else rm -f "$(DEPDIR)/minloc1_4_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_4_i1.c' object='minloc1_4_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_4_i1.lo `test -f '$(srcdir)/generated/minloc1_4_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_i1.c + +minloc1_8_i1.lo: $(srcdir)/generated/minloc1_8_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_8_i1.lo -MD -MP -MF "$(DEPDIR)/minloc1_8_i1.Tpo" -c -o minloc1_8_i1.lo `test -f '$(srcdir)/generated/minloc1_8_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_8_i1.Tpo" "$(DEPDIR)/minloc1_8_i1.Plo"; else rm -f "$(DEPDIR)/minloc1_8_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_8_i1.c' object='minloc1_8_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_8_i1.lo `test -f '$(srcdir)/generated/minloc1_8_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_i1.c + +minloc1_16_i1.lo: $(srcdir)/generated/minloc1_16_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_16_i1.lo -MD -MP -MF "$(DEPDIR)/minloc1_16_i1.Tpo" -c -o minloc1_16_i1.lo `test -f '$(srcdir)/generated/minloc1_16_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_16_i1.Tpo" "$(DEPDIR)/minloc1_16_i1.Plo"; else rm -f "$(DEPDIR)/minloc1_16_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_16_i1.c' object='minloc1_16_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_16_i1.lo `test -f '$(srcdir)/generated/minloc1_16_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_i1.c + +minloc1_4_i2.lo: $(srcdir)/generated/minloc1_4_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_4_i2.lo -MD -MP -MF "$(DEPDIR)/minloc1_4_i2.Tpo" -c -o minloc1_4_i2.lo `test -f '$(srcdir)/generated/minloc1_4_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_4_i2.Tpo" "$(DEPDIR)/minloc1_4_i2.Plo"; else rm -f "$(DEPDIR)/minloc1_4_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_4_i2.c' object='minloc1_4_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_4_i2.lo `test -f '$(srcdir)/generated/minloc1_4_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_i2.c + +minloc1_8_i2.lo: $(srcdir)/generated/minloc1_8_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_8_i2.lo -MD -MP -MF "$(DEPDIR)/minloc1_8_i2.Tpo" -c -o minloc1_8_i2.lo `test -f '$(srcdir)/generated/minloc1_8_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_8_i2.Tpo" "$(DEPDIR)/minloc1_8_i2.Plo"; else rm -f "$(DEPDIR)/minloc1_8_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_8_i2.c' object='minloc1_8_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_8_i2.lo `test -f '$(srcdir)/generated/minloc1_8_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_i2.c + +minloc1_16_i2.lo: $(srcdir)/generated/minloc1_16_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_16_i2.lo -MD -MP -MF "$(DEPDIR)/minloc1_16_i2.Tpo" -c -o minloc1_16_i2.lo `test -f '$(srcdir)/generated/minloc1_16_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_16_i2.Tpo" "$(DEPDIR)/minloc1_16_i2.Plo"; else rm -f "$(DEPDIR)/minloc1_16_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_16_i2.c' object='minloc1_16_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_16_i2.lo `test -f '$(srcdir)/generated/minloc1_16_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_i2.c + +minloc1_4_i4.lo: $(srcdir)/generated/minloc1_4_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_4_i4.lo -MD -MP -MF "$(DEPDIR)/minloc1_4_i4.Tpo" -c -o minloc1_4_i4.lo `test -f '$(srcdir)/generated/minloc1_4_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_4_i4.Tpo" "$(DEPDIR)/minloc1_4_i4.Plo"; else rm -f "$(DEPDIR)/minloc1_4_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_4_i4.c' object='minloc1_4_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_4_i4.lo `test -f '$(srcdir)/generated/minloc1_4_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_i4.c + +minloc1_8_i4.lo: $(srcdir)/generated/minloc1_8_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_8_i4.lo -MD -MP -MF "$(DEPDIR)/minloc1_8_i4.Tpo" -c -o minloc1_8_i4.lo `test -f '$(srcdir)/generated/minloc1_8_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_8_i4.Tpo" "$(DEPDIR)/minloc1_8_i4.Plo"; else rm -f "$(DEPDIR)/minloc1_8_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_8_i4.c' object='minloc1_8_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_8_i4.lo `test -f '$(srcdir)/generated/minloc1_8_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_i4.c + +minloc1_16_i4.lo: $(srcdir)/generated/minloc1_16_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_16_i4.lo -MD -MP -MF "$(DEPDIR)/minloc1_16_i4.Tpo" -c -o minloc1_16_i4.lo `test -f '$(srcdir)/generated/minloc1_16_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_16_i4.Tpo" "$(DEPDIR)/minloc1_16_i4.Plo"; else rm -f "$(DEPDIR)/minloc1_16_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_16_i4.c' object='minloc1_16_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_16_i4.lo `test -f '$(srcdir)/generated/minloc1_16_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_i4.c + +minloc1_4_i8.lo: $(srcdir)/generated/minloc1_4_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_4_i8.lo -MD -MP -MF "$(DEPDIR)/minloc1_4_i8.Tpo" -c -o minloc1_4_i8.lo `test -f '$(srcdir)/generated/minloc1_4_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_4_i8.Tpo" "$(DEPDIR)/minloc1_4_i8.Plo"; else rm -f "$(DEPDIR)/minloc1_4_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_4_i8.c' object='minloc1_4_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_4_i8.lo `test -f '$(srcdir)/generated/minloc1_4_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_i8.c + +minloc1_8_i8.lo: $(srcdir)/generated/minloc1_8_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_8_i8.lo -MD -MP -MF "$(DEPDIR)/minloc1_8_i8.Tpo" -c -o minloc1_8_i8.lo `test -f '$(srcdir)/generated/minloc1_8_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_8_i8.Tpo" "$(DEPDIR)/minloc1_8_i8.Plo"; else rm -f "$(DEPDIR)/minloc1_8_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_8_i8.c' object='minloc1_8_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_8_i8.lo `test -f '$(srcdir)/generated/minloc1_8_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_i8.c + +minloc1_16_i8.lo: $(srcdir)/generated/minloc1_16_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_16_i8.lo -MD -MP -MF "$(DEPDIR)/minloc1_16_i8.Tpo" -c -o minloc1_16_i8.lo `test -f '$(srcdir)/generated/minloc1_16_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_16_i8.Tpo" "$(DEPDIR)/minloc1_16_i8.Plo"; else rm -f "$(DEPDIR)/minloc1_16_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_16_i8.c' object='minloc1_16_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_16_i8.lo `test -f '$(srcdir)/generated/minloc1_16_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_i8.c + +minloc1_4_i16.lo: $(srcdir)/generated/minloc1_4_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_4_i16.lo -MD -MP -MF "$(DEPDIR)/minloc1_4_i16.Tpo" -c -o minloc1_4_i16.lo `test -f '$(srcdir)/generated/minloc1_4_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_4_i16.Tpo" "$(DEPDIR)/minloc1_4_i16.Plo"; else rm -f "$(DEPDIR)/minloc1_4_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_4_i16.c' object='minloc1_4_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_4_i16.lo `test -f '$(srcdir)/generated/minloc1_4_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_i16.c + +minloc1_8_i16.lo: $(srcdir)/generated/minloc1_8_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_8_i16.lo -MD -MP -MF "$(DEPDIR)/minloc1_8_i16.Tpo" -c -o minloc1_8_i16.lo `test -f '$(srcdir)/generated/minloc1_8_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_8_i16.Tpo" "$(DEPDIR)/minloc1_8_i16.Plo"; else rm -f "$(DEPDIR)/minloc1_8_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_8_i16.c' object='minloc1_8_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_8_i16.lo `test -f '$(srcdir)/generated/minloc1_8_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_i16.c + +minloc1_16_i16.lo: $(srcdir)/generated/minloc1_16_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_16_i16.lo -MD -MP -MF "$(DEPDIR)/minloc1_16_i16.Tpo" -c -o minloc1_16_i16.lo `test -f '$(srcdir)/generated/minloc1_16_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_16_i16.Tpo" "$(DEPDIR)/minloc1_16_i16.Plo"; else rm -f "$(DEPDIR)/minloc1_16_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_16_i16.c' object='minloc1_16_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_16_i16.lo `test -f '$(srcdir)/generated/minloc1_16_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_i16.c + +minloc1_4_r4.lo: $(srcdir)/generated/minloc1_4_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_4_r4.lo -MD -MP -MF "$(DEPDIR)/minloc1_4_r4.Tpo" -c -o minloc1_4_r4.lo `test -f '$(srcdir)/generated/minloc1_4_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_4_r4.Tpo" "$(DEPDIR)/minloc1_4_r4.Plo"; else rm -f "$(DEPDIR)/minloc1_4_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_4_r4.c' object='minloc1_4_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_4_r4.lo `test -f '$(srcdir)/generated/minloc1_4_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_r4.c + +minloc1_8_r4.lo: $(srcdir)/generated/minloc1_8_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_8_r4.lo -MD -MP -MF "$(DEPDIR)/minloc1_8_r4.Tpo" -c -o minloc1_8_r4.lo `test -f '$(srcdir)/generated/minloc1_8_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_8_r4.Tpo" "$(DEPDIR)/minloc1_8_r4.Plo"; else rm -f "$(DEPDIR)/minloc1_8_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_8_r4.c' object='minloc1_8_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_8_r4.lo `test -f '$(srcdir)/generated/minloc1_8_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_r4.c + +minloc1_16_r4.lo: $(srcdir)/generated/minloc1_16_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_16_r4.lo -MD -MP -MF "$(DEPDIR)/minloc1_16_r4.Tpo" -c -o minloc1_16_r4.lo `test -f '$(srcdir)/generated/minloc1_16_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_16_r4.Tpo" "$(DEPDIR)/minloc1_16_r4.Plo"; else rm -f "$(DEPDIR)/minloc1_16_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_16_r4.c' object='minloc1_16_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_16_r4.lo `test -f '$(srcdir)/generated/minloc1_16_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_r4.c + +minloc1_4_r8.lo: $(srcdir)/generated/minloc1_4_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_4_r8.lo -MD -MP -MF "$(DEPDIR)/minloc1_4_r8.Tpo" -c -o minloc1_4_r8.lo `test -f '$(srcdir)/generated/minloc1_4_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_4_r8.Tpo" "$(DEPDIR)/minloc1_4_r8.Plo"; else rm -f "$(DEPDIR)/minloc1_4_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_4_r8.c' object='minloc1_4_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_4_r8.lo `test -f '$(srcdir)/generated/minloc1_4_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_r8.c + +minloc1_8_r8.lo: $(srcdir)/generated/minloc1_8_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_8_r8.lo -MD -MP -MF "$(DEPDIR)/minloc1_8_r8.Tpo" -c -o minloc1_8_r8.lo `test -f '$(srcdir)/generated/minloc1_8_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_8_r8.Tpo" "$(DEPDIR)/minloc1_8_r8.Plo"; else rm -f "$(DEPDIR)/minloc1_8_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_8_r8.c' object='minloc1_8_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_8_r8.lo `test -f '$(srcdir)/generated/minloc1_8_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_r8.c + +minloc1_16_r8.lo: $(srcdir)/generated/minloc1_16_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_16_r8.lo -MD -MP -MF "$(DEPDIR)/minloc1_16_r8.Tpo" -c -o minloc1_16_r8.lo `test -f '$(srcdir)/generated/minloc1_16_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_16_r8.Tpo" "$(DEPDIR)/minloc1_16_r8.Plo"; else rm -f "$(DEPDIR)/minloc1_16_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_16_r8.c' object='minloc1_16_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_16_r8.lo `test -f '$(srcdir)/generated/minloc1_16_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_r8.c + +minloc1_4_r10.lo: $(srcdir)/generated/minloc1_4_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_4_r10.lo -MD -MP -MF "$(DEPDIR)/minloc1_4_r10.Tpo" -c -o minloc1_4_r10.lo `test -f '$(srcdir)/generated/minloc1_4_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_4_r10.Tpo" "$(DEPDIR)/minloc1_4_r10.Plo"; else rm -f "$(DEPDIR)/minloc1_4_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_4_r10.c' object='minloc1_4_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_4_r10.lo `test -f '$(srcdir)/generated/minloc1_4_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_r10.c + +minloc1_8_r10.lo: $(srcdir)/generated/minloc1_8_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_8_r10.lo -MD -MP -MF "$(DEPDIR)/minloc1_8_r10.Tpo" -c -o minloc1_8_r10.lo `test -f '$(srcdir)/generated/minloc1_8_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_8_r10.Tpo" "$(DEPDIR)/minloc1_8_r10.Plo"; else rm -f "$(DEPDIR)/minloc1_8_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_8_r10.c' object='minloc1_8_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_8_r10.lo `test -f '$(srcdir)/generated/minloc1_8_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_r10.c + +minloc1_16_r10.lo: $(srcdir)/generated/minloc1_16_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_16_r10.lo -MD -MP -MF "$(DEPDIR)/minloc1_16_r10.Tpo" -c -o minloc1_16_r10.lo `test -f '$(srcdir)/generated/minloc1_16_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_16_r10.Tpo" "$(DEPDIR)/minloc1_16_r10.Plo"; else rm -f "$(DEPDIR)/minloc1_16_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_16_r10.c' object='minloc1_16_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_16_r10.lo `test -f '$(srcdir)/generated/minloc1_16_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_r10.c + +minloc1_4_r16.lo: $(srcdir)/generated/minloc1_4_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_4_r16.lo -MD -MP -MF "$(DEPDIR)/minloc1_4_r16.Tpo" -c -o minloc1_4_r16.lo `test -f '$(srcdir)/generated/minloc1_4_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_4_r16.Tpo" "$(DEPDIR)/minloc1_4_r16.Plo"; else rm -f "$(DEPDIR)/minloc1_4_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_4_r16.c' object='minloc1_4_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_4_r16.lo `test -f '$(srcdir)/generated/minloc1_4_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_4_r16.c + +minloc1_8_r16.lo: $(srcdir)/generated/minloc1_8_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_8_r16.lo -MD -MP -MF "$(DEPDIR)/minloc1_8_r16.Tpo" -c -o minloc1_8_r16.lo `test -f '$(srcdir)/generated/minloc1_8_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_8_r16.Tpo" "$(DEPDIR)/minloc1_8_r16.Plo"; else rm -f "$(DEPDIR)/minloc1_8_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_8_r16.c' object='minloc1_8_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_8_r16.lo `test -f '$(srcdir)/generated/minloc1_8_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_8_r16.c + +minloc1_16_r16.lo: $(srcdir)/generated/minloc1_16_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minloc1_16_r16.lo -MD -MP -MF "$(DEPDIR)/minloc1_16_r16.Tpo" -c -o minloc1_16_r16.lo `test -f '$(srcdir)/generated/minloc1_16_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minloc1_16_r16.Tpo" "$(DEPDIR)/minloc1_16_r16.Plo"; else rm -f "$(DEPDIR)/minloc1_16_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minloc1_16_r16.c' object='minloc1_16_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minloc1_16_r16.lo `test -f '$(srcdir)/generated/minloc1_16_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minloc1_16_r16.c + +minval_i1.lo: $(srcdir)/generated/minval_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minval_i1.lo -MD -MP -MF "$(DEPDIR)/minval_i1.Tpo" -c -o minval_i1.lo `test -f '$(srcdir)/generated/minval_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minval_i1.Tpo" "$(DEPDIR)/minval_i1.Plo"; else rm -f "$(DEPDIR)/minval_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minval_i1.c' object='minval_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minval_i1.lo `test -f '$(srcdir)/generated/minval_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_i1.c + +minval_i2.lo: $(srcdir)/generated/minval_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minval_i2.lo -MD -MP -MF "$(DEPDIR)/minval_i2.Tpo" -c -o minval_i2.lo `test -f '$(srcdir)/generated/minval_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minval_i2.Tpo" "$(DEPDIR)/minval_i2.Plo"; else rm -f "$(DEPDIR)/minval_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minval_i2.c' object='minval_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minval_i2.lo `test -f '$(srcdir)/generated/minval_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_i2.c + +minval_i4.lo: $(srcdir)/generated/minval_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minval_i4.lo -MD -MP -MF "$(DEPDIR)/minval_i4.Tpo" -c -o minval_i4.lo `test -f '$(srcdir)/generated/minval_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minval_i4.Tpo" "$(DEPDIR)/minval_i4.Plo"; else rm -f "$(DEPDIR)/minval_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minval_i4.c' object='minval_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minval_i4.lo `test -f '$(srcdir)/generated/minval_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_i4.c + +minval_i8.lo: $(srcdir)/generated/minval_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minval_i8.lo -MD -MP -MF "$(DEPDIR)/minval_i8.Tpo" -c -o minval_i8.lo `test -f '$(srcdir)/generated/minval_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minval_i8.Tpo" "$(DEPDIR)/minval_i8.Plo"; else rm -f "$(DEPDIR)/minval_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minval_i8.c' object='minval_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minval_i8.lo `test -f '$(srcdir)/generated/minval_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_i8.c + +minval_i16.lo: $(srcdir)/generated/minval_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minval_i16.lo -MD -MP -MF "$(DEPDIR)/minval_i16.Tpo" -c -o minval_i16.lo `test -f '$(srcdir)/generated/minval_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minval_i16.Tpo" "$(DEPDIR)/minval_i16.Plo"; else rm -f "$(DEPDIR)/minval_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minval_i16.c' object='minval_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minval_i16.lo `test -f '$(srcdir)/generated/minval_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_i16.c + +minval_r4.lo: $(srcdir)/generated/minval_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minval_r4.lo -MD -MP -MF "$(DEPDIR)/minval_r4.Tpo" -c -o minval_r4.lo `test -f '$(srcdir)/generated/minval_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minval_r4.Tpo" "$(DEPDIR)/minval_r4.Plo"; else rm -f "$(DEPDIR)/minval_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minval_r4.c' object='minval_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minval_r4.lo `test -f '$(srcdir)/generated/minval_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_r4.c + +minval_r8.lo: $(srcdir)/generated/minval_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minval_r8.lo -MD -MP -MF "$(DEPDIR)/minval_r8.Tpo" -c -o minval_r8.lo `test -f '$(srcdir)/generated/minval_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minval_r8.Tpo" "$(DEPDIR)/minval_r8.Plo"; else rm -f "$(DEPDIR)/minval_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minval_r8.c' object='minval_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minval_r8.lo `test -f '$(srcdir)/generated/minval_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_r8.c + +minval_r10.lo: $(srcdir)/generated/minval_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minval_r10.lo -MD -MP -MF "$(DEPDIR)/minval_r10.Tpo" -c -o minval_r10.lo `test -f '$(srcdir)/generated/minval_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minval_r10.Tpo" "$(DEPDIR)/minval_r10.Plo"; else rm -f "$(DEPDIR)/minval_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minval_r10.c' object='minval_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minval_r10.lo `test -f '$(srcdir)/generated/minval_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_r10.c + +minval_r16.lo: $(srcdir)/generated/minval_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT minval_r16.lo -MD -MP -MF "$(DEPDIR)/minval_r16.Tpo" -c -o minval_r16.lo `test -f '$(srcdir)/generated/minval_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minval_r16.Tpo" "$(DEPDIR)/minval_r16.Plo"; else rm -f "$(DEPDIR)/minval_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/minval_r16.c' object='minval_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o minval_r16.lo `test -f '$(srcdir)/generated/minval_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/minval_r16.c + +product_i1.lo: $(srcdir)/generated/product_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT product_i1.lo -MD -MP -MF "$(DEPDIR)/product_i1.Tpo" -c -o product_i1.lo `test -f '$(srcdir)/generated/product_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/product_i1.Tpo" "$(DEPDIR)/product_i1.Plo"; else rm -f "$(DEPDIR)/product_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/product_i1.c' object='product_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o product_i1.lo `test -f '$(srcdir)/generated/product_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_i1.c + +product_i2.lo: $(srcdir)/generated/product_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT product_i2.lo -MD -MP -MF "$(DEPDIR)/product_i2.Tpo" -c -o product_i2.lo `test -f '$(srcdir)/generated/product_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/product_i2.Tpo" "$(DEPDIR)/product_i2.Plo"; else rm -f "$(DEPDIR)/product_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/product_i2.c' object='product_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o product_i2.lo `test -f '$(srcdir)/generated/product_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_i2.c + +product_i4.lo: $(srcdir)/generated/product_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT product_i4.lo -MD -MP -MF "$(DEPDIR)/product_i4.Tpo" -c -o product_i4.lo `test -f '$(srcdir)/generated/product_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/product_i4.Tpo" "$(DEPDIR)/product_i4.Plo"; else rm -f "$(DEPDIR)/product_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/product_i4.c' object='product_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o product_i4.lo `test -f '$(srcdir)/generated/product_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_i4.c + +product_i8.lo: $(srcdir)/generated/product_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT product_i8.lo -MD -MP -MF "$(DEPDIR)/product_i8.Tpo" -c -o product_i8.lo `test -f '$(srcdir)/generated/product_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/product_i8.Tpo" "$(DEPDIR)/product_i8.Plo"; else rm -f "$(DEPDIR)/product_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/product_i8.c' object='product_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o product_i8.lo `test -f '$(srcdir)/generated/product_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_i8.c + +product_i16.lo: $(srcdir)/generated/product_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT product_i16.lo -MD -MP -MF "$(DEPDIR)/product_i16.Tpo" -c -o product_i16.lo `test -f '$(srcdir)/generated/product_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/product_i16.Tpo" "$(DEPDIR)/product_i16.Plo"; else rm -f "$(DEPDIR)/product_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/product_i16.c' object='product_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o product_i16.lo `test -f '$(srcdir)/generated/product_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_i16.c + +product_r4.lo: $(srcdir)/generated/product_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT product_r4.lo -MD -MP -MF "$(DEPDIR)/product_r4.Tpo" -c -o product_r4.lo `test -f '$(srcdir)/generated/product_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/product_r4.Tpo" "$(DEPDIR)/product_r4.Plo"; else rm -f "$(DEPDIR)/product_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/product_r4.c' object='product_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o product_r4.lo `test -f '$(srcdir)/generated/product_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_r4.c + +product_r8.lo: $(srcdir)/generated/product_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT product_r8.lo -MD -MP -MF "$(DEPDIR)/product_r8.Tpo" -c -o product_r8.lo `test -f '$(srcdir)/generated/product_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/product_r8.Tpo" "$(DEPDIR)/product_r8.Plo"; else rm -f "$(DEPDIR)/product_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/product_r8.c' object='product_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o product_r8.lo `test -f '$(srcdir)/generated/product_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_r8.c + +product_r10.lo: $(srcdir)/generated/product_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT product_r10.lo -MD -MP -MF "$(DEPDIR)/product_r10.Tpo" -c -o product_r10.lo `test -f '$(srcdir)/generated/product_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/product_r10.Tpo" "$(DEPDIR)/product_r10.Plo"; else rm -f "$(DEPDIR)/product_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/product_r10.c' object='product_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o product_r10.lo `test -f '$(srcdir)/generated/product_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_r10.c + +product_r16.lo: $(srcdir)/generated/product_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT product_r16.lo -MD -MP -MF "$(DEPDIR)/product_r16.Tpo" -c -o product_r16.lo `test -f '$(srcdir)/generated/product_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/product_r16.Tpo" "$(DEPDIR)/product_r16.Plo"; else rm -f "$(DEPDIR)/product_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/product_r16.c' object='product_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o product_r16.lo `test -f '$(srcdir)/generated/product_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_r16.c + +product_c4.lo: $(srcdir)/generated/product_c4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT product_c4.lo -MD -MP -MF "$(DEPDIR)/product_c4.Tpo" -c -o product_c4.lo `test -f '$(srcdir)/generated/product_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_c4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/product_c4.Tpo" "$(DEPDIR)/product_c4.Plo"; else rm -f "$(DEPDIR)/product_c4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/product_c4.c' object='product_c4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o product_c4.lo `test -f '$(srcdir)/generated/product_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_c4.c + +product_c8.lo: $(srcdir)/generated/product_c8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT product_c8.lo -MD -MP -MF "$(DEPDIR)/product_c8.Tpo" -c -o product_c8.lo `test -f '$(srcdir)/generated/product_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_c8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/product_c8.Tpo" "$(DEPDIR)/product_c8.Plo"; else rm -f "$(DEPDIR)/product_c8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/product_c8.c' object='product_c8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o product_c8.lo `test -f '$(srcdir)/generated/product_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_c8.c + +product_c10.lo: $(srcdir)/generated/product_c10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT product_c10.lo -MD -MP -MF "$(DEPDIR)/product_c10.Tpo" -c -o product_c10.lo `test -f '$(srcdir)/generated/product_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_c10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/product_c10.Tpo" "$(DEPDIR)/product_c10.Plo"; else rm -f "$(DEPDIR)/product_c10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/product_c10.c' object='product_c10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o product_c10.lo `test -f '$(srcdir)/generated/product_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_c10.c + +product_c16.lo: $(srcdir)/generated/product_c16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT product_c16.lo -MD -MP -MF "$(DEPDIR)/product_c16.Tpo" -c -o product_c16.lo `test -f '$(srcdir)/generated/product_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_c16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/product_c16.Tpo" "$(DEPDIR)/product_c16.Plo"; else rm -f "$(DEPDIR)/product_c16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/product_c16.c' object='product_c16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o product_c16.lo `test -f '$(srcdir)/generated/product_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/product_c16.c + +sum_i1.lo: $(srcdir)/generated/sum_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sum_i1.lo -MD -MP -MF "$(DEPDIR)/sum_i1.Tpo" -c -o sum_i1.lo `test -f '$(srcdir)/generated/sum_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sum_i1.Tpo" "$(DEPDIR)/sum_i1.Plo"; else rm -f "$(DEPDIR)/sum_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/sum_i1.c' object='sum_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sum_i1.lo `test -f '$(srcdir)/generated/sum_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_i1.c + +sum_i2.lo: $(srcdir)/generated/sum_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sum_i2.lo -MD -MP -MF "$(DEPDIR)/sum_i2.Tpo" -c -o sum_i2.lo `test -f '$(srcdir)/generated/sum_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sum_i2.Tpo" "$(DEPDIR)/sum_i2.Plo"; else rm -f "$(DEPDIR)/sum_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/sum_i2.c' object='sum_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sum_i2.lo `test -f '$(srcdir)/generated/sum_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_i2.c + +sum_i4.lo: $(srcdir)/generated/sum_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sum_i4.lo -MD -MP -MF "$(DEPDIR)/sum_i4.Tpo" -c -o sum_i4.lo `test -f '$(srcdir)/generated/sum_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sum_i4.Tpo" "$(DEPDIR)/sum_i4.Plo"; else rm -f "$(DEPDIR)/sum_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/sum_i4.c' object='sum_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sum_i4.lo `test -f '$(srcdir)/generated/sum_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_i4.c + +sum_i8.lo: $(srcdir)/generated/sum_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sum_i8.lo -MD -MP -MF "$(DEPDIR)/sum_i8.Tpo" -c -o sum_i8.lo `test -f '$(srcdir)/generated/sum_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sum_i8.Tpo" "$(DEPDIR)/sum_i8.Plo"; else rm -f "$(DEPDIR)/sum_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/sum_i8.c' object='sum_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sum_i8.lo `test -f '$(srcdir)/generated/sum_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_i8.c + +sum_i16.lo: $(srcdir)/generated/sum_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sum_i16.lo -MD -MP -MF "$(DEPDIR)/sum_i16.Tpo" -c -o sum_i16.lo `test -f '$(srcdir)/generated/sum_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sum_i16.Tpo" "$(DEPDIR)/sum_i16.Plo"; else rm -f "$(DEPDIR)/sum_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/sum_i16.c' object='sum_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sum_i16.lo `test -f '$(srcdir)/generated/sum_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_i16.c + +sum_r4.lo: $(srcdir)/generated/sum_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sum_r4.lo -MD -MP -MF "$(DEPDIR)/sum_r4.Tpo" -c -o sum_r4.lo `test -f '$(srcdir)/generated/sum_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sum_r4.Tpo" "$(DEPDIR)/sum_r4.Plo"; else rm -f "$(DEPDIR)/sum_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/sum_r4.c' object='sum_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sum_r4.lo `test -f '$(srcdir)/generated/sum_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_r4.c + +sum_r8.lo: $(srcdir)/generated/sum_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sum_r8.lo -MD -MP -MF "$(DEPDIR)/sum_r8.Tpo" -c -o sum_r8.lo `test -f '$(srcdir)/generated/sum_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sum_r8.Tpo" "$(DEPDIR)/sum_r8.Plo"; else rm -f "$(DEPDIR)/sum_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/sum_r8.c' object='sum_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sum_r8.lo `test -f '$(srcdir)/generated/sum_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_r8.c + +sum_r10.lo: $(srcdir)/generated/sum_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sum_r10.lo -MD -MP -MF "$(DEPDIR)/sum_r10.Tpo" -c -o sum_r10.lo `test -f '$(srcdir)/generated/sum_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sum_r10.Tpo" "$(DEPDIR)/sum_r10.Plo"; else rm -f "$(DEPDIR)/sum_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/sum_r10.c' object='sum_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sum_r10.lo `test -f '$(srcdir)/generated/sum_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_r10.c + +sum_r16.lo: $(srcdir)/generated/sum_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sum_r16.lo -MD -MP -MF "$(DEPDIR)/sum_r16.Tpo" -c -o sum_r16.lo `test -f '$(srcdir)/generated/sum_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sum_r16.Tpo" "$(DEPDIR)/sum_r16.Plo"; else rm -f "$(DEPDIR)/sum_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/sum_r16.c' object='sum_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sum_r16.lo `test -f '$(srcdir)/generated/sum_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_r16.c + +sum_c4.lo: $(srcdir)/generated/sum_c4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sum_c4.lo -MD -MP -MF "$(DEPDIR)/sum_c4.Tpo" -c -o sum_c4.lo `test -f '$(srcdir)/generated/sum_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_c4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sum_c4.Tpo" "$(DEPDIR)/sum_c4.Plo"; else rm -f "$(DEPDIR)/sum_c4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/sum_c4.c' object='sum_c4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sum_c4.lo `test -f '$(srcdir)/generated/sum_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_c4.c + +sum_c8.lo: $(srcdir)/generated/sum_c8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sum_c8.lo -MD -MP -MF "$(DEPDIR)/sum_c8.Tpo" -c -o sum_c8.lo `test -f '$(srcdir)/generated/sum_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_c8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sum_c8.Tpo" "$(DEPDIR)/sum_c8.Plo"; else rm -f "$(DEPDIR)/sum_c8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/sum_c8.c' object='sum_c8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sum_c8.lo `test -f '$(srcdir)/generated/sum_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_c8.c + +sum_c10.lo: $(srcdir)/generated/sum_c10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sum_c10.lo -MD -MP -MF "$(DEPDIR)/sum_c10.Tpo" -c -o sum_c10.lo `test -f '$(srcdir)/generated/sum_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_c10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sum_c10.Tpo" "$(DEPDIR)/sum_c10.Plo"; else rm -f "$(DEPDIR)/sum_c10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/sum_c10.c' object='sum_c10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sum_c10.lo `test -f '$(srcdir)/generated/sum_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_c10.c + +sum_c16.lo: $(srcdir)/generated/sum_c16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sum_c16.lo -MD -MP -MF "$(DEPDIR)/sum_c16.Tpo" -c -o sum_c16.lo `test -f '$(srcdir)/generated/sum_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_c16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sum_c16.Tpo" "$(DEPDIR)/sum_c16.Plo"; else rm -f "$(DEPDIR)/sum_c16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/sum_c16.c' object='sum_c16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sum_c16.lo `test -f '$(srcdir)/generated/sum_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/sum_c16.c + +matmul_i1.lo: $(srcdir)/generated/matmul_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_i1.lo -MD -MP -MF "$(DEPDIR)/matmul_i1.Tpo" -c -o matmul_i1.lo `test -f '$(srcdir)/generated/matmul_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_i1.Tpo" "$(DEPDIR)/matmul_i1.Plo"; else rm -f "$(DEPDIR)/matmul_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_i1.c' object='matmul_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_i1.lo `test -f '$(srcdir)/generated/matmul_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_i1.c + +matmul_i2.lo: $(srcdir)/generated/matmul_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_i2.lo -MD -MP -MF "$(DEPDIR)/matmul_i2.Tpo" -c -o matmul_i2.lo `test -f '$(srcdir)/generated/matmul_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_i2.Tpo" "$(DEPDIR)/matmul_i2.Plo"; else rm -f "$(DEPDIR)/matmul_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_i2.c' object='matmul_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_i2.lo `test -f '$(srcdir)/generated/matmul_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_i2.c + +matmul_i4.lo: $(srcdir)/generated/matmul_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_i4.lo -MD -MP -MF "$(DEPDIR)/matmul_i4.Tpo" -c -o matmul_i4.lo `test -f '$(srcdir)/generated/matmul_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_i4.Tpo" "$(DEPDIR)/matmul_i4.Plo"; else rm -f "$(DEPDIR)/matmul_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_i4.c' object='matmul_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_i4.lo `test -f '$(srcdir)/generated/matmul_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_i4.c + +matmul_i8.lo: $(srcdir)/generated/matmul_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_i8.lo -MD -MP -MF "$(DEPDIR)/matmul_i8.Tpo" -c -o matmul_i8.lo `test -f '$(srcdir)/generated/matmul_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_i8.Tpo" "$(DEPDIR)/matmul_i8.Plo"; else rm -f "$(DEPDIR)/matmul_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_i8.c' object='matmul_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_i8.lo `test -f '$(srcdir)/generated/matmul_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_i8.c + +matmul_i16.lo: $(srcdir)/generated/matmul_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_i16.lo -MD -MP -MF "$(DEPDIR)/matmul_i16.Tpo" -c -o matmul_i16.lo `test -f '$(srcdir)/generated/matmul_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_i16.Tpo" "$(DEPDIR)/matmul_i16.Plo"; else rm -f "$(DEPDIR)/matmul_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_i16.c' object='matmul_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_i16.lo `test -f '$(srcdir)/generated/matmul_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_i16.c + +matmul_r4.lo: $(srcdir)/generated/matmul_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_r4.lo -MD -MP -MF "$(DEPDIR)/matmul_r4.Tpo" -c -o matmul_r4.lo `test -f '$(srcdir)/generated/matmul_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_r4.Tpo" "$(DEPDIR)/matmul_r4.Plo"; else rm -f "$(DEPDIR)/matmul_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_r4.c' object='matmul_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_r4.lo `test -f '$(srcdir)/generated/matmul_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_r4.c + +matmul_r8.lo: $(srcdir)/generated/matmul_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_r8.lo -MD -MP -MF "$(DEPDIR)/matmul_r8.Tpo" -c -o matmul_r8.lo `test -f '$(srcdir)/generated/matmul_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_r8.Tpo" "$(DEPDIR)/matmul_r8.Plo"; else rm -f "$(DEPDIR)/matmul_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_r8.c' object='matmul_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_r8.lo `test -f '$(srcdir)/generated/matmul_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_r8.c + +matmul_r10.lo: $(srcdir)/generated/matmul_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_r10.lo -MD -MP -MF "$(DEPDIR)/matmul_r10.Tpo" -c -o matmul_r10.lo `test -f '$(srcdir)/generated/matmul_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_r10.Tpo" "$(DEPDIR)/matmul_r10.Plo"; else rm -f "$(DEPDIR)/matmul_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_r10.c' object='matmul_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_r10.lo `test -f '$(srcdir)/generated/matmul_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_r10.c + +matmul_r16.lo: $(srcdir)/generated/matmul_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_r16.lo -MD -MP -MF "$(DEPDIR)/matmul_r16.Tpo" -c -o matmul_r16.lo `test -f '$(srcdir)/generated/matmul_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_r16.Tpo" "$(DEPDIR)/matmul_r16.Plo"; else rm -f "$(DEPDIR)/matmul_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_r16.c' object='matmul_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_r16.lo `test -f '$(srcdir)/generated/matmul_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_r16.c + +matmul_c4.lo: $(srcdir)/generated/matmul_c4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_c4.lo -MD -MP -MF "$(DEPDIR)/matmul_c4.Tpo" -c -o matmul_c4.lo `test -f '$(srcdir)/generated/matmul_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_c4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_c4.Tpo" "$(DEPDIR)/matmul_c4.Plo"; else rm -f "$(DEPDIR)/matmul_c4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_c4.c' object='matmul_c4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_c4.lo `test -f '$(srcdir)/generated/matmul_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_c4.c + +matmul_c8.lo: $(srcdir)/generated/matmul_c8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_c8.lo -MD -MP -MF "$(DEPDIR)/matmul_c8.Tpo" -c -o matmul_c8.lo `test -f '$(srcdir)/generated/matmul_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_c8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_c8.Tpo" "$(DEPDIR)/matmul_c8.Plo"; else rm -f "$(DEPDIR)/matmul_c8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_c8.c' object='matmul_c8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_c8.lo `test -f '$(srcdir)/generated/matmul_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_c8.c + +matmul_c10.lo: $(srcdir)/generated/matmul_c10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_c10.lo -MD -MP -MF "$(DEPDIR)/matmul_c10.Tpo" -c -o matmul_c10.lo `test -f '$(srcdir)/generated/matmul_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_c10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_c10.Tpo" "$(DEPDIR)/matmul_c10.Plo"; else rm -f "$(DEPDIR)/matmul_c10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_c10.c' object='matmul_c10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_c10.lo `test -f '$(srcdir)/generated/matmul_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_c10.c + +matmul_c16.lo: $(srcdir)/generated/matmul_c16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_c16.lo -MD -MP -MF "$(DEPDIR)/matmul_c16.Tpo" -c -o matmul_c16.lo `test -f '$(srcdir)/generated/matmul_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_c16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_c16.Tpo" "$(DEPDIR)/matmul_c16.Plo"; else rm -f "$(DEPDIR)/matmul_c16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_c16.c' object='matmul_c16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_c16.lo `test -f '$(srcdir)/generated/matmul_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_c16.c + +matmul_l4.lo: $(srcdir)/generated/matmul_l4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_l4.lo -MD -MP -MF "$(DEPDIR)/matmul_l4.Tpo" -c -o matmul_l4.lo `test -f '$(srcdir)/generated/matmul_l4.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_l4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_l4.Tpo" "$(DEPDIR)/matmul_l4.Plo"; else rm -f "$(DEPDIR)/matmul_l4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_l4.c' object='matmul_l4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_l4.lo `test -f '$(srcdir)/generated/matmul_l4.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_l4.c + +matmul_l8.lo: $(srcdir)/generated/matmul_l8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_l8.lo -MD -MP -MF "$(DEPDIR)/matmul_l8.Tpo" -c -o matmul_l8.lo `test -f '$(srcdir)/generated/matmul_l8.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_l8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_l8.Tpo" "$(DEPDIR)/matmul_l8.Plo"; else rm -f "$(DEPDIR)/matmul_l8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_l8.c' object='matmul_l8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_l8.lo `test -f '$(srcdir)/generated/matmul_l8.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_l8.c + +matmul_l16.lo: $(srcdir)/generated/matmul_l16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT matmul_l16.lo -MD -MP -MF "$(DEPDIR)/matmul_l16.Tpo" -c -o matmul_l16.lo `test -f '$(srcdir)/generated/matmul_l16.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_l16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/matmul_l16.Tpo" "$(DEPDIR)/matmul_l16.Plo"; else rm -f "$(DEPDIR)/matmul_l16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/matmul_l16.c' object='matmul_l16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o matmul_l16.lo `test -f '$(srcdir)/generated/matmul_l16.c' || echo '$(srcdir)/'`$(srcdir)/generated/matmul_l16.c + +transpose_i4.lo: $(srcdir)/generated/transpose_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transpose_i4.lo -MD -MP -MF "$(DEPDIR)/transpose_i4.Tpo" -c -o transpose_i4.lo `test -f '$(srcdir)/generated/transpose_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transpose_i4.Tpo" "$(DEPDIR)/transpose_i4.Plo"; else rm -f "$(DEPDIR)/transpose_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/transpose_i4.c' object='transpose_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transpose_i4.lo `test -f '$(srcdir)/generated/transpose_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_i4.c + +transpose_i8.lo: $(srcdir)/generated/transpose_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transpose_i8.lo -MD -MP -MF "$(DEPDIR)/transpose_i8.Tpo" -c -o transpose_i8.lo `test -f '$(srcdir)/generated/transpose_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transpose_i8.Tpo" "$(DEPDIR)/transpose_i8.Plo"; else rm -f "$(DEPDIR)/transpose_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/transpose_i8.c' object='transpose_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transpose_i8.lo `test -f '$(srcdir)/generated/transpose_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_i8.c + +transpose_i16.lo: $(srcdir)/generated/transpose_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transpose_i16.lo -MD -MP -MF "$(DEPDIR)/transpose_i16.Tpo" -c -o transpose_i16.lo `test -f '$(srcdir)/generated/transpose_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transpose_i16.Tpo" "$(DEPDIR)/transpose_i16.Plo"; else rm -f "$(DEPDIR)/transpose_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/transpose_i16.c' object='transpose_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transpose_i16.lo `test -f '$(srcdir)/generated/transpose_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_i16.c + +transpose_r4.lo: $(srcdir)/generated/transpose_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transpose_r4.lo -MD -MP -MF "$(DEPDIR)/transpose_r4.Tpo" -c -o transpose_r4.lo `test -f '$(srcdir)/generated/transpose_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transpose_r4.Tpo" "$(DEPDIR)/transpose_r4.Plo"; else rm -f "$(DEPDIR)/transpose_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/transpose_r4.c' object='transpose_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transpose_r4.lo `test -f '$(srcdir)/generated/transpose_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_r4.c + +transpose_r8.lo: $(srcdir)/generated/transpose_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transpose_r8.lo -MD -MP -MF "$(DEPDIR)/transpose_r8.Tpo" -c -o transpose_r8.lo `test -f '$(srcdir)/generated/transpose_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transpose_r8.Tpo" "$(DEPDIR)/transpose_r8.Plo"; else rm -f "$(DEPDIR)/transpose_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/transpose_r8.c' object='transpose_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transpose_r8.lo `test -f '$(srcdir)/generated/transpose_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_r8.c + +transpose_r10.lo: $(srcdir)/generated/transpose_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transpose_r10.lo -MD -MP -MF "$(DEPDIR)/transpose_r10.Tpo" -c -o transpose_r10.lo `test -f '$(srcdir)/generated/transpose_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transpose_r10.Tpo" "$(DEPDIR)/transpose_r10.Plo"; else rm -f "$(DEPDIR)/transpose_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/transpose_r10.c' object='transpose_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transpose_r10.lo `test -f '$(srcdir)/generated/transpose_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_r10.c + +transpose_r16.lo: $(srcdir)/generated/transpose_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transpose_r16.lo -MD -MP -MF "$(DEPDIR)/transpose_r16.Tpo" -c -o transpose_r16.lo `test -f '$(srcdir)/generated/transpose_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transpose_r16.Tpo" "$(DEPDIR)/transpose_r16.Plo"; else rm -f "$(DEPDIR)/transpose_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/transpose_r16.c' object='transpose_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transpose_r16.lo `test -f '$(srcdir)/generated/transpose_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_r16.c + +transpose_c4.lo: $(srcdir)/generated/transpose_c4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transpose_c4.lo -MD -MP -MF "$(DEPDIR)/transpose_c4.Tpo" -c -o transpose_c4.lo `test -f '$(srcdir)/generated/transpose_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_c4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transpose_c4.Tpo" "$(DEPDIR)/transpose_c4.Plo"; else rm -f "$(DEPDIR)/transpose_c4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/transpose_c4.c' object='transpose_c4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transpose_c4.lo `test -f '$(srcdir)/generated/transpose_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_c4.c + +transpose_c8.lo: $(srcdir)/generated/transpose_c8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transpose_c8.lo -MD -MP -MF "$(DEPDIR)/transpose_c8.Tpo" -c -o transpose_c8.lo `test -f '$(srcdir)/generated/transpose_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_c8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transpose_c8.Tpo" "$(DEPDIR)/transpose_c8.Plo"; else rm -f "$(DEPDIR)/transpose_c8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/transpose_c8.c' object='transpose_c8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transpose_c8.lo `test -f '$(srcdir)/generated/transpose_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_c8.c + +transpose_c10.lo: $(srcdir)/generated/transpose_c10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transpose_c10.lo -MD -MP -MF "$(DEPDIR)/transpose_c10.Tpo" -c -o transpose_c10.lo `test -f '$(srcdir)/generated/transpose_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_c10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transpose_c10.Tpo" "$(DEPDIR)/transpose_c10.Plo"; else rm -f "$(DEPDIR)/transpose_c10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/transpose_c10.c' object='transpose_c10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transpose_c10.lo `test -f '$(srcdir)/generated/transpose_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_c10.c + +transpose_c16.lo: $(srcdir)/generated/transpose_c16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transpose_c16.lo -MD -MP -MF "$(DEPDIR)/transpose_c16.Tpo" -c -o transpose_c16.lo `test -f '$(srcdir)/generated/transpose_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_c16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transpose_c16.Tpo" "$(DEPDIR)/transpose_c16.Plo"; else rm -f "$(DEPDIR)/transpose_c16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/transpose_c16.c' object='transpose_c16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transpose_c16.lo `test -f '$(srcdir)/generated/transpose_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/transpose_c16.c + +shape_i4.lo: $(srcdir)/generated/shape_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT shape_i4.lo -MD -MP -MF "$(DEPDIR)/shape_i4.Tpo" -c -o shape_i4.lo `test -f '$(srcdir)/generated/shape_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/shape_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/shape_i4.Tpo" "$(DEPDIR)/shape_i4.Plo"; else rm -f "$(DEPDIR)/shape_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/shape_i4.c' object='shape_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o shape_i4.lo `test -f '$(srcdir)/generated/shape_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/shape_i4.c + +shape_i8.lo: $(srcdir)/generated/shape_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT shape_i8.lo -MD -MP -MF "$(DEPDIR)/shape_i8.Tpo" -c -o shape_i8.lo `test -f '$(srcdir)/generated/shape_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/shape_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/shape_i8.Tpo" "$(DEPDIR)/shape_i8.Plo"; else rm -f "$(DEPDIR)/shape_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/shape_i8.c' object='shape_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o shape_i8.lo `test -f '$(srcdir)/generated/shape_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/shape_i8.c + +shape_i16.lo: $(srcdir)/generated/shape_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT shape_i16.lo -MD -MP -MF "$(DEPDIR)/shape_i16.Tpo" -c -o shape_i16.lo `test -f '$(srcdir)/generated/shape_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/shape_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/shape_i16.Tpo" "$(DEPDIR)/shape_i16.Plo"; else rm -f "$(DEPDIR)/shape_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/shape_i16.c' object='shape_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o shape_i16.lo `test -f '$(srcdir)/generated/shape_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/shape_i16.c + +eoshift1_4.lo: $(srcdir)/generated/eoshift1_4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT eoshift1_4.lo -MD -MP -MF "$(DEPDIR)/eoshift1_4.Tpo" -c -o eoshift1_4.lo `test -f '$(srcdir)/generated/eoshift1_4.c' || echo '$(srcdir)/'`$(srcdir)/generated/eoshift1_4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/eoshift1_4.Tpo" "$(DEPDIR)/eoshift1_4.Plo"; else rm -f "$(DEPDIR)/eoshift1_4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/eoshift1_4.c' object='eoshift1_4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o eoshift1_4.lo `test -f '$(srcdir)/generated/eoshift1_4.c' || echo '$(srcdir)/'`$(srcdir)/generated/eoshift1_4.c + +eoshift1_8.lo: $(srcdir)/generated/eoshift1_8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT eoshift1_8.lo -MD -MP -MF "$(DEPDIR)/eoshift1_8.Tpo" -c -o eoshift1_8.lo `test -f '$(srcdir)/generated/eoshift1_8.c' || echo '$(srcdir)/'`$(srcdir)/generated/eoshift1_8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/eoshift1_8.Tpo" "$(DEPDIR)/eoshift1_8.Plo"; else rm -f "$(DEPDIR)/eoshift1_8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/eoshift1_8.c' object='eoshift1_8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o eoshift1_8.lo `test -f '$(srcdir)/generated/eoshift1_8.c' || echo '$(srcdir)/'`$(srcdir)/generated/eoshift1_8.c + +eoshift1_16.lo: $(srcdir)/generated/eoshift1_16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT eoshift1_16.lo -MD -MP -MF "$(DEPDIR)/eoshift1_16.Tpo" -c -o eoshift1_16.lo `test -f '$(srcdir)/generated/eoshift1_16.c' || echo '$(srcdir)/'`$(srcdir)/generated/eoshift1_16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/eoshift1_16.Tpo" "$(DEPDIR)/eoshift1_16.Plo"; else rm -f "$(DEPDIR)/eoshift1_16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/eoshift1_16.c' object='eoshift1_16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o eoshift1_16.lo `test -f '$(srcdir)/generated/eoshift1_16.c' || echo '$(srcdir)/'`$(srcdir)/generated/eoshift1_16.c + +eoshift3_4.lo: $(srcdir)/generated/eoshift3_4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT eoshift3_4.lo -MD -MP -MF "$(DEPDIR)/eoshift3_4.Tpo" -c -o eoshift3_4.lo `test -f '$(srcdir)/generated/eoshift3_4.c' || echo '$(srcdir)/'`$(srcdir)/generated/eoshift3_4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/eoshift3_4.Tpo" "$(DEPDIR)/eoshift3_4.Plo"; else rm -f "$(DEPDIR)/eoshift3_4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/eoshift3_4.c' object='eoshift3_4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o eoshift3_4.lo `test -f '$(srcdir)/generated/eoshift3_4.c' || echo '$(srcdir)/'`$(srcdir)/generated/eoshift3_4.c + +eoshift3_8.lo: $(srcdir)/generated/eoshift3_8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT eoshift3_8.lo -MD -MP -MF "$(DEPDIR)/eoshift3_8.Tpo" -c -o eoshift3_8.lo `test -f '$(srcdir)/generated/eoshift3_8.c' || echo '$(srcdir)/'`$(srcdir)/generated/eoshift3_8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/eoshift3_8.Tpo" "$(DEPDIR)/eoshift3_8.Plo"; else rm -f "$(DEPDIR)/eoshift3_8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/eoshift3_8.c' object='eoshift3_8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o eoshift3_8.lo `test -f '$(srcdir)/generated/eoshift3_8.c' || echo '$(srcdir)/'`$(srcdir)/generated/eoshift3_8.c + +eoshift3_16.lo: $(srcdir)/generated/eoshift3_16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT eoshift3_16.lo -MD -MP -MF "$(DEPDIR)/eoshift3_16.Tpo" -c -o eoshift3_16.lo `test -f '$(srcdir)/generated/eoshift3_16.c' || echo '$(srcdir)/'`$(srcdir)/generated/eoshift3_16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/eoshift3_16.Tpo" "$(DEPDIR)/eoshift3_16.Plo"; else rm -f "$(DEPDIR)/eoshift3_16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/eoshift3_16.c' object='eoshift3_16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o eoshift3_16.lo `test -f '$(srcdir)/generated/eoshift3_16.c' || echo '$(srcdir)/'`$(srcdir)/generated/eoshift3_16.c + +cshift1_4.lo: $(srcdir)/generated/cshift1_4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift1_4.lo -MD -MP -MF "$(DEPDIR)/cshift1_4.Tpo" -c -o cshift1_4.lo `test -f '$(srcdir)/generated/cshift1_4.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift1_4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift1_4.Tpo" "$(DEPDIR)/cshift1_4.Plo"; else rm -f "$(DEPDIR)/cshift1_4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift1_4.c' object='cshift1_4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift1_4.lo `test -f '$(srcdir)/generated/cshift1_4.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift1_4.c + +cshift1_8.lo: $(srcdir)/generated/cshift1_8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift1_8.lo -MD -MP -MF "$(DEPDIR)/cshift1_8.Tpo" -c -o cshift1_8.lo `test -f '$(srcdir)/generated/cshift1_8.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift1_8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift1_8.Tpo" "$(DEPDIR)/cshift1_8.Plo"; else rm -f "$(DEPDIR)/cshift1_8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift1_8.c' object='cshift1_8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift1_8.lo `test -f '$(srcdir)/generated/cshift1_8.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift1_8.c + +cshift1_16.lo: $(srcdir)/generated/cshift1_16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift1_16.lo -MD -MP -MF "$(DEPDIR)/cshift1_16.Tpo" -c -o cshift1_16.lo `test -f '$(srcdir)/generated/cshift1_16.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift1_16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift1_16.Tpo" "$(DEPDIR)/cshift1_16.Plo"; else rm -f "$(DEPDIR)/cshift1_16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift1_16.c' object='cshift1_16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift1_16.lo `test -f '$(srcdir)/generated/cshift1_16.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift1_16.c + +reshape_i4.lo: $(srcdir)/generated/reshape_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reshape_i4.lo -MD -MP -MF "$(DEPDIR)/reshape_i4.Tpo" -c -o reshape_i4.lo `test -f '$(srcdir)/generated/reshape_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reshape_i4.Tpo" "$(DEPDIR)/reshape_i4.Plo"; else rm -f "$(DEPDIR)/reshape_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/reshape_i4.c' object='reshape_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reshape_i4.lo `test -f '$(srcdir)/generated/reshape_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_i4.c + +reshape_i8.lo: $(srcdir)/generated/reshape_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reshape_i8.lo -MD -MP -MF "$(DEPDIR)/reshape_i8.Tpo" -c -o reshape_i8.lo `test -f '$(srcdir)/generated/reshape_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reshape_i8.Tpo" "$(DEPDIR)/reshape_i8.Plo"; else rm -f "$(DEPDIR)/reshape_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/reshape_i8.c' object='reshape_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reshape_i8.lo `test -f '$(srcdir)/generated/reshape_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_i8.c + +reshape_i16.lo: $(srcdir)/generated/reshape_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reshape_i16.lo -MD -MP -MF "$(DEPDIR)/reshape_i16.Tpo" -c -o reshape_i16.lo `test -f '$(srcdir)/generated/reshape_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reshape_i16.Tpo" "$(DEPDIR)/reshape_i16.Plo"; else rm -f "$(DEPDIR)/reshape_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/reshape_i16.c' object='reshape_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reshape_i16.lo `test -f '$(srcdir)/generated/reshape_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_i16.c + +reshape_r4.lo: $(srcdir)/generated/reshape_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reshape_r4.lo -MD -MP -MF "$(DEPDIR)/reshape_r4.Tpo" -c -o reshape_r4.lo `test -f '$(srcdir)/generated/reshape_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reshape_r4.Tpo" "$(DEPDIR)/reshape_r4.Plo"; else rm -f "$(DEPDIR)/reshape_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/reshape_r4.c' object='reshape_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reshape_r4.lo `test -f '$(srcdir)/generated/reshape_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_r4.c + +reshape_r8.lo: $(srcdir)/generated/reshape_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reshape_r8.lo -MD -MP -MF "$(DEPDIR)/reshape_r8.Tpo" -c -o reshape_r8.lo `test -f '$(srcdir)/generated/reshape_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reshape_r8.Tpo" "$(DEPDIR)/reshape_r8.Plo"; else rm -f "$(DEPDIR)/reshape_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/reshape_r8.c' object='reshape_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reshape_r8.lo `test -f '$(srcdir)/generated/reshape_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_r8.c + +reshape_r10.lo: $(srcdir)/generated/reshape_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reshape_r10.lo -MD -MP -MF "$(DEPDIR)/reshape_r10.Tpo" -c -o reshape_r10.lo `test -f '$(srcdir)/generated/reshape_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reshape_r10.Tpo" "$(DEPDIR)/reshape_r10.Plo"; else rm -f "$(DEPDIR)/reshape_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/reshape_r10.c' object='reshape_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reshape_r10.lo `test -f '$(srcdir)/generated/reshape_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_r10.c + +reshape_r16.lo: $(srcdir)/generated/reshape_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reshape_r16.lo -MD -MP -MF "$(DEPDIR)/reshape_r16.Tpo" -c -o reshape_r16.lo `test -f '$(srcdir)/generated/reshape_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reshape_r16.Tpo" "$(DEPDIR)/reshape_r16.Plo"; else rm -f "$(DEPDIR)/reshape_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/reshape_r16.c' object='reshape_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reshape_r16.lo `test -f '$(srcdir)/generated/reshape_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_r16.c + +reshape_c4.lo: $(srcdir)/generated/reshape_c4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reshape_c4.lo -MD -MP -MF "$(DEPDIR)/reshape_c4.Tpo" -c -o reshape_c4.lo `test -f '$(srcdir)/generated/reshape_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_c4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reshape_c4.Tpo" "$(DEPDIR)/reshape_c4.Plo"; else rm -f "$(DEPDIR)/reshape_c4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/reshape_c4.c' object='reshape_c4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reshape_c4.lo `test -f '$(srcdir)/generated/reshape_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_c4.c + +reshape_c8.lo: $(srcdir)/generated/reshape_c8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reshape_c8.lo -MD -MP -MF "$(DEPDIR)/reshape_c8.Tpo" -c -o reshape_c8.lo `test -f '$(srcdir)/generated/reshape_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_c8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reshape_c8.Tpo" "$(DEPDIR)/reshape_c8.Plo"; else rm -f "$(DEPDIR)/reshape_c8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/reshape_c8.c' object='reshape_c8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reshape_c8.lo `test -f '$(srcdir)/generated/reshape_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_c8.c + +reshape_c10.lo: $(srcdir)/generated/reshape_c10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reshape_c10.lo -MD -MP -MF "$(DEPDIR)/reshape_c10.Tpo" -c -o reshape_c10.lo `test -f '$(srcdir)/generated/reshape_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_c10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reshape_c10.Tpo" "$(DEPDIR)/reshape_c10.Plo"; else rm -f "$(DEPDIR)/reshape_c10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/reshape_c10.c' object='reshape_c10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reshape_c10.lo `test -f '$(srcdir)/generated/reshape_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_c10.c + +reshape_c16.lo: $(srcdir)/generated/reshape_c16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reshape_c16.lo -MD -MP -MF "$(DEPDIR)/reshape_c16.Tpo" -c -o reshape_c16.lo `test -f '$(srcdir)/generated/reshape_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_c16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reshape_c16.Tpo" "$(DEPDIR)/reshape_c16.Plo"; else rm -f "$(DEPDIR)/reshape_c16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/reshape_c16.c' object='reshape_c16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reshape_c16.lo `test -f '$(srcdir)/generated/reshape_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/reshape_c16.c + +in_pack_i1.lo: $(srcdir)/generated/in_pack_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_pack_i1.lo -MD -MP -MF "$(DEPDIR)/in_pack_i1.Tpo" -c -o in_pack_i1.lo `test -f '$(srcdir)/generated/in_pack_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_pack_i1.Tpo" "$(DEPDIR)/in_pack_i1.Plo"; else rm -f "$(DEPDIR)/in_pack_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_pack_i1.c' object='in_pack_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_pack_i1.lo `test -f '$(srcdir)/generated/in_pack_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_i1.c + +in_pack_i2.lo: $(srcdir)/generated/in_pack_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_pack_i2.lo -MD -MP -MF "$(DEPDIR)/in_pack_i2.Tpo" -c -o in_pack_i2.lo `test -f '$(srcdir)/generated/in_pack_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_pack_i2.Tpo" "$(DEPDIR)/in_pack_i2.Plo"; else rm -f "$(DEPDIR)/in_pack_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_pack_i2.c' object='in_pack_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_pack_i2.lo `test -f '$(srcdir)/generated/in_pack_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_i2.c + +in_pack_i4.lo: $(srcdir)/generated/in_pack_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_pack_i4.lo -MD -MP -MF "$(DEPDIR)/in_pack_i4.Tpo" -c -o in_pack_i4.lo `test -f '$(srcdir)/generated/in_pack_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_pack_i4.Tpo" "$(DEPDIR)/in_pack_i4.Plo"; else rm -f "$(DEPDIR)/in_pack_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_pack_i4.c' object='in_pack_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_pack_i4.lo `test -f '$(srcdir)/generated/in_pack_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_i4.c + +in_pack_i8.lo: $(srcdir)/generated/in_pack_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_pack_i8.lo -MD -MP -MF "$(DEPDIR)/in_pack_i8.Tpo" -c -o in_pack_i8.lo `test -f '$(srcdir)/generated/in_pack_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_pack_i8.Tpo" "$(DEPDIR)/in_pack_i8.Plo"; else rm -f "$(DEPDIR)/in_pack_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_pack_i8.c' object='in_pack_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_pack_i8.lo `test -f '$(srcdir)/generated/in_pack_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_i8.c + +in_pack_i16.lo: $(srcdir)/generated/in_pack_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_pack_i16.lo -MD -MP -MF "$(DEPDIR)/in_pack_i16.Tpo" -c -o in_pack_i16.lo `test -f '$(srcdir)/generated/in_pack_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_pack_i16.Tpo" "$(DEPDIR)/in_pack_i16.Plo"; else rm -f "$(DEPDIR)/in_pack_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_pack_i16.c' object='in_pack_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_pack_i16.lo `test -f '$(srcdir)/generated/in_pack_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_i16.c + +in_pack_r4.lo: $(srcdir)/generated/in_pack_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_pack_r4.lo -MD -MP -MF "$(DEPDIR)/in_pack_r4.Tpo" -c -o in_pack_r4.lo `test -f '$(srcdir)/generated/in_pack_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_pack_r4.Tpo" "$(DEPDIR)/in_pack_r4.Plo"; else rm -f "$(DEPDIR)/in_pack_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_pack_r4.c' object='in_pack_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_pack_r4.lo `test -f '$(srcdir)/generated/in_pack_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_r4.c + +in_pack_r8.lo: $(srcdir)/generated/in_pack_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_pack_r8.lo -MD -MP -MF "$(DEPDIR)/in_pack_r8.Tpo" -c -o in_pack_r8.lo `test -f '$(srcdir)/generated/in_pack_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_pack_r8.Tpo" "$(DEPDIR)/in_pack_r8.Plo"; else rm -f "$(DEPDIR)/in_pack_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_pack_r8.c' object='in_pack_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_pack_r8.lo `test -f '$(srcdir)/generated/in_pack_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_r8.c + +in_pack_r10.lo: $(srcdir)/generated/in_pack_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_pack_r10.lo -MD -MP -MF "$(DEPDIR)/in_pack_r10.Tpo" -c -o in_pack_r10.lo `test -f '$(srcdir)/generated/in_pack_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_pack_r10.Tpo" "$(DEPDIR)/in_pack_r10.Plo"; else rm -f "$(DEPDIR)/in_pack_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_pack_r10.c' object='in_pack_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_pack_r10.lo `test -f '$(srcdir)/generated/in_pack_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_r10.c + +in_pack_r16.lo: $(srcdir)/generated/in_pack_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_pack_r16.lo -MD -MP -MF "$(DEPDIR)/in_pack_r16.Tpo" -c -o in_pack_r16.lo `test -f '$(srcdir)/generated/in_pack_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_pack_r16.Tpo" "$(DEPDIR)/in_pack_r16.Plo"; else rm -f "$(DEPDIR)/in_pack_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_pack_r16.c' object='in_pack_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_pack_r16.lo `test -f '$(srcdir)/generated/in_pack_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_r16.c + +in_pack_c4.lo: $(srcdir)/generated/in_pack_c4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_pack_c4.lo -MD -MP -MF "$(DEPDIR)/in_pack_c4.Tpo" -c -o in_pack_c4.lo `test -f '$(srcdir)/generated/in_pack_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_c4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_pack_c4.Tpo" "$(DEPDIR)/in_pack_c4.Plo"; else rm -f "$(DEPDIR)/in_pack_c4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_pack_c4.c' object='in_pack_c4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_pack_c4.lo `test -f '$(srcdir)/generated/in_pack_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_c4.c + +in_pack_c8.lo: $(srcdir)/generated/in_pack_c8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_pack_c8.lo -MD -MP -MF "$(DEPDIR)/in_pack_c8.Tpo" -c -o in_pack_c8.lo `test -f '$(srcdir)/generated/in_pack_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_c8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_pack_c8.Tpo" "$(DEPDIR)/in_pack_c8.Plo"; else rm -f "$(DEPDIR)/in_pack_c8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_pack_c8.c' object='in_pack_c8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_pack_c8.lo `test -f '$(srcdir)/generated/in_pack_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_c8.c + +in_pack_c10.lo: $(srcdir)/generated/in_pack_c10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_pack_c10.lo -MD -MP -MF "$(DEPDIR)/in_pack_c10.Tpo" -c -o in_pack_c10.lo `test -f '$(srcdir)/generated/in_pack_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_c10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_pack_c10.Tpo" "$(DEPDIR)/in_pack_c10.Plo"; else rm -f "$(DEPDIR)/in_pack_c10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_pack_c10.c' object='in_pack_c10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_pack_c10.lo `test -f '$(srcdir)/generated/in_pack_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_c10.c + +in_pack_c16.lo: $(srcdir)/generated/in_pack_c16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_pack_c16.lo -MD -MP -MF "$(DEPDIR)/in_pack_c16.Tpo" -c -o in_pack_c16.lo `test -f '$(srcdir)/generated/in_pack_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_c16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_pack_c16.Tpo" "$(DEPDIR)/in_pack_c16.Plo"; else rm -f "$(DEPDIR)/in_pack_c16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_pack_c16.c' object='in_pack_c16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_pack_c16.lo `test -f '$(srcdir)/generated/in_pack_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_pack_c16.c + +in_unpack_i1.lo: $(srcdir)/generated/in_unpack_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_unpack_i1.lo -MD -MP -MF "$(DEPDIR)/in_unpack_i1.Tpo" -c -o in_unpack_i1.lo `test -f '$(srcdir)/generated/in_unpack_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_unpack_i1.Tpo" "$(DEPDIR)/in_unpack_i1.Plo"; else rm -f "$(DEPDIR)/in_unpack_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_unpack_i1.c' object='in_unpack_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_unpack_i1.lo `test -f '$(srcdir)/generated/in_unpack_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_i1.c + +in_unpack_i2.lo: $(srcdir)/generated/in_unpack_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_unpack_i2.lo -MD -MP -MF "$(DEPDIR)/in_unpack_i2.Tpo" -c -o in_unpack_i2.lo `test -f '$(srcdir)/generated/in_unpack_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_unpack_i2.Tpo" "$(DEPDIR)/in_unpack_i2.Plo"; else rm -f "$(DEPDIR)/in_unpack_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_unpack_i2.c' object='in_unpack_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_unpack_i2.lo `test -f '$(srcdir)/generated/in_unpack_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_i2.c + +in_unpack_i4.lo: $(srcdir)/generated/in_unpack_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_unpack_i4.lo -MD -MP -MF "$(DEPDIR)/in_unpack_i4.Tpo" -c -o in_unpack_i4.lo `test -f '$(srcdir)/generated/in_unpack_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_unpack_i4.Tpo" "$(DEPDIR)/in_unpack_i4.Plo"; else rm -f "$(DEPDIR)/in_unpack_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_unpack_i4.c' object='in_unpack_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_unpack_i4.lo `test -f '$(srcdir)/generated/in_unpack_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_i4.c + +in_unpack_i8.lo: $(srcdir)/generated/in_unpack_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_unpack_i8.lo -MD -MP -MF "$(DEPDIR)/in_unpack_i8.Tpo" -c -o in_unpack_i8.lo `test -f '$(srcdir)/generated/in_unpack_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_unpack_i8.Tpo" "$(DEPDIR)/in_unpack_i8.Plo"; else rm -f "$(DEPDIR)/in_unpack_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_unpack_i8.c' object='in_unpack_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_unpack_i8.lo `test -f '$(srcdir)/generated/in_unpack_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_i8.c + +in_unpack_i16.lo: $(srcdir)/generated/in_unpack_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_unpack_i16.lo -MD -MP -MF "$(DEPDIR)/in_unpack_i16.Tpo" -c -o in_unpack_i16.lo `test -f '$(srcdir)/generated/in_unpack_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_unpack_i16.Tpo" "$(DEPDIR)/in_unpack_i16.Plo"; else rm -f "$(DEPDIR)/in_unpack_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_unpack_i16.c' object='in_unpack_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_unpack_i16.lo `test -f '$(srcdir)/generated/in_unpack_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_i16.c + +in_unpack_r4.lo: $(srcdir)/generated/in_unpack_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_unpack_r4.lo -MD -MP -MF "$(DEPDIR)/in_unpack_r4.Tpo" -c -o in_unpack_r4.lo `test -f '$(srcdir)/generated/in_unpack_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_unpack_r4.Tpo" "$(DEPDIR)/in_unpack_r4.Plo"; else rm -f "$(DEPDIR)/in_unpack_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_unpack_r4.c' object='in_unpack_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_unpack_r4.lo `test -f '$(srcdir)/generated/in_unpack_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_r4.c + +in_unpack_r8.lo: $(srcdir)/generated/in_unpack_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_unpack_r8.lo -MD -MP -MF "$(DEPDIR)/in_unpack_r8.Tpo" -c -o in_unpack_r8.lo `test -f '$(srcdir)/generated/in_unpack_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_unpack_r8.Tpo" "$(DEPDIR)/in_unpack_r8.Plo"; else rm -f "$(DEPDIR)/in_unpack_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_unpack_r8.c' object='in_unpack_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_unpack_r8.lo `test -f '$(srcdir)/generated/in_unpack_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_r8.c + +in_unpack_r10.lo: $(srcdir)/generated/in_unpack_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_unpack_r10.lo -MD -MP -MF "$(DEPDIR)/in_unpack_r10.Tpo" -c -o in_unpack_r10.lo `test -f '$(srcdir)/generated/in_unpack_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_unpack_r10.Tpo" "$(DEPDIR)/in_unpack_r10.Plo"; else rm -f "$(DEPDIR)/in_unpack_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_unpack_r10.c' object='in_unpack_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_unpack_r10.lo `test -f '$(srcdir)/generated/in_unpack_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_r10.c + +in_unpack_r16.lo: $(srcdir)/generated/in_unpack_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_unpack_r16.lo -MD -MP -MF "$(DEPDIR)/in_unpack_r16.Tpo" -c -o in_unpack_r16.lo `test -f '$(srcdir)/generated/in_unpack_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_unpack_r16.Tpo" "$(DEPDIR)/in_unpack_r16.Plo"; else rm -f "$(DEPDIR)/in_unpack_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_unpack_r16.c' object='in_unpack_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_unpack_r16.lo `test -f '$(srcdir)/generated/in_unpack_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_r16.c + +in_unpack_c4.lo: $(srcdir)/generated/in_unpack_c4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_unpack_c4.lo -MD -MP -MF "$(DEPDIR)/in_unpack_c4.Tpo" -c -o in_unpack_c4.lo `test -f '$(srcdir)/generated/in_unpack_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_c4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_unpack_c4.Tpo" "$(DEPDIR)/in_unpack_c4.Plo"; else rm -f "$(DEPDIR)/in_unpack_c4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_unpack_c4.c' object='in_unpack_c4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_unpack_c4.lo `test -f '$(srcdir)/generated/in_unpack_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_c4.c + +in_unpack_c8.lo: $(srcdir)/generated/in_unpack_c8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_unpack_c8.lo -MD -MP -MF "$(DEPDIR)/in_unpack_c8.Tpo" -c -o in_unpack_c8.lo `test -f '$(srcdir)/generated/in_unpack_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_c8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_unpack_c8.Tpo" "$(DEPDIR)/in_unpack_c8.Plo"; else rm -f "$(DEPDIR)/in_unpack_c8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_unpack_c8.c' object='in_unpack_c8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_unpack_c8.lo `test -f '$(srcdir)/generated/in_unpack_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_c8.c + +in_unpack_c10.lo: $(srcdir)/generated/in_unpack_c10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_unpack_c10.lo -MD -MP -MF "$(DEPDIR)/in_unpack_c10.Tpo" -c -o in_unpack_c10.lo `test -f '$(srcdir)/generated/in_unpack_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_c10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_unpack_c10.Tpo" "$(DEPDIR)/in_unpack_c10.Plo"; else rm -f "$(DEPDIR)/in_unpack_c10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_unpack_c10.c' object='in_unpack_c10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_unpack_c10.lo `test -f '$(srcdir)/generated/in_unpack_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_c10.c + +in_unpack_c16.lo: $(srcdir)/generated/in_unpack_c16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_unpack_c16.lo -MD -MP -MF "$(DEPDIR)/in_unpack_c16.Tpo" -c -o in_unpack_c16.lo `test -f '$(srcdir)/generated/in_unpack_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_c16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_unpack_c16.Tpo" "$(DEPDIR)/in_unpack_c16.Plo"; else rm -f "$(DEPDIR)/in_unpack_c16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/in_unpack_c16.c' object='in_unpack_c16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_unpack_c16.lo `test -f '$(srcdir)/generated/in_unpack_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/in_unpack_c16.c + +exponent_r4.lo: $(srcdir)/generated/exponent_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT exponent_r4.lo -MD -MP -MF "$(DEPDIR)/exponent_r4.Tpo" -c -o exponent_r4.lo `test -f '$(srcdir)/generated/exponent_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/exponent_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/exponent_r4.Tpo" "$(DEPDIR)/exponent_r4.Plo"; else rm -f "$(DEPDIR)/exponent_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/exponent_r4.c' object='exponent_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o exponent_r4.lo `test -f '$(srcdir)/generated/exponent_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/exponent_r4.c + +exponent_r8.lo: $(srcdir)/generated/exponent_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT exponent_r8.lo -MD -MP -MF "$(DEPDIR)/exponent_r8.Tpo" -c -o exponent_r8.lo `test -f '$(srcdir)/generated/exponent_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/exponent_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/exponent_r8.Tpo" "$(DEPDIR)/exponent_r8.Plo"; else rm -f "$(DEPDIR)/exponent_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/exponent_r8.c' object='exponent_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o exponent_r8.lo `test -f '$(srcdir)/generated/exponent_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/exponent_r8.c + +exponent_r10.lo: $(srcdir)/generated/exponent_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT exponent_r10.lo -MD -MP -MF "$(DEPDIR)/exponent_r10.Tpo" -c -o exponent_r10.lo `test -f '$(srcdir)/generated/exponent_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/exponent_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/exponent_r10.Tpo" "$(DEPDIR)/exponent_r10.Plo"; else rm -f "$(DEPDIR)/exponent_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/exponent_r10.c' object='exponent_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o exponent_r10.lo `test -f '$(srcdir)/generated/exponent_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/exponent_r10.c + +exponent_r16.lo: $(srcdir)/generated/exponent_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT exponent_r16.lo -MD -MP -MF "$(DEPDIR)/exponent_r16.Tpo" -c -o exponent_r16.lo `test -f '$(srcdir)/generated/exponent_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/exponent_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/exponent_r16.Tpo" "$(DEPDIR)/exponent_r16.Plo"; else rm -f "$(DEPDIR)/exponent_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/exponent_r16.c' object='exponent_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o exponent_r16.lo `test -f '$(srcdir)/generated/exponent_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/exponent_r16.c + +fraction_r4.lo: $(srcdir)/generated/fraction_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fraction_r4.lo -MD -MP -MF "$(DEPDIR)/fraction_r4.Tpo" -c -o fraction_r4.lo `test -f '$(srcdir)/generated/fraction_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/fraction_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fraction_r4.Tpo" "$(DEPDIR)/fraction_r4.Plo"; else rm -f "$(DEPDIR)/fraction_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/fraction_r4.c' object='fraction_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fraction_r4.lo `test -f '$(srcdir)/generated/fraction_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/fraction_r4.c + +fraction_r8.lo: $(srcdir)/generated/fraction_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fraction_r8.lo -MD -MP -MF "$(DEPDIR)/fraction_r8.Tpo" -c -o fraction_r8.lo `test -f '$(srcdir)/generated/fraction_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/fraction_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fraction_r8.Tpo" "$(DEPDIR)/fraction_r8.Plo"; else rm -f "$(DEPDIR)/fraction_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/fraction_r8.c' object='fraction_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fraction_r8.lo `test -f '$(srcdir)/generated/fraction_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/fraction_r8.c + +fraction_r10.lo: $(srcdir)/generated/fraction_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fraction_r10.lo -MD -MP -MF "$(DEPDIR)/fraction_r10.Tpo" -c -o fraction_r10.lo `test -f '$(srcdir)/generated/fraction_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/fraction_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fraction_r10.Tpo" "$(DEPDIR)/fraction_r10.Plo"; else rm -f "$(DEPDIR)/fraction_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/fraction_r10.c' object='fraction_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fraction_r10.lo `test -f '$(srcdir)/generated/fraction_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/fraction_r10.c + +fraction_r16.lo: $(srcdir)/generated/fraction_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fraction_r16.lo -MD -MP -MF "$(DEPDIR)/fraction_r16.Tpo" -c -o fraction_r16.lo `test -f '$(srcdir)/generated/fraction_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/fraction_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fraction_r16.Tpo" "$(DEPDIR)/fraction_r16.Plo"; else rm -f "$(DEPDIR)/fraction_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/fraction_r16.c' object='fraction_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fraction_r16.lo `test -f '$(srcdir)/generated/fraction_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/fraction_r16.c + +nearest_r4.lo: $(srcdir)/generated/nearest_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nearest_r4.lo -MD -MP -MF "$(DEPDIR)/nearest_r4.Tpo" -c -o nearest_r4.lo `test -f '$(srcdir)/generated/nearest_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/nearest_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/nearest_r4.Tpo" "$(DEPDIR)/nearest_r4.Plo"; else rm -f "$(DEPDIR)/nearest_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/nearest_r4.c' object='nearest_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nearest_r4.lo `test -f '$(srcdir)/generated/nearest_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/nearest_r4.c + +nearest_r8.lo: $(srcdir)/generated/nearest_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nearest_r8.lo -MD -MP -MF "$(DEPDIR)/nearest_r8.Tpo" -c -o nearest_r8.lo `test -f '$(srcdir)/generated/nearest_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/nearest_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/nearest_r8.Tpo" "$(DEPDIR)/nearest_r8.Plo"; else rm -f "$(DEPDIR)/nearest_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/nearest_r8.c' object='nearest_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nearest_r8.lo `test -f '$(srcdir)/generated/nearest_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/nearest_r8.c + +nearest_r10.lo: $(srcdir)/generated/nearest_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nearest_r10.lo -MD -MP -MF "$(DEPDIR)/nearest_r10.Tpo" -c -o nearest_r10.lo `test -f '$(srcdir)/generated/nearest_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/nearest_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/nearest_r10.Tpo" "$(DEPDIR)/nearest_r10.Plo"; else rm -f "$(DEPDIR)/nearest_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/nearest_r10.c' object='nearest_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nearest_r10.lo `test -f '$(srcdir)/generated/nearest_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/nearest_r10.c + +nearest_r16.lo: $(srcdir)/generated/nearest_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nearest_r16.lo -MD -MP -MF "$(DEPDIR)/nearest_r16.Tpo" -c -o nearest_r16.lo `test -f '$(srcdir)/generated/nearest_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/nearest_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/nearest_r16.Tpo" "$(DEPDIR)/nearest_r16.Plo"; else rm -f "$(DEPDIR)/nearest_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/nearest_r16.c' object='nearest_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nearest_r16.lo `test -f '$(srcdir)/generated/nearest_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/nearest_r16.c + +set_exponent_r4.lo: $(srcdir)/generated/set_exponent_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT set_exponent_r4.lo -MD -MP -MF "$(DEPDIR)/set_exponent_r4.Tpo" -c -o set_exponent_r4.lo `test -f '$(srcdir)/generated/set_exponent_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/set_exponent_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/set_exponent_r4.Tpo" "$(DEPDIR)/set_exponent_r4.Plo"; else rm -f "$(DEPDIR)/set_exponent_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/set_exponent_r4.c' object='set_exponent_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o set_exponent_r4.lo `test -f '$(srcdir)/generated/set_exponent_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/set_exponent_r4.c + +set_exponent_r8.lo: $(srcdir)/generated/set_exponent_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT set_exponent_r8.lo -MD -MP -MF "$(DEPDIR)/set_exponent_r8.Tpo" -c -o set_exponent_r8.lo `test -f '$(srcdir)/generated/set_exponent_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/set_exponent_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/set_exponent_r8.Tpo" "$(DEPDIR)/set_exponent_r8.Plo"; else rm -f "$(DEPDIR)/set_exponent_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/set_exponent_r8.c' object='set_exponent_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o set_exponent_r8.lo `test -f '$(srcdir)/generated/set_exponent_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/set_exponent_r8.c + +set_exponent_r10.lo: $(srcdir)/generated/set_exponent_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT set_exponent_r10.lo -MD -MP -MF "$(DEPDIR)/set_exponent_r10.Tpo" -c -o set_exponent_r10.lo `test -f '$(srcdir)/generated/set_exponent_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/set_exponent_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/set_exponent_r10.Tpo" "$(DEPDIR)/set_exponent_r10.Plo"; else rm -f "$(DEPDIR)/set_exponent_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/set_exponent_r10.c' object='set_exponent_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o set_exponent_r10.lo `test -f '$(srcdir)/generated/set_exponent_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/set_exponent_r10.c + +set_exponent_r16.lo: $(srcdir)/generated/set_exponent_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT set_exponent_r16.lo -MD -MP -MF "$(DEPDIR)/set_exponent_r16.Tpo" -c -o set_exponent_r16.lo `test -f '$(srcdir)/generated/set_exponent_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/set_exponent_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/set_exponent_r16.Tpo" "$(DEPDIR)/set_exponent_r16.Plo"; else rm -f "$(DEPDIR)/set_exponent_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/set_exponent_r16.c' object='set_exponent_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o set_exponent_r16.lo `test -f '$(srcdir)/generated/set_exponent_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/set_exponent_r16.c + +pow_i4_i4.lo: $(srcdir)/generated/pow_i4_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i4_i4.lo -MD -MP -MF "$(DEPDIR)/pow_i4_i4.Tpo" -c -o pow_i4_i4.lo `test -f '$(srcdir)/generated/pow_i4_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i4_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_i4_i4.Tpo" "$(DEPDIR)/pow_i4_i4.Plo"; else rm -f "$(DEPDIR)/pow_i4_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_i4_i4.c' object='pow_i4_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i4_i4.lo `test -f '$(srcdir)/generated/pow_i4_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i4_i4.c + +pow_i8_i4.lo: $(srcdir)/generated/pow_i8_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i8_i4.lo -MD -MP -MF "$(DEPDIR)/pow_i8_i4.Tpo" -c -o pow_i8_i4.lo `test -f '$(srcdir)/generated/pow_i8_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i8_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_i8_i4.Tpo" "$(DEPDIR)/pow_i8_i4.Plo"; else rm -f "$(DEPDIR)/pow_i8_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_i8_i4.c' object='pow_i8_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i8_i4.lo `test -f '$(srcdir)/generated/pow_i8_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i8_i4.c + +pow_i16_i4.lo: $(srcdir)/generated/pow_i16_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i16_i4.lo -MD -MP -MF "$(DEPDIR)/pow_i16_i4.Tpo" -c -o pow_i16_i4.lo `test -f '$(srcdir)/generated/pow_i16_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i16_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_i16_i4.Tpo" "$(DEPDIR)/pow_i16_i4.Plo"; else rm -f "$(DEPDIR)/pow_i16_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_i16_i4.c' object='pow_i16_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i16_i4.lo `test -f '$(srcdir)/generated/pow_i16_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i16_i4.c + +pow_c4_i4.lo: $(srcdir)/generated/pow_c4_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c4_i4.lo -MD -MP -MF "$(DEPDIR)/pow_c4_i4.Tpo" -c -o pow_c4_i4.lo `test -f '$(srcdir)/generated/pow_c4_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c4_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_c4_i4.Tpo" "$(DEPDIR)/pow_c4_i4.Plo"; else rm -f "$(DEPDIR)/pow_c4_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_c4_i4.c' object='pow_c4_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c4_i4.lo `test -f '$(srcdir)/generated/pow_c4_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c4_i4.c + +pow_c8_i4.lo: $(srcdir)/generated/pow_c8_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c8_i4.lo -MD -MP -MF "$(DEPDIR)/pow_c8_i4.Tpo" -c -o pow_c8_i4.lo `test -f '$(srcdir)/generated/pow_c8_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c8_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_c8_i4.Tpo" "$(DEPDIR)/pow_c8_i4.Plo"; else rm -f "$(DEPDIR)/pow_c8_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_c8_i4.c' object='pow_c8_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c8_i4.lo `test -f '$(srcdir)/generated/pow_c8_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c8_i4.c + +pow_c10_i4.lo: $(srcdir)/generated/pow_c10_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c10_i4.lo -MD -MP -MF "$(DEPDIR)/pow_c10_i4.Tpo" -c -o pow_c10_i4.lo `test -f '$(srcdir)/generated/pow_c10_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c10_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_c10_i4.Tpo" "$(DEPDIR)/pow_c10_i4.Plo"; else rm -f "$(DEPDIR)/pow_c10_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_c10_i4.c' object='pow_c10_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c10_i4.lo `test -f '$(srcdir)/generated/pow_c10_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c10_i4.c + +pow_c16_i4.lo: $(srcdir)/generated/pow_c16_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c16_i4.lo -MD -MP -MF "$(DEPDIR)/pow_c16_i4.Tpo" -c -o pow_c16_i4.lo `test -f '$(srcdir)/generated/pow_c16_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c16_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_c16_i4.Tpo" "$(DEPDIR)/pow_c16_i4.Plo"; else rm -f "$(DEPDIR)/pow_c16_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_c16_i4.c' object='pow_c16_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c16_i4.lo `test -f '$(srcdir)/generated/pow_c16_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c16_i4.c + +pow_i4_i8.lo: $(srcdir)/generated/pow_i4_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i4_i8.lo -MD -MP -MF "$(DEPDIR)/pow_i4_i8.Tpo" -c -o pow_i4_i8.lo `test -f '$(srcdir)/generated/pow_i4_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i4_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_i4_i8.Tpo" "$(DEPDIR)/pow_i4_i8.Plo"; else rm -f "$(DEPDIR)/pow_i4_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_i4_i8.c' object='pow_i4_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i4_i8.lo `test -f '$(srcdir)/generated/pow_i4_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i4_i8.c + +pow_i8_i8.lo: $(srcdir)/generated/pow_i8_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i8_i8.lo -MD -MP -MF "$(DEPDIR)/pow_i8_i8.Tpo" -c -o pow_i8_i8.lo `test -f '$(srcdir)/generated/pow_i8_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i8_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_i8_i8.Tpo" "$(DEPDIR)/pow_i8_i8.Plo"; else rm -f "$(DEPDIR)/pow_i8_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_i8_i8.c' object='pow_i8_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i8_i8.lo `test -f '$(srcdir)/generated/pow_i8_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i8_i8.c + +pow_i16_i8.lo: $(srcdir)/generated/pow_i16_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i16_i8.lo -MD -MP -MF "$(DEPDIR)/pow_i16_i8.Tpo" -c -o pow_i16_i8.lo `test -f '$(srcdir)/generated/pow_i16_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i16_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_i16_i8.Tpo" "$(DEPDIR)/pow_i16_i8.Plo"; else rm -f "$(DEPDIR)/pow_i16_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_i16_i8.c' object='pow_i16_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i16_i8.lo `test -f '$(srcdir)/generated/pow_i16_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i16_i8.c + +pow_r4_i8.lo: $(srcdir)/generated/pow_r4_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r4_i8.lo -MD -MP -MF "$(DEPDIR)/pow_r4_i8.Tpo" -c -o pow_r4_i8.lo `test -f '$(srcdir)/generated/pow_r4_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r4_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_r4_i8.Tpo" "$(DEPDIR)/pow_r4_i8.Plo"; else rm -f "$(DEPDIR)/pow_r4_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_r4_i8.c' object='pow_r4_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r4_i8.lo `test -f '$(srcdir)/generated/pow_r4_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r4_i8.c + +pow_r8_i8.lo: $(srcdir)/generated/pow_r8_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r8_i8.lo -MD -MP -MF "$(DEPDIR)/pow_r8_i8.Tpo" -c -o pow_r8_i8.lo `test -f '$(srcdir)/generated/pow_r8_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r8_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_r8_i8.Tpo" "$(DEPDIR)/pow_r8_i8.Plo"; else rm -f "$(DEPDIR)/pow_r8_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_r8_i8.c' object='pow_r8_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r8_i8.lo `test -f '$(srcdir)/generated/pow_r8_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r8_i8.c + +pow_r10_i8.lo: $(srcdir)/generated/pow_r10_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r10_i8.lo -MD -MP -MF "$(DEPDIR)/pow_r10_i8.Tpo" -c -o pow_r10_i8.lo `test -f '$(srcdir)/generated/pow_r10_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r10_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_r10_i8.Tpo" "$(DEPDIR)/pow_r10_i8.Plo"; else rm -f "$(DEPDIR)/pow_r10_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_r10_i8.c' object='pow_r10_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r10_i8.lo `test -f '$(srcdir)/generated/pow_r10_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r10_i8.c + +pow_r16_i8.lo: $(srcdir)/generated/pow_r16_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r16_i8.lo -MD -MP -MF "$(DEPDIR)/pow_r16_i8.Tpo" -c -o pow_r16_i8.lo `test -f '$(srcdir)/generated/pow_r16_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r16_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_r16_i8.Tpo" "$(DEPDIR)/pow_r16_i8.Plo"; else rm -f "$(DEPDIR)/pow_r16_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_r16_i8.c' object='pow_r16_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r16_i8.lo `test -f '$(srcdir)/generated/pow_r16_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r16_i8.c + +pow_c4_i8.lo: $(srcdir)/generated/pow_c4_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c4_i8.lo -MD -MP -MF "$(DEPDIR)/pow_c4_i8.Tpo" -c -o pow_c4_i8.lo `test -f '$(srcdir)/generated/pow_c4_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c4_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_c4_i8.Tpo" "$(DEPDIR)/pow_c4_i8.Plo"; else rm -f "$(DEPDIR)/pow_c4_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_c4_i8.c' object='pow_c4_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c4_i8.lo `test -f '$(srcdir)/generated/pow_c4_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c4_i8.c + +pow_c8_i8.lo: $(srcdir)/generated/pow_c8_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c8_i8.lo -MD -MP -MF "$(DEPDIR)/pow_c8_i8.Tpo" -c -o pow_c8_i8.lo `test -f '$(srcdir)/generated/pow_c8_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c8_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_c8_i8.Tpo" "$(DEPDIR)/pow_c8_i8.Plo"; else rm -f "$(DEPDIR)/pow_c8_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_c8_i8.c' object='pow_c8_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c8_i8.lo `test -f '$(srcdir)/generated/pow_c8_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c8_i8.c + +pow_c10_i8.lo: $(srcdir)/generated/pow_c10_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c10_i8.lo -MD -MP -MF "$(DEPDIR)/pow_c10_i8.Tpo" -c -o pow_c10_i8.lo `test -f '$(srcdir)/generated/pow_c10_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c10_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_c10_i8.Tpo" "$(DEPDIR)/pow_c10_i8.Plo"; else rm -f "$(DEPDIR)/pow_c10_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_c10_i8.c' object='pow_c10_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c10_i8.lo `test -f '$(srcdir)/generated/pow_c10_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c10_i8.c + +pow_c16_i8.lo: $(srcdir)/generated/pow_c16_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c16_i8.lo -MD -MP -MF "$(DEPDIR)/pow_c16_i8.Tpo" -c -o pow_c16_i8.lo `test -f '$(srcdir)/generated/pow_c16_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c16_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_c16_i8.Tpo" "$(DEPDIR)/pow_c16_i8.Plo"; else rm -f "$(DEPDIR)/pow_c16_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_c16_i8.c' object='pow_c16_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c16_i8.lo `test -f '$(srcdir)/generated/pow_c16_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c16_i8.c + +pow_i4_i16.lo: $(srcdir)/generated/pow_i4_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i4_i16.lo -MD -MP -MF "$(DEPDIR)/pow_i4_i16.Tpo" -c -o pow_i4_i16.lo `test -f '$(srcdir)/generated/pow_i4_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i4_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_i4_i16.Tpo" "$(DEPDIR)/pow_i4_i16.Plo"; else rm -f "$(DEPDIR)/pow_i4_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_i4_i16.c' object='pow_i4_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i4_i16.lo `test -f '$(srcdir)/generated/pow_i4_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i4_i16.c + +pow_i8_i16.lo: $(srcdir)/generated/pow_i8_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i8_i16.lo -MD -MP -MF "$(DEPDIR)/pow_i8_i16.Tpo" -c -o pow_i8_i16.lo `test -f '$(srcdir)/generated/pow_i8_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i8_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_i8_i16.Tpo" "$(DEPDIR)/pow_i8_i16.Plo"; else rm -f "$(DEPDIR)/pow_i8_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_i8_i16.c' object='pow_i8_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i8_i16.lo `test -f '$(srcdir)/generated/pow_i8_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i8_i16.c + +pow_i16_i16.lo: $(srcdir)/generated/pow_i16_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i16_i16.lo -MD -MP -MF "$(DEPDIR)/pow_i16_i16.Tpo" -c -o pow_i16_i16.lo `test -f '$(srcdir)/generated/pow_i16_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i16_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_i16_i16.Tpo" "$(DEPDIR)/pow_i16_i16.Plo"; else rm -f "$(DEPDIR)/pow_i16_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_i16_i16.c' object='pow_i16_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i16_i16.lo `test -f '$(srcdir)/generated/pow_i16_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_i16_i16.c + +pow_r4_i16.lo: $(srcdir)/generated/pow_r4_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r4_i16.lo -MD -MP -MF "$(DEPDIR)/pow_r4_i16.Tpo" -c -o pow_r4_i16.lo `test -f '$(srcdir)/generated/pow_r4_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r4_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_r4_i16.Tpo" "$(DEPDIR)/pow_r4_i16.Plo"; else rm -f "$(DEPDIR)/pow_r4_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_r4_i16.c' object='pow_r4_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r4_i16.lo `test -f '$(srcdir)/generated/pow_r4_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r4_i16.c + +pow_r8_i16.lo: $(srcdir)/generated/pow_r8_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r8_i16.lo -MD -MP -MF "$(DEPDIR)/pow_r8_i16.Tpo" -c -o pow_r8_i16.lo `test -f '$(srcdir)/generated/pow_r8_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r8_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_r8_i16.Tpo" "$(DEPDIR)/pow_r8_i16.Plo"; else rm -f "$(DEPDIR)/pow_r8_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_r8_i16.c' object='pow_r8_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r8_i16.lo `test -f '$(srcdir)/generated/pow_r8_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r8_i16.c + +pow_r10_i16.lo: $(srcdir)/generated/pow_r10_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r10_i16.lo -MD -MP -MF "$(DEPDIR)/pow_r10_i16.Tpo" -c -o pow_r10_i16.lo `test -f '$(srcdir)/generated/pow_r10_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r10_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_r10_i16.Tpo" "$(DEPDIR)/pow_r10_i16.Plo"; else rm -f "$(DEPDIR)/pow_r10_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_r10_i16.c' object='pow_r10_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r10_i16.lo `test -f '$(srcdir)/generated/pow_r10_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r10_i16.c + +pow_r16_i16.lo: $(srcdir)/generated/pow_r16_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r16_i16.lo -MD -MP -MF "$(DEPDIR)/pow_r16_i16.Tpo" -c -o pow_r16_i16.lo `test -f '$(srcdir)/generated/pow_r16_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r16_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_r16_i16.Tpo" "$(DEPDIR)/pow_r16_i16.Plo"; else rm -f "$(DEPDIR)/pow_r16_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_r16_i16.c' object='pow_r16_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r16_i16.lo `test -f '$(srcdir)/generated/pow_r16_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_r16_i16.c + +pow_c4_i16.lo: $(srcdir)/generated/pow_c4_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c4_i16.lo -MD -MP -MF "$(DEPDIR)/pow_c4_i16.Tpo" -c -o pow_c4_i16.lo `test -f '$(srcdir)/generated/pow_c4_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c4_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_c4_i16.Tpo" "$(DEPDIR)/pow_c4_i16.Plo"; else rm -f "$(DEPDIR)/pow_c4_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_c4_i16.c' object='pow_c4_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c4_i16.lo `test -f '$(srcdir)/generated/pow_c4_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c4_i16.c + +pow_c8_i16.lo: $(srcdir)/generated/pow_c8_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c8_i16.lo -MD -MP -MF "$(DEPDIR)/pow_c8_i16.Tpo" -c -o pow_c8_i16.lo `test -f '$(srcdir)/generated/pow_c8_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c8_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_c8_i16.Tpo" "$(DEPDIR)/pow_c8_i16.Plo"; else rm -f "$(DEPDIR)/pow_c8_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_c8_i16.c' object='pow_c8_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c8_i16.lo `test -f '$(srcdir)/generated/pow_c8_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c8_i16.c + +pow_c10_i16.lo: $(srcdir)/generated/pow_c10_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c10_i16.lo -MD -MP -MF "$(DEPDIR)/pow_c10_i16.Tpo" -c -o pow_c10_i16.lo `test -f '$(srcdir)/generated/pow_c10_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c10_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_c10_i16.Tpo" "$(DEPDIR)/pow_c10_i16.Plo"; else rm -f "$(DEPDIR)/pow_c10_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_c10_i16.c' object='pow_c10_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c10_i16.lo `test -f '$(srcdir)/generated/pow_c10_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c10_i16.c + +pow_c16_i16.lo: $(srcdir)/generated/pow_c16_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c16_i16.lo -MD -MP -MF "$(DEPDIR)/pow_c16_i16.Tpo" -c -o pow_c16_i16.lo `test -f '$(srcdir)/generated/pow_c16_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c16_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pow_c16_i16.Tpo" "$(DEPDIR)/pow_c16_i16.Plo"; else rm -f "$(DEPDIR)/pow_c16_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pow_c16_i16.c' object='pow_c16_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c16_i16.lo `test -f '$(srcdir)/generated/pow_c16_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pow_c16_i16.c + +rrspacing_r4.lo: $(srcdir)/generated/rrspacing_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rrspacing_r4.lo -MD -MP -MF "$(DEPDIR)/rrspacing_r4.Tpo" -c -o rrspacing_r4.lo `test -f '$(srcdir)/generated/rrspacing_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/rrspacing_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rrspacing_r4.Tpo" "$(DEPDIR)/rrspacing_r4.Plo"; else rm -f "$(DEPDIR)/rrspacing_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/rrspacing_r4.c' object='rrspacing_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rrspacing_r4.lo `test -f '$(srcdir)/generated/rrspacing_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/rrspacing_r4.c + +rrspacing_r8.lo: $(srcdir)/generated/rrspacing_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rrspacing_r8.lo -MD -MP -MF "$(DEPDIR)/rrspacing_r8.Tpo" -c -o rrspacing_r8.lo `test -f '$(srcdir)/generated/rrspacing_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/rrspacing_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rrspacing_r8.Tpo" "$(DEPDIR)/rrspacing_r8.Plo"; else rm -f "$(DEPDIR)/rrspacing_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/rrspacing_r8.c' object='rrspacing_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rrspacing_r8.lo `test -f '$(srcdir)/generated/rrspacing_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/rrspacing_r8.c + +rrspacing_r10.lo: $(srcdir)/generated/rrspacing_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rrspacing_r10.lo -MD -MP -MF "$(DEPDIR)/rrspacing_r10.Tpo" -c -o rrspacing_r10.lo `test -f '$(srcdir)/generated/rrspacing_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/rrspacing_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rrspacing_r10.Tpo" "$(DEPDIR)/rrspacing_r10.Plo"; else rm -f "$(DEPDIR)/rrspacing_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/rrspacing_r10.c' object='rrspacing_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rrspacing_r10.lo `test -f '$(srcdir)/generated/rrspacing_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/rrspacing_r10.c + +rrspacing_r16.lo: $(srcdir)/generated/rrspacing_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rrspacing_r16.lo -MD -MP -MF "$(DEPDIR)/rrspacing_r16.Tpo" -c -o rrspacing_r16.lo `test -f '$(srcdir)/generated/rrspacing_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/rrspacing_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rrspacing_r16.Tpo" "$(DEPDIR)/rrspacing_r16.Plo"; else rm -f "$(DEPDIR)/rrspacing_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/rrspacing_r16.c' object='rrspacing_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rrspacing_r16.lo `test -f '$(srcdir)/generated/rrspacing_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/rrspacing_r16.c + +spacing_r4.lo: $(srcdir)/generated/spacing_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spacing_r4.lo -MD -MP -MF "$(DEPDIR)/spacing_r4.Tpo" -c -o spacing_r4.lo `test -f '$(srcdir)/generated/spacing_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/spacing_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spacing_r4.Tpo" "$(DEPDIR)/spacing_r4.Plo"; else rm -f "$(DEPDIR)/spacing_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spacing_r4.c' object='spacing_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spacing_r4.lo `test -f '$(srcdir)/generated/spacing_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/spacing_r4.c + +spacing_r8.lo: $(srcdir)/generated/spacing_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spacing_r8.lo -MD -MP -MF "$(DEPDIR)/spacing_r8.Tpo" -c -o spacing_r8.lo `test -f '$(srcdir)/generated/spacing_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/spacing_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spacing_r8.Tpo" "$(DEPDIR)/spacing_r8.Plo"; else rm -f "$(DEPDIR)/spacing_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spacing_r8.c' object='spacing_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spacing_r8.lo `test -f '$(srcdir)/generated/spacing_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/spacing_r8.c + +spacing_r10.lo: $(srcdir)/generated/spacing_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spacing_r10.lo -MD -MP -MF "$(DEPDIR)/spacing_r10.Tpo" -c -o spacing_r10.lo `test -f '$(srcdir)/generated/spacing_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/spacing_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spacing_r10.Tpo" "$(DEPDIR)/spacing_r10.Plo"; else rm -f "$(DEPDIR)/spacing_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spacing_r10.c' object='spacing_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spacing_r10.lo `test -f '$(srcdir)/generated/spacing_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/spacing_r10.c + +spacing_r16.lo: $(srcdir)/generated/spacing_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spacing_r16.lo -MD -MP -MF "$(DEPDIR)/spacing_r16.Tpo" -c -o spacing_r16.lo `test -f '$(srcdir)/generated/spacing_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/spacing_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spacing_r16.Tpo" "$(DEPDIR)/spacing_r16.Plo"; else rm -f "$(DEPDIR)/spacing_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spacing_r16.c' object='spacing_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spacing_r16.lo `test -f '$(srcdir)/generated/spacing_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/spacing_r16.c + +pack_i1.lo: $(srcdir)/generated/pack_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pack_i1.lo -MD -MP -MF "$(DEPDIR)/pack_i1.Tpo" -c -o pack_i1.lo `test -f '$(srcdir)/generated/pack_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pack_i1.Tpo" "$(DEPDIR)/pack_i1.Plo"; else rm -f "$(DEPDIR)/pack_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pack_i1.c' object='pack_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pack_i1.lo `test -f '$(srcdir)/generated/pack_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_i1.c + +pack_i2.lo: $(srcdir)/generated/pack_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pack_i2.lo -MD -MP -MF "$(DEPDIR)/pack_i2.Tpo" -c -o pack_i2.lo `test -f '$(srcdir)/generated/pack_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pack_i2.Tpo" "$(DEPDIR)/pack_i2.Plo"; else rm -f "$(DEPDIR)/pack_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pack_i2.c' object='pack_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pack_i2.lo `test -f '$(srcdir)/generated/pack_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_i2.c + +pack_i4.lo: $(srcdir)/generated/pack_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pack_i4.lo -MD -MP -MF "$(DEPDIR)/pack_i4.Tpo" -c -o pack_i4.lo `test -f '$(srcdir)/generated/pack_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pack_i4.Tpo" "$(DEPDIR)/pack_i4.Plo"; else rm -f "$(DEPDIR)/pack_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pack_i4.c' object='pack_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pack_i4.lo `test -f '$(srcdir)/generated/pack_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_i4.c + +pack_i8.lo: $(srcdir)/generated/pack_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pack_i8.lo -MD -MP -MF "$(DEPDIR)/pack_i8.Tpo" -c -o pack_i8.lo `test -f '$(srcdir)/generated/pack_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pack_i8.Tpo" "$(DEPDIR)/pack_i8.Plo"; else rm -f "$(DEPDIR)/pack_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pack_i8.c' object='pack_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pack_i8.lo `test -f '$(srcdir)/generated/pack_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_i8.c + +pack_i16.lo: $(srcdir)/generated/pack_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pack_i16.lo -MD -MP -MF "$(DEPDIR)/pack_i16.Tpo" -c -o pack_i16.lo `test -f '$(srcdir)/generated/pack_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pack_i16.Tpo" "$(DEPDIR)/pack_i16.Plo"; else rm -f "$(DEPDIR)/pack_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pack_i16.c' object='pack_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pack_i16.lo `test -f '$(srcdir)/generated/pack_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_i16.c + +pack_r4.lo: $(srcdir)/generated/pack_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pack_r4.lo -MD -MP -MF "$(DEPDIR)/pack_r4.Tpo" -c -o pack_r4.lo `test -f '$(srcdir)/generated/pack_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pack_r4.Tpo" "$(DEPDIR)/pack_r4.Plo"; else rm -f "$(DEPDIR)/pack_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pack_r4.c' object='pack_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pack_r4.lo `test -f '$(srcdir)/generated/pack_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_r4.c + +pack_r8.lo: $(srcdir)/generated/pack_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pack_r8.lo -MD -MP -MF "$(DEPDIR)/pack_r8.Tpo" -c -o pack_r8.lo `test -f '$(srcdir)/generated/pack_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pack_r8.Tpo" "$(DEPDIR)/pack_r8.Plo"; else rm -f "$(DEPDIR)/pack_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pack_r8.c' object='pack_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pack_r8.lo `test -f '$(srcdir)/generated/pack_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_r8.c + +pack_r10.lo: $(srcdir)/generated/pack_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pack_r10.lo -MD -MP -MF "$(DEPDIR)/pack_r10.Tpo" -c -o pack_r10.lo `test -f '$(srcdir)/generated/pack_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pack_r10.Tpo" "$(DEPDIR)/pack_r10.Plo"; else rm -f "$(DEPDIR)/pack_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pack_r10.c' object='pack_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pack_r10.lo `test -f '$(srcdir)/generated/pack_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_r10.c + +pack_r16.lo: $(srcdir)/generated/pack_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pack_r16.lo -MD -MP -MF "$(DEPDIR)/pack_r16.Tpo" -c -o pack_r16.lo `test -f '$(srcdir)/generated/pack_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pack_r16.Tpo" "$(DEPDIR)/pack_r16.Plo"; else rm -f "$(DEPDIR)/pack_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pack_r16.c' object='pack_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pack_r16.lo `test -f '$(srcdir)/generated/pack_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_r16.c + +pack_c4.lo: $(srcdir)/generated/pack_c4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pack_c4.lo -MD -MP -MF "$(DEPDIR)/pack_c4.Tpo" -c -o pack_c4.lo `test -f '$(srcdir)/generated/pack_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_c4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pack_c4.Tpo" "$(DEPDIR)/pack_c4.Plo"; else rm -f "$(DEPDIR)/pack_c4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pack_c4.c' object='pack_c4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pack_c4.lo `test -f '$(srcdir)/generated/pack_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_c4.c + +pack_c8.lo: $(srcdir)/generated/pack_c8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pack_c8.lo -MD -MP -MF "$(DEPDIR)/pack_c8.Tpo" -c -o pack_c8.lo `test -f '$(srcdir)/generated/pack_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_c8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pack_c8.Tpo" "$(DEPDIR)/pack_c8.Plo"; else rm -f "$(DEPDIR)/pack_c8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pack_c8.c' object='pack_c8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pack_c8.lo `test -f '$(srcdir)/generated/pack_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_c8.c + +pack_c10.lo: $(srcdir)/generated/pack_c10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pack_c10.lo -MD -MP -MF "$(DEPDIR)/pack_c10.Tpo" -c -o pack_c10.lo `test -f '$(srcdir)/generated/pack_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_c10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pack_c10.Tpo" "$(DEPDIR)/pack_c10.Plo"; else rm -f "$(DEPDIR)/pack_c10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pack_c10.c' object='pack_c10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pack_c10.lo `test -f '$(srcdir)/generated/pack_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_c10.c + +pack_c16.lo: $(srcdir)/generated/pack_c16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pack_c16.lo -MD -MP -MF "$(DEPDIR)/pack_c16.Tpo" -c -o pack_c16.lo `test -f '$(srcdir)/generated/pack_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_c16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pack_c16.Tpo" "$(DEPDIR)/pack_c16.Plo"; else rm -f "$(DEPDIR)/pack_c16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/pack_c16.c' object='pack_c16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pack_c16.lo `test -f '$(srcdir)/generated/pack_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/pack_c16.c + +unpack_i1.lo: $(srcdir)/generated/unpack_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unpack_i1.lo -MD -MP -MF "$(DEPDIR)/unpack_i1.Tpo" -c -o unpack_i1.lo `test -f '$(srcdir)/generated/unpack_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unpack_i1.Tpo" "$(DEPDIR)/unpack_i1.Plo"; else rm -f "$(DEPDIR)/unpack_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/unpack_i1.c' object='unpack_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unpack_i1.lo `test -f '$(srcdir)/generated/unpack_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_i1.c + +unpack_i2.lo: $(srcdir)/generated/unpack_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unpack_i2.lo -MD -MP -MF "$(DEPDIR)/unpack_i2.Tpo" -c -o unpack_i2.lo `test -f '$(srcdir)/generated/unpack_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unpack_i2.Tpo" "$(DEPDIR)/unpack_i2.Plo"; else rm -f "$(DEPDIR)/unpack_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/unpack_i2.c' object='unpack_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unpack_i2.lo `test -f '$(srcdir)/generated/unpack_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_i2.c + +unpack_i4.lo: $(srcdir)/generated/unpack_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unpack_i4.lo -MD -MP -MF "$(DEPDIR)/unpack_i4.Tpo" -c -o unpack_i4.lo `test -f '$(srcdir)/generated/unpack_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unpack_i4.Tpo" "$(DEPDIR)/unpack_i4.Plo"; else rm -f "$(DEPDIR)/unpack_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/unpack_i4.c' object='unpack_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unpack_i4.lo `test -f '$(srcdir)/generated/unpack_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_i4.c + +unpack_i8.lo: $(srcdir)/generated/unpack_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unpack_i8.lo -MD -MP -MF "$(DEPDIR)/unpack_i8.Tpo" -c -o unpack_i8.lo `test -f '$(srcdir)/generated/unpack_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unpack_i8.Tpo" "$(DEPDIR)/unpack_i8.Plo"; else rm -f "$(DEPDIR)/unpack_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/unpack_i8.c' object='unpack_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unpack_i8.lo `test -f '$(srcdir)/generated/unpack_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_i8.c + +unpack_i16.lo: $(srcdir)/generated/unpack_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unpack_i16.lo -MD -MP -MF "$(DEPDIR)/unpack_i16.Tpo" -c -o unpack_i16.lo `test -f '$(srcdir)/generated/unpack_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unpack_i16.Tpo" "$(DEPDIR)/unpack_i16.Plo"; else rm -f "$(DEPDIR)/unpack_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/unpack_i16.c' object='unpack_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unpack_i16.lo `test -f '$(srcdir)/generated/unpack_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_i16.c + +unpack_r4.lo: $(srcdir)/generated/unpack_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unpack_r4.lo -MD -MP -MF "$(DEPDIR)/unpack_r4.Tpo" -c -o unpack_r4.lo `test -f '$(srcdir)/generated/unpack_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unpack_r4.Tpo" "$(DEPDIR)/unpack_r4.Plo"; else rm -f "$(DEPDIR)/unpack_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/unpack_r4.c' object='unpack_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unpack_r4.lo `test -f '$(srcdir)/generated/unpack_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_r4.c + +unpack_r8.lo: $(srcdir)/generated/unpack_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unpack_r8.lo -MD -MP -MF "$(DEPDIR)/unpack_r8.Tpo" -c -o unpack_r8.lo `test -f '$(srcdir)/generated/unpack_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unpack_r8.Tpo" "$(DEPDIR)/unpack_r8.Plo"; else rm -f "$(DEPDIR)/unpack_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/unpack_r8.c' object='unpack_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unpack_r8.lo `test -f '$(srcdir)/generated/unpack_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_r8.c + +unpack_r10.lo: $(srcdir)/generated/unpack_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unpack_r10.lo -MD -MP -MF "$(DEPDIR)/unpack_r10.Tpo" -c -o unpack_r10.lo `test -f '$(srcdir)/generated/unpack_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unpack_r10.Tpo" "$(DEPDIR)/unpack_r10.Plo"; else rm -f "$(DEPDIR)/unpack_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/unpack_r10.c' object='unpack_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unpack_r10.lo `test -f '$(srcdir)/generated/unpack_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_r10.c + +unpack_r16.lo: $(srcdir)/generated/unpack_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unpack_r16.lo -MD -MP -MF "$(DEPDIR)/unpack_r16.Tpo" -c -o unpack_r16.lo `test -f '$(srcdir)/generated/unpack_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unpack_r16.Tpo" "$(DEPDIR)/unpack_r16.Plo"; else rm -f "$(DEPDIR)/unpack_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/unpack_r16.c' object='unpack_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unpack_r16.lo `test -f '$(srcdir)/generated/unpack_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_r16.c + +unpack_c4.lo: $(srcdir)/generated/unpack_c4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unpack_c4.lo -MD -MP -MF "$(DEPDIR)/unpack_c4.Tpo" -c -o unpack_c4.lo `test -f '$(srcdir)/generated/unpack_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_c4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unpack_c4.Tpo" "$(DEPDIR)/unpack_c4.Plo"; else rm -f "$(DEPDIR)/unpack_c4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/unpack_c4.c' object='unpack_c4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unpack_c4.lo `test -f '$(srcdir)/generated/unpack_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_c4.c + +unpack_c8.lo: $(srcdir)/generated/unpack_c8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unpack_c8.lo -MD -MP -MF "$(DEPDIR)/unpack_c8.Tpo" -c -o unpack_c8.lo `test -f '$(srcdir)/generated/unpack_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_c8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unpack_c8.Tpo" "$(DEPDIR)/unpack_c8.Plo"; else rm -f "$(DEPDIR)/unpack_c8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/unpack_c8.c' object='unpack_c8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unpack_c8.lo `test -f '$(srcdir)/generated/unpack_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_c8.c + +unpack_c10.lo: $(srcdir)/generated/unpack_c10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unpack_c10.lo -MD -MP -MF "$(DEPDIR)/unpack_c10.Tpo" -c -o unpack_c10.lo `test -f '$(srcdir)/generated/unpack_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_c10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unpack_c10.Tpo" "$(DEPDIR)/unpack_c10.Plo"; else rm -f "$(DEPDIR)/unpack_c10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/unpack_c10.c' object='unpack_c10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unpack_c10.lo `test -f '$(srcdir)/generated/unpack_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_c10.c + +unpack_c16.lo: $(srcdir)/generated/unpack_c16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unpack_c16.lo -MD -MP -MF "$(DEPDIR)/unpack_c16.Tpo" -c -o unpack_c16.lo `test -f '$(srcdir)/generated/unpack_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_c16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unpack_c16.Tpo" "$(DEPDIR)/unpack_c16.Plo"; else rm -f "$(DEPDIR)/unpack_c16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/unpack_c16.c' object='unpack_c16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unpack_c16.lo `test -f '$(srcdir)/generated/unpack_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/unpack_c16.c + +spread_i1.lo: $(srcdir)/generated/spread_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spread_i1.lo -MD -MP -MF "$(DEPDIR)/spread_i1.Tpo" -c -o spread_i1.lo `test -f '$(srcdir)/generated/spread_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spread_i1.Tpo" "$(DEPDIR)/spread_i1.Plo"; else rm -f "$(DEPDIR)/spread_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spread_i1.c' object='spread_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spread_i1.lo `test -f '$(srcdir)/generated/spread_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_i1.c + +spread_i2.lo: $(srcdir)/generated/spread_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spread_i2.lo -MD -MP -MF "$(DEPDIR)/spread_i2.Tpo" -c -o spread_i2.lo `test -f '$(srcdir)/generated/spread_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spread_i2.Tpo" "$(DEPDIR)/spread_i2.Plo"; else rm -f "$(DEPDIR)/spread_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spread_i2.c' object='spread_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spread_i2.lo `test -f '$(srcdir)/generated/spread_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_i2.c + +spread_i4.lo: $(srcdir)/generated/spread_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spread_i4.lo -MD -MP -MF "$(DEPDIR)/spread_i4.Tpo" -c -o spread_i4.lo `test -f '$(srcdir)/generated/spread_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spread_i4.Tpo" "$(DEPDIR)/spread_i4.Plo"; else rm -f "$(DEPDIR)/spread_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spread_i4.c' object='spread_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spread_i4.lo `test -f '$(srcdir)/generated/spread_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_i4.c + +spread_i8.lo: $(srcdir)/generated/spread_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spread_i8.lo -MD -MP -MF "$(DEPDIR)/spread_i8.Tpo" -c -o spread_i8.lo `test -f '$(srcdir)/generated/spread_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spread_i8.Tpo" "$(DEPDIR)/spread_i8.Plo"; else rm -f "$(DEPDIR)/spread_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spread_i8.c' object='spread_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spread_i8.lo `test -f '$(srcdir)/generated/spread_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_i8.c + +spread_i16.lo: $(srcdir)/generated/spread_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spread_i16.lo -MD -MP -MF "$(DEPDIR)/spread_i16.Tpo" -c -o spread_i16.lo `test -f '$(srcdir)/generated/spread_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spread_i16.Tpo" "$(DEPDIR)/spread_i16.Plo"; else rm -f "$(DEPDIR)/spread_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spread_i16.c' object='spread_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spread_i16.lo `test -f '$(srcdir)/generated/spread_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_i16.c + +spread_r4.lo: $(srcdir)/generated/spread_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spread_r4.lo -MD -MP -MF "$(DEPDIR)/spread_r4.Tpo" -c -o spread_r4.lo `test -f '$(srcdir)/generated/spread_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spread_r4.Tpo" "$(DEPDIR)/spread_r4.Plo"; else rm -f "$(DEPDIR)/spread_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spread_r4.c' object='spread_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spread_r4.lo `test -f '$(srcdir)/generated/spread_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_r4.c + +spread_r8.lo: $(srcdir)/generated/spread_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spread_r8.lo -MD -MP -MF "$(DEPDIR)/spread_r8.Tpo" -c -o spread_r8.lo `test -f '$(srcdir)/generated/spread_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spread_r8.Tpo" "$(DEPDIR)/spread_r8.Plo"; else rm -f "$(DEPDIR)/spread_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spread_r8.c' object='spread_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spread_r8.lo `test -f '$(srcdir)/generated/spread_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_r8.c + +spread_r10.lo: $(srcdir)/generated/spread_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spread_r10.lo -MD -MP -MF "$(DEPDIR)/spread_r10.Tpo" -c -o spread_r10.lo `test -f '$(srcdir)/generated/spread_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spread_r10.Tpo" "$(DEPDIR)/spread_r10.Plo"; else rm -f "$(DEPDIR)/spread_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spread_r10.c' object='spread_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spread_r10.lo `test -f '$(srcdir)/generated/spread_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_r10.c + +spread_r16.lo: $(srcdir)/generated/spread_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spread_r16.lo -MD -MP -MF "$(DEPDIR)/spread_r16.Tpo" -c -o spread_r16.lo `test -f '$(srcdir)/generated/spread_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spread_r16.Tpo" "$(DEPDIR)/spread_r16.Plo"; else rm -f "$(DEPDIR)/spread_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spread_r16.c' object='spread_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spread_r16.lo `test -f '$(srcdir)/generated/spread_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_r16.c + +spread_c4.lo: $(srcdir)/generated/spread_c4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spread_c4.lo -MD -MP -MF "$(DEPDIR)/spread_c4.Tpo" -c -o spread_c4.lo `test -f '$(srcdir)/generated/spread_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_c4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spread_c4.Tpo" "$(DEPDIR)/spread_c4.Plo"; else rm -f "$(DEPDIR)/spread_c4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spread_c4.c' object='spread_c4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spread_c4.lo `test -f '$(srcdir)/generated/spread_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_c4.c + +spread_c8.lo: $(srcdir)/generated/spread_c8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spread_c8.lo -MD -MP -MF "$(DEPDIR)/spread_c8.Tpo" -c -o spread_c8.lo `test -f '$(srcdir)/generated/spread_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_c8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spread_c8.Tpo" "$(DEPDIR)/spread_c8.Plo"; else rm -f "$(DEPDIR)/spread_c8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spread_c8.c' object='spread_c8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spread_c8.lo `test -f '$(srcdir)/generated/spread_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_c8.c + +spread_c10.lo: $(srcdir)/generated/spread_c10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spread_c10.lo -MD -MP -MF "$(DEPDIR)/spread_c10.Tpo" -c -o spread_c10.lo `test -f '$(srcdir)/generated/spread_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_c10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spread_c10.Tpo" "$(DEPDIR)/spread_c10.Plo"; else rm -f "$(DEPDIR)/spread_c10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spread_c10.c' object='spread_c10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spread_c10.lo `test -f '$(srcdir)/generated/spread_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_c10.c + +spread_c16.lo: $(srcdir)/generated/spread_c16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spread_c16.lo -MD -MP -MF "$(DEPDIR)/spread_c16.Tpo" -c -o spread_c16.lo `test -f '$(srcdir)/generated/spread_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_c16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spread_c16.Tpo" "$(DEPDIR)/spread_c16.Plo"; else rm -f "$(DEPDIR)/spread_c16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/spread_c16.c' object='spread_c16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spread_c16.lo `test -f '$(srcdir)/generated/spread_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/spread_c16.c + +cshift0_i1.lo: $(srcdir)/generated/cshift0_i1.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift0_i1.lo -MD -MP -MF "$(DEPDIR)/cshift0_i1.Tpo" -c -o cshift0_i1.lo `test -f '$(srcdir)/generated/cshift0_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_i1.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift0_i1.Tpo" "$(DEPDIR)/cshift0_i1.Plo"; else rm -f "$(DEPDIR)/cshift0_i1.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift0_i1.c' object='cshift0_i1.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift0_i1.lo `test -f '$(srcdir)/generated/cshift0_i1.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_i1.c + +cshift0_i2.lo: $(srcdir)/generated/cshift0_i2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift0_i2.lo -MD -MP -MF "$(DEPDIR)/cshift0_i2.Tpo" -c -o cshift0_i2.lo `test -f '$(srcdir)/generated/cshift0_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_i2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift0_i2.Tpo" "$(DEPDIR)/cshift0_i2.Plo"; else rm -f "$(DEPDIR)/cshift0_i2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift0_i2.c' object='cshift0_i2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift0_i2.lo `test -f '$(srcdir)/generated/cshift0_i2.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_i2.c + +cshift0_i4.lo: $(srcdir)/generated/cshift0_i4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift0_i4.lo -MD -MP -MF "$(DEPDIR)/cshift0_i4.Tpo" -c -o cshift0_i4.lo `test -f '$(srcdir)/generated/cshift0_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_i4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift0_i4.Tpo" "$(DEPDIR)/cshift0_i4.Plo"; else rm -f "$(DEPDIR)/cshift0_i4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift0_i4.c' object='cshift0_i4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift0_i4.lo `test -f '$(srcdir)/generated/cshift0_i4.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_i4.c + +cshift0_i8.lo: $(srcdir)/generated/cshift0_i8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift0_i8.lo -MD -MP -MF "$(DEPDIR)/cshift0_i8.Tpo" -c -o cshift0_i8.lo `test -f '$(srcdir)/generated/cshift0_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_i8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift0_i8.Tpo" "$(DEPDIR)/cshift0_i8.Plo"; else rm -f "$(DEPDIR)/cshift0_i8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift0_i8.c' object='cshift0_i8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift0_i8.lo `test -f '$(srcdir)/generated/cshift0_i8.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_i8.c + +cshift0_i16.lo: $(srcdir)/generated/cshift0_i16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift0_i16.lo -MD -MP -MF "$(DEPDIR)/cshift0_i16.Tpo" -c -o cshift0_i16.lo `test -f '$(srcdir)/generated/cshift0_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_i16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift0_i16.Tpo" "$(DEPDIR)/cshift0_i16.Plo"; else rm -f "$(DEPDIR)/cshift0_i16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift0_i16.c' object='cshift0_i16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift0_i16.lo `test -f '$(srcdir)/generated/cshift0_i16.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_i16.c + +cshift0_r4.lo: $(srcdir)/generated/cshift0_r4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift0_r4.lo -MD -MP -MF "$(DEPDIR)/cshift0_r4.Tpo" -c -o cshift0_r4.lo `test -f '$(srcdir)/generated/cshift0_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_r4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift0_r4.Tpo" "$(DEPDIR)/cshift0_r4.Plo"; else rm -f "$(DEPDIR)/cshift0_r4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift0_r4.c' object='cshift0_r4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift0_r4.lo `test -f '$(srcdir)/generated/cshift0_r4.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_r4.c + +cshift0_r8.lo: $(srcdir)/generated/cshift0_r8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift0_r8.lo -MD -MP -MF "$(DEPDIR)/cshift0_r8.Tpo" -c -o cshift0_r8.lo `test -f '$(srcdir)/generated/cshift0_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_r8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift0_r8.Tpo" "$(DEPDIR)/cshift0_r8.Plo"; else rm -f "$(DEPDIR)/cshift0_r8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift0_r8.c' object='cshift0_r8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift0_r8.lo `test -f '$(srcdir)/generated/cshift0_r8.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_r8.c + +cshift0_r10.lo: $(srcdir)/generated/cshift0_r10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift0_r10.lo -MD -MP -MF "$(DEPDIR)/cshift0_r10.Tpo" -c -o cshift0_r10.lo `test -f '$(srcdir)/generated/cshift0_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_r10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift0_r10.Tpo" "$(DEPDIR)/cshift0_r10.Plo"; else rm -f "$(DEPDIR)/cshift0_r10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift0_r10.c' object='cshift0_r10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift0_r10.lo `test -f '$(srcdir)/generated/cshift0_r10.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_r10.c + +cshift0_r16.lo: $(srcdir)/generated/cshift0_r16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift0_r16.lo -MD -MP -MF "$(DEPDIR)/cshift0_r16.Tpo" -c -o cshift0_r16.lo `test -f '$(srcdir)/generated/cshift0_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_r16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift0_r16.Tpo" "$(DEPDIR)/cshift0_r16.Plo"; else rm -f "$(DEPDIR)/cshift0_r16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift0_r16.c' object='cshift0_r16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift0_r16.lo `test -f '$(srcdir)/generated/cshift0_r16.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_r16.c + +cshift0_c4.lo: $(srcdir)/generated/cshift0_c4.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift0_c4.lo -MD -MP -MF "$(DEPDIR)/cshift0_c4.Tpo" -c -o cshift0_c4.lo `test -f '$(srcdir)/generated/cshift0_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_c4.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift0_c4.Tpo" "$(DEPDIR)/cshift0_c4.Plo"; else rm -f "$(DEPDIR)/cshift0_c4.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift0_c4.c' object='cshift0_c4.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift0_c4.lo `test -f '$(srcdir)/generated/cshift0_c4.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_c4.c + +cshift0_c8.lo: $(srcdir)/generated/cshift0_c8.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift0_c8.lo -MD -MP -MF "$(DEPDIR)/cshift0_c8.Tpo" -c -o cshift0_c8.lo `test -f '$(srcdir)/generated/cshift0_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_c8.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift0_c8.Tpo" "$(DEPDIR)/cshift0_c8.Plo"; else rm -f "$(DEPDIR)/cshift0_c8.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift0_c8.c' object='cshift0_c8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift0_c8.lo `test -f '$(srcdir)/generated/cshift0_c8.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_c8.c + +cshift0_c10.lo: $(srcdir)/generated/cshift0_c10.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift0_c10.lo -MD -MP -MF "$(DEPDIR)/cshift0_c10.Tpo" -c -o cshift0_c10.lo `test -f '$(srcdir)/generated/cshift0_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_c10.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift0_c10.Tpo" "$(DEPDIR)/cshift0_c10.Plo"; else rm -f "$(DEPDIR)/cshift0_c10.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift0_c10.c' object='cshift0_c10.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift0_c10.lo `test -f '$(srcdir)/generated/cshift0_c10.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_c10.c + +cshift0_c16.lo: $(srcdir)/generated/cshift0_c16.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift0_c16.lo -MD -MP -MF "$(DEPDIR)/cshift0_c16.Tpo" -c -o cshift0_c16.lo `test -f '$(srcdir)/generated/cshift0_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_c16.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift0_c16.Tpo" "$(DEPDIR)/cshift0_c16.Plo"; else rm -f "$(DEPDIR)/cshift0_c16.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/generated/cshift0_c16.c' object='cshift0_c16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift0_c16.lo `test -f '$(srcdir)/generated/cshift0_c16.c' || echo '$(srcdir)/'`$(srcdir)/generated/cshift0_c16.c + +close.lo: io/close.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT close.lo -MD -MP -MF "$(DEPDIR)/close.Tpo" -c -o close.lo `test -f 'io/close.c' || echo '$(srcdir)/'`io/close.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/close.Tpo" "$(DEPDIR)/close.Plo"; else rm -f "$(DEPDIR)/close.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io/close.c' object='close.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o close.lo `test -f 'io/close.c' || echo '$(srcdir)/'`io/close.c + +file_pos.lo: io/file_pos.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT file_pos.lo -MD -MP -MF "$(DEPDIR)/file_pos.Tpo" -c -o file_pos.lo `test -f 'io/file_pos.c' || echo '$(srcdir)/'`io/file_pos.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/file_pos.Tpo" "$(DEPDIR)/file_pos.Plo"; else rm -f "$(DEPDIR)/file_pos.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io/file_pos.c' object='file_pos.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o file_pos.lo `test -f 'io/file_pos.c' || echo '$(srcdir)/'`io/file_pos.c + +format.lo: io/format.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT format.lo -MD -MP -MF "$(DEPDIR)/format.Tpo" -c -o format.lo `test -f 'io/format.c' || echo '$(srcdir)/'`io/format.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/format.Tpo" "$(DEPDIR)/format.Plo"; else rm -f "$(DEPDIR)/format.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io/format.c' object='format.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o format.lo `test -f 'io/format.c' || echo '$(srcdir)/'`io/format.c + +inquire.lo: io/inquire.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inquire.lo -MD -MP -MF "$(DEPDIR)/inquire.Tpo" -c -o inquire.lo `test -f 'io/inquire.c' || echo '$(srcdir)/'`io/inquire.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/inquire.Tpo" "$(DEPDIR)/inquire.Plo"; else rm -f "$(DEPDIR)/inquire.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io/inquire.c' object='inquire.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o inquire.lo `test -f 'io/inquire.c' || echo '$(srcdir)/'`io/inquire.c + +intrinsics.lo: io/intrinsics.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT intrinsics.lo -MD -MP -MF "$(DEPDIR)/intrinsics.Tpo" -c -o intrinsics.lo `test -f 'io/intrinsics.c' || echo '$(srcdir)/'`io/intrinsics.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/intrinsics.Tpo" "$(DEPDIR)/intrinsics.Plo"; else rm -f "$(DEPDIR)/intrinsics.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io/intrinsics.c' object='intrinsics.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o intrinsics.lo `test -f 'io/intrinsics.c' || echo '$(srcdir)/'`io/intrinsics.c + +list_read.lo: io/list_read.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT list_read.lo -MD -MP -MF "$(DEPDIR)/list_read.Tpo" -c -o list_read.lo `test -f 'io/list_read.c' || echo '$(srcdir)/'`io/list_read.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/list_read.Tpo" "$(DEPDIR)/list_read.Plo"; else rm -f "$(DEPDIR)/list_read.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io/list_read.c' object='list_read.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o list_read.lo `test -f 'io/list_read.c' || echo '$(srcdir)/'`io/list_read.c + +lock.lo: io/lock.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lock.lo -MD -MP -MF "$(DEPDIR)/lock.Tpo" -c -o lock.lo `test -f 'io/lock.c' || echo '$(srcdir)/'`io/lock.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lock.Tpo" "$(DEPDIR)/lock.Plo"; else rm -f "$(DEPDIR)/lock.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io/lock.c' object='lock.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lock.lo `test -f 'io/lock.c' || echo '$(srcdir)/'`io/lock.c + +open.lo: io/open.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT open.lo -MD -MP -MF "$(DEPDIR)/open.Tpo" -c -o open.lo `test -f 'io/open.c' || echo '$(srcdir)/'`io/open.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/open.Tpo" "$(DEPDIR)/open.Plo"; else rm -f "$(DEPDIR)/open.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io/open.c' object='open.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o open.lo `test -f 'io/open.c' || echo '$(srcdir)/'`io/open.c + +read.lo: io/read.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT read.lo -MD -MP -MF "$(DEPDIR)/read.Tpo" -c -o read.lo `test -f 'io/read.c' || echo '$(srcdir)/'`io/read.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/read.Tpo" "$(DEPDIR)/read.Plo"; else rm -f "$(DEPDIR)/read.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io/read.c' object='read.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o read.lo `test -f 'io/read.c' || echo '$(srcdir)/'`io/read.c + +size_from_kind.lo: io/size_from_kind.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT size_from_kind.lo -MD -MP -MF "$(DEPDIR)/size_from_kind.Tpo" -c -o size_from_kind.lo `test -f 'io/size_from_kind.c' || echo '$(srcdir)/'`io/size_from_kind.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/size_from_kind.Tpo" "$(DEPDIR)/size_from_kind.Plo"; else rm -f "$(DEPDIR)/size_from_kind.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io/size_from_kind.c' object='size_from_kind.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o size_from_kind.lo `test -f 'io/size_from_kind.c' || echo '$(srcdir)/'`io/size_from_kind.c + +transfer.lo: io/transfer.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transfer.lo -MD -MP -MF "$(DEPDIR)/transfer.Tpo" -c -o transfer.lo `test -f 'io/transfer.c' || echo '$(srcdir)/'`io/transfer.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transfer.Tpo" "$(DEPDIR)/transfer.Plo"; else rm -f "$(DEPDIR)/transfer.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io/transfer.c' object='transfer.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transfer.lo `test -f 'io/transfer.c' || echo '$(srcdir)/'`io/transfer.c + +unit.lo: io/unit.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit.lo -MD -MP -MF "$(DEPDIR)/unit.Tpo" -c -o unit.lo `test -f 'io/unit.c' || echo '$(srcdir)/'`io/unit.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unit.Tpo" "$(DEPDIR)/unit.Plo"; else rm -f "$(DEPDIR)/unit.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io/unit.c' object='unit.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit.lo `test -f 'io/unit.c' || echo '$(srcdir)/'`io/unit.c + +unix.lo: io/unix.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unix.lo -MD -MP -MF "$(DEPDIR)/unix.Tpo" -c -o unix.lo `test -f 'io/unix.c' || echo '$(srcdir)/'`io/unix.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unix.Tpo" "$(DEPDIR)/unix.Plo"; else rm -f "$(DEPDIR)/unix.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io/unix.c' object='unix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unix.lo `test -f 'io/unix.c' || echo '$(srcdir)/'`io/unix.c + +write.lo: io/write.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT write.lo -MD -MP -MF "$(DEPDIR)/write.Tpo" -c -o write.lo `test -f 'io/write.c' || echo '$(srcdir)/'`io/write.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/write.Tpo" "$(DEPDIR)/write.Plo"; else rm -f "$(DEPDIR)/write.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io/write.c' object='write.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o write.lo `test -f 'io/write.c' || echo '$(srcdir)/'`io/write.c + +fbuf.lo: io/fbuf.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fbuf.lo -MD -MP -MF "$(DEPDIR)/fbuf.Tpo" -c -o fbuf.lo `test -f 'io/fbuf.c' || echo '$(srcdir)/'`io/fbuf.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fbuf.Tpo" "$(DEPDIR)/fbuf.Plo"; else rm -f "$(DEPDIR)/fbuf.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='io/fbuf.c' object='fbuf.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fbuf.lo `test -f 'io/fbuf.c' || echo '$(srcdir)/'`io/fbuf.c + +associated.lo: intrinsics/associated.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT associated.lo -MD -MP -MF "$(DEPDIR)/associated.Tpo" -c -o associated.lo `test -f 'intrinsics/associated.c' || echo '$(srcdir)/'`intrinsics/associated.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/associated.Tpo" "$(DEPDIR)/associated.Plo"; else rm -f "$(DEPDIR)/associated.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/associated.c' object='associated.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o associated.lo `test -f 'intrinsics/associated.c' || echo '$(srcdir)/'`intrinsics/associated.c + +abort.lo: intrinsics/abort.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT abort.lo -MD -MP -MF "$(DEPDIR)/abort.Tpo" -c -o abort.lo `test -f 'intrinsics/abort.c' || echo '$(srcdir)/'`intrinsics/abort.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/abort.Tpo" "$(DEPDIR)/abort.Plo"; else rm -f "$(DEPDIR)/abort.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/abort.c' object='abort.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o abort.lo `test -f 'intrinsics/abort.c' || echo '$(srcdir)/'`intrinsics/abort.c + +access.lo: intrinsics/access.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT access.lo -MD -MP -MF "$(DEPDIR)/access.Tpo" -c -o access.lo `test -f 'intrinsics/access.c' || echo '$(srcdir)/'`intrinsics/access.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/access.Tpo" "$(DEPDIR)/access.Plo"; else rm -f "$(DEPDIR)/access.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/access.c' object='access.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o access.lo `test -f 'intrinsics/access.c' || echo '$(srcdir)/'`intrinsics/access.c + +args.lo: intrinsics/args.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT args.lo -MD -MP -MF "$(DEPDIR)/args.Tpo" -c -o args.lo `test -f 'intrinsics/args.c' || echo '$(srcdir)/'`intrinsics/args.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/args.Tpo" "$(DEPDIR)/args.Plo"; else rm -f "$(DEPDIR)/args.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/args.c' object='args.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o args.lo `test -f 'intrinsics/args.c' || echo '$(srcdir)/'`intrinsics/args.c + +c99_functions.lo: intrinsics/c99_functions.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT c99_functions.lo -MD -MP -MF "$(DEPDIR)/c99_functions.Tpo" -c -o c99_functions.lo `test -f 'intrinsics/c99_functions.c' || echo '$(srcdir)/'`intrinsics/c99_functions.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/c99_functions.Tpo" "$(DEPDIR)/c99_functions.Plo"; else rm -f "$(DEPDIR)/c99_functions.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/c99_functions.c' object='c99_functions.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o c99_functions.lo `test -f 'intrinsics/c99_functions.c' || echo '$(srcdir)/'`intrinsics/c99_functions.c + +chdir.lo: intrinsics/chdir.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chdir.lo -MD -MP -MF "$(DEPDIR)/chdir.Tpo" -c -o chdir.lo `test -f 'intrinsics/chdir.c' || echo '$(srcdir)/'`intrinsics/chdir.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/chdir.Tpo" "$(DEPDIR)/chdir.Plo"; else rm -f "$(DEPDIR)/chdir.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/chdir.c' object='chdir.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chdir.lo `test -f 'intrinsics/chdir.c' || echo '$(srcdir)/'`intrinsics/chdir.c + +chmod.lo: intrinsics/chmod.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chmod.lo -MD -MP -MF "$(DEPDIR)/chmod.Tpo" -c -o chmod.lo `test -f 'intrinsics/chmod.c' || echo '$(srcdir)/'`intrinsics/chmod.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/chmod.Tpo" "$(DEPDIR)/chmod.Plo"; else rm -f "$(DEPDIR)/chmod.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/chmod.c' object='chmod.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chmod.lo `test -f 'intrinsics/chmod.c' || echo '$(srcdir)/'`intrinsics/chmod.c + +clock.lo: intrinsics/clock.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT clock.lo -MD -MP -MF "$(DEPDIR)/clock.Tpo" -c -o clock.lo `test -f 'intrinsics/clock.c' || echo '$(srcdir)/'`intrinsics/clock.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/clock.Tpo" "$(DEPDIR)/clock.Plo"; else rm -f "$(DEPDIR)/clock.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/clock.c' object='clock.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o clock.lo `test -f 'intrinsics/clock.c' || echo '$(srcdir)/'`intrinsics/clock.c + +cpu_time.lo: intrinsics/cpu_time.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cpu_time.lo -MD -MP -MF "$(DEPDIR)/cpu_time.Tpo" -c -o cpu_time.lo `test -f 'intrinsics/cpu_time.c' || echo '$(srcdir)/'`intrinsics/cpu_time.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cpu_time.Tpo" "$(DEPDIR)/cpu_time.Plo"; else rm -f "$(DEPDIR)/cpu_time.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/cpu_time.c' object='cpu_time.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cpu_time.lo `test -f 'intrinsics/cpu_time.c' || echo '$(srcdir)/'`intrinsics/cpu_time.c + +cshift0.lo: intrinsics/cshift0.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cshift0.lo -MD -MP -MF "$(DEPDIR)/cshift0.Tpo" -c -o cshift0.lo `test -f 'intrinsics/cshift0.c' || echo '$(srcdir)/'`intrinsics/cshift0.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cshift0.Tpo" "$(DEPDIR)/cshift0.Plo"; else rm -f "$(DEPDIR)/cshift0.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/cshift0.c' object='cshift0.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cshift0.lo `test -f 'intrinsics/cshift0.c' || echo '$(srcdir)/'`intrinsics/cshift0.c + +ctime.lo: intrinsics/ctime.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ctime.lo -MD -MP -MF "$(DEPDIR)/ctime.Tpo" -c -o ctime.lo `test -f 'intrinsics/ctime.c' || echo '$(srcdir)/'`intrinsics/ctime.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ctime.Tpo" "$(DEPDIR)/ctime.Plo"; else rm -f "$(DEPDIR)/ctime.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/ctime.c' object='ctime.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ctime.lo `test -f 'intrinsics/ctime.c' || echo '$(srcdir)/'`intrinsics/ctime.c + +date_and_time.lo: intrinsics/date_and_time.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT date_and_time.lo -MD -MP -MF "$(DEPDIR)/date_and_time.Tpo" -c -o date_and_time.lo `test -f 'intrinsics/date_and_time.c' || echo '$(srcdir)/'`intrinsics/date_and_time.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/date_and_time.Tpo" "$(DEPDIR)/date_and_time.Plo"; else rm -f "$(DEPDIR)/date_and_time.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/date_and_time.c' object='date_and_time.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o date_and_time.lo `test -f 'intrinsics/date_and_time.c' || echo '$(srcdir)/'`intrinsics/date_and_time.c + +dtime.lo: intrinsics/dtime.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dtime.lo -MD -MP -MF "$(DEPDIR)/dtime.Tpo" -c -o dtime.lo `test -f 'intrinsics/dtime.c' || echo '$(srcdir)/'`intrinsics/dtime.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/dtime.Tpo" "$(DEPDIR)/dtime.Plo"; else rm -f "$(DEPDIR)/dtime.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/dtime.c' object='dtime.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dtime.lo `test -f 'intrinsics/dtime.c' || echo '$(srcdir)/'`intrinsics/dtime.c + +env.lo: intrinsics/env.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT env.lo -MD -MP -MF "$(DEPDIR)/env.Tpo" -c -o env.lo `test -f 'intrinsics/env.c' || echo '$(srcdir)/'`intrinsics/env.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/env.Tpo" "$(DEPDIR)/env.Plo"; else rm -f "$(DEPDIR)/env.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/env.c' object='env.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o env.lo `test -f 'intrinsics/env.c' || echo '$(srcdir)/'`intrinsics/env.c + +eoshift0.lo: intrinsics/eoshift0.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT eoshift0.lo -MD -MP -MF "$(DEPDIR)/eoshift0.Tpo" -c -o eoshift0.lo `test -f 'intrinsics/eoshift0.c' || echo '$(srcdir)/'`intrinsics/eoshift0.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/eoshift0.Tpo" "$(DEPDIR)/eoshift0.Plo"; else rm -f "$(DEPDIR)/eoshift0.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/eoshift0.c' object='eoshift0.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o eoshift0.lo `test -f 'intrinsics/eoshift0.c' || echo '$(srcdir)/'`intrinsics/eoshift0.c + +eoshift2.lo: intrinsics/eoshift2.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT eoshift2.lo -MD -MP -MF "$(DEPDIR)/eoshift2.Tpo" -c -o eoshift2.lo `test -f 'intrinsics/eoshift2.c' || echo '$(srcdir)/'`intrinsics/eoshift2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/eoshift2.Tpo" "$(DEPDIR)/eoshift2.Plo"; else rm -f "$(DEPDIR)/eoshift2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/eoshift2.c' object='eoshift2.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o eoshift2.lo `test -f 'intrinsics/eoshift2.c' || echo '$(srcdir)/'`intrinsics/eoshift2.c + +erfc_scaled.lo: intrinsics/erfc_scaled.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT erfc_scaled.lo -MD -MP -MF "$(DEPDIR)/erfc_scaled.Tpo" -c -o erfc_scaled.lo `test -f 'intrinsics/erfc_scaled.c' || echo '$(srcdir)/'`intrinsics/erfc_scaled.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/erfc_scaled.Tpo" "$(DEPDIR)/erfc_scaled.Plo"; else rm -f "$(DEPDIR)/erfc_scaled.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/erfc_scaled.c' object='erfc_scaled.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o erfc_scaled.lo `test -f 'intrinsics/erfc_scaled.c' || echo '$(srcdir)/'`intrinsics/erfc_scaled.c + +etime.lo: intrinsics/etime.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT etime.lo -MD -MP -MF "$(DEPDIR)/etime.Tpo" -c -o etime.lo `test -f 'intrinsics/etime.c' || echo '$(srcdir)/'`intrinsics/etime.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/etime.Tpo" "$(DEPDIR)/etime.Plo"; else rm -f "$(DEPDIR)/etime.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/etime.c' object='etime.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o etime.lo `test -f 'intrinsics/etime.c' || echo '$(srcdir)/'`intrinsics/etime.c + +exit.lo: intrinsics/exit.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT exit.lo -MD -MP -MF "$(DEPDIR)/exit.Tpo" -c -o exit.lo `test -f 'intrinsics/exit.c' || echo '$(srcdir)/'`intrinsics/exit.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/exit.Tpo" "$(DEPDIR)/exit.Plo"; else rm -f "$(DEPDIR)/exit.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/exit.c' object='exit.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o exit.lo `test -f 'intrinsics/exit.c' || echo '$(srcdir)/'`intrinsics/exit.c + +fnum.lo: intrinsics/fnum.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fnum.lo -MD -MP -MF "$(DEPDIR)/fnum.Tpo" -c -o fnum.lo `test -f 'intrinsics/fnum.c' || echo '$(srcdir)/'`intrinsics/fnum.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fnum.Tpo" "$(DEPDIR)/fnum.Plo"; else rm -f "$(DEPDIR)/fnum.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/fnum.c' object='fnum.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fnum.lo `test -f 'intrinsics/fnum.c' || echo '$(srcdir)/'`intrinsics/fnum.c + +gerror.lo: intrinsics/gerror.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gerror.lo -MD -MP -MF "$(DEPDIR)/gerror.Tpo" -c -o gerror.lo `test -f 'intrinsics/gerror.c' || echo '$(srcdir)/'`intrinsics/gerror.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/gerror.Tpo" "$(DEPDIR)/gerror.Plo"; else rm -f "$(DEPDIR)/gerror.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/gerror.c' object='gerror.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gerror.lo `test -f 'intrinsics/gerror.c' || echo '$(srcdir)/'`intrinsics/gerror.c + +getcwd.lo: intrinsics/getcwd.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getcwd.lo -MD -MP -MF "$(DEPDIR)/getcwd.Tpo" -c -o getcwd.lo `test -f 'intrinsics/getcwd.c' || echo '$(srcdir)/'`intrinsics/getcwd.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getcwd.Tpo" "$(DEPDIR)/getcwd.Plo"; else rm -f "$(DEPDIR)/getcwd.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/getcwd.c' object='getcwd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getcwd.lo `test -f 'intrinsics/getcwd.c' || echo '$(srcdir)/'`intrinsics/getcwd.c + +getlog.lo: intrinsics/getlog.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getlog.lo -MD -MP -MF "$(DEPDIR)/getlog.Tpo" -c -o getlog.lo `test -f 'intrinsics/getlog.c' || echo '$(srcdir)/'`intrinsics/getlog.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getlog.Tpo" "$(DEPDIR)/getlog.Plo"; else rm -f "$(DEPDIR)/getlog.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/getlog.c' object='getlog.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getlog.lo `test -f 'intrinsics/getlog.c' || echo '$(srcdir)/'`intrinsics/getlog.c + +getXid.lo: intrinsics/getXid.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getXid.lo -MD -MP -MF "$(DEPDIR)/getXid.Tpo" -c -o getXid.lo `test -f 'intrinsics/getXid.c' || echo '$(srcdir)/'`intrinsics/getXid.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/getXid.Tpo" "$(DEPDIR)/getXid.Plo"; else rm -f "$(DEPDIR)/getXid.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/getXid.c' object='getXid.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getXid.lo `test -f 'intrinsics/getXid.c' || echo '$(srcdir)/'`intrinsics/getXid.c + +hostnm.lo: intrinsics/hostnm.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hostnm.lo -MD -MP -MF "$(DEPDIR)/hostnm.Tpo" -c -o hostnm.lo `test -f 'intrinsics/hostnm.c' || echo '$(srcdir)/'`intrinsics/hostnm.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/hostnm.Tpo" "$(DEPDIR)/hostnm.Plo"; else rm -f "$(DEPDIR)/hostnm.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/hostnm.c' object='hostnm.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hostnm.lo `test -f 'intrinsics/hostnm.c' || echo '$(srcdir)/'`intrinsics/hostnm.c + +ierrno.lo: intrinsics/ierrno.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ierrno.lo -MD -MP -MF "$(DEPDIR)/ierrno.Tpo" -c -o ierrno.lo `test -f 'intrinsics/ierrno.c' || echo '$(srcdir)/'`intrinsics/ierrno.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ierrno.Tpo" "$(DEPDIR)/ierrno.Plo"; else rm -f "$(DEPDIR)/ierrno.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/ierrno.c' object='ierrno.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ierrno.lo `test -f 'intrinsics/ierrno.c' || echo '$(srcdir)/'`intrinsics/ierrno.c + +ishftc.lo: intrinsics/ishftc.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ishftc.lo -MD -MP -MF "$(DEPDIR)/ishftc.Tpo" -c -o ishftc.lo `test -f 'intrinsics/ishftc.c' || echo '$(srcdir)/'`intrinsics/ishftc.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ishftc.Tpo" "$(DEPDIR)/ishftc.Plo"; else rm -f "$(DEPDIR)/ishftc.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/ishftc.c' object='ishftc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ishftc.lo `test -f 'intrinsics/ishftc.c' || echo '$(srcdir)/'`intrinsics/ishftc.c + +iso_c_generated_procs.lo: intrinsics/iso_c_generated_procs.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT iso_c_generated_procs.lo -MD -MP -MF "$(DEPDIR)/iso_c_generated_procs.Tpo" -c -o iso_c_generated_procs.lo `test -f 'intrinsics/iso_c_generated_procs.c' || echo '$(srcdir)/'`intrinsics/iso_c_generated_procs.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso_c_generated_procs.Tpo" "$(DEPDIR)/iso_c_generated_procs.Plo"; else rm -f "$(DEPDIR)/iso_c_generated_procs.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/iso_c_generated_procs.c' object='iso_c_generated_procs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o iso_c_generated_procs.lo `test -f 'intrinsics/iso_c_generated_procs.c' || echo '$(srcdir)/'`intrinsics/iso_c_generated_procs.c + +iso_c_binding.lo: intrinsics/iso_c_binding.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT iso_c_binding.lo -MD -MP -MF "$(DEPDIR)/iso_c_binding.Tpo" -c -o iso_c_binding.lo `test -f 'intrinsics/iso_c_binding.c' || echo '$(srcdir)/'`intrinsics/iso_c_binding.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso_c_binding.Tpo" "$(DEPDIR)/iso_c_binding.Plo"; else rm -f "$(DEPDIR)/iso_c_binding.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/iso_c_binding.c' object='iso_c_binding.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o iso_c_binding.lo `test -f 'intrinsics/iso_c_binding.c' || echo '$(srcdir)/'`intrinsics/iso_c_binding.c + +kill.lo: intrinsics/kill.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT kill.lo -MD -MP -MF "$(DEPDIR)/kill.Tpo" -c -o kill.lo `test -f 'intrinsics/kill.c' || echo '$(srcdir)/'`intrinsics/kill.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/kill.Tpo" "$(DEPDIR)/kill.Plo"; else rm -f "$(DEPDIR)/kill.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/kill.c' object='kill.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o kill.lo `test -f 'intrinsics/kill.c' || echo '$(srcdir)/'`intrinsics/kill.c + +link.lo: intrinsics/link.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT link.lo -MD -MP -MF "$(DEPDIR)/link.Tpo" -c -o link.lo `test -f 'intrinsics/link.c' || echo '$(srcdir)/'`intrinsics/link.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/link.Tpo" "$(DEPDIR)/link.Plo"; else rm -f "$(DEPDIR)/link.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/link.c' object='link.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o link.lo `test -f 'intrinsics/link.c' || echo '$(srcdir)/'`intrinsics/link.c + +malloc.lo: intrinsics/malloc.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT malloc.lo -MD -MP -MF "$(DEPDIR)/malloc.Tpo" -c -o malloc.lo `test -f 'intrinsics/malloc.c' || echo '$(srcdir)/'`intrinsics/malloc.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/malloc.Tpo" "$(DEPDIR)/malloc.Plo"; else rm -f "$(DEPDIR)/malloc.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/malloc.c' object='malloc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o malloc.lo `test -f 'intrinsics/malloc.c' || echo '$(srcdir)/'`intrinsics/malloc.c + +mvbits.lo: intrinsics/mvbits.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mvbits.lo -MD -MP -MF "$(DEPDIR)/mvbits.Tpo" -c -o mvbits.lo `test -f 'intrinsics/mvbits.c' || echo '$(srcdir)/'`intrinsics/mvbits.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mvbits.Tpo" "$(DEPDIR)/mvbits.Plo"; else rm -f "$(DEPDIR)/mvbits.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/mvbits.c' object='mvbits.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mvbits.lo `test -f 'intrinsics/mvbits.c' || echo '$(srcdir)/'`intrinsics/mvbits.c + +move_alloc.lo: intrinsics/move_alloc.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT move_alloc.lo -MD -MP -MF "$(DEPDIR)/move_alloc.Tpo" -c -o move_alloc.lo `test -f 'intrinsics/move_alloc.c' || echo '$(srcdir)/'`intrinsics/move_alloc.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/move_alloc.Tpo" "$(DEPDIR)/move_alloc.Plo"; else rm -f "$(DEPDIR)/move_alloc.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/move_alloc.c' object='move_alloc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o move_alloc.lo `test -f 'intrinsics/move_alloc.c' || echo '$(srcdir)/'`intrinsics/move_alloc.c + +pack_generic.lo: intrinsics/pack_generic.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pack_generic.lo -MD -MP -MF "$(DEPDIR)/pack_generic.Tpo" -c -o pack_generic.lo `test -f 'intrinsics/pack_generic.c' || echo '$(srcdir)/'`intrinsics/pack_generic.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pack_generic.Tpo" "$(DEPDIR)/pack_generic.Plo"; else rm -f "$(DEPDIR)/pack_generic.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/pack_generic.c' object='pack_generic.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pack_generic.lo `test -f 'intrinsics/pack_generic.c' || echo '$(srcdir)/'`intrinsics/pack_generic.c + +perror.lo: intrinsics/perror.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT perror.lo -MD -MP -MF "$(DEPDIR)/perror.Tpo" -c -o perror.lo `test -f 'intrinsics/perror.c' || echo '$(srcdir)/'`intrinsics/perror.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/perror.Tpo" "$(DEPDIR)/perror.Plo"; else rm -f "$(DEPDIR)/perror.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/perror.c' object='perror.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o perror.lo `test -f 'intrinsics/perror.c' || echo '$(srcdir)/'`intrinsics/perror.c + +selected_char_kind.lo: intrinsics/selected_char_kind.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT selected_char_kind.lo -MD -MP -MF "$(DEPDIR)/selected_char_kind.Tpo" -c -o selected_char_kind.lo `test -f 'intrinsics/selected_char_kind.c' || echo '$(srcdir)/'`intrinsics/selected_char_kind.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/selected_char_kind.Tpo" "$(DEPDIR)/selected_char_kind.Plo"; else rm -f "$(DEPDIR)/selected_char_kind.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/selected_char_kind.c' object='selected_char_kind.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o selected_char_kind.lo `test -f 'intrinsics/selected_char_kind.c' || echo '$(srcdir)/'`intrinsics/selected_char_kind.c + +signal.lo: intrinsics/signal.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT signal.lo -MD -MP -MF "$(DEPDIR)/signal.Tpo" -c -o signal.lo `test -f 'intrinsics/signal.c' || echo '$(srcdir)/'`intrinsics/signal.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/signal.Tpo" "$(DEPDIR)/signal.Plo"; else rm -f "$(DEPDIR)/signal.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/signal.c' object='signal.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o signal.lo `test -f 'intrinsics/signal.c' || echo '$(srcdir)/'`intrinsics/signal.c + +size.lo: intrinsics/size.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT size.lo -MD -MP -MF "$(DEPDIR)/size.Tpo" -c -o size.lo `test -f 'intrinsics/size.c' || echo '$(srcdir)/'`intrinsics/size.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/size.Tpo" "$(DEPDIR)/size.Plo"; else rm -f "$(DEPDIR)/size.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/size.c' object='size.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o size.lo `test -f 'intrinsics/size.c' || echo '$(srcdir)/'`intrinsics/size.c + +sleep.lo: intrinsics/sleep.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sleep.lo -MD -MP -MF "$(DEPDIR)/sleep.Tpo" -c -o sleep.lo `test -f 'intrinsics/sleep.c' || echo '$(srcdir)/'`intrinsics/sleep.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sleep.Tpo" "$(DEPDIR)/sleep.Plo"; else rm -f "$(DEPDIR)/sleep.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/sleep.c' object='sleep.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sleep.lo `test -f 'intrinsics/sleep.c' || echo '$(srcdir)/'`intrinsics/sleep.c + +spread_generic.lo: intrinsics/spread_generic.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT spread_generic.lo -MD -MP -MF "$(DEPDIR)/spread_generic.Tpo" -c -o spread_generic.lo `test -f 'intrinsics/spread_generic.c' || echo '$(srcdir)/'`intrinsics/spread_generic.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/spread_generic.Tpo" "$(DEPDIR)/spread_generic.Plo"; else rm -f "$(DEPDIR)/spread_generic.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/spread_generic.c' object='spread_generic.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o spread_generic.lo `test -f 'intrinsics/spread_generic.c' || echo '$(srcdir)/'`intrinsics/spread_generic.c + +string_intrinsics.lo: intrinsics/string_intrinsics.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT string_intrinsics.lo -MD -MP -MF "$(DEPDIR)/string_intrinsics.Tpo" -c -o string_intrinsics.lo `test -f 'intrinsics/string_intrinsics.c' || echo '$(srcdir)/'`intrinsics/string_intrinsics.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/string_intrinsics.Tpo" "$(DEPDIR)/string_intrinsics.Plo"; else rm -f "$(DEPDIR)/string_intrinsics.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/string_intrinsics.c' object='string_intrinsics.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o string_intrinsics.lo `test -f 'intrinsics/string_intrinsics.c' || echo '$(srcdir)/'`intrinsics/string_intrinsics.c + +system.lo: intrinsics/system.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT system.lo -MD -MP -MF "$(DEPDIR)/system.Tpo" -c -o system.lo `test -f 'intrinsics/system.c' || echo '$(srcdir)/'`intrinsics/system.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/system.Tpo" "$(DEPDIR)/system.Plo"; else rm -f "$(DEPDIR)/system.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/system.c' object='system.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o system.lo `test -f 'intrinsics/system.c' || echo '$(srcdir)/'`intrinsics/system.c + +rand.lo: intrinsics/rand.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rand.lo -MD -MP -MF "$(DEPDIR)/rand.Tpo" -c -o rand.lo `test -f 'intrinsics/rand.c' || echo '$(srcdir)/'`intrinsics/rand.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rand.Tpo" "$(DEPDIR)/rand.Plo"; else rm -f "$(DEPDIR)/rand.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/rand.c' object='rand.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rand.lo `test -f 'intrinsics/rand.c' || echo '$(srcdir)/'`intrinsics/rand.c + +random.lo: intrinsics/random.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT random.lo -MD -MP -MF "$(DEPDIR)/random.Tpo" -c -o random.lo `test -f 'intrinsics/random.c' || echo '$(srcdir)/'`intrinsics/random.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/random.Tpo" "$(DEPDIR)/random.Plo"; else rm -f "$(DEPDIR)/random.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/random.c' object='random.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o random.lo `test -f 'intrinsics/random.c' || echo '$(srcdir)/'`intrinsics/random.c + +rename.lo: intrinsics/rename.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rename.lo -MD -MP -MF "$(DEPDIR)/rename.Tpo" -c -o rename.lo `test -f 'intrinsics/rename.c' || echo '$(srcdir)/'`intrinsics/rename.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/rename.Tpo" "$(DEPDIR)/rename.Plo"; else rm -f "$(DEPDIR)/rename.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/rename.c' object='rename.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rename.lo `test -f 'intrinsics/rename.c' || echo '$(srcdir)/'`intrinsics/rename.c + +reshape_generic.lo: intrinsics/reshape_generic.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reshape_generic.lo -MD -MP -MF "$(DEPDIR)/reshape_generic.Tpo" -c -o reshape_generic.lo `test -f 'intrinsics/reshape_generic.c' || echo '$(srcdir)/'`intrinsics/reshape_generic.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reshape_generic.Tpo" "$(DEPDIR)/reshape_generic.Plo"; else rm -f "$(DEPDIR)/reshape_generic.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/reshape_generic.c' object='reshape_generic.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reshape_generic.lo `test -f 'intrinsics/reshape_generic.c' || echo '$(srcdir)/'`intrinsics/reshape_generic.c + +reshape_packed.lo: intrinsics/reshape_packed.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reshape_packed.lo -MD -MP -MF "$(DEPDIR)/reshape_packed.Tpo" -c -o reshape_packed.lo `test -f 'intrinsics/reshape_packed.c' || echo '$(srcdir)/'`intrinsics/reshape_packed.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reshape_packed.Tpo" "$(DEPDIR)/reshape_packed.Plo"; else rm -f "$(DEPDIR)/reshape_packed.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/reshape_packed.c' object='reshape_packed.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reshape_packed.lo `test -f 'intrinsics/reshape_packed.c' || echo '$(srcdir)/'`intrinsics/reshape_packed.c + +stat.lo: intrinsics/stat.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stat.lo -MD -MP -MF "$(DEPDIR)/stat.Tpo" -c -o stat.lo `test -f 'intrinsics/stat.c' || echo '$(srcdir)/'`intrinsics/stat.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/stat.Tpo" "$(DEPDIR)/stat.Plo"; else rm -f "$(DEPDIR)/stat.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/stat.c' object='stat.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stat.lo `test -f 'intrinsics/stat.c' || echo '$(srcdir)/'`intrinsics/stat.c + +symlnk.lo: intrinsics/symlnk.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT symlnk.lo -MD -MP -MF "$(DEPDIR)/symlnk.Tpo" -c -o symlnk.lo `test -f 'intrinsics/symlnk.c' || echo '$(srcdir)/'`intrinsics/symlnk.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/symlnk.Tpo" "$(DEPDIR)/symlnk.Plo"; else rm -f "$(DEPDIR)/symlnk.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/symlnk.c' object='symlnk.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o symlnk.lo `test -f 'intrinsics/symlnk.c' || echo '$(srcdir)/'`intrinsics/symlnk.c + +system_clock.lo: intrinsics/system_clock.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT system_clock.lo -MD -MP -MF "$(DEPDIR)/system_clock.Tpo" -c -o system_clock.lo `test -f 'intrinsics/system_clock.c' || echo '$(srcdir)/'`intrinsics/system_clock.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/system_clock.Tpo" "$(DEPDIR)/system_clock.Plo"; else rm -f "$(DEPDIR)/system_clock.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/system_clock.c' object='system_clock.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o system_clock.lo `test -f 'intrinsics/system_clock.c' || echo '$(srcdir)/'`intrinsics/system_clock.c + +time.lo: intrinsics/time.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT time.lo -MD -MP -MF "$(DEPDIR)/time.Tpo" -c -o time.lo `test -f 'intrinsics/time.c' || echo '$(srcdir)/'`intrinsics/time.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/time.Tpo" "$(DEPDIR)/time.Plo"; else rm -f "$(DEPDIR)/time.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/time.c' object='time.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o time.lo `test -f 'intrinsics/time.c' || echo '$(srcdir)/'`intrinsics/time.c + +transpose_generic.lo: intrinsics/transpose_generic.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transpose_generic.lo -MD -MP -MF "$(DEPDIR)/transpose_generic.Tpo" -c -o transpose_generic.lo `test -f 'intrinsics/transpose_generic.c' || echo '$(srcdir)/'`intrinsics/transpose_generic.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transpose_generic.Tpo" "$(DEPDIR)/transpose_generic.Plo"; else rm -f "$(DEPDIR)/transpose_generic.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/transpose_generic.c' object='transpose_generic.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transpose_generic.lo `test -f 'intrinsics/transpose_generic.c' || echo '$(srcdir)/'`intrinsics/transpose_generic.c + +umask.lo: intrinsics/umask.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT umask.lo -MD -MP -MF "$(DEPDIR)/umask.Tpo" -c -o umask.lo `test -f 'intrinsics/umask.c' || echo '$(srcdir)/'`intrinsics/umask.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/umask.Tpo" "$(DEPDIR)/umask.Plo"; else rm -f "$(DEPDIR)/umask.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/umask.c' object='umask.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o umask.lo `test -f 'intrinsics/umask.c' || echo '$(srcdir)/'`intrinsics/umask.c + +unlink.lo: intrinsics/unlink.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unlink.lo -MD -MP -MF "$(DEPDIR)/unlink.Tpo" -c -o unlink.lo `test -f 'intrinsics/unlink.c' || echo '$(srcdir)/'`intrinsics/unlink.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unlink.Tpo" "$(DEPDIR)/unlink.Plo"; else rm -f "$(DEPDIR)/unlink.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/unlink.c' object='unlink.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unlink.lo `test -f 'intrinsics/unlink.c' || echo '$(srcdir)/'`intrinsics/unlink.c + +unpack_generic.lo: intrinsics/unpack_generic.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unpack_generic.lo -MD -MP -MF "$(DEPDIR)/unpack_generic.Tpo" -c -o unpack_generic.lo `test -f 'intrinsics/unpack_generic.c' || echo '$(srcdir)/'`intrinsics/unpack_generic.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/unpack_generic.Tpo" "$(DEPDIR)/unpack_generic.Plo"; else rm -f "$(DEPDIR)/unpack_generic.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrinsics/unpack_generic.c' object='unpack_generic.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unpack_generic.lo `test -f 'intrinsics/unpack_generic.c' || echo '$(srcdir)/'`intrinsics/unpack_generic.c + +in_pack_generic.lo: runtime/in_pack_generic.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_pack_generic.lo -MD -MP -MF "$(DEPDIR)/in_pack_generic.Tpo" -c -o in_pack_generic.lo `test -f 'runtime/in_pack_generic.c' || echo '$(srcdir)/'`runtime/in_pack_generic.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_pack_generic.Tpo" "$(DEPDIR)/in_pack_generic.Plo"; else rm -f "$(DEPDIR)/in_pack_generic.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/in_pack_generic.c' object='in_pack_generic.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_pack_generic.lo `test -f 'runtime/in_pack_generic.c' || echo '$(srcdir)/'`runtime/in_pack_generic.c + +in_unpack_generic.lo: runtime/in_unpack_generic.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_unpack_generic.lo -MD -MP -MF "$(DEPDIR)/in_unpack_generic.Tpo" -c -o in_unpack_generic.lo `test -f 'runtime/in_unpack_generic.c' || echo '$(srcdir)/'`runtime/in_unpack_generic.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/in_unpack_generic.Tpo" "$(DEPDIR)/in_unpack_generic.Plo"; else rm -f "$(DEPDIR)/in_unpack_generic.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/in_unpack_generic.c' object='in_unpack_generic.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_unpack_generic.lo `test -f 'runtime/in_unpack_generic.c' || echo '$(srcdir)/'`runtime/in_unpack_generic.c + +.f90.o: + $(FCCOMPILE) -c -o $@ $< + +.f90.obj: + $(FCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.f90.lo: + $(LTFCCOMPILE) -c -o $@ $< + +selected_int_kind.lo: intrinsics/selected_int_kind.f90 + $(LIBTOOL) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS) -c -o selected_int_kind.lo `test -f 'intrinsics/selected_int_kind.f90' || echo '$(srcdir)/'`intrinsics/selected_int_kind.f90 + +selected_real_kind.lo: intrinsics/selected_real_kind.f90 + $(LIBTOOL) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS) -c -o selected_real_kind.lo `test -f 'intrinsics/selected_real_kind.f90' || echo '$(srcdir)/'`intrinsics/selected_real_kind.f90 + +dprod_r8.lo: intrinsics/dprod_r8.f90 + $(LIBTOOL) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS) -c -o dprod_r8.lo `test -f 'intrinsics/dprod_r8.f90' || echo '$(srcdir)/'`intrinsics/dprod_r8.f90 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool + +# GNU Make needs to see an explicit $(MAKE) variable in the command it +# runs to enable its job server during parallel builds. Hence the +# comments below. +all-multi: + $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE) +install-multi: + $(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do # $(MAKE) + +mostlyclean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean # $(MAKE) +clean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean # $(MAKE) +distclean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean # $(MAKE) +maintainer-clean-multi: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean # $(MAKE) +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + mkdir $(distdir) + $(mkdir_p) $(distdir)/.. $(distdir)/../config $(distdir)/m4 + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(SHELL) $(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 + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && cd $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' +distuninstallcheck: + @cd $(distuninstallcheck_dir) \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) all-multi config.h +installdirs: + for dir in "$(DESTDIR)$(myexeclibdir)" "$(DESTDIR)$(toolexeclibdir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am clean-multi + +clean-am: clean-generic clean-libtool clean-myexeclibLTLIBRARIES \ + clean-toolexeclibLTLIBRARIES mostlyclean-am + +distclean: distclean-am distclean-multi + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: install-multi install-myexeclibLTLIBRARIES \ + install-toolexeclibLTLIBRARIES + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am maintainer-clean-multi + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am mostlyclean-multi + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am uninstall-myexeclibLTLIBRARIES \ + uninstall-toolexeclibLTLIBRARIES + +.PHONY: CTAGS GTAGS all all-am all-multi am--refresh check check-am \ + clean clean-generic clean-libtool clean-multi \ + clean-myexeclibLTLIBRARIES clean-toolexeclibLTLIBRARIES ctags \ + dist dist-all dist-bzip2 dist-gzip dist-shar dist-tarZ \ + dist-zip distcheck distclean distclean-compile \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-multi distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-multi install-myexeclibLTLIBRARIES install-strip \ + install-toolexeclibLTLIBRARIES installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + maintainer-clean-multi mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool mostlyclean-multi pdf \ + pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am \ + uninstall-myexeclibLTLIBRARIES \ + uninstall-toolexeclibLTLIBRARIES + + +# No install-html or install-pdf support in automake yet +.PHONY: install-html install-pdf +install-html: +install-pdf: + +# Turn on vectorization and loop unrolling for matmul. +$(patsubst %.c,%.lo,$(notdir $(i_matmul_c))): AM_CFLAGS += -ftree-vectorize -funroll-loops +# Logical matmul doesn't vectorize. +$(patsubst %.c,%.lo,$(notdir $(i_matmull_c))): AM_CFLAGS += -funroll-loops + +# Add the -fallow-leading-underscore option when needed +$(patsubst %.F90,%.lo,$(patsubst %.f90,%.lo,$(notdir $(gfor_specific_src)))): AM_FCFLAGS += -fallow-leading-underscore +selected_real_kind.lo selected_int_kind.lo: AM_FCFLAGS += -fallow-leading-underscore +@onestep_TRUE@libgfortran_c.c libgfortran_f.f90 libgfortran_F.F90: +@onestep_TRUE@ echo > $@ +# overrides for libtool perusing the dummy sources +@onestep_TRUE@libgfortran_c.o: $(filter %.c,$(prereq_SRC)) +@onestep_TRUE@ $(COMPILE) -c $^ -o $@ -combine + +@onestep_TRUE@libgfortran_c.lo: $(filter %.c,$(prereq_SRC)) +@onestep_TRUE@ $(LTCOMPILE) -c -o $@ $^ -combine + +kinds.h: $(srcdir)/mk-kinds-h.sh + $(SHELL) $(srcdir)/mk-kinds-h.sh '$(FCCOMPILE)' > $@ || rm $@ + +kinds.inc: kinds.h + grep '^#' < kinds.h > $@ + +c99_protos.inc: $(srcdir)/c99_protos.h + grep '^#' < $(srcdir)/c99_protos.h > $@ + +selected_int_kind.inc: $(srcdir)/mk-sik-inc.sh + $(SHELL) $(srcdir)/mk-sik-inc.sh '$(FCCOMPILE)' > $@ || rm $@ + +selected_real_kind.inc: $(srcdir)/mk-srk-inc.sh + $(SHELL) $(srcdir)/mk-srk-inc.sh '$(FCCOMPILE)' > $@ || rm $@ + +fpu-target.h: $(srcdir)/$(FPU_HOST_HEADER) + cp $(srcdir)/$(FPU_HOST_HEADER) $@ + +@MAINTAINER_MODE_TRUE@$(i_all_c): m4/all.m4 $(I_M4_DEPS2) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 all.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_any_c): m4/any.m4 $(I_M4_DEPS2) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 any.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_count_c): m4/count.m4 $(I_M4_DEPS2) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 count.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_maxloc0_c): m4/maxloc0.m4 $(I_M4_DEPS0) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 maxloc0.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_maxloc1_c): m4/maxloc1.m4 $(I_M4_DEPS1) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 maxloc1.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_maxval_c): m4/maxval.m4 $(I_M4_DEPS1) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 maxval.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_minloc0_c): m4/minloc0.m4 $(I_M4_DEPS0) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 minloc0.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_minloc1_c): m4/minloc1.m4 $(I_M4_DEPS1) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 minloc1.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_minval_c): m4/minval.m4 $(I_M4_DEPS1) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 minval.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_product_c): m4/product.m4 $(I_M4_DEPS1) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 product.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_sum_c): m4/sum.m4 $(I_M4_DEPS1) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 sum.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_matmul_c): m4/matmul.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 matmul.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_matmull_c): m4/matmull.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 matmull.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_transpose_c): m4/transpose.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 transpose.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_shape_c): m4/shape.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 shape.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_reshape_c): m4/reshape.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 reshape.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_eoshift1_c): m4/eoshift1.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 eoshift1.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_eoshift3_c): m4/eoshift3.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 eoshift3.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_cshift0_c): m4/cshift0.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 cshift0.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_cshift1_c): m4/cshift1.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 cshift1.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(in_pack_c): m4/in_pack.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 in_pack.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(in_unpack_c): m4/in_unpack.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 in_unpack.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_exponent_c): m4/exponent.m4 m4/mtype.m4 +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 exponent.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_rrspacing_c): m4/rrspacing.m4 m4/mtype.m4 +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 rrspacing.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_spacing_c): m4/spacing.m4 m4/mtype.m4 +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 spacing.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_fraction_c): m4/fraction.m4 m4/mtype.m4 +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 fraction.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_nearest_c): m4/nearest.m4 m4/mtype.m4 +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 nearest.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_set_exponent_c): m4/set_exponent.m4 m4/mtype.m4 +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 set_exponent.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_pow_c): m4/pow.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 pow.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_pack_c): m4/pack.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 pack.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_unpack_c): m4/unpack.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 unpack.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(i_spread_c): m4/spread.m4 $(I_M4_DEPS) +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 spread.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(gfor_built_specific_src): m4/specific.m4 m4/head.m4 +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 specific.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(gfor_built_specific2_src): m4/specific2.m4 m4/head.m4 +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 specific2.m4 > $@ + +@MAINTAINER_MODE_TRUE@$(gfor_misc_specifics): m4/misc_specifics.m4 m4/head.m4 +@MAINTAINER_MODE_TRUE@ $(M4) -Dfile=$@ -I$(srcdir)/m4 misc_specifics.m4 > $@ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/acinclude.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/acinclude.m4 new file mode 100644 index 0000000000..3355287100 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/acinclude.m4 @@ -0,0 +1,390 @@ +m4_include(../config/acx.m4) +m4_include(../config/no-executables.m4) + +dnl Check that we have a working GNU Fortran compiler +AC_DEFUN([LIBGFOR_WORKING_GFORTRAN], [ +AC_MSG_CHECKING([whether the GNU Fortran compiler is working]) +AC_LANG_PUSH([Fortran]) +AC_COMPILE_IFELSE([[ + program foo + real, parameter :: bar = sin (12.34 / 2.5) + end program foo]], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([GNU Fortran is not working; please report a bug in http://gcc.gnu.org/bugzilla, attaching $PWD/config.log]) + ]) +AC_LANG_POP([Fortran]) +]) + + +sinclude(../libtool.m4) +dnl The lines below arrange for aclocal not to bring an installed +dnl libtool.m4 into aclocal.m4, while still arranging for automake to +dnl add a definition of LIBTOOL to Makefile.in. +ifelse(,,,[AC_SUBST(LIBTOOL) +AC_DEFUN([AM_PROG_LIBTOOL]) +AC_DEFUN([AC_LIBTOOL_DLOPEN]) +AC_DEFUN([AC_PROG_LD]) +]) + +dnl Check whether the target supports hidden visibility. +AC_DEFUN([LIBGFOR_CHECK_ATTRIBUTE_VISIBILITY], [ + AC_CACHE_CHECK([whether the target supports hidden visibility], + libgfor_cv_have_attribute_visibility, [ + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + AC_TRY_COMPILE([void __attribute__((visibility("hidden"))) foo(void) { }], + [], libgfor_cv_have_attribute_visibility=yes, + libgfor_cv_have_attribute_visibility=no) + CFLAGS="$save_CFLAGS"]) + if test $libgfor_cv_have_attribute_visibility = yes; then + AC_DEFINE(HAVE_ATTRIBUTE_VISIBILITY, 1, + [Define to 1 if the target supports __attribute__((visibility(...))).]) + fi]) + +dnl Check whether the target supports dllexport +AC_DEFUN([LIBGFOR_CHECK_ATTRIBUTE_DLLEXPORT], [ + AC_CACHE_CHECK([whether the target supports dllexport], + libgfor_cv_have_attribute_dllexport, [ + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + AC_TRY_COMPILE([void __attribute__((dllexport)) foo(void) { }], + [], libgfor_cv_have_attribute_dllexport=yes, + libgfor_cv_have_attribute_dllexport=no) + CFLAGS="$save_CFLAGS"]) + if test $libgfor_cv_have_attribute_dllexport = yes; then + AC_DEFINE(HAVE_ATTRIBUTE_DLLEXPORT, 1, + [Define to 1 if the target supports __attribute__((dllexport)).]) + fi]) + +dnl Check whether the target supports symbol aliases. +AC_DEFUN([LIBGFOR_CHECK_ATTRIBUTE_ALIAS], [ + AC_CACHE_CHECK([whether the target supports symbol aliases], + libgfor_cv_have_attribute_alias, [ + AC_TRY_LINK([ +void foo(void) { } +extern void bar(void) __attribute__((alias("foo")));], + [bar();], libgfor_cv_have_attribute_alias=yes, libgfor_cv_have_attribute_alias=no)]) + if test $libgfor_cv_have_attribute_alias = yes; then + AC_DEFINE(HAVE_ATTRIBUTE_ALIAS, 1, + [Define to 1 if the target supports __attribute__((alias(...))).]) + fi]) + +dnl Check whether the target supports __sync_fetch_and_add. +AC_DEFUN([LIBGFOR_CHECK_SYNC_FETCH_AND_ADD], [ + AC_CACHE_CHECK([whether the target supports __sync_fetch_and_add], + libgfor_cv_have_sync_fetch_and_add, [ + AC_TRY_LINK([int foovar = 0;], [ +if (foovar <= 0) return __sync_fetch_and_add (&foovar, 1); +if (foovar > 10) return __sync_add_and_fetch (&foovar, -1);], + libgfor_cv_have_sync_fetch_and_add=yes, libgfor_cv_have_sync_fetch_and_add=no)]) + if test $libgfor_cv_have_sync_fetch_and_add = yes; then + AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD, 1, + [Define to 1 if the target supports __sync_fetch_and_add]) + fi]) + +dnl Check if threads are supported. +AC_DEFUN([LIBGFOR_CHECK_GTHR_DEFAULT], [ + AC_CACHE_CHECK([configured target thread model], + libgfor_cv_target_thread_file, [ +libgfor_cv_target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`]) + + if test $libgfor_cv_target_thread_file != single; then + AC_DEFINE(HAVE_GTHR_DEFAULT, 1, + [Define if the compiler has a thread header that is non single.]) + fi]) + +dnl Check for pragma weak. +AC_DEFUN([LIBGFOR_GTHREAD_WEAK], [ + AC_CACHE_CHECK([whether pragma weak works], + libgfor_cv_have_pragma_weak, [ + gfor_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wunknown-pragmas" + AC_TRY_COMPILE([void foo (void); +#pragma weak foo], [if (foo) foo ();], + libgfor_cv_have_pragma_weak=yes, libgfor_cv_have_pragma_weak=no)]) + if test $libgfor_cv_have_pragma_weak = yes; then + AC_DEFINE(SUPPORTS_WEAK, 1, + [Define to 1 if the target supports #pragma weak]) + fi + case "$host" in + *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* ) + AC_DEFINE(GTHREAD_USE_WEAK, 0, + [Define to 0 if the target shouldn't use #pragma weak]) + ;; + esac]) + +dnl Check whether target can unlink a file still open. +AC_DEFUN([LIBGFOR_CHECK_UNLINK_OPEN_FILE], [ + AC_CACHE_CHECK([whether the target can unlink an open file], + libgfor_cv_have_unlink_open_file, [ + AC_TRY_RUN([ +#include +#include +#include +#include + +int main () +{ + int fd; + + fd = open ("testfile", O_RDWR | O_CREAT, S_IWRITE | S_IREAD); + if (fd <= 0) + return 0; + if (unlink ("testfile") == -1) + return 1; + write (fd, "This is a test\n", 15); + close (fd); + + if (open ("testfile", O_RDONLY, S_IWRITE | S_IREAD) == -1 && errno == ENOENT) + return 0; + else + return 1; +}], libgfor_cv_have_unlink_open_file=yes, libgfor_cv_have_unlink_open_file=no, [ +case "${target}" in + *mingw*) libgfor_cv_have_unlink_open_file=no ;; + *) libgfor_cv_have_unlink_open_file=yes;; +esac])]) +if test x"$libgfor_cv_have_unlink_open_file" = xyes; then + AC_DEFINE(HAVE_UNLINK_OPEN_FILE, 1, [Define if target can unlink open files.]) +fi]) + +dnl Check whether CRLF is the line terminator +AC_DEFUN([LIBGFOR_CHECK_CRLF], [ + AC_CACHE_CHECK([whether the target has CRLF as line terminator], + libgfor_cv_have_crlf, [ + AC_TRY_RUN([ +/* This test program should exit with status 0 if system uses a CRLF as + line terminator, and status 1 otherwise. + Since it is used to check for mingw systems, and should return 0 in any + other case, in case of a failure we will not use CRLF. */ +#include +#include +#include +#include + +int main () +{ +#ifndef O_BINARY + exit(1); +#else + int fd, bytes; + char buff[5]; + + fd = open ("foo", O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU); + if (fd < 0) + exit(1); + if (write (fd, "\n", 1) < 0) + perror ("write"); + + close (fd); + + if ((fd = open ("foo", O_RDONLY | O_BINARY, S_IRWXU)) < 0) + exit(1); + bytes = read (fd, buff, 5); + if (bytes == 2 && buff[0] == '\r' && buff[1] == '\n') + exit(0); + else + exit(1); +#endif +}], libgfor_cv_have_crlf=yes, libgfor_cv_have_crlf=no, [ +case "${target}" in + *mingw*) libgfor_cv_have_crlf=yes ;; + *) libgfor_cv_have_crlf=no;; +esac])]) +if test x"$libgfor_cv_have_crlf" = xyes; then + AC_DEFINE(HAVE_CRLF, 1, [Define if CRLF is line terminator.]) +fi]) + +dnl Check whether isfinite is broken. +dnl The most common problem is that it does not work on long doubles. +AC_DEFUN([LIBGFOR_CHECK_FOR_BROKEN_ISFINITE], [ + AC_CACHE_CHECK([whether isfinite is broken], + libgfor_cv_have_broken_isfinite, [ + libgfor_check_for_broken_isfinite_save_LIBS=$LIBS + LIBS="$LIBS -lm" + AC_TRY_RUN([ +#include +#include +int main () +{ +#ifdef isfinite +#ifdef LDBL_MAX + if (!isfinite(LDBL_MAX)) return 1; +#endif +#ifdef DBL_MAX + if (!isfinite(DBL_MAX)) return 1; +#endif +#endif +return 0; +}], libgfor_cv_have_broken_isfinite=no, libgfor_cv_have_broken_isfinite=yes, [ +case "${target}" in + hppa*-*-hpux*) libgfor_cv_have_broken_isfinite=yes ;; + *) libgfor_cv_have_broken_isfinite=no ;; +esac])] + LIBS=$libgfor_check_for_broken_isfinite_save_LIBS) +if test x"$libgfor_cv_have_broken_isfinite" = xyes; then + AC_DEFINE(HAVE_BROKEN_ISFINITE, 1, [Define if isfinite is broken.]) +fi]) + +dnl Check whether isnan is broken. +dnl The most common problem is that it does not work on long doubles. +AC_DEFUN([LIBGFOR_CHECK_FOR_BROKEN_ISNAN], [ + AC_CACHE_CHECK([whether isnan is broken], + libgfor_cv_have_broken_isnan, [ + libgfor_check_for_broken_isnan_save_LIBS=$LIBS + LIBS="$LIBS -lm" + AC_TRY_RUN([ +#include +#include +int main () +{ +#ifdef isnan +#ifdef LDBL_MAX + { + long double x; + x = __builtin_nanl (""); + if (!isnan(x)) return 1; + if (isnan(LDBL_MAX)) return 1; +#ifdef NAN + x = (long double) NAN; + if (!isnan(x)) return 1; +#endif + } +#endif +#ifdef DBL_MAX + { + double y; + y = __builtin_nan (""); + if (!isnan(y)) return 1; + if (isnan(DBL_MAX)) return 1; +#ifdef NAN + y = (double) NAN; + if (!isnan(y)) return 1; +#endif + } +#endif +#endif +return 0; +}], libgfor_cv_have_broken_isnan=no, libgfor_cv_have_broken_isnan=yes, [ +case "${target}" in + hppa*-*-hpux*) libgfor_cv_have_broken_isnan=yes ;; + *) libgfor_cv_have_broken_isnan=no ;; +esac])] + LIBS=$libgfor_check_for_broken_isnan_save_LIBS) +if test x"$libgfor_cv_have_broken_isnan" = xyes; then + AC_DEFINE(HAVE_BROKEN_ISNAN, 1, [Define if isnan is broken.]) +fi]) + +dnl Check whether fpclassify is broken. +dnl The most common problem is that it does not work on long doubles. +AC_DEFUN([LIBGFOR_CHECK_FOR_BROKEN_FPCLASSIFY], [ + AC_CACHE_CHECK([whether fpclassify is broken], + libgfor_cv_have_broken_fpclassify, [ + libgfor_check_for_broken_fpclassify_save_LIBS=$LIBS + LIBS="$LIBS -lm" + AC_TRY_RUN([ +#include +#include +int main () +{ +#ifdef fpclassify +#ifdef LDBL_MAX + if (fpclassify(LDBL_MAX) == FP_NAN + || fpclassify(LDBL_MAX) == FP_INFINITE) return 1; +#endif +#ifdef DBL_MAX + if (fpclassify(DBL_MAX) == FP_NAN + || fpclassify(DBL_MAX) == FP_INFINITE) return 1; +#endif +#endif +return 0; +}], libgfor_cv_have_broken_fpclassify=no, libgfor_cv_have_broken_fpclassify=yes, [ +case "${target}" in + hppa*-*-hpux*) libgfor_cv_have_broken_fpclassify=yes ;; + *) libgfor_cv_have_broken_fpclassify=no ;; +esac])] + LIBS=$libgfor_check_for_broken_fpclassify_save_LIBS) +if test x"$libgfor_cv_have_broken_fpclassify" = xyes; then + AC_DEFINE(HAVE_BROKEN_FPCLASSIFY, 1, [Define if fpclassify is broken.]) +fi]) + +dnl Check whether the st_ino and st_dev stat fields taken together uniquely +dnl identify the file within the system. This is should be true for POSIX +dnl systems; it is known to be false on mingw32. +AC_DEFUN([LIBGFOR_CHECK_WORKING_STAT], [ + AC_CACHE_CHECK([whether the target stat is reliable], + libgfor_cv_have_working_stat, [ + AC_TRY_RUN([ +#include +#include +#include +#include + +int main () +{ + FILE *f, *g; + struct stat st1, st2; + + f = fopen ("foo", "w"); + g = fopen ("bar", "w"); + if (stat ("foo", &st1) != 0 || stat ("bar", &st2)) + return 1; + if (st1.st_dev == st2.st_dev && st1.st_ino == st2.st_ino) + return 1; + fclose(f); + fclose(g); + return 0; +}], libgfor_cv_have_working_stat=yes, libgfor_cv_have_working_stat=no, [ +case "${target}" in + *mingw*) libgfor_cv_have_working_stat=no ;; + *) libgfor_cv_have_working_stat=yes;; +esac])]) +if test x"$libgfor_cv_have_working_stat" = xyes; then + AC_DEFINE(HAVE_WORKING_STAT, 1, [Define if target has a reliable stat.]) +fi]) + +dnl Checks for fpsetmask function. +AC_DEFUN([LIBGFOR_CHECK_FPSETMASK], [ + AC_CACHE_CHECK([whether fpsetmask is present], libgfor_cv_have_fpsetmask, [ + AC_TRY_LINK([ +#if HAVE_FLOATINGPOINT_H +# include +#endif /* HAVE_FLOATINGPOINT_H */ +#if HAVE_IEEEFP_H +# include +#endif /* HAVE_IEEEFP_H */],[fpsetmask(0);], + eval "libgfor_cv_have_fpsetmask=yes", eval "libgfor_cv_have_fpsetmask=no") + ]) + if test x"$libgfor_cv_have_fpsetmask" = xyes; then + AC_DEFINE(HAVE_FPSETMASK, 1, [Define if you have fpsetmask.]) + fi +]) + +dnl Check whether we have a mingw that provides a __mingw_snprintf function +AC_DEFUN([LIBGFOR_CHECK_MINGW_SNPRINTF], [ + AC_CACHE_CHECK([whether __mingw_snprintf is present], libgfor_cv_have_mingw_snprintf, [ + AC_TRY_LINK([ +#include +extern int __mingw_snprintf (char *, size_t, const char *, ...); +],[ +__mingw_snprintf (NULL, 0, "%d\n", 1); +], + eval "libgfor_cv_have_mingw_snprintf=yes", eval "libgfor_cv_have_mingw_snprintf=no") + ]) + if test x"$libgfor_cv_have_mingw_snprintf" = xyes; then + AC_DEFINE(HAVE_MINGW_SNPRINTF, 1, [Define if you have __mingw_snprintf.]) + fi +]) + +dnl Check whether we have a broken powf implementation +AC_DEFUN([LIBGFOR_CHECK_FOR_BROKEN_POWF], [ + AC_CACHE_CHECK([whether powf is broken], libgfor_cv_have_broken_powf, [ +case "${target}" in + hppa*64*-*-hpux*) libgfor_cv_have_broken_powf=yes ;; + *) libgfor_cv_have_broken_powf=no;; +esac]) + if test x"$libgfor_cv_have_broken_powf" = xyes; then + AC_DEFINE(HAVE_BROKEN_POWF, 1, [Define if powf is broken.]) + fi +]) diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/aclocal.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/aclocal.m4 new file mode 100644 index 0000000000..567a2a1ee6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/aclocal.m4 @@ -0,0 +1,869 @@ +# generated automatically by aclocal 1.9.6 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION so it can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], + [AM_AUTOMAKE_VERSION([1.9.6])]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 7 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE]) +AC_SUBST([$1_FALSE]) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH]) +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 3 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 12 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.58])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"$am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +AC_DEFUN([AM_MAINTAINER_MODE], +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + USE_MAINTAINER_MODE=$enableval, + USE_MAINTAINER_MODE=no) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST(MAINT)dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. +# +# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories +# created by `make install' are always world readable, even if the +# installer happens to have an overly restrictive umask (e.g. 077). +# This was a mistake. There are at least two reasons why we must not +# use `-m 0755': +# - it causes special bits like SGID to be ignored, +# - it may be too restrictive (some setups expect 775 directories). +# +# Do not use -m 0755 and let people choose whatever they expect by +# setting umask. +# +# We cannot accept any implementation of `mkdir' that recognizes `-p'. +# Some implementations (such as Solaris 8's) are not thread-safe: if a +# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' +# concurrently, both version can detect that a/ is missing, but only +# one can create it and the other will error out. Consequently we +# restrict ourselves to GNU make (using the --version option ensures +# this.) +AC_DEFUN([AM_PROG_MKDIR_P], +[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + # We used to keeping the `.' as first argument, in order to + # allow $(mkdir_p) to be used without argument. As in + # $(mkdir_p) $(somedir) + # where $(somedir) is conditionally defined. However this is wrong + # for two reasons: + # 1. if the package is installed by a user who cannot write `.' + # make install will fail, + # 2. the above comment should most certainly read + # $(mkdir_p) $(DESTDIR)$(somedir) + # so it does not work when $(somedir) is undefined and + # $(DESTDIR) is not. + # To support the latter case, we have to write + # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), + # so the `.' trick is pointless. + mkdir_p='mkdir -p --' +else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + for d in ./-p ./--version; + do + test -d $d && rmdir $d + done + # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. + if test -f "$ac_aux_dir/mkinstalldirs"; then + mkdir_p='$(mkinstalldirs)' + else + mkdir_p='$(install_sh) -d' + fi +fi +AC_SUBST([mkdir_p])]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([../config/depstand.m4]) +m4_include([../config/lead-dot.m4]) +m4_include([../config/multi.m4]) +m4_include([../config/override.m4]) +m4_include([../config/proginstall.m4]) +m4_include([../config/stdint.m4]) +m4_include([../ltoptions.m4]) +m4_include([../ltsugar.m4]) +m4_include([../ltversion.m4]) +m4_include([../lt~obsolete.m4]) +m4_include([acinclude.m4]) diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/c99_protos.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/c99_protos.h new file mode 100644 index 0000000000..c35816dcef --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/c99_protos.h @@ -0,0 +1,524 @@ +/* Declarations of various C99 functions + Copyright (C) 2004, 2006, 2007, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#ifndef C99_PROTOS_H +#define C99_PROTOS_H 1 + +/* float variants of libm functions */ +#ifndef HAVE_ACOSF +#define HAVE_ACOSF 1 +extern float acosf(float); +#endif + +#if HAVE_ACOSH && !HAVE_ACOSHF +#define HAVE_ACOSHF 1 +extern float acoshf(float); +#endif + +#ifndef HAVE_ASINF +#define HAVE_ASINF 1 +extern float asinf(float); +#endif + +#if HAVE_ASINH && !HAVE_ASINHF +#define HAVE_ASINHF 1 +extern float asinhf(float); +#endif + +#ifndef HAVE_ATAN2F +#define HAVE_ATAN2F 1 +extern float atan2f(float, float); +#endif + +#ifndef HAVE_ATANF +#define HAVE_ATANF 1 +extern float atanf(float); +#endif + +#if HAVE_ATANH && !HAVE_ATANHF +#define HAVE_ATANHF 1 +extern float atanhf(float); +#endif + +#ifndef HAVE_CEILF +#define HAVE_CEILF 1 +extern float ceilf(float); +#endif + +#ifndef HAVE_COPYSIGNF +#define HAVE_COPYSIGNF 1 +extern float copysignf(float, float); +#endif + +#ifndef HAVE_COSF +#define HAVE_COSF 1 +extern float cosf(float); +#endif + +#ifndef HAVE_COSHF +#define HAVE_COSHF 1 +extern float coshf(float); +#endif + +#ifndef HAVE_EXPF +#define HAVE_EXPF 1 +extern float expf(float); +#endif + +#ifndef HAVE_FABSF +#define HAVE_FABSF 1 +extern float fabsf(float); +#endif + +#ifndef HAVE_FLOORF +#define HAVE_FLOORF 1 +extern float floorf(float); +#endif + +#ifndef HAVE_FLOORL +#define HAVE_FLOORL 1 +extern long double floorl (long double x); +#endif + +#ifndef HAVE_FMODF +#define HAVE_FMODF 1 +extern float fmodf (float x, float y); +#endif + +#ifndef HAVE_FMODL +#define HAVE_FMODL 1 +extern long double fmodl (long double x, long double y); +#endif + +#ifndef HAVE_FREXPF +#define HAVE_FREXPF 1 +extern float frexpf(float, int *); +#endif + +#ifndef HAVE_HYPOTF +#define HAVE_HYPOTF 1 +extern float hypotf(float, float); +#endif + +#ifndef HAVE_LOGF +#define HAVE_LOGF 1 +extern float logf(float); +#endif + +#ifndef HAVE_LOG10F +#define HAVE_LOG10F 1 +extern float log10f(float); +#endif + +#ifndef HAVE_SCALBN +#define HAVE_SCALBN 1 +extern double scalbn(double, int); +#endif + +#ifndef HAVE_SCALBNF +#define HAVE_SCALBNF 1 +extern float scalbnf(float, int); +#endif + +#ifndef HAVE_SINF +#define HAVE_SINF 1 +extern float sinf(float); +#endif + +#ifndef HAVE_SINHF +#define HAVE_SINHF 1 +extern float sinhf(float); +#endif + +#ifndef HAVE_SQRTF +#define HAVE_SQRTF 1 +extern float sqrtf(float); +#endif + +#ifndef HAVE_TANF +#define HAVE_TANF 1 +extern float tanf(float); +#endif + +#ifndef HAVE_TANHF +#define HAVE_TANHF 1 +extern float tanhf(float); +#endif + +#ifndef HAVE_TRUNC +#define HAVE_TRUNC 1 +extern double trunc(double); +#endif + +#ifndef HAVE_TRUNCF +#define HAVE_TRUNCF 1 +extern float truncf(float); +#endif + +#ifndef HAVE_NEXTAFTERF +#define HAVE_NEXTAFTERF 1 +extern float nextafterf(float, float); +#endif + +#ifndef HAVE_POWF +#define HAVE_POWF 1 +extern float powf(float, float); +#endif + +#ifndef HAVE_ROUND +#define HAVE_ROUND 1 +extern double round(double); +#endif + +#ifndef HAVE_ROUNDF +#define HAVE_ROUNDF 1 +extern float roundf(float); +#endif + +#if !defined(HAVE_ROUNDL) +#define HAVE_ROUNDL 1 +extern long double roundl(long double); +#endif + + + +#if !defined(HAVE_LROUNDF) && defined(HAVE_ROUNDF) +#define HAVE_LROUNDF 1 +long int lroundf (float); +#endif + +#if !defined(HAVE_LROUND) && defined(HAVE_ROUND) +#define HAVE_LROUND 1 +long int lround (double); +#endif + +#if !defined(HAVE_LROUNDL) && defined(HAVE_ROUNDL) +#define HAVE_LROUNDL 1 +long int lroundl (long double); +#endif + +#if !defined(HAVE_LLROUNDF) && defined(HAVE_ROUNDF) +#define HAVE_LLROUNDF 1 +long long int llroundf (float); +#endif + +#if !defined(HAVE_LLROUND) && defined(HAVE_ROUND) +#define HAVE_LLROUND 1 +long long int llround (double); +#endif + +#if !defined(HAVE_LLROUNDL) && defined(HAVE_ROUNDL) +#define HAVE_LLROUNDL 1 +long long int llroundl (long double); +#endif + +/* Wrappers for systems without the various C99 single precision Bessel + functions. */ + +#if defined(HAVE_J0) && ! defined(HAVE_J0F) +#define HAVE_J0F 1 +extern float j0f (float); +#endif + +#if defined(HAVE_J1) && !defined(HAVE_J1F) +#define HAVE_J1F 1 +extern float j1f (float); +#endif + +#if defined(HAVE_JN) && !defined(HAVE_JNF) +#define HAVE_JNF 1 +extern float jnf (int, float); +#endif + +#if defined(HAVE_Y0) && !defined(HAVE_Y0F) +#define HAVE_Y0F 1 +extern float y0f (float); +#endif + +#if defined(HAVE_Y1) && !defined(HAVE_Y1F) +#define HAVE_Y1F 1 +extern float y1f (float); +#endif + +#if defined(HAVE_YN) && !defined(HAVE_YNF) +#define HAVE_YNF 1 +extern float ynf (int, float); +#endif + + +/* Wrappers for systems without the C99 erff() and erfcf() functions. */ + +#if defined(HAVE_ERF) && !defined(HAVE_ERFF) +#define HAVE_ERFF 1 +extern float erff (float); +#endif + +#if defined(HAVE_ERFC) && !defined(HAVE_ERFCF) +#define HAVE_ERFCF 1 +extern float erfcf (float); +#endif + + + +/* log10l is needed on all platforms for decimal I/O */ +#ifndef HAVE_LOG10L +#define HAVE_LOG10L 1 +extern long double log10l(long double); +#endif + + +/* complex math functions */ + +#if !defined(HAVE_CABSF) +#define HAVE_CABSF 1 +extern float cabsf (float complex); +#endif + +#if !defined(HAVE_CABS) +#define HAVE_CABS 1 +extern double cabs (double complex); +#endif + +#if !defined(HAVE_CABSL) && defined(HAVE_HYPOTL) +#define HAVE_CABSL 1 +extern long double cabsl (long double complex); +#endif + + +#if !defined(HAVE_CARGF) +#define HAVE_CARGF 1 +extern float cargf (float complex); +#endif + +#if !defined(HAVE_CARG) +#define HAVE_CARG 1 +extern double carg (double complex); +#endif + +#if !defined(HAVE_CARGL) && defined(HAVE_ATAN2L) +#define HAVE_CARGL 1 +extern long double cargl (long double complex); +#endif + + +#if !defined(HAVE_CEXPF) +#define HAVE_CEXPF 1 +extern float complex cexpf (float complex); +#endif + +#if !defined(HAVE_CEXP) +#define HAVE_CEXP 1 +extern double complex cexp (double complex); +#endif + +#if !defined(HAVE_CEXPL) && defined(HAVE_COSL) && defined(HAVE_SINL) && defined(EXPL) +#define HAVE_CEXPL 1 +extern long double complex cexpl (long double complex); +#endif + + +#if !defined(HAVE_CLOGF) +#define HAVE_CLOGF 1 +extern float complex clogf (float complex); +#endif + +#if !defined(HAVE_CLOG) +#define HAVE_CLOG 1 +extern double complex clog (double complex); +#endif + +#if !defined(HAVE_CLOGL) && defined(HAVE_LOGL) && defined(HAVE_CABSL) && defined(HAVE_CARGL) +#define HAVE_CLOGL 1 +extern long double complex clogl (long double complex); +#endif + + +#if !defined(HAVE_CLOG10F) +#define HAVE_CLOG10F 1 +extern float complex clog10f (float complex); +#endif + +#if !defined(HAVE_CLOG10) +#define HAVE_CLOG10 1 +extern double complex clog10 (double complex); +#endif + +#if !defined(HAVE_CLOG10L) && defined(HAVE_LOG10L) && defined(HAVE_CABSL) && defined(HAVE_CARGL) +#define HAVE_CLOG10L 1 +extern long double complex clog10l (long double complex); +#endif + + +#if !defined(HAVE_CPOWF) +#define HAVE_CPOWF 1 +extern float complex cpowf (float complex, float complex); +#endif + +#if !defined(HAVE_CPOW) +#define HAVE_CPOW 1 +extern double complex cpow (double complex, double complex); +#endif + +#if !defined(HAVE_CPOWL) && defined(HAVE_CEXPL) && defined(HAVE_CLOGL) +#define HAVE_CPOWL 1 +extern long double complex cpowl (long double complex, long double complex); +#endif + + +#if !defined(HAVE_CSQRTF) +#define HAVE_CSQRTF 1 +extern float complex csqrtf (float complex); +#endif + +#if !defined(HAVE_CSQRT) +#define HAVE_CSQRT 1 +extern double complex csqrt (double complex); +#endif + +#if !defined(HAVE_CSQRTL) && defined(HAVE_COPYSIGNL) && defined(HAVE_SQRTL) && defined(HAVE_FABSL) && defined(HAVE_HYPOTL) +#define HAVE_CSQRTL 1 +extern long double complex csqrtl (long double complex); +#endif + + +#if !defined(HAVE_CSINHF) +#define HAVE_CSINHF 1 +extern float complex csinhf (float complex); +#endif + +#if !defined(HAVE_CSINH) +#define HAVE_CSINH 1 +extern double complex csinh (double complex); +#endif + +#if !defined(HAVE_CSINHL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL) +#define HAVE_CSINHL 1 +extern long double complex csinhl (long double complex); +#endif + + +#if !defined(HAVE_CCOSHF) +#define HAVE_CCOSHF 1 +extern float complex ccoshf (float complex); +#endif + +#if !defined(HAVE_CCOSH) +#define HAVE_CCOSH 1 +extern double complex ccosh (double complex); +#endif + +#if !defined(HAVE_CCOSHL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL) +#define HAVE_CCOSHL 1 +extern long double complex ccoshl (long double complex); +#endif + + +#if !defined(HAVE_CTANHF) +#define HAVE_CTANHF 1 +extern float complex ctanhf (float complex); +#endif + +#if !defined(HAVE_CTANH) +#define HAVE_CTANH 1 +extern double complex ctanh (double complex); +#endif + +#if !defined(HAVE_CTANHL) && defined(HAVE_TANL) && defined(HAVE_TANHL) +#define HAVE_CTANHL 1 +extern long double complex ctanhl (long double complex); +#endif + + +#if !defined(HAVE_CSINF) +#define HAVE_CSINF 1 +extern float complex csinf (float complex); +#endif + +#if !defined(HAVE_CSIN) +#define HAVE_CSIN 1 +extern double complex csin (double complex); +#endif + +#if !defined(HAVE_CSINL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL) +#define HAVE_CSINL 1 +extern long double complex csinl (long double complex); +#endif + + +#if !defined(HAVE_CCOSF) +#define HAVE_CCOSF 1 +extern float complex ccosf (float complex); +#endif + +#if !defined(HAVE_CCOS) +#define HAVE_CCOS 1 +extern double complex ccos (double complex); +#endif + +#if !defined(HAVE_CCOSL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL) +#define HAVE_CCOSL 1 +extern long double complex ccosl (long double complex); +#endif + + +#if !defined(HAVE_CTANF) +#define HAVE_CTANF 1 +extern float complex ctanf (float complex); +#endif + +#if !defined(HAVE_CTAN) +#define HAVE_CTAN 1 +extern double complex ctan (double complex); +#endif + +#if !defined(HAVE_CTANL) && defined(HAVE_TANL) && defined(HAVE_TANHL) +#define HAVE_CTANL 1 +extern long double complex ctanl (long double complex); +#endif + + +/* Gamma-related prototypes. */ +#if !defined(HAVE_TGAMMA) +#define HAVE_TGAMMA 1 +extern double tgamma (double); +#endif + +#if !defined(HAVE_LGAMMA) +#define HAVE_LGAMMA 1 +extern double lgamma (double); +#endif + +#if defined(HAVE_TGAMMA) && !defined(HAVE_TGAMMAF) +#define HAVE_TGAMMAF 1 +extern float tgammaf (float); +#endif + +#if defined(HAVE_LGAMMA) && !defined(HAVE_LGAMMAF) +#define HAVE_LGAMMAF 1 +extern float lgammaf (float); +#endif + + +#endif /* C99_PROTOS_H */ + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config.h.in b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config.h.in new file mode 100644 index 0000000000..3542638b0c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config.h.in @@ -0,0 +1,845 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 0 if the target shouldn't use #pragma weak */ +#undef GTHREAD_USE_WEAK + +/* Define to 1 if you have the `access' function. */ +#undef HAVE_ACCESS + +/* libm includes acos */ +#undef HAVE_ACOS + +/* libm includes acosf */ +#undef HAVE_ACOSF + +/* libm includes acosh */ +#undef HAVE_ACOSH + +/* libm includes acoshf */ +#undef HAVE_ACOSHF + +/* libm includes acoshl */ +#undef HAVE_ACOSHL + +/* libm includes acosl */ +#undef HAVE_ACOSL + +/* Define to 1 if you have the `alarm' function. */ +#undef HAVE_ALARM + +/* libm includes asin */ +#undef HAVE_ASIN + +/* libm includes asinf */ +#undef HAVE_ASINF + +/* libm includes asinh */ +#undef HAVE_ASINH + +/* libm includes asinhf */ +#undef HAVE_ASINHF + +/* libm includes asinhl */ +#undef HAVE_ASINHL + +/* libm includes asinl */ +#undef HAVE_ASINL + +/* libm includes atan */ +#undef HAVE_ATAN + +/* libm includes atan2 */ +#undef HAVE_ATAN2 + +/* libm includes atan2f */ +#undef HAVE_ATAN2F + +/* libm includes atan2l */ +#undef HAVE_ATAN2L + +/* libm includes atanf */ +#undef HAVE_ATANF + +/* libm includes atanh */ +#undef HAVE_ATANH + +/* libm includes atanhf */ +#undef HAVE_ATANHF + +/* libm includes atanhl */ +#undef HAVE_ATANHL + +/* libm includes atanl */ +#undef HAVE_ATANL + +/* Define to 1 if the target supports __attribute__((alias(...))). */ +#undef HAVE_ATTRIBUTE_ALIAS + +/* Define to 1 if the target supports __attribute__((dllexport)). */ +#undef HAVE_ATTRIBUTE_DLLEXPORT + +/* Define to 1 if the target supports __attribute__((visibility(...))). */ +#undef HAVE_ATTRIBUTE_VISIBILITY + +/* Define to 1 if you have the `backtrace' function. */ +#undef HAVE_BACKTRACE + +/* Define to 1 if you have the `backtrace_symbols' function. */ +#undef HAVE_BACKTRACE_SYMBOLS + +/* Define if fpclassify is broken. */ +#undef HAVE_BROKEN_FPCLASSIFY + +/* Define if isfinite is broken. */ +#undef HAVE_BROKEN_ISFINITE + +/* Define if isnan is broken. */ +#undef HAVE_BROKEN_ISNAN + +/* Define if powf is broken. */ +#undef HAVE_BROKEN_POWF + +/* libm includes cabs */ +#undef HAVE_CABS + +/* libm includes cabsf */ +#undef HAVE_CABSF + +/* libm includes cabsl */ +#undef HAVE_CABSL + +/* libm includes carg */ +#undef HAVE_CARG + +/* libm includes cargf */ +#undef HAVE_CARGF + +/* libm includes cargl */ +#undef HAVE_CARGL + +/* libm includes ccos */ +#undef HAVE_CCOS + +/* libm includes ccosf */ +#undef HAVE_CCOSF + +/* libm includes ccosh */ +#undef HAVE_CCOSH + +/* libm includes ccoshf */ +#undef HAVE_CCOSHF + +/* libm includes ccoshl */ +#undef HAVE_CCOSHL + +/* libm includes ccosl */ +#undef HAVE_CCOSL + +/* libm includes ceil */ +#undef HAVE_CEIL + +/* libm includes ceilf */ +#undef HAVE_CEILF + +/* libm includes ceill */ +#undef HAVE_CEILL + +/* libm includes cexp */ +#undef HAVE_CEXP + +/* libm includes cexpf */ +#undef HAVE_CEXPF + +/* libm includes cexpl */ +#undef HAVE_CEXPL + +/* Define to 1 if you have the `chdir' function. */ +#undef HAVE_CHDIR + +/* Define to 1 if you have the `chsize' function. */ +#undef HAVE_CHSIZE + +/* Define to 1 if you have the `clock' function. */ +#undef HAVE_CLOCK + +/* libm includes clog */ +#undef HAVE_CLOG + +/* libm includes clog10 */ +#undef HAVE_CLOG10 + +/* libm includes clog10f */ +#undef HAVE_CLOG10F + +/* libm includes clog10l */ +#undef HAVE_CLOG10L + +/* libm includes clogf */ +#undef HAVE_CLOGF + +/* libm includes clogl */ +#undef HAVE_CLOGL + +/* Define to 1 if you have the `close' function. */ +#undef HAVE_CLOSE + +/* complex.h exists */ +#undef HAVE_COMPLEX_H + +/* libm includes copysign */ +#undef HAVE_COPYSIGN + +/* libm includes copysignf */ +#undef HAVE_COPYSIGNF + +/* libm includes copysignl */ +#undef HAVE_COPYSIGNL + +/* libm includes cos */ +#undef HAVE_COS + +/* libm includes cosf */ +#undef HAVE_COSF + +/* libm includes cosh */ +#undef HAVE_COSH + +/* libm includes coshf */ +#undef HAVE_COSHF + +/* libm includes coshl */ +#undef HAVE_COSHL + +/* libm includes cosl */ +#undef HAVE_COSL + +/* libm includes cpow */ +#undef HAVE_CPOW + +/* libm includes cpowf */ +#undef HAVE_CPOWF + +/* libm includes cpowl */ +#undef HAVE_CPOWL + +/* Define if CRLF is line terminator. */ +#undef HAVE_CRLF + +/* libm includes csin */ +#undef HAVE_CSIN + +/* libm includes csinf */ +#undef HAVE_CSINF + +/* libm includes csinh */ +#undef HAVE_CSINH + +/* libm includes csinhf */ +#undef HAVE_CSINHF + +/* libm includes csinhl */ +#undef HAVE_CSINHL + +/* libm includes csinl */ +#undef HAVE_CSINL + +/* libm includes csqrt */ +#undef HAVE_CSQRT + +/* libm includes csqrtf */ +#undef HAVE_CSQRTF + +/* libm includes csqrtl */ +#undef HAVE_CSQRTL + +/* libm includes ctan */ +#undef HAVE_CTAN + +/* libm includes ctanf */ +#undef HAVE_CTANF + +/* libm includes ctanh */ +#undef HAVE_CTANH + +/* libm includes ctanhf */ +#undef HAVE_CTANHF + +/* libm includes ctanhl */ +#undef HAVE_CTANHL + +/* libm includes ctanl */ +#undef HAVE_CTANL + +/* Define to 1 if you have the `ctime' function. */ +#undef HAVE_CTIME + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the `dup' function. */ +#undef HAVE_DUP + +/* Define to 1 if you have the `dup2' function. */ +#undef HAVE_DUP2 + +/* libm includes erf */ +#undef HAVE_ERF + +/* libm includes erfc */ +#undef HAVE_ERFC + +/* libm includes erfcf */ +#undef HAVE_ERFCF + +/* libm includes erfcl */ +#undef HAVE_ERFCL + +/* libm includes erff */ +#undef HAVE_ERFF + +/* libm includes erfl */ +#undef HAVE_ERFL + +/* Define to 1 if you have the header file. */ +#undef HAVE_EXECINFO_H + +/* Define to 1 if you have the `execl' function. */ +#undef HAVE_EXECL + +/* Define to 1 if you have the `execvp' function. */ +#undef HAVE_EXECVP + +/* libm includes exp */ +#undef HAVE_EXP + +/* libm includes expf */ +#undef HAVE_EXPF + +/* libm includes expl */ +#undef HAVE_EXPL + +/* libm includes fabs */ +#undef HAVE_FABS + +/* libm includes fabsf */ +#undef HAVE_FABSF + +/* libm includes fabsl */ +#undef HAVE_FABSL + +/* Define to 1 if you have the `fdopen' function. */ +#undef HAVE_FDOPEN + +/* libm includes feenableexcept */ +#undef HAVE_FEENABLEEXCEPT + +/* Define to 1 if you have the header file. */ +#undef HAVE_FENV_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_FLOATINGPOINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_FLOAT_H + +/* libm includes floor */ +#undef HAVE_FLOOR + +/* libm includes floorf */ +#undef HAVE_FLOORF + +/* libm includes floorl */ +#undef HAVE_FLOORL + +/* libm includes fmod */ +#undef HAVE_FMOD + +/* libm includes fmodf */ +#undef HAVE_FMODF + +/* libm includes fmodl */ +#undef HAVE_FMODL + +/* Define to 1 if you have the `fork' function. */ +#undef HAVE_FORK + +/* Define if you have fpsetmask. */ +#undef HAVE_FPSETMASK + +/* Define to 1 if you have the header file. */ +#undef HAVE_FPTRAP_H + +/* fp_enable is present */ +#undef HAVE_FP_ENABLE + +/* fp_trap is present */ +#undef HAVE_FP_TRAP + +/* libm includes frexp */ +#undef HAVE_FREXP + +/* libm includes frexpf */ +#undef HAVE_FREXPF + +/* libm includes frexpl */ +#undef HAVE_FREXPL + +/* Define to 1 if you have the `fstat' function. */ +#undef HAVE_FSTAT + +/* Define to 1 if you have the `ftruncate' function. */ +#undef HAVE_FTRUNCATE + +/* Define to 1 if you have the `getcwd' function. */ +#undef HAVE_GETCWD + +/* libc includes geteuid */ +#undef HAVE_GETEUID + +/* libc includes getgid */ +#undef HAVE_GETGID + +/* Define to 1 if you have the `gethostname' function. */ +#undef HAVE_GETHOSTNAME + +/* Define to 1 if you have the `getlogin' function. */ +#undef HAVE_GETLOGIN + +/* libc includes getpid */ +#undef HAVE_GETPID + +/* libc includes getppid */ +#undef HAVE_GETPPID + +/* Define to 1 if you have the `getpwuid' function. */ +#undef HAVE_GETPWUID + +/* Define to 1 if you have the `getrlimit' function. */ +#undef HAVE_GETRLIMIT + +/* Define to 1 if you have the `getrusage' function. */ +#undef HAVE_GETRUSAGE + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* libc includes getuid */ +#undef HAVE_GETUID + +/* Define if the compiler has a thread header that is non single. */ +#undef HAVE_GTHR_DEFAULT + +/* libm includes hypot */ +#undef HAVE_HYPOT + +/* libm includes hypotf */ +#undef HAVE_HYPOTF + +/* libm includes hypotl */ +#undef HAVE_HYPOTL + +/* Define to 1 if you have the header file. */ +#undef HAVE_IEEEFP_H + +/* Define to 1 if the system has the type `intptr_t'. */ +#undef HAVE_INTPTR_T + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* libm includes j0 */ +#undef HAVE_J0 + +/* libm includes j0f */ +#undef HAVE_J0F + +/* libm includes j0l */ +#undef HAVE_J0L + +/* libm includes j1 */ +#undef HAVE_J1 + +/* libm includes j1f */ +#undef HAVE_J1F + +/* libm includes j1l */ +#undef HAVE_J1L + +/* libm includes jn */ +#undef HAVE_JN + +/* libm includes jnf */ +#undef HAVE_JNF + +/* libm includes jnl */ +#undef HAVE_JNL + +/* Define to 1 if you have the `kill' function. */ +#undef HAVE_KILL + +/* libm includes ldexp */ +#undef HAVE_LDEXP + +/* libm includes ldexpf */ +#undef HAVE_LDEXPF + +/* libm includes ldexpl */ +#undef HAVE_LDEXPL + +/* libm includes lgamma */ +#undef HAVE_LGAMMA + +/* libm includes lgammaf */ +#undef HAVE_LGAMMAF + +/* libm includes lgammal */ +#undef HAVE_LGAMMAL + +/* Define to 1 if you have the `link' function. */ +#undef HAVE_LINK + +/* libm includes llround */ +#undef HAVE_LLROUND + +/* libm includes llroundf */ +#undef HAVE_LLROUNDF + +/* libm includes llroundl */ +#undef HAVE_LLROUNDL + +/* libm includes log */ +#undef HAVE_LOG + +/* libm includes log10 */ +#undef HAVE_LOG10 + +/* libm includes log10f */ +#undef HAVE_LOG10F + +/* libm includes log10l */ +#undef HAVE_LOG10L + +/* libm includes logf */ +#undef HAVE_LOGF + +/* libm includes logl */ +#undef HAVE_LOGL + +/* libm includes lround */ +#undef HAVE_LROUND + +/* libm includes lroundf */ +#undef HAVE_LROUNDF + +/* libm includes lroundl */ +#undef HAVE_LROUNDL + +/* Define to 1 if you have the `lstat' function. */ +#undef HAVE_LSTAT + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define if you have __mingw_snprintf. */ +#undef HAVE_MINGW_SNPRINTF + +/* Define to 1 if you have the `mkstemp' function. */ +#undef HAVE_MKSTEMP + +/* libm includes nextafter */ +#undef HAVE_NEXTAFTER + +/* libm includes nextafterf */ +#undef HAVE_NEXTAFTERF + +/* libm includes nextafterl */ +#undef HAVE_NEXTAFTERL + +/* Define to 1 if you have the `perror' function. */ +#undef HAVE_PERROR + +/* Define to 1 if you have the `pipe' function. */ +#undef HAVE_PIPE + +/* libm includes pow */ +#undef HAVE_POW + +/* libm includes powf */ +#undef HAVE_POWF + +/* libm includes powl */ +#undef HAVE_POWL + +/* Define to 1 if you have the header file. */ +#undef HAVE_PWD_H + +/* libm includes round */ +#undef HAVE_ROUND + +/* libm includes roundf */ +#undef HAVE_ROUNDF + +/* libm includes roundl */ +#undef HAVE_ROUNDL + +/* libm includes scalbn */ +#undef HAVE_SCALBN + +/* libm includes scalbnf */ +#undef HAVE_SCALBNF + +/* libm includes scalbnl */ +#undef HAVE_SCALBNL + +/* Define to 1 if you have the `setmode' function. */ +#undef HAVE_SETMODE + +/* Define to 1 if you have the `signal' function. */ +#undef HAVE_SIGNAL + +/* Define to 1 if you have the header file. */ +#undef HAVE_SIGNAL_H + +/* libm includes sin */ +#undef HAVE_SIN + +/* libm includes sinf */ +#undef HAVE_SINF + +/* libm includes sinh */ +#undef HAVE_SINH + +/* libm includes sinhf */ +#undef HAVE_SINHF + +/* libm includes sinhl */ +#undef HAVE_SINHL + +/* libm includes sinl */ +#undef HAVE_SINL + +/* Define to 1 if you have the `sleep' function. */ +#undef HAVE_SLEEP + +/* Define to 1 if you have the `snprintf' function. */ +#undef HAVE_SNPRINTF + +/* libm includes sqrt */ +#undef HAVE_SQRT + +/* libm includes sqrtf */ +#undef HAVE_SQRTF + +/* libm includes sqrtl */ +#undef HAVE_SQRTL + +/* Define to 1 if you have the `stat' function. */ +#undef HAVE_STAT + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDARG_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDIO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strcasestr' function. */ +#undef HAVE_STRCASESTR + +/* Define to 1 if you have the `strerror' function. */ +#undef HAVE_STRERROR + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strtof' function. */ +#undef HAVE_STRTOF + +/* Define to 1 if you have the `strtold' function. */ +#undef HAVE_STRTOLD + +/* Define to 1 if `st_blksize' is member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_BLKSIZE + +/* Define to 1 if `st_blocks' is member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_BLOCKS + +/* Define to 1 if `st_rdev' is member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_RDEV + +/* Define to 1 if you have the `symlink' function. */ +#undef HAVE_SYMLINK + +/* Define to 1 if the target supports __sync_fetch_and_add */ +#undef HAVE_SYNC_FETCH_AND_ADD + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_RESOURCE_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIMES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_WAIT_H + +/* libm includes tan */ +#undef HAVE_TAN + +/* libm includes tanf */ +#undef HAVE_TANF + +/* libm includes tanh */ +#undef HAVE_TANH + +/* libm includes tanhf */ +#undef HAVE_TANHF + +/* libm includes tanhl */ +#undef HAVE_TANHL + +/* libm includes tanl */ +#undef HAVE_TANL + +/* libm includes tgamma */ +#undef HAVE_TGAMMA + +/* libm includes tgammaf */ +#undef HAVE_TGAMMAF + +/* libm includes tgammal */ +#undef HAVE_TGAMMAL + +/* Define to 1 if you have the `time' function. */ +#undef HAVE_TIME + +/* Define to 1 if you have the `times' function. */ +#undef HAVE_TIMES + +/* Define to 1 if you have the header file. */ +#undef HAVE_TIME_H + +/* libm includes trunc */ +#undef HAVE_TRUNC + +/* libm includes truncf */ +#undef HAVE_TRUNCF + +/* libm includes truncl */ +#undef HAVE_TRUNCL + +/* Define to 1 if you have the `ttyname' function. */ +#undef HAVE_TTYNAME + +/* Define to 1 if the system has the type `uintptr_t'. */ +#undef HAVE_UINTPTR_T + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define if target can unlink open files. */ +#undef HAVE_UNLINK_OPEN_FILE + +/* Define to 1 if you have the `vsnprintf' function. */ +#undef HAVE_VSNPRINTF + +/* Define to 1 if you have the `wait' function. */ +#undef HAVE_WAIT + +/* Define if target has a reliable stat. */ +#undef HAVE_WORKING_STAT + +/* libm includes y0 */ +#undef HAVE_Y0 + +/* libm includes y0f */ +#undef HAVE_Y0F + +/* libm includes y0l */ +#undef HAVE_Y0L + +/* libm includes y1 */ +#undef HAVE_Y1 + +/* libm includes y1f */ +#undef HAVE_Y1F + +/* libm includes y1l */ +#undef HAVE_Y1L + +/* libm includes yn */ +#undef HAVE_YN + +/* libm includes ynf */ +#undef HAVE_YNF + +/* libm includes ynl */ +#undef HAVE_YNL + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* The size of a `char', as computed by sizeof. */ +#undef SIZEOF_CHAR + +/* The size of a `int', as computed by sizeof. */ +#undef SIZEOF_INT + +/* The size of a `long', as computed by sizeof. */ +#undef SIZEOF_LONG + +/* The size of a `short', as computed by sizeof. */ +#undef SIZEOF_SHORT + +/* The size of a `void *', as computed by sizeof. */ +#undef SIZEOF_VOID_P + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if the target supports #pragma weak */ +#undef SUPPORTS_WEAK + +/* Define to 1 if you can safely include both and . */ +#undef TIME_WITH_SYS_TIME + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to `long' if does not define. */ +#undef off_t diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/.DS_Store b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..257d88cda3963b5021032f3d917274d87ac602ab GIT binary patch literal 6148 zcmeHKO-lnY5Phi?T8mITd5k|mK|JVjDfQslyXe+WSgcqodJy*4`M2~UNnGJw2SzaFkV*mrXU~kBx!=zulWj%{*5<_~%5l(Q71Kgigt+A* zQO2yuDZ5x{h40x4w;I+0Z&=`^VtSyfq$U@bGF!Er0At9;0m|`jRJB$ zM7m&MSSzNZgGIUm5c>=#V_kk2g%b@6!&;F&w4hX?QiEMFg3=j}Hm)$N6_t))mycjG z2fLw!G&`Rk({O}B(Mwmr6pn2f6x8wx8a6?3el;$3<&#-mh-g<-A82+e;4k_=wB0zaz27i}z1Q2+n{ literal 0 HcmV?d00001 diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-387.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-387.h new file mode 100644 index 0000000000..573fabcac6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-387.h @@ -0,0 +1,90 @@ +/* FPU-related code for x86 and x86_64 processors. + Copyright 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Francois-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#ifndef __x86_64__ +#include "cpuid.h" +#endif + +static int +has_sse (void) +{ +#ifndef __x86_64__ + unsigned int eax, ebx, ecx, edx; + + if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) + return 0; + + return edx & bit_SSE; +#else + return 1; +#endif +} + +/* i387 -- see linux header file for details. */ +#define _FPU_MASK_IM 0x01 +#define _FPU_MASK_DM 0x02 +#define _FPU_MASK_ZM 0x04 +#define _FPU_MASK_OM 0x08 +#define _FPU_MASK_UM 0x10 +#define _FPU_MASK_PM 0x20 + +void set_fpu (void) +{ + unsigned short cw; + + asm volatile ("fnstcw %0" : "=m" (cw)); + + cw |= (_FPU_MASK_IM | _FPU_MASK_DM | _FPU_MASK_ZM | _FPU_MASK_OM + | _FPU_MASK_UM | _FPU_MASK_PM); + + if (options.fpe & GFC_FPE_INVALID) cw &= ~_FPU_MASK_IM; + if (options.fpe & GFC_FPE_DENORMAL) cw &= ~_FPU_MASK_DM; + if (options.fpe & GFC_FPE_ZERO) cw &= ~_FPU_MASK_ZM; + if (options.fpe & GFC_FPE_OVERFLOW) cw &= ~_FPU_MASK_OM; + if (options.fpe & GFC_FPE_UNDERFLOW) cw &= ~_FPU_MASK_UM; + if (options.fpe & GFC_FPE_PRECISION) cw &= ~_FPU_MASK_PM; + + asm volatile ("fldcw %0" : : "m" (cw)); + + if (has_sse()) + { + unsigned int cw_sse; + + asm volatile ("stmxcsr %0" : "=m" (cw_sse)); + + cw_sse &= 0xffff0000; + cw_sse |= (_FPU_MASK_IM | _FPU_MASK_DM | _FPU_MASK_ZM | _FPU_MASK_OM + | _FPU_MASK_UM | _FPU_MASK_PM ) << 7; + + if (options.fpe & GFC_FPE_INVALID) cw_sse &= ~(_FPU_MASK_IM << 7); + if (options.fpe & GFC_FPE_DENORMAL) cw_sse &= ~(_FPU_MASK_DM << 7); + if (options.fpe & GFC_FPE_ZERO) cw_sse &= ~(_FPU_MASK_ZM << 7); + if (options.fpe & GFC_FPE_OVERFLOW) cw_sse &= ~(_FPU_MASK_OM << 7); + if (options.fpe & GFC_FPE_UNDERFLOW) cw_sse &= ~(_FPU_MASK_UM << 7); + if (options.fpe & GFC_FPE_PRECISION) cw_sse &= ~(_FPU_MASK_PM << 7); + + asm volatile ("ldmxcsr %0" : : "m" (cw_sse)); + } +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-aix.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-aix.h new file mode 100644 index 0000000000..7d6f8dfcd7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-aix.h @@ -0,0 +1,83 @@ +/* AIX FPU-related code. + Copyright 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Francois-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +/* FPU-related code for AIX. */ +#ifdef HAVE_FPTRAP_H +#include +#endif + +void +set_fpu (void) +{ + fptrap_t mode = 0; + + if (options.fpe & GFC_FPE_INVALID) +#ifdef TRP_INVALID + mode |= TRP_INVALID; +#else + st_printf ("Fortran runtime warning: IEEE 'invalid operation' " + "exception not supported.\n"); +#endif + + if (options.fpe & GFC_FPE_DENORMAL) + st_printf ("Fortran runtime warning: IEEE 'denormal number' " + "exception not supported.\n"); + + if (options.fpe & GFC_FPE_ZERO) +#ifdef TRP_DIV_BY_ZERO + mode |= TRP_DIV_BY_ZERO; +#else + st_printf ("Fortran runtime warning: IEEE 'division by zero' " + "exception not supported.\n"); +#endif + + if (options.fpe & GFC_FPE_OVERFLOW) +#ifdef TRP_OVERFLOW + mode |= TRP_OVERFLOW; +#else + st_printf ("Fortran runtime warning: IEEE 'overflow' " + "exception not supported.\n"); +#endif + + if (options.fpe & GFC_FPE_UNDERFLOW) +#ifdef TRP_UNDERFLOW + mode |= TRP_UNDERFLOW; +#else + st_printf ("Fortran runtime warning: IEEE 'underflow' " + "exception not supported.\n"); +#endif + + if (options.fpe & GFC_FPE_PRECISION) +#ifdef TRP_UNDERFLOW + mode |= TRP_UNDERFLOW; +#else + st_printf ("Fortran runtime warning: IEEE 'loss of precision' " + "exception not supported.\n"); +#endif + + fp_trap(FP_TRAP_SYNC); + fp_enable(mode); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-generic.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-generic.h new file mode 100644 index 0000000000..234e6e2cd5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-generic.h @@ -0,0 +1,52 @@ +/* Fallback FPU-related code (for systems not otherwise supported). + Copyright 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Francois-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +/* Fallback FPU-related code for systems not otherwise supported. This + is mainly telling the user that we will not be able to do what he + requested. */ + +void +set_fpu (void) +{ + if (options.fpe & GFC_FPE_INVALID) + st_printf ("Fortran runtime warning: IEEE 'invalid operation' " + "exception not supported.\n"); + if (options.fpe & GFC_FPE_DENORMAL) + st_printf ("Fortran runtime warning: IEEE 'denormal number' " + "exception not supported.\n"); + if (options.fpe & GFC_FPE_ZERO) + st_printf ("Fortran runtime warning: IEEE 'division by zero' " + "exception not supported.\n"); + if (options.fpe & GFC_FPE_OVERFLOW) + st_printf ("Fortran runtime warning: IEEE 'overflow' " + "exception not supported.\n"); + if (options.fpe & GFC_FPE_UNDERFLOW) + st_printf ("Fortran runtime warning: IEEE 'underflow' " + "exception not supported.\n"); + if (options.fpe & GFC_FPE_PRECISION) + st_printf ("Fortran runtime warning: IEEE 'loss of precision' " + "exception not supported.\n"); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-glibc.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-glibc.h new file mode 100644 index 0000000000..807f0942e0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-glibc.h @@ -0,0 +1,87 @@ +/* FPU-related code for systems with GNU libc. + Copyright 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Francois-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +/* FPU-related code for systems with the GNU libc, providing the + feenableexcept function in fenv.h to set individual exceptions + (there's nothing to do that in C99). */ + +#ifdef HAVE_FENV_H +#include +#endif + +void set_fpu (void) +{ + if (FE_ALL_EXCEPT != 0) + fedisableexcept (FE_ALL_EXCEPT); + + if (options.fpe & GFC_FPE_INVALID) +#ifdef FE_INVALID + feenableexcept (FE_INVALID); +#else + st_printf ("Fortran runtime warning: IEEE 'invalid operation' " + "exception not supported.\n"); +#endif + +/* glibc does never have a FE_DENORMAL. */ + if (options.fpe & GFC_FPE_DENORMAL) +#ifdef FE_DENORMAL + feenableexcept (FE_DENORMAL); +#else + st_printf ("Fortran runtime warning: IEEE 'denormal number' " + "exception not supported.\n"); +#endif + + if (options.fpe & GFC_FPE_ZERO) +#ifdef FE_DIVBYZERO + feenableexcept (FE_DIVBYZERO); +#else + st_printf ("Fortran runtime warning: IEEE 'division by zero' " + "exception not supported.\n"); +#endif + + if (options.fpe & GFC_FPE_OVERFLOW) +#ifdef FE_OVERFLOW + feenableexcept (FE_OVERFLOW); +#else + st_printf ("Fortran runtime warning: IEEE 'overflow' " + "exception not supported.\n"); +#endif + + if (options.fpe & GFC_FPE_UNDERFLOW) +#ifdef FE_UNDERFLOW + feenableexcept (FE_UNDERFLOW); +#else + st_printf ("Fortran runtime warning: IEEE 'underflow' " + "exception not supported.\n"); +#endif + + if (options.fpe & GFC_FPE_PRECISION) +#ifdef FE_INEXACT + feenableexcept (FE_INEXACT); +#else + st_printf ("Fortran runtime warning: IEEE 'loss of precision' " + "exception not supported.\n"); +#endif +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-sysv.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-sysv.h new file mode 100644 index 0000000000..85ca25285e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-sysv.h @@ -0,0 +1,82 @@ +/* SysV FPU-related code (for systems not otherwise supported). + Copyright 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Francois-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +/* FPU-related code for SysV platforms with fpsetmask(). */ + +void +set_fpu (void) +{ + int cw = 0; + + if (options.fpe & GFC_FPE_INVALID) +#ifdef FP_X_INV + cw |= FP_X_INV; +#else + st_printf ("Fortran runtime warning: IEEE 'invalid operation' " + "exception not supported.\n"); +#endif + + if (options.fpe & GFC_FPE_DENORMAL) +#ifdef FP_X_DNML + cw |= FP_X_DNML; +#else + st_printf ("Fortran runtime warning: IEEE 'denormal number' " + "exception not supported.\n"); +#endif + + if (options.fpe & GFC_FPE_ZERO) +#ifdef FP_X_DZ + cw |= FP_X_DZ; +#else + st_printf ("Fortran runtime warning: IEEE 'division by zero' " + "exception not supported.\n"); +#endif + + if (options.fpe & GFC_FPE_OVERFLOW) +#ifdef FP_X_OFL + cw |= FP_X_OFL; +#else + st_printf ("Fortran runtime warning: IEEE 'overflow' " + "exception not supported.\n"); +#endif + + if (options.fpe & GFC_FPE_UNDERFLOW) +#ifdef FP_X_UFL + cw |= FP_X_UFL; +#else + st_printf ("Fortran runtime warning: IEEE 'underflow' " + "exception not supported.\n"); +#endif + + if (options.fpe & GFC_FPE_PRECISION) +#ifdef FP_X_IMP + cw |= FP_X_IMP; +#else + st_printf ("Fortran runtime warning: IEEE 'loss of precision' " + "exception not supported.\n"); +#endif + + fpsetmask(cw); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/configure b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/configure new file mode 100755 index 0000000000..caa7e59fd9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/configure @@ -0,0 +1,37246 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.59 for GNU Fortran Runtime Library 0.3. +# +# Copyright (C) 2003 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +$* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME='GNU Fortran Runtime Library' +PACKAGE_TARNAME='libgfortran' +PACKAGE_VERSION='0.3' +PACKAGE_STRING='GNU Fortran Runtime Library 0.3' +PACKAGE_BUGREPORT='' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_SYS_STAT_H +# include +#endif +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include +# endif +# include +#endif +#if HAVE_STRINGS_H +# include +#endif +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif +#endif +#if HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os build_libsubdir build_subdir host_subdir target_subdir onestep_TRUE onestep_FALSE onestep host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT multi_basedir toolexecdir toolexeclibdir CC ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE AM_FCFLAGS AM_CFLAGS CFLAGS LIBGFOR_USE_SYMVER_TRUE LIBGFOR_USE_SYMVER_FALSE AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB LIBTOOL SED EGREP FGREP GREP LD DUMPBIN ac_ct_DUMPBIN NM LN_S OBJDUMP ac_ct_OBJDUMP lt_ECHO DSYMUTIL ac_ct_DSYMUTIL NMEDIT ac_ct_NMEDIT LIPO ac_ct_LIPO OTOOL ac_ct_OTOOL OTOOL64 ac_ct_OTOOL64 CPP CPPFLAGS enable_shared enable_static FC FCFLAGS LDFLAGS ac_ct_FC extra_ldflags_libgfortran FPU_HOST_HEADER LIBOBJS LTLIBOBJS' +ac_subst_files='' +ac_pwd=`pwd` + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_FC_set=${FC+set} +ac_env_FC_value=$FC +ac_cv_env_FC_set=${FC+set} +ac_cv_env_FC_value=$FC +ac_env_FCFLAGS_set=${FCFLAGS+set} +ac_env_FCFLAGS_value=$FCFLAGS +ac_cv_env_FCFLAGS_set=${FCFLAGS+set} +ac_cv_env_FCFLAGS_value=$FCFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures GNU Fortran Runtime Library 0.3 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of GNU Fortran Runtime Library 0.3:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-version-specific-runtime-libs Specify that runtime libraries should be installed in a compiler-specific directory + --enable-intermodule build the library in one step + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --enable-multilib build many library versions (default) + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared[=PKGS] + build shared libraries [default=yes] + --enable-static[=PKGS] + build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-largefile omit support for large files + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-build-libsubdir=DIR Directory where to find libraries for build system + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + CPP C preprocessor + FC Fortran compiler command + FCFLAGS Fortran compiler flags + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd $ac_popdir + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF +GNU Fortran Runtime Library configure 0.3 +generated by GNU Autoconf 2.59 + +Copyright (C) 2003 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by GNU Fortran Runtime Library $as_me 0.3, which was +generated by GNU Autoconf 2.59. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_sep= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 +echo "$as_me: former value: \`$ac_old_val'" >&2;} + { echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 +echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ac_config_headers="$ac_config_headers config.h" + +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + + case ${build_alias} in + "") build_noncanonical=${build} ;; + *) build_noncanonical=${build_alias} ;; +esac + + case ${host_alias} in + "") host_noncanonical=${build_noncanonical} ;; + *) host_noncanonical=${host_alias} ;; +esac + + case ${target_alias} in + "") target_noncanonical=${host_noncanonical} ;; + *) target_noncanonical=${target_alias} ;; +esac + + +# post-stage1 host modules use a different CC_FOR_BUILD so, in order to +# have matching libraries, they should use host libraries: Makefile.tpl +# arranges to pass --with-build-libsubdir=$(HOST_SUBDIR). +# However, they still use the build modules, because the corresponding +# host modules (e.g. bison) are only built for the host when bootstrap +# finishes. So: +# - build_subdir is where we find build modules, and never changes. +# - build_libsubdir is where we find build libraries, and can be overridden. + +# Prefix 'build-' so this never conflicts with target_subdir. +build_subdir="build-${build_noncanonical}" + +# Check whether --with-build-libsubdir or --without-build-libsubdir was given. +if test "${with_build_libsubdir+set}" = set; then + withval="$with_build_libsubdir" + build_libsubdir="$withval" +else + build_libsubdir="$build_subdir" +fi; +# --srcdir=. covers the toplevel, while "test -d" covers the subdirectories +if ( test $srcdir = . && test -d gcc ) \ + || test -d $srcdir/../host-${host_noncanonical}; then + host_subdir="host-${host_noncanonical}" +else + host_subdir=. +fi +# No prefix. +target_subdir=${target_noncanonical} + + +# ------- +# Options +# ------- + +echo "$as_me:$LINENO: checking for --enable-version-specific-runtime-libs" >&5 +echo $ECHO_N "checking for --enable-version-specific-runtime-libs... $ECHO_C" >&6 +# Check whether --enable-version-specific-runtime-libs or --disable-version-specific-runtime-libs was given. +if test "${enable_version_specific_runtime_libs+set}" = set; then + enableval="$enable_version_specific_runtime_libs" + case "$enableval" in + yes) version_specific_libs=yes ;; + no) version_specific_libs=no ;; + *) { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable version-specific libs" >&5 +echo "$as_me: error: Unknown argument to enable/disable version-specific libs" >&2;} + { (exit 1); exit 1; }; };; + esac +else + version_specific_libs=no +fi; +echo "$as_me:$LINENO: result: $version_specific_libs" >&5 +echo "${ECHO_T}$version_specific_libs" >&6 + +# Build with intermodule optimisations +echo "$as_me:$LINENO: checking for --enable-intermodule" >&5 +echo $ECHO_N "checking for --enable-intermodule... $ECHO_C" >&6 +# Check whether --enable-intermodule or --disable-intermodule was given. +if test "${enable_intermodule+set}" = set; then + enableval="$enable_intermodule" + case "$enable_intermodule" in + yes) onestep="-onestep";; + *) onestep="";; +esac +else + onestep="" +fi; +echo "$as_me:$LINENO: result: $enable_intermodule" >&5 +echo "${ECHO_T}$enable_intermodule" >&6 + + +if test x$onestep = x-onestep; then + onestep_TRUE= + onestep_FALSE='#' +else + onestep_TRUE='#' + onestep_FALSE= +fi + + + +# Gets build, host, target, *_vendor, *_cpu, *_os, etc. +# +# You will slowly go insane if you do not grok the following fact: when +# building this library, the top-level /target/ becomes the library's /host/. +# +# configure then causes --target to default to --host, exactly like any +# other package using autoconf. Therefore, 'target' and 'host' will +# always be the same. This makes sense both for native and cross compilers +# just think about it for a little while. :-) +# +# Also, if this library is being configured as part of a cross compiler, the +# top-level configure script will pass the "real" host as $with_cross_host. +# +# Do not delete or change the following two lines. For why, see +# http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking target system type" >&5 +echo $ECHO_N "checking target system type... $ECHO_C" >&6 +if test "${ac_cv_target+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_target_alias=$target_alias +test "x$ac_cv_target_alias" = "x" && + ac_cv_target_alias=$ac_cv_host_alias +ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_target" >&5 +echo "${ECHO_T}$ac_cv_target" >&6 +target=$ac_cv_target +target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- +target_alias=${target_alias-$host_alias} + +# Sets up automake. Must come after AC_CANONICAL_SYSTEM. Each of the +# following is magically included in AUTOMAKE_OPTIONS in each Makefile.am. +# 1.9.6: minimum required version +# no-define: PACKAGE and VERSION will not be #define'd in config.h (a bunch +# of other PACKAGE_* variables will, however, and there's nothing +# we can do about that; they come from AC_INIT). +# foreign: we don't follow the normal rules for GNU packages (no COPYING +# file in the top srcdir, etc, etc), so stop complaining. +# -Wall: turns on all automake warnings... +# -Wno-portability: ...except this one, since GNU make is required. +am__api_version="1.9" +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac +done + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +test "$program_prefix" != NONE && + program_transform_name="s,^,$program_prefix,;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$,$program_suffix,;$program_transform_name" +# Double any \ or $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm conftest.sed + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + # We used to keeping the `.' as first argument, in order to + # allow $(mkdir_p) to be used without argument. As in + # $(mkdir_p) $(somedir) + # where $(somedir) is conditionally defined. However this is wrong + # for two reasons: + # 1. if the package is installed by a user who cannot write `.' + # make install will fail, + # 2. the above comment should most certainly read + # $(mkdir_p) $(DESTDIR)$(somedir) + # so it does not work when $(somedir) is undefined and + # $(DESTDIR) is not. + # To support the latter case, we have to write + # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), + # so the `.' trick is pointless. + mkdir_p='mkdir -p --' +else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + for d in ./-p ./--version; + do + test -d $d && rmdir $d + done + # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. + if test -f "$ac_aux_dir/mkinstalldirs"; then + mkdir_p='$(mkinstalldirs)' + else + mkdir_p='$(install_sh) -d' + fi +fi + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$AWK" && break +done + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +all: + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='libgfortran' + VERSION='0.3' + + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +install_sh=${install_sh-"$am_aux_dir/install-sh"} + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + +echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 + # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then + enableval="$enable_maintainer_mode" + USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi; + echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 +echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 + + +if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + +# Default to --enable-multilib +# Check whether --enable-multilib or --disable-multilib was given. +if test "${enable_multilib+set}" = set; then + enableval="$enable_multilib" + case "$enableval" in + yes) multilib=yes ;; + no) multilib=no ;; + *) { { echo "$as_me:$LINENO: error: bad value $enableval for multilib option" >&5 +echo "$as_me: error: bad value $enableval for multilib option" >&2;} + { (exit 1); exit 1; }; } ;; + esac +else + multilib=yes +fi; + +# We may get other options which we leave undocumented: +# --with-target-subdir, --with-multisrctop, --with-multisubdir +# See config-ml.in if you want the gory details. + +if test "$srcdir" = "."; then + if test "$with_target_subdir" != "."; then + multi_basedir="$srcdir/$with_multisrctop../.." + else + multi_basedir="$srcdir/$with_multisrctop.." + fi +else + multi_basedir="$srcdir/.." +fi + + +# Even if the default multilib is not a cross compilation, +# it may be that some of the other multilibs are. +if test $cross_compiling = no && test $multilib = yes \ + && test "x${with_multisubdir}" != x ; then + cross_compiling=maybe +fi + + ac_config_commands="$ac_config_commands default-1" + + +# Handy for debugging: +#AC_MSG_NOTICE($build / $host / $target / $host_alias / $target_alias); sleep 5 + +# Are we being configured with some form of cross compiler? +# NB: We don't actually need to know this just now, but when, say, a test +# suite is included, we'll have to know. +if test "$build" != "$host"; then + LIBGFOR_IS_NATIVE=false + +else + LIBGFOR_IS_NATIVE=true +fi + +# Calculate toolexeclibdir +# Also toolexecdir, though it's only used in toolexeclibdir +case ${version_specific_libs} in + yes) + # Need the gcc compiler version to know where to install libraries + # and header files if --enable-version-specific-runtime-libs option + # is selected. + toolexecdir='$(libdir)/gcc/$(target_alias)' + toolexeclibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)' + ;; + no) + if test -n "$with_cross_host" && + test x"$with_cross_host" != x"no"; then + # Install a library built with a cross compiler in tooldir, not libdir. + toolexecdir='$(exec_prefix)/$(target_alias)' + toolexeclibdir='$(toolexecdir)/lib' + else + toolexecdir='$(libdir)/gcc-lib/$(target_alias)' + toolexeclibdir='$(libdir)' + fi + multi_os_directory=`$CC -print-multi-os-directory` + case $multi_os_directory in + .) ;; # Avoid trailing /. + *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;; + esac + ;; +esac + + + +# Check the compiler. +# The same as in boehm-gc and libstdc++. Have to borrow it from there. +# We must force CC to /not/ be precious variables; otherwise +# the wrong, non-multilib-adjusted value will be used in multilibs. +# As a side effect, we have to subst CFLAGS ourselves. + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +# FIXME: Cleanup? +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + gcc_no_link=no +else + gcc_no_link=yes +fi + +if test x$gcc_no_link = xyes; then + # Setting cross_compile will disable run tests; it will + # also disable AC_CHECK_FILE but that's generally + # correct if we can't link. + cross_compiling=yes + EXEEXT= +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } + fi + fi +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +fi +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std1 is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std1. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + + ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +echo "$as_me:$LINENO: result: $_am_result" >&5 +echo "${ECHO_T}$_am_result" >&6 +rm -f confinc confmf + +# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval="$enable_dependency_tracking" + +fi; +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + + +if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + + +depcc="$CC" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + + +# Add -Wall -fno-repack-arrays -fno-underscoring if we are using GCC. +if test "x$GCC" = "xyes"; then + AM_FCFLAGS="-I . -Wall -Werror -fimplicit-none -fno-repack-arrays -fno-underscoring" + ## We like to use C99 routines when available. This makes sure that + ## __STDC_VERSION__ is set such that libc includes make them available. + AM_CFLAGS="-std=gnu99 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -Wextra -Wwrite-strings" + ## Compile the following tests with the same system header contents + ## that we'll encounter when compiling our own source files. + CFLAGS="-std=gnu99 $CFLAGS" +fi + + + + +# Check for symbol versioning (copied from libssp). +echo "$as_me:$LINENO: checking whether symbol versioning is supported" >&5 +echo $ECHO_N "checking whether symbol versioning is supported... $ECHO_C" >&6 +cat > conftest.map <&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +int foo; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gfortran_use_symver=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +gfortran_use_symver=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LDFLAGS="$save_LDFLAGS" +echo "$as_me:$LINENO: result: $gfortran_use_symver" >&5 +echo "${ECHO_T}$gfortran_use_symver" >&6 + + +if test "x$gfortran_use_symver" = xyes; then + LIBGFOR_USE_SYMVER_TRUE= + LIBGFOR_USE_SYMVER_FALSE='#' +else + LIBGFOR_USE_SYMVER_TRUE='#' + LIBGFOR_USE_SYMVER_FALSE= +fi + + +# Find other programs we need. +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AS+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AS="${ac_tool_prefix}as" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + echo "$as_me:$LINENO: result: $AS" >&5 +echo "${ECHO_T}$AS" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_AS+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AS="as" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + echo "$as_me:$LINENO: result: $ac_ct_AS" >&5 +echo "${ECHO_T}$ac_ct_AS" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + AS=$ac_ct_AS +else + AS="$ac_cv_prog_AS" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + echo "$as_me:$LINENO: result: $AR" >&5 +echo "${ECHO_T}$AR" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +echo "${ECHO_T}$ac_ct_AR" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + AR=$ac_ct_AR +else + AR="$ac_cv_prog_AR" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + echo "$as_me:$LINENO: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB="ranlib-not-found-in-path-error" +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + RANLIB=$ac_ct_RANLIB +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +all: + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac +done + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + +# Configure libtool +#AC_MSG_NOTICE([====== Starting libtool configuration]) +enable_dlopen=yes + + + +case `pwd` in + *\ * | *\ *) + { echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.2.6' +macro_revision='1.3012' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 +echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 +if test "${lt_cv_path_SED+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done + +fi + +SED=$lt_cv_path_SED + +echo "$as_me:$LINENO: result: $SED" >&5 +echo "${ECHO_T}$SED" >&6 + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +if test "${ac_cv_prog_egrep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6 + EGREP=$ac_cv_prog_egrep + + +echo "$as_me:$LINENO: checking for fgrep" >&5 +echo $ECHO_N "checking for fgrep... $ECHO_C" >&6 +if test "${ac_cv_prog_fgrep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo 'ab*c' | (grep -F 'ab*c') >/dev/null 2>&1 + then ac_cv_prog_fgrep='grep -F' + else ac_cv_prog_fgrep='fgrep' + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_fgrep" >&5 +echo "${ECHO_T}$ac_cv_prog_fgrep" >&6 + FGREP=$ac_cv_prog_fgrep + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi; +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 +else + echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +echo "${ECHO_T}$LD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5 +echo $ECHO_N "checking for BSD- or MS-compatible name lister (nm)... $ECHO_C" >&6 +if test "${lt_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 +echo "${ECHO_T}$lt_cv_path_NM" >&6 +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$ac_tool_prefix"; then + for ac_prog in "dumpbin -symbols" "link -dump -symbols" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_DUMPBIN+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + echo "$as_me:$LINENO: result: $DUMPBIN" >&5 +echo "${ECHO_T}$DUMPBIN" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in "dumpbin -symbols" "link -dump -symbols" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5 +echo "${ECHO_T}$ac_ct_DUMPBIN" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_DUMPBIN" && break +done +test -n "$ac_ct_DUMPBIN" || ac_ct_DUMPBIN=":" + + DUMPBIN=$ac_ct_DUMPBIN +fi + + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5 +echo $ECHO_N "checking the name lister ($NM) interface... $ECHO_C" >&6 +if test "${lt_cv_nm_interface+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:4290: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:4293: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:4296: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5 +echo "${ECHO_T}$lt_cv_nm_interface" >&6 + +echo "$as_me:$LINENO: checking whether ln -s works" >&5 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6 +fi + +# find the maximum length of command line arguments +echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 +if test "${lt_cv_sys_max_cmd_len+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 +else + echo "$as_me:$LINENO: result: none" >&5 +echo "${ECHO_T}none" >&6 +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5 +echo $ECHO_N "checking whether the shell understands some XSI constructs... $ECHO_C" >&6 +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +echo "$as_me:$LINENO: result: $xsi_shell" >&5 +echo "${ECHO_T}$xsi_shell" >&6 + + +echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5 +echo $ECHO_N "checking whether the shell understands \"+=\"... $ECHO_C" >&6 +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +echo "$as_me:$LINENO: result: $lt_shell_append" >&5 +echo "${ECHO_T}$lt_shell_append" >&6 + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 +if test "${lt_cv_ld_reload_flag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_ld_reload_flag='-r' +fi +echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_OBJDUMP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + echo "$as_me:$LINENO: result: $OBJDUMP" >&5 +echo "${ECHO_T}$OBJDUMP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_OBJDUMP" && ac_cv_prog_ac_ct_OBJDUMP="false" +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 +echo "${ECHO_T}$ac_ct_OBJDUMP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + OBJDUMP=$ac_ct_OBJDUMP +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5 +echo $ECHO_N "checking how to recognize dependent libraries... $ECHO_C" >&6 +if test "${lt_cv_deplibs_check_method+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + echo "$as_me:$LINENO: result: $AR" >&5 +echo "${ECHO_T}$AR" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +echo "${ECHO_T}$ac_ct_AR" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + AR=$ac_ct_AR +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + echo "$as_me:$LINENO: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + RANLIB=$ac_ct_RANLIB +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 +echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + echo "$as_me:$LINENO: result: failed" >&5 +echo "${ECHO_T}failed" >&6 +else + echo "$as_me:$LINENO: result: ok" >&5 +echo "${ECHO_T}ok" >&6 +fi + + + + + + + + + + + + + + + + + + + + + + +# Check whether --enable-libtool-lock or --disable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval="$enable_libtool_lock" + +fi; +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 5453 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 +if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + lt_cv_cc_needs_belf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +lt_cv_cc_needs_belf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + echo "$as_me:$LINENO: result: $DSYMUTIL" >&5 +echo "${ECHO_T}$DSYMUTIL" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_DSYMUTIL" && ac_cv_prog_ac_ct_DSYMUTIL=":" +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5 +echo "${ECHO_T}$ac_ct_DSYMUTIL" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + DSYMUTIL=$ac_ct_DSYMUTIL +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_NMEDIT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + echo "$as_me:$LINENO: result: $NMEDIT" >&5 +echo "${ECHO_T}$NMEDIT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_NMEDIT" && ac_cv_prog_ac_ct_NMEDIT=":" +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5 +echo "${ECHO_T}$ac_ct_NMEDIT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + NMEDIT=$ac_ct_NMEDIT +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_LIPO+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + echo "$as_me:$LINENO: result: $LIPO" >&5 +echo "${ECHO_T}$LIPO" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_LIPO" && ac_cv_prog_ac_ct_LIPO=":" +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5 +echo "${ECHO_T}$ac_ct_LIPO" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + LIPO=$ac_ct_LIPO +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_OTOOL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + echo "$as_me:$LINENO: result: $OTOOL" >&5 +echo "${ECHO_T}$OTOOL" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_OTOOL" && ac_cv_prog_ac_ct_OTOOL=":" +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5 +echo "${ECHO_T}$ac_ct_OTOOL" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + OTOOL=$ac_ct_OTOOL +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_OTOOL64+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + echo "$as_me:$LINENO: result: $OTOOL64" >&5 +echo "${ECHO_T}$OTOOL64" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_OTOOL64" && ac_cv_prog_ac_ct_OTOOL64=":" +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5 +echo "${ECHO_T}$ac_ct_OTOOL64" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + OTOOL64=$ac_ct_OTOOL64 +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + echo "$as_me:$LINENO: checking for -single_module linker flag" >&5 +echo $ECHO_N "checking for -single_module linker flag... $ECHO_C" >&6 +if test "${lt_cv_apple_cc_single_mod+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5 +echo "${ECHO_T}$lt_cv_apple_cc_single_mod" >&6 + echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5 +echo $ECHO_N "checking for -exported_symbols_list linker flag... $ECHO_C" >&6 +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + lt_cv_ld_exported_symbols_list=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +lt_cv_ld_exported_symbols_list=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5 +echo "${ECHO_T}$lt_cv_ld_exported_symbols_list" >&6 + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6 +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_header in dlfcn.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +# Set options + + + + + enable_win32_dll=no + + + # Check whether --enable-shared or --disable-shared was given. +if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi; + + + + + + + + + # Check whether --enable-static or --disable-static was given. +if test "${enable_static+set}" = set; then + enableval="$enable_static" + p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi; + + + + + + + + + +# Check whether --with-pic or --without-pic was given. +if test "${with_pic+set}" = set; then + withval="$with_pic" + pic_mode="$withval" +else + pic_mode=default +fi; + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install or --disable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval="$enable_fast_install" + p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi; + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +echo "$as_me:$LINENO: checking for objdir" >&5 +echo $ECHO_N "checking for objdir... $ECHO_C" >&6 +if test "${lt_cv_objdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 +echo "${ECHO_T}$lt_cv_objdir" >&6 +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + + + + + + + + + + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + echo "$as_me:$LINENO: checking for file" >&5 +echo $ECHO_N "checking for file... $ECHO_C" >&6 +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:7242: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:7246: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic" >&6 + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:7581: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:7585: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_pic_works" >&6 + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_static_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_static_works" >&6 + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:7686: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:7690: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 + + + + + + + echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:7741: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:7745: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +int foo(void) {} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +echo "$as_me:$LINENO: result: $ld_shlibs" >&5 +echo "${ECHO_T}$ld_shlibs" >&6 +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 +if test "${lt_cv_archive_cmds_need_lc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_archive_cmds_need_lc" >&5 +echo "${ECHO_T}$lt_cv_archive_cmds_need_lc" >&6 + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if test "${lt_cv_shlibpath_overrides_runpath+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then + lt_cv_shlibpath_overrides_runpath=yes +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action" >&5 +echo "${ECHO_T}$hardcode_action" >&6 + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 10608 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 10704 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 + echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6 + + echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6 + + echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6 + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + + +#AC_MSG_NOTICE([====== Finished libtool configuration]) ; sleep 10 + +# We need gfortran to compile parts of the library +#AC_PROG_FC(gfortran) +FC="$GFORTRAN" +ac_ext=${FC_SRCEXT-f} +ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in gfortran + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_FC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$FC"; then + ac_cv_prog_FC="$FC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_FC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +FC=$ac_cv_prog_FC +if test -n "$FC"; then + echo "$as_me:$LINENO: result: $FC" >&5 +echo "${ECHO_T}$FC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$FC" && break + done +fi +if test -z "$FC"; then + ac_ct_FC=$FC + for ac_prog in gfortran +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_FC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_FC"; then + ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_FC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_FC=$ac_cv_prog_ac_ct_FC +if test -n "$ac_ct_FC"; then + echo "$as_me:$LINENO: result: $ac_ct_FC" >&5 +echo "${ECHO_T}$ac_ct_FC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_FC" && break +done + + FC=$ac_ct_FC +fi + + +# Provide some information about the compiler. +echo "$as_me:11030:" \ + "checking for Fortran compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +echo "$as_me:$LINENO: checking whether we are using the GNU Fortran compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU Fortran compiler... $ECHO_C" >&6 +if test "${ac_cv_fc_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_fc_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_fc_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_fc_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_fc_compiler_gnu" >&6 +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FCFLAGS+set} +ac_save_FFLAGS=$FCFLAGS +FCFLAGS= +echo "$as_me:$LINENO: checking whether $FC accepts -g" >&5 +echo $ECHO_N "checking whether $FC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_fc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + FCFLAGS=-g +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_fc_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_fc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_fc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_fc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_fc_g" >&6 +if test "$ac_test_FFLAGS" = set; then + FCFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_fc_g = yes; then + if test "x$ac_cv_fc_compiler_gnu" = xyes; then + FCFLAGS="-g -O2" + else + FCFLAGS="-g" + fi +else + if test "x$ac_cv_fc_compiler_gnu" = xyes; then + FCFLAGS="-O2" + else + FCFLAGS= + fi +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_ext=${FC_SRCEXT-f} +ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in f95 fort xlf95 ifc efc pgf95 lf95 gfortran f90 xlf90 pgf90 epcf90 g77 f77 xlf frt pgf77 fort77 fl32 af77 + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_FC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$FC"; then + ac_cv_prog_FC="$FC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_FC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +FC=$ac_cv_prog_FC +if test -n "$FC"; then + echo "$as_me:$LINENO: result: $FC" >&5 +echo "${ECHO_T}$FC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$FC" && break + done +fi +if test -z "$FC"; then + ac_ct_FC=$FC + for ac_prog in f95 fort xlf95 ifc efc pgf95 lf95 gfortran f90 xlf90 pgf90 epcf90 g77 f77 xlf frt pgf77 fort77 fl32 af77 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_FC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_FC"; then + ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_FC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_FC=$ac_cv_prog_ac_ct_FC +if test -n "$ac_ct_FC"; then + echo "$as_me:$LINENO: result: $ac_ct_FC" >&5 +echo "${ECHO_T}$ac_ct_FC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_FC" && break +done + + FC=$ac_ct_FC +fi + + +# Provide some information about the compiler. +echo "$as_me:11266:" \ + "checking for Fortran compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +echo "$as_me:$LINENO: checking whether we are using the GNU Fortran compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU Fortran compiler... $ECHO_C" >&6 +if test "${ac_cv_fc_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_fc_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_fc_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_fc_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_fc_compiler_gnu" >&6 +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FCFLAGS+set} +ac_save_FFLAGS=$FCFLAGS +FCFLAGS= +echo "$as_me:$LINENO: checking whether $FC accepts -g" >&5 +echo $ECHO_N "checking whether $FC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_fc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + FCFLAGS=-g +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_fc_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_fc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_fc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_fc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_fc_g" >&6 +if test "$ac_test_FFLAGS" = set; then + FCFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_fc_g = yes; then + if test "x$ac_cv_fc_compiler_gnu" = xyes; then + FCFLAGS="-g -O2" + else + FCFLAGS="-g" + fi +else + if test "x$ac_cv_fc_compiler_gnu" = xyes; then + FCFLAGS="-O2" + else + FCFLAGS= + fi +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + + + + ac_ext=${FC_SRCEXT-f} +ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + + +archive_cmds_need_lc_FC=no +allow_undefined_flag_FC= +always_export_symbols_FC=no +archive_expsym_cmds_FC= +export_dynamic_flag_spec_FC= +hardcode_direct_FC=no +hardcode_direct_absolute_FC=no +hardcode_libdir_flag_spec_FC= +hardcode_libdir_flag_spec_ld_FC= +hardcode_libdir_separator_FC= +hardcode_minus_L_FC=no +hardcode_automatic_FC=no +inherit_rpath_FC=no +module_cmds_FC= +module_expsym_cmds_FC= +link_all_deplibs_FC=unknown +old_archive_cmds_FC=$old_archive_cmds +no_undefined_flag_FC= +whole_archive_flag_spec_FC= +enable_shared_with_static_runtimes_FC=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +objext_FC=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${FC-"f95"} + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + compiler_FC=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + + if test -n "$compiler"; then + echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 + echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6 + + echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6 + + echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6 + + GCC_FC="$ac_cv_fc_compiler_gnu" + LD_FC="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_FC= +postdep_objects_FC= +predeps_FC= +postdeps_FC= +compiler_lib_search_path_FC= + +cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF + +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_FC"; then + compiler_lib_search_path_FC="${prev}${p}" + else + compiler_lib_search_path_FC="${compiler_lib_search_path_FC} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_FC"; then + postdeps_FC="${prev}${p}" + else + postdeps_FC="${postdeps_FC} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_FC"; then + predep_objects_FC="$p" + else + predep_objects_FC="$predep_objects_FC $p" + fi + else + if test -z "$postdep_objects_FC"; then + postdep_objects_FC="$p" + else + postdep_objects_FC="$postdep_objects_FC $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling FC test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken + + +case " $postdeps_FC " in +*" -lc "*) archive_cmds_need_lc_FC=no ;; +esac + compiler_lib_search_dirs_FC= +if test -n "${compiler_lib_search_path_FC}"; then + compiler_lib_search_dirs_FC=`echo " ${compiler_lib_search_path_FC}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_FC= +lt_prog_compiler_pic_FC= +lt_prog_compiler_static_FC= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_static_FC='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_FC='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_FC='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_FC='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_FC='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_FC='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_FC='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_FC=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_FC='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_FC=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic_FC='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_FC='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_FC='-Bstatic' + else + lt_prog_compiler_static_FC='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_FC='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_FC='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_FC='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_FC='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_FC='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_FC='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-fPIC' + lt_prog_compiler_static_FC='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='--shared' + lt_prog_compiler_static_FC='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-fpic' + lt_prog_compiler_static_FC='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl_FC='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_FC='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-qpic' + lt_prog_compiler_static_FC='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + lt_prog_compiler_wl_FC='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + lt_prog_compiler_wl_FC='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_FC='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_FC='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_FC='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static_FC='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl_FC='-Qoption ld ';; + *) + lt_prog_compiler_wl_FC='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl_FC='-Qoption ld ' + lt_prog_compiler_pic_FC='-PIC' + lt_prog_compiler_static_FC='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_FC='-Kconform_pic' + lt_prog_compiler_static_FC='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_pic_FC='-KPIC' + lt_prog_compiler_static_FC='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl_FC='-Wl,' + lt_prog_compiler_can_build_shared_FC=no + ;; + + uts4*) + lt_prog_compiler_pic_FC='-pic' + lt_prog_compiler_static_FC='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_FC=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_FC= + ;; + *) + lt_prog_compiler_pic_FC="$lt_prog_compiler_pic_FC" + ;; +esac +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_FC" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_FC" >&6 + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_FC"; then + echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_FC works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_FC works... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_pic_works_FC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_pic_works_FC=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_FC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:12006: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:12010: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_FC=yes + fi + fi + $RM conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_FC" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_pic_works_FC" >&6 + +if test x"$lt_cv_prog_compiler_pic_works_FC" = xyes; then + case $lt_prog_compiler_pic_FC in + "" | " "*) ;; + *) lt_prog_compiler_pic_FC=" $lt_prog_compiler_pic_FC" ;; + esac +else + lt_prog_compiler_pic_FC= + lt_prog_compiler_can_build_shared_FC=no +fi + +fi + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_FC eval lt_tmp_static_flag=\"$lt_prog_compiler_static_FC\" +echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_static_works_FC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_static_works_FC=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_FC=yes + fi + else + lt_cv_prog_compiler_static_works_FC=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_FC" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_static_works_FC" >&6 + +if test x"$lt_cv_prog_compiler_static_works_FC" = xyes; then + : +else + lt_prog_compiler_static_FC= +fi + + + + + echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_FC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_FC=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:12105: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:12109: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_FC=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_FC" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_FC" >&6 + + + + echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_FC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_FC=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:12157: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:12161: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_FC=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_FC" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_FC" >&6 + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_FC" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag_FC= + always_export_symbols_FC=no + archive_cmds_FC= + archive_expsym_cmds_FC= + compiler_needs_object_FC=no + enable_shared_with_static_runtimes_FC=no + export_dynamic_flag_spec_FC= + export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic_FC=no + hardcode_direct_FC=no + hardcode_direct_absolute_FC=no + hardcode_libdir_flag_spec_FC= + hardcode_libdir_flag_spec_ld_FC= + hardcode_libdir_separator_FC= + hardcode_minus_L_FC=no + hardcode_shlibpath_var_FC=unsupported + inherit_rpath_FC=no + link_all_deplibs_FC=unknown + module_cmds_FC= + module_expsym_cmds_FC= + old_archive_from_new_cmds_FC= + old_archive_from_expsyms_cmds_FC= + thread_safe_flag_spec_FC= + whole_archive_flag_spec_FC= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_FC= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_FC='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_FC=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_FC='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_FC="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_FC= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_FC=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='' + ;; + m68k) + archive_cmds_FC='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_minus_L_FC=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_FC=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_FC='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_FC=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, FC) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_FC='-L$libdir' + allow_undefined_flag_FC=unsupported + always_export_symbols_FC=no + enable_shared_with_static_runtimes_FC=yes + export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_FC='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_FC=no + fi + ;; + + interix[3-9]*) + hardcode_direct_FC=no + hardcode_shlibpath_var_FC=no + hardcode_libdir_flag_spec_FC='${wl}-rpath,$libdir' + export_dynamic_flag_spec_FC='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_FC='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec_FC= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec_FC='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_FC=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds_FC='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_FC='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec_FC='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec_FC= + hardcode_libdir_flag_spec_ld_FC='-rpath $libdir' + archive_cmds_FC='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_FC='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs_FC=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_FC='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs_FC=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_FC=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs_FC=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_FC=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds_FC='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_FC=no + fi + ;; + esac + + if test "$ld_shlibs_FC" = no; then + runpath_var= + hardcode_libdir_flag_spec_FC= + export_dynamic_flag_spec_FC= + whole_archive_flag_spec_FC= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_FC=unsupported + always_export_symbols_FC=yes + archive_expsym_cmds_FC='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_FC=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_FC=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_FC='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_FC='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_FC='' + hardcode_direct_FC=yes + hardcode_direct_absolute_FC=yes + hardcode_libdir_separator_FC=':' + link_all_deplibs_FC=yes + file_list_spec_FC='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_FC=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_FC=yes + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_libdir_separator_FC= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_FC='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_FC=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_FC='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_fc_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_FC='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_FC='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_FC='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_FC="-z nodefs" + archive_expsym_cmds_FC="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_fc_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_FC='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_FC=' ${wl}-bernotok' + allow_undefined_flag_FC=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_FC='$convenience' + archive_cmds_need_lc_FC=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_FC="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_FC='' + ;; + m68k) + archive_cmds_FC='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_minus_L_FC=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec_FC=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_FC=' ' + allow_undefined_flag_FC=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_FC='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds_FC='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_FC='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path_FC='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_FC=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc_FC=no + hardcode_direct_FC=no + hardcode_automatic_FC=yes + hardcode_shlibpath_var_FC=unsupported + whole_archive_flag_spec_FC='' + link_all_deplibs_FC=yes + allow_undefined_flag_FC="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds_FC="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_FC="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_FC="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_FC="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs_FC=no + fi + + ;; + + dgux*) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_shlibpath_var_FC=no + ;; + + freebsd1*) + ld_shlibs_FC=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_FC='-R$libdir' + hardcode_direct_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_FC=yes + hardcode_minus_L_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds_FC='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_FC='-R$libdir' + hardcode_direct_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_FC='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_FC='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_FC=: + hardcode_direct_FC=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_FC=yes + export_dynamic_flag_spec_FC='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds_FC='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_FC='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_FC='+b $libdir' + hardcode_libdir_separator_FC=: + hardcode_direct_FC=yes + hardcode_direct_absolute_FC=yes + export_dynamic_flag_spec_FC='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_FC=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds_FC='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_FC='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_FC='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_FC='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec_FC='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_FC=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_FC=no + hardcode_shlibpath_var_FC=no + ;; + *) + hardcode_direct_FC=yes + hardcode_direct_absolute_FC=yes + export_dynamic_flag_spec_FC='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_FC=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +int foo(void) {} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_fc_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc_FC='no' + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_FC=: + inherit_rpath_FC=yes + link_all_deplibs_FC=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_FC='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_FC='-R$libdir' + hardcode_direct_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + newsos6) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_FC=yes + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_FC=: + hardcode_shlibpath_var_FC=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_FC=yes + hardcode_shlibpath_var_FC=no + hardcode_direct_absolute_FC=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec_FC='${wl}-rpath,$libdir' + export_dynamic_flag_spec_FC='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_FC='-R$libdir' + ;; + *) + archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_FC='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs_FC=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_minus_L_FC=yes + allow_undefined_flag_FC=unsupported + archive_cmds_FC='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds_FC='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_FC=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_FC=' -expect_unresolved \*' + archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc_FC='no' + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_FC=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_FC=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_FC='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_FC=' -expect_unresolved \*' + archive_cmds_FC='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_FC='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_FC='-rpath $libdir' + fi + archive_cmds_need_lc_FC='no' + hardcode_libdir_separator_FC=: + ;; + + solaris*) + no_undefined_flag_FC=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds_FC='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds_FC='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds_FC='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec_FC='-R$libdir' + hardcode_shlibpath_var_FC=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec_FC='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec_FC='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs_FC=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_FC='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_FC='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_direct_FC=yes + hardcode_minus_L_FC=yes + hardcode_shlibpath_var_FC=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_FC=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_FC='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_FC='$CC -r -o $output$reload_objs' + hardcode_direct_FC=no + ;; + motorola) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_FC=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_FC=no + ;; + + sysv4.3*) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_FC=no + export_dynamic_flag_spec_FC='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_FC=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_FC=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_FC='${wl}-z,text' + archive_cmds_need_lc_FC=no + hardcode_shlibpath_var_FC=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_FC='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_FC='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_FC='${wl}-z,text' + allow_undefined_flag_FC='${wl}-z,nodefs' + archive_cmds_need_lc_FC=no + hardcode_shlibpath_var_FC=no + hardcode_libdir_flag_spec_FC='${wl}-R,$libdir' + hardcode_libdir_separator_FC=':' + link_all_deplibs_FC=yes + export_dynamic_flag_spec_FC='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds_FC='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_FC='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_FC='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_FC='-L$libdir' + hardcode_shlibpath_var_FC=no + ;; + + *) + ld_shlibs_FC=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec_FC='${wl}-Blargedynsym' + ;; + esac + fi + fi + +echo "$as_me:$LINENO: result: $ld_shlibs_FC" >&5 +echo "${ECHO_T}$ld_shlibs_FC" >&6 +test "$ld_shlibs_FC" = no && can_build_shared=no + +with_gnu_ld_FC=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_FC" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_FC=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_FC in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 +if test "${lt_cv_archive_cmds_need_lc_FC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_FC + pic_flag=$lt_prog_compiler_pic_FC + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_FC + allow_undefined_flag_FC= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + lt_cv_archive_cmds_need_lc_FC=no + else + lt_cv_archive_cmds_need_lc_FC=yes + fi + allow_undefined_flag_FC=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_archive_cmds_need_lc_FC" >&5 +echo "${ECHO_T}$lt_cv_archive_cmds_need_lc_FC" >&6 + archive_cmds_need_lc_FC=$lt_cv_archive_cmds_need_lc_FC + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if test "${lt_cv_shlibpath_overrides_runpath+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_FC\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_FC\"" + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_fc_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then + lt_cv_shlibpath_overrides_runpath=yes +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_FC= +if test -n "$hardcode_libdir_flag_spec_FC" || + test -n "$runpath_var_FC" || + test "X$hardcode_automatic_FC" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_FC" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, FC)" != no && + test "$hardcode_minus_L_FC" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_FC=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_FC=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_FC=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action_FC" >&5 +echo "${ECHO_T}$hardcode_action_FC" >&6 + +if test "$hardcode_action_FC" = relink || + test "$inherit_rpath_FC" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_FC" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# extra LD Flags which are required for targets +case "${host}" in + *-darwin*) + # Darwin needs -single_module when linking libgfortran + extra_ldflags_libgfortran=-Wl,-single_module + ;; +esac + + +# We need a working compiler at that point, otherwise give a clear +# error message and bail out. + +echo "$as_me:$LINENO: checking whether the GNU Fortran compiler is working" >&5 +echo $ECHO_N "checking whether the GNU Fortran compiler is working... $ECHO_C" >&6 +ac_ext=${FC_SRCEXT-f} +ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5' +ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_fc_compiler_gnu + +cat >conftest.$ac_ext <<_ACEOF + + program foo + real, parameter :: bar = sin (12.34 / 2.5) + end program foo +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_fc_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + { { echo "$as_me:$LINENO: error: GNU Fortran is not working; please report a bug in http://gcc.gnu.org/bugzilla, attaching $PWD/config.log" >&5 +echo "$as_me: error: GNU Fortran is not working; please report a bug in http://gcc.gnu.org/bugzilla, attaching $PWD/config.log" >&2;} + { (exit 1); exit 1; }; } + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Check whether --enable-largefile or --disable-largefile was given. +if test "${enable_largefile+set}" = set; then + enableval="$enable_largefile" + +fi; +if test "$enable_largefile" != no; then + + echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5 +echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6 +if test "${ac_cv_sys_largefile_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext + CC="$CC -n32" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sys_largefile_CC=' -n32'; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5 +echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6 + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6 +if test "${ac_cv_sys_file_offset_bits+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + while :; do + ac_cv_sys_file_offset_bits=no + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sys_file_offset_bits=64; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + break +done +fi +echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5 +echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6 +if test "$ac_cv_sys_file_offset_bits" != no; then + +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF + +fi +rm -f conftest* + echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5 +echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6 +if test "${ac_cv_sys_large_files+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + while :; do + ac_cv_sys_large_files=no + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sys_large_files=1; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + break +done +fi +echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5 +echo "${ECHO_T}$ac_cv_sys_large_files" >&6 +if test "$ac_cv_sys_large_files" != no; then + +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF + +fi +rm -f conftest* +fi + +echo "$as_me:$LINENO: checking for off_t" >&5 +echo $ECHO_N "checking for off_t... $ECHO_C" >&6 +if test "${ac_cv_type_off_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((off_t *) 0) + return 0; +if (sizeof (off_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_off_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_off_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 +echo "${ECHO_T}$ac_cv_type_off_t" >&6 +if test $ac_cv_type_off_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define off_t long +_ACEOF + +fi + + +# check header files +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 +echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 +if test "${ac_cv_header_time+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include + +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_time=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_time=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 +echo "${ECHO_T}$ac_cv_header_time" >&6 +if test $ac_cv_header_time = yes; then + +cat >>confdefs.h <<\_ACEOF +#define TIME_WITH_SYS_TIME 1 +_ACEOF + +fi + + + + + + + +for ac_header in stdio.h stdlib.h string.h unistd.h signal.h stdarg.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------------------ ## +## Report this to the GNU Fortran Runtime Library lists. ## +## ------------------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + +for ac_header in time.h sys/time.h sys/times.h sys/resource.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------------------ ## +## Report this to the GNU Fortran Runtime Library lists. ## +## ------------------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + +for ac_header in sys/types.h sys/stat.h sys/wait.h floatingpoint.h ieeefp.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------------------ ## +## Report this to the GNU Fortran Runtime Library lists. ## +## ------------------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + +for ac_header in fenv.h fptrap.h float.h execinfo.h pwd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------------------ ## +## Report this to the GNU Fortran Runtime Library lists. ## +## ------------------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +if test "${ac_cv_header_complex_h+set}" = set; then + echo "$as_me:$LINENO: checking for complex.h" >&5 +echo $ECHO_N "checking for complex.h... $ECHO_C" >&6 +if test "${ac_cv_header_complex_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_complex_h" >&5 +echo "${ECHO_T}$ac_cv_header_complex_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking complex.h usability" >&5 +echo $ECHO_N "checking complex.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking complex.h presence" >&5 +echo $ECHO_N "checking complex.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: complex.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: complex.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: complex.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: complex.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: complex.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: complex.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: complex.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: complex.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: complex.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: complex.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: complex.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: complex.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: complex.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: complex.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: complex.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: complex.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------------------ ## +## Report this to the GNU Fortran Runtime Library lists. ## +## ------------------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for complex.h" >&5 +echo $ECHO_N "checking for complex.h... $ECHO_C" >&6 +if test "${ac_cv_header_complex_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_complex_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_complex_h" >&5 +echo "${ECHO_T}$ac_cv_header_complex_h" >&6 + +fi +if test $ac_cv_header_complex_h = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_COMPLEX_H 1 +_ACEOF + +fi + + + + +inttype_headers=`echo inttypes.h sys/inttypes.h | sed -e 's/,/ /g'` + +acx_cv_header_stdint=stddef.h +acx_cv_header_stdint_kind="(already complete)" +for i in stdint.h $inttype_headers; do + unset ac_cv_type_uintptr_t + unset ac_cv_type_uintmax_t + unset ac_cv_type_int_least32_t + unset ac_cv_type_int_fast32_t + unset ac_cv_type_uint64_t + echo $ECHO_N "looking for a compliant stdint.h in $i, $ECHO_C" >&6 + echo "$as_me:$LINENO: checking for uintmax_t" >&5 +echo $ECHO_N "checking for uintmax_t... $ECHO_C" >&6 +if test "${ac_cv_type_uintmax_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include <$i> + +int +main () +{ +if ((uintmax_t *) 0) + return 0; +if (sizeof (uintmax_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_uintmax_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_uintmax_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_uintmax_t" >&5 +echo "${ECHO_T}$ac_cv_type_uintmax_t" >&6 +if test $ac_cv_type_uintmax_t = yes; then + acx_cv_header_stdint=$i +else + continue +fi + + echo "$as_me:$LINENO: checking for uintptr_t" >&5 +echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6 +if test "${ac_cv_type_uintptr_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include <$i> + +int +main () +{ +if ((uintptr_t *) 0) + return 0; +if (sizeof (uintptr_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_uintptr_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_uintptr_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5 +echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6 +if test $ac_cv_type_uintptr_t = yes; then + : +else + acx_cv_header_stdint_kind="(mostly complete)" +fi + + echo "$as_me:$LINENO: checking for int_least32_t" >&5 +echo $ECHO_N "checking for int_least32_t... $ECHO_C" >&6 +if test "${ac_cv_type_int_least32_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include <$i> + +int +main () +{ +if ((int_least32_t *) 0) + return 0; +if (sizeof (int_least32_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_int_least32_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_int_least32_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_int_least32_t" >&5 +echo "${ECHO_T}$ac_cv_type_int_least32_t" >&6 +if test $ac_cv_type_int_least32_t = yes; then + : +else + acx_cv_header_stdint_kind="(mostly complete)" +fi + + echo "$as_me:$LINENO: checking for int_fast32_t" >&5 +echo $ECHO_N "checking for int_fast32_t... $ECHO_C" >&6 +if test "${ac_cv_type_int_fast32_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include <$i> + +int +main () +{ +if ((int_fast32_t *) 0) + return 0; +if (sizeof (int_fast32_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_int_fast32_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_int_fast32_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_int_fast32_t" >&5 +echo "${ECHO_T}$ac_cv_type_int_fast32_t" >&6 +if test $ac_cv_type_int_fast32_t = yes; then + : +else + acx_cv_header_stdint_kind="(mostly complete)" +fi + + echo "$as_me:$LINENO: checking for uint64_t" >&5 +echo $ECHO_N "checking for uint64_t... $ECHO_C" >&6 +if test "${ac_cv_type_uint64_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include <$i> + +int +main () +{ +if ((uint64_t *) 0) + return 0; +if (sizeof (uint64_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_uint64_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_uint64_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5 +echo "${ECHO_T}$ac_cv_type_uint64_t" >&6 +if test $ac_cv_type_uint64_t = yes; then + : +else + acx_cv_header_stdint_kind="(lacks uint64_t)" +fi + + break +done +if test "$acx_cv_header_stdint" = stddef.h; then + acx_cv_header_stdint_kind="(lacks uintmax_t)" + for i in stdint.h $inttype_headers; do + unset ac_cv_type_uintptr_t + unset ac_cv_type_uint32_t + unset ac_cv_type_uint64_t + echo $ECHO_N "looking for an incomplete stdint.h in $i, $ECHO_C" >&6 + echo "$as_me:$LINENO: checking for uint32_t" >&5 +echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6 +if test "${ac_cv_type_uint32_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include <$i> + +int +main () +{ +if ((uint32_t *) 0) + return 0; +if (sizeof (uint32_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_uint32_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_uint32_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5 +echo "${ECHO_T}$ac_cv_type_uint32_t" >&6 +if test $ac_cv_type_uint32_t = yes; then + acx_cv_header_stdint=$i +else + continue +fi + + echo "$as_me:$LINENO: checking for uint64_t" >&5 +echo $ECHO_N "checking for uint64_t... $ECHO_C" >&6 +if test "${ac_cv_type_uint64_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include <$i> + +int +main () +{ +if ((uint64_t *) 0) + return 0; +if (sizeof (uint64_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_uint64_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_uint64_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5 +echo "${ECHO_T}$ac_cv_type_uint64_t" >&6 + + echo "$as_me:$LINENO: checking for uintptr_t" >&5 +echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6 +if test "${ac_cv_type_uintptr_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include <$i> + +int +main () +{ +if ((uintptr_t *) 0) + return 0; +if (sizeof (uintptr_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_uintptr_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_uintptr_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5 +echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6 + + break + done +fi +if test "$acx_cv_header_stdint" = stddef.h; then + acx_cv_header_stdint_kind="(u_intXX_t style)" + for i in sys/types.h $inttype_headers; do + unset ac_cv_type_u_int32_t + unset ac_cv_type_u_int64_t + echo $ECHO_N "looking for u_intXX_t types in $i, $ECHO_C" >&6 + echo "$as_me:$LINENO: checking for u_int32_t" >&5 +echo $ECHO_N "checking for u_int32_t... $ECHO_C" >&6 +if test "${ac_cv_type_u_int32_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include <$i> + +int +main () +{ +if ((u_int32_t *) 0) + return 0; +if (sizeof (u_int32_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_u_int32_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_u_int32_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_u_int32_t" >&5 +echo "${ECHO_T}$ac_cv_type_u_int32_t" >&6 +if test $ac_cv_type_u_int32_t = yes; then + acx_cv_header_stdint=$i +else + continue +fi + + echo "$as_me:$LINENO: checking for u_int64_t" >&5 +echo $ECHO_N "checking for u_int64_t... $ECHO_C" >&6 +if test "${ac_cv_type_u_int64_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include <$i> + +int +main () +{ +if ((u_int64_t *) 0) + return 0; +if (sizeof (u_int64_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_u_int64_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_u_int64_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_u_int64_t" >&5 +echo "${ECHO_T}$ac_cv_type_u_int64_t" >&6 + + break + done +fi +if test "$acx_cv_header_stdint" = stddef.h; then + acx_cv_header_stdint_kind="(using manual detection)" +fi + +test -z "$ac_cv_type_uintptr_t" && ac_cv_type_uintptr_t=no +test -z "$ac_cv_type_uint64_t" && ac_cv_type_uint64_t=no +test -z "$ac_cv_type_u_int64_t" && ac_cv_type_u_int64_t=no +test -z "$ac_cv_type_int_least32_t" && ac_cv_type_int_least32_t=no +test -z "$ac_cv_type_int_fast32_t" && ac_cv_type_int_fast32_t=no + +# ----------------- Summarize what we found so far + +echo "$as_me:$LINENO: checking what to include in gstdint.h" >&5 +echo $ECHO_N "checking what to include in gstdint.h... $ECHO_C" >&6 + +case `$as_basename gstdint.h || +$as_expr X/gstdint.h : '.*/\([^/][^/]*\)/*$' \| \ + Xgstdint.h : 'X\(//\)$' \| \ + Xgstdint.h : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/gstdint.h | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` in + stdint.h) { echo "$as_me:$LINENO: WARNING: are you sure you want it there?" >&5 +echo "$as_me: WARNING: are you sure you want it there?" >&2;} ;; + inttypes.h) { echo "$as_me:$LINENO: WARNING: are you sure you want it there?" >&5 +echo "$as_me: WARNING: are you sure you want it there?" >&2;} ;; + *) ;; +esac + +echo "$as_me:$LINENO: result: $acx_cv_header_stdint $acx_cv_header_stdint_kind" >&5 +echo "${ECHO_T}$acx_cv_header_stdint $acx_cv_header_stdint_kind" >&6 + +# ----------------- done included file, check C basic types -------- + +# Lacking an uintptr_t? Test size of void * +case "$acx_cv_header_stdint:$ac_cv_type_uintptr_t" in + stddef.h:* | *:no) echo "$as_me:$LINENO: checking for void *" >&5 +echo $ECHO_N "checking for void *... $ECHO_C" >&6 +if test "${ac_cv_type_void_p+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((void * *) 0) + return 0; +if (sizeof (void *)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_void_p=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_void_p=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_void_p" >&5 +echo "${ECHO_T}$ac_cv_type_void_p" >&6 + +echo "$as_me:$LINENO: checking size of void *" >&5 +echo $ECHO_N "checking size of void *... $ECHO_C" >&6 +if test "${ac_cv_sizeof_void_p+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$ac_cv_type_void_p" = yes; then + # The cast to unsigned long works around a bug in the HP C Compiler + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. + # This bug is HP SR number 8606223364. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (void *))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (void *))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (void *))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (void *))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (void *))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_void_p=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (void *), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (void *), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } ;; +esac +else + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +long longval () { return (long) (sizeof (void *)); } +unsigned long ulongval () { return (long) (sizeof (void *)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (void *))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (void *)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (void *)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_void_p=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (void *), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (void *), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +rm -f conftest.val +else + ac_cv_sizeof_void_p=0 +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5 +echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6 +cat >>confdefs.h <<_ACEOF +#define SIZEOF_VOID_P $ac_cv_sizeof_void_p +_ACEOF + + ;; +esac + +# Lacking an uint64_t? Test size of long +case "$acx_cv_header_stdint:$ac_cv_type_uint64_t:$ac_cv_type_u_int64_t" in + stddef.h:*:* | *:no:no) echo "$as_me:$LINENO: checking for long" >&5 +echo $ECHO_N "checking for long... $ECHO_C" >&6 +if test "${ac_cv_type_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((long *) 0) + return 0; +if (sizeof (long)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_long=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_long=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 +echo "${ECHO_T}$ac_cv_type_long" >&6 + +echo "$as_me:$LINENO: checking size of long" >&5 +echo $ECHO_N "checking size of long... $ECHO_C" >&6 +if test "${ac_cv_sizeof_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$ac_cv_type_long" = yes; then + # The cast to unsigned long works around a bug in the HP C Compiler + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. + # This bug is HP SR number 8606223364. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_long=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } ;; +esac +else + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +long longval () { return (long) (sizeof (long)); } +unsigned long ulongval () { return (long) (sizeof (long)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (long))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (long)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (long)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_long=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +rm -f conftest.val +else + ac_cv_sizeof_long=0 +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 +echo "${ECHO_T}$ac_cv_sizeof_long" >&6 +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG $ac_cv_sizeof_long +_ACEOF + + ;; +esac + +if test $acx_cv_header_stdint = stddef.h; then + # Lacking a good header? Test size of everything and deduce all types. + echo "$as_me:$LINENO: checking for int" >&5 +echo $ECHO_N "checking for int... $ECHO_C" >&6 +if test "${ac_cv_type_int+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((int *) 0) + return 0; +if (sizeof (int)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_int=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_int=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 +echo "${ECHO_T}$ac_cv_type_int" >&6 + +echo "$as_me:$LINENO: checking size of int" >&5 +echo $ECHO_N "checking size of int... $ECHO_C" >&6 +if test "${ac_cv_sizeof_int+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$ac_cv_type_int" = yes; then + # The cast to unsigned long works around a bug in the HP C Compiler + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. + # This bug is HP SR number 8606223364. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_int=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } ;; +esac +else + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +long longval () { return (long) (sizeof (int)); } +unsigned long ulongval () { return (long) (sizeof (int)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (int))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (int)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (int)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_int=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +rm -f conftest.val +else + ac_cv_sizeof_int=0 +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 +echo "${ECHO_T}$ac_cv_sizeof_int" >&6 +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT $ac_cv_sizeof_int +_ACEOF + + + echo "$as_me:$LINENO: checking for short" >&5 +echo $ECHO_N "checking for short... $ECHO_C" >&6 +if test "${ac_cv_type_short+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((short *) 0) + return 0; +if (sizeof (short)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_short=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_short=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5 +echo "${ECHO_T}$ac_cv_type_short" >&6 + +echo "$as_me:$LINENO: checking size of short" >&5 +echo $ECHO_N "checking size of short... $ECHO_C" >&6 +if test "${ac_cv_sizeof_short+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$ac_cv_type_short" = yes; then + # The cast to unsigned long works around a bug in the HP C Compiler + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. + # This bug is HP SR number 8606223364. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_short=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } ;; +esac +else + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +long longval () { return (long) (sizeof (short)); } +unsigned long ulongval () { return (long) (sizeof (short)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (short))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (short)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (short)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_short=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +rm -f conftest.val +else + ac_cv_sizeof_short=0 +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5 +echo "${ECHO_T}$ac_cv_sizeof_short" >&6 +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SHORT $ac_cv_sizeof_short +_ACEOF + + + echo "$as_me:$LINENO: checking for char" >&5 +echo $ECHO_N "checking for char... $ECHO_C" >&6 +if test "${ac_cv_type_char+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((char *) 0) + return 0; +if (sizeof (char)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_char=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_char=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5 +echo "${ECHO_T}$ac_cv_type_char" >&6 + +echo "$as_me:$LINENO: checking size of char" >&5 +echo $ECHO_N "checking size of char... $ECHO_C" >&6 +if test "${ac_cv_sizeof_char+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$ac_cv_type_char" = yes; then + # The cast to unsigned long works around a bug in the HP C Compiler + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. + # This bug is HP SR number 8606223364. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (char))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (char))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (char))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_char=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (char), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } ;; +esac +else + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +long longval () { return (long) (sizeof (char)); } +unsigned long ulongval () { return (long) (sizeof (char)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (char))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (char)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (char)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_char=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (char), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +rm -f conftest.val +else + ac_cv_sizeof_char=0 +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5 +echo "${ECHO_T}$ac_cv_sizeof_char" >&6 +cat >>confdefs.h <<_ACEOF +#define SIZEOF_CHAR $ac_cv_sizeof_char +_ACEOF + + + + echo "$as_me:$LINENO: checking for type equivalent to int8_t" >&5 +echo $ECHO_N "checking for type equivalent to int8_t... $ECHO_C" >&6 + case "$ac_cv_sizeof_char" in + 1) acx_cv_type_int8_t=char ;; + *) { { echo "$as_me:$LINENO: error: no 8-bit type" >&5 +echo "$as_me: error: no 8-bit type" >&2;} + { (exit please report a bug); exit please report a bug; }; } + esac + echo "$as_me:$LINENO: result: $acx_cv_type_int8_t" >&5 +echo "${ECHO_T}$acx_cv_type_int8_t" >&6 + + echo "$as_me:$LINENO: checking for type equivalent to int16_t" >&5 +echo $ECHO_N "checking for type equivalent to int16_t... $ECHO_C" >&6 + case "$ac_cv_sizeof_int:$ac_cv_sizeof_short" in + 2:*) acx_cv_type_int16_t=int ;; + *:2) acx_cv_type_int16_t=short ;; + *) { { echo "$as_me:$LINENO: error: no 16-bit type" >&5 +echo "$as_me: error: no 16-bit type" >&2;} + { (exit please report a bug); exit please report a bug; }; } + esac + echo "$as_me:$LINENO: result: $acx_cv_type_int16_t" >&5 +echo "${ECHO_T}$acx_cv_type_int16_t" >&6 + + echo "$as_me:$LINENO: checking for type equivalent to int32_t" >&5 +echo $ECHO_N "checking for type equivalent to int32_t... $ECHO_C" >&6 + case "$ac_cv_sizeof_int:$ac_cv_sizeof_long" in + 4:*) acx_cv_type_int32_t=int ;; + *:4) acx_cv_type_int32_t=long ;; + *) { { echo "$as_me:$LINENO: error: no 32-bit type" >&5 +echo "$as_me: error: no 32-bit type" >&2;} + { (exit please report a bug); exit please report a bug; }; } + esac + echo "$as_me:$LINENO: result: $acx_cv_type_int32_t" >&5 +echo "${ECHO_T}$acx_cv_type_int32_t" >&6 +fi + +# These tests are here to make the output prettier + +if test "$ac_cv_type_uint64_t" != yes && test "$ac_cv_type_u_int64_t" != yes; then + case "$ac_cv_sizeof_long" in + 8) acx_cv_type_int64_t=long ;; + esac + echo "$as_me:$LINENO: checking for type equivalent to int64_t" >&5 +echo $ECHO_N "checking for type equivalent to int64_t... $ECHO_C" >&6 + echo "$as_me:$LINENO: result: ${acx_cv_type_int64_t-'using preprocessor symbols'}" >&5 +echo "${ECHO_T}${acx_cv_type_int64_t-'using preprocessor symbols'}" >&6 +fi + +# Now we can use the above types + +if test "$ac_cv_type_uintptr_t" != yes; then + echo "$as_me:$LINENO: checking for type equivalent to intptr_t" >&5 +echo $ECHO_N "checking for type equivalent to intptr_t... $ECHO_C" >&6 + case $ac_cv_sizeof_void_p in + 2) acx_cv_type_intptr_t=int16_t ;; + 4) acx_cv_type_intptr_t=int32_t ;; + 8) acx_cv_type_intptr_t=int64_t ;; + *) { { echo "$as_me:$LINENO: error: no equivalent for intptr_t" >&5 +echo "$as_me: error: no equivalent for intptr_t" >&2;} + { (exit please report a bug); exit please report a bug; }; } + esac + echo "$as_me:$LINENO: result: $acx_cv_type_intptr_t" >&5 +echo "${ECHO_T}$acx_cv_type_intptr_t" >&6 +fi + +# ----------------- done all checks, emit header ------------- + ac_config_commands="$ac_config_commands gstdint.h" + + + + +echo "$as_me:$LINENO: checking for struct stat.st_blksize" >&5 +echo $ECHO_N "checking for struct stat.st_blksize... $ECHO_C" >&6 +if test "${ac_cv_member_struct_stat_st_blksize+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static struct stat ac_aggr; +if (ac_aggr.st_blksize) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_struct_stat_st_blksize=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static struct stat ac_aggr; +if (sizeof ac_aggr.st_blksize) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_struct_stat_st_blksize=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_member_struct_stat_st_blksize=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_blksize" >&5 +echo "${ECHO_T}$ac_cv_member_struct_stat_st_blksize" >&6 +if test $ac_cv_member_struct_stat_st_blksize = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 +_ACEOF + + +fi + +echo "$as_me:$LINENO: checking for struct stat.st_blocks" >&5 +echo $ECHO_N "checking for struct stat.st_blocks... $ECHO_C" >&6 +if test "${ac_cv_member_struct_stat_st_blocks+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static struct stat ac_aggr; +if (ac_aggr.st_blocks) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_struct_stat_st_blocks=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static struct stat ac_aggr; +if (sizeof ac_aggr.st_blocks) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_struct_stat_st_blocks=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_member_struct_stat_st_blocks=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_blocks" >&5 +echo "${ECHO_T}$ac_cv_member_struct_stat_st_blocks" >&6 +if test $ac_cv_member_struct_stat_st_blocks = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BLOCKS 1 +_ACEOF + + +fi + +echo "$as_me:$LINENO: checking for struct stat.st_rdev" >&5 +echo $ECHO_N "checking for struct stat.st_rdev... $ECHO_C" >&6 +if test "${ac_cv_member_struct_stat_st_rdev+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static struct stat ac_aggr; +if (ac_aggr.st_rdev) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_struct_stat_st_rdev=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static struct stat ac_aggr; +if (sizeof ac_aggr.st_rdev) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_member_struct_stat_st_rdev=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_member_struct_stat_st_rdev=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_rdev" >&5 +echo "${ECHO_T}$ac_cv_member_struct_stat_st_rdev" >&6 +if test $ac_cv_member_struct_stat_st_rdev = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_RDEV 1 +_ACEOF + + +fi + + +# Check for library functions. + + + + + + + + +for ac_func in getrusage times mkstemp strtof strtold snprintf ftruncate chsize +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + + + + + +for ac_func in chdir strerror getlogin gethostname kill link symlink perror +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + + + + + + + +for ac_func in sleep time ttyname signal alarm ctime clock access fork execl +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + + + + + + +for ac_func in wait setmode execvp pipe dup2 close fdopen strcasestr getrlimit +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + + + + + +for ac_func in gettimeofday stat fstat lstat getpwuid vsnprintf dup getcwd +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +# Check for glibc backtrace functions + + +for ac_func in backtrace backtrace_symbols +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +# Check for types +echo "$as_me:$LINENO: checking for intptr_t" >&5 +echo $ECHO_N "checking for intptr_t... $ECHO_C" >&6 +if test "${ac_cv_type_intptr_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((intptr_t *) 0) + return 0; +if (sizeof (intptr_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_intptr_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_intptr_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_intptr_t" >&5 +echo "${ECHO_T}$ac_cv_type_intptr_t" >&6 +if test $ac_cv_type_intptr_t = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_INTPTR_T 1 +_ACEOF + + +fi + +echo "$as_me:$LINENO: checking for uintptr_t" >&5 +echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6 +if test "${ac_cv_type_uintptr_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((uintptr_t *) 0) + return 0; +if (sizeof (uintptr_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_uintptr_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_uintptr_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5 +echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6 +if test $ac_cv_type_uintptr_t = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_UINTPTR_T 1 +_ACEOF + + +fi + + +# Check libc for getgid, getpid, getuid +echo "$as_me:$LINENO: checking for getgid in -lc" >&5 +echo $ECHO_N "checking for getgid in -lc... $ECHO_C" >&6 +if test "${ac_cv_lib_c_getgid+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char getgid (); +int +main () +{ +getgid (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_c_getgid=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_c_getgid=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_c_getgid" >&5 +echo "${ECHO_T}$ac_cv_lib_c_getgid" >&6 +if test $ac_cv_lib_c_getgid = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GETGID 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for getpid in -lc" >&5 +echo $ECHO_N "checking for getpid in -lc... $ECHO_C" >&6 +if test "${ac_cv_lib_c_getpid+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char getpid (); +int +main () +{ +getpid (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_c_getpid=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_c_getpid=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_c_getpid" >&5 +echo "${ECHO_T}$ac_cv_lib_c_getpid" >&6 +if test $ac_cv_lib_c_getpid = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GETPID 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for getppid in -lc" >&5 +echo $ECHO_N "checking for getppid in -lc... $ECHO_C" >&6 +if test "${ac_cv_lib_c_getppid+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char getppid (); +int +main () +{ +getppid (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_c_getppid=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_c_getppid=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_c_getppid" >&5 +echo "${ECHO_T}$ac_cv_lib_c_getppid" >&6 +if test $ac_cv_lib_c_getppid = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GETPPID 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for getuid in -lc" >&5 +echo $ECHO_N "checking for getuid in -lc... $ECHO_C" >&6 +if test "${ac_cv_lib_c_getuid+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char getuid (); +int +main () +{ +getuid (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_c_getuid=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_c_getuid=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_c_getuid" >&5 +echo "${ECHO_T}$ac_cv_lib_c_getuid" >&6 +if test $ac_cv_lib_c_getuid = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GETUID 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for geteuid in -lc" >&5 +echo $ECHO_N "checking for geteuid in -lc... $ECHO_C" >&6 +if test "${ac_cv_lib_c_geteuid+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char geteuid (); +int +main () +{ +geteuid (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_c_geteuid=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_c_geteuid=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_c_geteuid" >&5 +echo "${ECHO_T}$ac_cv_lib_c_geteuid" >&6 +if test $ac_cv_lib_c_geteuid = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GETEUID 1 +_ACEOF + +fi + + +# Check for C99 (and other IEEE) math functions +echo "$as_me:$LINENO: checking for acosf in -lm" >&5 +echo $ECHO_N "checking for acosf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_acosf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char acosf (); +int +main () +{ +acosf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_acosf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_acosf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_acosf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_acosf" >&6 +if test $ac_cv_lib_m_acosf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ACOSF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for acos in -lm" >&5 +echo $ECHO_N "checking for acos in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_acos+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char acos (); +int +main () +{ +acos (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_acos=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_acos=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_acos" >&5 +echo "${ECHO_T}$ac_cv_lib_m_acos" >&6 +if test $ac_cv_lib_m_acos = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ACOS 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for acosl in -lm" >&5 +echo $ECHO_N "checking for acosl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_acosl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char acosl (); +int +main () +{ +acosl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_acosl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_acosl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_acosl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_acosl" >&6 +if test $ac_cv_lib_m_acosl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ACOSL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for acoshf in -lm" >&5 +echo $ECHO_N "checking for acoshf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_acoshf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char acoshf (); +int +main () +{ +acoshf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_acoshf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_acoshf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_acoshf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_acoshf" >&6 +if test $ac_cv_lib_m_acoshf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ACOSHF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for acosh in -lm" >&5 +echo $ECHO_N "checking for acosh in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_acosh+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char acosh (); +int +main () +{ +acosh (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_acosh=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_acosh=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_acosh" >&5 +echo "${ECHO_T}$ac_cv_lib_m_acosh" >&6 +if test $ac_cv_lib_m_acosh = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ACOSH 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for acoshl in -lm" >&5 +echo $ECHO_N "checking for acoshl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_acoshl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char acoshl (); +int +main () +{ +acoshl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_acoshl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_acoshl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_acoshl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_acoshl" >&6 +if test $ac_cv_lib_m_acoshl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ACOSHL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for asinf in -lm" >&5 +echo $ECHO_N "checking for asinf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_asinf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char asinf (); +int +main () +{ +asinf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_asinf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_asinf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_asinf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_asinf" >&6 +if test $ac_cv_lib_m_asinf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ASINF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for asin in -lm" >&5 +echo $ECHO_N "checking for asin in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_asin+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char asin (); +int +main () +{ +asin (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_asin=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_asin=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_asin" >&5 +echo "${ECHO_T}$ac_cv_lib_m_asin" >&6 +if test $ac_cv_lib_m_asin = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ASIN 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for asinl in -lm" >&5 +echo $ECHO_N "checking for asinl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_asinl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char asinl (); +int +main () +{ +asinl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_asinl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_asinl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_asinl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_asinl" >&6 +if test $ac_cv_lib_m_asinl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ASINL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for asinhf in -lm" >&5 +echo $ECHO_N "checking for asinhf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_asinhf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char asinhf (); +int +main () +{ +asinhf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_asinhf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_asinhf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_asinhf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_asinhf" >&6 +if test $ac_cv_lib_m_asinhf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ASINHF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for asinh in -lm" >&5 +echo $ECHO_N "checking for asinh in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_asinh+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char asinh (); +int +main () +{ +asinh (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_asinh=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_asinh=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_asinh" >&5 +echo "${ECHO_T}$ac_cv_lib_m_asinh" >&6 +if test $ac_cv_lib_m_asinh = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ASINH 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for asinhl in -lm" >&5 +echo $ECHO_N "checking for asinhl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_asinhl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char asinhl (); +int +main () +{ +asinhl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_asinhl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_asinhl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_asinhl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_asinhl" >&6 +if test $ac_cv_lib_m_asinhl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ASINHL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for atan2f in -lm" >&5 +echo $ECHO_N "checking for atan2f in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_atan2f+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char atan2f (); +int +main () +{ +atan2f (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_atan2f=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_atan2f=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_atan2f" >&5 +echo "${ECHO_T}$ac_cv_lib_m_atan2f" >&6 +if test $ac_cv_lib_m_atan2f = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ATAN2F 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for atan2 in -lm" >&5 +echo $ECHO_N "checking for atan2 in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_atan2+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char atan2 (); +int +main () +{ +atan2 (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_atan2=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_atan2=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_atan2" >&5 +echo "${ECHO_T}$ac_cv_lib_m_atan2" >&6 +if test $ac_cv_lib_m_atan2 = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ATAN2 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for atan2l in -lm" >&5 +echo $ECHO_N "checking for atan2l in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_atan2l+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char atan2l (); +int +main () +{ +atan2l (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_atan2l=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_atan2l=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_atan2l" >&5 +echo "${ECHO_T}$ac_cv_lib_m_atan2l" >&6 +if test $ac_cv_lib_m_atan2l = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ATAN2L 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for atanf in -lm" >&5 +echo $ECHO_N "checking for atanf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_atanf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char atanf (); +int +main () +{ +atanf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_atanf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_atanf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_atanf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_atanf" >&6 +if test $ac_cv_lib_m_atanf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ATANF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for atan in -lm" >&5 +echo $ECHO_N "checking for atan in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_atan+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char atan (); +int +main () +{ +atan (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_atan=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_atan=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_atan" >&5 +echo "${ECHO_T}$ac_cv_lib_m_atan" >&6 +if test $ac_cv_lib_m_atan = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ATAN 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for atanl in -lm" >&5 +echo $ECHO_N "checking for atanl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_atanl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char atanl (); +int +main () +{ +atanl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_atanl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_atanl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_atanl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_atanl" >&6 +if test $ac_cv_lib_m_atanl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ATANL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for atanhf in -lm" >&5 +echo $ECHO_N "checking for atanhf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_atanhf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char atanhf (); +int +main () +{ +atanhf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_atanhf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_atanhf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_atanhf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_atanhf" >&6 +if test $ac_cv_lib_m_atanhf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ATANHF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for atanh in -lm" >&5 +echo $ECHO_N "checking for atanh in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_atanh+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char atanh (); +int +main () +{ +atanh (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_atanh=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_atanh=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_atanh" >&5 +echo "${ECHO_T}$ac_cv_lib_m_atanh" >&6 +if test $ac_cv_lib_m_atanh = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ATANH 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for atanhl in -lm" >&5 +echo $ECHO_N "checking for atanhl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_atanhl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char atanhl (); +int +main () +{ +atanhl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_atanhl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_atanhl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_atanhl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_atanhl" >&6 +if test $ac_cv_lib_m_atanhl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ATANHL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for cargf in -lm" >&5 +echo $ECHO_N "checking for cargf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_cargf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char cargf (); +int +main () +{ +cargf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_cargf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_cargf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_cargf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_cargf" >&6 +if test $ac_cv_lib_m_cargf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CARGF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for carg in -lm" >&5 +echo $ECHO_N "checking for carg in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_carg+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char carg (); +int +main () +{ +carg (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_carg=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_carg=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_carg" >&5 +echo "${ECHO_T}$ac_cv_lib_m_carg" >&6 +if test $ac_cv_lib_m_carg = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CARG 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for cargl in -lm" >&5 +echo $ECHO_N "checking for cargl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_cargl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char cargl (); +int +main () +{ +cargl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_cargl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_cargl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_cargl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_cargl" >&6 +if test $ac_cv_lib_m_cargl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CARGL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ceilf in -lm" >&5 +echo $ECHO_N "checking for ceilf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ceilf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ceilf (); +int +main () +{ +ceilf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ceilf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ceilf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ceilf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ceilf" >&6 +if test $ac_cv_lib_m_ceilf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CEILF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ceil in -lm" >&5 +echo $ECHO_N "checking for ceil in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ceil+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ceil (); +int +main () +{ +ceil (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ceil=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ceil=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ceil" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ceil" >&6 +if test $ac_cv_lib_m_ceil = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CEIL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ceill in -lm" >&5 +echo $ECHO_N "checking for ceill in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ceill+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ceill (); +int +main () +{ +ceill (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ceill=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ceill=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ceill" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ceill" >&6 +if test $ac_cv_lib_m_ceill = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CEILL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for copysignf in -lm" >&5 +echo $ECHO_N "checking for copysignf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_copysignf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char copysignf (); +int +main () +{ +copysignf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_copysignf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_copysignf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_copysignf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_copysignf" >&6 +if test $ac_cv_lib_m_copysignf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_COPYSIGNF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for copysign in -lm" >&5 +echo $ECHO_N "checking for copysign in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_copysign+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char copysign (); +int +main () +{ +copysign (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_copysign=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_copysign=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_copysign" >&5 +echo "${ECHO_T}$ac_cv_lib_m_copysign" >&6 +if test $ac_cv_lib_m_copysign = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_COPYSIGN 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for copysignl in -lm" >&5 +echo $ECHO_N "checking for copysignl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_copysignl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char copysignl (); +int +main () +{ +copysignl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_copysignl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_copysignl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_copysignl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_copysignl" >&6 +if test $ac_cv_lib_m_copysignl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_COPYSIGNL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for cosf in -lm" >&5 +echo $ECHO_N "checking for cosf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_cosf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char cosf (); +int +main () +{ +cosf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_cosf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_cosf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_cosf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_cosf" >&6 +if test $ac_cv_lib_m_cosf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_COSF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for cos in -lm" >&5 +echo $ECHO_N "checking for cos in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_cos+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char cos (); +int +main () +{ +cos (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_cos=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_cos=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_cos" >&5 +echo "${ECHO_T}$ac_cv_lib_m_cos" >&6 +if test $ac_cv_lib_m_cos = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_COS 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for cosl in -lm" >&5 +echo $ECHO_N "checking for cosl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_cosl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char cosl (); +int +main () +{ +cosl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_cosl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_cosl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_cosl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_cosl" >&6 +if test $ac_cv_lib_m_cosl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_COSL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ccosf in -lm" >&5 +echo $ECHO_N "checking for ccosf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ccosf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ccosf (); +int +main () +{ +ccosf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ccosf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ccosf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ccosf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ccosf" >&6 +if test $ac_cv_lib_m_ccosf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CCOSF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ccos in -lm" >&5 +echo $ECHO_N "checking for ccos in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ccos+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ccos (); +int +main () +{ +ccos (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ccos=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ccos=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ccos" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ccos" >&6 +if test $ac_cv_lib_m_ccos = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CCOS 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ccosl in -lm" >&5 +echo $ECHO_N "checking for ccosl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ccosl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ccosl (); +int +main () +{ +ccosl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ccosl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ccosl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ccosl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ccosl" >&6 +if test $ac_cv_lib_m_ccosl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CCOSL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for coshf in -lm" >&5 +echo $ECHO_N "checking for coshf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_coshf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char coshf (); +int +main () +{ +coshf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_coshf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_coshf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_coshf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_coshf" >&6 +if test $ac_cv_lib_m_coshf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_COSHF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for cosh in -lm" >&5 +echo $ECHO_N "checking for cosh in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_cosh+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char cosh (); +int +main () +{ +cosh (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_cosh=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_cosh=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_cosh" >&5 +echo "${ECHO_T}$ac_cv_lib_m_cosh" >&6 +if test $ac_cv_lib_m_cosh = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_COSH 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for coshl in -lm" >&5 +echo $ECHO_N "checking for coshl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_coshl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char coshl (); +int +main () +{ +coshl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_coshl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_coshl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_coshl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_coshl" >&6 +if test $ac_cv_lib_m_coshl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_COSHL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ccoshf in -lm" >&5 +echo $ECHO_N "checking for ccoshf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ccoshf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ccoshf (); +int +main () +{ +ccoshf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ccoshf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ccoshf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ccoshf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ccoshf" >&6 +if test $ac_cv_lib_m_ccoshf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CCOSHF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ccosh in -lm" >&5 +echo $ECHO_N "checking for ccosh in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ccosh+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ccosh (); +int +main () +{ +ccosh (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ccosh=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ccosh=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ccosh" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ccosh" >&6 +if test $ac_cv_lib_m_ccosh = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CCOSH 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ccoshl in -lm" >&5 +echo $ECHO_N "checking for ccoshl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ccoshl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ccoshl (); +int +main () +{ +ccoshl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ccoshl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ccoshl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ccoshl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ccoshl" >&6 +if test $ac_cv_lib_m_ccoshl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CCOSHL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for expf in -lm" >&5 +echo $ECHO_N "checking for expf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_expf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char expf (); +int +main () +{ +expf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_expf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_expf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_expf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_expf" >&6 +if test $ac_cv_lib_m_expf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_EXPF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for exp in -lm" >&5 +echo $ECHO_N "checking for exp in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_exp+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char exp (); +int +main () +{ +exp (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_exp=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_exp=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_exp" >&5 +echo "${ECHO_T}$ac_cv_lib_m_exp" >&6 +if test $ac_cv_lib_m_exp = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_EXP 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for expl in -lm" >&5 +echo $ECHO_N "checking for expl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_expl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char expl (); +int +main () +{ +expl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_expl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_expl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_expl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_expl" >&6 +if test $ac_cv_lib_m_expl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_EXPL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for cexpf in -lm" >&5 +echo $ECHO_N "checking for cexpf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_cexpf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char cexpf (); +int +main () +{ +cexpf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_cexpf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_cexpf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_cexpf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_cexpf" >&6 +if test $ac_cv_lib_m_cexpf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CEXPF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for cexp in -lm" >&5 +echo $ECHO_N "checking for cexp in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_cexp+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char cexp (); +int +main () +{ +cexp (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_cexp=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_cexp=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_cexp" >&5 +echo "${ECHO_T}$ac_cv_lib_m_cexp" >&6 +if test $ac_cv_lib_m_cexp = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CEXP 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for cexpl in -lm" >&5 +echo $ECHO_N "checking for cexpl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_cexpl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char cexpl (); +int +main () +{ +cexpl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_cexpl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_cexpl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_cexpl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_cexpl" >&6 +if test $ac_cv_lib_m_cexpl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CEXPL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for fabsf in -lm" >&5 +echo $ECHO_N "checking for fabsf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_fabsf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char fabsf (); +int +main () +{ +fabsf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_fabsf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_fabsf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_fabsf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_fabsf" >&6 +if test $ac_cv_lib_m_fabsf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FABSF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for fabs in -lm" >&5 +echo $ECHO_N "checking for fabs in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_fabs+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char fabs (); +int +main () +{ +fabs (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_fabs=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_fabs=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_fabs" >&5 +echo "${ECHO_T}$ac_cv_lib_m_fabs" >&6 +if test $ac_cv_lib_m_fabs = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FABS 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for fabsl in -lm" >&5 +echo $ECHO_N "checking for fabsl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_fabsl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char fabsl (); +int +main () +{ +fabsl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_fabsl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_fabsl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_fabsl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_fabsl" >&6 +if test $ac_cv_lib_m_fabsl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FABSL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for cabsf in -lm" >&5 +echo $ECHO_N "checking for cabsf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_cabsf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char cabsf (); +int +main () +{ +cabsf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_cabsf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_cabsf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_cabsf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_cabsf" >&6 +if test $ac_cv_lib_m_cabsf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CABSF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for cabs in -lm" >&5 +echo $ECHO_N "checking for cabs in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_cabs+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char cabs (); +int +main () +{ +cabs (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_cabs=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_cabs=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_cabs" >&5 +echo "${ECHO_T}$ac_cv_lib_m_cabs" >&6 +if test $ac_cv_lib_m_cabs = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CABS 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for cabsl in -lm" >&5 +echo $ECHO_N "checking for cabsl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_cabsl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char cabsl (); +int +main () +{ +cabsl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_cabsl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_cabsl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_cabsl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_cabsl" >&6 +if test $ac_cv_lib_m_cabsl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CABSL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for floorf in -lm" >&5 +echo $ECHO_N "checking for floorf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_floorf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char floorf (); +int +main () +{ +floorf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_floorf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_floorf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_floorf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_floorf" >&6 +if test $ac_cv_lib_m_floorf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FLOORF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for floor in -lm" >&5 +echo $ECHO_N "checking for floor in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_floor+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char floor (); +int +main () +{ +floor (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_floor=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_floor=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_floor" >&5 +echo "${ECHO_T}$ac_cv_lib_m_floor" >&6 +if test $ac_cv_lib_m_floor = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FLOOR 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for floorl in -lm" >&5 +echo $ECHO_N "checking for floorl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_floorl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char floorl (); +int +main () +{ +floorl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_floorl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_floorl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_floorl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_floorl" >&6 +if test $ac_cv_lib_m_floorl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FLOORL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for fmodf in -lm" >&5 +echo $ECHO_N "checking for fmodf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_fmodf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char fmodf (); +int +main () +{ +fmodf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_fmodf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_fmodf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_fmodf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_fmodf" >&6 +if test $ac_cv_lib_m_fmodf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FMODF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for fmod in -lm" >&5 +echo $ECHO_N "checking for fmod in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_fmod+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char fmod (); +int +main () +{ +fmod (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_fmod=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_fmod=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_fmod" >&5 +echo "${ECHO_T}$ac_cv_lib_m_fmod" >&6 +if test $ac_cv_lib_m_fmod = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FMOD 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for fmodl in -lm" >&5 +echo $ECHO_N "checking for fmodl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_fmodl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char fmodl (); +int +main () +{ +fmodl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_fmodl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_fmodl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_fmodl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_fmodl" >&6 +if test $ac_cv_lib_m_fmodl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FMODL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for frexpf in -lm" >&5 +echo $ECHO_N "checking for frexpf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_frexpf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char frexpf (); +int +main () +{ +frexpf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_frexpf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_frexpf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_frexpf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_frexpf" >&6 +if test $ac_cv_lib_m_frexpf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FREXPF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for frexp in -lm" >&5 +echo $ECHO_N "checking for frexp in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_frexp+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char frexp (); +int +main () +{ +frexp (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_frexp=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_frexp=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_frexp" >&5 +echo "${ECHO_T}$ac_cv_lib_m_frexp" >&6 +if test $ac_cv_lib_m_frexp = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FREXP 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for frexpl in -lm" >&5 +echo $ECHO_N "checking for frexpl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_frexpl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char frexpl (); +int +main () +{ +frexpl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_frexpl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_frexpl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_frexpl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_frexpl" >&6 +if test $ac_cv_lib_m_frexpl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FREXPL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for hypotf in -lm" >&5 +echo $ECHO_N "checking for hypotf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_hypotf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char hypotf (); +int +main () +{ +hypotf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_hypotf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_hypotf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_hypotf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_hypotf" >&6 +if test $ac_cv_lib_m_hypotf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_HYPOTF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for hypot in -lm" >&5 +echo $ECHO_N "checking for hypot in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_hypot+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char hypot (); +int +main () +{ +hypot (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_hypot=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_hypot=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_hypot" >&5 +echo "${ECHO_T}$ac_cv_lib_m_hypot" >&6 +if test $ac_cv_lib_m_hypot = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_HYPOT 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for hypotl in -lm" >&5 +echo $ECHO_N "checking for hypotl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_hypotl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char hypotl (); +int +main () +{ +hypotl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_hypotl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_hypotl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_hypotl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_hypotl" >&6 +if test $ac_cv_lib_m_hypotl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_HYPOTL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ldexpf in -lm" >&5 +echo $ECHO_N "checking for ldexpf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ldexpf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ldexpf (); +int +main () +{ +ldexpf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ldexpf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ldexpf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ldexpf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ldexpf" >&6 +if test $ac_cv_lib_m_ldexpf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LDEXPF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ldexp in -lm" >&5 +echo $ECHO_N "checking for ldexp in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ldexp+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ldexp (); +int +main () +{ +ldexp (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ldexp=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ldexp=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ldexp" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ldexp" >&6 +if test $ac_cv_lib_m_ldexp = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LDEXP 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ldexpl in -lm" >&5 +echo $ECHO_N "checking for ldexpl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ldexpl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ldexpl (); +int +main () +{ +ldexpl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ldexpl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ldexpl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ldexpl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ldexpl" >&6 +if test $ac_cv_lib_m_ldexpl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LDEXPL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for logf in -lm" >&5 +echo $ECHO_N "checking for logf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_logf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char logf (); +int +main () +{ +logf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_logf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_logf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_logf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_logf" >&6 +if test $ac_cv_lib_m_logf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LOGF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for log in -lm" >&5 +echo $ECHO_N "checking for log in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_log+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char log (); +int +main () +{ +log (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_log=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_log=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_log" >&5 +echo "${ECHO_T}$ac_cv_lib_m_log" >&6 +if test $ac_cv_lib_m_log = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LOG 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for logl in -lm" >&5 +echo $ECHO_N "checking for logl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_logl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char logl (); +int +main () +{ +logl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_logl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_logl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_logl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_logl" >&6 +if test $ac_cv_lib_m_logl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LOGL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for clogf in -lm" >&5 +echo $ECHO_N "checking for clogf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_clogf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char clogf (); +int +main () +{ +clogf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_clogf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_clogf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_clogf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_clogf" >&6 +if test $ac_cv_lib_m_clogf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CLOGF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for clog in -lm" >&5 +echo $ECHO_N "checking for clog in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_clog+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char clog (); +int +main () +{ +clog (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_clog=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_clog=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_clog" >&5 +echo "${ECHO_T}$ac_cv_lib_m_clog" >&6 +if test $ac_cv_lib_m_clog = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CLOG 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for clogl in -lm" >&5 +echo $ECHO_N "checking for clogl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_clogl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char clogl (); +int +main () +{ +clogl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_clogl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_clogl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_clogl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_clogl" >&6 +if test $ac_cv_lib_m_clogl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CLOGL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for log10f in -lm" >&5 +echo $ECHO_N "checking for log10f in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_log10f+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char log10f (); +int +main () +{ +log10f (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_log10f=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_log10f=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_log10f" >&5 +echo "${ECHO_T}$ac_cv_lib_m_log10f" >&6 +if test $ac_cv_lib_m_log10f = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LOG10F 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for log10 in -lm" >&5 +echo $ECHO_N "checking for log10 in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_log10+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char log10 (); +int +main () +{ +log10 (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_log10=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_log10=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_log10" >&5 +echo "${ECHO_T}$ac_cv_lib_m_log10" >&6 +if test $ac_cv_lib_m_log10 = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LOG10 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for log10l in -lm" >&5 +echo $ECHO_N "checking for log10l in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_log10l+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char log10l (); +int +main () +{ +log10l (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_log10l=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_log10l=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_log10l" >&5 +echo "${ECHO_T}$ac_cv_lib_m_log10l" >&6 +if test $ac_cv_lib_m_log10l = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LOG10L 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for clog10f in -lm" >&5 +echo $ECHO_N "checking for clog10f in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_clog10f+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char clog10f (); +int +main () +{ +clog10f (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_clog10f=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_clog10f=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_clog10f" >&5 +echo "${ECHO_T}$ac_cv_lib_m_clog10f" >&6 +if test $ac_cv_lib_m_clog10f = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CLOG10F 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for clog10 in -lm" >&5 +echo $ECHO_N "checking for clog10 in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_clog10+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char clog10 (); +int +main () +{ +clog10 (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_clog10=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_clog10=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_clog10" >&5 +echo "${ECHO_T}$ac_cv_lib_m_clog10" >&6 +if test $ac_cv_lib_m_clog10 = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CLOG10 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for clog10l in -lm" >&5 +echo $ECHO_N "checking for clog10l in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_clog10l+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char clog10l (); +int +main () +{ +clog10l (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_clog10l=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_clog10l=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_clog10l" >&5 +echo "${ECHO_T}$ac_cv_lib_m_clog10l" >&6 +if test $ac_cv_lib_m_clog10l = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CLOG10L 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for nextafterf in -lm" >&5 +echo $ECHO_N "checking for nextafterf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_nextafterf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char nextafterf (); +int +main () +{ +nextafterf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_nextafterf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_nextafterf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_nextafterf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_nextafterf" >&6 +if test $ac_cv_lib_m_nextafterf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_NEXTAFTERF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for nextafter in -lm" >&5 +echo $ECHO_N "checking for nextafter in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_nextafter+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char nextafter (); +int +main () +{ +nextafter (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_nextafter=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_nextafter=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_nextafter" >&5 +echo "${ECHO_T}$ac_cv_lib_m_nextafter" >&6 +if test $ac_cv_lib_m_nextafter = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_NEXTAFTER 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for nextafterl in -lm" >&5 +echo $ECHO_N "checking for nextafterl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_nextafterl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char nextafterl (); +int +main () +{ +nextafterl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_nextafterl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_nextafterl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_nextafterl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_nextafterl" >&6 +if test $ac_cv_lib_m_nextafterl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_NEXTAFTERL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for powf in -lm" >&5 +echo $ECHO_N "checking for powf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_powf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char powf (); +int +main () +{ +powf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_powf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_powf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_powf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_powf" >&6 +if test $ac_cv_lib_m_powf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_POWF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for pow in -lm" >&5 +echo $ECHO_N "checking for pow in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_pow+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char pow (); +int +main () +{ +pow (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_pow=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_pow=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_pow" >&5 +echo "${ECHO_T}$ac_cv_lib_m_pow" >&6 +if test $ac_cv_lib_m_pow = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_POW 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for powl in -lm" >&5 +echo $ECHO_N "checking for powl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_powl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char powl (); +int +main () +{ +powl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_powl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_powl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_powl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_powl" >&6 +if test $ac_cv_lib_m_powl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_POWL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for cpowf in -lm" >&5 +echo $ECHO_N "checking for cpowf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_cpowf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char cpowf (); +int +main () +{ +cpowf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_cpowf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_cpowf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_cpowf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_cpowf" >&6 +if test $ac_cv_lib_m_cpowf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CPOWF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for cpow in -lm" >&5 +echo $ECHO_N "checking for cpow in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_cpow+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char cpow (); +int +main () +{ +cpow (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_cpow=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_cpow=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_cpow" >&5 +echo "${ECHO_T}$ac_cv_lib_m_cpow" >&6 +if test $ac_cv_lib_m_cpow = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CPOW 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for cpowl in -lm" >&5 +echo $ECHO_N "checking for cpowl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_cpowl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char cpowl (); +int +main () +{ +cpowl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_cpowl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_cpowl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_cpowl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_cpowl" >&6 +if test $ac_cv_lib_m_cpowl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CPOWL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for roundf in -lm" >&5 +echo $ECHO_N "checking for roundf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_roundf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char roundf (); +int +main () +{ +roundf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_roundf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_roundf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_roundf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_roundf" >&6 +if test $ac_cv_lib_m_roundf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ROUNDF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for round in -lm" >&5 +echo $ECHO_N "checking for round in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_round+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char round (); +int +main () +{ +round (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_round=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_round=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_round" >&5 +echo "${ECHO_T}$ac_cv_lib_m_round" >&6 +if test $ac_cv_lib_m_round = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ROUND 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for roundl in -lm" >&5 +echo $ECHO_N "checking for roundl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_roundl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char roundl (); +int +main () +{ +roundl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_roundl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_roundl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_roundl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_roundl" >&6 +if test $ac_cv_lib_m_roundl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ROUNDL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for lroundf in -lm" >&5 +echo $ECHO_N "checking for lroundf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_lroundf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char lroundf (); +int +main () +{ +lroundf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_lroundf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_lroundf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_lroundf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_lroundf" >&6 +if test $ac_cv_lib_m_lroundf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LROUNDF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for lround in -lm" >&5 +echo $ECHO_N "checking for lround in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_lround+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char lround (); +int +main () +{ +lround (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_lround=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_lround=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_lround" >&5 +echo "${ECHO_T}$ac_cv_lib_m_lround" >&6 +if test $ac_cv_lib_m_lround = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LROUND 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for lroundl in -lm" >&5 +echo $ECHO_N "checking for lroundl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_lroundl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char lroundl (); +int +main () +{ +lroundl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_lroundl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_lroundl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_lroundl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_lroundl" >&6 +if test $ac_cv_lib_m_lroundl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LROUNDL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for llroundf in -lm" >&5 +echo $ECHO_N "checking for llroundf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_llroundf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char llroundf (); +int +main () +{ +llroundf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_llroundf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_llroundf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_llroundf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_llroundf" >&6 +if test $ac_cv_lib_m_llroundf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LLROUNDF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for llround in -lm" >&5 +echo $ECHO_N "checking for llround in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_llround+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char llround (); +int +main () +{ +llround (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_llround=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_llround=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_llround" >&5 +echo "${ECHO_T}$ac_cv_lib_m_llround" >&6 +if test $ac_cv_lib_m_llround = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LLROUND 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for llroundl in -lm" >&5 +echo $ECHO_N "checking for llroundl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_llroundl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char llroundl (); +int +main () +{ +llroundl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_llroundl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_llroundl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_llroundl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_llroundl" >&6 +if test $ac_cv_lib_m_llroundl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LLROUNDL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for scalbnf in -lm" >&5 +echo $ECHO_N "checking for scalbnf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_scalbnf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char scalbnf (); +int +main () +{ +scalbnf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_scalbnf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_scalbnf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_scalbnf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_scalbnf" >&6 +if test $ac_cv_lib_m_scalbnf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SCALBNF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for scalbn in -lm" >&5 +echo $ECHO_N "checking for scalbn in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_scalbn+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char scalbn (); +int +main () +{ +scalbn (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_scalbn=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_scalbn=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_scalbn" >&5 +echo "${ECHO_T}$ac_cv_lib_m_scalbn" >&6 +if test $ac_cv_lib_m_scalbn = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SCALBN 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for scalbnl in -lm" >&5 +echo $ECHO_N "checking for scalbnl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_scalbnl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char scalbnl (); +int +main () +{ +scalbnl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_scalbnl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_scalbnl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_scalbnl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_scalbnl" >&6 +if test $ac_cv_lib_m_scalbnl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SCALBNL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for sinf in -lm" >&5 +echo $ECHO_N "checking for sinf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_sinf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char sinf (); +int +main () +{ +sinf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_sinf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_sinf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_sinf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_sinf" >&6 +if test $ac_cv_lib_m_sinf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SINF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for sin in -lm" >&5 +echo $ECHO_N "checking for sin in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_sin+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char sin (); +int +main () +{ +sin (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_sin=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_sin=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_sin" >&5 +echo "${ECHO_T}$ac_cv_lib_m_sin" >&6 +if test $ac_cv_lib_m_sin = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SIN 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for sinl in -lm" >&5 +echo $ECHO_N "checking for sinl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_sinl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char sinl (); +int +main () +{ +sinl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_sinl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_sinl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_sinl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_sinl" >&6 +if test $ac_cv_lib_m_sinl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SINL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for csinf in -lm" >&5 +echo $ECHO_N "checking for csinf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_csinf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char csinf (); +int +main () +{ +csinf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_csinf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_csinf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_csinf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_csinf" >&6 +if test $ac_cv_lib_m_csinf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CSINF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for csin in -lm" >&5 +echo $ECHO_N "checking for csin in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_csin+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char csin (); +int +main () +{ +csin (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_csin=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_csin=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_csin" >&5 +echo "${ECHO_T}$ac_cv_lib_m_csin" >&6 +if test $ac_cv_lib_m_csin = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CSIN 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for csinl in -lm" >&5 +echo $ECHO_N "checking for csinl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_csinl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char csinl (); +int +main () +{ +csinl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_csinl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_csinl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_csinl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_csinl" >&6 +if test $ac_cv_lib_m_csinl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CSINL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for sinhf in -lm" >&5 +echo $ECHO_N "checking for sinhf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_sinhf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char sinhf (); +int +main () +{ +sinhf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_sinhf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_sinhf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_sinhf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_sinhf" >&6 +if test $ac_cv_lib_m_sinhf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SINHF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for sinh in -lm" >&5 +echo $ECHO_N "checking for sinh in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_sinh+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char sinh (); +int +main () +{ +sinh (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_sinh=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_sinh=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_sinh" >&5 +echo "${ECHO_T}$ac_cv_lib_m_sinh" >&6 +if test $ac_cv_lib_m_sinh = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SINH 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for sinhl in -lm" >&5 +echo $ECHO_N "checking for sinhl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_sinhl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char sinhl (); +int +main () +{ +sinhl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_sinhl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_sinhl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_sinhl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_sinhl" >&6 +if test $ac_cv_lib_m_sinhl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SINHL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for csinhf in -lm" >&5 +echo $ECHO_N "checking for csinhf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_csinhf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char csinhf (); +int +main () +{ +csinhf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_csinhf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_csinhf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_csinhf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_csinhf" >&6 +if test $ac_cv_lib_m_csinhf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CSINHF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for csinh in -lm" >&5 +echo $ECHO_N "checking for csinh in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_csinh+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char csinh (); +int +main () +{ +csinh (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_csinh=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_csinh=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_csinh" >&5 +echo "${ECHO_T}$ac_cv_lib_m_csinh" >&6 +if test $ac_cv_lib_m_csinh = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CSINH 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for csinhl in -lm" >&5 +echo $ECHO_N "checking for csinhl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_csinhl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char csinhl (); +int +main () +{ +csinhl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_csinhl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_csinhl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_csinhl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_csinhl" >&6 +if test $ac_cv_lib_m_csinhl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CSINHL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for sqrtf in -lm" >&5 +echo $ECHO_N "checking for sqrtf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_sqrtf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char sqrtf (); +int +main () +{ +sqrtf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_sqrtf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_sqrtf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_sqrtf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_sqrtf" >&6 +if test $ac_cv_lib_m_sqrtf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SQRTF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for sqrt in -lm" >&5 +echo $ECHO_N "checking for sqrt in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_sqrt+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char sqrt (); +int +main () +{ +sqrt (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_sqrt=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_sqrt=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_sqrt" >&5 +echo "${ECHO_T}$ac_cv_lib_m_sqrt" >&6 +if test $ac_cv_lib_m_sqrt = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SQRT 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for sqrtl in -lm" >&5 +echo $ECHO_N "checking for sqrtl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_sqrtl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char sqrtl (); +int +main () +{ +sqrtl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_sqrtl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_sqrtl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_sqrtl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_sqrtl" >&6 +if test $ac_cv_lib_m_sqrtl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SQRTL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for csqrtf in -lm" >&5 +echo $ECHO_N "checking for csqrtf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_csqrtf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char csqrtf (); +int +main () +{ +csqrtf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_csqrtf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_csqrtf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_csqrtf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_csqrtf" >&6 +if test $ac_cv_lib_m_csqrtf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CSQRTF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for csqrt in -lm" >&5 +echo $ECHO_N "checking for csqrt in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_csqrt+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char csqrt (); +int +main () +{ +csqrt (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_csqrt=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_csqrt=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_csqrt" >&5 +echo "${ECHO_T}$ac_cv_lib_m_csqrt" >&6 +if test $ac_cv_lib_m_csqrt = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CSQRT 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for csqrtl in -lm" >&5 +echo $ECHO_N "checking for csqrtl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_csqrtl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char csqrtl (); +int +main () +{ +csqrtl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_csqrtl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_csqrtl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_csqrtl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_csqrtl" >&6 +if test $ac_cv_lib_m_csqrtl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CSQRTL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for tanf in -lm" >&5 +echo $ECHO_N "checking for tanf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_tanf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tanf (); +int +main () +{ +tanf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_tanf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_tanf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_tanf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_tanf" >&6 +if test $ac_cv_lib_m_tanf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_TANF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for tan in -lm" >&5 +echo $ECHO_N "checking for tan in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_tan+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tan (); +int +main () +{ +tan (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_tan=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_tan=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_tan" >&5 +echo "${ECHO_T}$ac_cv_lib_m_tan" >&6 +if test $ac_cv_lib_m_tan = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_TAN 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for tanl in -lm" >&5 +echo $ECHO_N "checking for tanl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_tanl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tanl (); +int +main () +{ +tanl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_tanl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_tanl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_tanl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_tanl" >&6 +if test $ac_cv_lib_m_tanl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_TANL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ctanf in -lm" >&5 +echo $ECHO_N "checking for ctanf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ctanf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ctanf (); +int +main () +{ +ctanf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ctanf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ctanf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ctanf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ctanf" >&6 +if test $ac_cv_lib_m_ctanf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CTANF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ctan in -lm" >&5 +echo $ECHO_N "checking for ctan in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ctan+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ctan (); +int +main () +{ +ctan (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ctan=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ctan=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ctan" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ctan" >&6 +if test $ac_cv_lib_m_ctan = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CTAN 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ctanl in -lm" >&5 +echo $ECHO_N "checking for ctanl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ctanl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ctanl (); +int +main () +{ +ctanl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ctanl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ctanl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ctanl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ctanl" >&6 +if test $ac_cv_lib_m_ctanl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CTANL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for tanhf in -lm" >&5 +echo $ECHO_N "checking for tanhf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_tanhf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tanhf (); +int +main () +{ +tanhf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_tanhf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_tanhf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_tanhf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_tanhf" >&6 +if test $ac_cv_lib_m_tanhf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_TANHF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for tanh in -lm" >&5 +echo $ECHO_N "checking for tanh in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_tanh+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tanh (); +int +main () +{ +tanh (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_tanh=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_tanh=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_tanh" >&5 +echo "${ECHO_T}$ac_cv_lib_m_tanh" >&6 +if test $ac_cv_lib_m_tanh = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_TANH 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for tanhl in -lm" >&5 +echo $ECHO_N "checking for tanhl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_tanhl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tanhl (); +int +main () +{ +tanhl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_tanhl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_tanhl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_tanhl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_tanhl" >&6 +if test $ac_cv_lib_m_tanhl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_TANHL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ctanhf in -lm" >&5 +echo $ECHO_N "checking for ctanhf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ctanhf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ctanhf (); +int +main () +{ +ctanhf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ctanhf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ctanhf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ctanhf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ctanhf" >&6 +if test $ac_cv_lib_m_ctanhf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CTANHF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ctanh in -lm" >&5 +echo $ECHO_N "checking for ctanh in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ctanh+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ctanh (); +int +main () +{ +ctanh (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ctanh=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ctanh=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ctanh" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ctanh" >&6 +if test $ac_cv_lib_m_ctanh = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CTANH 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ctanhl in -lm" >&5 +echo $ECHO_N "checking for ctanhl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ctanhl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ctanhl (); +int +main () +{ +ctanhl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ctanhl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ctanhl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ctanhl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ctanhl" >&6 +if test $ac_cv_lib_m_ctanhl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CTANHL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for truncf in -lm" >&5 +echo $ECHO_N "checking for truncf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_truncf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char truncf (); +int +main () +{ +truncf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_truncf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_truncf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_truncf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_truncf" >&6 +if test $ac_cv_lib_m_truncf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_TRUNCF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for trunc in -lm" >&5 +echo $ECHO_N "checking for trunc in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_trunc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char trunc (); +int +main () +{ +trunc (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_trunc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_trunc=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_trunc" >&5 +echo "${ECHO_T}$ac_cv_lib_m_trunc" >&6 +if test $ac_cv_lib_m_trunc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_TRUNC 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for truncl in -lm" >&5 +echo $ECHO_N "checking for truncl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_truncl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char truncl (); +int +main () +{ +truncl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_truncl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_truncl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_truncl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_truncl" >&6 +if test $ac_cv_lib_m_truncl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_TRUNCL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for erff in -lm" >&5 +echo $ECHO_N "checking for erff in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_erff+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char erff (); +int +main () +{ +erff (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_erff=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_erff=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_erff" >&5 +echo "${ECHO_T}$ac_cv_lib_m_erff" >&6 +if test $ac_cv_lib_m_erff = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ERFF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for erf in -lm" >&5 +echo $ECHO_N "checking for erf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_erf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char erf (); +int +main () +{ +erf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_erf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_erf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_erf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_erf" >&6 +if test $ac_cv_lib_m_erf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ERF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for erfl in -lm" >&5 +echo $ECHO_N "checking for erfl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_erfl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char erfl (); +int +main () +{ +erfl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_erfl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_erfl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_erfl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_erfl" >&6 +if test $ac_cv_lib_m_erfl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ERFL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for erfcf in -lm" >&5 +echo $ECHO_N "checking for erfcf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_erfcf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char erfcf (); +int +main () +{ +erfcf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_erfcf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_erfcf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_erfcf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_erfcf" >&6 +if test $ac_cv_lib_m_erfcf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ERFCF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for erfc in -lm" >&5 +echo $ECHO_N "checking for erfc in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_erfc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char erfc (); +int +main () +{ +erfc (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_erfc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_erfc=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_erfc" >&5 +echo "${ECHO_T}$ac_cv_lib_m_erfc" >&6 +if test $ac_cv_lib_m_erfc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ERFC 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for erfcl in -lm" >&5 +echo $ECHO_N "checking for erfcl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_erfcl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char erfcl (); +int +main () +{ +erfcl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_erfcl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_erfcl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_erfcl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_erfcl" >&6 +if test $ac_cv_lib_m_erfcl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ERFCL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for j0f in -lm" >&5 +echo $ECHO_N "checking for j0f in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_j0f+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char j0f (); +int +main () +{ +j0f (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_j0f=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_j0f=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_j0f" >&5 +echo "${ECHO_T}$ac_cv_lib_m_j0f" >&6 +if test $ac_cv_lib_m_j0f = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_J0F 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for j0 in -lm" >&5 +echo $ECHO_N "checking for j0 in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_j0+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char j0 (); +int +main () +{ +j0 (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_j0=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_j0=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_j0" >&5 +echo "${ECHO_T}$ac_cv_lib_m_j0" >&6 +if test $ac_cv_lib_m_j0 = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_J0 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for j0l in -lm" >&5 +echo $ECHO_N "checking for j0l in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_j0l+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char j0l (); +int +main () +{ +j0l (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_j0l=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_j0l=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_j0l" >&5 +echo "${ECHO_T}$ac_cv_lib_m_j0l" >&6 +if test $ac_cv_lib_m_j0l = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_J0L 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for j1f in -lm" >&5 +echo $ECHO_N "checking for j1f in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_j1f+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char j1f (); +int +main () +{ +j1f (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_j1f=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_j1f=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_j1f" >&5 +echo "${ECHO_T}$ac_cv_lib_m_j1f" >&6 +if test $ac_cv_lib_m_j1f = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_J1F 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for j1 in -lm" >&5 +echo $ECHO_N "checking for j1 in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_j1+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char j1 (); +int +main () +{ +j1 (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_j1=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_j1=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_j1" >&5 +echo "${ECHO_T}$ac_cv_lib_m_j1" >&6 +if test $ac_cv_lib_m_j1 = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_J1 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for j1l in -lm" >&5 +echo $ECHO_N "checking for j1l in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_j1l+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char j1l (); +int +main () +{ +j1l (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_j1l=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_j1l=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_j1l" >&5 +echo "${ECHO_T}$ac_cv_lib_m_j1l" >&6 +if test $ac_cv_lib_m_j1l = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_J1L 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for jnf in -lm" >&5 +echo $ECHO_N "checking for jnf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_jnf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char jnf (); +int +main () +{ +jnf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_jnf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_jnf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_jnf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_jnf" >&6 +if test $ac_cv_lib_m_jnf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_JNF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for jn in -lm" >&5 +echo $ECHO_N "checking for jn in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_jn+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char jn (); +int +main () +{ +jn (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_jn=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_jn=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_jn" >&5 +echo "${ECHO_T}$ac_cv_lib_m_jn" >&6 +if test $ac_cv_lib_m_jn = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_JN 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for jnl in -lm" >&5 +echo $ECHO_N "checking for jnl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_jnl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char jnl (); +int +main () +{ +jnl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_jnl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_jnl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_jnl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_jnl" >&6 +if test $ac_cv_lib_m_jnl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_JNL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for y0f in -lm" >&5 +echo $ECHO_N "checking for y0f in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_y0f+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char y0f (); +int +main () +{ +y0f (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_y0f=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_y0f=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_y0f" >&5 +echo "${ECHO_T}$ac_cv_lib_m_y0f" >&6 +if test $ac_cv_lib_m_y0f = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_Y0F 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for y0 in -lm" >&5 +echo $ECHO_N "checking for y0 in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_y0+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char y0 (); +int +main () +{ +y0 (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_y0=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_y0=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_y0" >&5 +echo "${ECHO_T}$ac_cv_lib_m_y0" >&6 +if test $ac_cv_lib_m_y0 = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_Y0 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for y0l in -lm" >&5 +echo $ECHO_N "checking for y0l in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_y0l+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char y0l (); +int +main () +{ +y0l (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_y0l=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_y0l=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_y0l" >&5 +echo "${ECHO_T}$ac_cv_lib_m_y0l" >&6 +if test $ac_cv_lib_m_y0l = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_Y0L 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for y1f in -lm" >&5 +echo $ECHO_N "checking for y1f in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_y1f+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char y1f (); +int +main () +{ +y1f (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_y1f=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_y1f=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_y1f" >&5 +echo "${ECHO_T}$ac_cv_lib_m_y1f" >&6 +if test $ac_cv_lib_m_y1f = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_Y1F 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for y1 in -lm" >&5 +echo $ECHO_N "checking for y1 in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_y1+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char y1 (); +int +main () +{ +y1 (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_y1=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_y1=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_y1" >&5 +echo "${ECHO_T}$ac_cv_lib_m_y1" >&6 +if test $ac_cv_lib_m_y1 = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_Y1 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for y1l in -lm" >&5 +echo $ECHO_N "checking for y1l in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_y1l+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char y1l (); +int +main () +{ +y1l (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_y1l=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_y1l=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_y1l" >&5 +echo "${ECHO_T}$ac_cv_lib_m_y1l" >&6 +if test $ac_cv_lib_m_y1l = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_Y1L 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ynf in -lm" >&5 +echo $ECHO_N "checking for ynf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ynf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ynf (); +int +main () +{ +ynf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ynf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ynf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ynf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ynf" >&6 +if test $ac_cv_lib_m_ynf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_YNF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for yn in -lm" >&5 +echo $ECHO_N "checking for yn in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_yn+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char yn (); +int +main () +{ +yn (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_yn=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_yn=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_yn" >&5 +echo "${ECHO_T}$ac_cv_lib_m_yn" >&6 +if test $ac_cv_lib_m_yn = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_YN 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for ynl in -lm" >&5 +echo $ECHO_N "checking for ynl in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_ynl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char ynl (); +int +main () +{ +ynl (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_ynl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_ynl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_ynl" >&5 +echo "${ECHO_T}$ac_cv_lib_m_ynl" >&6 +if test $ac_cv_lib_m_ynl = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_YNL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for tgamma in -lm" >&5 +echo $ECHO_N "checking for tgamma in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_tgamma+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tgamma (); +int +main () +{ +tgamma (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_tgamma=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_tgamma=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_tgamma" >&5 +echo "${ECHO_T}$ac_cv_lib_m_tgamma" >&6 +if test $ac_cv_lib_m_tgamma = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_TGAMMA 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for tgammaf in -lm" >&5 +echo $ECHO_N "checking for tgammaf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_tgammaf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tgammaf (); +int +main () +{ +tgammaf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_tgammaf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_tgammaf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_tgammaf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_tgammaf" >&6 +if test $ac_cv_lib_m_tgammaf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_TGAMMAF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for tgammal in -lm" >&5 +echo $ECHO_N "checking for tgammal in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_tgammal+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char tgammal (); +int +main () +{ +tgammal (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_tgammal=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_tgammal=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_tgammal" >&5 +echo "${ECHO_T}$ac_cv_lib_m_tgammal" >&6 +if test $ac_cv_lib_m_tgammal = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_TGAMMAL 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for lgamma in -lm" >&5 +echo $ECHO_N "checking for lgamma in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_lgamma+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char lgamma (); +int +main () +{ +lgamma (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_lgamma=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_lgamma=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_lgamma" >&5 +echo "${ECHO_T}$ac_cv_lib_m_lgamma" >&6 +if test $ac_cv_lib_m_lgamma = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LGAMMA 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for lgammaf in -lm" >&5 +echo $ECHO_N "checking for lgammaf in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_lgammaf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char lgammaf (); +int +main () +{ +lgammaf (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_lgammaf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_lgammaf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_lgammaf" >&5 +echo "${ECHO_T}$ac_cv_lib_m_lgammaf" >&6 +if test $ac_cv_lib_m_lgammaf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LGAMMAF 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for lgammal in -lm" >&5 +echo $ECHO_N "checking for lgammal in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_lgammal+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char lgammal (); +int +main () +{ +lgammal (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_lgammal=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_lgammal=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_lgammal" >&5 +echo "${ECHO_T}$ac_cv_lib_m_lgammal" >&6 +if test $ac_cv_lib_m_lgammal = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LGAMMAL 1 +_ACEOF + +fi + + +# On AIX, clog is present in libm as __clog +echo "$as_me:$LINENO: checking for __clog in -lm" >&5 +echo $ECHO_N "checking for __clog in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m___clog+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char __clog (); +int +main () +{ +__clog (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m___clog=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m___clog=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m___clog" >&5 +echo "${ECHO_T}$ac_cv_lib_m___clog" >&6 +if test $ac_cv_lib_m___clog = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CLOG 1 +_ACEOF + +fi + + +# Check for a isfinite macro that works on long doubles. + + echo "$as_me:$LINENO: checking whether isfinite is broken" >&5 +echo $ECHO_N "checking whether isfinite is broken... $ECHO_C" >&6 +if test "${libgfor_cv_have_broken_isfinite+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + libgfor_check_for_broken_isfinite_save_LIBS=$LIBS + LIBS="$LIBS -lm" + if test "$cross_compiling" = yes; then + +case "${target}" in + hppa*-*-hpux*) libgfor_cv_have_broken_isfinite=yes ;; + *) libgfor_cv_have_broken_isfinite=no ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +int main () +{ +#ifdef isfinite +#ifdef LDBL_MAX + if (!isfinite(LDBL_MAX)) return 1; +#endif +#ifdef DBL_MAX + if (!isfinite(DBL_MAX)) return 1; +#endif +#endif +return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + libgfor_cv_have_broken_isfinite=no +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +libgfor_cv_have_broken_isfinite=yes +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + LIBS=$libgfor_check_for_broken_isfinite_save_LIBS +fi +echo "$as_me:$LINENO: result: $libgfor_cv_have_broken_isfinite" >&5 +echo "${ECHO_T}$libgfor_cv_have_broken_isfinite" >&6 +if test x"$libgfor_cv_have_broken_isfinite" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_BROKEN_ISFINITE 1 +_ACEOF + +fi + +# Check for a isnan macro that works on long doubles. + + echo "$as_me:$LINENO: checking whether isnan is broken" >&5 +echo $ECHO_N "checking whether isnan is broken... $ECHO_C" >&6 +if test "${libgfor_cv_have_broken_isnan+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + libgfor_check_for_broken_isnan_save_LIBS=$LIBS + LIBS="$LIBS -lm" + if test "$cross_compiling" = yes; then + +case "${target}" in + hppa*-*-hpux*) libgfor_cv_have_broken_isnan=yes ;; + *) libgfor_cv_have_broken_isnan=no ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +int main () +{ +#ifdef isnan +#ifdef LDBL_MAX + { + long double x; + x = __builtin_nanl (""); + if (!isnan(x)) return 1; + if (isnan(LDBL_MAX)) return 1; +#ifdef NAN + x = (long double) NAN; + if (!isnan(x)) return 1; +#endif + } +#endif +#ifdef DBL_MAX + { + double y; + y = __builtin_nan (""); + if (!isnan(y)) return 1; + if (isnan(DBL_MAX)) return 1; +#ifdef NAN + y = (double) NAN; + if (!isnan(y)) return 1; +#endif + } +#endif +#endif +return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + libgfor_cv_have_broken_isnan=no +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +libgfor_cv_have_broken_isnan=yes +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + LIBS=$libgfor_check_for_broken_isnan_save_LIBS +fi +echo "$as_me:$LINENO: result: $libgfor_cv_have_broken_isnan" >&5 +echo "${ECHO_T}$libgfor_cv_have_broken_isnan" >&6 +if test x"$libgfor_cv_have_broken_isnan" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_BROKEN_ISNAN 1 +_ACEOF + +fi + +# Check for a fpclassify macro that works on long doubles. + + echo "$as_me:$LINENO: checking whether fpclassify is broken" >&5 +echo $ECHO_N "checking whether fpclassify is broken... $ECHO_C" >&6 +if test "${libgfor_cv_have_broken_fpclassify+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + libgfor_check_for_broken_fpclassify_save_LIBS=$LIBS + LIBS="$LIBS -lm" + if test "$cross_compiling" = yes; then + +case "${target}" in + hppa*-*-hpux*) libgfor_cv_have_broken_fpclassify=yes ;; + *) libgfor_cv_have_broken_fpclassify=no ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +int main () +{ +#ifdef fpclassify +#ifdef LDBL_MAX + if (fpclassify(LDBL_MAX) == FP_NAN + || fpclassify(LDBL_MAX) == FP_INFINITE) return 1; +#endif +#ifdef DBL_MAX + if (fpclassify(DBL_MAX) == FP_NAN + || fpclassify(DBL_MAX) == FP_INFINITE) return 1; +#endif +#endif +return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + libgfor_cv_have_broken_fpclassify=no +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +libgfor_cv_have_broken_fpclassify=yes +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + LIBS=$libgfor_check_for_broken_fpclassify_save_LIBS +fi +echo "$as_me:$LINENO: result: $libgfor_cv_have_broken_fpclassify" >&5 +echo "${ECHO_T}$libgfor_cv_have_broken_fpclassify" >&6 +if test x"$libgfor_cv_have_broken_fpclassify" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_BROKEN_FPCLASSIFY 1 +_ACEOF + +fi + +# Check whether the system has a working stat() + + echo "$as_me:$LINENO: checking whether the target stat is reliable" >&5 +echo $ECHO_N "checking whether the target stat is reliable... $ECHO_C" >&6 +if test "${libgfor_cv_have_working_stat+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + if test "$cross_compiling" = yes; then + +case "${target}" in + *mingw*) libgfor_cv_have_working_stat=no ;; + *) libgfor_cv_have_working_stat=yes;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#include + +int main () +{ + FILE *f, *g; + struct stat st1, st2; + + f = fopen ("foo", "w"); + g = fopen ("bar", "w"); + if (stat ("foo", &st1) != 0 || stat ("bar", &st2)) + return 1; + if (st1.st_dev == st2.st_dev && st1.st_ino == st2.st_ino) + return 1; + fclose(f); + fclose(g); + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + libgfor_cv_have_working_stat=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +libgfor_cv_have_working_stat=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +echo "$as_me:$LINENO: result: $libgfor_cv_have_working_stat" >&5 +echo "${ECHO_T}$libgfor_cv_have_working_stat" >&6 +if test x"$libgfor_cv_have_working_stat" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_WORKING_STAT 1 +_ACEOF + +fi + +# Check whether __mingw_snprintf() is present + + echo "$as_me:$LINENO: checking whether __mingw_snprintf is present" >&5 +echo $ECHO_N "checking whether __mingw_snprintf is present... $ECHO_C" >&6 +if test "${libgfor_cv_have_mingw_snprintf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +extern int __mingw_snprintf (char *, size_t, const char *, ...); + +int +main () +{ + +__mingw_snprintf (NULL, 0, "%d\n", 1); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "libgfor_cv_have_mingw_snprintf=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "libgfor_cv_have_mingw_snprintf=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $libgfor_cv_have_mingw_snprintf" >&5 +echo "${ECHO_T}$libgfor_cv_have_mingw_snprintf" >&6 + if test x"$libgfor_cv_have_mingw_snprintf" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_MINGW_SNPRINTF 1 +_ACEOF + + fi + + +# Check for a broken powf implementation + + echo "$as_me:$LINENO: checking whether powf is broken" >&5 +echo $ECHO_N "checking whether powf is broken... $ECHO_C" >&6 +if test "${libgfor_cv_have_broken_powf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +case "${target}" in + hppa*64*-*-hpux*) libgfor_cv_have_broken_powf=yes ;; + *) libgfor_cv_have_broken_powf=no;; +esac +fi +echo "$as_me:$LINENO: result: $libgfor_cv_have_broken_powf" >&5 +echo "${ECHO_T}$libgfor_cv_have_broken_powf" >&6 + if test x"$libgfor_cv_have_broken_powf" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_BROKEN_POWF 1 +_ACEOF + + fi + + +# Check for GNU libc feenableexcept +echo "$as_me:$LINENO: checking for feenableexcept in -lm" >&5 +echo $ECHO_N "checking for feenableexcept in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_feenableexcept+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char feenableexcept (); +int +main () +{ +feenableexcept (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_feenableexcept=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_feenableexcept=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_feenableexcept" >&5 +echo "${ECHO_T}$ac_cv_lib_m_feenableexcept" >&6 +if test $ac_cv_lib_m_feenableexcept = yes; then + have_feenableexcept=yes +cat >>confdefs.h <<\_ACEOF +#define HAVE_FEENABLEEXCEPT 1 +_ACEOF + +fi + + +# Check for SysV fpsetmask + + echo "$as_me:$LINENO: checking whether fpsetmask is present" >&5 +echo $ECHO_N "checking whether fpsetmask is present... $ECHO_C" >&6 +if test "${libgfor_cv_have_fpsetmask+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#if HAVE_FLOATINGPOINT_H +# include +#endif /* HAVE_FLOATINGPOINT_H */ +#if HAVE_IEEEFP_H +# include +#endif /* HAVE_IEEEFP_H */ +int +main () +{ +fpsetmask(0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "libgfor_cv_have_fpsetmask=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "libgfor_cv_have_fpsetmask=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $libgfor_cv_have_fpsetmask" >&5 +echo "${ECHO_T}$libgfor_cv_have_fpsetmask" >&6 + if test x"$libgfor_cv_have_fpsetmask" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FPSETMASK 1 +_ACEOF + + fi + + +# Check for AIX fp_trap and fp_enable +echo "$as_me:$LINENO: checking for fp_trap" >&5 +echo $ECHO_N "checking for fp_trap... $ECHO_C" >&6 +if test "${ac_cv_func_fp_trap+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define fp_trap to an innocuous variant, in case declares fp_trap. + For example, HP-UX 11i declares gettimeofday. */ +#define fp_trap innocuous_fp_trap + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char fp_trap (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef fp_trap + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char fp_trap (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_fp_trap) || defined (__stub___fp_trap) +choke me +#else +char (*f) () = fp_trap; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != fp_trap; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_fp_trap=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_fp_trap=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_fp_trap" >&5 +echo "${ECHO_T}$ac_cv_func_fp_trap" >&6 +if test $ac_cv_func_fp_trap = yes; then + have_fp_trap=yes +cat >>confdefs.h <<\_ACEOF +#define HAVE_FP_TRAP 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for fp_enable" >&5 +echo $ECHO_N "checking for fp_enable... $ECHO_C" >&6 +if test "${ac_cv_func_fp_enable+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define fp_enable to an innocuous variant, in case declares fp_enable. + For example, HP-UX 11i declares gettimeofday. */ +#define fp_enable innocuous_fp_enable + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char fp_enable (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef fp_enable + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char fp_enable (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_fp_enable) || defined (__stub___fp_enable) +choke me +#else +char (*f) () = fp_enable; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != fp_enable; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_fp_enable=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_fp_enable=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_fp_enable" >&5 +echo "${ECHO_T}$ac_cv_func_fp_enable" >&6 +if test $ac_cv_func_fp_enable = yes; then + have_fp_enable=yes +cat >>confdefs.h <<\_ACEOF +#define HAVE_FP_ENABLE 1 +_ACEOF + +fi + + +# Runs configure.host to set up necessary host-dependent shell variables. +# We then display a message about it, and propagate them through the +# build chain. +. ${srcdir}/configure.host +{ echo "$as_me:$LINENO: FPU dependent file will be ${fpu_host}.h" >&5 +echo "$as_me: FPU dependent file will be ${fpu_host}.h" >&6;} +FPU_HOST_HEADER=config/${fpu_host}.h + + +# Check out attribute support. + + echo "$as_me:$LINENO: checking whether the target supports hidden visibility" >&5 +echo $ECHO_N "checking whether the target supports hidden visibility... $ECHO_C" >&6 +if test "${libgfor_cv_have_attribute_visibility+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +void __attribute__((visibility("hidden"))) foo(void) { } +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + libgfor_cv_have_attribute_visibility=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +libgfor_cv_have_attribute_visibility=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" +fi +echo "$as_me:$LINENO: result: $libgfor_cv_have_attribute_visibility" >&5 +echo "${ECHO_T}$libgfor_cv_have_attribute_visibility" >&6 + if test $libgfor_cv_have_attribute_visibility = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ATTRIBUTE_VISIBILITY 1 +_ACEOF + + fi + + echo "$as_me:$LINENO: checking whether the target supports dllexport" >&5 +echo $ECHO_N "checking whether the target supports dllexport... $ECHO_C" >&6 +if test "${libgfor_cv_have_attribute_dllexport+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +void __attribute__((dllexport)) foo(void) { } +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + libgfor_cv_have_attribute_dllexport=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +libgfor_cv_have_attribute_dllexport=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" +fi +echo "$as_me:$LINENO: result: $libgfor_cv_have_attribute_dllexport" >&5 +echo "${ECHO_T}$libgfor_cv_have_attribute_dllexport" >&6 + if test $libgfor_cv_have_attribute_dllexport = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ATTRIBUTE_DLLEXPORT 1 +_ACEOF + + fi + + echo "$as_me:$LINENO: checking whether the target supports symbol aliases" >&5 +echo $ECHO_N "checking whether the target supports symbol aliases... $ECHO_C" >&6 +if test "${libgfor_cv_have_attribute_alias+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +void foo(void) { } +extern void bar(void) __attribute__((alias("foo"))); +int +main () +{ +bar(); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + libgfor_cv_have_attribute_alias=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +libgfor_cv_have_attribute_alias=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $libgfor_cv_have_attribute_alias" >&5 +echo "${ECHO_T}$libgfor_cv_have_attribute_alias" >&6 + if test $libgfor_cv_have_attribute_alias = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ATTRIBUTE_ALIAS 1 +_ACEOF + + fi + +# Check out sync builtins support. + + echo "$as_me:$LINENO: checking whether the target supports __sync_fetch_and_add" >&5 +echo $ECHO_N "checking whether the target supports __sync_fetch_and_add... $ECHO_C" >&6 +if test "${libgfor_cv_have_sync_fetch_and_add+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +int foovar = 0; +int +main () +{ + +if (foovar <= 0) return __sync_fetch_and_add (&foovar, 1); +if (foovar > 10) return __sync_add_and_fetch (&foovar, -1); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + libgfor_cv_have_sync_fetch_and_add=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +libgfor_cv_have_sync_fetch_and_add=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $libgfor_cv_have_sync_fetch_and_add" >&5 +echo "${ECHO_T}$libgfor_cv_have_sync_fetch_and_add" >&6 + if test $libgfor_cv_have_sync_fetch_and_add = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SYNC_FETCH_AND_ADD 1 +_ACEOF + + fi + +# Check out thread support. + + echo "$as_me:$LINENO: checking configured target thread model" >&5 +echo $ECHO_N "checking configured target thread model... $ECHO_C" >&6 +if test "${libgfor_cv_target_thread_file+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +libgfor_cv_target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'` +fi +echo "$as_me:$LINENO: result: $libgfor_cv_target_thread_file" >&5 +echo "${ECHO_T}$libgfor_cv_target_thread_file" >&6 + + if test $libgfor_cv_target_thread_file != single; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GTHR_DEFAULT 1 +_ACEOF + + fi + +# Check out #pragma weak. + + echo "$as_me:$LINENO: checking whether pragma weak works" >&5 +echo $ECHO_N "checking whether pragma weak works... $ECHO_C" >&6 +if test "${libgfor_cv_have_pragma_weak+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + gfor_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wunknown-pragmas" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +void foo (void); +#pragma weak foo +int +main () +{ +if (foo) foo (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + libgfor_cv_have_pragma_weak=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +libgfor_cv_have_pragma_weak=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $libgfor_cv_have_pragma_weak" >&5 +echo "${ECHO_T}$libgfor_cv_have_pragma_weak" >&6 + if test $libgfor_cv_have_pragma_weak = yes; then + +cat >>confdefs.h <<\_ACEOF +#define SUPPORTS_WEAK 1 +_ACEOF + + fi + case "$host" in + *-*-darwin* | *-*-hpux* | *-*-cygwin* | *-*-mingw* ) + +cat >>confdefs.h <<\_ACEOF +#define GTHREAD_USE_WEAK 0 +_ACEOF + + ;; + esac + +# Various other checks on target + + echo "$as_me:$LINENO: checking whether the target can unlink an open file" >&5 +echo $ECHO_N "checking whether the target can unlink an open file... $ECHO_C" >&6 +if test "${libgfor_cv_have_unlink_open_file+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + if test "$cross_compiling" = yes; then + +case "${target}" in + *mingw*) libgfor_cv_have_unlink_open_file=no ;; + *) libgfor_cv_have_unlink_open_file=yes;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#include + +int main () +{ + int fd; + + fd = open ("testfile", O_RDWR | O_CREAT, S_IWRITE | S_IREAD); + if (fd <= 0) + return 0; + if (unlink ("testfile") == -1) + return 1; + write (fd, "This is a test\n", 15); + close (fd); + + if (open ("testfile", O_RDONLY, S_IWRITE | S_IREAD) == -1 && errno == ENOENT) + return 0; + else + return 1; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + libgfor_cv_have_unlink_open_file=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +libgfor_cv_have_unlink_open_file=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +echo "$as_me:$LINENO: result: $libgfor_cv_have_unlink_open_file" >&5 +echo "${ECHO_T}$libgfor_cv_have_unlink_open_file" >&6 +if test x"$libgfor_cv_have_unlink_open_file" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_UNLINK_OPEN_FILE 1 +_ACEOF + +fi + +# Check whether line terminator is LF or CRLF + + echo "$as_me:$LINENO: checking whether the target has CRLF as line terminator" >&5 +echo $ECHO_N "checking whether the target has CRLF as line terminator... $ECHO_C" >&6 +if test "${libgfor_cv_have_crlf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + if test "$cross_compiling" = yes; then + +case "${target}" in + *mingw*) libgfor_cv_have_crlf=yes ;; + *) libgfor_cv_have_crlf=no;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* This test program should exit with status 0 if system uses a CRLF as + line terminator, and status 1 otherwise. + Since it is used to check for mingw systems, and should return 0 in any + other case, in case of a failure we will not use CRLF. */ +#include +#include +#include +#include + +int main () +{ +#ifndef O_BINARY + exit(1); +#else + int fd, bytes; + char buff[5]; + + fd = open ("foo", O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU); + if (fd < 0) + exit(1); + if (write (fd, "\n", 1) < 0) + perror ("write"); + + close (fd); + + if ((fd = open ("foo", O_RDONLY | O_BINARY, S_IRWXU)) < 0) + exit(1); + bytes = read (fd, buff, 5); + if (bytes == 2 && buff[0] == '\r' && buff[1] == '\n') + exit(0); + else + exit(1); +#endif +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + libgfor_cv_have_crlf=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +libgfor_cv_have_crlf=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +echo "$as_me:$LINENO: result: $libgfor_cv_have_crlf" >&5 +echo "${ECHO_T}$libgfor_cv_have_crlf" >&6 +if test x"$libgfor_cv_have_crlf" = xyes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CRLF 1 +_ACEOF + +fi + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if diff $cache_file confcache >/dev/null 2>&1; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +if test ${multilib} = yes; then + multilib_arg="--enable-multilib" +else + multilib_arg= +fi + +# Write our Makefile. + ac_config_files="$ac_config_files Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if diff $cache_file confcache >/dev/null 2>&1; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${onestep_TRUE}" && test -z "${onestep_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"onestep\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"onestep\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${LIBGFOR_USE_SYMVER_TRUE}" && test -z "${LIBGFOR_USE_SYMVER_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"LIBGFOR_USE_SYMVER\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"LIBGFOR_USE_SYMVER\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by GNU Fortran Runtime Library $as_me 0.3, which was +generated by GNU Autoconf 2.59. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +GNU Fortran Runtime Library config.status 0.3 +configured by $0, generated by GNU Autoconf 2.59, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2003 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS section. +# + + +srcdir="$srcdir" +host="$host" +target="$target" +with_multisubdir="$with_multisubdir" +with_multisrctop="$with_multisrctop" +with_target_subdir="$with_target_subdir" +ac_configure_args="${multilib_arg} ${ac_configure_args}" +multi_basedir="$multi_basedir" +CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} +CC="$CC" +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`' +predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`' +postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`' +LD_FC='`$ECHO "X$LD_FC" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds_FC='`$ECHO "X$old_archive_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`' +compiler_FC='`$ECHO "X$compiler_FC" | $Xsed -e "$delay_single_quote_subst"`' +GCC_FC='`$ECHO "X$GCC_FC" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_FC='`$ECHO "X$lt_prog_compiler_no_builtin_flag_FC" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl_FC='`$ECHO "X$lt_prog_compiler_wl_FC" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic_FC='`$ECHO "X$lt_prog_compiler_pic_FC" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static_FC='`$ECHO "X$lt_prog_compiler_static_FC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_FC='`$ECHO "X$lt_cv_prog_compiler_c_o_FC" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc_FC='`$ECHO "X$archive_cmds_need_lc_FC" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_FC='`$ECHO "X$enable_shared_with_static_runtimes_FC" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec_FC='`$ECHO "X$export_dynamic_flag_spec_FC" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec_FC='`$ECHO "X$whole_archive_flag_spec_FC" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object_FC='`$ECHO "X$compiler_needs_object_FC" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds_FC='`$ECHO "X$old_archive_from_new_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_FC='`$ECHO "X$old_archive_from_expsyms_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_FC='`$ECHO "X$archive_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds_FC='`$ECHO "X$archive_expsym_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds_FC='`$ECHO "X$module_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds_FC='`$ECHO "X$module_expsym_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld_FC='`$ECHO "X$with_gnu_ld_FC" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag_FC='`$ECHO "X$allow_undefined_flag_FC" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag_FC='`$ECHO "X$no_undefined_flag_FC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_FC='`$ECHO "X$hardcode_libdir_flag_spec_FC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld_FC='`$ECHO "X$hardcode_libdir_flag_spec_ld_FC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator_FC='`$ECHO "X$hardcode_libdir_separator_FC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_FC='`$ECHO "X$hardcode_direct_FC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute_FC='`$ECHO "X$hardcode_direct_absolute_FC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L_FC='`$ECHO "X$hardcode_minus_L_FC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var_FC='`$ECHO "X$hardcode_shlibpath_var_FC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic_FC='`$ECHO "X$hardcode_automatic_FC" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath_FC='`$ECHO "X$inherit_rpath_FC" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs_FC='`$ECHO "X$link_all_deplibs_FC" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path_FC='`$ECHO "X$fix_srcfile_path_FC" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols_FC='`$ECHO "X$always_export_symbols_FC" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds_FC='`$ECHO "X$export_symbols_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms_FC='`$ECHO "X$exclude_expsyms_FC" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms_FC='`$ECHO "X$include_expsyms_FC" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds_FC='`$ECHO "X$prelink_cmds_FC" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec_FC='`$ECHO "X$file_list_spec_FC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action_FC='`$ECHO "X$hardcode_action_FC" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs_FC='`$ECHO "X$compiler_lib_search_dirs_FC" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects_FC='`$ECHO "X$predep_objects_FC" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects_FC='`$ECHO "X$postdep_objects_FC" | $Xsed -e "$delay_single_quote_subst"`' +predeps_FC='`$ECHO "X$predeps_FC" | $Xsed -e "$delay_single_quote_subst"`' +postdeps_FC='`$ECHO "X$postdeps_FC" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path_FC='`$ECHO "X$compiler_lib_search_path_FC" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_FC \ +compiler_FC \ +lt_prog_compiler_no_builtin_flag_FC \ +lt_prog_compiler_wl_FC \ +lt_prog_compiler_pic_FC \ +lt_prog_compiler_static_FC \ +lt_cv_prog_compiler_c_o_FC \ +export_dynamic_flag_spec_FC \ +whole_archive_flag_spec_FC \ +compiler_needs_object_FC \ +with_gnu_ld_FC \ +allow_undefined_flag_FC \ +no_undefined_flag_FC \ +hardcode_libdir_flag_spec_FC \ +hardcode_libdir_flag_spec_ld_FC \ +hardcode_libdir_separator_FC \ +fix_srcfile_path_FC \ +exclude_expsyms_FC \ +include_expsyms_FC \ +file_list_spec_FC \ +compiler_lib_search_dirs_FC \ +predep_objects_FC \ +postdep_objects_FC \ +predeps_FC \ +postdeps_FC \ +compiler_lib_search_path_FC; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +old_archive_cmds_FC \ +old_archive_from_new_cmds_FC \ +old_archive_from_expsyms_cmds_FC \ +archive_cmds_FC \ +archive_expsym_cmds_FC \ +module_cmds_FC \ +module_expsym_cmds_FC \ +export_symbols_cmds_FC \ +prelink_cmds_FC; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; +esac + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +GCC="$GCC" +CC="$CC" +acx_cv_header_stdint="$acx_cv_header_stdint" +acx_cv_type_int8_t="$acx_cv_type_int8_t" +acx_cv_type_int16_t="$acx_cv_type_int16_t" +acx_cv_type_int32_t="$acx_cv_type_int32_t" +acx_cv_type_int64_t="$acx_cv_type_int64_t" +acx_cv_type_intptr_t="$acx_cv_type_intptr_t" +ac_cv_type_uintmax_t="$ac_cv_type_uintmax_t" +ac_cv_type_uintptr_t="$ac_cv_type_uintptr_t" +ac_cv_type_uint64_t="$ac_cv_type_uint64_t" +ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t" +ac_cv_type_u_int32_t="$ac_cv_type_u_int32_t" +ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t" +ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t" +ac_cv_sizeof_void_p="$ac_cv_sizeof_void_p" + + +_ACEOF + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; + "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool" ) CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "gstdint.h" ) CONFIG_COMMANDS="$CONFIG_COMMANDS gstdint.h" ;; + "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@build_libsubdir@,$build_libsubdir,;t t +s,@build_subdir@,$build_subdir,;t t +s,@host_subdir@,$host_subdir,;t t +s,@target_subdir@,$target_subdir,;t t +s,@onestep_TRUE@,$onestep_TRUE,;t t +s,@onestep_FALSE@,$onestep_FALSE,;t t +s,@onestep@,$onestep,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@target@,$target,;t t +s,@target_cpu@,$target_cpu,;t t +s,@target_vendor@,$target_vendor,;t t +s,@target_os@,$target_os,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@CYGPATH_W@,$CYGPATH_W,;t t +s,@PACKAGE@,$PACKAGE,;t t +s,@VERSION@,$VERSION,;t t +s,@ACLOCAL@,$ACLOCAL,;t t +s,@AUTOCONF@,$AUTOCONF,;t t +s,@AUTOMAKE@,$AUTOMAKE,;t t +s,@AUTOHEADER@,$AUTOHEADER,;t t +s,@MAKEINFO@,$MAKEINFO,;t t +s,@install_sh@,$install_sh,;t t +s,@STRIP@,$STRIP,;t t +s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +s,@mkdir_p@,$mkdir_p,;t t +s,@AWK@,$AWK,;t t +s,@SET_MAKE@,$SET_MAKE,;t t +s,@am__leading_dot@,$am__leading_dot,;t t +s,@AMTAR@,$AMTAR,;t t +s,@am__tar@,$am__tar,;t t +s,@am__untar@,$am__untar,;t t +s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t +s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t +s,@MAINT@,$MAINT,;t t +s,@multi_basedir@,$multi_basedir,;t t +s,@toolexecdir@,$toolexecdir,;t t +s,@toolexeclibdir@,$toolexeclibdir,;t t +s,@CC@,$CC,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@DEPDIR@,$DEPDIR,;t t +s,@am__include@,$am__include,;t t +s,@am__quote@,$am__quote,;t t +s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +s,@CCDEPMODE@,$CCDEPMODE,;t t +s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +s,@AM_FCFLAGS@,$AM_FCFLAGS,;t t +s,@AM_CFLAGS@,$AM_CFLAGS,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LIBGFOR_USE_SYMVER_TRUE@,$LIBGFOR_USE_SYMVER_TRUE,;t t +s,@LIBGFOR_USE_SYMVER_FALSE@,$LIBGFOR_USE_SYMVER_FALSE,;t t +s,@AS@,$AS,;t t +s,@ac_ct_AS@,$ac_ct_AS,;t t +s,@AR@,$AR,;t t +s,@ac_ct_AR@,$ac_ct_AR,;t t +s,@RANLIB@,$RANLIB,;t t +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +s,@LIBTOOL@,$LIBTOOL,;t t +s,@SED@,$SED,;t t +s,@EGREP@,$EGREP,;t t +s,@FGREP@,$FGREP,;t t +s,@GREP@,$GREP,;t t +s,@LD@,$LD,;t t +s,@DUMPBIN@,$DUMPBIN,;t t +s,@ac_ct_DUMPBIN@,$ac_ct_DUMPBIN,;t t +s,@NM@,$NM,;t t +s,@LN_S@,$LN_S,;t t +s,@OBJDUMP@,$OBJDUMP,;t t +s,@ac_ct_OBJDUMP@,$ac_ct_OBJDUMP,;t t +s,@lt_ECHO@,$lt_ECHO,;t t +s,@DSYMUTIL@,$DSYMUTIL,;t t +s,@ac_ct_DSYMUTIL@,$ac_ct_DSYMUTIL,;t t +s,@NMEDIT@,$NMEDIT,;t t +s,@ac_ct_NMEDIT@,$ac_ct_NMEDIT,;t t +s,@LIPO@,$LIPO,;t t +s,@ac_ct_LIPO@,$ac_ct_LIPO,;t t +s,@OTOOL@,$OTOOL,;t t +s,@ac_ct_OTOOL@,$ac_ct_OTOOL,;t t +s,@OTOOL64@,$OTOOL64,;t t +s,@ac_ct_OTOOL64@,$ac_ct_OTOOL64,;t t +s,@CPP@,$CPP,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@enable_shared@,$enable_shared,;t t +s,@enable_static@,$enable_static,;t t +s,@FC@,$FC,;t t +s,@FCFLAGS@,$FCFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@ac_ct_FC@,$ac_ct_FC,;t t +s,@extra_ldflags_libgfortran@,$extra_ldflags_libgfortran,;t t +s,@FPU_HOST_HEADER@,$FPU_HOST_HEADER,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + # Do quote $f, to prevent DOS paths from being IFS'd. + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # grep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +# Compute $ac_file's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $ac_file | $ac_file:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || +$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ + X$ac_file : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X$ac_file | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'`/stamp-h$_am_stamp_count +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_COMMANDS section. +# +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue + ac_dest=`echo "$ac_file" | sed 's,:.*,,'` + ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_dir=`(dirname "$ac_dest") 2>/dev/null || +$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_dest" : 'X\(//\)[^/]' \| \ + X"$ac_dest" : 'X\(//\)$' \| \ + X"$ac_dest" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_dest" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +echo "$as_me: executing $ac_dest commands" >&6;} + case $ac_dest in + default-1 ) +# Only add multilib support code if we just rebuilt the top-level +# Makefile. +case " $CONFIG_FILES " in + *" Makefile "*) + ac_file=Makefile . ${multi_basedir}/config-ml.in + ;; +esac ;; + depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`(dirname "$mf") 2>/dev/null || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`(dirname "$file") 2>/dev/null || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p $dirpart/$fdir + else + as_dir=$dirpart/$fdir + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} + { (exit 1); exit 1; }; }; } + + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + libtool ) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool 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 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="FC " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: FC + +# The linker used to build libraries. +LD=$lt_LD_FC + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_FC + +# A language specific compiler. +CC=$lt_compiler_FC + +# Is the compiler the GNU compiler? +with_gcc=$GCC_FC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_FC + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_FC + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_FC + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_FC + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_FC + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_FC + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_FC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_FC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_FC + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_FC + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_FC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_FC + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_FC +archive_expsym_cmds=$lt_archive_expsym_cmds_FC + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_FC +module_expsym_cmds=$lt_module_expsym_cmds_FC + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_FC + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_FC + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_FC + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_FC + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_FC + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_FC + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_FC + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_FC + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_FC + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_FC + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_FC + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_FC + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_FC + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path_FC + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_FC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_FC + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_FC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_FC + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_FC + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_FC + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_FC + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_FC + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_FC +postdep_objects=$lt_postdep_objects_FC +predeps=$lt_predeps_FC +postdeps=$lt_postdeps_FC + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_FC + +# ### END LIBTOOL TAG CONFIG: FC +_LT_EOF + + ;; + gstdint.h ) +if test "$GCC" = yes; then + echo "/* generated for " `$CC --version | sed 1q` "*/" > tmp-stdint.h +else + echo "/* generated for $CC */" > tmp-stdint.h +fi + +sed 's/^ *//' >> tmp-stdint.h < +EOF + +if test "$acx_cv_header_stdint" != stdint.h; then + echo "#include " >> tmp-stdint.h +fi +if test "$acx_cv_header_stdint" != stddef.h; then + echo "#include <$acx_cv_header_stdint>" >> tmp-stdint.h +fi + +sed 's/^ *//' >> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <= 199901L + #ifndef _INT64_T + #define _INT64_T + #ifndef __int64_t_defined + typedef long long int64_t; + #endif + #endif + #ifndef _UINT64_T + #define _UINT64_T + typedef unsigned long long uint64_t; + #endif + + #elif defined __GNUC__ && defined (__STDC__) && __STDC__-0 + /* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and + does not implement __extension__. But that compiler doesn't define + __GNUC_MINOR__. */ + # if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__) + # define __extension__ + # endif + + # ifndef _INT64_T + # define _INT64_T + __extension__ typedef long long int64_t; + # endif + # ifndef _UINT64_T + # define _UINT64_T + __extension__ typedef unsigned long long uint64_t; + # endif + + #elif !defined __STRICT_ANSI__ + # if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__ + + # ifndef _INT64_T + # define _INT64_T + typedef __int64 int64_t; + # endif + # ifndef _UINT64_T + # define _UINT64_T + typedef unsigned __int64 uint64_t; + # endif + # endif /* compiler */ + + #endif /* ANSI version */ +EOF +fi + +# ------------- done int64_t types, emit intptr types ------------ +if test "$ac_cv_type_uintptr_t" != yes; then + sed 's/^ *//' >> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <> tmp-stdint.h <>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/configure.ac b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/configure.ac new file mode 100644 index 0000000000..0e0b5a7e31 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/configure.ac @@ -0,0 +1,459 @@ +# Process this file with autoconf to produce a configure script, like so: +# aclocal && autoconf && autoheader && automake + +AC_PREREQ(2.59) +AC_INIT([GNU Fortran Runtime Library], 0.3,,[libgfortran]) +AC_CONFIG_HEADER(config.h) +GCC_TOPLEV_SUBDIRS + +# ------- +# Options +# ------- + +AC_MSG_CHECKING([for --enable-version-specific-runtime-libs]) +AC_ARG_ENABLE(version-specific-runtime-libs, +[ --enable-version-specific-runtime-libs Specify that runtime libraries should be installed in a compiler-specific directory ], +[case "$enableval" in + yes) version_specific_libs=yes ;; + no) version_specific_libs=no ;; + *) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);; + esac], +[version_specific_libs=no]) +AC_MSG_RESULT($version_specific_libs) + +# Build with intermodule optimisations +AC_MSG_CHECKING([for --enable-intermodule]) +AC_ARG_ENABLE(intermodule, +[ --enable-intermodule build the library in one step], +[case "$enable_intermodule" in + yes) onestep="-onestep";; + *) onestep="";; +esac], +[onestep=""]) +AC_MSG_RESULT($enable_intermodule) +AM_CONDITIONAL(onestep,[test x$onestep = x-onestep]) +AC_SUBST(onestep) + +# Gets build, host, target, *_vendor, *_cpu, *_os, etc. +# +# You will slowly go insane if you do not grok the following fact: when +# building this library, the top-level /target/ becomes the library's /host/. +# +# configure then causes --target to default to --host, exactly like any +# other package using autoconf. Therefore, 'target' and 'host' will +# always be the same. This makes sense both for native and cross compilers +# just think about it for a little while. :-) +# +# Also, if this library is being configured as part of a cross compiler, the +# top-level configure script will pass the "real" host as $with_cross_host. +# +# Do not delete or change the following two lines. For why, see +# http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html +AC_CANONICAL_SYSTEM +target_alias=${target_alias-$host_alias} + +# Sets up automake. Must come after AC_CANONICAL_SYSTEM. Each of the +# following is magically included in AUTOMAKE_OPTIONS in each Makefile.am. +# 1.9.6: minimum required version +# no-define: PACKAGE and VERSION will not be #define'd in config.h (a bunch +# of other PACKAGE_* variables will, however, and there's nothing +# we can do about that; they come from AC_INIT). +# foreign: we don't follow the normal rules for GNU packages (no COPYING +# file in the top srcdir, etc, etc), so stop complaining. +# -Wall: turns on all automake warnings... +# -Wno-portability: ...except this one, since GNU make is required. +AM_INIT_AUTOMAKE([1.9.6 no-define foreign -Wall -Wno-portability]) + +AM_MAINTAINER_MODE +AM_ENABLE_MULTILIB(, ..) + +# Handy for debugging: +#AC_MSG_NOTICE($build / $host / $target / $host_alias / $target_alias); sleep 5 + +# Are we being configured with some form of cross compiler? +# NB: We don't actually need to know this just now, but when, say, a test +# suite is included, we'll have to know. +if test "$build" != "$host"; then + LIBGFOR_IS_NATIVE=false + GCC_NO_EXECUTABLES +else + LIBGFOR_IS_NATIVE=true +fi + +# Calculate toolexeclibdir +# Also toolexecdir, though it's only used in toolexeclibdir +case ${version_specific_libs} in + yes) + # Need the gcc compiler version to know where to install libraries + # and header files if --enable-version-specific-runtime-libs option + # is selected. + toolexecdir='$(libdir)/gcc/$(target_alias)' + toolexeclibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)' + ;; + no) + if test -n "$with_cross_host" && + test x"$with_cross_host" != x"no"; then + # Install a library built with a cross compiler in tooldir, not libdir. + toolexecdir='$(exec_prefix)/$(target_alias)' + toolexeclibdir='$(toolexecdir)/lib' + else + toolexecdir='$(libdir)/gcc-lib/$(target_alias)' + toolexeclibdir='$(libdir)' + fi + multi_os_directory=`$CC -print-multi-os-directory` + case $multi_os_directory in + .) ;; # Avoid trailing /. + *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;; + esac + ;; +esac +AC_SUBST(toolexecdir) +AC_SUBST(toolexeclibdir) + +# Check the compiler. +# The same as in boehm-gc and libstdc++. Have to borrow it from there. +# We must force CC to /not/ be precious variables; otherwise +# the wrong, non-multilib-adjusted value will be used in multilibs. +# As a side effect, we have to subst CFLAGS ourselves. + +m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS]) +m4_define([_AC_ARG_VAR_PRECIOUS],[]) +AC_PROG_CC +m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) + +# Add -Wall -fno-repack-arrays -fno-underscoring if we are using GCC. +if test "x$GCC" = "xyes"; then + AM_FCFLAGS="-I . -Wall -Werror -fimplicit-none -fno-repack-arrays -fno-underscoring" + ## We like to use C99 routines when available. This makes sure that + ## __STDC_VERSION__ is set such that libc includes make them available. + AM_CFLAGS="-std=gnu99 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -Wextra -Wwrite-strings" + ## Compile the following tests with the same system header contents + ## that we'll encounter when compiling our own source files. + CFLAGS="-std=gnu99 $CFLAGS" +fi +AC_SUBST(AM_FCFLAGS) +AC_SUBST(AM_CFLAGS) +AC_SUBST(CFLAGS) + +# Check for symbol versioning (copied from libssp). +AC_MSG_CHECKING([whether symbol versioning is supported]) +cat > conftest.map <B!Iuo?f9_#HfYkhk<^lxAFi|S~#|HSIq z<&&#tPue!t;K|>u)u;ZEzU(_ywZR^<)pB*Vx>%j5Ua+5n-alEbR{N^uKD%|vv8X*` z6SHL8Y2#NDcZ8ESP8@l)kz0&ev6`z^d%4dre09pW6~Vx zg5(HQ_x$K;n3?fwOkhml|1tqPcjIenrhXp(9TON67!$aX0FDm}_Q3P8wdc$Ab2@a` zKe&X%|Bp+^^kx6sE)&!D7S^7Rtvz3^pA%|KLhZRmCu>WLNsZh07qGcKA6t9ATtC-% zHL3AxvQ~MrwnCYt>c%ak&8x|=`g#0!Okhl)pTPb0t?qh;tQ;n`I&tfns+zMkP`!4- z8thqH2Vq^apRb?>kcazZT0?#9Rx7ilCR?*XYl&kXZ9PS}^R~)cvb8Z*h}0o;9((`oG1!m63BNe_Ce?m(+Bv(^q=zuJL*wWRTftVWgx zQp{5%53HR7)paJO85$2g>NGM=^g3|eMC1y;KoM_A<9klyw9VDUbZ1UXFedSkCYT?~ zFA!6%2I&$s9iDcY{Px5H6p8Kmq?(?ved}4wXj0_wWVMP`Dl(l(k=mX(#)KVK+Y`r0 z&&MvI)`6JCq(~E@Yll72dZzOSP519~n*8>}0~CerH`|@P^LF$+la6d>?O)t6Q&VV( z4Wx;;r1g^1IxlLoUP1Q|mU)J1&vMV1DZKxSqH21NF{M3(RjNJ9Rg1|()<+hdYE6?) zL3f~er|3jtuNuS>&q?)bPW5cMXYKC*)AM`MTjH2cX!YDouO6Ajr1D#*vQH6jNn?(Z zN6jOi>L!wz+M~xa8s!nRK#@Gq@d8EiK#E7-b_%=B#AGAKA}4wsxNg_zG$)lmIhB2i zcuN{R)xWAAzcVHsRp4eq zJsk5HWyk#th2tWjlE#;W#^!8BxTMi@USoar#VBahR8HfULSu7YV%3mij#K$VrRTi2 z`n*J{A<4-hr!rE)8*&WPT$=J*6z56d6?)g5=;_7le3sH(zh*5*CJ1_qtnzA#16zCb zb%ocY_#LOXPYSO|FC**MwG?J|U7i#^q4uhYQ(Mn2?y2InG;;5R)-0zyTCRbs=kH8< zB~4wiUIUSSCaq66t&9~ulU~o(UGa5AKXLtkRh|@Hlim-V-n!<6t6)ed#<3y&E5JdKoLc zBICfqYpk1@-2y4RCcSSuy_kpQYOHX*urbFekCtuVaHZPT6aJFQADqfa32!M+PkC>J zD};?XPI!aLs~;6AvsVWhN_n#!1J%q5UhSGa<|LKxIhB1<_(Psod$P?lzb8U#juRfC zbZXiuMZM;A&xQ42;4m#MCuR)C{|uGWcuHu@&6s65q;Y5c-z#5o7Aw0}1BEPFIaI!mnb2(_NYktEg?J%r*-i%xN$ z6kee>kmyHUvpAz!PIyd8Uvo;)$F`pEmsDy>d9yq>dCGe$%;={0o1s=CIN>d+^qlvW zozYM&Qo7u&r$y^6}g9mvr&c;-jc@CLSwFb z(3smWS_a-}+RDSAIMoM@~IeMy@%`>H|?v!Po6#k%eez#NF>_<&avHwA9mQx-r z&%o6l&)NM=+;c2U=lsh~X`d7xlU7gG9^0DABedo?;W1_Ul~h`o()m28JVL7{qsQ!| zZa(U?b~)h@nfAE${!sR6KFbMz$aM1?PAB%Lww~%BRBB3jvn&IJNvmrOSp9DP-l^=9 z!e7eMljwu5sT@LUjuRe{=axsD(kZ)lx@!NywVinVZ`gi1Y!6rDZ+rvcE09-JCPnWG zMR4E!`PSPlYJ0fuZf{BTwm(x{QjVc#>jtL>j@#{-V^b6eIBp2y7)NcnJ#m~AEjdO0 z=QGF90>JP8XVTrW_V2eb4ZS3jj*py$VgL1I0c2rGlvF;x9n)K~ulKF&MPtKB>#3i&|H|Ml6j(9|_1x}u^0@u$bbH=)E zC971Pv5Fi?21nN-N0Ld2e&TfY9cIp0*Of`p{Xq7+D9>2e?{ZohM?9kYf!n+`ZMfPj zPq`&KkS1P{@AWS^&GVu*>nU^(VVP&BF0*v%ljbj-W}cUr{FJt*xnn;4P(6etX+iZ3 zhn#9vm!)M%2bMcldxEJRNQ()%;q{_!x17=8 znY4PY`>tE^y{~S_Q^XrI?l|Ezc5BhOhr&R0ovDepBm>v4M%Lg-<2zZ6WXhAqJVo-r z*!+V}}ovpGfOlS;Le)V5f58DP^MPgq|ik@((F^)J%nmpHa!uK!B z?Z!Ms(oPybbQ(9OJ?llgH_?BWxc({`>3JIOF}Gw_yo_c}q1p4gx|qtFwhz)SrgI=o za>JAcS~<_m#!cs(_8iZWv*ZJ>l9RJCkS5+SGdF$aw9ogtj{8*dxE0vG?uKQqk@}Fz zVp?wAGeEVNl|d{?3zHI9?l?0iH^1UkYntU{Qxa(2DLEs9SmGHIa`V?tb-ym|Ny-Tc zY~OLiGRH`JNM$i0J0BRJT1?0wmZXIV2`qP=tAWd?^tOQy)&rHkD-gDY>JWI~zCGc_D z+T`WL45W#7%*-v*PJ5hH)Nall^hzbLeccVqTwCgaR+YuH+;VDwYB4K=SdtbdC9vFa zW=?MT*s0bu%gd%D&^#|WBZFAt856Rw)2Z&)ZO$EZLIT@&+_22Cr5$KhSxm^nr2(qN zgbZRyT9}Z)a>tnoS@^=K)-=n@CM3{2FF7HDSmGHIvTM<)uGdyCR)4g03x2OJuSo(` zujC@dTw20`>sJ%=ubX_5fC8)%&ESpu0Z-};l&p5sNg1FyWx zt`DS%cXa=@$DMW@VWRiuj8A(X*uL(DWv(stKPT5kJbfNC)-gIJOlCMB@kab`|# z-|AFrn&oB3gh2DWea8*U99!CfR+Yts-2UkR)nY;h zu_P@_NMO0+%!KUT?Nn=;E*D}z{)7A7UI+;L`3?tH|l*0h+CK=Zuhj0|FlXH3YQ?>g1} zy3M(Ro_7MU0RcfHHChJnnB@)h86Z5cVM^>YlgaSqKzzhVc>nzj#Jr|uu z#<4`K?}6*)FFRhKh&S|l&*x6#w$!x?_WC{ieHcD7YuUQ^j6LugRQfJ%_>FP+8FMx( zco%lO^Z13*s~rcBBqQj)d#}?yOKOS7*^ck^WZQw3R60wXQu>Kg>gyFczSnbYns|p%_){wLl+d_um(W<~c;LLo zY{v_f()g0o*mk@=u4X&F&y#HjT9Q=6u{?0GV&&^oz_^fCRs(>gCv)m6)5%f z+CJc1fMiHDsJ!=(P+91D;C!{3Bh`>*ppfQyd!60W_CELcYmMft(p&Wblo+eTVA&g;YJsDvE2N{U-`aSu&=y$dP2w z{lN7dX0DF*zvGm0QglC%{cPlwQjsGb(f!3qP+G4*p0l+`{pr8rN*(0{FRgwx76;xQ@p++43-W>ObD*{?{?Xi4dZS*7&omXvy~uT)GNW_7Vll5Rlj zf$dqXeB!MCMUHjDlm>3Ib>nfyQ zN%dz=^)~Z+DxE*rUmMELXgTn&{0!zF9{kVPn$0LX&Zn;1PZaC_P4z8+%lQ1?2=j}0mjR}ki z{0}BDS^w~FAAZP;t$ns`&mul+cflS{*#lqL?sENn1+o8;K8n}2#Yge}*&f*LFKf?# zU3>l;p7AwFKLyYAC;9%{J_vaA>`5zc9}|poR`I?8IY#3sAJ*}>3O!rlE?TpW=l3`5 zNF2C!mDO;KiW%O~5;S(0HL-*#YJ{|{XMr=4*8XG~yBU`$|4U`$|4U`$|4 zU`$|4U`$|4U`$|4U`$|4U`$|4U`$|4U`$|4U`$|4U`$|4U`$|4U`$|4;J-S7e*$4# BzC!>2 literal 0 HcmV?d00001 diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c10.F90 new file mode 100644 index 0000000000..96938938e5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_10) +#ifdef HAVE_CABSL + +elemental function _gfortran_specific__abs_c10 (parm) + complex (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__abs_c10 + + _gfortran_specific__abs_c10 = abs (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c16.F90 new file mode 100644 index 0000000000..db5cb0087f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_16) +#ifdef HAVE_CABSL + +elemental function _gfortran_specific__abs_c16 (parm) + complex (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__abs_c16 + + _gfortran_specific__abs_c16 = abs (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c4.F90 new file mode 100644 index 0000000000..d0cb85be34 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_4) +#ifdef HAVE_CABSF + +elemental function _gfortran_specific__abs_c4 (parm) + complex (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__abs_c4 + + _gfortran_specific__abs_c4 = abs (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c8.F90 new file mode 100644 index 0000000000..b5a2849313 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_8) +#ifdef HAVE_CABS + +elemental function _gfortran_specific__abs_c8 (parm) + complex (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__abs_c8 + + _gfortran_specific__abs_c8 = abs (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_i16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_i16.F90 new file mode 100644 index 0000000000..d7b825bfa5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_i16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_INTEGER_16) + + +elemental function _gfortran_specific__abs_i16 (parm) + integer (kind=16), intent (in) :: parm + integer (kind=16) :: _gfortran_specific__abs_i16 + + _gfortran_specific__abs_i16 = abs (parm) +end function + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_i4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_i4.F90 new file mode 100644 index 0000000000..3d6619a27e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_i4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_INTEGER_4) + + +elemental function _gfortran_specific__abs_i4 (parm) + integer (kind=4), intent (in) :: parm + integer (kind=4) :: _gfortran_specific__abs_i4 + + _gfortran_specific__abs_i4 = abs (parm) +end function + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_i8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_i8.F90 new file mode 100644 index 0000000000..9e68ba667f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_i8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_INTEGER_8) + + +elemental function _gfortran_specific__abs_i8 (parm) + integer (kind=8), intent (in) :: parm + integer (kind=8) :: _gfortran_specific__abs_i8 + + _gfortran_specific__abs_i8 = abs (parm) +end function + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r10.F90 new file mode 100644 index 0000000000..26b6aa6c7f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_FABSL + +elemental function _gfortran_specific__abs_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__abs_r10 + + _gfortran_specific__abs_r10 = abs (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r16.F90 new file mode 100644 index 0000000000..3117d4a581 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_FABSL + +elemental function _gfortran_specific__abs_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__abs_r16 + + _gfortran_specific__abs_r16 = abs (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r4.F90 new file mode 100644 index 0000000000..bb4ac4a768 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_FABSF + +elemental function _gfortran_specific__abs_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__abs_r4 + + _gfortran_specific__abs_r4 = abs (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r8.F90 new file mode 100644 index 0000000000..b41e698217 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_FABS + +elemental function _gfortran_specific__abs_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__abs_r8 + + _gfortran_specific__abs_r8 = abs (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r10.F90 new file mode 100644 index 0000000000..d5c3cd5a49 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_ACOSL + +elemental function _gfortran_specific__acos_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__acos_r10 + + _gfortran_specific__acos_r10 = acos (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r16.F90 new file mode 100644 index 0000000000..80aa22c8b1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_ACOSL + +elemental function _gfortran_specific__acos_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__acos_r16 + + _gfortran_specific__acos_r16 = acos (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r4.F90 new file mode 100644 index 0000000000..300524ed63 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_ACOSF + +elemental function _gfortran_specific__acos_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__acos_r4 + + _gfortran_specific__acos_r4 = acos (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r8.F90 new file mode 100644 index 0000000000..ca526cbb06 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_ACOS + +elemental function _gfortran_specific__acos_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__acos_r8 + + _gfortran_specific__acos_r8 = acos (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r10.F90 new file mode 100644 index 0000000000..f8193f9df3 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_ACOSHL + +elemental function _gfortran_specific__acosh_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__acosh_r10 + + _gfortran_specific__acosh_r10 = acosh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r16.F90 new file mode 100644 index 0000000000..e2ae3bde8e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_ACOSHL + +elemental function _gfortran_specific__acosh_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__acosh_r16 + + _gfortran_specific__acosh_r16 = acosh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r4.F90 new file mode 100644 index 0000000000..61412c32e7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_ACOSHF + +elemental function _gfortran_specific__acosh_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__acosh_r4 + + _gfortran_specific__acosh_r4 = acosh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r8.F90 new file mode 100644 index 0000000000..cb230aeedb --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_ACOSH + +elemental function _gfortran_specific__acosh_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__acosh_r8 + + _gfortran_specific__acosh_r8 = acosh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c10.F90 new file mode 100644 index 0000000000..584299e39e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_10) + + +elemental function _gfortran_specific__aimag_c10 (parm) + complex (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__aimag_c10 + + _gfortran_specific__aimag_c10 = aimag (parm) +end function + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c16.F90 new file mode 100644 index 0000000000..01f24a282d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_16) + + +elemental function _gfortran_specific__aimag_c16 (parm) + complex (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__aimag_c16 + + _gfortran_specific__aimag_c16 = aimag (parm) +end function + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c4.F90 new file mode 100644 index 0000000000..d52e057cf8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_4) + + +elemental function _gfortran_specific__aimag_c4 (parm) + complex (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__aimag_c4 + + _gfortran_specific__aimag_c4 = aimag (parm) +end function + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c8.F90 new file mode 100644 index 0000000000..b1a933ffcd --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_8) + + +elemental function _gfortran_specific__aimag_c8 (parm) + complex (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__aimag_c8 + + _gfortran_specific__aimag_c8 = aimag (parm) +end function + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r10.F90 new file mode 100644 index 0000000000..47a942405d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_TRUNCL + +elemental function _gfortran_specific__aint_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__aint_r10 + + _gfortran_specific__aint_r10 = aint (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r16.F90 new file mode 100644 index 0000000000..b91640ee22 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_TRUNCL + +elemental function _gfortran_specific__aint_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__aint_r16 + + _gfortran_specific__aint_r16 = aint (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r4.F90 new file mode 100644 index 0000000000..7607afdc6b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_TRUNCF + +elemental function _gfortran_specific__aint_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__aint_r4 + + _gfortran_specific__aint_r4 = aint (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r8.F90 new file mode 100644 index 0000000000..c0b666aa07 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_TRUNC + +elemental function _gfortran_specific__aint_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__aint_r8 + + _gfortran_specific__aint_r8 = aint (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r10.F90 new file mode 100644 index 0000000000..a768642e1a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_ROUNDL + +elemental function _gfortran_specific__anint_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__anint_r10 + + _gfortran_specific__anint_r10 = anint (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r16.F90 new file mode 100644 index 0000000000..924b9143c8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_ROUNDL + +elemental function _gfortran_specific__anint_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__anint_r16 + + _gfortran_specific__anint_r16 = anint (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r4.F90 new file mode 100644 index 0000000000..000a20b01c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_ROUNDF + +elemental function _gfortran_specific__anint_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__anint_r4 + + _gfortran_specific__anint_r4 = anint (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r8.F90 new file mode 100644 index 0000000000..be122bd3f5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_ROUND + +elemental function _gfortran_specific__anint_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__anint_r8 + + _gfortran_specific__anint_r8 = anint (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r10.F90 new file mode 100644 index 0000000000..fe2b68a23c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_ASINL + +elemental function _gfortran_specific__asin_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__asin_r10 + + _gfortran_specific__asin_r10 = asin (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r16.F90 new file mode 100644 index 0000000000..87bf9e7830 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_ASINL + +elemental function _gfortran_specific__asin_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__asin_r16 + + _gfortran_specific__asin_r16 = asin (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r4.F90 new file mode 100644 index 0000000000..63367d1e86 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_ASINF + +elemental function _gfortran_specific__asin_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__asin_r4 + + _gfortran_specific__asin_r4 = asin (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r8.F90 new file mode 100644 index 0000000000..97e0088bdd --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_ASIN + +elemental function _gfortran_specific__asin_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__asin_r8 + + _gfortran_specific__asin_r8 = asin (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r10.F90 new file mode 100644 index 0000000000..a05abe78dd --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_ASINHL + +elemental function _gfortran_specific__asinh_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__asinh_r10 + + _gfortran_specific__asinh_r10 = asinh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r16.F90 new file mode 100644 index 0000000000..e0e94d5470 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_ASINHL + +elemental function _gfortran_specific__asinh_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__asinh_r16 + + _gfortran_specific__asinh_r16 = asinh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r4.F90 new file mode 100644 index 0000000000..f80bf50846 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_ASINHF + +elemental function _gfortran_specific__asinh_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__asinh_r4 + + _gfortran_specific__asinh_r4 = asinh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r8.F90 new file mode 100644 index 0000000000..8b636a65c3 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_ASINH + +elemental function _gfortran_specific__asinh_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__asinh_r8 + + _gfortran_specific__asinh_r8 = asinh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r10.F90 new file mode 100644 index 0000000000..c38b3c335c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) + +#ifdef HAVE_ATAN2L + +elemental function _gfortran_specific__atan2_r10 (p1, p2) + real (kind=10), intent (in) :: p1, p2 + real (kind=10) :: _gfortran_specific__atan2_r10 + + _gfortran_specific__atan2_r10 = atan2 (p1, p2) +end function + +#endif + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r16.F90 new file mode 100644 index 0000000000..4d65da2a85 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) + +#ifdef HAVE_ATAN2L + +elemental function _gfortran_specific__atan2_r16 (p1, p2) + real (kind=16), intent (in) :: p1, p2 + real (kind=16) :: _gfortran_specific__atan2_r16 + + _gfortran_specific__atan2_r16 = atan2 (p1, p2) +end function + +#endif + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r4.F90 new file mode 100644 index 0000000000..cdebd47dd5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) + +#ifdef HAVE_ATAN2F + +elemental function _gfortran_specific__atan2_r4 (p1, p2) + real (kind=4), intent (in) :: p1, p2 + real (kind=4) :: _gfortran_specific__atan2_r4 + + _gfortran_specific__atan2_r4 = atan2 (p1, p2) +end function + +#endif + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r8.F90 new file mode 100644 index 0000000000..7cfe47ec76 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) + +#ifdef HAVE_ATAN2 + +elemental function _gfortran_specific__atan2_r8 (p1, p2) + real (kind=8), intent (in) :: p1, p2 + real (kind=8) :: _gfortran_specific__atan2_r8 + + _gfortran_specific__atan2_r8 = atan2 (p1, p2) +end function + +#endif + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r10.F90 new file mode 100644 index 0000000000..36a813b69a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_ATANL + +elemental function _gfortran_specific__atan_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__atan_r10 + + _gfortran_specific__atan_r10 = atan (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r16.F90 new file mode 100644 index 0000000000..b177eeb194 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_ATANL + +elemental function _gfortran_specific__atan_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__atan_r16 + + _gfortran_specific__atan_r16 = atan (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r4.F90 new file mode 100644 index 0000000000..0ec9fe64bf --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_ATANF + +elemental function _gfortran_specific__atan_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__atan_r4 + + _gfortran_specific__atan_r4 = atan (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r8.F90 new file mode 100644 index 0000000000..df118004a1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_ATAN + +elemental function _gfortran_specific__atan_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__atan_r8 + + _gfortran_specific__atan_r8 = atan (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r10.F90 new file mode 100644 index 0000000000..a695cee9ad --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_ATANHL + +elemental function _gfortran_specific__atanh_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__atanh_r10 + + _gfortran_specific__atanh_r10 = atanh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r16.F90 new file mode 100644 index 0000000000..d7e216c3e7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_ATANHL + +elemental function _gfortran_specific__atanh_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__atanh_r16 + + _gfortran_specific__atanh_r16 = atanh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r4.F90 new file mode 100644 index 0000000000..09fc73f5c3 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_ATANHF + +elemental function _gfortran_specific__atanh_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__atanh_r4 + + _gfortran_specific__atanh_r4 = atanh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r8.F90 new file mode 100644 index 0000000000..f78eca0625 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_ATANH + +elemental function _gfortran_specific__atanh_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__atanh_r8 + + _gfortran_specific__atanh_r8 = atanh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c10.F90 new file mode 100644 index 0000000000..d53ac1e19a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_10) + + +elemental function _gfortran_specific__conjg_10 (parm) + complex (kind=10), intent (in) :: parm + complex (kind=10) :: _gfortran_specific__conjg_10 + + _gfortran_specific__conjg_10 = conjg (parm) +end function + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c16.F90 new file mode 100644 index 0000000000..0052f611c0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_16) + + +elemental function _gfortran_specific__conjg_16 (parm) + complex (kind=16), intent (in) :: parm + complex (kind=16) :: _gfortran_specific__conjg_16 + + _gfortran_specific__conjg_16 = conjg (parm) +end function + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c4.F90 new file mode 100644 index 0000000000..138266ebaa --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_4) + + +elemental function _gfortran_specific__conjg_4 (parm) + complex (kind=4), intent (in) :: parm + complex (kind=4) :: _gfortran_specific__conjg_4 + + _gfortran_specific__conjg_4 = conjg (parm) +end function + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c8.F90 new file mode 100644 index 0000000000..ed1c8f5e1e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_8) + + +elemental function _gfortran_specific__conjg_8 (parm) + complex (kind=8), intent (in) :: parm + complex (kind=8) :: _gfortran_specific__conjg_8 + + _gfortran_specific__conjg_8 = conjg (parm) +end function + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c10.F90 new file mode 100644 index 0000000000..612d4387e1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_10) +#ifdef HAVE_CCOSL + +elemental function _gfortran_specific__cos_c10 (parm) + complex (kind=10), intent (in) :: parm + complex (kind=10) :: _gfortran_specific__cos_c10 + + _gfortran_specific__cos_c10 = cos (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c16.F90 new file mode 100644 index 0000000000..7cea764933 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_16) +#ifdef HAVE_CCOSL + +elemental function _gfortran_specific__cos_c16 (parm) + complex (kind=16), intent (in) :: parm + complex (kind=16) :: _gfortran_specific__cos_c16 + + _gfortran_specific__cos_c16 = cos (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c4.F90 new file mode 100644 index 0000000000..f0dd76e8db --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_4) +#ifdef HAVE_CCOSF + +elemental function _gfortran_specific__cos_c4 (parm) + complex (kind=4), intent (in) :: parm + complex (kind=4) :: _gfortran_specific__cos_c4 + + _gfortran_specific__cos_c4 = cos (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c8.F90 new file mode 100644 index 0000000000..7acc35a695 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_8) +#ifdef HAVE_CCOS + +elemental function _gfortran_specific__cos_c8 (parm) + complex (kind=8), intent (in) :: parm + complex (kind=8) :: _gfortran_specific__cos_c8 + + _gfortran_specific__cos_c8 = cos (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r10.F90 new file mode 100644 index 0000000000..678dccb579 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_COSL + +elemental function _gfortran_specific__cos_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__cos_r10 + + _gfortran_specific__cos_r10 = cos (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r16.F90 new file mode 100644 index 0000000000..dacd87721f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_COSL + +elemental function _gfortran_specific__cos_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__cos_r16 + + _gfortran_specific__cos_r16 = cos (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r4.F90 new file mode 100644 index 0000000000..c6dc39ae3e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_COSF + +elemental function _gfortran_specific__cos_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__cos_r4 + + _gfortran_specific__cos_r4 = cos (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r8.F90 new file mode 100644 index 0000000000..51b42cd99e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_COS + +elemental function _gfortran_specific__cos_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__cos_r8 + + _gfortran_specific__cos_r8 = cos (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r10.F90 new file mode 100644 index 0000000000..b7826f25e0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_COSHL + +elemental function _gfortran_specific__cosh_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__cosh_r10 + + _gfortran_specific__cosh_r10 = cosh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r16.F90 new file mode 100644 index 0000000000..adbb567321 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_COSHL + +elemental function _gfortran_specific__cosh_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__cosh_r16 + + _gfortran_specific__cosh_r16 = cosh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r4.F90 new file mode 100644 index 0000000000..98719312e0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_COSHF + +elemental function _gfortran_specific__cosh_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__cosh_r4 + + _gfortran_specific__cosh_r4 = cosh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r8.F90 new file mode 100644 index 0000000000..4b0362f2ef --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_COSH + +elemental function _gfortran_specific__cosh_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__cosh_r8 + + _gfortran_specific__cosh_r8 = cosh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_i16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_i16.F90 new file mode 100644 index 0000000000..70753b42ff --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_i16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_INTEGER_16) + + + +elemental function _gfortran_specific__dim_i16 (p1, p2) + integer (kind=16), intent (in) :: p1, p2 + integer (kind=16) :: _gfortran_specific__dim_i16 + + _gfortran_specific__dim_i16 = dim (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_i4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_i4.F90 new file mode 100644 index 0000000000..c80a367f11 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_i4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_INTEGER_4) + + + +elemental function _gfortran_specific__dim_i4 (p1, p2) + integer (kind=4), intent (in) :: p1, p2 + integer (kind=4) :: _gfortran_specific__dim_i4 + + _gfortran_specific__dim_i4 = dim (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_i8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_i8.F90 new file mode 100644 index 0000000000..cbb45fcf11 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_i8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_INTEGER_8) + + + +elemental function _gfortran_specific__dim_i8 (p1, p2) + integer (kind=8), intent (in) :: p1, p2 + integer (kind=8) :: _gfortran_specific__dim_i8 + + _gfortran_specific__dim_i8 = dim (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r10.F90 new file mode 100644 index 0000000000..e84e1428f1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) + + + +elemental function _gfortran_specific__dim_r10 (p1, p2) + real (kind=10), intent (in) :: p1, p2 + real (kind=10) :: _gfortran_specific__dim_r10 + + _gfortran_specific__dim_r10 = dim (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r16.F90 new file mode 100644 index 0000000000..6738e735c9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) + + + +elemental function _gfortran_specific__dim_r16 (p1, p2) + real (kind=16), intent (in) :: p1, p2 + real (kind=16) :: _gfortran_specific__dim_r16 + + _gfortran_specific__dim_r16 = dim (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r4.F90 new file mode 100644 index 0000000000..22f5f00924 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) + + + +elemental function _gfortran_specific__dim_r4 (p1, p2) + real (kind=4), intent (in) :: p1, p2 + real (kind=4) :: _gfortran_specific__dim_r4 + + _gfortran_specific__dim_r4 = dim (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r8.F90 new file mode 100644 index 0000000000..e209b94521 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) + + + +elemental function _gfortran_specific__dim_r8 (p1, p2) + real (kind=8), intent (in) :: p1, p2 + real (kind=8) :: _gfortran_specific__dim_r8 + + _gfortran_specific__dim_r8 = dim (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c10.F90 new file mode 100644 index 0000000000..5549cd630d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_10) +#ifdef HAVE_CEXPL + +elemental function _gfortran_specific__exp_c10 (parm) + complex (kind=10), intent (in) :: parm + complex (kind=10) :: _gfortran_specific__exp_c10 + + _gfortran_specific__exp_c10 = exp (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c16.F90 new file mode 100644 index 0000000000..09f4b72a9f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_16) +#ifdef HAVE_CEXPL + +elemental function _gfortran_specific__exp_c16 (parm) + complex (kind=16), intent (in) :: parm + complex (kind=16) :: _gfortran_specific__exp_c16 + + _gfortran_specific__exp_c16 = exp (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c4.F90 new file mode 100644 index 0000000000..27c030aae2 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_4) +#ifdef HAVE_CEXPF + +elemental function _gfortran_specific__exp_c4 (parm) + complex (kind=4), intent (in) :: parm + complex (kind=4) :: _gfortran_specific__exp_c4 + + _gfortran_specific__exp_c4 = exp (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c8.F90 new file mode 100644 index 0000000000..9b03a7120d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_8) +#ifdef HAVE_CEXP + +elemental function _gfortran_specific__exp_c8 (parm) + complex (kind=8), intent (in) :: parm + complex (kind=8) :: _gfortran_specific__exp_c8 + + _gfortran_specific__exp_c8 = exp (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r10.F90 new file mode 100644 index 0000000000..c66a1b71a9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_EXPL + +elemental function _gfortran_specific__exp_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__exp_r10 + + _gfortran_specific__exp_r10 = exp (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r16.F90 new file mode 100644 index 0000000000..3c6c02db6c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_EXPL + +elemental function _gfortran_specific__exp_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__exp_r16 + + _gfortran_specific__exp_r16 = exp (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r4.F90 new file mode 100644 index 0000000000..2ed5ee3832 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_EXPF + +elemental function _gfortran_specific__exp_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__exp_r4 + + _gfortran_specific__exp_r4 = exp (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r8.F90 new file mode 100644 index 0000000000..64111e0abc --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_EXP + +elemental function _gfortran_specific__exp_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__exp_r8 + + _gfortran_specific__exp_r8 = exp (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r10.F90 new file mode 100644 index 0000000000..4aa1f98266 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_LOG10L + +elemental function _gfortran_specific__log10_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__log10_r10 + + _gfortran_specific__log10_r10 = log10 (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r16.F90 new file mode 100644 index 0000000000..0af36baa89 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_LOG10L + +elemental function _gfortran_specific__log10_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__log10_r16 + + _gfortran_specific__log10_r16 = log10 (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r4.F90 new file mode 100644 index 0000000000..d98851fce2 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_LOG10F + +elemental function _gfortran_specific__log10_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__log10_r4 + + _gfortran_specific__log10_r4 = log10 (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r8.F90 new file mode 100644 index 0000000000..cd687d009c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_LOG10 + +elemental function _gfortran_specific__log10_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__log10_r8 + + _gfortran_specific__log10_r8 = log10 (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c10.F90 new file mode 100644 index 0000000000..c7524e4ed1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_10) +#ifdef HAVE_CLOGL + +elemental function _gfortran_specific__log_c10 (parm) + complex (kind=10), intent (in) :: parm + complex (kind=10) :: _gfortran_specific__log_c10 + + _gfortran_specific__log_c10 = log (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c16.F90 new file mode 100644 index 0000000000..32a8171dbe --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_16) +#ifdef HAVE_CLOGL + +elemental function _gfortran_specific__log_c16 (parm) + complex (kind=16), intent (in) :: parm + complex (kind=16) :: _gfortran_specific__log_c16 + + _gfortran_specific__log_c16 = log (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c4.F90 new file mode 100644 index 0000000000..b57818b519 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_4) +#ifdef HAVE_CLOGF + +elemental function _gfortran_specific__log_c4 (parm) + complex (kind=4), intent (in) :: parm + complex (kind=4) :: _gfortran_specific__log_c4 + + _gfortran_specific__log_c4 = log (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c8.F90 new file mode 100644 index 0000000000..3572b7d0ab --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_8) +#ifdef HAVE_CLOG + +elemental function _gfortran_specific__log_c8 (parm) + complex (kind=8), intent (in) :: parm + complex (kind=8) :: _gfortran_specific__log_c8 + + _gfortran_specific__log_c8 = log (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r10.F90 new file mode 100644 index 0000000000..86c19aa8d2 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_LOGL + +elemental function _gfortran_specific__log_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__log_r10 + + _gfortran_specific__log_r10 = log (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r16.F90 new file mode 100644 index 0000000000..094a04b89f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_LOGL + +elemental function _gfortran_specific__log_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__log_r16 + + _gfortran_specific__log_r16 = log (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r4.F90 new file mode 100644 index 0000000000..21dfc77d35 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_LOGF + +elemental function _gfortran_specific__log_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__log_r4 + + _gfortran_specific__log_r4 = log (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r8.F90 new file mode 100644 index 0000000000..7d0dc92119 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_LOG + +elemental function _gfortran_specific__log_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__log_r8 + + _gfortran_specific__log_r8 = log (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_i16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_i16.F90 new file mode 100644 index 0000000000..343699a8b0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_i16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_INTEGER_16) + + + +elemental function _gfortran_specific__mod_i16 (p1, p2) + integer (kind=16), intent (in) :: p1, p2 + integer (kind=16) :: _gfortran_specific__mod_i16 + + _gfortran_specific__mod_i16 = mod (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_i4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_i4.F90 new file mode 100644 index 0000000000..47e835294b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_i4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_INTEGER_4) + + + +elemental function _gfortran_specific__mod_i4 (p1, p2) + integer (kind=4), intent (in) :: p1, p2 + integer (kind=4) :: _gfortran_specific__mod_i4 + + _gfortran_specific__mod_i4 = mod (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_i8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_i8.F90 new file mode 100644 index 0000000000..64418d238a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_i8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_INTEGER_8) + + + +elemental function _gfortran_specific__mod_i8 (p1, p2) + integer (kind=8), intent (in) :: p1, p2 + integer (kind=8) :: _gfortran_specific__mod_i8 + + _gfortran_specific__mod_i8 = mod (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r10.F90 new file mode 100644 index 0000000000..104a920168 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) + + + +elemental function _gfortran_specific__mod_r10 (p1, p2) + real (kind=10), intent (in) :: p1, p2 + real (kind=10) :: _gfortran_specific__mod_r10 + + _gfortran_specific__mod_r10 = mod (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r16.F90 new file mode 100644 index 0000000000..13570b1e6c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) + + + +elemental function _gfortran_specific__mod_r16 (p1, p2) + real (kind=16), intent (in) :: p1, p2 + real (kind=16) :: _gfortran_specific__mod_r16 + + _gfortran_specific__mod_r16 = mod (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r4.F90 new file mode 100644 index 0000000000..a31b65a45d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) + + + +elemental function _gfortran_specific__mod_r4 (p1, p2) + real (kind=4), intent (in) :: p1, p2 + real (kind=4) :: _gfortran_specific__mod_r4 + + _gfortran_specific__mod_r4 = mod (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r8.F90 new file mode 100644 index 0000000000..931c14141a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) + + + +elemental function _gfortran_specific__mod_r8 (p1, p2) + real (kind=8), intent (in) :: p1, p2 + real (kind=8) :: _gfortran_specific__mod_r8 + + _gfortran_specific__mod_r8 = mod (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_i16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_i16.F90 new file mode 100644 index 0000000000..71e2c655d8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_i16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_INTEGER_16) + + + +elemental function _gfortran_specific__sign_i16 (p1, p2) + integer (kind=16), intent (in) :: p1, p2 + integer (kind=16) :: _gfortran_specific__sign_i16 + + _gfortran_specific__sign_i16 = sign (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_i4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_i4.F90 new file mode 100644 index 0000000000..77a632cb4e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_i4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_INTEGER_4) + + + +elemental function _gfortran_specific__sign_i4 (p1, p2) + integer (kind=4), intent (in) :: p1, p2 + integer (kind=4) :: _gfortran_specific__sign_i4 + + _gfortran_specific__sign_i4 = sign (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_i8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_i8.F90 new file mode 100644 index 0000000000..cfd3d40db6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_i8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_INTEGER_8) + + + +elemental function _gfortran_specific__sign_i8 (p1, p2) + integer (kind=8), intent (in) :: p1, p2 + integer (kind=8) :: _gfortran_specific__sign_i8 + + _gfortran_specific__sign_i8 = sign (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r10.F90 new file mode 100644 index 0000000000..43a34fc8fa --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) + + + +elemental function _gfortran_specific__sign_r10 (p1, p2) + real (kind=10), intent (in) :: p1, p2 + real (kind=10) :: _gfortran_specific__sign_r10 + + _gfortran_specific__sign_r10 = sign (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r16.F90 new file mode 100644 index 0000000000..58ccbebd10 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) + + + +elemental function _gfortran_specific__sign_r16 (p1, p2) + real (kind=16), intent (in) :: p1, p2 + real (kind=16) :: _gfortran_specific__sign_r16 + + _gfortran_specific__sign_r16 = sign (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r4.F90 new file mode 100644 index 0000000000..510b77a44c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) + + + +elemental function _gfortran_specific__sign_r4 (p1, p2) + real (kind=4), intent (in) :: p1, p2 + real (kind=4) :: _gfortran_specific__sign_r4 + + _gfortran_specific__sign_r4 = sign (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r8.F90 new file mode 100644 index 0000000000..107ee1f883 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) + + + +elemental function _gfortran_specific__sign_r8 (p1, p2) + real (kind=8), intent (in) :: p1, p2 + real (kind=8) :: _gfortran_specific__sign_r8 + + _gfortran_specific__sign_r8 = sign (p1, p2) +end function + + + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c10.F90 new file mode 100644 index 0000000000..9870123c4c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_10) +#ifdef HAVE_CSINL + +elemental function _gfortran_specific__sin_c10 (parm) + complex (kind=10), intent (in) :: parm + complex (kind=10) :: _gfortran_specific__sin_c10 + + _gfortran_specific__sin_c10 = sin (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c16.F90 new file mode 100644 index 0000000000..cc335be680 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_16) +#ifdef HAVE_CSINL + +elemental function _gfortran_specific__sin_c16 (parm) + complex (kind=16), intent (in) :: parm + complex (kind=16) :: _gfortran_specific__sin_c16 + + _gfortran_specific__sin_c16 = sin (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c4.F90 new file mode 100644 index 0000000000..35f02708e3 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_4) +#ifdef HAVE_CSINF + +elemental function _gfortran_specific__sin_c4 (parm) + complex (kind=4), intent (in) :: parm + complex (kind=4) :: _gfortran_specific__sin_c4 + + _gfortran_specific__sin_c4 = sin (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c8.F90 new file mode 100644 index 0000000000..31eb0950c4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_8) +#ifdef HAVE_CSIN + +elemental function _gfortran_specific__sin_c8 (parm) + complex (kind=8), intent (in) :: parm + complex (kind=8) :: _gfortran_specific__sin_c8 + + _gfortran_specific__sin_c8 = sin (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r10.F90 new file mode 100644 index 0000000000..3cda762269 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_SINL + +elemental function _gfortran_specific__sin_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__sin_r10 + + _gfortran_specific__sin_r10 = sin (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r16.F90 new file mode 100644 index 0000000000..08ff41ed02 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_SINL + +elemental function _gfortran_specific__sin_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__sin_r16 + + _gfortran_specific__sin_r16 = sin (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r4.F90 new file mode 100644 index 0000000000..dd9d02c26a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_SINF + +elemental function _gfortran_specific__sin_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__sin_r4 + + _gfortran_specific__sin_r4 = sin (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r8.F90 new file mode 100644 index 0000000000..acdc22573c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_SIN + +elemental function _gfortran_specific__sin_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__sin_r8 + + _gfortran_specific__sin_r8 = sin (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r10.F90 new file mode 100644 index 0000000000..344cda2c1c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_SINHL + +elemental function _gfortran_specific__sinh_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__sinh_r10 + + _gfortran_specific__sinh_r10 = sinh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r16.F90 new file mode 100644 index 0000000000..34b0b55349 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_SINHL + +elemental function _gfortran_specific__sinh_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__sinh_r16 + + _gfortran_specific__sinh_r16 = sinh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r4.F90 new file mode 100644 index 0000000000..6962c7838c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_SINHF + +elemental function _gfortran_specific__sinh_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__sinh_r4 + + _gfortran_specific__sinh_r4 = sinh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r8.F90 new file mode 100644 index 0000000000..2a81575705 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_SINH + +elemental function _gfortran_specific__sinh_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__sinh_r8 + + _gfortran_specific__sinh_r8 = sinh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c10.F90 new file mode 100644 index 0000000000..9fe264f40c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_10) +#ifdef HAVE_CSQRTL + +elemental function _gfortran_specific__sqrt_c10 (parm) + complex (kind=10), intent (in) :: parm + complex (kind=10) :: _gfortran_specific__sqrt_c10 + + _gfortran_specific__sqrt_c10 = sqrt (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c16.F90 new file mode 100644 index 0000000000..399182149e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_16) +#ifdef HAVE_CSQRTL + +elemental function _gfortran_specific__sqrt_c16 (parm) + complex (kind=16), intent (in) :: parm + complex (kind=16) :: _gfortran_specific__sqrt_c16 + + _gfortran_specific__sqrt_c16 = sqrt (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c4.F90 new file mode 100644 index 0000000000..0a3ae7c369 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_4) +#ifdef HAVE_CSQRTF + +elemental function _gfortran_specific__sqrt_c4 (parm) + complex (kind=4), intent (in) :: parm + complex (kind=4) :: _gfortran_specific__sqrt_c4 + + _gfortran_specific__sqrt_c4 = sqrt (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c8.F90 new file mode 100644 index 0000000000..78b22194b5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_COMPLEX_8) +#ifdef HAVE_CSQRT + +elemental function _gfortran_specific__sqrt_c8 (parm) + complex (kind=8), intent (in) :: parm + complex (kind=8) :: _gfortran_specific__sqrt_c8 + + _gfortran_specific__sqrt_c8 = sqrt (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r10.F90 new file mode 100644 index 0000000000..37a23f600c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_SQRTL + +elemental function _gfortran_specific__sqrt_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__sqrt_r10 + + _gfortran_specific__sqrt_r10 = sqrt (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r16.F90 new file mode 100644 index 0000000000..3669ae4d2f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_SQRTL + +elemental function _gfortran_specific__sqrt_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__sqrt_r16 + + _gfortran_specific__sqrt_r16 = sqrt (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r4.F90 new file mode 100644 index 0000000000..4093836052 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_SQRTF + +elemental function _gfortran_specific__sqrt_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__sqrt_r4 + + _gfortran_specific__sqrt_r4 = sqrt (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r8.F90 new file mode 100644 index 0000000000..a772e10a47 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_SQRT + +elemental function _gfortran_specific__sqrt_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__sqrt_r8 + + _gfortran_specific__sqrt_r8 = sqrt (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r10.F90 new file mode 100644 index 0000000000..c087bc60b5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_TANL + +elemental function _gfortran_specific__tan_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__tan_r10 + + _gfortran_specific__tan_r10 = tan (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r16.F90 new file mode 100644 index 0000000000..d12c1a391e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_TANL + +elemental function _gfortran_specific__tan_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__tan_r16 + + _gfortran_specific__tan_r16 = tan (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r4.F90 new file mode 100644 index 0000000000..4d90a556b4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_TANF + +elemental function _gfortran_specific__tan_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__tan_r4 + + _gfortran_specific__tan_r4 = tan (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r8.F90 new file mode 100644 index 0000000000..4ddf82db5a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_TAN + +elemental function _gfortran_specific__tan_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__tan_r8 + + _gfortran_specific__tan_r8 = tan (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r10.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r10.F90 new file mode 100644 index 0000000000..ee396b74f9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r10.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_10) +#ifdef HAVE_TANHL + +elemental function _gfortran_specific__tanh_r10 (parm) + real (kind=10), intent (in) :: parm + real (kind=10) :: _gfortran_specific__tanh_r10 + + _gfortran_specific__tanh_r10 = tanh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r16.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r16.F90 new file mode 100644 index 0000000000..41aead4464 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r16.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_16) +#ifdef HAVE_TANHL + +elemental function _gfortran_specific__tanh_r16 (parm) + real (kind=16), intent (in) :: parm + real (kind=16) :: _gfortran_specific__tanh_r16 + + _gfortran_specific__tanh_r16 = tanh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r4.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r4.F90 new file mode 100644 index 0000000000..5113b85817 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r4.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_4) +#ifdef HAVE_TANHF + +elemental function _gfortran_specific__tanh_r4 (parm) + real (kind=4), intent (in) :: parm + real (kind=4) :: _gfortran_specific__tanh_r4 + + _gfortran_specific__tanh_r4 = tanh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r8.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r8.F90 new file mode 100644 index 0000000000..7b772d3286 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r8.F90 @@ -0,0 +1,46 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + + + + + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +#if defined (HAVE_GFC_REAL_8) +#ifdef HAVE_TANH + +elemental function _gfortran_specific__tanh_r8 (parm) + real (kind=8), intent (in) :: parm + real (kind=8) :: _gfortran_specific__tanh_r8 + + _gfortran_specific__tanh_r8 = tanh (parm) +end function + +#endif +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l1.c new file mode 100644 index 0000000000..afde913e73 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l1.c @@ -0,0 +1,223 @@ +/* Implementation of the ALL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_1) + + +extern void all_l1 (gfc_array_l1 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(all_l1); + +void +all_l1 (gfc_array_l1 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_LOGICAL_1 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_LOGICAL_1) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " ALL intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " ALL intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in ALL intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_LOGICAL_1 result; + src = base; + { + + /* Return true only if all the elements are set. */ + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (! *src) + { + result = 0; + break; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l16.c new file mode 100644 index 0000000000..422fb894dd --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l16.c @@ -0,0 +1,223 @@ +/* Implementation of the ALL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_16) + + +extern void all_l16 (gfc_array_l16 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(all_l16); + +void +all_l16 (gfc_array_l16 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_LOGICAL_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_LOGICAL_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " ALL intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " ALL intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in ALL intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_LOGICAL_16 result; + src = base; + { + + /* Return true only if all the elements are set. */ + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (! *src) + { + result = 0; + break; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l2.c new file mode 100644 index 0000000000..00f0886cb3 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l2.c @@ -0,0 +1,223 @@ +/* Implementation of the ALL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_2) + + +extern void all_l2 (gfc_array_l2 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(all_l2); + +void +all_l2 (gfc_array_l2 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_LOGICAL_2 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_LOGICAL_2) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " ALL intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " ALL intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in ALL intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_LOGICAL_2 result; + src = base; + { + + /* Return true only if all the elements are set. */ + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (! *src) + { + result = 0; + break; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l4.c new file mode 100644 index 0000000000..500d4a52c1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l4.c @@ -0,0 +1,223 @@ +/* Implementation of the ALL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_4) + + +extern void all_l4 (gfc_array_l4 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(all_l4); + +void +all_l4 (gfc_array_l4 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_LOGICAL_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_LOGICAL_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " ALL intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " ALL intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in ALL intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_LOGICAL_4 result; + src = base; + { + + /* Return true only if all the elements are set. */ + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (! *src) + { + result = 0; + break; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l8.c new file mode 100644 index 0000000000..90f287ccd3 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l8.c @@ -0,0 +1,223 @@ +/* Implementation of the ALL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_8) + + +extern void all_l8 (gfc_array_l8 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(all_l8); + +void +all_l8 (gfc_array_l8 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_LOGICAL_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_LOGICAL_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " ALL intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " ALL intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in ALL intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_LOGICAL_8 result; + src = base; + { + + /* Return true only if all the elements are set. */ + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (! *src) + { + result = 0; + break; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l1.c new file mode 100644 index 0000000000..0186730a80 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l1.c @@ -0,0 +1,223 @@ +/* Implementation of the ANY intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_1) + + +extern void any_l1 (gfc_array_l1 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(any_l1); + +void +any_l1 (gfc_array_l1 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_LOGICAL_1 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_LOGICAL_1) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " ANY intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " ANY intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in ANY intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_LOGICAL_1 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + /* Return true if any of the elements are set. */ + if (*src) + { + result = 1; + break; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l16.c new file mode 100644 index 0000000000..13f78a0075 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l16.c @@ -0,0 +1,223 @@ +/* Implementation of the ANY intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_16) + + +extern void any_l16 (gfc_array_l16 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(any_l16); + +void +any_l16 (gfc_array_l16 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_LOGICAL_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_LOGICAL_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " ANY intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " ANY intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in ANY intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_LOGICAL_16 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + /* Return true if any of the elements are set. */ + if (*src) + { + result = 1; + break; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l2.c new file mode 100644 index 0000000000..b37d9cb58b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l2.c @@ -0,0 +1,223 @@ +/* Implementation of the ANY intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_2) + + +extern void any_l2 (gfc_array_l2 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(any_l2); + +void +any_l2 (gfc_array_l2 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_LOGICAL_2 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_LOGICAL_2) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " ANY intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " ANY intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in ANY intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_LOGICAL_2 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + /* Return true if any of the elements are set. */ + if (*src) + { + result = 1; + break; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l4.c new file mode 100644 index 0000000000..b157812964 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l4.c @@ -0,0 +1,223 @@ +/* Implementation of the ANY intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_4) + + +extern void any_l4 (gfc_array_l4 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(any_l4); + +void +any_l4 (gfc_array_l4 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_LOGICAL_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_LOGICAL_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " ANY intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " ANY intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in ANY intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_LOGICAL_4 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + /* Return true if any of the elements are set. */ + if (*src) + { + result = 1; + break; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l8.c new file mode 100644 index 0000000000..f66b00f41b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l8.c @@ -0,0 +1,223 @@ +/* Implementation of the ANY intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_8) + + +extern void any_l8 (gfc_array_l8 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(any_l8); + +void +any_l8 (gfc_array_l8 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_LOGICAL_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_LOGICAL_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " ANY intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " ANY intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in ANY intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_LOGICAL_8 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + /* Return true if any of the elements are set. */ + if (*src) + { + result = 1; + break; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_16_l.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_16_l.c new file mode 100644 index 0000000000..c0a488e478 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_16_l.c @@ -0,0 +1,219 @@ +/* Implementation of the COUNT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) + + +extern void count_16_l (gfc_array_i16 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(count_16_l); + +void +count_16_l (gfc_array_i16 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " COUNT intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " COUNT intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in COUNT intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src) + result++; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_1_l.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_1_l.c new file mode 100644 index 0000000000..a236897592 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_1_l.c @@ -0,0 +1,219 @@ +/* Implementation of the COUNT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) + + +extern void count_1_l (gfc_array_i1 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(count_1_l); + +void +count_1_l (gfc_array_i1 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_INTEGER_1 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_1) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " COUNT intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " COUNT intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in COUNT intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_INTEGER_1 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src) + result++; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_2_l.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_2_l.c new file mode 100644 index 0000000000..7ae90f24d7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_2_l.c @@ -0,0 +1,219 @@ +/* Implementation of the COUNT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) + + +extern void count_2_l (gfc_array_i2 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(count_2_l); + +void +count_2_l (gfc_array_i2 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_INTEGER_2 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_2) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " COUNT intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " COUNT intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in COUNT intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_INTEGER_2 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src) + result++; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_4_l.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_4_l.c new file mode 100644 index 0000000000..75f0f582dd --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_4_l.c @@ -0,0 +1,219 @@ +/* Implementation of the COUNT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) + + +extern void count_4_l (gfc_array_i4 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(count_4_l); + +void +count_4_l (gfc_array_i4 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " COUNT intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " COUNT intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in COUNT intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src) + result++; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_8_l.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_8_l.c new file mode 100644 index 0000000000..da53d1cd24 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_8_l.c @@ -0,0 +1,219 @@ +/* Implementation of the COUNT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) + + +extern void count_8_l (gfc_array_i8 * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(count_8_l); + +void +count_8_l (gfc_array_i8 * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " COUNT intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " COUNT intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in COUNT intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src) + result++; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c10.c new file mode 100644 index 0000000000..1f8078d2fa --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c10.c @@ -0,0 +1,171 @@ +/* Helper function for cshift functions. + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_10) + +void +cshift0_c10 (gfc_array_c10 *ret, const gfc_array_c10 *array, ssize_t shift, + int which) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + GFC_COMPLEX_10 *rptr; + + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const GFC_COMPLEX_10 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + + which = which - 1; + sstride[0] = 0; + rstride[0] = 0; + + extent[0] = 1; + count[0] = 0; + n = 0; + /* Initialized for avoiding compiler warnings. */ + roffset = 1; + soffset = 1; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride; + if (roffset == 0) + roffset = 1; + soffset = array->dim[dim].stride; + if (soffset == 0) + soffset = 1; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride; + sstride[n] = array->dim[dim].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = 1; + if (rstride[0] == 0) + rstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + shift = len == 0 ? 0 : shift % (ssize_t)len; + if (shift < 0) + shift += len; + + while (rptr) + { + /* Do the shift for this dimension. */ + + /* If elements are contiguous, perform the operation + in two block moves. */ + if (soffset == 1 && roffset == 1) + { + size_t len1 = shift * sizeof (GFC_COMPLEX_10); + size_t len2 = (len - shift) * sizeof (GFC_COMPLEX_10); + memcpy (rptr, sptr + shift, len2); + memcpy (rptr + (len - shift), sptr, len1); + } + else + { + /* Otherwise, we will have to perform the copy one element at + a time. */ + GFC_COMPLEX_10 *dest = rptr; + const GFC_COMPLEX_10 *src = &sptr[shift * soffset]; + + for (n = 0; n < len - shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + for (src = sptr, n = 0; n < shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } + + return; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c16.c new file mode 100644 index 0000000000..83afa517c1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c16.c @@ -0,0 +1,171 @@ +/* Helper function for cshift functions. + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_16) + +void +cshift0_c16 (gfc_array_c16 *ret, const gfc_array_c16 *array, ssize_t shift, + int which) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + GFC_COMPLEX_16 *rptr; + + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const GFC_COMPLEX_16 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + + which = which - 1; + sstride[0] = 0; + rstride[0] = 0; + + extent[0] = 1; + count[0] = 0; + n = 0; + /* Initialized for avoiding compiler warnings. */ + roffset = 1; + soffset = 1; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride; + if (roffset == 0) + roffset = 1; + soffset = array->dim[dim].stride; + if (soffset == 0) + soffset = 1; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride; + sstride[n] = array->dim[dim].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = 1; + if (rstride[0] == 0) + rstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + shift = len == 0 ? 0 : shift % (ssize_t)len; + if (shift < 0) + shift += len; + + while (rptr) + { + /* Do the shift for this dimension. */ + + /* If elements are contiguous, perform the operation + in two block moves. */ + if (soffset == 1 && roffset == 1) + { + size_t len1 = shift * sizeof (GFC_COMPLEX_16); + size_t len2 = (len - shift) * sizeof (GFC_COMPLEX_16); + memcpy (rptr, sptr + shift, len2); + memcpy (rptr + (len - shift), sptr, len1); + } + else + { + /* Otherwise, we will have to perform the copy one element at + a time. */ + GFC_COMPLEX_16 *dest = rptr; + const GFC_COMPLEX_16 *src = &sptr[shift * soffset]; + + for (n = 0; n < len - shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + for (src = sptr, n = 0; n < shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } + + return; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c4.c new file mode 100644 index 0000000000..32a60063ae --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c4.c @@ -0,0 +1,171 @@ +/* Helper function for cshift functions. + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_4) + +void +cshift0_c4 (gfc_array_c4 *ret, const gfc_array_c4 *array, ssize_t shift, + int which) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + GFC_COMPLEX_4 *rptr; + + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const GFC_COMPLEX_4 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + + which = which - 1; + sstride[0] = 0; + rstride[0] = 0; + + extent[0] = 1; + count[0] = 0; + n = 0; + /* Initialized for avoiding compiler warnings. */ + roffset = 1; + soffset = 1; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride; + if (roffset == 0) + roffset = 1; + soffset = array->dim[dim].stride; + if (soffset == 0) + soffset = 1; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride; + sstride[n] = array->dim[dim].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = 1; + if (rstride[0] == 0) + rstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + shift = len == 0 ? 0 : shift % (ssize_t)len; + if (shift < 0) + shift += len; + + while (rptr) + { + /* Do the shift for this dimension. */ + + /* If elements are contiguous, perform the operation + in two block moves. */ + if (soffset == 1 && roffset == 1) + { + size_t len1 = shift * sizeof (GFC_COMPLEX_4); + size_t len2 = (len - shift) * sizeof (GFC_COMPLEX_4); + memcpy (rptr, sptr + shift, len2); + memcpy (rptr + (len - shift), sptr, len1); + } + else + { + /* Otherwise, we will have to perform the copy one element at + a time. */ + GFC_COMPLEX_4 *dest = rptr; + const GFC_COMPLEX_4 *src = &sptr[shift * soffset]; + + for (n = 0; n < len - shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + for (src = sptr, n = 0; n < shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } + + return; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c8.c new file mode 100644 index 0000000000..a9d152d642 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c8.c @@ -0,0 +1,171 @@ +/* Helper function for cshift functions. + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_8) + +void +cshift0_c8 (gfc_array_c8 *ret, const gfc_array_c8 *array, ssize_t shift, + int which) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + GFC_COMPLEX_8 *rptr; + + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const GFC_COMPLEX_8 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + + which = which - 1; + sstride[0] = 0; + rstride[0] = 0; + + extent[0] = 1; + count[0] = 0; + n = 0; + /* Initialized for avoiding compiler warnings. */ + roffset = 1; + soffset = 1; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride; + if (roffset == 0) + roffset = 1; + soffset = array->dim[dim].stride; + if (soffset == 0) + soffset = 1; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride; + sstride[n] = array->dim[dim].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = 1; + if (rstride[0] == 0) + rstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + shift = len == 0 ? 0 : shift % (ssize_t)len; + if (shift < 0) + shift += len; + + while (rptr) + { + /* Do the shift for this dimension. */ + + /* If elements are contiguous, perform the operation + in two block moves. */ + if (soffset == 1 && roffset == 1) + { + size_t len1 = shift * sizeof (GFC_COMPLEX_8); + size_t len2 = (len - shift) * sizeof (GFC_COMPLEX_8); + memcpy (rptr, sptr + shift, len2); + memcpy (rptr + (len - shift), sptr, len1); + } + else + { + /* Otherwise, we will have to perform the copy one element at + a time. */ + GFC_COMPLEX_8 *dest = rptr; + const GFC_COMPLEX_8 *src = &sptr[shift * soffset]; + + for (n = 0; n < len - shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + for (src = sptr, n = 0; n < shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } + + return; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i1.c new file mode 100644 index 0000000000..539af355b3 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i1.c @@ -0,0 +1,171 @@ +/* Helper function for cshift functions. + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) + +void +cshift0_i1 (gfc_array_i1 *ret, const gfc_array_i1 *array, ssize_t shift, + int which) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + GFC_INTEGER_1 *rptr; + + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const GFC_INTEGER_1 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + + which = which - 1; + sstride[0] = 0; + rstride[0] = 0; + + extent[0] = 1; + count[0] = 0; + n = 0; + /* Initialized for avoiding compiler warnings. */ + roffset = 1; + soffset = 1; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride; + if (roffset == 0) + roffset = 1; + soffset = array->dim[dim].stride; + if (soffset == 0) + soffset = 1; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride; + sstride[n] = array->dim[dim].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = 1; + if (rstride[0] == 0) + rstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + shift = len == 0 ? 0 : shift % (ssize_t)len; + if (shift < 0) + shift += len; + + while (rptr) + { + /* Do the shift for this dimension. */ + + /* If elements are contiguous, perform the operation + in two block moves. */ + if (soffset == 1 && roffset == 1) + { + size_t len1 = shift * sizeof (GFC_INTEGER_1); + size_t len2 = (len - shift) * sizeof (GFC_INTEGER_1); + memcpy (rptr, sptr + shift, len2); + memcpy (rptr + (len - shift), sptr, len1); + } + else + { + /* Otherwise, we will have to perform the copy one element at + a time. */ + GFC_INTEGER_1 *dest = rptr; + const GFC_INTEGER_1 *src = &sptr[shift * soffset]; + + for (n = 0; n < len - shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + for (src = sptr, n = 0; n < shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } + + return; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i16.c new file mode 100644 index 0000000000..fa48d41b7d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i16.c @@ -0,0 +1,171 @@ +/* Helper function for cshift functions. + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) + +void +cshift0_i16 (gfc_array_i16 *ret, const gfc_array_i16 *array, ssize_t shift, + int which) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + GFC_INTEGER_16 *rptr; + + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const GFC_INTEGER_16 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + + which = which - 1; + sstride[0] = 0; + rstride[0] = 0; + + extent[0] = 1; + count[0] = 0; + n = 0; + /* Initialized for avoiding compiler warnings. */ + roffset = 1; + soffset = 1; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride; + if (roffset == 0) + roffset = 1; + soffset = array->dim[dim].stride; + if (soffset == 0) + soffset = 1; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride; + sstride[n] = array->dim[dim].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = 1; + if (rstride[0] == 0) + rstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + shift = len == 0 ? 0 : shift % (ssize_t)len; + if (shift < 0) + shift += len; + + while (rptr) + { + /* Do the shift for this dimension. */ + + /* If elements are contiguous, perform the operation + in two block moves. */ + if (soffset == 1 && roffset == 1) + { + size_t len1 = shift * sizeof (GFC_INTEGER_16); + size_t len2 = (len - shift) * sizeof (GFC_INTEGER_16); + memcpy (rptr, sptr + shift, len2); + memcpy (rptr + (len - shift), sptr, len1); + } + else + { + /* Otherwise, we will have to perform the copy one element at + a time. */ + GFC_INTEGER_16 *dest = rptr; + const GFC_INTEGER_16 *src = &sptr[shift * soffset]; + + for (n = 0; n < len - shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + for (src = sptr, n = 0; n < shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } + + return; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i2.c new file mode 100644 index 0000000000..af07c01507 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i2.c @@ -0,0 +1,171 @@ +/* Helper function for cshift functions. + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) + +void +cshift0_i2 (gfc_array_i2 *ret, const gfc_array_i2 *array, ssize_t shift, + int which) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + GFC_INTEGER_2 *rptr; + + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const GFC_INTEGER_2 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + + which = which - 1; + sstride[0] = 0; + rstride[0] = 0; + + extent[0] = 1; + count[0] = 0; + n = 0; + /* Initialized for avoiding compiler warnings. */ + roffset = 1; + soffset = 1; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride; + if (roffset == 0) + roffset = 1; + soffset = array->dim[dim].stride; + if (soffset == 0) + soffset = 1; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride; + sstride[n] = array->dim[dim].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = 1; + if (rstride[0] == 0) + rstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + shift = len == 0 ? 0 : shift % (ssize_t)len; + if (shift < 0) + shift += len; + + while (rptr) + { + /* Do the shift for this dimension. */ + + /* If elements are contiguous, perform the operation + in two block moves. */ + if (soffset == 1 && roffset == 1) + { + size_t len1 = shift * sizeof (GFC_INTEGER_2); + size_t len2 = (len - shift) * sizeof (GFC_INTEGER_2); + memcpy (rptr, sptr + shift, len2); + memcpy (rptr + (len - shift), sptr, len1); + } + else + { + /* Otherwise, we will have to perform the copy one element at + a time. */ + GFC_INTEGER_2 *dest = rptr; + const GFC_INTEGER_2 *src = &sptr[shift * soffset]; + + for (n = 0; n < len - shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + for (src = sptr, n = 0; n < shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } + + return; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i4.c new file mode 100644 index 0000000000..1997b1842f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i4.c @@ -0,0 +1,171 @@ +/* Helper function for cshift functions. + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) + +void +cshift0_i4 (gfc_array_i4 *ret, const gfc_array_i4 *array, ssize_t shift, + int which) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + GFC_INTEGER_4 *rptr; + + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const GFC_INTEGER_4 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + + which = which - 1; + sstride[0] = 0; + rstride[0] = 0; + + extent[0] = 1; + count[0] = 0; + n = 0; + /* Initialized for avoiding compiler warnings. */ + roffset = 1; + soffset = 1; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride; + if (roffset == 0) + roffset = 1; + soffset = array->dim[dim].stride; + if (soffset == 0) + soffset = 1; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride; + sstride[n] = array->dim[dim].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = 1; + if (rstride[0] == 0) + rstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + shift = len == 0 ? 0 : shift % (ssize_t)len; + if (shift < 0) + shift += len; + + while (rptr) + { + /* Do the shift for this dimension. */ + + /* If elements are contiguous, perform the operation + in two block moves. */ + if (soffset == 1 && roffset == 1) + { + size_t len1 = shift * sizeof (GFC_INTEGER_4); + size_t len2 = (len - shift) * sizeof (GFC_INTEGER_4); + memcpy (rptr, sptr + shift, len2); + memcpy (rptr + (len - shift), sptr, len1); + } + else + { + /* Otherwise, we will have to perform the copy one element at + a time. */ + GFC_INTEGER_4 *dest = rptr; + const GFC_INTEGER_4 *src = &sptr[shift * soffset]; + + for (n = 0; n < len - shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + for (src = sptr, n = 0; n < shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } + + return; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i8.c new file mode 100644 index 0000000000..6144d61e03 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i8.c @@ -0,0 +1,171 @@ +/* Helper function for cshift functions. + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) + +void +cshift0_i8 (gfc_array_i8 *ret, const gfc_array_i8 *array, ssize_t shift, + int which) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + GFC_INTEGER_8 *rptr; + + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const GFC_INTEGER_8 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + + which = which - 1; + sstride[0] = 0; + rstride[0] = 0; + + extent[0] = 1; + count[0] = 0; + n = 0; + /* Initialized for avoiding compiler warnings. */ + roffset = 1; + soffset = 1; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride; + if (roffset == 0) + roffset = 1; + soffset = array->dim[dim].stride; + if (soffset == 0) + soffset = 1; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride; + sstride[n] = array->dim[dim].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = 1; + if (rstride[0] == 0) + rstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + shift = len == 0 ? 0 : shift % (ssize_t)len; + if (shift < 0) + shift += len; + + while (rptr) + { + /* Do the shift for this dimension. */ + + /* If elements are contiguous, perform the operation + in two block moves. */ + if (soffset == 1 && roffset == 1) + { + size_t len1 = shift * sizeof (GFC_INTEGER_8); + size_t len2 = (len - shift) * sizeof (GFC_INTEGER_8); + memcpy (rptr, sptr + shift, len2); + memcpy (rptr + (len - shift), sptr, len1); + } + else + { + /* Otherwise, we will have to perform the copy one element at + a time. */ + GFC_INTEGER_8 *dest = rptr; + const GFC_INTEGER_8 *src = &sptr[shift * soffset]; + + for (n = 0; n < len - shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + for (src = sptr, n = 0; n < shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } + + return; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r10.c new file mode 100644 index 0000000000..b3d5f8e481 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r10.c @@ -0,0 +1,171 @@ +/* Helper function for cshift functions. + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) + +void +cshift0_r10 (gfc_array_r10 *ret, const gfc_array_r10 *array, ssize_t shift, + int which) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + GFC_REAL_10 *rptr; + + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const GFC_REAL_10 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + + which = which - 1; + sstride[0] = 0; + rstride[0] = 0; + + extent[0] = 1; + count[0] = 0; + n = 0; + /* Initialized for avoiding compiler warnings. */ + roffset = 1; + soffset = 1; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride; + if (roffset == 0) + roffset = 1; + soffset = array->dim[dim].stride; + if (soffset == 0) + soffset = 1; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride; + sstride[n] = array->dim[dim].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = 1; + if (rstride[0] == 0) + rstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + shift = len == 0 ? 0 : shift % (ssize_t)len; + if (shift < 0) + shift += len; + + while (rptr) + { + /* Do the shift for this dimension. */ + + /* If elements are contiguous, perform the operation + in two block moves. */ + if (soffset == 1 && roffset == 1) + { + size_t len1 = shift * sizeof (GFC_REAL_10); + size_t len2 = (len - shift) * sizeof (GFC_REAL_10); + memcpy (rptr, sptr + shift, len2); + memcpy (rptr + (len - shift), sptr, len1); + } + else + { + /* Otherwise, we will have to perform the copy one element at + a time. */ + GFC_REAL_10 *dest = rptr; + const GFC_REAL_10 *src = &sptr[shift * soffset]; + + for (n = 0; n < len - shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + for (src = sptr, n = 0; n < shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } + + return; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r16.c new file mode 100644 index 0000000000..3088da414d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r16.c @@ -0,0 +1,171 @@ +/* Helper function for cshift functions. + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) + +void +cshift0_r16 (gfc_array_r16 *ret, const gfc_array_r16 *array, ssize_t shift, + int which) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + GFC_REAL_16 *rptr; + + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const GFC_REAL_16 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + + which = which - 1; + sstride[0] = 0; + rstride[0] = 0; + + extent[0] = 1; + count[0] = 0; + n = 0; + /* Initialized for avoiding compiler warnings. */ + roffset = 1; + soffset = 1; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride; + if (roffset == 0) + roffset = 1; + soffset = array->dim[dim].stride; + if (soffset == 0) + soffset = 1; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride; + sstride[n] = array->dim[dim].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = 1; + if (rstride[0] == 0) + rstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + shift = len == 0 ? 0 : shift % (ssize_t)len; + if (shift < 0) + shift += len; + + while (rptr) + { + /* Do the shift for this dimension. */ + + /* If elements are contiguous, perform the operation + in two block moves. */ + if (soffset == 1 && roffset == 1) + { + size_t len1 = shift * sizeof (GFC_REAL_16); + size_t len2 = (len - shift) * sizeof (GFC_REAL_16); + memcpy (rptr, sptr + shift, len2); + memcpy (rptr + (len - shift), sptr, len1); + } + else + { + /* Otherwise, we will have to perform the copy one element at + a time. */ + GFC_REAL_16 *dest = rptr; + const GFC_REAL_16 *src = &sptr[shift * soffset]; + + for (n = 0; n < len - shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + for (src = sptr, n = 0; n < shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } + + return; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r4.c new file mode 100644 index 0000000000..176be1fdda --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r4.c @@ -0,0 +1,171 @@ +/* Helper function for cshift functions. + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) + +void +cshift0_r4 (gfc_array_r4 *ret, const gfc_array_r4 *array, ssize_t shift, + int which) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + GFC_REAL_4 *rptr; + + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const GFC_REAL_4 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + + which = which - 1; + sstride[0] = 0; + rstride[0] = 0; + + extent[0] = 1; + count[0] = 0; + n = 0; + /* Initialized for avoiding compiler warnings. */ + roffset = 1; + soffset = 1; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride; + if (roffset == 0) + roffset = 1; + soffset = array->dim[dim].stride; + if (soffset == 0) + soffset = 1; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride; + sstride[n] = array->dim[dim].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = 1; + if (rstride[0] == 0) + rstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + shift = len == 0 ? 0 : shift % (ssize_t)len; + if (shift < 0) + shift += len; + + while (rptr) + { + /* Do the shift for this dimension. */ + + /* If elements are contiguous, perform the operation + in two block moves. */ + if (soffset == 1 && roffset == 1) + { + size_t len1 = shift * sizeof (GFC_REAL_4); + size_t len2 = (len - shift) * sizeof (GFC_REAL_4); + memcpy (rptr, sptr + shift, len2); + memcpy (rptr + (len - shift), sptr, len1); + } + else + { + /* Otherwise, we will have to perform the copy one element at + a time. */ + GFC_REAL_4 *dest = rptr; + const GFC_REAL_4 *src = &sptr[shift * soffset]; + + for (n = 0; n < len - shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + for (src = sptr, n = 0; n < shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } + + return; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r8.c new file mode 100644 index 0000000000..7947ff9aaa --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r8.c @@ -0,0 +1,171 @@ +/* Helper function for cshift functions. + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) + +void +cshift0_r8 (gfc_array_r8 *ret, const gfc_array_r8 *array, ssize_t shift, + int which) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + GFC_REAL_8 *rptr; + + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const GFC_REAL_8 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + + which = which - 1; + sstride[0] = 0; + rstride[0] = 0; + + extent[0] = 1; + count[0] = 0; + n = 0; + /* Initialized for avoiding compiler warnings. */ + roffset = 1; + soffset = 1; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride; + if (roffset == 0) + roffset = 1; + soffset = array->dim[dim].stride; + if (soffset == 0) + soffset = 1; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride; + sstride[n] = array->dim[dim].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = 1; + if (rstride[0] == 0) + rstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + shift = len == 0 ? 0 : shift % (ssize_t)len; + if (shift < 0) + shift += len; + + while (rptr) + { + /* Do the shift for this dimension. */ + + /* If elements are contiguous, perform the operation + in two block moves. */ + if (soffset == 1 && roffset == 1) + { + size_t len1 = shift * sizeof (GFC_REAL_8); + size_t len2 = (len - shift) * sizeof (GFC_REAL_8); + memcpy (rptr, sptr + shift, len2); + memcpy (rptr + (len - shift), sptr, len1); + } + else + { + /* Otherwise, we will have to perform the copy one element at + a time. */ + GFC_REAL_8 *dest = rptr; + const GFC_REAL_8 *src = &sptr[shift * soffset]; + + for (n = 0; n < len - shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + for (src = sptr, n = 0; n < shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } + + return; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift1_16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift1_16.c new file mode 100644 index 0000000000..7a7d0db1da --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift1_16.c @@ -0,0 +1,256 @@ +/* Implementation of the CSHIFT intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Feng Wang + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) + +static void +cshift1 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i16 * const restrict h, + const GFC_INTEGER_16 * const restrict pwhich, + index_type size) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + char *rptr; + char *dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const char *sptr; + const char *src; + /* h.* indicates the shift array. */ + index_type hstride[GFC_MAX_DIMENSIONS]; + index_type hstride0; + const GFC_INTEGER_16 *hptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + int which; + GFC_INTEGER_16 sh; + index_type arraysize; + + if (pwhich) + which = *pwhich - 1; + else + which = 0; + + if (which < 0 || (which + 1) > GFC_DESCRIPTOR_RANK (array)) + runtime_error ("Argument 'DIM' is out of range in call to 'CSHIFT'"); + + arraysize = size0 ((array_t *)array); + + if (ret->data == NULL) + { + int i; + + ret->data = internal_malloc_size (size * arraysize); + ret->offset = 0; + ret->dtype = array->dtype; + for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++) + { + ret->dim[i].lbound = 0; + ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound; + + if (i == 0) + ret->dim[i].stride = 1; + else + ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride; + } + } + + if (arraysize == 0) + return; + + extent[0] = 1; + count[0] = 0; + n = 0; + + /* Initialized for avoiding compiler warnings. */ + roffset = size; + soffset = size; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride * size; + if (roffset == 0) + roffset = size; + soffset = array->dim[dim].stride * size; + if (soffset == 0) + soffset = size; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride * size; + sstride[n] = array->dim[dim].stride * size; + + hstride[n] = h->dim[n].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = size; + if (rstride[0] == 0) + rstride[0] = size; + if (hstride[0] == 0) + hstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + hstride0 = hstride[0]; + rptr = ret->data; + sptr = array->data; + hptr = h->data; + + while (rptr) + { + /* Do the shift for this dimension. */ + sh = *hptr; + sh = (div (sh, len)).rem; + if (sh < 0) + sh += len; + + src = &sptr[sh * soffset]; + dest = rptr; + + for (n = 0; n < len; n++) + { + memcpy (dest, src, size); + dest += roffset; + if (n == len - sh - 1) + src = sptr; + else + src += soffset; + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + hptr += hstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + hptr -= hstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + hptr += hstride[n]; + } + } + } +} + +void cshift1_16 (gfc_array_char * const restrict, + const gfc_array_char * const restrict, + const gfc_array_i16 * const restrict, + const GFC_INTEGER_16 * const restrict); +export_proto(cshift1_16); + +void +cshift1_16 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i16 * const restrict h, + const GFC_INTEGER_16 * const restrict pwhich) +{ + cshift1 (ret, array, h, pwhich, GFC_DESCRIPTOR_SIZE (array)); +} + + +void cshift1_16_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4, + const gfc_array_char * const restrict array, + const gfc_array_i16 * const restrict h, + const GFC_INTEGER_16 * const restrict pwhich, + GFC_INTEGER_4); +export_proto(cshift1_16_char); + +void +cshift1_16_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i16 * const restrict h, + const GFC_INTEGER_16 * const restrict pwhich, + GFC_INTEGER_4 array_length) +{ + cshift1 (ret, array, h, pwhich, array_length); +} + + +void cshift1_16_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4, + const gfc_array_char * const restrict array, + const gfc_array_i16 * const restrict h, + const GFC_INTEGER_16 * const restrict pwhich, + GFC_INTEGER_4); +export_proto(cshift1_16_char4); + +void +cshift1_16_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i16 * const restrict h, + const GFC_INTEGER_16 * const restrict pwhich, + GFC_INTEGER_4 array_length) +{ + cshift1 (ret, array, h, pwhich, array_length * sizeof (gfc_char4_t)); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift1_4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift1_4.c new file mode 100644 index 0000000000..c6f124fe1f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift1_4.c @@ -0,0 +1,256 @@ +/* Implementation of the CSHIFT intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Feng Wang + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) + +static void +cshift1 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i4 * const restrict h, + const GFC_INTEGER_4 * const restrict pwhich, + index_type size) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + char *rptr; + char *dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const char *sptr; + const char *src; + /* h.* indicates the shift array. */ + index_type hstride[GFC_MAX_DIMENSIONS]; + index_type hstride0; + const GFC_INTEGER_4 *hptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + int which; + GFC_INTEGER_4 sh; + index_type arraysize; + + if (pwhich) + which = *pwhich - 1; + else + which = 0; + + if (which < 0 || (which + 1) > GFC_DESCRIPTOR_RANK (array)) + runtime_error ("Argument 'DIM' is out of range in call to 'CSHIFT'"); + + arraysize = size0 ((array_t *)array); + + if (ret->data == NULL) + { + int i; + + ret->data = internal_malloc_size (size * arraysize); + ret->offset = 0; + ret->dtype = array->dtype; + for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++) + { + ret->dim[i].lbound = 0; + ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound; + + if (i == 0) + ret->dim[i].stride = 1; + else + ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride; + } + } + + if (arraysize == 0) + return; + + extent[0] = 1; + count[0] = 0; + n = 0; + + /* Initialized for avoiding compiler warnings. */ + roffset = size; + soffset = size; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride * size; + if (roffset == 0) + roffset = size; + soffset = array->dim[dim].stride * size; + if (soffset == 0) + soffset = size; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride * size; + sstride[n] = array->dim[dim].stride * size; + + hstride[n] = h->dim[n].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = size; + if (rstride[0] == 0) + rstride[0] = size; + if (hstride[0] == 0) + hstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + hstride0 = hstride[0]; + rptr = ret->data; + sptr = array->data; + hptr = h->data; + + while (rptr) + { + /* Do the shift for this dimension. */ + sh = *hptr; + sh = (div (sh, len)).rem; + if (sh < 0) + sh += len; + + src = &sptr[sh * soffset]; + dest = rptr; + + for (n = 0; n < len; n++) + { + memcpy (dest, src, size); + dest += roffset; + if (n == len - sh - 1) + src = sptr; + else + src += soffset; + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + hptr += hstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + hptr -= hstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + hptr += hstride[n]; + } + } + } +} + +void cshift1_4 (gfc_array_char * const restrict, + const gfc_array_char * const restrict, + const gfc_array_i4 * const restrict, + const GFC_INTEGER_4 * const restrict); +export_proto(cshift1_4); + +void +cshift1_4 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i4 * const restrict h, + const GFC_INTEGER_4 * const restrict pwhich) +{ + cshift1 (ret, array, h, pwhich, GFC_DESCRIPTOR_SIZE (array)); +} + + +void cshift1_4_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4, + const gfc_array_char * const restrict array, + const gfc_array_i4 * const restrict h, + const GFC_INTEGER_4 * const restrict pwhich, + GFC_INTEGER_4); +export_proto(cshift1_4_char); + +void +cshift1_4_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i4 * const restrict h, + const GFC_INTEGER_4 * const restrict pwhich, + GFC_INTEGER_4 array_length) +{ + cshift1 (ret, array, h, pwhich, array_length); +} + + +void cshift1_4_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4, + const gfc_array_char * const restrict array, + const gfc_array_i4 * const restrict h, + const GFC_INTEGER_4 * const restrict pwhich, + GFC_INTEGER_4); +export_proto(cshift1_4_char4); + +void +cshift1_4_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i4 * const restrict h, + const GFC_INTEGER_4 * const restrict pwhich, + GFC_INTEGER_4 array_length) +{ + cshift1 (ret, array, h, pwhich, array_length * sizeof (gfc_char4_t)); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift1_8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift1_8.c new file mode 100644 index 0000000000..54e92dbcff --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift1_8.c @@ -0,0 +1,256 @@ +/* Implementation of the CSHIFT intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Feng Wang + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) + +static void +cshift1 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i8 * const restrict h, + const GFC_INTEGER_8 * const restrict pwhich, + index_type size) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + char *rptr; + char *dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const char *sptr; + const char *src; + /* h.* indicates the shift array. */ + index_type hstride[GFC_MAX_DIMENSIONS]; + index_type hstride0; + const GFC_INTEGER_8 *hptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + int which; + GFC_INTEGER_8 sh; + index_type arraysize; + + if (pwhich) + which = *pwhich - 1; + else + which = 0; + + if (which < 0 || (which + 1) > GFC_DESCRIPTOR_RANK (array)) + runtime_error ("Argument 'DIM' is out of range in call to 'CSHIFT'"); + + arraysize = size0 ((array_t *)array); + + if (ret->data == NULL) + { + int i; + + ret->data = internal_malloc_size (size * arraysize); + ret->offset = 0; + ret->dtype = array->dtype; + for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++) + { + ret->dim[i].lbound = 0; + ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound; + + if (i == 0) + ret->dim[i].stride = 1; + else + ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride; + } + } + + if (arraysize == 0) + return; + + extent[0] = 1; + count[0] = 0; + n = 0; + + /* Initialized for avoiding compiler warnings. */ + roffset = size; + soffset = size; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride * size; + if (roffset == 0) + roffset = size; + soffset = array->dim[dim].stride * size; + if (soffset == 0) + soffset = size; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride * size; + sstride[n] = array->dim[dim].stride * size; + + hstride[n] = h->dim[n].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = size; + if (rstride[0] == 0) + rstride[0] = size; + if (hstride[0] == 0) + hstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + hstride0 = hstride[0]; + rptr = ret->data; + sptr = array->data; + hptr = h->data; + + while (rptr) + { + /* Do the shift for this dimension. */ + sh = *hptr; + sh = (div (sh, len)).rem; + if (sh < 0) + sh += len; + + src = &sptr[sh * soffset]; + dest = rptr; + + for (n = 0; n < len; n++) + { + memcpy (dest, src, size); + dest += roffset; + if (n == len - sh - 1) + src = sptr; + else + src += soffset; + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + hptr += hstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + hptr -= hstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + hptr += hstride[n]; + } + } + } +} + +void cshift1_8 (gfc_array_char * const restrict, + const gfc_array_char * const restrict, + const gfc_array_i8 * const restrict, + const GFC_INTEGER_8 * const restrict); +export_proto(cshift1_8); + +void +cshift1_8 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i8 * const restrict h, + const GFC_INTEGER_8 * const restrict pwhich) +{ + cshift1 (ret, array, h, pwhich, GFC_DESCRIPTOR_SIZE (array)); +} + + +void cshift1_8_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4, + const gfc_array_char * const restrict array, + const gfc_array_i8 * const restrict h, + const GFC_INTEGER_8 * const restrict pwhich, + GFC_INTEGER_4); +export_proto(cshift1_8_char); + +void +cshift1_8_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i8 * const restrict h, + const GFC_INTEGER_8 * const restrict pwhich, + GFC_INTEGER_4 array_length) +{ + cshift1 (ret, array, h, pwhich, array_length); +} + + +void cshift1_8_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4, + const gfc_array_char * const restrict array, + const gfc_array_i8 * const restrict h, + const GFC_INTEGER_8 * const restrict pwhich, + GFC_INTEGER_4); +export_proto(cshift1_8_char4); + +void +cshift1_8_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i8 * const restrict h, + const GFC_INTEGER_8 * const restrict pwhich, + GFC_INTEGER_4 array_length) +{ + cshift1 (ret, array, h, pwhich, array_length * sizeof (gfc_char4_t)); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift1_16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift1_16.c new file mode 100644 index 0000000000..b9fe9c311f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift1_16.c @@ -0,0 +1,296 @@ +/* Implementation of the EOSHIFT intrinsic + Copyright 2002, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) + +static void +eoshift1 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i16 * const restrict h, + const char * const restrict pbound, + const GFC_INTEGER_16 * const restrict pwhich, + index_type size, const char * filler, index_type filler_len) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + char *rptr; + char * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const char *sptr; + const char *src; + /* h.* indicates the shift array. */ + index_type hstride[GFC_MAX_DIMENSIONS]; + index_type hstride0; + const GFC_INTEGER_16 *hptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + int which; + GFC_INTEGER_16 sh; + GFC_INTEGER_16 delta; + + /* The compiler cannot figure out that these are set, initialize + them to avoid warnings. */ + len = 0; + soffset = 0; + roffset = 0; + + if (pwhich) + which = *pwhich - 1; + else + which = 0; + + extent[0] = 1; + count[0] = 0; + + if (ret->data == NULL) + { + int i; + + ret->data = internal_malloc_size (size * size0 ((array_t *)array)); + ret->offset = 0; + ret->dtype = array->dtype; + for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++) + { + ret->dim[i].lbound = 0; + ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound; + + if (i == 0) + ret->dim[i].stride = 1; + else + ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride; + } + } + else + { + if (size0 ((array_t *) ret) == 0) + return; + } + + n = 0; + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride * size; + if (roffset == 0) + roffset = size; + soffset = array->dim[dim].stride * size; + if (soffset == 0) + soffset = size; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride * size; + sstride[n] = array->dim[dim].stride * size; + + hstride[n] = h->dim[n].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = size; + if (rstride[0] == 0) + rstride[0] = size; + if (hstride[0] == 0) + hstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + hstride0 = hstride[0]; + rptr = ret->data; + sptr = array->data; + hptr = h->data; + + while (rptr) + { + /* Do the shift for this dimension. */ + sh = *hptr; + if (( sh >= 0 ? sh : -sh ) > len) + { + delta = len; + sh = len; + } + else + delta = (sh >= 0) ? sh: -sh; + + if (sh > 0) + { + src = &sptr[delta * soffset]; + dest = rptr; + } + else + { + src = sptr; + dest = &rptr[delta * roffset]; + } + for (n = 0; n < len - delta; n++) + { + memcpy (dest, src, size); + dest += roffset; + src += soffset; + } + if (sh < 0) + dest = rptr; + n = delta; + + if (pbound) + while (n--) + { + memcpy (dest, pbound, size); + dest += roffset; + } + else + while (n--) + { + index_type i; + + if (filler_len == 1) + memset (dest, filler[0], size); + else + for (i = 0; i < size; i += filler_len) + memcpy (&dest[i], filler, filler_len); + + dest += roffset; + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + hptr += hstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + hptr -= hstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + hptr += hstride[n]; + } + } + } +} + +void eoshift1_16 (gfc_array_char * const restrict, + const gfc_array_char * const restrict, + const gfc_array_i16 * const restrict, const char * const restrict, + const GFC_INTEGER_16 * const restrict); +export_proto(eoshift1_16); + +void +eoshift1_16 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i16 * const restrict h, + const char * const restrict pbound, + const GFC_INTEGER_16 * const restrict pwhich) +{ + eoshift1 (ret, array, h, pbound, pwhich, GFC_DESCRIPTOR_SIZE (array), + "\0", 1); +} + + +void eoshift1_16_char (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const gfc_array_i16 * const restrict, + const char * const restrict, + const GFC_INTEGER_16 * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift1_16_char); + +void +eoshift1_16_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i16 * const restrict h, + const char * const restrict pbound, + const GFC_INTEGER_16 * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + eoshift1 (ret, array, h, pbound, pwhich, array_length, " ", 1); +} + + +void eoshift1_16_char4 (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const gfc_array_i16 * const restrict, + const char * const restrict, + const GFC_INTEGER_16 * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift1_16_char4); + +void +eoshift1_16_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i16 * const restrict h, + const char * const restrict pbound, + const GFC_INTEGER_16 * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + static const gfc_char4_t space = (unsigned char) ' '; + eoshift1 (ret, array, h, pbound, pwhich, array_length * sizeof (gfc_char4_t), + (const char *) &space, sizeof (gfc_char4_t)); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift1_4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift1_4.c new file mode 100644 index 0000000000..0510d2cd1e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift1_4.c @@ -0,0 +1,296 @@ +/* Implementation of the EOSHIFT intrinsic + Copyright 2002, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) + +static void +eoshift1 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i4 * const restrict h, + const char * const restrict pbound, + const GFC_INTEGER_4 * const restrict pwhich, + index_type size, const char * filler, index_type filler_len) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + char *rptr; + char * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const char *sptr; + const char *src; + /* h.* indicates the shift array. */ + index_type hstride[GFC_MAX_DIMENSIONS]; + index_type hstride0; + const GFC_INTEGER_4 *hptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + int which; + GFC_INTEGER_4 sh; + GFC_INTEGER_4 delta; + + /* The compiler cannot figure out that these are set, initialize + them to avoid warnings. */ + len = 0; + soffset = 0; + roffset = 0; + + if (pwhich) + which = *pwhich - 1; + else + which = 0; + + extent[0] = 1; + count[0] = 0; + + if (ret->data == NULL) + { + int i; + + ret->data = internal_malloc_size (size * size0 ((array_t *)array)); + ret->offset = 0; + ret->dtype = array->dtype; + for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++) + { + ret->dim[i].lbound = 0; + ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound; + + if (i == 0) + ret->dim[i].stride = 1; + else + ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride; + } + } + else + { + if (size0 ((array_t *) ret) == 0) + return; + } + + n = 0; + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride * size; + if (roffset == 0) + roffset = size; + soffset = array->dim[dim].stride * size; + if (soffset == 0) + soffset = size; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride * size; + sstride[n] = array->dim[dim].stride * size; + + hstride[n] = h->dim[n].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = size; + if (rstride[0] == 0) + rstride[0] = size; + if (hstride[0] == 0) + hstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + hstride0 = hstride[0]; + rptr = ret->data; + sptr = array->data; + hptr = h->data; + + while (rptr) + { + /* Do the shift for this dimension. */ + sh = *hptr; + if (( sh >= 0 ? sh : -sh ) > len) + { + delta = len; + sh = len; + } + else + delta = (sh >= 0) ? sh: -sh; + + if (sh > 0) + { + src = &sptr[delta * soffset]; + dest = rptr; + } + else + { + src = sptr; + dest = &rptr[delta * roffset]; + } + for (n = 0; n < len - delta; n++) + { + memcpy (dest, src, size); + dest += roffset; + src += soffset; + } + if (sh < 0) + dest = rptr; + n = delta; + + if (pbound) + while (n--) + { + memcpy (dest, pbound, size); + dest += roffset; + } + else + while (n--) + { + index_type i; + + if (filler_len == 1) + memset (dest, filler[0], size); + else + for (i = 0; i < size; i += filler_len) + memcpy (&dest[i], filler, filler_len); + + dest += roffset; + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + hptr += hstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + hptr -= hstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + hptr += hstride[n]; + } + } + } +} + +void eoshift1_4 (gfc_array_char * const restrict, + const gfc_array_char * const restrict, + const gfc_array_i4 * const restrict, const char * const restrict, + const GFC_INTEGER_4 * const restrict); +export_proto(eoshift1_4); + +void +eoshift1_4 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i4 * const restrict h, + const char * const restrict pbound, + const GFC_INTEGER_4 * const restrict pwhich) +{ + eoshift1 (ret, array, h, pbound, pwhich, GFC_DESCRIPTOR_SIZE (array), + "\0", 1); +} + + +void eoshift1_4_char (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const gfc_array_i4 * const restrict, + const char * const restrict, + const GFC_INTEGER_4 * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift1_4_char); + +void +eoshift1_4_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i4 * const restrict h, + const char * const restrict pbound, + const GFC_INTEGER_4 * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + eoshift1 (ret, array, h, pbound, pwhich, array_length, " ", 1); +} + + +void eoshift1_4_char4 (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const gfc_array_i4 * const restrict, + const char * const restrict, + const GFC_INTEGER_4 * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift1_4_char4); + +void +eoshift1_4_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i4 * const restrict h, + const char * const restrict pbound, + const GFC_INTEGER_4 * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + static const gfc_char4_t space = (unsigned char) ' '; + eoshift1 (ret, array, h, pbound, pwhich, array_length * sizeof (gfc_char4_t), + (const char *) &space, sizeof (gfc_char4_t)); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift1_8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift1_8.c new file mode 100644 index 0000000000..d61023e540 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift1_8.c @@ -0,0 +1,296 @@ +/* Implementation of the EOSHIFT intrinsic + Copyright 2002, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) + +static void +eoshift1 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i8 * const restrict h, + const char * const restrict pbound, + const GFC_INTEGER_8 * const restrict pwhich, + index_type size, const char * filler, index_type filler_len) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + char *rptr; + char * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const char *sptr; + const char *src; + /* h.* indicates the shift array. */ + index_type hstride[GFC_MAX_DIMENSIONS]; + index_type hstride0; + const GFC_INTEGER_8 *hptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + int which; + GFC_INTEGER_8 sh; + GFC_INTEGER_8 delta; + + /* The compiler cannot figure out that these are set, initialize + them to avoid warnings. */ + len = 0; + soffset = 0; + roffset = 0; + + if (pwhich) + which = *pwhich - 1; + else + which = 0; + + extent[0] = 1; + count[0] = 0; + + if (ret->data == NULL) + { + int i; + + ret->data = internal_malloc_size (size * size0 ((array_t *)array)); + ret->offset = 0; + ret->dtype = array->dtype; + for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++) + { + ret->dim[i].lbound = 0; + ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound; + + if (i == 0) + ret->dim[i].stride = 1; + else + ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride; + } + } + else + { + if (size0 ((array_t *) ret) == 0) + return; + } + + n = 0; + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride * size; + if (roffset == 0) + roffset = size; + soffset = array->dim[dim].stride * size; + if (soffset == 0) + soffset = size; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride * size; + sstride[n] = array->dim[dim].stride * size; + + hstride[n] = h->dim[n].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = size; + if (rstride[0] == 0) + rstride[0] = size; + if (hstride[0] == 0) + hstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + hstride0 = hstride[0]; + rptr = ret->data; + sptr = array->data; + hptr = h->data; + + while (rptr) + { + /* Do the shift for this dimension. */ + sh = *hptr; + if (( sh >= 0 ? sh : -sh ) > len) + { + delta = len; + sh = len; + } + else + delta = (sh >= 0) ? sh: -sh; + + if (sh > 0) + { + src = &sptr[delta * soffset]; + dest = rptr; + } + else + { + src = sptr; + dest = &rptr[delta * roffset]; + } + for (n = 0; n < len - delta; n++) + { + memcpy (dest, src, size); + dest += roffset; + src += soffset; + } + if (sh < 0) + dest = rptr; + n = delta; + + if (pbound) + while (n--) + { + memcpy (dest, pbound, size); + dest += roffset; + } + else + while (n--) + { + index_type i; + + if (filler_len == 1) + memset (dest, filler[0], size); + else + for (i = 0; i < size; i += filler_len) + memcpy (&dest[i], filler, filler_len); + + dest += roffset; + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + hptr += hstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + hptr -= hstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + hptr += hstride[n]; + } + } + } +} + +void eoshift1_8 (gfc_array_char * const restrict, + const gfc_array_char * const restrict, + const gfc_array_i8 * const restrict, const char * const restrict, + const GFC_INTEGER_8 * const restrict); +export_proto(eoshift1_8); + +void +eoshift1_8 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i8 * const restrict h, + const char * const restrict pbound, + const GFC_INTEGER_8 * const restrict pwhich) +{ + eoshift1 (ret, array, h, pbound, pwhich, GFC_DESCRIPTOR_SIZE (array), + "\0", 1); +} + + +void eoshift1_8_char (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const gfc_array_i8 * const restrict, + const char * const restrict, + const GFC_INTEGER_8 * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift1_8_char); + +void +eoshift1_8_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i8 * const restrict h, + const char * const restrict pbound, + const GFC_INTEGER_8 * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + eoshift1 (ret, array, h, pbound, pwhich, array_length, " ", 1); +} + + +void eoshift1_8_char4 (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const gfc_array_i8 * const restrict, + const char * const restrict, + const GFC_INTEGER_8 * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift1_8_char4); + +void +eoshift1_8_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i8 * const restrict h, + const char * const restrict pbound, + const GFC_INTEGER_8 * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + static const gfc_char4_t space = (unsigned char) ' '; + eoshift1 (ret, array, h, pbound, pwhich, array_length * sizeof (gfc_char4_t), + (const char *) &space, sizeof (gfc_char4_t)); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift3_16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift3_16.c new file mode 100644 index 0000000000..282409e2fe --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift3_16.c @@ -0,0 +1,315 @@ +/* Implementation of the EOSHIFT intrinsic + Copyright 2002, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) + +static void +eoshift3 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i16 * const restrict h, + const gfc_array_char * const restrict bound, + const GFC_INTEGER_16 * const restrict pwhich, + index_type size, const char * filler, index_type filler_len) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + char *rptr; + char * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const char *sptr; + const char *src; + /* h.* indicates the shift array. */ + index_type hstride[GFC_MAX_DIMENSIONS]; + index_type hstride0; + const GFC_INTEGER_16 *hptr; + /* b.* indicates the bound array. */ + index_type bstride[GFC_MAX_DIMENSIONS]; + index_type bstride0; + const char *bptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + int which; + GFC_INTEGER_16 sh; + GFC_INTEGER_16 delta; + + /* The compiler cannot figure out that these are set, initialize + them to avoid warnings. */ + len = 0; + soffset = 0; + roffset = 0; + + if (pwhich) + which = *pwhich - 1; + else + which = 0; + + if (ret->data == NULL) + { + int i; + + ret->data = internal_malloc_size (size * size0 ((array_t *)array)); + ret->offset = 0; + ret->dtype = array->dtype; + for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++) + { + ret->dim[i].lbound = 0; + ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound; + + if (i == 0) + ret->dim[i].stride = 1; + else + ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride; + } + } + else + { + if (size0 ((array_t *) ret) == 0) + return; + } + + + extent[0] = 1; + count[0] = 0; + n = 0; + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride * size; + if (roffset == 0) + roffset = size; + soffset = array->dim[dim].stride * size; + if (soffset == 0) + soffset = size; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride * size; + sstride[n] = array->dim[dim].stride * size; + + hstride[n] = h->dim[n].stride; + if (bound) + bstride[n] = bound->dim[n].stride * size; + else + bstride[n] = 0; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = size; + if (rstride[0] == 0) + rstride[0] = size; + if (hstride[0] == 0) + hstride[0] = 1; + if (bound && bstride[0] == 0) + bstride[0] = size; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + hstride0 = hstride[0]; + bstride0 = bstride[0]; + rptr = ret->data; + sptr = array->data; + hptr = h->data; + if (bound) + bptr = bound->data; + else + bptr = NULL; + + while (rptr) + { + /* Do the shift for this dimension. */ + sh = *hptr; + if (( sh >= 0 ? sh : -sh ) > len) + { + delta = len; + sh = len; + } + else + delta = (sh >= 0) ? sh: -sh; + + if (sh > 0) + { + src = &sptr[delta * soffset]; + dest = rptr; + } + else + { + src = sptr; + dest = &rptr[delta * roffset]; + } + for (n = 0; n < len - delta; n++) + { + memcpy (dest, src, size); + dest += roffset; + src += soffset; + } + if (sh < 0) + dest = rptr; + n = delta; + + if (bptr) + while (n--) + { + memcpy (dest, bptr, size); + dest += roffset; + } + else + while (n--) + { + index_type i; + + if (filler_len == 1) + memset (dest, filler[0], size); + else + for (i = 0; i < size; i += filler_len) + memcpy (&dest[i], filler, filler_len); + + dest += roffset; + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + hptr += hstride0; + bptr += bstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + hptr -= hstride[n] * extent[n]; + bptr -= bstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + hptr += hstride[n]; + bptr += bstride[n]; + } + } + } +} + +extern void eoshift3_16 (gfc_array_char * const restrict, + const gfc_array_char * const restrict, + const gfc_array_i16 * const restrict, + const gfc_array_char * const restrict, + const GFC_INTEGER_16 *); +export_proto(eoshift3_16); + +void +eoshift3_16 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i16 * const restrict h, + const gfc_array_char * const restrict bound, + const GFC_INTEGER_16 * const restrict pwhich) +{ + eoshift3 (ret, array, h, bound, pwhich, GFC_DESCRIPTOR_SIZE (array), + "\0", 1); +} + + +extern void eoshift3_16_char (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const gfc_array_i16 * const restrict, + const gfc_array_char * const restrict, + const GFC_INTEGER_16 * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift3_16_char); + +void +eoshift3_16_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i16 * const restrict h, + const gfc_array_char * const restrict bound, + const GFC_INTEGER_16 * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + eoshift3 (ret, array, h, bound, pwhich, array_length, " ", 1); +} + + +extern void eoshift3_16_char4 (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const gfc_array_i16 * const restrict, + const gfc_array_char * const restrict, + const GFC_INTEGER_16 * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift3_16_char4); + +void +eoshift3_16_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i16 * const restrict h, + const gfc_array_char * const restrict bound, + const GFC_INTEGER_16 * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + static const gfc_char4_t space = (unsigned char) ' '; + eoshift3 (ret, array, h, bound, pwhich, array_length * sizeof (gfc_char4_t), + (const char *) &space, sizeof (gfc_char4_t)); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift3_4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift3_4.c new file mode 100644 index 0000000000..a16594506c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift3_4.c @@ -0,0 +1,315 @@ +/* Implementation of the EOSHIFT intrinsic + Copyright 2002, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) + +static void +eoshift3 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i4 * const restrict h, + const gfc_array_char * const restrict bound, + const GFC_INTEGER_4 * const restrict pwhich, + index_type size, const char * filler, index_type filler_len) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + char *rptr; + char * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const char *sptr; + const char *src; + /* h.* indicates the shift array. */ + index_type hstride[GFC_MAX_DIMENSIONS]; + index_type hstride0; + const GFC_INTEGER_4 *hptr; + /* b.* indicates the bound array. */ + index_type bstride[GFC_MAX_DIMENSIONS]; + index_type bstride0; + const char *bptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + int which; + GFC_INTEGER_4 sh; + GFC_INTEGER_4 delta; + + /* The compiler cannot figure out that these are set, initialize + them to avoid warnings. */ + len = 0; + soffset = 0; + roffset = 0; + + if (pwhich) + which = *pwhich - 1; + else + which = 0; + + if (ret->data == NULL) + { + int i; + + ret->data = internal_malloc_size (size * size0 ((array_t *)array)); + ret->offset = 0; + ret->dtype = array->dtype; + for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++) + { + ret->dim[i].lbound = 0; + ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound; + + if (i == 0) + ret->dim[i].stride = 1; + else + ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride; + } + } + else + { + if (size0 ((array_t *) ret) == 0) + return; + } + + + extent[0] = 1; + count[0] = 0; + n = 0; + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride * size; + if (roffset == 0) + roffset = size; + soffset = array->dim[dim].stride * size; + if (soffset == 0) + soffset = size; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride * size; + sstride[n] = array->dim[dim].stride * size; + + hstride[n] = h->dim[n].stride; + if (bound) + bstride[n] = bound->dim[n].stride * size; + else + bstride[n] = 0; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = size; + if (rstride[0] == 0) + rstride[0] = size; + if (hstride[0] == 0) + hstride[0] = 1; + if (bound && bstride[0] == 0) + bstride[0] = size; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + hstride0 = hstride[0]; + bstride0 = bstride[0]; + rptr = ret->data; + sptr = array->data; + hptr = h->data; + if (bound) + bptr = bound->data; + else + bptr = NULL; + + while (rptr) + { + /* Do the shift for this dimension. */ + sh = *hptr; + if (( sh >= 0 ? sh : -sh ) > len) + { + delta = len; + sh = len; + } + else + delta = (sh >= 0) ? sh: -sh; + + if (sh > 0) + { + src = &sptr[delta * soffset]; + dest = rptr; + } + else + { + src = sptr; + dest = &rptr[delta * roffset]; + } + for (n = 0; n < len - delta; n++) + { + memcpy (dest, src, size); + dest += roffset; + src += soffset; + } + if (sh < 0) + dest = rptr; + n = delta; + + if (bptr) + while (n--) + { + memcpy (dest, bptr, size); + dest += roffset; + } + else + while (n--) + { + index_type i; + + if (filler_len == 1) + memset (dest, filler[0], size); + else + for (i = 0; i < size; i += filler_len) + memcpy (&dest[i], filler, filler_len); + + dest += roffset; + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + hptr += hstride0; + bptr += bstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + hptr -= hstride[n] * extent[n]; + bptr -= bstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + hptr += hstride[n]; + bptr += bstride[n]; + } + } + } +} + +extern void eoshift3_4 (gfc_array_char * const restrict, + const gfc_array_char * const restrict, + const gfc_array_i4 * const restrict, + const gfc_array_char * const restrict, + const GFC_INTEGER_4 *); +export_proto(eoshift3_4); + +void +eoshift3_4 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i4 * const restrict h, + const gfc_array_char * const restrict bound, + const GFC_INTEGER_4 * const restrict pwhich) +{ + eoshift3 (ret, array, h, bound, pwhich, GFC_DESCRIPTOR_SIZE (array), + "\0", 1); +} + + +extern void eoshift3_4_char (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const gfc_array_i4 * const restrict, + const gfc_array_char * const restrict, + const GFC_INTEGER_4 * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift3_4_char); + +void +eoshift3_4_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i4 * const restrict h, + const gfc_array_char * const restrict bound, + const GFC_INTEGER_4 * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + eoshift3 (ret, array, h, bound, pwhich, array_length, " ", 1); +} + + +extern void eoshift3_4_char4 (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const gfc_array_i4 * const restrict, + const gfc_array_char * const restrict, + const GFC_INTEGER_4 * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift3_4_char4); + +void +eoshift3_4_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i4 * const restrict h, + const gfc_array_char * const restrict bound, + const GFC_INTEGER_4 * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + static const gfc_char4_t space = (unsigned char) ' '; + eoshift3 (ret, array, h, bound, pwhich, array_length * sizeof (gfc_char4_t), + (const char *) &space, sizeof (gfc_char4_t)); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift3_8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift3_8.c new file mode 100644 index 0000000000..5942de5ea0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift3_8.c @@ -0,0 +1,315 @@ +/* Implementation of the EOSHIFT intrinsic + Copyright 2002, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) + +static void +eoshift3 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i8 * const restrict h, + const gfc_array_char * const restrict bound, + const GFC_INTEGER_8 * const restrict pwhich, + index_type size, const char * filler, index_type filler_len) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + char *rptr; + char * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const char *sptr; + const char *src; + /* h.* indicates the shift array. */ + index_type hstride[GFC_MAX_DIMENSIONS]; + index_type hstride0; + const GFC_INTEGER_8 *hptr; + /* b.* indicates the bound array. */ + index_type bstride[GFC_MAX_DIMENSIONS]; + index_type bstride0; + const char *bptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + int which; + GFC_INTEGER_8 sh; + GFC_INTEGER_8 delta; + + /* The compiler cannot figure out that these are set, initialize + them to avoid warnings. */ + len = 0; + soffset = 0; + roffset = 0; + + if (pwhich) + which = *pwhich - 1; + else + which = 0; + + if (ret->data == NULL) + { + int i; + + ret->data = internal_malloc_size (size * size0 ((array_t *)array)); + ret->offset = 0; + ret->dtype = array->dtype; + for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++) + { + ret->dim[i].lbound = 0; + ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound; + + if (i == 0) + ret->dim[i].stride = 1; + else + ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride; + } + } + else + { + if (size0 ((array_t *) ret) == 0) + return; + } + + + extent[0] = 1; + count[0] = 0; + n = 0; + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride * size; + if (roffset == 0) + roffset = size; + soffset = array->dim[dim].stride * size; + if (soffset == 0) + soffset = size; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride * size; + sstride[n] = array->dim[dim].stride * size; + + hstride[n] = h->dim[n].stride; + if (bound) + bstride[n] = bound->dim[n].stride * size; + else + bstride[n] = 0; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = size; + if (rstride[0] == 0) + rstride[0] = size; + if (hstride[0] == 0) + hstride[0] = 1; + if (bound && bstride[0] == 0) + bstride[0] = size; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + hstride0 = hstride[0]; + bstride0 = bstride[0]; + rptr = ret->data; + sptr = array->data; + hptr = h->data; + if (bound) + bptr = bound->data; + else + bptr = NULL; + + while (rptr) + { + /* Do the shift for this dimension. */ + sh = *hptr; + if (( sh >= 0 ? sh : -sh ) > len) + { + delta = len; + sh = len; + } + else + delta = (sh >= 0) ? sh: -sh; + + if (sh > 0) + { + src = &sptr[delta * soffset]; + dest = rptr; + } + else + { + src = sptr; + dest = &rptr[delta * roffset]; + } + for (n = 0; n < len - delta; n++) + { + memcpy (dest, src, size); + dest += roffset; + src += soffset; + } + if (sh < 0) + dest = rptr; + n = delta; + + if (bptr) + while (n--) + { + memcpy (dest, bptr, size); + dest += roffset; + } + else + while (n--) + { + index_type i; + + if (filler_len == 1) + memset (dest, filler[0], size); + else + for (i = 0; i < size; i += filler_len) + memcpy (&dest[i], filler, filler_len); + + dest += roffset; + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + hptr += hstride0; + bptr += bstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + hptr -= hstride[n] * extent[n]; + bptr -= bstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + hptr += hstride[n]; + bptr += bstride[n]; + } + } + } +} + +extern void eoshift3_8 (gfc_array_char * const restrict, + const gfc_array_char * const restrict, + const gfc_array_i8 * const restrict, + const gfc_array_char * const restrict, + const GFC_INTEGER_8 *); +export_proto(eoshift3_8); + +void +eoshift3_8 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const gfc_array_i8 * const restrict h, + const gfc_array_char * const restrict bound, + const GFC_INTEGER_8 * const restrict pwhich) +{ + eoshift3 (ret, array, h, bound, pwhich, GFC_DESCRIPTOR_SIZE (array), + "\0", 1); +} + + +extern void eoshift3_8_char (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const gfc_array_i8 * const restrict, + const gfc_array_char * const restrict, + const GFC_INTEGER_8 * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift3_8_char); + +void +eoshift3_8_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i8 * const restrict h, + const gfc_array_char * const restrict bound, + const GFC_INTEGER_8 * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + eoshift3 (ret, array, h, bound, pwhich, array_length, " ", 1); +} + + +extern void eoshift3_8_char4 (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const gfc_array_i8 * const restrict, + const gfc_array_char * const restrict, + const GFC_INTEGER_8 * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift3_8_char4); + +void +eoshift3_8_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const gfc_array_i8 * const restrict h, + const gfc_array_char * const restrict bound, + const GFC_INTEGER_8 * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + static const gfc_char4_t space = (unsigned char) ' '; + eoshift3 (ret, array, h, bound, pwhich, array_length * sizeof (gfc_char4_t), + (const char *) &space, sizeof (gfc_char4_t)); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r10.c new file mode 100644 index 0000000000..1b56765b3b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r10.c @@ -0,0 +1,42 @@ +/* Implementation of the EXPONENT intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_FREXPL) + +extern GFC_INTEGER_4 exponent_r10 (GFC_REAL_10 s); +export_proto(exponent_r10); + +GFC_INTEGER_4 +exponent_r10 (GFC_REAL_10 s) +{ + int ret; + frexpl (s, &ret); + return ret; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r16.c new file mode 100644 index 0000000000..23f04152dd --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r16.c @@ -0,0 +1,42 @@ +/* Implementation of the EXPONENT intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_FREXPL) + +extern GFC_INTEGER_4 exponent_r16 (GFC_REAL_16 s); +export_proto(exponent_r16); + +GFC_INTEGER_4 +exponent_r16 (GFC_REAL_16 s) +{ + int ret; + frexpl (s, &ret); + return ret; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r4.c new file mode 100644 index 0000000000..b2df840a48 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r4.c @@ -0,0 +1,42 @@ +/* Implementation of the EXPONENT intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_FREXPF) + +extern GFC_INTEGER_4 exponent_r4 (GFC_REAL_4 s); +export_proto(exponent_r4); + +GFC_INTEGER_4 +exponent_r4 (GFC_REAL_4 s) +{ + int ret; + frexpf (s, &ret); + return ret; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r8.c new file mode 100644 index 0000000000..ed4319ffa0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r8.c @@ -0,0 +1,42 @@ +/* Implementation of the EXPONENT intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_FREXP) + +extern GFC_INTEGER_4 exponent_r8 (GFC_REAL_8 s); +export_proto(exponent_r8); + +GFC_INTEGER_4 +exponent_r8 (GFC_REAL_8 s) +{ + int ret; + frexp (s, &ret); + return ret; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r10.c new file mode 100644 index 0000000000..46aa65d2ce --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r10.c @@ -0,0 +1,41 @@ +/* Implementation of the FRACTION intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_FREXPL) + +extern GFC_REAL_10 fraction_r10 (GFC_REAL_10 s); +export_proto(fraction_r10); + +GFC_REAL_10 +fraction_r10 (GFC_REAL_10 s) +{ + int dummy_exp; + return frexpl (s, &dummy_exp); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r16.c new file mode 100644 index 0000000000..1ae3262a43 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r16.c @@ -0,0 +1,41 @@ +/* Implementation of the FRACTION intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_FREXPL) + +extern GFC_REAL_16 fraction_r16 (GFC_REAL_16 s); +export_proto(fraction_r16); + +GFC_REAL_16 +fraction_r16 (GFC_REAL_16 s) +{ + int dummy_exp; + return frexpl (s, &dummy_exp); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r4.c new file mode 100644 index 0000000000..f2ea9e2791 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r4.c @@ -0,0 +1,41 @@ +/* Implementation of the FRACTION intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_FREXPF) + +extern GFC_REAL_4 fraction_r4 (GFC_REAL_4 s); +export_proto(fraction_r4); + +GFC_REAL_4 +fraction_r4 (GFC_REAL_4 s) +{ + int dummy_exp; + return frexpf (s, &dummy_exp); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r8.c new file mode 100644 index 0000000000..1e0f9361ad --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r8.c @@ -0,0 +1,41 @@ +/* Implementation of the FRACTION intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_FREXP) + +extern GFC_REAL_8 fraction_r8 (GFC_REAL_8 s); +export_proto(fraction_r8); + +GFC_REAL_8 +fraction_r8 (GFC_REAL_8 s) +{ + int dummy_exp; + return frexp (s, &dummy_exp); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c10.c new file mode 100644 index 0000000000..afe5ba1835 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c10.c @@ -0,0 +1,119 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_10) + +/* Allocates a block of memory with internal_malloc if the array needs + repacking. */ + +GFC_COMPLEX_10 * +internal_pack_c10 (gfc_array_c10 * source) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type ssize; + const GFC_COMPLEX_10 *src; + GFC_COMPLEX_10 * restrict dest; + GFC_COMPLEX_10 *destptr; + int n; + int packed; + + /* TODO: Investigate how we can figure out if this is a temporary + since the stride=0 thing has been removed from the frontend. */ + + dim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + packed = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = source->dim[n].stride; + extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (extent[n] <= 0) + { + /* Do nothing. */ + packed = 1; + break; + } + + if (ssize != stride[n]) + packed = 0; + + ssize *= extent[n]; + } + + if (packed) + return source->data; + + /* Allocate storage for the destination. */ + destptr = (GFC_COMPLEX_10 *)internal_malloc_size (ssize * sizeof (GFC_COMPLEX_10)); + dest = destptr; + src = source->data; + stride0 = stride[0]; + + + while (src) + { + /* Copy the data. */ + *(dest++) = *src; + /* Advance to the next element. */ + src += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= stride[n] * extent[n]; + n++; + if (n == dim) + { + src = NULL; + break; + } + else + { + count[n]++; + src += stride[n]; + } + } + } + return destptr; +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c16.c new file mode 100644 index 0000000000..c60c6870e7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c16.c @@ -0,0 +1,119 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_16) + +/* Allocates a block of memory with internal_malloc if the array needs + repacking. */ + +GFC_COMPLEX_16 * +internal_pack_c16 (gfc_array_c16 * source) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type ssize; + const GFC_COMPLEX_16 *src; + GFC_COMPLEX_16 * restrict dest; + GFC_COMPLEX_16 *destptr; + int n; + int packed; + + /* TODO: Investigate how we can figure out if this is a temporary + since the stride=0 thing has been removed from the frontend. */ + + dim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + packed = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = source->dim[n].stride; + extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (extent[n] <= 0) + { + /* Do nothing. */ + packed = 1; + break; + } + + if (ssize != stride[n]) + packed = 0; + + ssize *= extent[n]; + } + + if (packed) + return source->data; + + /* Allocate storage for the destination. */ + destptr = (GFC_COMPLEX_16 *)internal_malloc_size (ssize * sizeof (GFC_COMPLEX_16)); + dest = destptr; + src = source->data; + stride0 = stride[0]; + + + while (src) + { + /* Copy the data. */ + *(dest++) = *src; + /* Advance to the next element. */ + src += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= stride[n] * extent[n]; + n++; + if (n == dim) + { + src = NULL; + break; + } + else + { + count[n]++; + src += stride[n]; + } + } + } + return destptr; +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c4.c new file mode 100644 index 0000000000..a117f7ac4e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c4.c @@ -0,0 +1,119 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_4) + +/* Allocates a block of memory with internal_malloc if the array needs + repacking. */ + +GFC_COMPLEX_4 * +internal_pack_c4 (gfc_array_c4 * source) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type ssize; + const GFC_COMPLEX_4 *src; + GFC_COMPLEX_4 * restrict dest; + GFC_COMPLEX_4 *destptr; + int n; + int packed; + + /* TODO: Investigate how we can figure out if this is a temporary + since the stride=0 thing has been removed from the frontend. */ + + dim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + packed = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = source->dim[n].stride; + extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (extent[n] <= 0) + { + /* Do nothing. */ + packed = 1; + break; + } + + if (ssize != stride[n]) + packed = 0; + + ssize *= extent[n]; + } + + if (packed) + return source->data; + + /* Allocate storage for the destination. */ + destptr = (GFC_COMPLEX_4 *)internal_malloc_size (ssize * sizeof (GFC_COMPLEX_4)); + dest = destptr; + src = source->data; + stride0 = stride[0]; + + + while (src) + { + /* Copy the data. */ + *(dest++) = *src; + /* Advance to the next element. */ + src += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= stride[n] * extent[n]; + n++; + if (n == dim) + { + src = NULL; + break; + } + else + { + count[n]++; + src += stride[n]; + } + } + } + return destptr; +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c8.c new file mode 100644 index 0000000000..f57f2aae13 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c8.c @@ -0,0 +1,119 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_8) + +/* Allocates a block of memory with internal_malloc if the array needs + repacking. */ + +GFC_COMPLEX_8 * +internal_pack_c8 (gfc_array_c8 * source) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type ssize; + const GFC_COMPLEX_8 *src; + GFC_COMPLEX_8 * restrict dest; + GFC_COMPLEX_8 *destptr; + int n; + int packed; + + /* TODO: Investigate how we can figure out if this is a temporary + since the stride=0 thing has been removed from the frontend. */ + + dim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + packed = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = source->dim[n].stride; + extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (extent[n] <= 0) + { + /* Do nothing. */ + packed = 1; + break; + } + + if (ssize != stride[n]) + packed = 0; + + ssize *= extent[n]; + } + + if (packed) + return source->data; + + /* Allocate storage for the destination. */ + destptr = (GFC_COMPLEX_8 *)internal_malloc_size (ssize * sizeof (GFC_COMPLEX_8)); + dest = destptr; + src = source->data; + stride0 = stride[0]; + + + while (src) + { + /* Copy the data. */ + *(dest++) = *src; + /* Advance to the next element. */ + src += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= stride[n] * extent[n]; + n++; + if (n == dim) + { + src = NULL; + break; + } + else + { + count[n]++; + src += stride[n]; + } + } + } + return destptr; +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i1.c new file mode 100644 index 0000000000..1378f89e73 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i1.c @@ -0,0 +1,119 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) + +/* Allocates a block of memory with internal_malloc if the array needs + repacking. */ + +GFC_INTEGER_1 * +internal_pack_1 (gfc_array_i1 * source) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type ssize; + const GFC_INTEGER_1 *src; + GFC_INTEGER_1 * restrict dest; + GFC_INTEGER_1 *destptr; + int n; + int packed; + + /* TODO: Investigate how we can figure out if this is a temporary + since the stride=0 thing has been removed from the frontend. */ + + dim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + packed = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = source->dim[n].stride; + extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (extent[n] <= 0) + { + /* Do nothing. */ + packed = 1; + break; + } + + if (ssize != stride[n]) + packed = 0; + + ssize *= extent[n]; + } + + if (packed) + return source->data; + + /* Allocate storage for the destination. */ + destptr = (GFC_INTEGER_1 *)internal_malloc_size (ssize * sizeof (GFC_INTEGER_1)); + dest = destptr; + src = source->data; + stride0 = stride[0]; + + + while (src) + { + /* Copy the data. */ + *(dest++) = *src; + /* Advance to the next element. */ + src += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= stride[n] * extent[n]; + n++; + if (n == dim) + { + src = NULL; + break; + } + else + { + count[n]++; + src += stride[n]; + } + } + } + return destptr; +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i16.c new file mode 100644 index 0000000000..eced9242c6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i16.c @@ -0,0 +1,119 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) + +/* Allocates a block of memory with internal_malloc if the array needs + repacking. */ + +GFC_INTEGER_16 * +internal_pack_16 (gfc_array_i16 * source) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type ssize; + const GFC_INTEGER_16 *src; + GFC_INTEGER_16 * restrict dest; + GFC_INTEGER_16 *destptr; + int n; + int packed; + + /* TODO: Investigate how we can figure out if this is a temporary + since the stride=0 thing has been removed from the frontend. */ + + dim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + packed = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = source->dim[n].stride; + extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (extent[n] <= 0) + { + /* Do nothing. */ + packed = 1; + break; + } + + if (ssize != stride[n]) + packed = 0; + + ssize *= extent[n]; + } + + if (packed) + return source->data; + + /* Allocate storage for the destination. */ + destptr = (GFC_INTEGER_16 *)internal_malloc_size (ssize * sizeof (GFC_INTEGER_16)); + dest = destptr; + src = source->data; + stride0 = stride[0]; + + + while (src) + { + /* Copy the data. */ + *(dest++) = *src; + /* Advance to the next element. */ + src += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= stride[n] * extent[n]; + n++; + if (n == dim) + { + src = NULL; + break; + } + else + { + count[n]++; + src += stride[n]; + } + } + } + return destptr; +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i2.c new file mode 100644 index 0000000000..5cb89fc124 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i2.c @@ -0,0 +1,119 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) + +/* Allocates a block of memory with internal_malloc if the array needs + repacking. */ + +GFC_INTEGER_2 * +internal_pack_2 (gfc_array_i2 * source) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type ssize; + const GFC_INTEGER_2 *src; + GFC_INTEGER_2 * restrict dest; + GFC_INTEGER_2 *destptr; + int n; + int packed; + + /* TODO: Investigate how we can figure out if this is a temporary + since the stride=0 thing has been removed from the frontend. */ + + dim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + packed = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = source->dim[n].stride; + extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (extent[n] <= 0) + { + /* Do nothing. */ + packed = 1; + break; + } + + if (ssize != stride[n]) + packed = 0; + + ssize *= extent[n]; + } + + if (packed) + return source->data; + + /* Allocate storage for the destination. */ + destptr = (GFC_INTEGER_2 *)internal_malloc_size (ssize * sizeof (GFC_INTEGER_2)); + dest = destptr; + src = source->data; + stride0 = stride[0]; + + + while (src) + { + /* Copy the data. */ + *(dest++) = *src; + /* Advance to the next element. */ + src += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= stride[n] * extent[n]; + n++; + if (n == dim) + { + src = NULL; + break; + } + else + { + count[n]++; + src += stride[n]; + } + } + } + return destptr; +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i4.c new file mode 100644 index 0000000000..7b97b2061e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i4.c @@ -0,0 +1,119 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) + +/* Allocates a block of memory with internal_malloc if the array needs + repacking. */ + +GFC_INTEGER_4 * +internal_pack_4 (gfc_array_i4 * source) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type ssize; + const GFC_INTEGER_4 *src; + GFC_INTEGER_4 * restrict dest; + GFC_INTEGER_4 *destptr; + int n; + int packed; + + /* TODO: Investigate how we can figure out if this is a temporary + since the stride=0 thing has been removed from the frontend. */ + + dim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + packed = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = source->dim[n].stride; + extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (extent[n] <= 0) + { + /* Do nothing. */ + packed = 1; + break; + } + + if (ssize != stride[n]) + packed = 0; + + ssize *= extent[n]; + } + + if (packed) + return source->data; + + /* Allocate storage for the destination. */ + destptr = (GFC_INTEGER_4 *)internal_malloc_size (ssize * sizeof (GFC_INTEGER_4)); + dest = destptr; + src = source->data; + stride0 = stride[0]; + + + while (src) + { + /* Copy the data. */ + *(dest++) = *src; + /* Advance to the next element. */ + src += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= stride[n] * extent[n]; + n++; + if (n == dim) + { + src = NULL; + break; + } + else + { + count[n]++; + src += stride[n]; + } + } + } + return destptr; +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i8.c new file mode 100644 index 0000000000..2a8f6d72e2 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i8.c @@ -0,0 +1,119 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) + +/* Allocates a block of memory with internal_malloc if the array needs + repacking. */ + +GFC_INTEGER_8 * +internal_pack_8 (gfc_array_i8 * source) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type ssize; + const GFC_INTEGER_8 *src; + GFC_INTEGER_8 * restrict dest; + GFC_INTEGER_8 *destptr; + int n; + int packed; + + /* TODO: Investigate how we can figure out if this is a temporary + since the stride=0 thing has been removed from the frontend. */ + + dim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + packed = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = source->dim[n].stride; + extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (extent[n] <= 0) + { + /* Do nothing. */ + packed = 1; + break; + } + + if (ssize != stride[n]) + packed = 0; + + ssize *= extent[n]; + } + + if (packed) + return source->data; + + /* Allocate storage for the destination. */ + destptr = (GFC_INTEGER_8 *)internal_malloc_size (ssize * sizeof (GFC_INTEGER_8)); + dest = destptr; + src = source->data; + stride0 = stride[0]; + + + while (src) + { + /* Copy the data. */ + *(dest++) = *src; + /* Advance to the next element. */ + src += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= stride[n] * extent[n]; + n++; + if (n == dim) + { + src = NULL; + break; + } + else + { + count[n]++; + src += stride[n]; + } + } + } + return destptr; +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r10.c new file mode 100644 index 0000000000..1f283f3d0c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r10.c @@ -0,0 +1,119 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_10) + +/* Allocates a block of memory with internal_malloc if the array needs + repacking. */ + +GFC_REAL_10 * +internal_pack_r10 (gfc_array_r10 * source) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type ssize; + const GFC_REAL_10 *src; + GFC_REAL_10 * restrict dest; + GFC_REAL_10 *destptr; + int n; + int packed; + + /* TODO: Investigate how we can figure out if this is a temporary + since the stride=0 thing has been removed from the frontend. */ + + dim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + packed = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = source->dim[n].stride; + extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (extent[n] <= 0) + { + /* Do nothing. */ + packed = 1; + break; + } + + if (ssize != stride[n]) + packed = 0; + + ssize *= extent[n]; + } + + if (packed) + return source->data; + + /* Allocate storage for the destination. */ + destptr = (GFC_REAL_10 *)internal_malloc_size (ssize * sizeof (GFC_REAL_10)); + dest = destptr; + src = source->data; + stride0 = stride[0]; + + + while (src) + { + /* Copy the data. */ + *(dest++) = *src; + /* Advance to the next element. */ + src += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= stride[n] * extent[n]; + n++; + if (n == dim) + { + src = NULL; + break; + } + else + { + count[n]++; + src += stride[n]; + } + } + } + return destptr; +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r16.c new file mode 100644 index 0000000000..6c7c79e472 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r16.c @@ -0,0 +1,119 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_16) + +/* Allocates a block of memory with internal_malloc if the array needs + repacking. */ + +GFC_REAL_16 * +internal_pack_r16 (gfc_array_r16 * source) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type ssize; + const GFC_REAL_16 *src; + GFC_REAL_16 * restrict dest; + GFC_REAL_16 *destptr; + int n; + int packed; + + /* TODO: Investigate how we can figure out if this is a temporary + since the stride=0 thing has been removed from the frontend. */ + + dim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + packed = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = source->dim[n].stride; + extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (extent[n] <= 0) + { + /* Do nothing. */ + packed = 1; + break; + } + + if (ssize != stride[n]) + packed = 0; + + ssize *= extent[n]; + } + + if (packed) + return source->data; + + /* Allocate storage for the destination. */ + destptr = (GFC_REAL_16 *)internal_malloc_size (ssize * sizeof (GFC_REAL_16)); + dest = destptr; + src = source->data; + stride0 = stride[0]; + + + while (src) + { + /* Copy the data. */ + *(dest++) = *src; + /* Advance to the next element. */ + src += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= stride[n] * extent[n]; + n++; + if (n == dim) + { + src = NULL; + break; + } + else + { + count[n]++; + src += stride[n]; + } + } + } + return destptr; +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r4.c new file mode 100644 index 0000000000..372f087195 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r4.c @@ -0,0 +1,119 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_4) + +/* Allocates a block of memory with internal_malloc if the array needs + repacking. */ + +GFC_REAL_4 * +internal_pack_r4 (gfc_array_r4 * source) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type ssize; + const GFC_REAL_4 *src; + GFC_REAL_4 * restrict dest; + GFC_REAL_4 *destptr; + int n; + int packed; + + /* TODO: Investigate how we can figure out if this is a temporary + since the stride=0 thing has been removed from the frontend. */ + + dim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + packed = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = source->dim[n].stride; + extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (extent[n] <= 0) + { + /* Do nothing. */ + packed = 1; + break; + } + + if (ssize != stride[n]) + packed = 0; + + ssize *= extent[n]; + } + + if (packed) + return source->data; + + /* Allocate storage for the destination. */ + destptr = (GFC_REAL_4 *)internal_malloc_size (ssize * sizeof (GFC_REAL_4)); + dest = destptr; + src = source->data; + stride0 = stride[0]; + + + while (src) + { + /* Copy the data. */ + *(dest++) = *src; + /* Advance to the next element. */ + src += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= stride[n] * extent[n]; + n++; + if (n == dim) + { + src = NULL; + break; + } + else + { + count[n]++; + src += stride[n]; + } + } + } + return destptr; +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r8.c new file mode 100644 index 0000000000..09a25445f3 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r8.c @@ -0,0 +1,119 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_8) + +/* Allocates a block of memory with internal_malloc if the array needs + repacking. */ + +GFC_REAL_8 * +internal_pack_r8 (gfc_array_r8 * source) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type ssize; + const GFC_REAL_8 *src; + GFC_REAL_8 * restrict dest; + GFC_REAL_8 *destptr; + int n; + int packed; + + /* TODO: Investigate how we can figure out if this is a temporary + since the stride=0 thing has been removed from the frontend. */ + + dim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + packed = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = source->dim[n].stride; + extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (extent[n] <= 0) + { + /* Do nothing. */ + packed = 1; + break; + } + + if (ssize != stride[n]) + packed = 0; + + ssize *= extent[n]; + } + + if (packed) + return source->data; + + /* Allocate storage for the destination. */ + destptr = (GFC_REAL_8 *)internal_malloc_size (ssize * sizeof (GFC_REAL_8)); + dest = destptr; + src = source->data; + stride0 = stride[0]; + + + while (src) + { + /* Copy the data. */ + *(dest++) = *src; + /* Advance to the next element. */ + src += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= stride[n] * extent[n]; + n++; + if (n == dim) + { + src = NULL; + break; + } + else + { + count[n]++; + src += stride[n]; + } + } + } + return destptr; +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c10.c new file mode 100644 index 0000000000..46ce8d446f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c10.c @@ -0,0 +1,107 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_10) + +void +internal_unpack_c10 (gfc_array_c10 * d, const GFC_COMPLEX_10 * src) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type dsize; + GFC_COMPLEX_10 * restrict dest; + int n; + + dest = d->data; + if (src == dest || !src) + return; + + dim = GFC_DESCRIPTOR_RANK (d); + dsize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = d->dim[n].stride; + extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound; + if (extent[n] <= 0) + return; + + if (dsize == stride[n]) + dsize *= extent[n]; + else + dsize = 0; + } + + if (dsize != 0) + { + memcpy (dest, src, dsize * sizeof (GFC_COMPLEX_10)); + return; + } + + stride0 = stride[0]; + + while (dest) + { + /* Copy the data. */ + *dest = *(src++); + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c16.c new file mode 100644 index 0000000000..1b783bd725 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c16.c @@ -0,0 +1,107 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_16) + +void +internal_unpack_c16 (gfc_array_c16 * d, const GFC_COMPLEX_16 * src) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type dsize; + GFC_COMPLEX_16 * restrict dest; + int n; + + dest = d->data; + if (src == dest || !src) + return; + + dim = GFC_DESCRIPTOR_RANK (d); + dsize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = d->dim[n].stride; + extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound; + if (extent[n] <= 0) + return; + + if (dsize == stride[n]) + dsize *= extent[n]; + else + dsize = 0; + } + + if (dsize != 0) + { + memcpy (dest, src, dsize * sizeof (GFC_COMPLEX_16)); + return; + } + + stride0 = stride[0]; + + while (dest) + { + /* Copy the data. */ + *dest = *(src++); + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c4.c new file mode 100644 index 0000000000..fcf2abb7b7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c4.c @@ -0,0 +1,107 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_4) + +void +internal_unpack_c4 (gfc_array_c4 * d, const GFC_COMPLEX_4 * src) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type dsize; + GFC_COMPLEX_4 * restrict dest; + int n; + + dest = d->data; + if (src == dest || !src) + return; + + dim = GFC_DESCRIPTOR_RANK (d); + dsize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = d->dim[n].stride; + extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound; + if (extent[n] <= 0) + return; + + if (dsize == stride[n]) + dsize *= extent[n]; + else + dsize = 0; + } + + if (dsize != 0) + { + memcpy (dest, src, dsize * sizeof (GFC_COMPLEX_4)); + return; + } + + stride0 = stride[0]; + + while (dest) + { + /* Copy the data. */ + *dest = *(src++); + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c8.c new file mode 100644 index 0000000000..994b234a80 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c8.c @@ -0,0 +1,107 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_8) + +void +internal_unpack_c8 (gfc_array_c8 * d, const GFC_COMPLEX_8 * src) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type dsize; + GFC_COMPLEX_8 * restrict dest; + int n; + + dest = d->data; + if (src == dest || !src) + return; + + dim = GFC_DESCRIPTOR_RANK (d); + dsize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = d->dim[n].stride; + extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound; + if (extent[n] <= 0) + return; + + if (dsize == stride[n]) + dsize *= extent[n]; + else + dsize = 0; + } + + if (dsize != 0) + { + memcpy (dest, src, dsize * sizeof (GFC_COMPLEX_8)); + return; + } + + stride0 = stride[0]; + + while (dest) + { + /* Copy the data. */ + *dest = *(src++); + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i1.c new file mode 100644 index 0000000000..323b6847a8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i1.c @@ -0,0 +1,107 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) + +void +internal_unpack_1 (gfc_array_i1 * d, const GFC_INTEGER_1 * src) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type dsize; + GFC_INTEGER_1 * restrict dest; + int n; + + dest = d->data; + if (src == dest || !src) + return; + + dim = GFC_DESCRIPTOR_RANK (d); + dsize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = d->dim[n].stride; + extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound; + if (extent[n] <= 0) + return; + + if (dsize == stride[n]) + dsize *= extent[n]; + else + dsize = 0; + } + + if (dsize != 0) + { + memcpy (dest, src, dsize * sizeof (GFC_INTEGER_1)); + return; + } + + stride0 = stride[0]; + + while (dest) + { + /* Copy the data. */ + *dest = *(src++); + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i16.c new file mode 100644 index 0000000000..04b2248876 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i16.c @@ -0,0 +1,107 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) + +void +internal_unpack_16 (gfc_array_i16 * d, const GFC_INTEGER_16 * src) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type dsize; + GFC_INTEGER_16 * restrict dest; + int n; + + dest = d->data; + if (src == dest || !src) + return; + + dim = GFC_DESCRIPTOR_RANK (d); + dsize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = d->dim[n].stride; + extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound; + if (extent[n] <= 0) + return; + + if (dsize == stride[n]) + dsize *= extent[n]; + else + dsize = 0; + } + + if (dsize != 0) + { + memcpy (dest, src, dsize * sizeof (GFC_INTEGER_16)); + return; + } + + stride0 = stride[0]; + + while (dest) + { + /* Copy the data. */ + *dest = *(src++); + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i2.c new file mode 100644 index 0000000000..cdcd9eaa22 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i2.c @@ -0,0 +1,107 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) + +void +internal_unpack_2 (gfc_array_i2 * d, const GFC_INTEGER_2 * src) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type dsize; + GFC_INTEGER_2 * restrict dest; + int n; + + dest = d->data; + if (src == dest || !src) + return; + + dim = GFC_DESCRIPTOR_RANK (d); + dsize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = d->dim[n].stride; + extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound; + if (extent[n] <= 0) + return; + + if (dsize == stride[n]) + dsize *= extent[n]; + else + dsize = 0; + } + + if (dsize != 0) + { + memcpy (dest, src, dsize * sizeof (GFC_INTEGER_2)); + return; + } + + stride0 = stride[0]; + + while (dest) + { + /* Copy the data. */ + *dest = *(src++); + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i4.c new file mode 100644 index 0000000000..837e35c146 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i4.c @@ -0,0 +1,107 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) + +void +internal_unpack_4 (gfc_array_i4 * d, const GFC_INTEGER_4 * src) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type dsize; + GFC_INTEGER_4 * restrict dest; + int n; + + dest = d->data; + if (src == dest || !src) + return; + + dim = GFC_DESCRIPTOR_RANK (d); + dsize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = d->dim[n].stride; + extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound; + if (extent[n] <= 0) + return; + + if (dsize == stride[n]) + dsize *= extent[n]; + else + dsize = 0; + } + + if (dsize != 0) + { + memcpy (dest, src, dsize * sizeof (GFC_INTEGER_4)); + return; + } + + stride0 = stride[0]; + + while (dest) + { + /* Copy the data. */ + *dest = *(src++); + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i8.c new file mode 100644 index 0000000000..7ea8b94c70 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i8.c @@ -0,0 +1,107 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) + +void +internal_unpack_8 (gfc_array_i8 * d, const GFC_INTEGER_8 * src) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type dsize; + GFC_INTEGER_8 * restrict dest; + int n; + + dest = d->data; + if (src == dest || !src) + return; + + dim = GFC_DESCRIPTOR_RANK (d); + dsize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = d->dim[n].stride; + extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound; + if (extent[n] <= 0) + return; + + if (dsize == stride[n]) + dsize *= extent[n]; + else + dsize = 0; + } + + if (dsize != 0) + { + memcpy (dest, src, dsize * sizeof (GFC_INTEGER_8)); + return; + } + + stride0 = stride[0]; + + while (dest) + { + /* Copy the data. */ + *dest = *(src++); + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r10.c new file mode 100644 index 0000000000..15c46b2d07 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r10.c @@ -0,0 +1,107 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) + +void +internal_unpack_r10 (gfc_array_r10 * d, const GFC_REAL_10 * src) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type dsize; + GFC_REAL_10 * restrict dest; + int n; + + dest = d->data; + if (src == dest || !src) + return; + + dim = GFC_DESCRIPTOR_RANK (d); + dsize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = d->dim[n].stride; + extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound; + if (extent[n] <= 0) + return; + + if (dsize == stride[n]) + dsize *= extent[n]; + else + dsize = 0; + } + + if (dsize != 0) + { + memcpy (dest, src, dsize * sizeof (GFC_REAL_10)); + return; + } + + stride0 = stride[0]; + + while (dest) + { + /* Copy the data. */ + *dest = *(src++); + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r16.c new file mode 100644 index 0000000000..af61dfe8e2 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r16.c @@ -0,0 +1,107 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) + +void +internal_unpack_r16 (gfc_array_r16 * d, const GFC_REAL_16 * src) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type dsize; + GFC_REAL_16 * restrict dest; + int n; + + dest = d->data; + if (src == dest || !src) + return; + + dim = GFC_DESCRIPTOR_RANK (d); + dsize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = d->dim[n].stride; + extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound; + if (extent[n] <= 0) + return; + + if (dsize == stride[n]) + dsize *= extent[n]; + else + dsize = 0; + } + + if (dsize != 0) + { + memcpy (dest, src, dsize * sizeof (GFC_REAL_16)); + return; + } + + stride0 = stride[0]; + + while (dest) + { + /* Copy the data. */ + *dest = *(src++); + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r4.c new file mode 100644 index 0000000000..abf8aea698 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r4.c @@ -0,0 +1,107 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) + +void +internal_unpack_r4 (gfc_array_r4 * d, const GFC_REAL_4 * src) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type dsize; + GFC_REAL_4 * restrict dest; + int n; + + dest = d->data; + if (src == dest || !src) + return; + + dim = GFC_DESCRIPTOR_RANK (d); + dsize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = d->dim[n].stride; + extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound; + if (extent[n] <= 0) + return; + + if (dsize == stride[n]) + dsize *= extent[n]; + else + dsize = 0; + } + + if (dsize != 0) + { + memcpy (dest, src, dsize * sizeof (GFC_REAL_4)); + return; + } + + stride0 = stride[0]; + + while (dest) + { + /* Copy the data. */ + *dest = *(src++); + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r8.c new file mode 100644 index 0000000000..bba3fc6e81 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r8.c @@ -0,0 +1,107 @@ +/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) + +void +internal_unpack_r8 (gfc_array_r8 * d, const GFC_REAL_8 * src) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type dsize; + GFC_REAL_8 * restrict dest; + int n; + + dest = d->data; + if (src == dest || !src) + return; + + dim = GFC_DESCRIPTOR_RANK (d); + dsize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = d->dim[n].stride; + extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound; + if (extent[n] <= 0) + return; + + if (dsize == stride[n]) + dsize *= extent[n]; + else + dsize = 0; + } + + if (dsize != 0) + { + memcpy (dest, src, dsize * sizeof (GFC_REAL_8)); + return; + } + + stride0 = stride[0]; + + while (dest) + { + /* Copy the data. */ + *dest = *(src++); + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c10.c new file mode 100644 index 0000000000..7d4e47061e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c10.c @@ -0,0 +1,379 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_10) + +/* Prototype for the BLAS ?gemm subroutine, a pointer to which can be + passed to us by the front-end, in which case we'll call it for large + matrices. */ + +typedef void (*blas_call)(const char *, const char *, const int *, const int *, + const int *, const GFC_COMPLEX_10 *, const GFC_COMPLEX_10 *, + const int *, const GFC_COMPLEX_10 *, const int *, + const GFC_COMPLEX_10 *, GFC_COMPLEX_10 *, const int *, + int, int); + +/* The order of loops is different in the case of plain matrix + multiplication C=MATMUL(A,B), and in the frequent special case where + the argument A is the temporary result of a TRANSPOSE intrinsic: + C=MATMUL(TRANSPOSE(A),B). Transposed temporaries are detected by + looking at their strides. + + The equivalent Fortran pseudo-code is: + + DIMENSION A(M,COUNT), B(COUNT,N), C(M,N) + IF (.NOT.IS_TRANSPOSED(A)) THEN + C = 0 + DO J=1,N + DO K=1,COUNT + DO I=1,M + C(I,J) = C(I,J)+A(I,K)*B(K,J) + ELSE + DO J=1,N + DO I=1,M + S = 0 + DO K=1,COUNT + S = S+A(I,K)*B(K,J) + C(I,J) = S + ENDIF +*/ + +/* If try_blas is set to a nonzero value, then the matmul function will + see if there is a way to perform the matrix multiplication by a call + to the BLAS gemm function. */ + +extern void matmul_c10 (gfc_array_c10 * const restrict retarray, + gfc_array_c10 * const restrict a, gfc_array_c10 * const restrict b, int try_blas, + int blas_limit, blas_call gemm); +export_proto(matmul_c10); + +void +matmul_c10 (gfc_array_c10 * const restrict retarray, + gfc_array_c10 * const restrict a, gfc_array_c10 * const restrict b, int try_blas, + int blas_limit, blas_call gemm) +{ + const GFC_COMPLEX_10 * restrict abase; + const GFC_COMPLEX_10 * restrict bbase; + GFC_COMPLEX_10 * restrict dest; + + index_type rxstride, rystride, axstride, aystride, bxstride, bystride; + index_type x, y, n, count, xcount, ycount; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + +/* C[xcount,ycount] = A[xcount, count] * B[count,ycount] + + Either A or B (but not both) can be rank 1: + + o One-dimensional argument A is implicitly treated as a row matrix + dimensioned [1,count], so xcount=1. + + o One-dimensional argument B is implicitly treated as a column matrix + dimensioned [count, 1], so ycount=1. + */ + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_COMPLEX_10) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + /* One-dimensional result may be addressed in the code below + either as a row or a column matrix. We want both cases to + work. */ + rxstride = rystride = retarray->dim[0].stride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + /* Treat it as a a row matrix A[1,count]. */ + axstride = a->dim[0].stride; + aystride = 1; + + xcount = 1; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + else + { + axstride = a->dim[0].stride; + aystride = a->dim[1].stride; + + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + + if (count != b->dim[0].ubound + 1 - b->dim[0].lbound) + { + if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0) + runtime_error ("dimension of array B incorrect in MATMUL intrinsic"); + } + + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + /* Treat it as a column matrix B[count,1] */ + bxstride = b->dim[0].stride; + + /* bystride should never be used for 1-dimensional b. + in case it is we want it to cause a segfault, rather than + an incorrect result. */ + bystride = 0xDEADBEEF; + ycount = 1; + } + else + { + bxstride = b->dim[0].stride; + bystride = b->dim[1].stride; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + abase = a->data; + bbase = b->data; + dest = retarray->data; + + + /* Now that everything is set up, we're performing the multiplication + itself. */ + +#define POW3(x) (((float) (x)) * ((float) (x)) * ((float) (x))) + + if (try_blas && rxstride == 1 && (axstride == 1 || aystride == 1) + && (bxstride == 1 || bystride == 1) + && (((float) xcount) * ((float) ycount) * ((float) count) + > POW3(blas_limit))) + { + const int m = xcount, n = ycount, k = count, ldc = rystride; + const GFC_COMPLEX_10 one = 1, zero = 0; + const int lda = (axstride == 1) ? aystride : axstride, + ldb = (bxstride == 1) ? bystride : bxstride; + + if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1) + { + assert (gemm != NULL); + gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m, &n, &k, + &one, abase, &lda, bbase, &ldb, &zero, dest, &ldc, 1, 1); + return; + } + } + + if (rxstride == 1 && axstride == 1 && bxstride == 1) + { + const GFC_COMPLEX_10 * restrict bbase_y; + GFC_COMPLEX_10 * restrict dest_y; + const GFC_COMPLEX_10 * restrict abase_n; + GFC_COMPLEX_10 bbase_yn; + + if (rystride == xcount) + memset (dest, 0, (sizeof (GFC_COMPLEX_10) * xcount * ycount)); + else + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x + y*rystride] = (GFC_COMPLEX_10)0; + } + + for (y = 0; y < ycount; y++) + { + bbase_y = bbase + y*bystride; + dest_y = dest + y*rystride; + for (n = 0; n < count; n++) + { + abase_n = abase + n*aystride; + bbase_yn = bbase_y[n]; + for (x = 0; x < xcount; x++) + { + dest_y[x] += abase_n[x] * bbase_yn; + } + } + } + } + else if (rxstride == 1 && aystride == 1 && bxstride == 1) + { + if (GFC_DESCRIPTOR_RANK (a) != 1) + { + const GFC_COMPLEX_10 *restrict abase_x; + const GFC_COMPLEX_10 *restrict bbase_y; + GFC_COMPLEX_10 *restrict dest_y; + GFC_COMPLEX_10 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_COMPLEX_10) 0; + for (n = 0; n < count; n++) + s += abase_x[n] * bbase_y[n]; + dest_y[x] = s; + } + } + } + else + { + const GFC_COMPLEX_10 *restrict bbase_y; + GFC_COMPLEX_10 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_COMPLEX_10) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n]; + dest[y*rystride] = s; + } + } + } + else if (axstride < aystride) + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x*rxstride + y*rystride] = (GFC_COMPLEX_10)0; + + for (y = 0; y < ycount; y++) + for (n = 0; n < count; n++) + for (x = 0; x < xcount; x++) + /* dest[x,y] += a[x,n] * b[n,y] */ + dest[x*rxstride + y*rystride] += abase[x*axstride + n*aystride] * bbase[n*bxstride + y*bystride]; + } + else if (GFC_DESCRIPTOR_RANK (a) == 1) + { + const GFC_COMPLEX_10 *restrict bbase_y; + GFC_COMPLEX_10 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_COMPLEX_10) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n*bxstride]; + dest[y*rxstride] = s; + } + } + else + { + const GFC_COMPLEX_10 *restrict abase_x; + const GFC_COMPLEX_10 *restrict bbase_y; + GFC_COMPLEX_10 *restrict dest_y; + GFC_COMPLEX_10 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_COMPLEX_10) 0; + for (n = 0; n < count; n++) + s += abase_x[n*aystride] * bbase_y[n*bxstride]; + dest_y[x*rxstride] = s; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c16.c new file mode 100644 index 0000000000..4665bcc953 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c16.c @@ -0,0 +1,379 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_16) + +/* Prototype for the BLAS ?gemm subroutine, a pointer to which can be + passed to us by the front-end, in which case we'll call it for large + matrices. */ + +typedef void (*blas_call)(const char *, const char *, const int *, const int *, + const int *, const GFC_COMPLEX_16 *, const GFC_COMPLEX_16 *, + const int *, const GFC_COMPLEX_16 *, const int *, + const GFC_COMPLEX_16 *, GFC_COMPLEX_16 *, const int *, + int, int); + +/* The order of loops is different in the case of plain matrix + multiplication C=MATMUL(A,B), and in the frequent special case where + the argument A is the temporary result of a TRANSPOSE intrinsic: + C=MATMUL(TRANSPOSE(A),B). Transposed temporaries are detected by + looking at their strides. + + The equivalent Fortran pseudo-code is: + + DIMENSION A(M,COUNT), B(COUNT,N), C(M,N) + IF (.NOT.IS_TRANSPOSED(A)) THEN + C = 0 + DO J=1,N + DO K=1,COUNT + DO I=1,M + C(I,J) = C(I,J)+A(I,K)*B(K,J) + ELSE + DO J=1,N + DO I=1,M + S = 0 + DO K=1,COUNT + S = S+A(I,K)*B(K,J) + C(I,J) = S + ENDIF +*/ + +/* If try_blas is set to a nonzero value, then the matmul function will + see if there is a way to perform the matrix multiplication by a call + to the BLAS gemm function. */ + +extern void matmul_c16 (gfc_array_c16 * const restrict retarray, + gfc_array_c16 * const restrict a, gfc_array_c16 * const restrict b, int try_blas, + int blas_limit, blas_call gemm); +export_proto(matmul_c16); + +void +matmul_c16 (gfc_array_c16 * const restrict retarray, + gfc_array_c16 * const restrict a, gfc_array_c16 * const restrict b, int try_blas, + int blas_limit, blas_call gemm) +{ + const GFC_COMPLEX_16 * restrict abase; + const GFC_COMPLEX_16 * restrict bbase; + GFC_COMPLEX_16 * restrict dest; + + index_type rxstride, rystride, axstride, aystride, bxstride, bystride; + index_type x, y, n, count, xcount, ycount; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + +/* C[xcount,ycount] = A[xcount, count] * B[count,ycount] + + Either A or B (but not both) can be rank 1: + + o One-dimensional argument A is implicitly treated as a row matrix + dimensioned [1,count], so xcount=1. + + o One-dimensional argument B is implicitly treated as a column matrix + dimensioned [count, 1], so ycount=1. + */ + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_COMPLEX_16) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + /* One-dimensional result may be addressed in the code below + either as a row or a column matrix. We want both cases to + work. */ + rxstride = rystride = retarray->dim[0].stride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + /* Treat it as a a row matrix A[1,count]. */ + axstride = a->dim[0].stride; + aystride = 1; + + xcount = 1; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + else + { + axstride = a->dim[0].stride; + aystride = a->dim[1].stride; + + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + + if (count != b->dim[0].ubound + 1 - b->dim[0].lbound) + { + if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0) + runtime_error ("dimension of array B incorrect in MATMUL intrinsic"); + } + + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + /* Treat it as a column matrix B[count,1] */ + bxstride = b->dim[0].stride; + + /* bystride should never be used for 1-dimensional b. + in case it is we want it to cause a segfault, rather than + an incorrect result. */ + bystride = 0xDEADBEEF; + ycount = 1; + } + else + { + bxstride = b->dim[0].stride; + bystride = b->dim[1].stride; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + abase = a->data; + bbase = b->data; + dest = retarray->data; + + + /* Now that everything is set up, we're performing the multiplication + itself. */ + +#define POW3(x) (((float) (x)) * ((float) (x)) * ((float) (x))) + + if (try_blas && rxstride == 1 && (axstride == 1 || aystride == 1) + && (bxstride == 1 || bystride == 1) + && (((float) xcount) * ((float) ycount) * ((float) count) + > POW3(blas_limit))) + { + const int m = xcount, n = ycount, k = count, ldc = rystride; + const GFC_COMPLEX_16 one = 1, zero = 0; + const int lda = (axstride == 1) ? aystride : axstride, + ldb = (bxstride == 1) ? bystride : bxstride; + + if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1) + { + assert (gemm != NULL); + gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m, &n, &k, + &one, abase, &lda, bbase, &ldb, &zero, dest, &ldc, 1, 1); + return; + } + } + + if (rxstride == 1 && axstride == 1 && bxstride == 1) + { + const GFC_COMPLEX_16 * restrict bbase_y; + GFC_COMPLEX_16 * restrict dest_y; + const GFC_COMPLEX_16 * restrict abase_n; + GFC_COMPLEX_16 bbase_yn; + + if (rystride == xcount) + memset (dest, 0, (sizeof (GFC_COMPLEX_16) * xcount * ycount)); + else + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x + y*rystride] = (GFC_COMPLEX_16)0; + } + + for (y = 0; y < ycount; y++) + { + bbase_y = bbase + y*bystride; + dest_y = dest + y*rystride; + for (n = 0; n < count; n++) + { + abase_n = abase + n*aystride; + bbase_yn = bbase_y[n]; + for (x = 0; x < xcount; x++) + { + dest_y[x] += abase_n[x] * bbase_yn; + } + } + } + } + else if (rxstride == 1 && aystride == 1 && bxstride == 1) + { + if (GFC_DESCRIPTOR_RANK (a) != 1) + { + const GFC_COMPLEX_16 *restrict abase_x; + const GFC_COMPLEX_16 *restrict bbase_y; + GFC_COMPLEX_16 *restrict dest_y; + GFC_COMPLEX_16 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_COMPLEX_16) 0; + for (n = 0; n < count; n++) + s += abase_x[n] * bbase_y[n]; + dest_y[x] = s; + } + } + } + else + { + const GFC_COMPLEX_16 *restrict bbase_y; + GFC_COMPLEX_16 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_COMPLEX_16) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n]; + dest[y*rystride] = s; + } + } + } + else if (axstride < aystride) + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x*rxstride + y*rystride] = (GFC_COMPLEX_16)0; + + for (y = 0; y < ycount; y++) + for (n = 0; n < count; n++) + for (x = 0; x < xcount; x++) + /* dest[x,y] += a[x,n] * b[n,y] */ + dest[x*rxstride + y*rystride] += abase[x*axstride + n*aystride] * bbase[n*bxstride + y*bystride]; + } + else if (GFC_DESCRIPTOR_RANK (a) == 1) + { + const GFC_COMPLEX_16 *restrict bbase_y; + GFC_COMPLEX_16 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_COMPLEX_16) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n*bxstride]; + dest[y*rxstride] = s; + } + } + else + { + const GFC_COMPLEX_16 *restrict abase_x; + const GFC_COMPLEX_16 *restrict bbase_y; + GFC_COMPLEX_16 *restrict dest_y; + GFC_COMPLEX_16 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_COMPLEX_16) 0; + for (n = 0; n < count; n++) + s += abase_x[n*aystride] * bbase_y[n*bxstride]; + dest_y[x*rxstride] = s; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c4.c new file mode 100644 index 0000000000..6c7c723f7f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c4.c @@ -0,0 +1,379 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_4) + +/* Prototype for the BLAS ?gemm subroutine, a pointer to which can be + passed to us by the front-end, in which case we'll call it for large + matrices. */ + +typedef void (*blas_call)(const char *, const char *, const int *, const int *, + const int *, const GFC_COMPLEX_4 *, const GFC_COMPLEX_4 *, + const int *, const GFC_COMPLEX_4 *, const int *, + const GFC_COMPLEX_4 *, GFC_COMPLEX_4 *, const int *, + int, int); + +/* The order of loops is different in the case of plain matrix + multiplication C=MATMUL(A,B), and in the frequent special case where + the argument A is the temporary result of a TRANSPOSE intrinsic: + C=MATMUL(TRANSPOSE(A),B). Transposed temporaries are detected by + looking at their strides. + + The equivalent Fortran pseudo-code is: + + DIMENSION A(M,COUNT), B(COUNT,N), C(M,N) + IF (.NOT.IS_TRANSPOSED(A)) THEN + C = 0 + DO J=1,N + DO K=1,COUNT + DO I=1,M + C(I,J) = C(I,J)+A(I,K)*B(K,J) + ELSE + DO J=1,N + DO I=1,M + S = 0 + DO K=1,COUNT + S = S+A(I,K)*B(K,J) + C(I,J) = S + ENDIF +*/ + +/* If try_blas is set to a nonzero value, then the matmul function will + see if there is a way to perform the matrix multiplication by a call + to the BLAS gemm function. */ + +extern void matmul_c4 (gfc_array_c4 * const restrict retarray, + gfc_array_c4 * const restrict a, gfc_array_c4 * const restrict b, int try_blas, + int blas_limit, blas_call gemm); +export_proto(matmul_c4); + +void +matmul_c4 (gfc_array_c4 * const restrict retarray, + gfc_array_c4 * const restrict a, gfc_array_c4 * const restrict b, int try_blas, + int blas_limit, blas_call gemm) +{ + const GFC_COMPLEX_4 * restrict abase; + const GFC_COMPLEX_4 * restrict bbase; + GFC_COMPLEX_4 * restrict dest; + + index_type rxstride, rystride, axstride, aystride, bxstride, bystride; + index_type x, y, n, count, xcount, ycount; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + +/* C[xcount,ycount] = A[xcount, count] * B[count,ycount] + + Either A or B (but not both) can be rank 1: + + o One-dimensional argument A is implicitly treated as a row matrix + dimensioned [1,count], so xcount=1. + + o One-dimensional argument B is implicitly treated as a column matrix + dimensioned [count, 1], so ycount=1. + */ + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_COMPLEX_4) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + /* One-dimensional result may be addressed in the code below + either as a row or a column matrix. We want both cases to + work. */ + rxstride = rystride = retarray->dim[0].stride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + /* Treat it as a a row matrix A[1,count]. */ + axstride = a->dim[0].stride; + aystride = 1; + + xcount = 1; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + else + { + axstride = a->dim[0].stride; + aystride = a->dim[1].stride; + + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + + if (count != b->dim[0].ubound + 1 - b->dim[0].lbound) + { + if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0) + runtime_error ("dimension of array B incorrect in MATMUL intrinsic"); + } + + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + /* Treat it as a column matrix B[count,1] */ + bxstride = b->dim[0].stride; + + /* bystride should never be used for 1-dimensional b. + in case it is we want it to cause a segfault, rather than + an incorrect result. */ + bystride = 0xDEADBEEF; + ycount = 1; + } + else + { + bxstride = b->dim[0].stride; + bystride = b->dim[1].stride; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + abase = a->data; + bbase = b->data; + dest = retarray->data; + + + /* Now that everything is set up, we're performing the multiplication + itself. */ + +#define POW3(x) (((float) (x)) * ((float) (x)) * ((float) (x))) + + if (try_blas && rxstride == 1 && (axstride == 1 || aystride == 1) + && (bxstride == 1 || bystride == 1) + && (((float) xcount) * ((float) ycount) * ((float) count) + > POW3(blas_limit))) + { + const int m = xcount, n = ycount, k = count, ldc = rystride; + const GFC_COMPLEX_4 one = 1, zero = 0; + const int lda = (axstride == 1) ? aystride : axstride, + ldb = (bxstride == 1) ? bystride : bxstride; + + if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1) + { + assert (gemm != NULL); + gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m, &n, &k, + &one, abase, &lda, bbase, &ldb, &zero, dest, &ldc, 1, 1); + return; + } + } + + if (rxstride == 1 && axstride == 1 && bxstride == 1) + { + const GFC_COMPLEX_4 * restrict bbase_y; + GFC_COMPLEX_4 * restrict dest_y; + const GFC_COMPLEX_4 * restrict abase_n; + GFC_COMPLEX_4 bbase_yn; + + if (rystride == xcount) + memset (dest, 0, (sizeof (GFC_COMPLEX_4) * xcount * ycount)); + else + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x + y*rystride] = (GFC_COMPLEX_4)0; + } + + for (y = 0; y < ycount; y++) + { + bbase_y = bbase + y*bystride; + dest_y = dest + y*rystride; + for (n = 0; n < count; n++) + { + abase_n = abase + n*aystride; + bbase_yn = bbase_y[n]; + for (x = 0; x < xcount; x++) + { + dest_y[x] += abase_n[x] * bbase_yn; + } + } + } + } + else if (rxstride == 1 && aystride == 1 && bxstride == 1) + { + if (GFC_DESCRIPTOR_RANK (a) != 1) + { + const GFC_COMPLEX_4 *restrict abase_x; + const GFC_COMPLEX_4 *restrict bbase_y; + GFC_COMPLEX_4 *restrict dest_y; + GFC_COMPLEX_4 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_COMPLEX_4) 0; + for (n = 0; n < count; n++) + s += abase_x[n] * bbase_y[n]; + dest_y[x] = s; + } + } + } + else + { + const GFC_COMPLEX_4 *restrict bbase_y; + GFC_COMPLEX_4 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_COMPLEX_4) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n]; + dest[y*rystride] = s; + } + } + } + else if (axstride < aystride) + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x*rxstride + y*rystride] = (GFC_COMPLEX_4)0; + + for (y = 0; y < ycount; y++) + for (n = 0; n < count; n++) + for (x = 0; x < xcount; x++) + /* dest[x,y] += a[x,n] * b[n,y] */ + dest[x*rxstride + y*rystride] += abase[x*axstride + n*aystride] * bbase[n*bxstride + y*bystride]; + } + else if (GFC_DESCRIPTOR_RANK (a) == 1) + { + const GFC_COMPLEX_4 *restrict bbase_y; + GFC_COMPLEX_4 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_COMPLEX_4) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n*bxstride]; + dest[y*rxstride] = s; + } + } + else + { + const GFC_COMPLEX_4 *restrict abase_x; + const GFC_COMPLEX_4 *restrict bbase_y; + GFC_COMPLEX_4 *restrict dest_y; + GFC_COMPLEX_4 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_COMPLEX_4) 0; + for (n = 0; n < count; n++) + s += abase_x[n*aystride] * bbase_y[n*bxstride]; + dest_y[x*rxstride] = s; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c8.c new file mode 100644 index 0000000000..cf1142ba06 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c8.c @@ -0,0 +1,379 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_8) + +/* Prototype for the BLAS ?gemm subroutine, a pointer to which can be + passed to us by the front-end, in which case we'll call it for large + matrices. */ + +typedef void (*blas_call)(const char *, const char *, const int *, const int *, + const int *, const GFC_COMPLEX_8 *, const GFC_COMPLEX_8 *, + const int *, const GFC_COMPLEX_8 *, const int *, + const GFC_COMPLEX_8 *, GFC_COMPLEX_8 *, const int *, + int, int); + +/* The order of loops is different in the case of plain matrix + multiplication C=MATMUL(A,B), and in the frequent special case where + the argument A is the temporary result of a TRANSPOSE intrinsic: + C=MATMUL(TRANSPOSE(A),B). Transposed temporaries are detected by + looking at their strides. + + The equivalent Fortran pseudo-code is: + + DIMENSION A(M,COUNT), B(COUNT,N), C(M,N) + IF (.NOT.IS_TRANSPOSED(A)) THEN + C = 0 + DO J=1,N + DO K=1,COUNT + DO I=1,M + C(I,J) = C(I,J)+A(I,K)*B(K,J) + ELSE + DO J=1,N + DO I=1,M + S = 0 + DO K=1,COUNT + S = S+A(I,K)*B(K,J) + C(I,J) = S + ENDIF +*/ + +/* If try_blas is set to a nonzero value, then the matmul function will + see if there is a way to perform the matrix multiplication by a call + to the BLAS gemm function. */ + +extern void matmul_c8 (gfc_array_c8 * const restrict retarray, + gfc_array_c8 * const restrict a, gfc_array_c8 * const restrict b, int try_blas, + int blas_limit, blas_call gemm); +export_proto(matmul_c8); + +void +matmul_c8 (gfc_array_c8 * const restrict retarray, + gfc_array_c8 * const restrict a, gfc_array_c8 * const restrict b, int try_blas, + int blas_limit, blas_call gemm) +{ + const GFC_COMPLEX_8 * restrict abase; + const GFC_COMPLEX_8 * restrict bbase; + GFC_COMPLEX_8 * restrict dest; + + index_type rxstride, rystride, axstride, aystride, bxstride, bystride; + index_type x, y, n, count, xcount, ycount; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + +/* C[xcount,ycount] = A[xcount, count] * B[count,ycount] + + Either A or B (but not both) can be rank 1: + + o One-dimensional argument A is implicitly treated as a row matrix + dimensioned [1,count], so xcount=1. + + o One-dimensional argument B is implicitly treated as a column matrix + dimensioned [count, 1], so ycount=1. + */ + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_COMPLEX_8) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + /* One-dimensional result may be addressed in the code below + either as a row or a column matrix. We want both cases to + work. */ + rxstride = rystride = retarray->dim[0].stride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + /* Treat it as a a row matrix A[1,count]. */ + axstride = a->dim[0].stride; + aystride = 1; + + xcount = 1; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + else + { + axstride = a->dim[0].stride; + aystride = a->dim[1].stride; + + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + + if (count != b->dim[0].ubound + 1 - b->dim[0].lbound) + { + if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0) + runtime_error ("dimension of array B incorrect in MATMUL intrinsic"); + } + + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + /* Treat it as a column matrix B[count,1] */ + bxstride = b->dim[0].stride; + + /* bystride should never be used for 1-dimensional b. + in case it is we want it to cause a segfault, rather than + an incorrect result. */ + bystride = 0xDEADBEEF; + ycount = 1; + } + else + { + bxstride = b->dim[0].stride; + bystride = b->dim[1].stride; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + abase = a->data; + bbase = b->data; + dest = retarray->data; + + + /* Now that everything is set up, we're performing the multiplication + itself. */ + +#define POW3(x) (((float) (x)) * ((float) (x)) * ((float) (x))) + + if (try_blas && rxstride == 1 && (axstride == 1 || aystride == 1) + && (bxstride == 1 || bystride == 1) + && (((float) xcount) * ((float) ycount) * ((float) count) + > POW3(blas_limit))) + { + const int m = xcount, n = ycount, k = count, ldc = rystride; + const GFC_COMPLEX_8 one = 1, zero = 0; + const int lda = (axstride == 1) ? aystride : axstride, + ldb = (bxstride == 1) ? bystride : bxstride; + + if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1) + { + assert (gemm != NULL); + gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m, &n, &k, + &one, abase, &lda, bbase, &ldb, &zero, dest, &ldc, 1, 1); + return; + } + } + + if (rxstride == 1 && axstride == 1 && bxstride == 1) + { + const GFC_COMPLEX_8 * restrict bbase_y; + GFC_COMPLEX_8 * restrict dest_y; + const GFC_COMPLEX_8 * restrict abase_n; + GFC_COMPLEX_8 bbase_yn; + + if (rystride == xcount) + memset (dest, 0, (sizeof (GFC_COMPLEX_8) * xcount * ycount)); + else + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x + y*rystride] = (GFC_COMPLEX_8)0; + } + + for (y = 0; y < ycount; y++) + { + bbase_y = bbase + y*bystride; + dest_y = dest + y*rystride; + for (n = 0; n < count; n++) + { + abase_n = abase + n*aystride; + bbase_yn = bbase_y[n]; + for (x = 0; x < xcount; x++) + { + dest_y[x] += abase_n[x] * bbase_yn; + } + } + } + } + else if (rxstride == 1 && aystride == 1 && bxstride == 1) + { + if (GFC_DESCRIPTOR_RANK (a) != 1) + { + const GFC_COMPLEX_8 *restrict abase_x; + const GFC_COMPLEX_8 *restrict bbase_y; + GFC_COMPLEX_8 *restrict dest_y; + GFC_COMPLEX_8 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_COMPLEX_8) 0; + for (n = 0; n < count; n++) + s += abase_x[n] * bbase_y[n]; + dest_y[x] = s; + } + } + } + else + { + const GFC_COMPLEX_8 *restrict bbase_y; + GFC_COMPLEX_8 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_COMPLEX_8) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n]; + dest[y*rystride] = s; + } + } + } + else if (axstride < aystride) + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x*rxstride + y*rystride] = (GFC_COMPLEX_8)0; + + for (y = 0; y < ycount; y++) + for (n = 0; n < count; n++) + for (x = 0; x < xcount; x++) + /* dest[x,y] += a[x,n] * b[n,y] */ + dest[x*rxstride + y*rystride] += abase[x*axstride + n*aystride] * bbase[n*bxstride + y*bystride]; + } + else if (GFC_DESCRIPTOR_RANK (a) == 1) + { + const GFC_COMPLEX_8 *restrict bbase_y; + GFC_COMPLEX_8 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_COMPLEX_8) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n*bxstride]; + dest[y*rxstride] = s; + } + } + else + { + const GFC_COMPLEX_8 *restrict abase_x; + const GFC_COMPLEX_8 *restrict bbase_y; + GFC_COMPLEX_8 *restrict dest_y; + GFC_COMPLEX_8 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_COMPLEX_8) 0; + for (n = 0; n < count; n++) + s += abase_x[n*aystride] * bbase_y[n*bxstride]; + dest_y[x*rxstride] = s; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i1.c new file mode 100644 index 0000000000..502676a42a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i1.c @@ -0,0 +1,379 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) + +/* Prototype for the BLAS ?gemm subroutine, a pointer to which can be + passed to us by the front-end, in which case we'll call it for large + matrices. */ + +typedef void (*blas_call)(const char *, const char *, const int *, const int *, + const int *, const GFC_INTEGER_1 *, const GFC_INTEGER_1 *, + const int *, const GFC_INTEGER_1 *, const int *, + const GFC_INTEGER_1 *, GFC_INTEGER_1 *, const int *, + int, int); + +/* The order of loops is different in the case of plain matrix + multiplication C=MATMUL(A,B), and in the frequent special case where + the argument A is the temporary result of a TRANSPOSE intrinsic: + C=MATMUL(TRANSPOSE(A),B). Transposed temporaries are detected by + looking at their strides. + + The equivalent Fortran pseudo-code is: + + DIMENSION A(M,COUNT), B(COUNT,N), C(M,N) + IF (.NOT.IS_TRANSPOSED(A)) THEN + C = 0 + DO J=1,N + DO K=1,COUNT + DO I=1,M + C(I,J) = C(I,J)+A(I,K)*B(K,J) + ELSE + DO J=1,N + DO I=1,M + S = 0 + DO K=1,COUNT + S = S+A(I,K)*B(K,J) + C(I,J) = S + ENDIF +*/ + +/* If try_blas is set to a nonzero value, then the matmul function will + see if there is a way to perform the matrix multiplication by a call + to the BLAS gemm function. */ + +extern void matmul_i1 (gfc_array_i1 * const restrict retarray, + gfc_array_i1 * const restrict a, gfc_array_i1 * const restrict b, int try_blas, + int blas_limit, blas_call gemm); +export_proto(matmul_i1); + +void +matmul_i1 (gfc_array_i1 * const restrict retarray, + gfc_array_i1 * const restrict a, gfc_array_i1 * const restrict b, int try_blas, + int blas_limit, blas_call gemm) +{ + const GFC_INTEGER_1 * restrict abase; + const GFC_INTEGER_1 * restrict bbase; + GFC_INTEGER_1 * restrict dest; + + index_type rxstride, rystride, axstride, aystride, bxstride, bystride; + index_type x, y, n, count, xcount, ycount; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + +/* C[xcount,ycount] = A[xcount, count] * B[count,ycount] + + Either A or B (but not both) can be rank 1: + + o One-dimensional argument A is implicitly treated as a row matrix + dimensioned [1,count], so xcount=1. + + o One-dimensional argument B is implicitly treated as a column matrix + dimensioned [count, 1], so ycount=1. + */ + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_INTEGER_1) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + /* One-dimensional result may be addressed in the code below + either as a row or a column matrix. We want both cases to + work. */ + rxstride = rystride = retarray->dim[0].stride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + /* Treat it as a a row matrix A[1,count]. */ + axstride = a->dim[0].stride; + aystride = 1; + + xcount = 1; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + else + { + axstride = a->dim[0].stride; + aystride = a->dim[1].stride; + + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + + if (count != b->dim[0].ubound + 1 - b->dim[0].lbound) + { + if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0) + runtime_error ("dimension of array B incorrect in MATMUL intrinsic"); + } + + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + /* Treat it as a column matrix B[count,1] */ + bxstride = b->dim[0].stride; + + /* bystride should never be used for 1-dimensional b. + in case it is we want it to cause a segfault, rather than + an incorrect result. */ + bystride = 0xDEADBEEF; + ycount = 1; + } + else + { + bxstride = b->dim[0].stride; + bystride = b->dim[1].stride; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + abase = a->data; + bbase = b->data; + dest = retarray->data; + + + /* Now that everything is set up, we're performing the multiplication + itself. */ + +#define POW3(x) (((float) (x)) * ((float) (x)) * ((float) (x))) + + if (try_blas && rxstride == 1 && (axstride == 1 || aystride == 1) + && (bxstride == 1 || bystride == 1) + && (((float) xcount) * ((float) ycount) * ((float) count) + > POW3(blas_limit))) + { + const int m = xcount, n = ycount, k = count, ldc = rystride; + const GFC_INTEGER_1 one = 1, zero = 0; + const int lda = (axstride == 1) ? aystride : axstride, + ldb = (bxstride == 1) ? bystride : bxstride; + + if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1) + { + assert (gemm != NULL); + gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m, &n, &k, + &one, abase, &lda, bbase, &ldb, &zero, dest, &ldc, 1, 1); + return; + } + } + + if (rxstride == 1 && axstride == 1 && bxstride == 1) + { + const GFC_INTEGER_1 * restrict bbase_y; + GFC_INTEGER_1 * restrict dest_y; + const GFC_INTEGER_1 * restrict abase_n; + GFC_INTEGER_1 bbase_yn; + + if (rystride == xcount) + memset (dest, 0, (sizeof (GFC_INTEGER_1) * xcount * ycount)); + else + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x + y*rystride] = (GFC_INTEGER_1)0; + } + + for (y = 0; y < ycount; y++) + { + bbase_y = bbase + y*bystride; + dest_y = dest + y*rystride; + for (n = 0; n < count; n++) + { + abase_n = abase + n*aystride; + bbase_yn = bbase_y[n]; + for (x = 0; x < xcount; x++) + { + dest_y[x] += abase_n[x] * bbase_yn; + } + } + } + } + else if (rxstride == 1 && aystride == 1 && bxstride == 1) + { + if (GFC_DESCRIPTOR_RANK (a) != 1) + { + const GFC_INTEGER_1 *restrict abase_x; + const GFC_INTEGER_1 *restrict bbase_y; + GFC_INTEGER_1 *restrict dest_y; + GFC_INTEGER_1 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_INTEGER_1) 0; + for (n = 0; n < count; n++) + s += abase_x[n] * bbase_y[n]; + dest_y[x] = s; + } + } + } + else + { + const GFC_INTEGER_1 *restrict bbase_y; + GFC_INTEGER_1 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_INTEGER_1) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n]; + dest[y*rystride] = s; + } + } + } + else if (axstride < aystride) + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x*rxstride + y*rystride] = (GFC_INTEGER_1)0; + + for (y = 0; y < ycount; y++) + for (n = 0; n < count; n++) + for (x = 0; x < xcount; x++) + /* dest[x,y] += a[x,n] * b[n,y] */ + dest[x*rxstride + y*rystride] += abase[x*axstride + n*aystride] * bbase[n*bxstride + y*bystride]; + } + else if (GFC_DESCRIPTOR_RANK (a) == 1) + { + const GFC_INTEGER_1 *restrict bbase_y; + GFC_INTEGER_1 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_INTEGER_1) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n*bxstride]; + dest[y*rxstride] = s; + } + } + else + { + const GFC_INTEGER_1 *restrict abase_x; + const GFC_INTEGER_1 *restrict bbase_y; + GFC_INTEGER_1 *restrict dest_y; + GFC_INTEGER_1 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_INTEGER_1) 0; + for (n = 0; n < count; n++) + s += abase_x[n*aystride] * bbase_y[n*bxstride]; + dest_y[x*rxstride] = s; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i16.c new file mode 100644 index 0000000000..5b2b05a794 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i16.c @@ -0,0 +1,379 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) + +/* Prototype for the BLAS ?gemm subroutine, a pointer to which can be + passed to us by the front-end, in which case we'll call it for large + matrices. */ + +typedef void (*blas_call)(const char *, const char *, const int *, const int *, + const int *, const GFC_INTEGER_16 *, const GFC_INTEGER_16 *, + const int *, const GFC_INTEGER_16 *, const int *, + const GFC_INTEGER_16 *, GFC_INTEGER_16 *, const int *, + int, int); + +/* The order of loops is different in the case of plain matrix + multiplication C=MATMUL(A,B), and in the frequent special case where + the argument A is the temporary result of a TRANSPOSE intrinsic: + C=MATMUL(TRANSPOSE(A),B). Transposed temporaries are detected by + looking at their strides. + + The equivalent Fortran pseudo-code is: + + DIMENSION A(M,COUNT), B(COUNT,N), C(M,N) + IF (.NOT.IS_TRANSPOSED(A)) THEN + C = 0 + DO J=1,N + DO K=1,COUNT + DO I=1,M + C(I,J) = C(I,J)+A(I,K)*B(K,J) + ELSE + DO J=1,N + DO I=1,M + S = 0 + DO K=1,COUNT + S = S+A(I,K)*B(K,J) + C(I,J) = S + ENDIF +*/ + +/* If try_blas is set to a nonzero value, then the matmul function will + see if there is a way to perform the matrix multiplication by a call + to the BLAS gemm function. */ + +extern void matmul_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict a, gfc_array_i16 * const restrict b, int try_blas, + int blas_limit, blas_call gemm); +export_proto(matmul_i16); + +void +matmul_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict a, gfc_array_i16 * const restrict b, int try_blas, + int blas_limit, blas_call gemm) +{ + const GFC_INTEGER_16 * restrict abase; + const GFC_INTEGER_16 * restrict bbase; + GFC_INTEGER_16 * restrict dest; + + index_type rxstride, rystride, axstride, aystride, bxstride, bystride; + index_type x, y, n, count, xcount, ycount; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + +/* C[xcount,ycount] = A[xcount, count] * B[count,ycount] + + Either A or B (but not both) can be rank 1: + + o One-dimensional argument A is implicitly treated as a row matrix + dimensioned [1,count], so xcount=1. + + o One-dimensional argument B is implicitly treated as a column matrix + dimensioned [count, 1], so ycount=1. + */ + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_INTEGER_16) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + /* One-dimensional result may be addressed in the code below + either as a row or a column matrix. We want both cases to + work. */ + rxstride = rystride = retarray->dim[0].stride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + /* Treat it as a a row matrix A[1,count]. */ + axstride = a->dim[0].stride; + aystride = 1; + + xcount = 1; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + else + { + axstride = a->dim[0].stride; + aystride = a->dim[1].stride; + + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + + if (count != b->dim[0].ubound + 1 - b->dim[0].lbound) + { + if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0) + runtime_error ("dimension of array B incorrect in MATMUL intrinsic"); + } + + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + /* Treat it as a column matrix B[count,1] */ + bxstride = b->dim[0].stride; + + /* bystride should never be used for 1-dimensional b. + in case it is we want it to cause a segfault, rather than + an incorrect result. */ + bystride = 0xDEADBEEF; + ycount = 1; + } + else + { + bxstride = b->dim[0].stride; + bystride = b->dim[1].stride; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + abase = a->data; + bbase = b->data; + dest = retarray->data; + + + /* Now that everything is set up, we're performing the multiplication + itself. */ + +#define POW3(x) (((float) (x)) * ((float) (x)) * ((float) (x))) + + if (try_blas && rxstride == 1 && (axstride == 1 || aystride == 1) + && (bxstride == 1 || bystride == 1) + && (((float) xcount) * ((float) ycount) * ((float) count) + > POW3(blas_limit))) + { + const int m = xcount, n = ycount, k = count, ldc = rystride; + const GFC_INTEGER_16 one = 1, zero = 0; + const int lda = (axstride == 1) ? aystride : axstride, + ldb = (bxstride == 1) ? bystride : bxstride; + + if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1) + { + assert (gemm != NULL); + gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m, &n, &k, + &one, abase, &lda, bbase, &ldb, &zero, dest, &ldc, 1, 1); + return; + } + } + + if (rxstride == 1 && axstride == 1 && bxstride == 1) + { + const GFC_INTEGER_16 * restrict bbase_y; + GFC_INTEGER_16 * restrict dest_y; + const GFC_INTEGER_16 * restrict abase_n; + GFC_INTEGER_16 bbase_yn; + + if (rystride == xcount) + memset (dest, 0, (sizeof (GFC_INTEGER_16) * xcount * ycount)); + else + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x + y*rystride] = (GFC_INTEGER_16)0; + } + + for (y = 0; y < ycount; y++) + { + bbase_y = bbase + y*bystride; + dest_y = dest + y*rystride; + for (n = 0; n < count; n++) + { + abase_n = abase + n*aystride; + bbase_yn = bbase_y[n]; + for (x = 0; x < xcount; x++) + { + dest_y[x] += abase_n[x] * bbase_yn; + } + } + } + } + else if (rxstride == 1 && aystride == 1 && bxstride == 1) + { + if (GFC_DESCRIPTOR_RANK (a) != 1) + { + const GFC_INTEGER_16 *restrict abase_x; + const GFC_INTEGER_16 *restrict bbase_y; + GFC_INTEGER_16 *restrict dest_y; + GFC_INTEGER_16 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_INTEGER_16) 0; + for (n = 0; n < count; n++) + s += abase_x[n] * bbase_y[n]; + dest_y[x] = s; + } + } + } + else + { + const GFC_INTEGER_16 *restrict bbase_y; + GFC_INTEGER_16 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_INTEGER_16) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n]; + dest[y*rystride] = s; + } + } + } + else if (axstride < aystride) + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x*rxstride + y*rystride] = (GFC_INTEGER_16)0; + + for (y = 0; y < ycount; y++) + for (n = 0; n < count; n++) + for (x = 0; x < xcount; x++) + /* dest[x,y] += a[x,n] * b[n,y] */ + dest[x*rxstride + y*rystride] += abase[x*axstride + n*aystride] * bbase[n*bxstride + y*bystride]; + } + else if (GFC_DESCRIPTOR_RANK (a) == 1) + { + const GFC_INTEGER_16 *restrict bbase_y; + GFC_INTEGER_16 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_INTEGER_16) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n*bxstride]; + dest[y*rxstride] = s; + } + } + else + { + const GFC_INTEGER_16 *restrict abase_x; + const GFC_INTEGER_16 *restrict bbase_y; + GFC_INTEGER_16 *restrict dest_y; + GFC_INTEGER_16 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_INTEGER_16) 0; + for (n = 0; n < count; n++) + s += abase_x[n*aystride] * bbase_y[n*bxstride]; + dest_y[x*rxstride] = s; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i2.c new file mode 100644 index 0000000000..bf04fce96d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i2.c @@ -0,0 +1,379 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) + +/* Prototype for the BLAS ?gemm subroutine, a pointer to which can be + passed to us by the front-end, in which case we'll call it for large + matrices. */ + +typedef void (*blas_call)(const char *, const char *, const int *, const int *, + const int *, const GFC_INTEGER_2 *, const GFC_INTEGER_2 *, + const int *, const GFC_INTEGER_2 *, const int *, + const GFC_INTEGER_2 *, GFC_INTEGER_2 *, const int *, + int, int); + +/* The order of loops is different in the case of plain matrix + multiplication C=MATMUL(A,B), and in the frequent special case where + the argument A is the temporary result of a TRANSPOSE intrinsic: + C=MATMUL(TRANSPOSE(A),B). Transposed temporaries are detected by + looking at their strides. + + The equivalent Fortran pseudo-code is: + + DIMENSION A(M,COUNT), B(COUNT,N), C(M,N) + IF (.NOT.IS_TRANSPOSED(A)) THEN + C = 0 + DO J=1,N + DO K=1,COUNT + DO I=1,M + C(I,J) = C(I,J)+A(I,K)*B(K,J) + ELSE + DO J=1,N + DO I=1,M + S = 0 + DO K=1,COUNT + S = S+A(I,K)*B(K,J) + C(I,J) = S + ENDIF +*/ + +/* If try_blas is set to a nonzero value, then the matmul function will + see if there is a way to perform the matrix multiplication by a call + to the BLAS gemm function. */ + +extern void matmul_i2 (gfc_array_i2 * const restrict retarray, + gfc_array_i2 * const restrict a, gfc_array_i2 * const restrict b, int try_blas, + int blas_limit, blas_call gemm); +export_proto(matmul_i2); + +void +matmul_i2 (gfc_array_i2 * const restrict retarray, + gfc_array_i2 * const restrict a, gfc_array_i2 * const restrict b, int try_blas, + int blas_limit, blas_call gemm) +{ + const GFC_INTEGER_2 * restrict abase; + const GFC_INTEGER_2 * restrict bbase; + GFC_INTEGER_2 * restrict dest; + + index_type rxstride, rystride, axstride, aystride, bxstride, bystride; + index_type x, y, n, count, xcount, ycount; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + +/* C[xcount,ycount] = A[xcount, count] * B[count,ycount] + + Either A or B (but not both) can be rank 1: + + o One-dimensional argument A is implicitly treated as a row matrix + dimensioned [1,count], so xcount=1. + + o One-dimensional argument B is implicitly treated as a column matrix + dimensioned [count, 1], so ycount=1. + */ + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_INTEGER_2) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + /* One-dimensional result may be addressed in the code below + either as a row or a column matrix. We want both cases to + work. */ + rxstride = rystride = retarray->dim[0].stride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + /* Treat it as a a row matrix A[1,count]. */ + axstride = a->dim[0].stride; + aystride = 1; + + xcount = 1; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + else + { + axstride = a->dim[0].stride; + aystride = a->dim[1].stride; + + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + + if (count != b->dim[0].ubound + 1 - b->dim[0].lbound) + { + if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0) + runtime_error ("dimension of array B incorrect in MATMUL intrinsic"); + } + + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + /* Treat it as a column matrix B[count,1] */ + bxstride = b->dim[0].stride; + + /* bystride should never be used for 1-dimensional b. + in case it is we want it to cause a segfault, rather than + an incorrect result. */ + bystride = 0xDEADBEEF; + ycount = 1; + } + else + { + bxstride = b->dim[0].stride; + bystride = b->dim[1].stride; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + abase = a->data; + bbase = b->data; + dest = retarray->data; + + + /* Now that everything is set up, we're performing the multiplication + itself. */ + +#define POW3(x) (((float) (x)) * ((float) (x)) * ((float) (x))) + + if (try_blas && rxstride == 1 && (axstride == 1 || aystride == 1) + && (bxstride == 1 || bystride == 1) + && (((float) xcount) * ((float) ycount) * ((float) count) + > POW3(blas_limit))) + { + const int m = xcount, n = ycount, k = count, ldc = rystride; + const GFC_INTEGER_2 one = 1, zero = 0; + const int lda = (axstride == 1) ? aystride : axstride, + ldb = (bxstride == 1) ? bystride : bxstride; + + if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1) + { + assert (gemm != NULL); + gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m, &n, &k, + &one, abase, &lda, bbase, &ldb, &zero, dest, &ldc, 1, 1); + return; + } + } + + if (rxstride == 1 && axstride == 1 && bxstride == 1) + { + const GFC_INTEGER_2 * restrict bbase_y; + GFC_INTEGER_2 * restrict dest_y; + const GFC_INTEGER_2 * restrict abase_n; + GFC_INTEGER_2 bbase_yn; + + if (rystride == xcount) + memset (dest, 0, (sizeof (GFC_INTEGER_2) * xcount * ycount)); + else + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x + y*rystride] = (GFC_INTEGER_2)0; + } + + for (y = 0; y < ycount; y++) + { + bbase_y = bbase + y*bystride; + dest_y = dest + y*rystride; + for (n = 0; n < count; n++) + { + abase_n = abase + n*aystride; + bbase_yn = bbase_y[n]; + for (x = 0; x < xcount; x++) + { + dest_y[x] += abase_n[x] * bbase_yn; + } + } + } + } + else if (rxstride == 1 && aystride == 1 && bxstride == 1) + { + if (GFC_DESCRIPTOR_RANK (a) != 1) + { + const GFC_INTEGER_2 *restrict abase_x; + const GFC_INTEGER_2 *restrict bbase_y; + GFC_INTEGER_2 *restrict dest_y; + GFC_INTEGER_2 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_INTEGER_2) 0; + for (n = 0; n < count; n++) + s += abase_x[n] * bbase_y[n]; + dest_y[x] = s; + } + } + } + else + { + const GFC_INTEGER_2 *restrict bbase_y; + GFC_INTEGER_2 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_INTEGER_2) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n]; + dest[y*rystride] = s; + } + } + } + else if (axstride < aystride) + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x*rxstride + y*rystride] = (GFC_INTEGER_2)0; + + for (y = 0; y < ycount; y++) + for (n = 0; n < count; n++) + for (x = 0; x < xcount; x++) + /* dest[x,y] += a[x,n] * b[n,y] */ + dest[x*rxstride + y*rystride] += abase[x*axstride + n*aystride] * bbase[n*bxstride + y*bystride]; + } + else if (GFC_DESCRIPTOR_RANK (a) == 1) + { + const GFC_INTEGER_2 *restrict bbase_y; + GFC_INTEGER_2 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_INTEGER_2) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n*bxstride]; + dest[y*rxstride] = s; + } + } + else + { + const GFC_INTEGER_2 *restrict abase_x; + const GFC_INTEGER_2 *restrict bbase_y; + GFC_INTEGER_2 *restrict dest_y; + GFC_INTEGER_2 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_INTEGER_2) 0; + for (n = 0; n < count; n++) + s += abase_x[n*aystride] * bbase_y[n*bxstride]; + dest_y[x*rxstride] = s; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i4.c new file mode 100644 index 0000000000..7b3ba68715 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i4.c @@ -0,0 +1,379 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) + +/* Prototype for the BLAS ?gemm subroutine, a pointer to which can be + passed to us by the front-end, in which case we'll call it for large + matrices. */ + +typedef void (*blas_call)(const char *, const char *, const int *, const int *, + const int *, const GFC_INTEGER_4 *, const GFC_INTEGER_4 *, + const int *, const GFC_INTEGER_4 *, const int *, + const GFC_INTEGER_4 *, GFC_INTEGER_4 *, const int *, + int, int); + +/* The order of loops is different in the case of plain matrix + multiplication C=MATMUL(A,B), and in the frequent special case where + the argument A is the temporary result of a TRANSPOSE intrinsic: + C=MATMUL(TRANSPOSE(A),B). Transposed temporaries are detected by + looking at their strides. + + The equivalent Fortran pseudo-code is: + + DIMENSION A(M,COUNT), B(COUNT,N), C(M,N) + IF (.NOT.IS_TRANSPOSED(A)) THEN + C = 0 + DO J=1,N + DO K=1,COUNT + DO I=1,M + C(I,J) = C(I,J)+A(I,K)*B(K,J) + ELSE + DO J=1,N + DO I=1,M + S = 0 + DO K=1,COUNT + S = S+A(I,K)*B(K,J) + C(I,J) = S + ENDIF +*/ + +/* If try_blas is set to a nonzero value, then the matmul function will + see if there is a way to perform the matrix multiplication by a call + to the BLAS gemm function. */ + +extern void matmul_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict a, gfc_array_i4 * const restrict b, int try_blas, + int blas_limit, blas_call gemm); +export_proto(matmul_i4); + +void +matmul_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict a, gfc_array_i4 * const restrict b, int try_blas, + int blas_limit, blas_call gemm) +{ + const GFC_INTEGER_4 * restrict abase; + const GFC_INTEGER_4 * restrict bbase; + GFC_INTEGER_4 * restrict dest; + + index_type rxstride, rystride, axstride, aystride, bxstride, bystride; + index_type x, y, n, count, xcount, ycount; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + +/* C[xcount,ycount] = A[xcount, count] * B[count,ycount] + + Either A or B (but not both) can be rank 1: + + o One-dimensional argument A is implicitly treated as a row matrix + dimensioned [1,count], so xcount=1. + + o One-dimensional argument B is implicitly treated as a column matrix + dimensioned [count, 1], so ycount=1. + */ + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_INTEGER_4) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + /* One-dimensional result may be addressed in the code below + either as a row or a column matrix. We want both cases to + work. */ + rxstride = rystride = retarray->dim[0].stride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + /* Treat it as a a row matrix A[1,count]. */ + axstride = a->dim[0].stride; + aystride = 1; + + xcount = 1; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + else + { + axstride = a->dim[0].stride; + aystride = a->dim[1].stride; + + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + + if (count != b->dim[0].ubound + 1 - b->dim[0].lbound) + { + if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0) + runtime_error ("dimension of array B incorrect in MATMUL intrinsic"); + } + + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + /* Treat it as a column matrix B[count,1] */ + bxstride = b->dim[0].stride; + + /* bystride should never be used for 1-dimensional b. + in case it is we want it to cause a segfault, rather than + an incorrect result. */ + bystride = 0xDEADBEEF; + ycount = 1; + } + else + { + bxstride = b->dim[0].stride; + bystride = b->dim[1].stride; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + abase = a->data; + bbase = b->data; + dest = retarray->data; + + + /* Now that everything is set up, we're performing the multiplication + itself. */ + +#define POW3(x) (((float) (x)) * ((float) (x)) * ((float) (x))) + + if (try_blas && rxstride == 1 && (axstride == 1 || aystride == 1) + && (bxstride == 1 || bystride == 1) + && (((float) xcount) * ((float) ycount) * ((float) count) + > POW3(blas_limit))) + { + const int m = xcount, n = ycount, k = count, ldc = rystride; + const GFC_INTEGER_4 one = 1, zero = 0; + const int lda = (axstride == 1) ? aystride : axstride, + ldb = (bxstride == 1) ? bystride : bxstride; + + if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1) + { + assert (gemm != NULL); + gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m, &n, &k, + &one, abase, &lda, bbase, &ldb, &zero, dest, &ldc, 1, 1); + return; + } + } + + if (rxstride == 1 && axstride == 1 && bxstride == 1) + { + const GFC_INTEGER_4 * restrict bbase_y; + GFC_INTEGER_4 * restrict dest_y; + const GFC_INTEGER_4 * restrict abase_n; + GFC_INTEGER_4 bbase_yn; + + if (rystride == xcount) + memset (dest, 0, (sizeof (GFC_INTEGER_4) * xcount * ycount)); + else + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x + y*rystride] = (GFC_INTEGER_4)0; + } + + for (y = 0; y < ycount; y++) + { + bbase_y = bbase + y*bystride; + dest_y = dest + y*rystride; + for (n = 0; n < count; n++) + { + abase_n = abase + n*aystride; + bbase_yn = bbase_y[n]; + for (x = 0; x < xcount; x++) + { + dest_y[x] += abase_n[x] * bbase_yn; + } + } + } + } + else if (rxstride == 1 && aystride == 1 && bxstride == 1) + { + if (GFC_DESCRIPTOR_RANK (a) != 1) + { + const GFC_INTEGER_4 *restrict abase_x; + const GFC_INTEGER_4 *restrict bbase_y; + GFC_INTEGER_4 *restrict dest_y; + GFC_INTEGER_4 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_INTEGER_4) 0; + for (n = 0; n < count; n++) + s += abase_x[n] * bbase_y[n]; + dest_y[x] = s; + } + } + } + else + { + const GFC_INTEGER_4 *restrict bbase_y; + GFC_INTEGER_4 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_INTEGER_4) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n]; + dest[y*rystride] = s; + } + } + } + else if (axstride < aystride) + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x*rxstride + y*rystride] = (GFC_INTEGER_4)0; + + for (y = 0; y < ycount; y++) + for (n = 0; n < count; n++) + for (x = 0; x < xcount; x++) + /* dest[x,y] += a[x,n] * b[n,y] */ + dest[x*rxstride + y*rystride] += abase[x*axstride + n*aystride] * bbase[n*bxstride + y*bystride]; + } + else if (GFC_DESCRIPTOR_RANK (a) == 1) + { + const GFC_INTEGER_4 *restrict bbase_y; + GFC_INTEGER_4 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_INTEGER_4) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n*bxstride]; + dest[y*rxstride] = s; + } + } + else + { + const GFC_INTEGER_4 *restrict abase_x; + const GFC_INTEGER_4 *restrict bbase_y; + GFC_INTEGER_4 *restrict dest_y; + GFC_INTEGER_4 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_INTEGER_4) 0; + for (n = 0; n < count; n++) + s += abase_x[n*aystride] * bbase_y[n*bxstride]; + dest_y[x*rxstride] = s; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i8.c new file mode 100644 index 0000000000..45b99c3a3b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i8.c @@ -0,0 +1,379 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) + +/* Prototype for the BLAS ?gemm subroutine, a pointer to which can be + passed to us by the front-end, in which case we'll call it for large + matrices. */ + +typedef void (*blas_call)(const char *, const char *, const int *, const int *, + const int *, const GFC_INTEGER_8 *, const GFC_INTEGER_8 *, + const int *, const GFC_INTEGER_8 *, const int *, + const GFC_INTEGER_8 *, GFC_INTEGER_8 *, const int *, + int, int); + +/* The order of loops is different in the case of plain matrix + multiplication C=MATMUL(A,B), and in the frequent special case where + the argument A is the temporary result of a TRANSPOSE intrinsic: + C=MATMUL(TRANSPOSE(A),B). Transposed temporaries are detected by + looking at their strides. + + The equivalent Fortran pseudo-code is: + + DIMENSION A(M,COUNT), B(COUNT,N), C(M,N) + IF (.NOT.IS_TRANSPOSED(A)) THEN + C = 0 + DO J=1,N + DO K=1,COUNT + DO I=1,M + C(I,J) = C(I,J)+A(I,K)*B(K,J) + ELSE + DO J=1,N + DO I=1,M + S = 0 + DO K=1,COUNT + S = S+A(I,K)*B(K,J) + C(I,J) = S + ENDIF +*/ + +/* If try_blas is set to a nonzero value, then the matmul function will + see if there is a way to perform the matrix multiplication by a call + to the BLAS gemm function. */ + +extern void matmul_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict a, gfc_array_i8 * const restrict b, int try_blas, + int blas_limit, blas_call gemm); +export_proto(matmul_i8); + +void +matmul_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict a, gfc_array_i8 * const restrict b, int try_blas, + int blas_limit, blas_call gemm) +{ + const GFC_INTEGER_8 * restrict abase; + const GFC_INTEGER_8 * restrict bbase; + GFC_INTEGER_8 * restrict dest; + + index_type rxstride, rystride, axstride, aystride, bxstride, bystride; + index_type x, y, n, count, xcount, ycount; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + +/* C[xcount,ycount] = A[xcount, count] * B[count,ycount] + + Either A or B (but not both) can be rank 1: + + o One-dimensional argument A is implicitly treated as a row matrix + dimensioned [1,count], so xcount=1. + + o One-dimensional argument B is implicitly treated as a column matrix + dimensioned [count, 1], so ycount=1. + */ + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_INTEGER_8) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + /* One-dimensional result may be addressed in the code below + either as a row or a column matrix. We want both cases to + work. */ + rxstride = rystride = retarray->dim[0].stride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + /* Treat it as a a row matrix A[1,count]. */ + axstride = a->dim[0].stride; + aystride = 1; + + xcount = 1; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + else + { + axstride = a->dim[0].stride; + aystride = a->dim[1].stride; + + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + + if (count != b->dim[0].ubound + 1 - b->dim[0].lbound) + { + if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0) + runtime_error ("dimension of array B incorrect in MATMUL intrinsic"); + } + + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + /* Treat it as a column matrix B[count,1] */ + bxstride = b->dim[0].stride; + + /* bystride should never be used for 1-dimensional b. + in case it is we want it to cause a segfault, rather than + an incorrect result. */ + bystride = 0xDEADBEEF; + ycount = 1; + } + else + { + bxstride = b->dim[0].stride; + bystride = b->dim[1].stride; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + abase = a->data; + bbase = b->data; + dest = retarray->data; + + + /* Now that everything is set up, we're performing the multiplication + itself. */ + +#define POW3(x) (((float) (x)) * ((float) (x)) * ((float) (x))) + + if (try_blas && rxstride == 1 && (axstride == 1 || aystride == 1) + && (bxstride == 1 || bystride == 1) + && (((float) xcount) * ((float) ycount) * ((float) count) + > POW3(blas_limit))) + { + const int m = xcount, n = ycount, k = count, ldc = rystride; + const GFC_INTEGER_8 one = 1, zero = 0; + const int lda = (axstride == 1) ? aystride : axstride, + ldb = (bxstride == 1) ? bystride : bxstride; + + if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1) + { + assert (gemm != NULL); + gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m, &n, &k, + &one, abase, &lda, bbase, &ldb, &zero, dest, &ldc, 1, 1); + return; + } + } + + if (rxstride == 1 && axstride == 1 && bxstride == 1) + { + const GFC_INTEGER_8 * restrict bbase_y; + GFC_INTEGER_8 * restrict dest_y; + const GFC_INTEGER_8 * restrict abase_n; + GFC_INTEGER_8 bbase_yn; + + if (rystride == xcount) + memset (dest, 0, (sizeof (GFC_INTEGER_8) * xcount * ycount)); + else + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x + y*rystride] = (GFC_INTEGER_8)0; + } + + for (y = 0; y < ycount; y++) + { + bbase_y = bbase + y*bystride; + dest_y = dest + y*rystride; + for (n = 0; n < count; n++) + { + abase_n = abase + n*aystride; + bbase_yn = bbase_y[n]; + for (x = 0; x < xcount; x++) + { + dest_y[x] += abase_n[x] * bbase_yn; + } + } + } + } + else if (rxstride == 1 && aystride == 1 && bxstride == 1) + { + if (GFC_DESCRIPTOR_RANK (a) != 1) + { + const GFC_INTEGER_8 *restrict abase_x; + const GFC_INTEGER_8 *restrict bbase_y; + GFC_INTEGER_8 *restrict dest_y; + GFC_INTEGER_8 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_INTEGER_8) 0; + for (n = 0; n < count; n++) + s += abase_x[n] * bbase_y[n]; + dest_y[x] = s; + } + } + } + else + { + const GFC_INTEGER_8 *restrict bbase_y; + GFC_INTEGER_8 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_INTEGER_8) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n]; + dest[y*rystride] = s; + } + } + } + else if (axstride < aystride) + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x*rxstride + y*rystride] = (GFC_INTEGER_8)0; + + for (y = 0; y < ycount; y++) + for (n = 0; n < count; n++) + for (x = 0; x < xcount; x++) + /* dest[x,y] += a[x,n] * b[n,y] */ + dest[x*rxstride + y*rystride] += abase[x*axstride + n*aystride] * bbase[n*bxstride + y*bystride]; + } + else if (GFC_DESCRIPTOR_RANK (a) == 1) + { + const GFC_INTEGER_8 *restrict bbase_y; + GFC_INTEGER_8 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_INTEGER_8) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n*bxstride]; + dest[y*rxstride] = s; + } + } + else + { + const GFC_INTEGER_8 *restrict abase_x; + const GFC_INTEGER_8 *restrict bbase_y; + GFC_INTEGER_8 *restrict dest_y; + GFC_INTEGER_8 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_INTEGER_8) 0; + for (n = 0; n < count; n++) + s += abase_x[n*aystride] * bbase_y[n*bxstride]; + dest_y[x*rxstride] = s; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_l16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_l16.c new file mode 100644 index 0000000000..fc8e54834e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_l16.c @@ -0,0 +1,242 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_16) + +/* Dimensions: retarray(x,y) a(x, count) b(count,y). + Either a or b can be rank 1. In this case x or y is 1. */ + +extern void matmul_l16 (gfc_array_l16 * const restrict, + gfc_array_l1 * const restrict, gfc_array_l1 * const restrict); +export_proto(matmul_l16); + +void +matmul_l16 (gfc_array_l16 * const restrict retarray, + gfc_array_l1 * const restrict a, gfc_array_l1 * const restrict b) +{ + const GFC_LOGICAL_1 * restrict abase; + const GFC_LOGICAL_1 * restrict bbase; + GFC_LOGICAL_16 * restrict dest; + index_type rxstride; + index_type rystride; + index_type xcount; + index_type ycount; + index_type xstride; + index_type ystride; + index_type x; + index_type y; + int a_kind; + int b_kind; + + const GFC_LOGICAL_1 * restrict pa; + const GFC_LOGICAL_1 * restrict pb; + index_type astride; + index_type bstride; + index_type count; + index_type n; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_LOGICAL_16) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + abase = a->data; + a_kind = GFC_DESCRIPTOR_SIZE (a); + + if (a_kind == 1 || a_kind == 2 || a_kind == 4 || a_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || a_kind == 16 +#endif + ) + abase = GFOR_POINTER_TO_L1 (abase, a_kind); + else + internal_error (NULL, "Funny sized logical array"); + + bbase = b->data; + b_kind = GFC_DESCRIPTOR_SIZE (b); + + if (b_kind == 1 || b_kind == 2 || b_kind == 4 || b_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || b_kind == 16 +#endif + ) + bbase = GFOR_POINTER_TO_L1 (bbase, b_kind); + else + internal_error (NULL, "Funny sized logical array"); + + dest = retarray->data; + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + rxstride = retarray->dim[0].stride; + rystride = rxstride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + /* If we have rank 1 parameters, zero the absent stride, and set the size to + one. */ + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + astride = a->dim[0].stride * a_kind; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + xstride = 0; + rxstride = 0; + xcount = 1; + } + else + { + astride = a->dim[1].stride * a_kind; + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xstride = a->dim[0].stride * a_kind; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + bstride = b->dim[0].stride * b_kind; + assert(count == b->dim[0].ubound + 1 - b->dim[0].lbound); + ystride = 0; + rystride = 0; + ycount = 1; + } + else + { + bstride = b->dim[0].stride * b_kind; + assert(count == b->dim[0].ubound + 1 - b->dim[0].lbound); + ystride = b->dim[1].stride * b_kind; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + for (y = 0; y < ycount; y++) + { + for (x = 0; x < xcount; x++) + { + /* Do the summation for this element. For real and integer types + this is the same as DOT_PRODUCT. For complex types we use do + a*b, not conjg(a)*b. */ + pa = abase; + pb = bbase; + *dest = 0; + + for (n = 0; n < count; n++) + { + if (*pa && *pb) + { + *dest = 1; + break; + } + pa += astride; + pb += bstride; + } + + dest += rxstride; + abase += xstride; + } + abase -= xstride * xcount; + bbase += ystride; + dest += rystride - (rxstride * xcount); + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_l4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_l4.c new file mode 100644 index 0000000000..c7bb584494 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_l4.c @@ -0,0 +1,242 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_4) + +/* Dimensions: retarray(x,y) a(x, count) b(count,y). + Either a or b can be rank 1. In this case x or y is 1. */ + +extern void matmul_l4 (gfc_array_l4 * const restrict, + gfc_array_l1 * const restrict, gfc_array_l1 * const restrict); +export_proto(matmul_l4); + +void +matmul_l4 (gfc_array_l4 * const restrict retarray, + gfc_array_l1 * const restrict a, gfc_array_l1 * const restrict b) +{ + const GFC_LOGICAL_1 * restrict abase; + const GFC_LOGICAL_1 * restrict bbase; + GFC_LOGICAL_4 * restrict dest; + index_type rxstride; + index_type rystride; + index_type xcount; + index_type ycount; + index_type xstride; + index_type ystride; + index_type x; + index_type y; + int a_kind; + int b_kind; + + const GFC_LOGICAL_1 * restrict pa; + const GFC_LOGICAL_1 * restrict pb; + index_type astride; + index_type bstride; + index_type count; + index_type n; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_LOGICAL_4) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + abase = a->data; + a_kind = GFC_DESCRIPTOR_SIZE (a); + + if (a_kind == 1 || a_kind == 2 || a_kind == 4 || a_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || a_kind == 16 +#endif + ) + abase = GFOR_POINTER_TO_L1 (abase, a_kind); + else + internal_error (NULL, "Funny sized logical array"); + + bbase = b->data; + b_kind = GFC_DESCRIPTOR_SIZE (b); + + if (b_kind == 1 || b_kind == 2 || b_kind == 4 || b_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || b_kind == 16 +#endif + ) + bbase = GFOR_POINTER_TO_L1 (bbase, b_kind); + else + internal_error (NULL, "Funny sized logical array"); + + dest = retarray->data; + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + rxstride = retarray->dim[0].stride; + rystride = rxstride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + /* If we have rank 1 parameters, zero the absent stride, and set the size to + one. */ + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + astride = a->dim[0].stride * a_kind; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + xstride = 0; + rxstride = 0; + xcount = 1; + } + else + { + astride = a->dim[1].stride * a_kind; + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xstride = a->dim[0].stride * a_kind; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + bstride = b->dim[0].stride * b_kind; + assert(count == b->dim[0].ubound + 1 - b->dim[0].lbound); + ystride = 0; + rystride = 0; + ycount = 1; + } + else + { + bstride = b->dim[0].stride * b_kind; + assert(count == b->dim[0].ubound + 1 - b->dim[0].lbound); + ystride = b->dim[1].stride * b_kind; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + for (y = 0; y < ycount; y++) + { + for (x = 0; x < xcount; x++) + { + /* Do the summation for this element. For real and integer types + this is the same as DOT_PRODUCT. For complex types we use do + a*b, not conjg(a)*b. */ + pa = abase; + pb = bbase; + *dest = 0; + + for (n = 0; n < count; n++) + { + if (*pa && *pb) + { + *dest = 1; + break; + } + pa += astride; + pb += bstride; + } + + dest += rxstride; + abase += xstride; + } + abase -= xstride * xcount; + bbase += ystride; + dest += rystride - (rxstride * xcount); + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_l8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_l8.c new file mode 100644 index 0000000000..1d1541033b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_l8.c @@ -0,0 +1,242 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_LOGICAL_8) + +/* Dimensions: retarray(x,y) a(x, count) b(count,y). + Either a or b can be rank 1. In this case x or y is 1. */ + +extern void matmul_l8 (gfc_array_l8 * const restrict, + gfc_array_l1 * const restrict, gfc_array_l1 * const restrict); +export_proto(matmul_l8); + +void +matmul_l8 (gfc_array_l8 * const restrict retarray, + gfc_array_l1 * const restrict a, gfc_array_l1 * const restrict b) +{ + const GFC_LOGICAL_1 * restrict abase; + const GFC_LOGICAL_1 * restrict bbase; + GFC_LOGICAL_8 * restrict dest; + index_type rxstride; + index_type rystride; + index_type xcount; + index_type ycount; + index_type xstride; + index_type ystride; + index_type x; + index_type y; + int a_kind; + int b_kind; + + const GFC_LOGICAL_1 * restrict pa; + const GFC_LOGICAL_1 * restrict pb; + index_type astride; + index_type bstride; + index_type count; + index_type n; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_LOGICAL_8) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + abase = a->data; + a_kind = GFC_DESCRIPTOR_SIZE (a); + + if (a_kind == 1 || a_kind == 2 || a_kind == 4 || a_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || a_kind == 16 +#endif + ) + abase = GFOR_POINTER_TO_L1 (abase, a_kind); + else + internal_error (NULL, "Funny sized logical array"); + + bbase = b->data; + b_kind = GFC_DESCRIPTOR_SIZE (b); + + if (b_kind == 1 || b_kind == 2 || b_kind == 4 || b_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || b_kind == 16 +#endif + ) + bbase = GFOR_POINTER_TO_L1 (bbase, b_kind); + else + internal_error (NULL, "Funny sized logical array"); + + dest = retarray->data; + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + rxstride = retarray->dim[0].stride; + rystride = rxstride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + /* If we have rank 1 parameters, zero the absent stride, and set the size to + one. */ + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + astride = a->dim[0].stride * a_kind; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + xstride = 0; + rxstride = 0; + xcount = 1; + } + else + { + astride = a->dim[1].stride * a_kind; + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xstride = a->dim[0].stride * a_kind; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + bstride = b->dim[0].stride * b_kind; + assert(count == b->dim[0].ubound + 1 - b->dim[0].lbound); + ystride = 0; + rystride = 0; + ycount = 1; + } + else + { + bstride = b->dim[0].stride * b_kind; + assert(count == b->dim[0].ubound + 1 - b->dim[0].lbound); + ystride = b->dim[1].stride * b_kind; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + for (y = 0; y < ycount; y++) + { + for (x = 0; x < xcount; x++) + { + /* Do the summation for this element. For real and integer types + this is the same as DOT_PRODUCT. For complex types we use do + a*b, not conjg(a)*b. */ + pa = abase; + pb = bbase; + *dest = 0; + + for (n = 0; n < count; n++) + { + if (*pa && *pb) + { + *dest = 1; + break; + } + pa += astride; + pb += bstride; + } + + dest += rxstride; + abase += xstride; + } + abase -= xstride * xcount; + bbase += ystride; + dest += rystride - (rxstride * xcount); + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r10.c new file mode 100644 index 0000000000..90338ac280 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r10.c @@ -0,0 +1,379 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) + +/* Prototype for the BLAS ?gemm subroutine, a pointer to which can be + passed to us by the front-end, in which case we'll call it for large + matrices. */ + +typedef void (*blas_call)(const char *, const char *, const int *, const int *, + const int *, const GFC_REAL_10 *, const GFC_REAL_10 *, + const int *, const GFC_REAL_10 *, const int *, + const GFC_REAL_10 *, GFC_REAL_10 *, const int *, + int, int); + +/* The order of loops is different in the case of plain matrix + multiplication C=MATMUL(A,B), and in the frequent special case where + the argument A is the temporary result of a TRANSPOSE intrinsic: + C=MATMUL(TRANSPOSE(A),B). Transposed temporaries are detected by + looking at their strides. + + The equivalent Fortran pseudo-code is: + + DIMENSION A(M,COUNT), B(COUNT,N), C(M,N) + IF (.NOT.IS_TRANSPOSED(A)) THEN + C = 0 + DO J=1,N + DO K=1,COUNT + DO I=1,M + C(I,J) = C(I,J)+A(I,K)*B(K,J) + ELSE + DO J=1,N + DO I=1,M + S = 0 + DO K=1,COUNT + S = S+A(I,K)*B(K,J) + C(I,J) = S + ENDIF +*/ + +/* If try_blas is set to a nonzero value, then the matmul function will + see if there is a way to perform the matrix multiplication by a call + to the BLAS gemm function. */ + +extern void matmul_r10 (gfc_array_r10 * const restrict retarray, + gfc_array_r10 * const restrict a, gfc_array_r10 * const restrict b, int try_blas, + int blas_limit, blas_call gemm); +export_proto(matmul_r10); + +void +matmul_r10 (gfc_array_r10 * const restrict retarray, + gfc_array_r10 * const restrict a, gfc_array_r10 * const restrict b, int try_blas, + int blas_limit, blas_call gemm) +{ + const GFC_REAL_10 * restrict abase; + const GFC_REAL_10 * restrict bbase; + GFC_REAL_10 * restrict dest; + + index_type rxstride, rystride, axstride, aystride, bxstride, bystride; + index_type x, y, n, count, xcount, ycount; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + +/* C[xcount,ycount] = A[xcount, count] * B[count,ycount] + + Either A or B (but not both) can be rank 1: + + o One-dimensional argument A is implicitly treated as a row matrix + dimensioned [1,count], so xcount=1. + + o One-dimensional argument B is implicitly treated as a column matrix + dimensioned [count, 1], so ycount=1. + */ + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_REAL_10) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + /* One-dimensional result may be addressed in the code below + either as a row or a column matrix. We want both cases to + work. */ + rxstride = rystride = retarray->dim[0].stride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + /* Treat it as a a row matrix A[1,count]. */ + axstride = a->dim[0].stride; + aystride = 1; + + xcount = 1; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + else + { + axstride = a->dim[0].stride; + aystride = a->dim[1].stride; + + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + + if (count != b->dim[0].ubound + 1 - b->dim[0].lbound) + { + if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0) + runtime_error ("dimension of array B incorrect in MATMUL intrinsic"); + } + + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + /* Treat it as a column matrix B[count,1] */ + bxstride = b->dim[0].stride; + + /* bystride should never be used for 1-dimensional b. + in case it is we want it to cause a segfault, rather than + an incorrect result. */ + bystride = 0xDEADBEEF; + ycount = 1; + } + else + { + bxstride = b->dim[0].stride; + bystride = b->dim[1].stride; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + abase = a->data; + bbase = b->data; + dest = retarray->data; + + + /* Now that everything is set up, we're performing the multiplication + itself. */ + +#define POW3(x) (((float) (x)) * ((float) (x)) * ((float) (x))) + + if (try_blas && rxstride == 1 && (axstride == 1 || aystride == 1) + && (bxstride == 1 || bystride == 1) + && (((float) xcount) * ((float) ycount) * ((float) count) + > POW3(blas_limit))) + { + const int m = xcount, n = ycount, k = count, ldc = rystride; + const GFC_REAL_10 one = 1, zero = 0; + const int lda = (axstride == 1) ? aystride : axstride, + ldb = (bxstride == 1) ? bystride : bxstride; + + if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1) + { + assert (gemm != NULL); + gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m, &n, &k, + &one, abase, &lda, bbase, &ldb, &zero, dest, &ldc, 1, 1); + return; + } + } + + if (rxstride == 1 && axstride == 1 && bxstride == 1) + { + const GFC_REAL_10 * restrict bbase_y; + GFC_REAL_10 * restrict dest_y; + const GFC_REAL_10 * restrict abase_n; + GFC_REAL_10 bbase_yn; + + if (rystride == xcount) + memset (dest, 0, (sizeof (GFC_REAL_10) * xcount * ycount)); + else + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x + y*rystride] = (GFC_REAL_10)0; + } + + for (y = 0; y < ycount; y++) + { + bbase_y = bbase + y*bystride; + dest_y = dest + y*rystride; + for (n = 0; n < count; n++) + { + abase_n = abase + n*aystride; + bbase_yn = bbase_y[n]; + for (x = 0; x < xcount; x++) + { + dest_y[x] += abase_n[x] * bbase_yn; + } + } + } + } + else if (rxstride == 1 && aystride == 1 && bxstride == 1) + { + if (GFC_DESCRIPTOR_RANK (a) != 1) + { + const GFC_REAL_10 *restrict abase_x; + const GFC_REAL_10 *restrict bbase_y; + GFC_REAL_10 *restrict dest_y; + GFC_REAL_10 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_REAL_10) 0; + for (n = 0; n < count; n++) + s += abase_x[n] * bbase_y[n]; + dest_y[x] = s; + } + } + } + else + { + const GFC_REAL_10 *restrict bbase_y; + GFC_REAL_10 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_REAL_10) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n]; + dest[y*rystride] = s; + } + } + } + else if (axstride < aystride) + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x*rxstride + y*rystride] = (GFC_REAL_10)0; + + for (y = 0; y < ycount; y++) + for (n = 0; n < count; n++) + for (x = 0; x < xcount; x++) + /* dest[x,y] += a[x,n] * b[n,y] */ + dest[x*rxstride + y*rystride] += abase[x*axstride + n*aystride] * bbase[n*bxstride + y*bystride]; + } + else if (GFC_DESCRIPTOR_RANK (a) == 1) + { + const GFC_REAL_10 *restrict bbase_y; + GFC_REAL_10 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_REAL_10) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n*bxstride]; + dest[y*rxstride] = s; + } + } + else + { + const GFC_REAL_10 *restrict abase_x; + const GFC_REAL_10 *restrict bbase_y; + GFC_REAL_10 *restrict dest_y; + GFC_REAL_10 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_REAL_10) 0; + for (n = 0; n < count; n++) + s += abase_x[n*aystride] * bbase_y[n*bxstride]; + dest_y[x*rxstride] = s; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r16.c new file mode 100644 index 0000000000..a8422b37a4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r16.c @@ -0,0 +1,379 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) + +/* Prototype for the BLAS ?gemm subroutine, a pointer to which can be + passed to us by the front-end, in which case we'll call it for large + matrices. */ + +typedef void (*blas_call)(const char *, const char *, const int *, const int *, + const int *, const GFC_REAL_16 *, const GFC_REAL_16 *, + const int *, const GFC_REAL_16 *, const int *, + const GFC_REAL_16 *, GFC_REAL_16 *, const int *, + int, int); + +/* The order of loops is different in the case of plain matrix + multiplication C=MATMUL(A,B), and in the frequent special case where + the argument A is the temporary result of a TRANSPOSE intrinsic: + C=MATMUL(TRANSPOSE(A),B). Transposed temporaries are detected by + looking at their strides. + + The equivalent Fortran pseudo-code is: + + DIMENSION A(M,COUNT), B(COUNT,N), C(M,N) + IF (.NOT.IS_TRANSPOSED(A)) THEN + C = 0 + DO J=1,N + DO K=1,COUNT + DO I=1,M + C(I,J) = C(I,J)+A(I,K)*B(K,J) + ELSE + DO J=1,N + DO I=1,M + S = 0 + DO K=1,COUNT + S = S+A(I,K)*B(K,J) + C(I,J) = S + ENDIF +*/ + +/* If try_blas is set to a nonzero value, then the matmul function will + see if there is a way to perform the matrix multiplication by a call + to the BLAS gemm function. */ + +extern void matmul_r16 (gfc_array_r16 * const restrict retarray, + gfc_array_r16 * const restrict a, gfc_array_r16 * const restrict b, int try_blas, + int blas_limit, blas_call gemm); +export_proto(matmul_r16); + +void +matmul_r16 (gfc_array_r16 * const restrict retarray, + gfc_array_r16 * const restrict a, gfc_array_r16 * const restrict b, int try_blas, + int blas_limit, blas_call gemm) +{ + const GFC_REAL_16 * restrict abase; + const GFC_REAL_16 * restrict bbase; + GFC_REAL_16 * restrict dest; + + index_type rxstride, rystride, axstride, aystride, bxstride, bystride; + index_type x, y, n, count, xcount, ycount; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + +/* C[xcount,ycount] = A[xcount, count] * B[count,ycount] + + Either A or B (but not both) can be rank 1: + + o One-dimensional argument A is implicitly treated as a row matrix + dimensioned [1,count], so xcount=1. + + o One-dimensional argument B is implicitly treated as a column matrix + dimensioned [count, 1], so ycount=1. + */ + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_REAL_16) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + /* One-dimensional result may be addressed in the code below + either as a row or a column matrix. We want both cases to + work. */ + rxstride = rystride = retarray->dim[0].stride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + /* Treat it as a a row matrix A[1,count]. */ + axstride = a->dim[0].stride; + aystride = 1; + + xcount = 1; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + else + { + axstride = a->dim[0].stride; + aystride = a->dim[1].stride; + + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + + if (count != b->dim[0].ubound + 1 - b->dim[0].lbound) + { + if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0) + runtime_error ("dimension of array B incorrect in MATMUL intrinsic"); + } + + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + /* Treat it as a column matrix B[count,1] */ + bxstride = b->dim[0].stride; + + /* bystride should never be used for 1-dimensional b. + in case it is we want it to cause a segfault, rather than + an incorrect result. */ + bystride = 0xDEADBEEF; + ycount = 1; + } + else + { + bxstride = b->dim[0].stride; + bystride = b->dim[1].stride; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + abase = a->data; + bbase = b->data; + dest = retarray->data; + + + /* Now that everything is set up, we're performing the multiplication + itself. */ + +#define POW3(x) (((float) (x)) * ((float) (x)) * ((float) (x))) + + if (try_blas && rxstride == 1 && (axstride == 1 || aystride == 1) + && (bxstride == 1 || bystride == 1) + && (((float) xcount) * ((float) ycount) * ((float) count) + > POW3(blas_limit))) + { + const int m = xcount, n = ycount, k = count, ldc = rystride; + const GFC_REAL_16 one = 1, zero = 0; + const int lda = (axstride == 1) ? aystride : axstride, + ldb = (bxstride == 1) ? bystride : bxstride; + + if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1) + { + assert (gemm != NULL); + gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m, &n, &k, + &one, abase, &lda, bbase, &ldb, &zero, dest, &ldc, 1, 1); + return; + } + } + + if (rxstride == 1 && axstride == 1 && bxstride == 1) + { + const GFC_REAL_16 * restrict bbase_y; + GFC_REAL_16 * restrict dest_y; + const GFC_REAL_16 * restrict abase_n; + GFC_REAL_16 bbase_yn; + + if (rystride == xcount) + memset (dest, 0, (sizeof (GFC_REAL_16) * xcount * ycount)); + else + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x + y*rystride] = (GFC_REAL_16)0; + } + + for (y = 0; y < ycount; y++) + { + bbase_y = bbase + y*bystride; + dest_y = dest + y*rystride; + for (n = 0; n < count; n++) + { + abase_n = abase + n*aystride; + bbase_yn = bbase_y[n]; + for (x = 0; x < xcount; x++) + { + dest_y[x] += abase_n[x] * bbase_yn; + } + } + } + } + else if (rxstride == 1 && aystride == 1 && bxstride == 1) + { + if (GFC_DESCRIPTOR_RANK (a) != 1) + { + const GFC_REAL_16 *restrict abase_x; + const GFC_REAL_16 *restrict bbase_y; + GFC_REAL_16 *restrict dest_y; + GFC_REAL_16 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_REAL_16) 0; + for (n = 0; n < count; n++) + s += abase_x[n] * bbase_y[n]; + dest_y[x] = s; + } + } + } + else + { + const GFC_REAL_16 *restrict bbase_y; + GFC_REAL_16 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_REAL_16) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n]; + dest[y*rystride] = s; + } + } + } + else if (axstride < aystride) + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x*rxstride + y*rystride] = (GFC_REAL_16)0; + + for (y = 0; y < ycount; y++) + for (n = 0; n < count; n++) + for (x = 0; x < xcount; x++) + /* dest[x,y] += a[x,n] * b[n,y] */ + dest[x*rxstride + y*rystride] += abase[x*axstride + n*aystride] * bbase[n*bxstride + y*bystride]; + } + else if (GFC_DESCRIPTOR_RANK (a) == 1) + { + const GFC_REAL_16 *restrict bbase_y; + GFC_REAL_16 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_REAL_16) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n*bxstride]; + dest[y*rxstride] = s; + } + } + else + { + const GFC_REAL_16 *restrict abase_x; + const GFC_REAL_16 *restrict bbase_y; + GFC_REAL_16 *restrict dest_y; + GFC_REAL_16 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_REAL_16) 0; + for (n = 0; n < count; n++) + s += abase_x[n*aystride] * bbase_y[n*bxstride]; + dest_y[x*rxstride] = s; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r4.c new file mode 100644 index 0000000000..0bb5035098 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r4.c @@ -0,0 +1,379 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) + +/* Prototype for the BLAS ?gemm subroutine, a pointer to which can be + passed to us by the front-end, in which case we'll call it for large + matrices. */ + +typedef void (*blas_call)(const char *, const char *, const int *, const int *, + const int *, const GFC_REAL_4 *, const GFC_REAL_4 *, + const int *, const GFC_REAL_4 *, const int *, + const GFC_REAL_4 *, GFC_REAL_4 *, const int *, + int, int); + +/* The order of loops is different in the case of plain matrix + multiplication C=MATMUL(A,B), and in the frequent special case where + the argument A is the temporary result of a TRANSPOSE intrinsic: + C=MATMUL(TRANSPOSE(A),B). Transposed temporaries are detected by + looking at their strides. + + The equivalent Fortran pseudo-code is: + + DIMENSION A(M,COUNT), B(COUNT,N), C(M,N) + IF (.NOT.IS_TRANSPOSED(A)) THEN + C = 0 + DO J=1,N + DO K=1,COUNT + DO I=1,M + C(I,J) = C(I,J)+A(I,K)*B(K,J) + ELSE + DO J=1,N + DO I=1,M + S = 0 + DO K=1,COUNT + S = S+A(I,K)*B(K,J) + C(I,J) = S + ENDIF +*/ + +/* If try_blas is set to a nonzero value, then the matmul function will + see if there is a way to perform the matrix multiplication by a call + to the BLAS gemm function. */ + +extern void matmul_r4 (gfc_array_r4 * const restrict retarray, + gfc_array_r4 * const restrict a, gfc_array_r4 * const restrict b, int try_blas, + int blas_limit, blas_call gemm); +export_proto(matmul_r4); + +void +matmul_r4 (gfc_array_r4 * const restrict retarray, + gfc_array_r4 * const restrict a, gfc_array_r4 * const restrict b, int try_blas, + int blas_limit, blas_call gemm) +{ + const GFC_REAL_4 * restrict abase; + const GFC_REAL_4 * restrict bbase; + GFC_REAL_4 * restrict dest; + + index_type rxstride, rystride, axstride, aystride, bxstride, bystride; + index_type x, y, n, count, xcount, ycount; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + +/* C[xcount,ycount] = A[xcount, count] * B[count,ycount] + + Either A or B (but not both) can be rank 1: + + o One-dimensional argument A is implicitly treated as a row matrix + dimensioned [1,count], so xcount=1. + + o One-dimensional argument B is implicitly treated as a column matrix + dimensioned [count, 1], so ycount=1. + */ + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_REAL_4) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + /* One-dimensional result may be addressed in the code below + either as a row or a column matrix. We want both cases to + work. */ + rxstride = rystride = retarray->dim[0].stride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + /* Treat it as a a row matrix A[1,count]. */ + axstride = a->dim[0].stride; + aystride = 1; + + xcount = 1; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + else + { + axstride = a->dim[0].stride; + aystride = a->dim[1].stride; + + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + + if (count != b->dim[0].ubound + 1 - b->dim[0].lbound) + { + if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0) + runtime_error ("dimension of array B incorrect in MATMUL intrinsic"); + } + + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + /* Treat it as a column matrix B[count,1] */ + bxstride = b->dim[0].stride; + + /* bystride should never be used for 1-dimensional b. + in case it is we want it to cause a segfault, rather than + an incorrect result. */ + bystride = 0xDEADBEEF; + ycount = 1; + } + else + { + bxstride = b->dim[0].stride; + bystride = b->dim[1].stride; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + abase = a->data; + bbase = b->data; + dest = retarray->data; + + + /* Now that everything is set up, we're performing the multiplication + itself. */ + +#define POW3(x) (((float) (x)) * ((float) (x)) * ((float) (x))) + + if (try_blas && rxstride == 1 && (axstride == 1 || aystride == 1) + && (bxstride == 1 || bystride == 1) + && (((float) xcount) * ((float) ycount) * ((float) count) + > POW3(blas_limit))) + { + const int m = xcount, n = ycount, k = count, ldc = rystride; + const GFC_REAL_4 one = 1, zero = 0; + const int lda = (axstride == 1) ? aystride : axstride, + ldb = (bxstride == 1) ? bystride : bxstride; + + if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1) + { + assert (gemm != NULL); + gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m, &n, &k, + &one, abase, &lda, bbase, &ldb, &zero, dest, &ldc, 1, 1); + return; + } + } + + if (rxstride == 1 && axstride == 1 && bxstride == 1) + { + const GFC_REAL_4 * restrict bbase_y; + GFC_REAL_4 * restrict dest_y; + const GFC_REAL_4 * restrict abase_n; + GFC_REAL_4 bbase_yn; + + if (rystride == xcount) + memset (dest, 0, (sizeof (GFC_REAL_4) * xcount * ycount)); + else + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x + y*rystride] = (GFC_REAL_4)0; + } + + for (y = 0; y < ycount; y++) + { + bbase_y = bbase + y*bystride; + dest_y = dest + y*rystride; + for (n = 0; n < count; n++) + { + abase_n = abase + n*aystride; + bbase_yn = bbase_y[n]; + for (x = 0; x < xcount; x++) + { + dest_y[x] += abase_n[x] * bbase_yn; + } + } + } + } + else if (rxstride == 1 && aystride == 1 && bxstride == 1) + { + if (GFC_DESCRIPTOR_RANK (a) != 1) + { + const GFC_REAL_4 *restrict abase_x; + const GFC_REAL_4 *restrict bbase_y; + GFC_REAL_4 *restrict dest_y; + GFC_REAL_4 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_REAL_4) 0; + for (n = 0; n < count; n++) + s += abase_x[n] * bbase_y[n]; + dest_y[x] = s; + } + } + } + else + { + const GFC_REAL_4 *restrict bbase_y; + GFC_REAL_4 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_REAL_4) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n]; + dest[y*rystride] = s; + } + } + } + else if (axstride < aystride) + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x*rxstride + y*rystride] = (GFC_REAL_4)0; + + for (y = 0; y < ycount; y++) + for (n = 0; n < count; n++) + for (x = 0; x < xcount; x++) + /* dest[x,y] += a[x,n] * b[n,y] */ + dest[x*rxstride + y*rystride] += abase[x*axstride + n*aystride] * bbase[n*bxstride + y*bystride]; + } + else if (GFC_DESCRIPTOR_RANK (a) == 1) + { + const GFC_REAL_4 *restrict bbase_y; + GFC_REAL_4 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_REAL_4) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n*bxstride]; + dest[y*rxstride] = s; + } + } + else + { + const GFC_REAL_4 *restrict abase_x; + const GFC_REAL_4 *restrict bbase_y; + GFC_REAL_4 *restrict dest_y; + GFC_REAL_4 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_REAL_4) 0; + for (n = 0; n < count; n++) + s += abase_x[n*aystride] * bbase_y[n*bxstride]; + dest_y[x*rxstride] = s; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r8.c new file mode 100644 index 0000000000..0a07243d90 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r8.c @@ -0,0 +1,379 @@ +/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) + +/* Prototype for the BLAS ?gemm subroutine, a pointer to which can be + passed to us by the front-end, in which case we'll call it for large + matrices. */ + +typedef void (*blas_call)(const char *, const char *, const int *, const int *, + const int *, const GFC_REAL_8 *, const GFC_REAL_8 *, + const int *, const GFC_REAL_8 *, const int *, + const GFC_REAL_8 *, GFC_REAL_8 *, const int *, + int, int); + +/* The order of loops is different in the case of plain matrix + multiplication C=MATMUL(A,B), and in the frequent special case where + the argument A is the temporary result of a TRANSPOSE intrinsic: + C=MATMUL(TRANSPOSE(A),B). Transposed temporaries are detected by + looking at their strides. + + The equivalent Fortran pseudo-code is: + + DIMENSION A(M,COUNT), B(COUNT,N), C(M,N) + IF (.NOT.IS_TRANSPOSED(A)) THEN + C = 0 + DO J=1,N + DO K=1,COUNT + DO I=1,M + C(I,J) = C(I,J)+A(I,K)*B(K,J) + ELSE + DO J=1,N + DO I=1,M + S = 0 + DO K=1,COUNT + S = S+A(I,K)*B(K,J) + C(I,J) = S + ENDIF +*/ + +/* If try_blas is set to a nonzero value, then the matmul function will + see if there is a way to perform the matrix multiplication by a call + to the BLAS gemm function. */ + +extern void matmul_r8 (gfc_array_r8 * const restrict retarray, + gfc_array_r8 * const restrict a, gfc_array_r8 * const restrict b, int try_blas, + int blas_limit, blas_call gemm); +export_proto(matmul_r8); + +void +matmul_r8 (gfc_array_r8 * const restrict retarray, + gfc_array_r8 * const restrict a, gfc_array_r8 * const restrict b, int try_blas, + int blas_limit, blas_call gemm) +{ + const GFC_REAL_8 * restrict abase; + const GFC_REAL_8 * restrict bbase; + GFC_REAL_8 * restrict dest; + + index_type rxstride, rystride, axstride, aystride, bxstride, bystride; + index_type x, y, n, count, xcount, ycount; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + +/* C[xcount,ycount] = A[xcount, count] * B[count,ycount] + + Either A or B (but not both) can be rank 1: + + o One-dimensional argument A is implicitly treated as a row matrix + dimensioned [1,count], so xcount=1. + + o One-dimensional argument B is implicitly treated as a column matrix + dimensioned [count, 1], so ycount=1. + */ + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof (GFC_REAL_8) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + /* One-dimensional result may be addressed in the code below + either as a row or a column matrix. We want both cases to + work. */ + rxstride = rystride = retarray->dim[0].stride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + /* Treat it as a a row matrix A[1,count]. */ + axstride = a->dim[0].stride; + aystride = 1; + + xcount = 1; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + else + { + axstride = a->dim[0].stride; + aystride = a->dim[1].stride; + + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + + if (count != b->dim[0].ubound + 1 - b->dim[0].lbound) + { + if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0) + runtime_error ("dimension of array B incorrect in MATMUL intrinsic"); + } + + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + /* Treat it as a column matrix B[count,1] */ + bxstride = b->dim[0].stride; + + /* bystride should never be used for 1-dimensional b. + in case it is we want it to cause a segfault, rather than + an incorrect result. */ + bystride = 0xDEADBEEF; + ycount = 1; + } + else + { + bxstride = b->dim[0].stride; + bystride = b->dim[1].stride; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + abase = a->data; + bbase = b->data; + dest = retarray->data; + + + /* Now that everything is set up, we're performing the multiplication + itself. */ + +#define POW3(x) (((float) (x)) * ((float) (x)) * ((float) (x))) + + if (try_blas && rxstride == 1 && (axstride == 1 || aystride == 1) + && (bxstride == 1 || bystride == 1) + && (((float) xcount) * ((float) ycount) * ((float) count) + > POW3(blas_limit))) + { + const int m = xcount, n = ycount, k = count, ldc = rystride; + const GFC_REAL_8 one = 1, zero = 0; + const int lda = (axstride == 1) ? aystride : axstride, + ldb = (bxstride == 1) ? bystride : bxstride; + + if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1) + { + assert (gemm != NULL); + gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m, &n, &k, + &one, abase, &lda, bbase, &ldb, &zero, dest, &ldc, 1, 1); + return; + } + } + + if (rxstride == 1 && axstride == 1 && bxstride == 1) + { + const GFC_REAL_8 * restrict bbase_y; + GFC_REAL_8 * restrict dest_y; + const GFC_REAL_8 * restrict abase_n; + GFC_REAL_8 bbase_yn; + + if (rystride == xcount) + memset (dest, 0, (sizeof (GFC_REAL_8) * xcount * ycount)); + else + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x + y*rystride] = (GFC_REAL_8)0; + } + + for (y = 0; y < ycount; y++) + { + bbase_y = bbase + y*bystride; + dest_y = dest + y*rystride; + for (n = 0; n < count; n++) + { + abase_n = abase + n*aystride; + bbase_yn = bbase_y[n]; + for (x = 0; x < xcount; x++) + { + dest_y[x] += abase_n[x] * bbase_yn; + } + } + } + } + else if (rxstride == 1 && aystride == 1 && bxstride == 1) + { + if (GFC_DESCRIPTOR_RANK (a) != 1) + { + const GFC_REAL_8 *restrict abase_x; + const GFC_REAL_8 *restrict bbase_y; + GFC_REAL_8 *restrict dest_y; + GFC_REAL_8 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_REAL_8) 0; + for (n = 0; n < count; n++) + s += abase_x[n] * bbase_y[n]; + dest_y[x] = s; + } + } + } + else + { + const GFC_REAL_8 *restrict bbase_y; + GFC_REAL_8 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_REAL_8) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n]; + dest[y*rystride] = s; + } + } + } + else if (axstride < aystride) + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x*rxstride + y*rystride] = (GFC_REAL_8)0; + + for (y = 0; y < ycount; y++) + for (n = 0; n < count; n++) + for (x = 0; x < xcount; x++) + /* dest[x,y] += a[x,n] * b[n,y] */ + dest[x*rxstride + y*rystride] += abase[x*axstride + n*aystride] * bbase[n*bxstride + y*bystride]; + } + else if (GFC_DESCRIPTOR_RANK (a) == 1) + { + const GFC_REAL_8 *restrict bbase_y; + GFC_REAL_8 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = (GFC_REAL_8) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n*bxstride]; + dest[y*rxstride] = s; + } + } + else + { + const GFC_REAL_8 *restrict abase_x; + const GFC_REAL_8 *restrict bbase_y; + GFC_REAL_8 *restrict dest_y; + GFC_REAL_8 s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = (GFC_REAL_8) 0; + for (n = 0; n < count; n++) + s += abase_x[n*aystride] * bbase_y[n*bxstride]; + dest_y[x*rxstride] = s; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_16_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_16_i1.c new file mode 100644 index 0000000000..b5efcedef6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_16_i1.c @@ -0,0 +1,372 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc0_16_i1 (gfc_array_i16 * const restrict retarray, + gfc_array_i1 * const restrict array); +export_proto(maxloc0_16_i1); + +void +maxloc0_16_i1 (gfc_array_i16 * const restrict retarray, + gfc_array_i1 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_1 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_1 maxval; + + maxval = (-GFC_INTEGER_1_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_16_i1 (gfc_array_i16 * const restrict, + gfc_array_i1 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_16_i1); + +void +mmaxloc0_16_i1 (gfc_array_i16 * const restrict retarray, + gfc_array_i1 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_INTEGER_1 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_1 maxval; + + maxval = (-GFC_INTEGER_1_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_16_i1 (gfc_array_i16 * const restrict, + gfc_array_i1 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_16_i1); + +void +smaxloc0_16_i1 (gfc_array_i16 * const restrict retarray, + gfc_array_i1 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + maxloc0_16_i1 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc0_16_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array); +export_proto(maxloc0_16_i16); + +void +maxloc0_16_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_16 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_16 maxval; + + maxval = (-GFC_INTEGER_16_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_16_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_16_i16); + +void +mmaxloc0_16_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_INTEGER_16 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_16 maxval; + + maxval = (-GFC_INTEGER_16_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_16_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_16_i16); + +void +smaxloc0_16_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + maxloc0_16_i16 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc0_16_i2 (gfc_array_i16 * const restrict retarray, + gfc_array_i2 * const restrict array); +export_proto(maxloc0_16_i2); + +void +maxloc0_16_i2 (gfc_array_i16 * const restrict retarray, + gfc_array_i2 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_2 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_2 maxval; + + maxval = (-GFC_INTEGER_2_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_16_i2 (gfc_array_i16 * const restrict, + gfc_array_i2 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_16_i2); + +void +mmaxloc0_16_i2 (gfc_array_i16 * const restrict retarray, + gfc_array_i2 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_INTEGER_2 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_2 maxval; + + maxval = (-GFC_INTEGER_2_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_16_i2 (gfc_array_i16 * const restrict, + gfc_array_i2 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_16_i2); + +void +smaxloc0_16_i2 (gfc_array_i16 * const restrict retarray, + gfc_array_i2 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + maxloc0_16_i2 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc0_16_i4 (gfc_array_i16 * const restrict retarray, + gfc_array_i4 * const restrict array); +export_proto(maxloc0_16_i4); + +void +maxloc0_16_i4 (gfc_array_i16 * const restrict retarray, + gfc_array_i4 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_4 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_4 maxval; + + maxval = (-GFC_INTEGER_4_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_16_i4 (gfc_array_i16 * const restrict, + gfc_array_i4 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_16_i4); + +void +mmaxloc0_16_i4 (gfc_array_i16 * const restrict retarray, + gfc_array_i4 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_INTEGER_4 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_4 maxval; + + maxval = (-GFC_INTEGER_4_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_16_i4 (gfc_array_i16 * const restrict, + gfc_array_i4 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_16_i4); + +void +smaxloc0_16_i4 (gfc_array_i16 * const restrict retarray, + gfc_array_i4 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + maxloc0_16_i4 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc0_16_i8 (gfc_array_i16 * const restrict retarray, + gfc_array_i8 * const restrict array); +export_proto(maxloc0_16_i8); + +void +maxloc0_16_i8 (gfc_array_i16 * const restrict retarray, + gfc_array_i8 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_8 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_8 maxval; + + maxval = (-GFC_INTEGER_8_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_16_i8 (gfc_array_i16 * const restrict, + gfc_array_i8 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_16_i8); + +void +mmaxloc0_16_i8 (gfc_array_i16 * const restrict retarray, + gfc_array_i8 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_INTEGER_8 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_8 maxval; + + maxval = (-GFC_INTEGER_8_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_16_i8 (gfc_array_i16 * const restrict, + gfc_array_i8 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_16_i8); + +void +smaxloc0_16_i8 (gfc_array_i16 * const restrict retarray, + gfc_array_i8 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + maxloc0_16_i8 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc0_16_r10 (gfc_array_i16 * const restrict retarray, + gfc_array_r10 * const restrict array); +export_proto(maxloc0_16_r10); + +void +maxloc0_16_r10 (gfc_array_i16 * const restrict retarray, + gfc_array_r10 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_10 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_10 maxval; + + maxval = -GFC_REAL_10_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_16_r10 (gfc_array_i16 * const restrict, + gfc_array_r10 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_16_r10); + +void +mmaxloc0_16_r10 (gfc_array_i16 * const restrict retarray, + gfc_array_r10 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_REAL_10 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_10 maxval; + + maxval = -GFC_REAL_10_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_16_r10 (gfc_array_i16 * const restrict, + gfc_array_r10 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_16_r10); + +void +smaxloc0_16_r10 (gfc_array_i16 * const restrict retarray, + gfc_array_r10 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + maxloc0_16_r10 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc0_16_r16 (gfc_array_i16 * const restrict retarray, + gfc_array_r16 * const restrict array); +export_proto(maxloc0_16_r16); + +void +maxloc0_16_r16 (gfc_array_i16 * const restrict retarray, + gfc_array_r16 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_16 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_16 maxval; + + maxval = -GFC_REAL_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_16_r16 (gfc_array_i16 * const restrict, + gfc_array_r16 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_16_r16); + +void +mmaxloc0_16_r16 (gfc_array_i16 * const restrict retarray, + gfc_array_r16 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_REAL_16 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_16 maxval; + + maxval = -GFC_REAL_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_16_r16 (gfc_array_i16 * const restrict, + gfc_array_r16 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_16_r16); + +void +smaxloc0_16_r16 (gfc_array_i16 * const restrict retarray, + gfc_array_r16 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + maxloc0_16_r16 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc0_16_r4 (gfc_array_i16 * const restrict retarray, + gfc_array_r4 * const restrict array); +export_proto(maxloc0_16_r4); + +void +maxloc0_16_r4 (gfc_array_i16 * const restrict retarray, + gfc_array_r4 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_4 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_4 maxval; + + maxval = -GFC_REAL_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_16_r4 (gfc_array_i16 * const restrict, + gfc_array_r4 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_16_r4); + +void +mmaxloc0_16_r4 (gfc_array_i16 * const restrict retarray, + gfc_array_r4 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_REAL_4 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_4 maxval; + + maxval = -GFC_REAL_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_16_r4 (gfc_array_i16 * const restrict, + gfc_array_r4 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_16_r4); + +void +smaxloc0_16_r4 (gfc_array_i16 * const restrict retarray, + gfc_array_r4 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + maxloc0_16_r4 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc0_16_r8 (gfc_array_i16 * const restrict retarray, + gfc_array_r8 * const restrict array); +export_proto(maxloc0_16_r8); + +void +maxloc0_16_r8 (gfc_array_i16 * const restrict retarray, + gfc_array_r8 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_8 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_8 maxval; + + maxval = -GFC_REAL_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_16_r8 (gfc_array_i16 * const restrict, + gfc_array_r8 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_16_r8); + +void +mmaxloc0_16_r8 (gfc_array_i16 * const restrict retarray, + gfc_array_r8 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_REAL_8 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_8 maxval; + + maxval = -GFC_REAL_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_16_r8 (gfc_array_i16 * const restrict, + gfc_array_r8 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_16_r8); + +void +smaxloc0_16_r8 (gfc_array_i16 * const restrict retarray, + gfc_array_r8 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + maxloc0_16_r8 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc0_4_i1 (gfc_array_i4 * const restrict retarray, + gfc_array_i1 * const restrict array); +export_proto(maxloc0_4_i1); + +void +maxloc0_4_i1 (gfc_array_i4 * const restrict retarray, + gfc_array_i1 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_1 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_1 maxval; + + maxval = (-GFC_INTEGER_1_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_4_i1 (gfc_array_i4 * const restrict, + gfc_array_i1 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_4_i1); + +void +mmaxloc0_4_i1 (gfc_array_i4 * const restrict retarray, + gfc_array_i1 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_INTEGER_1 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_1 maxval; + + maxval = (-GFC_INTEGER_1_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_4_i1 (gfc_array_i4 * const restrict, + gfc_array_i1 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_4_i1); + +void +smaxloc0_4_i1 (gfc_array_i4 * const restrict retarray, + gfc_array_i1 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + maxloc0_4_i1 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc0_4_i16 (gfc_array_i4 * const restrict retarray, + gfc_array_i16 * const restrict array); +export_proto(maxloc0_4_i16); + +void +maxloc0_4_i16 (gfc_array_i4 * const restrict retarray, + gfc_array_i16 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_16 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_16 maxval; + + maxval = (-GFC_INTEGER_16_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_4_i16 (gfc_array_i4 * const restrict, + gfc_array_i16 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_4_i16); + +void +mmaxloc0_4_i16 (gfc_array_i4 * const restrict retarray, + gfc_array_i16 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_INTEGER_16 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_16 maxval; + + maxval = (-GFC_INTEGER_16_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_4_i16 (gfc_array_i4 * const restrict, + gfc_array_i16 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_4_i16); + +void +smaxloc0_4_i16 (gfc_array_i4 * const restrict retarray, + gfc_array_i16 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + maxloc0_4_i16 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc0_4_i2 (gfc_array_i4 * const restrict retarray, + gfc_array_i2 * const restrict array); +export_proto(maxloc0_4_i2); + +void +maxloc0_4_i2 (gfc_array_i4 * const restrict retarray, + gfc_array_i2 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_2 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_2 maxval; + + maxval = (-GFC_INTEGER_2_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_4_i2 (gfc_array_i4 * const restrict, + gfc_array_i2 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_4_i2); + +void +mmaxloc0_4_i2 (gfc_array_i4 * const restrict retarray, + gfc_array_i2 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_INTEGER_2 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_2 maxval; + + maxval = (-GFC_INTEGER_2_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_4_i2 (gfc_array_i4 * const restrict, + gfc_array_i2 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_4_i2); + +void +smaxloc0_4_i2 (gfc_array_i4 * const restrict retarray, + gfc_array_i2 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + maxloc0_4_i2 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc0_4_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array); +export_proto(maxloc0_4_i4); + +void +maxloc0_4_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_4 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_4 maxval; + + maxval = (-GFC_INTEGER_4_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_4_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_4_i4); + +void +mmaxloc0_4_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_INTEGER_4 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_4 maxval; + + maxval = (-GFC_INTEGER_4_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_4_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_4_i4); + +void +smaxloc0_4_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + maxloc0_4_i4 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc0_4_i8 (gfc_array_i4 * const restrict retarray, + gfc_array_i8 * const restrict array); +export_proto(maxloc0_4_i8); + +void +maxloc0_4_i8 (gfc_array_i4 * const restrict retarray, + gfc_array_i8 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_8 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_8 maxval; + + maxval = (-GFC_INTEGER_8_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_4_i8 (gfc_array_i4 * const restrict, + gfc_array_i8 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_4_i8); + +void +mmaxloc0_4_i8 (gfc_array_i4 * const restrict retarray, + gfc_array_i8 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_INTEGER_8 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_8 maxval; + + maxval = (-GFC_INTEGER_8_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_4_i8 (gfc_array_i4 * const restrict, + gfc_array_i8 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_4_i8); + +void +smaxloc0_4_i8 (gfc_array_i4 * const restrict retarray, + gfc_array_i8 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + maxloc0_4_i8 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc0_4_r10 (gfc_array_i4 * const restrict retarray, + gfc_array_r10 * const restrict array); +export_proto(maxloc0_4_r10); + +void +maxloc0_4_r10 (gfc_array_i4 * const restrict retarray, + gfc_array_r10 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_10 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_10 maxval; + + maxval = -GFC_REAL_10_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_4_r10 (gfc_array_i4 * const restrict, + gfc_array_r10 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_4_r10); + +void +mmaxloc0_4_r10 (gfc_array_i4 * const restrict retarray, + gfc_array_r10 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_REAL_10 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_10 maxval; + + maxval = -GFC_REAL_10_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_4_r10 (gfc_array_i4 * const restrict, + gfc_array_r10 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_4_r10); + +void +smaxloc0_4_r10 (gfc_array_i4 * const restrict retarray, + gfc_array_r10 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + maxloc0_4_r10 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc0_4_r16 (gfc_array_i4 * const restrict retarray, + gfc_array_r16 * const restrict array); +export_proto(maxloc0_4_r16); + +void +maxloc0_4_r16 (gfc_array_i4 * const restrict retarray, + gfc_array_r16 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_16 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_16 maxval; + + maxval = -GFC_REAL_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_4_r16 (gfc_array_i4 * const restrict, + gfc_array_r16 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_4_r16); + +void +mmaxloc0_4_r16 (gfc_array_i4 * const restrict retarray, + gfc_array_r16 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_REAL_16 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_16 maxval; + + maxval = -GFC_REAL_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_4_r16 (gfc_array_i4 * const restrict, + gfc_array_r16 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_4_r16); + +void +smaxloc0_4_r16 (gfc_array_i4 * const restrict retarray, + gfc_array_r16 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + maxloc0_4_r16 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc0_4_r4 (gfc_array_i4 * const restrict retarray, + gfc_array_r4 * const restrict array); +export_proto(maxloc0_4_r4); + +void +maxloc0_4_r4 (gfc_array_i4 * const restrict retarray, + gfc_array_r4 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_4 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_4 maxval; + + maxval = -GFC_REAL_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_4_r4 (gfc_array_i4 * const restrict, + gfc_array_r4 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_4_r4); + +void +mmaxloc0_4_r4 (gfc_array_i4 * const restrict retarray, + gfc_array_r4 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_REAL_4 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_4 maxval; + + maxval = -GFC_REAL_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_4_r4 (gfc_array_i4 * const restrict, + gfc_array_r4 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_4_r4); + +void +smaxloc0_4_r4 (gfc_array_i4 * const restrict retarray, + gfc_array_r4 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + maxloc0_4_r4 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc0_4_r8 (gfc_array_i4 * const restrict retarray, + gfc_array_r8 * const restrict array); +export_proto(maxloc0_4_r8); + +void +maxloc0_4_r8 (gfc_array_i4 * const restrict retarray, + gfc_array_r8 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_8 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_8 maxval; + + maxval = -GFC_REAL_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_4_r8 (gfc_array_i4 * const restrict, + gfc_array_r8 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_4_r8); + +void +mmaxloc0_4_r8 (gfc_array_i4 * const restrict retarray, + gfc_array_r8 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_REAL_8 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_8 maxval; + + maxval = -GFC_REAL_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_4_r8 (gfc_array_i4 * const restrict, + gfc_array_r8 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_4_r8); + +void +smaxloc0_4_r8 (gfc_array_i4 * const restrict retarray, + gfc_array_r8 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + maxloc0_4_r8 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc0_8_i1 (gfc_array_i8 * const restrict retarray, + gfc_array_i1 * const restrict array); +export_proto(maxloc0_8_i1); + +void +maxloc0_8_i1 (gfc_array_i8 * const restrict retarray, + gfc_array_i1 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_1 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_1 maxval; + + maxval = (-GFC_INTEGER_1_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_8_i1 (gfc_array_i8 * const restrict, + gfc_array_i1 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_8_i1); + +void +mmaxloc0_8_i1 (gfc_array_i8 * const restrict retarray, + gfc_array_i1 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_INTEGER_1 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_1 maxval; + + maxval = (-GFC_INTEGER_1_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_8_i1 (gfc_array_i8 * const restrict, + gfc_array_i1 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_8_i1); + +void +smaxloc0_8_i1 (gfc_array_i8 * const restrict retarray, + gfc_array_i1 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + maxloc0_8_i1 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc0_8_i16 (gfc_array_i8 * const restrict retarray, + gfc_array_i16 * const restrict array); +export_proto(maxloc0_8_i16); + +void +maxloc0_8_i16 (gfc_array_i8 * const restrict retarray, + gfc_array_i16 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_16 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_16 maxval; + + maxval = (-GFC_INTEGER_16_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_8_i16 (gfc_array_i8 * const restrict, + gfc_array_i16 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_8_i16); + +void +mmaxloc0_8_i16 (gfc_array_i8 * const restrict retarray, + gfc_array_i16 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_INTEGER_16 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_16 maxval; + + maxval = (-GFC_INTEGER_16_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_8_i16 (gfc_array_i8 * const restrict, + gfc_array_i16 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_8_i16); + +void +smaxloc0_8_i16 (gfc_array_i8 * const restrict retarray, + gfc_array_i16 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + maxloc0_8_i16 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc0_8_i2 (gfc_array_i8 * const restrict retarray, + gfc_array_i2 * const restrict array); +export_proto(maxloc0_8_i2); + +void +maxloc0_8_i2 (gfc_array_i8 * const restrict retarray, + gfc_array_i2 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_2 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_2 maxval; + + maxval = (-GFC_INTEGER_2_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_8_i2 (gfc_array_i8 * const restrict, + gfc_array_i2 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_8_i2); + +void +mmaxloc0_8_i2 (gfc_array_i8 * const restrict retarray, + gfc_array_i2 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_INTEGER_2 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_2 maxval; + + maxval = (-GFC_INTEGER_2_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_8_i2 (gfc_array_i8 * const restrict, + gfc_array_i2 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_8_i2); + +void +smaxloc0_8_i2 (gfc_array_i8 * const restrict retarray, + gfc_array_i2 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + maxloc0_8_i2 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc0_8_i4 (gfc_array_i8 * const restrict retarray, + gfc_array_i4 * const restrict array); +export_proto(maxloc0_8_i4); + +void +maxloc0_8_i4 (gfc_array_i8 * const restrict retarray, + gfc_array_i4 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_4 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_4 maxval; + + maxval = (-GFC_INTEGER_4_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_8_i4 (gfc_array_i8 * const restrict, + gfc_array_i4 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_8_i4); + +void +mmaxloc0_8_i4 (gfc_array_i8 * const restrict retarray, + gfc_array_i4 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_INTEGER_4 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_4 maxval; + + maxval = (-GFC_INTEGER_4_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_8_i4 (gfc_array_i8 * const restrict, + gfc_array_i4 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_8_i4); + +void +smaxloc0_8_i4 (gfc_array_i8 * const restrict retarray, + gfc_array_i4 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + maxloc0_8_i4 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc0_8_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array); +export_proto(maxloc0_8_i8); + +void +maxloc0_8_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_8 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_8 maxval; + + maxval = (-GFC_INTEGER_8_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_8_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_8_i8); + +void +mmaxloc0_8_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_INTEGER_8 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_8 maxval; + + maxval = (-GFC_INTEGER_8_HUGE-1); + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_8_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_8_i8); + +void +smaxloc0_8_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + maxloc0_8_i8 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc0_8_r10 (gfc_array_i8 * const restrict retarray, + gfc_array_r10 * const restrict array); +export_proto(maxloc0_8_r10); + +void +maxloc0_8_r10 (gfc_array_i8 * const restrict retarray, + gfc_array_r10 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_10 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_10 maxval; + + maxval = -GFC_REAL_10_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_8_r10 (gfc_array_i8 * const restrict, + gfc_array_r10 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_8_r10); + +void +mmaxloc0_8_r10 (gfc_array_i8 * const restrict retarray, + gfc_array_r10 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_REAL_10 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_10 maxval; + + maxval = -GFC_REAL_10_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_8_r10 (gfc_array_i8 * const restrict, + gfc_array_r10 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_8_r10); + +void +smaxloc0_8_r10 (gfc_array_i8 * const restrict retarray, + gfc_array_r10 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + maxloc0_8_r10 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc0_8_r16 (gfc_array_i8 * const restrict retarray, + gfc_array_r16 * const restrict array); +export_proto(maxloc0_8_r16); + +void +maxloc0_8_r16 (gfc_array_i8 * const restrict retarray, + gfc_array_r16 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_16 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_16 maxval; + + maxval = -GFC_REAL_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_8_r16 (gfc_array_i8 * const restrict, + gfc_array_r16 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_8_r16); + +void +mmaxloc0_8_r16 (gfc_array_i8 * const restrict retarray, + gfc_array_r16 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_REAL_16 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_16 maxval; + + maxval = -GFC_REAL_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_8_r16 (gfc_array_i8 * const restrict, + gfc_array_r16 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_8_r16); + +void +smaxloc0_8_r16 (gfc_array_i8 * const restrict retarray, + gfc_array_r16 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + maxloc0_8_r16 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc0_8_r4 (gfc_array_i8 * const restrict retarray, + gfc_array_r4 * const restrict array); +export_proto(maxloc0_8_r4); + +void +maxloc0_8_r4 (gfc_array_i8 * const restrict retarray, + gfc_array_r4 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_4 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_4 maxval; + + maxval = -GFC_REAL_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_8_r4 (gfc_array_i8 * const restrict, + gfc_array_r4 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_8_r4); + +void +mmaxloc0_8_r4 (gfc_array_i8 * const restrict retarray, + gfc_array_r4 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_REAL_4 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_4 maxval; + + maxval = -GFC_REAL_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_8_r4 (gfc_array_i8 * const restrict, + gfc_array_r4 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_8_r4); + +void +smaxloc0_8_r4 (gfc_array_i8 * const restrict retarray, + gfc_array_r4 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + maxloc0_8_r4 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc0_8_r8 (gfc_array_i8 * const restrict retarray, + gfc_array_r8 * const restrict array); +export_proto(maxloc0_8_r8); + +void +maxloc0_8_r8 (gfc_array_i8 * const restrict retarray, + gfc_array_r8 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_8 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_8 maxval; + + maxval = -GFC_REAL_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mmaxloc0_8_r8 (gfc_array_i8 * const restrict, + gfc_array_r8 * const restrict, gfc_array_l1 * const restrict); +export_proto(mmaxloc0_8_r8); + +void +mmaxloc0_8_r8 (gfc_array_i8 * const restrict retarray, + gfc_array_r8 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_REAL_8 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MAXLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_8 maxval; + + maxval = -GFC_REAL_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void smaxloc0_8_r8 (gfc_array_i8 * const restrict, + gfc_array_r8 * const restrict, GFC_LOGICAL_4 *); +export_proto(smaxloc0_8_r8); + +void +smaxloc0_8_r8 (gfc_array_i8 * const restrict retarray, + gfc_array_r8 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + maxloc0_8_r8 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MAXLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc1_16_i1 (gfc_array_i16 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict); +export_proto(maxloc1_16_i1); + +void +maxloc1_16_i1 (gfc_array_i16 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_1 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_1 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_INTEGER_1 maxval; + maxval = (-GFC_INTEGER_1_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_16_i1 (gfc_array_i16 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_16_i1); + +void +mmaxloc1_16_i1 (gfc_array_i16 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_INTEGER_1 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_1 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_1 maxval; + maxval = (-GFC_INTEGER_1_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_16_i1 (gfc_array_i16 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_16_i1); + +void +smaxloc1_16_i1 (gfc_array_i16 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_16_i1 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i16.c new file mode 100644 index 0000000000..3a0a343c33 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i16.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc1_16_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict); +export_proto(maxloc1_16_i16); + +void +maxloc1_16_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_16 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_16 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_INTEGER_16 maxval; + maxval = (-GFC_INTEGER_16_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_16_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_16_i16); + +void +mmaxloc1_16_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_INTEGER_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_16 maxval; + maxval = (-GFC_INTEGER_16_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_16_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_16_i16); + +void +smaxloc1_16_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_16_i16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i2.c new file mode 100644 index 0000000000..4d87d8e145 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i2.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc1_16_i2 (gfc_array_i16 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict); +export_proto(maxloc1_16_i2); + +void +maxloc1_16_i2 (gfc_array_i16 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_2 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_2 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_INTEGER_2 maxval; + maxval = (-GFC_INTEGER_2_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_16_i2 (gfc_array_i16 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_16_i2); + +void +mmaxloc1_16_i2 (gfc_array_i16 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_INTEGER_2 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_2 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_2 maxval; + maxval = (-GFC_INTEGER_2_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_16_i2 (gfc_array_i16 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_16_i2); + +void +smaxloc1_16_i2 (gfc_array_i16 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_16_i2 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i4.c new file mode 100644 index 0000000000..d1ae2f0cae --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i4.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc1_16_i4 (gfc_array_i16 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict); +export_proto(maxloc1_16_i4); + +void +maxloc1_16_i4 (gfc_array_i16 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_4 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_4 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_INTEGER_4 maxval; + maxval = (-GFC_INTEGER_4_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_16_i4 (gfc_array_i16 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_16_i4); + +void +mmaxloc1_16_i4 (gfc_array_i16 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_INTEGER_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_4 maxval; + maxval = (-GFC_INTEGER_4_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_16_i4 (gfc_array_i16 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_16_i4); + +void +smaxloc1_16_i4 (gfc_array_i16 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_16_i4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i8.c new file mode 100644 index 0000000000..1d60d10dbd --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i8.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc1_16_i8 (gfc_array_i16 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict); +export_proto(maxloc1_16_i8); + +void +maxloc1_16_i8 (gfc_array_i16 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_8 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_8 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_INTEGER_8 maxval; + maxval = (-GFC_INTEGER_8_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_16_i8 (gfc_array_i16 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_16_i8); + +void +mmaxloc1_16_i8 (gfc_array_i16 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_INTEGER_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_8 maxval; + maxval = (-GFC_INTEGER_8_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_16_i8 (gfc_array_i16 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_16_i8); + +void +smaxloc1_16_i8 (gfc_array_i16 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_16_i8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r10.c new file mode 100644 index 0000000000..e0599714c4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r10.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc1_16_r10 (gfc_array_i16 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict); +export_proto(maxloc1_16_r10); + +void +maxloc1_16_r10 (gfc_array_i16 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_10 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_10 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_REAL_10 maxval; + maxval = -GFC_REAL_10_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_16_r10 (gfc_array_i16 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_16_r10); + +void +mmaxloc1_16_r10 (gfc_array_i16 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_REAL_10 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_10 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_REAL_10 maxval; + maxval = -GFC_REAL_10_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_16_r10 (gfc_array_i16 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_16_r10); + +void +smaxloc1_16_r10 (gfc_array_i16 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_16_r10 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r16.c new file mode 100644 index 0000000000..3381560551 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r16.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc1_16_r16 (gfc_array_i16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict); +export_proto(maxloc1_16_r16); + +void +maxloc1_16_r16 (gfc_array_i16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_16 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_16 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_REAL_16 maxval; + maxval = -GFC_REAL_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_16_r16 (gfc_array_i16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_16_r16); + +void +mmaxloc1_16_r16 (gfc_array_i16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_REAL_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_REAL_16 maxval; + maxval = -GFC_REAL_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_16_r16 (gfc_array_i16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_16_r16); + +void +smaxloc1_16_r16 (gfc_array_i16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_16_r16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r4.c new file mode 100644 index 0000000000..2defdd1f75 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r4.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc1_16_r4 (gfc_array_i16 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict); +export_proto(maxloc1_16_r4); + +void +maxloc1_16_r4 (gfc_array_i16 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_4 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_4 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_REAL_4 maxval; + maxval = -GFC_REAL_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_16_r4 (gfc_array_i16 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_16_r4); + +void +mmaxloc1_16_r4 (gfc_array_i16 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_REAL_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_REAL_4 maxval; + maxval = -GFC_REAL_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_16_r4 (gfc_array_i16 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_16_r4); + +void +smaxloc1_16_r4 (gfc_array_i16 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_16_r4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r8.c new file mode 100644 index 0000000000..a3293163dc --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r8.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxloc1_16_r8 (gfc_array_i16 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict); +export_proto(maxloc1_16_r8); + +void +maxloc1_16_r8 (gfc_array_i16 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_8 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_8 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_REAL_8 maxval; + maxval = -GFC_REAL_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_16_r8 (gfc_array_i16 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_16_r8); + +void +mmaxloc1_16_r8 (gfc_array_i16 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_REAL_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_REAL_8 maxval; + maxval = -GFC_REAL_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_16_r8 (gfc_array_i16 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_16_r8); + +void +smaxloc1_16_r8 (gfc_array_i16 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_16_r8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i1.c new file mode 100644 index 0000000000..4281921b25 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i1.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc1_4_i1 (gfc_array_i4 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict); +export_proto(maxloc1_4_i1); + +void +maxloc1_4_i1 (gfc_array_i4 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_1 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_1 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_INTEGER_1 maxval; + maxval = (-GFC_INTEGER_1_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_4_i1 (gfc_array_i4 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_4_i1); + +void +mmaxloc1_4_i1 (gfc_array_i4 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_INTEGER_1 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_1 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_1 maxval; + maxval = (-GFC_INTEGER_1_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_4_i1 (gfc_array_i4 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_4_i1); + +void +smaxloc1_4_i1 (gfc_array_i4 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_4_i1 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i16.c new file mode 100644 index 0000000000..34fcb565d2 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i16.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc1_4_i16 (gfc_array_i4 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict); +export_proto(maxloc1_4_i16); + +void +maxloc1_4_i16 (gfc_array_i4 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_16 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_16 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_INTEGER_16 maxval; + maxval = (-GFC_INTEGER_16_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_4_i16 (gfc_array_i4 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_4_i16); + +void +mmaxloc1_4_i16 (gfc_array_i4 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_INTEGER_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_16 maxval; + maxval = (-GFC_INTEGER_16_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_4_i16 (gfc_array_i4 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_4_i16); + +void +smaxloc1_4_i16 (gfc_array_i4 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_4_i16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i2.c new file mode 100644 index 0000000000..dbd7d2f56e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i2.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc1_4_i2 (gfc_array_i4 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict); +export_proto(maxloc1_4_i2); + +void +maxloc1_4_i2 (gfc_array_i4 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_2 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_2 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_INTEGER_2 maxval; + maxval = (-GFC_INTEGER_2_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_4_i2 (gfc_array_i4 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_4_i2); + +void +mmaxloc1_4_i2 (gfc_array_i4 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_INTEGER_2 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_2 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_2 maxval; + maxval = (-GFC_INTEGER_2_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_4_i2 (gfc_array_i4 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_4_i2); + +void +smaxloc1_4_i2 (gfc_array_i4 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_4_i2 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i4.c new file mode 100644 index 0000000000..29d04de8ea --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i4.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc1_4_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict); +export_proto(maxloc1_4_i4); + +void +maxloc1_4_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_4 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_4 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_INTEGER_4 maxval; + maxval = (-GFC_INTEGER_4_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_4_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_4_i4); + +void +mmaxloc1_4_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_INTEGER_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_4 maxval; + maxval = (-GFC_INTEGER_4_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_4_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_4_i4); + +void +smaxloc1_4_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_4_i4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i8.c new file mode 100644 index 0000000000..823af365ff --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i8.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc1_4_i8 (gfc_array_i4 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict); +export_proto(maxloc1_4_i8); + +void +maxloc1_4_i8 (gfc_array_i4 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_8 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_8 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_INTEGER_8 maxval; + maxval = (-GFC_INTEGER_8_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_4_i8 (gfc_array_i4 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_4_i8); + +void +mmaxloc1_4_i8 (gfc_array_i4 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_INTEGER_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_8 maxval; + maxval = (-GFC_INTEGER_8_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_4_i8 (gfc_array_i4 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_4_i8); + +void +smaxloc1_4_i8 (gfc_array_i4 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_4_i8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r10.c new file mode 100644 index 0000000000..a212e59b5d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r10.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc1_4_r10 (gfc_array_i4 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict); +export_proto(maxloc1_4_r10); + +void +maxloc1_4_r10 (gfc_array_i4 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_10 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_10 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_REAL_10 maxval; + maxval = -GFC_REAL_10_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_4_r10 (gfc_array_i4 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_4_r10); + +void +mmaxloc1_4_r10 (gfc_array_i4 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_REAL_10 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_10 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_REAL_10 maxval; + maxval = -GFC_REAL_10_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_4_r10 (gfc_array_i4 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_4_r10); + +void +smaxloc1_4_r10 (gfc_array_i4 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_4_r10 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r16.c new file mode 100644 index 0000000000..db3301c2a8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r16.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc1_4_r16 (gfc_array_i4 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict); +export_proto(maxloc1_4_r16); + +void +maxloc1_4_r16 (gfc_array_i4 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_16 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_16 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_REAL_16 maxval; + maxval = -GFC_REAL_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_4_r16 (gfc_array_i4 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_4_r16); + +void +mmaxloc1_4_r16 (gfc_array_i4 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_REAL_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_REAL_16 maxval; + maxval = -GFC_REAL_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_4_r16 (gfc_array_i4 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_4_r16); + +void +smaxloc1_4_r16 (gfc_array_i4 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_4_r16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r4.c new file mode 100644 index 0000000000..a0099f695e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r4.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc1_4_r4 (gfc_array_i4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict); +export_proto(maxloc1_4_r4); + +void +maxloc1_4_r4 (gfc_array_i4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_4 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_4 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_REAL_4 maxval; + maxval = -GFC_REAL_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_4_r4 (gfc_array_i4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_4_r4); + +void +mmaxloc1_4_r4 (gfc_array_i4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_REAL_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_REAL_4 maxval; + maxval = -GFC_REAL_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_4_r4 (gfc_array_i4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_4_r4); + +void +smaxloc1_4_r4 (gfc_array_i4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_4_r4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r8.c new file mode 100644 index 0000000000..bb7876f224 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r8.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxloc1_4_r8 (gfc_array_i4 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict); +export_proto(maxloc1_4_r8); + +void +maxloc1_4_r8 (gfc_array_i4 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_8 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_8 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_REAL_8 maxval; + maxval = -GFC_REAL_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_4_r8 (gfc_array_i4 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_4_r8); + +void +mmaxloc1_4_r8 (gfc_array_i4 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_REAL_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_REAL_8 maxval; + maxval = -GFC_REAL_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_4_r8 (gfc_array_i4 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_4_r8); + +void +smaxloc1_4_r8 (gfc_array_i4 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_4_r8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i1.c new file mode 100644 index 0000000000..899b4688c1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i1.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc1_8_i1 (gfc_array_i8 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict); +export_proto(maxloc1_8_i1); + +void +maxloc1_8_i1 (gfc_array_i8 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_1 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_1 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_INTEGER_1 maxval; + maxval = (-GFC_INTEGER_1_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_8_i1 (gfc_array_i8 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_8_i1); + +void +mmaxloc1_8_i1 (gfc_array_i8 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_INTEGER_1 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_1 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_1 maxval; + maxval = (-GFC_INTEGER_1_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_8_i1 (gfc_array_i8 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_8_i1); + +void +smaxloc1_8_i1 (gfc_array_i8 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_8_i1 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i16.c new file mode 100644 index 0000000000..c5f7272a03 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i16.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc1_8_i16 (gfc_array_i8 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict); +export_proto(maxloc1_8_i16); + +void +maxloc1_8_i16 (gfc_array_i8 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_16 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_16 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_INTEGER_16 maxval; + maxval = (-GFC_INTEGER_16_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_8_i16 (gfc_array_i8 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_8_i16); + +void +mmaxloc1_8_i16 (gfc_array_i8 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_INTEGER_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_16 maxval; + maxval = (-GFC_INTEGER_16_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_8_i16 (gfc_array_i8 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_8_i16); + +void +smaxloc1_8_i16 (gfc_array_i8 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_8_i16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i2.c new file mode 100644 index 0000000000..f20435aec4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i2.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc1_8_i2 (gfc_array_i8 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict); +export_proto(maxloc1_8_i2); + +void +maxloc1_8_i2 (gfc_array_i8 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_2 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_2 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_INTEGER_2 maxval; + maxval = (-GFC_INTEGER_2_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_8_i2 (gfc_array_i8 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_8_i2); + +void +mmaxloc1_8_i2 (gfc_array_i8 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_INTEGER_2 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_2 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_2 maxval; + maxval = (-GFC_INTEGER_2_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_8_i2 (gfc_array_i8 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_8_i2); + +void +smaxloc1_8_i2 (gfc_array_i8 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_8_i2 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i4.c new file mode 100644 index 0000000000..ab17f22d96 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i4.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc1_8_i4 (gfc_array_i8 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict); +export_proto(maxloc1_8_i4); + +void +maxloc1_8_i4 (gfc_array_i8 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_4 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_4 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_INTEGER_4 maxval; + maxval = (-GFC_INTEGER_4_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_8_i4 (gfc_array_i8 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_8_i4); + +void +mmaxloc1_8_i4 (gfc_array_i8 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_INTEGER_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_4 maxval; + maxval = (-GFC_INTEGER_4_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_8_i4 (gfc_array_i8 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_8_i4); + +void +smaxloc1_8_i4 (gfc_array_i8 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_8_i4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i8.c new file mode 100644 index 0000000000..eb72ab6851 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i8.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc1_8_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict); +export_proto(maxloc1_8_i8); + +void +maxloc1_8_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_8 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_8 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_INTEGER_8 maxval; + maxval = (-GFC_INTEGER_8_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_8_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_8_i8); + +void +mmaxloc1_8_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_INTEGER_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_8 maxval; + maxval = (-GFC_INTEGER_8_HUGE-1); + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_8_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_8_i8); + +void +smaxloc1_8_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_8_i8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r10.c new file mode 100644 index 0000000000..8758d3129a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r10.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc1_8_r10 (gfc_array_i8 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict); +export_proto(maxloc1_8_r10); + +void +maxloc1_8_r10 (gfc_array_i8 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_10 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_10 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_REAL_10 maxval; + maxval = -GFC_REAL_10_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_8_r10 (gfc_array_i8 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_8_r10); + +void +mmaxloc1_8_r10 (gfc_array_i8 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_REAL_10 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_10 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_REAL_10 maxval; + maxval = -GFC_REAL_10_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_8_r10 (gfc_array_i8 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_8_r10); + +void +smaxloc1_8_r10 (gfc_array_i8 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_8_r10 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r16.c new file mode 100644 index 0000000000..290929c953 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r16.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc1_8_r16 (gfc_array_i8 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict); +export_proto(maxloc1_8_r16); + +void +maxloc1_8_r16 (gfc_array_i8 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_16 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_16 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_REAL_16 maxval; + maxval = -GFC_REAL_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_8_r16 (gfc_array_i8 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_8_r16); + +void +mmaxloc1_8_r16 (gfc_array_i8 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_REAL_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_REAL_16 maxval; + maxval = -GFC_REAL_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_8_r16 (gfc_array_i8 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_8_r16); + +void +smaxloc1_8_r16 (gfc_array_i8 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_8_r16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r4.c new file mode 100644 index 0000000000..a59051ecd2 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r4.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc1_8_r4 (gfc_array_i8 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict); +export_proto(maxloc1_8_r4); + +void +maxloc1_8_r4 (gfc_array_i8 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_4 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_4 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_REAL_4 maxval; + maxval = -GFC_REAL_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_8_r4 (gfc_array_i8 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_8_r4); + +void +mmaxloc1_8_r4 (gfc_array_i8 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_REAL_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_REAL_4 maxval; + maxval = -GFC_REAL_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_8_r4 (gfc_array_i8 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_8_r4); + +void +smaxloc1_8_r4 (gfc_array_i8 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_8_r4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r8.c new file mode 100644 index 0000000000..88410eae64 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r8.c @@ -0,0 +1,557 @@ +/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxloc1_8_r8 (gfc_array_i8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict); +export_proto(maxloc1_8_r8); + +void +maxloc1_8_r8 (gfc_array_i8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_8 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_8 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_REAL_8 maxval; + maxval = -GFC_REAL_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > maxval || !result) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxloc1_8_r8 (gfc_array_i8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxloc1_8_r8); + +void +mmaxloc1_8_r8 (gfc_array_i8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_REAL_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_REAL_8 maxval; + maxval = -GFC_REAL_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxloc1_8_r8 (gfc_array_i8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxloc1_8_r8); + +void +smaxloc1_8_r8 (gfc_array_i8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxloc1_8_r8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i1.c new file mode 100644 index 0000000000..c190e067b0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i1.c @@ -0,0 +1,546 @@ +/* Implementation of the MAXVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_1) + + +extern void maxval_i1 (gfc_array_i1 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict); +export_proto(maxval_i1); + +void +maxval_i1 (gfc_array_i1 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_1 * restrict base; + GFC_INTEGER_1 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_1) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_1 * restrict src; + GFC_INTEGER_1 result; + src = base; + { + + result = (-GFC_INTEGER_1_HUGE-1); + if (len <= 0) + *dest = (-GFC_INTEGER_1_HUGE-1); + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxval_i1 (gfc_array_i1 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxval_i1); + +void +mmaxval_i1 (gfc_array_i1 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_1 * restrict dest; + const GFC_INTEGER_1 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_1) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_1 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_1 result; + src = base; + msrc = mbase; + { + + result = (-GFC_INTEGER_1_HUGE-1); + if (len <= 0) + *dest = (-GFC_INTEGER_1_HUGE-1); + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxval_i1 (gfc_array_i1 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxval_i1); + +void +smaxval_i1 (gfc_array_i1 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_1 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxval_i1 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_1) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = (-GFC_INTEGER_1_HUGE-1); + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i16.c new file mode 100644 index 0000000000..6b872f98ca --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i16.c @@ -0,0 +1,546 @@ +/* Implementation of the MAXVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_16) + + +extern void maxval_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict); +export_proto(maxval_i16); + +void +maxval_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_16 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_16 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + result = (-GFC_INTEGER_16_HUGE-1); + if (len <= 0) + *dest = (-GFC_INTEGER_16_HUGE-1); + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxval_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxval_i16); + +void +mmaxval_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_INTEGER_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + result = (-GFC_INTEGER_16_HUGE-1); + if (len <= 0) + *dest = (-GFC_INTEGER_16_HUGE-1); + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxval_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxval_i16); + +void +smaxval_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxval_i16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = (-GFC_INTEGER_16_HUGE-1); + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i2.c new file mode 100644 index 0000000000..67b8994cd3 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i2.c @@ -0,0 +1,546 @@ +/* Implementation of the MAXVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_2) + + +extern void maxval_i2 (gfc_array_i2 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict); +export_proto(maxval_i2); + +void +maxval_i2 (gfc_array_i2 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_2 * restrict base; + GFC_INTEGER_2 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_2) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_2 * restrict src; + GFC_INTEGER_2 result; + src = base; + { + + result = (-GFC_INTEGER_2_HUGE-1); + if (len <= 0) + *dest = (-GFC_INTEGER_2_HUGE-1); + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxval_i2 (gfc_array_i2 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxval_i2); + +void +mmaxval_i2 (gfc_array_i2 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_2 * restrict dest; + const GFC_INTEGER_2 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_2) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_2 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_2 result; + src = base; + msrc = mbase; + { + + result = (-GFC_INTEGER_2_HUGE-1); + if (len <= 0) + *dest = (-GFC_INTEGER_2_HUGE-1); + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxval_i2 (gfc_array_i2 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxval_i2); + +void +smaxval_i2 (gfc_array_i2 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_2 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxval_i2 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_2) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = (-GFC_INTEGER_2_HUGE-1); + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i4.c new file mode 100644 index 0000000000..e7fb5bc5af --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i4.c @@ -0,0 +1,546 @@ +/* Implementation of the MAXVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_4) + + +extern void maxval_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict); +export_proto(maxval_i4); + +void +maxval_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_4 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_4 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + result = (-GFC_INTEGER_4_HUGE-1); + if (len <= 0) + *dest = (-GFC_INTEGER_4_HUGE-1); + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxval_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxval_i4); + +void +mmaxval_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_INTEGER_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + result = (-GFC_INTEGER_4_HUGE-1); + if (len <= 0) + *dest = (-GFC_INTEGER_4_HUGE-1); + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxval_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxval_i4); + +void +smaxval_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxval_i4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = (-GFC_INTEGER_4_HUGE-1); + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i8.c new file mode 100644 index 0000000000..b90e1105e5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i8.c @@ -0,0 +1,546 @@ +/* Implementation of the MAXVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_8) + + +extern void maxval_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict); +export_proto(maxval_i8); + +void +maxval_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_8 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_8 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + result = (-GFC_INTEGER_8_HUGE-1); + if (len <= 0) + *dest = (-GFC_INTEGER_8_HUGE-1); + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxval_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxval_i8); + +void +mmaxval_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_INTEGER_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + result = (-GFC_INTEGER_8_HUGE-1); + if (len <= 0) + *dest = (-GFC_INTEGER_8_HUGE-1); + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxval_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxval_i8); + +void +smaxval_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxval_i8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = (-GFC_INTEGER_8_HUGE-1); + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r10.c new file mode 100644 index 0000000000..85851904ff --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r10.c @@ -0,0 +1,546 @@ +/* Implementation of the MAXVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_REAL_10) + + +extern void maxval_r10 (gfc_array_r10 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict); +export_proto(maxval_r10); + +void +maxval_r10 (gfc_array_r10 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_10 * restrict base; + GFC_REAL_10 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_10 * restrict src; + GFC_REAL_10 result; + src = base; + { + + result = -GFC_REAL_10_HUGE; + if (len <= 0) + *dest = -GFC_REAL_10_HUGE; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxval_r10 (gfc_array_r10 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxval_r10); + +void +mmaxval_r10 (gfc_array_r10 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_10 * restrict dest; + const GFC_REAL_10 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_10 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_10 result; + src = base; + msrc = mbase; + { + + result = -GFC_REAL_10_HUGE; + if (len <= 0) + *dest = -GFC_REAL_10_HUGE; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxval_r10 (gfc_array_r10 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxval_r10); + +void +smaxval_r10 (gfc_array_r10 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_10 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxval_r10 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = -GFC_REAL_10_HUGE; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r16.c new file mode 100644 index 0000000000..d9c456646a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r16.c @@ -0,0 +1,546 @@ +/* Implementation of the MAXVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_REAL_16) + + +extern void maxval_r16 (gfc_array_r16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict); +export_proto(maxval_r16); + +void +maxval_r16 (gfc_array_r16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_16 * restrict base; + GFC_REAL_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_16 * restrict src; + GFC_REAL_16 result; + src = base; + { + + result = -GFC_REAL_16_HUGE; + if (len <= 0) + *dest = -GFC_REAL_16_HUGE; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxval_r16 (gfc_array_r16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxval_r16); + +void +mmaxval_r16 (gfc_array_r16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_16 * restrict dest; + const GFC_REAL_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_16 result; + src = base; + msrc = mbase; + { + + result = -GFC_REAL_16_HUGE; + if (len <= 0) + *dest = -GFC_REAL_16_HUGE; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxval_r16 (gfc_array_r16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxval_r16); + +void +smaxval_r16 (gfc_array_r16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxval_r16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = -GFC_REAL_16_HUGE; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r4.c new file mode 100644 index 0000000000..1102d4c7a8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r4.c @@ -0,0 +1,546 @@ +/* Implementation of the MAXVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_REAL_4) + + +extern void maxval_r4 (gfc_array_r4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict); +export_proto(maxval_r4); + +void +maxval_r4 (gfc_array_r4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_4 * restrict base; + GFC_REAL_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_4 * restrict src; + GFC_REAL_4 result; + src = base; + { + + result = -GFC_REAL_4_HUGE; + if (len <= 0) + *dest = -GFC_REAL_4_HUGE; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxval_r4 (gfc_array_r4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxval_r4); + +void +mmaxval_r4 (gfc_array_r4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_4 * restrict dest; + const GFC_REAL_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_4 result; + src = base; + msrc = mbase; + { + + result = -GFC_REAL_4_HUGE; + if (len <= 0) + *dest = -GFC_REAL_4_HUGE; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxval_r4 (gfc_array_r4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxval_r4); + +void +smaxval_r4 (gfc_array_r4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxval_r4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = -GFC_REAL_4_HUGE; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r8.c new file mode 100644 index 0000000000..ee23df75db --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r8.c @@ -0,0 +1,546 @@ +/* Implementation of the MAXVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_REAL_8) + + +extern void maxval_r8 (gfc_array_r8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict); +export_proto(maxval_r8); + +void +maxval_r8 (gfc_array_r8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_8 * restrict base; + GFC_REAL_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_8 * restrict src; + GFC_REAL_8 result; + src = base; + { + + result = -GFC_REAL_8_HUGE; + if (len <= 0) + *dest = -GFC_REAL_8_HUGE; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mmaxval_r8 (gfc_array_r8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mmaxval_r8); + +void +mmaxval_r8 (gfc_array_r8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_8 * restrict dest; + const GFC_REAL_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MAXVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_8 result; + src = base; + msrc = mbase; + { + + result = -GFC_REAL_8_HUGE; + if (len <= 0) + *dest = -GFC_REAL_8_HUGE; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src > result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void smaxval_r8 (gfc_array_r8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(smaxval_r8); + +void +smaxval_r8 (gfc_array_r8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + maxval_r8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MAXVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MAXVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = -GFC_REAL_8_HUGE; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_16_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_16_i1.c new file mode 100644 index 0000000000..e0c6345b12 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_16_i1.c @@ -0,0 +1,372 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc0_16_i1 (gfc_array_i16 * const restrict retarray, + gfc_array_i1 * const restrict array); +export_proto(minloc0_16_i1); + +void +minloc0_16_i1 (gfc_array_i16 * const restrict retarray, + gfc_array_i1 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_1 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_1 minval; + + minval = GFC_INTEGER_1_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_16_i1 (gfc_array_i16 * const restrict, + gfc_array_i1 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_16_i1); + +void +mminloc0_16_i1 (gfc_array_i16 * const restrict retarray, + gfc_array_i1 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_INTEGER_1 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_1 minval; + + minval = GFC_INTEGER_1_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_16_i1 (gfc_array_i16 * const restrict, + gfc_array_i1 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_16_i1); + +void +sminloc0_16_i1 (gfc_array_i16 * const restrict retarray, + gfc_array_i1 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + minloc0_16_i1 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc0_16_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array); +export_proto(minloc0_16_i16); + +void +minloc0_16_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_16 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_16 minval; + + minval = GFC_INTEGER_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_16_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_16_i16); + +void +mminloc0_16_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_INTEGER_16 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_16 minval; + + minval = GFC_INTEGER_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_16_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_16_i16); + +void +sminloc0_16_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + minloc0_16_i16 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc0_16_i2 (gfc_array_i16 * const restrict retarray, + gfc_array_i2 * const restrict array); +export_proto(minloc0_16_i2); + +void +minloc0_16_i2 (gfc_array_i16 * const restrict retarray, + gfc_array_i2 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_2 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_2 minval; + + minval = GFC_INTEGER_2_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_16_i2 (gfc_array_i16 * const restrict, + gfc_array_i2 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_16_i2); + +void +mminloc0_16_i2 (gfc_array_i16 * const restrict retarray, + gfc_array_i2 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_INTEGER_2 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_2 minval; + + minval = GFC_INTEGER_2_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_16_i2 (gfc_array_i16 * const restrict, + gfc_array_i2 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_16_i2); + +void +sminloc0_16_i2 (gfc_array_i16 * const restrict retarray, + gfc_array_i2 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + minloc0_16_i2 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc0_16_i4 (gfc_array_i16 * const restrict retarray, + gfc_array_i4 * const restrict array); +export_proto(minloc0_16_i4); + +void +minloc0_16_i4 (gfc_array_i16 * const restrict retarray, + gfc_array_i4 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_4 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_4 minval; + + minval = GFC_INTEGER_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_16_i4 (gfc_array_i16 * const restrict, + gfc_array_i4 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_16_i4); + +void +mminloc0_16_i4 (gfc_array_i16 * const restrict retarray, + gfc_array_i4 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_INTEGER_4 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_4 minval; + + minval = GFC_INTEGER_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_16_i4 (gfc_array_i16 * const restrict, + gfc_array_i4 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_16_i4); + +void +sminloc0_16_i4 (gfc_array_i16 * const restrict retarray, + gfc_array_i4 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + minloc0_16_i4 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc0_16_i8 (gfc_array_i16 * const restrict retarray, + gfc_array_i8 * const restrict array); +export_proto(minloc0_16_i8); + +void +minloc0_16_i8 (gfc_array_i16 * const restrict retarray, + gfc_array_i8 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_8 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_8 minval; + + minval = GFC_INTEGER_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_16_i8 (gfc_array_i16 * const restrict, + gfc_array_i8 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_16_i8); + +void +mminloc0_16_i8 (gfc_array_i16 * const restrict retarray, + gfc_array_i8 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_INTEGER_8 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_8 minval; + + minval = GFC_INTEGER_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_16_i8 (gfc_array_i16 * const restrict, + gfc_array_i8 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_16_i8); + +void +sminloc0_16_i8 (gfc_array_i16 * const restrict retarray, + gfc_array_i8 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + minloc0_16_i8 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc0_16_r10 (gfc_array_i16 * const restrict retarray, + gfc_array_r10 * const restrict array); +export_proto(minloc0_16_r10); + +void +minloc0_16_r10 (gfc_array_i16 * const restrict retarray, + gfc_array_r10 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_10 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_10 minval; + + minval = GFC_REAL_10_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_16_r10 (gfc_array_i16 * const restrict, + gfc_array_r10 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_16_r10); + +void +mminloc0_16_r10 (gfc_array_i16 * const restrict retarray, + gfc_array_r10 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_REAL_10 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_10 minval; + + minval = GFC_REAL_10_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_16_r10 (gfc_array_i16 * const restrict, + gfc_array_r10 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_16_r10); + +void +sminloc0_16_r10 (gfc_array_i16 * const restrict retarray, + gfc_array_r10 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + minloc0_16_r10 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc0_16_r16 (gfc_array_i16 * const restrict retarray, + gfc_array_r16 * const restrict array); +export_proto(minloc0_16_r16); + +void +minloc0_16_r16 (gfc_array_i16 * const restrict retarray, + gfc_array_r16 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_16 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_16 minval; + + minval = GFC_REAL_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_16_r16 (gfc_array_i16 * const restrict, + gfc_array_r16 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_16_r16); + +void +mminloc0_16_r16 (gfc_array_i16 * const restrict retarray, + gfc_array_r16 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_REAL_16 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_16 minval; + + minval = GFC_REAL_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_16_r16 (gfc_array_i16 * const restrict, + gfc_array_r16 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_16_r16); + +void +sminloc0_16_r16 (gfc_array_i16 * const restrict retarray, + gfc_array_r16 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + minloc0_16_r16 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc0_16_r4 (gfc_array_i16 * const restrict retarray, + gfc_array_r4 * const restrict array); +export_proto(minloc0_16_r4); + +void +minloc0_16_r4 (gfc_array_i16 * const restrict retarray, + gfc_array_r4 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_4 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_4 minval; + + minval = GFC_REAL_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_16_r4 (gfc_array_i16 * const restrict, + gfc_array_r4 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_16_r4); + +void +mminloc0_16_r4 (gfc_array_i16 * const restrict retarray, + gfc_array_r4 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_REAL_4 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_4 minval; + + minval = GFC_REAL_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_16_r4 (gfc_array_i16 * const restrict, + gfc_array_r4 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_16_r4); + +void +sminloc0_16_r4 (gfc_array_i16 * const restrict retarray, + gfc_array_r4 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + minloc0_16_r4 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc0_16_r8 (gfc_array_i16 * const restrict retarray, + gfc_array_r8 * const restrict array); +export_proto(minloc0_16_r8); + +void +minloc0_16_r8 (gfc_array_i16 * const restrict retarray, + gfc_array_r8 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_8 *base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_8 minval; + + minval = GFC_REAL_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_16_r8 (gfc_array_i16 * const restrict, + gfc_array_r8 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_16_r8); + +void +mminloc0_16_r8 (gfc_array_i16 * const restrict retarray, + gfc_array_r8 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_16 *dest; + const GFC_REAL_8 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_8 minval; + + minval = GFC_REAL_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_16_r8 (gfc_array_i16 * const restrict, + gfc_array_r8 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_16_r8); + +void +sminloc0_16_r8 (gfc_array_i16 * const restrict retarray, + gfc_array_r8 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_16 *dest; + + if (*mask) + { + minloc0_16_r8 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc0_4_i1 (gfc_array_i4 * const restrict retarray, + gfc_array_i1 * const restrict array); +export_proto(minloc0_4_i1); + +void +minloc0_4_i1 (gfc_array_i4 * const restrict retarray, + gfc_array_i1 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_1 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_1 minval; + + minval = GFC_INTEGER_1_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_4_i1 (gfc_array_i4 * const restrict, + gfc_array_i1 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_4_i1); + +void +mminloc0_4_i1 (gfc_array_i4 * const restrict retarray, + gfc_array_i1 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_INTEGER_1 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_1 minval; + + minval = GFC_INTEGER_1_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_4_i1 (gfc_array_i4 * const restrict, + gfc_array_i1 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_4_i1); + +void +sminloc0_4_i1 (gfc_array_i4 * const restrict retarray, + gfc_array_i1 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + minloc0_4_i1 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc0_4_i16 (gfc_array_i4 * const restrict retarray, + gfc_array_i16 * const restrict array); +export_proto(minloc0_4_i16); + +void +minloc0_4_i16 (gfc_array_i4 * const restrict retarray, + gfc_array_i16 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_16 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_16 minval; + + minval = GFC_INTEGER_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_4_i16 (gfc_array_i4 * const restrict, + gfc_array_i16 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_4_i16); + +void +mminloc0_4_i16 (gfc_array_i4 * const restrict retarray, + gfc_array_i16 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_INTEGER_16 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_16 minval; + + minval = GFC_INTEGER_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_4_i16 (gfc_array_i4 * const restrict, + gfc_array_i16 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_4_i16); + +void +sminloc0_4_i16 (gfc_array_i4 * const restrict retarray, + gfc_array_i16 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + minloc0_4_i16 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc0_4_i2 (gfc_array_i4 * const restrict retarray, + gfc_array_i2 * const restrict array); +export_proto(minloc0_4_i2); + +void +minloc0_4_i2 (gfc_array_i4 * const restrict retarray, + gfc_array_i2 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_2 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_2 minval; + + minval = GFC_INTEGER_2_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_4_i2 (gfc_array_i4 * const restrict, + gfc_array_i2 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_4_i2); + +void +mminloc0_4_i2 (gfc_array_i4 * const restrict retarray, + gfc_array_i2 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_INTEGER_2 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_2 minval; + + minval = GFC_INTEGER_2_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_4_i2 (gfc_array_i4 * const restrict, + gfc_array_i2 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_4_i2); + +void +sminloc0_4_i2 (gfc_array_i4 * const restrict retarray, + gfc_array_i2 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + minloc0_4_i2 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc0_4_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array); +export_proto(minloc0_4_i4); + +void +minloc0_4_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_4 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_4 minval; + + minval = GFC_INTEGER_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_4_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_4_i4); + +void +mminloc0_4_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_INTEGER_4 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_4 minval; + + minval = GFC_INTEGER_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_4_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_4_i4); + +void +sminloc0_4_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + minloc0_4_i4 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc0_4_i8 (gfc_array_i4 * const restrict retarray, + gfc_array_i8 * const restrict array); +export_proto(minloc0_4_i8); + +void +minloc0_4_i8 (gfc_array_i4 * const restrict retarray, + gfc_array_i8 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_8 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_8 minval; + + minval = GFC_INTEGER_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_4_i8 (gfc_array_i4 * const restrict, + gfc_array_i8 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_4_i8); + +void +mminloc0_4_i8 (gfc_array_i4 * const restrict retarray, + gfc_array_i8 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_INTEGER_8 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_8 minval; + + minval = GFC_INTEGER_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_4_i8 (gfc_array_i4 * const restrict, + gfc_array_i8 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_4_i8); + +void +sminloc0_4_i8 (gfc_array_i4 * const restrict retarray, + gfc_array_i8 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + minloc0_4_i8 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc0_4_r10 (gfc_array_i4 * const restrict retarray, + gfc_array_r10 * const restrict array); +export_proto(minloc0_4_r10); + +void +minloc0_4_r10 (gfc_array_i4 * const restrict retarray, + gfc_array_r10 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_10 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_10 minval; + + minval = GFC_REAL_10_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_4_r10 (gfc_array_i4 * const restrict, + gfc_array_r10 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_4_r10); + +void +mminloc0_4_r10 (gfc_array_i4 * const restrict retarray, + gfc_array_r10 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_REAL_10 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_10 minval; + + minval = GFC_REAL_10_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_4_r10 (gfc_array_i4 * const restrict, + gfc_array_r10 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_4_r10); + +void +sminloc0_4_r10 (gfc_array_i4 * const restrict retarray, + gfc_array_r10 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + minloc0_4_r10 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc0_4_r16 (gfc_array_i4 * const restrict retarray, + gfc_array_r16 * const restrict array); +export_proto(minloc0_4_r16); + +void +minloc0_4_r16 (gfc_array_i4 * const restrict retarray, + gfc_array_r16 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_16 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_16 minval; + + minval = GFC_REAL_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_4_r16 (gfc_array_i4 * const restrict, + gfc_array_r16 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_4_r16); + +void +mminloc0_4_r16 (gfc_array_i4 * const restrict retarray, + gfc_array_r16 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_REAL_16 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_16 minval; + + minval = GFC_REAL_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_4_r16 (gfc_array_i4 * const restrict, + gfc_array_r16 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_4_r16); + +void +sminloc0_4_r16 (gfc_array_i4 * const restrict retarray, + gfc_array_r16 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + minloc0_4_r16 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc0_4_r4 (gfc_array_i4 * const restrict retarray, + gfc_array_r4 * const restrict array); +export_proto(minloc0_4_r4); + +void +minloc0_4_r4 (gfc_array_i4 * const restrict retarray, + gfc_array_r4 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_4 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_4 minval; + + minval = GFC_REAL_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_4_r4 (gfc_array_i4 * const restrict, + gfc_array_r4 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_4_r4); + +void +mminloc0_4_r4 (gfc_array_i4 * const restrict retarray, + gfc_array_r4 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_REAL_4 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_4 minval; + + minval = GFC_REAL_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_4_r4 (gfc_array_i4 * const restrict, + gfc_array_r4 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_4_r4); + +void +sminloc0_4_r4 (gfc_array_i4 * const restrict retarray, + gfc_array_r4 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + minloc0_4_r4 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc0_4_r8 (gfc_array_i4 * const restrict retarray, + gfc_array_r8 * const restrict array); +export_proto(minloc0_4_r8); + +void +minloc0_4_r8 (gfc_array_i4 * const restrict retarray, + gfc_array_r8 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_8 *base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_8 minval; + + minval = GFC_REAL_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_4_r8 (gfc_array_i4 * const restrict, + gfc_array_r8 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_4_r8); + +void +mminloc0_4_r8 (gfc_array_i4 * const restrict retarray, + gfc_array_r8 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_4 *dest; + const GFC_REAL_8 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_8 minval; + + minval = GFC_REAL_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_4_r8 (gfc_array_i4 * const restrict, + gfc_array_r8 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_4_r8); + +void +sminloc0_4_r8 (gfc_array_i4 * const restrict retarray, + gfc_array_r8 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_4 *dest; + + if (*mask) + { + minloc0_4_r8 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc0_8_i1 (gfc_array_i8 * const restrict retarray, + gfc_array_i1 * const restrict array); +export_proto(minloc0_8_i1); + +void +minloc0_8_i1 (gfc_array_i8 * const restrict retarray, + gfc_array_i1 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_1 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_1 minval; + + minval = GFC_INTEGER_1_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_8_i1 (gfc_array_i8 * const restrict, + gfc_array_i1 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_8_i1); + +void +mminloc0_8_i1 (gfc_array_i8 * const restrict retarray, + gfc_array_i1 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_INTEGER_1 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_1 minval; + + minval = GFC_INTEGER_1_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_8_i1 (gfc_array_i8 * const restrict, + gfc_array_i1 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_8_i1); + +void +sminloc0_8_i1 (gfc_array_i8 * const restrict retarray, + gfc_array_i1 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + minloc0_8_i1 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc0_8_i16 (gfc_array_i8 * const restrict retarray, + gfc_array_i16 * const restrict array); +export_proto(minloc0_8_i16); + +void +minloc0_8_i16 (gfc_array_i8 * const restrict retarray, + gfc_array_i16 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_16 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_16 minval; + + minval = GFC_INTEGER_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_8_i16 (gfc_array_i8 * const restrict, + gfc_array_i16 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_8_i16); + +void +mminloc0_8_i16 (gfc_array_i8 * const restrict retarray, + gfc_array_i16 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_INTEGER_16 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_16 minval; + + minval = GFC_INTEGER_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_8_i16 (gfc_array_i8 * const restrict, + gfc_array_i16 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_8_i16); + +void +sminloc0_8_i16 (gfc_array_i8 * const restrict retarray, + gfc_array_i16 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + minloc0_8_i16 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc0_8_i2 (gfc_array_i8 * const restrict retarray, + gfc_array_i2 * const restrict array); +export_proto(minloc0_8_i2); + +void +minloc0_8_i2 (gfc_array_i8 * const restrict retarray, + gfc_array_i2 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_2 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_2 minval; + + minval = GFC_INTEGER_2_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_8_i2 (gfc_array_i8 * const restrict, + gfc_array_i2 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_8_i2); + +void +mminloc0_8_i2 (gfc_array_i8 * const restrict retarray, + gfc_array_i2 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_INTEGER_2 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_2 minval; + + minval = GFC_INTEGER_2_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_8_i2 (gfc_array_i8 * const restrict, + gfc_array_i2 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_8_i2); + +void +sminloc0_8_i2 (gfc_array_i8 * const restrict retarray, + gfc_array_i2 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + minloc0_8_i2 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc0_8_i4 (gfc_array_i8 * const restrict retarray, + gfc_array_i4 * const restrict array); +export_proto(minloc0_8_i4); + +void +minloc0_8_i4 (gfc_array_i8 * const restrict retarray, + gfc_array_i4 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_4 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_4 minval; + + minval = GFC_INTEGER_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_8_i4 (gfc_array_i8 * const restrict, + gfc_array_i4 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_8_i4); + +void +mminloc0_8_i4 (gfc_array_i8 * const restrict retarray, + gfc_array_i4 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_INTEGER_4 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_4 minval; + + minval = GFC_INTEGER_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_8_i4 (gfc_array_i8 * const restrict, + gfc_array_i4 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_8_i4); + +void +sminloc0_8_i4 (gfc_array_i8 * const restrict retarray, + gfc_array_i4 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + minloc0_8_i4 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc0_8_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array); +export_proto(minloc0_8_i8); + +void +minloc0_8_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_INTEGER_8 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_8 minval; + + minval = GFC_INTEGER_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_8_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_8_i8); + +void +mminloc0_8_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_INTEGER_8 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_INTEGER_8 minval; + + minval = GFC_INTEGER_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_8_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_8_i8); + +void +sminloc0_8_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + minloc0_8_i8 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc0_8_r10 (gfc_array_i8 * const restrict retarray, + gfc_array_r10 * const restrict array); +export_proto(minloc0_8_r10); + +void +minloc0_8_r10 (gfc_array_i8 * const restrict retarray, + gfc_array_r10 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_10 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_10 minval; + + minval = GFC_REAL_10_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_8_r10 (gfc_array_i8 * const restrict, + gfc_array_r10 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_8_r10); + +void +mminloc0_8_r10 (gfc_array_i8 * const restrict retarray, + gfc_array_r10 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_REAL_10 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_10 minval; + + minval = GFC_REAL_10_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_8_r10 (gfc_array_i8 * const restrict, + gfc_array_r10 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_8_r10); + +void +sminloc0_8_r10 (gfc_array_i8 * const restrict retarray, + gfc_array_r10 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + minloc0_8_r10 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc0_8_r16 (gfc_array_i8 * const restrict retarray, + gfc_array_r16 * const restrict array); +export_proto(minloc0_8_r16); + +void +minloc0_8_r16 (gfc_array_i8 * const restrict retarray, + gfc_array_r16 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_16 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_16 minval; + + minval = GFC_REAL_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_8_r16 (gfc_array_i8 * const restrict, + gfc_array_r16 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_8_r16); + +void +mminloc0_8_r16 (gfc_array_i8 * const restrict retarray, + gfc_array_r16 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_REAL_16 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_16 minval; + + minval = GFC_REAL_16_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_8_r16 (gfc_array_i8 * const restrict, + gfc_array_r16 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_8_r16); + +void +sminloc0_8_r16 (gfc_array_i8 * const restrict retarray, + gfc_array_r16 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + minloc0_8_r16 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc0_8_r4 (gfc_array_i8 * const restrict retarray, + gfc_array_r4 * const restrict array); +export_proto(minloc0_8_r4); + +void +minloc0_8_r4 (gfc_array_i8 * const restrict retarray, + gfc_array_r4 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_4 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_4 minval; + + minval = GFC_REAL_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_8_r4 (gfc_array_i8 * const restrict, + gfc_array_r4 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_8_r4); + +void +mminloc0_8_r4 (gfc_array_i8 * const restrict retarray, + gfc_array_r4 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_REAL_4 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_4 minval; + + minval = GFC_REAL_4_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_8_r4 (gfc_array_i8 * const restrict, + gfc_array_r4 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_8_r4); + +void +sminloc0_8_r4 (gfc_array_i8 * const restrict retarray, + gfc_array_r4 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + minloc0_8_r4 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc0_8_r8 (gfc_array_i8 * const restrict retarray, + gfc_array_r8 * const restrict array); +export_proto(minloc0_8_r8); + +void +minloc0_8_r8 (gfc_array_i8 * const restrict retarray, + gfc_array_r8 * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const GFC_REAL_8 *base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_8 minval; + + minval = GFC_REAL_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +} + + +extern void mminloc0_8_r8 (gfc_array_i8 * const restrict, + gfc_array_r8 * const restrict, gfc_array_l1 * const restrict); +export_proto(mminloc0_8_r8); + +void +mminloc0_8_r8 (gfc_array_i8 * const restrict retarray, + gfc_array_r8 * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + GFC_INTEGER_8 *dest; + const GFC_REAL_8 *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in MINLOC intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { + + GFC_REAL_8 minval; + + minval = GFC_REAL_8_HUGE; + + while (base) + { + { + /* Implementation start. */ + + if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + } + /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +} + + +extern void sminloc0_8_r8 (gfc_array_i8 * const restrict, + gfc_array_r8 * const restrict, GFC_LOGICAL_4 *); +export_proto(sminloc0_8_r8); + +void +sminloc0_8_r8 (gfc_array_i8 * const restrict retarray, + gfc_array_r8 * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + GFC_INTEGER_8 *dest; + + if (*mask) + { + minloc0_8_r8 (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in MINLOC intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc1_16_i1 (gfc_array_i16 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict); +export_proto(minloc1_16_i1); + +void +minloc1_16_i1 (gfc_array_i16 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_1 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_1 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_INTEGER_1 minval; + minval = GFC_INTEGER_1_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_16_i1 (gfc_array_i16 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_16_i1); + +void +mminloc1_16_i1 (gfc_array_i16 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_INTEGER_1 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_1 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_1 minval; + minval = GFC_INTEGER_1_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_16_i1 (gfc_array_i16 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_16_i1); + +void +sminloc1_16_i1 (gfc_array_i16 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_16_i1 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i16.c new file mode 100644 index 0000000000..fb0d027b41 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i16.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc1_16_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict); +export_proto(minloc1_16_i16); + +void +minloc1_16_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_16 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_16 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_INTEGER_16 minval; + minval = GFC_INTEGER_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_16_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_16_i16); + +void +mminloc1_16_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_INTEGER_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_16 minval; + minval = GFC_INTEGER_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_16_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_16_i16); + +void +sminloc1_16_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_16_i16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i2.c new file mode 100644 index 0000000000..4a58cc1d39 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i2.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc1_16_i2 (gfc_array_i16 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict); +export_proto(minloc1_16_i2); + +void +minloc1_16_i2 (gfc_array_i16 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_2 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_2 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_INTEGER_2 minval; + minval = GFC_INTEGER_2_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_16_i2 (gfc_array_i16 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_16_i2); + +void +mminloc1_16_i2 (gfc_array_i16 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_INTEGER_2 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_2 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_2 minval; + minval = GFC_INTEGER_2_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_16_i2 (gfc_array_i16 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_16_i2); + +void +sminloc1_16_i2 (gfc_array_i16 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_16_i2 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i4.c new file mode 100644 index 0000000000..549fd25037 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i4.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc1_16_i4 (gfc_array_i16 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict); +export_proto(minloc1_16_i4); + +void +minloc1_16_i4 (gfc_array_i16 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_4 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_4 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_INTEGER_4 minval; + minval = GFC_INTEGER_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_16_i4 (gfc_array_i16 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_16_i4); + +void +mminloc1_16_i4 (gfc_array_i16 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_INTEGER_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_4 minval; + minval = GFC_INTEGER_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_16_i4 (gfc_array_i16 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_16_i4); + +void +sminloc1_16_i4 (gfc_array_i16 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_16_i4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i8.c new file mode 100644 index 0000000000..ea4e854365 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i8.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc1_16_i8 (gfc_array_i16 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict); +export_proto(minloc1_16_i8); + +void +minloc1_16_i8 (gfc_array_i16 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_8 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_8 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_INTEGER_8 minval; + minval = GFC_INTEGER_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_16_i8 (gfc_array_i16 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_16_i8); + +void +mminloc1_16_i8 (gfc_array_i16 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_INTEGER_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_8 minval; + minval = GFC_INTEGER_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_16_i8 (gfc_array_i16 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_16_i8); + +void +sminloc1_16_i8 (gfc_array_i16 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_16_i8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r10.c new file mode 100644 index 0000000000..7696c16f1c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r10.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc1_16_r10 (gfc_array_i16 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict); +export_proto(minloc1_16_r10); + +void +minloc1_16_r10 (gfc_array_i16 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_10 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_10 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_REAL_10 minval; + minval = GFC_REAL_10_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_16_r10 (gfc_array_i16 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_16_r10); + +void +mminloc1_16_r10 (gfc_array_i16 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_REAL_10 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_10 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_REAL_10 minval; + minval = GFC_REAL_10_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_16_r10 (gfc_array_i16 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_16_r10); + +void +sminloc1_16_r10 (gfc_array_i16 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_16_r10 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r16.c new file mode 100644 index 0000000000..21cee9085a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r16.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc1_16_r16 (gfc_array_i16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict); +export_proto(minloc1_16_r16); + +void +minloc1_16_r16 (gfc_array_i16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_16 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_16 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_REAL_16 minval; + minval = GFC_REAL_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_16_r16 (gfc_array_i16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_16_r16); + +void +mminloc1_16_r16 (gfc_array_i16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_REAL_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_REAL_16 minval; + minval = GFC_REAL_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_16_r16 (gfc_array_i16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_16_r16); + +void +sminloc1_16_r16 (gfc_array_i16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_16_r16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r4.c new file mode 100644 index 0000000000..b17faefcb5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r4.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc1_16_r4 (gfc_array_i16 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict); +export_proto(minloc1_16_r4); + +void +minloc1_16_r4 (gfc_array_i16 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_4 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_4 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_REAL_4 minval; + minval = GFC_REAL_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_16_r4 (gfc_array_i16 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_16_r4); + +void +mminloc1_16_r4 (gfc_array_i16 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_REAL_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_REAL_4 minval; + minval = GFC_REAL_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_16_r4 (gfc_array_i16 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_16_r4); + +void +sminloc1_16_r4 (gfc_array_i16 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_16_r4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r8.c new file mode 100644 index 0000000000..bdf917c650 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r8.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_16) + + +extern void minloc1_16_r8 (gfc_array_i16 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict); +export_proto(minloc1_16_r8); + +void +minloc1_16_r8 (gfc_array_i16 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_8 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_8 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + GFC_REAL_8 minval; + minval = GFC_REAL_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_16_r8 (gfc_array_i16 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_16_r8); + +void +mminloc1_16_r8 (gfc_array_i16 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_REAL_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + GFC_REAL_8 minval; + minval = GFC_REAL_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_16)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_16_r8 (gfc_array_i16 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_16_r8); + +void +sminloc1_16_r8 (gfc_array_i16 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_16_r8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i1.c new file mode 100644 index 0000000000..2a86922921 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i1.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc1_4_i1 (gfc_array_i4 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict); +export_proto(minloc1_4_i1); + +void +minloc1_4_i1 (gfc_array_i4 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_1 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_1 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_INTEGER_1 minval; + minval = GFC_INTEGER_1_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_4_i1 (gfc_array_i4 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_4_i1); + +void +mminloc1_4_i1 (gfc_array_i4 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_INTEGER_1 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_1 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_1 minval; + minval = GFC_INTEGER_1_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_4_i1 (gfc_array_i4 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_4_i1); + +void +sminloc1_4_i1 (gfc_array_i4 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_4_i1 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i16.c new file mode 100644 index 0000000000..93f7ca2ab7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i16.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc1_4_i16 (gfc_array_i4 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict); +export_proto(minloc1_4_i16); + +void +minloc1_4_i16 (gfc_array_i4 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_16 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_16 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_INTEGER_16 minval; + minval = GFC_INTEGER_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_4_i16 (gfc_array_i4 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_4_i16); + +void +mminloc1_4_i16 (gfc_array_i4 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_INTEGER_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_16 minval; + minval = GFC_INTEGER_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_4_i16 (gfc_array_i4 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_4_i16); + +void +sminloc1_4_i16 (gfc_array_i4 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_4_i16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i2.c new file mode 100644 index 0000000000..6bc8f5706d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i2.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc1_4_i2 (gfc_array_i4 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict); +export_proto(minloc1_4_i2); + +void +minloc1_4_i2 (gfc_array_i4 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_2 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_2 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_INTEGER_2 minval; + minval = GFC_INTEGER_2_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_4_i2 (gfc_array_i4 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_4_i2); + +void +mminloc1_4_i2 (gfc_array_i4 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_INTEGER_2 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_2 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_2 minval; + minval = GFC_INTEGER_2_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_4_i2 (gfc_array_i4 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_4_i2); + +void +sminloc1_4_i2 (gfc_array_i4 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_4_i2 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i4.c new file mode 100644 index 0000000000..685d242e58 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i4.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc1_4_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict); +export_proto(minloc1_4_i4); + +void +minloc1_4_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_4 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_4 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_INTEGER_4 minval; + minval = GFC_INTEGER_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_4_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_4_i4); + +void +mminloc1_4_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_INTEGER_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_4 minval; + minval = GFC_INTEGER_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_4_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_4_i4); + +void +sminloc1_4_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_4_i4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i8.c new file mode 100644 index 0000000000..b3f506a238 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i8.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc1_4_i8 (gfc_array_i4 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict); +export_proto(minloc1_4_i8); + +void +minloc1_4_i8 (gfc_array_i4 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_8 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_8 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_INTEGER_8 minval; + minval = GFC_INTEGER_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_4_i8 (gfc_array_i4 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_4_i8); + +void +mminloc1_4_i8 (gfc_array_i4 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_INTEGER_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_8 minval; + minval = GFC_INTEGER_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_4_i8 (gfc_array_i4 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_4_i8); + +void +sminloc1_4_i8 (gfc_array_i4 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_4_i8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r10.c new file mode 100644 index 0000000000..8d93866a00 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r10.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc1_4_r10 (gfc_array_i4 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict); +export_proto(minloc1_4_r10); + +void +minloc1_4_r10 (gfc_array_i4 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_10 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_10 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_REAL_10 minval; + minval = GFC_REAL_10_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_4_r10 (gfc_array_i4 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_4_r10); + +void +mminloc1_4_r10 (gfc_array_i4 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_REAL_10 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_10 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_REAL_10 minval; + minval = GFC_REAL_10_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_4_r10 (gfc_array_i4 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_4_r10); + +void +sminloc1_4_r10 (gfc_array_i4 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_4_r10 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r16.c new file mode 100644 index 0000000000..b2909ab97c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r16.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc1_4_r16 (gfc_array_i4 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict); +export_proto(minloc1_4_r16); + +void +minloc1_4_r16 (gfc_array_i4 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_16 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_16 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_REAL_16 minval; + minval = GFC_REAL_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_4_r16 (gfc_array_i4 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_4_r16); + +void +mminloc1_4_r16 (gfc_array_i4 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_REAL_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_REAL_16 minval; + minval = GFC_REAL_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_4_r16 (gfc_array_i4 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_4_r16); + +void +sminloc1_4_r16 (gfc_array_i4 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_4_r16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r4.c new file mode 100644 index 0000000000..9741c2bdb6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r4.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc1_4_r4 (gfc_array_i4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict); +export_proto(minloc1_4_r4); + +void +minloc1_4_r4 (gfc_array_i4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_4 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_4 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_REAL_4 minval; + minval = GFC_REAL_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_4_r4 (gfc_array_i4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_4_r4); + +void +mminloc1_4_r4 (gfc_array_i4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_REAL_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_REAL_4 minval; + minval = GFC_REAL_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_4_r4 (gfc_array_i4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_4_r4); + +void +sminloc1_4_r4 (gfc_array_i4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_4_r4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r8.c new file mode 100644 index 0000000000..4b26710aad --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r8.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_4) + + +extern void minloc1_4_r8 (gfc_array_i4 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict); +export_proto(minloc1_4_r8); + +void +minloc1_4_r8 (gfc_array_i4 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_8 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_8 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + GFC_REAL_8 minval; + minval = GFC_REAL_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_4_r8 (gfc_array_i4 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_4_r8); + +void +mminloc1_4_r8 (gfc_array_i4 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_REAL_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + GFC_REAL_8 minval; + minval = GFC_REAL_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_4)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_4_r8 (gfc_array_i4 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_4_r8); + +void +sminloc1_4_r8 (gfc_array_i4 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_4_r8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i1.c new file mode 100644 index 0000000000..b92faa7649 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i1.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc1_8_i1 (gfc_array_i8 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict); +export_proto(minloc1_8_i1); + +void +minloc1_8_i1 (gfc_array_i8 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_1 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_1 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_INTEGER_1 minval; + minval = GFC_INTEGER_1_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_8_i1 (gfc_array_i8 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_8_i1); + +void +mminloc1_8_i1 (gfc_array_i8 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_INTEGER_1 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_1 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_1 minval; + minval = GFC_INTEGER_1_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_8_i1 (gfc_array_i8 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_8_i1); + +void +sminloc1_8_i1 (gfc_array_i8 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_8_i1 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i16.c new file mode 100644 index 0000000000..d9283953c8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i16.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc1_8_i16 (gfc_array_i8 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict); +export_proto(minloc1_8_i16); + +void +minloc1_8_i16 (gfc_array_i8 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_16 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_16 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_INTEGER_16 minval; + minval = GFC_INTEGER_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_8_i16 (gfc_array_i8 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_8_i16); + +void +mminloc1_8_i16 (gfc_array_i8 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_INTEGER_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_16 minval; + minval = GFC_INTEGER_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_8_i16 (gfc_array_i8 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_8_i16); + +void +sminloc1_8_i16 (gfc_array_i8 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_8_i16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i2.c new file mode 100644 index 0000000000..b012f96b2d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i2.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc1_8_i2 (gfc_array_i8 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict); +export_proto(minloc1_8_i2); + +void +minloc1_8_i2 (gfc_array_i8 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_2 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_2 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_INTEGER_2 minval; + minval = GFC_INTEGER_2_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_8_i2 (gfc_array_i8 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_8_i2); + +void +mminloc1_8_i2 (gfc_array_i8 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_INTEGER_2 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_2 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_2 minval; + minval = GFC_INTEGER_2_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_8_i2 (gfc_array_i8 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_8_i2); + +void +sminloc1_8_i2 (gfc_array_i8 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_8_i2 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i4.c new file mode 100644 index 0000000000..107bf8f6e7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i4.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc1_8_i4 (gfc_array_i8 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict); +export_proto(minloc1_8_i4); + +void +minloc1_8_i4 (gfc_array_i8 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_4 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_4 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_INTEGER_4 minval; + minval = GFC_INTEGER_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_8_i4 (gfc_array_i8 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_8_i4); + +void +mminloc1_8_i4 (gfc_array_i8 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_INTEGER_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_4 minval; + minval = GFC_INTEGER_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_8_i4 (gfc_array_i8 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_8_i4); + +void +sminloc1_8_i4 (gfc_array_i8 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_8_i4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i8.c new file mode 100644 index 0000000000..16073feb37 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i8.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc1_8_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict); +export_proto(minloc1_8_i8); + +void +minloc1_8_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_8 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_8 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_INTEGER_8 minval; + minval = GFC_INTEGER_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_8_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_8_i8); + +void +mminloc1_8_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_INTEGER_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_INTEGER_8 minval; + minval = GFC_INTEGER_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_8_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_8_i8); + +void +sminloc1_8_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_8_i8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r10.c new file mode 100644 index 0000000000..3acd9c3a8f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r10.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc1_8_r10 (gfc_array_i8 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict); +export_proto(minloc1_8_r10); + +void +minloc1_8_r10 (gfc_array_i8 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_10 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_10 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_REAL_10 minval; + minval = GFC_REAL_10_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_8_r10 (gfc_array_i8 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_8_r10); + +void +mminloc1_8_r10 (gfc_array_i8 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_REAL_10 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_10 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_REAL_10 minval; + minval = GFC_REAL_10_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_8_r10 (gfc_array_i8 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_8_r10); + +void +sminloc1_8_r10 (gfc_array_i8 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_8_r10 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r16.c new file mode 100644 index 0000000000..e194986d5d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r16.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc1_8_r16 (gfc_array_i8 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict); +export_proto(minloc1_8_r16); + +void +minloc1_8_r16 (gfc_array_i8 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_16 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_16 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_REAL_16 minval; + minval = GFC_REAL_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_8_r16 (gfc_array_i8 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_8_r16); + +void +mminloc1_8_r16 (gfc_array_i8 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_REAL_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_REAL_16 minval; + minval = GFC_REAL_16_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_8_r16 (gfc_array_i8 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_8_r16); + +void +sminloc1_8_r16 (gfc_array_i8 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_8_r16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r4.c new file mode 100644 index 0000000000..1e32884c5c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r4.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc1_8_r4 (gfc_array_i8 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict); +export_proto(minloc1_8_r4); + +void +minloc1_8_r4 (gfc_array_i8 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_4 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_4 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_REAL_4 minval; + minval = GFC_REAL_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_8_r4 (gfc_array_i8 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_8_r4); + +void +mminloc1_8_r4 (gfc_array_i8 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_REAL_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_REAL_4 minval; + minval = GFC_REAL_4_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_8_r4 (gfc_array_i8 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_8_r4); + +void +sminloc1_8_r4 (gfc_array_i8 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_8_r4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r8.c new file mode 100644 index 0000000000..85ad5b7338 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r8.c @@ -0,0 +1,557 @@ +/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_8) + + +extern void minloc1_8_r8 (gfc_array_i8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict); +export_proto(minloc1_8_r8); + +void +minloc1_8_r8 (gfc_array_i8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_8 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_8 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + GFC_REAL_8 minval; + minval = GFC_REAL_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < minval || !result) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminloc1_8_r8 (gfc_array_i8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminloc1_8_r8); + +void +mminloc1_8_r8 (gfc_array_i8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_REAL_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINLOC intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + GFC_REAL_8 minval; + minval = GFC_REAL_8_HUGE; + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (GFC_INTEGER_8)n + 1; + } + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminloc1_8_r8 (gfc_array_i8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminloc1_8_r8); + +void +sminloc1_8_r8 (gfc_array_i8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minloc1_8_r8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINLOC intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINLOC intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i1.c new file mode 100644 index 0000000000..f761faa8ad --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i1.c @@ -0,0 +1,546 @@ +/* Implementation of the MINVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_1) + + +extern void minval_i1 (gfc_array_i1 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict); +export_proto(minval_i1); + +void +minval_i1 (gfc_array_i1 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_1 * restrict base; + GFC_INTEGER_1 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_1) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_1 * restrict src; + GFC_INTEGER_1 result; + src = base; + { + + result = GFC_INTEGER_1_HUGE; + if (len <= 0) + *dest = GFC_INTEGER_1_HUGE; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminval_i1 (gfc_array_i1 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminval_i1); + +void +mminval_i1 (gfc_array_i1 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_1 * restrict dest; + const GFC_INTEGER_1 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_1) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_1 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_1 result; + src = base; + msrc = mbase; + { + + result = GFC_INTEGER_1_HUGE; + if (len <= 0) + *dest = GFC_INTEGER_1_HUGE; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminval_i1 (gfc_array_i1 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminval_i1); + +void +sminval_i1 (gfc_array_i1 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_1 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minval_i1 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_1) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = GFC_INTEGER_1_HUGE; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i16.c new file mode 100644 index 0000000000..e0bd733231 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i16.c @@ -0,0 +1,546 @@ +/* Implementation of the MINVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_16) + + +extern void minval_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict); +export_proto(minval_i16); + +void +minval_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_16 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_16 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + result = GFC_INTEGER_16_HUGE; + if (len <= 0) + *dest = GFC_INTEGER_16_HUGE; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminval_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminval_i16); + +void +mminval_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_INTEGER_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + result = GFC_INTEGER_16_HUGE; + if (len <= 0) + *dest = GFC_INTEGER_16_HUGE; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminval_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminval_i16); + +void +sminval_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minval_i16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = GFC_INTEGER_16_HUGE; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i2.c new file mode 100644 index 0000000000..bfa14b224c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i2.c @@ -0,0 +1,546 @@ +/* Implementation of the MINVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_2) + + +extern void minval_i2 (gfc_array_i2 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict); +export_proto(minval_i2); + +void +minval_i2 (gfc_array_i2 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_2 * restrict base; + GFC_INTEGER_2 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_2) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_2 * restrict src; + GFC_INTEGER_2 result; + src = base; + { + + result = GFC_INTEGER_2_HUGE; + if (len <= 0) + *dest = GFC_INTEGER_2_HUGE; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminval_i2 (gfc_array_i2 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminval_i2); + +void +mminval_i2 (gfc_array_i2 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_2 * restrict dest; + const GFC_INTEGER_2 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_2) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_2 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_2 result; + src = base; + msrc = mbase; + { + + result = GFC_INTEGER_2_HUGE; + if (len <= 0) + *dest = GFC_INTEGER_2_HUGE; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminval_i2 (gfc_array_i2 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminval_i2); + +void +sminval_i2 (gfc_array_i2 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_2 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minval_i2 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_2) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = GFC_INTEGER_2_HUGE; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i4.c new file mode 100644 index 0000000000..ba1e592fa0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i4.c @@ -0,0 +1,546 @@ +/* Implementation of the MINVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_4) + + +extern void minval_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict); +export_proto(minval_i4); + +void +minval_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_4 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_4 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + result = GFC_INTEGER_4_HUGE; + if (len <= 0) + *dest = GFC_INTEGER_4_HUGE; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminval_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminval_i4); + +void +mminval_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_INTEGER_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + result = GFC_INTEGER_4_HUGE; + if (len <= 0) + *dest = GFC_INTEGER_4_HUGE; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminval_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminval_i4); + +void +sminval_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minval_i4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = GFC_INTEGER_4_HUGE; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i8.c new file mode 100644 index 0000000000..0287e054a7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i8.c @@ -0,0 +1,546 @@ +/* Implementation of the MINVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_8) + + +extern void minval_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict); +export_proto(minval_i8); + +void +minval_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_8 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_8 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + result = GFC_INTEGER_8_HUGE; + if (len <= 0) + *dest = GFC_INTEGER_8_HUGE; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminval_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminval_i8); + +void +mminval_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_INTEGER_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + result = GFC_INTEGER_8_HUGE; + if (len <= 0) + *dest = GFC_INTEGER_8_HUGE; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminval_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminval_i8); + +void +sminval_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minval_i8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = GFC_INTEGER_8_HUGE; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r10.c new file mode 100644 index 0000000000..202ae7fd38 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r10.c @@ -0,0 +1,546 @@ +/* Implementation of the MINVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_REAL_10) + + +extern void minval_r10 (gfc_array_r10 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict); +export_proto(minval_r10); + +void +minval_r10 (gfc_array_r10 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_10 * restrict base; + GFC_REAL_10 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_10 * restrict src; + GFC_REAL_10 result; + src = base; + { + + result = GFC_REAL_10_HUGE; + if (len <= 0) + *dest = GFC_REAL_10_HUGE; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminval_r10 (gfc_array_r10 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminval_r10); + +void +mminval_r10 (gfc_array_r10 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_10 * restrict dest; + const GFC_REAL_10 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_10 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_10 result; + src = base; + msrc = mbase; + { + + result = GFC_REAL_10_HUGE; + if (len <= 0) + *dest = GFC_REAL_10_HUGE; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminval_r10 (gfc_array_r10 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminval_r10); + +void +sminval_r10 (gfc_array_r10 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_10 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minval_r10 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = GFC_REAL_10_HUGE; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r16.c new file mode 100644 index 0000000000..fe4210fb7b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r16.c @@ -0,0 +1,546 @@ +/* Implementation of the MINVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_REAL_16) + + +extern void minval_r16 (gfc_array_r16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict); +export_proto(minval_r16); + +void +minval_r16 (gfc_array_r16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_16 * restrict base; + GFC_REAL_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_16 * restrict src; + GFC_REAL_16 result; + src = base; + { + + result = GFC_REAL_16_HUGE; + if (len <= 0) + *dest = GFC_REAL_16_HUGE; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminval_r16 (gfc_array_r16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminval_r16); + +void +mminval_r16 (gfc_array_r16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_16 * restrict dest; + const GFC_REAL_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_16 result; + src = base; + msrc = mbase; + { + + result = GFC_REAL_16_HUGE; + if (len <= 0) + *dest = GFC_REAL_16_HUGE; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminval_r16 (gfc_array_r16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminval_r16); + +void +sminval_r16 (gfc_array_r16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minval_r16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = GFC_REAL_16_HUGE; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r4.c new file mode 100644 index 0000000000..7dcd5677d2 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r4.c @@ -0,0 +1,546 @@ +/* Implementation of the MINVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_REAL_4) + + +extern void minval_r4 (gfc_array_r4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict); +export_proto(minval_r4); + +void +minval_r4 (gfc_array_r4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_4 * restrict base; + GFC_REAL_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_4 * restrict src; + GFC_REAL_4 result; + src = base; + { + + result = GFC_REAL_4_HUGE; + if (len <= 0) + *dest = GFC_REAL_4_HUGE; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminval_r4 (gfc_array_r4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminval_r4); + +void +mminval_r4 (gfc_array_r4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_4 * restrict dest; + const GFC_REAL_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_4 result; + src = base; + msrc = mbase; + { + + result = GFC_REAL_4_HUGE; + if (len <= 0) + *dest = GFC_REAL_4_HUGE; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminval_r4 (gfc_array_r4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminval_r4); + +void +sminval_r4 (gfc_array_r4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minval_r4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = GFC_REAL_4_HUGE; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r8.c new file mode 100644 index 0000000000..e92842f3a7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r8.c @@ -0,0 +1,546 @@ +/* Implementation of the MINVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_REAL_8) + + +extern void minval_r8 (gfc_array_r8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict); +export_proto(minval_r8); + +void +minval_r8 (gfc_array_r8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_8 * restrict base; + GFC_REAL_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_8 * restrict src; + GFC_REAL_8 result; + src = base; + { + + result = GFC_REAL_8_HUGE; + if (len <= 0) + *dest = GFC_REAL_8_HUGE; + else + { + for (n = 0; n < len; n++, src += delta) + { + + if (*src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mminval_r8 (gfc_array_r8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mminval_r8); + +void +mminval_r8 (gfc_array_r8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_8 * restrict dest; + const GFC_REAL_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in MINVAL intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_8 result; + src = base; + msrc = mbase; + { + + result = GFC_REAL_8_HUGE; + if (len <= 0) + *dest = GFC_REAL_8_HUGE; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc && *src < result) + result = *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sminval_r8 (gfc_array_r8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sminval_r8); + +void +sminval_r8 (gfc_array_r8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + minval_r8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " MINVAL intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " MINVAL intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = GFC_REAL_8_HUGE; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/misc_specifics.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/misc_specifics.F90 new file mode 100644 index 0000000000..2df9a23b41 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/misc_specifics.F90 @@ -0,0 +1,206 @@ +! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated. + +#include "config.h" +#include "kinds.inc" + + + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_4) +elemental function _gfortran_specific__nint_4_4 (parm) + real (kind=4) , intent (in) :: parm + integer (kind=4) :: _gfortran_specific__nint_4_4 + _gfortran_specific__nint_4_4 = nint (parm) +end function +#endif + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_4) +elemental function _gfortran_specific__nint_4_8 (parm) + real (kind=8) , intent (in) :: parm + integer (kind=4) :: _gfortran_specific__nint_4_8 + _gfortran_specific__nint_4_8 = nint (parm) +end function +#endif + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_4) +elemental function _gfortran_specific__nint_4_10 (parm) + real (kind=10) , intent (in) :: parm + integer (kind=4) :: _gfortran_specific__nint_4_10 + _gfortran_specific__nint_4_10 = nint (parm) +end function +#endif + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_4) +elemental function _gfortran_specific__nint_4_16 (parm) + real (kind=16) , intent (in) :: parm + integer (kind=4) :: _gfortran_specific__nint_4_16 + _gfortran_specific__nint_4_16 = nint (parm) +end function +#endif + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_8) +elemental function _gfortran_specific__nint_8_4 (parm) + real (kind=4) , intent (in) :: parm + integer (kind=8) :: _gfortran_specific__nint_8_4 + _gfortran_specific__nint_8_4 = nint (parm) +end function +#endif + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_8) +elemental function _gfortran_specific__nint_8_8 (parm) + real (kind=8) , intent (in) :: parm + integer (kind=8) :: _gfortran_specific__nint_8_8 + _gfortran_specific__nint_8_8 = nint (parm) +end function +#endif + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_8) +elemental function _gfortran_specific__nint_8_10 (parm) + real (kind=10) , intent (in) :: parm + integer (kind=8) :: _gfortran_specific__nint_8_10 + _gfortran_specific__nint_8_10 = nint (parm) +end function +#endif + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_8) +elemental function _gfortran_specific__nint_8_16 (parm) + real (kind=16) , intent (in) :: parm + integer (kind=8) :: _gfortran_specific__nint_8_16 + _gfortran_specific__nint_8_16 = nint (parm) +end function +#endif + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_16) +elemental function _gfortran_specific__nint_16_4 (parm) + real (kind=4) , intent (in) :: parm + integer (kind=16) :: _gfortran_specific__nint_16_4 + _gfortran_specific__nint_16_4 = nint (parm) +end function +#endif + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_16) +elemental function _gfortran_specific__nint_16_8 (parm) + real (kind=8) , intent (in) :: parm + integer (kind=16) :: _gfortran_specific__nint_16_8 + _gfortran_specific__nint_16_8 = nint (parm) +end function +#endif + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_16) +elemental function _gfortran_specific__nint_16_10 (parm) + real (kind=10) , intent (in) :: parm + integer (kind=16) :: _gfortran_specific__nint_16_10 + _gfortran_specific__nint_16_10 = nint (parm) +end function +#endif + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_16) +elemental function _gfortran_specific__nint_16_16 (parm) + real (kind=16) , intent (in) :: parm + integer (kind=16) :: _gfortran_specific__nint_16_16 + _gfortran_specific__nint_16_16 = nint (parm) +end function +#endif + + + +#if defined (HAVE_GFC_INTEGER_4) +elemental function _gfortran_specific__char_1_i4 (parm) + integer (kind=4) , intent (in) :: parm + character (kind=1,len=1) :: _gfortran_specific__char_1_i4 + _gfortran_specific__char_1_i4 = char (parm, kind=1) +end function +#endif + +#if defined (HAVE_GFC_INTEGER_8) +elemental function _gfortran_specific__char_1_i8 (parm) + integer (kind=8) , intent (in) :: parm + character (kind=1,len=1) :: _gfortran_specific__char_1_i8 + _gfortran_specific__char_1_i8 = char (parm, kind=1) +end function +#endif + +#if defined (HAVE_GFC_INTEGER_16) +elemental function _gfortran_specific__char_1_i16 (parm) + integer (kind=16) , intent (in) :: parm + character (kind=1,len=1) :: _gfortran_specific__char_1_i16 + _gfortran_specific__char_1_i16 = char (parm, kind=1) +end function +#endif + + + +#if defined (HAVE_GFC_INTEGER_4) +elemental function _gfortran_specific__len_1_i4 (parm) + character (kind=1,len=*) , intent (in) :: parm + integer (kind=4) :: _gfortran_specific__len_1_i4 + _gfortran_specific__len_1_i4 = len (parm) +end function +#endif + +#if defined (HAVE_GFC_INTEGER_8) +elemental function _gfortran_specific__len_1_i8 (parm) + character (kind=1,len=*) , intent (in) :: parm + integer (kind=8) :: _gfortran_specific__len_1_i8 + _gfortran_specific__len_1_i8 = len (parm) +end function +#endif + +#if defined (HAVE_GFC_INTEGER_16) +elemental function _gfortran_specific__len_1_i16 (parm) + character (kind=1,len=*) , intent (in) :: parm + integer (kind=16) :: _gfortran_specific__len_1_i16 + _gfortran_specific__len_1_i16 = len (parm) +end function +#endif + + + +#if defined (HAVE_GFC_INTEGER_4) +elemental function _gfortran_specific__index_1_i4 (parm1, parm2) + character (kind=1,len=*) , intent (in) :: parm1, parm2 + integer (kind=4) :: _gfortran_specific__index_1_i4 + _gfortran_specific__index_1_i4 = index (parm1, parm2) +end function +#endif + +#if defined (HAVE_GFC_INTEGER_8) +elemental function _gfortran_specific__index_1_i8 (parm1, parm2) + character (kind=1,len=*) , intent (in) :: parm1, parm2 + integer (kind=8) :: _gfortran_specific__index_1_i8 + _gfortran_specific__index_1_i8 = index (parm1, parm2) +end function +#endif + +#if defined (HAVE_GFC_INTEGER_16) +elemental function _gfortran_specific__index_1_i16 (parm1, parm2) + character (kind=1,len=*) , intent (in) :: parm1, parm2 + integer (kind=16) :: _gfortran_specific__index_1_i16 + _gfortran_specific__index_1_i16 = index (parm1, parm2) +end function +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r10.c new file mode 100644 index 0000000000..9601e32332 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r10.c @@ -0,0 +1,48 @@ +/* Implementation of the NEAREST intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_COPYSIGNL) && defined (HAVE_NEXTAFTERL) + +extern GFC_REAL_10 nearest_r10 (GFC_REAL_10 s, GFC_REAL_10 dir); +export_proto(nearest_r10); + +GFC_REAL_10 +nearest_r10 (GFC_REAL_10 s, GFC_REAL_10 dir) +{ + dir = copysignl (__builtin_infl (), dir); + if (FLT_EVAL_METHOD != 0) + { + /* ??? Work around glibc bug on x86. */ + volatile GFC_REAL_10 r = nextafterl (s, dir); + return r; + } + else + return nextafterl (s, dir); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r16.c new file mode 100644 index 0000000000..85499cbad1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r16.c @@ -0,0 +1,48 @@ +/* Implementation of the NEAREST intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_COPYSIGNL) && defined (HAVE_NEXTAFTERL) + +extern GFC_REAL_16 nearest_r16 (GFC_REAL_16 s, GFC_REAL_16 dir); +export_proto(nearest_r16); + +GFC_REAL_16 +nearest_r16 (GFC_REAL_16 s, GFC_REAL_16 dir) +{ + dir = copysignl (__builtin_infl (), dir); + if (FLT_EVAL_METHOD != 0) + { + /* ??? Work around glibc bug on x86. */ + volatile GFC_REAL_16 r = nextafterl (s, dir); + return r; + } + else + return nextafterl (s, dir); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r4.c new file mode 100644 index 0000000000..8ef4f31640 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r4.c @@ -0,0 +1,48 @@ +/* Implementation of the NEAREST intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_COPYSIGNF) && defined (HAVE_NEXTAFTERF) + +extern GFC_REAL_4 nearest_r4 (GFC_REAL_4 s, GFC_REAL_4 dir); +export_proto(nearest_r4); + +GFC_REAL_4 +nearest_r4 (GFC_REAL_4 s, GFC_REAL_4 dir) +{ + dir = copysignf (__builtin_inff (), dir); + if (FLT_EVAL_METHOD != 0) + { + /* ??? Work around glibc bug on x86. */ + volatile GFC_REAL_4 r = nextafterf (s, dir); + return r; + } + else + return nextafterf (s, dir); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r8.c new file mode 100644 index 0000000000..40e6590252 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r8.c @@ -0,0 +1,48 @@ +/* Implementation of the NEAREST intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_COPYSIGN) && defined (HAVE_NEXTAFTER) + +extern GFC_REAL_8 nearest_r8 (GFC_REAL_8 s, GFC_REAL_8 dir); +export_proto(nearest_r8); + +GFC_REAL_8 +nearest_r8 (GFC_REAL_8 s, GFC_REAL_8 dir) +{ + dir = copysign (__builtin_inf (), dir); + if (FLT_EVAL_METHOD != 0) + { + /* ??? Work around glibc bug on x86. */ + volatile GFC_REAL_8 r = nextafter (s, dir); + return r; + } + else + return nextafter (s, dir); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c10.c new file mode 100644 index 0000000000..29b1c5bae5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c10.c @@ -0,0 +1,315 @@ +/* Specific implementation of the PACK intrinsic + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_10) + +/* PACK is specified as follows: + + 13.14.80 PACK (ARRAY, MASK, [VECTOR]) + + Description: Pack an array into an array of rank one under the + control of a mask. + + Class: Transformational function. + + Arguments: + ARRAY may be of any type. It shall not be scalar. + MASK shall be of type LOGICAL. It shall be conformable with ARRAY. + VECTOR (optional) shall be of the same type and type parameters + as ARRAY. VECTOR shall have at least as many elements as + there are true elements in MASK. If MASK is a scalar + with the value true, VECTOR shall have at least as many + elements as there are in ARRAY. + + Result Characteristics: The result is an array of rank one with the + same type and type parameters as ARRAY. If VECTOR is present, the + result size is that of VECTOR; otherwise, the result size is the + number /t/ of true elements in MASK unless MASK is scalar with the + value true, in which case the result size is the size of ARRAY. + + Result Value: Element /i/ of the result is the element of ARRAY + that corresponds to the /i/th true element of MASK, taking elements + in array element order, for /i/ = 1, 2, ..., /t/. If VECTOR is + present and has size /n/ > /t/, element /i/ of the result has the + value VECTOR(/i/), for /i/ = /t/ + 1, ..., /n/. + + Examples: The nonzero elements of an array M with the value + | 0 0 0 | + | 9 0 0 | may be "gathered" by the function PACK. The result of + | 0 0 7 | + PACK (M, MASK = M.NE.0) is [9,7] and the result of PACK (M, M.NE.0, + VECTOR = (/ 2,4,6,8,10,12 /)) is [9,7,6,8,10,12]. + +There are two variants of the PACK intrinsic: one, where MASK is +array valued, and the other one where MASK is scalar. */ + +void +pack_c10 (gfc_array_c10 *ret, const gfc_array_c10 *array, + const gfc_array_l1 *mask, const gfc_array_c10 *vector) +{ + /* r.* indicates the return array. */ + index_type rstride0; + GFC_COMPLEX_10 * restrict rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const GFC_COMPLEX_10 *sptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; + index_type n; + index_type dim; + index_type nelem; + index_type total; + int mask_kind; + + dim = GFC_DESCRIPTOR_RANK (array); + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + zero_sized = 0; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (sstride[0] == 0) + sstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = mask_kind; + + if (zero_sized) + sptr = NULL; + else + sptr = array->data; + + if (ret->data == NULL || compile_options.bounds_check) + { + /* Count the elements, either for allocating memory or + for bounds checking. */ + + if (vector != NULL) + { + /* The return array will have as many + elements as there are in VECTOR. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + if (total < 0) + { + total = 0; + vector = NULL; + } + } + else + { + /* We have to count the true elements in MASK. */ + + /* TODO: We could speed up pack easily in the case of only + few .TRUE. entries in MASK, by keeping track of where we + would be in the source array during the initial traversal + of MASK, and caching the pointers to those elements. Then, + supposed the number of elements is small enough, we would + only have to traverse the list, and copy those elements + into the result array. In the case of datatypes which fit + in one of the integer types we could also cache the + value instead of a pointer to it. + This approach might be bad from the point of view of + cache behavior in the case where our cache is not big + enough to hold all elements that have to be copied. */ + + const GFC_LOGICAL_1 *m = mptr; + + total = 0; + if (zero_sized) + m = NULL; + + while (m) + { + /* Test this element. */ + if (*m) + total++; + + /* Advance to the next element. */ + m += mstride[0]; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it + and increment the next dimension. */ + count[n] = 0; + /* We could precalculate this product, but this is a + less frequently used path so probably not worth + it. */ + m -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + m = NULL; + break; + } + else + { + count[n]++; + m += mstride[n]; + } + } + } + } + + if (ret->data == NULL) + { + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + + ret->offset = 0; + if (total == 0) + { + /* In this case, nothing remains to be done. */ + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_10) * total); + } + else + { + /* We come here because of range checking. */ + index_type ret_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + if (total != ret_extent) + runtime_error ("Incorrect extent in return value of PACK intrinsic;" + " is %ld, should be %ld", (long int) total, + (long int) ret_extent); + } + } + + rstride0 = ret->dim[0].stride; + if (rstride0 == 0) + rstride0 = 1; + sstride0 = sstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + + while (sptr && mptr) + { + /* Test this element. */ + if (*mptr) + { + /* Add it. */ + *rptr = *sptr; + rptr += rstride0; + } + /* Advance to the next element. */ + sptr += sstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + mptr += mstride[n]; + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride; + if (sstride0 == 0) + sstride0 = 1; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + *rptr = *sptr; + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c16.c new file mode 100644 index 0000000000..d8589413e7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c16.c @@ -0,0 +1,315 @@ +/* Specific implementation of the PACK intrinsic + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_16) + +/* PACK is specified as follows: + + 13.14.80 PACK (ARRAY, MASK, [VECTOR]) + + Description: Pack an array into an array of rank one under the + control of a mask. + + Class: Transformational function. + + Arguments: + ARRAY may be of any type. It shall not be scalar. + MASK shall be of type LOGICAL. It shall be conformable with ARRAY. + VECTOR (optional) shall be of the same type and type parameters + as ARRAY. VECTOR shall have at least as many elements as + there are true elements in MASK. If MASK is a scalar + with the value true, VECTOR shall have at least as many + elements as there are in ARRAY. + + Result Characteristics: The result is an array of rank one with the + same type and type parameters as ARRAY. If VECTOR is present, the + result size is that of VECTOR; otherwise, the result size is the + number /t/ of true elements in MASK unless MASK is scalar with the + value true, in which case the result size is the size of ARRAY. + + Result Value: Element /i/ of the result is the element of ARRAY + that corresponds to the /i/th true element of MASK, taking elements + in array element order, for /i/ = 1, 2, ..., /t/. If VECTOR is + present and has size /n/ > /t/, element /i/ of the result has the + value VECTOR(/i/), for /i/ = /t/ + 1, ..., /n/. + + Examples: The nonzero elements of an array M with the value + | 0 0 0 | + | 9 0 0 | may be "gathered" by the function PACK. The result of + | 0 0 7 | + PACK (M, MASK = M.NE.0) is [9,7] and the result of PACK (M, M.NE.0, + VECTOR = (/ 2,4,6,8,10,12 /)) is [9,7,6,8,10,12]. + +There are two variants of the PACK intrinsic: one, where MASK is +array valued, and the other one where MASK is scalar. */ + +void +pack_c16 (gfc_array_c16 *ret, const gfc_array_c16 *array, + const gfc_array_l1 *mask, const gfc_array_c16 *vector) +{ + /* r.* indicates the return array. */ + index_type rstride0; + GFC_COMPLEX_16 * restrict rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const GFC_COMPLEX_16 *sptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; + index_type n; + index_type dim; + index_type nelem; + index_type total; + int mask_kind; + + dim = GFC_DESCRIPTOR_RANK (array); + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + zero_sized = 0; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (sstride[0] == 0) + sstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = mask_kind; + + if (zero_sized) + sptr = NULL; + else + sptr = array->data; + + if (ret->data == NULL || compile_options.bounds_check) + { + /* Count the elements, either for allocating memory or + for bounds checking. */ + + if (vector != NULL) + { + /* The return array will have as many + elements as there are in VECTOR. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + if (total < 0) + { + total = 0; + vector = NULL; + } + } + else + { + /* We have to count the true elements in MASK. */ + + /* TODO: We could speed up pack easily in the case of only + few .TRUE. entries in MASK, by keeping track of where we + would be in the source array during the initial traversal + of MASK, and caching the pointers to those elements. Then, + supposed the number of elements is small enough, we would + only have to traverse the list, and copy those elements + into the result array. In the case of datatypes which fit + in one of the integer types we could also cache the + value instead of a pointer to it. + This approach might be bad from the point of view of + cache behavior in the case where our cache is not big + enough to hold all elements that have to be copied. */ + + const GFC_LOGICAL_1 *m = mptr; + + total = 0; + if (zero_sized) + m = NULL; + + while (m) + { + /* Test this element. */ + if (*m) + total++; + + /* Advance to the next element. */ + m += mstride[0]; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it + and increment the next dimension. */ + count[n] = 0; + /* We could precalculate this product, but this is a + less frequently used path so probably not worth + it. */ + m -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + m = NULL; + break; + } + else + { + count[n]++; + m += mstride[n]; + } + } + } + } + + if (ret->data == NULL) + { + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + + ret->offset = 0; + if (total == 0) + { + /* In this case, nothing remains to be done. */ + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_16) * total); + } + else + { + /* We come here because of range checking. */ + index_type ret_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + if (total != ret_extent) + runtime_error ("Incorrect extent in return value of PACK intrinsic;" + " is %ld, should be %ld", (long int) total, + (long int) ret_extent); + } + } + + rstride0 = ret->dim[0].stride; + if (rstride0 == 0) + rstride0 = 1; + sstride0 = sstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + + while (sptr && mptr) + { + /* Test this element. */ + if (*mptr) + { + /* Add it. */ + *rptr = *sptr; + rptr += rstride0; + } + /* Advance to the next element. */ + sptr += sstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + mptr += mstride[n]; + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride; + if (sstride0 == 0) + sstride0 = 1; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + *rptr = *sptr; + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c4.c new file mode 100644 index 0000000000..5b69c98c8f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c4.c @@ -0,0 +1,315 @@ +/* Specific implementation of the PACK intrinsic + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_4) + +/* PACK is specified as follows: + + 13.14.80 PACK (ARRAY, MASK, [VECTOR]) + + Description: Pack an array into an array of rank one under the + control of a mask. + + Class: Transformational function. + + Arguments: + ARRAY may be of any type. It shall not be scalar. + MASK shall be of type LOGICAL. It shall be conformable with ARRAY. + VECTOR (optional) shall be of the same type and type parameters + as ARRAY. VECTOR shall have at least as many elements as + there are true elements in MASK. If MASK is a scalar + with the value true, VECTOR shall have at least as many + elements as there are in ARRAY. + + Result Characteristics: The result is an array of rank one with the + same type and type parameters as ARRAY. If VECTOR is present, the + result size is that of VECTOR; otherwise, the result size is the + number /t/ of true elements in MASK unless MASK is scalar with the + value true, in which case the result size is the size of ARRAY. + + Result Value: Element /i/ of the result is the element of ARRAY + that corresponds to the /i/th true element of MASK, taking elements + in array element order, for /i/ = 1, 2, ..., /t/. If VECTOR is + present and has size /n/ > /t/, element /i/ of the result has the + value VECTOR(/i/), for /i/ = /t/ + 1, ..., /n/. + + Examples: The nonzero elements of an array M with the value + | 0 0 0 | + | 9 0 0 | may be "gathered" by the function PACK. The result of + | 0 0 7 | + PACK (M, MASK = M.NE.0) is [9,7] and the result of PACK (M, M.NE.0, + VECTOR = (/ 2,4,6,8,10,12 /)) is [9,7,6,8,10,12]. + +There are two variants of the PACK intrinsic: one, where MASK is +array valued, and the other one where MASK is scalar. */ + +void +pack_c4 (gfc_array_c4 *ret, const gfc_array_c4 *array, + const gfc_array_l1 *mask, const gfc_array_c4 *vector) +{ + /* r.* indicates the return array. */ + index_type rstride0; + GFC_COMPLEX_4 * restrict rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const GFC_COMPLEX_4 *sptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; + index_type n; + index_type dim; + index_type nelem; + index_type total; + int mask_kind; + + dim = GFC_DESCRIPTOR_RANK (array); + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + zero_sized = 0; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (sstride[0] == 0) + sstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = mask_kind; + + if (zero_sized) + sptr = NULL; + else + sptr = array->data; + + if (ret->data == NULL || compile_options.bounds_check) + { + /* Count the elements, either for allocating memory or + for bounds checking. */ + + if (vector != NULL) + { + /* The return array will have as many + elements as there are in VECTOR. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + if (total < 0) + { + total = 0; + vector = NULL; + } + } + else + { + /* We have to count the true elements in MASK. */ + + /* TODO: We could speed up pack easily in the case of only + few .TRUE. entries in MASK, by keeping track of where we + would be in the source array during the initial traversal + of MASK, and caching the pointers to those elements. Then, + supposed the number of elements is small enough, we would + only have to traverse the list, and copy those elements + into the result array. In the case of datatypes which fit + in one of the integer types we could also cache the + value instead of a pointer to it. + This approach might be bad from the point of view of + cache behavior in the case where our cache is not big + enough to hold all elements that have to be copied. */ + + const GFC_LOGICAL_1 *m = mptr; + + total = 0; + if (zero_sized) + m = NULL; + + while (m) + { + /* Test this element. */ + if (*m) + total++; + + /* Advance to the next element. */ + m += mstride[0]; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it + and increment the next dimension. */ + count[n] = 0; + /* We could precalculate this product, but this is a + less frequently used path so probably not worth + it. */ + m -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + m = NULL; + break; + } + else + { + count[n]++; + m += mstride[n]; + } + } + } + } + + if (ret->data == NULL) + { + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + + ret->offset = 0; + if (total == 0) + { + /* In this case, nothing remains to be done. */ + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_4) * total); + } + else + { + /* We come here because of range checking. */ + index_type ret_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + if (total != ret_extent) + runtime_error ("Incorrect extent in return value of PACK intrinsic;" + " is %ld, should be %ld", (long int) total, + (long int) ret_extent); + } + } + + rstride0 = ret->dim[0].stride; + if (rstride0 == 0) + rstride0 = 1; + sstride0 = sstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + + while (sptr && mptr) + { + /* Test this element. */ + if (*mptr) + { + /* Add it. */ + *rptr = *sptr; + rptr += rstride0; + } + /* Advance to the next element. */ + sptr += sstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + mptr += mstride[n]; + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride; + if (sstride0 == 0) + sstride0 = 1; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + *rptr = *sptr; + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c8.c new file mode 100644 index 0000000000..2d61cb19a8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c8.c @@ -0,0 +1,315 @@ +/* Specific implementation of the PACK intrinsic + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_8) + +/* PACK is specified as follows: + + 13.14.80 PACK (ARRAY, MASK, [VECTOR]) + + Description: Pack an array into an array of rank one under the + control of a mask. + + Class: Transformational function. + + Arguments: + ARRAY may be of any type. It shall not be scalar. + MASK shall be of type LOGICAL. It shall be conformable with ARRAY. + VECTOR (optional) shall be of the same type and type parameters + as ARRAY. VECTOR shall have at least as many elements as + there are true elements in MASK. If MASK is a scalar + with the value true, VECTOR shall have at least as many + elements as there are in ARRAY. + + Result Characteristics: The result is an array of rank one with the + same type and type parameters as ARRAY. If VECTOR is present, the + result size is that of VECTOR; otherwise, the result size is the + number /t/ of true elements in MASK unless MASK is scalar with the + value true, in which case the result size is the size of ARRAY. + + Result Value: Element /i/ of the result is the element of ARRAY + that corresponds to the /i/th true element of MASK, taking elements + in array element order, for /i/ = 1, 2, ..., /t/. If VECTOR is + present and has size /n/ > /t/, element /i/ of the result has the + value VECTOR(/i/), for /i/ = /t/ + 1, ..., /n/. + + Examples: The nonzero elements of an array M with the value + | 0 0 0 | + | 9 0 0 | may be "gathered" by the function PACK. The result of + | 0 0 7 | + PACK (M, MASK = M.NE.0) is [9,7] and the result of PACK (M, M.NE.0, + VECTOR = (/ 2,4,6,8,10,12 /)) is [9,7,6,8,10,12]. + +There are two variants of the PACK intrinsic: one, where MASK is +array valued, and the other one where MASK is scalar. */ + +void +pack_c8 (gfc_array_c8 *ret, const gfc_array_c8 *array, + const gfc_array_l1 *mask, const gfc_array_c8 *vector) +{ + /* r.* indicates the return array. */ + index_type rstride0; + GFC_COMPLEX_8 * restrict rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const GFC_COMPLEX_8 *sptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; + index_type n; + index_type dim; + index_type nelem; + index_type total; + int mask_kind; + + dim = GFC_DESCRIPTOR_RANK (array); + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + zero_sized = 0; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (sstride[0] == 0) + sstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = mask_kind; + + if (zero_sized) + sptr = NULL; + else + sptr = array->data; + + if (ret->data == NULL || compile_options.bounds_check) + { + /* Count the elements, either for allocating memory or + for bounds checking. */ + + if (vector != NULL) + { + /* The return array will have as many + elements as there are in VECTOR. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + if (total < 0) + { + total = 0; + vector = NULL; + } + } + else + { + /* We have to count the true elements in MASK. */ + + /* TODO: We could speed up pack easily in the case of only + few .TRUE. entries in MASK, by keeping track of where we + would be in the source array during the initial traversal + of MASK, and caching the pointers to those elements. Then, + supposed the number of elements is small enough, we would + only have to traverse the list, and copy those elements + into the result array. In the case of datatypes which fit + in one of the integer types we could also cache the + value instead of a pointer to it. + This approach might be bad from the point of view of + cache behavior in the case where our cache is not big + enough to hold all elements that have to be copied. */ + + const GFC_LOGICAL_1 *m = mptr; + + total = 0; + if (zero_sized) + m = NULL; + + while (m) + { + /* Test this element. */ + if (*m) + total++; + + /* Advance to the next element. */ + m += mstride[0]; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it + and increment the next dimension. */ + count[n] = 0; + /* We could precalculate this product, but this is a + less frequently used path so probably not worth + it. */ + m -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + m = NULL; + break; + } + else + { + count[n]++; + m += mstride[n]; + } + } + } + } + + if (ret->data == NULL) + { + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + + ret->offset = 0; + if (total == 0) + { + /* In this case, nothing remains to be done. */ + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_8) * total); + } + else + { + /* We come here because of range checking. */ + index_type ret_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + if (total != ret_extent) + runtime_error ("Incorrect extent in return value of PACK intrinsic;" + " is %ld, should be %ld", (long int) total, + (long int) ret_extent); + } + } + + rstride0 = ret->dim[0].stride; + if (rstride0 == 0) + rstride0 = 1; + sstride0 = sstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + + while (sptr && mptr) + { + /* Test this element. */ + if (*mptr) + { + /* Add it. */ + *rptr = *sptr; + rptr += rstride0; + } + /* Advance to the next element. */ + sptr += sstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + mptr += mstride[n]; + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride; + if (sstride0 == 0) + sstride0 = 1; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + *rptr = *sptr; + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i1.c new file mode 100644 index 0000000000..32b04c232c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i1.c @@ -0,0 +1,315 @@ +/* Specific implementation of the PACK intrinsic + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) + +/* PACK is specified as follows: + + 13.14.80 PACK (ARRAY, MASK, [VECTOR]) + + Description: Pack an array into an array of rank one under the + control of a mask. + + Class: Transformational function. + + Arguments: + ARRAY may be of any type. It shall not be scalar. + MASK shall be of type LOGICAL. It shall be conformable with ARRAY. + VECTOR (optional) shall be of the same type and type parameters + as ARRAY. VECTOR shall have at least as many elements as + there are true elements in MASK. If MASK is a scalar + with the value true, VECTOR shall have at least as many + elements as there are in ARRAY. + + Result Characteristics: The result is an array of rank one with the + same type and type parameters as ARRAY. If VECTOR is present, the + result size is that of VECTOR; otherwise, the result size is the + number /t/ of true elements in MASK unless MASK is scalar with the + value true, in which case the result size is the size of ARRAY. + + Result Value: Element /i/ of the result is the element of ARRAY + that corresponds to the /i/th true element of MASK, taking elements + in array element order, for /i/ = 1, 2, ..., /t/. If VECTOR is + present and has size /n/ > /t/, element /i/ of the result has the + value VECTOR(/i/), for /i/ = /t/ + 1, ..., /n/. + + Examples: The nonzero elements of an array M with the value + | 0 0 0 | + | 9 0 0 | may be "gathered" by the function PACK. The result of + | 0 0 7 | + PACK (M, MASK = M.NE.0) is [9,7] and the result of PACK (M, M.NE.0, + VECTOR = (/ 2,4,6,8,10,12 /)) is [9,7,6,8,10,12]. + +There are two variants of the PACK intrinsic: one, where MASK is +array valued, and the other one where MASK is scalar. */ + +void +pack_i1 (gfc_array_i1 *ret, const gfc_array_i1 *array, + const gfc_array_l1 *mask, const gfc_array_i1 *vector) +{ + /* r.* indicates the return array. */ + index_type rstride0; + GFC_INTEGER_1 * restrict rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const GFC_INTEGER_1 *sptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; + index_type n; + index_type dim; + index_type nelem; + index_type total; + int mask_kind; + + dim = GFC_DESCRIPTOR_RANK (array); + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + zero_sized = 0; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (sstride[0] == 0) + sstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = mask_kind; + + if (zero_sized) + sptr = NULL; + else + sptr = array->data; + + if (ret->data == NULL || compile_options.bounds_check) + { + /* Count the elements, either for allocating memory or + for bounds checking. */ + + if (vector != NULL) + { + /* The return array will have as many + elements as there are in VECTOR. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + if (total < 0) + { + total = 0; + vector = NULL; + } + } + else + { + /* We have to count the true elements in MASK. */ + + /* TODO: We could speed up pack easily in the case of only + few .TRUE. entries in MASK, by keeping track of where we + would be in the source array during the initial traversal + of MASK, and caching the pointers to those elements. Then, + supposed the number of elements is small enough, we would + only have to traverse the list, and copy those elements + into the result array. In the case of datatypes which fit + in one of the integer types we could also cache the + value instead of a pointer to it. + This approach might be bad from the point of view of + cache behavior in the case where our cache is not big + enough to hold all elements that have to be copied. */ + + const GFC_LOGICAL_1 *m = mptr; + + total = 0; + if (zero_sized) + m = NULL; + + while (m) + { + /* Test this element. */ + if (*m) + total++; + + /* Advance to the next element. */ + m += mstride[0]; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it + and increment the next dimension. */ + count[n] = 0; + /* We could precalculate this product, but this is a + less frequently used path so probably not worth + it. */ + m -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + m = NULL; + break; + } + else + { + count[n]++; + m += mstride[n]; + } + } + } + } + + if (ret->data == NULL) + { + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + + ret->offset = 0; + if (total == 0) + { + /* In this case, nothing remains to be done. */ + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (sizeof (GFC_INTEGER_1) * total); + } + else + { + /* We come here because of range checking. */ + index_type ret_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + if (total != ret_extent) + runtime_error ("Incorrect extent in return value of PACK intrinsic;" + " is %ld, should be %ld", (long int) total, + (long int) ret_extent); + } + } + + rstride0 = ret->dim[0].stride; + if (rstride0 == 0) + rstride0 = 1; + sstride0 = sstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + + while (sptr && mptr) + { + /* Test this element. */ + if (*mptr) + { + /* Add it. */ + *rptr = *sptr; + rptr += rstride0; + } + /* Advance to the next element. */ + sptr += sstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + mptr += mstride[n]; + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride; + if (sstride0 == 0) + sstride0 = 1; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + *rptr = *sptr; + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i16.c new file mode 100644 index 0000000000..36c9252531 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i16.c @@ -0,0 +1,315 @@ +/* Specific implementation of the PACK intrinsic + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) + +/* PACK is specified as follows: + + 13.14.80 PACK (ARRAY, MASK, [VECTOR]) + + Description: Pack an array into an array of rank one under the + control of a mask. + + Class: Transformational function. + + Arguments: + ARRAY may be of any type. It shall not be scalar. + MASK shall be of type LOGICAL. It shall be conformable with ARRAY. + VECTOR (optional) shall be of the same type and type parameters + as ARRAY. VECTOR shall have at least as many elements as + there are true elements in MASK. If MASK is a scalar + with the value true, VECTOR shall have at least as many + elements as there are in ARRAY. + + Result Characteristics: The result is an array of rank one with the + same type and type parameters as ARRAY. If VECTOR is present, the + result size is that of VECTOR; otherwise, the result size is the + number /t/ of true elements in MASK unless MASK is scalar with the + value true, in which case the result size is the size of ARRAY. + + Result Value: Element /i/ of the result is the element of ARRAY + that corresponds to the /i/th true element of MASK, taking elements + in array element order, for /i/ = 1, 2, ..., /t/. If VECTOR is + present and has size /n/ > /t/, element /i/ of the result has the + value VECTOR(/i/), for /i/ = /t/ + 1, ..., /n/. + + Examples: The nonzero elements of an array M with the value + | 0 0 0 | + | 9 0 0 | may be "gathered" by the function PACK. The result of + | 0 0 7 | + PACK (M, MASK = M.NE.0) is [9,7] and the result of PACK (M, M.NE.0, + VECTOR = (/ 2,4,6,8,10,12 /)) is [9,7,6,8,10,12]. + +There are two variants of the PACK intrinsic: one, where MASK is +array valued, and the other one where MASK is scalar. */ + +void +pack_i16 (gfc_array_i16 *ret, const gfc_array_i16 *array, + const gfc_array_l1 *mask, const gfc_array_i16 *vector) +{ + /* r.* indicates the return array. */ + index_type rstride0; + GFC_INTEGER_16 * restrict rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const GFC_INTEGER_16 *sptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; + index_type n; + index_type dim; + index_type nelem; + index_type total; + int mask_kind; + + dim = GFC_DESCRIPTOR_RANK (array); + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + zero_sized = 0; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (sstride[0] == 0) + sstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = mask_kind; + + if (zero_sized) + sptr = NULL; + else + sptr = array->data; + + if (ret->data == NULL || compile_options.bounds_check) + { + /* Count the elements, either for allocating memory or + for bounds checking. */ + + if (vector != NULL) + { + /* The return array will have as many + elements as there are in VECTOR. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + if (total < 0) + { + total = 0; + vector = NULL; + } + } + else + { + /* We have to count the true elements in MASK. */ + + /* TODO: We could speed up pack easily in the case of only + few .TRUE. entries in MASK, by keeping track of where we + would be in the source array during the initial traversal + of MASK, and caching the pointers to those elements. Then, + supposed the number of elements is small enough, we would + only have to traverse the list, and copy those elements + into the result array. In the case of datatypes which fit + in one of the integer types we could also cache the + value instead of a pointer to it. + This approach might be bad from the point of view of + cache behavior in the case where our cache is not big + enough to hold all elements that have to be copied. */ + + const GFC_LOGICAL_1 *m = mptr; + + total = 0; + if (zero_sized) + m = NULL; + + while (m) + { + /* Test this element. */ + if (*m) + total++; + + /* Advance to the next element. */ + m += mstride[0]; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it + and increment the next dimension. */ + count[n] = 0; + /* We could precalculate this product, but this is a + less frequently used path so probably not worth + it. */ + m -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + m = NULL; + break; + } + else + { + count[n]++; + m += mstride[n]; + } + } + } + } + + if (ret->data == NULL) + { + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + + ret->offset = 0; + if (total == 0) + { + /* In this case, nothing remains to be done. */ + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * total); + } + else + { + /* We come here because of range checking. */ + index_type ret_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + if (total != ret_extent) + runtime_error ("Incorrect extent in return value of PACK intrinsic;" + " is %ld, should be %ld", (long int) total, + (long int) ret_extent); + } + } + + rstride0 = ret->dim[0].stride; + if (rstride0 == 0) + rstride0 = 1; + sstride0 = sstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + + while (sptr && mptr) + { + /* Test this element. */ + if (*mptr) + { + /* Add it. */ + *rptr = *sptr; + rptr += rstride0; + } + /* Advance to the next element. */ + sptr += sstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + mptr += mstride[n]; + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride; + if (sstride0 == 0) + sstride0 = 1; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + *rptr = *sptr; + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i2.c new file mode 100644 index 0000000000..b510231de6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i2.c @@ -0,0 +1,315 @@ +/* Specific implementation of the PACK intrinsic + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) + +/* PACK is specified as follows: + + 13.14.80 PACK (ARRAY, MASK, [VECTOR]) + + Description: Pack an array into an array of rank one under the + control of a mask. + + Class: Transformational function. + + Arguments: + ARRAY may be of any type. It shall not be scalar. + MASK shall be of type LOGICAL. It shall be conformable with ARRAY. + VECTOR (optional) shall be of the same type and type parameters + as ARRAY. VECTOR shall have at least as many elements as + there are true elements in MASK. If MASK is a scalar + with the value true, VECTOR shall have at least as many + elements as there are in ARRAY. + + Result Characteristics: The result is an array of rank one with the + same type and type parameters as ARRAY. If VECTOR is present, the + result size is that of VECTOR; otherwise, the result size is the + number /t/ of true elements in MASK unless MASK is scalar with the + value true, in which case the result size is the size of ARRAY. + + Result Value: Element /i/ of the result is the element of ARRAY + that corresponds to the /i/th true element of MASK, taking elements + in array element order, for /i/ = 1, 2, ..., /t/. If VECTOR is + present and has size /n/ > /t/, element /i/ of the result has the + value VECTOR(/i/), for /i/ = /t/ + 1, ..., /n/. + + Examples: The nonzero elements of an array M with the value + | 0 0 0 | + | 9 0 0 | may be "gathered" by the function PACK. The result of + | 0 0 7 | + PACK (M, MASK = M.NE.0) is [9,7] and the result of PACK (M, M.NE.0, + VECTOR = (/ 2,4,6,8,10,12 /)) is [9,7,6,8,10,12]. + +There are two variants of the PACK intrinsic: one, where MASK is +array valued, and the other one where MASK is scalar. */ + +void +pack_i2 (gfc_array_i2 *ret, const gfc_array_i2 *array, + const gfc_array_l1 *mask, const gfc_array_i2 *vector) +{ + /* r.* indicates the return array. */ + index_type rstride0; + GFC_INTEGER_2 * restrict rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const GFC_INTEGER_2 *sptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; + index_type n; + index_type dim; + index_type nelem; + index_type total; + int mask_kind; + + dim = GFC_DESCRIPTOR_RANK (array); + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + zero_sized = 0; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (sstride[0] == 0) + sstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = mask_kind; + + if (zero_sized) + sptr = NULL; + else + sptr = array->data; + + if (ret->data == NULL || compile_options.bounds_check) + { + /* Count the elements, either for allocating memory or + for bounds checking. */ + + if (vector != NULL) + { + /* The return array will have as many + elements as there are in VECTOR. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + if (total < 0) + { + total = 0; + vector = NULL; + } + } + else + { + /* We have to count the true elements in MASK. */ + + /* TODO: We could speed up pack easily in the case of only + few .TRUE. entries in MASK, by keeping track of where we + would be in the source array during the initial traversal + of MASK, and caching the pointers to those elements. Then, + supposed the number of elements is small enough, we would + only have to traverse the list, and copy those elements + into the result array. In the case of datatypes which fit + in one of the integer types we could also cache the + value instead of a pointer to it. + This approach might be bad from the point of view of + cache behavior in the case where our cache is not big + enough to hold all elements that have to be copied. */ + + const GFC_LOGICAL_1 *m = mptr; + + total = 0; + if (zero_sized) + m = NULL; + + while (m) + { + /* Test this element. */ + if (*m) + total++; + + /* Advance to the next element. */ + m += mstride[0]; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it + and increment the next dimension. */ + count[n] = 0; + /* We could precalculate this product, but this is a + less frequently used path so probably not worth + it. */ + m -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + m = NULL; + break; + } + else + { + count[n]++; + m += mstride[n]; + } + } + } + } + + if (ret->data == NULL) + { + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + + ret->offset = 0; + if (total == 0) + { + /* In this case, nothing remains to be done. */ + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (sizeof (GFC_INTEGER_2) * total); + } + else + { + /* We come here because of range checking. */ + index_type ret_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + if (total != ret_extent) + runtime_error ("Incorrect extent in return value of PACK intrinsic;" + " is %ld, should be %ld", (long int) total, + (long int) ret_extent); + } + } + + rstride0 = ret->dim[0].stride; + if (rstride0 == 0) + rstride0 = 1; + sstride0 = sstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + + while (sptr && mptr) + { + /* Test this element. */ + if (*mptr) + { + /* Add it. */ + *rptr = *sptr; + rptr += rstride0; + } + /* Advance to the next element. */ + sptr += sstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + mptr += mstride[n]; + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride; + if (sstride0 == 0) + sstride0 = 1; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + *rptr = *sptr; + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i4.c new file mode 100644 index 0000000000..b350b895c0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i4.c @@ -0,0 +1,315 @@ +/* Specific implementation of the PACK intrinsic + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) + +/* PACK is specified as follows: + + 13.14.80 PACK (ARRAY, MASK, [VECTOR]) + + Description: Pack an array into an array of rank one under the + control of a mask. + + Class: Transformational function. + + Arguments: + ARRAY may be of any type. It shall not be scalar. + MASK shall be of type LOGICAL. It shall be conformable with ARRAY. + VECTOR (optional) shall be of the same type and type parameters + as ARRAY. VECTOR shall have at least as many elements as + there are true elements in MASK. If MASK is a scalar + with the value true, VECTOR shall have at least as many + elements as there are in ARRAY. + + Result Characteristics: The result is an array of rank one with the + same type and type parameters as ARRAY. If VECTOR is present, the + result size is that of VECTOR; otherwise, the result size is the + number /t/ of true elements in MASK unless MASK is scalar with the + value true, in which case the result size is the size of ARRAY. + + Result Value: Element /i/ of the result is the element of ARRAY + that corresponds to the /i/th true element of MASK, taking elements + in array element order, for /i/ = 1, 2, ..., /t/. If VECTOR is + present and has size /n/ > /t/, element /i/ of the result has the + value VECTOR(/i/), for /i/ = /t/ + 1, ..., /n/. + + Examples: The nonzero elements of an array M with the value + | 0 0 0 | + | 9 0 0 | may be "gathered" by the function PACK. The result of + | 0 0 7 | + PACK (M, MASK = M.NE.0) is [9,7] and the result of PACK (M, M.NE.0, + VECTOR = (/ 2,4,6,8,10,12 /)) is [9,7,6,8,10,12]. + +There are two variants of the PACK intrinsic: one, where MASK is +array valued, and the other one where MASK is scalar. */ + +void +pack_i4 (gfc_array_i4 *ret, const gfc_array_i4 *array, + const gfc_array_l1 *mask, const gfc_array_i4 *vector) +{ + /* r.* indicates the return array. */ + index_type rstride0; + GFC_INTEGER_4 * restrict rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const GFC_INTEGER_4 *sptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; + index_type n; + index_type dim; + index_type nelem; + index_type total; + int mask_kind; + + dim = GFC_DESCRIPTOR_RANK (array); + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + zero_sized = 0; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (sstride[0] == 0) + sstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = mask_kind; + + if (zero_sized) + sptr = NULL; + else + sptr = array->data; + + if (ret->data == NULL || compile_options.bounds_check) + { + /* Count the elements, either for allocating memory or + for bounds checking. */ + + if (vector != NULL) + { + /* The return array will have as many + elements as there are in VECTOR. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + if (total < 0) + { + total = 0; + vector = NULL; + } + } + else + { + /* We have to count the true elements in MASK. */ + + /* TODO: We could speed up pack easily in the case of only + few .TRUE. entries in MASK, by keeping track of where we + would be in the source array during the initial traversal + of MASK, and caching the pointers to those elements. Then, + supposed the number of elements is small enough, we would + only have to traverse the list, and copy those elements + into the result array. In the case of datatypes which fit + in one of the integer types we could also cache the + value instead of a pointer to it. + This approach might be bad from the point of view of + cache behavior in the case where our cache is not big + enough to hold all elements that have to be copied. */ + + const GFC_LOGICAL_1 *m = mptr; + + total = 0; + if (zero_sized) + m = NULL; + + while (m) + { + /* Test this element. */ + if (*m) + total++; + + /* Advance to the next element. */ + m += mstride[0]; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it + and increment the next dimension. */ + count[n] = 0; + /* We could precalculate this product, but this is a + less frequently used path so probably not worth + it. */ + m -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + m = NULL; + break; + } + else + { + count[n]++; + m += mstride[n]; + } + } + } + } + + if (ret->data == NULL) + { + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + + ret->offset = 0; + if (total == 0) + { + /* In this case, nothing remains to be done. */ + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * total); + } + else + { + /* We come here because of range checking. */ + index_type ret_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + if (total != ret_extent) + runtime_error ("Incorrect extent in return value of PACK intrinsic;" + " is %ld, should be %ld", (long int) total, + (long int) ret_extent); + } + } + + rstride0 = ret->dim[0].stride; + if (rstride0 == 0) + rstride0 = 1; + sstride0 = sstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + + while (sptr && mptr) + { + /* Test this element. */ + if (*mptr) + { + /* Add it. */ + *rptr = *sptr; + rptr += rstride0; + } + /* Advance to the next element. */ + sptr += sstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + mptr += mstride[n]; + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride; + if (sstride0 == 0) + sstride0 = 1; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + *rptr = *sptr; + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i8.c new file mode 100644 index 0000000000..25f088353e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i8.c @@ -0,0 +1,315 @@ +/* Specific implementation of the PACK intrinsic + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) + +/* PACK is specified as follows: + + 13.14.80 PACK (ARRAY, MASK, [VECTOR]) + + Description: Pack an array into an array of rank one under the + control of a mask. + + Class: Transformational function. + + Arguments: + ARRAY may be of any type. It shall not be scalar. + MASK shall be of type LOGICAL. It shall be conformable with ARRAY. + VECTOR (optional) shall be of the same type and type parameters + as ARRAY. VECTOR shall have at least as many elements as + there are true elements in MASK. If MASK is a scalar + with the value true, VECTOR shall have at least as many + elements as there are in ARRAY. + + Result Characteristics: The result is an array of rank one with the + same type and type parameters as ARRAY. If VECTOR is present, the + result size is that of VECTOR; otherwise, the result size is the + number /t/ of true elements in MASK unless MASK is scalar with the + value true, in which case the result size is the size of ARRAY. + + Result Value: Element /i/ of the result is the element of ARRAY + that corresponds to the /i/th true element of MASK, taking elements + in array element order, for /i/ = 1, 2, ..., /t/. If VECTOR is + present and has size /n/ > /t/, element /i/ of the result has the + value VECTOR(/i/), for /i/ = /t/ + 1, ..., /n/. + + Examples: The nonzero elements of an array M with the value + | 0 0 0 | + | 9 0 0 | may be "gathered" by the function PACK. The result of + | 0 0 7 | + PACK (M, MASK = M.NE.0) is [9,7] and the result of PACK (M, M.NE.0, + VECTOR = (/ 2,4,6,8,10,12 /)) is [9,7,6,8,10,12]. + +There are two variants of the PACK intrinsic: one, where MASK is +array valued, and the other one where MASK is scalar. */ + +void +pack_i8 (gfc_array_i8 *ret, const gfc_array_i8 *array, + const gfc_array_l1 *mask, const gfc_array_i8 *vector) +{ + /* r.* indicates the return array. */ + index_type rstride0; + GFC_INTEGER_8 * restrict rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const GFC_INTEGER_8 *sptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; + index_type n; + index_type dim; + index_type nelem; + index_type total; + int mask_kind; + + dim = GFC_DESCRIPTOR_RANK (array); + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + zero_sized = 0; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (sstride[0] == 0) + sstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = mask_kind; + + if (zero_sized) + sptr = NULL; + else + sptr = array->data; + + if (ret->data == NULL || compile_options.bounds_check) + { + /* Count the elements, either for allocating memory or + for bounds checking. */ + + if (vector != NULL) + { + /* The return array will have as many + elements as there are in VECTOR. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + if (total < 0) + { + total = 0; + vector = NULL; + } + } + else + { + /* We have to count the true elements in MASK. */ + + /* TODO: We could speed up pack easily in the case of only + few .TRUE. entries in MASK, by keeping track of where we + would be in the source array during the initial traversal + of MASK, and caching the pointers to those elements. Then, + supposed the number of elements is small enough, we would + only have to traverse the list, and copy those elements + into the result array. In the case of datatypes which fit + in one of the integer types we could also cache the + value instead of a pointer to it. + This approach might be bad from the point of view of + cache behavior in the case where our cache is not big + enough to hold all elements that have to be copied. */ + + const GFC_LOGICAL_1 *m = mptr; + + total = 0; + if (zero_sized) + m = NULL; + + while (m) + { + /* Test this element. */ + if (*m) + total++; + + /* Advance to the next element. */ + m += mstride[0]; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it + and increment the next dimension. */ + count[n] = 0; + /* We could precalculate this product, but this is a + less frequently used path so probably not worth + it. */ + m -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + m = NULL; + break; + } + else + { + count[n]++; + m += mstride[n]; + } + } + } + } + + if (ret->data == NULL) + { + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + + ret->offset = 0; + if (total == 0) + { + /* In this case, nothing remains to be done. */ + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * total); + } + else + { + /* We come here because of range checking. */ + index_type ret_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + if (total != ret_extent) + runtime_error ("Incorrect extent in return value of PACK intrinsic;" + " is %ld, should be %ld", (long int) total, + (long int) ret_extent); + } + } + + rstride0 = ret->dim[0].stride; + if (rstride0 == 0) + rstride0 = 1; + sstride0 = sstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + + while (sptr && mptr) + { + /* Test this element. */ + if (*mptr) + { + /* Add it. */ + *rptr = *sptr; + rptr += rstride0; + } + /* Advance to the next element. */ + sptr += sstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + mptr += mstride[n]; + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride; + if (sstride0 == 0) + sstride0 = 1; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + *rptr = *sptr; + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r10.c new file mode 100644 index 0000000000..e1f3041d74 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r10.c @@ -0,0 +1,315 @@ +/* Specific implementation of the PACK intrinsic + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) + +/* PACK is specified as follows: + + 13.14.80 PACK (ARRAY, MASK, [VECTOR]) + + Description: Pack an array into an array of rank one under the + control of a mask. + + Class: Transformational function. + + Arguments: + ARRAY may be of any type. It shall not be scalar. + MASK shall be of type LOGICAL. It shall be conformable with ARRAY. + VECTOR (optional) shall be of the same type and type parameters + as ARRAY. VECTOR shall have at least as many elements as + there are true elements in MASK. If MASK is a scalar + with the value true, VECTOR shall have at least as many + elements as there are in ARRAY. + + Result Characteristics: The result is an array of rank one with the + same type and type parameters as ARRAY. If VECTOR is present, the + result size is that of VECTOR; otherwise, the result size is the + number /t/ of true elements in MASK unless MASK is scalar with the + value true, in which case the result size is the size of ARRAY. + + Result Value: Element /i/ of the result is the element of ARRAY + that corresponds to the /i/th true element of MASK, taking elements + in array element order, for /i/ = 1, 2, ..., /t/. If VECTOR is + present and has size /n/ > /t/, element /i/ of the result has the + value VECTOR(/i/), for /i/ = /t/ + 1, ..., /n/. + + Examples: The nonzero elements of an array M with the value + | 0 0 0 | + | 9 0 0 | may be "gathered" by the function PACK. The result of + | 0 0 7 | + PACK (M, MASK = M.NE.0) is [9,7] and the result of PACK (M, M.NE.0, + VECTOR = (/ 2,4,6,8,10,12 /)) is [9,7,6,8,10,12]. + +There are two variants of the PACK intrinsic: one, where MASK is +array valued, and the other one where MASK is scalar. */ + +void +pack_r10 (gfc_array_r10 *ret, const gfc_array_r10 *array, + const gfc_array_l1 *mask, const gfc_array_r10 *vector) +{ + /* r.* indicates the return array. */ + index_type rstride0; + GFC_REAL_10 * restrict rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const GFC_REAL_10 *sptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; + index_type n; + index_type dim; + index_type nelem; + index_type total; + int mask_kind; + + dim = GFC_DESCRIPTOR_RANK (array); + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + zero_sized = 0; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (sstride[0] == 0) + sstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = mask_kind; + + if (zero_sized) + sptr = NULL; + else + sptr = array->data; + + if (ret->data == NULL || compile_options.bounds_check) + { + /* Count the elements, either for allocating memory or + for bounds checking. */ + + if (vector != NULL) + { + /* The return array will have as many + elements as there are in VECTOR. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + if (total < 0) + { + total = 0; + vector = NULL; + } + } + else + { + /* We have to count the true elements in MASK. */ + + /* TODO: We could speed up pack easily in the case of only + few .TRUE. entries in MASK, by keeping track of where we + would be in the source array during the initial traversal + of MASK, and caching the pointers to those elements. Then, + supposed the number of elements is small enough, we would + only have to traverse the list, and copy those elements + into the result array. In the case of datatypes which fit + in one of the integer types we could also cache the + value instead of a pointer to it. + This approach might be bad from the point of view of + cache behavior in the case where our cache is not big + enough to hold all elements that have to be copied. */ + + const GFC_LOGICAL_1 *m = mptr; + + total = 0; + if (zero_sized) + m = NULL; + + while (m) + { + /* Test this element. */ + if (*m) + total++; + + /* Advance to the next element. */ + m += mstride[0]; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it + and increment the next dimension. */ + count[n] = 0; + /* We could precalculate this product, but this is a + less frequently used path so probably not worth + it. */ + m -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + m = NULL; + break; + } + else + { + count[n]++; + m += mstride[n]; + } + } + } + } + + if (ret->data == NULL) + { + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + + ret->offset = 0; + if (total == 0) + { + /* In this case, nothing remains to be done. */ + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (sizeof (GFC_REAL_10) * total); + } + else + { + /* We come here because of range checking. */ + index_type ret_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + if (total != ret_extent) + runtime_error ("Incorrect extent in return value of PACK intrinsic;" + " is %ld, should be %ld", (long int) total, + (long int) ret_extent); + } + } + + rstride0 = ret->dim[0].stride; + if (rstride0 == 0) + rstride0 = 1; + sstride0 = sstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + + while (sptr && mptr) + { + /* Test this element. */ + if (*mptr) + { + /* Add it. */ + *rptr = *sptr; + rptr += rstride0; + } + /* Advance to the next element. */ + sptr += sstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + mptr += mstride[n]; + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride; + if (sstride0 == 0) + sstride0 = 1; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + *rptr = *sptr; + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r16.c new file mode 100644 index 0000000000..834ef55b84 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r16.c @@ -0,0 +1,315 @@ +/* Specific implementation of the PACK intrinsic + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) + +/* PACK is specified as follows: + + 13.14.80 PACK (ARRAY, MASK, [VECTOR]) + + Description: Pack an array into an array of rank one under the + control of a mask. + + Class: Transformational function. + + Arguments: + ARRAY may be of any type. It shall not be scalar. + MASK shall be of type LOGICAL. It shall be conformable with ARRAY. + VECTOR (optional) shall be of the same type and type parameters + as ARRAY. VECTOR shall have at least as many elements as + there are true elements in MASK. If MASK is a scalar + with the value true, VECTOR shall have at least as many + elements as there are in ARRAY. + + Result Characteristics: The result is an array of rank one with the + same type and type parameters as ARRAY. If VECTOR is present, the + result size is that of VECTOR; otherwise, the result size is the + number /t/ of true elements in MASK unless MASK is scalar with the + value true, in which case the result size is the size of ARRAY. + + Result Value: Element /i/ of the result is the element of ARRAY + that corresponds to the /i/th true element of MASK, taking elements + in array element order, for /i/ = 1, 2, ..., /t/. If VECTOR is + present and has size /n/ > /t/, element /i/ of the result has the + value VECTOR(/i/), for /i/ = /t/ + 1, ..., /n/. + + Examples: The nonzero elements of an array M with the value + | 0 0 0 | + | 9 0 0 | may be "gathered" by the function PACK. The result of + | 0 0 7 | + PACK (M, MASK = M.NE.0) is [9,7] and the result of PACK (M, M.NE.0, + VECTOR = (/ 2,4,6,8,10,12 /)) is [9,7,6,8,10,12]. + +There are two variants of the PACK intrinsic: one, where MASK is +array valued, and the other one where MASK is scalar. */ + +void +pack_r16 (gfc_array_r16 *ret, const gfc_array_r16 *array, + const gfc_array_l1 *mask, const gfc_array_r16 *vector) +{ + /* r.* indicates the return array. */ + index_type rstride0; + GFC_REAL_16 * restrict rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const GFC_REAL_16 *sptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; + index_type n; + index_type dim; + index_type nelem; + index_type total; + int mask_kind; + + dim = GFC_DESCRIPTOR_RANK (array); + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + zero_sized = 0; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (sstride[0] == 0) + sstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = mask_kind; + + if (zero_sized) + sptr = NULL; + else + sptr = array->data; + + if (ret->data == NULL || compile_options.bounds_check) + { + /* Count the elements, either for allocating memory or + for bounds checking. */ + + if (vector != NULL) + { + /* The return array will have as many + elements as there are in VECTOR. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + if (total < 0) + { + total = 0; + vector = NULL; + } + } + else + { + /* We have to count the true elements in MASK. */ + + /* TODO: We could speed up pack easily in the case of only + few .TRUE. entries in MASK, by keeping track of where we + would be in the source array during the initial traversal + of MASK, and caching the pointers to those elements. Then, + supposed the number of elements is small enough, we would + only have to traverse the list, and copy those elements + into the result array. In the case of datatypes which fit + in one of the integer types we could also cache the + value instead of a pointer to it. + This approach might be bad from the point of view of + cache behavior in the case where our cache is not big + enough to hold all elements that have to be copied. */ + + const GFC_LOGICAL_1 *m = mptr; + + total = 0; + if (zero_sized) + m = NULL; + + while (m) + { + /* Test this element. */ + if (*m) + total++; + + /* Advance to the next element. */ + m += mstride[0]; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it + and increment the next dimension. */ + count[n] = 0; + /* We could precalculate this product, but this is a + less frequently used path so probably not worth + it. */ + m -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + m = NULL; + break; + } + else + { + count[n]++; + m += mstride[n]; + } + } + } + } + + if (ret->data == NULL) + { + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + + ret->offset = 0; + if (total == 0) + { + /* In this case, nothing remains to be done. */ + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (sizeof (GFC_REAL_16) * total); + } + else + { + /* We come here because of range checking. */ + index_type ret_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + if (total != ret_extent) + runtime_error ("Incorrect extent in return value of PACK intrinsic;" + " is %ld, should be %ld", (long int) total, + (long int) ret_extent); + } + } + + rstride0 = ret->dim[0].stride; + if (rstride0 == 0) + rstride0 = 1; + sstride0 = sstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + + while (sptr && mptr) + { + /* Test this element. */ + if (*mptr) + { + /* Add it. */ + *rptr = *sptr; + rptr += rstride0; + } + /* Advance to the next element. */ + sptr += sstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + mptr += mstride[n]; + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride; + if (sstride0 == 0) + sstride0 = 1; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + *rptr = *sptr; + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r4.c new file mode 100644 index 0000000000..859e216f56 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r4.c @@ -0,0 +1,315 @@ +/* Specific implementation of the PACK intrinsic + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) + +/* PACK is specified as follows: + + 13.14.80 PACK (ARRAY, MASK, [VECTOR]) + + Description: Pack an array into an array of rank one under the + control of a mask. + + Class: Transformational function. + + Arguments: + ARRAY may be of any type. It shall not be scalar. + MASK shall be of type LOGICAL. It shall be conformable with ARRAY. + VECTOR (optional) shall be of the same type and type parameters + as ARRAY. VECTOR shall have at least as many elements as + there are true elements in MASK. If MASK is a scalar + with the value true, VECTOR shall have at least as many + elements as there are in ARRAY. + + Result Characteristics: The result is an array of rank one with the + same type and type parameters as ARRAY. If VECTOR is present, the + result size is that of VECTOR; otherwise, the result size is the + number /t/ of true elements in MASK unless MASK is scalar with the + value true, in which case the result size is the size of ARRAY. + + Result Value: Element /i/ of the result is the element of ARRAY + that corresponds to the /i/th true element of MASK, taking elements + in array element order, for /i/ = 1, 2, ..., /t/. If VECTOR is + present and has size /n/ > /t/, element /i/ of the result has the + value VECTOR(/i/), for /i/ = /t/ + 1, ..., /n/. + + Examples: The nonzero elements of an array M with the value + | 0 0 0 | + | 9 0 0 | may be "gathered" by the function PACK. The result of + | 0 0 7 | + PACK (M, MASK = M.NE.0) is [9,7] and the result of PACK (M, M.NE.0, + VECTOR = (/ 2,4,6,8,10,12 /)) is [9,7,6,8,10,12]. + +There are two variants of the PACK intrinsic: one, where MASK is +array valued, and the other one where MASK is scalar. */ + +void +pack_r4 (gfc_array_r4 *ret, const gfc_array_r4 *array, + const gfc_array_l1 *mask, const gfc_array_r4 *vector) +{ + /* r.* indicates the return array. */ + index_type rstride0; + GFC_REAL_4 * restrict rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const GFC_REAL_4 *sptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; + index_type n; + index_type dim; + index_type nelem; + index_type total; + int mask_kind; + + dim = GFC_DESCRIPTOR_RANK (array); + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + zero_sized = 0; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (sstride[0] == 0) + sstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = mask_kind; + + if (zero_sized) + sptr = NULL; + else + sptr = array->data; + + if (ret->data == NULL || compile_options.bounds_check) + { + /* Count the elements, either for allocating memory or + for bounds checking. */ + + if (vector != NULL) + { + /* The return array will have as many + elements as there are in VECTOR. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + if (total < 0) + { + total = 0; + vector = NULL; + } + } + else + { + /* We have to count the true elements in MASK. */ + + /* TODO: We could speed up pack easily in the case of only + few .TRUE. entries in MASK, by keeping track of where we + would be in the source array during the initial traversal + of MASK, and caching the pointers to those elements. Then, + supposed the number of elements is small enough, we would + only have to traverse the list, and copy those elements + into the result array. In the case of datatypes which fit + in one of the integer types we could also cache the + value instead of a pointer to it. + This approach might be bad from the point of view of + cache behavior in the case where our cache is not big + enough to hold all elements that have to be copied. */ + + const GFC_LOGICAL_1 *m = mptr; + + total = 0; + if (zero_sized) + m = NULL; + + while (m) + { + /* Test this element. */ + if (*m) + total++; + + /* Advance to the next element. */ + m += mstride[0]; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it + and increment the next dimension. */ + count[n] = 0; + /* We could precalculate this product, but this is a + less frequently used path so probably not worth + it. */ + m -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + m = NULL; + break; + } + else + { + count[n]++; + m += mstride[n]; + } + } + } + } + + if (ret->data == NULL) + { + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + + ret->offset = 0; + if (total == 0) + { + /* In this case, nothing remains to be done. */ + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (sizeof (GFC_REAL_4) * total); + } + else + { + /* We come here because of range checking. */ + index_type ret_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + if (total != ret_extent) + runtime_error ("Incorrect extent in return value of PACK intrinsic;" + " is %ld, should be %ld", (long int) total, + (long int) ret_extent); + } + } + + rstride0 = ret->dim[0].stride; + if (rstride0 == 0) + rstride0 = 1; + sstride0 = sstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + + while (sptr && mptr) + { + /* Test this element. */ + if (*mptr) + { + /* Add it. */ + *rptr = *sptr; + rptr += rstride0; + } + /* Advance to the next element. */ + sptr += sstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + mptr += mstride[n]; + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride; + if (sstride0 == 0) + sstride0 = 1; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + *rptr = *sptr; + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r8.c new file mode 100644 index 0000000000..ba2e60d751 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r8.c @@ -0,0 +1,315 @@ +/* Specific implementation of the PACK intrinsic + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) + +/* PACK is specified as follows: + + 13.14.80 PACK (ARRAY, MASK, [VECTOR]) + + Description: Pack an array into an array of rank one under the + control of a mask. + + Class: Transformational function. + + Arguments: + ARRAY may be of any type. It shall not be scalar. + MASK shall be of type LOGICAL. It shall be conformable with ARRAY. + VECTOR (optional) shall be of the same type and type parameters + as ARRAY. VECTOR shall have at least as many elements as + there are true elements in MASK. If MASK is a scalar + with the value true, VECTOR shall have at least as many + elements as there are in ARRAY. + + Result Characteristics: The result is an array of rank one with the + same type and type parameters as ARRAY. If VECTOR is present, the + result size is that of VECTOR; otherwise, the result size is the + number /t/ of true elements in MASK unless MASK is scalar with the + value true, in which case the result size is the size of ARRAY. + + Result Value: Element /i/ of the result is the element of ARRAY + that corresponds to the /i/th true element of MASK, taking elements + in array element order, for /i/ = 1, 2, ..., /t/. If VECTOR is + present and has size /n/ > /t/, element /i/ of the result has the + value VECTOR(/i/), for /i/ = /t/ + 1, ..., /n/. + + Examples: The nonzero elements of an array M with the value + | 0 0 0 | + | 9 0 0 | may be "gathered" by the function PACK. The result of + | 0 0 7 | + PACK (M, MASK = M.NE.0) is [9,7] and the result of PACK (M, M.NE.0, + VECTOR = (/ 2,4,6,8,10,12 /)) is [9,7,6,8,10,12]. + +There are two variants of the PACK intrinsic: one, where MASK is +array valued, and the other one where MASK is scalar. */ + +void +pack_r8 (gfc_array_r8 *ret, const gfc_array_r8 *array, + const gfc_array_l1 *mask, const gfc_array_r8 *vector) +{ + /* r.* indicates the return array. */ + index_type rstride0; + GFC_REAL_8 * restrict rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const GFC_REAL_8 *sptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; + index_type n; + index_type dim; + index_type nelem; + index_type total; + int mask_kind; + + dim = GFC_DESCRIPTOR_RANK (array); + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + zero_sized = 0; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (sstride[0] == 0) + sstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = mask_kind; + + if (zero_sized) + sptr = NULL; + else + sptr = array->data; + + if (ret->data == NULL || compile_options.bounds_check) + { + /* Count the elements, either for allocating memory or + for bounds checking. */ + + if (vector != NULL) + { + /* The return array will have as many + elements as there are in VECTOR. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + if (total < 0) + { + total = 0; + vector = NULL; + } + } + else + { + /* We have to count the true elements in MASK. */ + + /* TODO: We could speed up pack easily in the case of only + few .TRUE. entries in MASK, by keeping track of where we + would be in the source array during the initial traversal + of MASK, and caching the pointers to those elements. Then, + supposed the number of elements is small enough, we would + only have to traverse the list, and copy those elements + into the result array. In the case of datatypes which fit + in one of the integer types we could also cache the + value instead of a pointer to it. + This approach might be bad from the point of view of + cache behavior in the case where our cache is not big + enough to hold all elements that have to be copied. */ + + const GFC_LOGICAL_1 *m = mptr; + + total = 0; + if (zero_sized) + m = NULL; + + while (m) + { + /* Test this element. */ + if (*m) + total++; + + /* Advance to the next element. */ + m += mstride[0]; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it + and increment the next dimension. */ + count[n] = 0; + /* We could precalculate this product, but this is a + less frequently used path so probably not worth + it. */ + m -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + m = NULL; + break; + } + else + { + count[n]++; + m += mstride[n]; + } + } + } + } + + if (ret->data == NULL) + { + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + + ret->offset = 0; + if (total == 0) + { + /* In this case, nothing remains to be done. */ + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (sizeof (GFC_REAL_8) * total); + } + else + { + /* We come here because of range checking. */ + index_type ret_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + if (total != ret_extent) + runtime_error ("Incorrect extent in return value of PACK intrinsic;" + " is %ld, should be %ld", (long int) total, + (long int) ret_extent); + } + } + + rstride0 = ret->dim[0].stride; + if (rstride0 == 0) + rstride0 = 1; + sstride0 = sstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + + while (sptr && mptr) + { + /* Test this element. */ + if (*mptr) + { + /* Add it. */ + *rptr = *sptr; + rptr += rstride0; + } + /* Advance to the next element. */ + sptr += sstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + mptr += mstride[n]; + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride; + if (sstride0 == 0) + sstride0 = 1; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + *rptr = *sptr; + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c10_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c10_i16.c new file mode 100644 index 0000000000..48b2fd8fad --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c10_i16.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_COMPLEX_10) && defined (HAVE_GFC_INTEGER_16) + +GFC_COMPLEX_10 pow_c10_i16 (GFC_COMPLEX_10 a, GFC_INTEGER_16 b); +export_proto(pow_c10_i16); + +GFC_COMPLEX_10 +pow_c10_i16 (GFC_COMPLEX_10 a, GFC_INTEGER_16 b) +{ + GFC_COMPLEX_10 pow, x; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c10_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c10_i4.c new file mode 100644 index 0000000000..2869f1d2d5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c10_i4.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_COMPLEX_10) && defined (HAVE_GFC_INTEGER_4) + +GFC_COMPLEX_10 pow_c10_i4 (GFC_COMPLEX_10 a, GFC_INTEGER_4 b); +export_proto(pow_c10_i4); + +GFC_COMPLEX_10 +pow_c10_i4 (GFC_COMPLEX_10 a, GFC_INTEGER_4 b) +{ + GFC_COMPLEX_10 pow, x; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c10_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c10_i8.c new file mode 100644 index 0000000000..32ff9d454e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c10_i8.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_COMPLEX_10) && defined (HAVE_GFC_INTEGER_8) + +GFC_COMPLEX_10 pow_c10_i8 (GFC_COMPLEX_10 a, GFC_INTEGER_8 b); +export_proto(pow_c10_i8); + +GFC_COMPLEX_10 +pow_c10_i8 (GFC_COMPLEX_10 a, GFC_INTEGER_8 b) +{ + GFC_COMPLEX_10 pow, x; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c16_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c16_i16.c new file mode 100644 index 0000000000..668f85eda4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c16_i16.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_COMPLEX_16) && defined (HAVE_GFC_INTEGER_16) + +GFC_COMPLEX_16 pow_c16_i16 (GFC_COMPLEX_16 a, GFC_INTEGER_16 b); +export_proto(pow_c16_i16); + +GFC_COMPLEX_16 +pow_c16_i16 (GFC_COMPLEX_16 a, GFC_INTEGER_16 b) +{ + GFC_COMPLEX_16 pow, x; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c16_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c16_i4.c new file mode 100644 index 0000000000..2d5be146c6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c16_i4.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_COMPLEX_16) && defined (HAVE_GFC_INTEGER_4) + +GFC_COMPLEX_16 pow_c16_i4 (GFC_COMPLEX_16 a, GFC_INTEGER_4 b); +export_proto(pow_c16_i4); + +GFC_COMPLEX_16 +pow_c16_i4 (GFC_COMPLEX_16 a, GFC_INTEGER_4 b) +{ + GFC_COMPLEX_16 pow, x; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c16_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c16_i8.c new file mode 100644 index 0000000000..e599cf08b3 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c16_i8.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_COMPLEX_16) && defined (HAVE_GFC_INTEGER_8) + +GFC_COMPLEX_16 pow_c16_i8 (GFC_COMPLEX_16 a, GFC_INTEGER_8 b); +export_proto(pow_c16_i8); + +GFC_COMPLEX_16 +pow_c16_i8 (GFC_COMPLEX_16 a, GFC_INTEGER_8 b) +{ + GFC_COMPLEX_16 pow, x; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c4_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c4_i16.c new file mode 100644 index 0000000000..3f6ff8d87a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c4_i16.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_COMPLEX_4) && defined (HAVE_GFC_INTEGER_16) + +GFC_COMPLEX_4 pow_c4_i16 (GFC_COMPLEX_4 a, GFC_INTEGER_16 b); +export_proto(pow_c4_i16); + +GFC_COMPLEX_4 +pow_c4_i16 (GFC_COMPLEX_4 a, GFC_INTEGER_16 b) +{ + GFC_COMPLEX_4 pow, x; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c4_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c4_i4.c new file mode 100644 index 0000000000..b5cc430c6b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c4_i4.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_COMPLEX_4) && defined (HAVE_GFC_INTEGER_4) + +GFC_COMPLEX_4 pow_c4_i4 (GFC_COMPLEX_4 a, GFC_INTEGER_4 b); +export_proto(pow_c4_i4); + +GFC_COMPLEX_4 +pow_c4_i4 (GFC_COMPLEX_4 a, GFC_INTEGER_4 b) +{ + GFC_COMPLEX_4 pow, x; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c4_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c4_i8.c new file mode 100644 index 0000000000..0bd0da7cea --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c4_i8.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_COMPLEX_4) && defined (HAVE_GFC_INTEGER_8) + +GFC_COMPLEX_4 pow_c4_i8 (GFC_COMPLEX_4 a, GFC_INTEGER_8 b); +export_proto(pow_c4_i8); + +GFC_COMPLEX_4 +pow_c4_i8 (GFC_COMPLEX_4 a, GFC_INTEGER_8 b) +{ + GFC_COMPLEX_4 pow, x; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c8_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c8_i16.c new file mode 100644 index 0000000000..8ac1465486 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c8_i16.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_COMPLEX_8) && defined (HAVE_GFC_INTEGER_16) + +GFC_COMPLEX_8 pow_c8_i16 (GFC_COMPLEX_8 a, GFC_INTEGER_16 b); +export_proto(pow_c8_i16); + +GFC_COMPLEX_8 +pow_c8_i16 (GFC_COMPLEX_8 a, GFC_INTEGER_16 b) +{ + GFC_COMPLEX_8 pow, x; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c8_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c8_i4.c new file mode 100644 index 0000000000..d788c1bd68 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c8_i4.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_COMPLEX_8) && defined (HAVE_GFC_INTEGER_4) + +GFC_COMPLEX_8 pow_c8_i4 (GFC_COMPLEX_8 a, GFC_INTEGER_4 b); +export_proto(pow_c8_i4); + +GFC_COMPLEX_8 +pow_c8_i4 (GFC_COMPLEX_8 a, GFC_INTEGER_4 b) +{ + GFC_COMPLEX_8 pow, x; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c8_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c8_i8.c new file mode 100644 index 0000000000..805146765b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c8_i8.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_COMPLEX_8) && defined (HAVE_GFC_INTEGER_8) + +GFC_COMPLEX_8 pow_c8_i8 (GFC_COMPLEX_8 a, GFC_INTEGER_8 b); +export_proto(pow_c8_i8); + +GFC_COMPLEX_8 +pow_c8_i8 (GFC_COMPLEX_8 a, GFC_INTEGER_8 b) +{ + GFC_COMPLEX_8 pow, x; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i16_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i16_i16.c new file mode 100644 index 0000000000..62a88b11b8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i16_i16.c @@ -0,0 +1,77 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_16) + +GFC_INTEGER_16 pow_i16_i16 (GFC_INTEGER_16 a, GFC_INTEGER_16 b); +export_proto(pow_i16_i16); + +GFC_INTEGER_16 +pow_i16_i16 (GFC_INTEGER_16 a, GFC_INTEGER_16 b) +{ + GFC_INTEGER_16 pow, x; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + if (x == 1) + return 1; + if (x == -1) + return (n & 1) ? -1 : 1; + return (x == 0) ? 1 / x : 0; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i16_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i16_i4.c new file mode 100644 index 0000000000..2d4c87ca72 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i16_i4.c @@ -0,0 +1,77 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_4) + +GFC_INTEGER_16 pow_i16_i4 (GFC_INTEGER_16 a, GFC_INTEGER_4 b); +export_proto(pow_i16_i4); + +GFC_INTEGER_16 +pow_i16_i4 (GFC_INTEGER_16 a, GFC_INTEGER_4 b) +{ + GFC_INTEGER_16 pow, x; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + if (x == 1) + return 1; + if (x == -1) + return (n & 1) ? -1 : 1; + return (x == 0) ? 1 / x : 0; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i16_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i16_i8.c new file mode 100644 index 0000000000..3c8401c6f1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i16_i8.c @@ -0,0 +1,77 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_8) + +GFC_INTEGER_16 pow_i16_i8 (GFC_INTEGER_16 a, GFC_INTEGER_8 b); +export_proto(pow_i16_i8); + +GFC_INTEGER_16 +pow_i16_i8 (GFC_INTEGER_16 a, GFC_INTEGER_8 b) +{ + GFC_INTEGER_16 pow, x; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + if (x == 1) + return 1; + if (x == -1) + return (n & 1) ? -1 : 1; + return (x == 0) ? 1 / x : 0; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i4_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i4_i16.c new file mode 100644 index 0000000000..c6a92f0a4f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i4_i16.c @@ -0,0 +1,77 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_16) + +GFC_INTEGER_4 pow_i4_i16 (GFC_INTEGER_4 a, GFC_INTEGER_16 b); +export_proto(pow_i4_i16); + +GFC_INTEGER_4 +pow_i4_i16 (GFC_INTEGER_4 a, GFC_INTEGER_16 b) +{ + GFC_INTEGER_4 pow, x; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + if (x == 1) + return 1; + if (x == -1) + return (n & 1) ? -1 : 1; + return (x == 0) ? 1 / x : 0; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i4_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i4_i4.c new file mode 100644 index 0000000000..b8ffd72559 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i4_i4.c @@ -0,0 +1,77 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_4) + +GFC_INTEGER_4 pow_i4_i4 (GFC_INTEGER_4 a, GFC_INTEGER_4 b); +export_proto(pow_i4_i4); + +GFC_INTEGER_4 +pow_i4_i4 (GFC_INTEGER_4 a, GFC_INTEGER_4 b) +{ + GFC_INTEGER_4 pow, x; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + if (x == 1) + return 1; + if (x == -1) + return (n & 1) ? -1 : 1; + return (x == 0) ? 1 / x : 0; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i4_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i4_i8.c new file mode 100644 index 0000000000..76ac564ec9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i4_i8.c @@ -0,0 +1,77 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_8) + +GFC_INTEGER_4 pow_i4_i8 (GFC_INTEGER_4 a, GFC_INTEGER_8 b); +export_proto(pow_i4_i8); + +GFC_INTEGER_4 +pow_i4_i8 (GFC_INTEGER_4 a, GFC_INTEGER_8 b) +{ + GFC_INTEGER_4 pow, x; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + if (x == 1) + return 1; + if (x == -1) + return (n & 1) ? -1 : 1; + return (x == 0) ? 1 / x : 0; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i8_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i8_i16.c new file mode 100644 index 0000000000..66a50b6318 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i8_i16.c @@ -0,0 +1,77 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_16) + +GFC_INTEGER_8 pow_i8_i16 (GFC_INTEGER_8 a, GFC_INTEGER_16 b); +export_proto(pow_i8_i16); + +GFC_INTEGER_8 +pow_i8_i16 (GFC_INTEGER_8 a, GFC_INTEGER_16 b) +{ + GFC_INTEGER_8 pow, x; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + if (x == 1) + return 1; + if (x == -1) + return (n & 1) ? -1 : 1; + return (x == 0) ? 1 / x : 0; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i8_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i8_i4.c new file mode 100644 index 0000000000..8b85946531 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i8_i4.c @@ -0,0 +1,77 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_4) + +GFC_INTEGER_8 pow_i8_i4 (GFC_INTEGER_8 a, GFC_INTEGER_4 b); +export_proto(pow_i8_i4); + +GFC_INTEGER_8 +pow_i8_i4 (GFC_INTEGER_8 a, GFC_INTEGER_4 b) +{ + GFC_INTEGER_8 pow, x; + GFC_INTEGER_4 n; + GFC_UINTEGER_4 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + if (x == 1) + return 1; + if (x == -1) + return (n & 1) ? -1 : 1; + return (x == 0) ? 1 / x : 0; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i8_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i8_i8.c new file mode 100644 index 0000000000..bc5aa0dd88 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i8_i8.c @@ -0,0 +1,77 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_8) + +GFC_INTEGER_8 pow_i8_i8 (GFC_INTEGER_8 a, GFC_INTEGER_8 b); +export_proto(pow_i8_i8); + +GFC_INTEGER_8 +pow_i8_i8 (GFC_INTEGER_8 a, GFC_INTEGER_8 b) +{ + GFC_INTEGER_8 pow, x; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + if (x == 1) + return 1; + if (x == -1) + return (n & 1) ? -1 : 1; + return (x == 0) ? 1 / x : 0; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r10_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r10_i16.c new file mode 100644 index 0000000000..d587c47674 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r10_i16.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_16) + +GFC_REAL_10 pow_r10_i16 (GFC_REAL_10 a, GFC_INTEGER_16 b); +export_proto(pow_r10_i16); + +GFC_REAL_10 +pow_r10_i16 (GFC_REAL_10 a, GFC_INTEGER_16 b) +{ + GFC_REAL_10 pow, x; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r10_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r10_i8.c new file mode 100644 index 0000000000..d2f66e019f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r10_i8.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_INTEGER_8) + +GFC_REAL_10 pow_r10_i8 (GFC_REAL_10 a, GFC_INTEGER_8 b); +export_proto(pow_r10_i8); + +GFC_REAL_10 +pow_r10_i8 (GFC_REAL_10 a, GFC_INTEGER_8 b) +{ + GFC_REAL_10 pow, x; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r16_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r16_i16.c new file mode 100644 index 0000000000..0e80dd787d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r16_i16.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_16) + +GFC_REAL_16 pow_r16_i16 (GFC_REAL_16 a, GFC_INTEGER_16 b); +export_proto(pow_r16_i16); + +GFC_REAL_16 +pow_r16_i16 (GFC_REAL_16 a, GFC_INTEGER_16 b) +{ + GFC_REAL_16 pow, x; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r16_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r16_i8.c new file mode 100644 index 0000000000..16ea271e84 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r16_i8.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_INTEGER_8) + +GFC_REAL_16 pow_r16_i8 (GFC_REAL_16 a, GFC_INTEGER_8 b); +export_proto(pow_r16_i8); + +GFC_REAL_16 +pow_r16_i8 (GFC_REAL_16 a, GFC_INTEGER_8 b) +{ + GFC_REAL_16 pow, x; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r4_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r4_i16.c new file mode 100644 index 0000000000..3ba8d3e309 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r4_i16.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_16) + +GFC_REAL_4 pow_r4_i16 (GFC_REAL_4 a, GFC_INTEGER_16 b); +export_proto(pow_r4_i16); + +GFC_REAL_4 +pow_r4_i16 (GFC_REAL_4 a, GFC_INTEGER_16 b) +{ + GFC_REAL_4 pow, x; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r4_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r4_i8.c new file mode 100644 index 0000000000..799adbaa8b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r4_i8.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_INTEGER_8) + +GFC_REAL_4 pow_r4_i8 (GFC_REAL_4 a, GFC_INTEGER_8 b); +export_proto(pow_r4_i8); + +GFC_REAL_4 +pow_r4_i8 (GFC_REAL_4 a, GFC_INTEGER_8 b) +{ + GFC_REAL_4 pow, x; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r8_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r8_i16.c new file mode 100644 index 0000000000..4c7dcb7f08 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r8_i16.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_16) + +GFC_REAL_8 pow_r8_i16 (GFC_REAL_8 a, GFC_INTEGER_16 b); +export_proto(pow_r8_i16); + +GFC_REAL_8 +pow_r8_i16 (GFC_REAL_8 a, GFC_INTEGER_16 b) +{ + GFC_REAL_8 pow, x; + GFC_INTEGER_16 n; + GFC_UINTEGER_16 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r8_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r8_i8.c new file mode 100644 index 0000000000..1a6a7460e5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r8_i8.c @@ -0,0 +1,75 @@ +/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_INTEGER_8) + +GFC_REAL_8 pow_r8_i8 (GFC_REAL_8 a, GFC_INTEGER_8 b); +export_proto(pow_r8_i8); + +GFC_REAL_8 +pow_r8_i8 (GFC_REAL_8 a, GFC_INTEGER_8 b) +{ + GFC_REAL_8 pow, x; + GFC_INTEGER_8 n; + GFC_UINTEGER_8 u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { + + u = -n; + x = pow / x; + } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c10.c new file mode 100644 index 0000000000..5fcba7993f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c10.c @@ -0,0 +1,545 @@ +/* Implementation of the PRODUCT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_10) && defined (HAVE_GFC_COMPLEX_10) + + +extern void product_c10 (gfc_array_c10 * const restrict, + gfc_array_c10 * const restrict, const index_type * const restrict); +export_proto(product_c10); + +void +product_c10 (gfc_array_c10 * const restrict retarray, + gfc_array_c10 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_COMPLEX_10 * restrict base; + GFC_COMPLEX_10 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_COMPLEX_10 * restrict src; + GFC_COMPLEX_10 result; + src = base; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mproduct_c10 (gfc_array_c10 * const restrict, + gfc_array_c10 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mproduct_c10); + +void +mproduct_c10 (gfc_array_c10 * const restrict retarray, + gfc_array_c10 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_10 * restrict dest; + const GFC_COMPLEX_10 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_COMPLEX_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in PRODUCT intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_COMPLEX_10 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_COMPLEX_10 result; + src = base; + msrc = mbase; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sproduct_c10 (gfc_array_c10 * const restrict, + gfc_array_c10 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sproduct_c10); + +void +sproduct_c10 (gfc_array_c10 * const restrict retarray, + gfc_array_c10 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_10 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + product_c10 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 1; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c16.c new file mode 100644 index 0000000000..ffa5836515 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c16.c @@ -0,0 +1,545 @@ +/* Implementation of the PRODUCT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_16) && defined (HAVE_GFC_COMPLEX_16) + + +extern void product_c16 (gfc_array_c16 * const restrict, + gfc_array_c16 * const restrict, const index_type * const restrict); +export_proto(product_c16); + +void +product_c16 (gfc_array_c16 * const restrict retarray, + gfc_array_c16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_COMPLEX_16 * restrict base; + GFC_COMPLEX_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_COMPLEX_16 * restrict src; + GFC_COMPLEX_16 result; + src = base; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mproduct_c16 (gfc_array_c16 * const restrict, + gfc_array_c16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mproduct_c16); + +void +mproduct_c16 (gfc_array_c16 * const restrict retarray, + gfc_array_c16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_16 * restrict dest; + const GFC_COMPLEX_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_COMPLEX_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in PRODUCT intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_COMPLEX_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_COMPLEX_16 result; + src = base; + msrc = mbase; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sproduct_c16 (gfc_array_c16 * const restrict, + gfc_array_c16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sproduct_c16); + +void +sproduct_c16 (gfc_array_c16 * const restrict retarray, + gfc_array_c16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + product_c16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 1; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c4.c new file mode 100644 index 0000000000..c2301d6f49 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c4.c @@ -0,0 +1,545 @@ +/* Implementation of the PRODUCT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_4) && defined (HAVE_GFC_COMPLEX_4) + + +extern void product_c4 (gfc_array_c4 * const restrict, + gfc_array_c4 * const restrict, const index_type * const restrict); +export_proto(product_c4); + +void +product_c4 (gfc_array_c4 * const restrict retarray, + gfc_array_c4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_COMPLEX_4 * restrict base; + GFC_COMPLEX_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_COMPLEX_4 * restrict src; + GFC_COMPLEX_4 result; + src = base; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mproduct_c4 (gfc_array_c4 * const restrict, + gfc_array_c4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mproduct_c4); + +void +mproduct_c4 (gfc_array_c4 * const restrict retarray, + gfc_array_c4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_4 * restrict dest; + const GFC_COMPLEX_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_COMPLEX_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in PRODUCT intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_COMPLEX_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_COMPLEX_4 result; + src = base; + msrc = mbase; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sproduct_c4 (gfc_array_c4 * const restrict, + gfc_array_c4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sproduct_c4); + +void +sproduct_c4 (gfc_array_c4 * const restrict retarray, + gfc_array_c4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + product_c4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 1; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c8.c new file mode 100644 index 0000000000..3c36570280 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c8.c @@ -0,0 +1,545 @@ +/* Implementation of the PRODUCT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_8) && defined (HAVE_GFC_COMPLEX_8) + + +extern void product_c8 (gfc_array_c8 * const restrict, + gfc_array_c8 * const restrict, const index_type * const restrict); +export_proto(product_c8); + +void +product_c8 (gfc_array_c8 * const restrict retarray, + gfc_array_c8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_COMPLEX_8 * restrict base; + GFC_COMPLEX_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_COMPLEX_8 * restrict src; + GFC_COMPLEX_8 result; + src = base; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mproduct_c8 (gfc_array_c8 * const restrict, + gfc_array_c8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mproduct_c8); + +void +mproduct_c8 (gfc_array_c8 * const restrict retarray, + gfc_array_c8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_8 * restrict dest; + const GFC_COMPLEX_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_COMPLEX_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in PRODUCT intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_COMPLEX_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_COMPLEX_8 result; + src = base; + msrc = mbase; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sproduct_c8 (gfc_array_c8 * const restrict, + gfc_array_c8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sproduct_c8); + +void +sproduct_c8 (gfc_array_c8 * const restrict retarray, + gfc_array_c8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + product_c8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 1; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i1.c new file mode 100644 index 0000000000..ab177fae6d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i1.c @@ -0,0 +1,545 @@ +/* Implementation of the PRODUCT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_1) + + +extern void product_i1 (gfc_array_i1 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict); +export_proto(product_i1); + +void +product_i1 (gfc_array_i1 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_1 * restrict base; + GFC_INTEGER_1 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_1) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_1 * restrict src; + GFC_INTEGER_1 result; + src = base; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mproduct_i1 (gfc_array_i1 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mproduct_i1); + +void +mproduct_i1 (gfc_array_i1 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_1 * restrict dest; + const GFC_INTEGER_1 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_1) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in PRODUCT intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_1 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_1 result; + src = base; + msrc = mbase; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sproduct_i1 (gfc_array_i1 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sproduct_i1); + +void +sproduct_i1 (gfc_array_i1 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_1 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + product_i1 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_1) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 1; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i16.c new file mode 100644 index 0000000000..12b0fa4ee6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i16.c @@ -0,0 +1,545 @@ +/* Implementation of the PRODUCT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_16) + + +extern void product_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict); +export_proto(product_i16); + +void +product_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_16 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_16 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mproduct_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mproduct_i16); + +void +mproduct_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_INTEGER_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in PRODUCT intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sproduct_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sproduct_i16); + +void +sproduct_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + product_i16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 1; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i2.c new file mode 100644 index 0000000000..b43e871c35 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i2.c @@ -0,0 +1,545 @@ +/* Implementation of the PRODUCT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_2) + + +extern void product_i2 (gfc_array_i2 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict); +export_proto(product_i2); + +void +product_i2 (gfc_array_i2 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_2 * restrict base; + GFC_INTEGER_2 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_2) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_2 * restrict src; + GFC_INTEGER_2 result; + src = base; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mproduct_i2 (gfc_array_i2 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mproduct_i2); + +void +mproduct_i2 (gfc_array_i2 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_2 * restrict dest; + const GFC_INTEGER_2 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_2) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in PRODUCT intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_2 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_2 result; + src = base; + msrc = mbase; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sproduct_i2 (gfc_array_i2 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sproduct_i2); + +void +sproduct_i2 (gfc_array_i2 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_2 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + product_i2 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_2) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 1; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i4.c new file mode 100644 index 0000000000..907fce89da --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i4.c @@ -0,0 +1,545 @@ +/* Implementation of the PRODUCT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_4) + + +extern void product_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict); +export_proto(product_i4); + +void +product_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_4 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_4 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mproduct_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mproduct_i4); + +void +mproduct_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_INTEGER_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in PRODUCT intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sproduct_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sproduct_i4); + +void +sproduct_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + product_i4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 1; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i8.c new file mode 100644 index 0000000000..3d8869841e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i8.c @@ -0,0 +1,545 @@ +/* Implementation of the PRODUCT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_8) + + +extern void product_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict); +export_proto(product_i8); + +void +product_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_8 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_8 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mproduct_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mproduct_i8); + +void +mproduct_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_INTEGER_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in PRODUCT intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sproduct_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sproduct_i8); + +void +sproduct_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + product_i8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 1; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r10.c new file mode 100644 index 0000000000..9da4722882 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r10.c @@ -0,0 +1,545 @@ +/* Implementation of the PRODUCT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_REAL_10) + + +extern void product_r10 (gfc_array_r10 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict); +export_proto(product_r10); + +void +product_r10 (gfc_array_r10 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_10 * restrict base; + GFC_REAL_10 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_10 * restrict src; + GFC_REAL_10 result; + src = base; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mproduct_r10 (gfc_array_r10 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mproduct_r10); + +void +mproduct_r10 (gfc_array_r10 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_10 * restrict dest; + const GFC_REAL_10 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in PRODUCT intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_10 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_10 result; + src = base; + msrc = mbase; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sproduct_r10 (gfc_array_r10 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sproduct_r10); + +void +sproduct_r10 (gfc_array_r10 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_10 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + product_r10 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 1; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r16.c new file mode 100644 index 0000000000..55c2303fa9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r16.c @@ -0,0 +1,545 @@ +/* Implementation of the PRODUCT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_REAL_16) + + +extern void product_r16 (gfc_array_r16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict); +export_proto(product_r16); + +void +product_r16 (gfc_array_r16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_16 * restrict base; + GFC_REAL_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_16 * restrict src; + GFC_REAL_16 result; + src = base; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mproduct_r16 (gfc_array_r16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mproduct_r16); + +void +mproduct_r16 (gfc_array_r16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_16 * restrict dest; + const GFC_REAL_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in PRODUCT intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_16 result; + src = base; + msrc = mbase; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sproduct_r16 (gfc_array_r16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sproduct_r16); + +void +sproduct_r16 (gfc_array_r16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + product_r16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 1; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r4.c new file mode 100644 index 0000000000..7a66bdc2ff --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r4.c @@ -0,0 +1,545 @@ +/* Implementation of the PRODUCT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_REAL_4) + + +extern void product_r4 (gfc_array_r4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict); +export_proto(product_r4); + +void +product_r4 (gfc_array_r4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_4 * restrict base; + GFC_REAL_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_4 * restrict src; + GFC_REAL_4 result; + src = base; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mproduct_r4 (gfc_array_r4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mproduct_r4); + +void +mproduct_r4 (gfc_array_r4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_4 * restrict dest; + const GFC_REAL_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in PRODUCT intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_4 result; + src = base; + msrc = mbase; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sproduct_r4 (gfc_array_r4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sproduct_r4); + +void +sproduct_r4 (gfc_array_r4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + product_r4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 1; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r8.c new file mode 100644 index 0000000000..d120369f7f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r8.c @@ -0,0 +1,545 @@ +/* Implementation of the PRODUCT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_REAL_8) + + +extern void product_r8 (gfc_array_r8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict); +export_proto(product_r8); + +void +product_r8 (gfc_array_r8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_8 * restrict base; + GFC_REAL_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_8 * restrict src; + GFC_REAL_8 result; + src = base; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void mproduct_r8 (gfc_array_r8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(mproduct_r8); + +void +mproduct_r8 (gfc_array_r8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_8 * restrict dest; + const GFC_REAL_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in PRODUCT intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_8 result; + src = base; + msrc = mbase; + { + + result = 1; + if (len <= 0) + *dest = 1; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result *= *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void sproduct_r8 (gfc_array_r8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(sproduct_r8); + +void +sproduct_r8 (gfc_array_r8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + product_r8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " PRODUCT intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " PRODUCT intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 1; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c10.c new file mode 100644 index 0000000000..4a4094cc77 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c10.c @@ -0,0 +1,352 @@ +/* Implementation of the RESHAPE + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_10) + +typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; + + +extern void reshape_c10 (gfc_array_c10 * const restrict, + gfc_array_c10 * const restrict, + shape_type * const restrict, + gfc_array_c10 * const restrict, + shape_type * const restrict); +export_proto(reshape_c10); + +void +reshape_c10 (gfc_array_c10 * const restrict ret, + gfc_array_c10 * const restrict source, + shape_type * const restrict shape, + gfc_array_c10 * const restrict pad, + shape_type * const restrict order) +{ + /* r.* indicates the return array. */ + index_type rcount[GFC_MAX_DIMENSIONS]; + index_type rextent[GFC_MAX_DIMENSIONS]; + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdim; + index_type rsize; + index_type rs; + index_type rex; + GFC_COMPLEX_10 *rptr; + /* s.* indicates the source array. */ + index_type scount[GFC_MAX_DIMENSIONS]; + index_type sextent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type sdim; + index_type ssize; + const GFC_COMPLEX_10 *sptr; + /* p.* indicates the pad array. */ + index_type pcount[GFC_MAX_DIMENSIONS]; + index_type pextent[GFC_MAX_DIMENSIONS]; + index_type pstride[GFC_MAX_DIMENSIONS]; + index_type pdim; + index_type psize; + const GFC_COMPLEX_10 *pptr; + + const GFC_COMPLEX_10 *src; + int n; + int dim; + int sempty, pempty, shape_empty; + index_type shape_data[GFC_MAX_DIMENSIONS]; + + rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1; + if (rdim != GFC_DESCRIPTOR_RANK(ret)) + runtime_error("rank of return array incorrect in RESHAPE intrinsic"); + + shape_empty = 0; + + for (n = 0; n < rdim; n++) + { + shape_data[n] = shape->data[n * shape->dim[0].stride]; + if (shape_data[n] <= 0) + { + shape_data[n] = 0; + shape_empty = 1; + } + } + + if (ret->data == NULL) + { + rs = 1; + for (n = 0; n < rdim; n++) + { + ret->dim[n].lbound = 0; + rex = shape_data[n]; + ret->dim[n].ubound = rex - 1; + ret->dim[n].stride = rs; + rs *= rex; + } + ret->offset = 0; + ret->data = internal_malloc_size ( rs * sizeof (GFC_COMPLEX_10)); + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rdim; + } + + if (shape_empty) + return; + + if (pad) + { + pdim = GFC_DESCRIPTOR_RANK (pad); + psize = 1; + pempty = 0; + for (n = 0; n < pdim; n++) + { + pcount[n] = 0; + pstride[n] = pad->dim[n].stride; + pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound; + if (pextent[n] <= 0) + { + pempty = 1; + pextent[n] = 0; + } + + if (psize == pstride[n]) + psize *= pextent[n]; + else + psize = 0; + } + pptr = pad->data; + } + else + { + pdim = 0; + psize = 1; + pempty = 1; + pptr = NULL; + } + + if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, source_extent; + + rs = 1; + for (n = 0; n < rdim; n++) + { + rs *= shape_data[n]; + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (ret_extent != shape_data[n]) + runtime_error("Incorrect extent in return value of RESHAPE" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) shape_data[n]); + } + + source_extent = 1; + sdim = GFC_DESCRIPTOR_RANK (source); + for (n = 0; n < sdim; n++) + { + index_type se; + se = source->dim[n].ubound + 1 - source->dim[0].lbound; + source_extent *= se > 0 ? se : 0; + } + + if (rs > source_extent && (!pad || pempty)) + runtime_error("Incorrect size in SOURCE argument to RESHAPE" + " intrinsic: is %ld, should be %ld", + (long int) source_extent, (long int) rs); + + if (order) + { + int seen[GFC_MAX_DIMENSIONS]; + index_type v; + + for (n = 0; n < rdim; n++) + seen[n] = 0; + + for (n = 0; n < rdim; n++) + { + v = order->data[n * order->dim[0].stride] - 1; + + if (v < 0 || v >= rdim) + runtime_error("Value %ld out of range in ORDER argument" + " to RESHAPE intrinsic", (long int) v + 1); + + if (seen[v] != 0) + runtime_error("Duplicate value %ld in ORDER argument to" + " RESHAPE intrinsic", (long int) v + 1); + + seen[v] = 1; + } + } + } + + rsize = 1; + for (n = 0; n < rdim; n++) + { + if (order) + dim = order->data[n * order->dim[0].stride] - 1; + else + dim = n; + + rcount[n] = 0; + rstride[n] = ret->dim[dim].stride; + rextent[n] = ret->dim[dim].ubound + 1 - ret->dim[dim].lbound; + if (rextent[n] < 0) + rextent[n] = 0; + + if (rextent[n] != shape_data[dim]) + runtime_error ("shape and target do not conform"); + + if (rsize == rstride[n]) + rsize *= rextent[n]; + else + rsize = 0; + if (rextent[n] <= 0) + return; + } + + sdim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + sempty = 0; + for (n = 0; n < sdim; n++) + { + scount[n] = 0; + sstride[n] = source->dim[n].stride; + sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (sextent[n] <= 0) + { + sempty = 1; + sextent[n] = 0; + } + + if (ssize == sstride[n]) + ssize *= sextent[n]; + else + ssize = 0; + } + + if (rsize != 0 && ssize != 0 && psize != 0) + { + rsize *= sizeof (GFC_COMPLEX_10); + ssize *= sizeof (GFC_COMPLEX_10); + psize *= sizeof (GFC_COMPLEX_10); + reshape_packed ((char *)ret->data, rsize, (char *)source->data, + ssize, pad ? (char *)pad->data : NULL, psize); + return; + } + rptr = ret->data; + src = sptr = source->data; + rstride0 = rstride[0]; + sstride0 = sstride[0]; + + if (sempty && pempty) + abort (); + + if (sempty) + { + /* Pretend we are using the pad array the first time around, too. */ + src = pptr; + sptr = pptr; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = pstride[0]; + } + } + + while (rptr) + { + /* Select between the source and pad arrays. */ + *rptr = *src; + /* Advance to the next element. */ + rptr += rstride0; + src += sstride0; + rcount[0]++; + scount[0]++; + + /* Advance to the next destination element. */ + n = 0; + while (rcount[n] == rextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + rcount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * rextent[n]; + n++; + if (n == rdim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + rcount[n]++; + rptr += rstride[n]; + } + } + /* Advance to the next source element. */ + n = 0; + while (scount[n] == sextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + scount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= sstride[n] * sextent[n]; + n++; + if (n == sdim) + { + if (sptr && pad) + { + /* Switch to the pad array. */ + sptr = NULL; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = sstride[0]; + } + } + /* We now start again from the beginning of the pad array. */ + src = pptr; + break; + } + else + { + scount[n]++; + src += sstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c16.c new file mode 100644 index 0000000000..a2cec54d5d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c16.c @@ -0,0 +1,352 @@ +/* Implementation of the RESHAPE + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_16) + +typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; + + +extern void reshape_c16 (gfc_array_c16 * const restrict, + gfc_array_c16 * const restrict, + shape_type * const restrict, + gfc_array_c16 * const restrict, + shape_type * const restrict); +export_proto(reshape_c16); + +void +reshape_c16 (gfc_array_c16 * const restrict ret, + gfc_array_c16 * const restrict source, + shape_type * const restrict shape, + gfc_array_c16 * const restrict pad, + shape_type * const restrict order) +{ + /* r.* indicates the return array. */ + index_type rcount[GFC_MAX_DIMENSIONS]; + index_type rextent[GFC_MAX_DIMENSIONS]; + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdim; + index_type rsize; + index_type rs; + index_type rex; + GFC_COMPLEX_16 *rptr; + /* s.* indicates the source array. */ + index_type scount[GFC_MAX_DIMENSIONS]; + index_type sextent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type sdim; + index_type ssize; + const GFC_COMPLEX_16 *sptr; + /* p.* indicates the pad array. */ + index_type pcount[GFC_MAX_DIMENSIONS]; + index_type pextent[GFC_MAX_DIMENSIONS]; + index_type pstride[GFC_MAX_DIMENSIONS]; + index_type pdim; + index_type psize; + const GFC_COMPLEX_16 *pptr; + + const GFC_COMPLEX_16 *src; + int n; + int dim; + int sempty, pempty, shape_empty; + index_type shape_data[GFC_MAX_DIMENSIONS]; + + rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1; + if (rdim != GFC_DESCRIPTOR_RANK(ret)) + runtime_error("rank of return array incorrect in RESHAPE intrinsic"); + + shape_empty = 0; + + for (n = 0; n < rdim; n++) + { + shape_data[n] = shape->data[n * shape->dim[0].stride]; + if (shape_data[n] <= 0) + { + shape_data[n] = 0; + shape_empty = 1; + } + } + + if (ret->data == NULL) + { + rs = 1; + for (n = 0; n < rdim; n++) + { + ret->dim[n].lbound = 0; + rex = shape_data[n]; + ret->dim[n].ubound = rex - 1; + ret->dim[n].stride = rs; + rs *= rex; + } + ret->offset = 0; + ret->data = internal_malloc_size ( rs * sizeof (GFC_COMPLEX_16)); + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rdim; + } + + if (shape_empty) + return; + + if (pad) + { + pdim = GFC_DESCRIPTOR_RANK (pad); + psize = 1; + pempty = 0; + for (n = 0; n < pdim; n++) + { + pcount[n] = 0; + pstride[n] = pad->dim[n].stride; + pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound; + if (pextent[n] <= 0) + { + pempty = 1; + pextent[n] = 0; + } + + if (psize == pstride[n]) + psize *= pextent[n]; + else + psize = 0; + } + pptr = pad->data; + } + else + { + pdim = 0; + psize = 1; + pempty = 1; + pptr = NULL; + } + + if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, source_extent; + + rs = 1; + for (n = 0; n < rdim; n++) + { + rs *= shape_data[n]; + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (ret_extent != shape_data[n]) + runtime_error("Incorrect extent in return value of RESHAPE" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) shape_data[n]); + } + + source_extent = 1; + sdim = GFC_DESCRIPTOR_RANK (source); + for (n = 0; n < sdim; n++) + { + index_type se; + se = source->dim[n].ubound + 1 - source->dim[0].lbound; + source_extent *= se > 0 ? se : 0; + } + + if (rs > source_extent && (!pad || pempty)) + runtime_error("Incorrect size in SOURCE argument to RESHAPE" + " intrinsic: is %ld, should be %ld", + (long int) source_extent, (long int) rs); + + if (order) + { + int seen[GFC_MAX_DIMENSIONS]; + index_type v; + + for (n = 0; n < rdim; n++) + seen[n] = 0; + + for (n = 0; n < rdim; n++) + { + v = order->data[n * order->dim[0].stride] - 1; + + if (v < 0 || v >= rdim) + runtime_error("Value %ld out of range in ORDER argument" + " to RESHAPE intrinsic", (long int) v + 1); + + if (seen[v] != 0) + runtime_error("Duplicate value %ld in ORDER argument to" + " RESHAPE intrinsic", (long int) v + 1); + + seen[v] = 1; + } + } + } + + rsize = 1; + for (n = 0; n < rdim; n++) + { + if (order) + dim = order->data[n * order->dim[0].stride] - 1; + else + dim = n; + + rcount[n] = 0; + rstride[n] = ret->dim[dim].stride; + rextent[n] = ret->dim[dim].ubound + 1 - ret->dim[dim].lbound; + if (rextent[n] < 0) + rextent[n] = 0; + + if (rextent[n] != shape_data[dim]) + runtime_error ("shape and target do not conform"); + + if (rsize == rstride[n]) + rsize *= rextent[n]; + else + rsize = 0; + if (rextent[n] <= 0) + return; + } + + sdim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + sempty = 0; + for (n = 0; n < sdim; n++) + { + scount[n] = 0; + sstride[n] = source->dim[n].stride; + sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (sextent[n] <= 0) + { + sempty = 1; + sextent[n] = 0; + } + + if (ssize == sstride[n]) + ssize *= sextent[n]; + else + ssize = 0; + } + + if (rsize != 0 && ssize != 0 && psize != 0) + { + rsize *= sizeof (GFC_COMPLEX_16); + ssize *= sizeof (GFC_COMPLEX_16); + psize *= sizeof (GFC_COMPLEX_16); + reshape_packed ((char *)ret->data, rsize, (char *)source->data, + ssize, pad ? (char *)pad->data : NULL, psize); + return; + } + rptr = ret->data; + src = sptr = source->data; + rstride0 = rstride[0]; + sstride0 = sstride[0]; + + if (sempty && pempty) + abort (); + + if (sempty) + { + /* Pretend we are using the pad array the first time around, too. */ + src = pptr; + sptr = pptr; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = pstride[0]; + } + } + + while (rptr) + { + /* Select between the source and pad arrays. */ + *rptr = *src; + /* Advance to the next element. */ + rptr += rstride0; + src += sstride0; + rcount[0]++; + scount[0]++; + + /* Advance to the next destination element. */ + n = 0; + while (rcount[n] == rextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + rcount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * rextent[n]; + n++; + if (n == rdim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + rcount[n]++; + rptr += rstride[n]; + } + } + /* Advance to the next source element. */ + n = 0; + while (scount[n] == sextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + scount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= sstride[n] * sextent[n]; + n++; + if (n == sdim) + { + if (sptr && pad) + { + /* Switch to the pad array. */ + sptr = NULL; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = sstride[0]; + } + } + /* We now start again from the beginning of the pad array. */ + src = pptr; + break; + } + else + { + scount[n]++; + src += sstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c4.c new file mode 100644 index 0000000000..95fbb791ff --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c4.c @@ -0,0 +1,352 @@ +/* Implementation of the RESHAPE + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_4) + +typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; + + +extern void reshape_c4 (gfc_array_c4 * const restrict, + gfc_array_c4 * const restrict, + shape_type * const restrict, + gfc_array_c4 * const restrict, + shape_type * const restrict); +export_proto(reshape_c4); + +void +reshape_c4 (gfc_array_c4 * const restrict ret, + gfc_array_c4 * const restrict source, + shape_type * const restrict shape, + gfc_array_c4 * const restrict pad, + shape_type * const restrict order) +{ + /* r.* indicates the return array. */ + index_type rcount[GFC_MAX_DIMENSIONS]; + index_type rextent[GFC_MAX_DIMENSIONS]; + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdim; + index_type rsize; + index_type rs; + index_type rex; + GFC_COMPLEX_4 *rptr; + /* s.* indicates the source array. */ + index_type scount[GFC_MAX_DIMENSIONS]; + index_type sextent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type sdim; + index_type ssize; + const GFC_COMPLEX_4 *sptr; + /* p.* indicates the pad array. */ + index_type pcount[GFC_MAX_DIMENSIONS]; + index_type pextent[GFC_MAX_DIMENSIONS]; + index_type pstride[GFC_MAX_DIMENSIONS]; + index_type pdim; + index_type psize; + const GFC_COMPLEX_4 *pptr; + + const GFC_COMPLEX_4 *src; + int n; + int dim; + int sempty, pempty, shape_empty; + index_type shape_data[GFC_MAX_DIMENSIONS]; + + rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1; + if (rdim != GFC_DESCRIPTOR_RANK(ret)) + runtime_error("rank of return array incorrect in RESHAPE intrinsic"); + + shape_empty = 0; + + for (n = 0; n < rdim; n++) + { + shape_data[n] = shape->data[n * shape->dim[0].stride]; + if (shape_data[n] <= 0) + { + shape_data[n] = 0; + shape_empty = 1; + } + } + + if (ret->data == NULL) + { + rs = 1; + for (n = 0; n < rdim; n++) + { + ret->dim[n].lbound = 0; + rex = shape_data[n]; + ret->dim[n].ubound = rex - 1; + ret->dim[n].stride = rs; + rs *= rex; + } + ret->offset = 0; + ret->data = internal_malloc_size ( rs * sizeof (GFC_COMPLEX_4)); + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rdim; + } + + if (shape_empty) + return; + + if (pad) + { + pdim = GFC_DESCRIPTOR_RANK (pad); + psize = 1; + pempty = 0; + for (n = 0; n < pdim; n++) + { + pcount[n] = 0; + pstride[n] = pad->dim[n].stride; + pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound; + if (pextent[n] <= 0) + { + pempty = 1; + pextent[n] = 0; + } + + if (psize == pstride[n]) + psize *= pextent[n]; + else + psize = 0; + } + pptr = pad->data; + } + else + { + pdim = 0; + psize = 1; + pempty = 1; + pptr = NULL; + } + + if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, source_extent; + + rs = 1; + for (n = 0; n < rdim; n++) + { + rs *= shape_data[n]; + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (ret_extent != shape_data[n]) + runtime_error("Incorrect extent in return value of RESHAPE" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) shape_data[n]); + } + + source_extent = 1; + sdim = GFC_DESCRIPTOR_RANK (source); + for (n = 0; n < sdim; n++) + { + index_type se; + se = source->dim[n].ubound + 1 - source->dim[0].lbound; + source_extent *= se > 0 ? se : 0; + } + + if (rs > source_extent && (!pad || pempty)) + runtime_error("Incorrect size in SOURCE argument to RESHAPE" + " intrinsic: is %ld, should be %ld", + (long int) source_extent, (long int) rs); + + if (order) + { + int seen[GFC_MAX_DIMENSIONS]; + index_type v; + + for (n = 0; n < rdim; n++) + seen[n] = 0; + + for (n = 0; n < rdim; n++) + { + v = order->data[n * order->dim[0].stride] - 1; + + if (v < 0 || v >= rdim) + runtime_error("Value %ld out of range in ORDER argument" + " to RESHAPE intrinsic", (long int) v + 1); + + if (seen[v] != 0) + runtime_error("Duplicate value %ld in ORDER argument to" + " RESHAPE intrinsic", (long int) v + 1); + + seen[v] = 1; + } + } + } + + rsize = 1; + for (n = 0; n < rdim; n++) + { + if (order) + dim = order->data[n * order->dim[0].stride] - 1; + else + dim = n; + + rcount[n] = 0; + rstride[n] = ret->dim[dim].stride; + rextent[n] = ret->dim[dim].ubound + 1 - ret->dim[dim].lbound; + if (rextent[n] < 0) + rextent[n] = 0; + + if (rextent[n] != shape_data[dim]) + runtime_error ("shape and target do not conform"); + + if (rsize == rstride[n]) + rsize *= rextent[n]; + else + rsize = 0; + if (rextent[n] <= 0) + return; + } + + sdim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + sempty = 0; + for (n = 0; n < sdim; n++) + { + scount[n] = 0; + sstride[n] = source->dim[n].stride; + sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (sextent[n] <= 0) + { + sempty = 1; + sextent[n] = 0; + } + + if (ssize == sstride[n]) + ssize *= sextent[n]; + else + ssize = 0; + } + + if (rsize != 0 && ssize != 0 && psize != 0) + { + rsize *= sizeof (GFC_COMPLEX_4); + ssize *= sizeof (GFC_COMPLEX_4); + psize *= sizeof (GFC_COMPLEX_4); + reshape_packed ((char *)ret->data, rsize, (char *)source->data, + ssize, pad ? (char *)pad->data : NULL, psize); + return; + } + rptr = ret->data; + src = sptr = source->data; + rstride0 = rstride[0]; + sstride0 = sstride[0]; + + if (sempty && pempty) + abort (); + + if (sempty) + { + /* Pretend we are using the pad array the first time around, too. */ + src = pptr; + sptr = pptr; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = pstride[0]; + } + } + + while (rptr) + { + /* Select between the source and pad arrays. */ + *rptr = *src; + /* Advance to the next element. */ + rptr += rstride0; + src += sstride0; + rcount[0]++; + scount[0]++; + + /* Advance to the next destination element. */ + n = 0; + while (rcount[n] == rextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + rcount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * rextent[n]; + n++; + if (n == rdim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + rcount[n]++; + rptr += rstride[n]; + } + } + /* Advance to the next source element. */ + n = 0; + while (scount[n] == sextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + scount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= sstride[n] * sextent[n]; + n++; + if (n == sdim) + { + if (sptr && pad) + { + /* Switch to the pad array. */ + sptr = NULL; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = sstride[0]; + } + } + /* We now start again from the beginning of the pad array. */ + src = pptr; + break; + } + else + { + scount[n]++; + src += sstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c8.c new file mode 100644 index 0000000000..a34127c8f8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c8.c @@ -0,0 +1,352 @@ +/* Implementation of the RESHAPE + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_8) + +typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; + + +extern void reshape_c8 (gfc_array_c8 * const restrict, + gfc_array_c8 * const restrict, + shape_type * const restrict, + gfc_array_c8 * const restrict, + shape_type * const restrict); +export_proto(reshape_c8); + +void +reshape_c8 (gfc_array_c8 * const restrict ret, + gfc_array_c8 * const restrict source, + shape_type * const restrict shape, + gfc_array_c8 * const restrict pad, + shape_type * const restrict order) +{ + /* r.* indicates the return array. */ + index_type rcount[GFC_MAX_DIMENSIONS]; + index_type rextent[GFC_MAX_DIMENSIONS]; + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdim; + index_type rsize; + index_type rs; + index_type rex; + GFC_COMPLEX_8 *rptr; + /* s.* indicates the source array. */ + index_type scount[GFC_MAX_DIMENSIONS]; + index_type sextent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type sdim; + index_type ssize; + const GFC_COMPLEX_8 *sptr; + /* p.* indicates the pad array. */ + index_type pcount[GFC_MAX_DIMENSIONS]; + index_type pextent[GFC_MAX_DIMENSIONS]; + index_type pstride[GFC_MAX_DIMENSIONS]; + index_type pdim; + index_type psize; + const GFC_COMPLEX_8 *pptr; + + const GFC_COMPLEX_8 *src; + int n; + int dim; + int sempty, pempty, shape_empty; + index_type shape_data[GFC_MAX_DIMENSIONS]; + + rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1; + if (rdim != GFC_DESCRIPTOR_RANK(ret)) + runtime_error("rank of return array incorrect in RESHAPE intrinsic"); + + shape_empty = 0; + + for (n = 0; n < rdim; n++) + { + shape_data[n] = shape->data[n * shape->dim[0].stride]; + if (shape_data[n] <= 0) + { + shape_data[n] = 0; + shape_empty = 1; + } + } + + if (ret->data == NULL) + { + rs = 1; + for (n = 0; n < rdim; n++) + { + ret->dim[n].lbound = 0; + rex = shape_data[n]; + ret->dim[n].ubound = rex - 1; + ret->dim[n].stride = rs; + rs *= rex; + } + ret->offset = 0; + ret->data = internal_malloc_size ( rs * sizeof (GFC_COMPLEX_8)); + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rdim; + } + + if (shape_empty) + return; + + if (pad) + { + pdim = GFC_DESCRIPTOR_RANK (pad); + psize = 1; + pempty = 0; + for (n = 0; n < pdim; n++) + { + pcount[n] = 0; + pstride[n] = pad->dim[n].stride; + pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound; + if (pextent[n] <= 0) + { + pempty = 1; + pextent[n] = 0; + } + + if (psize == pstride[n]) + psize *= pextent[n]; + else + psize = 0; + } + pptr = pad->data; + } + else + { + pdim = 0; + psize = 1; + pempty = 1; + pptr = NULL; + } + + if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, source_extent; + + rs = 1; + for (n = 0; n < rdim; n++) + { + rs *= shape_data[n]; + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (ret_extent != shape_data[n]) + runtime_error("Incorrect extent in return value of RESHAPE" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) shape_data[n]); + } + + source_extent = 1; + sdim = GFC_DESCRIPTOR_RANK (source); + for (n = 0; n < sdim; n++) + { + index_type se; + se = source->dim[n].ubound + 1 - source->dim[0].lbound; + source_extent *= se > 0 ? se : 0; + } + + if (rs > source_extent && (!pad || pempty)) + runtime_error("Incorrect size in SOURCE argument to RESHAPE" + " intrinsic: is %ld, should be %ld", + (long int) source_extent, (long int) rs); + + if (order) + { + int seen[GFC_MAX_DIMENSIONS]; + index_type v; + + for (n = 0; n < rdim; n++) + seen[n] = 0; + + for (n = 0; n < rdim; n++) + { + v = order->data[n * order->dim[0].stride] - 1; + + if (v < 0 || v >= rdim) + runtime_error("Value %ld out of range in ORDER argument" + " to RESHAPE intrinsic", (long int) v + 1); + + if (seen[v] != 0) + runtime_error("Duplicate value %ld in ORDER argument to" + " RESHAPE intrinsic", (long int) v + 1); + + seen[v] = 1; + } + } + } + + rsize = 1; + for (n = 0; n < rdim; n++) + { + if (order) + dim = order->data[n * order->dim[0].stride] - 1; + else + dim = n; + + rcount[n] = 0; + rstride[n] = ret->dim[dim].stride; + rextent[n] = ret->dim[dim].ubound + 1 - ret->dim[dim].lbound; + if (rextent[n] < 0) + rextent[n] = 0; + + if (rextent[n] != shape_data[dim]) + runtime_error ("shape and target do not conform"); + + if (rsize == rstride[n]) + rsize *= rextent[n]; + else + rsize = 0; + if (rextent[n] <= 0) + return; + } + + sdim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + sempty = 0; + for (n = 0; n < sdim; n++) + { + scount[n] = 0; + sstride[n] = source->dim[n].stride; + sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (sextent[n] <= 0) + { + sempty = 1; + sextent[n] = 0; + } + + if (ssize == sstride[n]) + ssize *= sextent[n]; + else + ssize = 0; + } + + if (rsize != 0 && ssize != 0 && psize != 0) + { + rsize *= sizeof (GFC_COMPLEX_8); + ssize *= sizeof (GFC_COMPLEX_8); + psize *= sizeof (GFC_COMPLEX_8); + reshape_packed ((char *)ret->data, rsize, (char *)source->data, + ssize, pad ? (char *)pad->data : NULL, psize); + return; + } + rptr = ret->data; + src = sptr = source->data; + rstride0 = rstride[0]; + sstride0 = sstride[0]; + + if (sempty && pempty) + abort (); + + if (sempty) + { + /* Pretend we are using the pad array the first time around, too. */ + src = pptr; + sptr = pptr; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = pstride[0]; + } + } + + while (rptr) + { + /* Select between the source and pad arrays. */ + *rptr = *src; + /* Advance to the next element. */ + rptr += rstride0; + src += sstride0; + rcount[0]++; + scount[0]++; + + /* Advance to the next destination element. */ + n = 0; + while (rcount[n] == rextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + rcount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * rextent[n]; + n++; + if (n == rdim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + rcount[n]++; + rptr += rstride[n]; + } + } + /* Advance to the next source element. */ + n = 0; + while (scount[n] == sextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + scount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= sstride[n] * sextent[n]; + n++; + if (n == sdim) + { + if (sptr && pad) + { + /* Switch to the pad array. */ + sptr = NULL; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = sstride[0]; + } + } + /* We now start again from the beginning of the pad array. */ + src = pptr; + break; + } + else + { + scount[n]++; + src += sstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_i16.c new file mode 100644 index 0000000000..e40be6079f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_i16.c @@ -0,0 +1,352 @@ +/* Implementation of the RESHAPE + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) + +typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; + + +extern void reshape_16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, + shape_type * const restrict, + gfc_array_i16 * const restrict, + shape_type * const restrict); +export_proto(reshape_16); + +void +reshape_16 (gfc_array_i16 * const restrict ret, + gfc_array_i16 * const restrict source, + shape_type * const restrict shape, + gfc_array_i16 * const restrict pad, + shape_type * const restrict order) +{ + /* r.* indicates the return array. */ + index_type rcount[GFC_MAX_DIMENSIONS]; + index_type rextent[GFC_MAX_DIMENSIONS]; + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdim; + index_type rsize; + index_type rs; + index_type rex; + GFC_INTEGER_16 *rptr; + /* s.* indicates the source array. */ + index_type scount[GFC_MAX_DIMENSIONS]; + index_type sextent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type sdim; + index_type ssize; + const GFC_INTEGER_16 *sptr; + /* p.* indicates the pad array. */ + index_type pcount[GFC_MAX_DIMENSIONS]; + index_type pextent[GFC_MAX_DIMENSIONS]; + index_type pstride[GFC_MAX_DIMENSIONS]; + index_type pdim; + index_type psize; + const GFC_INTEGER_16 *pptr; + + const GFC_INTEGER_16 *src; + int n; + int dim; + int sempty, pempty, shape_empty; + index_type shape_data[GFC_MAX_DIMENSIONS]; + + rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1; + if (rdim != GFC_DESCRIPTOR_RANK(ret)) + runtime_error("rank of return array incorrect in RESHAPE intrinsic"); + + shape_empty = 0; + + for (n = 0; n < rdim; n++) + { + shape_data[n] = shape->data[n * shape->dim[0].stride]; + if (shape_data[n] <= 0) + { + shape_data[n] = 0; + shape_empty = 1; + } + } + + if (ret->data == NULL) + { + rs = 1; + for (n = 0; n < rdim; n++) + { + ret->dim[n].lbound = 0; + rex = shape_data[n]; + ret->dim[n].ubound = rex - 1; + ret->dim[n].stride = rs; + rs *= rex; + } + ret->offset = 0; + ret->data = internal_malloc_size ( rs * sizeof (GFC_INTEGER_16)); + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rdim; + } + + if (shape_empty) + return; + + if (pad) + { + pdim = GFC_DESCRIPTOR_RANK (pad); + psize = 1; + pempty = 0; + for (n = 0; n < pdim; n++) + { + pcount[n] = 0; + pstride[n] = pad->dim[n].stride; + pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound; + if (pextent[n] <= 0) + { + pempty = 1; + pextent[n] = 0; + } + + if (psize == pstride[n]) + psize *= pextent[n]; + else + psize = 0; + } + pptr = pad->data; + } + else + { + pdim = 0; + psize = 1; + pempty = 1; + pptr = NULL; + } + + if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, source_extent; + + rs = 1; + for (n = 0; n < rdim; n++) + { + rs *= shape_data[n]; + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (ret_extent != shape_data[n]) + runtime_error("Incorrect extent in return value of RESHAPE" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) shape_data[n]); + } + + source_extent = 1; + sdim = GFC_DESCRIPTOR_RANK (source); + for (n = 0; n < sdim; n++) + { + index_type se; + se = source->dim[n].ubound + 1 - source->dim[0].lbound; + source_extent *= se > 0 ? se : 0; + } + + if (rs > source_extent && (!pad || pempty)) + runtime_error("Incorrect size in SOURCE argument to RESHAPE" + " intrinsic: is %ld, should be %ld", + (long int) source_extent, (long int) rs); + + if (order) + { + int seen[GFC_MAX_DIMENSIONS]; + index_type v; + + for (n = 0; n < rdim; n++) + seen[n] = 0; + + for (n = 0; n < rdim; n++) + { + v = order->data[n * order->dim[0].stride] - 1; + + if (v < 0 || v >= rdim) + runtime_error("Value %ld out of range in ORDER argument" + " to RESHAPE intrinsic", (long int) v + 1); + + if (seen[v] != 0) + runtime_error("Duplicate value %ld in ORDER argument to" + " RESHAPE intrinsic", (long int) v + 1); + + seen[v] = 1; + } + } + } + + rsize = 1; + for (n = 0; n < rdim; n++) + { + if (order) + dim = order->data[n * order->dim[0].stride] - 1; + else + dim = n; + + rcount[n] = 0; + rstride[n] = ret->dim[dim].stride; + rextent[n] = ret->dim[dim].ubound + 1 - ret->dim[dim].lbound; + if (rextent[n] < 0) + rextent[n] = 0; + + if (rextent[n] != shape_data[dim]) + runtime_error ("shape and target do not conform"); + + if (rsize == rstride[n]) + rsize *= rextent[n]; + else + rsize = 0; + if (rextent[n] <= 0) + return; + } + + sdim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + sempty = 0; + for (n = 0; n < sdim; n++) + { + scount[n] = 0; + sstride[n] = source->dim[n].stride; + sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (sextent[n] <= 0) + { + sempty = 1; + sextent[n] = 0; + } + + if (ssize == sstride[n]) + ssize *= sextent[n]; + else + ssize = 0; + } + + if (rsize != 0 && ssize != 0 && psize != 0) + { + rsize *= sizeof (GFC_INTEGER_16); + ssize *= sizeof (GFC_INTEGER_16); + psize *= sizeof (GFC_INTEGER_16); + reshape_packed ((char *)ret->data, rsize, (char *)source->data, + ssize, pad ? (char *)pad->data : NULL, psize); + return; + } + rptr = ret->data; + src = sptr = source->data; + rstride0 = rstride[0]; + sstride0 = sstride[0]; + + if (sempty && pempty) + abort (); + + if (sempty) + { + /* Pretend we are using the pad array the first time around, too. */ + src = pptr; + sptr = pptr; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = pstride[0]; + } + } + + while (rptr) + { + /* Select between the source and pad arrays. */ + *rptr = *src; + /* Advance to the next element. */ + rptr += rstride0; + src += sstride0; + rcount[0]++; + scount[0]++; + + /* Advance to the next destination element. */ + n = 0; + while (rcount[n] == rextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + rcount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * rextent[n]; + n++; + if (n == rdim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + rcount[n]++; + rptr += rstride[n]; + } + } + /* Advance to the next source element. */ + n = 0; + while (scount[n] == sextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + scount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= sstride[n] * sextent[n]; + n++; + if (n == sdim) + { + if (sptr && pad) + { + /* Switch to the pad array. */ + sptr = NULL; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = sstride[0]; + } + } + /* We now start again from the beginning of the pad array. */ + src = pptr; + break; + } + else + { + scount[n]++; + src += sstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_i4.c new file mode 100644 index 0000000000..4b76fdb30c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_i4.c @@ -0,0 +1,352 @@ +/* Implementation of the RESHAPE + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) + +typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; + + +extern void reshape_4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, + shape_type * const restrict, + gfc_array_i4 * const restrict, + shape_type * const restrict); +export_proto(reshape_4); + +void +reshape_4 (gfc_array_i4 * const restrict ret, + gfc_array_i4 * const restrict source, + shape_type * const restrict shape, + gfc_array_i4 * const restrict pad, + shape_type * const restrict order) +{ + /* r.* indicates the return array. */ + index_type rcount[GFC_MAX_DIMENSIONS]; + index_type rextent[GFC_MAX_DIMENSIONS]; + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdim; + index_type rsize; + index_type rs; + index_type rex; + GFC_INTEGER_4 *rptr; + /* s.* indicates the source array. */ + index_type scount[GFC_MAX_DIMENSIONS]; + index_type sextent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type sdim; + index_type ssize; + const GFC_INTEGER_4 *sptr; + /* p.* indicates the pad array. */ + index_type pcount[GFC_MAX_DIMENSIONS]; + index_type pextent[GFC_MAX_DIMENSIONS]; + index_type pstride[GFC_MAX_DIMENSIONS]; + index_type pdim; + index_type psize; + const GFC_INTEGER_4 *pptr; + + const GFC_INTEGER_4 *src; + int n; + int dim; + int sempty, pempty, shape_empty; + index_type shape_data[GFC_MAX_DIMENSIONS]; + + rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1; + if (rdim != GFC_DESCRIPTOR_RANK(ret)) + runtime_error("rank of return array incorrect in RESHAPE intrinsic"); + + shape_empty = 0; + + for (n = 0; n < rdim; n++) + { + shape_data[n] = shape->data[n * shape->dim[0].stride]; + if (shape_data[n] <= 0) + { + shape_data[n] = 0; + shape_empty = 1; + } + } + + if (ret->data == NULL) + { + rs = 1; + for (n = 0; n < rdim; n++) + { + ret->dim[n].lbound = 0; + rex = shape_data[n]; + ret->dim[n].ubound = rex - 1; + ret->dim[n].stride = rs; + rs *= rex; + } + ret->offset = 0; + ret->data = internal_malloc_size ( rs * sizeof (GFC_INTEGER_4)); + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rdim; + } + + if (shape_empty) + return; + + if (pad) + { + pdim = GFC_DESCRIPTOR_RANK (pad); + psize = 1; + pempty = 0; + for (n = 0; n < pdim; n++) + { + pcount[n] = 0; + pstride[n] = pad->dim[n].stride; + pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound; + if (pextent[n] <= 0) + { + pempty = 1; + pextent[n] = 0; + } + + if (psize == pstride[n]) + psize *= pextent[n]; + else + psize = 0; + } + pptr = pad->data; + } + else + { + pdim = 0; + psize = 1; + pempty = 1; + pptr = NULL; + } + + if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, source_extent; + + rs = 1; + for (n = 0; n < rdim; n++) + { + rs *= shape_data[n]; + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (ret_extent != shape_data[n]) + runtime_error("Incorrect extent in return value of RESHAPE" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) shape_data[n]); + } + + source_extent = 1; + sdim = GFC_DESCRIPTOR_RANK (source); + for (n = 0; n < sdim; n++) + { + index_type se; + se = source->dim[n].ubound + 1 - source->dim[0].lbound; + source_extent *= se > 0 ? se : 0; + } + + if (rs > source_extent && (!pad || pempty)) + runtime_error("Incorrect size in SOURCE argument to RESHAPE" + " intrinsic: is %ld, should be %ld", + (long int) source_extent, (long int) rs); + + if (order) + { + int seen[GFC_MAX_DIMENSIONS]; + index_type v; + + for (n = 0; n < rdim; n++) + seen[n] = 0; + + for (n = 0; n < rdim; n++) + { + v = order->data[n * order->dim[0].stride] - 1; + + if (v < 0 || v >= rdim) + runtime_error("Value %ld out of range in ORDER argument" + " to RESHAPE intrinsic", (long int) v + 1); + + if (seen[v] != 0) + runtime_error("Duplicate value %ld in ORDER argument to" + " RESHAPE intrinsic", (long int) v + 1); + + seen[v] = 1; + } + } + } + + rsize = 1; + for (n = 0; n < rdim; n++) + { + if (order) + dim = order->data[n * order->dim[0].stride] - 1; + else + dim = n; + + rcount[n] = 0; + rstride[n] = ret->dim[dim].stride; + rextent[n] = ret->dim[dim].ubound + 1 - ret->dim[dim].lbound; + if (rextent[n] < 0) + rextent[n] = 0; + + if (rextent[n] != shape_data[dim]) + runtime_error ("shape and target do not conform"); + + if (rsize == rstride[n]) + rsize *= rextent[n]; + else + rsize = 0; + if (rextent[n] <= 0) + return; + } + + sdim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + sempty = 0; + for (n = 0; n < sdim; n++) + { + scount[n] = 0; + sstride[n] = source->dim[n].stride; + sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (sextent[n] <= 0) + { + sempty = 1; + sextent[n] = 0; + } + + if (ssize == sstride[n]) + ssize *= sextent[n]; + else + ssize = 0; + } + + if (rsize != 0 && ssize != 0 && psize != 0) + { + rsize *= sizeof (GFC_INTEGER_4); + ssize *= sizeof (GFC_INTEGER_4); + psize *= sizeof (GFC_INTEGER_4); + reshape_packed ((char *)ret->data, rsize, (char *)source->data, + ssize, pad ? (char *)pad->data : NULL, psize); + return; + } + rptr = ret->data; + src = sptr = source->data; + rstride0 = rstride[0]; + sstride0 = sstride[0]; + + if (sempty && pempty) + abort (); + + if (sempty) + { + /* Pretend we are using the pad array the first time around, too. */ + src = pptr; + sptr = pptr; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = pstride[0]; + } + } + + while (rptr) + { + /* Select between the source and pad arrays. */ + *rptr = *src; + /* Advance to the next element. */ + rptr += rstride0; + src += sstride0; + rcount[0]++; + scount[0]++; + + /* Advance to the next destination element. */ + n = 0; + while (rcount[n] == rextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + rcount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * rextent[n]; + n++; + if (n == rdim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + rcount[n]++; + rptr += rstride[n]; + } + } + /* Advance to the next source element. */ + n = 0; + while (scount[n] == sextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + scount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= sstride[n] * sextent[n]; + n++; + if (n == sdim) + { + if (sptr && pad) + { + /* Switch to the pad array. */ + sptr = NULL; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = sstride[0]; + } + } + /* We now start again from the beginning of the pad array. */ + src = pptr; + break; + } + else + { + scount[n]++; + src += sstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_i8.c new file mode 100644 index 0000000000..8856e81582 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_i8.c @@ -0,0 +1,352 @@ +/* Implementation of the RESHAPE + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) + +typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; + + +extern void reshape_8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, + shape_type * const restrict, + gfc_array_i8 * const restrict, + shape_type * const restrict); +export_proto(reshape_8); + +void +reshape_8 (gfc_array_i8 * const restrict ret, + gfc_array_i8 * const restrict source, + shape_type * const restrict shape, + gfc_array_i8 * const restrict pad, + shape_type * const restrict order) +{ + /* r.* indicates the return array. */ + index_type rcount[GFC_MAX_DIMENSIONS]; + index_type rextent[GFC_MAX_DIMENSIONS]; + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdim; + index_type rsize; + index_type rs; + index_type rex; + GFC_INTEGER_8 *rptr; + /* s.* indicates the source array. */ + index_type scount[GFC_MAX_DIMENSIONS]; + index_type sextent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type sdim; + index_type ssize; + const GFC_INTEGER_8 *sptr; + /* p.* indicates the pad array. */ + index_type pcount[GFC_MAX_DIMENSIONS]; + index_type pextent[GFC_MAX_DIMENSIONS]; + index_type pstride[GFC_MAX_DIMENSIONS]; + index_type pdim; + index_type psize; + const GFC_INTEGER_8 *pptr; + + const GFC_INTEGER_8 *src; + int n; + int dim; + int sempty, pempty, shape_empty; + index_type shape_data[GFC_MAX_DIMENSIONS]; + + rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1; + if (rdim != GFC_DESCRIPTOR_RANK(ret)) + runtime_error("rank of return array incorrect in RESHAPE intrinsic"); + + shape_empty = 0; + + for (n = 0; n < rdim; n++) + { + shape_data[n] = shape->data[n * shape->dim[0].stride]; + if (shape_data[n] <= 0) + { + shape_data[n] = 0; + shape_empty = 1; + } + } + + if (ret->data == NULL) + { + rs = 1; + for (n = 0; n < rdim; n++) + { + ret->dim[n].lbound = 0; + rex = shape_data[n]; + ret->dim[n].ubound = rex - 1; + ret->dim[n].stride = rs; + rs *= rex; + } + ret->offset = 0; + ret->data = internal_malloc_size ( rs * sizeof (GFC_INTEGER_8)); + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rdim; + } + + if (shape_empty) + return; + + if (pad) + { + pdim = GFC_DESCRIPTOR_RANK (pad); + psize = 1; + pempty = 0; + for (n = 0; n < pdim; n++) + { + pcount[n] = 0; + pstride[n] = pad->dim[n].stride; + pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound; + if (pextent[n] <= 0) + { + pempty = 1; + pextent[n] = 0; + } + + if (psize == pstride[n]) + psize *= pextent[n]; + else + psize = 0; + } + pptr = pad->data; + } + else + { + pdim = 0; + psize = 1; + pempty = 1; + pptr = NULL; + } + + if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, source_extent; + + rs = 1; + for (n = 0; n < rdim; n++) + { + rs *= shape_data[n]; + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (ret_extent != shape_data[n]) + runtime_error("Incorrect extent in return value of RESHAPE" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) shape_data[n]); + } + + source_extent = 1; + sdim = GFC_DESCRIPTOR_RANK (source); + for (n = 0; n < sdim; n++) + { + index_type se; + se = source->dim[n].ubound + 1 - source->dim[0].lbound; + source_extent *= se > 0 ? se : 0; + } + + if (rs > source_extent && (!pad || pempty)) + runtime_error("Incorrect size in SOURCE argument to RESHAPE" + " intrinsic: is %ld, should be %ld", + (long int) source_extent, (long int) rs); + + if (order) + { + int seen[GFC_MAX_DIMENSIONS]; + index_type v; + + for (n = 0; n < rdim; n++) + seen[n] = 0; + + for (n = 0; n < rdim; n++) + { + v = order->data[n * order->dim[0].stride] - 1; + + if (v < 0 || v >= rdim) + runtime_error("Value %ld out of range in ORDER argument" + " to RESHAPE intrinsic", (long int) v + 1); + + if (seen[v] != 0) + runtime_error("Duplicate value %ld in ORDER argument to" + " RESHAPE intrinsic", (long int) v + 1); + + seen[v] = 1; + } + } + } + + rsize = 1; + for (n = 0; n < rdim; n++) + { + if (order) + dim = order->data[n * order->dim[0].stride] - 1; + else + dim = n; + + rcount[n] = 0; + rstride[n] = ret->dim[dim].stride; + rextent[n] = ret->dim[dim].ubound + 1 - ret->dim[dim].lbound; + if (rextent[n] < 0) + rextent[n] = 0; + + if (rextent[n] != shape_data[dim]) + runtime_error ("shape and target do not conform"); + + if (rsize == rstride[n]) + rsize *= rextent[n]; + else + rsize = 0; + if (rextent[n] <= 0) + return; + } + + sdim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + sempty = 0; + for (n = 0; n < sdim; n++) + { + scount[n] = 0; + sstride[n] = source->dim[n].stride; + sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (sextent[n] <= 0) + { + sempty = 1; + sextent[n] = 0; + } + + if (ssize == sstride[n]) + ssize *= sextent[n]; + else + ssize = 0; + } + + if (rsize != 0 && ssize != 0 && psize != 0) + { + rsize *= sizeof (GFC_INTEGER_8); + ssize *= sizeof (GFC_INTEGER_8); + psize *= sizeof (GFC_INTEGER_8); + reshape_packed ((char *)ret->data, rsize, (char *)source->data, + ssize, pad ? (char *)pad->data : NULL, psize); + return; + } + rptr = ret->data; + src = sptr = source->data; + rstride0 = rstride[0]; + sstride0 = sstride[0]; + + if (sempty && pempty) + abort (); + + if (sempty) + { + /* Pretend we are using the pad array the first time around, too. */ + src = pptr; + sptr = pptr; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = pstride[0]; + } + } + + while (rptr) + { + /* Select between the source and pad arrays. */ + *rptr = *src; + /* Advance to the next element. */ + rptr += rstride0; + src += sstride0; + rcount[0]++; + scount[0]++; + + /* Advance to the next destination element. */ + n = 0; + while (rcount[n] == rextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + rcount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * rextent[n]; + n++; + if (n == rdim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + rcount[n]++; + rptr += rstride[n]; + } + } + /* Advance to the next source element. */ + n = 0; + while (scount[n] == sextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + scount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= sstride[n] * sextent[n]; + n++; + if (n == sdim) + { + if (sptr && pad) + { + /* Switch to the pad array. */ + sptr = NULL; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = sstride[0]; + } + } + /* We now start again from the beginning of the pad array. */ + src = pptr; + break; + } + else + { + scount[n]++; + src += sstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r10.c new file mode 100644 index 0000000000..3e08b7c649 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r10.c @@ -0,0 +1,352 @@ +/* Implementation of the RESHAPE + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_10) + +typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; + + +extern void reshape_r10 (gfc_array_r10 * const restrict, + gfc_array_r10 * const restrict, + shape_type * const restrict, + gfc_array_r10 * const restrict, + shape_type * const restrict); +export_proto(reshape_r10); + +void +reshape_r10 (gfc_array_r10 * const restrict ret, + gfc_array_r10 * const restrict source, + shape_type * const restrict shape, + gfc_array_r10 * const restrict pad, + shape_type * const restrict order) +{ + /* r.* indicates the return array. */ + index_type rcount[GFC_MAX_DIMENSIONS]; + index_type rextent[GFC_MAX_DIMENSIONS]; + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdim; + index_type rsize; + index_type rs; + index_type rex; + GFC_REAL_10 *rptr; + /* s.* indicates the source array. */ + index_type scount[GFC_MAX_DIMENSIONS]; + index_type sextent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type sdim; + index_type ssize; + const GFC_REAL_10 *sptr; + /* p.* indicates the pad array. */ + index_type pcount[GFC_MAX_DIMENSIONS]; + index_type pextent[GFC_MAX_DIMENSIONS]; + index_type pstride[GFC_MAX_DIMENSIONS]; + index_type pdim; + index_type psize; + const GFC_REAL_10 *pptr; + + const GFC_REAL_10 *src; + int n; + int dim; + int sempty, pempty, shape_empty; + index_type shape_data[GFC_MAX_DIMENSIONS]; + + rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1; + if (rdim != GFC_DESCRIPTOR_RANK(ret)) + runtime_error("rank of return array incorrect in RESHAPE intrinsic"); + + shape_empty = 0; + + for (n = 0; n < rdim; n++) + { + shape_data[n] = shape->data[n * shape->dim[0].stride]; + if (shape_data[n] <= 0) + { + shape_data[n] = 0; + shape_empty = 1; + } + } + + if (ret->data == NULL) + { + rs = 1; + for (n = 0; n < rdim; n++) + { + ret->dim[n].lbound = 0; + rex = shape_data[n]; + ret->dim[n].ubound = rex - 1; + ret->dim[n].stride = rs; + rs *= rex; + } + ret->offset = 0; + ret->data = internal_malloc_size ( rs * sizeof (GFC_REAL_10)); + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rdim; + } + + if (shape_empty) + return; + + if (pad) + { + pdim = GFC_DESCRIPTOR_RANK (pad); + psize = 1; + pempty = 0; + for (n = 0; n < pdim; n++) + { + pcount[n] = 0; + pstride[n] = pad->dim[n].stride; + pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound; + if (pextent[n] <= 0) + { + pempty = 1; + pextent[n] = 0; + } + + if (psize == pstride[n]) + psize *= pextent[n]; + else + psize = 0; + } + pptr = pad->data; + } + else + { + pdim = 0; + psize = 1; + pempty = 1; + pptr = NULL; + } + + if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, source_extent; + + rs = 1; + for (n = 0; n < rdim; n++) + { + rs *= shape_data[n]; + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (ret_extent != shape_data[n]) + runtime_error("Incorrect extent in return value of RESHAPE" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) shape_data[n]); + } + + source_extent = 1; + sdim = GFC_DESCRIPTOR_RANK (source); + for (n = 0; n < sdim; n++) + { + index_type se; + se = source->dim[n].ubound + 1 - source->dim[0].lbound; + source_extent *= se > 0 ? se : 0; + } + + if (rs > source_extent && (!pad || pempty)) + runtime_error("Incorrect size in SOURCE argument to RESHAPE" + " intrinsic: is %ld, should be %ld", + (long int) source_extent, (long int) rs); + + if (order) + { + int seen[GFC_MAX_DIMENSIONS]; + index_type v; + + for (n = 0; n < rdim; n++) + seen[n] = 0; + + for (n = 0; n < rdim; n++) + { + v = order->data[n * order->dim[0].stride] - 1; + + if (v < 0 || v >= rdim) + runtime_error("Value %ld out of range in ORDER argument" + " to RESHAPE intrinsic", (long int) v + 1); + + if (seen[v] != 0) + runtime_error("Duplicate value %ld in ORDER argument to" + " RESHAPE intrinsic", (long int) v + 1); + + seen[v] = 1; + } + } + } + + rsize = 1; + for (n = 0; n < rdim; n++) + { + if (order) + dim = order->data[n * order->dim[0].stride] - 1; + else + dim = n; + + rcount[n] = 0; + rstride[n] = ret->dim[dim].stride; + rextent[n] = ret->dim[dim].ubound + 1 - ret->dim[dim].lbound; + if (rextent[n] < 0) + rextent[n] = 0; + + if (rextent[n] != shape_data[dim]) + runtime_error ("shape and target do not conform"); + + if (rsize == rstride[n]) + rsize *= rextent[n]; + else + rsize = 0; + if (rextent[n] <= 0) + return; + } + + sdim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + sempty = 0; + for (n = 0; n < sdim; n++) + { + scount[n] = 0; + sstride[n] = source->dim[n].stride; + sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (sextent[n] <= 0) + { + sempty = 1; + sextent[n] = 0; + } + + if (ssize == sstride[n]) + ssize *= sextent[n]; + else + ssize = 0; + } + + if (rsize != 0 && ssize != 0 && psize != 0) + { + rsize *= sizeof (GFC_REAL_10); + ssize *= sizeof (GFC_REAL_10); + psize *= sizeof (GFC_REAL_10); + reshape_packed ((char *)ret->data, rsize, (char *)source->data, + ssize, pad ? (char *)pad->data : NULL, psize); + return; + } + rptr = ret->data; + src = sptr = source->data; + rstride0 = rstride[0]; + sstride0 = sstride[0]; + + if (sempty && pempty) + abort (); + + if (sempty) + { + /* Pretend we are using the pad array the first time around, too. */ + src = pptr; + sptr = pptr; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = pstride[0]; + } + } + + while (rptr) + { + /* Select between the source and pad arrays. */ + *rptr = *src; + /* Advance to the next element. */ + rptr += rstride0; + src += sstride0; + rcount[0]++; + scount[0]++; + + /* Advance to the next destination element. */ + n = 0; + while (rcount[n] == rextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + rcount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * rextent[n]; + n++; + if (n == rdim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + rcount[n]++; + rptr += rstride[n]; + } + } + /* Advance to the next source element. */ + n = 0; + while (scount[n] == sextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + scount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= sstride[n] * sextent[n]; + n++; + if (n == sdim) + { + if (sptr && pad) + { + /* Switch to the pad array. */ + sptr = NULL; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = sstride[0]; + } + } + /* We now start again from the beginning of the pad array. */ + src = pptr; + break; + } + else + { + scount[n]++; + src += sstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r16.c new file mode 100644 index 0000000000..d78df1251e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r16.c @@ -0,0 +1,352 @@ +/* Implementation of the RESHAPE + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_16) + +typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; + + +extern void reshape_r16 (gfc_array_r16 * const restrict, + gfc_array_r16 * const restrict, + shape_type * const restrict, + gfc_array_r16 * const restrict, + shape_type * const restrict); +export_proto(reshape_r16); + +void +reshape_r16 (gfc_array_r16 * const restrict ret, + gfc_array_r16 * const restrict source, + shape_type * const restrict shape, + gfc_array_r16 * const restrict pad, + shape_type * const restrict order) +{ + /* r.* indicates the return array. */ + index_type rcount[GFC_MAX_DIMENSIONS]; + index_type rextent[GFC_MAX_DIMENSIONS]; + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdim; + index_type rsize; + index_type rs; + index_type rex; + GFC_REAL_16 *rptr; + /* s.* indicates the source array. */ + index_type scount[GFC_MAX_DIMENSIONS]; + index_type sextent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type sdim; + index_type ssize; + const GFC_REAL_16 *sptr; + /* p.* indicates the pad array. */ + index_type pcount[GFC_MAX_DIMENSIONS]; + index_type pextent[GFC_MAX_DIMENSIONS]; + index_type pstride[GFC_MAX_DIMENSIONS]; + index_type pdim; + index_type psize; + const GFC_REAL_16 *pptr; + + const GFC_REAL_16 *src; + int n; + int dim; + int sempty, pempty, shape_empty; + index_type shape_data[GFC_MAX_DIMENSIONS]; + + rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1; + if (rdim != GFC_DESCRIPTOR_RANK(ret)) + runtime_error("rank of return array incorrect in RESHAPE intrinsic"); + + shape_empty = 0; + + for (n = 0; n < rdim; n++) + { + shape_data[n] = shape->data[n * shape->dim[0].stride]; + if (shape_data[n] <= 0) + { + shape_data[n] = 0; + shape_empty = 1; + } + } + + if (ret->data == NULL) + { + rs = 1; + for (n = 0; n < rdim; n++) + { + ret->dim[n].lbound = 0; + rex = shape_data[n]; + ret->dim[n].ubound = rex - 1; + ret->dim[n].stride = rs; + rs *= rex; + } + ret->offset = 0; + ret->data = internal_malloc_size ( rs * sizeof (GFC_REAL_16)); + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rdim; + } + + if (shape_empty) + return; + + if (pad) + { + pdim = GFC_DESCRIPTOR_RANK (pad); + psize = 1; + pempty = 0; + for (n = 0; n < pdim; n++) + { + pcount[n] = 0; + pstride[n] = pad->dim[n].stride; + pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound; + if (pextent[n] <= 0) + { + pempty = 1; + pextent[n] = 0; + } + + if (psize == pstride[n]) + psize *= pextent[n]; + else + psize = 0; + } + pptr = pad->data; + } + else + { + pdim = 0; + psize = 1; + pempty = 1; + pptr = NULL; + } + + if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, source_extent; + + rs = 1; + for (n = 0; n < rdim; n++) + { + rs *= shape_data[n]; + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (ret_extent != shape_data[n]) + runtime_error("Incorrect extent in return value of RESHAPE" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) shape_data[n]); + } + + source_extent = 1; + sdim = GFC_DESCRIPTOR_RANK (source); + for (n = 0; n < sdim; n++) + { + index_type se; + se = source->dim[n].ubound + 1 - source->dim[0].lbound; + source_extent *= se > 0 ? se : 0; + } + + if (rs > source_extent && (!pad || pempty)) + runtime_error("Incorrect size in SOURCE argument to RESHAPE" + " intrinsic: is %ld, should be %ld", + (long int) source_extent, (long int) rs); + + if (order) + { + int seen[GFC_MAX_DIMENSIONS]; + index_type v; + + for (n = 0; n < rdim; n++) + seen[n] = 0; + + for (n = 0; n < rdim; n++) + { + v = order->data[n * order->dim[0].stride] - 1; + + if (v < 0 || v >= rdim) + runtime_error("Value %ld out of range in ORDER argument" + " to RESHAPE intrinsic", (long int) v + 1); + + if (seen[v] != 0) + runtime_error("Duplicate value %ld in ORDER argument to" + " RESHAPE intrinsic", (long int) v + 1); + + seen[v] = 1; + } + } + } + + rsize = 1; + for (n = 0; n < rdim; n++) + { + if (order) + dim = order->data[n * order->dim[0].stride] - 1; + else + dim = n; + + rcount[n] = 0; + rstride[n] = ret->dim[dim].stride; + rextent[n] = ret->dim[dim].ubound + 1 - ret->dim[dim].lbound; + if (rextent[n] < 0) + rextent[n] = 0; + + if (rextent[n] != shape_data[dim]) + runtime_error ("shape and target do not conform"); + + if (rsize == rstride[n]) + rsize *= rextent[n]; + else + rsize = 0; + if (rextent[n] <= 0) + return; + } + + sdim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + sempty = 0; + for (n = 0; n < sdim; n++) + { + scount[n] = 0; + sstride[n] = source->dim[n].stride; + sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (sextent[n] <= 0) + { + sempty = 1; + sextent[n] = 0; + } + + if (ssize == sstride[n]) + ssize *= sextent[n]; + else + ssize = 0; + } + + if (rsize != 0 && ssize != 0 && psize != 0) + { + rsize *= sizeof (GFC_REAL_16); + ssize *= sizeof (GFC_REAL_16); + psize *= sizeof (GFC_REAL_16); + reshape_packed ((char *)ret->data, rsize, (char *)source->data, + ssize, pad ? (char *)pad->data : NULL, psize); + return; + } + rptr = ret->data; + src = sptr = source->data; + rstride0 = rstride[0]; + sstride0 = sstride[0]; + + if (sempty && pempty) + abort (); + + if (sempty) + { + /* Pretend we are using the pad array the first time around, too. */ + src = pptr; + sptr = pptr; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = pstride[0]; + } + } + + while (rptr) + { + /* Select between the source and pad arrays. */ + *rptr = *src; + /* Advance to the next element. */ + rptr += rstride0; + src += sstride0; + rcount[0]++; + scount[0]++; + + /* Advance to the next destination element. */ + n = 0; + while (rcount[n] == rextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + rcount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * rextent[n]; + n++; + if (n == rdim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + rcount[n]++; + rptr += rstride[n]; + } + } + /* Advance to the next source element. */ + n = 0; + while (scount[n] == sextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + scount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= sstride[n] * sextent[n]; + n++; + if (n == sdim) + { + if (sptr && pad) + { + /* Switch to the pad array. */ + sptr = NULL; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = sstride[0]; + } + } + /* We now start again from the beginning of the pad array. */ + src = pptr; + break; + } + else + { + scount[n]++; + src += sstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r4.c new file mode 100644 index 0000000000..1577058308 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r4.c @@ -0,0 +1,352 @@ +/* Implementation of the RESHAPE + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_4) + +typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; + + +extern void reshape_r4 (gfc_array_r4 * const restrict, + gfc_array_r4 * const restrict, + shape_type * const restrict, + gfc_array_r4 * const restrict, + shape_type * const restrict); +export_proto(reshape_r4); + +void +reshape_r4 (gfc_array_r4 * const restrict ret, + gfc_array_r4 * const restrict source, + shape_type * const restrict shape, + gfc_array_r4 * const restrict pad, + shape_type * const restrict order) +{ + /* r.* indicates the return array. */ + index_type rcount[GFC_MAX_DIMENSIONS]; + index_type rextent[GFC_MAX_DIMENSIONS]; + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdim; + index_type rsize; + index_type rs; + index_type rex; + GFC_REAL_4 *rptr; + /* s.* indicates the source array. */ + index_type scount[GFC_MAX_DIMENSIONS]; + index_type sextent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type sdim; + index_type ssize; + const GFC_REAL_4 *sptr; + /* p.* indicates the pad array. */ + index_type pcount[GFC_MAX_DIMENSIONS]; + index_type pextent[GFC_MAX_DIMENSIONS]; + index_type pstride[GFC_MAX_DIMENSIONS]; + index_type pdim; + index_type psize; + const GFC_REAL_4 *pptr; + + const GFC_REAL_4 *src; + int n; + int dim; + int sempty, pempty, shape_empty; + index_type shape_data[GFC_MAX_DIMENSIONS]; + + rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1; + if (rdim != GFC_DESCRIPTOR_RANK(ret)) + runtime_error("rank of return array incorrect in RESHAPE intrinsic"); + + shape_empty = 0; + + for (n = 0; n < rdim; n++) + { + shape_data[n] = shape->data[n * shape->dim[0].stride]; + if (shape_data[n] <= 0) + { + shape_data[n] = 0; + shape_empty = 1; + } + } + + if (ret->data == NULL) + { + rs = 1; + for (n = 0; n < rdim; n++) + { + ret->dim[n].lbound = 0; + rex = shape_data[n]; + ret->dim[n].ubound = rex - 1; + ret->dim[n].stride = rs; + rs *= rex; + } + ret->offset = 0; + ret->data = internal_malloc_size ( rs * sizeof (GFC_REAL_4)); + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rdim; + } + + if (shape_empty) + return; + + if (pad) + { + pdim = GFC_DESCRIPTOR_RANK (pad); + psize = 1; + pempty = 0; + for (n = 0; n < pdim; n++) + { + pcount[n] = 0; + pstride[n] = pad->dim[n].stride; + pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound; + if (pextent[n] <= 0) + { + pempty = 1; + pextent[n] = 0; + } + + if (psize == pstride[n]) + psize *= pextent[n]; + else + psize = 0; + } + pptr = pad->data; + } + else + { + pdim = 0; + psize = 1; + pempty = 1; + pptr = NULL; + } + + if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, source_extent; + + rs = 1; + for (n = 0; n < rdim; n++) + { + rs *= shape_data[n]; + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (ret_extent != shape_data[n]) + runtime_error("Incorrect extent in return value of RESHAPE" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) shape_data[n]); + } + + source_extent = 1; + sdim = GFC_DESCRIPTOR_RANK (source); + for (n = 0; n < sdim; n++) + { + index_type se; + se = source->dim[n].ubound + 1 - source->dim[0].lbound; + source_extent *= se > 0 ? se : 0; + } + + if (rs > source_extent && (!pad || pempty)) + runtime_error("Incorrect size in SOURCE argument to RESHAPE" + " intrinsic: is %ld, should be %ld", + (long int) source_extent, (long int) rs); + + if (order) + { + int seen[GFC_MAX_DIMENSIONS]; + index_type v; + + for (n = 0; n < rdim; n++) + seen[n] = 0; + + for (n = 0; n < rdim; n++) + { + v = order->data[n * order->dim[0].stride] - 1; + + if (v < 0 || v >= rdim) + runtime_error("Value %ld out of range in ORDER argument" + " to RESHAPE intrinsic", (long int) v + 1); + + if (seen[v] != 0) + runtime_error("Duplicate value %ld in ORDER argument to" + " RESHAPE intrinsic", (long int) v + 1); + + seen[v] = 1; + } + } + } + + rsize = 1; + for (n = 0; n < rdim; n++) + { + if (order) + dim = order->data[n * order->dim[0].stride] - 1; + else + dim = n; + + rcount[n] = 0; + rstride[n] = ret->dim[dim].stride; + rextent[n] = ret->dim[dim].ubound + 1 - ret->dim[dim].lbound; + if (rextent[n] < 0) + rextent[n] = 0; + + if (rextent[n] != shape_data[dim]) + runtime_error ("shape and target do not conform"); + + if (rsize == rstride[n]) + rsize *= rextent[n]; + else + rsize = 0; + if (rextent[n] <= 0) + return; + } + + sdim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + sempty = 0; + for (n = 0; n < sdim; n++) + { + scount[n] = 0; + sstride[n] = source->dim[n].stride; + sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (sextent[n] <= 0) + { + sempty = 1; + sextent[n] = 0; + } + + if (ssize == sstride[n]) + ssize *= sextent[n]; + else + ssize = 0; + } + + if (rsize != 0 && ssize != 0 && psize != 0) + { + rsize *= sizeof (GFC_REAL_4); + ssize *= sizeof (GFC_REAL_4); + psize *= sizeof (GFC_REAL_4); + reshape_packed ((char *)ret->data, rsize, (char *)source->data, + ssize, pad ? (char *)pad->data : NULL, psize); + return; + } + rptr = ret->data; + src = sptr = source->data; + rstride0 = rstride[0]; + sstride0 = sstride[0]; + + if (sempty && pempty) + abort (); + + if (sempty) + { + /* Pretend we are using the pad array the first time around, too. */ + src = pptr; + sptr = pptr; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = pstride[0]; + } + } + + while (rptr) + { + /* Select between the source and pad arrays. */ + *rptr = *src; + /* Advance to the next element. */ + rptr += rstride0; + src += sstride0; + rcount[0]++; + scount[0]++; + + /* Advance to the next destination element. */ + n = 0; + while (rcount[n] == rextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + rcount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * rextent[n]; + n++; + if (n == rdim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + rcount[n]++; + rptr += rstride[n]; + } + } + /* Advance to the next source element. */ + n = 0; + while (scount[n] == sextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + scount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= sstride[n] * sextent[n]; + n++; + if (n == sdim) + { + if (sptr && pad) + { + /* Switch to the pad array. */ + sptr = NULL; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = sstride[0]; + } + } + /* We now start again from the beginning of the pad array. */ + src = pptr; + break; + } + else + { + scount[n]++; + src += sstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r8.c new file mode 100644 index 0000000000..dcbedb82d3 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r8.c @@ -0,0 +1,352 @@ +/* Implementation of the RESHAPE + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_8) + +typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; + + +extern void reshape_r8 (gfc_array_r8 * const restrict, + gfc_array_r8 * const restrict, + shape_type * const restrict, + gfc_array_r8 * const restrict, + shape_type * const restrict); +export_proto(reshape_r8); + +void +reshape_r8 (gfc_array_r8 * const restrict ret, + gfc_array_r8 * const restrict source, + shape_type * const restrict shape, + gfc_array_r8 * const restrict pad, + shape_type * const restrict order) +{ + /* r.* indicates the return array. */ + index_type rcount[GFC_MAX_DIMENSIONS]; + index_type rextent[GFC_MAX_DIMENSIONS]; + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdim; + index_type rsize; + index_type rs; + index_type rex; + GFC_REAL_8 *rptr; + /* s.* indicates the source array. */ + index_type scount[GFC_MAX_DIMENSIONS]; + index_type sextent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type sdim; + index_type ssize; + const GFC_REAL_8 *sptr; + /* p.* indicates the pad array. */ + index_type pcount[GFC_MAX_DIMENSIONS]; + index_type pextent[GFC_MAX_DIMENSIONS]; + index_type pstride[GFC_MAX_DIMENSIONS]; + index_type pdim; + index_type psize; + const GFC_REAL_8 *pptr; + + const GFC_REAL_8 *src; + int n; + int dim; + int sempty, pempty, shape_empty; + index_type shape_data[GFC_MAX_DIMENSIONS]; + + rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1; + if (rdim != GFC_DESCRIPTOR_RANK(ret)) + runtime_error("rank of return array incorrect in RESHAPE intrinsic"); + + shape_empty = 0; + + for (n = 0; n < rdim; n++) + { + shape_data[n] = shape->data[n * shape->dim[0].stride]; + if (shape_data[n] <= 0) + { + shape_data[n] = 0; + shape_empty = 1; + } + } + + if (ret->data == NULL) + { + rs = 1; + for (n = 0; n < rdim; n++) + { + ret->dim[n].lbound = 0; + rex = shape_data[n]; + ret->dim[n].ubound = rex - 1; + ret->dim[n].stride = rs; + rs *= rex; + } + ret->offset = 0; + ret->data = internal_malloc_size ( rs * sizeof (GFC_REAL_8)); + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rdim; + } + + if (shape_empty) + return; + + if (pad) + { + pdim = GFC_DESCRIPTOR_RANK (pad); + psize = 1; + pempty = 0; + for (n = 0; n < pdim; n++) + { + pcount[n] = 0; + pstride[n] = pad->dim[n].stride; + pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound; + if (pextent[n] <= 0) + { + pempty = 1; + pextent[n] = 0; + } + + if (psize == pstride[n]) + psize *= pextent[n]; + else + psize = 0; + } + pptr = pad->data; + } + else + { + pdim = 0; + psize = 1; + pempty = 1; + pptr = NULL; + } + + if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, source_extent; + + rs = 1; + for (n = 0; n < rdim; n++) + { + rs *= shape_data[n]; + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (ret_extent != shape_data[n]) + runtime_error("Incorrect extent in return value of RESHAPE" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) shape_data[n]); + } + + source_extent = 1; + sdim = GFC_DESCRIPTOR_RANK (source); + for (n = 0; n < sdim; n++) + { + index_type se; + se = source->dim[n].ubound + 1 - source->dim[0].lbound; + source_extent *= se > 0 ? se : 0; + } + + if (rs > source_extent && (!pad || pempty)) + runtime_error("Incorrect size in SOURCE argument to RESHAPE" + " intrinsic: is %ld, should be %ld", + (long int) source_extent, (long int) rs); + + if (order) + { + int seen[GFC_MAX_DIMENSIONS]; + index_type v; + + for (n = 0; n < rdim; n++) + seen[n] = 0; + + for (n = 0; n < rdim; n++) + { + v = order->data[n * order->dim[0].stride] - 1; + + if (v < 0 || v >= rdim) + runtime_error("Value %ld out of range in ORDER argument" + " to RESHAPE intrinsic", (long int) v + 1); + + if (seen[v] != 0) + runtime_error("Duplicate value %ld in ORDER argument to" + " RESHAPE intrinsic", (long int) v + 1); + + seen[v] = 1; + } + } + } + + rsize = 1; + for (n = 0; n < rdim; n++) + { + if (order) + dim = order->data[n * order->dim[0].stride] - 1; + else + dim = n; + + rcount[n] = 0; + rstride[n] = ret->dim[dim].stride; + rextent[n] = ret->dim[dim].ubound + 1 - ret->dim[dim].lbound; + if (rextent[n] < 0) + rextent[n] = 0; + + if (rextent[n] != shape_data[dim]) + runtime_error ("shape and target do not conform"); + + if (rsize == rstride[n]) + rsize *= rextent[n]; + else + rsize = 0; + if (rextent[n] <= 0) + return; + } + + sdim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + sempty = 0; + for (n = 0; n < sdim; n++) + { + scount[n] = 0; + sstride[n] = source->dim[n].stride; + sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (sextent[n] <= 0) + { + sempty = 1; + sextent[n] = 0; + } + + if (ssize == sstride[n]) + ssize *= sextent[n]; + else + ssize = 0; + } + + if (rsize != 0 && ssize != 0 && psize != 0) + { + rsize *= sizeof (GFC_REAL_8); + ssize *= sizeof (GFC_REAL_8); + psize *= sizeof (GFC_REAL_8); + reshape_packed ((char *)ret->data, rsize, (char *)source->data, + ssize, pad ? (char *)pad->data : NULL, psize); + return; + } + rptr = ret->data; + src = sptr = source->data; + rstride0 = rstride[0]; + sstride0 = sstride[0]; + + if (sempty && pempty) + abort (); + + if (sempty) + { + /* Pretend we are using the pad array the first time around, too. */ + src = pptr; + sptr = pptr; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = pstride[0]; + } + } + + while (rptr) + { + /* Select between the source and pad arrays. */ + *rptr = *src; + /* Advance to the next element. */ + rptr += rstride0; + src += sstride0; + rcount[0]++; + scount[0]++; + + /* Advance to the next destination element. */ + n = 0; + while (rcount[n] == rextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + rcount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * rextent[n]; + n++; + if (n == rdim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + rcount[n]++; + rptr += rstride[n]; + } + } + /* Advance to the next source element. */ + n = 0; + while (scount[n] == sextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + scount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= sstride[n] * sextent[n]; + n++; + if (n == sdim) + { + if (sptr && pad) + { + /* Switch to the pad array. */ + sptr = NULL; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = sstride[0]; + } + } + /* We now start again from the beginning of the pad array. */ + src = pptr; + break; + } + else + { + scount[n]++; + src += sstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r10.c new file mode 100644 index 0000000000..1889d0ffcf --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r10.c @@ -0,0 +1,51 @@ +/* Implementation of the RRSPACING intrinsic + Copyright 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_FABSL) && defined (HAVE_FREXPL) + +extern GFC_REAL_10 rrspacing_r10 (GFC_REAL_10 s, int p); +export_proto(rrspacing_r10); + +GFC_REAL_10 +rrspacing_r10 (GFC_REAL_10 s, int p) +{ + int e; + GFC_REAL_10 x; + x = fabsl (s); + if (x == 0.) + return 0.; + frexpl (s, &e); +#if defined (HAVE_LDEXPL) + return ldexpl (x, p - e); +#else + return scalbnl (x, p - e); +#endif + +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r16.c new file mode 100644 index 0000000000..10de2448eb --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r16.c @@ -0,0 +1,51 @@ +/* Implementation of the RRSPACING intrinsic + Copyright 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_FABSL) && defined (HAVE_FREXPL) + +extern GFC_REAL_16 rrspacing_r16 (GFC_REAL_16 s, int p); +export_proto(rrspacing_r16); + +GFC_REAL_16 +rrspacing_r16 (GFC_REAL_16 s, int p) +{ + int e; + GFC_REAL_16 x; + x = fabsl (s); + if (x == 0.) + return 0.; + frexpl (s, &e); +#if defined (HAVE_LDEXPL) + return ldexpl (x, p - e); +#else + return scalbnl (x, p - e); +#endif + +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r4.c new file mode 100644 index 0000000000..48683db343 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r4.c @@ -0,0 +1,51 @@ +/* Implementation of the RRSPACING intrinsic + Copyright 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_FABSF) && defined (HAVE_FREXPF) + +extern GFC_REAL_4 rrspacing_r4 (GFC_REAL_4 s, int p); +export_proto(rrspacing_r4); + +GFC_REAL_4 +rrspacing_r4 (GFC_REAL_4 s, int p) +{ + int e; + GFC_REAL_4 x; + x = fabsf (s); + if (x == 0.) + return 0.; + frexpf (s, &e); +#if defined (HAVE_LDEXPF) + return ldexpf (x, p - e); +#else + return scalbnf (x, p - e); +#endif + +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r8.c new file mode 100644 index 0000000000..75f2244551 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r8.c @@ -0,0 +1,51 @@ +/* Implementation of the RRSPACING intrinsic + Copyright 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_FABS) && defined (HAVE_FREXP) + +extern GFC_REAL_8 rrspacing_r8 (GFC_REAL_8 s, int p); +export_proto(rrspacing_r8); + +GFC_REAL_8 +rrspacing_r8 (GFC_REAL_8 s, int p) +{ + int e; + GFC_REAL_8 x; + x = fabs (s); + if (x == 0.) + return 0.; + frexp (s, &e); +#if defined (HAVE_LDEXP) + return ldexp (x, p - e); +#else + return scalbn (x, p - e); +#endif + +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r10.c new file mode 100644 index 0000000000..3f5238ded5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r10.c @@ -0,0 +1,41 @@ +/* Implementation of the SET_EXPONENT intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_SCALBNL) && defined (HAVE_FREXPL) + +extern GFC_REAL_10 set_exponent_r10 (GFC_REAL_10 s, GFC_INTEGER_4 i); +export_proto(set_exponent_r10); + +GFC_REAL_10 +set_exponent_r10 (GFC_REAL_10 s, GFC_INTEGER_4 i) +{ + int dummy_exp; + return scalbnl (frexpl (s, &dummy_exp), i); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r16.c new file mode 100644 index 0000000000..4cd1ed5a44 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r16.c @@ -0,0 +1,41 @@ +/* Implementation of the SET_EXPONENT intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_SCALBNL) && defined (HAVE_FREXPL) + +extern GFC_REAL_16 set_exponent_r16 (GFC_REAL_16 s, GFC_INTEGER_4 i); +export_proto(set_exponent_r16); + +GFC_REAL_16 +set_exponent_r16 (GFC_REAL_16 s, GFC_INTEGER_4 i) +{ + int dummy_exp; + return scalbnl (frexpl (s, &dummy_exp), i); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r4.c new file mode 100644 index 0000000000..4d765c2f03 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r4.c @@ -0,0 +1,41 @@ +/* Implementation of the SET_EXPONENT intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_SCALBNF) && defined (HAVE_FREXPF) + +extern GFC_REAL_4 set_exponent_r4 (GFC_REAL_4 s, GFC_INTEGER_4 i); +export_proto(set_exponent_r4); + +GFC_REAL_4 +set_exponent_r4 (GFC_REAL_4 s, GFC_INTEGER_4 i) +{ + int dummy_exp; + return scalbnf (frexpf (s, &dummy_exp), i); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r8.c new file mode 100644 index 0000000000..ad8c3af5eb --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r8.c @@ -0,0 +1,41 @@ +/* Implementation of the SET_EXPONENT intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_SCALBN) && defined (HAVE_FREXP) + +extern GFC_REAL_8 set_exponent_r8 (GFC_REAL_8 s, GFC_INTEGER_4 i); +export_proto(set_exponent_r8); + +GFC_REAL_8 +set_exponent_r8 (GFC_REAL_8 s, GFC_INTEGER_4 i) +{ + int dummy_exp; + return scalbn (frexp (s, &dummy_exp), i); +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/shape_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/shape_i16.c new file mode 100644 index 0000000000..249793d7db --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/shape_i16.c @@ -0,0 +1,57 @@ +/* Implementation of the SHAPE intrinsic + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) + +extern void shape_16 (gfc_array_i16 * const restrict ret, + const gfc_array_i16 * const restrict array); +export_proto(shape_16); + +void +shape_16 (gfc_array_i16 * const restrict ret, + const gfc_array_i16 * const restrict array) +{ + int n; + index_type stride; + index_type extent; + + stride = ret->dim[0].stride; + + if (ret->dim[0].ubound < ret->dim[0].lbound) + return; + + for (n = 0; n < GFC_DESCRIPTOR_RANK (array); n++) + { + extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + ret->data[n * stride] = extent > 0 ? extent : 0 ; + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/shape_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/shape_i4.c new file mode 100644 index 0000000000..386b84e164 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/shape_i4.c @@ -0,0 +1,57 @@ +/* Implementation of the SHAPE intrinsic + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) + +extern void shape_4 (gfc_array_i4 * const restrict ret, + const gfc_array_i4 * const restrict array); +export_proto(shape_4); + +void +shape_4 (gfc_array_i4 * const restrict ret, + const gfc_array_i4 * const restrict array) +{ + int n; + index_type stride; + index_type extent; + + stride = ret->dim[0].stride; + + if (ret->dim[0].ubound < ret->dim[0].lbound) + return; + + for (n = 0; n < GFC_DESCRIPTOR_RANK (array); n++) + { + extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + ret->data[n * stride] = extent > 0 ? extent : 0 ; + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/shape_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/shape_i8.c new file mode 100644 index 0000000000..f0498bc6d7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/shape_i8.c @@ -0,0 +1,57 @@ +/* Implementation of the SHAPE intrinsic + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) + +extern void shape_8 (gfc_array_i8 * const restrict ret, + const gfc_array_i8 * const restrict array); +export_proto(shape_8); + +void +shape_8 (gfc_array_i8 * const restrict ret, + const gfc_array_i8 * const restrict array) +{ + int n; + index_type stride; + index_type extent; + + stride = ret->dim[0].stride; + + if (ret->dim[0].ubound < ret->dim[0].lbound) + return; + + for (n = 0; n < GFC_DESCRIPTOR_RANK (array); n++) + { + extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + ret->data[n * stride] = extent > 0 ? extent : 0 ; + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r10.c new file mode 100644 index 0000000000..10a907345f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r10.c @@ -0,0 +1,50 @@ +/* Implementation of the SPACING intrinsic + Copyright 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_FREXPL) + +extern GFC_REAL_10 spacing_r10 (GFC_REAL_10 s, int p, int emin, GFC_REAL_10 tiny); +export_proto(spacing_r10); + +GFC_REAL_10 +spacing_r10 (GFC_REAL_10 s, int p, int emin, GFC_REAL_10 tiny) +{ + int e; + if (s == 0.) + return tiny; + frexpl (s, &e); + e = e - p; + e = e > emin ? e : emin; +#if defined (HAVE_LDEXPL) + return ldexpl (1., e); +#else + return scalbnl (1., e); +#endif +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r16.c new file mode 100644 index 0000000000..82ef8353d4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r16.c @@ -0,0 +1,50 @@ +/* Implementation of the SPACING intrinsic + Copyright 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_FREXPL) + +extern GFC_REAL_16 spacing_r16 (GFC_REAL_16 s, int p, int emin, GFC_REAL_16 tiny); +export_proto(spacing_r16); + +GFC_REAL_16 +spacing_r16 (GFC_REAL_16 s, int p, int emin, GFC_REAL_16 tiny) +{ + int e; + if (s == 0.) + return tiny; + frexpl (s, &e); + e = e - p; + e = e > emin ? e : emin; +#if defined (HAVE_LDEXPL) + return ldexpl (1., e); +#else + return scalbnl (1., e); +#endif +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r4.c new file mode 100644 index 0000000000..7936ba982b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r4.c @@ -0,0 +1,50 @@ +/* Implementation of the SPACING intrinsic + Copyright 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_FREXPF) + +extern GFC_REAL_4 spacing_r4 (GFC_REAL_4 s, int p, int emin, GFC_REAL_4 tiny); +export_proto(spacing_r4); + +GFC_REAL_4 +spacing_r4 (GFC_REAL_4 s, int p, int emin, GFC_REAL_4 tiny) +{ + int e; + if (s == 0.) + return tiny; + frexpf (s, &e); + e = e - p; + e = e > emin ? e : emin; +#if defined (HAVE_LDEXPF) + return ldexpf (1., e); +#else + return scalbnf (1., e); +#endif +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r8.c new file mode 100644 index 0000000000..3debe49249 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r8.c @@ -0,0 +1,50 @@ +/* Implementation of the SPACING intrinsic + Copyright 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_FREXP) + +extern GFC_REAL_8 spacing_r8 (GFC_REAL_8 s, int p, int emin, GFC_REAL_8 tiny); +export_proto(spacing_r8); + +GFC_REAL_8 +spacing_r8 (GFC_REAL_8 s, int p, int emin, GFC_REAL_8 tiny) +{ + int e; + if (s == 0.) + return tiny; + frexp (s, &e); + e = e - p; + e = e > emin ? e : emin; +#if defined (HAVE_LDEXP) + return ldexp (1., e); +#else + return scalbn (1., e); +#endif +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c10.c new file mode 100644 index 0000000000..d7e1ee11a4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c10.c @@ -0,0 +1,273 @@ +/* Special implementation of the SPREAD intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + spread_generic.c written by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_10) + +void +spread_c10 (gfc_array_c10 *ret, const gfc_array_c10 *source, + const index_type along, const index_type pncopies) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdelta = 0; + index_type rrank; + index_type rs; + GFC_COMPLEX_10 *rptr; + GFC_COMPLEX_10 * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type srank; + const GFC_COMPLEX_10 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ncopies; + + srank = GFC_DESCRIPTOR_RANK(source); + + rrank = srank + 1; + if (rrank > GFC_MAX_DIMENSIONS) + runtime_error ("return rank too large in spread()"); + + if (along > rrank) + runtime_error ("dim outside of rank in spread()"); + + ncopies = pncopies; + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rrank; + dim = 0; + rs = 1; + for (n = 0; n < rrank; n++) + { + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + if (n == along - 1) + { + ret->dim[n].ubound = ncopies - 1; + rdelta = rs; + rs *= ncopies; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = rs; + + ret->dim[n].ubound = extent[dim]-1; + rs *= extent[dim]; + dim++; + } + } + ret->offset = 0; + if (rs > 0) + ret->data = internal_malloc_size (rs * sizeof(GFC_COMPLEX_10)); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + else + { + int zero_sized; + + zero_sized = 0; + + dim = 0; + if (GFC_DESCRIPTOR_RANK(ret) != rrank) + runtime_error ("rank mismatch in spread()"); + + if (unlikely (compile_options.bounds_check)) + { + for (n = 0; n < rrank; n++) + { + index_type ret_extent; + + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + + if (ret_extent != ncopies) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (ret_extent != extent[dim]) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); + + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + else + { + for (n = 0; n < rrank; n++) + { + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + + if (zero_sized) + return; + + if (sstride[0] == 0) + sstride[0] = 1; + } + sstride0 = sstride[0]; + rstride0 = rstride[0]; + rptr = ret->data; + sptr = source->data; + + while (sptr) + { + /* Spread this element. */ + dest = rptr; + for (n = 0; n < ncopies; n++) + { + *dest = *sptr; + dest += rdelta; + } + /* Advance to the next element. */ + sptr += sstride0; + rptr += rstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + rptr -= rstride[n] * extent[n]; + n++; + if (n >= srank) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + rptr += rstride[n]; + } + } + } +} + +/* This version of spread_internal treats the special case of a scalar + source. This is much simpler than the more general case above. */ + +void +spread_scalar_c10 (gfc_array_c10 *ret, const GFC_COMPLEX_10 *source, + const index_type along, const index_type pncopies) +{ + int n; + int ncopies = pncopies; + GFC_COMPLEX_10 * restrict dest; + index_type stride; + + if (GFC_DESCRIPTOR_RANK (ret) != 1) + runtime_error ("incorrect destination rank in spread()"); + + if (along > 1) + runtime_error ("dim outside of rank in spread()"); + + if (ret->data == NULL) + { + ret->data = internal_malloc_size (ncopies * sizeof (GFC_COMPLEX_10)); + ret->offset = 0; + ret->dim[0].stride = 1; + ret->dim[0].lbound = 0; + ret->dim[0].ubound = ncopies - 1; + } + else + { + if (ncopies - 1 > (ret->dim[0].ubound - ret->dim[0].lbound) + / ret->dim[0].stride) + runtime_error ("dim too large in spread()"); + } + + dest = ret->data; + stride = ret->dim[0].stride; + + for (n = 0; n < ncopies; n++) + { + *dest = *source; + dest += stride; + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c16.c new file mode 100644 index 0000000000..d57cdd9014 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c16.c @@ -0,0 +1,273 @@ +/* Special implementation of the SPREAD intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + spread_generic.c written by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_16) + +void +spread_c16 (gfc_array_c16 *ret, const gfc_array_c16 *source, + const index_type along, const index_type pncopies) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdelta = 0; + index_type rrank; + index_type rs; + GFC_COMPLEX_16 *rptr; + GFC_COMPLEX_16 * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type srank; + const GFC_COMPLEX_16 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ncopies; + + srank = GFC_DESCRIPTOR_RANK(source); + + rrank = srank + 1; + if (rrank > GFC_MAX_DIMENSIONS) + runtime_error ("return rank too large in spread()"); + + if (along > rrank) + runtime_error ("dim outside of rank in spread()"); + + ncopies = pncopies; + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rrank; + dim = 0; + rs = 1; + for (n = 0; n < rrank; n++) + { + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + if (n == along - 1) + { + ret->dim[n].ubound = ncopies - 1; + rdelta = rs; + rs *= ncopies; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = rs; + + ret->dim[n].ubound = extent[dim]-1; + rs *= extent[dim]; + dim++; + } + } + ret->offset = 0; + if (rs > 0) + ret->data = internal_malloc_size (rs * sizeof(GFC_COMPLEX_16)); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + else + { + int zero_sized; + + zero_sized = 0; + + dim = 0; + if (GFC_DESCRIPTOR_RANK(ret) != rrank) + runtime_error ("rank mismatch in spread()"); + + if (unlikely (compile_options.bounds_check)) + { + for (n = 0; n < rrank; n++) + { + index_type ret_extent; + + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + + if (ret_extent != ncopies) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (ret_extent != extent[dim]) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); + + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + else + { + for (n = 0; n < rrank; n++) + { + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + + if (zero_sized) + return; + + if (sstride[0] == 0) + sstride[0] = 1; + } + sstride0 = sstride[0]; + rstride0 = rstride[0]; + rptr = ret->data; + sptr = source->data; + + while (sptr) + { + /* Spread this element. */ + dest = rptr; + for (n = 0; n < ncopies; n++) + { + *dest = *sptr; + dest += rdelta; + } + /* Advance to the next element. */ + sptr += sstride0; + rptr += rstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + rptr -= rstride[n] * extent[n]; + n++; + if (n >= srank) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + rptr += rstride[n]; + } + } + } +} + +/* This version of spread_internal treats the special case of a scalar + source. This is much simpler than the more general case above. */ + +void +spread_scalar_c16 (gfc_array_c16 *ret, const GFC_COMPLEX_16 *source, + const index_type along, const index_type pncopies) +{ + int n; + int ncopies = pncopies; + GFC_COMPLEX_16 * restrict dest; + index_type stride; + + if (GFC_DESCRIPTOR_RANK (ret) != 1) + runtime_error ("incorrect destination rank in spread()"); + + if (along > 1) + runtime_error ("dim outside of rank in spread()"); + + if (ret->data == NULL) + { + ret->data = internal_malloc_size (ncopies * sizeof (GFC_COMPLEX_16)); + ret->offset = 0; + ret->dim[0].stride = 1; + ret->dim[0].lbound = 0; + ret->dim[0].ubound = ncopies - 1; + } + else + { + if (ncopies - 1 > (ret->dim[0].ubound - ret->dim[0].lbound) + / ret->dim[0].stride) + runtime_error ("dim too large in spread()"); + } + + dest = ret->data; + stride = ret->dim[0].stride; + + for (n = 0; n < ncopies; n++) + { + *dest = *source; + dest += stride; + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c4.c new file mode 100644 index 0000000000..ddd6305c1a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c4.c @@ -0,0 +1,273 @@ +/* Special implementation of the SPREAD intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + spread_generic.c written by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_4) + +void +spread_c4 (gfc_array_c4 *ret, const gfc_array_c4 *source, + const index_type along, const index_type pncopies) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdelta = 0; + index_type rrank; + index_type rs; + GFC_COMPLEX_4 *rptr; + GFC_COMPLEX_4 * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type srank; + const GFC_COMPLEX_4 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ncopies; + + srank = GFC_DESCRIPTOR_RANK(source); + + rrank = srank + 1; + if (rrank > GFC_MAX_DIMENSIONS) + runtime_error ("return rank too large in spread()"); + + if (along > rrank) + runtime_error ("dim outside of rank in spread()"); + + ncopies = pncopies; + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rrank; + dim = 0; + rs = 1; + for (n = 0; n < rrank; n++) + { + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + if (n == along - 1) + { + ret->dim[n].ubound = ncopies - 1; + rdelta = rs; + rs *= ncopies; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = rs; + + ret->dim[n].ubound = extent[dim]-1; + rs *= extent[dim]; + dim++; + } + } + ret->offset = 0; + if (rs > 0) + ret->data = internal_malloc_size (rs * sizeof(GFC_COMPLEX_4)); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + else + { + int zero_sized; + + zero_sized = 0; + + dim = 0; + if (GFC_DESCRIPTOR_RANK(ret) != rrank) + runtime_error ("rank mismatch in spread()"); + + if (unlikely (compile_options.bounds_check)) + { + for (n = 0; n < rrank; n++) + { + index_type ret_extent; + + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + + if (ret_extent != ncopies) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (ret_extent != extent[dim]) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); + + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + else + { + for (n = 0; n < rrank; n++) + { + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + + if (zero_sized) + return; + + if (sstride[0] == 0) + sstride[0] = 1; + } + sstride0 = sstride[0]; + rstride0 = rstride[0]; + rptr = ret->data; + sptr = source->data; + + while (sptr) + { + /* Spread this element. */ + dest = rptr; + for (n = 0; n < ncopies; n++) + { + *dest = *sptr; + dest += rdelta; + } + /* Advance to the next element. */ + sptr += sstride0; + rptr += rstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + rptr -= rstride[n] * extent[n]; + n++; + if (n >= srank) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + rptr += rstride[n]; + } + } + } +} + +/* This version of spread_internal treats the special case of a scalar + source. This is much simpler than the more general case above. */ + +void +spread_scalar_c4 (gfc_array_c4 *ret, const GFC_COMPLEX_4 *source, + const index_type along, const index_type pncopies) +{ + int n; + int ncopies = pncopies; + GFC_COMPLEX_4 * restrict dest; + index_type stride; + + if (GFC_DESCRIPTOR_RANK (ret) != 1) + runtime_error ("incorrect destination rank in spread()"); + + if (along > 1) + runtime_error ("dim outside of rank in spread()"); + + if (ret->data == NULL) + { + ret->data = internal_malloc_size (ncopies * sizeof (GFC_COMPLEX_4)); + ret->offset = 0; + ret->dim[0].stride = 1; + ret->dim[0].lbound = 0; + ret->dim[0].ubound = ncopies - 1; + } + else + { + if (ncopies - 1 > (ret->dim[0].ubound - ret->dim[0].lbound) + / ret->dim[0].stride) + runtime_error ("dim too large in spread()"); + } + + dest = ret->data; + stride = ret->dim[0].stride; + + for (n = 0; n < ncopies; n++) + { + *dest = *source; + dest += stride; + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c8.c new file mode 100644 index 0000000000..8a32ee4c96 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c8.c @@ -0,0 +1,273 @@ +/* Special implementation of the SPREAD intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + spread_generic.c written by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_8) + +void +spread_c8 (gfc_array_c8 *ret, const gfc_array_c8 *source, + const index_type along, const index_type pncopies) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdelta = 0; + index_type rrank; + index_type rs; + GFC_COMPLEX_8 *rptr; + GFC_COMPLEX_8 * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type srank; + const GFC_COMPLEX_8 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ncopies; + + srank = GFC_DESCRIPTOR_RANK(source); + + rrank = srank + 1; + if (rrank > GFC_MAX_DIMENSIONS) + runtime_error ("return rank too large in spread()"); + + if (along > rrank) + runtime_error ("dim outside of rank in spread()"); + + ncopies = pncopies; + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rrank; + dim = 0; + rs = 1; + for (n = 0; n < rrank; n++) + { + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + if (n == along - 1) + { + ret->dim[n].ubound = ncopies - 1; + rdelta = rs; + rs *= ncopies; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = rs; + + ret->dim[n].ubound = extent[dim]-1; + rs *= extent[dim]; + dim++; + } + } + ret->offset = 0; + if (rs > 0) + ret->data = internal_malloc_size (rs * sizeof(GFC_COMPLEX_8)); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + else + { + int zero_sized; + + zero_sized = 0; + + dim = 0; + if (GFC_DESCRIPTOR_RANK(ret) != rrank) + runtime_error ("rank mismatch in spread()"); + + if (unlikely (compile_options.bounds_check)) + { + for (n = 0; n < rrank; n++) + { + index_type ret_extent; + + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + + if (ret_extent != ncopies) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (ret_extent != extent[dim]) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); + + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + else + { + for (n = 0; n < rrank; n++) + { + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + + if (zero_sized) + return; + + if (sstride[0] == 0) + sstride[0] = 1; + } + sstride0 = sstride[0]; + rstride0 = rstride[0]; + rptr = ret->data; + sptr = source->data; + + while (sptr) + { + /* Spread this element. */ + dest = rptr; + for (n = 0; n < ncopies; n++) + { + *dest = *sptr; + dest += rdelta; + } + /* Advance to the next element. */ + sptr += sstride0; + rptr += rstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + rptr -= rstride[n] * extent[n]; + n++; + if (n >= srank) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + rptr += rstride[n]; + } + } + } +} + +/* This version of spread_internal treats the special case of a scalar + source. This is much simpler than the more general case above. */ + +void +spread_scalar_c8 (gfc_array_c8 *ret, const GFC_COMPLEX_8 *source, + const index_type along, const index_type pncopies) +{ + int n; + int ncopies = pncopies; + GFC_COMPLEX_8 * restrict dest; + index_type stride; + + if (GFC_DESCRIPTOR_RANK (ret) != 1) + runtime_error ("incorrect destination rank in spread()"); + + if (along > 1) + runtime_error ("dim outside of rank in spread()"); + + if (ret->data == NULL) + { + ret->data = internal_malloc_size (ncopies * sizeof (GFC_COMPLEX_8)); + ret->offset = 0; + ret->dim[0].stride = 1; + ret->dim[0].lbound = 0; + ret->dim[0].ubound = ncopies - 1; + } + else + { + if (ncopies - 1 > (ret->dim[0].ubound - ret->dim[0].lbound) + / ret->dim[0].stride) + runtime_error ("dim too large in spread()"); + } + + dest = ret->data; + stride = ret->dim[0].stride; + + for (n = 0; n < ncopies; n++) + { + *dest = *source; + dest += stride; + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i1.c new file mode 100644 index 0000000000..e5a2c34f8b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i1.c @@ -0,0 +1,273 @@ +/* Special implementation of the SPREAD intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + spread_generic.c written by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) + +void +spread_i1 (gfc_array_i1 *ret, const gfc_array_i1 *source, + const index_type along, const index_type pncopies) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdelta = 0; + index_type rrank; + index_type rs; + GFC_INTEGER_1 *rptr; + GFC_INTEGER_1 * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type srank; + const GFC_INTEGER_1 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ncopies; + + srank = GFC_DESCRIPTOR_RANK(source); + + rrank = srank + 1; + if (rrank > GFC_MAX_DIMENSIONS) + runtime_error ("return rank too large in spread()"); + + if (along > rrank) + runtime_error ("dim outside of rank in spread()"); + + ncopies = pncopies; + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rrank; + dim = 0; + rs = 1; + for (n = 0; n < rrank; n++) + { + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + if (n == along - 1) + { + ret->dim[n].ubound = ncopies - 1; + rdelta = rs; + rs *= ncopies; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = rs; + + ret->dim[n].ubound = extent[dim]-1; + rs *= extent[dim]; + dim++; + } + } + ret->offset = 0; + if (rs > 0) + ret->data = internal_malloc_size (rs * sizeof(GFC_INTEGER_1)); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + else + { + int zero_sized; + + zero_sized = 0; + + dim = 0; + if (GFC_DESCRIPTOR_RANK(ret) != rrank) + runtime_error ("rank mismatch in spread()"); + + if (unlikely (compile_options.bounds_check)) + { + for (n = 0; n < rrank; n++) + { + index_type ret_extent; + + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + + if (ret_extent != ncopies) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (ret_extent != extent[dim]) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); + + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + else + { + for (n = 0; n < rrank; n++) + { + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + + if (zero_sized) + return; + + if (sstride[0] == 0) + sstride[0] = 1; + } + sstride0 = sstride[0]; + rstride0 = rstride[0]; + rptr = ret->data; + sptr = source->data; + + while (sptr) + { + /* Spread this element. */ + dest = rptr; + for (n = 0; n < ncopies; n++) + { + *dest = *sptr; + dest += rdelta; + } + /* Advance to the next element. */ + sptr += sstride0; + rptr += rstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + rptr -= rstride[n] * extent[n]; + n++; + if (n >= srank) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + rptr += rstride[n]; + } + } + } +} + +/* This version of spread_internal treats the special case of a scalar + source. This is much simpler than the more general case above. */ + +void +spread_scalar_i1 (gfc_array_i1 *ret, const GFC_INTEGER_1 *source, + const index_type along, const index_type pncopies) +{ + int n; + int ncopies = pncopies; + GFC_INTEGER_1 * restrict dest; + index_type stride; + + if (GFC_DESCRIPTOR_RANK (ret) != 1) + runtime_error ("incorrect destination rank in spread()"); + + if (along > 1) + runtime_error ("dim outside of rank in spread()"); + + if (ret->data == NULL) + { + ret->data = internal_malloc_size (ncopies * sizeof (GFC_INTEGER_1)); + ret->offset = 0; + ret->dim[0].stride = 1; + ret->dim[0].lbound = 0; + ret->dim[0].ubound = ncopies - 1; + } + else + { + if (ncopies - 1 > (ret->dim[0].ubound - ret->dim[0].lbound) + / ret->dim[0].stride) + runtime_error ("dim too large in spread()"); + } + + dest = ret->data; + stride = ret->dim[0].stride; + + for (n = 0; n < ncopies; n++) + { + *dest = *source; + dest += stride; + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i16.c new file mode 100644 index 0000000000..a454557648 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i16.c @@ -0,0 +1,273 @@ +/* Special implementation of the SPREAD intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + spread_generic.c written by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) + +void +spread_i16 (gfc_array_i16 *ret, const gfc_array_i16 *source, + const index_type along, const index_type pncopies) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdelta = 0; + index_type rrank; + index_type rs; + GFC_INTEGER_16 *rptr; + GFC_INTEGER_16 * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type srank; + const GFC_INTEGER_16 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ncopies; + + srank = GFC_DESCRIPTOR_RANK(source); + + rrank = srank + 1; + if (rrank > GFC_MAX_DIMENSIONS) + runtime_error ("return rank too large in spread()"); + + if (along > rrank) + runtime_error ("dim outside of rank in spread()"); + + ncopies = pncopies; + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rrank; + dim = 0; + rs = 1; + for (n = 0; n < rrank; n++) + { + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + if (n == along - 1) + { + ret->dim[n].ubound = ncopies - 1; + rdelta = rs; + rs *= ncopies; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = rs; + + ret->dim[n].ubound = extent[dim]-1; + rs *= extent[dim]; + dim++; + } + } + ret->offset = 0; + if (rs > 0) + ret->data = internal_malloc_size (rs * sizeof(GFC_INTEGER_16)); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + else + { + int zero_sized; + + zero_sized = 0; + + dim = 0; + if (GFC_DESCRIPTOR_RANK(ret) != rrank) + runtime_error ("rank mismatch in spread()"); + + if (unlikely (compile_options.bounds_check)) + { + for (n = 0; n < rrank; n++) + { + index_type ret_extent; + + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + + if (ret_extent != ncopies) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (ret_extent != extent[dim]) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); + + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + else + { + for (n = 0; n < rrank; n++) + { + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + + if (zero_sized) + return; + + if (sstride[0] == 0) + sstride[0] = 1; + } + sstride0 = sstride[0]; + rstride0 = rstride[0]; + rptr = ret->data; + sptr = source->data; + + while (sptr) + { + /* Spread this element. */ + dest = rptr; + for (n = 0; n < ncopies; n++) + { + *dest = *sptr; + dest += rdelta; + } + /* Advance to the next element. */ + sptr += sstride0; + rptr += rstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + rptr -= rstride[n] * extent[n]; + n++; + if (n >= srank) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + rptr += rstride[n]; + } + } + } +} + +/* This version of spread_internal treats the special case of a scalar + source. This is much simpler than the more general case above. */ + +void +spread_scalar_i16 (gfc_array_i16 *ret, const GFC_INTEGER_16 *source, + const index_type along, const index_type pncopies) +{ + int n; + int ncopies = pncopies; + GFC_INTEGER_16 * restrict dest; + index_type stride; + + if (GFC_DESCRIPTOR_RANK (ret) != 1) + runtime_error ("incorrect destination rank in spread()"); + + if (along > 1) + runtime_error ("dim outside of rank in spread()"); + + if (ret->data == NULL) + { + ret->data = internal_malloc_size (ncopies * sizeof (GFC_INTEGER_16)); + ret->offset = 0; + ret->dim[0].stride = 1; + ret->dim[0].lbound = 0; + ret->dim[0].ubound = ncopies - 1; + } + else + { + if (ncopies - 1 > (ret->dim[0].ubound - ret->dim[0].lbound) + / ret->dim[0].stride) + runtime_error ("dim too large in spread()"); + } + + dest = ret->data; + stride = ret->dim[0].stride; + + for (n = 0; n < ncopies; n++) + { + *dest = *source; + dest += stride; + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i2.c new file mode 100644 index 0000000000..3bcccb190e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i2.c @@ -0,0 +1,273 @@ +/* Special implementation of the SPREAD intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + spread_generic.c written by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) + +void +spread_i2 (gfc_array_i2 *ret, const gfc_array_i2 *source, + const index_type along, const index_type pncopies) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdelta = 0; + index_type rrank; + index_type rs; + GFC_INTEGER_2 *rptr; + GFC_INTEGER_2 * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type srank; + const GFC_INTEGER_2 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ncopies; + + srank = GFC_DESCRIPTOR_RANK(source); + + rrank = srank + 1; + if (rrank > GFC_MAX_DIMENSIONS) + runtime_error ("return rank too large in spread()"); + + if (along > rrank) + runtime_error ("dim outside of rank in spread()"); + + ncopies = pncopies; + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rrank; + dim = 0; + rs = 1; + for (n = 0; n < rrank; n++) + { + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + if (n == along - 1) + { + ret->dim[n].ubound = ncopies - 1; + rdelta = rs; + rs *= ncopies; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = rs; + + ret->dim[n].ubound = extent[dim]-1; + rs *= extent[dim]; + dim++; + } + } + ret->offset = 0; + if (rs > 0) + ret->data = internal_malloc_size (rs * sizeof(GFC_INTEGER_2)); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + else + { + int zero_sized; + + zero_sized = 0; + + dim = 0; + if (GFC_DESCRIPTOR_RANK(ret) != rrank) + runtime_error ("rank mismatch in spread()"); + + if (unlikely (compile_options.bounds_check)) + { + for (n = 0; n < rrank; n++) + { + index_type ret_extent; + + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + + if (ret_extent != ncopies) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (ret_extent != extent[dim]) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); + + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + else + { + for (n = 0; n < rrank; n++) + { + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + + if (zero_sized) + return; + + if (sstride[0] == 0) + sstride[0] = 1; + } + sstride0 = sstride[0]; + rstride0 = rstride[0]; + rptr = ret->data; + sptr = source->data; + + while (sptr) + { + /* Spread this element. */ + dest = rptr; + for (n = 0; n < ncopies; n++) + { + *dest = *sptr; + dest += rdelta; + } + /* Advance to the next element. */ + sptr += sstride0; + rptr += rstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + rptr -= rstride[n] * extent[n]; + n++; + if (n >= srank) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + rptr += rstride[n]; + } + } + } +} + +/* This version of spread_internal treats the special case of a scalar + source. This is much simpler than the more general case above. */ + +void +spread_scalar_i2 (gfc_array_i2 *ret, const GFC_INTEGER_2 *source, + const index_type along, const index_type pncopies) +{ + int n; + int ncopies = pncopies; + GFC_INTEGER_2 * restrict dest; + index_type stride; + + if (GFC_DESCRIPTOR_RANK (ret) != 1) + runtime_error ("incorrect destination rank in spread()"); + + if (along > 1) + runtime_error ("dim outside of rank in spread()"); + + if (ret->data == NULL) + { + ret->data = internal_malloc_size (ncopies * sizeof (GFC_INTEGER_2)); + ret->offset = 0; + ret->dim[0].stride = 1; + ret->dim[0].lbound = 0; + ret->dim[0].ubound = ncopies - 1; + } + else + { + if (ncopies - 1 > (ret->dim[0].ubound - ret->dim[0].lbound) + / ret->dim[0].stride) + runtime_error ("dim too large in spread()"); + } + + dest = ret->data; + stride = ret->dim[0].stride; + + for (n = 0; n < ncopies; n++) + { + *dest = *source; + dest += stride; + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i4.c new file mode 100644 index 0000000000..336ca7c958 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i4.c @@ -0,0 +1,273 @@ +/* Special implementation of the SPREAD intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + spread_generic.c written by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) + +void +spread_i4 (gfc_array_i4 *ret, const gfc_array_i4 *source, + const index_type along, const index_type pncopies) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdelta = 0; + index_type rrank; + index_type rs; + GFC_INTEGER_4 *rptr; + GFC_INTEGER_4 * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type srank; + const GFC_INTEGER_4 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ncopies; + + srank = GFC_DESCRIPTOR_RANK(source); + + rrank = srank + 1; + if (rrank > GFC_MAX_DIMENSIONS) + runtime_error ("return rank too large in spread()"); + + if (along > rrank) + runtime_error ("dim outside of rank in spread()"); + + ncopies = pncopies; + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rrank; + dim = 0; + rs = 1; + for (n = 0; n < rrank; n++) + { + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + if (n == along - 1) + { + ret->dim[n].ubound = ncopies - 1; + rdelta = rs; + rs *= ncopies; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = rs; + + ret->dim[n].ubound = extent[dim]-1; + rs *= extent[dim]; + dim++; + } + } + ret->offset = 0; + if (rs > 0) + ret->data = internal_malloc_size (rs * sizeof(GFC_INTEGER_4)); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + else + { + int zero_sized; + + zero_sized = 0; + + dim = 0; + if (GFC_DESCRIPTOR_RANK(ret) != rrank) + runtime_error ("rank mismatch in spread()"); + + if (unlikely (compile_options.bounds_check)) + { + for (n = 0; n < rrank; n++) + { + index_type ret_extent; + + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + + if (ret_extent != ncopies) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (ret_extent != extent[dim]) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); + + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + else + { + for (n = 0; n < rrank; n++) + { + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + + if (zero_sized) + return; + + if (sstride[0] == 0) + sstride[0] = 1; + } + sstride0 = sstride[0]; + rstride0 = rstride[0]; + rptr = ret->data; + sptr = source->data; + + while (sptr) + { + /* Spread this element. */ + dest = rptr; + for (n = 0; n < ncopies; n++) + { + *dest = *sptr; + dest += rdelta; + } + /* Advance to the next element. */ + sptr += sstride0; + rptr += rstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + rptr -= rstride[n] * extent[n]; + n++; + if (n >= srank) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + rptr += rstride[n]; + } + } + } +} + +/* This version of spread_internal treats the special case of a scalar + source. This is much simpler than the more general case above. */ + +void +spread_scalar_i4 (gfc_array_i4 *ret, const GFC_INTEGER_4 *source, + const index_type along, const index_type pncopies) +{ + int n; + int ncopies = pncopies; + GFC_INTEGER_4 * restrict dest; + index_type stride; + + if (GFC_DESCRIPTOR_RANK (ret) != 1) + runtime_error ("incorrect destination rank in spread()"); + + if (along > 1) + runtime_error ("dim outside of rank in spread()"); + + if (ret->data == NULL) + { + ret->data = internal_malloc_size (ncopies * sizeof (GFC_INTEGER_4)); + ret->offset = 0; + ret->dim[0].stride = 1; + ret->dim[0].lbound = 0; + ret->dim[0].ubound = ncopies - 1; + } + else + { + if (ncopies - 1 > (ret->dim[0].ubound - ret->dim[0].lbound) + / ret->dim[0].stride) + runtime_error ("dim too large in spread()"); + } + + dest = ret->data; + stride = ret->dim[0].stride; + + for (n = 0; n < ncopies; n++) + { + *dest = *source; + dest += stride; + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i8.c new file mode 100644 index 0000000000..6b10a81419 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i8.c @@ -0,0 +1,273 @@ +/* Special implementation of the SPREAD intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + spread_generic.c written by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) + +void +spread_i8 (gfc_array_i8 *ret, const gfc_array_i8 *source, + const index_type along, const index_type pncopies) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdelta = 0; + index_type rrank; + index_type rs; + GFC_INTEGER_8 *rptr; + GFC_INTEGER_8 * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type srank; + const GFC_INTEGER_8 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ncopies; + + srank = GFC_DESCRIPTOR_RANK(source); + + rrank = srank + 1; + if (rrank > GFC_MAX_DIMENSIONS) + runtime_error ("return rank too large in spread()"); + + if (along > rrank) + runtime_error ("dim outside of rank in spread()"); + + ncopies = pncopies; + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rrank; + dim = 0; + rs = 1; + for (n = 0; n < rrank; n++) + { + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + if (n == along - 1) + { + ret->dim[n].ubound = ncopies - 1; + rdelta = rs; + rs *= ncopies; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = rs; + + ret->dim[n].ubound = extent[dim]-1; + rs *= extent[dim]; + dim++; + } + } + ret->offset = 0; + if (rs > 0) + ret->data = internal_malloc_size (rs * sizeof(GFC_INTEGER_8)); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + else + { + int zero_sized; + + zero_sized = 0; + + dim = 0; + if (GFC_DESCRIPTOR_RANK(ret) != rrank) + runtime_error ("rank mismatch in spread()"); + + if (unlikely (compile_options.bounds_check)) + { + for (n = 0; n < rrank; n++) + { + index_type ret_extent; + + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + + if (ret_extent != ncopies) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (ret_extent != extent[dim]) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); + + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + else + { + for (n = 0; n < rrank; n++) + { + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + + if (zero_sized) + return; + + if (sstride[0] == 0) + sstride[0] = 1; + } + sstride0 = sstride[0]; + rstride0 = rstride[0]; + rptr = ret->data; + sptr = source->data; + + while (sptr) + { + /* Spread this element. */ + dest = rptr; + for (n = 0; n < ncopies; n++) + { + *dest = *sptr; + dest += rdelta; + } + /* Advance to the next element. */ + sptr += sstride0; + rptr += rstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + rptr -= rstride[n] * extent[n]; + n++; + if (n >= srank) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + rptr += rstride[n]; + } + } + } +} + +/* This version of spread_internal treats the special case of a scalar + source. This is much simpler than the more general case above. */ + +void +spread_scalar_i8 (gfc_array_i8 *ret, const GFC_INTEGER_8 *source, + const index_type along, const index_type pncopies) +{ + int n; + int ncopies = pncopies; + GFC_INTEGER_8 * restrict dest; + index_type stride; + + if (GFC_DESCRIPTOR_RANK (ret) != 1) + runtime_error ("incorrect destination rank in spread()"); + + if (along > 1) + runtime_error ("dim outside of rank in spread()"); + + if (ret->data == NULL) + { + ret->data = internal_malloc_size (ncopies * sizeof (GFC_INTEGER_8)); + ret->offset = 0; + ret->dim[0].stride = 1; + ret->dim[0].lbound = 0; + ret->dim[0].ubound = ncopies - 1; + } + else + { + if (ncopies - 1 > (ret->dim[0].ubound - ret->dim[0].lbound) + / ret->dim[0].stride) + runtime_error ("dim too large in spread()"); + } + + dest = ret->data; + stride = ret->dim[0].stride; + + for (n = 0; n < ncopies; n++) + { + *dest = *source; + dest += stride; + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r10.c new file mode 100644 index 0000000000..9a3a356975 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r10.c @@ -0,0 +1,273 @@ +/* Special implementation of the SPREAD intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + spread_generic.c written by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) + +void +spread_r10 (gfc_array_r10 *ret, const gfc_array_r10 *source, + const index_type along, const index_type pncopies) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdelta = 0; + index_type rrank; + index_type rs; + GFC_REAL_10 *rptr; + GFC_REAL_10 * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type srank; + const GFC_REAL_10 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ncopies; + + srank = GFC_DESCRIPTOR_RANK(source); + + rrank = srank + 1; + if (rrank > GFC_MAX_DIMENSIONS) + runtime_error ("return rank too large in spread()"); + + if (along > rrank) + runtime_error ("dim outside of rank in spread()"); + + ncopies = pncopies; + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rrank; + dim = 0; + rs = 1; + for (n = 0; n < rrank; n++) + { + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + if (n == along - 1) + { + ret->dim[n].ubound = ncopies - 1; + rdelta = rs; + rs *= ncopies; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = rs; + + ret->dim[n].ubound = extent[dim]-1; + rs *= extent[dim]; + dim++; + } + } + ret->offset = 0; + if (rs > 0) + ret->data = internal_malloc_size (rs * sizeof(GFC_REAL_10)); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + else + { + int zero_sized; + + zero_sized = 0; + + dim = 0; + if (GFC_DESCRIPTOR_RANK(ret) != rrank) + runtime_error ("rank mismatch in spread()"); + + if (unlikely (compile_options.bounds_check)) + { + for (n = 0; n < rrank; n++) + { + index_type ret_extent; + + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + + if (ret_extent != ncopies) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (ret_extent != extent[dim]) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); + + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + else + { + for (n = 0; n < rrank; n++) + { + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + + if (zero_sized) + return; + + if (sstride[0] == 0) + sstride[0] = 1; + } + sstride0 = sstride[0]; + rstride0 = rstride[0]; + rptr = ret->data; + sptr = source->data; + + while (sptr) + { + /* Spread this element. */ + dest = rptr; + for (n = 0; n < ncopies; n++) + { + *dest = *sptr; + dest += rdelta; + } + /* Advance to the next element. */ + sptr += sstride0; + rptr += rstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + rptr -= rstride[n] * extent[n]; + n++; + if (n >= srank) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + rptr += rstride[n]; + } + } + } +} + +/* This version of spread_internal treats the special case of a scalar + source. This is much simpler than the more general case above. */ + +void +spread_scalar_r10 (gfc_array_r10 *ret, const GFC_REAL_10 *source, + const index_type along, const index_type pncopies) +{ + int n; + int ncopies = pncopies; + GFC_REAL_10 * restrict dest; + index_type stride; + + if (GFC_DESCRIPTOR_RANK (ret) != 1) + runtime_error ("incorrect destination rank in spread()"); + + if (along > 1) + runtime_error ("dim outside of rank in spread()"); + + if (ret->data == NULL) + { + ret->data = internal_malloc_size (ncopies * sizeof (GFC_REAL_10)); + ret->offset = 0; + ret->dim[0].stride = 1; + ret->dim[0].lbound = 0; + ret->dim[0].ubound = ncopies - 1; + } + else + { + if (ncopies - 1 > (ret->dim[0].ubound - ret->dim[0].lbound) + / ret->dim[0].stride) + runtime_error ("dim too large in spread()"); + } + + dest = ret->data; + stride = ret->dim[0].stride; + + for (n = 0; n < ncopies; n++) + { + *dest = *source; + dest += stride; + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r16.c new file mode 100644 index 0000000000..69ab4c6500 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r16.c @@ -0,0 +1,273 @@ +/* Special implementation of the SPREAD intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + spread_generic.c written by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) + +void +spread_r16 (gfc_array_r16 *ret, const gfc_array_r16 *source, + const index_type along, const index_type pncopies) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdelta = 0; + index_type rrank; + index_type rs; + GFC_REAL_16 *rptr; + GFC_REAL_16 * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type srank; + const GFC_REAL_16 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ncopies; + + srank = GFC_DESCRIPTOR_RANK(source); + + rrank = srank + 1; + if (rrank > GFC_MAX_DIMENSIONS) + runtime_error ("return rank too large in spread()"); + + if (along > rrank) + runtime_error ("dim outside of rank in spread()"); + + ncopies = pncopies; + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rrank; + dim = 0; + rs = 1; + for (n = 0; n < rrank; n++) + { + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + if (n == along - 1) + { + ret->dim[n].ubound = ncopies - 1; + rdelta = rs; + rs *= ncopies; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = rs; + + ret->dim[n].ubound = extent[dim]-1; + rs *= extent[dim]; + dim++; + } + } + ret->offset = 0; + if (rs > 0) + ret->data = internal_malloc_size (rs * sizeof(GFC_REAL_16)); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + else + { + int zero_sized; + + zero_sized = 0; + + dim = 0; + if (GFC_DESCRIPTOR_RANK(ret) != rrank) + runtime_error ("rank mismatch in spread()"); + + if (unlikely (compile_options.bounds_check)) + { + for (n = 0; n < rrank; n++) + { + index_type ret_extent; + + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + + if (ret_extent != ncopies) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (ret_extent != extent[dim]) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); + + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + else + { + for (n = 0; n < rrank; n++) + { + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + + if (zero_sized) + return; + + if (sstride[0] == 0) + sstride[0] = 1; + } + sstride0 = sstride[0]; + rstride0 = rstride[0]; + rptr = ret->data; + sptr = source->data; + + while (sptr) + { + /* Spread this element. */ + dest = rptr; + for (n = 0; n < ncopies; n++) + { + *dest = *sptr; + dest += rdelta; + } + /* Advance to the next element. */ + sptr += sstride0; + rptr += rstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + rptr -= rstride[n] * extent[n]; + n++; + if (n >= srank) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + rptr += rstride[n]; + } + } + } +} + +/* This version of spread_internal treats the special case of a scalar + source. This is much simpler than the more general case above. */ + +void +spread_scalar_r16 (gfc_array_r16 *ret, const GFC_REAL_16 *source, + const index_type along, const index_type pncopies) +{ + int n; + int ncopies = pncopies; + GFC_REAL_16 * restrict dest; + index_type stride; + + if (GFC_DESCRIPTOR_RANK (ret) != 1) + runtime_error ("incorrect destination rank in spread()"); + + if (along > 1) + runtime_error ("dim outside of rank in spread()"); + + if (ret->data == NULL) + { + ret->data = internal_malloc_size (ncopies * sizeof (GFC_REAL_16)); + ret->offset = 0; + ret->dim[0].stride = 1; + ret->dim[0].lbound = 0; + ret->dim[0].ubound = ncopies - 1; + } + else + { + if (ncopies - 1 > (ret->dim[0].ubound - ret->dim[0].lbound) + / ret->dim[0].stride) + runtime_error ("dim too large in spread()"); + } + + dest = ret->data; + stride = ret->dim[0].stride; + + for (n = 0; n < ncopies; n++) + { + *dest = *source; + dest += stride; + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r4.c new file mode 100644 index 0000000000..6f018de8fd --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r4.c @@ -0,0 +1,273 @@ +/* Special implementation of the SPREAD intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + spread_generic.c written by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) + +void +spread_r4 (gfc_array_r4 *ret, const gfc_array_r4 *source, + const index_type along, const index_type pncopies) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdelta = 0; + index_type rrank; + index_type rs; + GFC_REAL_4 *rptr; + GFC_REAL_4 * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type srank; + const GFC_REAL_4 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ncopies; + + srank = GFC_DESCRIPTOR_RANK(source); + + rrank = srank + 1; + if (rrank > GFC_MAX_DIMENSIONS) + runtime_error ("return rank too large in spread()"); + + if (along > rrank) + runtime_error ("dim outside of rank in spread()"); + + ncopies = pncopies; + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rrank; + dim = 0; + rs = 1; + for (n = 0; n < rrank; n++) + { + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + if (n == along - 1) + { + ret->dim[n].ubound = ncopies - 1; + rdelta = rs; + rs *= ncopies; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = rs; + + ret->dim[n].ubound = extent[dim]-1; + rs *= extent[dim]; + dim++; + } + } + ret->offset = 0; + if (rs > 0) + ret->data = internal_malloc_size (rs * sizeof(GFC_REAL_4)); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + else + { + int zero_sized; + + zero_sized = 0; + + dim = 0; + if (GFC_DESCRIPTOR_RANK(ret) != rrank) + runtime_error ("rank mismatch in spread()"); + + if (unlikely (compile_options.bounds_check)) + { + for (n = 0; n < rrank; n++) + { + index_type ret_extent; + + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + + if (ret_extent != ncopies) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (ret_extent != extent[dim]) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); + + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + else + { + for (n = 0; n < rrank; n++) + { + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + + if (zero_sized) + return; + + if (sstride[0] == 0) + sstride[0] = 1; + } + sstride0 = sstride[0]; + rstride0 = rstride[0]; + rptr = ret->data; + sptr = source->data; + + while (sptr) + { + /* Spread this element. */ + dest = rptr; + for (n = 0; n < ncopies; n++) + { + *dest = *sptr; + dest += rdelta; + } + /* Advance to the next element. */ + sptr += sstride0; + rptr += rstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + rptr -= rstride[n] * extent[n]; + n++; + if (n >= srank) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + rptr += rstride[n]; + } + } + } +} + +/* This version of spread_internal treats the special case of a scalar + source. This is much simpler than the more general case above. */ + +void +spread_scalar_r4 (gfc_array_r4 *ret, const GFC_REAL_4 *source, + const index_type along, const index_type pncopies) +{ + int n; + int ncopies = pncopies; + GFC_REAL_4 * restrict dest; + index_type stride; + + if (GFC_DESCRIPTOR_RANK (ret) != 1) + runtime_error ("incorrect destination rank in spread()"); + + if (along > 1) + runtime_error ("dim outside of rank in spread()"); + + if (ret->data == NULL) + { + ret->data = internal_malloc_size (ncopies * sizeof (GFC_REAL_4)); + ret->offset = 0; + ret->dim[0].stride = 1; + ret->dim[0].lbound = 0; + ret->dim[0].ubound = ncopies - 1; + } + else + { + if (ncopies - 1 > (ret->dim[0].ubound - ret->dim[0].lbound) + / ret->dim[0].stride) + runtime_error ("dim too large in spread()"); + } + + dest = ret->data; + stride = ret->dim[0].stride; + + for (n = 0; n < ncopies; n++) + { + *dest = *source; + dest += stride; + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r8.c new file mode 100644 index 0000000000..d05e31a92b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r8.c @@ -0,0 +1,273 @@ +/* Special implementation of the SPREAD intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + spread_generic.c written by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) + +void +spread_r8 (gfc_array_r8 *ret, const gfc_array_r8 *source, + const index_type along, const index_type pncopies) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdelta = 0; + index_type rrank; + index_type rs; + GFC_REAL_8 *rptr; + GFC_REAL_8 * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type srank; + const GFC_REAL_8 *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ncopies; + + srank = GFC_DESCRIPTOR_RANK(source); + + rrank = srank + 1; + if (rrank > GFC_MAX_DIMENSIONS) + runtime_error ("return rank too large in spread()"); + + if (along > rrank) + runtime_error ("dim outside of rank in spread()"); + + ncopies = pncopies; + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rrank; + dim = 0; + rs = 1; + for (n = 0; n < rrank; n++) + { + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + if (n == along - 1) + { + ret->dim[n].ubound = ncopies - 1; + rdelta = rs; + rs *= ncopies; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = rs; + + ret->dim[n].ubound = extent[dim]-1; + rs *= extent[dim]; + dim++; + } + } + ret->offset = 0; + if (rs > 0) + ret->data = internal_malloc_size (rs * sizeof(GFC_REAL_8)); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + else + { + int zero_sized; + + zero_sized = 0; + + dim = 0; + if (GFC_DESCRIPTOR_RANK(ret) != rrank) + runtime_error ("rank mismatch in spread()"); + + if (unlikely (compile_options.bounds_check)) + { + for (n = 0; n < rrank; n++) + { + index_type ret_extent; + + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + + if (ret_extent != ncopies) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (ret_extent != extent[dim]) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); + + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + else + { + for (n = 0; n < rrank; n++) + { + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + + if (zero_sized) + return; + + if (sstride[0] == 0) + sstride[0] = 1; + } + sstride0 = sstride[0]; + rstride0 = rstride[0]; + rptr = ret->data; + sptr = source->data; + + while (sptr) + { + /* Spread this element. */ + dest = rptr; + for (n = 0; n < ncopies; n++) + { + *dest = *sptr; + dest += rdelta; + } + /* Advance to the next element. */ + sptr += sstride0; + rptr += rstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + rptr -= rstride[n] * extent[n]; + n++; + if (n >= srank) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + rptr += rstride[n]; + } + } + } +} + +/* This version of spread_internal treats the special case of a scalar + source. This is much simpler than the more general case above. */ + +void +spread_scalar_r8 (gfc_array_r8 *ret, const GFC_REAL_8 *source, + const index_type along, const index_type pncopies) +{ + int n; + int ncopies = pncopies; + GFC_REAL_8 * restrict dest; + index_type stride; + + if (GFC_DESCRIPTOR_RANK (ret) != 1) + runtime_error ("incorrect destination rank in spread()"); + + if (along > 1) + runtime_error ("dim outside of rank in spread()"); + + if (ret->data == NULL) + { + ret->data = internal_malloc_size (ncopies * sizeof (GFC_REAL_8)); + ret->offset = 0; + ret->dim[0].stride = 1; + ret->dim[0].lbound = 0; + ret->dim[0].ubound = ncopies - 1; + } + else + { + if (ncopies - 1 > (ret->dim[0].ubound - ret->dim[0].lbound) + / ret->dim[0].stride) + runtime_error ("dim too large in spread()"); + } + + dest = ret->data; + stride = ret->dim[0].stride; + + for (n = 0; n < ncopies; n++) + { + *dest = *source; + dest += stride; + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c10.c new file mode 100644 index 0000000000..a1f658ed41 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c10.c @@ -0,0 +1,545 @@ +/* Implementation of the SUM intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_10) && defined (HAVE_GFC_COMPLEX_10) + + +extern void sum_c10 (gfc_array_c10 * const restrict, + gfc_array_c10 * const restrict, const index_type * const restrict); +export_proto(sum_c10); + +void +sum_c10 (gfc_array_c10 * const restrict retarray, + gfc_array_c10 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_COMPLEX_10 * restrict base; + GFC_COMPLEX_10 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_COMPLEX_10 * restrict src; + GFC_COMPLEX_10 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void msum_c10 (gfc_array_c10 * const restrict, + gfc_array_c10 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(msum_c10); + +void +msum_c10 (gfc_array_c10 * const restrict retarray, + gfc_array_c10 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_10 * restrict dest; + const GFC_COMPLEX_10 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_COMPLEX_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in SUM intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_COMPLEX_10 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_COMPLEX_10 result; + src = base; + msrc = mbase; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void ssum_c10 (gfc_array_c10 * const restrict, + gfc_array_c10 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(ssum_c10); + +void +ssum_c10 (gfc_array_c10 * const restrict retarray, + gfc_array_c10 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_10 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + sum_c10 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c16.c new file mode 100644 index 0000000000..8ec03a20f8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c16.c @@ -0,0 +1,545 @@ +/* Implementation of the SUM intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_16) && defined (HAVE_GFC_COMPLEX_16) + + +extern void sum_c16 (gfc_array_c16 * const restrict, + gfc_array_c16 * const restrict, const index_type * const restrict); +export_proto(sum_c16); + +void +sum_c16 (gfc_array_c16 * const restrict retarray, + gfc_array_c16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_COMPLEX_16 * restrict base; + GFC_COMPLEX_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_COMPLEX_16 * restrict src; + GFC_COMPLEX_16 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void msum_c16 (gfc_array_c16 * const restrict, + gfc_array_c16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(msum_c16); + +void +msum_c16 (gfc_array_c16 * const restrict retarray, + gfc_array_c16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_16 * restrict dest; + const GFC_COMPLEX_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_COMPLEX_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in SUM intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_COMPLEX_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_COMPLEX_16 result; + src = base; + msrc = mbase; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void ssum_c16 (gfc_array_c16 * const restrict, + gfc_array_c16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(ssum_c16); + +void +ssum_c16 (gfc_array_c16 * const restrict retarray, + gfc_array_c16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + sum_c16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c4.c new file mode 100644 index 0000000000..158e3020fa --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c4.c @@ -0,0 +1,545 @@ +/* Implementation of the SUM intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_4) && defined (HAVE_GFC_COMPLEX_4) + + +extern void sum_c4 (gfc_array_c4 * const restrict, + gfc_array_c4 * const restrict, const index_type * const restrict); +export_proto(sum_c4); + +void +sum_c4 (gfc_array_c4 * const restrict retarray, + gfc_array_c4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_COMPLEX_4 * restrict base; + GFC_COMPLEX_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_COMPLEX_4 * restrict src; + GFC_COMPLEX_4 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void msum_c4 (gfc_array_c4 * const restrict, + gfc_array_c4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(msum_c4); + +void +msum_c4 (gfc_array_c4 * const restrict retarray, + gfc_array_c4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_4 * restrict dest; + const GFC_COMPLEX_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_COMPLEX_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in SUM intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_COMPLEX_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_COMPLEX_4 result; + src = base; + msrc = mbase; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void ssum_c4 (gfc_array_c4 * const restrict, + gfc_array_c4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(ssum_c4); + +void +ssum_c4 (gfc_array_c4 * const restrict retarray, + gfc_array_c4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + sum_c4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c8.c new file mode 100644 index 0000000000..bc9dc493d6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c8.c @@ -0,0 +1,545 @@ +/* Implementation of the SUM intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_8) && defined (HAVE_GFC_COMPLEX_8) + + +extern void sum_c8 (gfc_array_c8 * const restrict, + gfc_array_c8 * const restrict, const index_type * const restrict); +export_proto(sum_c8); + +void +sum_c8 (gfc_array_c8 * const restrict retarray, + gfc_array_c8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_COMPLEX_8 * restrict base; + GFC_COMPLEX_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_COMPLEX_8 * restrict src; + GFC_COMPLEX_8 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void msum_c8 (gfc_array_c8 * const restrict, + gfc_array_c8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(msum_c8); + +void +msum_c8 (gfc_array_c8 * const restrict retarray, + gfc_array_c8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_8 * restrict dest; + const GFC_COMPLEX_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_COMPLEX_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in SUM intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_COMPLEX_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_COMPLEX_8 result; + src = base; + msrc = mbase; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void ssum_c8 (gfc_array_c8 * const restrict, + gfc_array_c8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(ssum_c8); + +void +ssum_c8 (gfc_array_c8 * const restrict retarray, + gfc_array_c8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_COMPLEX_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + sum_c8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_COMPLEX_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i1.c new file mode 100644 index 0000000000..34bbde2995 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i1.c @@ -0,0 +1,545 @@ +/* Implementation of the SUM intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) && defined (HAVE_GFC_INTEGER_1) + + +extern void sum_i1 (gfc_array_i1 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict); +export_proto(sum_i1); + +void +sum_i1 (gfc_array_i1 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_1 * restrict base; + GFC_INTEGER_1 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_1) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_1 * restrict src; + GFC_INTEGER_1 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void msum_i1 (gfc_array_i1 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(msum_i1); + +void +msum_i1 (gfc_array_i1 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_1 * restrict dest; + const GFC_INTEGER_1 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_1) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in SUM intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_1 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_1 result; + src = base; + msrc = mbase; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void ssum_i1 (gfc_array_i1 * const restrict, + gfc_array_i1 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(ssum_i1); + +void +ssum_i1 (gfc_array_i1 * const restrict retarray, + gfc_array_i1 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_1 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + sum_i1 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_1) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i16.c new file mode 100644 index 0000000000..1c7d6d9459 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i16.c @@ -0,0 +1,545 @@ +/* Implementation of the SUM intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_16) + + +extern void sum_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict); +export_proto(sum_i16); + +void +sum_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_16 * restrict base; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_16 * restrict src; + GFC_INTEGER_16 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void msum_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(msum_i16); + +void +msum_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + const GFC_INTEGER_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in SUM intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_16 result; + src = base; + msrc = mbase; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void ssum_i16 (gfc_array_i16 * const restrict, + gfc_array_i16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(ssum_i16); + +void +ssum_i16 (gfc_array_i16 * const restrict retarray, + gfc_array_i16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + sum_i16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i2.c new file mode 100644 index 0000000000..ffa9846b1c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i2.c @@ -0,0 +1,545 @@ +/* Implementation of the SUM intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) && defined (HAVE_GFC_INTEGER_2) + + +extern void sum_i2 (gfc_array_i2 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict); +export_proto(sum_i2); + +void +sum_i2 (gfc_array_i2 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_2 * restrict base; + GFC_INTEGER_2 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_2) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_2 * restrict src; + GFC_INTEGER_2 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void msum_i2 (gfc_array_i2 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(msum_i2); + +void +msum_i2 (gfc_array_i2 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_2 * restrict dest; + const GFC_INTEGER_2 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_2) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in SUM intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_2 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_2 result; + src = base; + msrc = mbase; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void ssum_i2 (gfc_array_i2 * const restrict, + gfc_array_i2 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(ssum_i2); + +void +ssum_i2 (gfc_array_i2 * const restrict retarray, + gfc_array_i2 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_2 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + sum_i2 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_2) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i4.c new file mode 100644 index 0000000000..c91cad0c67 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i4.c @@ -0,0 +1,545 @@ +/* Implementation of the SUM intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) && defined (HAVE_GFC_INTEGER_4) + + +extern void sum_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict); +export_proto(sum_i4); + +void +sum_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_4 * restrict base; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_4 * restrict src; + GFC_INTEGER_4 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void msum_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(msum_i4); + +void +msum_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + const GFC_INTEGER_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in SUM intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_4 result; + src = base; + msrc = mbase; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void ssum_i4 (gfc_array_i4 * const restrict, + gfc_array_i4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(ssum_i4); + +void +ssum_i4 (gfc_array_i4 * const restrict retarray, + gfc_array_i4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + sum_i4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i8.c new file mode 100644 index 0000000000..de800b266b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i8.c @@ -0,0 +1,545 @@ +/* Implementation of the SUM intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) && defined (HAVE_GFC_INTEGER_8) + + +extern void sum_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict); +export_proto(sum_i8); + +void +sum_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_INTEGER_8 * restrict base; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_INTEGER_8 * restrict src; + GFC_INTEGER_8 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void msum_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(msum_i8); + +void +msum_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + const GFC_INTEGER_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in SUM intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_INTEGER_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_INTEGER_8 result; + src = base; + msrc = mbase; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void ssum_i8 (gfc_array_i8 * const restrict, + gfc_array_i8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(ssum_i8); + +void +ssum_i8 (gfc_array_i8 * const restrict retarray, + gfc_array_i8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_INTEGER_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + sum_i8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_INTEGER_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r10.c new file mode 100644 index 0000000000..5039e62a9b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r10.c @@ -0,0 +1,545 @@ +/* Implementation of the SUM intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_10) && defined (HAVE_GFC_REAL_10) + + +extern void sum_r10 (gfc_array_r10 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict); +export_proto(sum_r10); + +void +sum_r10 (gfc_array_r10 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_10 * restrict base; + GFC_REAL_10 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_10 * restrict src; + GFC_REAL_10 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void msum_r10 (gfc_array_r10 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(msum_r10); + +void +msum_r10 (gfc_array_r10 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_10 * restrict dest; + const GFC_REAL_10 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in SUM intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_10 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_10 result; + src = base; + msrc = mbase; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void ssum_r10 (gfc_array_r10 * const restrict, + gfc_array_r10 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(ssum_r10); + +void +ssum_r10 (gfc_array_r10 * const restrict retarray, + gfc_array_r10 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_10 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + sum_r10 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_10) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r16.c new file mode 100644 index 0000000000..070e0958a9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r16.c @@ -0,0 +1,545 @@ +/* Implementation of the SUM intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_16) && defined (HAVE_GFC_REAL_16) + + +extern void sum_r16 (gfc_array_r16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict); +export_proto(sum_r16); + +void +sum_r16 (gfc_array_r16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_16 * restrict base; + GFC_REAL_16 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_16 * restrict src; + GFC_REAL_16 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void msum_r16 (gfc_array_r16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(msum_r16); + +void +msum_r16 (gfc_array_r16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_16 * restrict dest; + const GFC_REAL_16 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in SUM intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_16 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_16 result; + src = base; + msrc = mbase; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void ssum_r16 (gfc_array_r16 * const restrict, + gfc_array_r16 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(ssum_r16); + +void +ssum_r16 (gfc_array_r16 * const restrict retarray, + gfc_array_r16 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_16 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + sum_r16 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_16) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r4.c new file mode 100644 index 0000000000..24e427a267 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r4.c @@ -0,0 +1,545 @@ +/* Implementation of the SUM intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_4) && defined (HAVE_GFC_REAL_4) + + +extern void sum_r4 (gfc_array_r4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict); +export_proto(sum_r4); + +void +sum_r4 (gfc_array_r4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_4 * restrict base; + GFC_REAL_4 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_4 * restrict src; + GFC_REAL_4 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void msum_r4 (gfc_array_r4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(msum_r4); + +void +msum_r4 (gfc_array_r4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_4 * restrict dest; + const GFC_REAL_4 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in SUM intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_4 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_4 result; + src = base; + msrc = mbase; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void ssum_r4 (gfc_array_r4 * const restrict, + gfc_array_r4 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(ssum_r4); + +void +ssum_r4 (gfc_array_r4 * const restrict retarray, + gfc_array_r4 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_4 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + sum_r4 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_4) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r8.c new file mode 100644 index 0000000000..cb86155fb2 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r8.c @@ -0,0 +1,545 @@ +/* Implementation of the SUM intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +#if defined (HAVE_GFC_REAL_8) && defined (HAVE_GFC_REAL_8) + + +extern void sum_r8 (gfc_array_r8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict); +export_proto(sum_r8); + +void +sum_r8 (gfc_array_r8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_REAL_8 * restrict base; + GFC_REAL_8 * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_REAL_8 * restrict src; + GFC_REAL_8 result; + src = base; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta) + { + + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void msum_r8 (gfc_array_r8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(msum_r8); + +void +msum_r8 (gfc_array_r8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_8 * restrict dest; + const GFC_REAL_8 * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (GFC_REAL_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in SUM intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const GFC_REAL_8 * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + GFC_REAL_8 result; + src = base; + msrc = mbase; + { + + result = 0; + if (len <= 0) + *dest = 0; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { + + if (*msrc) + result += *src; + } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +} + + +extern void ssum_r8 (gfc_array_r8 * const restrict, + gfc_array_r8 * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(ssum_r8); + +void +ssum_r8 (gfc_array_r8 * const restrict retarray, + gfc_array_r8 * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + GFC_REAL_8 * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + sum_r8 (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (GFC_REAL_8) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " SUM intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " SUM intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = 0; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c10.c new file mode 100644 index 0000000000..338998b3c4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c10.c @@ -0,0 +1,116 @@ +/* Implementation of the TRANSPOSE intrinsic + Copyright 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Tobias Schlüter + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + + +#if defined (HAVE_GFC_COMPLEX_10) + +extern void transpose_c10 (gfc_array_c10 * const restrict ret, + gfc_array_c10 * const restrict source); +export_proto(transpose_c10); + +void +transpose_c10 (gfc_array_c10 * const restrict ret, + gfc_array_c10 * const restrict source) +{ + /* r.* indicates the return array. */ + index_type rxstride, rystride; + GFC_COMPLEX_10 * restrict rptr; + /* s.* indicates the source array. */ + index_type sxstride, systride; + const GFC_COMPLEX_10 *sptr; + + index_type xcount, ycount; + index_type x, y; + + assert (GFC_DESCRIPTOR_RANK (source) == 2); + + if (ret->data == NULL) + { + assert (GFC_DESCRIPTOR_RANK (ret) == 2); + assert (ret->dtype == source->dtype); + + ret->dim[0].lbound = 0; + ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound; + ret->dim[0].stride = 1; + + ret->dim[1].lbound = 0; + ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound; + ret->dim[1].stride = ret->dim[0].ubound+1; + + ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_10) * size0 ((array_t *) ret)); + ret->offset = 0; + } else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, src_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + src_extent = source->dim[1].ubound + 1 - source->dim[1].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 1: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + ret_extent = ret->dim[1].ubound + 1 - ret->dim[1].lbound; + src_extent = source->dim[0].ubound + 1 - source->dim[0].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 2: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + } + + sxstride = source->dim[0].stride; + systride = source->dim[1].stride; + xcount = source->dim[0].ubound + 1 - source->dim[0].lbound; + ycount = source->dim[1].ubound + 1 - source->dim[1].lbound; + + rxstride = ret->dim[0].stride; + rystride = ret->dim[1].stride; + + rptr = ret->data; + sptr = source->data; + + for (y=0; y < ycount; y++) + { + for (x=0; x < xcount; x++) + { + *rptr = *sptr; + + sptr += sxstride; + rptr += rystride; + } + sptr += systride - (sxstride * xcount); + rptr += rxstride - (rystride * xcount); + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c16.c new file mode 100644 index 0000000000..2ce91c75d0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c16.c @@ -0,0 +1,116 @@ +/* Implementation of the TRANSPOSE intrinsic + Copyright 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Tobias Schlüter + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + + +#if defined (HAVE_GFC_COMPLEX_16) + +extern void transpose_c16 (gfc_array_c16 * const restrict ret, + gfc_array_c16 * const restrict source); +export_proto(transpose_c16); + +void +transpose_c16 (gfc_array_c16 * const restrict ret, + gfc_array_c16 * const restrict source) +{ + /* r.* indicates the return array. */ + index_type rxstride, rystride; + GFC_COMPLEX_16 * restrict rptr; + /* s.* indicates the source array. */ + index_type sxstride, systride; + const GFC_COMPLEX_16 *sptr; + + index_type xcount, ycount; + index_type x, y; + + assert (GFC_DESCRIPTOR_RANK (source) == 2); + + if (ret->data == NULL) + { + assert (GFC_DESCRIPTOR_RANK (ret) == 2); + assert (ret->dtype == source->dtype); + + ret->dim[0].lbound = 0; + ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound; + ret->dim[0].stride = 1; + + ret->dim[1].lbound = 0; + ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound; + ret->dim[1].stride = ret->dim[0].ubound+1; + + ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_16) * size0 ((array_t *) ret)); + ret->offset = 0; + } else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, src_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + src_extent = source->dim[1].ubound + 1 - source->dim[1].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 1: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + ret_extent = ret->dim[1].ubound + 1 - ret->dim[1].lbound; + src_extent = source->dim[0].ubound + 1 - source->dim[0].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 2: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + } + + sxstride = source->dim[0].stride; + systride = source->dim[1].stride; + xcount = source->dim[0].ubound + 1 - source->dim[0].lbound; + ycount = source->dim[1].ubound + 1 - source->dim[1].lbound; + + rxstride = ret->dim[0].stride; + rystride = ret->dim[1].stride; + + rptr = ret->data; + sptr = source->data; + + for (y=0; y < ycount; y++) + { + for (x=0; x < xcount; x++) + { + *rptr = *sptr; + + sptr += sxstride; + rptr += rystride; + } + sptr += systride - (sxstride * xcount); + rptr += rxstride - (rystride * xcount); + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c4.c new file mode 100644 index 0000000000..1aa980325a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c4.c @@ -0,0 +1,116 @@ +/* Implementation of the TRANSPOSE intrinsic + Copyright 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Tobias Schlüter + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + + +#if defined (HAVE_GFC_COMPLEX_4) + +extern void transpose_c4 (gfc_array_c4 * const restrict ret, + gfc_array_c4 * const restrict source); +export_proto(transpose_c4); + +void +transpose_c4 (gfc_array_c4 * const restrict ret, + gfc_array_c4 * const restrict source) +{ + /* r.* indicates the return array. */ + index_type rxstride, rystride; + GFC_COMPLEX_4 * restrict rptr; + /* s.* indicates the source array. */ + index_type sxstride, systride; + const GFC_COMPLEX_4 *sptr; + + index_type xcount, ycount; + index_type x, y; + + assert (GFC_DESCRIPTOR_RANK (source) == 2); + + if (ret->data == NULL) + { + assert (GFC_DESCRIPTOR_RANK (ret) == 2); + assert (ret->dtype == source->dtype); + + ret->dim[0].lbound = 0; + ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound; + ret->dim[0].stride = 1; + + ret->dim[1].lbound = 0; + ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound; + ret->dim[1].stride = ret->dim[0].ubound+1; + + ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_4) * size0 ((array_t *) ret)); + ret->offset = 0; + } else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, src_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + src_extent = source->dim[1].ubound + 1 - source->dim[1].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 1: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + ret_extent = ret->dim[1].ubound + 1 - ret->dim[1].lbound; + src_extent = source->dim[0].ubound + 1 - source->dim[0].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 2: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + } + + sxstride = source->dim[0].stride; + systride = source->dim[1].stride; + xcount = source->dim[0].ubound + 1 - source->dim[0].lbound; + ycount = source->dim[1].ubound + 1 - source->dim[1].lbound; + + rxstride = ret->dim[0].stride; + rystride = ret->dim[1].stride; + + rptr = ret->data; + sptr = source->data; + + for (y=0; y < ycount; y++) + { + for (x=0; x < xcount; x++) + { + *rptr = *sptr; + + sptr += sxstride; + rptr += rystride; + } + sptr += systride - (sxstride * xcount); + rptr += rxstride - (rystride * xcount); + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c8.c new file mode 100644 index 0000000000..e901fcb240 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c8.c @@ -0,0 +1,116 @@ +/* Implementation of the TRANSPOSE intrinsic + Copyright 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Tobias Schlüter + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + + +#if defined (HAVE_GFC_COMPLEX_8) + +extern void transpose_c8 (gfc_array_c8 * const restrict ret, + gfc_array_c8 * const restrict source); +export_proto(transpose_c8); + +void +transpose_c8 (gfc_array_c8 * const restrict ret, + gfc_array_c8 * const restrict source) +{ + /* r.* indicates the return array. */ + index_type rxstride, rystride; + GFC_COMPLEX_8 * restrict rptr; + /* s.* indicates the source array. */ + index_type sxstride, systride; + const GFC_COMPLEX_8 *sptr; + + index_type xcount, ycount; + index_type x, y; + + assert (GFC_DESCRIPTOR_RANK (source) == 2); + + if (ret->data == NULL) + { + assert (GFC_DESCRIPTOR_RANK (ret) == 2); + assert (ret->dtype == source->dtype); + + ret->dim[0].lbound = 0; + ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound; + ret->dim[0].stride = 1; + + ret->dim[1].lbound = 0; + ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound; + ret->dim[1].stride = ret->dim[0].ubound+1; + + ret->data = internal_malloc_size (sizeof (GFC_COMPLEX_8) * size0 ((array_t *) ret)); + ret->offset = 0; + } else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, src_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + src_extent = source->dim[1].ubound + 1 - source->dim[1].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 1: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + ret_extent = ret->dim[1].ubound + 1 - ret->dim[1].lbound; + src_extent = source->dim[0].ubound + 1 - source->dim[0].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 2: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + } + + sxstride = source->dim[0].stride; + systride = source->dim[1].stride; + xcount = source->dim[0].ubound + 1 - source->dim[0].lbound; + ycount = source->dim[1].ubound + 1 - source->dim[1].lbound; + + rxstride = ret->dim[0].stride; + rystride = ret->dim[1].stride; + + rptr = ret->data; + sptr = source->data; + + for (y=0; y < ycount; y++) + { + for (x=0; x < xcount; x++) + { + *rptr = *sptr; + + sptr += sxstride; + rptr += rystride; + } + sptr += systride - (sxstride * xcount); + rptr += rxstride - (rystride * xcount); + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_i16.c new file mode 100644 index 0000000000..d61155dde2 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_i16.c @@ -0,0 +1,116 @@ +/* Implementation of the TRANSPOSE intrinsic + Copyright 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Tobias Schlüter + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + + +#if defined (HAVE_GFC_INTEGER_16) + +extern void transpose_i16 (gfc_array_i16 * const restrict ret, + gfc_array_i16 * const restrict source); +export_proto(transpose_i16); + +void +transpose_i16 (gfc_array_i16 * const restrict ret, + gfc_array_i16 * const restrict source) +{ + /* r.* indicates the return array. */ + index_type rxstride, rystride; + GFC_INTEGER_16 * restrict rptr; + /* s.* indicates the source array. */ + index_type sxstride, systride; + const GFC_INTEGER_16 *sptr; + + index_type xcount, ycount; + index_type x, y; + + assert (GFC_DESCRIPTOR_RANK (source) == 2); + + if (ret->data == NULL) + { + assert (GFC_DESCRIPTOR_RANK (ret) == 2); + assert (ret->dtype == source->dtype); + + ret->dim[0].lbound = 0; + ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound; + ret->dim[0].stride = 1; + + ret->dim[1].lbound = 0; + ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound; + ret->dim[1].stride = ret->dim[0].ubound+1; + + ret->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * size0 ((array_t *) ret)); + ret->offset = 0; + } else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, src_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + src_extent = source->dim[1].ubound + 1 - source->dim[1].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 1: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + ret_extent = ret->dim[1].ubound + 1 - ret->dim[1].lbound; + src_extent = source->dim[0].ubound + 1 - source->dim[0].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 2: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + } + + sxstride = source->dim[0].stride; + systride = source->dim[1].stride; + xcount = source->dim[0].ubound + 1 - source->dim[0].lbound; + ycount = source->dim[1].ubound + 1 - source->dim[1].lbound; + + rxstride = ret->dim[0].stride; + rystride = ret->dim[1].stride; + + rptr = ret->data; + sptr = source->data; + + for (y=0; y < ycount; y++) + { + for (x=0; x < xcount; x++) + { + *rptr = *sptr; + + sptr += sxstride; + rptr += rystride; + } + sptr += systride - (sxstride * xcount); + rptr += rxstride - (rystride * xcount); + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_i4.c new file mode 100644 index 0000000000..f835a39aa4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_i4.c @@ -0,0 +1,116 @@ +/* Implementation of the TRANSPOSE intrinsic + Copyright 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Tobias Schlüter + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + + +#if defined (HAVE_GFC_INTEGER_4) + +extern void transpose_i4 (gfc_array_i4 * const restrict ret, + gfc_array_i4 * const restrict source); +export_proto(transpose_i4); + +void +transpose_i4 (gfc_array_i4 * const restrict ret, + gfc_array_i4 * const restrict source) +{ + /* r.* indicates the return array. */ + index_type rxstride, rystride; + GFC_INTEGER_4 * restrict rptr; + /* s.* indicates the source array. */ + index_type sxstride, systride; + const GFC_INTEGER_4 *sptr; + + index_type xcount, ycount; + index_type x, y; + + assert (GFC_DESCRIPTOR_RANK (source) == 2); + + if (ret->data == NULL) + { + assert (GFC_DESCRIPTOR_RANK (ret) == 2); + assert (ret->dtype == source->dtype); + + ret->dim[0].lbound = 0; + ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound; + ret->dim[0].stride = 1; + + ret->dim[1].lbound = 0; + ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound; + ret->dim[1].stride = ret->dim[0].ubound+1; + + ret->data = internal_malloc_size (sizeof (GFC_INTEGER_4) * size0 ((array_t *) ret)); + ret->offset = 0; + } else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, src_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + src_extent = source->dim[1].ubound + 1 - source->dim[1].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 1: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + ret_extent = ret->dim[1].ubound + 1 - ret->dim[1].lbound; + src_extent = source->dim[0].ubound + 1 - source->dim[0].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 2: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + } + + sxstride = source->dim[0].stride; + systride = source->dim[1].stride; + xcount = source->dim[0].ubound + 1 - source->dim[0].lbound; + ycount = source->dim[1].ubound + 1 - source->dim[1].lbound; + + rxstride = ret->dim[0].stride; + rystride = ret->dim[1].stride; + + rptr = ret->data; + sptr = source->data; + + for (y=0; y < ycount; y++) + { + for (x=0; x < xcount; x++) + { + *rptr = *sptr; + + sptr += sxstride; + rptr += rystride; + } + sptr += systride - (sxstride * xcount); + rptr += rxstride - (rystride * xcount); + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_i8.c new file mode 100644 index 0000000000..a6b6333dae --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_i8.c @@ -0,0 +1,116 @@ +/* Implementation of the TRANSPOSE intrinsic + Copyright 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Tobias Schlüter + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + + +#if defined (HAVE_GFC_INTEGER_8) + +extern void transpose_i8 (gfc_array_i8 * const restrict ret, + gfc_array_i8 * const restrict source); +export_proto(transpose_i8); + +void +transpose_i8 (gfc_array_i8 * const restrict ret, + gfc_array_i8 * const restrict source) +{ + /* r.* indicates the return array. */ + index_type rxstride, rystride; + GFC_INTEGER_8 * restrict rptr; + /* s.* indicates the source array. */ + index_type sxstride, systride; + const GFC_INTEGER_8 *sptr; + + index_type xcount, ycount; + index_type x, y; + + assert (GFC_DESCRIPTOR_RANK (source) == 2); + + if (ret->data == NULL) + { + assert (GFC_DESCRIPTOR_RANK (ret) == 2); + assert (ret->dtype == source->dtype); + + ret->dim[0].lbound = 0; + ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound; + ret->dim[0].stride = 1; + + ret->dim[1].lbound = 0; + ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound; + ret->dim[1].stride = ret->dim[0].ubound+1; + + ret->data = internal_malloc_size (sizeof (GFC_INTEGER_8) * size0 ((array_t *) ret)); + ret->offset = 0; + } else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, src_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + src_extent = source->dim[1].ubound + 1 - source->dim[1].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 1: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + ret_extent = ret->dim[1].ubound + 1 - ret->dim[1].lbound; + src_extent = source->dim[0].ubound + 1 - source->dim[0].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 2: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + } + + sxstride = source->dim[0].stride; + systride = source->dim[1].stride; + xcount = source->dim[0].ubound + 1 - source->dim[0].lbound; + ycount = source->dim[1].ubound + 1 - source->dim[1].lbound; + + rxstride = ret->dim[0].stride; + rystride = ret->dim[1].stride; + + rptr = ret->data; + sptr = source->data; + + for (y=0; y < ycount; y++) + { + for (x=0; x < xcount; x++) + { + *rptr = *sptr; + + sptr += sxstride; + rptr += rystride; + } + sptr += systride - (sxstride * xcount); + rptr += rxstride - (rystride * xcount); + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r10.c new file mode 100644 index 0000000000..c58ffa20dc --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r10.c @@ -0,0 +1,116 @@ +/* Implementation of the TRANSPOSE intrinsic + Copyright 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Tobias Schlüter + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + + +#if defined (HAVE_GFC_REAL_10) + +extern void transpose_r10 (gfc_array_r10 * const restrict ret, + gfc_array_r10 * const restrict source); +export_proto(transpose_r10); + +void +transpose_r10 (gfc_array_r10 * const restrict ret, + gfc_array_r10 * const restrict source) +{ + /* r.* indicates the return array. */ + index_type rxstride, rystride; + GFC_REAL_10 * restrict rptr; + /* s.* indicates the source array. */ + index_type sxstride, systride; + const GFC_REAL_10 *sptr; + + index_type xcount, ycount; + index_type x, y; + + assert (GFC_DESCRIPTOR_RANK (source) == 2); + + if (ret->data == NULL) + { + assert (GFC_DESCRIPTOR_RANK (ret) == 2); + assert (ret->dtype == source->dtype); + + ret->dim[0].lbound = 0; + ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound; + ret->dim[0].stride = 1; + + ret->dim[1].lbound = 0; + ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound; + ret->dim[1].stride = ret->dim[0].ubound+1; + + ret->data = internal_malloc_size (sizeof (GFC_REAL_10) * size0 ((array_t *) ret)); + ret->offset = 0; + } else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, src_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + src_extent = source->dim[1].ubound + 1 - source->dim[1].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 1: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + ret_extent = ret->dim[1].ubound + 1 - ret->dim[1].lbound; + src_extent = source->dim[0].ubound + 1 - source->dim[0].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 2: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + } + + sxstride = source->dim[0].stride; + systride = source->dim[1].stride; + xcount = source->dim[0].ubound + 1 - source->dim[0].lbound; + ycount = source->dim[1].ubound + 1 - source->dim[1].lbound; + + rxstride = ret->dim[0].stride; + rystride = ret->dim[1].stride; + + rptr = ret->data; + sptr = source->data; + + for (y=0; y < ycount; y++) + { + for (x=0; x < xcount; x++) + { + *rptr = *sptr; + + sptr += sxstride; + rptr += rystride; + } + sptr += systride - (sxstride * xcount); + rptr += rxstride - (rystride * xcount); + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r16.c new file mode 100644 index 0000000000..5b5915e976 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r16.c @@ -0,0 +1,116 @@ +/* Implementation of the TRANSPOSE intrinsic + Copyright 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Tobias Schlüter + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + + +#if defined (HAVE_GFC_REAL_16) + +extern void transpose_r16 (gfc_array_r16 * const restrict ret, + gfc_array_r16 * const restrict source); +export_proto(transpose_r16); + +void +transpose_r16 (gfc_array_r16 * const restrict ret, + gfc_array_r16 * const restrict source) +{ + /* r.* indicates the return array. */ + index_type rxstride, rystride; + GFC_REAL_16 * restrict rptr; + /* s.* indicates the source array. */ + index_type sxstride, systride; + const GFC_REAL_16 *sptr; + + index_type xcount, ycount; + index_type x, y; + + assert (GFC_DESCRIPTOR_RANK (source) == 2); + + if (ret->data == NULL) + { + assert (GFC_DESCRIPTOR_RANK (ret) == 2); + assert (ret->dtype == source->dtype); + + ret->dim[0].lbound = 0; + ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound; + ret->dim[0].stride = 1; + + ret->dim[1].lbound = 0; + ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound; + ret->dim[1].stride = ret->dim[0].ubound+1; + + ret->data = internal_malloc_size (sizeof (GFC_REAL_16) * size0 ((array_t *) ret)); + ret->offset = 0; + } else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, src_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + src_extent = source->dim[1].ubound + 1 - source->dim[1].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 1: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + ret_extent = ret->dim[1].ubound + 1 - ret->dim[1].lbound; + src_extent = source->dim[0].ubound + 1 - source->dim[0].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 2: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + } + + sxstride = source->dim[0].stride; + systride = source->dim[1].stride; + xcount = source->dim[0].ubound + 1 - source->dim[0].lbound; + ycount = source->dim[1].ubound + 1 - source->dim[1].lbound; + + rxstride = ret->dim[0].stride; + rystride = ret->dim[1].stride; + + rptr = ret->data; + sptr = source->data; + + for (y=0; y < ycount; y++) + { + for (x=0; x < xcount; x++) + { + *rptr = *sptr; + + sptr += sxstride; + rptr += rystride; + } + sptr += systride - (sxstride * xcount); + rptr += rxstride - (rystride * xcount); + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r4.c new file mode 100644 index 0000000000..6cff009790 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r4.c @@ -0,0 +1,116 @@ +/* Implementation of the TRANSPOSE intrinsic + Copyright 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Tobias Schlüter + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + + +#if defined (HAVE_GFC_REAL_4) + +extern void transpose_r4 (gfc_array_r4 * const restrict ret, + gfc_array_r4 * const restrict source); +export_proto(transpose_r4); + +void +transpose_r4 (gfc_array_r4 * const restrict ret, + gfc_array_r4 * const restrict source) +{ + /* r.* indicates the return array. */ + index_type rxstride, rystride; + GFC_REAL_4 * restrict rptr; + /* s.* indicates the source array. */ + index_type sxstride, systride; + const GFC_REAL_4 *sptr; + + index_type xcount, ycount; + index_type x, y; + + assert (GFC_DESCRIPTOR_RANK (source) == 2); + + if (ret->data == NULL) + { + assert (GFC_DESCRIPTOR_RANK (ret) == 2); + assert (ret->dtype == source->dtype); + + ret->dim[0].lbound = 0; + ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound; + ret->dim[0].stride = 1; + + ret->dim[1].lbound = 0; + ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound; + ret->dim[1].stride = ret->dim[0].ubound+1; + + ret->data = internal_malloc_size (sizeof (GFC_REAL_4) * size0 ((array_t *) ret)); + ret->offset = 0; + } else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, src_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + src_extent = source->dim[1].ubound + 1 - source->dim[1].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 1: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + ret_extent = ret->dim[1].ubound + 1 - ret->dim[1].lbound; + src_extent = source->dim[0].ubound + 1 - source->dim[0].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 2: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + } + + sxstride = source->dim[0].stride; + systride = source->dim[1].stride; + xcount = source->dim[0].ubound + 1 - source->dim[0].lbound; + ycount = source->dim[1].ubound + 1 - source->dim[1].lbound; + + rxstride = ret->dim[0].stride; + rystride = ret->dim[1].stride; + + rptr = ret->data; + sptr = source->data; + + for (y=0; y < ycount; y++) + { + for (x=0; x < xcount; x++) + { + *rptr = *sptr; + + sptr += sxstride; + rptr += rystride; + } + sptr += systride - (sxstride * xcount); + rptr += rxstride - (rystride * xcount); + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r8.c new file mode 100644 index 0000000000..e66a32c736 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r8.c @@ -0,0 +1,116 @@ +/* Implementation of the TRANSPOSE intrinsic + Copyright 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Tobias Schlüter + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + + +#if defined (HAVE_GFC_REAL_8) + +extern void transpose_r8 (gfc_array_r8 * const restrict ret, + gfc_array_r8 * const restrict source); +export_proto(transpose_r8); + +void +transpose_r8 (gfc_array_r8 * const restrict ret, + gfc_array_r8 * const restrict source) +{ + /* r.* indicates the return array. */ + index_type rxstride, rystride; + GFC_REAL_8 * restrict rptr; + /* s.* indicates the source array. */ + index_type sxstride, systride; + const GFC_REAL_8 *sptr; + + index_type xcount, ycount; + index_type x, y; + + assert (GFC_DESCRIPTOR_RANK (source) == 2); + + if (ret->data == NULL) + { + assert (GFC_DESCRIPTOR_RANK (ret) == 2); + assert (ret->dtype == source->dtype); + + ret->dim[0].lbound = 0; + ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound; + ret->dim[0].stride = 1; + + ret->dim[1].lbound = 0; + ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound; + ret->dim[1].stride = ret->dim[0].ubound+1; + + ret->data = internal_malloc_size (sizeof (GFC_REAL_8) * size0 ((array_t *) ret)); + ret->offset = 0; + } else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, src_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + src_extent = source->dim[1].ubound + 1 - source->dim[1].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 1: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + ret_extent = ret->dim[1].ubound + 1 - ret->dim[1].lbound; + src_extent = source->dim[0].ubound + 1 - source->dim[0].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 2: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + } + + sxstride = source->dim[0].stride; + systride = source->dim[1].stride; + xcount = source->dim[0].ubound + 1 - source->dim[0].lbound; + ycount = source->dim[1].ubound + 1 - source->dim[1].lbound; + + rxstride = ret->dim[0].stride; + rystride = ret->dim[1].stride; + + rptr = ret->data; + sptr = source->data; + + for (y=0; y < ycount; y++) + { + for (x=0; x < xcount; x++) + { + *rptr = *sptr; + + sptr += sxstride; + rptr += rystride; + } + sptr += systride - (sxstride * xcount); + rptr += rxstride - (rystride * xcount); + } +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c10.c new file mode 100644 index 0000000000..91ba77269d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c10.c @@ -0,0 +1,333 @@ +/* Specific implementation of the UNPACK intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + unpack_generic.c by Paul Brook . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_10) + +void +unpack0_c10 (gfc_array_c10 *ret, const gfc_array_c10 *vector, + const gfc_array_l1 *mask, const GFC_COMPLEX_10 *fptr) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_COMPLEX_10 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_COMPLEX_10 *vptr; + /* Value for field, this is constant. */ + const GFC_COMPLEX_10 fval = *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_COMPLEX_10)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = fval; + } + /* Advance to the next element. */ + rptr += rstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + mptr += mstride[n]; + } + } + } +} + +void +unpack1_c10 (gfc_array_c10 *ret, const gfc_array_c10 *vector, + const gfc_array_l1 *mask, const gfc_array_c10 *field) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_COMPLEX_10 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_COMPLEX_10 *vptr; + /* f.* indicates the field array. */ + index_type fstride[GFC_MAX_DIMENSIONS]; + index_type fstride0; + const GFC_COMPLEX_10 *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_COMPLEX_10)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (fstride[0] == 0) + fstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + fstride0 = fstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + fptr = field->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = *fptr; + } + /* Advance to the next element. */ + rptr += rstride0; + fptr += fstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + fptr -= fstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + fptr += fstride[n]; + mptr += mstride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c16.c new file mode 100644 index 0000000000..0df76e41b1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c16.c @@ -0,0 +1,333 @@ +/* Specific implementation of the UNPACK intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + unpack_generic.c by Paul Brook . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_16) + +void +unpack0_c16 (gfc_array_c16 *ret, const gfc_array_c16 *vector, + const gfc_array_l1 *mask, const GFC_COMPLEX_16 *fptr) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_COMPLEX_16 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_COMPLEX_16 *vptr; + /* Value for field, this is constant. */ + const GFC_COMPLEX_16 fval = *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_COMPLEX_16)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = fval; + } + /* Advance to the next element. */ + rptr += rstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + mptr += mstride[n]; + } + } + } +} + +void +unpack1_c16 (gfc_array_c16 *ret, const gfc_array_c16 *vector, + const gfc_array_l1 *mask, const gfc_array_c16 *field) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_COMPLEX_16 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_COMPLEX_16 *vptr; + /* f.* indicates the field array. */ + index_type fstride[GFC_MAX_DIMENSIONS]; + index_type fstride0; + const GFC_COMPLEX_16 *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_COMPLEX_16)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (fstride[0] == 0) + fstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + fstride0 = fstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + fptr = field->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = *fptr; + } + /* Advance to the next element. */ + rptr += rstride0; + fptr += fstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + fptr -= fstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + fptr += fstride[n]; + mptr += mstride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c4.c new file mode 100644 index 0000000000..f112388328 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c4.c @@ -0,0 +1,333 @@ +/* Specific implementation of the UNPACK intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + unpack_generic.c by Paul Brook . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_4) + +void +unpack0_c4 (gfc_array_c4 *ret, const gfc_array_c4 *vector, + const gfc_array_l1 *mask, const GFC_COMPLEX_4 *fptr) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_COMPLEX_4 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_COMPLEX_4 *vptr; + /* Value for field, this is constant. */ + const GFC_COMPLEX_4 fval = *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_COMPLEX_4)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = fval; + } + /* Advance to the next element. */ + rptr += rstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + mptr += mstride[n]; + } + } + } +} + +void +unpack1_c4 (gfc_array_c4 *ret, const gfc_array_c4 *vector, + const gfc_array_l1 *mask, const gfc_array_c4 *field) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_COMPLEX_4 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_COMPLEX_4 *vptr; + /* f.* indicates the field array. */ + index_type fstride[GFC_MAX_DIMENSIONS]; + index_type fstride0; + const GFC_COMPLEX_4 *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_COMPLEX_4)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (fstride[0] == 0) + fstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + fstride0 = fstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + fptr = field->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = *fptr; + } + /* Advance to the next element. */ + rptr += rstride0; + fptr += fstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + fptr -= fstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + fptr += fstride[n]; + mptr += mstride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c8.c new file mode 100644 index 0000000000..118f2b6a1a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c8.c @@ -0,0 +1,333 @@ +/* Specific implementation of the UNPACK intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + unpack_generic.c by Paul Brook . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_COMPLEX_8) + +void +unpack0_c8 (gfc_array_c8 *ret, const gfc_array_c8 *vector, + const gfc_array_l1 *mask, const GFC_COMPLEX_8 *fptr) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_COMPLEX_8 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_COMPLEX_8 *vptr; + /* Value for field, this is constant. */ + const GFC_COMPLEX_8 fval = *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_COMPLEX_8)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = fval; + } + /* Advance to the next element. */ + rptr += rstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + mptr += mstride[n]; + } + } + } +} + +void +unpack1_c8 (gfc_array_c8 *ret, const gfc_array_c8 *vector, + const gfc_array_l1 *mask, const gfc_array_c8 *field) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_COMPLEX_8 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_COMPLEX_8 *vptr; + /* f.* indicates the field array. */ + index_type fstride[GFC_MAX_DIMENSIONS]; + index_type fstride0; + const GFC_COMPLEX_8 *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_COMPLEX_8)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (fstride[0] == 0) + fstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + fstride0 = fstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + fptr = field->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = *fptr; + } + /* Advance to the next element. */ + rptr += rstride0; + fptr += fstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + fptr -= fstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + fptr += fstride[n]; + mptr += mstride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i1.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i1.c new file mode 100644 index 0000000000..974fc31972 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i1.c @@ -0,0 +1,333 @@ +/* Specific implementation of the UNPACK intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + unpack_generic.c by Paul Brook . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_1) + +void +unpack0_i1 (gfc_array_i1 *ret, const gfc_array_i1 *vector, + const gfc_array_l1 *mask, const GFC_INTEGER_1 *fptr) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_INTEGER_1 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_INTEGER_1 *vptr; + /* Value for field, this is constant. */ + const GFC_INTEGER_1 fval = *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_INTEGER_1)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = fval; + } + /* Advance to the next element. */ + rptr += rstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + mptr += mstride[n]; + } + } + } +} + +void +unpack1_i1 (gfc_array_i1 *ret, const gfc_array_i1 *vector, + const gfc_array_l1 *mask, const gfc_array_i1 *field) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_INTEGER_1 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_INTEGER_1 *vptr; + /* f.* indicates the field array. */ + index_type fstride[GFC_MAX_DIMENSIONS]; + index_type fstride0; + const GFC_INTEGER_1 *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_INTEGER_1)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (fstride[0] == 0) + fstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + fstride0 = fstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + fptr = field->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = *fptr; + } + /* Advance to the next element. */ + rptr += rstride0; + fptr += fstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + fptr -= fstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + fptr += fstride[n]; + mptr += mstride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i16.c new file mode 100644 index 0000000000..fb1ee8f048 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i16.c @@ -0,0 +1,333 @@ +/* Specific implementation of the UNPACK intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + unpack_generic.c by Paul Brook . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_16) + +void +unpack0_i16 (gfc_array_i16 *ret, const gfc_array_i16 *vector, + const gfc_array_l1 *mask, const GFC_INTEGER_16 *fptr) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_INTEGER_16 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_INTEGER_16 *vptr; + /* Value for field, this is constant. */ + const GFC_INTEGER_16 fval = *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_INTEGER_16)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = fval; + } + /* Advance to the next element. */ + rptr += rstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + mptr += mstride[n]; + } + } + } +} + +void +unpack1_i16 (gfc_array_i16 *ret, const gfc_array_i16 *vector, + const gfc_array_l1 *mask, const gfc_array_i16 *field) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_INTEGER_16 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_INTEGER_16 *vptr; + /* f.* indicates the field array. */ + index_type fstride[GFC_MAX_DIMENSIONS]; + index_type fstride0; + const GFC_INTEGER_16 *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_INTEGER_16)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (fstride[0] == 0) + fstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + fstride0 = fstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + fptr = field->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = *fptr; + } + /* Advance to the next element. */ + rptr += rstride0; + fptr += fstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + fptr -= fstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + fptr += fstride[n]; + mptr += mstride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i2.c new file mode 100644 index 0000000000..ecb4672441 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i2.c @@ -0,0 +1,333 @@ +/* Specific implementation of the UNPACK intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + unpack_generic.c by Paul Brook . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_2) + +void +unpack0_i2 (gfc_array_i2 *ret, const gfc_array_i2 *vector, + const gfc_array_l1 *mask, const GFC_INTEGER_2 *fptr) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_INTEGER_2 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_INTEGER_2 *vptr; + /* Value for field, this is constant. */ + const GFC_INTEGER_2 fval = *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_INTEGER_2)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = fval; + } + /* Advance to the next element. */ + rptr += rstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + mptr += mstride[n]; + } + } + } +} + +void +unpack1_i2 (gfc_array_i2 *ret, const gfc_array_i2 *vector, + const gfc_array_l1 *mask, const gfc_array_i2 *field) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_INTEGER_2 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_INTEGER_2 *vptr; + /* f.* indicates the field array. */ + index_type fstride[GFC_MAX_DIMENSIONS]; + index_type fstride0; + const GFC_INTEGER_2 *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_INTEGER_2)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (fstride[0] == 0) + fstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + fstride0 = fstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + fptr = field->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = *fptr; + } + /* Advance to the next element. */ + rptr += rstride0; + fptr += fstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + fptr -= fstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + fptr += fstride[n]; + mptr += mstride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i4.c new file mode 100644 index 0000000000..cd16e579fb --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i4.c @@ -0,0 +1,333 @@ +/* Specific implementation of the UNPACK intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + unpack_generic.c by Paul Brook . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_4) + +void +unpack0_i4 (gfc_array_i4 *ret, const gfc_array_i4 *vector, + const gfc_array_l1 *mask, const GFC_INTEGER_4 *fptr) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_INTEGER_4 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_INTEGER_4 *vptr; + /* Value for field, this is constant. */ + const GFC_INTEGER_4 fval = *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_INTEGER_4)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = fval; + } + /* Advance to the next element. */ + rptr += rstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + mptr += mstride[n]; + } + } + } +} + +void +unpack1_i4 (gfc_array_i4 *ret, const gfc_array_i4 *vector, + const gfc_array_l1 *mask, const gfc_array_i4 *field) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_INTEGER_4 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_INTEGER_4 *vptr; + /* f.* indicates the field array. */ + index_type fstride[GFC_MAX_DIMENSIONS]; + index_type fstride0; + const GFC_INTEGER_4 *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_INTEGER_4)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (fstride[0] == 0) + fstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + fstride0 = fstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + fptr = field->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = *fptr; + } + /* Advance to the next element. */ + rptr += rstride0; + fptr += fstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + fptr -= fstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + fptr += fstride[n]; + mptr += mstride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i8.c new file mode 100644 index 0000000000..422a11c147 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i8.c @@ -0,0 +1,333 @@ +/* Specific implementation of the UNPACK intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + unpack_generic.c by Paul Brook . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_INTEGER_8) + +void +unpack0_i8 (gfc_array_i8 *ret, const gfc_array_i8 *vector, + const gfc_array_l1 *mask, const GFC_INTEGER_8 *fptr) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_INTEGER_8 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_INTEGER_8 *vptr; + /* Value for field, this is constant. */ + const GFC_INTEGER_8 fval = *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_INTEGER_8)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = fval; + } + /* Advance to the next element. */ + rptr += rstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + mptr += mstride[n]; + } + } + } +} + +void +unpack1_i8 (gfc_array_i8 *ret, const gfc_array_i8 *vector, + const gfc_array_l1 *mask, const gfc_array_i8 *field) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_INTEGER_8 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_INTEGER_8 *vptr; + /* f.* indicates the field array. */ + index_type fstride[GFC_MAX_DIMENSIONS]; + index_type fstride0; + const GFC_INTEGER_8 *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_INTEGER_8)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (fstride[0] == 0) + fstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + fstride0 = fstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + fptr = field->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = *fptr; + } + /* Advance to the next element. */ + rptr += rstride0; + fptr += fstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + fptr -= fstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + fptr += fstride[n]; + mptr += mstride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r10.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r10.c new file mode 100644 index 0000000000..7903a3c94a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r10.c @@ -0,0 +1,333 @@ +/* Specific implementation of the UNPACK intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + unpack_generic.c by Paul Brook . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_10) + +void +unpack0_r10 (gfc_array_r10 *ret, const gfc_array_r10 *vector, + const gfc_array_l1 *mask, const GFC_REAL_10 *fptr) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_REAL_10 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_REAL_10 *vptr; + /* Value for field, this is constant. */ + const GFC_REAL_10 fval = *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_REAL_10)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = fval; + } + /* Advance to the next element. */ + rptr += rstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + mptr += mstride[n]; + } + } + } +} + +void +unpack1_r10 (gfc_array_r10 *ret, const gfc_array_r10 *vector, + const gfc_array_l1 *mask, const gfc_array_r10 *field) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_REAL_10 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_REAL_10 *vptr; + /* f.* indicates the field array. */ + index_type fstride[GFC_MAX_DIMENSIONS]; + index_type fstride0; + const GFC_REAL_10 *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_REAL_10)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (fstride[0] == 0) + fstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + fstride0 = fstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + fptr = field->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = *fptr; + } + /* Advance to the next element. */ + rptr += rstride0; + fptr += fstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + fptr -= fstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + fptr += fstride[n]; + mptr += mstride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r16.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r16.c new file mode 100644 index 0000000000..d84ccca7a1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r16.c @@ -0,0 +1,333 @@ +/* Specific implementation of the UNPACK intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + unpack_generic.c by Paul Brook . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_16) + +void +unpack0_r16 (gfc_array_r16 *ret, const gfc_array_r16 *vector, + const gfc_array_l1 *mask, const GFC_REAL_16 *fptr) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_REAL_16 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_REAL_16 *vptr; + /* Value for field, this is constant. */ + const GFC_REAL_16 fval = *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_REAL_16)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = fval; + } + /* Advance to the next element. */ + rptr += rstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + mptr += mstride[n]; + } + } + } +} + +void +unpack1_r16 (gfc_array_r16 *ret, const gfc_array_r16 *vector, + const gfc_array_l1 *mask, const gfc_array_r16 *field) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_REAL_16 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_REAL_16 *vptr; + /* f.* indicates the field array. */ + index_type fstride[GFC_MAX_DIMENSIONS]; + index_type fstride0; + const GFC_REAL_16 *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_REAL_16)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (fstride[0] == 0) + fstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + fstride0 = fstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + fptr = field->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = *fptr; + } + /* Advance to the next element. */ + rptr += rstride0; + fptr += fstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + fptr -= fstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + fptr += fstride[n]; + mptr += mstride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r4.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r4.c new file mode 100644 index 0000000000..130acbf53a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r4.c @@ -0,0 +1,333 @@ +/* Specific implementation of the UNPACK intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + unpack_generic.c by Paul Brook . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_4) + +void +unpack0_r4 (gfc_array_r4 *ret, const gfc_array_r4 *vector, + const gfc_array_l1 *mask, const GFC_REAL_4 *fptr) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_REAL_4 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_REAL_4 *vptr; + /* Value for field, this is constant. */ + const GFC_REAL_4 fval = *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_REAL_4)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = fval; + } + /* Advance to the next element. */ + rptr += rstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + mptr += mstride[n]; + } + } + } +} + +void +unpack1_r4 (gfc_array_r4 *ret, const gfc_array_r4 *vector, + const gfc_array_l1 *mask, const gfc_array_r4 *field) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_REAL_4 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_REAL_4 *vptr; + /* f.* indicates the field array. */ + index_type fstride[GFC_MAX_DIMENSIONS]; + index_type fstride0; + const GFC_REAL_4 *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_REAL_4)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (fstride[0] == 0) + fstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + fstride0 = fstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + fptr = field->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = *fptr; + } + /* Advance to the next element. */ + rptr += rstride0; + fptr += fstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + fptr -= fstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + fptr += fstride[n]; + mptr += mstride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r8.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r8.c new file mode 100644 index 0000000000..fa809555b0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r8.c @@ -0,0 +1,333 @@ +/* Specific implementation of the UNPACK intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + unpack_generic.c by Paul Brook . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#if defined (HAVE_GFC_REAL_8) + +void +unpack0_r8 (gfc_array_r8 *ret, const gfc_array_r8 *vector, + const gfc_array_l1 *mask, const GFC_REAL_8 *fptr) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_REAL_8 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_REAL_8 *vptr; + /* Value for field, this is constant. */ + const GFC_REAL_8 fval = *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_REAL_8)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = fval; + } + /* Advance to the next element. */ + rptr += rstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + mptr += mstride[n]; + } + } + } +} + +void +unpack1_r8 (gfc_array_r8 *ret, const gfc_array_r8 *vector, + const gfc_array_l1 *mask, const gfc_array_r8 *field) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + GFC_REAL_8 * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + GFC_REAL_8 *vptr; + /* f.* indicates the field array. */ + index_type fstride[GFC_MAX_DIMENSIONS]; + index_type fstride0; + const GFC_REAL_8 *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof (GFC_REAL_8)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (fstride[0] == 0) + fstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + fstride0 = fstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + fptr = field->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = *fptr; + } + /* Advance to the next element. */ + rptr += rstride0; + fptr += fstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + fptr -= fstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + fptr += fstride[n]; + mptr += mstride[n]; + } + } + } +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/gfortran.map b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/gfortran.map new file mode 100644 index 0000000000..93973d5b33 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/gfortran.map @@ -0,0 +1,1223 @@ +GFORTRAN_1.0 { + global: + _gfortran_abort; + _gfortran_access_func; + _gfortran_adjustl; + _gfortran_adjustr; + _gfortran_alarm_sub_i4; + _gfortran_alarm_sub_i8; + _gfortran_alarm_sub_int_i4; + _gfortran_alarm_sub_int_i8; + _gfortran_all_l1; + _gfortran_all_l16; + _gfortran_all_l2; + _gfortran_all_l4; + _gfortran_all_l8; + _gfortran_any_l1; + _gfortran_any_l16; + _gfortran_any_l2; + _gfortran_any_l4; + _gfortran_any_l8; + _gfortran_arandom_r10; + _gfortran_arandom_r16; + _gfortran_arandom_r4; + _gfortran_arandom_r8; + _gfortran_associated; + _gfortran_chdir_i4; + _gfortran_chdir_i4_sub; + _gfortran_chdir_i8; + _gfortran_chdir_i8_sub; + _gfortran_chmod_func; + _gfortran_chmod_i4_sub; + _gfortran_chmod_i8_sub; + _gfortran_compare_string; + _gfortran_concat_string; + _gfortran_count_1_l; + _gfortran_count_16_l; + _gfortran_count_2_l; + _gfortran_count_4_l; + _gfortran_count_8_l; + _gfortran_cpu_time_10; + _gfortran_cpu_time_16; + _gfortran_cpu_time_4; + _gfortran_cpu_time_8; + _gfortran_cshift0_1; + _gfortran_cshift0_1_char; + _gfortran_cshift0_2; + _gfortran_cshift0_2_char; + _gfortran_cshift0_4; + _gfortran_cshift0_4_char; + _gfortran_cshift0_8; + _gfortran_cshift0_8_char; + _gfortran_cshift1_16; + _gfortran_cshift1_16_char; + _gfortran_cshift1_4; + _gfortran_cshift1_4_char; + _gfortran_cshift1_8; + _gfortran_cshift1_8_char; + _gfortran_ctime; + _gfortran_ctime_sub; + _gfortran_date_and_time; + _gfortran_dtime; + _gfortran_dtime_sub; + _gfortran_eoshift0_1; + _gfortran_eoshift0_1_char; + _gfortran_eoshift0_2; + _gfortran_eoshift0_2_char; + _gfortran_eoshift0_4; + _gfortran_eoshift0_4_char; + _gfortran_eoshift0_8; + _gfortran_eoshift0_8_char; + _gfortran_eoshift1_16; + _gfortran_eoshift1_16_char; + _gfortran_eoshift1_4; + _gfortran_eoshift1_4_char; + _gfortran_eoshift1_8; + _gfortran_eoshift1_8_char; + _gfortran_eoshift2_1; + _gfortran_eoshift2_1_char; + _gfortran_eoshift2_2; + _gfortran_eoshift2_2_char; + _gfortran_eoshift2_4; + _gfortran_eoshift2_4_char; + _gfortran_eoshift2_8; + _gfortran_eoshift2_8_char; + _gfortran_eoshift3_16; + _gfortran_eoshift3_16_char; + _gfortran_eoshift3_4; + _gfortran_eoshift3_4_char; + _gfortran_eoshift3_8; + _gfortran_eoshift3_8_char; + _gfortran_etime; + _gfortran_etime_sub; + _gfortran_exit_i4; + _gfortran_exit_i8; + _gfortran_exponent_r10; + _gfortran_exponent_r16; + _gfortran_exponent_r4; + _gfortran_exponent_r8; + _gfortran_fdate; + _gfortran_fdate_sub; + _gfortran_fget; + _gfortran_fgetc; + _gfortran_fgetc_i1_sub; + _gfortran_fgetc_i2_sub; + _gfortran_fgetc_i4_sub; + _gfortran_fgetc_i8_sub; + _gfortran_fget_i1_sub; + _gfortran_fget_i2_sub; + _gfortran_fget_i4_sub; + _gfortran_fget_i8_sub; + _gfortran_flush_i4; + _gfortran_flush_i8; + _gfortran_fnum_i4; + _gfortran_fnum_i8; + _gfortran_fput; + _gfortran_fputc; + _gfortran_fputc_i1_sub; + _gfortran_fputc_i2_sub; + _gfortran_fputc_i4_sub; + _gfortran_fputc_i8_sub; + _gfortran_fput_i1_sub; + _gfortran_fput_i2_sub; + _gfortran_fput_i4_sub; + _gfortran_fput_i8_sub; + _gfortran_fraction_r10; + _gfortran_fraction_r16; + _gfortran_fraction_r4; + _gfortran_fraction_r8; + _gfortran_free; + _gfortran_fseek_sub; + _gfortran_fstat_i4; + _gfortran_fstat_i4_sub; + _gfortran_fstat_i8; + _gfortran_fstat_i8_sub; + _gfortran_ftell; + _gfortran_ftell_i1_sub; + _gfortran_ftell_i2_sub; + _gfortran_ftell_i4_sub; + _gfortran_ftell_i8_sub; + _gfortran_generate_error; + _gfortran_gerror; + _gfortran_getarg_i4; + _gfortran_getarg_i8; + _gfortran_get_command_argument_i4; + _gfortran_get_command_argument_i8; + _gfortran_get_command_i4; + _gfortran_get_command_i8; + _gfortran_getcwd; + _gfortran_getcwd_i4_sub; + _gfortran_getcwd_i8_sub; + _gfortran_getenv; + _gfortran_get_environment_variable_i4; + _gfortran_get_environment_variable_i8; + _gfortran_getgid; + _gfortran_getlog; + _gfortran_getpid; + _gfortran_getuid; + _gfortran_gmtime_i4; + _gfortran_gmtime_i8; + _gfortran_hostnm; + _gfortran_hostnm_i4_sub; + _gfortran_hostnm_i8_sub; + _gfortran_iargc; + _gfortran_idate_i4; + _gfortran_idate_i8; + _gfortran_ierrno_i4; + _gfortran_ierrno_i8; + _gfortran_internal_pack; + _gfortran_internal_unpack; + _gfortran_irand; + _gfortran_isatty_l4; + _gfortran_isatty_l8; + _gfortran_ishftc16; + _gfortran_ishftc4; + _gfortran_ishftc8; + _gfortran_itime_i4; + _gfortran_itime_i8; + _gfortran_kill_i4; + _gfortran_kill_i4_sub; + _gfortran_kill_i8; + _gfortran_kill_i8_sub; + _gfortran_link_i4; + _gfortran_link_i4_sub; + _gfortran_link_i8; + _gfortran_link_i8_sub; + _gfortran_lstat_i4; + _gfortran_lstat_i4_sub; + _gfortran_lstat_i8; + _gfortran_lstat_i8_sub; + _gfortran_ltime_i4; + _gfortran_ltime_i8; + _gfortran_malloc; + _gfortran_matmul_c10; + _gfortran_matmul_c16; + _gfortran_matmul_c4; + _gfortran_matmul_c8; + _gfortran_matmul_i1; + _gfortran_matmul_i16; + _gfortran_matmul_i2; + _gfortran_matmul_i4; + _gfortran_matmul_i8; + _gfortran_matmul_l16; + _gfortran_matmul_l4; + _gfortran_matmul_l8; + _gfortran_matmul_r10; + _gfortran_matmul_r16; + _gfortran_matmul_r4; + _gfortran_matmul_r8; + _gfortran_maxloc0_16_i1; + _gfortran_maxloc0_16_i16; + _gfortran_maxloc0_16_i2; + _gfortran_maxloc0_16_i4; + _gfortran_maxloc0_16_i8; + _gfortran_maxloc0_16_r10; + _gfortran_maxloc0_16_r16; + _gfortran_maxloc0_16_r4; + _gfortran_maxloc0_16_r8; + _gfortran_maxloc0_4_i1; + _gfortran_maxloc0_4_i16; + _gfortran_maxloc0_4_i2; + _gfortran_maxloc0_4_i4; + _gfortran_maxloc0_4_i8; + _gfortran_maxloc0_4_r10; + _gfortran_maxloc0_4_r16; + _gfortran_maxloc0_4_r4; + _gfortran_maxloc0_4_r8; + _gfortran_maxloc0_8_i1; + _gfortran_maxloc0_8_i16; + _gfortran_maxloc0_8_i2; + _gfortran_maxloc0_8_i4; + _gfortran_maxloc0_8_i8; + _gfortran_maxloc0_8_r10; + _gfortran_maxloc0_8_r16; + _gfortran_maxloc0_8_r4; + _gfortran_maxloc0_8_r8; + _gfortran_maxloc1_16_i1; + _gfortran_maxloc1_16_i16; + _gfortran_maxloc1_16_i2; + _gfortran_maxloc1_16_i4; + _gfortran_maxloc1_16_i8; + _gfortran_maxloc1_16_r10; + _gfortran_maxloc1_16_r16; + _gfortran_maxloc1_16_r4; + _gfortran_maxloc1_16_r8; + _gfortran_maxloc1_4_i1; + _gfortran_maxloc1_4_i16; + _gfortran_maxloc1_4_i2; + _gfortran_maxloc1_4_i4; + _gfortran_maxloc1_4_i8; + _gfortran_maxloc1_4_r10; + _gfortran_maxloc1_4_r16; + _gfortran_maxloc1_4_r4; + _gfortran_maxloc1_4_r8; + _gfortran_maxloc1_8_i1; + _gfortran_maxloc1_8_i16; + _gfortran_maxloc1_8_i2; + _gfortran_maxloc1_8_i4; + _gfortran_maxloc1_8_i8; + _gfortran_maxloc1_8_r10; + _gfortran_maxloc1_8_r16; + _gfortran_maxloc1_8_r4; + _gfortran_maxloc1_8_r8; + _gfortran_maxval_i1; + _gfortran_maxval_i16; + _gfortran_maxval_i2; + _gfortran_maxval_i4; + _gfortran_maxval_i8; + _gfortran_maxval_r10; + _gfortran_maxval_r16; + _gfortran_maxval_r4; + _gfortran_maxval_r8; + _gfortran_mclock; + _gfortran_mclock8; + _gfortran_minloc0_16_i1; + _gfortran_minloc0_16_i16; + _gfortran_minloc0_16_i2; + _gfortran_minloc0_16_i4; + _gfortran_minloc0_16_i8; + _gfortran_minloc0_16_r10; + _gfortran_minloc0_16_r16; + _gfortran_minloc0_16_r4; + _gfortran_minloc0_16_r8; + _gfortran_minloc0_4_i1; + _gfortran_minloc0_4_i16; + _gfortran_minloc0_4_i2; + _gfortran_minloc0_4_i4; + _gfortran_minloc0_4_i8; + _gfortran_minloc0_4_r10; + _gfortran_minloc0_4_r16; + _gfortran_minloc0_4_r4; + _gfortran_minloc0_4_r8; + _gfortran_minloc0_8_i1; + _gfortran_minloc0_8_i16; + _gfortran_minloc0_8_i2; + _gfortran_minloc0_8_i4; + _gfortran_minloc0_8_i8; + _gfortran_minloc0_8_r10; + _gfortran_minloc0_8_r16; + _gfortran_minloc0_8_r4; + _gfortran_minloc0_8_r8; + _gfortran_minloc1_16_i1; + _gfortran_minloc1_16_i16; + _gfortran_minloc1_16_i2; + _gfortran_minloc1_16_i4; + _gfortran_minloc1_16_i8; + _gfortran_minloc1_16_r10; + _gfortran_minloc1_16_r16; + _gfortran_minloc1_16_r4; + _gfortran_minloc1_16_r8; + _gfortran_minloc1_4_i1; + _gfortran_minloc1_4_i16; + _gfortran_minloc1_4_i2; + _gfortran_minloc1_4_i4; + _gfortran_minloc1_4_i8; + _gfortran_minloc1_4_r10; + _gfortran_minloc1_4_r16; + _gfortran_minloc1_4_r4; + _gfortran_minloc1_4_r8; + _gfortran_minloc1_8_i1; + _gfortran_minloc1_8_i16; + _gfortran_minloc1_8_i2; + _gfortran_minloc1_8_i4; + _gfortran_minloc1_8_i8; + _gfortran_minloc1_8_r10; + _gfortran_minloc1_8_r16; + _gfortran_minloc1_8_r4; + _gfortran_minloc1_8_r8; + _gfortran_minval_i1; + _gfortran_minval_i16; + _gfortran_minval_i2; + _gfortran_minval_i4; + _gfortran_minval_i8; + _gfortran_minval_r10; + _gfortran_minval_r16; + _gfortran_minval_r4; + _gfortran_minval_r8; + _gfortran_mmaxloc0_16_i1; + _gfortran_mmaxloc0_16_i16; + _gfortran_mmaxloc0_16_i2; + _gfortran_mmaxloc0_16_i4; + _gfortran_mmaxloc0_16_i8; + _gfortran_mmaxloc0_16_r10; + _gfortran_mmaxloc0_16_r16; + _gfortran_mmaxloc0_16_r4; + _gfortran_mmaxloc0_16_r8; + _gfortran_mmaxloc0_4_i1; + _gfortran_mmaxloc0_4_i16; + _gfortran_mmaxloc0_4_i2; + _gfortran_mmaxloc0_4_i4; + _gfortran_mmaxloc0_4_i8; + _gfortran_mmaxloc0_4_r10; + _gfortran_mmaxloc0_4_r16; + _gfortran_mmaxloc0_4_r4; + _gfortran_mmaxloc0_4_r8; + _gfortran_mmaxloc0_8_i1; + _gfortran_mmaxloc0_8_i16; + _gfortran_mmaxloc0_8_i2; + _gfortran_mmaxloc0_8_i4; + _gfortran_mmaxloc0_8_i8; + _gfortran_mmaxloc0_8_r10; + _gfortran_mmaxloc0_8_r16; + _gfortran_mmaxloc0_8_r4; + _gfortran_mmaxloc0_8_r8; + _gfortran_mmaxloc1_16_i1; + _gfortran_mmaxloc1_16_i16; + _gfortran_mmaxloc1_16_i2; + _gfortran_mmaxloc1_16_i4; + _gfortran_mmaxloc1_16_i8; + _gfortran_mmaxloc1_16_r10; + _gfortran_mmaxloc1_16_r16; + _gfortran_mmaxloc1_16_r4; + _gfortran_mmaxloc1_16_r8; + _gfortran_mmaxloc1_4_i1; + _gfortran_mmaxloc1_4_i16; + _gfortran_mmaxloc1_4_i2; + _gfortran_mmaxloc1_4_i4; + _gfortran_mmaxloc1_4_i8; + _gfortran_mmaxloc1_4_r10; + _gfortran_mmaxloc1_4_r16; + _gfortran_mmaxloc1_4_r4; + _gfortran_mmaxloc1_4_r8; + _gfortran_mmaxloc1_8_i1; + _gfortran_mmaxloc1_8_i16; + _gfortran_mmaxloc1_8_i2; + _gfortran_mmaxloc1_8_i4; + _gfortran_mmaxloc1_8_i8; + _gfortran_mmaxloc1_8_r10; + _gfortran_mmaxloc1_8_r16; + _gfortran_mmaxloc1_8_r4; + _gfortran_mmaxloc1_8_r8; + _gfortran_mmaxval_i1; + _gfortran_mmaxval_i16; + _gfortran_mmaxval_i2; + _gfortran_mmaxval_i4; + _gfortran_mmaxval_i8; + _gfortran_mmaxval_r10; + _gfortran_mmaxval_r16; + _gfortran_mmaxval_r4; + _gfortran_mmaxval_r8; + _gfortran_mminloc0_16_i1; + _gfortran_mminloc0_16_i16; + _gfortran_mminloc0_16_i2; + _gfortran_mminloc0_16_i4; + _gfortran_mminloc0_16_i8; + _gfortran_mminloc0_16_r10; + _gfortran_mminloc0_16_r16; + _gfortran_mminloc0_16_r4; + _gfortran_mminloc0_16_r8; + _gfortran_mminloc0_4_i1; + _gfortran_mminloc0_4_i16; + _gfortran_mminloc0_4_i2; + _gfortran_mminloc0_4_i4; + _gfortran_mminloc0_4_i8; + _gfortran_mminloc0_4_r10; + _gfortran_mminloc0_4_r16; + _gfortran_mminloc0_4_r4; + _gfortran_mminloc0_4_r8; + _gfortran_mminloc0_8_i1; + _gfortran_mminloc0_8_i16; + _gfortran_mminloc0_8_i2; + _gfortran_mminloc0_8_i4; + _gfortran_mminloc0_8_i8; + _gfortran_mminloc0_8_r10; + _gfortran_mminloc0_8_r16; + _gfortran_mminloc0_8_r4; + _gfortran_mminloc0_8_r8; + _gfortran_mminloc1_16_i1; + _gfortran_mminloc1_16_i16; + _gfortran_mminloc1_16_i2; + _gfortran_mminloc1_16_i4; + _gfortran_mminloc1_16_i8; + _gfortran_mminloc1_16_r10; + _gfortran_mminloc1_16_r16; + _gfortran_mminloc1_16_r4; + _gfortran_mminloc1_16_r8; + _gfortran_mminloc1_4_i1; + _gfortran_mminloc1_4_i16; + _gfortran_mminloc1_4_i2; + _gfortran_mminloc1_4_i4; + _gfortran_mminloc1_4_i8; + _gfortran_mminloc1_4_r10; + _gfortran_mminloc1_4_r16; + _gfortran_mminloc1_4_r4; + _gfortran_mminloc1_4_r8; + _gfortran_mminloc1_8_i1; + _gfortran_mminloc1_8_i16; + _gfortran_mminloc1_8_i2; + _gfortran_mminloc1_8_i4; + _gfortran_mminloc1_8_i8; + _gfortran_mminloc1_8_r10; + _gfortran_mminloc1_8_r16; + _gfortran_mminloc1_8_r4; + _gfortran_mminloc1_8_r8; + _gfortran_mminval_i1; + _gfortran_mminval_i16; + _gfortran_mminval_i2; + _gfortran_mminval_i4; + _gfortran_mminval_i8; + _gfortran_mminval_r10; + _gfortran_mminval_r16; + _gfortran_mminval_r4; + _gfortran_mminval_r8; + _gfortran_move_alloc; + _gfortran_move_alloc_c; + _gfortran_mproduct_c10; + _gfortran_mproduct_c16; + _gfortran_mproduct_c4; + _gfortran_mproduct_c8; + _gfortran_mproduct_i1; + _gfortran_mproduct_i16; + _gfortran_mproduct_i2; + _gfortran_mproduct_i4; + _gfortran_mproduct_i8; + _gfortran_mproduct_r10; + _gfortran_mproduct_r16; + _gfortran_mproduct_r4; + _gfortran_mproduct_r8; + _gfortran_msum_c10; + _gfortran_msum_c16; + _gfortran_msum_c4; + _gfortran_msum_c8; + _gfortran_msum_i1; + _gfortran_msum_i16; + _gfortran_msum_i2; + _gfortran_msum_i4; + _gfortran_msum_i8; + _gfortran_msum_r10; + _gfortran_msum_r16; + _gfortran_msum_r4; + _gfortran_msum_r8; + _gfortran_mvbits_i1; + _gfortran_mvbits_i2; + _gfortran_mvbits_i4; + _gfortran_mvbits_i8; + _gfortran_nearest_r10; + _gfortran_nearest_r16; + _gfortran_nearest_r4; + _gfortran_nearest_r8; + _gfortran_os_error; + _gfortran_pack; + _gfortran_pack_char; + _gfortran_pack_s; + _gfortran_pack_s_char; + _gfortran_pause_numeric; + _gfortran_pause_string; + _gfortran_perror_sub; + _gfortran_pow_c10_i16; + _gfortran_pow_c10_i4; + _gfortran_pow_c10_i8; + _gfortran_pow_c16_i16; + _gfortran_pow_c16_i4; + _gfortran_pow_c16_i8; + _gfortran_pow_c4_i16; + _gfortran_pow_c4_i4; + _gfortran_pow_c4_i8; + _gfortran_pow_c8_i16; + _gfortran_pow_c8_i4; + _gfortran_pow_c8_i8; + _gfortran_pow_i16_i16; + _gfortran_pow_i16_i4; + _gfortran_pow_i16_i8; + _gfortran_pow_i4_i16; + _gfortran_pow_i4_i4; + _gfortran_pow_i4_i8; + _gfortran_pow_i8_i16; + _gfortran_pow_i8_i4; + _gfortran_pow_i8_i8; + _gfortran_pow_r10_i16; + _gfortran_pow_r10_i8; + _gfortran_pow_r16_i16; + _gfortran_pow_r16_i8; + _gfortran_pow_r4_i16; + _gfortran_pow_r4_i8; + _gfortran_pow_r8_i16; + _gfortran_pow_r8_i8; + _gfortran_product_c10; + _gfortran_product_c16; + _gfortran_product_c4; + _gfortran_product_c8; + _gfortran_product_i1; + _gfortran_product_i16; + _gfortran_product_i2; + _gfortran_product_i4; + _gfortran_product_i8; + _gfortran_product_r10; + _gfortran_product_r16; + _gfortran_product_r4; + _gfortran_product_r8; + _gfortran_rand; + _gfortran_random_r10; + _gfortran_random_r16; + _gfortran_random_r4; + _gfortran_random_r8; + _gfortran_random_seed_i4; + _gfortran_random_seed_i8; + _gfortran_rename_i4; + _gfortran_rename_i4_sub; + _gfortran_rename_i8; + _gfortran_rename_i8_sub; + _gfortran_reshape; + _gfortran_reshape_16; + _gfortran_reshape_4; + _gfortran_reshape_8; + _gfortran_reshape_c10; + _gfortran_reshape_c16; + _gfortran_reshape_c4; + _gfortran_reshape_c8; + _gfortran_reshape_char; + _gfortran_reshape_r10; + _gfortran_reshape_r16; + _gfortran_reshape_r4; + _gfortran_reshape_r8; + _gfortran_rrspacing_r10; + _gfortran_rrspacing_r16; + _gfortran_rrspacing_r4; + _gfortran_rrspacing_r8; + _gfortran_runtime_error; + _gfortran_runtime_error_at; + _gfortran_secnds; + _gfortran_second; + _gfortran_second_sub; + _gfortran_selected_int_kind; + _gfortran_selected_real_kind; + _gfortran_select_string; + _gfortran_set_args; + _gfortran_set_convert; + _gfortran_set_exponent_r10; + _gfortran_set_exponent_r16; + _gfortran_set_exponent_r4; + _gfortran_set_exponent_r8; + _gfortran_set_fpe; + _gfortran_set_max_subrecord_length; + _gfortran_set_record_marker; + _gfortran_set_options; + _gfortran_shape_16; + _gfortran_shape_4; + _gfortran_shape_8; + _gfortran_signal_func; + _gfortran_signal_func_int; + _gfortran_signal_sub; + _gfortran_signal_sub_int; + _gfortran_size0; + _gfortran_size1; + _gfortran_sleep_i4_sub; + _gfortran_sleep_i8_sub; + _gfortran_smaxloc0_16_i1; + _gfortran_smaxloc0_16_i16; + _gfortran_smaxloc0_16_i2; + _gfortran_smaxloc0_16_i4; + _gfortran_smaxloc0_16_i8; + _gfortran_smaxloc0_16_r10; + _gfortran_smaxloc0_16_r16; + _gfortran_smaxloc0_16_r4; + _gfortran_smaxloc0_16_r8; + _gfortran_smaxloc0_4_i1; + _gfortran_smaxloc0_4_i16; + _gfortran_smaxloc0_4_i2; + _gfortran_smaxloc0_4_i4; + _gfortran_smaxloc0_4_i8; + _gfortran_smaxloc0_4_r10; + _gfortran_smaxloc0_4_r16; + _gfortran_smaxloc0_4_r4; + _gfortran_smaxloc0_4_r8; + _gfortran_smaxloc0_8_i1; + _gfortran_smaxloc0_8_i16; + _gfortran_smaxloc0_8_i2; + _gfortran_smaxloc0_8_i4; + _gfortran_smaxloc0_8_i8; + _gfortran_smaxloc0_8_r10; + _gfortran_smaxloc0_8_r16; + _gfortran_smaxloc0_8_r4; + _gfortran_smaxloc0_8_r8; + _gfortran_smaxloc1_16_i1; + _gfortran_smaxloc1_16_i16; + _gfortran_smaxloc1_16_i2; + _gfortran_smaxloc1_16_i4; + _gfortran_smaxloc1_16_i8; + _gfortran_smaxloc1_16_r10; + _gfortran_smaxloc1_16_r16; + _gfortran_smaxloc1_16_r4; + _gfortran_smaxloc1_16_r8; + _gfortran_smaxloc1_4_i1; + _gfortran_smaxloc1_4_i16; + _gfortran_smaxloc1_4_i2; + _gfortran_smaxloc1_4_i4; + _gfortran_smaxloc1_4_i8; + _gfortran_smaxloc1_4_r10; + _gfortran_smaxloc1_4_r16; + _gfortran_smaxloc1_4_r4; + _gfortran_smaxloc1_4_r8; + _gfortran_smaxloc1_8_i1; + _gfortran_smaxloc1_8_i16; + _gfortran_smaxloc1_8_i2; + _gfortran_smaxloc1_8_i4; + _gfortran_smaxloc1_8_i8; + _gfortran_smaxloc1_8_r10; + _gfortran_smaxloc1_8_r16; + _gfortran_smaxloc1_8_r4; + _gfortran_smaxloc1_8_r8; + _gfortran_smaxval_i1; + _gfortran_smaxval_i16; + _gfortran_smaxval_i2; + _gfortran_smaxval_i4; + _gfortran_smaxval_i8; + _gfortran_smaxval_r10; + _gfortran_smaxval_r16; + _gfortran_smaxval_r4; + _gfortran_smaxval_r8; + _gfortran_sminloc0_16_i1; + _gfortran_sminloc0_16_i16; + _gfortran_sminloc0_16_i2; + _gfortran_sminloc0_16_i4; + _gfortran_sminloc0_16_i8; + _gfortran_sminloc0_16_r10; + _gfortran_sminloc0_16_r16; + _gfortran_sminloc0_16_r4; + _gfortran_sminloc0_16_r8; + _gfortran_sminloc0_4_i1; + _gfortran_sminloc0_4_i16; + _gfortran_sminloc0_4_i2; + _gfortran_sminloc0_4_i4; + _gfortran_sminloc0_4_i8; + _gfortran_sminloc0_4_r10; + _gfortran_sminloc0_4_r16; + _gfortran_sminloc0_4_r4; + _gfortran_sminloc0_4_r8; + _gfortran_sminloc0_8_i1; + _gfortran_sminloc0_8_i16; + _gfortran_sminloc0_8_i2; + _gfortran_sminloc0_8_i4; + _gfortran_sminloc0_8_i8; + _gfortran_sminloc0_8_r10; + _gfortran_sminloc0_8_r16; + _gfortran_sminloc0_8_r4; + _gfortran_sminloc0_8_r8; + _gfortran_sminloc1_16_i1; + _gfortran_sminloc1_16_i16; + _gfortran_sminloc1_16_i2; + _gfortran_sminloc1_16_i4; + _gfortran_sminloc1_16_i8; + _gfortran_sminloc1_16_r10; + _gfortran_sminloc1_16_r16; + _gfortran_sminloc1_16_r4; + _gfortran_sminloc1_16_r8; + _gfortran_sminloc1_4_i1; + _gfortran_sminloc1_4_i16; + _gfortran_sminloc1_4_i2; + _gfortran_sminloc1_4_i4; + _gfortran_sminloc1_4_i8; + _gfortran_sminloc1_4_r10; + _gfortran_sminloc1_4_r16; + _gfortran_sminloc1_4_r4; + _gfortran_sminloc1_4_r8; + _gfortran_sminloc1_8_i1; + _gfortran_sminloc1_8_i16; + _gfortran_sminloc1_8_i2; + _gfortran_sminloc1_8_i4; + _gfortran_sminloc1_8_i8; + _gfortran_sminloc1_8_r10; + _gfortran_sminloc1_8_r16; + _gfortran_sminloc1_8_r4; + _gfortran_sminloc1_8_r8; + _gfortran_sminval_i1; + _gfortran_sminval_i16; + _gfortran_sminval_i2; + _gfortran_sminval_i4; + _gfortran_sminval_i8; + _gfortran_sminval_r10; + _gfortran_sminval_r16; + _gfortran_sminval_r4; + _gfortran_sminval_r8; + _gfortran_spacing_r10; + _gfortran_spacing_r16; + _gfortran_spacing_r4; + _gfortran_spacing_r8; + _gfortran_specific__abs_c10; + _gfortran_specific__abs_c16; + _gfortran_specific__abs_c4; + _gfortran_specific__abs_c8; + _gfortran_specific__abs_i16; + _gfortran_specific__abs_i4; + _gfortran_specific__abs_i8; + _gfortran_specific__abs_r10; + _gfortran_specific__abs_r16; + _gfortran_specific__abs_r4; + _gfortran_specific__abs_r8; + _gfortran_specific__acosh_r10; + _gfortran_specific__acosh_r16; + _gfortran_specific__acosh_r4; + _gfortran_specific__acosh_r8; + _gfortran_specific__acos_r10; + _gfortran_specific__acos_r16; + _gfortran_specific__acos_r4; + _gfortran_specific__acos_r8; + _gfortran_specific__aimag_c10; + _gfortran_specific__aimag_c16; + _gfortran_specific__aimag_c4; + _gfortran_specific__aimag_c8; + _gfortran_specific__aint_r10; + _gfortran_specific__aint_r16; + _gfortran_specific__aint_r4; + _gfortran_specific__aint_r8; + _gfortran_specific__anint_r10; + _gfortran_specific__anint_r16; + _gfortran_specific__anint_r4; + _gfortran_specific__anint_r8; + _gfortran_specific__asinh_r10; + _gfortran_specific__asinh_r16; + _gfortran_specific__asinh_r4; + _gfortran_specific__asinh_r8; + _gfortran_specific__asin_r10; + _gfortran_specific__asin_r16; + _gfortran_specific__asin_r4; + _gfortran_specific__asin_r8; + _gfortran_specific__atan2_r10; + _gfortran_specific__atan2_r16; + _gfortran_specific__atan2_r4; + _gfortran_specific__atan2_r8; + _gfortran_specific__atanh_r10; + _gfortran_specific__atanh_r16; + _gfortran_specific__atanh_r4; + _gfortran_specific__atanh_r8; + _gfortran_specific__atan_r10; + _gfortran_specific__atan_r16; + _gfortran_specific__atan_r4; + _gfortran_specific__atan_r8; + _gfortran_specific__char_1_i16; + _gfortran_specific__char_1_i4; + _gfortran_specific__char_1_i8; + _gfortran_specific__conjg_10; + _gfortran_specific__conjg_16; + _gfortran_specific__conjg_4; + _gfortran_specific__conjg_8; + _gfortran_specific__cos_c10; + _gfortran_specific__cos_c16; + _gfortran_specific__cos_c4; + _gfortran_specific__cos_c8; + _gfortran_specific__cosh_r10; + _gfortran_specific__cosh_r16; + _gfortran_specific__cosh_r4; + _gfortran_specific__cosh_r8; + _gfortran_specific__cos_r10; + _gfortran_specific__cos_r16; + _gfortran_specific__cos_r4; + _gfortran_specific__cos_r8; + _gfortran_specific__dim_i16; + _gfortran_specific__dim_i4; + _gfortran_specific__dim_i8; + _gfortran_specific__dim_r10; + _gfortran_specific__dim_r16; + _gfortran_specific__dim_r4; + _gfortran_specific__dim_r8; + _gfortran_specific__dprod_r8; + _gfortran_specific__exp_c10; + _gfortran_specific__exp_c16; + _gfortran_specific__exp_c4; + _gfortran_specific__exp_c8; + _gfortran_specific__exp_r10; + _gfortran_specific__exp_r16; + _gfortran_specific__exp_r4; + _gfortran_specific__exp_r8; + _gfortran_specific__index_1_i16; + _gfortran_specific__index_1_i4; + _gfortran_specific__index_1_i8; + _gfortran_specific__len_1_i16; + _gfortran_specific__len_1_i4; + _gfortran_specific__len_1_i8; + _gfortran_specific__log10_r10; + _gfortran_specific__log10_r16; + _gfortran_specific__log10_r4; + _gfortran_specific__log10_r8; + _gfortran_specific__log_c10; + _gfortran_specific__log_c16; + _gfortran_specific__log_c4; + _gfortran_specific__log_c8; + _gfortran_specific__log_r10; + _gfortran_specific__log_r16; + _gfortran_specific__log_r4; + _gfortran_specific__log_r8; + _gfortran_specific__mod_i16; + _gfortran_specific__mod_i4; + _gfortran_specific__mod_i8; + _gfortran_specific__mod_r10; + _gfortran_specific__mod_r16; + _gfortran_specific__mod_r4; + _gfortran_specific__mod_r8; + _gfortran_specific__nint_16_10; + _gfortran_specific__nint_16_16; + _gfortran_specific__nint_16_4; + _gfortran_specific__nint_16_8; + _gfortran_specific__nint_4_10; + _gfortran_specific__nint_4_16; + _gfortran_specific__nint_4_4; + _gfortran_specific__nint_4_8; + _gfortran_specific__nint_8_10; + _gfortran_specific__nint_8_16; + _gfortran_specific__nint_8_4; + _gfortran_specific__nint_8_8; + _gfortran_specific__sign_i16; + _gfortran_specific__sign_i4; + _gfortran_specific__sign_i8; + _gfortran_specific__sign_r10; + _gfortran_specific__sign_r16; + _gfortran_specific__sign_r4; + _gfortran_specific__sign_r8; + _gfortran_specific__sin_c10; + _gfortran_specific__sin_c16; + _gfortran_specific__sin_c4; + _gfortran_specific__sin_c8; + _gfortran_specific__sinh_r10; + _gfortran_specific__sinh_r16; + _gfortran_specific__sinh_r4; + _gfortran_specific__sinh_r8; + _gfortran_specific__sin_r10; + _gfortran_specific__sin_r16; + _gfortran_specific__sin_r4; + _gfortran_specific__sin_r8; + _gfortran_specific__sqrt_c10; + _gfortran_specific__sqrt_c16; + _gfortran_specific__sqrt_c4; + _gfortran_specific__sqrt_c8; + _gfortran_specific__sqrt_r10; + _gfortran_specific__sqrt_r16; + _gfortran_specific__sqrt_r4; + _gfortran_specific__sqrt_r8; + _gfortran_specific__tanh_r10; + _gfortran_specific__tanh_r16; + _gfortran_specific__tanh_r4; + _gfortran_specific__tanh_r8; + _gfortran_specific__tan_r10; + _gfortran_specific__tan_r16; + _gfortran_specific__tan_r4; + _gfortran_specific__tan_r8; + _gfortran_spread; + _gfortran_spread_char; + _gfortran_spread_char_scalar; + _gfortran_spread_scalar; + _gfortran_sproduct_c10; + _gfortran_sproduct_c16; + _gfortran_sproduct_c4; + _gfortran_sproduct_c8; + _gfortran_sproduct_i1; + _gfortran_sproduct_i16; + _gfortran_sproduct_i2; + _gfortran_sproduct_i4; + _gfortran_sproduct_i8; + _gfortran_sproduct_r10; + _gfortran_sproduct_r16; + _gfortran_sproduct_r4; + _gfortran_sproduct_r8; + _gfortran_srand; + _gfortran_ssum_c10; + _gfortran_ssum_c16; + _gfortran_ssum_c4; + _gfortran_ssum_c8; + _gfortran_ssum_i1; + _gfortran_ssum_i16; + _gfortran_ssum_i2; + _gfortran_ssum_i4; + _gfortran_ssum_i8; + _gfortran_ssum_r10; + _gfortran_ssum_r16; + _gfortran_ssum_r4; + _gfortran_ssum_r8; + _gfortran_stat_i4; + _gfortran_stat_i4_sub; + _gfortran_stat_i8; + _gfortran_stat_i8_sub; + _gfortran_st_backspace; + _gfortran_st_close; + _gfortran_st_endfile; + _gfortran_st_flush; + _gfortran_st_inquire; + _gfortran_st_iolength; + _gfortran_st_iolength_done; + _gfortran_st_open; + _gfortran_stop_numeric; + _gfortran_stop_string; + _gfortran_store_exe_path; + _gfortran_st_read; + _gfortran_st_read_done; + _gfortran_st_rewind; + _gfortran_string_index; + _gfortran_string_len_trim; + _gfortran_string_minmax; + _gfortran_string_scan; + _gfortran_string_trim; + _gfortran_string_verify; + _gfortran_st_set_nml_var; + _gfortran_st_set_nml_var_dim; + _gfortran_st_write; + _gfortran_st_write_done; + _gfortran_sum_c10; + _gfortran_sum_c16; + _gfortran_sum_c4; + _gfortran_sum_c8; + _gfortran_sum_i1; + _gfortran_sum_i16; + _gfortran_sum_i2; + _gfortran_sum_i4; + _gfortran_sum_i8; + _gfortran_sum_r10; + _gfortran_sum_r16; + _gfortran_sum_r4; + _gfortran_sum_r8; + _gfortran_symlnk_i4; + _gfortran_symlnk_i4_sub; + _gfortran_symlnk_i8; + _gfortran_symlnk_i8_sub; + _gfortran_system; + _gfortran_system_clock_4; + _gfortran_system_clock_8; + _gfortran_system_sub; + _gfortran_time8_func; + _gfortran_time_func; + _gfortran_transfer_array; + _gfortran_transfer_character; + _gfortran_transfer_complex; + _gfortran_transfer_integer; + _gfortran_transfer_logical; + _gfortran_transfer_real; + _gfortran_transpose; + _gfortran_transpose_c10; + _gfortran_transpose_c16; + _gfortran_transpose_c4; + _gfortran_transpose_c8; + _gfortran_transpose_char; + _gfortran_transpose_i16; + _gfortran_transpose_i4; + _gfortran_transpose_i8; + _gfortran_transpose_r10; + _gfortran_transpose_r16; + _gfortran_transpose_r4; + _gfortran_transpose_r8; + _gfortran_ttynam; + _gfortran_ttynam_sub; + _gfortran_umask_i4; + _gfortran_umask_i4_sub; + _gfortran_umask_i8; + _gfortran_umask_i8_sub; + _gfortran_unlink; + _gfortran_unlink_i4_sub; + _gfortran_unlink_i8_sub; + _gfortran_unpack0; + _gfortran_unpack0_char; + _gfortran_unpack1; + _gfortran_unpack1_char; + __iso_c_binding_c_f_pointer; + __iso_c_binding_c_f_pointer_d0; + __iso_c_binding_c_f_pointer_i1; + __iso_c_binding_c_f_pointer_i2; + __iso_c_binding_c_f_pointer_i4; + __iso_c_binding_c_f_pointer_i8; + __iso_c_binding_c_f_pointer_i16; + __iso_c_binding_c_f_pointer_r4; + __iso_c_binding_c_f_pointer_r8; + __iso_c_binding_c_f_pointer_r10; + __iso_c_binding_c_f_pointer_r16; + __iso_c_binding_c_f_pointer_c4; + __iso_c_binding_c_f_pointer_c8; + __iso_c_binding_c_f_pointer_c10; + __iso_c_binding_c_f_pointer_c16; + __iso_c_binding_c_f_pointer_s0; + __iso_c_binding_c_f_pointer_l1; + __iso_c_binding_c_f_pointer_l2; + __iso_c_binding_c_f_pointer_l4; + __iso_c_binding_c_f_pointer_l8; + __iso_c_binding_c_f_pointer_u0; + local: + *; +}; + +GFORTRAN_1.1 { + global: + _gfortran_adjustl_char4; + _gfortran_adjustr_char4; + _gfortran_compare_string_char4; + _gfortran_concat_string_char4; + _gfortran_convert_char1_to_char4; + _gfortran_convert_char4_to_char1; + _gfortran_cshift0_16; + _gfortran_cshift0_16_char; + _gfortran_cshift0_1_char4; + _gfortran_cshift0_2_char4; + _gfortran_cshift0_4_char4; + _gfortran_cshift0_8_char4; + _gfortran_cshift1_16_char4; + _gfortran_cshift1_4_char4; + _gfortran_cshift1_8_char4; + _gfortran_eoshift0_16; + _gfortran_eoshift0_16_char; + _gfortran_eoshift0_1_char4; + _gfortran_eoshift0_2_char4; + _gfortran_eoshift0_4_char4; + _gfortran_eoshift0_8_char4; + _gfortran_eoshift1_16_char4; + _gfortran_eoshift1_4_char4; + _gfortran_eoshift1_8_char4; + _gfortran_eoshift2_16; + _gfortran_eoshift2_16_char; + _gfortran_eoshift2_1_char4; + _gfortran_eoshift2_2_char4; + _gfortran_eoshift2_4_char4; + _gfortran_eoshift2_8_char4; + _gfortran_eoshift3_16_char4; + _gfortran_eoshift3_4_char4; + _gfortran_eoshift3_8_char4; + _gfortran_erfc_scaled_r10; + _gfortran_erfc_scaled_r16; + _gfortran_erfc_scaled_r4; + _gfortran_erfc_scaled_r8; + _gfortran_pack_char4; + _gfortran_pack_s_char4; + _gfortran_reshape_char4; + _gfortran_runtime_warning_at; + _gfortran_selected_char_kind; + _gfortran_select_string_char4; + _gfortran_spread_char4; + _gfortran_spread_char4_scalar; + _gfortran_string_index_char4; + _gfortran_string_len_trim_char4; + _gfortran_string_minmax_char4; + _gfortran_string_scan_char4; + _gfortran_string_trim_char4; + _gfortran_string_verify_char4; + _gfortran_st_wait; + _gfortran_transfer_character_wide; + _gfortran_transpose_char4; + _gfortran_unpack0_char4; + _gfortran_unpack1_char4; +} GFORTRAN_1.0; + +F2C_1.0 { + global: + _gfortran_f2c_specific__abs_c4; + _gfortran_f2c_specific__abs_r4; + _gfortran_f2c_specific__acosh_r4; + _gfortran_f2c_specific__acos_r4; + _gfortran_f2c_specific__aimag_c4; + _gfortran_f2c_specific__aimag_c8; + _gfortran_f2c_specific__aint_r4; + _gfortran_f2c_specific__anint_r4; + _gfortran_f2c_specific__asinh_r4; + _gfortran_f2c_specific__asin_r4; + _gfortran_f2c_specific__atan2_r4; + _gfortran_f2c_specific__atanh_r4; + _gfortran_f2c_specific__atan_r4; + _gfortran_f2c_specific__conjg_4; + _gfortran_f2c_specific__conjg_8; + _gfortran_f2c_specific__cos_c4; + _gfortran_f2c_specific__cos_c8; + _gfortran_f2c_specific__cosh_r4; + _gfortran_f2c_specific__cos_r4; + _gfortran_f2c_specific__dim_r4; + _gfortran_f2c_specific__exp_c4; + _gfortran_f2c_specific__exp_c8; + _gfortran_f2c_specific__exp_r4; + _gfortran_f2c_specific__log10_r4; + _gfortran_f2c_specific__log_c4; + _gfortran_f2c_specific__log_c8; + _gfortran_f2c_specific__log_r4; + _gfortran_f2c_specific__mod_r4; + _gfortran_f2c_specific__sign_r4; + _gfortran_f2c_specific__sin_c4; + _gfortran_f2c_specific__sin_c8; + _gfortran_f2c_specific__sinh_r4; + _gfortran_f2c_specific__sin_r4; + _gfortran_f2c_specific__sqrt_c4; + _gfortran_f2c_specific__sqrt_c8; + _gfortran_f2c_specific__sqrt_r4; + _gfortran_f2c_specific__tanh_r4; + _gfortran_f2c_specific__tan_r4; +}; + +GFORTRAN_C99_1.0 { + global: + acosf; + acoshf; + asinf; + asinhf; + atan2f; + atanf; + atanhf; + cabs; + cabsf; + cabsl; + carg; + cargf; + cargl; + ccos; + ccosf; + ccosh; + ccoshf; + ccoshl; + ccosl; + ceilf; + cexp; + cexpf; + cexpl; + clog; + clog10; + clog10f; + clog10l; + clogf; + clogl; + copysignf; + cosf; + coshf; + cpow; + cpowf; + cpowl; + csin; + csinf; + csinh; + csinhf; + csinhl; + csinl; + csqrt; + csqrtf; + csqrtl; + ctan; + ctanf; + ctanh; + ctanhf; + ctanhl; + ctanl; + erfcf; + erff; + expf; + fabsf; + floorf; + floorl; + fmodf; + fmodl; + frexpf; + hypotf; + j0f; + j1f; + jnf; + lgamma; + lgammaf; + log10f; + log10l; + logf; + nextafterf; + powf; + round; + roundf; + scalbn; + scalbnf; + sinf; + sinhf; + sqrtf; + tanf; + tanhf; + tgamma; + tgammaf; + trunc; + truncf; + y0f; + y1f; + ynf; +}; diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/.DS_Store b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a5281bbf391d946ccebcf9ed73eb568e40717497 GIT binary patch literal 15364 zcmeHM%We}%6s^vqZ6J_@$FMa!*q{(;q?rYhg#d{qn$2uxnmin0#j%6aVE_rq8$Mu` z^8qaRfcb&h@c}IP0G6|6&bigj-0G@!vOp+;+gA5&x6i$G?x|bVU2W%FcJFBWj&mL7 zTpK&>$`THVjlXk`wz=v`7dC^xbEUiOwjK>eTbqLjZ5K=dQ@|831xx``;4CPBdp5WB z1#j(W3YY?>z_9|HA3E4+yOo`ID^mv!vIKx#z-8HRj&*?ebSm4e?8IAfMNGeX$ST*Y zT4H409lv)7hwWB&;;nagnRj#9ejS0ktm~~EO#xFNR-lVZEw|w|-N=pg z`hB#CUpSb4$A06pY&heqfDN~WPtP6VbG+W4;6<;q+Q@S_b}Sd;oTyJaJ~##FW#s95qJSOZ z+X?If?~!t z^!lW@)P2?y?U0f7xrlbg$aD)?AL6)yDoEC{Fw~x_4W0#hjFlZ#1ht!cr1-WFVP^jZ z=p5)5h^^k;O?!ph0_-X>TCZ|CfFDQc4t7@HZTB$UuXAq|w;cE(DttfAgEL2fZDZD; zimaZ7k(t1kVDks6EveIdrnva{rHs#~F`j&q_+OE6B0kls;diChN@SeKm;E;XTfnDZ z}GrKhT~bdYVYeo z+w9k&i)xnel~lb$)^#|qqvdW7@do%Lc`sa3ymO$KW5fI#VB6>?j#NKmN3p4B zfL{WBgn6e2J!kk)%Y|o(6We(%Jy6QXsppHz3-Fhq4)3~qXyG*PN!%GZk`{HO9}?R)kj6KM;gY`;zyN5F8EhyEy`GUYHSNw>efTg#b`3o=oO&(oWMNz zq;Nu&Q{Vh38bUI0pq$uAd^x%zJkJm*UT!c!^Ol zKwmV>R0%xu=rxVJ0Dnp1Pw}kb#-~!z_Fu&fGJ=K fm;$DNDPRhi0;Yf|U<#N5rhqA63YY@lqyql|*$QkB literal 0 HcmV?d00001 diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/abort.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/abort.c new file mode 100644 index 0000000000..ada4061436 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/abort.c @@ -0,0 +1,35 @@ +/* Implementation of the ABORT intrinsic. + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + +void PREFIX(abort) (void); +export_proto_np(PREFIX(abort)); + +void PREFIX(abort) (void) +{ + close_units (); + abort (); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/access.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/access.c new file mode 100644 index 0000000000..9d44531e27 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/access.c @@ -0,0 +1,90 @@ +/* Implementation of the ACCESS intrinsic. + Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +/* INTEGER FUNCTION ACCESS(NAME, MODE) + CHARACTER(len=*), INTENT(IN) :: NAME, MODE */ + +#ifdef HAVE_ACCESS +extern int access_func (char *, char *, gfc_charlen_type, gfc_charlen_type); +export_proto(access_func); + +int +access_func (char *name, char *mode, gfc_charlen_type name_len, + gfc_charlen_type mode_len) +{ + char * file; + gfc_charlen_type i; + int m; + + /* Parse the MODE string. */ + m = F_OK; + for (i = 0; i < mode_len && mode[i]; i++) + switch (mode[i]) + { + case ' ': + break; + + case 'r': + case 'R': + m |= R_OK; + break; + + case 'w': + case 'W': + m |= W_OK; + break; + + case 'x': + case 'X': + m |= X_OK; + break; + + default: + return -1; + break; + } + + /* Trim trailing spaces from NAME argument. */ + while (name_len > 0 && name[name_len - 1] == ' ') + name_len--; + + /* Make a null terminated copy of the string. */ + file = gfc_alloca (name_len + 1); + memcpy (file, name, name_len); + file[name_len] = '\0'; + + /* And make the call to access(). */ + return (access (file, m) == 0 ? 0 : errno); +} +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/args.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/args.c new file mode 100644 index 0000000000..7187beccb7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/args.c @@ -0,0 +1,271 @@ +/* Implementation of the GETARG and IARGC g77, and + corresponding F2003, intrinsics. + Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Bud Davis and Janne Blomqvist. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + + +/* Get a commandline argument. */ + +extern void getarg_i4 (GFC_INTEGER_4 *, char *, gfc_charlen_type); +iexport_proto(getarg_i4); + +void +getarg_i4 (GFC_INTEGER_4 *pos, char *val, gfc_charlen_type val_len) +{ + int argc; + int arglen; + char **argv; + + get_args (&argc, &argv); + + if (val_len < 1 || !val ) + return; /* something is wrong , leave immediately */ + + memset (val, ' ', val_len); + + if ((*pos) + 1 <= argc && *pos >=0 ) + { + arglen = strlen (argv[*pos]); + if (arglen > val_len) + arglen = val_len; + memcpy (val, argv[*pos], arglen); + } +} +iexport(getarg_i4); + + +/* INTEGER*8 wrapper of getarg. */ + +extern void getarg_i8 (GFC_INTEGER_8 *, char *, gfc_charlen_type); +export_proto (getarg_i8); + +void +getarg_i8 (GFC_INTEGER_8 *pos, char *val, gfc_charlen_type val_len) +{ + GFC_INTEGER_4 pos4 = (GFC_INTEGER_4) *pos; + getarg_i4 (&pos4, val, val_len); +} + + +/* Return the number of commandline arguments. The g77 info page + states that iargc does not include the specification of the + program name itself. */ + +extern GFC_INTEGER_4 iargc (void); +export_proto(iargc); + +GFC_INTEGER_4 +iargc (void) +{ + int argc; + char **argv; + + get_args (&argc, &argv); + + return (argc - 1); +} + + +/* F2003 intrinsic functions and subroutines related to command line + arguments. + + - function command_argument_count() is converted to iargc by the compiler. + + - subroutine get_command([command, length, status]). + + - subroutine get_command_argument(number, [value, length, status]). +*/ + +/* These two status codes are specified in the standard. */ +#define GFC_GC_SUCCESS 0 +#define GFC_GC_VALUE_TOO_SHORT -1 + +/* Processor-specific status failure code. */ +#define GFC_GC_FAILURE 42 + + +extern void get_command_argument_i4 (GFC_INTEGER_4 *, char *, GFC_INTEGER_4 *, + GFC_INTEGER_4 *, gfc_charlen_type); +iexport_proto(get_command_argument_i4); + +/* Get a single commandline argument. */ + +void +get_command_argument_i4 (GFC_INTEGER_4 *number, char *value, + GFC_INTEGER_4 *length, GFC_INTEGER_4 *status, + gfc_charlen_type value_len) +{ + int argc, arglen = 0, stat_flag = GFC_GC_SUCCESS; + char **argv; + + if (number == NULL ) + /* Should never happen. */ + runtime_error ("Missing argument to get_command_argument"); + + if (value == NULL && length == NULL && status == NULL) + return; /* No need to do anything. */ + + get_args (&argc, &argv); + + if (*number < 0 || *number >= argc) + stat_flag = GFC_GC_FAILURE; + else + arglen = strlen(argv[*number]); + + if (value != NULL) + { + if (value_len < 1) + stat_flag = GFC_GC_FAILURE; + else + memset (value, ' ', value_len); + } + + if (value != NULL && stat_flag != GFC_GC_FAILURE) + { + if (arglen > value_len) + { + arglen = value_len; + stat_flag = GFC_GC_VALUE_TOO_SHORT; + } + memcpy (value, argv[*number], arglen); + } + + if (length != NULL) + *length = arglen; + + if (status != NULL) + *status = stat_flag; +} +iexport(get_command_argument_i4); + + +/* INTEGER*8 wrapper for get_command_argument. */ + +extern void get_command_argument_i8 (GFC_INTEGER_8 *, char *, GFC_INTEGER_8 *, + GFC_INTEGER_8 *, gfc_charlen_type); +export_proto(get_command_argument_i8); + +void +get_command_argument_i8 (GFC_INTEGER_8 *number, char *value, + GFC_INTEGER_8 *length, GFC_INTEGER_8 *status, + gfc_charlen_type value_len) +{ + GFC_INTEGER_4 number4; + GFC_INTEGER_4 length4; + GFC_INTEGER_4 status4; + + number4 = (GFC_INTEGER_4) *number; + get_command_argument_i4 (&number4, value, &length4, &status4, value_len); + if (length) + *length = length4; + if (status) + *status = status4; +} + + +/* Return the whole commandline. */ + +extern void get_command_i4 (char *, GFC_INTEGER_4 *, GFC_INTEGER_4 *, + gfc_charlen_type); +iexport_proto(get_command_i4); + +void +get_command_i4 (char *command, GFC_INTEGER_4 *length, GFC_INTEGER_4 *status, + gfc_charlen_type command_len) +{ + int i, argc, arglen, thisarg; + int stat_flag = GFC_GC_SUCCESS; + int tot_len = 0; + char **argv; + + if (command == NULL && length == NULL && status == NULL) + return; /* No need to do anything. */ + + get_args (&argc, &argv); + + if (command != NULL) + { + /* Initialize the string to blanks. */ + if (command_len < 1) + stat_flag = GFC_GC_FAILURE; + else + memset (command, ' ', command_len); + } + + for (i = 0; i < argc ; i++) + { + arglen = strlen(argv[i]); + + if (command != NULL && stat_flag == GFC_GC_SUCCESS) + { + thisarg = arglen; + if (tot_len + thisarg > command_len) + { + thisarg = command_len - tot_len; /* Truncate. */ + stat_flag = GFC_GC_VALUE_TOO_SHORT; + } + /* Also a space before the next arg. */ + else if (i != argc - 1 && tot_len + arglen == command_len) + stat_flag = GFC_GC_VALUE_TOO_SHORT; + + memcpy (&command[tot_len], argv[i], thisarg); + } + + /* Add the legth of the argument. */ + tot_len += arglen; + if (i != argc - 1) + tot_len++; + } + + if (length != NULL) + *length = tot_len; + + if (status != NULL) + *status = stat_flag; +} +iexport(get_command_i4); + + +/* INTEGER*8 wrapper for get_command. */ + +extern void get_command_i8 (char *, GFC_INTEGER_8 *, GFC_INTEGER_8 *, + gfc_charlen_type); +export_proto(get_command_i8); + +void +get_command_i8 (char *command, GFC_INTEGER_8 *length, GFC_INTEGER_8 *status, + gfc_charlen_type command_len) +{ + GFC_INTEGER_4 length4; + GFC_INTEGER_4 status4; + + get_command_i4 (command, &length4, &status4, command_len); + if (length) + *length = length4; + if (status) + *status = status4; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/associated.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/associated.c new file mode 100644 index 0000000000..87b449edb4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/associated.c @@ -0,0 +1,58 @@ +/* Implementation of the ASSOCIATED intrinsic + Copyright 2003, 2009 Free Software Foundation, Inc. + Contributed by kejia Zhao (CCRG) + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +extern int associated (const gfc_array_void *, const gfc_array_void *); +export_proto(associated); + +int +associated (const gfc_array_void *pointer, const gfc_array_void *target) +{ + int n, rank; + + if (GFC_DESCRIPTOR_DATA (pointer) == NULL) + return 0; + if (GFC_DESCRIPTOR_DATA (pointer) != GFC_DESCRIPTOR_DATA (target)) + return 0; + if (GFC_DESCRIPTOR_DTYPE (pointer) != GFC_DESCRIPTOR_DTYPE (target)) + return 0; + + rank = GFC_DESCRIPTOR_RANK (pointer); + for (n = 0; n < rank; n++) + { + long diff; + diff = pointer->dim[n].ubound - pointer->dim[n].lbound; + + if (diff != (target->dim[n].ubound - target->dim[n].lbound)) + return 0; + if (pointer->dim[n].stride != target->dim[n].stride && diff != 0) + return 0; + if (pointer->dim[n].ubound < pointer->dim[n].lbound) + return 0; + } + + return 1; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/c99_functions.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/c99_functions.c new file mode 100644 index 0000000000..9b31702342 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/c99_functions.c @@ -0,0 +1,1745 @@ +/* Implementation of various C99 functions + Copyright (C) 2004, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "config.h" + +#define C99_PROTOS_H WE_DONT_WANT_PROTOS_NOW +#include "libgfortran.h" + +/* IRIX's declares a non-C99 compliant implementation of cabs, + which takes two floating point arguments instead of a single complex. + If is missing this prevents building of c99_functions.c. + To work around this we redirect cabs{,f,l} calls to __gfc_cabs{,f,l}. */ + +#if defined(__sgi__) && !defined(HAVE_COMPLEX_H) +#undef HAVE_CABS +#undef HAVE_CABSF +#undef HAVE_CABSL +#define cabs __gfc_cabs +#define cabsf __gfc_cabsf +#define cabsl __gfc_cabsl +#endif + +/* Tru64's declares a non-C99 compliant implementation of cabs, + which takes two floating point arguments instead of a single complex. + To work around this we redirect cabs{,f,l} calls to __gfc_cabs{,f,l}. */ + +#ifdef __osf__ +#undef HAVE_CABS +#undef HAVE_CABSF +#undef HAVE_CABSL +#define cabs __gfc_cabs +#define cabsf __gfc_cabsf +#define cabsl __gfc_cabsl +#endif + +/* Prototypes to silence -Wstrict-prototypes -Wmissing-prototypes. */ + +float cabsf(float complex); +double cabs(double complex); +long double cabsl(long double complex); + +float cargf(float complex); +double carg(double complex); +long double cargl(long double complex); + +float complex clog10f(float complex); +double complex clog10(double complex); +long double complex clog10l(long double complex); + + +/* Wrappers for systems without the various C99 single precision Bessel + functions. */ + +#if defined(HAVE_J0) && ! defined(HAVE_J0F) +#define HAVE_J0F 1 +extern float j0f (float); + +float +j0f (float x) +{ + return (float) j0 ((double) x); +} +#endif + +#if defined(HAVE_J1) && !defined(HAVE_J1F) +#define HAVE_J1F 1 +extern float j1f (float); + +float j1f (float x) +{ + return (float) j1 ((double) x); +} +#endif + +#if defined(HAVE_JN) && !defined(HAVE_JNF) +#define HAVE_JNF 1 +extern float jnf (int, float); + +float +jnf (int n, float x) +{ + return (float) jn (n, (double) x); +} +#endif + +#if defined(HAVE_Y0) && !defined(HAVE_Y0F) +#define HAVE_Y0F 1 +extern float y0f (float); + +float +y0f (float x) +{ + return (float) y0 ((double) x); +} +#endif + +#if defined(HAVE_Y1) && !defined(HAVE_Y1F) +#define HAVE_Y1F 1 +extern float y1f (float); + +float +y1f (float x) +{ + return (float) y1 ((double) x); +} +#endif + +#if defined(HAVE_YN) && !defined(HAVE_YNF) +#define HAVE_YNF 1 +extern float ynf (int, float); + +float +ynf (int n, float x) +{ + return (float) yn (n, (double) x); +} +#endif + + +/* Wrappers for systems without the C99 erff() and erfcf() functions. */ + +#if defined(HAVE_ERF) && !defined(HAVE_ERFF) +#define HAVE_ERFF 1 +extern float erff (float); + +float +erff (float x) +{ + return (float) erf ((double) x); +} +#endif + +#if defined(HAVE_ERFC) && !defined(HAVE_ERFCF) +#define HAVE_ERFCF 1 +extern float erfcf (float); + +float +erfcf (float x) +{ + return (float) erfc ((double) x); +} +#endif + + +#ifndef HAVE_ACOSF +#define HAVE_ACOSF 1 +float +acosf(float x) +{ + return (float) acos(x); +} +#endif + +#if HAVE_ACOSH && !HAVE_ACOSHF +float +acoshf (float x) +{ + return (float) acosh ((double) x); +} +#endif + +#ifndef HAVE_ASINF +#define HAVE_ASINF 1 +float +asinf(float x) +{ + return (float) asin(x); +} +#endif + +#if HAVE_ASINH && !HAVE_ASINHF +float +asinhf (float x) +{ + return (float) asinh ((double) x); +} +#endif + +#ifndef HAVE_ATAN2F +#define HAVE_ATAN2F 1 +float +atan2f(float y, float x) +{ + return (float) atan2(y, x); +} +#endif + +#ifndef HAVE_ATANF +#define HAVE_ATANF 1 +float +atanf(float x) +{ + return (float) atan(x); +} +#endif + +#if HAVE_ATANH && !HAVE_ATANHF +float +atanhf (float x) +{ + return (float) atanh ((double) x); +} +#endif + +#ifndef HAVE_CEILF +#define HAVE_CEILF 1 +float +ceilf(float x) +{ + return (float) ceil(x); +} +#endif + +#ifndef HAVE_COPYSIGNF +#define HAVE_COPYSIGNF 1 +float +copysignf(float x, float y) +{ + return (float) copysign(x, y); +} +#endif + +#ifndef HAVE_COSF +#define HAVE_COSF 1 +float +cosf(float x) +{ + return (float) cos(x); +} +#endif + +#ifndef HAVE_COSHF +#define HAVE_COSHF 1 +float +coshf(float x) +{ + return (float) cosh(x); +} +#endif + +#ifndef HAVE_EXPF +#define HAVE_EXPF 1 +float +expf(float x) +{ + return (float) exp(x); +} +#endif + +#ifndef HAVE_FABSF +#define HAVE_FABSF 1 +float +fabsf(float x) +{ + return (float) fabs(x); +} +#endif + +#ifndef HAVE_FLOORF +#define HAVE_FLOORF 1 +float +floorf(float x) +{ + return (float) floor(x); +} +#endif + +#ifndef HAVE_FMODF +#define HAVE_FMODF 1 +float +fmodf (float x, float y) +{ + return (float) fmod (x, y); +} +#endif + +#ifndef HAVE_FREXPF +#define HAVE_FREXPF 1 +float +frexpf(float x, int *exp) +{ + return (float) frexp(x, exp); +} +#endif + +#ifndef HAVE_HYPOTF +#define HAVE_HYPOTF 1 +float +hypotf(float x, float y) +{ + return (float) hypot(x, y); +} +#endif + +#ifndef HAVE_LOGF +#define HAVE_LOGF 1 +float +logf(float x) +{ + return (float) log(x); +} +#endif + +#ifndef HAVE_LOG10F +#define HAVE_LOG10F 1 +float +log10f(float x) +{ + return (float) log10(x); +} +#endif + +#ifndef HAVE_SCALBN +#define HAVE_SCALBN 1 +double +scalbn(double x, int y) +{ +#if (FLT_RADIX == 2) && defined(HAVE_LDEXP) + return ldexp (x, y); +#else + return x * pow(FLT_RADIX, y); +#endif +} +#endif + +#ifndef HAVE_SCALBNF +#define HAVE_SCALBNF 1 +float +scalbnf(float x, int y) +{ + return (float) scalbn(x, y); +} +#endif + +#ifndef HAVE_SINF +#define HAVE_SINF 1 +float +sinf(float x) +{ + return (float) sin(x); +} +#endif + +#ifndef HAVE_SINHF +#define HAVE_SINHF 1 +float +sinhf(float x) +{ + return (float) sinh(x); +} +#endif + +#ifndef HAVE_SQRTF +#define HAVE_SQRTF 1 +float +sqrtf(float x) +{ + return (float) sqrt(x); +} +#endif + +#ifndef HAVE_TANF +#define HAVE_TANF 1 +float +tanf(float x) +{ + return (float) tan(x); +} +#endif + +#ifndef HAVE_TANHF +#define HAVE_TANHF 1 +float +tanhf(float x) +{ + return (float) tanh(x); +} +#endif + +#ifndef HAVE_TRUNC +#define HAVE_TRUNC 1 +double +trunc(double x) +{ + if (!isfinite (x)) + return x; + + if (x < 0.0) + return - floor (-x); + else + return floor (x); +} +#endif + +#ifndef HAVE_TRUNCF +#define HAVE_TRUNCF 1 +float +truncf(float x) +{ + return (float) trunc (x); +} +#endif + +#ifndef HAVE_NEXTAFTERF +#define HAVE_NEXTAFTERF 1 +/* This is a portable implementation of nextafterf that is intended to be + independent of the floating point format or its in memory representation. + This implementation works correctly with denormalized values. */ +float +nextafterf(float x, float y) +{ + /* This variable is marked volatile to avoid excess precision problems + on some platforms, including IA-32. */ + volatile float delta; + float absx, denorm_min; + + if (isnan(x) || isnan(y)) + return x + y; + if (x == y) + return x; + if (!isfinite (x)) + return x > 0 ? __FLT_MAX__ : - __FLT_MAX__; + + /* absx = fabsf (x); */ + absx = (x < 0.0) ? -x : x; + + /* __FLT_DENORM_MIN__ is non-zero iff the target supports denormals. */ + if (__FLT_DENORM_MIN__ == 0.0f) + denorm_min = __FLT_MIN__; + else + denorm_min = __FLT_DENORM_MIN__; + + if (absx < __FLT_MIN__) + delta = denorm_min; + else + { + float frac; + int exp; + + /* Discard the fraction from x. */ + frac = frexpf (absx, &exp); + delta = scalbnf (0.5f, exp); + + /* Scale x by the epsilon of the representation. By rights we should + have been able to combine this with scalbnf, but some targets don't + get that correct with denormals. */ + delta *= __FLT_EPSILON__; + + /* If we're going to be reducing the absolute value of X, and doing so + would reduce the exponent of X, then the delta to be applied is + one exponent smaller. */ + if (frac == 0.5f && (y < x) == (x > 0)) + delta *= 0.5f; + + /* If that underflows to zero, then we're back to the minimum. */ + if (delta == 0.0f) + delta = denorm_min; + } + + if (y < x) + delta = -delta; + + return x + delta; +} +#endif + + +#if !defined(HAVE_POWF) || defined(HAVE_BROKEN_POWF) +#ifndef HAVE_POWF +#define HAVE_POWF 1 +#endif +float +powf(float x, float y) +{ + return (float) pow(x, y); +} +#endif + +/* Note that if fpclassify is not defined, then NaN is not handled */ + +/* Algorithm by Steven G. Kargl. */ + +#if !defined(HAVE_ROUNDL) +#define HAVE_ROUNDL 1 +#if defined(HAVE_CEILL) +/* Round to nearest integral value. If the argument is halfway between two + integral values then round away from zero. */ + +long double +roundl(long double x) +{ + long double t; + if (!isfinite (x)) + return (x); + + if (x >= 0.0) + { + t = ceill(x); + if (t - x > 0.5) + t -= 1.0; + return (t); + } + else + { + t = ceill(-x); + if (t + x > 0.5) + t -= 1.0; + return (-t); + } +} +#else + +/* Poor version of roundl for system that don't have ceill. */ +long double +roundl(long double x) +{ + if (x > DBL_MAX || x < -DBL_MAX) + { +#ifdef HAVE_NEXTAFTERL + static long double prechalf = nexafterl (0.5L, LDBL_MAX); +#else + static long double prechalf = 0.5L; +#endif + return (GFC_INTEGER_LARGEST) (x + (x > 0 ? prechalf : -prechalf)); + } + else + /* Use round(). */ + return round((double) x); +} + +#endif +#endif + +#ifndef HAVE_ROUND +#define HAVE_ROUND 1 +/* Round to nearest integral value. If the argument is halfway between two + integral values then round away from zero. */ + +double +round(double x) +{ + double t; + if (!isfinite (x)) + return (x); + + if (x >= 0.0) + { + t = ceil(x); + if (t - x > 0.5) + t -= 1.0; + return (t); + } + else + { + t = ceil(-x); + if (t + x > 0.5) + t -= 1.0; + return (-t); + } +} +#endif + +#ifndef HAVE_ROUNDF +#define HAVE_ROUNDF 1 +/* Round to nearest integral value. If the argument is halfway between two + integral values then round away from zero. */ + +float +roundf(float x) +{ + float t; + if (!isfinite (x)) + return (x); + + if (x >= 0.0) + { + t = ceilf(x); + if (t - x > 0.5) + t -= 1.0; + return (t); + } + else + { + t = ceilf(-x); + if (t + x > 0.5) + t -= 1.0; + return (-t); + } +} +#endif + + +/* lround{f,,l} and llround{f,,l} functions. */ + +#if !defined(HAVE_LROUNDF) && defined(HAVE_ROUNDF) +#define HAVE_LROUNDF 1 +long int +lroundf (float x) +{ + return (long int) roundf (x); +} +#endif + +#if !defined(HAVE_LROUND) && defined(HAVE_ROUND) +#define HAVE_LROUND 1 +long int +lround (double x) +{ + return (long int) round (x); +} +#endif + +#if !defined(HAVE_LROUNDL) && defined(HAVE_ROUNDL) +#define HAVE_LROUNDL 1 +long int +lroundl (long double x) +{ + return (long long int) roundl (x); +} +#endif + +#if !defined(HAVE_LLROUNDF) && defined(HAVE_ROUNDF) +#define HAVE_LLROUNDF 1 +long long int +llroundf (float x) +{ + return (long long int) roundf (x); +} +#endif + +#if !defined(HAVE_LLROUND) && defined(HAVE_ROUND) +#define HAVE_LLROUND 1 +long long int +llround (double x) +{ + return (long long int) round (x); +} +#endif + +#if !defined(HAVE_LLROUNDL) && defined(HAVE_ROUNDL) +#define HAVE_LLROUNDL 1 +long long int +llroundl (long double x) +{ + return (long long int) roundl (x); +} +#endif + + +#ifndef HAVE_LOG10L +#define HAVE_LOG10L 1 +/* log10 function for long double variables. The version provided here + reduces the argument until it fits into a double, then use log10. */ +long double +log10l(long double x) +{ +#if LDBL_MAX_EXP > DBL_MAX_EXP + if (x > DBL_MAX) + { + double val; + int p2_result = 0; + if (x > 0x1p16383L) { p2_result += 16383; x /= 0x1p16383L; } + if (x > 0x1p8191L) { p2_result += 8191; x /= 0x1p8191L; } + if (x > 0x1p4095L) { p2_result += 4095; x /= 0x1p4095L; } + if (x > 0x1p2047L) { p2_result += 2047; x /= 0x1p2047L; } + if (x > 0x1p1023L) { p2_result += 1023; x /= 0x1p1023L; } + val = log10 ((double) x); + return (val + p2_result * .30102999566398119521373889472449302L); + } +#endif +#if LDBL_MIN_EXP < DBL_MIN_EXP + if (x < DBL_MIN) + { + double val; + int p2_result = 0; + if (x < 0x1p-16380L) { p2_result += 16380; x /= 0x1p-16380L; } + if (x < 0x1p-8189L) { p2_result += 8189; x /= 0x1p-8189L; } + if (x < 0x1p-4093L) { p2_result += 4093; x /= 0x1p-4093L; } + if (x < 0x1p-2045L) { p2_result += 2045; x /= 0x1p-2045L; } + if (x < 0x1p-1021L) { p2_result += 1021; x /= 0x1p-1021L; } + val = fabs(log10 ((double) x)); + return (- val - p2_result * .30102999566398119521373889472449302L); + } +#endif + return log10 (x); +} +#endif + + +#ifndef HAVE_FLOORL +#define HAVE_FLOORL 1 +long double +floorl (long double x) +{ + /* Zero, possibly signed. */ + if (x == 0) + return x; + + /* Large magnitude. */ + if (x > DBL_MAX || x < (-DBL_MAX)) + return x; + + /* Small positive values. */ + if (x >= 0 && x < DBL_MIN) + return 0; + + /* Small negative values. */ + if (x < 0 && x > (-DBL_MIN)) + return -1; + + return floor (x); +} +#endif + + +#ifndef HAVE_FMODL +#define HAVE_FMODL 1 +long double +fmodl (long double x, long double y) +{ + if (y == 0.0L) + return 0.0L; + + /* Need to check that the result has the same sign as x and magnitude + less than the magnitude of y. */ + return x - floorl (x / y) * y; +} +#endif + + +#if !defined(HAVE_CABSF) +#define HAVE_CABSF 1 +float +cabsf (float complex z) +{ + return hypotf (REALPART (z), IMAGPART (z)); +} +#endif + +#if !defined(HAVE_CABS) +#define HAVE_CABS 1 +double +cabs (double complex z) +{ + return hypot (REALPART (z), IMAGPART (z)); +} +#endif + +#if !defined(HAVE_CABSL) && defined(HAVE_HYPOTL) +#define HAVE_CABSL 1 +long double +cabsl (long double complex z) +{ + return hypotl (REALPART (z), IMAGPART (z)); +} +#endif + + +#if !defined(HAVE_CARGF) +#define HAVE_CARGF 1 +float +cargf (float complex z) +{ + return atan2f (IMAGPART (z), REALPART (z)); +} +#endif + +#if !defined(HAVE_CARG) +#define HAVE_CARG 1 +double +carg (double complex z) +{ + return atan2 (IMAGPART (z), REALPART (z)); +} +#endif + +#if !defined(HAVE_CARGL) && defined(HAVE_ATAN2L) +#define HAVE_CARGL 1 +long double +cargl (long double complex z) +{ + return atan2l (IMAGPART (z), REALPART (z)); +} +#endif + + +/* exp(z) = exp(a)*(cos(b) + i sin(b)) */ +#if !defined(HAVE_CEXPF) +#define HAVE_CEXPF 1 +float complex +cexpf (float complex z) +{ + float a, b; + float complex v; + + a = REALPART (z); + b = IMAGPART (z); + COMPLEX_ASSIGN (v, cosf (b), sinf (b)); + return expf (a) * v; +} +#endif + +#if !defined(HAVE_CEXP) +#define HAVE_CEXP 1 +double complex +cexp (double complex z) +{ + double a, b; + double complex v; + + a = REALPART (z); + b = IMAGPART (z); + COMPLEX_ASSIGN (v, cos (b), sin (b)); + return exp (a) * v; +} +#endif + +#if !defined(HAVE_CEXPL) && defined(HAVE_COSL) && defined(HAVE_SINL) && defined(EXPL) +#define HAVE_CEXPL 1 +long double complex +cexpl (long double complex z) +{ + long double a, b; + long double complex v; + + a = REALPART (z); + b = IMAGPART (z); + COMPLEX_ASSIGN (v, cosl (b), sinl (b)); + return expl (a) * v; +} +#endif + + +/* log(z) = log (cabs(z)) + i*carg(z) */ +#if !defined(HAVE_CLOGF) +#define HAVE_CLOGF 1 +float complex +clogf (float complex z) +{ + float complex v; + + COMPLEX_ASSIGN (v, logf (cabsf (z)), cargf (z)); + return v; +} +#endif + +#if !defined(HAVE_CLOG) +#define HAVE_CLOG 1 +double complex +clog (double complex z) +{ + double complex v; + + COMPLEX_ASSIGN (v, log (cabs (z)), carg (z)); + return v; +} +#endif + +#if !defined(HAVE_CLOGL) && defined(HAVE_LOGL) && defined(HAVE_CABSL) && defined(HAVE_CARGL) +#define HAVE_CLOGL 1 +long double complex +clogl (long double complex z) +{ + long double complex v; + + COMPLEX_ASSIGN (v, logl (cabsl (z)), cargl (z)); + return v; +} +#endif + + +/* log10(z) = log10 (cabs(z)) + i*carg(z) */ +#if !defined(HAVE_CLOG10F) +#define HAVE_CLOG10F 1 +float complex +clog10f (float complex z) +{ + float complex v; + + COMPLEX_ASSIGN (v, log10f (cabsf (z)), cargf (z)); + return v; +} +#endif + +#if !defined(HAVE_CLOG10) +#define HAVE_CLOG10 1 +double complex +clog10 (double complex z) +{ + double complex v; + + COMPLEX_ASSIGN (v, log10 (cabs (z)), carg (z)); + return v; +} +#endif + +#if !defined(HAVE_CLOG10L) && defined(HAVE_LOG10L) && defined(HAVE_CABSL) && defined(HAVE_CARGL) +#define HAVE_CLOG10L 1 +long double complex +clog10l (long double complex z) +{ + long double complex v; + + COMPLEX_ASSIGN (v, log10l (cabsl (z)), cargl (z)); + return v; +} +#endif + + +/* pow(base, power) = cexp (power * clog (base)) */ +#if !defined(HAVE_CPOWF) +#define HAVE_CPOWF 1 +float complex +cpowf (float complex base, float complex power) +{ + return cexpf (power * clogf (base)); +} +#endif + +#if !defined(HAVE_CPOW) +#define HAVE_CPOW 1 +double complex +cpow (double complex base, double complex power) +{ + return cexp (power * clog (base)); +} +#endif + +#if !defined(HAVE_CPOWL) && defined(HAVE_CEXPL) && defined(HAVE_CLOGL) +#define HAVE_CPOWL 1 +long double complex +cpowl (long double complex base, long double complex power) +{ + return cexpl (power * clogl (base)); +} +#endif + + +/* sqrt(z). Algorithm pulled from glibc. */ +#if !defined(HAVE_CSQRTF) +#define HAVE_CSQRTF 1 +float complex +csqrtf (float complex z) +{ + float re, im; + float complex v; + + re = REALPART (z); + im = IMAGPART (z); + if (im == 0) + { + if (re < 0) + { + COMPLEX_ASSIGN (v, 0, copysignf (sqrtf (-re), im)); + } + else + { + COMPLEX_ASSIGN (v, fabsf (sqrtf (re)), copysignf (0, im)); + } + } + else if (re == 0) + { + float r; + + r = sqrtf (0.5 * fabsf (im)); + + COMPLEX_ASSIGN (v, r, copysignf (r, im)); + } + else + { + float d, r, s; + + d = hypotf (re, im); + /* Use the identity 2 Re res Im res = Im x + to avoid cancellation error in d +/- Re x. */ + if (re > 0) + { + r = sqrtf (0.5 * d + 0.5 * re); + s = (0.5 * im) / r; + } + else + { + s = sqrtf (0.5 * d - 0.5 * re); + r = fabsf ((0.5 * im) / s); + } + + COMPLEX_ASSIGN (v, r, copysignf (s, im)); + } + return v; +} +#endif + +#if !defined(HAVE_CSQRT) +#define HAVE_CSQRT 1 +double complex +csqrt (double complex z) +{ + double re, im; + double complex v; + + re = REALPART (z); + im = IMAGPART (z); + if (im == 0) + { + if (re < 0) + { + COMPLEX_ASSIGN (v, 0, copysign (sqrt (-re), im)); + } + else + { + COMPLEX_ASSIGN (v, fabs (sqrt (re)), copysign (0, im)); + } + } + else if (re == 0) + { + double r; + + r = sqrt (0.5 * fabs (im)); + + COMPLEX_ASSIGN (v, r, copysign (r, im)); + } + else + { + double d, r, s; + + d = hypot (re, im); + /* Use the identity 2 Re res Im res = Im x + to avoid cancellation error in d +/- Re x. */ + if (re > 0) + { + r = sqrt (0.5 * d + 0.5 * re); + s = (0.5 * im) / r; + } + else + { + s = sqrt (0.5 * d - 0.5 * re); + r = fabs ((0.5 * im) / s); + } + + COMPLEX_ASSIGN (v, r, copysign (s, im)); + } + return v; +} +#endif + +#if !defined(HAVE_CSQRTL) && defined(HAVE_COPYSIGNL) && defined(HAVE_SQRTL) && defined(HAVE_FABSL) && defined(HAVE_HYPOTL) +#define HAVE_CSQRTL 1 +long double complex +csqrtl (long double complex z) +{ + long double re, im; + long double complex v; + + re = REALPART (z); + im = IMAGPART (z); + if (im == 0) + { + if (re < 0) + { + COMPLEX_ASSIGN (v, 0, copysignl (sqrtl (-re), im)); + } + else + { + COMPLEX_ASSIGN (v, fabsl (sqrtl (re)), copysignl (0, im)); + } + } + else if (re == 0) + { + long double r; + + r = sqrtl (0.5 * fabsl (im)); + + COMPLEX_ASSIGN (v, copysignl (r, im), r); + } + else + { + long double d, r, s; + + d = hypotl (re, im); + /* Use the identity 2 Re res Im res = Im x + to avoid cancellation error in d +/- Re x. */ + if (re > 0) + { + r = sqrtl (0.5 * d + 0.5 * re); + s = (0.5 * im) / r; + } + else + { + s = sqrtl (0.5 * d - 0.5 * re); + r = fabsl ((0.5 * im) / s); + } + + COMPLEX_ASSIGN (v, r, copysignl (s, im)); + } + return v; +} +#endif + + +/* sinh(a + i b) = sinh(a) cos(b) + i cosh(a) sin(b) */ +#if !defined(HAVE_CSINHF) +#define HAVE_CSINHF 1 +float complex +csinhf (float complex a) +{ + float r, i; + float complex v; + + r = REALPART (a); + i = IMAGPART (a); + COMPLEX_ASSIGN (v, sinhf (r) * cosf (i), coshf (r) * sinf (i)); + return v; +} +#endif + +#if !defined(HAVE_CSINH) +#define HAVE_CSINH 1 +double complex +csinh (double complex a) +{ + double r, i; + double complex v; + + r = REALPART (a); + i = IMAGPART (a); + COMPLEX_ASSIGN (v, sinh (r) * cos (i), cosh (r) * sin (i)); + return v; +} +#endif + +#if !defined(HAVE_CSINHL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL) +#define HAVE_CSINHL 1 +long double complex +csinhl (long double complex a) +{ + long double r, i; + long double complex v; + + r = REALPART (a); + i = IMAGPART (a); + COMPLEX_ASSIGN (v, sinhl (r) * cosl (i), coshl (r) * sinl (i)); + return v; +} +#endif + + +/* cosh(a + i b) = cosh(a) cos(b) - i sinh(a) sin(b) */ +#if !defined(HAVE_CCOSHF) +#define HAVE_CCOSHF 1 +float complex +ccoshf (float complex a) +{ + float r, i; + float complex v; + + r = REALPART (a); + i = IMAGPART (a); + COMPLEX_ASSIGN (v, coshf (r) * cosf (i), - (sinhf (r) * sinf (i))); + return v; +} +#endif + +#if !defined(HAVE_CCOSH) +#define HAVE_CCOSH 1 +double complex +ccosh (double complex a) +{ + double r, i; + double complex v; + + r = REALPART (a); + i = IMAGPART (a); + COMPLEX_ASSIGN (v, cosh (r) * cos (i), - (sinh (r) * sin (i))); + return v; +} +#endif + +#if !defined(HAVE_CCOSHL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL) +#define HAVE_CCOSHL 1 +long double complex +ccoshl (long double complex a) +{ + long double r, i; + long double complex v; + + r = REALPART (a); + i = IMAGPART (a); + COMPLEX_ASSIGN (v, coshl (r) * cosl (i), - (sinhl (r) * sinl (i))); + return v; +} +#endif + + +/* tanh(a + i b) = (tanh(a) + i tan(b)) / (1 - i tanh(a) tan(b)) */ +#if !defined(HAVE_CTANHF) +#define HAVE_CTANHF 1 +float complex +ctanhf (float complex a) +{ + float rt, it; + float complex n, d; + + rt = tanhf (REALPART (a)); + it = tanf (IMAGPART (a)); + COMPLEX_ASSIGN (n, rt, it); + COMPLEX_ASSIGN (d, 1, - (rt * it)); + + return n / d; +} +#endif + +#if !defined(HAVE_CTANH) +#define HAVE_CTANH 1 +double complex +ctanh (double complex a) +{ + double rt, it; + double complex n, d; + + rt = tanh (REALPART (a)); + it = tan (IMAGPART (a)); + COMPLEX_ASSIGN (n, rt, it); + COMPLEX_ASSIGN (d, 1, - (rt * it)); + + return n / d; +} +#endif + +#if !defined(HAVE_CTANHL) && defined(HAVE_TANL) && defined(HAVE_TANHL) +#define HAVE_CTANHL 1 +long double complex +ctanhl (long double complex a) +{ + long double rt, it; + long double complex n, d; + + rt = tanhl (REALPART (a)); + it = tanl (IMAGPART (a)); + COMPLEX_ASSIGN (n, rt, it); + COMPLEX_ASSIGN (d, 1, - (rt * it)); + + return n / d; +} +#endif + + +/* sin(a + i b) = sin(a) cosh(b) + i cos(a) sinh(b) */ +#if !defined(HAVE_CSINF) +#define HAVE_CSINF 1 +float complex +csinf (float complex a) +{ + float r, i; + float complex v; + + r = REALPART (a); + i = IMAGPART (a); + COMPLEX_ASSIGN (v, sinf (r) * coshf (i), cosf (r) * sinhf (i)); + return v; +} +#endif + +#if !defined(HAVE_CSIN) +#define HAVE_CSIN 1 +double complex +csin (double complex a) +{ + double r, i; + double complex v; + + r = REALPART (a); + i = IMAGPART (a); + COMPLEX_ASSIGN (v, sin (r) * cosh (i), cos (r) * sinh (i)); + return v; +} +#endif + +#if !defined(HAVE_CSINL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL) +#define HAVE_CSINL 1 +long double complex +csinl (long double complex a) +{ + long double r, i; + long double complex v; + + r = REALPART (a); + i = IMAGPART (a); + COMPLEX_ASSIGN (v, sinl (r) * coshl (i), cosl (r) * sinhl (i)); + return v; +} +#endif + + +/* cos(a + i b) = cos(a) cosh(b) - i sin(a) sinh(b) */ +#if !defined(HAVE_CCOSF) +#define HAVE_CCOSF 1 +float complex +ccosf (float complex a) +{ + float r, i; + float complex v; + + r = REALPART (a); + i = IMAGPART (a); + COMPLEX_ASSIGN (v, cosf (r) * coshf (i), - (sinf (r) * sinhf (i))); + return v; +} +#endif + +#if !defined(HAVE_CCOS) +#define HAVE_CCOS 1 +double complex +ccos (double complex a) +{ + double r, i; + double complex v; + + r = REALPART (a); + i = IMAGPART (a); + COMPLEX_ASSIGN (v, cos (r) * cosh (i), - (sin (r) * sinh (i))); + return v; +} +#endif + +#if !defined(HAVE_CCOSL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL) +#define HAVE_CCOSL 1 +long double complex +ccosl (long double complex a) +{ + long double r, i; + long double complex v; + + r = REALPART (a); + i = IMAGPART (a); + COMPLEX_ASSIGN (v, cosl (r) * coshl (i), - (sinl (r) * sinhl (i))); + return v; +} +#endif + + +/* tan(a + i b) = (tan(a) + i tanh(b)) / (1 - i tan(a) tanh(b)) */ +#if !defined(HAVE_CTANF) +#define HAVE_CTANF 1 +float complex +ctanf (float complex a) +{ + float rt, it; + float complex n, d; + + rt = tanf (REALPART (a)); + it = tanhf (IMAGPART (a)); + COMPLEX_ASSIGN (n, rt, it); + COMPLEX_ASSIGN (d, 1, - (rt * it)); + + return n / d; +} +#endif + +#if !defined(HAVE_CTAN) +#define HAVE_CTAN 1 +double complex +ctan (double complex a) +{ + double rt, it; + double complex n, d; + + rt = tan (REALPART (a)); + it = tanh (IMAGPART (a)); + COMPLEX_ASSIGN (n, rt, it); + COMPLEX_ASSIGN (d, 1, - (rt * it)); + + return n / d; +} +#endif + +#if !defined(HAVE_CTANL) && defined(HAVE_TANL) && defined(HAVE_TANHL) +#define HAVE_CTANL 1 +long double complex +ctanl (long double complex a) +{ + long double rt, it; + long double complex n, d; + + rt = tanl (REALPART (a)); + it = tanhl (IMAGPART (a)); + COMPLEX_ASSIGN (n, rt, it); + COMPLEX_ASSIGN (d, 1, - (rt * it)); + + return n / d; +} +#endif + + +#if !defined(HAVE_TGAMMA) +#define HAVE_TGAMMA 1 + +extern double tgamma (double); + +/* Fallback tgamma() function. Uses the algorithm from + http://www.netlib.org/specfun/gamma and references therein. */ + +#undef SQRTPI +#define SQRTPI 0.9189385332046727417803297 + +#undef PI +#define PI 3.1415926535897932384626434 + +double +tgamma (double x) +{ + int i, n, parity; + double fact, res, sum, xden, xnum, y, y1, ysq, z; + + static double p[8] = { + -1.71618513886549492533811e0, 2.47656508055759199108314e1, + -3.79804256470945635097577e2, 6.29331155312818442661052e2, + 8.66966202790413211295064e2, -3.14512729688483675254357e4, + -3.61444134186911729807069e4, 6.64561438202405440627855e4 }; + + static double q[8] = { + -3.08402300119738975254353e1, 3.15350626979604161529144e2, + -1.01515636749021914166146e3, -3.10777167157231109440444e3, + 2.25381184209801510330112e4, 4.75584627752788110767815e3, + -1.34659959864969306392456e5, -1.15132259675553483497211e5 }; + + static double c[7] = { -1.910444077728e-03, + 8.4171387781295e-04, -5.952379913043012e-04, + 7.93650793500350248e-04, -2.777777777777681622553e-03, + 8.333333333333333331554247e-02, 5.7083835261e-03 }; + + static const double xminin = 2.23e-308; + static const double xbig = 171.624; + static const double xnan = __builtin_nan ("0x0"), xinf = __builtin_inf (); + static double eps = 0; + + if (eps == 0) + eps = nextafter(1., 2.) - 1.; + + parity = 0; + fact = 1; + n = 0; + y = x; + + if (__builtin_isnan (x)) + return x; + + if (y <= 0) + { + y = -x; + y1 = trunc(y); + res = y - y1; + + if (res != 0) + { + if (y1 != trunc(y1*0.5l)*2) + parity = 1; + fact = -PI / sin(PI*res); + y = y + 1; + } + else + return x == 0 ? copysign (xinf, x) : xnan; + } + + if (y < eps) + { + if (y >= xminin) + res = 1 / y; + else + return xinf; + } + else if (y < 13) + { + y1 = y; + if (y < 1) + { + z = y; + y = y + 1; + } + else + { + n = (int)y - 1; + y = y - n; + z = y - 1; + } + + xnum = 0; + xden = 1; + for (i = 0; i < 8; i++) + { + xnum = (xnum + p[i]) * z; + xden = xden * z + q[i]; + } + + res = xnum / xden + 1; + + if (y1 < y) + res = res / y1; + else if (y1 > y) + for (i = 1; i <= n; i++) + { + res = res * y; + y = y + 1; + } + } + else + { + if (y < xbig) + { + ysq = y * y; + sum = c[6]; + for (i = 0; i < 6; i++) + sum = sum / ysq + c[i]; + + sum = sum/y - y + SQRTPI; + sum = sum + (y - 0.5) * log(y); + res = exp(sum); + } + else + return x < 0 ? xnan : xinf; + } + + if (parity) + res = -res; + if (fact != 1) + res = fact / res; + + return res; +} +#endif + + + +#if !defined(HAVE_LGAMMA) +#define HAVE_LGAMMA 1 + +extern double lgamma (double); + +/* Fallback lgamma() function. Uses the algorithm from + http://www.netlib.org/specfun/algama and references therein, + except for negative arguments (where netlib would return +Inf) + where we use the following identity: + lgamma(y) = log(pi/(|y*sin(pi*y)|)) - lgamma(-y) + */ + +double +lgamma (double y) +{ + +#undef SQRTPI +#define SQRTPI 0.9189385332046727417803297 + +#undef PI +#define PI 3.1415926535897932384626434 + +#define PNT68 0.6796875 +#define D1 -0.5772156649015328605195174 +#define D2 0.4227843350984671393993777 +#define D4 1.791759469228055000094023 + + static double p1[8] = { + 4.945235359296727046734888e0, 2.018112620856775083915565e2, + 2.290838373831346393026739e3, 1.131967205903380828685045e4, + 2.855724635671635335736389e4, 3.848496228443793359990269e4, + 2.637748787624195437963534e4, 7.225813979700288197698961e3 }; + static double q1[8] = { + 6.748212550303777196073036e1, 1.113332393857199323513008e3, + 7.738757056935398733233834e3, 2.763987074403340708898585e4, + 5.499310206226157329794414e4, 6.161122180066002127833352e4, + 3.635127591501940507276287e4, 8.785536302431013170870835e3 }; + static double p2[8] = { + 4.974607845568932035012064e0, 5.424138599891070494101986e2, + 1.550693864978364947665077e4, 1.847932904445632425417223e5, + 1.088204769468828767498470e6, 3.338152967987029735917223e6, + 5.106661678927352456275255e6, 3.074109054850539556250927e6 }; + static double q2[8] = { + 1.830328399370592604055942e2, 7.765049321445005871323047e3, + 1.331903827966074194402448e5, 1.136705821321969608938755e6, + 5.267964117437946917577538e6, 1.346701454311101692290052e7, + 1.782736530353274213975932e7, 9.533095591844353613395747e6 }; + static double p4[8] = { + 1.474502166059939948905062e4, 2.426813369486704502836312e6, + 1.214755574045093227939592e8, 2.663432449630976949898078e9, + 2.940378956634553899906876e10, 1.702665737765398868392998e11, + 4.926125793377430887588120e11, 5.606251856223951465078242e11 }; + static double q4[8] = { + 2.690530175870899333379843e3, 6.393885654300092398984238e5, + 4.135599930241388052042842e7, 1.120872109616147941376570e9, + 1.488613728678813811542398e10, 1.016803586272438228077304e11, + 3.417476345507377132798597e11, 4.463158187419713286462081e11 }; + static double c[7] = { + -1.910444077728e-03, 8.4171387781295e-04, + -5.952379913043012e-04, 7.93650793500350248e-04, + -2.777777777777681622553e-03, 8.333333333333333331554247e-02, + 5.7083835261e-03 }; + + static double xbig = 2.55e305, xinf = __builtin_inf (), eps = 0, + frtbig = 2.25e76; + + int i; + double corr, res, xden, xm1, xm2, xm4, xnum, ysq; + + if (eps == 0) + eps = __builtin_nextafter(1., 2.) - 1.; + + if ((y > 0) && (y <= xbig)) + { + if (y <= eps) + res = -log(y); + else if (y <= 1.5) + { + if (y < PNT68) + { + corr = -log(y); + xm1 = y; + } + else + { + corr = 0; + xm1 = (y - 0.5) - 0.5; + } + + if ((y <= 0.5) || (y >= PNT68)) + { + xden = 1; + xnum = 0; + for (i = 0; i < 8; i++) + { + xnum = xnum*xm1 + p1[i]; + xden = xden*xm1 + q1[i]; + } + res = corr + (xm1 * (D1 + xm1*(xnum/xden))); + } + else + { + xm2 = (y - 0.5) - 0.5; + xden = 1; + xnum = 0; + for (i = 0; i < 8; i++) + { + xnum = xnum*xm2 + p2[i]; + xden = xden*xm2 + q2[i]; + } + res = corr + xm2 * (D2 + xm2*(xnum/xden)); + } + } + else if (y <= 4) + { + xm2 = y - 2; + xden = 1; + xnum = 0; + for (i = 0; i < 8; i++) + { + xnum = xnum*xm2 + p2[i]; + xden = xden*xm2 + q2[i]; + } + res = xm2 * (D2 + xm2*(xnum/xden)); + } + else if (y <= 12) + { + xm4 = y - 4; + xden = -1; + xnum = 0; + for (i = 0; i < 8; i++) + { + xnum = xnum*xm4 + p4[i]; + xden = xden*xm4 + q4[i]; + } + res = D4 + xm4*(xnum/xden); + } + else + { + res = 0; + if (y <= frtbig) + { + res = c[6]; + ysq = y * y; + for (i = 0; i < 6; i++) + res = res / ysq + c[i]; + } + res = res/y; + corr = log(y); + res = res + SQRTPI - 0.5*corr; + res = res + y*(corr-1); + } + } + else if (y < 0 && __builtin_floor (y) != y) + { + /* lgamma(y) = log(pi/(|y*sin(pi*y)|)) - lgamma(-y) + For abs(y) very close to zero, we use a series expansion to + the first order in y to avoid overflow. */ + if (y > -1.e-100) + res = -2 * log (fabs (y)) - lgamma (-y); + else + res = log (PI / fabs (y * sin (PI * y))) - lgamma (-y); + } + else + res = xinf; + + return res; +} +#endif + + +#if defined(HAVE_TGAMMA) && !defined(HAVE_TGAMMAF) +#define HAVE_TGAMMAF 1 +extern float tgammaf (float); + +float +tgammaf (float x) +{ + return (float) tgamma ((double) x); +} +#endif + +#if defined(HAVE_LGAMMA) && !defined(HAVE_LGAMMAF) +#define HAVE_LGAMMAF 1 +extern float lgammaf (float); + +float +lgammaf (float x) +{ + return (float) lgamma ((double) x); +} +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/chdir.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/chdir.c new file mode 100644 index 0000000000..62f46931bd --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/chdir.c @@ -0,0 +1,111 @@ +/* Implementation of the CHDIR intrinsic. + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +/* SUBROUTINE CHDIR(DIR, STATUS) + CHARACTER(len=*), INTENT(IN) :: DIR + INTEGER, INTENT(OUT), OPTIONAL :: STATUS */ + +#ifdef HAVE_CHDIR +extern void chdir_i4_sub (char *, GFC_INTEGER_4 *, gfc_charlen_type); +iexport_proto(chdir_i4_sub); + +void +chdir_i4_sub (char *dir, GFC_INTEGER_4 *status, gfc_charlen_type dir_len) +{ + int val; + char *str; + + /* Trim trailing spaces from paths. */ + while (dir_len > 0 && dir[dir_len - 1] == ' ') + dir_len--; + + /* Make a null terminated copy of the strings. */ + str = gfc_alloca (dir_len + 1); + memcpy (str, dir, dir_len); + str[dir_len] = '\0'; + + val = chdir (str); + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} +iexport(chdir_i4_sub); + +extern void chdir_i8_sub (char *, GFC_INTEGER_8 *, gfc_charlen_type); +iexport_proto(chdir_i8_sub); + +void +chdir_i8_sub (char *dir, GFC_INTEGER_8 *status, gfc_charlen_type dir_len) +{ + int val; + char *str; + + /* Trim trailing spaces from paths. */ + while (dir_len > 0 && dir[dir_len - 1] == ' ') + dir_len--; + + /* Make a null terminated copy of the strings. */ + str = gfc_alloca (dir_len + 1); + memcpy (str, dir, dir_len); + str[dir_len] = '\0'; + + val = chdir (str); + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} +iexport(chdir_i8_sub); + +extern GFC_INTEGER_4 chdir_i4 (char *, gfc_charlen_type); +export_proto(chdir_i4); + +GFC_INTEGER_4 +chdir_i4 (char *dir, gfc_charlen_type dir_len) +{ + GFC_INTEGER_4 val; + chdir_i4_sub (dir, &val, dir_len); + return val; +} + +extern GFC_INTEGER_8 chdir_i8 (char *, gfc_charlen_type); +export_proto(chdir_i8); + +GFC_INTEGER_8 +chdir_i8 (char *dir, gfc_charlen_type dir_len) +{ + GFC_INTEGER_8 val; + chdir_i8_sub (dir, &val, dir_len); + return val; +} +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/chmod.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/chmod.c new file mode 100644 index 0000000000..cf768ff002 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/chmod.c @@ -0,0 +1,120 @@ +/* Implementation of the CHMOD intrinsic. + Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_SYS_WAIT_H +#include +#endif + +/* INTEGER FUNCTION ACCESS(NAME, MODE) + CHARACTER(len=*), INTENT(IN) :: NAME, MODE */ + +#if defined(HAVE_FORK) && defined(HAVE_EXECL) && defined(HAVE_WAIT) + +extern int chmod_func (char *, char *, gfc_charlen_type, gfc_charlen_type); +export_proto(chmod_func); + +int +chmod_func (char *name, char *mode, gfc_charlen_type name_len, + gfc_charlen_type mode_len) +{ + char * file, * m; + pid_t pid; + int status; + + /* Trim trailing spaces. */ + while (name_len > 0 && name[name_len - 1] == ' ') + name_len--; + while (mode_len > 0 && mode[mode_len - 1] == ' ') + mode_len--; + + /* Make a null terminated copy of the strings. */ + file = gfc_alloca (name_len + 1); + memcpy (file, name, name_len); + file[name_len] = '\0'; + + m = gfc_alloca (mode_len + 1); + memcpy (m, mode, mode_len); + m[mode_len]= '\0'; + + /* Execute /bin/chmod. */ + if ((pid = fork()) < 0) + return errno; + if (pid == 0) + { + /* Child process. */ + execl ("/bin/chmod", "chmod", m, file, (char *) NULL); + return errno; + } + else + wait (&status); + + if (WIFEXITED(status)) + return WEXITSTATUS(status); + else + return -1; +} + + + +extern void chmod_i4_sub (char *, char *, GFC_INTEGER_4 *, + gfc_charlen_type, gfc_charlen_type); +export_proto(chmod_i4_sub); + +void +chmod_i4_sub (char *name, char *mode, GFC_INTEGER_4 * status, + gfc_charlen_type name_len, gfc_charlen_type mode_len) +{ + int val; + + val = chmod_func (name, mode, name_len, mode_len); + if (status) + *status = val; +} + + +extern void chmod_i8_sub (char *, char *, GFC_INTEGER_8 *, + gfc_charlen_type, gfc_charlen_type); +export_proto(chmod_i8_sub); + +void +chmod_i8_sub (char *name, char *mode, GFC_INTEGER_8 * status, + gfc_charlen_type name_len, gfc_charlen_type mode_len) +{ + int val; + + val = chmod_func (name, mode, name_len, mode_len); + if (status) + *status = val; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/clock.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/clock.c new file mode 100644 index 0000000000..b1d61d8866 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/clock.c @@ -0,0 +1,72 @@ +/* Implementation of the MCLOCK and MCLOCK8 g77 intrinsics. + Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#ifdef TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# ifdef HAVE_TIME_H +# include +# endif +# endif +#endif + + +/* INTEGER(KIND=4) FUNCTION MCLOCK() */ + +extern GFC_INTEGER_4 mclock (void); +export_proto(mclock); + +GFC_INTEGER_4 +mclock (void) +{ +#ifdef HAVE_CLOCK + return (GFC_INTEGER_4) clock (); +#else + return (GFC_INTEGER_4) -1; +#endif +} + + +/* INTEGER(KIND=8) FUNCTION MCLOCK8() */ + +extern GFC_INTEGER_8 mclock8 (void); +export_proto(mclock8); + +GFC_INTEGER_8 +mclock8 (void) +{ +#ifdef HAVE_CLOCK + return (GFC_INTEGER_8) clock (); +#else + return (GFC_INTEGER_8) -1; +#endif +} + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/cpu_time.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/cpu_time.c new file mode 100644 index 0000000000..0ac502340a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/cpu_time.c @@ -0,0 +1,137 @@ +/* Implementation of the CPU_TIME intrinsic. + Copyright (C) 2003, 2007, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include "time_1.h" + +/* The most accurate way to get the CPU time is getrusage (). + If we have times(), that's good enough, too. */ +#if !defined (HAVE_GETRUSAGE) || !defined (HAVE_SYS_RESOURCE_H) +/* For times(), we _must_ know the number of clock ticks per second. */ +# if defined (HAVE_TIMES) && (defined (HZ) || defined (_SC_CLK_TCK) || defined (CLK_TCK)) +# ifdef HAVE_SYS_PARAM_H +# include +# endif +# if defined (HAVE_SYS_TIMES_H) +# include +# endif +# ifndef HZ +# if defined _SC_CLK_TCK +# define HZ sysconf(_SC_CLK_TCK) +# else +# define HZ CLK_TCK +# endif +# endif +# endif /* HAVE_TIMES etc. */ +#endif /* !HAVE_GETRUSAGE || !HAVE_SYS_RESOURCE_H */ + +static inline void __cpu_time_1 (long *, long *) ATTRIBUTE_ALWAYS_INLINE; + +static inline void +__cpu_time_1 (long *sec, long *usec) +{ +#if defined(__MINGW32__) || defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H) + long user_sec, user_usec, system_sec, system_usec; + __time_1 (&user_sec, &user_usec, &system_sec, &system_usec); + *sec = user_sec + system_sec; + *usec = user_usec + system_usec; +#else /* ! HAVE_GETRUSAGE || ! HAVE_SYS_RESOURCE_H */ +#ifdef HAVE_TIMES + struct tms buf; + times (&buf); + *sec = 0; + *usec = (buf.tms_utime + buf.tms_stime) * (1000000 / HZ); +#else /* ! HAVE_TIMES */ + /* We have nothing to go on. Return -1. */ + *sec = -1; + *usec = 0; +#endif /* HAVE_TIMES */ +#endif /* __MINGW32__ || HAVE_GETRUSAGE */ +} + + +extern void cpu_time_4 (GFC_REAL_4 *); +iexport_proto(cpu_time_4); + +void cpu_time_4 (GFC_REAL_4 *time) +{ + long sec, usec; + __cpu_time_1 (&sec, &usec); + *time = sec + usec * (GFC_REAL_4)1.e-6; +} +iexport(cpu_time_4); + +extern void cpu_time_8 (GFC_REAL_8 *); +export_proto(cpu_time_8); + +void cpu_time_8 (GFC_REAL_8 *time) +{ + long sec, usec; + __cpu_time_1 (&sec, &usec); + *time = sec + usec * (GFC_REAL_8)1.e-6; +} + +#ifdef HAVE_GFC_REAL_10 +extern void cpu_time_10 (GFC_REAL_10 *); +export_proto(cpu_time_10); + +void cpu_time_10 (GFC_REAL_10 *time) +{ + long sec, usec; + __cpu_time_1 (&sec, &usec); + *time = sec + usec * (GFC_REAL_10)1.e-6; +} +#endif + +#ifdef HAVE_GFC_REAL_16 +extern void cpu_time_16 (GFC_REAL_16 *); +export_proto(cpu_time_16); + +void cpu_time_16 (GFC_REAL_16 *time) +{ + long sec, usec; + __cpu_time_1 (&sec, &usec); + *time = sec + usec * (GFC_REAL_16)1.e-6; +} +#endif + +extern void second_sub (GFC_REAL_4 *); +export_proto(second_sub); + +void +second_sub (GFC_REAL_4 *s) +{ + cpu_time_4 (s); +} + +extern GFC_REAL_4 second (void); +export_proto(second); + +GFC_REAL_4 +second (void) +{ + GFC_REAL_4 s; + cpu_time_4 (&s); + return s; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/cshift0.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/cshift0.c new file mode 100644 index 0000000000..ce49832f3a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/cshift0.c @@ -0,0 +1,432 @@ +/* Generic implementation of the CSHIFT intrinsic + Copyright 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Feng Wang + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + +static void +cshift0 (gfc_array_char * ret, const gfc_array_char * array, + ssize_t shift, int which, index_type size) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + char *rptr; + + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const char *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + index_type arraysize; + + index_type type_size; + + if (which < 1 || which > GFC_DESCRIPTOR_RANK (array)) + runtime_error ("Argument 'DIM' is out of range in call to 'CSHIFT'"); + + arraysize = size0 ((array_t *) array); + + if (ret->data == NULL) + { + int i; + + ret->offset = 0; + ret->dtype = array->dtype; + for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++) + { + ret->dim[i].lbound = 0; + ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound; + + if (i == 0) + ret->dim[i].stride = 1; + else + ret->dim[i].stride = (ret->dim[i-1].ubound + 1) + * ret->dim[i-1].stride; + } + + if (arraysize > 0) + ret->data = internal_malloc_size (size * arraysize); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + + if (arraysize == 0) + return; + type_size = GFC_DTYPE_TYPE_SIZE (array); + + switch(type_size) + { + case GFC_DTYPE_LOGICAL_1: + case GFC_DTYPE_INTEGER_1: + case GFC_DTYPE_DERIVED_1: + cshift0_i1 ((gfc_array_i1 *)ret, (gfc_array_i1 *) array, shift, which); + return; + + case GFC_DTYPE_LOGICAL_2: + case GFC_DTYPE_INTEGER_2: + cshift0_i2 ((gfc_array_i2 *)ret, (gfc_array_i2 *) array, shift, which); + return; + + case GFC_DTYPE_LOGICAL_4: + case GFC_DTYPE_INTEGER_4: + cshift0_i4 ((gfc_array_i4 *)ret, (gfc_array_i4 *) array, shift, which); + return; + + case GFC_DTYPE_LOGICAL_8: + case GFC_DTYPE_INTEGER_8: + cshift0_i8 ((gfc_array_i8 *)ret, (gfc_array_i8 *) array, shift, which); + return; + +#ifdef HAVE_GFC_INTEGER_16 + case GFC_DTYPE_LOGICAL_16: + case GFC_DTYPE_INTEGER_16: + cshift0_i16 ((gfc_array_i16 *)ret, (gfc_array_i16 *) array, shift, + which); + return; +#endif + + case GFC_DTYPE_REAL_4: + cshift0_r4 ((gfc_array_r4 *)ret, (gfc_array_r4 *) array, shift, which); + return; + + case GFC_DTYPE_REAL_8: + cshift0_r8 ((gfc_array_r8 *)ret, (gfc_array_r8 *) array, shift, which); + return; + +#ifdef HAVE_GFC_REAL_10 + case GFC_DTYPE_REAL_10: + cshift0_r10 ((gfc_array_r10 *)ret, (gfc_array_r10 *) array, shift, + which); + return; +#endif + +#ifdef HAVE_GFC_REAL_16 + case GFC_DTYPE_REAL_16: + cshift0_r16 ((gfc_array_r16 *)ret, (gfc_array_r16 *) array, shift, + which); + return; +#endif + + case GFC_DTYPE_COMPLEX_4: + cshift0_c4 ((gfc_array_c4 *)ret, (gfc_array_c4 *) array, shift, which); + return; + + case GFC_DTYPE_COMPLEX_8: + cshift0_c8 ((gfc_array_c8 *)ret, (gfc_array_c8 *) array, shift, which); + return; + +#ifdef HAVE_GFC_COMPLEX_10 + case GFC_DTYPE_COMPLEX_10: + cshift0_c10 ((gfc_array_c10 *)ret, (gfc_array_c10 *) array, shift, + which); + return; +#endif + +#ifdef HAVE_GFC_COMPLEX_16 + case GFC_DTYPE_COMPLEX_16: + cshift0_c16 ((gfc_array_c16 *)ret, (gfc_array_c16 *) array, shift, + which); + return; +#endif + + default: + break; + } + + switch (size) + { + /* Let's check the actual alignment of the data pointers. If they + are suitably aligned, we can safely call the unpack functions. */ + + case sizeof (GFC_INTEGER_1): + cshift0_i1 ((gfc_array_i1 *) ret, (gfc_array_i1 *) array, shift, + which); + break; + + case sizeof (GFC_INTEGER_2): + if (GFC_UNALIGNED_2(ret->data) || GFC_UNALIGNED_2(array->data)) + break; + else + { + cshift0_i2 ((gfc_array_i2 *) ret, (gfc_array_i2 *) array, shift, + which); + return; + } + + case sizeof (GFC_INTEGER_4): + if (GFC_UNALIGNED_4(ret->data) || GFC_UNALIGNED_4(array->data)) + break; + else + { + cshift0_i4 ((gfc_array_i4 *)ret, (gfc_array_i4 *) array, shift, + which); + return; + } + + case sizeof (GFC_INTEGER_8): + if (GFC_UNALIGNED_8(ret->data) || GFC_UNALIGNED_8(array->data)) + { + /* Let's try to use the complex routines. First, a sanity + check that the sizes match; this should be optimized to + a no-op. */ + if (sizeof(GFC_INTEGER_8) != sizeof(GFC_COMPLEX_4)) + break; + + if (GFC_UNALIGNED_C4(ret->data) || GFC_UNALIGNED_C4(array->data)) + break; + + cshift0_c4 ((gfc_array_c4 *) ret, (gfc_array_c4 *) array, shift, + which); + return; + } + else + { + cshift0_i8 ((gfc_array_i8 *)ret, (gfc_array_i8 *) array, shift, + which); + return; + } + +#ifdef HAVE_GFC_INTEGER_16 + case sizeof (GFC_INTEGER_16): + if (GFC_UNALIGNED_16(ret->data) || GFC_UNALIGNED_16(array->data)) + { + /* Let's try to use the complex routines. First, a sanity + check that the sizes match; this should be optimized to + a no-op. */ + if (sizeof(GFC_INTEGER_16) != sizeof(GFC_COMPLEX_8)) + break; + + if (GFC_UNALIGNED_C8(ret->data) || GFC_UNALIGNED_C8(array->data)) + break; + + cshift0_c8 ((gfc_array_c8 *) ret, (gfc_array_c8 *) array, shift, + which); + return; + } + else + { + cshift0_i16 ((gfc_array_i16 *) ret, (gfc_array_i16 *) array, + shift, which); + return; + } +#else + case sizeof (GFC_COMPLEX_8): + + if (GFC_UNALIGNED_C8(ret->data) || GFC_UNALIGNED_C8(array->data)) + break; + else + { + cshift0_c8 ((gfc_array_c8 *) ret, (gfc_array_c8 *) array, shift, + which); + return; + } +#endif + + default: + break; + } + + + which = which - 1; + sstride[0] = 0; + rstride[0] = 0; + + extent[0] = 1; + count[0] = 0; + n = 0; + /* Initialized for avoiding compiler warnings. */ + roffset = size; + soffset = size; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride * size; + if (roffset == 0) + roffset = size; + soffset = array->dim[dim].stride * size; + if (soffset == 0) + soffset = size; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride * size; + sstride[n] = array->dim[dim].stride * size; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = size; + if (rstride[0] == 0) + rstride[0] = size; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + shift = len == 0 ? 0 : shift % (ssize_t)len; + if (shift < 0) + shift += len; + + while (rptr) + { + /* Do the shift for this dimension. */ + + /* If elements are contiguous, perform the operation + in two block moves. */ + if (soffset == size && roffset == size) + { + size_t len1 = shift * size; + size_t len2 = (len - shift) * size; + memcpy (rptr, sptr + len1, len2); + memcpy (rptr + len2, sptr, len1); + } + else + { + /* Otherwise, we'll have to perform the copy one element at + a time. */ + char *dest = rptr; + const char *src = &sptr[shift * soffset]; + + for (n = 0; n < len - shift; n++) + { + memcpy (dest, src, size); + dest += roffset; + src += soffset; + } + for (src = sptr, n = 0; n < shift; n++) + { + memcpy (dest, src, size); + dest += roffset; + src += soffset; + } + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } +} + +#define DEFINE_CSHIFT(N) \ + extern void cshift0_##N (gfc_array_char *, const gfc_array_char *, \ + const GFC_INTEGER_##N *, const GFC_INTEGER_##N *); \ + export_proto(cshift0_##N); \ + \ + void \ + cshift0_##N (gfc_array_char *ret, const gfc_array_char *array, \ + const GFC_INTEGER_##N *pshift, const GFC_INTEGER_##N *pdim) \ + { \ + cshift0 (ret, array, *pshift, pdim ? *pdim : 1, \ + GFC_DESCRIPTOR_SIZE (array)); \ + } \ + \ + extern void cshift0_##N##_char (gfc_array_char *, GFC_INTEGER_4, \ + const gfc_array_char *, \ + const GFC_INTEGER_##N *, \ + const GFC_INTEGER_##N *, GFC_INTEGER_4); \ + export_proto(cshift0_##N##_char); \ + \ + void \ + cshift0_##N##_char (gfc_array_char *ret, \ + GFC_INTEGER_4 ret_length __attribute__((unused)), \ + const gfc_array_char *array, \ + const GFC_INTEGER_##N *pshift, \ + const GFC_INTEGER_##N *pdim, \ + GFC_INTEGER_4 array_length) \ + { \ + cshift0 (ret, array, *pshift, pdim ? *pdim : 1, array_length); \ + } \ + \ + extern void cshift0_##N##_char4 (gfc_array_char *, GFC_INTEGER_4, \ + const gfc_array_char *, \ + const GFC_INTEGER_##N *, \ + const GFC_INTEGER_##N *, GFC_INTEGER_4); \ + export_proto(cshift0_##N##_char4); \ + \ + void \ + cshift0_##N##_char4 (gfc_array_char *ret, \ + GFC_INTEGER_4 ret_length __attribute__((unused)), \ + const gfc_array_char *array, \ + const GFC_INTEGER_##N *pshift, \ + const GFC_INTEGER_##N *pdim, \ + GFC_INTEGER_4 array_length) \ + { \ + cshift0 (ret, array, *pshift, pdim ? *pdim : 1, \ + array_length * sizeof (gfc_char4_t)); \ + } + +DEFINE_CSHIFT (1); +DEFINE_CSHIFT (2); +DEFINE_CSHIFT (4); +DEFINE_CSHIFT (8); +#ifdef HAVE_GFC_INTEGER_16 +DEFINE_CSHIFT (16); +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/ctime.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/ctime.c new file mode 100644 index 0000000000..98bf29d7d2 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/ctime.c @@ -0,0 +1,154 @@ +/* Implementation of the CTIME and FDATE g77 intrinsics. + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#ifdef TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# ifdef HAVE_TIME_H +# include +# endif +# endif +#endif + +#include + + +extern void fdate (char **, gfc_charlen_type *); +export_proto(fdate); + +void +fdate (char ** date, gfc_charlen_type * date_len) +{ +#if defined(HAVE_TIME) && defined(HAVE_CTIME) + int i; + time_t now = time(NULL); + *date = ctime (&now); + if (*date != NULL) + { + *date = strdup (*date); + *date_len = strlen (*date); + + i = 0; + while ((*date)[i]) + { + if ((*date)[i] == '\n') + (*date)[i] = ' '; + i++; + } + return; + } +#endif + + *date = NULL; + *date_len = 0; +} + + +extern void fdate_sub (char *, gfc_charlen_type); +export_proto(fdate_sub); + +void +fdate_sub (char * date, gfc_charlen_type date_len) +{ +#if defined(HAVE_TIME) && defined(HAVE_CTIME) + int i; + char *d; + time_t now = time(NULL); +#endif + + memset (date, ' ', date_len); +#if defined(HAVE_TIME) && defined(HAVE_CTIME) + d = ctime (&now); + if (d != NULL) + { + i = 0; + while (*d && *d != '\n' && i < date_len) + date[i++] = *(d++); + } +#endif +} + + + +extern void PREFIX(ctime) (char **, gfc_charlen_type *, GFC_INTEGER_8); +export_proto_np(PREFIX(ctime)); + +void +PREFIX(ctime) (char ** date, gfc_charlen_type * date_len, GFC_INTEGER_8 t) +{ +#if defined(HAVE_CTIME) + time_t now = t; + int i; + *date = ctime (&now); + if (*date != NULL) + { + *date = strdup (*date); + *date_len = strlen (*date); + + i = 0; + while ((*date)[i]) + { + if ((*date)[i] == '\n') + (*date)[i] = ' '; + i++; + } + return; + } +#endif + + *date = NULL; + *date_len = 0; +} + + +extern void ctime_sub (GFC_INTEGER_8 *, char *, gfc_charlen_type); +export_proto(ctime_sub); + +void +ctime_sub (GFC_INTEGER_8 * t, char * date, gfc_charlen_type date_len) +{ +#if defined(HAVE_CTIME) + int i; + char *d; + time_t now = *t; +#endif + + memset (date, ' ', date_len); +#if defined(HAVE_CTIME) + d = ctime (&now); + if (d != NULL) + { + i = 0; + while (*d && *d != '\n' && i < date_len) + date[i++] = *(d++); + } +#endif +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/date_and_time.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/date_and_time.c new file mode 100644 index 0000000000..2aac5ecd0d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/date_and_time.c @@ -0,0 +1,692 @@ +/* Implementation of the DATE_AND_TIME intrinsic. + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009 + Free Software Foundation, Inc. + Contributed by Steven Bosscher. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + +#undef HAVE_NO_DATE_TIME +#if TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# ifdef HAVE_TIME_H +# include +# else +# define HAVE_NO_DATE_TIME +# endif /* HAVE_TIME_H */ +# endif /* HAVE_SYS_TIME_H */ +#endif /* TIME_WITH_SYS_TIME */ + +#ifndef abs +#define abs(x) ((x)>=0 ? (x) : -(x)) +#endif + +/* DATE_AND_TIME ([DATE, TIME, ZONE, VALUES]) + + Description: Returns data on the real-time clock and date in a form + compatible with the representations defined in ISO 8601:1988. + + Class: Non-elemental subroutine. + + Arguments: + + DATE (optional) shall be scalar and of type default character, and + shall be of length at least 8 in order to contain the complete + value. It is an INTENT(OUT) argument. Its leftmost 8 characters + are assigned a value of the form CCYYMMDD, where CC is the century, + YY the year within the century, MM the month within the year, and + DD the day within the month. If there is no date available, they + are assigned blanks. + + TIME (optional) shall be scalar and of type default character, and + shall be of length at least 10 in order to contain the complete + value. It is an INTENT(OUT) argument. Its leftmost 10 characters + are assigned a value of the form hhmmss.sss, where hh is the hour + of the day, mm is the minutes of the hour, and ss.sss is the + seconds and milliseconds of the minute. If there is no clock + available, they are assigned blanks. + + ZONE (optional) shall be scalar and of type default character, and + shall be of length at least 5 in order to contain the complete + value. It is an INTENT(OUT) argument. Its leftmost 5 characters + are assigned a value of the form [+-]hhmm, where hh and mm are the + time difference with respect to Coordinated Universal Time (UTC) in + hours and parts of an hour expressed in minutes, respectively. If + there is no clock available, they are assigned blanks. + + VALUES (optional) shall be of type default integer and of rank + one. It is an INTENT(OUT) argument. Its size shall be at least + 8. The values returned in VALUES are as follows: + + VALUES(1) the year (for example, 2003), or -HUGE(0) if there is + no date available; + + VALUES(2) the month of the year, or -HUGE(0) if there + is no date available; + + VALUES(3) the day of the month, or -HUGE(0) if there is no date + available; + + VALUES(4) the time difference with respect to Coordinated + Universal Time (UTC) in minutes, or -HUGE(0) if this information + is not available; + + VALUES(5) the hour of the day, in the range of 0 to 23, or + -HUGE(0) if there is no clock; + + VALUES(6) the minutes of the hour, in the range 0 to 59, or + -HUGE(0) if there is no clock; + + VALUES(7) the seconds of the minute, in the range 0 to 60, or + -HUGE(0) if there is no clock; + + VALUES(8) the milliseconds of the second, in the range 0 to + 999, or -HUGE(0) if there is no clock. + + NULL pointer represent missing OPTIONAL arguments. All arguments + have INTENT(OUT). Because of the -i8 option, we must implement + VALUES for INTEGER(kind=4) and INTEGER(kind=8). + + Based on libU77's date_time_.c. + + TODO : + - Check year boundaries. +*/ +#define DATE_LEN 8 +#define TIME_LEN 10 +#define ZONE_LEN 5 +#define VALUES_SIZE 8 + +extern void date_and_time (char *, char *, char *, gfc_array_i4 *, + GFC_INTEGER_4, GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(date_and_time); + +void +date_and_time (char *__date, char *__time, char *__zone, + gfc_array_i4 *__values, GFC_INTEGER_4 __date_len, + GFC_INTEGER_4 __time_len, GFC_INTEGER_4 __zone_len) +{ + int i; + char date[DATE_LEN + 1]; + char timec[TIME_LEN + 1]; + char zone[ZONE_LEN + 1]; + GFC_INTEGER_4 values[VALUES_SIZE]; + +#ifndef HAVE_NO_DATE_TIME + time_t lt; + struct tm local_time; + struct tm UTC_time; + +#if HAVE_GETTIMEOFDAY + { + struct timeval tp; + + if (!gettimeofday (&tp, NULL)) + { + lt = tp.tv_sec; + values[7] = tp.tv_usec / 1000; + } + else + { + lt = time (NULL); + values[7] = 0; + } + } +#else + lt = time (NULL); + values[7] = 0; +#endif /* HAVE_GETTIMEOFDAY */ + + if (lt != (time_t) -1) + { + local_time = *localtime (<); + UTC_time = *gmtime (<); + + /* All arguments can be derived from VALUES. */ + values[0] = 1900 + local_time.tm_year; + values[1] = 1 + local_time.tm_mon; + values[2] = local_time.tm_mday; + values[3] = (local_time.tm_min - UTC_time.tm_min + + 60 * (local_time.tm_hour - UTC_time.tm_hour + + 24 * (local_time.tm_yday - UTC_time.tm_yday))); + values[4] = local_time.tm_hour; + values[5] = local_time.tm_min; + values[6] = local_time.tm_sec; + +#if HAVE_SNPRINTF + if (__date) + snprintf (date, DATE_LEN + 1, "%04d%02d%02d", + values[0], values[1], values[2]); + if (__time) + snprintf (timec, TIME_LEN + 1, "%02d%02d%02d.%03d", + values[4], values[5], values[6], values[7]); + + if (__zone) + snprintf (zone, ZONE_LEN + 1, "%+03d%02d", + values[3] / 60, abs (values[3] % 60)); +#else + if (__date) + sprintf (date, "%04d%02d%02d", values[0], values[1], values[2]); + + if (__time) + sprintf (timec, "%02d%02d%02d.%03d", + values[4], values[5], values[6], values[7]); + + if (__zone) + sprintf (zone, "%+03d%02d", + values[3] / 60, abs (values[3] % 60)); +#endif + } + else + { + memset (date, ' ', DATE_LEN); + date[DATE_LEN] = '\0'; + + memset (timec, ' ', TIME_LEN); + timec[TIME_LEN] = '\0'; + + memset (zone, ' ', ZONE_LEN); + zone[ZONE_LEN] = '\0'; + + for (i = 0; i < VALUES_SIZE; i++) + values[i] = - GFC_INTEGER_4_HUGE; + } +#else /* if defined HAVE_NO_DATE_TIME */ + /* We really have *nothing* to return, so return blanks and HUGE(0). */ + + memset (date, ' ', DATE_LEN); + date[DATE_LEN] = '\0'; + + memset (timec, ' ', TIME_LEN); + timec[TIME_LEN] = '\0'; + + memset (zone, ' ', ZONE_LEN); + zone[ZONE_LEN] = '\0'; + + for (i = 0; i < VALUES_SIZE; i++) + values[i] = - GFC_INTEGER_4_HUGE; +#endif /* HAVE_NO_DATE_TIME */ + + /* Copy the values into the arguments. */ + if (__values) + { + size_t len, delta, elt_size; + + elt_size = GFC_DESCRIPTOR_SIZE (__values); + len = __values->dim[0].ubound + 1 - __values->dim[0].lbound; + delta = __values->dim[0].stride; + if (delta == 0) + delta = 1; + + assert (len >= VALUES_SIZE); + /* Cope with different type kinds. */ + if (elt_size == 4) + { + GFC_INTEGER_4 *vptr4 = __values->data; + + for (i = 0; i < VALUES_SIZE; i++, vptr4 += delta) + *vptr4 = values[i]; + } + else if (elt_size == 8) + { + GFC_INTEGER_8 *vptr8 = (GFC_INTEGER_8 *)__values->data; + + for (i = 0; i < VALUES_SIZE; i++, vptr8 += delta) + { + if (values[i] == - GFC_INTEGER_4_HUGE) + *vptr8 = - GFC_INTEGER_8_HUGE; + else + *vptr8 = values[i]; + } + } + else + abort (); + } + + if (__zone) + { + assert (__zone_len >= ZONE_LEN); + fstrcpy (__zone, ZONE_LEN, zone, ZONE_LEN); + } + + if (__time) + { + assert (__time_len >= TIME_LEN); + fstrcpy (__time, TIME_LEN, timec, TIME_LEN); + } + + if (__date) + { + assert (__date_len >= DATE_LEN); + fstrcpy (__date, DATE_LEN, date, DATE_LEN); + } +} + + +/* SECNDS (X) - Non-standard + + Description: Returns the system time of day, or elapsed time, as a GFC_REAL_4 + in seconds. + + Class: Non-elemental subroutine. + + Arguments: + + X must be REAL(4) and the result is of the same type. The accuracy is system + dependent. + + Usage: + + T = SECNDS (X) + + yields the time in elapsed seconds since X. If X is 0.0, T is the time in + seconds since midnight. Note that a time that spans midnight but is less than + 24hours will be calculated correctly. */ + +extern GFC_REAL_4 secnds (GFC_REAL_4 *); +export_proto(secnds); + +GFC_REAL_4 +secnds (GFC_REAL_4 *x) +{ + GFC_INTEGER_4 values[VALUES_SIZE]; + GFC_REAL_4 temp1, temp2; + + /* Make the INTEGER*4 array for passing to date_and_time. */ + gfc_array_i4 *avalues = internal_malloc_size (sizeof (gfc_array_i4)); + avalues->data = &values[0]; + GFC_DESCRIPTOR_DTYPE (avalues) = ((GFC_DTYPE_REAL << GFC_DTYPE_TYPE_SHIFT) + & GFC_DTYPE_TYPE_MASK) + + (4 << GFC_DTYPE_SIZE_SHIFT); + + avalues->dim[0].ubound = 7; + avalues->dim[0].lbound = 0; + avalues->dim[0].stride = 1; + + date_and_time (NULL, NULL, NULL, avalues, 0, 0, 0); + + free_mem (avalues); + + temp1 = 3600.0 * (GFC_REAL_4)values[4] + + 60.0 * (GFC_REAL_4)values[5] + + (GFC_REAL_4)values[6] + + 0.001 * (GFC_REAL_4)values[7]; + temp2 = fmod (*x, 86400.0); + temp2 = (temp1 - temp2 >= 0.0) ? temp2 : (temp2 - 86400.0); + return temp1 - temp2; +} + + + +/* ITIME(X) - Non-standard + + Description: Returns the current local time hour, minutes, and seconds + in elements 1, 2, and 3 of X, respectively. */ + +static void +itime0 (int x[3]) +{ +#ifndef HAVE_NO_DATE_TIME + time_t lt; + struct tm local_time; + + lt = time (NULL); + + if (lt != (time_t) -1) + { + local_time = *localtime (<); + + x[0] = local_time.tm_hour; + x[1] = local_time.tm_min; + x[2] = local_time.tm_sec; + } +#else + x[0] = x[1] = x[2] = -1; +#endif +} + +extern void itime_i4 (gfc_array_i4 *); +export_proto(itime_i4); + +void +itime_i4 (gfc_array_i4 *__values) +{ + int x[3], i; + size_t len, delta; + GFC_INTEGER_4 *vptr; + + /* Call helper function. */ + itime0(x); + + /* Copy the value into the array. */ + len = __values->dim[0].ubound + 1 - __values->dim[0].lbound; + assert (len >= 3); + delta = __values->dim[0].stride; + if (delta == 0) + delta = 1; + + vptr = __values->data; + for (i = 0; i < 3; i++, vptr += delta) + *vptr = x[i]; +} + + +extern void itime_i8 (gfc_array_i8 *); +export_proto(itime_i8); + +void +itime_i8 (gfc_array_i8 *__values) +{ + int x[3], i; + size_t len, delta; + GFC_INTEGER_8 *vptr; + + /* Call helper function. */ + itime0(x); + + /* Copy the value into the array. */ + len = __values->dim[0].ubound + 1 - __values->dim[0].lbound; + assert (len >= 3); + delta = __values->dim[0].stride; + if (delta == 0) + delta = 1; + + vptr = __values->data; + for (i = 0; i < 3; i++, vptr += delta) + *vptr = x[i]; +} + + + +/* IDATE(X) - Non-standard + + Description: Fills TArray with the numerical values at the current + local time. The day (in the range 1-31), month (in the range 1-12), + and year appear in elements 1, 2, and 3 of X, respectively. + The year has four significant digits. */ + +static void +idate0 (int x[3]) +{ +#ifndef HAVE_NO_DATE_TIME + time_t lt; + struct tm local_time; + + lt = time (NULL); + + if (lt != (time_t) -1) + { + local_time = *localtime (<); + + x[0] = local_time.tm_mday; + x[1] = 1 + local_time.tm_mon; + x[2] = 1900 + local_time.tm_year; + } +#else + x[0] = x[1] = x[2] = -1; +#endif +} + +extern void idate_i4 (gfc_array_i4 *); +export_proto(idate_i4); + +void +idate_i4 (gfc_array_i4 *__values) +{ + int x[3], i; + size_t len, delta; + GFC_INTEGER_4 *vptr; + + /* Call helper function. */ + idate0(x); + + /* Copy the value into the array. */ + len = __values->dim[0].ubound + 1 - __values->dim[0].lbound; + assert (len >= 3); + delta = __values->dim[0].stride; + if (delta == 0) + delta = 1; + + vptr = __values->data; + for (i = 0; i < 3; i++, vptr += delta) + *vptr = x[i]; +} + + +extern void idate_i8 (gfc_array_i8 *); +export_proto(idate_i8); + +void +idate_i8 (gfc_array_i8 *__values) +{ + int x[3], i; + size_t len, delta; + GFC_INTEGER_8 *vptr; + + /* Call helper function. */ + idate0(x); + + /* Copy the value into the array. */ + len = __values->dim[0].ubound + 1 - __values->dim[0].lbound; + assert (len >= 3); + delta = __values->dim[0].stride; + if (delta == 0) + delta = 1; + + vptr = __values->data; + for (i = 0; i < 3; i++, vptr += delta) + *vptr = x[i]; +} + + + +/* GMTIME(STIME, TARRAY) - Non-standard + + Description: Given a system time value STime, fills TArray with values + extracted from it appropriate to the GMT time zone using gmtime(3). + + The array elements are as follows: + + 1. Seconds after the minute, range 0-59 or 0-61 to allow for leap seconds + 2. Minutes after the hour, range 0-59 + 3. Hours past midnight, range 0-23 + 4. Day of month, range 0-31 + 5. Number of months since January, range 0-11 + 6. Years since 1900 + 7. Number of days since Sunday, range 0-6 + 8. Days since January 1 + 9. Daylight savings indicator: positive if daylight savings is in effect, + zero if not, and negative if the information isn't available. */ + +static void +gmtime_0 (const time_t * t, int x[9]) +{ + struct tm lt; + + lt = *gmtime (t); + x[0] = lt.tm_sec; + x[1] = lt.tm_min; + x[2] = lt.tm_hour; + x[3] = lt.tm_mday; + x[4] = lt.tm_mon; + x[5] = lt.tm_year; + x[6] = lt.tm_wday; + x[7] = lt.tm_yday; + x[8] = lt.tm_isdst; +} + +extern void gmtime_i4 (GFC_INTEGER_4 *, gfc_array_i4 *); +export_proto(gmtime_i4); + +void +gmtime_i4 (GFC_INTEGER_4 * t, gfc_array_i4 * tarray) +{ + int x[9], i; + size_t len, delta; + GFC_INTEGER_4 *vptr; + time_t tt; + + /* Call helper function. */ + tt = (time_t) *t; + gmtime_0(&tt, x); + + /* Copy the values into the array. */ + len = tarray->dim[0].ubound + 1 - tarray->dim[0].lbound; + assert (len >= 9); + delta = tarray->dim[0].stride; + if (delta == 0) + delta = 1; + + vptr = tarray->data; + for (i = 0; i < 9; i++, vptr += delta) + *vptr = x[i]; +} + +extern void gmtime_i8 (GFC_INTEGER_8 *, gfc_array_i8 *); +export_proto(gmtime_i8); + +void +gmtime_i8 (GFC_INTEGER_8 * t, gfc_array_i8 * tarray) +{ + int x[9], i; + size_t len, delta; + GFC_INTEGER_8 *vptr; + time_t tt; + + /* Call helper function. */ + tt = (time_t) *t; + gmtime_0(&tt, x); + + /* Copy the values into the array. */ + len = tarray->dim[0].ubound + 1 - tarray->dim[0].lbound; + assert (len >= 9); + delta = tarray->dim[0].stride; + if (delta == 0) + delta = 1; + + vptr = tarray->data; + for (i = 0; i < 9; i++, vptr += delta) + *vptr = x[i]; +} + + + + +/* LTIME(STIME, TARRAY) - Non-standard + + Description: Given a system time value STime, fills TArray with values + extracted from it appropriate to the local time zone using localtime(3). + + The array elements are as follows: + + 1. Seconds after the minute, range 0-59 or 0-61 to allow for leap seconds + 2. Minutes after the hour, range 0-59 + 3. Hours past midnight, range 0-23 + 4. Day of month, range 0-31 + 5. Number of months since January, range 0-11 + 6. Years since 1900 + 7. Number of days since Sunday, range 0-6 + 8. Days since January 1 + 9. Daylight savings indicator: positive if daylight savings is in effect, + zero if not, and negative if the information isn't available. */ + +static void +ltime_0 (const time_t * t, int x[9]) +{ + struct tm lt; + + lt = *localtime (t); + x[0] = lt.tm_sec; + x[1] = lt.tm_min; + x[2] = lt.tm_hour; + x[3] = lt.tm_mday; + x[4] = lt.tm_mon; + x[5] = lt.tm_year; + x[6] = lt.tm_wday; + x[7] = lt.tm_yday; + x[8] = lt.tm_isdst; +} + +extern void ltime_i4 (GFC_INTEGER_4 *, gfc_array_i4 *); +export_proto(ltime_i4); + +void +ltime_i4 (GFC_INTEGER_4 * t, gfc_array_i4 * tarray) +{ + int x[9], i; + size_t len, delta; + GFC_INTEGER_4 *vptr; + time_t tt; + + /* Call helper function. */ + tt = (time_t) *t; + ltime_0(&tt, x); + + /* Copy the values into the array. */ + len = tarray->dim[0].ubound + 1 - tarray->dim[0].lbound; + assert (len >= 9); + delta = tarray->dim[0].stride; + if (delta == 0) + delta = 1; + + vptr = tarray->data; + for (i = 0; i < 9; i++, vptr += delta) + *vptr = x[i]; +} + +extern void ltime_i8 (GFC_INTEGER_8 *, gfc_array_i8 *); +export_proto(ltime_i8); + +void +ltime_i8 (GFC_INTEGER_8 * t, gfc_array_i8 * tarray) +{ + int x[9], i; + size_t len, delta; + GFC_INTEGER_8 *vptr; + time_t tt; + + /* Call helper function. */ + tt = (time_t) * t; + ltime_0(&tt, x); + + /* Copy the values into the array. */ + len = tarray->dim[0].ubound + 1 - tarray->dim[0].lbound; + assert (len >= 9); + delta = tarray->dim[0].stride; + if (delta == 0) + delta = 1; + + vptr = tarray->data; + for (i = 0; i < 9; i++, vptr += delta) + *vptr = x[i]; +} + + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/dprod_r8.f90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/dprod_r8.f90 new file mode 100644 index 0000000000..7eb0ede01e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/dprod_r8.f90 @@ -0,0 +1,32 @@ +! Copyright 2003, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!Libgfortran 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 3 of the License, or (at your option) any later version. +! +!Libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. + + +elemental function _gfortran_specific__dprod_r8 (p1, p2) + implicit none + real (kind=4), intent (in) :: p1, p2 + real (kind=8) :: _gfortran_specific__dprod_r8 + + _gfortran_specific__dprod_r8 = dprod (p1, p2) +end function diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/dtime.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/dtime.c new file mode 100644 index 0000000000..40028a689c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/dtime.c @@ -0,0 +1,81 @@ +/* Implementation of the dtime intrinsic. + Copyright (C) 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include "time_1.h" +#include + +#ifdef __GTHREAD_MUTEX_INIT +static __gthread_mutex_t dtime_update_lock = __GTHREAD_MUTEX_INIT; +#else +static __gthread_mutex_t dtime_update_lock; +#endif + +extern void dtime_sub (gfc_array_r4 *t, GFC_REAL_4 *result); +iexport_proto(dtime_sub); + +void +dtime_sub (gfc_array_r4 *t, GFC_REAL_4 *result) +{ + static GFC_REAL_4 tu = 0.0, ts = 0.0, tt = 0.0; + GFC_REAL_4 *tp; + long user_sec, user_usec, system_sec, system_usec; + + if (((t->dim[0].ubound + 1 - t->dim[0].lbound)) < 2) + runtime_error ("Insufficient number of elements in TARRAY."); + + __gthread_mutex_lock (&dtime_update_lock); + if (__time_1 (&user_sec, &user_usec, &system_sec, &system_usec) == 0) + { + tu = (GFC_REAL_4)(user_sec + 1.e-6 * user_usec) - tu; + ts = (GFC_REAL_4)(system_sec + 1.e-6 * system_usec) - ts; + tt = tu + ts; + } + else + { + tu = (GFC_REAL_4)-1.0; + ts = (GFC_REAL_4)-1.0; + tt = (GFC_REAL_4)-1.0; + } + + tp = t->data; + + *tp = tu; + tp += t->dim[0].stride; + *tp = ts; + *result = tt; + __gthread_mutex_unlock (&dtime_update_lock); +} +iexport(dtime_sub); + +extern GFC_REAL_4 dtime (gfc_array_r4 *t); +export_proto(dtime); + +GFC_REAL_4 +dtime (gfc_array_r4 *t) +{ + GFC_REAL_4 val; + dtime_sub (t, &val); + return val; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/env.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/env.c new file mode 100644 index 0000000000..8836038488 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/env.c @@ -0,0 +1,195 @@ +/* Implementation of the GETENV g77, and + GET_ENVIRONMENT_VARIABLE F2003, intrinsics. + Copyright (C) 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Janne Blomqvist. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + + +/* GETENV (NAME, VALUE), g77 intrinsic for retrieving the value of + an environment variable. The name of the variable is specified in + NAME, and the result is stored into VALUE. */ + +void PREFIX(getenv) (char *, char *, gfc_charlen_type, gfc_charlen_type); +export_proto_np(PREFIX(getenv)); + +void +PREFIX(getenv) (char * name, char * value, gfc_charlen_type name_len, + gfc_charlen_type value_len) +{ + char *name_nt; + char *res = NULL; + int res_len; + + if (name == NULL || value == NULL) + runtime_error ("Both arguments to getenv are mandatory."); + + if (value_len < 1 || name_len < 1) + runtime_error ("Zero length string(s) passed to getenv."); + else + memset (value, ' ', value_len); /* Blank the string. */ + + /* Trim trailing spaces from name. */ + while (name_len > 0 && name[name_len - 1] == ' ') + name_len--; + + /* Make a null terminated copy of the string. */ + name_nt = gfc_alloca (name_len + 1); + memcpy (name_nt, name, name_len); + name_nt[name_len] = '\0'; + + res = getenv(name_nt); + + /* If res is NULL, it means that the environment variable didn't + exist, so just return. */ + if (res == NULL) + return; + + res_len = strlen(res); + if (value_len < res_len) + memcpy (value, res, value_len); + else + memcpy (value, res, res_len); +} + + +/* GET_ENVIRONMENT_VARIABLE (name, [value, length, status, trim_name]) + is a F2003 intrinsic for getting an environment variable. */ + +/* Status codes specifyed by the standard. */ +#define GFC_SUCCESS 0 +#define GFC_VALUE_TOO_SHORT -1 +#define GFC_NAME_DOES_NOT_EXIST 1 + +/* This is also specified by the standard and means that the + processor doesn't support environment variables. At the moment, + gfortran doesn't use it. */ +#define GFC_NOT_SUPPORTED 2 + +/* Processor-specific failure code. */ +#define GFC_FAILURE 42 + +extern void get_environment_variable_i4 (char *, char *, GFC_INTEGER_4 *, + GFC_INTEGER_4 *, GFC_LOGICAL_4 *, + gfc_charlen_type, gfc_charlen_type); +iexport_proto(get_environment_variable_i4); + +void +get_environment_variable_i4 (char *name, char *value, GFC_INTEGER_4 *length, + GFC_INTEGER_4 *status, GFC_LOGICAL_4 *trim_name, + gfc_charlen_type name_len, + gfc_charlen_type value_len) +{ + int stat = GFC_SUCCESS, res_len = 0; + char *name_nt; + char *res; + + if (name == NULL) + runtime_error ("Name is required for get_environment_variable."); + + if (value == NULL && length == NULL && status == NULL && trim_name == NULL) + return; + + if (name_len < 1) + runtime_error ("Zero-length string passed as name to " + "get_environment_variable."); + + if (value != NULL) + { + if (value_len < 1) + runtime_error ("Zero-length string passed as value to " + "get_environment_variable."); + else + memset (value, ' ', value_len); /* Blank the string. */ + } + + if ((!trim_name) || *trim_name) + { + /* Trim trailing spaces from name. */ + while (name_len > 0 && name[name_len - 1] == ' ') + name_len--; + } + /* Make a null terminated copy of the name. */ + name_nt = gfc_alloca (name_len + 1); + memcpy (name_nt, name, name_len); + name_nt[name_len] = '\0'; + + res = getenv(name_nt); + + if (res == NULL) + stat = GFC_NAME_DOES_NOT_EXIST; + else + { + res_len = strlen(res); + if (value != NULL) + { + if (value_len < res_len) + { + memcpy (value, res, value_len); + stat = GFC_VALUE_TOO_SHORT; + } + else + memcpy (value, res, res_len); + } + } + + if (status != NULL) + *status = stat; + + if (length != NULL) + *length = res_len; +} +iexport(get_environment_variable_i4); + + +/* INTEGER*8 wrapper for get_environment_variable. */ + +extern void get_environment_variable_i8 (char *, char *, GFC_INTEGER_8 *, + GFC_INTEGER_8 *, GFC_LOGICAL_8 *, + gfc_charlen_type, gfc_charlen_type); +export_proto(get_environment_variable_i8); + +void +get_environment_variable_i8 (char *name, char *value, GFC_INTEGER_8 *length, + GFC_INTEGER_8 *status, GFC_LOGICAL_8 *trim_name, + gfc_charlen_type name_len, + gfc_charlen_type value_len) +{ + GFC_INTEGER_4 length4, status4; + GFC_LOGICAL_4 trim_name4; + + if (trim_name) + trim_name4 = *trim_name; + + get_environment_variable_i4 (name, value, &length4, &status4, + &trim_name4, name_len, value_len); + + if (length) + *length = length4; + + if (status) + *status = status4; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/eoshift0.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/eoshift0.c new file mode 100644 index 0000000000..6ac7c94a75 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/eoshift0.c @@ -0,0 +1,286 @@ +/* Generic implementation of the EOSHIFT intrinsic + Copyright 2002, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + +/* TODO: make this work for large shifts when + sizeof(int) < sizeof (index_type). */ + +static void +eoshift0 (gfc_array_char * ret, const gfc_array_char * array, + int shift, const char * pbound, int which, index_type size, + const char *filler, index_type filler_len) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + char * restrict rptr; + char *dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const char *sptr; + const char *src; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + + /* The compiler cannot figure out that these are set, initialize + them to avoid warnings. */ + len = 0; + soffset = 0; + roffset = 0; + + if (ret->data == NULL) + { + int i; + + ret->data = internal_malloc_size (size * size0 ((array_t *)array)); + ret->offset = 0; + ret->dtype = array->dtype; + for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++) + { + ret->dim[i].lbound = 0; + ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound; + + if (i == 0) + ret->dim[i].stride = 1; + else + ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride; + } + } + else + { + if (size0 ((array_t *) ret) == 0) + return; + } + + which = which - 1; + + extent[0] = 1; + count[0] = 0; + sstride[0] = -1; + rstride[0] = -1; + n = 0; + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride * size; + if (roffset == 0) + roffset = size; + soffset = array->dim[dim].stride * size; + if (soffset == 0) + soffset = size; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride * size; + sstride[n] = array->dim[dim].stride * size; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = size; + if (rstride[0] == 0) + rstride[0] = size; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + if ((shift >= 0 ? shift : -shift) > len) + { + shift = len; + len = 0; + } + else + { + if (shift > 0) + len = len - shift; + else + len = len + shift; + } + + while (rptr) + { + /* Do the shift for this dimension. */ + if (shift > 0) + { + src = &sptr[shift * soffset]; + dest = rptr; + } + else + { + src = sptr; + dest = &rptr[-shift * roffset]; + } + for (n = 0; n < len; n++) + { + memcpy (dest, src, size); + dest += roffset; + src += soffset; + } + if (shift >= 0) + { + n = shift; + } + else + { + dest = rptr; + n = -shift; + } + + if (pbound) + while (n--) + { + memcpy (dest, pbound, size); + dest += roffset; + } + else + while (n--) + { + index_type i; + + if (filler_len == 1) + memset (dest, filler[0], size); + else + for (i = 0; i < size ; i += filler_len) + memcpy (&dest[i], filler, filler_len); + + dest += roffset; + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } +} + + +#define DEFINE_EOSHIFT(N) \ + extern void eoshift0_##N (gfc_array_char *, const gfc_array_char *, \ + const GFC_INTEGER_##N *, const char *, \ + const GFC_INTEGER_##N *); \ + export_proto(eoshift0_##N); \ + \ + void \ + eoshift0_##N (gfc_array_char *ret, const gfc_array_char *array, \ + const GFC_INTEGER_##N *pshift, const char *pbound, \ + const GFC_INTEGER_##N *pdim) \ + { \ + eoshift0 (ret, array, *pshift, pbound, pdim ? *pdim : 1, \ + GFC_DESCRIPTOR_SIZE (array), "\0", 1); \ + } \ + \ + extern void eoshift0_##N##_char (gfc_array_char *, GFC_INTEGER_4, \ + const gfc_array_char *, \ + const GFC_INTEGER_##N *, const char *, \ + const GFC_INTEGER_##N *, GFC_INTEGER_4, \ + GFC_INTEGER_4); \ + export_proto(eoshift0_##N##_char); \ + \ + void \ + eoshift0_##N##_char (gfc_array_char *ret, \ + GFC_INTEGER_4 ret_length __attribute__((unused)), \ + const gfc_array_char *array, \ + const GFC_INTEGER_##N *pshift, \ + const char *pbound, \ + const GFC_INTEGER_##N *pdim, \ + GFC_INTEGER_4 array_length, \ + GFC_INTEGER_4 bound_length __attribute__((unused))) \ + { \ + eoshift0 (ret, array, *pshift, pbound, pdim ? *pdim : 1, \ + array_length, " ", 1); \ + } \ + \ + extern void eoshift0_##N##_char4 (gfc_array_char *, GFC_INTEGER_4, \ + const gfc_array_char *, \ + const GFC_INTEGER_##N *, const char *, \ + const GFC_INTEGER_##N *, GFC_INTEGER_4, \ + GFC_INTEGER_4); \ + export_proto(eoshift0_##N##_char4); \ + \ + void \ + eoshift0_##N##_char4 (gfc_array_char *ret, \ + GFC_INTEGER_4 ret_length __attribute__((unused)), \ + const gfc_array_char *array, \ + const GFC_INTEGER_##N *pshift, \ + const char *pbound, \ + const GFC_INTEGER_##N *pdim, \ + GFC_INTEGER_4 array_length, \ + GFC_INTEGER_4 bound_length __attribute__((unused))) \ + { \ + static const gfc_char4_t space = (unsigned char) ' '; \ + eoshift0 (ret, array, *pshift, pbound, pdim ? *pdim : 1, \ + array_length * sizeof (gfc_char4_t), (const char *) &space, \ + sizeof (gfc_char4_t)); \ + } + +DEFINE_EOSHIFT (1); +DEFINE_EOSHIFT (2); +DEFINE_EOSHIFT (4); +DEFINE_EOSHIFT (8); +#ifdef HAVE_GFC_INTEGER_16 +DEFINE_EOSHIFT (16); +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/eoshift2.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/eoshift2.c new file mode 100644 index 0000000000..763545a638 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/eoshift2.c @@ -0,0 +1,314 @@ +/* Generic implementation of the EOSHIFT intrinsic + Copyright 2002, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + +/* TODO: make this work for large shifts when + sizeof(int) < sizeof (index_type). */ + +static void +eoshift2 (gfc_array_char *ret, const gfc_array_char *array, + int shift, const gfc_array_char *bound, int which, + index_type size, const char *filler, index_type filler_len) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + char * restrict rptr; + char *dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const char *sptr; + const char *src; + /* b.* indicates the bound array. */ + index_type bstride[GFC_MAX_DIMENSIONS]; + index_type bstride0; + const char *bptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + index_type arraysize; + + /* The compiler cannot figure out that these are set, initialize + them to avoid warnings. */ + len = 0; + soffset = 0; + roffset = 0; + + arraysize = size0 ((array_t *) array); + + if (ret->data == NULL) + { + int i; + + ret->data = internal_malloc_size (size * arraysize); + ret->offset = 0; + ret->dtype = array->dtype; + for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++) + { + ret->dim[i].lbound = 0; + ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound; + + if (i == 0) + ret->dim[i].stride = 1; + else + ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride; + } + } + else + { + if (size0 ((array_t *) ret) == 0) + return; + } + + if (arraysize == 0 && filler == NULL) + return; + + which = which - 1; + + extent[0] = 1; + count[0] = 0; + sstride[0] = -1; + rstride[0] = -1; + bstride[0] = -1; + n = 0; + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride * size; + if (roffset == 0) + roffset = size; + soffset = array->dim[dim].stride * size; + if (soffset == 0) + soffset = size; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride * size; + sstride[n] = array->dim[dim].stride * size; + if (bound) + bstride[n] = bound->dim[n].stride * size; + else + bstride[n] = 0; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = size; + if (rstride[0] == 0) + rstride[0] = size; + if (bound && bstride[0] == 0) + bstride[0] = size; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + bstride0 = bstride[0]; + rptr = ret->data; + sptr = array->data; + + if ((shift >= 0 ? shift : -shift ) > len) + { + shift = len; + len = 0; + } + else + { + if (shift > 0) + len = len - shift; + else + len = len + shift; + } + + if (bound) + bptr = bound->data; + else + bptr = NULL; + + while (rptr) + { + /* Do the shift for this dimension. */ + if (shift > 0) + { + src = &sptr[shift * soffset]; + dest = rptr; + } + else + { + src = sptr; + dest = &rptr[-shift * roffset]; + } + for (n = 0; n < len; n++) + { + memcpy (dest, src, size); + dest += roffset; + src += soffset; + } + if (shift >= 0) + { + n = shift; + } + else + { + dest = rptr; + n = -shift; + } + + if (bptr) + while (n--) + { + memcpy (dest, bptr, size); + dest += roffset; + } + else + while (n--) + { + index_type i; + + if (filler_len == 1) + memset (dest, filler[0], size); + else + for (i = 0; i < size ; i += filler_len) + memcpy (&dest[i], filler, filler_len); + + dest += roffset; + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + bptr += bstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + bptr -= bstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + bptr += bstride[n]; + } + } + } +} + + +#define DEFINE_EOSHIFT(N) \ + extern void eoshift2_##N (gfc_array_char *, const gfc_array_char *, \ + const GFC_INTEGER_##N *, const gfc_array_char *, \ + const GFC_INTEGER_##N *); \ + export_proto(eoshift2_##N); \ + \ + void \ + eoshift2_##N (gfc_array_char *ret, const gfc_array_char *array, \ + const GFC_INTEGER_##N *pshift, const gfc_array_char *pbound, \ + const GFC_INTEGER_##N *pdim) \ + { \ + eoshift2 (ret, array, *pshift, pbound, pdim ? *pdim : 1, \ + GFC_DESCRIPTOR_SIZE (array), "\0", 1); \ + } \ + \ + extern void eoshift2_##N##_char (gfc_array_char *, GFC_INTEGER_4, \ + const gfc_array_char *, \ + const GFC_INTEGER_##N *, \ + const gfc_array_char *, \ + const GFC_INTEGER_##N *, \ + GFC_INTEGER_4, GFC_INTEGER_4); \ + export_proto(eoshift2_##N##_char); \ + \ + void \ + eoshift2_##N##_char (gfc_array_char *ret, \ + GFC_INTEGER_4 ret_length __attribute__((unused)), \ + const gfc_array_char *array, \ + const GFC_INTEGER_##N *pshift, \ + const gfc_array_char *pbound, \ + const GFC_INTEGER_##N *pdim, \ + GFC_INTEGER_4 array_length, \ + GFC_INTEGER_4 bound_length __attribute__((unused))) \ + { \ + eoshift2 (ret, array, *pshift, pbound, pdim ? *pdim : 1, \ + array_length, " ", 1); \ + } \ + \ + extern void eoshift2_##N##_char4 (gfc_array_char *, GFC_INTEGER_4, \ + const gfc_array_char *, \ + const GFC_INTEGER_##N *, \ + const gfc_array_char *, \ + const GFC_INTEGER_##N *, \ + GFC_INTEGER_4, GFC_INTEGER_4); \ + export_proto(eoshift2_##N##_char4); \ + \ + void \ + eoshift2_##N##_char4 (gfc_array_char *ret, \ + GFC_INTEGER_4 ret_length __attribute__((unused)), \ + const gfc_array_char *array, \ + const GFC_INTEGER_##N *pshift, \ + const gfc_array_char *pbound, \ + const GFC_INTEGER_##N *pdim, \ + GFC_INTEGER_4 array_length, \ + GFC_INTEGER_4 bound_length __attribute__((unused))) \ + { \ + static const gfc_char4_t space = (unsigned char) ' '; \ + eoshift2 (ret, array, *pshift, pbound, pdim ? *pdim : 1, \ + array_length * sizeof (gfc_char4_t), (const char *) &space, \ + sizeof (gfc_char4_t)); \ + } + +DEFINE_EOSHIFT (1); +DEFINE_EOSHIFT (2); +DEFINE_EOSHIFT (4); +DEFINE_EOSHIFT (8); +#ifdef HAVE_GFC_INTEGER_16 +DEFINE_EOSHIFT (16); +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/erfc_scaled.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/erfc_scaled.c new file mode 100644 index 0000000000..7ffca40dbf --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/erfc_scaled.c @@ -0,0 +1,52 @@ +/* Implementation of the ERFC_SCALED intrinsic. + Copyright (C) 2008, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +/* This implementation of ERFC_SCALED is based on the netlib algorithm + available at http://www.netlib.org/specfun/erf */ + +#ifdef HAVE_GFC_REAL_4 +#undef KIND +#define KIND 4 +#include "erfc_scaled_inc.c" +#endif + +#ifdef HAVE_GFC_REAL_8 +#undef KIND +#define KIND 8 +#include "erfc_scaled_inc.c" +#endif + +#ifdef HAVE_GFC_REAL_10 +#undef KIND +#define KIND 10 +#include "erfc_scaled_inc.c" +#endif + +#ifdef HAVE_GFC_REAL_16 +#undef KIND +#define KIND 16 +#include "erfc_scaled_inc.c" +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/erfc_scaled_inc.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/erfc_scaled_inc.c new file mode 100644 index 0000000000..7e4ba7ec8a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/erfc_scaled_inc.c @@ -0,0 +1,184 @@ +/* Implementation of the ERFC_SCALED intrinsic, to be included by erfc_scaled.c + Copyright (c) 2008 Free Software Foundation, Inc. + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +/* This implementation of ERFC_SCALED is based on the netlib algorithm + available at http://www.netlib.org/specfun/erf */ + +#define TYPE KIND_SUFFIX(GFC_REAL_,KIND) +#define CONCAT(x,y) x ## y +#define KIND_SUFFIX(x,y) CONCAT(x,y) + +#if (KIND == 4) + +# define EXP(x) expf(x) +# define TRUNC(x) truncf(x) + +#elif (KIND == 8) + +# define EXP(x) exp(x) +# define TRUNC(x) trunc(x) + +#else + +# ifdef HAVE_EXPL +# define EXP(x) expl(x) +# endif +# ifdef HAVE_TRUNCL +# define TRUNC(x) truncl(x) +# endif + +#endif + +#if defined(EXP) && defined(TRUNC) + +extern TYPE KIND_SUFFIX(erfc_scaled_r,KIND) (TYPE); +export_proto(KIND_SUFFIX(erfc_scaled_r,KIND)); + +TYPE +KIND_SUFFIX(erfc_scaled_r,KIND) (TYPE x) +{ + /* The main computation evaluates near-minimax approximations + from "Rational Chebyshev approximations for the error function" + by W. J. Cody, Math. Comp., 1969, PP. 631-638. This + transportable program uses rational functions that theoretically + approximate erf(x) and erfc(x) to at least 18 significant + decimal digits. The accuracy achieved depends on the arithmetic + system, the compiler, the intrinsic functions, and proper + selection of the machine-dependent constants. */ + + int i; + TYPE del, res, xden, xnum, y, ysq; + +#if (KIND == 4) + static TYPE xneg = -9.382, xsmall = 5.96e-8, + xbig = 9.194, xhuge = 2.90e+3, xmax = 4.79e+37; +#else + static TYPE xneg = -26.628, xsmall = 1.11e-16, + xbig = 26.543, xhuge = 6.71e+7, xmax = 2.53e+307; +#endif + +#define SQRPI ((TYPE) 0.56418958354775628695L) +#define THRESH ((TYPE) 0.46875L) + + static TYPE a[5] = { 3.16112374387056560l, 113.864154151050156l, + 377.485237685302021l, 3209.37758913846947l, 0.185777706184603153l }; + + static TYPE b[4] = { 23.6012909523441209l, 244.024637934444173l, + 1282.61652607737228l, 2844.23683343917062l }; + + static TYPE c[9] = { 0.564188496988670089l, 8.88314979438837594l, + 66.1191906371416295l, 298.635138197400131l, 881.952221241769090l, + 1712.04761263407058l, 2051.07837782607147l, 1230.33935479799725l, + 2.15311535474403846e-8l }; + + static TYPE d[8] = { 15.7449261107098347l, 117.693950891312499l, + 537.181101862009858l, 1621.38957456669019l, 3290.79923573345963l, + 4362.61909014324716l, 3439.36767414372164l, 1230.33935480374942l }; + + static TYPE p[6] = { 0.305326634961232344l, 0.360344899949804439l, + 0.125781726111229246l, 0.0160837851487422766l, + 0.000658749161529837803l, 0.0163153871373020978l }; + + static TYPE q[5] = { 2.56852019228982242l, 1.87295284992346047l, + 0.527905102951428412l, 0.0605183413124413191l, + 0.00233520497626869185l }; + + y = (x > 0 ? x : -x); + if (y <= THRESH) + { + ysq = 0; + if (y > xsmall) + ysq = y * y; + xnum = a[4]*ysq; + xden = ysq; + for (i = 0; i <= 2; i++) + { + xnum = (xnum + a[i]) * ysq; + xden = (xden + b[i]) * ysq; + } + res = x * (xnum + a[3]) / (xden + b[3]); + res = 1 - res; + res = EXP(ysq) * res; + return res; + } + else if (y <= 4) + { + xnum = c[8]*y; + xden = y; + for (i = 0; i <= 6; i++) + { + xnum = (xnum + c[i]) * y; + xden = (xden + d[i]) * y; + } + res = (xnum + c[7]) / (xden + d[7]); + } + else + { + res = 0; + if (y >= xbig) + { + if (y >= xmax) + goto finish; + if (y >= xhuge) + { + res = SQRPI / y; + goto finish; + } + } + ysq = ((TYPE) 1) / (y * y); + xnum = p[5]*ysq; + xden = ysq; + for (i = 0; i <= 3; i++) + { + xnum = (xnum + p[i]) * ysq; + xden = (xden + q[i]) * ysq; + } + res = ysq *(xnum + p[4]) / (xden + q[4]); + res = (SQRPI - res) / y; + } + +finish: + if (x < 0) + { + if (x < xneg) + res = __builtin_inf (); + else + { + ysq = TRUNC (x*((TYPE) 16))/((TYPE) 16); + del = (x-ysq)*(x+ysq); + y = EXP(ysq*ysq) * EXP(del); + res = (y+y) - res; + } + } + return res; +} + +#endif + +#undef EXP +#undef TRUNC + +#undef CONCAT +#undef TYPE +#undef KIND_SUFFIX diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/etime.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/etime.c new file mode 100644 index 0000000000..1ae357ed56 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/etime.c @@ -0,0 +1,72 @@ +/* Implementation of the ETIME intrinsic. + Copyright (C) 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include "time_1.h" + +extern void etime_sub (gfc_array_r4 *t, GFC_REAL_4 *result); +iexport_proto(etime_sub); + +void +etime_sub (gfc_array_r4 *t, GFC_REAL_4 *result) +{ + GFC_REAL_4 tu, ts, tt, *tp; + long user_sec, user_usec, system_sec, system_usec; + + if (((t->dim[0].ubound + 1 - t->dim[0].lbound)) < 2) + runtime_error ("Insufficient number of elements in TARRAY."); + + if (__time_1 (&user_sec, &user_usec, &system_sec, &system_usec) == 0) + { + tu = (GFC_REAL_4)(user_sec + 1.e-6 * user_usec); + ts = (GFC_REAL_4)(system_sec + 1.e-6 * system_usec); + tt = tu + ts; + } + else + { + tu = (GFC_REAL_4)-1.0; + ts = (GFC_REAL_4)-1.0; + tt = (GFC_REAL_4)-1.0; + } + + tp = t->data; + + *tp = tu; + tp += t->dim[0].stride; + *tp = ts; + *result = tt; +} +iexport(etime_sub); + +extern GFC_REAL_4 etime (gfc_array_r4 *t); +export_proto(etime); + +GFC_REAL_4 +etime (gfc_array_r4 *t) +{ + GFC_REAL_4 val; + etime_sub (t, &val); + return val; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/exit.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/exit.c new file mode 100644 index 0000000000..7787581d02 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/exit.c @@ -0,0 +1,52 @@ +/* Implementation of the EXIT intrinsic. + Copyright (C) 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +#include "libgfortran.h" + +#ifdef HAVE_STDLIB_H +#include +#endif + +/* SUBROUTINE EXIT(STATUS) + INTEGER, INTENT(IN), OPTIONAL :: STATUS */ + +extern void exit_i4 (GFC_INTEGER_4 *); +export_proto(exit_i4); + +void +exit_i4 (GFC_INTEGER_4 * status) +{ + exit (status ? *status : 0); +} + +extern void exit_i8 (GFC_INTEGER_8 *); +export_proto(exit_i8); + +void +exit_i8 (GFC_INTEGER_8 * status) +{ + exit (status ? *status : 0); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/f2c_specifics.F90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/f2c_specifics.F90 new file mode 100644 index 0000000000..dd7713a689 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/f2c_specifics.F90 @@ -0,0 +1,197 @@ +! Copyright 2002, 2005, 2009 Free Software Foundation, Inc. +! Contributed by Tobias Schl"uter +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. +! +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. + +! Specifics for the intrinsics whose calling conventions change if +! -ff2c is used. +! +! There are two annoyances WRT the preprocessor: +! - we're using -traditional-cpp, so we can't use the ## operator. +! - macros expand to a single line, and Fortran lines can't be wider +! than 132 characters, therefore we use two macros to split the lines +! +! The cases we need to implement are functions returning default REAL +! or COMPLEX. The former need to return DOUBLE PRECISION instead of REAL, +! the latter become subroutines returning via a hidden first argument. + +! one argument functions +#define REAL_HEAD(NAME) \ +elemental function _gfortran_f2c_specific__/**/NAME/**/_r4 (parm) result(res); + +#define REAL_BODY(NAME) \ + REAL, intent (in) :: parm; \ + DOUBLE PRECISION :: res; \ + res = NAME (parm); \ +end function + +#define COMPLEX_HEAD(NAME) \ +subroutine _gfortran_f2c_specific__/**/NAME/**/_c4 (res, parm); + +#define COMPLEX_BODY(NAME) \ + COMPLEX, intent (in) :: parm; \ + COMPLEX, intent (out) :: res; \ + res = NAME (parm); \ +end subroutine + +#define DCOMPLEX_HEAD(NAME) \ +subroutine _gfortran_f2c_specific__/**/NAME/**/_c8 (res, parm); + +#define DCOMPLEX_BODY(NAME) \ + DOUBLE COMPLEX, intent (in) :: parm; \ + DOUBLE COMPLEX, intent (out) :: res; \ + res = NAME (parm); \ +end subroutine + +REAL_HEAD(abs) +REAL_BODY(abs) + +! abs is special in that the result is real +elemental function _gfortran_f2c_specific__abs_c4 (parm) result (res) + COMPLEX, intent(in) :: parm + DOUBLE PRECISION :: res + res = abs(parm) +end function + + +! aimag is special in that the result is real +elemental function _gfortran_f2c_specific__aimag_c4 (parm) + complex(kind=4), intent(in) :: parm + double precision :: _gfortran_f2c_specific__aimag_c4 + _gfortran_f2c_specific__aimag_c4 = aimag(parm) +end function + +elemental function _gfortran_f2c_specific__aimag_c8 (parm) + complex(kind=8), intent(in) :: parm + double precision :: _gfortran_f2c_specific__aimag_c8 + _gfortran_f2c_specific__aimag_c8 = aimag(parm) +end function + + +REAL_HEAD(exp) +REAL_BODY(exp) +COMPLEX_HEAD(exp) +COMPLEX_BODY(exp) +DCOMPLEX_HEAD(exp) +DCOMPLEX_BODY(exp) + +REAL_HEAD(log) +REAL_BODY(log) +COMPLEX_HEAD(log) +COMPLEX_BODY(log) +DCOMPLEX_HEAD(log) +DCOMPLEX_BODY(log) + +REAL_HEAD(log10) +REAL_BODY(log10) + +REAL_HEAD(sqrt) +REAL_BODY(sqrt) +COMPLEX_HEAD(sqrt) +COMPLEX_BODY(sqrt) +DCOMPLEX_HEAD(sqrt) +DCOMPLEX_BODY(sqrt) + +REAL_HEAD(asin) +REAL_BODY(asin) + +REAL_HEAD(acos) +REAL_BODY(acos) + +REAL_HEAD(atan) +REAL_BODY(atan) + +REAL_HEAD(asinh) +REAL_BODY(asinh) + +REAL_HEAD(acosh) +REAL_BODY(acosh) + +REAL_HEAD(atanh) +REAL_BODY(atanh) + +REAL_HEAD(sin) +REAL_BODY(sin) +COMPLEX_HEAD(sin) +COMPLEX_BODY(sin) +DCOMPLEX_HEAD(sin) +DCOMPLEX_BODY(sin) + +REAL_HEAD(cos) +REAL_BODY(cos) +COMPLEX_HEAD(cos) +COMPLEX_BODY(cos) +DCOMPLEX_HEAD(cos) +DCOMPLEX_BODY(cos) + +REAL_HEAD(tan) +REAL_BODY(tan) + +REAL_HEAD(sinh) +REAL_BODY(sinh) + +REAL_HEAD(cosh) +REAL_BODY(cosh) + +REAL_HEAD(tanh) +REAL_BODY(tanh) + +REAL_HEAD(aint) +REAL_BODY(aint) + +REAL_HEAD(anint) +REAL_BODY(anint) + +! two argument functions +#define REAL2_HEAD(NAME) \ +elemental function _gfortran_f2c_specific__/**/NAME/**/_r4 (p1, p2) result(res); + +#define REAL2_BODY(NAME) \ + REAL, intent (in) :: p1, p2; \ + DOUBLE PRECISION :: res; \ + res = NAME (p1, p2); \ +end function + +REAL2_HEAD(sign) +REAL2_BODY(sign) + +REAL2_HEAD(dim) +REAL2_BODY(dim) + +REAL2_HEAD(atan2) +REAL2_BODY(atan2) + +REAL2_HEAD(mod) +REAL2_BODY(mod) + +! conjg is special-cased because it is not suffixed _c4 but _4 +subroutine _gfortran_f2c_specific__conjg_4 (res, parm) + COMPLEX, intent (in) :: parm + COMPLEX, intent (out) :: res + res = conjg (parm) +end subroutine +subroutine _gfortran_f2c_specific__conjg_8 (res, parm) + DOUBLE COMPLEX, intent (in) :: parm + DOUBLE COMPLEX, intent (out) :: res + res = conjg (parm) +end subroutine + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/fnum.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/fnum.c new file mode 100644 index 0000000000..f155042a51 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/fnum.c @@ -0,0 +1,48 @@ +/* Implementation of the FNUM intrinsics. + Copyright (C) 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +/* FUNCTION FNUM(UNIT) + INTEGER FNUM + INTEGER, INTENT(IN), :: UNIT */ + +extern GFC_INTEGER_4 fnum_i4 (GFC_INTEGER_4 *); +export_proto(fnum_i4); + +GFC_INTEGER_4 +fnum_i4 (GFC_INTEGER_4 *unit) +{ + return unit_to_fd (*unit); +} + +extern GFC_INTEGER_8 fnum_i8 (GFC_INTEGER_8 *); +export_proto(fnum_i8); + +GFC_INTEGER_8 +fnum_i8 (GFC_INTEGER_8 * unit) +{ + return unit_to_fd (*unit); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/gerror.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/gerror.c new file mode 100644 index 0000000000..ccb5c3efd4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/gerror.c @@ -0,0 +1,58 @@ +/* Implementation of the GERROR g77 intrinsic. + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include +#include + + +/* GERROR (MESSAGE), g77 intrinsic for retrieving the system error + message corresponding to the last system error (C errno). + CHARACTER(len=*), INTENT(OUT) :: MESSAGE */ + +#ifdef HAVE_STRERROR +void PREFIX(gerror) (char *, gfc_charlen_type); +export_proto_np(PREFIX(gerror)); + +void +PREFIX(gerror) (char * msg, gfc_charlen_type msg_len) +{ + int p_len; + char *p; + + memset (msg, ' ', msg_len); /* Blank the string. */ + + p = strerror (errno); + if (p == NULL) + return; + + p_len = strlen (p); + if (msg_len < p_len) + memcpy (msg, p, msg_len); + else + memcpy (msg, p, p_len); +} +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/getXid.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/getXid.c new file mode 100644 index 0000000000..9eb60f0398 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/getXid.c @@ -0,0 +1,67 @@ +/* Wrapper for the unix get{g,p,u}id functions. +Copyright (C) 2004, 2007, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#if HAVE_UNISTD_H +#include +#endif + +#ifdef __MINGW32__ +#define HAVE_GETPID 1 +#include +#endif + +#ifdef HAVE_GETGID +extern GFC_INTEGER_4 PREFIX(getgid) (void); +export_proto_np(PREFIX(getgid)); + +GFC_INTEGER_4 +PREFIX(getgid) (void) +{ + return getgid (); +} +#endif + +#ifdef HAVE_GETPID +extern GFC_INTEGER_4 PREFIX(getpid) (void); +export_proto_np(PREFIX(getpid)); + +GFC_INTEGER_4 +PREFIX(getpid) (void) +{ + return getpid (); +} +#endif + +#ifdef HAVE_GETUID +extern GFC_INTEGER_4 PREFIX(getuid) (void); +export_proto_np(PREFIX(getuid)); + +GFC_INTEGER_4 +PREFIX(getuid) (void) +{ + return getuid (); +} +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/getcwd.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/getcwd.c new file mode 100644 index 0000000000..15e8e8f7b0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/getcwd.c @@ -0,0 +1,83 @@ +/* Implementation of the GETCWD intrinsic. + Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +#ifdef HAVE_GETCWD + +extern void getcwd_i4_sub (char *, GFC_INTEGER_4 *, gfc_charlen_type); +iexport_proto(getcwd_i4_sub); + +void +getcwd_i4_sub (char *cwd, GFC_INTEGER_4 *status, gfc_charlen_type cwd_len) +{ + char str[cwd_len + 1]; + GFC_INTEGER_4 stat; + + memset(cwd, ' ', (size_t) cwd_len); + + if (!getcwd (str, (size_t) cwd_len + 1)) + stat = errno; + else + { + stat = 0; + memcpy (cwd, str, strlen (str)); + } + if (status != NULL) + *status = stat; +} +iexport(getcwd_i4_sub); + +extern void getcwd_i8_sub (char *, GFC_INTEGER_8 *, gfc_charlen_type); +export_proto(getcwd_i8_sub); + +void +getcwd_i8_sub (char *cwd, GFC_INTEGER_8 *status, gfc_charlen_type cwd_len) +{ + GFC_INTEGER_4 status4; + getcwd_i4_sub (cwd, &status4, cwd_len); + if (status) + *status = status4; +} + +extern GFC_INTEGER_4 PREFIX(getcwd) (char *, gfc_charlen_type); +export_proto_np(PREFIX(getcwd)); + +GFC_INTEGER_4 +PREFIX(getcwd) (char *cwd, gfc_charlen_type cwd_len) +{ + GFC_INTEGER_4 status; + getcwd_i4_sub (cwd, &status, cwd_len); + return status; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/getlog.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/getlog.c new file mode 100644 index 0000000000..0456c5796a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/getlog.c @@ -0,0 +1,99 @@ +/* Implementation of the GETLOG g77 intrinsic. + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include + +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_PWD_H +#include +#endif + +/* Windows32 version */ +#if defined __MINGW32__ && !defined HAVE_GETLOGIN +#define WIN32_LEAN_AND_MEAN +#include +#include /* for UNLEN */ + +static char * +w32_getlogin (void) +{ + static char name [UNLEN + 1]; + DWORD namelen = sizeof (name); + + GetUserName (name, &namelen); + return (name[0] == 0 ? NULL : name); +} + +#undef getlogin +#define getlogin w32_getlogin +#define HAVE_GETLOGIN 1 + +#endif + + +/* GETLOG (LOGIN), g77 intrinsic for retrieving the login name for the + process. + CHARACTER(len=*), INTENT(OUT) :: LOGIN */ + +void PREFIX(getlog) (char *, gfc_charlen_type); +export_proto_np(PREFIX(getlog)); + +void +PREFIX(getlog) (char * login, gfc_charlen_type login_len) +{ + int p_len; + char *p; + + memset (login, ' ', login_len); /* Blank the string. */ + +#if defined(HAVE_GETPWUID) && defined(HAVE_GETEUID) + { + struct passwd *pw = getpwuid (geteuid ()); + if (pw) + p = pw->pw_name; + else + return; + } +#else +# ifdef HAVE_GETLOGIN + p = getlogin(); +# else + return; +# endif +#endif + + if (p == NULL) + return; + + p_len = strlen (p); + if (login_len < p_len) + memcpy (login, p, login_len); + else + memcpy (login, p, p_len); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/hostnm.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/hostnm.c new file mode 100644 index 0000000000..99ab18dcb5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/hostnm.c @@ -0,0 +1,144 @@ +/* Implementation of the HOSTNM intrinsic. + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + + +/* Windows32 version */ +#if defined __MINGW32__ && !defined HAVE_GETHOSTNAME +#define WIN32_LEAN_AND_MEAN +#include +#include + +static int +w32_gethostname (char *name, size_t len) +{ + /* We could try the WinSock API gethostname, but that will + fail if WSAStartup function has has not been called. We don't + really need a name that will be understood by socket API, so avoid + unnecessary dependence on WinSock libraries by using + GetComputerName instead. */ + + /* On Win9x GetComputerName fails if the input size is less + than MAX_COMPUTERNAME_LENGTH + 1. */ + char buffer[MAX_COMPUTERNAME_LENGTH + 1]; + DWORD size = sizeof (buffer); + + if (!GetComputerName (buffer, &size)) + return -1; + + if ((size = strlen (buffer) + 1) > len) + { + errno = EINVAL; + /* Truncate as per POSIX spec. We do not NUL-terminate. */ + size = len; + } + memcpy (name, buffer, (size_t) size); + + return 0; +} + +#undef gethostname +#define gethostname w32_gethostname +#define HAVE_GETHOSTNAME 1 + +#endif + + +/* SUBROUTINE HOSTNM(NAME, STATUS) + CHARACTER(len=*), INTENT(OUT) :: NAME + INTEGER, INTENT(OUT), OPTIONAL :: STATUS */ + +#ifdef HAVE_GETHOSTNAME +extern void hostnm_i4_sub (char *, GFC_INTEGER_4 *, gfc_charlen_type); +iexport_proto(hostnm_i4_sub); + +void +hostnm_i4_sub (char *name, GFC_INTEGER_4 *status, gfc_charlen_type name_len) +{ + int val, i; + char *p; + + memset (name, ' ', name_len); + p = gfc_alloca (name_len + 1); + + val = gethostname (p, name_len); + + if (val == 0) + { + i = -1; + while (i < name_len && p[++i] != '\0') + name[i] = p[i]; + } + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} +iexport(hostnm_i4_sub); + +extern void hostnm_i8_sub (char *, GFC_INTEGER_8 *, gfc_charlen_type); +iexport_proto(hostnm_i8_sub); + +void +hostnm_i8_sub (char *name, GFC_INTEGER_8 *status, gfc_charlen_type name_len) +{ + int val, i; + char *p; + + memset (name, ' ', name_len); + p = gfc_alloca (name_len + 1); + + val = gethostname (p, name_len); + + if (val == 0) + { + i = -1; + while (i < name_len && p[++i] != '\0') + name[i] = p[i]; + } + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} +iexport(hostnm_i8_sub); + +extern GFC_INTEGER_4 hostnm (char *, gfc_charlen_type); +export_proto(hostnm); + +GFC_INTEGER_4 +hostnm (char *name, gfc_charlen_type name_len) +{ + GFC_INTEGER_4 val; + hostnm_i4_sub (name, &val, name_len); + return val; +} +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/ierrno.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/ierrno.c new file mode 100644 index 0000000000..2f5e44fa64 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/ierrno.c @@ -0,0 +1,49 @@ +/* Implementation of the IERRNO intrinsic. + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include + + +/* INTEGER FUNCTION IERRNO() */ + +extern GFC_INTEGER_4 ierrno_i4 (void); +export_proto(ierrno_i4); + +GFC_INTEGER_4 +ierrno_i4 (void) +{ + return (GFC_INTEGER_4) errno; +} + +extern GFC_INTEGER_8 ierrno_i8 (void); +export_proto(ierrno_i8); + +GFC_INTEGER_8 +ierrno_i8 (void) +{ + return (GFC_INTEGER_8) errno; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/ishftc.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/ishftc.c new file mode 100644 index 0000000000..054c3167b1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/ishftc.c @@ -0,0 +1,100 @@ +/* Implementation of ishftc intrinsic. + Copyright 2002, 2004, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +extern GFC_INTEGER_4 ishftc4 (GFC_INTEGER_4, GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(ishftc4); + +GFC_INTEGER_4 +ishftc4 (GFC_INTEGER_4 i, GFC_INTEGER_4 shift, GFC_INTEGER_4 size) +{ + GFC_UINTEGER_4 mask, bits; + + if (shift < 0) + shift = shift + size; + + if (shift == 0 || shift == size) + return i; + + /* In C, the result of the shift operator is undefined if the right operand + is greater than or equal to the number of bits in the left operand. So we + have to special case it for fortran. */ + mask = ~((size == 32) ? (GFC_UINTEGER_4)0 : (~(GFC_UINTEGER_4)0 << size)); + + bits = i & mask; + + return (i & ~mask) | ((bits << shift) & mask) | (bits >> (size - shift)); +} + +extern GFC_INTEGER_8 ishftc8 (GFC_INTEGER_8, GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(ishftc8); + +GFC_INTEGER_8 +ishftc8 (GFC_INTEGER_8 i, GFC_INTEGER_4 shift, GFC_INTEGER_4 size) +{ + GFC_UINTEGER_8 mask, bits; + + if (shift < 0) + shift = shift + size; + + if (shift == 0 || shift == size) + return i; + + /* In C, the result of the shift operator is undefined if the right operand + is greater than or equal to the number of bits in the left operand. So we + have to special case it for fortran. */ + mask = ~((size == 64) ? (GFC_UINTEGER_8)0 : (~(GFC_UINTEGER_8)0 << size)); + + bits = i & mask; + + return (i & ~mask) | ((bits << shift) & mask) | (bits >> (size - shift)); +} + +#ifdef HAVE_GFC_INTEGER_16 +extern GFC_INTEGER_16 ishftc16 (GFC_INTEGER_16, GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(ishftc16); + +GFC_INTEGER_16 +ishftc16 (GFC_INTEGER_16 i, GFC_INTEGER_4 shift, GFC_INTEGER_4 size) +{ + GFC_UINTEGER_16 mask, bits; + + if (shift < 0) + shift = shift + size; + + if (shift == 0 || shift == size) + return i; + + /* In C, the result of the shift operator is undefined if the right operand + is greater than or equal to the number of bits in the left operand. So we + have to special case it for fortran. */ + mask = ~((size == 128) ? (GFC_UINTEGER_16)0 : (~(GFC_UINTEGER_16)0 << size)); + + bits = i & mask; + + return (i & ~mask) | ((bits << shift) & mask) | (bits >> (size - shift)); +} +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/iso_c_binding.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/iso_c_binding.c new file mode 100644 index 0000000000..a8d876832c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/iso_c_binding.c @@ -0,0 +1,177 @@ +/* Implementation of the ISO_C_BINDING library helper functions. + Copyright (C) 2007, 2009 Free Software Foundation, Inc. + Contributed by Christopher Rickett. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +/* Implement the functions and subroutines provided by the intrinsic + iso_c_binding module. */ + +#include "libgfortran.h" +#include "iso_c_binding.h" + +#include + + +/* Set the fields of a Fortran pointer descriptor to point to the + given C address. It uses c_f_pointer_u0 for the common + fields, and will set up the information necessary if this C address + is to an array (i.e., offset, type, element size). The parameter + c_ptr_in represents the C address to have Fortran point to. The + parameter f_ptr_out is the Fortran pointer to associate with the C + address. The parameter shape is a one-dimensional array of integers + specifying the upper bound(s) of the array pointed to by the given C + address, if applicable. The shape parameter is optional in Fortran, + which will cause it to come in here as NULL. The parameter type is + the type of the data being pointed to (i.e.,libgfortran.h). The + elem_size parameter is the size, in bytes, of the data element being + pointed to. If the address is for an array, then the size needs to + be the size of a single element (i.e., for an array of doubles, it + needs to be the number of bytes for the size of one double). */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape, + int type, int elemSize) +{ + if (shape != NULL) + { + f_ptr_out->offset = 0; + + /* Set the necessary dtype field for all pointers. */ + f_ptr_out->dtype = 0; + + /* Put in the element size. */ + f_ptr_out->dtype = f_ptr_out->dtype | (elemSize << GFC_DTYPE_SIZE_SHIFT); + + /* Set the data type (e.g., GFC_DTYPE_INTEGER). */ + f_ptr_out->dtype = f_ptr_out->dtype | (type << GFC_DTYPE_TYPE_SHIFT); + } + + /* Use the generic version of c_f_pointer to set common fields. */ + ISO_C_BINDING_PREFIX (c_f_pointer_u0) (c_ptr_in, f_ptr_out, shape); +} + + +/* A generic function to set the common fields of all descriptors, no + matter whether it's to a scalar or an array. Fields set are: data, + and if appropriate, rank, offset, dim[*].lbound, dim[*].ubound, and + dim[*].stride. Parameter shape is a rank 1 array of integers + containing the upper bound of each dimension of what f_ptr_out + points to. The length of this array must be EXACTLY the rank of + what f_ptr_out points to, as required by the draft (J3/04-007). If + f_ptr_out points to a scalar, then this parameter will be NULL. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_u0) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + int i = 0; + int shapeSize = 0; + + GFC_DESCRIPTOR_DATA (f_ptr_out) = c_ptr_in; + + if (shape != NULL) + { + f_ptr_out->offset = 0; + shapeSize = 0; + + /* shape's length (rank of the output array) */ + shapeSize = shape->dim[0].ubound + 1 - shape->dim[0].lbound; + for (i = 0; i < shapeSize; i++) + { + /* Lower bound is 1, as specified by the draft. */ + f_ptr_out->dim[i].lbound = 1; + /* Have to allow for the SHAPE array to be any valid kind for + an INTEGER type. */ +#ifdef HAVE_GFC_INTEGER_1 + if (GFC_DESCRIPTOR_SIZE (shape) == 1) + f_ptr_out->dim[i].ubound = ((GFC_INTEGER_1 *) (shape->data))[i]; +#endif +#ifdef HAVE_GFC_INTEGER_2 + if (GFC_DESCRIPTOR_SIZE (shape) == 2) + f_ptr_out->dim[i].ubound = ((GFC_INTEGER_2 *) (shape->data))[i]; +#endif +#ifdef HAVE_GFC_INTEGER_4 + if (GFC_DESCRIPTOR_SIZE (shape) == 4) + f_ptr_out->dim[i].ubound = ((GFC_INTEGER_4 *) (shape->data))[i]; +#endif +#ifdef HAVE_GFC_INTEGER_8 + if (GFC_DESCRIPTOR_SIZE (shape) == 8) + f_ptr_out->dim[i].ubound = ((GFC_INTEGER_8 *) (shape->data))[i]; +#endif +#ifdef HAVE_GFC_INTEGER_16 + if (GFC_DESCRIPTOR_SIZE (shape) == 16) + f_ptr_out->dim[i].ubound = ((GFC_INTEGER_16 *) (shape->data))[i]; +#endif + } + + /* Set the offset and strides. + offset is (sum of (dim[i].lbound * dim[i].stride) for all + dims) the -1 means we'll back the data pointer up that much + perhaps we could just realign the data pointer and not change + the offset? */ + f_ptr_out->dim[0].stride = 1; + f_ptr_out->offset = f_ptr_out->dim[0].lbound * f_ptr_out->dim[0].stride; + for (i = 1; i < shapeSize; i++) + { + f_ptr_out->dim[i].stride = (f_ptr_out->dim[i-1].ubound + 1) + - f_ptr_out->dim[i-1].lbound; + f_ptr_out->offset += f_ptr_out->dim[i].lbound + * f_ptr_out->dim[i].stride; + } + + f_ptr_out->offset *= -1; + + /* All we know is the rank, so set it, leaving the rest alone. + Make NO assumptions about the state of dtype coming in! If we + shift right by TYPE_SHIFT bits we'll throw away the existing + rank. Then, shift left by the same number to shift in zeros + and or with the new rank. */ + f_ptr_out->dtype = ((f_ptr_out->dtype >> GFC_DTYPE_TYPE_SHIFT) + << GFC_DTYPE_TYPE_SHIFT) | shapeSize; + } +} + + +/* Sets the descriptor fields for a Fortran pointer to a derived type, + using c_f_pointer_u0 for the majority of the work. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_d0) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Set the common fields. */ + ISO_C_BINDING_PREFIX (c_f_pointer_u0) (c_ptr_in, f_ptr_out, shape); + + /* Preserve the size and rank bits, but reset the type. */ + if (shape != NULL) + { + f_ptr_out->dtype = f_ptr_out->dtype & (~GFC_DTYPE_TYPE_MASK); + f_ptr_out->dtype = f_ptr_out->dtype + | (GFC_DTYPE_DERIVED << GFC_DTYPE_TYPE_SHIFT); + } +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/iso_c_binding.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/iso_c_binding.h new file mode 100644 index 0000000000..e09147a661 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/iso_c_binding.h @@ -0,0 +1,55 @@ +/* Copyright (C) 2007, 2009 Free Software Foundation, Inc. + Contributed by Christopher Rickett. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +/* Declarations for ISO_C_BINDING library helper functions. */ + +#ifndef GFOR_ISO_C_BINDING_H +#define GFOR_ISO_C_BINDING_H + +#include "libgfortran.h" + +typedef struct c_ptr +{ + void *c_address; +} +c_ptr_t; + +typedef struct c_funptr +{ + void *c_address; +} +c_funptr_t; + +#define ISO_C_BINDING_PREFIX(a) __iso_c_binding_##a + +void ISO_C_BINDING_PREFIX(c_f_pointer)(void *, gfc_array_void *, + const array_t *, int, int); + +void ISO_C_BINDING_PREFIX(c_f_pointer_u0) (void *, gfc_array_void *, + const array_t *); +void ISO_C_BINDING_PREFIX(c_f_pointer_d0) (void *, gfc_array_void *, + const array_t *); + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/iso_c_generated_procs.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/iso_c_generated_procs.c new file mode 100644 index 0000000000..e5ef7e1834 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/iso_c_generated_procs.c @@ -0,0 +1,466 @@ +/* Implementation of the ISO_C_BINDING library helper generated functions. + Copyright (C) 2007, 2009 Free Software Foundation, Inc. + Contributed by Christopher Rickett. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +#include "libgfortran.h" +#include "iso_c_binding.h" + + +/* TODO: This file needs to be finished so that a function is provided + for all possible type/kind combinations! */ + +#ifdef HAVE_GFC_INTEGER_1 +void ISO_C_BINDING_PREFIX (c_f_pointer_i1) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_INTEGER_2 +void ISO_C_BINDING_PREFIX (c_f_pointer_i2) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_INTEGER_4 +void ISO_C_BINDING_PREFIX (c_f_pointer_i4) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_INTEGER_8 +void ISO_C_BINDING_PREFIX (c_f_pointer_i8) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_INTEGER_16 +void ISO_C_BINDING_PREFIX (c_f_pointer_i16) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_REAL_4 +void ISO_C_BINDING_PREFIX (c_f_pointer_r4) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_REAL_8 +void ISO_C_BINDING_PREFIX (c_f_pointer_r8) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_REAL_10 +void ISO_C_BINDING_PREFIX (c_f_pointer_r10) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_REAL_16 +void ISO_C_BINDING_PREFIX (c_f_pointer_r16) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_COMPLEX_4 +void ISO_C_BINDING_PREFIX (c_f_pointer_c4) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_COMPLEX_8 +void ISO_C_BINDING_PREFIX (c_f_pointer_c8) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_COMPLEX_10 +void ISO_C_BINDING_PREFIX (c_f_pointer_c10) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_COMPLEX_16 +void ISO_C_BINDING_PREFIX (c_f_pointer_c16) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef GFC_DEFAULT_CHAR +void ISO_C_BINDING_PREFIX (c_f_pointer_s0) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_LOGICAL_1 +void ISO_C_BINDING_PREFIX (c_f_pointer_l1) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_LOGICAL_2 +void ISO_C_BINDING_PREFIX (c_f_pointer_l2) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_LOGICAL_4 +void ISO_C_BINDING_PREFIX (c_f_pointer_l4) (void *, gfc_array_void *, + const array_t *); +#endif + +#ifdef HAVE_GFC_LOGICAL_8 +void ISO_C_BINDING_PREFIX (c_f_pointer_l8) (void *, gfc_array_void *, + const array_t *); +#endif + + +#ifdef HAVE_GFC_INTEGER_1 +/* Set the given Fortran pointer, 'f_ptr_out', to point to the given C + address, 'c_ptr_in'. The Fortran pointer is of type integer and + kind=1. The function c_f_pointer is used to set up the pointer + descriptor. shape is a one-dimensional array of integers + specifying the upper bounds of the array pointed to by the given C + address, if applicable. 'shape' is an optional parameter in + Fortran, so if the user does not provide it, it will come in here + as NULL. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_i1) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have an integer(kind=1). */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_INTEGER, + (int) sizeof (GFC_INTEGER_1)); +} +#endif + + +#ifdef HAVE_GFC_INTEGER_2 +/* Set the given Fortran pointer, 'f_ptr_out', to point to the given C + address, 'c_ptr_in'. The Fortran pointer is of type integer and + kind=2. The function c_f_pointer is used to set up the pointer + descriptor. shape is a one-dimensional array of integers + specifying the upper bounds of the array pointed to by the given C + address, if applicable. 'shape' is an optional parameter in + Fortran, so if the user does not provide it, it will come in here + as NULL. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_i2) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have an integer(kind=2). */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_INTEGER, + (int) sizeof (GFC_INTEGER_2)); +} +#endif + + +#ifdef HAVE_GFC_INTEGER_4 +/* Set the given Fortran pointer, f_ptr_out, to point to the given C + address, c_ptr_in. The Fortran pointer is of type integer and + kind=4. The function c_f_pointer is used to set up the pointer + descriptor. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_i4) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have an integer(kind=4). */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_INTEGER, + (int) sizeof (GFC_INTEGER_4)); +} +#endif + + +#ifdef HAVE_GFC_INTEGER_8 +/* Set the given Fortran pointer, f_ptr_out, to point to the given C + address, c_ptr_in. The Fortran pointer is of type integer and + kind=8. The function c_f_pointer is used to set up the pointer + descriptor. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_i8) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have an integer(kind=8). */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_INTEGER, + (int) sizeof (GFC_INTEGER_8)); +} +#endif + + +#ifdef HAVE_GFC_INTEGER_16 +/* Set the given Fortran pointer, 'f_ptr_out', to point to the given C + address, 'c_ptr_in'. The Fortran pointer is of type integer and + kind=16. The function c_f_pointer is used to set up the pointer + descriptor. shape is a one-dimensional array of integers + specifying the upper bounds of the array pointed to by the given C + address, if applicable. 'shape' is an optional parameter in + Fortran, so if the user does not provide it, it will come in here + as NULL. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_i16) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have an integer(kind=16). */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_INTEGER, + (int) sizeof (GFC_INTEGER_16)); +} +#endif + + +#ifdef HAVE_GFC_REAL_4 +/* Set the given Fortran pointer, f_ptr_out, to point to the given C + address, c_ptr_in. The Fortran pointer is of type real and + kind=4. The function c_f_pointer is used to set up the pointer + descriptor. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_r4) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have an real(kind=4). */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_REAL, + (int) sizeof (GFC_REAL_4)); +} +#endif + + +#ifdef HAVE_GFC_REAL_8 +/* Set the given Fortran pointer, f_ptr_out, to point to the given C + address, c_ptr_in. The Fortran pointer is of type real and + kind=8. The function c_f_pointer is used to set up the pointer + descriptor. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_r8) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have an real(kind=8). */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_REAL, + (int) sizeof (GFC_REAL_8)); +} +#endif + + +#ifdef HAVE_GFC_REAL_10 +/* Set the given Fortran pointer, f_ptr_out, to point to the given C + address, c_ptr_in. The Fortran pointer is of type real and + kind=10. The function c_f_pointer is used to set up the pointer + descriptor. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_r10) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have an real(kind=10). */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_REAL, + (int) sizeof (GFC_REAL_10)); +} +#endif + + +#ifdef HAVE_GFC_REAL_16 +/* Set the given Fortran pointer, f_ptr_out, to point to the given C + address, c_ptr_in. The Fortran pointer is of type real and + kind=16. The function c_f_pointer is used to set up the pointer + descriptor. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_r16) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have an real(kind=16). */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_REAL, + (int) sizeof (GFC_REAL_16)); +} +#endif + + +#ifdef HAVE_GFC_COMPLEX_4 +/* Set the given Fortran pointer, f_ptr_out, to point to the given C + address, c_ptr_in. The Fortran pointer is of type complex and + kind=4. The function c_f_pointer is used to set up the pointer + descriptor. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_c4) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have an complex(kind=4). */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_COMPLEX, + (int) sizeof (GFC_COMPLEX_4)); +} +#endif + + +#ifdef HAVE_GFC_COMPLEX_8 +/* Set the given Fortran pointer, f_ptr_out, to point to the given C + address, c_ptr_in. The Fortran pointer is of type complex and + kind=8. The function c_f_pointer is used to set up the pointer + descriptor. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_c8) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have an complex(kind=8). */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_COMPLEX, + (int) sizeof (GFC_COMPLEX_8)); +} +#endif + + +#ifdef HAVE_GFC_COMPLEX_10 +/* Set the given Fortran pointer, f_ptr_out, to point to the given C + address, c_ptr_in. The Fortran pointer is of type complex and + kind=10. The function c_f_pointer is used to set up the pointer + descriptor. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_c10) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have an complex(kind=10). */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_COMPLEX, + (int) sizeof (GFC_COMPLEX_10)); +} +#endif + + +#ifdef HAVE_GFC_COMPLEX_16 +/* Set the given Fortran pointer, f_ptr_out, to point to the given C + address, c_ptr_in. The Fortran pointer is of type complex and + kind=16. The function c_f_pointer is used to set up the pointer + descriptor. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_c16) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have an complex(kind=16). */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_COMPLEX, + (int) sizeof (GFC_COMPLEX_16)); +} +#endif + + +#ifdef GFC_DEFAULT_CHAR +/* Set the given Fortran pointer, f_ptr_out, to point to the given C + address, c_ptr_in. The Fortran pointer is of type character. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_s0) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have a character string of len=1. */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_CHARACTER, + (int) sizeof (char)); +} +#endif + + +#ifdef HAVE_GFC_LOGICAL_1 +/* Set the given Fortran pointer, f_ptr_out, to point to the given C + address, c_ptr_in. The Fortran pointer is of type logical, kind=1. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_l1) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have a logical of kind=1. */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_LOGICAL, + (int) sizeof (GFC_LOGICAL_1)); +} +#endif + + +#ifdef HAVE_GFC_LOGICAL_2 +/* Set the given Fortran pointer, f_ptr_out, to point to the given C + address, c_ptr_in. The Fortran pointer is of type logical, kind=2. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_l2) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have a logical of kind=2. */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_LOGICAL, + (int) sizeof (GFC_LOGICAL_2)); +} +#endif + + +#ifdef HAVE_GFC_LOGICAL_4 +/* Set the given Fortran pointer, f_ptr_out, to point to the given C + address, c_ptr_in. The Fortran pointer is of type logical, kind=4. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_l4) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have a logical of kind=4. */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_LOGICAL, + (int) sizeof (GFC_LOGICAL_4)); +} +#endif + + +#ifdef HAVE_GFC_LOGICAL_8 +/* Set the given Fortran pointer, f_ptr_out, to point to the given C + address, c_ptr_in. The Fortran pointer is of type logical, kind=8. */ + +void +ISO_C_BINDING_PREFIX (c_f_pointer_l8) (void *c_ptr_in, + gfc_array_void *f_ptr_out, + const array_t *shape) +{ + /* Here we have a logical of kind=8. */ + ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape, + (int) GFC_DTYPE_LOGICAL, + (int) sizeof (GFC_LOGICAL_8)); +} +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/kill.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/kill.c new file mode 100644 index 0000000000..83e8b2838e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/kill.c @@ -0,0 +1,94 @@ +/* Implementation of the KILL g77 intrinsic. + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + +#ifdef HAVE_SIGNAL_H +#include +#endif + +/* SUBROUTINE KILL(PID, SIGNAL, STATUS) + INTEGER, INTENT(IN) :: PID, SIGNAL + INTEGER(KIND=1), INTENT(OUT), OPTIONAL :: STATUS + + INTEGER(KIND=1) FUNCTION KILL(PID, SIGNAL) + INTEGER, INTENT(IN) :: PID, SIGNAL */ + +#ifdef HAVE_KILL +extern void kill_i4_sub (GFC_INTEGER_4 *, GFC_INTEGER_4 *, GFC_INTEGER_4 *); +iexport_proto(kill_i4_sub); + +void +kill_i4_sub (GFC_INTEGER_4 *pid, GFC_INTEGER_4 *signal, + GFC_INTEGER_4 *status) +{ + int val; + + val = kill (*pid, *signal); + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} +iexport(kill_i4_sub); + +extern void kill_i8_sub (GFC_INTEGER_8 *, GFC_INTEGER_8 *, GFC_INTEGER_8 *); +iexport_proto(kill_i8_sub); + +void +kill_i8_sub (GFC_INTEGER_8 *pid, GFC_INTEGER_8 *signal, + GFC_INTEGER_8 *status) +{ + int val; + + val = kill (*pid, *signal); + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} +iexport(kill_i8_sub); + +extern GFC_INTEGER_4 kill_i4 (GFC_INTEGER_4 *, GFC_INTEGER_4 *); +export_proto(kill_i4); + +GFC_INTEGER_4 +kill_i4 (GFC_INTEGER_4 *pid, GFC_INTEGER_4 *signal) +{ + GFC_INTEGER_4 val; + kill_i4_sub (pid, signal, &val); + return val; +} + +extern GFC_INTEGER_8 kill_i8 (GFC_INTEGER_8 *, GFC_INTEGER_8 *); +export_proto(kill_i8); + +GFC_INTEGER_8 +kill_i8 (GFC_INTEGER_8 *pid, GFC_INTEGER_8 *signal) +{ + GFC_INTEGER_8 val; + kill_i8_sub (pid, signal, &val); + return val; +} +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/link.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/link.c new file mode 100644 index 0000000000..21bae400a8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/link.c @@ -0,0 +1,131 @@ +/* Implementation of the LINK intrinsic. + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +/* SUBROUTINE LINK(PATH1, PATH2, STATUS) + CHARACTER(len=*), INTENT(IN) :: PATH1, PATH2 + INTEGER, INTENT(OUT), OPTIONAL :: STATUS */ + +#ifdef HAVE_LINK +extern void link_i4_sub (char *, char *, GFC_INTEGER_4 *, gfc_charlen_type, + gfc_charlen_type); +iexport_proto(link_i4_sub); + +void +link_i4_sub (char *path1, char *path2, GFC_INTEGER_4 *status, + gfc_charlen_type path1_len, gfc_charlen_type path2_len) +{ + int val; + char *str1, *str2; + + /* Trim trailing spaces from paths. */ + while (path1_len > 0 && path1[path1_len - 1] == ' ') + path1_len--; + while (path2_len > 0 && path2[path2_len - 1] == ' ') + path2_len--; + + /* Make a null terminated copy of the strings. */ + str1 = gfc_alloca (path1_len + 1); + memcpy (str1, path1, path1_len); + str1[path1_len] = '\0'; + + str2 = gfc_alloca (path2_len + 1); + memcpy (str2, path2, path2_len); + str2[path2_len] = '\0'; + + val = link (str1, str2); + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} +iexport(link_i4_sub); + +extern void link_i8_sub (char *, char *, GFC_INTEGER_8 *, gfc_charlen_type, + gfc_charlen_type); +iexport_proto(link_i8_sub); + +void +link_i8_sub (char *path1, char *path2, GFC_INTEGER_8 *status, + gfc_charlen_type path1_len, gfc_charlen_type path2_len) +{ + int val; + char *str1, *str2; + + /* Trim trailing spaces from paths. */ + while (path1_len > 0 && path1[path1_len - 1] == ' ') + path1_len--; + while (path2_len > 0 && path2[path2_len - 1] == ' ') + path2_len--; + + /* Make a null terminated copy of the strings. */ + str1 = gfc_alloca (path1_len + 1); + memcpy (str1, path1, path1_len); + str1[path1_len] = '\0'; + + str2 = gfc_alloca (path2_len + 1); + memcpy (str2, path2, path2_len); + str2[path2_len] = '\0'; + + val = link (str1, str2); + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} +iexport(link_i8_sub); + +extern GFC_INTEGER_4 link_i4 (char *, char *, gfc_charlen_type, + gfc_charlen_type); +export_proto(link_i4); + +GFC_INTEGER_4 +link_i4 (char *path1, char *path2, gfc_charlen_type path1_len, + gfc_charlen_type path2_len) +{ + GFC_INTEGER_4 val; + link_i4_sub (path1, path2, &val, path1_len, path2_len); + return val; +} + +extern GFC_INTEGER_8 link_i8 (char *, char *, gfc_charlen_type, + gfc_charlen_type); +export_proto(link_i8); + +GFC_INTEGER_8 +link_i8 (char *path1, char *path2, gfc_charlen_type path1_len, + gfc_charlen_type path2_len) +{ + GFC_INTEGER_8 val; + link_i8_sub (path1, path2, &val, path1_len, path2_len); + return val; +} +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/malloc.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/malloc.c new file mode 100644 index 0000000000..19001aef89 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/malloc.c @@ -0,0 +1,49 @@ +/* Implementation of the MALLOC and FREE intrinsics + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#ifdef HAVE_STDLIB_H +#include +#endif + +extern void PREFIX(free) (void **); +export_proto_np(PREFIX(free)); + +void +PREFIX(free) (void ** ptr) +{ + free (*ptr); +} + + +extern void * PREFIX(malloc) (size_t *); +export_proto_np(PREFIX(malloc)); + +void * +PREFIX(malloc) (size_t * size) +{ + return malloc (*size); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/move_alloc.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/move_alloc.c new file mode 100644 index 0000000000..527aa6f250 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/move_alloc.c @@ -0,0 +1,69 @@ +/* Generic implementation of the MOVE_ALLOC intrinsic + Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Thomas + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#ifdef HAVE_STDLIB_H +#include +#endif + +extern void move_alloc (gfc_array_char *, gfc_array_char *); +export_proto(move_alloc); + +void +move_alloc (gfc_array_char * from, gfc_array_char * to) +{ + int i; + + if (to->data) + free (to->data); + + for (i = 0; i < GFC_DESCRIPTOR_RANK (from); i++) + { + to->dim[i].lbound = from->dim[i].lbound; + to->dim[i].ubound = from->dim[i].ubound; + to->dim[i].stride = from->dim[i].stride; + from->dim[i].stride = 0; + from->dim[i].ubound = from->dim[i].lbound; + } + + to->offset = from->offset; + to->dtype = from->dtype; + to->data = from->data; + from->data = NULL; +} + +extern void move_alloc_c (gfc_array_char *, GFC_INTEGER_4, + gfc_array_char *, GFC_INTEGER_4); +export_proto(move_alloc_c); + +void +move_alloc_c (gfc_array_char * from, + GFC_INTEGER_4 from_length __attribute__((unused)), + gfc_array_char * to, + GFC_INTEGER_4 to_length __attribute__((unused))) +{ + move_alloc (from, to); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/mvbits.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/mvbits.c new file mode 100644 index 0000000000..7c45bfa415 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/mvbits.c @@ -0,0 +1,86 @@ +/* Implementation of the MVBITS intrinsic + Copyright (C) 2004, 2006, 2009 Free Software Foundation, Inc. + Contributed by Tobias Schlüter + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +/* TODO: This should be replaced by a compiler builtin. */ + +#ifndef SUB_NAME +#include +#endif + +#ifdef SUB_NAME +/* MVBITS copies LEN bits starting at bit position FROMPOS from FROM + into TO, starting at bit position TOPOS. */ + +extern void SUB_NAME (const TYPE *, const int *, const int *, TYPE *, + const int *); +export_proto(SUB_NAME); + +void +SUB_NAME (const TYPE *from, const int *frompos, const int *len, TYPE *to, + const int *topos) +{ + TYPE oldbits, newbits, lenmask; + + lenmask = (*len == sizeof (TYPE)*8) ? ~(TYPE)0 : ((TYPE)1 << *len) - 1; + newbits = (((UTYPE)(*from) >> *frompos) & lenmask) << *topos; + oldbits = *to & (~(lenmask << *topos)); + + *to = newbits | oldbits; +} +#endif + +#ifndef SUB_NAME +# define TYPE GFC_INTEGER_1 +# define UTYPE GFC_UINTEGER_1 +# define SUB_NAME mvbits_i1 +# include "mvbits.c" +# undef SUB_NAME +# undef TYPE +# undef UTYPE + +# define TYPE GFC_INTEGER_2 +# define UTYPE GFC_UINTEGER_2 +# define SUB_NAME mvbits_i2 +# include "mvbits.c" +# undef SUB_NAME +# undef TYPE +# undef UTYPE + +# define TYPE GFC_INTEGER_4 +# define UTYPE GFC_UINTEGER_4 +# define SUB_NAME mvbits_i4 +# include "mvbits.c" +# undef SUB_NAME +# undef TYPE +# undef UTYPE + +# define TYPE GFC_INTEGER_8 +# define UTYPE GFC_UINTEGER_8 +# define SUB_NAME mvbits_i8 +# include "mvbits.c" +# undef SUB_NAME +# undef TYPE +# undef UTYPE +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/pack_generic.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/pack_generic.c new file mode 100644 index 0000000000..4c89dad31f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/pack_generic.c @@ -0,0 +1,690 @@ +/* Generic implementation of the PACK intrinsic + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + +/* PACK is specified as follows: + + 13.14.80 PACK (ARRAY, MASK, [VECTOR]) + + Description: Pack an array into an array of rank one under the + control of a mask. + + Class: Transformational function. + + Arguments: + ARRAY may be of any type. It shall not be scalar. + MASK shall be of type LOGICAL. It shall be conformable with ARRAY. + VECTOR (optional) shall be of the same type and type parameters + as ARRAY. VECTOR shall have at least as many elements as + there are true elements in MASK. If MASK is a scalar + with the value true, VECTOR shall have at least as many + elements as there are in ARRAY. + + Result Characteristics: The result is an array of rank one with the + same type and type parameters as ARRAY. If VECTOR is present, the + result size is that of VECTOR; otherwise, the result size is the + number /t/ of true elements in MASK unless MASK is scalar with the + value true, in which case the result size is the size of ARRAY. + + Result Value: Element /i/ of the result is the element of ARRAY + that corresponds to the /i/th true element of MASK, taking elements + in array element order, for /i/ = 1, 2, ..., /t/. If VECTOR is + present and has size /n/ > /t/, element /i/ of the result has the + value VECTOR(/i/), for /i/ = /t/ + 1, ..., /n/. + + Examples: The nonzero elements of an array M with the value + | 0 0 0 | + | 9 0 0 | may be "gathered" by the function PACK. The result of + | 0 0 7 | + PACK (M, MASK = M.NE.0) is [9,7] and the result of PACK (M, M.NE.0, + VECTOR = (/ 2,4,6,8,10,12 /)) is [9,7,6,8,10,12]. + +There are two variants of the PACK intrinsic: one, where MASK is +array valued, and the other one where MASK is scalar. */ + +static void +pack_internal (gfc_array_char *ret, const gfc_array_char *array, + const gfc_array_l1 *mask, const gfc_array_char *vector, + index_type size) +{ + /* r.* indicates the return array. */ + index_type rstride0; + char * restrict rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const char *sptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; + index_type n; + index_type dim; + index_type nelem; + index_type total; + int mask_kind; + + dim = GFC_DESCRIPTOR_RANK (array); + + sptr = array->data; + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Don't convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + zero_sized = 0; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; + sstride[n] = array->dim[n].stride * size; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (sstride[0] == 0) + sstride[0] = size; + if (mstride[0] == 0) + mstride[0] = mask_kind; + + if (ret->data == NULL || compile_options.bounds_check) + { + /* Count the elements, either for allocating memory or + for bounds checking. */ + + if (vector != NULL) + { + /* The return array will have as many + elements as there are in VECTOR. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + } + else + { + /* We have to count the true elements in MASK. */ + + /* TODO: We could speed up pack easily in the case of only + few .TRUE. entries in MASK, by keeping track of where we + would be in the source array during the initial traversal + of MASK, and caching the pointers to those elements. Then, + supposed the number of elements is small enough, we would + only have to traverse the list, and copy those elements + into the result array. In the case of datatypes which fit + in one of the integer types we could also cache the + value instead of a pointer to it. + This approach might be bad from the point of view of + cache behavior in the case where our cache is not big + enough to hold all elements that have to be copied. */ + + const GFC_LOGICAL_1 *m = mptr; + + total = 0; + if (zero_sized) + m = NULL; + + while (m) + { + /* Test this element. */ + if (*m) + total++; + + /* Advance to the next element. */ + m += mstride[0]; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it + and increment the next dimension. */ + count[n] = 0; + /* We could precalculate this product, but this is a + less frequently used path so probably not worth + it. */ + m -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + m = NULL; + break; + } + else + { + count[n]++; + m += mstride[n]; + } + } + } + } + + if (ret->data == NULL) + { + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + + ret->offset = 0; + if (total == 0) + { + /* In this case, nothing remains to be done. */ + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (size * total); + } + else + { + /* We come here because of range checking. */ + index_type ret_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + if (total != ret_extent) + runtime_error ("Incorrect extent in return value of PACK intrinsic;" + " is %ld, should be %ld", (long int) total, + (long int) ret_extent); + } + } + + rstride0 = ret->dim[0].stride * size; + if (rstride0 == 0) + rstride0 = size; + sstride0 = sstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + + while (sptr && mptr) + { + /* Test this element. */ + if (*mptr) + { + /* Add it. */ + memcpy (rptr, sptr, size); + rptr += rstride0; + } + /* Advance to the next element. */ + sptr += sstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + mptr += mstride[n]; + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride * size; + if (sstride0 == 0) + sstride0 = size; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + memcpy (rptr, sptr, size); + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +extern void pack (gfc_array_char *, const gfc_array_char *, + const gfc_array_l1 *, const gfc_array_char *); +export_proto(pack); + +void +pack (gfc_array_char *ret, const gfc_array_char *array, + const gfc_array_l1 *mask, const gfc_array_char *vector) +{ + index_type type_size; + index_type size; + + type_size = GFC_DTYPE_TYPE_SIZE(array); + + switch(type_size) + { + case GFC_DTYPE_LOGICAL_1: + case GFC_DTYPE_INTEGER_1: + case GFC_DTYPE_DERIVED_1: + pack_i1 ((gfc_array_i1 *) ret, (gfc_array_i1 *) array, + (gfc_array_l1 *) mask, (gfc_array_i1 *) vector); + return; + + case GFC_DTYPE_LOGICAL_2: + case GFC_DTYPE_INTEGER_2: + pack_i2 ((gfc_array_i2 *) ret, (gfc_array_i2 *) array, + (gfc_array_l1 *) mask, (gfc_array_i2 *) vector); + return; + + case GFC_DTYPE_LOGICAL_4: + case GFC_DTYPE_INTEGER_4: + + pack_i4 ((gfc_array_i4 *) ret, (gfc_array_i4 *) array, + (gfc_array_l1 *) mask, (gfc_array_i4 *) vector); + return; + + case GFC_DTYPE_LOGICAL_8: + case GFC_DTYPE_INTEGER_8: + + pack_i8 ((gfc_array_i8 *) ret, (gfc_array_i8 *) array, + (gfc_array_l1 *) mask, (gfc_array_i8 *) vector); + return; + +#ifdef HAVE_GFC_INTEGER_16 + case GFC_DTYPE_LOGICAL_16: + case GFC_DTYPE_INTEGER_16: + + pack_i16 ((gfc_array_i16 *) ret, (gfc_array_i16 *) array, + (gfc_array_l1 *) mask, (gfc_array_i16 *) vector); + return; +#endif + case GFC_DTYPE_REAL_4: + pack_r4 ((gfc_array_r4 *) ret, (gfc_array_r4 *) array, + (gfc_array_l1 *) mask, (gfc_array_r4 *) vector); + return; + + case GFC_DTYPE_REAL_8: + pack_r8 ((gfc_array_r8 *) ret, (gfc_array_r8 *) array, + (gfc_array_l1 *) mask, (gfc_array_r8 *) vector); + return; + +#ifdef HAVE_GFC_REAL_10 + case GFC_DTYPE_REAL_10: + pack_r10 ((gfc_array_r10 *) ret, (gfc_array_r10 *) array, + (gfc_array_l1 *) mask, (gfc_array_r10 *) vector); + return; +#endif + +#ifdef HAVE_GFC_REAL_16 + case GFC_DTYPE_REAL_16: + pack_r16 ((gfc_array_r16 *) ret, (gfc_array_r16 *) array, + (gfc_array_l1 *) mask, (gfc_array_r16 *) vector); + return; +#endif + case GFC_DTYPE_COMPLEX_4: + pack_c4 ((gfc_array_c4 *) ret, (gfc_array_c4 *) array, + (gfc_array_l1 *) mask, (gfc_array_c4 *) vector); + return; + + case GFC_DTYPE_COMPLEX_8: + pack_c8 ((gfc_array_c8 *) ret, (gfc_array_c8 *) array, + (gfc_array_l1 *) mask, (gfc_array_c8 *) vector); + return; + +#ifdef HAVE_GFC_COMPLEX_10 + case GFC_DTYPE_COMPLEX_10: + pack_c10 ((gfc_array_c10 *) ret, (gfc_array_c10 *) array, + (gfc_array_l1 *) mask, (gfc_array_c10 *) vector); + return; +#endif + +#ifdef HAVE_GFC_COMPLEX_16 + case GFC_DTYPE_COMPLEX_16: + pack_c16 ((gfc_array_c16 *) ret, (gfc_array_c16 *) array, + (gfc_array_l1 *) mask, (gfc_array_c16 *) vector); + return; +#endif + + /* For derived types, let's check the actual alignment of the + data pointers. If they are aligned, we can safely call + the unpack functions. */ + + case GFC_DTYPE_DERIVED_2: + if (GFC_UNALIGNED_2(ret->data) || GFC_UNALIGNED_2(array->data) + || GFC_UNALIGNED_2(vector->data)) + break; + else + { + pack_i2 ((gfc_array_i2 *) ret, (gfc_array_i2 *) array, + (gfc_array_l1 *) mask, (gfc_array_i2 *) vector); + return; + } + + case GFC_DTYPE_DERIVED_4: + if (GFC_UNALIGNED_4(ret->data) || GFC_UNALIGNED_4(array->data) + || GFC_UNALIGNED_4(vector->data)) + break; + else + { + pack_i4 ((gfc_array_i4 *) ret, (gfc_array_i4 *) array, + (gfc_array_l1 *) mask, (gfc_array_i4 *) vector); + return; + } + + case GFC_DTYPE_DERIVED_8: + if (GFC_UNALIGNED_8(ret->data) || GFC_UNALIGNED_8(array->data) + || GFC_UNALIGNED_8(vector->data)) + break; + else + { + pack_i8 ((gfc_array_i8 *) ret, (gfc_array_i8 *) array, + (gfc_array_l1 *) mask, (gfc_array_i8 *) vector); + } + +#ifdef HAVE_GFC_INTEGER_16 + case GFC_DTYPE_DERIVED_16: + if (GFC_UNALIGNED_16(ret->data) || GFC_UNALIGNED_16(array->data) + || GFC_UNALIGNED_16(vector->data)) + break; + else + { + pack_i16 ((gfc_array_i16 *) ret, (gfc_array_i16 *) array, + (gfc_array_l1 *) mask, (gfc_array_i16 *) vector); + return; + } +#endif + + } + + size = GFC_DESCRIPTOR_SIZE (array); + pack_internal (ret, array, mask, vector, size); +} + + +extern void pack_char (gfc_array_char *, GFC_INTEGER_4, const gfc_array_char *, + const gfc_array_l1 *, const gfc_array_char *, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(pack_char); + +void +pack_char (gfc_array_char *ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char *array, const gfc_array_l1 *mask, + const gfc_array_char *vector, GFC_INTEGER_4 array_length, + GFC_INTEGER_4 vector_length __attribute__((unused))) +{ + pack_internal (ret, array, mask, vector, array_length); +} + + +extern void pack_char4 (gfc_array_char *, GFC_INTEGER_4, const gfc_array_char *, + const gfc_array_l1 *, const gfc_array_char *, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(pack_char4); + +void +pack_char4 (gfc_array_char *ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char *array, const gfc_array_l1 *mask, + const gfc_array_char *vector, GFC_INTEGER_4 array_length, + GFC_INTEGER_4 vector_length __attribute__((unused))) +{ + pack_internal (ret, array, mask, vector, array_length * sizeof (gfc_char4_t)); +} + + +static void +pack_s_internal (gfc_array_char *ret, const gfc_array_char *array, + const GFC_LOGICAL_4 *mask, const gfc_array_char *vector, + index_type size) +{ + /* r.* indicates the return array. */ + index_type rstride0; + char *rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const char *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ssize; + index_type nelem; + index_type total; + + dim = GFC_DESCRIPTOR_RANK (array); + ssize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] < 0) + extent[n] = 0; + + sstride[n] = array->dim[n].stride * size; + ssize *= extent[n]; + } + if (sstride[0] == 0) + sstride[0] = size; + + sstride0 = sstride[0]; + + if (ssize != 0) + sptr = array->data; + else + sptr = NULL; + + if (ret->data == NULL) + { + /* Allocate the memory for the result. */ + + if (vector != NULL) + { + /* The return array will have as many elements as there are + in vector. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + if (total <= 0) + { + total = 0; + vector = NULL; + } + } + else + { + if (*mask) + { + /* The result array will have as many elements as the input + array. */ + total = extent[0]; + for (n = 1; n < dim; n++) + total *= extent[n]; + } + else + /* The result array will be empty. */ + total = 0; + } + + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + ret->offset = 0; + + if (total == 0) + { + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (size * total); + } + + rstride0 = ret->dim[0].stride * size; + if (rstride0 == 0) + rstride0 = size; + rptr = ret->data; + + /* The remaining possibilities are now: + If MASK is .TRUE., we have to copy the source array into the + result array. We then have to fill it up with elements from VECTOR. + If MASK is .FALSE., we have to copy VECTOR into the result + array. If VECTOR were not present we would have already returned. */ + + if (*mask && ssize != 0) + { + while (sptr) + { + /* Add this element. */ + memcpy (rptr, sptr, size); + rptr += rstride0; + + /* Advance to the next element. */ + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and + increment the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a + less frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + } + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride * size; + if (sstride0 == 0) + sstride0 = size; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + memcpy (rptr, sptr, size); + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +extern void pack_s (gfc_array_char *ret, const gfc_array_char *array, + const GFC_LOGICAL_4 *, const gfc_array_char *); +export_proto(pack_s); + +void +pack_s (gfc_array_char *ret, const gfc_array_char *array, + const GFC_LOGICAL_4 *mask, const gfc_array_char *vector) +{ + pack_s_internal (ret, array, mask, vector, GFC_DESCRIPTOR_SIZE (array)); +} + + +extern void pack_s_char (gfc_array_char *ret, GFC_INTEGER_4, + const gfc_array_char *array, const GFC_LOGICAL_4 *, + const gfc_array_char *, GFC_INTEGER_4, + GFC_INTEGER_4); +export_proto(pack_s_char); + +void +pack_s_char (gfc_array_char *ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char *array, const GFC_LOGICAL_4 *mask, + const gfc_array_char *vector, GFC_INTEGER_4 array_length, + GFC_INTEGER_4 vector_length __attribute__((unused))) +{ + pack_s_internal (ret, array, mask, vector, array_length); +} + + +extern void pack_s_char4 (gfc_array_char *ret, GFC_INTEGER_4, + const gfc_array_char *array, const GFC_LOGICAL_4 *, + const gfc_array_char *, GFC_INTEGER_4, + GFC_INTEGER_4); +export_proto(pack_s_char4); + +void +pack_s_char4 (gfc_array_char *ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char *array, const GFC_LOGICAL_4 *mask, + const gfc_array_char *vector, GFC_INTEGER_4 array_length, + GFC_INTEGER_4 vector_length __attribute__((unused))) +{ + pack_s_internal (ret, array, mask, vector, + array_length * sizeof (gfc_char4_t)); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/perror.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/perror.c new file mode 100644 index 0000000000..10348bd082 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/perror.c @@ -0,0 +1,55 @@ +/* Implementation of the PERROR intrinsic. + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include +#include + +/* SUBROUTINE PERROR(STRING) + CHARACTER(len=*), INTENT(IN) :: STRING */ + +#ifdef HAVE_PERROR +extern void perror_sub (char *, gfc_charlen_type); +iexport_proto(perror_sub); + +void +perror_sub (char *string, gfc_charlen_type string_len) +{ + char * str; + + /* Trim trailing spaces from paths. */ + while (string_len > 0 && string[string_len - 1] == ' ') + string_len--; + + /* Make a null terminated copy of the strings. */ + str = gfc_alloca (string_len + 1); + memcpy (str, string, string_len); + str[string_len] = '\0'; + + perror (str); +} +iexport(perror_sub); +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/rand.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/rand.c new file mode 100644 index 0000000000..369feaeaf4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/rand.c @@ -0,0 +1,136 @@ +/* Implementation of the IRAND, RAND, and SRAND intrinsics. + Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +/* Simple multiplicative congruent algorithm. + The period of this generator is approximately 2^31-1, which means that + it should not be used for anything serious. The implementation here + is based of an algorithm from S.K. Park and K.W. Miller, Comm. ACM, + 31, 1192-1201 (1988). It is also provided solely for compatibility + with G77. */ + +#include "libgfortran.h" +#include + +#define GFC_RAND_A 16807 +#define GFC_RAND_M 2147483647 +#define GFC_RAND_M1 (GFC_RAND_M - 1) + +static GFC_UINTEGER_8 rand_seed = 1; +#ifdef __GTHREAD_MUTEX_INIT +static __gthread_mutex_t rand_seed_lock = __GTHREAD_MUTEX_INIT; +#else +static __gthread_mutex_t rand_seed_lock; +#endif + + +/* Set the seed of the irand generator. Note 0 is a bad seed. */ + +static void +srand_internal (GFC_INTEGER_8 i) +{ + rand_seed = i ? i : 123459876; +} + +extern void PREFIX(srand) (GFC_INTEGER_4 *i); +export_proto_np(PREFIX(srand)); + +void +PREFIX(srand) (GFC_INTEGER_4 *i) +{ + __gthread_mutex_lock (&rand_seed_lock); + srand_internal (*i); + __gthread_mutex_unlock (&rand_seed_lock); +} + +/* Return an INTEGER in the range [1,GFC_RAND_M-1]. */ + +extern GFC_INTEGER_4 irand (GFC_INTEGER_4 *); +iexport_proto(irand); + +GFC_INTEGER_4 +irand (GFC_INTEGER_4 *i) +{ + GFC_INTEGER_4 j; + if (i) + j = *i; + else + j = 0; + + __gthread_mutex_lock (&rand_seed_lock); + + switch (j) + { + /* Return the next RN. */ + case 0: + break; + + /* Reset the RN sequence to system-dependent sequence and return the + first value. */ + case 1: + srand_internal (0); + break; + + /* Seed the RN sequence with j and return the first value. */ + default: + srand_internal (j); + break; + } + + rand_seed = GFC_RAND_A * rand_seed % GFC_RAND_M; + j = (GFC_INTEGER_4) rand_seed; + + __gthread_mutex_unlock (&rand_seed_lock); + + return j; +} +iexport(irand); + + +/* Return a random REAL in the range [0,1). */ + +extern GFC_REAL_4 PREFIX(rand) (GFC_INTEGER_4 *i); +export_proto_np(PREFIX(rand)); + +GFC_REAL_4 +PREFIX(rand) (GFC_INTEGER_4 *i) +{ + GFC_UINTEGER_4 mask; +#if GFC_REAL_4_RADIX == 2 + mask = ~ (GFC_UINTEGER_4) 0u << (32 - GFC_REAL_4_DIGITS + 1); +#elif GFC_REAL_4_RADIX == 16 + mask = ~ (GFC_UINTEGER_4) 0u << ((8 - GFC_REAL_4_DIGITS) * 4 + 1); +#else +#error "GFC_REAL_4_RADIX has unknown value" +#endif + return ((GFC_UINTEGER_4) (irand(i) -1) & mask) * (GFC_REAL_4) 0x1.p-31f; +} + +#ifndef __GTHREAD_MUTEX_INIT +static void __attribute__((constructor)) +init (void) +{ + __GTHREAD_MUTEX_INIT_FUNCTION (&rand_seed_lock); +} +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/random.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/random.c new file mode 100644 index 0000000000..0d1f25f704 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/random.c @@ -0,0 +1,797 @@ +/* Implementation of the RANDOM intrinsics + Copyright 2002, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Lars Segerlund + and Steve Kargl. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include + +extern void random_r4 (GFC_REAL_4 *); +iexport_proto(random_r4); + +extern void random_r8 (GFC_REAL_8 *); +iexport_proto(random_r8); + +extern void arandom_r4 (gfc_array_r4 *); +export_proto(arandom_r4); + +extern void arandom_r8 (gfc_array_r8 *); +export_proto(arandom_r8); + +#ifdef HAVE_GFC_REAL_10 + +extern void random_r10 (GFC_REAL_10 *); +iexport_proto(random_r10); + +extern void arandom_r10 (gfc_array_r10 *); +export_proto(arandom_r10); + +#endif + +#ifdef HAVE_GFC_REAL_16 + +extern void random_r16 (GFC_REAL_16 *); +iexport_proto(random_r16); + +extern void arandom_r16 (gfc_array_r16 *); +export_proto(arandom_r16); + +#endif + +#ifdef __GTHREAD_MUTEX_INIT +static __gthread_mutex_t random_lock = __GTHREAD_MUTEX_INIT; +#else +static __gthread_mutex_t random_lock; +#endif + +/* Helper routines to map a GFC_UINTEGER_* to the corresponding + GFC_REAL_* types in the range of [0,1). If GFC_REAL_*_RADIX are 2 + or 16, respectively, we mask off the bits that don't fit into the + correct GFC_REAL_*, convert to the real type, then multiply by the + correct offset. */ + + +static inline void +rnumber_4 (GFC_REAL_4 *f, GFC_UINTEGER_4 v) +{ + GFC_UINTEGER_4 mask; +#if GFC_REAL_4_RADIX == 2 + mask = ~ (GFC_UINTEGER_4) 0u << (32 - GFC_REAL_4_DIGITS); +#elif GFC_REAL_4_RADIX == 16 + mask = ~ (GFC_UINTEGER_4) 0u << ((8 - GFC_REAL_4_DIGITS) * 4); +#else +#error "GFC_REAL_4_RADIX has unknown value" +#endif + v = v & mask; + *f = (GFC_REAL_4) v * (GFC_REAL_4) 0x1.p-32f; +} + +static inline void +rnumber_8 (GFC_REAL_8 *f, GFC_UINTEGER_8 v) +{ + GFC_UINTEGER_8 mask; +#if GFC_REAL_8_RADIX == 2 + mask = ~ (GFC_UINTEGER_8) 0u << (64 - GFC_REAL_8_DIGITS); +#elif GFC_REAL_8_RADIX == 16 + mask = ~ (GFC_UINTEGER_8) 0u << (16 - GFC_REAL_8_DIGITS) * 4); +#else +#error "GFC_REAL_8_RADIX has unknown value" +#endif + v = v & mask; + *f = (GFC_REAL_8) v * (GFC_REAL_8) 0x1.p-64; +} + +#ifdef HAVE_GFC_REAL_10 + +static inline void +rnumber_10 (GFC_REAL_10 *f, GFC_UINTEGER_8 v) +{ + GFC_UINTEGER_8 mask; +#if GFC_REAL_10_RADIX == 2 + mask = ~ (GFC_UINTEGER_8) 0u << (64 - GFC_REAL_10_DIGITS); +#elif GFC_REAL_10_RADIX == 16 + mask = ~ (GFC_UINTEGER_10) 0u << ((16 - GFC_REAL_10_DIGITS) * 4); +#else +#error "GFC_REAL_10_RADIX has unknown value" +#endif + v = v & mask; + *f = (GFC_REAL_10) v * (GFC_REAL_10) 0x1.p-64; +} +#endif + +#ifdef HAVE_GFC_REAL_16 + +/* For REAL(KIND=16), we only need to mask off the lower bits. */ + +static inline void +rnumber_16 (GFC_REAL_16 *f, GFC_UINTEGER_8 v1, GFC_UINTEGER_8 v2) +{ + GFC_UINTEGER_8 mask; +#if GFC_REAL_16_RADIX == 2 + mask = ~ (GFC_UINTEGER_8) 0u << (128 - GFC_REAL_16_DIGITS); +#elif GFC_REAL_16_RADIX == 16 + mask = ~ (GFC_UINTEGER_8) 0u << ((32 - GFC_REAL_16_DIGITS) * 4); +#else +#error "GFC_REAL_16_RADIX has unknown value" +#endif + v2 = v2 & mask; + *f = (GFC_REAL_16) v1 * (GFC_REAL_16) 0x1.p-64 + + (GFC_REAL_16) v2 * (GFC_REAL_16) 0x1.p-128; +} +#endif +/* libgfortran previously had a Mersenne Twister, taken from the paper: + + Mersenne Twister: 623-dimensionally equidistributed + uniform pseudorandom generator. + + by Makoto Matsumoto & Takuji Nishimura + which appeared in the: ACM Transactions on Modelling and Computer + Simulations: Special Issue on Uniform Random Number + Generation. ( Early in 1998 ). + + The Mersenne Twister code was replaced due to + + (1) Simple user specified seeds lead to really bad sequences for + nearly 100000 random numbers. + (2) open(), read(), and close() were not properly declared via header + files. + (3) The global index i was abused and caused unexpected behavior with + GET and PUT. + (4) See PR 15619. + + + libgfortran currently uses George Marsaglia's KISS (Keep It Simple Stupid) + random number generator. This PRNG combines: + + (1) The congruential generator x(n)=69069*x(n-1)+1327217885 with a period + of 2^32, + (2) A 3-shift shift-register generator with a period of 2^32-1, + (3) Two 16-bit multiply-with-carry generators with a period of + 597273182964842497 > 2^59. + + The overall period exceeds 2^123. + + http://www.ciphersbyritter.com/NEWS4/RANDC.HTM#369F6FCA.74C7C041@stat.fsu.edu + + The above web site has an archive of a newsgroup posting from George + Marsaglia with the statement: + + Subject: Random numbers for C: Improvements. + Date: Fri, 15 Jan 1999 11:41:47 -0500 + From: George Marsaglia + Message-ID: <369F6FCA.74C7C041@stat.fsu.edu> + References: <369B5E30.65A55FD1@stat.fsu.edu> + Newsgroups: sci.stat.math,sci.math,sci.math.numer-analysis + Lines: 93 + + As I hoped, several suggestions have led to + improvements in the code for RNG's I proposed for + use in C. (See the thread "Random numbers for C: Some + suggestions" in previous postings.) The improved code + is listed below. + + A question of copyright has also been raised. Unlike + DIEHARD, there is no copyright on the code below. You + are free to use it in any way you want, but you may + wish to acknowledge the source, as a courtesy. + +"There is no copyright on the code below." included the original +KISS algorithm. */ + +/* We use three KISS random number generators, with different + seeds. + As a matter of Quality of Implementation, the random numbers + we generate for different REAL kinds, starting from the same + seed, are always the same up to the precision of these types. + We do this by using three generators with different seeds, the + first one always for the most significant bits, the second one + for bits 33..64 (if present in the REAL kind), and the third one + (called twice) for REAL(16). */ + +#define GFC_SL(k, n) ((k)^((k)<<(n))) +#define GFC_SR(k, n) ((k)^((k)>>(n))) + +/* Reference for the seed: + From: "George Marsaglia" + Newsgroups: sci.math + Message-ID: + + The KISS RNG uses four seeds, x, y, z, c, + with 0<=x<2^32, 0> 16); + seed[3] = 30903 * (seed[3] & 65535) + (seed[3] >> 16); + kiss = seed[0] + seed[1] + (seed[2] << 16) + seed[3]; + + return kiss; +} + +/* This function produces a REAL(4) value from the uniform distribution + with range [0,1). */ + +void +random_r4 (GFC_REAL_4 *x) +{ + GFC_UINTEGER_4 kiss; + + __gthread_mutex_lock (&random_lock); + kiss = kiss_random_kernel (kiss_seed_1); + rnumber_4 (x, kiss); + __gthread_mutex_unlock (&random_lock); +} +iexport(random_r4); + +/* This function produces a REAL(8) value from the uniform distribution + with range [0,1). */ + +void +random_r8 (GFC_REAL_8 *x) +{ + GFC_UINTEGER_8 kiss; + + __gthread_mutex_lock (&random_lock); + kiss = ((GFC_UINTEGER_8) kiss_random_kernel (kiss_seed_1)) << 32; + kiss += kiss_random_kernel (kiss_seed_2); + rnumber_8 (x, kiss); + __gthread_mutex_unlock (&random_lock); +} +iexport(random_r8); + +#ifdef HAVE_GFC_REAL_10 + +/* This function produces a REAL(10) value from the uniform distribution + with range [0,1). */ + +void +random_r10 (GFC_REAL_10 *x) +{ + GFC_UINTEGER_8 kiss; + + __gthread_mutex_lock (&random_lock); + kiss = ((GFC_UINTEGER_8) kiss_random_kernel (kiss_seed_1)) << 32; + kiss += kiss_random_kernel (kiss_seed_2); + rnumber_10 (x, kiss); + __gthread_mutex_unlock (&random_lock); +} +iexport(random_r10); + +#endif + +/* This function produces a REAL(16) value from the uniform distribution + with range [0,1). */ + +#ifdef HAVE_GFC_REAL_16 + +void +random_r16 (GFC_REAL_16 *x) +{ + GFC_UINTEGER_8 kiss1, kiss2; + + __gthread_mutex_lock (&random_lock); + kiss1 = ((GFC_UINTEGER_8) kiss_random_kernel (kiss_seed_1)) << 32; + kiss1 += kiss_random_kernel (kiss_seed_2); + + kiss2 = ((GFC_UINTEGER_8) kiss_random_kernel (kiss_seed_3)) << 32; + kiss2 += kiss_random_kernel (kiss_seed_3); + + rnumber_16 (x, kiss1, kiss2); + __gthread_mutex_unlock (&random_lock); +} +iexport(random_r16); + + +#endif +/* This function fills a REAL(4) array with values from the uniform + distribution with range [0,1). */ + +void +arandom_r4 (gfc_array_r4 *x) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + GFC_REAL_4 *dest; + GFC_UINTEGER_4 kiss; + int n; + + dest = x->data; + + dim = GFC_DESCRIPTOR_RANK (x); + + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = x->dim[n].stride; + extent[n] = x->dim[n].ubound + 1 - x->dim[n].lbound; + if (extent[n] <= 0) + return; + } + + stride0 = stride[0]; + + __gthread_mutex_lock (&random_lock); + + while (dest) + { + /* random_r4 (dest); */ + kiss = kiss_random_kernel (kiss_seed_1); + rnumber_4 (dest, kiss); + + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } + __gthread_mutex_unlock (&random_lock); +} + +/* This function fills a REAL(8) array with values from the uniform + distribution with range [0,1). */ + +void +arandom_r8 (gfc_array_r8 *x) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + GFC_REAL_8 *dest; + GFC_UINTEGER_8 kiss; + int n; + + dest = x->data; + + dim = GFC_DESCRIPTOR_RANK (x); + + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = x->dim[n].stride; + extent[n] = x->dim[n].ubound + 1 - x->dim[n].lbound; + if (extent[n] <= 0) + return; + } + + stride0 = stride[0]; + + __gthread_mutex_lock (&random_lock); + + while (dest) + { + /* random_r8 (dest); */ + kiss = ((GFC_UINTEGER_8) kiss_random_kernel (kiss_seed_1)) << 32; + kiss += kiss_random_kernel (kiss_seed_2); + rnumber_8 (dest, kiss); + + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } + __gthread_mutex_unlock (&random_lock); +} + +#ifdef HAVE_GFC_REAL_10 + +/* This function fills a REAL(10) array with values from the uniform + distribution with range [0,1). */ + +void +arandom_r10 (gfc_array_r10 *x) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + GFC_REAL_10 *dest; + GFC_UINTEGER_8 kiss; + int n; + + dest = x->data; + + dim = GFC_DESCRIPTOR_RANK (x); + + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = x->dim[n].stride; + extent[n] = x->dim[n].ubound + 1 - x->dim[n].lbound; + if (extent[n] <= 0) + return; + } + + stride0 = stride[0]; + + __gthread_mutex_lock (&random_lock); + + while (dest) + { + /* random_r10 (dest); */ + kiss = ((GFC_UINTEGER_8) kiss_random_kernel (kiss_seed_1)) << 32; + kiss += kiss_random_kernel (kiss_seed_2); + rnumber_10 (dest, kiss); + + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } + __gthread_mutex_unlock (&random_lock); +} + +#endif + +#ifdef HAVE_GFC_REAL_16 + +/* This function fills a REAL(16) array with values from the uniform + distribution with range [0,1). */ + +void +arandom_r16 (gfc_array_r16 *x) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + GFC_REAL_16 *dest; + GFC_UINTEGER_8 kiss1, kiss2; + int n; + + dest = x->data; + + dim = GFC_DESCRIPTOR_RANK (x); + + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = x->dim[n].stride; + extent[n] = x->dim[n].ubound + 1 - x->dim[n].lbound; + if (extent[n] <= 0) + return; + } + + stride0 = stride[0]; + + __gthread_mutex_lock (&random_lock); + + while (dest) + { + /* random_r16 (dest); */ + kiss1 = ((GFC_UINTEGER_8) kiss_random_kernel (kiss_seed_1)) << 32; + kiss1 += kiss_random_kernel (kiss_seed_2); + + kiss2 = ((GFC_UINTEGER_8) kiss_random_kernel (kiss_seed_3)) << 32; + kiss2 += kiss_random_kernel (kiss_seed_3); + + rnumber_16 (dest, kiss1, kiss2); + + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } + __gthread_mutex_unlock (&random_lock); +} + +#endif + + + +static void +scramble_seed (unsigned char *dest, unsigned char *src, int size) +{ + int i; + + for (i = 0; i < size; i++) + dest[(i % 2) * (size / 2) + i / 2] = src[i]; +} + + +static void +unscramble_seed (unsigned char *dest, unsigned char *src, int size) +{ + int i; + + for (i = 0; i < size; i++) + dest[i] = src[(i % 2) * (size / 2) + i / 2]; +} + + + +/* random_seed is used to seed the PRNG with either a default + set of seeds or user specified set of seeds. random_seed + must be called with no argument or exactly one argument. */ + +void +random_seed_i4 (GFC_INTEGER_4 *size, gfc_array_i4 *put, gfc_array_i4 *get) +{ + int i; + unsigned char seed[4*kiss_size]; + + __gthread_mutex_lock (&random_lock); + + /* Check that we only have one argument present. */ + if ((size ? 1 : 0) + (put ? 1 : 0) + (get ? 1 : 0) > 1) + runtime_error ("RANDOM_SEED should have at most one argument present."); + + /* From the standard: "If no argument is present, the processor assigns + a processor-dependent value to the seed." */ + if (size == NULL && put == NULL && get == NULL) + for (i = 0; i < kiss_size; i++) + kiss_seed[i] = kiss_default_seed[i]; + + if (size != NULL) + *size = kiss_size; + + if (put != NULL) + { + /* If the rank of the array is not 1, abort. */ + if (GFC_DESCRIPTOR_RANK (put) != 1) + runtime_error ("Array rank of PUT is not 1."); + + /* If the array is too small, abort. */ + if (((put->dim[0].ubound + 1 - put->dim[0].lbound)) < kiss_size) + runtime_error ("Array size of PUT is too small."); + + /* We copy the seed given by the user. */ + for (i = 0; i < kiss_size; i++) + memcpy (seed + i * sizeof(GFC_UINTEGER_4), + &(put->data[(kiss_size - 1 - i) * put->dim[0].stride]), + sizeof(GFC_UINTEGER_4)); + + /* We put it after scrambling the bytes, to paper around users who + provide seeds with quality only in the lower or upper part. */ + scramble_seed ((unsigned char *) kiss_seed, seed, 4*kiss_size); + } + + /* Return the seed to GET data. */ + if (get != NULL) + { + /* If the rank of the array is not 1, abort. */ + if (GFC_DESCRIPTOR_RANK (get) != 1) + runtime_error ("Array rank of GET is not 1."); + + /* If the array is too small, abort. */ + if (((get->dim[0].ubound + 1 - get->dim[0].lbound)) < kiss_size) + runtime_error ("Array size of GET is too small."); + + /* Unscramble the seed. */ + unscramble_seed (seed, (unsigned char *) kiss_seed, 4*kiss_size); + + /* Then copy it back to the user variable. */ + for (i = 0; i < kiss_size; i++) + memcpy (&(get->data[(kiss_size - 1 - i) * get->dim[0].stride]), + seed + i * sizeof(GFC_UINTEGER_4), + sizeof(GFC_UINTEGER_4)); + } + + __gthread_mutex_unlock (&random_lock); +} +iexport(random_seed_i4); + + +void +random_seed_i8 (GFC_INTEGER_8 *size, gfc_array_i8 *put, gfc_array_i8 *get) +{ + int i; + + __gthread_mutex_lock (&random_lock); + + /* Check that we only have one argument present. */ + if ((size ? 1 : 0) + (put ? 1 : 0) + (get ? 1 : 0) > 1) + runtime_error ("RANDOM_SEED should have at most one argument present."); + + /* From the standard: "If no argument is present, the processor assigns + a processor-dependent value to the seed." */ + if (size == NULL && put == NULL && get == NULL) + for (i = 0; i < kiss_size; i++) + kiss_seed[i] = kiss_default_seed[i]; + + if (size != NULL) + *size = kiss_size / 2; + + if (put != NULL) + { + /* If the rank of the array is not 1, abort. */ + if (GFC_DESCRIPTOR_RANK (put) != 1) + runtime_error ("Array rank of PUT is not 1."); + + /* If the array is too small, abort. */ + if (((put->dim[0].ubound + 1 - put->dim[0].lbound)) < kiss_size / 2) + runtime_error ("Array size of PUT is too small."); + + /* This code now should do correct strides. */ + for (i = 0; i < kiss_size / 2; i++) + memcpy (&kiss_seed[2*i], &(put->data[i * put->dim[0].stride]), + sizeof (GFC_UINTEGER_8)); + } + + /* Return the seed to GET data. */ + if (get != NULL) + { + /* If the rank of the array is not 1, abort. */ + if (GFC_DESCRIPTOR_RANK (get) != 1) + runtime_error ("Array rank of GET is not 1."); + + /* If the array is too small, abort. */ + if (((get->dim[0].ubound + 1 - get->dim[0].lbound)) < kiss_size / 2) + runtime_error ("Array size of GET is too small."); + + /* This code now should do correct strides. */ + for (i = 0; i < kiss_size / 2; i++) + memcpy (&(get->data[i * get->dim[0].stride]), &kiss_seed[2*i], + sizeof (GFC_UINTEGER_8)); + } + + __gthread_mutex_unlock (&random_lock); +} +iexport(random_seed_i8); + + +#ifndef __GTHREAD_MUTEX_INIT +static void __attribute__((constructor)) +init (void) +{ + __GTHREAD_MUTEX_INIT_FUNCTION (&random_lock); +} +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/rename.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/rename.c new file mode 100644 index 0000000000..0d7dd166b9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/rename.c @@ -0,0 +1,125 @@ +/* Implementation of the RENAME intrinsic. + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include +#include + +/* SUBROUTINE RENAME(PATH1, PATH2, STATUS) + CHARACTER(len=*), INTENT(IN) :: PATH1, PATH2 + INTEGER, INTENT(OUT), OPTIONAL :: STATUS */ + +extern void rename_i4_sub (char *, char *, GFC_INTEGER_4 *, gfc_charlen_type, + gfc_charlen_type); +iexport_proto(rename_i4_sub); + +void +rename_i4_sub (char *path1, char *path2, GFC_INTEGER_4 *status, + gfc_charlen_type path1_len, gfc_charlen_type path2_len) +{ + int val; + char *str1, *str2; + + /* Trim trailing spaces from paths. */ + while (path1_len > 0 && path1[path1_len - 1] == ' ') + path1_len--; + while (path2_len > 0 && path2[path2_len - 1] == ' ') + path2_len--; + + /* Make a null terminated copy of the strings. */ + str1 = gfc_alloca (path1_len + 1); + memcpy (str1, path1, path1_len); + str1[path1_len] = '\0'; + + str2 = gfc_alloca (path2_len + 1); + memcpy (str2, path2, path2_len); + str2[path2_len] = '\0'; + + val = rename (str1, str2); + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} +iexport(rename_i4_sub); + +extern void rename_i8_sub (char *, char *, GFC_INTEGER_8 *, gfc_charlen_type, + gfc_charlen_type); +iexport_proto(rename_i8_sub); + +void +rename_i8_sub (char *path1, char *path2, GFC_INTEGER_8 *status, + gfc_charlen_type path1_len, gfc_charlen_type path2_len) +{ + int val; + char *str1, *str2; + + /* Trim trailing spaces from paths. */ + while (path1_len > 0 && path1[path1_len - 1] == ' ') + path1_len--; + while (path2_len > 0 && path2[path2_len - 1] == ' ') + path2_len--; + + /* Make a null terminated copy of the strings. */ + str1 = gfc_alloca (path1_len + 1); + memcpy (str1, path1, path1_len); + str1[path1_len] = '\0'; + + str2 = gfc_alloca (path2_len + 1); + memcpy (str2, path2, path2_len); + str2[path2_len] = '\0'; + + val = rename (str1, str2); + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} +iexport(rename_i8_sub); + +extern GFC_INTEGER_4 rename_i4 (char *, char *, gfc_charlen_type, + gfc_charlen_type); +export_proto(rename_i4); + +GFC_INTEGER_4 +rename_i4 (char *path1, char *path2, gfc_charlen_type path1_len, + gfc_charlen_type path2_len) +{ + GFC_INTEGER_4 val; + rename_i4_sub (path1, path2, &val, path1_len, path2_len); + return val; +} + +extern GFC_INTEGER_8 rename_i8 (char *, char *, gfc_charlen_type, + gfc_charlen_type); +export_proto(rename_i8); + +GFC_INTEGER_8 +rename_i8 (char *path1, char *path2, gfc_charlen_type path1_len, + gfc_charlen_type path2_len) +{ + GFC_INTEGER_8 val; + rename_i8_sub (path1, path2, &val, path1_len, path2_len); + return val; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/reshape_generic.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/reshape_generic.c new file mode 100644 index 0000000000..0f3022701c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/reshape_generic.c @@ -0,0 +1,380 @@ +/* Generic implementation of the RESHAPE intrinsic + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + +typedef GFC_ARRAY_DESCRIPTOR(1, index_type) shape_type; +typedef GFC_ARRAY_DESCRIPTOR(GFC_MAX_DIMENSIONS, char) parray; + +static void +reshape_internal (parray *ret, parray *source, shape_type *shape, + parray *pad, shape_type *order, index_type size) +{ + /* r.* indicates the return array. */ + index_type rcount[GFC_MAX_DIMENSIONS]; + index_type rextent[GFC_MAX_DIMENSIONS]; + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdim; + index_type rsize; + index_type rs; + index_type rex; + char * restrict rptr; + /* s.* indicates the source array. */ + index_type scount[GFC_MAX_DIMENSIONS]; + index_type sextent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type sdim; + index_type ssize; + const char *sptr; + /* p.* indicates the pad array. */ + index_type pcount[GFC_MAX_DIMENSIONS]; + index_type pextent[GFC_MAX_DIMENSIONS]; + index_type pstride[GFC_MAX_DIMENSIONS]; + index_type pdim; + index_type psize; + const char *pptr; + + const char *src; + int n; + int dim; + int sempty, pempty, shape_empty; + index_type shape_data[GFC_MAX_DIMENSIONS]; + + rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1; + if (rdim != GFC_DESCRIPTOR_RANK(ret)) + runtime_error("rank of return array incorrect in RESHAPE intrinsic"); + + shape_empty = 0; + + for (n = 0; n < rdim; n++) + { + shape_data[n] = shape->data[n * shape->dim[0].stride]; + if (shape_data[n] <= 0) + { + shape_data[n] = 0; + shape_empty = 1; + } + } + + if (ret->data == NULL) + { + rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1; + rs = 1; + for (n = 0; n < rdim; n++) + { + ret->dim[n].lbound = 0; + rex = shape_data[n]; + ret->dim[n].ubound = rex - 1; + ret->dim[n].stride = rs; + rs *= rex; + } + ret->offset = 0; + ret->data = internal_malloc_size ( rs * size ); + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rdim; + } + + if (shape_empty) + return; + + if (pad) + { + pdim = GFC_DESCRIPTOR_RANK (pad); + psize = 1; + pempty = 0; + for (n = 0; n < pdim; n++) + { + pcount[n] = 0; + pstride[n] = pad->dim[n].stride; + pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound; + if (pextent[n] <= 0) + { + pempty = 1; + pextent[n] = 0; + } + + if (psize == pstride[n]) + psize *= pextent[n]; + else + psize = 0; + } + pptr = pad->data; + } + else + { + pdim = 0; + psize = 1; + pempty = 1; + pptr = NULL; + } + + if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, source_extent; + + rs = 1; + for (n = 0; n < rdim; n++) + { + rs *= shape_data[n]; + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (ret_extent != shape_data[n]) + runtime_error("Incorrect extent in return value of RESHAPE" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) shape_data[n]); + } + + source_extent = 1; + sdim = GFC_DESCRIPTOR_RANK (source); + for (n = 0; n < sdim; n++) + { + index_type se; + se = source->dim[n].ubound + 1 - source->dim[0].lbound; + source_extent *= se > 0 ? se : 0; + } + + if (rs > source_extent && (!pad || pempty)) + runtime_error("Incorrect size in SOURCE argument to RESHAPE" + " intrinsic: is %ld, should be %ld", + (long int) source_extent, (long int) rs); + + if (order) + { + int seen[GFC_MAX_DIMENSIONS]; + index_type v; + + for (n = 0; n < rdim; n++) + seen[n] = 0; + + for (n = 0; n < rdim; n++) + { + v = order->data[n * order->dim[0].stride] - 1; + + if (v < 0 || v >= rdim) + runtime_error("Value %ld out of range in ORDER argument" + " to RESHAPE intrinsic", (long int) v + 1); + + if (seen[v] != 0) + runtime_error("Duplicate value %ld in ORDER argument to" + " RESHAPE intrinsic", (long int) v + 1); + + seen[v] = 1; + } + } + } + + rsize = 1; + for (n = 0; n < rdim; n++) + { + if (order) + dim = order->data[n * order->dim[0].stride] - 1; + else + dim = n; + + rcount[n] = 0; + rstride[n] = ret->dim[dim].stride; + rextent[n] = ret->dim[dim].ubound + 1 - ret->dim[dim].lbound; + + if (rextent[n] != shape_data[dim]) + runtime_error ("shape and target do not conform"); + + if (rsize == rstride[n]) + rsize *= rextent[n]; + else + rsize = 0; + if (rextent[n] <= 0) + return; + } + + sdim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + sempty = 0; + for (n = 0; n < sdim; n++) + { + scount[n] = 0; + sstride[n] = source->dim[n].stride; + sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (sextent[n] <= 0) + { + sempty = 1; + sextent[n] = 0; + } + + if (ssize == sstride[n]) + ssize *= sextent[n]; + else + ssize = 0; + } + + if (rsize != 0 && ssize != 0 && psize != 0) + { + rsize *= size; + ssize *= size; + psize *= size; + reshape_packed (ret->data, rsize, source->data, ssize, + pad ? pad->data : NULL, psize); + return; + } + rptr = ret->data; + src = sptr = source->data; + rstride0 = rstride[0] * size; + sstride0 = sstride[0] * size; + + if (sempty && pempty) + abort (); + + if (sempty) + { + /* Pretend we are using the pad array the first time around, too. */ + src = pptr; + sptr = pptr; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = pstride[0] * size; + } + } + + while (rptr) + { + /* Select between the source and pad arrays. */ + memcpy(rptr, src, size); + /* Advance to the next element. */ + rptr += rstride0; + src += sstride0; + rcount[0]++; + scount[0]++; + + /* Advance to the next destination element. */ + n = 0; + while (rcount[n] == rextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + rcount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * rextent[n] * size; + n++; + if (n == rdim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + rcount[n]++; + rptr += rstride[n] * size; + } + } + + /* Advance to the next source element. */ + n = 0; + while (scount[n] == sextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + scount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= sstride[n] * sextent[n] * size; + n++; + if (n == sdim) + { + if (sptr && pad) + { + /* Switch to the pad array. */ + sptr = NULL; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = sstride[0] * size; + } + } + /* We now start again from the beginning of the pad array. */ + src = pptr; + break; + } + else + { + scount[n]++; + src += sstride[n] * size; + } + } + } +} + +extern void reshape (parray *, parray *, shape_type *, parray *, shape_type *); +export_proto(reshape); + +void +reshape (parray *ret, parray *source, shape_type *shape, parray *pad, + shape_type *order) +{ + reshape_internal (ret, source, shape, pad, order, + GFC_DESCRIPTOR_SIZE (source)); +} + + +extern void reshape_char (parray *, gfc_charlen_type, parray *, shape_type *, + parray *, shape_type *, gfc_charlen_type, + gfc_charlen_type); +export_proto(reshape_char); + +void +reshape_char (parray *ret, gfc_charlen_type ret_length __attribute__((unused)), + parray *source, shape_type *shape, parray *pad, + shape_type *order, gfc_charlen_type source_length, + gfc_charlen_type pad_length __attribute__((unused))) +{ + reshape_internal (ret, source, shape, pad, order, source_length); +} + + +extern void reshape_char4 (parray *, gfc_charlen_type, parray *, shape_type *, + parray *, shape_type *, gfc_charlen_type, + gfc_charlen_type); +export_proto(reshape_char4); + +void +reshape_char4 (parray *ret, gfc_charlen_type ret_length __attribute__((unused)), + parray *source, shape_type *shape, parray *pad, + shape_type *order, gfc_charlen_type source_length, + gfc_charlen_type pad_length __attribute__((unused))) +{ + reshape_internal (ret, source, shape, pad, order, + source_length * sizeof (gfc_char4_t)); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/reshape_packed.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/reshape_packed.c new file mode 100644 index 0000000000..25cbcf7dbf --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/reshape_packed.c @@ -0,0 +1,49 @@ +/* Implementation of the RESHAPE intrinsic for packed arrays + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include + +/* Reshape function where all arrays are packed. Basically just memcpy. */ + +void +reshape_packed (char * restrict ret, index_type rsize, const char * source, + index_type ssize, const char * pad, index_type psize) +{ + index_type size; + + size = (rsize > ssize) ? ssize : rsize; + memcpy (ret, source, size); + ret += size; + rsize -= size; + while (rsize > 0) + { + size = (rsize > psize) ? psize : rsize; + memcpy (ret, pad, size); + ret += size; + rsize -= size; + } +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/selected_char_kind.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/selected_char_kind.c new file mode 100644 index 0000000000..35cf453402 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/selected_char_kind.c @@ -0,0 +1,46 @@ +/* Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +#include "libgfortran.h" + +#include + + +extern GFC_INTEGER_4 selected_char_kind (gfc_charlen_type, char *); +export_proto(selected_char_kind); + +GFC_INTEGER_4 +selected_char_kind (gfc_charlen_type name_len, char *name) +{ + gfc_charlen_type len = fstrlen (name, name_len); + + if ((len == 5 && strncasecmp (name, "ascii", 5) == 0) + || (len == 7 && strncasecmp (name, "default", 7) == 0)) + return 1; + else if (len == 9 && strncasecmp (name, "iso_10646", 9) == 0) + return 1; + else + return -1; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/selected_int_kind.f90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/selected_int_kind.f90 new file mode 100644 index 0000000000..8b5aa54662 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/selected_int_kind.f90 @@ -0,0 +1,46 @@ +! Copyright 2003, 2004, 2009 Free Software Foundation, Inc. +! Contributed by Kejia Zhao +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!Libgfortran 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 3 of the License, or (at your option) any later version. +! +!Libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. + +function _gfortran_selected_int_kind (r) + implicit none + integer, intent (in) :: r + integer :: _gfortran_selected_int_kind + integer :: i + ! Integer kind_range table + type :: int_info + integer :: kind + integer :: range + end type int_info + + include "selected_int_kind.inc" + + do i = 1, c + if (r <= int_infos (i) % range) then + _gfortran_selected_int_kind = int_infos (i) % kind + return + end if + end do + _gfortran_selected_int_kind = -1 + return +end function diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/selected_real_kind.f90 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/selected_real_kind.f90 new file mode 100644 index 0000000000..ea3b46aabd --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/selected_real_kind.f90 @@ -0,0 +1,64 @@ +! Copyright 2003, 2004, 2009 Free Software Foundation, Inc. +! Contributed by Kejia Zhao +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!Libgfortran 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 3 of the License, or (at your option) any later version. +! +!Libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. + +function _gfortran_selected_real_kind (p, r) + implicit none + integer, optional, intent (in) :: p, r + integer :: _gfortran_selected_real_kind + integer :: i, p2, r2 + logical :: found_p, found_r + ! Real kind_precision_range table + type :: real_info + integer :: kind + integer :: precision + integer :: range + end type real_info + + include "selected_real_kind.inc" + + _gfortran_selected_real_kind = 0 + p2 = 0 + r2 = 0 + found_p = .false. + found_r = .false. + + if (present (p)) p2 = p + if (present (r)) r2 = r + + ! Assumes each type has a greater precision and range than previous one. + + do i = 1, c + if (p2 <= real_infos (i) % precision) found_p = .true. + if (r2 <= real_infos (i) % range) found_r = .true. + if (found_p .and. found_r) then + _gfortran_selected_real_kind = real_infos (i) % kind + return + end if + end do + + if (.not. (found_p)) _gfortran_selected_real_kind = _gfortran_selected_real_kind - 1 + if (.not. (found_r)) _gfortran_selected_real_kind = _gfortran_selected_real_kind - 2 + + return +end function diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/signal.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/signal.c new file mode 100644 index 0000000000..66e54f33af --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/signal.c @@ -0,0 +1,243 @@ +/* Implementation of the SIGNAL and ALARM g77 intrinsics + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#ifdef HAVE_UNISTD_H +#include +#endif + +#ifdef HAVE_SIGNAL_H +#include +#endif + +#ifdef HAVE_INTTYPES_H +#include +#endif + +#include + +/* SIGNAL subroutine with PROCEDURE as handler */ +extern void signal_sub (int *, void (*)(int), int *); +iexport_proto(signal_sub); + +void +signal_sub (int *number, void (*handler)(int), int *status) +{ +#ifdef HAVE_SIGNAL + intptr_t ret; + + if (status != NULL) + { + ret = (intptr_t) signal (*number, handler); + *status = (int) ret; + } + else + signal (*number, handler); +#else + errno = ENOSYS; + if (status != NULL) + *status = -1; +#endif +} +iexport(signal_sub); + + +/* SIGNAL subroutine with INTEGER as handler */ +extern void signal_sub_int (int *, int *, int *); +iexport_proto(signal_sub_int); + +void +signal_sub_int (int *number, int *handler, int *status) +{ +#ifdef HAVE_SIGNAL + intptr_t ptr = *handler, ret; + + if (status != NULL) + { + ret = (intptr_t) signal (*number, (void (*)(int)) ptr); + *status = (int) ret; + } + else + signal (*number, (void (*)(int)) ptr); +#else + errno = ENOSYS; + if (status != NULL) + *status = -1; +#endif +} +iexport(signal_sub_int); + + +/* SIGNAL function with PROCEDURE as handler */ +extern int signal_func (int *, void (*)(int)); +iexport_proto(signal_func); + +int +signal_func (int *number, void (*handler)(int)) +{ + int status; + signal_sub (number, handler, &status); + return status; +} +iexport(signal_func); + + +/* SIGNAL function with INTEGER as handler */ +extern int signal_func_int (int *, int *); +iexport_proto(signal_func_int); + +int +signal_func_int (int *number, int *handler) +{ + int status; + signal_sub_int (number, handler, &status); + return status; +} +iexport(signal_func_int); + + + +/* ALARM intrinsic with PROCEDURE as handler */ +extern void alarm_sub_i4 (int *, void (*)(int), GFC_INTEGER_4 *); +iexport_proto(alarm_sub_i4); + +void +alarm_sub_i4 (int * seconds __attribute__ ((unused)), + void (*handler)(int) __attribute__ ((unused)), + GFC_INTEGER_4 *status) +{ +#if defined (SIGALRM) && defined (HAVE_ALARM) && defined (HAVE_SIGNAL) + if (status != NULL) + { + if (signal (SIGALRM, handler) == SIG_ERR) + *status = -1; + else + *status = alarm (*seconds); + } + else + { + signal (SIGALRM, handler); + alarm (*seconds); + } +#else + errno = ENOSYS; + if (status != NULL) + *status = -1; +#endif +} +iexport(alarm_sub_i4); + + +extern void alarm_sub_i8 (int *, void (*)(int), GFC_INTEGER_8 *); +iexport_proto(alarm_sub_i8); + +void +alarm_sub_i8 (int *seconds __attribute__ ((unused)), + void (*handler)(int) __attribute__ ((unused)), + GFC_INTEGER_8 *status) +{ +#if defined (SIGALRM) && defined (HAVE_ALARM) && defined (HAVE_SIGNAL) + if (status != NULL) + { + if (signal (SIGALRM, handler) == SIG_ERR) + *status = -1; + else + *status = alarm (*seconds); + } + else + { + signal (SIGALRM, handler); + alarm (*seconds); + } +#else + errno = ENOSYS; + if (status != NULL) + *status = -1; +#endif +} +iexport(alarm_sub_i8); + + +/* ALARM intrinsic with INTEGER as handler */ +extern void alarm_sub_int_i4 (int *, int *, GFC_INTEGER_4 *); +iexport_proto(alarm_sub_int_i4); + +void +alarm_sub_int_i4 (int *seconds __attribute__ ((unused)), + int *handler __attribute__ ((unused)), + GFC_INTEGER_4 *status) +{ +#if defined (SIGALRM) && defined (HAVE_ALARM) && defined (HAVE_SIGNAL) + if (status != NULL) + { + if (signal (SIGALRM, (void (*)(int)) (intptr_t) *handler) == SIG_ERR) + *status = -1; + else + *status = alarm (*seconds); + } + else + { + signal (SIGALRM, (void (*)(int)) (intptr_t) *handler); + alarm (*seconds); + } +#else + errno = ENOSYS; + if (status != NULL) + *status = -1; +#endif +} +iexport(alarm_sub_int_i4); + + +extern void alarm_sub_int_i8 (int *, int *, GFC_INTEGER_8 *); +iexport_proto(alarm_sub_int_i8); + +void +alarm_sub_int_i8 (int *seconds __attribute__ ((unused)), + int *handler __attribute__ ((unused)), + GFC_INTEGER_8 *status) +{ +#if defined (SIGALRM) && defined (HAVE_ALARM) && defined (HAVE_SIGNAL) + if (status != NULL) + { + if (signal (SIGALRM, (void (*)(int)) (intptr_t) *handler) == SIG_ERR) + *status = -1; + else + *status = alarm (*seconds); + } + else + { + signal (SIGALRM, (void (*)(int)) (intptr_t) *handler); + alarm (*seconds); + } +#else + errno = ENOSYS; + if (status != NULL) + *status = -1; +#endif +} +iexport(alarm_sub_int_i8); + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/size.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/size.c new file mode 100644 index 0000000000..9aa4cd9337 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/size.c @@ -0,0 +1,61 @@ +/* Implementation of the size intrinsic. + Copyright 2002, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +index_type +size0 (const array_t * array) +{ + int n; + index_type size; + index_type len; + + size = 1; + for (n = 0; n < GFC_DESCRIPTOR_RANK (array); n++) + { + len = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (len < 0) + len = 0; + size *= len; + } + return size; +} +iexport(size0); + +extern index_type size1 (const array_t * array, index_type dim); +export_proto(size1); + +index_type +size1 (const array_t * array, index_type dim) +{ + index_type size; + + dim--; + + size = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (size < 0) + size = 0; + return size; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/sleep.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/sleep.c new file mode 100644 index 0000000000..6f7ea227d0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/sleep.c @@ -0,0 +1,67 @@ +/* Implementation of the SLEEP intrinsic. + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +#ifdef __MINGW32__ +# include +# undef sleep +# define sleep(x) Sleep(1000*(x)) +# define HAVE_SLEEP 1 +#endif + +/* SUBROUTINE SLEEP(SECONDS) + INTEGER, INTENT(IN) :: SECONDS + + A choice had to be made if SECONDS is negative. For g77, this is + equivalent to SLEEP(0). */ + +#ifdef HAVE_SLEEP +extern void sleep_i4_sub (GFC_INTEGER_4 *); +iexport_proto(sleep_i4_sub); + +void +sleep_i4_sub (GFC_INTEGER_4 *seconds) +{ + sleep (*seconds < 0 ? 0 : (unsigned int) *seconds); +} +iexport(sleep_i4_sub); + +extern void sleep_i8_sub (GFC_INTEGER_8 *); +iexport_proto(sleep_i8_sub); + +void +sleep_i8_sub (GFC_INTEGER_8 *seconds) +{ + sleep (*seconds < 0 ? 0 : (unsigned int) *seconds); +} +iexport(sleep_i8_sub); +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/spread_generic.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/spread_generic.c new file mode 100644 index 0000000000..9fb4b11b26 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/spread_generic.c @@ -0,0 +1,617 @@ +/* Generic implementation of the SPREAD intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + +static void +spread_internal (gfc_array_char *ret, const gfc_array_char *source, + const index_type *along, const index_type *pncopies, + index_type size) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdelta = 0; + index_type rrank; + index_type rs; + char *rptr; + char *dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type srank; + const char *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ncopies; + + srank = GFC_DESCRIPTOR_RANK(source); + + rrank = srank + 1; + if (rrank > GFC_MAX_DIMENSIONS) + runtime_error ("return rank too large in spread()"); + + if (*along > rrank) + runtime_error ("dim outside of rank in spread()"); + + ncopies = *pncopies; + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rrank; + dim = 0; + rs = 1; + for (n = 0; n < rrank; n++) + { + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + if (n == *along - 1) + { + ret->dim[n].ubound = ncopies - 1; + rdelta = rs * size; + rs *= ncopies; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + sstride[dim] = source->dim[dim].stride * size; + rstride[dim] = rs * size; + + ret->dim[n].ubound = extent[dim]-1; + rs *= extent[dim]; + dim++; + } + } + ret->offset = 0; + if (rs > 0) + ret->data = internal_malloc_size (rs * size); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + else + { + int zero_sized; + + zero_sized = 0; + + dim = 0; + if (GFC_DESCRIPTOR_RANK(ret) != rrank) + runtime_error ("rank mismatch in spread()"); + + if (compile_options.bounds_check) + { + for (n = 0; n < rrank; n++) + { + index_type ret_extent; + + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (n == *along - 1) + { + rdelta = ret->dim[n].stride * size; + + if (ret_extent != ncopies) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (ret_extent != extent[dim]) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); + + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride * size; + rstride[dim] = ret->dim[n].stride * size; + dim++; + } + } + } + else + { + for (n = 0; n < rrank; n++) + { + if (n == *along - 1) + { + rdelta = ret->dim[n].stride * size; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride * size; + rstride[dim] = ret->dim[n].stride * size; + dim++; + } + } + } + + if (zero_sized) + return; + + if (sstride[0] == 0) + sstride[0] = size; + } + sstride0 = sstride[0]; + rstride0 = rstride[0]; + rptr = ret->data; + sptr = source->data; + + while (sptr) + { + /* Spread this element. */ + dest = rptr; + for (n = 0; n < ncopies; n++) + { + memcpy (dest, sptr, size); + dest += rdelta; + } + /* Advance to the next element. */ + sptr += sstride0; + rptr += rstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + rptr -= rstride[n] * extent[n]; + n++; + if (n >= srank) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + rptr += rstride[n]; + } + } + } +} + +/* This version of spread_internal treats the special case of a scalar + source. This is much simpler than the more general case above. */ + +static void +spread_internal_scalar (gfc_array_char *ret, const char *source, + const index_type *along, const index_type *pncopies, + index_type size) +{ + int n; + int ncopies = *pncopies; + char * dest; + + if (GFC_DESCRIPTOR_RANK (ret) != 1) + runtime_error ("incorrect destination rank in spread()"); + + if (*along > 1) + runtime_error ("dim outside of rank in spread()"); + + if (ret->data == NULL) + { + ret->data = internal_malloc_size (ncopies * size); + ret->offset = 0; + ret->dim[0].stride = 1; + ret->dim[0].lbound = 0; + ret->dim[0].ubound = ncopies - 1; + } + else + { + if (ncopies - 1 > (ret->dim[0].ubound - ret->dim[0].lbound) + / ret->dim[0].stride) + runtime_error ("dim too large in spread()"); + } + + for (n = 0; n < ncopies; n++) + { + dest = (char*)(ret->data + n*size*ret->dim[0].stride); + memcpy (dest , source, size); + } +} + +extern void spread (gfc_array_char *, const gfc_array_char *, + const index_type *, const index_type *); +export_proto(spread); + +void +spread (gfc_array_char *ret, const gfc_array_char *source, + const index_type *along, const index_type *pncopies) +{ + index_type type_size; + + type_size = GFC_DTYPE_TYPE_SIZE(ret); + switch(type_size) + { + case GFC_DTYPE_DERIVED_1: + case GFC_DTYPE_LOGICAL_1: + case GFC_DTYPE_INTEGER_1: + spread_i1 ((gfc_array_i1 *) ret, (gfc_array_i1 *) source, + *along, *pncopies); + return; + + case GFC_DTYPE_LOGICAL_2: + case GFC_DTYPE_INTEGER_2: + spread_i2 ((gfc_array_i2 *) ret, (gfc_array_i2 *) source, + *along, *pncopies); + return; + + case GFC_DTYPE_LOGICAL_4: + case GFC_DTYPE_INTEGER_4: + spread_i4 ((gfc_array_i4 *) ret, (gfc_array_i4 *) source, + *along, *pncopies); + return; + + case GFC_DTYPE_LOGICAL_8: + case GFC_DTYPE_INTEGER_8: + spread_i8 ((gfc_array_i8 *) ret, (gfc_array_i8 *) source, + *along, *pncopies); + return; + +#ifdef HAVE_GFC_INTEGER_16 + case GFC_DTYPE_LOGICAL_16: + case GFC_DTYPE_INTEGER_16: + spread_i16 ((gfc_array_i16 *) ret, (gfc_array_i16 *) source, + *along, *pncopies); + return; +#endif + + case GFC_DTYPE_REAL_4: + spread_r4 ((gfc_array_r4 *) ret, (gfc_array_r4 *) source, + *along, *pncopies); + return; + + case GFC_DTYPE_REAL_8: + spread_r8 ((gfc_array_r8 *) ret, (gfc_array_r8 *) source, + *along, *pncopies); + return; + +#ifdef GFC_HAVE_REAL_10 + case GFC_DTYPE_REAL_10: + spread_r10 ((gfc_array_r10 *) ret, (gfc_array_r10 *) source, + *along, *pncopies); + return; +#endif + +#ifdef GFC_HAVE_REAL_16 + case GFC_DTYPE_REAL_16: + spread_r16 ((gfc_array_r16 *) ret, (gfc_array_r16 *) source, + *along, *pncopies); + return; +#endif + + case GFC_DTYPE_COMPLEX_4: + spread_c4 ((gfc_array_c4 *) ret, (gfc_array_c4 *) source, + *along, *pncopies); + return; + + case GFC_DTYPE_COMPLEX_8: + spread_c8 ((gfc_array_c8 *) ret, (gfc_array_c8 *) source, + *along, *pncopies); + return; + +#ifdef GFC_HAVE_COMPLEX_10 + case GFC_DTYPE_COMPLEX_10: + spread_c10 ((gfc_array_c10 *) ret, (gfc_array_c10 *) source, + *along, *pncopies); + return; +#endif + +#ifdef GFC_HAVE_COMPLEX_16 + case GFC_DTYPE_COMPLEX_16: + spread_c16 ((gfc_array_c16 *) ret, (gfc_array_c16 *) source, + *along, *pncopies); + return; +#endif + + case GFC_DTYPE_DERIVED_2: + if (GFC_UNALIGNED_2(ret->data) || GFC_UNALIGNED_2(source->data)) + break; + else + { + spread_i2 ((gfc_array_i2 *) ret, (gfc_array_i2 *) source, + *along, *pncopies); + return; + } + + case GFC_DTYPE_DERIVED_4: + if (GFC_UNALIGNED_4(ret->data) || GFC_UNALIGNED_4(source->data)) + break; + else + { + spread_i4 ((gfc_array_i4 *) ret, (gfc_array_i4 *) source, + *along, *pncopies); + return; + } + + case GFC_DTYPE_DERIVED_8: + if (GFC_UNALIGNED_8(ret->data) || GFC_UNALIGNED_8(source->data)) + break; + else + { + spread_i8 ((gfc_array_i8 *) ret, (gfc_array_i8 *) source, + *along, *pncopies); + return; + } + +#ifdef HAVE_GFC_INTEGER_16 + case GFC_DTYPE_DERIVED_16: + if (GFC_UNALIGNED_16(ret->data) || GFC_UNALIGNED_16(source->data)) + break; + else + { + spread_i16 ((gfc_array_i16 *) ret, (gfc_array_i16 *) source, + *along, *pncopies); + return; + } +#endif + } + + spread_internal (ret, source, along, pncopies, GFC_DESCRIPTOR_SIZE (source)); +} + + +extern void spread_char (gfc_array_char *, GFC_INTEGER_4, + const gfc_array_char *, const index_type *, + const index_type *, GFC_INTEGER_4); +export_proto(spread_char); + +void +spread_char (gfc_array_char *ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char *source, const index_type *along, + const index_type *pncopies, GFC_INTEGER_4 source_length) +{ + spread_internal (ret, source, along, pncopies, source_length); +} + + +extern void spread_char4 (gfc_array_char *, GFC_INTEGER_4, + const gfc_array_char *, const index_type *, + const index_type *, GFC_INTEGER_4); +export_proto(spread_char4); + +void +spread_char4 (gfc_array_char *ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char *source, const index_type *along, + const index_type *pncopies, GFC_INTEGER_4 source_length) +{ + spread_internal (ret, source, along, pncopies, + source_length * sizeof (gfc_char4_t)); +} + + +/* The following are the prototypes for the versions of spread with a + scalar source. */ + +extern void spread_scalar (gfc_array_char *, const char *, + const index_type *, const index_type *); +export_proto(spread_scalar); + +void +spread_scalar (gfc_array_char *ret, const char *source, + const index_type *along, const index_type *pncopies) +{ + index_type type_size; + + if (!ret->dtype) + runtime_error ("return array missing descriptor in spread()"); + + type_size = GFC_DTYPE_TYPE_SIZE(ret); + switch(type_size) + { + case GFC_DTYPE_DERIVED_1: + case GFC_DTYPE_LOGICAL_1: + case GFC_DTYPE_INTEGER_1: + spread_scalar_i1 ((gfc_array_i1 *) ret, (GFC_INTEGER_1 *) source, + *along, *pncopies); + return; + + case GFC_DTYPE_LOGICAL_2: + case GFC_DTYPE_INTEGER_2: + spread_scalar_i2 ((gfc_array_i2 *) ret, (GFC_INTEGER_2 *) source, + *along, *pncopies); + return; + + case GFC_DTYPE_LOGICAL_4: + case GFC_DTYPE_INTEGER_4: + spread_scalar_i4 ((gfc_array_i4 *) ret, (GFC_INTEGER_4 *) source, + *along, *pncopies); + return; + + case GFC_DTYPE_LOGICAL_8: + case GFC_DTYPE_INTEGER_8: + spread_scalar_i8 ((gfc_array_i8 *) ret, (GFC_INTEGER_8 *) source, + *along, *pncopies); + return; + +#ifdef HAVE_GFC_INTEGER_16 + case GFC_DTYPE_LOGICAL_16: + case GFC_DTYPE_INTEGER_16: + spread_scalar_i16 ((gfc_array_i16 *) ret, (GFC_INTEGER_16 *) source, + *along, *pncopies); + return; +#endif + + case GFC_DTYPE_REAL_4: + spread_scalar_r4 ((gfc_array_r4 *) ret, (GFC_REAL_4 *) source, + *along, *pncopies); + return; + + case GFC_DTYPE_REAL_8: + spread_scalar_r8 ((gfc_array_r8 *) ret, (GFC_REAL_8 *) source, + *along, *pncopies); + return; + +#ifdef HAVE_GFC_REAL_10 + case GFC_DTYPE_REAL_10: + spread_scalar_r10 ((gfc_array_r10 *) ret, (GFC_REAL_10 *) source, + *along, *pncopies); + return; +#endif + +#ifdef HAVE_GFC_REAL_16 + case GFC_DTYPE_REAL_16: + spread_scalar_r16 ((gfc_array_r16 *) ret, (GFC_REAL_16 *) source, + *along, *pncopies); + return; +#endif + + case GFC_DTYPE_COMPLEX_4: + spread_scalar_c4 ((gfc_array_c4 *) ret, (GFC_COMPLEX_4 *) source, + *along, *pncopies); + return; + + case GFC_DTYPE_COMPLEX_8: + spread_scalar_c8 ((gfc_array_c8 *) ret, (GFC_COMPLEX_8 *) source, + *along, *pncopies); + return; + +#ifdef HAVE_GFC_COMPLEX_10 + case GFC_DTYPE_COMPLEX_10: + spread_scalar_c10 ((gfc_array_c10 *) ret, (GFC_COMPLEX_10 *) source, + *along, *pncopies); + return; +#endif + +#ifdef HAVE_GFC_COMPLEX_16 + case GFC_DTYPE_COMPLEX_16: + spread_scalar_c16 ((gfc_array_c16 *) ret, (GFC_COMPLEX_16 *) source, + *along, *pncopies); + return; +#endif + + case GFC_DTYPE_DERIVED_2: + if (GFC_UNALIGNED_2(ret->data) || GFC_UNALIGNED_2(source)) + break; + else + { + spread_scalar_i2 ((gfc_array_i2 *) ret, (GFC_INTEGER_2 *) source, + *along, *pncopies); + return; + } + + case GFC_DTYPE_DERIVED_4: + if (GFC_UNALIGNED_4(ret->data) || GFC_UNALIGNED_4(source)) + break; + else + { + spread_scalar_i4 ((gfc_array_i4 *) ret, (GFC_INTEGER_4 *) source, + *along, *pncopies); + return; + } + + case GFC_DTYPE_DERIVED_8: + if (GFC_UNALIGNED_8(ret->data) || GFC_UNALIGNED_8(source)) + break; + else + { + spread_scalar_i8 ((gfc_array_i8 *) ret, (GFC_INTEGER_8 *) source, + *along, *pncopies); + return; + } +#ifdef HAVE_GFC_INTEGER_16 + case GFC_DTYPE_DERIVED_16: + if (GFC_UNALIGNED_16(ret->data) || GFC_UNALIGNED_16(source)) + break; + else + { + spread_scalar_i16 ((gfc_array_i16 *) ret, (GFC_INTEGER_16 *) source, + *along, *pncopies); + return; + } +#endif + } + + spread_internal_scalar (ret, source, along, pncopies, GFC_DESCRIPTOR_SIZE (ret)); +} + + +extern void spread_char_scalar (gfc_array_char *, GFC_INTEGER_4, + const char *, const index_type *, + const index_type *, GFC_INTEGER_4); +export_proto(spread_char_scalar); + +void +spread_char_scalar (gfc_array_char *ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const char *source, const index_type *along, + const index_type *pncopies, GFC_INTEGER_4 source_length) +{ + if (!ret->dtype) + runtime_error ("return array missing descriptor in spread()"); + spread_internal_scalar (ret, source, along, pncopies, source_length); +} + + +extern void spread_char4_scalar (gfc_array_char *, GFC_INTEGER_4, + const char *, const index_type *, + const index_type *, GFC_INTEGER_4); +export_proto(spread_char4_scalar); + +void +spread_char4_scalar (gfc_array_char *ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const char *source, const index_type *along, + const index_type *pncopies, GFC_INTEGER_4 source_length) +{ + if (!ret->dtype) + runtime_error ("return array missing descriptor in spread()"); + spread_internal_scalar (ret, source, along, pncopies, + source_length * sizeof (gfc_char4_t)); +} + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/stat.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/stat.c new file mode 100644 index 0000000000..5d0f3b63bd --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/stat.c @@ -0,0 +1,549 @@ +/* Implementation of the STAT and FSTAT intrinsics. + Copyright (C) 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include +#include + +#ifdef HAVE_SYS_STAT_H +#include +#endif + +#ifdef HAVE_STDLIB_H +#include +#endif + + +#ifdef HAVE_STAT + +/* SUBROUTINE STAT(FILE, SARRAY, STATUS) + CHARACTER(len=*), INTENT(IN) :: FILE + INTEGER, INTENT(OUT), :: SARRAY(13) + INTEGER, INTENT(OUT), OPTIONAL :: STATUS + + FUNCTION STAT(FILE, SARRAY) + INTEGER STAT + CHARACTER(len=*), INTENT(IN) :: FILE + INTEGER, INTENT(OUT), :: SARRAY(13) */ + +/*extern void stat_i4_sub_0 (char *, gfc_array_i4 *, GFC_INTEGER_4 *, + gfc_charlen_type, int); +internal_proto(stat_i4_sub_0);*/ + +static void +stat_i4_sub_0 (char *name, gfc_array_i4 *sarray, GFC_INTEGER_4 *status, + gfc_charlen_type name_len, int is_lstat __attribute__ ((unused))) +{ + int val; + char *str; + struct stat sb; + + /* If the rank of the array is not 1, abort. */ + if (GFC_DESCRIPTOR_RANK (sarray) != 1) + runtime_error ("Array rank of SARRAY is not 1."); + + /* If the array is too small, abort. */ + if (sarray->dim[0].ubound + 1 - sarray->dim[0].lbound < 13) + runtime_error ("Array size of SARRAY is too small."); + + /* Trim trailing spaces from name. */ + while (name_len > 0 && name[name_len - 1] == ' ') + name_len--; + + /* Make a null terminated copy of the string. */ + str = gfc_alloca (name_len + 1); + memcpy (str, name, name_len); + str[name_len] = '\0'; + + /* On platforms that don't provide lstat(), we use stat() instead. */ +#ifdef HAVE_LSTAT + if (is_lstat) + val = lstat(str, &sb); + else +#endif + val = stat(str, &sb); + + if (val == 0) + { + /* Device ID */ + sarray->data[0 * sarray->dim[0].stride] = sb.st_dev; + + /* Inode number */ + sarray->data[1 * sarray->dim[0].stride] = sb.st_ino; + + /* File mode */ + sarray->data[2 * sarray->dim[0].stride] = sb.st_mode; + + /* Number of (hard) links */ + sarray->data[3 * sarray->dim[0].stride] = sb.st_nlink; + + /* Owner's uid */ + sarray->data[4 * sarray->dim[0].stride] = sb.st_uid; + + /* Owner's gid */ + sarray->data[5 * sarray->dim[0].stride] = sb.st_gid; + + /* ID of device containing directory entry for file (0 if not available) */ +#if HAVE_STRUCT_STAT_ST_RDEV + sarray->data[6 * sarray->dim[0].stride] = sb.st_rdev; +#else + sarray->data[6 * sarray->dim[0].stride] = 0; +#endif + + /* File size (bytes) */ + sarray->data[7 * sarray->dim[0].stride] = sb.st_size; + + /* Last access time */ + sarray->data[8 * sarray->dim[0].stride] = sb.st_atime; + + /* Last modification time */ + sarray->data[9 * sarray->dim[0].stride] = sb.st_mtime; + + /* Last file status change time */ + sarray->data[10 * sarray->dim[0].stride] = sb.st_ctime; + + /* Preferred I/O block size (-1 if not available) */ +#if HAVE_STRUCT_STAT_ST_BLKSIZE + sarray->data[11 * sarray->dim[0].stride] = sb.st_blksize; +#else + sarray->data[11 * sarray->dim[0].stride] = -1; +#endif + + /* Number of blocks allocated (-1 if not available) */ +#if HAVE_STRUCT_STAT_ST_BLOCKS + sarray->data[12 * sarray->dim[0].stride] = sb.st_blocks; +#else + sarray->data[12 * sarray->dim[0].stride] = -1; +#endif + } + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} + + +extern void stat_i4_sub (char *, gfc_array_i4 *, GFC_INTEGER_4 *, + gfc_charlen_type); +iexport_proto(stat_i4_sub); + +void +stat_i4_sub (char *name, gfc_array_i4 *sarray, GFC_INTEGER_4 *status, + gfc_charlen_type name_len) +{ + stat_i4_sub_0 (name, sarray, status, name_len, 0); +} +iexport(stat_i4_sub); + + +extern void lstat_i4_sub (char *, gfc_array_i4 *, GFC_INTEGER_4 *, + gfc_charlen_type); +iexport_proto(lstat_i4_sub); + +void +lstat_i4_sub (char *name, gfc_array_i4 *sarray, GFC_INTEGER_4 *status, + gfc_charlen_type name_len) +{ + stat_i4_sub_0 (name, sarray, status, name_len, 1); +} +iexport(lstat_i4_sub); + + + +static void +stat_i8_sub_0 (char *name, gfc_array_i8 *sarray, GFC_INTEGER_8 *status, + gfc_charlen_type name_len, int is_lstat __attribute__ ((unused))) +{ + int val; + char *str; + struct stat sb; + + /* If the rank of the array is not 1, abort. */ + if (GFC_DESCRIPTOR_RANK (sarray) != 1) + runtime_error ("Array rank of SARRAY is not 1."); + + /* If the array is too small, abort. */ + if (sarray->dim[0].ubound + 1 - sarray->dim[0].lbound < 13) + runtime_error ("Array size of SARRAY is too small."); + + /* Trim trailing spaces from name. */ + while (name_len > 0 && name[name_len - 1] == ' ') + name_len--; + + /* Make a null terminated copy of the string. */ + str = gfc_alloca (name_len + 1); + memcpy (str, name, name_len); + str[name_len] = '\0'; + + /* On platforms that don't provide lstat(), we use stat() instead. */ +#ifdef HAVE_LSTAT + if (is_lstat) + val = lstat(str, &sb); + else +#endif + val = stat(str, &sb); + + if (val == 0) + { + /* Device ID */ + sarray->data[0] = sb.st_dev; + + /* Inode number */ + sarray->data[sarray->dim[0].stride] = sb.st_ino; + + /* File mode */ + sarray->data[2 * sarray->dim[0].stride] = sb.st_mode; + + /* Number of (hard) links */ + sarray->data[3 * sarray->dim[0].stride] = sb.st_nlink; + + /* Owner's uid */ + sarray->data[4 * sarray->dim[0].stride] = sb.st_uid; + + /* Owner's gid */ + sarray->data[5 * sarray->dim[0].stride] = sb.st_gid; + + /* ID of device containing directory entry for file (0 if not available) */ +#if HAVE_STRUCT_STAT_ST_RDEV + sarray->data[6 * sarray->dim[0].stride] = sb.st_rdev; +#else + sarray->data[6 * sarray->dim[0].stride] = 0; +#endif + + /* File size (bytes) */ + sarray->data[7 * sarray->dim[0].stride] = sb.st_size; + + /* Last access time */ + sarray->data[8 * sarray->dim[0].stride] = sb.st_atime; + + /* Last modification time */ + sarray->data[9 * sarray->dim[0].stride] = sb.st_mtime; + + /* Last file status change time */ + sarray->data[10 * sarray->dim[0].stride] = sb.st_ctime; + + /* Preferred I/O block size (-1 if not available) */ +#if HAVE_STRUCT_STAT_ST_BLKSIZE + sarray->data[11 * sarray->dim[0].stride] = sb.st_blksize; +#else + sarray->data[11 * sarray->dim[0].stride] = -1; +#endif + + /* Number of blocks allocated (-1 if not available) */ +#if HAVE_STRUCT_STAT_ST_BLOCKS + sarray->data[12 * sarray->dim[0].stride] = sb.st_blocks; +#else + sarray->data[12 * sarray->dim[0].stride] = -1; +#endif + } + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} + + +extern void stat_i8_sub (char *, gfc_array_i8 *, GFC_INTEGER_8 *, + gfc_charlen_type); +iexport_proto(stat_i8_sub); + +void +stat_i8_sub (char *name, gfc_array_i8 *sarray, GFC_INTEGER_8 *status, + gfc_charlen_type name_len) +{ + stat_i8_sub_0 (name, sarray, status, name_len, 0); +} + +iexport(stat_i8_sub); + + +extern void lstat_i8_sub (char *, gfc_array_i8 *, GFC_INTEGER_8 *, + gfc_charlen_type); +iexport_proto(lstat_i8_sub); + +void +lstat_i8_sub (char *name, gfc_array_i8 *sarray, GFC_INTEGER_8 *status, + gfc_charlen_type name_len) +{ + stat_i8_sub_0 (name, sarray, status, name_len, 1); +} + +iexport(lstat_i8_sub); + + +extern GFC_INTEGER_4 stat_i4 (char *, gfc_array_i4 *, gfc_charlen_type); +export_proto(stat_i4); + +GFC_INTEGER_4 +stat_i4 (char *name, gfc_array_i4 *sarray, gfc_charlen_type name_len) +{ + GFC_INTEGER_4 val; + stat_i4_sub (name, sarray, &val, name_len); + return val; +} + +extern GFC_INTEGER_8 stat_i8 (char *, gfc_array_i8 *, gfc_charlen_type); +export_proto(stat_i8); + +GFC_INTEGER_8 +stat_i8 (char *name, gfc_array_i8 *sarray, gfc_charlen_type name_len) +{ + GFC_INTEGER_8 val; + stat_i8_sub (name, sarray, &val, name_len); + return val; +} + + +/* SUBROUTINE LSTAT(FILE, SARRAY, STATUS) + CHARACTER(len=*), INTENT(IN) :: FILE + INTEGER, INTENT(OUT), :: SARRAY(13) + INTEGER, INTENT(OUT), OPTIONAL :: STATUS + + FUNCTION LSTAT(FILE, SARRAY) + INTEGER LSTAT + CHARACTER(len=*), INTENT(IN) :: FILE + INTEGER, INTENT(OUT), :: SARRAY(13) */ + +extern GFC_INTEGER_4 lstat_i4 (char *, gfc_array_i4 *, gfc_charlen_type); +export_proto(lstat_i4); + +GFC_INTEGER_4 +lstat_i4 (char *name, gfc_array_i4 *sarray, gfc_charlen_type name_len) +{ + GFC_INTEGER_4 val; + lstat_i4_sub (name, sarray, &val, name_len); + return val; +} + +extern GFC_INTEGER_8 lstat_i8 (char *, gfc_array_i8 *, gfc_charlen_type); +export_proto(lstat_i8); + +GFC_INTEGER_8 +lstat_i8 (char *name, gfc_array_i8 *sarray, gfc_charlen_type name_len) +{ + GFC_INTEGER_8 val; + lstat_i8_sub (name, sarray, &val, name_len); + return val; +} + +#endif + + +#ifdef HAVE_FSTAT + +/* SUBROUTINE FSTAT(UNIT, SARRAY, STATUS) + INTEGER, INTENT(IN) :: UNIT + INTEGER, INTENT(OUT) :: SARRAY(13) + INTEGER, INTENT(OUT), OPTIONAL :: STATUS + + FUNCTION FSTAT(UNIT, SARRAY) + INTEGER FSTAT + INTEGER, INTENT(IN) :: UNIT + INTEGER, INTENT(OUT) :: SARRAY(13) */ + +extern void fstat_i4_sub (GFC_INTEGER_4 *, gfc_array_i4 *, GFC_INTEGER_4 *); +iexport_proto(fstat_i4_sub); + +void +fstat_i4_sub (GFC_INTEGER_4 *unit, gfc_array_i4 *sarray, GFC_INTEGER_4 *status) +{ + int val; + struct stat sb; + + /* If the rank of the array is not 1, abort. */ + if (GFC_DESCRIPTOR_RANK (sarray) != 1) + runtime_error ("Array rank of SARRAY is not 1."); + + /* If the array is too small, abort. */ + if (sarray->dim[0].ubound + 1 - sarray->dim[0].lbound < 13) + runtime_error ("Array size of SARRAY is too small."); + + /* Convert Fortran unit number to C file descriptor. */ + val = unit_to_fd (*unit); + if (val >= 0) + val = fstat(val, &sb); + + if (val == 0) + { + /* Device ID */ + sarray->data[0 * sarray->dim[0].stride] = sb.st_dev; + + /* Inode number */ + sarray->data[1 * sarray->dim[0].stride] = sb.st_ino; + + /* File mode */ + sarray->data[2 * sarray->dim[0].stride] = sb.st_mode; + + /* Number of (hard) links */ + sarray->data[3 * sarray->dim[0].stride] = sb.st_nlink; + + /* Owner's uid */ + sarray->data[4 * sarray->dim[0].stride] = sb.st_uid; + + /* Owner's gid */ + sarray->data[5 * sarray->dim[0].stride] = sb.st_gid; + + /* ID of device containing directory entry for file (0 if not available) */ +#if HAVE_STRUCT_STAT_ST_RDEV + sarray->data[6 * sarray->dim[0].stride] = sb.st_rdev; +#else + sarray->data[6 * sarray->dim[0].stride] = 0; +#endif + + /* File size (bytes) */ + sarray->data[7 * sarray->dim[0].stride] = sb.st_size; + + /* Last access time */ + sarray->data[8 * sarray->dim[0].stride] = sb.st_atime; + + /* Last modification time */ + sarray->data[9 * sarray->dim[0].stride] = sb.st_mtime; + + /* Last file status change time */ + sarray->data[10 * sarray->dim[0].stride] = sb.st_ctime; + + /* Preferred I/O block size (-1 if not available) */ +#if HAVE_STRUCT_STAT_ST_BLKSIZE + sarray->data[11 * sarray->dim[0].stride] = sb.st_blksize; +#else + sarray->data[11 * sarray->dim[0].stride] = -1; +#endif + + /* Number of blocks allocated (-1 if not available) */ +#if HAVE_STRUCT_STAT_ST_BLOCKS + sarray->data[12 * sarray->dim[0].stride] = sb.st_blocks; +#else + sarray->data[12 * sarray->dim[0].stride] = -1; +#endif + } + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} +iexport(fstat_i4_sub); + +extern void fstat_i8_sub (GFC_INTEGER_8 *, gfc_array_i8 *, GFC_INTEGER_8 *); +iexport_proto(fstat_i8_sub); + +void +fstat_i8_sub (GFC_INTEGER_8 *unit, gfc_array_i8 *sarray, GFC_INTEGER_8 *status) +{ + int val; + struct stat sb; + + /* If the rank of the array is not 1, abort. */ + if (GFC_DESCRIPTOR_RANK (sarray) != 1) + runtime_error ("Array rank of SARRAY is not 1."); + + /* If the array is too small, abort. */ + if (sarray->dim[0].ubound + 1 - sarray->dim[0].lbound < 13) + runtime_error ("Array size of SARRAY is too small."); + + /* Convert Fortran unit number to C file descriptor. */ + val = unit_to_fd ((int) *unit); + if (val >= 0) + val = fstat(val, &sb); + + if (val == 0) + { + /* Device ID */ + sarray->data[0] = sb.st_dev; + + /* Inode number */ + sarray->data[sarray->dim[0].stride] = sb.st_ino; + + /* File mode */ + sarray->data[2 * sarray->dim[0].stride] = sb.st_mode; + + /* Number of (hard) links */ + sarray->data[3 * sarray->dim[0].stride] = sb.st_nlink; + + /* Owner's uid */ + sarray->data[4 * sarray->dim[0].stride] = sb.st_uid; + + /* Owner's gid */ + sarray->data[5 * sarray->dim[0].stride] = sb.st_gid; + + /* ID of device containing directory entry for file (0 if not available) */ +#if HAVE_STRUCT_STAT_ST_RDEV + sarray->data[6 * sarray->dim[0].stride] = sb.st_rdev; +#else + sarray->data[6 * sarray->dim[0].stride] = 0; +#endif + + /* File size (bytes) */ + sarray->data[7 * sarray->dim[0].stride] = sb.st_size; + + /* Last access time */ + sarray->data[8 * sarray->dim[0].stride] = sb.st_atime; + + /* Last modification time */ + sarray->data[9 * sarray->dim[0].stride] = sb.st_mtime; + + /* Last file status change time */ + sarray->data[10 * sarray->dim[0].stride] = sb.st_ctime; + + /* Preferred I/O block size (-1 if not available) */ +#if HAVE_STRUCT_STAT_ST_BLKSIZE + sarray->data[11 * sarray->dim[0].stride] = sb.st_blksize; +#else + sarray->data[11 * sarray->dim[0].stride] = -1; +#endif + + /* Number of blocks allocated (-1 if not available) */ +#if HAVE_STRUCT_STAT_ST_BLOCKS + sarray->data[12 * sarray->dim[0].stride] = sb.st_blocks; +#else + sarray->data[12 * sarray->dim[0].stride] = -1; +#endif + } + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} +iexport(fstat_i8_sub); + +extern GFC_INTEGER_4 fstat_i4 (GFC_INTEGER_4 *, gfc_array_i4 *); +export_proto(fstat_i4); + +GFC_INTEGER_4 +fstat_i4 (GFC_INTEGER_4 *unit, gfc_array_i4 *sarray) +{ + GFC_INTEGER_4 val; + fstat_i4_sub (unit, sarray, &val); + return val; +} + +extern GFC_INTEGER_8 fstat_i8 (GFC_INTEGER_8 *, gfc_array_i8 *); +export_proto(fstat_i8); + +GFC_INTEGER_8 +fstat_i8 (GFC_INTEGER_8 *unit, gfc_array_i8 *sarray) +{ + GFC_INTEGER_8 val; + fstat_i8_sub (unit, sarray, &val); + return val; +} + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/string_intrinsics.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/string_intrinsics.c new file mode 100644 index 0000000000..953ec39d42 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/string_intrinsics.c @@ -0,0 +1,80 @@ +/* String intrinsics helper functions. + Copyright 2008, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +/* Unlike what the name of this file suggests, we don't actually + implement the Fortran intrinsics here. At least, not with the + names they have in the standard. The functions here provide all + the support we need for the standard string intrinsics, and the + compiler translates the actual intrinsics calls to calls to + functions in this file. */ + +#include "libgfortran.h" + +#include +#include + + +/* Helper function to set parts of wide strings to a constant (usually + spaces). */ + +static gfc_char4_t * +memset_char4 (gfc_char4_t *b, gfc_char4_t c, size_t len) +{ + size_t i; + + for (i = 0; i < len; i++) + b[i] = c; + + return b; +} + + +/* All other functions are defined using a few generic macros in + string_intrinsics_inc.c, so we avoid code duplication between the + various character type kinds. */ + +#undef CHARTYPE +#define CHARTYPE char +#undef UCHARTYPE +#define UCHARTYPE unsigned char +#undef SUFFIX +#define SUFFIX(x) x +#undef MEMSET +#define MEMSET memset + +#include "string_intrinsics_inc.c" + + +#undef CHARTYPE +#define CHARTYPE gfc_char4_t +#undef UCHARTYPE +#define UCHARTYPE gfc_char4_t +#undef SUFFIX +#define SUFFIX(x) x ## _char4 +#undef MEMSET +#define MEMSET memset_char4 + +#include "string_intrinsics_inc.c" + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/string_intrinsics_inc.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/string_intrinsics_inc.c new file mode 100644 index 0000000000..9ad2df46c9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/string_intrinsics_inc.c @@ -0,0 +1,413 @@ +/* String intrinsics helper functions. + Copyright 2002, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +/* Rename the functions. */ +#define concat_string SUFFIX(concat_string) +#define string_len_trim SUFFIX(string_len_trim) +#define adjustl SUFFIX(adjustl) +#define adjustr SUFFIX(adjustr) +#define string_index SUFFIX(string_index) +#define string_scan SUFFIX(string_scan) +#define string_verify SUFFIX(string_verify) +#define string_trim SUFFIX(string_trim) +#define string_minmax SUFFIX(string_minmax) +#define zero_length_string SUFFIX(zero_length_string) +#define compare_string SUFFIX(compare_string) + + +/* The prototypes. */ + +extern void concat_string (gfc_charlen_type, CHARTYPE *, + gfc_charlen_type, const CHARTYPE *, + gfc_charlen_type, const CHARTYPE *); +export_proto(concat_string); + +extern gfc_charlen_type string_len_trim (gfc_charlen_type, const CHARTYPE *); +export_proto(string_len_trim); + +extern void adjustl (CHARTYPE *, gfc_charlen_type, const CHARTYPE *); +export_proto(adjustl); + +extern void adjustr (CHARTYPE *, gfc_charlen_type, const CHARTYPE *); +export_proto(adjustr); + +extern gfc_charlen_type string_index (gfc_charlen_type, const CHARTYPE *, + gfc_charlen_type, const CHARTYPE *, + GFC_LOGICAL_4); +export_proto(string_index); + +extern gfc_charlen_type string_scan (gfc_charlen_type, const CHARTYPE *, + gfc_charlen_type, const CHARTYPE *, + GFC_LOGICAL_4); +export_proto(string_scan); + +extern gfc_charlen_type string_verify (gfc_charlen_type, const CHARTYPE *, + gfc_charlen_type, const CHARTYPE *, + GFC_LOGICAL_4); +export_proto(string_verify); + +extern void string_trim (gfc_charlen_type *, CHARTYPE **, gfc_charlen_type, + const CHARTYPE *); +export_proto(string_trim); + +extern void string_minmax (gfc_charlen_type *, CHARTYPE **, int, int, ...); +export_proto(string_minmax); + + +/* Use for functions which can return a zero-length string. */ +static CHARTYPE zero_length_string = 0; + + +/* Strings of unequal length are extended with pad characters. */ + +int +compare_string (gfc_charlen_type len1, const CHARTYPE *s1, + gfc_charlen_type len2, const CHARTYPE *s2) +{ + const UCHARTYPE *s; + gfc_charlen_type len; + int res; + + res = memcmp (s1, s2, ((len1 < len2) ? len1 : len2) * sizeof (CHARTYPE)); + if (res != 0) + return res; + + if (len1 == len2) + return 0; + + if (len1 < len2) + { + len = len2 - len1; + s = (UCHARTYPE *) &s2[len1]; + res = -1; + } + else + { + len = len1 - len2; + s = (UCHARTYPE *) &s1[len2]; + res = 1; + } + + while (len--) + { + if (*s != ' ') + { + if (*s > ' ') + return res; + else + return -res; + } + s++; + } + + return 0; +} +iexport(compare_string); + + +/* The destination and source should not overlap. */ + +void +concat_string (gfc_charlen_type destlen, CHARTYPE * dest, + gfc_charlen_type len1, const CHARTYPE * s1, + gfc_charlen_type len2, const CHARTYPE * s2) +{ + if (len1 >= destlen) + { + memcpy (dest, s1, destlen * sizeof (CHARTYPE)); + return; + } + memcpy (dest, s1, len1 * sizeof (CHARTYPE)); + dest += len1; + destlen -= len1; + + if (len2 >= destlen) + { + memcpy (dest, s2, destlen * sizeof (CHARTYPE)); + return; + } + + memcpy (dest, s2, len2 * sizeof (CHARTYPE)); + MEMSET (&dest[len2], ' ', destlen - len2); +} + + +/* Return string with all trailing blanks removed. */ + +void +string_trim (gfc_charlen_type *len, CHARTYPE **dest, gfc_charlen_type slen, + const CHARTYPE *src) +{ + gfc_charlen_type i; + + /* Determine length of result string. */ + for (i = slen - 1; i >= 0; i--) + { + if (src[i] != ' ') + break; + } + *len = i + 1; + + if (*len == 0) + *dest = &zero_length_string; + else + { + /* Allocate space for result string. */ + *dest = internal_malloc_size (*len * sizeof (CHARTYPE)); + + /* Copy string if necessary. */ + memcpy (*dest, src, *len * sizeof (CHARTYPE)); + } +} + + +/* The length of a string not including trailing blanks. */ + +gfc_charlen_type +string_len_trim (gfc_charlen_type len, const CHARTYPE *s) +{ + gfc_charlen_type i; + + for (i = len - 1; i >= 0; i--) + { + if (s[i] != ' ') + break; + } + return i + 1; +} + + +/* Find a substring within a string. */ + +gfc_charlen_type +string_index (gfc_charlen_type slen, const CHARTYPE *str, + gfc_charlen_type sslen, const CHARTYPE *sstr, + GFC_LOGICAL_4 back) +{ + gfc_charlen_type start, last, delta, i; + + if (sslen == 0) + return back ? (slen + 1) : 1; + + if (sslen > slen) + return 0; + + if (!back) + { + last = slen + 1 - sslen; + start = 0; + delta = 1; + } + else + { + last = -1; + start = slen - sslen; + delta = -1; + } + + for (; start != last; start+= delta) + { + for (i = 0; i < sslen; i++) + { + if (str[start + i] != sstr[i]) + break; + } + if (i == sslen) + return (start + 1); + } + return 0; +} + + +/* Remove leading blanks from a string, padding at end. The src and dest + should not overlap. */ + +void +adjustl (CHARTYPE *dest, gfc_charlen_type len, const CHARTYPE *src) +{ + gfc_charlen_type i; + + i = 0; + while (i < len && src[i] == ' ') + i++; + + if (i < len) + memcpy (dest, &src[i], (len - i) * sizeof (CHARTYPE)); + if (i > 0) + MEMSET (&dest[len - i], ' ', i); +} + + +/* Remove trailing blanks from a string. */ + +void +adjustr (CHARTYPE *dest, gfc_charlen_type len, const CHARTYPE *src) +{ + gfc_charlen_type i; + + i = len; + while (i > 0 && src[i - 1] == ' ') + i--; + + if (i < len) + MEMSET (dest, ' ', len - i); + memcpy (&dest[len - i], src, i * sizeof (CHARTYPE)); +} + + +/* Scan a string for any one of the characters in a set of characters. */ + +gfc_charlen_type +string_scan (gfc_charlen_type slen, const CHARTYPE *str, + gfc_charlen_type setlen, const CHARTYPE *set, GFC_LOGICAL_4 back) +{ + gfc_charlen_type i, j; + + if (slen == 0 || setlen == 0) + return 0; + + if (back) + { + for (i = slen - 1; i >= 0; i--) + { + for (j = 0; j < setlen; j++) + { + if (str[i] == set[j]) + return (i + 1); + } + } + } + else + { + for (i = 0; i < slen; i++) + { + for (j = 0; j < setlen; j++) + { + if (str[i] == set[j]) + return (i + 1); + } + } + } + + return 0; +} + + +/* Verify that a set of characters contains all the characters in a + string by identifying the position of the first character in a + characters that does not appear in a given set of characters. */ + +gfc_charlen_type +string_verify (gfc_charlen_type slen, const CHARTYPE *str, + gfc_charlen_type setlen, const CHARTYPE *set, + GFC_LOGICAL_4 back) +{ + gfc_charlen_type start, last, delta, i; + + if (slen == 0) + return 0; + + if (back) + { + last = -1; + start = slen - 1; + delta = -1; + } + else + { + last = slen; + start = 0; + delta = 1; + } + for (; start != last; start += delta) + { + for (i = 0; i < setlen; i++) + { + if (str[start] == set[i]) + break; + } + if (i == setlen) + return (start + 1); + } + + return 0; +} + + +/* MIN and MAX intrinsics for strings. The front-end makes sure that + nargs is at least 2. */ + +void +string_minmax (gfc_charlen_type *rlen, CHARTYPE **dest, int op, int nargs, ...) +{ + va_list ap; + int i; + CHARTYPE *next, *res; + gfc_charlen_type nextlen, reslen; + + va_start (ap, nargs); + reslen = va_arg (ap, gfc_charlen_type); + res = va_arg (ap, CHARTYPE *); + *rlen = reslen; + + if (res == NULL) + runtime_error ("First argument of '%s' intrinsic should be present", + op > 0 ? "MAX" : "MIN"); + + for (i = 1; i < nargs; i++) + { + nextlen = va_arg (ap, gfc_charlen_type); + next = va_arg (ap, CHARTYPE *); + + if (next == NULL) + { + if (i == 1) + runtime_error ("Second argument of '%s' intrinsic should be " + "present", op > 0 ? "MAX" : "MIN"); + else + continue; + } + + if (nextlen > *rlen) + *rlen = nextlen; + + if (op * compare_string (reslen, res, nextlen, next) < 0) + { + reslen = nextlen; + res = next; + } + } + va_end (ap); + + if (*rlen == 0) + *dest = &zero_length_string; + else + { + CHARTYPE *tmp = internal_malloc_size (*rlen * sizeof (CHARTYPE)); + memcpy (tmp, res, reslen * sizeof (CHARTYPE)); + MEMSET (&tmp[reslen], ' ', *rlen - reslen); + *dest = tmp; + } +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/symlnk.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/symlnk.c new file mode 100644 index 0000000000..095520f055 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/symlnk.c @@ -0,0 +1,131 @@ +/* Implementation of the SYMLNK intrinsic. + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +/* SUBROUTINE SYMLNK(PATH1, PATH2, STATUS) + CHARACTER(len=*), INTENT(IN) :: PATH1, PATH2 + INTEGER, INTENT(OUT), OPTIONAL :: STATUS */ + +#ifdef HAVE_SYMLINK +extern void symlnk_i4_sub (char *, char *, GFC_INTEGER_4 *, gfc_charlen_type, + gfc_charlen_type); +iexport_proto(symlnk_i4_sub); + +void +symlnk_i4_sub (char *path1, char *path2, GFC_INTEGER_4 *status, + gfc_charlen_type path1_len, gfc_charlen_type path2_len) +{ + int val; + char *str1, *str2; + + /* Trim trailing spaces from paths. */ + while (path1_len > 0 && path1[path1_len - 1] == ' ') + path1_len--; + while (path2_len > 0 && path2[path2_len - 1] == ' ') + path2_len--; + + /* Make a null terminated copy of the strings. */ + str1 = gfc_alloca (path1_len + 1); + memcpy (str1, path1, path1_len); + str1[path1_len] = '\0'; + + str2 = gfc_alloca (path2_len + 1); + memcpy (str2, path2, path2_len); + str2[path2_len] = '\0'; + + val = symlink (str1, str2); + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} +iexport(symlnk_i4_sub); + +extern void symlnk_i8_sub (char *, char *, GFC_INTEGER_8 *, gfc_charlen_type, + gfc_charlen_type); +iexport_proto(symlnk_i8_sub); + +void +symlnk_i8_sub (char *path1, char *path2, GFC_INTEGER_8 *status, + gfc_charlen_type path1_len, gfc_charlen_type path2_len) +{ + int val; + char *str1, *str2; + + /* Trim trailing spaces from paths. */ + while (path1_len > 0 && path1[path1_len - 1] == ' ') + path1_len--; + while (path2_len > 0 && path2[path2_len - 1] == ' ') + path2_len--; + + /* Make a null terminated copy of the strings. */ + str1 = gfc_alloca (path1_len + 1); + memcpy (str1, path1, path1_len); + str1[path1_len] = '\0'; + + str2 = gfc_alloca (path2_len + 1); + memcpy (str2, path2, path2_len); + str2[path2_len] = '\0'; + + val = symlink (str1, str2); + + if (status != NULL) + *status = (val == 0) ? 0 : errno; +} +iexport(symlnk_i8_sub); + +extern GFC_INTEGER_4 symlnk_i4 (char *, char *, gfc_charlen_type, + gfc_charlen_type); +export_proto(symlnk_i4); + +GFC_INTEGER_4 +symlnk_i4 (char *path1, char *path2, gfc_charlen_type path1_len, + gfc_charlen_type path2_len) +{ + GFC_INTEGER_4 val; + symlnk_i4_sub (path1, path2, &val, path1_len, path2_len); + return val; +} + +extern GFC_INTEGER_8 symlnk_i8 (char *, char *, gfc_charlen_type, + gfc_charlen_type); +export_proto(symlnk_i8); + +GFC_INTEGER_8 +symlnk_i8 (char *path1, char *path2, gfc_charlen_type path1_len, + gfc_charlen_type path2_len) +{ + GFC_INTEGER_8 val; + symlnk_i8_sub (path1, path2, &val, path1_len, path2_len); + return val; +} +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/system.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/system.c new file mode 100644 index 0000000000..831823ffc4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/system.c @@ -0,0 +1,64 @@ +/* Implementation of the SYSTEM intrinsic. + Copyright (C) 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Tobias Schlüter. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) any later +version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + +#ifdef HAVE_STDLIB_H +#include +#endif + +extern void system_sub (const char *fcmd, GFC_INTEGER_4 * status, + gfc_charlen_type cmd_len); +iexport_proto(system_sub); + +void +system_sub (const char *fcmd, GFC_INTEGER_4 *status, gfc_charlen_type cmd_len) +{ + char cmd[cmd_len + 1]; + int stat; + + /* Flush all I/O units before executing the command. */ + flush_all_units(); + + memcpy (cmd, fcmd, cmd_len); + cmd[cmd_len] = '\0'; + + stat = system (cmd); + if (status) + *status = stat; +} +iexport(system_sub); + +extern GFC_INTEGER_4 PREFIX(system) (const char *, gfc_charlen_type); +export_proto_np(PREFIX(system)); + +GFC_INTEGER_4 +PREFIX(system) (const char *fcmd, gfc_charlen_type cmd_len) +{ + GFC_INTEGER_4 stat; + system_sub (fcmd, &stat, cmd_len); + return stat; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/system_clock.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/system_clock.c new file mode 100644 index 0000000000..cf32b8d83f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/system_clock.c @@ -0,0 +1,192 @@ +/* Implementation of the SYSTEM_CLOCK intrinsic. + Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include + +#if defined(HAVE_SYS_TIME_H) && defined(HAVE_GETTIMEOFDAY) +# include +# define TCK 1000 +#elif defined(HAVE_TIME_H) +# include +# define TCK 1 +#else +#define TCK 0 +#endif + + +extern void system_clock_4 (GFC_INTEGER_4 *, GFC_INTEGER_4 *, GFC_INTEGER_4 *); +export_proto(system_clock_4); + +extern void system_clock_8 (GFC_INTEGER_8 *, GFC_INTEGER_8 *, GFC_INTEGER_8 *); +export_proto(system_clock_8); + + +/* prefix(system_clock_4) is the INTEGER(4) version of the SYSTEM_CLOCK + intrinsic subroutine. It returns the number of clock ticks for the current + system time, the number of ticks per second, and the maximum possible value + for COUNT. On the first call to SYSTEM_CLOCK, COUNT is set to zero. */ + +void +system_clock_4(GFC_INTEGER_4 *count, GFC_INTEGER_4 *count_rate, + GFC_INTEGER_4 *count_max) +{ + GFC_INTEGER_4 cnt; + GFC_INTEGER_4 mx; + +#if defined(HAVE_SYS_TIME_H) && defined(HAVE_GETTIMEOFDAY) + struct timeval tp1; + struct timezone tzp; + + if (sizeof (tp1.tv_sec) < sizeof (GFC_INTEGER_4)) + internal_error (NULL, "tv_sec too small"); + + if (gettimeofday(&tp1, &tzp) == 0) + { + GFC_UINTEGER_4 ucnt = (GFC_UINTEGER_4) tp1.tv_sec * TCK; + ucnt += (tp1.tv_usec + 500000 / TCK) / (1000000 / TCK); + if (ucnt > GFC_INTEGER_4_HUGE) + cnt = ucnt - GFC_INTEGER_4_HUGE - 1; + else + cnt = ucnt; + mx = GFC_INTEGER_4_HUGE; + } + else + { + if (count != NULL) + *count = - GFC_INTEGER_4_HUGE; + if (count_rate != NULL) + *count_rate = 0; + if (count_max != NULL) + *count_max = 0; + return; + } +#elif defined(HAVE_TIME_H) + GFC_UINTEGER_4 ucnt; + + if (sizeof (time_t) < sizeof (GFC_INTEGER_4)) + internal_error (NULL, "time_t too small"); + + ucnt = time (NULL); + if (ucnt > GFC_INTEGER_4_HUGE) + cnt = ucnt - GFC_INTEGER_4_HUGE - 1; + else + cnt = ucnt; + mx = GFC_INTEGER_4_HUGE; +#else + cnt = - GFC_INTEGER_4_HUGE; + mx = 0; +#endif + if (count != NULL) + *count = cnt; + if (count_rate != NULL) + *count_rate = TCK; + if (count_max != NULL) + *count_max = mx; +} + + +/* INTEGER(8) version of the above routine. */ + +void +system_clock_8 (GFC_INTEGER_8 *count, GFC_INTEGER_8 *count_rate, + GFC_INTEGER_8 *count_max) +{ + GFC_INTEGER_8 cnt; + GFC_INTEGER_8 mx; + +#if defined(HAVE_SYS_TIME_H) && defined(HAVE_GETTIMEOFDAY) + struct timeval tp1; + struct timezone tzp; + + if (sizeof (tp1.tv_sec) < sizeof (GFC_INTEGER_4)) + internal_error (NULL, "tv_sec too small"); + + if (gettimeofday(&tp1, &tzp) == 0) + { + if (sizeof (tp1.tv_sec) < sizeof (GFC_INTEGER_8)) + { + GFC_UINTEGER_4 ucnt = (GFC_UINTEGER_4) tp1.tv_sec * TCK; + ucnt += (tp1.tv_usec + 500000 / TCK) / (1000000 / TCK); + if (ucnt > GFC_INTEGER_4_HUGE) + cnt = ucnt - GFC_INTEGER_4_HUGE - 1; + else + cnt = ucnt; + mx = GFC_INTEGER_4_HUGE; + } + else + { + GFC_UINTEGER_8 ucnt = (GFC_UINTEGER_8) tp1.tv_sec * TCK; + ucnt += (tp1.tv_usec + 500000 / TCK) / (1000000 / TCK); + if (ucnt > GFC_INTEGER_8_HUGE) + cnt = ucnt - GFC_INTEGER_8_HUGE - 1; + else + cnt = ucnt; + mx = GFC_INTEGER_8_HUGE; + } + } + else + { + if (count != NULL) + *count = - GFC_INTEGER_8_HUGE; + if (count_rate != NULL) + *count_rate = 0; + if (count_max != NULL) + *count_max = 0; + + return; + } +#elif defined(HAVE_TIME_H) + if (sizeof (time_t) < sizeof (GFC_INTEGER_4)) + internal_error (NULL, "time_t too small"); + else if (sizeof (time_t) == sizeof (GFC_INTEGER_4)) + { + GFC_UINTEGER_4 ucnt = time (NULL); + if (ucnt > GFC_INTEGER_4_HUGE) + cnt = ucnt - GFC_INTEGER_4_HUGE - 1; + else + cnt = ucnt; + mx = GFC_INTEGER_4_HUGE; + } + else + { + GFC_UINTEGER_8 ucnt = time (NULL); + if (ucnt > GFC_INTEGER_8_HUGE) + cnt = ucnt - GFC_INTEGER_8_HUGE - 1; + else + cnt = ucnt; + mx = GFC_INTEGER_8_HUGE; + } +#else + cnt = - GFC_INTEGER_8_HUGE; + mx = 0; +#endif + if (count != NULL) + *count = cnt; + if (count_rate != NULL) + *count_rate = TCK; + if (count_max != NULL) + *count_max = mx; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/time.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/time.c new file mode 100644 index 0000000000..d046e87ecb --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/time.c @@ -0,0 +1,64 @@ +/* Implementation of the TIME and TIME8 g77 intrinsics. + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#ifdef TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# ifdef HAVE_TIME_H +# include +# endif +# endif +#endif + + +/* INTEGER(KIND=4) FUNCTION TIME() */ + +#ifdef HAVE_TIME +extern GFC_INTEGER_4 time_func (void); +export_proto(time_func); + +GFC_INTEGER_4 +time_func (void) +{ + return (GFC_INTEGER_4) time (NULL); +} + +/* INTEGER(KIND=8) FUNCTION TIME8() */ + +extern GFC_INTEGER_8 time8_func (void); +export_proto(time8_func); + +GFC_INTEGER_8 +time8_func (void) +{ + return (GFC_INTEGER_8) time (NULL); +} +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/time_1.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/time_1.h new file mode 100644 index 0000000000..a93b7e0202 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/time_1.h @@ -0,0 +1,136 @@ +/* Implementation of the CPU_TIME intrinsic. + Copyright (C) 2003, 2007, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#ifndef LIBGFORTRAN_TIME_H +#define LIBGFORTRAN_TIME_H + +#ifdef HAVE_UNISTD_H +#include +#endif + +/* The time related intrinsics (DTIME, ETIME, CPU_TIME) to "compare + different algorithms on the same computer or discover which parts + are the most expensive", need a way to get the CPU time with the + finest resolution possible. We can only be accurate up to + microseconds. + + As usual with UNIX systems, unfortunately no single way is + available for all systems. */ + +#ifdef TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# ifdef HAVE_TIME_H +# include +# endif +# endif +#endif + +/* The most accurate way to get the CPU time is getrusage (). */ +#if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H) +# include +#endif /* HAVE_GETRUSAGE && HAVE_SYS_RESOURCE_H */ + +#if defined (__GNUC__) && (__GNUC__ >= 3) +# define ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__)) +#else +# define ATTRIBUTE_ALWAYS_INLINE +#endif + +static inline int __time_1 (long *, long *, long *, long *) ATTRIBUTE_ALWAYS_INLINE; + +/* Helper function for the actual implementation of the DTIME, ETIME and + CPU_TIME intrinsics. Returns a CPU time in microseconds or -1 if no + CPU time could be computed. */ + +#ifdef __MINGW32__ + +#define WIN32_LEAN_AND_MEAN +#include + +static int +__time_1 (long *user_sec, long *user_usec, long *system_sec, long *system_usec) +{ + union { + FILETIME ft; + unsigned long long ulltime; + } kernel_time, user_time; + + FILETIME unused1, unused2; + + /* No support for Win9x. The high order bit of the DWORD + returned by GetVersion is 0 for NT and higher. */ + if (GetVersion () >= 0x80000000) + { + *user_sec = *system_sec = 0; + *user_usec = *system_usec = 0; + return -1; + } + + /* The FILETIME structs filled in by GetProcessTimes represent + time in 100 nanosecond units. */ + GetProcessTimes (GetCurrentProcess (), &unused1, &unused2, + &kernel_time.ft, &user_time.ft); + + *user_sec = user_time.ulltime / 10000000; + *user_usec = (user_time.ulltime % 10000000) / 10; + + *system_sec = kernel_time.ulltime / 10000000; + *system_usec = (kernel_time.ulltime % 10000000) / 10; + return 0; +} + +#else + +static inline int +__time_1 (long *user_sec, long *user_usec, long *system_sec, long *system_usec) +{ +#if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H) + struct rusage usage; + getrusage (0, &usage); + + *user_sec = usage.ru_utime.tv_sec; + *user_usec = usage.ru_utime.tv_usec; + *system_sec = usage.ru_stime.tv_sec; + *system_usec = usage.ru_stime.tv_usec; + return 0; + +#else /* ! HAVE_GETRUSAGE || ! HAVE_SYS_RESOURCE_H */ + + /* We have nothing to go on. Return -1. */ + *user_sec = *system_sec = 0; + *user_usec = *system_usec = 0; + return -1; + +#endif +} + +#endif + + +#endif /* LIBGFORTRAN_TIME_H */ diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/transpose_generic.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/transpose_generic.c new file mode 100644 index 0000000000..25856192a6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/transpose_generic.c @@ -0,0 +1,149 @@ +/* Implementation of the TRANSPOSE intrinsic + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Tobias Schlüter + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + +extern void transpose (gfc_array_char *, gfc_array_char *); +export_proto(transpose); + +static void +transpose_internal (gfc_array_char *ret, gfc_array_char *source, + index_type size) +{ + /* r.* indicates the return array. */ + index_type rxstride, rystride; + char *rptr; + /* s.* indicates the source array. */ + index_type sxstride, systride; + const char *sptr; + + index_type xcount, ycount; + index_type x, y; + + assert (GFC_DESCRIPTOR_RANK (source) == 2 + && GFC_DESCRIPTOR_RANK (ret) == 2); + + if (ret->data == NULL) + { + assert (ret->dtype == source->dtype); + + ret->dim[0].lbound = 0; + ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound; + ret->dim[0].stride = 1; + + ret->dim[1].lbound = 0; + ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound; + ret->dim[1].stride = ret->dim[0].ubound+1; + + ret->data = internal_malloc_size (size * size0 ((array_t*)ret)); + ret->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, src_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + src_extent = source->dim[1].ubound + 1 - source->dim[1].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 1: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + ret_extent = ret->dim[1].ubound + 1 - ret->dim[1].lbound; + src_extent = source->dim[0].ubound + 1 - source->dim[0].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 2: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + } + + sxstride = source->dim[0].stride * size; + systride = source->dim[1].stride * size; + xcount = source->dim[0].ubound + 1 - source->dim[0].lbound; + ycount = source->dim[1].ubound + 1 - source->dim[1].lbound; + + rxstride = ret->dim[0].stride * size; + rystride = ret->dim[1].stride * size; + + rptr = ret->data; + sptr = source->data; + + for (y = 0; y < ycount; y++) + { + for (x = 0; x < xcount; x++) + { + memcpy (rptr, sptr, size); + + sptr += sxstride; + rptr += rystride; + } + sptr += systride - (sxstride * xcount); + rptr += rxstride - (rystride * xcount); + } +} + + +extern void transpose (gfc_array_char *, gfc_array_char *); +export_proto(transpose); + +void +transpose (gfc_array_char *ret, gfc_array_char *source) +{ + transpose_internal (ret, source, GFC_DESCRIPTOR_SIZE (source)); +} + + +extern void transpose_char (gfc_array_char *, GFC_INTEGER_4, + gfc_array_char *, GFC_INTEGER_4); +export_proto(transpose_char); + +void +transpose_char (gfc_array_char *ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + gfc_array_char *source, GFC_INTEGER_4 source_length) +{ + transpose_internal (ret, source, source_length); +} + + +extern void transpose_char4 (gfc_array_char *, GFC_INTEGER_4, + gfc_array_char *, GFC_INTEGER_4); +export_proto(transpose_char4); + +void +transpose_char4 (gfc_array_char *ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + gfc_array_char *source, GFC_INTEGER_4 source_length) +{ + transpose_internal (ret, source, source_length * sizeof (gfc_char4_t)); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/umask.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/umask.c new file mode 100644 index 0000000000..9df684bfc8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/umask.c @@ -0,0 +1,93 @@ +/* Implementation of the UMASK intrinsic. + Copyright (C) 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +#include "libgfortran.h" + +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef HAVE_SYS_STAT_H +#include +#endif + +#ifdef HAVE_UNISTD_H +#include +#endif + + +/* SUBROUTINE UMASK(MASK, OLD) + INTEGER, INTENT(IN) :: MASK + INTEGER, INTENT(OUT), OPTIONAL :: OLD */ + +extern void umask_i4_sub (GFC_INTEGER_4 *, GFC_INTEGER_4 *); +iexport_proto(umask_i4_sub); + +void +umask_i4_sub (GFC_INTEGER_4 *mask, GFC_INTEGER_4 *old) +{ + mode_t val = umask((mode_t) *mask); + if (old != NULL) + *old = (GFC_INTEGER_4) val; +} +iexport(umask_i4_sub); + +extern void umask_i8_sub (GFC_INTEGER_8 *, GFC_INTEGER_8 *); +iexport_proto(umask_i8_sub); + +void +umask_i8_sub (GFC_INTEGER_8 *mask, GFC_INTEGER_8 *old) +{ + mode_t val = umask((mode_t) *mask); + if (old != NULL) + *old = (GFC_INTEGER_8) val; +} +iexport(umask_i8_sub); + +/* INTEGER FUNCTION UMASK(MASK) + INTEGER, INTENT(IN) :: MASK */ + +extern GFC_INTEGER_4 umask_i4 (GFC_INTEGER_4 *); +export_proto(umask_i4); + +GFC_INTEGER_4 +umask_i4 (GFC_INTEGER_4 *mask) +{ + GFC_INTEGER_4 old; + umask_i4_sub (mask, &old); + return old; +} + +extern GFC_INTEGER_8 umask_i8 (GFC_INTEGER_8 *); +export_proto(umask_i8); + +GFC_INTEGER_8 +umask_i8 (GFC_INTEGER_8 *mask) +{ + GFC_INTEGER_8 old; + umask_i8_sub (mask, &old); + return old; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/unlink.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/unlink.c new file mode 100644 index 0000000000..7b17dfe3f1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/unlink.c @@ -0,0 +1,91 @@ +/* Implementation of the UNLINK intrinsic. + Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +/* SUBROUTINE UNLINK(NAME, STATUS) + CHARACTER(LEN= ), INTENT(IN) :: NAME + INTEGER, INTENT(OUT), OPTIONAL :: STATUS) */ + +extern void unlink_i4_sub (char *name, GFC_INTEGER_4 *status, + gfc_charlen_type name_len); +iexport_proto(unlink_i4_sub); + +void +unlink_i4_sub (char *name, GFC_INTEGER_4 *status, gfc_charlen_type name_len) +{ + char *str; + GFC_INTEGER_4 stat; + + /* Trim trailing spaces from name. */ + while (name_len > 0 && name[name_len - 1] == ' ') + name_len--; + + /* Make a null terminated copy of the string. */ + str = gfc_alloca (name_len + 1); + memcpy (str, name, name_len); + str[name_len] = '\0'; + + stat = unlink (str); + + if (status != NULL) + *status = (stat == 0) ? stat : errno; +} +iexport(unlink_i4_sub); + +extern void unlink_i8_sub (char *name, GFC_INTEGER_8 *status, + gfc_charlen_type name_len); +export_proto(unlink_i8_sub); + +void +unlink_i8_sub (char *name, GFC_INTEGER_8 *status, gfc_charlen_type name_len) +{ + GFC_INTEGER_4 status4; + unlink_i4_sub (name, &status4, name_len); + if (status) + *status = status4; +} + + +/* INTEGER FUNCTION UNLINK(NAME) + CHARACTER(LEN= ), INTENT(IN) :: NAME */ + +extern GFC_INTEGER_4 PREFIX(unlink) (char *, gfc_charlen_type); +export_proto_np(PREFIX(unlink)); + +GFC_INTEGER_4 +PREFIX(unlink) (char *name, gfc_charlen_type name_len) +{ + GFC_INTEGER_4 status; + unlink_i4_sub (name, &status, name_len); + return status; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/unpack_generic.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/unpack_generic.c new file mode 100644 index 0000000000..a27e37c727 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/unpack_generic.c @@ -0,0 +1,560 @@ +/* Generic implementation of the UNPACK intrinsic + Copyright 2002, 2003, 2004, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + +static void +unpack_internal (gfc_array_char *ret, const gfc_array_char *vector, + const gfc_array_l1 *mask, const gfc_array_char *field, + index_type size, index_type fsize) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + char * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + char *vptr; + /* f.* indicates the field array. */ + index_type fstride[GFC_MAX_DIMENSIONS]; + index_type fstride0; + const char *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Don't convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride * size; + fstride[n] = field->dim[n].stride * fsize; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * size); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride * size; + fstride[n] = field->dim[n].stride * fsize; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = size; + } + + if (empty) + return; + + if (fstride[0] == 0) + fstride[0] = fsize; + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride * size; + if (vstride0 == 0) + vstride0 = size; + rstride0 = rstride[0]; + fstride0 = fstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + fptr = field->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + memcpy (rptr, vptr, size); + vptr += vstride0; + } + else + { + /* From field. */ + memcpy (rptr, fptr, size); + } + /* Advance to the next element. */ + rptr += rstride0; + fptr += fstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + fptr -= fstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + fptr += fstride[n]; + mptr += mstride[n]; + } + } + } +} + +extern void unpack1 (gfc_array_char *, const gfc_array_char *, + const gfc_array_l1 *, const gfc_array_char *); +export_proto(unpack1); + +void +unpack1 (gfc_array_char *ret, const gfc_array_char *vector, + const gfc_array_l1 *mask, const gfc_array_char *field) +{ + index_type type_size; + index_type size; + + type_size = GFC_DTYPE_TYPE_SIZE (vector); + size = GFC_DESCRIPTOR_SIZE (vector); + + switch(type_size) + { + case GFC_DTYPE_LOGICAL_1: + case GFC_DTYPE_INTEGER_1: + case GFC_DTYPE_DERIVED_1: + unpack1_i1 ((gfc_array_i1 *) ret, (gfc_array_i1 *) vector, + mask, (gfc_array_i1 *) field); + return; + + case GFC_DTYPE_LOGICAL_2: + case GFC_DTYPE_INTEGER_2: + unpack1_i2 ((gfc_array_i2 *) ret, (gfc_array_i2 *) vector, + mask, (gfc_array_i2 *) field); + return; + + case GFC_DTYPE_LOGICAL_4: + case GFC_DTYPE_INTEGER_4: + unpack1_i4 ((gfc_array_i4 *) ret, (gfc_array_i4 *) vector, + mask, (gfc_array_i4 *) field); + return; + + case GFC_DTYPE_LOGICAL_8: + case GFC_DTYPE_INTEGER_8: + unpack1_i8 ((gfc_array_i8 *) ret, (gfc_array_i8 *) vector, + mask, (gfc_array_i8 *) field); + return; + +#ifdef HAVE_GFC_INTEGER_16 + case GFC_DTYPE_LOGICAL_16: + case GFC_DTYPE_INTEGER_16: + unpack1_i16 ((gfc_array_i16 *) ret, (gfc_array_i16 *) vector, + mask, (gfc_array_i16 *) field); + return; +#endif + case GFC_DTYPE_REAL_4: + unpack1_r4 ((gfc_array_r4 *) ret, (gfc_array_r4 *) vector, + mask, (gfc_array_r4 *) field); + return; + + case GFC_DTYPE_REAL_8: + unpack1_r8 ((gfc_array_r8 *) ret, (gfc_array_r8 *) vector, + mask, (gfc_array_r8 *) field); + return; + +#ifdef HAVE_GFC_REAL_10 + case GFC_DTYPE_REAL_10: + unpack1_r10 ((gfc_array_r10 *) ret, (gfc_array_r10 *) vector, + mask, (gfc_array_r10 *) field); + return; +#endif + +#ifdef HAVE_GFC_REAL_16 + case GFC_DTYPE_REAL_16: + unpack1_r16 ((gfc_array_r16 *) ret, (gfc_array_r16 *) vector, + mask, (gfc_array_r16 *) field); + return; +#endif + + case GFC_DTYPE_COMPLEX_4: + unpack1_c4 ((gfc_array_c4 *) ret, (gfc_array_c4 *) vector, + mask, (gfc_array_c4 *) field); + return; + + case GFC_DTYPE_COMPLEX_8: + unpack1_c8 ((gfc_array_c8 *) ret, (gfc_array_c8 *) vector, + mask, (gfc_array_c8 *) field); + return; + +#ifdef HAVE_GFC_COMPLEX_10 + case GFC_DTYPE_COMPLEX_10: + unpack1_c10 ((gfc_array_c10 *) ret, (gfc_array_c10 *) vector, + mask, (gfc_array_c10 *) field); + return; +#endif + +#ifdef HAVE_GFC_COMPLEX_16 + case GFC_DTYPE_COMPLEX_16: + unpack1_c16 ((gfc_array_c16 *) ret, (gfc_array_c16 *) vector, + mask, (gfc_array_c16 *) field); + return; +#endif + + case GFC_DTYPE_DERIVED_2: + if (GFC_UNALIGNED_2(ret->data) || GFC_UNALIGNED_2(vector->data) + || GFC_UNALIGNED_2(field->data)) + break; + else + { + unpack1_i2 ((gfc_array_i2 *) ret, (gfc_array_i2 *) vector, + mask, (gfc_array_i2 *) field); + return; + } + + case GFC_DTYPE_DERIVED_4: + if (GFC_UNALIGNED_4(ret->data) || GFC_UNALIGNED_4(vector->data) + || GFC_UNALIGNED_4(field->data)) + break; + else + { + unpack1_i4 ((gfc_array_i4 *) ret, (gfc_array_i4 *) vector, + mask, (gfc_array_i4 *) field); + return; + } + + case GFC_DTYPE_DERIVED_8: + if (GFC_UNALIGNED_8(ret->data) || GFC_UNALIGNED_8(vector->data) + || GFC_UNALIGNED_8(field->data)) + break; + else + { + unpack1_i8 ((gfc_array_i8 *) ret, (gfc_array_i8 *) vector, + mask, (gfc_array_i8 *) field); + return; + } + +#ifdef HAVE_GFC_INTEGER_16 + case GFC_DTYPE_DERIVED_16: + if (GFC_UNALIGNED_16(ret->data) || GFC_UNALIGNED_16(vector->data) + || GFC_UNALIGNED_16(field->data)) + break; + else + { + unpack1_i16 ((gfc_array_i16 *) ret, (gfc_array_i16 *) vector, + mask, (gfc_array_i16 *) field); + return; + } +#endif + } + + unpack_internal (ret, vector, mask, field, size, + GFC_DESCRIPTOR_SIZE (field)); +} + + +extern void unpack1_char (gfc_array_char *, GFC_INTEGER_4, + const gfc_array_char *, const gfc_array_l1 *, + const gfc_array_char *, GFC_INTEGER_4, + GFC_INTEGER_4); +export_proto(unpack1_char); + +void +unpack1_char (gfc_array_char *ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char *vector, const gfc_array_l1 *mask, + const gfc_array_char *field, GFC_INTEGER_4 vector_length, + GFC_INTEGER_4 field_length) +{ + unpack_internal (ret, vector, mask, field, vector_length, field_length); +} + + +extern void unpack1_char4 (gfc_array_char *, GFC_INTEGER_4, + const gfc_array_char *, const gfc_array_l1 *, + const gfc_array_char *, GFC_INTEGER_4, + GFC_INTEGER_4); +export_proto(unpack1_char4); + +void +unpack1_char4 (gfc_array_char *ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char *vector, const gfc_array_l1 *mask, + const gfc_array_char *field, GFC_INTEGER_4 vector_length, + GFC_INTEGER_4 field_length) +{ + unpack_internal (ret, vector, mask, field, + vector_length * sizeof (gfc_char4_t), + field_length * sizeof (gfc_char4_t)); +} + + +extern void unpack0 (gfc_array_char *, const gfc_array_char *, + const gfc_array_l1 *, char *); +export_proto(unpack0); + +void +unpack0 (gfc_array_char *ret, const gfc_array_char *vector, + const gfc_array_l1 *mask, char *field) +{ + gfc_array_char tmp; + + index_type type_size; + index_type size; + + type_size = GFC_DTYPE_TYPE_SIZE (vector); + size = GFC_DESCRIPTOR_SIZE (vector); + + switch(type_size) + { + case GFC_DTYPE_LOGICAL_1: + case GFC_DTYPE_INTEGER_1: + case GFC_DTYPE_DERIVED_1: + unpack0_i1 ((gfc_array_i1 *) ret, (gfc_array_i1 *) vector, + mask, (GFC_INTEGER_1 *) field); + return; + + case GFC_DTYPE_LOGICAL_2: + case GFC_DTYPE_INTEGER_2: + unpack0_i2 ((gfc_array_i2 *) ret, (gfc_array_i2 *) vector, + mask, (GFC_INTEGER_2 *) field); + return; + + case GFC_DTYPE_LOGICAL_4: + case GFC_DTYPE_INTEGER_4: + unpack0_i4 ((gfc_array_i4 *) ret, (gfc_array_i4 *) vector, + mask, (GFC_INTEGER_4 *) field); + return; + + case GFC_DTYPE_LOGICAL_8: + case GFC_DTYPE_INTEGER_8: + unpack0_i8 ((gfc_array_i8 *) ret, (gfc_array_i8 *) vector, + mask, (GFC_INTEGER_8 *) field); + return; + +#ifdef HAVE_GFC_INTEGER_16 + case GFC_DTYPE_LOGICAL_16: + case GFC_DTYPE_INTEGER_16: + unpack0_i16 ((gfc_array_i16 *) ret, (gfc_array_i16 *) vector, + mask, (GFC_INTEGER_16 *) field); + return; +#endif + case GFC_DTYPE_REAL_4: + unpack0_r4 ((gfc_array_r4 *) ret, (gfc_array_r4 *) vector, + mask, (GFC_REAL_4 *) field); + return; + + case GFC_DTYPE_REAL_8: + unpack0_r8 ((gfc_array_r8 *) ret, (gfc_array_r8*) vector, + mask, (GFC_REAL_8 *) field); + return; + +#ifdef HAVE_GFC_REAL_10 + case GFC_DTYPE_REAL_10: + unpack0_r10 ((gfc_array_r10 *) ret, (gfc_array_r10 *) vector, + mask, (GFC_REAL_10 *) field); + return; +#endif + +#ifdef HAVE_GFC_REAL_16 + case GFC_DTYPE_REAL_16: + unpack0_r16 ((gfc_array_r16 *) ret, (gfc_array_r16 *) vector, + mask, (GFC_REAL_16 *) field); + return; +#endif + + case GFC_DTYPE_COMPLEX_4: + unpack0_c4 ((gfc_array_c4 *) ret, (gfc_array_c4 *) vector, + mask, (GFC_COMPLEX_4 *) field); + return; + + case GFC_DTYPE_COMPLEX_8: + unpack0_c8 ((gfc_array_c8 *) ret, (gfc_array_c8 *) vector, + mask, (GFC_COMPLEX_8 *) field); + return; + +#ifdef HAVE_GFC_COMPLEX_10 + case GFC_DTYPE_COMPLEX_10: + unpack0_c10 ((gfc_array_c10 *) ret, (gfc_array_c10 *) vector, + mask, (GFC_COMPLEX_10 *) field); + return; +#endif + +#ifdef HAVE_GFC_COMPLEX_16 + case GFC_DTYPE_COMPLEX_16: + unpack0_c16 ((gfc_array_c16 *) ret, (gfc_array_c16 *) vector, + mask, (GFC_COMPLEX_16 *) field); + return; +#endif + case GFC_DTYPE_DERIVED_2: + if (GFC_UNALIGNED_2(ret->data) || GFC_UNALIGNED_2(vector->data) + || GFC_UNALIGNED_2(field)) + break; + else + { + unpack0_i2 ((gfc_array_i2 *) ret, (gfc_array_i2 *) vector, + mask, (GFC_INTEGER_2 *) field); + return; + } + + case GFC_DTYPE_DERIVED_4: + if (GFC_UNALIGNED_4(ret->data) || GFC_UNALIGNED_4(vector->data) + || GFC_UNALIGNED_4(field)) + break; + else + { + unpack0_i4 ((gfc_array_i4 *) ret, (gfc_array_i4 *) vector, + mask, (GFC_INTEGER_4 *) field); + return; + } + + case GFC_DTYPE_DERIVED_8: + if (GFC_UNALIGNED_8(ret->data) || GFC_UNALIGNED_8(vector->data) + || GFC_UNALIGNED_8(field)) + break; + else + { + unpack0_i8 ((gfc_array_i8 *) ret, (gfc_array_i8 *) vector, + mask, (GFC_INTEGER_8 *) field); + return; + } +#ifdef HAVE_GFC_INTEGER_16 + case GFC_DTYPE_DERIVED_16: + if (GFC_UNALIGNED_16(ret->data) || GFC_UNALIGNED_16(vector->data) + || GFC_UNALIGNED_16(field)) + break; + else + { + unpack0_i16 ((gfc_array_i16 *) ret, (gfc_array_i16 *) vector, + mask, (GFC_INTEGER_16 *) field); + return; + } +#endif + } + + memset (&tmp, 0, sizeof (tmp)); + tmp.dtype = 0; + tmp.data = field; + unpack_internal (ret, vector, mask, &tmp, GFC_DESCRIPTOR_SIZE (vector), 0); +} + + +extern void unpack0_char (gfc_array_char *, GFC_INTEGER_4, + const gfc_array_char *, const gfc_array_l1 *, + char *, GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(unpack0_char); + +void +unpack0_char (gfc_array_char *ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char *vector, const gfc_array_l1 *mask, + char *field, GFC_INTEGER_4 vector_length, + GFC_INTEGER_4 field_length __attribute__((unused))) +{ + gfc_array_char tmp; + + memset (&tmp, 0, sizeof (tmp)); + tmp.dtype = 0; + tmp.data = field; + unpack_internal (ret, vector, mask, &tmp, vector_length, 0); +} + + +extern void unpack0_char4 (gfc_array_char *, GFC_INTEGER_4, + const gfc_array_char *, const gfc_array_l1 *, + char *, GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(unpack0_char4); + +void +unpack0_char4 (gfc_array_char *ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char *vector, const gfc_array_l1 *mask, + char *field, GFC_INTEGER_4 vector_length, + GFC_INTEGER_4 field_length __attribute__((unused))) +{ + gfc_array_char tmp; + + memset (&tmp, 0, sizeof (tmp)); + tmp.dtype = 0; + tmp.data = field; + unpack_internal (ret, vector, mask, &tmp, + vector_length * sizeof (gfc_char4_t), 0); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/close.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/close.c new file mode 100644 index 0000000000..848b7c9e71 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/close.c @@ -0,0 +1,101 @@ +/* Copyright (C) 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "io.h" +#include + +typedef enum +{ CLOSE_DELETE, CLOSE_KEEP, CLOSE_UNSPECIFIED } +close_status; + +static const st_option status_opt[] = { + {"keep", CLOSE_KEEP}, + {"delete", CLOSE_DELETE}, + {NULL, 0} +}; + + +extern void st_close (st_parameter_close *); +export_proto(st_close); + +void +st_close (st_parameter_close *clp) +{ + close_status status; + gfc_unit *u; +#if !HAVE_UNLINK_OPEN_FILE + char * path; + + path = NULL; +#endif + + library_start (&clp->common); + + status = !(clp->common.flags & IOPARM_CLOSE_HAS_STATUS) ? CLOSE_UNSPECIFIED : + find_option (&clp->common, clp->status, clp->status_len, + status_opt, "Bad STATUS parameter in CLOSE statement"); + + if ((clp->common.flags & IOPARM_LIBRETURN_MASK) != IOPARM_LIBRETURN_OK) + { + library_end (); + return; + } + + u = find_unit (clp->common.unit); + if (u != NULL) + { + if (u->flags.status == STATUS_SCRATCH) + { + if (status == CLOSE_KEEP) + generate_error (&clp->common, LIBERROR_BAD_OPTION, + "Can't KEEP a scratch file on CLOSE"); +#if !HAVE_UNLINK_OPEN_FILE + path = (char *) gfc_alloca (u->file_len + 1); + unpack_filename (path, u->file, u->file_len); +#endif + } + else + { + if (status == CLOSE_DELETE) + { +#if HAVE_UNLINK_OPEN_FILE + delete_file (u); +#else + path = (char *) gfc_alloca (u->file_len + 1); + unpack_filename (path, u->file, u->file_len); +#endif + } + } + + close_unit (u); + +#if !HAVE_UNLINK_OPEN_FILE + if (path != NULL) + unlink (path); +#endif + } + + /* CLOSE on unconnected unit is legal and a no-op: F95 std., 9.3.5. */ + library_end (); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/fbuf.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/fbuf.c new file mode 100644 index 0000000000..a9171751bb --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/fbuf.c @@ -0,0 +1,159 @@ +/* Copyright (C) 2008, 2009 Free Software Foundation, Inc. + Contributed by Janne Blomqvist + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +#include "io.h" +#include +#include + + +void +fbuf_init (gfc_unit * u, size_t len) +{ + if (len == 0) + len = 512; /* Default size. */ + + u->fbuf = get_mem (sizeof (fbuf)); + u->fbuf->buf = get_mem (len); + u->fbuf->len = len; + u->fbuf->act = u->fbuf->flushed = u->fbuf->pos = 0; +} + + +void +fbuf_reset (gfc_unit * u) +{ + u->fbuf->act = u->fbuf->flushed = u->fbuf->pos = 0; +} + + +void +fbuf_destroy (gfc_unit * u) +{ + if (u->fbuf == NULL) + return; + if (u->fbuf->buf) + free_mem (u->fbuf->buf); + free_mem (u->fbuf); +} + + +/* Return a pointer to the current position in the buffer, and increase + the pointer by len. Makes sure that the buffer is big enough, + reallocating if necessary. If the buffer is not big enough, there are + three cases to consider: + 1. If we haven't flushed anything, realloc + 2. If we have flushed enough that by discarding the flushed bytes + the request fits into the buffer, do that. + 3. Else allocate a new buffer, memcpy unflushed active bytes from old + buffer. */ + +char * +fbuf_alloc (gfc_unit * u, size_t len) +{ + size_t newlen; + char *dest; + if (u->fbuf->pos + len > u->fbuf->len) + { + if (u->fbuf->flushed == 0) + { + /* Round up to nearest multiple of the current buffer length. */ + newlen = ((u->fbuf->pos + len) / u->fbuf->len + 1) * u->fbuf->len; + dest = realloc (u->fbuf->buf, newlen); + if (dest == NULL) + return NULL; + u->fbuf->buf = dest; + u->fbuf->len = newlen; + } + else if (u->fbuf->act - u->fbuf->flushed + len < u->fbuf->len) + { + memmove (u->fbuf->buf, u->fbuf->buf + u->fbuf->flushed, + u->fbuf->act - u->fbuf->flushed); + u->fbuf->act -= u->fbuf->flushed; + u->fbuf->pos -= u->fbuf->flushed; + u->fbuf->flushed = 0; + } + else + { + /* Most general case, flushed != 0, request doesn't fit. */ + newlen = ((u->fbuf->pos - u->fbuf->flushed + len) + / u->fbuf->len + 1) * u->fbuf->len; + dest = get_mem (newlen); + memcpy (dest, u->fbuf->buf + u->fbuf->flushed, + u->fbuf->act - u->fbuf->flushed); + u->fbuf->act -= u->fbuf->flushed; + u->fbuf->pos -= u->fbuf->flushed; + u->fbuf->flushed = 0; + u->fbuf->buf = dest; + u->fbuf->len = newlen; + } + } + + dest = u->fbuf->buf + u->fbuf->pos; + u->fbuf->pos += len; + if (u->fbuf->pos > u->fbuf->act) + u->fbuf->act = u->fbuf->pos; + return dest; +} + + + + +int +fbuf_flush (gfc_unit * u, int record_done) +{ + int status; + size_t nbytes; + + if (!u->fbuf) + return 0; + if (u->fbuf->act - u->fbuf->flushed != 0) + { + if (record_done) + nbytes = u->fbuf->act - u->fbuf->flushed; + else + nbytes = u->fbuf->pos - u->fbuf->flushed; + status = swrite (u->s, u->fbuf->buf + u->fbuf->flushed, &nbytes); + u->fbuf->flushed += nbytes; + } + else + status = 0; + if (record_done) + fbuf_reset (u); + return status; +} + + +int +fbuf_seek (gfc_unit * u, gfc_offset off) +{ + gfc_offset pos = u->fbuf->pos + off; + /* Moving to the left past the flushed marked would imply moving past + the left tab limit, which is never allowed. So return error if + that is attempted. */ + if (pos < (gfc_offset) u->fbuf->flushed) + return -1; + u->fbuf->pos = pos; + return 0; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/file_pos.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/file_pos.c new file mode 100644 index 0000000000..5573c34da8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/file_pos.c @@ -0,0 +1,404 @@ +/* Copyright (C) 2002-2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Andy Vaught and Janne Blomqvist + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "io.h" +#include + +/* file_pos.c-- Implement the file positioning statements, i.e. BACKSPACE, + ENDFILE, and REWIND as well as the FLUSH statement. */ + + +/* formatted_backspace(fpp, u)-- Move the file back one line. The + current position is after the newline that terminates the previous + record, and we have to sift backwards to find the newline before + that or the start of the file, whichever comes first. */ + +static const int READ_CHUNK = 4096; + +static void +formatted_backspace (st_parameter_filepos *fpp, gfc_unit *u) +{ + gfc_offset base; + char p[READ_CHUNK]; + size_t n; + + base = file_position (u->s) - 1; + + do + { + n = (base < READ_CHUNK) ? base : READ_CHUNK; + base -= n; + if (sseek (u->s, base) == FAILURE) + goto io_error; + if (sread (u->s, p, &n) != 0) + goto io_error; + + /* We have moved backwards from the current position, it should + not be possible to get a short read. Because it is not + clear what to do about such thing, we ignore the possibility. */ + + /* There is no memrchr() in the C library, so we have to do it + ourselves. */ + + while (n > 0) + { + n--; + if (p[n] == '\n') + { + base += n + 1; + goto done; + } + } + + } + while (base != 0); + + /* base is the new pointer. Seek to it exactly. */ + done: + if (sseek (u->s, base) == FAILURE) + goto io_error; + u->last_record--; + u->endfile = NO_ENDFILE; + + return; + + io_error: + generate_error (&fpp->common, LIBERROR_OS, NULL); +} + + +/* unformatted_backspace(fpp) -- Move the file backwards for an unformatted + sequential file. We are guaranteed to be between records on entry and + we have to shift to the previous record. Loop over subrecords. */ + +static void +unformatted_backspace (st_parameter_filepos *fpp, gfc_unit *u) +{ + gfc_offset m, new; + GFC_INTEGER_4 m4; + GFC_INTEGER_8 m8; + size_t length; + int continued; + char p[sizeof (GFC_INTEGER_8)]; + + if (compile_options.record_marker == 0) + length = sizeof (GFC_INTEGER_4); + else + length = compile_options.record_marker; + + do + { + if (sseek (u->s, file_position (u->s) - length) == FAILURE) + goto io_error; + if (sread (u->s, p, &length) != 0) + goto io_error; + + /* Only GFC_CONVERT_NATIVE and GFC_CONVERT_SWAP are valid here. */ + if (likely (u->flags.convert == GFC_CONVERT_NATIVE)) + { + switch (length) + { + case sizeof(GFC_INTEGER_4): + memcpy (&m4, p, sizeof (m4)); + m = m4; + break; + + case sizeof(GFC_INTEGER_8): + memcpy (&m8, p, sizeof (m8)); + m = m8; + break; + + default: + runtime_error ("Illegal value for record marker"); + break; + } + } + else + { + switch (length) + { + case sizeof(GFC_INTEGER_4): + reverse_memcpy (&m4, p, sizeof (m4)); + m = m4; + break; + + case sizeof(GFC_INTEGER_8): + reverse_memcpy (&m8, p, sizeof (m8)); + m = m8; + break; + + default: + runtime_error ("Illegal value for record marker"); + break; + } + + } + + continued = m < 0; + if (continued) + m = -m; + + if ((new = file_position (u->s) - m - 2*length) < 0) + new = 0; + + if (sseek (u->s, new) == FAILURE) + goto io_error; + } while (continued); + + u->last_record--; + return; + + io_error: + generate_error (&fpp->common, LIBERROR_OS, NULL); +} + + +extern void st_backspace (st_parameter_filepos *); +export_proto(st_backspace); + +void +st_backspace (st_parameter_filepos *fpp) +{ + gfc_unit *u; + + library_start (&fpp->common); + + u = find_unit (fpp->common.unit); + if (u == NULL) + { + generate_error (&fpp->common, LIBERROR_BAD_UNIT, NULL); + goto done; + } + + /* Direct access is prohibited, and so is unformatted stream access. */ + + + if (u->flags.access == ACCESS_DIRECT) + { + generate_error (&fpp->common, LIBERROR_OPTION_CONFLICT, + "Cannot BACKSPACE a file opened for DIRECT access"); + goto done; + } + + if (u->flags.access == ACCESS_STREAM && u->flags.form == FORM_UNFORMATTED) + { + generate_error (&fpp->common, LIBERROR_OPTION_CONFLICT, + "Cannot BACKSPACE an unformatted stream file"); + goto done; + } + + /* Make sure format buffer is flushed. */ + fbuf_flush (u, 1); + + /* Check for special cases involving the ENDFILE record first. */ + + if (u->endfile == AFTER_ENDFILE) + { + u->endfile = AT_ENDFILE; + u->flags.position = POSITION_APPEND; + flush (u->s); + } + else + { + if (file_position (u->s) == 0) + { + u->flags.position = POSITION_REWIND; + goto done; /* Common special case */ + } + + if (u->mode == WRITING) + { + /* If there are previously written bytes from a write with + ADVANCE="no", add a record marker before performing the + BACKSPACE. */ + + if (u->previous_nonadvancing_write) + finish_last_advance_record (u); + + u->previous_nonadvancing_write = 0; + + flush (u->s); + struncate (u->s); + u->mode = READING; + } + + if (u->flags.form == FORM_FORMATTED) + formatted_backspace (fpp, u); + else + unformatted_backspace (fpp, u); + + update_position (u); + u->endfile = NO_ENDFILE; + u->current_record = 0; + u->bytes_left = 0; + } + + done: + if (u != NULL) + unlock_unit (u); + + library_end (); +} + + +extern void st_endfile (st_parameter_filepos *); +export_proto(st_endfile); + +void +st_endfile (st_parameter_filepos *fpp) +{ + gfc_unit *u; + + library_start (&fpp->common); + + u = find_unit (fpp->common.unit); + if (u != NULL) + { + if (u->flags.access == ACCESS_DIRECT) + { + generate_error (&fpp->common, LIBERROR_OPTION_CONFLICT, + "Cannot perform ENDFILE on a file opened" + " for DIRECT access"); + goto done; + } + + /* If there are previously written bytes from a write with ADVANCE="no", + add a record marker before performing the ENDFILE. */ + + if (u->previous_nonadvancing_write) + finish_last_advance_record (u); + + u->previous_nonadvancing_write = 0; + + if (u->current_record) + { + st_parameter_dt dtp; + dtp.common = fpp->common; + memset (&dtp.u.p, 0, sizeof (dtp.u.p)); + dtp.u.p.current_unit = u; + next_record (&dtp, 1); + } + + flush (u->s); + struncate (u->s); + u->endfile = AFTER_ENDFILE; + update_position (u); + done: + unlock_unit (u); + } + + library_end (); +} + + +extern void st_rewind (st_parameter_filepos *); +export_proto(st_rewind); + +void +st_rewind (st_parameter_filepos *fpp) +{ + gfc_unit *u; + + library_start (&fpp->common); + + u = find_unit (fpp->common.unit); + if (u != NULL) + { + if (u->flags.access == ACCESS_DIRECT) + generate_error (&fpp->common, LIBERROR_BAD_OPTION, + "Cannot REWIND a file opened for DIRECT access"); + else + { + /* If there are previously written bytes from a write with ADVANCE="no", + add a record marker before performing the ENDFILE. */ + + if (u->previous_nonadvancing_write) + finish_last_advance_record (u); + + u->previous_nonadvancing_write = 0; + + /* Flush the buffers. If we have been writing to the file, the last + written record is the last record in the file, so truncate the + file now. Reset to read mode so two consecutive rewind + statements do not delete the file contents. */ + flush (u->s); + if (u->mode == WRITING && u->flags.access != ACCESS_STREAM) + struncate (u->s); + + u->mode = READING; + u->last_record = 0; + + if (file_position (u->s) != 0 && sseek (u->s, 0) == FAILURE) + generate_error (&fpp->common, LIBERROR_OS, NULL); + + /* Handle special files like /dev/null differently. */ + if (!is_special (u->s)) + { + /* We are rewinding so we are not at the end. */ + u->endfile = NO_ENDFILE; + } + else + { + /* Set this for compatibilty with g77 for /dev/null. */ + if (file_length (u->s) == 0 && file_position (u->s) == 0) + u->endfile = AT_ENDFILE; + /* Future refinements on special files can go here. */ + } + + u->current_record = 0; + u->strm_pos = 1; + u->read_bad = 0; + } + /* Update position for INQUIRE. */ + u->flags.position = POSITION_REWIND; + unlock_unit (u); + } + + library_end (); +} + + +extern void st_flush (st_parameter_filepos *); +export_proto(st_flush); + +void +st_flush (st_parameter_filepos *fpp) +{ + gfc_unit *u; + + library_start (&fpp->common); + + u = find_unit (fpp->common.unit); + if (u != NULL) + { + flush (u->s); + unlock_unit (u); + } + else + /* FLUSH on unconnected unit is illegal: F95 std., 9.3.5. */ + generate_error (&fpp->common, LIBERROR_BAD_OPTION, + "Specified UNIT in FLUSH is not connected"); + + library_end (); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/format.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/format.c new file mode 100644 index 0000000000..086ab678ec --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/format.c @@ -0,0 +1,1179 @@ +/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught + F2003 I/O support contributed by Jerry DeLisle + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +/* format.c-- parse a FORMAT string into a binary format suitable for + * interpretation during I/O statements */ + +#include "io.h" +#include +#include + +#define FARRAY_SIZE 64 + +typedef struct fnode_array +{ + struct fnode_array *next; + fnode array[FARRAY_SIZE]; +} +fnode_array; + +typedef struct format_data +{ + char *format_string, *string; + const char *error; + char error_element; + format_token saved_token; + int value, format_string_len, reversion_ok; + fnode *avail; + const fnode *saved_format; + fnode_array *last; + fnode_array array; +} +format_data; + +static const fnode colon_node = { FMT_COLON, 0, NULL, NULL, {{ 0, 0, 0 }}, 0, + NULL }; + +/* Error messages */ + +static const char posint_required[] = "Positive width required in format", + period_required[] = "Period required in format", + nonneg_required[] = "Nonnegative width required in format", + unexpected_element[] = "Unexpected element '%c' in format\n", + unexpected_end[] = "Unexpected end of format string", + bad_string[] = "Unterminated character constant in format", + bad_hollerith[] = "Hollerith constant extends past the end of the format", + reversion_error[] = "Exhausted data descriptors in format", + zero_width[] = "Zero width in format descriptor"; + +/* next_char()-- Return the next character in the format string. + * Returns -1 when the string is done. If the literal flag is set, + * spaces are significant, otherwise they are not. */ + +static int +next_char (format_data *fmt, int literal) +{ + int c; + + do + { + if (fmt->format_string_len == 0) + return -1; + + fmt->format_string_len--; + fmt->error_element = c = toupper (*fmt->format_string++); + } + while ((c == ' ' || c == '\t') && !literal); + + return c; +} + + +/* unget_char()-- Back up one character position. */ + +#define unget_char(fmt) \ + { fmt->format_string--; fmt->format_string_len++; } + + +/* get_fnode()-- Allocate a new format node, inserting it into the + * current singly linked list. These are initially allocated from the + * static buffer. */ + +static fnode * +get_fnode (format_data *fmt, fnode **head, fnode **tail, format_token t) +{ + fnode *f; + + if (fmt->avail == &fmt->last->array[FARRAY_SIZE]) + { + fmt->last->next = get_mem (sizeof (fnode_array)); + fmt->last = fmt->last->next; + fmt->last->next = NULL; + fmt->avail = &fmt->last->array[0]; + } + f = fmt->avail++; + memset (f, '\0', sizeof (fnode)); + + if (*head == NULL) + *head = *tail = f; + else + { + (*tail)->next = f; + *tail = f; + } + + f->format = t; + f->repeat = -1; + f->source = fmt->format_string; + return f; +} + + +/* free_format_data()-- Free all allocated format data. */ + +void +free_format_data (st_parameter_dt *dtp) +{ + fnode_array *fa, *fa_next; + format_data *fmt = dtp->u.p.fmt; + + if (fmt == NULL) + return; + + for (fa = fmt->array.next; fa; fa = fa_next) + { + fa_next = fa->next; + free_mem (fa); + } + + free_mem (fmt); + dtp->u.p.fmt = NULL; +} + + +/* format_lex()-- Simple lexical analyzer for getting the next token + * in a FORMAT string. We support a one-level token pushback in the + * fmt->saved_token variable. */ + +static format_token +format_lex (format_data *fmt) +{ + format_token token; + int negative_flag; + int c; + char delim; + + if (fmt->saved_token != FMT_NONE) + { + token = fmt->saved_token; + fmt->saved_token = FMT_NONE; + return token; + } + + negative_flag = 0; + c = next_char (fmt, 0); + + switch (c) + { + case '-': + negative_flag = 1; + /* Fall Through */ + + case '+': + c = next_char (fmt, 0); + if (!isdigit (c)) + { + token = FMT_UNKNOWN; + break; + } + + fmt->value = c - '0'; + + for (;;) + { + c = next_char (fmt, 0); + if (!isdigit (c)) + break; + + fmt->value = 10 * fmt->value + c - '0'; + } + + unget_char (fmt); + + if (negative_flag) + fmt->value = -fmt->value; + token = FMT_SIGNED_INT; + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + fmt->value = c - '0'; + + for (;;) + { + c = next_char (fmt, 0); + if (!isdigit (c)) + break; + + fmt->value = 10 * fmt->value + c - '0'; + } + + unget_char (fmt); + token = (fmt->value == 0) ? FMT_ZERO : FMT_POSINT; + break; + + case '.': + token = FMT_PERIOD; + break; + + case ',': + token = FMT_COMMA; + break; + + case ':': + token = FMT_COLON; + break; + + case '/': + token = FMT_SLASH; + break; + + case '$': + token = FMT_DOLLAR; + break; + + case 'T': + switch (next_char (fmt, 0)) + { + case 'L': + token = FMT_TL; + break; + case 'R': + token = FMT_TR; + break; + default: + token = FMT_T; + unget_char (fmt); + break; + } + + break; + + case '(': + token = FMT_LPAREN; + break; + + case ')': + token = FMT_RPAREN; + break; + + case 'X': + token = FMT_X; + break; + + case 'S': + switch (next_char (fmt, 0)) + { + case 'S': + token = FMT_SS; + break; + case 'P': + token = FMT_SP; + break; + default: + token = FMT_S; + unget_char (fmt); + break; + } + + break; + + case 'B': + switch (next_char (fmt, 0)) + { + case 'N': + token = FMT_BN; + break; + case 'Z': + token = FMT_BZ; + break; + default: + token = FMT_B; + unget_char (fmt); + break; + } + + break; + + case '\'': + case '"': + delim = c; + + fmt->string = fmt->format_string; + fmt->value = 0; /* This is the length of the string */ + + for (;;) + { + c = next_char (fmt, 1); + if (c == -1) + { + token = FMT_BADSTRING; + fmt->error = bad_string; + break; + } + + if (c == delim) + { + c = next_char (fmt, 1); + + if (c == -1) + { + token = FMT_BADSTRING; + fmt->error = bad_string; + break; + } + + if (c != delim) + { + unget_char (fmt); + token = FMT_STRING; + break; + } + } + + fmt->value++; + } + + break; + + case 'P': + token = FMT_P; + break; + + case 'I': + token = FMT_I; + break; + + case 'O': + token = FMT_O; + break; + + case 'Z': + token = FMT_Z; + break; + + case 'F': + token = FMT_F; + break; + + case 'E': + switch (next_char (fmt, 0)) + { + case 'N': + token = FMT_EN; + break; + case 'S': + token = FMT_ES; + break; + default: + token = FMT_E; + unget_char (fmt); + break; + } + break; + + case 'G': + token = FMT_G; + break; + + case 'H': + token = FMT_H; + break; + + case 'L': + token = FMT_L; + break; + + case 'A': + token = FMT_A; + break; + + case 'D': + switch (next_char (fmt, 0)) + { + case 'P': + token = FMT_DP; + break; + case 'C': + token = FMT_DC; + break; + default: + token = FMT_D; + unget_char (fmt); + break; + } + break; + + case -1: + token = FMT_END; + break; + + default: + token = FMT_UNKNOWN; + break; + } + + return token; +} + + +/* parse_format_list()-- Parse a format list. Assumes that a left + * paren has already been seen. Returns a list representing the + * parenthesis node which contains the rest of the list. */ + +static fnode * +parse_format_list (st_parameter_dt *dtp) +{ + fnode *head, *tail; + format_token t, u, t2; + int repeat; + format_data *fmt = dtp->u.p.fmt; + + head = tail = NULL; + + /* Get the next format item */ + format_item: + t = format_lex (fmt); + format_item_1: + switch (t) + { + case FMT_POSINT: + repeat = fmt->value; + + t = format_lex (fmt); + switch (t) + { + case FMT_LPAREN: + get_fnode (fmt, &head, &tail, FMT_LPAREN); + tail->repeat = repeat; + tail->u.child = parse_format_list (dtp); + if (fmt->error != NULL) + goto finished; + + goto between_desc; + + case FMT_SLASH: + get_fnode (fmt, &head, &tail, FMT_SLASH); + tail->repeat = repeat; + goto optional_comma; + + case FMT_X: + get_fnode (fmt, &head, &tail, FMT_X); + tail->repeat = 1; + tail->u.k = fmt->value; + goto between_desc; + + case FMT_P: + goto p_descriptor; + + default: + goto data_desc; + } + + case FMT_LPAREN: + get_fnode (fmt, &head, &tail, FMT_LPAREN); + tail->repeat = 1; + tail->u.child = parse_format_list (dtp); + if (fmt->error != NULL) + goto finished; + + goto between_desc; + + case FMT_SIGNED_INT: /* Signed integer can only precede a P format. */ + case FMT_ZERO: /* Same for zero. */ + t = format_lex (fmt); + if (t != FMT_P) + { + fmt->error = "Expected P edit descriptor in format"; + goto finished; + } + + p_descriptor: + get_fnode (fmt, &head, &tail, FMT_P); + tail->u.k = fmt->value; + tail->repeat = 1; + + t = format_lex (fmt); + if (t == FMT_F || t == FMT_EN || t == FMT_ES || t == FMT_D + || t == FMT_G || t == FMT_E) + { + repeat = 1; + goto data_desc; + } + + fmt->saved_token = t; + goto optional_comma; + + case FMT_P: /* P and X require a prior number */ + fmt->error = "P descriptor requires leading scale factor"; + goto finished; + + case FMT_X: +/* + EXTENSION! + + If we would be pedantic in the library, we would have to reject + an X descriptor without an integer prefix: + + fmt->error = "X descriptor requires leading space count"; + goto finished; + + However, this is an extension supported by many Fortran compilers, + including Cray, HP, AIX, and IRIX. Therefore, we allow it in the + runtime library, and make the front end reject it if the compiler + is in pedantic mode. The interpretation of 'X' is '1X'. +*/ + get_fnode (fmt, &head, &tail, FMT_X); + tail->repeat = 1; + tail->u.k = 1; + goto between_desc; + + case FMT_STRING: + get_fnode (fmt, &head, &tail, FMT_STRING); + + tail->u.string.p = fmt->string; + tail->u.string.length = fmt->value; + tail->repeat = 1; + goto optional_comma; + + case FMT_DC: + case FMT_DP: + notify_std (&dtp->common, GFC_STD_F2003, "Fortran 2003: DC or DP " + "descriptor not allowed"); + /* Fall through. */ + case FMT_S: + case FMT_SS: + case FMT_SP: + case FMT_BN: + case FMT_BZ: + get_fnode (fmt, &head, &tail, t); + tail->repeat = 1; + goto between_desc; + + case FMT_COLON: + get_fnode (fmt, &head, &tail, FMT_COLON); + tail->repeat = 1; + goto optional_comma; + + case FMT_SLASH: + get_fnode (fmt, &head, &tail, FMT_SLASH); + tail->repeat = 1; + tail->u.r = 1; + goto optional_comma; + + case FMT_DOLLAR: + get_fnode (fmt, &head, &tail, FMT_DOLLAR); + tail->repeat = 1; + notify_std (&dtp->common, GFC_STD_GNU, "Extension: $ descriptor"); + goto between_desc; + + + case FMT_T: + case FMT_TL: + case FMT_TR: + t2 = format_lex (fmt); + if (t2 != FMT_POSINT) + { + fmt->error = posint_required; + goto finished; + } + get_fnode (fmt, &head, &tail, t); + tail->u.n = fmt->value; + tail->repeat = 1; + goto between_desc; + + case FMT_I: + case FMT_B: + case FMT_O: + case FMT_Z: + case FMT_E: + case FMT_EN: + case FMT_ES: + case FMT_D: + case FMT_L: + case FMT_A: + case FMT_F: + case FMT_G: + repeat = 1; + goto data_desc; + + case FMT_H: + get_fnode (fmt, &head, &tail, FMT_STRING); + + if (fmt->format_string_len < 1) + { + fmt->error = bad_hollerith; + goto finished; + } + + tail->u.string.p = fmt->format_string; + tail->u.string.length = 1; + tail->repeat = 1; + + fmt->format_string++; + fmt->format_string_len--; + + goto between_desc; + + case FMT_END: + fmt->error = unexpected_end; + goto finished; + + case FMT_BADSTRING: + goto finished; + + case FMT_RPAREN: + goto finished; + + default: + fmt->error = unexpected_element; + goto finished; + } + + /* In this state, t must currently be a data descriptor. Deal with + things that can/must follow the descriptor */ + data_desc: + switch (t) + { + case FMT_P: + t = format_lex (fmt); + if (t == FMT_POSINT) + { + fmt->error = "Repeat count cannot follow P descriptor"; + goto finished; + } + + fmt->saved_token = t; + get_fnode (fmt, &head, &tail, FMT_P); + + goto optional_comma; + + case FMT_L: + t = format_lex (fmt); + if (t != FMT_POSINT) + { + if (notification_std(GFC_STD_GNU) == ERROR) + { + fmt->error = posint_required; + goto finished; + } + else + { + fmt->saved_token = t; + fmt->value = 1; /* Default width */ + notify_std (&dtp->common, GFC_STD_GNU, posint_required); + } + } + + get_fnode (fmt, &head, &tail, FMT_L); + tail->u.n = fmt->value; + tail->repeat = repeat; + break; + + case FMT_A: + t = format_lex (fmt); + if (t == FMT_ZERO) + { + fmt->error = zero_width; + goto finished; + } + + if (t != FMT_POSINT) + { + fmt->saved_token = t; + fmt->value = -1; /* Width not present */ + } + + get_fnode (fmt, &head, &tail, FMT_A); + tail->repeat = repeat; + tail->u.n = fmt->value; + break; + + case FMT_D: + case FMT_E: + case FMT_F: + case FMT_G: + case FMT_EN: + case FMT_ES: + get_fnode (fmt, &head, &tail, t); + tail->repeat = repeat; + + u = format_lex (fmt); + if (t == FMT_G && u == FMT_ZERO) + { + if (notification_std (GFC_STD_F2008) == ERROR + || dtp->u.p.mode == READING) + { + fmt->error = zero_width; + goto finished; + } + tail->u.real.w = 0; + u = format_lex (fmt); + if (u != FMT_PERIOD) + { + fmt->saved_token = u; + break; + } + + u = format_lex (fmt); + if (u != FMT_POSINT) + { + fmt->error = posint_required; + goto finished; + } + tail->u.real.d = fmt->value; + break; + } + if (t == FMT_F || dtp->u.p.mode == WRITING) + { + if (u != FMT_POSINT && u != FMT_ZERO) + { + fmt->error = nonneg_required; + goto finished; + } + } + else + { + if (u != FMT_POSINT) + { + fmt->error = posint_required; + goto finished; + } + } + + tail->u.real.w = fmt->value; + t2 = t; + t = format_lex (fmt); + if (t != FMT_PERIOD) + { + /* We treat a missing decimal descriptor as 0. Note: This is only + allowed if -std=legacy, otherwise an error occurs. */ + if (compile_options.warn_std != 0) + { + fmt->error = period_required; + goto finished; + } + fmt->saved_token = t; + tail->u.real.d = 0; + break; + } + + t = format_lex (fmt); + if (t != FMT_ZERO && t != FMT_POSINT) + { + fmt->error = nonneg_required; + goto finished; + } + + tail->u.real.d = fmt->value; + + if (t == FMT_D || t == FMT_F) + break; + + tail->u.real.e = -1; + + /* Look for optional exponent */ + t = format_lex (fmt); + if (t != FMT_E) + fmt->saved_token = t; + else + { + t = format_lex (fmt); + if (t != FMT_POSINT) + { + fmt->error = "Positive exponent width required in format"; + goto finished; + } + + tail->u.real.e = fmt->value; + } + + break; + + case FMT_H: + if (repeat > fmt->format_string_len) + { + fmt->error = bad_hollerith; + goto finished; + } + + get_fnode (fmt, &head, &tail, FMT_STRING); + + tail->u.string.p = fmt->format_string; + tail->u.string.length = repeat; + tail->repeat = 1; + + fmt->format_string += fmt->value; + fmt->format_string_len -= repeat; + + break; + + case FMT_I: + case FMT_B: + case FMT_O: + case FMT_Z: + get_fnode (fmt, &head, &tail, t); + tail->repeat = repeat; + + t = format_lex (fmt); + + if (dtp->u.p.mode == READING) + { + if (t != FMT_POSINT) + { + fmt->error = posint_required; + goto finished; + } + } + else + { + if (t != FMT_ZERO && t != FMT_POSINT) + { + fmt->error = nonneg_required; + goto finished; + } + } + + tail->u.integer.w = fmt->value; + tail->u.integer.m = -1; + + t = format_lex (fmt); + if (t != FMT_PERIOD) + { + fmt->saved_token = t; + } + else + { + t = format_lex (fmt); + if (t != FMT_ZERO && t != FMT_POSINT) + { + fmt->error = nonneg_required; + goto finished; + } + + tail->u.integer.m = fmt->value; + } + + if (tail->u.integer.w != 0 && tail->u.integer.m > tail->u.integer.w) + { + fmt->error = "Minimum digits exceeds field width"; + goto finished; + } + + break; + + default: + fmt->error = unexpected_element; + goto finished; + } + + /* Between a descriptor and what comes next */ + between_desc: + t = format_lex (fmt); + switch (t) + { + case FMT_COMMA: + goto format_item; + + case FMT_RPAREN: + goto finished; + + case FMT_SLASH: + case FMT_COLON: + get_fnode (fmt, &head, &tail, t); + tail->repeat = 1; + goto optional_comma; + + case FMT_END: + fmt->error = unexpected_end; + goto finished; + + default: + /* Assume a missing comma, this is a GNU extension */ + goto format_item_1; + } + + /* Optional comma is a weird between state where we've just finished + reading a colon, slash or P descriptor. */ + optional_comma: + t = format_lex (fmt); + switch (t) + { + case FMT_COMMA: + break; + + case FMT_RPAREN: + goto finished; + + default: /* Assume that we have another format item */ + fmt->saved_token = t; + break; + } + + goto format_item; + + finished: + return head; +} + + +/* format_error()-- Generate an error message for a format statement. + * If the node that gives the location of the error is NULL, the error + * is assumed to happen at parse time, and the current location of the + * parser is shown. + * + * We generate a message showing where the problem is. We take extra + * care to print only the relevant part of the format if it is longer + * than a standard 80 column display. */ + +void +format_error (st_parameter_dt *dtp, const fnode *f, const char *message) +{ + int width, i, j, offset; + char *p, buffer[300]; + format_data *fmt = dtp->u.p.fmt; + + if (f != NULL) + fmt->format_string = f->source; + + if (message == unexpected_element) + sprintf (buffer, message, fmt->error_element); + else + sprintf (buffer, "%s\n", message); + + j = fmt->format_string - dtp->format; + + offset = (j > 60) ? j - 40 : 0; + + j -= offset; + width = dtp->format_len - offset; + + if (width > 80) + width = 80; + + /* Show the format */ + + p = strchr (buffer, '\0'); + + memcpy (p, dtp->format + offset, width); + + p += width; + *p++ = '\n'; + + /* Show where the problem is */ + + for (i = 1; i < j; i++) + *p++ = ' '; + + *p++ = '^'; + *p = '\0'; + + generate_error (&dtp->common, LIBERROR_FORMAT, buffer); +} + + +/* parse_format()-- Parse a format string. */ + +void +parse_format (st_parameter_dt *dtp) +{ + format_data *fmt; + + dtp->u.p.fmt = fmt = get_mem (sizeof (format_data)); + fmt->format_string = dtp->format; + fmt->format_string_len = dtp->format_len; + + fmt->string = NULL; + fmt->saved_token = FMT_NONE; + fmt->error = NULL; + fmt->value = 0; + + /* Initialize variables used during traversal of the tree */ + + fmt->reversion_ok = 0; + fmt->saved_format = NULL; + + /* Allocate the first format node as the root of the tree */ + + fmt->last = &fmt->array; + fmt->last->next = NULL; + fmt->avail = &fmt->array.array[0]; + + memset (fmt->avail, 0, sizeof (*fmt->avail)); + fmt->avail->format = FMT_LPAREN; + fmt->avail->repeat = 1; + fmt->avail++; + + if (format_lex (fmt) == FMT_LPAREN) + fmt->array.array[0].u.child = parse_format_list (dtp); + else + fmt->error = "Missing initial left parenthesis in format"; + + if (fmt->error) + format_error (dtp, NULL, fmt->error); +} + + +/* revert()-- Do reversion of the format. Control reverts to the left + * parenthesis that matches the rightmost right parenthesis. From our + * tree structure, we are looking for the rightmost parenthesis node + * at the second level, the first level always being a single + * parenthesis node. If this node doesn't exit, we use the top + * level. */ + +static void +revert (st_parameter_dt *dtp) +{ + fnode *f, *r; + format_data *fmt = dtp->u.p.fmt; + + dtp->u.p.reversion_flag = 1; + + r = NULL; + + for (f = fmt->array.array[0].u.child; f; f = f->next) + if (f->format == FMT_LPAREN) + r = f; + + /* If r is NULL because no node was found, the whole tree will be used */ + + fmt->array.array[0].current = r; + fmt->array.array[0].count = 0; +} + + +/* next_format0()-- Get the next format node without worrying about + * reversion. Returns NULL when we hit the end of the list. + * Parenthesis nodes are incremented after the list has been + * exhausted, other nodes are incremented before they are returned. */ + +static const fnode * +next_format0 (fnode * f) +{ + const fnode *r; + + if (f == NULL) + return NULL; + + if (f->format != FMT_LPAREN) + { + f->count++; + if (f->count <= f->repeat) + return f; + + f->count = 0; + return NULL; + } + + /* Deal with a parenthesis node */ + + for (; f->count < f->repeat; f->count++) + { + if (f->current == NULL) + f->current = f->u.child; + + for (; f->current != NULL; f->current = f->current->next) + { + r = next_format0 (f->current); + if (r != NULL) + return r; + } + } + + f->count = 0; + return NULL; +} + + +/* next_format()-- Return the next format node. If the format list + * ends up being exhausted, we do reversion. Reversion is only + * allowed if we've seen a data descriptor since the + * initialization or the last reversion. We return NULL if there + * are no more data descriptors to return (which is an error + * condition). */ + +const fnode * +next_format (st_parameter_dt *dtp) +{ + format_token t; + const fnode *f; + format_data *fmt = dtp->u.p.fmt; + + if (fmt->saved_format != NULL) + { /* Deal with a pushed-back format node */ + f = fmt->saved_format; + fmt->saved_format = NULL; + goto done; + } + + f = next_format0 (&fmt->array.array[0]); + if (f == NULL) + { + if (!fmt->reversion_ok) + return NULL; + + fmt->reversion_ok = 0; + revert (dtp); + + f = next_format0 (&fmt->array.array[0]); + if (f == NULL) + { + format_error (dtp, NULL, reversion_error); + return NULL; + } + + /* Push the first reverted token and return a colon node in case + * there are no more data items. */ + + fmt->saved_format = f; + return &colon_node; + } + + /* If this is a data edit descriptor, then reversion has become OK. */ + done: + t = f->format; + + if (!fmt->reversion_ok && + (t == FMT_I || t == FMT_B || t == FMT_O || t == FMT_Z || t == FMT_F || + t == FMT_E || t == FMT_EN || t == FMT_ES || t == FMT_G || t == FMT_L || + t == FMT_A || t == FMT_D)) + fmt->reversion_ok = 1; + return f; +} + + +/* unget_format()-- Push the given format back so that it will be + * returned on the next call to next_format() without affecting + * counts. This is necessary when we've encountered a data + * descriptor, but don't know what the data item is yet. The format + * node is pushed back, and we return control to the main program, + * which calls the library back with the data item (or not). */ + +void +unget_format (st_parameter_dt *dtp, const fnode *f) +{ + dtp->u.p.fmt->saved_format = f; +} + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/inquire.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/inquire.c new file mode 100644 index 0000000000..015b68a26f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/inquire.c @@ -0,0 +1,661 @@ +/* Copyright (C) 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +/* Implement the non-IOLENGTH variant of the INQUIRY statement */ + +#include "io.h" + + +static const char undefined[] = "UNDEFINED"; + + +/* inquire_via_unit()-- Inquiry via unit number. The unit might not exist. */ + +static void +inquire_via_unit (st_parameter_inquire *iqp, gfc_unit * u) +{ + const char *p; + GFC_INTEGER_4 cf = iqp->common.flags; + + if ((cf & IOPARM_INQUIRE_HAS_EXIST) != 0) + { + *iqp->exist = (iqp->common.unit >= 0 + && iqp->common.unit <= GFC_INTEGER_4_HUGE); + + if ((cf & IOPARM_INQUIRE_HAS_FILE) == 0) + { + if (!(*iqp->exist)) + *iqp->common.iostat = LIBERROR_BAD_UNIT; + *iqp->exist = *iqp->exist + && (*iqp->common.iostat != LIBERROR_BAD_UNIT); + } + } + + if ((cf & IOPARM_INQUIRE_HAS_OPENED) != 0) + *iqp->opened = (u != NULL); + + if ((cf & IOPARM_INQUIRE_HAS_NUMBER) != 0) + *iqp->number = (u != NULL) ? u->unit_number : -1; + + if ((cf & IOPARM_INQUIRE_HAS_NAMED) != 0) + *iqp->named = (u != NULL && u->flags.status != STATUS_SCRATCH); + + if ((cf & IOPARM_INQUIRE_HAS_NAME) != 0 + && u != NULL && u->flags.status != STATUS_SCRATCH) + fstrcpy (iqp->name, iqp->name_len, u->file, u->file_len); + + if ((cf & IOPARM_INQUIRE_HAS_ACCESS) != 0) + { + if (u == NULL) + p = undefined; + else + switch (u->flags.access) + { + case ACCESS_SEQUENTIAL: + p = "SEQUENTIAL"; + break; + case ACCESS_DIRECT: + p = "DIRECT"; + break; + case ACCESS_STREAM: + p = "STREAM"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad access"); + } + + cf_strcpy (iqp->access, iqp->access_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_SEQUENTIAL) != 0) + { + if (u == NULL) + p = inquire_sequential (NULL, 0); + else + switch (u->flags.access) + { + case ACCESS_DIRECT: + case ACCESS_STREAM: + p = "NO"; + break; + case ACCESS_SEQUENTIAL: + p = "YES"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad access"); + } + + cf_strcpy (iqp->sequential, iqp->sequential_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_DIRECT) != 0) + { + if (u == NULL) + p = inquire_direct (NULL, 0); + else + switch (u->flags.access) + { + case ACCESS_SEQUENTIAL: + case ACCESS_STREAM: + p = "NO"; + break; + case ACCESS_DIRECT: + p = "YES"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad access"); + } + + cf_strcpy (iqp->direct, iqp->direct_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_FORM) != 0) + { + if (u == NULL) + p = undefined; + else + switch (u->flags.form) + { + case FORM_FORMATTED: + p = "FORMATTED"; + break; + case FORM_UNFORMATTED: + p = "UNFORMATTED"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad form"); + } + + cf_strcpy (iqp->form, iqp->form_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_FORMATTED) != 0) + { + if (u == NULL) + p = inquire_formatted (NULL, 0); + else + switch (u->flags.form) + { + case FORM_FORMATTED: + p = "YES"; + break; + case FORM_UNFORMATTED: + p = "NO"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad form"); + } + + cf_strcpy (iqp->formatted, iqp->formatted_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_UNFORMATTED) != 0) + { + if (u == NULL) + p = inquire_unformatted (NULL, 0); + else + switch (u->flags.form) + { + case FORM_FORMATTED: + p = "NO"; + break; + case FORM_UNFORMATTED: + p = "YES"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad form"); + } + + cf_strcpy (iqp->unformatted, iqp->unformatted_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_RECL_OUT) != 0) + *iqp->recl_out = (u != NULL) ? u->recl : 0; + + if ((cf & IOPARM_INQUIRE_HAS_STRM_POS_OUT) != 0) + *iqp->strm_pos_out = (u != NULL) ? u->strm_pos : 0; + + if ((cf & IOPARM_INQUIRE_HAS_NEXTREC) != 0) + { + /* This only makes sense in the context of DIRECT access. */ + if (u != NULL && u->flags.access == ACCESS_DIRECT) + *iqp->nextrec = u->last_record + 1; + else + *iqp->nextrec = 0; + } + + if ((cf & IOPARM_INQUIRE_HAS_BLANK) != 0) + { + if (u == NULL || u->flags.form != FORM_FORMATTED) + p = undefined; + else + switch (u->flags.blank) + { + case BLANK_NULL: + p = "NULL"; + break; + case BLANK_ZERO: + p = "ZERO"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad blank"); + } + + cf_strcpy (iqp->blank, iqp->blank_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_PAD) != 0) + { + if (u == NULL || u->flags.form != FORM_FORMATTED) + p = undefined; + else + switch (u->flags.pad) + { + case PAD_YES: + p = "YES"; + break; + case PAD_NO: + p = "NO"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad pad"); + } + + cf_strcpy (iqp->pad, iqp->pad_len, p); + } + + if (cf & IOPARM_INQUIRE_HAS_FLAGS2) + { + GFC_INTEGER_4 cf2 = iqp->flags2; + + if ((cf2 & IOPARM_INQUIRE_HAS_PENDING) != 0) + *iqp->pending = 0; + + if ((cf2 & IOPARM_INQUIRE_HAS_ID) != 0) + *iqp->id = 0; + + if ((cf2 & IOPARM_INQUIRE_HAS_ENCODING) != 0) + { + if (u == NULL || u->flags.form != FORM_FORMATTED) + p = undefined; + else + switch (u->flags.encoding) + { + case ENCODING_DEFAULT: + p = "UNKNOWN"; + break; + case ENCODING_UTF8: + p = "UTF-8"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad encoding"); + } + + cf_strcpy (iqp->encoding, iqp->encoding_len, p); + } + + if ((cf2 & IOPARM_INQUIRE_HAS_DECIMAL) != 0) + { + if (u == NULL || u->flags.form != FORM_FORMATTED) + p = undefined; + else + switch (u->flags.decimal) + { + case DECIMAL_POINT: + p = "POINT"; + break; + case DECIMAL_COMMA: + p = "COMMA"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad comma"); + } + + cf_strcpy (iqp->decimal, iqp->decimal_len, p); + } + + if ((cf2 & IOPARM_INQUIRE_HAS_ASYNCHRONOUS) != 0) + { + if (u == NULL) + p = undefined; + else + switch (u->flags.async) + { + case ASYNC_YES: + p = "YES"; + break; + case ASYNC_NO: + p = "NO"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad async"); + } + + cf_strcpy (iqp->asynchronous, iqp->asynchronous_len, p); + } + + if ((cf2 & IOPARM_INQUIRE_HAS_SIGN) != 0) + { + if (u == NULL) + p = undefined; + else + switch (u->flags.sign) + { + case SIGN_PROCDEFINED: + p = "PROCESSOR_DEFINED"; + break; + case SIGN_SUPPRESS: + p = "SUPPRESS"; + break; + case SIGN_PLUS: + p = "PLUS"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad sign"); + } + + cf_strcpy (iqp->sign, iqp->sign_len, p); + } + + if ((cf2 & IOPARM_INQUIRE_HAS_ROUND) != 0) + { + if (u == NULL) + p = undefined; + else + switch (u->flags.round) + { + case ROUND_UP: + p = "UP"; + break; + case ROUND_DOWN: + p = "DOWN"; + break; + case ROUND_ZERO: + p = "ZERO"; + break; + case ROUND_NEAREST: + p = "NEAREST"; + break; + case ROUND_COMPATIBLE: + p = "COMPATIBLE"; + break; + case ROUND_PROCDEFINED: + p = "PROCESSOR_DEFINED"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad round"); + } + + cf_strcpy (iqp->round, iqp->round_len, p); + } + } + + if ((cf & IOPARM_INQUIRE_HAS_POSITION) != 0) + { + if (u == NULL || u->flags.access == ACCESS_DIRECT) + p = undefined; + else + switch (u->flags.position) + { + case POSITION_REWIND: + p = "REWIND"; + break; + case POSITION_APPEND: + p = "APPEND"; + break; + case POSITION_ASIS: + p = "ASIS"; + break; + default: + /* if not direct access, it must be + either REWIND, APPEND, or ASIS. + ASIS seems to be the best default */ + p = "ASIS"; + break; + } + cf_strcpy (iqp->position, iqp->position_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_ACTION) != 0) + { + if (u == NULL) + p = undefined; + else + switch (u->flags.action) + { + case ACTION_READ: + p = "READ"; + break; + case ACTION_WRITE: + p = "WRITE"; + break; + case ACTION_READWRITE: + p = "READWRITE"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad action"); + } + + cf_strcpy (iqp->action, iqp->action_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_READ) != 0) + { + p = (u == NULL) ? inquire_read (NULL, 0) : + inquire_read (u->file, u->file_len); + + cf_strcpy (iqp->read, iqp->read_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_WRITE) != 0) + { + p = (u == NULL) ? inquire_write (NULL, 0) : + inquire_write (u->file, u->file_len); + + cf_strcpy (iqp->write, iqp->write_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_READWRITE) != 0) + { + p = (u == NULL) ? inquire_readwrite (NULL, 0) : + inquire_readwrite (u->file, u->file_len); + + cf_strcpy (iqp->readwrite, iqp->readwrite_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_DELIM) != 0) + { + if (u == NULL || u->flags.form != FORM_FORMATTED) + p = undefined; + else + switch (u->flags.delim) + { + case DELIM_NONE: + p = "NONE"; + break; + case DELIM_QUOTE: + p = "QUOTE"; + break; + case DELIM_APOSTROPHE: + p = "APOSTROPHE"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad delim"); + } + + cf_strcpy (iqp->delim, iqp->delim_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_PAD) != 0) + { + if (u == NULL || u->flags.form != FORM_FORMATTED) + p = undefined; + else + switch (u->flags.pad) + { + case PAD_NO: + p = "NO"; + break; + case PAD_YES: + p = "YES"; + break; + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad pad"); + } + + cf_strcpy (iqp->pad, iqp->pad_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_CONVERT) != 0) + { + if (u == NULL) + p = undefined; + else + switch (u->flags.convert) + { + /* big_endian is 0 for little-endian, 1 for big-endian. */ + case GFC_CONVERT_NATIVE: + p = big_endian ? "BIG_ENDIAN" : "LITTLE_ENDIAN"; + break; + + case GFC_CONVERT_SWAP: + p = big_endian ? "LITTLE_ENDIAN" : "BIG_ENDIAN"; + break; + + default: + internal_error (&iqp->common, "inquire_via_unit(): Bad convert"); + } + + cf_strcpy (iqp->convert, iqp->convert_len, p); + } +} + + +/* inquire_via_filename()-- Inquiry via filename. This subroutine is + * only used if the filename is *not* connected to a unit number. */ + +static void +inquire_via_filename (st_parameter_inquire *iqp) +{ + const char *p; + GFC_INTEGER_4 cf = iqp->common.flags; + + if ((cf & IOPARM_INQUIRE_HAS_EXIST) != 0) + *iqp->exist = file_exists (iqp->file, iqp->file_len); + + if ((cf & IOPARM_INQUIRE_HAS_OPENED) != 0) + *iqp->opened = 0; + + if ((cf & IOPARM_INQUIRE_HAS_NUMBER) != 0) + *iqp->number = -1; + + if ((cf & IOPARM_INQUIRE_HAS_NAMED) != 0) + *iqp->named = 1; + + if ((cf & IOPARM_INQUIRE_HAS_NAME) != 0) + fstrcpy (iqp->name, iqp->name_len, iqp->file, iqp->file_len); + + if ((cf & IOPARM_INQUIRE_HAS_ACCESS) != 0) + cf_strcpy (iqp->access, iqp->access_len, undefined); + + if ((cf & IOPARM_INQUIRE_HAS_SEQUENTIAL) != 0) + { + p = "UNKNOWN"; + cf_strcpy (iqp->sequential, iqp->sequential_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_DIRECT) != 0) + { + p = "UNKNOWN"; + cf_strcpy (iqp->direct, iqp->direct_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_FORM) != 0) + cf_strcpy (iqp->form, iqp->form_len, undefined); + + if ((cf & IOPARM_INQUIRE_HAS_FORMATTED) != 0) + { + p = "UNKNOWN"; + cf_strcpy (iqp->formatted, iqp->formatted_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_UNFORMATTED) != 0) + { + p = "UNKNOWN"; + cf_strcpy (iqp->unformatted, iqp->unformatted_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_RECL_OUT) != 0) + *iqp->recl_out = 0; + + if ((cf & IOPARM_INQUIRE_HAS_NEXTREC) != 0) + *iqp->nextrec = 0; + + if ((cf & IOPARM_INQUIRE_HAS_BLANK) != 0) + cf_strcpy (iqp->blank, iqp->blank_len, undefined); + + if ((cf & IOPARM_INQUIRE_HAS_PAD) != 0) + cf_strcpy (iqp->pad, iqp->pad_len, undefined); + + if (cf & IOPARM_INQUIRE_HAS_FLAGS2) + { + GFC_INTEGER_4 cf2 = iqp->flags2; + + if ((cf2 & IOPARM_INQUIRE_HAS_ENCODING) != 0) + cf_strcpy (iqp->encoding, iqp->encoding_len, undefined); + + if ((cf2 & IOPARM_INQUIRE_HAS_DELIM) != 0) + cf_strcpy (iqp->delim, iqp->delim_len, undefined); + + if ((cf2 & IOPARM_INQUIRE_HAS_DECIMAL) != 0) + cf_strcpy (iqp->decimal, iqp->decimal_len, undefined); + + if ((cf2 & IOPARM_INQUIRE_HAS_DELIM) != 0) + cf_strcpy (iqp->delim, iqp->delim_len, undefined); + + if ((cf2 & IOPARM_INQUIRE_HAS_PAD) != 0) + cf_strcpy (iqp->pad, iqp->pad_len, undefined); + + if ((cf2 & IOPARM_INQUIRE_HAS_ENCODING) != 0) + cf_strcpy (iqp->encoding, iqp->encoding_len, undefined); + } + + if ((cf & IOPARM_INQUIRE_HAS_POSITION) != 0) + cf_strcpy (iqp->position, iqp->position_len, undefined); + + if ((cf & IOPARM_INQUIRE_HAS_ACCESS) != 0) + cf_strcpy (iqp->access, iqp->access_len, undefined); + + if ((cf & IOPARM_INQUIRE_HAS_READ) != 0) + { + p = inquire_read (iqp->file, iqp->file_len); + cf_strcpy (iqp->read, iqp->read_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_WRITE) != 0) + { + p = inquire_write (iqp->file, iqp->file_len); + cf_strcpy (iqp->write, iqp->write_len, p); + } + + if ((cf & IOPARM_INQUIRE_HAS_READWRITE) != 0) + { + p = inquire_read (iqp->file, iqp->file_len); + cf_strcpy (iqp->readwrite, iqp->readwrite_len, p); + } +} + + +/* Library entry point for the INQUIRE statement (non-IOLENGTH + form). */ + +extern void st_inquire (st_parameter_inquire *); +export_proto(st_inquire); + +void +st_inquire (st_parameter_inquire *iqp) +{ + gfc_unit *u; + + library_start (&iqp->common); + + if ((iqp->common.flags & IOPARM_INQUIRE_HAS_FILE) == 0) + { + u = find_unit (iqp->common.unit); + inquire_via_unit (iqp, u); + } + else + { + u = find_file (iqp->file, iqp->file_len); + if (u == NULL) + inquire_via_filename (iqp); + else + inquire_via_unit (iqp, u); + } + if (u != NULL) + unlock_unit (u); + + library_end (); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/intrinsics.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/intrinsics.c new file mode 100644 index 0000000000..e460ad04ae --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/intrinsics.c @@ -0,0 +1,387 @@ +/* Implementation of the FGET, FGETC, FPUT, FPUTC, FLUSH + FTELL, TTYNAM and ISATTY intrinsics. + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "io.h" + +#ifdef HAVE_STDLIB_H +#include +#endif + +#include + +static const int five = 5; +static const int six = 6; + +extern int PREFIX(fgetc) (const int *, char *, gfc_charlen_type); +export_proto_np(PREFIX(fgetc)); + +int +PREFIX(fgetc) (const int * unit, char * c, gfc_charlen_type c_len) +{ + int ret; + size_t s; + gfc_unit * u = find_unit (*unit); + + if (u == NULL) + return -1; + + s = 1; + memset (c, ' ', c_len); + ret = sread (u->s, c, &s); + unlock_unit (u); + + if (ret != 0) + return ret; + + if (s != 1) + return -1; + else + return 0; +} + + +#define FGETC_SUB(kind) \ + extern void fgetc_i ## kind ## _sub \ + (const int *, char *, GFC_INTEGER_ ## kind *, gfc_charlen_type); \ + export_proto(fgetc_i ## kind ## _sub); \ + void fgetc_i ## kind ## _sub \ + (const int * unit, char * c, GFC_INTEGER_ ## kind * st, gfc_charlen_type c_len) \ + { if (st != NULL) \ + *st = PREFIX(fgetc) (unit, c, c_len); \ + else \ + PREFIX(fgetc) (unit, c, c_len); } + +FGETC_SUB(1) +FGETC_SUB(2) +FGETC_SUB(4) +FGETC_SUB(8) + + +extern int PREFIX(fget) (char *, gfc_charlen_type); +export_proto_np(PREFIX(fget)); + +int +PREFIX(fget) (char * c, gfc_charlen_type c_len) +{ + return PREFIX(fgetc) (&five, c, c_len); +} + + +#define FGET_SUB(kind) \ + extern void fget_i ## kind ## _sub \ + (char *, GFC_INTEGER_ ## kind *, gfc_charlen_type); \ + export_proto(fget_i ## kind ## _sub); \ + void fget_i ## kind ## _sub \ + (char * c, GFC_INTEGER_ ## kind * st, gfc_charlen_type c_len) \ + { if (st != NULL) \ + *st = PREFIX(fgetc) (&five, c, c_len); \ + else \ + PREFIX(fgetc) (&five, c, c_len); } + +FGET_SUB(1) +FGET_SUB(2) +FGET_SUB(4) +FGET_SUB(8) + + + +extern int PREFIX(fputc) (const int *, char *, gfc_charlen_type); +export_proto_np(PREFIX(fputc)); + +int +PREFIX(fputc) (const int * unit, char * c, + gfc_charlen_type c_len __attribute__((unused))) +{ + size_t s; + int ret; + gfc_unit * u = find_unit (*unit); + + if (u == NULL) + return -1; + + s = 1; + ret = swrite (u->s, c, &s); + unlock_unit (u); + return ret; +} + + +#define FPUTC_SUB(kind) \ + extern void fputc_i ## kind ## _sub \ + (const int *, char *, GFC_INTEGER_ ## kind *, gfc_charlen_type); \ + export_proto(fputc_i ## kind ## _sub); \ + void fputc_i ## kind ## _sub \ + (const int * unit, char * c, GFC_INTEGER_ ## kind * st, gfc_charlen_type c_len) \ + { if (st != NULL) \ + *st = PREFIX(fputc) (unit, c, c_len); \ + else \ + PREFIX(fputc) (unit, c, c_len); } + +FPUTC_SUB(1) +FPUTC_SUB(2) +FPUTC_SUB(4) +FPUTC_SUB(8) + + +extern int PREFIX(fput) (char *, gfc_charlen_type); +export_proto_np(PREFIX(fput)); + +int +PREFIX(fput) (char * c, gfc_charlen_type c_len) +{ + return PREFIX(fputc) (&six, c, c_len); +} + + +#define FPUT_SUB(kind) \ + extern void fput_i ## kind ## _sub \ + (char *, GFC_INTEGER_ ## kind *, gfc_charlen_type); \ + export_proto(fput_i ## kind ## _sub); \ + void fput_i ## kind ## _sub \ + (char * c, GFC_INTEGER_ ## kind * st, gfc_charlen_type c_len) \ + { if (st != NULL) \ + *st = PREFIX(fputc) (&six, c, c_len); \ + else \ + PREFIX(fputc) (&six, c, c_len); } + +FPUT_SUB(1) +FPUT_SUB(2) +FPUT_SUB(4) +FPUT_SUB(8) + + +/* SUBROUTINE FLUSH(UNIT) + INTEGER, INTENT(IN), OPTIONAL :: UNIT */ + +extern void flush_i4 (GFC_INTEGER_4 *); +export_proto(flush_i4); + +void +flush_i4 (GFC_INTEGER_4 *unit) +{ + gfc_unit *us; + + /* flush all streams */ + if (unit == NULL) + flush_all_units (); + else + { + us = find_unit (*unit); + if (us != NULL) + { + flush (us->s); + unlock_unit (us); + } + } +} + + +extern void flush_i8 (GFC_INTEGER_8 *); +export_proto(flush_i8); + +void +flush_i8 (GFC_INTEGER_8 *unit) +{ + gfc_unit *us; + + /* flush all streams */ + if (unit == NULL) + flush_all_units (); + else + { + us = find_unit (*unit); + if (us != NULL) + { + flush (us->s); + unlock_unit (us); + } + } +} + +/* FSEEK intrinsic */ + +extern void fseek_sub (int *, GFC_IO_INT *, int *, int *); +export_proto(fseek_sub); + +void +fseek_sub (int * unit, GFC_IO_INT * offset, int * whence, int * status) +{ + gfc_unit * u = find_unit (*unit); + try result = FAILURE; + + if (u != NULL && is_seekable(u->s)) + { + if (*whence == 0) + result = sseek(u->s, *offset); /* SEEK_SET */ + else if (*whence == 1) + result = sseek(u->s, file_position(u->s) + *offset); /* SEEK_CUR */ + else if (*whence == 2) + result = sseek(u->s, file_length(u->s) + *offset); /* SEEK_END */ + + unlock_unit (u); + } + + if (status) + *status = (result == FAILURE ? -1 : 0); +} + + + +/* FTELL intrinsic */ + +extern size_t PREFIX(ftell) (int *); +export_proto_np(PREFIX(ftell)); + +size_t +PREFIX(ftell) (int * unit) +{ + gfc_unit * u = find_unit (*unit); + size_t ret; + if (u == NULL) + return ((size_t) -1); + ret = (size_t) stream_offset (u->s); + unlock_unit (u); + return ret; +} + +#define FTELL_SUB(kind) \ + extern void ftell_i ## kind ## _sub (int *, GFC_INTEGER_ ## kind *); \ + export_proto(ftell_i ## kind ## _sub); \ + void \ + ftell_i ## kind ## _sub (int * unit, GFC_INTEGER_ ## kind * offset) \ + { \ + gfc_unit * u = find_unit (*unit); \ + if (u == NULL) \ + *offset = -1; \ + else \ + { \ + *offset = stream_offset (u->s); \ + unlock_unit (u); \ + } \ + } + +FTELL_SUB(1) +FTELL_SUB(2) +FTELL_SUB(4) +FTELL_SUB(8) + + + +/* LOGICAL FUNCTION ISATTY(UNIT) + INTEGER, INTENT(IN) :: UNIT */ + +extern GFC_LOGICAL_4 isatty_l4 (int *); +export_proto(isatty_l4); + +GFC_LOGICAL_4 +isatty_l4 (int *unit) +{ + gfc_unit *u; + GFC_LOGICAL_4 ret = 0; + + u = find_unit (*unit); + if (u != NULL) + { + ret = (GFC_LOGICAL_4) stream_isatty (u->s); + unlock_unit (u); + } + return ret; +} + + +extern GFC_LOGICAL_8 isatty_l8 (int *); +export_proto(isatty_l8); + +GFC_LOGICAL_8 +isatty_l8 (int *unit) +{ + gfc_unit *u; + GFC_LOGICAL_8 ret = 0; + + u = find_unit (*unit); + if (u != NULL) + { + ret = (GFC_LOGICAL_8) stream_isatty (u->s); + unlock_unit (u); + } + return ret; +} + + +/* SUBROUTINE TTYNAM(UNIT,NAME) + INTEGER,SCALAR,INTENT(IN) :: UNIT + CHARACTER,SCALAR,INTENT(OUT) :: NAME */ + +extern void ttynam_sub (int *, char *, gfc_charlen_type); +export_proto(ttynam_sub); + +void +ttynam_sub (int *unit, char * name, gfc_charlen_type name_len) +{ + gfc_unit *u; + char * n; + int i; + + memset (name, ' ', name_len); + u = find_unit (*unit); + if (u != NULL) + { + n = stream_ttyname (u->s); + if (n != NULL) + { + i = 0; + while (*n && i < name_len) + name[i++] = *(n++); + } + unlock_unit (u); + } +} + + +extern void ttynam (char **, gfc_charlen_type *, int); +export_proto(ttynam); + +void +ttynam (char ** name, gfc_charlen_type * name_len, int unit) +{ + gfc_unit *u; + + u = find_unit (unit); + if (u != NULL) + { + *name = stream_ttyname (u->s); + if (*name != NULL) + { + *name_len = strlen (*name); + *name = strdup (*name); + unlock_unit (u); + return; + } + unlock_unit (u); + } + + *name_len = 0; + *name = NULL; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/io.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/io.h new file mode 100644 index 0000000000..a0d43a166b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/io.h @@ -0,0 +1,1023 @@ +/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught + F2003 I/O support contributed by Jerry DeLisle + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#ifndef GFOR_IO_H +#define GFOR_IO_H + +/* IO library include. */ + +#include "libgfortran.h" + +#include +#include + +/* Basic types used in data transfers. */ + +typedef enum +{ BT_NULL, BT_INTEGER, BT_LOGICAL, BT_CHARACTER, BT_REAL, + BT_COMPLEX +} +bt; + +struct st_parameter_dt; + +typedef struct stream +{ + char *(*alloc_w_at) (struct stream *, int *); + try (*sfree) (struct stream *); + try (*close) (struct stream *); + try (*seek) (struct stream *, gfc_offset); + try (*trunc) (struct stream *); + int (*read) (struct stream *, void *, size_t *); + int (*write) (struct stream *, const void *, size_t *); + try (*set) (struct stream *, int, size_t); +} +stream; + +typedef enum +{ SYNC_BUFFERED, SYNC_UNBUFFERED, ASYNC } +io_mode; + +/* Macros for doing file I/O given a stream. */ + +#define sfree(s) ((s)->sfree)(s) +#define sclose(s) ((s)->close)(s) + +#define salloc_w(s, len) ((s)->alloc_w_at)(s, len) + +#define sseek(s, pos) ((s)->seek)(s, pos) +#define struncate(s) ((s)->trunc)(s) +#define sread(s, buf, nbytes) ((s)->read)(s, buf, nbytes) +#define swrite(s, buf, nbytes) ((s)->write)(s, buf, nbytes) + +#define sset(s, c, n) ((s)->set)(s, c, n) + +/* Macros for testing what kinds of I/O we are doing. */ + +#define is_array_io(dtp) ((dtp)->internal_unit_desc) + +#define is_internal_unit(dtp) ((dtp)->u.p.unit_is_internal) + +#define is_stream_io(dtp) ((dtp)->u.p.current_unit->flags.access == ACCESS_STREAM) + +/* The array_loop_spec contains the variables for the loops over index ranges + that are encountered. Since the variables can be negative, ssize_t + is used. */ + +typedef struct array_loop_spec +{ + /* Index counter for this dimension. */ + ssize_t idx; + + /* Start for the index counter. */ + ssize_t start; + + /* End for the index counter. */ + ssize_t end; + + /* Step for the index counter. */ + ssize_t step; +} +array_loop_spec; + +/* Representation of a namelist object in libgfortran + + Namelist Records + &GROUPNAME OBJECT=value[s] [,OBJECT=value[s]].../ + or + &GROUPNAME OBJECT=value[s] [,OBJECT=value[s]]...&END + + The object can be a fully qualified, compound name for an intrinsic + type, derived types or derived type components. So, a substring + a(:)%b(4)%ch(2:4)(1:7) has to be treated correctly in namelist + read. Hence full information about the structure of the object has + to be available to list_read.c and write. + + These requirements are met by the following data structures. + + namelist_info type contains all the scalar information about the + object and arrays of descriptor_dimension and array_loop_spec types for + arrays. */ + +typedef struct namelist_type +{ + + /* Object type, stored as GFC_DTYPE_xxxx. */ + bt type; + + /* Object name. */ + char * var_name; + + /* Address for the start of the object's data. */ + void * mem_pos; + + /* Flag to show that a read is to be attempted for this node. */ + int touched; + + /* Length of intrinsic type in bytes. */ + int len; + + /* Rank of the object. */ + int var_rank; + + /* Overall size of the object in bytes. */ + index_type size; + + /* Length of character string. */ + index_type string_length; + + descriptor_dimension * dim; + array_loop_spec * ls; + struct namelist_type * next; +} +namelist_info; + +/* Options for the OPEN statement. */ + +typedef enum +{ ACCESS_SEQUENTIAL, ACCESS_DIRECT, ACCESS_APPEND, ACCESS_STREAM, + ACCESS_UNSPECIFIED +} +unit_access; + +typedef enum +{ ACTION_READ, ACTION_WRITE, ACTION_READWRITE, + ACTION_UNSPECIFIED +} +unit_action; + +typedef enum +{ BLANK_NULL, BLANK_ZERO, BLANK_UNSPECIFIED } +unit_blank; + +typedef enum +{ DELIM_NONE, DELIM_APOSTROPHE, DELIM_QUOTE, + DELIM_UNSPECIFIED +} +unit_delim; + +typedef enum +{ FORM_FORMATTED, FORM_UNFORMATTED, FORM_UNSPECIFIED } +unit_form; + +typedef enum +{ POSITION_ASIS, POSITION_REWIND, POSITION_APPEND, + POSITION_UNSPECIFIED +} +unit_position; + +typedef enum +{ STATUS_UNKNOWN, STATUS_OLD, STATUS_NEW, STATUS_SCRATCH, + STATUS_REPLACE, STATUS_UNSPECIFIED +} +unit_status; + +typedef enum +{ PAD_YES, PAD_NO, PAD_UNSPECIFIED } +unit_pad; + +typedef enum +{ DECIMAL_POINT, DECIMAL_COMMA, DECIMAL_UNSPECIFIED } +unit_decimal; + +typedef enum +{ ENCODING_UTF8, ENCODING_DEFAULT, ENCODING_UNSPECIFIED } +unit_encoding; + +typedef enum +{ ROUND_UP, ROUND_DOWN, ROUND_ZERO, ROUND_NEAREST, ROUND_COMPATIBLE, + ROUND_PROCDEFINED, ROUND_UNSPECIFIED } +unit_round; + +/* NOTE: unit_sign must correspond with the sign_status enumerator in + st_parameter_dt to not break the ABI. */ +typedef enum +{ SIGN_PROCDEFINED, SIGN_SUPPRESS, SIGN_PLUS, SIGN_UNSPECIFIED } +unit_sign; + +typedef enum +{ ADVANCE_YES, ADVANCE_NO, ADVANCE_UNSPECIFIED } +unit_advance; + +typedef enum +{READING, WRITING} +unit_mode; + +typedef enum +{ ASYNC_YES, ASYNC_NO, ASYNC_UNSPECIFIED } +unit_async; + +typedef enum +{ SIGN_S, SIGN_SS, SIGN_SP } +unit_sign_s; + +#define CHARACTER1(name) \ + char * name; \ + gfc_charlen_type name ## _len +#define CHARACTER2(name) \ + gfc_charlen_type name ## _len; \ + char * name + +typedef struct +{ + st_parameter_common common; + GFC_INTEGER_4 recl_in; + CHARACTER2 (file); + CHARACTER1 (status); + CHARACTER2 (access); + CHARACTER1 (form); + CHARACTER2 (blank); + CHARACTER1 (position); + CHARACTER2 (action); + CHARACTER1 (delim); + CHARACTER2 (pad); + CHARACTER1 (convert); + CHARACTER2 (decimal); + CHARACTER1 (encoding); + CHARACTER2 (round); + CHARACTER1 (sign); + CHARACTER2 (asynchronous); +} +st_parameter_open; + +#define IOPARM_CLOSE_HAS_STATUS (1 << 7) + +typedef struct +{ + st_parameter_common common; + CHARACTER1 (status); +} +st_parameter_close; + +typedef struct +{ + st_parameter_common common; +} +st_parameter_filepos; + +#define IOPARM_INQUIRE_HAS_EXIST (1 << 7) +#define IOPARM_INQUIRE_HAS_OPENED (1 << 8) +#define IOPARM_INQUIRE_HAS_NUMBER (1 << 9) +#define IOPARM_INQUIRE_HAS_NAMED (1 << 10) +#define IOPARM_INQUIRE_HAS_NEXTREC (1 << 11) +#define IOPARM_INQUIRE_HAS_RECL_OUT (1 << 12) +#define IOPARM_INQUIRE_HAS_STRM_POS_OUT (1 << 13) +#define IOPARM_INQUIRE_HAS_FILE (1 << 14) +#define IOPARM_INQUIRE_HAS_ACCESS (1 << 15) +#define IOPARM_INQUIRE_HAS_FORM (1 << 16) +#define IOPARM_INQUIRE_HAS_BLANK (1 << 17) +#define IOPARM_INQUIRE_HAS_POSITION (1 << 18) +#define IOPARM_INQUIRE_HAS_ACTION (1 << 19) +#define IOPARM_INQUIRE_HAS_DELIM (1 << 20) +#define IOPARM_INQUIRE_HAS_PAD (1 << 21) +#define IOPARM_INQUIRE_HAS_NAME (1 << 22) +#define IOPARM_INQUIRE_HAS_SEQUENTIAL (1 << 23) +#define IOPARM_INQUIRE_HAS_DIRECT (1 << 24) +#define IOPARM_INQUIRE_HAS_FORMATTED (1 << 25) +#define IOPARM_INQUIRE_HAS_UNFORMATTED (1 << 26) +#define IOPARM_INQUIRE_HAS_READ (1 << 27) +#define IOPARM_INQUIRE_HAS_WRITE (1 << 28) +#define IOPARM_INQUIRE_HAS_READWRITE (1 << 29) +#define IOPARM_INQUIRE_HAS_CONVERT (1 << 30) +#define IOPARM_INQUIRE_HAS_FLAGS2 (1 << 31) + +#define IOPARM_INQUIRE_HAS_ASYNCHRONOUS (1 << 0) +#define IOPARM_INQUIRE_HAS_DECIMAL (1 << 1) +#define IOPARM_INQUIRE_HAS_ENCODING (1 << 2) +#define IOPARM_INQUIRE_HAS_ROUND (1 << 3) +#define IOPARM_INQUIRE_HAS_SIGN (1 << 4) +#define IOPARM_INQUIRE_HAS_PENDING (1 << 5) +#define IOPARM_INQUIRE_HAS_SIZE (1 << 6) +#define IOPARM_INQUIRE_HAS_ID (1 << 7) + +typedef struct +{ + st_parameter_common common; + GFC_INTEGER_4 *exist, *opened, *number, *named; + GFC_INTEGER_4 *nextrec, *recl_out; + GFC_IO_INT *strm_pos_out; + CHARACTER1 (file); + CHARACTER2 (access); + CHARACTER1 (form); + CHARACTER2 (blank); + CHARACTER1 (position); + CHARACTER2 (action); + CHARACTER1 (delim); + CHARACTER2 (pad); + CHARACTER1 (name); + CHARACTER2 (sequential); + CHARACTER1 (direct); + CHARACTER2 (formatted); + CHARACTER1 (unformatted); + CHARACTER2 (read); + CHARACTER1 (write); + CHARACTER2 (readwrite); + CHARACTER1 (convert); + GFC_INTEGER_4 flags2; + CHARACTER1 (asynchronous); + CHARACTER2 (decimal); + CHARACTER1 (encoding); + CHARACTER2 (round); + CHARACTER1 (sign); + GFC_INTEGER_4 *pending; + GFC_INTEGER_4 *size; + GFC_INTEGER_4 *id; +} +st_parameter_inquire; + +struct gfc_unit; +struct format_data; + +#define IOPARM_DT_LIST_FORMAT (1 << 7) +#define IOPARM_DT_NAMELIST_READ_MODE (1 << 8) +#define IOPARM_DT_HAS_REC (1 << 9) +#define IOPARM_DT_HAS_SIZE (1 << 10) +#define IOPARM_DT_HAS_IOLENGTH (1 << 11) +#define IOPARM_DT_HAS_FORMAT (1 << 12) +#define IOPARM_DT_HAS_ADVANCE (1 << 13) +#define IOPARM_DT_HAS_INTERNAL_UNIT (1 << 14) +#define IOPARM_DT_HAS_NAMELIST_NAME (1 << 15) +#define IOPARM_DT_HAS_ID (1 << 16) +#define IOPARM_DT_HAS_POS (1 << 17) +#define IOPARM_DT_HAS_ASYNCHRONOUS (1 << 18) +#define IOPARM_DT_HAS_BLANK (1 << 19) +#define IOPARM_DT_HAS_DECIMAL (1 << 20) +#define IOPARM_DT_HAS_DELIM (1 << 21) +#define IOPARM_DT_HAS_PAD (1 << 22) +#define IOPARM_DT_HAS_ROUND (1 << 23) +#define IOPARM_DT_HAS_SIGN (1 << 24) +#define IOPARM_DT_HAS_F2003 (1 << 25) +/* Internal use bit. */ +#define IOPARM_DT_IONML_SET (1 << 31) + + +typedef struct st_parameter_dt +{ + st_parameter_common common; + GFC_IO_INT rec; + GFC_IO_INT *size, *iolength; + gfc_array_char *internal_unit_desc; + CHARACTER1 (format); + CHARACTER2 (advance); + CHARACTER1 (internal_unit); + CHARACTER2 (namelist_name); + /* Private part of the structure. The compiler just needs + to reserve enough space. */ + union + { + struct + { + void (*transfer) (struct st_parameter_dt *, bt, void *, int, + size_t, size_t); + struct gfc_unit *current_unit; + /* Item number in a formatted data transfer. Also used in namelist + read_logical as an index into line_buffer. */ + int item_count; + unit_mode mode; + unit_blank blank_status; + unit_sign sign_status; + int scale_factor; + int max_pos; /* Maximum righthand column written to. */ + /* Number of skips + spaces to be done for T and X-editing. */ + int skips; + /* Number of spaces to be done for T and X-editing. */ + int pending_spaces; + /* Whether an EOR condition was encountered. Value is: + 0 if no EOR was encountered + 1 if an EOR was encountered due to a 1-byte marker (LF) + 2 if an EOR was encountered due to a 2-bytes marker (CRLF) */ + int sf_seen_eor; + unit_advance advance_status; + unsigned reversion_flag : 1; /* Format reversion has occurred. */ + unsigned first_item : 1; + unsigned seen_dollar : 1; + unsigned eor_condition : 1; + unsigned no_leading_blank : 1; + unsigned char_flag : 1; + unsigned input_complete : 1; + unsigned at_eol : 1; + unsigned comma_flag : 1; + /* A namelist specific flag used in the list directed library + to flag that calls are being made from namelist read (eg. to + ignore comments or to treat '/' as a terminator) */ + unsigned namelist_mode : 1; + /* A namelist specific flag used in the list directed library + to flag read errors and return, so that an attempt can be + made to read a new object name. */ + unsigned nml_read_error : 1; + /* A sequential formatted read specific flag used to signal that a + character string is being read so don't use commas to shorten a + formatted field width. */ + unsigned sf_read_comma : 1; + /* A namelist specific flag used to enable reading input from + line_buffer for logical reads. */ + unsigned line_buffer_enabled : 1; + /* An internal unit specific flag used to identify that the associated + unit is internal. */ + unsigned unit_is_internal : 1; + /* An internal unit specific flag to signify an EOF condition for list + directed read. */ + unsigned at_eof : 1; + /* Used for g0 floating point output. */ + unsigned g0_no_blanks : 1; + /* 15 unused bits. */ + + char last_char; + char nml_delim; + + int repeat_count; + int saved_length; + int saved_used; + bt saved_type; + char *saved_string; + char *scratch; + char *line_buffer; + struct format_data *fmt; + jmp_buf *eof_jump; + namelist_info *ionml; + /* A flag used to identify when a non-standard expanded namelist read + has occurred. */ + int expanded_read; + /* Storage area for values except for strings. Must be large + enough to hold a complex value (two reals) of the largest + kind. */ + char value[32]; + GFC_IO_INT size_used; + } p; + /* This pad size must be equal to the pad_size declared in + trans-io.c (gfc_build_io_library_fndecls). The above structure + must be smaller or equal to this array. */ + char pad[16 * sizeof (char *) + 32 * sizeof (int)]; + } u; + GFC_INTEGER_4 *id; + GFC_IO_INT pos; + CHARACTER1 (asynchronous); + CHARACTER2 (blank); + CHARACTER1 (decimal); + CHARACTER2 (delim); + CHARACTER1 (pad); + CHARACTER2 (round); + CHARACTER1 (sign); +} +st_parameter_dt; + +/* Ensure st_parameter_dt's u.pad is bigger or equal to u.p. */ +extern char check_st_parameter_dt[sizeof (((st_parameter_dt *) 0)->u.pad) + >= sizeof (((st_parameter_dt *) 0)->u.p) + ? 1 : -1]; + +#define IOPARM_WAIT_HAS_ID (1 << 7) + +typedef struct +{ + st_parameter_common common; + CHARACTER1 (id); +} +st_parameter_wait; + + +#undef CHARACTER1 +#undef CHARACTER2 + +typedef struct +{ + unit_access access; + unit_action action; + unit_blank blank; + unit_delim delim; + unit_form form; + int is_notpadded; + unit_position position; + unit_status status; + unit_pad pad; + unit_convert convert; + int has_recl; + unit_decimal decimal; + unit_encoding encoding; + unit_round round; + unit_sign sign; + unit_async async; +} +unit_flags; + + +/* Formatting buffer. This is a temporary scratch buffer. Currently used only + by formatted writes. After every + formatted write statement, this buffer is flushed. This buffer is needed since + not all devices are seekable, and T or TL edit descriptors require + moving backwards in the record. However, advance='no' complicates the + situation, so the buffer must only be partially flushed from the end of the + last flush until the current position in the record. */ + +typedef struct fbuf +{ + char *buf; /* Start of buffer. */ + size_t len; /* Length of buffer. */ + size_t act; /* Active bytes in buffer. */ + size_t flushed; /* Flushed bytes from beginning of buffer. */ + size_t pos; /* Current position in buffer. */ +} +fbuf; + + +typedef struct gfc_unit +{ + int unit_number; + stream *s; + + /* Treap links. */ + struct gfc_unit *left, *right; + int priority; + + int read_bad, current_record, saved_pos, previous_nonadvancing_write; + + enum + { NO_ENDFILE, AT_ENDFILE, AFTER_ENDFILE } + endfile; + + unit_mode mode; + unit_flags flags; + unit_pad pad_status; + unit_decimal decimal_status; + unit_delim delim_status; + + /* recl -- Record length of the file. + last_record -- Last record number read or written + maxrec -- Maximum record number in a direct access file + bytes_left -- Bytes left in current record. + strm_pos -- Current position in file for STREAM I/O. + recl_subrecord -- Maximum length for subrecord. + bytes_left_subrecord -- Bytes left in current subrecord. */ + gfc_offset recl, last_record, maxrec, bytes_left, strm_pos, + recl_subrecord, bytes_left_subrecord; + + /* Set to 1 if we have read a subrecord. */ + + int continued; + + __gthread_mutex_t lock; + /* Number of threads waiting to acquire this unit's lock. + When non-zero, close_unit doesn't only removes the unit + from the UNIT_ROOT tree, but doesn't free it and the + last of the waiting threads will do that. + This must be either atomically increased/decreased, or + always guarded by UNIT_LOCK. */ + int waiting; + /* Flag set by close_unit if the unit as been closed. + Must be manipulated under unit's lock. */ + int closed; + + /* For traversing arrays */ + array_loop_spec *ls; + int rank; + + int file_len; + char *file; + + /* Formatting buffer. */ + struct fbuf *fbuf; +} +gfc_unit; + +/* Format tokens. Only about half of these can be stored in the + format nodes. */ + +typedef enum +{ + FMT_NONE = 0, FMT_UNKNOWN, FMT_SIGNED_INT, FMT_ZERO, FMT_POSINT, FMT_PERIOD, + FMT_COMMA, FMT_COLON, FMT_SLASH, FMT_DOLLAR, FMT_T, FMT_TR, FMT_TL, + FMT_LPAREN, FMT_RPAREN, FMT_X, FMT_S, FMT_SS, FMT_SP, FMT_STRING, + FMT_BADSTRING, FMT_P, FMT_I, FMT_B, FMT_BN, FMT_BZ, FMT_O, FMT_Z, FMT_F, + FMT_E, FMT_EN, FMT_ES, FMT_G, FMT_L, FMT_A, FMT_D, FMT_H, FMT_END, FMT_DC, + FMT_DP +} +format_token; + + +/* Format nodes. A format string is converted into a tree of these + structures, which is traversed as part of a data transfer statement. */ + +typedef struct fnode +{ + format_token format; + int repeat; + struct fnode *next; + char *source; + + union + { + struct + { + int w, d, e; + } + real; + + struct + { + int length; + char *p; + } + string; + + struct + { + int w, m; + } + integer; + + int w; + int k; + int r; + int n; + + struct fnode *child; + } + u; + + /* Members for traversing the tree during data transfer. */ + + int count; + struct fnode *current; + +} +fnode; + + +/* unix.c */ + +extern int move_pos_offset (stream *, int); +internal_proto(move_pos_offset); + +extern int compare_files (stream *, stream *); +internal_proto(compare_files); + +extern stream *open_external (st_parameter_open *, unit_flags *); +internal_proto(open_external); + +extern stream *open_internal (char *, int, gfc_offset); +internal_proto(open_internal); + +extern stream *input_stream (void); +internal_proto(input_stream); + +extern stream *output_stream (void); +internal_proto(output_stream); + +extern stream *error_stream (void); +internal_proto(error_stream); + +extern int compare_file_filename (gfc_unit *, const char *, int); +internal_proto(compare_file_filename); + +extern gfc_unit *find_file (const char *file, gfc_charlen_type file_len); +internal_proto(find_file); + +extern int stream_at_bof (stream *); +internal_proto(stream_at_bof); + +extern int stream_at_eof (stream *); +internal_proto(stream_at_eof); + +extern int delete_file (gfc_unit *); +internal_proto(delete_file); + +extern int file_exists (const char *file, gfc_charlen_type file_len); +internal_proto(file_exists); + +extern const char *inquire_sequential (const char *, int); +internal_proto(inquire_sequential); + +extern const char *inquire_direct (const char *, int); +internal_proto(inquire_direct); + +extern const char *inquire_formatted (const char *, int); +internal_proto(inquire_formatted); + +extern const char *inquire_unformatted (const char *, int); +internal_proto(inquire_unformatted); + +extern const char *inquire_read (const char *, int); +internal_proto(inquire_read); + +extern const char *inquire_write (const char *, int); +internal_proto(inquire_write); + +extern const char *inquire_readwrite (const char *, int); +internal_proto(inquire_readwrite); + +extern gfc_offset file_length (stream *); +internal_proto(file_length); + +extern gfc_offset file_position (stream *); +internal_proto(file_position); + +extern int is_seekable (stream *); +internal_proto(is_seekable); + +extern int is_special (stream *); +internal_proto(is_special); + +extern int is_preconnected (stream *); +internal_proto(is_preconnected); + +extern void flush_if_preconnected (stream *); +internal_proto(flush_if_preconnected); + +extern void empty_internal_buffer(stream *); +internal_proto(empty_internal_buffer); + +extern try flush (stream *); +internal_proto(flush); + +extern int stream_isatty (stream *); +internal_proto(stream_isatty); + +extern char * stream_ttyname (stream *); +internal_proto(stream_ttyname); + +extern gfc_offset stream_offset (stream *s); +internal_proto(stream_offset); + +extern int unpack_filename (char *, const char *, int); +internal_proto(unpack_filename); + +/* unit.c */ + +/* Maximum file offset, computed at library initialization time. */ +extern gfc_offset max_offset; +internal_proto(max_offset); + +/* Unit tree root. */ +extern gfc_unit *unit_root; +internal_proto(unit_root); + +extern __gthread_mutex_t unit_lock; +internal_proto(unit_lock); + +extern int close_unit (gfc_unit *); +internal_proto(close_unit); + +extern gfc_unit *get_internal_unit (st_parameter_dt *); +internal_proto(get_internal_unit); + +extern void free_internal_unit (st_parameter_dt *); +internal_proto(free_internal_unit); + +extern gfc_unit *find_unit (int); +internal_proto(find_unit); + +extern gfc_unit *find_or_create_unit (int); +internal_proto(find_or_create_unit); + +extern gfc_unit *get_unit (st_parameter_dt *, int); +internal_proto(get_unit); + +extern void unlock_unit (gfc_unit *); +internal_proto(unlock_unit); + +extern void update_position (gfc_unit *); +internal_proto(update_position); + +extern void finish_last_advance_record (gfc_unit *u); +internal_proto (finish_last_advance_record); + +/* open.c */ + +extern gfc_unit *new_unit (st_parameter_open *, gfc_unit *, unit_flags *); +internal_proto(new_unit); + +/* format.c */ + +extern void parse_format (st_parameter_dt *); +internal_proto(parse_format); + +extern const fnode *next_format (st_parameter_dt *); +internal_proto(next_format); + +extern void unget_format (st_parameter_dt *, const fnode *); +internal_proto(unget_format); + +extern void format_error (st_parameter_dt *, const fnode *, const char *); +internal_proto(format_error); + +extern void free_format_data (st_parameter_dt *); +internal_proto(free_format_data); + +/* transfer.c */ + +#define SCRATCH_SIZE 300 + +extern const char *type_name (bt); +internal_proto(type_name); + +extern try read_block_form (st_parameter_dt *, void *, size_t *); +internal_proto(read_block_form); + +extern char *read_sf (st_parameter_dt *, int *, int); +internal_proto(read_sf); + +extern void *write_block (st_parameter_dt *, int); +internal_proto(write_block); + +extern gfc_offset next_array_record (st_parameter_dt *, array_loop_spec *, + int*); +internal_proto(next_array_record); + +extern gfc_offset init_loop_spec (gfc_array_char *, array_loop_spec *, + gfc_offset *); +internal_proto(init_loop_spec); + +extern void next_record (st_parameter_dt *, int); +internal_proto(next_record); + +extern void reverse_memcpy (void *, const void *, size_t); +internal_proto (reverse_memcpy); + +extern void st_wait (st_parameter_wait *); +export_proto(st_wait); + +/* read.c */ + +extern void set_integer (void *, GFC_INTEGER_LARGEST, int); +internal_proto(set_integer); + +extern GFC_UINTEGER_LARGEST max_value (int, int); +internal_proto(max_value); + +extern int convert_real (st_parameter_dt *, void *, const char *, int); +internal_proto(convert_real); + +extern void read_a (st_parameter_dt *, const fnode *, char *, int); +internal_proto(read_a); + +extern void read_a_char4 (st_parameter_dt *, const fnode *, char *, int); +internal_proto(read_a); + +extern void read_f (st_parameter_dt *, const fnode *, char *, int); +internal_proto(read_f); + +extern void read_l (st_parameter_dt *, const fnode *, char *, int); +internal_proto(read_l); + +extern void read_x (st_parameter_dt *, int); +internal_proto(read_x); + +extern void read_radix (st_parameter_dt *, const fnode *, char *, int, int); +internal_proto(read_radix); + +extern void read_decimal (st_parameter_dt *, const fnode *, char *, int); +internal_proto(read_decimal); + +/* list_read.c */ + +extern void list_formatted_read (st_parameter_dt *, bt, void *, int, size_t, + size_t); +internal_proto(list_formatted_read); + +extern void finish_list_read (st_parameter_dt *); +internal_proto(finish_list_read); + +extern void namelist_read (st_parameter_dt *); +internal_proto(namelist_read); + +extern void namelist_write (st_parameter_dt *); +internal_proto(namelist_write); + +/* write.c */ + +extern void write_a (st_parameter_dt *, const fnode *, const char *, int); +internal_proto(write_a); + +extern void write_a_char4 (st_parameter_dt *, const fnode *, const char *, int); +internal_proto(write_a_char4); + +extern void write_b (st_parameter_dt *, const fnode *, const char *, int); +internal_proto(write_b); + +extern void write_d (st_parameter_dt *, const fnode *, const char *, int); +internal_proto(write_d); + +extern void write_e (st_parameter_dt *, const fnode *, const char *, int); +internal_proto(write_e); + +extern void write_en (st_parameter_dt *, const fnode *, const char *, int); +internal_proto(write_en); + +extern void write_es (st_parameter_dt *, const fnode *, const char *, int); +internal_proto(write_es); + +extern void write_f (st_parameter_dt *, const fnode *, const char *, int); +internal_proto(write_f); + +extern void write_i (st_parameter_dt *, const fnode *, const char *, int); +internal_proto(write_i); + +extern void write_l (st_parameter_dt *, const fnode *, char *, int); +internal_proto(write_l); + +extern void write_o (st_parameter_dt *, const fnode *, const char *, int); +internal_proto(write_o); + +extern void write_real (st_parameter_dt *, const char *, int); +internal_proto(write_real); + +extern void write_real_g0 (st_parameter_dt *, const char *, int, int); +internal_proto(write_real_g0); + +extern void write_x (st_parameter_dt *, int, int); +internal_proto(write_x); + +extern void write_z (st_parameter_dt *, const fnode *, const char *, int); +internal_proto(write_z); + +extern void list_formatted_write (st_parameter_dt *, bt, void *, int, size_t, + size_t); +internal_proto(list_formatted_write); + +/* size_from_kind.c */ +extern size_t size_from_real_kind (int); +internal_proto(size_from_real_kind); + +extern size_t size_from_complex_kind (int); +internal_proto(size_from_complex_kind); + +/* fbuf.c */ +extern void fbuf_init (gfc_unit *, size_t); +internal_proto(fbuf_init); + +extern void fbuf_destroy (gfc_unit *); +internal_proto(fbuf_destroy); + +extern void fbuf_reset (gfc_unit *); +internal_proto(fbuf_reset); + +extern char * fbuf_alloc (gfc_unit *, size_t); +internal_proto(fbuf_alloc); + +extern int fbuf_flush (gfc_unit *, int); +internal_proto(fbuf_flush); + +extern int fbuf_seek (gfc_unit *, gfc_offset); +internal_proto(fbuf_seek); + +/* lock.c */ +extern void free_ionml (st_parameter_dt *); +internal_proto(free_ionml); + +static inline void +inc_waiting_locked (gfc_unit *u) +{ +#ifdef HAVE_SYNC_FETCH_AND_ADD + (void) __sync_fetch_and_add (&u->waiting, 1); +#else + u->waiting++; +#endif +} + +static inline int +predec_waiting_locked (gfc_unit *u) +{ +#ifdef HAVE_SYNC_FETCH_AND_ADD + return __sync_add_and_fetch (&u->waiting, -1); +#else + return --u->waiting; +#endif +} + +static inline void +dec_waiting_unlocked (gfc_unit *u) +{ +#ifdef HAVE_SYNC_FETCH_AND_ADD + (void) __sync_fetch_and_add (&u->waiting, -1); +#else + __gthread_mutex_lock (&unit_lock); + u->waiting--; + __gthread_mutex_unlock (&unit_lock); +#endif +} + +#endif + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/list_read.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/list_read.c new file mode 100644 index 0000000000..0b07759e6f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/list_read.c @@ -0,0 +1,2922 @@ +/* Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught + Namelist input contributed by Paul Thomas + F2003 I/O support contributed by Jerry DeLisle + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +#include "io.h" +#include +#include + + +/* List directed input. Several parsing subroutines are practically + reimplemented from formatted input, the reason being that there are + all kinds of small differences between formatted and list directed + parsing. */ + + +/* Subroutines for reading characters from the input. Because a + repeat count is ambiguous with an integer, we have to read the + whole digit string before seeing if there is a '*' which signals + the repeat count. Since we can have a lot of potential leading + zeros, we have to be able to back up by arbitrary amount. Because + the input might not be seekable, we have to buffer the data + ourselves. */ + +#define CASE_DIGITS case '0': case '1': case '2': case '3': case '4': \ + case '5': case '6': case '7': case '8': case '9' + +#define CASE_SEPARATORS case ' ': case ',': case '/': case '\n': case '\t': \ + case '\r': case ';' + +/* This macro assumes that we're operating on a variable. */ + +#define is_separator(c) (c == '/' || c == ',' || c == '\n' || c == ' ' \ + || c == '\t' || c == '\r' || c == ';') + +/* Maximum repeat count. Less than ten times the maximum signed int32. */ + +#define MAX_REPEAT 200000000 + +#ifndef HAVE_SNPRINTF +# undef snprintf +# define snprintf(str, size, ...) sprintf (str, __VA_ARGS__) +#endif + +/* Save a character to a string buffer, enlarging it as necessary. */ + +static void +push_char (st_parameter_dt *dtp, char c) +{ + char *new; + + if (dtp->u.p.saved_string == NULL) + { + if (dtp->u.p.scratch == NULL) + dtp->u.p.scratch = get_mem (SCRATCH_SIZE); + dtp->u.p.saved_string = dtp->u.p.scratch; + memset (dtp->u.p.saved_string, 0, SCRATCH_SIZE); + dtp->u.p.saved_length = SCRATCH_SIZE; + dtp->u.p.saved_used = 0; + } + + if (dtp->u.p.saved_used >= dtp->u.p.saved_length) + { + dtp->u.p.saved_length = 2 * dtp->u.p.saved_length; + new = get_mem (2 * dtp->u.p.saved_length); + + memset (new, 0, 2 * dtp->u.p.saved_length); + + memcpy (new, dtp->u.p.saved_string, dtp->u.p.saved_used); + if (dtp->u.p.saved_string != dtp->u.p.scratch) + free_mem (dtp->u.p.saved_string); + + dtp->u.p.saved_string = new; + } + + dtp->u.p.saved_string[dtp->u.p.saved_used++] = c; +} + + +/* Free the input buffer if necessary. */ + +static void +free_saved (st_parameter_dt *dtp) +{ + if (dtp->u.p.saved_string == NULL) + return; + + if (dtp->u.p.saved_string != dtp->u.p.scratch) + free_mem (dtp->u.p.saved_string); + + dtp->u.p.saved_string = NULL; + dtp->u.p.saved_used = 0; +} + + +/* Free the line buffer if necessary. */ + +static void +free_line (st_parameter_dt *dtp) +{ + dtp->u.p.item_count = 0; + dtp->u.p.line_buffer_enabled = 0; + + if (dtp->u.p.line_buffer == NULL) + return; + + free_mem (dtp->u.p.line_buffer); + dtp->u.p.line_buffer = NULL; +} + + +static char +next_char (st_parameter_dt *dtp) +{ + size_t length; + gfc_offset record; + char c; + + if (dtp->u.p.last_char != '\0') + { + dtp->u.p.at_eol = 0; + c = dtp->u.p.last_char; + dtp->u.p.last_char = '\0'; + goto done; + } + + /* Read from line_buffer if enabled. */ + + if (dtp->u.p.line_buffer_enabled) + { + dtp->u.p.at_eol = 0; + + c = dtp->u.p.line_buffer[dtp->u.p.item_count]; + if (c != '\0' && dtp->u.p.item_count < 64) + { + dtp->u.p.line_buffer[dtp->u.p.item_count] = '\0'; + dtp->u.p.item_count++; + goto done; + } + + dtp->u.p.item_count = 0; + dtp->u.p.line_buffer_enabled = 0; + } + + /* Handle the end-of-record and end-of-file conditions for + internal array unit. */ + if (is_array_io (dtp)) + { + if (dtp->u.p.at_eof) + longjmp (*dtp->u.p.eof_jump, 1); + + /* Check for "end-of-record" condition. */ + if (dtp->u.p.current_unit->bytes_left == 0) + { + int finished; + + c = '\n'; + record = next_array_record (dtp, dtp->u.p.current_unit->ls, + &finished); + + /* Check for "end-of-file" condition. */ + if (finished) + { + dtp->u.p.at_eof = 1; + goto done; + } + + record *= dtp->u.p.current_unit->recl; + if (sseek (dtp->u.p.current_unit->s, record) == FAILURE) + longjmp (*dtp->u.p.eof_jump, 1); + + dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl; + goto done; + } + } + + /* Get the next character and handle end-of-record conditions. */ + + length = 1; + + if (sread (dtp->u.p.current_unit->s, &c, &length) != 0) + { + generate_error (&dtp->common, LIBERROR_OS, NULL); + return '\0'; + } + + if (is_stream_io (dtp) && length == 1) + dtp->u.p.current_unit->strm_pos++; + + if (is_internal_unit (dtp)) + { + if (is_array_io (dtp)) + { + /* Check whether we hit EOF. */ + if (length == 0) + { + generate_error (&dtp->common, LIBERROR_INTERNAL_UNIT, NULL); + return '\0'; + } + dtp->u.p.current_unit->bytes_left--; + } + else + { + if (dtp->u.p.at_eof) + longjmp (*dtp->u.p.eof_jump, 1); + if (length == 0) + { + c = '\n'; + dtp->u.p.at_eof = 1; + } + } + } + else + { + if (length == 0) + { + if (dtp->u.p.current_unit->endfile == AT_ENDFILE) + longjmp (*dtp->u.p.eof_jump, 1); + dtp->u.p.current_unit->endfile = AT_ENDFILE; + c = '\n'; + } + } +done: + dtp->u.p.at_eol = (c == '\n' || c == '\r'); + return c; +} + + +/* Push a character back onto the input. */ + +static void +unget_char (st_parameter_dt *dtp, char c) +{ + dtp->u.p.last_char = c; +} + + +/* Skip over spaces in the input. Returns the nonspace character that + terminated the eating and also places it back on the input. */ + +static char +eat_spaces (st_parameter_dt *dtp) +{ + char c; + + do + { + c = next_char (dtp); + } + while (c == ' ' || c == '\t'); + + unget_char (dtp, c); + return c; +} + + +/* This function reads characters through to the end of the current line and + just ignores them. */ + +static void +eat_line (st_parameter_dt *dtp) +{ + char c; + if (!is_internal_unit (dtp)) + do + c = next_char (dtp); + while (c != '\n'); +} + + +/* Skip over a separator. Technically, we don't always eat the whole + separator. This is because if we've processed the last input item, + then a separator is unnecessary. Plus the fact that operating + systems usually deliver console input on a line basis. + + The upshot is that if we see a newline as part of reading a + separator, we stop reading. If there are more input items, we + continue reading the separator with finish_separator() which takes + care of the fact that we may or may not have seen a comma as part + of the separator. */ + +static void +eat_separator (st_parameter_dt *dtp) +{ + char c, n; + + eat_spaces (dtp); + dtp->u.p.comma_flag = 0; + + c = next_char (dtp); + switch (c) + { + case ',': + if (dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA) + { + unget_char (dtp, c); + break; + } + /* Fall through. */ + case ';': + dtp->u.p.comma_flag = 1; + eat_spaces (dtp); + break; + + case '/': + dtp->u.p.input_complete = 1; + break; + + case '\r': + dtp->u.p.at_eol = 1; + n = next_char(dtp); + if (n != '\n') + { + unget_char (dtp, n); + break; + } + /* Fall through. */ + case '\n': + dtp->u.p.at_eol = 1; + if (dtp->u.p.namelist_mode) + { + do + { + c = next_char (dtp); + if (c == '!') + { + eat_line (dtp); + c = next_char (dtp); + if (c == '!') + { + eat_line (dtp); + c = next_char (dtp); + } + } + } + while (c == '\n' || c == '\r' || c == ' ' || c == '\t'); + unget_char (dtp, c); + } + break; + + case '!': + if (dtp->u.p.namelist_mode) + { /* Eat a namelist comment. */ + do + c = next_char (dtp); + while (c != '\n'); + + break; + } + + /* Fall Through... */ + + default: + unget_char (dtp, c); + break; + } +} + + +/* Finish processing a separator that was interrupted by a newline. + If we're here, then another data item is present, so we finish what + we started on the previous line. */ + +static void +finish_separator (st_parameter_dt *dtp) +{ + char c; + + restart: + eat_spaces (dtp); + + c = next_char (dtp); + switch (c) + { + case ',': + if (dtp->u.p.comma_flag) + unget_char (dtp, c); + else + { + c = eat_spaces (dtp); + if (c == '\n' || c == '\r') + goto restart; + } + + break; + + case '/': + dtp->u.p.input_complete = 1; + if (!dtp->u.p.namelist_mode) + return; + break; + + case '\n': + case '\r': + goto restart; + + case '!': + if (dtp->u.p.namelist_mode) + { + do + c = next_char (dtp); + while (c != '\n'); + + goto restart; + } + + default: + unget_char (dtp, c); + break; + } +} + + +/* This function is needed to catch bad conversions so that namelist can + attempt to see if dtp->u.p.saved_string contains a new object name rather + than a bad value. */ + +static int +nml_bad_return (st_parameter_dt *dtp, char c) +{ + if (dtp->u.p.namelist_mode) + { + dtp->u.p.nml_read_error = 1; + unget_char (dtp, c); + return 1; + } + return 0; +} + +/* Convert an unsigned string to an integer. The length value is -1 + if we are working on a repeat count. Returns nonzero if we have a + range problem. As a side effect, frees the dtp->u.p.saved_string. */ + +static int +convert_integer (st_parameter_dt *dtp, int length, int negative) +{ + char c, *buffer, message[100]; + int m; + GFC_INTEGER_LARGEST v, max, max10; + + buffer = dtp->u.p.saved_string; + v = 0; + + max = (length == -1) ? MAX_REPEAT : max_value (length, 1); + max10 = max / 10; + + for (;;) + { + c = *buffer++; + if (c == '\0') + break; + c -= '0'; + + if (v > max10) + goto overflow; + v = 10 * v; + + if (v > max - c) + goto overflow; + v += c; + } + + m = 0; + + if (length != -1) + { + if (negative) + v = -v; + set_integer (dtp->u.p.value, v, length); + } + else + { + dtp->u.p.repeat_count = v; + + if (dtp->u.p.repeat_count == 0) + { + sprintf (message, "Zero repeat count in item %d of list input", + dtp->u.p.item_count); + + generate_error (&dtp->common, LIBERROR_READ_VALUE, message); + m = 1; + } + } + + free_saved (dtp); + return m; + + overflow: + if (length == -1) + sprintf (message, "Repeat count overflow in item %d of list input", + dtp->u.p.item_count); + else + sprintf (message, "Integer overflow while reading item %d", + dtp->u.p.item_count); + + free_saved (dtp); + generate_error (&dtp->common, LIBERROR_READ_VALUE, message); + + return 1; +} + + +/* Parse a repeat count for logical and complex values which cannot + begin with a digit. Returns nonzero if we are done, zero if we + should continue on. */ + +static int +parse_repeat (st_parameter_dt *dtp) +{ + char c, message[100]; + int repeat; + + c = next_char (dtp); + switch (c) + { + CASE_DIGITS: + repeat = c - '0'; + break; + + CASE_SEPARATORS: + unget_char (dtp, c); + eat_separator (dtp); + return 1; + + default: + unget_char (dtp, c); + return 0; + } + + for (;;) + { + c = next_char (dtp); + switch (c) + { + CASE_DIGITS: + repeat = 10 * repeat + c - '0'; + + if (repeat > MAX_REPEAT) + { + sprintf (message, + "Repeat count overflow in item %d of list input", + dtp->u.p.item_count); + + generate_error (&dtp->common, LIBERROR_READ_VALUE, message); + return 1; + } + + break; + + case '*': + if (repeat == 0) + { + sprintf (message, + "Zero repeat count in item %d of list input", + dtp->u.p.item_count); + + generate_error (&dtp->common, LIBERROR_READ_VALUE, message); + return 1; + } + + goto done; + + default: + goto bad_repeat; + } + } + + done: + dtp->u.p.repeat_count = repeat; + return 0; + + bad_repeat: + + eat_line (dtp); + free_saved (dtp); + sprintf (message, "Bad repeat count in item %d of list input", + dtp->u.p.item_count); + generate_error (&dtp->common, LIBERROR_READ_VALUE, message); + return 1; +} + + +/* To read a logical we have to look ahead in the input stream to make sure + there is not an equal sign indicating a variable name. To do this we use + line_buffer to point to a temporary buffer, pushing characters there for + possible later reading. */ + +static void +l_push_char (st_parameter_dt *dtp, char c) +{ + if (dtp->u.p.line_buffer == NULL) + { + dtp->u.p.line_buffer = get_mem (SCRATCH_SIZE); + memset (dtp->u.p.line_buffer, 0, SCRATCH_SIZE); + } + + dtp->u.p.line_buffer[dtp->u.p.item_count++] = c; +} + + +/* Read a logical character on the input. */ + +static void +read_logical (st_parameter_dt *dtp, int length) +{ + char c, message[100]; + int i, v; + + if (parse_repeat (dtp)) + return; + + c = tolower (next_char (dtp)); + l_push_char (dtp, c); + switch (c) + { + case 't': + v = 1; + c = next_char (dtp); + l_push_char (dtp, c); + + if (!is_separator(c)) + goto possible_name; + + unget_char (dtp, c); + break; + case 'f': + v = 0; + c = next_char (dtp); + l_push_char (dtp, c); + + if (!is_separator(c)) + goto possible_name; + + unget_char (dtp, c); + break; + + case '.': + c = tolower (next_char (dtp)); + switch (c) + { + case 't': + v = 1; + break; + case 'f': + v = 0; + break; + default: + goto bad_logical; + } + + break; + + CASE_SEPARATORS: + unget_char (dtp, c); + eat_separator (dtp); + return; /* Null value. */ + + default: + /* Save the character in case it is the beginning + of the next object name. */ + unget_char (dtp, c); + goto bad_logical; + } + + dtp->u.p.saved_type = BT_LOGICAL; + dtp->u.p.saved_length = length; + + /* Eat trailing garbage. */ + do + { + c = next_char (dtp); + } + while (!is_separator (c)); + + unget_char (dtp, c); + eat_separator (dtp); + set_integer ((int *) dtp->u.p.value, v, length); + free_line (dtp); + + return; + + possible_name: + + for(i = 0; i < 63; i++) + { + c = next_char (dtp); + if (is_separator(c)) + { + /* All done if this is not a namelist read. */ + if (!dtp->u.p.namelist_mode) + goto logical_done; + + unget_char (dtp, c); + eat_separator (dtp); + c = next_char (dtp); + if (c != '=') + { + unget_char (dtp, c); + goto logical_done; + } + } + + l_push_char (dtp, c); + if (c == '=') + { + dtp->u.p.nml_read_error = 1; + dtp->u.p.line_buffer_enabled = 1; + dtp->u.p.item_count = 0; + return; + } + + } + + bad_logical: + + free_line (dtp); + + if (nml_bad_return (dtp, c)) + return; + + eat_line (dtp); + free_saved (dtp); + sprintf (message, "Bad logical value while reading item %d", + dtp->u.p.item_count); + generate_error (&dtp->common, LIBERROR_READ_VALUE, message); + return; + + logical_done: + + dtp->u.p.saved_type = BT_LOGICAL; + dtp->u.p.saved_length = length; + set_integer ((int *) dtp->u.p.value, v, length); + free_saved (dtp); + free_line (dtp); +} + + +/* Reading integers is tricky because we can actually be reading a + repeat count. We have to store the characters in a buffer because + we could be reading an integer that is larger than the default int + used for repeat counts. */ + +static void +read_integer (st_parameter_dt *dtp, int length) +{ + char c, message[100]; + int negative; + + negative = 0; + + c = next_char (dtp); + switch (c) + { + case '-': + negative = 1; + /* Fall through... */ + + case '+': + c = next_char (dtp); + goto get_integer; + + CASE_SEPARATORS: /* Single null. */ + unget_char (dtp, c); + eat_separator (dtp); + return; + + CASE_DIGITS: + push_char (dtp, c); + break; + + default: + goto bad_integer; + } + + /* Take care of what may be a repeat count. */ + + for (;;) + { + c = next_char (dtp); + switch (c) + { + CASE_DIGITS: + push_char (dtp, c); + break; + + case '*': + push_char (dtp, '\0'); + goto repeat; + + CASE_SEPARATORS: /* Not a repeat count. */ + goto done; + + default: + goto bad_integer; + } + } + + repeat: + if (convert_integer (dtp, -1, 0)) + return; + + /* Get the real integer. */ + + c = next_char (dtp); + switch (c) + { + CASE_DIGITS: + break; + + CASE_SEPARATORS: + unget_char (dtp, c); + eat_separator (dtp); + return; + + case '-': + negative = 1; + /* Fall through... */ + + case '+': + c = next_char (dtp); + break; + } + + get_integer: + if (!isdigit (c)) + goto bad_integer; + push_char (dtp, c); + + for (;;) + { + c = next_char (dtp); + switch (c) + { + CASE_DIGITS: + push_char (dtp, c); + break; + + CASE_SEPARATORS: + goto done; + + default: + goto bad_integer; + } + } + + bad_integer: + + if (nml_bad_return (dtp, c)) + return; + + eat_line (dtp); + free_saved (dtp); + sprintf (message, "Bad integer for item %d in list input", + dtp->u.p.item_count); + generate_error (&dtp->common, LIBERROR_READ_VALUE, message); + + return; + + done: + unget_char (dtp, c); + eat_separator (dtp); + + push_char (dtp, '\0'); + if (convert_integer (dtp, length, negative)) + { + free_saved (dtp); + return; + } + + free_saved (dtp); + dtp->u.p.saved_type = BT_INTEGER; +} + + +/* Read a character variable. */ + +static void +read_character (st_parameter_dt *dtp, int length __attribute__ ((unused))) +{ + char c, quote, message[100]; + + quote = ' '; /* Space means no quote character. */ + + c = next_char (dtp); + switch (c) + { + CASE_DIGITS: + push_char (dtp, c); + break; + + CASE_SEPARATORS: + unget_char (dtp, c); /* NULL value. */ + eat_separator (dtp); + return; + + case '"': + case '\'': + quote = c; + goto get_string; + + default: + if (dtp->u.p.namelist_mode) + { + unget_char (dtp, c); + return; + } + + push_char (dtp, c); + goto get_string; + } + + /* Deal with a possible repeat count. */ + + for (;;) + { + c = next_char (dtp); + switch (c) + { + CASE_DIGITS: + push_char (dtp, c); + break; + + CASE_SEPARATORS: + unget_char (dtp, c); + goto done; /* String was only digits! */ + + case '*': + push_char (dtp, '\0'); + goto got_repeat; + + default: + push_char (dtp, c); + goto get_string; /* Not a repeat count after all. */ + } + } + + got_repeat: + if (convert_integer (dtp, -1, 0)) + return; + + /* Now get the real string. */ + + c = next_char (dtp); + switch (c) + { + CASE_SEPARATORS: + unget_char (dtp, c); /* Repeated NULL values. */ + eat_separator (dtp); + return; + + case '"': + case '\'': + quote = c; + break; + + default: + push_char (dtp, c); + break; + } + + get_string: + for (;;) + { + c = next_char (dtp); + switch (c) + { + case '"': + case '\'': + if (c != quote) + { + push_char (dtp, c); + break; + } + + /* See if we have a doubled quote character or the end of + the string. */ + + c = next_char (dtp); + if (c == quote) + { + push_char (dtp, quote); + break; + } + + unget_char (dtp, c); + goto done; + + CASE_SEPARATORS: + if (quote == ' ') + { + unget_char (dtp, c); + goto done; + } + + if (c != '\n' && c != '\r') + push_char (dtp, c); + break; + + default: + push_char (dtp, c); + break; + } + } + + /* At this point, we have to have a separator, or else the string is + invalid. */ + done: + c = next_char (dtp); + if (is_separator (c) || c == '!') + { + unget_char (dtp, c); + eat_separator (dtp); + dtp->u.p.saved_type = BT_CHARACTER; + free_line (dtp); + } + else + { + free_saved (dtp); + sprintf (message, "Invalid string input in item %d", + dtp->u.p.item_count); + generate_error (&dtp->common, LIBERROR_READ_VALUE, message); + } +} + + +/* Parse a component of a complex constant or a real number that we + are sure is already there. This is a straight real number parser. */ + +static int +parse_real (st_parameter_dt *dtp, void *buffer, int length) +{ + char c, message[100]; + int m, seen_dp; + + c = next_char (dtp); + if (c == '-' || c == '+') + { + push_char (dtp, c); + c = next_char (dtp); + } + + if (c == ',' && dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA) + c = '.'; + + if (!isdigit (c) && c != '.') + { + if (c == 'i' || c == 'I' || c == 'n' || c == 'N') + goto inf_nan; + else + goto bad; + } + + push_char (dtp, c); + + seen_dp = (c == '.') ? 1 : 0; + + for (;;) + { + c = next_char (dtp); + if (c == ',' && dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA) + c = '.'; + switch (c) + { + CASE_DIGITS: + push_char (dtp, c); + break; + + case '.': + if (seen_dp) + goto bad; + + seen_dp = 1; + push_char (dtp, c); + break; + + case 'e': + case 'E': + case 'd': + case 'D': + push_char (dtp, 'e'); + goto exp1; + + case '-': + case '+': + push_char (dtp, 'e'); + push_char (dtp, c); + c = next_char (dtp); + goto exp2; + + CASE_SEPARATORS: + unget_char (dtp, c); + goto done; + + default: + goto done; + } + } + + exp1: + c = next_char (dtp); + if (c != '-' && c != '+') + push_char (dtp, '+'); + else + { + push_char (dtp, c); + c = next_char (dtp); + } + + exp2: + if (!isdigit (c)) + goto bad; + + push_char (dtp, c); + + for (;;) + { + c = next_char (dtp); + switch (c) + { + CASE_DIGITS: + push_char (dtp, c); + break; + + CASE_SEPARATORS: + unget_char (dtp, c); + goto done; + + default: + goto done; + } + } + + done: + unget_char (dtp, c); + push_char (dtp, '\0'); + + m = convert_real (dtp, buffer, dtp->u.p.saved_string, length); + free_saved (dtp); + + return m; + + inf_nan: + /* Match INF and Infinity. */ + if ((c == 'i' || c == 'I') + && ((c = next_char (dtp)) == 'n' || c == 'N') + && ((c = next_char (dtp)) == 'f' || c == 'F')) + { + c = next_char (dtp); + if ((c != 'i' && c != 'I') + || ((c == 'i' || c == 'I') + && ((c = next_char (dtp)) == 'n' || c == 'N') + && ((c = next_char (dtp)) == 'i' || c == 'I') + && ((c = next_char (dtp)) == 't' || c == 'T') + && ((c = next_char (dtp)) == 'y' || c == 'Y') + && (c = next_char (dtp)))) + { + if (is_separator (c)) + unget_char (dtp, c); + push_char (dtp, 'i'); + push_char (dtp, 'n'); + push_char (dtp, 'f'); + goto done; + } + } /* Match NaN. */ + else if (((c = next_char (dtp)) == 'a' || c == 'A') + && ((c = next_char (dtp)) == 'n' || c == 'N') + && (c = next_char (dtp))) + { + if (is_separator (c)) + unget_char (dtp, c); + push_char (dtp, 'n'); + push_char (dtp, 'a'); + push_char (dtp, 'n'); + goto done; + } + + bad: + + if (nml_bad_return (dtp, c)) + return 0; + + eat_line (dtp); + free_saved (dtp); + sprintf (message, "Bad floating point number for item %d", + dtp->u.p.item_count); + generate_error (&dtp->common, LIBERROR_READ_VALUE, message); + + return 1; +} + + +/* Reading a complex number is straightforward because we can tell + what it is right away. */ + +static void +read_complex (st_parameter_dt *dtp, int kind, size_t size) +{ + char message[100]; + char c; + + if (parse_repeat (dtp)) + return; + + c = next_char (dtp); + switch (c) + { + case '(': + break; + + CASE_SEPARATORS: + unget_char (dtp, c); + eat_separator (dtp); + return; + + default: + goto bad_complex; + } + + eat_spaces (dtp); + if (parse_real (dtp, dtp->u.p.value, kind)) + return; + +eol_1: + eat_spaces (dtp); + c = next_char (dtp); + if (c == '\n' || c== '\r') + goto eol_1; + else + unget_char (dtp, c); + + if (next_char (dtp) + != (dtp->u.p.current_unit->decimal_status == DECIMAL_POINT ? ',' : ';')) + goto bad_complex; + +eol_2: + eat_spaces (dtp); + c = next_char (dtp); + if (c == '\n' || c== '\r') + goto eol_2; + else + unget_char (dtp, c); + + if (parse_real (dtp, dtp->u.p.value + size / 2, kind)) + return; + + eat_spaces (dtp); + if (next_char (dtp) != ')') + goto bad_complex; + + c = next_char (dtp); + if (!is_separator (c)) + goto bad_complex; + + unget_char (dtp, c); + eat_separator (dtp); + + free_saved (dtp); + dtp->u.p.saved_type = BT_COMPLEX; + return; + + bad_complex: + + if (nml_bad_return (dtp, c)) + return; + + eat_line (dtp); + free_saved (dtp); + sprintf (message, "Bad complex value in item %d of list input", + dtp->u.p.item_count); + generate_error (&dtp->common, LIBERROR_READ_VALUE, message); +} + + +/* Parse a real number with a possible repeat count. */ + +static void +read_real (st_parameter_dt *dtp, int length) +{ + char c, message[100]; + int seen_dp; + int is_inf; + + seen_dp = 0; + + c = next_char (dtp); + if (c == ',' && dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA) + c = '.'; + switch (c) + { + CASE_DIGITS: + push_char (dtp, c); + break; + + case '.': + push_char (dtp, c); + seen_dp = 1; + break; + + case '+': + case '-': + goto got_sign; + + CASE_SEPARATORS: + unget_char (dtp, c); /* Single null. */ + eat_separator (dtp); + return; + + case 'i': + case 'I': + case 'n': + case 'N': + goto inf_nan; + + default: + goto bad_real; + } + + /* Get the digit string that might be a repeat count. */ + + for (;;) + { + c = next_char (dtp); + if (c == ',' && dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA) + c = '.'; + switch (c) + { + CASE_DIGITS: + push_char (dtp, c); + break; + + case '.': + if (seen_dp) + goto bad_real; + + seen_dp = 1; + push_char (dtp, c); + goto real_loop; + + case 'E': + case 'e': + case 'D': + case 'd': + goto exp1; + + case '+': + case '-': + push_char (dtp, 'e'); + push_char (dtp, c); + c = next_char (dtp); + goto exp2; + + case '*': + push_char (dtp, '\0'); + goto got_repeat; + + CASE_SEPARATORS: + if (c != '\n' && c != ',' && c != '\r' && c != ';') + unget_char (dtp, c); + goto done; + + default: + goto bad_real; + } + } + + got_repeat: + if (convert_integer (dtp, -1, 0)) + return; + + /* Now get the number itself. */ + + c = next_char (dtp); + if (is_separator (c)) + { /* Repeated null value. */ + unget_char (dtp, c); + eat_separator (dtp); + return; + } + + if (c != '-' && c != '+') + push_char (dtp, '+'); + else + { + got_sign: + push_char (dtp, c); + c = next_char (dtp); + } + + if (c == ',' && dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA) + c = '.'; + + if (!isdigit (c) && c != '.') + { + if (c == 'i' || c == 'I' || c == 'n' || c == 'N') + goto inf_nan; + else + goto bad_real; + } + + if (c == '.') + { + if (seen_dp) + goto bad_real; + else + seen_dp = 1; + } + + push_char (dtp, c); + + real_loop: + for (;;) + { + c = next_char (dtp); + if (c == ',' && dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA) + c = '.'; + switch (c) + { + CASE_DIGITS: + push_char (dtp, c); + break; + + CASE_SEPARATORS: + goto done; + + case '.': + if (seen_dp) + goto bad_real; + + seen_dp = 1; + push_char (dtp, c); + break; + + case 'E': + case 'e': + case 'D': + case 'd': + goto exp1; + + case '+': + case '-': + push_char (dtp, 'e'); + push_char (dtp, c); + c = next_char (dtp); + goto exp2; + + default: + goto bad_real; + } + } + + exp1: + push_char (dtp, 'e'); + + c = next_char (dtp); + if (c != '+' && c != '-') + push_char (dtp, '+'); + else + { + push_char (dtp, c); + c = next_char (dtp); + } + + exp2: + if (!isdigit (c)) + goto bad_real; + push_char (dtp, c); + + for (;;) + { + c = next_char (dtp); + + switch (c) + { + CASE_DIGITS: + push_char (dtp, c); + break; + + CASE_SEPARATORS: + goto done; + + default: + goto bad_real; + } + } + + done: + unget_char (dtp, c); + eat_separator (dtp); + push_char (dtp, '\0'); + if (convert_real (dtp, dtp->u.p.value, dtp->u.p.saved_string, length)) + return; + + free_saved (dtp); + dtp->u.p.saved_type = BT_REAL; + return; + + inf_nan: + l_push_char (dtp, c); + is_inf = 0; + + /* Match INF and Infinity. */ + if (c == 'i' || c == 'I') + { + c = next_char (dtp); + l_push_char (dtp, c); + if (c != 'n' && c != 'N') + goto unwind; + c = next_char (dtp); + l_push_char (dtp, c); + if (c != 'f' && c != 'F') + goto unwind; + c = next_char (dtp); + l_push_char (dtp, c); + if (!is_separator (c)) + { + if (c != 'i' && c != 'I') + goto unwind; + c = next_char (dtp); + l_push_char (dtp, c); + if (c != 'n' && c != 'N') + goto unwind; + c = next_char (dtp); + l_push_char (dtp, c); + if (c != 'i' && c != 'I') + goto unwind; + c = next_char (dtp); + l_push_char (dtp, c); + if (c != 't' && c != 'T') + goto unwind; + c = next_char (dtp); + l_push_char (dtp, c); + if (c != 'y' && c != 'Y') + goto unwind; + c = next_char (dtp); + l_push_char (dtp, c); + } + is_inf = 1; + } /* Match NaN. */ + else + { + c = next_char (dtp); + l_push_char (dtp, c); + if (c != 'a' && c != 'A') + goto unwind; + c = next_char (dtp); + l_push_char (dtp, c); + if (c != 'n' && c != 'N') + goto unwind; + c = next_char (dtp); + l_push_char (dtp, c); + } + + if (!is_separator (c)) + goto unwind; + + if (dtp->u.p.namelist_mode) + { + if (c == ' ' || c =='\n' || c == '\r') + { + do + c = next_char (dtp); + while (c == ' ' || c =='\n' || c == '\r'); + + l_push_char (dtp, c); + + if (c == '=') + goto unwind; + } + } + + if (is_inf) + { + push_char (dtp, 'i'); + push_char (dtp, 'n'); + push_char (dtp, 'f'); + } + else + { + push_char (dtp, 'n'); + push_char (dtp, 'a'); + push_char (dtp, 'n'); + } + + free_line (dtp); + goto done; + + unwind: + if (dtp->u.p.namelist_mode) + { + dtp->u.p.nml_read_error = 1; + dtp->u.p.line_buffer_enabled = 1; + dtp->u.p.item_count = 0; + return; + } + + bad_real: + + if (nml_bad_return (dtp, c)) + return; + + eat_line (dtp); + free_saved (dtp); + sprintf (message, "Bad real number in item %d of list input", + dtp->u.p.item_count); + generate_error (&dtp->common, LIBERROR_READ_VALUE, message); +} + + +/* Check the current type against the saved type to make sure they are + compatible. Returns nonzero if incompatible. */ + +static int +check_type (st_parameter_dt *dtp, bt type, int len) +{ + char message[100]; + + if (dtp->u.p.saved_type != BT_NULL && dtp->u.p.saved_type != type) + { + sprintf (message, "Read type %s where %s was expected for item %d", + type_name (dtp->u.p.saved_type), type_name (type), + dtp->u.p.item_count); + + generate_error (&dtp->common, LIBERROR_READ_VALUE, message); + return 1; + } + + if (dtp->u.p.saved_type == BT_NULL || dtp->u.p.saved_type == BT_CHARACTER) + return 0; + + if (dtp->u.p.saved_length != len) + { + sprintf (message, + "Read kind %d %s where kind %d is required for item %d", + dtp->u.p.saved_length, type_name (dtp->u.p.saved_type), len, + dtp->u.p.item_count); + generate_error (&dtp->common, LIBERROR_READ_VALUE, message); + return 1; + } + + return 0; +} + + +/* Top level data transfer subroutine for list reads. Because we have + to deal with repeat counts, the data item is always saved after + reading, usually in the dtp->u.p.value[] array. If a repeat count is + greater than one, we copy the data item multiple times. */ + +static void +list_formatted_read_scalar (st_parameter_dt *dtp, volatile bt type, void *p, + int kind, size_t size) +{ + char c; + gfc_char4_t *q; + int i, m; + jmp_buf eof_jump; + + dtp->u.p.namelist_mode = 0; + + dtp->u.p.eof_jump = &eof_jump; + if (setjmp (eof_jump)) + { + generate_error (&dtp->common, LIBERROR_END, NULL); + goto cleanup; + } + + if (dtp->u.p.first_item) + { + dtp->u.p.first_item = 0; + dtp->u.p.input_complete = 0; + dtp->u.p.repeat_count = 1; + dtp->u.p.at_eol = 0; + + c = eat_spaces (dtp); + if (is_separator (c)) + { + /* Found a null value. */ + eat_separator (dtp); + dtp->u.p.repeat_count = 0; + + /* eat_separator sets this flag if the separator was a comma. */ + if (dtp->u.p.comma_flag) + goto cleanup; + + /* eat_separator sets this flag if the separator was a \n or \r. */ + if (dtp->u.p.at_eol) + finish_separator (dtp); + else + goto cleanup; + } + + } + else + { + if (dtp->u.p.repeat_count > 0) + { + if (check_type (dtp, type, kind)) + return; + goto set_value; + } + + if (dtp->u.p.input_complete) + goto cleanup; + + if (dtp->u.p.at_eol) + finish_separator (dtp); + else + { + eat_spaces (dtp); + /* Trailing spaces prior to end of line. */ + if (dtp->u.p.at_eol) + finish_separator (dtp); + } + + dtp->u.p.saved_type = BT_NULL; + dtp->u.p.repeat_count = 1; + } + + switch (type) + { + case BT_INTEGER: + read_integer (dtp, kind); + break; + case BT_LOGICAL: + read_logical (dtp, kind); + break; + case BT_CHARACTER: + read_character (dtp, kind); + break; + case BT_REAL: + read_real (dtp, kind); + break; + case BT_COMPLEX: + read_complex (dtp, kind, size); + break; + default: + internal_error (&dtp->common, "Bad type for list read"); + } + + if (dtp->u.p.saved_type != BT_CHARACTER && dtp->u.p.saved_type != BT_NULL) + dtp->u.p.saved_length = size; + + if ((dtp->common.flags & IOPARM_LIBRETURN_MASK) != IOPARM_LIBRETURN_OK) + goto cleanup; + + set_value: + switch (dtp->u.p.saved_type) + { + case BT_COMPLEX: + case BT_INTEGER: + case BT_REAL: + case BT_LOGICAL: + memcpy (p, dtp->u.p.value, size); + break; + + case BT_CHARACTER: + if (dtp->u.p.saved_string) + { + m = ((int) size < dtp->u.p.saved_used) + ? (int) size : dtp->u.p.saved_used; + if (kind == 1) + memcpy (p, dtp->u.p.saved_string, m); + else + { + q = (gfc_char4_t *) p; + for (i = 0; i < m; i++) + q[i] = (unsigned char) dtp->u.p.saved_string[i]; + } + } + else + /* Just delimiters encountered, nothing to copy but SPACE. */ + m = 0; + + if (m < (int) size) + { + if (kind == 1) + memset (((char *) p) + m, ' ', size - m); + else + { + q = (gfc_char4_t *) p; + for (i = m; i < (int) size; i++) + q[i] = (unsigned char) ' '; + } + } + break; + + case BT_NULL: + break; + } + + if (--dtp->u.p.repeat_count <= 0) + free_saved (dtp); + +cleanup: + dtp->u.p.eof_jump = NULL; +} + + +void +list_formatted_read (st_parameter_dt *dtp, bt type, void *p, int kind, + size_t size, size_t nelems) +{ + size_t elem; + char *tmp; + size_t stride = type == BT_CHARACTER ? + size * GFC_SIZE_OF_CHAR_KIND(kind) : size; + + tmp = (char *) p; + + /* Big loop over all the elements. */ + for (elem = 0; elem < nelems; elem++) + { + dtp->u.p.item_count++; + list_formatted_read_scalar (dtp, type, tmp + stride*elem, kind, size); + } +} + + +/* Finish a list read. */ + +void +finish_list_read (st_parameter_dt *dtp) +{ + char c; + + free_saved (dtp); + + if (dtp->u.p.at_eol) + { + dtp->u.p.at_eol = 0; + return; + } + + do + { + c = next_char (dtp); + } + while (c != '\n'); + + if (dtp->u.p.current_unit->endfile != NO_ENDFILE) + { + generate_error (&dtp->common, LIBERROR_END, NULL); + dtp->u.p.current_unit->endfile = AFTER_ENDFILE; + dtp->u.p.current_unit->current_record = 0; + } +} + +/* NAMELIST INPUT + +void namelist_read (st_parameter_dt *dtp) +calls: + static void nml_match_name (char *name, int len) + static int nml_query (st_parameter_dt *dtp) + static int nml_get_obj_data (st_parameter_dt *dtp, + namelist_info **prev_nl, char *, size_t) +calls: + static void nml_untouch_nodes (st_parameter_dt *dtp) + static namelist_info * find_nml_node (st_parameter_dt *dtp, + char * var_name) + static int nml_parse_qualifier(descriptor_dimension * ad, + array_loop_spec * ls, int rank, char *) + static void nml_touch_nodes (namelist_info * nl) + static int nml_read_obj (namelist_info *nl, index_type offset, + namelist_info **prev_nl, char *, size_t, + index_type clow, index_type chigh) +calls: + -itself- */ + +/* Inputs a rank-dimensional qualifier, which can contain + singlets, doublets, triplets or ':' with the standard meanings. */ + +static try +nml_parse_qualifier (st_parameter_dt *dtp, descriptor_dimension *ad, + array_loop_spec *ls, int rank, char *parse_err_msg, + int *parsed_rank) +{ + int dim; + int indx; + int neg; + int null_flag; + int is_array_section, is_char; + char c; + + is_char = 0; + is_array_section = 0; + dtp->u.p.expanded_read = 0; + + /* See if this is a character substring qualifier we are looking for. */ + if (rank == -1) + { + rank = 1; + is_char = 1; + } + + /* The next character in the stream should be the '('. */ + + c = next_char (dtp); + + /* Process the qualifier, by dimension and triplet. */ + + for (dim=0; dim < rank; dim++ ) + { + for (indx=0; indx<3; indx++) + { + free_saved (dtp); + eat_spaces (dtp); + neg = 0; + + /* Process a potential sign. */ + c = next_char (dtp); + switch (c) + { + case '-': + neg = 1; + break; + + case '+': + break; + + default: + unget_char (dtp, c); + break; + } + + /* Process characters up to the next ':' , ',' or ')'. */ + for (;;) + { + c = next_char (dtp); + + switch (c) + { + case ':': + is_array_section = 1; + break; + + case ',': case ')': + if ((c==',' && dim == rank -1) + || (c==')' && dim < rank -1)) + { + if (is_char) + sprintf (parse_err_msg, "Bad substring qualifier"); + else + sprintf (parse_err_msg, "Bad number of index fields"); + goto err_ret; + } + break; + + CASE_DIGITS: + push_char (dtp, c); + continue; + + case ' ': case '\t': + eat_spaces (dtp); + c = next_char (dtp); + break; + + default: + if (is_char) + sprintf (parse_err_msg, + "Bad character in substring qualifier"); + else + sprintf (parse_err_msg, "Bad character in index"); + goto err_ret; + } + + if ((c == ',' || c == ')') && indx == 0 + && dtp->u.p.saved_string == 0) + { + if (is_char) + sprintf (parse_err_msg, "Null substring qualifier"); + else + sprintf (parse_err_msg, "Null index field"); + goto err_ret; + } + + if ((c == ':' && indx == 1 && dtp->u.p.saved_string == 0) + || (indx == 2 && dtp->u.p.saved_string == 0)) + { + if (is_char) + sprintf (parse_err_msg, "Bad substring qualifier"); + else + sprintf (parse_err_msg, "Bad index triplet"); + goto err_ret; + } + + if (is_char && !is_array_section) + { + sprintf (parse_err_msg, + "Missing colon in substring qualifier"); + goto err_ret; + } + + /* If '( : ? )' or '( ? : )' break and flag read failure. */ + null_flag = 0; + if ((c == ':' && indx == 0 && dtp->u.p.saved_string == 0) + || (indx==1 && dtp->u.p.saved_string == 0)) + { + null_flag = 1; + break; + } + + /* Now read the index. */ + if (convert_integer (dtp, sizeof(ssize_t), neg)) + { + if (is_char) + sprintf (parse_err_msg, "Bad integer substring qualifier"); + else + sprintf (parse_err_msg, "Bad integer in index"); + goto err_ret; + } + break; + } + + /* Feed the index values to the triplet arrays. */ + if (!null_flag) + { + if (indx == 0) + memcpy (&ls[dim].start, dtp->u.p.value, sizeof(ssize_t)); + if (indx == 1) + memcpy (&ls[dim].end, dtp->u.p.value, sizeof(ssize_t)); + if (indx == 2) + memcpy (&ls[dim].step, dtp->u.p.value, sizeof(ssize_t)); + } + + /* Singlet or doublet indices. */ + if (c==',' || c==')') + { + if (indx == 0) + { + memcpy (&ls[dim].start, dtp->u.p.value, sizeof(ssize_t)); + + /* If -std=f95/2003 or an array section is specified, + do not allow excess data to be processed. */ + if (is_array_section == 1 + || compile_options.allow_std < GFC_STD_GNU) + ls[dim].end = ls[dim].start; + else + dtp->u.p.expanded_read = 1; + } + + /* Check for non-zero rank. */ + if (is_array_section == 1 && ls[dim].start != ls[dim].end) + *parsed_rank = 1; + + break; + } + } + + /* Check the values of the triplet indices. */ + if ((ls[dim].start > (ssize_t)ad[dim].ubound) + || (ls[dim].start < (ssize_t)ad[dim].lbound) + || (ls[dim].end > (ssize_t)ad[dim].ubound) + || (ls[dim].end < (ssize_t)ad[dim].lbound)) + { + if (is_char) + sprintf (parse_err_msg, "Substring out of range"); + else + sprintf (parse_err_msg, "Index %d out of range", dim + 1); + goto err_ret; + } + + if (((ls[dim].end - ls[dim].start ) * ls[dim].step < 0) + || (ls[dim].step == 0)) + { + sprintf (parse_err_msg, "Bad range in index %d", dim + 1); + goto err_ret; + } + + /* Initialise the loop index counter. */ + ls[dim].idx = ls[dim].start; + } + eat_spaces (dtp); + return SUCCESS; + +err_ret: + + return FAILURE; +} + +static namelist_info * +find_nml_node (st_parameter_dt *dtp, char * var_name) +{ + namelist_info * t = dtp->u.p.ionml; + while (t != NULL) + { + if (strcmp (var_name, t->var_name) == 0) + { + t->touched = 1; + return t; + } + t = t->next; + } + return NULL; +} + +/* Visits all the components of a derived type that have + not explicitly been identified in the namelist input. + touched is set and the loop specification initialised + to default values */ + +static void +nml_touch_nodes (namelist_info * nl) +{ + index_type len = strlen (nl->var_name) + 1; + int dim; + char * ext_name = (char*)get_mem (len + 1); + memcpy (ext_name, nl->var_name, len-1); + memcpy (ext_name + len - 1, "%", 2); + for (nl = nl->next; nl; nl = nl->next) + { + if (strncmp (nl->var_name, ext_name, len) == 0) + { + nl->touched = 1; + for (dim=0; dim < nl->var_rank; dim++) + { + nl->ls[dim].step = 1; + nl->ls[dim].end = nl->dim[dim].ubound; + nl->ls[dim].start = nl->dim[dim].lbound; + nl->ls[dim].idx = nl->ls[dim].start; + } + } + else + break; + } + free_mem (ext_name); + return; +} + +/* Resets touched for the entire list of nml_nodes, ready for a + new object. */ + +static void +nml_untouch_nodes (st_parameter_dt *dtp) +{ + namelist_info * t; + for (t = dtp->u.p.ionml; t; t = t->next) + t->touched = 0; + return; +} + +/* Attempts to input name to namelist name. Returns + dtp->u.p.nml_read_error = 1 on no match. */ + +static void +nml_match_name (st_parameter_dt *dtp, const char *name, index_type len) +{ + index_type i; + char c; + dtp->u.p.nml_read_error = 0; + for (i = 0; i < len; i++) + { + c = next_char (dtp); + if (tolower (c) != tolower (name[i])) + { + dtp->u.p.nml_read_error = 1; + break; + } + } +} + +/* If the namelist read is from stdin, output the current state of the + namelist to stdout. This is used to implement the non-standard query + features, ? and =?. If c == '=' the full namelist is printed. Otherwise + the names alone are printed. */ + +static void +nml_query (st_parameter_dt *dtp, char c) +{ + gfc_unit * temp_unit; + namelist_info * nl; + index_type len; + char * p; +#ifdef HAVE_CRLF + static const index_type endlen = 3; + static const char endl[] = "\r\n"; + static const char nmlend[] = "&end\r\n"; +#else + static const index_type endlen = 2; + static const char endl[] = "\n"; + static const char nmlend[] = "&end\n"; +#endif + + if (dtp->u.p.current_unit->unit_number != options.stdin_unit) + return; + + /* Store the current unit and transfer to stdout. */ + + temp_unit = dtp->u.p.current_unit; + dtp->u.p.current_unit = find_unit (options.stdout_unit); + + if (dtp->u.p.current_unit) + { + dtp->u.p.mode = WRITING; + next_record (dtp, 0); + + /* Write the namelist in its entirety. */ + + if (c == '=') + namelist_write (dtp); + + /* Or write the list of names. */ + + else + { + /* "&namelist_name\n" */ + + len = dtp->namelist_name_len; + p = write_block (dtp, len + endlen); + if (!p) + goto query_return; + memcpy (p, "&", 1); + memcpy ((char*)(p + 1), dtp->namelist_name, len); + memcpy ((char*)(p + len + 1), &endl, endlen - 1); + for (nl = dtp->u.p.ionml; nl; nl = nl->next) + { + /* " var_name\n" */ + + len = strlen (nl->var_name); + p = write_block (dtp, len + endlen); + if (!p) + goto query_return; + memcpy (p, " ", 1); + memcpy ((char*)(p + 1), nl->var_name, len); + memcpy ((char*)(p + len + 1), &endl, endlen - 1); + } + + /* "&end\n" */ + + p = write_block (dtp, endlen + 3); + goto query_return; + memcpy (p, &nmlend, endlen + 3); + } + + /* Flush the stream to force immediate output. */ + + fbuf_flush (dtp->u.p.current_unit, 1); + flush (dtp->u.p.current_unit->s); + unlock_unit (dtp->u.p.current_unit); + } + +query_return: + + /* Restore the current unit. */ + + dtp->u.p.current_unit = temp_unit; + dtp->u.p.mode = READING; + return; +} + +/* Reads and stores the input for the namelist object nl. For an array, + the function loops over the ranges defined by the loop specification. + This default to all the data or to the specification from a qualifier. + nml_read_obj recursively calls itself to read derived types. It visits + all its own components but only reads data for those that were touched + when the name was parsed. If a read error is encountered, an attempt is + made to return to read a new object name because the standard allows too + little data to be available. On the other hand, too much data is an + error. */ + +static try +nml_read_obj (st_parameter_dt *dtp, namelist_info * nl, index_type offset, + namelist_info **pprev_nl, char *nml_err_msg, + size_t nml_err_msg_size, index_type clow, index_type chigh) +{ + namelist_info * cmp; + char * obj_name; + int nml_carry; + int len; + int dim; + index_type dlen; + index_type m; + index_type obj_name_len; + void * pdata; + + /* This object not touched in name parsing. */ + + if (!nl->touched) + return SUCCESS; + + dtp->u.p.repeat_count = 0; + eat_spaces (dtp); + + len = nl->len; + switch (nl->type) + { + case GFC_DTYPE_INTEGER: + case GFC_DTYPE_LOGICAL: + dlen = len; + break; + + case GFC_DTYPE_REAL: + dlen = size_from_real_kind (len); + break; + + case GFC_DTYPE_COMPLEX: + dlen = size_from_complex_kind (len); + break; + + case GFC_DTYPE_CHARACTER: + dlen = chigh ? (chigh - clow + 1) : nl->string_length; + break; + + default: + dlen = 0; + } + + do + { + /* Update the pointer to the data, using the current index vector */ + + pdata = (void*)(nl->mem_pos + offset); + for (dim = 0; dim < nl->var_rank; dim++) + pdata = (void*)(pdata + (nl->ls[dim].idx - nl->dim[dim].lbound) * + nl->dim[dim].stride * nl->size); + + /* Reset the error flag and try to read next value, if + dtp->u.p.repeat_count=0 */ + + dtp->u.p.nml_read_error = 0; + nml_carry = 0; + if (--dtp->u.p.repeat_count <= 0) + { + if (dtp->u.p.input_complete) + return SUCCESS; + if (dtp->u.p.at_eol) + finish_separator (dtp); + if (dtp->u.p.input_complete) + return SUCCESS; + + /* GFC_TYPE_UNKNOWN through for nulls and is detected + after the switch block. */ + + dtp->u.p.saved_type = GFC_DTYPE_UNKNOWN; + free_saved (dtp); + + switch (nl->type) + { + case GFC_DTYPE_INTEGER: + read_integer (dtp, len); + break; + + case GFC_DTYPE_LOGICAL: + read_logical (dtp, len); + break; + + case GFC_DTYPE_CHARACTER: + read_character (dtp, len); + break; + + case GFC_DTYPE_REAL: + read_real (dtp, len); + break; + + case GFC_DTYPE_COMPLEX: + read_complex (dtp, len, dlen); + break; + + case GFC_DTYPE_DERIVED: + obj_name_len = strlen (nl->var_name) + 1; + obj_name = get_mem (obj_name_len+1); + memcpy (obj_name, nl->var_name, obj_name_len-1); + memcpy (obj_name + obj_name_len - 1, "%", 2); + + /* If reading a derived type, disable the expanded read warning + since a single object can have multiple reads. */ + dtp->u.p.expanded_read = 0; + + /* Now loop over the components. Update the component pointer + with the return value from nml_write_obj. This loop jumps + past nested derived types by testing if the potential + component name contains '%'. */ + + for (cmp = nl->next; + cmp && + !strncmp (cmp->var_name, obj_name, obj_name_len) && + !strchr (cmp->var_name + obj_name_len, '%'); + cmp = cmp->next) + { + + if (nml_read_obj (dtp, cmp, (index_type)(pdata - nl->mem_pos), + pprev_nl, nml_err_msg, nml_err_msg_size, + clow, chigh) == FAILURE) + { + free_mem (obj_name); + return FAILURE; + } + + if (dtp->u.p.input_complete) + { + free_mem (obj_name); + return SUCCESS; + } + } + + free_mem (obj_name); + goto incr_idx; + + default: + snprintf (nml_err_msg, nml_err_msg_size, + "Bad type for namelist object %s", nl->var_name); + internal_error (&dtp->common, nml_err_msg); + goto nml_err_ret; + } + } + + /* The standard permits array data to stop short of the number of + elements specified in the loop specification. In this case, we + should be here with dtp->u.p.nml_read_error != 0. Control returns to + nml_get_obj_data and an attempt is made to read object name. */ + + *pprev_nl = nl; + if (dtp->u.p.nml_read_error) + { + dtp->u.p.expanded_read = 0; + return SUCCESS; + } + + if (dtp->u.p.saved_type == GFC_DTYPE_UNKNOWN) + { + dtp->u.p.expanded_read = 0; + goto incr_idx; + } + + /* Note the switch from GFC_DTYPE_type to BT_type at this point. + This comes about because the read functions return BT_types. */ + + switch (dtp->u.p.saved_type) + { + + case BT_COMPLEX: + case BT_REAL: + case BT_INTEGER: + case BT_LOGICAL: + memcpy (pdata, dtp->u.p.value, dlen); + break; + + case BT_CHARACTER: + m = (dlen < dtp->u.p.saved_used) ? dlen : dtp->u.p.saved_used; + pdata = (void*)( pdata + clow - 1 ); + memcpy (pdata, dtp->u.p.saved_string, m); + if (m < dlen) + memset ((void*)( pdata + m ), ' ', dlen - m); + break; + + default: + break; + } + + /* Warn if a non-standard expanded read occurs. A single read of a + single object is acceptable. If a second read occurs, issue a warning + and set the flag to zero to prevent further warnings. */ + if (dtp->u.p.expanded_read == 2) + { + notify_std (&dtp->common, GFC_STD_GNU, "Non-standard expanded namelist read."); + dtp->u.p.expanded_read = 0; + } + + /* If the expanded read warning flag is set, increment it, + indicating that a single read has occurred. */ + if (dtp->u.p.expanded_read >= 1) + dtp->u.p.expanded_read++; + + /* Break out of loop if scalar. */ + if (!nl->var_rank) + break; + + /* Now increment the index vector. */ + +incr_idx: + + nml_carry = 1; + for (dim = 0; dim < nl->var_rank; dim++) + { + nl->ls[dim].idx += nml_carry * nl->ls[dim].step; + nml_carry = 0; + if (((nl->ls[dim].step > 0) && (nl->ls[dim].idx > nl->ls[dim].end)) + || + ((nl->ls[dim].step < 0) && (nl->ls[dim].idx < nl->ls[dim].end))) + { + nl->ls[dim].idx = nl->ls[dim].start; + nml_carry = 1; + } + } + } while (!nml_carry); + + if (dtp->u.p.repeat_count > 1) + { + snprintf (nml_err_msg, nml_err_msg_size, + "Repeat count too large for namelist object %s", nl->var_name); + goto nml_err_ret; + } + return SUCCESS; + +nml_err_ret: + + return FAILURE; +} + +/* Parses the object name, including array and substring qualifiers. It + iterates over derived type components, touching those components and + setting their loop specifications, if there is a qualifier. If the + object is itself a derived type, its components and subcomponents are + touched. nml_read_obj is called at the end and this reads the data in + the manner specified by the object name. */ + +static try +nml_get_obj_data (st_parameter_dt *dtp, namelist_info **pprev_nl, + char *nml_err_msg, size_t nml_err_msg_size) +{ + char c; + namelist_info * nl; + namelist_info * first_nl = NULL; + namelist_info * root_nl = NULL; + int dim, parsed_rank; + int component_flag; + index_type clow, chigh; + int non_zero_rank_count; + + /* Look for end of input or object name. If '?' or '=?' are encountered + in stdin, print the node names or the namelist to stdout. */ + + eat_separator (dtp); + if (dtp->u.p.input_complete) + return SUCCESS; + + if (dtp->u.p.at_eol) + finish_separator (dtp); + if (dtp->u.p.input_complete) + return SUCCESS; + + c = next_char (dtp); + switch (c) + { + case '=': + c = next_char (dtp); + if (c != '?') + { + sprintf (nml_err_msg, "namelist read: misplaced = sign"); + goto nml_err_ret; + } + nml_query (dtp, '='); + return SUCCESS; + + case '?': + nml_query (dtp, '?'); + return SUCCESS; + + case '$': + case '&': + nml_match_name (dtp, "end", 3); + if (dtp->u.p.nml_read_error) + { + sprintf (nml_err_msg, "namelist not terminated with / or &end"); + goto nml_err_ret; + } + case '/': + dtp->u.p.input_complete = 1; + return SUCCESS; + + default : + break; + } + + /* Untouch all nodes of the namelist and reset the flag that is set for + derived type components. */ + + nml_untouch_nodes (dtp); + component_flag = 0; + non_zero_rank_count = 0; + + /* Get the object name - should '!' and '\n' be permitted separators? */ + +get_name: + + free_saved (dtp); + + do + { + if (!is_separator (c)) + push_char (dtp, tolower(c)); + c = next_char (dtp); + } while (!( c=='=' || c==' ' || c=='\t' || c =='(' || c =='%' )); + + unget_char (dtp, c); + + /* Check that the name is in the namelist and get pointer to object. + Three error conditions exist: (i) An attempt is being made to + identify a non-existent object, following a failed data read or + (ii) The object name does not exist or (iii) Too many data items + are present for an object. (iii) gives the same error message + as (i) */ + + push_char (dtp, '\0'); + + if (component_flag) + { + size_t var_len = strlen (root_nl->var_name); + size_t saved_len + = dtp->u.p.saved_string ? strlen (dtp->u.p.saved_string) : 0; + char ext_name[var_len + saved_len + 1]; + + memcpy (ext_name, root_nl->var_name, var_len); + if (dtp->u.p.saved_string) + memcpy (ext_name + var_len, dtp->u.p.saved_string, saved_len); + ext_name[var_len + saved_len] = '\0'; + nl = find_nml_node (dtp, ext_name); + } + else + nl = find_nml_node (dtp, dtp->u.p.saved_string); + + if (nl == NULL) + { + if (dtp->u.p.nml_read_error && *pprev_nl) + snprintf (nml_err_msg, nml_err_msg_size, + "Bad data for namelist object %s", (*pprev_nl)->var_name); + + else + snprintf (nml_err_msg, nml_err_msg_size, + "Cannot match namelist object name %s", + dtp->u.p.saved_string); + + goto nml_err_ret; + } + + /* Get the length, data length, base pointer and rank of the variable. + Set the default loop specification first. */ + + for (dim=0; dim < nl->var_rank; dim++) + { + nl->ls[dim].step = 1; + nl->ls[dim].end = nl->dim[dim].ubound; + nl->ls[dim].start = nl->dim[dim].lbound; + nl->ls[dim].idx = nl->ls[dim].start; + } + +/* Check to see if there is a qualifier: if so, parse it.*/ + + if (c == '(' && nl->var_rank) + { + parsed_rank = 0; + if (nml_parse_qualifier (dtp, nl->dim, nl->ls, nl->var_rank, + nml_err_msg, &parsed_rank) == FAILURE) + { + char *nml_err_msg_end = strchr (nml_err_msg, '\0'); + snprintf (nml_err_msg_end, + nml_err_msg_size - (nml_err_msg_end - nml_err_msg), + " for namelist variable %s", nl->var_name); + goto nml_err_ret; + } + + if (parsed_rank > 0) + non_zero_rank_count++; + + c = next_char (dtp); + unget_char (dtp, c); + } + else if (nl->var_rank > 0) + non_zero_rank_count++; + + /* Now parse a derived type component. The root namelist_info address + is backed up, as is the previous component level. The component flag + is set and the iteration is made by jumping back to get_name. */ + + if (c == '%') + { + if (nl->type != GFC_DTYPE_DERIVED) + { + snprintf (nml_err_msg, nml_err_msg_size, + "Attempt to get derived component for %s", nl->var_name); + goto nml_err_ret; + } + + if (!component_flag) + first_nl = nl; + + root_nl = nl; + component_flag = 1; + c = next_char (dtp); + goto get_name; + } + + /* Parse a character qualifier, if present. chigh = 0 is a default + that signals that the string length = string_length. */ + + clow = 1; + chigh = 0; + + if (c == '(' && nl->type == GFC_DTYPE_CHARACTER) + { + descriptor_dimension chd[1] = { {1, clow, nl->string_length} }; + array_loop_spec ind[1] = { {1, clow, nl->string_length, 1} }; + + if (nml_parse_qualifier (dtp, chd, ind, -1, nml_err_msg, &parsed_rank) + == FAILURE) + { + char *nml_err_msg_end = strchr (nml_err_msg, '\0'); + snprintf (nml_err_msg_end, + nml_err_msg_size - (nml_err_msg_end - nml_err_msg), + " for namelist variable %s", nl->var_name); + goto nml_err_ret; + } + + clow = ind[0].start; + chigh = ind[0].end; + + if (ind[0].step != 1) + { + snprintf (nml_err_msg, nml_err_msg_size, + "Step not allowed in substring qualifier" + " for namelist object %s", nl->var_name); + goto nml_err_ret; + } + + c = next_char (dtp); + unget_char (dtp, c); + } + + /* If a derived type touch its components and restore the root + namelist_info if we have parsed a qualified derived type + component. */ + + if (nl->type == GFC_DTYPE_DERIVED) + nml_touch_nodes (nl); + if (component_flag && nl->var_rank > 0) + nl = first_nl; + + /* Make sure no extraneous qualifiers are there. */ + + if (c == '(') + { + snprintf (nml_err_msg, nml_err_msg_size, + "Qualifier for a scalar or non-character namelist object %s", + nl->var_name); + goto nml_err_ret; + } + + /* Make sure there is no more than one non-zero rank object. */ + if (non_zero_rank_count > 1) + { + snprintf (nml_err_msg, nml_err_msg_size, + "Multiple sub-objects with non-zero rank in namelist object %s", + nl->var_name); + non_zero_rank_count = 0; + goto nml_err_ret; + } + +/* According to the standard, an equal sign MUST follow an object name. The + following is possibly lax - it allows comments, blank lines and so on to + intervene. eat_spaces (dtp); c = next_char (dtp); would be compliant*/ + + free_saved (dtp); + + eat_separator (dtp); + if (dtp->u.p.input_complete) + return SUCCESS; + + if (dtp->u.p.at_eol) + finish_separator (dtp); + if (dtp->u.p.input_complete) + return SUCCESS; + + c = next_char (dtp); + + if (c != '=') + { + snprintf (nml_err_msg, nml_err_msg_size, + "Equal sign must follow namelist object name %s", + nl->var_name); + goto nml_err_ret; + } + + if (first_nl != NULL && first_nl->var_rank > 0) + nl = first_nl; + + if (nml_read_obj (dtp, nl, 0, pprev_nl, nml_err_msg, nml_err_msg_size, + clow, chigh) == FAILURE) + goto nml_err_ret; + + return SUCCESS; + +nml_err_ret: + + return FAILURE; +} + +/* Entry point for namelist input. Goes through input until namelist name + is matched. Then cycles through nml_get_obj_data until the input is + completed or there is an error. */ + +void +namelist_read (st_parameter_dt *dtp) +{ + char c; + jmp_buf eof_jump; + char nml_err_msg[200]; + /* Pointer to the previously read object, in case attempt is made to read + new object name. Should this fail, error message can give previous + name. */ + namelist_info *prev_nl = NULL; + + dtp->u.p.namelist_mode = 1; + dtp->u.p.input_complete = 0; + dtp->u.p.expanded_read = 0; + + dtp->u.p.eof_jump = &eof_jump; + if (setjmp (eof_jump)) + { + dtp->u.p.eof_jump = NULL; + generate_error (&dtp->common, LIBERROR_END, NULL); + return; + } + + /* Look for &namelist_name . Skip all characters, testing for $nmlname. + Exit on success or EOF. If '?' or '=?' encountered in stdin, print + node names or namelist on stdout. */ + +find_nml_name: + switch (c = next_char (dtp)) + { + case '$': + case '&': + break; + + case '!': + eat_line (dtp); + goto find_nml_name; + + case '=': + c = next_char (dtp); + if (c == '?') + nml_query (dtp, '='); + else + unget_char (dtp, c); + goto find_nml_name; + + case '?': + nml_query (dtp, '?'); + + default: + goto find_nml_name; + } + + /* Match the name of the namelist. */ + + nml_match_name (dtp, dtp->namelist_name, dtp->namelist_name_len); + + if (dtp->u.p.nml_read_error) + goto find_nml_name; + + /* A trailing space is required, we give a little lattitude here, 10.9.1. */ + c = next_char (dtp); + if (!is_separator(c) && c != '!') + { + unget_char (dtp, c); + goto find_nml_name; + } + + unget_char (dtp, c); + eat_separator (dtp); + + /* Ready to read namelist objects. If there is an error in input + from stdin, output the error message and continue. */ + + while (!dtp->u.p.input_complete) + { + if (nml_get_obj_data (dtp, &prev_nl, nml_err_msg, sizeof nml_err_msg) + == FAILURE) + { + gfc_unit *u; + + if (dtp->u.p.current_unit->unit_number != options.stdin_unit) + goto nml_err_ret; + + u = find_unit (options.stderr_unit); + st_printf ("%s\n", nml_err_msg); + if (u != NULL) + { + flush (u->s); + unlock_unit (u); + } + } + + } + + dtp->u.p.eof_jump = NULL; + free_saved (dtp); + free_line (dtp); + return; + + /* All namelist error calls return from here */ + +nml_err_ret: + + dtp->u.p.eof_jump = NULL; + free_saved (dtp); + free_line (dtp); + generate_error (&dtp->common, LIBERROR_READ_VALUE, nml_err_msg); + return; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/lock.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/lock.c new file mode 100644 index 0000000000..7388557999 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/lock.c @@ -0,0 +1,65 @@ +/* Thread/recursion locking + Copyright 2002, 2003, 2004, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook and Andy Vaught + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "io.h" +#include + +/* library_start()-- Called with a library call is entered. */ + +void +library_start (st_parameter_common *cmp) +{ + if ((cmp->flags & IOPARM_LIBRETURN_ERROR) != 0) + return; + + cmp->flags &= ~IOPARM_LIBRETURN_MASK; +} + + +void +free_ionml (st_parameter_dt *dtp) +{ + namelist_info * t1, *t2; + + /* Delete the namelist, if it exists. */ + + if (dtp->u.p.ionml != NULL) + { + t1 = dtp->u.p.ionml; + while (t1 != NULL) + { + t2 = t1; + t1 = t1->next; + free_mem (t2->var_name); + if (t2->var_rank) + { + free_mem (t2->dim); + free_mem (t2->ls); + } + free_mem (t2); + } + } + dtp->u.p.ionml = NULL; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/open.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/open.c new file mode 100644 index 0000000000..edc9ca217c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/open.c @@ -0,0 +1,857 @@ +/* Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught + F2003 I/O support contributed by Jerry DeLisle + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "io.h" +#include +#include +#include + + +static const st_option access_opt[] = { + {"sequential", ACCESS_SEQUENTIAL}, + {"direct", ACCESS_DIRECT}, + {"append", ACCESS_APPEND}, + {"stream", ACCESS_STREAM}, + {NULL, 0} +}; + +static const st_option action_opt[] = +{ + { "read", ACTION_READ}, + { "write", ACTION_WRITE}, + { "readwrite", ACTION_READWRITE}, + { NULL, 0} +}; + +static const st_option blank_opt[] = +{ + { "null", BLANK_NULL}, + { "zero", BLANK_ZERO}, + { NULL, 0} +}; + +static const st_option delim_opt[] = +{ + { "none", DELIM_NONE}, + { "apostrophe", DELIM_APOSTROPHE}, + { "quote", DELIM_QUOTE}, + { NULL, 0} +}; + +static const st_option form_opt[] = +{ + { "formatted", FORM_FORMATTED}, + { "unformatted", FORM_UNFORMATTED}, + { NULL, 0} +}; + +static const st_option position_opt[] = +{ + { "asis", POSITION_ASIS}, + { "rewind", POSITION_REWIND}, + { "append", POSITION_APPEND}, + { NULL, 0} +}; + +static const st_option status_opt[] = +{ + { "unknown", STATUS_UNKNOWN}, + { "old", STATUS_OLD}, + { "new", STATUS_NEW}, + { "replace", STATUS_REPLACE}, + { "scratch", STATUS_SCRATCH}, + { NULL, 0} +}; + +static const st_option pad_opt[] = +{ + { "yes", PAD_YES}, + { "no", PAD_NO}, + { NULL, 0} +}; + +static const st_option decimal_opt[] = +{ + { "point", DECIMAL_POINT}, + { "comma", DECIMAL_COMMA}, + { NULL, 0} +}; + +static const st_option encoding_opt[] = +{ + { "utf-8", ENCODING_UTF8}, + { "default", ENCODING_DEFAULT}, + { NULL, 0} +}; + +static const st_option round_opt[] = +{ + { "up", ROUND_UP}, + { "down", ROUND_DOWN}, + { "zero", ROUND_ZERO}, + { "nearest", ROUND_NEAREST}, + { "compatible", ROUND_COMPATIBLE}, + { "processor_defined", ROUND_PROCDEFINED}, + { NULL, 0} +}; + +static const st_option sign_opt[] = +{ + { "plus", SIGN_PLUS}, + { "suppress", SIGN_SUPPRESS}, + { "processor_defined", SIGN_PROCDEFINED}, + { NULL, 0} +}; + +static const st_option convert_opt[] = +{ + { "native", GFC_CONVERT_NATIVE}, + { "swap", GFC_CONVERT_SWAP}, + { "big_endian", GFC_CONVERT_BIG}, + { "little_endian", GFC_CONVERT_LITTLE}, + { NULL, 0} +}; + +static const st_option async_opt[] = +{ + { "yes", ASYNC_YES}, + { "no", ASYNC_NO}, + { NULL, 0} +}; + +/* Given a unit, test to see if the file is positioned at the terminal + point, and if so, change state from NO_ENDFILE flag to AT_ENDFILE. + This prevents us from changing the state from AFTER_ENDFILE to + AT_ENDFILE. */ + +static void +test_endfile (gfc_unit * u) +{ + if (u->endfile == NO_ENDFILE && file_length (u->s) == file_position (u->s)) + u->endfile = AT_ENDFILE; +} + + +/* Change the modes of a file, those that are allowed * to be + changed. */ + +static void +edit_modes (st_parameter_open *opp, gfc_unit * u, unit_flags * flags) +{ + /* Complain about attempts to change the unchangeable. */ + + if (flags->status != STATUS_UNSPECIFIED && flags->status != STATUS_OLD && + u->flags.status != flags->status) + generate_error (&opp->common, LIBERROR_BAD_OPTION, + "Cannot change STATUS parameter in OPEN statement"); + + if (flags->access != ACCESS_UNSPECIFIED && u->flags.access != flags->access) + generate_error (&opp->common, LIBERROR_BAD_OPTION, + "Cannot change ACCESS parameter in OPEN statement"); + + if (flags->form != FORM_UNSPECIFIED && u->flags.form != flags->form) + generate_error (&opp->common, LIBERROR_BAD_OPTION, + "Cannot change FORM parameter in OPEN statement"); + + if ((opp->common.flags & IOPARM_OPEN_HAS_RECL_IN) + && opp->recl_in != u->recl) + generate_error (&opp->common, LIBERROR_BAD_OPTION, + "Cannot change RECL parameter in OPEN statement"); + + if (flags->action != ACTION_UNSPECIFIED && u->flags.action != flags->action) + generate_error (&opp->common, LIBERROR_BAD_OPTION, + "Cannot change ACTION parameter in OPEN statement"); + + /* Status must be OLD if present. */ + + if (flags->status != STATUS_UNSPECIFIED && flags->status != STATUS_OLD && + flags->status != STATUS_UNKNOWN) + { + if (flags->status == STATUS_SCRATCH) + notify_std (&opp->common, GFC_STD_GNU, + "OPEN statement must have a STATUS of OLD or UNKNOWN"); + else + generate_error (&opp->common, LIBERROR_BAD_OPTION, + "OPEN statement must have a STATUS of OLD or UNKNOWN"); + } + + if (u->flags.form == FORM_UNFORMATTED) + { + if (flags->delim != DELIM_UNSPECIFIED) + generate_error (&opp->common, LIBERROR_OPTION_CONFLICT, + "DELIM parameter conflicts with UNFORMATTED form in " + "OPEN statement"); + + if (flags->blank != BLANK_UNSPECIFIED) + generate_error (&opp->common, LIBERROR_OPTION_CONFLICT, + "BLANK parameter conflicts with UNFORMATTED form in " + "OPEN statement"); + + if (flags->pad != PAD_UNSPECIFIED) + generate_error (&opp->common, LIBERROR_OPTION_CONFLICT, + "PAD parameter conflicts with UNFORMATTED form in " + "OPEN statement"); + + if (flags->decimal != DECIMAL_UNSPECIFIED) + generate_error (&opp->common, LIBERROR_OPTION_CONFLICT, + "DECIMAL parameter conflicts with UNFORMATTED form in " + "OPEN statement"); + + if (flags->encoding != ENCODING_UNSPECIFIED) + generate_error (&opp->common, LIBERROR_OPTION_CONFLICT, + "ENCODING parameter conflicts with UNFORMATTED form in " + "OPEN statement"); + + if (flags->round != ROUND_UNSPECIFIED) + generate_error (&opp->common, LIBERROR_OPTION_CONFLICT, + "ROUND parameter conflicts with UNFORMATTED form in " + "OPEN statement"); + + if (flags->sign != SIGN_UNSPECIFIED) + generate_error (&opp->common, LIBERROR_OPTION_CONFLICT, + "SIGN parameter conflicts with UNFORMATTED form in " + "OPEN statement"); + } + + if ((opp->common.flags & IOPARM_LIBRETURN_MASK) == IOPARM_LIBRETURN_OK) + { + /* Change the changeable: */ + if (flags->blank != BLANK_UNSPECIFIED) + u->flags.blank = flags->blank; + if (flags->delim != DELIM_UNSPECIFIED) + u->flags.delim = flags->delim; + if (flags->pad != PAD_UNSPECIFIED) + u->flags.pad = flags->pad; + if (flags->decimal != DECIMAL_UNSPECIFIED) + u->flags.decimal = flags->decimal; + if (flags->encoding != ENCODING_UNSPECIFIED) + u->flags.encoding = flags->encoding; + if (flags->async != ASYNC_UNSPECIFIED) + u->flags.async = flags->async; + if (flags->round != ROUND_UNSPECIFIED) + u->flags.round = flags->round; + if (flags->sign != SIGN_UNSPECIFIED) + u->flags.sign = flags->sign; + } + + /* Reposition the file if necessary. */ + + switch (flags->position) + { + case POSITION_UNSPECIFIED: + case POSITION_ASIS: + break; + + case POSITION_REWIND: + if (sseek (u->s, 0) == FAILURE) + goto seek_error; + + u->current_record = 0; + u->last_record = 0; + + test_endfile (u); + break; + + case POSITION_APPEND: + if (sseek (u->s, file_length (u->s)) == FAILURE) + goto seek_error; + + if (flags->access != ACCESS_STREAM) + u->current_record = 0; + + u->endfile = AT_ENDFILE; /* We are at the end. */ + break; + + seek_error: + generate_error (&opp->common, LIBERROR_OS, NULL); + break; + } + + unlock_unit (u); +} + + +/* Open an unused unit. */ + +gfc_unit * +new_unit (st_parameter_open *opp, gfc_unit *u, unit_flags * flags) +{ + gfc_unit *u2; + stream *s; + char tmpname[5 /* fort. */ + 10 /* digits of unit number */ + 1 /* 0 */]; + + /* Change unspecifieds to defaults. Leave (flags->action == + ACTION_UNSPECIFIED) alone so open_external() can set it based on + what type of open actually works. */ + + if (flags->access == ACCESS_UNSPECIFIED) + flags->access = ACCESS_SEQUENTIAL; + + if (flags->form == FORM_UNSPECIFIED) + flags->form = (flags->access == ACCESS_SEQUENTIAL) + ? FORM_FORMATTED : FORM_UNFORMATTED; + + if (flags->async == ASYNC_UNSPECIFIED) + flags->async = ASYNC_NO; + + if (flags->status == STATUS_UNSPECIFIED) + flags->status = STATUS_UNKNOWN; + + /* Checks. */ + + if (flags->delim == DELIM_UNSPECIFIED) + flags->delim = DELIM_NONE; + else + { + if (flags->form == FORM_UNFORMATTED) + { + generate_error (&opp->common, LIBERROR_OPTION_CONFLICT, + "DELIM parameter conflicts with UNFORMATTED form in " + "OPEN statement"); + goto fail; + } + } + + if (flags->blank == BLANK_UNSPECIFIED) + flags->blank = BLANK_NULL; + else + { + if (flags->form == FORM_UNFORMATTED) + { + generate_error (&opp->common, LIBERROR_OPTION_CONFLICT, + "BLANK parameter conflicts with UNFORMATTED form in " + "OPEN statement"); + goto fail; + } + } + + if (flags->pad == PAD_UNSPECIFIED) + flags->pad = PAD_YES; + else + { + if (flags->form == FORM_UNFORMATTED) + { + generate_error (&opp->common, LIBERROR_OPTION_CONFLICT, + "PAD parameter conflicts with UNFORMATTED form in " + "OPEN statement"); + goto fail; + } + } + + if (flags->decimal == DECIMAL_UNSPECIFIED) + flags->decimal = DECIMAL_POINT; + else + { + if (flags->form == FORM_UNFORMATTED) + { + generate_error (&opp->common, LIBERROR_OPTION_CONFLICT, + "DECIMAL parameter conflicts with UNFORMATTED form " + "in OPEN statement"); + goto fail; + } + } + + if (flags->encoding == ENCODING_UNSPECIFIED) + flags->encoding = ENCODING_DEFAULT; + else + { + if (flags->form == FORM_UNFORMATTED) + { + generate_error (&opp->common, LIBERROR_OPTION_CONFLICT, + "ENCODING parameter conflicts with UNFORMATTED form in " + "OPEN statement"); + goto fail; + } + } + + /* NB: the value for ROUND when it's not specified by the user does not + have to be PROCESSOR_DEFINED; the standard says that it is + processor dependent, and requires that it is one of the + possible value (see F2003, 9.4.5.13). */ + if (flags->round == ROUND_UNSPECIFIED) + flags->round = ROUND_PROCDEFINED; + else + { + if (flags->form == FORM_UNFORMATTED) + { + generate_error (&opp->common, LIBERROR_OPTION_CONFLICT, + "ROUND parameter conflicts with UNFORMATTED form in " + "OPEN statement"); + goto fail; + } + } + + if (flags->sign == SIGN_UNSPECIFIED) + flags->sign = SIGN_PROCDEFINED; + else + { + if (flags->form == FORM_UNFORMATTED) + { + generate_error (&opp->common, LIBERROR_OPTION_CONFLICT, + "SIGN parameter conflicts with UNFORMATTED form in " + "OPEN statement"); + goto fail; + } + } + + if (flags->position != POSITION_ASIS && flags->access == ACCESS_DIRECT) + { + generate_error (&opp->common, LIBERROR_OPTION_CONFLICT, + "ACCESS parameter conflicts with SEQUENTIAL access in " + "OPEN statement"); + goto fail; + } + else + if (flags->position == POSITION_UNSPECIFIED) + flags->position = POSITION_ASIS; + + if (flags->access == ACCESS_DIRECT + && (opp->common.flags & IOPARM_OPEN_HAS_RECL_IN) == 0) + { + generate_error (&opp->common, LIBERROR_MISSING_OPTION, + "Missing RECL parameter in OPEN statement"); + goto fail; + } + + if ((opp->common.flags & IOPARM_OPEN_HAS_RECL_IN) && opp->recl_in <= 0) + { + generate_error (&opp->common, LIBERROR_BAD_OPTION, + "RECL parameter is non-positive in OPEN statement"); + goto fail; + } + + switch (flags->status) + { + case STATUS_SCRATCH: + if ((opp->common.flags & IOPARM_OPEN_HAS_FILE) == 0) + { + opp->file = NULL; + break; + } + + generate_error (&opp->common, LIBERROR_BAD_OPTION, + "FILE parameter must not be present in OPEN statement"); + goto fail; + + case STATUS_OLD: + case STATUS_NEW: + case STATUS_REPLACE: + case STATUS_UNKNOWN: + if ((opp->common.flags & IOPARM_OPEN_HAS_FILE)) + break; + + opp->file = tmpname; +#ifdef HAVE_SNPRINTF + opp->file_len = snprintf(opp->file, sizeof (tmpname), "fort.%d", + (int) opp->common.unit); +#else + opp->file_len = sprintf(opp->file, "fort.%d", (int) opp->common.unit); +#endif + break; + + default: + internal_error (&opp->common, "new_unit(): Bad status"); + } + + /* Make sure the file isn't already open someplace else. + Do not error if opening file preconnected to stdin, stdout, stderr. */ + + u2 = NULL; + if ((opp->common.flags & IOPARM_OPEN_HAS_FILE) != 0) + u2 = find_file (opp->file, opp->file_len); + if (u2 != NULL + && (options.stdin_unit < 0 || u2->unit_number != options.stdin_unit) + && (options.stdout_unit < 0 || u2->unit_number != options.stdout_unit) + && (options.stderr_unit < 0 || u2->unit_number != options.stderr_unit)) + { + unlock_unit (u2); + generate_error (&opp->common, LIBERROR_ALREADY_OPEN, NULL); + goto cleanup; + } + + if (u2 != NULL) + unlock_unit (u2); + + /* Open file. */ + + s = open_external (opp, flags); + if (s == NULL) + { + char *path, *msg; + path = (char *) gfc_alloca (opp->file_len + 1); + msg = (char *) gfc_alloca (opp->file_len + 51); + unpack_filename (path, opp->file, opp->file_len); + + switch (errno) + { + case ENOENT: + sprintf (msg, "File '%s' does not exist", path); + break; + + case EEXIST: + sprintf (msg, "File '%s' already exists", path); + break; + + case EACCES: + sprintf (msg, "Permission denied trying to open file '%s'", path); + break; + + case EISDIR: + sprintf (msg, "'%s' is a directory", path); + break; + + default: + msg = NULL; + } + + generate_error (&opp->common, LIBERROR_OS, msg); + goto cleanup; + } + + if (flags->status == STATUS_NEW || flags->status == STATUS_REPLACE) + flags->status = STATUS_OLD; + + /* Create the unit structure. */ + + u->file = get_mem (opp->file_len); + if (u->unit_number != opp->common.unit) + internal_error (&opp->common, "Unit number changed"); + u->s = s; + u->flags = *flags; + u->read_bad = 0; + u->endfile = NO_ENDFILE; + u->last_record = 0; + u->current_record = 0; + u->mode = READING; + u->maxrec = 0; + u->bytes_left = 0; + u->saved_pos = 0; + + if (flags->position == POSITION_APPEND) + { + if (sseek (u->s, file_length (u->s)) == FAILURE) + generate_error (&opp->common, LIBERROR_OS, NULL); + u->endfile = AT_ENDFILE; + } + + /* Unspecified recl ends up with a processor dependent value. */ + + if ((opp->common.flags & IOPARM_OPEN_HAS_RECL_IN)) + { + u->flags.has_recl = 1; + u->recl = opp->recl_in; + u->recl_subrecord = u->recl; + u->bytes_left = u->recl; + } + else + { + u->flags.has_recl = 0; + u->recl = max_offset; + if (compile_options.max_subrecord_length) + { + u->recl_subrecord = compile_options.max_subrecord_length; + } + else + { + switch (compile_options.record_marker) + { + case 0: + /* Fall through */ + case sizeof (GFC_INTEGER_4): + u->recl_subrecord = GFC_MAX_SUBRECORD_LENGTH; + break; + + case sizeof (GFC_INTEGER_8): + u->recl_subrecord = max_offset - 16; + break; + + default: + runtime_error ("Illegal value for record marker"); + break; + } + } + } + + /* If the file is direct access, calculate the maximum record number + via a division now instead of letting the multiplication overflow + later. */ + + if (flags->access == ACCESS_DIRECT) + u->maxrec = max_offset / u->recl; + + if (flags->access == ACCESS_STREAM) + { + u->maxrec = max_offset; + u->recl = 1; + u->strm_pos = file_position (u->s) + 1; + } + + memmove (u->file, opp->file, opp->file_len); + u->file_len = opp->file_len; + + /* Curiously, the standard requires that the + position specifier be ignored for new files so a newly connected + file starts out at the initial point. We still need to figure + out if the file is at the end or not. */ + + test_endfile (u); + + if (flags->status == STATUS_SCRATCH && opp->file != NULL) + free_mem (opp->file); + + if (flags->form == FORM_FORMATTED && (flags->action != ACTION_READ)) + { + if ((opp->common.flags & IOPARM_OPEN_HAS_RECL_IN)) + fbuf_init (u, u->recl); + else + fbuf_init (u, 0); + } + else + u->fbuf = NULL; + + + + return u; + + cleanup: + + /* Free memory associated with a temporary filename. */ + + if (flags->status == STATUS_SCRATCH && opp->file != NULL) + free_mem (opp->file); + + fail: + + close_unit (u); + return NULL; +} + + +/* Open a unit which is already open. This involves changing the + modes or closing what is there now and opening the new file. */ + +static void +already_open (st_parameter_open *opp, gfc_unit * u, unit_flags * flags) +{ + if ((opp->common.flags & IOPARM_OPEN_HAS_FILE) == 0) + { + edit_modes (opp, u, flags); + return; + } + + /* If the file is connected to something else, close it and open a + new unit. */ + + if (!compare_file_filename (u, opp->file, opp->file_len)) + { +#if !HAVE_UNLINK_OPEN_FILE + char *path = NULL; + if (u->file && u->flags.status == STATUS_SCRATCH) + { + path = (char *) gfc_alloca (u->file_len + 1); + unpack_filename (path, u->file, u->file_len); + } +#endif + + if (sclose (u->s) == FAILURE) + { + unlock_unit (u); + generate_error (&opp->common, LIBERROR_OS, + "Error closing file in OPEN statement"); + return; + } + + u->s = NULL; + if (u->file) + free_mem (u->file); + u->file = NULL; + u->file_len = 0; + +#if !HAVE_UNLINK_OPEN_FILE + if (path != NULL) + unlink (path); +#endif + + u = new_unit (opp, u, flags); + if (u != NULL) + unlock_unit (u); + return; + } + + edit_modes (opp, u, flags); +} + + +/* Open file. */ + +extern void st_open (st_parameter_open *opp); +export_proto(st_open); + +void +st_open (st_parameter_open *opp) +{ + unit_flags flags; + gfc_unit *u = NULL; + GFC_INTEGER_4 cf = opp->common.flags; + unit_convert conv; + + library_start (&opp->common); + + /* Decode options. */ + + flags.access = !(cf & IOPARM_OPEN_HAS_ACCESS) ? ACCESS_UNSPECIFIED : + find_option (&opp->common, opp->access, opp->access_len, + access_opt, "Bad ACCESS parameter in OPEN statement"); + + flags.action = !(cf & IOPARM_OPEN_HAS_ACTION) ? ACTION_UNSPECIFIED : + find_option (&opp->common, opp->action, opp->action_len, + action_opt, "Bad ACTION parameter in OPEN statement"); + + flags.blank = !(cf & IOPARM_OPEN_HAS_BLANK) ? BLANK_UNSPECIFIED : + find_option (&opp->common, opp->blank, opp->blank_len, + blank_opt, "Bad BLANK parameter in OPEN statement"); + + flags.delim = !(cf & IOPARM_OPEN_HAS_DELIM) ? DELIM_UNSPECIFIED : + find_option (&opp->common, opp->delim, opp->delim_len, + delim_opt, "Bad DELIM parameter in OPEN statement"); + + flags.pad = !(cf & IOPARM_OPEN_HAS_PAD) ? PAD_UNSPECIFIED : + find_option (&opp->common, opp->pad, opp->pad_len, + pad_opt, "Bad PAD parameter in OPEN statement"); + + flags.decimal = !(cf & IOPARM_OPEN_HAS_DECIMAL) ? DECIMAL_UNSPECIFIED : + find_option (&opp->common, opp->decimal, opp->decimal_len, + decimal_opt, "Bad DECIMAL parameter in OPEN statement"); + + flags.encoding = !(cf & IOPARM_OPEN_HAS_ENCODING) ? ENCODING_UNSPECIFIED : + find_option (&opp->common, opp->encoding, opp->encoding_len, + encoding_opt, "Bad ENCODING parameter in OPEN statement"); + + flags.async = !(cf & IOPARM_OPEN_HAS_ASYNCHRONOUS) ? ASYNC_UNSPECIFIED : + find_option (&opp->common, opp->asynchronous, opp->asynchronous_len, + async_opt, "Bad ASYNCHRONOUS parameter in OPEN statement"); + + flags.round = !(cf & IOPARM_OPEN_HAS_ROUND) ? ROUND_UNSPECIFIED : + find_option (&opp->common, opp->round, opp->round_len, + round_opt, "Bad ROUND parameter in OPEN statement"); + + flags.sign = !(cf & IOPARM_OPEN_HAS_SIGN) ? SIGN_UNSPECIFIED : + find_option (&opp->common, opp->sign, opp->sign_len, + sign_opt, "Bad SIGN parameter in OPEN statement"); + + flags.form = !(cf & IOPARM_OPEN_HAS_FORM) ? FORM_UNSPECIFIED : + find_option (&opp->common, opp->form, opp->form_len, + form_opt, "Bad FORM parameter in OPEN statement"); + + flags.position = !(cf & IOPARM_OPEN_HAS_POSITION) ? POSITION_UNSPECIFIED : + find_option (&opp->common, opp->position, opp->position_len, + position_opt, "Bad POSITION parameter in OPEN statement"); + + flags.status = !(cf & IOPARM_OPEN_HAS_STATUS) ? STATUS_UNSPECIFIED : + find_option (&opp->common, opp->status, opp->status_len, + status_opt, "Bad STATUS parameter in OPEN statement"); + + /* First, we check wether the convert flag has been set via environment + variable. This overrides the convert tag in the open statement. */ + + conv = get_unformatted_convert (opp->common.unit); + + if (conv == GFC_CONVERT_NONE) + { + /* Nothing has been set by environment variable, check the convert tag. */ + if (cf & IOPARM_OPEN_HAS_CONVERT) + conv = find_option (&opp->common, opp->convert, opp->convert_len, + convert_opt, + "Bad CONVERT parameter in OPEN statement"); + else + conv = compile_options.convert; + } + + /* We use big_endian, which is 0 on little-endian machines + and 1 on big-endian machines. */ + switch (conv) + { + case GFC_CONVERT_NATIVE: + case GFC_CONVERT_SWAP: + break; + + case GFC_CONVERT_BIG: + conv = big_endian ? GFC_CONVERT_NATIVE : GFC_CONVERT_SWAP; + break; + + case GFC_CONVERT_LITTLE: + conv = big_endian ? GFC_CONVERT_SWAP : GFC_CONVERT_NATIVE; + break; + + default: + internal_error (&opp->common, "Illegal value for CONVERT"); + break; + } + + flags.convert = conv; + + if (opp->common.unit < 0) + generate_error (&opp->common, LIBERROR_BAD_OPTION, + "Bad unit number in OPEN statement"); + + if (flags.position != POSITION_UNSPECIFIED + && flags.access == ACCESS_DIRECT) + generate_error (&opp->common, LIBERROR_BAD_OPTION, + "Cannot use POSITION with direct access files"); + + if (flags.access == ACCESS_APPEND) + { + if (flags.position != POSITION_UNSPECIFIED + && flags.position != POSITION_APPEND) + generate_error (&opp->common, LIBERROR_BAD_OPTION, + "Conflicting ACCESS and POSITION flags in" + " OPEN statement"); + + notify_std (&opp->common, GFC_STD_GNU, + "Extension: APPEND as a value for ACCESS in OPEN statement"); + flags.access = ACCESS_SEQUENTIAL; + flags.position = POSITION_APPEND; + } + + if (flags.position == POSITION_UNSPECIFIED) + flags.position = POSITION_ASIS; + + if ((opp->common.flags & IOPARM_LIBRETURN_MASK) == IOPARM_LIBRETURN_OK) + { + u = find_or_create_unit (opp->common.unit); + + if (u->s == NULL) + { + u = new_unit (opp, u, &flags); + if (u != NULL) + unlock_unit (u); + } + else + already_open (opp, u, &flags); + } + + library_end (); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/read.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/read.c new file mode 100644 index 0000000000..267f62735c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/read.c @@ -0,0 +1,1080 @@ +/* Copyright (C) 2002, 2003, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Andy Vaught + F2003 I/O support contributed by Jerry DeLisle + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "io.h" +#include +#include +#include +#include + +typedef unsigned char uchar; + +/* read.c -- Deal with formatted reads */ + + +/* set_integer()-- All of the integer assignments come here to + * actually place the value into memory. */ + +void +set_integer (void *dest, GFC_INTEGER_LARGEST value, int length) +{ + switch (length) + { +#ifdef HAVE_GFC_INTEGER_16 + case 16: + { + GFC_INTEGER_16 tmp = value; + memcpy (dest, (void *) &tmp, length); + } + break; +#endif + case 8: + { + GFC_INTEGER_8 tmp = value; + memcpy (dest, (void *) &tmp, length); + } + break; + case 4: + { + GFC_INTEGER_4 tmp = value; + memcpy (dest, (void *) &tmp, length); + } + break; + case 2: + { + GFC_INTEGER_2 tmp = value; + memcpy (dest, (void *) &tmp, length); + } + break; + case 1: + { + GFC_INTEGER_1 tmp = value; + memcpy (dest, (void *) &tmp, length); + } + break; + default: + internal_error (NULL, "Bad integer kind"); + } +} + + +/* max_value()-- Given a length (kind), return the maximum signed or + * unsigned value */ + +GFC_UINTEGER_LARGEST +max_value (int length, int signed_flag) +{ + GFC_UINTEGER_LARGEST value; +#if defined HAVE_GFC_REAL_16 || defined HAVE_GFC_REAL_10 + int n; +#endif + + switch (length) + { +#if defined HAVE_GFC_REAL_16 || defined HAVE_GFC_REAL_10 + case 16: + case 10: + value = 1; + for (n = 1; n < 4 * length; n++) + value = (value << 2) + 3; + if (! signed_flag) + value = 2*value+1; + break; +#endif + case 8: + value = signed_flag ? 0x7fffffffffffffff : 0xffffffffffffffff; + break; + case 4: + value = signed_flag ? 0x7fffffff : 0xffffffff; + break; + case 2: + value = signed_flag ? 0x7fff : 0xffff; + break; + case 1: + value = signed_flag ? 0x7f : 0xff; + break; + default: + internal_error (NULL, "Bad integer kind"); + } + + return value; +} + + +/* convert_real()-- Convert a character representation of a floating + * point number to the machine number. Returns nonzero if there is a + * range problem during conversion. TODO: handle not-a-numbers and + * infinities. */ + +int +convert_real (st_parameter_dt *dtp, void *dest, const char *buffer, int length) +{ + errno = 0; + + switch (length) + { + case 4: + { + GFC_REAL_4 tmp = +#if defined(HAVE_STRTOF) + strtof (buffer, NULL); +#else + (GFC_REAL_4) strtod (buffer, NULL); +#endif + memcpy (dest, (void *) &tmp, length); + } + break; + case 8: + { + GFC_REAL_8 tmp = strtod (buffer, NULL); + memcpy (dest, (void *) &tmp, length); + } + break; +#if defined(HAVE_GFC_REAL_10) && defined (HAVE_STRTOLD) + case 10: + { + GFC_REAL_10 tmp = strtold (buffer, NULL); + memcpy (dest, (void *) &tmp, length); + } + break; +#endif +#if defined(HAVE_GFC_REAL_16) && defined (HAVE_STRTOLD) + case 16: + { + GFC_REAL_16 tmp = strtold (buffer, NULL); + memcpy (dest, (void *) &tmp, length); + } + break; +#endif + default: + internal_error (&dtp->common, "Unsupported real kind during IO"); + } + + if (errno == EINVAL) + { + generate_error (&dtp->common, LIBERROR_READ_VALUE, + "Error during floating point read"); + next_record (dtp, 1); + return 1; + } + + return 0; +} + + +/* read_l()-- Read a logical value */ + +void +read_l (st_parameter_dt *dtp, const fnode *f, char *dest, int length) +{ + char *p; + size_t w; + + w = f->u.w; + + p = gfc_alloca (w); + + if (read_block_form (dtp, p, &w) == FAILURE) + return; + + while (*p == ' ') + { + if (--w == 0) + goto bad; + p++; + } + + if (*p == '.') + { + if (--w == 0) + goto bad; + p++; + } + + switch (*p) + { + case 't': + case 'T': + set_integer (dest, (GFC_INTEGER_LARGEST) 1, length); + break; + case 'f': + case 'F': + set_integer (dest, (GFC_INTEGER_LARGEST) 0, length); + break; + default: + bad: + generate_error (&dtp->common, LIBERROR_READ_VALUE, + "Bad value on logical read"); + next_record (dtp, 1); + break; + } +} + + +static inline gfc_char4_t +read_utf8 (st_parameter_dt *dtp, size_t *nbytes) +{ + static const uchar masks[6] = { 0x7F, 0x1F, 0x0F, 0x07, 0x02, 0x01 }; + static const uchar patns[6] = { 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; + static uchar buffer[6]; + size_t i, nb, nread; + gfc_char4_t c; + int status; + char *s; + + *nbytes = 1; + s = (char *) &buffer[0]; + status = read_block_form (dtp, s, nbytes); + if (status == FAILURE) + return 0; + + /* If this is a short read, just return. */ + if (*nbytes == 0) + return 0; + + c = buffer[0]; + if (c < 0x80) + return c; + + /* The number of leading 1-bits in the first byte indicates how many + bytes follow. */ + for (nb = 2; nb < 7; nb++) + if ((c & ~masks[nb-1]) == patns[nb-1]) + goto found; + goto invalid; + + found: + c = (c & masks[nb-1]); + nread = nb - 1; + + s = (char *) &buffer[1]; + status = read_block_form (dtp, s, &nread); + if (status == FAILURE) + return 0; + /* Decode the bytes read. */ + for (i = 1; i < nb; i++) + { + gfc_char4_t n = *s++; + + if ((n & 0xC0) != 0x80) + goto invalid; + + c = ((c << 6) + (n & 0x3F)); + } + + /* Make sure the shortest possible encoding was used. */ + if (c <= 0x7F && nb > 1) goto invalid; + if (c <= 0x7FF && nb > 2) goto invalid; + if (c <= 0xFFFF && nb > 3) goto invalid; + if (c <= 0x1FFFFF && nb > 4) goto invalid; + if (c <= 0x3FFFFFF && nb > 5) goto invalid; + + /* Make sure the character is valid. */ + if (c > 0x7FFFFFFF || (c >= 0xD800 && c <= 0xDFFF)) + goto invalid; + + return c; + + invalid: + generate_error (&dtp->common, LIBERROR_READ_VALUE, "Invalid UTF-8 encoding"); + return (gfc_char4_t) '?'; +} + + +static void +read_utf8_char1 (st_parameter_dt *dtp, char *p, int len, size_t width) +{ + gfc_char4_t c; + char *dest; + size_t nbytes; + int i, j; + + len = ((int) width < len) ? len : (int) width; + + dest = (char *) p; + + /* Proceed with decoding one character at a time. */ + for (j = 0; j < len; j++, dest++) + { + c = read_utf8 (dtp, &nbytes); + + /* Check for a short read and if so, break out. */ + if (nbytes == 0) + break; + + *dest = c > 255 ? '?' : (uchar) c; + } + + /* If there was a short read, pad the remaining characters. */ + for (i = j; i < len; i++) + *dest++ = ' '; + return; +} + +static void +read_default_char1 (st_parameter_dt *dtp, char *p, int len, size_t width) +{ + char *s; + int m, n, status; + + s = gfc_alloca (width); + + status = read_block_form (dtp, s, &width); + + if (status == FAILURE) + return; + if (width > (size_t) len) + s += (width - len); + + m = ((int) width > len) ? len : (int) width; + memcpy (p, s, m); + + n = len - width; + if (n > 0) + memset (p + m, ' ', n); +} + + +static void +read_utf8_char4 (st_parameter_dt *dtp, void *p, int len, size_t width) +{ + gfc_char4_t *dest; + size_t nbytes; + int i, j; + + len = ((int) width < len) ? len : (int) width; + + dest = (gfc_char4_t *) p; + + /* Proceed with decoding one character at a time. */ + for (j = 0; j < len; j++, dest++) + { + *dest = read_utf8 (dtp, &nbytes); + + /* Check for a short read and if so, break out. */ + if (nbytes == 0) + break; + } + + /* If there was a short read, pad the remaining characters. */ + for (i = j; i < len; i++) + *dest++ = (gfc_char4_t) ' '; + return; +} + + +static void +read_default_char4 (st_parameter_dt *dtp, char *p, int len, size_t width) +{ + char *s; + gfc_char4_t *dest; + int m, n, status; + + s = gfc_alloca (width); + + status = read_block_form (dtp, s, &width); + + if (status == FAILURE) + return; + if (width > (size_t) len) + s += (width - len); + + m = ((int) width > len) ? len : (int) width; + + dest = (gfc_char4_t *) p; + + for (n = 0; n < m; n++, dest++, s++) + *dest = (unsigned char ) *s; + + for (n = 0; n < len - (int) width; n++, dest++) + *dest = (unsigned char) ' '; +} + + +/* read_a()-- Read a character record into a KIND=1 character destination, + processing UTF-8 encoding if necessary. */ + +void +read_a (st_parameter_dt *dtp, const fnode *f, char *p, int length) +{ + int wi; + size_t w; + + wi = f->u.w; + if (wi == -1) /* '(A)' edit descriptor */ + wi = length; + w = wi; + + /* Read in w characters, treating comma as not a separator. */ + dtp->u.p.sf_read_comma = 0; + + if (dtp->u.p.current_unit->flags.encoding == ENCODING_UTF8) + read_utf8_char1 (dtp, p, length, w); + else + read_default_char1 (dtp, p, length, w); + + dtp->u.p.sf_read_comma = + dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA ? 0 : 1; +} + + +/* read_a_char4()-- Read a character record into a KIND=4 character destination, + processing UTF-8 encoding if necessary. */ + +void +read_a_char4 (st_parameter_dt *dtp, const fnode *f, char *p, int length) +{ + int wi; + size_t w; + + wi = f->u.w; + if (wi == -1) /* '(A)' edit descriptor */ + wi = length; + w = wi; + + /* Read in w characters, treating comma as not a separator. */ + dtp->u.p.sf_read_comma = 0; + + if (dtp->u.p.current_unit->flags.encoding == ENCODING_UTF8) + read_utf8_char4 (dtp, p, length, w); + else + read_default_char4 (dtp, p, length, w); + + dtp->u.p.sf_read_comma = + dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA ? 0 : 1; +} + +/* eat_leading_spaces()-- Given a character pointer and a width, + * ignore the leading spaces. */ + +static char * +eat_leading_spaces (int *width, char *p) +{ + for (;;) + { + if (*width == 0 || *p != ' ') + break; + + (*width)--; + p++; + } + + return p; +} + + +static char +next_char (st_parameter_dt *dtp, char **p, int *w) +{ + char c, *q; + + if (*w == 0) + return '\0'; + + q = *p; + c = *q++; + *p = q; + + (*w)--; + + if (c != ' ') + return c; + if (dtp->u.p.blank_status != BLANK_UNSPECIFIED) + return ' '; /* return a blank to signal a null */ + + /* At this point, the rest of the field has to be trailing blanks */ + + while (*w > 0) + { + if (*q++ != ' ') + return '?'; + (*w)--; + } + + *p = q; + return '\0'; +} + + +/* read_decimal()-- Read a decimal integer value. The values here are + * signed values. */ + +void +read_decimal (st_parameter_dt *dtp, const fnode *f, char *dest, int length) +{ + GFC_UINTEGER_LARGEST value, maxv, maxv_10; + GFC_INTEGER_LARGEST v; + int w, negative; + size_t wu; + char c, *p; + + wu = f->u.w; + + p = gfc_alloca (wu); + + if (read_block_form (dtp, p, &wu) == FAILURE) + return; + + w = wu; + + p = eat_leading_spaces (&w, p); + if (w == 0) + { + set_integer (dest, (GFC_INTEGER_LARGEST) 0, length); + return; + } + + maxv = max_value (length, 1); + maxv_10 = maxv / 10; + + negative = 0; + value = 0; + + switch (*p) + { + case '-': + negative = 1; + /* Fall through */ + + case '+': + p++; + if (--w == 0) + goto bad; + /* Fall through */ + + default: + break; + } + + /* At this point we have a digit-string */ + value = 0; + + for (;;) + { + c = next_char (dtp, &p, &w); + if (c == '\0') + break; + + if (c == ' ') + { + if (dtp->u.p.blank_status == BLANK_NULL) continue; + if (dtp->u.p.blank_status == BLANK_ZERO) c = '0'; + } + + if (c < '0' || c > '9') + goto bad; + + if (value > maxv_10 && compile_options.range_check == 1) + goto overflow; + + c -= '0'; + value = 10 * value; + + if (value > maxv - c && compile_options.range_check == 1) + goto overflow; + value += c; + } + + v = value; + if (negative) + v = -v; + + set_integer (dest, v, length); + return; + + bad: + generate_error (&dtp->common, LIBERROR_READ_VALUE, + "Bad value during integer read"); + next_record (dtp, 1); + return; + + overflow: + generate_error (&dtp->common, LIBERROR_READ_OVERFLOW, + "Value overflowed during integer read"); + next_record (dtp, 1); + +} + + +/* read_radix()-- This function reads values for non-decimal radixes. + * The difference here is that we treat the values here as unsigned + * values for the purposes of overflow. If minus sign is present and + * the top bit is set, the value will be incorrect. */ + +void +read_radix (st_parameter_dt *dtp, const fnode *f, char *dest, int length, + int radix) +{ + GFC_UINTEGER_LARGEST value, maxv, maxv_r; + GFC_INTEGER_LARGEST v; + int w, negative; + char c, *p; + size_t wu; + + wu = f->u.w; + + p = gfc_alloca (wu); + + if (read_block_form (dtp, p, &wu) == FAILURE) + return; + + w = wu; + + p = eat_leading_spaces (&w, p); + if (w == 0) + { + set_integer (dest, (GFC_INTEGER_LARGEST) 0, length); + return; + } + + maxv = max_value (length, 0); + maxv_r = maxv / radix; + + negative = 0; + value = 0; + + switch (*p) + { + case '-': + negative = 1; + /* Fall through */ + + case '+': + p++; + if (--w == 0) + goto bad; + /* Fall through */ + + default: + break; + } + + /* At this point we have a digit-string */ + value = 0; + + for (;;) + { + c = next_char (dtp, &p, &w); + if (c == '\0') + break; + if (c == ' ') + { + if (dtp->u.p.blank_status == BLANK_NULL) continue; + if (dtp->u.p.blank_status == BLANK_ZERO) c = '0'; + } + + switch (radix) + { + case 2: + if (c < '0' || c > '1') + goto bad; + break; + + case 8: + if (c < '0' || c > '7') + goto bad; + break; + + case 16: + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + break; + + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + c = c - 'a' + '9' + 1; + break; + + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + c = c - 'A' + '9' + 1; + break; + + default: + goto bad; + } + + break; + } + + if (value > maxv_r) + goto overflow; + + c -= '0'; + value = radix * value; + + if (maxv - c < value) + goto overflow; + value += c; + } + + v = value; + if (negative) + v = -v; + + set_integer (dest, v, length); + return; + + bad: + generate_error (&dtp->common, LIBERROR_READ_VALUE, + "Bad value during integer read"); + next_record (dtp, 1); + return; + + overflow: + generate_error (&dtp->common, LIBERROR_READ_OVERFLOW, + "Value overflowed during integer read"); + next_record (dtp, 1); + +} + + +/* read_f()-- Read a floating point number with F-style editing, which + is what all of the other floating point descriptors behave as. The + tricky part is that optional spaces are allowed after an E or D, + and the implicit decimal point if a decimal point is not present in + the input. */ + +void +read_f (st_parameter_dt *dtp, const fnode *f, char *dest, int length) +{ + size_t wu; + int w, seen_dp, exponent; + int exponent_sign, val_sign; + int ndigits; + int edigits; + int i; + char *p, *buffer; + char *digits; + char scratch[SCRATCH_SIZE]; + + val_sign = 1; + seen_dp = 0; + wu = f->u.w; + + p = gfc_alloca (wu); + + if (read_block_form (dtp, p, &wu) == FAILURE) + return; + + w = wu; + + p = eat_leading_spaces (&w, p); + if (w == 0) + goto zero; + + /* Optional sign */ + + if (*p == '-' || *p == '+') + { + if (*p == '-') + val_sign = -1; + p++; + w--; + } + + exponent_sign = 1; + p = eat_leading_spaces (&w, p); + if (w == 0) + goto zero; + + /* A digit, a '.' or a exponent character ('e', 'E', 'd' or 'D') + is required at this point */ + + if (!isdigit (*p) && *p != '.' && *p != ',' && *p != 'd' && *p != 'D' + && *p != 'e' && *p != 'E') + goto bad_float; + + /* Remember the position of the first digit. */ + digits = p; + ndigits = 0; + + /* Scan through the string to find the exponent. */ + while (w > 0) + { + switch (*p) + { + case ',': + if (dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA + && *p == ',') + *p = '.'; + else + goto bad_float; + /* Fall through */ + case '.': + if (seen_dp) + goto bad_float; + seen_dp = 1; + /* Fall through */ + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ' ': + ndigits++; + p++; + w--; + break; + + case '-': + exponent_sign = -1; + /* Fall through */ + + case '+': + p++; + w--; + goto exp2; + + case 'd': + case 'e': + case 'D': + case 'E': + p++; + w--; + goto exp1; + + default: + goto bad_float; + } + } + + /* No exponent has been seen, so we use the current scale factor */ + exponent = -dtp->u.p.scale_factor; + goto done; + + bad_float: + generate_error (&dtp->common, LIBERROR_READ_VALUE, + "Bad value during floating point read"); + next_record (dtp, 1); + return; + + /* The value read is zero */ + zero: + switch (length) + { + case 4: + *((GFC_REAL_4 *) dest) = 0; + break; + + case 8: + *((GFC_REAL_8 *) dest) = 0; + break; + +#ifdef HAVE_GFC_REAL_10 + case 10: + *((GFC_REAL_10 *) dest) = 0; + break; +#endif + +#ifdef HAVE_GFC_REAL_16 + case 16: + *((GFC_REAL_16 *) dest) = 0; + break; +#endif + + default: + internal_error (&dtp->common, "Unsupported real kind during IO"); + } + return; + + /* At this point the start of an exponent has been found */ + exp1: + while (w > 0 && *p == ' ') + { + w--; + p++; + } + + switch (*p) + { + case '-': + exponent_sign = -1; + /* Fall through */ + + case '+': + p++; + w--; + break; + } + + if (w == 0) + goto bad_float; + + /* At this point a digit string is required. We calculate the value + of the exponent in order to take account of the scale factor and + the d parameter before explict conversion takes place. */ + exp2: + /* Normal processing of exponent */ + exponent = 0; + if (dtp->u.p.blank_status == BLANK_UNSPECIFIED) + { + while (w > 0 && isdigit (*p)) + { + exponent = 10 * exponent + *p - '0'; + p++; + w--; + } + + /* Only allow trailing blanks */ + + while (w > 0) + { + if (*p != ' ') + goto bad_float; + p++; + w--; + } + } + else /* BZ or BN status is enabled */ + { + while (w > 0) + { + if (*p == ' ') + { + if (dtp->u.p.blank_status == BLANK_ZERO) *p = '0'; + if (dtp->u.p.blank_status == BLANK_NULL) + { + p++; + w--; + continue; + } + } + else if (!isdigit (*p)) + goto bad_float; + + exponent = 10 * exponent + *p - '0'; + p++; + w--; + } + } + + exponent = exponent * exponent_sign; + + done: + /* Use the precision specified in the format if no decimal point has been + seen. */ + if (!seen_dp) + exponent -= f->u.real.d; + + if (exponent > 0) + { + edigits = 2; + i = exponent; + } + else + { + edigits = 3; + i = -exponent; + } + + while (i >= 10) + { + i /= 10; + edigits++; + } + + i = ndigits + edigits + 1; + if (val_sign < 0) + i++; + + if (i < SCRATCH_SIZE) + buffer = scratch; + else + buffer = get_mem (i); + + /* Reformat the string into a temporary buffer. As we're using atof it's + easiest to just leave the decimal point in place. */ + p = buffer; + if (val_sign < 0) + *(p++) = '-'; + for (; ndigits > 0; ndigits--) + { + if (*digits == ' ') + { + if (dtp->u.p.blank_status == BLANK_ZERO) *digits = '0'; + if (dtp->u.p.blank_status == BLANK_NULL) + { + digits++; + continue; + } + } + *p = *digits; + p++; + digits++; + } + *(p++) = 'e'; + sprintf (p, "%d", exponent); + + /* Do the actual conversion. */ + convert_real (dtp, dest, buffer, length); + + if (buffer != scratch) + free_mem (buffer); + +} + + +/* read_x()-- Deal with the X/TR descriptor. We just read some data + * and never look at it. */ + +void +read_x (st_parameter_dt * dtp, int n) +{ + if ((dtp->u.p.current_unit->pad_status == PAD_NO || is_internal_unit (dtp)) + && dtp->u.p.current_unit->bytes_left < n) + n = dtp->u.p.current_unit->bytes_left; + + dtp->u.p.sf_read_comma = 0; + if (n > 0) + read_sf (dtp, &n, 1); + dtp->u.p.sf_read_comma = 1; + dtp->u.p.current_unit->strm_pos += (gfc_offset) n; +} + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/size_from_kind.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/size_from_kind.c new file mode 100644 index 0000000000..d467df015a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/size_from_kind.c @@ -0,0 +1,83 @@ +/* Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Janne Blomqvist + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +/* This file contains utility functions for determining the size of a + variable given its kind. */ + +#include "io.h" + +size_t +size_from_real_kind (int kind) +{ + switch (kind) + { +#ifdef HAVE_GFC_REAL_4 + case 4: + return sizeof (GFC_REAL_4); +#endif +#ifdef HAVE_GFC_REAL_8 + case 8: + return sizeof (GFC_REAL_8); +#endif +#ifdef HAVE_GFC_REAL_10 + case 10: + return sizeof (GFC_REAL_10); +#endif +#ifdef HAVE_GFC_REAL_16 + case 16: + return sizeof (GFC_REAL_16); +#endif + default: + return kind; + } +} + + +size_t +size_from_complex_kind (int kind) +{ + switch (kind) + { +#ifdef HAVE_GFC_COMPLEX_4 + case 4: + return sizeof (GFC_COMPLEX_4); +#endif +#ifdef HAVE_GFC_COMPLEX_8 + case 8: + return sizeof (GFC_COMPLEX_8); +#endif +#ifdef HAVE_GFC_COMPLEX_10 + case 10: + return sizeof (GFC_COMPLEX_10); +#endif +#ifdef HAVE_GFC_COMPLEX_16 + case 16: + return sizeof (GFC_COMPLEX_16); +#endif + default: + return 2 * kind; + } +} + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/transfer.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/transfer.c new file mode 100644 index 0000000000..4d314c5939 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/transfer.c @@ -0,0 +1,3264 @@ +/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught + Namelist transfer functions contributed by Paul Thomas + F2003 I/O support contributed by Jerry DeLisle + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +/* transfer.c -- Top level handling of data transfer statements. */ + +#include "io.h" +#include +#include +#include + + +/* Calling conventions: Data transfer statements are unlike other + library calls in that they extend over several calls. + + The first call is always a call to st_read() or st_write(). These + subroutines return no status unless a namelist read or write is + being done, in which case there is the usual status. No further + calls are necessary in this case. + + For other sorts of data transfer, there are zero or more data + transfer statement that depend on the format of the data transfer + statement. + + transfer_integer + transfer_logical + transfer_character + transfer_character_wide + transfer_real + transfer_complex + + These subroutines do not return status. + + The last call is a call to st_[read|write]_done(). While + something can easily go wrong with the initial st_read() or + st_write(), an error inhibits any data from actually being + transferred. */ + +extern void transfer_integer (st_parameter_dt *, void *, int); +export_proto(transfer_integer); + +extern void transfer_real (st_parameter_dt *, void *, int); +export_proto(transfer_real); + +extern void transfer_logical (st_parameter_dt *, void *, int); +export_proto(transfer_logical); + +extern void transfer_character (st_parameter_dt *, void *, int); +export_proto(transfer_character); + +extern void transfer_character_wide (st_parameter_dt *, void *, int, int); +export_proto(transfer_character_wide); + +extern void transfer_complex (st_parameter_dt *, void *, int); +export_proto(transfer_complex); + +extern void transfer_array (st_parameter_dt *, gfc_array_char *, int, + gfc_charlen_type); +export_proto(transfer_array); + +static void us_read (st_parameter_dt *, int); +static void us_write (st_parameter_dt *, int); +static void next_record_r_unf (st_parameter_dt *, int); +static void next_record_w_unf (st_parameter_dt *, int); + +static const st_option advance_opt[] = { + {"yes", ADVANCE_YES}, + {"no", ADVANCE_NO}, + {NULL, 0} +}; + + +static const st_option decimal_opt[] = { + {"point", DECIMAL_POINT}, + {"comma", DECIMAL_COMMA}, + {NULL, 0} +}; + + +static const st_option sign_opt[] = { + {"plus", SIGN_SP}, + {"suppress", SIGN_SS}, + {"processor_defined", SIGN_S}, + {NULL, 0} +}; + +static const st_option blank_opt[] = { + {"null", BLANK_NULL}, + {"zero", BLANK_ZERO}, + {NULL, 0} +}; + +static const st_option delim_opt[] = { + {"apostrophe", DELIM_APOSTROPHE}, + {"quote", DELIM_QUOTE}, + {"none", DELIM_NONE}, + {NULL, 0} +}; + +static const st_option pad_opt[] = { + {"yes", PAD_YES}, + {"no", PAD_NO}, + {NULL, 0} +}; + +typedef enum +{ FORMATTED_SEQUENTIAL, UNFORMATTED_SEQUENTIAL, + FORMATTED_DIRECT, UNFORMATTED_DIRECT, FORMATTED_STREAM, UNFORMATTED_STREAM +} +file_mode; + + +static file_mode +current_mode (st_parameter_dt *dtp) +{ + file_mode m; + + m = FORM_UNSPECIFIED; + + if (dtp->u.p.current_unit->flags.access == ACCESS_DIRECT) + { + m = dtp->u.p.current_unit->flags.form == FORM_FORMATTED ? + FORMATTED_DIRECT : UNFORMATTED_DIRECT; + } + else if (dtp->u.p.current_unit->flags.access == ACCESS_SEQUENTIAL) + { + m = dtp->u.p.current_unit->flags.form == FORM_FORMATTED ? + FORMATTED_SEQUENTIAL : UNFORMATTED_SEQUENTIAL; + } + else if (dtp->u.p.current_unit->flags.access == ACCESS_STREAM) + { + m = dtp->u.p.current_unit->flags.form == FORM_FORMATTED ? + FORMATTED_STREAM : UNFORMATTED_STREAM; + } + + return m; +} + + +/* Mid level data transfer statements. These subroutines do reading + and writing in the style of salloc_r()/salloc_w() within the + current record. */ + +/* When reading sequential formatted records we have a problem. We + don't know how long the line is until we read the trailing newline, + and we don't want to read too much. If we read too much, we might + have to do a physical seek backwards depending on how much data is + present, and devices like terminals aren't seekable and would cause + an I/O error. + + Given this, the solution is to read a byte at a time, stopping if + we hit the newline. For small allocations, we use a static buffer. + For larger allocations, we are forced to allocate memory on the + heap. Hopefully this won't happen very often. */ + +char * +read_sf (st_parameter_dt *dtp, int *length, int no_error) +{ + char *base, *p, q; + int n, crlf; + gfc_offset pos; + size_t readlen; + + if (*length > SCRATCH_SIZE) + dtp->u.p.line_buffer = get_mem (*length); + p = base = dtp->u.p.line_buffer; + + /* If we have seen an eor previously, return a length of 0. The + caller is responsible for correctly padding the input field. */ + if (dtp->u.p.sf_seen_eor) + { + *length = 0; + return base; + } + + if (is_internal_unit (dtp)) + { + readlen = *length; + if (unlikely (sread (dtp->u.p.current_unit->s, p, &readlen) != 0 + || readlen < (size_t) *length)) + { + generate_error (&dtp->common, LIBERROR_END, NULL); + return NULL; + } + + goto done; + } + + readlen = 1; + n = 0; + + do + { + if (unlikely (sread (dtp->u.p.current_unit->s, &q, &readlen) != 0)) + { + generate_error (&dtp->common, LIBERROR_END, NULL); + return NULL; + } + + /* If we have a line without a terminating \n, drop through to + EOR below. */ + if (readlen < 1 && n == 0) + { + if (likely (no_error)) + break; + generate_error (&dtp->common, LIBERROR_END, NULL); + return NULL; + } + + if (readlen < 1 || q == '\n' || q == '\r') + { + /* Unexpected end of line. */ + + /* If we see an EOR during non-advancing I/O, we need to skip + the rest of the I/O statement. Set the corresponding flag. */ + if (dtp->u.p.advance_status == ADVANCE_NO || dtp->u.p.seen_dollar) + dtp->u.p.eor_condition = 1; + + crlf = 0; + /* If we encounter a CR, it might be a CRLF. */ + if (q == '\r') /* Probably a CRLF */ + { + readlen = 1; + pos = stream_offset (dtp->u.p.current_unit->s); + if (unlikely (sread (dtp->u.p.current_unit->s, &q, &readlen) + != 0)) + { + generate_error (&dtp->common, LIBERROR_END, NULL); + return NULL; + } + if (q != '\n' && readlen == 1) /* Not a CRLF after all. */ + sseek (dtp->u.p.current_unit->s, pos); + else + crlf = 1; + } + + /* Without padding, terminate the I/O statement without assigning + the value. With padding, the value still needs to be assigned, + so we can just continue with a short read. */ + if (dtp->u.p.current_unit->pad_status == PAD_NO) + { + if (likely (no_error)) + break; + generate_error (&dtp->common, LIBERROR_EOR, NULL); + return NULL; + } + + *length = n; + dtp->u.p.sf_seen_eor = (crlf ? 2 : 1); + break; + } + /* Short circuit the read if a comma is found during numeric input. + The flag is set to zero during character reads so that commas in + strings are not ignored */ + if (q == ',') + if (dtp->u.p.sf_read_comma == 1) + { + notify_std (&dtp->common, GFC_STD_GNU, + "Comma in formatted numeric read."); + *length = n; + break; + } + + n++; + *p++ = q; + dtp->u.p.sf_seen_eor = 0; + } + while (n < *length); + + done: + dtp->u.p.current_unit->bytes_left -= *length; + + if ((dtp->common.flags & IOPARM_DT_HAS_SIZE) != 0) + dtp->u.p.size_used += (GFC_IO_INT) *length; + + return base; +} + + +/* Function for reading the next couple of bytes from the current + file, advancing the current position. We return FAILURE on end of record or + end of file. This function is only for formatted I/O, unformatted uses + read_block_direct. + + If the read is short, then it is because the current record does not + have enough data to satisfy the read request and the file was + opened with PAD=YES. The caller must assume tailing spaces for + short reads. */ + +try +read_block_form (st_parameter_dt *dtp, void *buf, size_t *nbytes) +{ + char *source; + size_t nread; + int nb; + + if (!is_stream_io (dtp)) + { + if (dtp->u.p.current_unit->bytes_left < (gfc_offset) *nbytes) + { + /* For preconnected units with default record length, set bytes left + to unit record length and proceed, otherwise error. */ + if (dtp->u.p.current_unit->unit_number == options.stdin_unit + && dtp->u.p.current_unit->recl == DEFAULT_RECL) + dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl; + else + { + if (unlikely (dtp->u.p.current_unit->pad_status == PAD_NO)) + { + /* Not enough data left. */ + generate_error (&dtp->common, LIBERROR_EOR, NULL); + return FAILURE; + } + } + + if (unlikely (dtp->u.p.current_unit->bytes_left == 0)) + { + dtp->u.p.current_unit->endfile = AT_ENDFILE; + generate_error (&dtp->common, LIBERROR_END, NULL); + return FAILURE; + } + + *nbytes = dtp->u.p.current_unit->bytes_left; + } + } + + if (dtp->u.p.current_unit->flags.form == FORM_FORMATTED && + (dtp->u.p.current_unit->flags.access == ACCESS_SEQUENTIAL || + dtp->u.p.current_unit->flags.access == ACCESS_STREAM)) + { + nb = *nbytes; + source = read_sf (dtp, &nb, 0); + *nbytes = nb; + dtp->u.p.current_unit->strm_pos += + (gfc_offset) (*nbytes + dtp->u.p.sf_seen_eor); + if (source == NULL) + return FAILURE; + memcpy (buf, source, *nbytes); + return SUCCESS; + } + dtp->u.p.current_unit->bytes_left -= (gfc_offset) *nbytes; + + nread = *nbytes; + if (unlikely (sread (dtp->u.p.current_unit->s, buf, &nread) != 0)) + { + generate_error (&dtp->common, LIBERROR_OS, NULL); + return FAILURE; + } + + if ((dtp->common.flags & IOPARM_DT_HAS_SIZE) != 0) + dtp->u.p.size_used += (GFC_IO_INT) nread; + + if (nread != *nbytes) + { /* Short read, this shouldn't happen. */ + if (likely (dtp->u.p.current_unit->pad_status == PAD_YES)) + *nbytes = nread; + else + { + generate_error (&dtp->common, LIBERROR_EOR, NULL); + source = NULL; + } + } + + dtp->u.p.current_unit->strm_pos += (gfc_offset) nread; + + return SUCCESS; +} + + +/* Reads a block directly into application data space. This is for + unformatted files. */ + +static void +read_block_direct (st_parameter_dt *dtp, void *buf, size_t *nbytes) +{ + size_t to_read_record; + size_t have_read_record; + size_t to_read_subrecord; + size_t have_read_subrecord; + int short_record; + + if (is_stream_io (dtp)) + { + to_read_record = *nbytes; + have_read_record = to_read_record; + if (unlikely (sread (dtp->u.p.current_unit->s, buf, &have_read_record) + != 0)) + { + generate_error (&dtp->common, LIBERROR_OS, NULL); + return; + } + + dtp->u.p.current_unit->strm_pos += (gfc_offset) have_read_record; + + if (unlikely (to_read_record != have_read_record)) + { + /* Short read, e.g. if we hit EOF. For stream files, + we have to set the end-of-file condition. */ + generate_error (&dtp->common, LIBERROR_END, NULL); + return; + } + return; + } + + if (dtp->u.p.current_unit->flags.access == ACCESS_DIRECT) + { + if (dtp->u.p.current_unit->bytes_left < (gfc_offset) *nbytes) + { + short_record = 1; + to_read_record = (size_t) dtp->u.p.current_unit->bytes_left; + *nbytes = to_read_record; + } + + else + { + short_record = 0; + to_read_record = *nbytes; + } + + dtp->u.p.current_unit->bytes_left -= to_read_record; + + if (unlikely (sread (dtp->u.p.current_unit->s, buf, &to_read_record) + != 0)) + { + generate_error (&dtp->common, LIBERROR_OS, NULL); + return; + } + + if (to_read_record != *nbytes) + { + /* Short read, e.g. if we hit EOF. Apparently, we read + more than was written to the last record. */ + *nbytes = to_read_record; + return; + } + + if (unlikely (short_record)) + { + generate_error (&dtp->common, LIBERROR_SHORT_RECORD, NULL); + return; + } + return; + } + + /* Unformatted sequential. We loop over the subrecords, reading + until the request has been fulfilled or the record has run out + of continuation subrecords. */ + + if (unlikely (dtp->u.p.current_unit->endfile == AT_ENDFILE)) + { + generate_error (&dtp->common, LIBERROR_END, NULL); + return; + } + + /* Check whether we exceed the total record length. */ + + if (dtp->u.p.current_unit->flags.has_recl + && (*nbytes > (size_t) dtp->u.p.current_unit->bytes_left)) + { + to_read_record = (size_t) dtp->u.p.current_unit->bytes_left; + short_record = 1; + } + else + { + to_read_record = *nbytes; + short_record = 0; + } + have_read_record = 0; + + while(1) + { + if (dtp->u.p.current_unit->bytes_left_subrecord + < (gfc_offset) to_read_record) + { + to_read_subrecord = (size_t) dtp->u.p.current_unit->bytes_left_subrecord; + to_read_record -= to_read_subrecord; + } + else + { + to_read_subrecord = to_read_record; + to_read_record = 0; + } + + dtp->u.p.current_unit->bytes_left_subrecord -= to_read_subrecord; + + have_read_subrecord = to_read_subrecord; + if (unlikely (sread (dtp->u.p.current_unit->s, buf + have_read_record, + &have_read_subrecord) != 0)) + { + generate_error (&dtp->common, LIBERROR_OS, NULL); + return; + } + + have_read_record += have_read_subrecord; + + if (unlikely (to_read_subrecord != have_read_subrecord)) + + { + /* Short read, e.g. if we hit EOF. This means the record + structure has been corrupted, or the trailing record + marker would still be present. */ + + *nbytes = have_read_record; + generate_error (&dtp->common, LIBERROR_CORRUPT_FILE, NULL); + return; + } + + if (to_read_record > 0) + { + if (likely (dtp->u.p.current_unit->continued)) + { + next_record_r_unf (dtp, 0); + us_read (dtp, 1); + } + else + { + /* Let's make sure the file position is correctly pre-positioned + for the next read statement. */ + + dtp->u.p.current_unit->current_record = 0; + next_record_r_unf (dtp, 0); + generate_error (&dtp->common, LIBERROR_SHORT_RECORD, NULL); + return; + } + } + else + { + /* Normal exit, the read request has been fulfilled. */ + break; + } + } + + dtp->u.p.current_unit->bytes_left -= have_read_record; + if (unlikely (short_record)) + { + generate_error (&dtp->common, LIBERROR_SHORT_RECORD, NULL); + return; + } + return; +} + + +/* Function for writing a block of bytes to the current file at the + current position, advancing the file pointer. We are given a length + and return a pointer to a buffer that the caller must (completely) + fill in. Returns NULL on error. */ + +void * +write_block (st_parameter_dt *dtp, int length) +{ + char *dest; + + if (!is_stream_io (dtp)) + { + if (dtp->u.p.current_unit->bytes_left < (gfc_offset) length) + { + /* For preconnected units with default record length, set bytes left + to unit record length and proceed, otherwise error. */ + if (likely ((dtp->u.p.current_unit->unit_number + == options.stdout_unit + || dtp->u.p.current_unit->unit_number + == options.stderr_unit) + && dtp->u.p.current_unit->recl == DEFAULT_RECL)) + dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl; + else + { + generate_error (&dtp->common, LIBERROR_EOR, NULL); + return NULL; + } + } + + dtp->u.p.current_unit->bytes_left -= (gfc_offset) length; + } + + if (is_internal_unit (dtp)) + { + dest = salloc_w (dtp->u.p.current_unit->s, &length); + + if (dest == NULL) + { + generate_error (&dtp->common, LIBERROR_END, NULL); + return NULL; + } + + if (unlikely (dtp->u.p.current_unit->endfile == AT_ENDFILE)) + generate_error (&dtp->common, LIBERROR_END, NULL); + } + else + { + dest = fbuf_alloc (dtp->u.p.current_unit, length); + if (dest == NULL) + { + generate_error (&dtp->common, LIBERROR_OS, NULL); + return NULL; + } + } + + if ((dtp->common.flags & IOPARM_DT_HAS_SIZE) != 0) + dtp->u.p.size_used += (GFC_IO_INT) length; + + dtp->u.p.current_unit->strm_pos += (gfc_offset) length; + + return dest; +} + + +/* High level interface to swrite(), taking care of errors. This is only + called for unformatted files. There are three cases to consider: + Stream I/O, unformatted direct, unformatted sequential. */ + +static try +write_buf (st_parameter_dt *dtp, void *buf, size_t nbytes) +{ + + size_t have_written, to_write_subrecord; + int short_record; + + /* Stream I/O. */ + + if (is_stream_io (dtp)) + { + if (unlikely (swrite (dtp->u.p.current_unit->s, buf, &nbytes) != 0)) + { + generate_error (&dtp->common, LIBERROR_OS, NULL); + return FAILURE; + } + + dtp->u.p.current_unit->strm_pos += (gfc_offset) nbytes; + + return SUCCESS; + } + + /* Unformatted direct access. */ + + if (dtp->u.p.current_unit->flags.access == ACCESS_DIRECT) + { + if (unlikely (dtp->u.p.current_unit->bytes_left < (gfc_offset) nbytes)) + { + generate_error (&dtp->common, LIBERROR_DIRECT_EOR, NULL); + return FAILURE; + } + + if (buf == NULL && nbytes == 0) + return SUCCESS; + + if (unlikely (swrite (dtp->u.p.current_unit->s, buf, &nbytes) != 0)) + { + generate_error (&dtp->common, LIBERROR_OS, NULL); + return FAILURE; + } + + dtp->u.p.current_unit->strm_pos += (gfc_offset) nbytes; + dtp->u.p.current_unit->bytes_left -= (gfc_offset) nbytes; + + return SUCCESS; + } + + /* Unformatted sequential. */ + + have_written = 0; + + if (dtp->u.p.current_unit->flags.has_recl + && (gfc_offset) nbytes > dtp->u.p.current_unit->bytes_left) + { + nbytes = dtp->u.p.current_unit->bytes_left; + short_record = 1; + } + else + { + short_record = 0; + } + + while (1) + { + + to_write_subrecord = + (size_t) dtp->u.p.current_unit->bytes_left_subrecord < nbytes ? + (size_t) dtp->u.p.current_unit->bytes_left_subrecord : nbytes; + + dtp->u.p.current_unit->bytes_left_subrecord -= + (gfc_offset) to_write_subrecord; + + if (unlikely (swrite (dtp->u.p.current_unit->s, buf + have_written, + &to_write_subrecord) != 0)) + { + generate_error (&dtp->common, LIBERROR_OS, NULL); + return FAILURE; + } + + dtp->u.p.current_unit->strm_pos += (gfc_offset) to_write_subrecord; + nbytes -= to_write_subrecord; + have_written += to_write_subrecord; + + if (nbytes == 0) + break; + + next_record_w_unf (dtp, 1); + us_write (dtp, 1); + } + dtp->u.p.current_unit->bytes_left -= have_written; + if (unlikely (short_record)) + { + generate_error (&dtp->common, LIBERROR_SHORT_RECORD, NULL); + return FAILURE; + } + return SUCCESS; +} + + +/* Master function for unformatted reads. */ + +static void +unformatted_read (st_parameter_dt *dtp, bt type, + void *dest, int kind, size_t size, size_t nelems) +{ + size_t i, sz; + + if (likely (dtp->u.p.current_unit->flags.convert == GFC_CONVERT_NATIVE) + || kind == 1) + { + sz = size * nelems; + if (type == BT_CHARACTER) + sz *= GFC_SIZE_OF_CHAR_KIND(kind); + read_block_direct (dtp, dest, &sz); + } + else + { + char buffer[16]; + char *p; + + p = dest; + + /* Handle wide chracters. */ + if (type == BT_CHARACTER && kind != 1) + { + nelems *= size; + size = kind; + } + + /* Break up complex into its constituent reals. */ + if (type == BT_COMPLEX) + { + nelems *= 2; + size /= 2; + } + + /* By now, all complex variables have been split into their + constituent reals. */ + + for (i = 0; i < nelems; i++) + { + read_block_direct (dtp, buffer, &size); + reverse_memcpy (p, buffer, size); + p += size; + } + } +} + + +/* Master function for unformatted writes. NOTE: For kind=10 the size is 16 + bytes on 64 bit machines. The unused bytes are not initialized and never + used, which can show an error with memory checking analyzers like + valgrind. */ + +static void +unformatted_write (st_parameter_dt *dtp, bt type, + void *source, int kind, size_t size, size_t nelems) +{ + if (likely (dtp->u.p.current_unit->flags.convert == GFC_CONVERT_NATIVE) + || kind == 1) + { + size_t stride = type == BT_CHARACTER ? + size * GFC_SIZE_OF_CHAR_KIND(kind) : size; + + write_buf (dtp, source, stride * nelems); + } + else + { + char buffer[16]; + char *p; + size_t i; + + p = source; + + /* Handle wide chracters. */ + if (type == BT_CHARACTER && kind != 1) + { + nelems *= size; + size = kind; + } + + /* Break up complex into its constituent reals. */ + if (type == BT_COMPLEX) + { + nelems *= 2; + size /= 2; + } + + /* By now, all complex variables have been split into their + constituent reals. */ + + for (i = 0; i < nelems; i++) + { + reverse_memcpy(buffer, p, size); + p += size; + write_buf (dtp, buffer, size); + } + } +} + + +/* Return a pointer to the name of a type. */ + +const char * +type_name (bt type) +{ + const char *p; + + switch (type) + { + case BT_INTEGER: + p = "INTEGER"; + break; + case BT_LOGICAL: + p = "LOGICAL"; + break; + case BT_CHARACTER: + p = "CHARACTER"; + break; + case BT_REAL: + p = "REAL"; + break; + case BT_COMPLEX: + p = "COMPLEX"; + break; + default: + internal_error (NULL, "type_name(): Bad type"); + } + + return p; +} + + +/* Write a constant string to the output. + This is complicated because the string can have doubled delimiters + in it. The length in the format node is the true length. */ + +static void +write_constant_string (st_parameter_dt *dtp, const fnode *f) +{ + char c, delimiter, *p, *q; + int length; + + length = f->u.string.length; + if (length == 0) + return; + + p = write_block (dtp, length); + if (p == NULL) + return; + + q = f->u.string.p; + delimiter = q[-1]; + + for (; length > 0; length--) + { + c = *p++ = *q++; + if (c == delimiter && c != 'H' && c != 'h') + q++; /* Skip the doubled delimiter. */ + } +} + + +/* Given actual and expected types in a formatted data transfer, make + sure they agree. If not, an error message is generated. Returns + nonzero if something went wrong. */ + +static int +require_type (st_parameter_dt *dtp, bt expected, bt actual, const fnode *f) +{ + char buffer[100]; + + if (actual == expected) + return 0; + + sprintf (buffer, "Expected %s for item %d in formatted transfer, got %s", + type_name (expected), dtp->u.p.item_count, type_name (actual)); + + format_error (dtp, f, buffer); + return 1; +} + + +/* This subroutine is the main loop for a formatted data transfer + statement. It would be natural to implement this as a coroutine + with the user program, but C makes that awkward. We loop, + processing format elements. When we actually have to transfer + data instead of just setting flags, we return control to the user + program which calls a subroutine that supplies the address and type + of the next element, then comes back here to process it. */ + +static void +formatted_transfer_scalar (st_parameter_dt *dtp, bt type, void *p, int kind, + size_t size) +{ + char scratch[SCRATCH_SIZE]; + int pos, bytes_used; + const fnode *f; + format_token t; + int n; + int consume_data_flag; + + /* Change a complex data item into a pair of reals. */ + + n = (p == NULL) ? 0 : ((type != BT_COMPLEX) ? 1 : 2); + if (type == BT_COMPLEX) + { + type = BT_REAL; + size /= 2; + } + + /* If there's an EOR condition, we simulate finalizing the transfer + by doing nothing. */ + if (dtp->u.p.eor_condition) + return; + + /* Set this flag so that commas in reads cause the read to complete before + the entire field has been read. The next read field will start right after + the comma in the stream. (Set to 0 for character reads). */ + dtp->u.p.sf_read_comma = + dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA ? 0 : 1; + + dtp->u.p.line_buffer = scratch; + + for (;;) + { + /* If reversion has occurred and there is another real data item, + then we have to move to the next record. */ + if (dtp->u.p.reversion_flag && n > 0) + { + dtp->u.p.reversion_flag = 0; + next_record (dtp, 0); + } + + consume_data_flag = 1; + if ((dtp->common.flags & IOPARM_LIBRETURN_MASK) != IOPARM_LIBRETURN_OK) + break; + + f = next_format (dtp); + if (f == NULL) + { + /* No data descriptors left. */ + if (unlikely (n > 0)) + generate_error (&dtp->common, LIBERROR_FORMAT, + "Insufficient data descriptors in format after reversion"); + return; + } + + /* Now discharge T, TR and X movements to the right. This is delayed + until a data producing format to suppress trailing spaces. */ + + t = f->format; + if (dtp->u.p.mode == WRITING && dtp->u.p.skips != 0 + && ((n>0 && ( t == FMT_I || t == FMT_B || t == FMT_O + || t == FMT_Z || t == FMT_F || t == FMT_E + || t == FMT_EN || t == FMT_ES || t == FMT_G + || t == FMT_L || t == FMT_A || t == FMT_D)) + || t == FMT_STRING)) + { + if (dtp->u.p.skips > 0) + { + int tmp; + write_x (dtp, dtp->u.p.skips, dtp->u.p.pending_spaces); + tmp = (int)(dtp->u.p.current_unit->recl + - dtp->u.p.current_unit->bytes_left); + dtp->u.p.max_pos = + dtp->u.p.max_pos > tmp ? dtp->u.p.max_pos : tmp; + } + if (dtp->u.p.skips < 0) + { + if (is_internal_unit (dtp)) + move_pos_offset (dtp->u.p.current_unit->s, dtp->u.p.skips); + else + fbuf_seek (dtp->u.p.current_unit, dtp->u.p.skips); + dtp->u.p.current_unit->bytes_left -= (gfc_offset) dtp->u.p.skips; + } + dtp->u.p.skips = dtp->u.p.pending_spaces = 0; + } + + bytes_used = (int)(dtp->u.p.current_unit->recl + - dtp->u.p.current_unit->bytes_left); + + if (is_stream_io(dtp)) + bytes_used = 0; + + switch (t) + { + case FMT_I: + if (n == 0) + goto need_data; + if (require_type (dtp, BT_INTEGER, type, f)) + return; + + if (dtp->u.p.mode == READING) + read_decimal (dtp, f, p, kind); + else + write_i (dtp, f, p, kind); + + break; + + case FMT_B: + if (n == 0) + goto need_data; + + if (compile_options.allow_std < GFC_STD_GNU + && require_type (dtp, BT_INTEGER, type, f)) + return; + + if (dtp->u.p.mode == READING) + read_radix (dtp, f, p, kind, 2); + else + write_b (dtp, f, p, kind); + + break; + + case FMT_O: + if (n == 0) + goto need_data; + + if (compile_options.allow_std < GFC_STD_GNU + && require_type (dtp, BT_INTEGER, type, f)) + return; + + if (dtp->u.p.mode == READING) + read_radix (dtp, f, p, kind, 8); + else + write_o (dtp, f, p, kind); + + break; + + case FMT_Z: + if (n == 0) + goto need_data; + + if (compile_options.allow_std < GFC_STD_GNU + && require_type (dtp, BT_INTEGER, type, f)) + return; + + if (dtp->u.p.mode == READING) + read_radix (dtp, f, p, kind, 16); + else + write_z (dtp, f, p, kind); + + break; + + case FMT_A: + if (n == 0) + goto need_data; + + /* It is possible to have FMT_A with something not BT_CHARACTER such + as when writing out hollerith strings, so check both type + and kind before calling wide character routines. */ + if (dtp->u.p.mode == READING) + { + if (type == BT_CHARACTER && kind == 4) + read_a_char4 (dtp, f, p, size); + else + read_a (dtp, f, p, size); + } + else + { + if (type == BT_CHARACTER && kind == 4) + write_a_char4 (dtp, f, p, size); + else + write_a (dtp, f, p, size); + } + break; + + case FMT_L: + if (n == 0) + goto need_data; + + if (dtp->u.p.mode == READING) + read_l (dtp, f, p, kind); + else + write_l (dtp, f, p, kind); + + break; + + case FMT_D: + if (n == 0) + goto need_data; + if (require_type (dtp, BT_REAL, type, f)) + return; + + if (dtp->u.p.mode == READING) + read_f (dtp, f, p, kind); + else + write_d (dtp, f, p, kind); + + break; + + case FMT_E: + if (n == 0) + goto need_data; + if (require_type (dtp, BT_REAL, type, f)) + return; + + if (dtp->u.p.mode == READING) + read_f (dtp, f, p, kind); + else + write_e (dtp, f, p, kind); + break; + + case FMT_EN: + if (n == 0) + goto need_data; + if (require_type (dtp, BT_REAL, type, f)) + return; + + if (dtp->u.p.mode == READING) + read_f (dtp, f, p, kind); + else + write_en (dtp, f, p, kind); + + break; + + case FMT_ES: + if (n == 0) + goto need_data; + if (require_type (dtp, BT_REAL, type, f)) + return; + + if (dtp->u.p.mode == READING) + read_f (dtp, f, p, kind); + else + write_es (dtp, f, p, kind); + + break; + + case FMT_F: + if (n == 0) + goto need_data; + if (require_type (dtp, BT_REAL, type, f)) + return; + + if (dtp->u.p.mode == READING) + read_f (dtp, f, p, kind); + else + write_f (dtp, f, p, kind); + + break; + + case FMT_G: + if (n == 0) + goto need_data; + if (dtp->u.p.mode == READING) + switch (type) + { + case BT_INTEGER: + read_decimal (dtp, f, p, kind); + break; + case BT_LOGICAL: + read_l (dtp, f, p, kind); + break; + case BT_CHARACTER: + if (kind == 4) + read_a_char4 (dtp, f, p, size); + else + read_a (dtp, f, p, size); + break; + case BT_REAL: + read_f (dtp, f, p, kind); + break; + default: + goto bad_type; + } + else + switch (type) + { + case BT_INTEGER: + write_i (dtp, f, p, kind); + break; + case BT_LOGICAL: + write_l (dtp, f, p, kind); + break; + case BT_CHARACTER: + if (kind == 4) + write_a_char4 (dtp, f, p, size); + else + write_a (dtp, f, p, size); + break; + case BT_REAL: + if (f->u.real.w == 0) + write_real_g0 (dtp, p, kind, f->u.real.d); + else + write_d (dtp, f, p, kind); + break; + default: + bad_type: + internal_error (&dtp->common, + "formatted_transfer(): Bad type"); + } + + break; + + case FMT_STRING: + consume_data_flag = 0; + if (dtp->u.p.mode == READING) + { + format_error (dtp, f, "Constant string in input format"); + return; + } + write_constant_string (dtp, f); + break; + + /* Format codes that don't transfer data. */ + case FMT_X: + case FMT_TR: + consume_data_flag = 0; + + dtp->u.p.skips += f->u.n; + pos = bytes_used + dtp->u.p.skips - 1; + dtp->u.p.pending_spaces = pos - dtp->u.p.max_pos + 1; + + /* Writes occur just before the switch on f->format, above, so + that trailing blanks are suppressed, unless we are doing a + non-advancing write in which case we want to output the blanks + now. */ + if (dtp->u.p.mode == WRITING + && dtp->u.p.advance_status == ADVANCE_NO) + { + write_x (dtp, dtp->u.p.skips, dtp->u.p.pending_spaces); + dtp->u.p.skips = dtp->u.p.pending_spaces = 0; + } + + if (dtp->u.p.mode == READING) + read_x (dtp, f->u.n); + + break; + + case FMT_TL: + case FMT_T: + consume_data_flag = 0; + + if (f->format == FMT_TL) + { + + /* Handle the special case when no bytes have been used yet. + Cannot go below zero. */ + if (bytes_used == 0) + { + dtp->u.p.pending_spaces -= f->u.n; + dtp->u.p.skips -= f->u.n; + dtp->u.p.skips = dtp->u.p.skips < 0 ? 0 : dtp->u.p.skips; + } + + pos = bytes_used - f->u.n; + } + else /* FMT_T */ + { + if (dtp->u.p.mode == READING) + pos = f->u.n - 1; + else + pos = f->u.n - dtp->u.p.pending_spaces - 1; + } + + /* Standard 10.6.1.1: excessive left tabbing is reset to the + left tab limit. We do not check if the position has gone + beyond the end of record because a subsequent tab could + bring us back again. */ + pos = pos < 0 ? 0 : pos; + + dtp->u.p.skips = dtp->u.p.skips + pos - bytes_used; + dtp->u.p.pending_spaces = dtp->u.p.pending_spaces + + pos - dtp->u.p.max_pos; + dtp->u.p.pending_spaces = dtp->u.p.pending_spaces < 0 + ? 0 : dtp->u.p.pending_spaces; + + if (dtp->u.p.skips == 0) + break; + + /* Writes occur just before the switch on f->format, above, so that + trailing blanks are suppressed. */ + if (dtp->u.p.mode == READING) + { + /* Adjust everything for end-of-record condition */ + if (dtp->u.p.sf_seen_eor && !is_internal_unit (dtp)) + { + if (dtp->u.p.sf_seen_eor == 2) + { + /* The EOR was a CRLF (two bytes wide). */ + dtp->u.p.current_unit->bytes_left -= 2; + dtp->u.p.skips -= 2; + } + else + { + /* The EOR marker was only one byte wide. */ + dtp->u.p.current_unit->bytes_left--; + dtp->u.p.skips--; + } + bytes_used = pos; + dtp->u.p.sf_seen_eor = 0; + } + if (dtp->u.p.skips < 0) + { + move_pos_offset (dtp->u.p.current_unit->s, dtp->u.p.skips); + dtp->u.p.current_unit->bytes_left + -= (gfc_offset) dtp->u.p.skips; + dtp->u.p.skips = dtp->u.p.pending_spaces = 0; + } + else + read_x (dtp, dtp->u.p.skips); + } + + break; + + case FMT_S: + consume_data_flag = 0; + dtp->u.p.sign_status = SIGN_S; + break; + + case FMT_SS: + consume_data_flag = 0; + dtp->u.p.sign_status = SIGN_SS; + break; + + case FMT_SP: + consume_data_flag = 0; + dtp->u.p.sign_status = SIGN_SP; + break; + + case FMT_BN: + consume_data_flag = 0 ; + dtp->u.p.blank_status = BLANK_NULL; + break; + + case FMT_BZ: + consume_data_flag = 0; + dtp->u.p.blank_status = BLANK_ZERO; + break; + + case FMT_DC: + consume_data_flag = 0; + dtp->u.p.current_unit->decimal_status = DECIMAL_COMMA; + break; + + case FMT_DP: + consume_data_flag = 0; + dtp->u.p.current_unit->decimal_status = DECIMAL_POINT; + break; + + case FMT_P: + consume_data_flag = 0; + dtp->u.p.scale_factor = f->u.k; + break; + + case FMT_DOLLAR: + consume_data_flag = 0; + dtp->u.p.seen_dollar = 1; + break; + + case FMT_SLASH: + consume_data_flag = 0; + dtp->u.p.skips = dtp->u.p.pending_spaces = 0; + next_record (dtp, 0); + break; + + case FMT_COLON: + /* A colon descriptor causes us to exit this loop (in + particular preventing another / descriptor from being + processed) unless there is another data item to be + transferred. */ + consume_data_flag = 0; + if (n == 0) + return; + break; + + default: + internal_error (&dtp->common, "Bad format node"); + } + + /* Free a buffer that we had to allocate during a sequential + formatted read of a block that was larger than the static + buffer. */ + + if (dtp->u.p.line_buffer != scratch) + { + free_mem (dtp->u.p.line_buffer); + dtp->u.p.line_buffer = scratch; + } + + /* Adjust the item count and data pointer. */ + + if ((consume_data_flag > 0) && (n > 0)) + { + n--; + p = ((char *) p) + size; + } + + if (dtp->u.p.mode == READING) + dtp->u.p.skips = 0; + + pos = (int)(dtp->u.p.current_unit->recl - dtp->u.p.current_unit->bytes_left); + dtp->u.p.max_pos = (dtp->u.p.max_pos > pos) ? dtp->u.p.max_pos : pos; + + } + + return; + + /* Come here when we need a data descriptor but don't have one. We + push the current format node back onto the input, then return and + let the user program call us back with the data. */ + need_data: + unget_format (dtp, f); +} + +static void +formatted_transfer (st_parameter_dt *dtp, bt type, void *p, int kind, + size_t size, size_t nelems) +{ + size_t elem; + char *tmp; + + tmp = (char *) p; + size_t stride = type == BT_CHARACTER ? + size * GFC_SIZE_OF_CHAR_KIND(kind) : size; + /* Big loop over all the elements. */ + for (elem = 0; elem < nelems; elem++) + { + dtp->u.p.item_count++; + formatted_transfer_scalar (dtp, type, tmp + stride*elem, kind, size); + } +} + + + +/* Data transfer entry points. The type of the data entity is + implicit in the subroutine call. This prevents us from having to + share a common enum with the compiler. */ + +void +transfer_integer (st_parameter_dt *dtp, void *p, int kind) +{ + if ((dtp->common.flags & IOPARM_LIBRETURN_MASK) != IOPARM_LIBRETURN_OK) + return; + dtp->u.p.transfer (dtp, BT_INTEGER, p, kind, kind, 1); +} + + +void +transfer_real (st_parameter_dt *dtp, void *p, int kind) +{ + size_t size; + if ((dtp->common.flags & IOPARM_LIBRETURN_MASK) != IOPARM_LIBRETURN_OK) + return; + size = size_from_real_kind (kind); + dtp->u.p.transfer (dtp, BT_REAL, p, kind, size, 1); +} + + +void +transfer_logical (st_parameter_dt *dtp, void *p, int kind) +{ + if ((dtp->common.flags & IOPARM_LIBRETURN_MASK) != IOPARM_LIBRETURN_OK) + return; + dtp->u.p.transfer (dtp, BT_LOGICAL, p, kind, kind, 1); +} + + +void +transfer_character (st_parameter_dt *dtp, void *p, int len) +{ + static char *empty_string[0]; + + if ((dtp->common.flags & IOPARM_LIBRETURN_MASK) != IOPARM_LIBRETURN_OK) + return; + + /* Strings of zero length can have p == NULL, which confuses the + transfer routines into thinking we need more data elements. To avoid + this, we give them a nice pointer. */ + if (len == 0 && p == NULL) + p = empty_string; + + /* Set kind here to 1. */ + dtp->u.p.transfer (dtp, BT_CHARACTER, p, 1, len, 1); +} + +void +transfer_character_wide (st_parameter_dt *dtp, void *p, int len, int kind) +{ + static char *empty_string[0]; + + if ((dtp->common.flags & IOPARM_LIBRETURN_MASK) != IOPARM_LIBRETURN_OK) + return; + + /* Strings of zero length can have p == NULL, which confuses the + transfer routines into thinking we need more data elements. To avoid + this, we give them a nice pointer. */ + if (len == 0 && p == NULL) + p = empty_string; + + /* Here we pass the actual kind value. */ + dtp->u.p.transfer (dtp, BT_CHARACTER, p, kind, len, 1); +} + + +void +transfer_complex (st_parameter_dt *dtp, void *p, int kind) +{ + size_t size; + if ((dtp->common.flags & IOPARM_LIBRETURN_MASK) != IOPARM_LIBRETURN_OK) + return; + size = size_from_complex_kind (kind); + dtp->u.p.transfer (dtp, BT_COMPLEX, p, kind, size, 1); +} + + +void +transfer_array (st_parameter_dt *dtp, gfc_array_char *desc, int kind, + gfc_charlen_type charlen) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0, rank, size, type, n; + size_t tsize; + char *data; + bt iotype; + + if ((dtp->common.flags & IOPARM_LIBRETURN_MASK) != IOPARM_LIBRETURN_OK) + return; + + type = GFC_DESCRIPTOR_TYPE (desc); + size = GFC_DESCRIPTOR_SIZE (desc); + + /* FIXME: What a kludge: Array descriptors and the IO library use + different enums for types. */ + switch (type) + { + case GFC_DTYPE_UNKNOWN: + iotype = BT_NULL; /* Is this correct? */ + break; + case GFC_DTYPE_INTEGER: + iotype = BT_INTEGER; + break; + case GFC_DTYPE_LOGICAL: + iotype = BT_LOGICAL; + break; + case GFC_DTYPE_REAL: + iotype = BT_REAL; + break; + case GFC_DTYPE_COMPLEX: + iotype = BT_COMPLEX; + break; + case GFC_DTYPE_CHARACTER: + iotype = BT_CHARACTER; + size = charlen; + break; + case GFC_DTYPE_DERIVED: + internal_error (&dtp->common, + "Derived type I/O should have been handled via the frontend."); + break; + default: + internal_error (&dtp->common, "transfer_array(): Bad type"); + } + + rank = GFC_DESCRIPTOR_RANK (desc); + for (n = 0; n < rank; n++) + { + count[n] = 0; + stride[n] = iotype == BT_CHARACTER ? + desc->dim[n].stride * GFC_SIZE_OF_CHAR_KIND(kind) : + desc->dim[n].stride; + extent[n] = desc->dim[n].ubound + 1 - desc->dim[n].lbound; + + /* If the extent of even one dimension is zero, then the entire + array section contains zero elements, so we return after writing + a zero array record. */ + if (extent[n] <= 0) + { + data = NULL; + tsize = 0; + dtp->u.p.transfer (dtp, iotype, data, kind, size, tsize); + return; + } + } + + stride0 = stride[0]; + + /* If the innermost dimension has stride 1, we can do the transfer + in contiguous chunks. */ + if (stride0 == 1) + tsize = extent[0]; + else + tsize = 1; + + data = GFC_DESCRIPTOR_DATA (desc); + + while (data) + { + dtp->u.p.transfer (dtp, iotype, data, kind, size, tsize); + data += stride0 * size * tsize; + count[0] += tsize; + n = 0; + while (count[n] == extent[n]) + { + count[n] = 0; + data -= stride[n] * extent[n] * size; + n++; + if (n == rank) + { + data = NULL; + break; + } + else + { + count[n]++; + data += stride[n] * size; + } + } + } +} + + +/* Preposition a sequential unformatted file while reading. */ + +static void +us_read (st_parameter_dt *dtp, int continued) +{ + size_t n, nr; + GFC_INTEGER_4 i4; + GFC_INTEGER_8 i8; + gfc_offset i; + + if (dtp->u.p.current_unit->endfile == AT_ENDFILE) + return; + + if (compile_options.record_marker == 0) + n = sizeof (GFC_INTEGER_4); + else + n = compile_options.record_marker; + + nr = n; + + if (unlikely (sread (dtp->u.p.current_unit->s, &i, &n) != 0)) + { + generate_error (&dtp->common, LIBERROR_BAD_US, NULL); + return; + } + + if (n == 0) + { + dtp->u.p.current_unit->endfile = AT_ENDFILE; + return; /* end of file */ + } + + if (unlikely (n != nr)) + { + generate_error (&dtp->common, LIBERROR_BAD_US, NULL); + return; + } + + /* Only GFC_CONVERT_NATIVE and GFC_CONVERT_SWAP are valid here. */ + if (likely (dtp->u.p.current_unit->flags.convert == GFC_CONVERT_NATIVE)) + { + switch (nr) + { + case sizeof(GFC_INTEGER_4): + memcpy (&i4, &i, sizeof (i4)); + i = i4; + break; + + case sizeof(GFC_INTEGER_8): + memcpy (&i8, &i, sizeof (i8)); + i = i8; + break; + + default: + runtime_error ("Illegal value for record marker"); + break; + } + } + else + switch (nr) + { + case sizeof(GFC_INTEGER_4): + reverse_memcpy (&i4, &i, sizeof (i4)); + i = i4; + break; + + case sizeof(GFC_INTEGER_8): + reverse_memcpy (&i8, &i, sizeof (i8)); + i = i8; + break; + + default: + runtime_error ("Illegal value for record marker"); + break; + } + + if (i >= 0) + { + dtp->u.p.current_unit->bytes_left_subrecord = i; + dtp->u.p.current_unit->continued = 0; + } + else + { + dtp->u.p.current_unit->bytes_left_subrecord = -i; + dtp->u.p.current_unit->continued = 1; + } + + if (! continued) + dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl; +} + + +/* Preposition a sequential unformatted file while writing. This + amount to writing a bogus length that will be filled in later. */ + +static void +us_write (st_parameter_dt *dtp, int continued) +{ + size_t nbytes; + gfc_offset dummy; + + dummy = 0; + + if (compile_options.record_marker == 0) + nbytes = sizeof (GFC_INTEGER_4); + else + nbytes = compile_options.record_marker ; + + if (swrite (dtp->u.p.current_unit->s, &dummy, &nbytes) != 0) + generate_error (&dtp->common, LIBERROR_OS, NULL); + + /* For sequential unformatted, if RECL= was not specified in the OPEN + we write until we have more bytes than can fit in the subrecord + markers, then we write a new subrecord. */ + + dtp->u.p.current_unit->bytes_left_subrecord = + dtp->u.p.current_unit->recl_subrecord; + dtp->u.p.current_unit->continued = continued; +} + + +/* Position to the next record prior to transfer. We are assumed to + be before the next record. We also calculate the bytes in the next + record. */ + +static void +pre_position (st_parameter_dt *dtp) +{ + if (dtp->u.p.current_unit->current_record) + return; /* Already positioned. */ + + switch (current_mode (dtp)) + { + case FORMATTED_STREAM: + case UNFORMATTED_STREAM: + /* There are no records with stream I/O. If the position was specified + data_transfer_init has already positioned the file. If no position + was specified, we continue from where we last left off. I.e. + there is nothing to do here. */ + break; + + case UNFORMATTED_SEQUENTIAL: + if (dtp->u.p.mode == READING) + us_read (dtp, 0); + else + us_write (dtp, 0); + + break; + + case FORMATTED_SEQUENTIAL: + case FORMATTED_DIRECT: + case UNFORMATTED_DIRECT: + dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl; + break; + } + + dtp->u.p.current_unit->current_record = 1; +} + + +/* Initialize things for a data transfer. This code is common for + both reading and writing. */ + +static void +data_transfer_init (st_parameter_dt *dtp, int read_flag) +{ + unit_flags u_flags; /* Used for creating a unit if needed. */ + GFC_INTEGER_4 cf = dtp->common.flags; + namelist_info *ionml; + + ionml = ((cf & IOPARM_DT_IONML_SET) != 0) ? dtp->u.p.ionml : NULL; + + memset (&dtp->u.p, 0, sizeof (dtp->u.p)); + + dtp->u.p.ionml = ionml; + dtp->u.p.mode = read_flag ? READING : WRITING; + + if ((dtp->common.flags & IOPARM_LIBRETURN_MASK) != IOPARM_LIBRETURN_OK) + return; + + if ((cf & IOPARM_DT_HAS_SIZE) != 0) + dtp->u.p.size_used = 0; /* Initialize the count. */ + + dtp->u.p.current_unit = get_unit (dtp, 1); + if (dtp->u.p.current_unit->s == NULL) + { /* Open the unit with some default flags. */ + st_parameter_open opp; + unit_convert conv; + + if (dtp->common.unit < 0) + { + close_unit (dtp->u.p.current_unit); + dtp->u.p.current_unit = NULL; + generate_error (&dtp->common, LIBERROR_BAD_OPTION, + "Bad unit number in OPEN statement"); + return; + } + memset (&u_flags, '\0', sizeof (u_flags)); + u_flags.access = ACCESS_SEQUENTIAL; + u_flags.action = ACTION_READWRITE; + + /* Is it unformatted? */ + if (!(cf & (IOPARM_DT_HAS_FORMAT | IOPARM_DT_LIST_FORMAT + | IOPARM_DT_IONML_SET))) + u_flags.form = FORM_UNFORMATTED; + else + u_flags.form = FORM_UNSPECIFIED; + + u_flags.delim = DELIM_UNSPECIFIED; + u_flags.blank = BLANK_UNSPECIFIED; + u_flags.pad = PAD_UNSPECIFIED; + u_flags.decimal = DECIMAL_UNSPECIFIED; + u_flags.encoding = ENCODING_UNSPECIFIED; + u_flags.async = ASYNC_UNSPECIFIED; + u_flags.round = ROUND_UNSPECIFIED; + u_flags.sign = SIGN_UNSPECIFIED; + + u_flags.status = STATUS_UNKNOWN; + + conv = get_unformatted_convert (dtp->common.unit); + + if (conv == GFC_CONVERT_NONE) + conv = compile_options.convert; + + /* We use big_endian, which is 0 on little-endian machines + and 1 on big-endian machines. */ + switch (conv) + { + case GFC_CONVERT_NATIVE: + case GFC_CONVERT_SWAP: + break; + + case GFC_CONVERT_BIG: + conv = big_endian ? GFC_CONVERT_NATIVE : GFC_CONVERT_SWAP; + break; + + case GFC_CONVERT_LITTLE: + conv = big_endian ? GFC_CONVERT_SWAP : GFC_CONVERT_NATIVE; + break; + + default: + internal_error (&opp.common, "Illegal value for CONVERT"); + break; + } + + u_flags.convert = conv; + + opp.common = dtp->common; + opp.common.flags &= IOPARM_COMMON_MASK; + dtp->u.p.current_unit = new_unit (&opp, dtp->u.p.current_unit, &u_flags); + dtp->common.flags &= ~IOPARM_COMMON_MASK; + dtp->common.flags |= (opp.common.flags & IOPARM_COMMON_MASK); + if (dtp->u.p.current_unit == NULL) + return; + } + + /* Check the action. */ + + if (read_flag && dtp->u.p.current_unit->flags.action == ACTION_WRITE) + { + generate_error (&dtp->common, LIBERROR_BAD_ACTION, + "Cannot read from file opened for WRITE"); + return; + } + + if (!read_flag && dtp->u.p.current_unit->flags.action == ACTION_READ) + { + generate_error (&dtp->common, LIBERROR_BAD_ACTION, + "Cannot write to file opened for READ"); + return; + } + + dtp->u.p.first_item = 1; + + /* Check the format. */ + + if ((cf & IOPARM_DT_HAS_FORMAT) != 0) + parse_format (dtp); + + if (dtp->u.p.current_unit->flags.form == FORM_UNFORMATTED + && (cf & (IOPARM_DT_HAS_FORMAT | IOPARM_DT_LIST_FORMAT)) + != 0) + { + generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT, + "Format present for UNFORMATTED data transfer"); + return; + } + + if ((cf & IOPARM_DT_HAS_NAMELIST_NAME) != 0 && dtp->u.p.ionml != NULL) + { + if ((cf & IOPARM_DT_HAS_FORMAT) != 0) + generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT, + "A format cannot be specified with a namelist"); + } + else if (dtp->u.p.current_unit->flags.form == FORM_FORMATTED && + !(cf & (IOPARM_DT_HAS_FORMAT | IOPARM_DT_LIST_FORMAT))) + { + generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT, + "Missing format for FORMATTED data transfer"); + } + + if (is_internal_unit (dtp) + && dtp->u.p.current_unit->flags.form == FORM_UNFORMATTED) + { + generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT, + "Internal file cannot be accessed by UNFORMATTED " + "data transfer"); + return; + } + + /* Check the record number. */ + + if (dtp->u.p.current_unit->flags.access == ACCESS_DIRECT + && (cf & IOPARM_DT_HAS_REC) == 0) + { + generate_error (&dtp->common, LIBERROR_MISSING_OPTION, + "Direct access data transfer requires record number"); + return; + } + + if (dtp->u.p.current_unit->flags.access == ACCESS_SEQUENTIAL + && (cf & IOPARM_DT_HAS_REC) != 0) + { + generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT, + "Record number not allowed for sequential access " + "data transfer"); + return; + } + + /* Process the ADVANCE option. */ + + dtp->u.p.advance_status + = !(cf & IOPARM_DT_HAS_ADVANCE) ? ADVANCE_UNSPECIFIED : + find_option (&dtp->common, dtp->advance, dtp->advance_len, advance_opt, + "Bad ADVANCE parameter in data transfer statement"); + + if (dtp->u.p.advance_status != ADVANCE_UNSPECIFIED) + { + if (dtp->u.p.current_unit->flags.access == ACCESS_DIRECT) + { + generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT, + "ADVANCE specification conflicts with sequential " + "access"); + return; + } + + if (is_internal_unit (dtp)) + { + generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT, + "ADVANCE specification conflicts with internal file"); + return; + } + + if ((cf & (IOPARM_DT_HAS_FORMAT | IOPARM_DT_LIST_FORMAT)) + != IOPARM_DT_HAS_FORMAT) + { + generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT, + "ADVANCE specification requires an explicit format"); + return; + } + } + + if (read_flag) + { + dtp->u.p.current_unit->previous_nonadvancing_write = 0; + + if ((cf & IOPARM_EOR) != 0 && dtp->u.p.advance_status != ADVANCE_NO) + { + generate_error (&dtp->common, LIBERROR_MISSING_OPTION, + "EOR specification requires an ADVANCE specification " + "of NO"); + return; + } + + if ((cf & IOPARM_DT_HAS_SIZE) != 0 + && dtp->u.p.advance_status != ADVANCE_NO) + { + generate_error (&dtp->common, LIBERROR_MISSING_OPTION, + "SIZE specification requires an ADVANCE " + "specification of NO"); + return; + } + } + else + { /* Write constraints. */ + if ((cf & IOPARM_END) != 0) + { + generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT, + "END specification cannot appear in a write " + "statement"); + return; + } + + if ((cf & IOPARM_EOR) != 0) + { + generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT, + "EOR specification cannot appear in a write " + "statement"); + return; + } + + if ((cf & IOPARM_DT_HAS_SIZE) != 0) + { + generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT, + "SIZE specification cannot appear in a write " + "statement"); + return; + } + } + + if (dtp->u.p.advance_status == ADVANCE_UNSPECIFIED) + dtp->u.p.advance_status = ADVANCE_YES; + + /* Check the decimal mode. */ + dtp->u.p.current_unit->decimal_status + = !(cf & IOPARM_DT_HAS_DECIMAL) ? DECIMAL_UNSPECIFIED : + find_option (&dtp->common, dtp->decimal, dtp->decimal_len, + decimal_opt, "Bad DECIMAL parameter in data transfer " + "statement"); + + if (dtp->u.p.current_unit->decimal_status == DECIMAL_UNSPECIFIED) + dtp->u.p.current_unit->decimal_status = dtp->u.p.current_unit->flags.decimal; + + /* Check the sign mode. */ + dtp->u.p.sign_status + = !(cf & IOPARM_DT_HAS_SIGN) ? SIGN_UNSPECIFIED : + find_option (&dtp->common, dtp->sign, dtp->sign_len, sign_opt, + "Bad SIGN parameter in data transfer statement"); + + if (dtp->u.p.sign_status == SIGN_UNSPECIFIED) + dtp->u.p.sign_status = dtp->u.p.current_unit->flags.sign; + + /* Check the blank mode. */ + dtp->u.p.blank_status + = !(cf & IOPARM_DT_HAS_BLANK) ? BLANK_UNSPECIFIED : + find_option (&dtp->common, dtp->blank, dtp->blank_len, + blank_opt, + "Bad BLANK parameter in data transfer statement"); + + if (dtp->u.p.blank_status == BLANK_UNSPECIFIED) + dtp->u.p.blank_status = dtp->u.p.current_unit->flags.blank; + + /* Check the delim mode. */ + dtp->u.p.current_unit->delim_status + = !(cf & IOPARM_DT_HAS_DELIM) ? DELIM_UNSPECIFIED : + find_option (&dtp->common, dtp->delim, dtp->delim_len, + delim_opt, "Bad DELIM parameter in data transfer statement"); + + if (dtp->u.p.current_unit->delim_status == DELIM_UNSPECIFIED) + dtp->u.p.current_unit->delim_status = dtp->u.p.current_unit->flags.delim; + + /* Check the pad mode. */ + dtp->u.p.current_unit->pad_status + = !(cf & IOPARM_DT_HAS_PAD) ? PAD_UNSPECIFIED : + find_option (&dtp->common, dtp->pad, dtp->pad_len, pad_opt, + "Bad PAD parameter in data transfer statement"); + + if (dtp->u.p.current_unit->pad_status == PAD_UNSPECIFIED) + dtp->u.p.current_unit->pad_status = dtp->u.p.current_unit->flags.pad; + + /* Check the POS= specifier: that it is in range and that it is used with a + unit that has been connected for STREAM access. F2003 9.5.1.10. */ + + if (((cf & IOPARM_DT_HAS_POS) != 0)) + { + if (is_stream_io (dtp)) + { + + if (dtp->pos <= 0) + { + generate_error (&dtp->common, LIBERROR_BAD_OPTION, + "POS=specifier must be positive"); + return; + } + + if (dtp->pos >= dtp->u.p.current_unit->maxrec) + { + generate_error (&dtp->common, LIBERROR_BAD_OPTION, + "POS=specifier too large"); + return; + } + + dtp->rec = dtp->pos; + + if (dtp->u.p.mode == READING) + { + /* Required for compatibility between 4.3 and 4.4 runtime. Check + to see if we might be reading what we wrote before */ + if (dtp->u.p.current_unit->mode == WRITING) + { + fbuf_flush (dtp->u.p.current_unit, 1); + flush(dtp->u.p.current_unit->s); + } + + if (dtp->pos < file_length (dtp->u.p.current_unit->s)) + dtp->u.p.current_unit->endfile = NO_ENDFILE; + } + + if (dtp->pos != dtp->u.p.current_unit->strm_pos) + { + fbuf_flush (dtp->u.p.current_unit, 1); + flush (dtp->u.p.current_unit->s); + if (sseek (dtp->u.p.current_unit->s, dtp->pos - 1) == FAILURE) + { + generate_error (&dtp->common, LIBERROR_OS, NULL); + return; + } + dtp->u.p.current_unit->strm_pos = dtp->pos; + } + } + else + { + generate_error (&dtp->common, LIBERROR_BAD_OPTION, + "POS=specifier not allowed, " + "Try OPEN with ACCESS='stream'"); + return; + } + } + + /* Sanity checks on the record number. */ + if ((cf & IOPARM_DT_HAS_REC) != 0) + { + if (dtp->rec <= 0) + { + generate_error (&dtp->common, LIBERROR_BAD_OPTION, + "Record number must be positive"); + return; + } + + if (dtp->rec >= dtp->u.p.current_unit->maxrec) + { + generate_error (&dtp->common, LIBERROR_BAD_OPTION, + "Record number too large"); + return; + } + + /* Check to see if we might be reading what we wrote before */ + + if (dtp->u.p.mode == READING + && dtp->u.p.current_unit->mode == WRITING + && !is_internal_unit (dtp)) + { + fbuf_flush (dtp->u.p.current_unit, 1); + flush(dtp->u.p.current_unit->s); + } + + /* Check whether the record exists to be read. Only + a partial record needs to exist. */ + + if (dtp->u.p.mode == READING && (dtp->rec - 1) + * dtp->u.p.current_unit->recl >= file_length (dtp->u.p.current_unit->s)) + { + generate_error (&dtp->common, LIBERROR_BAD_OPTION, + "Non-existing record number"); + return; + } + + /* Position the file. */ + if (sseek (dtp->u.p.current_unit->s, (gfc_offset) (dtp->rec - 1) + * dtp->u.p.current_unit->recl) == FAILURE) + { + generate_error (&dtp->common, LIBERROR_OS, NULL); + return; + } + + /* TODO: This is required to maintain compatibility between + 4.3 and 4.4 runtime. Remove when ABI changes from 4.3 */ + + if (is_stream_io (dtp)) + dtp->u.p.current_unit->strm_pos = dtp->rec; + + /* TODO: Un-comment this code when ABI changes from 4.3. + if (dtp->u.p.current_unit->flags.access == ACCESS_STREAM) + { + generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT, + "Record number not allowed for stream access " + "data transfer"); + return; + } */ + + } + + /* Overwriting an existing sequential file ? + it is always safe to truncate the file on the first write */ + if (dtp->u.p.mode == WRITING + && dtp->u.p.current_unit->flags.access == ACCESS_SEQUENTIAL + && dtp->u.p.current_unit->last_record == 0 + && !is_preconnected(dtp->u.p.current_unit->s)) + struncate(dtp->u.p.current_unit->s); + + /* Bugware for badly written mixed C-Fortran I/O. */ + flush_if_preconnected(dtp->u.p.current_unit->s); + + dtp->u.p.current_unit->mode = dtp->u.p.mode; + + /* Set the maximum position reached from the previous I/O operation. This + could be greater than zero from a previous non-advancing write. */ + dtp->u.p.max_pos = dtp->u.p.current_unit->saved_pos; + + pre_position (dtp); + + + /* Set up the subroutine that will handle the transfers. */ + + if (read_flag) + { + if (dtp->u.p.current_unit->flags.form == FORM_UNFORMATTED) + dtp->u.p.transfer = unformatted_read; + else + { + if ((cf & IOPARM_DT_LIST_FORMAT) != 0) + dtp->u.p.transfer = list_formatted_read; + else + dtp->u.p.transfer = formatted_transfer; + } + } + else + { + if (dtp->u.p.current_unit->flags.form == FORM_UNFORMATTED) + dtp->u.p.transfer = unformatted_write; + else + { + if ((cf & IOPARM_DT_LIST_FORMAT) != 0) + dtp->u.p.transfer = list_formatted_write; + else + dtp->u.p.transfer = formatted_transfer; + } + } + + /* Make sure that we don't do a read after a nonadvancing write. */ + + if (read_flag) + { + if (dtp->u.p.current_unit->read_bad && !is_stream_io (dtp)) + { + generate_error (&dtp->common, LIBERROR_BAD_OPTION, + "Cannot READ after a nonadvancing WRITE"); + return; + } + } + else + { + if (dtp->u.p.advance_status == ADVANCE_YES && !dtp->u.p.seen_dollar) + dtp->u.p.current_unit->read_bad = 1; + } + + /* Start the data transfer if we are doing a formatted transfer. */ + if (dtp->u.p.current_unit->flags.form == FORM_FORMATTED + && ((cf & (IOPARM_DT_LIST_FORMAT | IOPARM_DT_HAS_NAMELIST_NAME)) == 0) + && dtp->u.p.ionml == NULL) + formatted_transfer (dtp, 0, NULL, 0, 0, 1); +} + +/* Initialize an array_loop_spec given the array descriptor. The function + returns the index of the last element of the array, and also returns + starting record, where the first I/O goes to (necessary in case of + negative strides). */ + +gfc_offset +init_loop_spec (gfc_array_char *desc, array_loop_spec *ls, + gfc_offset *start_record) +{ + int rank = GFC_DESCRIPTOR_RANK(desc); + int i; + gfc_offset index; + int empty; + + empty = 0; + index = 1; + *start_record = 0; + + for (i=0; idim[i].lbound; + ls[i].start = desc->dim[i].lbound; + ls[i].end = desc->dim[i].ubound; + ls[i].step = desc->dim[i].stride; + empty = empty || (desc->dim[i].ubound < desc->dim[i].lbound); + + if (desc->dim[i].stride > 0) + { + index += (desc->dim[i].ubound - desc->dim[i].lbound) + * desc->dim[i].stride; + } + else + { + index -= (desc->dim[i].ubound - desc->dim[i].lbound) + * desc->dim[i].stride; + *start_record -= (desc->dim[i].ubound - desc->dim[i].lbound) + * desc->dim[i].stride; + } + } + + if (empty) + return 0; + else + return index; +} + +/* Determine the index to the next record in an internal unit array by + by incrementing through the array_loop_spec. */ + +gfc_offset +next_array_record (st_parameter_dt *dtp, array_loop_spec *ls, int *finished) +{ + int i, carry; + gfc_offset index; + + carry = 1; + index = 0; + + for (i = 0; i < dtp->u.p.current_unit->rank; i++) + { + if (carry) + { + ls[i].idx++; + if (ls[i].idx > ls[i].end) + { + ls[i].idx = ls[i].start; + carry = 1; + } + else + carry = 0; + } + index = index + (ls[i].idx - ls[i].start) * ls[i].step; + } + + *finished = carry; + + return index; +} + + + +/* Skip to the end of the current record, taking care of an optional + record marker of size bytes. If the file is not seekable, we + read chunks of size MAX_READ until we get to the right + position. */ + +static void +skip_record (st_parameter_dt *dtp, size_t bytes) +{ + gfc_offset new; + size_t rlength; + static const size_t MAX_READ = 4096; + char p[MAX_READ]; + + dtp->u.p.current_unit->bytes_left_subrecord += bytes; + if (dtp->u.p.current_unit->bytes_left_subrecord == 0) + return; + + if (is_seekable (dtp->u.p.current_unit->s)) + { + new = file_position (dtp->u.p.current_unit->s) + + dtp->u.p.current_unit->bytes_left_subrecord; + + /* Direct access files do not generate END conditions, + only I/O errors. */ + if (sseek (dtp->u.p.current_unit->s, new) == FAILURE) + generate_error (&dtp->common, LIBERROR_OS, NULL); + } + else + { /* Seek by reading data. */ + while (dtp->u.p.current_unit->bytes_left_subrecord > 0) + { + rlength = + (MAX_READ > (size_t) dtp->u.p.current_unit->bytes_left_subrecord) ? + MAX_READ : (size_t) dtp->u.p.current_unit->bytes_left_subrecord; + + if (sread (dtp->u.p.current_unit->s, p, &rlength) != 0) + { + generate_error (&dtp->common, LIBERROR_OS, NULL); + return; + } + + dtp->u.p.current_unit->bytes_left_subrecord -= rlength; + } + } + +} + + +/* Advance to the next record reading unformatted files, taking + care of subrecords. If complete_record is nonzero, we loop + until all subrecords are cleared. */ + +static void +next_record_r_unf (st_parameter_dt *dtp, int complete_record) +{ + size_t bytes; + + bytes = compile_options.record_marker == 0 ? + sizeof (GFC_INTEGER_4) : compile_options.record_marker; + + while(1) + { + + /* Skip over tail */ + + skip_record (dtp, bytes); + + if ( ! (complete_record && dtp->u.p.current_unit->continued)) + return; + + us_read (dtp, 1); + } +} + + +static inline gfc_offset +min_off (gfc_offset a, gfc_offset b) +{ + return (a < b ? a : b); +} + + +/* Space to the next record for read mode. */ + +static void +next_record_r (st_parameter_dt *dtp) +{ + gfc_offset record; + int bytes_left; + size_t length; + char p; + + switch (current_mode (dtp)) + { + /* No records in unformatted STREAM I/O. */ + case UNFORMATTED_STREAM: + return; + + case UNFORMATTED_SEQUENTIAL: + next_record_r_unf (dtp, 1); + dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl; + break; + + case FORMATTED_DIRECT: + case UNFORMATTED_DIRECT: + skip_record (dtp, 0); + break; + + case FORMATTED_STREAM: + case FORMATTED_SEQUENTIAL: + length = 1; + /* sf_read has already terminated input because of an '\n' */ + if (dtp->u.p.sf_seen_eor) + { + dtp->u.p.sf_seen_eor = 0; + break; + } + + if (is_internal_unit (dtp)) + { + if (is_array_io (dtp)) + { + int finished; + + record = next_array_record (dtp, dtp->u.p.current_unit->ls, + &finished); + + /* Now seek to this record. */ + record = record * dtp->u.p.current_unit->recl; + if (sseek (dtp->u.p.current_unit->s, record) == FAILURE) + { + generate_error (&dtp->common, LIBERROR_INTERNAL_UNIT, NULL); + break; + } + dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl; + } + else + { + bytes_left = (int) dtp->u.p.current_unit->bytes_left; + bytes_left = min_off (bytes_left, + file_length (dtp->u.p.current_unit->s) + - file_position (dtp->u.p.current_unit->s)); + if (sseek (dtp->u.p.current_unit->s, + file_position (dtp->u.p.current_unit->s) + + bytes_left) == FAILURE) + { + generate_error (&dtp->common, LIBERROR_INTERNAL_UNIT, NULL); + break; + } + dtp->u.p.current_unit->bytes_left + = dtp->u.p.current_unit->recl; + } + break; + } + else do + { + if (sread (dtp->u.p.current_unit->s, &p, &length) != 0) + { + generate_error (&dtp->common, LIBERROR_OS, NULL); + break; + } + + if (length == 0) + { + dtp->u.p.current_unit->endfile = AT_ENDFILE; + break; + } + + if (is_stream_io (dtp)) + dtp->u.p.current_unit->strm_pos++; + } + while (p != '\n'); + + break; + } + + if (dtp->u.p.current_unit->flags.access == ACCESS_SEQUENTIAL + && !dtp->u.p.namelist_mode + && dtp->u.p.current_unit->endfile == NO_ENDFILE + && (file_length (dtp->u.p.current_unit->s) == + file_position (dtp->u.p.current_unit->s))) + dtp->u.p.current_unit->endfile = AT_ENDFILE; + +} + + +/* Small utility function to write a record marker, taking care of + byte swapping and of choosing the correct size. */ + +inline static int +write_us_marker (st_parameter_dt *dtp, const gfc_offset buf) +{ + size_t len; + GFC_INTEGER_4 buf4; + GFC_INTEGER_8 buf8; + char p[sizeof (GFC_INTEGER_8)]; + + if (compile_options.record_marker == 0) + len = sizeof (GFC_INTEGER_4); + else + len = compile_options.record_marker; + + /* Only GFC_CONVERT_NATIVE and GFC_CONVERT_SWAP are valid here. */ + if (likely (dtp->u.p.current_unit->flags.convert == GFC_CONVERT_NATIVE)) + { + switch (len) + { + case sizeof (GFC_INTEGER_4): + buf4 = buf; + return swrite (dtp->u.p.current_unit->s, &buf4, &len); + break; + + case sizeof (GFC_INTEGER_8): + buf8 = buf; + return swrite (dtp->u.p.current_unit->s, &buf8, &len); + break; + + default: + runtime_error ("Illegal value for record marker"); + break; + } + } + else + { + switch (len) + { + case sizeof (GFC_INTEGER_4): + buf4 = buf; + reverse_memcpy (p, &buf4, sizeof (GFC_INTEGER_4)); + return swrite (dtp->u.p.current_unit->s, p, &len); + break; + + case sizeof (GFC_INTEGER_8): + buf8 = buf; + reverse_memcpy (p, &buf8, sizeof (GFC_INTEGER_8)); + return swrite (dtp->u.p.current_unit->s, p, &len); + break; + + default: + runtime_error ("Illegal value for record marker"); + break; + } + } + +} + +/* Position to the next (sub)record in write mode for + unformatted sequential files. */ + +static void +next_record_w_unf (st_parameter_dt *dtp, int next_subrecord) +{ + gfc_offset c, m, m_write; + size_t record_marker; + + /* Bytes written. */ + m = dtp->u.p.current_unit->recl_subrecord + - dtp->u.p.current_unit->bytes_left_subrecord; + c = file_position (dtp->u.p.current_unit->s); + + /* Write the length tail. If we finish a record containing + subrecords, we write out the negative length. */ + + if (dtp->u.p.current_unit->continued) + m_write = -m; + else + m_write = m; + + if (unlikely (write_us_marker (dtp, m_write) != 0)) + goto io_error; + + if (compile_options.record_marker == 0) + record_marker = sizeof (GFC_INTEGER_4); + else + record_marker = compile_options.record_marker; + + /* Seek to the head and overwrite the bogus length with the real + length. */ + + if (unlikely (sseek (dtp->u.p.current_unit->s, c - m - record_marker) + == FAILURE)) + goto io_error; + + if (next_subrecord) + m_write = -m; + else + m_write = m; + + if (unlikely (write_us_marker (dtp, m_write) != 0)) + goto io_error; + + /* Seek past the end of the current record. */ + + if (unlikely (sseek (dtp->u.p.current_unit->s, c + record_marker) + == FAILURE)) + goto io_error; + + return; + + io_error: + generate_error (&dtp->common, LIBERROR_OS, NULL); + return; + +} + +/* Position to the next record in write mode. */ + +static void +next_record_w (st_parameter_dt *dtp, int done) +{ + gfc_offset m, record, max_pos; + int length; + + /* Flush and reset the format buffer. */ + fbuf_flush (dtp->u.p.current_unit, 1); + + /* Zero counters for X- and T-editing. */ + max_pos = dtp->u.p.max_pos; + dtp->u.p.max_pos = dtp->u.p.skips = dtp->u.p.pending_spaces = 0; + + switch (current_mode (dtp)) + { + /* No records in unformatted STREAM I/O. */ + case UNFORMATTED_STREAM: + return; + + case FORMATTED_DIRECT: + if (dtp->u.p.current_unit->bytes_left == 0) + break; + + if (sset (dtp->u.p.current_unit->s, ' ', + dtp->u.p.current_unit->bytes_left) == FAILURE) + goto io_error; + + break; + + case UNFORMATTED_DIRECT: + if (dtp->u.p.current_unit->bytes_left > 0) + { + length = (int) dtp->u.p.current_unit->bytes_left; + if (sset (dtp->u.p.current_unit->s, 0, length) == FAILURE) + goto io_error; + } + break; + + case UNFORMATTED_SEQUENTIAL: + next_record_w_unf (dtp, 0); + dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl; + break; + + case FORMATTED_STREAM: + case FORMATTED_SEQUENTIAL: + + if (is_internal_unit (dtp)) + { + if (is_array_io (dtp)) + { + int finished; + + length = (int) dtp->u.p.current_unit->bytes_left; + + /* If the farthest position reached is greater than current + position, adjust the position and set length to pad out + whats left. Otherwise just pad whats left. + (for character array unit) */ + m = dtp->u.p.current_unit->recl + - dtp->u.p.current_unit->bytes_left; + if (max_pos > m) + { + length = (int) (max_pos - m); + if (sseek (dtp->u.p.current_unit->s, + file_position (dtp->u.p.current_unit->s) + + length) == FAILURE) + { + generate_error (&dtp->common, LIBERROR_INTERNAL_UNIT, NULL); + return; + } + length = (int) (dtp->u.p.current_unit->recl - max_pos); + } + + if (sset (dtp->u.p.current_unit->s, ' ', length) == FAILURE) + { + generate_error (&dtp->common, LIBERROR_END, NULL); + return; + } + + /* Now that the current record has been padded out, + determine where the next record in the array is. */ + record = next_array_record (dtp, dtp->u.p.current_unit->ls, + &finished); + if (finished) + dtp->u.p.current_unit->endfile = AT_ENDFILE; + + /* Now seek to this record */ + record = record * dtp->u.p.current_unit->recl; + + if (sseek (dtp->u.p.current_unit->s, record) == FAILURE) + { + generate_error (&dtp->common, LIBERROR_INTERNAL_UNIT, NULL); + return; + } + + dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl; + } + else + { + length = 1; + + /* If this is the last call to next_record move to the farthest + position reached and set length to pad out the remainder + of the record. (for character scaler unit) */ + if (done) + { + m = dtp->u.p.current_unit->recl + - dtp->u.p.current_unit->bytes_left; + if (max_pos > m) + { + length = (int) (max_pos - m); + if (sseek (dtp->u.p.current_unit->s, + file_position (dtp->u.p.current_unit->s) + + length) == FAILURE) + { + generate_error (&dtp->common, LIBERROR_INTERNAL_UNIT, NULL); + return; + } + length = (int) (dtp->u.p.current_unit->recl - max_pos); + } + else + length = (int) dtp->u.p.current_unit->bytes_left; + } + + if (sset (dtp->u.p.current_unit->s, ' ', length) == FAILURE) + { + generate_error (&dtp->common, LIBERROR_END, NULL); + return; + } + } + } + else + { + size_t len; + const char crlf[] = "\r\n"; + +#ifdef HAVE_CRLF + len = 2; +#else + len = 1; +#endif + if (swrite (dtp->u.p.current_unit->s, &crlf[2-len], &len) != 0) + goto io_error; + + if (is_stream_io (dtp)) + { + dtp->u.p.current_unit->strm_pos += len; + if (dtp->u.p.current_unit->strm_pos + < file_length (dtp->u.p.current_unit->s)) + struncate (dtp->u.p.current_unit->s); + } + } + + break; + + io_error: + generate_error (&dtp->common, LIBERROR_OS, NULL); + break; + } +} + +/* Position to the next record, which means moving to the end of the + current record. This can happen under several different + conditions. If the done flag is not set, we get ready to process + the next record. */ + +void +next_record (st_parameter_dt *dtp, int done) +{ + gfc_offset fp; /* File position. */ + + dtp->u.p.current_unit->read_bad = 0; + + if (dtp->u.p.mode == READING) + next_record_r (dtp); + else + next_record_w (dtp, done); + + if (!is_stream_io (dtp)) + { + /* Keep position up to date for INQUIRE */ + if (done) + update_position (dtp->u.p.current_unit); + + dtp->u.p.current_unit->current_record = 0; + if (dtp->u.p.current_unit->flags.access == ACCESS_DIRECT) + { + fp = file_position (dtp->u.p.current_unit->s); + /* Calculate next record, rounding up partial records. */ + dtp->u.p.current_unit->last_record = + (fp + dtp->u.p.current_unit->recl - 1) / + dtp->u.p.current_unit->recl; + } + else + dtp->u.p.current_unit->last_record++; + } + + if (!done) + pre_position (dtp); +} + + +/* Finalize the current data transfer. For a nonadvancing transfer, + this means advancing to the next record. For internal units close the + stream associated with the unit. */ + +static void +finalize_transfer (st_parameter_dt *dtp) +{ + jmp_buf eof_jump; + GFC_INTEGER_4 cf = dtp->common.flags; + + if ((dtp->common.flags & IOPARM_DT_HAS_SIZE) != 0) + *dtp->size = dtp->u.p.size_used; + + if (dtp->u.p.eor_condition) + { + generate_error (&dtp->common, LIBERROR_EOR, NULL); + return; + } + + if ((dtp->common.flags & IOPARM_LIBRETURN_MASK) != IOPARM_LIBRETURN_OK) + return; + + if ((dtp->u.p.ionml != NULL) + && (cf & IOPARM_DT_HAS_NAMELIST_NAME) != 0) + { + if ((cf & IOPARM_DT_NAMELIST_READ_MODE) != 0) + namelist_read (dtp); + else + namelist_write (dtp); + } + + dtp->u.p.transfer = NULL; + if (dtp->u.p.current_unit == NULL) + return; + + dtp->u.p.eof_jump = &eof_jump; + if (setjmp (eof_jump)) + { + generate_error (&dtp->common, LIBERROR_END, NULL); + return; + } + + if ((cf & IOPARM_DT_LIST_FORMAT) != 0 && dtp->u.p.mode == READING) + { + finish_list_read (dtp); + sfree (dtp->u.p.current_unit->s); + return; + } + + if (dtp->u.p.mode == WRITING) + dtp->u.p.current_unit->previous_nonadvancing_write + = dtp->u.p.advance_status == ADVANCE_NO; + + if (is_stream_io (dtp)) + { + if (dtp->u.p.current_unit->flags.form == FORM_FORMATTED + && dtp->u.p.advance_status != ADVANCE_NO) + next_record (dtp, 1); + + if (dtp->u.p.current_unit->flags.form == FORM_UNFORMATTED + && file_position (dtp->u.p.current_unit->s) >= dtp->rec) + { + flush (dtp->u.p.current_unit->s); + sfree (dtp->u.p.current_unit->s); + } + return; + } + + dtp->u.p.current_unit->current_record = 0; + + if (!is_internal_unit (dtp) && dtp->u.p.seen_dollar) + { + dtp->u.p.seen_dollar = 0; + fbuf_flush (dtp->u.p.current_unit, 1); + sfree (dtp->u.p.current_unit->s); + return; + } + + /* For non-advancing I/O, save the current maximum position for use in the + next I/O operation if needed. */ + if (dtp->u.p.advance_status == ADVANCE_NO) + { + int bytes_written = (int) (dtp->u.p.current_unit->recl + - dtp->u.p.current_unit->bytes_left); + dtp->u.p.current_unit->saved_pos = + dtp->u.p.max_pos > 0 ? dtp->u.p.max_pos - bytes_written : 0; + fbuf_flush (dtp->u.p.current_unit, 0); + flush (dtp->u.p.current_unit->s); + return; + } + + dtp->u.p.current_unit->saved_pos = 0; + + next_record (dtp, 1); + sfree (dtp->u.p.current_unit->s); +} + +/* Transfer function for IOLENGTH. It doesn't actually do any + data transfer, it just updates the length counter. */ + +static void +iolength_transfer (st_parameter_dt *dtp, bt type __attribute__((unused)), + void *dest __attribute__ ((unused)), + int kind __attribute__((unused)), + size_t size, size_t nelems) +{ + if ((dtp->common.flags & IOPARM_DT_HAS_IOLENGTH) != 0) + *dtp->iolength += (GFC_IO_INT) size * nelems; +} + + +/* Initialize the IOLENGTH data transfer. This function is in essence + a very much simplified version of data_transfer_init(), because it + doesn't have to deal with units at all. */ + +static void +iolength_transfer_init (st_parameter_dt *dtp) +{ + if ((dtp->common.flags & IOPARM_DT_HAS_IOLENGTH) != 0) + *dtp->iolength = 0; + + memset (&dtp->u.p, 0, sizeof (dtp->u.p)); + + /* Set up the subroutine that will handle the transfers. */ + + dtp->u.p.transfer = iolength_transfer; +} + + +/* Library entry point for the IOLENGTH form of the INQUIRE + statement. The IOLENGTH form requires no I/O to be performed, but + it must still be a runtime library call so that we can determine + the iolength for dynamic arrays and such. */ + +extern void st_iolength (st_parameter_dt *); +export_proto(st_iolength); + +void +st_iolength (st_parameter_dt *dtp) +{ + library_start (&dtp->common); + iolength_transfer_init (dtp); +} + +extern void st_iolength_done (st_parameter_dt *); +export_proto(st_iolength_done); + +void +st_iolength_done (st_parameter_dt *dtp __attribute__((unused))) +{ + free_ionml (dtp); + if (dtp->u.p.scratch != NULL) + free_mem (dtp->u.p.scratch); + library_end (); +} + + +/* The READ statement. */ + +extern void st_read (st_parameter_dt *); +export_proto(st_read); + +void +st_read (st_parameter_dt *dtp) +{ + library_start (&dtp->common); + + data_transfer_init (dtp, 1); + + /* Handle complications dealing with the endfile record. */ + + if (dtp->u.p.current_unit->flags.access == ACCESS_SEQUENTIAL) + switch (dtp->u.p.current_unit->endfile) + { + case NO_ENDFILE: + break; + + case AT_ENDFILE: + if (!is_internal_unit (dtp)) + { + generate_error (&dtp->common, LIBERROR_END, NULL); + dtp->u.p.current_unit->endfile = AFTER_ENDFILE; + dtp->u.p.current_unit->current_record = 0; + } + break; + + case AFTER_ENDFILE: + generate_error (&dtp->common, LIBERROR_ENDFILE, NULL); + dtp->u.p.current_unit->current_record = 0; + break; + } +} + +extern void st_read_done (st_parameter_dt *); +export_proto(st_read_done); + +void +st_read_done (st_parameter_dt *dtp) +{ + finalize_transfer (dtp); + free_format_data (dtp); + free_ionml (dtp); + if (dtp->u.p.scratch != NULL) + free_mem (dtp->u.p.scratch); + if (dtp->u.p.current_unit != NULL) + unlock_unit (dtp->u.p.current_unit); + + free_internal_unit (dtp); + + library_end (); +} + +extern void st_write (st_parameter_dt *); +export_proto(st_write); + +void +st_write (st_parameter_dt *dtp) +{ + library_start (&dtp->common); + data_transfer_init (dtp, 0); +} + +extern void st_write_done (st_parameter_dt *); +export_proto(st_write_done); + +void +st_write_done (st_parameter_dt *dtp) +{ + finalize_transfer (dtp); + + /* Deal with endfile conditions associated with sequential files. */ + + if (dtp->u.p.current_unit != NULL + && dtp->u.p.current_unit->flags.access == ACCESS_SEQUENTIAL) + switch (dtp->u.p.current_unit->endfile) + { + case AT_ENDFILE: /* Remain at the endfile record. */ + break; + + case AFTER_ENDFILE: + dtp->u.p.current_unit->endfile = AT_ENDFILE; /* Just at it now. */ + break; + + case NO_ENDFILE: + /* Get rid of whatever is after this record. */ + if (!is_internal_unit (dtp)) + { + flush (dtp->u.p.current_unit->s); + if (struncate (dtp->u.p.current_unit->s) == FAILURE) + generate_error (&dtp->common, LIBERROR_OS, NULL); + } + dtp->u.p.current_unit->endfile = AT_ENDFILE; + break; + } + + free_format_data (dtp); + free_ionml (dtp); + if (dtp->u.p.scratch != NULL) + free_mem (dtp->u.p.scratch); + if (dtp->u.p.current_unit != NULL) + unlock_unit (dtp->u.p.current_unit); + + free_internal_unit (dtp); + + library_end (); +} + + +/* F2003: This is a stub for the runtime portion of the WAIT statement. */ +void +st_wait (st_parameter_wait *wtp __attribute__((unused))) +{ +} + + +/* Receives the scalar information for namelist objects and stores it + in a linked list of namelist_info types. */ + +extern void st_set_nml_var (st_parameter_dt *dtp, void *, char *, + GFC_INTEGER_4, gfc_charlen_type, GFC_INTEGER_4); +export_proto(st_set_nml_var); + + +void +st_set_nml_var (st_parameter_dt *dtp, void * var_addr, char * var_name, + GFC_INTEGER_4 len, gfc_charlen_type string_length, + GFC_INTEGER_4 dtype) +{ + namelist_info *t1 = NULL; + namelist_info *nml; + size_t var_name_len = strlen (var_name); + + nml = (namelist_info*) get_mem (sizeof (namelist_info)); + + nml->mem_pos = var_addr; + + nml->var_name = (char*) get_mem (var_name_len + 1); + memcpy (nml->var_name, var_name, var_name_len); + nml->var_name[var_name_len] = '\0'; + + nml->len = (int) len; + nml->string_length = (index_type) string_length; + + nml->var_rank = (int) (dtype & GFC_DTYPE_RANK_MASK); + nml->size = (index_type) (dtype >> GFC_DTYPE_SIZE_SHIFT); + nml->type = (bt) ((dtype & GFC_DTYPE_TYPE_MASK) >> GFC_DTYPE_TYPE_SHIFT); + + if (nml->var_rank > 0) + { + nml->dim = (descriptor_dimension*) + get_mem (nml->var_rank * sizeof (descriptor_dimension)); + nml->ls = (array_loop_spec*) + get_mem (nml->var_rank * sizeof (array_loop_spec)); + } + else + { + nml->dim = NULL; + nml->ls = NULL; + } + + nml->next = NULL; + + if ((dtp->common.flags & IOPARM_DT_IONML_SET) == 0) + { + dtp->common.flags |= IOPARM_DT_IONML_SET; + dtp->u.p.ionml = nml; + } + else + { + for (t1 = dtp->u.p.ionml; t1->next; t1 = t1->next); + t1->next = nml; + } +} + +/* Store the dimensional information for the namelist object. */ +extern void st_set_nml_var_dim (st_parameter_dt *, GFC_INTEGER_4, + index_type, index_type, + index_type); +export_proto(st_set_nml_var_dim); + +void +st_set_nml_var_dim (st_parameter_dt *dtp, GFC_INTEGER_4 n_dim, + index_type stride, index_type lbound, + index_type ubound) +{ + namelist_info * nml; + int n; + + n = (int)n_dim; + + for (nml = dtp->u.p.ionml; nml->next; nml = nml->next); + + nml->dim[n].stride = stride; + nml->dim[n].lbound = lbound; + nml->dim[n].ubound = ubound; +} + +/* Reverse memcpy - used for byte swapping. */ + +void reverse_memcpy (void *dest, const void *src, size_t n) +{ + char *d, *s; + size_t i; + + d = (char *) dest; + s = (char *) src + n - 1; + + /* Write with ascending order - this is likely faster + on modern architectures because of write combining. */ + for (i=0; i. */ + +#include "io.h" +#include +#include + + +/* IO locking rules: + UNIT_LOCK is a master lock, protecting UNIT_ROOT tree and UNIT_CACHE. + Concurrent use of different units should be supported, so + each unit has its own lock, LOCK. + Open should be atomic with its reopening of units and list_read.c + in several places needs find_unit another unit while holding stdin + unit's lock, so it must be possible to acquire UNIT_LOCK while holding + some unit's lock. Therefore to avoid deadlocks, it is forbidden + to acquire unit's private locks while holding UNIT_LOCK, except + for freshly created units (where no other thread can get at their + address yet) or when using just trylock rather than lock operation. + In addition to unit's private lock each unit has a WAITERS counter + and CLOSED flag. WAITERS counter must be either only + atomically incremented/decremented in all places (if atomic builtins + are supported), or protected by UNIT_LOCK in all places (otherwise). + CLOSED flag must be always protected by unit's LOCK. + After finding a unit in UNIT_CACHE or UNIT_ROOT with UNIT_LOCK held, + WAITERS must be incremented to avoid concurrent close from freeing + the unit between unlocking UNIT_LOCK and acquiring unit's LOCK. + Unit freeing is always done under UNIT_LOCK. If close_unit sees any + WAITERS, it doesn't free the unit but instead sets the CLOSED flag + and the thread that decrements WAITERS to zero while CLOSED flag is + set is responsible for freeing it (while holding UNIT_LOCK). + flush_all_units operation is iterating over the unit tree with + increasing UNIT_NUMBER while holding UNIT_LOCK and attempting to + flush each unit (and therefore needs the unit's LOCK held as well). + To avoid deadlocks, it just trylocks the LOCK and if unsuccessful, + remembers the current unit's UNIT_NUMBER, unlocks UNIT_LOCK, acquires + unit's LOCK and after flushing reacquires UNIT_LOCK and restarts with + the smallest UNIT_NUMBER above the last one flushed. + + If find_unit/find_or_create_unit/find_file/get_unit routines return + non-NULL, the returned unit has its private lock locked and when the + caller is done with it, it must call either unlock_unit or close_unit + on it. unlock_unit or close_unit must be always called only with the + private lock held. */ + +/* Subroutines related to units */ + + +#define CACHE_SIZE 3 +static gfc_unit *unit_cache[CACHE_SIZE]; +gfc_offset max_offset; +gfc_unit *unit_root; +#ifdef __GTHREAD_MUTEX_INIT +__gthread_mutex_t unit_lock = __GTHREAD_MUTEX_INIT; +#else +__gthread_mutex_t unit_lock; +#endif + +/* We use these filenames for error reporting. */ + +static char stdin_name[] = "stdin"; +static char stdout_name[] = "stdout"; +static char stderr_name[] = "stderr"; + +/* This implementation is based on Stefan Nilsson's article in the + * July 1997 Doctor Dobb's Journal, "Treaps in Java". */ + +/* pseudo_random()-- Simple linear congruential pseudorandom number + * generator. The period of this generator is 44071, which is plenty + * for our purposes. */ + +static int +pseudo_random (void) +{ + static int x0 = 5341; + + x0 = (22611 * x0 + 10) % 44071; + return x0; +} + + +/* rotate_left()-- Rotate the treap left */ + +static gfc_unit * +rotate_left (gfc_unit * t) +{ + gfc_unit *temp; + + temp = t->right; + t->right = t->right->left; + temp->left = t; + + return temp; +} + + +/* rotate_right()-- Rotate the treap right */ + +static gfc_unit * +rotate_right (gfc_unit * t) +{ + gfc_unit *temp; + + temp = t->left; + t->left = t->left->right; + temp->right = t; + + return temp; +} + + + +static int +compare (int a, int b) +{ + if (a < b) + return -1; + if (a > b) + return 1; + + return 0; +} + + +/* insert()-- Recursive insertion function. Returns the updated treap. */ + +static gfc_unit * +insert (gfc_unit *new, gfc_unit *t) +{ + int c; + + if (t == NULL) + return new; + + c = compare (new->unit_number, t->unit_number); + + if (c < 0) + { + t->left = insert (new, t->left); + if (t->priority < t->left->priority) + t = rotate_right (t); + } + + if (c > 0) + { + t->right = insert (new, t->right); + if (t->priority < t->right->priority) + t = rotate_left (t); + } + + if (c == 0) + internal_error (NULL, "insert(): Duplicate key found!"); + + return t; +} + + +/* insert_unit()-- Create a new node, insert it into the treap. */ + +static gfc_unit * +insert_unit (int n) +{ + gfc_unit *u = get_mem (sizeof (gfc_unit)); + memset (u, '\0', sizeof (gfc_unit)); + u->unit_number = n; +#ifdef __GTHREAD_MUTEX_INIT + { + __gthread_mutex_t tmp = __GTHREAD_MUTEX_INIT; + u->lock = tmp; + } +#else + __GTHREAD_MUTEX_INIT_FUNCTION (&u->lock); +#endif + __gthread_mutex_lock (&u->lock); + u->priority = pseudo_random (); + unit_root = insert (u, unit_root); + return u; +} + + +/* destroy_unit_mutex()-- Destroy the mutex and free memory of unit. */ + +static void +destroy_unit_mutex (gfc_unit * u) +{ + __gthread_mutex_destroy (&u->lock); + free_mem (u); +} + + +static gfc_unit * +delete_root (gfc_unit * t) +{ + gfc_unit *temp; + + if (t->left == NULL) + return t->right; + if (t->right == NULL) + return t->left; + + if (t->left->priority > t->right->priority) + { + temp = rotate_right (t); + temp->right = delete_root (t); + } + else + { + temp = rotate_left (t); + temp->left = delete_root (t); + } + + return temp; +} + + +/* delete_treap()-- Delete an element from a tree. The 'old' value + * does not necessarily have to point to the element to be deleted, it + * must just point to a treap structure with the key to be deleted. + * Returns the new root node of the tree. */ + +static gfc_unit * +delete_treap (gfc_unit * old, gfc_unit * t) +{ + int c; + + if (t == NULL) + return NULL; + + c = compare (old->unit_number, t->unit_number); + + if (c < 0) + t->left = delete_treap (old, t->left); + if (c > 0) + t->right = delete_treap (old, t->right); + if (c == 0) + t = delete_root (t); + + return t; +} + + +/* delete_unit()-- Delete a unit from a tree */ + +static void +delete_unit (gfc_unit * old) +{ + unit_root = delete_treap (old, unit_root); +} + + +/* get_external_unit()-- Given an integer, return a pointer to the unit + * structure. Returns NULL if the unit does not exist, + * otherwise returns a locked unit. */ + +static gfc_unit * +get_external_unit (int n, int do_create) +{ + gfc_unit *p; + int c, created = 0; + + __gthread_mutex_lock (&unit_lock); +retry: + for (c = 0; c < CACHE_SIZE; c++) + if (unit_cache[c] != NULL && unit_cache[c]->unit_number == n) + { + p = unit_cache[c]; + goto found; + } + + p = unit_root; + while (p != NULL) + { + c = compare (n, p->unit_number); + if (c < 0) + p = p->left; + if (c > 0) + p = p->right; + if (c == 0) + break; + } + + if (p == NULL && do_create) + { + p = insert_unit (n); + created = 1; + } + + if (p != NULL) + { + for (c = 0; c < CACHE_SIZE - 1; c++) + unit_cache[c] = unit_cache[c + 1]; + + unit_cache[CACHE_SIZE - 1] = p; + } + + if (created) + { + /* Newly created units have their lock held already + from insert_unit. Just unlock UNIT_LOCK and return. */ + __gthread_mutex_unlock (&unit_lock); + return p; + } + +found: + if (p != NULL) + { + /* Fast path. */ + if (! __gthread_mutex_trylock (&p->lock)) + { + /* assert (p->closed == 0); */ + __gthread_mutex_unlock (&unit_lock); + return p; + } + + inc_waiting_locked (p); + } + + __gthread_mutex_unlock (&unit_lock); + + if (p != NULL) + { + __gthread_mutex_lock (&p->lock); + if (p->closed) + { + __gthread_mutex_lock (&unit_lock); + __gthread_mutex_unlock (&p->lock); + if (predec_waiting_locked (p) == 0) + destroy_unit_mutex (p); + goto retry; + } + + dec_waiting_unlocked (p); + } + return p; +} + + +gfc_unit * +find_unit (int n) +{ + return get_external_unit (n, 0); +} + + +gfc_unit * +find_or_create_unit (int n) +{ + return get_external_unit (n, 1); +} + + +gfc_unit * +get_internal_unit (st_parameter_dt *dtp) +{ + gfc_unit * iunit; + gfc_offset start_record = 0; + + /* Allocate memory for a unit structure. */ + + iunit = get_mem (sizeof (gfc_unit)); + if (iunit == NULL) + { + generate_error (&dtp->common, LIBERROR_INTERNAL_UNIT, NULL); + return NULL; + } + + memset (iunit, '\0', sizeof (gfc_unit)); +#ifdef __GTHREAD_MUTEX_INIT + { + __gthread_mutex_t tmp = __GTHREAD_MUTEX_INIT; + iunit->lock = tmp; + } +#else + __GTHREAD_MUTEX_INIT_FUNCTION (&iunit->lock); +#endif + __gthread_mutex_lock (&iunit->lock); + + iunit->recl = dtp->internal_unit_len; + + /* For internal units we set the unit number to -1. + Otherwise internal units can be mistaken for a pre-connected unit or + some other file I/O unit. */ + iunit->unit_number = -1; + + /* Set up the looping specification from the array descriptor, if any. */ + + if (is_array_io (dtp)) + { + iunit->rank = GFC_DESCRIPTOR_RANK (dtp->internal_unit_desc); + iunit->ls = (array_loop_spec *) + get_mem (iunit->rank * sizeof (array_loop_spec)); + dtp->internal_unit_len *= + init_loop_spec (dtp->internal_unit_desc, iunit->ls, &start_record); + + start_record *= iunit->recl; + } + + /* Set initial values for unit parameters. */ + + iunit->s = open_internal (dtp->internal_unit - start_record, + dtp->internal_unit_len, -start_record); + iunit->bytes_left = iunit->recl; + iunit->last_record=0; + iunit->maxrec=0; + iunit->current_record=0; + iunit->read_bad = 0; + iunit->endfile = NO_ENDFILE; + + /* Set flags for the internal unit. */ + + iunit->flags.access = ACCESS_SEQUENTIAL; + iunit->flags.action = ACTION_READWRITE; + iunit->flags.blank = BLANK_NULL; + iunit->flags.form = FORM_FORMATTED; + iunit->flags.pad = PAD_YES; + iunit->flags.status = STATUS_UNSPECIFIED; + iunit->flags.sign = SIGN_SUPPRESS; + iunit->flags.decimal = DECIMAL_POINT; + iunit->flags.encoding = ENCODING_DEFAULT; + iunit->flags.async = ASYNC_NO; + + /* Initialize the data transfer parameters. */ + + dtp->u.p.advance_status = ADVANCE_YES; + dtp->u.p.seen_dollar = 0; + dtp->u.p.skips = 0; + dtp->u.p.pending_spaces = 0; + dtp->u.p.max_pos = 0; + dtp->u.p.at_eof = 0; + + /* This flag tells us the unit is assigned to internal I/O. */ + + dtp->u.p.unit_is_internal = 1; + + return iunit; +} + + +/* free_internal_unit()-- Free memory allocated for internal units if any. */ +void +free_internal_unit (st_parameter_dt *dtp) +{ + if (!is_internal_unit (dtp)) + return; + + if (dtp->u.p.current_unit != NULL) + { + if (dtp->u.p.current_unit->ls != NULL) + free_mem (dtp->u.p.current_unit->ls); + + if (dtp->u.p.current_unit->s) + free_mem (dtp->u.p.current_unit->s); + + destroy_unit_mutex (dtp->u.p.current_unit); + } +} + + + +/* get_unit()-- Returns the unit structure associated with the integer + * unit or the internal file. */ + +gfc_unit * +get_unit (st_parameter_dt *dtp, int do_create) +{ + + if ((dtp->common.flags & IOPARM_DT_HAS_INTERNAL_UNIT) != 0) + return get_internal_unit(dtp); + + /* Has to be an external unit */ + + dtp->u.p.unit_is_internal = 0; + dtp->internal_unit_desc = NULL; + + return get_external_unit (dtp->common.unit, do_create); +} + + +/*************************/ +/* Initialize everything */ + +void +init_units (void) +{ + gfc_unit *u; + unsigned int i; + +#ifndef __GTHREAD_MUTEX_INIT + __GTHREAD_MUTEX_INIT_FUNCTION (&unit_lock); +#endif + + if (options.stdin_unit >= 0) + { /* STDIN */ + u = insert_unit (options.stdin_unit); + u->s = input_stream (); + + u->flags.action = ACTION_READ; + + u->flags.access = ACCESS_SEQUENTIAL; + u->flags.form = FORM_FORMATTED; + u->flags.status = STATUS_OLD; + u->flags.blank = BLANK_NULL; + u->flags.pad = PAD_YES; + u->flags.position = POSITION_ASIS; + u->flags.sign = SIGN_SUPPRESS; + u->flags.decimal = DECIMAL_POINT; + u->flags.encoding = ENCODING_DEFAULT; + u->flags.async = ASYNC_NO; + + u->recl = options.default_recl; + u->endfile = NO_ENDFILE; + + u->file_len = strlen (stdin_name); + u->file = get_mem (u->file_len); + memmove (u->file, stdin_name, u->file_len); + + __gthread_mutex_unlock (&u->lock); + } + + if (options.stdout_unit >= 0) + { /* STDOUT */ + u = insert_unit (options.stdout_unit); + u->s = output_stream (); + + u->flags.action = ACTION_WRITE; + + u->flags.access = ACCESS_SEQUENTIAL; + u->flags.form = FORM_FORMATTED; + u->flags.status = STATUS_OLD; + u->flags.blank = BLANK_NULL; + u->flags.position = POSITION_ASIS; + u->flags.sign = SIGN_SUPPRESS; + u->flags.decimal = DECIMAL_POINT; + u->flags.encoding = ENCODING_DEFAULT; + u->flags.async = ASYNC_NO; + + u->recl = options.default_recl; + u->endfile = AT_ENDFILE; + + u->file_len = strlen (stdout_name); + u->file = get_mem (u->file_len); + memmove (u->file, stdout_name, u->file_len); + + fbuf_init (u, 0); + + __gthread_mutex_unlock (&u->lock); + } + + if (options.stderr_unit >= 0) + { /* STDERR */ + u = insert_unit (options.stderr_unit); + u->s = error_stream (); + + u->flags.action = ACTION_WRITE; + + u->flags.access = ACCESS_SEQUENTIAL; + u->flags.form = FORM_FORMATTED; + u->flags.status = STATUS_OLD; + u->flags.blank = BLANK_NULL; + u->flags.position = POSITION_ASIS; + u->flags.sign = SIGN_SUPPRESS; + u->flags.decimal = DECIMAL_POINT; + u->flags.encoding = ENCODING_DEFAULT; + u->flags.async = ASYNC_NO; + + u->recl = options.default_recl; + u->endfile = AT_ENDFILE; + + u->file_len = strlen (stderr_name); + u->file = get_mem (u->file_len); + memmove (u->file, stderr_name, u->file_len); + + fbuf_init (u, 256); /* 256 bytes should be enough, probably not doing + any kind of exotic formatting to stderr. */ + + __gthread_mutex_unlock (&u->lock); + } + + /* Calculate the maximum file offset in a portable manner. + * max will be the largest signed number for the type gfc_offset. + * + * set a 1 in the LSB and keep a running sum, stopping at MSB-1 bit. */ + + max_offset = 0; + for (i = 0; i < sizeof (max_offset) * 8 - 1; i++) + max_offset = max_offset + ((gfc_offset) 1 << i); +} + + +static int +close_unit_1 (gfc_unit *u, int locked) +{ + int i, rc; + + /* If there are previously written bytes from a write with ADVANCE="no" + Reposition the buffer before closing. */ + if (u->previous_nonadvancing_write) + finish_last_advance_record (u); + + rc = (u->s == NULL) ? 0 : sclose (u->s) == FAILURE; + + u->closed = 1; + if (!locked) + __gthread_mutex_lock (&unit_lock); + + for (i = 0; i < CACHE_SIZE; i++) + if (unit_cache[i] == u) + unit_cache[i] = NULL; + + delete_unit (u); + + if (u->file) + free_mem (u->file); + u->file = NULL; + u->file_len = 0; + + fbuf_destroy (u); + + if (!locked) + __gthread_mutex_unlock (&u->lock); + + /* If there are any threads waiting in find_unit for this unit, + avoid freeing the memory, the last such thread will free it + instead. */ + if (u->waiting == 0) + destroy_unit_mutex (u); + + if (!locked) + __gthread_mutex_unlock (&unit_lock); + + return rc; +} + +void +unlock_unit (gfc_unit *u) +{ + __gthread_mutex_unlock (&u->lock); +} + +/* close_unit()-- Close a unit. The stream is closed, and any memory + * associated with the stream is freed. Returns nonzero on I/O error. + * Should be called with the u->lock locked. */ + +int +close_unit (gfc_unit *u) +{ + return close_unit_1 (u, 0); +} + + +/* close_units()-- Delete units on completion. We just keep deleting + * the root of the treap until there is nothing left. + * Not sure what to do with locking here. Some other thread might be + * holding some unit's lock and perhaps hold it indefinitely + * (e.g. waiting for input from some pipe) and close_units shouldn't + * delay the program too much. */ + +void +close_units (void) +{ + __gthread_mutex_lock (&unit_lock); + while (unit_root != NULL) + close_unit_1 (unit_root, 1); + __gthread_mutex_unlock (&unit_lock); +} + + +/* update_position()-- Update the flags position for later use by inquire. */ + +void +update_position (gfc_unit *u) +{ + if (file_position (u->s) == 0) + u->flags.position = POSITION_REWIND; + else if (file_length (u->s) == file_position (u->s)) + u->flags.position = POSITION_APPEND; + else + u->flags.position = POSITION_ASIS; +} + + +/* filename_from_unit()-- If the unit_number exists, return a pointer to the + name of the associated file, otherwise return the empty string. The caller + must free memory allocated for the filename string. */ + +char * +filename_from_unit (int n) +{ + char *filename; + gfc_unit *u; + int c; + + /* Find the unit. */ + u = unit_root; + while (u != NULL) + { + c = compare (n, u->unit_number); + if (c < 0) + u = u->left; + if (c > 0) + u = u->right; + if (c == 0) + break; + } + + /* Get the filename. */ + if (u != NULL) + { + filename = (char *) get_mem (u->file_len + 1); + unpack_filename (filename, u->file, u->file_len); + return filename; + } + else + return (char *) NULL; +} + +void +finish_last_advance_record (gfc_unit *u) +{ + + if (u->saved_pos > 0) + fbuf_seek (u, u->saved_pos); + + fbuf_flush (u, 1); + + if (!(u->unit_number == options.stdout_unit + || u->unit_number == options.stderr_unit)) + { + size_t len; + + const char crlf[] = "\r\n"; +#ifdef HAVE_CRLF + len = 2; +#else + len = 1; +#endif + if (swrite (u->s, &crlf[2-len], &len) != 0) + os_error ("Completing record after ADVANCE_NO failed"); + } +} + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/unix.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/unix.c new file mode 100644 index 0000000000..b3222f22c1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/unix.c @@ -0,0 +1,2049 @@ +/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught + F2003 I/O support contributed by Jerry DeLisle + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +/* Unix stream I/O module */ + +#include "io.h" +#include +#include + +#include +#include +#include +#include + +#include +#include + + +/* For mingw, we don't identify files by their inode number, but by a + 64-bit identifier created from a BY_HANDLE_FILE_INFORMATION. */ +#if defined(__MINGW32__) && !HAVE_WORKING_STAT + +#define WIN32_LEAN_AND_MEAN +#include + +static uint64_t +id_from_handle (HANDLE hFile) +{ + BY_HANDLE_FILE_INFORMATION FileInformation; + + if (hFile == INVALID_HANDLE_VALUE) + return 0; + + memset (&FileInformation, 0, sizeof(FileInformation)); + if (!GetFileInformationByHandle (hFile, &FileInformation)) + return 0; + + return ((uint64_t) FileInformation.nFileIndexLow) + | (((uint64_t) FileInformation.nFileIndexHigh) << 32); +} + + +static uint64_t +id_from_path (const char *path) +{ + HANDLE hFile; + uint64_t res; + + if (!path || !*path || access (path, F_OK)) + return (uint64_t) -1; + + hFile = CreateFile (path, 0, 0, NULL, OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS | FILE_ATTRIBUTE_READONLY, + NULL); + res = id_from_handle (hFile); + CloseHandle (hFile); + return res; +} + + +static uint64_t +id_from_fd (const int fd) +{ + return id_from_handle ((HANDLE) _get_osfhandle (fd)); +} + +#endif + +#ifndef SSIZE_MAX +#define SSIZE_MAX SHRT_MAX +#endif + +#ifndef PATH_MAX +#define PATH_MAX 1024 +#endif + +#ifndef PROT_READ +#define PROT_READ 1 +#endif + +#ifndef PROT_WRITE +#define PROT_WRITE 2 +#endif + +/* These flags aren't defined on all targets (mingw32), so provide them + here. */ +#ifndef S_IRGRP +#define S_IRGRP 0 +#endif + +#ifndef S_IWGRP +#define S_IWGRP 0 +#endif + +#ifndef S_IROTH +#define S_IROTH 0 +#endif + +#ifndef S_IWOTH +#define S_IWOTH 0 +#endif + + +/* Unix stream I/O module */ + +#define BUFFER_SIZE 8192 + +typedef struct +{ + stream st; + + int fd; + gfc_offset buffer_offset; /* File offset of the start of the buffer */ + gfc_offset physical_offset; /* Current physical file offset */ + gfc_offset logical_offset; /* Current logical file offset */ + gfc_offset dirty_offset; /* Start of modified bytes in buffer */ + gfc_offset file_length; /* Length of the file, -1 if not seekable. */ + + int len; /* Physical length of the current buffer */ + int active; /* Length of valid bytes in the buffer */ + + int prot; + int ndirty; /* Dirty bytes starting at dirty_offset */ + + int special_file; /* =1 if the fd refers to a special file */ + + io_mode method; /* Method of stream I/O being used */ + + char *buffer; + char small_buffer[BUFFER_SIZE]; +} +unix_stream; + + +/* Stream structure for internal files. Fields must be kept in sync + with unix_stream above, except for the buffer. For internal files + we point the buffer pointer directly at the destination memory. */ + +typedef struct +{ + stream st; + + int fd; + gfc_offset buffer_offset; /* File offset of the start of the buffer */ + gfc_offset physical_offset; /* Current physical file offset */ + gfc_offset logical_offset; /* Current logical file offset */ + gfc_offset dirty_offset; /* Start of modified bytes in buffer */ + gfc_offset file_length; /* Length of the file, -1 if not seekable. */ + + int len; /* Physical length of the current buffer */ + int active; /* Length of valid bytes in the buffer */ + + int prot; + int ndirty; /* Dirty bytes starting at dirty_offset */ + + int special_file; /* =1 if the fd refers to a special file */ + + io_mode method; /* Method of stream I/O being used */ + + char *buffer; +} +int_stream; + +/* This implementation of stream I/O is based on the paper: + * + * "Exploiting the advantages of mapped files for stream I/O", + * O. Krieger, M. Stumm and R. Umrau, "Proceedings of the 1992 Winter + * USENIX conference", p. 27-42. + * + * It differs in a number of ways from the version described in the + * paper. First of all, threads are not an issue during I/O and we + * also don't have to worry about having multiple regions, since + * fortran's I/O model only allows you to be one place at a time. + * + * On the other hand, we have to be able to writing at the end of a + * stream, read from the start of a stream or read and write blocks of + * bytes from an arbitrary position. After opening a file, a pointer + * to a stream structure is returned, which is used to handle file + * accesses until the file is closed. + * + * salloc_at_r(stream, len, where)-- Given a stream pointer, return a + * pointer to a block of memory that mirror the file at position + * 'where' that is 'len' bytes long. The len integer is updated to + * reflect how many bytes were actually read. The only reason for a + * short read is end of file. The file pointer is updated. The + * pointer is valid until the next call to salloc_*. + * + * salloc_at_w(stream, len, where)-- Given the stream pointer, returns + * a pointer to a block of memory that is updated to reflect the state + * of the file. The length of the buffer is always equal to that + * requested. The buffer must be completely set by the caller. When + * data has been written, the sfree() function must be called to + * indicate that the caller is done writing data to the buffer. This + * may or may not cause a physical write. + * + * Short forms of these are salloc_r() and salloc_w() which drop the + * 'where' parameter and use the current file pointer. */ + + +/*move_pos_offset()-- Move the record pointer right or left + *relative to current position */ + +int +move_pos_offset (stream* st, int pos_off) +{ + unix_stream * str = (unix_stream*)st; + if (pos_off < 0) + { + str->logical_offset += pos_off; + + if (str->dirty_offset + str->ndirty > str->logical_offset) + { + if (str->ndirty + pos_off > 0) + str->ndirty += pos_off; + else + { + str->dirty_offset += pos_off + pos_off; + str->ndirty = 0; + } + } + + return pos_off; + } + return 0; +} + + +/* fix_fd()-- Given a file descriptor, make sure it is not one of the + * standard descriptors, returning a non-standard descriptor. If the + * user specifies that system errors should go to standard output, + * then closes standard output, we don't want the system errors to a + * file that has been given file descriptor 1 or 0. We want to send + * the error to the invalid descriptor. */ + +static int +fix_fd (int fd) +{ +#ifdef HAVE_DUP + int input, output, error; + + input = output = error = 0; + + /* Unix allocates the lowest descriptors first, so a loop is not + required, but this order is. */ + if (fd == STDIN_FILENO) + { + fd = dup (fd); + input = 1; + } + if (fd == STDOUT_FILENO) + { + fd = dup (fd); + output = 1; + } + if (fd == STDERR_FILENO) + { + fd = dup (fd); + error = 1; + } + + if (input) + close (STDIN_FILENO); + if (output) + close (STDOUT_FILENO); + if (error) + close (STDERR_FILENO); +#endif + + return fd; +} + +int +is_preconnected (stream * s) +{ + int fd; + + fd = ((unix_stream *) s)->fd; + if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO) + return 1; + else + return 0; +} + +/* If the stream corresponds to a preconnected unit, we flush the + corresponding C stream. This is bugware for mixed C-Fortran codes + where the C code doesn't flush I/O before returning. */ +void +flush_if_preconnected (stream * s) +{ + int fd; + + fd = ((unix_stream *) s)->fd; + if (fd == STDIN_FILENO) + fflush (stdin); + else if (fd == STDOUT_FILENO) + fflush (stdout); + else if (fd == STDERR_FILENO) + fflush (stderr); +} + + +/* Reset a stream after reading/writing. Assumes that the buffers have + been flushed. */ + +inline static void +reset_stream (unix_stream * s, size_t bytes_rw) +{ + s->physical_offset += bytes_rw; + s->logical_offset = s->physical_offset; + if (s->file_length != -1 && s->physical_offset > s->file_length) + s->file_length = s->physical_offset; +} + + +/* Read bytes into a buffer, allowing for short reads. If the nbytes + * argument is less on return than on entry, it is because we've hit + * the end of file. */ + +static int +do_read (unix_stream * s, void * buf, size_t * nbytes) +{ + ssize_t trans; + size_t bytes_left; + char *buf_st; + int status; + + status = 0; + bytes_left = *nbytes; + buf_st = (char *) buf; + + /* We must read in a loop since some systems don't restart system + calls in case of a signal. */ + while (bytes_left > 0) + { + /* Requests between SSIZE_MAX and SIZE_MAX are undefined by SUSv3, + so we must read in chunks smaller than SSIZE_MAX. */ + trans = (bytes_left < SSIZE_MAX) ? bytes_left : SSIZE_MAX; + trans = read (s->fd, buf_st, trans); + if (trans < 0) + { + if (errno == EINTR) + continue; + else + { + status = errno; + break; + } + } + else if (trans == 0) /* We hit EOF. */ + break; + buf_st += trans; + bytes_left -= trans; + } + + *nbytes -= bytes_left; + return status; +} + + +/* Write a buffer to a stream, allowing for short writes. */ + +static int +do_write (unix_stream * s, const void * buf, size_t * nbytes) +{ + ssize_t trans; + size_t bytes_left; + char *buf_st; + int status; + + status = 0; + bytes_left = *nbytes; + buf_st = (char *) buf; + + /* We must write in a loop since some systems don't restart system + calls in case of a signal. */ + while (bytes_left > 0) + { + /* Requests between SSIZE_MAX and SIZE_MAX are undefined by SUSv3, + so we must write in chunks smaller than SSIZE_MAX. */ + trans = (bytes_left < SSIZE_MAX) ? bytes_left : SSIZE_MAX; + trans = write (s->fd, buf_st, trans); + if (trans < 0) + { + if (errno == EINTR) + continue; + else + { + status = errno; + break; + } + } + buf_st += trans; + bytes_left -= trans; + } + + *nbytes -= bytes_left; + return status; +} + + +/* get_oserror()-- Get the most recent operating system error. For + * unix, this is errno. */ + +const char * +get_oserror (void) +{ + return strerror (errno); +} + + +/********************************************************************* + File descriptor stream functions +*********************************************************************/ + + +/* fd_flush()-- Write bytes that need to be written */ + +static try +fd_flush (unix_stream * s) +{ + size_t writelen; + + if (s->ndirty == 0) + return SUCCESS; + + if (s->file_length != -1 && s->physical_offset != s->dirty_offset && + lseek (s->fd, s->dirty_offset, SEEK_SET) < 0) + return FAILURE; + + writelen = s->ndirty; + if (do_write (s, s->buffer + (s->dirty_offset - s->buffer_offset), + &writelen) != 0) + return FAILURE; + + s->physical_offset = s->dirty_offset + writelen; + + /* don't increment file_length if the file is non-seekable */ + if (s->file_length != -1 && s->physical_offset > s->file_length) + s->file_length = s->physical_offset; + + s->ndirty -= writelen; + if (s->ndirty != 0) + return FAILURE; + + return SUCCESS; +} + + +/* fd_alloc()-- Arrange a buffer such that the salloc() request can be + * satisfied. This subroutine gets the buffer ready for whatever is + * to come next. */ + +static void +fd_alloc (unix_stream * s, gfc_offset where, + int *len __attribute__ ((unused))) +{ + char *new_buffer; + int n, read_len; + + if (*len <= BUFFER_SIZE) + { + new_buffer = s->small_buffer; + read_len = BUFFER_SIZE; + } + else + { + new_buffer = get_mem (*len); + read_len = *len; + } + + /* Salvage bytes currently within the buffer. This is important for + * devices that cannot seek. */ + + if (s->buffer != NULL && s->buffer_offset <= where && + where <= s->buffer_offset + s->active) + { + + n = s->active - (where - s->buffer_offset); + memmove (new_buffer, s->buffer + (where - s->buffer_offset), n); + + s->active = n; + } + else + { /* new buffer starts off empty */ + s->active = 0; + } + + s->buffer_offset = where; + + /* free the old buffer if necessary */ + + if (s->buffer != NULL && s->buffer != s->small_buffer) + free_mem (s->buffer); + + s->buffer = new_buffer; + s->len = read_len; +} + + +/* fd_alloc_r_at()-- Allocate a stream buffer for reading. Either + * we've already buffered the data or we need to load it. Returns + * NULL on I/O error. */ + +static char * +fd_alloc_r_at (unix_stream * s, int *len) +{ + gfc_offset m; + gfc_offset where = s->logical_offset; + + if (s->buffer != NULL && s->buffer_offset <= where && + where + *len <= s->buffer_offset + s->active) + { + + /* Return a position within the current buffer */ + + s->logical_offset = where + *len; + return s->buffer + where - s->buffer_offset; + } + + fd_alloc (s, where, len); + + m = where + s->active; + + if (s->physical_offset != m && lseek (s->fd, m, SEEK_SET) < 0) + return NULL; + + /* do_read() hangs on read from terminals for *BSD-systems. Only + use read() in that case. */ + + if (s->special_file) + { + ssize_t n; + + n = read (s->fd, s->buffer + s->active, s->len - s->active); + if (n < 0) + return NULL; + + s->physical_offset = m + n; + s->active += n; + } + else + { + size_t n; + + n = s->len - s->active; + if (do_read (s, s->buffer + s->active, &n) != 0) + return NULL; + + s->physical_offset = m + n; + s->active += n; + } + + if (s->active < *len) + *len = s->active; /* Bytes actually available */ + + s->logical_offset = where + *len; + + return s->buffer; +} + + +/* fd_alloc_w_at()-- Allocate a stream buffer for writing. Either + * we've already buffered the data or we need to load it. */ + +static char * +fd_alloc_w_at (unix_stream * s, int *len) +{ + gfc_offset n; + gfc_offset where = s->logical_offset; + + if (s->buffer == NULL || s->buffer_offset > where || + where + *len > s->buffer_offset + s->len) + { + + if (fd_flush (s) == FAILURE) + return NULL; + fd_alloc (s, where, len); + } + + /* Return a position within the current buffer */ + if (s->ndirty == 0 + || where > s->dirty_offset + s->ndirty + || s->dirty_offset > where + *len) + { /* Discontiguous blocks, start with a clean buffer. */ + /* Flush the buffer. */ + if (s->ndirty != 0) + fd_flush (s); + s->dirty_offset = where; + s->ndirty = *len; + } + else + { + gfc_offset start; /* Merge with the existing data. */ + if (where < s->dirty_offset) + start = where; + else + start = s->dirty_offset; + if (where + *len > s->dirty_offset + s->ndirty) + s->ndirty = where + *len - start; + else + s->ndirty = s->dirty_offset + s->ndirty - start; + s->dirty_offset = start; + } + + s->logical_offset = where + *len; + + /* Don't increment file_length if the file is non-seekable. */ + + if (s->file_length != -1 && s->logical_offset > s->file_length) + s->file_length = s->logical_offset; + + n = s->logical_offset - s->buffer_offset; + if (n > s->active) + s->active = n; + + return s->buffer + where - s->buffer_offset; +} + + +static try +fd_sfree (unix_stream * s) +{ + if (s->ndirty != 0 && + (s->buffer != s->small_buffer || options.all_unbuffered || + s->method == SYNC_UNBUFFERED)) + return fd_flush (s); + + return SUCCESS; +} + + +static try +fd_seek (unix_stream * s, gfc_offset offset) +{ + + if (s->file_length == -1) + return SUCCESS; + + if (s->physical_offset == offset) /* Are we lucky and avoid syscall? */ + { + s->logical_offset = offset; + return SUCCESS; + } + + if (lseek (s->fd, offset, SEEK_SET) >= 0) + { + s->physical_offset = s->logical_offset = offset; + s->active = 0; + return SUCCESS; + } + + return FAILURE; +} + + +/* truncate_file()-- Given a unit, truncate the file at the current + * position. Sets the physical location to the new end of the file. + * Returns nonzero on error. */ + +static try +fd_truncate (unix_stream * s) +{ + /* Non-seekable files, like terminals and fifo's fail the lseek so just + return success, there is nothing to truncate. If its not a pipe there + is a real problem. */ + if (lseek (s->fd, s->logical_offset, SEEK_SET) == -1) + { + if (errno == ESPIPE) + return SUCCESS; + else + return FAILURE; + } + + /* Using ftruncate on a seekable special file (like /dev/null) + is undefined, so we treat it as if the ftruncate succeeded. */ + if (!s->special_file + && ( +#ifdef HAVE_FTRUNCATE + ftruncate (s->fd, s->logical_offset) != 0 +#elif defined HAVE_CHSIZE + chsize (s->fd, s->logical_offset) != 0 +#else + /* If we have neither, always fail and exit, noisily. */ + runtime_error ("required ftruncate or chsize support not present"), 1 +#endif + )) + { + /* The truncation failed and we need to handle this gracefully. + The file length remains the same, but the file-descriptor + offset needs adjustment per the successful lseek above. + (Similarly, the contents of the buffer isn't valid anymore.) + A ftruncate call does not affect the physical (file-descriptor) + offset, according to the ftruncate manual, so neither should a + failed call. */ + s->physical_offset = s->logical_offset; + s->active = 0; + return FAILURE; + } + + s->physical_offset = s->file_length = s->logical_offset; + s->active = 0; + return SUCCESS; +} + + +/* Similar to memset(), but operating on a stream instead of a string. + Takes care of not using too much memory. */ + +static try +fd_sset (unix_stream * s, int c, size_t n) +{ + size_t bytes_left; + int trans; + void *p; + + bytes_left = n; + + while (bytes_left > 0) + { + /* memset() in chunks of BUFFER_SIZE. */ + trans = (bytes_left < BUFFER_SIZE) ? bytes_left : BUFFER_SIZE; + + p = fd_alloc_w_at (s, &trans); + if (p) + memset (p, c, trans); + else + return FAILURE; + + bytes_left -= trans; + } + + return SUCCESS; +} + + +/* Stream read function. Avoids using a buffer for big reads. The + interface is like POSIX read(), but the nbytes argument is a + pointer; on return it contains the number of bytes written. The + function return value is the status indicator (0 for success). */ + +static int +fd_read (unix_stream * s, void * buf, size_t * nbytes) +{ + void *p; + int tmp, status; + + if (*nbytes < BUFFER_SIZE && s->method == SYNC_BUFFERED) + { + tmp = *nbytes; + p = fd_alloc_r_at (s, &tmp); + if (p) + { + *nbytes = tmp; + memcpy (buf, p, *nbytes); + return 0; + } + else + { + *nbytes = 0; + return errno; + } + } + + /* If the request is bigger than BUFFER_SIZE we flush the buffers + and read directly. */ + if (fd_flush (s) == FAILURE) + { + *nbytes = 0; + return errno; + } + + if (is_seekable ((stream *) s) && fd_seek (s, s->logical_offset) == FAILURE) + { + *nbytes = 0; + return errno; + } + + status = do_read (s, buf, nbytes); + reset_stream (s, *nbytes); + return status; +} + + +/* Stream write function. Avoids using a buffer for big writes. The + interface is like POSIX write(), but the nbytes argument is a + pointer; on return it contains the number of bytes written. The + function return value is the status indicator (0 for success). */ + +static int +fd_write (unix_stream * s, const void * buf, size_t * nbytes) +{ + void *p; + int tmp, status; + + if (*nbytes < BUFFER_SIZE && s->method == SYNC_BUFFERED) + { + tmp = *nbytes; + p = fd_alloc_w_at (s, &tmp); + if (p) + { + *nbytes = tmp; + memcpy (p, buf, *nbytes); + return 0; + } + else + { + *nbytes = 0; + return errno; + } + } + + /* If the request is bigger than BUFFER_SIZE we flush the buffers + and write directly. */ + if (fd_flush (s) == FAILURE) + { + *nbytes = 0; + return errno; + } + + if (is_seekable ((stream *) s) && fd_seek (s, s->logical_offset) == FAILURE) + { + *nbytes = 0; + return errno; + } + + status = do_write (s, buf, nbytes); + reset_stream (s, *nbytes); + return status; +} + + +static try +fd_close (unix_stream * s) +{ + if (fd_flush (s) == FAILURE) + return FAILURE; + + if (s->buffer != NULL && s->buffer != s->small_buffer) + free_mem (s->buffer); + + if (s->fd != STDOUT_FILENO && s->fd != STDERR_FILENO && s->fd != STDIN_FILENO) + { + if (close (s->fd) < 0) + return FAILURE; + } + + free_mem (s); + + return SUCCESS; +} + + +static void +fd_open (unix_stream * s) +{ + if (isatty (s->fd)) + s->method = SYNC_UNBUFFERED; + else + s->method = SYNC_BUFFERED; + + s->st.alloc_w_at = (void *) fd_alloc_w_at; + s->st.sfree = (void *) fd_sfree; + s->st.close = (void *) fd_close; + s->st.seek = (void *) fd_seek; + s->st.trunc = (void *) fd_truncate; + s->st.read = (void *) fd_read; + s->st.write = (void *) fd_write; + s->st.set = (void *) fd_sset; + + s->buffer = NULL; +} + + + + +/********************************************************************* + memory stream functions - These are used for internal files + + The idea here is that a single stream structure is created and all + requests must be satisfied from it. The location and size of the + buffer is the character variable supplied to the READ or WRITE + statement. + +*********************************************************************/ + + +static char * +mem_alloc_r_at (int_stream * s, int *len) +{ + gfc_offset n; + gfc_offset where = s->logical_offset; + + if (where < s->buffer_offset || where > s->buffer_offset + s->active) + return NULL; + + s->logical_offset = where + *len; + + n = s->buffer_offset + s->active - where; + if (*len > n) + *len = n; + + return s->buffer + (where - s->buffer_offset); +} + + +static char * +mem_alloc_w_at (int_stream * s, int *len) +{ + gfc_offset m; + gfc_offset where = s->logical_offset; + + assert (*len >= 0); /* Negative values not allowed. */ + + m = where + *len; + + if (where < s->buffer_offset) + return NULL; + + if (m > s->file_length) + return NULL; + + s->logical_offset = m; + + return s->buffer + (where - s->buffer_offset); +} + + +/* Stream read function for internal units. */ + +static int +mem_read (int_stream * s, void * buf, size_t * nbytes) +{ + void *p; + int tmp; + + tmp = *nbytes; + p = mem_alloc_r_at (s, &tmp); + if (p) + { + *nbytes = tmp; + memcpy (buf, p, *nbytes); + return 0; + } + else + { + *nbytes = 0; + return 0; + } +} + + +/* Stream write function for internal units. This is not actually used + at the moment, as all internal IO is formatted and the formatted IO + routines use mem_alloc_w_at. */ + +static int +mem_write (int_stream * s, const void * buf, size_t * nbytes) +{ + void *p; + int tmp; + + tmp = *nbytes; + p = mem_alloc_w_at (s, &tmp); + if (p) + { + *nbytes = tmp; + memcpy (p, buf, *nbytes); + return 0; + } + else + { + *nbytes = 0; + return 0; + } +} + + +static int +mem_seek (int_stream * s, gfc_offset offset) +{ + if (offset > s->file_length) + { + errno = ESPIPE; + return FAILURE; + } + + s->logical_offset = offset; + return SUCCESS; +} + + +static try +mem_set (int_stream * s, int c, size_t n) +{ + void *p; + int len; + + len = n; + + p = mem_alloc_w_at (s, &len); + if (p) + { + memset (p, c, len); + return SUCCESS; + } + else + return FAILURE; +} + + +static int +mem_truncate (int_stream * s __attribute__ ((unused))) +{ + return SUCCESS; +} + + +static try +mem_close (int_stream * s) +{ + if (s != NULL) + free_mem (s); + + return SUCCESS; +} + + +static try +mem_sfree (int_stream * s __attribute__ ((unused))) +{ + return SUCCESS; +} + + + +/********************************************************************* + Public functions -- A reimplementation of this module needs to + define functional equivalents of the following. +*********************************************************************/ + +/* empty_internal_buffer()-- Zero the buffer of Internal file */ + +void +empty_internal_buffer(stream *strm) +{ + int_stream * s = (int_stream *) strm; + memset(s->buffer, ' ', s->file_length); +} + +/* open_internal()-- Returns a stream structure from an internal file */ + +stream * +open_internal (char *base, int length, gfc_offset offset) +{ + int_stream *s; + + s = get_mem (sizeof (int_stream)); + memset (s, '\0', sizeof (int_stream)); + + s->buffer = base; + s->buffer_offset = offset; + + s->logical_offset = 0; + s->active = s->file_length = length; + + s->st.alloc_w_at = (void *) mem_alloc_w_at; + s->st.sfree = (void *) mem_sfree; + s->st.close = (void *) mem_close; + s->st.seek = (void *) mem_seek; + s->st.trunc = (void *) mem_truncate; + s->st.read = (void *) mem_read; + s->st.write = (void *) mem_write; + s->st.set = (void *) mem_set; + + return (stream *) s; +} + + +/* fd_to_stream()-- Given an open file descriptor, build a stream + * around it. */ + +static stream * +fd_to_stream (int fd, int prot) +{ + struct stat statbuf; + unix_stream *s; + + s = get_mem (sizeof (unix_stream)); + memset (s, '\0', sizeof (unix_stream)); + + s->fd = fd; + s->buffer_offset = 0; + s->physical_offset = 0; + s->logical_offset = 0; + s->prot = prot; + + /* Get the current length of the file. */ + + fstat (fd, &statbuf); + + if (lseek (fd, 0, SEEK_CUR) == (off_t) -1) + s->file_length = -1; + else + s->file_length = S_ISREG (statbuf.st_mode) ? statbuf.st_size : -1; + + s->special_file = !S_ISREG (statbuf.st_mode); + + fd_open (s); + + return (stream *) s; +} + + +/* Given the Fortran unit number, convert it to a C file descriptor. */ + +int +unit_to_fd (int unit) +{ + gfc_unit *us; + int fd; + + us = find_unit (unit); + if (us == NULL) + return -1; + + fd = ((unix_stream *) us->s)->fd; + unlock_unit (us); + return fd; +} + + +/* unpack_filename()-- Given a fortran string and a pointer to a + * buffer that is PATH_MAX characters, convert the fortran string to a + * C string in the buffer. Returns nonzero if this is not possible. */ + +int +unpack_filename (char *cstring, const char *fstring, int len) +{ + len = fstrlen (fstring, len); + if (len >= PATH_MAX) + return 1; + + memmove (cstring, fstring, len); + cstring[len] = '\0'; + + return 0; +} + + +/* tempfile()-- Generate a temporary filename for a scratch file and + * open it. mkstemp() opens the file for reading and writing, but the + * library mode prevents anything that is not allowed. The descriptor + * is returned, which is -1 on error. The template is pointed to by + * opp->file, which is copied into the unit structure + * and freed later. */ + +static int +tempfile (st_parameter_open *opp) +{ + const char *tempdir; + char *template; + int fd; + + tempdir = getenv ("GFORTRAN_TMPDIR"); + if (tempdir == NULL) + tempdir = getenv ("TMP"); + if (tempdir == NULL) + tempdir = getenv ("TEMP"); + if (tempdir == NULL) + tempdir = DEFAULT_TEMPDIR; + + template = get_mem (strlen (tempdir) + 20); + + sprintf (template, "%s/gfortrantmpXXXXXX", tempdir); + +#ifdef HAVE_MKSTEMP + + fd = mkstemp (template); + +#else /* HAVE_MKSTEMP */ + + if (mktemp (template)) + do +#if defined(HAVE_CRLF) && defined(O_BINARY) + fd = open (template, O_RDWR | O_CREAT | O_EXCL | O_BINARY, + S_IREAD | S_IWRITE); +#else + fd = open (template, O_RDWR | O_CREAT | O_EXCL, S_IREAD | S_IWRITE); +#endif + while (!(fd == -1 && errno == EEXIST) && mktemp (template)); + else + fd = -1; + +#endif /* HAVE_MKSTEMP */ + + if (fd < 0) + free_mem (template); + else + { + opp->file = template; + opp->file_len = strlen (template); /* Don't include trailing nul */ + } + + return fd; +} + + +/* regular_file()-- Open a regular file. + * Change flags->action if it is ACTION_UNSPECIFIED on entry, + * unless an error occurs. + * Returns the descriptor, which is less than zero on error. */ + +static int +regular_file (st_parameter_open *opp, unit_flags *flags) +{ + char path[PATH_MAX + 1]; + int mode; + int rwflag; + int crflag; + int fd; + + if (unpack_filename (path, opp->file, opp->file_len)) + { + errno = ENOENT; /* Fake an OS error */ + return -1; + } + + rwflag = 0; + + switch (flags->action) + { + case ACTION_READ: + rwflag = O_RDONLY; + break; + + case ACTION_WRITE: + rwflag = O_WRONLY; + break; + + case ACTION_READWRITE: + case ACTION_UNSPECIFIED: + rwflag = O_RDWR; + break; + + default: + internal_error (&opp->common, "regular_file(): Bad action"); + } + + switch (flags->status) + { + case STATUS_NEW: + crflag = O_CREAT | O_EXCL; + break; + + case STATUS_OLD: /* open will fail if the file does not exist*/ + crflag = 0; + break; + + case STATUS_UNKNOWN: + case STATUS_SCRATCH: + crflag = O_CREAT; + break; + + case STATUS_REPLACE: + crflag = O_CREAT | O_TRUNC; + break; + + default: + internal_error (&opp->common, "regular_file(): Bad status"); + } + + /* rwflag |= O_LARGEFILE; */ + +#if defined(HAVE_CRLF) && defined(O_BINARY) + crflag |= O_BINARY; +#endif + + mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; + fd = open (path, rwflag | crflag, mode); + if (flags->action != ACTION_UNSPECIFIED) + return fd; + + if (fd >= 0) + { + flags->action = ACTION_READWRITE; + return fd; + } + if (errno != EACCES && errno != EROFS) + return fd; + + /* retry for read-only access */ + rwflag = O_RDONLY; + fd = open (path, rwflag | crflag, mode); + if (fd >=0) + { + flags->action = ACTION_READ; + return fd; /* success */ + } + + if (errno != EACCES) + return fd; /* failure */ + + /* retry for write-only access */ + rwflag = O_WRONLY; + fd = open (path, rwflag | crflag, mode); + if (fd >=0) + { + flags->action = ACTION_WRITE; + return fd; /* success */ + } + return fd; /* failure */ +} + + +/* open_external()-- Open an external file, unix specific version. + * Change flags->action if it is ACTION_UNSPECIFIED on entry. + * Returns NULL on operating system error. */ + +stream * +open_external (st_parameter_open *opp, unit_flags *flags) +{ + int fd, prot; + + if (flags->status == STATUS_SCRATCH) + { + fd = tempfile (opp); + if (flags->action == ACTION_UNSPECIFIED) + flags->action = ACTION_READWRITE; + +#if HAVE_UNLINK_OPEN_FILE + /* We can unlink scratch files now and it will go away when closed. */ + if (fd >= 0) + unlink (opp->file); +#endif + } + else + { + /* regular_file resets flags->action if it is ACTION_UNSPECIFIED and + * if it succeeds */ + fd = regular_file (opp, flags); + } + + if (fd < 0) + return NULL; + fd = fix_fd (fd); + + switch (flags->action) + { + case ACTION_READ: + prot = PROT_READ; + break; + + case ACTION_WRITE: + prot = PROT_WRITE; + break; + + case ACTION_READWRITE: + prot = PROT_READ | PROT_WRITE; + break; + + default: + internal_error (&opp->common, "open_external(): Bad action"); + } + + return fd_to_stream (fd, prot); +} + + +/* input_stream()-- Return a stream pointer to the default input stream. + * Called on initialization. */ + +stream * +input_stream (void) +{ + return fd_to_stream (STDIN_FILENO, PROT_READ); +} + + +/* output_stream()-- Return a stream pointer to the default output stream. + * Called on initialization. */ + +stream * +output_stream (void) +{ + stream * s; + +#if defined(HAVE_CRLF) && defined(HAVE_SETMODE) + setmode (STDOUT_FILENO, O_BINARY); +#endif + + s = fd_to_stream (STDOUT_FILENO, PROT_WRITE); + if (options.unbuffered_preconnected) + ((unix_stream *) s)->method = SYNC_UNBUFFERED; + return s; +} + + +/* error_stream()-- Return a stream pointer to the default error stream. + * Called on initialization. */ + +stream * +error_stream (void) +{ + stream * s; + +#if defined(HAVE_CRLF) && defined(HAVE_SETMODE) + setmode (STDERR_FILENO, O_BINARY); +#endif + + s = fd_to_stream (STDERR_FILENO, PROT_WRITE); + if (options.unbuffered_preconnected) + ((unix_stream *) s)->method = SYNC_UNBUFFERED; + return s; +} + + +/* st_vprintf()-- vprintf function for error output. To avoid buffer + overruns, we limit the length of the buffer to ST_VPRINTF_SIZE. 2k + is big enough to completely fill a 80x25 terminal, so it shuld be + OK. We use a direct write() because it is simpler and least likely + to be clobbered by memory corruption. Writing an error message + longer than that is an error. */ + +#define ST_VPRINTF_SIZE 2048 + +int +st_vprintf (const char *format, va_list ap) +{ + static char buffer[ST_VPRINTF_SIZE]; + int written; + int fd; + + fd = options.use_stderr ? STDERR_FILENO : STDOUT_FILENO; +#ifdef HAVE_VSNPRINTF + written = vsnprintf(buffer, ST_VPRINTF_SIZE, format, ap); +#else + written = vsprintf(buffer, format, ap); + + if (written >= ST_VPRINTF_SIZE-1) + { + /* The error message was longer than our buffer. Ouch. Because + we may have messed up things badly, report the error and + quit. */ +#define ERROR_MESSAGE "Internal error: buffer overrun in st_vprintf()\n" + write (fd, buffer, ST_VPRINTF_SIZE-1); + write (fd, ERROR_MESSAGE, strlen(ERROR_MESSAGE)); + sys_exit(2); +#undef ERROR_MESSAGE + + } +#endif + + written = write (fd, buffer, written); + return written; +} + +/* st_printf()-- printf() function for error output. This just calls + st_vprintf() to do the actual work. */ + +int +st_printf (const char *format, ...) +{ + int written; + va_list ap; + va_start (ap, format); + written = st_vprintf(format, ap); + va_end (ap); + return written; +} + + +/* compare_file_filename()-- Given an open stream and a fortran string + * that is a filename, figure out if the file is the same as the + * filename. */ + +int +compare_file_filename (gfc_unit *u, const char *name, int len) +{ + char path[PATH_MAX + 1]; + struct stat st1; +#ifdef HAVE_WORKING_STAT + struct stat st2; +#else +# ifdef __MINGW32__ + uint64_t id1, id2; +# endif +#endif + + if (unpack_filename (path, name, len)) + return 0; /* Can't be the same */ + + /* If the filename doesn't exist, then there is no match with the + * existing file. */ + + if (stat (path, &st1) < 0) + return 0; + +#ifdef HAVE_WORKING_STAT + fstat (((unix_stream *) (u->s))->fd, &st2); + return (st1.st_dev == st2.st_dev) && (st1.st_ino == st2.st_ino); +#else + +# ifdef __MINGW32__ + /* We try to match files by a unique ID. On some filesystems (network + fs and FAT), we can't generate this unique ID, and will simply compare + filenames. */ + id1 = id_from_path (path); + id2 = id_from_fd (((unix_stream *) (u->s))->fd); + if (id1 || id2) + return (id1 == id2); +# endif + + if (len != u->file_len) + return 0; + return (memcmp(path, u->file, len) == 0); +#endif +} + + +#ifdef HAVE_WORKING_STAT +# define FIND_FILE0_DECL struct stat *st +# define FIND_FILE0_ARGS st +#else +# define FIND_FILE0_DECL uint64_t id, const char *file, gfc_charlen_type file_len +# define FIND_FILE0_ARGS id, file, file_len +#endif + +/* find_file0()-- Recursive work function for find_file() */ + +static gfc_unit * +find_file0 (gfc_unit *u, FIND_FILE0_DECL) +{ + gfc_unit *v; +#if defined(__MINGW32__) && !HAVE_WORKING_STAT + uint64_t id1; +#endif + + if (u == NULL) + return NULL; + +#ifdef HAVE_WORKING_STAT + if (u->s != NULL + && fstat (((unix_stream *) u->s)->fd, &st[1]) >= 0 && + st[0].st_dev == st[1].st_dev && st[0].st_ino == st[1].st_ino) + return u; +#else +# ifdef __MINGW32__ + if (u->s && ((id1 = id_from_fd (((unix_stream *) u->s)->fd)) || id1)) + { + if (id == id1) + return u; + } + else +# endif + if (compare_string (u->file_len, u->file, file_len, file) == 0) + return u; +#endif + + v = find_file0 (u->left, FIND_FILE0_ARGS); + if (v != NULL) + return v; + + v = find_file0 (u->right, FIND_FILE0_ARGS); + if (v != NULL) + return v; + + return NULL; +} + + +/* find_file()-- Take the current filename and see if there is a unit + * that has the file already open. Returns a pointer to the unit if so. */ + +gfc_unit * +find_file (const char *file, gfc_charlen_type file_len) +{ + char path[PATH_MAX + 1]; + struct stat st[2]; + gfc_unit *u; + uint64_t id; + + if (unpack_filename (path, file, file_len)) + return NULL; + + if (stat (path, &st[0]) < 0) + return NULL; + +#if defined(__MINGW32__) && !HAVE_WORKING_STAT + id = id_from_path (path); +#else + id = 0; +#endif + + __gthread_mutex_lock (&unit_lock); +retry: + u = find_file0 (unit_root, FIND_FILE0_ARGS); + if (u != NULL) + { + /* Fast path. */ + if (! __gthread_mutex_trylock (&u->lock)) + { + /* assert (u->closed == 0); */ + __gthread_mutex_unlock (&unit_lock); + return u; + } + + inc_waiting_locked (u); + } + __gthread_mutex_unlock (&unit_lock); + if (u != NULL) + { + __gthread_mutex_lock (&u->lock); + if (u->closed) + { + __gthread_mutex_lock (&unit_lock); + __gthread_mutex_unlock (&u->lock); + if (predec_waiting_locked (u) == 0) + free_mem (u); + goto retry; + } + + dec_waiting_unlocked (u); + } + return u; +} + +static gfc_unit * +flush_all_units_1 (gfc_unit *u, int min_unit) +{ + while (u != NULL) + { + if (u->unit_number > min_unit) + { + gfc_unit *r = flush_all_units_1 (u->left, min_unit); + if (r != NULL) + return r; + } + if (u->unit_number >= min_unit) + { + if (__gthread_mutex_trylock (&u->lock)) + return u; + if (u->s) + flush (u->s); + __gthread_mutex_unlock (&u->lock); + } + u = u->right; + } + return NULL; +} + +void +flush_all_units (void) +{ + gfc_unit *u; + int min_unit = 0; + + __gthread_mutex_lock (&unit_lock); + do + { + u = flush_all_units_1 (unit_root, min_unit); + if (u != NULL) + inc_waiting_locked (u); + __gthread_mutex_unlock (&unit_lock); + if (u == NULL) + return; + + __gthread_mutex_lock (&u->lock); + + min_unit = u->unit_number + 1; + + if (u->closed == 0) + { + flush (u->s); + __gthread_mutex_lock (&unit_lock); + __gthread_mutex_unlock (&u->lock); + (void) predec_waiting_locked (u); + } + else + { + __gthread_mutex_lock (&unit_lock); + __gthread_mutex_unlock (&u->lock); + if (predec_waiting_locked (u) == 0) + free_mem (u); + } + } + while (1); +} + + +/* stream_at_bof()-- Returns nonzero if the stream is at the beginning + * of the file. */ + +int +stream_at_bof (stream * s) +{ + unix_stream *us; + + if (!is_seekable (s)) + return 0; + + us = (unix_stream *) s; + + return us->logical_offset == 0; +} + + +/* stream_at_eof()-- Returns nonzero if the stream is at the end + * of the file. */ + +int +stream_at_eof (stream * s) +{ + unix_stream *us; + + if (!is_seekable (s)) + return 0; + + us = (unix_stream *) s; + + return us->logical_offset == us->dirty_offset; +} + + +/* delete_file()-- Given a unit structure, delete the file associated + * with the unit. Returns nonzero if something went wrong. */ + +int +delete_file (gfc_unit * u) +{ + char path[PATH_MAX + 1]; + + if (unpack_filename (path, u->file, u->file_len)) + { /* Shouldn't be possible */ + errno = ENOENT; + return 1; + } + + return unlink (path); +} + + +/* file_exists()-- Returns nonzero if the current filename exists on + * the system */ + +int +file_exists (const char *file, gfc_charlen_type file_len) +{ + char path[PATH_MAX + 1]; + struct stat statbuf; + + if (unpack_filename (path, file, file_len)) + return 0; + + if (stat (path, &statbuf) < 0) + return 0; + + return 1; +} + + + +static const char yes[] = "YES", no[] = "NO", unknown[] = "UNKNOWN"; + +/* inquire_sequential()-- Given a fortran string, determine if the + * file is suitable for sequential access. Returns a C-style + * string. */ + +const char * +inquire_sequential (const char *string, int len) +{ + char path[PATH_MAX + 1]; + struct stat statbuf; + + if (string == NULL || + unpack_filename (path, string, len) || stat (path, &statbuf) < 0) + return unknown; + + if (S_ISREG (statbuf.st_mode) || + S_ISCHR (statbuf.st_mode) || S_ISFIFO (statbuf.st_mode)) + return unknown; + + if (S_ISDIR (statbuf.st_mode) || S_ISBLK (statbuf.st_mode)) + return no; + + return unknown; +} + + +/* inquire_direct()-- Given a fortran string, determine if the file is + * suitable for direct access. Returns a C-style string. */ + +const char * +inquire_direct (const char *string, int len) +{ + char path[PATH_MAX + 1]; + struct stat statbuf; + + if (string == NULL || + unpack_filename (path, string, len) || stat (path, &statbuf) < 0) + return unknown; + + if (S_ISREG (statbuf.st_mode) || S_ISBLK (statbuf.st_mode)) + return unknown; + + if (S_ISDIR (statbuf.st_mode) || + S_ISCHR (statbuf.st_mode) || S_ISFIFO (statbuf.st_mode)) + return no; + + return unknown; +} + + +/* inquire_formatted()-- Given a fortran string, determine if the file + * is suitable for formatted form. Returns a C-style string. */ + +const char * +inquire_formatted (const char *string, int len) +{ + char path[PATH_MAX + 1]; + struct stat statbuf; + + if (string == NULL || + unpack_filename (path, string, len) || stat (path, &statbuf) < 0) + return unknown; + + if (S_ISREG (statbuf.st_mode) || + S_ISBLK (statbuf.st_mode) || + S_ISCHR (statbuf.st_mode) || S_ISFIFO (statbuf.st_mode)) + return unknown; + + if (S_ISDIR (statbuf.st_mode)) + return no; + + return unknown; +} + + +/* inquire_unformatted()-- Given a fortran string, determine if the file + * is suitable for unformatted form. Returns a C-style string. */ + +const char * +inquire_unformatted (const char *string, int len) +{ + return inquire_formatted (string, len); +} + + +#ifndef HAVE_ACCESS + +#ifndef W_OK +#define W_OK 2 +#endif + +#ifndef R_OK +#define R_OK 4 +#endif + +/* Fallback implementation of access() on systems that don't have it. + Only modes R_OK and W_OK are used in this file. */ + +static int +fallback_access (const char *path, int mode) +{ + if ((mode & R_OK) && open (path, O_RDONLY) < 0) + return -1; + + if ((mode & W_OK) && open (path, O_WRONLY) < 0) + return -1; + + return 0; +} + +#undef access +#define access fallback_access +#endif + + +/* inquire_access()-- Given a fortran string, determine if the file is + * suitable for access. */ + +static const char * +inquire_access (const char *string, int len, int mode) +{ + char path[PATH_MAX + 1]; + + if (string == NULL || unpack_filename (path, string, len) || + access (path, mode) < 0) + return no; + + return yes; +} + + +/* inquire_read()-- Given a fortran string, determine if the file is + * suitable for READ access. */ + +const char * +inquire_read (const char *string, int len) +{ + return inquire_access (string, len, R_OK); +} + + +/* inquire_write()-- Given a fortran string, determine if the file is + * suitable for READ access. */ + +const char * +inquire_write (const char *string, int len) +{ + return inquire_access (string, len, W_OK); +} + + +/* inquire_readwrite()-- Given a fortran string, determine if the file is + * suitable for read and write access. */ + +const char * +inquire_readwrite (const char *string, int len) +{ + return inquire_access (string, len, R_OK | W_OK); +} + + +/* file_length()-- Return the file length in bytes, -1 if unknown */ + +gfc_offset +file_length (stream * s) +{ + return ((unix_stream *) s)->file_length; +} + + +/* file_position()-- Return the current position of the file */ + +gfc_offset +file_position (stream *s) +{ + return ((unix_stream *) s)->logical_offset; +} + + +/* is_seekable()-- Return nonzero if the stream is seekable, zero if + * it is not */ + +int +is_seekable (stream *s) +{ + /* By convention, if file_length == -1, the file is not + seekable. */ + return ((unix_stream *) s)->file_length!=-1; +} + + +/* is_special()-- Return nonzero if the stream is not a regular file. */ + +int +is_special (stream *s) +{ + return ((unix_stream *) s)->special_file; +} + + +try +flush (stream *s) +{ + return fd_flush( (unix_stream *) s); +} + +int +stream_isatty (stream *s) +{ + return isatty (((unix_stream *) s)->fd); +} + +char * +stream_ttyname (stream *s __attribute__ ((unused))) +{ +#ifdef HAVE_TTYNAME + return ttyname (((unix_stream *) s)->fd); +#else + return NULL; +#endif +} + +gfc_offset +stream_offset (stream *s) +{ + return (((unix_stream *) s)->logical_offset); +} + + +/* How files are stored: This is an operating-system specific issue, + and therefore belongs here. There are three cases to consider. + + Direct Access: + Records are written as block of bytes corresponding to the record + length of the file. This goes for both formatted and unformatted + records. Positioning is done explicitly for each data transfer, + so positioning is not much of an issue. + + Sequential Formatted: + Records are separated by newline characters. The newline character + is prohibited from appearing in a string. If it does, this will be + messed up on the next read. End of file is also the end of a record. + + Sequential Unformatted: + In this case, we are merely copying bytes to and from main storage, + yet we need to keep track of varying record lengths. We adopt + the solution used by f2c. Each record contains a pair of length + markers: + + Length of record n in bytes + Data of record n + Length of record n in bytes + + Length of record n+1 in bytes + Data of record n+1 + Length of record n+1 in bytes + + The length is stored at the end of a record to allow backspacing to the + previous record. Between data transfer statements, the file pointer + is left pointing to the first length of the current record. + + ENDFILE records are never explicitly stored. + +*/ diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/write.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/write.c new file mode 100644 index 0000000000..5d31e15dff --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/write.c @@ -0,0 +1,1506 @@ +/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught + Namelist output contributed by Paul Thomas + F2003 I/O support contributed by Jerry DeLisle + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "io.h" +#include +#include +#include +#include +#include +#include +#define star_fill(p, n) memset(p, '*', n) + +#include "write_float.def" + +typedef unsigned char uchar; + +/* Write out default char4. */ + +static void +write_default_char4 (st_parameter_dt *dtp, gfc_char4_t *source, + int src_len, int w_len) +{ + char *p; + int j, k = 0; + gfc_char4_t c; + uchar d; + + /* Take care of preceding blanks. */ + if (w_len > src_len) + { + k = w_len - src_len; + p = write_block (dtp, k); + if (p == NULL) + return; + memset (p, ' ', k); + } + + /* Get ready to handle delimiters if needed. */ + switch (dtp->u.p.current_unit->delim_status) + { + case DELIM_APOSTROPHE: + d = '\''; + break; + case DELIM_QUOTE: + d = '"'; + break; + default: + d = ' '; + break; + } + + /* Now process the remaining characters, one at a time. */ + for (j = k; j < src_len; j++) + { + c = source[j]; + + /* Handle delimiters if any. */ + if (c == d && d != ' ') + { + p = write_block (dtp, 2); + if (p == NULL) + return; + *p++ = (uchar) c; + } + else + { + p = write_block (dtp, 1); + if (p == NULL) + return; + } + *p = c > 255 ? '?' : (uchar) c; + } +} + + +/* Write out UTF-8 converted from char4. */ + +static void +write_utf8_char4 (st_parameter_dt *dtp, gfc_char4_t *source, + int src_len, int w_len) +{ + char *p; + int j, k = 0; + gfc_char4_t c; + static const uchar masks[6] = { 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; + static const uchar limits[6] = { 0x80, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE }; + size_t nbytes; + uchar buf[6], d, *q; + + /* Take care of preceding blanks. */ + if (w_len > src_len) + { + k = w_len - src_len; + p = write_block (dtp, k); + if (p == NULL) + return; + memset (p, ' ', k); + } + + /* Get ready to handle delimiters if needed. */ + switch (dtp->u.p.current_unit->delim_status) + { + case DELIM_APOSTROPHE: + d = '\''; + break; + case DELIM_QUOTE: + d = '"'; + break; + default: + d = ' '; + break; + } + + /* Now process the remaining characters, one at a time. */ + for (j = k; j < src_len; j++) + { + c = source[j]; + if (c < 0x80) + { + /* Handle the delimiters if any. */ + if (c == d && d != ' ') + { + p = write_block (dtp, 2); + if (p == NULL) + return; + *p++ = (uchar) c; + } + else + { + p = write_block (dtp, 1); + if (p == NULL) + return; + } + *p = (uchar) c; + } + else + { + /* Convert to UTF-8 sequence. */ + nbytes = 1; + q = &buf[6]; + + do + { + *--q = ((c & 0x3F) | 0x80); + c >>= 6; + nbytes++; + } + while (c >= 0x3F || (c & limits[nbytes-1])); + + *--q = (c | masks[nbytes-1]); + + p = write_block (dtp, nbytes); + if (p == NULL) + return; + + while (q < &buf[6]) + *p++ = *q++; + } + } +} + + +void +write_a (st_parameter_dt *dtp, const fnode *f, const char *source, int len) +{ + int wlen; + char *p; + + wlen = f->u.string.length < 0 + || (f->format == FMT_G && f->u.string.length == 0) + ? len : f->u.string.length; + +#ifdef HAVE_CRLF + /* If this is formatted STREAM IO convert any embedded line feed characters + to CR_LF on systems that use that sequence for newlines. See F2003 + Standard sections 10.6.3 and 9.9 for further information. */ + if (is_stream_io (dtp)) + { + const char crlf[] = "\r\n"; + int i, q, bytes; + q = bytes = 0; + + /* Write out any padding if needed. */ + if (len < wlen) + { + p = write_block (dtp, wlen - len); + if (p == NULL) + return; + memset (p, ' ', wlen - len); + } + + /* Scan the source string looking for '\n' and convert it if found. */ + for (i = 0; i < wlen; i++) + { + if (source[i] == '\n') + { + /* Write out the previously scanned characters in the string. */ + if (bytes > 0) + { + p = write_block (dtp, bytes); + if (p == NULL) + return; + memcpy (p, &source[q], bytes); + q += bytes; + bytes = 0; + } + + /* Write out the CR_LF sequence. */ + q++; + p = write_block (dtp, 2); + if (p == NULL) + return; + memcpy (p, crlf, 2); + } + else + bytes++; + } + + /* Write out any remaining bytes if no LF was found. */ + if (bytes > 0) + { + p = write_block (dtp, bytes); + if (p == NULL) + return; + memcpy (p, &source[q], bytes); + } + } + else + { +#endif + p = write_block (dtp, wlen); + if (p == NULL) + return; + + if (wlen < len) + memcpy (p, source, wlen); + else + { + memset (p, ' ', wlen - len); + memcpy (p + wlen - len, source, len); + } +#ifdef HAVE_CRLF + } +#endif +} + + +/* The primary difference between write_a_char4 and write_a is that we have to + deal with writing from the first byte of the 4-byte character and pay + attention to the most significant bytes. For ENCODING="default" write the + lowest significant byte. If the 3 most significant bytes contain + non-zero values, emit a '?'. For ENCODING="utf-8", convert the UCS-32 value + to the UTF-8 encoded string before writing out. */ + +void +write_a_char4 (st_parameter_dt *dtp, const fnode *f, const char *source, int len) +{ + int wlen; + gfc_char4_t *q; + + wlen = f->u.string.length < 0 + || (f->format == FMT_G && f->u.string.length == 0) + ? len : f->u.string.length; + + q = (gfc_char4_t *) source; +#ifdef HAVE_CRLF + /* If this is formatted STREAM IO convert any embedded line feed characters + to CR_LF on systems that use that sequence for newlines. See F2003 + Standard sections 10.6.3 and 9.9 for further information. */ + if (is_stream_io (dtp)) + { + const char crlf[] = "\r\n"; + int i, bytes; + gfc_char4_t *qq; + bytes = 0; + + /* Write out any padding if needed. */ + if (len < wlen) + { + char *p; + p = write_block (dtp, wlen - len); + if (p == NULL) + return; + memset (p, ' ', wlen - len); + } + + /* Scan the source string looking for '\n' and convert it if found. */ + qq = (gfc_char4_t *) source; + for (i = 0; i < wlen; i++) + { + if (qq[i] == '\n') + { + /* Write out the previously scanned characters in the string. */ + if (bytes > 0) + { + if (dtp->u.p.current_unit->flags.encoding == ENCODING_UTF8) + write_utf8_char4 (dtp, q, bytes, 0); + else + write_default_char4 (dtp, q, bytes, 0); + bytes = 0; + } + + /* Write out the CR_LF sequence. */ + write_default_char4 (dtp, crlf, 2, 0); + } + else + bytes++; + } + + /* Write out any remaining bytes if no LF was found. */ + if (bytes > 0) + { + if (dtp->u.p.current_unit->flags.encoding == ENCODING_UTF8) + write_utf8_char4 (dtp, q, bytes, 0); + else + write_default_char4 (dtp, q, bytes, 0); + } + } + else + { +#endif + if (dtp->u.p.current_unit->flags.encoding == ENCODING_UTF8) + write_utf8_char4 (dtp, q, len, wlen); + else + write_default_char4 (dtp, q, len, wlen); +#ifdef HAVE_CRLF + } +#endif +} + + +static GFC_INTEGER_LARGEST +extract_int (const void *p, int len) +{ + GFC_INTEGER_LARGEST i = 0; + + if (p == NULL) + return i; + + switch (len) + { + case 1: + { + GFC_INTEGER_1 tmp; + memcpy ((void *) &tmp, p, len); + i = tmp; + } + break; + case 2: + { + GFC_INTEGER_2 tmp; + memcpy ((void *) &tmp, p, len); + i = tmp; + } + break; + case 4: + { + GFC_INTEGER_4 tmp; + memcpy ((void *) &tmp, p, len); + i = tmp; + } + break; + case 8: + { + GFC_INTEGER_8 tmp; + memcpy ((void *) &tmp, p, len); + i = tmp; + } + break; +#ifdef HAVE_GFC_INTEGER_16 + case 16: + { + GFC_INTEGER_16 tmp; + memcpy ((void *) &tmp, p, len); + i = tmp; + } + break; +#endif + default: + internal_error (NULL, "bad integer kind"); + } + + return i; +} + +static GFC_UINTEGER_LARGEST +extract_uint (const void *p, int len) +{ + GFC_UINTEGER_LARGEST i = 0; + + if (p == NULL) + return i; + + switch (len) + { + case 1: + { + GFC_INTEGER_1 tmp; + memcpy ((void *) &tmp, p, len); + i = (GFC_UINTEGER_1) tmp; + } + break; + case 2: + { + GFC_INTEGER_2 tmp; + memcpy ((void *) &tmp, p, len); + i = (GFC_UINTEGER_2) tmp; + } + break; + case 4: + { + GFC_INTEGER_4 tmp; + memcpy ((void *) &tmp, p, len); + i = (GFC_UINTEGER_4) tmp; + } + break; + case 8: + { + GFC_INTEGER_8 tmp; + memcpy ((void *) &tmp, p, len); + i = (GFC_UINTEGER_8) tmp; + } + break; +#ifdef HAVE_GFC_INTEGER_16 + case 16: + { + GFC_INTEGER_16 tmp; + memcpy ((void *) &tmp, p, len); + i = (GFC_UINTEGER_16) tmp; + } + break; +#endif + default: + internal_error (NULL, "bad integer kind"); + } + + return i; +} + + +void +write_l (st_parameter_dt *dtp, const fnode *f, char *source, int len) +{ + char *p; + int wlen; + GFC_INTEGER_LARGEST n; + + wlen = (f->format == FMT_G && f->u.w == 0) ? 1 : f->u.w; + + p = write_block (dtp, wlen); + if (p == NULL) + return; + + memset (p, ' ', wlen - 1); + n = extract_int (source, len); + p[wlen - 1] = (n) ? 'T' : 'F'; +} + + +static void +write_int (st_parameter_dt *dtp, const fnode *f, const char *source, int len, + const char *(*conv) (GFC_UINTEGER_LARGEST, char *, size_t)) +{ + GFC_UINTEGER_LARGEST n = 0; + int w, m, digits, nzero, nblank; + char *p; + const char *q; + char itoa_buf[GFC_BTOA_BUF_SIZE]; + + w = f->u.integer.w; + m = f->u.integer.m; + + n = extract_uint (source, len); + + /* Special case: */ + + if (m == 0 && n == 0) + { + if (w == 0) + w = 1; + + p = write_block (dtp, w); + if (p == NULL) + return; + + memset (p, ' ', w); + goto done; + } + + q = conv (n, itoa_buf, sizeof (itoa_buf)); + digits = strlen (q); + + /* Select a width if none was specified. The idea here is to always + print something. */ + + if (w == 0) + w = ((digits < m) ? m : digits); + + p = write_block (dtp, w); + if (p == NULL) + return; + + nzero = 0; + if (digits < m) + nzero = m - digits; + + /* See if things will work. */ + + nblank = w - (nzero + digits); + + if (nblank < 0) + { + star_fill (p, w); + goto done; + } + + + if (!dtp->u.p.no_leading_blank) + { + memset (p, ' ', nblank); + p += nblank; + memset (p, '0', nzero); + p += nzero; + memcpy (p, q, digits); + } + else + { + memset (p, '0', nzero); + p += nzero; + memcpy (p, q, digits); + p += digits; + memset (p, ' ', nblank); + dtp->u.p.no_leading_blank = 0; + } + + done: + return; +} + +static void +write_decimal (st_parameter_dt *dtp, const fnode *f, const char *source, + int len, + const char *(*conv) (GFC_INTEGER_LARGEST, char *, size_t)) +{ + GFC_INTEGER_LARGEST n = 0; + int w, m, digits, nsign, nzero, nblank; + char *p; + const char *q; + sign_t sign; + char itoa_buf[GFC_BTOA_BUF_SIZE]; + + w = f->u.integer.w; + m = f->format == FMT_G ? -1 : f->u.integer.m; + + n = extract_int (source, len); + + /* Special case: */ + if (m == 0 && n == 0) + { + if (w == 0) + w = 1; + + p = write_block (dtp, w); + if (p == NULL) + return; + + memset (p, ' ', w); + goto done; + } + + sign = calculate_sign (dtp, n < 0); + if (n < 0) + n = -n; + nsign = sign == S_NONE ? 0 : 1; + + /* conv calls gfc_itoa which sets the negative sign needed + by write_integer. The sign '+' or '-' is set below based on sign + calculated above, so we just point past the sign in the string + before proceeding to avoid double signs in corner cases. + (see PR38504) */ + q = conv (n, itoa_buf, sizeof (itoa_buf)); + if (*q == '-') + q++; + + digits = strlen (q); + + /* Select a width if none was specified. The idea here is to always + print something. */ + + if (w == 0) + w = ((digits < m) ? m : digits) + nsign; + + p = write_block (dtp, w); + if (p == NULL) + return; + + nzero = 0; + if (digits < m) + nzero = m - digits; + + /* See if things will work. */ + + nblank = w - (nsign + nzero + digits); + + if (nblank < 0) + { + star_fill (p, w); + goto done; + } + + memset (p, ' ', nblank); + p += nblank; + + switch (sign) + { + case S_PLUS: + *p++ = '+'; + break; + case S_MINUS: + *p++ = '-'; + break; + case S_NONE: + break; + } + + memset (p, '0', nzero); + p += nzero; + + memcpy (p, q, digits); + + done: + return; +} + + +/* Convert unsigned octal to ascii. */ + +static const char * +otoa (GFC_UINTEGER_LARGEST n, char *buffer, size_t len) +{ + char *p; + + assert (len >= GFC_OTOA_BUF_SIZE); + + if (n == 0) + return "0"; + + p = buffer + GFC_OTOA_BUF_SIZE - 1; + *p = '\0'; + + while (n != 0) + { + *--p = '0' + (n & 7); + n >>= 3; + } + + return p; +} + + +/* Convert unsigned binary to ascii. */ + +static const char * +btoa (GFC_UINTEGER_LARGEST n, char *buffer, size_t len) +{ + char *p; + + assert (len >= GFC_BTOA_BUF_SIZE); + + if (n == 0) + return "0"; + + p = buffer + GFC_BTOA_BUF_SIZE - 1; + *p = '\0'; + + while (n != 0) + { + *--p = '0' + (n & 1); + n >>= 1; + } + + return p; +} + + +void +write_i (st_parameter_dt *dtp, const fnode *f, const char *p, int len) +{ + write_decimal (dtp, f, p, len, (void *) gfc_itoa); +} + + +void +write_b (st_parameter_dt *dtp, const fnode *f, const char *p, int len) +{ + write_int (dtp, f, p, len, btoa); +} + + +void +write_o (st_parameter_dt *dtp, const fnode *f, const char *p, int len) +{ + write_int (dtp, f, p, len, otoa); +} + +void +write_z (st_parameter_dt *dtp, const fnode *f, const char *p, int len) +{ + write_int (dtp, f, p, len, xtoa); +} + + +void +write_d (st_parameter_dt *dtp, const fnode *f, const char *p, int len) +{ + write_float (dtp, f, p, len); +} + + +void +write_e (st_parameter_dt *dtp, const fnode *f, const char *p, int len) +{ + write_float (dtp, f, p, len); +} + + +void +write_f (st_parameter_dt *dtp, const fnode *f, const char *p, int len) +{ + write_float (dtp, f, p, len); +} + + +void +write_en (st_parameter_dt *dtp, const fnode *f, const char *p, int len) +{ + write_float (dtp, f, p, len); +} + + +void +write_es (st_parameter_dt *dtp, const fnode *f, const char *p, int len) +{ + write_float (dtp, f, p, len); +} + + +/* Take care of the X/TR descriptor. */ + +void +write_x (st_parameter_dt *dtp, int len, int nspaces) +{ + char *p; + + p = write_block (dtp, len); + if (p == NULL) + return; + + if (nspaces > 0) + memset (&p[len - nspaces], ' ', nspaces); +} + + +/* List-directed writing. */ + + +/* Write a single character to the output. Returns nonzero if + something goes wrong. */ + +static int +write_char (st_parameter_dt *dtp, char c) +{ + char *p; + + p = write_block (dtp, 1); + if (p == NULL) + return 1; + + *p = c; + + return 0; +} + + +/* Write a list-directed logical value. */ + +static void +write_logical (st_parameter_dt *dtp, const char *source, int length) +{ + write_char (dtp, extract_int (source, length) ? 'T' : 'F'); +} + + +/* Write a list-directed integer value. */ + +static void +write_integer (st_parameter_dt *dtp, const char *source, int length) +{ + char *p; + const char *q; + int digits; + int width; + char itoa_buf[GFC_ITOA_BUF_SIZE]; + + q = gfc_itoa (extract_int (source, length), itoa_buf, sizeof (itoa_buf)); + + switch (length) + { + case 1: + width = 4; + break; + + case 2: + width = 6; + break; + + case 4: + width = 11; + break; + + case 8: + width = 20; + break; + + default: + width = 0; + break; + } + + digits = strlen (q); + + if (width < digits) + width = digits; + p = write_block (dtp, width); + if (p == NULL) + return; + if (dtp->u.p.no_leading_blank) + { + memcpy (p, q, digits); + memset (p + digits, ' ', width - digits); + } + else + { + memset (p, ' ', width - digits); + memcpy (p + width - digits, q, digits); + } +} + + +/* Write a list-directed string. We have to worry about delimiting + the strings if the file has been opened in that mode. */ + +static void +write_character (st_parameter_dt *dtp, const char *source, int kind, int length) +{ + int i, extra; + char *p, d; + + switch (dtp->u.p.current_unit->delim_status) + { + case DELIM_APOSTROPHE: + d = '\''; + break; + case DELIM_QUOTE: + d = '"'; + break; + default: + d = ' '; + break; + } + + if (kind == 1) + { + if (d == ' ') + extra = 0; + else + { + extra = 2; + + for (i = 0; i < length; i++) + if (source[i] == d) + extra++; + } + + p = write_block (dtp, length + extra); + if (p == NULL) + return; + + if (d == ' ') + memcpy (p, source, length); + else + { + *p++ = d; + + for (i = 0; i < length; i++) + { + *p++ = source[i]; + if (source[i] == d) + *p++ = d; + } + + *p = d; + } + } + else + { + if (d == ' ') + { + if (dtp->u.p.current_unit->flags.encoding == ENCODING_UTF8) + write_utf8_char4 (dtp, (gfc_char4_t *) source, length, 0); + else + write_default_char4 (dtp, (gfc_char4_t *) source, length, 0); + } + else + { + p = write_block (dtp, 1); + *p = d; + + if (dtp->u.p.current_unit->flags.encoding == ENCODING_UTF8) + write_utf8_char4 (dtp, (gfc_char4_t *) source, length, 0); + else + write_default_char4 (dtp, (gfc_char4_t *) source, length, 0); + + p = write_block (dtp, 1); + *p = d; + } + } +} + + +/* Set an fnode to default format. */ + +static void +set_fnode_default (st_parameter_dt *dtp, fnode *f, int length) +{ + f->format = FMT_G; + switch (length) + { + case 4: + f->u.real.w = 15; + f->u.real.d = 8; + f->u.real.e = 2; + break; + case 8: + f->u.real.w = 25; + f->u.real.d = 17; + f->u.real.e = 3; + break; + case 10: + f->u.real.w = 29; + f->u.real.d = 20; + f->u.real.e = 4; + break; + case 16: + f->u.real.w = 44; + f->u.real.d = 35; + f->u.real.e = 4; + break; + default: + internal_error (&dtp->common, "bad real kind"); + break; + } +} +/* Output a real number with default format. + This is 1PG14.7E2 for REAL(4), 1PG23.15E3 for REAL(8), + 1PG28.19E4 for REAL(10) and 1PG43.34E4 for REAL(16). */ + +void +write_real (st_parameter_dt *dtp, const char *source, int length) +{ + fnode f ; + int org_scale = dtp->u.p.scale_factor; + dtp->u.p.scale_factor = 1; + set_fnode_default (dtp, &f, length); + write_float (dtp, &f, source , length); + dtp->u.p.scale_factor = org_scale; +} + + +void +write_real_g0 (st_parameter_dt *dtp, const char *source, int length, int d) +{ + fnode f ; + set_fnode_default (dtp, &f, length); + if (d > 0) + f.u.real.d = d; + dtp->u.p.g0_no_blanks = 1; + write_float (dtp, &f, source , length); + dtp->u.p.g0_no_blanks = 0; +} + + +static void +write_complex (st_parameter_dt *dtp, const char *source, int kind, size_t size) +{ + char semi_comma = + dtp->u.p.current_unit->decimal_status == DECIMAL_POINT ? ',' : ';'; + + if (write_char (dtp, '(')) + return; + write_real (dtp, source, kind); + + if (write_char (dtp, semi_comma)) + return; + write_real (dtp, source + size / 2, kind); + + write_char (dtp, ')'); +} + + +/* Write the separator between items. */ + +static void +write_separator (st_parameter_dt *dtp) +{ + char *p; + + p = write_block (dtp, options.separator_len); + if (p == NULL) + return; + + memcpy (p, options.separator, options.separator_len); +} + + +/* Write an item with list formatting. + TODO: handle skipping to the next record correctly, particularly + with strings. */ + +static void +list_formatted_write_scalar (st_parameter_dt *dtp, bt type, void *p, int kind, + size_t size) +{ + if (dtp->u.p.current_unit == NULL) + return; + + if (dtp->u.p.first_item) + { + dtp->u.p.first_item = 0; + write_char (dtp, ' '); + } + else + { + if (type != BT_CHARACTER || !dtp->u.p.char_flag || + dtp->u.p.current_unit->delim_status != DELIM_NONE) + write_separator (dtp); + } + + switch (type) + { + case BT_INTEGER: + write_integer (dtp, p, kind); + break; + case BT_LOGICAL: + write_logical (dtp, p, kind); + break; + case BT_CHARACTER: + write_character (dtp, p, kind, size); + break; + case BT_REAL: + write_real (dtp, p, kind); + break; + case BT_COMPLEX: + write_complex (dtp, p, kind, size); + break; + default: + internal_error (&dtp->common, "list_formatted_write(): Bad type"); + } + + dtp->u.p.char_flag = (type == BT_CHARACTER); +} + + +void +list_formatted_write (st_parameter_dt *dtp, bt type, void *p, int kind, + size_t size, size_t nelems) +{ + size_t elem; + char *tmp; + size_t stride = type == BT_CHARACTER ? + size * GFC_SIZE_OF_CHAR_KIND(kind) : size; + + tmp = (char *) p; + + /* Big loop over all the elements. */ + for (elem = 0; elem < nelems; elem++) + { + dtp->u.p.item_count++; + list_formatted_write_scalar (dtp, type, tmp + elem * stride, kind, size); + } +} + +/* NAMELIST OUTPUT + + nml_write_obj writes a namelist object to the output stream. It is called + recursively for derived type components: + obj = is the namelist_info for the current object. + offset = the offset relative to the address held by the object for + derived type arrays. + base = is the namelist_info of the derived type, when obj is a + component. + base_name = the full name for a derived type, including qualifiers + if any. + The returned value is a pointer to the object beyond the last one + accessed, including nested derived types. Notice that the namelist is + a linear linked list of objects, including derived types and their + components. A tree, of sorts, is implied by the compound names of + the derived type components and this is how this function recurses through + the list. */ + +/* A generous estimate of the number of characters needed to print + repeat counts and indices, including commas, asterices and brackets. */ + +#define NML_DIGITS 20 + +static void +namelist_write_newline (st_parameter_dt *dtp) +{ + if (!is_internal_unit (dtp)) + { +#ifdef HAVE_CRLF + write_character (dtp, "\r\n", 1, 2); +#else + write_character (dtp, "\n", 1, 1); +#endif + return; + } + + if (is_array_io (dtp)) + { + gfc_offset record; + int finished, length; + + length = (int) dtp->u.p.current_unit->bytes_left; + + /* Now that the current record has been padded out, + determine where the next record in the array is. */ + record = next_array_record (dtp, dtp->u.p.current_unit->ls, + &finished); + if (finished) + dtp->u.p.current_unit->endfile = AT_ENDFILE; + else + { + /* Now seek to this record */ + record = record * dtp->u.p.current_unit->recl; + + if (sseek (dtp->u.p.current_unit->s, record) == FAILURE) + { + generate_error (&dtp->common, LIBERROR_INTERNAL_UNIT, NULL); + return; + } + + dtp->u.p.current_unit->bytes_left = dtp->u.p.current_unit->recl; + } + } + else + write_character (dtp, " ", 1, 1); +} + + +static namelist_info * +nml_write_obj (st_parameter_dt *dtp, namelist_info * obj, index_type offset, + namelist_info * base, char * base_name) +{ + int rep_ctr; + int num; + int nml_carry; + index_type len; + index_type obj_size; + index_type nelem; + index_type dim_i; + index_type clen; + index_type elem_ctr; + index_type obj_name_len; + void * p ; + char cup; + char * obj_name; + char * ext_name; + char rep_buff[NML_DIGITS]; + namelist_info * cmp; + namelist_info * retval = obj->next; + size_t base_name_len; + size_t base_var_name_len; + size_t tot_len; + unit_delim tmp_delim; + + /* Set the character to be used to separate values + to a comma or semi-colon. */ + + char semi_comma = + dtp->u.p.current_unit->decimal_status == DECIMAL_POINT ? ',' : ';'; + + /* Write namelist variable names in upper case. If a derived type, + nothing is output. If a component, base and base_name are set. */ + + if (obj->type != GFC_DTYPE_DERIVED) + { + namelist_write_newline (dtp); + write_character (dtp, " ", 1, 1); + + len = 0; + if (base) + { + len =strlen (base->var_name); + for (dim_i = 0; dim_i < (index_type) strlen (base_name); dim_i++) + { + cup = toupper (base_name[dim_i]); + write_character (dtp, &cup, 1, 1); + } + } + for (dim_i =len; dim_i < (index_type) strlen (obj->var_name); dim_i++) + { + cup = toupper (obj->var_name[dim_i]); + write_character (dtp, &cup, 1, 1); + } + write_character (dtp, "=", 1, 1); + } + + /* Counts the number of data output on a line, including names. */ + + num = 1; + + len = obj->len; + + switch (obj->type) + { + + case GFC_DTYPE_REAL: + obj_size = size_from_real_kind (len); + break; + + case GFC_DTYPE_COMPLEX: + obj_size = size_from_complex_kind (len); + break; + + case GFC_DTYPE_CHARACTER: + obj_size = obj->string_length; + break; + + default: + obj_size = len; + } + + if (obj->var_rank) + obj_size = obj->size; + + /* Set the index vector and count the number of elements. */ + + nelem = 1; + for (dim_i=0; dim_i < obj->var_rank; dim_i++) + { + obj->ls[dim_i].idx = obj->dim[dim_i].lbound; + nelem = nelem * (obj->dim[dim_i].ubound + 1 - obj->dim[dim_i].lbound); + } + + /* Main loop to output the data held in the object. */ + + rep_ctr = 1; + for (elem_ctr = 0; elem_ctr < nelem; elem_ctr++) + { + + /* Build the pointer to the data value. The offset is passed by + recursive calls to this function for arrays of derived types. + Is NULL otherwise. */ + + p = (void *)(obj->mem_pos + elem_ctr * obj_size); + p += offset; + + /* Check for repeat counts of intrinsic types. */ + + if ((elem_ctr < (nelem - 1)) && + (obj->type != GFC_DTYPE_DERIVED) && + !memcmp (p, (void*)(p + obj_size ), obj_size )) + { + rep_ctr++; + } + + /* Execute a repeated output. Note the flag no_leading_blank that + is used in the functions used to output the intrinsic types. */ + + else + { + if (rep_ctr > 1) + { + sprintf(rep_buff, " %d*", rep_ctr); + write_character (dtp, rep_buff, 1, strlen (rep_buff)); + dtp->u.p.no_leading_blank = 1; + } + num++; + + /* Output the data, if an intrinsic type, or recurse into this + routine to treat derived types. */ + + switch (obj->type) + { + + case GFC_DTYPE_INTEGER: + write_integer (dtp, p, len); + break; + + case GFC_DTYPE_LOGICAL: + write_logical (dtp, p, len); + break; + + case GFC_DTYPE_CHARACTER: + tmp_delim = dtp->u.p.current_unit->delim_status; + if (dtp->u.p.nml_delim == '"') + dtp->u.p.current_unit->delim_status = DELIM_QUOTE; + if (dtp->u.p.nml_delim == '\'') + dtp->u.p.current_unit->delim_status = DELIM_APOSTROPHE; + write_character (dtp, p, 1, obj->string_length); + dtp->u.p.current_unit->delim_status = tmp_delim; + break; + + case GFC_DTYPE_REAL: + write_real (dtp, p, len); + break; + + case GFC_DTYPE_COMPLEX: + dtp->u.p.no_leading_blank = 0; + num++; + write_complex (dtp, p, len, obj_size); + break; + + case GFC_DTYPE_DERIVED: + + /* To treat a derived type, we need to build two strings: + ext_name = the name, including qualifiers that prepends + component names in the output - passed to + nml_write_obj. + obj_name = the derived type name with no qualifiers but % + appended. This is used to identify the + components. */ + + /* First ext_name => get length of all possible components */ + + base_name_len = base_name ? strlen (base_name) : 0; + base_var_name_len = base ? strlen (base->var_name) : 0; + ext_name = (char*)get_mem ( base_name_len + + base_var_name_len + + strlen (obj->var_name) + + obj->var_rank * NML_DIGITS + + 1); + + memcpy (ext_name, base_name, base_name_len); + clen = strlen (obj->var_name + base_var_name_len); + memcpy (ext_name + base_name_len, + obj->var_name + base_var_name_len, clen); + + /* Append the qualifier. */ + + tot_len = base_name_len + clen; + for (dim_i = 0; dim_i < obj->var_rank; dim_i++) + { + if (!dim_i) + { + ext_name[tot_len] = '('; + tot_len++; + } + sprintf (ext_name + tot_len, "%d", (int) obj->ls[dim_i].idx); + tot_len += strlen (ext_name + tot_len); + ext_name[tot_len] = (dim_i == obj->var_rank - 1) ? ')' : ','; + tot_len++; + } + + ext_name[tot_len] = '\0'; + + /* Now obj_name. */ + + obj_name_len = strlen (obj->var_name) + 1; + obj_name = get_mem (obj_name_len+1); + memcpy (obj_name, obj->var_name, obj_name_len-1); + memcpy (obj_name + obj_name_len-1, "%", 2); + + /* Now loop over the components. Update the component pointer + with the return value from nml_write_obj => this loop jumps + past nested derived types. */ + + for (cmp = obj->next; + cmp && !strncmp (cmp->var_name, obj_name, obj_name_len); + cmp = retval) + { + retval = nml_write_obj (dtp, cmp, + (index_type)(p - obj->mem_pos), + obj, ext_name); + } + + free_mem (obj_name); + free_mem (ext_name); + goto obj_loop; + + default: + internal_error (&dtp->common, "Bad type for namelist write"); + } + + /* Reset the leading blank suppression, write a comma (or semi-colon) + and, if 5 values have been output, write a newline and advance + to column 2. Reset the repeat counter. */ + + dtp->u.p.no_leading_blank = 0; + write_character (dtp, &semi_comma, 1, 1); + if (num > 5) + { + num = 0; + namelist_write_newline (dtp); + write_character (dtp, " ", 1, 1); + } + rep_ctr = 1; + } + + /* Cycle through and increment the index vector. */ + +obj_loop: + + nml_carry = 1; + for (dim_i = 0; nml_carry && (dim_i < obj->var_rank); dim_i++) + { + obj->ls[dim_i].idx += nml_carry ; + nml_carry = 0; + if (obj->ls[dim_i].idx > (ssize_t)obj->dim[dim_i].ubound) + { + obj->ls[dim_i].idx = obj->dim[dim_i].lbound; + nml_carry = 1; + } + } + } + + /* Return a pointer beyond the furthest object accessed. */ + + return retval; +} + + +/* This is the entry function for namelist writes. It outputs the name + of the namelist and iterates through the namelist by calls to + nml_write_obj. The call below has dummys in the arguments used in + the treatment of derived types. */ + +void +namelist_write (st_parameter_dt *dtp) +{ + namelist_info * t1, *t2, *dummy = NULL; + index_type i; + index_type dummy_offset = 0; + char c; + char * dummy_name = NULL; + unit_delim tmp_delim = DELIM_UNSPECIFIED; + + /* Set the delimiter for namelist output. */ + tmp_delim = dtp->u.p.current_unit->delim_status; + + dtp->u.p.nml_delim = tmp_delim == DELIM_APOSTROPHE ? '\'' : '"'; + + /* Temporarily disable namelist delimters. */ + dtp->u.p.current_unit->delim_status = DELIM_NONE; + + write_character (dtp, "&", 1, 1); + + /* Write namelist name in upper case - f95 std. */ + for (i = 0 ;i < dtp->namelist_name_len ;i++ ) + { + c = toupper (dtp->namelist_name[i]); + write_character (dtp, &c, 1 ,1); + } + + if (dtp->u.p.ionml != NULL) + { + t1 = dtp->u.p.ionml; + while (t1 != NULL) + { + t2 = t1; + t1 = nml_write_obj (dtp, t2, dummy_offset, dummy, dummy_name); + } + } + + namelist_write_newline (dtp); + write_character (dtp, " /", 1, 2); + /* Restore the original delimiter. */ + dtp->u.p.current_unit->delim_status = tmp_delim; +} + +#undef NML_DIGITS diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/write_float.def b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/write_float.def new file mode 100644 index 0000000000..1f8d966a99 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/write_float.def @@ -0,0 +1,854 @@ +/* Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Andy Vaught + Write float code factoring to this file by Jerry DeLisle + F2003 I/O support contributed by Jerry DeLisle + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "config.h" + +typedef enum +{ S_NONE, S_MINUS, S_PLUS } +sign_t; + +/* Given a flag that indicates if a value is negative or not, return a + sign_t that gives the sign that we need to produce. */ + +static sign_t +calculate_sign (st_parameter_dt *dtp, int negative_flag) +{ + sign_t s = S_NONE; + + if (negative_flag) + s = S_MINUS; + else + switch (dtp->u.p.sign_status) + { + case SIGN_SP: /* Show sign. */ + s = S_PLUS; + break; + case SIGN_SS: /* Suppress sign. */ + s = S_NONE; + break; + case SIGN_S: /* Processor defined. */ + case SIGN_UNSPECIFIED: + s = options.optional_plus ? S_PLUS : S_NONE; + break; + } + + return s; +} + + +/* Output a real number according to its format which is FMT_G free. */ + +static void +output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size, + int sign_bit, bool zero_flag, int ndigits, int edigits) +{ + char *out; + char *digits; + int e; + char expchar; + format_token ft; + int w; + int d; + /* Number of digits before the decimal point. */ + int nbefore; + /* Number of zeros after the decimal point. */ + int nzero; + /* Number of digits after the decimal point. */ + int nafter; + /* Number of zeros after the decimal point, whatever the precision. */ + int nzero_real; + int leadzero; + int nblanks; + int i; + sign_t sign; + + ft = f->format; + w = f->u.real.w; + d = f->u.real.d; + + nzero_real = -1; + + /* We should always know the field width and precision. */ + if (d < 0) + internal_error (&dtp->common, "Unspecified precision"); + + sign = calculate_sign (dtp, sign_bit); + + /* The following code checks the given string has punctuation in the correct + places. Uncomment if needed for debugging. + if (d != 0 && ((buffer[2] != '.' && buffer[2] != ',') + || buffer[ndigits + 2] != 'e')) + internal_error (&dtp->common, "printf is broken"); */ + + /* Read the exponent back in. */ + e = atoi (&buffer[ndigits + 3]) + 1; + + /* Make sure zero comes out as 0.0e0. */ + if (zero_flag) + { + e = 0; + if (compile_options.sign_zero == 1) + sign = calculate_sign (dtp, sign_bit); + else + sign = calculate_sign (dtp, 0); + + /* Handle special cases. */ + if (w == 0) + w = d + 2; + + /* For this one we choose to not output a decimal point. + F95 10.5.1.2.1 */ + if (w == 1 && ft == FMT_F) + { + out = write_block (dtp, w); + if (out == NULL) + return; + *out = '0'; + return; + } + + } + + /* Normalize the fractional component. */ + buffer[2] = buffer[1]; + digits = &buffer[2]; + + /* Figure out where to place the decimal point. */ + switch (ft) + { + case FMT_F: + nbefore = e + dtp->u.p.scale_factor; + if (nbefore < 0) + { + nzero = -nbefore; + nzero_real = nzero; + if (nzero > d) + nzero = d; + nafter = d - nzero; + nbefore = 0; + } + else + { + nzero = 0; + nafter = d; + } + expchar = 0; + break; + + case FMT_E: + case FMT_D: + i = dtp->u.p.scale_factor; + if (d <= 0 && i == 0) + { + generate_error (&dtp->common, LIBERROR_FORMAT, "Precision not " + "greater than zero in format specifier 'E' or 'D'"); + return; + } + if (i <= -d || i >= d + 2) + { + generate_error (&dtp->common, LIBERROR_FORMAT, "Scale factor " + "out of range in format specifier 'E' or 'D'"); + return; + } + + if (!zero_flag) + e -= i; + if (i < 0) + { + nbefore = 0; + nzero = -i; + nafter = d + i; + } + else if (i > 0) + { + nbefore = i; + nzero = 0; + nafter = (d - i) + 1; + } + else /* i == 0 */ + { + nbefore = 0; + nzero = 0; + nafter = d; + } + + if (ft == FMT_E) + expchar = 'E'; + else + expchar = 'D'; + break; + + case FMT_EN: + /* The exponent must be a multiple of three, with 1-3 digits before + the decimal point. */ + if (!zero_flag) + e--; + if (e >= 0) + nbefore = e % 3; + else + { + nbefore = (-e) % 3; + if (nbefore != 0) + nbefore = 3 - nbefore; + } + e -= nbefore; + nbefore++; + nzero = 0; + nafter = d; + expchar = 'E'; + break; + + case FMT_ES: + if (!zero_flag) + e--; + nbefore = 1; + nzero = 0; + nafter = d; + expchar = 'E'; + break; + + default: + /* Should never happen. */ + internal_error (&dtp->common, "Unexpected format token"); + } + + /* Round the value. */ + if (nbefore + nafter == 0) + { + ndigits = 0; + if (nzero_real == d && digits[0] >= '5') + { + /* We rounded to zero but shouldn't have */ + nzero--; + nafter = 1; + digits[0] = '1'; + ndigits = 1; + } + } + else if (nbefore + nafter < ndigits) + { + ndigits = nbefore + nafter; + i = ndigits; + if (digits[i] >= '5') + { + /* Propagate the carry. */ + for (i--; i >= 0; i--) + { + if (digits[i] != '9') + { + digits[i]++; + break; + } + digits[i] = '0'; + } + + if (i < 0) + { + /* The carry overflowed. Fortunately we have some spare space + at the start of the buffer. We may discard some digits, but + this is ok because we already know they are zero. */ + digits--; + digits[0] = '1'; + if (ft == FMT_F) + { + if (nzero > 0) + { + nzero--; + nafter++; + } + else + nbefore++; + } + else if (ft == FMT_EN) + { + nbefore++; + if (nbefore == 4) + { + nbefore = 1; + e += 3; + } + } + else + e++; + } + } + } + + /* Calculate the format of the exponent field. */ + if (expchar) + { + edigits = 1; + for (i = abs (e); i >= 10; i /= 10) + edigits++; + + if (f->u.real.e < 0) + { + /* Width not specified. Must be no more than 3 digits. */ + if (e > 999 || e < -999) + edigits = -1; + else + { + edigits = 4; + if (e > 99 || e < -99) + expchar = ' '; + } + } + else + { + /* Exponent width specified, check it is wide enough. */ + if (edigits > f->u.real.e) + edigits = -1; + else + edigits = f->u.real.e + 2; + } + } + else + edigits = 0; + + /* Zero values always output as positive, even if the value was negative + before rounding. */ + for (i = 0; i < ndigits; i++) + { + if (digits[i] != '0') + break; + } + if (i == ndigits) + { + /* The output is zero, so set the sign according to the sign bit unless + -fno-sign-zero was specified. */ + if (compile_options.sign_zero == 1) + sign = calculate_sign (dtp, sign_bit); + else + sign = calculate_sign (dtp, 0); + } + + /* Pick a field size if none was specified. */ + if (w <= 0) + w = nbefore + nzero + nafter + (sign != S_NONE ? 2 : 1); + + /* Work out how much padding is needed. */ + nblanks = w - (nbefore + nzero + nafter + edigits + 1); + if (sign != S_NONE) + nblanks--; + + if (dtp->u.p.g0_no_blanks) + { + w -= nblanks; + nblanks = 0; + } + + /* Create the ouput buffer. */ + out = write_block (dtp, w); + if (out == NULL) + return; + + /* Check the value fits in the specified field width. */ + if (nblanks < 0 || edigits == -1) + { + star_fill (out, w); + return; + } + + /* See if we have space for a zero before the decimal point. */ + if (nbefore == 0 && nblanks > 0) + { + leadzero = 1; + nblanks--; + } + else + leadzero = 0; + + /* Pad to full field width. */ + + if ( ( nblanks > 0 ) && !dtp->u.p.no_leading_blank) + { + memset (out, ' ', nblanks); + out += nblanks; + } + + /* Output the initial sign (if any). */ + if (sign == S_PLUS) + *(out++) = '+'; + else if (sign == S_MINUS) + *(out++) = '-'; + + /* Output an optional leading zero. */ + if (leadzero) + *(out++) = '0'; + + /* Output the part before the decimal point, padding with zeros. */ + if (nbefore > 0) + { + if (nbefore > ndigits) + { + i = ndigits; + memcpy (out, digits, i); + ndigits = 0; + while (i < nbefore) + out[i++] = '0'; + } + else + { + i = nbefore; + memcpy (out, digits, i); + ndigits -= i; + } + + digits += i; + out += nbefore; + } + + /* Output the decimal point. */ + *(out++) = dtp->u.p.current_unit->decimal_status == DECIMAL_POINT ? '.' : ','; + + /* Output leading zeros after the decimal point. */ + if (nzero > 0) + { + for (i = 0; i < nzero; i++) + *(out++) = '0'; + } + + /* Output digits after the decimal point, padding with zeros. */ + if (nafter > 0) + { + if (nafter > ndigits) + i = ndigits; + else + i = nafter; + + memcpy (out, digits, i); + while (i < nafter) + out[i++] = '0'; + + digits += i; + ndigits -= i; + out += nafter; + } + + /* Output the exponent. */ + if (expchar) + { + if (expchar != ' ') + { + *(out++) = expchar; + edigits--; + } +#if HAVE_SNPRINTF + snprintf (buffer, size, "%+0*d", edigits, e); +#else + sprintf (buffer, "%+0*d", edigits, e); +#endif + memcpy (out, buffer, edigits); + } + + if (dtp->u.p.no_leading_blank) + { + out += edigits; + memset( out , ' ' , nblanks ); + dtp->u.p.no_leading_blank = 0; + } + +#undef STR +#undef STR1 +#undef MIN_FIELD_WIDTH +} + + +/* Write "Infinite" or "Nan" as appropriate for the given format. */ + +static void +write_infnan (st_parameter_dt *dtp, const fnode *f, int isnan_flag, int sign_bit) +{ + char * p, fin; + int nb = 0; + + if (f->format != FMT_B && f->format != FMT_O && f->format != FMT_Z) + { + nb = f->u.real.w; + + /* If the field width is zero, the processor must select a width + not zero. 4 is chosen to allow output of '-Inf' or '+Inf' */ + + if (nb == 0) nb = 4; + p = write_block (dtp, nb); + if (p == NULL) + return; + if (nb < 3) + { + memset (p, '*',nb); + return; + } + + memset(p, ' ', nb); + if (!isnan_flag) + { + if (sign_bit) + { + + /* If the sign is negative and the width is 3, there is + insufficient room to output '-Inf', so output asterisks */ + + if (nb == 3) + { + memset (p, '*',nb); + return; + } + + /* The negative sign is mandatory */ + + fin = '-'; + } + else + + /* The positive sign is optional, but we output it for + consistency */ + fin = '+'; + + if (nb > 8) + + /* We have room, so output 'Infinity' */ + memcpy(p + nb - 8, "Infinity", 8); + else + + /* For the case of width equals 8, there is not enough room + for the sign and 'Infinity' so we go with 'Inf' */ + memcpy(p + nb - 3, "Inf", 3); + + if (nb < 9 && nb > 3) + p[nb - 4] = fin; /* Put the sign in front of Inf */ + else if (nb > 8) + p[nb - 9] = fin; /* Put the sign in front of Infinity */ + } + else + memcpy(p + nb - 3, "NaN", 3); + return; + } + } + + +/* Returns the value of 10**d. */ + +#define CALCULATE_EXP(x) \ +inline static GFC_REAL_ ## x \ +calculate_exp_ ## x (int d)\ +{\ + int i;\ + GFC_REAL_ ## x r = 1.0;\ + for (i = 0; i< (d >= 0 ? d : -d); i++)\ + r *= 10;\ + r = (d >= 0) ? r : 1.0 / r;\ + return r;\ +} + +CALCULATE_EXP(4) + +CALCULATE_EXP(8) + +#ifdef HAVE_GFC_REAL_10 +CALCULATE_EXP(10) +#endif + +#ifdef HAVE_GFC_REAL_16 +CALCULATE_EXP(16) +#endif +#undef CALCULATE_EXP + +/* Generate corresponding I/O format for FMT_G and output. + The rules to translate FMT_G to FMT_E or FMT_F from DEC fortran + LRM (table 11-2, Chapter 11, "I/O Formatting", P11-25) is: + + Data Magnitude Equivalent Conversion + 0< m < 0.1-0.5*10**(-d-1) Ew.d[Ee] + m = 0 F(w-n).(d-1), n' ' + 0.1-0.5*10**(-d-1)<= m < 1-0.5*10**(-d) F(w-n).d, n' ' + 1-0.5*10**(-d)<= m < 10-0.5*10**(-d+1) F(w-n).(d-1), n' ' + 10-0.5*10**(-d+1)<= m < 100-0.5*10**(-d+2) F(w-n).(d-2), n' ' + ................ .......... + 10**(d-1)-0.5*10**(-1)<= m <10**d-0.5 F(w-n).0,n(' ') + m >= 10**d-0.5 Ew.d[Ee] + + notes: for Gw.d , n' ' means 4 blanks + for Gw.dEe, n' ' means e+2 blanks */ + +#define OUTPUT_FLOAT_FMT_G(x) \ +static void \ +output_float_FMT_G_ ## x (st_parameter_dt *dtp, const fnode *f, \ + GFC_REAL_ ## x m, char *buffer, size_t size, \ + int sign_bit, bool zero_flag, int ndigits, int edigits) \ +{ \ + int e = f->u.real.e;\ + int d = f->u.real.d;\ + int w = f->u.real.w;\ + fnode *newf;\ + GFC_REAL_ ## x exp_d;\ + int low, high, mid;\ + int ubound, lbound;\ + char *p;\ + int save_scale_factor, nb = 0;\ +\ + save_scale_factor = dtp->u.p.scale_factor;\ + newf = (fnode *) get_mem (sizeof (fnode));\ +\ + exp_d = calculate_exp_ ## x (d);\ + if ((m > 0.0 && m < 0.1 - 0.05 / exp_d) || (m >= exp_d - 0.5 ) ||\ + ((m == 0.0) && !(compile_options.allow_std & GFC_STD_F2003)))\ + { \ + newf->format = FMT_E;\ + newf->u.real.w = w;\ + newf->u.real.d = d;\ + newf->u.real.e = e;\ + nb = 0;\ + goto finish;\ + }\ +\ + mid = 0;\ + low = 0;\ + high = d + 1;\ + lbound = 0;\ + ubound = d + 1;\ +\ + while (low <= high)\ + { \ + GFC_REAL_ ## x temp;\ + mid = int(low + high) / 2;\ +\ + temp = (calculate_exp_ ## x (mid) - \ + 5 * calculate_exp_ ## x (mid - d - 1)) / 10;\ +\ + if (m < temp)\ + { \ + ubound = mid;\ + if (ubound == lbound + 1)\ + break;\ + high = mid - 1;\ + }\ + else if (m > temp)\ + { \ + lbound = mid;\ + if (ubound == lbound + 1)\ + { \ + mid ++;\ + break;\ + }\ + low = mid + 1;\ + }\ + else\ + {\ + mid++;\ + break;\ + }\ + }\ +\ + if (e < 0)\ + nb = 4;\ + else\ + nb = e + 2;\ +\ + newf->format = FMT_F;\ + newf->u.real.w = f->u.real.w - nb;\ +\ + if (m == 0.0)\ + newf->u.real.d = d - 1;\ + else\ + newf->u.real.d = - (mid - d - 1);\ +\ + dtp->u.p.scale_factor = 0;\ +\ + finish:\ + output_float (dtp, newf, buffer, size, sign_bit, zero_flag, ndigits, \ + edigits);\ + dtp->u.p.scale_factor = save_scale_factor;\ +\ + free_mem(newf);\ +\ + if (nb > 0 && !dtp->u.p.g0_no_blanks)\ + { \ + p = write_block (dtp, nb);\ + if (p == NULL)\ + return;\ + memset (p, ' ', nb);\ + }\ +}\ + +OUTPUT_FLOAT_FMT_G(4) + +OUTPUT_FLOAT_FMT_G(8) + +#ifdef HAVE_GFC_REAL_10 +OUTPUT_FLOAT_FMT_G(10) +#endif + +#ifdef HAVE_GFC_REAL_16 +OUTPUT_FLOAT_FMT_G(16) +#endif + +#undef OUTPUT_FLOAT_FMT_G + + +/* Define a macro to build code for write_float. */ + + /* Note: Before output_float is called, sprintf is used to print to buffer the + number in the format +D.DDDDe+ddd. For an N digit exponent, this gives us + (MIN_FIELD_WIDTH-5)-N digits after the decimal point, plus another one + before the decimal point. + + # The result will always contain a decimal point, even if no + digits follow it + + - The converted value is to be left adjusted on the field boundary + + + A sign (+ or -) always be placed before a number + + MIN_FIELD_WIDTH minimum field width + + * (ndigits-1) is used as the precision + + e format: [-]d.ddde±dd where there is one digit before the + decimal-point character and the number of digits after it is + equal to the precision. The exponent always contains at least two + digits; if the value is zero, the exponent is 00. */ + +#ifdef HAVE_SNPRINTF + +#define DTOA \ +snprintf (buffer, size, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \ + "e", ndigits - 1, tmp); + +#define DTOAL \ +snprintf (buffer, size, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \ + "Le", ndigits - 1, tmp); + +#else + +#define DTOA \ +sprintf (buffer, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \ + "e", ndigits - 1, tmp); + +#define DTOAL \ +sprintf (buffer, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \ + "Le", ndigits - 1, tmp); + +#endif + +#define WRITE_FLOAT(x,y)\ +{\ + GFC_REAL_ ## x tmp;\ + tmp = * (GFC_REAL_ ## x *)source;\ + sign_bit = signbit (tmp);\ + if (!isfinite (tmp))\ + { \ + write_infnan (dtp, f, isnan (tmp), sign_bit);\ + return;\ + }\ + tmp = sign_bit ? -tmp : tmp;\ + if (f->u.real.d == 0 && f->format == FMT_F\ + && dtp->u.p.scale_factor == 0)\ + {\ + if (tmp < 0.5)\ + tmp = 0.0;\ + else if (tmp < 1.0)\ + tmp = 1.0;\ + }\ + zero_flag = (tmp == 0.0);\ +\ + DTOA ## y\ +\ + if (f->format != FMT_G)\ + output_float (dtp, f, buffer, size, sign_bit, zero_flag, ndigits, \ + edigits);\ + else \ + output_float_FMT_G_ ## x (dtp, f, tmp, buffer, size, sign_bit, \ + zero_flag, ndigits, edigits);\ +}\ + +/* Output a real number according to its format. */ + +static void +write_float (st_parameter_dt *dtp, const fnode *f, const char *source, int len) +{ + +#if defined(HAVE_GFC_REAL_16) && __LDBL_DIG__ > 18 +# define MIN_FIELD_WIDTH 46 +#else +# define MIN_FIELD_WIDTH 31 +#endif +#define STR(x) STR1(x) +#define STR1(x) #x + + /* This must be large enough to accurately hold any value. */ + char buffer[MIN_FIELD_WIDTH+1]; + int sign_bit, ndigits, edigits; + bool zero_flag; + size_t size; + + size = MIN_FIELD_WIDTH+1; + + /* printf pads blanks for us on the exponent so we just need it big enough + to handle the largest number of exponent digits expected. */ + edigits=4; + + if (f->format == FMT_F || f->format == FMT_EN || f->format == FMT_G + || ((f->format == FMT_D || f->format == FMT_E) + && dtp->u.p.scale_factor != 0)) + { + /* Always convert at full precision to avoid double rounding. */ + ndigits = MIN_FIELD_WIDTH - 4 - edigits; + } + else + { + /* The number of digits is known, so let printf do the rounding. */ + if (f->format == FMT_ES) + ndigits = f->u.real.d + 1; + else + ndigits = f->u.real.d; + if (ndigits > MIN_FIELD_WIDTH - 4 - edigits) + ndigits = MIN_FIELD_WIDTH - 4 - edigits; + } + + switch (len) + { + case 4: + WRITE_FLOAT(4,) + break; + + case 8: + WRITE_FLOAT(8,) + break; + +#ifdef HAVE_GFC_REAL_10 + case 10: + WRITE_FLOAT(10,L) + break; +#endif +#ifdef HAVE_GFC_REAL_16 + case 16: + WRITE_FLOAT(16,L) + break; +#endif + default: + internal_error (NULL, "bad real kind"); + } +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/libgfortran.h b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/libgfortran.h new file mode 100644 index 0000000000..6643d3c797 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/libgfortran.h @@ -0,0 +1,1273 @@ +/* Common declarations for all of libgfortran. + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Contributed by Paul Brook , and + Andy Vaught + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#ifndef LIBGFOR_H +#define LIBGFOR_H + +/* config.h MUST be first because it can affect system headers. */ +#include "config.h" + +#include +#include +#include +#include +#include + +#if HAVE_COMPLEX_H +# include +#else +#define complex __complex__ +#endif + +#include "../gcc/fortran/libgfortran.h" + +#include "c99_protos.h" + +#if HAVE_IEEEFP_H +#include +#endif + +#include "gstdint.h" + +#if HAVE_SYS_TYPES_H +#include +#endif +typedef off_t gfc_offset; + +#ifndef NULL +#define NULL (void *) 0 +#endif + +#ifndef __GNUC__ +#define __attribute__(x) +#define likely(x) (x) +#define unlikely(x) (x) +#else +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) +#endif + + +/* We use intptr_t and uintptr_t, which may not be always defined in + system headers. */ + +#ifndef HAVE_INTPTR_T +#if __SIZEOF_POINTER__ == __SIZEOF_LONG__ +#define intptr_t long +#elif __SIZEOF_POINTER__ == __SIZEOF_LONG_LONG__ +#define intptr_t long long +#elif __SIZEOF_POINTER__ == __SIZEOF_INT__ +#define intptr_t int +#elif __SIZEOF_POINTER__ == __SIZEOF_SHORT__ +#define intptr_t short +#else +#error "Pointer type with unexpected size" +#endif +#endif + +#ifndef HAVE_UINTPTR_T +#if __SIZEOF_POINTER__ == __SIZEOF_LONG__ +#define uintptr_t unsigned long +#elif __SIZEOF_POINTER__ == __SIZEOF_LONG_LONG__ +#define uintptr_t unsigned long long +#elif __SIZEOF_POINTER__ == __SIZEOF_INT__ +#define uintptr_t unsigned int +#elif __SIZEOF_POINTER__ == __SIZEOF_SHORT__ +#define uintptr_t unsigned short +#else +#error "Pointer type with unexpected size" +#endif +#endif + + +/* On mingw, work around the buggy Windows snprintf() by using the one + mingw provides, __mingw_snprintf(). We also provide a prototype for + __mingw_snprintf(), because the mingw headers currently don't have one. */ +#if HAVE_MINGW_SNPRINTF +extern int __mingw_snprintf (char *, size_t, const char *, ...) + __attribute__ ((format (gnu_printf, 3, 4))); +#undef snprintf +#define snprintf __mingw_snprintf +#endif + + +/* For a library, a standard prefix is a requirement in order to partition + the namespace. IPREFIX is for symbols intended to be internal to the + library. */ +#define PREFIX(x) _gfortran_ ## x +#define IPREFIX(x) _gfortrani_ ## x + +/* Magic to rename a symbol at the compiler level. You continue to refer + to the symbol as OLD in the source, but it'll be named NEW in the asm. */ +#define sym_rename(old, new) sym_rename1(old, __USER_LABEL_PREFIX__, new) +#define sym_rename1(old, ulp, new) sym_rename2(old, ulp, new) +#define sym_rename2(old, ulp, new) extern __typeof(old) old __asm__(#ulp #new) + +/* There are several classifications of routines: + + (1) Symbols used only within the library, + (2) Symbols to be exported from the library, + (3) Symbols to be exported from the library, but + also used inside the library. + + By telling the compiler about these different classifications we can + tightly control the interface seen by the user, and get better code + from the compiler at the same time. + + One of the following should be used immediately after the declaration + of each symbol: + + internal_proto Marks a symbol used only within the library, + and adds IPREFIX to the assembly-level symbol + name. The later is important for maintaining + the namespace partition for the static library. + + export_proto Marks a symbol to be exported, and adds PREFIX + to the assembly-level symbol name. + + export_proto_np Marks a symbol to be exported without adding PREFIX. + + iexport_proto Marks a function to be exported, but with the + understanding that it can be used inside as well. + + iexport_data_proto Similarly, marks a data symbol to be exported. + Unfortunately, some systems can't play the hidden + symbol renaming trick on data symbols, thanks to + the horribleness of COPY relocations. + + If iexport_proto or iexport_data_proto is used, you must also use + iexport or iexport_data after the *definition* of the symbol. */ + +#if defined(HAVE_ATTRIBUTE_VISIBILITY) +# define internal_proto(x) \ + sym_rename(x, IPREFIX (x)) __attribute__((__visibility__("hidden"))) +#else +# define internal_proto(x) sym_rename(x, IPREFIX(x)) +#endif + +#if defined(HAVE_ATTRIBUTE_VISIBILITY) && defined(HAVE_ATTRIBUTE_ALIAS) +# define export_proto(x) sym_rename(x, PREFIX(x)) +# define export_proto_np(x) extern char swallow_semicolon +# define iexport_proto(x) internal_proto(x) +# define iexport(x) iexport1(x, IPREFIX(x)) +# define iexport1(x,y) iexport2(x,y) +# define iexport2(x,y) \ + extern __typeof(x) PREFIX(x) __attribute__((__alias__(#y))) +/* ??? We're not currently building a dll, and it's wrong to add dllexport + to objects going into a static library archive. */ +#elif 0 && defined(HAVE_ATTRIBUTE_DLLEXPORT) +# define export_proto_np(x) extern __typeof(x) x __attribute__((dllexport)) +# define export_proto(x) sym_rename(x, PREFIX(x)) __attribute__((dllexport)) +# define iexport_proto(x) export_proto(x) +# define iexport(x) extern char swallow_semicolon +#else +# define export_proto(x) sym_rename(x, PREFIX(x)) +# define export_proto_np(x) extern char swallow_semicolon +# define iexport_proto(x) export_proto(x) +# define iexport(x) extern char swallow_semicolon +#endif + +/* TODO: detect the case when we *can* hide the symbol. */ +#define iexport_data_proto(x) export_proto(x) +#define iexport_data(x) extern char swallow_semicolon + +/* The only reliable way to get the offset of a field in a struct + in a system independent way is via this macro. */ +#ifndef offsetof +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER) +#endif + +/* The isfinite macro is only available with C99, but some non-C99 + systems still provide fpclassify, and there is a `finite' function + in BSD. + + Also, isfinite is broken on Cygwin. + + When isfinite is not available, try to use one of the + alternatives, or bail out. */ + +#if defined(HAVE_BROKEN_ISFINITE) || defined(__CYGWIN__) +#undef isfinite +#endif + +#if defined(HAVE_BROKEN_ISNAN) +#undef isnan +#endif + +#if defined(HAVE_BROKEN_FPCLASSIFY) +#undef fpclassify +#endif + +#if !defined(isfinite) +#if !defined(fpclassify) +#define isfinite(x) ((x) - (x) == 0) +#else +#define isfinite(x) (fpclassify(x) != FP_NAN && fpclassify(x) != FP_INFINITE) +#endif /* !defined(fpclassify) */ +#endif /* !defined(isfinite) */ + +#if !defined(isnan) +#if !defined(fpclassify) +#define isnan(x) ((x) != (x)) +#else +#define isnan(x) (fpclassify(x) == FP_NAN) +#endif /* !defined(fpclassify) */ +#endif /* !defined(isfinite) */ + +/* TODO: find the C99 version of these an move into above ifdef. */ +#define REALPART(z) (__real__(z)) +#define IMAGPART(z) (__imag__(z)) +#define COMPLEX_ASSIGN(z_, r_, i_) {__real__(z_) = (r_); __imag__(z_) = (i_);} + +#include "kinds.h" + +/* Define the type used for the current record number for large file I/O. + The size must be consistent with the size defined on the compiler side. */ +#ifdef HAVE_GFC_INTEGER_8 +typedef GFC_INTEGER_8 GFC_IO_INT; +#else +#ifdef HAVE_GFC_INTEGER_4 +typedef GFC_INTEGER_4 GFC_IO_INT; +#else +#error "GFC_INTEGER_4 should be available for the library to compile". +#endif +#endif + +/* The following two definitions must be consistent with the types used + by the compiler. */ +/* The type used of array indices, amongst other things. */ +typedef ssize_t index_type; + +/* The type used for the lengths of character variables. */ +typedef GFC_INTEGER_4 gfc_charlen_type; + +/* Definitions of CHARACTER data types: + - CHARACTER(KIND=1) corresponds to the C char type, + - CHARACTER(KIND=4) corresponds to an unsigned 32-bit integer. */ +typedef GFC_UINTEGER_4 gfc_char4_t; + +/* Byte size of character kinds. For the kinds currently supported, it's + simply equal to the kind parameter itself. */ +#define GFC_SIZE_OF_CHAR_KIND(kind) (kind) + +/* This will be 0 on little-endian machines and one on big-endian machines. */ +extern int big_endian; +internal_proto(big_endian); + +#define GFOR_POINTER_TO_L1(p, kind) \ + (big_endian * (kind - 1) + (GFC_LOGICAL_1 *)(p)) + +#define GFC_INTEGER_1_HUGE \ + (GFC_INTEGER_1)((((GFC_UINTEGER_1)1) << 7) - 1) +#define GFC_INTEGER_2_HUGE \ + (GFC_INTEGER_2)((((GFC_UINTEGER_2)1) << 15) - 1) +#define GFC_INTEGER_4_HUGE \ + (GFC_INTEGER_4)((((GFC_UINTEGER_4)1) << 31) - 1) +#define GFC_INTEGER_8_HUGE \ + (GFC_INTEGER_8)((((GFC_UINTEGER_8)1) << 63) - 1) +#ifdef HAVE_GFC_INTEGER_16 +#define GFC_INTEGER_16_HUGE \ + (GFC_INTEGER_16)((((GFC_UINTEGER_16)1) << 127) - 1) +#endif + + +typedef struct descriptor_dimension +{ + index_type stride; + index_type lbound; + index_type ubound; +} +descriptor_dimension; + +#define GFC_ARRAY_DESCRIPTOR(r, type) \ +struct {\ + type *data;\ + size_t offset;\ + index_type dtype;\ + descriptor_dimension dim[r];\ +} + +/* Commonly used array descriptor types. */ +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, void) gfc_array_void; +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, char) gfc_array_char; +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_1) gfc_array_i1; +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_2) gfc_array_i2; +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_4) gfc_array_i4; +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_8) gfc_array_i8; +#ifdef HAVE_GFC_INTEGER_16 +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_INTEGER_16) gfc_array_i16; +#endif +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_4) gfc_array_r4; +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_8) gfc_array_r8; +#ifdef HAVE_GFC_REAL_10 +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_10) gfc_array_r10; +#endif +#ifdef HAVE_GFC_REAL_16 +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_REAL_16) gfc_array_r16; +#endif +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_4) gfc_array_c4; +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_8) gfc_array_c8; +#ifdef HAVE_GFC_COMPLEX_10 +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_10) gfc_array_c10; +#endif +#ifdef HAVE_GFC_COMPLEX_16 +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_COMPLEX_16) gfc_array_c16; +#endif +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_1) gfc_array_l1; +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_2) gfc_array_l2; +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_4) gfc_array_l4; +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_8) gfc_array_l8; +#ifdef HAVE_GFC_LOGICAL_16 +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, GFC_LOGICAL_16) gfc_array_l16; +#endif + + +#define GFC_DESCRIPTOR_RANK(desc) ((desc)->dtype & GFC_DTYPE_RANK_MASK) +#define GFC_DESCRIPTOR_TYPE(desc) (((desc)->dtype & GFC_DTYPE_TYPE_MASK) \ + >> GFC_DTYPE_TYPE_SHIFT) +#define GFC_DESCRIPTOR_SIZE(desc) ((desc)->dtype >> GFC_DTYPE_SIZE_SHIFT) +#define GFC_DESCRIPTOR_DATA(desc) ((desc)->data) +#define GFC_DESCRIPTOR_DTYPE(desc) ((desc)->dtype) + +/* Macros to get both the size and the type with a single masking operation */ + +#define GFC_DTYPE_SIZE_MASK \ + ((~((index_type) 0) >> GFC_DTYPE_SIZE_SHIFT) << GFC_DTYPE_SIZE_SHIFT) +#define GFC_DTYPE_TYPE_SIZE_MASK (GFC_DTYPE_SIZE_MASK | GFC_DTYPE_TYPE_MASK) + +#define GFC_DTYPE_TYPE_SIZE(desc) ((desc)->dtype & GFC_DTYPE_TYPE_SIZE_MASK) + +#define GFC_DTYPE_INTEGER_1 ((GFC_DTYPE_INTEGER << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_INTEGER_1) << GFC_DTYPE_SIZE_SHIFT)) +#define GFC_DTYPE_INTEGER_2 ((GFC_DTYPE_INTEGER << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_INTEGER_2) << GFC_DTYPE_SIZE_SHIFT)) +#define GFC_DTYPE_INTEGER_4 ((GFC_DTYPE_INTEGER << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_INTEGER_4) << GFC_DTYPE_SIZE_SHIFT)) +#define GFC_DTYPE_INTEGER_8 ((GFC_DTYPE_INTEGER << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_INTEGER_8) << GFC_DTYPE_SIZE_SHIFT)) +#ifdef HAVE_GFC_INTEGER_16 +#define GFC_DTYPE_INTEGER_16 ((GFC_DTYPE_INTEGER << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_INTEGER_16) << GFC_DTYPE_SIZE_SHIFT)) +#endif + +#define GFC_DTYPE_LOGICAL_1 ((GFC_DTYPE_LOGICAL << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_LOGICAL_1) << GFC_DTYPE_SIZE_SHIFT)) +#define GFC_DTYPE_LOGICAL_2 ((GFC_DTYPE_LOGICAL << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_LOGICAL_2) << GFC_DTYPE_SIZE_SHIFT)) +#define GFC_DTYPE_LOGICAL_4 ((GFC_DTYPE_LOGICAL << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_LOGICAL_4) << GFC_DTYPE_SIZE_SHIFT)) +#define GFC_DTYPE_LOGICAL_8 ((GFC_DTYPE_LOGICAL << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_LOGICAL_8) << GFC_DTYPE_SIZE_SHIFT)) +#ifdef HAVE_GFC_LOGICAL_16 +#define GFC_DTYPE_LOGICAL_16 ((GFC_DTYPE_LOGICAL << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_LOGICAL_16) << GFC_DTYPE_SIZE_SHIFT)) +#endif + +#define GFC_DTYPE_REAL_4 ((GFC_DTYPE_REAL << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_REAL_4) << GFC_DTYPE_SIZE_SHIFT)) +#define GFC_DTYPE_REAL_8 ((GFC_DTYPE_REAL << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_REAL_8) << GFC_DTYPE_SIZE_SHIFT)) +#ifdef HAVE_GFC_REAL_10 +#define GFC_DTYPE_REAL_10 ((GFC_DTYPE_REAL << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_REAL_10) << GFC_DTYPE_SIZE_SHIFT)) +#endif +#ifdef HAVE_GFC_REAL_16 +#define GFC_DTYPE_REAL_16 ((GFC_DTYPE_REAL << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_REAL_16) << GFC_DTYPE_SIZE_SHIFT)) +#endif + +#define GFC_DTYPE_COMPLEX_4 ((GFC_DTYPE_COMPLEX << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_COMPLEX_4) << GFC_DTYPE_SIZE_SHIFT)) +#define GFC_DTYPE_COMPLEX_8 ((GFC_DTYPE_COMPLEX << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_COMPLEX_8) << GFC_DTYPE_SIZE_SHIFT)) +#ifdef HAVE_GFC_COMPLEX_10 +#define GFC_DTYPE_COMPLEX_10 ((GFC_DTYPE_COMPLEX << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_COMPLEX_10) << GFC_DTYPE_SIZE_SHIFT)) +#endif +#ifdef HAVE_GFC_COMPLEX_16 +#define GFC_DTYPE_COMPLEX_16 ((GFC_DTYPE_COMPLEX << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_COMPLEX_16) << GFC_DTYPE_SIZE_SHIFT)) +#endif + +#define GFC_DTYPE_DERIVED_1 ((GFC_DTYPE_DERIVED << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_INTEGER_1) << GFC_DTYPE_SIZE_SHIFT)) +#define GFC_DTYPE_DERIVED_2 ((GFC_DTYPE_DERIVED << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_INTEGER_2) << GFC_DTYPE_SIZE_SHIFT)) +#define GFC_DTYPE_DERIVED_4 ((GFC_DTYPE_DERIVED << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_INTEGER_4) << GFC_DTYPE_SIZE_SHIFT)) +#define GFC_DTYPE_DERIVED_8 ((GFC_DTYPE_DERIVED << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_INTEGER_8) << GFC_DTYPE_SIZE_SHIFT)) +#ifdef HAVE_GFC_INTEGER_16 +#define GFC_DTYPE_DERIVED_16 ((GFC_DTYPE_DERIVED << GFC_DTYPE_TYPE_SHIFT) \ + | (sizeof(GFC_INTEGER_16) << GFC_DTYPE_SIZE_SHIFT)) +#endif + +/* Macros to determine the alignment of pointers. */ + +#define GFC_UNALIGNED_2(x) (((uintptr_t)(x)) & \ + (__alignof__(GFC_INTEGER_2) - 1)) +#define GFC_UNALIGNED_4(x) (((uintptr_t)(x)) & \ + (__alignof__(GFC_INTEGER_4) - 1)) +#define GFC_UNALIGNED_8(x) (((uintptr_t)(x)) & \ + (__alignof__(GFC_INTEGER_8) - 1)) +#ifdef HAVE_GFC_INTEGER_16 +#define GFC_UNALIGNED_16(x) (((uintptr_t)(x)) & \ + (__alignof__(GFC_INTEGER_16) - 1)) +#endif + +#define GFC_UNALIGNED_C4(x) (((uintptr_t)(x)) & \ + (__alignof__(GFC_COMPLEX_4) - 1)) + +#define GFC_UNALIGNED_C8(x) (((uintptr_t)(x)) & \ + (__alignof__(GFC_COMPLEX_8) - 1)) + +/* Runtime library include. */ +#define stringize(x) expand_macro(x) +#define expand_macro(x) # x + +/* Runtime options structure. */ + +typedef struct +{ + int stdin_unit, stdout_unit, stderr_unit, optional_plus; + int locus; + + int separator_len; + const char *separator; + + int use_stderr, all_unbuffered, unbuffered_preconnected, default_recl; + int fpe, dump_core, backtrace; +} +options_t; + +extern options_t options; +internal_proto(options); + +extern void handler (int); +internal_proto(handler); + + +/* Compile-time options that will influence the library. */ + +typedef struct +{ + int warn_std; + int allow_std; + int pedantic; + int convert; + int dump_core; + int backtrace; + int sign_zero; + size_t record_marker; + int max_subrecord_length; + int bounds_check; + int range_check; +} +compile_options_t; + +extern compile_options_t compile_options; +internal_proto(compile_options); + +extern void init_compile_options (void); +internal_proto(init_compile_options); + +#define GFC_MAX_SUBRECORD_LENGTH 2147483639 /* 2**31 - 9 */ + +/* Structure for statement options. */ + +typedef struct +{ + const char *name; + int value; +} +st_option; + + +/* This is returned by notification_std to know if, given the flags + that were given (-std=, -pedantic) we should issue an error, a warning + or nothing. */ +typedef enum +{ SILENT, WARNING, ERROR } +notification; + +/* This is returned by notify_std and several io functions. */ +typedef enum +{ SUCCESS = 1, FAILURE } +try; + +/* The filename and line number don't go inside the globals structure. + They are set by the rest of the program and must be linked to. */ + +/* Location of the current library call (optional). */ +extern unsigned line; +iexport_data_proto(line); + +extern char *filename; +iexport_data_proto(filename); + +/* Avoid conflicting prototypes of alloca() in system headers by using + GCC's builtin alloca(). */ +#define gfc_alloca(x) __builtin_alloca(x) + + +/* Directory for creating temporary files. Only used when none of the + following environment variables exist: GFORTRAN_TMPDIR, TMP and TEMP. */ +#define DEFAULT_TEMPDIR "/tmp" + +/* The default value of record length for preconnected units is defined + here. This value can be overriden by an environment variable. + Default value is 1 Gb. */ +#define DEFAULT_RECL 1073741824 + + +#define CHARACTER2(name) \ + gfc_charlen_type name ## _len; \ + char * name + +typedef struct st_parameter_common +{ + GFC_INTEGER_4 flags; + GFC_INTEGER_4 unit; + const char *filename; + GFC_INTEGER_4 line; + CHARACTER2 (iomsg); + GFC_INTEGER_4 *iostat; +} +st_parameter_common; + +#undef CHARACTER2 + +#define IOPARM_LIBRETURN_MASK (3 << 0) +#define IOPARM_LIBRETURN_OK (0 << 0) +#define IOPARM_LIBRETURN_ERROR (1 << 0) +#define IOPARM_LIBRETURN_END (2 << 0) +#define IOPARM_LIBRETURN_EOR (3 << 0) +#define IOPARM_ERR (1 << 2) +#define IOPARM_END (1 << 3) +#define IOPARM_EOR (1 << 4) +#define IOPARM_HAS_IOSTAT (1 << 5) +#define IOPARM_HAS_IOMSG (1 << 6) + +#define IOPARM_COMMON_MASK ((1 << 7) - 1) + +#define IOPARM_OPEN_HAS_RECL_IN (1 << 7) +#define IOPARM_OPEN_HAS_FILE (1 << 8) +#define IOPARM_OPEN_HAS_STATUS (1 << 9) +#define IOPARM_OPEN_HAS_ACCESS (1 << 10) +#define IOPARM_OPEN_HAS_FORM (1 << 11) +#define IOPARM_OPEN_HAS_BLANK (1 << 12) +#define IOPARM_OPEN_HAS_POSITION (1 << 13) +#define IOPARM_OPEN_HAS_ACTION (1 << 14) +#define IOPARM_OPEN_HAS_DELIM (1 << 15) +#define IOPARM_OPEN_HAS_PAD (1 << 16) +#define IOPARM_OPEN_HAS_CONVERT (1 << 17) +#define IOPARM_OPEN_HAS_DECIMAL (1 << 18) +#define IOPARM_OPEN_HAS_ENCODING (1 << 19) +#define IOPARM_OPEN_HAS_ROUND (1 << 20) +#define IOPARM_OPEN_HAS_SIGN (1 << 21) +#define IOPARM_OPEN_HAS_ASYNCHRONOUS (1 << 22) + +/* library start function and end macro. These can be expanded if needed + in the future. cmp is st_parameter_common *cmp */ + +extern void library_start (st_parameter_common *); +internal_proto(library_start); + +#define library_end() + +/* main.c */ + +extern void stupid_function_name_for_static_linking (void); +internal_proto(stupid_function_name_for_static_linking); + +extern void set_args (int, char **); +export_proto(set_args); + +extern void get_args (int *, char ***); +internal_proto(get_args); + +extern void store_exe_path (const char *); +export_proto(store_exe_path); + +extern char * full_exe_path (void); +internal_proto(full_exe_path); + +/* backtrace.c */ + +extern void show_backtrace (void); +internal_proto(show_backtrace); + +/* error.c */ + +#define GFC_ITOA_BUF_SIZE (sizeof (GFC_INTEGER_LARGEST) * 3 + 2) +#define GFC_XTOA_BUF_SIZE (sizeof (GFC_UINTEGER_LARGEST) * 2 + 1) +#define GFC_OTOA_BUF_SIZE (sizeof (GFC_INTEGER_LARGEST) * 3 + 1) +#define GFC_BTOA_BUF_SIZE (sizeof (GFC_INTEGER_LARGEST) * 8 + 1) + +extern void sys_exit (int) __attribute__ ((noreturn)); +internal_proto(sys_exit); + +extern const char *gfc_itoa (GFC_INTEGER_LARGEST, char *, size_t); +internal_proto(gfc_itoa); + +extern const char *xtoa (GFC_UINTEGER_LARGEST, char *, size_t); +internal_proto(xtoa); + +extern void os_error (const char *) __attribute__ ((noreturn)); +iexport_proto(os_error); + +extern void show_locus (st_parameter_common *); +internal_proto(show_locus); + +extern void runtime_error (const char *, ...) + __attribute__ ((noreturn, format (printf, 1, 2))); +iexport_proto(runtime_error); + +extern void runtime_error_at (const char *, const char *, ...) + __attribute__ ((noreturn, format (printf, 2, 3))); +iexport_proto(runtime_error_at); + +extern void runtime_warning_at (const char *, const char *, ...) + __attribute__ ((format (printf, 2, 3))); +iexport_proto(runtime_warning_at); + +extern void internal_error (st_parameter_common *, const char *) + __attribute__ ((noreturn)); +internal_proto(internal_error); + +extern const char *get_oserror (void); +internal_proto(get_oserror); + +extern const char *translate_error (int); +internal_proto(translate_error); + +extern void generate_error (st_parameter_common *, int, const char *); +iexport_proto(generate_error); + +extern try notify_std (st_parameter_common *, int, const char *); +internal_proto(notify_std); + +extern notification notification_std(int); +internal_proto(notification_std); + +/* fpu.c */ + +extern void set_fpu (void); +internal_proto(set_fpu); + +/* memory.c */ + +extern void *get_mem (size_t) __attribute__ ((malloc)); +internal_proto(get_mem); + +extern void free_mem (void *); +internal_proto(free_mem); + +extern void *internal_malloc_size (size_t) __attribute__ ((malloc)); +internal_proto(internal_malloc_size); + +/* environ.c */ + +extern int check_buffered (int); +internal_proto(check_buffered); + +extern void init_variables (void); +internal_proto(init_variables); + +extern void show_variables (void); +internal_proto(show_variables); + +unit_convert get_unformatted_convert (int); +internal_proto(get_unformatted_convert); + +/* string.c */ + +extern int find_option (st_parameter_common *, const char *, gfc_charlen_type, + const st_option *, const char *); +internal_proto(find_option); + +extern gfc_charlen_type fstrlen (const char *, gfc_charlen_type); +internal_proto(fstrlen); + +extern gfc_charlen_type fstrcpy (char *, gfc_charlen_type, const char *, gfc_charlen_type); +internal_proto(fstrcpy); + +extern gfc_charlen_type cf_strcpy (char *, gfc_charlen_type, const char *); +internal_proto(cf_strcpy); + +/* io/intrinsics.c */ + +extern void flush_all_units (void); +internal_proto(flush_all_units); + +/* io.c */ + +extern void init_units (void); +internal_proto(init_units); + +extern void close_units (void); +internal_proto(close_units); + +extern int unit_to_fd (int); +internal_proto(unit_to_fd); + +extern int st_printf (const char *, ...) + __attribute__ ((format (printf, 1, 2))); +internal_proto(st_printf); + +extern int st_vprintf (const char *, va_list); +internal_proto(st_vprintf); + +extern char * filename_from_unit (int); +internal_proto(filename_from_unit); + +/* stop.c */ + +extern void stop_numeric (GFC_INTEGER_4) __attribute__ ((noreturn)); +iexport_proto(stop_numeric); + +/* reshape_packed.c */ + +extern void reshape_packed (char *, index_type, const char *, index_type, + const char *, index_type); +internal_proto(reshape_packed); + +/* Repacking functions. These are called internally by internal_pack + and internal_unpack. */ + +GFC_INTEGER_1 *internal_pack_1 (gfc_array_i1 *); +internal_proto(internal_pack_1); + +GFC_INTEGER_2 *internal_pack_2 (gfc_array_i2 *); +internal_proto(internal_pack_2); + +GFC_INTEGER_4 *internal_pack_4 (gfc_array_i4 *); +internal_proto(internal_pack_4); + +GFC_INTEGER_8 *internal_pack_8 (gfc_array_i8 *); +internal_proto(internal_pack_8); + +#if defined HAVE_GFC_INTEGER_16 +GFC_INTEGER_16 *internal_pack_16 (gfc_array_i16 *); +internal_proto(internal_pack_16); +#endif + +GFC_REAL_4 *internal_pack_r4 (gfc_array_r4 *); +internal_proto(internal_pack_r4); + +GFC_REAL_8 *internal_pack_r8 (gfc_array_r8 *); +internal_proto(internal_pack_r8); + +#if defined HAVE_GFC_REAL_10 +GFC_REAL_10 *internal_pack_r10 (gfc_array_r10 *); +internal_proto(internal_pack_r10); +#endif + +#if defined HAVE_GFC_REAL_16 +GFC_REAL_16 *internal_pack_r16 (gfc_array_r16 *); +internal_proto(internal_pack_r16); +#endif + +GFC_COMPLEX_4 *internal_pack_c4 (gfc_array_c4 *); +internal_proto(internal_pack_c4); + +GFC_COMPLEX_8 *internal_pack_c8 (gfc_array_c8 *); +internal_proto(internal_pack_c8); + +#if defined HAVE_GFC_COMPLEX_10 +GFC_COMPLEX_10 *internal_pack_c10 (gfc_array_c10 *); +internal_proto(internal_pack_c10); +#endif + +#if defined HAVE_GFC_COMPLEX_16 +GFC_COMPLEX_16 *internal_pack_c16 (gfc_array_c16 *); +internal_proto(internal_pack_c16); +#endif + +extern void internal_unpack_1 (gfc_array_i1 *, const GFC_INTEGER_1 *); +internal_proto(internal_unpack_1); + +extern void internal_unpack_2 (gfc_array_i2 *, const GFC_INTEGER_2 *); +internal_proto(internal_unpack_2); + +extern void internal_unpack_4 (gfc_array_i4 *, const GFC_INTEGER_4 *); +internal_proto(internal_unpack_4); + +extern void internal_unpack_8 (gfc_array_i8 *, const GFC_INTEGER_8 *); +internal_proto(internal_unpack_8); + +#if defined HAVE_GFC_INTEGER_16 +extern void internal_unpack_16 (gfc_array_i16 *, const GFC_INTEGER_16 *); +internal_proto(internal_unpack_16); +#endif + +extern void internal_unpack_r4 (gfc_array_r4 *, const GFC_REAL_4 *); +internal_proto(internal_unpack_r4); + +extern void internal_unpack_r8 (gfc_array_r8 *, const GFC_REAL_8 *); +internal_proto(internal_unpack_r8); + +#if defined HAVE_GFC_REAL_10 +extern void internal_unpack_r10 (gfc_array_r10 *, const GFC_REAL_10 *); +internal_proto(internal_unpack_r10); +#endif + +#if defined HAVE_GFC_REAL_16 +extern void internal_unpack_r16 (gfc_array_r16 *, const GFC_REAL_16 *); +internal_proto(internal_unpack_r16); +#endif + +extern void internal_unpack_c4 (gfc_array_c4 *, const GFC_COMPLEX_4 *); +internal_proto(internal_unpack_c4); + +extern void internal_unpack_c8 (gfc_array_c8 *, const GFC_COMPLEX_8 *); +internal_proto(internal_unpack_c8); + +#if defined HAVE_GFC_COMPLEX_10 +extern void internal_unpack_c10 (gfc_array_c10 *, const GFC_COMPLEX_10 *); +internal_proto(internal_unpack_c10); +#endif + +#if defined HAVE_GFC_COMPLEX_16 +extern void internal_unpack_c16 (gfc_array_c16 *, const GFC_COMPLEX_16 *); +internal_proto(internal_unpack_c16); +#endif + +/* Internal auxiliary functions for the pack intrinsic. */ + +extern void pack_i1 (gfc_array_i1 *, const gfc_array_i1 *, + const gfc_array_l1 *, const gfc_array_i1 *); +internal_proto(pack_i1); + +extern void pack_i2 (gfc_array_i2 *, const gfc_array_i2 *, + const gfc_array_l1 *, const gfc_array_i2 *); +internal_proto(pack_i2); + +extern void pack_i4 (gfc_array_i4 *, const gfc_array_i4 *, + const gfc_array_l1 *, const gfc_array_i4 *); +internal_proto(pack_i4); + +extern void pack_i8 (gfc_array_i8 *, const gfc_array_i8 *, + const gfc_array_l1 *, const gfc_array_i8 *); +internal_proto(pack_i8); + +#ifdef HAVE_GFC_INTEGER_16 +extern void pack_i16 (gfc_array_i16 *, const gfc_array_i16 *, + const gfc_array_l1 *, const gfc_array_i16 *); +internal_proto(pack_i16); +#endif + +extern void pack_r4 (gfc_array_r4 *, const gfc_array_r4 *, + const gfc_array_l1 *, const gfc_array_r4 *); +internal_proto(pack_r4); + +extern void pack_r8 (gfc_array_r8 *, const gfc_array_r8 *, + const gfc_array_l1 *, const gfc_array_r8 *); +internal_proto(pack_r8); + +#ifdef HAVE_GFC_REAL_10 +extern void pack_r10 (gfc_array_r10 *, const gfc_array_r10 *, + const gfc_array_l1 *, const gfc_array_r10 *); +internal_proto(pack_r10); +#endif + +#ifdef HAVE_GFC_REAL_16 +extern void pack_r16 (gfc_array_r16 *, const gfc_array_r16 *, + const gfc_array_l1 *, const gfc_array_r16 *); +internal_proto(pack_r16); +#endif + +extern void pack_c4 (gfc_array_c4 *, const gfc_array_c4 *, + const gfc_array_l1 *, const gfc_array_c4 *); +internal_proto(pack_c4); + +extern void pack_c8 (gfc_array_c8 *, const gfc_array_c8 *, + const gfc_array_l1 *, const gfc_array_c8 *); +internal_proto(pack_c8); + +#ifdef HAVE_GFC_REAL_10 +extern void pack_c10 (gfc_array_c10 *, const gfc_array_c10 *, + const gfc_array_l1 *, const gfc_array_c10 *); +internal_proto(pack_c10); +#endif + +#ifdef HAVE_GFC_REAL_16 +extern void pack_c16 (gfc_array_c16 *, const gfc_array_c16 *, + const gfc_array_l1 *, const gfc_array_c16 *); +internal_proto(pack_c16); +#endif + +/* Internal auxiliary functions for the unpack intrinsic. */ + +extern void unpack0_i1 (gfc_array_i1 *, const gfc_array_i1 *, + const gfc_array_l1 *, const GFC_INTEGER_1 *); +internal_proto(unpack0_i1); + +extern void unpack0_i2 (gfc_array_i2 *, const gfc_array_i2 *, + const gfc_array_l1 *, const GFC_INTEGER_2 *); +internal_proto(unpack0_i2); + +extern void unpack0_i4 (gfc_array_i4 *, const gfc_array_i4 *, + const gfc_array_l1 *, const GFC_INTEGER_4 *); +internal_proto(unpack0_i4); + +extern void unpack0_i8 (gfc_array_i8 *, const gfc_array_i8 *, + const gfc_array_l1 *, const GFC_INTEGER_8 *); +internal_proto(unpack0_i8); + +#ifdef HAVE_GFC_INTEGER_16 + +extern void unpack0_i16 (gfc_array_i16 *, const gfc_array_i16 *, + const gfc_array_l1 *, const GFC_INTEGER_16 *); +internal_proto(unpack0_i16); + +#endif + +extern void unpack0_r4 (gfc_array_r4 *, const gfc_array_r4 *, + const gfc_array_l1 *, const GFC_REAL_4 *); +internal_proto(unpack0_r4); + +extern void unpack0_r8 (gfc_array_r8 *, const gfc_array_r8 *, + const gfc_array_l1 *, const GFC_REAL_8 *); +internal_proto(unpack0_r8); + +#ifdef HAVE_GFC_REAL_10 + +extern void unpack0_r10 (gfc_array_r10 *, const gfc_array_r10 *, + const gfc_array_l1 *, const GFC_REAL_10 *); +internal_proto(unpack0_r10); + +#endif + +#ifdef HAVE_GFC_REAL_16 + +extern void unpack0_r16 (gfc_array_r16 *, const gfc_array_r16 *, + const gfc_array_l1 *, const GFC_REAL_16 *); +internal_proto(unpack0_r16); + +#endif + +extern void unpack0_c4 (gfc_array_c4 *, const gfc_array_c4 *, + const gfc_array_l1 *, const GFC_COMPLEX_4 *); +internal_proto(unpack0_c4); + +extern void unpack0_c8 (gfc_array_c8 *, const gfc_array_c8 *, + const gfc_array_l1 *, const GFC_COMPLEX_8 *); +internal_proto(unpack0_c8); + +#ifdef HAVE_GFC_COMPLEX_10 + +extern void unpack0_c10 (gfc_array_c10 *, const gfc_array_c10 *, + const gfc_array_l1 *mask, const GFC_COMPLEX_10 *); +internal_proto(unpack0_c10); + +#endif + +#ifdef HAVE_GFC_COMPLEX_16 + +extern void unpack0_c16 (gfc_array_c16 *, const gfc_array_c16 *, + const gfc_array_l1 *, const GFC_COMPLEX_16 *); +internal_proto(unpack0_c16); + +#endif + +extern void unpack1_i1 (gfc_array_i1 *, const gfc_array_i1 *, + const gfc_array_l1 *, const gfc_array_i1 *); +internal_proto(unpack1_i1); + +extern void unpack1_i2 (gfc_array_i2 *, const gfc_array_i2 *, + const gfc_array_l1 *, const gfc_array_i2 *); +internal_proto(unpack1_i2); + +extern void unpack1_i4 (gfc_array_i4 *, const gfc_array_i4 *, + const gfc_array_l1 *, const gfc_array_i4 *); +internal_proto(unpack1_i4); + +extern void unpack1_i8 (gfc_array_i8 *, const gfc_array_i8 *, + const gfc_array_l1 *, const gfc_array_i8 *); +internal_proto(unpack1_i8); + +#ifdef HAVE_GFC_INTEGER_16 +extern void unpack1_i16 (gfc_array_i16 *, const gfc_array_i16 *, + const gfc_array_l1 *, const gfc_array_i16 *); +internal_proto(unpack1_i16); +#endif + +extern void unpack1_r4 (gfc_array_r4 *, const gfc_array_r4 *, + const gfc_array_l1 *, const gfc_array_r4 *); +internal_proto(unpack1_r4); + +extern void unpack1_r8 (gfc_array_r8 *, const gfc_array_r8 *, + const gfc_array_l1 *, const gfc_array_r8 *); +internal_proto(unpack1_r8); + +#ifdef HAVE_GFC_REAL_10 +extern void unpack1_r10 (gfc_array_r10 *, const gfc_array_r10 *, + const gfc_array_l1 *, const gfc_array_r10 *); +internal_proto(unpack1_r10); +#endif + +#ifdef HAVE_GFC_REAL_16 +extern void unpack1_r16 (gfc_array_r16 *, const gfc_array_r16 *, + const gfc_array_l1 *, const gfc_array_r16 *); +internal_proto(unpack1_r16); +#endif + +extern void unpack1_c4 (gfc_array_c4 *, const gfc_array_c4 *, + const gfc_array_l1 *, const gfc_array_c4 *); +internal_proto(unpack1_c4); + +extern void unpack1_c8 (gfc_array_c8 *, const gfc_array_c8 *, + const gfc_array_l1 *, const gfc_array_c8 *); +internal_proto(unpack1_c8); + +#ifdef HAVE_GFC_COMPLEX_10 +extern void unpack1_c10 (gfc_array_c10 *, const gfc_array_c10 *, + const gfc_array_l1 *, const gfc_array_c10 *); +internal_proto(unpack1_c10); +#endif + +#ifdef HAVE_GFC_COMPLEX_16 +extern void unpack1_c16 (gfc_array_c16 *, const gfc_array_c16 *, + const gfc_array_l1 *, const gfc_array_c16 *); +internal_proto(unpack1_c16); +#endif + +/* Helper functions for spread. */ + +extern void spread_i1 (gfc_array_i1 *, const gfc_array_i1 *, + const index_type, const index_type); +internal_proto(spread_i1); + +extern void spread_i2 (gfc_array_i2 *, const gfc_array_i2 *, + const index_type, const index_type); +internal_proto(spread_i2); + +extern void spread_i4 (gfc_array_i4 *, const gfc_array_i4 *, + const index_type, const index_type); +internal_proto(spread_i4); + +extern void spread_i8 (gfc_array_i8 *, const gfc_array_i8 *, + const index_type, const index_type); +internal_proto(spread_i8); + +#ifdef HAVE_GFC_INTEGER_16 +extern void spread_i16 (gfc_array_i16 *, const gfc_array_i16 *, + const index_type, const index_type); +internal_proto(spread_i16); + +#endif + +extern void spread_r4 (gfc_array_r4 *, const gfc_array_r4 *, + const index_type, const index_type); +internal_proto(spread_r4); + +extern void spread_r8 (gfc_array_r8 *, const gfc_array_r8 *, + const index_type, const index_type); +internal_proto(spread_r8); + +#ifdef HAVE_GFC_REAL_10 +extern void spread_r10 (gfc_array_r10 *, const gfc_array_r10 *, + const index_type, const index_type); +internal_proto(spread_r10); + +#endif + +#ifdef HAVE_GFC_REAL_16 +extern void spread_r16 (gfc_array_r16 *, const gfc_array_r16 *, + const index_type, const index_type); +internal_proto(spread_r16); + +#endif + +extern void spread_c4 (gfc_array_c4 *, const gfc_array_c4 *, + const index_type, const index_type); +internal_proto(spread_c4); + +extern void spread_c8 (gfc_array_c8 *, const gfc_array_c8 *, + const index_type, const index_type); +internal_proto(spread_c8); + +#ifdef HAVE_GFC_COMPLEX_10 +extern void spread_c10 (gfc_array_c10 *, const gfc_array_c10 *, + const index_type, const index_type); +internal_proto(spread_c10); + +#endif + +#ifdef HAVE_GFC_COMPLEX_16 +extern void spread_c16 (gfc_array_c16 *, const gfc_array_c16 *, + const index_type, const index_type); +internal_proto(spread_c16); + +#endif + +extern void spread_scalar_i1 (gfc_array_i1 *, const GFC_INTEGER_1 *, + const index_type, const index_type); +internal_proto(spread_scalar_i1); + +extern void spread_scalar_i2 (gfc_array_i2 *, const GFC_INTEGER_2 *, + const index_type, const index_type); +internal_proto(spread_scalar_i2); + +extern void spread_scalar_i4 (gfc_array_i4 *, const GFC_INTEGER_4 *, + const index_type, const index_type); +internal_proto(spread_scalar_i4); + +extern void spread_scalar_i8 (gfc_array_i8 *, const GFC_INTEGER_8 *, + const index_type, const index_type); +internal_proto(spread_scalar_i8); + +#ifdef HAVE_GFC_INTEGER_16 +extern void spread_scalar_i16 (gfc_array_i16 *, const GFC_INTEGER_16 *, + const index_type, const index_type); +internal_proto(spread_scalar_i16); + +#endif + +extern void spread_scalar_r4 (gfc_array_r4 *, const GFC_REAL_4 *, + const index_type, const index_type); +internal_proto(spread_scalar_r4); + +extern void spread_scalar_r8 (gfc_array_r8 *, const GFC_REAL_8 *, + const index_type, const index_type); +internal_proto(spread_scalar_r8); + +#ifdef HAVE_GFC_REAL_10 +extern void spread_scalar_r10 (gfc_array_r10 *, const GFC_REAL_10 *, + const index_type, const index_type); +internal_proto(spread_scalar_r10); + +#endif + +#ifdef HAVE_GFC_REAL_16 +extern void spread_scalar_r16 (gfc_array_r16 *, const GFC_REAL_16 *, + const index_type, const index_type); +internal_proto(spread_scalar_r16); + +#endif + +extern void spread_scalar_c4 (gfc_array_c4 *, const GFC_COMPLEX_4 *, + const index_type, const index_type); +internal_proto(spread_scalar_c4); + +extern void spread_scalar_c8 (gfc_array_c8 *, const GFC_COMPLEX_8 *, + const index_type, const index_type); +internal_proto(spread_scalar_c8); + +#ifdef HAVE_GFC_COMPLEX_10 +extern void spread_scalar_c10 (gfc_array_c10 *, const GFC_COMPLEX_10 *, + const index_type, const index_type); +internal_proto(spread_scalar_c10); + +#endif + +#ifdef HAVE_GFC_COMPLEX_16 +extern void spread_scalar_c16 (gfc_array_c16 *, const GFC_COMPLEX_16 *, + const index_type, const index_type); +internal_proto(spread_scalar_c16); + +#endif + +/* string_intrinsics.c */ + +extern int compare_string (gfc_charlen_type, const char *, + gfc_charlen_type, const char *); +iexport_proto(compare_string); + +extern int compare_string_char4 (gfc_charlen_type, const gfc_char4_t *, + gfc_charlen_type, const gfc_char4_t *); +iexport_proto(compare_string_char4); + +/* random.c */ + +extern void random_seed_i4 (GFC_INTEGER_4 * size, gfc_array_i4 * put, + gfc_array_i4 * get); +iexport_proto(random_seed_i4); +extern void random_seed_i8 (GFC_INTEGER_8 * size, gfc_array_i8 * put, + gfc_array_i8 * get); +iexport_proto(random_seed_i8); + +/* size.c */ + +typedef GFC_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS, void) array_t; + +extern index_type size0 (const array_t * array); +iexport_proto(size0); + +/* Internal auxiliary functions for cshift */ + +void cshift0_i1 (gfc_array_i1 *, const gfc_array_i1 *, ssize_t, int); +internal_proto(cshift0_i1); + +void cshift0_i2 (gfc_array_i2 *, const gfc_array_i2 *, ssize_t, int); +internal_proto(cshift0_i2); + +void cshift0_i4 (gfc_array_i4 *, const gfc_array_i4 *, ssize_t, int); +internal_proto(cshift0_i4); + +void cshift0_i8 (gfc_array_i8 *, const gfc_array_i8 *, ssize_t, int); +internal_proto(cshift0_i8); + +#ifdef HAVE_GFC_INTEGER_16 +void cshift0_i16 (gfc_array_i16 *, const gfc_array_i16 *, ssize_t, int); +internal_proto(cshift0_i16); +#endif + +void cshift0_r4 (gfc_array_r4 *, const gfc_array_r4 *, ssize_t, int); +internal_proto(cshift0_r4); + +void cshift0_r8 (gfc_array_r8 *, const gfc_array_r8 *, ssize_t, int); +internal_proto(cshift0_r8); + +#ifdef HAVE_GFC_REAL_10 +void cshift0_r10 (gfc_array_r10 *, const gfc_array_r10 *, ssize_t, int); +internal_proto(cshift0_r10); +#endif + +#ifdef HAVE_GFC_REAL_16 +void cshift0_r16 (gfc_array_r16 *, const gfc_array_r16 *, ssize_t, int); +internal_proto(cshift0_r16); +#endif + +void cshift0_c4 (gfc_array_c4 *, const gfc_array_c4 *, ssize_t, int); +internal_proto(cshift0_c4); + +void cshift0_c8 (gfc_array_c8 *, const gfc_array_c8 *, ssize_t, int); +internal_proto(cshift0_c8); + +#ifdef HAVE_GFC_COMPLEX_10 +void cshift0_c10 (gfc_array_c10 *, const gfc_array_c10 *, ssize_t, int); +internal_proto(cshift0_c10); +#endif + +#ifdef HAVE_GFC_COMPLEX_16 +void cshift0_c16 (gfc_array_c16 *, const gfc_array_c16 *, ssize_t, int); +internal_proto(cshift0_c16); +#endif + +#endif /* LIBGFOR_H */ diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/libtool-version b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/libtool-version new file mode 100644 index 0000000000..f787e378b0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/libtool-version @@ -0,0 +1,6 @@ +# This file is used to maintain libtool version info for libgfortran. +# See the libtool manual to understand the meaning of the fields. +# This is a separate file so that version updates don't involve re-running +# automake. +# CURRENT:REVISION:AGE +3:0:0 diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/all.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/all.m4 new file mode 100644 index 0000000000..4dc4d1dc2a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/all.m4 @@ -0,0 +1,44 @@ +`/* Implementation of the ALL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include ' + +include(iparm.m4)dnl +include(ifunction_logical.m4)dnl + +`#if defined (HAVE_'rtype_name`)' + +ARRAY_FUNCTION(1, +` /* Return true only if all the elements are set. */ + result = 1;', +` if (! *src) + { + result = 0; + break; + }')` + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/any.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/any.m4 new file mode 100644 index 0000000000..e2a22705fa --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/any.m4 @@ -0,0 +1,44 @@ +`/* Implementation of the ANY intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include ' + +include(iparm.m4)dnl +include(ifunction_logical.m4)dnl + +`#if defined (HAVE_'rtype_name`)' + +ARRAY_FUNCTION(0, +` result = 0;', +` /* Return true if any of the elements are set. */ + if (*src) + { + result = 1; + break; + }')` + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/count.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/count.m4 new file mode 100644 index 0000000000..5a669954c5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/count.m4 @@ -0,0 +1,40 @@ +`/* Implementation of the COUNT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include ' + +include(iparm.m4)dnl +include(ifunction_logical.m4)dnl + +`#if defined (HAVE_'rtype_name`)' + +ARRAY_FUNCTION(0, +` result = 0;', +` if (*src) + result++;')` + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/cshift0.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/cshift0.m4 new file mode 100644 index 0000000000..da385cbfbf --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/cshift0.m4 @@ -0,0 +1,172 @@ +`/* Helper function for cshift functions. + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include ' + +include(iparm.m4)dnl + +`#if defined (HAVE_'rtype_name`) + +void +cshift0_'rtype_code` ('rtype` *ret, const 'rtype` *array, ssize_t shift, + int which) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + 'rtype_name` *rptr; + + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const 'rtype_name` *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + + which = which - 1; + sstride[0] = 0; + rstride[0] = 0; + + extent[0] = 1; + count[0] = 0; + n = 0; + /* Initialized for avoiding compiler warnings. */ + roffset = 1; + soffset = 1; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride; + if (roffset == 0) + roffset = 1; + soffset = array->dim[dim].stride; + if (soffset == 0) + soffset = 1; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride; + sstride[n] = array->dim[dim].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = 1; + if (rstride[0] == 0) + rstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + rptr = ret->data; + sptr = array->data; + + shift = len == 0 ? 0 : shift % (ssize_t)len; + if (shift < 0) + shift += len; + + while (rptr) + { + /* Do the shift for this dimension. */ + + /* If elements are contiguous, perform the operation + in two block moves. */ + if (soffset == 1 && roffset == 1) + { + size_t len1 = shift * sizeof ('rtype_name`); + size_t len2 = (len - shift) * sizeof ('rtype_name`); + memcpy (rptr, sptr + shift, len2); + memcpy (rptr + (len - shift), sptr, len1); + } + else + { + /* Otherwise, we will have to perform the copy one element at + a time. */ + 'rtype_name` *dest = rptr; + const 'rtype_name` *src = &sptr[shift * soffset]; + + for (n = 0; n < len - shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + for (src = sptr, n = 0; n < shift; n++) + { + *dest = *src; + dest += roffset; + src += soffset; + } + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + } + } + } + + return; +} + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/cshift1.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/cshift1.m4 new file mode 100644 index 0000000000..3c5ff5e661 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/cshift1.m4 @@ -0,0 +1,257 @@ +`/* Implementation of the CSHIFT intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Feng Wang + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include ' + +include(iparm.m4)dnl + +`#if defined (HAVE_'atype_name`) + +static void +cshift1 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const 'atype` * const restrict h, + const 'atype_name` * const restrict pwhich, + index_type size) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + char *rptr; + char *dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const char *sptr; + const char *src; + /* h.* indicates the shift array. */ + index_type hstride[GFC_MAX_DIMENSIONS]; + index_type hstride0; + const 'atype_name` *hptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + int which; + 'atype_name` sh; + index_type arraysize; + + if (pwhich) + which = *pwhich - 1; + else + which = 0; + + if (which < 0 || (which + 1) > GFC_DESCRIPTOR_RANK (array)) + runtime_error ("Argument ''`DIM''` is out of range in call to ''`CSHIFT''`"); + + arraysize = size0 ((array_t *)array); + + if (ret->data == NULL) + { + int i; + + ret->data = internal_malloc_size (size * arraysize); + ret->offset = 0; + ret->dtype = array->dtype; + for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++) + { + ret->dim[i].lbound = 0; + ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound; + + if (i == 0) + ret->dim[i].stride = 1; + else + ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride; + } + } + + if (arraysize == 0) + return; + + extent[0] = 1; + count[0] = 0; + n = 0; + + /* Initialized for avoiding compiler warnings. */ + roffset = size; + soffset = size; + len = 0; + + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride * size; + if (roffset == 0) + roffset = size; + soffset = array->dim[dim].stride * size; + if (soffset == 0) + soffset = size; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride * size; + sstride[n] = array->dim[dim].stride * size; + + hstride[n] = h->dim[n].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = size; + if (rstride[0] == 0) + rstride[0] = size; + if (hstride[0] == 0) + hstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + hstride0 = hstride[0]; + rptr = ret->data; + sptr = array->data; + hptr = h->data; + + while (rptr) + { + /* Do the shift for this dimension. */ + sh = *hptr; + sh = (div (sh, len)).rem; + if (sh < 0) + sh += len; + + src = &sptr[sh * soffset]; + dest = rptr; + + for (n = 0; n < len; n++) + { + memcpy (dest, src, size); + dest += roffset; + if (n == len - sh - 1) + src = sptr; + else + src += soffset; + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + hptr += hstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + hptr -= hstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + hptr += hstride[n]; + } + } + } +} + +void cshift1_'atype_kind` (gfc_array_char * const restrict, + const gfc_array_char * const restrict, + const 'atype` * const restrict, + const 'atype_name` * const restrict); +export_proto(cshift1_'atype_kind`); + +void +cshift1_'atype_kind` (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const 'atype` * const restrict h, + const 'atype_name` * const restrict pwhich) +{ + cshift1 (ret, array, h, pwhich, GFC_DESCRIPTOR_SIZE (array)); +} + + +void cshift1_'atype_kind`_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4, + const gfc_array_char * const restrict array, + const 'atype` * const restrict h, + const 'atype_name` * const restrict pwhich, + GFC_INTEGER_4); +export_proto(cshift1_'atype_kind`_char); + +void +cshift1_'atype_kind`_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const 'atype` * const restrict h, + const 'atype_name` * const restrict pwhich, + GFC_INTEGER_4 array_length) +{ + cshift1 (ret, array, h, pwhich, array_length); +} + + +void cshift1_'atype_kind`_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4, + const gfc_array_char * const restrict array, + const 'atype` * const restrict h, + const 'atype_name` * const restrict pwhich, + GFC_INTEGER_4); +export_proto(cshift1_'atype_kind`_char4); + +void +cshift1_'atype_kind`_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const 'atype` * const restrict h, + const 'atype_name` * const restrict pwhich, + GFC_INTEGER_4 array_length) +{ + cshift1 (ret, array, h, pwhich, array_length * sizeof (gfc_char4_t)); +} + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/eoshift1.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/eoshift1.m4 new file mode 100644 index 0000000000..1ecf0a9542 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/eoshift1.m4 @@ -0,0 +1,297 @@ +`/* Implementation of the EOSHIFT intrinsic + Copyright 2002, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include ' + +include(iparm.m4)dnl + +`#if defined (HAVE_'atype_name`) + +static void +eoshift1 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const 'atype` * const restrict h, + const char * const restrict pbound, + const 'atype_name` * const restrict pwhich, + index_type size, const char * filler, index_type filler_len) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + char *rptr; + char * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const char *sptr; + const char *src; + /* h.* indicates the shift array. */ + index_type hstride[GFC_MAX_DIMENSIONS]; + index_type hstride0; + const 'atype_name` *hptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + int which; + 'atype_name` sh; + 'atype_name` delta; + + /* The compiler cannot figure out that these are set, initialize + them to avoid warnings. */ + len = 0; + soffset = 0; + roffset = 0; + + if (pwhich) + which = *pwhich - 1; + else + which = 0; + + extent[0] = 1; + count[0] = 0; + + if (ret->data == NULL) + { + int i; + + ret->data = internal_malloc_size (size * size0 ((array_t *)array)); + ret->offset = 0; + ret->dtype = array->dtype; + for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++) + { + ret->dim[i].lbound = 0; + ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound; + + if (i == 0) + ret->dim[i].stride = 1; + else + ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride; + } + } + else + { + if (size0 ((array_t *) ret) == 0) + return; + } + + n = 0; + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride * size; + if (roffset == 0) + roffset = size; + soffset = array->dim[dim].stride * size; + if (soffset == 0) + soffset = size; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride * size; + sstride[n] = array->dim[dim].stride * size; + + hstride[n] = h->dim[n].stride; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = size; + if (rstride[0] == 0) + rstride[0] = size; + if (hstride[0] == 0) + hstride[0] = 1; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + hstride0 = hstride[0]; + rptr = ret->data; + sptr = array->data; + hptr = h->data; + + while (rptr) + { + /* Do the shift for this dimension. */ + sh = *hptr; + if (( sh >= 0 ? sh : -sh ) > len) + { + delta = len; + sh = len; + } + else + delta = (sh >= 0) ? sh: -sh; + + if (sh > 0) + { + src = &sptr[delta * soffset]; + dest = rptr; + } + else + { + src = sptr; + dest = &rptr[delta * roffset]; + } + for (n = 0; n < len - delta; n++) + { + memcpy (dest, src, size); + dest += roffset; + src += soffset; + } + if (sh < 0) + dest = rptr; + n = delta; + + if (pbound) + while (n--) + { + memcpy (dest, pbound, size); + dest += roffset; + } + else + while (n--) + { + index_type i; + + if (filler_len == 1) + memset (dest, filler[0], size); + else + for (i = 0; i < size; i += filler_len) + memcpy (&dest[i], filler, filler_len); + + dest += roffset; + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + hptr += hstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + hptr -= hstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + hptr += hstride[n]; + } + } + } +} + +void eoshift1_'atype_kind` (gfc_array_char * const restrict, + const gfc_array_char * const restrict, + const 'atype` * const restrict, const char * const restrict, + const 'atype_name` * const restrict); +export_proto(eoshift1_'atype_kind`); + +void +eoshift1_'atype_kind` (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const 'atype` * const restrict h, + const char * const restrict pbound, + const 'atype_name` * const restrict pwhich) +{ + eoshift1 (ret, array, h, pbound, pwhich, GFC_DESCRIPTOR_SIZE (array), + "\0", 1); +} + + +void eoshift1_'atype_kind`_char (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const 'atype` * const restrict, + const char * const restrict, + const 'atype_name` * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift1_'atype_kind`_char); + +void +eoshift1_'atype_kind`_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const 'atype` * const restrict h, + const char * const restrict pbound, + const 'atype_name` * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + eoshift1 (ret, array, h, pbound, pwhich, array_length, " ", 1); +} + + +void eoshift1_'atype_kind`_char4 (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const 'atype` * const restrict, + const char * const restrict, + const 'atype_name` * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift1_'atype_kind`_char4); + +void +eoshift1_'atype_kind`_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const 'atype` * const restrict h, + const char * const restrict pbound, + const 'atype_name` * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + static const gfc_char4_t space = (unsigned char) ''` ''`; + eoshift1 (ret, array, h, pbound, pwhich, array_length * sizeof (gfc_char4_t), + (const char *) &space, sizeof (gfc_char4_t)); +} + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/eoshift3.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/eoshift3.m4 new file mode 100644 index 0000000000..902c3cdbff --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/eoshift3.m4 @@ -0,0 +1,316 @@ +`/* Implementation of the EOSHIFT intrinsic + Copyright 2002, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include ' + +include(iparm.m4)dnl + +`#if defined (HAVE_'atype_name`) + +static void +eoshift3 (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const 'atype` * const restrict h, + const gfc_array_char * const restrict bound, + const 'atype_name` * const restrict pwhich, + index_type size, const char * filler, index_type filler_len) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type roffset; + char *rptr; + char * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type soffset; + const char *sptr; + const char *src; + /* h.* indicates the shift array. */ + index_type hstride[GFC_MAX_DIMENSIONS]; + index_type hstride0; + const 'atype_name` *hptr; + /* b.* indicates the bound array. */ + index_type bstride[GFC_MAX_DIMENSIONS]; + index_type bstride0; + const char *bptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type dim; + index_type len; + index_type n; + int which; + 'atype_name` sh; + 'atype_name` delta; + + /* The compiler cannot figure out that these are set, initialize + them to avoid warnings. */ + len = 0; + soffset = 0; + roffset = 0; + + if (pwhich) + which = *pwhich - 1; + else + which = 0; + + if (ret->data == NULL) + { + int i; + + ret->data = internal_malloc_size (size * size0 ((array_t *)array)); + ret->offset = 0; + ret->dtype = array->dtype; + for (i = 0; i < GFC_DESCRIPTOR_RANK (array); i++) + { + ret->dim[i].lbound = 0; + ret->dim[i].ubound = array->dim[i].ubound - array->dim[i].lbound; + + if (i == 0) + ret->dim[i].stride = 1; + else + ret->dim[i].stride = (ret->dim[i-1].ubound + 1) * ret->dim[i-1].stride; + } + } + else + { + if (size0 ((array_t *) ret) == 0) + return; + } + + + extent[0] = 1; + count[0] = 0; + n = 0; + for (dim = 0; dim < GFC_DESCRIPTOR_RANK (array); dim++) + { + if (dim == which) + { + roffset = ret->dim[dim].stride * size; + if (roffset == 0) + roffset = size; + soffset = array->dim[dim].stride * size; + if (soffset == 0) + soffset = size; + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + } + else + { + count[n] = 0; + extent[n] = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + rstride[n] = ret->dim[dim].stride * size; + sstride[n] = array->dim[dim].stride * size; + + hstride[n] = h->dim[n].stride; + if (bound) + bstride[n] = bound->dim[n].stride * size; + else + bstride[n] = 0; + n++; + } + } + if (sstride[0] == 0) + sstride[0] = size; + if (rstride[0] == 0) + rstride[0] = size; + if (hstride[0] == 0) + hstride[0] = 1; + if (bound && bstride[0] == 0) + bstride[0] = size; + + dim = GFC_DESCRIPTOR_RANK (array); + rstride0 = rstride[0]; + sstride0 = sstride[0]; + hstride0 = hstride[0]; + bstride0 = bstride[0]; + rptr = ret->data; + sptr = array->data; + hptr = h->data; + if (bound) + bptr = bound->data; + else + bptr = NULL; + + while (rptr) + { + /* Do the shift for this dimension. */ + sh = *hptr; + if (( sh >= 0 ? sh : -sh ) > len) + { + delta = len; + sh = len; + } + else + delta = (sh >= 0) ? sh: -sh; + + if (sh > 0) + { + src = &sptr[delta * soffset]; + dest = rptr; + } + else + { + src = sptr; + dest = &rptr[delta * roffset]; + } + for (n = 0; n < len - delta; n++) + { + memcpy (dest, src, size); + dest += roffset; + src += soffset; + } + if (sh < 0) + dest = rptr; + n = delta; + + if (bptr) + while (n--) + { + memcpy (dest, bptr, size); + dest += roffset; + } + else + while (n--) + { + index_type i; + + if (filler_len == 1) + memset (dest, filler[0], size); + else + for (i = 0; i < size; i += filler_len) + memcpy (&dest[i], filler, filler_len); + + dest += roffset; + } + + /* Advance to the next section. */ + rptr += rstride0; + sptr += sstride0; + hptr += hstride0; + bptr += bstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + sptr -= sstride[n] * extent[n]; + hptr -= hstride[n] * extent[n]; + bptr -= bstride[n] * extent[n]; + n++; + if (n >= dim - 1) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + sptr += sstride[n]; + hptr += hstride[n]; + bptr += bstride[n]; + } + } + } +} + +extern void eoshift3_'atype_kind` (gfc_array_char * const restrict, + const gfc_array_char * const restrict, + const 'atype` * const restrict, + const gfc_array_char * const restrict, + const 'atype_name` *); +export_proto(eoshift3_'atype_kind`); + +void +eoshift3_'atype_kind` (gfc_array_char * const restrict ret, + const gfc_array_char * const restrict array, + const 'atype` * const restrict h, + const gfc_array_char * const restrict bound, + const 'atype_name` * const restrict pwhich) +{ + eoshift3 (ret, array, h, bound, pwhich, GFC_DESCRIPTOR_SIZE (array), + "\0", 1); +} + + +extern void eoshift3_'atype_kind`_char (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const 'atype` * const restrict, + const gfc_array_char * const restrict, + const 'atype_name` * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift3_'atype_kind`_char); + +void +eoshift3_'atype_kind`_char (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const 'atype` * const restrict h, + const gfc_array_char * const restrict bound, + const 'atype_name` * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + eoshift3 (ret, array, h, bound, pwhich, array_length, " ", 1); +} + + +extern void eoshift3_'atype_kind`_char4 (gfc_array_char * const restrict, + GFC_INTEGER_4, + const gfc_array_char * const restrict, + const 'atype` * const restrict, + const gfc_array_char * const restrict, + const 'atype_name` * const restrict, + GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(eoshift3_'atype_kind`_char4); + +void +eoshift3_'atype_kind`_char4 (gfc_array_char * const restrict ret, + GFC_INTEGER_4 ret_length __attribute__((unused)), + const gfc_array_char * const restrict array, + const 'atype` * const restrict h, + const gfc_array_char * const restrict bound, + const 'atype_name` * const restrict pwhich, + GFC_INTEGER_4 array_length, + GFC_INTEGER_4 bound_length __attribute__((unused))) +{ + static const gfc_char4_t space = (unsigned char) ''` ''`; + eoshift3 (ret, array, h, bound, pwhich, array_length * sizeof (gfc_char4_t), + (const char *) &space, sizeof (gfc_char4_t)); +} + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/exponent.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/exponent.m4 new file mode 100644 index 0000000000..bb9cda8a15 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/exponent.m4 @@ -0,0 +1,43 @@ +`/* Implementation of the EXPONENT intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h"' + +include(`mtype.m4')dnl + +`#if defined (HAVE_'real_type`) && defined (HAVE_FREXP'Q`) + +extern GFC_INTEGER_4 exponent_r'kind` ('real_type` s); +export_proto(exponent_r'kind`); + +GFC_INTEGER_4 +exponent_r'kind` ('real_type` s) +{ + int ret; + frexp'q` (s, &ret); + return ret; +} + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/fraction.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/fraction.m4 new file mode 100644 index 0000000000..2878127f52 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/fraction.m4 @@ -0,0 +1,42 @@ +`/* Implementation of the FRACTION intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h"' + +include(`mtype.m4')dnl + +`#if defined (HAVE_'real_type`) && defined (HAVE_FREXP'Q`) + +extern 'real_type` fraction_r'kind` ('real_type` s); +export_proto(fraction_r'kind`); + +'real_type` +fraction_r'kind` ('real_type` s) +{ + int dummy_exp; + return frexp'q` (s, &dummy_exp); +} + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/head.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/head.m4 new file mode 100644 index 0000000000..30cdea8927 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/head.m4 @@ -0,0 +1,25 @@ +`! Copyright 2002, 2007, 2009 Free Software Foundation, Inc. +! Contributed by Paul Brook +! +!This file is part of the GNU Fortran 95 runtime library (libgfortran). +! +!GNU libgfortran 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 3 of the License, or (at your option) any later version. + +!GNU libgfortran 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. +! +!Under Section 7 of GPL version 3, you are granted additional +!permissions described in the GCC Runtime Library Exception, version +!3.1, as published by the Free Software Foundation. +! +!You should have received a copy of the GNU General Public License and +!a copy of the GCC Runtime Library Exception along with this program; +!see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +!. +! +!This file is machine generated.' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/iforeach.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/iforeach.m4 new file mode 100644 index 0000000000..b620c653f1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/iforeach.m4 @@ -0,0 +1,334 @@ +dnl Support macro file for intrinsic functions. +dnl Contains the generic sections of the array functions. +dnl This file is part of the GNU Fortran 95 Runtime Library (libgfortran) +dnl Distributed under the GNU GPL with exception. See COPYING for details. +define(START_FOREACH_FUNCTION, +` +extern void name`'rtype_qual`_'atype_code (rtype * const restrict retarray, + atype * const restrict array); +export_proto(name`'rtype_qual`_'atype_code); + +void +name`'rtype_qual`_'atype_code (rtype * const restrict retarray, + atype * const restrict array) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + const atype_name *base; + rtype_name * restrict dest; + index_type rank; + index_type n; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (rtype_name) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in u_name intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " u_name intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { +')dnl +define(START_FOREACH_BLOCK, +` while (base) + { + { + /* Implementation start. */ +')dnl +define(FINISH_FOREACH_FUNCTION, +` /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + } + } + } + } +}')dnl +define(START_MASKED_FOREACH_FUNCTION, +` +extern void `m'name`'rtype_qual`_'atype_code (rtype * const restrict, + atype * const restrict, gfc_array_l1 * const restrict); +export_proto(`m'name`'rtype_qual`_'atype_code); + +void +`m'name`'rtype_qual`_'atype_code (rtype * const restrict retarray, + atype * const restrict array, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type dstride; + rtype_name *dest; + const atype_name *base; + GFC_LOGICAL_1 *mbase; + int rank; + index_type n; + int mask_kind; + + rank = GFC_DESCRIPTOR_RANK (array); + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (rtype_name) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank, mask_rank; + index_type ret_extent; + int n; + index_type array_extent, mask_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in u_name intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("Incorrect extent in return value of" + " u_name intrnisic: is %ld, should be %ld", + (long int) ret_extent, (long int) rank); + + mask_rank = GFC_DESCRIPTOR_RANK (mask); + if (rank != mask_rank) + runtime_error ("rank of MASK argument in u_name intrnisic" + "should be %ld, is %ld", (long int) rank, + (long int) mask_rank); + + for (n=0; ndim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " u_name intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + mbase = mask->data; + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; n < rank; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + count[n] = 0; + if (extent[n] <= 0) + { + /* Set the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + return; + } + } + + base = array->data; + + /* Initialize the return value. */ + for (n = 0; n < rank; n++) + dest[n * dstride] = 0; + { +')dnl +define(START_MASKED_FOREACH_BLOCK, `START_FOREACH_BLOCK')dnl +define(FINISH_MASKED_FOREACH_FUNCTION, +` /* Implementation end. */ + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the loop. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + } + } + } + } +}')dnl +define(FOREACH_FUNCTION, +`START_FOREACH_FUNCTION +$1 +START_FOREACH_BLOCK +$2 +FINISH_FOREACH_FUNCTION')dnl +define(MASKED_FOREACH_FUNCTION, +`START_MASKED_FOREACH_FUNCTION +$1 +START_MASKED_FOREACH_BLOCK +$2 +FINISH_MASKED_FOREACH_FUNCTION')dnl +define(SCALAR_FOREACH_FUNCTION, +` +extern void `s'name`'rtype_qual`_'atype_code (rtype * const restrict, + atype * const restrict, GFC_LOGICAL_4 *); +export_proto(`s'name`'rtype_qual`_'atype_code); + +void +`s'name`'rtype_qual`_'atype_code (rtype * const restrict retarray, + atype * const restrict array, + GFC_LOGICAL_4 * mask) +{ + index_type rank; + index_type dstride; + index_type n; + rtype_name *dest; + + if (*mask) + { + name`'rtype_qual`_'atype_code (retarray, array); + return; + } + + rank = GFC_DESCRIPTOR_RANK (array); + + if (rank <= 0) + runtime_error ("Rank of array needs to be > 0"); + + if (retarray->data == NULL) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = rank-1; + retarray->dim[0].stride = 1; + retarray->dtype = (retarray->dtype & ~GFC_DTYPE_RANK_MASK) | 1; + retarray->offset = 0; + retarray->data = internal_malloc_size (sizeof (rtype_name) * rank); + } + else + { + if (unlikely (compile_options.bounds_check)) + { + int ret_rank; + index_type ret_extent; + + ret_rank = GFC_DESCRIPTOR_RANK (retarray); + if (ret_rank != 1) + runtime_error ("rank of return array in u_name intrinsic" + " should be 1, is %ld", (long int) ret_rank); + + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (ret_extent != rank) + runtime_error ("dimension of return array incorrect"); + } + } + + dstride = retarray->dim[0].stride; + dest = retarray->data; + for (n = 0; ndim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + delta = array->dim[dim].stride; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (rtype_name) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " u_name intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " u_name intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const atype_name * restrict src; + rtype_name result; + src = base; + { +')dnl +define(START_ARRAY_BLOCK, +` if (len <= 0) + *dest = '$1`; + else + { + for (n = 0; n < len; n++, src += delta) + { +')dnl +define(FINISH_ARRAY_FUNCTION, + ` } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +}')dnl +define(START_MASKED_ARRAY_FUNCTION, +` +extern void `m'name`'rtype_qual`_'atype_code (rtype * const restrict, + atype * const restrict, const index_type * const restrict, + gfc_array_l1 * const restrict); +export_proto(`m'name`'rtype_qual`_'atype_code); + +void +`m'name`'rtype_qual`_'atype_code (rtype * const restrict retarray, + atype * const restrict array, + const index_type * const restrict pdim, + gfc_array_l1 * const restrict mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + index_type mstride[GFC_MAX_DIMENSIONS]; + rtype_name * restrict dest; + const atype_name * restrict base; + const GFC_LOGICAL_1 * restrict mbase; + int rank; + int dim; + index_type n; + index_type len; + index_type delta; + index_type mdelta; + int mask_kind; + + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len <= 0) + return; + + mbase = mask->data; + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + mbase = GFOR_POINTER_TO_L1 (mbase, mask_kind); + else + runtime_error ("Funny sized logical array"); + + delta = array->dim[dim].stride; + mdelta = mask->dim[dim].stride * mask_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + mstride[n] = mask->dim[n + 1].stride * mask_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + alloc_size = sizeof (rtype_name) * retarray->dim[rank-1].stride + * extent[rank-1]; + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in u_name intrinsic"); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " u_name intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + for (n=0; n<= rank; n++) + { + index_type mask_extent, array_extent; + + array_extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + mask_extent = mask->dim[n].ubound + 1 - mask->dim[n].lbound; + if (array_extent != mask_extent) + runtime_error ("Incorrect extent in MASK argument of" + " u_name intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) mask_extent, (long int) array_extent); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + return; + } + + dest = retarray->data; + base = array->data; + + while (base) + { + const atype_name * restrict src; + const GFC_LOGICAL_1 * restrict msrc; + rtype_name result; + src = base; + msrc = mbase; + { +')dnl +define(START_MASKED_ARRAY_BLOCK, +` if (len <= 0) + *dest = '$1`; + else + { + for (n = 0; n < len; n++, src += delta, msrc += mdelta) + { +')dnl +define(FINISH_MASKED_ARRAY_FUNCTION, +` } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + mbase += mstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + mbase -= mstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + base = NULL; + break; + } + else + { + count[n]++; + base += sstride[n]; + mbase += mstride[n]; + dest += dstride[n]; + } + } + } +}')dnl +define(SCALAR_ARRAY_FUNCTION, +` +extern void `s'name`'rtype_qual`_'atype_code (rtype * const restrict, + atype * const restrict, const index_type * const restrict, + GFC_LOGICAL_4 *); +export_proto(`s'name`'rtype_qual`_'atype_code); + +void +`s'name`'rtype_qual`_'atype_code (rtype * const restrict retarray, + atype * const restrict array, + const index_type * const restrict pdim, + GFC_LOGICAL_4 * mask) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + rtype_name * restrict dest; + index_type rank; + index_type n; + index_type dim; + + + if (*mask) + { + name`'rtype_qual`_'atype_code (retarray, array, pdim); + return; + } + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] <= 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (rtype_name) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " u_name intrinsic: is %ld, should be %ld", + (long int) (GFC_DESCRIPTOR_RANK (retarray)), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " u_name intrinsic in dimension %ld:" + " is %ld, should be %ld", (long int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + } + + dest = retarray->data; + + while(1) + { + *dest = '$1`; + count[0]++; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + return; + else + { + count[n]++; + dest += dstride[n]; + } + } + } +}')dnl +define(ARRAY_FUNCTION, +`START_ARRAY_FUNCTION +$2 +START_ARRAY_BLOCK($1) +$3 +FINISH_ARRAY_FUNCTION')dnl +define(MASKED_ARRAY_FUNCTION, +`START_MASKED_ARRAY_FUNCTION +$2 +START_MASKED_ARRAY_BLOCK($1) +$3 +FINISH_MASKED_ARRAY_FUNCTION')dnl diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/ifunction_logical.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/ifunction_logical.m4 new file mode 100644 index 0000000000..da6b4ae264 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/ifunction_logical.m4 @@ -0,0 +1,210 @@ +dnl Support macro file for intrinsic functions. +dnl Contains the generic sections of the array functions. +dnl This file is part of the GNU Fortran 95 Runtime Library (libgfortran) +dnl Distributed under the GNU GPL with exception. See COPYING for details. +dnl +dnl Pass the implementation for a single section as the parameter to +dnl {MASK_}ARRAY_FUNCTION. +dnl The variables base, delta, and len describe the input section. +dnl For masked section the mask is described by mbase and mdelta. +dnl These should not be modified. The result should be stored in *dest. +dnl The names count, extent, sstride, dstride, base, dest, rank, dim +dnl retarray, array, pdim and mstride should not be used. +dnl The variable n is declared as index_type and may be used. +dnl Other variable declarations may be placed at the start of the code, +dnl The types of the array parameter and the return value are +dnl atype_name and rtype_name respectively. +dnl Execution should be allowed to continue to the end of the block. +dnl You should not return or break from the inner loop of the implementation. +dnl Care should also be taken to avoid using the names defined in iparm.m4 +define(START_ARRAY_FUNCTION, +` +extern void name`'rtype_qual`_'atype_code (rtype * const restrict, + gfc_array_l1 * const restrict, const index_type * const restrict); +export_proto(name`'rtype_qual`_'atype_code); + +void +name`'rtype_qual`_'atype_code (rtype * const restrict retarray, + gfc_array_l1 * const restrict array, + const index_type * const restrict pdim) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type dstride[GFC_MAX_DIMENSIONS]; + const GFC_LOGICAL_1 * restrict base; + rtype_name * restrict dest; + index_type rank; + index_type n; + index_type len; + index_type delta; + index_type dim; + int src_kind; + int continue_loop; + + /* Make dim zero based to avoid confusion. */ + dim = (*pdim) - 1; + rank = GFC_DESCRIPTOR_RANK (array) - 1; + + src_kind = GFC_DESCRIPTOR_SIZE (array); + + len = array->dim[dim].ubound + 1 - array->dim[dim].lbound; + if (len < 0) + len = 0; + + delta = array->dim[dim].stride * src_kind; + + for (n = 0; n < dim; n++) + { + sstride[n] = array->dim[n].stride * src_kind; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + for (n = dim; n < rank; n++) + { + sstride[n] = array->dim[n + 1].stride * src_kind; + extent[n] = + array->dim[n + 1].ubound + 1 - array->dim[n + 1].lbound; + + if (extent[n] < 0) + extent[n] = 0; + } + + if (retarray->data == NULL) + { + size_t alloc_size; + + for (n = 0; n < rank; n++) + { + retarray->dim[n].lbound = 0; + retarray->dim[n].ubound = extent[n]-1; + if (n == 0) + retarray->dim[n].stride = 1; + else + retarray->dim[n].stride = retarray->dim[n-1].stride * extent[n-1]; + } + + retarray->offset = 0; + retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + + alloc_size = sizeof (rtype_name) * retarray->dim[rank-1].stride + * extent[rank-1]; + + if (alloc_size == 0) + { + /* Make sure we have a zero-sized array. */ + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = -1; + return; + } + else + retarray->data = internal_malloc_size (alloc_size); + } + else + { + if (rank != GFC_DESCRIPTOR_RANK (retarray)) + runtime_error ("rank of return array incorrect in" + " u_name intrinsic: is %ld, should be %ld", + (long int) GFC_DESCRIPTOR_RANK (retarray), + (long int) rank); + + if (unlikely (compile_options.bounds_check)) + { + for (n=0; n < rank; n++) + { + index_type ret_extent; + + ret_extent = retarray->dim[n].ubound + 1 + - retarray->dim[n].lbound; + if (extent[n] != ret_extent) + runtime_error ("Incorrect extent in return value of" + " u_name intrinsic in dimension %d:" + " is %ld, should be %ld", (int) n + 1, + (long int) ret_extent, (long int) extent[n]); + } + } + } + + for (n = 0; n < rank; n++) + { + count[n] = 0; + dstride[n] = retarray->dim[n].stride; + if (extent[n] <= 0) + len = 0; + } + + base = array->data; + + if (src_kind == 1 || src_kind == 2 || src_kind == 4 || src_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || src_kind == 16 +#endif + ) + { + if (base) + base = GFOR_POINTER_TO_L1 (base, src_kind); + } + else + internal_error (NULL, "Funny sized logical array in u_name intrinsic"); + + dest = retarray->data; + + continue_loop = 1; + while (continue_loop) + { + const GFC_LOGICAL_1 * restrict src; + rtype_name result; + src = base; + { +')dnl +define(START_ARRAY_BLOCK, +` if (len <= 0) + *dest = '$1`; + else + { + for (n = 0; n < len; n++, src += delta) + { +')dnl +define(FINISH_ARRAY_FUNCTION, + ` } + *dest = result; + } + } + /* Advance to the next element. */ + count[0]++; + base += sstride[0]; + dest += dstride[0]; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + base -= sstride[n] * extent[n]; + dest -= dstride[n] * extent[n]; + n++; + if (n == rank) + { + /* Break out of the look. */ + continue_loop = 0; + break; + } + else + { + count[n]++; + base += sstride[n]; + dest += dstride[n]; + } + } + } +}')dnl +define(ARRAY_FUNCTION, +`START_ARRAY_FUNCTION +$2 +START_ARRAY_BLOCK($1) +$3 +FINISH_ARRAY_FUNCTION')dnl diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/in_pack.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/in_pack.m4 new file mode 100644 index 0000000000..b54ea04d72 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/in_pack.m4 @@ -0,0 +1,122 @@ +`/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include ' + +include(iparm.m4)dnl + +`#if defined (HAVE_'rtype_name`) + +/* Allocates a block of memory with internal_malloc if the array needs + repacking. */ +' +dnl The kind (ie size) is used to name the function for logicals, integers +dnl and reals. For complex, it's c4 or c8. +rtype_name` * +internal_pack_'rtype_ccode` ('rtype` * source) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type ssize; + const 'rtype_name` *src; + 'rtype_name` * restrict dest; + 'rtype_name` *destptr; + int n; + int packed; + + /* TODO: Investigate how we can figure out if this is a temporary + since the stride=0 thing has been removed from the frontend. */ + + dim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + packed = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = source->dim[n].stride; + extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (extent[n] <= 0) + { + /* Do nothing. */ + packed = 1; + break; + } + + if (ssize != stride[n]) + packed = 0; + + ssize *= extent[n]; + } + + if (packed) + return source->data; + + /* Allocate storage for the destination. */ + destptr = ('rtype_name` *)internal_malloc_size (ssize * sizeof ('rtype_name`)); + dest = destptr; + src = source->data; + stride0 = stride[0]; + + + while (src) + { + /* Copy the data. */ + *(dest++) = *src; + /* Advance to the next element. */ + src += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= stride[n] * extent[n]; + n++; + if (n == dim) + { + src = NULL; + break; + } + else + { + count[n]++; + src += stride[n]; + } + } + } + return destptr; +} + +#endif +' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/in_unpack.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/in_unpack.m4 new file mode 100644 index 0000000000..af7114501a --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/in_unpack.m4 @@ -0,0 +1,110 @@ +`/* Helper function for repacking arrays. + Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include ' + +include(iparm.m4)dnl + +`#if defined (HAVE_'rtype_name`)' + +dnl Only the kind (ie size) is used to name the function for integers, +dnl reals and logicals. For complex, it's c4 and c8. +`void +internal_unpack_'rtype_ccode` ('rtype` * d, const 'rtype_name` * src) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type dsize; + 'rtype_name` * restrict dest; + int n; + + dest = d->data; + if (src == dest || !src) + return; + + dim = GFC_DESCRIPTOR_RANK (d); + dsize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = d->dim[n].stride; + extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound; + if (extent[n] <= 0) + return; + + if (dsize == stride[n]) + dsize *= extent[n]; + else + dsize = 0; + } + + if (dsize != 0) + { + memcpy (dest, src, dsize * sizeof ('rtype_name`)); + return; + } + + stride0 = stride[0]; + + while (dest) + { + /* Copy the data. */ + *dest = *(src++); + /* Advance to the next element. */ + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n]; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n]; + } + } + } +} + +#endif +' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/iparm.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/iparm.m4 new file mode 100644 index 0000000000..51ee40d049 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/iparm.m4 @@ -0,0 +1,35 @@ +dnl Support macro file for intrinsic functions. +dnl Works out all the function types from the filename. +dnl This file is part of the GNU Fortran 95 Runtime Library (libgfortran) +dnl Distributed under the GNU GPL with exception. See COPYING for details. +dnl M4 macro file to get type names from filenames +define(get_typename2, `GFC_$1_$2')dnl +define(get_typename, `get_typename2(ifelse($1,i,INTEGER,ifelse($1,r,REAL,ifelse($1,l,LOGICAL,ifelse($1,c,COMPLEX,unknown)))),`$2')')dnl +define(get_arraytype, `gfc_array_$1$2')dnl +define(define_type, `dnl +ifelse(regexp($2,`^[0-9]'),-1,`dnl +define($1_letter, substr($2, 0, 1))dnl +define($1_kind, substr($2, 1))dnl +',`dnl +define($1_letter,i)dnl +define($1_kind,$2)dnl +')dnl +define($1_code,$1_letter`'$1_kind)dnl +define($1,get_arraytype($1_letter,$1_kind))dnl +define($1_name, get_typename($1_letter, $1_kind))')dnl +dnl +define_type(atype, regexp(file, `_\(.?[0-9]*\)\.c$', `\1'))dnl +define(rtype_tmp, regexp(file, `_\(.?[0-9]*\)_[^_]*\.c$', `\1'))dnl +ifelse(rtype_tmp,,`dnl +define_type(rtype, atype_code)dnl +define(rtype_qual,`')dnl +',`dnl +define_type(rtype, rtype_tmp)dnl +define(rtype_qual,`_'rtype_kind)dnl +')dnl +define(atype_max, atype_name`_HUGE')dnl +define(atype_min,ifelse(regexp(file, `_\(.\)[0-9]*\.c$', `\1'),`i',`(-'atype_max`-1)',`-'atype_max))dnl +define(name, regexp(regexp(file, `[^/]*$', `\&'), `^\([^_]*\)_', `\1'))dnl +define(`upcase', `translit(`$*', `a-z', `A-Z')')dnl +define(`u_name',`regexp(upcase(name),`\([A-Z]*\)',`\1')')dnl +define(rtype_ccode,ifelse(rtype_letter,`i',rtype_kind,rtype_code))dnl diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/matmul.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/matmul.m4 new file mode 100644 index 0000000000..8ad1bd117c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/matmul.m4 @@ -0,0 +1,381 @@ +`/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include ' + +include(iparm.m4)dnl + +`#if defined (HAVE_'rtype_name`) + +/* Prototype for the BLAS ?gemm subroutine, a pointer to which can be + passed to us by the front-end, in which case we''`ll call it for large + matrices. */ + +typedef void (*blas_call)(const char *, const char *, const int *, const int *, + const int *, const 'rtype_name` *, const 'rtype_name` *, + const int *, const 'rtype_name` *, const int *, + const 'rtype_name` *, 'rtype_name` *, const int *, + int, int); + +/* The order of loops is different in the case of plain matrix + multiplication C=MATMUL(A,B), and in the frequent special case where + the argument A is the temporary result of a TRANSPOSE intrinsic: + C=MATMUL(TRANSPOSE(A),B). Transposed temporaries are detected by + looking at their strides. + + The equivalent Fortran pseudo-code is: + + DIMENSION A(M,COUNT), B(COUNT,N), C(M,N) + IF (.NOT.IS_TRANSPOSED(A)) THEN + C = 0 + DO J=1,N + DO K=1,COUNT + DO I=1,M + C(I,J) = C(I,J)+A(I,K)*B(K,J) + ELSE + DO J=1,N + DO I=1,M + S = 0 + DO K=1,COUNT + S = S+A(I,K)*B(K,J) + C(I,J) = S + ENDIF +*/ + +/* If try_blas is set to a nonzero value, then the matmul function will + see if there is a way to perform the matrix multiplication by a call + to the BLAS gemm function. */ + +extern void matmul_'rtype_code` ('rtype` * const restrict retarray, + 'rtype` * const restrict a, 'rtype` * const restrict b, int try_blas, + int blas_limit, blas_call gemm); +export_proto(matmul_'rtype_code`); + +void +matmul_'rtype_code` ('rtype` * const restrict retarray, + 'rtype` * const restrict a, 'rtype` * const restrict b, int try_blas, + int blas_limit, blas_call gemm) +{ + const 'rtype_name` * restrict abase; + const 'rtype_name` * restrict bbase; + 'rtype_name` * restrict dest; + + index_type rxstride, rystride, axstride, aystride, bxstride, bystride; + index_type x, y, n, count, xcount, ycount; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + +/* C[xcount,ycount] = A[xcount, count] * B[count,ycount] + + Either A or B (but not both) can be rank 1: + + o One-dimensional argument A is implicitly treated as a row matrix + dimensioned [1,count], so xcount=1. + + o One-dimensional argument B is implicitly treated as a column matrix + dimensioned [count, 1], so ycount=1. + */ + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof ('rtype_name`) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } +' +sinclude(`matmul_asm_'rtype_code`.m4')dnl +` + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + /* One-dimensional result may be addressed in the code below + either as a row or a column matrix. We want both cases to + work. */ + rxstride = rystride = retarray->dim[0].stride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + /* Treat it as a a row matrix A[1,count]. */ + axstride = a->dim[0].stride; + aystride = 1; + + xcount = 1; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + else + { + axstride = a->dim[0].stride; + aystride = a->dim[1].stride; + + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + + if (count != b->dim[0].ubound + 1 - b->dim[0].lbound) + { + if (count > 0 || b->dim[0].ubound + 1 - b->dim[0].lbound > 0) + runtime_error ("dimension of array B incorrect in MATMUL intrinsic"); + } + + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + /* Treat it as a column matrix B[count,1] */ + bxstride = b->dim[0].stride; + + /* bystride should never be used for 1-dimensional b. + in case it is we want it to cause a segfault, rather than + an incorrect result. */ + bystride = 0xDEADBEEF; + ycount = 1; + } + else + { + bxstride = b->dim[0].stride; + bystride = b->dim[1].stride; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + abase = a->data; + bbase = b->data; + dest = retarray->data; + + + /* Now that everything is set up, we''`re performing the multiplication + itself. */ + +#define POW3(x) (((float) (x)) * ((float) (x)) * ((float) (x))) + + if (try_blas && rxstride == 1 && (axstride == 1 || aystride == 1) + && (bxstride == 1 || bystride == 1) + && (((float) xcount) * ((float) ycount) * ((float) count) + > POW3(blas_limit))) + { + const int m = xcount, n = ycount, k = count, ldc = rystride; + const 'rtype_name` one = 1, zero = 0; + const int lda = (axstride == 1) ? aystride : axstride, + ldb = (bxstride == 1) ? bystride : bxstride; + + if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1) + { + assert (gemm != NULL); + gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m, &n, &k, + &one, abase, &lda, bbase, &ldb, &zero, dest, &ldc, 1, 1); + return; + } + } + + if (rxstride == 1 && axstride == 1 && bxstride == 1) + { + const 'rtype_name` * restrict bbase_y; + 'rtype_name` * restrict dest_y; + const 'rtype_name` * restrict abase_n; + 'rtype_name` bbase_yn; + + if (rystride == xcount) + memset (dest, 0, (sizeof ('rtype_name`) * xcount * ycount)); + else + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x + y*rystride] = ('rtype_name`)0; + } + + for (y = 0; y < ycount; y++) + { + bbase_y = bbase + y*bystride; + dest_y = dest + y*rystride; + for (n = 0; n < count; n++) + { + abase_n = abase + n*aystride; + bbase_yn = bbase_y[n]; + for (x = 0; x < xcount; x++) + { + dest_y[x] += abase_n[x] * bbase_yn; + } + } + } + } + else if (rxstride == 1 && aystride == 1 && bxstride == 1) + { + if (GFC_DESCRIPTOR_RANK (a) != 1) + { + const 'rtype_name` *restrict abase_x; + const 'rtype_name` *restrict bbase_y; + 'rtype_name` *restrict dest_y; + 'rtype_name` s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = ('rtype_name`) 0; + for (n = 0; n < count; n++) + s += abase_x[n] * bbase_y[n]; + dest_y[x] = s; + } + } + } + else + { + const 'rtype_name` *restrict bbase_y; + 'rtype_name` s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = ('rtype_name`) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n]; + dest[y*rystride] = s; + } + } + } + else if (axstride < aystride) + { + for (y = 0; y < ycount; y++) + for (x = 0; x < xcount; x++) + dest[x*rxstride + y*rystride] = ('rtype_name`)0; + + for (y = 0; y < ycount; y++) + for (n = 0; n < count; n++) + for (x = 0; x < xcount; x++) + /* dest[x,y] += a[x,n] * b[n,y] */ + dest[x*rxstride + y*rystride] += abase[x*axstride + n*aystride] * bbase[n*bxstride + y*bystride]; + } + else if (GFC_DESCRIPTOR_RANK (a) == 1) + { + const 'rtype_name` *restrict bbase_y; + 'rtype_name` s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + s = ('rtype_name`) 0; + for (n = 0; n < count; n++) + s += abase[n*axstride] * bbase_y[n*bxstride]; + dest[y*rxstride] = s; + } + } + else + { + const 'rtype_name` *restrict abase_x; + const 'rtype_name` *restrict bbase_y; + 'rtype_name` *restrict dest_y; + 'rtype_name` s; + + for (y = 0; y < ycount; y++) + { + bbase_y = &bbase[y*bystride]; + dest_y = &dest[y*rystride]; + for (x = 0; x < xcount; x++) + { + abase_x = &abase[x*axstride]; + s = ('rtype_name`) 0; + for (n = 0; n < count; n++) + s += abase_x[n*aystride] * bbase_y[n*bxstride]; + dest_y[x*rxstride] = s; + } + } + } +} + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/matmull.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/matmull.m4 new file mode 100644 index 0000000000..d971d3da7b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/matmull.m4 @@ -0,0 +1,244 @@ +`/* Implementation of the MATMUL intrinsic + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include ' + +include(iparm.m4)dnl + +`#if defined (HAVE_'rtype_name`) + +/* Dimensions: retarray(x,y) a(x, count) b(count,y). + Either a or b can be rank 1. In this case x or y is 1. */ + +extern void matmul_'rtype_code` ('rtype` * const restrict, + gfc_array_l1 * const restrict, gfc_array_l1 * const restrict); +export_proto(matmul_'rtype_code`); + +void +matmul_'rtype_code` ('rtype` * const restrict retarray, + gfc_array_l1 * const restrict a, gfc_array_l1 * const restrict b) +{ + const GFC_LOGICAL_1 * restrict abase; + const GFC_LOGICAL_1 * restrict bbase; + 'rtype_name` * restrict dest; + index_type rxstride; + index_type rystride; + index_type xcount; + index_type ycount; + index_type xstride; + index_type ystride; + index_type x; + index_type y; + int a_kind; + int b_kind; + + const GFC_LOGICAL_1 * restrict pa; + const GFC_LOGICAL_1 * restrict pb; + index_type astride; + index_type bstride; + index_type count; + index_type n; + + assert (GFC_DESCRIPTOR_RANK (a) == 2 + || GFC_DESCRIPTOR_RANK (b) == 2); + + if (retarray->data == NULL) + { + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[0].stride = 1; + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + } + else + { + retarray->dim[0].lbound = 0; + retarray->dim[0].ubound = a->dim[0].ubound - a->dim[0].lbound; + retarray->dim[0].stride = 1; + + retarray->dim[1].lbound = 0; + retarray->dim[1].ubound = b->dim[1].ubound - b->dim[1].lbound; + retarray->dim[1].stride = retarray->dim[0].ubound+1; + } + + retarray->data + = internal_malloc_size (sizeof ('rtype_name`) * size0 ((array_t *) retarray)); + retarray->offset = 0; + } + else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, arg_extent; + + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else if (GFC_DESCRIPTOR_RANK (b) == 1) + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic: is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + else + { + arg_extent = a->dim[0].ubound + 1 - a->dim[0].lbound; + ret_extent = retarray->dim[0].ubound + 1 - retarray->dim[0].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 1:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + + arg_extent = b->dim[1].ubound + 1 - b->dim[1].lbound; + ret_extent = retarray->dim[1].ubound + 1 - retarray->dim[1].lbound; + if (arg_extent != ret_extent) + runtime_error ("Incorrect extent in return array in" + " MATMUL intrinsic for dimension 2:" + " is %ld, should be %ld", + (long int) ret_extent, (long int) arg_extent); + } + } + + abase = a->data; + a_kind = GFC_DESCRIPTOR_SIZE (a); + + if (a_kind == 1 || a_kind == 2 || a_kind == 4 || a_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || a_kind == 16 +#endif + ) + abase = GFOR_POINTER_TO_L1 (abase, a_kind); + else + internal_error (NULL, "Funny sized logical array"); + + bbase = b->data; + b_kind = GFC_DESCRIPTOR_SIZE (b); + + if (b_kind == 1 || b_kind == 2 || b_kind == 4 || b_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || b_kind == 16 +#endif + ) + bbase = GFOR_POINTER_TO_L1 (bbase, b_kind); + else + internal_error (NULL, "Funny sized logical array"); + + dest = retarray->data; +' +sinclude(`matmul_asm_'rtype_code`.m4')dnl +` + if (GFC_DESCRIPTOR_RANK (retarray) == 1) + { + rxstride = retarray->dim[0].stride; + rystride = rxstride; + } + else + { + rxstride = retarray->dim[0].stride; + rystride = retarray->dim[1].stride; + } + + /* If we have rank 1 parameters, zero the absent stride, and set the size to + one. */ + if (GFC_DESCRIPTOR_RANK (a) == 1) + { + astride = a->dim[0].stride * a_kind; + count = a->dim[0].ubound + 1 - a->dim[0].lbound; + xstride = 0; + rxstride = 0; + xcount = 1; + } + else + { + astride = a->dim[1].stride * a_kind; + count = a->dim[1].ubound + 1 - a->dim[1].lbound; + xstride = a->dim[0].stride * a_kind; + xcount = a->dim[0].ubound + 1 - a->dim[0].lbound; + } + if (GFC_DESCRIPTOR_RANK (b) == 1) + { + bstride = b->dim[0].stride * b_kind; + assert(count == b->dim[0].ubound + 1 - b->dim[0].lbound); + ystride = 0; + rystride = 0; + ycount = 1; + } + else + { + bstride = b->dim[0].stride * b_kind; + assert(count == b->dim[0].ubound + 1 - b->dim[0].lbound); + ystride = b->dim[1].stride * b_kind; + ycount = b->dim[1].ubound + 1 - b->dim[1].lbound; + } + + for (y = 0; y < ycount; y++) + { + for (x = 0; x < xcount; x++) + { + /* Do the summation for this element. For real and integer types + this is the same as DOT_PRODUCT. For complex types we use do + a*b, not conjg(a)*b. */ + pa = abase; + pb = bbase; + *dest = 0; + + for (n = 0; n < count; n++) + { + if (*pa && *pb) + { + *dest = 1; + break; + } + pa += astride; + pb += bstride; + } + + dest += rxstride; + abase += xstride; + } + abase -= xstride * xcount; + bbase += ystride; + dest += rystride - (rxstride * xcount); + } +} + +#endif +' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/maxloc0.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/maxloc0.m4 new file mode 100644 index 0000000000..ce56ab44d1 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/maxloc0.m4 @@ -0,0 +1,61 @@ +`/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include ' + +include(iparm.m4)dnl +include(iforeach.m4)dnl + +`#if defined (HAVE_'atype_name`) && defined (HAVE_'rtype_name`)' + +FOREACH_FUNCTION( +` atype_name maxval; + + maxval = atype_min;' +, +` if (*base > maxval || !dest[0]) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + }') + +MASKED_FOREACH_FUNCTION( +` atype_name maxval; + + maxval = atype_min;' +, +` if (*mbase && (*base > maxval || !dest[0])) + { + maxval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + }') + +SCALAR_FOREACH_FUNCTION(`0') +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/maxloc1.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/maxloc1.m4 new file mode 100644 index 0000000000..2910384cc4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/maxloc1.m4 @@ -0,0 +1,58 @@ +`/* Implementation of the MAXLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include ' + +include(iparm.m4)dnl +include(ifunction.m4)dnl + +`#if defined (HAVE_'atype_name`) && defined (HAVE_'rtype_name`)' + +ARRAY_FUNCTION(0, +` atype_name maxval; + maxval = atype_min; + result = 0;', +` if (*src > maxval || !result) + { + maxval = *src; + result = (rtype_name)n + 1; + }') + +MASKED_ARRAY_FUNCTION(0, +` atype_name maxval; + maxval = atype_min; + result = 0;', +` if (*msrc && (*src > maxval || !result)) + { + maxval = *src; + result = (rtype_name)n + 1; + }') + +SCALAR_ARRAY_FUNCTION(0) + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/maxval.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/maxval.m4 new file mode 100644 index 0000000000..1fd64a02bd --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/maxval.m4 @@ -0,0 +1,47 @@ +`/* Implementation of the MAXVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include ' + +include(iparm.m4)dnl +include(ifunction.m4)dnl + +`#if defined (HAVE_'atype_name`) && defined (HAVE_'rtype_name`)' + +ARRAY_FUNCTION(atype_min, +` result = atype_min;', +` if (*src > result) + result = *src;') + +MASKED_ARRAY_FUNCTION(atype_min, +` result = atype_min;', +` if (*msrc && *src > result) + result = *src;') + +SCALAR_ARRAY_FUNCTION(atype_min) + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/minloc0.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/minloc0.m4 new file mode 100644 index 0000000000..45b6e90880 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/minloc0.m4 @@ -0,0 +1,61 @@ +`/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include ' + +include(iparm.m4)dnl +include(iforeach.m4)dnl + +`#if defined (HAVE_'atype_name`) && defined (HAVE_'rtype_name`)' + +FOREACH_FUNCTION( +` atype_name minval; + + minval = atype_max;' +, +` if (*base < minval || !dest[0]) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + }') + +MASKED_FOREACH_FUNCTION( +` atype_name minval; + + minval = atype_max;' +, +` if (*mbase && (*base < minval || !dest[0])) + { + minval = *base; + for (n = 0; n < rank; n++) + dest[n * dstride] = count[n] + 1; + }') + +SCALAR_FOREACH_FUNCTION(`0') +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/minloc1.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/minloc1.m4 new file mode 100644 index 0000000000..905619a389 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/minloc1.m4 @@ -0,0 +1,58 @@ +`/* Implementation of the MINLOC intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include ' + +include(iparm.m4)dnl +include(ifunction.m4)dnl + +`#if defined (HAVE_'atype_name`) && defined (HAVE_'rtype_name`)' + +ARRAY_FUNCTION(0, +` atype_name minval; + minval = atype_max; + result = 0;', +` if (*src < minval || !result) + { + minval = *src; + result = (rtype_name)n + 1; + }') + +MASKED_ARRAY_FUNCTION(0, +` atype_name minval; + minval = atype_max; + result = 0;', +` if (*msrc && (*src < minval || !result)) + { + minval = *src; + result = (rtype_name)n + 1; + }') + +SCALAR_ARRAY_FUNCTION(0) + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/minval.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/minval.m4 new file mode 100644 index 0000000000..9b8be5bc0f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/minval.m4 @@ -0,0 +1,47 @@ +`/* Implementation of the MINVAL intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include ' + +include(iparm.m4)dnl +include(ifunction.m4)dnl + +`#if defined (HAVE_'atype_name`) && defined (HAVE_'rtype_name`)' + +ARRAY_FUNCTION(atype_max, +` result = atype_max;', +` if (*src < result) + result = *src;') + +MASKED_ARRAY_FUNCTION(atype_max, +` result = atype_max;', +` if (*msrc && *src < result) + result = *src;') + +SCALAR_ARRAY_FUNCTION(atype_max) + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/misc_specifics.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/misc_specifics.m4 new file mode 100644 index 0000000000..3e40bf0178 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/misc_specifics.m4 @@ -0,0 +1,64 @@ +include(head.m4)dnl +dnl +dnl This file contains the specific functions that are not handled in the +dnl m4/specific.m4 file. + +#include "config.h" +#include "kinds.inc" + +dnl This is from GNU m4 examples file foreach.m4: +divert(-1) +# foreach(x, (item_1, item_2, ..., item_n), stmt) +define(`foreach', `pushdef(`$1', `')_foreach(`$1', `$2', +`$3')popdef(`$1')') +define(`_arg1', `$1') +define(`_foreach', + `ifelse(`$2', `()', , + `define(`$1', _arg1$2)$3`'_foreach(`$1', (shift$2), +`$3')')') +# traceon(`define', `foreach', `_foreach', `ifelse') +divert + +dnl NINT specifics +foreach(`ikind', `(4, 8, 16)', `foreach(`rkind', `(4, 8, 10, 16)', ` +`#if defined (HAVE_GFC_REAL_'rkind`) && defined (HAVE_GFC_INTEGER_'ikind`)' +elemental function _gfortran_specific__nint_`'ikind`_'rkind (parm) + real (kind=rkind) , intent (in) :: parm + integer (kind=ikind) :: _gfortran_specific__nint_`'ikind`_'rkind + _gfortran_specific__nint_`'ikind`_'rkind = nint (parm) +end function +#endif +')') + +dnl CHAR specifics +foreach(`ckind', `(1)', `foreach(`ikind', `(4, 8, 16)', ` +`#if defined (HAVE_GFC_INTEGER_'ikind`)' +elemental function _gfortran_specific__char_`'ckind`_i'ikind (parm) + integer (kind=ikind) , intent (in) :: parm + character (kind=ckind,len=1) :: _gfortran_specific__char_`'ckind`_i'ikind + _gfortran_specific__char_`'ckind`_i'ikind` = char (parm, kind='ckind`)' +end function +#endif +')') + +dnl LEN specifics +foreach(`ckind', `(1)', `foreach(`ikind', `(4, 8, 16)', ` +`#if defined (HAVE_GFC_INTEGER_'ikind`)' +elemental function _gfortran_specific__len_`'ckind`_i'ikind (parm) + character (kind=ckind,len=*) , intent (in) :: parm + integer (kind=ikind) :: _gfortran_specific__len_`'ckind`_i'ikind + _gfortran_specific__len_`'ckind`_i'ikind` = len (parm)' +end function +#endif +')') + +dnl INDEX specifics +foreach(`ckind', `(1)', `foreach(`ikind', `(4, 8, 16)', ` +`#if defined (HAVE_GFC_INTEGER_'ikind`)' +elemental function _gfortran_specific__index_`'ckind`_i'ikind (parm1, parm2) + character (kind=ckind,len=*) , intent (in) :: parm1, parm2 + integer (kind=ikind) :: _gfortran_specific__index_`'ckind`_i'ikind + _gfortran_specific__index_`'ckind`_i'ikind` = index (parm1, parm2)' +end function +#endif +')') diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/mtype.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/mtype.m4 new file mode 100644 index 0000000000..8e7e889bf0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/mtype.m4 @@ -0,0 +1,6 @@ +dnl Get type kind from filename. +define(kind,regexp(file, `_.\([0-9]+\).c$', `\1'))dnl +define(complex_type, `GFC_COMPLEX_'kind)dnl +define(real_type, `GFC_REAL_'kind)dnl +define(q,ifelse(kind,4,f,ifelse(kind,8,`',ifelse(kind,10,l,ifelse(kind,16,l,`_'kind)))))dnl +define(Q,translit(q,`a-z',`A-Z'))dnl diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/nearest.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/nearest.m4 new file mode 100644 index 0000000000..98b417f3cb --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/nearest.m4 @@ -0,0 +1,49 @@ +`/* Implementation of the NEAREST intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h"' + +include(`mtype.m4')dnl + +`#if defined (HAVE_'real_type`) && defined (HAVE_COPYSIGN'Q`) && defined (HAVE_NEXTAFTER'Q`) + +extern 'real_type` nearest_r'kind` ('real_type` s, 'real_type` dir); +export_proto(nearest_r'kind`); + +'real_type` +nearest_r'kind` ('real_type` s, 'real_type` dir) +{ + dir = copysign'q` (__builtin_inf'q` (), dir); + if (FLT_EVAL_METHOD != 0) + { + /* ??? Work around glibc bug on x86. */ + volatile 'real_type` r = nextafter'q` (s, dir); + return r; + } + else + return nextafter'q` (s, dir); +} + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/pack.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/pack.m4 new file mode 100644 index 0000000000..16b80731f7 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/pack.m4 @@ -0,0 +1,316 @@ +`/* Specific implementation of the PACK intrinsic + Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include ' + +include(iparm.m4)dnl + +`#if defined (HAVE_'rtype_name`) + +/* PACK is specified as follows: + + 13.14.80 PACK (ARRAY, MASK, [VECTOR]) + + Description: Pack an array into an array of rank one under the + control of a mask. + + Class: Transformational function. + + Arguments: + ARRAY may be of any type. It shall not be scalar. + MASK shall be of type LOGICAL. It shall be conformable with ARRAY. + VECTOR (optional) shall be of the same type and type parameters + as ARRAY. VECTOR shall have at least as many elements as + there are true elements in MASK. If MASK is a scalar + with the value true, VECTOR shall have at least as many + elements as there are in ARRAY. + + Result Characteristics: The result is an array of rank one with the + same type and type parameters as ARRAY. If VECTOR is present, the + result size is that of VECTOR; otherwise, the result size is the + number /t/ of true elements in MASK unless MASK is scalar with the + value true, in which case the result size is the size of ARRAY. + + Result Value: Element /i/ of the result is the element of ARRAY + that corresponds to the /i/th true element of MASK, taking elements + in array element order, for /i/ = 1, 2, ..., /t/. If VECTOR is + present and has size /n/ > /t/, element /i/ of the result has the + value VECTOR(/i/), for /i/ = /t/ + 1, ..., /n/. + + Examples: The nonzero elements of an array M with the value + | 0 0 0 | + | 9 0 0 | may be "gathered" by the function PACK. The result of + | 0 0 7 | + PACK (M, MASK = M.NE.0) is [9,7] and the result of PACK (M, M.NE.0, + VECTOR = (/ 2,4,6,8,10,12 /)) is [9,7,6,8,10,12]. + +There are two variants of the PACK intrinsic: one, where MASK is +array valued, and the other one where MASK is scalar. */ + +void +pack_'rtype_code` ('rtype` *ret, const 'rtype` *array, + const gfc_array_l1 *mask, const 'rtype` *vector) +{ + /* r.* indicates the return array. */ + index_type rstride0; + 'rtype_name` * restrict rptr; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + const 'rtype_name` *sptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + int zero_sized; + index_type n; + index_type dim; + index_type nelem; + index_type total; + int mask_kind; + + dim = GFC_DESCRIPTOR_RANK (array); + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + zero_sized = 0; + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound; + if (extent[n] <= 0) + zero_sized = 1; + sstride[n] = array->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (sstride[0] == 0) + sstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = mask_kind; + + if (zero_sized) + sptr = NULL; + else + sptr = array->data; + + if (ret->data == NULL || compile_options.bounds_check) + { + /* Count the elements, either for allocating memory or + for bounds checking. */ + + if (vector != NULL) + { + /* The return array will have as many + elements as there are in VECTOR. */ + total = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + if (total < 0) + { + total = 0; + vector = NULL; + } + } + else + { + /* We have to count the true elements in MASK. */ + + /* TODO: We could speed up pack easily in the case of only + few .TRUE. entries in MASK, by keeping track of where we + would be in the source array during the initial traversal + of MASK, and caching the pointers to those elements. Then, + supposed the number of elements is small enough, we would + only have to traverse the list, and copy those elements + into the result array. In the case of datatypes which fit + in one of the integer types we could also cache the + value instead of a pointer to it. + This approach might be bad from the point of view of + cache behavior in the case where our cache is not big + enough to hold all elements that have to be copied. */ + + const GFC_LOGICAL_1 *m = mptr; + + total = 0; + if (zero_sized) + m = NULL; + + while (m) + { + /* Test this element. */ + if (*m) + total++; + + /* Advance to the next element. */ + m += mstride[0]; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it + and increment the next dimension. */ + count[n] = 0; + /* We could precalculate this product, but this is a + less frequently used path so probably not worth + it. */ + m -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + m = NULL; + break; + } + else + { + count[n]++; + m += mstride[n]; + } + } + } + } + + if (ret->data == NULL) + { + /* Setup the array descriptor. */ + ret->dim[0].lbound = 0; + ret->dim[0].ubound = total - 1; + ret->dim[0].stride = 1; + + ret->offset = 0; + if (total == 0) + { + /* In this case, nothing remains to be done. */ + ret->data = internal_malloc_size (1); + return; + } + else + ret->data = internal_malloc_size (sizeof ('rtype_name`) * total); + } + else + { + /* We come here because of range checking. */ + index_type ret_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + if (total != ret_extent) + runtime_error ("Incorrect extent in return value of PACK intrinsic;" + " is %ld, should be %ld", (long int) total, + (long int) ret_extent); + } + } + + rstride0 = ret->dim[0].stride; + if (rstride0 == 0) + rstride0 = 1; + sstride0 = sstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + + while (sptr && mptr) + { + /* Test this element. */ + if (*mptr) + { + /* Add it. */ + *rptr = *sptr; + rptr += rstride0; + } + /* Advance to the next element. */ + sptr += sstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + mptr += mstride[n]; + } + } + } + + /* Add any remaining elements from VECTOR. */ + if (vector) + { + n = vector->dim[0].ubound + 1 - vector->dim[0].lbound; + nelem = ((rptr - ret->data) / rstride0); + if (n > nelem) + { + sstride0 = vector->dim[0].stride; + if (sstride0 == 0) + sstride0 = 1; + + sptr = vector->data + sstride0 * nelem; + n -= nelem; + while (n--) + { + *rptr = *sptr; + rptr += rstride0; + sptr += sstride0; + } + } + } +} + +#endif +' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/pow.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/pow.m4 new file mode 100644 index 0000000000..3814f87fea --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/pow.m4 @@ -0,0 +1,83 @@ +`/* Support routines for the intrinsic power (**) operator. + Copyright 2004, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h"' + +include(iparm.m4)dnl + +/* Use Binary Method to calculate the powi. This is not an optimal but + a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of + Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art + of Computer Programming", 3rd Edition, 1998. */ + +`#if defined (HAVE_'rtype_name`) && defined (HAVE_'atype_name`)' + +rtype_name `pow_'rtype_code`_'atype_code` ('rtype_name` a, 'atype_name` b); +export_proto(pow_'rtype_code`_'atype_code`); + +'rtype_name` +pow_'rtype_code`_'atype_code` ('rtype_name` a, 'atype_name` b) +{ + 'rtype_name` pow, x; + 'atype_name` n; + GFC_UINTEGER_'atype_kind` u; + + n = b; + x = a; + pow = 1; + if (n != 0) + { + if (n < 0) + { +'ifelse(rtype_letter,i,`dnl + if (x == 1) + return 1; + if (x == -1) + return (n & 1) ? -1 : 1; + return (x == 0) ? 1 / x : 0; +',` + u = -n; + x = pow / x; +')dnl +` } + else + { + u = n; + } + for (;;) + { + if (u & 1) + pow *= x; + u >>= 1; + if (u) + x *= x; + else + break; + } + } + return pow; +} + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/product.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/product.m4 new file mode 100644 index 0000000000..669b106e0c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/product.m4 @@ -0,0 +1,46 @@ +`/* Implementation of the PRODUCT intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include ' + +include(iparm.m4)dnl +include(ifunction.m4)dnl + +`#if defined (HAVE_'atype_name`) && defined (HAVE_'rtype_name`)' + +ARRAY_FUNCTION(1, +` result = 1;', +` result *= *src;') + +MASKED_ARRAY_FUNCTION(1, +` result = 1;', +` if (*msrc) + result *= *src;') + +SCALAR_ARRAY_FUNCTION(1) + +`#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/reshape.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/reshape.m4 new file mode 100644 index 0000000000..5240e38663 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/reshape.m4 @@ -0,0 +1,356 @@ +`/* Implementation of the RESHAPE + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include ' + +include(iparm.m4)dnl + +`#if defined (HAVE_'rtype_name`) + +typedef GFC_ARRAY_DESCRIPTOR(1, 'index_type`) 'shape_type`;' + +dnl For integer routines, only the kind (ie size) is used to name the +dnl function. The same function will be used for integer and logical +dnl arrays of the same kind. + +`extern void reshape_'rtype_ccode` ('rtype` * const restrict, + 'rtype` * const restrict, + 'shape_type` * const restrict, + 'rtype` * const restrict, + 'shape_type` * const restrict); +export_proto(reshape_'rtype_ccode`); + +void +reshape_'rtype_ccode` ('rtype` * const restrict ret, + 'rtype` * const restrict source, + 'shape_type` * const restrict shape, + 'rtype` * const restrict pad, + 'shape_type` * const restrict order) +{ + /* r.* indicates the return array. */ + index_type rcount[GFC_MAX_DIMENSIONS]; + index_type rextent[GFC_MAX_DIMENSIONS]; + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdim; + index_type rsize; + index_type rs; + index_type rex; + 'rtype_name` *rptr; + /* s.* indicates the source array. */ + index_type scount[GFC_MAX_DIMENSIONS]; + index_type sextent[GFC_MAX_DIMENSIONS]; + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type sdim; + index_type ssize; + const 'rtype_name` *sptr; + /* p.* indicates the pad array. */ + index_type pcount[GFC_MAX_DIMENSIONS]; + index_type pextent[GFC_MAX_DIMENSIONS]; + index_type pstride[GFC_MAX_DIMENSIONS]; + index_type pdim; + index_type psize; + const 'rtype_name` *pptr; + + const 'rtype_name` *src; + int n; + int dim; + int sempty, pempty, shape_empty; + index_type shape_data[GFC_MAX_DIMENSIONS]; + + rdim = shape->dim[0].ubound - shape->dim[0].lbound + 1; + if (rdim != GFC_DESCRIPTOR_RANK(ret)) + runtime_error("rank of return array incorrect in RESHAPE intrinsic"); + + shape_empty = 0; + + for (n = 0; n < rdim; n++) + { + shape_data[n] = shape->data[n * shape->dim[0].stride]; + if (shape_data[n] <= 0) + { + shape_data[n] = 0; + shape_empty = 1; + } + } + + if (ret->data == NULL) + { + rs = 1; + for (n = 0; n < rdim; n++) + { + ret->dim[n].lbound = 0; + rex = shape_data[n]; + ret->dim[n].ubound = rex - 1; + ret->dim[n].stride = rs; + rs *= rex; + } + ret->offset = 0; + ret->data = internal_malloc_size ( rs * sizeof ('rtype_name`)); + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rdim; + } + + if (shape_empty) + return; + + if (pad) + { + pdim = GFC_DESCRIPTOR_RANK (pad); + psize = 1; + pempty = 0; + for (n = 0; n < pdim; n++) + { + pcount[n] = 0; + pstride[n] = pad->dim[n].stride; + pextent[n] = pad->dim[n].ubound + 1 - pad->dim[n].lbound; + if (pextent[n] <= 0) + { + pempty = 1; + pextent[n] = 0; + } + + if (psize == pstride[n]) + psize *= pextent[n]; + else + psize = 0; + } + pptr = pad->data; + } + else + { + pdim = 0; + psize = 1; + pempty = 1; + pptr = NULL; + } + + if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, source_extent; + + rs = 1; + for (n = 0; n < rdim; n++) + { + rs *= shape_data[n]; + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (ret_extent != shape_data[n]) + runtime_error("Incorrect extent in return value of RESHAPE" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) shape_data[n]); + } + + source_extent = 1; + sdim = GFC_DESCRIPTOR_RANK (source); + for (n = 0; n < sdim; n++) + { + index_type se; + se = source->dim[n].ubound + 1 - source->dim[0].lbound; + source_extent *= se > 0 ? se : 0; + } + + if (rs > source_extent && (!pad || pempty)) + runtime_error("Incorrect size in SOURCE argument to RESHAPE" + " intrinsic: is %ld, should be %ld", + (long int) source_extent, (long int) rs); + + if (order) + { + int seen[GFC_MAX_DIMENSIONS]; + index_type v; + + for (n = 0; n < rdim; n++) + seen[n] = 0; + + for (n = 0; n < rdim; n++) + { + v = order->data[n * order->dim[0].stride] - 1; + + if (v < 0 || v >= rdim) + runtime_error("Value %ld out of range in ORDER argument" + " to RESHAPE intrinsic", (long int) v + 1); + + if (seen[v] != 0) + runtime_error("Duplicate value %ld in ORDER argument to" + " RESHAPE intrinsic", (long int) v + 1); + + seen[v] = 1; + } + } + } + + rsize = 1; + for (n = 0; n < rdim; n++) + { + if (order) + dim = order->data[n * order->dim[0].stride] - 1; + else + dim = n; + + rcount[n] = 0; + rstride[n] = ret->dim[dim].stride; + rextent[n] = ret->dim[dim].ubound + 1 - ret->dim[dim].lbound; + if (rextent[n] < 0) + rextent[n] = 0; + + if (rextent[n] != shape_data[dim]) + runtime_error ("shape and target do not conform"); + + if (rsize == rstride[n]) + rsize *= rextent[n]; + else + rsize = 0; + if (rextent[n] <= 0) + return; + } + + sdim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + sempty = 0; + for (n = 0; n < sdim; n++) + { + scount[n] = 0; + sstride[n] = source->dim[n].stride; + sextent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (sextent[n] <= 0) + { + sempty = 1; + sextent[n] = 0; + } + + if (ssize == sstride[n]) + ssize *= sextent[n]; + else + ssize = 0; + } + + if (rsize != 0 && ssize != 0 && psize != 0) + { + rsize *= sizeof ('rtype_name`); + ssize *= sizeof ('rtype_name`); + psize *= sizeof ('rtype_name`); + reshape_packed ((char *)ret->data, rsize, (char *)source->data, + ssize, pad ? (char *)pad->data : NULL, psize); + return; + } + rptr = ret->data; + src = sptr = source->data; + rstride0 = rstride[0]; + sstride0 = sstride[0]; + + if (sempty && pempty) + abort (); + + if (sempty) + { + /* Pretend we are using the pad array the first time around, too. */ + src = pptr; + sptr = pptr; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = pstride[0]; + } + } + + while (rptr) + { + /* Select between the source and pad arrays. */ + *rptr = *src; + /* Advance to the next element. */ + rptr += rstride0; + src += sstride0; + rcount[0]++; + scount[0]++; + + /* Advance to the next destination element. */ + n = 0; + while (rcount[n] == rextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + rcount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * rextent[n]; + n++; + if (n == rdim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + rcount[n]++; + rptr += rstride[n]; + } + } + /* Advance to the next source element. */ + n = 0; + while (scount[n] == sextent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + scount[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= sstride[n] * sextent[n]; + n++; + if (n == sdim) + { + if (sptr && pad) + { + /* Switch to the pad array. */ + sptr = NULL; + sdim = pdim; + for (dim = 0; dim < pdim; dim++) + { + scount[dim] = pcount[dim]; + sextent[dim] = pextent[dim]; + sstride[dim] = pstride[dim]; + sstride0 = sstride[0]; + } + } + /* We now start again from the beginning of the pad array. */ + src = pptr; + break; + } + else + { + scount[n]++; + src += sstride[n]; + } + } + } +} + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/rrspacing.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/rrspacing.m4 new file mode 100644 index 0000000000..f66bb3b758 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/rrspacing.m4 @@ -0,0 +1,52 @@ +`/* Implementation of the RRSPACING intrinsic + Copyright 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h"' + +include(`mtype.m4')dnl + +`#if defined (HAVE_'real_type`) && defined (HAVE_FABS'Q`) && defined (HAVE_FREXP'Q`) + +extern 'real_type` rrspacing_r'kind` ('real_type` s, int p); +export_proto(rrspacing_r'kind`); + +'real_type` +rrspacing_r'kind` ('real_type` s, int p) +{ + int e; + 'real_type` x; + x = fabs'q` (s); + if (x == 0.) + return 0.; + frexp'q` (s, &e); +#if defined (HAVE_LDEXP'Q`) + return ldexp'q` (x, p - e); +#else + return scalbn'q` (x, p - e); +#endif + +} + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/set_exponent.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/set_exponent.m4 new file mode 100644 index 0000000000..84200fd339 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/set_exponent.m4 @@ -0,0 +1,42 @@ +`/* Implementation of the SET_EXPONENT intrinsic + Copyright 2003, 2007, 2009 Free Software Foundation, Inc. + Contributed by Richard Henderson . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h"' + +include(`mtype.m4')dnl + +`#if defined (HAVE_'real_type`) && defined (HAVE_SCALBN'Q`) && defined (HAVE_FREXP'Q`) + +extern 'real_type` set_exponent_r'kind` ('real_type` s, GFC_INTEGER_4 i); +export_proto(set_exponent_r'kind`); + +'real_type` +set_exponent_r'kind` ('real_type` s, GFC_INTEGER_4 i) +{ + int dummy_exp; + return scalbn'q` (frexp'q` (s, &dummy_exp), i); +} + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/shape.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/shape.m4 new file mode 100644 index 0000000000..b189f804e5 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/shape.m4 @@ -0,0 +1,58 @@ +`/* Implementation of the SHAPE intrinsic + Copyright 2002, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include ' + +include(iparm.m4)dnl + +`#if defined (HAVE_'rtype_name`) + +extern void shape_'rtype_kind` ('rtype` * const restrict ret, + const 'rtype` * const restrict array); +export_proto(shape_'rtype_kind`); + +void +shape_'rtype_kind` ('rtype` * const restrict ret, + const 'rtype` * const restrict array) +{ + int n; + index_type stride; + index_type extent; + + stride = ret->dim[0].stride; + + if (ret->dim[0].ubound < ret->dim[0].lbound) + return; + + for (n = 0; n < GFC_DESCRIPTOR_RANK (array); n++) + { + extent = array->dim[n].ubound + 1 - array->dim[n].lbound; + ret->data[n * stride] = extent > 0 ? extent : 0 ; + } +} + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/spacing.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/spacing.m4 new file mode 100644 index 0000000000..62fa739c78 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/spacing.m4 @@ -0,0 +1,51 @@ +`/* Implementation of the SPACING intrinsic + Copyright 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Steven G. Kargl + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h"' + +include(`mtype.m4')dnl + +`#if defined (HAVE_'real_type`) && defined (HAVE_FREXP'Q`) + +extern 'real_type` spacing_r'kind` ('real_type` s, int p, int emin, 'real_type` tiny); +export_proto(spacing_r'kind`); + +'real_type` +spacing_r'kind` ('real_type` s, int p, int emin, 'real_type` tiny) +{ + int e; + if (s == 0.) + return tiny; + frexp'q` (s, &e); + e = e - p; + e = e > emin ? e : emin; +#if defined (HAVE_LDEXP'Q`) + return ldexp'q` (1., e); +#else + return scalbn'q` (1., e); +#endif +} + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/specific.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/specific.m4 new file mode 100644 index 0000000000..ebc89839ad --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/specific.m4 @@ -0,0 +1,43 @@ +include(head.m4) +define(atype_code,regexp(file,`_\([ircl][0-9]+\).[fF]90',`\1'))dnl +define(atype_letter,substr(atype_code, 0, 1))dnl +define(atype_kind,substr(atype_code, 1))dnl +define(get_typename2, `$1 (kind=$2)')dnl +define(get_typename, `get_typename2(ifelse($1,i,integer,ifelse($1,r,real,ifelse($1,l,logical,ifelse($1,c,complex,unknown)))),`$2')')dnl +define(atype_name, get_typename(atype_letter,atype_kind))dnl +define(name, regexp(regexp(file, `[^/]*$', `\&'), `^_\([^_]*\)_', `\1'))dnl +define(rtype_name,get_typename(ifelse(name,abs,ifelse(atype_letter,c,r,atype_letter),ifelse(name,aimag,ifelse(atype_letter,c,r,atype_letter),atype_letter)),atype_kind))dnl +define(function_name,ifelse(name,conjg,`_gfortran_specific__conjg_'atype_kind,`_gfortran_specific__'name`_'atype_code))dnl + +define(type,ifelse(atype_letter,l,LOGICAL,ifelse(atype_letter,i,INTEGER,ifelse(atype_letter,r,REAL,ifelse(atype_letter,c,COMPLEX,UNKNOW)))))dnl +define(Q,ifelse(atype_kind,4,F,ifelse(atype_kind,8,`',ifelse(atype_kind,10,L,ifelse(atype_kind,16,L,`_'atype_kind)))))dnl + +dnl A few specifics require a function other than their name, or +dnl nothing. The list is currently: +dnl - integer and logical specifics require no libm function +dnl - AINT requires the trunc() family functions +dnl - ANINT requires round() +dnl - AIMAG, CONJG, DIM, SIGN require no libm function +define(needed,ifelse(atype_letter,i,`none',ifelse(atype_letter,l,`none',ifelse(name,aint,trunc,ifelse(name,anint,round,ifelse(name,aimag,none,ifelse(name,conjg,none,ifelse(name,dim,none,ifelse(name,sign,none,ifelse(name,abs,fabs,name))))))))))dnl +define(prefix,ifelse(atype_letter,c,C,`'))dnl + +dnl Special case for fabs, for which the corresponding complex function +dnl is not cfabs but cabs. +define(NEEDED,translit(ifelse(prefix`'needed,`Cfabs',`abs',needed),`a-z',`A-Z'))dnl + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +`#if defined (HAVE_GFC_'type`_'atype_kind`)' +ifelse(NEEDED,NONE,`',`#ifdef HAVE_'prefix`'NEEDED`'Q) + +elemental function function_name (parm) + atype_name, intent (in) :: parm + rtype_name :: function_name + + function_name = name (parm) +end function + +ifelse(NEEDED,NONE,`',`#endif') +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/specific2.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/specific2.m4 new file mode 100644 index 0000000000..d05e8db143 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/specific2.m4 @@ -0,0 +1,30 @@ +include(head.m4) +define(atype_code,regexp(file,`_\([ircl][0-9]+\).[fF]90',`\1'))dnl +define(atype_letter,substr(atype_code, 0, 1))dnl +define(atype_kind,substr(atype_code, 1))dnl +define(get_typename2, `$1 (kind=$2)')dnl +define(get_typename, `get_typename2(ifelse($1,i,integer,ifelse($1,r,real,ifelse($1,l,logical,ifelse($1,c,complex,unknown)))),`$2')')dnl +define(atype_name, get_typename(atype_letter,atype_kind))dnl +define(name, regexp(regexp(file, `[^/]*$', `\&'), `^_\([^_]*\)_', `\1'))dnl +define(function_name,`_gfortran_specific__'name`_'atype_code)dnl + +define(Q,ifelse(atype_kind,4,F,ifelse(atype_kind,8,`',ifelse(atype_kind,10,L,ifelse(atype_kind,16,L,`_'atype_kind)))))dnl + +#include "config.h" +#include "kinds.inc" +#include "c99_protos.inc" + +`#if defined (HAVE_GFC_'ifelse(atype_letter,l,LOGICAL,ifelse(atype_letter,i,INTEGER,ifelse(atype_letter,r,REAL,ifelse(atype_letter,c,COMPLEX,UNKNOW))))`_'atype_kind`)' + +ifelse(name,atan2,`#ifdef HAVE_ATAN2'Q,) + +elemental function function_name (p1, p2) + atype_name, intent (in) :: p1, p2 + atype_name :: function_name + + function_name = name (p1, p2) +end function + +ifelse(name,atan2,`#endif',) + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/spread.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/spread.m4 new file mode 100644 index 0000000000..84ea00c330 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/spread.m4 @@ -0,0 +1,274 @@ +`/* Special implementation of the SPREAD intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + spread_generic.c written by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include ' + +include(iparm.m4)dnl + +`#if defined (HAVE_'rtype_name`) + +void +spread_'rtype_code` ('rtype` *ret, const 'rtype` *source, + const index_type along, const index_type pncopies) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rdelta = 0; + index_type rrank; + index_type rs; + 'rtype_name` *rptr; + 'rtype_name` * restrict dest; + /* s.* indicates the source array. */ + index_type sstride[GFC_MAX_DIMENSIONS]; + index_type sstride0; + index_type srank; + const 'rtype_name` *sptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + index_type ncopies; + + srank = GFC_DESCRIPTOR_RANK(source); + + rrank = srank + 1; + if (rrank > GFC_MAX_DIMENSIONS) + runtime_error ("return rank too large in spread()"); + + if (along > rrank) + runtime_error ("dim outside of rank in spread()"); + + ncopies = pncopies; + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + ret->dtype = (source->dtype & ~GFC_DTYPE_RANK_MASK) | rrank; + dim = 0; + rs = 1; + for (n = 0; n < rrank; n++) + { + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + if (n == along - 1) + { + ret->dim[n].ubound = ncopies - 1; + rdelta = rs; + rs *= ncopies; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = rs; + + ret->dim[n].ubound = extent[dim]-1; + rs *= extent[dim]; + dim++; + } + } + ret->offset = 0; + if (rs > 0) + ret->data = internal_malloc_size (rs * sizeof('rtype_name`)); + else + { + ret->data = internal_malloc_size (1); + return; + } + } + else + { + int zero_sized; + + zero_sized = 0; + + dim = 0; + if (GFC_DESCRIPTOR_RANK(ret) != rrank) + runtime_error ("rank mismatch in spread()"); + + if (unlikely (compile_options.bounds_check)) + { + for (n = 0; n < rrank; n++) + { + index_type ret_extent; + + ret_extent = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + + if (ret_extent != ncopies) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, (long int) ncopies); + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (ret_extent != extent[dim]) + runtime_error("Incorrect extent in return value of SPREAD" + " intrinsic in dimension %ld: is %ld," + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); + + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + else + { + for (n = 0; n < rrank; n++) + { + if (n == along - 1) + { + rdelta = ret->dim[n].stride; + } + else + { + count[dim] = 0; + extent[dim] = source->dim[dim].ubound + 1 + - source->dim[dim].lbound; + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = source->dim[dim].stride; + rstride[dim] = ret->dim[n].stride; + dim++; + } + } + } + + if (zero_sized) + return; + + if (sstride[0] == 0) + sstride[0] = 1; + } + sstride0 = sstride[0]; + rstride0 = rstride[0]; + rptr = ret->data; + sptr = source->data; + + while (sptr) + { + /* Spread this element. */ + dest = rptr; + for (n = 0; n < ncopies; n++) + { + *dest = *sptr; + dest += rdelta; + } + /* Advance to the next element. */ + sptr += sstride0; + rptr += rstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + sptr -= sstride[n] * extent[n]; + rptr -= rstride[n] * extent[n]; + n++; + if (n >= srank) + { + /* Break out of the loop. */ + sptr = NULL; + break; + } + else + { + count[n]++; + sptr += sstride[n]; + rptr += rstride[n]; + } + } + } +} + +/* This version of spread_internal treats the special case of a scalar + source. This is much simpler than the more general case above. */ + +void +spread_scalar_'rtype_code` ('rtype` *ret, const 'rtype_name` *source, + const index_type along, const index_type pncopies) +{ + int n; + int ncopies = pncopies; + 'rtype_name` * restrict dest; + index_type stride; + + if (GFC_DESCRIPTOR_RANK (ret) != 1) + runtime_error ("incorrect destination rank in spread()"); + + if (along > 1) + runtime_error ("dim outside of rank in spread()"); + + if (ret->data == NULL) + { + ret->data = internal_malloc_size (ncopies * sizeof ('rtype_name`)); + ret->offset = 0; + ret->dim[0].stride = 1; + ret->dim[0].lbound = 0; + ret->dim[0].ubound = ncopies - 1; + } + else + { + if (ncopies - 1 > (ret->dim[0].ubound - ret->dim[0].lbound) + / ret->dim[0].stride) + runtime_error ("dim too large in spread()"); + } + + dest = ret->data; + stride = ret->dim[0].stride; + + for (n = 0; n < ncopies; n++) + { + *dest = *source; + dest += stride; + } +} + +#endif +' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/sum.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/sum.m4 new file mode 100644 index 0000000000..b502c6e7d8 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/sum.m4 @@ -0,0 +1,46 @@ +`/* Implementation of the SUM intrinsic + Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include ' + +include(iparm.m4)dnl +include(ifunction.m4)dnl + +`#if defined (HAVE_'atype_name`) && defined (HAVE_'rtype_name`)' + +ARRAY_FUNCTION(0, +` result = 0;', +` result += *src;') + +MASKED_ARRAY_FUNCTION(0, +` result = 0;', +` if (*msrc) + result += *src;') + +SCALAR_ARRAY_FUNCTION(0) + +#endif diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/transpose.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/transpose.m4 new file mode 100644 index 0000000000..8c50767fc9 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/transpose.m4 @@ -0,0 +1,117 @@ +`/* Implementation of the TRANSPOSE intrinsic + Copyright 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Tobias Schlüter + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include ' + +include(iparm.m4)dnl + +`#if defined (HAVE_'rtype_name`) + +extern void transpose_'rtype_code` ('rtype` * const restrict ret, + 'rtype` * const restrict source); +export_proto(transpose_'rtype_code`); + +void +transpose_'rtype_code` ('rtype` * const restrict ret, + 'rtype` * const restrict source) +{ + /* r.* indicates the return array. */ + index_type rxstride, rystride; + 'rtype_name` * restrict rptr; + /* s.* indicates the source array. */ + index_type sxstride, systride; + const 'rtype_name` *sptr; + + index_type xcount, ycount; + index_type x, y; + + assert (GFC_DESCRIPTOR_RANK (source) == 2); + + if (ret->data == NULL) + { + assert (GFC_DESCRIPTOR_RANK (ret) == 2); + assert (ret->dtype == source->dtype); + + ret->dim[0].lbound = 0; + ret->dim[0].ubound = source->dim[1].ubound - source->dim[1].lbound; + ret->dim[0].stride = 1; + + ret->dim[1].lbound = 0; + ret->dim[1].ubound = source->dim[0].ubound - source->dim[0].lbound; + ret->dim[1].stride = ret->dim[0].ubound+1; + + ret->data = internal_malloc_size (sizeof ('rtype_name`) * size0 ((array_t *) ret)); + ret->offset = 0; + } else if (unlikely (compile_options.bounds_check)) + { + index_type ret_extent, src_extent; + + ret_extent = ret->dim[0].ubound + 1 - ret->dim[0].lbound; + src_extent = source->dim[1].ubound + 1 - source->dim[1].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 1: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + ret_extent = ret->dim[1].ubound + 1 - ret->dim[1].lbound; + src_extent = source->dim[0].ubound + 1 - source->dim[0].lbound; + + if (src_extent != ret_extent) + runtime_error ("Incorrect extent in return value of TRANSPOSE" + " intrinsic in dimension 2: is %ld," + " should be %ld", (long int) src_extent, + (long int) ret_extent); + + } + + sxstride = source->dim[0].stride; + systride = source->dim[1].stride; + xcount = source->dim[0].ubound + 1 - source->dim[0].lbound; + ycount = source->dim[1].ubound + 1 - source->dim[1].lbound; + + rxstride = ret->dim[0].stride; + rystride = ret->dim[1].stride; + + rptr = ret->data; + sptr = source->data; + + for (y=0; y < ycount; y++) + { + for (x=0; x < xcount; x++) + { + *rptr = *sptr; + + sptr += sxstride; + rptr += rystride; + } + sptr += systride - (sxstride * xcount); + rptr += rxstride - (rystride * xcount); + } +} + +#endif' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/types.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/types.m4 new file mode 100644 index 0000000000..cb808290c0 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/types.m4 @@ -0,0 +1,4 @@ +define(get_typename2, `GFC_$1_$2')dnl +define(get_typename, `get_typename2(ifelse($1,i,INTEGER,ifelse($1,r,REAL,ifelse($1,l,LOGICAL,ifelse($1,c,COMPLEX,unknown)))),`$2')')dnl +define(get_arraytype, `gfc_array_$1$2')dnl +define(name, regexp(regexp(file, `[^/]*$', `\&'), `^\([^_]*\)_', `\1'))dnl diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/unpack.m4 b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/unpack.m4 new file mode 100644 index 0000000000..a26128c783 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/unpack.m4 @@ -0,0 +1,334 @@ +`/* Specific implementation of the UNPACK intrinsic + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Thomas Koenig , based on + unpack_generic.c by Paul Brook . + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Ligbfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include ' + +include(iparm.m4)dnl + +`#if defined (HAVE_'rtype_name`) + +void +unpack0_'rtype_code` ('rtype` *ret, const 'rtype` *vector, + const gfc_array_l1 *mask, const 'rtype_name` *fptr) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + 'rtype_name` * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + 'rtype_name` *vptr; + /* Value for field, this is constant. */ + const 'rtype_name` fval = *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof ('rtype_name`)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = fval; + } + /* Advance to the next element. */ + rptr += rstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + mptr += mstride[n]; + } + } + } +} + +void +unpack1_'rtype_code` ('rtype` *ret, const 'rtype` *vector, + const gfc_array_l1 *mask, const 'rtype` *field) +{ + /* r.* indicates the return array. */ + index_type rstride[GFC_MAX_DIMENSIONS]; + index_type rstride0; + index_type rs; + 'rtype_name` * restrict rptr; + /* v.* indicates the vector array. */ + index_type vstride0; + 'rtype_name` *vptr; + /* f.* indicates the field array. */ + index_type fstride[GFC_MAX_DIMENSIONS]; + index_type fstride0; + const 'rtype_name` *fptr; + /* m.* indicates the mask array. */ + index_type mstride[GFC_MAX_DIMENSIONS]; + index_type mstride0; + const GFC_LOGICAL_1 *mptr; + + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type n; + index_type dim; + + int empty; + int mask_kind; + + empty = 0; + + mptr = mask->data; + + /* Use the same loop for all logical types, by using GFC_LOGICAL_1 + and using shifting to address size and endian issues. */ + + mask_kind = GFC_DESCRIPTOR_SIZE (mask); + + if (mask_kind == 1 || mask_kind == 2 || mask_kind == 4 || mask_kind == 8 +#ifdef HAVE_GFC_LOGICAL_16 + || mask_kind == 16 +#endif + ) + { + /* Do not convert a NULL pointer as we use test for NULL below. */ + if (mptr) + mptr = GFOR_POINTER_TO_L1 (mptr, mask_kind); + } + else + runtime_error ("Funny sized logical array"); + + if (ret->data == NULL) + { + /* The front end has signalled that we need to populate the + return array descriptor. */ + dim = GFC_DESCRIPTOR_RANK (mask); + rs = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + ret->dim[n].stride = rs; + ret->dim[n].lbound = 0; + ret->dim[n].ubound = mask->dim[n].ubound - mask->dim[n].lbound; + extent[n] = ret->dim[n].ubound + 1; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + rs *= extent[n]; + } + ret->offset = 0; + ret->data = internal_malloc_size (rs * sizeof ('rtype_name`)); + } + else + { + dim = GFC_DESCRIPTOR_RANK (ret); + for (n = 0; n < dim; n++) + { + count[n] = 0; + extent[n] = ret->dim[n].ubound + 1 - ret->dim[n].lbound; + empty = empty || extent[n] <= 0; + rstride[n] = ret->dim[n].stride; + fstride[n] = field->dim[n].stride; + mstride[n] = mask->dim[n].stride * mask_kind; + } + if (rstride[0] == 0) + rstride[0] = 1; + } + + if (empty) + return; + + if (fstride[0] == 0) + fstride[0] = 1; + if (mstride[0] == 0) + mstride[0] = 1; + + vstride0 = vector->dim[0].stride; + if (vstride0 == 0) + vstride0 = 1; + rstride0 = rstride[0]; + fstride0 = fstride[0]; + mstride0 = mstride[0]; + rptr = ret->data; + fptr = field->data; + vptr = vector->data; + + while (rptr) + { + if (*mptr) + { + /* From vector. */ + *rptr = *vptr; + vptr += vstride0; + } + else + { + /* From field. */ + *rptr = *fptr; + } + /* Advance to the next element. */ + rptr += rstride0; + fptr += fstride0; + mptr += mstride0; + count[0]++; + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + rptr -= rstride[n] * extent[n]; + fptr -= fstride[n] * extent[n]; + mptr -= mstride[n] * extent[n]; + n++; + if (n >= dim) + { + /* Break out of the loop. */ + rptr = NULL; + break; + } + else + { + count[n]++; + rptr += rstride[n]; + fptr += fstride[n]; + mptr += mstride[n]; + } + } + } +} + +#endif +' diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/mk-kinds-h.sh b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/mk-kinds-h.sh new file mode 100755 index 0000000000..c5d20fe12c --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/mk-kinds-h.sh @@ -0,0 +1,92 @@ +#!/bin/sh +LC_ALL=C +export LC_ALL + +compile="$1" + +# Possible types must be listed in ascending order +possible_integer_kinds="1 2 4 8 16" +possible_real_kinds="4 8 10 16" + + +largest="" +smallest="" +for k in $possible_integer_kinds; do + echo " integer (kind=$k) :: i" > tmp$$.f90 + echo " i = 1_$k" >> tmp$$.f90 + echo " end" >> tmp$$.f90 + if $compile -S tmp$$.f90 > /dev/null 2>&1; then + s=`expr 8 \* $k` + largest="$k" + + if [ $s -eq 128 ]; then + prefix="__" + else + prefix="" + fi + + if [ "$smallest" = "" ]; then + smallest="$k" + fi + + echo "typedef ${prefix}int${s}_t GFC_INTEGER_${k};" + echo "typedef ${prefix}uint${s}_t GFC_UINTEGER_${k};" + echo "typedef GFC_INTEGER_${k} GFC_LOGICAL_${k};" + echo "#define HAVE_GFC_LOGICAL_${k}" + echo "#define HAVE_GFC_INTEGER_${k}" + echo "" + fi + rm -f tmp$$.* +done + +echo "#define GFC_INTEGER_LARGEST GFC_INTEGER_${largest}" +echo "#define GFC_UINTEGER_LARGEST GFC_UINTEGER_${largest}" +echo "#define GFC_DEFAULT_CHAR ${smallest}" +echo "" + + +for k in $possible_real_kinds; do + echo " real (kind=$k) :: x" > tmp$$.f90 + echo " x = 1.0_$k" >> tmp$$.f90 + echo " end" >> tmp$$.f90 + if $compile -S tmp$$.f90 > /dev/null 2>&1; then + case $k in + 4) ctype="float" ; suffix="f" ;; + 8) ctype="double" ; suffix="" ;; + 10) ctype="long double" ; suffix="l" ;; + 16) ctype="long double" ; suffix="l" ;; + *) echo "$0: Unknown type" >&2 ; exit 1 ;; + esac + + # Check for the value of HUGE + echo "print *, huge(0._$k) ; end" > tmq$$.f90 + huge=`$compile -S -fdump-parse-tree tmq$$.f90 | grep TRANSFER \ + | sed 's/ *TRANSFER *//' | sed 's/_.*//'` + rm -f tmq$$.* + + # Check for the value of DIGITS + echo "print *, digits(0._$k) ; end" > tmq$$.f90 + digits=`$compile -S -fdump-parse-tree tmq$$.f90 | grep TRANSFER \ + | sed 's/ *TRANSFER *//'` + rm -f tmq$$.* + + # Check for the value of RADIX + echo "print *, radix(0._$k) ; end" > tmq$$.f90 + radix=`$compile -S -fdump-parse-tree tmq$$.f90 | grep TRANSFER \ + | sed 's/ *TRANSFER *//'` + rm -f tmq$$.* + + # Output the information we've gathered + echo "typedef ${ctype} GFC_REAL_${k};" + echo "typedef complex ${ctype} GFC_COMPLEX_${k};" + echo "#define HAVE_GFC_REAL_${k}" + echo "#define HAVE_GFC_COMPLEX_${k}" + echo "#define GFC_REAL_${k}_HUGE ${huge}${suffix}" + echo "#define GFC_REAL_${k}_DIGITS ${digits}" + echo "#define GFC_REAL_${k}_RADIX ${radix}" + echo "" + fi + rm -f tmp$$.* +done + +exit 0 diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/mk-sik-inc.sh b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/mk-sik-inc.sh new file mode 100755 index 0000000000..68c042f68b --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/mk-sik-inc.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +compile="$1" +kinds="" +possible_kinds="1 2 4 8 16" +c=0 + +for k in $possible_kinds; do + echo " integer (kind=$k) :: x" > tmp$$.f90 + echo " x = 1_$k" >> tmp$$.f90 + echo " end" >> tmp$$.f90 + if $compile -S tmp$$.f90 > /dev/null 2>&1; then + kinds="$kinds $k" + c=`expr $c + 1` + fi + rm -f tmp$$.* +done + +echo " integer, parameter :: c = $c" +echo " type (int_info), parameter :: int_infos(c) = (/ &" + +i=0 +for k in $kinds; do + # echo -n is not portable + str=" int_info ($k, range(0_$k))" + i=`expr $i + 1` + if [ $i -lt $c ]; then + echo "$str, &" + else + echo "$str /)" + fi +done + +exit 0 diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/mk-srk-inc.sh b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/mk-srk-inc.sh new file mode 100755 index 0000000000..10c428f02d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/mk-srk-inc.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +compile="$1" +kinds="" +possible_kinds="4 8 10 16" +c=0 + +for k in $possible_kinds; do + echo " real (kind=$k) :: x" > tmp$$.f90 + echo " x = 1.0_$k" >> tmp$$.f90 + echo " end" >> tmp$$.f90 + if $compile -S tmp$$.f90 > /dev/null 2>&1; then + kinds="$kinds $k" + c=`expr $c + 1` + fi + rm -f tmp$$.* +done + +echo " integer, parameter :: c = $c" +echo " type (real_info), parameter :: real_infos(c) = (/ &" + +i=0 +for k in $kinds; do + # echo -n is not portable + str=" real_info ($k, precision(0.0_$k), range(0.0_$k))" + i=`expr $i + 1` + if [ $i -lt $c ]; then + echo "$str, &" + else + echo "$str /)" + fi +done + +exit 0 diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/backtrace.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/backtrace.c new file mode 100644 index 0000000000..9788673bea --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/backtrace.c @@ -0,0 +1,326 @@ +/* Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by François-Xavier Coudert + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include + +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef HAVE_INTTYPES_H +#include +#endif + +#ifdef HAVE_UNISTD_H +#include +#endif + +#ifdef HAVE_EXECINFO_H +#include +#endif + +#ifdef HAVE_SYS_WAIT_H +#include +#endif + +#include + + +/* Macros for common sets of capabilities: can we fork and exec, can + we use glibc-style backtrace functions, and can we use pipes. */ +#define CAN_FORK (defined(HAVE_FORK) && defined(HAVE_EXECVP) \ + && defined(HAVE_WAIT)) +#define GLIBC_BACKTRACE (defined(HAVE_BACKTRACE) \ + && defined(HAVE_BACKTRACE_SYMBOLS)) +#define CAN_PIPE (CAN_FORK && defined(HAVE_PIPE) \ + && defined(HAVE_DUP2) && defined(HAVE_FDOPEN) \ + && defined(HAVE_CLOSE)) + + +#if GLIBC_BACKTRACE && CAN_PIPE +static char * +local_strcasestr (const char *s1, const char *s2) +{ +#ifdef HAVE_STRCASESTR + return strcasestr (s1, s2); +#else + + const char *p = s1; + const size_t len = strlen (s2); + const char u = *s2, v = isupper((int) *s2) ? tolower((int) *s2) + : (islower((int) *s2) ? toupper((int) *s2) + : *s2); + + while (1) + { + while (*p != u && *p != v && *p) + p++; + if (*p == 0) + return NULL; + if (strncasecmp (p, s2, len) == 0) + return (char *)p; + } +#endif +} +#endif + + +#if GLIBC_BACKTRACE +static void +dump_glibc_backtrace (int depth, char *str[]) +{ + int i; + + for (i = 0; i < depth; i++) + st_printf (" + %s\n", str[i]); + + free (str); +} +#endif + +/* show_backtrace displays the backtrace, currently obtained by means of + the glibc backtrace* functions. */ +void +show_backtrace (void) +{ +#if GLIBC_BACKTRACE + +#define DEPTH 50 +#define BUFSIZE 1024 + + void *trace[DEPTH]; + char **str; + int depth; + + depth = backtrace (trace, DEPTH); + if (depth <= 0) + return; + + str = backtrace_symbols (trace, depth); + +#if CAN_PIPE + +#ifndef STDIN_FILENO +#define STDIN_FILENO 0 +#endif + +#ifndef STDOUT_FILENO +#define STDOUT_FILENO 1 +#endif + +#ifndef STDERR_FILENO +#define STDERR_FILENO 2 +#endif + + /* We attempt to extract file and line information from addr2line. */ + do + { + /* Local variables. */ + int f[2], pid, line, i; + FILE *output; + char addr_buf[DEPTH][GFC_XTOA_BUF_SIZE], func[BUFSIZE], file[BUFSIZE]; + char *p, *end; + const char *addr[DEPTH]; + + /* Write the list of addresses in hexadecimal format. */ + for (i = 0; i < depth; i++) + addr[i] = xtoa ((GFC_UINTEGER_LARGEST) (intptr_t) trace[i], addr_buf[i], + sizeof (addr_buf[i])); + + /* Don't output an error message if something goes wrong, we'll simply + fall back to the pstack and glibc backtraces. */ + if (pipe (f) != 0) + break; + if ((pid = fork ()) == -1) + break; + + if (pid == 0) + { + /* Child process. */ +#define NUM_FIXEDARGS 5 + char *arg[DEPTH+NUM_FIXEDARGS+1]; + + close (f[0]); + close (STDIN_FILENO); + close (STDERR_FILENO); + + if (dup2 (f[1], STDOUT_FILENO) == -1) + _exit (0); + close (f[1]); + + arg[0] = (char *) "addr2line"; + arg[1] = (char *) "-e"; + arg[2] = full_exe_path (); + arg[3] = (char *) "-f"; + arg[4] = (char *) "-s"; + for (i = 0; i < depth; i++) + arg[NUM_FIXEDARGS+i] = (char *) addr[i]; + arg[NUM_FIXEDARGS+depth] = NULL; + execvp (arg[0], arg); + _exit (0); +#undef NUM_FIXEDARGS + } + + /* Father process. */ + close (f[1]); + wait (NULL); + output = fdopen (f[0], "r"); + i = -1; + + if (fgets (func, sizeof(func), output)) + { + st_printf ("\nBacktrace for this error:\n"); + + do + { + if (! fgets (file, sizeof(file), output)) + goto fallback; + + i++; + + for (p = func; *p != '\n' && *p != '\r'; p++) + ; + + *p = '\0'; + + /* Try to recognize the internal libgfortran functions. */ + if (strncasecmp (func, "*_gfortran", 10) == 0 + || strncasecmp (func, "_gfortran", 9) == 0 + || strcmp (func, "main") == 0 || strcmp (func, "_start") == 0 + || strcmp (func, "_gfortrani_handler") == 0) + continue; + + if (local_strcasestr (str[i], "libgfortran.so") != NULL + || local_strcasestr (str[i], "libgfortran.dylib") != NULL + || local_strcasestr (str[i], "libgfortran.a") != NULL) + continue; + + /* If we only have the address, use the glibc backtrace. */ + if (func[0] == '?' && func[1] == '?' && file[0] == '?' + && file[1] == '?') + { + st_printf (" + %s\n", str[i]); + continue; + } + + /* Extract the line number. */ + for (end = NULL, p = file; *p; p++) + if (*p == ':') + end = p; + if (end != NULL) + { + *end = '\0'; + line = atoi (++end); + } + else + line = -1; + + if (strcmp (func, "MAIN__") == 0) + st_printf (" + in the main program\n"); + else + st_printf (" + function %s (0x%s)\n", func, addr[i]); + + if (line <= 0 && strcmp (file, "??") == 0) + continue; + + if (line <= 0) + st_printf (" from file %s\n", file); + else + st_printf (" at line %d of file %s\n", line, file); + } + while (fgets (func, sizeof(func), output)); + + free (str); + return; + +fallback: + st_printf ("** Something went wrong while running addr2line. **\n" + "** Falling back to a simpler backtrace scheme. **\n"); + } + } + while (0); + +#undef DEPTH +#undef BUFSIZE + +#endif +#endif + +#if CAN_FORK && defined(HAVE_GETPPID) + /* Try to call pstack. */ + do + { + /* Local variables. */ + int pid; + + /* Don't output an error message if something goes wrong, we'll simply + fall back to the pstack and glibc backtraces. */ + if ((pid = fork ()) == -1) + break; + + if (pid == 0) + { + /* Child process. */ +#define NUM_ARGS 2 + char *arg[NUM_ARGS+1]; + char buf[20]; + + st_printf ("\nBacktrace for this error:\n"); + arg[0] = (char *) "pstack"; +#ifdef HAVE_SNPRINTF + snprintf (buf, sizeof(buf), "%d", (int) getppid ()); +#else + sprintf (buf, "%d", (int) getppid ()); +#endif + arg[1] = buf; + arg[2] = NULL; + execvp (arg[0], arg); +#undef NUM_ARGS + + /* pstack didn't work, so we fall back to dumping the glibc + backtrace if we can. */ +#if GLIBC_BACKTRACE + dump_glibc_backtrace (depth, str); +#else + st_printf (" unable to produce a backtrace, sorry!\n"); +#endif + + _exit (0); + } + + /* Father process. */ + wait (NULL); + return; + } + while(0); +#endif + +#if GLIBC_BACKTRACE + /* Fallback to the glibc backtrace. */ + st_printf ("\nBacktrace for this error:\n"); + dump_glibc_backtrace (depth, str); +#endif +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/compile_options.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/compile_options.c new file mode 100644 index 0000000000..c3d26f4148 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/compile_options.c @@ -0,0 +1,197 @@ +/* Handling of compile-time options that influence the library. + Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#ifdef HAVE_SIGNAL_H +#include +#endif + + +/* Useful compile-time options will be stored in here. */ +compile_options_t compile_options; + + +/* A signal handler to allow us to output a backtrace. */ +void +handler (int signum) +{ + const char * name = NULL, * desc = NULL; + + switch (signum) + { +#if defined(SIGSEGV) + case SIGSEGV: + name = "SIGSEGV"; + desc = "Segmentation fault"; + break; +#endif + +#if defined(SIGBUS) + case SIGBUS: + name = "SIGBUS"; + desc = "Bus error"; + break; +#endif + +#if defined(SIGILL) + case SIGILL: + name = "SIGILL"; + desc = "Illegal instruction"; + break; +#endif + +#if defined(SIGFPE) + case SIGFPE: + name = "SIGFPE"; + desc = "Floating-point exception"; + break; +#endif + } + + if (name) + st_printf ("\nProgram received signal %d (%s): %s.\n", signum, name, desc); + else + st_printf ("\nProgram received signal %d.\n", signum); + + sys_exit (5); +} + + +/* Set the usual compile-time options. */ +extern void set_options (int , int []); +export_proto(set_options); + +void +set_options (int num, int options[]) +{ + if (num >= 1) + compile_options.warn_std = options[0]; + if (num >= 2) + compile_options.allow_std = options[1]; + if (num >= 3) + compile_options.pedantic = options[2]; + if (num >= 4) + compile_options.dump_core = options[3]; + if (num >= 5) + compile_options.backtrace = options[4]; + if (num >= 6) + compile_options.sign_zero = options[5]; + if (num >= 7) + compile_options.bounds_check = options[6]; + if (num >= 8) + compile_options.range_check = options[7]; + + /* If backtrace is required, we set signal handlers on most common + signals. */ +#if defined(HAVE_SIGNAL) && (defined(SIGSEGV) || defined(SIGBUS) \ + || defined(SIGILL) || defined(SIGFPE)) + if (compile_options.backtrace) + { +#if defined(SIGSEGV) + signal (SIGSEGV, handler); +#endif + +#if defined(SIGBUS) + signal (SIGBUS, handler); +#endif + +#if defined(SIGILL) + signal (SIGILL, handler); +#endif + +#if defined(SIGFPE) + signal (SIGFPE, handler); +#endif + } +#endif + +} + + +/* Default values for the compile-time options. Keep in sync with + gcc/fortran/options.c (gfc_init_options). */ +void +init_compile_options (void) +{ + compile_options.warn_std = GFC_STD_F95_DEL | GFC_STD_LEGACY; + compile_options.allow_std = GFC_STD_F95_OBS | GFC_STD_F95_DEL + | GFC_STD_F2003 | GFC_STD_F2008 | GFC_STD_F95 | GFC_STD_F77 + | GFC_STD_GNU | GFC_STD_LEGACY; + compile_options.pedantic = 0; + compile_options.dump_core = 0; + compile_options.backtrace = 0; + compile_options.sign_zero = 1; + compile_options.range_check = 1; +} + +/* Function called by the front-end to tell us the + default for unformatted data conversion. */ + +extern void set_convert (int); +export_proto (set_convert); + +void +set_convert (int conv) +{ + compile_options.convert = conv; +} + +extern void set_record_marker (int); +export_proto (set_record_marker); + + +void +set_record_marker (int val) +{ + + switch(val) + { + case 4: + compile_options.record_marker = sizeof (GFC_INTEGER_4); + break; + + case 8: + compile_options.record_marker = sizeof (GFC_INTEGER_8); + break; + + default: + runtime_error ("Invalid value for record marker"); + break; + } +} + +extern void set_max_subrecord_length (int); +export_proto (set_max_subrecord_length); + +void set_max_subrecord_length(int val) +{ + if (val > GFC_MAX_SUBRECORD_LENGTH || val < 1) + { + runtime_error ("Invalid value for maximum subrecord length"); + return; + } + + compile_options.max_subrecord_length = val; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/convert_char.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/convert_char.c new file mode 100644 index 0000000000..540c2bfdb6 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/convert_char.c @@ -0,0 +1,69 @@ +/* Runtime conversion of strings from one character kind to another. + Copyright 2008, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include +#include + + +extern void convert_char1_to_char4 (gfc_char4_t **, gfc_charlen_type, + const unsigned char *); +export_proto(convert_char1_to_char4); + +extern void convert_char4_to_char1 (unsigned char **, gfc_charlen_type, + const gfc_char4_t *); +export_proto(convert_char4_to_char1); + + +void +convert_char1_to_char4 (gfc_char4_t **dst, gfc_charlen_type len, + const unsigned char *src) +{ + gfc_charlen_type i, l; + + l = len > 0 ? len : 0; + *dst = get_mem ((l + 1) * sizeof (gfc_char4_t)); + + for (i = 0; i < l; i++) + (*dst)[i] = src[i]; + + (*dst)[l] = '\0'; +} + + +void +convert_char4_to_char1 (unsigned char **dst, gfc_charlen_type len, + const gfc_char4_t *src) +{ + gfc_charlen_type i, l; + + l = len > 0 ? len : 0; + *dst = get_mem ((l + 1) * sizeof (unsigned char)); + + for (i = 0; i < l; i++) + (*dst)[i] = src[i]; + + (*dst)[l] = '\0'; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/environ.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/environ.c new file mode 100644 index 0000000000..a6ce645e0e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/environ.c @@ -0,0 +1,837 @@ +/* Copyright (C) 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + +#include +#include +#include + + +/* Environment scanner. Examine the environment for controlling minor + * aspects of the program's execution. Our philosophy here that the + * environment should not prevent the program from running, so an + * environment variable with a messed-up value will be interpreted in + * the default way. + * + * Most of the environment is checked early in the startup sequence, + * but other variables are checked during execution of the user's + * program. */ + +options_t options; + + +typedef struct variable +{ + const char *name; + int value, *var; + void (*init) (struct variable *); + void (*show) (struct variable *); + const char *desc; + int bad; +} +variable; + +static void init_unformatted (variable *); + +/* print_spaces()-- Print a particular number of spaces. */ + +static void +print_spaces (int n) +{ + char buffer[80]; + int i; + + if (n <= 0) + return; + + for (i = 0; i < n; i++) + buffer[i] = ' '; + + buffer[i] = '\0'; + + st_printf (buffer); +} + + +/* var_source()-- Return a string that describes where the value of a + * variable comes from */ + +static const char * +var_source (variable * v) +{ + if (getenv (v->name) == NULL) + return "Default"; + + if (v->bad) + return "Bad "; + + return "Set "; +} + + +/* init_integer()-- Initialize an integer environment variable. */ + +static void +init_integer (variable * v) +{ + char *p, *q; + + p = getenv (v->name); + if (p == NULL) + goto set_default; + + for (q = p; *q; q++) + if (!isdigit (*q) && (p != q || *q != '-')) + { + v->bad = 1; + goto set_default; + } + + *v->var = atoi (p); + return; + + set_default: + *v->var = v->value; + return; +} + + +/* init_unsigned_integer()-- Initialize an integer environment variable + which has to be positive. */ + +static void +init_unsigned_integer (variable * v) +{ + char *p, *q; + + p = getenv (v->name); + if (p == NULL) + goto set_default; + + for (q = p; *q; q++) + if (!isdigit (*q)) + { + v->bad = 1; + goto set_default; + } + + *v->var = atoi (p); + return; + + set_default: + *v->var = v->value; + return; +} + + +/* show_integer()-- Show an integer environment variable */ + +static void +show_integer (variable * v) +{ + st_printf ("%s %d\n", var_source (v), *v->var); +} + + +/* init_boolean()-- Initialize a boolean environment variable. We + * only look at the first letter of the variable. */ + +static void +init_boolean (variable * v) +{ + char *p; + + p = getenv (v->name); + if (p == NULL) + goto set_default; + + if (*p == '1' || *p == 'Y' || *p == 'y') + { + *v->var = 1; + return; + } + + if (*p == '0' || *p == 'N' || *p == 'n') + { + *v->var = 0; + return; + } + + v->bad = 1; + +set_default: + *v->var = v->value; + return; +} + + +/* show_boolean()-- Show a boolean environment variable */ + +static void +show_boolean (variable * v) +{ + st_printf ("%s %s\n", var_source (v), *v->var ? "Yes" : "No"); +} + + +static void +init_sep (variable * v) +{ + int seen_comma; + char *p; + + p = getenv (v->name); + if (p == NULL) + goto set_default; + + v->bad = 1; + options.separator = p; + options.separator_len = strlen (p); + + /* Make sure the separator is valid */ + + if (options.separator_len == 0) + goto set_default; + seen_comma = 0; + + while (*p) + { + if (*p == ',') + { + if (seen_comma) + goto set_default; + seen_comma = 1; + p++; + continue; + } + + if (*p++ != ' ') + goto set_default; + } + + v->bad = 0; + return; + +set_default: + options.separator = " "; + options.separator_len = 1; +} + + +static void +show_sep (variable * v) +{ + st_printf ("%s \"%s\"\n", var_source (v), options.separator); +} + + +static void +init_string (variable * v __attribute__ ((unused))) +{ +} + +static void +show_string (variable * v) +{ + const char *p; + + p = getenv (v->name); + if (p == NULL) + p = ""; + + st_printf ("%s \"%s\"\n", var_source (v), p); +} + + +static variable variable_table[] = { + {"GFORTRAN_STDIN_UNIT", GFC_STDIN_UNIT_NUMBER, &options.stdin_unit, + init_integer, show_integer, + "Unit number that will be preconnected to standard input\n" + "(No preconnection if negative)", 0}, + + {"GFORTRAN_STDOUT_UNIT", GFC_STDOUT_UNIT_NUMBER, &options.stdout_unit, + init_integer, show_integer, + "Unit number that will be preconnected to standard output\n" + "(No preconnection if negative)", 0}, + + {"GFORTRAN_STDERR_UNIT", GFC_STDERR_UNIT_NUMBER, &options.stderr_unit, + init_integer, show_integer, + "Unit number that will be preconnected to standard error\n" + "(No preconnection if negative)", 0}, + + {"GFORTRAN_USE_STDERR", 1, &options.use_stderr, init_boolean, + show_boolean, + "Sends library output to standard error instead of standard output.", 0}, + + {"GFORTRAN_TMPDIR", 0, NULL, init_string, show_string, + "Directory for scratch files. Overrides the TMP environment variable\n" + "If TMP is not set " DEFAULT_TEMPDIR " is used.", 0}, + + {"GFORTRAN_UNBUFFERED_ALL", 0, &options.all_unbuffered, init_boolean, + show_boolean, + "If TRUE, all output is unbuffered. This will slow down large writes " + "but can be\nuseful for forcing data to be displayed immediately.", 0}, + + {"GFORTRAN_UNBUFFERED_PRECONNECTED", 0, &options.unbuffered_preconnected, + init_boolean, show_boolean, + "If TRUE, output to preconnected units is unbuffered.", 0}, + + {"GFORTRAN_SHOW_LOCUS", 1, &options.locus, init_boolean, show_boolean, + "If TRUE, print filename and line number where runtime errors happen.", 0}, + + {"GFORTRAN_OPTIONAL_PLUS", 0, &options.optional_plus, init_boolean, show_boolean, + "Print optional plus signs in numbers where permitted. Default FALSE.", 0}, + + {"GFORTRAN_DEFAULT_RECL", DEFAULT_RECL, &options.default_recl, + init_unsigned_integer, show_integer, + "Default maximum record length for sequential files. Most useful for\n" + "adjusting line length of preconnected units. Default " + stringize (DEFAULT_RECL), 0}, + + {"GFORTRAN_LIST_SEPARATOR", 0, NULL, init_sep, show_sep, + "Separator to use when writing list output. May contain any number of " + "spaces\nand at most one comma. Default is a single space.", 0}, + + /* GFORTRAN_CONVERT_UNIT - Set the default data conversion for + unformatted I/O. */ + {"GFORTRAN_CONVERT_UNIT", 0, 0, init_unformatted, show_string, + "Set format for unformatted files", 0}, + + /* Behaviour when encoutering a runtime error. */ + {"GFORTRAN_ERROR_DUMPCORE", -1, &options.dump_core, + init_boolean, show_boolean, + "Dump a core file (if possible) on runtime error", -1}, + + {"GFORTRAN_ERROR_BACKTRACE", -1, &options.backtrace, + init_boolean, show_boolean, + "Print out a backtrace (if possible) on runtime error", -1}, + + {NULL, 0, NULL, NULL, NULL, NULL, 0} +}; + + +/* init_variables()-- Initialize most runtime variables from + * environment variables. */ + +void +init_variables (void) +{ + variable *v; + + for (v = variable_table; v->name; v++) + v->init (v); +} + + +void +show_variables (void) +{ + variable *v; + int n; + + /* TODO: print version number. */ + st_printf ("GNU Fortran 95 runtime library version " + "UNKNOWN" "\n\n"); + + st_printf ("Environment variables:\n"); + st_printf ("----------------------\n"); + + for (v = variable_table; v->name; v++) + { + n = st_printf ("%s", v->name); + print_spaces (25 - n); + + if (v->show == show_integer) + st_printf ("Integer "); + else if (v->show == show_boolean) + st_printf ("Boolean "); + else + st_printf ("String "); + + v->show (v); + st_printf ("%s\n\n", v->desc); + } + + /* System error codes */ + + st_printf ("\nRuntime error codes:"); + st_printf ("\n--------------------\n"); + + for (n = LIBERROR_FIRST + 1; n < LIBERROR_LAST; n++) + if (n < 0 || n > 9) + st_printf ("%d %s\n", n, translate_error (n)); + else + st_printf (" %d %s\n", n, translate_error (n)); + + st_printf ("\nCommand line arguments:\n"); + st_printf (" --help Print this list\n"); + + /* st_printf(" --resume Resume program execution from dropfile\n"); */ + + sys_exit (0); +} + +/* This is the handling of the GFORTRAN_CONVERT_UNITS environment variable. + It is called from environ.c to parse this variable, and from + open.c to determine if the user specified a default for an + unformatted file. + The syntax of the environment variable is, in bison grammar: + + GFORTRAN_CONVERT_UNITS: mode | mode ';' exception ; + mode: 'native' | 'swap' | 'big_endian' | 'little_endian' ; + exception: mode ':' unit_list | unit_list ; + unit_list: unit_spec | unit_list unit_spec ; + unit_spec: INTEGER | INTEGER '-' INTEGER ; +*/ + +/* Defines for the tokens. Other valid tokens are ',', ':', '-'. */ + + +#define NATIVE 257 +#define SWAP 258 +#define BIG 259 +#define LITTLE 260 +/* Some space for additional tokens later. */ +#define INTEGER 273 +#define END (-1) +#define ILLEGAL (-2) + +typedef struct +{ + int unit; + unit_convert conv; +} exception_t; + + +static char *p; /* Main character pointer for parsing. */ +static char *lastpos; /* Auxiliary pointer, for backing up. */ +static int unit_num; /* The last unit number read. */ +static int unit_count; /* The number of units found. */ +static int do_count; /* Parsing is done twice - first to count the number + of units, then to fill in the table. This + variable controls what to do. */ +static exception_t *elist; /* The list of exceptions to the default. This is + sorted according to unit number. */ +static int n_elist; /* Number of exceptions to the default. */ + +static unit_convert endian; /* Current endianness. */ + +static unit_convert def; /* Default as specified (if any). */ + +/* Search for a unit number, using a binary search. The + first argument is the unit number to search for. The second argument + is a pointer to an index. + If the unit number is found, the function returns 1, and the index + is that of the element. + If the unit number is not found, the function returns 0, and the + index is the one where the element would be inserted. */ + +static int +search_unit (int unit, int *ip) +{ + int low, high, mid; + + low = -1; + high = n_elist; + while (high - low > 1) + { + mid = (low + high) / 2; + if (unit <= elist[mid].unit) + high = mid; + else + low = mid; + } + *ip = high; + if (elist[high].unit == unit) + return 1; + else + return 0; +} + +/* This matches a keyword. If it is found, return the token supplied, + otherwise return ILLEGAL. */ + +static int +match_word (const char *word, int tok) +{ + int res; + + if (strncasecmp (p, word, strlen (word)) == 0) + { + p += strlen (word); + res = tok; + } + else + res = ILLEGAL; + return res; + +} + +/* Match an integer and store its value in unit_num. This only works + if p actually points to the start of an integer. The caller has + to ensure this. */ + +static int +match_integer (void) +{ + unit_num = 0; + while (isdigit (*p)) + unit_num = unit_num * 10 + (*p++ - '0'); + return INTEGER; + +} + +/* This reads the next token from the GFORTRAN_CONVERT_UNITS variable. + Returned values are the different tokens. */ + +static int +next_token (void) +{ + int result; + + lastpos = p; + switch (*p) + { + case '\0': + result = END; + break; + + case ':': + case ',': + case '-': + case ';': + result = *p; + p++; + break; + + case 'b': + case 'B': + result = match_word ("big_endian", BIG); + break; + + case 'l': + case 'L': + result = match_word ("little_endian", LITTLE); + break; + + case 'n': + case 'N': + result = match_word ("native", NATIVE); + break; + + case 's': + case 'S': + result = match_word ("swap", SWAP); + break; + + case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + result = match_integer (); + break; + + default: + result = ILLEGAL; + break; + } + return result; +} + +/* Back up the last token by setting back the character pointer. */ + +static void +push_token (void) +{ + p = lastpos; +} + +/* This is called when a unit is identified. If do_count is nonzero, + increment the number of units by one. If do_count is zero, + put the unit into the table. */ + +static void +mark_single (int unit) +{ + int i,j; + + if (do_count) + { + unit_count++; + return; + } + if (search_unit (unit, &i)) + { + elist[unit].conv = endian; + } + else + { + for (j=n_elist; j>=i; j--) + elist[j+1] = elist[j]; + + n_elist += 1; + elist[i].unit = unit; + elist[i].conv = endian; + } +} + +/* This is called when a unit range is identified. If do_count is + nonzero, increase the number of units. If do_count is zero, + put the unit into the table. */ + +static void +mark_range (int unit1, int unit2) +{ + int i; + if (do_count) + unit_count += abs (unit2 - unit1) + 1; + else + { + if (unit2 < unit1) + for (i=unit2; i<=unit1; i++) + mark_single (i); + else + for (i=unit1; i<=unit2; i++) + mark_single (i); + } +} + +/* Parse the GFORTRAN_CONVERT_UNITS variable. This is called + twice, once to count the units and once to actually mark them in + the table. When counting, we don't check for double occurrences + of units. */ + +static int +do_parse (void) +{ + int tok; + int unit1; + int continue_ulist; + char *start; + + unit_count = 0; + + start = p; + + /* Parse the string. First, let's look for a default. */ + tok = next_token (); + switch (tok) + { + case NATIVE: + endian = GFC_CONVERT_NATIVE; + break; + + case SWAP: + endian = GFC_CONVERT_SWAP; + break; + + case BIG: + endian = GFC_CONVERT_BIG; + break; + + case LITTLE: + endian = GFC_CONVERT_LITTLE; + break; + + case INTEGER: + /* A leading digit means that we are looking at an exception. + Reset the position to the beginning, and continue processing + at the exception list. */ + p = start; + goto exceptions; + break; + + case END: + goto end; + break; + + default: + goto error; + break; + } + + tok = next_token (); + switch (tok) + { + case ';': + def = endian; + break; + + case ':': + /* This isn't a default after all. Reset the position to the + beginning, and continue processing at the exception list. */ + p = start; + goto exceptions; + break; + + case END: + def = endian; + goto end; + break; + + default: + goto error; + break; + } + + exceptions: + + /* Loop over all exceptions. */ + while(1) + { + tok = next_token (); + switch (tok) + { + case NATIVE: + if (next_token () != ':') + goto error; + endian = GFC_CONVERT_NATIVE; + break; + + case SWAP: + if (next_token () != ':') + goto error; + endian = GFC_CONVERT_SWAP; + break; + + case LITTLE: + if (next_token () != ':') + goto error; + endian = GFC_CONVERT_LITTLE; + break; + + case BIG: + if (next_token () != ':') + goto error; + endian = GFC_CONVERT_BIG; + break; + + case INTEGER: + push_token (); + break; + + case END: + goto end; + break; + + default: + goto error; + break; + } + /* We arrive here when we want to parse a list of + numbers. */ + continue_ulist = 1; + do + { + tok = next_token (); + if (tok != INTEGER) + goto error; + + unit1 = unit_num; + tok = next_token (); + /* The number can be followed by a - and another number, + which means that this is a unit range, a comma + or a semicolon. */ + if (tok == '-') + { + if (next_token () != INTEGER) + goto error; + + mark_range (unit1, unit_num); + tok = next_token (); + if (tok == END) + goto end; + else if (tok == ';') + continue_ulist = 0; + else if (tok != ',') + goto error; + } + else + { + mark_single (unit1); + switch (tok) + { + case ';': + continue_ulist = 0; + break; + + case ',': + break; + + case END: + goto end; + break; + + default: + goto error; + } + } + } while (continue_ulist); + } + end: + return 0; + error: + def = GFC_CONVERT_NONE; + return -1; +} + +void init_unformatted (variable * v) +{ + char *val; + val = getenv (v->name); + def = GFC_CONVERT_NONE; + n_elist = 0; + + if (val == NULL) + return; + do_count = 1; + p = val; + do_parse (); + if (do_count <= 0) + { + n_elist = 0; + elist = NULL; + } + else + { + elist = get_mem (unit_count * sizeof (exception_t)); + do_count = 0; + p = val; + do_parse (); + } +} + +/* Get the default conversion for for an unformatted unit. */ + +unit_convert +get_unformatted_convert (int unit) +{ + int i; + + if (elist == NULL) + return def; + else if (search_unit (unit, &i)) + return elist[i].conv; + else + return def; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/error.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/error.c new file mode 100644 index 0000000000..e37d6189cc --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/error.c @@ -0,0 +1,532 @@ +/* Copyright (C) 2002, 2003, 2005, 2006, 2007, 2009 + Free Software Foundation, Inc. + Contributed by Andy Vaught + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + + +#include "libgfortran.h" +#include +#include +#include + +#ifdef HAVE_SIGNAL_H +#include +#endif + +#ifdef HAVE_UNISTD_H +#include +#endif + +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef HAVE_SYS_TIME_H +#include +#endif + +/* has to be included before to work + around PR 30518; otherwise, MacOS 10.3.9 headers are just broken. */ +#ifdef HAVE_SYS_RESOURCE_H +#include +#endif + + +#ifdef __MINGW32__ +#define HAVE_GETPID 1 +#include +#endif + + +/* sys_exit()-- Terminate the program with an exit code. */ + +void +sys_exit (int code) +{ + /* Show error backtrace if possible. */ + if (code != 0 && code != 4 + && (options.backtrace == 1 + || (options.backtrace == -1 && compile_options.backtrace == 1))) + show_backtrace (); + + /* Dump core if requested. */ + if (code != 0 + && (options.dump_core == 1 + || (options.dump_core == -1 && compile_options.dump_core == 1))) + { +#if defined(HAVE_GETRLIMIT) && defined(RLIMIT_CORE) + /* Warn if a core file cannot be produced because + of core size limit. */ + + struct rlimit core_limit; + + if (getrlimit (RLIMIT_CORE, &core_limit) == 0 && core_limit.rlim_cur == 0) + st_printf ("** Warning: a core dump was requested, but the core size" + "limit\n** is currently zero.\n\n"); +#endif + + +#if defined(HAVE_KILL) && defined(HAVE_GETPID) && defined(SIGQUIT) + kill (getpid (), SIGQUIT); +#else + st_printf ("Core dump not possible, sorry."); +#endif + } + + exit (code); +} + + +/* Error conditions. The tricky part here is printing a message when + * it is the I/O subsystem that is severely wounded. Our goal is to + * try and print something making the fewest assumptions possible, + * then try to clean up before actually exiting. + * + * The following exit conditions are defined: + * 0 Normal program exit. + * 1 Terminated because of operating system error. + * 2 Error in the runtime library + * 3 Internal error in runtime library + * 4 Error during error processing (very bad) + * + * Other error returns are reserved for the STOP statement with a numeric code. + */ + +/* gfc_itoa()-- Integer to decimal conversion. */ + +const char * +gfc_itoa (GFC_INTEGER_LARGEST n, char *buffer, size_t len) +{ + int negative; + char *p; + GFC_UINTEGER_LARGEST t; + + assert (len >= GFC_ITOA_BUF_SIZE); + + if (n == 0) + return "0"; + + negative = 0; + t = n; + if (n < 0) + { + negative = 1; + t = -n; /*must use unsigned to protect from overflow*/ + } + + p = buffer + GFC_ITOA_BUF_SIZE - 1; + *p = '\0'; + + while (t != 0) + { + *--p = '0' + (t % 10); + t /= 10; + } + + if (negative) + *--p = '-'; + return p; +} + + +/* xtoa()-- Integer to hexadecimal conversion. */ + +const char * +xtoa (GFC_UINTEGER_LARGEST n, char *buffer, size_t len) +{ + int digit; + char *p; + + assert (len >= GFC_XTOA_BUF_SIZE); + + if (n == 0) + return "0"; + + p = buffer + GFC_XTOA_BUF_SIZE - 1; + *p = '\0'; + + while (n != 0) + { + digit = n & 0xF; + if (digit > 9) + digit += 'A' - '0' - 10; + + *--p = '0' + digit; + n >>= 4; + } + + return p; +} + +/* show_locus()-- Print a line number and filename describing where + * something went wrong */ + +void +show_locus (st_parameter_common *cmp) +{ + static char *filename; + + if (!options.locus || cmp == NULL || cmp->filename == NULL) + return; + + if (cmp->unit > 0) + { + filename = filename_from_unit (cmp->unit); + if (filename != NULL) + { + st_printf ("At line %d of file %s (unit = %d, file = '%s')\n", + (int) cmp->line, cmp->filename, (int) cmp->unit, filename); + free_mem (filename); + } + else + { + st_printf ("At line %d of file %s (unit = %d)\n", + (int) cmp->line, cmp->filename, (int) cmp->unit); + } + return; + } + + st_printf ("At line %d of file %s\n", (int) cmp->line, cmp->filename); +} + + +/* recursion_check()-- It's possible for additional errors to occur + * during fatal error processing. We detect this condition here and + * exit with code 4 immediately. */ + +#define MAGIC 0x20DE8101 + +static void +recursion_check (void) +{ + static int magic = 0; + + /* Don't even try to print something at this point */ + if (magic == MAGIC) + sys_exit (4); + + magic = MAGIC; +} + + +/* os_error()-- Operating system error. We get a message from the + * operating system, show it and leave. Some operating system errors + * are caught and processed by the library. If not, we come here. */ + +void +os_error (const char *message) +{ + recursion_check (); + st_printf ("Operating system error: %s\n%s\n", get_oserror (), message); + sys_exit (1); +} +iexport(os_error); + + +/* void runtime_error()-- These are errors associated with an + * invalid fortran program. */ + +void +runtime_error (const char *message, ...) +{ + va_list ap; + + recursion_check (); + st_printf ("Fortran runtime error: "); + va_start (ap, message); + st_vprintf (message, ap); + va_end (ap); + st_printf ("\n"); + sys_exit (2); +} +iexport(runtime_error); + +/* void runtime_error_at()-- These are errors associated with a + * run time error generated by the front end compiler. */ + +void +runtime_error_at (const char *where, const char *message, ...) +{ + va_list ap; + + recursion_check (); + st_printf ("%s\n", where); + st_printf ("Fortran runtime error: "); + va_start (ap, message); + st_vprintf (message, ap); + va_end (ap); + st_printf ("\n"); + sys_exit (2); +} +iexport(runtime_error_at); + + +void +runtime_warning_at (const char *where, const char *message, ...) +{ + va_list ap; + + st_printf ("%s\n", where); + st_printf ("Fortran runtime warning: "); + va_start (ap, message); + st_vprintf (message, ap); + va_end (ap); + st_printf ("\n"); +} +iexport(runtime_warning_at); + + +/* void internal_error()-- These are this-can't-happen errors + * that indicate something deeply wrong. */ + +void +internal_error (st_parameter_common *cmp, const char *message) +{ + recursion_check (); + show_locus (cmp); + st_printf ("Internal Error: %s\n", message); + + /* This function call is here to get the main.o object file included + when linking statically. This works because error.o is supposed to + be always linked in (and the function call is in internal_error + because hopefully it doesn't happen too often). */ + stupid_function_name_for_static_linking(); + + sys_exit (3); +} + + +/* translate_error()-- Given an integer error code, return a string + * describing the error. */ + +const char * +translate_error (int code) +{ + const char *p; + + switch (code) + { + case LIBERROR_EOR: + p = "End of record"; + break; + + case LIBERROR_END: + p = "End of file"; + break; + + case LIBERROR_OK: + p = "Successful return"; + break; + + case LIBERROR_OS: + p = "Operating system error"; + break; + + case LIBERROR_BAD_OPTION: + p = "Bad statement option"; + break; + + case LIBERROR_MISSING_OPTION: + p = "Missing statement option"; + break; + + case LIBERROR_OPTION_CONFLICT: + p = "Conflicting statement options"; + break; + + case LIBERROR_ALREADY_OPEN: + p = "File already opened in another unit"; + break; + + case LIBERROR_BAD_UNIT: + p = "Unattached unit"; + break; + + case LIBERROR_FORMAT: + p = "FORMAT error"; + break; + + case LIBERROR_BAD_ACTION: + p = "Incorrect ACTION specified"; + break; + + case LIBERROR_ENDFILE: + p = "Read past ENDFILE record"; + break; + + case LIBERROR_BAD_US: + p = "Corrupt unformatted sequential file"; + break; + + case LIBERROR_READ_VALUE: + p = "Bad value during read"; + break; + + case LIBERROR_READ_OVERFLOW: + p = "Numeric overflow on read"; + break; + + case LIBERROR_INTERNAL: + p = "Internal error in run-time library"; + break; + + case LIBERROR_INTERNAL_UNIT: + p = "Internal unit I/O error"; + break; + + case LIBERROR_DIRECT_EOR: + p = "Write exceeds length of DIRECT access record"; + break; + + case LIBERROR_SHORT_RECORD: + p = "I/O past end of record on unformatted file"; + break; + + case LIBERROR_CORRUPT_FILE: + p = "Unformatted file structure has been corrupted"; + break; + + default: + p = "Unknown error code"; + break; + } + + return p; +} + + +/* generate_error()-- Come here when an error happens. This + * subroutine is called if it is possible to continue on after the error. + * If an IOSTAT or IOMSG variable exists, we set it. If IOSTAT or + * ERR labels are present, we return, otherwise we terminate the program + * after printing a message. The error code is always required but the + * message parameter can be NULL, in which case a string describing + * the most recent operating system error is used. */ + +void +generate_error (st_parameter_common *cmp, int family, const char *message) +{ + + /* If there was a previous error, don't mask it with another + error message, EOF or EOR condition. */ + + if ((cmp->flags & IOPARM_LIBRETURN_MASK) == IOPARM_LIBRETURN_ERROR) + return; + + /* Set the error status. */ + if ((cmp->flags & IOPARM_HAS_IOSTAT)) + *cmp->iostat = (family == LIBERROR_OS) ? errno : family; + + if (message == NULL) + message = + (family == LIBERROR_OS) ? get_oserror () : translate_error (family); + + if (cmp->flags & IOPARM_HAS_IOMSG) + cf_strcpy (cmp->iomsg, cmp->iomsg_len, message); + + /* Report status back to the compiler. */ + cmp->flags &= ~IOPARM_LIBRETURN_MASK; + switch (family) + { + case LIBERROR_EOR: + cmp->flags |= IOPARM_LIBRETURN_EOR; + if ((cmp->flags & IOPARM_EOR)) + return; + break; + + case LIBERROR_END: + cmp->flags |= IOPARM_LIBRETURN_END; + if ((cmp->flags & IOPARM_END)) + return; + break; + + default: + cmp->flags |= IOPARM_LIBRETURN_ERROR; + if ((cmp->flags & IOPARM_ERR)) + return; + break; + } + + /* Return if the user supplied an iostat variable. */ + if ((cmp->flags & IOPARM_HAS_IOSTAT)) + return; + + /* Terminate the program */ + + recursion_check (); + show_locus (cmp); + st_printf ("Fortran runtime error: %s\n", message); + sys_exit (2); +} +iexport(generate_error); + +/* Whether, for a feature included in a given standard set (GFC_STD_*), + we should issue an error or a warning, or be quiet. */ + +notification +notification_std (int std) +{ + int warning; + + if (!compile_options.pedantic) + return SILENT; + + warning = compile_options.warn_std & std; + if ((compile_options.allow_std & std) != 0 && !warning) + return SILENT; + + return warning ? WARNING : ERROR; +} + + + +/* Possibly issue a warning/error about use of a nonstandard (or deleted) + feature. An error/warning will be issued if the currently selected + standard does not contain the requested bits. */ + +try +notify_std (st_parameter_common *cmp, int std, const char * message) +{ + int warning; + + if (!compile_options.pedantic) + return SUCCESS; + + warning = compile_options.warn_std & std; + if ((compile_options.allow_std & std) != 0 && !warning) + return SUCCESS; + + if (!warning) + { + recursion_check (); + show_locus (cmp); + st_printf ("Fortran runtime error: %s\n", message); + sys_exit (2); + } + else + { + show_locus (cmp); + st_printf ("Fortran runtime warning: %s\n", message); + } + return FAILURE; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/fpu.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/fpu.c new file mode 100644 index 0000000000..f81a3b05a4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/fpu.c @@ -0,0 +1,16 @@ +#include "libgfortran.h" + +/* We include the platform-dependent code. */ +#include "fpu-target.h" + +/* Function called by the front-end to tell us + when a FPE should be raised. */ +extern void set_fpe (int); +export_proto(set_fpe); + +void +set_fpe (int exceptions) +{ + options.fpe = exceptions; + set_fpu (); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/in_pack_generic.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/in_pack_generic.c new file mode 100644 index 0000000000..28e8d8e366 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/in_pack_generic.c @@ -0,0 +1,206 @@ +/* Generic helper function for repacking arrays. + Copyright 2003, 2004, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + +extern void *internal_pack (gfc_array_char *); +export_proto(internal_pack); + +void * +internal_pack (gfc_array_char * source) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type ssize; + const char *src; + char *dest; + void *destptr; + int n; + int packed; + index_type size; + index_type type_size; + + if (source->dim[0].stride == 0) + { + source->dim[0].stride = 1; + return source->data; + } + + type_size = GFC_DTYPE_TYPE_SIZE(source); + size = GFC_DESCRIPTOR_SIZE (source); + switch (type_size) + { + case GFC_DTYPE_INTEGER_1: + case GFC_DTYPE_LOGICAL_1: + case GFC_DTYPE_DERIVED_1: + return internal_pack_1 ((gfc_array_i1 *) source); + + case GFC_DTYPE_INTEGER_2: + case GFC_DTYPE_LOGICAL_2: + return internal_pack_2 ((gfc_array_i2 *) source); + + case GFC_DTYPE_INTEGER_4: + case GFC_DTYPE_LOGICAL_4: + return internal_pack_4 ((gfc_array_i4 *) source); + + case GFC_DTYPE_INTEGER_8: + case GFC_DTYPE_LOGICAL_8: + return internal_pack_8 ((gfc_array_i8 *) source); + +#if defined(HAVE_GFC_INTEGER_16) + case GFC_DTYPE_INTEGER_16: + case GFC_DTYPE_LOGICAL_16: + return internal_pack_16 ((gfc_array_i16 *) source); +#endif + case GFC_DTYPE_REAL_4: + return internal_pack_r4 ((gfc_array_r4 *) source); + + case GFC_DTYPE_REAL_8: + return internal_pack_r8 ((gfc_array_r8 *) source); + +#if defined (HAVE_GFC_REAL_10) + case GFC_DTYPE_REAL_10: + return internal_pack_r10 ((gfc_array_r10 *) source); +#endif + +#if defined (HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + return internal_pack_r16 ((gfc_array_r16 *) source); +#endif + case GFC_DTYPE_COMPLEX_4: + return internal_pack_c4 ((gfc_array_c4 *) source); + + case GFC_DTYPE_COMPLEX_8: + return internal_pack_c8 ((gfc_array_c8 *) source); + +#if defined (HAVE_GFC_COMPLEX_10) + case GFC_DTYPE_COMPLEX_10: + return internal_pack_c10 ((gfc_array_c10 *) source); +#endif + +#if defined (HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + return internal_pack_c16 ((gfc_array_c16 *) source); +#endif + + case GFC_DTYPE_DERIVED_2: + if (GFC_UNALIGNED_2(source->data)) + break; + else + return internal_pack_2 ((gfc_array_i2 *) source); + + case GFC_DTYPE_DERIVED_4: + if (GFC_UNALIGNED_4(source->data)) + break; + else + return internal_pack_4 ((gfc_array_i4 *) source); + + case GFC_DTYPE_DERIVED_8: + if (GFC_UNALIGNED_8(source->data)) + break; + else + return internal_pack_8 ((gfc_array_i8 *) source); + +#ifdef HAVE_GFC_INTEGER_16 + case GFC_DTYPE_DERIVED_16: + if (GFC_UNALIGNED_16(source->data)) + break; + else + return internal_pack_16 ((gfc_array_i16 *) source); +#endif + + default: + break; + } + + dim = GFC_DESCRIPTOR_RANK (source); + ssize = 1; + packed = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = source->dim[n].stride; + extent[n] = source->dim[n].ubound + 1 - source->dim[n].lbound; + if (extent[n] <= 0) + { + /* Do nothing. */ + packed = 1; + break; + } + + if (ssize != stride[n]) + packed = 0; + + ssize *= extent[n]; + } + + if (packed) + return source->data; + + /* Allocate storage for the destination. */ + destptr = internal_malloc_size (ssize * size); + dest = (char *)destptr; + src = source->data; + stride0 = stride[0] * size; + + while (src) + { + /* Copy the data. */ + memcpy(dest, src, size); + /* Advance to the next element. */ + dest += size; + src += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + src -= stride[n] * extent[n] * size; + n++; + if (n == dim) + { + src = NULL; + break; + } + else + { + count[n]++; + src += stride[n] * size; + } + } + } + return destptr; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/in_unpack_generic.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/in_unpack_generic.c new file mode 100644 index 0000000000..66b5c84b85 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/in_unpack_generic.c @@ -0,0 +1,225 @@ +/* Generic helper function for repacking arrays. + Copyright 2003, 2004, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + +extern void internal_unpack (gfc_array_char *, const void *); +export_proto(internal_unpack); + +void +internal_unpack (gfc_array_char * d, const void * s) +{ + index_type count[GFC_MAX_DIMENSIONS]; + index_type extent[GFC_MAX_DIMENSIONS]; + index_type stride[GFC_MAX_DIMENSIONS]; + index_type stride0; + index_type dim; + index_type dsize; + char *dest; + const char *src; + int n; + int size; + int type_size; + + dest = d->data; + /* This check may be redundant, but do it anyway. */ + if (s == dest || !s) + return; + + type_size = GFC_DTYPE_TYPE_SIZE (d); + switch (type_size) + { + case GFC_DTYPE_INTEGER_1: + case GFC_DTYPE_LOGICAL_1: + case GFC_DTYPE_DERIVED_1: + internal_unpack_1 ((gfc_array_i1 *) d, (const GFC_INTEGER_1 *) s); + return; + + case GFC_DTYPE_INTEGER_2: + case GFC_DTYPE_LOGICAL_2: + internal_unpack_2 ((gfc_array_i2 *) d, (const GFC_INTEGER_2 *) s); + return; + + case GFC_DTYPE_INTEGER_4: + case GFC_DTYPE_LOGICAL_4: + internal_unpack_4 ((gfc_array_i4 *) d, (const GFC_INTEGER_4 *) s); + return; + + case GFC_DTYPE_INTEGER_8: + case GFC_DTYPE_LOGICAL_8: + internal_unpack_8 ((gfc_array_i8 *) d, (const GFC_INTEGER_8 *) s); + return; + +#if defined (HAVE_GFC_INTEGER_16) + case GFC_DTYPE_INTEGER_16: + case GFC_DTYPE_LOGICAL_16: + internal_unpack_16 ((gfc_array_i16 *) d, (const GFC_INTEGER_16 *) s); + return; +#endif + case GFC_DTYPE_REAL_4: + internal_unpack_r4 ((gfc_array_r4 *) d, (const GFC_REAL_4 *) s); + return; + + case GFC_DTYPE_REAL_8: + internal_unpack_r8 ((gfc_array_r8 *) d, (const GFC_REAL_8 *) s); + return; + +#if defined(HAVE_GFC_REAL_10) + case GFC_DTYPE_REAL_10: + internal_unpack_r10 ((gfc_array_r10 *) d, (const GFC_REAL_10 *) s); + return; +#endif + +#if defined(HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + internal_unpack_r16 ((gfc_array_r16 *) d, (const GFC_REAL_16 *) s); + return; +#endif + case GFC_DTYPE_COMPLEX_4: + internal_unpack_c4 ((gfc_array_c4 *)d, (const GFC_COMPLEX_4 *)s); + return; + + case GFC_DTYPE_COMPLEX_8: + internal_unpack_c8 ((gfc_array_c8 *)d, (const GFC_COMPLEX_8 *)s); + return; + +#if defined(HAVE_GFC_COMPLEX_10) + case GFC_DTYPE_COMPLEX_10: + internal_unpack_c10 ((gfc_array_c10 *) d, (const GFC_COMPLEX_10 *) s); + return; +#endif + +#if defined(HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + internal_unpack_c16 ((gfc_array_c16 *) d, (const GFC_COMPLEX_16 *) s); + return; +#endif + case GFC_DTYPE_DERIVED_2: + if (GFC_UNALIGNED_2(d->data) || GFC_UNALIGNED_2(s)) + break; + else + { + internal_unpack_2 ((gfc_array_i2 *) d, (const GFC_INTEGER_2 *) s); + return; + } + case GFC_DTYPE_DERIVED_4: + if (GFC_UNALIGNED_4(d->data) || GFC_UNALIGNED_4(s)) + break; + else + { + internal_unpack_4 ((gfc_array_i4 *) d, (const GFC_INTEGER_4 *) s); + return; + } + + case GFC_DTYPE_DERIVED_8: + if (GFC_UNALIGNED_8(d->data) || GFC_UNALIGNED_8(s)) + break; + else + { + internal_unpack_8 ((gfc_array_i8 *) d, (const GFC_INTEGER_8 *) s); + return; + } + +#ifdef HAVE_GFC_INTEGER_16 + case GFC_DTYPE_DERIVED_16: + if (GFC_UNALIGNED_16(d->data) || GFC_UNALIGNED_16(s)) + break; + else + { + internal_unpack_16 ((gfc_array_i16 *) d, (const GFC_INTEGER_16 *) s); + return; + } +#endif + + default: + break; + } + + size = GFC_DESCRIPTOR_SIZE (d); + + if (d->dim[0].stride == 0) + d->dim[0].stride = 1; + + dim = GFC_DESCRIPTOR_RANK (d); + dsize = 1; + for (n = 0; n < dim; n++) + { + count[n] = 0; + stride[n] = d->dim[n].stride; + extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound; + if (extent[n] <= 0) + return; + + if (dsize == stride[n]) + dsize *= extent[n]; + else + dsize = 0; + } + + src = s; + + if (dsize != 0) + { + memcpy (dest, src, dsize * size); + return; + } + + stride0 = stride[0] * size; + + while (dest) + { + /* Copy the data. */ + memcpy (dest, src, size); + /* Advance to the next element. */ + src += size; + dest += stride0; + count[0]++; + /* Advance to the next source element. */ + n = 0; + while (count[n] == extent[n]) + { + /* When we get to the end of a dimension, reset it and increment + the next dimension. */ + count[n] = 0; + /* We could precalculate these products, but this is a less + frequently used path so probably not worth it. */ + dest -= stride[n] * extent[n] * size; + n++; + if (n == dim) + { + dest = NULL; + break; + } + else + { + count[n]++; + dest += stride[n] * size; + } + } + } +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/main.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/main.c new file mode 100644 index 0000000000..3cccc3d030 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/main.c @@ -0,0 +1,175 @@ +/* Copyright (C) 2002-2003, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Andy Vaught and Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include +#include +#include + + +#ifdef HAVE_UNISTD_H +#include +#endif + +/* Stupid function to be sure the constructor is always linked in, even + in the case of static linking. See PR libfortran/22298 for details. */ +void +stupid_function_name_for_static_linking (void) +{ + return; +} + +/* This will be 0 for little-endian + machines and 1 for big-endian machines. */ +int big_endian = 0; + + +/* Figure out endianness for this machine. */ + +static void +determine_endianness (void) +{ + union + { + GFC_LOGICAL_8 l8; + GFC_LOGICAL_4 l4[2]; + } u; + + u.l8 = 1; + if (u.l4[0]) + big_endian = 0; + else if (u.l4[1]) + big_endian = 1; + else + runtime_error ("Unable to determine machine endianness"); +} + + +static int argc_save; +static char **argv_save; + +/* Set the saved values of the command line arguments. */ + +void +set_args (int argc, char **argv) +{ + argc_save = argc; + argv_save = argv; +} + +/* Retrieve the saved values of the command line arguments. */ + +void +get_args (int *argc, char ***argv) +{ + *argc = argc_save; + *argv = argv_save; +} + + +static const char *exe_path; +static int please_free_exe_path_when_done; + +/* Save the path under which the program was called, for use in the + backtrace routines. */ +void +store_exe_path (const char * argv0) +{ +#ifndef PATH_MAX +#define PATH_MAX 1024 +#endif + +#ifndef DIR_SEPARATOR +#define DIR_SEPARATOR '/' +#endif + + char buf[PATH_MAX], *cwd, *path; + + /* On the simulator argv is not set. */ + if (argv0 == NULL || argv0[0] == '/') + { + exe_path = argv0; + please_free_exe_path_when_done = 0; + return; + } + + memset (buf, 0, sizeof (buf)); +#ifdef HAVE_GETCWD + cwd = getcwd (buf, sizeof (buf)); +#else + cwd = ""; +#endif + + /* exe_path will be cwd + "/" + argv[0] + "\0" */ + path = malloc (strlen (cwd) + 1 + strlen (argv0) + 1); + sprintf (path, "%s%c%s", cwd, DIR_SEPARATOR, argv0); + exe_path = path; + please_free_exe_path_when_done = 1; +} + +/* Return the full path of the executable. */ +char * +full_exe_path (void) +{ + return (char *) exe_path; +} + +/* Initialize the runtime library. */ + +static void __attribute__((constructor)) +init (void) +{ + /* Figure out the machine endianness. */ + determine_endianness (); + + /* Must be first */ + init_variables (); + + init_units (); + set_fpu (); + init_compile_options (); + +#ifdef DEBUG + /* Check for special command lines. */ + + if (argc > 1 && strcmp (argv[1], "--help") == 0) + show_variables (); + + /* if (argc > 1 && strcmp(argv[1], "--resume") == 0) resume(); */ +#endif + + random_seed_i4 (NULL, NULL, NULL); +} + + +/* Cleanup the runtime library. */ + +static void __attribute__((destructor)) +cleanup (void) +{ + close_units (); + + if (please_free_exe_path_when_done) + free ((char *) exe_path); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/memory.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/memory.c new file mode 100644 index 0000000000..d1b57f690d --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/memory.c @@ -0,0 +1,68 @@ +/* Memory management routines. + Copyright 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + +/* If GFC_CLEAR_MEMORY is defined, the memory allocation routines will + return memory that is guaranteed to be set to zero. This can have + a severe efficiency penalty, so it should never be set if good + performance is desired, but it can help when you're debugging code. */ +/* #define GFC_CLEAR_MEMORY */ + +void * +get_mem (size_t n) +{ + void *p; + +#ifdef GFC_CLEAR_MEMORY + p = (void *) calloc (1, n); +#else + p = (void *) malloc (n); +#endif + if (p == NULL) + os_error ("Memory allocation failed"); + + return p; +} + + +void +free_mem (void *p) +{ + free (p); +} + + +/* Allocate memory for internal (compiler generated) use. */ + +void * +internal_malloc_size (size_t size) +{ + if (size == 0) + return NULL; + + return get_mem (size); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/pause.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/pause.c new file mode 100644 index 0000000000..7db536b665 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/pause.c @@ -0,0 +1,71 @@ +/* Implementation of the STOP statement. + Copyright 2002, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + + +static void +do_pause (void) +{ + char buff[4]; + st_printf ("To resume execution, type go. " + "Other input will terminate the job.\n"); + + fgets(buff, 4, stdin); + if (strncmp(buff, "go\n", 3) != 0) + stop_numeric (-1); + st_printf ("RESUMED\n"); +} + +/* A numeric or blank STOP statement. */ + +extern void pause_numeric (GFC_INTEGER_4 code); +export_proto(pause_numeric); + +void +pause_numeric (GFC_INTEGER_4 code) +{ + if (code == -1) + st_printf ("PAUSE\n"); + else + st_printf ("PAUSE %d\n", (int)code); + + do_pause (); +} + +extern void pause_string (char *string, GFC_INTEGER_4 len); +export_proto(pause_string); + +void +pause_string (char *string, GFC_INTEGER_4 len) +{ + st_printf ("PAUSE "); + while (len--) + st_printf ("%c", *(string++)); + st_printf ("\n"); + + do_pause (); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/select.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/select.c new file mode 100644 index 0000000000..e9d7f3559f --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/select.c @@ -0,0 +1,46 @@ +/* Implement the SELECT statement for character variables. + Copyright 2008, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" + + +/* The string selection function is defined using a few generic macros + in select_inc.c, so we avoid code duplication between the various + character type kinds. */ + +#undef CHARTYPE +#define CHARTYPE char +#undef SUFFIX +#define SUFFIX(x) x + +#include "select_inc.c" + + +#undef CHARTYPE +#define CHARTYPE gfc_char4_t +#undef SUFFIX +#define SUFFIX(x) x ## _char4 + +#include "select_inc.c" + diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/select_inc.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/select_inc.c new file mode 100644 index 0000000000..904ad4d86e --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/select_inc.c @@ -0,0 +1,133 @@ +/* Implement the SELECT statement for character variables. + Copyright 2008, 2009 Free Software Foundation, Inc. + +This file is part of the GNU Fortran runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#define select_string SUFFIX(select_string) +#define select_struct SUFFIX(select_struct) +#define compare_string SUFFIX(compare_string) + +typedef struct +{ + CHARTYPE *low; + gfc_charlen_type low_len; + CHARTYPE *high; + gfc_charlen_type high_len; + int address; +} +select_struct; + +extern int select_string (select_struct *table, int table_len, + const CHARTYPE *selector, + gfc_charlen_type selector_len); +export_proto(select_string); + + +/* select_string()-- Given a selector string and a table of + * select_struct structures, return the address to jump to. */ + +int +select_string (select_struct *table, int table_len, const CHARTYPE *selector, + gfc_charlen_type selector_len) +{ + select_struct *t; + int i, low, high, mid; + int default_jump = -1; + + if (table_len == 0) + return -1; + + /* Record the default address if present */ + + if (table->low == NULL && table->high == NULL) + { + default_jump = table->address; + + table++; + table_len--; + if (table_len == 0) + return default_jump; + } + + /* Try the high and low bounds if present. */ + + if (table->low == NULL) + { + if (compare_string (table->high_len, table->high, + selector_len, selector) >= 0) + return table->address; + + table++; + table_len--; + if (table_len == 0) + return default_jump; + } + + t = table + table_len - 1; + + if (t->high == NULL) + { + if (compare_string (t->low_len, t->low, selector_len, selector) <= 0) + return t->address; + + table_len--; + if (table_len == 0) + return default_jump; + } + + /* At this point, the only table entries are bounded entries. Find + the right entry with a binary chop. */ + + low = -1; + high = table_len; + + while (low + 1 < high) + { + mid = (low + high) / 2; + + t = table + mid; + i = compare_string (t->low_len, t->low, selector_len, selector); + + if (i == 0) + return t->address; + + if (i < 0) + low = mid; + else + high = mid; + } + + /* The string now lies between the low indeces of the now-adjacent + high and low entries. Because it is less than the low entry of + 'high', it can't be that one. If low is still -1, then no + entries match. Otherwise, we have to check the high entry of + 'low'. */ + + if (low == -1) + return default_jump; + + t = table + low; + if (compare_string (selector_len, selector, t->high_len, t->high) <= 0) + return t->address; + + return default_jump; +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/stop.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/stop.c new file mode 100644 index 0000000000..8c4247d1b4 --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/stop.c @@ -0,0 +1,55 @@ +/* Implementation of the STOP statement. + Copyright 2002, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3 of the License, or (at your option) any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + +/* A numeric or blank STOP statement. */ +void +stop_numeric (GFC_INTEGER_4 code) +{ + if (code == -1) + code = 0; + else + st_printf ("STOP %d\n", (int)code); + + sys_exit (code); +} +iexport(stop_numeric); + + +extern void stop_string (const char *string, GFC_INTEGER_4 len); +export_proto(stop_string); + +void +stop_string (const char *string, GFC_INTEGER_4 len) +{ + st_printf ("STOP "); + while (len--) + st_printf ("%c", *(string++)); + st_printf ("\n"); + + sys_exit (0); +} diff --git a/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/string.c b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/string.c new file mode 100644 index 0000000000..030c04bfcc --- /dev/null +++ b/pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/string.c @@ -0,0 +1,123 @@ +/* Copyright (C) 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc. + Contributed by Paul Brook + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran 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 3, or (at your option) +any later version. + +Libgfortran 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. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +#include "libgfortran.h" +#include + +/* Compare a C-style string with a fortran style string in a case-insensitive + manner. Used for decoding string options to various statements. Returns + zero if not equal, nonzero if equal. */ + +static int +compare0 (const char *s1, gfc_charlen_type s1_len, const char *s2) +{ + size_t len; + + /* Strip trailing blanks from the Fortran string. */ + len = fstrlen (s1, s1_len); + if (len != strlen(s2)) return 0; /* don't match */ + return strncasecmp (s1, s2, len) == 0; +} + + +/* Given a fortran string, return its length exclusive of the trailing + spaces. */ + +gfc_charlen_type +fstrlen (const char *string, gfc_charlen_type len) +{ + for (; len > 0; len--) + if (string[len-1] != ' ') + break; + + return len; +} + + +/* Copy a Fortran string (not null-terminated, hence length arguments + for both source and destination strings. Returns the non-padded + length of the destination. */ + +gfc_charlen_type +fstrcpy (char *dest, gfc_charlen_type destlen, + const char *src, gfc_charlen_type srclen) +{ + if (srclen >= destlen) + { + /* This will truncate if too long. */ + memcpy (dest, src, destlen); + return destlen; + } + else + { + memcpy (dest, src, srclen); + /* Pad with spaces. */ + memset (&dest[srclen], ' ', destlen - srclen); + return srclen; + } +} + + +/* Copy a null-terminated C string to a non-null-terminated Fortran + string. Returns the non-padded length of the destination string. */ + +gfc_charlen_type +cf_strcpy (char *dest, gfc_charlen_type dest_len, const char *src) +{ + size_t src_len; + + src_len = strlen (src); + + if (src_len >= (size_t) dest_len) + { + /* This will truncate if too long. */ + memcpy (dest, src, dest_len); + return dest_len; + } + else + { + memcpy (dest, src, src_len); + /* Pad with spaces. */ + memset (&dest[src_len], ' ', dest_len - src_len); + return src_len; + } +} + + +/* Given a fortran string and an array of st_option structures, search through + the array to find a match. If the option is not found, we generate an error + if no default is provided. */ + +int +find_option (st_parameter_common *cmp, const char *s1, gfc_charlen_type s1_len, + const st_option * opts, const char *error_message) +{ + for (; opts->name; opts++) + if (compare0 (s1, s1_len, opts->name)) + return opts->value; + + generate_error (cmp, LIBERROR_BAD_OPTION, error_message); + + return -1; +} diff --git a/pyne/fortranformat/spec/examples/gcc-fortran-4.4.0.tar.gz b/pyne/fortranformat/spec/examples/gcc-fortran-4.4.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..57c235c0c650a201724ff19818171a05680d1c6f GIT binary patch literal 1923874 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Ξ-S_pRqAor5z*)gY7GBWgCWoS0Dl& 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ⅈh{9w6unx|2C zI>?}(D9+7xu)fLWP|P$~4osBsrg^TTqUz=p@N)|S5X{Qw&BlqZrU0G7dWW6Uvy8P?Ie#@&n8-QGFeMJW4@(B9)p$5i{(P)~}KpVL_# zjVqL9STbn9%OL>aYEnbK1!S(mqqZxQ$t#l@Yjz-+-{3tRd6;S{p zpoB;^Jeyh(vaKtfdUS7fH^u^90Y!JaC%gi7__PF&5B94S7hZ5Jwe3XT$ zk9o2`LW4im&6%T@#B6FhdgJKGZ`U52zH6Yob=evFkfS~7Vo}A1qAh`e7Hx{?Gzn4C zo}WIZaqUwdX`e2sP1O~hWgXE)?!MVW(L5Z&24`^vxE5V0MoWWLwHaXhathoHk3Y~$ zWX_{}{5f*TnSpqS$03@2P48CN7rH_WG8tgpUOeuW`;*|e`;)u=qVnhd+QtB76IeV4 z!Y+s^`q;BJIr5KbG4c8#cNgQl42hnmBu*vtV_l`9m*c1exH6u-+;yAMH0CDmIM#DW z5)tFHu!>EmwpeoVia!z%;NG`;0*Vhz5>niM6iJVUq1WNS3gKgtndW}K%6BAZ$kezu zyp6b>HIl8cWjHi4C4)r*GPVVPv(AJG|A1~n`8LPUyUnBK;Yt6v)jT=scaD#{&E6(;j5Y#5jlz}8pYI z2zp^fv^I{$7zlUMzQ%Wj$+Alw(%2|3pRfN~K9;+Wwov1$+r$H5s!{@CA=&!TaPcP@ zT!Nt$W)69JNr)f8gHowWVv=b$cr1|_)x30t^G~Ehoir32CDtzRzu(tBBolDsh1T#3sEKbjcK*-CuEUezA#5rY`7Gl-n`p z=PwW!9jC>@7?(O+FeF7TR$q9p9B1*tHqYoZG6Oprsm}5gpgVre3pz{ZNNP0tCYM;8n1T za$EV1YWrCkvzo!s7&F~^nHM!#4I?+BZgp68oJ0B^;F>2QWJzQ+o(|^}U&&Y+Ww7av z%n+XCrCEsYcu5rs6Dus1RN;R<>7{m37PxH&>5uYx*Y*=$k$~g`7GOW!4sPKtS zO$vN1Pk+mfFzEv)TgP+w&uE(VCxBK3bm~v=PK8$cE8NI0m}c;*Y|G(GlZs0%&{_#C zqeGh;_sd{pk`44?`;}m0*LB*^;u}FAd?FYEAH`s`>9C%)Wkt2+qcO3fbB9WN=&vrE zMP90eH#mvgc&Ob-7AymMy5yIakljl@ae_8>EG&e-VF8g=aLsD+XwjU2RKo;4T5Mkn zq!9Y2179)$>q^VT#9>*SS61&X_<_-2{z7zRu-x!B+;VzlfIV8z)pR75l~#%gzeSg@ zA=fX$A%@Puov-4$BnqV|ZN)Yg-4<_al1W^!c|0m-2hC%q7gZCdh8EUdb0K0a?X!GA ze^L%nZt}oln$VBp6jym~M$NCSScV}h(QOE;g>WVeT$Qnb96v#Wk@4*^9nJWGj66rF zPH!j|%8*ewqSY$u6b*Pattv5~(W@%qnViqjequ_YJ#ur<#VrQy0N1lzneqqY&1BX< zquL~mDLIdbL?~x!#?%sR?Py4%`5vrSX6I;iBrg}pCoMo*tIEcSs%8{1avvn-n-c~B zyy>KZN*#pt!i++}@}JD+*9;k2!lE;?&m1_C_Tj)SMskLicFXz3SZ<*=kDoW)hIktZ zz!FC02_SQ~6uc$$9a!;{)RjV91tP)R0DepW?e6K|NmL~q4vUI<-{PjJ+0G{u!0E|P zc?!ntBAZ{X-o+@rE$!l?0por(WRTZGdewNQL)Crw^T6WI{RD}JJ=d0ZOKAMg5u=1s zvnNfxQojz+tLSs5xFlsA6w%fO$yY^_my=X_*iuPO*_N%2yr`05NC^9Uswdcwb<+aV zBO1v`qI_dDI6`~xU4k!{!#Jl=T4}U`fvq-HtnTs%S~pcX)SNnMrO_(U!Tr|Oqt+@a z5|_>@r_owzR*J1%c2hpvGEu>9_V~Ws8+$9#L`*l^J!KIaWU8i-|dRC}6%I`{xPt zNRh=wxC0fv&}s?2G^Mq;5zihg5Uddg=(jv#as**Vj)c+~Q*=VILr-A*c7K%QSQ^Ek zy*kZ%7A11j5+}^$lxPZcy1jmCOoGVcWLUN5WUa$+7Uo_KZry4*rh;YqtHB76hMQR} za*>Fq^Y}-Y}?pZYcfsVOrSTl-nX)<@p{S6w| z*6wT0h=FD;kTs155kv(G@)#gf{K?^YRB&HyG;3#0?#N`cbzwyoIp${Q{2C__r^dY% z7KNAbj1t(Qas$K2PA1cIGR4&5!t^XPT0#?Pg?9+A3~r*qJA^#;URDQvs9eJJp_X9B z!I%oXLkaVX4qiG;%T`T>UXl@u@=cl6jfU+8SMUm-NtTbR>DR*JKEyvE)NLwJGWzk+ zUd2DvOmV9uLOL3Y`;Z_y@dwTSzG!{hIBB*Io56-uCT_sNesr>dhBaDjvSy+P1qNbV zFpUq#$EHt;xQ!Xz+4Hx7=VKAVR|us1`k^ghGlq3GQq->R4puiYC%hUXhO+^NG8e3i zYoR-)D&P+rR_^*E3Tw$T{ZK zvRixMyjKEJN$PU1HsXjR!q}DQVwaHx(@#ZYyk^s1m^gV*gx_IO0e&3VSh=dZ_dv@_ z1ct_jcKEImC|b-;Hno-W?9O7l8aKw(@aN}25lA2u3~c-g6@Ib|3TW-LIvS`Bi)gGN6g4Yup;Nk#?H3#)wp{_a(rtwDFg+kE{!nxR|;Ij+8jOnO`jv|EZJ2y8iMJXr)Jq>XSPrqULWj17qVZDN0c{csB#h{?EkA7K2xvHcp21o+b(R8Jlg%{jRfChVN711M-KhL?(sg`l{zzJ7** zi-n{;3$8J284Dq?rMeL;&586z624(Nn4|UlIt6_Tyg}b+en+ApN5d7t#_GYhB8c1G z&OXLPQ$gEQbT@BYxWF41PUbOLM;!tX+&}_!BO$lFjBri<-~T&?;`o=<%9AH`(R7;3 zwhvK;yWRs{NmknoYrxV(7@%X6-qtwAhwLqQ9S+`crNF9mSz9+M!TvO?5Nskq8m_qr zB&LGVU0)4Hn_pqdGnjvP9l<88Qz922p5j4pJ&%VGr=CRmBEoGZ5u&jlFAyi9Wy%tA5D=QRsOFBuLqo865#F>MqAPfxXQIsb+Yi=(>!H#iCF|F{Om@E_qI&3^sI zIGo+2lVATa9S8X0<3Eyg6pw*k{3wfMabg#P7oK83huX#9g{K(wag*!y#^3EtuHPGf z$2Ym2t%9@yIB}RiEp1Cd$(e$Z^}hk7Ho@~)@RfJa2Vl@F0OEXoi>jhy4Q}}h6%fgM zi+iU!$e_yKkO2I(@w#)~`>3nXbDjUZ#1K3j1UdzrHKw;l&8|@oYj*4M&&w=m3vzsyloXEfQdrh(658ja}yK!lPmi^F8qdTR{?p1ImvAg896DTaFtOBy)( zuZwQ)L^UCvv5AxD3iv8c{v3*65l+2xryi}rIo*VX6%@k# zlM@MLM-k@(;MDA+krd4m)&)YbV|t;j)~w`i>YSMvQ>M;@O?9-#)U( z&_0r5cr8=|(%1n$8P)9dqGzty24)HQd;dbUe{j0{!9QiV$P1_3ZMChff@clZ1uzL^ zETG0`A5a%n?{*GbdYSdJwajdIiJ`it@=p=E8Ne?#R-xChX8_N71~bfkftea}qkv-j z<|OdBUa8t!r{f|JSZ)MLpMp*Ob8v;w3hdBEqeZ=WCY**-sq^4J)4kNamG zl-2UZU_95Ac=3>f=t+*o+s1k4P`Bf}DQ-!UBfd5-+JI{1TF7Tui_WE@ArH|c1I;A_ zdXUW-%@}P^Gu%c{(hThG<(fmb&mB|_!-*i@^0$DfmY;S-9oc<(rW8FR6N(2 z&LSz=Ac{wn0ynq2Hr*0vx<%IAo~7H``iv#)#GHBBI%=7X(X%3gFeQ-4DWnq$8Ff!P zM^;^Uw(1JHYoZv|Oy)|}WZ2>9*~#~2EBGv05tKve1Ujdua8LFd=Wi}fn`k7^xuA>E z|DhhdiDpK8N0Gyr6OzEiLA+RIwvKXry-oaFuROT+f0=X=J?G~3^ZXi#9ZzkWCf39x z)b?MS4ka0AO47V}28FdREE+?s7NMB{l0mLOjio1yk=V{hMhSH&-y=YweFQ7fhxJ?!jzX5Y6i)Hz^@%yO0H4JM9g&+S z=Exbu1Wsj;b>tkIBYkW{JA(@Fd31czX&4L6&-LX;(|XhD8NkZV)J_+8c9brlaAz1_ zW9SJ_^-~Mb;aLLu8GtIKu^PrG&bGL%qfQU+l%tD7o`UfVJCV*rcnHt^c!b4_F6p^$ z??O>kR5X}X@!6_Mx@2O0@|7LPJkpTa{16T1%v#%^V*{#cs@bs*i+IMyn#ph*4TLHj zmF8Kub<)wKv3RCdCRsf4ZFckg*xD_4mb=v?a~xj{^UB2<;>s0hkmQU&{Y1s}``yFF ziQoo|=Q=DLTfD`;0;DXLUzGSRGq ztxxD!n@x1i?It>cY?9;~d1iXn{^Y{CqUo7y9*^ePP0)JUL36CxW~RaGxP4(^NPHFx zdK@dB-_zOIg}o8*Eb7Sshl_RsRsi+^K*DO&+6a8EFVm=Q3a$EE8vn@WIwsEv2b{Uw z(xXs}4=0YF(OlEIT=7{<_mnL%htakW&EVPg+|S3|X7lgnI7x4VQS=^}K3ww& z-ArjhfJ8j}uzHOYh8cZ%0eX3V)`c2E896a;b0B|Qk>&OQoy_1f;!SJjhB)yIk z(ixdG&YW(}L^o%gd$g#d3#ZzJsCJQ|Cc{_f)V{p=xo+Zcx}E@i!6(2!SE;J|w$tsk z4SdSaYGMNFZ&Ek`*7V+9ys^*=J`416f-=XE+ZEEk_33(lTgQ1RWZ4Xu*Lp5kEa^lx8PRSa950uMbbm z3zVJ(t|Q~0%XnrKwz!Lcp0x~2#7(r;>vh*6LFiel2du^&aZ1ah210p?Bnis+pq4{e zwKQQRF*sg6BZke*VR-j+oF=oIr*|-AeciX37I6{abHV;Z9|k}*AcK@njr!;3?T!I0 z^h_-rOL?V1&*gEwqeE!5kD8{4hMu(!u`al@R9M%-Z74k6kklmy28Td&R6l`M{pi!1 zY9j1z5}8%^t+j#Ydaml;m)o$%g)MyTwD5Jlg)g6%v|w*f&{Erz+aGgR&h2AI&o<3C z$)fo%-JZh10s7b7g>JvqK`H{S0&2&4Q4e|~3P!~_@qgPyVvtJ5*91?&dXaAe?znV1 z%r(;J^$evFKhs3MyNM`>a!3>`d6NYq&GrarulKQugt~8!ts{!h;)oLCisqhn=|i(q ze6HK2gMp9|jqZ$!ZAEpdGe#6^AcuX}-{Rif_{S^eIdcgSR|o`M*KB z|Gj1F9PwEIOBWUTNGxCD@{qJir06zk+n5@kMeV-}odwR}K9#Az|=U~V(-U4n)92=uCOZ^6oN%dQB!X5zZ z^QagGcS_B6zjv<1MDn>_USFkqgbRX&>6asnGNQ`ql?KwLZ&K0fxekkVO^FD{%0|jh zQlHr5L2#nT0~q87LI>9vP@Gc;C8)C`PbH&)p3^|DtN~rG)i!yS0G}mBqw=scFk`xm zwKDwV#2M~MZnz^P*$T#b;*9mAS6EwDYQH`)hsw`&MuBLTB2BIEMoQ9T+u5$bcbVAw z9Nal6Tnf&~(3D-REWJ>ULbfPf-hMS5wf*@W@4VUDHO~k>3&I4==J$5-B5-O4W_1jW zpc)X*b^9igSBZ56opjpPfbqFr?FKz@r0geJ%1+iISsweIILz$HVrKTlL82!H5_Jf4 z1DRTM`YD-K=r;J7rPFsnna2Z>k2f%Q`rIC!HhQNQCuS@7Os$MVfTRz>cs`oNlTkbf zor>REAOX)3Bu>K*@pwKK7D*C&GL1{td1fP)h|YMft7al8sUz4V`LV@3KqY4(zLyJe zBIhmTBi6_y{pI3zXyDt1wI=vnFP@rJ`4Boc4lzGdvld4gz($nVRRLJSXB#WO+lFW$6H&&xbjK3x~-GG?SC#aysX#)>-4wqDAmo)H@3Y?-Xnb z{i=KdsHOOCsUhM!b3~M9T10s^rP#$~^2xLF=3%R=h0E%>9vnr3c#MK&rQ9qy#Zaef zC|3gUT(^wpZY9%`h*ajt>&(aFJB?p}5fWC`k=eLbU2@|>bxG1P(mvv_tdRGr@_FN^ zWnNG8Y)~FFA@sgwiMdg)ebhPaw=Yg#lU^a4gU#?wq* z4CU~{f#!!%qcbY!hM}-^HPExr!;0-yIC_f4C}vFyu+Nn#V3lrd?Qfv9zb4&9kVIZl zM#Xl+B#8LA&b^X>en@nbQQ@p<5?%Z(Doi3evO>%PEGL@FCN@R@Sbf_#(_M<^x+4Vw zG$c|%IG4uxc^3|^Hd0d0br`@PMphLC9DIpQqY*{61vn1}CUt)9P@CtP+GHDJ54lOI zU1OE$S%?NuzbntGEth~&*2dzqNqpksnIKi7pN3{$$EN+-?3Uh{~8UG)XypMQxaG&gCQnc6iAXQ?U}F~x00zSFIk zzQFl55WI7ZsF%8xJnHPC%EBO{%;!1@VM)VdkWos#r`xdL7ut~UYocGWx+DnpQ9j+) z8yhI#Spr3Tohaw4{B}S=^QiN)GHHS70%JQI+1kGX>j1}mI?(3R(3Z~-%dwpfwC%KM z#+4P+{hy{?_kWr>LIBm;)&e5l_OG95=g6&f*xutP-@;k9X<9navpCwLD4M9l zsqRZdryzuDy0P{f3mN0HgN%o+855)C0=2%4@Ss77@ZeABMX!`Jm(lDN<7v%qQ!z#% zT(|~2nAkjb7bu5@i4o|T#@ZO75KxQcOsYuN|8L8$CctM2#=p#gl-!=CsmIcz>)f$j zeaD_hI&cT0aO<`v-?4CJ$gdq4K%iv+g+hR?ZMG0}mDxhjosUb%o9+*%mY|5A>y|_- zyBqU4u%ueuAG*EfsaX@B>)NP?s@_DSkyKGRRr`v)HJ|GRsNV4_2(({8&?_?Tcf11v z?HypA?n2)HN3arT!Aj8>p@6CJpyztNLZ1KbwQTPZe3oEmM3rC*JyZ9YzYlunjn;`F zPv+;kElyTq+C}nYsNL=!Hx+XrpX-4R{DSHm5%ndrE1q?_as}0Mohwf8Hp_7(aKw!k zY->d!h8Daua;1gBW%v|2cQIvg`wxVrBy}pkm@?h6m36t;mG_iw9NkkBTHA4 z`Cptix+eEV&suG&Jd!ytW{R%NnLc_KZCen{&vj#En8elLt{7(!7iY9$vylAEGf5^E z3u!QoHan>r`?h)BIyOLdiCj=wL~09qPa^5G;eOT&k=z^U?Y8T&%# z%J`i(3;l-S&-d|={jp6qbm8Pn&TdS8t$XWFF(}#8@aGow|MLq(_sKAv4(n>M{7vBM zVr0HsD4UUSCVls`I%B9BNngky?lKtJ?XH?sG@%6eK9Htv+ zBzMRqT>)a9sf!yUK4ybyOiX(~sn%!+*6TP~k7DBQ3+J92iu@F$R;_g$mi`!Ls3ir& zmax#EuHuHuBAZzauBvp7v2Qq}8|)+O#CkZN-K5iaMl9D3?>zw3IGS3LMMHjjg9B{V^YD`X zUi(Nh*9^9LUtgb6G%TFv=#Jv9>eWGS`(enD^g`Ix6yS&?9uz|hd4kc1(g3duX`sjm zb$b&JZa6>iIGq}_A++Bix{cK>>_!+)2RHEyhCrt*n@=XN27DO)CJ2aMWq^i{B8n=x zljRp&Z^z58Kklr*MMP82P5WzWIgUCPuTPpoS<2Ccf2{(b%>=)}`~mr%xG3V4VXAkYYXYji9K170eJA2RNzmY;?EI#Pnvg zbG=jdfe4;4&k|zzhGV=bM|X7!ba*+18*|1OOo{1?seOcdD4B&H)ELq+22>ov={iN< z*i;7G^dO`eMpq6cHqZ=m=J0FcY4SvqFqbwhdw{4V3cwPGXO`=P(5nTQ@ga9M?L(U|`Hry2892 zGlX8ka2dT%*(Yr>qtJXke7O$WLa}}UA%vK*<(LdY_!T+mgEWY7pUVkHP= z!rEq$5i6TkQ;jfNhwX+cxZ|W57{?z()DgkrLRsO|fL-KpfUFwW!U^eFFGmI% zSFt{Pm_m*kLx2d9iGoUK>d1^dfg!~6ktWvvc9n403sF@B!H^Caf~XcL;c@u}c!-Dd z@kEuCWmKbuCGkz2U#Q_^DD#Z^U-#Kjov_F@sHV@IdREEYt#x$)Jy#+CXAUM1-^ z7TU(*A2}FK5CLWx%;eRI+Kze5Q@$dI_j|T` z&i7nRMyOx`VfycGc--1)y<(US1Rx;JS)xgG8!2Oj@CQ0v!#1#|@ksU%%pnrG`16=` z9Jkaq9x*6lVp}q`5aHMBuwC2RB;#+UgK=a z)W0k15~pSbcTL-!hxMbAy<^xNG9tHdO-Tb-p8Q&5lDaU^%i)>$NvC0@`aG<>Tvs1| z>WpC2AxWc< z0$M_}hCw1^Cv|%X`Zn-)xs-A%u{z1pY2bEKSF+q$PV*;utx9l*u(zGwf zqI2OfA}W^Xd9)7yLJ&**6zVJW@yBQR@!9_Id)Y?=(wP*%!TOrHNjBE4|38>5swWT$)9;*|jdMA`uPAQjh76(DYe!I0_ki3r?fU47XG@bf)eDzZ`TV=B1 z+fzZMh_}N!R*e5P$Bch<#4r z-<=+|7!fExwT&V!-9F&2N?2zaB}T`o6QLn2~=NnNNnKb6Tc-&=Sc2-D862JYd2)H*yAXy#f>08nn*pfB5#prs9?XYh;lTUH?CSi&jiX%Mh;hUg@X z73byWFj0wHu}lN?0^{ z96l~1&h~m44gq@JJ;785{Y!dVhSxB5CV-DUACG2#tahO9^Xu84tDWlm{PR3rSKB#X z!3OmI+SKu%gn62;X(KZbi}o{3FfG_}o4xXR(QUfq=2z?r*e%eHJh#QbM`5-L;a!F{ z6Q-Jl2hS0MYRn|rS5fx!g*i8LrPKgAJF>z)3`Hl$Vw{HwZO4l9m?IpT#Xm?i^{UfbRH*!%2#KSi9(_G9!=r=gBaEor;%p>f=Zd*)ZE1#+KVu(tW-tMQk0F z-sh}dy7MRo;zk9%wN(iHV(5kemcvgpB# z=K~^9;H8tlT0+D9pu1KKPl{8KV*~PK5C0p1!v7JjhkqHwe-8?~HXGwn2E2#hBEuFFbAd zUd~Sv%|~}3kMHvI(bv@iQW+T3%{gf$xd7cGwS4ywRIw+XfL_l%u+%dZNNd!M!2y~6fmW1-H$2J9B&siiSbkU zv;@D9Bx)lV{PxIq($0b|2`VLtsA%MDKZP6|`pJQqwY*78a`fP^h#pWjuoV)7!wf+f zdAny*1RY5*2T8yzZsR);h3EH66b|o)D12iSA+w;%l7#G%uZAd$W)OuUiZEJ)B8--! z2zzr-1WZDdqX(3!h^WD=%tWD08MrR3>$pGjzYc1aU!hwq-U&M`FG@SG{?cziG;aFw zpvRJNzi=$t+$b&sw-wsVVq8^KnF~GDdwOg#$2Wm1!8j9!Q4ggBvmjCX-R;d>;Dr@cve6@>WN`ew*9l>OS15vc@KTk?ix# z&-835B7>XOxIUpn%v-=J#zj%K6ZpTTT*;o0XBIz_dgMd3RA7fH zHJW)3aRlQbMldD4oW%gJ21EawhP)H7yZ$vwI6-M7&le@`&Erzdx}U?uYt*?k#OPN| z336S1P_ull*DLix&0QRyH=D)q%I+17vN_Dw`Wsx;?R&*>GI?%)AW$B34I*@Y4hK#cv%J}5Y6!n$}&n!!+=L9te4K&n4pgNtn}hR z=f>h6T%9lpdKoJ>Af~emu?eiL#4tifQTVRb+}W!iA^}Daj*}xK!4fxwjB= zeJmf{2Al<&yMnr;41@Y;lu2&u7HPmFwVW9-t7>Tj8C4Qs$lv73Ko}dXf*(jZ=-L?F z^~M!E^rEX`w~=U2NbR5>_aZ#oivB1^Izt9?C@`ou!zRbBO@`zCfKriPVU%YwNkO|v zyBBe9g2{k56YMn{?%qVD(8he+pD>o1{1*vsf{ExT4zT1fnNru6i$a>c?klvWs3o5_ z3Pij!gN(C}1RI*CaF!d*vdf{>ZWJP5Au7Qlmz)~I-IFF~i6I090hW1l*g82zM8+~M zAmQyjJs%{eI;vMQdG00Oh>JgIAenB(K~@6%HSklr@wWN8N?VtGgn0&N8woBBY=t1P zKiS#cd%aGdq=J;8+;w=$=bILFE^@Mq^EST(3ePy}DwLTDWcl8Xz+9GRsg?7wJ)9)q zPnrzLnzo6ZSphPA)ch!*ji$A<8M#G)95^bSE}tSyRH?e|<9XD0p6OBOHIWt~l7c)Y z9dwAK(}i2171%6-E)b#IRP?7(z((>nRC{teRWn(o(anII3tgH4>=O&_9T5{~}aW0_DYyE=eW(k}1-d+j2htvjog)By6hNUV=wswOyS)<*t zDaT3%Y~g_#C>lNFRoJH)_=lXuSPEWHsmYCZb)=P-c_F1nVS`hkTVK7FaBLxIb`!L5 z{A7b(B_2c82M8ppl5Qn3A6%#CM*gAnA+FK~RMV1)&a8 zj{t1~2glI*TrLijQz>=RoFG)1256ckB_)5pOSN)-)^Vmr6P@Ya&Jbx+B{|TQ02l^Z z9d z&nl8rst??C0oj*`tPy{SmP4zCqzSFhu!AM|CSJ)Z%qaRB6}-WqRC-#WRft0Ozfa2! ze;jE3$Q>fX>JSrJrxdbasRO12{-YRjr?e4mf|7Yk|CN^=)KTT{Q~Pfyv{9BAbtfVM zyW9yY@!u=qX%tq=)8B9K``7`V&>i$Jc;AI`0UvH{W4dz>H|7`2ldW9nLj_Jwhe#5T z*bG=zsQ9dgGLIDQ;ldo2t1Q(H4{IMxprPFDNyk*!p=D^1rdM;XyJW~;w(~1A0b+%& z8E{Grx^#pxfILz$gDQP4m-VmG=Tg7y71C9! zbDrd8{tP$e^k%X4sH{G*O>|rM^SgGioEqLOum`O zcn*To%a?*rq=~jVW|5lYOAJO8&^Uz{N3z8v)iS5VLXde__fCPpWl;V!T+>}_9=nT? zmgY{W5ruzTakNr_qlhT~1+k`VAWuexBmv($g7_Z`TgpnON)3<>E={(m9u$nGj>H~B z;10sbOddLxO6qkHn@}Eplp9+RDwbsIPUOd2bc%U%+v6<$GeZir|^*e-h{t{tmiN6 z%;P9L2BIi`?#iFL=IJgz^?ZoUE#@<9JYg(u9_KFYURejafQ0()L!0_S)SHaNqNDCz zXw$w7?Z)KK5)m9K|Mw)i^D%7rRjcZ#*9vrUj&T?ojEr;1#%i*+Z z%i+V^TdwNjQZKaU=CXEAH^!S^$K$}^&Ezm=q|08b= z#zH>_1tw*JwN-{`dNj>4y}SilP5pEWv>x1|7HFsX*%oLd?e}7V9^UvY(8HT=&H@cx zo@#-1-Y;r_hFO}^ZgtdX=J+yZf>H<)h4>Nlp$W65pEK|y{Grl!!j6Duz1R^d92)hp zV)O|4`eD%{q!V8_99j}teD&xNYk#@whfl)|g&_e88`>Ze`0iGChGt_yA-B5=kOVY6 z6G#He_< znUl2J*n{PK2XtGdgBF@?$t(D{cKEh_oUxp^-UO6BLNa~RNs!NP1q;=EhPG0ZAzbU2 zGJYz{ZQeehC&KipSRFmnv%-7Xd1SIpS(&%=+s+u|^;2LGfyiWn=$x?no4Z4lIrSS; z)Jw~rVzy||k;P%{_!6N7bgwi)jC^(pl3N4TDM@oxLY*2${$!GCMs6$Pu!hQ~+L@(c zGV+fhm<;9qxiXLWCb!}X8gdYGo#LV;Cr}y#CF!7ha2ltt3al96uX6vHxm8eO;Z!xs zdP6GywEkwD>871IwWvkDAXyhXZBnxOrurp`hN(!?g1kcT15K_C(N2IYATHaN<&3|-Fztcq`6xTbDWB6BU81?YDVSNx;bbS? z4U$n0Z%%9U3QqxSBJbQr-u>#ViJtzQd8S`BqGpu&1qk~2N~UhCXv!AM%-bB(&F~)n z=?r+IiV&KgD4PhXHj~l3^H-mL`%alYO5`-pah&JuNcf;t*outblSGuPTv}X1pS<0aFy!v)`i@Q1?75Z+-r7K{kOuBAJVic-TcDFf`>ub zT?;doQkZFvrF5AS4>jctpBt{>6Uz7vpZM`NZTM7s{VOqiBDn|(smq3syll)%Up6uX zX5&FA%tq-$6waVBoSD`}vI_V-ybpg2`{9QNr$1^CtD`|5=A=PWsFt=gX72pGPQcPA zWerdr=<}7ex+0cFNRK~7@oGr$8TW>-o9VXG$+5cf!K>76|4PC1`*%y2*)6Ee*q3_UCKmHj2*r$T8FLikai=i&hmcKcpDgLLrIn$@$p|RJAEP2V;oBGjF zeXsq;^(-mVFC-o>PSe<&8pX}d`lD2(EjnY%OSo>RnN_>>$o{z_zl8>6nu)9i79>Hs z={y;lXDoq?#Q_VWs6YJ~8Y@3_`UC0|-g0pMP~3{94>*4vyt>HTggzuObEf7&T&Vh% zOS1Miz9;>Eit@i+dA7dsvQnwA*eUy>v>quzw91%Awp6`}^g5?;`nPqTThzL?4V+S6 z+J9U38VI<8Z`ndXM`Ll?xFl+*+VRyQDpy^Y%2o4J&V6M6+>zh+M&+t^qH@(cQ@QH$ zRPKIgTlHUpwoSKfg7&vn-I_w)xIlP+M6Q}Aa#atJs}>Tu>Nij1Xd|v%{+mYRnngse zIVX|JQ?{l{*_s*3*1Si`)+{wW2F(SC8)q87y)%hx7Ld5cS$LYDCx;?0)|F@^VEO2D z!`IDpp_&SX=q5vqDf>F4K{e4UOz*BRAamhi2w0%5Z53^smRa`wGBvH}Udc3-C&Kqe zIEV8Q&SB|!R75(5Uz75@EcMLYA}NrE=Hl@8xqk|%vb^w@UxX5WC{n6FOjoKIhH|D> z{lR_oA){4)n4(o%Ei6ZtKg_RIyQ5i^Uj5bwB)*tGXY)tGZti z?VL~5y_urw-aL$|yQs1|gMi|uTu|AaU)A+0yYP?NZQj!JQRBvO`>63-Jx7e?xrTEk zsFtvw4FojwR##+@U4g2Ybg3rF`*)773sr6mbW@??i&9=`vedAm%-obTSSz}vFpkO9 z2=)cr{Z8@qc;vs~ely$GRx(;Mbx0ywqo; z8k1xf3+5@EYHdE0nm5PwqZ~9SJv2uW>-8N){?s{#%OSr}O{GS3&^oe?maFl`Fh z5t_p+$P$lpM0rNk27$#(DFF7EoKi76)bL!L6FRDtI61`%)*mu6wi-DJm zB2c^zU*c)R21|X6uS(0Ieya~9JdR97I8D98b4aP%GfpTU(Cv0HYJvSOk6W;9;{4T- zbt@~xB8cp7vq%QpcLy)9yHV=4uSVl`_0LfVe~m}&jhXNT+b)0se^zw>4D_=(01Twr z+qtxk&HG`NGiPLV#6eFDOPWTMSEpXB(ZTVd?OEF1J!#^jO1`pfw{dNf+ff4oVtz$ zJ7=A&HW8Xmbc$S`(x|6Ny9?}H;I)(C;N}%<5IYvW+a4rc*)>5vf;1Nx+JT2ScP09Q z6suFp>`=1nEuBiurB1nA4*!#hUOG;$!pElqCjbh(W0NQMm?uCB0YJ#Ha9!;MD zv~<@an7$rG2mdm`oTA}p-vQ4ZUkggp#;Kf~!l?}Lqf(dk1G18I+h>EMGcK!B&N!Os z-$y`F%0E7@;LTYU@^W%YCsp@KNi3LUwV;dm?6Zf`(9)cBx^Wix^YW%Gf0nLPw<9#S zyncLnv)#r;e5?RFp;FkrID#&|V48;i2+87S<%n7vf>1W3;a++0JY}?YwJHV1 zL=L{nq^+R|SeQszqM4>uF5zk$zzXx|u(hoo7mzf&jEAy0RS<#O=5!peUtt0g9n7R@ zluu5~v@)I8@zW(po!v-j8%|ji?!v!;^wm-_n^>}%7XCC9aHPO(I->%NTR23fF1swp z1kGd|zY2FaDKJGaPDaSW2RA?`yB|?&#O%bl3vHUN2aEE)apTB`s zB)OeJ46{VAbDEBE$}-eY?+^R~sIiaQA?=pu4mr=#x{j|9zQDRQ9n=gxPX*nsnZCh+ zYrq@K+f;Jt^dsxlBh~q0TAd-*Si-7+3(e?bzJ{)DLT`%_R#0}N+shkiLW%5jiIx zJHj#4xQKL|u?lp#axx&;_5+5M%8AnWnL}L_WhJuOiNZfuH~xAbbakfi>@^0=wgiC2 zdHOf_$|k9f5g;p_tca|lUj6=?F$73&SMMZNGZtJIE-*~8WJ~fJq8Eh9GwS3oRhPk` zMQk*toI+_`y$#`h3<%#XhpSM^#TIy1y&UhlTf2Gc!q4S;hMgP2(;IZ$V#;E2>)F&r z)g}bSO2EgLyIC&>r=CU03^&Hkubn}6g0vy$;-I>$a1}9>(CQY~_1>Vm-X*THp|jG? zMT43|e#|KD$4xb#C(D9wjzpLkg(8ivih}6mIP5n~w<$L%RJCSYK-f!>1Vx&KHW0HC zrgSn%n;J*0_ICSCqq);)zP%MAUm0bq)U=69np<&RPVKOwNtDiVq~}HazJem~>!@f; z@f9C$E5fp2O4GyaO3*Ey8cZ;iYqBqv`d&Qhe~JaZ$|CLh$m)A6CtW!DPy&Uc{K+{4 zs9qAM!^h*W(RCkel@hqjWRrQ?2JoL+rY6Adag};c>_5+{F zk0A4<=M3|yZlj?9_BJ^yrRAskZ=lz&Ux!>Y9{NByaYM@AoB)$+bUiU9L&|4!lT66L zbCROH3?>7p2Rd;EoHk5lO1FcO6%%I9(8+L;P7ow3yaINZ&uO0_;zCcoM7ZAAgYBK8 z!Tgv>a6`_Mq^I@xwdh*zDaEbS@1z5zEQWC>9qaS%<_xpa1xbd`hxA*~Be<_bw+o{1 zeWO`zo!*sj5M_fTr*qXRjaS4aK2B@Y!)$_Yg$=)qldamz%ABaYY+r0vHhyxRB4pee zJbwO@>yIWiAU@x}>y0grH@QMLb|I)O?<1p+-C{D{?p~{EI zXKoY^?A`WFlL(y5+BVu5tL0_9^Z#H;*67vw{K{2g#*m_>-qSdq3({j>fH%XJj{g{Q*iE8QdkfpLFVf!m*RNzvxF1DcNawXbC*j!~_vnu9Fd6Dfap!D4C3IY&t?U zD5Z|%`^fXbyp%**lAj2$LeDQ@!cLVY*)r3kD=Tldk20{9Z$(0+tFvD;k&7@RQ>CM)< z6Li6req5eXv$kJHf_8LVJ3cu=l4cj=r$qTw;qvWtI&h~@BB)&B$p1%j(`XmY!1r*`S700)QhXp|s-?!|#6`7C9>cW^4Z7jRC1rdkGt2s5ydhYr>1(0YVdXn!VpOw0*4MQYP8s!QmXwPPY=Ayze)xLS+KL)0a%NARcJ z&UC27ToB{%Q}QuZH&#zUqkh`GfcDuAd)Ys~pi4-YrbP0VAeqEHh^InnvFUfRIE5_2 z$`GZCLinpb4{db6SUH8vlStdkc?wlzc~1F<2egIp(hYXisKb_m(*Xyq!fxrG4`I{v zlnKNU%w@xMNOoE;dosGywU{cNhLbB|$IyKIxjUHj*w*0I!3LJNr_#!s{y9U&IbCqb zu;E0c^v}sglOtC;4=5*+qb@1H2y8I*2{3EqHuGk0&Ll^z-g}H%V zzqPo9!xrY{1sN&4F;qE!cyN*1OO7cDb-MS$_JcXJaGS0n(z3aU^$YPdeQgPK@m(aV z&@m3iP&cpmRp~K)R_S%dkE6$vA3r~ixR8^%{V|7)yb2%dM3uHgZ#C};S;-7WV+yZo zEFwU>E*Q_s2I6Ou`v-gPb4(H+Di0h^c`)5dz?En-ft@8GjqGp7Nuf1?zgm=cV#}rX zD7Ajjy7*t6WQm!i4Q#ZvG8KsGMb>S}l7NX4m32FpQ$eLCg1lSt!(B+|eJj4#Q9nn?;4=pKPqE;~1QTS?@=t^__j z`FxrbE%g7)emHo~evP7xvkWlVL8h{D81DOeVWN%x8Em}npyifO(s@$j%A_CI2H!I| zIa)cl_O-SN;|A6RB1U!9N$gxLE87ihIfCwDpQ zKC9ESjhvBrvr-jPl$=?3{yRPR9SJ|ygfW+&GnS~|BYEe8eBkyM^$?J0@-u_h{(h~w z)2+Fy#<#ap0O=Kd1~d&$`2Lvy8RYgGm98AgJiuVp`<`q~GT zV7&w?Et9w?r}6f+REU^hz+tX{g2w2{N88w$lWRr%#cKwSu3F>kPAV#1??JtuipISX z3f@Gq=zgx7o-Jod=H+Rtr7SWmjzWt4xGsDGGS?nMYqNhi#XA{qqZiM$vdbAgV1#Q|T}-C@NW0 zlfD-L$wxh@`b8xnQgRE3Ve^l9CmVd2BZPmOoCC-8CB>9VG;p5$&X7f2#loZxYAgMg zy*$?)QcnNB-CE-HZ?^_9p!7KkZ-7QvTT02-roh@wmWs?!9wYLROMp5Kl1?w>y@uz( zA$sXbsNQcx@MIcRN9%r@ar?fa3}pE`a9!^*Cv5n)^PGNx3CA`t(b#5Xy==b~jJcka zcv)?4!CK?NYj1JE-(S;SIxqd6)kqjW2EXiaiC(ry?|0uB#SVT|NbE%bpVJ}g%(=6W zzx8&2SxuLoy%8Khx#a%SXiSSYo)efjCDUy-tB*-WzL#qFH+ z|2D1ut)lvMvRWV1rxevQvxLX)Jkth?c;TpDUU764dNnAvyEj z66i~TZH_MTmlm*r(O8d2= zKjG!&PGjG>WTtkrhJPo9C{PV+YKL{fQ5z(3OV{gPGQZI!pcPwb$DimHl3e!5@s|(z zxbqS9_QcQ@61eOyayaHe?j})z1e`N9rqf;xpQ8MRW2HZaFiYER1D>`&90rpdB5n*;g-UODB^LjcpO@htoV1S{`?+KT>bbDp1JGs$oh!V2 z9>W$wde8Y%>??R(l`{B1$w+-SH@iI4S8Z+>EFL=@qN2!$>J)ZRIu=OB$Yy}f$SFEx zo=pZ6EhC`o(ED@EOtBe)rB%owK(FHNgk}RPXve@ zm9iyzuW|6ge-A;Y*Qbv%C!lcX`H*XL$?>COJUg$$N731f%4YOP5v0l^pppE+8a3!4 zkgD?w-t!%OI6AKHx3~9N+kaAi5j(ZxdK;Z0XxaQU_UK(>H?P&uQ=zZ@5h95oAV&Yp zC@F$gLMn(wXQetnoO{;CKLKJ86H?A5GW4MI~v3=wxS(! zYMz>%QOr{ay!7-&LCDb-x*BwVxbpN+8&Ii>iQu%rS9fF8A2|QAGxKfg72#MLvo2O| zpxwICiRDoUM3fv5VwSYyPWM8$7OHb#)e)X{x*rvtr>Fq@bQQP_cU9@8ZSxi4IPiRD z6O~!X$rN}_211b5e~B1x)&;}+NMfP|IIH(oQUj=nc7h!cqqq1%kX|lLr=3)!5p61s zXf9QUl$fn3{7I=Vo2yY@tT&tR24Cp@aQ{mk*<`OvPq|lXRqO*S*Xxa$iox<-@$g8V z&pEXSuL@!54+8MlQ9?S$R8!o!#n?RBgX7|-zwmqd$=e0_823{A@KO^;OFgAM9WiQt z$Dk{Pr#JFBe!W#H-$tP|BxS~+z{UTDy?^zOBaqT-lk>3pQ&`=4Ro#45eFlI3^!)aF z%w%!Qq!zEEkO{Jdpqe4mmLv`*7FC&1jJ~j__4LY>`wK4T?Ndxiivet2Z)E^sc{I0k zR%OL0!ioi%SjEL{XT}q?hhAT}&FBb_35)mjQgm5s2@0HR%K&p(a2gmlzPZlML@15Y z7qGJUIUKMcV2xo1jybxJTo9-fBB7%7P&*+ihkQ+1S&twkq90+!84sh!2bPaKsSE61 z50sI*k*ACEDh@Tj;{tpBF z;l;(}WtvvfG*zGC(58H9+ARIJR>sexAZGEw7DDC5b{Pq#8{4hH?q_hRdu zeo1`a#yOXi{JDshtW<|%>M{5Int@E&t2a>=z(~>og87ajbwicm=sBrlxwfk7i#5h1 zYRSf)FV>dOlm#y-OIu&a?1==jjqz1lMlli$=6|-O7Yizk9xe zb7g5saJyIrV)W3D@y#{Rb}O1u%RATw>LtlN#L|gbV>1y~RW2%xyZAMIg3JCIKPfDW zyYMysRakrN=6GP`uaT4w+QjWUrUN zqX!G;S6%*cV5kcO@UO`4z&rEHXi>e>fpygqhRTC&qf*`S1w%bAh~U_as+H=qY?K95 zUiw^?KlU23jI9kkm#Jp%CI~JUXK4x=7lI}bltjLam zt@z-giS*n76a>NviUfl6b3dRW_ZZ*0W5bDjb0{Kt+>kJb8^W+5 z!St}$@P0ziP#{}|%zXhMjGnylKQ1W!dqL@_?<0~$a2j4hM+7lP=$K3{AWuj&tCJ|G z!j;Mt_j#IiZ@;`a@imGICM%*>FfjX=3YNUPnCn=S*`pY|Aggb@Z5-#K68Wi01#><` z_xcWW`jmN4uYcYjr#@CMwaGz15Y0gb+BgbRt3s}6(bGY#kXOAQvn4I;vY1IIJrGdx zz}G`NpoPOLWbz}z+*HO(l}2K7W9_s*4rsv$_k|J!We2SR@%gMOd4rs&2K|rm;6`oC zjc2R4d0!4B#?0))V@}+Q_wiEanfIvYJXbe1pFQ`o#!Zvqnr#R-q%Ul4W+(tvoo9#q z__P1G+oDy)mHLI;9r2a;Sw*gXXb zWGTWjC-*XUY_kXRv%c(v(xqonSmk^}bd>2)1r9j^D}cIRttwyzlVrgC`Pp|iFTXOx zgvI078sDwZ4=c%&s7hOx~h*DZOf5gpKOigH!KfjgKE zi~@wP->L<4V4O-ZB9|@5BpsdX>&bay=BA=Dw&kl=TD@Igps!uAJ_Zv}wU+0rRz-OFmxYqRh(i^u5*!EBFoA2@K$q@rFJLe0)T$lFf3?GLE4J+tlcMZq-7S(vw+V_ZR&EwPPcP1{HoWl&hFN3K`>5TX9b zhX>6Frh55hh4eX~7QYk-1z+edaoF@pv(@3}m5p3hKG1}-ayWn3L!le1DSeJ^vg)tr zSS)fTaA>(R!NFYCnV@cxSEJ`ta1})tS^CpOj|EM776Z_9gb|pjEu9ryfdW2=y_fp? zMa{j|&Bj-?XMugmCFDmro-0TLZ6(cFe2p922r)#U-L#K( zBF@ z4#QEi1sgp6)K4a)6_INmeZ^r`hhlqb?gXB65OV^{$71W1GjLTH-Rg$KCiqDpikbrIPTs@}M zk|bH&I~k=FHp1&;f;~95)+r(S2B#RZ0DlhS^A0Wt3AZ|VBXm|WD0MJ`L#BwEfCD`l z@nt|t(boa&LABp-gY*ZnKIbr(2be&aGI>!?J7eh=p7cw73qc``Kn`GSI%hFz6%8(+!oB@ zI|*kYJ;vTV=v3hOQhJ$Y)#G%G?c+11Ec!SOID53-T#OW;g5WVmM&Hq3{D>rsNJ*78 zTL4p#XVDU1RmaekuOh0)A|S?MqE5DJyYP8!uh41RP#|$0K0z9mL6WExerJ5RkF40N zsb9)4<+H=d(B1+}jh*l3^j3c8kSITIDhP_Q3xDyjDBgE7wFe4qtT&GuttRu4d_2^u zHITX=$fTG&AQkqoausW2G4V5^A3~x|i4iO%(-p-`Md9DH(&B*muzxWF1=yO7&_d&# zOJ2ES75GnYGm@e8iGIc(l&WR#OK> zlDaz;i#L~CSF*c%<(=&lf4V34S+@LREY@6RTZf!b1%r5aTbAxedyL5?|FO_ zEA)`8d&1+8{Cf(4BVwd1qChJ`<1l-drCj6ekh(BbY?vn z)pMUKqiS}}qjI>LJ0^#_azsWW%Z6?F>(fWdR_zp8^f(;u<`MGU8W)1c-&kMYy02?Z z>FYlONPgr)sCV+gT1ieqJIRU4aRShcHb$fMe?SE?^HtUZ+QqT1t^-!iDZ z+V;zU+Ap3p30m9sobm11hkU!>l&e&9bdE+hiy!)JU%n%&#;=$LZ2wbb%9xs|qA@O{ z1EAw6I?y$QU}I@Q(49>Qx<#a*`>oT0?PU{OEJq94N87c%`i_qz$g4RhgRW#A0s+$U zXTIg7JLol3KNkSi&h^hDGkEIH5UH=2q*%lH*PtxR(TKL}o7tp7N)}QKRnwd@vd;&k zeg_|r`U;TdtzP8aJ-$16u#-pVIC*^c!C0LS#=okAz>Dt=0{7=2P+!DBp#I%KU^xeY ztPg;p@k=r0d%N!E1^za!`|qi*9_i&iuKV9N@^}64Oi4HWu?~GH>hU@@OD9&hq~770E<-Mp2gt zY=C7FbJVBk(~yuTm~hLF19kjy>bVNvnZ?!?^+|uzI@ItZe`@R%z>n15ALLK&fjYQa zC-!Rb_^I|vcYbXM%%|@UTFrXXBQ5cBm+%%)U8zBc zqy=YW%%u9Qi;83wSeSZJt2w^|?Y?FkQFYXuMsYIGh$u5528{K!HcrT^$|{2E??6lS zNWWQIs*<4Yj=iM!i;sq8U|sr5QmH(995^5?`iCyFURn23U)jTR8CQ1^vpIX7b{UQw z57XP2wGTTrgPqpH94)D7{sa#Tq>WhYxKU3Cj5>4N>^j4e*cFwPoLvm*Cf-W!Q`Ux8 zniDvSW3hSmVc*bLl6>A7!i*2-&vNsuo|X8OvUN z*La1`;FNKJFKx7<$zL=(k7wc+PtIfS`a5RiIWzfn{N|?VNqIg&MzecCJ7Q`+pR)qUcrT&#LA6>)tt!o#;tG^g*g!5?bausHtp=-A=P^_9 zi|5J}l5txzAds}j9un!|p98nm5jK{_iYo+dt@6XOu%zHx!>1^Ll=&ERP7`02+dJd8 z?#v0`y8E`CKNawd55*zI534INLtDtOK88(rN#4O6{E?1(eOuJ$nvIy>Gv7z{*Sd`L zEXsUf6aoxDPOjpSxFKhX&7Y@y(Q%#L!2i%5hce3$MU_Dqu*f3eHdm8z1(aF(8ZDuc z;#%O+FZ-WWR&n_n+1{wPmW=v*%^H-f>P8?p=$~b(PvTohRzjiTXDeWuEv}Q{)hO=u zyEF%1gV1A=oKvWQwYmJgLhCYy3S9#QV+eX!=F|S5Kfd9qLke_x2|fMC`OBAh2amFj zB6Lo|D$93eQ?1Hbr%QEJ0%0+im>x^kiNf4_@krg^6OvVYt@cBs6`sW%AR%p1$yG&^a$e=~Xc>>v(G9@&ePblF^*PA=i+Sa7rT$$($;ym_mRRrzu)# zjRiY{^%QZ7gTvO_!`i-(_wyK;g>*Oy4`5dI>o6^xiG2jJ8?uh|byG-kw8PLN%~wpe zCKUGgyRuY)+0`Fm=EYwR8z6O;o47v!O5}x_jWO(+xBs~?L}Cf%igxXasK9GYI&X(+<~dNJT3Un)EuT3(A0hBX?Nvm z+oh9c<2VZMi?w0xx8X9uq2C}=d`O(3)jIT;J6ea#?i!+{f}&~1uh~`({NCKdB!)?m zKPTmI=I0CBJ6eZi@32k7jFylZ`-^ea#0(nR#dY3W?fbi8k^Up8!A#(P{gUR7Jjy3_ zAx{o!Ip-8X!0Z3c&PefR^zTjCvAIXU-C~QUOKY7ySlx{=N4_Vle#)p`Hps_3CIdbZ zxKweCx|nsoF{EfI;|*-%Y@q6k&C144IqcCjc>Me)*JMfGV;IoC>plHq(^uriF0%IG znb+`>j23oqt2g!<&9{myG+|Z>eBE~UPLAH?$pSoNvamatq!*!bJnh%dTP)*t8V-D~L)6YC;eqve5$-pBxdait#<8-o!w}O$Lv@ zp_!UJ-uq+4*5XxNqs$?v;PeqUSiNMjV8-29)>D*lp)YUZ^Zsy%bb-XwoCKQ6T#>8( zNMOM29TgCe;3ea@fV?bHDJKs+133bp_;-Nl%l z8P&aP+AnA4ck5k-Nx+)ry#{EpO1MI=tLsW)MBx&ax-;%xkbsF+5&RsJNoV~E$W1n+ zH+g1&P0o3}1)^Z?M4+fhC*s#pAMYM#8U$bmrsE!xS?jz|&2nC@siH*;9hol*PhPg% zyr*yRp?x>ye>dfS`(_U~mETSIUxC#EXhqHvUtPDY@aJc|WgfZ4jXqf(lt%@8)`oL* z$+mH0jzF`5GRj-lg}WFN$Y`J}2)1Q`jNygcW!uMIwin_rE>qe5C*Ug6E$G2_Uhg#vy9xcDgc)_0<3`%l-gk`ZsJMt(9Y2P>r48!%n{IZsP5t$wX8l*OsL#RI*v#%> zZpw6iSF5>gDW8+i9rD<6tWKVbeL*(5m0$;{gAXXt;&{4hU*v;2JB5)Cy1;@~328MK z`EWL641p)1HK*2k2*djaG(%X!xW}-D#7#YCr_)<`phIC^To-roc*a_V#cPEvso<2K zgT9p=@_qOuJgn_B-ot!8c~V-lqDGcWWTbbeWkHuHwd%{QN_BJVWxV#xHhrisN}tOS zlzS46I=%j9_=Wwk!Z3VR5q(xX^uT+l>-h)^c%}|>46?yxe3^`H?9*DWTluId;d>Nz zF=l^m8@E-lh8qEK3A&592?Ru(db1BCv9(>o%$&zYBEl{PjzolD?n(gA2~GrWU1xU* zw-NML`kbhf zDKKe0G9cSh-sDN>Fh=)j3R`Tfq6q~907l!!(oxVqQAaf|1`*8w{b8PlupYWEx*sBkI1fZ}b?OEOtlrYYcx z-Yj2(qKpgH&=?Cmo8hOD5FY4i6|G?#^J(^lExO5PFt&dsYB=$uBKK}Z+YxLf3KcbG zZCR04L_^Q&=ZIPjHG?kL2bzmoI{p_{mO)$iB__;;AE3>L^rpIAEB;1mLj;+8$E|fq)xEPTNE9n6CKQ;UMT0 z2E2FUD{*yL5xxR-BEc6S-9 zP^-fr6tSDcsVGRgBVR=n_m{TJ;>d+r;ADLX<7{onP7T`g#2~27qVv3-^BH-8*xK-b z)y)h(;L>JVqT->k)CR^>TVR*HlR1`jD7{JNR-ld(8VU4f&>wz$#Z~Odi5u&ec$8jQ z_4_Fb5}O=FAqvEy&7uj2@T3(YLs__jRVh#~_oIINDNg-*h@_zH$Uej7{&mjw;%ExQ zrfhk!eCw3rhiD|#CCj(>2cw{*L0g!cgES}-GuLMem^VPJ6PYljInL|IqKVpDQDh}( zAJ;yxlMYco2{#zIpd|eu*JSNGDhjCUt6Et`P8`RBLEb5Vq&0LVV?hlny{hy&mY7E0 zVTpcOMb~j~UH?uZ3n{@~0`s=EzhBD|7Lceay4#X4ag!+Ci3Y3$d;7^-^vM#E65_Su;l zLZA!TO_x5GUza|wRm=ZQYUeoq9Q;53PoUqyQT_{bpuPUT@Sn5sO*sDFe?aNmfBXfg zS$zAy|5zK}{w1Pcz1uN<%4-JIJOGmad+4s7@zvkW9Qh$y4AA~ijz1cif+2EW4galt zHSY)If5iy@=eYWXSbyhgZ=J4k5{TP!k|I|$gQum_e z?U;J~fP%B~jMNK(@`{M+o`U~WJH;g%O5|(3Z8IhHUtR%UILrrf@l&HOQqpS?Ygw9w zg-tu>mIYl^q`av_bL7$&uo45*j~5W}O!7WYyI#-sd^amB_ThcVB{VBn(=tOHa`4d? znkc>EH>J%oWeMK?VkSGDx{?B9UmcNCaQ($XQL$gk-OW_zG@TxI5%w3kOwX0T!6i%Z zBqMNOnLCIa4Vc(wOZjCS@TM*}2FJC-xA|j$Pt7q9`#!2v<_20_dQ1bh`#>jCL;|i^_FJ<2jxqBVtFLKLodC#6jH zAH~E{bX~H5Bb{x*fB6#8!i{-7QVq{C)CV+VTvC|u_I3-XTXUxkGk>yAAfcv{u$lWh zuSe#ZAW-o|U+|pc_9($RMd2^Cy_5P%Z;4^`b7pwI2E=j=s2JBWvz=jJBa18P6s3-z zMY1$){N+6Ud$@jUw@rhYE>JDtK(|nB2$8>l@KrlQCtLS)i@;-DrAiOQ)_OS+x3(-0kOZOjF?(XPcg`8Kyar)CkN0?cF?AM!U^fdhmjrLrqgj{=3q69JOwD zqTmaV;iGXfQmF-(TLX9$IDI#SSC2*vX#?0X*iJGzzla=CD15d65C2SUUZ#apCHgmvTMFa{-xGJkqSgv7F!=W(D71S;;rdNWRjwU>V^zoF@DR zuJo%mVvztGP8WcKIRs$#&$hRqUJxNJ;?=8X$w$447sv@e7%>IJYXtO-%sW|j^p%BN z(*LY6bkriNPIZhP6L_1?*S=Q$nI#F0p`yoPN(Gei;%;2It@^N-me3c^CmX)YSF58e zppPRgU7OfAJ`G}bIPO35imG#g#_#(!St>pi-`E%M{_F8Wn+wASKpsnE>rKQG|$X>y~Rm1p>4*V=_Rh37nRVdKC>?JXG zC;r^WDO0(tAB8<8xc-dsH4XcYhLu3_PZEJw5k7RG^>jHCVL zi!j@^)qGnuze@I7z(?OUe5yS>6&?w!;VNwG_&jdqO8>d^wSQmQnv(U4KdP)WPK=yxyN8^JUL z1~JTMKD<{Q3r1erz7K=Tm(_#RQ6rQNnr1~@Q8Z{G=vk>{d^oPj7Ejp2f$>M+9wHf> z^n2Vt{pjkNp9vA}d;(IA9b}Y%zy!-fS=uJI#xN($6aC=HcO1Aedu2y#K1V(u$U*Ed zb5J=j%Zt(Rd4;0KC;A27WvB;f}h z5-v0riMYn4F^}#>*G)xu+ke(Kxc?7I;ScUe;SW|r;r&kg7zt~K6F)l6PZusQv=6cZ z9i6BYxSHIrVPBuzabKT&ostX6A^uIWkD0i0n}nXa$#*HcIjEQLPByOI zEK-M?-drc&bv~L~bfN1ZeRDyLi*iG15OuHAv8>u+IOYN1`z>5ZZD1}_B>o_^^u(iE zR-7b~47L&h$@Vz6C@6!SE2te#IA$`I`{|S8ZSKtPc)3+N8TN6Mu!*;mWYp^q=}P{X zW`ICVJ`R)XAtBR()&VN=1p9+XHYv_Y1o}c853f-i+mB&+@yl`~C|<(TFR{JSX8FtE zpzwm0@Lyu0I$EWa#*1e{+A{}5j4UP%PLK;&arQ-|L4{1x_C_-kvaS}K+stGZHqPB6 z#Al=Ge$to-QIM~nlEN<@yQX0l92bov7VQwJ_#Cf5U~ilyi2Ihl!WNKDQZ8+(`zVH! z)q@R0ekz1Y)*nvBn6?mMjKcM`wdX%!j4b@|qG}-IkbVr}&Q*|d1ybEUeQZ~E0esA< zOiI3k=j6&Yh8BCn{`tk&Dz>pH#dbOr7j&5n#~0T7&8iAc(})FB1W~1i-8lSXXE^DM zZmch=8}h}6xHD44sz0r-=PK%TZq)lDP;feSEiX*BGEIe5^J;*j3DeFe*k7s2x|EDw z86S>5HIpfaMT7Y43}|Ph4OSp+M-u(0LLJW}Yq-JZ5UE^C^0Jl8Vo$%)q!T36eb4@p z{d=n*bnRX1=(w3n)51@U!YYUCB7rq`)mHU=Mm{hlm%}5_-|GlY?g1hbOxIbzLlpQS z3V5Ni9u9UfopVo$%C*D2ffQ^{hZ74LWDWU%C`O-R>cILYg zc=zF;m2>N-hkT~$lkNbx5Nw@ZAKh5Gu}9mMO61_=KUwscV0ESU(T6evk-~CJ=>`Gc zLNS%cQ{2b@lKy=({>S_O-3WgSKm6~;?JbMh2rC9M)%BsE|E+{8U*kdTfgCbVteX=JFr4 zqwPim9j^xi2JlZ|)5mxi%vn^`%3+-Strc;TeHCRtx5_H(NW?K(6g9lyIp?n84T{4M zNl;N2-MRkjbUXc_fCrC&d730T8VXGF#q9<8qSD7rx>)TszlfX7vP3}5%Dp53-k#=P zk`-W!3={usIfAvM&dGoEu+VEEaI*$?PE(3!82jt?MbR%ql=>aq&{jsszQiQ(i_+up zv4{G|S2GOql7UrY3pSYGkbM@pYj?uy0>j}`PD^tdkFR6U8jaPPt&S85p@M6xkwq;7H;Px|*(G1d?N?h+rR|oyDYw z;s>0ojO^LLRXhT<4;{(M%Tg2StxkC2?Wdh_#l)szZ?l0|+&}KGa(44n6lhg(WTLvt zOE@a^IaJw-h3dfG#!#o)aSbN&Y53dY-N)fmcu0S5!rvJ$B-%sx)tx+m8!dCr>(<|I z8plWG$C1gc)OfSKr;9aP$AyI9@a=Y?vOBjxC&J4b3AqSWnFCmlZH@G$>&}ryg9!pow|VWbjJ0$nkR}z|3Hh#oW+}?k!-Y z`@hiF1#A-EC14BC23Mbvs;hpK)-zMo;Pz8oP zQU5N5S>k7e%7teSBNV8HjBgF};798CCDerb&j1-fAC&QuxU=m94>Qs}YW!9&HOddG zH{jC9v8H&R6`$?!zE8IkvGZ*c1+^!J?CWDHgTurrVvYA2T{S36pe~szme^+}gH&B# z4`Xyn=#2VS_T?hnb2PTe!HQ2ioY_m{dcSVzr5AH$Y?*!X1{>RzL{87 z4GP~(IjJr?IIDx%QAT@k`_Pn8wP<3v6RZ2t}ZJQMv1)sTD8r#?^{@=k^&q1-`t1lhb4i9VS#IkD~_xYJ6&1Nsu6lz@<S2DgsW?t)pEoR$+=h6jR1>4biXoUD8U5dBw$Pc{s#(aXYOhgZm`SmrWUxRpApjV zD_nw4@!+Ns5_zV2F38J!GP1+2fvcaR3jL-0{CS#J@8It^+s}}j?L>2!Jp!*+G)Hv& zWBhDp5#G3?qViR|V{Wlm%J`847?T^Q!oM2I~)TQFYzS?V|teS zIi{p7&OL2D|B!OjHm8~ET7CMVqP9t-WU*Lo6}M#sP->Xq<(_s={el;ZG!HAdSzO$( zli_WFM}^96tZ6BEKyjd*RoKPeS0vyE&644uib1w+HunxxC(UYBg1s?!uDa`NWr_^{D@dyAXS9-~5Okk=Tq zIvJW<5M1g|E5lYbE*??78jb`@WgF0iMnhe>Q!3ut_Ma^4iUBKPL(pgv`&DfuW6sd& zcv&MKbtuM!E=Baz%w}{iUw%DSAlzLgp2;ZGbBy2BdFK8R?rxFO+2UIE4LgtOcOwP(ygKQ+m1B?&@{b6@7nc?$GPQ&V;)3n^WCE zrO(mUa_8tlPQ%u}&S}_M_B3qFaT+{V7DYD}&OODHYYNZh#2v0AX5C28CjE+UB)(rr z{L5TO)bHs=;?NgSdZ6(sJ$pk;~|1$@uptrbYi8Y z-M!jd%MY;Q?FpNHJBaFp?jHfdWsLf#6B?895Ly?XAimjH>%~_wI`@qk5+^J%Ru#p1 zg_lV>4j9>eqx$USv#re+&t8@dpgZ=8l)7~`M-5@Ws#y_F1m(z}(F!cvvdJo^E2?ru zGFw3As5lvp*~7>3063zVSufva>p}Mf#JXZ+dfM($!26J(u*j5-VP|QqvIB^adMF{f zD+qSW#kw^tAY-!S(=P<|nG6y$;?Ty040yy8;q{O6moI@j?BYd~4w*x!uW6xjwC!DY8{O7#p9y#{R-YGY9VP1S~6nXkeoR6F?2e;@)%gu7NdP4LaQz&1khu)U&)lAH|)q_{9;% zfYoNo8->6OsP0I23~KQe9wvb*NJbzoY|se&4U8B$9zSGvKr#WIrf{srvA^4}o$a1` z01YAw?f?xlLxJjn7T(yCg`llu*W%2KXJckdBk2|XK=_3L@Qa_R|7;pnpZAC6>*R`@ zF){mJ??DaLxS7yoO_TNDW@}lpZ#qyMXLNfC+1U2djqNPq2)q4JcLFqjaFd}S+dd+q zi!Vb>wihKQcwT7Jqghs#4v`>2hq#y#c<9W}q*!OJHVJQ#*UMZQtjFFJ5$_+Rn$AQU;yIfzP?& zs{wSO{ii7qgZv(*MeqUk1in@Mdg)^kd2H62 zdFlucGlq~(*z7cIsz~1{lSjQ?kL1~+w2+$07&yYSK|=ncYgb91a`dX3`ysUzG?VdK zXHD|xl%Qwj%9rz!pg!ME%7b6D<7&=iAXx278VtlVu*MGNj`g4tnvEFu%v?)4GEiA= z19ijpo_)}9FIag#NhMiaBXKSdh8@hXiPuv7E|Ak9@FRg{CtP+xU|*|N*5ywG`7eD& zwF5d=>Zecv{KSa-V_%@K=^X{nxas;l&=HY@p`AQw?(;V*gggc8u>mG^LEO>?gre(c30khee22*<%?Ttbv{mCRgW2 zpbF>}`nBaFTPD+(IiNVvrEN(B>E;o;zr@`IhQoPc*{Gi@tWTvGTR6)Yf(0AI9?MU% z63)y%w&uw`7R;M{EC(R-1|7%6fvf($Q6R>mcWwSmD&K)W^;vwTOAToD#y*OcrvPOP zTa3Bl_qn`YM0=eZIc~NfS-rPOORA?|EKipS;+*Q=>pJ&Z?!G#{bQKQ2a)jm% zXAka*2u6FUz!2hz|1tC z5!YvrIO{W-*Lj1(y%wPFQQ)(qz?I)F&33L51$wPkOCvS7hbFMrnGK{)odO4ut5lXS zpAS3Jgld($ppG9#s_Ii`fGuRVai^`Nw811g7`Zx76{>jPAO(`zg?Wp~;RQrg>@z|i zQp!?tA!hR*sf**#5P}hCq@OyVn(H1#xk0$b;IKNwK6k=Y(oa|GwVmH`WECGWRW-S! z2XTicmAXy#eI{`#TFMYtu2N{LF211TBYp5^ADPjYht0J}J^unOKX-NaIkxh=7J#Z0 zWP_)(jy;ih9@{;cGq&TxIEOT2_M387F_(h@Zh+r2$%A;_t7Sy3B)KFFxA4GW^aeMT zaZ1|UxJ#CyELQsQVXd+EThS?N=Fgaz!1p-+0HF*SK`X0BPz@RUAkJK{oT%b$lqd4sZc0!bGXakhHa{!M2h zszqfRVuG9R5H=V09t8PkA=zq=2uZVKP<~d9{X7GPM`K$EtqH!vK|cU`4(x$8tkb@t zGPRvQo*W(TxjzpJsSbVXAw68@O!}h}8^b2=4=5uEB~>>F?GA;K*1TjY%GY&$0RvC3 zIt!$6o|lG2VgG!Xj2J5VCe!`&o66d%=Jg>-fs3kQC_wO?0(=Pyu+-syo4ZzoN9xFb zCi{%zji6i)tP}m#TpJGL6Y<|q8FG*hTbeuarqts8!RDTx!Vd+IFjYMOp6~58`R5Ed zC{uL@BR^j$8fz~pT@DH!`Ou73@oZQW|Q52qbOcv8nc1*##X9@IMeS^dYM*ci5 zBFx8m!hBpzm~DD|{Pol03=IyJpuu5=1_w*g;LxJM!Ch#uat;l?)8Kz~8hren1}{v5 zzYGbkFGPYH%|GR6Fgz0oF(PMh>MszG3)IGs773;=g}PGcq6&!X@>g8kSHRRZFA3i7 zd_*6)u!NtM>03VXR4@D4)Q;a(Z?!W&{@ehyq!tb*gMpQgsbp3hF-^*jvkZKF*%^Hl zPXc{MLV%G-0PL1JN&(`geh#hm%V^mqX&lTwS4LzX6>|msZM@&bmBjXcPbZAki4O3A zum{&MgfCWy$&l|-v_D8Vxx#xI+M+)rn1vi=oWfPPAqC0}DZINI(y~5;vz?Wu5}>Vh z2P%_%nsA4gXtAS^*4XuHvdi;RB#hZ_%D2;L$z5oqY{WYdNZz`4Be8zRr{dbQC1DOq zn?un4u)hbyNvPUMlSq}HuEe#+z7jQq zyQ=%&Ma}P`CX1ST-_`wvMa}nw*ZaNrKZpyAo!#Kp?`xg*f9Igw)0=UemU*ptea-4H;b++( zxa@Q<`opDyx?x9UGVNF~-6MPj3jl>mBNu=+ABuuC%@>}z*Ls^j7;jYw%6W(Ijm;jh zPQqLBqvrhDaei$(zkYMyaZx!?@n`ld?^}cu1v$)R5!(>{+^K%o-nxq&wYPNCkm6&M zxd_2(u;#QqsL;lpT>U{Sijd~~S~`kxb@?NFX}mmXDvp&i6csieQJMT%dTAOC$U-(l z79ne1cFz054jfg=h{ZX;{sMCRdFNI@+jS&;z;D<7a@7z2GKl{kayj|?s(-uOfj*ZL zjLDf0m;v$OD(menPxdT$9)%m6JnJ(Z^m7Jm_+5VdUiKaI^M}ZoRgf@i;dEIwbrgNs zvfg_io5Uz*KRu7a^Wns)ai_4xEq{$$vufP-)hHXy(@pbcM!mmHt9Prg-r4=tQ?P=1 zGe^IGgH+c&JfylVX`-Pdt zSIZ)nqSyr9nWfq5LbQc2!!&>PQ)Aqw-!?s#9ls1k_QvC9sdG{NbI@mh{qxbN_S@S2 ze$7Lt_(fLY6%)$a&gEstPq0*l#+}XmUBd@8n~3pmAy012kwZ)tCsW*+JgFLXVDZr; zpBQ~WH1S5hjE|o2GA`d7_yTF2#1KDWK{8c zp@E*1Qg@?n?Q>jI8!L=OQbpV7H4wM(-?b$IXrGtVNmXA@!q$b!-JUr$erh+3*rAD~ zu1zd16~&Xj@@jXAtKITeyH#B6oc1GiONFfACbQI) z`14uHM~mjOOz9Hvqk!9F`lZcx#t-8mF-N6erM-IzkJ>ZaqDZdOXouf$>{BPd$oNM4 z+sIrfV<6`i^rH&X$O-WvlRLtNhRH@x;k7O~%gvuAQ^EY;-`gPfzAv(8H$8T{=G)u} z^QVjD&+j)~>@zoAtje%q%j#rZCGd!C<vr;6xf_BN z``1Y^`|QpsW+{cT|L72Ia_;a5nlk&bDA?^xf&}%c2izQ?x)&AOrODOgNg%B7(;I)j zgoaP(*YGrpr6CA?X$XQj(h#7d%Z$tefhY3-kpS(ijBYHan3|KaFs6upfTOl@EphS* z>+YB64(7(xBm-LW@$iQ^*fjg!6CA7@z*`XlP9LDyD-W+gctt_UyNBG{7M_-f3-wEZ)Xq{bHlA9ZtinhbysVuU~x;<4hp z4hp(}qZ$v+LOu};$*&yHsJmPr;?|zQ5ranQ6vhTzxUY%B$?h&A*^OGtc&ibCgS=T~2qN|h6tg+Vn!?VO9T|P8*tq}M= zotKKerSqp3fGS|RFDp)+E!i2I9Y&7tw@PJ8sxK2cRdDRbf@eokkpQs6877~y9*ZA9 z!#Y<``xQu%<2caxd3r#O9q4FI(>yLAgVuZ7q0tAaQ8cBV@VgzQ2mi0@UO3}J^u-HBKYG)l_m?T zBHA#BJ6C}K_e*vAoY=ss4s!xHl}X8W@Epzt`fy(Mdqd3BV-?%jlwvy!X?2+l(Pv!0 z->fRzsYV&3A}OPdg@5b}C!Nua^+k0?hv8M`@+jM|LgnYYi|H}ToRUljL!#U6UAo5ct*|hdqAdK(v)n?Rh*llK$tgUcdG1YHYUn>h6-Z zohRpyvau>((I;Es=h71pl@L!<>MmW4NA1tiXU0UwzhUEWjirtCCtK)c)=S8}6!XS# z_R`O#epw|Bs#ex}>*3R|k0o)jdxOtKe@~f8&PH*}{qs0f z$fy^DGNl3KHaCqv zh)1ODqN}m50aS7%_Yevm>JCDgxYJeKTpdHPRP)b;ty(-!CHT)_<2^6+Y`BormFaE612#Kj@)Ph%qBtx zf`Yx#QlD6kYL!}Z2UAU};KeCsN-u4CpC?T3nJVpfKKCytmnKUJExFui4f^TWrcm#l zAGTYi`xAau-IvzS9sa55oYnqPkzcyEI(ymx<0WvvP=;0|_?NkjhjgQak(X+~%xZ)c zQrpCTS1Oeir+%p3X53k3iCM-qUpZY`wb8v7{k3^Zz176Xx_!4T>drn7lv@$>3Jy)F zhOEaCQzOG&NGG5;UR+N6oUU?$D~!2DYjUN0H-Rvd*_K3aXa9FDRdxa0sfaSUIWf-e zNmik{MB~(Fl?QWGD)v^I=C6e37w_Rh$4$~$Lc_+b|HWufvlK#pgPiKfVkD+g#WA4D0Th-DCmnWj zz06d(u-QU4l#7+jR;{9YxFd37uJS{OYw4FyEoL(rdnjMlsr5_T+h(AlgC#P9sijPn zL%xIws}#598GGvAI4Qpn07NP%eJ<19vwjzqyvdZjakWy@rTM}u`H*^!nl}6GSz*L^ zRwvhR`IKL(;%v$nW}?7XP0X2*kl>v}NZhx;PC_=~1+bEV?AMO|fR_nfisOwRs9N4hQ__mF;*mS)I?psL8C}cEI9ZM%dze)>*Q@iF zAO?ly{G%ET$a0QWFV5tq9g6bTB|KmppNoD$y&ML`sj#pK@;o}~U-m)LAKXM*vsKBj z)Y_BiHb*aL!8>xVk8AE^<_Vn4JglU_d|^3g3yVF7S!5BwLYq0DO_%Pfbox1*g)C&D z_Y0@+eZdw^OaJ$YoH9G4j9ReUCw6|~(jNx0d$1TLO=S*Hl zGq6TeV(55BWnyw{JD$0kFQHvvlLp76HjFL&t)lf{H;#bJ_r(wm?nj0n>CTz_bI`5J zC8MG+h2LGxVFl_$?8LhhZi9u{ZRlmU z!Tjtt^s-xGjX@D>EVkS_tFQo*L?zqLBe&sI4oHumGLJk)_rQGIxBAfamjrd~BmCX{ zXy8ljXUp7|nB=flP2x}`;ZGy24GN;AAQ1)vNOjU|yf^;SJVdHYd>ix5*m%s&CWwoA z1q2!U9I=ksAxk{_0H(a$n;UDVeXksohNqJ;v0tc!c1|C`@~@Gt@#fpypx7C@n1rPQ zRhhA-#fwubz2pz-bn=oM!cLk0oyOe+=U+K~;ln_k1$WZFxReZi8u-u~xlR;+MFF_CVpM z9V9F7*>Owy*zMUrx=JzdTo_pN`9^UhuPwKGDj;#arX zqovmm+C*sE*nnfHc47Dk87jvVsJb$;SO+%SZrHM%z(pW%XooHuxhn*x0Ll*rYOAZy zlmZZcA~`mhoL>a}F(V|C(>uElc0yjw%t6>HOB^r~AL#mJ4Dw`vLpehSU^P;^DGDx0 z$Jmvm+ntPTvSk9|(qIm8`e8oN zB|Q|?JszFMIyBY_L6Z+N`Z|@SA8Ga-Y?;&kP`{m*W*vd1*&VAb$w8jiiPREyx*#)} zpaJEXcG*ckiZhN8Yuz~f_Td8&wQ4RX^uIWML7P7>`caT$+ zg-ln&d{_M^u93@SkJsmX+WNz}-L9}2>xbiZ<@|(SRrjUic11sxWzBAXMQ&GoWvTtH z6dU>){H_{J$M1^0uD&~6eRsNgSf?vEz4z{PrQ4X_=?YHEB2HI8R~B-*Qq?aognM_o zDs19QI$c>#R%l-`zvxP)fW;I#U71%d%bD$TWmh`g=_*s@qE1()p}f;owzpro)0I1v ze{rWP3TDr{{$+#O3wE^6t%*;B->u0JrHb8}q~a-VO=`=1QMV>;^gi60+~NE)xi#4< z{@tzVyIYeS?uBkutuMacs(!y!{qENE&*#?EXl7;TB9X)A*2JGovDRe83!ht)V`jOV z@g?illGePL*??`{EogLV?UZWKK{lO*u1*^~q$T`a!;ANW|E}Ocf+k=ebti+4WN8*FWw;iW z(7aiDdQc9Zga_pZP1wVu#9piv)_JZppVkeBZKblSI+$9OyMt5RIze$IVR`~q0 z;N3vV1Z~019$M&e>Quk}pC<=DlI)KDe5}&_&#efR3Rg{crkPF^DVOTF#K^VDw? zG5r+VfRW@cM>t}qe?vDqlWoYRv!-@UYd?|ar>@9Yu=JxyN-a!yRcocA!)?(2>qp0B zq_&@g{$_j6=#YmnK;?jkpPZPqM}4N+-8Di;6FTv+N)23PCe* z@HW>LG|<|cy}EX9)`-c3X&jNxe@Yqnl((LyrLKhnr+LoGrD~1RmL>a<(0uqmDaMNU z;{X=Z{hP@!UWzFz_4B1+aTb?@TVYY_j)-B@|Qt%Kf_S*cdN|1ipAslFf8js^w8J=i3l%b}3 zfdLFXu2TgrocTvVygA>s%SlQWIc-o1GMRC(n(~T8(sU8BM%#h95rs0QD1_ce;c*N9 z55HHMZGu*LUKh$r_EXvli+@V{bh%b>%gq02q#T#>X*X%)nW||x;Yy&AbBS!;Z0{ZF zL^f}Z>L#lV(GK;aM%n53@0R(X4u5+IQnOwIZ6@c8CXbmUHDeG@)3N1EhTDT9FbpNq zHECNQ>|HK|ad}*Yc3d?nas~-!0VIH8U&+O!80kjoeH0#LT-1y_>l=w`8FND@|1>40 z=vy%bP;Y1rCJrz{_|b!^qwd(hxKEoU{dm&1%*d=8;AMwnC|r$~T+TMBTn|YVlSQM; zO@SSavPWS4Efjc?roC5rgLzwHR>g6)Z4L{lfjN);T1HKDW}7=uv62^mbz%wp+RUs7y6RP~jR>oRhOu2j&y9 zn)P4XdyQs2Pt^FiqH5Qe11q+WDJ)v1Y7i0BkS%`c@KN8ZWo{uhdRL`_r>JFGFCD64I;@~ z-|*!Z21UnQLT;15R))IZX;a%NkL^##22Rc6Qmy>B96narP=PNcqaGZ)$4{T?^?F=; zTz>jATV|v3*g08xPtSL#8hMv>eCCP>*B6OTG@x(Quf`7lR&qizp_^92`khJ^JXsCp znvS)mnBUIqFmb2yHM7{&pOcG%GW_Z`G?QPyHzrR*yq9dy?>(Y?##WmZXY;)OD^3lq zPQS9i>f^0u1s20nHgWS@cFv)nlO8%CVaU6Peu3Jx(>4|D0BVCWqN1Qke0%gM?nQwc zqMnqq4F2tiImHx1YD*!L!QdMzy_V z+e@*g(q~NGhbgG=?=8>G9<{gPtG(yy|BJXsN^V;j8CA7+ zn!qujs}oEgXgp^c533)wjxn_ELDK3jr^;|1khH)o;R+upA{9keW~~XfnV@dj39LUI zvw~}IKvP7)Ha^+QIp*Rs-pC40!iEZ=8@66Qg_TXZeIl=ts>s^rRBJZbnM%EzeeP7Y zaHw?0-x-)t?GD@8+i~5{=o`;Rc?Gm@ut6e|w}lZ^WT~|;FPRvCON`^sxSkC=Q+1T- zit-Pvga-oxY=J{9*?Vn0K_#_M`3{h8I|V9X6r+w1_Z}`~5M?p@1Fd%H&p5P|3O77g zg=UG4y=Zv-qLveTExBhUyv~ABSm0FG3OCj~OdXk16dtsY1RUD=b6*kO`7iZtHFaUB zyl9rJ+R;&KyHPu?@A!>`t;6h@20B3}`b~zvU`cgq@$UjQl#Fs*2)*4GWkT83b>H%k zW-5`ioo5<-)=xX#kJqrhQ*t$d)jsVH`eSh+4eU&UFJD$dN)o8u0d(-Y5`iw!BRsuG zCWD?1mkX>saOA|I=&X&m6rc5n#-ylPR7vW;AcRlr5RHc)?!$PP=aF$A382yUT_z{N z!nyZuLMywa4}~q+Dapr{W+NTEGkcys5_=Fq2Kq#YKoA$t0++B6+(a}4%E)I*<1QCl z!QjTly`r>AT-K!a68@vTNUTD0lA?pd*4x9{KFj-XlEY9&gM@iH|GcWTEqn3$*GZ;y8$hfm=l{k;i);~np>hmGSpS_+?(abF%s;V~#5{MRo3 zwX2`);9B8Opw~ z{WyF~*J)U3=`w;Ep1uy(%VGHM;iGE!{Lw64IPZu!VCo9pLMa2XQ^=n6*+bvR4*i*L z=o{WaKbtb>2*2l#H>2&h5eIFRe&es z(FhLXWt^s+bDQH!EyBFHa3rPS#P$Y@cz9BaX;>0`*lp=lItC48bc?aBap$s(nPvG> zXpLy@SOAVr!6S zuBaj(^yWhP&mvBtJm)3u;Yz(hdCX#{_B-=icaa9hCvffmi@6NJXqv5pJ$hK*ZlL`j zw@uXx-l;orw||MZA|v=iMb~*jsH_^NLQv_N7Bn^M`g6!ry<8u^Zs;jzBwyA^C!cBh z8_EBNYukn@+XO=GO9EKhK=yz}9Qe366`EdB9v6gw{pO z?St#1V(`H5Hh?CL{IzT6Z!c*iYjVj4i79 zTkbYoj90ceEQn^hZ?4;QEdwg1j9O&snMZ7%CJ}P2mZbNj9G;cnB%YO?ZItKo)XUQ{SmTwK4& z^lR>*0{*@~!(haSX9hIELU~~CDp%UHfZ%*6Gi(X^3M@FhW^BZUMTT2?lO;E~6iL5l{Y&>%1<|78ZQF3)f5Rs;j!BWhHsitFZ_*{Bk*0zQXu@ywm+1#L| zLUmX_mqX7#|L)AKCeP?uwXyE4hEMuy4El$^H_ESHSIbaM((C!Fd43mb#nH*WUkyC0 z?KIwJSrk2#>)j4tTy{j4$~tz+_fr)9C}oE2zmhx2vC2W-OqnlpI(u-43*%;t_~&2|=9w4K$h zn(07kcdz!=B8DArKg5O~PKJFHZ-Ln&%HipRMq}_S@W58hwG&oN0>Zl7IKj-Tfo1hl z5C~$-!DO-OpEc5iuBgft$%sLLq~esb$xa_y zC6P;C;W{FaE`=e`oE?)PXLvrEpzIAS($vC(_*@#I3ijfs^%p;df9dv;F=%C=XO_bs z!|LY7%Z=*Gt*z&`fmjNNh>=LipKtu{KQ=dR5$2VetA(3u=|%qxZLaX|wNZQy)97@5 zYDM81%%rL;JiboC>I+H%sf=Q4`1x8F*7C;GndT}DxYFl8z1(=YS>4+B>BY0HXB*Fc zdKvy9gqEKFbgPU6X2Ni)aGmi~OGWYLE*#9%bg{aziC+emr+36zCUG6e`2i$WIF_BW z7+EGUL$M*ZuHxbTfr@AU6sN#3D{&>_2qloZVujelj0WZnGlpIC2QiTvh#57wHm5AghM|_ZaC#8Fl<2p z(48(iBOq3cVRlxbW6pVv?NGSVyV~I|E5*ofhUswi@{QrWWBzyp=l274*9c2uwLsL$Pr9L)v?o1tS!^|#Zw9JTM~ zar7;5xP}UwjEiJ^bw+Z0kL#bo^&%27Y`;?Z&1lWOeZByrBoRNwT>^a^sp|nIJSthM zhk2SKMZ^rmW#4{RhSB`QVMgGN_5y`-WIOM(%Amth$#**FXgQ8L$Dl!K%bdo8{gTz|V+56A~Fu+to*h6frTQ5d;}!3a}u>i|+(5SmzU z%5bveu3#tzVvW5@$8KC7-%Q>bmq-B|4@`apjXuRL`<#1ebzNwRD1|o72_%*dpB}7T&yx2d6 zn=ivBc)L;RqhJf<4zClS%Voad$n^lWJCtB$5`#4APB%E1!pzQ+yl{q%EuZ+B9=bkh zI@6$d;aJ?x%70ySr2TfE`E=fUvb0Y*v6i=&*BRt127iI=2-`-jsJfoe z;YEBlVGMnmJB>Xx8LA-Ovt$5bKXz<18N}(U(0iatwX$=7%B+1jU@z{?B8PG6U{nc~ z(O0C&h>NMNsrfFwnWG`ofEIo|fu=!XweEIA)015D+ivr`o9F3-?m&=%%i_&b(1FMx z1IvsAR+lUSytq99>(Z{n8Np2PG|z2~P*0v!qIDqv6UR5Fg`wm^kU`B&MTwd~#Hj zk*_~S>*2W52THS!x_>$$hhBCN*0EI-&4U9CCs#Td?$0QF%i-b$C~cHI_mwsSg`S_n zz--509Jpq-c%6{`99$?XEoJaSTPNK!*mFxkyf>1BR_*1c=7*4cOuFC2Q?cfqE zcofn)BYWi)$}(7fN(?sl)qQeW*^W6OS@D8g6i_bwmN)QSYEXN&P|wfRmdW3_Pyo_i zqxq*oVs%ij9p{M^K2^l(DkdwtqGw+d!iB#JExrL*@D&X(DV9<$!mM2mVF=d5NqG_4x@ zfXoQFJDv1l&rhzb0M_g(Ybi;FztrVEZ%c#c`J^mcwe;xoqbPh{=J1Bk_|Kymmk$1e zb@Z-w;1L7paTbOPbw_bt&LzmzHDw|Q2u0uc?B_xZaFeH((C7Zy%_27g*bS9?qIGh( zT_+*I1ORA}fk#4@eZv@eYG-s41%lG5jEEesbJgkfa?lTEg%4^w5^ zEFLP;I^3y$6}S+x9wnX};BNTq&&arT5CH{xxze}+wFV19M94Oq&kvQH!-1IR5ktZT zER+Q0D}%5C=*ATjd~lmL?ifvWZUBhD@vfI4JN5GN&mBUb!HZ;QvtkAGUN*y}ngb3t zqkY*?c%;Vio%%x~Bq5@{I>;UudqkO(>A>A4BZA@TarnRKMw-GV>a7a% z@eYBrB;gX?{zBUPHhGB}b>qzVfcahgi7sDp82zJXk9;4h6Z#pE2R1-?d|ED--48dy zjXU8E@Ra!}|KZU=Z5tRhpN&{H`c z{qqa)93x0w>oCZ-4&E*o9N|Zc?rCY%cx>}L{2tMqdu}K{m*rj1zJozhhYNJM(5p>KBK+`A*OF*9A*quQK3+>A|h+%?o zDbSQMNYe4o#J$^=prZ=Qm0mZP)g4niD-_(r^S!CRX-r8iFAX@~w|cqUsqJvPOQp80nzK zO7EkF#SG0h?&tHUw&5@gBo{UL%AbL%0dWEt6ISO$e^=`z0xv-;WD4{zE~Jl z!Q&?oezl$g3koXKwiy`i{=mM{c5N-5x_z_pz7q6)sUJ3W zKlqivqxyDpCzphmpEA!m?q3>L5sR0|hr&(JgF6c2LFXz(1TJ|hzv=CwavjxAHjeXn zEKudx6^eX8?4H!><7CGF#eQ~QNJ8du4u*!h47 zfxAPga4%6#%GGuLM-_%QX#({90&R%+2q&nQa1$F=6XR;x&>H7NIzxDLq-qPtN%Ap# zgrkJV`g}a{h_*aq^IgZm-fQI%1NfWb*75(lR zQ|KAPTd0InoN@Gpnh3?@f*7G^XUFO@79w3Oopdp9nmi4~i7r9! z(J0Un;%ikKS2En@MZ`n_y0lw!swhYBfB#oI+HN!+Kc-{rdQ@c6M$kcDcAf-bPc(*Yx;$fidQIdaa||F>})mg3KF zcvE1s5JO#bTNV?>7nmlK#C59XGO*9pzZ03?tBHVKi>6N z{XNn22;GGY;j;(;1$VY(z0x8g@bS4#0iXyI01EQ=e^B**QMEr|TJiBY5s3ct+>5Hb zsXlj*!!IW1ajE~jtp36}15_`Lo!AhNf5%FN_~1PTSO=@d$ra7dIV0f4Vg`#Q`+ohUeBNz$ZSDIG+I z#j=S>R{%7i!(k^Rbo9KL4aOmYswn5@gWIszKc{FnL}`%-&wwL5)m?e!o5P&5(t}bA zdz!+-RZ@+E+c_|QrxFlT*WsP($`GTPS`^AMl)KjRW7ucZi=g-<*qhB^gP!0jbhF5A z!Enhf*a-^4jq@KK@=eZVGKwXJei)lxFnhj?QA0w>9leo9{Z3>Cp~OG8%QmYIJc&2* zH$a(z!+!2wh?PLM8jNjsK_5X_t13)-(d2AYAyENB|15U`(?7?*#Re5nldYQDn7=uz zrC||`C}{6cx3`Jy4Mm%^b)e;A+pu%Q{R-LZ)eDhhd=%Kt@meNG-*t)K-9SHUrsrk9$L;$2 zgI3d%55#^a7vOS8^^v#njcxvGSL$^{fr|77E%ZmR3oXi*zsL~}O>(0f?;Gd)-vX;$E0#bv^H zlrHBwq68=RD5wi zR@9HlEkvtEZup#nCKLGM4f|nN`X!PIc^i8;7x8@(TI(_=S4nUCrde)rFUp@!eql|!T^1AO?;R@ zr&$?be7S$!I4@>*W9YsKx|7;DWsFpD#VD3eYu+i9gsHBeX{8Vu##V$1hR=8$kLDv2 z#UUqa)mPOBB-vLRB&yVWAtbeOCgP;@R3)#>6i1hA{^r?6xoj1GTE2@rg$fiDHwwbi z@{^m!+q}~rJQJCve?G*xNy5zZ+-%av>Q}@4xx+t|%br!!qVfpTQ>sO8$^{CWN@is= z8*EFxcys$@v1BrIiu)eExsN1gi{^*0e7}4(Ocw%bizk?{70|5I;bxAp;2qvbmSD2m zzWEDiU+d`M7!O1D(3_Bx8b&n4gEV%;hBbM$lz%O3Am<(de#5!nh^l4p<8}YzwQ4!= zy{JUhO4dx$4UDeXWmt`w+ihdr`u}sOsfqi-`G-@Ws!eP?lYKy& zNPEa=ZvpG(x*=!dpe&ow*}de(FzxZ#PtT+9d^mCH-0{~*_tIO_o|)P*d%TEd=25}; zsiB)dD^z}8+i9U>CHgD7q!jDS&yykgWR76M zR4d5MhOwm)3>S8+ZgARgbQ_$El~sbW=bp_U2!5Z^{yilFFN)w)i9Lgr!mlC`m|+fF z<|GX>5o_xe%&CZf!8TJXG-=lf`$iuA|drKy<#4LcViJ zjhXH&L?!R>o<;ilg~{ZqgU6)Or6}Qry7t^ED{8nF zRx9i6EkhA6ib&$cw@wq^WhuhEG|{^^7p4pEiU`AR`Fj`2LEyP|5ojjQtqawXxpaZj z*=H)9*x8gE?-Q8mg;Tb>9VJb1?9bQU(TO*DzTEBPwoPGV$=KZcSsm6fEY_RT&-YQMGRJudz_l(Y}0o|EW>hESJfzRfE z52hr6|GF{Bzu8D*q)quNDM_OqK2^wP8+V60Q~4t6KJ+s~gIl{kD%{#tdh74Bu}*Ks zg4jylTC&709mbkec%9h=4mGw2xmC-evKKbR(pP8DoeVlk{xUREcQ+j;7&uGFPgbW? zE)g=1B24L>41f)7teA@cHih=_Anr#j%R6sclrEC%+Y!4MtnTn>v$O?7M3(inUVH^@ zV29YD8T-3U2wCmp+pwg=v)Mi6sMX$Xzk#DkI1Q8pnBo>}co$sJ+=BCJYHTZ=&B$PR zsd>5J$Vyp~gBDT@q!(k(92!SOJBq_Gc~^Bns1y#-!-xyVku%q1Um%YWD)Lj@vs@tE zPMG{IR{A4WHOQAI^-w8vvm8F=$PJWZ&JxbPfCnyhyi%pRbiY8egh6z=>N#neC+=C9 z8qi~oV-3u`8s%q7&Pr+dsr)r6hp%6UTrBoR2-%tAD7hxr#uLM63b)~8I6!pxn`A;k z1Cx|9?p*;*piJG&_*`smH)RD!8%&0i6jpyb+EeFb#zpsrPZ6c_OOO)nU~f3sN^?sCqLi!Vx{pA*~%OVTl{<5 z56SBQ@*b(sNzC@$K_raRczlf*m*eY1W7ZPGW#|D4Vlq4Zo)CJMbM?%R!4@2Bw_XNp z2c88Z4?4ZSb-Gx>@D9hV=t0en-x5Zz@^Z@iWudSzw5UGQGURRCq9SiX)2HF#S; zW*6wAw|o9Tw5!)IV86ZId|59177kR=x7AJjcmo4QT=i4>gL#|U(6)Aod{nJef7)38 zY2&B*+WN~!#srCq{fn&^#kD{$Of4Igjg9qZ&t9xQ`)T9(`et<#YOB6@q-(j0&*kA% z%;KX17=J!Mlb$jKsr7nD9knSAIZxieDAl;e!u}9*vZs~{ZMH;j!s*lFLW83zVP%Dw zABsjkHrR^F)0ga8ZYmCh>_|Ok$iQQV{2BtcY0h=Z2I$rOi9(w=GXL5Fo{ zQa>n8EscT6`0RYe_4`d$;^`F#hb=Jb{a7tF>t&q3=gA&3qf@I&V~``R?$(7SP%o!J zzzBo62e=F!h6CJl!%sR4pLJT=C}S!+ZIjCw?09$9B6?kR9nT+C!|Ee%`8S2-!@H(8 zIB6arxTK#9{?B1PSPq_v5Cs!Eiq}R-GWPkK)3@g8)%m&Y{`@WTR!S@B3K}p*K-1`= z`o#Z8HdNOmh3ca=z81$6>F2lZnc}~M4L$jXj|-x>`xdg<9UWT!J{sq*aW~`=*GfbA zdo~RvUGV;$Gfjr{ntuK6yY9tC9>T%9;J&x`%6G=CuR172*S=xl&F}QfU&lGd*T`bt zF*6(aZE7R)xwN?EsEogis(w|q&*RUI+1zt986T=tGx|;~Ry?lbLY%S@Ue`Jb+)=&0bNl72m^g+Kwz*mpW__nnmUBZn zDCB=(w7?yO-=Gpd4{r$hbB@&S{#7I!oDkNm4Y`?&iK5~M`F3GywxQKksYpE9(IzRS3M#3D2LsXvVWtGXt3RY2B*Td0rUh+NgtG^H zRrfwsPVF>7QQ%CM>6DzVgf#-RX`-KVN>_ zfbS2ravOF|F>eoNZLWmPgwoIT>6)4EmNfN2w?>sG8T~in!5JtUld%f&2}@~=mhG}t z1z#ze3QQs+RNhB0ImxI`*_%P=qIgUOw9)av)U6m}#n^w_XoJ_>@ z@RWOIm1}AX>7b7}tMjFwTcumqu+JZ-;iTX5lzibSdG0Ow(jL?fUntQONS144zG@k7 zLRcJhqQZzZ993zZ;BA2Rc0P6b1DyA=r;V-bY><;hi7u>t<$tou?;-M$A^?c%>RG>a zEqrltm~0e(dG{B6RLy*3ojsKcwdm6g^XUP>T;r~6JZ*)ih}15lV`QV5b5q?km6;tt z6{W^I%U@ldO*Rt-Vq{WoBKhf%58_W9bp7Kq$}}fstOE3Q;lhl#IM&5gu$qpe0Uc?5 z6~N4)0%i`rW?*JZIs&R)+HLIBBP2F|j!bad%0wlsUGMxNJ=!Gih*ZKjb+N@k8Tfw` zj`}?&xM-~tl4&s;H}eOQ&shzdfLj~<0Qc`)F=ukL&IX-xzX^|UqCRX>4jxbTRpuHGaZd$P@ir6*CiyMO%pQR%T}ORpYBndGI% zo9j{7sQy%bR1Srm`RlM*R;HR<9UBF87+zLNx?@;YQxVnCvg+6@s3XJY?5^bc@vNW@ z=4s6SW{u_ftUAtT*YTn}bzRsBEVNqc%GL35+MFWKm}70X3hKymNvkTVqsDb?BhGnA zc|Xc1cknw-qizr{R^#W{5BSI>*U=PUSe+7hCy+d`(y|HkW!@ z@4!zpfe4e!?4wSvHzfjL*y}Sv2bS$E2{mRrFs~+4>-AE}N?|aC@=*$&8$l3_NN;gd ztZIoyO77Q=I3t^t^XzN5OFY@vF$UO0ikB}aLcGW-_vK;`JXdZ}7|gJ_-zB6V@LxJk zzjHJ+pa3a%HgODVo0|s0W z&EsYPY$mN{qHEJ{egmu4NF+O&nzVn}$6k?Pppy$yVr*T{=?{9NG`>h@Pd!zjN zwd6Yb_b{<2t*YUtyWGdZXFDg`MJ(pS{$BG>IW9v_#dnk7Z%HD*s}O{@eh4qXrW3U=Wxr7$u`- zmDbC*UOQ=cUf;IF7Dv|v*n zmLPK@DKk%JHfCu8ak&)9@dEDz*_u^`CaGm|2?M$b*A+IqGdE1YVhVX_>booco(n=P zia7U&pOTNUGiIcYnFucy+=id}qhyFfGjF~VrzyktWDk(dA(A7 z@mwQHK@l&Y6n^?G<4LLA{6Kh8c+QJx!aEO9$m7h7GXx@ZD8xILM0la*vSh)FHdjD9 z?tnRm-I*v-*N5{K#qS@!)2+;g)hRP zY7>=x&UjeaNz)$#2DQJ)5Y*{&dr zhuASjP1l(2VM(?us8K^59Uh!C8}AME;}KycVw55ajXn|SL^cR|C8Dzp!G|PDRUy{` z)T{XS+kO4OxGnF=Gq3e$NP%YryaKC;Ek%;poFGWVjgF=1&5gCw{y6ZM2U2pQmF$1i zLkf7k?)Ov{!Oe{jzU8bsu;R%m=BzdN`EtU9#V)J_l-2>1qXYT3RmYVIOG((RMoW=%SuX&M&a+S$qvMCk0ja zMt6gJ*XOmH6uToG*LbiM~WXnTD!qSUp zxXsHhHQD-3PV(f0$MkDwgnrboZnGy>U!>`1edE<2SBub5jE52`kbGitG4|lvt07gw z*3dXhira)knN-QhUTNqsqgbgh8u^B&CJJLhD53KwX>|lLhb`}&katC9HzOC+=s0-p zbC+p@v_Q z>TKNu+1Xk#+1aw`P9fQ8e#ldu=7$V?&Q+53Y3Ynrx8qAx&eaLI8Nj(AX9-mcf2`kA zl2xchZn0GOVW#wg`VVw~L_|9cMVcE%X$Yf5lWkcwqsSKZNgezfPOYebARjKZq8irM z50bNZ9@E(|f@q!RkU)Y2r2-ZIc0Q~%_I}H4XnM+9+PFSz2M{vdqu?i?qr%FpT`jfB zzSZRy-J8-4dutBo?#}GZx3Rvyb#KN$>U(LW>38ofo31*y{v3C4AzokOOhxYK`IjPm z)q^V&*(vXItr7y)I3~K9ECwYI<27ObkT}gznA<4Mb>k~G&e520N`NL{NNyZZgM>dt zZfswH-?Um4aYp_Y#OZRTA0hW6@OFe`xBjqyIk{Aw8j{Bn9vE?r5|`0&AE?GnARo;~IAB@0p4? z%nvuec8~2#^y*okb1shH$p|Rp08@?s>L!7e53=LYO19eriIEJZ)84b`JKr=8JC#tH zfxTnAI@<%%39QoJCv@d;B^W2ELO4+K(ivjsPUGNw0%ROG3-22s*S$#>T|8jFVP8(; ziw-ELpbw+jONpW?J{PnLE;ddAak0*XD;PX!6lU3hj*HNUeyJVa+Mo=TX6v|Oy&=yx z;36?Q=mWtSk0$Ywk_NHtz=7zdn}q7K&5f;}HlIDSz2jARbc?T6)+PUdNF$G$o#wn? zjfGOiLF=gQ6*KUKC1+gWrp?7WjIWc7z`^you~TDJfl)y_<5B;!?~QpfHwwhm?o~n& zy~9#J3jbEl98E>wS)!En->)4XHr|*11{QezwY`NPoI zSI|!=J7)qILLELKc*ZGO;?C_;(XgDF=_NuFyHx>60{U>(=`La)#wybJy7N_R+s1zB z2>#uCyHW|2YMc`>(|ExywohxbsuP|f5>Pg!yYx{RT)ox@j)qx|r}Qy)OLwLOy?9++ zFK6(FQ&@vXZ+BaVNI$|bgM+zOZ-TJz_ccDgF!bbTXa3i&9+M z`Qypa@t)F&`R8GQR($-SS<9bKdTMZoR8SIce|C+9&C1X&73*9|ZJBTb^}*cdaCVy{ zv(N>fbwwD3feAbqk8kjEy24lmzR2DD@WZdx5uewrbkb}bMeNN*KRz)tHfRG@KGgEjM?`ja=UlRP3LKjl+@a)sXQCOY;snTQvD9x+_i z<_f42s)4>+>VDSx-f1`D&_lUJvs>YKejP|avAlW&m2W0XAWtU;=!XxMC@?Ct9MQZM zhPBLdSZPYXC)%5qXs;;LemoUvJacC3$au?`rRwyX$n**ZF8qZUcC983`Z{Cl z(1m(Bbc#tg6&~n01b9H!pbm(9iApM|4b=gN+mkNLo0YbUhydBVNg?U*MUx~WHFQ9s zju|^!lp6#JmYt9BP+1`yQPM!3VV!|pr%hU>$9pna^%G)@(a+Ig29TgjYY~Jf?wsr} zSnRTsTG8=RMD``Nst_(BRf}#gWC15IEQmE%r-&`?y82 zt24HX{y9oHIK;2OY{)ZN;=VFYP!#Sq>U%3iYFAS+r`=mEKW4oR1HOi4TR7o6BOqal zp13!bP?p+E5(PmEicS13eaKw%;gYGFu8NDPTBob`yrscwXIFEe4EsR=dKYzUSvx<+&}0I<7-(Bob}^Due1?S z)}!@^7}pK`MjX|DmuY2#&W+rw!3+NRT1ZZbyNNOltz`*26+wTXo~Pw<#I2O?1glju z{`Qi`%}Z{7sUJ3WbFQ!aRP=~0saJe)p;PgaQrQ&?E5`mKz=6K&FqBu-pSf^3L)DjH z+o4YQd~W*rOFU934LTZN+P-DM{iV`99J9ZgD694>z5%ds>D~}~0f|RY^jK*|X-Z(@ zcw%UG&~3W~bsyL&4Exp^=Y>IhHoi=N1Q|Iqa}OaY5Ym9%?@i|`q1!vBCv*};|3)8k zYC|>dBIJobpL-SMPSF|bvqPt2Tzg>Ddz2{`<3TI3hAr!^$-7Ukxj=BMAA|UYlX*W@ zG5_V)6kD>Lo8uj?t9k19ZdtP}Ym4)!Pe`tA+`B#5l#k@@?@<&! zsXr6xEBDCMPeCrZ211^ar4)|wX@7t+ z3(;>oJ5TuXrTBfR!=Xre8YzAL5}8bTkxT|XLM_7BQj%XMsg`(oY3eK!>M%6+SyRcV zRFf*D(HD$vg4Ha&kHQaMCNf{7j-o3N_Ic*ZEBn3nsLLt$9}1hYVLhDa9*#v=nlw{A zmH_1+i9LuQ!;rN7%L7P~f-Zh`7LSaFXTZc@WR=E^eu=q$`{Til8x#o5DLNkM+~6X( zX=f*^&@#mSbApb9G8|MEa33iRV;BEsXfK6r=u^IrU}`bqzk&9H z!h!D<)5w1A4ZI4a!lPDOI7qwR{3T1iGp}!p393JcXfunDAmhP3?{9%o;$lTu#qOL8 z2FW$)IeZ{Qwpdf~RcHt9X>hmnm7nsv5@7oXlBm4U`%iAmq~oa2J`e>l;{omDY|||?kHV_% z2$f^$5Tmfqhq2BWrronKKHEIzuV3p7d?@|~6vK8k89xOMd^H)Hrtw+}Z#IX$wd8D# zFU?eX0}ebM*(l;p|KPBF;r`*gk9xCv*gV+>fp0sz53sMPXD>)3^t8R&Iyt__{Xm4$ z*%0=jcZkk*`whsHpz8TZj(&L;f)lx^Qqvp(GE~J-NFY1ixHlOIX15maWb{m&e#XE1 zqktqWUO>5>(KY~*5M*42G9Q@QX~|$nmxz)%s7xbR?b^{%Yr9c9uJ7Dt-t4vyTF3_v zJuePh+eI%=ntQG7>{EVZ<_MPSxV6)I75)Me0Exxu%}YL#@%TCh2}0FGb50e6*Q12y zGd$SY#l(_fFBv`_Q+zjw6Ca1kb$ESoQ^|4wv*0u6e}>R2PzV-Xm>DQIV*A1jgcDR- zGXfE&PgD@Zuvhdx5^M_Su!D^bZ&~V=34^(9@79ivE0xNvsooCXE8%q~?;bP&%Fzkk zqeD_tKgFOC7-YF(O--f^t7bCIj}?-Fe8ZLFY113P|LD!svDGh--=**IebwY8q5Gwg_HA^@0I;WPwcM+X~lV z^va%1____!UcghkSBJTkM`p6=0l7fTR8BVa|K&8PaUBy373mL6XCy9Y)pjPww*Mb0 zTKA@uR?B5)jmCl8W-6_QQE9|E=COQ|46ud)%IYBYu+lV zFH9Y774T-xIyN_o>VP+M*74$5Q62DR-mz?K6%J+tXJq~(*SPBZKF;1o^#K< z5EGhzUq$oJKi9;o;Hzo=Rp6Rhexf+kM zl`!_DQxK%fy;jZ7hRy~_XPz2%S|@Kf3v0H9UNQl$K1UVAfJ{AE2IQ+prA*5YrmbG( z1{1co6Eqxso}()6P22O1d$UMg*6@54T4OAzRhb^0THmx4FTfardtwS;D zYz@MZvliA`&m=R9GFpSgN}6~wl!9M#6Xh~p-v(kfpDFbrKIyaPDE$>+lx77yOG{J_ ze?d__qkc6{_V%1HQ^|~br9BUi|FZr#tHagy>W6vJuLDBx*e?%0{!1rU30{UC9n`k# zPEYW1gTgs|m7L}(*=-%}w|DFH9j6lVWIV%|cuyr~xk{S#U)y_)X6677<7>7qu1?>MtwAri2d5BWR$A}1mebTt>$rUuYFv5qeKM|hWo!K zWWuGC-%cgtTqVE2;^0}4Dx~};rCw7NnMyuA_PIYQLrUu^9_}9~vu+5-7pChCspIl@ z8+ZDVv9V;n5Tg*6y|qveozLg9!bsIMbgz|Mvj^guN(eh=xOYBnR@Pn1Hfp=_snVTB zlOe%E4*I7f%pfB7ZCR5H`qHA0JMStE);8e0>tabrBT*$iV-0+R<+}}XbWs&|bhV0y zbqAAPd~2ML5x5Ti{s&OVHgvmkaZ5mlwmr$VC1v_zTaOfc9K-D;S5buaBSep&7)z-9 z92$vGhn8u}OxJD5HYEm}&8pGrc2KqAnE+*i!P!Q`1PqQ$6F?gA%CZ-aJN*G_`v}w| zCIKK%&}8u66YTZHczpHh>C@}$>k1~yy}YUMe}bQ zQptTCzPHN)Tu%9{jaOQ?xwmp^xv16|E{lZu0Pv&{%_Uw&F3%H z*Pp+5{_@|}tIuClpZ#07{v{@00;dE7kAM4H=i}sbO1W9@ztMkieb=fRYa2g>;Q^45 z@XaVmK8E3cUBM6F!q;OYZhr`ZAD%GK%Nn`nR=Tgk9ieuV=nv@;-KGy!tOxt>B0hp@ zqdIpR`of~p4NK=gJ#S;xNU26CJ#MQT;94*44pcSg@er}5Vr%5UBA}v^G!Bn< z8f}n4&k>u!?(wsEdz_9h$EqcIqUQC4pv2N-@CkS&r{X19!fs__sd?dMcw&eNV|ZyY zYQxT>hd4)w&>#Gu{UpWXhS)j$8sVP8YuRLyVpp$v2#|#t!$C9PxD1rqurb^}Yky$O zYO6786zf|{jpAxDZYO7FX*|YlowT7l(3K{3K-NiZ{5i(E$Y(SbSs=XL<=|0U7@8T{Ih2(IC_W1Iu;2=;b zgfs2HiMz6QeukcBs*A#zvq^Ov8;(j0bw+;;6N9F@(|c{oa`WZPrpXjCZeS;zJm6BF z(dydf`cic2x-OvlBR;_tBK0B_j9q-#p{Q|pKm)@;#qb#EBYcb%FQJa5i`fSV=~92=+dUwGt4i5 za<=tiW+#IdLCuylAO-Y}t8OhXMfA^vP&9UpJ5U;4D~wO=`h**fyarN&nF8j7HjDzw zqqZ3*BhV1J-7)kxR+N+3XMhEPP*)fHpz8}+ zA+u*=r7Fj^X4a%AA+_ikL4JL0vpT!Av!9-?p^q9Iv z1LHYme5!P(Op6vrkyQB@iC|CuV9Tv}>A@atfxH%Ky4QW>}GN~S&qqY6c5-_)sDu3sl(-8fC7mEu^0`I zg(J6A0!t=3x||sxYXs0Mc=aji_Z%Hy=Im*m0GSbdnS^-D*=p7?+jD()?GNy;wtnPj zQ_!;ngw9wv8S$>uP8z>{4dP+PnG(;L%d!KIVxt&%95>>aG+}JDc8{wIA7oLsqON%PZl)>b;b zrJX`qyzjtWxYvi(2hxbwI6w?e8Orwo62w*KjdFr}k@&X1lG&NkHLK zED@$adsw8m*zCEW2pWXPZ4zt>O5lZedNH*~r`O{R2opW49KD}Xa3*&V=92qt9-9VI zCSqj$vm3HzP&w;mFTRR_qz}6{V(dUxNtH@h`e?gAPDoqa-5Q3iva>Ku`&deQCS)=M zvO0=!Q?~J|)Kf+l85Ce#=qR*)!^ZEVvOlaoXyZ&+>M=Q0Ut^9&Xr?{rq+@f0U8~Cz zBvBM4rYvxcLpZ`nqTbe<7`{Mtq?J%iQm2Wa1Ayoh{BYDjpOdF==|AC!FKow><^<)4 z9%9m*-h_KFqiYz@gtLu)wB5uJV%Dn*8|ZQMlwasR)w)X$+D} zA*(3ftK5kT!@*!ufbOA3cg|L1AKuI43NL4EdGa70(M7d-WEoERHkCZV6@;9$;MS?C z#0}LLrsKFnG2m`*(9VK9`uM{^y-k3E?I$it*Kc>~N85*ugX7j=`-xxjm?5XZnL!Sp zcH7fzq$thV#gs_rrCOp%M`3{+XlXGS%b-P3F0amz5aEtClGk-I`q&}8P3_0^pVl_! z)}Cjz@+(vya{c6mgO|alpbE_|(REH!N0R7)kkTEKR6B@2idX|7d$d=?C-r^=rN}odLgCCl$W_$0K+TKZB*|>|XSn%=q0)~s0 z5fmUADuXd`D7(XO*pJ4PRP{}gqU**8dYx8I<;Q=6dW@lT75vZOY^==~^GYCerIMzd zwO%)_Bv!-E7M!UZ$yZ!tpH%w9IR{fop{U-truoh2erB;b$JFWGbB^15&zLbPTQa*` zFw=Gke$Z=MQIbWcKcM6><~Exu!83;{*X7mkC~aR(1_+J$I1S(KA3P%v zN_(SkENt`e=rg2?Uw|rX3`4oS{}AB-yT)au##!h$WkCs|kFD3~1`wU6uj2c*;!p0gqUXdr5z4bc|U zRswd{Cv?fZ4DNI#<-+tpLFP4o9{!cD5Y^AM>R&4~^-y(pG9YB5;0L}pPv<5C41TMe zR>IC1t_@j3)Wqo|nu;RG$ozXmuExnWtdO_GG)x|*C}Z`UGq$F#qSi!67LuWE&-|@h zt{aZ$2AUDzAa+prbo!P~HT$_%Kj}fQPupnfHQu!Auc^)lR0R3mlv~#{RV*sLyb4*g zpe48VoR-0ry_I|2KD~i%`s5~T4EDgWyxblAgu zxrCpbR!fq}7}psG+Dj~6kCMF2d4vX`$zHC_rGkr&+@^>(C>e!&3oRV2eM862@7LbL zpY{k}ti~ZniH>6W0fjGNmz>i1c#Rb(vl}iPgBEfCJG&397wqP<{<&%Oe2iZ2ngZBc z%V!BYjZuL}fgrLA3OVmF4hl|#x>f6fsyha~0F_-5Nt3HJN<=C)pB$?#*wlvqd3LZl zo#t^{gB2GWZe*@P@Ar6&;8S+8FWTYesK}X*!tK^c^SF}V5@^aXyUJ{jjV0BMsnhlY zt|1WuYuSk$So7v=(bWh{9=*$R^8%dW^=rJpwEM82iNaEVh}{;@Y*A@gCCb>+Fe?R# zq?8N`>LAaNQz*%CBghJZAIKV(+wplrzv#(g7Z$k$og2uZ@q%qAY-=dAl-Z7F;-D*t z`T{LC z)+jf;fxY4=L;ayn1mo;Fd*bIXb0aL%e!U{LLdWfe_7oCFMzDpgJn9Hl2bxC29Qvy` z;1H|ZD!%0RFaja}2>mu*Q-uv1ac96XZt{HnXLvRufHXezXxv1Yy70;o`%bB8 zXC4;u7qOcE-88?84J){$s|1e>2|%Ye;oqa+2f|Ldahu*+z!PsCQIw*(f*)qe3(&Dz z^8=mc8WKUjn<4Ef--hjrGq>uA{KPL*x zxmZyf)8l`tFRRbj|E*fBu5Y~9c)s!M`M<4KpTV>5@jqYUpQlfNsSZL~a9b@z1j=wb zxw;|b@UXO9CYYlL|NWf){gVE@h2@CM93^MtYqT%yBCnNR7pW6a;W?&d<8-VSLSA8_Zo(6)!9i zMHE{NWd=8L!eB#TY3>CJ+EkB}f8x~nGc~i#Xl)kO;-GUH51@+QFn`l!44fDS?|J_w z?sj0;;Q7NkF~IpHdg&x8%q$tb~6<6)F(Nv9SDaI1_vnqRetR4~DgW##j8Ww!bSU(^jgz$S9l`vz2mLXg zN0hz768`H+M9b%GORav%-3z|5QgCY9rp;+Z$ZDngh6U(>w^dRYOEhssuiM+I0E_3o zrumST>;ucw;x9}>xGqjVipv`zH@V_(oF~3+^F|<-_S{Q&j#rbc8AGF$O2yYGE;5=d zxk2@-u#<57fsX3s!%ckTQV;a8@a|rf#;s`SSv#>wL1EE3iuBLaW>mfNO<+7or<@UZ ziPaRm?j?njO}Ok3e=3^p+*1c%|Yb2`8q zEh0_Sb@T=lq3G4INGZD zx^UOF-1|2X2Z){Xnq8oG7zt8n#8j)}l5-}{Se+oySYn0X&F~#0Ci$37m=TO+nmmB- zfh$~spfarp2799bHmyu|)MqHDX@#Z`R(yRnn4}j|OI#8V@zf%eP!3M?v@$5_4hHdH zu0peVt;?y%i1|vR=OwvBPc1%Ios!XhT9GkkU!GOqx-*4+QK5?wY~ZUAoapiN_U0R1 z4B|MD##zl`vCJ6pFo>fUAC4SPno86r>I@gll?Y!%ayb_y3p@UT6N>taud9Pz@mHSm zbbH}%L1;jZJ^}xlgN)(W>6U0383S3n-5H%TZMVfCrj0qNiiJ`sW$MBIvI0$%o)NpOU>jhGq~X~5 zjZOUbg|f4dGgfvmOE4)Q`XY-_G+p8BsLSFhqO9B$P8l%<9~8a@iGMitwfHU+9()C9 zQ!Gy_5cnB-NAdenGUkjC#U+H)%|3KjY~7lpBzjLx6Q}Tu6~5=2s>0Wdq+j?pK|i)> zWE6fo(D&p~8jq5ziY4eGN)ijj=Qp8Y{ z&f7A9j<}>w1rf>74SgmiA7yh;vXf7evOnX5e9{zBJP+xc`ibuD9Q{0(e!^#zjHH-} ztNvgZVKL1+JL`YW_Sdmj6xN*mD#yUEtHh3w&x&NO+0n#0tZeO|M?ko0=iA@kk1AkIR=oj zR8(mdwN9)AouT3LkCbmh(r(~QJ(t7F3LqW*9W~ zZ6h8$1-y&gI*d$Y{q`>)y&uJAc5(bEd&~a5Xv^eqs(iifD>To-o}a?!ux;A9VqVm+MBcf6v@P3H5Z$buF;ND zDAP?rU&i)_I*Izt;zE1uh z8!x~6e|#bTk8Q~#6`F9s5QSC5q4YU{tdrwMmHxd!|9)nTFh641$elP;YEsshhP$H?rQ zC9Y5DVeT7SO{SiSxjG2Pw8|l7Dm%)ws(DuSvBbxwGjUm zr!=21G1w5C6ige6My_iG+yG)goxcgq5>8l(Gm6ugz#^PM0mkG(LV&-xcSH$Uv%zmU zg3y+nus_P1g_5Cz3Y(R#T%%o9P=^|_6$tWCK^2}4aIEcZ-)F9kLzHHACsIp>!Q}WI z&V~L|L7C)Mh;IJLn3LKqg)|Vi=;R8d>zRc>lbv0v)9X!{4!3MNIVI(4?hh#C$Q5Y3 z^M26lV-|+Fi(kR!8_ivs5n$&o-Wkq6Gs*nDKtffT@;?6ir}^tzq;UNAg^o_Pr8|6l zKEBJxcWHTWmzD>MwJb-UaEuh}8Rooa`;^HRQb3*YJC!NKa~GW>*8U1GO|JLrSsx0L zOYw+}Ax#a^Vot!7(2zzf&ayn?Z{KjCu8saMvo^+R>lWl8%~R4l247*Ua=s2w$@zLf zMd$8<6r8UYs_=XrQKjeZ%OE-5fd9`|aPD=RtHz6D0D2KH+4<@<#pjy}Q-1Erus+c! zh6{Wo*?fGTDC>?4q$75lhiJ>dLJe6Q;+Eoc0(92NY>&ukJ!^tJT>oA^J@DDijjTY>u{q_|(6|k2? zlzoi1h`EP!dzgEQ>wcA_x#x17mwVnD=N{qZUG5?DJ-Gc@4}#ELa)XeT#?PYsvwo6& zc;zd3gX8%9_!xa0E|A3!V(mIQL(kf6joX`o` ztNBy2f;<^&2?ZEW#+Dzn{o~Jn4PVpf|ADj(H^!rglPlat{1ne+_8A?^>_a(~*~fAy zvyXe@>=Qha`q?}Kk-eCIB!gOLHU2`K_z(MqLmTX6iky@4AOFG6u;XS(^R3@Md2^Gv5C_djj_+SqX`#vJu-Sx(ySJR@*s>q+aN-n4#h?}1=q{cbe>=cIAy zJZbIKn{SWbc^+lQdRYIp(X?kxrw_ND)tfuJjXnFx?%v6fUHwu0xZT{}YyaX5&wAS4 zY3$qcUTYj%Kbt4}zP(R`h}ZegrsQ9FgZ!c#+)(<$C|+_G8zJZvaO-OnA(3Sx_<2a4 z@WkHF;*kk|LdpEPgGRv>!gK%AO2qdJy~O|6E6vC}09$Hr@pA`D1a$J2meTh7S**|=OFB2FA`dO*iZYhVi zZNx+v%+aCAB@c6Cvcl1%jEh7^+~zr&Ll)4+Cs+8Acp6f+KfiePSA4)J{X*iNiphnq z$sv$n$ivcMeYrT^YKc0n^JF*VK=iWd1k{BcTY=t?yTi$)U#Kk&eR469VH!IUbE z%P<}2C`-<~9FksAfp>iGSfXWojb#0b<}N3o@ZITu<=8mC`0+>h@W&s^xRpZ;P`z6F zgS9_izveB%?_p6vLBeogD8-L|_($*q1Mem z3TGQS&pY>ZDA$5AE8|3bh{Mu<(lYEe>U%p!xDaqgV5RUMo`~$KK%KNOP9Zu_f0nuW zD=Zp3KLs)X=QZCu60W~&|E@UXUuOuS4x&FkkpAO$hpm&h?~p$E`?~Q;?ObzYRV!4{ zLPrz|(7E~{doZQS2wTd(hf@R3@%Ro%g7j9X=CjS6U1Cmu2>r**CEwV!E>%xtGgyE}UmeN+E|#dQ|$qR*3FQ?>$hrS84}h zqOT5&oqY50yW2omnT0xs-6fvoA<{x%$Ecl=%)m(DT{3b4dyiAJ1qv{y&eW*k4MUBw z$0cAl3}et2dt|6=Cgb>3NH$4g*r`YmP;vGN`nIn1Kz?NaKj2$zc{XW&X zcg6_&-i33C8Ir7gw%L&XP#;8lDQP#q*IIiA~#D~8pAU#^HN)kIj*`<=UbV51VNZLJg z8lpcb%MTh1sFQ?yNc+#x%)`s{yx)slp)0)Ngi0hI*>6Mw6B!2+br^x?@=E{R8J&X| z0RP^ge{X7`>B(iBrk(SccsddbxfyT&j!{r_!`&-017=JEDk#FMnou=yG|RjIG($>i z(@Ch{obouZefS@C3%0jle`7!?9PW|0AAKS)5LIqNmqWmmu7s~pS2bOUtcfj0@@Y!G z=rFSXl%WE_{{Nv8-!9Qivp|KDBJ@Ro{Y^(Q)QgvlsfsR+F^GuV-@~p^wgq0(k~GS# z(8-7O&`)K2uvB_@1nsUIuuKv{_e4c#fzK`~3ucN$Iw`x<#7Ec^m&3gxBes)(Sxc1J z5y>!iH^e^zGYg&;ucSrF9`iGmy+!GMz&K9&bKFcZhV@)i&KA}7pxqU&s{#m}XXIpQkqA%C=XVPG9mGA+2lrT{3pWmD` z_KrbO$DAeg?c={j;YOs00L}fB?xS~G+!=a$p6~i*`%_rjZZ&r#A2>IGlO0JP<4fQo z5@lD`4bNCD)5lxIbG8YG*HA$Q(?tcK(aQ0HG)o+1o|Cqelnt$-1Bs$(D`fiT3@e4{ z1IZa!_h;=3^vq0;rf>2JTFJjdRaUH8qS$JK?7P;{F&S>q3PcT|3|C;v<&T2U(^2fz zU*#~lJ(PzeehkOL@1M~Od#mXuRz3D`6w&e3XNsdEP(kHas*}7R3Z%%X;h7_&71aWL zG`*Qpo8A4Q>PV5oUS)`EL2)cpP+F}Xysf?fj(L1or)6z#!y50keho_`A|5q@ zjpH0$=Od!4`SEqQxiMEgIjUi5f_-a|nqK@_W++2^&>Y&vh9c8GDDLILS?igFG|tmlBzOQ8^!3Ysp+V4Rwj29u)Wc7IIbA_-n}v)LIk5dl^ws8xJ@ z3!kE~1_~5jD}gd9Xdp^;D8q^ zO1-gGl2Ckb?77<3j<**X@k#Lp7cIlp+Kj4JIykKFHr|&WsbMJ24O+LQ(YZN@NoKMK zXO+Cl7WEQD&xquv;2uUK4sKt3MEXYK9>%0S{T^;q#P08NXzgqGVEXu;EjGTKX~+6t z-tpsQ)RLq23>K;EmtR7@KD&>#W1rP8J|epOyNB_RNU*Xkm{*G2?dP*RGQUyxx{Pil zu)@q_+^N9pvODk2l)UnL)5l$P$L(7ey0u$HZ|J&hiS8`VebJRc^WW^a@M?J#!ybf+SH-+vH18!Jh(#BKoJWkhoe>T@pdm6&NqQ`G4z%7 zjkx;iI_EfRt%TeQXo#DQiUr5b9m_F#$XjK`Pw-rwf zf>utSp67+rQ#59kty&o(GoR#Md!Lr|W%OHh@2788#~2yW8S0F7I&f8Narq10_wV25 zeC)-Y%=WPkaAxdlVY*y%?nu=IhQ4Xd`H^Xpo#VazsWY%|A^6s`(A^C9^M86Aa_PEW zUzz3nm^>yvw%foKu{=xsBy*F=*aQ9)t|^`o#MDgBt9-H!O4e*`^7u z6{euHrW{m;K~v?A#ZRl3bMPp6nzZZ78og<}M!q{hYKdTkpLvx|YZk|B$uSx9Dwc^| z1zLI&*blIr#eS!ECNNX9J_yVky~h9Tj?+fxshSx75WU6esb}<`cQ(q&IL*)VDWpAV zd^#eGZR%|Fof?+wLHw-*<;Qog`Bc2YWNZbitHVuo8HI!JO*7pO)s*u6}kP`fS`g7Y8u*8G!g8 zAgj#cUEAEtcv!cVz&ms5UK>)jobT{&9Oh%11K&pPps18CsKb@kQpHB}xp&s+kkw;a zS>zaZNq$l2b}CW&;&OG_gRuH@+;=ndKIe4iGpWU)%yvS``Gi8{xh0sc)z;Dh%U%GF z+sh2&pNydcJw>v2h`}OtQg(KDu#i;TJ+o?4t-8pP#>?OS=dVA_NR#EKlJV;MyC=Op zxb9|a33A+?&vKd$;N0U$K4tug>s&mW-3&N#NG>X#Q}yD8?c4VrlzDLM+3p4H=J@gd ztsAj)dFL}77QN~~hw~iqD2=p>I+={7`y8ZN1c@}2K^_J-F46&#b2cD|(P6(zyNaMV zu?h5U9}e5>dj*9ax|Ry^;gUZA6BBAZEa`S;SeA{ggiet;QO8^pJ=vHGU0)jEm+|mn z90fU!jii;flRMJG;BpWBFO55$LR19zOg{Y5ZA(ce)PPg@5kA?J>yMbBT_y7X1>~+T8U%psJja?g?F%&rl`8Ff*{9!kIP!?qp znkh;-CGYDFGEbO+DkR5P20^6A-v$Pqd_l`AanTxLEtoqb=)?D& zqpgD-w~gB3^&9NHD!Dn>eD>%HeUxRN^9)JgnI+;oEth->jn>y)R4yg*^4X1GS=Q+vqcJDMoX~2a-jPs z+-IwMb?6@-6pSKxljDp7F;?zjDU7QhH!RU1W#&U02nOB5IDZ_F>I70l4vhK0}?*k*BW z%x~QY5MK}iA6L9Z)b|nFIUsnM{wj6S#n{ZMUDU1Pc%4X9XBG( z)Xu|VN`YZ4r#7gF`QHHXy0Im1E5S%{rj}Ac=;7YwQ&t?890ciy5w}=MJ zAD%# za3bKBPf=6VeflCBhvlJGV%fIDU-o;$-n0xaR*uWoCV0JJ_sD2!MJ3kNQq z*imilRg7kt`u^?KJPt*xF}>y`|7;Vj=1RtCejh_5)xSOpA$O z&y)!q^96I^kKSo0Gt5bU1lUaiV3CdEx>~ilYdfAew9L5zZr+dxnh*7pCPh{L7)wbN z$G^aLK)f!9v=pLy?#V5dgq)VujhZTKiX zjh|20=+;OZTB*M^pv<;qPKmSj4j*&wC;~k5g#}bwLzh?qV$UvdxWkvDupikqKPb8H|a{N%$q0R8F6e*A9DqHir79Dw(GT z07-u>C%CtVz+sA0v?T>>UxHR!DxXg2chcmAZ%0g(alJ9uOQ1LfxJ~VB+P{lF&o^Ep zy46ogPd?&ZYgjt?Vovftc%U1>&j{@@#dhJ!S>78Eqc0O=?z-S zAi>B?5V+8T233yu=VUrI%^6}Z6D$;T6@<7(S~F6!ZE%%_AL#2qB>I=E(2UZ^pdVrC}RIDF!g~-RWU)^YT;Mr&eU5xlP?ouiwwh zPws|Vk#4w6Z?4AEt52RQ(+15IG^SfOx1wPkv2c{vgQ}LHzS)l0IJTu5KO2HC&L@r? z8!SCO}U_o)WmtmCOp5(+YXMJT8nO9l^D_$0Lux0Bt%45pz4dTl&jRhiDeTY z0jqrSK9j@*oh6CNv)-WwtT~omGsH$(B)uZ;(Wi*7)WE;C{Hidd+ML|$GfA-6)*m8l zQiT0vA(IxWTFU%`r!C}Zgpc-b&eXOk34}_}1;!z#k|uSSh@7SYV@+f{Oal^3T(#&lwj$EjOvs_X)wpfXT3qfh15BDwwT#t zyUfFMstt}hq@;`GO!gb2CfI!iJ_wgRD9PX__x~5QbsrpBBw>~HRJOi>D(WCEg7_)0Sy6AC z1w`lgAg)Hdl|r)wSP6`Q-EX&!_O@Q{clf=m1LUydM^zJ<>j{hpsM%GXpmof|FdjX& zsYpS~DIOdIHM?jZFpTV{Tot8>+ek=s0&e_s?u{NwFNs9_=rdg(xwSuJC0|won|IGF zvN#gQI%6hxHIRh1FKKOK!mdT>_0-EMd^jeYk#pmmnLGk>4xf8En)B0!p zTx>4v6}t#K{S3s<$%m2n-AVentcKFdLc?L1|9uWPte<3wk=|TmR#)Yk_l!U25&s!_ zq=u~ZhnoG2hEdC^z&0wZDm0H$DC8_3e5Q`DE!`V6?q7jFXQ!$)=~j1e8&mLN{^mQC z$q>*)Jf6?eHsX5up4Hjh zBNvQ~PhdOF4I^vphjI7*JYS5gp)1&Zw#@+it#|-Hva?XJC;pzFi)%_ye zwA3m&>2MGJxBYki30=mY_}>h=FKv65^1Y(IrsE^NAvFVyJ%t&|3Pd4m-* ze^_E0T4E)m)4#K+BTxxKvZGJY2V(tyZO;*xG>X)J@b_oZ{XtV!+m+882s4Ez1&8Gy zYQZF%yp=mHE?z;tg~Am7^*Gn(WICAE?BA8+0LzK(Tkz{Bzs58-63e+RAYPP zv_H8~1={x8R>F3nEGXJl+53OK-=vrwu0kSE-|towHiKh1ys7{@%rKhp*!)|JM;0nW z_8Qw`$5S!V(!yri4ExaB1h+UI;JWbsrjYfxXnvuy{{V5n0g zG@bRz9IGoh1`PUt<)Zb{*pK`NP&Yxhz`=Bp59A>kWqQ*K_ks^Au#x+qH5Lp|S=?U{ zK_kuw4X6exIEmVhkj*3T;RF^Vo<7)GPcX~p0Lwzm0x%%_;PVj2jmGgxf?)l$YAda! zV4Tn*A4zVo4(mt3`AEZvKxer4N$2|$vwf4@xPBIOw4TDPTUk)hi$V2*pY2!JV0}UUao|I3m~8TQ zF?2ast_E35uBOfRhu{F=AeU{(>#~E9EvWnDsQya!*J>OhsGq&04Q0_0gr~F-Mjx6% zyD-32=xI6=&N7~Ia z5rz7u6S(0pwukT^;GG^@gFOiQ({dtk4WSKE!2vm=NG)CJAvKI*MvzX2@?*!7j-HpK zVubq9s}LvJ=8Yvk0XjkG`WABld!ks7cwk+!ymELT4v8F0Ze-MmK3VWHr8zh2Y76v+ z*MQx{$r76kf68@Uafd_4S+C%8a18ee-~7;k;p4wc_syQw2a3Uy3#m8^uSt$0@w z+(IM_?Gkw7`0T&n8-Sf2Y`yD1Dua>^Z=IvyHDCw<{;634i@pORN6ZC7ebrf2&4fT# z9u>PZC*~XH)6%>d-k_Lep(#ykWqrfwDG&Hxk&OKx<|YC{&)(M2o8@99M8rtrcNZ%@ z0tD)T%)+7sIV?&GFkXQL;oZ`#^v?Q$hO$$Y@Pv9P5CA86-;|w|>e}YMhTrz|Tgu*G zDLZ%p;CKELx-})`vVoWOLDI8Iz9|sQMv&NbGvmJsDKD8JoSI7m-rrook=$SLk685T zi51aNL2)7ARf?eySp2Z!GsSV5d&l9p%YGZ5py zh2C3;Cgl7|UxK4n+?e$`g`AN_gfNp}YjXCoikkd3S@WnwvJZ-}%0x8oxE= z!+JZNqrGoCI~Dc#ZMsL%wN&-#bTO(n>vXVA3UYDjV=Gv1V7egH!Czm0tvVnn@a^92 zNdQSoyNfj|B0js+Si*?$OjxDf2;*@$w1xPHHY{moE0iy(@G@`Ic1F4a;`gYy0zgrX zsMw~@Sh2FZ;&PSJ0vB>SPG~d2lT~Lul<5!SoG^AvXpz7>x)O;a)|#tL^$7}T$nn(C zpV@Y-M))8VqJ@QVlixTAuLGNErU~j(%iW}NVe6FNgzqPIv5{M0Hdojh5#PCS_8ZZwNGgV zu}=qR6eaL6_awY}7!iL#(f!wlr;uT#LDAEwXarqew{D(8YCzu1bW+gAR=nx+)s0mt z?@1$uRG@AL7zBdMAaTDa?P+QgHpB^Je6iUQveV-rMfB|sWT_N^&wv!X)2mWn`ekReIYi=K%_Mxz+NdMK|ZQb9znpjBE^j*m4e1*QGtMRkQ=KS+V~x z+rdl)P+kz60}_ngZ8|{W0MbC1t;Sb9MA#x&Ma(uV!0+f{4o*jsiw2yJ(BI%}ZZ`GR zWC{uVP{#n-9MAH61i`Fk^XAyb*pxcEQCFrokaaNo3^A+CFMtx2Cu53PU-FMcn}ZqH6P> zl;-`JC}C__x#jAf8(W?gy}AGb1)Dz>fyEo2lD@TNFD-0i88@>;{o&`ELjLU7V_<+` z6oVP`-gP$OU$t7>y{rb=XU?i;Cdd-u&x{bYVvb06dL#@ueplz16yW$Lx!TZVR80`N zKP-J7-v?S)&jG^kj3Zt?jS#EiSX38L*XRkcRPP4il^@rXA1BI#OJG%bmD$No#o+Tz z!+@MGxY?*HbXZ-wwNnRh-Em3HS~pbPuJ2}gHwrSH#NMS$M6rjd?wvj8@7%5PoR|KT z`@HVR`m^4-E6lnZ zL6*BwPO`cq@|3-EKh8mxyKzpk-seE9$elJ4hJr{F@kSba=$Sjlr|cnW!QVdIYSbNt z;Lz2iNtXfhQQcBYUaz|Gs-79Folf4=J2<5u@B<^enQKxBTRq{(W(I+`87hniFQp{8 zvp=8zSxe#2=!U6PW^By>GN=uwi`9|e^iZDXtR-X9htad=(9qpZH0E)zTFb;9yfUuzkBf@gg zkam#-Yc-jPkqwZxD~1;68rk?AX&3#>kCAJ)vr+P=>T5q*<6w$kib7hP2VZ6JI&^mq z4>~`IT83?Mt{t41g$-e;1uY3BE^JH+R<~y@hEA6h8V!Sl?u)EyzXOL~%r7HOm{hZ- zN(CygTvuwOe?QBWtcQ< z4G2#iMHLo&+jex`o05UPxyX+X<2#Wtk zAMWfJ0eNA$N5kT0@c3&5`OanTB-zlzSymQT6C+x{y85Y7!939WndD+qcAArg4cy6% zxZAb~Wy%r(L1Raso|CLGfsYrIlZ0pRH>cb zOJ>TYwdoE>N!=9alqRUcd zO|oUXn5K?x6J8rC^53@Ym(C}Xd}^LZ_!VOwviq?6Ps$I+*QxSecW^4ti?B!kul2x% z=n%Yb&BnPHn+;gvZiKB=@^+>SVr2EShlAY>mQz?JwEO^m_2dMg*D;phw=g7y*a+!{ zOJYVe^I;=c1fBp07Gs?wnlq;14Eyfk#dehYn9zQ%ot(2Oynw!q)(SMHw(^Pp1wZ%a4HXe z`vu?Sc>JPc{m6U`YVWK>0_y{p-Dz(kE^mrT&FE?1B$0U}nwC~EJ!+G@y}Br+>}~0j zOa_6zaAu%o6-m`98E{`M9*I}l4yGYH1s(xeRi_D-rQ6Vm)S#eyx2df8MCDzlQ-^VPq(D{#caH&VeE}CH)Jt;SY~+v`FN?7 znhzlLQy-Jkdd}sJJbYtVi;y#Ks-W^@&ISnQw{`sNKrc;nbVG? z`%F2{!41$R`bAeMa{!DWVC3w^Ps_fd!4oQ6@j&MbZ;G;8l;dt6-mc3-xm4WKDQPh* zZaMKfsD5Xs0Ht_?q6349D~qwv>dKAf1V z*4g~x!jNVdnTf`g@vJy6C>NtSf6bAM^6|+|_szlS3QX1Up1I+lhz-aBwswL4FW=wM z*Vl)CE*~;zEBM8|H!HSv(owT=pG+&>tV<-g+5NIGf6X2&J5Q_ZWrnpLAhB?GCtlFV z7e;apJByhkooIn2a6^i5jDJ|nM)z~E^RL#r6)nmuXCg5FQ_V_KO7A3h4B%$|pHH+> zI*tbjlx;dFfX2!#Rwr^t|K`m_s<7{+-DFcH|P4#c0L|%^g1wX|JquLeZ?2JATPywzjQQhBAC`y z=K-Q`_q(m{!T{xvz7wIulo_Khhf%zXnDCn32QiLav z6@t~Hazx?hQa40->T5llkYt%Kf$#2!9s?-IFw1uC>@j3wAqpEQVrxYwy`; zbx;sFLzB`XJ7v+ZIGgsSH-NH(s_bZ~Ss(n~9{O7k+CPgsAFPoho)C_+_h4fA)2kk<^y8VT7BXfy~0g1J9|SKo+2z zR6uw#KyLs-Ud!4%wyCP=TX%}8QQXNV< z%Ynh7588}@gg_|=wkM!WkXeajmV%w5rx#BQw|Cl*9t-pdxL7~aNfuU`5(ooKb)IAb^l`a*c=ux9glHN9v9=) z%loa?pZ@sof8c*+r#ybT`gC>e3-j9-yzpPp!b94&tI2BrQ~Ovm|2=>H6#sn@{JXaP zUwi)a>C^RR&o=(Fw*GwM>GMBjYyXG|m;=ksvOoP-@8|hhO}Rzy|4sh` z4=1zC@7`ymT`WH2)({T*Q*(>7&Zlp-xA9U|5`MAV5YcOJ+ni(5;^NXU-0hWYV{PqO z8-6~=pD*y|m)S1d=#Izdvuki;*#%!ShP2%q^|=|iTAa;iWS{=uFzMO<&WFV)|2g{_ z*WiCm^MMfrSNr3uZ(1z`o5cLf;91b4SPnDL)m96J3oj9Tjyv7VZpL%81)ElilKTQ# z(#Vxx7~$+{JSfglxCD5UX$x;B=ESgC-ZuxQtoIpa@8@U3qMz*-{d@$zyk-ROq`aij zLvi@zR^pR4*?%DWkWbOc;7J=y{>w(fH6xs6;|Zp#!q5@8!B1OU(0!O2zeUo#G+S0Y zle6n$I0Su?kyXy;Ljq6vZtvu+5qh(&gCAPo!4>D=2x(20{Hkf zNS31+-uvElj<(;L@>{R>_V-SHFr#hl?wuTTj*qk5!=r2q0C7+DwomuBjl~*Y{F?GvuNao*3x6<+#0oJq@Egj^QMcYB*?-|$w0htWK@L)8x;EjO z!k9CLRJIS_|FC!P=7|}fx#EI}-@I;peL0&=UVib#_4W1Y#b~}do?d)0q~^*mzG20i zIw+0obzWS++322?H>J6=_|N+0+emlkJ%*j+Ke>Qu51(E1gKA?_=7aytT#$xAHRj}D zmu6!p9z6!VPU?Ab*zkfB1c?{uCgZ;_^3?1SMF@)bnInEQa~)n~^56jZ|C(UT4Sj<_ z!9l)eh6S;|jUjL%Q!G);%6xdv%L8|3RA-H^CSBWT_v}W?$2i8Wg$>urPx3KP)`@|a zS5TQh2+WO?1)ZbL!8X-k@eNR@?;$caY>M5z?Y*si!Teo_C(WRWjH`+_>YDyFN^7KT z+Cu#T7x`jqfB$fM>jaW%vkUme#WcS_mnRAY04=uXnp7gvc#mDibzd}D2wCZT%E5cZ zhm8eYPd?*txrvd6$u;IIcWaK!(ymXa1B#pEk6&pm2^>GGN0b#MJ@>APomQTxj5J`V&gK?z{Isynv39~SiO-o@U65=C3hi9O2EcsA`Hh9=E?IqYa|C=Rz}$t`mrLAxml0=>W#+qe)#U);Q>-{=RZ%)0`J42gPV?{k#WWm zfIYwAwS!Qg(NJ;Mf%uCMS3|#wE+pcS#dVCI!Yjy8-cs%r$xITwrnz{Vs2#;lkg3v} z4Eo?tF;o$KNqP%l`R?IS7t4FB1Pi>~I#!JJIGr6G(5`E?o`(iW9wfX4?oXYfctKjmhbs$qbdYBiehT?pYgk zq2061w6PY7Du4)-l(Gg(WklAxrMlN-sjOeER?gzbdtu4?ts-bTB4`egHezBIJBk@> z!;1S`$0uCb#@K8P&GhtU=$6lCrP*@Umzre>i5WP{QM#3k6!(Gev5)ld2EE1ma8BNr zU*V=-V(ceOK7PG$YR;lj*@PiUv7ahu5&K>kXSIDiWgvG1;fLX{8blXpGtm;gBDey< zzN1Os{0g2JKPC@Cq7rlXq01eLAu9CHnZ~+vjz6THT!1Ila1Lb~+48%+gVST=!|g1c zc0tm{2G$bQ-7xO1vcLEHx9-l5i^P_NHC9Z~Hy|INxhM6-a7;8A!BXm5#bg$KYp%QU z{C1-bplO0y-}^rRpTBoP1u+XCIYW|{KHtx(*RIi*(9l)_lJQ+A{ZT_PFV_OpN86tV zwP3g=HzvD>hX5x+m$#=!`Y7Wq1wKa;@V@e~(zzfF-@{`{6ClLYb}{ldvC+&h$u$W% zd)jW4+P~Es{0@VlXeqk#I5MU~rrD4%r+GjC2OVC15Iypq_6@f?$Y0uUvMumce=Vo|1)@kfTVc7wlSD{30cW{tV4HuaxIv`W{b0Dw;m+Rf54>*l zt?-$VEYeVD*xfs7DmCb$Dbc|m-Yf%fWJkcd+}`-}khJe*S@{we9Zz zfz#Um*8dky>suex|FARK+gEZtqvvbMfv0F)4hF&7wo?4yxV>cKEzLm zk5b@6gVS!Q{-}d}E@2dQDHa@Tey`zN!N=V4{5meKieYaGh%t7I;QpeHt!(S$VLZ<%*^^*b8-xG6cAA3 zA00-Gj*&kOh(8X9f3pMP6L|0EV!OymR{m#k@$@YOz7%dAz+ymwYM9EAQ|-ZCVC^W{ z=uyB0q?$S{X?P*2=IpmpKL6u&nvJdiUnqTJme2aD-kpFEKxp1_do^I~^G$XQ=qHi7 zPc13KkW$sIYd|Ka+NkibjI2S+1w?w>toRnwK~aLgz;rSG3&~y z_B6lhO(v%5V2)N}u8zoEgpWa%63m0Hh6i>1*4Wn7CVf9avV=vPVJhVtV!wp&s3m;T z>EwQ!!jSZo$ z@p|)|XWb;Vo106vfp4&w1+YY>_D5+>1|&g;`Rh@lF}>Pt!Am9~PS zp9UXSw_y(pd^S9%u0NPclBw`i2@%!0J{{#3;PNxghP~0nymw*9WRmv*S&3u?6gb@m z2S?rU%*eL|Vztvbgd_p^-o!+1%QJysu(c3~Dru!u=%s|TcW@R8XSgAOXZB0>$oyzK z0mdgA-?@cE5SCD?9ZI@=TN-(=6eR8u_!|$4elhdf z)6Q@n?ZOx1+$R?ZK3;tcf4bg>=e?hEM*er3vF%l|pD!9+_TuDerrBlpd>LoXm$7g) z>?$=`-Q*{UZ%_KubgEZcb;_L!$;R9r-JWpx*bW6M6nVL6Mi2iF$O0}u6NaSTT*0_< zO1Xrt+Z+ad>nUAQa8pYH4un#TojQL@|Gx8f7m^SOw&BS@E3q83zsRUfOj3VZ`=bF)qXRI(Qv$)>Dl{)UcmSABK7Y7DI z=$sfWj_0Z-7dexy%F@jUCF&3o@%%&0wa6XOT!23`efHC_k5i_|jQ-{2!=z+k>J9&6 z1x0%>r^Ai)bhKdVsF!RFDpv!SzzUD1+!hK;@!s!iEO8xj3D4XlClfhgmzJZnXNsGYX{p_&T+2{%oN-k zyS2!*7zCm*zUAuKB?^YNkzX;RKIp*Dmr~4ojwT{ zz~Q7jF>qbU6{J`v+vGX{un3ehDzG$tKmpvVde6c``Jh*Jh2%}hDd3p}ds4%|KnC)I za!5}aBq~#oNYNPFtDfzzSNd_%#4Hxe_uA#cK&tr+%3lVLy6+{gP~pu%VjPip#m(xAVB4;Y(F zh>^V2!Fkl#IYpo>@%3AY;JvMjz)SbcxhV(+CQ2J@poQVJv)n-fv8eB=i={lO&BlS7 zg-x6sou0hyZXN9G?N*FqG-%k!;Zao^cuT5pqVu2Ws`=kPEUe4!zfs*$lgefZyxOwZ z_pgf4{mM#P-&a)X{Zd)!_1+0gbh=_;=DD`!9%#9fHOJH1ir-gO%+oa+=S8Gj5Vhwe zX^;!F68n@$9LRm@jni>@k0a?XQG&k73c7KLkpILbDg?obf(}TvzMO)Nt|(?@p9j&+ zAugPhLU%v=56b+x&BM_ADr?lFi+< zJ7~gny6$$Uk*tjT1WeqVnl5QeIU7$2jX+|pF&sNL6w-ssyI6%I87y_=CSK98T5;w+ zZE)r~iI7l>A&lH6@`ZVkkxl01PHp@4Ns2)Ke$2|Jhj zWzb`S8WX)H)Up^>Qh}|hCdxyMR#g^tvl(N2KyCCpc)iDh^@?tl0`0)#-M*K(gA!&U z5d8|yj&+nu*H(N0Q1^a~-*5URZ+Gw8L+b5=R-N>;(IIw~Pr;MqfAlG)JWb6x);l*R zz;$mrDD`1=mjmZhXcg{%Pa|4w+*Xwb?C(eQ-hltLss3H(=uIa<_FDjsG%L(3AWF!v z*Uv8vM>Ud*_;R_#H*9Az^38QV915i*yL-RCwcUApxWCgm;!e{-hRdWG7%Zh2uYo^#gd@m zHRbX>|1K8d1R+ZF!m>Uf9w~mT3q9grTufC=Y=noSD!s~7Vwe8q+}t`iO0SKafy;@< z7>${UJn}YhzXz#Cc=y^)6X;xa7%rVKPw?6%P4(AE6#IL}C*6b7cl0n!(;n7@{}-;Vigd#SR?51dm>*b-b5s#~&`hz2bkpT4eX$X+ZPw6t}w zQ{7Uip>NRM;nAYztggO6Yn}i6wz@gi+c#+Dptc>>;Wt^pt?z55ofY#<+Sxm(UB0I6 z?A5NGR{A$-tZwPF8K6m9okfj(U)Pv511weB0bEWK#Xi};!7@{JqUOJ;PIxwlLddAC z>$F3`!rh0}A?5g)^|ub#i(xGRTcIEh{6@{(Q+Qx5>xn!1Hp2!fx}?56!S8F(oDTP^ zZ&a6T)U*m7tZ!KrY}7EJVb`}wWg0ivXq>9xCI^u1nyc-}+oQwNH*Yag$#wIx5mg3W zhpKBMEO``46e!zAZyk9SL`2z>x;W>Qc~QWPd1D6PU5=9(!xHIRxIom&=7Mx1ENtnN zD6O+q_pJP4_7h0NJft7 z&MqNwRGC;P_4c!@mhSD2E2f(G=PsKOUb|)scD8noQ|qT*>xJ}Y^mDAH6ZZ8bU^852 zS1gva@4A|*%{wlpH~8OSEz>k#_Am1RqIJW?7}o4~`)y~ZdvJIV=m{4R0aiTS@1!U| z-gUR%o*w*76M_5e&EPmsj4?RfX{g61TPJ(l$c9rrl6DmPO1-Aq9%B#M-}&KS>)qWu z;OccfygA+5VR_;X9Z>DM_K!{vPWIk)?%DxYuj^s!^yKia%|qSFgEc9Se*FBrU$A#2 zPMSA^16oF)?_2H&uDw!8*+H)Xc}wT87sJVwcj>v+HPg%H!%W|;btU3fwy%Y{TX&!Z zy~-XU>G{^(L{jxXlMoHF?-jFK5}KjSt-X_#-$5oCPa(m<;FjY#Jlg3P()c|FG&k43 zTaO1A*zYr({&+a-P0IY11KK{^-`{$FoIES#ojxTKnX9$%A%pllAIR!U?|M%m^ZUim zxoVE?NRT4xd_3*v(!86wuJmyZO~*cB2%( z)*KbtRwL^hwcXb+Tn)@^zv=`rdq#eJ_x=RJzu%omo!@@*$3|LF932T`uM)O6(u+1U z<%!5=`3>ckOBWh{>?Hks9LY z&Bj+nKO_$oJ(g#~QtRob?k|^69OJTrD6dC+p-dR9C6@5Agv`2aPF+2{EZf;H)@(oJY*Q)_ps9N6LeM0hh1e<+4}-Hj*ae@Xz|J2*MoJ2>9k zc2*grZQlyxNoB4ITo+Uw-`-MD2W=^;j&EA2sI;^9t-1WXl%(POMUra$6{cDTK%F<8 zBQ`u?<0s}ygOyzeE?qa4IPzXr^e#35X*0IqR8(Y@y{hM%YAULUZH1W3e=aP4;8oDZ zms?A?c}Si}FYDT>nAh$TGAZV_-yloa^@3foU=$M739V~Qp>^){H{&HDLWPs}f$ zqIQDAqh=~8%{LaR%j`)r^|W#y7v%|Gcs{JuGTms|6a%)aCnii`ixu16m1ol_mDi@y zboo7xjYX!+ib|S=MJCINI-Ri6_o+&E=Sj89;daDaO~~~`ypR+d1b5t(TD>!{wilES zZ7`R*u=M)-c#+KMk##CLn zw(d(dGwez{gs8IlX#rW3!$~6BiJQcwn#IHR+%RvsJY3_K(4BoeX=_OqXJn;fX6j-w zxWX^aT91g0Tpy+b3gF(6&C^KcbVRB215U&)dp6#OAJXmeGHs8VS|f&Xn*9YOZ+5}g zbaq*;a2Ay=&RH>{Y~vJ`E&VxQDRnrI2)t;vsfS{>&U({nkxvQbTIr4iQp3aj&K&Uf8r+ACCMdRpC3-hKoOlvU6$n0X!*@02uU{LGG7u4A*G#5wYa%~8#DF%R4d5)hQ zS6ieY^HdQl;iqq~D)VUXWN&+GKgw&wS}X3Tc1i~0Slj10hE8l8O%|(*24m+tB!GZc zp{dnEqz9r!9~(X)Lj(w2Q*{h~=Mz!x!08|v5{prPYU}pL^U*BuFTLr5=Sc4?ht!N$ zleVumtxzd>566QW*%B$=SEZPs1yqf@sY74zt1-EWaX!)fVB; zo3Ms971zEfPDSeSVWtkqD)qbP|2&akEk(pME9Uu%a~UqkU%1G=wli=33cZA3$x8r_ z%>^+;p3(xJqXu3O3Po15dxb>6z}48vV+pV0l#AIL2?&*LlYRp% z7OjLgBp&29*;@A3Y@dzSFS9qC)PQ`sm*Ui&(%)>H>J85ERBtN4o@6#F)*-1hZpZs_ z-4c&C-O5T@s|$p4(s>VIw2)I`9a1VhUN@_A%C5+A;)on+j&=I=YeN|0>@P&Dk7@3+ zFYr$;g23sS4Srj)>=PNvU$~t|R0ZCXSSeMMnEKK^{V1s&jNn>_nZS|tNT!Z15|yH5 z0nyr&tE}J~Vr(stquo+cy?6&>F}r&)Hh|_e)Lv1m_wn`pGGDs%0h5x8mH-mTF9D49e$$_u0eA=$@$6L8;B;|{lZo^)|)ph6a+pVM3Iy!WK z5Bg&w@~EEyzUaw3dY2wH-h+pO@FE~AS7t>EUg!s+#4@Ws#ZlBc{kZ(EONnq%7@TPV zn-0TiDxG-38)wLwaJZgG{3_es0y96`}D?iI@(STv0BnU{1s>HFt8Q8y#hq zSS#vP9$kJ-I&gw$Ewk#Ixbksc2f#F3!cgfrwQ-o$SS^anS&#r4hH50mW3gYkaLw|v z+nf24O)f0=q$LhTSSdzo=oavsJTg4 zgue{S_+fmDS7sQjjL)Zri8hWqCo*5{I7V(|!4iA0bR=c|_M2HMmx#u)JfB~ER=$i} z>=XI2zBm|}ZC$B!FjBi(b*5ZTS?zRB^iIAWC~|{btjYS=O8amb0g^67-f20Sn%1ZA zjotwXF`C8De;R4ie9M(-pGAfDr$_G(k2_vvfsP_s0uoVquYEOw42~26MBBme_&Wit z2V`M|&|}Ueq!{?a93cqH*29QJ!{|G|c$jpUeglMiN=|6zdzzQLRd4JUV@h!6FP4Y*2G;FjrUqck^V)f( z*$+7Li9NvgR&trAW%ppQXv*I8OmD;RKJ1R>(7`y`V{LTSske3^z0%oAz3$_8!pir3 zk}5G1CP+0nl`bC(P6(tZ^*$-g!{#{FI^09{w_bPlVF@g59{STOa-*Tn?=&WIPCBRk8rW9L|u^x%`Na~w*$!RIXM+{lV% zvhxb#ZMEY#85%ueZq=X2jjTsPok`OmUB^ZBqijkEqi-{&s3R5F{QG|EXlsAJQ)&JU zgG-uivrpb-vQ7!pa>Y`$#mXFHfYI}9TeYS-XSSd2y6>nU$>w6#T0foQwOD=TS_ zfau;6z;yQ~Ab7>!Qbj}#Jrnv5>uDKGo~^2Q;#bkEske!$UI27dHI5TjRfRJo>hY^o zf6k5__omF`oaU|SOR_L*y0T6bo?cnfeGmJ%R<-CpVQo?DSCW0i#9&pNKHnf;ST%bT zr)a&Ltzs*l(OX)l=<&ZF)vHNovX8&@55oUl2)~NCS0i~=%HZM# z8Nzuw4_J(&z3i1;Wov5am*$+(775|Eqvs00y(q-MYCG8cA1Zn`@sG`f_hf|Cy$?n! zo_EmQmF%h_nmy3$Xj@!4&I}cffclG>5$R18j8g|_RM484tzL{m;O^QRB3=z?(}t^I zWIZ)@F9O-B=d-lJfVA~`d)Qn2aR)=GEZHtC(s@a_k5+K4LGQL|?!?yQo{vB89rrWr zyJB=P%x}Bv5=glf1n%KWv;(f3RukP>k8r$q@Mgc$bcRFVg6cV%^~#_BP}cAypKKlf z?O#k$1M7p5#+|}4;DZ43=5y#oE2XwY8_KZb@4x?^Sf`qec%M>ZZj#M#Qo#@y-URvH z(_|~?QS3S&Qrm=!iK!gP&S7l} z?yk>VE4j(^LF6~TyMKE8wzdaW+$U?3{<^lhsN5?*khRpcjac1xWh){Q);8m`*bCcP zH1D3Gb#ZHQls0SAzsc6O{N3Tv-_VnwS<}IFA=!4L!G^c(B;lo-$0M)4ai4QEZW{Pv zZNqddR(`qg)rD;k>rS@OY(b)HTir)C&Q|%c^`}4n`@R1&)BpJC>eJP=FU)UWm^%%u z>KB82l8*-YsDHD1`RRSEng5vzyJ$bV66!kfYE_|5kAYO7^_!b428 zQ*!g0+0A&4E;i<*ElO?`ZpgjS;0yDm?7L(hm|^787C4bY=wm4!rEd;Svp4xDH%CqO zettGI64rjv&qtK_XaY~lOByE>hmUI|K5jG13-CwHz|#uu`DUUJ7GVY>oMz(*lv**v zx*;c^78i6M=EgseSg_0S1iXk$Bjy9pKlUsKZ=dt|kX&}Z+dFxCczTj;9sJPx4zh+F zocyqf{!nA{7PSZ%Q+72Og0Jm0B$ye^(4F>O=V<$_DZll4Z-4LP2Q%8%?%v5k=lD3= zJv_>`GKf{*+dkdjI?C9AXf?}@^L)Xywa#(cr*JEn^@?F>zVHXLNTnIla6k^eMrh8B z&^*X`;01iMcr9AJ;dpdGj$UTEHnWn)fuusH^>3b-@$H?Xua|k<`ucJtUBnxjE|Eja=g+@Gv?`)`9tl?{$<|(S(H4`PIvolXZvp!@}!Mzo#f>VoXv>z z7!}{pwjr)zZ{k(oIXpNC+Gx;3HXaRcKnnyuW-7lF`l^jo{37-B5${LlGrBl_a~H3i z;cSi-qb$%3FKhMGy4uEWetJr@iS-cS2V%K$-whLR;4Cm7z_n zbRHISSZk8sax@+RO&VdY>ryUDGG3}o6-;di*2Q}td~El8gcn)0h^llOk|RTlIfO!J zAVbzBr0`g%pqc`c-Ny~uS6P@EB+qLUvKFkbURwSj7e0wdo1 zeyNx(2LtC6!&5iw?MyF#lm*p){`YzDp*O^|VKj)c>bp$MKZLqZmj6(+e+=rOe}Me= z^!eKQpVrr2ym$uxd-4M1zvs{XkpKSi@}KjLMhX}b1h7B}rDZ`a|NSBJ{UP)HJIj38 zakK%(Q$A}*-SKEeR3NfuOT)L2jgl#(Ld#|4Mq@@nT$a+nKmkmcG6@)HyAuqQiCDC z``Y#)ETO&xMPoD>E0x4(jM{RT?W%rM7>8Iti4;jxSEQVcC-o&@v3<;Kmf(VNOrG^C zbzcA8Nc*$Pt9)i8+(ktP<3;bg98OgG`R3x&U$D4_mjqJ~m$_cNqLLPR!Lak&mLtKG zU?Dt`H+*|^HAxbErK!kkpctnsn|2qF%y7Jj?jTxd!ITqKQ0k} zTq6GAmk7;0A3x46Z~%sg-gFK+M|<0NO(^lcEqW`i`ya)qKQzP(_%@^S;$rpkzIs;P zl;&>YKkJ)mK?SM*7%w70L4%b>OV6Q!Z4_YG1mUGVQ+MCY4&X}kn>^h zB6xJchm8LeCC>08%rqt*J%&KyS?Wb{Cg25%X7IwS&LP~OWb(a>5b&3(n-8r}*e+?v zbbs1%dcP_ckJ*;0jQ;C zV|JDzr`6!KD3n>HY}KVOC&1{D`b%@mFiY{@r1-(OVypW1Gd{s+S|rI#ZjAiig~FyR z-1R6R4I2v<%89)tb z@aKF2j<#8OV-7JYllRI3%_ZgnP$2w`If2aYl0^&J!bDoOG01&3WLO&d3H_U|`B04K z5GMl;xu&;#q!bLi0(R;xD4(0+T+KIq2u- zFn`RK&J4vvk1#MIH2j6}^2Nhi;5MoA(nBxumKmBl<~_`_9xg_Y1`Jdf<$Q@PVp;!cH@V(}7C!b&&VB(ry6(i74(Hh{k!T3Ehec$zlKWBsS^+WzROA3 zr^j#cN$9&}Ib6c;ifj+Iqafdx2j#+hzMT;UqfYH5e`K%di+ClDSRJa3zCc|4OOV%) zMgejJxZhxYb#;TGuU9$4h%x92Zm_MPSpb}I_(UieQob|kGH;s^vkweuHeFvS!?OR zqH&h16sRJ0(6-r#uv#kf1OwWPz}7DU9bvIr`rW2#rJ3uiq6BBnHWR8f?wfjJ^BP(K zj`835bR2R5q&2SJrRwpi%wnBsmtibGUY+DdJ}l8jo>5|KOOi~sHl_iQx>^pY=v7uh z=9uBchpKi!=@_y7jX=OF3fxA%;n5t3#4@jjEAm-vZXKYrM5sDVW)7tX^A?O|l$8g2 zbm+ql|IX#80F155{2-1)QX6i>=%a$nf({%?eG-j`0sxWu?!;L(09L0hb4rMjOjwm< zMO74HuqCQ`BtiU6Pp--`kFlybP?-)j@J}L(Rg;fY%-?>gJX`p=sA5mL|6SFpLm!Z3HJr8Q1kI(Rh;DqfK(-LLcK`}4{`4VP@z*I>T21yLWXBe)X_qM~K zb7b|fly&H%_U(+cW{wCw;-uQri-u2&@~%}cKQ>|)KV31LB#Y|?s$|&!BrGA6ZJ%$D z1o>uY$MA4-aN4&P9Uh~6r_`@`yO~YR|ID9LNgAO^M#8$xOH5+mG5{WRb|Jp|{oz69 z;Kb%QHRa~3{Z-q4%^WOwlaQ5+BJywT65V^GH6z4Xl2IElbol_}6+ihfj3mx|NyRYKM&1T);ntfB!Ki7(qcgAzfVBa3 z8@uu%e&7tv(r}M`I75v+zbxBo_n^9hW|&bNVRwPn#)w^T-mWAxaOXpFJ2BjYTr*+l zWtT?_YDSNJKgtyQ_FYOJQQkevzhoXBWqm6*-pivKs?CI{xV&r$9ZiJEj3wfy$&hnD zW9Z6ecIV0)uCkD}KQh>t+gtlK+71qu!=1yI*`7d&f+7L0onAgr(kT)&WO&&M$v5ay zny^!%G9^|d@T1I#iHwL%W<+N^teXnv4Q?X7%O8FajM8gRja=ssr@0j^&i!;W%-AcK z7#z9x;xpIfDl<=5S+w6!!diar^LUh3%iQ>9cM-0IgJczTmbl};Uu0kZ;@+RcgY z7jX>CP4J;WpSJ-YZ0OFaadv5rYu3LBR}!}2Cf%*w@yXHY_Q|OW)w9^xsc+si8yhjQ z`?n&behnD~fqnYbM<>3rEe!o1%tscUR-eui=HyOnAQe+7@`&8>cE<_M4HyTOy3CCp ztk;H(;`I=2v#38d;tot4@^3QwX^t&YjGFkObQ>L4w;ALC0PN~ zT$+JWST-o8{KTqeA;)L49_!})Wi;PS6mg#k?0#a=P#Wm*btNyR{)%j(qF#ufTH}+F z(`MVERy8xZ5pJNjO`}sx+Vbue z95$gEl`<9SiX~fd+|+GSFC{J^R#8xKHz*)HiqM*2`Y;ykvxK zIW2`p_c6>))#w`LvhMl`8#onrmBK*kk>;SOilR21YP>Rn8yYN)Gqh>N{>0)O`K9ep zeZ;H8dN)bC1zbM14+9Ic7ll|Wii!ldKsX(!Xrz!upq!pPf^3GM)acL4>=F8TDorV? zOz3wrr<mG$ZJny zr!?i47$rxC9s88IlP?@5noEp$ws-KRySu;jCaqhAagpv&9&LJg$+Wt&PDvi?A*qfF z-dpCRT<#-16_(P>s@h5$Es4DXF#3I~qA_9?q{MjaubNNSIqVxr@d~;SOT9VeHgYy; z^FY=rQkN#lD!EH?f1~1`_4>C4y99>j&dHChO1hM9@Tt;1jXpFcN_iQQByTAj|AGO)GfEE{}F6-2%E<+qSM=Ey6{(dlh8s2t=Yn-^jOuA zw*%Oh9vqgga-uHqSDVv~l`gJkHXK>DDa%PagYl@yaNoQH?w4ITQNnC_j9%zi_GTbD zX3M7W1PRV3lg1?YriKLVW~(E>h#CEBQkt5R3QEg=>7(P5e{o|P`9!Kq^xmY`e2Uk8yF%PYfM$b0`Rc6}88koOscdxU*Lw-q{&cjIyqDi|s8??Gdon6n{fEs2m z9U53W3({kS4ghkUU0?|Gt^fTB%a=PAWDZO6-|Y>r0X^a@cV2&5n-D8_pdTZ$NiOnj z$Rtl58BJ~Y?!(ZLjBkPnuq(c0hOLcIacDkyjo-*D+)K?u+GV8jM!?&FVqw^>kU{7o z+ci=aP*Cdi-R#i~r$ruS7$6OUBhVH7G-C6J$$&JFtR}4M)kX4N8b!qE29GDr?o_2=JVMUUcj~?%?}j-Q3Q7hn#4s>xRfxc z(8dUi{^-vJi&W;rb8pL6FngfH2i7;;x>$y*;eVXjy1Xe8RrE^rt$uak-iQZ+MisY2 zY_gciZtW=p3VPO(J*jlF@ddM@mh#asJ;C(sQjAU}%u0;}0w*y1t6$7k>W)q8TvF)> ziQFl0D9X>n{mUDZJR)g|gvo=xkRQPn*h0$_U3AecU1rf)fKivb2Lnx4PQt+&C?pl1Lwa-PN>n!G!6q^Ch|)>|z`=i^mZrS4Re zdXWmpatk1WRQu$6!#{*YD|Uf@i_~D$LRE6wCWRLc@=_4$uLTfLZihroneKX)r0K*$L^<>-o6SV-0?*h}>-(4hn6;C@uwuHK7Yqf}Zh z3DU->gzMh8--UBQcf?Jo^7n|v;8&mBIM&KO{$5J~rxyzdYVEcUjU@OzWVKE$fLmuE z%4J6xue`R9EZqW-d)IHj*|DTQP`o8MH@38dW`=i*H=7~ zyv9ORyhrx%(Rzi_TMB}h+=rp{!14mw?&lB(L?r6=eA}z%%|>xm7&gptsCM2H!7Ofi zarog9dF$6??USEKyCnWj=a_?JK+uDj|5!Q70Mo{2wtHq-n`YSX|8SHJEw7e^z%!QK zU>FX62qaIx^-($6*a`HR!|yqHpGG7kWRUL=w53j7c8+q?^j>14GV&C2 zkyA+;QjB`o`!Ghz-`(%NKRVp*?3^BTJa!@-->dj~p%Tj0?gvXD*LBZuVp*Q#_5M}* zs?bl^8!V2Ieda_Bn|6&OQ)7wGp=vQ+dX8!BM|LZlmmYlD~B7yt0&4mUmDFq4%?7uS`8`*Tm1zpO&a3eJE> zMULtc-482Tz&7Qrfv77q^Zz2-M4l%}?rxLlPD;96(cPEt;wp>;f+g&X+L>${5vCkx z7aW@8>r)r=u;B8%cU~LdgmO=TSLrebCl{|*WVena;00eMEKwID^LKBMM2Du9GZ5?7ET{!yKp3|o;qbP%}WMT{tIle_biey}%t zSc;c8g(t&xRGeJF85UenT4Eog%5rtbtw z4Zba*o~2UBu^pejCcmqfUL(pIksD|;%QM?d{12C$ORrV~qAog~!DQ4_qd=xC)Mz5a5S80jEnlGb;?PScT?nIcG^JK(iRCZ|FQUF`a2 z#WU|VvruC9f(K4V5RyKg(1+!{@@92)H9MS=M13t@-e$n}4Erfj13oMUrbeBbdJe62 z0euxxG@!PR&>3CYxW&3_$ksW@r#EZw8z*j3h4-A45;C>8y&x_a1i|f z+1Oke>fH~lYUT|pW3XOl$}JXt1*<#&w005BVEKW3rwt__=NHU<@%{TFF(35+NNb+o z&*r?e5F7%>$%r8OkZitV;mpS&=%FzRuTkS{&CKlT#cJ01PilVId>T3la1#zv+3%=y z+9OFZFw5TTfovR<)cb`}yS@s(DKgA@J`g;zc1GTlGM~;#Ja&Dcl3_05WC!b#cq?ul zR)Fk8onIz!EKSf2%uY3gZkQ_rWEo*6+=34+if`+&Rt_PSijp`9&p#W`*$*Zgts+K} zoa|3mpRYb?XZJgvOYeK=zPxXKg@$&zX4A|nW&$-5_-fzt4RAz z+CK*E|CGIIx$|iaa_Fqv9~<_^6Z_*SCB-piv&ZJ=3n%%*o9sFKcxHctAM4oa3;6Ms zRQ?hwuRn8@zl4I%rOdjmw+`K}!)Vr@aOL&qPoO~fFW*R2Qb8^_$Q2J1KQev7M{w4J;e!o z>Lv_F_hds_c=A-b+W1OZaFubwp1BFzz#*gL;NArR!KgS7s;U)~5eQwJfYQ%kh%aCa&&-eYHT> zFTRwqKj&{=U*EvWZo+UmpRdc0FY!+t4RreaiLSf>6SltLCJZ~pZ-yW1NHg$}>qs;B z;a{yuWtgz_CvL*9*%wcE#Op{>I0aupt1oag((@CXu%~XqUTjEz*uqy|@(is%k+HAi zj)BTgal)Rt34=vkU&Degpx{%UE3OQqS>vTze})tG%uN{1&{yzjUz!fqasIx9dSAge zfB6KOk)?W$6ZYIq*q89;OKAH`n6^V-@3pZgf8|%n{zWhqQ8K!rA z4JR5#gS-JMzrYFm(oNV`Fk#5&zIq~G4->tP903Nh{!DuQ5-02{H(_5rm)V97Uq?Rh z6;9X_{_u7D6sY_aPS{s=!tjHz^72qG2^|i0~!`GjFC6!^qHXPGmXLxHVjg^7vuLGIkWUN19Hnf3Ef5S2T^>v{zoO1l; zbzu7IU*b$Y6LNvd$n-ZH(_deIE8JWPe>l$?H%kKen+Cm6LyIT zjm01}kw`~g5uOmdN|K62J+ndPbkj5fCJJU(09Q(7ZL?DeO~;o%uK$!hdX$Yk;l{@! zM1j)xh_Z6e+r#4%^EEr2?%u&kHfqyF@)0+#!X3wxwN3Z?dgx&cZc&5cqHq|jqwMQY zN{es#{0*a@oPN{c3eg*@Z#N^*@N@K4@G&E^{z`Nk{nVD>Z`!Ks>8f?r#50G#=0UdZ zj~_qRGz+hmm)Enezm8~Q1(=8$Ma>6bYt09qDxP#Ds_FEbZ$N%c_QN=L zwyCxPcfmFIv96r+7h{txq8dvN%6Z$7iuE_<8|Uy6@;7GFOLH$VKTsJQ-5ytgOPD33 zO--AHN>VS##ldDn^j~dpm}`=N~CP-^)YJT zy?Md!L5scl>LIlUY! z+47ayGi%vjv&UE2%j`<9>sVc;cBi2o3Sqf`_E77{nx8H_!mqU(ad~-n|8VQX0=Nz2R}A1@T1NicZyCSHyP$T!%4V$JWE=1f2K{(FwKQMgzNNSX zr7^x3u@kmuM@j__)774pSrKApfM2)n+ZzobL+4-fE+1ZsA&J{*YxrmL<}oP!KqtPg z=~G5)J`lfJIhfEqns*Z30TaBE3N%S8^C|-PkS_$vzrG$gb43M;@=tOG&t?=WS5HBVk(4SJk8BaulS0` z{28@6;!5>!#k@J%tDZX#+BC6CC9eP-W?pUqdPGCxvu+&(1~XBcJ|B6!p4xJ^bfQkv9S(Gt(Pm3Q9rts+}~^aw&DwnGiMJ(eN4L&-j|XrXhE zrAZ?diXdG{5m;}JvdKnFuTR|;6F~v&oAP@he{icqf;#2Drlk{B&PNU(-7`R8_-&2x zX(#|h3B%LS!Ry2_>CnQ{Mx*Nuqf_rO!hc@mGnZwN~^^jSyKq z5qj^V<=)MTV96C#oo#rXX=j##u+*(1%lb?HWdlv~Q%8Cpkd^=aYQDrzVppN`@s6c- zpOXIrk95tm^cxwF3VrDnT2HtwtUvdPY~0ej;A1ci^|O#9(e(-v6%g8nGdJ{Rjv@rA z;4vFbZIhX;o7gp7VxxNMxx|w@&U~-{HPfrsMU(uJg6TI4@MHx;%4mS-*8rAtcI$w| z7?T_#33_Ma56*`w_)g;9xSPk*F8xK<1vuP(gt9;Vh$Q#ZDxXz}`FRb2-dp?P33kdc zmSE4r8yF;_fQvp*g6Hv6$hWM8j^6>9!hBF)uvmKF*b&?;;qUUt*Qa~?FlAl1J@5Xs ziG_tGmZXvOTQuUgAuYf*q2Hd|qOJX?F-JXBZw1jsSCu??};xu`1iCX2yr;PY<-nz)=%Ws40IFuxh=0G1f&MDm!OFpS)A_&fs(as1-+g^g zu7~zpV8nnxa!37+F6zmlVtCl${fRd~cm2nWdWCyU-?MxTMgvm_khY^OJjbhY-C$8p zl(|I6jbK;g^;(I*0V^`6c}oMb?UeJ&s@zJD_VKzm9hB)DO8D`F6J-ZF0kweM0I*ik znCQAVj&e0dsEsyM)}?cMOQ_?Pt(mT2rAO?*hZa)^Fv_wm^(~T0SlA+XsX;eMf~Z1S zf{q&MIGnzs?WrkXi8D*Ztm)CZi^vzZ?&4!Tb9J7Yg*STNpSMAeA|2P)}qRe7i3?N6O=YHNSg%+sdL;A%hh+@~v&bLcZSAss%a!-IHA zVhx5K-uE=UNH(OQmQ7E!9D;dpiGlXPU^1U@_D>rXQ0lONCi{X?_BP*kUW#9x{xcn{ zW`5aZfAbT`TZ|?ybwAE-dPy%_P^)=}r+$!%;2ttUkFJ|X* zFs?+IYMq@fZ|OPcuRQ#e*$rc*-Hhz5Z{AZ`|Ka8bMN`wu#AwoW?n z1T1d);P9lTT|d<3mQCxqpxB+vp1PI!kX&`|o4LNb$u?-~Q zdFh#@B?(QBw62`RZkYeV8DKDZ@F=sUPjs&Wce0{%;nCWY;+mtZrij!#8{@?U(~h+{ zoeehWDw`!az_D@rK^myU_HlLuo&>)M{}#+ej>5M!^Ys4kJ7+RVm`-m+G~0&<+gmY7 zs$0sfn%g?q2`C_hgO*l^+pRbF-ovA0lZQvmTSRi|{O7mmUvmJzV5s%=c>1&X&D6Yr zFf8;lnL+e)A04WuxnvqPCz1-c@0CJNWm^&;0o6!Y9(6*$^YMCxv3?kFSINve|M@cg zxO;e9@#foLW_SeF-^M#+)^9)c2c4Jc$5lf*h{wb;@!7`o=HzAiu^p4``pwB_?m9gk zZ#s#tKl4}br@wkX@zwjE`K$NSU%j9B>iy6B)u+e8=|Vnpe7yJOK&LW9bQ6~Yi&aS| zBO9^OIO{ahicK>t)sFHZjn6E93^f{i~uTAs> z?)AuoNDgP;eL<0U^a!Asiaw?zldFOYYiD;>dnszJ?x}N7aNyKx-BP-s^#!oak#I|& zj1JOYd{za|ZCqs7$1^d4Pf`5b)>TH$%}P3(OO3v2Q8}w^3OpFJj~PajcLf+?(Jdd9 z&owuFSExqo=Qe^HQjJHaC=ql%^UA4~+k1HN_ccS!0{Bt0xgqY2aSRqglR-9P-!88_FRpPX0d?cSTWu2krkKC|oWc`SiG zcmiLka=EQQ`k_#yuffooO%wJM1rZEZl^_)!s)KNL8HaQ^K)ZIJBfci)k!WHxtX7Om zmMNdMdzqf4y`M4fI7)K8k^AzK$C7SBskVDD{rlzUy4S=mvkHa68ucEIz8ZVL!IFwBU#&m(qr2FSq;1y&k? zTb8*H4~DZ;FYUKmM|%)g7A&nd$%s8Aq!{?-Db(4@v%yT@av-rJGAeP_p`_12iW7%4 zU}HFB>H>^)_14w(q5D^82vN(MNw>RS!*x>G41g&=(ulJEx>IHK$&0@IqmQ(;EznBW zW3el&@|Gd!T1=r4$P{H5j>Y+6%K6z0N-zKrD1BCS-t%io)zPz2n{XKo-Kf%Hx=1GL zPBd9}o>Uv|=|(8A(2Kqco-X?vwZ2yMV$C}HhBU9SA(D_8L@nWCnw4EgH}1Q1`_=hrL%O~6cNhJM9y7h_+F|oS8H{06`40uAg?|e zxy6gE&#|k0^(r9CwUZtMzrpHhHlRF-(zU_{eC%^{HLM|92Y&6}3znj1YRUkdb2HI5Bb9h>urqC$|qyi!`~p!YBtk*6cA!t+%#*i6F;W6v{A9ufAs>$_a(nzue`4v14%nuk z3(m-kt5|b*5MhWFI!%aBrUEuUqH^s4iX?93fjCW{q>>Zo4m;s=+Zy@kxzq7{1~@HP zKs+;gBkN1ivMb9dvnPTUoT2+eabB1@BAy%RA!aHmSpiE(A6+IL%Xx;S!u6bnY{=(A z=K5HMP!5tl9}tlU8`1=cj_43|*on#DoO>W!MVT5rEN6$FYg_SB>bNE&$pZ_S z1-a^R>J1-OIB+KvjT8R6z$*{`C6$yAZiCWO4_m|@uINQ37j(=oqPH*{-u>ZxfZ4MM z^xn%AYiA7>DYKsM#mG$37O4^O!hL`qcB>VOFg-OhR0t&!J@YqN;_D zt97ztinK0v4GDdrw$`U~>ov#n5vKe#6INbEn~fQ&0{wlr_5S_d!5e03R+hr~#)IX& z*9WwZ$po)JtZxY(Kg#$wVrKjY-ik|=S<*h|;0pJS$AymTz`d{XtFgJ7T|$!Cvl|&C zoS8F>NR$V~400>3grh%agp)gs-Y;Z6!4>4>VKpUy@u^b$q1hu&jjJC)QI={ju@Pkg z^yY38)0J_KKyKQXNBN=61YjY(GkI{`rC(MRn^tS0b41Irw4A6KC6pEiFDT*JM_k5f z-Awwm5-%x#=TJ|9kjZ9d<|)H>G->f1;LHBdpMhYg@H)ty?gqm?*h(*9LF)VC$&D2U zc=fjTAt+%mP#ML*Hawfo`?ERXL_=djrho+m9-u~Sl;8#E6=}PgUVXcXM>{PQDeqUZ zWfl>;Ro!?EXE3?H#-w^Je;~c8zXNx7>=|cLl@WO$v9e)7>)T75eR7jpy9!p~jnZ;M z?G2Qmn523Lr_3ChLSZBl@b&)T_TNmg_gmY4>+GQHN>0nBNm&NaJCuDL%>}oXovo8C z&h{qR8VPHezs`+*tp6tM-DZyZ`#L77iC^fQ z+d4ApHWYfyS!qDP0+rKzVlE@u8TeKbnVRJvpPvJCj%mp!W2Rx81C)a+0JT20fB=aYy^Q*Pj8l5%LU6{HhJt-==&ZGe(>~7PYn1U~lwhsO#!7SP6FMkPPA+NY)b6@=#lzjA4|a58o`6nQ_XTy#c2q-98DNIE zHZl(LjdZUMnmcXU+&tA>WOiE6dh!Ds!~jR3xi+q|*--1t$1|l>AXR}__2XKwYOWyb zQWj`{N|K4tyxnAg@<8cFjwxohgSTtXUySvAo z6N~C+8IDCG1((K@0BBfV86^CJvtJHn^3s6x%ar}XoXN+XRZ80c7g596uONritRN+q z)0qLAkMHUj_}fC?&Eb$z;6i=`ad`+XPRS#tnJAfM@fq(Wv{8k~#l(-Wt-5kKo(}se ziF9gHuj>Kuy+b`FfaB?SJc}N3VfaIoMiz{~yvw*zz*QyfVHpzDzUR?Q;?5#XZ0H!bPn_;a~UQ04TR5g^U;X6cIs)q!^nd}ev_`*^* z>>#BSeF}SJ?YXv`LYnnh&J4@h;FtYK7Ln z-#+Mk7qT+NYRJre72j1+5yS5QVZi2)FP(P7jh(l%ot$@fjyCQ)t|`%A#pkK{O?pc*r~AtmCM*WGlwE>KO@Z zv>I~cs7#g4pwDye8uWVzz-d(`&w>#$(E?<+?fpmhAyr?0JRRs_$R(Dn%^=69IOps4 zosE5v;9o42+mA=5IaF|tZM<+9`p@0-2W@pCysRYbroy4qD;&6tYa3v=0+G=+s;{hd zmH=~&w(8WFiI;CbZ;4dL%a2ytmVX4YhG8U5Ji$-ECY-ls4S^wodz!V}e&p4wBg^2%*%prp zvq}R9k+~{HOen<&MH@V|dS-jgDn7cr>?O8YoyVKClA=IlJ{_)aptU;Mdw+76tdkCn zj}E&x`K;N}h*rovyjJ2( zzLp(|SpVETIE=xkfb+vd!*Ww-FE6WBOSV~ASt{kE7yq|VQ|Jb#){R(5J5%55c`kvc zg!qCg&v#ZpD~0#xnJ1p5UBjH)nZM3RA z2LsC5$eIUaeqc2{%gt8HIY~L)tqYgqQN#uf8Ukj9Y5rJVF>r{=kPdEsb}((|8d|Nf zUc5i*zh4+qt)^sff@Z424JVd2;6j<+H8gO}3RVVK!@gqDEB~c_TcE?|4m3E9{|8XfhezB&dHj<_nD#$;D5-(qUsMjO)~} zB`zv4j-E=OF)GC8I%IbT>~3Q~m#X|KC|I;XISQ0hh($|H*8xSMRV@)&d-HzrGePMu zm~g^JfI@|ZzQfoZuss{X+pe&@)HDm#n;VR+_S<&(C}V>R68>h^H~#~Byryp*VcVRf z`hk#%!Ml&YDQ4tur_ph4)u=Q8_nY2y#;`eeZzY!qhff+w?)gK02D)$}?@?#>_H=;) zN@KD>%a^I~2)gwQbdEC2o6Rr>J*z4hZ3!PcsD4K{2tHswgB0*DTT7v_4r|U=do01T zg>K0P*xYVuTx&=nkg0C-)7mjK@)=qo!O1rC@wQCbwM1eUG~=VR*og)Rs>6fM!O6?Y zBFCq%!B}(f=H(s7QI@NA2i~;--h2v**$Xe?Tf7B@2w*5MppgTKeDO!^76=i?-D0}$ z+NP}AA?*?;61205T@!hlDNkTuvVg-xOBeLih+FH?lMS1Pu??xkah0H8ki^33Sm^5F zF6LoohNz(1rO?}=X2}Iu8n?nXS0%M^D`P1L#u+NA>q9ZvTjIPoWNAxg%4EnGhADgx%cH_6-lErig=Di@g7IFVg^9`%n$W6E`N0Tdh+O#e^(Zxz7qKutg z06Bgc1(Ed1s{Wx2QV)I9f*ds@5tw}d()Z-QDRQEq7K9WyP>Wb7sPv)uV=p5YMKr0l zc#x030q+i5aZSfk@F6!ahY{?d`fG#buIJBYDfk0MPZ=92YzRV~_2apBi?*fhX^ z&aMncF3f4*%C()FgA1QkwS13-Y62uDgqMjor~GC~wmm@_Avz|8MPRB!1Rx=A4~z(+ zUk79KO&%6k5GH?)qeJH@Fywp<*~)r-uqdDvew^)o_3UAptv^{^f4chY2{uH3teb!6 z@cG@g$e_XAp#7jX1JB7zQT!niDFi6y7>3A^j=Sn9_lR@+J1w{B}R%RUk2n7EysqchjiUA)A6=BwcfH}yV2qj)jQ0n? z@f(iEKMR1i)tHp5Lh*I(C3P--edx>w*2mZ<=!iHdY01lZ|I*jTFhq=d!2W+~y7MB9P!-=HneaD(RV8%3%f9^3+TUeGhB>SQriS69&& zjwsQs2UuWHP0@yl=CFYA$j-jV%DaFd;V#Izx*v~6zDt^EV!*gbSK|*15K0q>MyBz2 zl1+Q)u3;7%LTb=qV?HavDZYS{)C^%-T!0P9A%Wc0@Zyh6Ts6?!EA30C>?xIon*bFd z3ueGK!I(qDH{;uTQI$BB5-we2u%#f@VYsz5*EO9Qpcr|Fh`7vo`V)JXh%_di2H|D! zTrM2pa}Y?vXG)P+aeKpJhwop0!Zu4{(0^h>8`TOA9I;>`ywuW6Bf&HC|BZykTk1;# z0dUbBE62^El~Dl*t#=!fnDF|NdI)wS*eZ4ERU&y2`d31I^lkUO+qB*uPfUR}Ak@rL z%ABec{neKt`Y^kB-8XJ7=o45s=ZCNA`(rI(vKb}Vh9^g-+b5?-orc?tEQiV6p$voz zwg}i6wzu~8Z=Y>Zgb5KG#f`yvdMl{{#mYJOYASi~cqVQUG@Ux;!Vir|Pr@yH5E|q> zsdpH@lQq6FCCAEU>n;w$k?zq?UPH=>z@Vq+uc=o^@Zl?ZTB=Z3P*`EF{uRLD_)1)5keSys3N zU%YsMTNsyRgr+9*PnbL|&R2tfm4Fdb>OZIMPmqJaNe%^~Jp)X2d8ZYVorbit;*5U6{Dety(2am>G;`M+SS0} z!W6HPmq<>IqPPyG;;H%*b=)_fxEoQ z9wcT_SiP(ZpXBh^l(3D*UnTB}f>#oJl@UFJuOZl{<=8%tOBbB#f-TNl09%I7wW0j2 zKS-Lq>P>%!RYDZ0F1n`zy9TJ*x+1zMDr*C&rZb;~4@kKHN1Fa< z$qa@paPWdr$7`yRYXBZJm~`4?4qBM(7pBEeEA5}Nw9*wvt!-Hk4tE+7RT<5G9f0aP zj92u+J@r284||kL7|MJwf+VJ&xyq*(raOsR0T*kleNuJUM+mp(d^&|m2ZM~^Oxo2W zbVpNMjXlwpNQg)Cp_AUW5S_^fzCO6vgK=Q!NDc6HcnT=u$2LCzrqbII(7a9Ka(rcugF%Lo`eH<)~8c!O$#`HXJ+nY9j(HE?9k8sK$`shRqw zN#ycy;+#VSE~hHv7AA&u;i{a^r(k>tWiZ;~p7cdvk+dWYfQ48#L&+B$Y|K&d4W1Z} z9|vc*+}F*#`H`J42>2>6VUH(fO%%+~ok4KWb<4F3>rOt#mF+gdu%T?cGCv;1b62Ix zxjkTy8|rNQ$_=>WR7cd*h16LsF5m+B+tQzfiNoc1 zj4XSNagZ}fMd`|kkVF`XtV-A$(b06>yWya6#xih6ASDE1iMfsWl0-sAY1@$RJ*9z* zu5fz?iD;=>@tKph!F;WXhW-vUgN%K*slDnDh$UUqXg<+WsT14ccN?*S!~@>8jxp78 zdBZ(erM;@(hd_6R;vg{=<453V1_Ky`XYBG;uWhn8iB2|4W>-^F){2R z`VIv#HF0J-(kG*Jkva++0y-Xy zR0(zdynndeCa8h48}D>Exty2TpN~4bTn|iL_Xp$0qcQTM`^a3NI%g$9>`d@h>5ahU zn`$wZgok!An~wU1PcIWX*nJrB{dV?LCmF1>w=upu*+u%Rg3De`n@v5WJK2ecNY zi#iB{+_kbMJuWkcwI5hH9!tGQ6hZReG}VEE;?FRj!NoHqU`MqKA2a=Uj@(05r{_@Wy(cREa3d_rpj&s zP1(QAH>VO_aC###L-J^e1!*fO)GaHGpJ1uP$(KJcr6Xmq!3XGTur%Lj&AL2{XiLc%}1@ zX0o>7V>g@O8^T!j9uc^>_b8bSQbl9HWd>%}9H_ul%y8cw?sWH#54+pl*Lw#$<|AWY zdx|B&O6cB7VI`*0HdpBy2CBnK%=pEH3Ea?`eJw5IU$$Nt!DOSlfP&6#2$v);HUFFD z;N=+L&OlaE$QWrjM8*h$vK)|$XelG*5n&f@!&j^>shpDMHUKkl$Z}DbZXgcY3?(5( z^BLpWD#)UU*f4V1MCr$LvV5+5#K2Gs#$|jMgDag^petdea~ne=F^pTskca;CU1z6z z{C4YoXH)lkuA=FZ*oUU9lt+dV>vw}y^H!N|h${EDx6G6v1a49igCQ^&E*j5fs(MV< z4SOkpj6Fk4;6w91dI%UUF31$4{i!8Ll=yH843%7Id*&6QyO=?YL6->%;Hmh@!wEO( z%`R7|vQQX6_4K9~$99dN-*dEjP$buYumv!80b4a`voR3@CC}a;Wlx^1 zKU*WHd&3KgVW|L~in0_>)1`Di?Fop5KH7&~ggd|*F4>T!wG`m=VkWSAdZ74#+BGgW zt3)=itCD@S8P_=fYOPySOI{~xa;n!%~3}VLHnyVJEu}KDZsUzSt;dsxZ@iyE7UAF+tW2q-N6S@u` zc-?iXC*fRAf+LE?Q*nNWsW^|Of^=aKVTLhKz8=8mIllh&aA$A#2Uc+gdGp#bLDpk% zDGShzq8fcyW973jE^|5_ZtrcKbaoPHw@Z}E*L_NdXkejqKYg0L?}^@n^kXVS>BI*F zl#MquqR8L|?!b@u+WiP@GS@jM$IQ`&p~MiJVD3pCHDQK!2@9d|d0W*{HGN0jE|e0t z--T53cBChD9OkSY41`Qk1%j-Yo?qD$96=WaN#}BZ*rOwZ(Sy1{zbTH>0~0qDBeJ zWq%H6^jC9KV&>rc2g5%b&n^kNhlUQfI3Oa6QO_0y+QFsKqmRaTU>mwGO5uE*!Y z9w@3Z_1~}FUw%&%ZUr0VF#c%`8|WdH>mfCl7&<8xKwte%1wZi7buWfoSz7Y1I|&-G zX&{2E4?40*o5D&j>~#}a9+MIMq2%1QYn^}jYo>GdW-k*vG}rneS!~uDMXkW&mtI~; zt8+EQS;wex9CIbq{Av-AfMkk`(RiA7!5wEj>J3BiBaoxUSGj|9V+350G7$;aY>M&l zLvF*F`{OC7TODoZ#t|E=5b3(+{W1$_RexQD1U2ID}dL-T~yUk{IzJ)>d{Fc zf-z^n?ww&WntFLeVwik+gr17uLv)IT!?mA(RiK#?RN&pTwRLHU+YU{wWHtgYseV}v z?Yid9m&ApKP87_B5b}7d7TD6M!L1DlXl0OFrGRz63prK6*r)GnJaXfBBAh-R{4$uXXcXHx^?khttA@-TmdN4N3|)^ zTJB0CV{tm(y2KAlFkeenNuFohU@@1iK~5NiF2I)!;sZKkK+C#Z^(dy0?o#Xt5;_?y zEu|!QZ>32W%Yi(Jh@Q-{I9m2 zKL>OeErs_lc7FoS(^N)*b0}2j&PVH zt57w6{J8cL4CLXTAHq0*aiqO1(DR{94hiU)aManwn;W=(A-p^dYj!yu&o3@r2SWE1 zz8QAdzPZEZcnZHF%`&X~-V*7mie)gd+j0q_1(Rbwb5y%%ZG2j(bA7RwP=9&SJyo9t zYA5lh#%P@3E?7=j$yk_7vdVigt6a(gvl{Lv;U4iG0`ZE@AmNr40|_jVf1elAoB(^w z0hJB&5BU%g{+5=k7Y*`F;LE6ll4e9c6W0gw5C#L3G~zel7_Wbd`u6C}ip}3_L1l}6 ztPsMYyBK31I`0skk&-ct(6HzL2-?bM8{Zyv>J&-4tT7_3;95?`@1`vv3nn7Ad-Q5phT^^h7sbFnF&lV0vn zy0x8|QIdAWGs!Jr#db$j39^Aw%kmV_s?eZ)=B3$|8TU(Qd{#O=eGaN;&Pz<;oEAyY z(WNJPsyRJGH8P0|Hm{+}@&r02KK;Yj{Iy)x@n;(}C~k}11TMHp+6hdnkd#NDKiPhR zRsgPFk;S9P7r>+Xz-NuBEWqZDaNdzT(BIu5P*(L3Y4@UFhswc49uKU4OOQ{6ew_)c z2AlYS11I(`-1$lbZCqpZI^cz=?QFK7tDK{`9W)C|MPOZn3g|5F`C2XuD8ELcub~;CU-*$FdOWqE# z-eT@l@4~m*V#|45iU`64A}_9$z?;N6S=;mow>r*6QA!SCS+3G72o|Ni0{WW-587p` zSzURlAJbJ)p80*O*}WpLbWug?@bt2ED^bO!DNwB^b1*m(>bljyRdB1-rl3$ebl(Lf zDY78V`!b7`Pqr;1C-&fFItTC1>#?$qK&DmZA8=6i+*HWr=&`x@_VWpaW4<<1vD{x_ zAs^$kv1PVj`jIbze$D4r_Y||wY__{l1t^2@oXgp=P?#;*MTOY1d)-d*M#mMLPkY=7 zziVf)F#1sf1S+!?I_{@j^%unC*!5cCSL8LmyivzzSM>bm*AXRIdRO;yeeDfXsxbwu}+DTJjU8aP}2R{NVm zmLlH3&Nj^)zd!11F>5qS3ZTUp*yrqtf29i+$znQkZ7jUbSwH7(n-vs1dSQaV zUTZuM%cn`*%1~7ZnH6P5S8Q7rtBs537^tY(t;la7NbW^ldlmEtw4KjkfH1aH1;W`Y z(~%6C9AiYy)csbO8SMqI(ca_I(YC7;zAeK{V`jL~`vA9A>SLD_ju~rbN_SM_!6IO| z)HR2v_eR!`hh`q=Z&kK8PpqUU;t)5D9ANHG z%oN@CU9;a$#~;um%zcBxi?=Z@R)CITG+d`?GBEE}((Zj~s0u(CND71WXv}63Z^Od5 zw}fL^=-^CBXz&@h=$>!%flmjtcKGi7e&>6MnF`2g43KQU_(VkCSvMIK>tY1<;V<`B zZn0hLcPcd=!&}xv$3Q!w=An9zH5v;ok$3+GX#9E)Wgn80y{RLwUZ;oPzE!vUE^6zt z7z{{ARMX&8IpK`d^<`BZ-hIv@;#?U9kFnse>k$!x9YS0X4QFVQ5M#tuv=WsMpX)p`(_= ztgb&+-uwWmJXjR4&5$1k_{zZlTd)pZZge6BJF##Vq(Tm|7eGSJ#c4X;?!ghx$ZS@E zDn=P)8Jk^#PQdhEfD~TLL{c^)!Bp@OQO``84z1DQb3 zgWIIb3q@|1(|qEv2QUSio%xpEh++GrC|XCQmjjV3ZTEm@8x z>rI?5>alHIkx z%gww}RiZXm+-)P~WP9gU7 z9_I|Q2ppnV3~ymMam+N%LAp00PrpE!$9|mz*5g(eaC&Z48o|gva}*F3D{?uD@c`Eu z_Hh7KbcuWx_|-0P`Rv6DSSkl>mX=BqR@$S^)_%*6yRxtdVpPFlc435QFmlDK9j>BP ziB(7-`(T^2{dLzX-UXV^(Fui_{D+y)wN}LPU^MiV4VnOiy7N}GB1g#_UUnS|xj4<~ zw56EvX-*N13G}{3{x<=zn72?0BFN+Q6>28`ilOxwQJ4c#BI^LqZNxbjqZN(fHW~d- zHorO8=(cU>9apo!%Qi|u*KoSaA>sB!&&?riO?30|ZDmWIZloIPFTARxw5!j7iLNYgHP0Gln{8ls<(4WUKc?b2*?*s8v7b!{pOcYAwn)@7KB zaVLENuCj$8##bV~t3LB?6qvQ64hN8QqMNN4wtPp_+g@^)nj9ADt{FNms_F=IcFUOw zeNwchFEL+qb(D;L0aJHFyyZ82bkW7cUUv~IDZznk1{izqb4d^MxvjWb69a`rp?c_p z3r!T(vdd>~h1hG62zTLp=qW;Cy2g(xCq0|(RRArbj5P^c4X6F(^Bwst{!J&mWnIIb*)W&m@y~|t$6X3L zLERdlmn=Wb95#saVM}~q)*BBw~?;o*Cp9dUB21g9r{pvmY2<9p41L!wS344^)?UU&A>TcBBA?#xeo znsC=7{xG8MfCVUuf{tPM((~d89V8~yJ4-VQdM}wQ(8V28c_^OGinC#^ zg?8vO9BvsrORDfqMHJ)pB$`L*Y!`BFF&{H^+t7<$OG!VVuY)@nkcukb!X{pr0g?q= z40)!D67x~j$yaYqs^u%3Ps=?Qklxygcj7o`U*z!sva7J1ic!|J1~5!+M(g_0#tMG% z1vUe&+2XVf`a;NPHSA3|91E@#=B@>ZysJ_Xj}04(Yg?vVxZE*+O!moCN32drrFX!uOolrth{H4h@R5d*r`6*V_EpeA4 zS;U0k_z7?j-y!+R6euQ)Oipyw(lKF-rgDb9O=#aVo5b!uKGOpS6~5`Y13;h0iHuso zzN@(bd4SR|$4v`|g0765#qGiGF~GrR8=!yM@Y#{0J=||KLfyvG#?yImy<`fIs_OnR z%cthFzqotgB3|!Qt6Aq%SrYa#=U~=nhEtB`(>@v{EGtom!bWr|)ZDsRY>`b160L6r zU8tdYcld4RCsr9fkpr8U7rOwFk^r>S;@p=_0$$_pF;6~Q_oeL~r12=XTXcQQLQ$n1 z+&C&#LC}#*A9fULG|h{)Wg4PjtGqVbku2MtWd3uPmX(z>+MvBr)L!*$DZK7IxkcHh z@|920mtNh!lO8DJnLfT9s#(cl8{S3sHVT>z9N32Xlz)_x$Gb7}UD##UhWoGimjY$P zW4o0R$TR^rVf=htN`YBGu22EWG{+I&Rah|rjVX`6c_|7DY~4YV_{bS9?Uz@qg#wla zT?yQ35}B`*10a7xBL7w9C%~daNH+71sZE&eN53;87?wI0&s6K52H3EMo`e?kCKTU^I;r(N!Ca%LhMH2@`mrs53*tiUCbl_mLc^i!p; z@p%I5Wg+xI5KoQCEhaZ2vP2%6HWFEKYvm&kSjL-K7ntQC^m*{MF@Rq~$O5lh8cD`R zDu|xqs6hOC=kVRu-hpU}^%ch{fg{nb+76`L6x6c#0}5l+Bn3qoIF$GZfuvN?2tU&V z{^tUd@i4$BXjsi9x$pxlJcX|-PczQv@40qL;`xbk&$ey8+n~aoKG0hvJgc^d7DKioIc=|?#R6}8zi-m$5nl(jvfm>CYm}N=t-_ygZ%wJccymSD$pxzzIRE8;`dh^0q`o>0G_LHklOhzq05oqc!8dI; z^(Dr&sXUokd02Z*tjc@Kr$xK&0@=>AqYvzaB!N>XFrFC@j6a?>r}QYNiI~nDqCGr` z!Pqxj>5M1>Nsa$1RQw=Q3QFror`sooN5NT|P7P9@4up9GWd=3bmdQW0l1*5g;FIKiB1Ow7m$;J|k{%*wsd zcWJl2=7o!m(HY*b^!t+|xP3>@4I449Xtyq#Nh>KH4G$!U+W>=NQI5NP#1BHPl?Qib zLpbCjKWC6AJ8iw-Xed_*gt#1|tw>V4kwDzC$=n`7jfWgBhP_bU?Pb_&*`t+^ZR(8@ zWZv`;&m0b)6e`Ltexdh}zcS{oauCThyo%~rkx=Cz1(A)Iz?vsAo}eL`TH=-|cehGa z5&-3@2{=XPYrv`mDMbsFsZ65j45C4K#?X%Qh6b6NkeK6`4}!15HO1qh2j4Rq3=3yK zv6x=61(uW_6p4eFY{Yr>+t70Dysj!Krt581cIK-{IPZm9acjQ)f$FF7ccnaU7=~`f z%#~zpgl%xt_cBK8smMv_a9pSeahr7;22B~}S1I$3>&ISXUaE4T-U2$Ofkpzeg#}^r zZu0@-aR&i+ZoKKiT0ecHChexKxHwsL8 zQfA9eb}dWEeHo9zE5z)NB^^R;^a?Pac3G@M7Pi{r<6}EeH2&1oC#J`vOj33V+k6gHJ3Wi>CwN=5x(G8`FImY|SI>d!#Af)Y8$bIqY zvULjx>Wt6NLDr9I@pD%X@4I}p9c5qpMQtjeZ@QI$q{gDj&atVntfoyr*vv8QA`2_j*&rGuX59aXW~s1 znU)S*!H2-}L79XndYjK3ZYA+oTAeV0;@F%*6R#Bv2Q)>>s3pX9DzSnL@j(C=6tpQ4 zyd2s=o0A*Mw9ymOvS{bSUR`ji3nFLESCQeUv+Jri{n=i^x+sDJf0hLuN|j-Km7!GO z?}O>|Pb12R7DcYm!RAVJp@5q__^bX}3DaRumi{9B>@a~`-LKNOwJMA}PNg4a2H*rx zB75*sVI}GX?sztkwch97e7OoQ&^L5h$MkJJ0W|{TktA9@YNTrk1Y?HA=aupgFyiU@oBD)c3GY zok5{Pmk5riiteA{J76a|)?K{jDZ|#Z)CH`cjp^!ulRqO@3LG zTY>qK#_ljupho-m8?eJv1Rh=pTp9q!t5g78K%&1=fjM|!*_;AQcM`zBjjKpb=PKI| z0j6}Zp!2#U1fE~#?elFvaN2f zF5p`%_8Zx&(72Dyv7U9n2#;DB7)p1vNJ_SgF?1HKqskUsQBo&SC-5B#FrD;9n+srZ z=H7iD4diC5;9EhmCMISx?L^TV%8@)hCmQxU)$_2nX9c5^TD=ew*Y~;)g0&sSdpJn- z9zL?2&}FQwESkb$gDI^0j#Q@}+D{5}-38B7f7s&D^7k*I+0fA5;$Bth6)*Eloe(V!2ZUN)>3gx@_2X~o04@>2y0R$Q+i4gLi>Wd5 zqP$9<2^ygZGR9?YMA{OKb~sA)rUATwqFtIhcrB2d$qZ2*vXke?;uaj(6=28W>BB}6 z{VICAz|URgBXoYy_)--h-r>DYSgJR?bYzO$5oO1xZ;)O-|My$PmmAatSOLmESQH^Onz93Z{`Q)lX`Ky0zY@z(0bJGkj-v_2yNSox8QDrJ& zg1AtUjyhQ1Pg~p2=Ev%Qq=ILGeyG}#*-E=BC{WU*v&yD*$91aX zI)F=W%4NPADKfPlvr1!0{v_fxRjdtZ#^&VYzt&;6!IG8u-+24;e@(%8z-7z5AIvf&forLlshlgev2 zeBe;%2az(r3oWxN;V5(!?D-maBhI146~SajaHplj;gakObBa%AE-n;&H^pnv_fPa7 zl|q-CI!{i*M1sa{y%CVgKTx1zWjy4!o$Y1Mw{$pbU-Vb9M<1*oLE4j4^6iDLqE!OF zJ7sYQ^^tJ0<(!e=9!){8RT2SsF8Qgsnn7SUz*Q8UABb|jPX`>tJD#HtDkwT)XAW_^ z5iut-e@E`r4VckCmm5)jM3udLN#(W$H=QA64j{c(Z$<#dh`pX@&eS#=%c`o|0O@vi zBPH960)m@P?oGH+XXr4PLqZ}-P#}916ANHSSB75m*LbmloeFu9`r}Dn#ZKWelh$iz z7V9S9wjX*!eL?U%3Hw4E5BL-h(gMVa(JVFqsAqD&@=^^`mW*QNLWUgE2vd_Nf9>wp z`}ZBV6YQU4%OBd&X#ojQhKl9JSp2FV-cBE^Egm;<=3v1^+ZI8Br^53gXF7(bHVX`~ z-pQ<_8;j&+SH%XP(g=-n)GA=1=DeZ%)ka@#$+buX_h?XlVkzL-TcA7}jSa zkpR|c*>j(@7dvl1OKjDu3e&1CM9sTFgu-fV_-s0#10s_m5Db1`cXxm5O+{ITDrG-E zje_j26Gcs!0&U-cn8Cb5uNfwh&S*Ae`z_`FP{DFcJwzyypRII>3;sUunQc3}!H9s0 z5CV1?7eX|n0WNpkv4}=9#(Lq?yf|-3ny>-I@qmw$;D%eDmZVJ3lu#wHp*e$5GVCXBy&YsS#vLaHB>v+%o^S3I_q&8wp0t@;!RfVP!=XqKa-M|1{+b)CxC}~?q zPT2fX4WFIK%(I+q=lq%j3`5_ zh~S%dmJi3*VZeGMxx1cj7dn56L|`EvzraOjugi$DUPCYrycy-!K7yUA+hedfC?*uf z#x;Pj&t?Vc(!5_hbXqv?c4P2hX z_b*eLtnPS{2+=$<`}JoQ6I~Nxi-{TvVrv^VCqmuJWZXLjbu?^AOf6AM_LA4MB_QIL z@d*=clKNJxJQocp6gC?U%U+7(2Az7q`KzogXm0E1XzPclsj2|d+A-RQ9S86-A59^- z8qIrHNrG@dB-<~3&I4-v0O76z3rT2N1)LwHxp~bCvKYY*2TW0xm4=s?l?aZ8QPvC4 z*kie=Ysxnj@&i~0I|*=aGOTnozcL%OpA8vti}U2+RTa_3D8~oN4kd*j!nMf$m98kkw0b zJX@_-yew`>-X9*HkhT=oa#l=wr@gOq@eTU|_gxOjD)&Z~CP?gcvh%>{%Z0=Jt~PkvCBeWgoEU4|0Y zi8Ou-ZkW16RIJ!*2;?GzU-5V9+k805QFA|YH*HTX3L>D$yrfL%q0+MeA0x`XQn_X> zvq`mf(<&wtyVGU5w3DDFAPB5fbHz79&MH?1U!=Ah=dGLoksx57Me;M>L`J6;EiVG^ zjfOXs*EXG&zA>3j9g0lD+uXvtnjb~_uXdNJ66qHq=2RS5H4s|OMiHy2op(n#k+I`( zvq2_!2bo&a38ZVe#!@}Yn0nh_>9(9y*R?uYa@zbg?byVXG!unL{Sp8`fa}e)%%@sh}eNU+Y4i4WRORD)e z7da&^!miBye0yJXc7d0QtqWzkdk1?bdt3XIc};MTR5lnh?32B1``WJUWL{oUhm^9d z(ske;w8$S@x7}%swcGod(>`-Pc)TN|Q@i>M%Gp*Q0ZE!wX=l#*B4g_>BXaz?mx< z-Q-08R)#dydYlZaq8TW(vNG6V!-}E9rh)Rw7#in&(vWe|2e=W2XrI&Spu>~{&NOn+ znciY7Hqvs#hdRaK)gWDU?LlL8gH^>PRkw1`sZ1EDP!(GZ1E4|>$AuLXKBu#KBR-Ey zl|X`72~*)7dPXu#<^gE>1&Og{A^>x7cmu4*h`y%g<8um+eoV<#O~HHw*YZJV6y@2g zx_|QgZlpZzIC74h?1IbLMzu`18J3S7u1v2H@@NG2XJkW=6wO=7AbUUNQTN%ps_0Nr$t|UnqD#r-N|F-y14$&Rg2V zWb+vJ&aD>)8uHy`xu;iNZNoOI0vSezO&V%A`H&zJ(Rw7N0a$W~J&B@ttC&5FgcYRD zOWkwpM?v#d)tTWt(k(4I@|N70rz5QZ8cj#=)}DJyp%W5-y6}9k%0)4YsqY;eIQn@R z=i@jK%=}V}42{e##E%CY<<7&KIE01%%;%6 zeGUs$A_pPD{sZ^vQq}ZNDYZ^tO*c<-e4;gwdO{(_OQenxOmBkmq~t;ja*LHmaGPkc z#SDg*Wjvov<}bL^^o?WNkL3(jrwN*#$Iw9pYGC^ZVjCbbVYdAF+M@qB< zc_tvx#-f3w)L_6&C|1KqD+!nA!=1yI*@3uc;LK2@>u?A@iDN!`Y*bU0?ac(Hvv)Qx zD|~Tcm7-GX>hz>&{Ph(sI~~uV?N!E3Qie+gsu!{>E8dXwpxR73uHFXzI?_ue6?zRl zx?=B%Ti{cF%i3b0g%3szW3Y~M!Y9q|tN z15;1I-&6P-v~S1_njz#+cH&enumBaOk%0u8oKg-H?Wcp!hx)nNtHapVF^g7o$3?SjU>)0O*!T~;{B*Z*PWbMPi{Y69t;#G0tp6kJtBTJ zM-jorLM95HJDgNZJ$nTj1|yeXsDex4i#7twLrLs~e7?X?2QnD+HwC2xfoP-4%2`hS ze(X|1SLrl3DqiO-hg*rldHoquv>NPjg$!e-$pfI#;4>KZwMG>KT5&hkWVA9ZQ6d9i z0thAyw;75hMunf=LVG43+gwtX8jCf6Drv|96`(a-c~q^4bc|s&`GhXDoTi$Qb6uQf z8{SyzM33Mlk2;5!QIui0qifKH^kOUSrO0PZlg(#e>c&yVw^_#9lgjVE@J=*r_91e0 zYxot`Y}xpdcfv{&=T`*krRA4k$%VUEw!FH!y3%F`F?@oAi4`!L3Eb9t!xpBR0wtl` z;MyqufmG<}<)|@7*Fy@y^R#Wf(am-5X7QjfISdPKzBhlmEK4%EjHGg`yS-uv z{lX-zgXh;nJZbqbq%0G?NLNln<+ba=SJC;1AJv^$4HASkRd;PChhCy0gUzz+GV1WY z5>r&?JCn7%z=NvNQP5&ynA_HN=p{*)3Bx0~fhS|VCb47!?<<@V-QPx&{x&{Oe+XB5HA#PH4Bx$EV-7az%c4SN zE$rAss7LJ?%8#RQw*U56q19TGO$jPm0Mi}Jr|ig#^uj5roCoCzTYM-S*KD?a4{SQu zAl{;|fezI`Bv(e{cQH+fk!JXXY4)s`A@^XAEV}k{f8JijzK}ms8(t)^H4uUHBg25d zRR(7ao&jd7vdH%E^N0B?SAMQpz_T$!8vCDM?6nITCBCqk$q%?DLWpP_XU&n3e)K4M z^PA=J`+J3u9}(-88qn26-|QX~H$A*mU`Nn*$mmTy7SY#9j; zVL4SP5MU|;j29zh>QqO>0&Tdgk($R-1|8^uE(BROh+3FnZ2(Xb<0+W);2B76GaE)b za-oTC9DYHGXipEpkDp^vBZ{6gatG_LUwS5yjL+Y0S@=mI<;XQ>DCP*);a9K0!m+g< zwRAqENuT&lffZBsw%OY6-tQiDkN4gjBuZu9#9i$lzS-N3dec>hMr6?aKxN+cj9%CDV(>PaOot)N# z>R%-;@QMo%;IaZIT87D@34}m#)_XOkL!<#-Dn&+-nQ{VFbB$VQiN~tgxVryA)%DcG z+0y8Uqzc0Vs_&-2R#ch5M|W|UvtraWr%ah!s2inY#5AqSkURr7C)gO}kFQVn_Tgyg zzU#a@?wtHYI=Lr;)y}7YgSeK_RHXe2zmrsvtR&<3J2>?M^%Gf$K*bZkaDlu~h~UUj z<9@KYPN0)qPkS=^oWYfoU)0iD05 z6Z1>+LzvWijLoC6>wPg~b0rkm-~#AmFrH8Q`4{L21@}VKT%mjp9=Z0;Y(y5pJ^7Gx zCRJ9)a#*yz23sXwoqCxqz)cm)ZbuGKJ{Wic07rp{BTes z%M5&BW)Mp=gIkC*x07ZDPMjIsMV=XGf##MHO<6N1r9UTSJSXMvHYcTXh)&DIf{-3-_C}PT*^@oo(K4X3rO9!jE^NzRWPlX;MSNyh+}2y2 z888RP`CDwjjm`zAh$zhA@uJR_MhAi~*EK&J<|DXSn)P~nczn|RZf~apnvHA(guCe< z9*JYadt|0OIy|r)2WE*1oy3?Yfg)4Avs;y$dL?F^Bz@fJu=>4@o!ZmkQxAX!SJ}bm zy~~n-cwS7eEc5V?K?~={h0z~+%Y*90@R_dceC)eTyenDi z(c9xnKDqz)xSmhi9=hvIxFfsiqSfMj*t@uM$oLSl0q1B1s7Uu7rES-WyQF7uDl5G2 zW$c_p$a#4-Cd!hHyybaSqdn6c)ENans^sf;j8?xzrg!Bd)+oST%#ISzey?fbcSVlq zi;+&^%t^Lo$s|*;Yibuk1p(CkF*~C}N_N0%O?bSS!+%KGVQqt{@jA`5D#<3*$6)dBmk^BMEvp6kcpIRNfiJC6@NJ56TKumr4=+;U5Hou~fHEI=!8&fHaq z1vcf#iE~Y4Y@#gN8o(Nr4q7$zTlJDdqNq?JE*(9u%VjSmn2&mhxb7`SXW$2^K$6C3 z%(cf~O)B#R#cVoriJQA^N^>75sUoepZT=`P$3uW*AKj2Qu~ut{A2DJcUnLT;U>{Rz zqU+UEUoGF{kSZ2uQ};Tk%Ba5KrBsg^uS~1%8gGzVy}odmUR|Pnb&7RqVL_U88?FH) z1?NFmWnJK{nBW3Cr~4%MSygiTS`;=_Dw>f>c$ZMFC{?&t z;{YsHGmKfs<;OHI47Br0mk1Kz{?@UQn!t*vk0{JYR9uA%EHEd;xmm62-gIDhb096j z@+O@QIWVT>usR+nFS@EgnN;zG`9`U<_}SWff<7>#cGuYjQlQZ`Y%W}el=D9`hzna3 zgb{tH!xGUjvy~APuqSi`g>@lomchzygLTe-0VX!LBh3xh3hn$d0_sR0_DNhOVA=<> zqg{2P7y-i*Y!2pIf-IeuTDsEmDFpqLDN&%()4qy{{hE{niDf4RQHtc8Ru}QnlcJ!X zaP^Sk;-QP;1~_DfoR{S|4=8^^i7X=w1-e5zF?*@*7P7PePNU(uz0~~BUQ#D^bRhZ% zt`|}mvgsh8FvX+2BGp`Z>2_<+Ok~0OFMY~hT_R^1mw0Ze+4k}z02?PvN~pd%*YXZte?Bg1%Ij~pm?CO5B5uqcmex@_;mijI+t=ATTGwoP z9hW>I@RE*tLse)}7jL}YJAL2Dr!e*nOnTwf z`}L8(w_jTVCW4~wGhJDhbApohDiUNkA)$e5U8QfG!jfKu{&+jo$Fxc>^hP#2-!&6umUhq&qCcg{Y(q91wEVw24 zO8ao@)3M@Wt1A40b?8^shk1UDK1QVd81esX^i6UKz*WJ1Qg4Lr`nUV4bcqdBLUJae zNdqr6%MaW!mnmg`%NOA(_#qMXz!bW+(tsS;#8*!Ux0*Yx&jKuu->FU$fwJ*$XU!0Gp@M&Kdf;3`r z|1n9YWo!S437CV< zEX)4%U%j8_XEo&(z5h4;4{^rKEeltCin-Ue4eOW|7ng>rw^uT=IBRYAxsE?K@aGf! z`4oRX!=KOb=L`J#CA6{&!p8CVe0B{^H@kQvrm*zAQJ?#P*s-(ujFL)hjRrT_w>=|K z&RQ+>%sB^(lFA_=}ESA@I&i6IAab@e%Q3}|A2r(S@(?CUYKUD;k+2lFxAex&XEz54^FmT@9poM z{9s1g+TA-j=o}wsyN5^FR`!1D=wxsE6tW<`KRtSXc-(=kA9=oD+FIv0?NhL8&w9nM zG++3GStOk$XqxwP)RxlaZ1GyOdWaN*>QOUYn-Ho>a#$;&Kg{*R8KF zXS2!6FTS|GzFxf;%~!|Mi!X-MT=~T}EN%ZsLC{*+eQ@L|E>`${o0sB(0@ey)q6C^&*s=IUSa3cDdM(@1<4T0Sq{Lt{|6%2C=hrw zPP~83al51Zx?9fJ_17HPKsOUJ(;SWLD&pwOqc(WCQK<1a`xz9^1??c31_x?~9&XwTwYeV6OBz)df8UfhX4blA^YbhppTobK(k$p+(Uj&IhM(XD-~bGd z^2g)p0Ac}b)IAIrwuB*r5^ejS=0-eP7D-gvTe{AMqh_EpdAPFaRWVz8+@tuFqJ~kVV#CN0^0eq*mqH;nW z3i2bON5{Q#-tU9iAD5Ke+o}G~`3%!;K+o(lFUYBuUrD5+0+`RJc(L7_qcIW&XboBY~$V5$@bgs51nHtI$tTl8Je)8 za!T^BYGk~ky-uSxO}I~R7?dGtCG=ufR{yo@5~``Jk-uneQkX?rz8aUa;mwL^;KJ;f zA!XKpb|=#@gxlaoBgz8DgTZ)pbrrolme*F;C25*#jIHAQ3(>~+uFlLTAZIZ1*Fk;` z6oAva%#_kb+5mU26;PJ`Us9xuvtO6!zyGTjz*0n5`+-|>xMsPTHuYth%GsvhB#hJc zvXt85E1P5|p&B2>zhzB!^oaxNrt76Sw(Y5J_KIOZV@z2sEz)^5{j-(`Y`IW13rwB4T5WhTCm+49e@PhVwM zH;9#IMm9Fz-&)E}k2~g}k)7s%fOUAV{{xpy8 z2k*Ume|U7la7Mk70z#a{6xlYMILO)I8+E)BkLw0f@~~ty)-u=BUkn)=`T8eUVyBQdD_deVB%KiEgtCkut58iVWyD( zl8P3?Vg~+0=6W*8bKK9pnFAg=XQP8;x+kV=$ciZe>U4W$zbFvKSB@{y=Jz8F{=?ow zQFRLm^dPmXY5va``#C-D^?j0%_g(wC&CY+z-jdQjG1!78i&Szm7a@Jjgs62+&?;?tZ|cmd!G* z+z%I2}i(k(@r`rE{y7%qYKIT}A+W5t+ z`=~ec8{mhH=i)q?3qry3TBS$Wrn$r#&REmnMGXZMQD=CC?iUen#D~Hi_xHB;g*B;HHs-vo1qv{dXPgs?nHeSN3ni(HOGd?n6 z1qfGOr}7Z{JlJ~I**E8WO_$@SS<=J=)F=-df663k*UCX&!}ck*{NBhW?>drE*Q-tN zKYm?$Rxu`D9GDnc3XX>52S%t4qyi-jhrLe6{d{094Sv7!l*W8?xZT+~J?d2TOp2OY zcRVwqRz3(jrl*aUVOm2`Wwb=4k^8(3;X&iRW>I^y-t;2(>60EU*iRt#_$LF2!b%Py zX=u@q<~5)HAsQ~moq7G@lLdqQFdiB)b{JIThm9xi`eBuYTwSR^bJwd9yIJ`NDNsgM zV~C?McQ0xi@aak;mVsh%l$m=GXd=z^ws(PHJLMRnwu~^#VvrUvU$&et%Ct*Wm#tge z+5FsGv*hub1HcNd@Je)VX-T}|a^iwFc>++mGcB&b8|-0tk$l+T-th@H4XZIxmyZ7^ z&W(i2>4jdOzVT3Ys8O7y|1eWooVU_*xCDAlc!UcF3MiC!;k6foL)ET(PcK$B^_;_3^sbVy&<`cp}xYbKEn0Q z976ugNO+J)XAJt}W$9g|KU0Wj%OI4?HbY$+DP^&^k$kkeyYYg>V zv};RMVgU=&xqIt27*XCkB-(fM-J2kp)NjWJy=%w zmc89}wsUAEr?cPLK51v)z3m)zFqFbv3b*$66_vIfc!8O7G=87u7lxy8BnGi@F|wVA z$f0I~J1s+<4bl31G%vxMyBOJk@?t6$6OnlUe%5qrT2desEZSrU$S}0Y*`n!&zY?;y znrS-n?>xPJcZ5g(kL=M*3x;O@u3c8`&@pYz!&)wo4-F3{27naT-QE)Q=O2o|J1YWh zvmBt~x5W>M9RTazysoIp_qxSYg$HV>jxWRh+TdzC&;aSm8iFqF!?aE0w zN%kpr@Oo?eZ^!RbvqFq1(o2%>z12>>HWTx=q>l3Q>QH4=z^T0PzyoY=duu$Gs4^6!D*uEO+O$5d_t9e*xpan=!K)}$>6qJ_8XSB{QL`zr0gD`gHNEb9-NEj zp>wd)-QC+yshk5%Ej*wq-zPM*AS(OChrH08{lr3}WQ_-5REe#XToVP4boJsqs#~1f zihH{W?fq>u|4CIH%;zFK-T!o(K@m2JPn;CKyLYe^Gph69yu9?Q!4s;ne|r2juJO5y z6Vf1hUk569e%2-((?REGZ#x>u#n@a0{95A~i8XHyPY!FwkT8Ob%o0vR;{!fp(}P*k z1jYZ07*CoSxBn+vT%=`k>iBbJmHffxHt*pT_VDg-=XAe=7Jz7k)J|A+&WxFA)(k9R z?wJpV#rchI?V)F6>@fn%-fqloem65wJ_<}kIh|#P?>q4^{<~R~%!1DXBT2#J^WD*2 z;`IJRJ5(?9=)fmj>ojo~{ySN&RP75hA7Nd1CNC#OdTiAvW-?g%PfV+vNR^xfXUPR*bbrZ^)E!~z0~y~jo}NJ<6eY&`J| zcr%D^M$Oyd`?&c3Tzg+L|EqsD+n}_2-3w#|ctAXFDX5a&~T0kxt3W={aJ3<}N&@?tXI(C9ZDPEFQr5q{iUSc-c`=_J+5Y!Imn3Gg# zl6tf3&)fF}*f3!VXz9kLd4G)BrR9~tKuHF#kF8qk;`nOPrL;mYHOj(R=ePK8VM3Gz znSlQ^szz2~+mBw5L(|l|_nDoIl2*bH#tm7qDFs|Hg3y^xc3*%e?wjwi*}0qyR^In) zGKtml0$uHbSvqcH8x%!kIQaju`pDV%Dv+Rogy}Jfa_`<74t4lWU7Hk#s8-xfr$r#~ zK*Rjpw)}eQ=x9&LSW(jn{h8rgkeDcHTVB}4w+&wdFof#X6PlrM)GjNyp~aoU>bBCl zndYMfMNKqf-Be;|;GSW2n{a+L5Wc_P*{}K{+ZIDwmdO^K20dz*!8DKSTfZJpe=f}y%WvEK zcZWxRJAS*BQgEsE8&5;BmFiDV6G!bQQ@B#HDSG8MwRiAlKmBd9UitIF?>gB!{#&wk z&4jy;iswC^?r4`L)LoI@3i@%nD|BJ;^jA@%2^B(mtI=cIY_QX!b`w|biVeumZOh>X zjG9h6XIAY?d8c_{-QHZhFKvrbB3RDFJG8;>w4K-@RlQVi)XGgNFQN&lp7himuVQ}e zv`Fif^S~u*H=AGvM|IQNJ=p5OHjh3lbqh@Fet2lxOm2NB5#4K~s>jHndh(t#yM(Jf zD@@{c^xJ?IPTqnp;JvwII)hK;<*Sn99HmLSwM^;X_=XjU$e;b9^&fyoaL!?`=mh#E zPls%d2=V~I%LxhIkDT@IYEZk271RYy`F28Lf})-EL3Z!Wy5q~RLMl-d1;sU`P7G&>uXYUQ9HRuPoD=awh5Xb>o0X&!dIQPFQd^+FN&PJy% zKS+e9JA>GuW|&n`zX-#|;H3J)2P+y8lE-lcnZnH72X0!F1>%93?gxDgFNd-SBxIg{ zlRe{fo*^xsjKOsa0H%wJg5p7gc~IoYEf!4M$p#TS!1`Bz=nacOeT#!JH6)9QL>0`| zl7)Wfb%kYh14>O8tb1~R2jkIWbZj%^Z102%zdPJjN$h3^L{M=xUaBQ*{uJXze-x_@H>xlbMqVz$0Jr3P{b^GLQVh_V?anF_ghP%Ft9UlpXOYeO)Lp) zoQ`Q&z`~_73nQ9RAuKVcUTWkf9e*C{QuqV+Ag{5HGeHXnImE9fvm5ooeWdwJyRfQh z;9_cHr}y=e2ZHUPJ4hmh`Y&gy5lC6upSYg)9!7Y!+v6+p?ZXgaNeYGO?#iEw$;1K0 z%nEZRUFYcKj6MOTzxG%ITd+2~q)4OXa z^nedEj1G_eqnsgbBlhi{t5ei9-ErPF`-EM#Ku;Gq{Cg6_$Aw}*@k>502C;eLJMetqhGedd0B?tXpYe*Mz@`W1C7pU+4`+4@@cmuz|2W^jYA zSur2@7zRZgWZ?~|e-!X`IfnWm2?Jk8jtjr9fs_Ljvs4uuCvW)C{nx!g#x9x^ zghaG&PyCc9xAd_UoZHn$1fSz{aoF15H<#VR(>HH%M}3~FC|(3^OkyFw&xBgXy14{%$h3tX}R z57$1H+HAfeEBaYs@1u|J%52^YcgVpl(^;uckv0UM8I}%Tb4L8u(IKBK0Bj9NM#Xqu zdf}#f=a>K#;RYol38~>MFU=k@9jWsGBI^L}7kiYP9=+@=Mf;JptAbN!N*MjWqlXF` zHq*@ouBKgS zg{Un8b+03^3Ex*|m>34H8rtYe%e--0fk6q-=y(Z^-4d1cN3oW7niQv+9 zXVdwJ;R%9JV!WIgst5n>?(R{iv(j4fLBI9pT^*h+c>VYr?kgWC)tP@{?_&yGDdwxl zl2qxkjNsH60jS#-0cklsF%URlCk9tZt5H~%cI`@40{`oxs$2Rutw_9%?P{_63RwUE zXt8>__rCA!tYm-9^woDIdzmSfxc_yg!F%>g%(z0^Mf$+Bh?3BA4e}f>X-Jw$6w1cx zuG^6O!qDzkavDe@pM*=5%q_~xl^9y>f7yGymS>L^|MvyMVdQ+3SE0)kPYb6vfW|$X zO>Z7@U~;bjJ%NJ*2EGShF*gf8LGRk3z)@nHdVf0R>$!Q4%yNvzu*dk76w&*kH${06 ztwOl~WO^8Yl%WsfgdHlOj{n6j=&mxnVX=ZB69RBd=)9}iz>A`aYkX;+*mywq2mzbS|iab-BX!#!Z1eD?r+oQqdq=^$DDD%jD1wk!5*EK~%_ks0RdETyqwxDy zQG1FJaEOiGqahTA-wfns*PMkTr~<0iZVSPtmf#MYgV!ixqLY`V>JEAcLnZnY<`vIxSRD&By#-u&dhFTuz775oMn0+i@to(#raIDC;sxfemZP}yFl z-j64qX#vYc5b&)DWJRV4NnB-YyTKFpbq=kI&{fV0zGs0S3vWFy1GKj`ls)FA#cAvY zdTsoLz@Ophc;TE4V3L?@Gbh=E=2Zqw;v7hMZv9?K7hymKi*?X83#mq$-rd^U2OsvA z+41T2cIVikmK}?_4ajnsf5?YX0_+TKZt*3PQtY&Vj;NkWyz_VW>GXg;8oulAkH3+- zr058-i1NSjR*uOmdd@^Q(I4%|2@SeXbba_bpX&s+He2%&RTgE9*;Pn#XjZZ218dau_$^r}NkDou|JCJ@O)> zYdciC7D&^eEFFT?2rf*R-A1Q$8ISVB>@-Qc0cijnw;NL4H24t{qrUE@uF>AToMY_C z$RWCIdKjqi_RZxiC+#sAh{74U-=+W_p6^w&a)CxvU8%*eTF#;%mEg#aURW_9dgBCw z=$(-@!$;;;61RZjwtKEFoWVm8`^7Po64|-y%gNT!o6bpPJfEHVs`~UcRiCUn{@l~O zAJzuc_tOHUGfLZsK~|IxG3&LKFke*BpF^f;HnY4nu~KMP4bh2}1Ycjr_y?aT&GJ6NKOvTx0Y zei9)k%-{ptc^5lPh(nKfL4IF}$OH2Pt#0&EiR4SE_XK&6tm8cWL&J^-%tF;8< zqwjXdq2WM}_}MGl$fk`sp9qCn#a`F|ymT$-u9c~RByKC}+ElfQCn6LLWFB=Xh+u(r z!X8{)a-34-1gFi@W3W%_2B9vRUR`*c!Q;Bhs4~>m;6Z(b<4#cFxORA?g7j*@ zliDhze(>txqxwp$+w`l^!$lPVSu3gt4{Ix;iqNYCPwJ{TMT$=_AvkX>twc+`XpxnY z*Q?fPLgN~bARKi?+MfE+ANqqhtm_;Au)N~%U{M916JQnK01Il7$~LTsPiw3CsvfWY z!A{m}7b?+B)m<<(qNNY3!NY|WNg*9o#m5UPd!nhX&My`;5U!7@xnOxrr%o*x)s;7k znxJDjs!xv>RrUmRRhyqLs;)(DRhu3!tQ<)Ex&ixYQ6mZZHuW3PH!5hun((l`;>pnu zK`ry7wu;gxdllXD+Uj7y@#>iebrr~}qHExj+A7-AvBY_@jqGg1--}D}`VP!KUIz1= z!4=ykYp7+s35O5A9mXfj8n&lB6}$z<=h>pmu)x^`b?ISkMe7aY55I&%C|`7fCM@ti zk@M?D5`5&iqMO2(nR{6;A)bcv^y#~7r?b0vu($XcA(<|s7U*%~c6L(Z*va5wEuVF+ z9J=bg|IfV0=*6Py;=L2s=QoQQuwE;13-W4F6T!8UD%W2;LlCD#12BP2M?gSM6^%3- z3H#}!o1m9Xni21ybUXaENki6aDczF1zD-lrQzRuC&Q3quz{+*)NCJB?4c(6M_gSisxOj9W52>g zJNo^i#_HC#c1Z)%F~)|CD8qsES4f!AmRDY85TfS{Y2fN}ehR=o`Q&ML2a1w$kn$Sqth5a<;e(qLmM7P=MPbi0jiPK6s^! zx$I}CTY@iPfLLc#gWs%=4~BtlXHKJidFYA0=l0G|C{yM%E zD-3nh3+F}8RXWS;g#opkMK&kk3Ql0xHY)}ZDAyy&uiG0U*Jv$~hu8nl-k&$NZDx1F zaQ`*F#EZDika9q3@fx|FKC(pHoY7V-lVm!5C5VJ1#3aBWNXtqy-~B!7wE*BIJGpy5 z@1&hXB(Hrr*I9pu9J|mJ>}nimup#2nD6Qb1th6P+8-dP1D2qpYv(YKi@rhZ%6KS@C zmvwufpfhoD$&t8re(dbR-X2r%S;;xli*Kte*BMW$m0!0!XBWruuAh^$(T%{c$ZA1P z>=i{+a-2}k6VEBa#i5gMqUlJXJ%@{4hy{|6AlGd7i=E$C)^UVwM(4Rm(R7JtYY+;%b@>CguTke17NA!zyH; z^%13T;7^FsA-B%B)8l(Nz|i?yAmT30Ir)L=ugw_&v(dab+e%tQr(#VEu2a*z!PU^- z`S};i*z5sD=vAF(T_mK8VKH(b*)c*FalCV!kpmlCI6{W?7G6W7IofXKTZV(l7<;nn z(5q2{i=Qvov-I553%@NYG2*-#6^AHjXbz^Nt^>sv)L=q!-q3p&Ftf&YSHO>$(Hp^H z@TwUvXMD`n)z4vU5MT*NBhbF|7lH!_=q?WixP7SvKEfgbNt-GGlo(RR&R~~If>?l# zfgB7mu%A7Ni)mt!Jei^r$11@F(7+K^ze@{3W6>yj4nSxVY3OGC^i$f$~)T%u+4rN(^G?QGht!SGb$s?`ti8GEoe92wU+zmJ1+jK;oaSxvl+g{0WaDxi; zDfB#{>>B+VQi43%9j{-_877#AzuNJI>@myDdTHRja?-CQ0JzcNLl(sAFm$6rYxa8C zW*=!T%SZkUS3cB|hMq-XIm7F4z|CR*lGf=s0}uG<(dsP(_*md}BXlpbz4Q*CLoEE~ ze^~K_mY0*WNIrlNqkppX-}z*vl!$m5{|7C2dfeI7zmZuB7*fVW;Q4P8l5_jfLUWLV zJH9FU^J_2E2xHTjZlW7HKM_qWYC;CxCol@Ha*)4^6dmgEJzOZyc^(-yoX}acdBT_@ z4SL?&f3ypY!5#=OL&JYPt0yS9K{X*KwuOhY2UCO05kxDNc^it~& z=Z)jvXKd-ir(N;m@#p=^WE@6fq89$VJ5SmeiV3_lr09in$zZ36N(Sl-xtM?9K`1!;Is7uigZd@na!`teEW|z2gB^OSx}-fi?t~HgHGKGY!$i5h>RaVtQe4pWyM+5 z<{?Io2ccWs=65a3qzJ-cyImEDoi;8KXn=JWA;!UU-=3d!fHJB2XqF^xtIdhxnjuX) z!^X4G__k<>IL#=?7x;@o8$L*eIWXTO;FElRkfRDG4>6ZW&R{>dsE_q1&50dD2qzcb z!2jqX1BBM{%tGKETgsgb47mqb9E-+>NMQ`cBE?Th% zj}`536}yxZ3r5p%aZ~rB_md*o9jL6qEtc(n?BHd?fnYAAA2u1z}a!NM)M|p14inB{@kfBrS>r9h6TWOLuIO>sqnQc$ZN}A>zkk7e`^2*=m zSKIo)@N>NlAW zHNf6AmsvzJ=WMtzNKOcS&4yMJ>HzJLCVk1FOoFbEXGG*3NjLL2*3dtjJEooat)rMC?8EqPS9-ZFj;!B4oJk`7bT9wU=p)N6of6OC`nr!aT(vKupv6sQkLrXD*W*kD z76zyDfaWaro#QgaJ%>*iZQa|vjoHkltA1L@U`D=SeXVM1NAXccaxvT8taN!c%y+t; z-j{Z6Iun0q*ip?gss67%qx$t3(phY1b+z?6R3^2#41?*@Zuv#&as87rk9KS>;*dO4 zD&lw?KIg0TXPK2G>mx%=6T-RTJrJtZYa|Lh0w}yYEtWxxwOw?_HXdP}fjl1-{;U3Fl z)gbJ}~RYHpFPeQk52j3k@1_=pI>bCY4SMhrs@2mQ6~;e;5X&> zidc118*z&L74n5kUn0yXh`J_NNMu364lD_Ri)A@qT*NkJNqDLF#Zn=-&=ZR9*_b7> z)kqU8L(_PS2RW1U+o@Z_~g1{8mkd>=zk8&%fApw}m%!$zJ)#`Fk(UFTsD ze@g0T!e$f}Td(IPEu*L_3x8hA@)#d)Ap|mDyTw^i37a4V3)(KI9dh+4uTm*(s0>u;}1 zAzY5m&t+CLglkR_Lz!#K;Ayu7Hw{5^GQNQ*1k1=_lFrTcnv25jyVDbd;C*|v_fsU+ zrc#gOF+UJ#$d@?&hZEV>guS>_+BrM^`C79=1RlWBEN0x0Z`>QQ^Y-)%6Se_A1xaCpzZ+jSAQbQTdyHKOnj6@RqfYu>e9l0INp9md%s@fem+5o>mph$0FoDr9># zuqdGfvFMctPfjl%V~#VIE1vNvmy+Gho1_%A^IQxLx=OocT2)7wyg{H3)@(n@CEO=V zQ9_RMk_tPtgZaPng_LhjRqwK<4ZX&4QSyVwNVwtF{-Z8|! z+PL>_xXn8(+ky^=?JhmOPWmNt`JEix{#d?wPJNqf+ph%B`rJSCZ`BNly(cAvNaQ+$H%e z868x^?YVLZ_gwzY-LcHDz=VjYC~Q zs94hx^){p0O~xB*C~kE~-*`iMR2dK#`+|XK6F5NPiDnG4KEbY!*??p7ek!l~^85wg zXP?W+`}bdgy&&EPu7fkB3T;Gd^KvqF5WJ(bB!YKu8}P|sQOg9DR7Wq{1~ z&>en3S$SCbR5-gvhNM%6>vuBK&+iK=qeC}nDhVrD`%@e9XA*~_jYzFtwee+=s| zgi5?V9L^Vc&+S?2rX5XOX6XVVL%_=e?_M!Udj1SVCLNC-<*?zpLbUqmOLgp-05Lrjq2-wbhtvOQ`-4tCCV zKU{Q9PL57U>40!ixIF)b2C;*kA1_XSI(U1uf3e>=48IFE|69T#W@oai%Yt2Rv~!S^ zN{Qs;EEpV%Y9jeCRHF_r2QOFHoD?%EIa$Ofa73#rexCqfnU9!kQkB-qBYcCus7347 zUqkn^Yd-?QRWigc5Q!o&L;YLeuYLKW-)--NAA9(-lc_$~^jjyb5j zCn7&mlJ4#`#(j~;KL=M$ImxCkX@q=fEW(8NsJVlp#PB@jpE?p|p*h+4$Tc5pd*6oN zW^gMFDX6KYREB$=6KCL%lK-iZHfxXEtS~lHxenrnRnT6dMb?sAyqo$fAoot3`-T=I zj_P^v11)%N;K3_Mx|8IdW)tMi&AsG;ta&ExsIQW4hCy7aIbcvE3Ze)4fXZo?31VyO zwMA=LYh!!wa&rhwcf>-B4Ch9B2l_VlXguVa6OdK$mV_7Yp$?y_o?@vQ< zzVUb;y`y{xut3Y8R}_)bgJI54FGw(UKkT4X(K!hRNp>^2EyRW~Fx(|-mX0tLcG&qm z!7x6G0RMCMaF6%dc0ij!sMgrNCfKVbk+xg7l@mfOvVXPy$YXJyayYn zh&*vC)*K8^Cx|Z(oWqk1PUw6Vel%-9j6AF!a{ib{@H(B$F}nma%`O%)PdB@;VRZF} zt{fS66_;OVw}}5#%Wsop%xJq=?K02o87O$&oxO*~W!jZ*fc0sZ z2rwZy_U^-dy^hBsFEMZ%F)a#l$9PfcWL8|Axi#O^N zW+b8NET$mMERuwPdk|R-R&GDv385#K24|dt%sKwXIS=2|FP$lvo4XG7o{I{+xa7IXV*i>0~v45)ZNitwM($ z(wXCh;CnyKWkampJa|+=<1D8psfYWi!{wQQdGd9^L3k0jt7o(H9NJs5f~9ZP%UCh) zEpQQXtYDAAu;Pp{E27t%x2b3Xb!K_a%eu~WrJwn@ic9?*&md2yMfyz6@ytxVILos` z>>Q=m(vHs=iOXIr+Be1<&s7R8Gh9}|@q399X^szF$jyplk8$L7naKIjkTd79U>l$D6aj!`x^Jt0tU%%(`{jBOH?7DDSKdfb}&GS9)W*eAodYHM* zTd&6E7j`*=%h+~-y;AqYO~&cX4GK@l_c*E?D!!|w*VcO+1v%=ypGdB(kG2UR;N)ijAC{0Wi{QZD_9c6 zjq=Yk)nEQNO_V@l~hT2y3 z5Yh`8WozvXL-cuuVfAj`;<*DzrEPSLIV?4Ibam{Dvq)b#HX0qf@Wvs|0E%QHAPH*?#g zQu@CYJ;H6;Y&VF@F3eolZ>>C&aWY_A!YfU)VO)H~gsUbo_aYWg!0mZQ4emX|ES0xV z!kqfzRx?OGB?CwErUw*3xwzZ9GxW$kaZc~ELa1nMXS&<3v@2!T_9YzA9Kzx{q0Pgo z<4$LZGF88L35f8F+tlsa!uSzMM=s;@>7M+w1mT0H31rJE<@*gtoSPi_;WUn0S(V7y zlgRaFP_8ebPzy*%U8>CreJQ8LUX9>9oalLZyKPnfaLfsOdDwX8lkx{#SnozGe`CM= z%5ulE?(Cef5eHAa8ax7bePmDy9dLb=TC%YFu66dIbJ#+14}ar-T9ikI=Rfntr`N0A z_DUQGJ_*+LIzPBfHM{1Ma-8+iBkv4-SVSOZ(1-53TG~*_V|vXa9_^z@Ifds8%wYmaFP~4wo)k*TVKL%4gX+|gX5_>>q6CYBM)RNa1*~GPqBa6 zS#9}justo2n*f6ZJT&$g;9q~89<)sECE7Gj)pOl8zie?Iz?R7o{0itywY0YTu8z#k z9A$}Tl0?+=DP)lha8GKfWF2-AQ_kL~o*2#|bxy8q36)!&*l`=R1g{#dP?HyjP>pc} z3~j$B>*FE*zJ9$*fNqU>`%w+mnqleV?$sgyQ|J&>pOZcuhkW#B1D`jW+wjlFBUK=j z!k?@;ap$yZdGRQvG97gb=4Ki($!z2&@*RInbqxH*B6m`Q0X|_j8;U~1q(F@^I-Mb> zkCtLu96qh?k(Q(6T>0LJ8h&EFpUI~eqBvUh1^XHg7^jVYR2}{tiset~(Tu!h^N&iM zf$dRU9zK_>p$AZGT`n>=HH_^;Q%L03M8?Z2sFB5An@H+KdH|*599o+H)XkDb39>Y= zMLJ2u4faz!PHENzs}b%Ul~cUc z&;9(uOt>jtER%5p^xsW&=0djf6F{W2cvFE+FW~>tE8Iah4-9c?{n732&6`kd@x+c; zKgKM-Yd-#qmNN?GT_>lBSt%D;OFXa9P5@vLW3m23TRKyEjWWTiIs z-n$yw4LnL=XdNXBb#6&L|HshH#Dkd^(fvDNgF@Et=j6_)u3{VH>X>6R0sdu+!eQS# zvW~G4(&a7ovZ3T@l+jIhdrjPB(#%vSH{~-0u=#=6cPxqbU?DvJtkjZ5#m2N>S8G1B z{_6@>eo)DCVIV1w)+!;cRB%SukJx#E3`GTJ`-8<02LtH=?q54WDAL@{qGoc+Be)(} zUQwRVntOKYURh3I09TN?FWB2k>_(w^Rn>G%MISps8q~qo+^3ZD`Qd!j-*AF%-5D+? z$0Gry80J7!adFz*^nptYtMzm|@G|=x)T+BE`3_cEdY>dLy_DnuahD^_*C02^SIBdL zTDSm@om;;(^VWN;w$y}`ILs#w3yKf@PrLhs`%ll+kFJ+op;%M5l$gViE0{_3@w6$L z)Lj}k1dhJIdJthNho#lQuI8&U`;&aM06A431^5r^KibvpRB@F)n%in**hyO-FPoK? znK5kJ5q53C)*s=yfCI(-d#;yS%V1j6qp%)5T=lYdR4a)TZSNHe?V5O+6Nle}@7H|I ziYu4y9XVJU%cxeqo+leU5gzhIbysDpkXJ+3$l3z6x7dHsF@m`CK&JZK*>GMw?;N9H z-}CS>UOlYw*msfr>dB)QWESh}c?)KfaQE|8F&Rog1P~#5!6iF3`Lf1X#C+8f!#ATT zz{6dPat52l4AuSI0tRLB4L9FpN)~E}R`7_~8BEVcAsWP0asnl4f>?RtKy|Of>vRmq zrX4)`Az^2J&9N&k(=>j}7@PFtjKaNuJ~(FZSrC%W!k4!l2dNPuvf2BZNV_nTk)wcx zt&+RWF<_=&z?_U%b3~9?2ni3<$W%4kN24S=IEMXS$Djug6Yzyz90&lr0ynH23V`2M z`0^Rrn<#vet)jw_wjZjxA@$AK$@%Wt`3YPU(s~;(1GtFw5_~oiO4y@6^eaER^zWd# zsRH*P@A=5_D^iD;1xJZbPU#i)(&fycSbm(Ex9-L=zI@Rt54KdL6`5n>X4B0u6Xa32 zxv>#;-)u&k8>Ali=HH-il%V-GLxDfpAH%TSZp&X-4;|pUhv$fb$j(^BZ9W}fnq~xt zaSo zC(?(@DQlk=h9`R1!A?}-;%oblIi687X)7>_Lm;F56h+|l)9iEvxEfM;1vU7pgj9BV z=j`Z!vgrJip88G%52vfM)w^>XOKOeHa&io?c7K5hh3~i)R=QsII7@QmyL|kyxCI{N z0$I1>0(q_a;}%iHgiz@JU;T!w*rH5KRdm7rl{hNvW)~-XQ%6K!S6zVXn!7mdkn{TK zvhA7*3p!Y~-6fl&M6R8^MXgD(1&!^VbkDlGI}6uR%PnZ`VCU3HGCZp>F12XYx`*%g zI}6v0N-b#WZ0GdPiyFc*3!3@i=;Y6*A9hX_4$2f<_T(+ya_4{M@@` zO@T`{`)_LHxqVgY+gNvMN8s<8gdn^F62R zb(LaS--^guirupo7UPleJMMke8>c|F8*xv{2FF7(7nZe2}@*`=}|BSmgo@m zOphLU8bMVGm<>XMVw&-R^IBo%vpgi_eJca7=2~o2PO?NXJ0%}I`iFGPX^j6u2Gn`14M-E_HmZnkdW2XB_3N);r9|bltr>k|iABmrJnIUN^r((W z^47%x5VH@)+7gU%$%5`w_Si5Z_*FQu8lh94n}lQf5+c+Rdih5dmze#V`E- zdKQJs?`xVxp{|gl%Pyh&l>3Xqn);;W+^B_Id!u9%kUkiALHV4Mhz^`w4uYYW%fGF5XobdVO4;=i!MewUyLj(?IM(f80EH;-HV34YPlSts;CeApQ**p24d1gPn6pf&hNCK z`~zH`V^goDy^oZSfWUtVgbq1{#p>^we&hxXhZ2LJd0*0pJP3-WRt;iXMS5MYDKzNA zrYz=NaoIOv>r9OA(b>_q`vo!lCr9s3b`HGnPdXrcANoaq?4DKXdePX%;|vYa-Z#fP z=coQRr)PNXORc%+`0j6e{-B+>h-xUA&5C9mLANdX@tn|k@#=9L575fr;`3Ox1ETSM zap1hekGQUAt`G7*zK)l=VrzKGDz{yKJHpwZ&(5)45L@D(Ej-ejA}q{QZr8alYxsc+ z5plgB{-wNqbw0$iz$K1cNQvApO;f7grU%dM|4ejHNeEdagVbw^9@T1mW=R!wDws!g z%9KY{wa6+m(2Uu-g3m(9Xn6r>MsIY4X3Il!#Gw-X_fC+1zQnWE6`pEkr&*%Yj9>t_ z^?w9Q89ORabNbRtB0YF^5ioWf4@1O^t?~GgAz~?l%&taVVF&Nh&yF)`LGK<0=%d}; zfcSHYp@MPQT$jSQ->2+%fnZbjK)mQ%NNL5srIC!oe%ePa<0BgX9iIXNf?K0w=RB;R zr*LL?P?m2hWn~tJ9Mkm^sZdzmy7OaJ=fG6XGL#P}cc13vkpv)PM2*0VkbTXYM!W)n zjccE;!;JoiJB$`r{e%rd;`Y@Wf*cdU5-LT{L7Gk->3mrwBkk5hdaH0sRw1$Vsu zCk1z@t(L;|N5qi&pS}E#^@A4t|N5ULx55%@cL*zoB3*q^hDv-BVm_J+H(QdUl0HdB z1H8=y(;+$2&EdM)Inb8bxr;KJ_Veiz?;#~dOONW7WY5{xfw;^GX} zq!-hc89LT&wak;_eJ>!uk33OThN~sn*(@mCQwQ#6FSqF86oru8`!51hQV+&w4hM|rjPEZ{F%UjU1~wNY zXPCWkR%Wvvzs7ktn61$-9rA79 zrYgVH4iuRU=PVuLX(p*xkIC zcx{-oI7j0C3IdlEeCu+%31e41BXcug60=uIUt$E$nrv?2fB3Mm;dVKFj;&sCAr_L8 zkJ(!tbBftJ9fdt$E+@(QbktYpeT@Mk{f@ky^(4<^<a*YCH{_-=^*{;0YN%VLS7{%ev zzMD#k(sVou%UO6_=TX>Kvrnhzgon2#U;K~xVOByvUXo?9M#)I#4&}A!PZr?O@=2q# z{pEW2hiAx{p{=xeR(Uv*8n~L1M~?GBJpRa>KKVOa8l`I!A!swj+;LC?z3R#dUfqWr zpCQTUT%kl>@+$vnF7<4--3oD5LUMfR#_bxO^$`ZFzTJj|oT&u(1~ zKTNzZwryg+ImU6}r6GC%*PdQK4(_pQKq3eQT9n@qEDoaMYuGIOACyQ2nlk*+0`>q) z){nIgZjxM+fSKBAV+7snY7zGxlMN_`F1taeEOPo z$V*)LS{B(v@t>)Q!qFf|f(c^w;DX&u<8cg6BWWEdLKh<$n0tWR!cgz%$}+j7;ja-& zv0*_b!%=NYuzBay1<9cGLqxyfNSOLRhMP9AKso6m6cbFAqUL6LjNHs0eHDThE%%fa z^%2l)i?4D$cFeGbj9&~qJ?7LoJ%e4|+Sqs%g^z&|nZR;~_;K4gnC5Wd6+}Ibs^V=P zK3FFwt5r#_|F{ZQA!i|SYe5^PJ$t8X#F800u5ebM@<@e(%=&V>Sr)`({`I1%bm_L; zpc35{r!1P|mx7pGkbks{db$vk*H3a_gTM{IIOja8z5^PaHrs8uYPNHAT3?8xVAl0f zbx|ML6`f10-L;$#D!edQXinC&`Rd+4$Bk>5842|(MN8WZ0%B_?{f0djtcK(>;X*VM zW2?L`RYc{625$oG+nAk}u7+AvBmjc&wv>+XLtM4?U)AIob$owV1I^mc62*Ie`qP1Bi{u=UdrkOQ zzJ5H*seF{DIGF<-wQar}!SbH-6?DPv!ajUJ#)pb@{qn4dU#h zMews|7xD`=`({J=DtqH9nbN#WJ#`6a%Z1az9rPQ)fl!)js`}T|^~iQcsFd3yv2XGB z(4Ikcn#i;3LE4)zdW7(1Kvq+zR4PoMcFq#{5Z|FeTW}XkW#KuGNM(HPemDju_buUukXnyO~!oqi#ntaVaDy6Mi z68c@?Y2H{=nb6HfGdGoRolxdXYUM1k@H~|d(3fY3UCFd9dYxi=C3IjW36PRY1n8Bn z@k-~+KVz#NFyWjmA3f`2RWE~othk}q_QyHL%9N=bt%WDbpiBH_vQC8$+bla@mVqZq z&*fY}XijMVlE+_^6U!a_FFX4+jHS!zaL}{-ddBS#{Igd`*IeI6!ZSEGiIi)+F(@6+}8{Crug~3B_$Eg|Ex3Hu6>v@m8HZZ#KVCRV>uM zq?T)`$0xSt{Ta)$M9Q$$MqXB^)Q@{({WCLc^7Kh{+W` z`Ts_O5>_b6;{y;nE-oI=Je*ab!H?Fev1E%OTS|~(^upRA zo>@|q5}0EX`3Nm5=*Kw{J_M^+HmdYPb;`x0pHCi`s`E8_a z5H5(wp-WGJW>afz3q&YY!>>ZCr<^fxkTdWNFRq?YFSXxY&i%Jb$^l^)H+7&&%h}UTi&m@h=;j&tJTF@h{=V@38<=d`H9ZUw)21POs*aTlD+? zrT>u7h3;ZkQ*t~KWd`lNiN|<NoQJbFz|RQNoqp z%}4hf@Y~#7L$8vp2><<*{{4*p{ha>&g8u!I{{0GTk{AAIem%KEC$M+|TSRW{vrEn55*<_$e7v>ei>)hct-L z?$}5ZC@qY995Sb{M*e`5eN?N~%-l|}ug+7q`AATyorI>-BDtOpBCL-nu|IUrK7jlZ z?i~IU{;+d$vU7O$(`)13lYEl&1^NQrA)Ze*LH9&#;h=M}`vI!#yzTCH&we7$o$lEo z&~?mI7Vd<{J11w|-ShpOlkoWbbKM^<11b5{47HfW5AT2XgV@SJ~w9hK-I z!m=GFy@b-ZqC>&xe(|mmTK*sh4w|fF?{{}!(_77P^01bOG|)YK|CC>5bTxyYvDUxe zP9~%6_4T{EyY@{sZRg{g^#M0ptp8DzOq!ZGEhI3$dao`uKeyfyw7wEd66_mL;C3%? zXWLp~Db;9ptY7VaJ&UmP9o|8#M5Orfjf{q^l;`0f7;pZo*< zeNF$qd9wZO|9o?^v5kNJBmA3qe24JUH`iI-LJ%n!SBn7}^YQ(5>$>vYKmOs@1h)6d zAL6V?|A5)9$MNX4z`lNX@&|<`roQj|T1WIHUheCEJf^if8aaNvu)LdkplpC*#3!FK zGK6+%OgNgm9B|U%=IogjdHn7Fq||Bm3HGQ(-$73ow0!Q${m(a94tuj5w&364w>RzU z?>C@o=O6WZ=1r~h>%p%F2ish*pIl9EY`MqPow8LQ!=4xS*(CnlLJY5eyxx}bm8rl4 zyzx6@=kYgty-nNexBv5}@^)uA>|2`kV24czS&PMiqBV-)3c~jk1Nd$65C5PzLxf4D z*{A$tauFA6DDGYt^%@_77TlpB^n0CtPWto#_ape9$L)8(ze2(P=lbPK zT=!O*ji!^w6nTmN|Br|Y9i6~eiwd0`E-rLE8ZFV%@$te!cBv{qp}Z3OE-u33ti=O5OCmv6bXdiVVX&-(l4bN2cB=SvjY zc)CoXR|^Z3f2>{j2b~K$*XmEtXZ~d8RsHGJjGy=`f8-B65we?ePQq6>3PAMf!Ku(- z_xn-@`cwHPc;7o?^}g5dzNY*~8mO-!`Yj{>J==P*3G&~@^Jh;to;`c|66C*UFP}dD zr~LOj$$!U;)PQ==WLzt9875)B+cN}vHOI`IDR z?}rL_M!E~WK)N%cU9gmBM`^ld3vz)KtC8G-%52+hn8%bbi2I6R1j#2gbr*HjH>CsEWbSx8!L%t_h73Mq?!GyPaLFvDZ22{-v|$ ze{$mAHOsU%h*^)kWUOAAdip@nOO-(ST}Bu@KQK+z;fV+T2qfYZSB(|OoE!X<{11|W z<{ce-+4Z=B0E%EG16N~khB!B#0Q~kSdJuh?r;~ih?l|K9Q26^Id3t;w4=0VdGtf|m zTLmo$y?+oAg*bz22uFooR*WLv0Ms~c8n3l23>DuyVgny*8cZTBEh|SnbZ5gT z@<`r((&xEs9Fy|R3&}j{}@YFp}rtb+!P|%Cs}(w zQ$7d3U+9e?T`J=#hr(FNx+Wn|O-5A=TCc4_rRuBThc(WSxlDr0wb$xo6qdtlDhEf( zmS>n`2!w{wxHhoOKXBNK8vs)4wOGb{Vmwj&mj1dx$|Ign^*{1qy1?6@#Ry!=1R-Lf z3plo@sWC-l>j?hZw1<pp$MJLk&p15L4EFzaoagYw9bgXIe+mfy6cB!2 z0l}3I&UQ}Tcg`*jItNE5Kb7Q!@^5qG1vu}YFwa&TzCHRYnr}`zJNtMTkU`$>{K!3< zC$z`KFRt=m_>oLLj|lI(@?Zu8jb=cfi}aU7avNb4v|i*H!y*)VnbEKT40AT2L&`m4 zy$j}dxD@qxLCrY>kPd$srv%SS90{DAQeRhT7LUmtmwe=7?f7bXeXWk!%3T5L1MKMq zay4-ejh#)(V@&^IhKG5ucnrgX1(;@-R0K|mAfU7DfQJvG(`I!N+&T^3TgP%Uwgq0$ zxL+PN)5F?1J1Nyo@Fx5=p}%g-oM!YHg~QP=-r#Km*Ml7H`NHbg;~DiSY&rS7Tnlqs z8ss-*d0fyER(w)F6uZMSYkLQ++62&QA`mM!AZNk0!^dH{M({WsBx8IW;YJSP(TMyo zEs|r1{^DsofXZWWoPc{@v=|Gr-D{Vw*AN@K@G5z1u-kuREMsAH$?Iv z({C|o6-@T2qn`A$~X^$r3-&+5_@%-6~f7#r4@$}h?m(MmgpCSLh@$}_C z`TyVJALQ6u8_!#t&oS*of1KQf$7xo4OvCWsWBPnCqR;=&Xb|5Q!YmYdcHail_QxQ2 z^h79~vGAimigGU(=GzP4Hr+IzJwtkl!mlxWKm9FOiTE z>=`^5alfBVm@U>(Z@m1{Q6q)b0n;}KR8AQ=fcb>M?h^dsg7L<7#K9wX$VAOyy#Ke| zf4i4o!v;A2{=azo;yL+$KHYrzVsqp9Q}X|O`t+ao|96uAKae!f;?gz4kn-jiobMzG zH3|Y{@`40LkegMl7jPiRB$vZprxe&ArNCyiwErjl`}+qe5r7`thkuEu*!>^EKgTF~ zqp0>FAHdze`llY@pL&GfSC2r^sYWp75C~kTTUa@{O&BJEKVH*hxSC@MAu#~|xQhGq zK@vIaQr4&vI;v}hV53ERk$z0GepQ8F#GAT0pC3?Xv{L!c7x(izsO#aXDCr?;%Jk4% zldKM_jh+Okm1+zI7kJrLtRu$Ah4Zj>!j(Fh#M#zLHLj8(Tdl$*DJCn`Sb1rCxBYay zaEW@iKzmnf7p~jqSv3~dRz1o}b*9Gc;>pQOWN;WGADKQsNg3t3;q*i7dY zN^ej_xv*G1!6?r@+OAg`16Eq8Mv^bR1B-jd-MC1W+LP;>WHOpgRwH3jX>sEy5v|tp zBpD1Ax0_w`mMPRJ7##)+pW7mF_}%RU|7e5^4X_)t~9KpQYL2OOYn|itPfo|M{yBhBRAoDY6MFR~Aoc z)ftUT$ELni5l<%fOBBoEY>860*DFpQYxEv`@IIzKAzPxt5^FNJLNV>ZgBm0m{tslc z;Ywp0q}j*SD%>RSzsbd50RJ7Vw(!8XE?x(<53SJdFwHK8vD~D%H<`x3R*!Eu*U!8f z*08p6&2gfGT&Y?=pBgS^xr)T^FI=`^JQ+?`Ts5*rJ@mlAgkW4aCo{Zd7vd8Xf_k4; zTEHxc$EykrlsKKzoGdChU4l0mp*!hAmkXr#UP|J7b8*QcS>m-3?)9Qj=47d59LN3i z^TM{5qT*w;@GLHstazEn2|2m0Rs{_MD^@9P<5BWe9^V4!)oKGSdU5u3x+d5U%;>Xl zBcN#3FP11aV38cWkIl*4j(?G`{7_keuYeO*U9+7eNqFXyjXm0%FI`N zp~-y~FD^FyGInq}jEj$pJITuI-;82k^z?m7#%SI68sx70axt2LTAM8a|7lsp zP1y&{f!LnUeC9*o$%j|TcqvvDN*77;aBAtORad?@s%HJ7lOT<(-Z@PByU%G?5_C2mE+W&c4Oa`kI9xquq9mY4y7F{TD*3|0PTMz2m&mPu6wn7j6 z2W)7OW=l2?C70dMNt`WTa)m~>R-fQiQWVMH;^&R!deP#Ws};{4Jh1!K26n&N!0sP1 zFwE~so_cUCHJ7$n-&bv4khZtZKb4JE}9R zMs*9js$#sZjU?{>vSfG319&5J##q7=qps!(baHT$JfwpM?C@alke&t)=_$Wi_I}-L zZY*7N36GMRimN(E)HSiJ+{A7X^_{tY&S@cDl8m^n7Z2`gHEslEw_=5duyTY8oIjx6 zgZ0^u!WkOvnqHQ3V5zM*(~G69^n;$j84fVDkI?eEhAdyQ;6q-kc^)-2#b-Ib)E3Q_ z)cY?#?l@xb+s4!pw!ix;T%)jLAG?k+ht4s@`Z10k=-mw!&W=Oe_!^ZF0Id8 zUY$8fv->4Wj^lLj%hF|6^@*u%rPkf0rsVW1@a$jYMN-q==eci=KrJyq4}&PtQ{zWl z))`q8amm2@c%57^v`uALrWR7DMO6h_sK^J?I-`$4T9lycvbm=;)oO7He_V36sKzG6^q}lR({DK>4gnFG+MXX(gL@k>V{qoRx6(l zA54rFhd(cDVxGNiVP)Ufj*-Rd3O+D;T9h;M2azm2h|i-{_GJmdty1T@#-puTXr85R zVGr4KxYCGf?0XCA%!>wCSh*Y_zOVwi9zM9Yn`E^OniosIOyyNNyLtH%Bl>PPSE^Jt z9W1Oso|`MyxJmnqjww2`E>&u}xKuT)e$g1`8if~CPQQTZoNMS^T=@Yi==z4{7=0I3 zMr-U`;G4zT@C7|2<8hWR+Vy$1_z%BEd3US;qMSd8%x+UZVV~Rmztw*bCeL zf-S4y0W7L9UIo>rI<+sVJ=aXWROQ~+xajj>2o^5D(h9kSEhP^Y7Z+K{7uH|-!J7wm zu=qOkR=YhnD;D?7*-KQIXVhMN1HOP!8!ieNs;My#onUe88Zosd+P$vgoPn-5gip(@ z_QIAb5q7gny;@joSr3JUqpDMSEw#i11M!uH@U@os;d1GG7lK8#7nt}LR{sKSAj?|^B32C5N^d%`jA@N{-OcRweT-d zIeT~<>7vF<*ch|*J5^|mg#%y0KEJSyc^g?`?%+-XS*!eAgUYhTkiEP49 z`cvzEQe)uvAWmizh!T>?yn-Hh$(({7M#-FV%UfP-8q-;2O6VVR3R>`wIfV@N$DA@g z?83Z)UbOn0f<<$Ump`309L=c1a-D`i1V=9coXCFYhiDwnyX(C|H6 z;`MZjq69p(nQ`aWNwQDrIM1+nDbeqodc$QdO&Kv`c1Z^wV@{!E`t%_*W|tc*d(a2V z^y)g~&n`7u>Y&x2$t)~v!DQwXEn#=enX(7vFo$0&A#uzpSpwXcQ_{!Pm{V}c{j0)6 zEiAi4t7UMF*(FPO8gmL}GuEA6*0b9rp0Pg7`u(sm5t!i9SGi|z0_{iJ!( zHGAj5&W{(}!?Tm_;c0jGV&~-jY53eE-YDnU)|BBUJ2}!z9 zZGQj#_bp8Qv?${frhGb1#=}$+%@*MeCLDrsPI5~16FF&)N;#S)w>(v%2?3>R3Tx9f z(HQomAcONrnxH8Bi!8xrdkZrfnRH8LZE7<*g|!)-DBBPe3A!1v8^EQUChQI#UL~jv zdHfDa;~!olk0WU~&nB&1%t;!a0WB#4uGEaz!Y1Y~x=IH5-C9JMyR@(HEl65!CF!Yo z#gziC1hjI;OPwT%jc~;!!LdmqRq&WYSgdq1fbSo}A_lV;@iA{B4ijnlyVG}#qB0ri zXq$@d(3Tv;*)$$-y(_m~X*#AFW`v?tP$(1tW1#1Q7Q;Odw)F@m`H@aQpy|Kbl+G+o zisiR89LFgpshXl%5>r)S2mRy|Eb9oD0w&)*e0S8^>z=euJG*DyqeI(_Q!Y3?+c`OF znX(;tJ$?$FgnE&-@onTkakt9>zl_Ris6xm7B!dC~NS@IyK+IP)82 z`NFh@z`gjFg*ym((m@n9FLhvzHMy}%FW&P__$|&p0s|19PN38z3g4yIliT1OIncd@ zcO8kr!A`ibwYj;`+I+gP8J?f+1l81Y|0F8^Br5;^Lsb4h!8^Eq+hOS)4-bKP-VV?5 z5&jL6*(TK#8Sv-^gy$n5CH-`~287A^C3xceBY6{tG^H8}0sCn$eN?6mVb2hspCp^& zHHKEwR@-K8^E+J7H2ajpin;B@MR(Y;@a{+W{$w21GEAe{Bjt<#60JjE?i zi_%o*zd3LfX7=%6b|21l#XjUADbMZ$Uu0YZxUvQ83QEbaT2st?nU6mb3G?!-Vrxfq zxnMK;$!DiY`ivAtwSNStAU6@J{W-aZHv8pzPBpkGBOn_KNMwmDDy^*21NiZHoP1KE ziu4oy3WCjWCjDdzT2B;Fkb(eWK%KuUpWu561g@W;iijRUAZPJlaF1j!rsWF8$!HMw z=$_yjQVQ63KwQ}*g?DL^Gx42f>F4nB`upb%UA5N^nF>;-+`6E!*$tqsNXRYyl>$Py zU6Q(Ug}GmS0tx^8aLc)9H4*E_430reWoN$!PrUDOFzdK?RRO?IpxBI zTMwMtu)ua;ONa;n4+qjxz+urF$CKVIk0JjV_!i(?mHg5_{E-q3yQgTJ$NgbEB3T;^h<%41Vrx(h zp8s**C!Y4}c|>adQLpTvIqx;QAxGRh+reggv)W4VrtY6PCm+rsyeM$=QtT~E;xU|d ze7lIFaQPd!&yxVp!wpf*37*Y9XRIbwA8FynFgj)m5|eVb;5^2|Y44Uu4_u*P4746M z@d|~VEMd;^hg->IJZq%DvJkHpnOw>J95Wz~?|~}9k%OZjK)<;EbS{vK?k&!Alobe z!x@+kCSiO{-C7cWrz^IDm1Z6f$I1`p5i!lSbf|mZbL{3 zU&%Ps77ILnK*lLmw=M(>^1~DeZ~?0~MMBR_z-yQ_CRq9=&-=8+c)Z-f;g2xmdn_9Q z)zvb352>9d?CtJ%-$mh0KPH;_r}$G0g4i)DA&N9EADY_sN)L>vI4|lT6u1z zu6sQKK<+-JeR}|yk3~u|9`ZU{@;`=-=)~TVq$3Bwxn9$Z%xx%9L0Ocu!>crl;egO> zBAL)0!!|c?&I`wUiRLe-mn+5@UYD!UJs!k&z@E|x@o&WU8%TVJxVqMac;Y>V^el~X zbohkHaSOU;bXsLKP}*Q%;>;*OJENhGk)=4#yQhV zNm>(NK4C5N{O|zW(?I9mIoC2^W#ENG>#FDm$TH+C#PVqqA-I=}abaQEZg3A$xb?&M zo-)S6!OX8f+M5XB}@_F&ZKa}bvP5?USC6PkDwhLi!AGUsy*ZH0 zDRXTwT=@A0|DNReAd+(-*CTw)KPO|L&Pr1C$=;KnfY0q;sp9cTxK9b!=_S31iD~o+ z=>UBQ@0|(3Fk!WD#?q@iU`P<)Y%^si9)(pPG86v+l#?XH!R-)^S3bUpv-B5w>7lpB zB6B`wbw&|tj(GE^JVtY9(tqqy7t>P^)M$Gxt%9KgZ6fBgKxRdFVe)=0lponKibgr= zmp8qh5go!NpJX~!LsG9^@iQ!!)*%dRH-?3{bQ)OWgF*F4LrPSZIW(s-*(O{htJlZ}15q2kvRW+H$ra#1!vhQ)2tIQ#9O%*TQn#+Y%TAN7V-zl0eutWv<#%O2 zSVO0E7zbkZz_?k6;zcxEC^v+Zr~qD;@R9~ZgIKR!IbnG=xR*`pr`M{OV&1{5Chr)W z0cRZij7=vwk{0fS{05oS(yPSH4AQG{JWly_B@W6v`%g%zY<3cMWIWAUq+l~Od4PrU zjlO|)?YwK6B}t!&fe2Y}3P!Q281XpUYx<(5Ma5pk3`smjTE=ot-@GfR*(NHK()i>Hyh4<8#A9jI&h>SD{l9}KU|lP>fIRS$Qh!kFBTICOV|Nq%nC-f?LJ&_>3$o98J}WQmLpqbh`mtEz?U06F#sRl z*wkoY@calG6usI|`Hsi$JBOWQ)PKg+t-Z< z|DBKdzmtsr`~8Oe_c{M}<7tC-9{+sRa4jt`v>HAu5^}+84$vcD%qt`zlF!KR@f(S~RNnu>V>8rLX5VeRx`DSB9yf5xQ<}GA zqmj3C@A%(GC&2T;e~*tFycY2H*`dF3C{mMhg1D~h^fUZ{O1C8=#K-v^uIlCULe8Qcd-D+T5OT@z}7{Oas=0@iH- zyWpw54$)iU2`~d1wQP{=&1%y@GC>k4%r#NF*(Q|* z{KG0d!VH@Ls+fg;Sl(XnboriV@fEYUjRO?H$_t?`B_-n>iiY_e?J{W@%sUZ?27`}r z9PWCSp|H7oeEgafT|ke7K^1C@$gVdMw$b#6#~o zYe{Ups=iFqLtW1{81wN^P zM~|?E5ICbBEzOyTnKy50I=F0QIX2EDt;_a<#Ik|Hc#soQVPtFi)(}%YBbVL7-Tm{u zPQ&VvA~9`<6BM^rkl5jNgX`i<$*)jEBBH>S{C%2!iU-IQdh;{=1(*LSb?uBirk$3& zsH_ld)y2ho*xa*|ox_U@671QZz8}!b1-~Ai@4_#U`TL-Icyxkg-2%ruXS*NvJAdiy z<1eUUxgy0@KfujHUlL3_LH(C>QXw6(bLf{#FXTAc)ey%6Ns{VWM=y`{T6bXDS znwPhe$!L3h9aW4)I~nJ&c+lv2KZ|b$$vW0<-%f@DQn0QlsM52cf~spMH?PSmZ&TeH z^Q^AZ*;48}yEHuv)1KTLVqagr6xTLuY7MOKhU>tHTmT3VT+uqslgxwcGP^a7ag(#; zF3`Oprr3xMuH{kL0r$j-=zvVVP+(F|v8wKRio#!wz@g3qu2Y?eskr9I?%a`cf$LRw z?@C)RZ9bK3u1EC+-v@fL1~tB2C2u)c$0fLw(gERfb83e_ivgiiR(Cj_ml_S~js)p% zc3{XkJ}!l)fZ_b7yM_SKS;B)MR_TecNXi5Kco2_2#gDmCTU-wA5?`o~tVZ(j z2o|nf-q+-!{{m2t1pRlA--Nf>={FYrSOO1PdOaPWS{Eg9eAHk=Sq&Usr8j7lX~RFV z0Ii*@e;@uO22KcGrX4uS19T7AFt!GEf2n$b}tBBeM5&si;VGs{SgSbUc2{F>pwLm8hbcV+^&zZlqUBds8@Ak&rCCYPLlg47`$~Bs(~c!rgIv4_)8G zw8@SQ1S%5Qi7iBBr_sRm5pkVISp%KG3`HzLCl(m&Fzl`$Nt>|SN+6O9WVxQ)7h#Kg z@r3pw9>b^%RU@12*$KR&&tGk}$)ym-7O~etz+OY_ZSS}VQHQteE|=Ve?CL`vw{)PA z{!Jphzz#7+h2gwvkBNwa`1@h^^vvDqv!s{=r_&T;b>+#tySr=4)x@ZS4SF|s##ub= zpMcOiN{aRC-lt+~^WysZ=k$oO7kwZKrb29Cv>NQWQs}kW-#Omd{WJ9%Qm=vAYnDs~ z=~X))->eT}L{eD4j{i)JLeE{M*obmO+^~d#-&d%OJhkIf-G4p~>3k~7mJMLaZxG^_L-Mw<}E)M!b_hf(P z07xuZk6W-%35ZdoOC^R4g*LE$=a#TV8 zeG1fNIt+TZ3A&Js??c=^q>b)kK=~X?w5NA*JLyl`@pOHH_1D)(%Md8ncGK&%Z?Y+! zguC=(y8d1cZ2t0eGsrO=3q1*IQc$v7U!V=*CtE*>WV-+hoCU?k{+iq!K) zy#ejR0FT-by^F{n*-{GY7Km5Do&Pl{j>&Q`xkYDOw9?TB-lyxbMV5mafXXRhYaww(W(j7%a`ds|BM7U2zPBv6o@f zKIRmW1g{CaWAw80NIz6qih)9Rre4^{V$ER-Z*YJts;P z7*#Flr&viKj+S&T=1>Uhp{7SkrW%k`ytxer=9%3HJU&brOJa*TdF>D-?-Uit++aW) z1yB#eL6I4P`9!ruyylC-G4&D?gO|bWSLJC^{UpLW3BS&|1&3zKRRW zpp&tD686V1DxI8FZdeBvV$d#KCM3RrcfURTxL)+Ow(f48uQ%3&&kaB#q<~5yMY6}f zd`T7pqD+M-7g6Fj9h2Kjz@|>?4@!e<;~KELoa3k#ku+4hiLZk4Cbk!chSWxZuuLie zUxupHgx67c$W}QXmwbGVG>&E7KTPUsJcP_{tHV=mfSU0~2&_ZUQ3fZ=l$NWGG{+OD zeH#ZpvEu%5h>MD9j?z3ZD!JENvkQjy0CqL8PK12a0u+Fxr_bqwN=ABH61VyDv~@^Km?^A`BAYvOFl zodQUxI+YP{r!j{2(cUs^VjXz<)8U8~Z;w>hIq=$UOFys$Mx27# z2Ug7IPe4-4K5FUEgg?14v>ZO35s@h-$;d|DmgYJy@RkBJf&YFF!lGB}l*rLN3whZm zId9ca{7`|dJ(<%ss6=@!kckE z1ttdxFNPKaA?Y}Gk!ZGt`{Za;rTrIt16Yg;otTL+mYH4f=J3O%C#&b&U9H&X6`8q2 zZD*HTC=<4f17?BWple2pNMy+55WPfN)}LG|_MzK&+{!=V2g*#^ODC-i2_Jkhj6b*7 zdFDDz#;rk;-Ar!X`o*OG=Jae28zNV$q7@e{k|oPu4Vmz|ee;m8jI`W3tp6H^378JrK)7G z#{a-!0lp(_p}zFmt+w-@=bckTpn0=%c=|&J>g=@itN)Vk{@bmv3;z%Q+dJ6VJvsWX zH+!9ThyNY6&go;=`Vh8`VS#79KDBoc2!MoEph*JxR@Bw7_Jh?K5)lNvCADnblS|F} zHxsWAH}dAt`+?vYGYXWZ$i_l(sPF~{H59az?e@Xb3E|jf~Us+0n1i)($o?$rRG`7|ca3Lm`IT-#V z9r-nSpWxr95p5Z?hEj{SaX-KF8ijUX#y44u{aXvz+zMMzyQyq@*OIQ!ekkB28ai(I z3~r}(FOijKk?pO8m_S5xM)-F;db8g>J*yV(p*+Zh07~`n-dEU=*&{b4iv;ac+f^3E z8($Z%TiE&&|L34|H?Peaw;qIf^lRfrDdR!_d>Feezb zIoLW<%4}eN_uok-Am$yT|F)R6V5Da*KCrSf{DTR7hq;tU9WCDkJs5$HY#~&CsQ_9V zS}+n2>-xMA^bPA8X}Gs=a9U{KqmPVO2~YFYAoh6*{G!FVf?8yrd2`4cI|VBDDWPis z6b|*71KuhBill}Spo;VbG68S?{jZ&qqhGs+?|wzpvR@B(4*yuKDk+uT{QKF-dFR)6 zJNu`dKk9FW7E{AjlIF^k|CICoDd&AUgvHg(OP9~oCyi5dq!V+-O zk1E07)EzliiW{Vv75Rl4&yF^&j4y&V6fhtyv@?bnAQ3#R1I%iA2Jb)ts;o}dx{|Dk zeN?y3jhJWuO|)F17LA*^Btey8Q75G4>m^ki8hnT0rkK<>CWkxKhC*8s@!Lh&_SfbDY4KE>!Nj&5%>yQEGWdfC629jt(>q{qv$0UXi*B= z<<(}zLtLU>?(isRSUiGnd}hXfKu9rz7zc3K`SGlCa=5eK;O#BR_l@e8EaA(>%fmr? zhjBN?=8QCrD#5UTZqsYQ3)g4I>%E3K%Qmt_jwE>-iAKIUB z9}{NJU^>h+5SP#&fQ!gJn!a??YNuQ7G^*>+;2Y2qP$ROcC540%m4p?}mwQL&Z$aQb zKI!ask%4V6&>cmihOgi{P7-p{RV7vT+78xJVKkfp*0jpHa|s_sCkVyq80G>-u=#>| zqqQ65@C;lH#DHHn4Rsu&X4L-$_y&C1$Q?t7pH(5M}O zuK-30ZXr8yR;S5+7*U9@B!eQaEQcLpKTlY-FWSs>;_r!32$eQPeh=k$j@px4nz#+c ztnJ}u_Hyi$P)g_+a!7^Rj9oK>Pd@Ezc)V<&)CJVRl-KatR>Pl_tW*7zXdC9AFmL#J z!&aF?-SBmPGufV5=V3!);%MvSbh_OsVeA7vLCa9h^_g{&rx~z<#hl~fT<|=XHC5%Q zEawh|*IfQvgQ4=svnDirKLctN%+Vsb=0=Q?P#W2#<86VC;nqxIHx8EyGn52c=r95; z#rXMwK+K4@Ei!6@#MW>If@mMR?0NY(Oo|>Rku$%NWnONs<*R^pAqXDO)yoW&rQ?qZaSn^f-LoGACk>H|_s!v>iNTCc~b;+&Z0QvHKUrbcmT^lt)0C6!!)5gKTX);x!o`MOC447u~pT z$ve)B#4r}r(s4dQ?>MAFQ^DCd)aa1#a}&li_3a=WOxx9~*2`1;-q;v>=d?U3N6=ygE*J=$#=B<-^=BrJnH@*J|l z=&NYj=R(Nu^Bl;PQ&C<^huyv?8QJ&A<3QEkW?x1lb}HoyIb@{)-l(ZF4D7#6Pet`~ z0bRpk6^VD#gw}t!>87kvmN%2iF)j+-#CEb#Gv%AZ8VMarro-uw17UHAOf9)*umZAVa&HW!dAjMjY|?3a@znPo z^a3%^$7_uT=owZk!-9naQO_Jh+%x2^3LT{~Cm|xik5ixyz+2z@^e?>Z9vlP3>z+B$ zoJ9%u#tFy7r-0mlWPwfZG(vrrO?(aEi&_DcXXRQ#eX$SgVswYbby(3|LktaA$8L+5 zJ1OX62gUf9a9?a?t@a}Brw(GRPFZ7MrNreo|CXBu*s=mIJzWB;k)ijzM+M=Pe?ouo zmvd?xAvMBcjajjRA-V8Un1K?+O2^!*>9S$#lzTFuY$VI8W)c{_1kMUQtRv46jkpKo)D4&=d$7k7i=KvSK?^6tAkFJ#9KH!R+u?e+ zfx4R?SiPd?dAu$W-c)W+RVySE@Q%e+kArdj95qQgdLSio(Z1_uWDmG+uzrC8A#|>A z&!8x}zLEeY6d2x}BJG>#CDuf#W1Ue+{nusd!}c#(7nTQJ7Jz019wvmH4+>wj&$lYbiPvIqit%aF<{o+1S! zD=?xI<;BE>ixY@sRt8nhmR(40{_)*79>IY}OVwj*i@!`AT^b{o6B-FDXKPax9CUca zb*1K!Fia6tVru0^F0;N22!IClkVk2xw^6Y+5oeSA3oiwCj@#Zwy9&_11J^^>|-q0DC*} zF6tCfx()^bF~2Huf(>!vaFMk~Qz~l1`b^O%K0M9HL)^kG%9WADvHXbhj_HX}+*LCk zY*af}lH$iU$}Wkrn92`I;gF8{+z!XvPCj(JqslTAa+Xj!?@jcCkb>Ej-RgolYnccq zT3Ro^l~i9F7nQNI__V9el3ykFIdk|W@==M%jyzwNQmYlP!Iv*>7^cA+9HF&fLdOPn zg*Txf0P-}GghDo=B3KP5rfip*X?irasfW23K3&4}87ym}@=#J3^T*_HVfY9QSPo!Rn?~^xDJIN1-mxrE!DaXJQaE2GyROO z;C&;fZ)K}onxhaHo&)=K=p(v>wX2L^Fet5+kaZ&BH10Sf3SPeK-Vg|)J*xH5eQ5E? zh(d(0D{Br|ZyMo?uS@6SkQlr<#cZJS(?5_y(-rH1^p{~*1E~>NaDmu(#a}ig2Wq3r zSSt+^h|+Ox@LiN0EjI}Dl_u2+GDKSVl)FVRd#z6S)&HIU-0<_=w z#?YHtxNX3OkVjc5uFCDbtw0XNbSNHZtaHe6z89C*c`o>D4r-xi*q`Kti^Anz8zQNW zod^1p>b@~N5YzMM>Q!e=yQYlKKB?Am7u7n52kkD`N2b`uh(u#6Q3aB_*nac;fTR=I z`GP}Q$eN|w?QFCU@+v$dtYnGwyu~)~veI#uQ+Sh$oGRRkzS{D$++~>CVQH>=4Q4fy zAr3Pe+}mTOFjNxqk&ao>twFm``P^#^+6rAPL26A7ta%VspGv&m9p-M4^Ue#G5rh(y zXI$^pPX^;GRz$7w^j_PE%Y4aFKZx(42^9ARHY?hgn$`nKqkC;7NVtaNk=tD62N;wxOnUEXJDT8o)HF*u>{Yx2iqI8-i$BTWl zkf&AX%~~?X!@=_!If`HraGc3SCs~Q<NcJhp zS9zGnR_&pRb5rY1PKz@k4%&wf#Y*c$(iHU5Zf3Pl(%x>l^a;{zx)7Tm42 zaTUV({N8uMh6mLX8FyKuddlL>UWqI$0iK9um*4ahmW;-IE`Yf<(i`b1YO< z*EV!4Q-+q#WZ$u)%-e|a9>{c7-3WINbVcTGgvMkwT-PKylMAVHd80(wIZ}SwEo%gy zx~D*WcAK%QqN)%@l7_HDdk5rkY;=n+O6Pa@87#7}cJDxC6bh6S=Y z+A0DJS`dS?5SLg> z)*{h0C*=&gRpRZPj;)V?W@JDIL)iqxrb4r%cp@;1%Y3YL)1|o>c$id?8AQ&3RmV31 zCCr9VrHM*-TljT@WTQy#yRB0~A2c)PBtmDk5}3IL_X(RXI4Ocb4)I#zle*xjy1FS* zYOxN&s2tjAzE^3E^cTC0$kREP;aeAGJb-DY#7Sj&O?Fdr9o(DXpi=XA*yN=yVWRA- zNbGoiTY7#KHw6Z3m^Jxg*W)VPumE6YOY4XhJI0^qk&xlq`0}7nACtV@^7>o92kUpt zrUy=ur?)7cNXz6p3CFNcjnXlZ##9B!S_vfceUpsOilw~Dwl!A6!8U_B z6VE%mSpM)5fy6cYO;7RO;m$!vw(QtEpeEdamoH+HM?dnRxZG^m>KLKjJ?vsUcf-vj ziST`VSZo1yjKs@MhFig;6AEm6_wNm#l@I|{rLdcJ5%W_qMjpG~I{IdpFzb0PW0*RV zF)2Mc44OHwWO$X3r=EDC*1U$?^fl|2NyZRsQ-yr9=dL`j_!!_Hfx&;G~3f)*sQL|V<3sTnM!a(AwB>F9Qm9xyW`%#j|kLLINZIc1^!MsE70E} zY^G$_StFn}Qv;XY@e@P~5hiP^1O0 zG+`D+yWL)UW6w^bLCPz08nCSJ;^z$y1IpEqai`-xEBfvoGi;uD=}*myGT+lmh2)#O z%`I19BpG=cF;AIH;l+%~OQStDMk&(HE!GC>`{yNT z^=vtcC8enkHOdS*HJ}Sw-MyBVE^|`TPQ;RgM0nT1!BiSUnm_XXkvs2smT2ebRN%%L zIy0jApF33BFy8m{6jG8hhq%FdU}4}XI5v<$#9&!+lmDgfM4ZKZgylvovfj_L&$9); z68JjF-j9g zTdQUx^?)t|^?DYf-xFtfCmA})UN%>=4DEV4rhON<5j=V+(IBG`SH~=I%hya~c%aIe z$T-7=>pik)WejcrXOia}qho~S!$WwR2-}0B%Mv`gG!`ue;!N@Jo_F}>1~;1#ctvqI zxDO;!l%R3_bic5Q=j>Q}+4_NI->62!VtOc?b)Z~iDSx}$9!*{|Ug+T)lCD9O3XZ=N z#waOho(YA7ku)O886t8S1&fNkqTwED(-N|n>b=V`5DFMaMAabNmB(No14`3O%$(<& z5O~AN@)r9AgD?k;UYh~D4zFD?l8c%lw*wb}Z@{?}ee}J0>^+OS7g*fAP!p)u#d*g= zU>6vC-I$8&uKP%%tbMPxZR1O>cs<6_J4{9Mr~cy>z}tsM#sxZzP;M4C=iKo3?!~|2 zc=Rc{ZwlD8y_ynFq1V}ar~O<}N(+D)qhO5&_pIE z4Us^Y=a7Vt!eR1SsUaw9U?|XpylGlc#4X> zUjdYq1t^MX$uW>5PFw}+AqOjN9r7r!qtpz?E{d&zL{8&7XGoZn&;K!*Y0D zn^#)Y+scSb?)J;SB@LEWY`~uH8!f_p>}g(5Gf>K<6o!AH2t+?A21A~U4obHO6{!j0 zqBB_sE0jxkw z%K)ne8*3fe2x!?T9R)4|=l8RMi-f`y4)2W+juulVL1tvIB5D08n*t+VO0D-MB@-``dQkqUeykdLK|OoF(DL!<<261t=D1dl%`g>jWCJ(IB%~Z@X=5xM6{KEJ zjiFb1Q@S4x#c*hm2jSv4-MhpnL^!o=ekXu0u!H38@U$4BK6Au=91(}+7Ft8HtxjB5 z1~f}xynyISBl>WMIj>2n=5%3ww#?8R4K(|4O%eshvK`80E+em1w};afx!`QdVpVXB zT#Kgb=~SwKteV|6n{ias9tLm7%P3A-gFZtH5XEHf#u*pSs1BIYofIimTn>oise~lZ z#br&bX3*wfE5<|MF3NPV+Pa>^yiGYF-(v0m-bcyOF$XAr$8(ca%EMT}T(e<<{_VB+f?tQ0wYB&SspP3E3G7w$c->Kh{`( z39vWy`5DLigFf#ld!h2N@Kx4RINdsT|Ecrm?Es`RujDQSss{Va=5jch032oNe_~;n zM98<#bCC=1~Zhme&+18N~2Ar=718HSq0b4G5lAsuU-USXfx33MR zyI@eb>Dcxk5AG1}5aTk{sAgx%NqjgCSRUZ=ym*lvCPOv0qOUO*nl8ZOVp@#gJmk~j zF<$~ljSr4UZIL7_9<}RHiz1vK4rNgiWqG6a8QwakRTfTLtHDQ=0D;DP2@HkYv zVKx()88PQr^YFHXpr_;BbXZVMf@0e~a8JUWEJVKHedi=R?d*4U&+Pm}+p)WI+7T0K zoXH+txvwWsMsm(VvlGJ5U>0&4hIT{Vha$Y=?;yG8?`>}+;r`M4?(WWh{Xp16MT2od zxBUh%&+X|un2Hzi#{^6@%7h1@<1qrWc$#CXFefXFG)#%V5$}hfK@8TQ#%>n&&JWq< zf|(xBE^pnGEEWmH?JEwICuQYh7jBK-9I|%fp-Wu=Psa;dFoopY@X;oon2W!?*AU4l zB#>b*jYdqGM0tlSB*QD=$;jVD$NI!0yN=*}0ZT`>i~o&C>GqRGT-Gz4AD# z3bXY}nJp5+coz(o^L+Y3*%%2*K^ZJBs=JQDXjtognhenN8=fETbxz*xAN^1l1nxg6 zDjby`(|QQKkla2+%cS4k#@4@2UO|JZXDRV(BXDE>l4!=us#*l+8Np2eigeOFJnil_ zTwSfT>!9h8pA5tyB+O6o{UA~UtCtTxSvN0C&MPl64{qJZXsBRqt3D6arh)`OiDeoF zse@ChR4Yc#1KlW$R)Q0pIqGohylZqLca~q`X6qzEQGj^GE{}Ikb`CnQfErwDUfk*c zRb%XCK$de$Evw_d=P^o%>a8D=&oD15I$K=c8fxS4DJ%~Q2cD72FVxOHOPA(#gRoWmOOdPTc9Ey4KLTwR~pOB_Xp3O&mIn5 zsQ}HGZ6ER!PiaahSgXdAoV8eO5fNMY2l+L;_kz`B4K3GSLlAVDZ;#r*9jIc#w!t%sxjVKsb;Lt(Q z4x-1xgd|E$M!V1iT4&%C(`Ol}*qA=&nN8=JKcBA-eIGo~`02{ZNI3Dlqj^sKqIJtm z6dc`XZ&-m?oXew|nNFTj_k0w7Kf=tw=AnL>(_|A=zc`JMC!^*}b({iR-(|!eWX+=D z0@!t&os4t>-1xP?H@P_hN+B3F`nB8XbVM;KmQNB&-wpDZMtF>-qp+g|1dQw5ac9lZ z<&NXDNH~w0__QdL#>CiK93T!EOZPoALk=_XK+^gZnzq=r81qlGoZ~6-RgsbG;KApt z(v;yqy*?@n1|!2oU?jYzs2(*gdpMfhudx$Lt3XFsQaw_Qo0}M7u;Ncxa`ceoBde13AI3@F&GAfu9Y0 ziE2OMnf+l+%P56Sn*f7Ums(90v|1N&`DiFmcaXEtXTDQz$kuQWQ2Gh`*Wh^dcdKd# z_Edi77j@0Em1x>F)-W397(MPK9HA(*4r-UX$LAMk-Gfepqg2`Y&Th#p^_Etubo3Qm z!(1L`0aDUB^*O~N9c;Lxg}Riw4xKaWmoP^x^d_a{sDb2)^g`;KS$y?b?~u~I_mjA< zhgvQb7LyRWW|7=j7D;#rxR)e1r`GoY*&jKa+*NLutW{dFwP@b9$Viw-XvBVKCTq}M zNUrkZtw?QjYrqHv%RW(`__E`J4uE1GtQW+kll?@NRyhQI4Tx&Aund!q)IO{eLS6V+ zT77q2%3F{r(UVN9;#o_CiIW1<27%I4`L$OO$!bYw&eBtD)p0}Ej(zce!k6vXd3Ser zg$c6xW<2Jn9Eyh1v(Jz9$6LU1)G!vza=4ie47X9oq0HklUd&BX6D)<<@Az;C{xUlG zxo@jP^GF&5auD!hzQ~=td$_xQzSnUadfC^5-5@4@BkKKTeG~eD-_{*?wRIw~z*>Ly(UOM((sXor*<{cbXu+=s(y&w-(j3scJvf^6tpa%o{^e4q|0 z&st8T0)w2-9_cRFyR=PAJs$<5G-dvt%?!6xhkiU(TQn6^|~4_glfWCH)xK|)}QEX z!5;_pL9|w7c&ABF2#mp%c9OTDmv zCw$vDP9HQ_BZ)72EbhTqfK9Emk3npk>a5 zY13P`NCOp2sIQ!Vov&%npvkdN>z%ssLQ-EM=w2@9Dxt4=7v>TAm-BPrtV-z7DTTEO zqd|Pn*Uf|1z}8{;uh5G}4ki{4NX3RwKV;x>{k_;P$8qo{1BrMjSm}%yz@VSA%t8hh zoPhuVmeZ4|NLk`6#2Grgbc;$5KPw^Fg@GH?kS*bqUBwtBASoQ?Rio_CNmi_g6c?=F zZPL7hG~|x~bHcFOc6CkfZ2F1pI=z{Wje5NfKVso|s~#;ra^=KE=FF82=)B|hYJT>l z2l5pp(3INZODsAabCZd9ptqh;?OfJnk*k4>G*AeJL{Oe4@--9!PJkc`N5Fo0f=h4V zxt(N;u-)6?Wk$ZZjmV`NufxmYE=Kq?{EtFfu&LoHz2Ts+0r1j;qy?f*8fQ=gf8Y-d z#v!v`s6&)D{@QWB#zW_{%T4JqcYau^H6`m8XQiWvcU>Y!kwdpUme5aM)-cb=CGQWy z9}C$Y8-2$6cSk2^K)aAK7w3oFGY}$7eq-GV*4Qe}vX@$-jJBZXqS3xs9SZlFL2z{Q zMVePnoy(KX&YlU9Ow^rw8O&R2XQegkJTujkdfe$wlbHrD0l zB6x4kHG>sGjsIEgj!IHUd~lx8`Fe#pQ7jAdtgT0y@R7v-L-6Db$z%f zBfGN3#>sBt4d0p8E5+2+N2_h4^x|w{)?OJ)j=keY7AYW{GLys#IJf~`p!zX7_r9|J zuN+AB85uL@z_QD12>dTJ)g{_R3mJG(XLC5M6xW7@*W>l{`^aJ(5CiMyra^tLu4-B7 zOJtIVXE65=`K&-MU-6UIbf0Q;L|TRGif0|amy;856q^VBNa2d=Nr``7ISIK6GCW`6 z$+vx2d)ml`;Cao#F4>fp-owJ%%gH%thu^(?=^R}1EONj!j@J6Qd3`M84{G=TL29i_ zGjF(rDqAs+QTTq@%&EajCJkmEhH>u}eaA2gkupJ$YPK3~Vr{){ht|8gWMIGrJ;;r2 zdno8u2y8gYi`1wtybzq?brmu+AOZXOI?o#xi-E}`e%Gd8W(upJx92JuL0NH!#}I4WMxrMtWhvW(X%@Ea@Dsw{*|nYa|d|81!dg*!-NMT>W>+y;QCl z|K{aOgT&qQkaW?5qMTOMDDkLTGasinDQD6&{tQk+O=@yYH9p2i$^`C}u65U=v3kk_QBfFyY&RxInFYlZFBa(&2cWSFK4?4NM0{2F6YR>c#&Hh7m+z+c1y|F>|MLk zCaY|$4+^4uXqYiQ3jV09%l6EHu$MSIRUa|V(?U=S>TP)uZO|jvp{0=MP(

            5d6|TI_mBZJ_S1mNBBc< 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

            |+zksL5I;{iwLs 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

            mE8{XZG4aWJ2teE(j$t)UQpn#6uXEQa1GKd z+diD&$IiaN_}RY4V+7Bm=T>|i7N`(mbP}g`X%MGM-M~voV1x_Kwp>Ri&LiBwtB9ar zH9ky(4@K$I5If;Q0SRYf^9qQg>~%i(ZEsLu0H= z9bN&SgU$+LLp1MF2dr%Vw~fZ<-1y#XAU(xLclSUVR=Rn6(O{R`>rnEH(Kx* zV@g-Ld0=jR0~WxmR;$^wxA$!U1_Y2K?(k=;r-%b=6K_AUp!1GPw!)VU{pSJT1XsP7 zx)z=$?V)P^XcmXH#y50h8|R7hH~wzk>+jr=)3enjAp#UC)vHBlqOX7V-1e&)gfzWk zZJW0$u?0*FKUimZ_pAfdiVamqfiETe;{QD8#@2s!WYxqDiXoY$o%;`JqBRhboU)T*~*NE9Qc9bhnl6of>yB#S4=}t=b zw*>HEMs#;lLY_z{!)pPfcU9c^a*oKK(M?i_K&Intf1ILjKyXI?4d%!RXVuAnkxm{w zG8ly$vFawND>LeW!2yh$YA+V?`EP!d(EDHto92G8xE&)m4vZM0!VqCZK0(-AI}7P7 z!8c5}Ho=q-@L-8Qb4Zvls1b%>kqGf3t3)UEVKJ=)2l(J%y$)t9G7NN~SR;R<-yfmC z2EpDzc@#-6>~EB%lzYS_lg^T}=G+gIp+;h4`_7GKK;tXe`0&Cy6e7OHeLJ=xvOe$2 zzPSd4kZ}*2ZX0S3J}wPM^KgXYJ)8#DuU*cFJ8ehTGG(qKd=z9(JXXXJbTU~!I@+ILtL&JAV-p$}xX+I2|`B{&uXwU`~7BMj@mHi)*2oH`gWrYeVHg z>K4Cy8XsZ776MqVNs5uY8x_T*d>pH;K=;@=7tJiTb=oCtfCiD8iE+L(qAAi1D50*J1rl<~(4x^$*gtux{wm4A(M1!Y@nP*}x#p_z8OR&qf;Y?9! z+j7uKtl4I!(>!wT2V$6P z`9<-eF2d2HLcs2{Nwk+Tx~^Cz#`4ewA0;_?R+;CB-E}p*A#q$IHj&TtR;}QKXd~~z z(x})Dwt6vH_lsj9#$qV`HWsa&+TpcvW=(9zEfec$I&M3yR4L|R2)r5_#wJX9+|LP^ zZAQciU@Y(mch@fM&%ONbKoH#K?E7?9eg5JmO6l_%`K|QEpENc@BgKSGcE5^mS%Y~N zLZ1`Y#P|ZWht!d9186oCu-v;%EYB?pt?O3maFhK%meiX*1f25#At5hLVUtB|!2``? z^aBqK@lXWBy_>eIJxO9Ht)O#tI(zFfL@dE^nv@XBh_nEJCIYYX7L~e6rWsNVOUv<{ zwWb6^dD{6d$%F5rX>#op2js{soz(FVumlOvV(1sLVRh@!jx6c@zwpk!ypK9nza_SP3VhUrQDweYjxJH`*EV|CYYIawj-j4XQBDt!OBA%#|?AcI3!#0@20zB2QT~O zqZfh(K|GEZJadO{U=pS01ww?`p+=)(HDdSOsVT^#g-}AEfGbyBJQn@3YVj$FhRWXZ zY_PF1YFQH32y##K&Ey@Sr)cAOV!NlsM=UBh<72ewYJx1q{ly4R0#Tv{(y{Z<^0K92 zqELve4f*Y!qYRC~Tl`PW|Ga$*Q{34b5?yrVQN%JsO-t5w3lvkE@UZRD1GJG;g+qaS zB&XFFZW$$u!$deiL_vN%%BL7mt9i(F-+|viQ5aO4;y#BSo;h<~d0>V**m(x#@9TV2 z3+~O>^JXL-cxODHEC9=b875wcpPjqffk{u4Fj7_>I%7Mw`M;&Py*dgvbrQe|R1;=N zjzqHIWid(DsXA5J(pSbPD-YPd;^)>^gY*p2bHIN$X|$&P!6ryclz48lm?YHn8{)Ax zgV}c*@eXi=!ZO|xUJ4%$jt30!qukl8ks+p*Y@U}DlPB=AVS|>mHtJG4Yd_fF4mv>d zB6(meD7mmjc=of~8ijI$SGQJX>vR9?IPUlYH~DMud^LOC*iM)-_J)5*eC056TMBd2gF)G=sXwUwPD5`s#rQv*=vYB zWTP6oK_|g}_h57YUaFAawEw9Xx}e6{B-0@77^|)y&X-v$L=(RAYP{d(Q9o2>xo15LkNkGfm7*U^*U_eO}PC~;3(BXj#>z$M|~ zdb%QuQl74PYWs=zYlR2-HVdN2f?qQ%Gi2^p>iu3klPbt*&r$sm+}VJQHBzYan5(+VcRLqQrM&vRcKWGfpoY?doHY z!g4g!qyyil7$Yziz>q}IzSP-J_6sz?KSz1pWY>4M8rtz84g7>`!Ko6fWam>dP@tBK z9Q<}NWqHcv?uuhqMCln78YNx`I4^#(F|f!eJ0}PN8~fttNo-NH+kXQC#nN-^*4wWi z74o9sd80+GtwUbaR@A<}puU-@cH5~NklPLPsBW~P;`nqbJ{cz&9vBW-e>NrBe@#pe z(!!2=wMU=gk9 zd=C-szC!8CUI3pcmSxR^v+5%@2LgGU+nulo`t$Yh_QvjMu2zKS@NSA}iZYB$H@+8Vxa3rLV{sF$u)kh7? z^qtNoOjGQ@6|`34(-5B;I3B)-8^mAHLYS;vC24lCKY9Nt0PA~JtD{e6hz5keaH@agbSncX!W2ry*B0q^)%KAe{n-r#J0X{XAY1MGDzPP(nFGEm(|M%G$Zb^{$N;lR|GvL`wI+ zi3cGyOS`WN7TQXE*w@6_cf29;lj>a(aDBYbf^u#z^){DjWVwb-~w;m)xO82#|$XZIsvrJfqkWL75ux7;} zTzhTOI=V@n13TjkE>Mt(Jp(e+C~CbJG^Pdpsx!Hy|9+IIcC%MF-9*K0^POPllUlbo z^pGf7$HH!9RNtkOb~V{ z4q&}kZN7BDo?QUiwzAj9d+juj74WGLQH(lY;rZ3D4HD88kSi4h3b{Fgk1xldOO&P` zLGfAIH#Q(ZShHlEp8to`ZvLbXA&!*h8N|PP8w2-!!E1%okn`o;x?`S8o}*rLjYH7q zVQVMqFhf33PKQtF7mgF?a3WFcrJeMj;qd9yH6+{zgCKOdiFoMn?Vx#@e6BgB46M7T zHAB9WNzN|!1A>E)QU!kUYh#_Bkt?&wJFKcvbzsCZSvP1kfm*kjFg?PO9U&Ngc77~b z%(!Zw{*0Id1OcM0j8qi>VZgU4LM@?cjrLP82LQHLPjid!j4We%fN;C-dA=d*yfiz) zUNC3E%{5h2RZ0{ zxNh_FyczZ-;<5I+@FLu#$h{i|^f9I?r_};G0gor!ap{RYpsRy>>UG!0&n8nwSR2=Y zJ^^o5Iyxb{WU6UKboCqL%u6@Dzg{IgEw|17f_?pnVW~d^fG0$=U3nAdAP`-UTu=t+ z8w3lpUHbd)5+M&`kM_m6J3iED=*56SH;Ry|RawpkH9fsvYMH+llWWl_&0`?s#e(@X zzuVQ{BM2?xOHY{b&z)L(XGmzip35E@6M?Y<$&yU;zSx?StfQ&=vwL+{?n!i4sq~0f zk~X&MtsNCt>QXDInwVI55F#g9pI4sgOZNz69;Rc_ncLJgEecAlZ5?Km3wW@@jWu=v zwZ+)t?=N7##wHyhCkqJfCb3?!6TE(Rr=KuQLmrnytMeCt6@0tG#H>M`8rx1M;pNpa z48yUfMfj9T4=0MFW3VXY-8(JwirDn4aZ@6BhAn1amKfKqoZbtQ$;@jkmn1^8jBjw9 zUmC~1LZeuMBp|m6Gg`H>QGJ}t77xo98Mf9=6c4nCrj3!_rK7_td8)jjRxD7SuS6#p zEeJ&fMZ0SgQR}?NiWEzrB9+KZHHtyXj=GnvXGtRGnUuX&-&U-`kYe=Pr4b>2JDx>J z|F8^R6;GQvy0z;#%+oNI!kz3DcUs0L$N>A96jQ>%4vjG5n5GhiLYXQ0&KVykMeqdE zp|fcReb)3_A$vY(Yb3H@nkgwT9XMRjT%Bl;jcqR4dLZIgD(%(m@@TjjgGs5j5}OQO zMq$4#^vF}vIF7)5ndZ}IO0ZtiX@cEsRaW^=POb8**fs_J#r62wkR@|daY*V_??Z&Mr#d+kB=t@S9olA zy<}EJGcw&G5RJZIb??taCB$T{5n|CbA#b?Oim>*D@5tT2SM;9Gle}N zl-`3Xz5YjcmK)-Ib&b-XAyXW(3zS+p>5AtjP1(sK8!e2`U(@4MvCH(K4I+goHBydgW}JVYV6`@!VJv z5lHqzsincJ+|nBA9FGF+%ead6Fn}S!=jl<-ioJAB z2`2zK2iBPzlPBa;^D_h>lWY(uD1r6EMb`>T*i9}1H`^SWpO$ai*<`>DO=#;Esf4Qi zmlt6xAMBfe@1<9A_1bcSAv>drJY{r}vWzH1ESn*A*Auy46)($OK8BS1jc5y`)T8 z;|n=?-VAsClVq))j*zf6D--kaXEuQl5K&;EXyC#iVy9q+6Ti&K@@dd`B%Mz5PKY0$ zP|V#$<#MT-QA9V9SA8{J75UJMYhQ9h9URDYCYPDp2!ezsJ&<@Vj#*Ov?+j8hj3nW8 zlf)8~sl^1BdxwKeQamXtJM9W`_P;T3P5mlNyyH9=uTOf7IfbIczFmtu>!&}~#4xPm zHl`74h3VwbQ8z39eWNy7F?wsQI!Olc{a==*+Di62!G&nGnVP@U@ z<}U6Wm0%V@(^OJx7G?5npIc(uGH^@YlI-y^Eijpmo-RZ;-{=k&HJ{dMENsvb!Bja@ z)dUBbRhI0bf44#vavpx^EpIB;jnRs7-WWy)u27ZR)w#@&%|*o!zty~QK&>I}zgOpV{SjRvZ>z4BW zMj61w^pK$slt*0zg^X`eC>x#2{vnej`WK*3elZW-ocUmhnOs=72mEOw;5g{ilSadW z2<;G~Ubu(HlB%VXh4+XPL*YiIDxzi<=*PDroO!~@fELx3YhP;?Mu^oyeQFctXrD~a zd*(J!l!S*aS)V_X3U}MH2QX*CJXJUa$=LAXNQMMokYgd%Z8$KCIk56i#*Fj;%|PQ^ zqH=IKcj3U>lPNv0R}cYqE!6p_&HmuM%D%nM!O5~Q7m*`y^im89<=|?G4S<46NeKW+ zth^yZvJ7bk{2CnF+G?&ta0nmn`g_nvg{7i>f>7hJ9^FlAH+LCtx6fiQnx(&annnl| zS#_@GJ^XNXlUZPN!xLXNd*&w`&iL7zfW_tnRd~KflE-dwmyVyx{KlP6`)({ znC~>?qt0f41n!y(dUYwtEvHG&Zgy4uIJdC2Q=qM zSo609e%Tdnc06=TmKSCqP1%lL``hxn=FrEJ?wd868jg(WuIOoixq%HuDV0&<&*$#o z&I^l`KZ&qUt?EFv>c3n4Cf{dTI%B&n3O_Vob(?wH(L?T;IrIrRTA@nNDr%#nt@&-K zoyH%~7XUq=uQYm{XkID(PURvt^>blGZW4$`Z_V+uZxg|1B+FG7MSkD*=6 zGyXJS2t?X1=KwK;XKyj0e|`h`9dTY@Q_IHQNTq@nmfyx>McX?3=GeDh(RO%j#05Cd zT8zCN0a|m!TPwF~WT`NjaKy}kDq(uECmWs^U^**^kX%a6Q^6ZBvWb?I0K$5+{Bc*W z5rW0m6X^(3n&smBl(PpyX+u6jdC z*@jidUX>nXC(Fq6wH=sQz`g?1i4l!Le<*LoOTx`xt$p^Tqz(2^>~rq#Tn9OS#azM` zwQAgP5XbTDcV-YOP%ZKU5AIZMezS_0y_cq-dFCL8P`yktt64XV{ zeExdaKP|YGNaaCFoo~oYo>r93Awl0=ny8whowgc|-M5v|l*Zl7+aAH83Tprud>Oqf zc)mYreF!N3%a2F@FQxPCm^?N7Vk6n@Z<7%M{Bq6imWL+*Z_Km|sz;q|BP`bXTneZJ z_kT?RaYm7=Gystaf&I7*1HJv~E}7!H_NEX#?K?EGyte1Z!AvboPm=jTf79L%Lz?1^ zbvo0jq#4UV=hhX`oQ%TDPLRl$#@vGP~CZBXuH#b+W^(tURAaOi9l<(m_r z_IZY@N70ez*)!vo=JQnl9aPG2FcD%5v?Ab)5T!d_6$~vxTJT#aZ-ET0_Z!4mIEJt7 z#ZvazVuymVE~$1H_XXjX6*C@~v_14IB6w;AyHHIdd|9KKA3hJAt-2kN>d%>fLTg;F zns6{06B#cx6dZjN8+9XRGPB`4bpbe6*a1JCdpJ$0H4hUV~yAB?p+j>*PXArdIR10xhkQy5K*F#4w%!(e#&$ zAeRCnjbw=lIY>IXv(Q(j<|k-Df5jjvI&Ckh0Xj zZ6k^c9l_gEsgGNkNt3mk(m}v(#)UfA1Hf2X6+A^B7F>(*cN8&?iY;F(y)&$_DwS=1 z*VfCV#m}tuN_)gKHa&GA*L1;6VxtY*`SbaB?hV-b z3~Li7nbv3iw&OPstl_gbt%(ttt8&>S8U-~78Rj%2X_`32{UuiG3SiBrB*>n^fq4dX zR!g0GY?zH+2*m+VAQNPrUHPTxqLHQj*pQ+v|E|nKXSnHDjxtVR>e@gqcj#9f&-Tyz zzny+1Yh>Kdxo?|0(QwW~&W_55j=E9(IM@03IDASbLlSl?gum_Abk<#_J{^qTvIFZ% z3zmA0-oRD@4hTJm3eVar6V95aclnKE5e&*w#*Z5*P#l&I3+|_s)bLZT!*@< ze$O$_w@OG#w3+*tYn9(X)e7T*-GsXnWJ8ykN!4X!jrpX}gP3Zm> z-%FS}zPZ@n7o3D@Oyi*^w?l%svw}sTX2s5uwr^l&InhYQw;Tecix)X=KPhUYUMpId@VblBrz&ddsgkMs%@7)VpMW&K3~+n>?U0&bhL)tM%v-dm;TUK zt2Eq>-Q!&s=jaANp`_i_MqC(==V`|(8-VdXne)}+X{zG`MszqI*o8JJ3GCDr#+IEzdxhlFB{}zj4IqoE@hPcM<8h62 za_3+TZ&Cr&*ahH%?^W)*>7r6^>Pk7pZW&G zc}V~J>yLb&IW2ACpyWP?SKMw>$+7|05`rPktWHV;X(~3lb$r=^1d5#muUJ}iE)Fi` zP33=wQ9F^U9SgDnIVIOlJ&kYSMBVGC>aE1;y{D~DMJ}+k$qV-j7`y2*7JD8kpVk>^ zteS9FOy_d24{Eite-FOw39?jmBin$_>o1Y5yy8YwmafWo4M+-E%>V(#p010`aStn< zsDc1lh4_Ns?rULE;@XkAf$@v5^(hdhgWvlZGO#c_c&{OV{B|&?9I4{}w(PC~vQ)rl zB3o@UA5?kFUf#uEX%jh)OfTw<+r}-BG~iIY#epg}=ccNIo{|c`!x8n=bCX)LCM}1u zCxPklA5vkHO<{^zQ^o=)9=Nckwq8cYhrUZ(1>g}GX}1U^bk9Tw#Lz^&Q8i|yqzQ%=jztWzQEdj0wo09{BbZZBto8|%SzzE z<_M3zpA^!y!*QO!AHgtih-F$@@yyn{xn_B#c5TRnDc0L0x~PMNK4?(| z!=@)!65z_BxXo^g<0^>7ZKa{%x8FaGi^l%%Sw{N>bvnTzjS`cfz)XowF;zTxW<1D0 z16{pLNkXEUDm3M23%0vv5sjgVBQbHVsaRCdhsvz^S-j;1Ax5l|>&6q-F;%#Cl#lqo zT7Z2~;s7al@XyZQ$KK!4pWDWbE$@bBW6RI{_e;H82PEFDUP;l^b$R=?cXQ9rvDOyA zaDdrd?tb4~kY5`fpXayt*~Oi!Yiphj-{yu#W6x99O-|WdYnxx1^`Dt^KlC-f#A8=q zS)Lgh%-)RGAK$ZIeQy?594lUrbYhdmKep|!n&UBNM-K5sKHpHksXG|J>p-&&@+@C7 zbQ^ou(wIh29a2m0cUJU>vnPat;odkCPu?i7@*;U{7aI@-tO@R=PdB9s6+y~i;M z-c8Drg}0-sEXKcX7Oa!3p^Of+y2b@nx}wm61;-`$4TxY5=eEw(v=^x{UKZ!ON)-S zrQPQz2@aOEsS{|Qt9~lWO!VEt?AqpBVl*}-r?srj0GAZPxOuR~H16Ez?!fPkFT`O0 zMb5XRt8TU)#_1K3ed!+sKdUjL(~BbuLNbrD5)Ol?x$XM%3xG`fNV9WnnenSFX# zVBy7PLNdGCbY0F1gF1#iJ;T#pFn>!b8l}sji7h!XvH{a|tQXP^m&XO>9}YGygJ{3v zX28yq)#|R47gNuJ1H>oKT^fenq3{KLde4+>{`o{0FHH-A`bBHy(jVwYZC!%>#dw2Y zDb?2^AX=HvAi^9+Uy8N4u{KV$rE9C-NqanJTxB1wIo~89dxj}6o*`SWv1Asib9uH|PQhG1f_+upQq{Y)0eN)F-)JhG*# zJ2H*AX9VuLqhqADmKr3)hjD-epCpQLn$&;ezg*Gl)Np{fl}$#Fh#X0R=#5bUcena+ zWTKyiF}9vWEY>c1Bw@+dQTX1q`LL8*fM(~ek3+i~a5+swethOm^gLu6?UGYf95h%H z&r%$iS$Rvn7aYN+&(qa{>N_Bk_`*m&y8no@?AuM7PD)6umB(+Hq2nT!DRWv@R(xdf z<2=kYY=$7sv zDksRMYw-hs%`d|k z-=|7yb*fww@|9mq{fdsm)}~l_8-e-x8bxy3yG}zzk;Aoi0a9MTVSe&;Fj7xcbUb+#fli-a6bYsGFED4oqwydN3YhU{A2qfD%L6qoXb%JzW)HXNM7aT=fKM$-MdP&mC>4&^ zZ0f1qpu39m-iA8-f;d8t_6O}`hKt=t@@Z3=@>EC|vNqIXRfyiR^%;vER8wsf#ThsSvr%jaX>rDt~Lb#_bkeOO73XT9M~ z(Rz>uoJgC2`WW2LoQ{<~a7b|Be+k1e<1{MmuEjSPqi;7;n&qf1~K*Q7( zKS}xV*Z;#d{<(CF$22rpU@13ZVp}oG-GKC4N)Ce}TBv=P6m=)X1XLAASR+G0WnF%i z955qACSO#5vf>~r%hGN6d_F7crlouNZ8|T*zEGb4L-X29ogT8MAp>4uC z=x}uH!DMts#ma&Ekv}QqvCO*fuizfg?Pw|S-5B{!=)uNxr*z<%cqz(N$0abdn_jf@ z;rduE5y?ZJFRQET?AhJZbn~fC0!M}zE?dPk6Ka$w+zwW_eih+<1buLvko=dVg36Bg zjLw{MA^XSxp?+&vv}&Q!?xMv+t>2avQ)b;L<}d_ro-epW1%_kLF1Z3n4jVbC*g33% z00ESz$Zm7i=gp0O7CNi-u9fCG!dWgsrxK?F*Cg>vawTztjV`WX_KxF{4oEdQX>(4X{_)JE1>a75G>by)M5}Tc2D5;N9Ds%Zgmzj{139X7v#26*#158Q8Mr;d3}! ze+dTTKc4obSa+!UrXWg2z9}gYwk3VLO_Ksa_z%%}XH4ruqS_;~5nmGxYr>)t$ z9e~$}+?%0qRJswY)@Y1~VZpFwO(iOwl}FOA0_f`UVqdF2mX9hqQ=>Ph+Z11}2YZZn zsMzEEBf*}#Sa=$Wws*a|jX*f?3nsDz7{15Q`tg_pw?Tj2d#%#1H=L{T)YOhoTIp!l zgD5P&!N`RS#OOJsI77n;npF7Hnb>qYLIfI{Zkf?lY*VF`2|QTO4+J^dU}%NCX&~%! zEKa->pi9yAl`M?;=RIP^N8m37q{2{kjRvExLU@{WDegF+vE=U0EH0b5l z>`+H!YI1B8lC~7#HgkBzuUe4_EeWe?7KUGFA zJq~%@3oE@Vf1f8|mgX`HR;Oul+_1=!$qHutj|Zk9@-zKL zcXqav2bs>Sqs)2bfgCg8u6#quK$W!yC`9%Ay(8=1%?qYN4hH;Ki4F%o!eT#;JLy@v!@6%Sy-GLbS^OOP>{?hsjB3pkuGC?3ks30>4M7BETg~;{0ovH)Y+%91^?(Cst98y zRKYaRKAKpM@M$07pJmB8Ugi;+O7CR8Iysz^8GJ&9HXO2}XCd*l7^u0JLy{vrU=kZ1 z&XI6+r^|bD-Q(jW-uXQ{k;Rvn!SiCoi=N-NF;#Ya8*;j>%POiipnymb;wdbw#cHk3 z`x&j_E!vqUcRN|J1c_?j6vPbT*&YCnY9^hG_-smw73#8B(nO<4NoyNIQHq9d$%Vi* zF#sk4cMKbz5)Sz=`i#=>^LVRCq{r=56ojZsEH)^QV;Xp1%Evec^biInvbh8qW}|#X z-TUAj+0cV@06jQ`LCXvsVHoH$B0)ef-TiVFhDV)r;8J1GSlbCDoys%sq;~p|1DQFO zyOwbbc+Kyz8!n@Zn?zK^F&(Y!Tc+c^->hf)mM`*G_+A#1-spz)>A`N=mi;oIgZ^F% zmu}48u2azPvl0Bfd|VjtJ1#JWwuok7gQ3Nclo^G6sjZ7*wR$2_gpm)H5Rp`EMgt&* z(LM>xXW^;oEO5z;yj@8NZ#1S=Z01%~@BV7YYln)2XPs#ay^SBR=eH{2^M>YV3bT3N zD@!-r%Z2?$mP6G9@BDUq*TVr7+MA8rdzlduV|tvAf|dHX*XU~nX3qd@c8U0yNFtPc zh7r&AY>0KEYeW|@P=)Y6;_2Yp^Ud-L&ThtUx-_r zR5Kat+pSdQdd~gAy?n%ILrh0TdmEOwi=CS{LQ}H3@dni%1td3+*_Sy9z0<#$c{;ed za@-0IZO?EG&sov5W<2zOtY{U@2rgI%4z3cmWsj`gPoo4Pk+$>spi)C^Tf9x%`#YRi z@;O}hU0LzSi6){royO{&pObHdTmHsLe!|?Q%_9bHjZ1?>$<>z7Tc0s}jm<3JYJDHR zaw99C5;Lo7Cr7@(`0eu!o8;EIf7cXL6!hbi&R9Kzy*L|k!DW5_Hl3|ejIO2NnE*rV zhrpv{VNhWycOe=RZgL`H!HLztDfT0x5fr>RAiH}c;?S$smz{&>olaLSP{3m8QS)nG zL1&2r%Lv(sT324F2DaBZTL||?EpVFkHWK{bT-owW=kXG4omIbb zhL9SXSyDCK5|p|KnxpbAt@05K`;Bf9vxbIF+%BH<;~f8u*hX@>4~3s!p6SP`z4wJP zF>RzJ_r!d$K|7F>=nNz~aIbHOa)f^U^eTN2&?}ZZH?%=I$GgUL zyB1ntCeXm^tEmkHZp)>u+Eh7juhz;oh;z2{|$6*^HyFbujk9TUv;Tu0@Dq*t@B>;aVIpgVTW!u*KISC21#Y)c@XT&h;6gF3_ zo+LT1yoliKKaNieb_nOt3>epBf`si>x3JnI#>M?T_(@XkZlL0DHdgUyCfYV~x6&Br z9Ht877H2>X_TY5mI2Vqrv!p)*)#)kdeep8bb$V2F@McgsR2Crf8BnNVm=z?uqCJ)=!wpWgMz z{|Q(2MV}Cs?|f!IzrJfZqALHO<{Azy|zI6K| zxDVt(PIF$!?WFJr@UC;>8~Ygv7=Y@^ID*_$`Cn0v4w}4*w#fDxy3^RUfad+LdcDR9 zSZ%dETOV4{(O}c!{aycU!RN)D8&kAmFwf!aYvueCd->WJ>B0%FJoL8m184H^}nu z^TAerF?2dsa~dCOf3dkfs-d36e#+6S@4&c+p3vxwQ?}XVp{B;$?4k&EN$RohP?@=9 z_tJ?uXg_ZyN9nssI=mCLl8-{arc19z;fMkOyvOs~dQ+cmq69vc}@FM6B@^0jba;)P9m! z2W@&pF@zW3YC(Fm%P#V&@(O;=Mw2Yu8)!3)_!u{UTPsJ@Vh!tgomzUp&NeyhAJVo$~BSraT&d7&P;?E-9{p&xIG>D377 zh>?-Lzo1{tr!Kmkm~{f6*y7sSAXpVSOvmG_mte${C5WLYev$ci*C9}95-p=+v-}GR635dxS4bW$W`8-JCc@k88QrTq&d zS{XV+8*>Xv^L$BZu6=833yR6@7L|C>=MJH(%4snn!I$f|zV(f|AhAMz#k9wM^aE;D z{4rIk!&&bDarR@}O4?G`AzW7JP1S7Zn+oUdGp$kgrqZpF_c)9R^gJ?Q1n5T~)JzoOGGMijd;3pw$LsS=K(Ix{t0#YMi1(s*6yP0LlbWKf_{(S(s96#=&0>_B-dNd&g(*4o-tTaficw z`ut_h?!gm}PXyACAN+jQPEHT@ z-hMb}V^nK3))nrk@;95X=Z~H|xs9F|`bx}*Ve%E81w|U89c4Ckeg){)m;8Ksj()g? zPF&=Je0oD}zn9OS-|+-DsBV&K7^vmtn9Vi=0;5E?JHtVv6Y(0-x+z#I-9}kUE^by@ zYqF30chyj9))ORqgR)3wp05+8E}wvJkKxpJ~{9ot?U7|ZwJ zmJ?&=rEvBND_rH|?;+o+ZCJDu|0xZ)@bvK!w;1iYFI)(2HZ$rDVnf3pIa(bJ2VQ_> zlK#d2SXD5APW#nd6nLTYVfWv{9ohk$*_>nGItWS(fAoqOCY9o5=;v0A=K)91Gl~Oq zB?uw#@$_K-@XW9zD=iJDz=QtllNWze6d6MbxDrE=i@clFaKXe%Ry94yq+l$R5sNd7 zqQtE{<|u)(5L`9{Oc)Ul(NcB7e+^};*61x@4Lmf$LU)RB{PVdm;(%5r;3obn5UCW* zg?nKbIwO|H3z>h1(LzS%$`H9J(#fhfn>p1b2d%Q3=(HGfi_D73_1dB6KK-%U6tO8O zEQ*im-V^Uwqv(Mk7h7BY8s&u%6)z@+-gWvTSsxHKP|`?f@snWf4Hp(){CX}Fzo_60 z$CwFr6bNn(VyILwARcmThYHAn6^2E9jYm~|N}%k&m7PzhCI`=E1-#v48U6U)s<@lLb^yuXM;r`yyPW90vU6h|asebk% zQrR=F)gSgw_x8^ZPNj|GPagmn7k{0#6Q9s9Nj1B^LRieRN0DcWUb@0BA|IM=1rOmQ zRg1&Z7qL&P74Ye**1<1c)D-Y)q7r;0E2HM;kLn6MsVVTHwuNUk6dMlMLUbM=TRLu^67+z480G~mFy7oo_WTq53MbR8CbfoK@u%6}A!tp5e3!`} zom`@G5U|(N>mvE#Zrr6n6-@ym-htqRkXlUu@MR7z_BU7(nubn*k+d zh^W0n-@6Z(c*Ydl#9|^Nb6yu*w9r-BRuRVokA+553sv`T;5BguD($3KbW!P@+V~+3 z(l&fX_H|0x(&^CfT-bB2{mjY)9`(rC4VF`txY9txdYWzb5cvU4gf1)=LJM6)p;55+ zc|-6cvXGncK4gzDYZfkpz5Cl^8DC`O$O{K~{v4C}>_icUwdL*YN$2gsyTjvy&WFA8 zA3AS79Uh$@9&2~3^~n2n5_#C!_slbaa5_?AKs;b7lw(U>oxl6Qp)FY;I_F=1ZvXP@ zzqZ>u?c-lpT41!XuMSS%{j0tItGzmrcjsG`!_yY?Q~7J}Z)W-*ph?L5olW`=n!FUST6dC{5ZnIJFGY=@f%&JOn9ldvg??ERI-b^mLdz;xg~G`CoDa z$)>Zsr)@R1FA+#hi{IITUdm`xN9TEPQ}h0_v3V98F6`9CvTk5YR(=O=VZ>jm7&TdY zwSe&}m>YjbDjL2^D{{@=E$G8S3%p zvXi4UIF#5Pgf+;i*2iEcYtV>g7u@2eApSMhRyZ$idpy5;QI6C2bRPI}sX9mqk%p|@ zWaRJ=G^{)-yTP^4X4|reu*~r&x9!<*%-%v6THrup6~3PH(2k+LI{Xoh@#=eQTNkpn zWea_8Y|m`>3Lq8PAI^{_a6u`>2gRQtGB4Um0GZa@jb+S@i{ijaaI152zF!+3N_5MN zHV4SHv{gWC&b!G!W=0agv~r2=v9m138*=MfL8ga&^=xrL)55HX;}%8pfidcwb4q5q`|{Vyt1(eH>p z9@!CJAFm#v%9(zPimjJ@^$NGWUE;l=BJ#@C)z(kRv=;l`DWa>*=&pvvSn*ATtbUw3 zrk+55Q2gfKT&McN_JEu4l*<9v@zaP{F3k&%>tWr{M zvPx04%Q`y^7O6VRk3-3iA1m=2j6&IaEocd|S9BkGc#@Ko_U*~1H%AAFHAou~>MH$` z8;K#go=lU?$%}yee(SX!(JZ9Xbo3~u3~H2%<=Ch?a3}Ab?;SsC5RRp_I!8T-VO{c$ zq3S~_fLv*6grYQeNQ}Geyq*K2mJUkFP3M_IgKej$GNi)S6cK`qvWWMWhj;J$qz@4|Cs!Qy$*RHq1ja3UJi)B%iW=15iVT{ zOox6jF7rVVf(%^EF2mxKQ8Os5a%e7q%N3R$reABo7a$h61`L4F3xWcM84I2`*PEb% zN!rW51|O@V5J4&k;Rqm6VF+Ik1vM~h8y24Cqnq2gu%s4*p_=GD?xbR7QK!6(zNO^1 z5Gr7%6>$2+hbdxPyNkel&##9_slN~NsX)NO!&mb3`O+d^0688)lT*UEmB>{oS zT&@V_L&;nyP+A4>QM%RwWn z35jIU&6BB|ry;mSpZu(xgj4TbLI{U9Ex?>+=JV%b@;RLVx(V@p7qiPdXjXg8E}XXL z)QX2lR|nbX(#%T;P^?f0I$g{g+lVOWeeMDvZ2B6{SkP1ex08yRVGFBJ`IVMs33Z&g zO;yBoOxV&*nbp-RdR&*?uclMndBX_|EkEA_$D(4~DP5$4z3k!4A;AK(=S?wlIw&}5 zW$EJ|ne`wn)-t0LL<^J9!uUlI<TEYDbVH zymN&XUS3(RR7i1coKTR|*k6J$mzZ{nUu?LQ^j1-KvbvBh|KrN3_S0oyV9Y#Ub7`6D)c2QodRJ)lR~(f0sPl#6?;dx)@I(&N z?xZN4ne>a+^;G41Gn(lY(!q|)ILuQ`ZAh#&YMJrTRukr$JGSK8pcozXs_6G!GWW1p zJ|ruBO<79!9WOgTP_LSTGkO_u$Ylx#QFrNO=K1qR$b|pC_8OY=neqg|j!Ggw5dF%MFCFhP-O38C6{p%Vb#T zk@YmmCf*{t$tnF=n;DkKbH~p`aANdc$dx4J%^}oH26s?p&MYXk*JK5?*`A|g6#41T z&KEwWa<&lv4d1!1%txS|cR7Zl!MU8c%LUSkiKFV=r6$D@J?oyNM?qn!!?Z*vy28{XaNZ+tw;GZ4c>Bnsxi6A>kj`YWAdx?$PZ+&zg3hP9$(h1|JU zT_eDLT~7Y&)x=1^;A%>k-Pvo9R%?bcx`DZj73-P-O>0Vl#M96g$juF6H3-hpDV%0y zO^X-#)Y}SrMn;!|jNV6!=71p`ElTQ^ct;_0Hs0QJV%F0miF_~V*>}M3?IhF?)Wp(g zHAo#u;;kZTYNo|>ryDsZHhkQYRkX5~X4~M!>y;Uq6JYKv{hG`hh23WGy~~SYE^dgaK$gf{Cxa{4>Xp}%s}h}i zGu*jA)@NvX8)aOSl%Dbe!aJaS0MBP&^)?2kD*g+qO-tj$^+H8%Ah$vmw+BcssEkqLA+r zy|cNebb$mcTL3{(xw$5W$O6{4SOh#YuRD}f=6Zay&mV(ouzZ16xVg$P*O-3Lxy})a zg=2?PBZ|T|$0;~^ua&441uIsWjL8Jzjfg%=&hp+hB+N_xIKl^uV@l6cBklG6J}al; zAkbT5s}cEMTOHcYsA>TfH7!;1=kqf7shZk|#@cuF_wY|FvWr3_na2~}GP3g`_ebPj zp%Sf8wH@3Tj^qc>BbvHbD1Q~^#z}I##Tw{_b`t73s%8C- zhKD<57W203@Z73v?e+=xj*m+m&21l&oVJ=rwdEh(?^{?wT! z?sOiM3n%h#9nq&@NCw5Id;y@c831q-cAFsyH{{fxPp5>qF}nOM7bvMgC4xD!*mAxf zV-%r?6^B4F$;2@#DyqA=@#vLYDO)QwXe`h=sg4N}^TJeh1-dmKCeNR@<>>r^4lh1! zXS6GuCbL8;|C_9z^VgGQf^(&EUHBN-rs>DORallGLW6vGG4iw)mj&fcGa~He6=$8z zCc~@;atJF%!R6bm-{VIQpFM&14*^CYG)q0k{1;ur5=?TSpjS9!S(kp+bbSt55~ZO& z*grox#W>T>*{6>mPfpJd-gZ8&v}Tyr%&BNPUoyPUy?RicOfN*4?E3s@(W(A;n(RD& z^6aU@K1|jz+{a8e;LVWY4wd@p1h)7DOrc<9ET_8^c$lrU_yVIO9tp`=2};b?s>Iwc z28oecSNucB^{5tR*_9BmAg*5`pXaxrU60rqHd)v4Y37>)FgbLmUgycuktV>c7ZdRi zQ{;g1T}rNv!rVR- zODhWj`s`KX+h8#5sp#Gm~;!lbCjxk6?p%DjIwN zx~1;Su&J|QG{T|LQH&*v4|{+4X%GB*50CNRkEbVZKkc7WvZ%99A9Rjp>a%C47D+-)d zf8JyO3e@9*VJYb)Sxh%u0swAi(_)B@D;DO?XzVnSyy{+|+K2%&~ z0-kszj$OwnVIXN3#Bq!tq9TEy#0?YL+wA#~VC<;|_TLjA{D}=h#|t1y2jeRveM~{; zGq|CEho65qI6a_k{O;s*4?NbH*(Mj)^76^E1+Jgi2qQGq&RO6x%k;GF zHQgxgRTZ%Pp&TX`MpVk&ReV@E{1Fi*`j00RHjd_hMdJHgwb?PDNMy|6m3Eq4=AeE_ zf8oDxVU*Mpba#dGSqv zrx+0LoIS*+kCF|-^y?(|Wzg<|2_h6=!y}!9H%Jr_s*RY123(KXq%`DaaAO&BL*mSX z9*)IEUjb+?UVWaAm2%DKP0{($$QTxDfL=(`ZDRBRs|$V6%v6^Ih2HDs9vN=H0+WoW zh;ESg0X^L!N$21IhS4UY;Q(FP;Mgado4!Yjp63MPR%83cBhOPEEJ8*$$7yn| zNJEI~n%sn;m~m|N0sodzPkaKkqA%KX{k zY`e_M?!9qULt6RBTyd~W`Xzga7Pt(~!({V2J5Nx~j*lJdPP0AI0Y-P^hdel#rd=N$59jq$JV)A1N?shIfrc)QkE5JMMI2|h511H;~s)}xzV zl>ch?f5qz-B6~q_g9p*G4jvE4%ptT+2MVJfeg+^WGzpPUn!kVspUnT{Mexbuww);e z4qJasP5@jx?pq<3&>;DuQ8Vn^l>&J0P^m%(!Y{YGbo|IUsHiO7Bt2ekj!`5{2kw&k=1Rp9gZ?VtmbzM(mDE^Z?J z)1gzjYj!p=tIz`-fNuBkT>|4&G6pCiCMsnF3E_QN;W{lltd8z&G$u52!>P@6(4ZQ9 z_HyU>La28=gxyEq_mSb8Vbb8z>>;wO>%$Uh4Hmw&C0a4**w=;-LCEU>gK|Od?q1RI zH;V*yy9KVTw+H)2n5yVD{`xiNX?xiX9w@z-5HVYatl$(ea&FN?u=+3S@+DNG8@YLe z#yLa0>XYLG0B&uqH-x>w{=sC4tJaXbDo!dRj122#14R8@uM2BQ>Z4lFT{8tHd!@BV z|NOWYKQ&uYmYd&U66pGn#`Ehe{mdt~S8m1PEiva@w5CeDjIiFK?oHIYMADjWHRTA8 z1UuBn=1K_Eg5SD`kKp?*dP{lJD&6pv3}K3{Qp+`U>r~oAt~7ymk8dxkOm4{dE&0CR z%r5)+*9t5yu)p+;IdgziMQ%n5A>&r6ZmQ9Y&)i4KjL`@@Xu~q>gVBxuKnG~pXXsz& zf0q@JhhBJ|Jk()%UOugHQD$}out##xwF6H<7ud{#yM^ob4Aak#vgFO682;l6*ie%{ z{{4b}eBbSEUCpLj{hXF?flR+<*0a$UvbK_X^-De}5M;no`(E96(?&Pwz4#oc&D3|GxSA+WZ-s|ChKzf!)9adg#B8z8~(!92eJr z?f=c?B@DW{mr) z=9+ud4pF|;gP!SaXNRSj042zZUL;;gj12A~c+at=RG6xp4RgcMs`|$R$<0W=>AiXY z=d<+c=;dD^^ixoB0Otkt*JeU3a87aEndM#~3gMGv2_Sc27=--bl5M#dvdL5+-1H;; z86=LtPvnQZbom}0L7biaVL!%S{@47=7Lebzj6C3f(b9)~f?a5+SOHLjr)}$eXxa${H`|xACZST!FMZ^5_h)wtA@chg>8gXHLA^fhqqcRw!u9bT zy}?>`IUM6IudNur;-+1C9B=v7H@1T8d)4%N_!D_@Ap8zI%tzyDz}Bi8woc03K=f_i zAm-B23!-iA0qlSOi5X4>QYw{muh6=}C+R4!qG9z$)$hzn3!X%9s1U%;|E!zkU^;BO z2N?1j6g1QL_sgJQI7ai}s?yVZ7>p2OeWPGxAx7EPaXWlK*kC?xxDj|N2xWZ`bRkZ^ zif`s4lvU@}2sU4XkE*L;sA5>oJlffAYb-PHF7k`Hm}&iJHYnOrurv1{(oYvy8-Xbc zvCGhI7n?oQ{{>GfD`6g8wWGji{= z7Mwu02&;yfY{H%6g~|2hn=RLDJ{5moXj#jZ5uI}d*`K;{6}#{Z>ly7I)5MAbI-t(% zY-XtN)>Ygzkvc{rjODMRiXLyhfH>P)S~XgW0k#~RN)l58#gRhDht_SBc9N5s2Sq@! z`4D5f(#lH&hocf5pfK7TR_(&E4Dbgm2+UQU`tx?JBmIhFV`~Z<%FTP4DjCG;5xl2QLTA# zGs*fmCbXa-tnhe(4t{x{u<-+}+5I9+VjGy2pk=4rkq`k>bz%kr{e(a(UpCz_(pv%G z#Ahj_8A|>*fnVQeH)cnUvyt150X!%YAbw`sg3v#}V4cz00R?z}{As1-G6I2M;uP;Y4I}^{B%HZ1szoOy0_R(mb zq>z~V?7Rc2XtGV8pB@}^@ZsL^d8vA_3_$LprW#O%q85Db^!)JM;r`*?5#`dshllTv zPfj6H3--wA!P%!H>S)Z7L(Gk;aLrxNlHpz%6saM= zB=d2QOPQIO#Z){%4c5>#^udEQ1MnM_b8{SvH0}(EXestPy16SSuaI z;9f5^lSa>z5`82JOzw$cffyycm3&Nl956hE5Yxec%L94Bcqj^jgz3Ys1IReiA*h>S z>5xwK!B5%r!wyjIi|0x5=c3HUSIOB{^5Mp8YETrG!|%t%;HEH~V6jz9F1Kc%Bk*fl z^`)cVT9cGqn`AwR-tnQ%fg7ouW~fT95h*ElbMA9|XVV#kC19wm&zO}hy-vE7{%bmrm4Z12x4dG8Ygc=jOu0h$Dz3rAwCs# zzJ-f3GB<}|#V=#Nob=vYjt=U8Md^Xr%7Jk{&{_bcp@>=!WYv|1v^Eknf zq5!N+0Jw{ete-Rjss!7JPUB-;7UjF9X|Vv`h$Yb2?O6Z3U0t_LL7h$QqW6YA+)wZF za6jF7^m3V-)85|{w`eY9^PFyQ02{aghtAm$0*DEc(gE2bFRI-8!hSs2Zn8#Od^nhSgoV+`+L;uC+wj~_*VjTPq8^XC!N$0$dS zOszOLTB|8|Ljh095sx+NGLQ2|t8upZosTqXu3w-#=E+J6FZoohw4Ob#`%6QBrWd6` z&dK8xk7Wf1nelh{(l;}dpuTrp&_`{73M!nuZ_|%P$;Hg%T908vlB@N_oo1gmc>FXueLQ{n;#q~t z)&)=O4a&k0*@B{TW*D!~bNRf=cnk%GT-XQfvs8xB7v4DTk|TTi)Q@gKAO*-EMvsU; zFv2GPwh=;jnV2IBhYap(c95m7C|?fb4=J~zJfP1H;3fHPU@p0}pHC0Z57xJ~wl><} zB)4$V{5OV3Bzc(>X5lX3GQX)~V-C(gogRa_WeD=Ul+V$h zOZ7$<_7hbn6kC|XA`(teasf;L+;{jTM$@jeD4kn4s>hF`c|b0Te`>sL>xe!orlz@BDCb^5a=&|L9=vwDach`0b&2c6PqE|6?rbOez`}4rQPd8p7HW zaqR&X$_04bWt0TR?}C)n$!EsJSRT_2Od@bowQkzB?;2%E1tf6bgO+(%;RhMJ3fyQM zES8sIk^_9=i>wQ-ypSGl>~!)4_~rro*H>J?du zTw`J6$zD7)5?k{DNP(whWX1V4Ab}v>qT3DR_f)w(DQfWF%$CplRS6ie?}e3-T5Vu3 zC>HoNii?1D%U3`@0k~DzvxwksE~^2w>NiS?5VRB2*{LEn8#L<45_*~{f9kS|vt zSQKleQ|@yfngc|t?cQO7dyYnRVmw;hIH+)By!+*O3)E~b|4BAnrlc9uz%)a?TPv? zl*aZL5`hqMunsUAGEx&3FD_6YcZZ{DEiV*3ezNm4DqW_7?reZdh7!12E@lEie9SJ< zwUeWdK0xd?fu~`5$Rs%fW|gQg6E=%FZ=Ufz3>TAo@6BTyXb)^?noIi0tpce>^kLx1 zzoY|+CSntCg#*z+Ohaexb>G|gN%e%alpD;!h5cQ0xy2BE%oZ{ib6FH<}MV*a| zs99>pEKRJY*&Z_2!**|!XAGqp57Yg@D`Q#wVF<(VfK*6ePxyh^h}Tuc)i-=Hx=S(&`#%{sKH-WFnRjgd#KP zcE%C_LQycKCuI$klJC~f6CtiAQ1Va0cG?H}uGoIEXi&i|ZiT0hUTgi>|G^eFkd@jE4W#$?ffyRo?IpB-Be4Ou{-xkR)qyynpo8a3vwsupU z{Mt);xAuJ(KQ+?vTF|H4hLxIY;4_d8FuE|IBR*q1!)P3szk<|gL5qvhyQ-2wh_b`r z#TG&46U4s&WReTG8^_spC@Q>|l+i05ZV6So3O(wQRRY)O_lzy&2sWhO+US9~SWJO= zP4^~{y`g@EC}pGlREZ9F=U8@l$f5#exMlmA4;i@}bJKtwHg(z9m+a{sDjCiHi=TglD(3|2>H5R#gqs<2SFxx)KLdzS@E}30f?@4$O1%1DNu(z` zrqu+gcBO@SE8eZO#LRx5=+6PA>IP>(jm$`{z|zJVwtB>JW+)K3n60$-f7mRtO46jk`YyNEbTek+s`q}2Am*1{<5_EOz4+uZx!f03Y zQos^I^SE(b?9z>)?`6<44q1Iul%^+yfs0QrzAp{^NjwvKCa?T3~_NFa= zW>HE=hCa-|WfL%;t1$@T>Wt_IBa1%?tXog)ZoiSE{@tZLt@)&y_)|xSN7I%rl!!D_ zKy}q@q(Pq2WXUw8kyNDLl4!Icn<&N}ki5UrifyQN;xhS`jI}iq4L5!U7_ zOd{zDsbDN$VN#Q>u$ss4(E@m1)r{ymp`gpX(02CEN?wNMY=??jo|E!Wz*)>4IK7dC zBB=g`9+NvI5JR(;lxysY?o!l_qruaBz!o>pS@3Roi)uhR!$PxRDyB}sFSOnF%sgPj z<6U;J#YmSwr8D4Ql0TYxy7}@wYLs#J38aQ^jd=1hreAMxa`2)q*f4J`qHxlBC|;xp z&t%Gg4fE64LDifei}6e*eN;@X)y85)!@jslAgTnNDqTH+Aqbu& z#h_>C4TPHUI@A^Rk+Wgo+GWAa7>ZV6IN(_UH&bCg7k~q|dDduv0PBxKrUxr6H$>Yt z8Io6&jQlL!J7u2sD1rS+Yo)P*tKVS8a@87JMO@~CH7c`alOM>(A=J3{d1q1-)3sd= zPm+v5^o_!?)vOn}s5DX}+3i0l^WdNEp+o}y|lfFWlG}8M}j4C-jYC$S+YvEG}^P$e5k?`{p z&mUx8RB%u*y5J~+so>;z6FqCT&`K|TSZPrw-1Pg(qh>lV$1BH6ALgN0urQVcvKRsK z$!Rt3sT53`ImLtY27)Ywvlc^89Dg2iX;iW1gN%oCEAk5PNI~Uyb+lj8sbP_UT1OE>dkwvq< zA$o6HLal^XhQrx?RCP4?2z4q(PU~q`Ry^$;7B3E;QeMR8GjgmeHVK`?$LjDJ>O-U# z?|XPsQy@Y!e0^`^1FBSB@H7F;Yi2{!VU0{%mY$GVp8cE^IRZ*2Ut3DFm3$h3B@W3! z*nXv7qtHRrzn8oij>-*%S8U}{G4nfR|D(#RMLpFdrwe%y+QgY?vb1#2%n%Sl4lrFy zRC*FifY;m|x8~ehxH{6QdA=&xkwM@gcF~lS zN|pk10-3}jEJb~7h#wC0yV@tw>nVXl4KsBRX`a;uzScCypejsoal zf=hyEm0oRpt{11_a_Ml!IpPhRVc510fO}{2p5QrCPdQ#C znrOm{6s~Wlk}YJ;OxuYy^9-LdG@TQFy>(Q#-yQF2=f6}z@*>PHxWbugkFrZcbG~F2 zBJnP}61dAg)}FxR1?)6KluQWaL7KO`BueN-L{h$2^x(|WGFL8mroYer(+;SRGnX;M z?!#K1Kf{1l_S$28?I-Vv0r~;JFSqBJ8rxy~ zSzD-x8GXcc`Cw$K?`AHVi~W5K-)gR)O@eW7!&XU^f6PGj20)kv#3#Ap>>`KBp*pD_7p`q{PRGE;= zYHkLt$)(kRT|K=fmX3EfS&8;ePxpSIo$Z~@MWL00aL8>JxvDJ4gx+A$tg+#|;3#wv z6U*tW-w*PHsiNXw2m+QZJ54VU02o3?Ak{PGhD`uRVuakT^|U4TR*1I+6YUka|8%>v z2~&q?TD6{T6+$C4@}GGccTDuWq;Vf;ZA$Hv(tcWBr>{LeZug|@GdV)!1!Pk{Cda{{khbLk-CWu z)E(hPPWUJTs3$`R@1U7G8$I2BO)lRGnhoz<+4r0|kXbX%8*F{F_kDdVI5#5JomhoZ z(tM*@%&HQ=0sT(LoIeQcy6l8>!Yl39-)+&2-}F)>W2PU>t(&Y?y$&ha3mgP05e=>OO`$iphvOc5OAJl?5JhRk}3^T<9>CHV&DqpX70(I&fFs+PmB3v z8(QjtxZ!yyDV7jfp7OWr=+hk!3aBx%kl-viYD7pOE=S-2xa*5%EUB|1yn)I>&R64+jgRAa}MaRStQ!4@SB=*>5Kw z_Wol2jV2i1hoeO)Xi^e)E2X?0@J(Srk0d*w5J!9OvF^(?_2}F0DIKAZtiOBtv~%+2 z&u8rf{`$CgdUkM%4^ZbZzA{8?n*Wnr{UE20xq3l%e!zbzydd^jLq|Ud#<5v|#^C-u z>fV6$hi{@_NQ>Vrk^M_bX7KcCs}%M*$OifWNy4gF_(8@{yZ!^HHyR34&2|&UIiaB*<_!{dYhc=zde|NQXe_*Z+mGt`sS!2M=je)QtW4zG%M4TB1h@{d>@ zL_3j39QcW%gY_)|>@;*-LPt#ucEb=|43H%;n;;CT>XRsB^Kl{CcDOSp>|u>_!}ZwN zpcq^8_CsNg5za#~`hEyMw(!E)8VzQ%OY`4G>|oD}lVVZ8_id&1^}&Pn&Cvz`Cv&&AlzBV}G%X_;r{(N@^QJBy;mnBT?Yc^Quxp2~4wXR16R{Wp_=xztwy#8Fd~;nO|XwM!?YKz+g(lWeuI; zdyF<_@~k3=2SkXOO)&Bo;RRXlcH_KTS>?%dpRc2E!1F5z_vj+CMRr&RB7;OG0T6?s zc*&T7f|nRNEC6H(_{4y<7hJQhSiUf{T>KfxGZAC9uJZ2HN~;8*z9ZCF>s;gB9av1iKa$2l;eMla)J7X38!kVa&WkEatvq)?LlP zR!MS5e`)MIWFx;%5$1&8uQj8+6k2I;)=!PR|UFw3;#&Qd&iD!>$AfCI2NqkN)H>OO(gz8Rq!vGr8ZB_uP{4X zfj$`FE^$WDEz)$}!^50E*C8l{x8#cp_I08nh(OvXo<^`SR}laRHk-nayi^eXQ4*F9OXEN;A!T*8_ovPd~6QhWH#_7_0jXY z=V-cyzlE)hNWU)GA^xmF2k4KTCp4jI`6(a6v>o5p){YAscTl5YZ!nCz@FKa>X(ucC z%!N!l*4GT5%ip~(0DFX1GH}lPN|8lv!wP@S#~n=J(Gd!5IA?q)u!-~xg9oHwhY@!< z^k|%ApQ%Ffw<<2o>~tKQoRq#+j$f>*(&I}4Lxev)!DNDz4h(^tL;0Qq$XO)Jd@*qs# z5lyTSHWPshP{)I(w`|ai@&{n z9Y*^yWI{CmMXnFqX2-_3Bs^TH#oE_bb0-ugaMQNYw|C!qr)PdQvo@+Vwf zK#;%`;6D3;x-vK*XtragNV6xk%&vWrS6Y5=LL|Xneo3K8Y&@T4muBZ%`?k!WMz)ua z{d~HKyMZKb9|t0AFrGqpB9UCvZqvuR+Okl?u%T+^URy*ShDDqPNS-jrAwKf*F?qTo zpEPkOLIh1hqb=$(N@43Qh7;r{My*%*qwAJ$ zvP$3zzR^?kO}Ff4ot zq8oLZtRh>ons~`mTqmC{)=5t({&MG$PmM)xM}Uh&C~wK|>XczUo912j%1{RIee=>g zD#!4U4##P3ESRB6+`+ZrI!nAUPehbT$W%7?Q15j7?1PIEi7J{`{HWiS> z41i_uCQLR3QA3^(_xLu-kjKxTdtnM7hEL2PM$DB<6{Msb%rJ-BLj_T}4y%k@C2+K! zHiO`fAv6{FFbw9jEm*xhHiL$!TMVdGliK$x&HHINMr7!2v6T<1f~wY3Xm3HflQGBP zRt&hCy+CqA7fXIPIXmzCeE1d|?9V}OlaBK#<>Esw+mL>8pu|0F1qvVK+9HQi0ADOR zm0Vh>Z+;pycl`ad0A(~%&`*4e<~WG9q#PqcTjlRm>2JE`jsBC~Sy;uX?>$h8|RLKVs3{E<`^^WK*Vru*U(zIgw-nh?)sd`xxxj zOVP9n_U*K1hLv{nELu1JkTy7f6#P`+>3 zZl7%aY<-={6c1(~n?}^7Xr_DZXXO|j(bs!a^~KmONkhhQ3PJjrti@{j zE5e;8p%EYn^6)N}=hN}qgVT3MCqHjh+`sWhXEw}7qVT0BxTSt<7&1;UtI*f6zzX6aE*e#&lZvgW&7f2#~};bApo~g^}JYJIe_i z?6iw_F|22WA#XDp5y9yVhp901D=o3NkphgN7_8p_fbAtz@m6BZLMn|Mc#)GMG~i1E z2lP-pqCqb3a?sw<@S?pitc@AKkbF=wq|FUov)&7c2m!t^sC^)J5cvHU8MNy4_O~sH zT>zHvILn`I4ZEzTA9E&xuleRU1AaX3st!S(_jiV|Onx@!-gKvL{=PPUem|P^rVuT< z)g3L2&tFCO#)BTF{uVm>r5N;3agT^-X1g=jNMTnny&YTD9I=13`@dGG(8tq*cZYxJ z9332MgJBayyqO|Au{jYfy1uHfQ7>A3T(J(#MU}4%3fhiXgW+*!>e7jaK=P;nbU=&0 z$`Y5tz(NI|@Q`Ya$DvnZ?T7dQg_}#F8mK#wTe8-6Yrev{VvnST$^GWJ_xA6dI7c{G zTiP^4UL^_)z4LyHW+N^T!*L%G70KsPhb;D*e7weIqY*(BumcmNTGP7g92HBwUG>LZP&d z+w?71&8?yw5aWX4#j2?oo3qRaG)O)eWS4krdb0Cg?U?jxJ-^k?P+SbVD?>~iUon$3 zFUi4nJHbyNWOwJ=8`Yc<>;-QJCg@cR_JFB);F-@>TGS`q__M`@$bbnYrcwNm$3SHG z3qBqfvwk0Rs9(&zKO5b$(S{&IXoI0T(ERE*;7@6J`T6@PP+)*C-Ac!Ut?RUe%yv^l zy)CE%H#UcM-KnqeOqk6L1BFo{G@oNa zZ5(%T@%LUndDttu(zbc+^^$&jox=n(n^wOkUj{F*h&P+d>1F5aI7d;P{~%~sDIoMt z&%^xW*;R34eS>09K)66b#|D8ypu?z267KfYzIgO3+V7}EFy`~r{JHjk!i_KKz)|{$ zrgMvCbg0X(P}i=9h*>2Q=y0r-g%kRy`J#q7(c8!^TL9Kp;b zRE0HjFML6O9k))iFX?a$#?+Z)nsl`he5N?Mg&$ftJ?+Y5tBtwEfz-)fUwHY+*T+>? zymDa&8+MP0IiVpmhS^)7+)t>m(vG!s_xN#j0l-Vm-VKmA68hOr^hZH4 zTpCz+{uKW-7l3G|qP}~JtRgAbX*@`LcU0czdEbL=AHIJFpqg=5#Hd>(CpDH_zziSl zk3lD%l5)_m`Y*{dQ+2=6@5THzJ=aSCeq3oW@+0{X+A-Q8vca}HnDzW47W3|mxPhvD zT{96-rr~SaBY2pokAzxWU!fjjtTKxsILFAw&)2y}=ccE>!#quzy?~MWh$kBk*XY;7DuAY}nn( z(e`w)V#@uBosk@3oB~~@_&H*2uf=VA%MnsJ;6O*kX*HmU0IaLEuC;a}LKk7-J8ghE z#n_gSRj{JA7`GeXN*P&ino;Cq9N~<-Qtf#rl-VHK3%bJ*qoH57_c-)Q0*-tW+z?Qm z^?m>O^UdyfY?##XY}!t~2aTrv?IwC{^Wz#`-T_jP%}nQ_-#8vG5a{oe{q#i(&-tK; zd1N>=1mxf`jtjq|uq4CuBmP6q*~FRc!|w{_?k;Y0UY(>Ed0M$Aze$=1m(@Ulv3-PV z*7Re5F{gtY#vBJpyQKRaYNFUe2*R}vTxHPV+esgx21*cDAU%273u9aEqFIO93!BIWQaSfj z$dbWsI>?moje0k0hLHm`>`LpcX~1mr3+x7&ks)D?d>15Ibu|*RQt4zaQw2h330cr4oTa)>Dw;hC94<2 z;Tm07!2`bR;=e3Www?Oeg7?ZFP}XWv+KFn?ihOMq<<~}EX_ZeA5+10K?zR`1)yWQ<=!P_~)=1eOnDdiYnw(hTUHI*Y($i-zBHVHf0vw{L zq!UD=;rziXErGqTcYhrR!j84`|055 z%M9^(^Ga8r;Tf zTRO+A-iDSaD;nx=&FE&dmv@tX2v+nf}16B}-7TEeXiBnhy=q{mM- zAHDeYgH*Bq(T}1^Pzzsk08EueF9d%W_KPY_?S0kFdNDR1Y~>fj5CeczEFr?X#jVZ& zC%8MClsV>_7BzV_{f^fIh7$c~y7xH;>p1?A(&QNCYu0rZYyakUu&BIe5rJTkUns0b zYU6I)pgr(GWixN1n&2Qd@=B`~967jcLZ702)=kckEis2BLnWOs2rI4k2ge7e zhx>E^onbPD#o(A}S{C(6@b{v(2(tP7J@duoFJI`ypPRN^f z!%jcCp3pUIQ8r~GkDkEAd?70kxH};WNaVs#45_lwKCVI*}#~sUr4nDnt z9UwO$_@|Y+yyx}f#S8?){E+?~#7n$!wkm-kgc~^Uj>Pt|P(ohP0ZstJImIapIDVk> zp-<%@OAaIqgBJq8t5F)5^V7rQ_cg{RKHsz9@P_L_2o#rOn=_L-V3bIFl60sRkkn3T zjRe{7?SeSxBaV2p2N#ex{w$<{tn~Ls&ZWn^C^D8Uk^_#!Ryb zb&9PIH_JEe&`fVpl>kcg?3O{wF=4k`WKcDO-ElUSAR(wkno~8=3!EZwO>-U|kXpN) zTujU{wP1E=n-OESpJ&Nyz^1&S4=$fS_r}I4Xw<<0u32>oz35z$E58`n&L$aWLsCMO z1(y@=x`tblu`cYYRX8F~o!L;Z>S0}_6C8^RuArXU4YRYr9MlWVAufzGO9*2%Z06 zS5*8hIk{Bq+Zf(lHH(}&;xcaa$o$99j!rSwBrwGCb>IwWRitpUIa^V~OGXe38WAX| zImqZd35dgDx2rhk30;i(mQcg$>tWiRFq(KH)Ft`8P^`(8rnrV8MHm9Mn<$7JyXiTl zA#}j-WaZTD#Do+4&|O+$pj_FtSiAB1kYa+ZXKdEU~l ztnPyDIZU18f0iWH{2ESwb&H6*kLwlbl%$kLt&pP0cH|EZKy*UuPPJ|aa_Z0jl{f&v z9U`D~KG0}&nrki^W#aO}yoEUdKFH3H*rBXSI%M=XhVhuE5zkfR6V6x%Z+<*J`T3Z# zCGz|8Up^kh$lTT3St*yr>zV-b{!LqYKI@fu-fu&E#PNmCa*wzijjRdyk6+7kFk5&BqkbyUC~ z+<1~X?m8ryu>vtBKZ$YWn$7*sVyXcEty7ljg||!<@#V@cOaLnp;h1UqVU_VrG)G4Z zH~5cPO6gYZ0b=DDYztWHO2;asu_QS#UwvY!sRGjIoxox-v0v+)=L-Jvdf zP9GyW*1}3l)~iX181tu<1K8v3=fm?KI;RKwC#P>gM|rASda{I0(#XM2pH?*8+^84| z+xi)29%o7fOm>RsM{9prgD`%a0{XVZ6qGl~<#3#Ej#5MtyLDe5q3+t}h}>=lI08?5 zdh{Bzn6biAonvnP5jHQ0sDA+2cmgTPlRr+TSCuuX70bg@6pMj=w7K&#Nsi3ijFLZZ znKq|W1XCFNeS&{}pLT~}hL36H{;&0N((UDwjfZubG;ru9%2)RVQ$BW=lR&*lT-zfI z@5=2-~wz#?ynst2&kbT23A_zKKp^*Oy+=?;uUoo;@A@960L>E6d502&%i+*WfBmbPSL=Em?cE3;z7Mg$VZn>}qdJU#wY{C6@2qoGrn@F08GkBssJn#+*T2 zw;6?UGg9Q#QQBfeLfr!+hfSfStA4)3ZK$@-%k7s@A82 z);UVyYHwP20RyIW&y~{!zj?4js&M)F$PR7?Q5P0nX6^WD#kb%85q;J-DQ3&n`*gV+ zcz)dnBb2^fNDT4iHcm4~6>EmTk>H}W^{$<4^~YoL-*+EB!hc_Gqkoe5?*TnC0>Y#txpgX#aeedQru%SHeP}(j=n4nUfrkg-AJchAaV#9wb!5Fk!Qf5Z zA|~rOArLT7wgag&xkb`LD|#G0(Atf}(q2_7)rEA}B2i$#om*IJLng(yHaOnIp(7@M zz+Feql(LVth=TB&AV2Stk6Kj$-LsvG8waV4c7I9C&M2-;3c$+ZEUs+RwTSI>}pB>Ul*z z(TTPe%D0@Ks`_7 zr#AP~(Lc;A{6dGfi@&NzSIL%1%q)v%4;XldkyB94M_~U9-#xvtvEQDS$R#N?eIx6h zf>=+c*SX3*y0err(J3hN7wu&70u184*AJY!^)!Q^%;W4bg^W43Y{kME_+TV4D{Kfx z;eG9JHt;SvJAd1GP*J4E&_Mxc5p((i!wkQw;bxZXqteX6PnH@n$w_k>ch8HQszR># zsplClnIh$CK90nenaM3H)(M?}CH}5r6lyvZ?koRlg&pz7eo=gfQ+U1LeQBqfO7SYx zU6@S1Pd=W*SDgn~2!37bEw{4_0G3kmq+?KA1fVVFpdru+C~WivFp#_*CE27hN#OoK zHxWI*^(hr&6?)uXVGwWh|(Ia8}E>=Xde4%H>X4D8-mdORzu zc2jzTK#f7I3`|jG5j72G_rO$FtR)6nyesNgo*ZotMCB{wXw7`cXJj1c8P(+WPqdIG zDsj`9cP=;+2+fVXrS>QrIOp*;*B{&$uwgFHy%(Z84Pl=EP|hv(tAB+)el!oak3u4R z4++N+lKVv&^yD_;ZUZIK$vk5%jgmJ-X`};^67b2z_oXQt&2as6XEA>_Jhaw36POlC zFk(~Yz*Wk8orA>Hhx&KR|L?Nf-F&k3WNZ7O`OE5WiMjdR9sO_H{O{SbC;0F4;NR`1 zkDot(vi-Xq^S`H$9_>7Sy#2fFohMHpJ^Nj<{k#8!{~4YoHOu(Bzo(yP7Y*Odd;dT5 ze-9rp=OJlcCCxJNUAQI78(Vt#J zwBpJh~6K` zk>NZ?ka?jbe~|KuItrh|=vE@5+fA|@L9Ru4^|%e-bL;68dN^U$Vgpq53ET{m75>l- z%=Nz~Ac|MTI3turGl1)SFaW}As7-%1XeZ`Nw6&dlI#2eFe_8n%TvU(Gf7wO%IY>f` z1dII7$AdgWhQ%E6=?x72!@=qP59a&5H-|@u=f9ZVuDm-uKR!4+OWvKFCVL4w!0vxK z+B;1?emebla&}SmK#dWofMWk*7K!rIlQ)Tph#X|3H8We32m*oD^c~%X^P-*(5IntSAJHiOjq>y**7-+QvA&V~W&il#XNGa} zIDop6rkQ9lV5*{Js$Xx=u<1Mx(o2q9ge2tVv=)QjW;wmF&P9pjFNDuTDPV@)n^7iv zycsupF?z)d$z~S7uK_4@%-JfH?qXMdhOiJ95uSD-vy*r_q8v5l^T)XJX`&j0-l%kY zX7Al380c`74c(pWj2GM==fjtnxyYav#Hh2h&1)pVs7X^1AiBGrn!Z8hhEFR-I4xM% zoSZz9ug$m%20_q3SKi#9DilUL&bk)qZd&fz4_I+!=fQpiPj+=R><hQG#xNMoNc0akD|ab@s9ee&6Ab$w%<7qHcY2c>EUKxc1&0pw>0{ zL$dR?U1;ezBaCHmy)z{Anv(T6HD`%900ogo=@MdW1?w$(K04RjR>As!wdxiH&kxZ#2%xeg*SJgw9Fk4*joICN zR}hv5x2R{_tIafUQJAOp+`u6a0dp5Gtl0mOw|nP%ia}Ocj*@5rH)?DS1Mwt`-i)KuK+fIR1aUSfa7&g12zlK`O1d6!d}?dSfQDCWZcs# z5900v%o~38E6iVf0)buorrCoE0tPHLZ}|8(owWMl!t6-?`VeQ6#)Sj2?a&UjUx%Z) z?KrB-W`2Z=iqna&;8-j?MstN=*ATnjX26TAnm0(Wbg;T#iWo9phQsZt;f~79@9>QK z!|j>j%B%S5CF}Cuj!GVwvOPU2?k|C(Dp>#M5#88j;RQZ+YwdVbf*?&#Rr7!=#g42%N3ixNp}?}W)B-`6p-(VO8rKjf6)qNUg!g4n7;b3YynUT~ z*gN0

            uG0dU8s0&Lmeok9>c8LLY-A!dyz`7W|40LQhPaQ8_GG$Ce-PH`v`3nHM55 z<}tig8zR^U&<#I-eX_pRUfW3SNzZ;cINMlhh5ds64Y^~Cv!iGr_kalDj@>}Pn5pKA zNtS-D`GRM$6`MlUiTH{vSzojOEK79kFspQM=B$o<%qt;>jo)}{M<;5fW>GdOi&EJy z!Co^Tfh2}6Us=8pei3AEvVL~n0ZwG2Qk3W9*A?%ug1-XlNs@K*%ZINYL0EOG#kV0a zpzSJLI8NKUy~CqVrw8@akej||+SvRK9a*f6=KlSl(arCOy6^$2eGd&|eQ-Z&iie^S zZU5CDigKza!>-cW@5?o_yKcmE#oAM3+gHu7lU2vOr_<#3`>Snk4ZNo0+}DvA?~qH^ zu|h*MU=!@0eE8UTb9A!*Bc4w;RyRXv$OO63bT61A9b>CI5uiIX;+~ox>y9e%5 z;Yg%O8X%3(G}l9p+EFyAAsYY~zIVggFZ>%dd>kd-4=cpG%5yBu0@-8y4L5ELZ|`VX zHto5YEe%g8%ON*Dt3F7$A&)H6D=anJVplU>gPFjY$1l{1fX?@`yq+3`wuM*uvu&a)P|pM_obu4f)SSLEG;_FAU< z81d_XH&U{^^-+O%q8pcOBIm1)qs>Ii#B!rt-G28cESOdX&@dsx-IeGNp{{z}-pdOy zTGDp~KS@=zk#?C~YwjgTWH$GTLzayw9uMe0{sW&1qccdq7`kBk^9})m_C6dyNQ-yX zd*8f0I6eI7;O#~|Q^Twuu`u99i5tz;-E@;D3-T{Sq-BJDKVN(O)Dtu(Ll`revO$oi z+>nz)3FCkQXV&yUyFAC>pMa+!_fqB1qF7w)F_w*OXM|;{&Ti9&iwMKwA?cmL`B(4I zyUHrE^1oJE%O5Q1oxeS~qQ;ZGe{y_wzIS}imH0)-y{6* zTT<+WOf>JmR{aKS(GG0=>Ij0n9mp4IEOX*kdSiD!GpMyuXzW1&*FP&{baipS57)qm z1ziyt>mmbGDEJR#`vyXf7KeH+a!}Sc}!SrwV(%>Yn2$T)`a z`OtSS?H1qBn)5=qR-gCU2HuMQC+Ilma%d6yGyb zzX&C1Ymfuz!r{R)A43{ZbZ^4s8s=D*iFg-6z&YGDn&0=Y4{p4X$^BQ=$fHWtu-kG> z#;|VdNLK5a&%=NXgKJ%ox+PmQUaKDsbK>I8RwJgfny$sQX*j2o&&(F`LZ%26hr-f$ z40)G&N@pFodo81p!oN8&Q?Fw#po%u?U*9~MeT?Qd|L077!kr*T5<56{|0%nK){N4z zOrp=}jIVXE@kI8xc*+beUUn6srrG0orB9lNiq_kLECpmmQk3aaLiOW19h zQ*nY$*a$K(9Hw*%`3y%ERY|l<5!INuz7$byBsLLFhL_=0^DqKVCRpft{-x%B@!)}a zhbSkvjWF#P_)(E(V^>(9vmD}EPzVESB<7{M!YDV+AeW-~1Wxtwd2(G$4A}q#k;`sZogH`HU5CDD>fq%QgeX94KXJKxkGpOPZ|1ih)c0#%hCYk$Pr0_>)iPyS3FU zRz*$uMf-p~Sn)UJo3tmB=S@9}^Lig}EuW4N7qQC9Dws%d;MO&^UEW*{i$J@w->N3s z=7YpYTroZvJ-Gp35`(9;PZVp*QE>6u;5y6jgQ#WLs;!xAB>8);(%RP{`SMmwBjlU@ zP=7W= zh|o$4f`TO6cZ*bHrOqrgq{nocA5TyA58j#y6aAFwZd8Z()86Uf-kT%QzFE~+O-sJG z&PT+QZH4mj!gW}1B+%({HzOswgL&^azoXMw-$~H~R{N@ybe?|Qmy?B->=&c{An%e} ziHn;6;1_WQuzAX=74UqLwpWH7P8<*1{fhDoUYHVaXl<}m;OlQ9ODUO>#Ocf6_d zk%O_uX}Z;4R_9EpX2ol}%7)EGy@J&prPfC#uWx6194_JiSL+H^DfzFs`|Sfyha0<) zZmHjL<|cT`I3W<)(s++Acy!O8j5&}B;0ENNK1cbalASeSyAT_MC@zI#T2NB-LvrxF zxY{1Fe2BOUC?j@l+Q!ro9TGV;(hdhtv7eDfshWXCP3%z&c7c&yBSN--ntT%$_Q}LF{W*tSyR9~QHtOvzCLHOKo5@(;(lM10zMPsHCA$`X zu=$-t7fDx3XF`bf)`*wXrZi~NKZga}_s$d?d;@nd#A}(E8$ckZOQK9G$yH1z-Qid! zm?~6GSKD8{z#$ zc$Q?Tl+5Qs8@Uk>;1C$e1~T*Mn<0iBwkbMl>=1oLcQ}9};>koq9BYAG@DGuKkW7%u z?Fs|eoVPh2W)(SPdPZ19e)ps*Xt#PE;k>}?uyevf2eM6}KMV}j?~XdA{>jaT4hfs1 zqlbe#>2j1E=}fUU2e3&VqGoz7z{c61@^Es)5?yOmNBnqgYP?Isj8{j7QBbxL_pxbr40 zU^m1cDdNi#_nbuwi>2I3e6u9Q8dq)Q3tRwVtRz?8rb6gh!!9r&pZE?)Q8|P^tC8EB zumUrh8-BrT4?#ykRSi%!is>|SjH+Wh$$X$?xlyzML|ik;$Hg?0rO!)65nP*cQUq=R zi?bdIe6c;d1ddBZ42!b?{7r`s(1Y2tF z$HJtW(O!{}mUEKk0H2Yp5h(-tEN(JgP*ITPn*o%Kvi>gP!ZloN;!Z|3?8+r(uO)>r70Dx z{G{s%Ta&H|ov;I_8Vk&ARQ}-)p5LA!C=`;wA-{8(&VUD0Wc+-RjxDDShN~ffR%bo6 zYmkS*RR^AceLMG%Vh|vM1>GdHfl&saA1S$trl4w0#)h<^6>N;=GN5Iq^z~IyvMgaJ zO9|RmZY!P2Nw!^r;ZcZA>GN-$K^2^1t{LQBBNGN9O!Hi=x=C7v!KI1x&kghT)2S{`!fJ4eL`e4*o3(SC zPyqT%(KCfu0owF*6O~(t06~{7p!k~&Kh1}j5!`XHC0*-yFVnpfT@tBHt%jOfbm{Cu zasyL7eh^-}f;Ev(_t@V!EY2`Ns)Bn}{&TT20M{@g?o)Tw+UfNL4g^hSaD@}ULjPzBMM6rgWYF6Q3dzhH%xidG`L1@m|6 zQb$iTt9Ellmm?$_CXv@^eVxMzL0KfCyFF?xIceVem@x9;R{g_%HrJChr(=hLJLs8~+r>4ZyNH59^rdZgWi;4rb;=qE$V`!`M?CWR)m za*%icH#2FFEO<3+>3!1InqQdG1QTFh+>qXsbvCRw1yL$3F-a_t4?~t`-~|8%eXL_z z20|1|Bwkn8eIjTO^;Q7Fiy06~=x{MXZ=&hd41Nv^^e02@EXyuD2jm)M?hs&#R)jWi zvJq>1B#93EWP6Zv$O$+ZV~1TK9N#2i?FtYN(Eyi4rz=QHxcPgD_}n5R#zcXg8oZIY zsV0=aYv>w4Wt)8ul9xRf@L9MTU=G8%>bvei$4z-N9!SuVeN7=hMq3PM>rXZ?diDax zK>if(2;`31=i;2nHA_dFabh1y1ao~#3TPxwD*gPHkB)z+6bJMSq_$f2sp%uJE z4Tx%bQ=G<)m{?TOOtDD6T~r+c&*H1DVECv6G-Ke6!bSj`45ak{-FD5p9=ILz;)|VE z>MRZeK>NyMYy@raC<8VF`jZZ>Ax*KrXvh${DaD;EI}01WN_(VLbsli2C6h8}f!j#X zFe6U@_Hd(ZH>jN!hoxu}FQXn$7=QMxL@zoBqAz2kQFuupe0)J-&|&EBVocUKo0LFw zlg=8Nm+oWIQzo3)?*`5pMG2gJ+TTAoI}@`0b4ElW5$4Hsnk0G$Dw4~&-|D`?#xbF3 zKZW$m@a_5r>mUh0o}A)of}rY>l8J>eL{*l}V=-($lZ1K-M@2(D>C{Fn{F%;$$_h`mprA~TJD4iQ04zsx~EpnT#uDV;j;I7E0e5`4e z;UIJ5-hB~qHrg?yf`%#g{)a`W2%)TPgfsc8JyOimkp&e%;1B}VVO!%Va_kT3Jg!Hm ztgUQ#^OzaBB+Aao+nU`UWBt6tuwz5`yagscZ#^WIhF7!mDSkGuE%i(OlXA_U0lL2)tHRj8&>t8|>L?Y1e>r z_(C0M^uBRSAM2sr!6p`TRjn5m28MyzwctRzGIHBJB`|x_joO5xDL-$2a(?-Qb+F-@PD8HbUJ@SqQi54#%A`Pu6ukUZfqw^r1!wPSC$l z6XLnX*$K5CaB9n_m6mXC?)r{pf>)bK?`p7{%r4}8RCRJl(W>5bAaL{z7mN&klXd{Mj~2G5H)y-tr`l>6r*JmJ3l5+QbbrU#HZgW ztJ+*a+U*vT9!sNte*6$}IRH|<5Dl1j{-X=%7SEpup6R=sgpVg^c=;bP0d{-c;S8L71P7YE zqyL^$;9U+M{KHG?98f32aC-TWFsj@@+BRE3F2`5`0647+<@uU8WpsI!it^o?{nGJo zRkv*Z#9Rt|pX{A=_Rh{eeK>gAIs0Mn<3XG>?@=c)F#jmaI^_`e7KyyRB?KV&u+FIY>8?)Cdt)bDw!JaxrfQRuvxmls?%qZ-|{nZqM zMfYV0>;E7v+YA)-07DHCArN&xl{^8IA0Q6vD8`>g{~=EkV<(e^#wlbwK&W<6<_6=3 zd~O$MX@-v**Y(S^%_?jyJ-XBf8Vf>vldQ*Toz}>jqJRB$WC_$GPf{u5i(vgaiWV;+l0E0du54k zCs0Boop4t?jga;C#LN+pCI)P}?7c@Sad0Q092_*ek)cTc;QGsM1`Acw`0-aq!{$%bo!lUdjzVxNq}6j zcH`I7+3OUw>S*zy!B9B4;U*xb0J?sX+6c1>r322?kcbn89Xgn>70VLzMLhA?OKxye zqazNqKvDIPpOs|$Z}9Ef|K48H8q}7B)Tnj^y81;~-&DpAFqcWz59Ni%5wWm6TrLy* zn0?yd+4Kgp?USX=tx%KmYM8*-`qOC}>lImVxOrQGeN}vN|t4>CmadcjEc&4;5 zD_fnn9({;&qTCYQ%2TBh*J1S+A$o2^>ls;c@K%9s$Oae(xmsL67TKuZh}MTzw3Pbg z=6C*XQxhtm8>$`A6)vKu|0%?T^}4SdM4GhpqNT7-41DIQ%DwtJ(1)hP@a}3CJoUvK zr33|2R3~wcji9E4XD2{%4{o!<+-^j7aKIE8b`Z05+M6TP&r5tpHdV1!7JP~MIkI(g z_I1AR_zTJUHZ~jsxTm1ed^$0_BLpyzxm?arnfC}V8rg7-)h8L@QtL$B=1f7R+MGn( z0h=b6>omMl_K{Q=*y7{42crTRT}x*4ha!Hho+H=pa?e7A8e@i_2S;(ZNe< zO*KaPbtYJLrZqT#RkdGa$YIFd7j??|?|Tn_-vbfwzQUZQ3BVqEj)!}g6l<#8I*j18 z26pqc1U-JQa|!^sgj{S$5lmZ#9WhfJgYl6maHqkn_~wos?Y-A-`})-Vo}MUBDPv}s1rMxFt@S!bVt$7YWY{#Aqnw6Rb;59ed}UP z8a@I8K=XIp`PT{306&9^NZEi_gHd0|Sy1M$ATyX`x56x7rLeR42%IHo3$wK!{3%(3 zQKBn?q{&*9lvb;W0E2Okv9^x?fFet$)57UK`{hGCCl=PgS-Lpi8iA!8o~r`jZKcMm zvzh5UHZ)NkFDqE+2GS1Fm=S4?r!KqpstRc?Xektrgg|$q`xB73PLQFDvrSf;iQ=A6fQa zR66Lb>V*?xB4NOQL>N3#9cniL!&*Aeuu%jLTTQnQ9Hyn$h{Knlh6gD~2w&r#2W)QM z(UipZYZN6in|L5*pdNBSRqQm;F!S`mnLv~ZxY*f}-2Ls0!V7)%T@)o|9V5Ha(k4T|Z= zXGrTqiU^>(I>M^Sa-W5Jf4aqS&GM0})jnD@fFQL_d^T2;_lW`ofmol*5!!`7xl7n@ z46=$wM^uoGXAlV2H&xF@(|kbb)NvoAzC)2rX+2?7V(SG8ldiA!^P}=BIcEwtw6XqzlX~92;yy(s3J!&9v9OVkGK?rDpT}!dg+L;0Q2Sq{lZss8xwUz=43VP6 zp0)05+sw zAKIx)qFYNazgjBJzpi(jWFhRDyKKi{51sUBk=y+7jQ^7cL)%0jYge6&DAo{aziaao zgcW%%P~I8UbhP21YJRE}rt1ix-R5R~@D49cH?Z?)fX(A|Mv&y~aZs9s2g%sq{fq49 zd73{|D?mlRGRqm+U}u&w%&Vkn!fmkly& zUFOwcs~BNKF(QeC@V64Zq3Xzx|J4FSsI@2ss#NVAkZ{k2n-z;AQgOqWzofkHY9>JOzSo(TdmZ>}h;c8_=(T996{*O}0#u|9JWRXouFJO@ zpe{u3r3be@p7Ca} zu2cg&8aw0NJ5rm5Ffot&FSnVFxr*eO$`qo6pI$Fu8!E_xKGiPV@CBw=`VNQZU5=zDx8QPNdxWY2X|U=UNyiH9k?%<|O8$tpunq6VhJl)QfB1vXP1ZMJnfZWao6{|Oi|Luz zP|TZ6twHLQknyT=ua&IJwN*nGL@!otFSyoF$kOfq8qPd9Br13s{Ow#EVcT!iE`j%% zoq61ac!a{eI0By_)$m_Oe^Z-*RZ#ByNM;|jF3I{T{!yRIpfBnMRk|IgvaX)_60`+y zO7?y_=p3IMgG3s>rI&)!WbsEyL8Jjle{HaF-_oH`C7M~m%!zP`ga6{R(X|oFEaKf5 zDjM6GyA3=Zm3>(fJR)&h(O6lcm31mVLD+&3c`69@Ra={g)0FIfu-O8m;alRw-M-?z z7IRzlg1MYlPkkm`dF}I@W0GF^*0Kjedmb>Mv(~XL`tiR8 zZ%@&@cYW7>rt%dx%$>NCsLsf0ggOK`HLM<^0T1#nnOe<{3y3Bnq|tns4-9$Wupfz~ zPNH@Sv&WDkWx&=?GYtjd4q~Im?q0XLVS_27Cxqzk&R{6ZMV>W_+TI}`(ck4nQTEoZ zQj2t}(qVmpg}Sj=1@WABw!2lWMR%^wLi=I_rpHDF#X&9VTQ;eN>w9CpKvIWYaMEKcr@lBhHiRp zZ4U(g*GVsa8^K02ovbw?rT#r#YLb1ga>rD8 zhHf?ZGs+IA*wAi_3A%7Tn9Vo6$V@Rv2g?Nnw@JL)Wt7#4S~Z2kT!yJh6*sdSE2F4m zbb7ySF!81MO^32TkME3^V}+G3ujXShkZkf(VxtE z$6Y%M^23X)3nQcWfC>0bccYA67`CaDgoZ}?GQRg5{qT%8^spB?V2(6&XO=4`nrs6Yrd#{qFtvBhVsOUqdSt7}Yar8POE z0m50!8uKM4LAocppRB`_x;a(+->#pcJlkDaBo(>!-k=O2>_lOM$9?tf&yDujuTfS_Y=%ui(=BVec=UvtK^EIXUVa9UOz3 z``@ZQTb9FqAW4Gc8?CA#c`|(39UBH|7ta5|*Xbmspg~{*_krrt)t7mRi&>%UO|1;jW_1Z0s5E43b_qLuNm=%ul55Q*L9f+sTR~Gw;-5M83FKdL&n8eM%x-~w zMrb8TLaUHmQ_8giBfCKyO^TUC`1xKjqq}rq!4FY=OVNAR8Sg|!ceIg&VfGts%?^`W zQDmX@3#%jOmHeW1QJQAu7z4@}9S>|~&>M#kf|oCBm93Pk({e-SWn|a= z{vf^Vbm224^2d^H$x6G(QdK$E?WDnKbl ziQK$|G3{iBdDg&8REbYT7E-mAg?4;qngXKW8Sv3B-}?lfc%N8pbE^W#=9lD$^$r5w z*A=6D#rq)q+}ZqtB!Mk z;13Fi!w$+_+N?8!2uAwVibJkN;5^S+3i1(N%`UU` ze1pH^)L;a3019br(-uMuUgup5e67NLVN76f*K$fg_()r1%QidofeIH|Ku`Xc@co|uko5&KHA*udAAf0;}X#NQ{`+{V$yd`W>W}Otp&QM zW@f@1BsnEm%D#59@zep;dkHpCmf@OistB^Y+GCBJt}vt+I);;Hu4S(TbkC*p1?|nTMkgS)6s%rw3=Bj?SGfh&O55&v9qrbOe_k z0hLkN+1D;PWq_^YQt+-=z)gwm0xLKM`5+j(mlN1a{Mk&}UI+PIn4K1h_7JtKM7I3uNDofMqp9vB58k9ww<@9Ed1^2e~ zNrKpQfgO;9>3Q<-(ZhD~cS!v3@bQDkMl@h|(e=EK03M(K!sCEP!LYrf4a6lWDd?w{ z_Ytytica*15yjNp?hPX6sTabopoRT?Hn`zvcB;kcK8HqLhD5dI1IoTfep6d=*{d;` z@gxt8i1X;7)k}GSlXmA@_8pRN6lCN;G_IkUXMjN=5KD2`0#%a3g^*0EHoGXWX_FFp z1V0e2^zzZ%!zt~+OnSM@!Nl=!b)z9eyBsbv7yujxgot$o5YbLn557*xruiy4vD<+` z6IWyQht+s|n!f{s-0!H%DbVrGRF94`N{#1sCg=>c8qwNB$C4Ncl63b7EgP4?1J$5b zPwae4o)$9cYrBcnva6^;`=xhh+nJ9~tX+rK-&GcZ0pM`~BR+CXfUt*g!w<+e6ssu8 zLfP%BPQ?)V(5{EdVfvt)hk^;-R2 zT6QbdECtPhU68fc->tP}0$^H9AMS2XSx>od-dG1>&1#H$Uv^h{bL#R_>VN|wytm$b zE=K#ma`%OPqT0lyRC(TnD5ndXYOI!9v(Y38KJlT{CTo^{>#UMvyTV+4=!$|8AN@oGPgzmiJlgD zMf720HY%O&0}2z4x{d;bH&_iPUh5N7;HVgF!rnSM_=_mOVC=5gb>7Wlg%d7S1vRvp<+}AcZoXgJVE3$uD!z_>wJPC5d0157sv7U3}z*sd@`_%Auhyok4Ck ztZ4%pT)#gpH^0M>ErFAo>q8W}o_L)GKUuEPCL~QUBTqPmBod%kdiIrOUXy{TLRkk( zD$RA3L6z2$-zSe^4rPwv57W^nzb_yBo?KPS*_d=K8lOdoIx0|c?Z`AQJ=x!EH22#B4(i}c$)=$jFp_3G)DCp6$X#yyJo0%EU$Rp;u1*aydFmp zQXUoY0cKR?Nf$7kbEQh9fhZ}2>}BQ<3}!tvn!#;cbaTWXHPndNdeLQTQx%#)CO4GF zPx**=M@(|0*cQtz_@A~QSJrZ)ay{0|FdrDPYJ%gS?9Nw)^C%aTuXu-z3hIIxJH-M>+~i7`#|W8wbFC3=!wu3VvQ6304EHSNRp!4jB;bE_;VxQnynEB-5{N~he@IV8DRbc@0Bb-pKu>4u!t-`icpy~BPTJq zW5CFCIfALe^d2i7D=Fs@(03tbGijHAyf?>%-3oc(5Tak;!74@ z6L-V*{fJy}$lalB9wzAbr8TYCYUlEN8ybSsyNb-@;k~>N7YGKK)V$666pZbF$MZuf@>~I~SNMrY_ms1DS2jN>;gB1mb?N>pP5zZQyj|ogI zO57MLDzjEC4V7+i#6gIzy&s*oy!5sjEFR|?lBAAk6E4lm)pqTslMWg#{yuS=RB+xV zZVAuu~|1nh|OI`poc#z`f?X``# zG+L9vb1|-icHb}!uQy@=mgHO-ZX+*Ti2vnZJ!NU89;5=z(W}cpy0Y@3!Zt^) z9u^=K<2kAdcDLn$>jkPBrNaLt#@8x!9wJv02JHyB8$Z^5fnkikRa4oGfZI=SS!}rj`hLxhPva?5l9Od zn8IROz9s`l)iW5*Nz2OtFNvbK7ntB4_%N{RnvcA@EYdAC`PW%KF;a0_X0MWDJ^AtQ z_^oO8k7mDom;5zpClCT^ew&6i@q+y>`CGCvN5k0YC>1OhQL_8AH}6{($0qfPuablT z1cQsaIN(R+&1jl_tz<*8J*T8eUe{gW2{N{}@K8mgb#PWXgzx4y-9mj?ZfKQlrx#dy zSXttN&+KYtAyh=Ok?989pVx7P1qbb&|wHZ#kBie48a?mYBK?E7?f zfa2ichmR+x=M7%*b41gcj(wX@*mV6jH0WkS6M?tvB;5zAv)PQ`?|^6%eT{&Hr`Zm^ zHi&q!_~E%R+>+E*9davwHY5z#@tvc*F9j}dimh2BMC;V>noq51C;5}-@#Ijg@QYW8 z_7C~ld7GmIfjMmv!91;48^{JLW;;~SMNTo z&dKH9VC!I>=@tf$h`B?{2G)U=Qzbf?+w}Ga2DV^j4NfD2pE#d_at7`T=>=ocHLKV$iZx-}U$Fmapvp^;Q8)ge4>y%c?{NsTTd*K~b zw-||29c55eIw6!9iE%o*V+M5$(c7e)gEFpi`W6aXVgSBa8A&i$zYDkQksvEn)IK@~Ec z`v^|1W6He@_H9fk4iv2*>?%xRZSQ|m#LqYX*KL;~HYWCgSL>32Q1x+8Z+5AP*o|)IJF3+q12&Ow@lYQQBcmZE?|BVIq)UT2ZXpq@ugEp`wI9?a8d)1 zztH{4bk6>kAqPJk4o->0`o_Pb4O6nro zqy;dXidkb}lhJ_&Ty!W#o*=$0A`BsX2;K)~4@Jp&mfVAh(7Y9lZ zL81*%3F>{`l-wS$pOqv8Il{@MY~eMuiNy zRgMDqDlHaMvNRisQaWwP$&YdUb(AgKiA;<3Fwol*Z*7>+lhY5Kcc%vdD3dtpjkD~t za?)G(L32=NSt>t2Q1L-XFM8%ZSaW}`uW{HW{d}cfwb!fytbTv_`g#>S10p@b|Hmye zo=@ey7#OHua}X^!EjQ-gooGl>enIB3rMDy#v&ReFt4k>5n+0>okR`{7{6Z0Z5mjF6 z7%lF5!VazYH^>PEXx1)&Guim@Hb`|T;eI=z=JLwuer29w$X!Fr1n>eUxvxhqvtwsu$ zPE!O~lmBqN>#)t*#MGvqyAXd}r@f{zr<)!?V4kk3a00@$GDgVH`WOXgdwf1YpQr1$ex+u|`0@JlbtK`tR@-yh2L? z?-~BSP2YDPfmLc}w~A`Jwn<;qcUX$ob+=WSl1CdFeuAcDZWB!t(z2fFd_NJYF?*+1 zTN7jtIG^wVy?2x5qx-Um=s(YW*TA|yCXczrG+a327fTVN-r`vw1ilc z>x3NDbM6I`#kzo!ii9_T1eY?F#VEU0n4ffTSdL?8e@OYu#G(`@L_-Xt#0I_mkXl>o zfhi6u1yg>?z)9fMh#Az3=rn+9CSt8XSVge9nc^ivUy9)aY~^Sni(!`nYGVllksA_{ zHY+u9QO!^*ysMdr3Q;5yh*GA&KIo$wCOpv>uleAWwJ(4Vfh_mgxlMNI!Ye|bOiNzl zEOG7qYbUUc;b~&%BmS0Q8HAaZ!9u2xegy5R3*0c}(iFp`;c5vRg6>YrpNUh&W=e`J zLI76s=;*>0cBv-`GLTcg;5|FVqGT)-%vL)bR_P||>E^`-B)sVnT&wH_YRL3{)qJo@ zJ+i3jih*NbLr6;jLO4`GC=@DxHPuD&=6!VbKt(Yl7or{&Y~7~Y2x=#_2^5&jW}s2Q zmKPl%S?D~Iaq6@H4ESb&MOQB;hOxO>1uT$cSWvbF=87yhTsp}%Y(zDlgy51ydlQb@ zv;hu-=@&RQgvp2;6oAgr(VkiyJ8>(xgp7q3IVVCa2L%ul$DCQiAL0>}CG4eqbd{SD z+6Ilov%Uqr*@S!G51kB%J@+BSwjs+Zs+1!>wi4mJAQxg-G&VzzcnZ07#ZM9{`bgmG7y4DKig{?k*tOL){gI-*N|$B3h^ef zVMbeF2EnFmqX?w$P~#o+e!YXzu6$Xa=|SEvkm;c@-v*~)Q1vx9X6ZbG=yupGCd40| zS@wdqMP-I?BWIJ#EI1oL8hpkfYABIR6vfDpL{5XLVGe3J1CO_Ro0r{`du*f@>tV3r zb9PIg>7$fl>;Q^obCa1m-qn9RJ2*PnKR-FGZ1B0;$4o}xTx!pMVCwu=6%J4-bM9+h z(IQ}gjjADPz12v2JmS-;r#?RU@pDHmMA#M~N52u3{1(wu<-sQD3Q3d`wunSEMlURM zmYNI%EWBHqSf>p3J$@UxbbR`%fg6u79mQl?QLD^zM+#DYMUoeK_~{WXum|XFGxX3D zN9-B(*zfmz?Dqyp#z5i8W((B8jkC!xpH3Y_rQy^^iM6vJ*8l3a<6XUbw7vbfovezn z8h*Y?;vHKR-SmRChb7rGjuX5Be%$4YD6ho%QG$Cbq`20|bXyOaSFaZG7ibt4QG3D|#w0kRSFngZ+Ev ztGP*xqylF<4lkE)Fy+;5e?Qw)^J#|^43S~Bng)q!kCXT|j8^QG_%E0VSzX_ZS&Kro zpN>Eq#iRf`fGR9JpCx2bGh2BEh~fgEi{0CFelgisv(dLIeO#c6OQf{Gx?|(GPA8a2 zbA1*2p1UMqG$in_Z5mI)BdQL7Ld4+;H&^`7>%2|K0k^R2{Qdfb9Ij@SJcI18k_Bs$ z^~*o}!Tt6Uad4PatJJcR4G){S5>5qUABksY`hpC<6)d1NB%o zcUWm1fOK>KsNq;)=a>i$k4%~{n@{AF!}j%ZgP#V>w2% zNT+|5um2`CczEGIb-hb^At(~;z4|oLo+=wDiUUlCpLn%khidKmj{N8ZzK*siSPW-- zgdhWz((QA0b6re&C3tqQ*^y#BgM84q9!S!AmF>Knpo^lOQ}akDJx*HhZ?-pBNhoxX zuK&s^BcKtxRd(mdWd)l=R2nn3uX)1}ND9A8tX-Xs3b_0bZSU7fJBS%2u~ zJc*8}H)qm%=58BN5QWzrOVpbx&*oGPsRJNCYEZXa5KUF*bE-CUjA|vLLF18;T&cW4 zvo%SQ`Y#Ju9&JOKz&2VOeN1X_%$;Z6OUhP0eJ5{EUM2fLmjnQAiXM8H>=xxKYr<-^ zS`lT-IwqGgO!P)IkrVaRZ5X&fcj<98iI1&pk&5QjvRHqlH^1_v(!U{fm@GQ^x!IN7 z#`&MnCu%y?keH#U^yt@yJy*=xbK;>JY-izCnzr-URo!5c(@LotAWYuziXygZddsFb z>a0KEdLpgOZq=n9_SV&MUc27H+CjF|jFKYOf9wjAdauO7ZdKqGV~x{bW46o zr&;}u98YrmAhsWwA6?*l6pMCdieQ9I-6{B!c!!u_j&v!U(^=EXUJT@vHZ1H6zp7hT zHoTPPl@1SP z*}T<3)RVf!L5XNLMnB^lx2Y>esvXSlO~K#Qb%@2X-3FTO%%skka$NX19f7kO6-JQn z7MG*^pPZYPr6A0xO-YL=k!FjX1TlI_pfrqJ<}f^PIuJDOssKfWVXHzTHU=13X<$Pc zrJaX%EIa#3;DUi@R-b{t2SlUM4M7W2c9U_ML%hF{f&wUnnA(xctw#X1g04BmbY1UQ zJOb6M!WuKuCyGpQ!LK?omh0Szn(TGrDko)@$}@N26n^6DZTa7-VrHr2eGwjgZqj5* zO~dY|u(MKckG6H1*NaT=JBb;x3M~&t)vClmAB2ECW-ALQ>o*C(g1`W)`kh1-;S3Ag zLV2xm%8~Yk@)r|A)D*lBUbv>9d9%^nVtv`e<79quW_+tv(DTM#Gb0<6mB&p*Et43Owa*(16K59|rKgPr zg^LM`%Jb&J$dgry;?u^0$gqUv@L^Li;5~vu@TjQ>aTY-#dKeT-?ElnW5RJks^;&HS zdA+*py>F-yxq*0X_$pqLHzc{ggF(sT>TKws2>U&130tD?BCiP0{*yPgRnP!=)3D-OUB$ze@P4i9H=jKgM8fq`pAads#Y|lC8s80Bpl$+lEiL zXB>H5c<~1I^*2#(?XqFjnS>eQ{08Sm$_FV{Id~JB^+~n=m``)%b3SiL_!y5<d5<4$^jKv_g;jsQ?30NFTo@@3A2qA1#N2wY7R(b@_feIb5>D1SYBVq~ zd;a!~r1Guy4xKK-4StK<%6>?aS_N6n|M-tYJ;b%#;Kgi&U-)qH_R~?#3Ul2X4fNVg zS&S?%v!#_sPc-Czk#7VR;B`2-Z{3}CDBmEMLMwwO)J zyl2B`*p0?#%Ew?vLWIF#(VH0|v4&=U)0Wnptayb*xmdAiLDZMd9_<^zBAxRcPa+Ji zuGtAFVZCHzSfqB31J;#`g8o*0KCE_@^xc)(h=D~b@FEop2fTRAXi8qJ&&yZNmg>c- z*X(!D1nH}9HPs$xuB)}65x1$;XWDhO7J$RA^qpsiUwr>*246QLxw&uEd5`y>`ZFiLtkm-Sz;Hy5?oisT`#F}EUO#RrbqE( z9dp#&TP{&4e*-DfQkO?S(N6ydcd^$6+5fgH z=E=G92dMfVjFjt1?)or`qJ8NxdME{bMmmOM-a?8bd$x#X*wV0rXX@__cWzS&bZ*ElUzkZsPgsr4LDu(Q3aoObx{EQfGt z(h*cXC3NFrLKhCaMu=K3?ijL#BFaq;STg`>VESZ8^%uiULw-DTpS{ip1JEI(Ul2L& zqbogPL<|zR(&8L74bmON&_J0E2Ktu`=rQI@ZcYI?+B0aH{K5Rtto&C$Rz+F^(LfGoC$-)Wg-(6I1^}Zd@fjnh2(~hnw+bqYzpE_+)wsVnPo z1mR5p_`KWqA#|iy;$Dcgrw(xab_u7>`Rbz}QQbFfJ_Um4 zN!x|sKrL{R`mF&4wF?MT-u z{i{eD=jb&Kj=iv;kgS8q0|pmzDs6HIM#Z4sLYhq48RR9SGmay*V>T?I{Toio2Daf= zY}a99*on8F^D2W=3)4>>D*0JgpkDC66WNIP5bgA*2;zLB{5C z9#3+N8^Sw$2#GK*kvWl_9^cV=dh{Nh4#zZ8mE01ZSu9b|vZXl$j}XFz zVUvSxx!QK)r4ZVhYVO<5q%TIcBALv-F&CH19Pd4bN4qO6mpaKzU|Lo$-~!(MdK;Ple`{1%9Tnsc54i4!37fANntTH(%M9=q%g8xaxM{0vqm|ww!D_H+&{+&BI?} z0zyO}cV+%$WeArG?_u>^cT>1aFD%IgoJ@2}M9~^kw3&N=vV-lzH34bR%)3%aDM;-2 zd&JosrlTn&xftA#k8N72ptFiEi%n(|5|jqULq^JcPBZ2PTi%-);7}w z!PQ%XwR1k2!#PD~zxth+_3AE#_*&6nlmBAO|RX=E&c5^(%wXPRdWdMX|DUdSf^W+JOXfj{uxICR6;3f-vov(4`S`>-Rd z>cL+=o_6+6j?d2bj?Zn;;rO4OE)>thezPMn0alvNS85%JQ@_m5%A49^d2Eu%zPLLHL$RIKb_2WPSfOB!VOjW)C4M82D zQe@mVi|8BBU8)uPeX|(>$NI@!_KJ<_fV6gzbyI-%z|;!BLX@deVDgmo(|iCN!QTmy zoJycFJSU;D!lGf_fLnv*eYTV5ReTJAsj_o!?`U&USs)8-X;@oq$>(wB@u~9Q00TXh zsQWHB>by%I~*wiIRkw$M2_{A&pm%`ht1 zm%MBEDE>*3kf>F1vkM5+;Mjxx>{J-lic5qiZ6n%6^=7D8n#oPVrZcVBFyq^;QZdph zHF=((A2UGA-L1SsVZsFeCvLIgz1em^M5t2@t=zC3XzeMX$bCLm2|$4jWB zA!DKm^SIX=k-T<{Eyt#pZ|;L0szuzUO~;+tZt?)oY}_$WZFYP?#LpYpGTsix{=#L+ zXsI8DR-8ouj7W7gC%C6M^3GG@ru;s#Np z7qBiBhRb)`LnNJarLcBRU5={ti*(&SX zk6>z9dFHGbX4VTl18$~m=vqjPT8n{9Mh`IumRI3j8h|I4tf-#6_%j|SFs;R@Tm;B= zK{~fYM;0S>3kSbQtob6OZaG@liW9p~E37c^qaK^mL7H{;&-BdnZo2fG3Mb+q*{;~_ z;Trx`0Axr#YP?^3pslp3_Nto)OO-0H=|VURnbn+vzR>CK*Ir7=&~DFplg(H6oo!DE zA{cS+tOKJAhMP`qw7}q!yl_$iz;S?QB%5UbU2BR2vMM>`Nj-6YKa$gB4UU9*SCGn* zV8nCa%9wre$~3{0dkw#O1%Lx>W$_>d7x|NhVC4#9JX!UWW$#5cvy>5TDZJf4Wfa0^455+^yk98_g zN=844Mm3@ATN-h#)?U?> zG~chiG~X2ey*_8{?!ETXDu84$f9)c(&0q|U)g}d$c+Q&VWqxUxAnSl`h*|#C5OS28 zNL7u49^Cjw%rd9WzqS%D__N(k_!S`z;?RoNo#xyh=-E8o;5Otz+nI zMn1gG3W~D8UeY+ht5!o!XBPM)_nB~2prvVB{IU% z=gAV?0XkBoz%iMHo~jvVvz$vtN#?@~*n{KT9ZjfK7C8!0T)iY6W*3x{Ddme8>ifeV z7D^HoK%&IpxcorGMFiTqnir8_Rs5ls+NPQlT?K$NrBA4EG)n1IxoveI8FDtjIR-(> z8`Y?^y9qoK9?a|(plTuTe(Fr7W@HX*pW+DY_{eZ+_cwG$=m>K5qtR?I-~;V4j3V+q z?M==aXX-gFrVQ1OVQK`LN3RV@aOuh^lRAwD_#V=$nVBP#EyntAts6CLB#*f!UId+} zF}RUjV;2K3m+vk7_hq+hmY~caIoCbgHewxO^BW>h2G5=IG&uXe;$3;qHGn}Y_7?O| zMk=f;ajf2viIouC?Wi25;re)l{tW^BY{(DAbSxeGK3OPF6v9qOnP~9oh93=&?yoN@wBa@!_ZNg$t%b8MsCY84r3w=cKZ z!&E0a9@l2WyX)%x>^1wv_(u6q*;JMnH%Uk|*3n$1z6BcZ1p-NS4zWy`+xNy&oX~Jg zp{Q+6%kbbDcpewE=JRK;|M=9p{Yb^BTwS6$Z56Ck>rR@gTOGe|Zoq9))qvW$%QjG> zBb58hur!c{$c76$zOQl((5L1qy+qTb=YcSu6qha%xSS$0Aco|@0Dn65Lr~KLF#WY5 zZ%}S7zXxOU|NpVOs2#FNonih)t0LqY$_Ms(U#a1E)+-!ONJ-RKS{}Ebgc)q=NSCy= zu@<9RTIPx}o6))+RO)K^cGt$VtxCbKa3^9>AwdEj!;)hSBG$|Ml( zFkd4>OKDXy{>qLcTQMP1xvyOh=rffX%?Z3NbvVNc{`i0-5;kZZvfC(?$# zfahj!HXPnij`iLQ&7Q8p@py2 z*6&;8LOW4jFyT$8)CRa^$gm-NovNd9h2BPM#u1n}lNd@1bY+qbDRUn4z$C2a{eFgq zX84$rqk&SmP&uMGobE~nCv%#|1ex^r*$9KdVmFv)(5nMEvFe%q zSXMFCHE;x5{WYm*Q#2aWrn|#X>10dy zuJ%#la%={rKn7%>c0%lfoBC=B;i}qPnO|x(=kpP7P`41?TF{-1MkT`O!P%#y^FReh z3N6GVcgh5<8=*vi2gm29zj&4(%pu5UNbx>vxKGwO)h*wNc6Lo^RyniY++;GAxz4obug=L5m2s+jd+=h1XJ2dh=VTZC4=pf|5se7|3<1N**&sC}zF>zK>jMHr3=`$SU%NIVh!_Ycmiw|m--80b zG}~KBqt+9#E3F?1>?9#9hmweu-6g(2Ez}p*)y7>(wD_oTg6#8zUf3Pz(L_bjQ0l=U zLf+=o9M@|x1j)3f)y1e!FqpWhV!~U^F(`f5x4t*Xn`1bHMkYqyoL#0IcUp!7veqKJ ze{y`jcX+H+v&4KX3Q>v%qRP@~<(GA~jecgqIt1C+PK_p%E`L_lvnRT-k!e#)>tE4$ z;P{N~`a!-@BEmbf(YCa~RTIwtYp*T5tn#VLTB&wj)v*bCQJs_xLB#l39lFX5h&#># zKZMC2V+VnJ2z{?RKS=?B$XaqF8tX}^?Zl!inOOpzkvjpS#4ZmmkGYIDi#>C%6Eiv zAT=3fn*%@ghCWm}U^$Swg$g|P6w>GmzJ_rJlrFHcne;7`D8iDz*3z_3r3|QpPJQ8H z!@hVGaUXT)u#A$gd^Vl)A4cYl+;CMXrILsQbcvMe*<)&WvCzijg_7wovN<7S6n7pn zfJuYTp2nYR^4j}&da{4;)>P^3%JtKoM>`TX6cf$t6jdDfl(!z)LBP+#{M813=*bQI z8BvV4QAywJn8|XAVGiPv&%qfYd0>;sXA`Y5=T^)k+e~dDGT%>EIRtLRrN6k?rv;7> zTh<$Dv;JLiMb`6W%X+NZc}}dJK~AF^ab%RsIY2fsR@FSlplz*s+{BqK%oS+lM`b`T z|LL%=b-gE{Ckn@Am`7h>EMuBQ1i-j3f}~-c-8`;f+MRr4E`^-EkF6>PlJ{DU-kV5~ z^6v9?wJ~!M{}(&t5*8sr^^d^;%|-A2Aou2ph+Iabu{-Acc$07TQ!aWfPpCMYhbr z(>fo0G3VIuT&Bprp*N58J;Q+rb{v2~COtO9&=HI17asAoUtDG*v)0|1=JwFehSFB6 zdxMLDGEr)CoMns(TaLl&ft^!WeIUK&V(Yy7bi9AAk{~YAuQXzMv5NF%y9yX>h6x_v z=HT=d^<2QcU|2S}h#?RD8}MvKmn4f3;lI!OowArsy6C1ys?)=FZ%*F+vZ1X*h!39(D}vnWck{VcXZebpaY& zv-05*&>qmTsyL3W<|B2Jhmk|eZd!9M5s`isyA3yf`fGiSd7BLBjPgFr)sj+=veFE~!Bs@hPyD)Ubil2wYF zFKbo!d?chA?5i477fbpY8^?2R93jBC=N->Jl#7hRZAt7UK%84@j}F>29*c|>CW%;Z zG;_O*R`{k4zx90wf{RIYwYoxfWXnuGL^Jy#bFdIxxwjM%aE2JXh7!2U84seTYP?wVFH*>LaWI*F<0s7IlDVKAb#p711HMz*KlPF17`IwP(h%S-bW<-RvU*;?;1k zI#+n$h3~_g`mHg5v;Ikz%}~% zyNYM1v$Nle1#>i=N2}3SS|!6}gD($35Q!tV*uqwCnK&=vp#|>R>-Uvhu06FD%+LK% z{LKAvSUR5K23_A+I#D-@rRZFVJA8>bEc$lRtn*5ca#JF>laIi5IknL;dBhiXWuvrm z`LshAYz5&YXvL9Qf+odPmDYs~{;FfxO0sQsj3f!x(k{5^dogH>#C24Skjuq(R9Gj| zMfxeu4s}5s^=$D*og=aKqX50>BmSweBB;20x3q>J51Q zUY2+)3#j9^pDm=0%SYNHC90N-_@pl2G7)$KyE{eVtB@smx3_=Lfy@2K?5>qcOkY!} zy*Fp)5S>+T&UX{$8}iXs%o4hrwFOQ1!0d;9tc~6qch24WC!y*}P)T&i!Jy*5x~T5i zZ3`&4wEnv3czdbezU53u-I{*0gU$!?J!~Drzmb>H1aHjf;VdI3Fo~Q%+}w2dc4Glc z!ZpXvr!w5e>?{=>p@3j%0n#9S zep>Q%ND8rC$#R3~@?gP0^?W^nXlcW%P0+kAAfrkHS6-#P;+mrpVV8|fze)`Y1{ID$ z{WKx>#7#``jc)G{QD4la+J9%lHxDI#^+^M!=8Ct!PC4q_E&L!s-4XiifastC7tQvd z+Gz#lm)S_`b90s7CRw>Px72iKc){gaEun1+i+t4Aa!ND`} zgC$e|k3XNGi#Dl}eRP_NVKK%aABfjU)Gt0)KCX1zIT(r14`m5g^tndOK)Os4>jh-3 z_n_JCc8f`m-5G5b(zc%;DD=8S;6uT1Lvk#>r{FNEe4X7CcW93Dt!zs?Rk;R=-$6&J zHi0t1Bg{u>`gECb#SED|EVIEE2pP2wu2hZTFE+^4)tr(7G9IBTwDxzRBpkG#*(089 z)+>^b(#!+7db@ZbJrSXkUO4i3NMOXp%hZ2RXv!%Ad0`Y7;X`SxYNc|OyaAGPHX(V8 zuyYkKx@dqIi6Ek~XODKi(UXcdX50z0K2b%0uT=etP@+8Z1&{>3O1was7{W{3>VO#Z z)&&hQvbXdPe}`{~ zf6<-W*q9gY`ZgP+%vvXUIn8s=>NtUreJ}>60OkXTgg-9~q zdWhUih#rfJ%${degJ|b4K`T71Roeeri8E|quPc)OIVY$c7UdM>b~vDDYXP}?tBYn1 zO0(tEBpV1YYJ^U5-JKRBsF&4fVstfWCr0MH!flvxDs9zEhr-*oS?UYxDhn)qG8;q0 zBb%Fr2ZX<=W7LW-@PoL%qWX@Xh^$Zf=oJFR?83oKTv`bhCTuo>kN@4Rns3;n3gJnzK~&v=`XkcQxP!D?jVz1A!`)2)D=V0y znu}c<+zG!$jiI(JVh`wd&PmeSPpm1&Z-qujRN$?Or0nkkzF2+OMG#m}!N=8Dvo5P> zTQRlzx3xsIG&c0+=w$!L&fC57y>Dwwr%*Cd8Pu9Ut&NQ5hWFvov>!*5USbkrvcGl?3v9yPmQE)dn)3yVlX;qcq?lTorw)mG`^qHNm*D4BaH>S;xbS|oz zkN3_2Q-^a_$wSs&f)Tu*Mp#3N-wpM?~8pWSPf1QPM^8Pe0Kt1a-GOopVDM;*kfmOYf_;gQjb=;!=S- zCrj0`vC$@N(+jEG?oUraiJucZ%OhsXe&``Ibs-S$QLcT?fafDLrANx2TM)pw;w(gl^U4ImO6g5 zd}+(_Wp=2ngp8RZhEYQ(&-8tb$Wj;0LE296#1-;;cHY60GY7A?VUc_jOe|?+6*G

            HJPp_@|_T=;l5_};;-d*9o~;rC-wg{V)*sHw+`RM~x$&VQY)D}oDc z%?z1Cln$>Zmg;v`lDbz=(LglwQWMQ9{KDj!@)&>qfebPBy0>5LP<}Ru)0=J;fF*nI zmxFy;fL-^-)U!n!lUiN`tWa?*%JIWyCU<#-$mTDSZ3H#YaX#PXbsF_8RmPN<#ia?K z@4vSrY1|XkTKpEW40&}Je%-Bw_UT+IGv9CGrTITxg!WRCSGfH}y>b>nFKzZ>-Imf7zA7{k>x}sSCQML(_{qR2*-#xAVKAI{|)Z4{r_t)u6KK7G_SmQ+q}M`PZCh-c*p6aSHYTsX@TxeW$Ytr!#L76!U=pcGrPzn+= z_*{Uh)+sF{RDv{GQJ%R38P8?lEShtO*=np_7%qyN71Skki`huxePm#~-7%g> zgDgzTY|uB=pW+Nbd5dKUEIH*-h6qmxDL^k!%ZElL&6T%^!-S6LKIS+bxEUljG2Rch z+mPW0)V~v*9g}Z7JMmD0FI1Zp*PnCtXmzmA*`Q}`A-FPNk+`s7t0bhzTNZk@;%B0U zi#x(qnBn18YeP0*%|7u$*)38dfeX>71aZ~~$0VVf&Fc-g4U>faxg~~TCL(Wpcu!5@ zJV~LwVg`cNKW2q?xCA=to>sy0;XWLsmn1RBGLD)9m3PEZPKtCTS;j>E$2ox+So0s#ofU*pVMdSr2HLtqt0eo?jxm*I?L~j4h zbZG5=Z?7S3Tw%5V9J*(eW*gZV(B0}vu((5`d)O>pBK)u@rHRwL|znM`I};cz=*CR{Dfu8Me?$58N})m^`% zt>1$0Ta2?2bQ@2kW-j&l^&#U~^j0T1_C6?IS-Mp}7nt{XVBH9ss#NvA*A}b`nP6Sn zf1_=%2$!gqZ<1bAFRQi@>@o9*>OU6>D?S9+KXE}Eyv^CCh$4hoZ)>&pTiV{EXU;SMDcokckq6~aIQ z@7Qv?x57W(BL=d{{HV2(18-;qB!C;=#8F&*;x4o6lNl)w5>01;@*bkaygiMqWq7Nh z`mZn3L1Lq<4>=rJf!Sf%=9HcWJfh61qR73vikS=Mh+g~QhJ+@_r+TX~1+U$f`eB6+ zqs*>m5=XVGpcFmkyMfs$4wiBQTbpv&Tebxp`2lyi* zu7ubsH~U61noKw0YYcL}Dn^Dj_9D<=B|3D>h8^gnS|&G$juDm3KR3w(+3NDZPmlu@ z$ltlkL;}iAQnf`si}kWsct?x_>Lr%wGMnHy z%fIG-_`~0}q{l>RInf6e`6H15D1-$JB@@yBCMsLm1Yj!MAUD5Ln5&!LeMtwiY>U5z zC=gc8LygEc?VTQ;|Ij)4k(8v>>D3dp>$(_z7)_`ge8icD9ms$ie5~b4Y0RL^a}`7~ z--tTm3nz&IJQQ+au%0ocRdJRs!%)$uOucVygpHwoHa{mkx74mpKi|>6Z%^>jH-AC} z9M9+4lIWxh;AqE#v@2O*NQT8K=Eq(46to>WqCO~>&FfneLtP1x*1`EWaqNWSzcE6< zWj2)~mK9~E_#7q-p5wF|YIe*h7gk=)3!`=&uL(wyqt3RcKM_5675$d(?3(BcA<%dQ zcyB_)%fRbFji3pP&>~=lBdROpGLZuZ?hUNIhz!wQ(m@RQt>9G?*rleo=wTWg9k{I}<{}dR=iy6P1qG1Vwk# z4IK#|>4l_lEYt}N;3 zkw?=UUW$Yy)Fi=8ke1ap_iw-JH8X2~0SL-=+U}j6vttn$%zM_X=XVvG=)4RK_GvTGHM413wE8_F6fx0B|?70q#|{+ewL)1-Q-U_JgPFGq%uH5;`e zQ}SArPk0Jc2Bz;pvT?3PR@;dE`6)|BF=hPz*+%f_?thl4F58iiZ_KI}V9ma#uIw7J zZLR2Y;f$)0#!7*vI0<4rO|I_5HbBNXsE74nAexZ;XF1=Qv)prURW9=!7sflNt|GN< zYKy!nF)F^&DOj|?2H)@jCs7hy!qQQ+3LOAYn`G87tR=44CTgGH(fY(uK9sb) zN1d02M?$^C*~)(<7#oG>L>qz`KuX-g@_cL6w?Xh*HC?bb2sbYo2bT>uu;VtXSFt9T zf+s!+LZ69fyrJZZQ&IP!V&X039WdE9aphr$d2Xdd0E<_?Cog#7Qw~7CVJLvn<=!MS z4LYlWDA0v~J)fgtd^NM_H4MZqo-&-LlEkQ$Ib$6bWeKQMMF!Q-8p9Ar$+$POYEMN@ z%Yp_9h>oP4R>Fps=e^_uHQLGE(rPLsvY>!J|jWhVLm^FyrqlO-8#-%JNA=$c0 z-pX}fk>^J(=i2AJtSs4&K{Qwh5bF<%0A_Llv<0+RW3CO&Cp#p=WFB;0w~x+1#CCX3 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

            1@>>~zWI19tnPuAm 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

            TuPxEe~1yFV#vi@6~tt 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

            kvUIYFX?XBe(n$_kaOLt7N)MJMaY6N($b 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 BP>w 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
            7oSpJ*|3;5v~H%lX#pIk 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
            {ysCj;nnZYEx!n;q0UIwntU-u`^w?GkT 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

            vl!c`cVY5ft-o&tF)uoJmiJJs)!43nzYC&w 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�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

            &k**>Zab~7UIKEV%;ni>ug9$NHDUhxrUVvz> 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 z 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

            93S7( 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

            R?Q(R?x5TZL{fT04_KLgDwIJM6xLEJ2mVdm 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 V=%ZDgemwJRXS9Mn;vKTA{{u0ngRuYr literal 0 HcmV?d00001 diff --git a/tests/ensdf_processing/bricc/ref_a228.ens b/tests/ensdf_processing/bricc/ref_a228.ens new file mode 100644 index 0000000000..601f11ad4e --- /dev/null +++ b/tests/ensdf_processing/bricc/ref_a228.ens @@ -0,0 +1,3007 @@ +228TH ADOPTED LEVELS, GAMMAS 97NDS 199709 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH Q -2148 5 7109.6 25 6372.0 23 5520.1222 1995AU04 +228TH PN 6 +228TH c +228TH c Calculations, compilations, systematics: +228TH c |a decay widths: 1996De19 +228TH c Biding energies, deformation role: 1986Ch23 +228TH c B(E1) from octupole states: 1989De11, 1986Le05, 1981Le15 +228TH c Cluster model for |a decay; Geiger-Nuttall plot: 1991Bu05, +228TH2c 1986Da03 +228TH c Equilibrium deformation: 1988So08, 1984Na22, 1981Gy03 +228TH c Heavy cluster spontaneous emission: 1996Bu05, 1994Bu07, 1993Go18, +228TH2c 1992Sa30, 1986Po15, 1986Po06 +228TH c Levels, shapes, B(|l): 1996Li18, 1995De13, 1995La01, 1989Hu05, +228TH2c 1989Sh35, 1988Ri07, 1986An10, 1986Go07, 1984Ba59, 1984Ba63 +228TH c Octupole shapes and shape changes: 1987Na10 +228TH c p-n interaction energy: 1990Mo11 +228TH c Rotational bands in even-even nuclei: 1992So10, 1988Ab07 +228TH c Quasi-bands in even-even nuclei: 1984Sa37 +228TH c Super- and hyperdeformed configurations: 1995We02 +228TH c Yrast band parity splitting: 1994Jo02, 1993Jo12 +228TH XA228AC B- DECAY +228TH XB228PA EC DECAY +228TH XC232U A DECAY +228TH XD226RA(A,2NG) +228TH XE230TH(P,T) +228TH XF230TH(A,A'2NG) +228TH cL +228TH cL For a discussion of the level scheme and the rotational +228TH2cL bands see 1995Ba42, 1987Da28 +228TH cL E From least squares fit to E|g +228TH CL BAND(A) GS ROTATIONAL BAND +228TH CL BAND(B) KPI=0- OCTUPOLE-VIBRATIONAL BAND +228TH CL BAND(C) FIRST KPI=0+ BAND +228TH CL BAND(D) SECOND KPI=0+ BAND +228TH CL BAND(F) KPI=1- OCTUPOLE-VIBRATIONAL BAND HEAD +228TH CL BAND(G) FIRST KPI=2+ BAND +228TH CL BAND(H) KPI=2- OCTUPOLE-VIBRATIONAL BAND +228TH CL BAND(I) SECOND KPI=2+ BAND +228TH CL BAND(J) KPI=3- OCTUPOLE-VIBRATIONAL BAND HEAD +228TH cG E,RI Weighted average of measurements in {+228}Ac and {+228}Pa +228TH2cG decays, unless otherwise noted. +228TH cG M,MR From {+228}Ac |b{+-} decay and/or {+228}Pa |e decay +228TH cG E(I),RI(K)$From {+228}Pa |e decay +228TH cG RI(J) From {+232}U |a decay +228TH cG E(L),RI(M)$From {+228}Ac |b{+-} decay +228TH cG E(G),RI(H)$From (|a,2n|g) data set +228TH cG E(B) Energy fit poor. Not included in E(level) calculation. +228TH cG E(N) Doublet, energy not included in E(level) calculation +228TH cG E(P) A |g of this energy was seen in {+228}Pa decay and placed +228TH2cG here in level scheme; however, the |g's deexciting the final level of +228TH3cG this |g were not seen in {+228}Pa decay +228TH cG E(Q) |g's of approximately same energy and intensity seen in both +228TH2cG {+228}Ac and {+228}Pa decays. On the basis of coin with 911|g, it is +228TH3cG suggested in {+228}Ac decay, that the |g feeds the 2+ 968.968 level. In +228TH4cG {+228}Pa decay, the |g is placed feeding the 3- 968.368 level. The +228TH5cG energy fit is much better feeding the 3- level. Possibly the |g seen +228TH6cG is a doublet feeding both the 968 and 969 levels. I|g(doublet)=24 {I6}, +228TH7cG E(doublet)=674.65 {I5}. +228TH cG RI(R) There is a disagreement in the ratio I|g(583|g/I|g(651|g) +228TH2cG between {+228}Ac decay (1.23 {I15}) and {+228}Pa decay (2.26 {I24}). +228TH L 0.0 0+ 1.9116 Y 16 A +228TH2 L %A=100$%{+20}O=1.13E-11 22$ +228THX L XREF=ABCDEF +228TH cL %{+20}O=1.13|*10{+-11} {I22} (1993Bo20) +228TH cL T value (698.2 d {I6}) recommended by 1991BaZS; based on +228TH2cL measurements from 1971Jo14, 1962Ma57, 1956Ki16 (tropical year +228TH3cL (365.24220 days) used in conversion). Other: 1.912 y {I2} (recommended +228TH4cL value, 1990Ho28), 1.906 y (1918Me01). +228TH cL Isotope shift: |D=-0.413 {I5} relative to {+232}Th +228THxcL (1989Ka29) +228TH L 57.759 4 2+ 0.405 NS 7 A +228THX L XREF=ABCDEF +228TH cL J E2 |g to 0+ g.s. +228TH cL T from {+232}U |a decay +228TH G 57.766 5 100 E2 156 L +228TH cG M also from {+232}U |a decay +228THB G BE2W=167 6 +228TH L 186.823 4 4+ 0.164 NS 4 A +228THX L XREF=ABCDEF +228TH cL J E2 |g to 2+ level; member of g.s. rotational band +228TH cL T from {+232}U |a decay +228TH G 129.065 1 100 E2 3.81 L +228TH cG M also from (|a,|a'2n|g) +228THB G BE2W=242 9 +228TH L 328.003 4 1- B +228THX L XREF=ABC +228TH cL J E1 |g to 0+ +228TH G 270.245 2 100.0 16 E1 0.0474 J +228TH3 G FLAG=L +228TH G 328.000 6 89.3 21 E1 0.0308 J +228TH3 G FLAG=L +228TH L 378.179 10 6+ A +228THX L XREF=ABCDF +228TH cL J E2 |g to 2+ level: member of g.s. rotational band +228TH G 191.353 10 100 E2 0.791 L +228TH cG M also from (|a,|a'2n|g) +228TH L 396.078 5 3- B +228THX L XREF=ABC +228TH cL J E1 |g's to 4+ and 2+ levels +228TH G 209.253 6 34.5 6 E1 0.086 L +228TH G 338.320 3 100.0 17 E1 0.0288 L +228TH L 519.192 6 5- B +228THX L XREF=ABCDF +228TH cL J E1 |g's to 4+ and 6+ levels +228TH G 141.01 2 10.1 6 E1 0.220 +228TH G 332.370 4 100 5 E1 0.0299 L +228TH L 622.5 3 8+ A +228THX L XREF=DF +228TH cL J E2 |g to 6+ level; member of g.s. rotational band +228TH G 244.4 3 E2 0.332 G +228TH cG M from (|a,|a'2n|g) +228TH L 695.6 3 7- B +228THX L XREF=DF +228TH cL J |g to 6+ level; member of K|p=0- octupole band +228TH G 317.4 3 [E1] 0.0331 G +228TH L 831.823 10 0+ C +228THX L XREF=ABCDE +228TH cL J L=0 in (p,t) +228TH G 503.823 13 100 7 (E1) 0.0125 L +228TH3 G FLAG=M +228TH G 774.1 2 33 AP L +228TH3 G FLAG=M +228TH G 831 E0 0.04 2 +228TH cG E,M,TI from {+232}U |a decay +228TH L 874.473 18 2+ C +228THX L XREF=ABCE +228TH cL J E1 |g to 3- level, |g to 0+ g.s. +228TH G 478.40 6 100 5 E1 0.0139 +228TH G 546.45 2 91 5 +228TH G 688.11 4 32 3 & +228TH3 G FL=186.823$ FLAG=N +228TH G 816.62 10 12.3 20 +228TH G 874.45 7 23 3 +228TH L 911.8 4 10+ A +228THX L XREF=DF +228TH cL J |g to 8+ level; member of g.s. band +228TH G 289.4 3 G +228TH L 920.8 3 9- B +228THX L XREF=DF +228TH cL J |g to 7- and 8+ levels; member of K|p=0- band +228TH G 225.1 3 24.6 15 G +228TH3 G FLAG=H +228TH G 298.3 3 100 G +228TH3 G FLAG=H +228TH L 938.58 7 0+ D +228THX L XREF=AE +228TH cL J from L(p,t) quoted in 1995Ba42 +228TH G 610.64 10 100 22 L +228TH3 G FLAG=M +228TH G 880.76 10 27 8 L +228TH3 G FLAG=M +228TH L 944.196 13 1,2+ +228THX L XREF=ABE +228TH cL J |g's to 1- level and 0+ g.s. Possibly unnatural parity level +228TH2cL from (p,t); possible band head for a K|p=1+ band. However, log| +228TH3cL {Ift}=9.8 from 3+ {+228}Pa would rule out J|p=1+ +228TH G 616.20 3 91 11 +228TH G 944.196 14 100 8 L +228TH L 968.369 17 3- F +228THX L XREF=AB +228TH cL J |g's to 1- and 5- levels +228TH G 449.21 4 39 5 +228TH G 572.29 4 100 5 +228TH G 640.34 3 28 4 +228TH L 968.968 5 2+ G +228THX L XREF=AB +228TH cL J E2 |g to 0+ g.s. +228TH G 782.142 5 1.89 6 L +228TH G 911.204 4 100.0 16 E2+M1 +24 8 0.0121 L +228TH G 968.971 17 61.1 11 E2 0.0107 L +228TH L 979.499 14 2+ D +228THX L XREF=ABE +228TH cL J |g's to 0+ g.s. and 4+ level +228TH G 583.41 5 123 11 R +228TH2 G FLAG=M +228TH G 651.48 5 100 9 R +228TH2 G FLAG=M +228TH G 792.8 89 AP L +228TH3 G FLAG=M +228TH G 921.98 10 18.6 LE L +228TH3 G FLAG=BM +228TH cG Doubly placed |g with undivided intensity (I|g=16.3 {I23}) +228TH2cG in {+228}Ac decay +228TH G 979.48 10 29 3 L +228TH3 G FLAG=M +228TH L 1016.406 21 2+,3-,4+ +228THX L XREF=AB +228TH cL J |g's to 3- and 2+ levels, |g from 3+ level; natural parity +228TH2cL from (p,t) (quoted in 1995Ba42). Multiply placed +228TH3cL |g to 0+ would limit J|p to 2+; possible 2+ member of K|p=1+ band. +228TH4cL However, |g from 1450-keV 4- level would rule out 2+. +228TH G 620.33 6 28.4 14 +228TH G 688.11 4 24.0 15 & +228TH3 G FL=328.003$ FLAG=N +228TH G 958.61 4 100 12 +228TH G 1016.44 15 6.8 11 & +228TH3 G FLAG=LM +228TH L 1022.527 6 (3)+ G +228THX L XREF=AB +228TH cL J E2 |g's to 4+ and 2+ levels; E1 |g from 4- level; +228TH2cL member of K|p=2+ band +228TH G 835.710 6 32.4 11 E2 0.0143 L +228TH cG M |d|<-9 ({+228}Pa decay) +228TH G 964.766 10 100.0 18 E2+M1 -7.2 10 0.0108 L +228TH L 1059.93 3 4- +228THX L XREF=AB +228TH cL J |g's to 3- and 5- levels; J|p=3-,4+,5- ruled out by +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 540.68 5 58 10 +228TH G 663.88 6 87 7 (M1+E2) 0.06 4 +228TH G 873.11 12 100 10 +228TH L 1091.017 8 4+ G +228THX L XREF=AB +228TH cL J E2 |g to 4+ level, |g to 2+ level; |g to 6+ level +228TH G 694.8 2 2.9 4 I +228TH3 G FLAG=K +228TH G 713.1 3 1.8 4 I +228TH3 G FLAG=K +228TH G 904.19 3 100 4 E2 0.0123 +228TH cG MR |>+3.7 ({+228}Pa decay) +228TH G 1033.248 9 26.5 9 E2 L +228TH L 1122.951 6 2- H +228THX L XREF=AB +228TH cL J E1 |g to 2+ level, E2+M1 |g to 1- level, (E1+M2) |g to (3)+ +228TH2cL level; member of K|p=2- band +228TH G 100.41 3 2.2 3 (E1+M2) 0.23 AP 3.2 AP L +228TH3 G FLAG=M +228TH G 153.977 10 16.7 5 E1 0.178 L +228TH3 G FL=968.968 +228TH G 726.863 15 13.7 13 (E2) 0.0189 L +228TH G 794.947 5 100.0 16 E2+M1 -4.4 10 0.0182 15 L +228TH G 1065.19 4 3.02 12 +228TH L 1153.467 10 2+ 0.29 NS 2 I +228THX L XREF=AB +228TH cL J |g to 2+ has E0 component +228TH cL T from {+228}Ac |b{+-} decay +228TH G 173.964 13 15.5 22 M1+E2 1.2 +11-6 2.3 18 L +228THB G BM1W=4.E-5 +6-4$BE2W=0.6 +7-6 +228TH G 184.54 2 31 4 E0+M1 63 8 M +228TH3 G FL=968.968$ FLAG=L +228THB G BM1W=1.2E-4 3 +228TH cG |a(K)exp, L1/L2, L1/L3 indicate E0+5.4%M1 transition +228TH2cG ({+228}Ac |b{+-} decay) +228TH G 278.70 10 71 9 (M1+E2) 0.7 5 @ +228TH3 G FL=874.473 +228TH G 321.646 8 100 5 [E2] 0.140 L +228THB G BE2W=0.29 5 +228TH G 1095.679 20 55 4 [M1,E2] 0.018 10 L +228TH G 1153.52 4 61 4 [E2] +228THB G BE2W=0.00030 6 +228TH L 1160 5 +228THX L XREF=E +228TH L 1168.375 5 3- H +228THX L XREF=AB +228TH cL J E1 |g's to 2+ levels, |g to 5- level +228TH G 77.34 3 1.7 3 L +228TH3 G FLAG=M +228TH G 145.849 10 10.4 4 E1 0.203 L +228TH G 199.407 10 20.8 8 E1 0.096 L +228TH G 649.03 13 2.7 3 & +228TH G 772.291 5 100.0 20 E2+M1 -3.4 +8-27 0.021 3 L +228TH G 840.377 7 61.9 21 E2 0.0142 L +228TH G 981.5 2 3.0 4 I +228TH3 G FLAG=K +228TH G 1110.610 10 18.7 20 E1 @ +228TH2 G FLAG=L +228TH L 1174.508 18 (5+) G +228THX L XREF=AB +228TH cL J |g to 4+ level; member of K|p=2+ band +228TH G 987.88 9 +228TH L 1175.39 5 2+ +228THX L XREF=A +228TH cL J |g to 0+ g.s., |g to 4+ level +228TH G 231.42 10 32 5 L +228TH3 G FLAG=M +228TH G 988.63 20 100 17 L +228TH3 G FLAG=M +228TH G 1117.63 10 70 10 L +228TH3 G FLAG=M +228TH G 1175.31 10 31 4 L +228TH3 G FLAG=M +228TH L 1189.8 4 11- B +228THX L XREF=DF +228TH cL J |g's to 9- and 10+ levels; band structure +228TH G 268.9 3 67 5 G +228TH3 G FLAG=H +228TH G 278.0 3 100 G +228TH3 G FLAG=H +228TH L 1200.54 4 (3)+ I +228THX L XREF=B +228TH cL J E0 transition to (3)+ level +228TH G 178.14 7 22 LE (E0) I +228TH3 G FLAG=K +228TH G 231.50 5 100 5 I +228TH3 G FL=968.968$ FLAG=K +228TH G 1013.54 13 41 5 & +228TH3 G FLAG=IK +228TH G 1142.78 11 3 I +228TH3 G FLAG=K +228TH L 1226.565 7 (4)- H +228THX L XREF=AB +228TH cL J E1 |g's to 4+ and (3)+ levels; member of K|p=2- band +228TH G 135.51 2 3.66 20 E1 0.242 +228TH G 204.026 10 20.7 10 E1 0.091 L +228TH G 707.41 3 27.5 6 (E2) 0.0200 +228TH G 830.486 8 100 4 E2(+M1) -7.7 9 0.0152 2 L +228TH G 1039.84 8 9.9 6 +228TH L 1239.4 4 12+ A +228THX L XREF=DF +228TH cL J |g to 10+ level; member of g.s. band +228TH G 327.5 3 G +228TH L 1297.423 10 (5)- H +228THX L XREF=AB +228TH cL J E1 |g to 4+ level; band structure +228TH G 601.7 3 11.1 19 & ? +228TH3 G FLAG=IK +228TH G 778.1 2 100 11 I +228TH3 G FLAG=K +228TH cG |g not reported in {+228}Ac decay +228TH G 901.26 13 74 11 K +228TH G 1110.610 10 89 7 E1 @ +228TH3 G FLAG=L +228TH L 1344.078 11 3- J +228THX L XREF=A +228TH cL J |g's to 1- and 5- levels; band structure. Although the |g to +228TH2cL 1- level is multiply placed, this position in level scheme is +228TH3cL supported by coin results +228TH G 168.65 10 9 3 L +228TH3 G FLAG=M +228TH G 824.934 23 47 5 L +228TH3 G FLAG=M +228TH G 947.982 11 100 8 L +228TH3 G FLAG=M +228TH G 1016.44 15 18 3 & +228TH3 G FLAG=LM +228TH G 1157.14 15 6.6 12 L +228TH3 G FLAG=M +228TH G 1286.27 20 47 9 L +228TH3 G FLAG=M +228TH L 1416.11 6 2+,3- +228THX L XREF=A +228TH cL J |g's to 1- and 4+ levels +228TH G 471.76 15 100 10 L +228TH3 G FLAG=M +228TH G 1019.86 10 64 12 L +228TH3 G FLAG=M +228TH G 1088.18 15 18 4 L +228TH3 G FLAG=M +228TH G 1229.40 15 23 7 L +228TH3 G FLAG=M +228TH L 1431.979 6 4+ +228THX L XREF=AB +228TH cL J E1 |g to 3- level, E2+M1 |g to 4+ level; J|=3 from +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 257.49 2 0.64 3 (M1) 1.36 +228TH G 263.62 2 0.95 5 E1 0.0502 +228TH G 278.70 10 0.70 11 @ +228TH3 G FL=1153.467 +228TH G 340.98 2 8.8 4 E2+M1 -5.2 18 0.136 23 +228TH G 409.462 6 43.8 8 E2+M1 -5.4 8 0.082 4 +228TH G 452.51 5 0.45 4 +228TH G 463.004 6 100.0 16 E2 0.0522 L +228TH G 1245.16 6 2.47 12 +228TH G 1374.24 6 0.32 9 M +228TH L 1450.394 10 4- +228THX L XREF=AB +228TH cL J M1+E2 |g's to 3- level, |g to 4+ level; J|=3 from +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 18.4 11.9 16 [E1] 6.6 K +228TH cG E deduced from E(level) +228TH G 153.02 2 3.58 19 M1+E2 +0.60 8 4.8 2 I +228TH3 G FLAG=K +228TH G 223.80 2 43.4 20 M1+E2 -0.18 5 1.97 3 +228TH G 275.85 4 2.65 23 I +228TH3 G FLAG=K +228TH G 282.00 3 60 3 M1+E2 -0.51 12 0.88 7 K +228TH G 327.45 4 100.0 10 I +228TH3 G FLAG=K +228TH G 359.36 3 4.19 23 I +228TH3 G FLAG=K +228TH G 390.45 5 3.58 19 I +228TH3 G FLAG=K +228TH G 427.90 3 4.0 3 I +228TH3 G FLAG=K +228TH G 434.01 3 5.6 3 I +228TH3 G FLAG=K +228TH G 482.03 5 5.9 4 I +228TH3 G FL=968.369$ FLAG=K +228TH G 1054.22 6 10.9 10 +228TH L 1497.1 5 13- B +228THX L XREF=DF +228TH cL J |g's to 11- and 12+ levels; band structure +228TH G 257.7 3 52 4 G +228TH3 G FLAG=H +228TH G 307.3 3 100 G +228TH3 G FLAG=H +228TH L 1531.474 6 3+ +228THX L XREF=AB +228TH cL J E2+M1 |g to 2+ level, M1 |g to 4+ level +228TH G 99.509 6 100 6 M1 4.09 L +228TH G 356.94 10 1.35 14 L +228TH3 G FLAG=M +228TH G 377.99 10 1.98 24 L +228TH3 G FLAG=M +228TH G 440.44 5 9.6 6 M1 0.314 +228TH G 508.959 17 40 10 E2(+M1) 1.1 GT 0.08 4 L +228TH G 562.500 4 71 4 E2+M1 +1.6 6 0.07 3 L +228TH G 1135.24 15 0.78 12 L +228TH3 G FLAG=M +228TH G 1344.59 15 0.71 14 L +228TH3 G FLAG=M +228TH L 1539.21 9 2,3,4 +228THX L XREF=A +228TH cL J |g to 3- level, |g from 3+ level +228TH G 416.30 20 100 16 L +228TH2 G FLAG=M +228TH G 1142.85 15 78 16 L +228TH2 G FLAG=M +228TH L 1580.91 6 (2-) +228THX L XREF=B +228TH cL J (M1+E2) |g's to 3- and 1- levels +228TH G 354.2 2 43 7 & +228TH3 G FLAG=IK +228TH G 601.7 3 44 7 & +228TH3 G FLAG=IK +228TH G 1184.71 9 69 6 (M1+E2) 0.015 8 I +228TH3 G FLAG=K +228TH G 1252.98 10 100 9 (M1+E2) 0.013 7 I +228TH3 G FLAG=K +228TH G 1523.4 2 88 9 & +228TH3 G FLAG=IK +228TH L 1588.335 14 4- +228THX L XREF=B +228TH cL J E1 |g's to 3+ and 4+; J|=3- from |g(|q,H,T) +228TH2cL ({+228}Pa decay) +228TH G 56.86 3 16.1 8 E1 0.533 I +228TH3 G FLAG=K +228TH G 137.95 2 100 3 M1 7.89 I +228TH3 G FLAG=K +228TH G 156.34 2 20.6 11 E1 0.172 I +228TH3 G FLAG=K +228TH G 420.03 8 10.3 8 I +228TH3 G FLAG=K +228TH L 1599.5 5 14+ A +228THX L XREF=DF +228TH cL J |g to 12+; band structure +228TH G 360.1 3 G +228TH L 1617.78 7 2+,3,4+ +228THX L XREF=AB +228TH cL J |g's to 4+ and 2+ levels +228TH G 649.03 13 114 11 & +228TH2 G FL=968.968$ FLAG=M +228TH G 1430.95 10 100 20 L +228TH3 G FLAG=M +228TH G 1559.78 14 57 11 M +228TH L 1638.284 9 2+ +228THX L XREF=AB +228TH cL J |g's to 0+ g.s. and 4+ level +228TH G 470.20 19 2.3 6 +228TH G 515.06 10 8.2 8 L +228TH3 G FLAG=M +228TH G 1309.71 20 3.2 10 L +228TH3 G FLAG=M +228TH G 1451.40 15 1.8 4 L +228TH3 G FLAG=M +228TH G 1580.53 3 100 7 (M1,E2) +228TH G 1638.281 10 85 7 (E2) L +228TH L 1643.125 15 (2-,3-) +228THX L XREF=AB +228TH cL J (M1) |g's to 2- and 3- levels, +228TH G 474.79 11 4.6 7 +228TH G 520.151 16 11.8 10 (M1) 0.201 L +228TH G 627.23 20 2.8 6 L +228TH3 G FLAG=M +228TH G 674.16 30 LE Q +228TH3 G FL=968.968 +228TH cG E from level energies +228TH G 674.76 30 LE Q +228TH3 G FL=968.369 +228TH cG E from level energies +228TH G 699.08 15 7.4 10 L +228TH3 G FLAG=M +228TH G 1247.08 3 100 5 (M1) 0.0201 +228TH G 1315.31 9 2.7 4 +228TH L 1645.954 12 3+ +228THX L XREF=AB +228TH cL J E2 |g's to 2+ and 4+ levels, |g's to 2- and 4- levels +228TH G 114.54 6 0.28 4 +228TH G 419.42 10 0.65 9 L +228TH3 G FLAG=M +228TH G 492.30 8 0.74 5 +228TH G 523.131 16 3.5 3 B +228TH3 G FL=1122.951$ FLAG=L +228TH G 555.07 16 1.40 14 +228TH G 623.27 20 0.34 9 L +228TH3 G FLAG=M +228TH G 629.40 5 1.20 21 +228TH G 666.47 4 1.8 2 @ +228TH G 677.07 9 1.99 16 +228TH3 G FL=968.968 +228TH G 1249.97 14 1.94 14 +228TH G 1459.138 15 23.7 12 E2 L +228TH G 1588.19 3 100.0 25 E2 +228TH L 1682.81 3 2+,3(+),4+ +228THX L XREF=AB +228TH cL J (E2) |g to 4+ level, |g to 2+ level +228TH G 660.1 3 0.6 AP L +228TH3 G FLAG=M +228TH G 1495.93 7 100 5 (E2) +228TH G 1625.06 5 29.1 19 +228TH L 1683.82 5 (4-) +228THX L XREF=AB +228TH cL J (M1+E2) |g's to 3- and 5- levels +228TH G 457.35 7 19.2 19 +228TH G 623.7 2 26 LE I +228TH3 G FLAG=K +228TH cG |g not resolved from the 623.27|g from 1645 level in {+228}Pa +228TH2cG decay, I(doublet)=23 {I3}. Not reported in {+228}Ac decay. +228TH G 1164.55 7 83 4 (M1+E2) 0.016 9 +228TH G 1287.78 12 100 7 (M1+E2) 0.012 7 +228TH L 1688.394 11 2+,3+ +228THX L XREF=AB +228TH cL J |g's to 2+ and 4+ levels; J|p|=3-,4+ from +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 42.46 5 0.60 20 L +228TH3 G FLAG=M +228TH G 672.00 15 1.7 5 L +228TH3 G FLAG=M +228TH G 813.77 15 0.46 11 L +228TH3 G FLAG=M +228TH G 1501.57 5 29.4 15 +228TH G 1630.627 10 100 3 (M1,E2) L +228TH L 1724.283 6 2+ +228THX L XREF=AB +228TH cL J M1 |g to 2+ level, |g to 0+ g.s.; log| {Ift}=7.06 for |b{+-} +228TH2cL decay from 3+ {+228}Ac 7.32 for |e decay from 3+ {+228}Pa +228TH G 548.73 15 2.3 3 L +228TH2 G FLAG=M +228TH G 570.88 4 17.1 9 (M1) 0.156 +228TH G 701.747 14 18.2 10 (M1) 0.091 L +228TH G 755.315 4 100 3 M1 0.0747 L +228TH G 1537.87 9 4.2 5 B +228TH3 G FL=186.823 +228TH G 1666.523 13 17.3 8 M1 L +228TH G 1724.20 4 2.7 3 +228TH L 1735.450 25 (4+) +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels; possible |g to 6+ level would +228TH2cL limit J|p to 4+ +228TH G 1217.03 10 39 6 B ? +228TH3 G FL=519.192$ FLAG=LM +228TH G 1357.78 15 37 7 B ? +228TH3 G FL=378.179$ FLAG=LM +228TH G 1548.65 4 70 7 L +228TH3 G FLAG=M +228TH G 1677.67 3 100 9 L +228TH3 G FLAG=M +228TH L 1743.89 3 4+ +228THX L XREF=AB +228TH cL J (E2) |g to 2+ level; (E2+M1) |g to 4+ level; |g to 6+ level +228TH G 399.62 10 16.3 17 L +228TH3 G FLAG=MP +228TH G 590.65 11 9.3 11 I ? +228TH3 G FLAG=K +228TH cG |g not reported in {+228}Ac decay +228TH G 684.0 3 10.4 23 I ? +228TH3 G FLAG=K +228TH cG |g not reported in {+228}Ac decay +228TH G 1365.71 9 8.8 8 +228TH G 1557.10 4 100 5 (E2+M1) +1.2 2 +228TH G 1686.12 5 53.8 23 (E2) +228TH L 1758.24 12 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 326.04 20 100 15 L +228TH3 G FLAG=M +228TH G 1571.52 20 17 5 L +228TH3 G FLAG=M +228TH G 1700.59 20 31 7 L +228TH3 G FLAG=M +228TH L 1760.218 24 2+,3(+) +228THX L XREF=AB +228TH cL J (E2) |g to 4+ level, |g to 2+ level; J|p|=4+ from +228TH2cL |g(|q,H,T) in {+228}Pa decay +228TH G 584.7 3 12 4 & +228TH3 G FLAG=IK +228TH G 737.72 5 73 7 +228TH G 791.44 9 21 6 @ +228TH3 G FL=968.968 +228TH G 1573.26 5 65 4 (E2) +228TH G 1702.44 5 100 7 +228TH L 1795.90 10 3-,4+ +228THX L XREF=A +228TH cL J |g's to 5- and 2+ levels +228TH G 1276.69 10 78 17 L +228TH3 G FLAG=M +228TH G 1738.22 25 100 22 L +228TH3 G FLAG=M +228TH L 1797.65 8 2+ +228THX L XREF=A +228TH cL J |g's to 0+ g.s. and 3- level; log| {If{+1u}t}=8.14 for +228TH2cL |b{+-} decay from 3+ {+228}Ac +228TH G 1401.49 10 60 15 L +228TH3 G FLAG=M +228TH G 1469.71 15 100 20 L +228TH3 G FLAG=M +228TH G 1740.4 3 55 15 L +228TH3 G FLAG=M +228TH G 1797.5 5 11 4 L +228TH3 G FLAG=M +228TH L 1804.689 23 4+ +228THX L XREF=B +228TH cL J M1+E2 |g to 3+ level, (M1+E2) |g to 4+ level, |g to 6+ level +228TH G 116.26 5 12.8 16 I +228TH3 G FLAG=K +228TH G 121.18 7 15.2 24 I ? +228TH3 G FL=1683.82$ FLAG=KB +228TH G 121.87 3 26.4 24 I +228TH3 G FLAG=K +228TH G 158.74 3 100 6 M1+E2 0.55 15 I +228TH3 G FLAG=K +228TH G 354.2 2 23 4 & +228TH3 G FLAG=IK +228TH G 372.60 3 126 6 I ? +228TH3 G FL=1431.979$ FLAG=KB +228TH G 651.5 2 27 4 I +228TH3 G FLAG=K +228TH G 1426.5 2 38 5 I +228TH3 G FLAG=K +228TH G 1618.0 1 72 5 (M1,E2) I +228TH3 G FLAG=K +228TH L 1817.432 23 4- +228THX L XREF=B +228TH cL J E2+M1 |g to 3- level, D+Q |g to 5- level +228TH G 367.04 2 100 5 M1 0.512 I +228TH3 G FLAG=K +228TH G 1298.3 2 18.4 16 (M1+E2) I +228TH3 G FLAG=K +228TH cG MR +0.27|<|d|<+5 from |g(|q,H,T) in {+228}Pa decay +228TH G 1421.1 2 57 3 E2+M1 +2.0 5 I +228TH3 G FLAG=K +228TH L 1838.3 5 15- B +228THX L XREF=D +228TH cL J |g to 13- level; band structure +228TH G 341.2 3 G +228TH L 1892.996 17 3+ +228THX L XREF=AB +228TH cL J E2+M1 |g to 2+ level, M1+E2 |g to 4+ level +228TH G 477.1 3 4.4 13 I +228TH3 G FLAG=KP +228TH G 666.47 4 11 2 @ +228TH G 692.47 7 12.6 9 (M1+E2+E0) 0.24 3 I +228TH3 G FLAG=K +228TH cG CC from |a(K)exp in {+228}Pa decay +228TH G 724.42 11 4.8 6 & +228TH3 G FLAG=IK +228TH G 739.2 2 3.6 6 I +228TH3 G FLAG=K +228TH G 770.2 2 14.3 9 I +228TH3 G FLAG=K +228TH G 870.45 2 100 5 M1 +228TH cG MR -0.1 {I1} ({+228}Pa decay) +228TH G 924.3 2 17.0 13 I +228TH3 G FLAG=K +228TH G 1706.17 7 18.1 8 M1+E2 +0.42 4 +228TH G 1835.29 5 64 8 E2+M1 +2.9 3 +228TH L 1899.95 4 2+ +228THX L XREF=AB +228TH cL J M1+E2 |g tp 2+ level, |g's to 0+ g.s. and 3- level +228TH G 877.39 7 41 4 +228TH G 883.6 3 6.6 18 I +228TH3 G FLAG=K +228TH G 920.8 3 17 4 I +228TH3 G FLAG=K +228TH G 931.02 7 43 4 I +228TH3 G FLAG=K +228TH G 1503.7 2 31 3 I +228TH3 G FLAG=K +228TH G 1842.14 8 100 5 M1+E2 -0.86 14 +228TH G 1900.14 17 9 3 +228TH L 1901.93 8 3-,4 +228THX L XREF=B +228TH cL J |g's to 3- and 5- levels; multiply placed |g to 6+ would +228TH2cL rule out J|p=3- and 4-. log| {If{+1u}t}=7.10 for decay from 3+ {+228}Pa +228TH3cL rules out 5- +228TH G 1383.2 2 100 9 I +228TH3 G FLAG=K +228TH G 1505.9 2 100 9 I +228TH3 G FLAG=K +228TH G 1523.4 2 109 11 & +228TH3 G FLAG=IK +228TH G 1715.06 10 91 6 I +228TH3 G FLAG=K +228TH L 1906.64 10 (2+) +228THX L XREF=A +228TH cL J |g to 0+ g.s., |g to 2+,3- level; log| {If{+1u}t}=7.5 from +228THxcL 3+ {+228}Ac +228TH G 490.33 15 93 19 L +228TH3 G FLAG=M +228TH G 1074.71 15 84 25 L +228TH3 G FLAG=M +228TH G 1907.18 20 100 8 L +228TH3 G FLAG=M +228TH L 1925.22 4 3+,4+ +228THX L XREF=B +228TH cL J M1+E2 |g to 4+ level, |g's to (5+) and 3- levels +228TH G 724.42 11 7.9 9 & +228TH3 G FLAG=IK +228TH G 750.10 10 7.0 8 I +228TH3 G FLAG=K +228TH G 865.15 13 5.2 7 I +228TH3 G FLAG=K +228TH G 956.8 2 26 5 I +228TH3 G FL=968.369$ FLAG=K +228TH G 1529.02 6 27.2 14 I +228TH3 G FLAG=K +228TH G 1738.48 5 100 5 M1+E2 I +228TH3 G FLAG=K +228TH L 1928.57 6 3+ +228THX L XREF=AB +228TH cL J |g's to 2+ and 4+ levels; J|p|=2+,3-,4+ from +228TH2cL |g(|q,H,T) in {+228}Pa decay +228TH G 168.42 9 12 3 I +228TH3 G FLAG=K +228TH G 389.12 15 42 6 L +228TH3 G FLAG=M +228TH G 584.7 3 30 10 & +228TH3 G FLAG=IKP +228TH G 1741.74 21 43 12 +228TH G 1870.81 9 100 6 (M1+E2) +228TH L 1937.16 9 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 397.94 10 100 11 L +228TH3 G FLAG=M +228TH G 1062.55 15 37 11 L +228TH3 G FLAG=M +228TH G 1750.54 20 30 3 L +228TH3 G FLAG=M +228TH G 1879.6 3 4.8 18 L +228TH3 G FLAG=M +228TH L 1944.895 11 3+ +228THX L XREF=AB +228TH cL J E2+M1 |g's to 2+ and 4+ levels +228TH G 184.61 5 1.7 2 (M1) 3.45 I +228TH3 G FLAG=K +228TH G 220.61 2 5.2 3 (M1) 2.10 I +228TH3 G FLAG=K +228TH G 299.10 10 1.79 21 M1 0.90 I +228TH3 G FLAG=K +228TH G 306.61 2 8.3 4 M1 0.84 I +228TH3 G FLAG=K +228TH G 512.79 11 5.5 6 I +228TH3 G FLAG=K +228TH G 718.31 2 26.2 17 (E1) +228TH G 776.52 3 32 3 +228TH G 791.44 9 15 2 (M1) 0.0661 @ +228TH G 853.97 8 3.4 3 I +228TH3 G FLAG=K +228TH G 922.5 2 9.4 5 I +228TH3 G FLAG=K +228TH G 928.4 2 3.7 3 I +228TH3 G FLAG=K +228TH G 975.98 5 56 3 M1 0.0381 +228TH3 G FL=968.968 +228TH G 1070.40 7 5.0 3 I +228TH3 G FLAG=K +228TH G 1549.3 2 5.0 8 I +228TH3 G FLAG=K +228TH G 1758.11 5 37.7 20 E2+M1 -9 1 +228TH G 1887.12 5 100 5 E2+M1 -9.1 9 +228TH L 1958.72 22 2+ +228THX L XREF=A +228TH cL J |g's to 0+ g.s. and 4+ level +228TH G 1772.2 3 100 28 L +228TH3 G FLAG=M +228TH G 1958.4 3 83 28 L +228TH3 G FLAG=M +228TH L 1964.98 7 2+,3,4+ +228THX L XREF=B +228TH cL J |g to 2+ and 4+ levels; multiple placed |g to 0+ g.s., would +228TH2cL limit J|p to 2+ +228TH G 548.74 11 46 LT I +228TH3 G FLAG=K +228TH cG Multiply placed |g in {+228}Pa decay with I|g(doublet)=41 +228THxcG {I5} +228TH G 1778.0 6 6 2 I +228TH3 G FLAG=K +228TH G 1907.13 11 100 9 I +228TH3 G FLAG=K +228TH G 1965.22 12 43 4 & +228TH3 G FLAG=K +228TH L 1974.20 11 3-,4+ +228THX L XREF=B +228TH cL J |g's to 2+ and 5- levels +228TH G 1455.0 2 87 5 I +228TH3 G FLAG=K +228TH G 1578.2 2 100 10 I +228TH3 G FLAG=K +228TH G 1787.2 2 28 3 I +228TH3 G FLAG=K +228TH G 1916.6 3 11.3 23 I +228TH3 G FLAG=K +228TH L 1981.97 6 2+,3,4+ +228THX L XREF=B +228TH cL J |g's to 2+ and 4+ levels +228TH G 1013.54 13 32 4 & +228TH3 G FLAG=IK +228TH G 1795.15 6 100 6 I +228TH3 G FLAG=K +228TH G 1924.2 2 15.1 17 I +228TH3 G FLAG=K +228TH L 1987.46 10 4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 6+ levels +228TH G 1017.92 20 29 7 L +228TH3 G FL=968.968$ FLAG=M +228TH G 1609.41 15 39 8 L +228TH3 G FLAG=M +228TH G 1800.86 20 22 4 L +228TH3 G FLAG=M +228TH G 1929.78 20 100 11 L +228TH3 G FLAG=M +228TH L 1988.1 6 16+ A +228THX L XREF=D +228TH cL J |g to 14+ level; band structure +228TH G 388.6 3 G +228TH L 2010.11 5 2+,3,(4+) +228THX L XREF=AB +228TH cL J |g's to 2+, 2- and 4+ levels limit J|p to 2+, 3. However, +228TH2cL possible E0 component in the 918|g to (4)+ level ({+228}Ac |b{+-} +228TH3cL decay) would require J|p=(4+), making the 887|g to 2- level an M2 +228THxcL transition +228TH G 214.85 10 49 7 L ? +228TH3 G FL=1795.90$ FLAG=M +228TH cG |g not reported in {+228}Pa decay +228TH G 372.57 20 11 3 L ? +228TH3 G FL=1638.284$ FLAG=MB +228TH G 887.33 10 46 5 L +228TH3 G FLAG=M +228TH G 919.01 13 47 6 +228TH cG M possible E0 component ({+228}Ac |b{+-} decay) +228TH G 1040.92 15 75 15 L +228TH3 G FLAG=M +228TH G 1823.21 10 65 6 +228TH G 1952.37 10 100 7 +228TH L 2013.6 3 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 1826.7 3 100 38 L +228TH3 G FLAG=M +228TH G 1955.9 5 38 14 L +228TH3 G FLAG=M +228TH L 2016.76 10 (2-,3-,4-) +228THX L XREF=B +228TH cL J (M1+E2) |g to 3- level +228TH G 1620.67 10 100 (M1+E2) I +228TH3 G FLAG=K +228TH L 2022.84 8 +228THX L XREF=AB +228TH cL Level is proposed in both {+228}Ac and {+228}Pa decays. +228TH2cL However, there is agreement only on one |g (1148.16|g) from this level +228TH G 1053.09 20 220 68 L ? +228TH3 G FL=968.968$ FLAG=MB +228TH cG Possibly part of a doublet in {+228}Pa decay +228TH G 1148.16 14 100 20 +228TH G 1965.22 12 143 14 & +228TH3 G FLAG=M +228TH cG E,RI a multiply placed |g in {+228}Pa with I|g(doublet)=143 {I13}. +228TH2cG All intensity placed here in {+228}Ac decay with I|g=346 {I31} +228TH L 2029.84 16 1,2+ +228THX L XREF=A +228TH cL J |g to 0+ g.s. +228TH G 939.87 15 200 70 L ? +228TH3 G FL=1091.017$ FLAG=MB +228TH G 1013.58 20 100 28 L +228TH3 G FLAG=M +228TH G 1971.9 3 78 17 L +228TH3 G FLAG=M +228TH G 2029.4 5 39 11 L +228TH3 G FLAG=M +228TH L 2036.99 17 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 1850.13 20 100 18 L +228TH3 G FLAG=M +228TH G 1979.3 3 41 11 L +228TH3 G FLAG=M +228TH L 2123.1 3 (2+) +228THX L XREF=A +228TH cL E the level may be questionable, Q(|b{+-})({+228}Ac)=2127 {I3}. +228TH cL J |g's to 4+ and 1- levels; log| {Ift}=3.5 {I20} indicates an +228TH2cL allowed transition +228TH G 1795.1 5 100 38 L +228TH3 G FLAG=M +228TH G 1936.3 3 100 24 L +228TH3 G FLAG=M +228TH L 2209.7 6 17- B +228THX L XREF=D +228TH cL J |g to 15- level; band structure +228TH G 371.4 3 [E2] G +228TH L 2407.9 7 18+ A +228THX L XREF=D +228TH cL J |g tp 16+ level; band structure +228TH G 419.8 3 [E2] G +228THF G FL=1988.1 + +228TH 228AC B- DECAY 1987DA28 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228AC P 0 3+ 6.15 H 2 2127 3 +228TH N 1.000 1.000 1.0 1.0 +228TH PN 2 +228TH cN NR From absolute I|g, based on measurements by 1992Li05, +228TH2cN 1983Sc13 and 1982Sa36. This normalization leads to I|b(g.s.)=6% {I6}, +228TH4cN although consistent with zero as expected from the spin change |DJ=3, +228TH5cN it may indicate that some g.s. transitions are missing from the level +228THxcN scheme. +228TH cL 1992Li05: measured absolute I|g +228TH cL 1987Da28: measured E|g, I|g, |g|g. Earlier report: 1985Da05 +228TH cL 1983Sc13, 1982Sa36: measured absolute I|g +228TH cL 1982Ma52, 1960Ar06, 1957Bj56: measured ce +228TH cL 1979Bo30: measured E|g; not included in E|g calculation +228TH2cL because five out of twelve E|g disagree with measurements of 1987Da28 +228TH3cL and 1979He10 (deviation>3 x |s) +228TH cL 1979He10: measured E|g +228TH cL 1974De14: measured E|g, I|g, |b|g(|q), |b|g(circ pol)(|q) +228TH cL +228TH cL The decay scheme is that proposed by 1987Da28 +228TH cL E,J From adopted levels +228TH CL BAND(A) GS ROTATIONAL BAND +228TH CL BAND(B) KPI=0- OCTUPOLE BAND +228TH CL BAND(C) KPI=0+ TWO OCTUPOLE PHONON BAND +228TH CL BAND(D) KPI=1- OCTUPOLE BAND +228TH CL BAND(E) KPI=2+ GAMMA-VIBRATIONAL BAND +228TH CL BAND(F) KPI=2- OCTUPOLE BAND +228TH CL BAND(G) KPI=2+ ROTATIONAL BAND ON QUASIPARTICLE STATE +228TH cB J|p({+228}Ac)=3+ +228TH cB Q(|b{+-})=2127 {I3} (1995Au04) +228TH cB IB Deduced from intensity balance in the level scheme. +228TH cG E From 1987Da28, unless otherwise noted +228TH cG RI From 1987Da28, unless otherwise noted. The relative I|g of +228TH2cG 1987Da28 have been normalized to the absolute measurements of 1992Li05, +228TH3cG 1983Sc13 and 1982Sa36 at the three |g's with I|g>10 % (338.324|g +228TH4cG I|g=11.27% {I19}, 911.205|g I|g=25.8% {I4} and 968.987|g I|g=15.8% +228TH5cG {I3}, giving a normalization factor of 0.0258 {I5}). +228TH cG M From adopted I|g and the Ice data of 1960Ar06 and 1971He23 +228TH2cG (as noted with |a(exp)) normalized to theoretical values for: +228TH3cG |a(L)(E2) for 129.065|g, |a(K)(E1) for 209.253|g and |a(K)(E2) for +228THxcG 968.971|g +228TH cG E(A) Weighted average of measurements by 1987Da28, 1979He10. The +228TH2cG measurements of 1979He10 have been corrected by using the calibration +228TH3cG line E|g from 1995HeZZ. +228TH cG E(B) Energy fit poor, E|g not included in the least squares fit +228TH2cG to obtain E(level) +228TH cG E(M) |g unassigned by 1987Da28. Placement suggested by {+228}Pa +228TH2cG decay +228TH cG RI(D) Weighted average of absolute intensity measurements of +228TH2cG 1992Li05, 1983Sc13, 1982Sa36 +228TH cG RI(E) Weighted average of measurements by 1992Li05, 1987Da28, +228TH2cG 1983Sc13, 1982Sa36 +228TH cG RI(F) Weighted average of measurements by 1987Da28, 1983Sc13, +228THxcG 1982Sa36 +228TH cG RI(G) Weighted average of measurements by 1987Da28, 1983Sc13 +228TH cG RI(H) Weighted average of measurements by 1987Da28, 1982Sa36 +228TH cG RI(I) Weighted average of measurements by 1992Li05, 1987Da28, +228THxcG 1983Sc13 +228TH cG RI(N) Intensity of the doublet divided by evaluator by comparison +228TH2cG with branching ratios and the intensities of the doublet as measured +228TH3cG in both {+228}Ac and {+228}Pa decays. +228TH cG M(J),MR(K)$From {+228}Pa |e decay +228TH cG M(L) |a(K)exp(1245|g+1247|g)=0.013 {I3} (1971He23); theory: +228TH2cG |a(K)(M1)=0.0162, |a(K)(E2)=0.00521. I(1245|g)=0.095 {I18}, +228TH3cG I(1247|g)=0.50 {I3}; the 1245|g is [M1,E2]. Therefore: if the 1245|g +228TH4cG is M1, then |a(K)exp(1247|g)=0.013 {I3}; if 1245|g is E2, then +228THxcG |a(K)exp(1247|g)=0.015 {I3}. In each case the |g M1(+E2). +228TH cG E(P) The adopted J|p require that this |g have an unreasonable +228TH2cG multipolarity (M2 or E3). The placement of this transition is +228TH3cG therefore questionable. +228TH cG RI(Q) Total intensity (I|g=0.013 {I3}) placed from 1344.1 level by +228TH2cG 1987Da28. Alternate placement from 1928.6 level suggested by {+228}Pa +228TH3cG decay. +228TH cG E(R) |g's of approximately same energy and intensity are reported +228TH2cG in both {+228}Ac and {+228}Pa decays. On the basis of coin with +228TH3cG 911.2|g, it is suggested in {+228}Ac decay that the |g feeds the 2+ +228TH4cG 968.97 level. In {+228}Pa decay, the |g is placed feeding the 3- +228TH5cG 968.37 level. The energy of the |g (E|g=674.65 {I5}) agrees with decay +228TH6cG to the 968.37 level. Possibly the |g is a doublet feeding both the +228TH7cG 968.97 and 968.37 levels. I|g(doublet)=0.101 {I8} +228TH cG E(T),RI(T)$|g not reported in this decay. Placement suggested by +228TH2cG {+228}Pa decay. I|g deduced from branching ratio in {+228}Pa decay. +228TH cG RI(U) The energy of the 853-keV transition from the 1944.9 level is +228TH2cG expected to be 853.877 {I12} from E(level); the expected intensity +228TH3cG is I|g=0.0031 {I4} from branching ratio in {+228}Pa decay. Therefore, +228TH4cG the the 853.17 {I10} |g with I|g=0.0119 {I18} reported by 1987Da28 +228TH5cG seems to be a doublet with part of the intensity belonging to a |g +228TH6cG unplaced in level scheme +228TH G 56.96 5 0.019 4 +228TH G 137.91 5 0.024 5 M1 7.90 +228TH cG M |a(K)exp=5.5 {I17}, K/L=5.6 {I27} (1971He23) +228TH G 466.40 10 0.029 3 +228TH G 634.18 10 0.0106 21 +228TH G 853.17 10 0.0088 18 U +228TH G 1337.33 20 0.0049 15 +228TH G 1378.23 10 0.0059 18 +228TH G 1385.39 10 0.0106 21 +228TH G 1434.22 15 0.0080 23 +228TH G 1438.01 10 0.0059 15 +228TH G 1480.37 15 0.016 3 +228TH G 1529.05 10 0.057 6 +228TH G 1671.64 15 0.0041 13 +228TH G 1684.01 20 0.015 5 +228TH G 1721.4 3 0.0057 21 +228TH G 1745.28 20 0.0065 8 +228TH G 1784.4 3 0.0059 10 +228TH G 1787.3 5 0.0013 5 +228TH G 1915.9 4 0.0008 3 +228TH G 1919.5 3 0.0021 5 +228TH G 1944.20 20 0.0021 5 +228TH G 2000.9 5 0.0010 3 +228TH L 0.0 0+ A +228TH L 57.759 4 2+ A +228TH B 8 6 8.9 4 +228THS B EAV=744.1 13 +228TH G 57.766 5 0.47 3 E2 156 A +228TH3 G FLAG=H +228THS G LC=114$ MC=31.1$ NC+=11.4 +228TH cG M |a(L)exp=124 {I11} (1971He23); L12/L3=1.42 (1982Ma52), 1.14 +228TH2cG {I8} (1960Ar06), 1.15 {I15} (1957Bj56); theory: |a(K)=114, L12/L3=1.23 +228TH L 186.823 4 4+ A +228TH B 0.8 6 9.8 4 +228THS B EAV=691.5 13 +228TH G 129.065 1 2.42 9 E2 3.81 A +228TH3 G FLAG=E +228THS G KC=0.269$ LC=2.58$ MC=0.707$ NC+=0.263 +228TH cG M L12/L3=1.94 {I14} (1960Ar06), 1.7 {I2} (1957Bj56). K/L=0.10 +228TH2cG {I1} (1971He23), 0.12 {I3} (1957Bj56); theory: L12/L3=1.70, K/L=0.10 +228TH L 328.003 4 1- B +228TH B 0.65 17 10.69 12 1U +228THS B EAV=606.6 12 +228TH G 270.245 2 3.46 6 E1 0.0474 A +228TH3 G FLAG=E +228THS G KC=0.0379$ LC=0.00721$ MC=0.00173$ NC+=0.00061 +228TH cG M |a(K)exp=0.029 {I4} (1971He23); theory: |a(K)=0.0379 +228TH G 328.000 6 2.95 12 E1 0.0308 H +228THS G KC=0.0247$ LC=0.00458$ MC=0.00110$ NC+=0.00039 +228TH cG M |a(K)exp=0.037 {I8} (1971He23); theory |a(K)=0.0247 +228TH L 378.179 10 6+ A +228TH G 191.353 10 0.123 8 E2 0.791 H +228THS G KC=0.174$ LC=0.450$ MC=0.123$ NC+=0.0454 +228TH cG M |a(K)exp=0.24 {I7}, K/L=1.0 {I5}; theory: |a(K)(E2)=0.174, +228TH2cG K/L(E2)=0.39, |a(K)(M1)=2.49, K/L(M1)=5.25 +228TH L 396.078 5 3- B +228TH B 11.66 24 8.428 10 +228THS B EAV=606.9 12 +228TH G 209.253 6 3.89 7 E1 0.086 E +228THS G KC=0.0678$ LC=0.0135$ MC=0.00323$ NC+=0.00114 +228TH cG M from K/L and L subshell ratios in {+228}Pa |e decay. +228TH2cG Other: K/L=2.4 {I4} (1971He23) +228TH G 338.320 3 11.27 19 E1 0.0288 A +228TH3 G FLAG=D +228THS G KC=0.0231$ LC=0.00426$ MC=0.00102$ NC+=0.00036 +228TH cG M |a(K)exp=0.019 {I2} (1960Ar06); theory: |a(K)=0.0231 +228TH L 519.192 6 5- B +228TH B 0.08 LT 11.3 GT 1U +228THS B EAV=534.3 12 +228TH G 141.02 3 0.050 8 E1 0.220 J +228THS G KC=0.171$ LC=0.0366$ MC=0.0088$ NC+=0.00313 +228TH cG M |a(K)exp=0.7 {I5} (1971He23); theory: |a(K)(E1)=0.171, +228TH2cG |a(K)(E2)=0.259, |a(K)(M1)=5.92, |a(K)(M2)=26.1. +228TH G 332.370 4 0.40 4 E1 0.0299 A +228TH3 G FLAG=EJ +228THS G KC=0.0240$ LC=0.00444$ MC=0.00106$ NC+=0.00038 +228TH cG M ce(K) not seen by 1960Ar06. |a(K)exp=0.41 {I8} (1971He23) +228TH2cG does not agree with [E1] required by the level scheme. +228TH L 831.823 10 0+ C +228TH G 503.823 13 0.182 12 (E1) 0.0125 A +228TH3 G FLAG=G +228THS G KC=0.0101$ LC=0.00178 +228TH cG M Ice not seen (1971He23), upper limit in Ice suggests E1 +228TH G 774.1 2 0.06 AP [E2] 0.0167 +228THS G KC=0.0122$ LC=0.00339 +228TH L 874.473 18 2+ C +228TH B 0.23 10 9.62 19 +228THS B EAV=418.5 12 +228TH G 478.33 5 0.209 15 E1 0.0139 +228THS G KC=0.0112$ LC=0.00199$ MC=0.00047$ NC+=0.00017 +228TH G 546.47 5 0.201 13 [E1] 0.0106 +228THS G KC=0.0086$ LC=0.00151 +228TH G 688.10 5 0.067 5 [E2] 0.0212 & +228TH2 G FL=186.823$ FLAG=B +228THS G KC=0.0151$ LC=0.00464 +228TH G 816.71 10 0.030 3 [M1,E2] 0.038 23 +228THS G KC=0.030 19$ LC=0.006 3 +228TH G 874.44 7 0.047 10 [E2] 0.0131 A +228THS G KC=0.0098$ LC=0.00249 +228TH L 938.58 7 0+ D +228TH G 610.64 10 0.023 5 [E1] +228TH G 880.76 10 0.0062 18 [E2] 0.0129 +228THS G KC=0.0096$ LC=0.00244 +228TH L 944.196 13 1,2+ +228TH B 0.07 LT 10.0 GT +228THS B EAV=391.8 12 +228TH G 616.22 3 0.080 5 A +228TH G 944.196 14 0.095 8 A +228TH L 968.369 20 3- D +228TH B 0.21 4 9.54 9 +228THS B EAV=382.6 12 +228TH G 449.15 5 0.048 5 [E2] 0.0563 A +228THS G KC=0.0335$ LC=0.0168$ MC=0.00439$ NC+=0.00162 +228TH G 572.14 8 0.150 16 [M1,E2] 0.09 7 A +228THS G KC=0.07 6$ LC=0.016 8 +228TH G 640.34 3 0.054 5 [E2] 0.0247 A +228THS G KC=0.0172$ LC=0.00567 +228TH L 968.968 5 2+ E +228TH B 29.9 10 7.39 2 +228THS B EAV=382.3 12 +228TH G 782.142 5 0.485 19 [E2] 0.0163 A +228TH3 G FLAG=E +228THS G KC=0.0119$ LC=0.00330 +228TH cG M |a(K)exp=0.024 {I3} (1960Ar06), 0.07 {I3} (1971He23) +228TH2cG inconsistent with with each other and with E2 assignment required by +228THxcG level scheme +228TH G 911.204 4 25.8 4 E2 0.0121 A +228TH3 G FLAG=D +228THS G KC=0.0091$ LC=0.00225 +228TH cG M |a(K)exp=0.0104 {I10}, K/L=4.6 {I5} (1971He23), +228TH2cG |a(K)exp=0.0092 {I9} (1960Ar06); theory: |a(K)=0.0091, K/L=4.04. +228THxcG |d=+24 {I8} from {+228}Pa decay +228TH G 968.971 17 15.8 3 E2 0.0107 A +228TH3 G FLAG=D +228THS G KC=0.00815$ LC=0.00194 +228TH cG M |a(L)exp=0.0016 {I3} (1971He23); theory: |a(K)=0.00815, +228TH2cG |a(L)=0.0194; |a(K)exp used in normalization of the ce spectra. +228TH L 979.499 14 2+ +228TH B 0.13 7 9.73 24 +228THS B EAV=378.3 12 +228TH G 583.41 5 0.111 10 [E1] 0.0094 +228THS G KC=0.00761$ LC=0.00132 +228TH cG RI does not agree with the branching ratio in {+228}Pa decay +228TH G 651.51 3 0.090 8 [E1] 0.0076 A +228THS G KC=0.00617$ LC=0.00106 +228TH G 792.8 0.08 AP [E2] 0.0159 +228THS G KC=0.0116$ LC=0.00319 +228TH G 921.98 10 0.0147 21 [M1,E2] 0.028 17 & +228THS G KC=0.022 14$ LC=0.0044 22 +228TH cG M |a(K)exp=2.0 {I4} (1971He23) may indicate an E0 component +228TH cG Total intensity placed here by 1987Da28 +228TH G 979.48 10 0.026 3 [E2] 0.0105 +228THS G KC=0.00799$ LC=0.00189 +228TH L 1016.406 21 2+,3-,4+ +228TH B 0.31 5 9.31 7 +228THS B EAV=364.3 12 +228TH G 620.38 5 0.080 5 +228TH G 688.10 5 0.067 5 & +228TH2 G FL=328.003 +228TH cG |g not placed here by 1987Da28; this placement of the |g +228TH2cG suggested in {+228}Pa decay +228TH G 958.61 4 0.28 4 A +228TH3 G FLAG=H +228TH G 1016.44 15 0.019 3 & +228TH L 1022.527 6 (3)+ E +228TH B 3.10 15 8.30 2 +228THS B EAV=362.0 12 +228TH G 835.710 6 1.61 6 E2 0.0143 A +228TH3 G FLAG=EJ +228THS G KC=0.0106$ LC=0.00279 +228TH cG M |a(K)exp|<0.015 (1971He23); theory: |a(K)=0.0106 +228TH G 964.766 10 4.99 9 E2+M1 -7.2 10 0.0108 A +228TH3 G FLAG=E +228THS G KC=0.00821$ LC=0.00196 +228TH cG M |a(K)exp=0.0084 {I9} (1971He23); theory: |a(K)=0.00821 +228TH L 1059.93 3 4- +228TH B 0.071 11 9.88 7 +228THS B EAV=347.9 12 +228TH G 540.76 10 0.026 3 [M1,E2] 0.11 8 +228THS G KC=0.08 6$ LC=0.018 9 +228TH G 663.82 10 0.028 6 (M1+E2) 0.06 4 J +228THS G KC=0.05 4$ LC=0.010 6 +228TH G 873.17 15 0.031 6 [E1] 0.00441 +228THS G KC=0.00361$ LC=0.00060 +228TH L 1091.017 8 4+ E +228TH B 0.26 5 9.28 9 +228THS B EAV=336.3 12 +228TH G 904.20 4 0.77 3 E2 0.0123 A +228TH3 G FLAG=FJ +228THS G KC=0.0092$ LC=0.00229 +228TH cG M |a(K)exp=0.027 {I10} (1971He23), ce(K) not seen (1960Ar06); +228TH2cG |a(K)exp does not agree with |a(K)exp measured in {+228}Pa |e decay. +228TH G 1033.248 9 0.201 13 E2 0.0095 A +228TH3 G FLAG=J +228THS G KC=0.00727$ LC=0.00167 +228TH L 1122.951 6 2- F +228TH B 5.92 14 7.871 12 +228THS B EAV=324.4 12 +228TH G 100.41 3 0.093 13 (E1+M2) 0.23 AP 3.2 AP +228THS G LC=2.4$ MC=0.64$ NC+=0.25 +228TH cG M,MR |a(L3)exp|?0.43 (1971He23); theory: |a(L3)(E1)=0.0213, +228TH2cG |a(L3)(M2)=8.66. |a(L3)exp could also fit M1+E2; however, level scheme +228TH3cG requires |D|p=yes +228TH G 153.977 10 0.722 21 E1 0.178 E +228TH3 G FL=968.968 +228THS G KC=0.139$ LC=0.0292$ MC=0.00703$ NC+=0.00250 +228TH cG M |a(K)exp=0.095 {I16} (1971He23); theory: |a(K)=0.129 +228TH G 726.863 15 0.62 8 (E2) 0.0189 +228THS G KC=0.0136$ LC=0.00400 +228TH cG M |a(K)exp|?0.012 (1971He23); theory: |a(K)=0.0136 +228TH G 794.947 5 4.25 7 E2+M1 -4.4 10 0.0182 15 A +228TH3 G FLAG=DK +228THS G KC=0.0136 13$ LC=0.00349 20 +228TH cG M |a(K)exp=0.0118 {I20}, K/L=1.6 {I7} (1971He23), +228TH2cG |a(K)exp=0.0139 {I19} (1960Ar06); theory: |a(K)(E2)=0.0116, +228THxcG |a(K)(M1)=0.0524 +228TH G 1065.18 4 0.132 10 A +228TH L 1153.467 10 2+ 0.29 NS 2 +228TH cL T from 1974De14 +228TH B 5.1 8 7.89 7 +228THS B EAV=313.1 11 +228TH G 173.964 13 0.035 5 M1+E2 1.2 +11-6 2.3 18 A +228THS G KC=1.5 10$ LC=0.66 4$ MC=0.171 22$ NC+=0.063 5 +228TH cG M,MR from |a(K)exp=1.5 {I8} (1971He23); also fits E1+M2 with +228TH2cG |d=0.35 {I12}, level scheme requires |D|p=no. Theory: |a(K)(E1)=0.104, +228TH3cG |a(K)(E2)=0.203, |a(K)(M1)=3.26, |a(K)(M2)=12.9 +228TH G 184.54 2 0.070 8 E0+M1 63 8 4.5 8 +228TH3 G FL=968.968 +228THS G KC=53 7$ LC=10.2 13$ MC=0.126$ NC+=0.0462 +228TH cG M K/L=4.0 {I5}, L1/L2=33 {I6}, L1/L3>>50 (1974De14), +228TH2cG |a(K)exp=53 {I7} (1971He23); measured |a(K)exp yields an E0 transition +228TH3cG with an admixture of: 5.4% M1 with K/L=5.2, L1/L2=30, L1/L3=3300, or +228TH4cG 1.4% E2 with K/L=5.0, L1/L2=16.5, L1/L3=58. Thus the ratios support +228TH5cG E0+M1 transition +228TH cG CC from |a(K)exp +228TH G 278.95 5 0.160 21 (M1,E2) 0.7 5 @ +228TH3 G FL=874.473$ FLAG=N +228THS G KC=0.48 39$ LC=0.130 35$ MC=0.033 7$ NC+=0.0119 24 +228TH cG M |a(K)exp(doublet)=0.18 {I4} (1960Ar06), +228TH2cG |a(L)exp(279|g+282|g)=0.37 {I7} (1971He23); theory: |a(K)(M1)=0.872, +228THxcG |a(K)(E2)=0.0854 +228TH G 321.646 8 0.226 11 [E2] 0.140 A +228TH3 G FLAG=D +228THS G KC=0.0643$ LC=0.0550$ MC=0.0147$ NC+=0.00544 +228TH cG M |a(K)exp=0.49 {I8} (1971He23) indicating mainly M1 transition +228TH2cG (|a(K)(M1)=0.590) which is not in agreement with the level scheme. +228TH3cG 1960Ar06 did not see ce(K) suggesting that the |a(K)exp may be +228THxcG unreliable. +228TH G 1095.679 20 0.129 10 [M1,E2] 0.018 10 A +228TH G 1153.52 4 0.139 10 A +228TH L 1168.375 5 3- F +228TH B 3.08 7 8.084 11 +228THS B EAV=307.6 11 +228TH G 77.34 3 0.026 5 [E1] 0.235 +228THS G LC=0.177$ MC=0.0431$ NC+=0.0150 +228TH G 145.849 10 0.158 8 E1 0.203 H +228TH3 G FLAG=J +228THS G KC=0.158$ LC=0.0336$ MC=0.00809$ NC+=0.00287 +228TH cG M |a(K)exp=1.3 {I4} (1971He23); theory: |a(K)=0.158. ce not +228TH2cG seen by 1960Ar06 or in {+228}Pa decay. +228TH G 199.407 10 0.315 5 E1 0.096 H +228TH3 G FLAG=J +228THS G KC=0.0758$ LC=0.0152$ MC=0.00365$ NC+=0.00129 +228TH cG M ce(K), ce(L) not seen (1971He23,1960Ar06), suggests E1 mult +228TH G 648.84 10 0.040 4 [E2] 0.0240 & +228TH2 G FL=519.192 +228THS G KC=0.0168$ LC=0.00546 +228TH G 772.291 5 1.49 3 E2+M1 -3.4 +8-27 0.021 3 A +228TH3 G FLAG=EK +228THS G KC=0.0157 24$ LC=0.0040 4 +228TH cG M |a(K)exp=0.016 {I7} (1971He23), 0.019 {I3} (1960Ar06); +228TH2cG theory: |a(K)=0.0157 {I24} +228TH G 840.377 7 0.91 4 E2 0.0142 A +228TH3 G FLAG=EJ +228THS G KC=0.0105$ LC=0.00275 +228TH cG M |a(K)exp|<0.026 (1971He23); theory: |a(K)=0.0105 +228TH G 1110.610 10 0.285 23 E1 @ +228TH3 G FLAG=AJN +228TH L 1174.508 18 (5+) E +228TH B 0.005 LT 10.9 GT +228THS B EAV=305.4 11 +228TH G 987.71 20 0.077 13 [M1,E2] 0.024 14 +228THS G KC=0.019 11$ LC=0.0037 18 +228TH L 1175.39 5 2+ +228TH B 0.17 3 9.33 8 +228THS B EAV=305.0 11 +228TH G 231.42 10 0.025 4 [D,E2] 1.0 9 +228TH G 988.63 20 0.077 13 [E2] 0.0103 +228TH G 1117.63 10 0.054 8 +228TH G 1175.31 10 0.024 3 +228TH L 1226.565 7 (4)- F +228TH B 0.66 4 8.66 3 +228THS B EAV=286.3 11 +228TH G 135.54 5 0.018 4 E1 0.242 J +228THS G KC=0.188$ LC=0.0406$ MC=0.0098$ NC+=0.00348 +228TH cG M |a(K)exp|?3 (1971He23); theory: |a(K)=0.188 +228TH G 204.026 10 0.112 15 E1 0.091 H +228THS G KC=0.0719$ LC=0.0143$ MC=0.00344$ NC+=0.00122 +228TH cG M |a(L)exp<0.23 (1971He23); theory: |a(L)(E1)=0.0143, +228THxcG |a(L)(E2)=0.342 +228TH G 707.41 5 0.155 15 (E2) 0.0200 H +228TH3 G FLAG=J +228THS G KC=0.0143$ LC=0.00711 +228TH G 830.486 8 0.540 21 E2(+M1) -7.7 9 0.0152 2 A +228TH3 G FLAG=FJK +228THS G KC=0.0113 2 $ LC=0.00293 3 +228TH cG M |a(K)exp=0.020 {I11} (1971He23); theory: |a(K)=0.0113 {I2} +228TH G 1039.65 15 0.044 9 +228TH L 1297.423 10 (5)- F +228TH B 0.058 13 9.95 10 1U +228THS B EAV=257.9 10 +228TH G 778.23 0.022 6 [M1,E2] 0.04 3 S +228TH3 G FLAG=T +228THS G KC=0.034 22$ LC=0.007 4 +228TH G 901.23 15 0.016 3 [E2] 0.0123 +228THS G KC=0.00926$ LC=0.00231 +228TH G 1110.610 10 0.019 10 E1 @ +228TH3 G FLAG=JN +228TH L 1344.078 11 3- +228TH B 0.208 16 8.95 4 +228THS B EAV=243.9 11 +228TH G 168.65 10 0.010 3 [E1] 0.143 @ +228TH2 G FLAG=Q +228THS G KC=0.112$ LC=0.0232$ MC=0.00557$ NC+=0.00197 +228TH G 824.934 23 0.050 5 [E2] 0.0147 A +228THS G KC=0.0108$ LC=0.00288 +228TH G 947.982 11 0.106 8 [M1,E2] 0.026 15 A +228THS G KC=0.021 12$ LC=0.0041 20 +228TH G 1016.44 15 0.019 3 & +228TH G 1157.14 15 0.0070 13 +228TH G 1286.27 20 0.050 10 +228TH L 1416.11 6 2+,3- +228TH B 0.060 8 9.35 6 +228THS B EAV=218.4 11 +228TH G 471.76 15 0.033 3 [D,E2] 0.14 12 +228TH G 1019.86 10 0.021 4 +228TH G 1088.18 15 0.0059 13 +228TH G 1229.40 15 0.0075 23 +228TH L 1431.979 6 4+ +228TH B 0.8 4 8.19 22 +228THS B EAV=212.9 11 +228TH G 257.52 10 0.030 3 (M1) 1.36 J +228THS G KC=1.09$ LC=0.205$ MC=0.0495$ NC+=0.0180 +228TH G 263.58 10 0.040 4 E1 0.0502 J +228THS G KC=0.0400$ LC=0.00766$ MC=0.00184$ NC+=0.00065 +228TH G 278.95 5 0.031 5 [E2] 0.216 @ +228TH3 G FL=1153.467$ FLAG=N +228THS G KC=0.086$ LC=0.096$ MC=0.0257$ NC+=0.0095 +228TH cG |g not placed here by 1987Da28; this alternate placement is +228TH2cG suggested in {+228}Pa decay +228TH G 340.96 5 0.369 21 E2+M1 -5.2 18 0.136 23 E +228TH3 G FLAG=JK +228THS G KC=0.073 20$ LC=0.046 2$ MC=0.0122 5$ NC+=0.00450 17 +228TH cG M |a(K)exp=0.66 {I7} (1971He23) suggests an M1 transition. +228TH2cG However, ce(K) not seen by 1960Ar06. +228TH G 409.462 6 1.92 4 E2+M1 -5.4 8 0.082 4 A +228TH3 G FLAG=EK +228THS G KC=0.049 4$ LC=0.0242 5$ MC=0.00631 10$ NC+=0.00233 4 +228TH cG M |a(K)exp=0.058 {I9}, K/L=2.0 {I4} (1971He23), |a(K)exp=0049 +228TH2cG {I4} (1960Ar06). Theory: |a(K)=0.49 {I4}, K/L=2.02 +228TH G 452.47 10 0.015 5 [E2] 0.0553 +228THS G KC=0.0330$ LC=0.0164$ MC=0.00429$ NC+=0.00158 +228TH G 463.004 6 4.40 7 E2 0.0522 A +228TH3 G FLAG=E +228THS G KC=0.0316$ LC=0.0152$ MC=0.00397$ NC+=0.00146 +228TH cG M |a(K)exp=0.036 {I4}, K/L=3.0 {I7} (1971He23); |a(K)exp=0.028 +228TH2cG {I3} (1960Ar06); theory: |a(K)=0.0316, K/L=2.1 +228TH G 1103.41 10 0.0150 23 [E3] B ? +228TH2 G FL=328.003$ FLAG=P +228TH G 1245.05 20 0.095 18 [M1,E2] 0.013 7 L +228TH G 1374.19 10 0.014 4 +228TH L 1450.394 10 4- +228TH B 0.59 7 8.28 6 +228THS B EAV=206.5 11 +228TH G 18.4 0.014 4 [E1] 6.6 0.11 3 S +228TH cG TI,RI deduced from branching ratio in Pa decay +228TH G 223.85 10 0.054 5 M1+E2 -0.18 5 1.97 3 J +228TH3 G FLAG=K +228THS G KC=1.56 3$ LC=0.302 1$ MC=0.0729 2$ NC+=0.0266 1 +228TH cG M |a(K)exp=1.7 {I5}, K/L=4.2 {I19} (1971He23); theory: +228THxcG |a(K)=1.56 {I3}, K/L=5.2 +228TH G 282.00 3 0.072 19 M1+E2 -0.51 12 0.88 7 A +228TH3 G FLAG=HJK +228THS G KC=0.69 6$ LC=0.145 6$ MC=0.0355 11$ NC+=0.0129 4 +228TH G 327.44 0.12 4 [E2] 0.132 S +228TH3 G FLAG=T +228THS G KC=0.0621$ LC=0.0515$ MC=0.0137$ NC+=0.00508 +228TH cG |g may be masked by strong 328.000|g. +228TH cG E E|g from E(level) +228TH G 480.94 20 0.023 5 [M2] P +228TH3 G FL=968.968 +228TH cG Not reported in {+228}Pa decay +228TH G 930.93 10 0.0124 18 & +228TH cG Placement of |g in level scheme uncertain. Alternate +228TH2cG placement suggested in {+228}Pa decay +228TH G 1054.11 20 0.018 5 +228TH L 1531.474 6 3+ +228TH B 8.0 4 6.96 2 +228THS B EAV=178.7 11 +228TH G 99.509 6 1.26 7 M1 4.09 A +228TH2 G FLAG=H +228THS G LC=3.07$ MC=0.741$ NC+=0.273 +228TH cG M |a(L12)exp=3.0 {I3} (1971He23), 2.0 {I3} (1960Ar06); L3 not +228TH2cG seen (1960Ar06) theory: |a(L)=3.07 +228TH G 356.94 10 0.0170 18 [E2] 0.103 +228THS G KC=0.0523$ LC=0.0374$ MC=0.0099$ NC+=0.00368 +228TH cG M |a(K)exp=1.9 {I9} (1971He23) does not agree with +228TH2cG multipolarity deduced from level scheme. Theory: |a(K)=0.0523 +228TH G 377.99 10 0.025 3 [M1,E2] 0.28 19 +228THS G KC=0.21 17$ LC=0.051 20$ MC=0.013 5$ NC+=0.0046 16 +228TH G 440.44 5 0.121 8 M1 0.314 +228THS G KC=0.252$ LC=0.0471$ MC=0.0113$ NC+=0.00410 +228TH cG M |a(K)exp=0.26 {I9} (1971He23); theory: |a(K)=0.252. Limit of +228TH2cG E2 admixture |d<0.8 +228TH G 508.959 17 0.45 5 E2(+M1) 1.1 GT 0.08 4 A +228THS G KC=0.06 3$ LC=0.016 5 +228TH cG M,MR |a(K)exp=0.06 {I3} (1971He23); theory: |a(K)(E2)=0.0264, +228THxcG |a(K)(M1)=0.171 +228TH G 562.500 4 0.87 3 E2+M1 +1.6 6 0.07 3 A +228TH3 G FLAG=EK +228THS G KC=0.051 23$ LC=0.013 4 +228TH cG M |a(K)exp=0.048 {I10} (1971He23); E1+M2 mixture requires +228THxcG |d=0.39 +228TH G 1135.24 15 0.0098 15 +228TH G 1344.59 15 0.0090 18 +228TH L 1539.21 9 2,3,4 +228TH G 416.30 20 0.0132 21 [E1] 0.0185 +228THS G KC=0.0149$ LC=0.00268$ MC=0.000640$ NC+=0.000228 +228TH G 1142.85 15 0.0103 21 +228TH L 1617.78 7 2+,3,4+ +228TH B 0.075 13 8.77 8 +228THS B EAV=149.8 10 +228TH G 648.84 10 0.040 4 & +228TH3 G FL=968.968 +228TH cG |g not placed here by 1987Da28. This multiply placement +228TH2cG suggested in {+228}Pa decay +228TH G 1430.95 10 0.035 7 +228TH G 1559.85 20 0.020 4 +228TH L 1638.284 9 2+ G +228TH cL Quasiparticle configuration=((|p 3/2+[651])(|p 1/2+[660])) or +228TH2cL configuration=((|p 3/2+[651])(|p 1/2+[400])) suggested for this level +228TH B 1.15 5 7.52 2 +228THS B EAV=143.0 10 +228TH G 470.25 20 0.013 3 [E1] 0.0144 +228THS G KC=0.0116$ LC=0.00206$ MC=0.00049$ NC+=0.00018 +228TH G 515.06 10 0.049 5 [E1] 0.0120 +228THS G KC=0.0097$ LC=0.00170 +228TH G 1309.71 20 0.019 6 +228TH G 1451.40 15 0.0106 21 +228TH G 1580.53 3 0.60 4 (M1,E2) A +228TH3 G FLAG=I +228TH cG M |a(K)exp=0.012 {I7} (1971He23); theory: |a(K)(M1)=0.0087, +228THxcG |a(K)(E2)=0.00343 +228TH G 1638.281 10 0.47 3 (E2) A +228TH3 G FLAG=IJ +228TH L 1643.125 15 (2-,3-) +228TH B 0.80 6 7.67 4 +228THS B EAV=141.4 10 +228TH G 474.75 10 0.022 3 [M1,E2] 0.15 11 +228THS G KC=0.12 9$ LC=0.026 13$ MC=0.006 3$ NC+=0.0023 10 +228TH G 520.151 16 0.067 5 (M1) 0.201 A +228THS G KC=0.161$ LC=0.0301 +228TH cG M |a(K)exp=0.31 {I12} (1971He23); theory: |a(K)=0.161 +228TH G 627.23 20 0.014 3 +228TH G 674.16 0.109 LE [E1] R +228TH3 G FL=968.968 +228TH cG E deduced from E(level) +228TH G 674.75 0.109 LE [M1,E2] 0.06 4 R +228TH3 G FL=968.369 +228THS G KC=0.048 32$ LC=0.010 5 +228TH cG E deduced from E(level) +228TH G 699.08 15 0.037 5 [D,E2] 0.05 4 +228TH G 1247.08 4 0.50 3 (M1) 0.0201 A +228TH3 G FLAG=IL +228TH G 1315.34 10 0.015 3 [M1,E2] 0.012 6 +228TH L 1645.954 12 3+ +228TH B 4.16 20 6.94 2 +228THS B EAV=140.5 10 +228TH G 114.56 7 0.0098 21 [M1,E2] 10 4 +228THS G KC=5.5 52$ LC=3.2 12$ MC=0.9 4$ NC+=0.32 14 +228TH G 419.42 10 0.021 3 [E1] 0.0182 +228THS G KC=0.0147$ LC=0.00264$ MC=0.00063$ NC+=0.000225 +228TH G 492.37 10 0.0235 23 [M1,E2] 0.14 10 +228THS G KC=0.11 8$ LC=0.024 12$ MC=0.006 3$ NC+=0.0021 10 +228TH G 523.131 16 0.103 8 [E1] 0.0116 A +228TH3 G FL=1122.951$ FLAG=B +228THS G KC=0.00942$ LC=0.000165 +228TH cG M |a(K)exp|<0.08 (1971He23); theory: |a(K)(E1)=0.0094, +228TH2cG |a(K)(E2)=0.0251, |a(K)(E3)=0.0610, |a(K)(M1)=0.158 +228TH G 555.12 10 0.046 5 [M1,E2] 0.10 7 +228THS G KC=0.08 6$ LC=0.017 9 +228TH G 623.27 20 0.011 3 [M1,E2] 0.08 5 +228THS G KC=0.06 4$ LC=0.012 6 +228TH G 629.40 5 0.045 5 [D,E2] 0.06 6 +228TH G 666.45 10 0.057 6 [M1,E2] 0.06 4 @ +228TH3 G FLAG=N +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG I|g(doublet)=0.052 {I5}. All of intensity placed here by +228THxcG 1987Da28, +228TH G 677.11 10 0.062 5 [M1,E2] 0.06 4 +228TH3 G FL=968.968 +228THS G KC=0.05 3$ LC=0.010 5 +228TH G 1250.04 10 0.062 5 A +228TH G 1459.138 15 0.83 8 E2 A +228TH3 G FLAG=IJ +228TH G 1588.20 3 3.22 8 E2 A +228TH3 G FLAG=IJ +228TH cG M |a(K)exp=0.0050 {I16} (1971He23); theory: |a(K)=0.00340 +228TH L 1682.81 3 2+,3(+),4+ +228TH B 1.12 5 7.40 2 +228THS B EAV=128.5 10 +228TH G 660.1 3 0.005 AP [M1,E2] 0.06 4 +228THS G KC=0.05 3$ LC=0.010 5 +228TH G 1495.910 20 0.86 4 (E2) A +228TH3 G FLAG=IJ +228TH G 1625.06 5 0.255 18 A +228TH L 1683.82 5 (4-) +228TH B 0.165 17 8.23 5 +228THS B EAV=128.2 10 +228TH G 457.17 15 0.0150 23 [M1,E2] 0.17 12 +228THS G KC=0.13 10$ LC=0.029 14$ MC=0.007 3$ NC+=0.0026 11 +228TH G 1164.50 8 0.065 5 (M1+E2) 0.016 9 J +228TH G 1287.68 20 0.080 15 (M1+E2) 0.012 7 J +228TH cG |g listed in table I of 1987Da28 as deexciting the 1682.8 +228TH2cG level; however, on level scheme (fig. 4) shown as deexciting the +228TH3cG 1683.8 level. The energy fit is much better from the 1683.8 level. +228TH L 1688.394 11 2+,3+ G +228TH B 2.45 16 7.04 3 +228THS B EAV=126.7 10 +228TH G 42.46 5 0.009 3 [M1] 49 +228TH cG From intensity balance at 1646 level, multipolarity cannot +228TH2cG be pure E2. Some E2 admixture, however, cannot be ruled out +228TH G 672.00 15 0.026 8 +228TH cG |g listed in table I of 1987Da28 as deexciting the 1683.8 +228TH2cG level; however, on level scheme (fig. 4) shown as deexciting the +228TH3cG 1688.4 level. +228TH G 813.77 15 0.0070 16 [M1,E2] 0.038 23 +228THS G KC=0.030 19$ LC=0.006 3 +228TH G 1501.57 5 0.46 3 G +228TH G 1630.627 10 1.51 4 (M1,E2) A +228TH2 G FLAG=I +228TH cG M from |a(K)exp(1625|g+1630|g)=0.0062 {I20} (1971He23); theory: +228TH2cG |a(K)(M1)=0.0090, |a(K)(E2)=0.0034 +228TH L 1724.283 6 2+ +228TH B 1.76 5 7.06 2 +228THS B EAV=115.3 10 +228TH G 497.49 15 0.0059 18 [M2] 0.608 P +228THS G KC=0.457$ LC=0.113$ MC=0.0282$ NC+=0.0104 +228TH G 548.73 15 0.023 3 [M1,E2] 0.10 7 +228THS G KC=0.08 6$ LC=0.017 9 +228TH G 570.91 10 0.182 24 (M1) 0.156 G +228THS G KC=0.125$ LC=0.0234 +228TH cG M |a(K)exp=0.20 {I8} (1971He23); theory: |a(K)=0.125 +228TH cG 1987Da28 assigns this |g to be the 1539.2 to 968.4 transition +228TH2cG on the basis of coin with 911.2|g. However, the E(level) difference is +228TH3cG 570.25 {I9}. In {+228}Pa decay this |g is assigned to the 1724.3 level; +228TH4cG energy, intensity, multipolarity, and coin results agree with this +228TH5cG assignment. +228TH G 701.747 14 0.173 10 (M1) 0.091 A +228TH3 G FLAG=J +228THS G KC=0.0726$ LC=0.0135 +228TH G 755.315 4 1.00 3 M1 0.0747 A +228TH3 G FLAG=DJ +228THS G KC=0.0599$ LC=0.0111 +228TH cG M |a(K)exp=0.055 {I9} (1971He23), 0.057 {I8} (1960Ar06); +228TH2cG theory: |a(K)(M1)=0.0599, |a(K)(E2)=0.0127 +228TH G 1537.89 10 0.047 5 B +228TH2 G FL=186.823 +228TH G 1666.523 13 0.178 13 M1 A +228TH3 G FLAG=J +228TH G 1724.21 4 0.029 3 A +228TH L 1735.450 25 (4+) +228TH B 0.133 9 8.14 4 +228THS B EAV=111.7 10 +228TH G 1217.03 10 0.021 3 B +228TH2 G FL=519.192 +228TH G 1357.78 15 0.020 4 B +228TH2 G FL=378.179 +228TH G 1548.65 4 0.038 4 A +228TH G 1677.67 3 0.054 5 A +228TH L 1743.89 3 4+ +228TH B 0.389 18 7.65 2 +228THS B EAV=109.1 10 +228TH G 399.62 10 0.029 3 [E1] 0.0212 +228THS G KC=0.0162$ LC=0.00293$ MC=0.000701$ NC+=0.000250 +228TH G 590.4 0.017 3 [E2] 0.0295 S +228TH3 G FLAG=T +228THS G KC=0.0200$ LC=0.00716 +228TH G 684.0 0.019 5 [E1] S +228TH3 G FLAG=T +228TH G 1347.50 15 0.015 3 +228TH cG |g not seen in {+228}Pa decay. I|g<0.004 from upper limit in +228TH2cG {+228}Pa decay +228TH G 1365.70 15 0.014 3 M +228TH G 1415.66 10 0.021 4 [E3] P +228TH3 G FL=328.003 +228TH G 1557.11 4 0.178 13 (E2+M1) +1.2 2 A +228TH3 G FLAG=JK +228TH G 1686.09 7 0.095 8 (E2) A +228TH3 G FLAG=J +228TH L 1758.24 12 2+,3,4+ +228TH B 0.062 13 8.39 10 +228THS B EAV=104.6 10 +228TH G 326.04 20 0.033 5 [D,E2] 0.4 3 +228TH G 1571.52 20 0.0057 16 +228TH G 1700.59 20 0.0101 23 +228TH L 1760.218 24 2+,3(+) G +228TH B 0.119 10 8.10 4 +228THS B EAV=104.0 10 +228TH G 737.72 5 0.037 4 [M1,E2] 0.05 3 +228TH cG M |a(K)exp=0.28 {I14} (1971He23); theory: |a(K)(M1)=0.0637, +228TH2cG |a(K)(E2)=0.0133, |a(K)(M2)=0.147. Unconfirmed |a(K)exp seems to +228THxcG indicate E0 admixture +228TH G 791.49 25 0.010 3 [M1,E2] 0.04 3 @ +228TH3 G FL=968.968$ FLAG=N +228THS G KC=0.032 21$ LC=0.007 4 +228TH cG |g placed here with I|g=0.023 {I7} by 1987Da28 +228TH G 1573.26 5 0.033 3 (E2) A +228TH3 G FLAG=J +228TH G 1702.43 5 0.048 5 A +228TH L 1795.90 10 3-,4+ +228TH B 0.01 LT 9.0 GT +228THS B EAV=92.9 10 +228TH G 1276.69 10 0.014 3 +228TH G 1738.22 25 0.018 4 +228TH L 1797.65 8 2+ +228TH B 0.045 6 8.37 6 +228THS B EAV=92.4 10 +228TH G 1401.49 10 0.012 3 +228TH G 1469.71 15 0.020 4 +228TH G 1740.4 3 0.011 3 +228TH G 1797.5 5 0.0021 8 +228TH L 1892.996 17 3+ +228TH B 0.112 7 7.51 4 +228THS B EAV=63.7 9 +228TH G 666.45 10 0.005 2 [E1] @ +228TH3 G FLAG=N +228TH cG This placement of the |g suggested by {+228}Pa decay. +228TH G 692.5 0.0056 7 (M1+E2+E0) 0.24 3 S +228TH3 G FLAG=T +228TH G 770.04 0.0063 8 [E1] S +228TH3 G FLAG=T +228TH G 870.46 4 0.044 4 M1 0.0515 A +228TH3 G FLAG=J +228THS G KC=0.0414$ LC=0.00762 +228TH G 924.03 0.0075 10 [M1,E2] S +228TH3 G FLAG=T +228TH G 1706.19 10 0.0085 10 M1+E2 +0.42 4 J +228TH3 G FLAG=K +228TH G 1835.43 10 0.038 4 E2+M1 +2.9 3 J +228TH3 G FLAG=K +228TH L 1899.95 4 2+ G +228TH cL Quasiparticle configuration=((|p 3/2[651])(|p 1/2[660])) or +228TH2cL configuration=((|p 3/2[651])(|p 1/2[400])) suggested for this level +228TH B 0.071 6 7.66 4 +228THS B EAV=61.7 9 +228TH G 877.46 10 0.014 3 [M1,E2] 0.032 19 +228THS G KC=0.025 15$ LC=0.005 3 +228TH G 930.93 10 0.0124 18 & +228TH cG This placement of |g suggested in {+228}Pa decay +228TH G 1713.47 20 0.0054 10 +228TH cG |g not seen in {+228}Pa decay. I|g<0.002 from upper limit in +228TH2cG {+228}Pa decay +228TH G 1842.13 10 0.042 4 M1+E2 -0.86 14 J +228TH3 G FLAG=K +228TH G 1900.07 20 0.0028 5 +228TH L 1906.64 10 (2+) +228TH B 0.034 5 7.94 7 +228THS B EAV=59.7 9 +228TH G 490.33 15 0.0111 23 [D,E2] 0.12 11 +228TH G 1074.71 15 0.010 3 +228TH G 1907.18 20 0.0119 10 +228TH L 1928.57 6 3+ +228TH B 0.057 7 7.57 6 +228THS B EAV=53.4 9 +228TH G 168.65 10 0.0030 7 [M1,E2] 2.9 16 @ +228TH2 G FLAG=Q +228THS G KC=1.9 17$ LC=0.73 6$ MC=0.19 3$ NC+=0.070 10 +228TH G 389.12 15 0.0103 15 [M1,E2] 0.26 18 +228TH G 1742.0 3 0.0080 23 +228TH G 1870.83 10 0.0243 23 (M1+E2) J +228TH L 1937.16 9 2+,3,4+ +228TH B 0.046 5 7.61 6 +228THS B EAV=50.9 9 +228TH G 397.94 10 0.027 3 +228TH G 1062.55 15 0.010 3 +228TH G 1750.54 20 0.0080 8 +228TH G 1879.6 3 0.0013 5 +228TH L 1944.895 11 3+ G +228TH B 0.244 14 6.83 4 +228THS B EAV=48.7 9 +228TH G 718.48 15 0.019 4 (E1) J +228TH G 776.56 10 0.019 6 +228TH G 791.49 25 0.013 3 (M1) 0.0661 @ +228TH3 G FLAG=N +228THS G KC=0.0530$ LC=0.0098 +228TH cG This placement suggested by {+228}Pa decay +228TH G 853.17 10 0.0031 4 [M1,E2] 0.034 20 B +228TH2 G FL=1091.017$ FLAG=U +228THS G KC=0.027 17$ LC=0.005 3 +228TH cG RI from branching ratio in {+228}Pa decay +228TH G 921.98 10 0.0147 21 & +228TH cG This placement suggested by {+228}Pa decay +228TH G 975.96 5 0.050 5 M1 0.0381 J +228TH3 G FL=968.968 +228THS G KC=0.0306$ LC=0.00563 +228TH G 1000.69 15 0.005 +228TH cG |g not seen in {+228}Pa decay. I|g<0.002 from upper limit in +228TH2cG {+228}Pa decay. +228TH G 1758.11 10 0.035 4 E2+M1 -9 1 J +228TH3 G FLAG=K +228TH G 1887.10 5 0.090 8 E2+M1 -9.1 1 J +228TH3 G FLAG=K +228TH L 1958.72 22 2+ +228TH B 0.0033 7 8.59 10 +228THS B EAV=44.8 9 +228TH G 1772.2 3 0.0018 5 +228TH G 1958.4 3 0.0015 5 +228TH L 1987.46 10 4+ +228TH B 0.038 3 7.27 5 +228THS B EAV=36.8 9 +228TH G 1017.92 20 0.0057 13 +228TH3 G FL=968.968 +228TH G 1609.41 15 0.0077 15 +228TH G 1800.86 20 0.0044 8 +228TH G 1929.78 20 0.0199 21 +228TH L 2010.11 5 2+,3,(4+) +228TH cL 1987Da28 suggests that this is the 4+ level of K|p=2+ +228TH2cL rotational band built on the 1900.00 level. However, the relatively +228TH3cL strong 887.33|g to the 1123-keV level would then have M2 mult. +228TH B 0.27 4 6.19 8 +228THS B EAV=30.5 9 +228TH G 214.85 10 0.029 4 [D,E2] 1.2 11 +228TH G 372.57 20 0.0067 15 [D,E2] 0.26 24 +228TH3 G FL=1638.284 +228TH G 887.33 10 0.027 3 +228TH G 918.97 10 0.027 3 +228TH cG M |a(K)exp=1.1 {I2} (1971He23) indicates E0 component; +228TH2cG however, then the relatively strong |g to 1123 {I2}- level must be M2 +228TH G 1040.92 15 0.044 9 +228TH G 1823.22 10 0.044 4 +228TH G 1952.33 15 0.059 5 +228TH L 2013.6 3 2+,3,4+ +228TH B 0.0029 9 8.11 14 +228THS B EAV=29.6 9 +228TH G 1826.7 3 0.0021 8 +228TH G 1955.9 5 0.0008 3 +228TH L 2022.84 10 +228TH B 0.054 6 6.73 7 +228THS B EAV=27.1 9 +228TH G 384.63 20 0.0067 15 [D,E2] 0.24 22 +228TH cG Not reported in {+228}Pa decay +228TH G 1053.09 20 0.013 4 B +228TH3 G FL=968.968 +228TH G 1148.12 15 0.0059 13 +228TH G 1190.81 20 0.0062 16 +228TH G 1965.24 20 0.0204 18 +228TH cG RI from {+228}Pa decay I|g|<0.0085 {I23} +228TH L 2029.84 16 1,2+ +228TH B 0.019 4 7.09 10 +228THS B EAV=25.2 8 +228TH G 939.87 15 0.009 3 B +228TH3 G FL=1091.017$ +228TH G 1013.58 20 0.0046 13 +228TH G 1971.9 3 0.0036 8 +228TH G 2029.4 5 0.0018 5 +228TH L 2036.99 17 2+,3,4+ +228TH B 0.0062 10 7.48 9 +228THS B EAV=23.3 8 +228TH G 1850.13 20 0.0044 8 +228TH G 1979.3 3 0.0018 5 +228TH L 2123.1 3 (2+) +228TH B 0.0042 10 3.5 20 +228THS B EAV=1.0 8 +228TH G 1795.1 5 0.0021 8 +228TH G 1936.3 3 0.0021 5 + +228TH 228PA EC DECAY 1995BA42 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228PA P 0.0 3+ 22 H 1 2148 5 +228TH N 0.095 5 0.095 5 0.9815 17 1.01885 +228TH PN 2 +228TH cN NR From |SI(|g+ce)(g.s.)=100. No direct |e+|b{++} decay to g.s. +228TH2cN (|DJ=3 transition) +228TH cL 1995Ba42: measured |g, ce, |g|g, |g(|q,H,T) +228TH cL 1993Ac02: measured |g, ce +228TH cL 1973Ku09: measured |g, ce, |g|g, |g(ce) +228TH cL 1971Am05, 1970SpZW, 1960Ar06: measured ce +228TH cL The decay scheme for {+228}Pa and the band assignments in +228TH2cL {+228}Th are those proposed by 1995Ba42. For a discussion of the +228TH3cL structure of the bands, and of the band parameters, see 1995Ba42 +228TH cL E Rounded off values from adopted levels +228TH cL J From adopted levels +228TH CL BAND(A) GS ROTATIONAL BAND +228TH CL BAND(B) KPI=0- BAND +228TH CL BAND(C) FIRST KPI=0+ BAND +228TH CL BAND(D) SECOND KPI=0+ BAND +228TH CL BAND(F) KPI=1- BANDHEAD +228TH CL BAND(G) FIRST KPI=2+ BAND +228TH CL BAND(H) KPI=2- BAND +228TH CL BAND(I) SECOND K=2+ BAND +228TH CL BAND(J) KPI=3- BANDHEAD +228TH cE J|p({+228}Pa)=3+ +228TH cE Q(|e)=2148 {I5} (1995Au04) +228TH cE IE,TI Deduced from intensity balance in level scheme +228TH cG E,RI From 1995Ba42, unless otherwise noted +228TH cG M Based on |g(|q,H,T) of 1995Ba42 and on |a's and Ice +228TH2cG ratios. |a's deduced from I(ce(K)) of 1973Ku09, 1971Am05 and/or +228TH3cG 1960Ar06 as noted and I|g of 1995Ba42. The I(ce(K)) are normalized to +228TH4cG I|g at 911.204|g (|a(K)(E2)=0.0091). +228TH cG MR From |g(|q,H,T) in 1995Ba42, unless otherwise noted +228TH cG CC Values correspond to E|g given in adopted gammas +228TH cG E(G) |g is seen as a part of a multiplet in 1995Ba42 +228TH cG E(J),RI(J)$From 1973Ku09; |g not seen by 1995Ba42 +228TH cG E(N) Energy calculated from E(level), existence of |g suggested +228TH2cG by {+228}Ac decay +228TH cG E(P) This line seems to be a doublet of lines with E|g|?1431 +228TH2cG and 1433 keV, which are both in coin with the 4+ to 2+ transition +228TH cG E(R) |g's of approximately same energy and intensity are reported +228TH2cG in both {+228}Ac and {+228}Pa decays. On the basis of coin with 911.2|g +228TH3cG it is suggested in {+228}Ac decay that this |g feeds the 2+ 968.97 +228TH4cG level. In {+228}Pa decay, the |g is placed feeding the 3- 968.37 +228TH5cG level. The energy of the |g (E|g=674.65 {I5}) agrees with decay to the +228TH6cG 968.37 level. Possibly the |g is a doublet feeding both the 968.97 and +228TH7cG 968.37 levels with I|g(doublet)=2.64 {I18} +228TH cG RI(I) Derived from coin spectrum +228TH cG RI(M) Intensity of doublet divided by evaluator by comparison +228TH2cG with branching ratios and the intensities of the doublet as +228TH3cG measured in both {+228}Ac and {+228}Pa decays +228TH cG RI(Q) The total intensity of this doublet does not agree with +228TH2cG the total intensity of this |g as seen in {+228}Ac decay, considering +228TH3cG the observed branching ratios from the 1646.0 level in both decays and +228TH4cG from the 1682.8 level in {+228}Pa decay. +228TH cG M(K) From |a data of 1995Ba42 (data not given) +228TH cG M(A),MR(E)$From adopted gammas +228TH G 141.9 1 0.21 3 +228TH G 206.30 5 0.50 7 +228TH G 216.1 1 1.1 3 +228TH cG |g dominant in {+224}Ra +228TH cG M possibly E1, no ce seen (1960Ar06) +228TH G 357.3 1 0.37 4 +228TH G 425.4 1 0.41 5 +228TH G 443.8 1 0.62 7 +228TH G 471.7 2 0.37 9 +228TH G 490.7 1 0.82 4 G +228TH G 555.7 1 1.5 2 +228TH G 621.6 3 1.0 2 G +228TH G 796 1 2.0 AP J +228TH cG |g seen coin only (1973Ku09) +228TH G 801.2 1 0.46 5 +228TH cG M |a(K)exp=0.14 {I4} (1973Ku09); theory: |a(K)(E2)=0.0141, +228THxcG |a(K)(M1)=0.0512 +228TH G 895.9 1 1.41 7 +228TH G 1017.2 2 0.82 12 G +228TH G 1018.9 2 1.3 2 +228TH G 1024.4 2 0.43 6 +228TH G 1058.5 1 0.66 7 +228TH G 1062.4 1 0.57 6 +228TH G 1074.7 3 0.42 5 G +228TH G 1077.5 3 0.36 5 G +228TH G 1103.4 1 0.44 4 +228TH G 1175.6 2 0.24 4 G +228TH G 1281.7 2 0.29 3 +228TH G 1286.3 3 0.39 9 G +228TH cG E this |g is placed from the 1682.8 level by 1995Ba42. +228TH2cG A 1286.27 {I20} |g seen in {+228}Ac decay is placed from the 1344.08 +228TH3cG level. However, the ratio I|g/I|g(1496.15|g)=0.14 {I3} here does not +228TH4cG agree with I|g/I|g(1495.91|g)=0.058 {I15} in {+228}Ac decay. The +228TH5cG calculated energy of the transition from the 1682.8 level is 1286.73 +228TH6cG {I3}. From 1344.08 level the ratio I|g/I|g(947.98|g)=0.47 {I10} in +228TH7cG {+228}Ac decay; in this decay, I(948|g)|?0.2 giving the estimated +228THxcG I|g|?0.1 for that placement. +228TH G 1310.8 1 0.48 5 +228TH G 1358.0 2 0.34 5 +228TH G 1432 1 1.3 LE @ +228TH2 G FLAG=P +228TH G 1480.4 3 0.77 10 G +228TH cG M |a(K)exp=0.009 {I3} (1973Ku09); theory: |a(K)(E2)=0.00385, +228THxcG |a(K)(M1)=0.0104 +228TH G 1483.2 3 0.52 7 G +228TH G 1486.3 3 0.27 7 G +228TH G 1542.8 2 0.28 5 +228TH G 1547.2 3 0.54 11 G +228TH G 1609.6 1 0.92 7 (M1) +228TH cG M |a(K)exp=0.014 {I3} (1973Ku09); theory: |a(K)(M1)=0.0092 +228TH G 1677.9 1 0.65 5 +228TH G 1746.2 2 0.34 4 +228TH G 1752.1 2 0.37 4 G +228TH G 1784.4 2 0.62 5 G +228TH G 1807.2 1 0.60 5 +228TH cG M |a(K)exp=0.006 {I3} (1973Ku09); theory: |a(K)(M1)=0.0068, +228THxcG |a(K)(E2)=0.0028 +228TH G 1865.1 1 0.80 4 +228TH G 1919.4 2 0.26 3 +228TH G 1936.0 2 0.20 3 +228TH G 1958.1 2 0.29 3 +228TH L 0.0 0+ A +228TH L 57.76 2+ A +228TH E 0.065 LE 9.9 LE 8.3 GE 10 LE +228THS E EAV=502.6 22 $CK=0.7750 $CL=0.1625 $CM+=0.05599 +228TH G 57.76 2 5.5 3 E2 156 +228THS G LC= 114$ MC= 31.1$ N+= 11.5 +228TH cG M L1/L3=0.036 {I11}, L2/L3=1.187 {I5}, M1/M2=0.0328 {I27}, +228TH2cG M2/M3=1.137 {I19} (1970SpZW); theory: L1/L3=0.0390, L2/L3=1.19, +228TH3cG M1/M2=0.0382, M2/M3=1.14 +228TH L 186.82 4+ A +228TH E 0.009 5 2.1 12 8.94 25 2.1 12 +228THS E EAV=446.7 22 $CK=0.7758 $CL=0.1636 $CM+=0.05644 +228TH G 129.06 2 45.7 23 E2 3.81 +228THS G KC= 0.269 $LC= 2.58$ MC= 0.707$ N+= 0.263 +228TH cG M L12/L3=1.62 {I12} (1960Ar06); theory: L12/L3=1.70 +228TH L 328.00 1- B +228TH E 0.7 LE 10.4 GE 0.7 LE 1U +228THS E CK=0.7572 $CL=0.1793 $CM+=0.06308 +228TH G 270.25 2 33.9 17 E1 0.0474 +228THS G KC= 0.0379 $LC=0.00721$ MC=0.00173 $N+=0.00061 $ +228TH cG M |a(K)exp=0.032 (1960Ar06); theory: |a(K)=0.0379 +228TH G 328.03 4 30 3 E1 0.0308 G +228THS G KC=0.0247$ LC=0.00458$ MC=0.00110 $N+=0.00039 $ +228TH cG M |a(K)exp=0.019 {I2} (1960Ar06); theory: |a(K)=0.0247 +228TH L 378.18 6+ A +228TH G 191.35 2 4.60 23 E2 0.791 A +228THS G KC=0.174$ LC=0.450$ MC=0.123$ NC+=0.0454 +228TH cG M |a(L3)exp=0.16 (1960Ar06); theory: |a(L3)=0.141 +228TH L 396.08 3- B +228TH E 0.001 1 0.8 5 9.3 3 0.8 5 +228THS E EAV=354.3 23 $CK=0.7757 $CL=0.1655 $CM+=0.05720 +228TH G 68.08 0.04 LE [E2] 70.2 N +228THS G LC=51.0$ MC=14.0$ NC+=5.16 +228TH cG RI limit of I|g deduced from the limit of Ice(L2) (1993Ac02) +228TH G 209.26 2 26.3 13 E1 0.086 +228THS G KC=0.0678$ LC=0.0135$ MC=0.00323$ NC+=0.00114 +228TH cG M K/L12=4.4 (1960Ar06); theory: K/L12(E1)=5.9, K/L12(E2)=0.69, +228TH2cG K/L12(M1)=5.3. |a(K)exp=0.075 (1960Ar06); theory: |a(K)(E1)=0.0678, +228THxcG |a(K)(M1)=1.94 +228TH G 338.32 2 82 4 E1 0.0288 +228THS G KC=0.0231$ LC=0.00426$ MC=0.00102$ NC+=0.00036 +228TH cG M |a(K)exp=0.019 (1960Ar06); theory: |a(K)=0.0231 +228TH L 519.19 5- B +228TH E 0.53 13 10.33 11 0.53 13 1U +228THS E CK=0.7523 $CL=0.1830 $CM+=0.06464 +228TH G 141.00 2 2.08 10 E1 0.220 K +228THS G KC=0.171$ LC=0.0366$ MC=0.0088$ NC+=0.00313 +228TH G 332.37 2 21.0 11 E1 0.0299 K +228THS G KC=0.0240$ LC=0.00444$ MC=0.00106$ NC+=0.00038 +228TH cG M ce(K) not seen (1960Ar06) +228TH L 695.6 7- ? +228TH cL Possibly fed by multiply placed 601.7|g from the 1297.4 (5)- +228TH2cL level. The 317.4|g from this level is not seen by 1995Ba42. +228TH L 831.82 0+ C +228TH E 0.03 LE 10.4 GE 0.03 LE +228THS E CK=0.7702 $CL=0.1705 $CM+=0.05928 +228TH G 503.7 2 0.78 8 (E1) 0.0125 A +228THS G KC=0.0101$ LC=0.00178 +228TH G 774.06 0.26 AP [E2] 0.0167 N +228THS G KC=0.0122$ LC=0.00339 +228TH cG E,RI |g is part of a multiplet in 1995Ba42; I|g from branching +228TH2cG ratio in adopted |g's +228TH L 874.47 2+ C +228TH E 0.52 6 9.15 6 0.52 6 +228THS E CK=0.7693 $CL=0.1712 $CM+=0.05955 +228TH G 478.45 4 3.17 17 E1 0.0139 K +228THS G KC=0.0112$ LC=0.00199$ MC=0.00047$ NC+=0.00017 +228TH G 546.45 2 2.80 14 [E1] 0.0107 +228THS G KC=0.00864$ LC=0.00151 +228TH G 688.14 8 1.21 14 [E2] 0.0212 & +228TH3 G FL=186.82 +228THS G KC=0.0151$ LC=0.00464 +228TH G 816.50 12 0.33 4 [M1,E2] 0.038 23 +228THS G KC=0.030 19$ LC=0.006 3 +228TH G 874.5 2 0.77 12 [E2] 0.0131 G +228THS G KC=0.0098$ LC=0.00249 +228TH L 944.20 1,2+ +228TH cL Possibly J|p=1+, K|p=1+ bandhead. (p,t) suggests possible +228TH2cL unnatural parity level; however, log| {Ift}=9.79 for decay from 3+ +228TH3cL {+228}Pa would rule out J|p=1+ +228TH E 0.108 19 9.78 8 0.108 19 +228THS E CK=0.7676 $CL=0.1724 $CM+=0.06005 +228TH G 616.15 5 1.07 8 +228TH G 944.31 6 0.98 8 +228TH L 968.37 3- F +228TH E 0.39 11 9.20 13 0.39 11 +228THS E CK=0.7670 $CL=0.1728 $CM+=0.06024 +228TH G 449.23 3 2.45 13 [E2] 0.0563 +228THS G KC=0.0335$ LC=0.0168$ MC=0.00439$ NC+=0.00162 +228TH G 572.30 2 5.8 3 [M1,E2] 0.09 7 +228THS G KC=0.07 6$ LC=0.016 8 +228TH G 640.33 5 1.53 10 [E2] 0.0247 +228THS G KC=0.0172$ LC=0.00567 +228TH cG M |a(K)exp=0.16 {I3} (1973Ku09), 0.18 (1960Ar06); theory: +228THxcG |a(K)(E2)=0.0172 +228TH L 968.97 2+ G +228TH E 9.2 19 7.83 10 9.2 19 +228THS E CK=0.7669 $CL=0.1728 $CM+=0.06024 +228TH G 782.08 3 4.70 23 [E2] 0.0163 +228THS G KC=0.0119$ LC=0.00330 +228TH cG M |a(K)exp=0.029 (1960Ar06); theory: |a(K)(E2)=0.0119 +228TH G 911.20 2 247 12 E2+M1 +24 8 0.0121 +228THS G KC=0.0091$ LC=0.00225 +228TH cG M |a(K)(E2)=0.0091 used for normalization of I(ce(K)) of +228TH2cG 1973Ku09, 1960Ar06 to the I|g of 1995Ba42 +228TH G 968.98 2 149 8 E2 0.0107 +228THS G KC=0.00815$ LC=0.00194 +228TH cG M |a(K)exp=0.0074 {I30} (1973Ku09), 0.0082 (1960Ar06); +228TH2cG theory: |a(K)(E1)=0.0030, |a(K)(E2)=0.00815 +228TH L 979.50 2+ D +228TH E 0.37 5 9.22 7 0.37 5 +228THS E CK=0.7667 $CL=0.1730 $CM+=0.06033 +228TH G 583.4 1 3.6 3 [E1] 0.0094 I +228THS G KC=0.00761$ LC=0.00132 +228TH cG RI does not agree with the branching ratio in {+228}Ac decay +228TH G 651.40 5 1.59 10 [E1] +228TH3 G FLAG=G +228THS G CC=0.00758$ KC=0.00617$ LC=0.00106 +228TH cG RI indicated as a doublet in 1995Ba42, however, no other +228TH2cG placement of |g given. +228TH G 792.68 1.4 AP [E2] 0.0159 G +228TH3 G FLAG=N +228THS G KC=0.0116$ LC=0.00319 +228TH cG RI deduced from branching ratio in adopted |g's +228TH G 921.74 0.30 LT [M1,E2] 0.028 17 G +228TH3 G FLAG=N +228THS G KC=0.022 14$ LC=0.0044 22 +228TH cG |g seen in {+228}Ac decay; here |g is part of a multiplet +228TH cG RI deduced from branching ratio in adopted |g's +228TH G 979.4 4 0.5 AP [E2] 0.0105 G +228THS G KC=0.00799$ LC=0.00180 +228TH L 1016.41 2+,3-,4+ +228TH cL Possibly 2+ member of K|p=1+ band. +228TH E 0.34 8 9.22 11 0.34 8 +228THS E CK=0.7656 $CL=0.1738 $CM+=0.06064 +228TH G 620.27 5 1.41 10 G +228TH cG M |a(K)exp=0.16 {I3} (1973Ku09); theory: +228TH2cG |a(K)(E1)=0.00677, |a(K)(E2)=0.0183, |a(K)(M1)=0.100 +228TH G 688.14 8 1.21 14 & +228TH3 G FL=328.00 +228TH G 958.69 11 5.0 6 G +228TH G 1016.41 0.34 6 G +228TH3 G FLAG=N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.7 (1995Ba42) +228TH L 1022.53 (3)+ G +228TH E 1.8 8 8.49 20 1.8 8 +228THS E CK=0.7654 $CL=0.1739 $CM+=0.06069 +228TH G 835.65 2 42.7 22 E2 0.0143 +228THS G KC=0.0106$ LC=0.00279 +228TH cG M |a(K)exp=0.0119 {I17} (1973Ku09), 0.0105 {I15} (1960Ar06); +228TH2cG theory: |a(K)=0.0106 +228TH cG MR |<-9 from |g(|q,H,T) (1995Ba42) +228TH G 964.80 2 122 6 E2+M1 -7.2 10 0.0108 +228THS G KC=0.00821$ LC=0.00196 +228TH cG M |a(K)exp=0.012 {I5} (1973Ku09), 0.011 (1960Ar06); theory: +228THxcG |a(K)=0.00821 +228TH L 1059.93 4- +228TH cL J 3-,4+,5- ruled out by |g(|q,H,T) (1995Ba42) +228TH E 0.15 4 9.54 12 0.15 4 +228THS E CK=0.7643 $CL=0.1747 $CM+=0.06103 +228TH G 540.66 5 0.89 6 [M1,E2] 0.11 8 +228THS G KC=0.08 6$ LC=0.018 9$ +228TH G 663.92 8 1.44 11 (M1+E2) 0.06 4 +228THS G KC=0.05 4$ LC=0.010 6 +228TH cG M |a(K)exp=0.10 {I3} (1973Ku09), 0.075 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0842, |a(K)(E2)=0.0161 +228TH G 873.0 2 1.66 17 [E1] 0.00441 G +228THS G KC=0.00361$ LC=0.00060 +228TH L 1091.02 4+ G +228TH E 0.66 18 8.87 12 0.66 18 +228THS E CK=0.7632 $CL=0.1754 $CM+=0.06133 +228TH G 694.8 2 0.76 10 [E1] 0.00671 G +228THS G KC=0.00547$ LC=0.00093 +228TH G 713.1 3 0.48 11 [E2] 0.0197 I +228THS G KC=0.0141$ LC=0.00421 +228TH G 904.19 3 26.5 13 E2 0.0123 +228THS G KC=0.0092$ LC=0.00229 +228TH cG M |a(K)exp=0.012 {I3} (1973Ku09), 0.0092 (1960Ar06) +228TH2cG theory: |a(K)(E2)=0.00921, |a(K)(M1)=0.0374 +228TH cG MR |>+3.7 from |g(|q,H,T) (1995Ba42) +228TH G 1033.27 7 7.6 4 E2 0.0095 +228TH cG M E2 in 1995Ba42; possibly from |g(|q,H,T), although not +228TH2cG listed in table 3 +228TH L 1122.95 2- H +228TH E 0.7 4 8.82 25 0.7 4 +228THS E CK=0.7621 $CL=0.1762 $CM+=0.06167 +228TH G 100.42 0.5 LT (E1+M2) 0.23 AP 3.2 AP A +228TH3 G FLAG=EN +228THS G LC=2.4$ MC=0.64$ NC+=0.25 +228TH cG RI deduced from I(ce(L1)) +228TH G 153.95 2 5.5 3 E1 0.178 K +228THS G KC=0.139$ LC=0.0292$ MC=0.00703$ NC+=0.00250 +228TH cG M no ce(K) observed (1960Ar06) +228TH G 726.90 10 4.4 6 (E2) 0.0189 A +228THS G KC=0.0136$ LC=0.00400 +228TH G 794.97 2 34.4 17 E2+M1 -4.4 10 0.0182 15 +228THS G KC=0.0136 13$ LC=0.00349 20 +228TH cG M |a(K)exp=0.014 {I3} (1973Ku09), 0.014 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0116, |a(K)(M1)=0.0524 +228TH G 1065.21 7 1.03 7 [E1] 0.00311 +228THS G KC=0.00255$ LC=0.00042 +228TH L 1153.47 2+ I +228TH E 0.51 25 8.93 22 0.51 25 +228THS E CK=0.7610 $CL=0.1770 $CM+=0.06201 +228TH G 174.02 4 0.30 3 M1+E2 1.2 +11-6 2.23 18 A +228TH2 G FLAG=E +228THS G KC=1.5 10$ LC=0.66 4$ MC=0.171 22$ NC+=0.063 5 +228TH cG RI not in agreement with branching ratio in {+228}Ac decay +228TH G 184.61 5 0.21 3 E0+M1 63 8 @ +228TH3 G FL=968.97$ FLAG=M +228TH cG M |a(L12)exp=15 (1960Ar06); |a(L12)=10.2 for 5.4% M1 (10.5 for +228TH2cG 1.4%E2) transition deduced from {+228}Ac |b{+-} decay +228TH cG CC from {+228}Ac |b{+-} decay +228TH G 278.66 2 0.44 6 (M1+E2) 0.7 5 @ +228TH3 G FL=874.47$ FLAG=AM +228THS G KC=0.5 4$ LC=0.13 4$ MC=0.033 7$ NC+=0.0120 25 +228TH cG M 1995Ba42 gives M=(E2), data not given. For the doublet: +228TH2cG |a(K)exp=0.26 (1960Ar06); theory: |a(K)(M1)=0.872, |a(K)(E2)=0.0854 +228TH G 321.71 3 0.67 4 [E2] 0.140 +228THS G KC=0.0643$ LC=0.0550$ MC=0.0147$ NC+=0.00544 +228TH G 966.64 0.5 LE [E2] 0.0108 I +228TH3 G FLAG=N +228TH G 1095.74 14 0.32 6 [M1,E2] 0.018 10 +228TH G 1153.6 3 0.37 8 +228TH L 1168.38 3- H +228TH E 0.9 3 8.66 15 0.9 3 +228THS E CK=0.7604 $CL=0.1774 $CM+=0.06219 +228TH G 77.36 0.44 9 [E1] 0.235 N +228THS G LC=0.177$ MC=0.0431$ NC+=0.0150 +228TH cG RI deduced from branching ratio in adopted |g's. I|g|<0.6 +228TH2cG (1995Ba42) +228TH G 145.82 2 2.57 13 E1 0.203 K +228THS G KC=0.158$ LC=0.0336$ MC=0.00809$ NC+=0.00287 +228TH cG M ce not seen (1960Ar06) +228TH G 199.40 2 4.65 23 E1 0.096 K +228THS G KC=0.0758$ LC=0.0152$ MC=0.00365$ NC+=0.00129 +228TH cG M ce not seen (1960Ar06) +228TH G 649.12 7 0.97 9 [E2] 0.0240 & +228THS G KC=0.0168$ LC=0.00546 +228TH G 772.28 2 25.2 13 E2+M1 -3.4 +8-27 0.021 3 +228THS G KC=0.0157 24$ LC=0.0040 4 +228TH cG M |a(K)exp=0.0157 {I22} (1973Ku09), 0.015 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0122, |a(K)(M1)=0.0565 +228TH cG MR from |a(K)exp and -19|<|d|<-3 from |g(|q,H,T) +228TH2cG (1995Ba42) +228TH G 840.36 4 15.9 8 E2 0.0142 +228THS G KC=0.0105$ LC=0.00275 +228TH cG M |a(K)exp=0.0092 {I24} (1973Ku09), 0.0113 (1960Ar06); theory: +228TH2cG |a(K)=0.0105 +228TH G 981.5 2 0.76 10 [E1] I +228THS G CC=0.00358$ KC=0.00294$ LC=0.00049 +228TH G 1110.55 5 4.7 5 E1 @ +228THS G CC=0.00289$ KC=0.00237$ LC=0.00039 +228TH cG RI I|g(doublet)=7.1 {I4} and I|g(|g from 1297.42 level)=2.4 +228TH2cG {I2} (from coin) +228TH cG M for the 1110.55 doublet: |a(K)exp=0.0013 {I3} (1973Ku09), +228TH2cG 0.0019 (1960Ar06); theory: |a(K)=0.00237 +228TH L 1174.51 (5+) G +228TH G 987.92 10 4.31 22 [M1,E2] 0.024 14 +228THS G KC=0.019 11$ LC=0.0037 18 +228TH L 1175.4 2+ ? +228TH cL Possibly fed by multiply placed 584.7|g from the 1760.2 +228TH2cL level, and the 750.10|g from the 1925.2 level. However, the 988.63|g +228TH3cL and the 1117.63|g from this level were not seen by 1995Ba42. +228TH L 1200.5 (3)+ I +228TH E 0.13 LE 9.5 GE 0.13 LE +228THS E CK=0.7590 $CL=0.1784 $CM+=0.06259 7 +228TH G 178.14 7 0.2 LE E0 1.2 +228TH cG E from ce(L1) (1995Ba42) +228TH cG M no |g seen. No ce(L3) seen, |a(L12)exp>6 (1960Ar06) +228TH cG TI I(ce(L12)) (1960Ar06) +228TH G 231.50 5 0.92 5 [M1,E2] 1.1 8 +228THS G KC=0.8 7$ LC=0.24 4$ MC=0.061 6$ NC+=0.0223 20 +228TH G 1013.54 13 0.38 5 [M1,E2] 0.022 13 & +228THS G KC=0.018 11$ LC=0.0034 17 +228TH G 1142.78 0.10 3 [M1,E2] 0.017 9 +228THS G KC=0.013 8$ LC=0.0025 12 +228TH cG E deduced from E(level) +228TH L 1226.57 (4)- H +228TH E 0.3 LE 9.1 GE 0.3 LE +228THS E CK=0.7578 $CL=0.1792 $CM+=0.06294 7 +228TH G 135.51 2 1.04 6 E1 0.242 K +228THS G KC=0.188$ LC=0.0406$ MC=0.0098$ NC+=0.00348 +228TH G 204.05 2 6.0 3 E1 0.091 K +228THS G KC=0.0719$ LC=0.0143$ MC=0.00344$ NC+=0.00122 +228TH cG M ce not seen (1960Ar06) +228TH G 707.40 3 7.9 4 (E2) 0.0200 +228THS G KC=0.0143 $ LC=0.00431 +228TH cG M,MR |a(K)exp=0.020 {I6} (1973Ku09), thus |d|>2; theory: +228TH2cG |a(K)(E2)=0.0143, |a(K)(M1)=0.0711 +228TH G 830.48 3 29.0 15 E2(+M1) -7.7 9 0.0152 2 +228THS G KC=0.0113 2 $ LC=0.00293 3 +228TH cG M |a(K)exp=0.0140 {I18} (1973Ku09); theory: |a(K)(E2)=0.0107, +228THxcG |a(K)(M1)=0.0468 +228TH G 1039.87 6 2.92 15 +228TH L 1297.42 (5)- H +228TH E 0.16 LE 9.6 GE 0.16 LE 1U +228THS E CK=0.7009 8 $CL=0.2188 5 $CM+=0.08035 23 +228TH G 601.7 3 0.30 5 [E2] 0.0283 & ? +228TH cG Feeds the 695.6 level; see comment with the that level +228TH cG M |a(K)exp|>0.24 {I5} (1973Ku09); theory: |a(K)(E1)=0.00716, +228TH2cG |a(K)(E2)=0.0192, |a(K)(M1)=0.108 +228TH G 778.1 2 2.7 3 [M1,E2] 0.04 3 G +228THS G KC=0.034 22$ LC=0.007 4 +228TH G 901.4 3 2.0 3 [E2] 0.0123 G +228THS G KC=0.0093$ LC=0.00231 +228TH G 1110.55 5 2.4 2 E1 @ +228TH3 G FLAG=I +228TH cG M for the 1110.55 doublet: |a(K)exp=0.0013 {I3} (1973Ku09), +228TH2cG 0.0019 (1960Ar06); theory: |a(K)=0.00237 +228TH L 1344.08 3- J ? +228TH cL Possibly fed by the 399.94|g from the 1743.9 level, the +228TH2cL 415.91|g from the 1760.2 level, and the multiply placed 584.7|g from +228TH3cL the 1928.6 level; total feeding I(|g+ce)=0.97 {I13}. 1995Ba42 report an +228TH4cL indication of the strongest line deexciting this level, the 948|g +228TH5cL with I|g|?0.2; the other |g's deexciting this level were not seen +228TH6cL by 1995Ba42. Therefore, there is no intensity balance at this level. +228TH G 948 0.2 AP +228TH L 1416.1 2+,3- ? +228TH cL Possibly fed by the 477.1|g from the 1893.0 level and the +228TH2cL multiply placed 548.74|g from the 1965.0 level. However, although a +228TH3cL 471.7|g was seen (not placed in level scheme), the other |g's placed +228TH4cL from this level in {+228}Ac decay were not seen by 1995Ba42. +228TH L 1431.98 4+ +228TH cL J J|=3 from |g(|q,H,T) (1995Ba42) +228TH E 31.8 21 6.81 4 31.8 21 +228THS E CK=0.7450 $CL=0.1882 3 $CM+=0.06675 13 +228TH G 257.49 2 1.40 7 (M1) 1.36 K +228THS G KC=1.09$ LC=0.205$ MC=0.0495$ NC+=0.0180 +228TH G 263.62 2 2.17 11 E1 0.0502 K +228THS G KC=0.0400$ LC=0.00766$ MC=0.00184$ NC+=0.00065 +228TH G 278.66 2 1.61 21 [E2] 0.216 @ +228TH3 G FL=1153.47$ FLAG=M +228THS G KC=0.086$ LC=0.095$ MC=0.0257$ NC+=0.0095 +228TH cG M for the doublet: |a(K)exp=0.26 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.872, |a(K)(E2)=0.0854 +228TH G 340.98 2 20.5 10 E2+M1 -5.2 18 0.136 23 +228THS G KC=0.073 20$ LC=0.046 2$ MC=0.0122 5$ NC+=0.00450 17 +228TH cG M from K:L12:L3=140:90:30, |a(K)exp=0.061 (1960Ar06); theory: +228TH2cG K:L12:L3=140:74:18, |a(K)=0.073 {I20} +228TH G 409.45 2 100 5 E2+M1 -5.4 8 0.082 4 +228THS G KC= 0.049 4$ LC=0.0242 5$ MC=0.00631 10$ N+=0.00233 4 +228TH cG M |a(K)exp=0.049, K:L12:L3=54 {I3}:21 {I1}:4.6 {I3} +228TH2cG (1960Ar06); theory: |a(K)=0.049 {I4}, K:L12:L3=54:22:4.3 +228TH G 452.52 6 1.02 8 [E2] 0.0553 +228THS G KC=0.0330$ LC=0.0164$ MC=0.00429$ NC+=0.00158 +228TH G 463.02 2 224 11 E2 0.0522 +228THS G KC= 0.0316 $LC=0.0152 $MC=0.00397 $N+=0.00146 $ +228TH cG M |a(K)exp=0.044 {I5} (1973Ku09), |a(K)exp=0.035, K/L12=2.64 +228TH2cG {I21}, K/L3=11.6 {I8} (1960Ar06); theory: |a(K)=0.0316, K/L12=2.44, +228TH3cG K/L3=13.7; K/L3(M1)=1220 +228TH G 1053.80 0.5 AP I +228TH cG E deduced from E(level) +228TH G 1245.17 6 5.6 3 [M1,E2] 0.013 7 G +228THS G KC=0.011 6$ LC=0.0020 10 +228TH G 1374.26 7 1.0 AP +228TH L 1450.39 4- +228TH cL J J|=3 from |g(|q,H,T) (1995Ba42) +228TH E 8.7 8 7.35 5 8.7 8 +228THS E CK=0.7435 $CL=0.1893 4 $CM+=0.06722 14 +228TH G 18.41 3.7 5 [E1] 6.6 28 3 +228THS G L/T=0.59$ M/T=0.31 +228TH cG E deduced from E(level) +228TH cG TI deduced from coin experiment which gives branching=18% {I2} +228TH2cG for decay from 1450 level to 1432 level (1995Ba42). +228TH cG RI from I(|g+ce) and |a +228TH G 153.02 2 1.11 6 M1+E2 0.60 8 4.8 2 +228THS G KC=3.5 2$ LC=0.97 2$ MC=0.245 6$ NC+=0.090 2 +228TH cG M,MR from ce data (data not given) (1995Ba42) +228TH G 223.80 2 13.3 7 M1+E2 -0.18 5 1.97 3 +228THS G KC= 1.56 3$ LC= 0.302 1$ MC= 0.0729 2$ N+= 0.0266 1$ +228TH cG M |a(K)exp=1.32, K/L1=5.1 {I6}, ce(L3) not seen (1960Ar06); +228TH2cG theory: |a(K)=1.56, K/L1=5.93, K/L3=443 +228TH G 275.85 4 0.82 7 [E1] 0.0453 +228THS G KC=0.0362$ LC=0.00687$ MC=0.00165$ NC+=0.00058 +228TH G 282.01 2 18.6 9 M1+E2 -0.51 12 0.88 7 +228THS G KC=0.69 6$ LC= 0.145 6$ MC=0.0355 11$ N+=0.0129 4 +228TH cG M |a(K)exp=0.62, K/L12=4.1 {I5}, K/L3=58 {I6} (1960Ar06); +228TH2cG theory: |a(K)=0.69 {I6}, K/L12=4.9 {I6}, K/L3=133 {I43} +228TH G 327.45 4 31 3 [E2] 0.132 G +228THS G KC=0.0621$ LC=0.0515$ MC=0.0137$ NC+=0.00508 +228TH cG M |a(K)exp=0.055 (1960Ar06) based on the division of I|g and E1 +228TH2cG mult. in alternate placement. Theory: |a(K)(E2)=0.0619, |a(K)(M1)=0.559 +228TH G 359.36 3 1.30 7 [E1] 0.0252 +228THS G KC=0.0203$ LC=0.00372$ MC=0.00089$ NC+=0.00032 +228TH G 390.45 5 1.11 6 [M1,E2] 0.26 18 +228THS G KC=0.20 16$ LC=0.046 19$ MC=0.011 5$ NC+=0.0042 16 +228TH G 427.90 3 1.24 8 [E1] 0.0174 +228THS G KC=0.0141$ LC=0.00252$ MC=0.00060$ NC+=0.00022 +228TH G 434.01 3 1.73 10 [D,E2] 0.14 13 +228TH G 482.03 5 1.84 13 [M1,E2] 0.15 10 +228THS G KC=0.11 9$ LC=0.025 12$ MC=0.006 3$ NC+=0.0022 10 +228TH G 1054.23 6 3.3 3 [M1,E2] 0.020 11 +228THS G KC=0.016 9$ LC=0.0031 15 +228TH L 1531.47 3+ +228TH E 0.89 16 8.21 8 0.89 16 +228THS E CK=0.7351 $CL=0.1952 5 $CM+=0.06971 18 +228TH G 99.47 6 1.8 3 M1 4.09 +228THS G LC=3.07$ MC=0.741$ NC+=0.273 +228TH cG M |a(L12)exp=2.0, no ce(L3), L/M=2.0, L/N=6 (1960Ar06); theory: +228TH2cG |a(L12)=3.06, |a(L3)=0.0165 +228TH cG MR |<0.4 from ce data (data not given) (1995Ba42) +228TH G 356.96 0.024 5 [E2] 0.103 N +228TH cG Part of a multiplet, I|g not measured. +228TH cG RI from branching ratio in adopted |g's +228TH G 378.01 0.036 7 [M1,E2] 0.28 19 N +228THS G KC=0.21 17$ LC=0.051 20$ MC=0.013 5$ NC+=0.0046 16 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.2 (1995Ba42) +228TH G 440.4 4 0.15 7 M1 0.314 A +228THS G KC=0.252$ LC=0.0471$ MC=0.0113$ NC+=0.00410 +228TH G 509.13 8 1.2 2 E2(+M1) 1.1 GT 0.08 4 A +228TH3 G FLAG=EG +228THS G KC=0.06 3$ LC=0.016 5 +228TH G 562.50 4 1.44 9 E2+M1 +1.6 6 0.07 3 +228THS G KC=0.051 24$ LC=0.013 4 +228TH G 1135.39 0.014 4 N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH G 1344.65 0.013 4 N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH L 1539.2 2,3,4 +228TH cL Possibly fed by the 389.36|g from the 1928.6 level. +228TH2cL However, the |g's shown as deexciting this level in {+228}Ac decay +228TH3cL have either not been reported (416.30|g) or placed elsewhere in +228TH4cL level scheme (1142.85|g). 1995Ba42 suggests that the existence of +228TH5cL this level is doubtful. +228TH L 1580.9 (2-) +228TH E 0.166 21 8.86 6 0.166 21 +228THS E CK=0.7286 8 $CL=0.1998 6 $CM+=0.07167 23 +228TH G 354.2 2 0.29 5 [E2] 0.106 & +228THS G KC=0.0531$ LC=0.0385$ MC=0.0102$ NC+=0.00378 +228TH G 601.7 3 0.30 5 [E1] 0.0088 & +228THS G KC=0.00718$ LC=0.00124 +228TH G 1184.71 9 0.47 4 (M1+E2) 0.015 8 +228THS G KC=0.012 7$ LC=0.0023 11 +228TH cG M |a(K)exp=0.0105 {I20} (1973Ku09); theory: |a(K)(E2)=0.00571, +228TH2cG |a(K)(M1)=0.0185 +228TH G 1252.98 10 0.68 6 (M1+E2) 0.013 7 +228THS G KC=0.011 6$ LC=0.0020 10 +228TH cG M |a(K)exp=0.010 {I3} (1971Am05); theory: |a(K)(E2)=0.00517, +228THxcG |a(K)(M1)=0.0160 +228TH G 1523.4 2 0.60 6 & +228THS G CC=0.00139$ KC=0.00139 +228TH L 1588.3 4- +228TH cL J |g(|q,H,T) excludes 3- (1995Ba42) +228TH E 5.8 5 7.30 5 5.8 5 +228THS E CK=0.7275 8 $CL=0.2005 6 $CM+=0.07200 23 +228TH G 56.86 3 1.06 5 E1 0.533 K +228THS G LC=0.400$ MC=0.098$ NC+=0.0339 +228TH G 137.95 2 6.6 3 M1 7.89 +228THS G KC=6.30$ LC=1.20$ MC=0.289$ NC+=0.106 +228TH cG M |a(L12)exp=1.23, ce(L3) not seen (1960Ar06); theory: M1: +228TH2cG |a(L12)=1.20, |a(L3)=0.00622; E2: |a(L12)=1.22, |a(L3)=0.690 +228TH cG MR -0.2|<|d|<1.4 (|g(|q,H,T)), |<0.3 (|a) +228TH2cG (1995Ba42) +228TH G 156.34 2 1.36 7 E1 0.172 K +228THS G KC=0.134$ LC=0.0281$ MC=0.00676$ NC+=0.00240 +228TH G 420.03 8 0.68 5 [M1,E2] 0.21 15 +228THS G KC=0.16 13$ LC=0.037 17$ MC=0.009 4$ NC+=0.0034 14 +228TH L 1617.8 2+,3,4+ +228TH E 0.13 3 8.90 11 0.13 3 +228THS E CK=0.7227 9 $CL=0.2039 7 $CM+=0.0734 3 +228TH G 649.12 7 0.97 9 & +228TH3 G FL=968.97$ FLAG=G +228TH G 1432 1 0.60 14 @ +228TH2 G FLAG=P +228TH cG RI from I|g/I|g(1560|g) in adopted |g's. I|g(doublet)|<1.8 +228TH cG M for the doublet |a(K)exp=0.0032 {I7} (1973Ku09); +228TH2cG |a(K)(E2)=0.00409, |a(K)(M1)=0.0113 +228TH G 1559.7 2 0.34 5 G +228TH L 1638.3 2+ +228TH E 0.08 LE 9.1 GE 0.08 LE +228THS E CK=0.7190 10 $CL=0.2065 7 $CM+=0.0745 3 +228TH G 469.9 5 0.14 8 [E1] 0.0144 +228THS G KC=0.0116$ LC=0.00206$ MC=0.00049$ NC+=0.00018 +228TH G 515.20 11 0.62 9 [E1] 0.0120 ? +228THS G KC=0.0097$ LC=0.00170 +228TH cG RI disagrees with the branching ratio in {+228}Ac decay +228TH G 1310.26 0.07 3 G +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 1451.45 0.039 9 [E2] N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.05 (1995Ba42) +228TH G 1580.5 3 2.18 14 (M1,E2) G +228TH cG M |a(K)exp=0.0046 {I15} (1973Ku09); theory: |a(K)(M1)=0.0087, +228TH2cG |a(K)(E2)=0.00343 +228TH G 1638.30 7 1.98 10 (E2) +228TH cG M |a(K)exp=0.0026 {I8} (1973Ku09); theory: |a(K)(M1)=0.0087, +228THxcG |a(K)(E2)=0.0034 +228TH L 1643.1 (2-,3-) +228TH E 1.33 13 7.83 5 1.33 13 +228THS E CK=0.7181 10 $CL=0.2071 7 $CM+=0.0748 3 +228TH G 475.1 3 0.7 2 [M1,E2] 0.15 11 +228THS G KC=0.12 9$ LC=0.026 13$ MC=0.006 3$ NC+=0.0023 10 +228TH G 520.17 8 0.92 10 (M1) 0.201 A +228THS G KC=0.161$ LC=0.0301 +228TH G 626.72 0.23 5 G +228TH3 G FLAG=N +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 674.16 2.82 LE [E1] G +228TH3 G FLAG=R +228TH cG E from E(level) +228TH G 674.75 2.82 LE [M1,E2] 0.06 4 G +228TH3 G FLAG=R +228TH cG E from E(level) +228TH G 698.93 0.61 9 [D,E2] 0.05 4 G +228TH3 G FLAG=N +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 1247.07 5 8.2 4 (M1) 0.0201 G +228TH2 G FLAG=A +228THS G KC=0.0162 +228TH cG M for the 1245+1246 doublet: |a(K)exp=0.0088 {I11} (1973Ku09), +228TH2cG 0.021 (1960Ar06); theory: |a(K)(M1)=0.0162, |a(K)(E2)=0.00521 +228TH G 1315.2 2 0.20 5 [M1,E2] 0.012 6 +228THS G KC=0.009 5$ LC=0.0018 8 +228TH L 1646.0 3+ +228TH E 4.1 3 7.34 4 4.1 3 +228THS E CK=0.7175 10 $CL=0.2075 7 $CM+=0.0750 3 +228TH G 114.49 10 0.10 2 [M1,E2] 10 4 +228THS G KC=5.5 52$ LC=3.2 12$ MC=0.9 4$ NC+=0.32 14 +228TH G 419.39 0.24 3 [E1] 0.0182 N +228TH3 G FLAG=G +228THS G KC=0.0147$ LC=0.00264$ MC=0.00063$ NC+=0.000225 +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 492.22 10 0.28 3 [M1,E2] 0.14 10 +228THS G KC=0.11 8$ LC=0.024 12$ MC=0.006 3$ NC+=0.0021 10 +228TH G 523.16 11 1.40 10 [E1] 0.0116 +228TH2 G FL=1122.95 +228THS G KC=0.0094$ LC=0.00165 +228TH G 554.6 3 0.48 11 [M1,E2] 0.10 7 G +228THS G KC=0.08 6$ LC=0.017 9 +228TH G 623.7 2 0.36 6 [M1,E2] 0.08 5 & +228TH2 G FLAG=GQ +228THS G KC=0.06 4$ LC=0.012 6 +228TH G 629.4 2 0.37 6 [D,E2] 0.06 6 +228TH G 666.47 4 0.66 7 [M1,E2] 0.06 4 @ +228TH2 G FLAG=M +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG M for the doublet (I|g=2.47 {I13}): |a(K)exp=0.053 {I16} +228TH2cG (1973Ku09), 0.025 (1960Ar06); theory: |a(K)(M1)=0.0831, +228THxcG |a(K)(E2)=0.0160 +228TH G 676.9 2 0.89 15 [M1,E2] 0.06 4 G +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG M |a(K)exp=0.17 {I5} (1973Ku09), 0.10 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0797, |a(K)(E2)=0.0155 +228TH G 1249.7 2 0.73 10 G +228TH G 1459.2 2 8.6 5 E2 G +228TH2 G FLAG=I +228TH cG M |a(K)exp=0.0045 {I9} (1971Am05), 0.0026 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00395, |a(K)(M1)=0.0108 +228TH G 1588.15 5 37.2 19 E2 +228TH cG M |a(K)exp=0.0025 {I4} (1971Am05), 0.0031 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0034, |a(K)(E1)=0.0013, |a(K)(M1)=0.0086 +228TH cG MR |<-6 from nuclear orientation (1995Ba42) +228TH L 1682.8 2+,3(+),4+ +228TH E 0.2 LE 8.6 GE 0.2 LE +228THS E CK=0.7094 13 $CL=0.2131 9 $CM+=0.0774 4 +228TH G 660.28 0.02 AP [M1,E2] 0.06 4 N +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.2 (1995Ba42) +228TH G 1496.15 6 2.74 14 (E2) +228TH cG M |a(K)exp=0.0029 {I9} (1973Ku09); theory: |a(K)(E2)=0.00378, +228TH2cG |a(K)(M1)=0.0101 +228TH G 1625.0 2 0.70 14 +228TH L 1683.8 (4-) +228TH E 0.300 23 8.39 4 0.300 23 +228THS E CK=0.7092 13 $CL=0.2133 9 $CM+=0.0775 4 +228TH G 457.38 6 0.30 3 [M1,E2] 0.17 12 +228THS G KC=0.13 10$ LC=0.029 14$ MC=0.007 3$ NC+=0.0026 11 +228TH G 623.7 2 0.36 6 [M1,E2] 0.07 5 & +228TH2 G FLAG=GQ +228THS G KC=0.06 4$ LC=0.012 7 +228TH G 1164.58 7 1.32 7 (M1+E2) 0.016 9 +228THS G KC=0.013 7$ LC=0.0024 12 +228TH cG M |a(K)exp=0.012 {I2} (1973Ku09), 0.014 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00588, |a(K)(M1)=0.0193 +228TH G 1287.79 8 1.56 11 (M1+E2) 0.012 7 G +228THS G KC=0.010 5$ LC=0.0019 9 +228TH cG M |a(K)exp=0.0104 {I15} (1973Ku09); theory: |a(K)(M1)=0.0149, +228TH2cG |a(K)(E2)=0.00492 +228TH L 1688.4 2+,3+ +228TH cL J J|p=3-,4+ excluded by |g(|q,H,T) (1995Ba42) +228TH E 0.25 8 8.46 14 0.25 8 +228THS E CK=0.7081 13 $CL=0.2141 9 $CM+=0.0778 4 +228TH G 42.44 0.016 6 [M1] 49 N +228THS G LC=37.1$ MC=8.95 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH G 671.99 0.045 14 N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.2 (1995Ba42) +228TH G 813.94 0.012 3 [M1,E2] 0.038 23 N +228THS G KC=0.030 19$ LC=0.006 3 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH G 1501.5 2 0.74 6 G +228TH G 1630.63 6 2.65 13 (M1,E2) A +228TH L 1724.3 2+ +228TH E 2.80 19 7.32 4 2.80 19 +228THS E CK=0.6982 16 $CL=0.2210 11 $CM+=0.0808 5 +228TH G 497.72 0.1 LE [M2] N ? +228TH G 548.74 11 0.41 5 [M1,E2] 0.10 7 & ? +228THS G KC=0.08 6$ LC=0.017 9 +228TH cG |g feeds the 1175.4 level; see comment with that level +228TH G 570.88 4 3.33 17 (M1) 0.156 G +228TH3 G FLAG=A +228THS G KC=0.125$ LC=0.0234 +228TH G 701.72 4 3.76 21 (M1) 0.091 +228THS G KC=0.0726$ LC=0.0135 +228TH cG M |a(K)exp=0.081 {I14} (1973Ku09), 0.057 (1960Ar06); theory: +228TH2cG |a(K)=0.0726 +228TH G 755.32 2 19.6 10 M1 0.0747 +228THS G KC=0.0599$ LC=0.0111 +228TH cG M |a(K)exp=0.063 {I6} (1973Ku09), 0.057 (1960Ar06); theory: +228THxcG |a(K)(M1)=0.0599 +228TH G 1537.8 2 0.73 10 [E2] +228TH cG M |a(K)exp=0.0080 {I25} (1973Ku09); theory: |a(K)(E2)=0.00360 +228TH G 1666.53 6 3.35 17 M1 +228TH cG M |a(K)exp=0.0081 {I21} (1971Am05); theory: |a(K)(M1)=0.0084 +228TH cG MR 0.00 {I5} from |g(|q,H,T) (1995Ba42) +228TH G 1724.0 2 0.50 5 +228TH L 1743.9 4+ +228TH E 0.88 6 7.77 4 0.88 6 +228THS E CK=0.6917 18 $CL=0.2255 13 $CM+=0.0828 6 +228TH G 399.94 7 0.35 4 [E1] 0.0212 ? +228THS G KC=0.0162$ LC=0.00293$ MC=0.00070$ NC+=0.00025 +228TH cG Possibly feeds the 1344.08 level; see comment with that level +228TH G 590.65 11 0.41 5 [E2] 0.0295 +228THS G KC=0.0200$ LC=0.00716 +228TH cG M |a(K)exp=0.088 {I17} (1973Ku09); theory: |a(K)(E2)=0.0200, +228THxcG |a(K)(M1)=0.115 +228TH G 684.0 3 0.46 10 [E1] +228THS G CC=0.00691$ KC=0.00563$ LC=0.00096 +228TH G 1347.84 0.1 LE N ? +228TH G 1365.72 12 0.40 4 +228TH G 1415.42 10 0.97 6 [E3] ? +228TH G 1557.06 6 4.42 22 (E2+M1) +1.2 2 +228TH cG M |a(K)exp=0.0056 {I11} (1973Ku09), 0.0061 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00352, |a(K)(M1)=0.00908 +228TH G 1686.15 7 2.39 12 (E2) +228TH cG M |a(K)exp=0.0031 {I11} (1973Ku09); theory: |a(K)(E2)=0.0032, +228THxcG |a(K)(M1)=0.0082 +228TH L 1760.2 2+,3(+) +228TH cL J |g(|q,H,T) excludes J|p=4+ (1995Ba42) +228TH E 0.12 4 8.59 15 0.12 4 +228THS E CK=0.6857 20 $CL=0.2297 14 $CM+=0.0846 6 +228TH G 415.91 8 0.49 5 [E1] 0.0185 ? +228THS G KC=0.0150$ LC=0.00269$ MC=0.00064$ NC+=0.00023 +228TH cG Possibly feeds the 1344.08 level; see comment with that level +228TH G 584.7 3 0.22 7 [M1,E2] 0.10 7 & ? +228TH3 G FLAG=G +228THS G KC=0.08 6$ LC=0.017 9 +228TH cG Possibly feeds the 1175.4 level; see comment with that level +228TH G 737.8 2 0.74 13 [M1,E2] 0.05 3 G +228THS G KC=0.04 3$ LC=0.008 4 +228TH G 791.43 9 0.24 9 [M1,E2] 0.04 3 @ +228TH3 G FLAG=M +228THS G KC=0.032 21$ LC=0.007 4 +228TH G 1573.3 3 0.70 7 (E2) +228TH cG M |a(K)exp=0.011 {I4} (1973Ku09); theory: |a(K)(M1)=0.00884, +228TH2cG |a(K)(E2)=0.00346 |a(K)(E1)=0.00132 +228TH G 1702.6 3 1.15 11 G +228TH L 1804.7 4+ +228TH E 1.44 18 7.38 6 1.44 18 +228THS E CK=0.665 3 $CL=0.2439 20 $CM+=0.0908 9 +228TH G 116.26 5 0.16 2 [M1,E2] 9 4 +228THS G KC=5 5$ LC=3.1 11$ MC=0.8 4$ NC+=0.30 13 +228TH G 121.18 7 0.19 3 [E1] 0.316 +228TH2 G FL=1683.8 +228THS G KC=0.244$ LC=0.0542$ MC=0.0131$ NC+=0.00465 +228TH G 121.87 3 0.33 3 [M1,E2] 8 4 +228THS G KC=5 5$ LC=2.5 9$ MC=0.7 3$ NC+=0.25 10 +228TH G 158.74 3 1.25 7 M1+E2 0.55 15 4.4 4 +228THS G KC=3.3 4$ LC=0.85 2$ MC=0.213 9$ NC+=0.079 4 +228TH cG M,MR from ce data (data not given) (1995Ba42) +228TH G 354.2 2 0.29 5 [E1] 0.0260 & +228THS G KC=0.0209$ LC=0.00384$ MC=0.00092$ NC+=0.00033 +228TH G 372.60 3 1.57 8 [M1,E2] 0.29 20 +228THS G KC=0.22 18$ LC=0.053 21$ MC=0.013 5$ NC+=0.0048 7 +228TH G 651.5 2 0.34 5 [E2] 0.0238 I +228THS G KC=0.0166$ LC=0.00540 +228TH G 1426.5 2 0.48 6 [E2] +228TH G 1618.0 1 0.90 6 (M1,E2) G +228TH cG M |a(K)exp=0.012 {I4} (1973Ku09); theory: |a(K)(M1)=0.0091, +228THxcG |a(K)(E2)=0.0035 +228TH L 1817.4 4- +228TH cL J |g(|q,H,T) excludes J|p=3-,5- +228TH E 0.52 4 7.77 5 0.52 4 +228THS E CK=0.658 3 $CL=0.2490 22 $CM+=0.0930 10 +228TH G 367.04 2 2.45 12 M1 0.512 +228THS G KC=0.411$ LC=0.0773$ MC=0.0185$ NC+=0.00674 +228TH cG M,MR -0.2|<|d|<1.4 (|g(|q,H,T)), |<0.3 (|a) +228TH2cG (1995Ba42) +228TH G 1298.3 2 0.45 4 (M1+E2) 0.012 6 +228TH cG M |a(K)exp=0.011 {I4} (1973Ku09); theory: |a(K)(M1)=0.0146, +228TH2cG |a(K)(E2)=0.00486, |a(K)(E1)=0.00182, |a(K)(M2)=0.0146 +228TH cG MR +0.27|<|d|<+5 from |g(|q,H,T) (1995Ba42) +228TH G 1421.1 2 1.40 7 E2+M1 +2.0 5 +228TH cG M |a(K)exp=0.0055 {I14} (1973Ku09); theory: |a(K)(E2)=0.00414 +228TH L 1893.0 3+ +228TH E 3.77 23 6.60 5 3.77 23 +228THS E CK=0.591 7 $CL=0.295 5 $CM+=0.1138 21 +228TH G 477.1 3 0.7 2 G ? +228TH cG Possibly feeds the 1416.1 level; see comment with that level +228TH G 666.47 4 1.81 15 [E1] @ +228TH2 G FLAG=M +228TH cG M for the doublet (I|g=2.47 {I13}): |a(K)exp=0.053 {I16} +228TH2cG (1973Ku09), 0.025 (1960Ar06); theory: |a(K)(E1)=0.00591, +228THxcG |a(K)(E2)=0.0160 +228TH G 692.47 7 2.01 15(M1+E2+E0) 0.24 3 +228TH cG M |a(K)exp=0.17 {I3} (1973Ku09), 0.13 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0148, |a(K)(M1)=0.0751. |a(K)exp may indicate E0 presence. +228TH cG CC from |a(K)exp +228TH G 724.42 11 0.76 9 [E1] & +228TH G 739.2 2 0.57 9 [M1,E2] 0.0790 I +228TH cG M |a(K)exp=0.18 {I5} (1973Ku09); theory: |a(K)(M1)=0.0637. +228TH2cG ce(K) may include the ce(K)(737.8|g) +228TH G 770.2 2 2.28 15 [E1] G +228TH G 870.45 2 15.9 8 M1 0.0515 +228THS G KC=0.0414$ LC=0.00762 +228TH cG M |a(K)exp=0.038 {I5} (1973Ku09), 0.046 (1960Ar06): theory: +228TH2cG |a(K)(M1)=0.0414 +228TH cG MR -0.1 {I1} from |g(|q,H,T) (1995Ba42) +228TH G 924.3 2 2.7 2 [M1,E2] 0.028 17 G +228THS G KC=0.022 14$ LC=0.0043 22 +228TH cG M |a(K)exp=0.09 {I3} (1971Am05), 0.083 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0354, |a(K)(E2)=0.00886 +228TH G 1706.16 7 2.84 14 M1+E2 +0.42 4 +228TH cG M |a(K)exp=0.0071 {I16} (1973Ku09), 0.0063 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0079, |a(K)(E2)=0.0031 +228TH G 1835.26 5 9.8 5 E2+M1 +2.9 3 +228TH cG M |a(K)exp=0.0036 {I6} (1971Am05), 0.0055 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00275, |a(K)(M1)=0.0065 +228TH L 1900.0 2+ +228TH E 0.56 4 7.39 5 0.56 4 +228THS E CK=0.581 8 $CL=0.302 5 $CM+=0.1167 23 +228TH G 877.35 7 0.97 8 [M1,E2] 0.032 19 +228THS G KC=0.025 16$ LC=0.005 3 +228TH G 883.6 3 0.15 4 G +228TH G 920.8 3 0.38 10 [M1,E2] 0.028 17 G +228THS G KC=0.022 14$ LC=0.0044 22 +228TH cG |g not reported in {+228}Ac decay +228TH G 931.02 7 0.99 8 [M1,E2] 0.027 17 +228TH G 1503.7 2 0.72 6 [E1] G +228TH cG M |a(K)exp=0.0050 {I23} (1973Ku09); theory: |a(K)(E1)=0.00142, +228TH2cG |a(K)(E2)=0.00374 +228TH cG |g not reported in {+228}Ac decay +228TH G 1713.16 0.1 LE ? +228TH G 1842.15 8 2.29 12 M1+E2 -0.86 14 +228TH cG M |a(K)exp=0.0059 {I20} (1971Am05); theory: |a(K)(M1)=0.0064, +228THxcG |a(K)(E2)=0.0027 +228TH G 1900.3 3 0.34 5 +228TH L 1901.9 3-,4 +228TH E 0.177 19 7.88 6 0.177 19 +228THS E CK=0.579 8 $CL=0.304 6 $CM+=0.1176 24 +228TH G 1383.2 2 0.55 5 +228TH G 1505.9 2 0.55 5 G +228TH G 1523.4 2 0.60 6 & +228TH G 1715.06 10 0.50 3 +228TH L 1925.2 3+,4+ +228TH cL J |g(|q,H,T) excludes J|p=2+,3- +228TH E 1.52 11 6.81 5 1.52 11 +228THS E CK=0.539 11 $CL=0.331 7 $CM+=0.130 4 +228TH G 724.42 11 0.76 9 [M1,E2] 0.05 4 & +228THS G KC=0.04 3$ LC=0.008 5 +228TH G 750.10 10 0.67 8 [M1,E2] 0.05 3 ? +228TH cG Possibly feeds the 1175.4 level; see comment with that level +228TH G 865.15 13 0.50 7 +228TH G 956.8 2 2.5 5 G +228TH G 1529.02 6 2.61 13 [E1] +228TH cG M |a(K)exp=0.0034 {I11} (1973Ku09); theory: |a(K)(E1)=0.00138, +228TH2cG |a(K)(E2)=0.00364, |a(K)(M1)=0.0095; +228TH G 1738.48 5 9.6 5 M1+E2 +228TH cG M |a(K)exp=0.0061 {I8} (1971Am05), 0.0057 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0074, |a(K)(E2)=0.0030 +228TH L 1928.6 3+ +228TH cL J |g(|q,H,T) excludes J|p=2+,3-,4+ +228TH E 0.187 22 7.70 7 0.187 22 +228THS E CK=0.532 11 $CL=0.336 8 $CM+=0.132 4 +228TH G 168.42 9 0.09 2 [M1,E2] 2.9 16 +228THS G KC=1.9 17$ LC=0.73 6$ MC=0.19 3$ NC+=0.070 10 +228TH G 389.36 0.31 5 [M1,E2] 0.26 18 N ? +228TH cG RI from branching ratio in adopted |g's; I|g|<0.4 (1995Ba42) +228TH cG Possibility feeds the 1539.2 level; see comment with that +228TH2cG level +228TH G 584.7 3 0.22 7 [E1] & ? +228TH cG |g feeds the 1344 level; see comment with 1344 level +228TH3 G FLAG=G +228TH G 1741.6 2 0.42 8 G +228TH G 1870.80 9 0.73 4 (M1+E2) +228TH cG M |a(K)exp=0.0028 {I14} (1973Ku09); theory: |a(K)(E2)=0.0026, +228TH2cG |a(K)(M1)=0.0071 |a(K)(E1)=0.00100, |a(K)(M2)=0.0138 +228TH cG MR -0.32 {I9} or -1.7 {I3} from |g(|q,H,T) (1995Ba42) +228TH L 1944.9 3+ +228TH E 7.8 5 5.98 5 7.8 5 +228THS E CK=0.494 14 $CL=0.362 10 $CM+=0.144 5 +228TH G 184.61 5 0.41 5 (M1) 3.45 @ +228TH3 G FLAG=M +228THS G KC=2.76$ LC=0.525$ MC=0.125$ NC+=0.0461 +228TH cG M from ce data (data not given) (1995Ba42) +228TH G 220.61 2 1.24 6 (M1) 2.10 +228THS G KC=1.68$ LC=0.317$ MC=0.0763$ NC+=0.0278 +228TH cG M from ce data (data not given) (1995Ba42) +228TH G 299.10 10 0.43 5 M1 0.90 +228THS G KC=0.719$ LC=0.135$ MC=0.0326$ NC+=0.0118 +228TH cG M from ce data (data not given) (1995Ba42) +228TH G 306.61 2 2.00 10 M1 0.84 +228THS G KC=0.672$ LC=0.126$ MC=0.0304$ NC+=0.0111 +228TH cG M,MR from ce data, |d|<0.3 (data not given) (1995Ba42) +228TH G 512.79 11 1.33 13 [M1,E2] 0.12 9 G +228THS G KC=0.10 7$ LC=0.021 11 +228TH G 718.31 2 6.4 3 (E1) +228THS G CC=0.00631$ KC=0.00514$ LC=0.00087 +228TH cG M |a(K)exp=0.0074 {I36} (1973Ku09); theory: |a(K)(E1)=0.00514, +228TH2cG |a(K)(E2)=0.0140 +228TH G 776.52 3 7.9 4 [E1] +228THS G CC=0.00546$ KC=0.00446$ LC=0.00075 +228TH cG M |a(K)exp=0.009 {I3} (1973Ku09); theory: |a(K)(E1)=0.00446, +228THxcG |a(K)(E2)=0.0121 +228TH G 791.43 9 3.6 4 (M1) 0.0661 @ +228TH2 G FLAG=M +228THS G KC=0.0530$ LC=0.0098 +228TH cG M |a(K)exp(doublet)=0.054 {I11} (1973Ku09), I|g(doublet)=3.8; +228TH2cG theory: |a(K)(M1)=0.0530 +228TH G 853.97 8 0.82 7 [M1,E2] 0.034 21 +228THS G KC=0.027 17$ LC=0.005 3 +228TH cG M |a(K)exp=0.055 {I25} (1973Ku09,1960Ar06); theory: +228THxcG |a(K)(M1)=0.0436 +228TH G 922.5 2 2.25 12 [M1,E2] 0.028 16 G +228THS G KC=0.022 13$ LC=0.0044 22 +228TH G 928.4 2 0.89 8 G +228TH G 976.00 5 13.4 7 M1 0.0381 +228THS G KC=0.0306$ LC=0.00563 +228TH cG M |a(K)exp=0.025 {I6} (1973Ku09), 0.034 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0306, |a(K)(E2)=0.00804 +228TH cG MR 0.00 {I5} from |g(|q,H,T) (1995Ba42) +228TH G 1000.70 0.5 LE N +228TH G 1070.40 7 1.20 8 +228TH G 1549.3 2 1.2 2 G +228TH G 1758.11 5 9.0 5 E2+M1 -9 1 +228TH cG M |a(K)exp=0.0038 {I8} (1971Am05), 0.0015 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0029, |a(K)(M1)=0.0072 +228TH G 1887.13 5 24.0 12 E2+M1 -9.1 9 +228TH cG M |a(K)exp=0.0028 {I5} (1971Am05), 0.0023 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0026, |a(K)(M1)=0.0059 +228TH L 1965.0 2+,3,4+ +228TH E 0.139 17 7.57 7 0.139 17 +228THS E CK=0.430 20 $CL=0.405 14 $CM+=0.165 7 +228TH G 548.74 11 0.41 5 [M1,E2] 0.10 7 & ? +228THS G KC=0.08 6$ LC=0.017 9 +228TH cG Possibly feeds the 1416.1 level; see comment with that level +228TH G 1778.0 6 0.06 2 +228TH G 1907.13 11 0.99 5 +228TH G 1965.22 12 0.43 4 & +228TH L 1974.2 3-,4+ +228TH E 0.281 21 7.19 6 0.281 21 +228THS E CK=0.392 23 $CL=0.431 16 $CM+=0.177 8 +228TH G 1455.0 2 1.16 7 G +228TH G 1578.2 2 1.33 13 G +228TH G 1787.2 2 0.37 4 G +228TH G 1916.6 3 0.15 3 G +228TH L 1982.0 2+,3,4+ +228TH E 0.145 14 7.41 7 0.145 14 +228THS E CK=0.36 3 $CL=0.456 18 $CM+=0.189 9 +228TH G 1013.54 13 0.38 5 & +228TH G 1795.15 6 1.19 7 +228TH G 1924.2 2 0.18 2 +228TH L 2010.1 2+,3,4(+) +228TH E 0.30 4 6.81 9 0.30 4 +228THS E CK=0.17 4 $CL=0.58 3 $CM+=0.250 14 +228TH G 371.83 0.84 23 G +228TH3 G FLAG=N +228TH cG RI from branching ratio in adopted |g's +228TH G 887.16 0.35 5 N +228TH cG RI from branching ration in adopted |g's; I|g|<0.4 (1995Ba42) +228TH G 919.4 3 0.6 2 I +228TH G 1041.14 0.3 LE N +228TH G 1823.19 10 0.47 3 +228TH G 1952.39 10 0.76 5 +228TH L 2016.8 (2-,3-,4-) +228TH E 0.46 4 6.54 8 0.46 4 +228THS E CK=0.12 4 $CL=0.61 3 $CM+=0.268 15 +228TH G 1620.67 10 4.9 3 (M1+E2) +228TH cG M |a(K)exp=0.0060 {I15} (1973Ku09); theory: |a(K)(M1)=0.0090, +228TH2cG |a(K)(E2)=0.0034 +228TH L 2022.8 +228TH E 0.059 22 7.37 18 0.059 22 +228THS E CK=0.07 4 $CL=0.641 25 $CM+=0.285 15 +228TH G 384.53 0.1 LE [M1,E2] 0.27 18 N ? +228TH G 1148.20 14 0.30 4 +228TH G 1190.98 0.1 LE N +228TH G 1965.22 12 0.43 4 & + +228TH 232U A DECAY 1977KU15,1986LOZT 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +232U P 0 0+ 68.9 Y 4 5413.63 9 +228TH N 0.00259 0.00259 1 +228TH PN 2 +228TH cN NR From absolute I|g measurements of 1984Ge07, 1986LoZT +228TH cL E,J From adopted levels +228TH cA Q(|a)({+232}U)=5413.63 {I9} corrected value from G. Audi, +228THxcA Aug. 1996. +228TH cA E 1972Go33, 1971So15, 1966Ba49, 1963Le17. Calculated values +228TH2cA are from Q(|a) and E(level) in {+228}Th +228TH cA IA Calculated from I(|g+ce) balance in level scheme, unless +228TH2cA otherwise noted. The values differ +228TH3cA substantially from the direct I|a measurements of 1966Ba49. +228TH cA HF HF(5320.12|a)=1.00 yields r{-0}({+228}Th)=1.5289 {I3} +228TH cA E(B) From 1991Ry01. Recommended E|a=5262.36 {I9} in 1991Ry01 is a +228TH2cA misprint, see originally published E|a and adjustment. +228TH cA IA(F) From I(A{-0})/I|a(58)=0.463 {I5} (weighted average from +228TH2cA 1955As28, 1965Be15, 1966Ba49, 1971So15) and I(A{-0})+I(a(58)=99.70 {I2} +228TH cG E,RI$From 1977Ku15, except as noted. (I|g of 1977Ku15 are normalized +228TH2cG to 26.33 for the 129|g). Others: 1963Le17, 1965Be15, 1966Ah02, +228THxcG 1984Ge07. +228TH cG M From adopted gammas, unless otherwise noted +228TH cG RI(A) From 1986LoZT, 1984Ge07 +228TH cG M(D) 1977Ku15 quote A. Plochocki, thesis (1974) as establishing +228TH2cG the multipolarity E0+E2; however, no published information is +228TH3cG available on this. 1977Ku15 give I|g=I(|g+ce) in their level scheme, +228TH4cG suggesting that the E0 admixture may not be significant for intensity +228TH5cG calculations. +228TH L 0.0 0+ +228TH A 5320.12 14 68.15 23 1.00 B +228TH2 A FLAG=F +228TH L 57.762 5 2+ 0.406 NS 7 +228TH cL T weighted average of 0.409 ns {I10} (1970To08) and 0.402 ns +228TH2cL {I10} (1965Ne03); other: 0.40 ns {I3} (1960Be25) +228TH A 5263.36 9 31.55 230.992 12 B +228TH2 A FLAG=F +228TH G 57.78 5 77.2 7 E2 156 A +228THS G LC= 114 $MC= 31.1 $NC+= 11.4 $ +228TH cG CC 158 {I7} (1968Du06) +228TH cG M L1:L2:L3=3.55 {I25}:115 {I4}:100 (1966Ha01); +228TH2cG M1:M2:M3=5.3 {I13}:107 {I8}:100, M3/L3=0.32 {I3} (1966Ra15); theory: +228TH2cG L1:L2:L3=3.90:119:100, M1:M2:M3=4.35:114:100, M3/L3=0.276 +228TH L 186.828 5 4+ 0.164 NS 4 +228TH cL T weighted average of 0.169 ns {I7} (1970To08), 0.161 ns {I5} +228TH2cL (1965Ne03) +228TH A 5139.0 20 0.30 2 17.5 12 +228TH cA IA weighted average from 1955As28, 1965Be15, 1966Ba49, 1971So15. +228TH G 129.08 5 26.33 15 E2 3.81 A +228THS G KC= 0.269 $LC= 2.57 $MC= 0.706 $NC+= 0.263 $ +228TH L 328.003 5 1- +228TH A 4997.94 CA 0.00616 8 111 2 +228TH cA IA other: 0.0029 {I2} (1966Ba49) +228TH G 270.2 2 1.220 19 E1 0.0474 A +228THS G KC= 0.0379 $LC=0.00722 $MC=0.00173 $NC+=0.00061 $ +228TH G 327.9 2 1.093 23 E1 0.0308 A +228THS G KC=0.02472 $LC=0.00458 $MC=0.00110 $NC+=0.00039 $ +228TH L 378.178 11 6+ +228TH A 4948.63 CA 5.1E-5 5 6.4E+3 6 +228TH cA IA$other: 0.00017 {I3} (1966Ba49) +228TH G 191.0 2 0.012 1 E2 0.791 +228THS G KC= 0.1741 $LC= 0.453 $MC= 0.1237 $NC+= 0.0457 $ +228TH L 396.085 5 3- +228TH A 4931.04 CA 4.8E-5 4 5.2E+3 5 +228TH cA IA$other: 0.00021 {I3} (1966Ba49) +228TH G 209.5 5 0.0041 10 E1 0.0856 +228THS G KC= 0.0676 $LC=0.01341 $MC=0.00323 $NC+=0.00114 $ +228TH G 338.1 2 0.0143 5 E1 0.0288 +228THS G KC=0.02314 $LC=0.00427 $MC=0.00102 $NC+=0.00036 $ +228TH L 519.199 6 5- +228TH A 4810.04 CA 5.6E-5 3 680 40 +228TH G 141.0 5 0.0012 5 (E1) 0.220 +228THS G KC= 0.1711 $LC= 0.0367 $MC=0.00883 $NC+=0.00313 $ +228TH G 332.3 3 0.019 1 (E1) 0.0299 +228THS G KC=0.02402 $LC=0.00444 $MC=0.00106 $NC+=0.00038 $ +228TH L 831.832 11 0+ +228TH A 4502.80 CA 2.1E-5 2 10.6 11 +228TH cA IA$other: 0.000024 {I7} (1963Le17) +228TH G 503.6 3 0.0056 3 (E1) 0.0125 +228THS G KC=0.01015 $LC=0.00179 $ +228TH G 773.4 5 0.0018 3 [E2] 0.0167 +228THS G KC=0.01218 $LC=0.00340 $ +228TH G 831 0.0003 LT E0 8E-4 4 +228TH cG M,TI from 1963Le17 +228TH L 874.48 3 2+ +228TH A 4460.94 CA 3.9E-6 9 27 8 +228TH cA IA$includes additional weak |g's at 688.1, 816.7 and 874.4 keV, +228TH2cA from adopted levels. I|a=3.2|*10{+-6} {I9} without inclusion of these +228TH3cA additional |g's +228TH G 478 1 0.00055 21 [E1] 0.0139 +228THS G KC=0.01127 $LC=0.00199 $MC=0.00047 $NC+=0.00017 $ +228TH G 547 1 0.00039 24 [E1] 0.0106 +228THS G KC=0.00863 $LC=0.00150 $ +228TH G 817 1 0.0003 AP [M1+E2] 0.038 23 D + +228TH 226RA(A,2NG) 1993AC02,1986SC18 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH PN 6 +228TH c 1993Ac02: E|a=28 MeV; measured E|g, I|g in coin with +228TH2c ce(L2)(129.1|g) +228TH c 1986Sc18: E|a=33, 42, 55 MeV; measured ce, (ce)(ce), (ce)|g +228TH c The level scheme is that proposed by 1986Sc18 and 1993Ac02, +228TH2c confirming levels known from {+228}Ac |b{+-} decay, {+228}Pa |e decay +228TH3c and {+230}Th(|a,|a'2n), and adding the levels with J>14. The 1- and 3- +228TH3c levels of the K|p=0- band are not seen in this experiment. +228TH cL E From least squares fit to E|g, unless otherwise noted +228TH cL J From adopted levels, unless otherwise noted +228TH cL E(A) Rounded-off values from adopted levels +228TH cL J(B) From this data set, based on the level decay mode, band +228TH2cL structure (1993Ac02) +228TH CL BAND(D) GS ROTATIONAL BAND +228TH CL BAND(E) KPI=0- BAND +228TH cG E From 1993Ac02 +228TH cG RI Relative I|g from the level (1993Ac02) +228TH L 0.0 0+ D +228TH L 57.76 2+ A +228TH2 L FLAG=D +228TH L 186.83 4+ A +228TH2 L FLAG=D +228TH L 378.18 6+ A +228TH2 L FLAG=D +228TH G 191.4 3 +228TH L 519.20 5- A +228TH2 L FLAG=E +228TH G 332.4 3 +228TH L 622.5 3 8+ D +228TH G 244.4 3 +228TH L 695.6 3 7- E +228TH G 317.4 3 +228TH L 911.8 4 10+ D +228TH G 289.4 3 +228TH L 920.8 3 9- E +228TH G 225.1 3 1.00 +228TH G 298.3 3 4.07 24 +228TH L 1189.8 4 11- E +228TH G 268.9 3 1.00 +228TH G 278.0 3 1.50 10 +228TH L 1239.4 4 12+ D +228TH G 327.5 3 +228TH L 1497.1 5 13- E +228TH G 257.7 3 0.52 4 +228TH G 307.3 3 1.00 +228TH L 1599.5 5 14+ B +228TH2 L FLAG=D +228TH G 360.1 3 +228TH L 1838.3 5 15- B +228TH2 L FLAG=E +228TH G 341.2 3 +228TH L 1988.1 6 16+ B +228TH2 L FLAG=D +228TH G 388.6 3 +228TH L 2209.7 6 17- B +228TH2 L FLAG=E +228TH G 371.4 3 +228TH L 2407.9 7 18+ B +228TH2 L FLAG=D +228TH G 419.8 3 +228THF G FL=1988.1 + +228TH 230TH(P,T) 1972MA15 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH c 1972Ma15: E=17 MeV +228TH c 1995Ba42: authors quote H. Baltzer, et al., to be published +228TH cL E From 1972Ma15, unless otherwise noted +228TH cL E(A),L(B)$From 1995Ba42 +228TH L 0 0 +228TH L 57 5 +228TH L 185 5 +228TH L 830 5 0 +228TH L 874 5 +228TH L 938 0 A +228TH3 L FLAG=B +228TH L 944 A +228TH cL Possibly unnatural parity level (1995Ba42) +228TH L 977 5 +228TH cL Natural parity level (1995Ba42) +228TH L 1016 A +228TH cL Natural parity level (1995Ba42) +228TH L 1160 5 A +228TH cL Possibly unnatural parity level (1995Ba42) + +228TH 230TH(A,A'2NG) 1984HA21 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH c E=56 MeV. Measured ce and ce|g +228TH cL J From 1984Ha21 based on coin and band structure +228TH cL E From a least-squares fit to the E|g data. +228TH cL The authors do not see transitions from the known 1- and +228TH2cL 3- members of the K|p=0- band. The level scheme is based on +228TH3cL coincidence data, energy fits, and intensity systematics +228TH cG Authors give only E|g. Multipolarity of 129, 191 and 244 |g's +228TH2cG in the ground-state band are determined as E2 from (L1+L2)/L3 ce data +228TH L 0 0+ +228TH L 57.8 2+ +228TH G 57.8 S +228TH cG E not seen. E|g is rounded-off value from adopted |g's +228TH L 187 4+ +228TH G 129.0 2 E2 +228TH L 378 6+ +228TH G 191.0 1 E2 +228TH L 519 5- +228TH G 332.0 4 +228TH L 622 8+ +228TH G 244.3 1 E2 +228TH3 G FL=378 +228TH L 695 7- +228TH G 317.2 2 +228TH L 911 10+ +228TH G 289.3 2 +228TH L 921 9- +228TH G 298.7 2 +228TH L 1190 11- +228TH G 268.9 5 +228TH G 278.4 3 +228TH L 1239 12+ +228TH G 327.2 4 +228TH L 1497 (13-) +228TH cL E shown as tentative by authors, but |g's to 11- and 12+ +228TH2cL are consistent with adopted data from (|a,2n|g) +228TH G 257.3 5 +228TH G 306.6 5 +228TH L 1596 (14+) ? +228TH cL E the adopted 14+ member of this band is at 1599.5-keV +228TH2cL from (|a,2n|g) with E|g=360.1 to 12+ +228TH G 357.2 5 + diff --git a/tests/ensdf_processing/bricc/ref_bricc_44.out b/tests/ensdf_processing/bricc/ref_bricc_44.out new file mode 100644 index 0000000000..e68a2fada3 --- /dev/null +++ b/tests/ensdf_processing/bricc/ref_bricc_44.out @@ -0,0 +1 @@ + BrIcc v2.3b (16-Dec-2014) calculates conversion coefficients\n (for electron conversion and pair production)\n and E0 electronic factors\n using cubic spline interpolation\n--------------------------------------------------------------------------------------------------------------------\nZ= 70 Ytterbium Transition energy: 279.717 keV BrIcc v2.3b (16-Dec-2014) \n Conversion Coefficient Data Table: BrIccFO\nShell E_e [keV] E1 M1 E2 M2 E3 M3 E4 M4 E5 M5\n--------------------------------------------------------------------------------------------------------------------\nTot 2.367E-02 1.901E-01 9.151E-02 8.110E-01 4.258E-01 3.015E+00 2.267E+00 1.179E+01 1.251E+01 4.967E+01\nK 218.38 1.989E-02 1.593E-01 6.401E-02 6.437E-01 1.910E-01 2.138E+00 5.694E-01 6.979E+00 1.741E+00 2.279E+01\nL-tot 2.946E-03 2.393E-02 2.115E-02 1.292E-01 1.787E-01 6.694E-01 1.279E+00 3.622E+00 8.019E+00 1.995E+01\nM-tot 6.561E-04 5.351E-03 5.038E-03 2.999E-02 4.463E-02 1.637E-01 3.323E-01 9.367E-01 2.182E+00 5.468E+00\nN-tot 1.526E-04 1.257E-03 1.161E-03 7.067E-03 1.028E-02 3.862E-02 7.675E-02 2.212E-01 5.061E-01 1.294E+00\nO-tot 2.109E-05 1.799E-04 1.447E-04 9.933E-04 1.223E-03 5.205E-03 8.903E-03 2.841E-02 5.697E-02 1.584E-01\nP-tot 1.001E-06 9.639E-06 3.226E-06 4.933E-05 1.179E-05 2.169E-04 5.326E-05 9.480E-04 2.740E-04 4.167E-03\nTranEner|ChemSymb|Z+Integer|SUBShell|DATAtable|? for help|EXIT [279.717] > --------------------------------------------------------------------------------------------------------------------\nZ= 70 Ytterbium Transition energy: 44 keV BrIcc v2.3b (16-Dec-2014) \n Conversion Coefficient Data Table: BrIccFO\nShell E_e [keV] E1 M1 E2 M2 E3 M3 E4 M4 E5 M5\n--------------------------------------------------------------------------------------------------------------------\nTot 5.831E-01 6.097E+00 1.117E+02 3.089E+02 7.319E+03 1.671E+04 2.562E+05 6.537E+05 7.526E+06 2.080E+07\nL-tot 4.543E-01 4.747E+00 8.536E+01 2.343E+02 5.410E+03 1.222E+04 1.708E+05 4.465E+05 4.106E+06 1.273E+07\nM-tot 1.026E-01 1.064E+00 2.102E+01 5.868E+01 1.519E+03 3.547E+03 6.787E+04 1.634E+05 2.720E+06 6.339E+06\nN-tot 2.324E-02 2.496E-01 4.775E+00 1.390E+01 3.516E+02 8.424E+02 1.607E+04 3.965E+04 6.603E+05 1.585E+06\nO-tot 2.820E-03 3.561E-02 5.371E-01 1.869E+00 3.794E+01 9.961E+01 1.391E+03 4.191E+03 3.953E+04 1.465E+05\nP-tot 8.814E-05 1.890E-03 2.886E-04 7.888E-02 2.448E-02 1.895E+00 1.007E+00 4.083E+01 2.793E+01 8.592E+02\nTranEner|ChemSymb|Z+Integer|SUBShell|DATAtable|? for help|EXIT [44] > ', 'input_line': '44', 'output_file_directory': '/home/josh/anaconda/lib/python2.7/site-packages/pyne-0.5.0_rc1-py2.7.egg/pyne/ diff --git a/tests/ensdf_processing/radlst/ref_ensdf.rpt b/tests/ensdf_processing/radlst/ref_ensdf.rpt new file mode 100644 index 0000000000..f4abbfca02 --- /dev/null +++ b/tests/ensdf_processing/radlst/ref_ensdf.rpt @@ -0,0 +1,431 @@ +0 + + + + + 205HG B- DECAY (5.2 M 1) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + B- 1 MAX 104. 8 + AVG 27.1 22 0.0049 25 0 + B- 2 MAX 198. 8 + AVG 53.4 24 0.006 3 0 + B- 3 MAX 319. 8 + AVG 90.0 25 0.007 4 0 + B- 4 MAX 397. 8 + AVG 115. 3 0.0030 16 0 + B- 5 MAX 919. 8 + AVG 299. 3 0.016 7 0.0001 + B- 6 MAX 1334. 8 + AVG 460. 4 3.1 13 0.0304 + B- 7 MAX 1538. 8 + AVG 542. 4 96.0 20 1.11 + TOTAL B- + AVG 539. 4 99.1 24 1.14 + + G 1 203.74 3 2.2 10 0.0095 + G 2 415.6 3 0.013 7 0.0001 + G 3 618.6 7 0.0020 10 0 + G 4 720.8 8 0.0011 6 0 + G 5 937.2 6 0.0020 11 0 + G 7 1136.8 6 0.0046 24 0.0001 + G 9 1218.7 4 0.006 3 0.0002 + G 12 1433.9 5 0.0044 23 0.0001 +0 + + + + + 205HG B- DECAY (5.2 M 1) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + B- 1 MAX 104. 8 + AVG 27.1 22 0.0049 25 0 + B- 2 MAX 198. 8 + AVG 53.4 24 0.006 3 0 + B- 3 MAX 319. 8 + AVG 90.0 25 0.007 4 0 + B- 4 MAX 397. 8 + AVG 115. 3 0.0030 16 0 + B- 5 MAX 919. 8 + AVG 299. 3 0.016 7 0.0001 + B- 6 MAX 1334. 8 + AVG 460. 4 3.1 13 0.0304 + B- 7 MAX 1538. 8 + AVG 542. 4 96.0 20 1.11 + TOTAL B- + AVG 539. 4 99.1 24 1.14 + + G 1 203.74 3 2.2 10 0.0095 + G 2 415.6 3 0.013 7 0.0001 + G 3 618.6 7 0.0020 10 0 + G 4 720.8 8 0.0011 6 0 + G 5 937.2 6 0.0020 11 0 + G 7 1136.8 6 0.0046 24 0.0001 + G 9 1218.7 4 0.006 3 0.0002 + G 12 1433.9 5 0.0044 23 0.0001 +0 + + + + + 252CF A DECAY (2.638 Y 10) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + AUGER-L 10.70 5.1 4 0.0012 + CE- L - 1 18.87 3 11.0 8 0.0044 + CE- M - 1 37.06 3 3.07 21 0.0024 + CE- L - 2 75.67 0.172 6 0.0003 + CE- M - 2 93.86 0.049 4 0 + CE-NOP- 2 98.51 0.0191 7 0 + CE- L - 3 135. 15 0.00316 11 0 + + A 1 5825.9 5 0.001938 0.0002 + A 2 5976.5 5 0.23 4 0.0296 + A 3 6075.7 5 15.2 3 1.97 + A 4 6118.3 5 81.6 3 10.63 + + X-RAY L 15.00 6.0 5 0.0019 + G 1 43.40 3 0.0148 9 0 + G 2 100.2 0.01260 0 + G 3 160. 15 0.001938 0 +0 + + + + + 172LU EC DECAY (6.70 D 3) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + AUGER-L 5.840 135. 4 0.0168 + CE- K - 1 17.34 16.6 9 0.0061 + CE- K - 2 29.24 10.0 7 0.0062 + AUGER-K 42.20 5.86 15 0.0053 + CE- L - 1 68.18 55. 4 0.0795 + CE- M - 1 76.27 13.5 8 0.0219 + CE-NOP- 1 78.18 3.7 3 0.0062 + CE- L - 2 80.08 11.3 7 0.0192 + CE- M - 2 88.17 2.76 18 0.0052 + CE-NOP- 2 90.08 0.77 5 0.0015 + CE- K - 11 120.1 4.4 3 0.0112 + CE- L - 11 171.0 2.39 15 0.0087 + CE- M - 11 179.1 0.58 6 0.0022 + CE-NOP- 11 181.0 0.157 11 0.0006 + CE- K - 20 218.4 0.071 7 0.0003 + CE- L - 20 269.2 0.0234 21 0.0001 + CE- M - 20 277.3 0.0056 6 0 + CE-NOP- 20 279.2 0.0016 3 0 + + B+ 1 MAX 1218. + AVG 557.17 22 0.070 0.0008 + + X-RAY L 7.420 42.2 11 0.0067 + X-RAY KA2 51.3540 5 30.2 8 0.0331 + X-RAY KA1 52.3889 5 53.3 13 0.0595 + X-RAY KB 59.40 22.1 6 0.0279 + G 1 78.67 10.6 5 0.0177 + G 2 90.57 5.2 3 0.0101 + G 3 112.7 4.5 3 0.0108 + G 5 134.5 0.080 10 0.0002 + G 6 134.5 0.080 10 0.0002 + G 7 134.5 0.080 10 0.0002 + G 8 142.5 0.0056 0 + G 9 145.7 0.16 4 0.0005 + G 10 151.1 0.09 3 0.0003 + G 11 181.5 19.9 11 0.0769 + G 12 196.4 0.120 10 0.0005 + G 13 197.0 0.0050 0 + G 14 203.4 6.04 25 0.0262 + G 15 210.2 0.090 20 0.0004 + G 16 247.1 0.50 7 0.0026 + G 17 254.8 0.090 10 0.0005 + G 18 264.8 0.65 9 0.0037 + G 19 270.0 2.20 14 0.0127 + G 20 279.7 1.10 10 0.0065 + G 21 293.6 0.0016 0 + G 22 319.1 0.170 20 0.0012 + G 23 323.9 1.57 6 0.0108 + G 24 330.4 0.62 7 0.0044 + G 25 347.8 0.0024 0 + G 26 358.5 0.120 10 0.0009 + G 27 366.7 0.32 4 0.0025 + G 28 372.5 2.77 18 0.0220 + G 29 377.5 3.18 10 0.0256 + G 30 383.1 0.050 20 0.0004 + G 31 399.8 0.54 3 0.0046 + G 32 399.8 0.54 3 0.0046 + G 33 410.3 2.08 7 0.0182 + G 34 416.6 0.080 10 0.0007 + G 35 423.0 0.170 20 0.0015 + G 36 423.0 0.0022 0 + G 37 427.6 0.150 20 0.0014 + G 39 432.5 1.54 9 0.0142 + G 40 436.1 0.0063 0 + G 41 437.5 0.240 20 0.0022 + G 42 443.4 0.160 20 0.0015 + G 43 482.1 0.72 5 0.0074 + G 44 486.2 0.74 8 0.0077 + G 45 490.4 2.00 13 0.0209 + G 46 512.8 0.160 20 0.0017 + G 47 524.3 0.24 5 0.0027 + G 48 528.2 4.01 12 0.0451 + G 49 536.3 0.70 4 0.0080 + G 50 540.1 1.34 9 0.0154 + G 51 551.2 0.43 3 0.0050 + G 52 565.5 0.0011 0 + G 53 566.3 0.17 9 0.0021 + G 54 576.8 0.36 3 0.0044 + G 55 584.6 0.37 5 0.0046 + G 56 594.6 0.58 7 0.0073 + G 57 607.2 0.65 5 0.0084 + G 58 625.6 0.29 4 0.0039 + G 59 630.8 0.30 6 0.0040 + G 60 644.4 0.24 6 0.0033 + G 61 681.8 0.76 6 0.0110 + G 62 697.3 5.9 3 0.0876 + G 63 709.1 0.72 4 0.0109 + G 64 723.0 0.49 4 0.0075 + G 65 810.0 16.0 4 0.276 + G 66 816.3 1.10 7 0.0191 + G 68 900.7 28.8 7 0.553 + G 69 912.0 14.7 4 0.286 + G 70 929.1 3.15 11 0.0623 + G 72 967.5 0.19 4 0.0039 + G 73 970.6 0.10 3 0.0021 + G 74 1003. 5.26 12 0.112 + G 75 1019. 0.17 10 0.0037 + G 76 1022. 1.48 6 0.0322 + G 78 1041. 0.38 5 0.0084 + G 79 1081. 1.14 3 0.0262 + G 80 1094. 63.6 13 1.48 + G 81 1113. 1.88 9 0.0446 + G 82 1116. 0.20 4 0.0048 + G 84 1166. 0.14 3 0.0035 + G 85 1184. 0.49 3 0.0124 + G 86 1206. 0.022 0.0006 + G 87 1289. 0.150 20 0.0041 + G 88 1322. 0.15 3 0.0042 + G 89 1348. 0.0045 0.0001 + G 90 1387. 0.800 10 0.0236 + G 92 1397. 0.34 5 0.0101 + G 93 1403. 0.61 5 0.0182 + G 94 1441. 0.06 5 0.0018 + G 95 1466. 0.66 4 0.0206 + G 96 1470. 0.60 3 0.0188 + G 97 1489. 1.10 4 0.0349 + G 98 1530. 0.14 3 0.0046 + G 99 1543. 0.96 5 0.0315 + G 100 1580. 0.200 20 0.0067 + G 101 1584. 2.53 13 0.0854 + G 102 1603. 0.29 3 0.0099 + G 103 1609. 0.100 10 0.0034 + G 104 1622. 2.13 8 0.0736 + G 105 1666. 0.17 7 0.0060 + G 106 1670. 0.55 7 0.0196 + G 107 1724. 0.430 20 0.0158 + G 108 1813. 0.180 10 0.0070 + G 109 1915. 0.58 3 0.0237 + G 110 1931. 0.040 10 0.0016 + G 111 1994. 0.160 20 0.0068 + G 112 2025. 0.050 20 0.0022 + G 113 2083. 0.30 6 0.0133 + G 114 2096. 0.11 3 0.0049 + MAXIMUM G+/- INTENSITY = 0.14% +0 + + + + + 242AM IT DECAY (141 Y 2) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + G 1 48.63 5 99.50 20 0.103 +0 + + + + + 126I EC DECAY (13.02 D 7) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + AUGER-L 3.190 46. 5 0.0031 + AUGER-K 22.70 5.9 7 0.0029 + CE- K - 1 634.517 12 0.108 12 0.0015 + + B+ 1 MAX 468. 5 + AVG 216.8 22 0.203 23 0.0009 + B+ 2 MAX 1134. 5 + AVG 530.2 22 0.96 17 0.0108 + TOTAL B+ + AVG 475.4 25 1.16 17 0.0117 + + X-RAY L 3.770 4.3 5 0.0003 + X-RAY KA2 27.20170 20 11.9 13 0.0069 + X-RAY KA1 27.47230 20 22.1 24 0.0130 + X-RAY KB 31.00 7.7 9 0.0051 + G 1 666.331 12 33.1 25 0.470 + G 3 753.819 13 4.2 4 0.0669 + G 5 1379. 0.00238 24 0 + G 6 1420.19 3 0.295 23 0.0089 + G 7 2045.09 5 0.0046 5 0.0002 + MAXIMUM G+/- INTENSITY = 2.32% +0 + + + + + 126I B- DECAY (13.02 D 7) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + AUGER-L 3.430 0.53 7 0 + AUGER-K 24.60 0.062 9 0 + CE- K - 1 354.072 11 0.53 8 0.0040 + CE- L - 1 383.180 11 0.083 10 0.0007 + CE- M - 1 387.491 11 0.017 7 0.0001 + CE-NOP- 1 388.425 11 0.004 7 0 + CE- K - 2 456.682 11 0.0227 20 0.0002 + CE- L - 2 485.790 11 0.0033 6 0 + + B- 1 MAX 371. 5 + AVG 108.9 17 3.6 3 0.0084 + B- 2 MAX 862. 5 + AVG 289.7 20 32.1 3 0.198 + B- 3 MAX 1251. 5 + AVG 458.6 21 8.0 3 0.0781 + TOTAL B- + AVG 305.6 22 43.7 6 0.284 + + X-RAY L 4.110 0.057 8 0 + X-RAY KA2 29.4580 10 0.140 21 0 + X-RAY KA1 29.7790 10 0.26 4 0.0002 + X-RAY KB 33.60 0.093 14 0 + G 1 388.633 11 34. 3 0.282 + G 2 491.243 11 2.85 22 0.0298 + G 3 879.876 13 0.75 6 0.0141 +0 + + + + + 57CR B- DECAY (21.1 S 10) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + AUGER-L 0.6100 0.6 3 0 + AUGER-K 5.190 0.25 13 0 + CE- K - 1 76.86 20 0.37 19 0.0006 + CE- L - 1 82.63 20 0.036 19 0 + + B- 1 MAX 2097.6 3 + AVG 860.0 2.5 3 0.0458 + B- 2 MAX 2306.5 5 + AVG 960.0 1.7 8 0.0348 + B- 3 MAX 2459.2 4 + AVG 1030. 0.24 21 0.0053 + B- 4 MAX 2566.9 6 + AVG 1080. 0.43 22 0.0099 + B- 5 MAX 2613.9 4 + AVG 1110. 2.6 14 0.0615 + B- 6 MAX 2652.8 9 + AVG 1120. 0.22 13 0.0052 + B- 7 MAX 2964.2 4 + AVG 1270. 7. 4 0.189 + B- 8 MAX 3074.1 6 + AVG 1330. 0.21 13 0.0059 + B- 9 MAX 3264.84 25 + AVG 1420. 6. 3 0.181 + B- 10 MAX 3306.91 21 + AVG 1440. 0.8 5 0.0245 + B- 11 MAX 3424.7 4 + AVG 1490. 0.4 3 0.0127 + B- 12 MAX 3743.77 23 + AVG 1650. 2.1 11 0.0738 + B- 13 MAX 3949.46 23 + AVG 1750. 2.6 22 0.0969 + B- 14 MAX 4716.16 17 + AVG 2120. 0.3 4 0.0158 + B- 15 MAX 4800. + AVG 2160. 74. 12 3.40 + TOTAL B- + AVG 1934. 101. 14 4.17 + + X-RAY L 0.6400 0.0027 14 0 + X-RAY KA2 5.88765 3 0.035 18 0 + X-RAY KA1 5.89875 3 0.07 4 0 + X-RAY KB 6.490 0.014 8 0 + G 1 83.40 20 8. 5 0.0145 + G 2 205.8 3 2.9 14 0.0126 + G 3 342.9 5 0.5 3 0.0035 + G 4 479.1 5 0.18 12 0.0019 + G 5 684.1 5 0.5 4 0.0078 + G 6 766.5 5 0.34 18 0.0056 + G 7 850.2 6 8. 5 0.145 + G 8 1055.8 3 0.8 4 0.0187 + G 9 1129.9 3 1.4 7 0.0333 + G 10 1209.2 3 0.6 3 0.0148 + G 11 1292.2 5 0.7 4 0.0205 + G 12 1327.3 3 0.32 23 0.0089 + G 13 1335.7 5 1.2 8 0.0334 + G 14 1409.3 3 0.9 5 0.0276 + G 15 1492.7 3 0.9 5 0.0300 + G 16 1535.0 3 4.8 23 0.158 + G 17 1642.2 5 0.21 13 0.0075 + G 18 1752.1 5 5.1 24 0.190 + G 19 1835.2 6 1.4 7 0.0534 + G 20 1852.0 4 1.2 6 0.0463 + G 21 2063.5 8 0.22 13 0.0096 + G 22 2257.2 9 0.24 21 0.0115 + G 23 2410.0 7 0.9 5 0.0442 + G 24 2493.1 7 0.8 4 0.0422 + G 25 2618.3 8 0.44 25 0.0245 +0 + + + + + 57CO EC DECAY (271.80 D 5) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + AUGER-L 0.6700 251.7 20 0.0036 + AUGER-K 5.620 105.1 9 0.0126 + CE- K - 2 114.9494 10 1.84 15 0.0045 + CE- L - 2 121.2153 5 0.193 20 0.0005 + CE-MNO- 2 121.9685 10 0.032 5 0 + CE- K - 3 129.3623 11 1.26 15 0.0035 + + X-RAY L 0.7000 1.52 16 0 + X-RAY KA2 6.39084 3 17.23 15 0.0023 + X-RAY KA1 6.40384 3 33.7 3 0.0046 + X-RAY KB 7.060 6.97 6 0.0010 + G 1 14.41300 15 9.68 25 0.0030 + G 2 122.0614 3 85.9 12 0.223 + G 3 136.4743 5 10.33 10 0.0300 + G 5 339.69 21 0.0025 4 0 + G 6 352.33 21 0.001932 0 + G 8 570.09 20 0.0137 9 0.0002 + G 9 692.41 7 0.162 5 0.0024 + G 10 706.54 22 0.0048 6 0 +1 Work on the program RADLST sponsored by the Division + of Basic Energy Sciences, US Department of Energy, under con- + tract No. DE-AC02-76CH00016 with Associated Universities, Inc. +0 Neither the Associated Universities, Inc., nor the + US Department of Energy make any warranty or assume any legal + responsibility for the results produced by the program. + diff --git a/tests/ensdf_processing/radlst/ref_mednew.dat b/tests/ensdf_processing/radlst/ref_mednew.dat new file mode 100644 index 0000000000..b9e653e2f6 --- /dev/null +++ b/tests/ensdf_processing/radlst/ref_mednew.dat @@ -0,0 +1,207 @@ + 1 M + 1 2 M + 2 M + 2 2 M + 3 M + 3 2 M + 4 M + 4 2 M + 5 M 0.0010 3 0.0 0.1880 4 + 5 2 M 0.17 0.1 + 6 M 0.0020 4 0.0 0.2838 4 + 6 2 M 0.26 0.2 + 7 M 0.0035 9 0.0 0.4016 4 + 7 2 M 0.38 0.3 + 8 M 0.005812 0.0 0.5320 4 0.0237 4 + 8 2 M 0.52 0.5249 7 0.5 + 9 M 0.009018 0.0 0.6854 4 0.031 1 + 9 2 M 0.66 0.6768 8 0.6 + 10 M 0.0152 8 0.0 1.985 6 0.8669 3 0.045 1 + 10 2 M 0.5028 25 0.82 0.8486 2 0.8486 2 0.86 + 11 M 0.0213 9 0.0 1.962 6 1.0721 4 0.0633 4 + 11 2 M 0.0084 25 0.5029 25 0.99 1.0410 3 1.0410 3 1.07 + 12 M 0.0291 9 0.0 1.938 6 1.3050 4 0.0894 4 + 12 2 M 0.017 4 0.5031 25 1.18 1.2536 4 1.2536 4 1.30 + 13 M 0.0387 120.0010 5 1.921 6 1.5596 4 0.1177 4 + 13 2 M 0.021 3 0.5033 25 1.39 1.48670 2 1.48627 2 1.56 + 14 M 0.0504 130.0011 6 1.895 7 1.8389 4 0.1487 4 + 14 2 M 0.029 3 0.5037 25 1.61 1.73998 3 1.73938 3 1.84 + 15 M 0.0642 160.0012 6 1.857 7 2.1455 4 0.1893 4 + 15 2 M 0.043 4 0.5048 25 1.85 2.0137 3 2.0127 3 2.14 + 16 M 0.0804 190.0013 6 1.807 7 2.4720 4 0.2292 4 + 16 2 M 0.062 4 0.5053 25 2.11 2.30784 4 2.30664 4 2.47 + 17 M 0.0989 240.0014 5 1.751 6 2.8224 3 0.2702 4 0.0175 4 + 17 2 M 0.086 4 0.5056 25 2.38 2.62239 6 2.62078 6 2.82 + 18 M 0.1199 280.0015 5 1.697 6 3.2029 3 0.320 1 0.0253 4 + 18 2 M 0.1079 30 0.5049 25 2.66 2.95770 3 2.95563 3 3.19 + 19 M 0.143 4 0.0016 5 1.654 6 3.6074 4 0.3771 4 0.0339 4 + 19 2 M 0.1225 24 0.5055 25 2.97 3.3138 2 3.3111 3 3.59 + 20 M 0.169 4 0.0018 6 1.621 6 4.0381 4 0.4378 4 0.0437 4 + 20 2 M 0.1296 23 0.5061 25 3.30 0.31 3.69168 4 3.68809 4 4.01 0.34 + 21 M 0.196 5 0.0020 7 1.594 5 4.4928 4 0.5004 4 0.0538 4 + 21 2 M 0.1319 21 0.5069 25 3.64 0.37 4.0906 2 4.0861 2 4.46 0.40 + 22 M 0.226 5 0.0021 7 1.567 5 4.9664 4 0.5637 4 0.0603 4 + 22 2 M 0.1325 18 0.5076 25 4.00 0.42 4.51084 4 4.50486 4 4.93 0.45 + 23 M 0.256 5 0.0023 8 1.538 5 5.4651 3 0.6282 4 0.0665 4 + 23 2 M 0.1334 16 0.5083 25 4.38 0.47 4.95220 4 4.94464 4 5.43 0.51 + 24 M 0.289 5 0.0026 9 1.508 5 5.9892 3 0.6946 4 0.0741 4 + 24 2 M 0.1346 14 0.5091 25 4.78 0.54 5.41472 5 5.40551 5 5.95 0.57 + 25 M 0.321 5 0.0047 7 1.478 4 6.5390 4 0.7690 4 0.0839 5 + 25 2 M 0.1359 14 0.5099 25 5.19 0.61 5.89875 3 5.88765 3 6.49 0.64 + 26 M 0.355 4 0.0060 6 1.447 4 7.1120 9 0.8461 4 0.0929 9 + 26 2 M 0.1368 14 0.5107 25 5.62 0.67 6.40384 3 6.39084 3 7.06 0.70 + 27 M 0.388 4 0.0072 5 1.418 4 7.7089 3 0.9256 4 0.1007 4 + 27 2 M 0.1372 14 0.5116 25 6.07 0.75 6.93032 4 6.91530 4 7.65 0.78 + 28 M 0.421 4 0.0084 4 1.388 4 8.3328 4 1.0081 4 0.1118 6 + 28 2 M 0.1378 14 0.5124 25 6.54 0.84 7.47815 4 7.46089 4 8.26 0.85 + 29 M 0.454 4 0.0097 4 1.357 4 8.9789 4 1.0966 4 0.1198 6 + 29 2 M 0.1391 14 0.5133 25 7.03 0.92 8.04778 1 8.02783 1 8.91 0.93 + 30 M 0.486 4 0.0108 4 1.326 4 9.6586 6 1.1936 9 0.1359 11 + 30 2 M 0.1417 12 0.5142 25 7.53 0.99 8.63886 5 8.61578 5 9.57 1.01 + 31 M 0.517 4 0.0123 4 1.295 4 10.3671 5 1.2977 11 0.1581 5 + 31 2 M 0.1457 12 0.5146 25 8.04 1.10 9.25174 7 9.22482 7 10.3 1.10 + 32 M 0.546 4 0.0140 4 1.263 4 11.103 7 1.4143 7 0.1800 8 + 32 2 M 0.1509 12 0.5149 25 8.56 1.19 9.88642 7 9.85532 7 11.0 1.19 + 33 M 0.575 4 0.0155 5 1.232 4 11.8667 7 1.5265 8 0.2035 7 + 33 2 M 0.1566 13 0.5153 25 9.11 1.24 10.5437 1 10.5080 1 11.7 1.28 + 34 M 0.602 4 0.0175 5 1.203 4 12.6578 7 1.6539 35 0.2315 7 + 34 2 M 0.1626 13 0.5158 25 9.67 1.32 11.2224 2 11.1814 2 12.5 1.38 + 35 M 0.628 4 0.0194 5 1.175 4 13.4737 4 1.7820 4 0.2565 4 0.0273 5 + 35 2 M 0.1683 14 0.5181 25 10.2 1.41 11.9242 2 11.8776 2 13.3 1.48 + 36 M 0.652 4 0.0215 6 1.149 4 14.3256 8 1.9210 6 0.288 1 0.0240 8 + 36 2 M 0.1737 14 0.5186 25 10.8 1.50 12.649 2 12.598 2 14.1 1.59 + 37 M 0.674 4 0.0237 6 1.125 4 15.1997 3 2.0651 3 0.3221 3 0.0293 3 + 37 2 M 0.1788 15 0.5195 25 11.4 1.68 13.3953 2 13.3358 2 15.0 1.69 + 38 M 0.696 4 0.0262 7 1.102 4 16.1046 3 2.2163 3 0.3575 3 0.0377 3 + 38 2 M 0.1835 15 0.5205 25 12.1 1.79 14.1650 2 14.0979 2 15.8 1.81 + 39 M 0.716 4 0.0289 7 1.081 4 17.0384 3 2.3725 3 0.3936 3 0.0454 3 + 39 2 M 0.1878 16 0.5215 25 12.7 1.91 14.9584 2 14.8829 2 16.7 1.92 + 40 M 0.734 4 0.0317 8 1.062 4 17.9976 4 2.5316 3 0.4303 3 0.0513 3 + 40 2 M 0.1918 16 0.5225 25 13.4 2.02 15.7751 2 15.6909 2 17.7 2.04 + 41 M 0.751 4 0.0347 9 1.045 4 18.9856 4 2.6977 3 0.4684 3 0.0581 3 + 41 2 M 0.1953 16 0.5236 25 14.0 2.15 16.6151 2 16.5210 2 18.6 2.17 + 42 M 0.767 4 0.0381 9 1.029 4 19.9995 3 2.8655 3 0.5046 3 0.0618 3 + 42 2 M 0.1986 16 0.5247 25 14.8 2.27 17.4793 1 17.3743 14 19.6 2.29 + 43 M 0.782 4 0.0415 101.014 4 21.0440 7 3.0425 4 0.544 1 0.068 2 + 43 2 M 0.2017 17 0.5259 25 15.5 2.17 18.3671 8 18.2508 8 20.6 2.42 + 44 M 0.796 4 0.0453 111.000 4 22.1172 3 3.2240 3 0.5850 3 0.0749 3 + 44 2 M 0.2045 17 0.5270 25 16.2 2.53 19.2792 2 19.1504 2 21.7 2.56 + 45 M 0.809 4 0.0494 120.987 4 23.2199 3 3.4119 3 0.6271 3 0.0810 3 + 45 2 M 0.2072 17 0.5282 25 17.0 2.39 20.2161 2 20.0737 2 22.7 2.70 + 46 M 0.820 4 0.0536 130.975 4 24.3503 3 3.6043 3 0.6699 3 0.0864 3 + 46 2 M 0.2099 17 0.5293 25 17.7 2.50 21.1771 2 21.0201 2 23.8 2.84 + 47 M 0.831 4 0.0583 140.964 4 25.5140 3 3.8058 3 0.7175 3 0.0952 3 + 47 2 M 0.2125 17 0.5305 25 18.5 2.61 22.1629 1 21.9903 3 24.9 2.98 + 48 M 0.842 4 0.0632 160.953 4 26.7112 3 4.0180 3 0.7702 3 0.1076 3 + 48 2 M 0.2151 18 0.5317 25 19.3 2.72 23.1736 2 22.9841 2 26.1 3.13 + 49 M 0.851 4 0.0684 200.944 4 27.9399 3 4.2375 3 0.8256 3 0.1219 3 + 49 2 M 0.2178 18 0.5330 25 20.1 2.84 24.2097 2 24.0020 2 27.3 3.29 + 50 M 0.860 4 0.0740 250.934 4 29.2001 4 4.4647 3 0.8838 3 0.1365 4 + 50 2 M 0.2206 18 0.5343 25 21.0 2.95 25.2713 2 25.0440 2 28.5 3.44 + 51 M 0.868 4 0.0796 300.925 4 30.4912 3 4.6983 3 0.9437 3 0.1520 3 + 51 2 M 0.2236 23 0.5356 25 21.8 3.07 26.3591 2 26.1108 2 29.7 3.60 + 52 M 0.875 4 0.0862 350.917 4 31.8138 3 4.9392 3 1.0060 3 0.1683 3 + 52 2 M 0.2266 23 0.5370 25 22.7 3.19 27.4723 2 27.2017 2 31.0 3.77 + 53 M 0.882 4 0.092 4 0.909 4 33.1694 4 5.1881 3 1.0721 3 0.1864 3 + 53 2 M 0.2296 23 0.5384 25 23.6 3.31 28.6120 3 28.3172 4 32.3 3.94 + 54 M 0.888 5 0.097 5 0.902 4 34.5614 11 5.4528 4 1.142 1 0.208 1 + 54 2 M 0.2327 24 0.5398 25 24.6 3.43 29.779 1 29.458 1 33.6 4.11 + 55 M 0.894 4 0.104 5 0.895 4 35.9846 4 5.7143 4 1.2171 4 0.2308 4 + 55 2 M 0.2358 24 0.5413 25 25.5 3.55 30.9728 3 30.6251 3 35.0 4.29 + 56 M 0.900 4 0.110 5 0.888 4 37.4406 4 5.9888 4 1.2928 4 0.2530 5 + 56 2 M 0.2387 24 0.5428 25 26.4 3.67 32.1936 3 31.8171 3 36.4 4.47 + 57 M 0.905 4 0.117 5 0.882 4 38.9246 4 6.2663 5 1.3613 3 0.2704 8 + 57 2 M 0.2416 25 0.5444 25 27.4 3.80 33.4418 2 33.0341 2 37.8 4.65 + 58 M 0.910 4 0.125 5 0.876 4 40.4430 4 6.5488 5 1.4346 6 0.2896 7 + 58 2 M 0.2443 25 0.5460 25 28.4 3.94 34.7197 2 34.2789 2 39.3 4.84 + 59 M 0.914 4 0.132 5 0.871 4 41.9906 5 6.8348 5 1.5110 8 0.3045 9 + 59 2 M 0.2469 25 0.5476 25 29.4 4.08 36.0263 2 35.5502 2 40.7 5.03 + 60 M 0.918 4 0.140 6 0.866 4 43.5689 4 7.1260 4 1.5753 7 0.3152 8 + 60 2 M 0.2492 25 0.5491 25 30.5 4.23 37.3610 3 36.8474 3 42.3 5.23 + 61 M 0.922 4 0.148 6 0.861 4 45.1840 7 7.4279 8 1.649 5 0.330 5 + 61 2 M 0.2513 26 0.5508 25 31.5 4.38 38.7247 5 38.1712 5 43.8 5.43 + 62 M 0.926 4 0.158 6 0.857 4 46.8342 5 7.7368 5 1.7228 8 0.3457 9 + 62 2 M 0.2533 26 0.5525 25 32.6 4.53 40.1181 3 39.5224 3 45.4 5.64 + 63 M 0.929 4 0.168 7 0.853 4 48.5190 4 8.0520 4 1.8000 5 0.3602 7 + 63 2 M 0.2550 26 0.5542 25 33.7 4.69 41.5422 3 40.9019 3 47.0 5.85 + 64 M 0.932 4 0.176 6 0.850 4 50.2391 5 8.3756 5 1.8808 5 0.3758 7 + 64 2 M 0.2566 26 0.5559 25 34.9 4.84 42.9962 3 42.3089 3 48.7 6.06 + 65 M 0.935 4 0.186 8 0.847 4 51.9957 5 8.7080 5 1.9675 6 0.3979 8 + 65 2 M 0.2581 26 0.5577 25 36.0 5.00 44.4816 3 43.7441 3 50.4 6.27 + 66 M 0.938 4 0.196 8 0.844 4 53.7885 5 9.0458 5 2.0468 4 0.4163 5 + 66 2 M 0.2594 26 0.5596 25 37.2 5.16 45.9984 4 45.2078 4 52.1 6.50 + 67 M 0.940 4 0.206 8 0.841 4 55.6177 5 9.3942 4 2.1283 6 0.4357 8 + 67 2 M 0.2607 27 0.5615 25 38.4 5.33 47.5467 4 46.6997 4 53.9 6.72 + 68 M 0.942 4 0.216 9 0.838 4 57.4855 5 9.7513 4 2.2065 6 0.4491 10 + 68 2 M 0.2619 27 0.5634 25 39.7 5.50 49.1277 4 48.2211 4 55.7 6.95 + 69 M 0.945 4 0.227 9 0.836 4 59.3896 5 10.1157 4 2.3068 7 0.4717 9 + 69 2 M 0.2630 27 0.5664 25 40.9 5.67 50.7416 4 49.7726 4 57.5 7.18 + 70 M 0.947 4 0.238 10 0.833 4 61.3323 5 10.4864 4 2.3981 4 0.4872 6 + 70 2 M 0.2641 27 0.5673 25 42.2 5.84 52.3889 5 51.3540 5 59.4 7.42 + 71 M 0.949 4 0.248 10 0.831 4 63.3138 5 10.8704 4 2.4912 5 0.5062 6 + 71 2 M 0.265 4 0.5694 25 43.5 6.02 54.0698 5 52.9650 5 61.3 7.66 + 72 M 0.951 4 0.260 10 0.829 4 65.3508 6 11.2707 4 2.6009 4 0.5381 4 + 72 2 M 0.266 4 0.5714 25 44.8 6.18 55.7902 8 54.6114 8 63.2 7.90 + 73 M 0.952 4 0.272 11 0.827 4 67.4164 6 11.6815 3 2.7080 4 0.5655 5 + 73 2 M 0.267 4 0.5736 25 46.2 6.35 57.532 1 56.277 1 65.2 8.15 + 74 M 0.954 4 0.283 11 0.825 4 69.5250 3 12.0998 3 2.8196 4 0.5950 4 + 74 2 M 0.268 4 0.5757 25 45.7 6.53 59.3182 1 57.9817 5 67.2 8.40 + 75 M 0.955 4 0.295 12 0.823 4 71.6764 4 12.5267 4 2.9317 4 0.6250 4 + 75 2 M 0.269 4 0.5780 25 47.0 6.70 61.1403 6 59.7179 6 69.3 8.65 + 76 M 0.957 4 0.308 12 0.821 4 73.8708 5 12.9680 4 3.0485 4 0.6543 5 + 76 2 M 0.271 4 0.5803 25 48.3 6.88 63.0005 7 61.4867 7 71.4 8.91 + 77 M 0.958 4 0.319 13 0.819 4 76.1110 5 13.4185 3 3.1737 7 0.6901 4 + 77 2 M 0.272 4 0.5827 25 49.6 7.06 64.8956 7 63.2867 7 73.6 9.18 + 78 M 0.959 4 0.331 13 0.818 4 78.3948 7 13.8799 4 3.2960 9 0.7220 6 + 78 2 M 0.273 4 0.5850 25 51.0 7.24 66.832 2 65.122 2 75.7 9.44 + 79 M 0.960 4 0.343 14 0.816 4 80.7249 5 14.3528 4 3.4249 3 0.7588 4 + 79 2 M 0.274 4 0.5874 25 52.4 7.42 68.8037 8 66.9895 8 78.0 9.71 + 80 M 0.962 4 0.355 14 0.814 4 83.1023 8 14.8393 10 3.5616 11 0.8003 10 + 80 2 M 0.276 4 0.5899 25 53.8 7.60 70.819 2 68.895 2 80.3 9.99 + 81 M 0.963 4 0.367 15 0.813 5 85.5304 6 15.3467 4 3.7041 4 0.8455 5 + 81 2 M 0.277 4 0.5924 25 55.2 7.78 72.8715 9 70.8319 9 82.6 10.3 + 82 M 0.963 4 0.379 15 0.811 5 88.0045 7 15.8608 5 3.8507 5 0.8936 7 + 82 2 M 0.279 4 0.5950 25 56.7 7.97 74.9694 9 72.8042 9 84.9 10.6 + 83 M 0.964 4 0.391 16 0.809 5 90.5259 7 16.3875 4 3.9991 3 0.9382 3 + 83 2 M 0.280 4 0.5977 25 58.2 8.15 77.1079 10 74.8148 10 87.3 10.8 + 84 M 0.965 4 0.403 16 0.807 5 93.1050 38 16.939 10 4.1494 39 0.9953 29 + 84 2 M 0.282 4 0.6005 25 59.7 8.33 79.290 5 76.862 5 89.8 11.1 + 85 M 0.966 4 0.416 17 0.806 5 95.730 8 17.493 29 4.317 5 1.042 5 + 85 2 M 0.284 4 0.6033 25 61.2 8.52 81.52 1 78.95 1 92.3 11.4 + 86 M 0.967 4 0.428 17 0.804 5 98.404 12 18.049 38 4.482 5 1.097 5 + 86 2 M 0.285 4 0.6062 25 62.7 8.71 83.78 2 81.07 2 94.9 11.7 + 87 M 0.967 4 0.440 18 0.802 5 101.137 13 18.639 40 4.652 5 1.153 5 + 87 2 M 0.287 4 0.6092 25 64.3 8.90 86.10 2 83.23 2 97.5 12.0 + 88 M 0.968 4 0.452 18 0.801 5 103.922 8 19.2367 15 4.8220 15 1.2084 16 + 88 2 M 0.289 4 0.6122 25 65.9 9.09 88.47 1 85.43 1 100.1 12.3 + 89 M 0.969 4 0.464 18 0.799 5 106.755 6 19.840 18 5.002 5 1.269 5 + 89 2 M 0.291 4 0.6152 25 67.5 9.28 90.884 6 87.67 1 102.8 12.7 + 90 M 0.969 4 0.476 18 0.797 5 109.6509 9 20.4721 5 5.1823 3 1.3295 4 + 90 2 M 0.294 4 0.6182 25 69.2 9.48 93.350 2 89.953 2 105.6 13.0 + 91 M 0.970 4 0.488 18 0.795 5 112.601424 21.1046 18 5.3669 16 1.3871 18 + 91 2 M 0.296 5 0.6214 25 70.8 9.68 95.868 2 92.287 2 108.4 13.3 + 92 M 0.970 4 0.500 19 0.793 5 115.606116 21.7574 3 5.5480 4 1.4408 4 + 92 2 M 0.298 5 0.6247 25 72.6 9.89 98.439 2 94.665 2 111.3 13.6 + 93 M 0.971 4 0.511 20 0.791 5 118.678 33 22.4268 9 5.7232 36 1.5007 8 + 93 2 M 0.301 5 0.6282 25 74.3 10.1 101.07 4 97.08 4 114.2 13.9 + 94 M 0.971 4 0.521 20 0.790 5 121.818 44 23.0972 16 5.9329 14 1.5586 8 + 94 2 M 0.303 5 0.6317 25 76.0 10.3 103.76 5 99.55 5 117.3 14.3 + 95 M 0.971 4 0.530 22 0.788 5 124.998 25 23.806 17 6.125 12 1.616 20 + 95 2 M 0.306 5 0.6352 25 77.8 10.5 106.49 3 102.05 3 120.3 14.6 + 96 M 0.972 4 0.538 23 0.786 5 128.261 44 24.532 32 6.336 18 1.685 20 + 96 2 M 0.309 6 0.6387 25 79.6 10.7 109.29 5 104.61 5 123.4 15.0 + 97 M 0.972 4 0.546 24 0.784 5 131.583 44 25.270 32 6.545 18 1.750 20 + 97 2 M 0.311 6 0.6424 25 81.5 10.9 112.14 5 107.21 5 126.6 15.3 + 98 M 0.972 4 0.553 25 0.782 6 134.971 44 26.019 32 6.755 18 1.810 20 + 98 2 M 0.314 7 0.6462 25 83.3 11.2 115.07 5 109.87 5 129.8 15.7 + 99 M 0.973 4 0.560 26 0.780 6 138.429 44 26.793 32 6.975 18 1.878 20 + 99 2 M 0.317 8 0.6500 25 85.2 11.4 118.05 5 112.57 5 133.2 16.0 +100 M 0.973 4 0.567 27 0.778 7 141.968 34 27.590 25 7.206 12 1.954 20 +100 2 M 0.321 9 0.6538 25 87.5 11.6 121.10 4 115.32 4 136.6 16.4 +101 M 0.99 2 0.74 10 0.78 3 145.571 62 28.400 44 7.433 20 2.019 20 +101 2 M +102 M 0.99 2 0.76 10 0.78 3 149.256 62 29.234 44 7.670 20 2.092 20 +102 2 M +103 M 0.99 2 0.78 10 0.78 3 153.023 62 30.098 44 7.921 20 2.174 20 +103 2 M +-1 diff --git a/tests/ensdf_processing/radlst/ref_radlst.inp b/tests/ensdf_processing/radlst/ref_radlst.inp new file mode 100644 index 0000000000..c417a976c1 --- /dev/null +++ b/tests/ensdf_processing/radlst/ref_radlst.inp @@ -0,0 +1,697 @@ +205TL 205HG B- DECAY 1971HI01 78NDS 197803 +205HG P 0 1/2- 5.2 M 1 1538 8 +205TL N 0.022 10 1 +205TL L 0 1/2+ +205TL B 96 2 5.27115 +205TL2 B EAV= 542 4$ +205TL CB E some approximate measurements listed in 1971SC35 +205TL L 203.7 3/2+ 1.46 NS 8 +205TL CL T 1971SH35, 1967MA45 +205TL G 203.74 3 100 M1+E2 +1.56 15 0.440 +205TL CG E from 1972BA53 +205TL CG MR from COUL. EX. (1973KR02) +205TL CG CC from 1973KR02 +205TL B 3.1 13 6.5 2 +205TL2 B EAV= 460 4$ +205TL CB IB estimated by 1971HI01 to be 3.7% 15 based on ratios of +205TL2CB IG(203.7) to 197HG,203HG IG's and CC(203.7)=0.62; IB=3.1% if CC is +205TL3CB reduced to 0.44 +205TL L 619.3 5/2+ +205TL B 0.016 7 8.6920 1U +205TL2 B EAV= 299 3$ +205TL G 415.6 3 0.59 8 (M1) 0.1691 +205TL G 618.6 7 0.090 20 +205TL CG RI(618.6)/RI(415.6) is AP twice as large as in COUL. EX. +205TL2CG and (N,N'G) +205TL L 1140.9 (3/2)+ +205TL B 0.0030 16 7.7424 +205TL2 B EAV= 115 3$ +205TL G 937.2 6 0.093 20 +205TL G 1141.1 15 0.045 20 +205TL L 1218.7 1/2+ +205TL B 0.007 4 7.1 3 +205TL2 B EAV= 90.0 25$ +205TL G 1014.7 8 0.031 10 +205TL G 1218.7 4 0.28 5 +205TL L 1340.3 (3/2)+ +205TL B 0.006 3 6.4723 +205TL2 B EAV= 53.4 24$ +205TL G 720.8 8 0.051 15 +205TL G 1136.8 6 0.21 5 +205TL G 1340.3 8 0.015 5 +205TL L 1433.9 (1/2,3/2) +205TL B 0.0049 25 5.6925 +205TL2 B EAV= 27.1 22$ +205TL G 1230.8 10 0.023 10 +205TL G 1433.9 5 0.20 5 + +205TL 205HG B- DECAY 1971HI01 78NDS 197803 +205HG P 0 1/2- 5.2 M 1 1538 8 +205TL N 0.022 10 1 +205TL L 0 1/2+ +205TL B 96 2 5.27115 +205TL2 B EAV= 542 4$ +205TL CB E some approximate measurements listed in 1971SC35 +205TL L 203.7 3/2+ 1.46 NS 8 +205TL CL T 1971SH35, 1967MA45 +205TL G 203.74 3 100 M1+E2 +1.56 15 0.440 +205TL CG E from 1972BA53 +205TL CG MR from COUL. EX. (1973KR02) +205TL CG CC from 1973KR02 +205TL B 3.1 13 6.5 2 +205TL2 B EAV= 460 4$ +205TL CB IB estimated by 1971HI01 to be 3.7% 15 based on ratios of +205TL2CB IG(203.7) to 197HG,203HG IG's and CC(203.7)=0.62; IB=3.1% if CC is +205TL3CB reduced to 0.44 +205TL L 619.3 5/2+ +205TL B 0.016 7 8.6920 1U +205TL2 B EAV= 299 3$ +205TL G 415.6 3 0.59 8 (M1) 0.1691 +205TL G 618.6 7 0.090 20 +205TL CG RI(618.6)/RI(415.6) is AP twice as large as in COUL. EX. +205TL2CG and (N,N'G) +205TL L 1140.9 (3/2)+ +205TL B 0.0030 16 7.7424 +205TL2 B EAV= 115 3$ +205TL G 937.2 6 0.093 20 +205TL G 1141.1 15 0.045 20 +205TL L 1218.7 1/2+ +205TL B 0.007 4 7.1 3 +205TL2 B EAV= 90.0 25$ +205TL G 1014.7 8 0.031 10 +205TL G 1218.7 4 0.28 5 +205TL L 1340.3 (3/2)+ +205TL B 0.006 3 6.4723 +205TL2 B EAV= 53.4 24$ +205TL G 720.8 8 0.051 15 +205TL G 1136.8 6 0.21 5 +205TL G 1340.3 8 0.015 5 +205TL L 1433.9 (1/2,3/2) +205TL B 0.0049 25 5.6925 +205TL2 B EAV= 27.1 22$ +205TL G 1230.8 10 0.023 10 +205TL G 1433.9 5 0.20 5 + +248CM 252CF A DECAY 1955AS42,1970BA18,1971WA2881NDS 198105 +248CM C 1964AS10 +248CM N 1.0 0.96908 8 +252CF P 0.0 0+ 2.638 Y 10 6217.1 5 +248CM C XL=7.8% 4 (1971WA28) +248CM CA E From 1970BA18 and corrected according to 1971BB10 +248CM CA IA Average of 1955AS42,1970BA18 +248CM CA Limits on other A's, G's given by 1963LE17,1963BJ03 +248CM L 0 0+ +248CM A 6118.3 5 84.2 3 1.0 +248CM L 43.40 2+ 126 PS 10 +248CM CL T from 1970TO08 +248CM A 6075.7 5 15.7 3 3.24 6 +248CM G 43.399 25 0.0153 9 E2 1014 +248CM2 G LC= 739 $MC= 207.2 $ +248CM CG CC ECC=1013 70 if I(A)=15.5% 1971WA28 +248CM L 144 4+ +248CM A 5976.6 0.24 4 65 +248CM G 100.2 0.013 AP (E2) 19.00 +248CM2 G LC= 13.63 $MC= 3.85 $NC+= 1.516 $ +248CM L 297 6+ +248CM A 5826.3 0.002 AP1200 AP +248CM G 160 15 0.002 (E2) 2.447 +248CM2 G KC= 0.1773 $LC= 1.631 $MC= 0.460 $NC+= 0.1791 $ +248CM L 510 8+ +248CM A 5616 6.0E-5 AP2600 AP + +172YB 172LU EC DECAY 75NDS,WBE197812 +172YB N 1.0 1.0 +172LU P 0. (4-) 6.70 D 3 2500 AP +172YB Q -2500. AP 8023.6 28 7337.930 +172YB L 0. 0+ +172YB L 78.67 2+ +172YB G 78.67 E2 8.40 99.2 42 +172YB2 G KC= 1.575 $LC= 5.19 $MC= 1.277 $N+= 0.351 $ +172YB L 260.14 4+ +172YB E 2220 AP 0.070 1.50 9.42 +172YB2 E EAV= 557.17 $CK= 0.7914 $CL= 0.12611 $CM+= 0.03803 $ +172YB G 181.47 E2 0.377 27.4 14 +172YB2 G KC= 0.2194 $LC= 0.1203 $MC= 0.0290 $N+=0.00791 $ +172YB L 539.84 6+ +172YB G 279.70 E2 0.0922 1.2 1 +172YB2 G KC= 0.0644 $LC=0.02133 $MC=0.00506 $N+=0.00145 $ +172YB E 1960. AP 0.3312 11.1016 1U +172YB2 E EAV= 449.65 $CK= 0.8151 $CL= 0.13864 $CM+= 0.04225 $ +172YB L 1042.8 0+ +172YB G 964.1 ? +172YB L 1117.8 2+ +172YB G 857.54 ? +172YB G 1039.07 ? +172YB G 1117.95 ? +172YB L 1172.28 3+ +172YB G 912.05 E2+M1 14.7 4 +172YB G 1093.64 E2+M1 63.6 13 +172YB E 1328. AP 4.322 8.4923 +172YB2 E CK= 0.8232 $CL= 0.13553 $CM+= 0.04108 $ +172YB L 1262.86 4+ +172YB G 90.57 E2+M1 -1.73 6 4.74 30.1 16 +172YB2 G KC= 1.91 4$LC= 2.15 3$MC= 0.526 7$N+= 0.1464 20$ +172YB G 723.03 (E2) 0.49 4 +172YB G 1002.75 E2+M1 5.26 12 +172YB G 1184.29 (E2) 0.49 3 +172YB E 1238. AP 3.417 8.5322 +172YB2 E CK= 0.8224 $CL= 0.13621 $CM+= 0.04132 $ +172YB L 1375.63 (5)+ +172YB G 112.71 E2+M1 4.5 3 +172YB G 203.37 E2 6.04 25 +172YB G 1116.09 0.20 4 +172YB E 1125. AP 1.5 5 8.8015 +172YB2 E CK= 0.8211 $CL= 0.13720 $CM+= 0.04168 $ +172YB L 1466.01 2+ +172YB G 293.61 .0016 AP ? +172YB G 347.8 0.0024 AP ? +172YB G 423.04 .0022 AP ? +172YB G 1205.62 .022 AP ? +172YB G 1387.22 (E2) 0.80 1 +172YB G 1466.12 (E2) 0.66 4 +172YB L 1476.8 +172YB L 1509.99 (6)+ +172YB G 134.48 0.08 1 +172YB G 247.12 0.50 7 +172YB G 970.64 0.10 3 +172YB L 1549.15 (3+) +172YB G 431.29 .0004 AP ? +172YB G 1288.98 (M1) 0.15 2 +172YB G 1470.48 (E2) 0.60 3 +172YB E 951. AP 0.37 6 9.26 7 +172YB2 E CK= 0.8184 $CL= 0.13919 $CM+= 0.04239 $ +172YB L 1609.18 2+ +172YB G 131.8 IF M1 .00056 AP ? +172YB G 142.5 IF M1 .0056 AP ? +172YB G 436.1 .0063 AP ? +172YB G 565.5 .0011 AP ? +172YB G 1348.1 .0045 AP ? +172YB G 1529.72 0.14 3 +172YB G 1609.18 0.10 1 +172YB E 891. AP 0.26 9 9.3515 +172YB2 E CK= 0.8172 $CL= 0.14008 $CM+= 0.04271 $ +172YB L 1640.38 (4,5)- +172YB G 264.76 (E1+M2) 0.65 9 +172YB G 377.52 E1+M2 3.18 10 +172YB E 860. AP 2.1 2 8.41 5 +172YB2 E CK= 0.8165 $CL= 0.14059 $CM+= 0.04290 $ +172YB L 1657.91 (4+) +172YB G 1397.29 0.34 5 +172YB G 1579.70 0.20 2 +172YB E 843. AP 0.15 8 9.5424 +172YB2 E CK= 0.8161 $CL= 0.14090 $CM+= 0.04301 $ +172YB L 1662.77 3(+) +172YB G 197.02 0.005 AP ? +172YB G 399.75 0.54 3 +172YB G 490.41 (M1) 2.00 13 +172YB G 1402.87 (E2) 0.61 5 +172YB G 1584.18 (E2) 2.53 13 +172YB E 838. AP 3.6 2 8.15025 +172YB2 E CK= 0.8160 $CL= 0.14098 $CM+= 0.04304 $ +172YB L 1700.57 (3+) +172YB G 151.09 IF M1 0.09 3 +172YB G 437.55 (M1) 0.24 2 +172YB G 528.23 (M1) 4.01 12 +172YB G 1440.52 (E2) 0.06 5 +172YB G 1622.01 2.13 8 +172YB E 800. AP 3.8 3 8.08 4 +172YB2 E CK= 0.8150 $CL= 0.14170 $CM+= 0.04330 $ +172YB L 1706.22 (5,6)- +172YB G 196.36 IF E1 0.12 1 +172YB G 330.44 E1+M2 0.62 7 +172YB G 443.42 0.16 2 +172YB G 1166.46 E1 0.14 3 +172YB E 794. AP 0.72 9 8.80 6 +172YB2 E CK= 0.8148 $CL= 0.14182 $CM+= 0.04334 $ +172YB L 1749.07 (4+) +172YB G 486.17 (M1) 0.74 8 +172YB G 576.78 (M1) 0.36 3 +172YB G 1489.00 (E2) 1.10 4 +172YB G 1670.19 (E2,M1) 0.55 7 +172YB L 1792.27 (5+) +172YB G 134.48 E2+M1 0.08 1 ? +172YB G 416.64 M1+E2 0.08 1 +172YB E 708. AP 0.03 2 10.1 3 +172YB2 E CK= 0.8121 $CL= 0.14380 $CM+= 0.04406 $ +172YB L 1803.04 (4)+ +172YB G 145.72 (M1) 0.16 4 +172YB G 427.57 (M1+E2) 0.15 2 +172YB G 540.15 M1 1.34 9 +172YB G 630.82 0.30 6 +172YB G 1542.89 (E2) 0.96 5 +172YB G 1724.41 (E2,M1) 0.43 2 +172YB E 697. AP 0.41 19 8.9221 +172YB2 E CK= 0.8117 $CL= 0.14409 $CM+= 0.04416 $ +172YB L 1862.76 (5+) +172YB G 1322.38 (E2) 0.15 3 +172YB G 1602.62 (E2,M1) 0.29 3 +172YB E 638. AP 0.24 9 9.0717 +172YB2 E CK= 0.8093 $CL= 0.14587 $CM+= 0.04481 $ +172YB L 1926.94 (5+) +172YB G 134.48 E2+M1 0.08 1 ? +172YB G 551.19 0.43 3 +172YB G 1387.22 (E2) ? +172YB G 1666.33 0.17 7 +172YB E 573. AP 0.40 8 8.75 9 +172YB2 E CK= 0.8061 $CL= 0.14826 $CM+= 0.04567 $ +172YB L 2073.00 (4+) +172YB G 210.22 IF M1 0.09 2 +172YB G 270.02 (M1) 2.20 14 +172YB G 323.89 (M1) 1.57 6 +172YB G 366.68 E1 0.32 4 +172YB G 372.51 (M1+E2) 2.77 18 +172YB G 410.31 2.08 7 +172YB G 432.53 (E1+M2) 1.54 9 +172YB G 607.16 0.65 5 +172YB G 697.26 M1 5.90 26 +172YB G 810.05 M1 15.98 38 +172YB G 900.69 M1 28.82 66 +172YB G 1812.89 (E2) 0.18 1 +172YB G 1994.30 0.16 2 +172YB E 427. AP 62.3 9 6.270 7 +172YB2 E CK= 0.7944 $CL= 0.15685 $CM+= 0.04880 $ +172YB L 2174.99 (3+) +172YB G 383.08 0.05 2 +172YB G 566.28 0.17 9 +172YB G 625.60 0.29 4 +172YB G 709.13 (E2+M1) 0.72 4 +172YB G 1914.78 (M1) 0.58 3 +172YB G 2095.71 (E2,M1) 0.11 3 +172YB E 325. AP 1.9 1 7.51123 +172YB2 E CK= 0.7784 $CL= 0.16855 $CM+= 0.05309 $ +172YB L 2181.80 (4,5+) +172YB G 254.82 0.09 1 +172YB G 319.10 (M1) 0.17 2 +172YB G 524.32 (E2+M1) 0.24 5 +172YB E 318. AP 0.50 5 8.07 5 +172YB2 E CK= 0.7768 $CL= 0.16967 $CM+= 0.05350 $ +172YB L 2191.91 (5)+ +172YB G 399.75 0.54 3 +172YB G 681.76 (M1) 0.76 6 +172YB G 816.34 (M1) 1.10 7 +172YB G 929.07 E2+M1 3.15 11 +172YB G 1019.23 0.17 10 +172YB G 1931.22 0.04 1 +172YB E 308. AP 5.2 2 7.01817 +172YB2 E CK= 0.7744 $CL= 0.17144 $CM+= 0.05415 $ +172YB L 2213.29 + +172YB G 512.78 (M1) 0.16 2 +172YB G 1040.91 (M1) 0.38 5 +172YB E 287. AP 0.54 6 7.93 5 +172YB2 E CK= 0.7686 $CL= 0.17571 $CM+= 0.05573 $ +172YB L 2285.20 (4)+ +172YB G 358.48 (M1) 0.12 1 +172YB G 422.97 0.17 2 +172YB G 482.13 (M1) 0.72 5 +172YB G 536.26 (M1) 0.70 4 +172YB G 584.60 0.37 5 +172YB G 644.40 0.24 6 +172YB G 1022.33 M1 1.48 6 +172YB G 1113.20 M1+E2 1.88 9 +172YB G 2024.90 0.05 2 +172YB E 215. AP 5.7 2 6.58716 +172YB2 E CK= 0.7369 $CL= 0.19880 $CM+= 0.06431 $ +172YB L 2343.64 (4,5+) +172YB G 594.56 (M1+E2) 0.58 7 +172YB G 967.50 (M1) 0.19 4 +172YB G 1080.81 (M1) 1.14 3 +172YB G 2082.66 (M1) 0.30 6 +172YB E 156. AP 2.2 1 6.62220 +172YB2 E CK= 0.6764 $CL= 0.24265 $CM+= 0.08090 $ + +242AM 242AM IT DECAY (141 Y) 85NDS 198508 +242AM N 1.0 0.995 2 +242AM L 0.0 1- 16.02 H 2 +242AM L 48.63 5 5- 141 Y 2 M1 +242AM G 48.63 5 E4 100 +242AM CG L1: L2: L3: M1: M2: M3: M4: M5: N1: N2: N3: N45: +242AM2CG O=<6: 17: 18:<2: 13: 10: 8: 10: <2: 6: 4: 8: AP 6. +242AM3CG Uncertainties on relative subshell intensities are AP 30% (1960AS05) +242AM CG E from 1960AS05 (s CE) +242AM CG M from L- and M- subshell ratios. + +126TE 126I EC DECAY 1977JA04 82NDS 198212 +126TE C 1977JA04: 127I(N,2N), COMPTON suppression spectrometer, semi G +126TE C Others: semi G: 1970GA32, 1970SI05, 1971MI20, 1971ZH01, 1972KA20, +126TE2C 1975OK04, 1976GR04; magnetic spectrometer: 1970GA32, 1971ZH01 +126TE C The decay scheme is that proposed by 1977JA04. +126TE2C Evaluators note that the 1396(0+), 1685(0+), 2601(0+) and +126TE3C 2051 states in 126TE in the decay proposed by 1971ZH01 +126TE4C have not been confirmed by 1975OK04, 1976GR04 or 1977JA04 +126TE C See also 126I B- decay +126TE CL J Spin and parity values are those given under adopted levels +126TE CG E From 1977JA04. The evaluators have added 10 EV in +126TE2CG quadrature to the uncertainties of 1977JA04 to account for +126TE3CG the uncertainty in calibration. +126TE CG RI From 1977JA04. +126TE CG I(G+-)/I(666G)=0.0587 18. +126TE N 0.0588 37 0.563 201.0 +126TE CN BR From I(B+)/I(B-)=0.028 1 (1955KO14), I(406B+)/I(1110B+)= +126TE2CN 0.29 1 (1955KO14, uncertainty assigned by evaluators), adopted +126TE3CN IG, EC/B-=1.27 10 (1955KO14, authors' value corrected by +126TE4CN evaluators for KC(137BA)=0.0916 and OMEGA(K) from 1972BB16), adopted +126TE5CN CC and EC/B+(GS)=23.1 5 (1U theory). +126I P 0.0 2- 13.02 D 7 2156 5 +126TE L 0.0 0+ +126TE E 1.7 3 39 7 9.13 8 41 7 1U +126TE2 E EAV= 530.2 22$CK= 0.8177 $CL= 0.11134 $CM+= 0.02952 $ +126TE L 666.34 1 2+ +126TE E 0.36 4 52 4 7.45 4 52 4 +126TE2 E EAV= 216.8 22$CK= 0.8494 $CL= 0.11368 $CM+= 0.03006 $ +126TE CE IB from B+(666 level)/B+(GS)=0.29 1 (1955KO14) +126TE G 666.331 12 1000 21 E2 0.00382 +126TE2 G KC=0.00325 +126TE L 1361.3 3 (4)+ +126TE E 0.0004 LE 12.34GE 0.0004 LE 1U +126TE2 E CK= 0.8383 $CL= 0.12742 13$CM+= 0.03433 4$ +126TE G 695.0 0.007 AP ? +126TE L 1420.17 2 2+ +126TE E 8 7 7.6 4 8 7 +126TE2 E CK= 0.8503 $CL= 0.11826 $CM+= 0.03145 $ +126TE G 753.819 13 125.8 26 (E2) 0.0028 +126TE G 1420.19 3 8.91 19 +126TE L 1873.1 3 0+ +126TE E 0.0008 2 10.1612 0.0008 2 1U +126TE2 E CK= 0.769 3$CL= 0.1799 20$CM+= 0.0512 7$ +126TE G 1206.8 3 0.014 4 +126TE L 2045.1 1 (2+,1) +126TE E 0.012 1 8.59 7 0.012 1 +126TE2 E CK= 0.771 7$CL= 0.179 5$CM+= 0.0505 15$ +126TE G 1378.76 0.072 5 +126TE G 2045.09 5 0.14 1 + +126XE 126I B- DECAY 1977JA04 82NDS 198212 +126XE C 1977JA04: 127I(N,2N), COMPTON suppression spectrometer, semi G +126XE C 1976SA28: 126TE(P,N) MS; GG(THETA,H,T) +126XE C See also 126I EC decay. Branching from 126I EC decay +126XE CG E From 1977JA04. The evaluators have added 10 EV in +126XE2CG quadrature to the uncertainties of 1977JA04 to account for +126XE3CG the uncertainty in calibration. +126XE CL J Spin and parity values are those given under adopted +126XE2CL levels +126XE CG M From GG(THETA) data (1959SA05, 1960AS04, 1971GR14, 1971TA04), +126XE2CG EKC and K/LM (1953MA59, 1955KO14) +126XE CG RI Relative to I(666.331G in 126TE)=1000 (1977JA04) +126XE N 0.0757 43 0.437 201.0 +126XE CN BR See 126I EC decay +126I P 0.0 2- 13.02 D 7 1251 5 +126XE L 0.0 0+ +126XE B 1250 10 18.3 7 10.1117 1U +126XE CB First-forbidden unique shape (1953MA59, 1955KO14) +126XE2 B EAV= 458.6 21$ +126XE L 388.633 11 2+ 41.3 PS 14 +126XE CL T1/2 from (B)(388.663G)(T) (1963DE21), G=0.22 5 +126XE B 865 5 73.4 7 8.20 5 +126XE CB Allowed shape (1955KO14) +126XE2 B EAV= 289.7 20$ +126XE G 388.633 11 1030 21 E2 0.0187 C +126XE2 G KC=0.0156$LC=0.00244$MC=0.00050$NC+=0.00012$ +126XE CG M from GG(THETA); EKC=0.016 2 (1953MA59); K/LM=6.7 10 +126XExCG (1955KO14) +126XE L 879.88 10 2+ +126XE B 385 5 8.3 7 7.89 5 +126XE CB E from BG-coin (1955KO14) +126XE2 B EAV= 108.9 17$ +126XE G 491.243 11 86.1 17M1+E2 +15 4 0.00944 C +126XE2 G KC=0.00798$LC=0.00116$MC=0.00024$ +126XE CG M from GG(THETA); EKC=0.0061 (1971ZH01); K/LM=6.3 10 (1965SA11) +126XE G 879.876 13 22.8 5 + + 57MN 57CR B- DECAY 1978DA04 86NDS 198601 + 57CR P 0 3/2-,5/2-,7/2- 21.1 S 10 4.8E+3 SY + 57MN C Measured G's, B's, 205.8G(T), and GG- and BG-coincidences; GELI, + 57MN2C scintillator; rabbit and helium-jet systems. 83G and 850G obscured by + 57MN3C contaminants from 56CR and 56MN. + 57MN CL Decay scheme constructed from GG-coincidence and singles data + 57MN CG Identification made by T1/2 or coincidence relationships + 57MN DB EAV CALCULATED BY EVALUATORS + 57MN CL E Calculated by evaluators using least-squares adjustment + 57MN2CL procedures; good agreement with 1978DA04. + 57MN DL DE GENERALLY SMALLER THAN THE 0.4 KEV ESTIMATED BY 1978DA04 FOR + 57MN2DL THE LOWER STATES AND LARGER FOR THE HIGHER STATES + 57MN CL J From adopted levels. Assignments suggested by 1978DA04 are + 57MN2CL given under comments. These suggested assignments are based on LOGFT + 57MN3CL and existence of G's with the assumption that JPI(57CR)=3/2-. The + 57MN4CL argument for JPI(57CR)=3/2- depends on the transition to the 2186 + 57MN5CL state. The evaluators do not adopt this argument since J(2186)=1/2 is + 57MN6CL based on a calculation (1978AN10) in (A,P) and DFT does not permit the + 57MN7CL statement that the transition is allowed. + 57MN DB E ENERGY CALIBRATION BY MEANS OF OTHER KNOWN BETA SPECTRA + 57MN2DB OBTAINED IN THE SAME BG MEASUREMENT + 57MN CB IB Calculated by evaluators from intensity balancing at each + 57MN2CB state, except as noted; in good agreement with 1978DA04 although DIB + 57MN3CB are generally higher here + 57MN CB LOGFT Calculated by evaluators based on Q-=4.8 MEV instead of + 57MN2CB 5.10 MEV 10; AP 0.1 to 0.3 lower than values given by 1978DA04 + 57MN CG RI Relative intensity. Some RI's had to be obtained from + 57MN2CG the 83G coincidence spectrum because of low intensity or interference + 57MN3CG from other lines in the singles spectrum + 57MN N 0.051 24 1 1 + 57MN CN NR From SUMOF RI(1+CC) to GS and IB(to GS)=74% 12 + 57MN CG CC Calculated by evaluators using adopted EG + 57MN DG KC,LC: CALCULATED BY EVALUATORS USING ADOPTED EG + 57MN CG M(A),CC(A)$Added by evaluators on basis of comment by 1978DA04 that, + 57MN2CG theoretically, there was 5% conversion for this GAMMA. + 57MN CB E(D) Q- obtained from these values is discrepant with value + 57MN2CB recommended by 1985WA02 + 57MN CB IB(B) As given by the 1978DA04. Evaluators note a possible + 57MN2CB intensity imbalance + 57MN CB IB(A) The ratio of accumulated 57CR to accumulated 57MN activity + 57MN2CB was obtained from the helium-jet run. SIGMA(57MN)/SIGMA(57CR) was + 57MN3CB used to obtain the GS feeding. DIB also reflects the uncertainty in + 57MN4CB the ratio of production SIGMA's. + 57MN L 0 5/2- + 57MN B 74 12 5.3 + 57MN2 B EAV AP 2.16E+3 + 57MN3 B FLAG=A + 57MN L 83.39 17 5/2-,7/2- + 57MN CL J 7/2- + 57MN B 0.7 LT 7.3 GT ? + 57MN2 B EAV AP 2.12E+3 + 57MN3 B FLAG=B + 57MN G 83.4 2 160 32 IF M1 0.0508 C + 57MN2 G KC= 0.0449 $LC=0.00443 + 57MN3 G FLAG=A + 57MN L 850.16 23 3/2- + 57MN B 2.6 22 6.4 + 57MN2 B EAV AP 1.75E+3 + 57MN G 766.5 5 6.7 16 + 57MN G 850.2 6 157 33 + 57MN L 1055.87 231/2-,3/2-,5/2- + 57MN CL J (1/2-) + 57MN B 2.1 11 6.5 + 57MN2 B EAV AP 1.65E+3 + 57MN G 205.8 3 56.2 35 + 57MN DG E NOTE APPARENT MISPRINT IN TABLE I OF 1978DA04 GIVING EG=105.8 + 57MN2DG (EVALUATORS) + 57MN G 1055.8 3 16.3 19 + 57MN L 1375.0 4 - + 57MN CL J 3/2,5/2 + 57MN B 0.4 3 7.9 + 57MN2 B EAV AP 1.49E+3 + 57MN G 1292.2 5 14.6 26 + 57MN L 1492.77 21 - + 57MN CL J 3/2,5/2 + 57MN B 0.8 5 6.6 + 57MN2 B EAV AP 1.44E+3 + 57MN G 1409.3 3 18.0 29 + 57MN G 1492.7 3 18.5 25 + 57MN L 1534.85 25 - + 57MN CL J LE 5/2- + 57MN B 3.54E+3 13 6. 3 5.7 C + 57MN2 B EAV AP 1.42E+3 + 57MN3 B FLAG=D + 57MN G 479.1 5 3.6 14 + 57MN G 684.1 5 10.5 42 + 57MN G 1535.0 3 94.7 64 C + 57MN L 1725.6 6 - + 57MN CL J 3/2,5/2 + 57MN B 0.21 13 7.1 + 57MN2 B EAV AP 1.33E+3 + 57MN G 1642.2 5 4.2 15 + 57MN L 1835.5 4 (5/2)- + 57MN B 3.28E+3 9 7. 4 5.4 C + 57MN2 B EAV AP 1.27E+3 + 57MN3 B FLAG=D + 57MN G 342.9 5 9.5 25 + 57MN G 1752.1 5 100 C + 57MN G 1835.2 6 26.8 24 + 57MN L 2146.9 9 + 57MN CL J 3/2,5/2 + 57MN B 0.22 13 6.7 + 57MN2 B EAV AP 1.12E+3 + 57MN G 2063.5 8 4.3 15 + 57MN L 2185.8 4 + 57MN CL J 1/2- + 57MN B 2.6 14 5.6 + 57MN2 B EAV AP 1.11E+3 + 57MN G 1129.9 3 27.1 25 + 57MN G 1335.7 5 23. 10 + 57MN L 2232.9 6 5/2-,7/2- + 57MN CL J (3/2-) + 57MN B 0.43 22 6.4 + 57MN2 B EAV AP 1.08E+3 + 57MN L 2340.6 4 5/2+,3/2+ + 57MN CL J 3/2,5/2 + 57MN B 0.24 21 6.5 + 57MN2 B EAV AP 1.03E+3 + 57MN G 2257.2 9 4.7 34 + 57MN L 2493.3 5 + 57MN CL J 3/2-,5/2- + 57MN B 1.7 8 5.6 + 57MN2 B EAV AP 9.6E+2 + 57MN G 2410.0 7 16.9 19 + 57MN G 2493.1 7 15.6 14 + 57MN L 2702.2 3 + 57MN CL J 3/2-,5/2- + 57MN B 2.5 3 5.2 + 57MN2 B EAV AP 8.6E+2 + 57MN G 1209.2 3 11.3 21 + 57MN G 1327.3 3 6.2 33 + 57MN G 1852.0 4 23.0 28 + 57MN G 2618.3 8 8.6 27 + + 57FE 57CO EC DECAY 86NDS 198601 + 57FE CL E Calculated by evaluators using least-squares adjustment + 57FE2CL procedures. Uncertainty in 198AU reference scale (+-1.1 EV) for + 57FE3CL 122G and 136G added in quadrature after adjustment + 57FE CL J From adopted levels. Results deduced from G(THETA,H,TEMP), + 57FE2CL GG(THETA), and CC's are consistent + 57FE CG See 1970RA51 for summary of conversion-electron + 57FE2CG ratio measurements (spectrometer, CE) from 1954AL06, 1955CO31, + 57FE3CG 1957BE45, 1960EW04, and 1967HA06. The ratios have also been measured + 57FE4CG by 1971PO05 (spectrometer, CE). These data were used in the present + 57FE5CG evaluation as noted below. Others: see 1981HAZY + 57FE CG $14.4G summary: EG: unweighted av of 2 LAMBDA measurements + 57FE2CG (1967BE65,1965BE41; moss,cryst), in good agreement with 14.4127 4 and + 57FE3CG 14.4147 25 obtained by 1976BO16 and 1972HE42, respectively, from a fit + 57FE4CG of EG(122G,136G) into level scheme. Note that these values are not + 57FE5CG consistent with 14.4050 6 from E(CEM1)=14.3134 2 (1971PO05). + 57FE6CG E(CE): E(CEK)=7.289 8 (1967HA06,spectrometer); 7.300 6 (1963TH04,pc). + 57FE7CG E(CEM1)=14.3134 2 ("METALLIC"), 14.3122 2 ("OXIDE"); + 57FE8CG E(CEN1)=14.4017 2 ("METALLIC"), 14.4005 2 ("OXIDE") (1971PO05, + 57FE9CG spectrometer). RI: from TI and CC. Other: 87 4 (1971KO19; GELI). + 57FEACG ECC: weighted av from 1963MU02 (spectrometer K/L), 1963TH04 + 57FEBCG (NAI,pc XG/G), 1965KI03 (NAI GG), 1967HA06 (spectrometer CEK/K-AUGER), + 57FECCG 1968RU04 (pc XX/XG), and 1971KO19 (GELI RI) as evaluated by 1984HAZS. + 57FEDCG See adopted gammas for final value recommended by 1984HAZS. Others: see + 57FEECG 1981HAZY. EKC: weighted av of data from 1963MU02, 1967HA06, 1968RU04, + 57FEFCG and thesis by ^N. Frani-coursol (UNIV. Paris). See adopted gammas for + 57FEGCG recommended value (1984HAZS). K:L:M+: unweighted av of 1957BE45, + 57FEHCG 1960EW04, 1963MU02, 1971PO05. Other: K/L+=100/12.1 6 (1967HA06). + 57FEICG L1/L23: other: 10.9 8 (1960EW04) + 57FE CG Chemical effects were observed in the spectral shapes and + 57FE2CG ratios of the outer-shell conversion electrons by 1971PO05, 1971PL10, + 57FE3CG and 1974FU15, among others. See 1984MA23 for calculations which + 57FE4CG included solid-state effects + 57FE CG 122G and 136G summary: MR(122G): weighted av of + 57FE2CG G(THETA,H,TEMP) (GELI); +0.120 2 (1972FO05), +0.116 1 (1973SC15), + 57FE3CG +0.1195 10 (1975CO22); and GG(THETA) (GELI), +0.120 4 (1972KR15). + 57FE4CG Others: 1972VI09, 1972NI01. ECC,EKC(122G,136G): from 1967HA06 + 57FE5CG (spectrometer, CE/pe). 1967MU20 excluded from consideration since the + 57FE6CG CEK were not completely separated and there appeared to be no + 57FE7CG separation of the higher shell electrons (1984HAZS). Others: 1984HAZS, + 57FE8CG 1981HAZY. K/L+(122G,136G): unweighted av of 1954AL06, 1957BE45, + 57FExCG 1965MO22, 1967HA06. + 57FE cG $"Shakeoff" measurements (1971Po04, spectrometer): 14.4|g: + 57FE2cG No KM observed (KM{-1}/ce(K)<1%; KM{-23}<4%). 122.1|g: + 57FE3cG |SKL/ce(K)=0.009 {I5}; E(KL{-3})=7905 eV {I+20-10}; + 57FE4cG 0.4|*10{+-4} Date: Wed, 3 Feb 2016 12:17:56 -0800 Subject: [PATCH 123/216] Updated bldhst test to be python3 compliant and added beginnings of tutorial for ensdf processing --- pyne/CMakeLists.txt | 8 ++-- pyne/ensdf_processing.py | 2 +- tests/test_ensdf_processing.py | 8 ++-- tutorial/11-ensdf-processing.ipynb | 64 ++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 tutorial/11-ensdf-processing.ipynb diff --git a/pyne/CMakeLists.txt b/pyne/CMakeLists.txt index ab40bd32e6..c263c0ab47 100644 --- a/pyne/CMakeLists.txt +++ b/pyne/CMakeLists.txt @@ -93,10 +93,10 @@ cython_add_module(ace ace.pyx) target_link_libraries(ace pyne) # enrichment -set_source_files_properties("${PROJECT_SOURCE_DIR}/pyne/enrichment.pyx" - PROPERTIES CYTHON_IS_CXX TRUE) -cython_add_module(enrichment enrichment.pyx) -target_link_libraries(enrichment pyne) +#set_source_files_properties("${PROJECT_SOURCE_DIR}/pyne/enrichment.pyx" +# PROPERTIES CYTHON_IS_CXX TRUE) +#cython_add_module(enrichment enrichment.pyx) +#target_link_libraries(enrichment pyne) # tally set_source_files_properties("${PROJECT_SOURCE_DIR}/pyne/tally.pyx" diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 716cc9e5a8..03c099200d 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -503,7 +503,7 @@ def radlist(inputdict_unchecked): """ exe_path = path_to_exe('radlist') radlist_url = "http://www.nndc.bnl.gov/nndcscr/ensdf_pgm/analysis/radlst/unx/radlist" - print exe_path + print(exe_path) verify_download_exe(exe_path, radlist_url, dl_size = 8704) inputdict = {} diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 426837b752..debf0e2d47 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -27,7 +27,7 @@ def test_bricc_interactive(): bricc_out_tmp = tmp_path + '/tmp_bricc_out.out' bricc_out_ref = 'ensdf_processing/bricc/ref_bricc_44.out' bricc_outfile = open(tmp_path + '/tmp_bricc_out.out', 'w+') - bricc_outfile.write(output_dict['bricc_output']) + bricc_outfile.write(output_dict['bricc_output'].decode('utf-8')) file_comp(bricc_out_tmp, bricc_out_ref,[]) cleanup_tmp() @@ -226,8 +226,8 @@ def file_comp(file_out, file_ref, exceptions): type 4: carriage return vs. non standard return type. options: line number of return. ''' - f_out = open(file_out, 'r') - f_ref = open(file_ref, 'r') + f_out = open(file_out, 'r',encoding="latin-1") + f_ref = open(file_ref, 'r',encoding="latin-1") diff_lines = numpy.array([]) line_num = 0 for line_out in f_out: @@ -262,10 +262,12 @@ def file_comp(file_out, file_ref, exceptions): # nose.runmodule() if __name__ == "__main__": + ''' alphad = test_alphad() gabs = test_gabs() bricc_1 = test_bricc_interactive() bricc_2 = test_bricc_evaluation() + ''' bldhst = test_bldhst() delta = test_delta() gtol = test_gtol() diff --git a/tutorial/11-ensdf-processing.ipynb b/tutorial/11-ensdf-processing.ipynb new file mode 100644 index 0000000000..738535346a --- /dev/null +++ b/tutorial/11-ensdf-processing.ipynb @@ -0,0 +1,64 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:bc655859e63ab1efb24ae93534e8fb9e9f6da26f3a5433df04653da34727fcc6" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "ENSDF Processing Tutorial" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ensdf_processing is a pyne module that contains ensdf evaluation tools. It includes ALPHAD, BRICC, DELTA, GABS, GTOL, BLDHST, HSICC, HSMRG, SEQHST, LOGFT, RADLIST, RADD and RULER. FUll documentation for the internal structure of each can be found at:\n", + "\n", + "http://www.nndc.bnl.gov/nndcscr/ensdf_pgm/analysis/\n", + "\n", + "Examples of the Python interface for these evaluation tools follows." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import pyne\n", + "from pyne import ensdf_processing" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "input_dict = {'Name': 'Jane', 'Age': 27};" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The spatial solver module takes in a dictionary that contains all of the input information required to run the solvers. There are many entries to allow a high degree of customization, not all of which are required. To find which entries are required, see the spatial solver documentation in the python api." + ] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file From d0cf4f881c9b4f6fede758704dc732e2d1f97734 Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 8 Feb 2016 23:43:06 -0800 Subject: [PATCH 124/216] Updated ensdf-processing tutorial --- tutorial/11-ensdf-processing.ipynb | 427 ++++++++++++++++++++++++++++- 1 file changed, 422 insertions(+), 5 deletions(-) diff --git a/tutorial/11-ensdf-processing.ipynb b/tutorial/11-ensdf-processing.ipynb index 738535346a..408731fff1 100644 --- a/tutorial/11-ensdf-processing.ipynb +++ b/tutorial/11-ensdf-processing.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:bc655859e63ab1efb24ae93534e8fb9e9f6da26f3a5433df04653da34727fcc6" + "signature": "sha256:1a50da1d9afdda202d13b5c0b8ea43a3752745791fd43ce273bb0163fa7b1f49" }, "nbformat": 3, "nbformat_minor": 0, @@ -36,14 +36,30 @@ ], "language": "python", "metadata": {}, - "outputs": [], - "prompt_number": 2 + "outputs": [ + { + "output_type": "stream", + "stream": "stderr", + "text": [ + "/home/josh/anaconda/lib/python2.7/site-packages/pyne-0.5.0_rc1-py2.7.egg/pyne/ensdf_processing.py:15: QAWarning: pyne.ensdf_processing is not yet QA compliant.\n", + " warn(__name__ + \" is not yet QA compliant.\", QAWarning)\n" + ] + } + ], + "prompt_number": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "All of the evaluation tools have a single dictionary parameter." + ] }, { "cell_type": "code", "collapsed": false, "input": [ - "input_dict = {'Name': 'Jane', 'Age': 27};" + "input_dict = {}" ], "language": "python", "metadata": {}, @@ -54,8 +70,409 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The spatial solver module takes in a dictionary that contains all of the input information required to run the solvers. There are many entries to allow a high degree of customization, not all of which are required. To find which entries are required, see the spatial solver documentation in the python api." + "This input dictionary must have all of the key-pair values specified in the documentation for the specific evaluation tool being run. In this example, alphad will be run, which requires the following keys: \n", + "* 'input_file'\n", + "* 'report_file'\n", + "* 'rewrite_input_with_hinderance_factor'\n", + "* 'output_file'." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "input_dict['input_file'] = 'ensdf_processing/alphad/ref_a228.ens'\n", + "input_dict['report_file'] = '/alphad.rpt'\n", + "input_dict['rewrite_input_with_hinderance_factor'] = 1\n", + "input_dict['output_file'] = '/alphad.out'\n", + "output_dict = ensdf_processing.alphad(input_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run the evaluation tool, call ensdf_processing.(dictionary)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "output_dict = ensdf_processing.alphad(input_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A dictionary is returned, with all the input key-pairs, as well as any other information the evaluation tool returns. In this case, no additional key-pair values have been added to the returned dictionary. Alphad wrote the resulting output file to '/alphad.out', and has a report file at 'alphad.rpt', both specified by the input dicitonary." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print(output_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "{'report_file': '/alphad.rpt', 'rewrite_input_with_hinderance_factor': 1, 'output_file': '/alphad.out', 'input_file': 'ensdf_processing/alphad/ref_a228.ens'}\n" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Following are examples of each of the evaluation tools packaged with PyNE:" + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "ALPHAD" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "input_dict = {}\n", + "input_dict['input_file'] = 'ensdf_processing/alphad/ref_a228.ens'\n", + "input_dict['report_file'] = '/tmp_alphad.rpt'\n", + "input_dict['rewrite_input_with_hinderance_factor'] = 1\n", + "input_dict['output_file'] = '/tmp_alphad.out'\n", + "output_dict = ensdf_processing.alphad(input_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 9 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "BRICC" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "input_dict = {}\n", + "input_dict['input_type'] = 'evaluation'\n", + "input_dict['input_file'] = 'ensdf_processing/bricc/ref_a228.ens'\n", + "input_dict['BrIccNH'] = 0\n", + "output_dict = ensdf_processing.bricc(input_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 11 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "BLDHST" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "input_dict = {}\n", + "input_dict['input_file'] = 'ensdf_processing/bldhst/ref_bldhst_iccseq.dat'\n", + "input_dict['output_table_file'] = '/tmp_bldhst_icctbl.dat'\n", + "input_dict['output_index_file'] = '/tmp_bldhst_iccndx.dat'\n", + "output_dict = ensdf_processing.bldhst(input_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 14 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "DELTA" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "input_dict = {}\n", + "input_dict['input_file'] = 'ensdf_processing/delta/ref_inp.dat'\n", + "input_dict['output_file'] = '/tmp_delta.dat'\n", + "output_dict = ensdf_processing.delta(input_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 36 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "GABS" ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "input_dict = {}\n", + "input_dict['input_file'] = 'ensdf_processing/gabs/ref_gabs_80Br.in'\n", + "input_dict['output_file'] = '/tmp_gabs_80Br.rpt'\n", + "input_dict['dataset_file'] = '/tmp_gabs_80Br.new'\n", + "output_dict = ensdf_processing.gabs(input_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 37 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "GTOL" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "input_dict = {}\n", + "input_dict['input_file'] = 'ensdf_processing/gtol/ref_gtol.inp'\n", + "input_dict['report_file'] = '/tmp_gtol.rpt'\n", + "input_dict['new_ensdf_file_with_results'] = 0\n", + "input_dict['output_file'] = '/tmp_gtol.out'\n", + "input_dict['supress_gamma_comparison'] = 1\n", + "input_dict['supress_intensity_comparison'] = 1\n", + "input_dict['dcc_theory_percent'] = 1.4\n", + "output_dict = ensdf_processing.gtol(input_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 38 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "HSICC" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "input_dict = {}\n", + "input_dict['data_deck'] = 'ensdf_processing/hsicc/ref_hsicc_data.tst'\n", + "input_dict['icc_index'] = 'ensdf_processing/hsicc/ref_hsicc_iccndx.dat'\n", + "input_dict['icc_table'] = 'ensdf_processing/hsicc/ref_hsicc_icctbl.dat'\n", + "input_dict['complete_report'] = '/tmp_out_hsicc_hscalc.lst'\n", + "input_dict['new_card_deck'] = '/tmp_out_hsicc_cards.new'\n", + "input_dict['comparison_report'] = '/tmp_out_hsicc_compar.lst'\n", + "input_dict['is_multipol_known'] = 'Y'\n", + "output_dict = ensdf_processing.hsicc(input_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 39 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "HSMRG" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "input_dict = {}\n", + "input_dict['data_deck'] = 'ensdf_processing/hsmrg/ref_hsmrg_data.tst'\n", + "input_dict['card_deck'] = 'ensdf_processing/hsmrg/ref_hsmrg_cards.new'\n", + "input_dict['merged_data_deck'] = '/tmp_out_cards.mrg'\n", + "output_dict = ensdf_processing.hsmrg(input_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 40 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "SEQHST" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "input_dict = {}\n", + "input_dict['binary_table_input_file'] = 'ensdf_processing/seqhst/ref_seqhst_icctbl.dat'\n", + "input_dict['sequential_output_file'] = '/tmp_out_iccseq.dat'\n", + "output_dict = ensdf_processing.seqhst(input_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 41 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "LOGFT" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "input_dict = {}\n", + "input_dict['input_data_set'] = 'ensdf_processing/logft/ref_logft.inp'\n", + "input_dict['output_report'] = '/tmp_logft.rpt'\n", + "input_dict['data_table'] = 'ensdf_processing/logft/ref_logft.dat'\n", + "input_dict['output_data_set'] = '/tmp_logft.new'\n", + "output_dict = ensdf_processing.logft(input_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 47 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "RADD" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "input_dict = {}\n", + "input_dict['atomic_number'] = '86'\n", + "input_dict['neutron_number'] = '113'\n", + "input_dict['output_file'] = 'tmp_output.out'\n", + "radd_output = ensdf_processing.radd(input_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 49 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "RADLIST" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "input_dict = {}\n", + "input_dict['output_radiation_listing'] = 'Y'\n", + "input_dict['output_ensdf_like_file'] = 'N'\n", + "input_dict['output_file_for_nudat'] = 'N'\n", + "input_dict['output_mird_listing'] = 'N'\n", + "input_dict['calculate_continua'] = 'N'\n", + "input_dict['input_file'] = 'ensdf_processing/radlst/ref_radlst.inp'\n", + "input_dict['output_radlst_file'] = '/tmp_radlst.rpt'\n", + "input_dict['input_radlst_data_table'] = 'ensdf_processing/radlst/ref_mednew.dat'\n", + "input_dict['output_ensdf_file'] = '/tmp_ensdf.rpt'\n", + "output_dict = ensdf_processing.radlist(input_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "/home/josh/anaconda/lib/python2.7/site-packages/pyne-0.5.0_rc1-py2.7.egg/pyne/radlist\n" + ] + } + ], + "prompt_number": 50 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "RULER" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "input_dict = {}\n", + "input_dict['input_file'] = 'ensdf_processing/ruler/ref_ruler.inp'\n", + "input_dict['output_report_file'] = '/tmp_ruler.rpt'\n", + "input_dict['mode_of_operation'] = 'R'\n", + "input_dict['assumed_dcc_theory'] = '1.4'\n", + "output_dict = ensdf_processing.ruler(input_dict)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 45 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] } ], "metadata": {} From bd68d8ac9a5e67710a78c6f1c9ca8c56ed802441 Mon Sep 17 00:00:00 2001 From: Lucas Jacobson Date: Thu, 11 Feb 2016 00:20:27 -0600 Subject: [PATCH 125/216] fix fortran compiler errors on condor --- src/ensdf_processing/ALPHAD/alphad.f | 3 +-- src/ensdf_processing/GTOL/gtol.f | 16 +++++++++------- src/ensdf_processing/nsdflib95.f | 7 +++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/ensdf_processing/ALPHAD/alphad.f b/src/ensdf_processing/ALPHAD/alphad.f index 29783a0bf6..ad1fc309cc 100755 --- a/src/ensdf_processing/ALPHAD/alphad.f +++ b/src/ensdf_processing/ALPHAD/alphad.f @@ -179,7 +179,6 @@ SUBROUTINE RUN_ALPHAD INTEGER(KIND=4), INTRINSIC :: INDEX, INT, LEN, MIN0, NINT, & & LEN_TRIM INTEGER(KIND=4), EXTERNAL :: INDEXF, IVLSTR, TYPSTR - REAL(KIND=4), INTRINSIC :: ALOG10 REAL(KIND=4), EXTERNAL :: VALSTR REAL(KIND=8), INTRINSIC :: DABS, DBLE, DMOD, DSQRT REAL(KIND=8), EXTERNAL :: DVALST @@ -931,7 +930,7 @@ SUBROUTINE RUN_ALPHAD & ' HF for alpha to', enxit(l), ' not saved.' ihf = ihf - 1 ELSE - sigdig = INT(ALOG10(hf(l))) + sigdig = INT(LOG10(hf(l))) IF(sigdig.GT.0) THEN sigdig = sigdig + 1 ELSE IF(sigdig.LE.0) THEN diff --git a/src/ensdf_processing/GTOL/gtol.f b/src/ensdf_processing/GTOL/gtol.f index d577eba7f9..f2c7eef54f 100644 --- a/src/ensdf_processing/GTOL/gtol.f +++ b/src/ensdf_processing/GTOL/gtol.f @@ -3945,6 +3945,7 @@ SUBROUTINE FNDLMT(X,Dx) ! Functions used ! REAL(KIND=4), INTRINSIC :: ABS + REAL(KIND=4), EXTERNAL :: REAL ! ! Dummy arguments ! @@ -3959,12 +3960,12 @@ SUBROUTINE FNDLMT(X,Dx) SIGma = Dx b2 = MU + 1.28*SIGma high = MU + 10.0*SIGma - CALL QROMB(0.0,high,denom) + CALL QROMB(REAL(0.0),high,denom) low = MU + 1.28*SIGma IF(low.LE.0.0) low = 5.0*SIGma counts = 1 DO WHILE (.TRUE.) - CALL QROMB(0.0,low,area) + CALL QROMB(REAL(0.0),low,area) prob = area/denom IF((prob.GE.0.899.AND.prob.LE.0.901).OR.counts.GT.100) THEN b1 = low @@ -4041,6 +4042,7 @@ SUBROUTINE QROMB(A,B,Ss) INTEGER(KIND=4), INTRINSIC :: INT REAL(KIND=4), INTRINSIC :: ABS, ALOG10 REAL(KIND=8), INTRINSIC :: DABS, DBLE + REAL(KIND=4), EXTERNAL :: REAL ! ! Local variables ! @@ -4059,7 +4061,7 @@ SUBROUTINE QROMB(A,B,Ss) jj = j CALL TRAPZD(A,B,s(j),jj) IF(j.GE.k) THEN - CALL POLINT(h(j-km),s(j-km),k,0.,Ss,dss) + CALL POLINT(h(j-km),s(j-km),k,REAL(0.),Ss,dss) ! Add check for when integral is zero IF(Ss.EQ.0..AND.dss.EQ.0.) RETURN ! IF(ABS(DSS) .LE. EPS*ABS(SS))RETURN @@ -4093,7 +4095,7 @@ SUBROUTINE TRAPZD(A,B,S,N) ! ! FUNCTIONS USED ! - REAL(KIND=4), INTRINSIC :: REAL + REAL(KIND=4), EXTERNAL :: REAL REAL(KIND=8), INTRINSIC :: DBLE ! ! Local variables @@ -4140,7 +4142,7 @@ SUBROUTINE POLINT(Xa,Ya,N,X,Y,Dy) ! Functions used ! INTEGER(KIND=4), INTRINSIC :: INT - REAL(KIND=4), INTRINSIC :: ABS, ALOG10, AMAX1, AMIN1 + REAL(KIND=4), INTRINSIC :: ABS, AMAX1, AMIN1 ! ! Local variables ! @@ -4169,8 +4171,8 @@ SUBROUTINE POLINT(Xa,Ya,N,X,Y,Dy) c(i) = Ya(i) d(i) = Ya(i) IF(Ya(i).NE.0.) THEN - maxyval = AMAX1(maxyval,ALOG10(ABS(Ya(i)))) - minyval = AMIN1(minyval,ALOG10(ABS(Ya(i)))) + maxyval = AMAX1(maxyval,LOG10(ABS(Ya(i)))) + minyval = AMIN1(minyval,LOG10(ABS(Ya(i)))) END IF END DO Y = Ya(ns) diff --git a/src/ensdf_processing/nsdflib95.f b/src/ensdf_processing/nsdflib95.f index 0b91ad8154..834d132065 100644 --- a/src/ensdf_processing/nsdflib95.f +++ b/src/ensdf_processing/nsdflib95.f @@ -2457,7 +2457,7 @@ FUNCTION GAMZ(X) ! ! Local variables ! - REAL(KIND=4),INTRINSIC :: AIMAG,ALOG,REAL + REAL(KIND=4),INTRINSIC :: AIMAG,REAL COMPLEX(KIND=4) :: c,xt,xtmp,z1,z2 COMPLEX(KIND=4),INTRINSIC :: CMPLX REAL(KIND=4) :: f1n,fn,pi,s,t @@ -2488,7 +2488,7 @@ FUNCTION GAMZ(X) z1 = z1*z2 END DO s = (fn**(REAL(X)-0.5))/(pi**m) - t = AIMAG(X)*ALOG(fn) + t = AIMAG(X)*LOG(fn) c = s*CMPLX(COS(t),SIN(t)) GAMZ = c*z1 END IF @@ -2600,7 +2600,6 @@ FUNCTION HYPERG(A,B,X) ! Local variables ! COMPLEX(KIND=4) :: apn,bpn,fn,t,test - REAL(KIND=4),INTRINSIC :: CABS INTEGER(KIND=4) :: n REAL(KIND=4),PARAMETER :: PREC = 1.0E-6 ! @@ -2622,7 +2621,7 @@ FUNCTION HYPERG(A,B,X) bpn = bpn + 1.0 test = t/HYPERG HYPERG = HYPERG + t - IF(CABS(test).LT.PREC)RETURN + IF(ABS(test).LT.PREC)RETURN END DO WRITE(6,1010) A,B,X,HYPERG,n 1010 FORMAT(' ERROR IN HYPERG'/4(5X,'(',E20.10,',',E20.10,')'/),I10) From 2b1d979b39ff99cc90f4cc70f362808244309e3b Mon Sep 17 00:00:00 2001 From: Elliott Biondo Date: Fri, 12 Feb 2016 12:16:27 -0600 Subject: [PATCH 126/216] Adding capabilitiy of printing photon source totals --- pyne/r2s.py | 27 +++++++++++++++++++++++++++ scripts/r2s.py | 16 ++++++++++++++-- tests/test_r2s.py | 13 ++++++++++++- 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/pyne/r2s.py b/pyne/r2s.py index 5c89f9ee6f..04a6402427 100644 --- a/pyne/r2s.py +++ b/pyne/r2s.py @@ -1,6 +1,7 @@ from os.path import isfile from warnings import warn from pyne.utils import QAWarning +import numpy as np from pyne.mesh import Mesh from pyne.mcnp import Meshtal @@ -138,3 +139,29 @@ def photon_sampling_setup(mesh, phtn_src, tags): photon_source_to_hdf5(phtn_src) h5_file = phtn_src + ".h5" photon_source_hdf5_to_mesh(mesh, h5_file, tags) + + +def total_photon_source_intensity(m, tag_name): + """This function reads mesh tagged with photon source densities and returns + the total photon emission desinty. + + Parameters + ---------- + m : PyNE Mesh + The mesh-based photon emission density distribution in p/cm3/s. + tag_name : str + The name of the tag on the mesh with the photon emission density information. + + Returns + ------- + intensity : float + The total photon emission density across the entire mesh (p/s). + """ + + sd_tag = m.mesh.getTagHandle(tag_name) + intensity = 0. + for idx, _, ve in m: + vol = m.elem_volume(ve) + ve_data = sd_tag[ve] + intensity += vol*np.sum(ve_data) + return intensity diff --git a/scripts/r2s.py b/scripts/r2s.py index bfb0d387f2..cac1583597 100644 --- a/scripts/r2s.py +++ b/scripts/r2s.py @@ -51,6 +51,9 @@ # The prefix of the .h5m files containing the source density distributations for # each decay time. output: source +# The name of the output files containing the total photon source intensities for +# each decay time +tot_phtn_src_intensities : total_photon_source_intensites.txt """ alara_params =\ @@ -66,7 +69,7 @@ output zone integrate_energy - photon_source fendl3bin phtn_src1 24 1.00E4 2.00E4 5.00E4 1.00E5 + photon_source fendl3bin phtn_src 24 1.00E4 2.00E4 5.00E4 1.00E5 2.00E5 3.00E5 4.00E5 6.00E5 8.00E5 1.00E6 1.22E6 1.44E6 1.66E6 2.00E6 2.50E6 3.00E6 4.00E6 5.00E6 6.50E6 8.00E6 1.00E7 1.20E7 1.40E7 2.00E7 @@ -142,16 +145,25 @@ def step2(): structured = config.getboolean('general', 'structured') decay_times = config.get('step2', 'decay_times').split(',') output = config.get('step2', 'output') + tot_phtn_src_intensities = config.get('step2', 'tot_phtn_src_intensities') + tag_name = "source_density" h5_file = 'phtn_src.h5' if not isfile(h5_file): photon_source_to_hdf5('phtn_src') + intensities = "Total photon source intensities (p/s)\n" for i, dc in enumerate(decay_times): print('Writing source for decay time: {0}'.format(dc)) mesh = Mesh(structured=structured, mesh='blank_mesh.h5m') - tags = {('TOTAL', dc): 'source_density'} + tags = {('TOTAL', dc): tag_name} photon_source_hdf5_to_mesh(mesh, h5_file, tags) mesh.mesh.save('{0}_{1}.h5m'.format(output, i+1)) + intensity = total_photon_source_intensity(m, tag_name) + intensities += "{0}: {1}".format(dc, intensity) + + with open(tot_phtn_src_intensities, 'r') as f: + f.write(intensities) + print('R2S step2 complete.') def main(): diff --git a/tests/test_r2s.py b/tests/test_r2s.py index e53bf20aef..149858bf45 100644 --- a/tests/test_r2s.py +++ b/tests/test_r2s.py @@ -20,7 +20,7 @@ from pyne.utils import QAWarning warnings.simplefilter("ignore", QAWarning) -from pyne.r2s import irradiation_setup, photon_sampling_setup +from pyne.r2s import irradiation_setup, photon_sampling_setup, total_photon_source_intensity from pyne.material import Material from pyne.mesh import Mesh, IMeshTag from pyne.mcnp import Meshtal @@ -275,3 +275,14 @@ def test_photon_sampling_setup_unstructured(): for i, mat, ve in m: assert_array_equal(m.tag1[i], exp_tag1[i]) assert_array_equal(m.tag2[i], exp_tag2[i]) + + +def test_total_photon_source_intensity(): + + m = Mesh(structured = True, structured_coords=[[0, 1, 2],[0, 1, 3], [0, 1]]) + m.source_density = IMeshTag(2, float) + m.source_density[:] = [[1., 2.], [3., 4.], [5., 6.], [7., 8.]] + + intensity = total_photon_source_intensity(m, "source_density") + assert_equal(intensity, 58) + From abd3a3d98bbe6eb513aaf3c63b5743e5ea521c1a Mon Sep 17 00:00:00 2001 From: Elliott Biondo Date: Fri, 12 Feb 2016 14:53:20 -0600 Subject: [PATCH 127/216] Automatic printing of e_bounds file --- docs/usersguide/r2s.rst | 10 ++++++---- pyne/alara.py | 28 ++++++++++++++++++++++++++++ scripts/r2s.py | 20 +++++++++++++++----- tests/test_alara.py | 13 ++++++++++++- 4 files changed, 61 insertions(+), 10 deletions(-) diff --git a/docs/usersguide/r2s.rst b/docs/usersguide/r2s.rst index cfb858066f..ddca514c5b 100755 --- a/docs/usersguide/r2s.rst +++ b/docs/usersguide/r2s.rst @@ -105,11 +105,13 @@ decay time. These files will be named like: source_1.h5m, source_2.h5m ... source_N.h5m -These files can now be used as sources -for photon transport within MCNP. Information on compiling a version of MCNP5 -that can utilize these sources is found in the PyNE user's guide entry on +An "e_bounds" file containing the photon lower and upper energy bounds will also be generated. +These source files, combined with the "e_bounds" file can now be used as sources +for photon transport within MCNP. Information on compiling/using a version of MCNP5 +that can utilize these mesh-based sources is found in the PyNE user's guide entry on `mesh-based source sampling `_. -Note the each of these source files must be renamed to "source.h5m" for this purpose. By using these sources for photon transport, the shutdown dose rate can be obtained as a final answer. +Note that each of these source files must be renamed to "source.h5m" for this purpose. +By using these sources for photon transport, the shutdown dose rate can be obtained. Tally results will have to be normalized by the total photon source intentity. This information is found in the "total_photon_source_intensites.txt" file printed out by r2s.py step2. ********** References diff --git a/pyne/alara.py b/pyne/alara.py index 8885d40e7d..ae39fadc81 100644 --- a/pyne/alara.py +++ b/pyne/alara.py @@ -534,6 +534,34 @@ def irradiation_blocks(material_lib, element_lib, data_library, cooling, return s +def phtn_src_energy_bounds(input_file): + """Reads an ALARA input file and extracts the energy bounds from the + photon_source block. + + Parameters + ---------- + input_file : str + The ALARA input file name, which must contain a photon_source block. + + Returns + ------- + e_bounds : list of floats + The lower and upper energy bounds for the photon_source discretization. + """ + phtn_src_lines = "" + with open(input_file, 'r') as f: + line = f.readline() + while not (' photon_source ' in line and line.strip()[0] != "#"): + line = f.readline() + num_groups = float(line.split()[3]) + upper_bounds = [float(x) for x in line.split()[4:]] + while len(upper_bounds) < num_groups: + line = f.readline() + upper_bounds += [float(x) for x in line.split("#")[0].split('end')[0].split()] + e_bounds = [0.] + upper_bounds + return e_bounds + + def _build_matrix(N): """ This function builds burnup matrix, A. Decay only. """ diff --git a/scripts/r2s.py b/scripts/r2s.py index cac1583597..577e1eb1a8 100644 --- a/scripts/r2s.py +++ b/scripts/r2s.py @@ -5,8 +5,10 @@ from pyne.mesh import Mesh from pyne.dagmc import cell_materials, load -from pyne.r2s import irradiation_setup, photon_sampling_setup -from pyne.alara import photon_source_to_hdf5, photon_source_hdf5_to_mesh +from pyne.r2s import irradiation_setup, photon_sampling_setup,\ + total_photon_source_intensity +from pyne.alara import photon_source_to_hdf5, photon_source_hdf5_to_mesh,\ + phtn_src_energy_bounds from pyne.mcnp import Meshtal config_filename = 'config.ini' @@ -69,6 +71,7 @@ output zone integrate_energy + # Energy group upper bounds. The lower bound is always zero. photon_source fendl3bin phtn_src 24 1.00E4 2.00E4 5.00E4 1.00E5 2.00E5 3.00E5 4.00E5 6.00E5 8.00E5 1.00E6 1.22E6 1.44E6 1.66E6 2.00E6 2.50E6 3.00E6 4.00E6 5.00E6 6.50E6 8.00E6 1.00E7 1.20E7 @@ -158,12 +161,19 @@ def step2(): tags = {('TOTAL', dc): tag_name} photon_source_hdf5_to_mesh(mesh, h5_file, tags) mesh.mesh.save('{0}_{1}.h5m'.format(output, i+1)) - intensity = total_photon_source_intensity(m, tag_name) - intensities += "{0}: {1}".format(dc, intensity) + intensity = total_photon_source_intensity(mesh, tag_name) + intensities += "{0}: {1}\n".format(dc, intensity) - with open(tot_phtn_src_intensities, 'r') as f: + with open(tot_phtn_src_intensities, 'w') as f: f.write(intensities) + e_bounds = phtn_src_energy_bounds(alara_geom) + e_bounds_str = "" + for e in e_bounds: + e_bounds_str += "{0}\n".format(e) + with open("e_bounds", 'r') as f: + f.write(e_bounds_str) + print('R2S step2 complete.') def main(): diff --git a/tests/test_alara.py b/tests/test_alara.py index 93c7993335..b4c0b1a615 100644 --- a/tests/test_alara.py +++ b/tests/test_alara.py @@ -27,7 +27,7 @@ from pyne.material import Material from pyne.alara import mesh_to_fluxin, photon_source_to_hdf5, \ photon_source_hdf5_to_mesh, mesh_to_geom, num_density_to_mesh, \ - irradiation_blocks, record_to_geom + irradiation_blocks, record_to_geom, phtn_src_energy_bounds thisdir = os.path.dirname(__file__) @@ -429,3 +429,14 @@ def test_irradiation_blocks(): assert_equal(act, exp) +def test_phtn_src_energy_bounds(): + + input_file = os.path.join(thisdir, "files_test_alara", + "alara_other_blocks.txt") + e_bounds = phtn_src_energy_bounds(input_file) + expected_e_bounds = [0, 1.00E4, 2.00E4, 5.00E4, 1.00E5, 2.00E5, 3.00E5, + 4.00E5, 6.00E5, 8.00E5, 1.00E6, 1.22E6, 1.44E6, 1.66E6, + 2.00E6, 2.50E6, 3.00E6, 4.00E6, 5.00E6, 6.50E6, 8.00E6, + 1.00E7, 1.20E7, 1.40E7, 2.00E7] + + assert_array_equal(e_bounds, expected_e_bounds) From c5a0b01ad5af22bb49075d7427d7c059e7cf9aa1 Mon Sep 17 00:00:00 2001 From: Elliott Biondo Date: Fri, 12 Feb 2016 15:15:26 -0600 Subject: [PATCH 128/216] Minor errors --- scripts/r2s.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/r2s.py b/scripts/r2s.py index 577e1eb1a8..00b6b590ea 100644 --- a/scripts/r2s.py +++ b/scripts/r2s.py @@ -167,11 +167,11 @@ def step2(): with open(tot_phtn_src_intensities, 'w') as f: f.write(intensities) - e_bounds = phtn_src_energy_bounds(alara_geom) + e_bounds = phtn_src_energy_bounds("alara_geom") e_bounds_str = "" for e in e_bounds: e_bounds_str += "{0}\n".format(e) - with open("e_bounds", 'r') as f: + with open("e_bounds", 'w') as f: f.write(e_bounds_str) print('R2S step2 complete.') From 5cc908ce3211b4413f85871da6b5533c6b9724e9 Mon Sep 17 00:00:00 2001 From: Elliott Biondo Date: Fri, 12 Feb 2016 19:56:24 -0600 Subject: [PATCH 129/216] Forgot to commit file --- tests/files_test_alara/alara_other_blocks.txt | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 tests/files_test_alara/alara_other_blocks.txt diff --git a/tests/files_test_alara/alara_other_blocks.txt b/tests/files_test_alara/alara_other_blocks.txt new file mode 100644 index 0000000000..ad45578d13 --- /dev/null +++ b/tests/files_test_alara/alara_other_blocks.txt @@ -0,0 +1,36 @@ +material_lib alara_matlib +element_lib nuclib +data_library alaralib fendl3bin + +cooling + 1E3 s + 12 h + 3.0 d +end + +output zone + integrate_energy + # Energy group upper bounds. The lower bound is always zero. + photon_source fendl3bin phtn_src 24 1.00E4 2.00E4 5.00E4 1.00E5 + 2.00E5 3.00E5 4.00E5 6.00E5 8.00E5 1.00E6 1.22E6 1.44E6 1.66E6 + 2.00E6 2.50E6 3.00E6 4.00E6 5.00E6 6.50E6 8.00E6 1.00E7 1.20E7 + 1.40E7 2.00E7 +end + +# flux name fluxin file norm shift unused +flux my_flux alara_fluxin 1e10 0 default + +# Specify the irradiation schedule below. +# Syntax is found in the ALARA user manual +# This example is for a single 3.5 h pulse +schedule my_schedule + 3.5 d my_flux my_pulse_history 0 s +end +pulsehistory my_pulse_history + 1 0.0 s +end + +#other parameters +truncation 1e-12 +impurity 5e-6 1e-3 +dump_file dump.file From 5c9590f7ac2dd86280de5bb3d655ee1461686d1a Mon Sep 17 00:00:00 2001 From: Elliott Biondo Date: Fri, 12 Feb 2016 22:33:59 -0600 Subject: [PATCH 130/216] Fixing ipython notebooks --- docs/devsguide/website.rst | 2 ++ docs/sphinxext/notebook_sphinxext.py | 8 ++------ docs/usersguide/index.rst | 1 + readme.rst | 1 + 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/devsguide/website.rst b/docs/devsguide/website.rst index 455bbda85e..6349f992c0 100644 --- a/docs/devsguide/website.rst +++ b/docs/devsguide/website.rst @@ -12,6 +12,8 @@ Building the website/documentation requires the following: #. `sphinxcontrib-bibtex `_ #. `PrettyTable `_ #. `Cloud Sphinx Theme `_ + #. `jupyter `_ + ----------------------------------- Procedure for modifying the website diff --git a/docs/sphinxext/notebook_sphinxext.py b/docs/sphinxext/notebook_sphinxext.py index d5a1043e06..91b526ad3d 100644 --- a/docs/sphinxext/notebook_sphinxext.py +++ b/docs/sphinxext/notebook_sphinxext.py @@ -12,11 +12,7 @@ from docutils.parsers.rst.roles import set_classes from docutils.transforms import misc -try: - from IPython.nbconver.exporters import html -except ImportError: - from IPython.nbconvert import html - +from nbconvert import HTMLExporter class Notebook(Directive): """Use nbconvert to insert a notebook into the environment. @@ -47,7 +43,7 @@ def run(self): nb_path = utils.relative_path(None, nb_path) # convert notebook to html - exporter = html.HTMLExporter(template_file='full') + exporter = HTMLExporter(template_file='full') output, resources = exporter.from_filename(nb_path) header = output.split('', 1)[1].split('',1)[0] body = output.split('', 1)[1].split('',1)[0] diff --git a/docs/usersguide/index.rst b/docs/usersguide/index.rst index fa4d86fe26..3706c22c2d 100644 --- a/docs/usersguide/index.rst +++ b/docs/usersguide/index.rst @@ -21,4 +21,5 @@ essential aspects of using PyNE to do nuclear engineering. stlcontainers jsoncpp spatialsolver + r2s source_sampling diff --git a/readme.rst b/readme.rst index c42361d4ca..1ddc0e0c2b 100644 --- a/readme.rst +++ b/readme.rst @@ -49,6 +49,7 @@ Additionally, building the documentation requires the following: #. `sphinxcontrib-bibtex `_ #. `PrettyTable `_ #. `numpydoc `_ + #. `jupyter `_ Most of the dependencies are readily available through package managers. From 4417ab7334bfdfb7a4659b5350246a6cadb3abef Mon Sep 17 00:00:00 2001 From: josh Date: Sat, 13 Feb 2016 18:59:47 -0800 Subject: [PATCH 131/216] Updated bricc tests --- tests/ensdf_processing/bricc/ref_235PU | 60 ++++++++++++++++++++++++++ tests/test_ensdf_processing.py | 4 +- tutorial/98AK04.in | 1 + tutorial/ELE.in | 1 + 4 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 tests/ensdf_processing/bricc/ref_235PU create mode 120000 tutorial/98AK04.in create mode 120000 tutorial/ELE.in diff --git a/tests/ensdf_processing/bricc/ref_235PU b/tests/ensdf_processing/bricc/ref_235PU new file mode 100644 index 0000000000..1eecc759a7 --- /dev/null +++ b/tests/ensdf_processing/bricc/ref_235PU @@ -0,0 +1,60 @@ +235PU ADOPTED LEVELS, GAMMAS 14NDS 201411 +235PU H TYP=FUL$AUT=E. BROWNE, J. K. TULI$CIT=NDS 122, 205 (2014)$ +235PU2 H CUT=1-Feb-2014$ +235PU Q -2442 56 6237 22 5062 22 5951 20 2012WA38 +235PU CL BAND(A) 5/2(633) +235PU XA235AM EC DECAY +235PU L 0 (5/2+) 25.3 M 5 A +235PUX L XREF=A +235PU cL T$weighted average of 25.6 min {I1} (1973Ja03), 25.9 min {I1} +235PU2cL (1971Ke22), 24.3 min {I1} (1971Go01). Other values: 26 min {I2} +235PU3cL (1957Th10), 25 min {I4} (1996Gu11), 26 min {I2} (1952Or03). +235PU4cL Calculated T{-1/2}(SF): 1991Bh04, 2013BeZU +235PU cL J$log| {Ift}=5.4 to g.s. (J|p=5/2+) and log| {Ift}=5.5 to 34-keV level +235PU2cL (J|p=(7/2+)) in {+235}Np from {+235}Pu |e decay. Systematics of +235PU3cL Nilsson configuration assignments in this region suggests J|p=5/2+. +235PU2 L %EC+%B+=99.9972 7$ %A=0.0028 7 +235PU cL %A$from T{-1/2}(|a)=1.7 y {I4} (1957Th10) and adopted T{-1/2}=25.3 min +235PUxcL {I5}. +235PU cL J$Configuration=|n5/2[633] +235PU L 41.90 19 (7/2+) A +235PUX L XREF=A +235PU cL $Configuration=|n5/2[633] +235PU G 41.9 S +235PU L 183.70 17 (3/2+) +235PUX L XREF=A +235PU cL $Suggested configuration=|n1/2[631] +235PU G 183.7 2 100 M1+E2 +235PU L 265.37 16 (5/2+) +235PUX L XREF=A +235PU cL $Suggested configuration=|n3/2[631] +235PU G 223.5 2 10022 +235PU G 265.3 2 8319 +235PU L 290.53 16 (5/2-) +235PUX L XREF=A +235PU cL $Suggested Configuration=|n5/2[752] +235PU G 248.6 2 19 8 +235PU G 290.6 2 10014 +235PU L 535.10 17 (5/2+) +235PUX L XREF=A +235PU cL $Suggested Configuration=|n5/2[622] +235PU G 244.6 2 3416 +235PU G 269.7 2 1.0E2 3 +235PU G 351.4 2 7924 +235PU L 639.1 3 +235PUX L XREF=A +235PU G 373.7 2 100 +235PU L 825.9 3 +235PUX L XREF=A +235PU G 642.2 2 100 +235PU L 1029.5 3 +235PUX L XREF=A +235PU G 739.0 2 100 +235PU L 1118.8 3 +235PUX L XREF=A +235PU L 3.0E+3 2 25 NS 5 M1 +235PU2 L %SF LE 100 +235PU cL E,T$from 1969Me11, 1970Bu02, 1972Ga42 +235PU2cL T{-1/2}|?23 ns in {+233}U(|a,2n) and T{-1/2}=18 ns {I9} in +235PU3cL {+234}U({+3}He,2n) (1978SoZP) + diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index debf0e2d47..6ac14075c0 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -35,7 +35,7 @@ def test_bricc_evaluation(): create_tmp() input_dict = {} input_dict['input_type'] = 'evaluation' - input_dict['input_file'] = 'ensdf_processing/bricc/ref_a228.ens' + input_dict['input_file'] = 'ensdf_processing/bricc/ref_235PU' input_dict['BrIccNH'] = 0 output_dict = ensdf_processing.bricc(input_dict) #bricc_out_tmp = tmp_path + '/tmp_bricc_out.out' @@ -262,12 +262,10 @@ def file_comp(file_out, file_ref, exceptions): # nose.runmodule() if __name__ == "__main__": - ''' alphad = test_alphad() gabs = test_gabs() bricc_1 = test_bricc_interactive() bricc_2 = test_bricc_evaluation() - ''' bldhst = test_bldhst() delta = test_delta() gtol = test_gtol() diff --git a/tutorial/98AK04.in b/tutorial/98AK04.in new file mode 120000 index 0000000000..bcc0027dd0 --- /dev/null +++ b/tutorial/98AK04.in @@ -0,0 +1 @@ +/home/josh/anaconda/lib/python2.7/site-packages/pyne-0.5.0_rc1-py2.7.egg/pyne/98AK04.in \ No newline at end of file diff --git a/tutorial/ELE.in b/tutorial/ELE.in new file mode 120000 index 0000000000..b3a580002e --- /dev/null +++ b/tutorial/ELE.in @@ -0,0 +1 @@ +/home/josh/anaconda/lib/python2.7/site-packages/pyne-0.5.0_rc1-py2.7.egg/pyne/ELE.in \ No newline at end of file From 1cc864211ec7e35d59c652015e214b01c6ac7e9d Mon Sep 17 00:00:00 2001 From: josh Date: Sat, 13 Feb 2016 19:00:13 -0800 Subject: [PATCH 132/216] Reverted temporary change --- pyne/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyne/CMakeLists.txt b/pyne/CMakeLists.txt index c263c0ab47..ab40bd32e6 100644 --- a/pyne/CMakeLists.txt +++ b/pyne/CMakeLists.txt @@ -93,10 +93,10 @@ cython_add_module(ace ace.pyx) target_link_libraries(ace pyne) # enrichment -#set_source_files_properties("${PROJECT_SOURCE_DIR}/pyne/enrichment.pyx" -# PROPERTIES CYTHON_IS_CXX TRUE) -#cython_add_module(enrichment enrichment.pyx) -#target_link_libraries(enrichment pyne) +set_source_files_properties("${PROJECT_SOURCE_DIR}/pyne/enrichment.pyx" + PROPERTIES CYTHON_IS_CXX TRUE) +cython_add_module(enrichment enrichment.pyx) +target_link_libraries(enrichment pyne) # tally set_source_files_properties("${PROJECT_SOURCE_DIR}/pyne/tally.pyx" From 18465272ab1979cc0048b6930f3062577a5da2ff Mon Sep 17 00:00:00 2001 From: josh Date: Sat, 13 Feb 2016 19:08:36 -0800 Subject: [PATCH 133/216] Removed ELE.in & 98AK.. from tutorial folder --- tutorial/98AK04.in | 1 - tutorial/ELE.in | 1 - 2 files changed, 2 deletions(-) delete mode 120000 tutorial/98AK04.in delete mode 120000 tutorial/ELE.in diff --git a/tutorial/98AK04.in b/tutorial/98AK04.in deleted file mode 120000 index bcc0027dd0..0000000000 --- a/tutorial/98AK04.in +++ /dev/null @@ -1 +0,0 @@ -/home/josh/anaconda/lib/python2.7/site-packages/pyne-0.5.0_rc1-py2.7.egg/pyne/98AK04.in \ No newline at end of file diff --git a/tutorial/ELE.in b/tutorial/ELE.in deleted file mode 120000 index b3a580002e..0000000000 --- a/tutorial/ELE.in +++ /dev/null @@ -1 +0,0 @@ -/home/josh/anaconda/lib/python2.7/site-packages/pyne-0.5.0_rc1-py2.7.egg/pyne/ELE.in \ No newline at end of file From 4fd418b7ded5d4356049645fb0fcee6b7274a20d Mon Sep 17 00:00:00 2001 From: Elliott Biondo Date: Sun, 14 Feb 2016 12:55:35 -0600 Subject: [PATCH 134/216] Build script instructions --- docs/install/ubuntu.rst | 6 +++--- readme.rst | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/install/ubuntu.rst b/docs/install/ubuntu.rst index af1c080c95..739d1661b5 100644 --- a/docs/install/ubuntu.rst +++ b/docs/install/ubuntu.rst @@ -4,6 +4,6 @@ Ubuntu build script ================================= -A script for installing PyNE and all its dependencies from scratch on Ubuntu -14.04 - 14.10 is found `here -`_ +Scripts for installing PyNE and all its dependencies from scratch on Ubuntu +14.04 - 15.04 are found `here +`_. diff --git a/readme.rst b/readme.rst index 9727c353fe..285cc55938 100644 --- a/readme.rst +++ b/readme.rst @@ -210,9 +210,9 @@ Once those lines have been added, run the following command before running Ubuntu 14.04 Build script ^^^^^^^^^^^^^^^^^^^^^^^^^ -A script for installing PyNE and all its dependencies from scratch on Ubuntu -15.04 is found `here -`_ +Scripts for installing PyNE and all its dependencies from scratch on Ubuntu +14.04 - 15.04 are found `here +`_. .. install-end From 81e756f97c511d6fb1c49494109c7debe55e0079 Mon Sep 17 00:00:00 2001 From: Elliott Biondo Date: Sun, 14 Feb 2016 14:07:18 -0600 Subject: [PATCH 135/216] Ubuntu build scripts --- readme.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.rst b/readme.rst index 285cc55938..e7eba33538 100644 --- a/readme.rst +++ b/readme.rst @@ -207,7 +207,7 @@ Once those lines have been added, run the following command before running ^^^^^^^^^^^^^^^^^^^^^^^^^ -Ubuntu 14.04 Build script +Ubuntu Build Scripts ^^^^^^^^^^^^^^^^^^^^^^^^^ Scripts for installing PyNE and all its dependencies from scratch on Ubuntu From eaa49d721884a286b2c4c2d919ad605e7c261ef5 Mon Sep 17 00:00:00 2001 From: qingquan Date: Mon, 15 Feb 2016 17:35:59 -0600 Subject: [PATCH 136/216] add fortran reader to mcnp.py --- pyne/mcnp.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/pyne/mcnp.py b/pyne/mcnp.py index d91949483f..4af52e4f59 100755 --- a/pyne/mcnp.py +++ b/pyne/mcnp.py @@ -19,7 +19,7 @@ import linecache import datetime from warnings import warn - +from fortranformat import FortranRecordReader import numpy as np import tables @@ -61,7 +61,13 @@ def read(self, filename): self.f = open(filename, 'r') # get code name, version, date/time, etc - words = self.f.readline().split() + # using fortran format + + words = self.f.readline() + # specify fortran format for code name, version,date/time, etc + ff=FortranRecordReader() + words=ff.read(words) + self.code_name = words[0] self.code_version = words[1] self.code_date = words[2] @@ -74,7 +80,10 @@ def read(self, filename): self.comment = self.f.readline().strip() # read tally line - words = self.f.readline().split() + words = self.f.readline() + # specify fortran format for tally line + ff=FortranRecordReader() + words=ff.read(words) self.n_tallies = words[1] if len(words) > 2: # perturbation tallies present @@ -88,7 +97,10 @@ def read(self, filename): pass # read kcode information - words = self.f.readline().split() + # specify fortran format for kcode info + words = self.f.readline() + ff=FortranRecordReader() + words=ff.read(words) self.n_cycles = int(words[1]) self.n_inactive = int(words[2]) vars_per_cycle = int(words[3]) From 833254b8b5f380e723799755004a5d169e995852 Mon Sep 17 00:00:00 2001 From: wangqingquan Date: Tue, 16 Feb 2016 11:51:20 -0600 Subject: [PATCH 137/216] add some fortran specifier to mcnp.py --- pyne/mcnp.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pyne/mcnp.py b/pyne/mcnp.py index 4af52e4f59..e17aba0233 100755 --- a/pyne/mcnp.py +++ b/pyne/mcnp.py @@ -65,7 +65,7 @@ def read(self, filename): words = self.f.readline() # specify fortran format for code name, version,date/time, etc - ff=FortranRecordReader() + ff=FortranRecordReader('(2A8,A19,I5,I11,I15)') words=ff.read(words) self.code_name = words[0] @@ -77,12 +77,14 @@ def read(self, filename): self.n_prn = int(words[6]) # comment line of input file - self.comment = self.f.readline().strip() - + # self.comment = self.f.readline().strip() + ff=FortranRecordReader('(1X,A79)') + words=self.f.readline() + self.comment= ff.read(words) # read tally line words = self.f.readline() # specify fortran format for tally line - ff=FortranRecordReader() + ff=FortranRecordReader('(A4,I6,1X,A5,I6)') words=ff.read(words) self.n_tallies = words[1] if len(words) > 2: @@ -90,7 +92,9 @@ def read(self, filename): pass # read tally numbers - tally_nums = [int(i) for i in self.f.readline().split()] + ff=FortranRecordReader('(16I5)') + # ??????? + tally_nums = [int(i) for i in ff.read(self.f.readline())] # read tallies for i_tal in tally_nums: From dfcabadb68a29806f7af81f21651470b736a89b4 Mon Sep 17 00:00:00 2001 From: josh Date: Sun, 21 Feb 2016 17:07:10 -0800 Subject: [PATCH 138/216] Removed unnessesary parenthases --- pyne/ensdf_processing.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 03c099200d..1b934228fd 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -66,12 +66,12 @@ def alphad(inputdict_unchecked): report_file = inputdict_unchecked['report_file'] rewrite_hinderance = inputdict_unchecked['rewrite_input_with_hinderance_factor'] output_file = 'alphad.out' - if(rewrite_hinderance == 1): + if rewrite_hinderance == 1: output_file = inputdict_unchecked['output_file'] #output file if report = yes exe_path = path_to_exe('alphad') proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) inp = input_file + '\n' + report_file + '\n' + 'Y' + '\n' - if (rewrite_hinderance == 1): + if rewrite_hinderance == 1: inp = inp + 'Y' + '\n' + output_file else: inp = inp + 'N' + '\n' @@ -100,7 +100,9 @@ def bricc(inputdict_unchecked): output_file_directory : string, the directory all produced bricc output files will be located. bricc_output : string, Only for interactive use: data printed to command line. - NOTE: + + Notes + ----- All the various ouptput files bricc can generate are found in the output_file_directory """ @@ -120,17 +122,17 @@ def bricc(inputdict_unchecked): input_type = inputdict_unchecked['input_type'] output_dict = inputdict_unchecked - if(input_type == 'interactive'): + if input_type == 'interactive': input_element = inputdict_unchecked['element'] inp = input_element + '\n' + 'exit' + '\n' proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) proc.stdin.write(inp.encode('utf-8')) output_dict['bricc_output'] = proc.communicate()[0] proc.stdin.close() - elif(input_type == 'evaluation'): + elif input_type == 'evaluation': input_file = inputdict_unchecked['input_file'] briccnh = inputdict_unchecked['BrIccNH'] - if(briccnh): + if briccnh: proc = subprocess.Popen([exe_path, input_file, 'BrIccNH'],stdout=subprocess.PIPE,stdin=subprocess.PIPE) proc.stdin.close() else: @@ -271,15 +273,15 @@ def gtol(inputdict_unchecked): exe_path = path_to_exe('gtol') proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) inp = input_file + '\n' + report_file + '\n' - if (new_out): + if new_out: inp = inp + 'Y' + '\n' + output_file + '\n' else: inp = inp + 'N' + '\n' - if (supress_g): + if supress_g: inp = inp + 'Y' + '\n' else: inp = inp + 'N' + '\n' - if(supress_ic): + if supress_ic: inp = inp + 'Y' + '\n' else: inp = inp + 'N' + '\n' + dcc_theory + '\n' From 70187541cecb5daa270a1a1b708235fa134938a7 Mon Sep 17 00:00:00 2001 From: josh Date: Sun, 21 Feb 2016 17:18:02 -0800 Subject: [PATCH 139/216] fixed open call to be compliant with py2.x and 3.x --- tests/test_ensdf_processing.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 6ac14075c0..14c2343024 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -1,4 +1,4 @@ -import filecmp, numpy, os, shutil +import filecmp, numpy, os, shutil, io from pyne import ensdf_processing import nose @@ -226,8 +226,8 @@ def file_comp(file_out, file_ref, exceptions): type 4: carriage return vs. non standard return type. options: line number of return. ''' - f_out = open(file_out, 'r',encoding="latin-1") - f_ref = open(file_ref, 'r',encoding="latin-1") + f_out = io.open(file_out, 'r', encoding="latin-1") + f_ref = io.open(file_ref, 'r', encoding="latin-1") diff_lines = numpy.array([]) line_num = 0 for line_out in f_out: From 487289f968f0c4e3813c6a327d5ea68600d84d9b Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 22 Feb 2016 23:29:56 -0800 Subject: [PATCH 140/216] New, hopefully faster download stragegy --- pyne/ensdf_processing.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 1b934228fd..099e6b25df 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -5,9 +5,10 @@ from pyne.utils import QAWarning try: - import urllib.request as urllib2 + import urllib.request as urllib except ImportError: - import urllib2 + import urllib2 as urllib + if sys.version_info[0] > 2: basestring = str @@ -22,17 +23,17 @@ def path_to_exe(exe_name): def verify_download_exe(exe_path, exe_url, compressed = 0, decomp_path = '', dl_size = 0): if not os.path.exists(exe_path): - print('fetching executable') - response = urllib2.urlopen(exe_url) - prog = 0 - CHUNK = 32 * 1024 - f = open(exe_path, 'wb') - while True: - chunk = response.read(CHUNK) - prog = prog + (256) - if not chunk: break - f.write(chunk) - f.close() + msg = 'Downloading {0!r} to {1!r}'.format(exe_url, exe_path) + print(msg) + req = urllib.Request(exe_url, headers={'User-Agent': 'Mozilla/5.0'}) + f = urllib.urlopen(req, timeout=30.0) + try: + html = f.read() + finally: + f.close() + with open(exe_path, 'wb') as f: + f.write(html) + # set proper permissions on newly downloaded file os.chmod(exe_path, 744) if compressed: From 9a27f6defb2d581169e053b54b3c5af88e61c34a Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 22 Feb 2016 23:36:28 -0800 Subject: [PATCH 141/216] Re triggering travis-ci tests --- tests/test_ensdf_processing.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 14c2343024..879ea6d189 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -38,11 +38,6 @@ def test_bricc_evaluation(): input_dict['input_file'] = 'ensdf_processing/bricc/ref_235PU' input_dict['BrIccNH'] = 0 output_dict = ensdf_processing.bricc(input_dict) - #bricc_out_tmp = tmp_path + '/tmp_bricc_out.out' - #bricc_out_ref = 'ensdf_processing/bricc/ref_bricc_44.out' - #bricc_outfile = open(tmp_path + '/tmp_bricc_out.out', 'w+') - #bricc_outfile.write(output_dict['bricc_output']) - #file_comp(bricc_out_tmp, bricc_out_ref,[]) cleanup_tmp() def test_bldhst(): From 32553a68f821cc12a10b67e5ad291faa406c9d2c Mon Sep 17 00:00:00 2001 From: josh Date: Tue, 23 Feb 2016 13:50:10 -0800 Subject: [PATCH 142/216] Fixed bricc interface and updated download code --- pyne/ensdf_processing.py | 22 +- .../bricc/ref_a228_comparison_report | 3460 +++++++++++++++++ tests/test_ensdf_processing.py | 6 +- 3 files changed, 3485 insertions(+), 3 deletions(-) create mode 100644 tests/ensdf_processing/bricc/ref_a228_comparison_report diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 099e6b25df..4398f48df0 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -108,7 +108,7 @@ def bricc(inputdict_unchecked): """ exe_path = path_to_exe('bricc') - exe_dir = path_to_exe('') + exe_dir = path_to_exe('')[:-1] compressed_exe_path = exe_path + '.tar.gz' bricc_url = "http://www.nndc.bnl.gov/nndcscr/ensdf_pgm/analysis/BrIcc/Linux/BriccV23-Linux.tgz" @@ -122,6 +122,20 @@ def bricc(inputdict_unchecked): input_type = inputdict_unchecked['input_type'] output_dict = inputdict_unchecked + inp = (inputdict_unchecked['calculation_report'] if + inputdict_unchecked.has_key('calculation_report') else '') + '\n' + \ + (inputdict_unchecked['G_SG_records'] if + inputdict_unchecked.has_key('G_SG_records') else '') + '\n' + \ + (inputdict_unchecked['comparison_report'] if + inputdict_unchecked.has_key('comparison_report') else '') + '\n' + \ + (inputdict_unchecked['conversion_coefficients'] if + inputdict_unchecked.has_key('conversion_coefficients') else '') + '\n' + \ + (inputdict_unchecked['calculate_conversion_coefficients'] if + inputdict_unchecked.has_key('calculate_conversion_coefficients') else '') + '\n' + \ + (inputdict_unchecked['lowest_cc_value'] if + inputdict_unchecked.has_key('lowest_cc_value') else '') + '\n' + \ + (inputdict_unchecked['assumed_mr_value'] if + inputdict_unchecked.has_key('assumed_mr_value') else '') + '\n\r\n' if input_type == 'interactive': input_element = inputdict_unchecked['element'] @@ -134,10 +148,14 @@ def bricc(inputdict_unchecked): input_file = inputdict_unchecked['input_file'] briccnh = inputdict_unchecked['BrIccNH'] if briccnh: - proc = subprocess.Popen([exe_path, input_file, 'BrIccNH'],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + proc = subprocess.Popen(exe_path,[input_file, 'BrIccNH'],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + proc.stdin.write(inp.encode('utf-8')) + proc.communicate()[0] proc.stdin.close() else: proc = subprocess.Popen([exe_path, input_file],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + proc.stdin.write(inp.encode('utf-8')) + proc.communicate()[0] proc.stdin.close() output_dict['output_file_directory'] = exe_dir diff --git a/tests/ensdf_processing/bricc/ref_a228_comparison_report b/tests/ensdf_processing/bricc/ref_a228_comparison_report new file mode 100644 index 0000000000..0ae39bce48 --- /dev/null +++ b/tests/ensdf_processing/bricc/ref_a228_comparison_report @@ -0,0 +1,3460 @@ + 1 : 228TH ADOPTED LEVELS, GAMMAS 97NDS 199709 + 4 : 228TH DG CC$FROM BrIcc v2.3b (16-Dec-2014) 2008Ki07, "Frozen Orbitals" appr. + 4 : 228TH CG MR$IF NO VALUE GIVEN IT WAS ASSUMED MR=1.00 FOR E2/M1, + 4 : 228TH2CG MR=1.00 FOR E3/M2 AND MR=0.10 FOR THE OTHER MULTIPOLARITIES + Compare OLD/NEW cards + 77 : 228TH G 57.766 5 100 E2 156 L + 79 : 228THB G BE2W=167 6 + 77 : 228TH G 57.766 5 100 E2 153.1 L + 80 : 228THS G LC=112.0 16$MC=30.7 5 + 80 : 228THS G NC=8.22 12$OC=1.83 3$PC=0.302 5$QC=0.000869 13 + Compare OLD/NEW cards + 84 : 228TH G 129.065 1 100 E2 3.81 L + 86 : 228THB G BE2W=242 9 + 84 : 228TH G 129.065 1 100 E2 3.74 L + 87 : 228THS G KC=0.264 4$LC=2.54 4$MC=0.697 10 + 87 : 228THS G NC=0.187 3$OC=0.0417 6$PC=0.00696 10$QC=4.23E-5 6 + Compare OLD/NEW cards + 90 : 228TH G 270.245 2 100.0 16E1 0.0474 J + 91 : 228TH3 G FLAG=L + 90 : 228TH G 270.245 2 100.0 16E1 0.0470 J + 92 : 228THS G KC=0.0376 6$LC=0.00716 10$MC=0.001717 24 + 92 : 228THS G NC=0.000454 7$OC=0.0001054 15$PC=1.96E-5 3$QC=1.473E-6 21 + Compare OLD/NEW cards + 92 : 228TH G 328.000 6 89.3 21E1 0.0308 J + 93 : 228TH3 G FLAG=L + 92 : 228TH G 328.000 6 89.3 21E1 0.0305 J + 94 : 228THS G KC=0.0245 4$LC=0.00455 7$MC=0.001089 16 + 94 : 228THS G NC=0.000288 4$OC=6.71E-5 10$PC=1.256E-5 18$QC=9.82E-7 14 + Compare OLD/NEW cards + 97 : 228TH G 191.353 10 100 E2 0.791 L + 97 : 228TH G 191.353 10 100 E2 0.776 L + 98 : 228THS G KC=0.1710 24$LC=0.443 7$MC=0.1209 17 + 98 : 228THS G NC=0.0324 5$OC=0.00726 11$PC=0.001224 18$QC=1.375E-5 20 + Compare OLD/NEW cards + 102 : 228TH G 209.253 6 34.5 6 E1 0.086 L + 102 : 228TH G 209.253 6 34.5 6 E1 0.0848 L + 103 : 228THS G KC=0.0672 10$LC=0.01333 19$MC=0.00321 5 + 103 : 228THS G NC=0.000848 12$OC=0.000196 3$PC=3.60E-5 5$QC=2.55E-6 4 + Compare OLD/NEW cards + 103 : 228TH G 338.320 3 100.0 17E1 0.0288 L + 103 : 228TH G 338.320 3 100.0 17E1 0.0285 L + 104 : 228THS G KC=0.0229 4$LC=0.00424 6$MC=0.001014 15 + 104 : 228THS G NC=0.000269 4$OC=6.25E-5 9$PC=1.172E-5 17$QC=9.22E-7 13 + Compare OLD/NEW cards + 107 : 228TH G 141.01 2 10.1 6 E1 0.220 + 107 : 228TH G 141.01 2 10.1 6 E1 0.217 + 108 : 228THS G KC=0.1689 24$LC=0.0362 5$MC=0.00875 13 + 108 : 228THS G NC=0.00231 4$OC=0.000529 8$PC=9.53E-5 14$QC=6.10E-6 9 + Compare OLD/NEW cards + 108 : 228TH G 332.370 4 100 5 E1 0.0299 L + 108 : 228TH G 332.370 4 100 5 E1 0.0297 L + 109 : 228THS G KC=0.0238 4$LC=0.00441 7$MC=0.001056 15 + 109 : 228THS G NC=0.000280 4$OC=6.51E-5 10$PC=1.219E-5 17$QC=9.56E-7 14 + Compare OLD/NEW cards + 112 : 228TH G 244.4 3 E2 0.332 G + 112 : 228TH G 244.4 3 E2 0.326 G + 113 : 228THS G KC=0.1091 16$LC=0.1589 24$MC=0.0430 7 + 113 : 228THS G NC=0.01153 18$OC=0.00259 4$PC=0.000442 7$QC=7.40E-6 11 + Compare OLD/NEW cards + 117 : 228TH G 317.4 3 [E1] 0.0331 G + 117 : 228TH G 317.4 3 [E1] 0.0328 G + 118 : 228THS G KC=0.0263 4$LC=0.00491 7$MC=0.001175 17 + 118 : 228THS G NC=0.000311 5$OC=7.24E-5 11$PC=1.353E-5 20$QC=1.051E-6 15 + Compare OLD/NEW cards + 121 : 228TH G 503.823 13 100 7 (E1) 0.0125 L + 122 : 228TH3 G FLAG=M + 121 : 228TH G 503.823 13 100 7 (E1) 0.01243 L + 123 : 228THS G KC=0.01009 15$LC=0.001775 25$MC=0.000422 6 + 123 : 228THS G NC=0.0001119 16$OC=2.62E-5 4$PC=4.97E-6 7$QC=4.19E-7 6 + 123 : 228TH G 774.1 2 33 AP L + 124 : 228TH3 G FLAG=M + Compare OLD/NEW cards + 125 : 228TH G 831 E0 0.04 2 + Compare OLD/NEW cards + 130 : 228TH G 478.40 6 100 5 E1 0.0139 + 130 : 228TH G 478.40 6 100 5 E1 0.01379 + 131 : 228THS G KC=0.01118 16$LC=0.00198 3$MC=0.000471 7 + 131 : 228THS G NC=0.0001249 18$OC=2.92E-5 4$PC=5.53E-6 8$QC=4.63E-7 7 + 131 : 228TH G 546.45 2 91 5 + 132 : 228TH G 688.11 4 32 3 & + 133 : 228TH3 G FL=186.823$ FLAG=N + 134 : 228TH G 816.62 10 12.3 20 + 135 : 228TH G 874.45 7 23 3 + 139 : 228TH G 289.4 3 G + 143 : 228TH G 225.1 3 24.6 15 G + 144 : 228TH3 G FLAG=H + 145 : 228TH G 298.3 3 100 G + 146 : 228TH3 G FLAG=H + 150 : 228TH G 610.64 10 100 22 L + 151 : 228TH3 G FLAG=M + 152 : 228TH G 880.76 10 27 8 L + 153 : 228TH3 G FLAG=M + 159 : 228TH G 616.20 3 91 11 + 160 : 228TH G 944.196 14 100 8 L + 164 : 228TH G 449.21 4 39 5 + 165 : 228TH G 572.29 4 100 5 + 166 : 228TH G 640.34 3 28 4 + 170 : 228TH G 782.142 5 1.89 6 L + Compare OLD/NEW cards + 171 : 228TH G 911.204 4 100.0 16E2+M1 +24 8 0.0121 L + 171 : 228TH G 911.204 4 100.0 16E2+M1 +24 8 0.0120018 L + 172 : 228THS G KC=0.00904 14$LC=0.00222 4$MC=0.000550 8 + 172 : 228THS G NC=0.0001468 22$OC=3.42E-5 5$PC=6.38E-6 10$QC=4.56E-7 7 + Compare OLD/NEW cards + 172 : 228TH G 968.971 17 61.1 11E2 0.0107 L + 172 : 228TH G 968.971 17 61.1 11E2 0.01061 L + 173 : 228THS G KC=0.00806 12$LC=0.00191 3$MC=0.000472 7 + 173 : 228THS G NC=0.0001258 18$OC=2.93E-5 5$PC=5.49E-6 8$QC=4.04E-7 6 + 176 : 228TH G 583.41 5 123 11 R + 177 : 228TH2 G FLAG=M + 178 : 228TH G 651.48 5 100 9 R + 179 : 228TH2 G FLAG=M + 180 : 228TH G 792.8 89 AP L + 181 : 228TH3 G FLAG=M + 182 : 228TH G 921.98 10 18.6 LE L + 183 : 228TH3 G FLAG=BM + 186 : 228TH G 979.48 10 29 3 L + 187 : 228TH3 G FLAG=M + 194 : 228TH G 620.33 6 28.4 14 + 195 : 228TH G 688.11 4 24.0 15 & + 196 : 228TH3 G FL=328.003$ FLAG=N + 197 : 228TH G 958.61 4 100 12 + 198 : 228TH G 1016.44 15 6.8 11 & + 199 : 228TH3 G FLAG=LM + Compare OLD/NEW cards + 204 : 228TH G 835.710 6 32.4 11E2 0.0143 L + 204 : 228TH G 835.710 6 32.4 11E2 0.01415 L + 205 : 228THS G KC=0.01050 15$LC=0.00274 4$MC=0.000683 10 + 205 : 228THS G NC=0.000182 3$OC=4.24E-5 6$PC=7.86E-6 11$QC=5.34E-7 8 + Compare OLD/NEW cards + 206 : 228TH G 964.766 10 100.0 18E2+M1 -7.2 10 0.0108 L + 206 : 228TH G 964.766 10 100.0 18E2+M1 -7.2 10 0.0111923 L + 207 : 228THS G KC=0.00853 19$LC=0.00199 4$MC=0.000492 9 + 207 : 228THS G NC=0.0001312 23$OC=3.06E-5 6$PC=5.74E-6 11$QC=4.28E-7 10 + 211 : 228TH G 540.68 5 58 10 + Compare OLD/NEW cards + 212 : 228TH G 663.88 6 87 7 (M1+E2) 0.06 4 + 212 : 228TH G 663.88 6 87 7 (M1+E2) 0.061 38 + 213 : 228THS G KC=0.048 32$LC=0.0098 48$MC=0.0024 12 + 213 : 228THS G NC=6.4E-4 30$OC=1.50E-4 72$PC=2.9E-5 15$QC=2.5E-6 17 + 213 : 228TH G 873.11 12 100 10 + 217 : 228TH G 694.8 2 2.9 4 I + 218 : 228TH3 G FLAG=K + 219 : 228TH G 713.1 3 1.8 4 I + 220 : 228TH3 G FLAG=K + Compare OLD/NEW cards + 221 : 228TH G 904.19 3 100 4 E2 0.0123 + 221 : 228TH G 904.19 3 100 4 E2 0.01212 + 222 : 228THS G KC=0.00912 13$LC=0.00225 4$MC=0.000559 8 + 222 : 228THS G NC=0.0001492 21$OC=3.47E-5 5$PC=6.48E-6 9$QC=4.60E-7 7 + Compare OLD/NEW cards + 223 : 228TH G 1033.248 9 26.5 9 E2 L + 223 : 228TH G 1033.248 9 26.5 9 E2 0.00938 L + 224 : 228THS G KC=0.00720 10$LC=0.001643 23$MC=0.000404 6 + 224 : 228THS G NC=0.0001078 15$OC=2.52E-5 4$PC=4.73E-6 7$QC=3.58E-7 5 + Compare OLD/NEW cards + 228 : 228TH G 100.41 3 2.2 3 (E1+M2) 0.23 AP 3.2 AP L + 229 : 228TH3 G FLAG=M + 228 : 228TH G 100.41 3 2.2 3 (E1+M2) 0.23 AP 3.10 AP L + 230 : 228THS G LC AP 2.27$MC AP 0.615 + 230 : 228THS G NC AP 0.1676$OC AP 0.0393$PC AP 0.00738$QC AP 0.000589 + Compare OLD/NEW cards + 230 : 228TH G 153.977 10 16.7 5 E1 0.178 L + 231 : 228TH3 G FL=968.968 + 230 : 228TH G 153.977 10 16.7 5 E1 0.1757 L + 232 : 228THS G KC=0.1375 20$LC=0.0289 4$MC=0.00697 10 + 232 : 228THS G NC=0.00184 3$OC=0.000422 6$PC=7.65E-5 11$QC=5.02E-6 7 + Compare OLD/NEW cards + 232 : 228TH G 726.863 15 13.7 13(E2) 0.0189 L + 232 : 228TH G 726.863 15 13.7 13(E2) 0.0187 L + 233 : 228THS G KC=0.01349 19$LC=0.00393 6$MC=0.000990 14 + 233 : 228THS G NC=0.000264 4$OC=6.12E-5 9$PC=1.125E-5 16$QC=7.00E-7 10 + Compare OLD/NEW cards + 233 : 228TH G 794.947 5 100.0 16E2+M1 -4.4 10 0.0182 15 L + 233 : 228TH G 794.947 5 100.0 16E2+M1 -4.4 10 0.0179 14 L + 234 : 228THS G KC=0.0133 12$LC=0.00340 19$MC=0.00085 5 + 234 : 228THS G NC=0.000226 12$OC=5.3E-5 3$PC=9.8E-6 6$QC=6.8E-7 6 + 234 : 228TH G 1065.19 4 3.02 12 + Compare OLD/NEW cards + 239 : 228TH G 173.964 13 15.5 22M1+E2 1.2 +11-6 2.3 18 L + 240 : 228THB G BM1W=4.E-5 +6-4$BE2W=0.6 +7-6 + 239 : 228TH G 173.964 13 15.5 22M1+E2 1.2 +11-6 2.24 90 L + 241 : 228THS G KC=1.38 94$LC=0.63 3$MC=0.166 14 + 241 : 228THS G NC=0.044 4$OC=0.0101 7$PC=0.00180 5$QC=7.8E-5 48 + Compare OLD/NEW cards + 241 : 228TH G 184.54 2 31 4 E0+M1 63 8 M + 242 : 228TH3 G FL=968.968$ FLAG=L + 243 : 228THB G BM1W=1.2E-4 3 + Compare OLD/NEW cards + 246 : 228TH G 278.70 10 71 9 (M1+E2) 0.7 5 @ + 247 : 228TH3 G FL=874.473 + 246 : 228TH G 278.70 10 71 9 (M1+E2) 0.62 41 @ + 248 : 228THS G KC=0.46 37$LC=0.12 3$MC=0.031 6 + 248 : 228THS G NC=0.0084 16$OC=0.0019 5$PC=3.60E-4 99$QC=2.4E-5 19 + Compare OLD/NEW cards + 248 : 228TH G 321.646 8 100 5 [E2] 0.140 L + 249 : 228THB G BE2W=0.29 5 + 248 : 228TH G 321.646 8 100 5 [E2] 0.1369 L + 250 : 228THS G KC=0.0635 9$LC=0.0540 8$MC=0.01444 21 + 250 : 228THS G NC=0.00387 6$OC=0.000875 13$PC=0.0001514 22$QC=3.88E-6 6 + Compare OLD/NEW cards + 250 : 228TH G 1095.679 20 55 4 [M1,E2] 0.018 10 L + 250 : 228TH G 1095.679 20 55 4 [M1,E2] 0.0173 90 L + 251 : 228THS G KC=0.0138 74$LC=0.0026 13$MC=6.4E-4 29 + 251 : 228THS G NC=1.70E-4 76$OC=4.0E-5 19$PC=7.7E-6 36$QC=7.0E-7 38 + Compare OLD/NEW cards + 251 : 228TH G 1153.52 4 61 4 [E2] + 252 : 228THB G BE2W=0.00030 6 + 251 : 228TH G 1153.52 4 61 4 [E2] 0.00762 + 253 : 228THS G KC=0.00592 9$LC=0.001280 18$MC=0.000313 5 + 253 : 228THS G NC=8.34E-5 12$OC=1.95E-5 3$PC=3.69E-6 6$QC=2.92E-7 4$IPC=8.80E-7 13 + 258 : 228TH G 77.34 3 1.7 3 L + 259 : 228TH3 G FLAG=M + Compare OLD/NEW cards + 260 : 228TH G 145.849 10 10.4 4 E1 0.203 L + 260 : 228TH G 145.849 10 10.4 4 E1 0.200 L + 261 : 228THS G KC=0.1561 22$LC=0.0332 5$MC=0.00802 12 + 261 : 228THS G NC=0.00212 3$OC=0.000485 7$PC=8.76E-5 13$QC=5.66E-6 8 + Compare OLD/NEW cards + 261 : 228TH G 199.407 10 20.8 8 E1 0.096 L + 261 : 228TH G 199.407 10 20.8 8 E1 0.0950 L + 262 : 228THS G KC=0.0752 11$LC=0.01502 21$MC=0.00362 5 + 262 : 228THS G NC=0.000956 14$OC=0.000221 3$PC=4.05E-5 6$QC=2.84E-6 4 + 262 : 228TH G 649.03 13 2.7 3 & + Compare OLD/NEW cards + 263 : 228TH G 772.291 5 100.0 20E2+M1 -3.4 +8-27 0.021 3 L + 264 : 228THS G KC=0.0154 22$LC=0.0039 4$MC=0.00096 9 + 264 : 228THS G NC=0.000256 22$OC=6.0E-5 6$PC=1.11E-5 11$QC=7.9E-7 12 + Compare OLD/NEW cards + 264 : 228TH G 840.377 7 61.9 21E2 0.0142 L + 264 : 228TH G 840.377 7 61.9 21E2 0.01400 L + 265 : 228THS G KC=0.01039 15$LC=0.00270 4$MC=0.000673 10 + 265 : 228THS G NC=0.000180 3$OC=4.18E-5 6$PC=7.75E-6 11$QC=5.29E-7 8 + 265 : 228TH G 981.5 2 3.0 4 I + 266 : 228TH3 G FLAG=K + Compare OLD/NEW cards + 267 : 228TH G 1110.610 10 18.7 20E1 @ + 268 : 228TH2 G FLAG=L + 267 : 228TH G 1110.610 10 18.7 20E1 0.00288 @ + 269 : 228THS G KC=0.00237 4$LC=0.000388 6$MC=9.15E-5 13 + 269 : 228THS G NC=2.43E-5 4$OC=5.73E-6 8$PC=1.104E-6 16$QC=1.025E-7 15 + 269 : 228THS G IPC=7.72E-7 11 + 272 : 228TH G 987.88 9 + 276 : 228TH G 231.42 10 32 5 L + 277 : 228TH3 G FLAG=M + 278 : 228TH G 988.63 20 100 17 L + 279 : 228TH3 G FLAG=M + 280 : 228TH G 1117.63 10 70 10 L + 281 : 228TH3 G FLAG=M + 282 : 228TH G 1175.31 10 31 4 L + 283 : 228TH3 G FLAG=M + 287 : 228TH G 268.9 3 67 5 G + 288 : 228TH3 G FLAG=H + 289 : 228TH G 278.0 3 100 G + 290 : 228TH3 G FLAG=H + Compare OLD/NEW cards + 294 : 228TH G 178.14 7 22 LE(E0) I + 295 : 228TH3 G FLAG=K + 296 : 228TH G 231.50 5 100 5 I + 297 : 228TH3 G FL=968.968$ FLAG=K + 298 : 228TH G 1013.54 13 41 5 & + 299 : 228TH3 G FLAG=IK + 300 : 228TH G 1142.78 11 3 I + 301 : 228TH3 G FLAG=K + Compare OLD/NEW cards + 305 : 228TH G 135.51 2 3.66 20E1 0.242 + 305 : 228TH G 135.51 2 3.66 20E1 0.238 + 306 : 228THS G KC=0.185 3$LC=0.0401 6$MC=0.00971 14 + 306 : 228THS G NC=0.00256 4$OC=0.000586 9$PC=0.0001053 15$QC=6.67E-6 10 + Compare OLD/NEW cards + 306 : 228TH G 204.026 10 20.7 10E1 0.091 L + 306 : 228TH G 204.026 10 20.7 10E1 0.0900 L + 307 : 228THS G KC=0.0713 10$LC=0.01419 20$MC=0.00342 5 + 307 : 228THS G NC=0.000903 13$OC=0.000208 3$PC=3.83E-5 6$QC=2.70E-6 4 + Compare OLD/NEW cards + 307 : 228TH G 707.41 3 27.5 6 (E2) 0.0200 + 307 : 228TH G 707.41 3 27.5 6 (E2) 0.0198 + 308 : 228THS G KC=0.01417 20$LC=0.00422 6$MC=0.001067 15 + 308 : 228THS G NC=0.000285 4$OC=6.59E-5 10$PC=1.209E-5 17$QC=7.38E-7 11 + Compare OLD/NEW cards + 308 : 228TH G 830.486 8 100 4 E2(+M1) -7.7 9 0.0152 2 L + 308 : 228TH G 830.486 8 100 4 E2(+M1) -7.7 9 0.0150 3 L + 309 : 228THS G KC=0.01117 22$LC=0.00287 5$MC=0.000715 12 + 309 : 228THS G NC=0.000191 3$OC=4.43E-5 8$PC=8.24E-6 14$QC=5.69E-7 12 + 309 : 228TH G 1039.84 8 9.9 6 + 313 : 228TH G 327.5 3 G + 317 : 228TH G 601.7 3 11.1 19 & ? + 318 : 228TH3 G FLAG=IK + 319 : 228TH G 778.1 2 100 11 I + 320 : 228TH3 G FLAG=K + 322 : 228TH G 901.26 13 74 11 K + Compare OLD/NEW cards + 323 : 228TH G 1110.610 10 89 7 E1 @ + 324 : 228TH3 G FLAG=L + 323 : 228TH G 1110.610 10 89 7 E1 0.00288 @ + 325 : 228THS G KC=0.00237 4$LC=0.000388 6$MC=9.15E-5 13 + 325 : 228THS G NC=2.43E-5 4$OC=5.73E-6 8$PC=1.104E-6 16$QC=1.025E-7 15 + 325 : 228THS G IPC=7.72E-7 11 + 330 : 228TH G 168.65 10 9 3 L + 331 : 228TH3 G FLAG=M + 332 : 228TH G 824.934 23 47 5 L + 333 : 228TH3 G FLAG=M + 334 : 228TH G 947.982 11 100 8 L + 335 : 228TH3 G FLAG=M + 336 : 228TH G 1016.44 15 18 3 & + 337 : 228TH3 G FLAG=LM + 338 : 228TH G 1157.14 15 6.6 12 L + 339 : 228TH3 G FLAG=M + 340 : 228TH G 1286.27 20 47 9 L + 341 : 228TH3 G FLAG=M + 345 : 228TH G 471.76 15 100 10 L + 346 : 228TH3 G FLAG=M + 347 : 228TH G 1019.86 10 64 12 L + 348 : 228TH3 G FLAG=M + 349 : 228TH G 1088.18 15 18 4 L + 350 : 228TH3 G FLAG=M + 351 : 228TH G 1229.40 15 23 7 L + 352 : 228TH3 G FLAG=M + Compare OLD/NEW cards + 357 : 228TH G 257.49 2 0.64 3 (M1) 1.36 + 357 : 228TH G 257.49 2 0.64 3 (M1) 1.285 + 358 : 228THS G KC=1.028 15$LC=0.194 3$MC=0.0466 7 + 358 : 228THS G NC=0.01244 18$OC=0.00294 5$PC=0.000571 8$QC=5.42E-5 8 + Compare OLD/NEW cards + 358 : 228TH G 263.62 2 0.95 5 E1 0.0502 + 358 : 228TH G 263.62 2 0.95 5 E1 0.0497 + 359 : 228THS G KC=0.0397 6$LC=0.00759 11$MC=0.00182 3 + 359 : 228THS G NC=0.000482 7$OC=0.0001119 16$PC=2.08E-5 3$QC=1.553E-6 22 + 359 : 228TH G 278.70 10 0.70 11 @ + 360 : 228TH3 G FL=1153.467 + Compare OLD/NEW cards + 361 : 228TH G 340.98 2 8.8 4 E2+M1 -5.2 18 0.136 23 + 361 : 228TH G 340.98 2 8.8 4 E2+M1 -5.2 18 0.133 21 + 362 : 228THS G KC=0.071 19$LC=0.0451 21$MC=0.0119 5 + 362 : 228THS G NC=0.00319 13$OC=0.00073 3$PC=0.000127 7$QC=4.2E-6 10 + Compare OLD/NEW cards + 362 : 228TH G 409.462 6 43.8 8 E2+M1 -5.4 8 0.082 4 + 362 : 228TH G 409.462 6 43.8 8 E2+M1 -5.4 8 0.080 4 + 363 : 228THS G KC=0.048 3$LC=0.0236 5$MC=0.00618 12 + 363 : 228THS G NC=0.00165 4$OC=0.000378 8$PC=6.69E-5 15$QC=2.69E-6 16 + 363 : 228TH G 452.51 5 0.45 4 + Compare OLD/NEW cards + 364 : 228TH G 463.004 6 100.0 16E2 0.0522 L + 364 : 228TH G 463.004 6 100.0 16E2 0.0514 L + 365 : 228THS G KC=0.0312 5$LC=0.01495 21$MC=0.00390 6 + 365 : 228THS G NC=0.001044 15$OC=0.000238 4$PC=4.24E-5 6$QC=1.744E-6 25 + 365 : 228TH G 1245.16 6 2.47 12 + 366 : 228TH G 1374.24 6 0.32 9 M + Compare OLD/NEW cards + 371 : 228TH G 18.4 11.9 16[E1] 6.6 K + 371 : 228TH G 18.4 11.9 16[E1] 6.47 K + 372 : 228THS G LC=3.83 6$MC=2.01 3 + 372 : 228THS G NC=0.515 8$OC=0.1056 15$PC=0.01456 21$QC=0.000418 6 + Compare OLD/NEW cards + 373 : 228TH G 153.02 2 3.58 19M1+E2 +0.60 8 4.8 2 I + 374 : 228TH3 G FLAG=K + 373 : 228TH G 153.02 2 3.58 19M1+E2 +0.60 8 4.56 21 I + 375 : 228THS G KC=3.32 23$LC=0.932 22$MC=0.235 7 + 375 : 228THS G NC=0.0627 19$OC=0.0145 4$PC=0.00269 6$QC=0.000180 12 + Compare OLD/NEW cards + 375 : 228TH G 223.80 2 43.4 20M1+E2 -0.18 5 1.97 3 + 375 : 228TH G 223.80 2 43.4 20M1+E2 -0.18 5 1.85 4 + 376 : 228THS G KC=1.48 4$LC=0.286 5$MC=0.0688 10 + 376 : 228THS G NC=0.0184 3$OC=0.00434 7$PC=0.000840 13$QC=7.81E-5 18 + 376 : 228TH G 275.85 4 2.65 23 I + 377 : 228TH3 G FLAG=K + Compare OLD/NEW cards + 378 : 228TH G 282.00 3 60 3 M1+E2 -0.51 12 0.88 7 K + 378 : 228TH G 282.00 3 60 3 M1+E2 -0.51 12 0.83 7 K + 379 : 228THS G KC=0.65 6$LC=0.138 6$MC=0.0337 11 + 379 : 228THS G NC=0.0090 3$OC=0.00211 7$PC=0.000403 16$QC=3.4E-5 3 + 379 : 228TH G 327.45 4 100.0 10 I + 380 : 228TH3 G FLAG=K + 381 : 228TH G 359.36 3 4.19 23 I + 382 : 228TH3 G FLAG=K + 383 : 228TH G 390.45 5 3.58 19 I + 384 : 228TH3 G FLAG=K + 385 : 228TH G 427.90 3 4.0 3 I + 386 : 228TH3 G FLAG=K + 387 : 228TH G 434.01 3 5.6 3 I + 388 : 228TH3 G FLAG=K + 389 : 228TH G 482.03 5 5.9 4 I + 390 : 228TH3 G FL=968.369$ FLAG=K + 391 : 228TH G 1054.22 6 10.9 10 + 395 : 228TH G 257.7 3 52 4 G + 396 : 228TH3 G FLAG=H + 397 : 228TH G 307.3 3 100 G + 398 : 228TH3 G FLAG=H + Compare OLD/NEW cards + 402 : 228TH G 99.509 6 100 6 M1 4.09 L + 402 : 228TH G 99.509 6 100 6 M1 3.84 L + 403 : 228THS G LC=2.90 4$MC=0.699 10 + 403 : 228THS G NC=0.186 3$OC=0.0442 7$PC=0.00857 12$QC=0.000815 12 + 403 : 228TH G 356.94 10 1.35 14 L + 404 : 228TH3 G FLAG=M + 405 : 228TH G 377.99 10 1.98 24 L + 406 : 228TH3 G FLAG=M + Compare OLD/NEW cards + 407 : 228TH G 440.44 5 9.6 6 M1 0.314 + 407 : 228TH G 440.44 5 9.6 6 M1 0.295 + 408 : 228THS G KC=0.237 4$LC=0.0442 7$MC=0.01061 15 + 408 : 228THS G NC=0.00283 4$OC=0.000670 10$PC=0.0001300 19$QC=1.234E-5 18 + Compare OLD/NEW cards + 408 : 228TH G 508.959 17 40 10E2(+M1) 1.1 GT 0.08 4 L + 408 : 228TH G 508.959 17 40 10E2(+M1) 1.1 GT 0.077 36 L + 409 : 228THS G KC=0.057 31$LC=0.0153 43$MC=0.00383 98 + 409 : 228THS G NC=1.02E-3 26$OC=2.38E-4 63$PC=4.4E-5 13$QC=3.0E-6 16 + Compare OLD/NEW cards + 409 : 228TH G 562.500 4 71 4 E2+M1 +1.6 6 0.07 3 L + 409 : 228TH G 562.500 4 71 4 E2+M1 +1.6 6 0.066 27 L + 410 : 228THS G KC=0.050 23$LC=0.0122 33$MC=0.0030 8 + 410 : 228THS G NC=0.00081 20$OC=1.89E-4 48$PC=3.54E-5 97$QC=2.6E-6 12 + 410 : 228TH G 1135.24 15 0.78 12 L + 411 : 228TH3 G FLAG=M + 412 : 228TH G 1344.59 15 0.71 14 L + 413 : 228TH3 G FLAG=M + 417 : 228TH G 416.30 20 100 16 L + 418 : 228TH2 G FLAG=M + 419 : 228TH G 1142.85 15 78 16 L + 420 : 228TH2 G FLAG=M + 424 : 228TH G 354.2 2 43 7 & + 425 : 228TH3 G FLAG=IK + 426 : 228TH G 601.7 3 44 7 & + 427 : 228TH3 G FLAG=IK + Compare OLD/NEW cards + 428 : 228TH G 1184.71 9 69 6 (M1+E2) 0.015 8 I + 429 : 228TH3 G FLAG=K + 428 : 228TH G 1184.71 9 69 6 (M1+E2) 0.0143 71 I + 430 : 228THS G KC=0.0114 58$LC=0.00217 97$MC=5.2E-4 23 + 430 : 228THS G NC=1.39E-4 61$OC=3.3E-5 15$PC=6.3E-6 29$QC=5.8E-7 31$IPC=3.8E-6 17 + Compare OLD/NEW cards + 430 : 228TH G 1252.98 10 100 9 (M1+E2) 0.013 7 I + 431 : 228TH3 G FLAG=K + 430 : 228TH G 1252.98 10 100 9 (M1+E2) 0.0125 60 I + 432 : 228THS G KC=0.0100 49$LC=0.00188 82$MC=4.5E-4 20 + 432 : 228THS G NC=1.21E-4 52$OC=2.9E-5 13$PC=5.5E-6 25$QC=5.0E-7 26$IPC=1.36E-5 56 + 432 : 228TH G 1523.4 2 88 9 & + 433 : 228TH3 G FLAG=IK + Compare OLD/NEW cards + 438 : 228TH G 56.86 3 16.1 8 E1 0.533 I + 439 : 228TH3 G FLAG=K + 438 : 228TH G 56.86 3 16.1 8 E1 0.524 I + 440 : 228THS G LC=0.395 6$MC=0.0970 14 + 440 : 228THS G NC=0.0254 4$OC=0.00565 8$PC=0.000946 14$QC=4.46E-5 7 + Compare OLD/NEW cards + 440 : 228TH G 137.95 2 100 3 M1 7.89 I + 441 : 228TH3 G FLAG=K + 440 : 228TH G 137.95 2 100 3 M1 7.44 I + 442 : 228THS G KC=5.94 9$LC=1.134 16$MC=0.273 4 + 442 : 228THS G NC=0.0728 11$OC=0.01723 25$PC=0.00334 5$QC=0.000318 5 + Compare OLD/NEW cards + 442 : 228TH G 156.34 2 20.6 11E1 0.172 I + 443 : 228TH3 G FLAG=K + 442 : 228TH G 156.34 2 20.6 11E1 0.1694 I + 444 : 228THS G KC=0.1327 19$LC=0.0278 4$MC=0.00671 10 + 444 : 228THS G NC=0.001769 25$OC=0.000406 6$PC=7.37E-5 11$QC=4.85E-6 7 + 444 : 228TH G 420.03 8 10.3 8 I + 445 : 228TH3 G FLAG=K + 449 : 228TH G 360.1 3 G + 453 : 228TH G 649.03 13 114 11 & + 454 : 228TH2 G FL=968.968$ FLAG=M + 455 : 228TH G 1430.95 10 100 20 L + 456 : 228TH3 G FLAG=M + 457 : 228TH G 1559.78 14 57 11 M + 461 : 228TH G 470.20 19 2.3 6 + 462 : 228TH G 515.06 10 8.2 8 L + 463 : 228TH3 G FLAG=M + 464 : 228TH G 1309.71 20 3.2 10 L + 465 : 228TH3 G FLAG=M + 466 : 228TH G 1451.40 15 1.8 4 L + 467 : 228TH3 G FLAG=M + Compare OLD/NEW cards + 468 : 228TH G 1580.53 3 100 7 (M1,E2) + 468 : 228TH G 1580.53 3 100 7 (M1,E2) 0.0073 30 + 469 : 228THS G KC=0.0057 24$LC=0.00106 41$MC=2.53E-4 96 + 469 : 228THS G NC=6.7E-5 26$OC=1.60E-5 61$PC=3.1E-6 12$QC=2.9E-7 13$IPC=1.34E-4 51 + Compare OLD/NEW cards + 469 : 228TH G 1638.281 10 85 7 (E2) L + 469 : 228TH G 1638.281 10 85 7 (E2) 0.00410 L + 470 : 228THS G KC=0.00319 5$LC=0.000608 9$MC=0.0001463 21 + 470 : 228THS G NC=3.89E-5 6$OC=9.16E-6 13$PC=1.755E-6 25$QC=1.533E-7 22 + 470 : 228THS G IPC=0.0001039 15 + 473 : 228TH G 474.79 11 4.6 7 + Compare OLD/NEW cards + 474 : 228TH G 520.151 16 11.8 10(M1) 0.201 L + 474 : 228TH G 520.151 16 11.8 10(M1) 0.189 L + 475 : 228THS G KC=0.1516 22$LC=0.0282 4$MC=0.00676 10 + 475 : 228THS G NC=0.00180 3$OC=0.000426 6$PC=8.27E-5 12$QC=7.86E-6 11 + 475 : 228TH G 627.23 20 2.8 6 L + 476 : 228TH3 G FLAG=M + 477 : 228TH G 674.16 30 LE Q + 478 : 228TH3 G FL=968.968 + 480 : 228TH G 674.76 30 LE Q + 481 : 228TH3 G FL=968.369 + 483 : 228TH G 699.08 15 7.4 10 L + 484 : 228TH3 G FLAG=M + Compare OLD/NEW cards + 485 : 228TH G 1247.08 3 100 5 (M1) 0.0201 + 485 : 228TH G 1247.08 3 100 5 (M1) 0.0187 + 486 : 228THS G KC=0.01505 21$LC=0.00274 4$MC=0.000654 10 + 486 : 228THS G NC=0.0001743 25$OC=4.13E-5 6$PC=8.02E-6 12$QC=7.69E-7 11 + 486 : 228THS G IPC=1.771E-5 25 + 486 : 228TH G 1315.31 9 2.7 4 + 490 : 228TH G 114.54 6 0.28 4 + 491 : 228TH G 419.42 10 0.65 9 L + 492 : 228TH3 G FLAG=M + 493 : 228TH G 492.30 8 0.74 5 + 494 : 228TH G 523.131 16 3.5 3 B + 495 : 228TH3 G FL=1122.951$ FLAG=L + 496 : 228TH G 555.07 16 1.40 14 + 497 : 228TH G 623.27 20 0.34 9 L + 498 : 228TH3 G FLAG=M + 499 : 228TH G 629.40 5 1.20 21 + 500 : 228TH G 666.47 4 1.8 2 @ + 501 : 228TH G 677.07 9 1.99 16 + 502 : 228TH3 G FL=968.968 + 503 : 228TH G 1249.97 14 1.94 14 + Compare OLD/NEW cards + 504 : 228TH G 1459.138 15 23.7 12E2 L + 504 : 228TH G 1459.138 15 23.7 12E2 0.00498 L + 505 : 228THS G KC=0.00391 6$LC=0.000771 11$MC=0.000187 3 + 505 : 228THS G NC=4.97E-5 7$OC=1.167E-5 17$PC=2.23E-6 4$QC=1.89E-7 3$IPC=4.71E-5 7 + Compare OLD/NEW cards + 505 : 228TH G 1588.19 3 100.0 25E2 + 505 : 228TH G 1588.19 3 100.0 25E2 0.00431 + 506 : 228THS G KC=0.00337 5$LC=0.000647 9$MC=0.0001561 22 + 506 : 228THS G NC=4.15E-5 6$OC=9.77E-6 14$PC=1.87E-6 3$QC=1.622E-7 23$IPC=8.62E-5 12 + 509 : 228TH G 660.1 3 0.6 AP L + 510 : 228TH3 G FLAG=M + Compare OLD/NEW cards + 511 : 228TH G 1495.93 7 100 5 (E2) + 511 : 228TH G 1495.93 7 100 5 (E2) 0.00477 + 512 : 228THS G KC=0.00374 6$LC=0.000732 11$MC=0.0001769 25 + 512 : 228THS G NC=4.71E-5 7$OC=1.107E-5 16$PC=2.11E-6 3$QC=1.81E-7 3$IPC=5.72E-5 8 + 512 : 228TH G 1625.06 5 29.1 19 + 516 : 228TH G 457.35 7 19.2 19 + 517 : 228TH G 623.7 2 26 LE I + 518 : 228TH3 G FLAG=K + Compare OLD/NEW cards + 521 : 228TH G 1164.55 7 83 4 (M1+E2) 0.016 9 + 521 : 228TH G 1164.55 7 83 4 (M1+E2) 0.0149 75 + 522 : 228THS G KC=0.0119 61$LC=0.0023 11$MC=5.5E-4 24 + 522 : 228THS G NC=1.45E-4 64$OC=3.4E-5 16$PC=6.6E-6 30$QC=6.0E-7 32$IPC=2.19E-6 94 + Compare OLD/NEW cards + 522 : 228TH G 1287.78 12 100 7 (M1+E2) 0.012 7 + 522 : 228TH G 1287.78 12 100 7 (M1+E2) 0.0117 55 + 523 : 228THS G KC=0.0094 45$LC=0.00176 76$MC=4.2E-4 18 + 523 : 228THS G NC=1.13E-4 48$OC=2.7E-5 12$PC=5.1E-6 23$QC=4.7E-7 24$IPC=2.03E-5 83 + 527 : 228TH G 42.46 5 0.60 20 L + 528 : 228TH3 G FLAG=M + 529 : 228TH G 672.00 15 1.7 5 L + 530 : 228TH3 G FLAG=M + 531 : 228TH G 813.77 15 0.46 11 L + 532 : 228TH3 G FLAG=M + 533 : 228TH G 1501.57 5 29.4 15 + Compare OLD/NEW cards + 534 : 228TH G 1630.627 10 100 3 (M1,E2) L + 534 : 228TH G 1630.627 10 100 3 (M1,E2) 0.0068 27 L + 535 : 228THS G KC=0.0053 22$LC=9.8E-4 37$MC=2.34E-4 87 + 535 : 228THS G NC=6.2E-5 24$OC=1.48E-5 56$PC=2.9E-6 11$QC=2.7E-7 12$IPC=1.61E-4 60 + 539 : 228TH G 548.73 15 2.3 3 L + 540 : 228TH2 G FLAG=M + Compare OLD/NEW cards + 541 : 228TH G 570.88 4 17.1 9 (M1) 0.156 + 541 : 228TH G 570.88 4 17.1 9 (M1) 0.1472 + 542 : 228THS G KC=0.1182 17$LC=0.0219 3$MC=0.00525 8 + 542 : 228THS G NC=0.001401 20$OC=0.000332 5$PC=6.44E-5 9$QC=6.12E-6 9 + Compare OLD/NEW cards + 542 : 228TH G 701.747 14 18.2 10(M1) 0.091 L + 542 : 228TH G 701.747 14 18.2 10(M1) 0.0850 L + 543 : 228THS G KC=0.0684 10$LC=0.01261 18$MC=0.00302 5 + 543 : 228THS G NC=0.000805 12$OC=0.000191 3$PC=3.70E-5 6$QC=3.52E-6 5 + Compare OLD/NEW cards + 543 : 228TH G 755.315 4 100 3 M1 0.0747 L + 543 : 228TH G 755.315 4 100 3 M1 0.0700 L + 544 : 228THS G KC=0.0563 8$LC=0.01036 15$MC=0.00248 4 + 544 : 228THS G NC=0.000661 10$OC=0.0001566 22$PC=3.04E-5 5$QC=2.90E-6 4 + 544 : 228TH G 1537.87 9 4.2 5 B + 545 : 228TH3 G FL=186.823 + Compare OLD/NEW cards + 546 : 228TH G 1666.523 13 17.3 8 M1 L + 546 : 228TH G 1666.523 13 17.3 8 M1 0.00895 L + 547 : 228THS G KC=0.00702 10$LC=0.001269 18$MC=0.000303 5 + 547 : 228THS G NC=8.08E-5 12$OC=1.91E-5 3$PC=3.72E-6 6$QC=3.58E-7 5$IPC=0.000247 4 + 547 : 228TH G 1724.20 4 2.7 3 + 552 : 228TH G 1217.03 10 39 6 B ? + 553 : 228TH3 G FL=519.192$ FLAG=LM + 554 : 228TH G 1357.78 15 37 7 B ? + 555 : 228TH3 G FL=378.179$ FLAG=LM + 556 : 228TH G 1548.65 4 70 7 L + 557 : 228TH3 G FLAG=M + 558 : 228TH G 1677.67 3 100 9 L + 559 : 228TH3 G FLAG=M + 563 : 228TH G 399.62 10 16.3 17 L + 564 : 228TH3 G FLAG=MP + 565 : 228TH G 590.65 11 9.3 11 I ? + 566 : 228TH3 G FLAG=K + 568 : 228TH G 684.0 3 10.4 23 I ? + 569 : 228TH3 G FLAG=K + 571 : 228TH G 1365.71 9 8.8 8 + Compare OLD/NEW cards + 572 : 228TH G 1557.10 4 100 5 (E2+M1) +1.2 2 + 572 : 228TH G 1557.10 4 100 5 (E2+M1) +1.2 2 0.0070 6 + 573 : 228THS G KC=0.0055 5$LC=0.00102 8$MC=0.000245 19 + 573 : 228THS G NC=6.5E-5 5$OC=1.54E-5 12$PC=2.98E-6 23$QC=2.75E-7 24$IPC=0.000114 9 + Compare OLD/NEW cards + 573 : 228TH G 1686.12 5 53.8 23(E2) + 573 : 228TH G 1686.12 5 53.8 23(E2) 0.00391 + 574 : 228THS G KC=0.00303 5$LC=0.000573 8$MC=0.0001378 20 + 574 : 228THS G NC=3.67E-5 6$OC=8.64E-6 12$PC=1.655E-6 24$QC=1.455E-7 21 + 574 : 228THS G IPC=0.0001217 17 + 577 : 228TH G 326.04 20 100 15 L + 578 : 228TH3 G FLAG=M + 579 : 228TH G 1571.52 20 17 5 L + 580 : 228TH3 G FLAG=M + 581 : 228TH G 1700.59 20 31 7 L + 582 : 228TH3 G FLAG=M + 587 : 228TH G 584.7 3 12 4 & + 588 : 228TH3 G FLAG=IK + 589 : 228TH G 737.72 5 73 7 + 590 : 228TH G 791.44 9 21 6 @ + 591 : 228TH3 G FL=968.968 + Compare OLD/NEW cards + 592 : 228TH G 1573.26 5 65 4 (E2) + 592 : 228TH G 1573.26 5 65 4 (E2) 0.00438 + 593 : 228THS G KC=0.00342 5$LC=0.000660 10$MC=0.0001592 23 + 593 : 228THS G NC=4.24E-5 6$OC=9.97E-6 14$PC=1.91E-6 3$QC=1.650E-7 24$IPC=8.12E-5 12 + 593 : 228TH G 1702.44 5 100 7 + 597 : 228TH G 1276.69 10 78 17 L + 598 : 228TH3 G FLAG=M + 599 : 228TH G 1738.22 25 100 22 L + 600 : 228TH3 G FLAG=M + 605 : 228TH G 1401.49 10 60 15 L + 606 : 228TH3 G FLAG=M + 607 : 228TH G 1469.71 15 100 20 L + 608 : 228TH3 G FLAG=M + 609 : 228TH G 1740.4 3 55 15 L + 610 : 228TH3 G FLAG=M + 611 : 228TH G 1797.5 5 11 4 L + 612 : 228TH3 G FLAG=M + 616 : 228TH G 116.26 5 12.8 16 I + 617 : 228TH3 G FLAG=K + 618 : 228TH G 121.18 7 15.2 24 I ? + 619 : 228TH3 G FL=1683.82$ FLAG=KB + 620 : 228TH G 121.87 3 26.4 24 I + 621 : 228TH3 G FLAG=K + Compare OLD/NEW cards + 622 : 228TH G 158.74 3 100 6 M1+E2 0.55 15 I + 623 : 228TH3 G FLAG=K + 622 : 228TH G 158.74 3 100 6 M1+E2 0.55 15 4.2 4 I + 624 : 228THS G KC=3.1 4$LC=0.82 3$MC=0.204 10 + 624 : 228THS G NC=0.054 3$OC=0.0127 5$PC=0.00236 6$QC=0.000168 19 + 624 : 228TH G 354.2 2 23 4 & + 625 : 228TH3 G FLAG=IK + 626 : 228TH G 372.60 3 126 6 I ? + 627 : 228TH3 G FL=1431.979$ FLAG=KB + 628 : 228TH G 651.5 2 27 4 I + 629 : 228TH3 G FLAG=K + 630 : 228TH G 1426.5 2 38 5 I + 631 : 228TH3 G FLAG=K + Compare OLD/NEW cards + 632 : 228TH G 1618.0 1 72 5 (M1,E2) I + 633 : 228TH3 G FLAG=K + 632 : 228TH G 1618.0 1 72 5 (M1,E2) 0.0069 28 I + 634 : 228THS G KC=0.0054 22$LC=1.00E-3 38$MC=2.39E-4 89 + 634 : 228THS G NC=6.4E-5 24$OC=1.51E-5 57$PC=2.9E-6 12$QC=2.7E-7 12$IPC=1.54E-4 58 + Compare OLD/NEW cards + 637 : 228TH G 367.04 2 100 5 M1 0.512 I + 638 : 228TH3 G FLAG=K + 637 : 228TH G 367.04 2 100 5 M1 0.484 I + 639 : 228THS G KC=0.388 6$LC=0.0728 11$MC=0.01747 25 + 639 : 228THS G NC=0.00466 7$OC=0.001103 16$PC=0.000214 3$QC=2.03E-5 3 + Compare OLD/NEW cards + 639 : 228TH G 1298.3 2 18.4 16(M1+E2) I + 640 : 228TH3 G FLAG=K + 639 : 228TH G 1298.3 2 18.4 16(M1+E2) 0.0115 54 I + 641 : 228THS G KC=0.0092 44$LC=0.00172 74$MC=4.1E-4 18 + 641 : 228THS G NC=1.10E-4 47$OC=2.6E-5 11$PC=5.0E-6 22$QC=4.6E-7 23$IPC=2.26E-5 92 + Compare OLD/NEW cards + 642 : 228TH G 1421.1 2 57 3 E2+M1 +2.0 5 I + 643 : 228TH3 G FLAG=K + 642 : 228TH G 1421.1 2 57 3 E2+M1 +2.0 5 0.0068 9 I + 644 : 228THS G KC=0.0054 8$LC=0.00104 13$MC=0.00025 3 + 644 : 228THS G NC=6.7E-5 8$OC=1.57E-5 19$PC=3.0E-6 4$QC=2.7E-7 4$IPC=4.7E-5 6 + 647 : 228TH G 341.2 3 G + 651 : 228TH G 477.1 3 4.4 13 I + 652 : 228TH3 G FLAG=KP + 653 : 228TH G 666.47 4 11 2 @ + Compare OLD/NEW cards + 654 : 228TH G 692.47 7 12.6 9 (M1+E2+E0) 0.24 3 I + 655 : 228TH3 G FLAG=K + 654 : 228TH G 692.47 7 12.6 9 (M1+E2+E0) 0.054 34 I + 656 : 228THS G KC=0.043 28$LC=0.0088 43$MC=0.0021 10 + 656 : 228THS G NC=5.7E-4 27$OC=1.34E-4 64$PC=2.6E-5 13$QC=2.2E-6 15 + 657 : 228TH G 724.42 11 4.8 6 & + 658 : 228TH3 G FLAG=IK + 659 : 228TH G 739.2 2 3.6 6 I + 660 : 228TH3 G FLAG=K + 661 : 228TH G 770.2 2 14.3 9 I + 662 : 228TH3 G FLAG=K + Compare OLD/NEW cards + 663 : 228TH G 870.45 2 100 5 M1 + 663 : 228TH G 870.45 2 100 5 M1 0.0481 + 664 : 228THS G KC=0.0387 6$LC=0.00710 10$MC=0.001699 24 + 664 : 228THS G NC=0.000453 7$OC=0.0001073 15$PC=2.08E-5 3$QC=1.99E-6 3 + 665 : 228TH G 924.3 2 17.0 13 I + 666 : 228TH3 G FLAG=K + Compare OLD/NEW cards + 667 : 228TH G 1706.17 7 18.1 8 M1+E2 +0.42 4 + 667 : 228TH G 1706.17 7 18.1 8 M1+E2 +0.42 4 0.0077616 + 668 : 228THS G KC=0.00605 13$LC=0.001097 22$MC=0.000262 6 + 668 : 228THS G NC=6.99E-5 14$OC=1.65E-5 4$PC=3.21E-6 7$QC=3.07E-7 7$IPC=0.000256 6 + Compare OLD/NEW cards + 668 : 228TH G 1835.29 5 64 8 E2+M1 +2.9 3 + 668 : 228TH G 1835.29 5 64 8 E2+M1 +2.9 3 0.0038210 + 669 : 228THS G KC=0.00291 8$LC=0.000536 14$MC=0.000128 4 + 669 : 228THS G NC=3.42E-5 9$OC=8.06E-6 21$PC=1.55E-6 4$QC=1.41E-7 4$IPC=0.000202 6 + 672 : 228TH G 877.39 7 41 4 + 673 : 228TH G 883.6 3 6.6 18 I + 674 : 228TH3 G FLAG=K + 675 : 228TH G 920.8 3 17 4 I + 676 : 228TH3 G FLAG=K + 677 : 228TH G 931.02 7 43 4 I + 678 : 228TH3 G FLAG=K + 679 : 228TH G 1503.7 2 31 3 I + 680 : 228TH3 G FLAG=K + Compare OLD/NEW cards + 681 : 228TH G 1842.14 8 100 5 M1+E2 -0.86 14 + 681 : 228TH G 1842.14 8 100 5 M1+E2 -0.86 14 0.0055 4 + 682 : 228THS G KC=0.00420 25$LC=0.00076 5$MC=0.000182 11 + 682 : 228THS G NC=4.9E-5 3$OC=1.15E-5 7$PC=2.23E-6 13$QC=2.10E-7 13$IPC=0.000301 18 + 682 : 228TH G 1900.14 17 9 3 + 688 : 228TH G 1383.2 2 100 9 I + 689 : 228TH3 G FLAG=K + 690 : 228TH G 1505.9 2 100 9 I + 691 : 228TH3 G FLAG=K + 692 : 228TH G 1523.4 2 109 11 & + 693 : 228TH3 G FLAG=IK + 694 : 228TH G 1715.06 10 91 6 I + 695 : 228TH3 G FLAG=K + 700 : 228TH G 490.33 15 93 19 L + 701 : 228TH3 G FLAG=M + 702 : 228TH G 1074.71 15 84 25 L + 703 : 228TH3 G FLAG=M + 704 : 228TH G 1907.18 20 100 8 L + 705 : 228TH3 G FLAG=M + 709 : 228TH G 724.42 11 7.9 9 & + 710 : 228TH3 G FLAG=IK + 711 : 228TH G 750.10 10 7.0 8 I + 712 : 228TH3 G FLAG=K + 713 : 228TH G 865.15 13 5.2 7 I + 714 : 228TH3 G FLAG=K + 715 : 228TH G 956.8 2 26 5 I + 716 : 228TH3 G FL=968.369$ FLAG=K + 717 : 228TH G 1529.02 6 27.2 14 I + 718 : 228TH3 G FLAG=K + Compare OLD/NEW cards + 719 : 228TH G 1738.48 5 100 5 M1+E2 I + 720 : 228TH3 G FLAG=K + 719 : 228TH G 1738.48 5 100 5 M1+E2 0.0059 22 I + 721 : 228THS G KC=0.0046 17$LC=8.4E-4 30$MC=2.00E-4 71 + 721 : 228THS G NC=5.3E-5 19$OC=1.26E-5 45$PC=2.44E-6 89$QC=2.29E-7 92$IPC=2.23E-4 81 + 725 : 228TH G 168.42 9 12 3 I + 726 : 228TH3 G FLAG=K + 727 : 228TH G 389.12 15 42 6 L + 728 : 228TH3 G FLAG=M + 729 : 228TH G 584.7 3 30 10 & + 730 : 228TH3 G FLAG=IKP + 731 : 228TH G 1741.74 21 43 12 + Compare OLD/NEW cards + 732 : 228TH G 1870.81 9 100 6 (M1+E2) + 732 : 228TH G 1870.81 9 100 6 (M1+E2) 0.0051 18 + 733 : 228THS G KC=0.0038 14$LC=7.0E-4 24$MC=1.67E-4 56 + 733 : 228THS G NC=4.4E-5 15$OC=1.05E-5 36$PC=2.04E-6 70$QC=1.92E-7 72$IPC=3.0E-4 11 + 736 : 228TH G 397.94 10 100 11 L + 737 : 228TH3 G FLAG=M + 738 : 228TH G 1062.55 15 37 11 L + 739 : 228TH3 G FLAG=M + 740 : 228TH G 1750.54 20 30 3 L + 741 : 228TH3 G FLAG=M + 742 : 228TH G 1879.6 3 4.8 18 L + 743 : 228TH3 G FLAG=M + Compare OLD/NEW cards + 747 : 228TH G 184.61 5 1.7 2 (M1) 3.45 I + 748 : 228TH3 G FLAG=K + 747 : 228TH G 184.61 5 1.7 2 (M1) 3.26 I + 749 : 228THS G KC=2.61 4$LC=0.495 7$MC=0.1189 17 + 749 : 228THS G NC=0.0317 5$OC=0.00751 11$PC=0.001457 21$QC=0.0001383 20 + Compare OLD/NEW cards + 749 : 228TH G 220.61 2 5.2 3 (M1) 2.10 I + 750 : 228TH3 G FLAG=K + 749 : 228TH G 220.61 2 5.2 3 (M1) 1.98 I + 751 : 228THS G KC=1.581 23$LC=0.299 5$MC=0.0719 10 + 751 : 228THS G NC=0.0192 3$OC=0.00454 7$PC=0.000881 13$QC=8.36E-5 12 + Compare OLD/NEW cards + 751 : 228TH G 299.10 10 1.79 21M1 0.90 I + 752 : 228TH3 G FLAG=K + 751 : 228TH G 299.10 10 1.79 21M1 0.849 I + 753 : 228THS G KC=0.680 10$LC=0.1280 18$MC=0.0307 5 + 753 : 228THS G NC=0.00819 12$OC=0.00194 3$PC=0.000377 6$QC=3.57E-5 5 + Compare OLD/NEW cards + 753 : 228TH G 306.61 2 8.3 4 M1 0.84 I + 754 : 228TH3 G FLAG=K + 753 : 228TH G 306.61 2 8.3 4 M1 0.793 I + 755 : 228THS G KC=0.635 9$LC=0.1195 17$MC=0.0287 4 + 755 : 228THS G NC=0.00765 11$OC=0.00181 3$PC=0.000351 5$QC=3.33E-5 5 + 755 : 228TH G 512.79 11 5.5 6 I + 756 : 228TH3 G FLAG=K + Compare OLD/NEW cards + 757 : 228TH G 718.31 2 26.2 17(E1) + 757 : 228TH G 718.31 2 26.2 17(E1) 0.00628 + 758 : 228THS G KC=0.00513 8$LC=0.000870 13$MC=0.000206 3 + 758 : 228THS G NC=5.47E-5 8$OC=1.285E-5 18$PC=2.46E-6 4$QC=2.18E-7 3 + 758 : 228TH G 776.52 3 32 3 + Compare OLD/NEW cards + 759 : 228TH G 791.44 9 15 2 (M1) 0.0661 @ + 759 : 228TH G 791.44 9 15 2 (M1) 0.0618 @ + 760 : 228THS G KC=0.0498 7$LC=0.00915 13$MC=0.00219 3 + 760 : 228THS G NC=0.000584 9$OC=0.0001382 20$PC=2.68E-5 4$QC=2.56E-6 4 + 760 : 228TH G 853.97 8 3.4 3 I + 761 : 228TH3 G FLAG=K + 762 : 228TH G 922.5 2 9.4 5 I + 763 : 228TH3 G FLAG=K + 764 : 228TH G 928.4 2 3.7 3 I + 765 : 228TH3 G FLAG=K + Compare OLD/NEW cards + 766 : 228TH G 975.98 5 56 3 M1 0.0381 + 767 : 228TH3 G FL=968.968 + 766 : 228TH G 975.98 5 56 3 M1 0.0356 + 768 : 228THS G KC=0.0287 4$LC=0.00524 8$MC=0.001254 18 + 768 : 228THS G NC=0.000334 5$OC=7.91E-5 11$PC=1.537E-5 22$QC=1.468E-6 21 + 768 : 228TH G 1070.40 7 5.0 3 I + 769 : 228TH3 G FLAG=K + 770 : 228TH G 1549.3 2 5.0 8 I + 771 : 228TH3 G FLAG=K + Compare OLD/NEW cards + 772 : 228TH G 1758.11 5 37.7 20E2+M1 -9 1 + 772 : 228TH G 1758.11 5 37.7 20E2+M1 -9 1 0.00371 + 773 : 228THS G KC=0.00285 5$LC=0.000533 8$MC=0.0001281 19 + 773 : 228THS G NC=3.41E-5 5$OC=8.03E-6 12$PC=1.542E-6 23$QC=1.369E-7 20 + 773 : 228THS G IPC=0.0001515 22 + Compare OLD/NEW cards + 773 : 228TH G 1887.12 5 100 5 E2+M1 -9.1 9 + 773 : 228TH G 1887.12 5 100 5 E2+M1 -9.1 9 0.00333 + 774 : 228THS G KC=0.00251 4$LC=0.000462 7$MC=0.0001107 16 + 774 : 228THS G NC=2.95E-5 5$OC=6.95E-6 10$PC=1.336E-6 19$QC=1.201E-7 18 + 774 : 228THS G IPC=0.000205 3 + 777 : 228TH G 1772.2 3 100 28 L + 778 : 228TH3 G FLAG=M + 779 : 228TH G 1958.4 3 83 28 L + 780 : 228TH3 G FLAG=M + 785 : 228TH G 548.74 11 46 LT I + 786 : 228TH3 G FLAG=K + 789 : 228TH G 1778.0 6 6 2 I + 790 : 228TH3 G FLAG=K + 791 : 228TH G 1907.13 11 100 9 I + 792 : 228TH3 G FLAG=K + 793 : 228TH G 1965.22 12 43 4 & + 794 : 228TH3 G FLAG=K + 798 : 228TH G 1455.0 2 87 5 I + 799 : 228TH3 G FLAG=K + 800 : 228TH G 1578.2 2 100 10 I + 801 : 228TH3 G FLAG=K + 802 : 228TH G 1787.2 2 28 3 I + 803 : 228TH3 G FLAG=K + 804 : 228TH G 1916.6 3 11.3 23 I + 805 : 228TH3 G FLAG=K + 809 : 228TH G 1013.54 13 32 4 & + 810 : 228TH3 G FLAG=IK + 811 : 228TH G 1795.15 6 100 6 I + 812 : 228TH3 G FLAG=K + 813 : 228TH G 1924.2 2 15.1 17 I + 814 : 228TH3 G FLAG=K + 818 : 228TH G 1017.92 20 29 7 L + 819 : 228TH3 G FL=968.968$ FLAG=M + 820 : 228TH G 1609.41 15 39 8 L + 821 : 228TH3 G FLAG=M + 822 : 228TH G 1800.86 20 22 4 L + 823 : 228TH3 G FLAG=M + 824 : 228TH G 1929.78 20 100 11 L + 825 : 228TH3 G FLAG=M + 829 : 228TH G 388.6 3 G + 836 : 228TH G 214.85 10 49 7 L ? + 837 : 228TH3 G FL=1795.90$ FLAG=M + 839 : 228TH G 372.57 20 11 3 L ? + 840 : 228TH3 G FL=1638.284$ FLAG=MB + 841 : 228TH G 887.33 10 46 5 L + 842 : 228TH3 G FLAG=M + 843 : 228TH G 919.01 13 47 6 + 845 : 228TH G 1040.92 15 75 15 L + 846 : 228TH3 G FLAG=M + 847 : 228TH G 1823.21 10 65 6 + 848 : 228TH G 1952.37 10 100 7 + 852 : 228TH G 1826.7 3 100 38 L + 853 : 228TH3 G FLAG=M + 854 : 228TH G 1955.9 5 38 14 L + 855 : 228TH3 G FLAG=M + Compare OLD/NEW cards + 859 : 228TH G 1620.67 10 100 (M1+E2) I + 860 : 228TH3 G FLAG=K + 859 : 228TH G 1620.67 10 100 (M1+E2) 0.0069 27 I + 861 : 228THS G KC=0.0054 22$LC=9.9E-4 38$MC=2.38E-4 89 + 861 : 228THS G NC=6.3E-5 24$OC=1.50E-5 57$PC=2.9E-6 11$QC=2.7E-7 12$IPC=1.55E-4 58 + 865 : 228TH G 1053.09 20 220 68 L ? + 866 : 228TH3 G FL=968.968$ FLAG=MB + 868 : 228TH G 1148.16 14 100 20 + 869 : 228TH G 1965.22 12 143 14 & + 870 : 228TH3 G FLAG=M + 876 : 228TH G 939.87 15 200 70 L ? + 877 : 228TH3 G FL=1091.017$ FLAG=MB + 878 : 228TH G 1013.58 20 100 28 L + 879 : 228TH3 G FLAG=M + 880 : 228TH G 1971.9 3 78 17 L + 881 : 228TH3 G FLAG=M + 882 : 228TH G 2029.4 5 39 11 L + 883 : 228TH3 G FLAG=M + 887 : 228TH G 1850.13 20 100 18 L + 888 : 228TH3 G FLAG=M + 889 : 228TH G 1979.3 3 41 11 L + 890 : 228TH3 G FLAG=M + 896 : 228TH G 1795.1 5 100 38 L + 897 : 228TH3 G FLAG=M + 898 : 228TH G 1936.3 3 100 24 L + 899 : 228TH3 G FLAG=M + Compare OLD/NEW cards + 903 : 228TH G 371.4 3 [E2] G + 903 : 228TH G 371.4 3 [E2] 0.0910 G + 904 : 228THS G KC=0.0478 7$LC=0.0318 5$MC=0.00844 12 + 904 : 228THS G NC=0.00226 4$OC=0.000513 8$PC=8.96E-5 13$QC=2.81E-6 4 + Compare OLD/NEW cards + 907 : 228TH G 419.8 3 [E2] G + 908 : 228THF G FL=1988.1 + 907 : 228TH G 419.8 3 [E2] 0.0657 G + 909 : 228THS G KC=0.0377 6$LC=0.0207 3$MC=0.00545 8 + 909 : 228THS G NC=0.001459 21$OC=0.000332 5$PC=5.86E-5 9$QC=2.15E-6 3 + 910 : 228TH 228AC B- DECAY 1987DA28 97NDS 199704 + 912 : 228TH DG CC$FROM BrIcc v2.3b (16-Dec-2014) 2008Ki07, "Frozen Orbitals" appr. + 912 : 228TH CG MR$IF NO VALUE GIVEN IT WAS ASSUMED MR=1.00 FOR E2/M1, + 912 : 228TH2CG MR=1.00 FOR E3/M2 AND MR=0.10 FOR THE OTHER MULTIPOLARITIES + 999 : 228TH G 56.96 5 0.019 4 + Compare OLD/NEW cards + 1000 : 228TH G 137.91 5 0.024 5 M1 7.90 + 1000 : 228TH G 137.91 5 0.024 5 M1 7.44 + 1001 : 228THS G KC=5.94 9$LC=1.135 16$MC=0.273 4 + 1001 : 228THS G NC=0.0728 11$OC=0.01724 25$PC=0.00335 5$QC=0.000318 5 + 1002 : 228TH G 466.40 10 0.029 3 + 1003 : 228TH G 634.18 10 0.0106 21 + 1004 : 228TH G 853.17 10 0.0088 18 U + 1005 : 228TH G 1337.33 20 0.0049 15 + 1006 : 228TH G 1378.23 10 0.0059 18 + 1007 : 228TH G 1385.39 10 0.0106 21 + 1008 : 228TH G 1434.22 15 0.0080 23 + 1009 : 228TH G 1438.01 10 0.0059 15 + 1010 : 228TH G 1480.37 15 0.016 3 + 1011 : 228TH G 1529.05 10 0.057 6 + 1012 : 228TH G 1671.64 15 0.0041 13 + 1013 : 228TH G 1684.01 20 0.015 5 + 1014 : 228TH G 1721.4 3 0.0057 21 + 1015 : 228TH G 1745.28 20 0.0065 8 + 1016 : 228TH G 1784.4 3 0.0059 10 + 1017 : 228TH G 1787.3 5 0.0013 5 + 1018 : 228TH G 1915.9 4 0.0008 3 + 1019 : 228TH G 1919.5 3 0.0021 5 + 1020 : 228TH G 1944.20 20 0.0021 5 + 1021 : 228TH G 2000.9 5 0.0010 3 + Compare OLD/NEW cards + 1026 : 228TH G 57.766 5 0.47 3 E2 156 A + 1027 : 228TH3 G FLAG=H + 1028 : 228THS G LC=114$ MC=31.1$ NC+=11.4 + 1026 : 228TH G 57.766 5 0.47 3 E2 153.1 A + 1028 : 228THS G LC=112.0 16$MC=30.7 5 + 1028 : 228THS G NC=8.22 12$OC=1.83 3$PC=0.302 5$QC=0.000869 13 + Compare OLD/NEW cards + 1034 : 228TH G 129.065 1 2.42 9 E2 3.81 A + 1035 : 228TH3 G FLAG=E + 1036 : 228THS G KC=0.269$ LC=2.58$ MC=0.707$ NC+=0.263 + 1034 : 228TH G 129.065 1 2.42 9 E2 3.74 A + 1036 : 228THS G KC=0.264 4$LC=2.54 4$MC=0.697 10 + 1036 : 228THS G NC=0.187 3$OC=0.0417 6$PC=0.00696 10$QC=4.23E-5 6 + Compare OLD/NEW cards + 1042 : 228TH G 270.245 2 3.46 6 E1 0.0474 A + 1043 : 228TH3 G FLAG=E + 1044 : 228THS G KC=0.0379$ LC=0.00721$ MC=0.00173$ NC+=0.00061 + 1042 : 228TH G 270.245 2 3.46 6 E1 0.0470 A + 1044 : 228THS G KC=0.0376 6$LC=0.00716 10$MC=0.001717 24 + 1044 : 228THS G NC=0.000454 7$OC=0.0001054 15$PC=1.96E-5 3$QC=1.473E-6 21 + Compare OLD/NEW cards + 1046 : 228TH G 328.000 6 2.95 12E1 0.0308 H + 1047 : 228THS G KC=0.0247$ LC=0.00458$ MC=0.00110$ NC+=0.00039 + 1046 : 228TH G 328.000 6 2.95 12E1 0.0305 H + 1047 : 228THS G KC=0.0245 4$LC=0.00455 7$MC=0.001089 16 + 1047 : 228THS G NC=0.000288 4$OC=6.71E-5 10$PC=1.256E-5 18$QC=9.82E-7 14 + Compare OLD/NEW cards + 1050 : 228TH G 191.353 10 0.123 8 E2 0.791 H + 1051 : 228THS G KC=0.174$ LC=0.450$ MC=0.123$ NC+=0.0454 + 1050 : 228TH G 191.353 10 0.123 8 E2 0.776 H + 1051 : 228THS G KC=0.1710 24$LC=0.443 7$MC=0.1209 17 + 1051 : 228THS G NC=0.0324 5$OC=0.00726 11$PC=0.001224 18$QC=1.375E-5 20 + Compare OLD/NEW cards + 1057 : 228TH G 209.253 6 3.89 7 E1 0.086 E + 1058 : 228THS G KC=0.0678$ LC=0.0135$ MC=0.00323$ NC+=0.00114 + 1057 : 228TH G 209.253 6 3.89 7 E1 0.0848 E + 1058 : 228THS G KC=0.0672 10$LC=0.01333 19$MC=0.00321 5 + 1058 : 228THS G NC=0.000848 12$OC=0.000196 3$PC=3.60E-5 5$QC=2.55E-6 4 + Compare OLD/NEW cards + 1061 : 228TH G 338.320 3 11.27 19E1 0.0288 A + 1062 : 228TH3 G FLAG=D + 1063 : 228THS G KC=0.0231$ LC=0.00426$ MC=0.00102$ NC+=0.00036 + 1061 : 228TH G 338.320 3 11.27 19E1 0.0285 A + 1063 : 228THS G KC=0.0229 4$LC=0.00424 6$MC=0.001014 15 + 1063 : 228THS G NC=0.000269 4$OC=6.25E-5 9$PC=1.172E-5 17$QC=9.22E-7 13 + Compare OLD/NEW cards + 1068 : 228TH G 141.02 3 0.050 8 E1 0.220 J + 1069 : 228THS G KC=0.171$ LC=0.0366$ MC=0.0088$ NC+=0.00313 + 1068 : 228TH G 141.02 3 0.050 8 E1 0.217 J + 1069 : 228THS G KC=0.1689 24$LC=0.0362 5$MC=0.00875 13 + 1069 : 228THS G NC=0.00231 4$OC=0.000529 8$PC=9.53E-5 14$QC=6.10E-6 9 + Compare OLD/NEW cards + 1072 : 228TH G 332.370 4 0.40 4 E1 0.0299 A + 1073 : 228TH3 G FLAG=EJ + 1074 : 228THS G KC=0.0240$ LC=0.00444$ MC=0.00106$ NC+=0.00038 + 1072 : 228TH G 332.370 4 0.40 4 E1 0.0297 A + 1074 : 228THS G KC=0.0238 4$LC=0.00441 7$MC=0.001056 15 + 1074 : 228THS G NC=0.000280 4$OC=6.51E-5 10$PC=1.219E-5 17$QC=9.56E-7 14 + Compare OLD/NEW cards + 1078 : 228TH G 503.823 13 0.182 12(E1) 0.0125 A + 1079 : 228TH3 G FLAG=G + 1080 : 228THS G KC=0.0101$ LC=0.00178 + 1078 : 228TH G 503.823 13 0.182 12(E1) 0.01243 A + 1080 : 228THS G KC=0.01009 15$LC=0.001775 25$MC=0.000422 6 + 1080 : 228THS G NC=0.0001119 16$OC=2.62E-5 4$PC=4.97E-6 7$QC=4.19E-7 6 + Compare OLD/NEW cards + 1082 : 228TH G 774.1 2 0.06 AP[E2] 0.0167 + 1083 : 228THS G KC=0.0122$ LC=0.00339 + 1082 : 228TH G 774.1 2 0.06 AP[E2] 0.01649 + 1083 : 228THS G KC=0.01204 17$LC=0.00333 5$MC=0.000835 12 + 1083 : 228THS G NC=0.000223 4$OC=5.17E-5 8$PC=9.54E-6 14$QC=6.19E-7 9 + Compare OLD/NEW cards + 1087 : 228TH G 478.33 5 0.209 15E1 0.0139 + 1088 : 228THS G KC=0.0112$ LC=0.00199$ MC=0.00047$ NC+=0.00017 + 1087 : 228TH G 478.33 5 0.209 15E1 0.01380 + 1088 : 228THS G KC=0.01119 16$LC=0.00198 3$MC=0.000471 7 + 1088 : 228THS G NC=0.0001249 18$OC=2.92E-5 4$PC=5.54E-6 8$QC=4.63E-7 7 + Compare OLD/NEW cards + 1089 : 228TH G 546.47 5 0.201 13[E1] 0.0106 + 1090 : 228THS G KC=0.0086$ LC=0.00151 + 1089 : 228TH G 546.47 5 0.201 13[E1] 0.01058 + 1090 : 228THS G KC=0.00860 12$LC=0.001500 21$MC=0.000357 5 + 1090 : 228THS G NC=9.45E-5 14$OC=2.22E-5 4$PC=4.21E-6 6$QC=3.60E-7 5 + Compare OLD/NEW cards + 1091 : 228TH G 688.10 5 0.067 5 [E2] 0.0212 & + 1092 : 228TH2 G FL=186.823$ FLAG=B + 1093 : 228THS G KC=0.0151$ LC=0.00464 + 1091 : 228TH G 688.10 5 0.067 5 [E2] 0.0210 & + 1093 : 228THS G KC=0.01490 21$LC=0.00455 7$MC=0.001153 17 + 1093 : 228THS G NC=0.000308 5$OC=7.12E-5 10$PC=1.303E-5 19$QC=7.79E-7 11 + Compare OLD/NEW cards + 1094 : 228TH G 816.71 10 0.030 3 [M1,E2] 0.038 23 + 1095 : 228THS G KC=0.030 19$ LC=0.006 3 + 1094 : 228TH G 816.71 10 0.030 3 [M1,E2] 0.036 21 + 1095 : 228THS G KC=0.028 18$LC=0.0057 28$MC=0.00137 65 + 1095 : 228THS G NC=3.7E-4 18$OC=8.6E-5 42$PC=1.65E-5 82$QC=1.46E-6 90 + Compare OLD/NEW cards + 1096 : 228TH G 874.44 7 0.047 10[E2] 0.0131 A + 1097 : 228THS G KC=0.0098$ LC=0.00249 + 1096 : 228TH G 874.44 7 0.047 10[E2] 0.01294 A + 1097 : 228THS G KC=0.00968 14$LC=0.00245 4$MC=0.000608 9 + 1097 : 228THS G NC=0.0001623 23$OC=3.78E-5 6$PC=7.03E-6 10$QC=4.90E-7 7 + Compare OLD/NEW cards + 1099 : 228TH G 610.64 10 0.023 5 [E1] + 1099 : 228TH G 610.64 10 0.023 5 [E1] 0.00853 + 1100 : 228THS G KC=0.00695 10$LC=0.001198 17$MC=0.000284 4 + 1100 : 228THS G NC=7.54E-5 11$OC=1.769E-5 25$PC=3.37E-6 5$QC=2.93E-7 4 + Compare OLD/NEW cards + 1100 : 228TH G 880.76 10 0.0062 18[E2] 0.0129 + 1101 : 228THS G KC=0.0096$ LC=0.00244 + 1100 : 228TH G 880.76 10 0.0062 18[E2] 0.01276 + 1101 : 228THS G KC=0.00956 14$LC=0.00240 4$MC=0.000597 9 + 1101 : 228THS G NC=0.0001594 23$OC=3.71E-5 6$PC=6.90E-6 10$QC=4.83E-7 7 + 1105 : 228TH G 616.22 3 0.080 5 A + 1106 : 228TH G 944.196 14 0.095 8 A + Compare OLD/NEW cards + 1110 : 228TH G 449.15 5 0.048 5 [E2] 0.0563 A + 1111 : 228THS G KC=0.0335$ LC=0.0168$ MC=0.00439$ NC+=0.00162 + 1110 : 228TH G 449.15 5 0.048 5 [E2] 0.0554 A + 1111 : 228THS G KC=0.0331 5$LC=0.01653 24$MC=0.00432 6 + 1111 : 228THS G NC=0.001157 17$OC=0.000264 4$PC=4.68E-5 7$QC=1.86E-6 3 + Compare OLD/NEW cards + 1112 : 228TH G 572.14 8 0.150 16[M1,E2] 0.09 7 A + 1113 : 228THS G KC=0.07 6$ LC=0.016 8 + 1112 : 228TH G 572.14 8 0.150 16[M1,E2] 0.089 58 A + 1113 : 228THS G KC=0.069 49$LC=0.0148 71$MC=0.0036 17 + 1113 : 228THS G NC=9.6E-4 44$OC=2.3E-4 11$PC=4.3E-5 21$QC=3.6E-6 25 + Compare OLD/NEW cards + 1114 : 228TH G 640.34 3 0.054 5 [E2] 0.0247 A + 1115 : 228THS G KC=0.0172$ LC=0.00567 + 1114 : 228TH G 640.34 3 0.054 5 [E2] 0.0245 A + 1115 : 228THS G KC=0.01700 24$LC=0.00556 8$MC=0.001416 20 + 1115 : 228THS G NC=0.000378 6$OC=8.73E-5 13$PC=1.589E-5 23$QC=8.98E-7 13 + Compare OLD/NEW cards + 1119 : 228TH G 782.142 5 0.485 19[E2] 0.0163 A + 1120 : 228TH3 G FLAG=E + 1121 : 228THS G KC=0.0119$ LC=0.00330 + 1119 : 228TH G 782.142 5 0.485 19[E2] 0.01615 A + 1121 : 228THS G KC=0.01182 17$LC=0.00324 5$MC=0.000812 12 + 1121 : 228THS G NC=0.000217 3$OC=5.03E-5 7$PC=9.29E-6 13$QC=6.07E-7 9 + Compare OLD/NEW cards + 1125 : 228TH G 911.204 4 25.8 4 E2 0.0121 A + 1126 : 228TH3 G FLAG=D + 1127 : 228THS G KC=0.0091$ LC=0.00225 + 1125 : 228TH G 911.204 4 25.8 4 E2 0.01194 A + 1127 : 228THS G KC=0.00900 13$LC=0.00221 3$MC=0.000549 8 + 1127 : 228THS G NC=0.0001463 21$OC=3.41E-5 5$PC=6.36E-6 9$QC=4.53E-7 7 + Compare OLD/NEW cards + 1131 : 228TH G 968.971 17 15.8 3 E2 0.0107 A + 1132 : 228TH3 G FLAG=D + 1133 : 228THS G KC=0.00815$ LC=0.00194 + 1131 : 228TH G 968.971 17 15.8 3 E2 0.01061 A + 1133 : 228THS G KC=0.00806 12$LC=0.00191 3$MC=0.000472 7 + 1133 : 228THS G NC=0.0001258 18$OC=2.93E-5 5$PC=5.49E-6 8$QC=4.04E-7 6 + Compare OLD/NEW cards + 1139 : 228TH G 583.41 5 0.111 10[E1] 0.0094 + 1140 : 228THS G KC=0.00761$ LC=0.00132 + 1139 : 228TH G 583.41 5 0.111 10[E1] 0.00932 + 1140 : 228THS G KC=0.00759 11$LC=0.001313 19$MC=0.000312 5 + 1140 : 228THS G NC=8.27E-5 12$OC=1.94E-5 3$PC=3.69E-6 6$QC=3.18E-7 5 + Compare OLD/NEW cards + 1142 : 228TH G 651.51 3 0.090 8 [E1] 0.0076 A + 1143 : 228THS G KC=0.00617$ LC=0.00106 + 1142 : 228TH G 651.51 3 0.090 8 [E1] 0.00754 A + 1143 : 228THS G KC=0.00615 9$LC=0.001053 15$MC=0.000250 4 + 1143 : 228THS G NC=6.62E-5 10$OC=1.555E-5 22$PC=2.97E-6 5$QC=2.60E-7 4 + Compare OLD/NEW cards + 1144 : 228TH G 792.8 0.08 AP[E2] 0.0159 + 1145 : 228THS G KC=0.0116$ LC=0.00319 + 1144 : 228TH G 792.8 0.08 AP[E2] 0.01572 + 1145 : 228THS G KC=0.01154 17$LC=0.00313 5$MC=0.000784 11 + 1145 : 228THS G NC=0.000209 3$OC=4.85E-5 7$PC=8.98E-6 13$QC=5.91E-7 9 + Compare OLD/NEW cards + 1146 : 228TH G 921.98 10 0.0147 21[M1,E2] 0.028 17 & + 1147 : 228THS G KC=0.022 14$ LC=0.0044 22 + 1146 : 228TH G 921.98 10 0.0147 21[M1,E2] 0.027 15 & + 1147 : 228THS G KC=0.021 13$LC=0.0041 20$MC=1.00E-3 47 + 1147 : 228THS G NC=2.7E-4 13$OC=6.3E-5 30$PC=1.20E-5 59$QC=1.08E-6 64 + Compare OLD/NEW cards + 1150 : 228TH G 979.48 10 0.026 3 [E2] 0.0105 + 1151 : 228THS G KC=0.00799$ LC=0.00189 + 1150 : 228TH G 979.48 10 0.026 3 [E2] 0.01039 + 1151 : 228THS G KC=0.00791 11$LC=0.00186 3$MC=0.000460 7 + 1151 : 228THS G NC=0.0001225 18$OC=2.86E-5 4$PC=5.36E-6 8$QC=3.96E-7 6 + 1155 : 228TH G 620.38 5 0.080 5 + 1156 : 228TH G 688.10 5 0.067 5 & + 1157 : 228TH2 G FL=328.003 + 1160 : 228TH G 958.61 4 0.28 4 A + 1161 : 228TH3 G FLAG=H + 1162 : 228TH G 1016.44 15 0.019 3 & + Compare OLD/NEW cards + 1166 : 228TH G 835.710 6 1.61 6 E2 0.0143 A + 1167 : 228TH3 G FLAG=EJ + 1168 : 228THS G KC=0.0106$ LC=0.00279 + 1166 : 228TH G 835.710 6 1.61 6 E2 0.01415 A + 1168 : 228THS G KC=0.01050 15$LC=0.00274 4$MC=0.000683 10 + 1168 : 228THS G NC=0.000182 3$OC=4.24E-5 6$PC=7.86E-6 11$QC=5.34E-7 8 + Compare OLD/NEW cards + 1170 : 228TH G 964.766 10 4.99 9 E2+M1 -7.2 10 0.0108 A + 1171 : 228TH3 G FLAG=E + 1172 : 228THS G KC=0.00821$ LC=0.00196 + 1170 : 228TH G 964.766 10 4.99 9 E2+M1 -7.2 10 0.0111923 A + 1172 : 228THS G KC=0.00853 19$LC=0.00199 4$MC=0.000492 9 + 1172 : 228THS G NC=0.0001312 23$OC=3.06E-5 6$PC=5.74E-6 11$QC=4.28E-7 10 + Compare OLD/NEW cards + 1177 : 228TH G 540.76 10 0.026 3 [M1,E2] 0.11 8 + 1178 : 228THS G KC=0.08 6$ LC=0.018 9 + 1177 : 228TH G 540.76 10 0.026 3 [M1,E2] 0.103 68 + 1178 : 228THS G KC=0.080 57$LC=0.0173 82$MC=0.0042 19 + 1178 : 228THS G NC=0.00113 50$OC=2.6E-4 12$PC=5.0E-5 25$QC=4.2E-6 29 + Compare OLD/NEW cards + 1179 : 228TH G 663.82 10 0.028 6 (M1+E2) 0.06 4 J + 1180 : 228THS G KC=0.05 4$ LC=0.010 6 + 1179 : 228TH G 663.82 10 0.028 6 (M1+E2) 0.061 38 J + 1180 : 228THS G KC=0.048 32$LC=0.0098 48$MC=0.0024 12 + 1180 : 228THS G NC=6.4E-4 30$OC=1.50E-4 72$PC=2.9E-5 15$QC=2.5E-6 17 + Compare OLD/NEW cards + 1181 : 228TH G 873.17 15 0.031 6 [E1] 0.00441 + 1182 : 228THS G KC=0.00361$ LC=0.00060 + 1181 : 228TH G 873.17 15 0.031 6 [E1] 0.00440 + 1182 : 228THS G KC=0.00361 5$LC=0.000601 9$MC=0.0001421 20 + 1182 : 228THS G NC=3.77E-5 6$OC=8.87E-6 13$PC=1.704E-6 24$QC=1.546E-7 22 + Compare OLD/NEW cards + 1186 : 228TH G 904.20 4 0.77 3 E2 0.0123 A + 1187 : 228TH3 G FLAG=FJ + 1188 : 228THS G KC=0.0092$ LC=0.00229 + 1186 : 228TH G 904.20 4 0.77 3 E2 0.01212 A + 1188 : 228THS G KC=0.00912 13$LC=0.00225 4$MC=0.000559 8 + 1188 : 228THS G NC=0.0001492 21$OC=3.47E-5 5$PC=6.48E-6 9$QC=4.60E-7 7 + Compare OLD/NEW cards + 1191 : 228TH G 1033.248 9 0.201 13E2 0.0095 A + 1192 : 228TH3 G FLAG=J + 1193 : 228THS G KC=0.00727$ LC=0.00167 + 1191 : 228TH G 1033.248 9 0.201 13E2 0.00938 A + 1193 : 228THS G KC=0.00720 10$LC=0.001643 23$MC=0.000404 6 + 1193 : 228THS G NC=0.0001078 15$OC=2.52E-5 4$PC=4.73E-6 7$QC=3.58E-7 5 + Compare OLD/NEW cards + 1197 : 228TH G 100.41 3 0.093 13(E1+M2) 0.23 AP 3.2 AP + 1198 : 228THS G LC=2.4$ MC=0.64$ NC+=0.25 + 1197 : 228TH G 100.41 3 0.093 13(E1+M2) 0.23 AP 3.10 AP + 1198 : 228THS G LC AP 2.27$MC AP 0.615 + 1198 : 228THS G NC AP 0.1676$OC AP 0.0393$PC AP 0.00738$QC AP 0.000589 + Compare OLD/NEW cards + 1202 : 228TH G 153.977 10 0.722 21E1 0.178 E + 1203 : 228TH3 G FL=968.968 + 1204 : 228THS G KC=0.139$ LC=0.0292$ MC=0.00703$ NC+=0.00250 + 1202 : 228TH G 153.977 10 0.722 21E1 0.1757 E + 1204 : 228THS G KC=0.1375 20$LC=0.0289 4$MC=0.00697 10 + 1204 : 228THS G NC=0.00184 3$OC=0.000422 6$PC=7.65E-5 11$QC=5.02E-6 7 + Compare OLD/NEW cards + 1206 : 228TH G 726.863 15 0.62 8 (E2) 0.0189 + 1207 : 228THS G KC=0.0136$ LC=0.00400 + 1206 : 228TH G 726.863 15 0.62 8 (E2) 0.0187 + 1207 : 228THS G KC=0.01349 19$LC=0.00393 6$MC=0.000990 14 + 1207 : 228THS G NC=0.000264 4$OC=6.12E-5 9$PC=1.125E-5 16$QC=7.00E-7 10 + Compare OLD/NEW cards + 1209 : 228TH G 794.947 5 4.25 7 E2+M1 -4.4 10 0.0182 15 A + 1210 : 228TH3 G FLAG=DK + 1211 : 228THS G KC=0.0136 13$ LC=0.00349 20 + 1209 : 228TH G 794.947 5 4.25 7 E2+M1 -4.4 10 0.0179 14 A + 1211 : 228THS G KC=0.0133 12$LC=0.00340 19$MC=0.00085 5 + 1211 : 228THS G NC=0.000226 12$OC=5.3E-5 3$PC=9.8E-6 6$QC=6.8E-7 6 + 1215 : 228TH G 1065.18 4 0.132 10 A + Compare OLD/NEW cards + 1220 : 228TH G 173.964 13 0.035 5 M1+E2 1.2 +11-6 2.3 18 A + 1221 : 228THS G KC=1.5 10$ LC=0.66 4$ MC=0.171 22$ NC+=0.063 5 + 1220 : 228TH G 173.964 13 0.035 5 M1+E2 1.2 +11-6 2.24 90 A + 1221 : 228THS G KC=1.38 94$LC=0.63 3$MC=0.166 14 + 1221 : 228THS G NC=0.044 4$OC=0.0101 7$PC=0.00180 5$QC=7.8E-5 48 + Compare OLD/NEW cards + 1225 : 228TH G 184.54 2 0.070 8 E0+M1 63 8 4.5 8 + 1226 : 228TH3 G FL=968.968 + 1227 : 228THS G KC=53 7$ LC=10.2 13$ MC=0.126$ NC+=0.0462 + Compare OLD/NEW cards + 1234 : 228TH G 278.95 5 0.160 21(M1,E2) 0.7 5 @ + 1235 : 228TH3 G FL=874.473$ FLAG=N + 1236 : 228THS G KC=0.48 39$ LC=0.130 35$ MC=0.033 7$ NC+=0.0119 24 + 1234 : 228TH G 278.95 5 0.160 21(M1,E2) 0.62 41 @ + 1236 : 228THS G KC=0.45 37$LC=0.12 3$MC=0.031 6 + 1236 : 228THS G NC=0.0083 16$OC=0.0019 5$PC=3.59E-4 99$QC=2.4E-5 19 + Compare OLD/NEW cards + 1240 : 228TH G 321.646 8 0.226 11[E2] 0.140 A + 1241 : 228TH3 G FLAG=D + 1242 : 228THS G KC=0.0643$ LC=0.0550$ MC=0.0147$ NC+=0.00544 + 1240 : 228TH G 321.646 8 0.226 11[E2] 0.1369 A + 1242 : 228THS G KC=0.0635 9$LC=0.0540 8$MC=0.01444 21 + 1242 : 228THS G NC=0.00387 6$OC=0.000875 13$PC=0.0001514 22$QC=3.88E-6 6 + Compare OLD/NEW cards + 1247 : 228TH G 1095.679 20 0.129 10[M1,E2] 0.018 10 A + 1247 : 228TH G 1095.679 20 0.129 10[M1,E2] 0.0173 90 A + 1248 : 228THS G KC=0.0138 74$LC=0.0026 13$MC=6.4E-4 29 + 1248 : 228THS G NC=1.70E-4 76$OC=4.0E-5 19$PC=7.7E-6 36$QC=7.0E-7 38 + 1248 : 228TH G 1153.52 4 0.139 10 A + Compare OLD/NEW cards + 1252 : 228TH G 77.34 3 0.026 5 [E1] 0.235 + 1253 : 228THS G LC=0.177$ MC=0.0431$ NC+=0.0150 + 1252 : 228TH G 77.34 3 0.026 5 [E1] 0.232 + 1253 : 228THS G LC=0.1747 25$MC=0.0426 6 + 1253 : 228THS G NC=0.01118 16$OC=0.00252 4$PC=0.000435 7$QC=2.30E-5 4 + Compare OLD/NEW cards + 1254 : 228TH G 145.849 10 0.158 8 E1 0.203 H + 1255 : 228TH3 G FLAG=J + 1256 : 228THS G KC=0.158$ LC=0.0336$ MC=0.00809$ NC+=0.00287 + 1254 : 228TH G 145.849 10 0.158 8 E1 0.200 H + 1256 : 228THS G KC=0.1561 22$LC=0.0332 5$MC=0.00802 12 + 1256 : 228THS G NC=0.00212 3$OC=0.000485 7$PC=8.76E-5 13$QC=5.66E-6 8 + Compare OLD/NEW cards + 1259 : 228TH G 199.407 10 0.315 5 E1 0.096 H + 1260 : 228TH3 G FLAG=J + 1261 : 228THS G KC=0.0758$ LC=0.0152$ MC=0.00365$ NC+=0.00129 + 1259 : 228TH G 199.407 10 0.315 5 E1 0.0950 H + 1261 : 228THS G KC=0.0752 11$LC=0.01502 21$MC=0.00362 5 + 1261 : 228THS G NC=0.000956 14$OC=0.000221 3$PC=4.05E-5 6$QC=2.84E-6 4 + Compare OLD/NEW cards + 1263 : 228TH G 648.84 10 0.040 4 [E2] 0.0240 & + 1264 : 228TH2 G FL=519.192 + 1265 : 228THS G KC=0.0168$ LC=0.00546 + 1263 : 228TH G 648.84 10 0.040 4 [E2] 0.0238 & + 1265 : 228THS G KC=0.01659 24$LC=0.00536 8$MC=0.001363 19 + 1265 : 228THS G NC=0.000364 5$OC=8.40E-5 12$PC=1.532E-5 22$QC=8.75E-7 13 + Compare OLD/NEW cards + 1266 : 228TH G 772.291 5 1.49 3 E2+M1 -3.4 +8-27 0.021 3 A + 1267 : 228TH3 G FLAG=EK + 1268 : 228THS G KC=0.0157 24$ LC=0.0040 4 + 1268 : 228THS G KC=0.0154 22$LC=0.0039 4$MC=0.00096 9 + 1268 : 228THS G NC=0.000256 22$OC=6.0E-5 6$PC=1.11E-5 11$QC=7.9E-7 12 + Compare OLD/NEW cards + 1271 : 228TH G 840.377 7 0.91 4 E2 0.0142 A + 1272 : 228TH3 G FLAG=EJ + 1273 : 228THS G KC=0.0105$ LC=0.00275 + 1271 : 228TH G 840.377 7 0.91 4 E2 0.01400 A + 1273 : 228THS G KC=0.01039 15$LC=0.00270 4$MC=0.000673 10 + 1273 : 228THS G NC=0.000180 3$OC=4.18E-5 6$PC=7.75E-6 11$QC=5.29E-7 8 + Compare OLD/NEW cards + 1275 : 228TH G 1110.610 10 0.285 23E1 @ + 1276 : 228TH3 G FLAG=AJN + 1275 : 228TH G 1110.610 10 0.285 23E1 0.00288 @ + 1277 : 228THS G KC=0.00237 4$LC=0.000388 6$MC=9.15E-5 13 + 1277 : 228THS G NC=2.43E-5 4$OC=5.73E-6 8$PC=1.104E-6 16$QC=1.025E-7 15 + 1277 : 228THS G IPC=7.72E-7 11 + Compare OLD/NEW cards + 1280 : 228TH G 987.71 20 0.077 13[M1,E2] 0.024 14 + 1281 : 228THS G KC=0.019 11$ LC=0.0037 18 + 1280 : 228TH G 987.71 20 0.077 13[M1,E2] 0.022 13 + 1281 : 228THS G KC=0.018 10$LC=0.0035 17$MC=8.3E-4 39 + 1281 : 228THS G NC=2.2E-4 11$OC=5.2E-5 25$PC=1.01E-5 49$QC=9.1E-7 52 + Compare OLD/NEW cards + 1285 : 228TH G 231.42 10 0.025 4 [D,E2] 1.0 9 + Compare OLD/NEW cards + 1286 : 228TH G 988.63 20 0.077 13[E2] 0.0103 + 1286 : 228TH G 988.63 20 0.077 13[E2] 0.01021 + 1287 : 228THS G KC=0.00778 11$LC=0.00182 3$MC=0.000449 7 + 1287 : 228THS G NC=0.0001198 17$OC=2.79E-5 4$PC=5.24E-6 8$QC=3.89E-7 6 + 1287 : 228TH G 1117.63 10 0.054 8 + 1288 : 228TH G 1175.31 10 0.024 3 + Compare OLD/NEW cards + 1292 : 228TH G 135.54 5 0.018 4 E1 0.242 J + 1293 : 228THS G KC=0.188$ LC=0.0406$ MC=0.0098$ NC+=0.00348 + 1292 : 228TH G 135.54 5 0.018 4 E1 0.238 J + 1293 : 228THS G KC=0.185 3$LC=0.0401 6$MC=0.00970 14 + 1293 : 228THS G NC=0.00256 4$OC=0.000585 9$PC=0.0001053 15$QC=6.66E-6 10 + Compare OLD/NEW cards + 1295 : 228TH G 204.026 10 0.112 15E1 0.091 H + 1296 : 228THS G KC=0.0719$ LC=0.0143$ MC=0.00344$ NC+=0.00122 + 1295 : 228TH G 204.026 10 0.112 15E1 0.0900 H + 1296 : 228THS G KC=0.0713 10$LC=0.01419 20$MC=0.00342 5 + 1296 : 228THS G NC=0.000903 13$OC=0.000208 3$PC=3.83E-5 6$QC=2.70E-6 4 + Compare OLD/NEW cards + 1299 : 228TH G 707.41 5 0.155 15(E2) 0.0200 H + 1300 : 228TH3 G FLAG=J + 1301 : 228THS G KC=0.0143$ LC=0.00711 + 1299 : 228TH G 707.41 5 0.155 15(E2) 0.0198 H + 1301 : 228THS G KC=0.01417 20$LC=0.00422 6$MC=0.001067 15 + 1301 : 228THS G NC=0.000285 4$OC=6.59E-5 10$PC=1.209E-5 17$QC=7.38E-7 11 + Compare OLD/NEW cards + 1302 : 228TH G 830.486 8 0.540 21E2(+M1) -7.7 9 0.0152 2 A + 1303 : 228TH3 G FLAG=FJK + 1304 : 228THS G KC=0.0113 2 $ LC=0.00293 3 + 1302 : 228TH G 830.486 8 0.540 21E2(+M1) -7.7 9 0.0150 3 A + 1304 : 228THS G KC=0.01117 22$LC=0.00287 5$MC=0.000715 12 + 1304 : 228THS G NC=0.000191 3$OC=4.43E-5 8$PC=8.24E-6 14$QC=5.69E-7 12 + 1306 : 228TH G 1039.65 15 0.044 9 + Compare OLD/NEW cards + 1310 : 228TH G 778.23 0.022 6 [M1,E2] 0.04 3 S + 1311 : 228TH3 G FLAG=T + 1312 : 228THS G KC=0.034 22$ LC=0.007 4 + 1310 : 228TH G 778.23 0.022 6 [M1,E2] 0.040 25 S + 1312 : 228THS G KC=0.032 20$LC=0.0064 32$MC=0.00156 74 + 1312 : 228THS G NC=4.2E-4 20$OC=9.8E-5 47$PC=1.87E-5 94$QC=1.6E-6 11 + Compare OLD/NEW cards + 1313 : 228TH G 901.23 15 0.016 3 [E2] 0.0123 + 1314 : 228THS G KC=0.00926$ LC=0.00231 + 1313 : 228TH G 901.23 15 0.016 3 [E2] 0.01220 + 1314 : 228THS G KC=0.00917 13$LC=0.00227 4$MC=0.000564 8 + 1314 : 228THS G NC=0.0001504 21$OC=3.50E-5 5$PC=6.53E-6 10$QC=4.63E-7 7 + Compare OLD/NEW cards + 1315 : 228TH G 1110.610 10 0.019 10E1 @ + 1316 : 228TH3 G FLAG=JN + 1315 : 228TH G 1110.610 10 0.019 10E1 0.00288 @ + 1317 : 228THS G KC=0.00237 4$LC=0.000388 6$MC=9.15E-5 13 + 1317 : 228THS G NC=2.43E-5 4$OC=5.73E-6 8$PC=1.104E-6 16$QC=1.025E-7 15 + 1317 : 228THS G IPC=7.72E-7 11 + Compare OLD/NEW cards + 1320 : 228TH G 168.65 10 0.010 3 [E1] 0.143 @ + 1321 : 228TH2 G FLAG=Q + 1322 : 228THS G KC=0.112$ LC=0.0232$ MC=0.00557$ NC+=0.00197 + 1320 : 228TH G 168.65 10 0.010 3 [E1] 0.1414 @ + 1322 : 228THS G KC=0.1111 16$LC=0.0229 4$MC=0.00552 8 + 1322 : 228THS G NC=0.001458 21$OC=0.000335 5$PC=6.11E-5 9$QC=4.10E-6 6 + Compare OLD/NEW cards + 1323 : 228TH G 824.934 23 0.050 5 [E2] 0.0147 A + 1324 : 228THS G KC=0.0108$ LC=0.00288 + 1323 : 228TH G 824.934 23 0.050 5 [E2] 0.01452 A + 1324 : 228THS G KC=0.01074 15$LC=0.00283 4$MC=0.000706 10 + 1324 : 228THS G NC=0.000188 3$OC=4.38E-5 7$PC=8.12E-6 12$QC=5.48E-7 8 + Compare OLD/NEW cards + 1325 : 228TH G 947.982 11 0.106 8 [M1,E2] 0.026 15 A + 1326 : 228THS G KC=0.021 12$ LC=0.0041 20 + 1325 : 228TH G 947.982 11 0.106 8 [M1,E2] 0.025 14 A + 1326 : 228THS G KC=0.020 12$LC=0.0038 19$MC=9.3E-4 43 + 1326 : 228THS G NC=2.5E-4 12$OC=5.8E-5 28$PC=1.12E-5 55$QC=1.00E-6 59 + 1327 : 228TH G 1016.44 15 0.019 3 & + 1328 : 228TH G 1157.14 15 0.0070 13 + 1329 : 228TH G 1286.27 20 0.050 10 + Compare OLD/NEW cards + 1333 : 228TH G 471.76 15 0.033 3 [D,E2] 0.14 12 + 1334 : 228TH G 1019.86 10 0.021 4 + 1335 : 228TH G 1088.18 15 0.0059 13 + 1336 : 228TH G 1229.40 15 0.0075 23 + Compare OLD/NEW cards + 1340 : 228TH G 257.52 10 0.030 3 (M1) 1.36 J + 1341 : 228THS G KC=1.09$ LC=0.205$ MC=0.0495$ NC+=0.0180 + 1340 : 228TH G 257.52 10 0.030 3 (M1) 1.285 J + 1341 : 228THS G KC=1.028 15$LC=0.194 3$MC=0.0466 7 + 1341 : 228THS G NC=0.01243 18$OC=0.00294 5$PC=0.000571 8$QC=5.42E-5 8 + Compare OLD/NEW cards + 1342 : 228TH G 263.58 10 0.040 4 E1 0.0502 J + 1343 : 228THS G KC=0.0400$ LC=0.00766$ MC=0.00184$ NC+=0.00065 + 1342 : 228TH G 263.58 10 0.040 4 E1 0.0498 J + 1343 : 228THS G KC=0.0397 6$LC=0.00760 11$MC=0.00182 3 + 1343 : 228THS G NC=0.000482 7$OC=0.0001119 16$PC=2.08E-5 3$QC=1.553E-6 22 + Compare OLD/NEW cards + 1344 : 228TH G 278.95 5 0.031 5 [E2] 0.216 @ + 1345 : 228TH3 G FL=1153.467$ FLAG=N + 1346 : 228THS G KC=0.086$ LC=0.096$ MC=0.0257$ NC+=0.0095 + 1344 : 228TH G 278.95 5 0.031 5 [E2] 0.211 @ + 1346 : 228THS G KC=0.0842 12$LC=0.0935 14$MC=0.0252 4 + 1346 : 228THS G NC=0.00675 10$OC=0.001521 22$PC=0.000261 4$QC=5.39E-6 8 + Compare OLD/NEW cards + 1349 : 228TH G 340.96 5 0.369 21E2+M1 -5.2 18 0.136 23 E + 1350 : 228TH3 G FLAG=JK + 1351 : 228THS G KC=0.073 20$ LC=0.046 2$ MC=0.0122 5$ NC+=0.00450 17 + 1349 : 228TH G 340.96 5 0.369 21E2+M1 -5.2 18 0.133 21 E + 1351 : 228THS G KC=0.072 19$LC=0.0451 21$MC=0.0119 5 + 1351 : 228THS G NC=0.00319 13$OC=0.00073 3$PC=0.000127 7$QC=4.2E-6 10 + Compare OLD/NEW cards + 1354 : 228TH G 409.462 6 1.92 4 E2+M1 -5.4 8 0.082 4 A + 1355 : 228TH3 G FLAG=EK + 1356 : 228THS G KC=0.049 4$ LC=0.0242 5$ MC=0.00631 10$ NC+=0.00233 4 + 1354 : 228TH G 409.462 6 1.92 4 E2+M1 -5.4 8 0.080 4 A + 1356 : 228THS G KC=0.048 3$LC=0.0236 5$MC=0.00618 12 + 1356 : 228THS G NC=0.00165 4$OC=0.000378 8$PC=6.69E-5 15$QC=2.69E-6 16 + Compare OLD/NEW cards + 1359 : 228TH G 452.47 10 0.015 5 [E2] 0.0553 + 1360 : 228THS G KC=0.0330$ LC=0.0164$ MC=0.00429$ NC+=0.00158 + 1359 : 228TH G 452.47 10 0.015 5 [E2] 0.0544 + 1360 : 228THS G KC=0.0326 5$LC=0.01613 23$MC=0.00422 6 + 1360 : 228THS G NC=0.001128 16$OC=0.000258 4$PC=4.57E-5 7$QC=1.83E-6 3 + Compare OLD/NEW cards + 1361 : 228TH G 463.004 6 4.40 7 E2 0.0522 A + 1362 : 228TH3 G FLAG=E + 1363 : 228THS G KC=0.0316$ LC=0.0152$ MC=0.00397$ NC+=0.00146 + 1361 : 228TH G 463.004 6 4.40 7 E2 0.0514 A + 1363 : 228THS G KC=0.0312 5$LC=0.01495 21$MC=0.00390 6 + 1363 : 228THS G NC=0.001044 15$OC=0.000238 4$PC=4.24E-5 6$QC=1.744E-6 25 + Compare OLD/NEW cards + 1366 : 228TH G 1103.41 10 0.0150 23[E3] B ? + 1367 : 228TH2 G FL=328.003$ FLAG=P + 1366 : 228TH G 1103.41 10 0.0150 23[E3] 0.0195 B ? + 1368 : 228THS G KC=0.01377 20$LC=0.00429 6$MC=0.001090 16 + 1368 : 228THS G NC=0.000292 4$OC=6.78E-5 10$PC=1.256E-5 18$QC=8.16E-7 12 + 1368 : 228THS G IPC=3.24E-8 5 + Compare OLD/NEW cards + 1368 : 228TH G 1245.05 20 0.095 18[M1,E2] 0.013 7 L + 1368 : 228TH G 1245.05 20 0.095 18[M1,E2] 0.0127 61 L + 1369 : 228THS G KC=0.0101 50$LC=0.00192 84$MC=4.6E-4 20 + 1369 : 228THS G NC=1.23E-4 53$OC=2.9E-5 13$PC=5.6E-6 25$QC=5.1E-7 26$IPC=1.22E-5 51 + 1369 : 228TH G 1374.19 10 0.014 4 + Compare OLD/NEW cards + 1373 : 228TH G 18.4 0.014 4 [E1] 6.6 0.11 3 S + 1373 : 228TH G 18.4 0.014 4 [E1] 6.47 0.11 3 S + 1374 : 228THS G L/T=0.513 7$M/T=0.268 5 + 1374 : 228THS G N/T=0.0690 13$O/T=0.0141 3$P/T=0.00195 4$Q/T=5.60E-5 11 + 1374 : 228THS G LC=3.83 6$MC=2.01 3 + 1374 : 228THS G NC=0.515 8$OC=0.1056 15$PC=0.01456 21$QC=0.000418 6 + Compare OLD/NEW cards + 1375 : 228TH G 223.85 10 0.054 5 M1+E2 -0.18 5 1.97 3 J + 1376 : 228TH3 G FLAG=K + 1377 : 228THS G KC=1.56 3$ LC=0.302 1$ MC=0.0729 2$ NC+=0.0266 1 + 1375 : 228TH G 223.85 10 0.054 5 M1+E2 -0.18 5 1.85 4 J + 1377 : 228THS G KC=1.47 4$LC=0.285 5$MC=0.0688 10 + 1377 : 228THS G NC=0.0184 3$OC=0.00434 7$PC=0.000839 13$QC=7.80E-5 18 + Compare OLD/NEW cards + 1380 : 228TH G 282.00 3 0.072 19M1+E2 -0.51 12 0.88 7 A + 1381 : 228TH3 G FLAG=HJK + 1382 : 228THS G KC=0.69 6$ LC=0.145 6$ MC=0.0355 11$ NC+=0.0129 4 + 1380 : 228TH G 282.00 3 0.072 19M1+E2 -0.51 12 0.83 7 A + 1382 : 228THS G KC=0.65 6$LC=0.138 6$MC=0.0337 11 + 1382 : 228THS G NC=0.0090 3$OC=0.00211 7$PC=0.000403 16$QC=3.4E-5 3 + Compare OLD/NEW cards + 1383 : 228TH G 327.44 0.12 4 [E2] 0.132 S + 1384 : 228TH3 G FLAG=T + 1385 : 228THS G KC=0.0621$ LC=0.0515$ MC=0.0137$ NC+=0.00508 + 1383 : 228TH G 327.44 0.12 4 [E2] 0.1299 S + 1385 : 228THS G KC=0.0613 9$LC=0.0505 7$MC=0.01349 19 + 1385 : 228THS G NC=0.00361 5$OC=0.000818 12$PC=0.0001417 20$QC=3.72E-6 6 + Compare OLD/NEW cards + 1388 : 228TH G 480.94 20 0.023 5 [M2] P + 1389 : 228TH3 G FL=968.968 + 1388 : 228TH G 480.94 20 0.023 5 [M2] 0.645 P + 1390 : 228THS G KC=0.484 7$LC=0.1200 17$MC=0.0300 5 + 1390 : 228THS G NC=0.00807 12$OC=0.00191 3$PC=0.000367 6$QC=3.29E-5 5 + 1391 : 228TH G 930.93 10 0.0124 18 & + 1394 : 228TH G 1054.11 20 0.018 5 + Compare OLD/NEW cards + 1398 : 228TH G 99.509 6 1.26 7 M1 4.09 A + 1399 : 228TH2 G FLAG=H + 1400 : 228THS G LC=3.07$ MC=0.741$ NC+=0.273 + 1398 : 228TH G 99.509 6 1.26 7 M1 3.84 A + 1400 : 228THS G LC=2.90 4$MC=0.699 10 + 1400 : 228THS G NC=0.186 3$OC=0.0442 7$PC=0.00857 12$QC=0.000815 12 + Compare OLD/NEW cards + 1403 : 228TH G 356.94 10 0.0170 18[E2] 0.103 + 1404 : 228THS G KC=0.0523$ LC=0.0374$ MC=0.0099$ NC+=0.00368 + 1403 : 228TH G 356.94 10 0.0170 18[E2] 0.1015 + 1404 : 228THS G KC=0.0517 8$LC=0.0368 6$MC=0.00977 14 + 1404 : 228THS G NC=0.00261 4$OC=0.000593 9$PC=0.0001033 15$QC=3.07E-6 5 + Compare OLD/NEW cards + 1407 : 228TH G 377.99 10 0.025 3 [M1,E2] 0.28 19 + 1408 : 228THS G KC=0.21 17$ LC=0.051 20$ MC=0.013 5$ NC+=0.0046 16 + 1407 : 228TH G 377.99 10 0.025 3 [M1,E2] 0.27 18 + 1408 : 228THS G KC=0.20 16$LC=0.049 19$MC=0.0120 41 + 1408 : 228THS G NC=0.0032 11$OC=7.5E-4 27$PC=1.41E-4 57$QC=1.07E-5 81 + Compare OLD/NEW cards + 1409 : 228TH G 440.44 5 0.121 8 M1 0.314 + 1410 : 228THS G KC=0.252$ LC=0.0471$ MC=0.0113$ NC+=0.00410 + 1409 : 228TH G 440.44 5 0.121 8 M1 0.295 + 1410 : 228THS G KC=0.237 4$LC=0.0442 7$MC=0.01061 15 + 1410 : 228THS G NC=0.00283 4$OC=0.000670 10$PC=0.0001300 19$QC=1.234E-5 18 + Compare OLD/NEW cards + 1413 : 228TH G 508.959 17 0.45 5 E2(+M1) 1.1 GT 0.08 4 A + 1414 : 228THS G KC=0.06 3$ LC=0.016 5 + 1413 : 228TH G 508.959 17 0.45 5 E2(+M1) 1.1 GT 0.077 36 A + 1414 : 228THS G KC=0.057 31$LC=0.0153 43$MC=0.00383 98 + 1414 : 228THS G NC=1.02E-3 26$OC=2.38E-4 63$PC=4.4E-5 13$QC=3.0E-6 16 + Compare OLD/NEW cards + 1417 : 228TH G 562.500 4 0.87 3 E2+M1 +1.6 6 0.07 3 A + 1418 : 228TH3 G FLAG=EK + 1419 : 228THS G KC=0.051 23$ LC=0.013 4 + 1417 : 228TH G 562.500 4 0.87 3 E2+M1 +1.6 6 0.066 27 A + 1419 : 228THS G KC=0.050 23$LC=0.0122 33$MC=0.0030 8 + 1419 : 228THS G NC=0.00081 20$OC=1.89E-4 48$PC=3.54E-5 97$QC=2.6E-6 12 + 1422 : 228TH G 1135.24 15 0.0098 15 + 1423 : 228TH G 1344.59 15 0.0090 18 + Compare OLD/NEW cards + 1425 : 228TH G 416.30 20 0.0132 21[E1] 0.0185 + 1426 : 228THS G KC=0.0149$ LC=0.00268$ MC=0.000640$ NC+=0.000228 + 1425 : 228TH G 416.30 20 0.0132 21[E1] 0.0183 + 1426 : 228THS G KC=0.01482 21$LC=0.00267 4$MC=0.000637 9 + 1426 : 228THS G NC=0.0001686 24$OC=3.94E-5 6$PC=7.43E-6 11$QC=6.07E-7 9 + 1427 : 228TH G 1142.85 15 0.0103 21 + 1431 : 228TH G 648.84 10 0.040 4 & + 1432 : 228TH3 G FL=968.968 + 1435 : 228TH G 1430.95 10 0.035 7 + 1436 : 228TH G 1559.85 20 0.020 4 + Compare OLD/NEW cards + 1442 : 228TH G 470.25 20 0.013 3 [E1] 0.0144 + 1443 : 228THS G KC=0.0116$ LC=0.00206$ MC=0.00049$ NC+=0.00018 + 1442 : 228TH G 470.25 20 0.013 3 [E1] 0.01428 + 1443 : 228THS G KC=0.01157 17$LC=0.00205 3$MC=0.000489 7 + 1443 : 228THS G NC=0.0001295 19$OC=3.03E-5 5$PC=5.74E-6 8$QC=4.79E-7 7 + Compare OLD/NEW cards + 1444 : 228TH G 515.06 10 0.049 5 [E1] 0.0120 + 1445 : 228THS G KC=0.0097$ LC=0.00170 + 1444 : 228TH G 515.06 10 0.049 5 [E1] 0.01190 + 1445 : 228THS G KC=0.00966 14$LC=0.001695 24$MC=0.000403 6 + 1445 : 228THS G NC=0.0001069 15$OC=2.50E-5 4$PC=4.75E-6 7$QC=4.02E-7 6 + 1446 : 228TH G 1309.71 20 0.019 6 + 1447 : 228TH G 1451.40 15 0.0106 21 + Compare OLD/NEW cards + 1448 : 228TH G 1580.53 3 0.60 4 (M1,E2) A + 1449 : 228TH3 G FLAG=I + 1448 : 228TH G 1580.53 3 0.60 4 (M1,E2) 0.0073 30 A + 1450 : 228THS G KC=0.0057 24$LC=0.00106 41$MC=2.53E-4 96 + 1450 : 228THS G NC=6.7E-5 26$OC=1.60E-5 61$PC=3.1E-6 12$QC=2.9E-7 13$IPC=1.34E-4 51 + Compare OLD/NEW cards + 1452 : 228TH G 1638.281 10 0.47 3 (E2) A + 1453 : 228TH3 G FLAG=IJ + 1452 : 228TH G 1638.281 10 0.47 3 (E2) 0.00410 A + 1454 : 228THS G KC=0.00319 5$LC=0.000608 9$MC=0.0001463 21 + 1454 : 228THS G NC=3.89E-5 6$OC=9.16E-6 13$PC=1.755E-6 25$QC=1.533E-7 22 + 1454 : 228THS G IPC=0.0001039 15 + Compare OLD/NEW cards + 1457 : 228TH G 474.75 10 0.022 3 [M1,E2] 0.15 11 + 1458 : 228THS G KC=0.12 9$ LC=0.026 13$ MC=0.006 3$ NC+=0.0023 10 + 1457 : 228TH G 474.75 10 0.022 3 [M1,E2] 0.145 97 + 1458 : 228THS G KC=0.112 82$LC=0.025 12$MC=0.0061 26 + 1458 : 228THS G NC=0.00163 68$OC=3.8E-4 17$PC=7.3E-5 34$QC=5.9E-6 42 + Compare OLD/NEW cards + 1459 : 228TH G 520.151 16 0.067 5 (M1) 0.201 A + 1460 : 228THS G KC=0.161$ LC=0.0301 + 1459 : 228TH G 520.151 16 0.067 5 (M1) 0.189 A + 1460 : 228THS G KC=0.1516 22$LC=0.0282 4$MC=0.00676 10 + 1460 : 228THS G NC=0.00180 3$OC=0.000426 6$PC=8.27E-5 12$QC=7.86E-6 11 + 1462 : 228TH G 627.23 20 0.014 3 + Compare OLD/NEW cards + 1463 : 228TH G 674.16 0.109 LE[E1] R + 1464 : 228TH3 G FL=968.968 + 1463 : 228TH G 674.16 0.109 LE[E1] 0.00707 R + 1465 : 228THS G KC=0.00577 8$LC=0.000985 14$MC=0.000233 4 + 1465 : 228THS G NC=6.19E-5 9$OC=1.454E-5 21$PC=2.78E-6 4$QC=2.44E-7 4 + Compare OLD/NEW cards + 1466 : 228TH G 674.75 0.109 LE[M1,E2] 0.06 4 R + 1467 : 228TH3 G FL=968.369 + 1468 : 228THS G KC=0.048 32$ LC=0.010 5 + 1466 : 228TH G 674.75 0.109 LE[M1,E2] 0.058 37 R + 1468 : 228THS G KC=0.046 31$LC=0.0094 46$MC=0.0023 11 + 1468 : 228THS G NC=6.1E-4 29$OC=1.43E-4 69$PC=2.7E-5 14$QC=2.4E-6 16 + Compare OLD/NEW cards + 1470 : 228TH G 699.08 15 0.037 5 [D,E2] 0.05 4 + Compare OLD/NEW cards + 1471 : 228TH G 1247.08 4 0.50 3 (M1) 0.0201 A + 1472 : 228TH3 G FLAG=IL + 1471 : 228TH G 1247.08 4 0.50 3 (M1) 0.0187 A + 1473 : 228THS G KC=0.01505 21$LC=0.00274 4$MC=0.000654 10 + 1473 : 228THS G NC=0.0001743 25$OC=4.13E-5 6$PC=8.02E-6 12$QC=7.69E-7 11 + 1473 : 228THS G IPC=1.771E-5 25 + Compare OLD/NEW cards + 1473 : 228TH G 1315.34 10 0.015 3 [M1,E2] 0.012 6 + 1473 : 228TH G 1315.34 10 0.015 3 [M1,E2] 0.0111 52 + 1474 : 228THS G KC=0.0089 42$LC=0.00167 71$MC=4.0E-4 17 + 1474 : 228THS G NC=1.07E-4 45$OC=2.5E-5 11$PC=4.9E-6 21$QC=4.5E-7 22$IPC=2.7E-5 11 + Compare OLD/NEW cards + 1477 : 228TH G 114.56 7 0.0098 21[M1,E2] 10 4 + 1478 : 228THS G KC=5.5 52$ LC=3.2 12$ MC=0.9 4$ NC+=0.32 14 + 1477 : 228TH G 114.56 7 0.0098 21[M1,E2] 9.4 32 + 1478 : 228THS G KC=5.1 49$LC=3.2 13$MC=0.84 37 + 1478 : 228THS G NC=0.22 10$OC=0.051 22$PC=0.0088 32$QC=3.0E-4 24 + Compare OLD/NEW cards + 1479 : 228TH G 419.42 10 0.021 3 [E1] 0.0182 + 1480 : 228THS G KC=0.0147$ LC=0.00264$ MC=0.00063$ NC+=0.000225 + 1479 : 228TH G 419.42 10 0.021 3 [E1] 0.0181 + 1480 : 228THS G KC=0.01460 21$LC=0.00262 4$MC=0.000626 9 + 1480 : 228THS G NC=0.0001659 24$OC=3.88E-5 6$PC=7.31E-6 11$QC=5.98E-7 9 + Compare OLD/NEW cards + 1481 : 228TH G 492.37 10 0.0235 23[M1,E2] 0.14 10 + 1482 : 228THS G KC=0.11 8$ LC=0.024 12$ MC=0.006 3$ NC+=0.0021 10 + 1481 : 228TH G 492.37 10 0.0235 23[M1,E2] 0.132 88 + 1482 : 228THS G KC=0.102 74$LC=0.022 11$MC=0.0055 24 + 1482 : 228THS G NC=0.00147 62$OC=3.4E-4 15$PC=6.5E-5 31$QC=5.3E-6 38 + Compare OLD/NEW cards + 1483 : 228TH G 523.131 16 0.103 8 [E1] 0.0116 A + 1484 : 228TH3 G FL=1122.951$ FLAG=B + 1485 : 228THS G KC=0.00942$ LC=0.000165 + 1483 : 228TH G 523.131 16 0.103 8 [E1] 0.01153 A + 1485 : 228THS G KC=0.00937 14$LC=0.001641 23$MC=0.000390 6 + 1485 : 228THS G NC=0.0001035 15$OC=2.42E-5 4$PC=4.60E-6 7$QC=3.91E-7 6 + Compare OLD/NEW cards + 1488 : 228TH G 555.12 10 0.046 5 [M1,E2] 0.10 7 + 1489 : 228THS G KC=0.08 6$ LC=0.017 9 + 1488 : 228TH G 555.12 10 0.046 5 [M1,E2] 0.096 63 + 1489 : 228THS G KC=0.075 53$LC=0.0160 76$MC=0.0039 18 + 1489 : 228THS G NC=0.00105 47$OC=2.5E-4 12$PC=4.7E-5 23$QC=3.9E-6 27 + Compare OLD/NEW cards + 1490 : 228TH G 623.27 20 0.011 3 [M1,E2] 0.08 5 + 1491 : 228THS G KC=0.06 4$ LC=0.012 6 + 1490 : 228TH G 623.27 20 0.011 3 [M1,E2] 0.071 46 + 1491 : 228THS G KC=0.056 38$LC=0.0117 57$MC=0.0028 13 + 1491 : 228THS G NC=7.6E-4 35$OC=1.78E-4 84$PC=3.4E-5 17$QC=2.9E-6 20 + Compare OLD/NEW cards + 1492 : 228TH G 629.40 5 0.045 5 [D,E2] 0.06 6 + Compare OLD/NEW cards + 1493 : 228TH G 666.45 10 0.057 6 [M1,E2] 0.06 4 @ + 1494 : 228TH3 G FLAG=N + 1495 : 228THS G KC=0.05 3$ LC=0.010 5 + 1493 : 228TH G 666.45 10 0.057 6 [M1,E2] 0.060 38 @ + 1495 : 228THS G KC=0.047 32$LC=0.0097 48$MC=0.0024 11 + 1495 : 228THS G NC=6.3E-4 30$OC=1.48E-4 71$PC=2.8E-5 15$QC=2.4E-6 16 + Compare OLD/NEW cards + 1498 : 228TH G 677.11 10 0.062 5 [M1,E2] 0.06 4 + 1499 : 228TH3 G FL=968.968 + 1500 : 228THS G KC=0.05 3$ LC=0.010 5 + 1498 : 228TH G 677.11 10 0.062 5 [M1,E2] 0.058 36 + 1500 : 228THS G KC=0.045 30$LC=0.0093 46$MC=0.0023 11 + 1500 : 228THS G NC=6.0E-4 29$OC=1.42E-4 68$PC=2.7E-5 14$QC=2.3E-6 16 + 1501 : 228TH G 1250.04 10 0.062 5 A + Compare OLD/NEW cards + 1502 : 228TH G 1459.138 15 0.83 8 E2 A + 1503 : 228TH3 G FLAG=IJ + 1502 : 228TH G 1459.138 15 0.83 8 E2 0.00498 A + 1504 : 228THS G KC=0.00391 6$LC=0.000771 11$MC=0.000187 3 + 1504 : 228THS G NC=4.97E-5 7$OC=1.167E-5 17$PC=2.23E-6 4$QC=1.89E-7 3$IPC=4.71E-5 7 + Compare OLD/NEW cards + 1504 : 228TH G 1588.20 3 3.22 8 E2 A + 1505 : 228TH3 G FLAG=IJ + 1504 : 228TH G 1588.20 3 3.22 8 E2 0.00431 A + 1506 : 228THS G KC=0.00337 5$LC=0.000647 9$MC=0.0001561 22 + 1506 : 228THS G NC=4.15E-5 6$OC=9.77E-6 14$PC=1.87E-6 3$QC=1.622E-7 23$IPC=8.62E-5 12 + Compare OLD/NEW cards + 1510 : 228TH G 660.1 3 0.005 AP[M1,E2] 0.06 4 + 1511 : 228THS G KC=0.05 3$ LC=0.010 5 + 1510 : 228TH G 660.1 3 0.005 AP[M1,E2] 0.061 39 + 1511 : 228THS G KC=0.048 33$LC=0.0100 49$MC=0.0024 12 + 1511 : 228THS G NC=6.5E-4 30$OC=1.52E-4 73$PC=2.9E-5 15$QC=2.5E-6 17 + Compare OLD/NEW cards + 1512 : 228TH G 1495.910 20 0.86 4 (E2) A + 1513 : 228TH3 G FLAG=IJ + 1512 : 228TH G 1495.910 20 0.86 4 (E2) 0.00477 A + 1514 : 228THS G KC=0.00374 6$LC=0.000732 11$MC=0.0001769 25 + 1514 : 228THS G NC=4.71E-5 7$OC=1.107E-5 16$PC=2.11E-6 3$QC=1.81E-7 3$IPC=5.72E-5 8 + 1514 : 228TH G 1625.06 5 0.255 18 A + Compare OLD/NEW cards + 1518 : 228TH G 457.17 15 0.0150 23[M1,E2] 0.17 12 + 1519 : 228THS G KC=0.13 10$ LC=0.029 14$ MC=0.007 3$ NC+=0.0026 11 + 1518 : 228TH G 457.17 15 0.0150 23[M1,E2] 0.16 11 + 1519 : 228THS G KC=0.123 92$LC=0.028 13$MC=0.0068 28 + 1519 : 228THS G NC=0.00182 74$OC=4.3E-4 18$PC=8.1E-5 37$QC=6.5E-6 47 + Compare OLD/NEW cards + 1520 : 228TH G 1164.50 8 0.065 5 (M1+E2) 0.016 9 J + 1520 : 228TH G 1164.50 8 0.065 5 (M1+E2) 0.0149 75 J + 1521 : 228THS G KC=0.0119 61$LC=0.0023 11$MC=5.5E-4 24 + 1521 : 228THS G NC=1.45E-4 64$OC=3.4E-5 16$PC=6.6E-6 30$QC=6.0E-7 32$IPC=2.19E-6 94 + Compare OLD/NEW cards + 1521 : 228TH G 1287.68 20 0.080 15(M1+E2) 0.012 7 J + 1521 : 228TH G 1287.68 20 0.080 15(M1+E2) 0.0117 55 J + 1522 : 228THS G KC=0.0094 45$LC=0.00176 76$MC=4.2E-4 18 + 1522 : 228THS G NC=1.13E-4 48$OC=2.7E-5 12$PC=5.1E-6 23$QC=4.7E-7 24$IPC=2.03E-5 83 + Compare OLD/NEW cards + 1528 : 228TH G 42.46 5 0.009 3 [M1] 49 + 1528 : 228TH G 42.46 5 0.009 3 [M1] 46.3 + 1529 : 228THS G LC=35.0 5$MC=8.43 13 + 1529 : 228THS G NC=2.25 4$OC=0.533 8$PC=0.1034 15$QC=0.00986 15 + 1531 : 228TH G 672.00 15 0.026 8 + Compare OLD/NEW cards + 1535 : 228TH G 813.77 15 0.0070 16[M1,E2] 0.038 23 + 1536 : 228THS G KC=0.030 19$ LC=0.006 3 + 1535 : 228TH G 813.77 15 0.0070 16[M1,E2] 0.036 22 + 1536 : 228THS G KC=0.029 18$LC=0.0057 28$MC=0.00138 65 + 1536 : 228THS G NC=3.7E-4 18$OC=8.7E-5 42$PC=1.67E-5 83$QC=1.47E-6 91 + 1537 : 228TH G 1501.57 5 0.46 3 G + Compare OLD/NEW cards + 1538 : 228TH G 1630.627 10 1.51 4 (M1,E2) A + 1539 : 228TH2 G FLAG=I + 1538 : 228TH G 1630.627 10 1.51 4 (M1,E2) 0.0068 27 A + 1540 : 228THS G KC=0.0053 22$LC=9.8E-4 37$MC=2.34E-4 87 + 1540 : 228THS G NC=6.2E-5 24$OC=1.48E-5 56$PC=2.9E-6 11$QC=2.7E-7 12$IPC=1.61E-4 60 + Compare OLD/NEW cards + 1545 : 228TH G 497.49 15 0.0059 18[M2] 0.608 P + 1546 : 228THS G KC=0.457$ LC=0.113$ MC=0.0282$ NC+=0.0104 + 1545 : 228TH G 497.49 15 0.0059 18[M2] 0.581 P + 1546 : 228THS G KC=0.438 7$LC=0.1075 15$MC=0.0269 4 + 1546 : 228THS G NC=0.00722 11$OC=0.001705 24$PC=0.000328 5$QC=2.95E-5 5 + Compare OLD/NEW cards + 1547 : 228TH G 548.73 15 0.023 3 [M1,E2] 0.10 7 + 1548 : 228THS G KC=0.08 6$ LC=0.017 9 + 1547 : 228TH G 548.73 15 0.023 3 [M1,E2] 0.099 65 + 1548 : 228THS G KC=0.077 55$LC=0.0166 79$MC=0.0041 18 + 1548 : 228THS G NC=0.00108 48$OC=2.5E-4 12$PC=4.8E-5 24$QC=4.0E-6 28 + Compare OLD/NEW cards + 1549 : 228TH G 570.91 10 0.182 24(M1) 0.156 G + 1550 : 228THS G KC=0.125$ LC=0.0234 + 1549 : 228TH G 570.91 10 0.182 24(M1) 0.1472 G + 1550 : 228THS G KC=0.1182 17$LC=0.0219 3$MC=0.00525 8 + 1550 : 228THS G NC=0.001401 20$OC=0.000332 5$PC=6.44E-5 9$QC=6.12E-6 9 + Compare OLD/NEW cards + 1557 : 228TH G 701.747 14 0.173 10(M1) 0.091 A + 1558 : 228TH3 G FLAG=J + 1559 : 228THS G KC=0.0726$ LC=0.0135 + 1557 : 228TH G 701.747 14 0.173 10(M1) 0.0850 A + 1559 : 228THS G KC=0.0684 10$LC=0.01261 18$MC=0.00302 5 + 1559 : 228THS G NC=0.000805 12$OC=0.000191 3$PC=3.70E-5 6$QC=3.52E-6 5 + Compare OLD/NEW cards + 1560 : 228TH G 755.315 4 1.00 3 M1 0.0747 A + 1561 : 228TH3 G FLAG=DJ + 1562 : 228THS G KC=0.0599$ LC=0.0111 + 1560 : 228TH G 755.315 4 1.00 3 M1 0.0700 A + 1562 : 228THS G KC=0.0563 8$LC=0.01036 15$MC=0.00248 4 + 1562 : 228THS G NC=0.000661 10$OC=0.0001566 22$PC=3.04E-5 5$QC=2.90E-6 4 + 1565 : 228TH G 1537.89 10 0.047 5 B + 1566 : 228TH2 G FL=186.823 + Compare OLD/NEW cards + 1567 : 228TH G 1666.523 13 0.178 13M1 A + 1568 : 228TH3 G FLAG=J + 1567 : 228TH G 1666.523 13 0.178 13M1 0.00895 A + 1569 : 228THS G KC=0.00702 10$LC=0.001269 18$MC=0.000303 5 + 1569 : 228THS G NC=8.08E-5 12$OC=1.91E-5 3$PC=3.72E-6 6$QC=3.58E-7 5$IPC=0.000247 4 + 1569 : 228TH G 1724.21 4 0.029 3 A + 1573 : 228TH G 1217.03 10 0.021 3 B + 1574 : 228TH2 G FL=519.192 + 1575 : 228TH G 1357.78 15 0.020 4 B + 1576 : 228TH2 G FL=378.179 + 1577 : 228TH G 1548.65 4 0.038 4 A + 1578 : 228TH G 1677.67 3 0.054 5 A + Compare OLD/NEW cards + 1582 : 228TH G 399.62 10 0.029 3 [E1] 0.0212 + 1583 : 228THS G KC=0.0162$ LC=0.00293$ MC=0.000701$ NC+=0.000250 + 1582 : 228TH G 399.62 10 0.029 3 [E1] 0.0200 + 1583 : 228THS G KC=0.01613 23$LC=0.00292 4$MC=0.000697 10 + 1583 : 228THS G NC=0.000185 3$OC=4.31E-5 6$PC=8.11E-6 12$QC=6.58E-7 10 + Compare OLD/NEW cards + 1584 : 228TH G 590.4 0.017 3 [E2] 0.0295 S + 1585 : 228TH3 G FLAG=T + 1586 : 228THS G KC=0.0200$ LC=0.00716 + 1584 : 228TH G 590.4 0.017 3 [E2] 0.0292 S + 1586 : 228THS G KC=0.0197 3$LC=0.00703 10$MC=0.00180 3 + 1586 : 228THS G NC=0.000481 7$OC=0.0001107 16$PC=2.00E-5 3$QC=1.056E-6 15 + Compare OLD/NEW cards + 1587 : 228TH G 684.0 0.019 5 [E1] S + 1588 : 228TH3 G FLAG=T + 1587 : 228TH G 684.0 0.019 5 [E1] 0.00688 S + 1589 : 228THS G KC=0.00562 8$LC=0.000957 14$MC=0.000227 4 + 1589 : 228THS G NC=6.02E-5 9$OC=1.413E-5 20$PC=2.70E-6 4$QC=2.38E-7 4 + 1589 : 228TH G 1347.50 15 0.015 3 + 1592 : 228TH G 1365.70 15 0.014 3 M + Compare OLD/NEW cards + 1593 : 228TH G 1415.66 10 0.021 4 [E3] P + 1594 : 228TH3 G FL=328.003 + 1593 : 228TH G 1415.66 10 0.021 4 [E3] 0.01141 P + 1595 : 228THS G KC=0.00849 12$LC=0.00217 3$MC=0.000543 8 + 1595 : 228THS G NC=0.0001450 21$OC=3.39E-5 5$PC=6.36E-6 9$QC=4.71E-7 7 + 1595 : 228THS G IPC=1.604E-5 23 + Compare OLD/NEW cards + 1595 : 228TH G 1557.11 4 0.178 13(E2+M1) +1.2 2 A + 1596 : 228TH3 G FLAG=JK + 1595 : 228TH G 1557.11 4 0.178 13(E2+M1) +1.2 2 0.0070 6 A + 1597 : 228THS G KC=0.0055 5$LC=0.00102 8$MC=0.000245 19 + 1597 : 228THS G NC=6.5E-5 5$OC=1.54E-5 12$PC=2.98E-6 23$QC=2.75E-7 24$IPC=0.000114 9 + Compare OLD/NEW cards + 1597 : 228TH G 1686.09 7 0.095 8 (E2) A + 1598 : 228TH3 G FLAG=J + 1597 : 228TH G 1686.09 7 0.095 8 (E2) 0.00391 A + 1599 : 228THS G KC=0.00303 5$LC=0.000573 8$MC=0.0001378 20 + 1599 : 228THS G NC=3.67E-5 6$OC=8.64E-6 12$PC=1.655E-6 24$QC=1.455E-7 21 + 1599 : 228THS G IPC=0.0001217 17 + Compare OLD/NEW cards + 1602 : 228TH G 326.04 20 0.033 5 [D,E2] 0.4 3 + 1603 : 228TH G 1571.52 20 0.0057 16 + 1604 : 228TH G 1700.59 20 0.0101 23 + Compare OLD/NEW cards + 1608 : 228TH G 737.72 5 0.037 4 [M1,E2] 0.05 3 + 1608 : 228TH G 737.72 5 0.037 4 [M1,E2] 0.046 29 + 1609 : 228THS G KC=0.037 24$LC=0.0074 37$MC=0.00180 85 + 1609 : 228THS G NC=4.8E-4 23$OC=1.13E-4 54$PC=2.2E-5 11$QC=1.9E-6 12 + Compare OLD/NEW cards + 1612 : 228TH G 791.49 25 0.010 3 [M1,E2] 0.04 3 @ + 1613 : 228TH3 G FL=968.968$ FLAG=N + 1614 : 228THS G KC=0.032 21$ LC=0.007 4 + 1612 : 228TH G 791.49 25 0.010 3 [M1,E2] 0.039 23 @ + 1614 : 228THS G KC=0.031 19$LC=0.0061 30$MC=0.00149 71 + 1614 : 228THS G NC=4.0E-4 19$OC=9.3E-5 45$PC=1.79E-5 90$QC=1.58E-6 99 + Compare OLD/NEW cards + 1616 : 228TH G 1573.26 5 0.033 3 (E2) A + 1617 : 228TH3 G FLAG=J + 1616 : 228TH G 1573.26 5 0.033 3 (E2) 0.00438 A + 1618 : 228THS G KC=0.00342 5$LC=0.000660 10$MC=0.0001592 23 + 1618 : 228THS G NC=4.24E-5 6$OC=9.97E-6 14$PC=1.91E-6 3$QC=1.650E-7 24$IPC=8.12E-5 12 + 1618 : 228TH G 1702.43 5 0.048 5 A + 1622 : 228TH G 1276.69 10 0.014 3 + 1623 : 228TH G 1738.22 25 0.018 4 + 1627 : 228TH G 1401.49 10 0.012 3 + 1628 : 228TH G 1469.71 15 0.020 4 + 1629 : 228TH G 1740.4 3 0.011 3 + 1630 : 228TH G 1797.5 5 0.0021 8 + Compare OLD/NEW cards + 1634 : 228TH G 666.45 10 0.005 2 [E1] @ + 1635 : 228TH3 G FLAG=N + 1634 : 228TH G 666.45 10 0.005 2 [E1] 0.00722 @ + 1636 : 228THS G KC=0.00590 9$LC=0.001007 15$MC=0.000239 4 + 1636 : 228THS G NC=6.33E-5 9$OC=1.487E-5 21$PC=2.84E-6 4$QC=2.50E-7 4 + Compare OLD/NEW cards + 1637 : 228TH G 692.5 0.0056 7 (M1+E2+E0) 0.24 3 S + 1638 : 228TH3 G FLAG=T + 1637 : 228TH G 692.5 0.0056 7 (M1+E2+E0) 0.054 34 S + 1639 : 228THS G KC=0.043 28$LC=0.0088 43$MC=0.0021 10 + 1639 : 228THS G NC=5.7E-4 27$OC=1.34E-4 64$PC=2.6E-5 13$QC=2.2E-6 15 + Compare OLD/NEW cards + 1639 : 228TH G 770.04 0.0063 8 [E1] S + 1640 : 228TH3 G FLAG=T + 1639 : 228TH G 770.04 0.0063 8 [E1] 0.00552 S + 1641 : 228THS G KC=0.00452 7$LC=0.000762 11$MC=0.000180 3 + 1641 : 228THS G NC=4.78E-5 7$OC=1.124E-5 16$PC=2.15E-6 3$QC=1.93E-7 3 + Compare OLD/NEW cards + 1641 : 228TH G 870.46 4 0.044 4 M1 0.0515 A + 1642 : 228TH3 G FLAG=J + 1643 : 228THS G KC=0.0414$ LC=0.00762 + 1641 : 228TH G 870.46 4 0.044 4 M1 0.0481 A + 1643 : 228THS G KC=0.0387 6$LC=0.00710 10$MC=0.001699 24 + 1643 : 228THS G NC=0.000453 7$OC=0.0001073 15$PC=2.08E-5 3$QC=1.99E-6 3 + Compare OLD/NEW cards + 1644 : 228TH G 924.03 0.0075 10[M1,E2] S + 1645 : 228TH3 G FLAG=T + 1644 : 228TH G 924.03 0.0075 10[M1,E2] 0.026 15 S + 1646 : 228THS G KC=0.021 13$LC=0.0041 20$MC=9.9E-4 46 + 1646 : 228THS G NC=2.6E-4 13$OC=6.2E-5 30$PC=1.20E-5 59$QC=1.07E-6 63 + Compare OLD/NEW cards + 1646 : 228TH G 1706.19 10 0.0085 10M1+E2 +0.42 4 J + 1647 : 228TH3 G FLAG=K + 1646 : 228TH G 1706.19 10 0.0085 10M1+E2 +0.42 4 0.0077616 J + 1648 : 228THS G KC=0.00605 13$LC=0.001097 22$MC=0.000262 6 + 1648 : 228THS G NC=6.99E-5 14$OC=1.65E-5 4$PC=3.21E-6 7$QC=3.07E-7 7$IPC=0.000256 6 + Compare OLD/NEW cards + 1648 : 228TH G 1835.43 10 0.038 4 E2+M1 +2.9 3 J + 1649 : 228TH3 G FLAG=K + 1648 : 228TH G 1835.43 10 0.038 4 E2+M1 +2.9 3 0.0038210 J + 1650 : 228THS G KC=0.00291 8$LC=0.000536 14$MC=0.000128 4 + 1650 : 228THS G NC=3.42E-5 9$OC=8.06E-6 21$PC=1.55E-6 4$QC=1.41E-7 4$IPC=0.000202 6 + Compare OLD/NEW cards + 1655 : 228TH G 877.46 10 0.014 3 [M1,E2] 0.032 19 + 1656 : 228THS G KC=0.025 15$ LC=0.005 3 + 1655 : 228TH G 877.46 10 0.014 3 [M1,E2] 0.030 18 + 1656 : 228THS G KC=0.024 15$LC=0.0047 23$MC=0.00113 53 + 1656 : 228THS G NC=3.0E-4 15$OC=7.1E-5 34$PC=1.37E-5 68$QC=1.22E-6 73 + 1657 : 228TH G 930.93 10 0.0124 18 & + 1659 : 228TH G 1713.47 20 0.0054 10 + Compare OLD/NEW cards + 1662 : 228TH G 1842.13 10 0.042 4 M1+E2 -0.86 14 J + 1663 : 228TH3 G FLAG=K + 1662 : 228TH G 1842.13 10 0.042 4 M1+E2 -0.86 14 0.0055 4 J + 1664 : 228THS G KC=0.00420 25$LC=0.00076 5$MC=0.000182 11 + 1664 : 228THS G NC=4.9E-5 3$OC=1.15E-5 7$PC=2.23E-6 13$QC=2.10E-7 13$IPC=0.000301 18 + 1664 : 228TH G 1900.07 20 0.0028 5 + Compare OLD/NEW cards + 1668 : 228TH G 490.33 15 0.0111 23[D,E2] 0.12 11 + 1669 : 228TH G 1074.71 15 0.010 3 + 1670 : 228TH G 1907.18 20 0.0119 10 + Compare OLD/NEW cards + 1674 : 228TH G 168.65 10 0.0030 7 [M1,E2] 2.9 16 @ + 1675 : 228TH2 G FLAG=Q + 1676 : 228THS G KC=1.9 17$ LC=0.73 6$ MC=0.19 3$ NC+=0.070 10 + 1674 : 228TH G 168.65 10 0.0030 7 [M1,E2] 2.7 15 @ + 1676 : 228THS G KC=1.8 16$LC=0.70 7$MC=0.18 3 + 1676 : 228THS G NC=0.049 8$OC=0.0111 15$PC=0.00200 12$QC=9.9E-5 80 + Compare OLD/NEW cards + 1677 : 228TH G 389.12 15 0.0103 15[M1,E2] 0.26 18 + 1677 : 228TH G 389.12 15 0.0103 15[M1,E2] 0.25 17 + 1678 : 228THS G KC=0.19 15$LC=0.044 18$MC=0.0110 39 + 1678 : 228THS G NC=0.0029 11$OC=6.9E-4 26$PC=1.29E-4 54$QC=9.9E-6 74 + 1678 : 228TH G 1742.0 3 0.0080 23 + Compare OLD/NEW cards + 1679 : 228TH G 1870.83 10 0.0243 23(M1+E2) J + 1679 : 228TH G 1870.83 10 0.0243 23(M1+E2) 0.0051 18 J + 1680 : 228THS G KC=0.0038 14$LC=7.0E-4 24$MC=1.67E-4 56 + 1680 : 228THS G NC=4.4E-5 15$OC=1.05E-5 36$PC=2.04E-6 70$QC=1.92E-7 72$IPC=3.0E-4 11 + 1683 : 228TH G 397.94 10 0.027 3 + 1684 : 228TH G 1062.55 15 0.010 3 + 1685 : 228TH G 1750.54 20 0.0080 8 + 1686 : 228TH G 1879.6 3 0.0013 5 + Compare OLD/NEW cards + 1690 : 228TH G 718.48 15 0.019 4 (E1) J + 1690 : 228TH G 718.48 15 0.019 4 (E1) 0.00628 J + 1691 : 228THS G KC=0.00513 8$LC=0.000870 13$MC=0.000206 3 + 1691 : 228THS G NC=5.46E-5 8$OC=1.284E-5 18$PC=2.46E-6 4$QC=2.18E-7 3 + 1691 : 228TH G 776.56 10 0.019 6 + Compare OLD/NEW cards + 1692 : 228TH G 791.49 25 0.013 3 (M1) 0.0661 @ + 1693 : 228TH3 G FLAG=N + 1694 : 228THS G KC=0.0530$ LC=0.0098 + 1692 : 228TH G 791.49 25 0.013 3 (M1) 0.0618 @ + 1694 : 228THS G KC=0.0497 7$LC=0.00915 13$MC=0.00219 3 + 1694 : 228THS G NC=0.000584 9$OC=0.0001382 20$PC=2.68E-5 4$QC=2.56E-6 4 + Compare OLD/NEW cards + 1696 : 228TH G 853.17 10 0.0031 4 [M1,E2] 0.034 20 B + 1697 : 228TH2 G FL=1091.017$ FLAG=U + 1698 : 228THS G KC=0.027 17$ LC=0.005 3 + 1696 : 228TH G 853.17 10 0.0031 4 [M1,E2] 0.032 19 B + 1698 : 228THS G KC=0.025 16$LC=0.0050 25$MC=0.00122 58 + 1698 : 228THS G NC=3.3E-4 16$OC=7.7E-5 37$PC=1.47E-5 73$QC=1.30E-6 80 + 1700 : 228TH G 921.98 10 0.0147 21 & + Compare OLD/NEW cards + 1702 : 228TH G 975.96 5 0.050 5 M1 0.0381 J + 1703 : 228TH3 G FL=968.968 + 1704 : 228THS G KC=0.0306$ LC=0.00563 + 1702 : 228TH G 975.96 5 0.050 5 M1 0.0356 J + 1704 : 228THS G KC=0.0287 4$LC=0.00524 8$MC=0.001254 18 + 1704 : 228THS G NC=0.000334 5$OC=7.91E-5 11$PC=1.537E-5 22$QC=1.468E-6 21 + 1705 : 228TH G 1000.69 15 0.005 + Compare OLD/NEW cards + 1708 : 228TH G 1758.11 10 0.035 4 E2+M1 -9 1 J + 1709 : 228TH3 G FLAG=K + 1708 : 228TH G 1758.11 10 0.035 4 E2+M1 -9 1 0.00371 J + 1710 : 228THS G KC=0.00285 5$LC=0.000533 8$MC=0.0001281 19 + 1710 : 228THS G NC=3.41E-5 5$OC=8.03E-6 12$PC=1.542E-6 23$QC=1.369E-7 20 + 1710 : 228THS G IPC=0.0001515 22 + Compare OLD/NEW cards + 1710 : 228TH G 1887.10 5 0.090 8 E2+M1 -9.1 1 J + 1711 : 228TH3 G FLAG=K + 1710 : 228TH G 1887.10 5 0.090 8 E2+M1 -9.1 1 0.00333 J + 1712 : 228THS G KC=0.00251 4$LC=0.000462 7$MC=0.0001107 16 + 1712 : 228THS G NC=2.95E-5 5$OC=6.95E-6 10$PC=1.336E-6 19$QC=1.201E-7 17 + 1712 : 228THS G IPC=0.000205 3 + 1715 : 228TH G 1772.2 3 0.0018 5 + 1716 : 228TH G 1958.4 3 0.0015 5 + 1720 : 228TH G 1017.92 20 0.0057 13 + 1721 : 228TH3 G FL=968.968 + 1722 : 228TH G 1609.41 15 0.0077 15 + 1723 : 228TH G 1800.86 20 0.0044 8 + 1724 : 228TH G 1929.78 20 0.0199 21 + Compare OLD/NEW cards + 1731 : 228TH G 214.85 10 0.029 4 [D,E2] 1.2 11 + Compare OLD/NEW cards + 1732 : 228TH G 372.57 20 0.0067 15[D,E2] 0.26 24 + 1733 : 228TH3 G FL=1638.284 + 1734 : 228TH G 887.33 10 0.027 3 + 1735 : 228TH G 918.97 10 0.027 3 + 1738 : 228TH G 1040.92 15 0.044 9 + 1739 : 228TH G 1823.22 10 0.044 4 + 1740 : 228TH G 1952.33 15 0.059 5 + 1744 : 228TH G 1826.7 3 0.0021 8 + 1745 : 228TH G 1955.9 5 0.0008 3 + Compare OLD/NEW cards + 1749 : 228TH G 384.63 20 0.0067 15[D,E2] 0.24 22 + 1751 : 228TH G 1053.09 20 0.013 4 B + 1752 : 228TH3 G FL=968.968 + 1753 : 228TH G 1148.12 15 0.0059 13 + 1754 : 228TH G 1190.81 20 0.0062 16 + 1755 : 228TH G 1965.24 20 0.0204 18 + 1760 : 228TH G 939.87 15 0.009 3 B + 1761 : 228TH3 G FL=1091.017$ + 1762 : 228TH G 1013.58 20 0.0046 13 + 1763 : 228TH G 1971.9 3 0.0036 8 + 1764 : 228TH G 2029.4 5 0.0018 5 + 1768 : 228TH G 1850.13 20 0.0044 8 + 1769 : 228TH G 1979.3 3 0.0018 5 + 1773 : 228TH G 1795.1 5 0.0021 8 + 1774 : 228TH G 1936.3 3 0.0021 5 + 1776 : 228TH 228PA EC DECAY 1995BA42 97NDS 199704 + 1778 : 228TH DG CC$FROM BrIcc v2.3b (16-Dec-2014) 2008Ki07, "Frozen Orbitals" appr. + 1778 : 228TH CG MR$IF NO VALUE GIVEN IT WAS ASSUMED MR=1.00 FOR E2/M1, + 1778 : 228TH2CG MR=1.00 FOR E3/M2 AND MR=0.10 FOR THE OTHER MULTIPOLARITIES + 1834 : 228TH G 141.9 1 0.21 3 + 1835 : 228TH G 206.30 5 0.50 7 + 1836 : 228TH G 216.1 1 1.1 3 + 1839 : 228TH G 357.3 1 0.37 4 + 1840 : 228TH G 425.4 1 0.41 5 + 1841 : 228TH G 443.8 1 0.62 7 + 1842 : 228TH G 471.7 2 0.37 9 + 1843 : 228TH G 490.7 1 0.82 4 G + 1844 : 228TH G 555.7 1 1.5 2 + 1845 : 228TH G 621.6 3 1.0 2 G + 1846 : 228TH G 796 1 2.0 AP J + 1848 : 228TH G 801.2 1 0.46 5 + 1851 : 228TH G 895.9 1 1.41 7 + 1852 : 228TH G 1017.2 2 0.82 12 G + 1853 : 228TH G 1018.9 2 1.3 2 + 1854 : 228TH G 1024.4 2 0.43 6 + 1855 : 228TH G 1058.5 1 0.66 7 + 1856 : 228TH G 1062.4 1 0.57 6 + 1857 : 228TH G 1074.7 3 0.42 5 G + 1858 : 228TH G 1077.5 3 0.36 5 G + 1859 : 228TH G 1103.4 1 0.44 4 + 1860 : 228TH G 1175.6 2 0.24 4 G + 1861 : 228TH G 1281.7 2 0.29 3 + 1862 : 228TH G 1286.3 3 0.39 9 G + 1871 : 228TH G 1310.8 1 0.48 5 + 1872 : 228TH G 1358.0 2 0.34 5 + 1873 : 228TH G 1432 1 1.3 LE @ + 1874 : 228TH2 G FLAG=P + 1875 : 228TH G 1480.4 3 0.77 10 G + 1878 : 228TH G 1483.2 3 0.52 7 G + 1879 : 228TH G 1486.3 3 0.27 7 G + 1880 : 228TH G 1542.8 2 0.28 5 + 1881 : 228TH G 1547.2 3 0.54 11 G + Compare OLD/NEW cards + 1882 : 228TH G 1609.6 1 0.92 7 (M1) + 1882 : 228TH G 1609.6 1 0.92 7 (M1) 0.00974 + 1883 : 228THS G KC=0.00770 11$LC=0.001392 20$MC=0.000333 5 + 1883 : 228THS G NC=8.86E-5 13$OC=2.10E-5 3$PC=4.08E-6 6$QC=3.92E-7 6$IPC=0.000205 3 + 1884 : 228TH G 1677.9 1 0.65 5 + 1885 : 228TH G 1746.2 2 0.34 4 + 1886 : 228TH G 1752.1 2 0.37 4 G + 1887 : 228TH G 1784.4 2 0.62 5 G + 1888 : 228TH G 1807.2 1 0.60 5 + 1891 : 228TH G 1865.1 1 0.80 4 + 1892 : 228TH G 1919.4 2 0.26 3 + 1893 : 228TH G 1936.0 2 0.20 3 + 1894 : 228TH G 1958.1 2 0.29 3 + Compare OLD/NEW cards + 1899 : 228TH G 57.76 2 5.5 3 E2 156 + 1900 : 228THS G LC= 114$ MC= 31.1$ N+= 11.5 + 1899 : 228TH G 57.76 2 5.5 3 E2 153.1 + 1900 : 228THS G LC=112.1 16$MC=30.7 5 + 1900 : 228THS G NC=8.22 12$OC=1.83 3$PC=0.302 5$QC=0.000869 13 + Compare OLD/NEW cards + 1907 : 228TH G 129.06 2 45.7 23E2 3.81 + 1908 : 228THS G KC= 0.269 $LC= 2.58$ MC= 0.707$ N+= 0.263 + 1907 : 228TH G 129.06 2 45.7 23E2 3.74 + 1908 : 228THS G KC=0.264 4$LC=2.54 4$MC=0.697 10 + 1908 : 228THS G NC=0.187 3$OC=0.0417 6$PC=0.00696 10$QC=4.23E-5 6 + Compare OLD/NEW cards + 1913 : 228TH G 270.25 2 33.9 17E1 0.0474 + 1914 : 228THS G KC= 0.0379 $LC=0.00721$ MC=0.00173 $N+=0.00061 $ + 1913 : 228TH G 270.25 2 33.9 17E1 0.0470 + 1914 : 228THS G KC=0.0376 6$LC=0.00716 10$MC=0.001717 24 + 1914 : 228THS G NC=0.000454 7$OC=0.0001054 15$PC=1.96E-5 3$QC=1.473E-6 21 + Compare OLD/NEW cards + 1916 : 228TH G 328.03 4 30 3 E1 0.0308 G + 1917 : 228THS G KC=0.0247$ LC=0.00458$ MC=0.00110 $N+=0.00039 $ + 1916 : 228TH G 328.03 4 30 3 E1 0.0305 G + 1917 : 228THS G KC=0.0245 4$LC=0.00455 7$MC=0.001089 16 + 1917 : 228THS G NC=0.000288 4$OC=6.71E-5 10$PC=1.256E-5 18$QC=9.82E-7 14 + Compare OLD/NEW cards + 1920 : 228TH G 191.35 2 4.60 23E2 0.791 A + 1921 : 228THS G KC=0.174$ LC=0.450$ MC=0.123$ NC+=0.0454 + 1920 : 228TH G 191.35 2 4.60 23E2 0.776 A + 1921 : 228THS G KC=0.1710 24$LC=0.443 7$MC=0.1209 17 + 1921 : 228THS G NC=0.0324 5$OC=0.00726 11$PC=0.001224 18$QC=1.375E-5 20 + Compare OLD/NEW cards + 1926 : 228TH G 68.08 0.04 LE[E2] 70.2 N + 1927 : 228THS G LC=51.0$ MC=14.0$ NC+=5.16 + 1926 : 228TH G 68.08 0.04 LE[E2] 69.5 N + 1927 : 228THS G LC=50.8 8$MC=13.95 20 + 1927 : 228THS G NC=3.74 6$OC=0.831 12$PC=0.1374 20$QC=0.000435 6 + Compare OLD/NEW cards + 1929 : 228TH G 209.26 2 26.3 13E1 0.086 + 1930 : 228THS G KC=0.0678$ LC=0.0135$ MC=0.00323$ NC+=0.00114 + 1929 : 228TH G 209.26 2 26.3 13E1 0.0848 + 1930 : 228THS G KC=0.0672 10$LC=0.01332 19$MC=0.00321 5 + 1930 : 228THS G NC=0.000847 12$OC=0.000196 3$PC=3.60E-5 5$QC=2.55E-6 4 + Compare OLD/NEW cards + 1934 : 228TH G 338.32 2 82 4 E1 0.0288 + 1935 : 228THS G KC=0.0231$ LC=0.00426$ MC=0.00102$ NC+=0.00036 + 1934 : 228TH G 338.32 2 82 4 E1 0.0285 + 1935 : 228THS G KC=0.0229 4$LC=0.00424 6$MC=0.001014 15 + 1935 : 228THS G NC=0.000269 4$OC=6.25E-5 9$PC=1.172E-5 17$QC=9.22E-7 13 + Compare OLD/NEW cards + 1940 : 228TH G 141.00 2 2.08 10E1 0.220 K + 1941 : 228THS G KC=0.171$ LC=0.0366$ MC=0.0088$ NC+=0.00313 + 1940 : 228TH G 141.00 2 2.08 10E1 0.217 K + 1941 : 228THS G KC=0.1690 24$LC=0.0362 5$MC=0.00876 13 + 1941 : 228THS G NC=0.00231 4$OC=0.000529 8$PC=9.53E-5 14$QC=6.10E-6 9 + Compare OLD/NEW cards + 1942 : 228TH G 332.37 2 21.0 11E1 0.0299 K + 1943 : 228THS G KC=0.0240$ LC=0.00444$ MC=0.00106$ NC+=0.00038 + 1942 : 228TH G 332.37 2 21.0 11E1 0.0297 K + 1943 : 228THS G KC=0.0238 4$LC=0.00441 7$MC=0.001056 15 + 1943 : 228THS G NC=0.000280 4$OC=6.51E-5 10$PC=1.219E-5 17$QC=9.56E-7 14 + Compare OLD/NEW cards + 1951 : 228TH G 503.7 2 0.78 8 (E1) 0.0125 A + 1952 : 228THS G KC=0.0101$ LC=0.00178 + 1951 : 228TH G 503.7 2 0.78 8 (E1) 0.01244 A + 1952 : 228THS G KC=0.01009 15$LC=0.001776 25$MC=0.000423 6 + 1952 : 228THS G NC=0.0001120 16$OC=2.62E-5 4$PC=4.97E-6 7$QC=4.20E-7 6 + Compare OLD/NEW cards + 1953 : 228TH G 774.06 0.26 AP[E2] 0.0167 N + 1954 : 228THS G KC=0.0122$ LC=0.00339 + 1953 : 228TH G 774.06 0.26 AP[E2] 0.01649 N + 1954 : 228THS G KC=0.01204 17$LC=0.00333 5$MC=0.000835 12 + 1954 : 228THS G NC=0.000223 4$OC=5.17E-5 8$PC=9.55E-6 14$QC=6.19E-7 9 + Compare OLD/NEW cards + 1960 : 228TH G 478.45 4 3.17 17E1 0.0139 K + 1961 : 228THS G KC=0.0112$ LC=0.00199$ MC=0.00047$ NC+=0.00017 + 1960 : 228TH G 478.45 4 3.17 17E1 0.01379 K + 1961 : 228THS G KC=0.01118 16$LC=0.00198 3$MC=0.000471 7 + 1961 : 228THS G NC=0.0001248 18$OC=2.92E-5 4$PC=5.53E-6 8$QC=4.63E-7 7 + Compare OLD/NEW cards + 1962 : 228TH G 546.45 2 2.80 14[E1] 0.0107 + 1963 : 228THS G KC=0.00864$ LC=0.00151 + 1962 : 228TH G 546.45 2 2.80 14[E1] 0.01058 + 1963 : 228THS G KC=0.00861 12$LC=0.001500 21$MC=0.000357 5 + 1963 : 228THS G NC=9.45E-5 14$OC=2.22E-5 4$PC=4.21E-6 6$QC=3.60E-7 5 + Compare OLD/NEW cards + 1964 : 228TH G 688.14 8 1.21 14[E2] 0.0212 & + 1965 : 228TH3 G FL=186.82 + 1966 : 228THS G KC=0.0151$ LC=0.00464 + 1964 : 228TH G 688.14 8 1.21 14[E2] 0.0210 & + 1966 : 228THS G KC=0.01490 21$LC=0.00455 7$MC=0.001153 17 + 1966 : 228THS G NC=0.000308 5$OC=7.12E-5 10$PC=1.303E-5 19$QC=7.79E-7 11 + Compare OLD/NEW cards + 1967 : 228TH G 816.50 12 0.33 4 [M1,E2] 0.038 23 + 1968 : 228THS G KC=0.030 19$ LC=0.006 3 + 1967 : 228TH G 816.50 12 0.33 4 [M1,E2] 0.036 21 + 1968 : 228THS G KC=0.028 18$LC=0.0057 28$MC=0.00137 65 + 1968 : 228THS G NC=3.7E-4 18$OC=8.6E-5 42$PC=1.65E-5 82$QC=1.46E-6 90 + Compare OLD/NEW cards + 1969 : 228TH G 874.5 2 0.77 12[E2] 0.0131 G + 1970 : 228THS G KC=0.0098$ LC=0.00249 + 1969 : 228TH G 874.5 2 0.77 12[E2] 0.01294 G + 1970 : 228THS G KC=0.00968 14$LC=0.00245 4$MC=0.000608 9 + 1970 : 228THS G NC=0.0001623 23$OC=3.77E-5 6$PC=7.03E-6 10$QC=4.90E-7 7 + 1977 : 228TH G 616.15 5 1.07 8 + 1978 : 228TH G 944.31 6 0.98 8 + Compare OLD/NEW cards + 1982 : 228TH G 449.23 3 2.45 13[E2] 0.0563 + 1983 : 228THS G KC=0.0335$ LC=0.0168$ MC=0.00439$ NC+=0.00162 + 1982 : 228TH G 449.23 3 2.45 13[E2] 0.0554 + 1983 : 228THS G KC=0.0330 5$LC=0.01652 24$MC=0.00432 6 + 1983 : 228THS G NC=0.001156 17$OC=0.000264 4$PC=4.67E-5 7$QC=1.86E-6 3 + Compare OLD/NEW cards + 1984 : 228TH G 572.30 2 5.8 3 [M1,E2] 0.09 7 + 1985 : 228THS G KC=0.07 6$ LC=0.016 8 + 1984 : 228TH G 572.30 2 5.8 3 [M1,E2] 0.089 58 + 1985 : 228THS G KC=0.069 49$LC=0.0147 71$MC=0.0036 17 + 1985 : 228THS G NC=9.6E-4 44$OC=2.3E-4 11$PC=4.3E-5 21$QC=3.6E-6 25 + Compare OLD/NEW cards + 1986 : 228TH G 640.33 5 1.53 10[E2] 0.0247 + 1987 : 228THS G KC=0.0172$ LC=0.00567 + 1986 : 228TH G 640.33 5 1.53 10[E2] 0.0245 + 1987 : 228THS G KC=0.01700 24$LC=0.00556 8$MC=0.001416 20 + 1987 : 228THS G NC=0.000378 6$OC=8.73E-5 13$PC=1.589E-5 23$QC=8.98E-7 13 + Compare OLD/NEW cards + 1993 : 228TH G 782.08 3 4.70 23[E2] 0.0163 + 1994 : 228THS G KC=0.0119$ LC=0.00330 + 1993 : 228TH G 782.08 3 4.70 23[E2] 0.01615 + 1994 : 228THS G KC=0.01182 17$LC=0.00324 5$MC=0.000813 12 + 1994 : 228THS G NC=0.000217 3$OC=5.03E-5 7$PC=9.30E-6 13$QC=6.07E-7 9 + Compare OLD/NEW cards + 1996 : 228TH G 911.20 2 247 12E2+M1 +24 8 0.0121 + 1997 : 228THS G KC=0.0091$ LC=0.00225 + 1996 : 228TH G 911.20 2 247 12E2+M1 +24 8 0.0120018 + 1997 : 228THS G KC=0.00904 14$LC=0.00222 4$MC=0.000550 8 + 1997 : 228THS G NC=0.0001468 22$OC=3.42E-5 5$PC=6.38E-6 10$QC=4.56E-7 7 + Compare OLD/NEW cards + 2000 : 228TH G 968.98 2 149 8 E2 0.0107 + 2001 : 228THS G KC=0.00815$ LC=0.00194 + 2000 : 228TH G 968.98 2 149 8 E2 0.01061 + 2001 : 228THS G KC=0.00806 12$LC=0.00191 3$MC=0.000472 7 + 2001 : 228THS G NC=0.0001258 18$OC=2.93E-5 5$PC=5.49E-6 8$QC=4.04E-7 6 + Compare OLD/NEW cards + 2007 : 228TH G 583.4 1 3.6 3 [E1] 0.0094 I + 2008 : 228THS G KC=0.00761$ LC=0.00132 + 2007 : 228TH G 583.4 1 3.6 3 [E1] 0.00932 I + 2008 : 228THS G KC=0.00759 11$LC=0.001313 19$MC=0.000312 5 + 2008 : 228THS G NC=8.27E-5 12$OC=1.94E-5 3$PC=3.69E-6 6$QC=3.18E-7 5 + Compare OLD/NEW cards + 2010 : 228TH G 651.40 5 1.59 10[E1] + 2011 : 228TH3 G FLAG=G + 2012 : 228THS G CC=0.00758$ KC=0.00617$ LC=0.00106 + 2010 : 228TH G 651.40 5 1.59 10[E1] 0.00754 + 2012 : 228THS G KC=0.00616 9$LC=0.001053 15$MC=0.000250 4 + 2012 : 228THS G NC=6.62E-5 10$OC=1.556E-5 22$PC=2.97E-6 5$QC=2.60E-7 4 + Compare OLD/NEW cards + 2015 : 228TH G 792.68 1.4 AP[E2] 0.0159 G + 2016 : 228TH3 G FLAG=N + 2017 : 228THS G KC=0.0116$ LC=0.00319 + 2015 : 228TH G 792.68 1.4 AP[E2] 0.01572 G + 2017 : 228THS G KC=0.01154 17$LC=0.00313 5$MC=0.000784 11 + 2017 : 228THS G NC=0.000209 3$OC=4.86E-5 7$PC=8.98E-6 13$QC=5.91E-7 9 + Compare OLD/NEW cards + 2019 : 228TH G 921.74 0.30 LT[M1,E2] 0.028 17 G + 2020 : 228TH3 G FLAG=N + 2021 : 228THS G KC=0.022 14$ LC=0.0044 22 + 2019 : 228TH G 921.74 0.30 LT[M1,E2] 0.027 15 G + 2021 : 228THS G KC=0.021 13$LC=0.0041 20$MC=1.00E-3 47 + 2021 : 228THS G NC=2.7E-4 13$OC=6.3E-5 30$PC=1.20E-5 59$QC=1.08E-6 64 + Compare OLD/NEW cards + 2024 : 228TH G 979.4 4 0.5 AP[E2] 0.0105 G + 2025 : 228THS G KC=0.00799$ LC=0.00180 + 2024 : 228TH G 979.4 4 0.5 AP[E2] 0.01039 G + 2025 : 228THS G KC=0.00791 11$LC=0.00186 3$MC=0.000460 7 + 2025 : 228THS G NC=0.0001225 18$OC=2.86E-5 4$PC=5.36E-6 8$QC=3.96E-7 6 + 2030 : 228TH G 620.27 5 1.41 10 G + 2033 : 228TH G 688.14 8 1.21 14 & + 2034 : 228TH3 G FL=328.00 + 2035 : 228TH G 958.69 11 5.0 6 G + 2036 : 228TH G 1016.41 0.34 6 G + 2037 : 228TH3 G FLAG=N + Compare OLD/NEW cards + 2042 : 228TH G 835.65 2 42.7 22E2 0.0143 + 2043 : 228THS G KC=0.0106$ LC=0.00279 + 2042 : 228TH G 835.65 2 42.7 22E2 0.01415 + 2043 : 228THS G KC=0.01050 15$LC=0.00274 4$MC=0.000683 10 + 2043 : 228THS G NC=0.000182 3$OC=4.24E-5 6$PC=7.86E-6 11$QC=5.34E-7 8 + Compare OLD/NEW cards + 2047 : 228TH G 964.80 2 122 6 E2+M1 -7.2 10 0.0108 + 2048 : 228THS G KC=0.00821$ LC=0.00196 + 2047 : 228TH G 964.80 2 122 6 E2+M1 -7.2 10 0.0111923 + 2048 : 228THS G KC=0.00853 19$LC=0.00199 4$MC=0.000492 9 + 2048 : 228THS G NC=0.0001312 23$OC=3.06E-5 6$PC=5.74E-6 11$QC=4.28E-7 10 + Compare OLD/NEW cards + 2055 : 228TH G 540.66 5 0.89 6 [M1,E2] 0.11 8 + 2056 : 228THS G KC=0.08 6$ LC=0.018 9$ + 2055 : 228TH G 540.66 5 0.89 6 [M1,E2] 0.103 68 + 2056 : 228THS G KC=0.080 57$LC=0.0173 82$MC=0.0042 19 + 2056 : 228THS G NC=0.00113 50$OC=2.6E-4 12$PC=5.0E-5 25$QC=4.2E-6 30 + Compare OLD/NEW cards + 2057 : 228TH G 663.92 8 1.44 11(M1+E2) 0.06 4 + 2058 : 228THS G KC=0.05 4$ LC=0.010 6 + 2057 : 228TH G 663.92 8 1.44 11(M1+E2) 0.061 38 + 2058 : 228THS G KC=0.048 32$LC=0.0098 48$MC=0.0024 12 + 2058 : 228THS G NC=6.4E-4 30$OC=1.50E-4 72$PC=2.9E-5 15$QC=2.5E-6 17 + Compare OLD/NEW cards + 2061 : 228TH G 873.0 2 1.66 17[E1] 0.00441 G + 2062 : 228THS G KC=0.00361$ LC=0.00060 + 2061 : 228TH G 873.0 2 1.66 17[E1] 0.00440 G + 2062 : 228THS G KC=0.00361 5$LC=0.000601 9$MC=0.0001422 20 + 2062 : 228THS G NC=3.77E-5 6$OC=8.88E-6 13$PC=1.705E-6 24$QC=1.547E-7 22 + Compare OLD/NEW cards + 2066 : 228TH G 694.8 2 0.76 10[E1] 0.00671 G + 2067 : 228THS G KC=0.00547$ LC=0.00093 + 2066 : 228TH G 694.8 2 0.76 10[E1] 0.00668 G + 2067 : 228THS G KC=0.00546 8$LC=0.000928 13$MC=0.000220 3 + 2067 : 228THS G NC=5.83E-5 9$OC=1.371E-5 20$PC=2.62E-6 4$QC=2.31E-7 4 + Compare OLD/NEW cards + 2068 : 228TH G 713.1 3 0.48 11[E2] 0.0197 I + 2069 : 228THS G KC=0.0141$ LC=0.00421 + 2068 : 228TH G 713.1 3 0.48 11[E2] 0.0195 I + 2069 : 228THS G KC=0.01397 20$LC=0.00413 6$MC=0.001044 15 + 2069 : 228THS G NC=0.000279 4$OC=6.45E-5 9$PC=1.184E-5 17$QC=7.26E-7 11 + Compare OLD/NEW cards + 2070 : 228TH G 904.19 3 26.5 13E2 0.0123 + 2071 : 228THS G KC=0.0092$ LC=0.00229 + 2070 : 228TH G 904.19 3 26.5 13E2 0.01212 + 2071 : 228THS G KC=0.00912 13$LC=0.00225 4$MC=0.000559 8 + 2071 : 228THS G NC=0.0001492 21$OC=3.47E-5 5$PC=6.48E-6 9$QC=4.60E-7 7 + Compare OLD/NEW cards + 2075 : 228TH G 1033.27 7 7.6 4 E2 0.0095 + 2075 : 228TH G 1033.27 7 7.6 4 E2 0.00938 + 2076 : 228THS G KC=0.00720 10$LC=0.001643 23$MC=0.000404 6 + 2076 : 228THS G NC=0.0001078 15$OC=2.52E-5 4$PC=4.73E-6 7$QC=3.58E-7 5 + Compare OLD/NEW cards + 2081 : 228TH G 100.42 0.5 LT(E1+M2) 0.23 AP 3.2 AP A + 2082 : 228TH3 G FLAG=EN + 2083 : 228THS G LC=2.4$ MC=0.64$ NC+=0.25 + 2081 : 228TH G 100.42 0.5 LT(E1+M2) 0.23 AP 3.10 AP A + 2083 : 228THS G LC AP 2.27$MC AP 0.614 + 2083 : 228THS G NC AP 0.1675$OC AP 0.0393$PC AP 0.00737$QC AP 0.000589 + Compare OLD/NEW cards + 2085 : 228TH G 153.95 2 5.5 3 E1 0.178 K + 2086 : 228THS G KC=0.139$ LC=0.0292$ MC=0.00703$ NC+=0.00250 + 2085 : 228TH G 153.95 2 5.5 3 E1 0.1758 K + 2086 : 228THS G KC=0.1376 20$LC=0.0289 4$MC=0.00698 10 + 2086 : 228THS G NC=0.00184 3$OC=0.000423 6$PC=7.66E-5 11$QC=5.02E-6 7 + Compare OLD/NEW cards + 2088 : 228TH G 726.90 10 4.4 6 (E2) 0.0189 A + 2089 : 228THS G KC=0.0136$ LC=0.00400 + 2088 : 228TH G 726.90 10 4.4 6 (E2) 0.0187 A + 2089 : 228THS G KC=0.01349 19$LC=0.00393 6$MC=0.000990 14 + 2089 : 228THS G NC=0.000264 4$OC=6.12E-5 9$PC=1.125E-5 16$QC=6.99E-7 10 + Compare OLD/NEW cards + 2090 : 228TH G 794.97 2 34.4 17E2+M1 -4.4 10 0.0182 15 + 2091 : 228THS G KC=0.0136 13$ LC=0.00349 20 + 2090 : 228TH G 794.97 2 34.4 17E2+M1 -4.4 10 0.0179 14 + 2091 : 228THS G KC=0.0133 12$LC=0.00340 19$MC=0.00085 5 + 2091 : 228THS G NC=0.000226 12$OC=5.3E-5 3$PC=9.8E-6 6$QC=6.8E-7 6 + Compare OLD/NEW cards + 2094 : 228TH G 1065.21 7 1.03 7 [E1] 0.00311 + 2095 : 228THS G KC=0.00255$ LC=0.00042 + 2094 : 228TH G 1065.21 7 1.03 7 [E1] 0.00310 + 2095 : 228THS G KC=0.00254 4$LC=0.000418 6$MC=9.87E-5 14 + 2095 : 228THS G NC=2.62E-5 4$OC=6.17E-6 9$PC=1.189E-6 17$QC=1.100E-7 16 + Compare OLD/NEW cards + 2099 : 228TH G 174.02 4 0.30 3 M1+E2 1.2 +11-6 2.23 18 A + 2100 : 228TH2 G FLAG=E + 2101 : 228THS G KC=1.5 10$ LC=0.66 4$ MC=0.171 22$ NC+=0.063 5 + 2099 : 228TH G 174.02 4 0.30 3 M1+E2 1.2 +11-6 2.24 90 A + 2101 : 228THS G KC=1.38 94$LC=0.63 3$MC=0.166 14 + 2101 : 228THS G NC=0.044 4$OC=0.0101 7$PC=0.00179 5$QC=7.8E-5 48 + Compare OLD/NEW cards + 2103 : 228TH G 184.61 5 0.21 3 E0+M1 63 8 @ + 2104 : 228TH3 G FL=968.97$ FLAG=M + Compare OLD/NEW cards + 2108 : 228TH G 278.66 2 0.44 6 (M1+E2) 0.7 5 @ + 2109 : 228TH3 G FL=874.47$ FLAG=AM + 2110 : 228THS G KC=0.5 4$ LC=0.13 4$ MC=0.033 7$ NC+=0.0120 25 + 2108 : 228TH G 278.66 2 0.44 6 (M1+E2) 0.62 41 @ + 2110 : 228THS G KC=0.46 38$LC=0.12 3$MC=0.031 6 + 2110 : 228THS G NC=0.0084 16$OC=0.0019 5$PC=3.60E-4 99$QC=2.4E-5 19 + Compare OLD/NEW cards + 2113 : 228TH G 321.71 3 0.67 4 [E2] 0.140 + 2114 : 228THS G KC=0.0643$ LC=0.0550$ MC=0.0147$ NC+=0.00544 + 2113 : 228TH G 321.71 3 0.67 4 [E2] 0.1368 + 2114 : 228THS G KC=0.0635 9$LC=0.0540 8$MC=0.01443 21 + 2114 : 228THS G NC=0.00386 6$OC=0.000874 13$PC=0.0001513 22$QC=3.87E-6 6 + Compare OLD/NEW cards + 2115 : 228TH G 966.64 0.5 LE[E2] 0.0108 I + 2116 : 228TH3 G FLAG=N + 2115 : 228TH G 966.64 0.5 LE[E2] 0.01066 I + 2117 : 228THS G KC=0.00810 12$LC=0.00192 3$MC=0.000474 7 + 2117 : 228THS G NC=0.0001265 18$OC=2.95E-5 5$PC=5.52E-6 8$QC=4.06E-7 6 + Compare OLD/NEW cards + 2117 : 228TH G 1095.74 14 0.32 6 [M1,E2] 0.018 10 + 2117 : 228TH G 1095.74 14 0.32 6 [M1,E2] 0.0173 90 + 2118 : 228THS G KC=0.0138 74$LC=0.0026 13$MC=6.4E-4 29 + 2118 : 228THS G NC=1.70E-4 76$OC=4.0E-5 19$PC=7.7E-6 36$QC=7.0E-7 38 + 2118 : 228TH G 1153.6 3 0.37 8 + Compare OLD/NEW cards + 2122 : 228TH G 77.36 0.44 9 [E1] 0.235 N + 2123 : 228THS G LC=0.177$ MC=0.0431$ NC+=0.0150 + 2122 : 228TH G 77.36 0.44 9 [E1] 0.231 N + 2123 : 228THS G LC=0.1746 25$MC=0.0426 6 + 2123 : 228THS G NC=0.01117 16$OC=0.00252 4$PC=0.000435 6$QC=2.30E-5 4 + Compare OLD/NEW cards + 2126 : 228TH G 145.82 2 2.57 13E1 0.203 K + 2127 : 228THS G KC=0.158$ LC=0.0336$ MC=0.00809$ NC+=0.00287 + 2126 : 228TH G 145.82 2 2.57 13E1 0.200 K + 2127 : 228THS G KC=0.1562 22$LC=0.0332 5$MC=0.00803 12 + 2127 : 228THS G NC=0.00212 3$OC=0.000485 7$PC=8.77E-5 13$QC=5.66E-6 8 + Compare OLD/NEW cards + 2129 : 228TH G 199.40 2 4.65 23E1 0.096 K + 2130 : 228THS G KC=0.0758$ LC=0.0152$ MC=0.00365$ NC+=0.00129 + 2129 : 228TH G 199.40 2 4.65 23E1 0.0950 K + 2130 : 228THS G KC=0.0752 11$LC=0.01502 21$MC=0.00362 5 + 2130 : 228THS G NC=0.000956 14$OC=0.000221 3$PC=4.05E-5 6$QC=2.84E-6 4 + Compare OLD/NEW cards + 2132 : 228TH G 649.12 7 0.97 9 [E2] 0.0240 & + 2133 : 228THS G KC=0.0168$ LC=0.00546 + 2132 : 228TH G 649.12 7 0.97 9 [E2] 0.0238 & + 2133 : 228THS G KC=0.01658 24$LC=0.00535 8$MC=0.001361 19 + 2133 : 228THS G NC=0.000364 5$OC=8.39E-5 12$PC=1.530E-5 22$QC=8.74E-7 13 + Compare OLD/NEW cards + 2134 : 228TH G 772.28 2 25.2 13E2+M1 -3.4 +8-27 0.021 3 + 2135 : 228THS G KC=0.0157 24$ LC=0.0040 4 + 2135 : 228THS G KC=0.0154 22$LC=0.0039 4$MC=0.00096 9 + 2135 : 228THS G NC=0.000256 22$OC=6.0E-5 6$PC=1.11E-5 11$QC=7.9E-7 12 + Compare OLD/NEW cards + 2140 : 228TH G 840.36 4 15.9 8 E2 0.0142 + 2141 : 228THS G KC=0.0105$ LC=0.00275 + 2140 : 228TH G 840.36 4 15.9 8 E2 0.01400 + 2141 : 228THS G KC=0.01039 15$LC=0.00270 4$MC=0.000673 10 + 2141 : 228THS G NC=0.000180 3$OC=4.18E-5 6$PC=7.75E-6 11$QC=5.29E-7 8 + Compare OLD/NEW cards + 2144 : 228TH G 981.5 2 0.76 10[E1] I + 2145 : 228THS G CC=0.00358$ KC=0.00294$ LC=0.00049 + 2144 : 228TH G 981.5 2 0.76 10[E1] 0.00357 I + 2145 : 228THS G KC=0.00293 5$LC=0.000485 7$MC=0.0001145 16 + 2145 : 228THS G NC=3.04E-5 5$OC=7.16E-6 10$PC=1.377E-6 20$QC=1.264E-7 18 + Compare OLD/NEW cards + 2146 : 228TH G 1110.55 5 4.7 5 E1 @ + 2147 : 228THS G CC=0.00289$ KC=0.00237$ LC=0.00039 + 2146 : 228TH G 1110.55 5 4.7 5 E1 0.00288 @ + 2147 : 228THS G KC=0.00237 4$LC=0.000388 6$MC=9.15E-5 13 + 2147 : 228THS G NC=2.43E-5 4$OC=5.73E-6 8$PC=1.104E-6 16$QC=1.026E-7 15 + 2147 : 228THS G IPC=7.70E-7 11 + Compare OLD/NEW cards + 2153 : 228TH G 987.92 10 4.31 22[M1,E2] 0.024 14 + 2154 : 228THS G KC=0.019 11$ LC=0.0037 18 + 2153 : 228TH G 987.92 10 4.31 22[M1,E2] 0.022 13 + 2154 : 228THS G KC=0.018 10$LC=0.0034 17$MC=8.3E-4 39 + 2154 : 228THS G NC=2.2E-4 11$OC=5.2E-5 25$PC=1.01E-5 49$QC=9.1E-7 52 + Compare OLD/NEW cards + 2162 : 228TH G 178.14 7 0.2 LEE0 1.2 + Compare OLD/NEW cards + 2166 : 228TH G 231.50 5 0.92 5 [M1,E2] 1.1 8 + 2167 : 228THS G KC=0.8 7$ LC=0.24 4$ MC=0.061 6$ NC+=0.0223 20 + 2166 : 228TH G 231.50 5 0.92 5 [M1,E2] 1.06 67 + 2167 : 228THS G KC=0.75 63$LC=0.23 4$MC=0.058 5 + 2167 : 228THS G NC=0.0156 12$OC=0.0036 4$PC=0.00066 11$QC=4.1E-5 33 + Compare OLD/NEW cards + 2168 : 228TH G 1013.54 13 0.38 5 [M1,E2] 0.022 13 & + 2169 : 228THS G KC=0.018 11$ LC=0.0034 17 + 2168 : 228TH G 1013.54 13 0.38 5 [M1,E2] 0.021 12 & + 2169 : 228THS G KC=0.0167 93$LC=0.0032 16$MC=7.8E-4 36 + 2169 : 228THS G NC=2.08E-4 95$OC=4.9E-5 23$PC=9.4E-6 45$QC=8.5E-7 48 + Compare OLD/NEW cards + 2170 : 228TH G 1142.78 0.10 3 [M1,E2] 0.017 9 + 2171 : 228THS G KC=0.013 8$ LC=0.0025 12 + 2170 : 228TH G 1142.78 0.10 3 [M1,E2] 0.0156 79 + 2171 : 228THS G KC=0.0125 65$LC=0.0024 11$MC=5.7E-4 26 + 2171 : 228THS G NC=1.52E-4 68$OC=3.6E-5 16$PC=6.9E-6 32$QC=6.3E-7 34$IPC=1.07E-6 46 + Compare OLD/NEW cards + 2176 : 228TH G 135.51 2 1.04 6 E1 0.242 K + 2177 : 228THS G KC=0.188$ LC=0.0406$ MC=0.0098$ NC+=0.00348 + 2176 : 228TH G 135.51 2 1.04 6 E1 0.238 K + 2177 : 228THS G KC=0.185 3$LC=0.0401 6$MC=0.00971 14 + 2177 : 228THS G NC=0.00256 4$OC=0.000586 9$PC=0.0001053 15$QC=6.67E-6 10 + Compare OLD/NEW cards + 2178 : 228TH G 204.05 2 6.0 3 E1 0.091 K + 2179 : 228THS G KC=0.0719$ LC=0.0143$ MC=0.00344$ NC+=0.00122 + 2178 : 228TH G 204.05 2 6.0 3 E1 0.0900 K + 2179 : 228THS G KC=0.0713 10$LC=0.01418 20$MC=0.00341 5 + 2179 : 228THS G NC=0.000902 13$OC=0.000208 3$PC=3.83E-5 6$QC=2.70E-6 4 + Compare OLD/NEW cards + 2181 : 228TH G 707.40 3 7.9 4 (E2) 0.0200 + 2182 : 228THS G KC=0.0143 $ LC=0.00431 + 2181 : 228TH G 707.40 3 7.9 4 (E2) 0.0198 + 2182 : 228THS G KC=0.01417 20$LC=0.00423 6$MC=0.001067 15 + 2182 : 228THS G NC=0.000285 4$OC=6.59E-5 10$PC=1.209E-5 17$QC=7.38E-7 11 + Compare OLD/NEW cards + 2185 : 228TH G 830.48 3 29.0 15E2(+M1) -7.7 9 0.0152 2 + 2186 : 228THS G KC=0.0113 2 $ LC=0.00293 3 + 2185 : 228TH G 830.48 3 29.0 15E2(+M1) -7.7 9 0.0150 3 + 2186 : 228THS G KC=0.01117 22$LC=0.00287 5$MC=0.000715 12 + 2186 : 228THS G NC=0.000191 3$OC=4.43E-5 8$PC=8.24E-6 14$QC=5.69E-7 12 + 2189 : 228TH G 1039.87 6 2.92 15 + Compare OLD/NEW cards + 2193 : 228TH G 601.7 3 0.30 5 [E2] 0.0283 & ? + 2193 : 228TH G 601.7 3 0.30 5 [E2] 0.0280 & ? + 2194 : 228THS G KC=0.0191 3$LC=0.00665 10$MC=0.001701 24 + 2194 : 228THS G NC=0.000455 7$OC=0.0001047 15$PC=1.90E-5 3$QC=1.017E-6 15 + Compare OLD/NEW cards + 2197 : 228TH G 778.1 2 2.7 3 [M1,E2] 0.04 3 G + 2198 : 228THS G KC=0.034 22$ LC=0.007 4 + 2197 : 228TH G 778.1 2 2.7 3 [M1,E2] 0.041 25 G + 2198 : 228THS G KC=0.032 20$LC=0.0064 32$MC=0.00156 74 + 2198 : 228THS G NC=4.2E-4 20$OC=9.8E-5 47$PC=1.88E-5 94$QC=1.6E-6 11 + Compare OLD/NEW cards + 2199 : 228TH G 901.4 3 2.0 3 [E2] 0.0123 G + 2200 : 228THS G KC=0.0093$ LC=0.00231 + 2199 : 228TH G 901.4 3 2.0 3 [E2] 0.01220 G + 2200 : 228THS G KC=0.00917 13$LC=0.00227 4$MC=0.000564 8 + 2200 : 228THS G NC=0.0001503 21$OC=3.50E-5 5$PC=6.53E-6 10$QC=4.63E-7 7 + Compare OLD/NEW cards + 2201 : 228TH G 1110.55 5 2.4 2 E1 @ + 2202 : 228TH3 G FLAG=I + 2201 : 228TH G 1110.55 5 2.4 2 E1 0.00288 @ + 2203 : 228THS G KC=0.00237 4$LC=0.000388 6$MC=9.15E-5 13 + 2203 : 228THS G NC=2.43E-5 4$OC=5.73E-6 8$PC=1.104E-6 16$QC=1.026E-7 15 + 2203 : 228THS G IPC=7.70E-7 11 + 2212 : 228TH G 948 0.2 AP + Compare OLD/NEW cards + 2222 : 228TH G 257.49 2 1.40 7 (M1) 1.36 K + 2223 : 228THS G KC=1.09$ LC=0.205$ MC=0.0495$ NC+=0.0180 + 2222 : 228TH G 257.49 2 1.40 7 (M1) 1.285 K + 2223 : 228THS G KC=1.028 15$LC=0.194 3$MC=0.0466 7 + 2223 : 228THS G NC=0.01244 18$OC=0.00294 5$PC=0.000571 8$QC=5.42E-5 8 + Compare OLD/NEW cards + 2224 : 228TH G 263.62 2 2.17 11E1 0.0502 K + 2225 : 228THS G KC=0.0400$ LC=0.00766$ MC=0.00184$ NC+=0.00065 + 2224 : 228TH G 263.62 2 2.17 11E1 0.0497 K + 2225 : 228THS G KC=0.0397 6$LC=0.00759 11$MC=0.00182 3 + 2225 : 228THS G NC=0.000482 7$OC=0.0001119 16$PC=2.08E-5 3$QC=1.553E-6 22 + Compare OLD/NEW cards + 2226 : 228TH G 278.66 2 1.61 21[E2] 0.216 @ + 2227 : 228TH3 G FL=1153.47$ FLAG=M + 2228 : 228THS G KC=0.086$ LC=0.095$ MC=0.0257$ NC+=0.0095 + 2226 : 228TH G 278.66 2 1.61 21[E2] 0.212 @ + 2228 : 228THS G KC=0.0844 12$LC=0.0939 14$MC=0.0253 4 + 2228 : 228THS G NC=0.00677 10$OC=0.001528 22$PC=0.000262 4$QC=5.40E-6 8 + Compare OLD/NEW cards + 2231 : 228TH G 340.98 2 20.5 10E2+M1 -5.2 18 0.136 23 + 2232 : 228THS G KC=0.073 20$ LC=0.046 2$ MC=0.0122 5$ NC+=0.00450 17 + 2231 : 228TH G 340.98 2 20.5 10E2+M1 -5.2 18 0.133 21 + 2232 : 228THS G KC=0.071 19$LC=0.0451 21$MC=0.0119 5 + 2232 : 228THS G NC=0.00319 13$OC=0.00073 3$PC=0.000127 7$QC=4.2E-6 10 + Compare OLD/NEW cards + 2235 : 228TH G 409.45 2 100 5 E2+M1 -5.4 8 0.082 4 + 2236 : 228THS G KC= 0.049 4$ LC=0.0242 5$ MC=0.00631 10$ N+=0.00233 4 + 2235 : 228TH G 409.45 2 100 5 E2+M1 -5.4 8 0.080 4 + 2236 : 228THS G KC=0.048 3$LC=0.0236 5$MC=0.00618 12 + 2236 : 228THS G NC=0.00165 4$OC=0.000378 8$PC=6.69E-5 15$QC=2.69E-6 16 + Compare OLD/NEW cards + 2239 : 228TH G 452.52 6 1.02 8 [E2] 0.0553 + 2240 : 228THS G KC=0.0330$ LC=0.0164$ MC=0.00429$ NC+=0.00158 + 2239 : 228TH G 452.52 6 1.02 8 [E2] 0.0544 + 2240 : 228THS G KC=0.0326 5$LC=0.01612 23$MC=0.00422 6 + 2240 : 228THS G NC=0.001128 16$OC=0.000257 4$PC=4.56E-5 7$QC=1.83E-6 3 + Compare OLD/NEW cards + 2241 : 228TH G 463.02 2 224 11E2 0.0522 + 2242 : 228THS G KC= 0.0316 $LC=0.0152 $MC=0.00397 $N+=0.00146 $ + 2241 : 228TH G 463.02 2 224 11E2 0.0514 + 2242 : 228THS G KC=0.0312 5$LC=0.01495 21$MC=0.00390 6 + 2242 : 228THS G NC=0.001044 15$OC=0.000238 4$PC=4.23E-5 6$QC=1.744E-6 25 + 2246 : 228TH G 1053.80 0.5 AP I + Compare OLD/NEW cards + 2248 : 228TH G 1245.17 6 5.6 3 [M1,E2] 0.013 7 G + 2249 : 228THS G KC=0.011 6$ LC=0.0020 10 + 2248 : 228TH G 1245.17 6 5.6 3 [M1,E2] 0.0127 61 G + 2249 : 228THS G KC=0.0101 50$LC=0.00191 84$MC=4.6E-4 20 + 2249 : 228THS G NC=1.23E-4 53$OC=2.9E-5 13$PC=5.6E-6 25$QC=5.1E-7 26$IPC=1.22E-5 51 + 2250 : 228TH G 1374.26 7 1.0 AP + Compare OLD/NEW cards + 2255 : 228TH G 18.41 3.7 5 [E1] 6.6 28 3 + 2256 : 228THS G L/T=0.59$ M/T=0.31 + 2255 : 228TH G 18.41 3.7 5 [E1] 6.46 28 3 + 2256 : 228THS G L/T=0.513 7$M/T=0.268 5 + 2256 : 228THS G N/T=0.0690 13$O/T=0.0141 3$P/T=0.00195 4$Q/T=5.60E-5 11 + 2256 : 228THS G LC=3.83 6$MC=2.00 3 + 2256 : 228THS G NC=0.515 8$OC=0.1054 15$PC=0.01454 21$QC=0.000418 6 + Compare OLD/NEW cards + 2261 : 228TH G 153.02 2 1.11 6 M1+E2 0.60 8 4.8 2 + 2262 : 228THS G KC=3.5 2$ LC=0.97 2$ MC=0.245 6$ NC+=0.090 2 + 2261 : 228TH G 153.02 2 1.11 6 M1+E2 0.60 8 4.56 21 + 2262 : 228THS G KC=3.32 23$LC=0.932 22$MC=0.235 7 + 2262 : 228THS G NC=0.0627 19$OC=0.0145 4$PC=0.00269 6$QC=0.000180 12 + Compare OLD/NEW cards + 2264 : 228TH G 223.80 2 13.3 7 M1+E2 -0.18 5 1.97 3 + 2265 : 228THS G KC= 1.56 3$ LC= 0.302 1$ MC= 0.0729 2$ N+= 0.0266 1$ + 2264 : 228TH G 223.80 2 13.3 7 M1+E2 -0.18 5 1.85 4 + 2265 : 228THS G KC=1.48 4$LC=0.286 5$MC=0.0688 10 + 2265 : 228THS G NC=0.0184 3$OC=0.00434 7$PC=0.000840 13$QC=7.81E-5 18 + Compare OLD/NEW cards + 2268 : 228TH G 275.85 4 0.82 7 [E1] 0.0453 + 2269 : 228THS G KC=0.0362$ LC=0.00687$ MC=0.00165$ NC+=0.00058 + 2268 : 228TH G 275.85 4 0.82 7 [E1] 0.0449 + 2269 : 228THS G KC=0.0359 5$LC=0.00682 10$MC=0.001635 23 + 2269 : 228THS G NC=0.000433 6$OC=0.0001004 14$PC=1.87E-5 3$QC=1.410E-6 20 + Compare OLD/NEW cards + 2270 : 228TH G 282.01 2 18.6 9 M1+E2 -0.51 12 0.88 7 + 2271 : 228THS G KC=0.69 6$ LC= 0.145 6$ MC=0.0355 11$ N+=0.0129 4 + 2270 : 228TH G 282.01 2 18.6 9 M1+E2 -0.51 12 0.83 7 + 2271 : 228THS G KC=0.65 6$LC=0.138 6$MC=0.0337 11 + 2271 : 228THS G NC=0.0090 3$OC=0.00211 7$PC=0.000403 16$QC=3.4E-5 3 + Compare OLD/NEW cards + 2274 : 228TH G 327.45 4 31 3 [E2] 0.132 G + 2275 : 228THS G KC=0.0621$ LC=0.0515$ MC=0.0137$ NC+=0.00508 + 2274 : 228TH G 327.45 4 31 3 [E2] 0.1299 G + 2275 : 228THS G KC=0.0613 9$LC=0.0505 7$MC=0.01349 19 + 2275 : 228THS G NC=0.00361 5$OC=0.000818 12$PC=0.0001416 20$QC=3.72E-6 6 + Compare OLD/NEW cards + 2278 : 228TH G 359.36 3 1.30 7 [E1] 0.0252 + 2279 : 228THS G KC=0.0203$ LC=0.00372$ MC=0.00089$ NC+=0.00032 + 2278 : 228TH G 359.36 3 1.30 7 [E1] 0.0250 + 2279 : 228THS G KC=0.0202 3$LC=0.00370 6$MC=0.000884 13 + 2279 : 228THS G NC=0.000234 4$OC=5.46E-5 8$PC=1.024E-5 15$QC=8.15E-7 12 + Compare OLD/NEW cards + 2280 : 228TH G 390.45 5 1.11 6 [M1,E2] 0.26 18 + 2281 : 228THS G KC=0.20 16$ LC=0.046 19$ MC=0.011 5$ NC+=0.0042 16 + 2280 : 228TH G 390.45 5 1.11 6 [M1,E2] 0.24 17 + 2281 : 228THS G KC=0.19 15$LC=0.044 18$MC=0.0109 39 + 2281 : 228THS G NC=0.0029 11$OC=6.8E-4 26$PC=1.28E-4 53$QC=9.8E-6 74 + Compare OLD/NEW cards + 2282 : 228TH G 427.90 3 1.24 8 [E1] 0.0174 + 2283 : 228THS G KC=0.0141$ LC=0.00252$ MC=0.00060$ NC+=0.00022 + 2282 : 228TH G 427.90 3 1.24 8 [E1] 0.01733 + 2283 : 228THS G KC=0.01401 20$LC=0.00251 4$MC=0.000599 9 + 2283 : 228THS G NC=0.0001588 23$OC=3.71E-5 6$PC=7.00E-6 10$QC=5.75E-7 8 + Compare OLD/NEW cards + 2284 : 228TH G 434.01 3 1.73 10[D,E2] 0.14 13 + Compare OLD/NEW cards + 2285 : 228TH G 482.03 5 1.84 13[M1,E2] 0.15 10 + 2286 : 228THS G KC=0.11 9$ LC=0.025 12$ MC=0.006 3$ NC+=0.0022 10 + 2285 : 228TH G 482.03 5 1.84 13[M1,E2] 0.139 93 + 2286 : 228THS G KC=0.107 79$LC=0.024 11$MC=0.0059 25 + 2286 : 228THS G NC=0.00156 65$OC=3.7E-4 16$PC=6.9E-5 33$QC=5.6E-6 41 + Compare OLD/NEW cards + 2287 : 228TH G 1054.23 6 3.3 3 [M1,E2] 0.020 11 + 2288 : 228THS G KC=0.016 9$ LC=0.0031 15 + 2287 : 228TH G 1054.23 6 3.3 3 [M1,E2] 0.019 10 + 2288 : 228THS G KC=0.0152 83$LC=0.0029 14$MC=7.0E-4 32 + 2288 : 228THS G NC=1.87E-4 85$OC=4.4E-5 21$PC=8.5E-6 40$QC=7.7E-7 43 + Compare OLD/NEW cards + 2292 : 228TH G 99.47 6 1.8 3 M1 4.09 + 2293 : 228THS G LC=3.07$ MC=0.741$ NC+=0.273 + 2292 : 228TH G 99.47 6 1.8 3 M1 3.85 + 2293 : 228THS G LC=2.91 5$MC=0.700 10 + 2293 : 228THS G NC=0.187 3$OC=0.0442 7$PC=0.00858 13$QC=0.000816 12 + Compare OLD/NEW cards + 2297 : 228TH G 356.96 0.024 5 [E2] 0.103 N + 2297 : 228TH G 356.96 0.024 5 [E2] 0.1015 N + 2298 : 228THS G KC=0.0517 8$LC=0.0367 6$MC=0.00976 14 + 2298 : 228THS G NC=0.00261 4$OC=0.000593 9$PC=0.0001033 15$QC=3.07E-6 5 + Compare OLD/NEW cards + 2300 : 228TH G 378.01 0.036 7 [M1,E2] 0.28 19 N + 2301 : 228THS G KC=0.21 17$ LC=0.051 20$ MC=0.013 5$ NC+=0.0046 16 + 2300 : 228TH G 378.01 0.036 7 [M1,E2] 0.27 18 N + 2301 : 228THS G KC=0.20 16$LC=0.049 19$MC=0.0120 41 + 2301 : 228THS G NC=0.0032 11$OC=7.5E-4 27$PC=1.41E-4 57$QC=1.07E-5 81 + Compare OLD/NEW cards + 2303 : 228TH G 440.4 4 0.15 7 M1 0.314 A + 2304 : 228THS G KC=0.252$ LC=0.0471$ MC=0.0113$ NC+=0.00410 + 2303 : 228TH G 440.4 4 0.15 7 M1 0.295 A + 2304 : 228THS G KC=0.237 4$LC=0.0442 7$MC=0.01061 15 + 2304 : 228THS G NC=0.00283 4$OC=0.000670 10$PC=0.0001300 19$QC=1.234E-5 18 + Compare OLD/NEW cards + 2305 : 228TH G 509.13 8 1.2 2 E2(+M1) 1.1 GT 0.08 4 A + 2306 : 228TH3 G FLAG=EG + 2307 : 228THS G KC=0.06 3$ LC=0.016 5 + 2305 : 228TH G 509.13 8 1.2 2 E2(+M1) 1.1 GT 0.077 36 A + 2307 : 228THS G KC=0.056 31$LC=0.0153 43$MC=0.00383 98 + 2307 : 228THS G NC=1.02E-3 26$OC=2.38E-4 63$PC=4.4E-5 13$QC=3.0E-6 16 + Compare OLD/NEW cards + 2308 : 228TH G 562.50 4 1.44 9 E2+M1 +1.6 6 0.07 3 + 2309 : 228THS G KC=0.051 24$ LC=0.013 4 + 2308 : 228TH G 562.50 4 1.44 9 E2+M1 +1.6 6 0.066 27 + 2309 : 228THS G KC=0.050 23$LC=0.0122 33$MC=0.0030 8 + 2309 : 228THS G NC=0.00081 20$OC=1.89E-4 48$PC=3.54E-5 97$QC=2.6E-6 12 + 2310 : 228TH G 1135.39 0.014 4 N + 2312 : 228TH G 1344.65 0.013 4 N + Compare OLD/NEW cards + 2323 : 228TH G 354.2 2 0.29 5 [E2] 0.106 & + 2324 : 228THS G KC=0.0531$ LC=0.0385$ MC=0.0102$ NC+=0.00378 + 2323 : 228TH G 354.2 2 0.29 5 [E2] 0.1037 & + 2324 : 228THS G KC=0.0525 8$LC=0.0378 6$MC=0.01005 15 + 2324 : 228THS G NC=0.00269 4$OC=0.000610 9$PC=0.0001062 15$QC=3.12E-6 5 + Compare OLD/NEW cards + 2325 : 228TH G 601.7 3 0.30 5 [E1] 0.0088 & + 2326 : 228THS G KC=0.00718$ LC=0.00124 + 2325 : 228TH G 601.7 3 0.30 5 [E1] 0.00878 & + 2326 : 228THS G KC=0.00715 10$LC=0.001234 18$MC=0.000293 5 + 2326 : 228THS G NC=7.76E-5 11$OC=1.82E-5 3$PC=3.47E-6 5$QC=3.01E-7 5 + Compare OLD/NEW cards + 2327 : 228TH G 1184.71 9 0.47 4 (M1+E2) 0.015 8 + 2328 : 228THS G KC=0.012 7$ LC=0.0023 11 + 2327 : 228TH G 1184.71 9 0.47 4 (M1+E2) 0.0143 71 + 2328 : 228THS G KC=0.0114 58$LC=0.00217 97$MC=5.2E-4 23 + 2328 : 228THS G NC=1.39E-4 61$OC=3.3E-5 15$PC=6.3E-6 29$QC=5.8E-7 31$IPC=3.8E-6 17 + Compare OLD/NEW cards + 2331 : 228TH G 1252.98 10 0.68 6 (M1+E2) 0.013 7 + 2332 : 228THS G KC=0.011 6$ LC=0.0020 10 + 2331 : 228TH G 1252.98 10 0.68 6 (M1+E2) 0.0125 60 + 2332 : 228THS G KC=0.0100 49$LC=0.00188 82$MC=4.5E-4 20 + 2332 : 228THS G NC=1.21E-4 52$OC=2.9E-5 13$PC=5.5E-6 25$QC=5.0E-7 26$IPC=1.36E-5 56 + 2335 : 228TH G 1523.4 2 0.60 6 & + 2336 : 228THS G CC=0.00139$ KC=0.00139 + Compare OLD/NEW cards + 2341 : 228TH G 56.86 3 1.06 5 E1 0.533 K + 2342 : 228THS G LC=0.400$ MC=0.098$ NC+=0.0339 + 2341 : 228TH G 56.86 3 1.06 5 E1 0.524 K + 2342 : 228THS G LC=0.395 6$MC=0.0970 14 + 2342 : 228THS G NC=0.0254 4$OC=0.00565 8$PC=0.000946 14$QC=4.46E-5 7 + Compare OLD/NEW cards + 2343 : 228TH G 137.95 2 6.6 3 M1 7.89 + 2344 : 228THS G KC=6.30$ LC=1.20$ MC=0.289$ NC+=0.106 + 2343 : 228TH G 137.95 2 6.6 3 M1 7.44 + 2344 : 228THS G KC=5.94 9$LC=1.134 16$MC=0.273 4 + 2344 : 228THS G NC=0.0728 11$OC=0.01723 25$PC=0.00334 5$QC=0.000318 5 + Compare OLD/NEW cards + 2349 : 228TH G 156.34 2 1.36 7 E1 0.172 K + 2350 : 228THS G KC=0.134$ LC=0.0281$ MC=0.00676$ NC+=0.00240 + 2349 : 228TH G 156.34 2 1.36 7 E1 0.1694 K + 2350 : 228THS G KC=0.1327 19$LC=0.0278 4$MC=0.00671 10 + 2350 : 228THS G NC=0.001769 25$OC=0.000406 6$PC=7.37E-5 11$QC=4.85E-6 7 + Compare OLD/NEW cards + 2351 : 228TH G 420.03 8 0.68 5 [M1,E2] 0.21 15 + 2352 : 228THS G KC=0.16 13$ LC=0.037 17$ MC=0.009 4$ NC+=0.0034 14 + 2351 : 228TH G 420.03 8 0.68 5 [M1,E2] 0.20 14 + 2352 : 228THS G KC=0.15 12$LC=0.036 15$MC=0.0088 34 + 2352 : 228THS G NC=0.00234 89$OC=5.5E-4 22$PC=1.03E-4 45$QC=8.1E-6 60 + 2356 : 228TH G 649.12 7 0.97 9 & + 2357 : 228TH3 G FL=968.97$ FLAG=G + 2358 : 228TH G 1432 1 0.60 14 @ + 2359 : 228TH2 G FLAG=P + 2363 : 228TH G 1559.7 2 0.34 5 G + Compare OLD/NEW cards + 2367 : 228TH G 469.9 5 0.14 8 [E1] 0.0144 + 2368 : 228THS G KC=0.0116$ LC=0.00206$ MC=0.00049$ NC+=0.00018 + 2367 : 228TH G 469.9 5 0.14 8 [E1] 0.01430 + 2368 : 228THS G KC=0.01159 17$LC=0.00206 3$MC=0.000490 7 + 2368 : 228THS G NC=0.0001297 19$OC=3.04E-5 5$PC=5.75E-6 9$QC=4.79E-7 7 + Compare OLD/NEW cards + 2369 : 228TH G 515.20 11 0.62 9 [E1] 0.0120 ? + 2370 : 228THS G KC=0.0097$ LC=0.00170 + 2369 : 228TH G 515.20 11 0.62 9 [E1] 0.01189 ? + 2370 : 228THS G KC=0.00966 14$LC=0.001694 24$MC=0.000403 6 + 2370 : 228THS G NC=0.0001068 15$OC=2.50E-5 4$PC=4.75E-6 7$QC=4.02E-7 6 + 2372 : 228TH G 1310.26 0.07 3 G + Compare OLD/NEW cards + 2374 : 228TH G 1451.45 0.039 9 [E2] N + 2374 : 228TH G 1451.45 0.039 9 [E2] 0.00502 N + 2375 : 228THS G KC=0.00395 6$LC=0.000780 11$MC=0.000189 3 + 2375 : 228THS G NC=5.02E-5 7$OC=1.180E-5 17$PC=2.25E-6 4$QC=1.91E-7 3$IPC=4.51E-5 7 + Compare OLD/NEW cards + 2376 : 228TH G 1580.5 3 2.18 14(M1,E2) G + 2376 : 228TH G 1580.5 3 2.18 14(M1,E2) 0.0073 30 G + 2377 : 228THS G KC=0.0057 24$LC=0.00106 41$MC=2.53E-4 96 + 2377 : 228THS G NC=6.7E-5 26$OC=1.60E-5 61$PC=3.1E-6 12$QC=2.9E-7 13$IPC=1.34E-4 51 + Compare OLD/NEW cards + 2379 : 228TH G 1638.30 7 1.98 10(E2) + 2379 : 228TH G 1638.30 7 1.98 10(E2) 0.00410 + 2380 : 228THS G KC=0.00319 5$LC=0.000608 9$MC=0.0001463 21 + 2380 : 228THS G NC=3.89E-5 6$OC=9.16E-6 13$PC=1.755E-6 25$QC=1.533E-7 22 + 2380 : 228THS G IPC=0.0001039 15 + Compare OLD/NEW cards + 2385 : 228TH G 475.1 3 0.7 2 [M1,E2] 0.15 11 + 2386 : 228THS G KC=0.12 9$ LC=0.026 13$ MC=0.006 3$ NC+=0.0023 10 + 2385 : 228TH G 475.1 3 0.7 2 [M1,E2] 0.145 97 + 2386 : 228THS G KC=0.111 82$LC=0.025 12$MC=0.0061 26 + 2386 : 228THS G NC=0.00163 68$OC=3.8E-4 17$PC=7.2E-5 34$QC=5.8E-6 42 + Compare OLD/NEW cards + 2387 : 228TH G 520.17 8 0.92 10(M1) 0.201 A + 2388 : 228THS G KC=0.161$ LC=0.0301 + 2387 : 228TH G 520.17 8 0.92 10(M1) 0.189 A + 2388 : 228THS G KC=0.1515 22$LC=0.0282 4$MC=0.00675 10 + 2388 : 228THS G NC=0.00180 3$OC=0.000426 6$PC=8.27E-5 12$QC=7.86E-6 11 + 2389 : 228TH G 626.72 0.23 5 G + 2390 : 228TH3 G FLAG=N + Compare OLD/NEW cards + 2392 : 228TH G 674.16 2.82 LE[E1] G + 2393 : 228TH3 G FLAG=R + 2392 : 228TH G 674.16 2.82 LE[E1] 0.00707 G + 2394 : 228THS G KC=0.00577 8$LC=0.000985 14$MC=0.000233 4 + 2394 : 228THS G NC=6.19E-5 9$OC=1.454E-5 21$PC=2.78E-6 4$QC=2.44E-7 4 + Compare OLD/NEW cards + 2395 : 228TH G 674.75 2.82 LE[M1,E2] 0.06 4 G + 2396 : 228TH3 G FLAG=R + 2395 : 228TH G 674.75 2.82 LE[M1,E2] 0.058 37 G + 2397 : 228THS G KC=0.046 31$LC=0.0094 46$MC=0.0023 11 + 2397 : 228THS G NC=6.1E-4 29$OC=1.43E-4 69$PC=2.7E-5 14$QC=2.4E-6 16 + Compare OLD/NEW cards + 2398 : 228TH G 698.93 0.61 9 [D,E2] 0.05 4 G + 2399 : 228TH3 G FLAG=N + Compare OLD/NEW cards + 2401 : 228TH G 1247.07 5 8.2 4 (M1) 0.0201 G + 2402 : 228TH2 G FLAG=A + 2403 : 228THS G KC=0.0162 + 2401 : 228TH G 1247.07 5 8.2 4 (M1) 0.0187 G + 2403 : 228THS G KC=0.01505 21$LC=0.00274 4$MC=0.000654 10 + 2403 : 228THS G NC=0.0001743 25$OC=4.13E-5 6$PC=8.02E-6 12$QC=7.69E-7 11 + 2403 : 228THS G IPC=1.771E-5 25 + Compare OLD/NEW cards + 2406 : 228TH G 1315.2 2 0.20 5 [M1,E2] 0.012 6 + 2407 : 228THS G KC=0.009 5$ LC=0.0018 8 + 2406 : 228TH G 1315.2 2 0.20 5 [M1,E2] 0.0111 52 + 2407 : 228THS G KC=0.0089 42$LC=0.00167 71$MC=4.0E-4 17 + 2407 : 228THS G NC=1.07E-4 45$OC=2.5E-5 11$PC=4.9E-6 21$QC=4.5E-7 22$IPC=2.7E-5 11 + Compare OLD/NEW cards + 2411 : 228TH G 114.49 10 0.10 2 [M1,E2] 10 4 + 2412 : 228THS G KC=5.5 52$ LC=3.2 12$ MC=0.9 4$ NC+=0.32 14 + 2411 : 228TH G 114.49 10 0.10 2 [M1,E2] 9.4 32 + 2412 : 228THS G KC=5.1 49$LC=3.2 13$MC=0.84 38 + 2412 : 228THS G NC=0.22 10$OC=0.051 22$PC=0.0089 32$QC=3.0E-4 24 + Compare OLD/NEW cards + 2413 : 228TH G 419.39 0.24 3 [E1] 0.0182 N + 2414 : 228TH3 G FLAG=G + 2415 : 228THS G KC=0.0147$ LC=0.00264$ MC=0.00063$ NC+=0.000225 + 2413 : 228TH G 419.39 0.24 3 [E1] 0.0181 N + 2415 : 228THS G KC=0.01460 21$LC=0.00263 4$MC=0.000626 9 + 2415 : 228THS G NC=0.0001659 24$OC=3.88E-5 6$PC=7.31E-6 11$QC=5.98E-7 9 + Compare OLD/NEW cards + 2417 : 228TH G 492.22 10 0.28 3 [M1,E2] 0.14 10 + 2418 : 228THS G KC=0.11 8$ LC=0.024 12$ MC=0.006 3$ NC+=0.0021 10 + 2417 : 228TH G 492.22 10 0.28 3 [M1,E2] 0.132 88 + 2418 : 228THS G KC=0.102 74$LC=0.022 11$MC=0.0055 24 + 2418 : 228THS G NC=0.00147 62$OC=3.5E-4 15$PC=6.5E-5 31$QC=5.3E-6 38 + Compare OLD/NEW cards + 2419 : 228TH G 523.16 11 1.40 10[E1] 0.0116 + 2420 : 228TH2 G FL=1122.95 + 2421 : 228THS G KC=0.0094$ LC=0.00165 + 2419 : 228TH G 523.16 11 1.40 10[E1] 0.01153 + 2421 : 228THS G KC=0.00937 14$LC=0.001641 23$MC=0.000390 6 + 2421 : 228THS G NC=0.0001035 15$OC=2.42E-5 4$PC=4.60E-6 7$QC=3.90E-7 6 + Compare OLD/NEW cards + 2422 : 228TH G 554.6 3 0.48 11[M1,E2] 0.10 7 G + 2423 : 228THS G KC=0.08 6$ LC=0.017 9 + 2422 : 228TH G 554.6 3 0.48 11[M1,E2] 0.096 63 G + 2423 : 228THS G KC=0.075 53$LC=0.0161 77$MC=0.0039 18 + 2423 : 228THS G NC=0.00105 47$OC=2.5E-4 12$PC=4.7E-5 23$QC=3.9E-6 27 + Compare OLD/NEW cards + 2424 : 228TH G 623.7 2 0.36 6 [M1,E2] 0.08 5 & + 2425 : 228TH2 G FLAG=GQ + 2426 : 228THS G KC=0.06 4$ LC=0.012 6 + 2424 : 228TH G 623.7 2 0.36 6 [M1,E2] 0.071 46 & + 2426 : 228THS G KC=0.056 38$LC=0.0116 57$MC=0.0028 13 + 2426 : 228THS G NC=7.6E-4 35$OC=1.78E-4 84$PC=3.4E-5 17$QC=2.9E-6 20 + Compare OLD/NEW cards + 2427 : 228TH G 629.4 2 0.37 6 [D,E2] 0.06 6 + Compare OLD/NEW cards + 2428 : 228TH G 666.47 4 0.66 7 [M1,E2] 0.06 4 @ + 2429 : 228TH2 G FLAG=M + 2430 : 228THS G KC=0.05 3$ LC=0.010 5 + 2428 : 228TH G 666.47 4 0.66 7 [M1,E2] 0.060 38 @ + 2430 : 228THS G KC=0.047 32$LC=0.0097 48$MC=0.0024 11 + 2430 : 228THS G NC=6.3E-4 30$OC=1.48E-4 71$PC=2.8E-5 15$QC=2.4E-6 16 + Compare OLD/NEW cards + 2434 : 228TH G 676.9 2 0.89 15[M1,E2] 0.06 4 G + 2435 : 228THS G KC=0.05 3$ LC=0.010 5 + 2434 : 228TH G 676.9 2 0.89 15[M1,E2] 0.058 36 G + 2435 : 228THS G KC=0.045 30$LC=0.0093 46$MC=0.0023 11 + 2435 : 228THS G NC=6.0E-4 29$OC=1.42E-4 68$PC=2.7E-5 14$QC=2.3E-6 16 + 2438 : 228TH G 1249.7 2 0.73 10 G + Compare OLD/NEW cards + 2439 : 228TH G 1459.2 2 8.6 5 E2 G + 2440 : 228TH2 G FLAG=I + 2439 : 228TH G 1459.2 2 8.6 5 E2 0.00498 G + 2441 : 228THS G KC=0.00391 6$LC=0.000771 11$MC=0.000186 3 + 2441 : 228THS G NC=4.97E-5 7$OC=1.167E-5 17$PC=2.23E-6 4$QC=1.89E-7 3$IPC=4.71E-5 7 + Compare OLD/NEW cards + 2443 : 228TH G 1588.15 5 37.2 19E2 + 2443 : 228TH G 1588.15 5 37.2 19E2 0.00431 + 2444 : 228THS G KC=0.00337 5$LC=0.000647 9$MC=0.0001561 22 + 2444 : 228THS G NC=4.15E-5 6$OC=9.77E-6 14$PC=1.87E-6 3$QC=1.622E-7 23$IPC=8.62E-5 12 + Compare OLD/NEW cards + 2450 : 228TH G 660.28 0.02 AP[M1,E2] 0.06 4 N + 2451 : 228THS G KC=0.05 3$ LC=0.010 5 + 2450 : 228TH G 660.28 0.02 AP[M1,E2] 0.061 39 N + 2451 : 228THS G KC=0.048 33$LC=0.0100 49$MC=0.0024 12 + 2451 : 228THS G NC=6.5E-4 30$OC=1.52E-4 73$PC=2.9E-5 15$QC=2.5E-6 17 + Compare OLD/NEW cards + 2453 : 228TH G 1496.15 6 2.74 14(E2) + 2453 : 228TH G 1496.15 6 2.74 14(E2) 0.00477 + 2454 : 228THS G KC=0.00374 6$LC=0.000732 11$MC=0.0001769 25 + 2454 : 228THS G NC=4.71E-5 7$OC=1.107E-5 16$PC=2.11E-6 3$QC=1.81E-7 3$IPC=5.73E-5 8 + 2456 : 228TH G 1625.0 2 0.70 14 + Compare OLD/NEW cards + 2460 : 228TH G 457.38 6 0.30 3 [M1,E2] 0.17 12 + 2461 : 228THS G KC=0.13 10$ LC=0.029 14$ MC=0.007 3$ NC+=0.0026 11 + 2460 : 228TH G 457.38 6 0.30 3 [M1,E2] 0.16 11 + 2461 : 228THS G KC=0.123 91$LC=0.028 13$MC=0.0068 28 + 2461 : 228THS G NC=0.00182 74$OC=4.3E-4 18$PC=8.1E-5 37$QC=6.5E-6 47 + Compare OLD/NEW cards + 2462 : 228TH G 623.7 2 0.36 6 [M1,E2] 0.07 5 & + 2463 : 228TH2 G FLAG=GQ + 2464 : 228THS G KC=0.06 4$ LC=0.012 7 + 2462 : 228TH G 623.7 2 0.36 6 [M1,E2] 0.071 46 & + 2464 : 228THS G KC=0.056 38$LC=0.0116 57$MC=0.0028 13 + 2464 : 228THS G NC=7.6E-4 35$OC=1.78E-4 84$PC=3.4E-5 17$QC=2.9E-6 20 + Compare OLD/NEW cards + 2465 : 228TH G 1164.58 7 1.32 7 (M1+E2) 0.016 9 + 2466 : 228THS G KC=0.013 7$ LC=0.0024 12 + 2465 : 228TH G 1164.58 7 1.32 7 (M1+E2) 0.0149 75 + 2466 : 228THS G KC=0.0119 61$LC=0.0023 11$MC=5.5E-4 24 + 2466 : 228THS G NC=1.45E-4 64$OC=3.4E-5 16$PC=6.6E-6 30$QC=6.0E-7 32$IPC=2.19E-6 94 + Compare OLD/NEW cards + 2469 : 228TH G 1287.79 8 1.56 11(M1+E2) 0.012 7 G + 2470 : 228THS G KC=0.010 5$ LC=0.0019 9 + 2469 : 228TH G 1287.79 8 1.56 11(M1+E2) 0.0117 55 G + 2470 : 228THS G KC=0.0094 45$LC=0.00176 76$MC=4.2E-4 18 + 2470 : 228THS G NC=1.13E-4 48$OC=2.7E-5 12$PC=5.1E-6 23$QC=4.7E-7 24$IPC=2.03E-5 83 + Compare OLD/NEW cards + 2477 : 228TH G 42.44 0.016 6 [M1] 49 N + 2478 : 228THS G LC=37.1$ MC=8.95 + 2477 : 228TH G 42.44 0.016 6 [M1] 46.4 N + 2478 : 228THS G LC=35.0 5$MC=8.44 12 + 2478 : 228THS G NC=2.25 4$OC=0.533 8$PC=0.1035 15$QC=0.00988 14 + 2480 : 228TH G 671.99 0.045 14 N + Compare OLD/NEW cards + 2482 : 228TH G 813.94 0.012 3 [M1,E2] 0.038 23 N + 2483 : 228THS G KC=0.030 19$ LC=0.006 3 + 2482 : 228TH G 813.94 0.012 3 [M1,E2] 0.036 22 N + 2483 : 228THS G KC=0.029 18$LC=0.0057 28$MC=0.00138 65 + 2483 : 228THS G NC=3.7E-4 18$OC=8.7E-5 42$PC=1.67E-5 83$QC=1.47E-6 91 + 2485 : 228TH G 1501.5 2 0.74 6 G + Compare OLD/NEW cards + 2486 : 228TH G 1630.63 6 2.65 13(M1,E2) A + 2486 : 228TH G 1630.63 6 2.65 13(M1,E2) 0.0068 27 A + 2487 : 228THS G KC=0.0053 22$LC=9.8E-4 37$MC=2.34E-4 87 + 2487 : 228THS G NC=6.2E-5 24$OC=1.48E-5 56$PC=2.9E-6 11$QC=2.7E-7 12$IPC=1.61E-4 60 + Compare OLD/NEW cards + 2490 : 228TH G 497.72 0.1 LE[M2] N ? + 2490 : 228TH G 497.72 0.1 LE[M2] 0.581 N ? + 2491 : 228THS G KC=0.437 7$LC=0.1073 15$MC=0.0268 4 + 2491 : 228THS G NC=0.00721 10$OC=0.001703 24$PC=0.000327 5$QC=2.94E-5 5 + Compare OLD/NEW cards + 2491 : 228TH G 548.74 11 0.41 5 [M1,E2] 0.10 7 & ? + 2492 : 228THS G KC=0.08 6$ LC=0.017 9 + 2491 : 228TH G 548.74 11 0.41 5 [M1,E2] 0.099 65 & ? + 2492 : 228THS G KC=0.077 55$LC=0.0166 79$MC=0.0040 18 + 2492 : 228THS G NC=0.00108 48$OC=2.5E-4 12$PC=4.8E-5 24$QC=4.0E-6 28 + Compare OLD/NEW cards + 2494 : 228TH G 570.88 4 3.33 17(M1) 0.156 G + 2495 : 228TH3 G FLAG=A + 2496 : 228THS G KC=0.125$ LC=0.0234 + 2494 : 228TH G 570.88 4 3.33 17(M1) 0.1472 G + 2496 : 228THS G KC=0.1182 17$LC=0.0219 3$MC=0.00525 8 + 2496 : 228THS G NC=0.001401 20$OC=0.000332 5$PC=6.44E-5 9$QC=6.12E-6 9 + Compare OLD/NEW cards + 2497 : 228TH G 701.72 4 3.76 21(M1) 0.091 + 2498 : 228THS G KC=0.0726$ LC=0.0135 + 2497 : 228TH G 701.72 4 3.76 21(M1) 0.0850 + 2498 : 228THS G KC=0.0684 10$LC=0.01261 18$MC=0.00302 5 + 2498 : 228THS G NC=0.000805 12$OC=0.000191 3$PC=3.70E-5 6$QC=3.52E-6 5 + Compare OLD/NEW cards + 2501 : 228TH G 755.32 2 19.6 10M1 0.0747 + 2502 : 228THS G KC=0.0599$ LC=0.0111 + 2501 : 228TH G 755.32 2 19.6 10M1 0.0700 + 2502 : 228THS G KC=0.0563 8$LC=0.01036 15$MC=0.00248 4 + 2502 : 228THS G NC=0.000661 10$OC=0.0001566 22$PC=3.04E-5 5$QC=2.90E-6 4 + Compare OLD/NEW cards + 2505 : 228TH G 1537.8 2 0.73 10[E2] + 2505 : 228TH G 1537.8 2 0.73 10[E2] 0.00455 + 2506 : 228THS G KC=0.00356 5$LC=0.000692 10$MC=0.0001670 24 + 2506 : 228THS G NC=4.44E-5 7$OC=1.045E-5 15$PC=2.00E-6 3$QC=1.720E-7 24 + 2506 : 228THS G IPC=6.98E-5 10 + Compare OLD/NEW cards + 2507 : 228TH G 1666.53 6 3.35 17M1 + 2507 : 228TH G 1666.53 6 3.35 17M1 0.00895 + 2508 : 228THS G KC=0.00702 10$LC=0.001269 18$MC=0.000303 5 + 2508 : 228THS G NC=8.08E-5 12$OC=1.91E-5 3$PC=3.72E-6 6$QC=3.58E-7 5$IPC=0.000247 4 + 2510 : 228TH G 1724.0 2 0.50 5 + Compare OLD/NEW cards + 2514 : 228TH G 399.94 7 0.35 4 [E1] 0.0212 ? + 2515 : 228THS G KC=0.0162$ LC=0.00293$ MC=0.00070$ NC+=0.00025 + 2514 : 228TH G 399.94 7 0.35 4 [E1] 0.0199 ? + 2515 : 228THS G KC=0.01610 23$LC=0.00291 4$MC=0.000695 10 + 2515 : 228THS G NC=0.000184 3$OC=4.30E-5 6$PC=8.10E-6 12$QC=6.57E-7 10 + Compare OLD/NEW cards + 2517 : 228TH G 590.65 11 0.41 5 [E2] 0.0295 + 2518 : 228THS G KC=0.0200$ LC=0.00716 + 2517 : 228TH G 590.65 11 0.41 5 [E2] 0.0292 + 2518 : 228THS G KC=0.0197 3$LC=0.00702 10$MC=0.00180 3 + 2518 : 228THS G NC=0.000481 7$OC=0.0001106 16$PC=2.00E-5 3$QC=1.055E-6 15 + Compare OLD/NEW cards + 2521 : 228TH G 684.0 3 0.46 10[E1] + 2522 : 228THS G CC=0.00691$ KC=0.00563$ LC=0.00096 + 2521 : 228TH G 684.0 3 0.46 10[E1] 0.00688 + 2522 : 228THS G KC=0.00562 8$LC=0.000957 14$MC=0.000227 4 + 2522 : 228THS G NC=6.02E-5 9$OC=1.413E-5 20$PC=2.70E-6 4$QC=2.38E-7 4 + 2523 : 228TH G 1347.84 0.1 LE N ? + 2524 : 228TH G 1365.72 12 0.40 4 + Compare OLD/NEW cards + 2525 : 228TH G 1415.42 10 0.97 6 [E3] ? + 2525 : 228TH G 1415.42 10 0.97 6 [E3] 0.01141 ? + 2526 : 228THS G KC=0.00849 12$LC=0.00218 3$MC=0.000543 8 + 2526 : 228THS G NC=0.0001451 21$OC=3.39E-5 5$PC=6.37E-6 9$QC=4.72E-7 7 + 2526 : 228THS G IPC=1.601E-5 23 + Compare OLD/NEW cards + 2526 : 228TH G 1557.06 6 4.42 22(E2+M1) +1.2 2 + 2526 : 228TH G 1557.06 6 4.42 22(E2+M1) +1.2 2 0.0070 6 + 2527 : 228THS G KC=0.0055 5$LC=0.00102 8$MC=0.000245 19 + 2527 : 228THS G NC=6.5E-5 5$OC=1.54E-5 12$PC=2.98E-6 23$QC=2.75E-7 24$IPC=0.000114 9 + Compare OLD/NEW cards + 2529 : 228TH G 1686.15 7 2.39 12(E2) + 2529 : 228TH G 1686.15 7 2.39 12(E2) 0.00391 + 2530 : 228THS G KC=0.00303 5$LC=0.000573 8$MC=0.0001378 20 + 2530 : 228THS G NC=3.67E-5 6$OC=8.64E-6 12$PC=1.655E-6 24$QC=1.455E-7 21 + 2530 : 228THS G IPC=0.0001217 17 + Compare OLD/NEW cards + 2536 : 228TH G 415.91 8 0.49 5 [E1] 0.0185 ? + 2537 : 228THS G KC=0.0150$ LC=0.00269$ MC=0.00064$ NC+=0.00023 + 2536 : 228TH G 415.91 8 0.49 5 [E1] 0.0184 ? + 2537 : 228THS G KC=0.01485 21$LC=0.00267 4$MC=0.000638 9 + 2537 : 228THS G NC=0.0001690 24$OC=3.95E-5 6$PC=7.44E-6 11$QC=6.08E-7 9 + Compare OLD/NEW cards + 2539 : 228TH G 584.7 3 0.22 7 [M1,E2] 0.10 7 & ? + 2540 : 228TH3 G FLAG=G + 2541 : 228THS G KC=0.08 6$ LC=0.017 9 + 2539 : 228TH G 584.7 3 0.22 7 [M1,E2] 0.084 55 & ? + 2541 : 228THS G KC=0.066 46$LC=0.0139 67$MC=0.0034 16 + 2541 : 228THS G NC=9.0E-4 41$OC=2.12E-4 99$PC=4.0E-5 20$QC=3.4E-6 24 + Compare OLD/NEW cards + 2543 : 228TH G 737.8 2 0.74 13[M1,E2] 0.05 3 G + 2544 : 228THS G KC=0.04 3$ LC=0.008 4 + 2543 : 228TH G 737.8 2 0.74 13[M1,E2] 0.046 29 G + 2544 : 228THS G KC=0.037 24$LC=0.0074 37$MC=0.00180 85 + 2544 : 228THS G NC=4.8E-4 23$OC=1.13E-4 54$PC=2.2E-5 11$QC=1.9E-6 12 + Compare OLD/NEW cards + 2545 : 228TH G 791.43 9 0.24 9 [M1,E2] 0.04 3 @ + 2546 : 228TH3 G FLAG=M + 2547 : 228THS G KC=0.032 21$ LC=0.007 4 + 2545 : 228TH G 791.43 9 0.24 9 [M1,E2] 0.039 23 @ + 2547 : 228THS G KC=0.031 19$LC=0.0061 30$MC=0.00149 71 + 2547 : 228THS G NC=4.0E-4 19$OC=9.3E-5 45$PC=1.79E-5 90$QC=1.58E-6 99 + Compare OLD/NEW cards + 2548 : 228TH G 1573.3 3 0.70 7 (E2) + 2548 : 228TH G 1573.3 3 0.70 7 (E2) 0.00438 + 2549 : 228THS G KC=0.00342 5$LC=0.000660 10$MC=0.0001592 23 + 2549 : 228THS G NC=4.24E-5 6$OC=9.97E-6 14$PC=1.91E-6 3$QC=1.650E-7 24$IPC=8.12E-5 12 + 2551 : 228TH G 1702.6 3 1.15 11 G + Compare OLD/NEW cards + 2555 : 228TH G 116.26 5 0.16 2 [M1,E2] 9 4 + 2556 : 228THS G KC=5 5$ LC=3.1 11$ MC=0.8 4$ NC+=0.30 13 + 2555 : 228TH G 116.26 5 0.16 2 [M1,E2] 9.0 32 + 2556 : 228THS G KC=4.9 47$LC=3.0 12$MC=0.79 34 + 2556 : 228THS G NC=0.210 92$OC=0.048 20$PC=0.0083 29$QC=2.9E-4 23 + Compare OLD/NEW cards + 2557 : 228TH G 121.18 7 0.19 3 [E1] 0.316 + 2558 : 228TH2 G FL=1683.8 + 2559 : 228THS G KC=0.244$ LC=0.0542$ MC=0.0131$ NC+=0.00465 + 2557 : 228TH G 121.18 7 0.19 3 [E1] 0.311 + 2559 : 228THS G KC=0.240 4$LC=0.0536 8$MC=0.01299 19 + 2559 : 228THS G NC=0.00342 5$OC=0.000781 11$PC=0.0001395 20$QC=8.54E-6 12 + Compare OLD/NEW cards + 2560 : 228TH G 121.87 3 0.33 3 [M1,E2] 8 4 + 2561 : 228THS G KC=5 5$ LC=2.5 9$ MC=0.7 3$ NC+=0.25 10 + 2560 : 228TH G 121.87 3 0.33 3 [M1,E2] 7.7 29 + 2561 : 228THS G KC=4.3 41$LC=2.46 85$MC=0.65 26 + 2561 : 228THS G NC=0.173 70$OC=0.039 15$PC=0.0069 22$QC=2.5E-4 21 + Compare OLD/NEW cards + 2562 : 228TH G 158.74 3 1.25 7 M1+E2 0.55 15 4.4 4 + 2563 : 228THS G KC=3.3 4$ LC=0.85 2$ MC=0.213 9$ NC+=0.079 4 + 2562 : 228TH G 158.74 3 1.25 7 M1+E2 0.55 15 4.2 4 + 2563 : 228THS G KC=3.1 4$LC=0.82 3$MC=0.204 10 + 2563 : 228THS G NC=0.054 3$OC=0.0127 5$PC=0.00236 6$QC=0.000168 19 + Compare OLD/NEW cards + 2565 : 228TH G 354.2 2 0.29 5 [E1] 0.0260 & + 2566 : 228THS G KC=0.0209$ LC=0.00384$ MC=0.00092$ NC+=0.00033 + 2565 : 228TH G 354.2 2 0.29 5 [E1] 0.0258 & + 2566 : 228THS G KC=0.0208 3$LC=0.00382 6$MC=0.000913 13 + 2566 : 228THS G NC=0.000242 4$OC=5.64E-5 8$PC=1.058E-5 15$QC=8.39E-7 12 + Compare OLD/NEW cards + 2567 : 228TH G 372.60 3 1.57 8 [M1,E2] 0.29 20 + 2568 : 228THS G KC=0.22 18$ LC=0.053 21$ MC=0.013 5$ NC+=0.0048 7 + 2567 : 228TH G 372.60 3 1.57 8 [M1,E2] 0.28 19 + 2568 : 228THS G KC=0.21 17$LC=0.051 20$MC=0.0126 43 + 2568 : 228THS G NC=0.0034 12$OC=7.8E-4 28$PC=1.47E-4 59$QC=1.11E-5 84 + Compare OLD/NEW cards + 2569 : 228TH G 651.5 2 0.34 5 [E2] 0.0238 I + 2570 : 228THS G KC=0.0166$ LC=0.00540 + 2569 : 228TH G 651.5 2 0.34 5 [E2] 0.0236 I + 2570 : 228THS G KC=0.01647 23$LC=0.00530 8$MC=0.001347 19 + 2570 : 228THS G NC=0.000360 5$OC=8.30E-5 12$PC=1.514E-5 22$QC=8.68E-7 13 + Compare OLD/NEW cards + 2571 : 228TH G 1426.5 2 0.48 6 [E2] + 2571 : 228TH G 1426.5 2 0.48 6 [E2] 0.00518 + 2572 : 228THS G KC=0.00407 6$LC=0.000808 12$MC=0.000196 3 + 2572 : 228THS G NC=5.21E-5 8$OC=1.224E-5 18$PC=2.33E-6 4$QC=1.97E-7 3$IPC=3.87E-5 6 + Compare OLD/NEW cards + 2572 : 228TH G 1618.0 1 0.90 6 (M1,E2) G + 2572 : 228TH G 1618.0 1 0.90 6 (M1,E2) 0.0069 28 G + 2573 : 228THS G KC=0.0054 22$LC=1.00E-3 38$MC=2.39E-4 89 + 2573 : 228THS G NC=6.4E-5 24$OC=1.51E-5 57$PC=2.9E-6 12$QC=2.7E-7 12$IPC=1.54E-4 58 + Compare OLD/NEW cards + 2579 : 228TH G 367.04 2 2.45 12M1 0.512 + 2580 : 228THS G KC=0.411$ LC=0.0773$ MC=0.0185$ NC+=0.00674 + 2579 : 228TH G 367.04 2 2.45 12M1 0.484 + 2580 : 228THS G KC=0.388 6$LC=0.0728 11$MC=0.01747 25 + 2580 : 228THS G NC=0.00466 7$OC=0.001103 16$PC=0.000214 3$QC=2.03E-5 3 + Compare OLD/NEW cards + 2583 : 228TH G 1298.3 2 0.45 4 (M1+E2) 0.012 6 + 2583 : 228TH G 1298.3 2 0.45 4 (M1+E2) 0.0115 54 + 2584 : 228THS G KC=0.0092 44$LC=0.00172 74$MC=4.1E-4 18 + 2584 : 228THS G NC=1.10E-4 47$OC=2.6E-5 11$PC=5.0E-6 22$QC=4.6E-7 23$IPC=2.26E-5 92 + Compare OLD/NEW cards + 2587 : 228TH G 1421.1 2 1.40 7 E2+M1 +2.0 5 + 2587 : 228TH G 1421.1 2 1.40 7 E2+M1 +2.0 5 0.0068 9 + 2588 : 228THS G KC=0.0054 8$LC=0.00104 13$MC=0.00025 3 + 2588 : 228THS G NC=6.7E-5 8$OC=1.57E-5 19$PC=3.0E-6 4$QC=2.7E-7 4$IPC=4.7E-5 6 + 2592 : 228TH G 477.1 3 0.7 2 G ? + Compare OLD/NEW cards + 2594 : 228TH G 666.47 4 1.81 15[E1] @ + 2595 : 228TH2 G FLAG=M + 2594 : 228TH G 666.47 4 1.81 15[E1] 0.00722 @ + 2596 : 228THS G KC=0.00590 9$LC=0.001007 14$MC=0.000239 4 + 2596 : 228THS G NC=6.33E-5 9$OC=1.487E-5 21$PC=2.84E-6 4$QC=2.50E-7 4 + Compare OLD/NEW cards + 2599 : 228TH G 692.47 7 2.01 15(M1+E2+E0) 0.24 3 + 2599 : 228TH G 692.47 7 2.01 15(M1+E2+E0) 0.054 34 + 2600 : 228THS G KC=0.043 28$LC=0.0088 43$MC=0.0021 10 + 2600 : 228THS G NC=5.7E-4 27$OC=1.34E-4 64$PC=2.6E-5 13$QC=2.2E-6 15 + Compare OLD/NEW cards + 2603 : 228TH G 724.42 11 0.76 9 [E1] & + 2603 : 228TH G 724.42 11 0.76 9 [E1] 0.00618 & + 2604 : 228THS G KC=0.00505 7$LC=0.000856 12$MC=0.000203 3 + 2604 : 228THS G NC=5.38E-5 8$OC=1.264E-5 18$PC=2.42E-6 4$QC=2.15E-7 3 + Compare OLD/NEW cards + 2604 : 228TH G 739.2 2 0.57 9 [M1,E2] 0.0790 I + 2604 : 228TH G 739.2 2 0.57 9 [M1,E2] 0.046 28 I + 2605 : 228THS G KC=0.036 24$LC=0.0074 37$MC=0.00179 85 + 2605 : 228THS G NC=4.8E-4 23$OC=1.12E-4 54$PC=2.1E-5 11$QC=1.9E-6 12 + Compare OLD/NEW cards + 2607 : 228TH G 770.2 2 2.28 15[E1] G + 2607 : 228TH G 770.2 2 2.28 15[E1] 0.00552 G + 2608 : 228THS G KC=0.00452 7$LC=0.000761 11$MC=0.000180 3 + 2608 : 228THS G NC=4.78E-5 7$OC=1.124E-5 16$PC=2.15E-6 3$QC=1.93E-7 3 + Compare OLD/NEW cards + 2608 : 228TH G 870.45 2 15.9 8 M1 0.0515 + 2609 : 228THS G KC=0.0414$ LC=0.00762 + 2608 : 228TH G 870.45 2 15.9 8 M1 0.0481 + 2609 : 228THS G KC=0.0387 6$LC=0.00710 10$MC=0.001699 24 + 2609 : 228THS G NC=0.000453 7$OC=0.0001073 15$PC=2.08E-5 3$QC=1.99E-6 3 + Compare OLD/NEW cards + 2613 : 228TH G 924.3 2 2.7 2 [M1,E2] 0.028 17 G + 2614 : 228THS G KC=0.022 14$ LC=0.0043 22 + 2613 : 228TH G 924.3 2 2.7 2 [M1,E2] 0.026 15 G + 2614 : 228THS G KC=0.021 13$LC=0.0041 20$MC=9.9E-4 46 + 2614 : 228THS G NC=2.6E-4 13$OC=6.2E-5 30$PC=1.20E-5 58$QC=1.07E-6 63 + Compare OLD/NEW cards + 2617 : 228TH G 1706.16 7 2.84 14M1+E2 +0.42 4 + 2617 : 228TH G 1706.16 7 2.84 14M1+E2 +0.42 4 0.0077616 + 2618 : 228THS G KC=0.00605 13$LC=0.001097 22$MC=0.000262 6 + 2618 : 228THS G NC=6.99E-5 14$OC=1.65E-5 4$PC=3.21E-6 7$QC=3.07E-7 7$IPC=0.000256 6 + Compare OLD/NEW cards + 2620 : 228TH G 1835.26 5 9.8 5 E2+M1 +2.9 3 + 2620 : 228TH G 1835.26 5 9.8 5 E2+M1 +2.9 3 0.0038210 + 2621 : 228THS G KC=0.00291 8$LC=0.000536 14$MC=0.000128 4 + 2621 : 228THS G NC=3.42E-5 9$OC=8.06E-6 21$PC=1.55E-6 4$QC=1.41E-7 4$IPC=0.000202 6 + Compare OLD/NEW cards + 2626 : 228TH G 877.35 7 0.97 8 [M1,E2] 0.032 19 + 2627 : 228THS G KC=0.025 16$ LC=0.005 3 + 2626 : 228TH G 877.35 7 0.97 8 [M1,E2] 0.030 18 + 2627 : 228THS G KC=0.024 15$LC=0.0047 23$MC=0.00113 53 + 2627 : 228THS G NC=3.0E-4 15$OC=7.1E-5 34$PC=1.37E-5 68$QC=1.22E-6 73 + 2628 : 228TH G 883.6 3 0.15 4 G + Compare OLD/NEW cards + 2629 : 228TH G 920.8 3 0.38 10[M1,E2] 0.028 17 G + 2630 : 228THS G KC=0.022 14$ LC=0.0044 22 + 2629 : 228TH G 920.8 3 0.38 10[M1,E2] 0.027 15 G + 2630 : 228THS G KC=0.021 13$LC=0.0041 20$MC=1.00E-3 47 + 2630 : 228THS G NC=2.7E-4 13$OC=6.3E-5 30$PC=1.21E-5 59$QC=1.08E-6 64 + Compare OLD/NEW cards + 2632 : 228TH G 931.02 7 0.99 8 [M1,E2] 0.027 17 + 2632 : 228TH G 931.02 7 0.99 8 [M1,E2] 0.026 15 + 2633 : 228THS G KC=0.021 12$LC=0.0040 20$MC=9.7E-4 45 + 2633 : 228THS G NC=2.6E-4 12$OC=6.1E-5 29$PC=1.17E-5 57$QC=1.05E-6 62 + Compare OLD/NEW cards + 2633 : 228TH G 1503.7 2 0.72 6 [E1] G + 2633 : 228TH G 1503.7 2 0.72 6 [E1] 0.00188 G + 2634 : 228THS G KC=0.001418 20$LC=0.000229 4$MC=5.38E-5 8 + 2634 : 228THS G NC=1.428E-5 20$OC=3.37E-6 5$PC=6.53E-7 10$QC=6.21E-8 9 + 2634 : 228THS G IPC=0.0001584 23 + 2637 : 228TH G 1713.16 0.1 LE ? + Compare OLD/NEW cards + 2638 : 228TH G 1842.15 8 2.29 12M1+E2 -0.86 14 + 2638 : 228TH G 1842.15 8 2.29 12M1+E2 -0.86 14 0.0055 4 + 2639 : 228THS G KC=0.00420 25$LC=0.00076 5$MC=0.000182 11 + 2639 : 228THS G NC=4.9E-5 3$OC=1.15E-5 7$PC=2.23E-6 13$QC=2.10E-7 13$IPC=0.000301 18 + 2641 : 228TH G 1900.3 3 0.34 5 + 2645 : 228TH G 1383.2 2 0.55 5 + 2646 : 228TH G 1505.9 2 0.55 5 G + 2647 : 228TH G 1523.4 2 0.60 6 & + 2648 : 228TH G 1715.06 10 0.50 3 + Compare OLD/NEW cards + 2653 : 228TH G 724.42 11 0.76 9 [M1,E2] 0.05 4 & + 2654 : 228THS G KC=0.04 3$ LC=0.008 5 + 2653 : 228TH G 724.42 11 0.76 9 [M1,E2] 0.049 30 & + 2654 : 228THS G KC=0.038 25$LC=0.0078 39$MC=0.00189 89 + 2654 : 228THS G NC=5.0E-4 24$OC=1.18E-4 57$PC=2.3E-5 12$QC=2.0E-6 13 + Compare OLD/NEW cards + 2655 : 228TH G 750.10 10 0.67 8 [M1,E2] 0.05 3 ? + 2655 : 228TH G 750.10 10 0.67 8 [M1,E2] 0.044 27 ? + 2656 : 228THS G KC=0.035 23$LC=0.0071 35$MC=0.00172 81 + 2656 : 228THS G NC=4.6E-4 22$OC=1.08E-4 52$PC=2.1E-5 11$QC=1.8E-6 12 + 2657 : 228TH G 865.15 13 0.50 7 + 2658 : 228TH G 956.8 2 2.5 5 G + Compare OLD/NEW cards + 2659 : 228TH G 1529.02 6 2.61 13[E1] + 2659 : 228TH G 1529.02 6 2.61 13[E1] 0.00185 + 2660 : 228THS G KC=0.001380 20$LC=0.000222 4$MC=5.23E-5 8 + 2660 : 228THS G NC=1.388E-5 20$OC=3.28E-6 5$PC=6.35E-7 9$QC=6.04E-8 9 + 2660 : 228THS G IPC=0.0001749 25 + Compare OLD/NEW cards + 2662 : 228TH G 1738.48 5 9.6 5 M1+E2 + 2662 : 228TH G 1738.48 5 9.6 5 M1+E2 0.0059 22 + 2663 : 228THS G KC=0.0046 17$LC=8.4E-4 30$MC=2.00E-4 71 + 2663 : 228THS G NC=5.3E-5 19$OC=1.26E-5 45$PC=2.44E-6 89$QC=2.29E-7 92$IPC=2.23E-4 81 + Compare OLD/NEW cards + 2669 : 228TH G 168.42 9 0.09 2 [M1,E2] 2.9 16 + 2670 : 228THS G KC=1.9 17$ LC=0.73 6$ MC=0.19 3$ NC+=0.070 10 + 2669 : 228TH G 168.42 9 0.09 2 [M1,E2] 2.7 15 + 2670 : 228THS G KC=1.8 16$LC=0.71 7$MC=0.18 3 + 2670 : 228THS G NC=0.049 8$OC=0.0112 15$PC=0.00201 12$QC=9.9E-5 80 + Compare OLD/NEW cards + 2671 : 228TH G 389.36 0.31 5 [M1,E2] 0.26 18 N ? + 2671 : 228TH G 389.36 0.31 5 [M1,E2] 0.25 17 N ? + 2672 : 228THS G KC=0.19 15$LC=0.044 18$MC=0.0110 39 + 2672 : 228THS G NC=0.0029 11$OC=6.9E-4 26$PC=1.29E-4 53$QC=9.9E-6 74 + Compare OLD/NEW cards + 2675 : 228TH G 584.7 3 0.22 7 [E1] & ? + 2677 : 228TH3 G FLAG=G + 2675 : 228TH G 584.7 3 0.22 7 [E1] 0.00928 & ? + 2678 : 228THS G KC=0.00755 11$LC=0.001307 19$MC=0.000310 5 + 2678 : 228THS G NC=8.23E-5 12$OC=1.93E-5 3$PC=3.67E-6 6$QC=3.17E-7 5 + 2678 : 228TH G 1741.6 2 0.42 8 G + Compare OLD/NEW cards + 2679 : 228TH G 1870.80 9 0.73 4 (M1+E2) + 2679 : 228TH G 1870.80 9 0.73 4 (M1+E2) 0.0051 18 + 2680 : 228THS G KC=0.0038 14$LC=7.0E-4 24$MC=1.67E-4 56 + 2680 : 228THS G NC=4.4E-5 15$OC=1.05E-5 36$PC=2.04E-6 70$QC=1.92E-7 72$IPC=3.0E-4 11 + Compare OLD/NEW cards + 2686 : 228TH G 184.61 5 0.41 5 (M1) 3.45 @ + 2687 : 228TH3 G FLAG=M + 2688 : 228THS G KC=2.76$ LC=0.525$ MC=0.125$ NC+=0.0461 + 2686 : 228TH G 184.61 5 0.41 5 (M1) 3.26 @ + 2688 : 228THS G KC=2.61 4$LC=0.495 7$MC=0.1189 17 + 2688 : 228THS G NC=0.0317 5$OC=0.00751 11$PC=0.001457 21$QC=0.0001383 20 + Compare OLD/NEW cards + 2690 : 228TH G 220.61 2 1.24 6 (M1) 2.10 + 2691 : 228THS G KC=1.68$ LC=0.317$ MC=0.0763$ NC+=0.0278 + 2690 : 228TH G 220.61 2 1.24 6 (M1) 1.98 + 2691 : 228THS G KC=1.581 23$LC=0.299 5$MC=0.0719 10 + 2691 : 228THS G NC=0.0192 3$OC=0.00454 7$PC=0.000881 13$QC=8.36E-5 12 + Compare OLD/NEW cards + 2693 : 228TH G 299.10 10 0.43 5 M1 0.90 + 2694 : 228THS G KC=0.719$ LC=0.135$ MC=0.0326$ NC+=0.0118 + 2693 : 228TH G 299.10 10 0.43 5 M1 0.849 + 2694 : 228THS G KC=0.680 10$LC=0.1280 18$MC=0.0307 5 + 2694 : 228THS G NC=0.00819 12$OC=0.00194 3$PC=0.000377 6$QC=3.57E-5 5 + Compare OLD/NEW cards + 2696 : 228TH G 306.61 2 2.00 10M1 0.84 + 2697 : 228THS G KC=0.672$ LC=0.126$ MC=0.0304$ NC+=0.0111 + 2696 : 228TH G 306.61 2 2.00 10M1 0.793 + 2697 : 228THS G KC=0.635 9$LC=0.1195 17$MC=0.0287 4 + 2697 : 228THS G NC=0.00765 11$OC=0.00181 3$PC=0.000351 5$QC=3.33E-5 5 + Compare OLD/NEW cards + 2699 : 228TH G 512.79 11 1.33 13[M1,E2] 0.12 9 G + 2700 : 228THS G KC=0.10 7$ LC=0.021 11 + 2699 : 228TH G 512.79 11 1.33 13[M1,E2] 0.118 78 G + 2700 : 228THS G KC=0.092 66$LC=0.0200 93$MC=0.0049 22 + 2700 : 228THS G NC=0.00131 57$OC=3.1E-4 14$PC=5.8E-5 28$QC=4.8E-6 34 + Compare OLD/NEW cards + 2701 : 228TH G 718.31 2 6.4 3 (E1) + 2702 : 228THS G CC=0.00631$ KC=0.00514$ LC=0.00087 + 2701 : 228TH G 718.31 2 6.4 3 (E1) 0.00628 + 2702 : 228THS G KC=0.00513 8$LC=0.000870 13$MC=0.000206 3 + 2702 : 228THS G NC=5.47E-5 8$OC=1.285E-5 18$PC=2.46E-6 4$QC=2.18E-7 3 + Compare OLD/NEW cards + 2705 : 228TH G 776.52 3 7.9 4 [E1] + 2706 : 228THS G CC=0.00546$ KC=0.00446$ LC=0.00075 + 2705 : 228TH G 776.52 3 7.9 4 [E1] 0.00544 + 2706 : 228THS G KC=0.00445 7$LC=0.000750 11$MC=0.0001774 25 + 2706 : 228THS G NC=4.70E-5 7$OC=1.107E-5 16$PC=2.12E-6 3$QC=1.90E-7 3 + Compare OLD/NEW cards + 2709 : 228TH G 791.43 9 3.6 4 (M1) 0.0661 @ + 2710 : 228TH2 G FLAG=M + 2711 : 228THS G KC=0.0530$ LC=0.0098 + 2709 : 228TH G 791.43 9 3.6 4 (M1) 0.0618 @ + 2711 : 228THS G KC=0.0498 7$LC=0.00915 13$MC=0.00219 3 + 2711 : 228THS G NC=0.000584 9$OC=0.0001382 20$PC=2.68E-5 4$QC=2.56E-6 4 + Compare OLD/NEW cards + 2714 : 228TH G 853.97 8 0.82 7 [M1,E2] 0.034 21 + 2715 : 228THS G KC=0.027 17$ LC=0.005 3 + 2714 : 228TH G 853.97 8 0.82 7 [M1,E2] 0.032 19 + 2715 : 228THS G KC=0.025 16$LC=0.0050 25$MC=0.00122 58 + 2715 : 228THS G NC=3.2E-4 16$OC=7.6E-5 37$PC=1.47E-5 73$QC=1.30E-6 79 + Compare OLD/NEW cards + 2718 : 228TH G 922.5 2 2.25 12[M1,E2] 0.028 16 G + 2719 : 228THS G KC=0.022 13$ LC=0.0044 22 + 2718 : 228TH G 922.5 2 2.25 12[M1,E2] 0.026 15 G + 2719 : 228THS G KC=0.021 13$LC=0.0041 20$MC=9.9E-4 47 + 2719 : 228THS G NC=2.6E-4 13$OC=6.2E-5 30$PC=1.20E-5 59$QC=1.07E-6 63 + 2720 : 228TH G 928.4 2 0.89 8 G + Compare OLD/NEW cards + 2721 : 228TH G 976.00 5 13.4 7 M1 0.0381 + 2722 : 228THS G KC=0.0306$ LC=0.00563 + 2721 : 228TH G 976.00 5 13.4 7 M1 0.0356 + 2722 : 228THS G KC=0.0287 4$LC=0.00524 8$MC=0.001254 18 + 2722 : 228THS G NC=0.000334 5$OC=7.91E-5 11$PC=1.537E-5 22$QC=1.468E-6 21 + 2726 : 228TH G 1000.70 0.5 LE N + 2727 : 228TH G 1070.40 7 1.20 8 + 2728 : 228TH G 1549.3 2 1.2 2 G + Compare OLD/NEW cards + 2729 : 228TH G 1758.11 5 9.0 5 E2+M1 -9 1 + 2729 : 228TH G 1758.11 5 9.0 5 E2+M1 -9 1 0.00371 + 2730 : 228THS G KC=0.00285 5$LC=0.000533 8$MC=0.0001281 19 + 2730 : 228THS G NC=3.41E-5 5$OC=8.03E-6 12$PC=1.542E-6 23$QC=1.369E-7 20 + 2730 : 228THS G IPC=0.0001515 22 + Compare OLD/NEW cards + 2732 : 228TH G 1887.13 5 24.0 12E2+M1 -9.1 9 + 2732 : 228TH G 1887.13 5 24.0 12E2+M1 -9.1 9 0.00333 + 2733 : 228THS G KC=0.00251 4$LC=0.000462 7$MC=0.0001107 16 + 2733 : 228THS G NC=2.95E-5 5$OC=6.95E-6 10$PC=1.336E-6 19$QC=1.201E-7 18 + 2733 : 228THS G IPC=0.000205 3 + Compare OLD/NEW cards + 2738 : 228TH G 548.74 11 0.41 5 [M1,E2] 0.10 7 & ? + 2739 : 228THS G KC=0.08 6$ LC=0.017 9 + 2738 : 228TH G 548.74 11 0.41 5 [M1,E2] 0.099 65 & ? + 2739 : 228THS G KC=0.077 55$LC=0.0166 79$MC=0.0040 18 + 2739 : 228THS G NC=0.00108 48$OC=2.5E-4 12$PC=4.8E-5 24$QC=4.0E-6 28 + 2741 : 228TH G 1778.0 6 0.06 2 + 2742 : 228TH G 1907.13 11 0.99 5 + 2743 : 228TH G 1965.22 12 0.43 4 & + 2747 : 228TH G 1455.0 2 1.16 7 G + 2748 : 228TH G 1578.2 2 1.33 13 G + 2749 : 228TH G 1787.2 2 0.37 4 G + 2750 : 228TH G 1916.6 3 0.15 3 G + 2754 : 228TH G 1013.54 13 0.38 5 & + 2755 : 228TH G 1795.15 6 1.19 7 + 2756 : 228TH G 1924.2 2 0.18 2 + 2760 : 228TH G 371.83 0.84 23 G + 2761 : 228TH3 G FLAG=N + 2763 : 228TH G 887.16 0.35 5 N + 2765 : 228TH G 919.4 3 0.6 2 I + 2766 : 228TH G 1041.14 0.3 LE N + 2767 : 228TH G 1823.19 10 0.47 3 + 2768 : 228TH G 1952.39 10 0.76 5 + Compare OLD/NEW cards + 2772 : 228TH G 1620.67 10 4.9 3 (M1+E2) + 2772 : 228TH G 1620.67 10 4.9 3 (M1+E2) 0.0069 27 + 2773 : 228THS G KC=0.0054 22$LC=9.9E-4 38$MC=2.38E-4 89 + 2773 : 228THS G NC=6.3E-5 24$OC=1.50E-5 57$PC=2.9E-6 11$QC=2.7E-7 12$IPC=1.55E-4 58 + Compare OLD/NEW cards + 2778 : 228TH G 384.53 0.1 LE[M1,E2] 0.27 18 N ? + 2778 : 228TH G 384.53 0.1 LE[M1,E2] 0.25 18 N ? + 2779 : 228THS G KC=0.19 15$LC=0.046 18$MC=0.0114 40 + 2779 : 228THS G NC=0.0030 11$OC=7.1E-4 26$PC=1.34E-4 55$QC=1.02E-5 77 + 2779 : 228TH G 1148.20 14 0.30 4 + 2780 : 228TH G 1190.98 0.1 LE N + 2781 : 228TH G 1965.22 12 0.43 4 & + 2783 : 228TH 232U A DECAY 1977KU15,1986LOZT 97NDS 199704 + 2785 : 228TH DG CC$FROM BrIcc v2.3b (16-Dec-2014) 2008Ki07, "Frozen Orbitals" appr. + 2785 : 228TH CG MR$IF NO VALUE GIVEN IT WAS ASSUMED MR=1.00 FOR E2/M1, + 2785 : 228TH2CG MR=1.00 FOR E3/M2 AND MR=0.10 FOR THE OTHER MULTIPOLARITIES + Compare OLD/NEW cards + 2820 : 228TH G 57.78 5 77.2 7 E2 156 A + 2821 : 228THS G LC= 114 $MC= 31.1 $NC+= 11.4 $ + 2820 : 228TH G 57.78 5 77.2 7 E2 152.9 A + 2821 : 228THS G LC=111.9 17$MC=30.7 5 + 2821 : 228THS G NC=8.21 12$OC=1.83 3$PC=0.301 5$QC=0.000868 13 + Compare OLD/NEW cards + 2831 : 228TH G 129.08 5 26.33 15E2 3.81 A + 2832 : 228THS G KC= 0.269 $LC= 2.57 $MC= 0.706 $NC+= 0.263 $ + 2831 : 228TH G 129.08 5 26.33 15E2 3.73 A + 2832 : 228THS G KC=0.264 4$LC=2.54 4$MC=0.697 10 + 2832 : 228THS G NC=0.187 3$OC=0.0417 6$PC=0.00695 10$QC=4.23E-5 6 + Compare OLD/NEW cards + 2836 : 228TH G 270.2 2 1.220 19E1 0.0474 A + 2837 : 228THS G KC= 0.0379 $LC=0.00722 $MC=0.00173 $NC+=0.00061 $ + 2836 : 228TH G 270.2 2 1.220 19E1 0.0470 A + 2837 : 228THS G KC=0.0376 6$LC=0.00716 11$MC=0.001718 25 + 2837 : 228THS G NC=0.000455 7$OC=0.0001055 15$PC=1.96E-5 3$QC=1.473E-6 21 + Compare OLD/NEW cards + 2838 : 228TH G 327.9 2 1.093 23E1 0.0308 A + 2839 : 228THS G KC=0.02472 $LC=0.00458 $MC=0.00110 $NC+=0.00039 $ + 2838 : 228TH G 327.9 2 1.093 23E1 0.0305 A + 2839 : 228THS G KC=0.0245 4$LC=0.00455 7$MC=0.001090 16 + 2839 : 228THS G NC=0.000289 4$OC=6.72E-5 10$PC=1.257E-5 18$QC=9.83E-7 14 + Compare OLD/NEW cards + 2843 : 228TH G 191.0 2 0.012 1 E2 0.791 + 2844 : 228THS G KC= 0.1741 $LC= 0.453 $MC= 0.1237 $NC+= 0.0457 $ + 2843 : 228TH G 191.0 2 0.012 1 E2 0.781 + 2844 : 228THS G KC=0.1715 25$LC=0.447 7$MC=0.1219 18 + 2844 : 228THS G NC=0.0327 5$OC=0.00732 11$PC=0.001234 19$QC=1.381E-5 20 + Compare OLD/NEW cards + 2848 : 228TH G 209.5 5 0.0041 10E1 0.0856 + 2849 : 228THS G KC= 0.0676 $LC=0.01341 $MC=0.00323 $NC+=0.00114 $ + 2848 : 228TH G 209.5 5 0.0041 10E1 0.0846 13 + 2849 : 228THS G KC=0.0671 10$LC=0.01329 21$MC=0.00320 5 + 2849 : 228THS G NC=0.000845 13$OC=0.000195 3$PC=3.59E-5 6$QC=2.55E-6 4 + Compare OLD/NEW cards + 2850 : 228TH G 338.1 2 0.0143 5 E1 0.0288 + 2851 : 228THS G KC=0.02314 $LC=0.00427 $MC=0.00102 $NC+=0.00036 $ + 2850 : 228TH G 338.1 2 0.0143 5 E1 0.0286 + 2851 : 228THS G KC=0.0230 4$LC=0.00424 6$MC=0.001016 15 + 2851 : 228THS G NC=0.000269 4$OC=6.26E-5 9$PC=1.173E-5 17$QC=9.23E-7 13 + Compare OLD/NEW cards + 2854 : 228TH G 141.0 5 0.0012 5 (E1) 0.220 + 2855 : 228THS G KC= 0.1711 $LC= 0.0367 $MC=0.00883 $NC+=0.00313 $ + 2854 : 228TH G 141.0 5 0.0012 5 (E1) 0.217 4 + 2855 : 228THS G KC=0.169 3$LC=0.0362 6$MC=0.00876 15 + 2855 : 228THS G NC=0.00231 4$OC=0.000529 9$PC=9.53E-5 16$QC=6.10E-6 10 + Compare OLD/NEW cards + 2856 : 228TH G 332.3 3 0.019 1 (E1) 0.0299 + 2857 : 228THS G KC=0.02402 $LC=0.00444 $MC=0.00106 $NC+=0.00038 $ + 2856 : 228TH G 332.3 3 0.019 1 (E1) 0.0297 + 2857 : 228THS G KC=0.0238 4$LC=0.00442 7$MC=0.001057 15 + 2857 : 228THS G NC=0.000280 4$OC=6.52E-5 10$PC=1.220E-5 18$QC=9.56E-7 14 + Compare OLD/NEW cards + 2861 : 228TH G 503.6 3 0.0056 3 (E1) 0.0125 + 2862 : 228THS G KC=0.01015 $LC=0.00179 $ + 2861 : 228TH G 503.6 3 0.0056 3 (E1) 0.01244 + 2862 : 228THS G KC=0.01010 15$LC=0.001776 25$MC=0.000423 6 + 2862 : 228THS G NC=0.0001120 16$OC=2.62E-5 4$PC=4.97E-6 7$QC=4.20E-7 6 + Compare OLD/NEW cards + 2863 : 228TH G 773.4 5 0.0018 3 [E2] 0.0167 + 2864 : 228THS G KC=0.01218 $LC=0.00340 $ + 2863 : 228TH G 773.4 5 0.0018 3 [E2] 0.01652 + 2864 : 228THS G KC=0.01206 17$LC=0.00334 5$MC=0.000837 12 + 2864 : 228THS G NC=0.000223 4$OC=5.18E-5 8$PC=9.57E-6 14$QC=6.20E-7 9 + Compare OLD/NEW cards + 2865 : 228TH G 831 0.0003 LTE0 8E-4 4 + Compare OLD/NEW cards + 2872 : 228TH G 478 1 0.00055 21[E1] 0.0139 + 2873 : 228THS G KC=0.01127 $LC=0.00199 $MC=0.00047 $NC+=0.00017 $ + 2872 : 228TH G 478 1 0.00055 21[E1] 0.0138221 + 2873 : 228THS G KC=0.01120 17$LC=0.00198 3$MC=0.000472 7 + 2873 : 228THS G NC=0.0001251 19$OC=2.93E-5 5$PC=5.54E-6 9$QC=4.64E-7 7 + Compare OLD/NEW cards + 2874 : 228TH G 547 1 0.00039 24[E1] 0.0106 + 2875 : 228THS G KC=0.00863 $LC=0.00150 $ + 2874 : 228TH G 547 1 0.00039 24[E1] 0.01056 + 2875 : 228THS G KC=0.00859 13$LC=0.001497 22$MC=0.000356 6 + 2875 : 228THS G NC=9.43E-5 14$OC=2.21E-5 4$PC=4.20E-6 6$QC=3.59E-7 6 + Compare OLD/NEW cards + 2876 : 228TH G 817 1 0.0003 AP[M1+E2] 0.038 23 D + 2876 : 228TH G 817 1 0.0003 AP[M1+E2] 0.036 21 D + 2877 : 228THS G KC=0.028 18$LC=0.0057 28$MC=0.00137 65 + 2877 : 228THS G NC=3.6E-4 18$OC=8.6E-5 41$PC=1.65E-5 82$QC=1.45E-6 90 + 2878 : 228TH 226RA(A,2NG) 1993AC02,1986SC18 97NDS 199704 + 2880 : 228TH DG CC$FROM BrIcc v2.3b (16-Dec-2014) 2008Ki07, "Frozen Orbitals" appr. + 2880 : 228TH CG MR$IF NO VALUE GIVEN IT WAS ASSUMED MR=1.00 FOR E2/M1, + 2880 : 228TH2CG MR=1.00 FOR E3/M2 AND MR=0.10 FOR THE OTHER MULTIPOLARITIES + 2904 : 228TH G 191.4 3 + 2907 : 228TH G 332.4 3 + 2909 : 228TH G 244.4 3 + 2911 : 228TH G 317.4 3 + 2913 : 228TH G 289.4 3 + 2915 : 228TH G 225.1 3 1.00 + 2916 : 228TH G 298.3 3 4.07 24 + 2918 : 228TH G 268.9 3 1.00 + 2919 : 228TH G 278.0 3 1.50 10 + 2921 : 228TH G 327.5 3 + 2923 : 228TH G 257.7 3 0.52 4 + 2924 : 228TH G 307.3 3 1.00 + 2927 : 228TH G 360.1 3 + 2930 : 228TH G 341.2 3 + 2933 : 228TH G 388.6 3 + 2936 : 228TH G 371.4 3 + 2939 : 228TH G 419.8 3 + 2940 : 228THF G FL=1988.1 + 2942 : 228TH 230TH(P,T) 1972MA15 97NDS 199704 + 2948 : 228TH DG CC$FROM BrIcc v2.3b (16-Dec-2014) 2008Ki07, "Frozen Orbitals" appr. + 2948 : 228TH CG MR$IF NO VALUE GIVEN IT WAS ASSUMED MR=1.00 FOR E2/M1, + 2948 : 228TH2CG MR=1.00 FOR E3/M2 AND MR=0.10 FOR THE OTHER MULTIPOLARITIES + 2964 : 228TH 230TH(A,A'2NG) 1984HA21 97NDS 199704 + 2974 : 228TH DG CC$FROM BrIcc v2.3b (16-Dec-2014) 2008Ki07, "Frozen Orbitals" appr. + 2974 : 228TH CG MR$IF NO VALUE GIVEN IT WAS ASSUMED MR=1.00 FOR E2/M1, + 2974 : 228TH2CG MR=1.00 FOR E3/M2 AND MR=0.10 FOR THE OTHER MULTIPOLARITIES + 2976 : 228TH G 57.8 S + Compare OLD/NEW cards + 2979 : 228TH G 129.0 2 E2 + 2979 : 228TH G 129.0 2 E2 3.74 + 2980 : 228THS G KC=0.264 4$LC=2.55 4$MC=0.699 11 + 2980 : 228THS G NC=0.187 3$OC=0.0418 7$PC=0.00697 11$QC=4.24E-5 7 + Compare OLD/NEW cards + 2981 : 228TH G 191.0 1 E2 + 2981 : 228TH G 191.0 1 E2 0.781 + 2982 : 228THS G KC=0.1715 24$LC=0.447 7$MC=0.1219 18 + 2982 : 228THS G NC=0.0327 5$OC=0.00732 11$PC=0.001234 18$QC=1.381E-5 20 + 2983 : 228TH G 332.0 4 + Compare OLD/NEW cards + 2985 : 228TH G 244.3 1 E2 + 2986 : 228TH3 G FL=378 + 2985 : 228TH G 244.3 1 E2 0.326 + 2987 : 228THS G KC=0.1091 16$LC=0.1591 23$MC=0.0431 6 + 2987 : 228THS G NC=0.01155 17$OC=0.00260 4$PC=0.000443 7$QC=7.41E-6 11 + 2988 : 228TH G 317.2 2 + 2990 : 228TH G 289.3 2 + 2992 : 228TH G 298.7 2 + 2994 : 228TH G 268.9 5 + 2995 : 228TH G 278.4 3 + 2997 : 228TH G 327.2 4 + 3001 : 228TH G 257.3 5 + 3002 : 228TH G 306.6 5 + 3006 : 228TH G 357.2 5 diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 879ea6d189..9a0be3e926 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -35,9 +35,13 @@ def test_bricc_evaluation(): create_tmp() input_dict = {} input_dict['input_type'] = 'evaluation' - input_dict['input_file'] = 'ensdf_processing/bricc/ref_235PU' + input_dict['input_file'] = 'ensdf_processing/bricc/ref_a228.ens' input_dict['BrIccNH'] = 0 + input_dict['calculation_report'] = tmp_path + '/tmp_bricc_calculation_report' + input_dict['comparison_report'] = tmp_path + '/tmp_bricc_comparison_report' output_dict = ensdf_processing.bricc(input_dict) + bricc_comparison_ref = 'ensdf_processing/bricc/ref_a228_comparison_report' + file_comp(input_dict['comparison_report'], bricc_comparison_ref, []) cleanup_tmp() def test_bldhst(): From 31e4adee6e1f5d44043f73cbb1a193090d32cea5 Mon Sep 17 00:00:00 2001 From: qingquan Date: Fri, 26 Feb 2016 13:52:53 -0600 Subject: [PATCH 143/216] add fortranformat to pyne --- pyne/fortranformat/FortranRecordReader.py | 73 + pyne/fortranformat/FortranRecordWriter.py | 66 + pyne/fortranformat/__init__.py | 15 + pyne/fortranformat/_edit_descriptors.py | 308 + pyne/fortranformat/_exceptions.py | 3 + pyne/fortranformat/_input.py | 357 + pyne/fortranformat/_lexer.py | 185 + pyne/fortranformat/_misc.py | 56 + pyne/fortranformat/_output.py | 722 + pyne/fortranformat/_parser.py | 393 + pyne/fortranformat/check_version.txt | 3 + pyne/fortranformat/config.py | 64 + pyne/fortranformat/spec/examples/Note.txt | 5 + .../examples/gcc-4.4.0/gcc/fortran/ChangeLog | 274 + .../gcc-4.4.0/gcc/fortran/ChangeLog-2002 | 333 + .../gcc-4.4.0/gcc/fortran/ChangeLog-2003 | 2339 + .../gcc-4.4.0/gcc/fortran/ChangeLog-2004 | 2846 ++ .../gcc-4.4.0/gcc/fortran/ChangeLog-2005 | 3723 ++ .../gcc-4.4.0/gcc/fortran/ChangeLog-2006 | 4538 ++ .../gcc-4.4.0/gcc/fortran/ChangeLog-2007 | 5769 +++ .../gcc-4.4.0/gcc/fortran/ChangeLog-2008 | 4135 ++ .../gcc-4.4.0/gcc/fortran/ChangeLog.ptr | 11 + .../gcc-4.4.0/gcc/fortran/Make-lang.in | 341 + .../examples/gcc-4.4.0/gcc/fortran/arith.c | 2591 ++ .../examples/gcc-4.4.0/gcc/fortran/arith.h | 93 + .../examples/gcc-4.4.0/gcc/fortran/array.c | 2207 + .../spec/examples/gcc-4.4.0/gcc/fortran/bbt.c | 197 + .../examples/gcc-4.4.0/gcc/fortran/check.c | 3922 ++ .../gcc-4.4.0/gcc/fortran/config-lang.in | 15 + .../examples/gcc-4.4.0/gcc/fortran/convert.c | 123 + .../spec/examples/gcc-4.4.0/gcc/fortran/cpp.c | 1043 + .../spec/examples/gcc-4.4.0/gcc/fortran/cpp.h | 48 + .../examples/gcc-4.4.0/gcc/fortran/data.c | 848 + .../examples/gcc-4.4.0/gcc/fortran/data.h | 24 + .../examples/gcc-4.4.0/gcc/fortran/decl.c | 7236 +++ .../gcc-4.4.0/gcc/fortran/dependency.c | 1362 + .../gcc-4.4.0/gcc/fortran/dependency.h | 45 + .../gcc-4.4.0/gcc/fortran/dump-parse-tree.c | 2050 + .../examples/gcc-4.4.0/gcc/fortran/error.c | 1043 + .../examples/gcc-4.4.0/gcc/fortran/expr.c | 3569 ++ .../examples/gcc-4.4.0/gcc/fortran/f95-lang.c | 1231 + .../gcc-4.4.0/gcc/fortran/gfc-internals.texi | 749 + .../examples/gcc-4.4.0/gcc/fortran/gfortran.h | 2594 ++ .../gcc-4.4.0/gcc/fortran/gfortran.info | 15040 +++++++ .../gcc-4.4.0/gcc/fortran/gfortran.texi | 2040 + .../gcc-4.4.0/gcc/fortran/gfortranspec.c | 597 + .../gcc-4.4.0/gcc/fortran/interface.c | 2944 ++ .../gcc-4.4.0/gcc/fortran/intrinsic.c | 3983 ++ .../gcc-4.4.0/gcc/fortran/intrinsic.h | 542 + .../gcc-4.4.0/gcc/fortran/intrinsic.texi | 11346 +++++ .../gcc-4.4.0/gcc/fortran/invoke.texi | 1369 + .../spec/examples/gcc-4.4.0/gcc/fortran/io.c | 3909 ++ .../examples/gcc-4.4.0/gcc/fortran/ioparm.def | 95 + .../examples/gcc-4.4.0/gcc/fortran/iresolve.c | 3376 ++ .../gcc-4.4.0/gcc/fortran/iso-c-binding.def | 170 + .../gcc-4.4.0/gcc/fortran/iso-fortran-env.def | 43 + .../gcc-4.4.0/gcc/fortran/lang-specs.h | 78 + .../examples/gcc-4.4.0/gcc/fortran/lang.opt | 427 + .../gcc-4.4.0/gcc/fortran/libgfortran.h | 111 + .../examples/gcc-4.4.0/gcc/fortran/match.c | 4079 ++ .../examples/gcc-4.4.0/gcc/fortran/match.h | 239 + .../examples/gcc-4.4.0/gcc/fortran/matchexp.c | 927 + .../gcc-4.4.0/gcc/fortran/mathbuiltins.def | 35 + .../examples/gcc-4.4.0/gcc/fortran/misc.c | 311 + .../examples/gcc-4.4.0/gcc/fortran/module.c | 5322 +++ .../examples/gcc-4.4.0/gcc/fortran/openmp.c | 1527 + .../examples/gcc-4.4.0/gcc/fortran/options.c | 849 + .../examples/gcc-4.4.0/gcc/fortran/parse.c | 3870 ++ .../examples/gcc-4.4.0/gcc/fortran/parse.h | 72 + .../examples/gcc-4.4.0/gcc/fortran/primary.c | 2975 ++ .../examples/gcc-4.4.0/gcc/fortran/resolve.c | 10482 +++++ .../examples/gcc-4.4.0/gcc/fortran/scanner.c | 2076 + .../examples/gcc-4.4.0/gcc/fortran/simplify.c | 4956 ++ .../spec/examples/gcc-4.4.0/gcc/fortran/st.c | 220 + .../examples/gcc-4.4.0/gcc/fortran/symbol.c | 4343 ++ .../gcc-4.4.0/gcc/fortran/target-memory.c | 735 + .../gcc-4.4.0/gcc/fortran/target-memory.h | 53 + .../gcc-4.4.0/gcc/fortran/trans-array.c | 6232 +++ .../gcc-4.4.0/gcc/fortran/trans-array.h | 140 + .../gcc-4.4.0/gcc/fortran/trans-common.c | 1261 + .../gcc-4.4.0/gcc/fortran/trans-const.c | 373 + .../gcc-4.4.0/gcc/fortran/trans-const.h | 60 + .../gcc-4.4.0/gcc/fortran/trans-decl.c | 4086 ++ .../gcc-4.4.0/gcc/fortran/trans-expr.c | 4836 ++ .../gcc-4.4.0/gcc/fortran/trans-intrinsic.c | 5070 +++ .../examples/gcc-4.4.0/gcc/fortran/trans-io.c | 2250 + .../gcc-4.4.0/gcc/fortran/trans-openmp.c | 1591 + .../gcc-4.4.0/gcc/fortran/trans-stmt.c | 4083 ++ .../gcc-4.4.0/gcc/fortran/trans-stmt.h | 72 + .../gcc-4.4.0/gcc/fortran/trans-types.c | 2366 + .../gcc-4.4.0/gcc/fortran/trans-types.h | 92 + .../examples/gcc-4.4.0/gcc/fortran/trans.c | 1322 + .../examples/gcc-4.4.0/gcc/fortran/trans.h | 770 + .../examples/gcc-4.4.0/gcc/fortran/types.def | 154 + .../examples/gcc-4.4.0/libgfortran/ChangeLog | 3203 ++ .../gcc-4.4.0/libgfortran/ChangeLog-2002 | 60 + .../gcc-4.4.0/libgfortran/ChangeLog-2003 | 542 + .../gcc-4.4.0/libgfortran/ChangeLog-2004 | 1104 + .../gcc-4.4.0/libgfortran/ChangeLog-2005 | 2915 ++ .../gcc-4.4.0/libgfortran/ChangeLog-2006 | 1634 + .../gcc-4.4.0/libgfortran/ChangeLog-2007 | 2480 + .../gcc-4.4.0/libgfortran/Makefile.am | 901 + .../gcc-4.4.0/libgfortran/Makefile.in | 6176 +++ .../gcc-4.4.0/libgfortran/acinclude.m4 | 390 + .../examples/gcc-4.4.0/libgfortran/aclocal.m4 | 869 + .../gcc-4.4.0/libgfortran/c99_protos.h | 524 + .../gcc-4.4.0/libgfortran/config.h.in | 845 + .../gcc-4.4.0/libgfortran/config/.DS_Store | Bin 0 -> 6148 bytes .../gcc-4.4.0/libgfortran/config/fpu-387.h | 90 + .../gcc-4.4.0/libgfortran/config/fpu-aix.h | 83 + .../libgfortran/config/fpu-generic.h | 52 + .../gcc-4.4.0/libgfortran/config/fpu-glibc.h | 87 + .../gcc-4.4.0/libgfortran/config/fpu-sysv.h | 82 + .../examples/gcc-4.4.0/libgfortran/configure | 37246 ++++++++++++++++ .../gcc-4.4.0/libgfortran/configure.ac | 459 + .../gcc-4.4.0/libgfortran/configure.host | 40 + .../examples/gcc-4.4.0/libgfortran/fmain.c | 25 + .../gcc-4.4.0/libgfortran/generated/.DS_Store | Bin 0 -> 43012 bytes .../libgfortran/generated/_abs_c10.F90 | 46 + .../libgfortran/generated/_abs_c16.F90 | 46 + .../libgfortran/generated/_abs_c4.F90 | 46 + .../libgfortran/generated/_abs_c8.F90 | 46 + .../libgfortran/generated/_abs_i16.F90 | 46 + .../libgfortran/generated/_abs_i4.F90 | 46 + .../libgfortran/generated/_abs_i8.F90 | 46 + .../libgfortran/generated/_abs_r10.F90 | 46 + .../libgfortran/generated/_abs_r16.F90 | 46 + .../libgfortran/generated/_abs_r4.F90 | 46 + .../libgfortran/generated/_abs_r8.F90 | 46 + .../libgfortran/generated/_acos_r10.F90 | 46 + .../libgfortran/generated/_acos_r16.F90 | 46 + .../libgfortran/generated/_acos_r4.F90 | 46 + .../libgfortran/generated/_acos_r8.F90 | 46 + .../libgfortran/generated/_acosh_r10.F90 | 46 + .../libgfortran/generated/_acosh_r16.F90 | 46 + .../libgfortran/generated/_acosh_r4.F90 | 46 + .../libgfortran/generated/_acosh_r8.F90 | 46 + .../libgfortran/generated/_aimag_c10.F90 | 46 + .../libgfortran/generated/_aimag_c16.F90 | 46 + .../libgfortran/generated/_aimag_c4.F90 | 46 + .../libgfortran/generated/_aimag_c8.F90 | 46 + .../libgfortran/generated/_aint_r10.F90 | 46 + .../libgfortran/generated/_aint_r16.F90 | 46 + .../libgfortran/generated/_aint_r4.F90 | 46 + .../libgfortran/generated/_aint_r8.F90 | 46 + .../libgfortran/generated/_anint_r10.F90 | 46 + .../libgfortran/generated/_anint_r16.F90 | 46 + .../libgfortran/generated/_anint_r4.F90 | 46 + .../libgfortran/generated/_anint_r8.F90 | 46 + .../libgfortran/generated/_asin_r10.F90 | 46 + .../libgfortran/generated/_asin_r16.F90 | 46 + .../libgfortran/generated/_asin_r4.F90 | 46 + .../libgfortran/generated/_asin_r8.F90 | 46 + .../libgfortran/generated/_asinh_r10.F90 | 46 + .../libgfortran/generated/_asinh_r16.F90 | 46 + .../libgfortran/generated/_asinh_r4.F90 | 46 + .../libgfortran/generated/_asinh_r8.F90 | 46 + .../libgfortran/generated/_atan2_r10.F90 | 46 + .../libgfortran/generated/_atan2_r16.F90 | 46 + .../libgfortran/generated/_atan2_r4.F90 | 46 + .../libgfortran/generated/_atan2_r8.F90 | 46 + .../libgfortran/generated/_atan_r10.F90 | 46 + .../libgfortran/generated/_atan_r16.F90 | 46 + .../libgfortran/generated/_atan_r4.F90 | 46 + .../libgfortran/generated/_atan_r8.F90 | 46 + .../libgfortran/generated/_atanh_r10.F90 | 46 + .../libgfortran/generated/_atanh_r16.F90 | 46 + .../libgfortran/generated/_atanh_r4.F90 | 46 + .../libgfortran/generated/_atanh_r8.F90 | 46 + .../libgfortran/generated/_conjg_c10.F90 | 46 + .../libgfortran/generated/_conjg_c16.F90 | 46 + .../libgfortran/generated/_conjg_c4.F90 | 46 + .../libgfortran/generated/_conjg_c8.F90 | 46 + .../libgfortran/generated/_cos_c10.F90 | 46 + .../libgfortran/generated/_cos_c16.F90 | 46 + .../libgfortran/generated/_cos_c4.F90 | 46 + .../libgfortran/generated/_cos_c8.F90 | 46 + .../libgfortran/generated/_cos_r10.F90 | 46 + .../libgfortran/generated/_cos_r16.F90 | 46 + .../libgfortran/generated/_cos_r4.F90 | 46 + .../libgfortran/generated/_cos_r8.F90 | 46 + .../libgfortran/generated/_cosh_r10.F90 | 46 + .../libgfortran/generated/_cosh_r16.F90 | 46 + .../libgfortran/generated/_cosh_r4.F90 | 46 + .../libgfortran/generated/_cosh_r8.F90 | 46 + .../libgfortran/generated/_dim_i16.F90 | 46 + .../libgfortran/generated/_dim_i4.F90 | 46 + .../libgfortran/generated/_dim_i8.F90 | 46 + .../libgfortran/generated/_dim_r10.F90 | 46 + .../libgfortran/generated/_dim_r16.F90 | 46 + .../libgfortran/generated/_dim_r4.F90 | 46 + .../libgfortran/generated/_dim_r8.F90 | 46 + .../libgfortran/generated/_exp_c10.F90 | 46 + .../libgfortran/generated/_exp_c16.F90 | 46 + .../libgfortran/generated/_exp_c4.F90 | 46 + .../libgfortran/generated/_exp_c8.F90 | 46 + .../libgfortran/generated/_exp_r10.F90 | 46 + .../libgfortran/generated/_exp_r16.F90 | 46 + .../libgfortran/generated/_exp_r4.F90 | 46 + .../libgfortran/generated/_exp_r8.F90 | 46 + .../libgfortran/generated/_log10_r10.F90 | 46 + .../libgfortran/generated/_log10_r16.F90 | 46 + .../libgfortran/generated/_log10_r4.F90 | 46 + .../libgfortran/generated/_log10_r8.F90 | 46 + .../libgfortran/generated/_log_c10.F90 | 46 + .../libgfortran/generated/_log_c16.F90 | 46 + .../libgfortran/generated/_log_c4.F90 | 46 + .../libgfortran/generated/_log_c8.F90 | 46 + .../libgfortran/generated/_log_r10.F90 | 46 + .../libgfortran/generated/_log_r16.F90 | 46 + .../libgfortran/generated/_log_r4.F90 | 46 + .../libgfortran/generated/_log_r8.F90 | 46 + .../libgfortran/generated/_mod_i16.F90 | 46 + .../libgfortran/generated/_mod_i4.F90 | 46 + .../libgfortran/generated/_mod_i8.F90 | 46 + .../libgfortran/generated/_mod_r10.F90 | 46 + .../libgfortran/generated/_mod_r16.F90 | 46 + .../libgfortran/generated/_mod_r4.F90 | 46 + .../libgfortran/generated/_mod_r8.F90 | 46 + .../libgfortran/generated/_sign_i16.F90 | 46 + .../libgfortran/generated/_sign_i4.F90 | 46 + .../libgfortran/generated/_sign_i8.F90 | 46 + .../libgfortran/generated/_sign_r10.F90 | 46 + .../libgfortran/generated/_sign_r16.F90 | 46 + .../libgfortran/generated/_sign_r4.F90 | 46 + .../libgfortran/generated/_sign_r8.F90 | 46 + .../libgfortran/generated/_sin_c10.F90 | 46 + .../libgfortran/generated/_sin_c16.F90 | 46 + .../libgfortran/generated/_sin_c4.F90 | 46 + .../libgfortran/generated/_sin_c8.F90 | 46 + .../libgfortran/generated/_sin_r10.F90 | 46 + .../libgfortran/generated/_sin_r16.F90 | 46 + .../libgfortran/generated/_sin_r4.F90 | 46 + .../libgfortran/generated/_sin_r8.F90 | 46 + .../libgfortran/generated/_sinh_r10.F90 | 46 + .../libgfortran/generated/_sinh_r16.F90 | 46 + .../libgfortran/generated/_sinh_r4.F90 | 46 + .../libgfortran/generated/_sinh_r8.F90 | 46 + .../libgfortran/generated/_sqrt_c10.F90 | 46 + .../libgfortran/generated/_sqrt_c16.F90 | 46 + .../libgfortran/generated/_sqrt_c4.F90 | 46 + .../libgfortran/generated/_sqrt_c8.F90 | 46 + .../libgfortran/generated/_sqrt_r10.F90 | 46 + .../libgfortran/generated/_sqrt_r16.F90 | 46 + .../libgfortran/generated/_sqrt_r4.F90 | 46 + .../libgfortran/generated/_sqrt_r8.F90 | 46 + .../libgfortran/generated/_tan_r10.F90 | 46 + .../libgfortran/generated/_tan_r16.F90 | 46 + .../libgfortran/generated/_tan_r4.F90 | 46 + .../libgfortran/generated/_tan_r8.F90 | 46 + .../libgfortran/generated/_tanh_r10.F90 | 46 + .../libgfortran/generated/_tanh_r16.F90 | 46 + .../libgfortran/generated/_tanh_r4.F90 | 46 + .../libgfortran/generated/_tanh_r8.F90 | 46 + .../gcc-4.4.0/libgfortran/generated/all_l1.c | 223 + .../gcc-4.4.0/libgfortran/generated/all_l16.c | 223 + .../gcc-4.4.0/libgfortran/generated/all_l2.c | 223 + .../gcc-4.4.0/libgfortran/generated/all_l4.c | 223 + .../gcc-4.4.0/libgfortran/generated/all_l8.c | 223 + .../gcc-4.4.0/libgfortran/generated/any_l1.c | 223 + .../gcc-4.4.0/libgfortran/generated/any_l16.c | 223 + .../gcc-4.4.0/libgfortran/generated/any_l2.c | 223 + .../gcc-4.4.0/libgfortran/generated/any_l4.c | 223 + .../gcc-4.4.0/libgfortran/generated/any_l8.c | 223 + .../libgfortran/generated/count_16_l.c | 219 + .../libgfortran/generated/count_1_l.c | 219 + .../libgfortran/generated/count_2_l.c | 219 + .../libgfortran/generated/count_4_l.c | 219 + .../libgfortran/generated/count_8_l.c | 219 + .../libgfortran/generated/cshift0_c10.c | 171 + .../libgfortran/generated/cshift0_c16.c | 171 + .../libgfortran/generated/cshift0_c4.c | 171 + .../libgfortran/generated/cshift0_c8.c | 171 + .../libgfortran/generated/cshift0_i1.c | 171 + .../libgfortran/generated/cshift0_i16.c | 171 + .../libgfortran/generated/cshift0_i2.c | 171 + .../libgfortran/generated/cshift0_i4.c | 171 + .../libgfortran/generated/cshift0_i8.c | 171 + .../libgfortran/generated/cshift0_r10.c | 171 + .../libgfortran/generated/cshift0_r16.c | 171 + .../libgfortran/generated/cshift0_r4.c | 171 + .../libgfortran/generated/cshift0_r8.c | 171 + .../libgfortran/generated/cshift1_16.c | 256 + .../libgfortran/generated/cshift1_4.c | 256 + .../libgfortran/generated/cshift1_8.c | 256 + .../libgfortran/generated/eoshift1_16.c | 296 + .../libgfortran/generated/eoshift1_4.c | 296 + .../libgfortran/generated/eoshift1_8.c | 296 + .../libgfortran/generated/eoshift3_16.c | 315 + .../libgfortran/generated/eoshift3_4.c | 315 + .../libgfortran/generated/eoshift3_8.c | 315 + .../libgfortran/generated/exponent_r10.c | 42 + .../libgfortran/generated/exponent_r16.c | 42 + .../libgfortran/generated/exponent_r4.c | 42 + .../libgfortran/generated/exponent_r8.c | 42 + .../libgfortran/generated/fraction_r10.c | 41 + .../libgfortran/generated/fraction_r16.c | 41 + .../libgfortran/generated/fraction_r4.c | 41 + .../libgfortran/generated/fraction_r8.c | 41 + .../libgfortran/generated/in_pack_c10.c | 119 + .../libgfortran/generated/in_pack_c16.c | 119 + .../libgfortran/generated/in_pack_c4.c | 119 + .../libgfortran/generated/in_pack_c8.c | 119 + .../libgfortran/generated/in_pack_i1.c | 119 + .../libgfortran/generated/in_pack_i16.c | 119 + .../libgfortran/generated/in_pack_i2.c | 119 + .../libgfortran/generated/in_pack_i4.c | 119 + .../libgfortran/generated/in_pack_i8.c | 119 + .../libgfortran/generated/in_pack_r10.c | 119 + .../libgfortran/generated/in_pack_r16.c | 119 + .../libgfortran/generated/in_pack_r4.c | 119 + .../libgfortran/generated/in_pack_r8.c | 119 + .../libgfortran/generated/in_unpack_c10.c | 107 + .../libgfortran/generated/in_unpack_c16.c | 107 + .../libgfortran/generated/in_unpack_c4.c | 107 + .../libgfortran/generated/in_unpack_c8.c | 107 + .../libgfortran/generated/in_unpack_i1.c | 107 + .../libgfortran/generated/in_unpack_i16.c | 107 + .../libgfortran/generated/in_unpack_i2.c | 107 + .../libgfortran/generated/in_unpack_i4.c | 107 + .../libgfortran/generated/in_unpack_i8.c | 107 + .../libgfortran/generated/in_unpack_r10.c | 107 + .../libgfortran/generated/in_unpack_r16.c | 107 + .../libgfortran/generated/in_unpack_r4.c | 107 + .../libgfortran/generated/in_unpack_r8.c | 107 + .../libgfortran/generated/matmul_c10.c | 379 + .../libgfortran/generated/matmul_c16.c | 379 + .../libgfortran/generated/matmul_c4.c | 379 + .../libgfortran/generated/matmul_c8.c | 379 + .../libgfortran/generated/matmul_i1.c | 379 + .../libgfortran/generated/matmul_i16.c | 379 + .../libgfortran/generated/matmul_i2.c | 379 + .../libgfortran/generated/matmul_i4.c | 379 + .../libgfortran/generated/matmul_i8.c | 379 + .../libgfortran/generated/matmul_l16.c | 242 + .../libgfortran/generated/matmul_l4.c | 242 + .../libgfortran/generated/matmul_l8.c | 242 + .../libgfortran/generated/matmul_r10.c | 379 + .../libgfortran/generated/matmul_r16.c | 379 + .../libgfortran/generated/matmul_r4.c | 379 + .../libgfortran/generated/matmul_r8.c | 379 + .../libgfortran/generated/maxloc0_16_i1.c | 372 + .../libgfortran/generated/maxloc0_16_i16.c | 372 + .../libgfortran/generated/maxloc0_16_i2.c | 372 + .../libgfortran/generated/maxloc0_16_i4.c | 372 + .../libgfortran/generated/maxloc0_16_i8.c | 372 + .../libgfortran/generated/maxloc0_16_r10.c | 372 + .../libgfortran/generated/maxloc0_16_r16.c | 372 + .../libgfortran/generated/maxloc0_16_r4.c | 372 + .../libgfortran/generated/maxloc0_16_r8.c | 372 + .../libgfortran/generated/maxloc0_4_i1.c | 372 + .../libgfortran/generated/maxloc0_4_i16.c | 372 + .../libgfortran/generated/maxloc0_4_i2.c | 372 + .../libgfortran/generated/maxloc0_4_i4.c | 372 + .../libgfortran/generated/maxloc0_4_i8.c | 372 + .../libgfortran/generated/maxloc0_4_r10.c | 372 + .../libgfortran/generated/maxloc0_4_r16.c | 372 + .../libgfortran/generated/maxloc0_4_r4.c | 372 + .../libgfortran/generated/maxloc0_4_r8.c | 372 + .../libgfortran/generated/maxloc0_8_i1.c | 372 + .../libgfortran/generated/maxloc0_8_i16.c | 372 + .../libgfortran/generated/maxloc0_8_i2.c | 372 + .../libgfortran/generated/maxloc0_8_i4.c | 372 + .../libgfortran/generated/maxloc0_8_i8.c | 372 + .../libgfortran/generated/maxloc0_8_r10.c | 372 + .../libgfortran/generated/maxloc0_8_r16.c | 372 + .../libgfortran/generated/maxloc0_8_r4.c | 372 + .../libgfortran/generated/maxloc0_8_r8.c | 372 + .../libgfortran/generated/maxloc1_16_i1.c | 557 + .../libgfortran/generated/maxloc1_16_i16.c | 557 + .../libgfortran/generated/maxloc1_16_i2.c | 557 + .../libgfortran/generated/maxloc1_16_i4.c | 557 + .../libgfortran/generated/maxloc1_16_i8.c | 557 + .../libgfortran/generated/maxloc1_16_r10.c | 557 + .../libgfortran/generated/maxloc1_16_r16.c | 557 + .../libgfortran/generated/maxloc1_16_r4.c | 557 + .../libgfortran/generated/maxloc1_16_r8.c | 557 + .../libgfortran/generated/maxloc1_4_i1.c | 557 + .../libgfortran/generated/maxloc1_4_i16.c | 557 + .../libgfortran/generated/maxloc1_4_i2.c | 557 + .../libgfortran/generated/maxloc1_4_i4.c | 557 + .../libgfortran/generated/maxloc1_4_i8.c | 557 + .../libgfortran/generated/maxloc1_4_r10.c | 557 + .../libgfortran/generated/maxloc1_4_r16.c | 557 + .../libgfortran/generated/maxloc1_4_r4.c | 557 + .../libgfortran/generated/maxloc1_4_r8.c | 557 + .../libgfortran/generated/maxloc1_8_i1.c | 557 + .../libgfortran/generated/maxloc1_8_i16.c | 557 + .../libgfortran/generated/maxloc1_8_i2.c | 557 + .../libgfortran/generated/maxloc1_8_i4.c | 557 + .../libgfortran/generated/maxloc1_8_i8.c | 557 + .../libgfortran/generated/maxloc1_8_r10.c | 557 + .../libgfortran/generated/maxloc1_8_r16.c | 557 + .../libgfortran/generated/maxloc1_8_r4.c | 557 + .../libgfortran/generated/maxloc1_8_r8.c | 557 + .../libgfortran/generated/maxval_i1.c | 546 + .../libgfortran/generated/maxval_i16.c | 546 + .../libgfortran/generated/maxval_i2.c | 546 + .../libgfortran/generated/maxval_i4.c | 546 + .../libgfortran/generated/maxval_i8.c | 546 + .../libgfortran/generated/maxval_r10.c | 546 + .../libgfortran/generated/maxval_r16.c | 546 + .../libgfortran/generated/maxval_r4.c | 546 + .../libgfortran/generated/maxval_r8.c | 546 + .../libgfortran/generated/minloc0_16_i1.c | 372 + .../libgfortran/generated/minloc0_16_i16.c | 372 + .../libgfortran/generated/minloc0_16_i2.c | 372 + .../libgfortran/generated/minloc0_16_i4.c | 372 + .../libgfortran/generated/minloc0_16_i8.c | 372 + .../libgfortran/generated/minloc0_16_r10.c | 372 + .../libgfortran/generated/minloc0_16_r16.c | 372 + .../libgfortran/generated/minloc0_16_r4.c | 372 + .../libgfortran/generated/minloc0_16_r8.c | 372 + .../libgfortran/generated/minloc0_4_i1.c | 372 + .../libgfortran/generated/minloc0_4_i16.c | 372 + .../libgfortran/generated/minloc0_4_i2.c | 372 + .../libgfortran/generated/minloc0_4_i4.c | 372 + .../libgfortran/generated/minloc0_4_i8.c | 372 + .../libgfortran/generated/minloc0_4_r10.c | 372 + .../libgfortran/generated/minloc0_4_r16.c | 372 + .../libgfortran/generated/minloc0_4_r4.c | 372 + .../libgfortran/generated/minloc0_4_r8.c | 372 + .../libgfortran/generated/minloc0_8_i1.c | 372 + .../libgfortran/generated/minloc0_8_i16.c | 372 + .../libgfortran/generated/minloc0_8_i2.c | 372 + .../libgfortran/generated/minloc0_8_i4.c | 372 + .../libgfortran/generated/minloc0_8_i8.c | 372 + .../libgfortran/generated/minloc0_8_r10.c | 372 + .../libgfortran/generated/minloc0_8_r16.c | 372 + .../libgfortran/generated/minloc0_8_r4.c | 372 + .../libgfortran/generated/minloc0_8_r8.c | 372 + .../libgfortran/generated/minloc1_16_i1.c | 557 + .../libgfortran/generated/minloc1_16_i16.c | 557 + .../libgfortran/generated/minloc1_16_i2.c | 557 + .../libgfortran/generated/minloc1_16_i4.c | 557 + .../libgfortran/generated/minloc1_16_i8.c | 557 + .../libgfortran/generated/minloc1_16_r10.c | 557 + .../libgfortran/generated/minloc1_16_r16.c | 557 + .../libgfortran/generated/minloc1_16_r4.c | 557 + .../libgfortran/generated/minloc1_16_r8.c | 557 + .../libgfortran/generated/minloc1_4_i1.c | 557 + .../libgfortran/generated/minloc1_4_i16.c | 557 + .../libgfortran/generated/minloc1_4_i2.c | 557 + .../libgfortran/generated/minloc1_4_i4.c | 557 + .../libgfortran/generated/minloc1_4_i8.c | 557 + .../libgfortran/generated/minloc1_4_r10.c | 557 + .../libgfortran/generated/minloc1_4_r16.c | 557 + .../libgfortran/generated/minloc1_4_r4.c | 557 + .../libgfortran/generated/minloc1_4_r8.c | 557 + .../libgfortran/generated/minloc1_8_i1.c | 557 + .../libgfortran/generated/minloc1_8_i16.c | 557 + .../libgfortran/generated/minloc1_8_i2.c | 557 + .../libgfortran/generated/minloc1_8_i4.c | 557 + .../libgfortran/generated/minloc1_8_i8.c | 557 + .../libgfortran/generated/minloc1_8_r10.c | 557 + .../libgfortran/generated/minloc1_8_r16.c | 557 + .../libgfortran/generated/minloc1_8_r4.c | 557 + .../libgfortran/generated/minloc1_8_r8.c | 557 + .../libgfortran/generated/minval_i1.c | 546 + .../libgfortran/generated/minval_i16.c | 546 + .../libgfortran/generated/minval_i2.c | 546 + .../libgfortran/generated/minval_i4.c | 546 + .../libgfortran/generated/minval_i8.c | 546 + .../libgfortran/generated/minval_r10.c | 546 + .../libgfortran/generated/minval_r16.c | 546 + .../libgfortran/generated/minval_r4.c | 546 + .../libgfortran/generated/minval_r8.c | 546 + .../libgfortran/generated/misc_specifics.F90 | 206 + .../libgfortran/generated/nearest_r10.c | 48 + .../libgfortran/generated/nearest_r16.c | 48 + .../libgfortran/generated/nearest_r4.c | 48 + .../libgfortran/generated/nearest_r8.c | 48 + .../libgfortran/generated/pack_c10.c | 315 + .../libgfortran/generated/pack_c16.c | 315 + .../gcc-4.4.0/libgfortran/generated/pack_c4.c | 315 + .../gcc-4.4.0/libgfortran/generated/pack_c8.c | 315 + .../gcc-4.4.0/libgfortran/generated/pack_i1.c | 315 + .../libgfortran/generated/pack_i16.c | 315 + .../gcc-4.4.0/libgfortran/generated/pack_i2.c | 315 + .../gcc-4.4.0/libgfortran/generated/pack_i4.c | 315 + .../gcc-4.4.0/libgfortran/generated/pack_i8.c | 315 + .../libgfortran/generated/pack_r10.c | 315 + .../libgfortran/generated/pack_r16.c | 315 + .../gcc-4.4.0/libgfortran/generated/pack_r4.c | 315 + .../gcc-4.4.0/libgfortran/generated/pack_r8.c | 315 + .../libgfortran/generated/pow_c10_i16.c | 75 + .../libgfortran/generated/pow_c10_i4.c | 75 + .../libgfortran/generated/pow_c10_i8.c | 75 + .../libgfortran/generated/pow_c16_i16.c | 75 + .../libgfortran/generated/pow_c16_i4.c | 75 + .../libgfortran/generated/pow_c16_i8.c | 75 + .../libgfortran/generated/pow_c4_i16.c | 75 + .../libgfortran/generated/pow_c4_i4.c | 75 + .../libgfortran/generated/pow_c4_i8.c | 75 + .../libgfortran/generated/pow_c8_i16.c | 75 + .../libgfortran/generated/pow_c8_i4.c | 75 + .../libgfortran/generated/pow_c8_i8.c | 75 + .../libgfortran/generated/pow_i16_i16.c | 77 + .../libgfortran/generated/pow_i16_i4.c | 77 + .../libgfortran/generated/pow_i16_i8.c | 77 + .../libgfortran/generated/pow_i4_i16.c | 77 + .../libgfortran/generated/pow_i4_i4.c | 77 + .../libgfortran/generated/pow_i4_i8.c | 77 + .../libgfortran/generated/pow_i8_i16.c | 77 + .../libgfortran/generated/pow_i8_i4.c | 77 + .../libgfortran/generated/pow_i8_i8.c | 77 + .../libgfortran/generated/pow_r10_i16.c | 75 + .../libgfortran/generated/pow_r10_i8.c | 75 + .../libgfortran/generated/pow_r16_i16.c | 75 + .../libgfortran/generated/pow_r16_i8.c | 75 + .../libgfortran/generated/pow_r4_i16.c | 75 + .../libgfortran/generated/pow_r4_i8.c | 75 + .../libgfortran/generated/pow_r8_i16.c | 75 + .../libgfortran/generated/pow_r8_i8.c | 75 + .../libgfortran/generated/product_c10.c | 545 + .../libgfortran/generated/product_c16.c | 545 + .../libgfortran/generated/product_c4.c | 545 + .../libgfortran/generated/product_c8.c | 545 + .../libgfortran/generated/product_i1.c | 545 + .../libgfortran/generated/product_i16.c | 545 + .../libgfortran/generated/product_i2.c | 545 + .../libgfortran/generated/product_i4.c | 545 + .../libgfortran/generated/product_i8.c | 545 + .../libgfortran/generated/product_r10.c | 545 + .../libgfortran/generated/product_r16.c | 545 + .../libgfortran/generated/product_r4.c | 545 + .../libgfortran/generated/product_r8.c | 545 + .../libgfortran/generated/reshape_c10.c | 352 + .../libgfortran/generated/reshape_c16.c | 352 + .../libgfortran/generated/reshape_c4.c | 352 + .../libgfortran/generated/reshape_c8.c | 352 + .../libgfortran/generated/reshape_i16.c | 352 + .../libgfortran/generated/reshape_i4.c | 352 + .../libgfortran/generated/reshape_i8.c | 352 + .../libgfortran/generated/reshape_r10.c | 352 + .../libgfortran/generated/reshape_r16.c | 352 + .../libgfortran/generated/reshape_r4.c | 352 + .../libgfortran/generated/reshape_r8.c | 352 + .../libgfortran/generated/rrspacing_r10.c | 51 + .../libgfortran/generated/rrspacing_r16.c | 51 + .../libgfortran/generated/rrspacing_r4.c | 51 + .../libgfortran/generated/rrspacing_r8.c | 51 + .../libgfortran/generated/set_exponent_r10.c | 41 + .../libgfortran/generated/set_exponent_r16.c | 41 + .../libgfortran/generated/set_exponent_r4.c | 41 + .../libgfortran/generated/set_exponent_r8.c | 41 + .../libgfortran/generated/shape_i16.c | 57 + .../libgfortran/generated/shape_i4.c | 57 + .../libgfortran/generated/shape_i8.c | 57 + .../libgfortran/generated/spacing_r10.c | 50 + .../libgfortran/generated/spacing_r16.c | 50 + .../libgfortran/generated/spacing_r4.c | 50 + .../libgfortran/generated/spacing_r8.c | 50 + .../libgfortran/generated/spread_c10.c | 273 + .../libgfortran/generated/spread_c16.c | 273 + .../libgfortran/generated/spread_c4.c | 273 + .../libgfortran/generated/spread_c8.c | 273 + .../libgfortran/generated/spread_i1.c | 273 + .../libgfortran/generated/spread_i16.c | 273 + .../libgfortran/generated/spread_i2.c | 273 + .../libgfortran/generated/spread_i4.c | 273 + .../libgfortran/generated/spread_i8.c | 273 + .../libgfortran/generated/spread_r10.c | 273 + .../libgfortran/generated/spread_r16.c | 273 + .../libgfortran/generated/spread_r4.c | 273 + .../libgfortran/generated/spread_r8.c | 273 + .../gcc-4.4.0/libgfortran/generated/sum_c10.c | 545 + .../gcc-4.4.0/libgfortran/generated/sum_c16.c | 545 + .../gcc-4.4.0/libgfortran/generated/sum_c4.c | 545 + .../gcc-4.4.0/libgfortran/generated/sum_c8.c | 545 + .../gcc-4.4.0/libgfortran/generated/sum_i1.c | 545 + .../gcc-4.4.0/libgfortran/generated/sum_i16.c | 545 + .../gcc-4.4.0/libgfortran/generated/sum_i2.c | 545 + .../gcc-4.4.0/libgfortran/generated/sum_i4.c | 545 + .../gcc-4.4.0/libgfortran/generated/sum_i8.c | 545 + .../gcc-4.4.0/libgfortran/generated/sum_r10.c | 545 + .../gcc-4.4.0/libgfortran/generated/sum_r16.c | 545 + .../gcc-4.4.0/libgfortran/generated/sum_r4.c | 545 + .../gcc-4.4.0/libgfortran/generated/sum_r8.c | 545 + .../libgfortran/generated/transpose_c10.c | 116 + .../libgfortran/generated/transpose_c16.c | 116 + .../libgfortran/generated/transpose_c4.c | 116 + .../libgfortran/generated/transpose_c8.c | 116 + .../libgfortran/generated/transpose_i16.c | 116 + .../libgfortran/generated/transpose_i4.c | 116 + .../libgfortran/generated/transpose_i8.c | 116 + .../libgfortran/generated/transpose_r10.c | 116 + .../libgfortran/generated/transpose_r16.c | 116 + .../libgfortran/generated/transpose_r4.c | 116 + .../libgfortran/generated/transpose_r8.c | 116 + .../libgfortran/generated/unpack_c10.c | 333 + .../libgfortran/generated/unpack_c16.c | 333 + .../libgfortran/generated/unpack_c4.c | 333 + .../libgfortran/generated/unpack_c8.c | 333 + .../libgfortran/generated/unpack_i1.c | 333 + .../libgfortran/generated/unpack_i16.c | 333 + .../libgfortran/generated/unpack_i2.c | 333 + .../libgfortran/generated/unpack_i4.c | 333 + .../libgfortran/generated/unpack_i8.c | 333 + .../libgfortran/generated/unpack_r10.c | 333 + .../libgfortran/generated/unpack_r16.c | 333 + .../libgfortran/generated/unpack_r4.c | 333 + .../libgfortran/generated/unpack_r8.c | 333 + .../gcc-4.4.0/libgfortran/gfortran.map | 1223 + .../libgfortran/intrinsics/.DS_Store | Bin 0 -> 15364 bytes .../gcc-4.4.0/libgfortran/intrinsics/abort.c | 35 + .../gcc-4.4.0/libgfortran/intrinsics/access.c | 90 + .../gcc-4.4.0/libgfortran/intrinsics/args.c | 271 + .../libgfortran/intrinsics/associated.c | 58 + .../libgfortran/intrinsics/c99_functions.c | 1745 + .../gcc-4.4.0/libgfortran/intrinsics/chdir.c | 111 + .../gcc-4.4.0/libgfortran/intrinsics/chmod.c | 120 + .../gcc-4.4.0/libgfortran/intrinsics/clock.c | 72 + .../libgfortran/intrinsics/cpu_time.c | 137 + .../libgfortran/intrinsics/cshift0.c | 432 + .../gcc-4.4.0/libgfortran/intrinsics/ctime.c | 154 + .../libgfortran/intrinsics/date_and_time.c | 692 + .../libgfortran/intrinsics/dprod_r8.f90 | 32 + .../gcc-4.4.0/libgfortran/intrinsics/dtime.c | 81 + .../gcc-4.4.0/libgfortran/intrinsics/env.c | 195 + .../libgfortran/intrinsics/eoshift0.c | 286 + .../libgfortran/intrinsics/eoshift2.c | 314 + .../libgfortran/intrinsics/erfc_scaled.c | 52 + .../libgfortran/intrinsics/erfc_scaled_inc.c | 184 + .../gcc-4.4.0/libgfortran/intrinsics/etime.c | 72 + .../gcc-4.4.0/libgfortran/intrinsics/exit.c | 52 + .../libgfortran/intrinsics/f2c_specifics.F90 | 197 + .../gcc-4.4.0/libgfortran/intrinsics/fnum.c | 48 + .../gcc-4.4.0/libgfortran/intrinsics/gerror.c | 58 + .../gcc-4.4.0/libgfortran/intrinsics/getXid.c | 67 + .../gcc-4.4.0/libgfortran/intrinsics/getcwd.c | 83 + .../gcc-4.4.0/libgfortran/intrinsics/getlog.c | 99 + .../gcc-4.4.0/libgfortran/intrinsics/hostnm.c | 144 + .../gcc-4.4.0/libgfortran/intrinsics/ierrno.c | 49 + .../gcc-4.4.0/libgfortran/intrinsics/ishftc.c | 100 + .../libgfortran/intrinsics/iso_c_binding.c | 177 + .../libgfortran/intrinsics/iso_c_binding.h | 55 + .../intrinsics/iso_c_generated_procs.c | 466 + .../gcc-4.4.0/libgfortran/intrinsics/kill.c | 94 + .../gcc-4.4.0/libgfortran/intrinsics/link.c | 131 + .../gcc-4.4.0/libgfortran/intrinsics/malloc.c | 49 + .../libgfortran/intrinsics/move_alloc.c | 69 + .../gcc-4.4.0/libgfortran/intrinsics/mvbits.c | 86 + .../libgfortran/intrinsics/pack_generic.c | 690 + .../gcc-4.4.0/libgfortran/intrinsics/perror.c | 55 + .../gcc-4.4.0/libgfortran/intrinsics/rand.c | 136 + .../gcc-4.4.0/libgfortran/intrinsics/random.c | 797 + .../gcc-4.4.0/libgfortran/intrinsics/rename.c | 125 + .../libgfortran/intrinsics/reshape_generic.c | 380 + .../libgfortran/intrinsics/reshape_packed.c | 49 + .../intrinsics/selected_char_kind.c | 46 + .../intrinsics/selected_int_kind.f90 | 46 + .../intrinsics/selected_real_kind.f90 | 64 + .../gcc-4.4.0/libgfortran/intrinsics/signal.c | 243 + .../gcc-4.4.0/libgfortran/intrinsics/size.c | 61 + .../gcc-4.4.0/libgfortran/intrinsics/sleep.c | 67 + .../libgfortran/intrinsics/spread_generic.c | 617 + .../gcc-4.4.0/libgfortran/intrinsics/stat.c | 549 + .../intrinsics/string_intrinsics.c | 80 + .../intrinsics/string_intrinsics_inc.c | 413 + .../gcc-4.4.0/libgfortran/intrinsics/symlnk.c | 131 + .../gcc-4.4.0/libgfortran/intrinsics/system.c | 64 + .../libgfortran/intrinsics/system_clock.c | 192 + .../gcc-4.4.0/libgfortran/intrinsics/time.c | 64 + .../gcc-4.4.0/libgfortran/intrinsics/time_1.h | 136 + .../intrinsics/transpose_generic.c | 149 + .../gcc-4.4.0/libgfortran/intrinsics/umask.c | 93 + .../gcc-4.4.0/libgfortran/intrinsics/unlink.c | 91 + .../libgfortran/intrinsics/unpack_generic.c | 560 + .../examples/gcc-4.4.0/libgfortran/io/close.c | 101 + .../examples/gcc-4.4.0/libgfortran/io/fbuf.c | 159 + .../gcc-4.4.0/libgfortran/io/file_pos.c | 404 + .../gcc-4.4.0/libgfortran/io/format.c | 1179 + .../gcc-4.4.0/libgfortran/io/inquire.c | 661 + .../gcc-4.4.0/libgfortran/io/intrinsics.c | 387 + .../examples/gcc-4.4.0/libgfortran/io/io.h | 1023 + .../gcc-4.4.0/libgfortran/io/list_read.c | 2922 ++ .../examples/gcc-4.4.0/libgfortran/io/lock.c | 65 + .../examples/gcc-4.4.0/libgfortran/io/open.c | 857 + .../examples/gcc-4.4.0/libgfortran/io/read.c | 1080 + .../gcc-4.4.0/libgfortran/io/size_from_kind.c | 83 + .../gcc-4.4.0/libgfortran/io/transfer.c | 3264 ++ .../examples/gcc-4.4.0/libgfortran/io/unit.c | 763 + .../examples/gcc-4.4.0/libgfortran/io/unix.c | 2049 + .../examples/gcc-4.4.0/libgfortran/io/write.c | 1506 + .../gcc-4.4.0/libgfortran/io/write_float.def | 854 + .../gcc-4.4.0/libgfortran/libgfortran.h | 1273 + .../gcc-4.4.0/libgfortran/libtool-version | 6 + .../examples/gcc-4.4.0/libgfortran/m4/all.m4 | 44 + .../examples/gcc-4.4.0/libgfortran/m4/any.m4 | 44 + .../gcc-4.4.0/libgfortran/m4/count.m4 | 40 + .../gcc-4.4.0/libgfortran/m4/cshift0.m4 | 172 + .../gcc-4.4.0/libgfortran/m4/cshift1.m4 | 257 + .../gcc-4.4.0/libgfortran/m4/eoshift1.m4 | 297 + .../gcc-4.4.0/libgfortran/m4/eoshift3.m4 | 316 + .../gcc-4.4.0/libgfortran/m4/exponent.m4 | 43 + .../gcc-4.4.0/libgfortran/m4/fraction.m4 | 42 + .../examples/gcc-4.4.0/libgfortran/m4/head.m4 | 25 + .../gcc-4.4.0/libgfortran/m4/iforeach.m4 | 334 + .../gcc-4.4.0/libgfortran/m4/ifunction.m4 | 542 + .../libgfortran/m4/ifunction_logical.m4 | 210 + .../gcc-4.4.0/libgfortran/m4/in_pack.m4 | 122 + .../gcc-4.4.0/libgfortran/m4/in_unpack.m4 | 110 + .../gcc-4.4.0/libgfortran/m4/iparm.m4 | 35 + .../gcc-4.4.0/libgfortran/m4/matmul.m4 | 381 + .../gcc-4.4.0/libgfortran/m4/matmull.m4 | 244 + .../gcc-4.4.0/libgfortran/m4/maxloc0.m4 | 61 + .../gcc-4.4.0/libgfortran/m4/maxloc1.m4 | 58 + .../gcc-4.4.0/libgfortran/m4/maxval.m4 | 47 + .../gcc-4.4.0/libgfortran/m4/minloc0.m4 | 61 + .../gcc-4.4.0/libgfortran/m4/minloc1.m4 | 58 + .../gcc-4.4.0/libgfortran/m4/minval.m4 | 47 + .../libgfortran/m4/misc_specifics.m4 | 64 + .../gcc-4.4.0/libgfortran/m4/mtype.m4 | 6 + .../gcc-4.4.0/libgfortran/m4/nearest.m4 | 49 + .../examples/gcc-4.4.0/libgfortran/m4/pack.m4 | 316 + .../examples/gcc-4.4.0/libgfortran/m4/pow.m4 | 83 + .../gcc-4.4.0/libgfortran/m4/product.m4 | 46 + .../gcc-4.4.0/libgfortran/m4/reshape.m4 | 356 + .../gcc-4.4.0/libgfortran/m4/rrspacing.m4 | 52 + .../gcc-4.4.0/libgfortran/m4/set_exponent.m4 | 42 + .../gcc-4.4.0/libgfortran/m4/shape.m4 | 58 + .../gcc-4.4.0/libgfortran/m4/spacing.m4 | 51 + .../gcc-4.4.0/libgfortran/m4/specific.m4 | 43 + .../gcc-4.4.0/libgfortran/m4/specific2.m4 | 30 + .../gcc-4.4.0/libgfortran/m4/spread.m4 | 274 + .../examples/gcc-4.4.0/libgfortran/m4/sum.m4 | 46 + .../gcc-4.4.0/libgfortran/m4/transpose.m4 | 117 + .../gcc-4.4.0/libgfortran/m4/types.m4 | 4 + .../gcc-4.4.0/libgfortran/m4/unpack.m4 | 334 + .../gcc-4.4.0/libgfortran/mk-kinds-h.sh | 92 + .../gcc-4.4.0/libgfortran/mk-sik-inc.sh | 34 + .../gcc-4.4.0/libgfortran/mk-srk-inc.sh | 34 + .../gcc-4.4.0/libgfortran/runtime/backtrace.c | 326 + .../libgfortran/runtime/compile_options.c | 197 + .../libgfortran/runtime/convert_char.c | 69 + .../gcc-4.4.0/libgfortran/runtime/environ.c | 837 + .../gcc-4.4.0/libgfortran/runtime/error.c | 532 + .../gcc-4.4.0/libgfortran/runtime/fpu.c | 16 + .../libgfortran/runtime/in_pack_generic.c | 206 + .../libgfortran/runtime/in_unpack_generic.c | 225 + .../gcc-4.4.0/libgfortran/runtime/main.c | 175 + .../gcc-4.4.0/libgfortran/runtime/memory.c | 68 + .../gcc-4.4.0/libgfortran/runtime/pause.c | 71 + .../gcc-4.4.0/libgfortran/runtime/select.c | 46 + .../libgfortran/runtime/select_inc.c | 133 + .../gcc-4.4.0/libgfortran/runtime/stop.c | 55 + .../gcc-4.4.0/libgfortran/runtime/string.c | 123 + .../spec/examples/gcc-fortran-4.4.0.tar.gz | Bin 0 -> 1923874 bytes .../spec/f77/13 FORMAT SPECIFICATION.htm | 49 + 750 files changed, 400961 insertions(+) create mode 100644 pyne/fortranformat/FortranRecordReader.py create mode 100644 pyne/fortranformat/FortranRecordWriter.py create mode 100644 pyne/fortranformat/__init__.py create mode 100644 pyne/fortranformat/_edit_descriptors.py create mode 100644 pyne/fortranformat/_exceptions.py create mode 100644 pyne/fortranformat/_input.py create mode 100644 pyne/fortranformat/_lexer.py create mode 100644 pyne/fortranformat/_misc.py create mode 100644 pyne/fortranformat/_output.py create mode 100644 pyne/fortranformat/_parser.py create mode 100644 pyne/fortranformat/check_version.txt create mode 100644 pyne/fortranformat/config.py create mode 100644 pyne/fortranformat/spec/examples/Note.txt create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2002 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2003 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2004 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2005 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2006 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2007 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog-2008 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ChangeLog.ptr create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/Make-lang.in create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/arith.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/arith.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/array.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/bbt.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/check.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/config-lang.in create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/convert.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/cpp.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/cpp.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/data.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/data.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/decl.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/dependency.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/dependency.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/dump-parse-tree.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/error.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/expr.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/f95-lang.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfc-internals.texi create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortran.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortran.info create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortran.texi create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/gfortranspec.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/interface.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/intrinsic.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/intrinsic.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/intrinsic.texi create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/invoke.texi create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/io.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/ioparm.def create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/iresolve.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/iso-c-binding.def create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/iso-fortran-env.def create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/lang-specs.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/lang.opt create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/libgfortran.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/match.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/match.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/matchexp.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/mathbuiltins.def create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/misc.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/module.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/openmp.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/options.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/parse.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/parse.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/primary.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/resolve.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/scanner.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/simplify.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/st.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/symbol.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/target-memory.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/target-memory.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-array.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-array.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-common.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-const.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-const.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-decl.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-expr.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-intrinsic.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-io.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-openmp.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-stmt.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-stmt.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-types.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans-types.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/trans.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/gcc/fortran/types.def create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2002 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2003 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2004 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2005 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2006 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/ChangeLog-2007 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/Makefile.am create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/Makefile.in create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/acinclude.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/aclocal.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/c99_protos.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config.h.in create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/.DS_Store create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-387.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-aix.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-generic.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-glibc.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/config/fpu-sysv.h create mode 100755 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/configure create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/configure.ac create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/configure.host create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/fmain.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/.DS_Store create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_c8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_i16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_i4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_i8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_abs_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acos_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_acosh_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aimag_c8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_aint_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_anint_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asin_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_asinh_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan2_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atan_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_atanh_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_conjg_c8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_c8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cos_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_cosh_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_i16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_i4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_i8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_dim_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_c8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_exp_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log10_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_c8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_log_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_i16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_i4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_i8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_mod_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_i16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_i4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_i8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sign_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_c8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sin_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sinh_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_c8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_sqrt_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tan_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r10.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r16.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r4.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/_tanh_r8.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/all_l8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/any_l8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_16_l.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_1_l.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_2_l.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_4_l.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/count_8_l.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_c8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift0_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift1_16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift1_4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/cshift1_8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift1_16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift1_4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift1_8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift3_16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift3_4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/eoshift3_8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/exponent_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/fraction_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_c8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_pack_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_c8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/in_unpack_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_c8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_l16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_l4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_l8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/matmul_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_16_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_16_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_16_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_16_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_16_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_16_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_16_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_16_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_16_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_4_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_4_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_4_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_4_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_4_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_4_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_4_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_4_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_4_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_8_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_8_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_8_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_8_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_8_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_8_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_8_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_8_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc0_8_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_16_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_4_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxloc1_8_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/maxval_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_16_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_16_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_16_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_16_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_16_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_16_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_16_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_16_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_16_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_4_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_4_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_4_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_4_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_4_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_4_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_4_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_4_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_4_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_8_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_8_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_8_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_8_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_8_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_8_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_8_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_8_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc0_8_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_16_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_4_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minloc1_8_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/minval_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/misc_specifics.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/nearest_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_c8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pack_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c10_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c10_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c10_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c16_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c16_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c16_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c4_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c4_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c4_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c8_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c8_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_c8_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i16_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i16_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i16_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i4_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i4_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i4_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i8_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i8_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_i8_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r10_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r10_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r16_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r16_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r4_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r4_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r8_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/pow_r8_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_c8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/product_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_c8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/reshape_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/rrspacing_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/set_exponent_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/shape_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/shape_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/shape_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spacing_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_c8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/spread_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_c8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/sum_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_c8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/transpose_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_c8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i1.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_i8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r10.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r16.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r4.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/generated/unpack_r8.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/gfortran.map create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/.DS_Store create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/abort.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/access.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/args.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/associated.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/c99_functions.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/chdir.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/chmod.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/clock.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/cpu_time.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/cshift0.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/ctime.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/date_and_time.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/dprod_r8.f90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/dtime.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/env.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/eoshift0.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/eoshift2.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/erfc_scaled.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/erfc_scaled_inc.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/etime.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/exit.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/f2c_specifics.F90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/fnum.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/gerror.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/getXid.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/getcwd.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/getlog.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/hostnm.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/ierrno.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/ishftc.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/iso_c_binding.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/iso_c_binding.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/iso_c_generated_procs.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/kill.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/link.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/malloc.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/move_alloc.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/mvbits.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/pack_generic.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/perror.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/rand.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/random.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/rename.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/reshape_generic.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/reshape_packed.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/selected_char_kind.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/selected_int_kind.f90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/selected_real_kind.f90 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/signal.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/size.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/sleep.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/spread_generic.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/stat.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/string_intrinsics.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/string_intrinsics_inc.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/symlnk.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/system.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/system_clock.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/time.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/time_1.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/transpose_generic.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/umask.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/unlink.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/intrinsics/unpack_generic.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/close.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/fbuf.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/file_pos.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/format.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/inquire.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/intrinsics.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/io.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/list_read.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/lock.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/open.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/read.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/size_from_kind.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/transfer.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/unit.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/unix.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/write.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/io/write_float.def create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/libgfortran.h create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/libtool-version create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/all.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/any.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/count.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/cshift0.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/cshift1.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/eoshift1.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/eoshift3.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/exponent.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/fraction.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/head.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/iforeach.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/ifunction.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/ifunction_logical.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/in_pack.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/in_unpack.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/iparm.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/matmul.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/matmull.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/maxloc0.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/maxloc1.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/maxval.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/minloc0.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/minloc1.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/minval.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/misc_specifics.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/mtype.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/nearest.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/pack.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/pow.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/product.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/reshape.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/rrspacing.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/set_exponent.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/shape.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/spacing.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/specific.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/specific2.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/spread.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/sum.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/transpose.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/types.m4 create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/m4/unpack.m4 create mode 100755 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/mk-kinds-h.sh create mode 100755 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/mk-sik-inc.sh create mode 100755 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/mk-srk-inc.sh create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/backtrace.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/compile_options.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/convert_char.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/environ.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/error.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/fpu.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/in_pack_generic.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/in_unpack_generic.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/main.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/memory.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/pause.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/select.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/select_inc.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/stop.c create mode 100644 pyne/fortranformat/spec/examples/gcc-4.4.0/libgfortran/runtime/string.c create mode 100644 pyne/fortranformat/spec/examples/gcc-fortran-4.4.0.tar.gz create mode 100644 pyne/fortranformat/spec/f77/13 FORMAT SPECIFICATION.htm diff --git a/pyne/fortranformat/FortranRecordReader.py b/pyne/fortranformat/FortranRecordReader.py new file mode 100644 index 0000000000..425671955b --- /dev/null +++ b/pyne/fortranformat/FortranRecordReader.py @@ -0,0 +1,73 @@ +import sys +IS_PYTHON3 = sys.version_info[0] >= 3 + +if IS_PYTHON3: + exec('from ._input import input as _input') + exec('from ._parser import parser as _parser') + exec('from ._lexer import lexer as _lexer') +else: + exec('from _input import input as _input') + exec('from _parser import parser as _parser') + exec('from _lexer import lexer as _lexer') + +class FortranRecordReader(object): + ''' + Generate a reader object for FORTRAN format strings + + Typical use case ... + + >>> header_line = FortranRecordReader('(A15, A15, A15)') + >>> header_line.read(' x y z') + [' x', ' y', ' z'] + >>> line = FortranRecordReader('(3F15.3)') + >>> line.read(' 1.000 0.000 0.500') + [1.0, 0.0, 0.5] + >>> line.read(' 1.100 0.100 0.600') + [1.1, 0.1, 0.6] + + Note: it is best to create a new object for each format, changing the format + causes the parser to reevalute the format string which is costly in terms of + performance + ''' + + def __init__(self, format): + self.format = format + self._eds = [] + self._rev_eds = [] + self._parse_format() + + def __eq__(self, other): + if isinstance(other, FortranRecordReader): + return self.format == other.format + else: + return object.__eq__(self, other) + + def match(self, record): + try: + self.read(record) + except RecordError: + return False + else: + return True + + def read(self, record): + ''' + Pass a string representing a FORTRAN record to obtain the relevent + values + ''' + return _input(self._eds, self._rev_eds, record) + + def get_format(self): + return self._format + def set_format(self, format): + self._format = format + self._parse_format() + format = property(get_format, set_format) + + def _parse_format(self): + self._eds, self._rev_eds = _parser(_lexer(self.format)) + + +if __name__ == '__main__': + import doctest + doctest.testmod() diff --git a/pyne/fortranformat/FortranRecordWriter.py b/pyne/fortranformat/FortranRecordWriter.py new file mode 100644 index 0000000000..4548789692 --- /dev/null +++ b/pyne/fortranformat/FortranRecordWriter.py @@ -0,0 +1,66 @@ +import sys +IS_PYTHON3 = sys.version_info[0] >= 3 + +if IS_PYTHON3: + exec('from ._output import output as _output') + exec('from ._lexer import lexer as _lexer') + exec('from ._parser import parser as _parser') +else: + exec('from _output import output as _output') + exec('from _lexer import lexer as _lexer') + exec('from _parser import parser as _parser') + +class FortranRecordWriter(object): + ''' + Generate a writer object for FORTRAN format strings + + Typical use case ... + + >>> header_line = FortranRecordWriter('(A15, A15, A15)') + >>> header_line.write(['x', 'y', 'z']) + ' x y z' + >>> line = FortranRecordWriter('(3F15.3)') + >>> line.write([1.0, 0.0, 0.5]) + ' 1.000 0.000 0.500' + >>> line.write([1.1, 0.1, 0.6]) + ' 1.100 0.100 0.600' + + Note: it is best to create a new object for each format, changing the format + causes the parser to reevalute the format string which is costly in terms of + performance + ''' + def __init__(self, format): + self._eds = [] + self._rev_eds = [] + self.format = format + + def __eq__(self, other): + if isinstance(other, FortranRecordWriter): + return self.format == other.format + else: + return object.__eq__(self, other) + + def write(self, values): + ''' + Pass a list of values correspoding to the FORTRAN format specified + to generate a string + ''' + return _output(self._eds, self._rev_eds, values) + + def get_format(self): + return self._format + + def set_format(self, format): + self._format = format + self._parse_format() + + format = property(get_format, set_format) + + def _parse_format(self): + self._eds, self._rev_eds = _parser(_lexer(self.format)) + + +if __name__ == '__main__': + import doctest + doctest.testmod() + diff --git a/pyne/fortranformat/__init__.py b/pyne/fortranformat/__init__.py new file mode 100644 index 0000000000..1836b54675 --- /dev/null +++ b/pyne/fortranformat/__init__.py @@ -0,0 +1,15 @@ +__version__ = '0.2.5' + +import sys +IS_PYTHON3 = sys.version_info[0] >= 3 + +if IS_PYTHON3: + exec('from .FortranRecordReader import FortranRecordReader') + exec('from .FortranRecordWriter import FortranRecordWriter') + exec('from . import config') +else: + exec('from FortranRecordReader import FortranRecordReader') + exec('from FortranRecordWriter import FortranRecordWriter') + exec('import config') + + diff --git a/pyne/fortranformat/_edit_descriptors.py b/pyne/fortranformat/_edit_descriptors.py new file mode 100644 index 0000000000..2f89a3b0e2 --- /dev/null +++ b/pyne/fortranformat/_edit_descriptors.py @@ -0,0 +1,308 @@ +import sys +IS_PYTHON3 = sys.version_info[0] >= 3 + +if IS_PYTHON3: + exec('from ._exceptions import *') +else: + exec('from _exceptions import *') + + +def get_edit_descriptor_obj(name): + '''Returns a new object instance from a string''' + name = name.upper() + if name == 'A': + return A() + elif name == 'B': + return B() + elif name == 'BN': + return BN() + elif name == 'BZ': + return BZ() + elif name == ':': + return Colon() + elif name == 'D': + return D() + elif name == 'E': + return E() + elif name == 'EN': + return EN() + elif name == 'ES': + return ES() + elif name == 'F': + return F() + elif name == 'G': + return G() + elif name == 'H': + return H() + elif name == 'I': + return I() + elif name == 'L': + return L() + elif name == 'O': + return O() + elif name == 'P': + return P() + elif name =='S': + return S() + elif name == '/': + return Slash() + elif name == 'SP': + return SP() + elif name == 'SS': + return SS() + elif name == 'T': + return T() + elif name == 'TL': + return TL() + elif name == 'TR': + return TR() + elif name == 'X': + return X() + elif name == 'Z': + return Z() + else: + raise InvalidFormat('Expected an edit descriptor, got %s' % name) + +# All the tokens defined in the F77 specification unless specified + +class A(object): + def __init__(self): + self.repeat = None + self.width = None + def __repr__(self): + return '' + +class QuotedString(object): + def __init__(self, char_string=None): + self.char_string = char_string + def get_width(self): + return len(self.char_string) + width = property(get_width) + def __repr__(self): + return '' + +# Only in F95 +class B(object): + def __init__(self): + self.repeat = None + self.width = None + self.min_digits = None + def __repr__(self): + return '' + +class BN(object): + def __init__(self): + pass + def __repr__(self): + return '' + +class BZ(object): + def __init__(self): + pass + def __repr__(self): + return '' + +class Colon(object): + def __init__(self): + pass + def __repr__(self): + return '' + +class D(object): + def __init__(self): + self.repeat = None + self.width = None + self.decimal_places = None + def __repr__(self): + return '' + +class E(object): + def __init__(self): + self.repeat = None + self.width = None + self.decimal_places = None + self.exponent = None + def __repr__(self): + return '' + +# Only in F95 +class EN(object): + def __init__(self): + self.repeat = None + self.width = None + self.decimal_places = None + self.exponent = None + def __repr__(self): + return '' + +# Only in F95 +class ES(object): + def __init__(self): + self.repeat = None + self.width = None + self.decimal_places = None + self.exponent = None + def __repr__(self): + return '' + +class F(object): + def __init__(self): + self.repeat = None + self.width = None + self.decimal_places = None + def __repr__(self): + return '' + +class FormatGroup(object): + pass + +class G(object): + def __init__(self): + self.repeat = None + self.width = None + self.decimal_places = None + self.exponent = None + def __repr__(self): + return '' + +# Only in F77 +class H(object): + def __init__(self): + self.num_chars = None + self.char_string = None + def __repr__(self): + return '' + +class I(object): + def __init__(self): + self.repeat = None + self.width = None + self.min_digits = None + def __repr__(self): + return '' + +class L(object): + def __init__(self): + self.repeat = None + self.width = None + def __repr__(self): + return '' + +# Only in F95 +class O(object): + def __init__(self): + self.repeat = None + self.width = None + self.min_digits = None + def __repr__(self): + return '' + +class P(object): + def __init__(self): + self.scale = None + def __repr__(self): + return '

          R?Q(R?x5TZL{fT04_KLgDwIJM6xLEJ2mVdm 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 V=%ZDgemwJRXS9Mn;vKTA{{u0ngRuYr diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 1807b9f090..e00233acce 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -66,19 +66,6 @@ def test_gtol(): d_report = file_comp(input_dict['report_file'], ref_output_report, exceptions) cleanup_tmp() -def test_bldhst(): - create_tmp() - input_dict = {} - input_dict['input_file'] = 'ensdf_processing/bldhst/ref_bldhst_iccseq.dat' - input_dict['output_table_file'] = tmp_path + '/tmp_bldhst_icctbl.dat' - input_dict['output_index_file'] = tmp_path + '/tmp_bldhst_iccndx.dat' - output_dict = ensdf_processing.bldhst(input_dict) - ref_table = 'ensdf_processing/bldhst/ref_icctbl.dat' - ref_index = 'ensdf_processing/bldhst/ref_iccndx.dat' - d_table = file_comp(input_dict['output_table_file'], ref_table, []) - d_index = file_comp(input_dict['output_index_file'], ref_index, []) - cleanup_tmp() - def test_hsicc(): create_tmp() input_dict = {} @@ -182,7 +169,6 @@ def file_comp(file_out, file_ref, exceptions): gabs = test_gabs() delta = test_delta() gtol = test_gtol() - bldhst = test_bldhst() hsicc = test_hsicc() hsmrg = test_hsmrg() seqhst = test_seqhst() From 7508d2f07dcbc9d775d90fd052d2cce40c1bb49b Mon Sep 17 00:00:00 2001 From: josh Date: Tue, 26 Jan 2016 15:18:35 -0800 Subject: [PATCH 113/216] Removed old bldhst executable copying code --- setup.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/setup.py b/setup.py index 7db5eb437c..099f3852e6 100755 --- a/setup.py +++ b/setup.py @@ -179,7 +179,6 @@ def download_decay(): ALPHAD_H = os.path.join('build', 'src/alphad') DELTA_H = os.path.join('build', 'src/delta') GTOL_H = os.path.join('build', 'src/gtol') -BLDHST_H = os.path.join('build', 'src/bldhst') HSICC_H = os.path.join('build', 'src/hsicc') HSMRG_H = os.path.join('build', 'src/hsmrg') SEQHST_H = os.path.join('build', 'src/seqhst') @@ -197,7 +196,6 @@ def copy_ensdf_executables(exe_dest): ALPHAD_DEST = os.path.join(exe_dest, 'alphad') DELTA_DEST = os.path.join(exe_dest, 'delta') GTOL_DEST = os.path.join(exe_dest, 'gtol') - BLDHST_DEST = os.path.join(exe_dest, 'bldhst') HSICC_DEST = os.path.join(exe_dest, 'hsicc') HSMRG_DEST = os.path.join(exe_dest, 'hsmrg') SEQHST_DEST = os.path.join(exe_dest, 'seqhst') @@ -205,7 +203,6 @@ def copy_ensdf_executables(exe_dest): shutil.copy(ALPHAD_H, ALPHAD_DEST) shutil.copy(DELTA_H, DELTA_DEST) shutil.copy(GTOL_H, GTOL_DEST) - shutil.copy(BLDHST_H, BLDHST_DEST) shutil.copy(HSICC_H, HSICC_DEST) shutil.copy(HSMRG_H, HSMRG_DEST) shutil.copy(SEQHST_H, SEQHST_DEST) From 317ed13c9cc7b86a9e2b4c5296a0418df1873a47 Mon Sep 17 00:00:00 2001 From: josh Date: Wed, 27 Jan 2016 09:46:19 -0800 Subject: [PATCH 114/216] Updated docstrings to be numpydocstring compliant, and changed setup.py ensdf copying from longform to list --- pyne/ensdf_processing.py | 95 ++++++++++++++++++++++++---------------- setup.py | 43 +++++++++--------- 2 files changed, 79 insertions(+), 59 deletions(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index b39faaa118..13ab293800 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -44,12 +44,16 @@ def alphad(inputdict_unchecked): This function calculates the alpha hinderance factors and theoretical half lives for even even ground state transitions. (alphad readme) - Input Dictionary Required Key Pair Value: - ensdf_input_file : input file - output_file : file for output to be written to (doesn't have to exist) + Parameters + ---------- + Input_dictionary : dictionary + dictionary that must have the following key-pair values: + ensdf_input_file : input file + output_file : file for output to be written to (doesn't have to exist) - Output Dictionary Values: - Everything in input dictionary is returned if ALPHAD completes successfully. + Notes + ----- + Everything in input dictionary is returned if ALPHAD completes successfully. Full documentation explaining the details of the functionality and physics behind ALPHAD can be found at: @@ -78,13 +82,17 @@ def gabs(inputdict_unchecked): """ This program calculates Gamma-ray absolute intensity and normalization (GABS readme) - Input Dictionary Required Key Pair Value: - input_file : input ensdf file - dataset_file : dataset file to be used - output file : file for output to be written to (doesn't have to exist) - - Output Dictionary Values: - Everything in input dictionary is returned if GABS completes successfully. + Parameters + ---------- + Input_dictionary : dictionary + dictionary that must have the following key-pair values: + input_file : input ensdf file + dataset_file : dataset file to be used + output file : file for output to be written to (doesn't have to exist) + + Notes + ----- + Everything in input dictionary is returned if GABS completes successfully. """ exe_path = path_to_exe('gabs') @@ -110,14 +118,18 @@ def logft(inputdict_unchecked): This program calculates log ft values for beta and electron-capture decay, average beta energies, and capture fractions. (LOGFT readme) - Input Dictionary Required Key Pair Value: - input_data_set : path to input data file. - output_report : desired path to output report file. - data_table : path to data table. - output_data_set : desired path to output data set. - - Output Dictionary Values: - Everything in input dictionary is returned if LOGFT completes successfully. + Parameters + ---------- + Input_dictionary : dictionary + dictionary that must have the following key-pair values: + input_data_set : path to input data file. + output_report : desired path to output report file. + data_table : path to data table. + output_data_set : desired path to output data set. + + Notes + ----- + Everything in input dictionary is returned if LOGFT completes successfully. """ inputdict = {} input_data_set = inputdict_unchecked['input_data_set'] @@ -136,18 +148,23 @@ def logft(inputdict_unchecked): def radd(inputdict_unchecked): """ This code (RadD.FOR) deduces the radius parameter (r 0 ) for odd-odd and odd-A nuclei - using the even-even radii [1] as input parameters. These radii deduced for odd-A and - odd-odd nuclides can be used in the calculation of alpha hindrance factors. In this - procedure, it is assumed that radius parameter ( r 0 Z , N ) for odd-Z and odd-N - nuclides lies midway between the radius parameters of adjacent even-even neighbors - calculates reduced transition probabilities. (RADD readme) - - Input Dictionary Required Key Pair Value: - input_file : input ensdf file - output file : file for output to be written to (doesn't have to exist) - - Output Dictionary Values: - Everything in input dictionary is returned if RADD completes successfully. + using the even-even radii [1] as input parameters. + + These radii deduced for odd-A and odd-odd nuclides can be used in the calculation of + alpha hindrance factors. In this procedure, it is assumed that radius parameter + ( r 0 Z , N ) for odd-Z and odd-N nuclides lies midway between the radius parameters of + adjacent even-even neighbors calculates reduced transition probabilities. (RADD readme) + + Parameters + ---------- + Input_dictionary : dictionary + dictionary that must have the following key-pair values: + input_file : input ensdf file + output file : file for output to be written to (doesn't have to exist) + + Notes + ----- + Everything in input dictionary is returned if RADD completes successfully. """ inputdict = {} atomic_number = inputdict_unchecked['atomic_number'] @@ -186,12 +203,16 @@ def ruler(inputdict_unchecked): """ This program calculates reduced transition probabilities. (RULER readme) - Input Dictionary Required Key Pair Value: - input_file : input ensdf file - output file : file for output to be written to (doesn't have to exist) + Parameters + ---------- + Input_dictionary : dictionary + dictionary that must have the following key-pair values: + input_file : input ensdf file + output file : file for output to be written to (doesn't have to exist) - Output Dictionary Values: - Everything in input dictionary is returned if RULER completes successfully. + Notes + ----- + Everything in input dictionary is returned if RULER completes successfully. """ inputdict = {} input_file = inputdict_unchecked['input_file'] diff --git a/setup.py b/setup.py index e6dfb2db85..70ee5176dd 100755 --- a/setup.py +++ b/setup.py @@ -176,12 +176,10 @@ def download_decay(): durl.close() return True -ALPHAD_H = os.path.join('build', 'src/alphad') -LOGFT_H = os.path.join('build', 'src/logft') -RADD_H = os.path.join('build', 'src/radd') -RADD_98AK04_H = os.path.join('src', 'ensdf_processing/RADD/98AK04.in') -RADD_ELE_H = os.path.join('src', 'ensdf_processing/RADD/ELE.in') -RULER_H = os.path.join('build', 'src/ruler') +local_ensdf_evaluators = ['alphad', 'logft', 'radd', 'ruler'] +local_ensdf_tools = [['ensdf_processing/RADD/98AK04.in', '98AK04.in'], + ['ensdf_processing/RADD/ELE.in', 'ELE.in']] + def copy_ensdf_executables(exe_dest): print('Copying ENSDF Executables to install directory') @@ -193,22 +191,23 @@ def copy_ensdf_executables(exe_dest): if re.match('pyne', f): exe_dest = exe_dest + '/' + f exe_dest = exe_dest + '/pyne' - ALPHAD_DEST = os.path.join(exe_dest, 'alphad') - LOGFT_DEST = os.path.join(exe_dest, 'logft') - RADD_DEST = os.path.join(exe_dest, 'radd') - RADD_98AK04_DEST = os.path.join(exe_dest, '98AK04.in') - RADD_ELE_DEST = os.path.join(exe_dest, 'ELE.in') - RULER_DEST = os.path.join(exe_dest, 'ruler') - try: - shutil.copy(ALPHAD_H, ALPHAD_DEST) - shutil.copy(LOGFT_H, LOGFT_DEST) - shutil.copy(RADD_H, RADD_DEST) - shutil.copy(RADD_98AK04_H, RADD_98AK04_DEST) - shutil.copy(RADD_ELE_H, RADD_ELE_DEST) - shutil.copy(RULER_H, RULER_DEST) - except Exception: - print('Some ENSDF processing executables were unable to be copied to the \ - install directory.') + for tool in local_ensdf_evaluators: + try: + local_path = os.path.join('build',os.path.join('src',tool)) + dest_path = os.path.join(exe_dest, tool) + shutil.copy(local_path, dest_path) + except Exception: + print('Some ENSDF processing executables were unable to be copied to the \ + install directory.') + + for tool in local_ensdf_tools: + try: + local_path = os.path.join('src', tool[0]) + dest_path = os.path.join(exe_dest, tool[1]) + shutil.copy(local_path, dest_path) + except Exception: + print('Some ENSDF processing executables were unable to be copied to the \ + install directory.') def generate_decay(): with indir('src'): From 1fae7535062f616e5263178280be9271fc59b9dc Mon Sep 17 00:00:00 2001 From: josh Date: Wed, 27 Jan 2016 15:41:31 -0800 Subject: [PATCH 115/216] Updated variable names to be PEP8 compliant, and used a context manager for writing radd output to file --- pyne/ensdf_processing.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 13ab293800..1a2946d166 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -172,16 +172,16 @@ def radd(inputdict_unchecked): output_file = inputdict_unchecked['output_file'] # Create symlinks to the two binaries the radd executables uses. - AK04_path = path_to_exe('98AK04.in') - ELE_path = path_to_exe('ELE.in') - AK04_set = False - ELE_set = False + ak04_path = path_to_exe('98AK04.in') + ele_path = path_to_exe('ELE.in') + ak04_set = False + ele_set = False if not os.path.exists('98AK04.in'): - os.symlink(AK04_path, '98AK04.in') - AK04_set = True + os.symlink(ak04_path, '98AK04.in') + ak04_set = True if not os.path.exists('ELE.in'): - os.symlink(ELE_path, 'ELE.in') - ELE_set = True + os.symlink(ele_path, 'ELE.in') + ele_set = True exe_path = path_to_exe('radd') inp = atomic_number + '\n' + neutron_number + '\n' + 'NO' + '\n' @@ -189,13 +189,12 @@ def radd(inputdict_unchecked): proc.stdin.write(inp.encode('utf-8')) radd_output = proc.communicate()[0] proc.stdin.close() - f = open(output_file, 'w') - f.write(radd_output.decode("utf-8")) - f.close() + with open(output_file, 'w') as f: + f.write(radd_output.decode("utf-8")) - if AK04_set: + if ak04_set: os.remove('98AK04.in') - if ELE_set: + if ele_set: os.remove('ELE.in') return inputdict_unchecked From cf37845d387abb95f3782141c1ab9e5af4f0d5b5 Mon Sep 17 00:00:00 2001 From: josh Date: Wed, 27 Jan 2016 15:45:54 -0800 Subject: [PATCH 116/216] Updated setup.py to remove excessive executable copying code, consolidated to array of executable paths --- setup.py | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/setup.py b/setup.py index 099f3852e6..22157fa057 100755 --- a/setup.py +++ b/setup.py @@ -176,12 +176,7 @@ def download_decay(): durl.close() return True -ALPHAD_H = os.path.join('build', 'src/alphad') -DELTA_H = os.path.join('build', 'src/delta') -GTOL_H = os.path.join('build', 'src/gtol') -HSICC_H = os.path.join('build', 'src/hsicc') -HSMRG_H = os.path.join('build', 'src/hsmrg') -SEQHST_H = os.path.join('build', 'src/seqhst') +local_ensdf_evaluators = ['alphad', 'delta', 'gtol', 'hsicc', 'hsmrg', 'seqhst'] def copy_ensdf_executables(exe_dest): print('Copying ENSDF Executables to install directory') @@ -193,22 +188,14 @@ def copy_ensdf_executables(exe_dest): if re.match('pyne', f): exe_dest = exe_dest + '/' + f exe_dest = exe_dest + '/pyne' - ALPHAD_DEST = os.path.join(exe_dest, 'alphad') - DELTA_DEST = os.path.join(exe_dest, 'delta') - GTOL_DEST = os.path.join(exe_dest, 'gtol') - HSICC_DEST = os.path.join(exe_dest, 'hsicc') - HSMRG_DEST = os.path.join(exe_dest, 'hsmrg') - SEQHST_DEST = os.path.join(exe_dest, 'seqhst') - try: - shutil.copy(ALPHAD_H, ALPHAD_DEST) - shutil.copy(DELTA_H, DELTA_DEST) - shutil.copy(GTOL_H, GTOL_DEST) - shutil.copy(HSICC_H, HSICC_DEST) - shutil.copy(HSMRG_H, HSMRG_DEST) - shutil.copy(SEQHST_H, SEQHST_DEST) - except Exception: - print('Some ENSDF processing executables were unable to be copied to the \ - install directory.') + for tool in local_ensdf_evaluators: + try: + local_path = os.path.join('build',os.path.join('src',tool)) + dest_path = os.path.join(exe_dest, tool) + shutil.copy(local_path, dest_path) + except Exception: + print('Some ENSDF processing executables were unable to be copied to the \ + install directory.') def generate_decay(): with indir('src'): From 77e3dc3803459e5d3e092723960f57677bdf5736 Mon Sep 17 00:00:00 2001 From: josh Date: Wed, 27 Jan 2016 15:48:23 -0800 Subject: [PATCH 117/216] Updated setup.py to remove excessive executable copying code, consolidated to array of executable paths --- pyne/ensdf_processing.py | 104 +++++++++++++++++++++++++-------------- 1 file changed, 67 insertions(+), 37 deletions(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 733b6bdc34..2d6465a92f 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -79,10 +79,15 @@ def delta(inputdict_unchecked): This function calculates the best values of mixing ratios based of its analysis of the angular correlation and conversion coefficient data. - Input Dictionary Required Key Pair Value: - input_file : input ensdf file - output_file : file for output to be written to (doesn't have to exist) - + Parameters + ---------- + Input_dictionary : dictionary + dictionary that must have the following key-pair values: + input_file : input ensdf file + output_file : file for output to be written to (doesn't have to exist) + + Notes + ----- Output Dictionary Values: Everything in input dictionary is returned if DELTA completes successfully. """ @@ -102,11 +107,16 @@ def gabs(inputdict_unchecked): """ This program calculates Gamma-ray absolute intensity and normalization (GABS readme) - Input Dictionary Required Key Pair Value: - input_file : input ensdf file - dataset_file : dataset file to be used - output file : file for output to be written to (doesn't have to exist) - + Parameters + ---------- + Input_dictionary : dictionary + dictionary that must have the following key-pair values: + input_file : input ensdf file + dataset_file : dataset file to be used + output file : file for output to be written to (doesn't have to exist) + + Notes + ----- Output Dictionary Values: Everything in input dictionary is returned if GABS completes successfully. """ @@ -130,20 +140,25 @@ def gabs(inputdict_unchecked): def gtol(inputdict_unchecked): """ - GTOL uses gamma-ray energies to derive a set of least-squares adjusted level energies. The - net feeding at each level is calculated from the input gamma intensities and conversion - coefficients. (GTOL readme) - - Input Dictionary Required Key Pair Value: - input_file : input ensdf file. - report_file : desired gtol report file path. - new_ensdf_file_with_results : boolean, if true then a new ensdf file with results - will be created. - output_file : desired gtol output file path. - supress_gamma_comparison : boolean, if true the gamma comparison will be suppressed. - dcc_theory_percent : double, specifies the dcc theory percentage to be used. + GTOL uses gamma-ray energies to derive a set of least-squares adjusted level energies. + The net feeding at each level is calculated from the input gamma intensities and conversion + coefficients. (GTOL readme) + Parameters + ---------- + Input_dictionary : dictionary + dictionary that must have the following key-pair values: + input_file : input ensdf file. + report_file : desired gtol report file path. + new_ensdf_file_with_results : boolean, if true then a new ensdf file with results + will be created. + output_file : desired gtol output file path. + supress_gamma_comparison : boolean, if true the gamma comparison will be suppressed. + dcc_theory_percent : double, specifies the dcc theory percentage to be used. + + Notes + ----- Output Dictionary Values: Everything in input dictionary is returned if GTOL completes successfully. """ @@ -180,15 +195,20 @@ def hsicc(inputdict_unchecked): """ This program calculates internal conversion coefficients. (HSICC readme) - Input Dictionary Required Key Pair Value: - data_deck : data deck to be used for hsicc program. - icc_index : icc index to be used for hsicc program. - icc_table : icc table to be used for the hsicc program. - complete_report : desired report file path for hsicc program. - new_card_deck : desired new card deck file path for hsicc program. - comparison_report : desired comparison report path for hsicc program. - is_multipol_known : 1 if multipol is known, 0 otherwise. - + Parameters + ---------- + Input_dictionary : dictionary + dictionary that must have the following key-pair values: + data_deck : data deck to be used for hsicc program. + icc_index : icc index to be used for hsicc program. + icc_table : icc table to be used for the hsicc program. + complete_report : desired report file path for hsicc program. + new_card_deck : desired new card deck file path for hsicc program. + comparison_report : desired comparison report path for hsicc program. + is_multipol_known : 1 if multipol is known, 0 otherwise. + + Notes + ----- Output Dictionary Values: Everything in input dictionary is returned if HSICC completes successfully. """ @@ -215,11 +235,16 @@ def hsmrg(inputdict_unchecked): This program merges new gamma records created by HSICC with the original input data. (HSICC readme) - Input Dictionary Required Key Pair Value: - data_deck : data deck file path for hsmrg to use. - card_deck : card deck file path for hsmrg to use. - merged_data_deck : desired merged data deck file path created by hsmrg. + Parameters + ---------- + Input_dictionary : dictionary + dictionary that must have the following key-pair values: + data_deck : data deck file path for hsmrg to use. + card_deck : card deck file path for hsmrg to use. + merged_data_deck : desired merged data deck file path created by hsmrg. + Notes + ----- Output Dictionary Values: Everything in input dictionary is returned if HSMRG completes successfully. """ @@ -241,10 +266,15 @@ def seqhst(inputdict_unchecked): This program recreates a sequential file of the internal conversion table from the direct access file. (HSICC readme) - Input Dictionary Required Key Pair Value: - binary_table_input_file : binary table input file path. - sequential_output_file : desired path of sequential output file. + Parameters + ---------- + Input_dictionary : dictionary + dictionary that must have the following key-pair values: + binary_table_input_file : binary table input file path. + sequential_output_file : desired path of sequential output file. + Notes + ----- Output Dictionary Values: Everything in input dictionary is returned if SEQHST completes successfully. """ From 27ce72db8be506310609d3d0c0bc8ea19b435c0e Mon Sep 17 00:00:00 2001 From: josh Date: Wed, 27 Jan 2016 16:09:00 -0800 Subject: [PATCH 118/216] Fixed styling issues with documentation --- pyne/ensdf_processing.py | 90 ++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 2d6465a92f..60eee617f6 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -81,14 +81,14 @@ def delta(inputdict_unchecked): Parameters ---------- - Input_dictionary : dictionary + inputdict_unchecked : dictionary dictionary that must have the following key-pair values: - input_file : input ensdf file - output_file : file for output to be written to (doesn't have to exist) + input_file : string, path to input ensdf file. + output_file : string, path to file for output write (doesn't have to exist). - Notes - ----- - Output Dictionary Values: + Returns + ------- + rtn : dictionary Everything in input dictionary is returned if DELTA completes successfully. """ inputdict = {} @@ -109,15 +109,15 @@ def gabs(inputdict_unchecked): Parameters ---------- - Input_dictionary : dictionary + inputdict_unchecked : dictionary dictionary that must have the following key-pair values: - input_file : input ensdf file - dataset_file : dataset file to be used - output file : file for output to be written to (doesn't have to exist) + input_file : string, input ensdf file + dataset_file : string, dataset file to be used + output file : string, file for output to be written to (doesn't have to exist) - Notes - ----- - Output Dictionary Values: + Returns + ------- + rtn : dictionary Everything in input dictionary is returned if GABS completes successfully. """ exe_path = path_to_exe('gabs') @@ -147,19 +147,19 @@ def gtol(inputdict_unchecked): Parameters ---------- - Input_dictionary : dictionary + inputdict_unchecked : dictionary dictionary that must have the following key-pair values: - input_file : input ensdf file. - report_file : desired gtol report file path. + input_file : string, input ensdf file. + report_file : string, desired gtol report file path. new_ensdf_file_with_results : boolean, if true then a new ensdf file with results will be created. - output_file : desired gtol output file path. + output_file : string, desired gtol output file path. supress_gamma_comparison : boolean, if true the gamma comparison will be suppressed. dcc_theory_percent : double, specifies the dcc theory percentage to be used. - Notes - ----- - Output Dictionary Values: + Returns + ------- + rtn : dictionary Everything in input dictionary is returned if GTOL completes successfully. """ inputdict = {} @@ -197,19 +197,19 @@ def hsicc(inputdict_unchecked): Parameters ---------- - Input_dictionary : dictionary + inputdict_unchecked : dictionary dictionary that must have the following key-pair values: - data_deck : data deck to be used for hsicc program. - icc_index : icc index to be used for hsicc program. - icc_table : icc table to be used for the hsicc program. - complete_report : desired report file path for hsicc program. - new_card_deck : desired new card deck file path for hsicc program. - comparison_report : desired comparison report path for hsicc program. - is_multipol_known : 1 if multipol is known, 0 otherwise. - - Notes - ----- - Output Dictionary Values: + data_deck : string, data deck to be used for hsicc program. + icc_index : string, icc index to be used for hsicc program. + icc_table : string, icc table to be used for the hsicc program. + complete_report : string, desired report file path for hsicc program. + new_card_deck : string, desired new card deck file path for hsicc program. + comparison_report : string, desired comparison report path for hsicc program. + is_multipol_known : int, 1 if multipol is known, 0 otherwise. + + Returns + ------- + rtn : dictionary Everything in input dictionary is returned if HSICC completes successfully. """ inputdict = {} @@ -237,15 +237,15 @@ def hsmrg(inputdict_unchecked): Parameters ---------- - Input_dictionary : dictionary + inputdict_unchecked : dictionary dictionary that must have the following key-pair values: - data_deck : data deck file path for hsmrg to use. - card_deck : card deck file path for hsmrg to use. - merged_data_deck : desired merged data deck file path created by hsmrg. + data_deck : string, data deck file path for hsmrg to use. + card_deck : string, card deck file path for hsmrg to use. + merged_data_deck : string, desired merged data deck file path created by hsmrg. - Notes - ----- - Output Dictionary Values: + Returns + ------- + rtn : dictionary Everything in input dictionary is returned if HSMRG completes successfully. """ inputdict = {} @@ -268,14 +268,14 @@ def seqhst(inputdict_unchecked): Parameters ---------- - Input_dictionary : dictionary + inputdict_unchecked : dictionary dictionary that must have the following key-pair values: - binary_table_input_file : binary table input file path. - sequential_output_file : desired path of sequential output file. + binary_table_input_file : string, binary table input file path. + sequential_output_file : string, desired path of sequential output file. - Notes - ----- - Output Dictionary Values: + Returns + ------- + rtn : dictionary Everything in input dictionary is returned if SEQHST completes successfully. """ #NOTE: changed input file line length to 90 to support longer file paths in fortran source. From 43c620c7aa9fdfdbb4c1be1dcf300d898d35b6ba Mon Sep 17 00:00:00 2001 From: josh Date: Wed, 27 Jan 2016 16:12:08 -0800 Subject: [PATCH 119/216] Fixed styling issues with documentation --- pyne/ensdf_processing.py | 75 +++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 1a2946d166..9fa5d20dd8 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -46,14 +46,15 @@ def alphad(inputdict_unchecked): Parameters ---------- - Input_dictionary : dictionary + inputdict_unchecked : dictionary dictionary that must have the following key-pair values: - ensdf_input_file : input file - output_file : file for output to be written to (doesn't have to exist) + ensdf_input_file : string, input file + output_file : string, file for output to be written to (doesn't have to exist) - Notes - ----- - Everything in input dictionary is returned if ALPHAD completes successfully. + Returns + ------- + rtn : dictionary + Everything in input dictionary is returned if ALPHAD completes successfully. Full documentation explaining the details of the functionality and physics behind ALPHAD can be found at: @@ -84,15 +85,16 @@ def gabs(inputdict_unchecked): Parameters ---------- - Input_dictionary : dictionary + inputdict_unchecked : dictionary dictionary that must have the following key-pair values: - input_file : input ensdf file - dataset_file : dataset file to be used - output file : file for output to be written to (doesn't have to exist) - - Notes - ----- - Everything in input dictionary is returned if GABS completes successfully. + input_file : string, input ensdf file + dataset_file : string, dataset file to be used + output file : string, file for output to be written to (doesn't have to exist) + + Returns + ------- + rtn : dictionary + Everything in input dictionary is returned if GABS completes successfully. """ exe_path = path_to_exe('gabs') @@ -120,16 +122,17 @@ def logft(inputdict_unchecked): Parameters ---------- - Input_dictionary : dictionary + inputdict_unchecked : dictionary dictionary that must have the following key-pair values: - input_data_set : path to input data file. - output_report : desired path to output report file. - data_table : path to data table. - output_data_set : desired path to output data set. - - Notes - ----- - Everything in input dictionary is returned if LOGFT completes successfully. + input_data_set : string, path to input data file. + output_report : string, desired path to output report file. + data_table : string, path to data table. + output_data_set : string, desired path to output data set. + + Returns + ------- + rtn : dictionary + Everything in input dictionary is returned if LOGFT completes successfully. """ inputdict = {} input_data_set = inputdict_unchecked['input_data_set'] @@ -157,14 +160,15 @@ def radd(inputdict_unchecked): Parameters ---------- - Input_dictionary : dictionary + inputdict_unchecked : dictionary dictionary that must have the following key-pair values: - input_file : input ensdf file - output file : file for output to be written to (doesn't have to exist) + input_file : string, input ensdf file + output file : string, file for output to be written to (doesn't have to exist) - Notes - ----- - Everything in input dictionary is returned if RADD completes successfully. + Returns + ------- + rtn : dictionary + Everything in input dictionary is returned if RADD completes successfully. """ inputdict = {} atomic_number = inputdict_unchecked['atomic_number'] @@ -204,14 +208,15 @@ def ruler(inputdict_unchecked): Parameters ---------- - Input_dictionary : dictionary + inputdict_unchecked : dictionary dictionary that must have the following key-pair values: - input_file : input ensdf file - output file : file for output to be written to (doesn't have to exist) + input_file : string, input ensdf file + output file : string, file for output to be written to (doesn't have to exist) - Notes - ----- - Everything in input dictionary is returned if RULER completes successfully. + Returns + ------- + rtn : dictionary + Everything in input dictionary is returned if RULER completes successfully. """ inputdict = {} input_file = inputdict_unchecked['input_file'] From 6558e0264b758b74e753e6b262120614e4c1407c Mon Sep 17 00:00:00 2001 From: josh Date: Wed, 27 Jan 2016 19:48:11 -0800 Subject: [PATCH 120/216] Cleanpup and re initializing tests --- tests/test_ensdf_processing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 4e1404ee6d..e613d80845 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -83,7 +83,7 @@ def cleanup_tmp(): def file_comp(file_out, file_ref, exceptions): ''' - xceptions format: [type, options] + Exceptions format: [type, options] type 1: prefix of length n. options: 'prefix'. type 2: general line ignore. From 4f5be7930d20d8b187ca6504d07eed96aec8b230 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Thu, 28 Jan 2016 19:19:07 -0600 Subject: [PATCH 121/216] removed unessessary instrinsic function declarations --- src/ensdf_processing/ALPHAD/alphad.f | 3 --- src/ensdf_processing/RULER/ruler.f | 19 ------------------- src/ensdf_processing/nsdflib95.f | 8 +------- 3 files changed, 1 insertion(+), 29 deletions(-) diff --git a/src/ensdf_processing/ALPHAD/alphad.f b/src/ensdf_processing/ALPHAD/alphad.f index e2b5cc8f8c..29783a0bf6 100755 --- a/src/ensdf_processing/ALPHAD/alphad.f +++ b/src/ensdf_processing/ALPHAD/alphad.f @@ -174,7 +174,6 @@ SUBROUTINE RUN_ALPHAD ! ! FUNCTIONS USED ! - CHARACTER(LEN=*), INTRINSIC :: TRIM, REPEAT CHARACTER(LEN=1), INTRINSIC :: CHAR CHARACTER(LEN=1), EXTERNAL :: LOCASE INTEGER(KIND=4), INTRINSIC :: INDEX, INT, LEN, MIN0, NINT, & @@ -1221,7 +1220,6 @@ SUBROUTINE OPENFI ! ! FUNCTIONS USED ! - CHARACTER(LEN=*), INTRINSIC :: TRIM CHARACTER(LEN=1), EXTERNAL :: LOCASE ! ! Local variables @@ -1699,7 +1697,6 @@ SUBROUTINE EMESS(Iecho,Card,Mess,Val) ! ! Functions used ! - CHARACTER(LEN=*), INTRINSIC :: TRIM Integer(KIND=4), EXTERNAL :: Lenstr ! IF(.NOT.Iecho) WRITE(irpt,'(/A)') Card diff --git a/src/ensdf_processing/RULER/ruler.f b/src/ensdf_processing/RULER/ruler.f index b750da4972..56caf6c883 100644 --- a/src/ensdf_processing/RULER/ruler.f +++ b/src/ensdf_processing/RULER/ruler.f @@ -452,7 +452,6 @@ SUBROUTINE OPENFI ! ! Functions used ! - CHARACTER(LEN=*), INTRINSIC :: TRIM CHARACTER(LEN=1), EXTERNAL :: LOCASE REAL(KIND=4), EXTERNAL :: VALSTR ! @@ -712,7 +711,6 @@ SUBROUTINE READIN(Datact,Ia,Ig,Levcnt,Perint) ! ! Functions used ! - CHARACTER(LEN=0), INTRINSIC :: TRIM INTEGER(KIND=4), INTRINSIC :: LEN_TRIM INTEGER(KIND=4), INTRINSIC :: INDEX, LEN, MAX0, MIN0 INTEGER(KIND=4), EXTERNAL :: INDEXF, TYPSTR @@ -1541,7 +1539,6 @@ SUBROUTINE PRCIT(Card,I,Tsave,Ittsav,Brit,Dbrit,Icmess) ! ! Functions used ! - CHARACTER(LEN=8), INTRINSIC :: TRIM INTEGER(KIND=4), INTRINSIC :: LEN_TRIM, INDEX, LEN, MAX0 INTEGER(KIND=4), EXTERNAL :: INDEXF REAL(KIND=8), INTRINSIC :: DABS, DSQRT @@ -1949,7 +1946,6 @@ SUBROUTINE WRTRPT ! ! Functions used ! - CHARACTER(LEN=*), INTRINSIC :: TRIM INTEGER(KIND=4), INTRINSIC :: LEN_TRIM ! ! Local variables @@ -2043,7 +2039,6 @@ SUBROUTINE PART12(ig) INTEGER(KIND=4), INTRINSIC :: INDEX INTEGER(KIND=4), EXTERNAL :: INDEXF REAL(KIND=4) :: ABS,SQRT - CHARACTER(LEN=*), INTRINSIC :: TRIM ! ! Local variables ! @@ -2359,7 +2354,6 @@ SUBROUTINE OUT1(Ig,Ia) ! ! Functions used ! - CHARACTER(LEN=*), INTRINSIC :: TRIM INTEGER(KIND=4), INTRINSIC :: LEN_TRIM REAL(KIND=8), INTRINSIC :: DBLE, DLOG10, DSQRT ! @@ -2679,7 +2673,6 @@ SUBROUTINE OUT2(Ig,Ia) ! ! Functions used ! - CHARACTER(LEN=*), INTRINSIC :: TRIM INTEGER(KIND=4), INTRINSIC :: LEN_TRIM INTEGER(KIND=4), EXTERNAL :: INDEXF, TYPSTR REAL(KIND=4), INTRINSIC :: FLOAT @@ -2933,7 +2926,6 @@ SUBROUTINE OUT2ON(I,Nucard,Bw,Out,I10000) ! ! Functions used ! - CHARACTER(LEN=*), INTRINSIC :: TRIM CHARACTER(LEN=1), INTRINSIC :: CHAR INTEGER(KIND=4), INTRINSIC :: LEN_TRIM, ICHAR, INDEX, MAX0 INTEGER(KIND=4), EXTERNAL :: INDEXF @@ -3288,7 +3280,6 @@ SUBROUTINE OUT235(Itest,Out,X,Dx,Xupper,Xlower,Nucard,Pargiv, & ! ! Functions used ! - CHARACTER(LEN=*), INTRINSIC :: TRIM INTEGER(KIND=4), INTRINSIC :: LEN_TRIM, INDEX INTEGER(KIND=4), EXTERNAL :: INDEXF, IVLSTR REAL(KIND=8), INTRINSIC :: DMAX1, DMIN1 @@ -3567,7 +3558,6 @@ SUBROUTINE OUT230(I,Pargiv,Percnt,Dpercn,Opercn,Test,Itest,I10000,& ! ! Functions used ! - CHARACTER(LEN=*), INTRINSIC :: TRIM INTEGER(KIND=4), INTRINSIC :: LEN_TRIM, INDEX, MAX0 INTEGER(KIND=4), EXTERNAL :: INDEXF ! @@ -4494,7 +4484,6 @@ Subroutine Decide(ispar,parg) INTEGER(KIND=4), INTRINSIC :: INDEX,LEN_TRIM INTEGER(KIND=4), EXTERNAL :: INDEXF,IVLSTR,TYPSTR REAL (KIND=8), INTRINSIC :: DSQRT - CHARACTER(LEN=*), INTRINSIC :: TRIM ! ! Local variables ! @@ -4718,7 +4707,6 @@ Subroutine PrcIT2(itg,t,dt) ! ! Functions used ! - CHARACTER(LEN=8), INTRINSIC :: TRIM INTEGER(KIND=4), INTRINSIC :: LEN_TRIM, INDEX, LEN, MAX0 INTEGER(KIND=4), EXTERNAL :: INDEXF,IVLSTR REAL(KIND=8), INTRINSIC :: DABS, DSQRT @@ -4897,7 +4885,6 @@ SUBROUTINE ASYCAL(x,dxplu,dxmin,outstr,proberr) ! ! Functions used ! - CHARACTER(LEN=*), INTRINSIC :: TRIM INTEGER(KIND=4), INTRINSIC :: LEN_TRIM, INDEX, IABS INTEGER(KIND=4), EXTERNAL :: IVLSTR ! @@ -5196,7 +5183,6 @@ SUBROUTINE BWVSRUL(instr,oldnew) INTEGER(KIND=4), INTRINSIC :: INDEX, LEN_TRIM INTEGER(KIND=4), EXTERNAL :: INDEXF CHARACTER(LEN=1), INTRINSIC :: CHAR - CHARACTER(LEN=*), INTRINSIC :: TRIM ! ! Local variables ! @@ -5366,7 +5352,6 @@ CHARACTER(LEN=40) FUNCTION COMLIM(mass,mult,x,typ) ! INTEGER(KIND=4), INTRINSIC :: INT,LEN_TRIM INTEGER(KIND=4), EXTERNAL :: IVLSTR - CHARACTER(LEN=*), INTRINSIC :: TRIM ! ! Local variables ! @@ -5437,10 +5422,6 @@ SUBROUTINE ERRRPT ! ! Outputs problems to new summary file ! -! Functions used -! - CHARACTER(LEN=*), INTRINSIC :: TRIM -! ! Local variables ! INTEGER(KIND=4) :: i diff --git a/src/ensdf_processing/nsdflib95.f b/src/ensdf_processing/nsdflib95.f index d1d78b38d0..0b91ad8154 100644 --- a/src/ensdf_processing/nsdflib95.f +++ b/src/ensdf_processing/nsdflib95.f @@ -1,4 +1,4 @@ -! NNDCLIB FORTRAN UTILITY SUBROUTINE PACKAGE +! 1 ;4002 ! NNDCLIB FORTRAN UTILITY SUBROUTINE PACKAGE ! ! C.L.DUNFORD January 23, 2004 ! @@ -2651,7 +2651,6 @@ SUBROUTINE TRANSNUC(Instr,Rstr,Sstr,Ierr) ! ! Functions used ! - CHARACTER(LEN=*), INTRINSIC :: TRIM INTEGER(KIND=4), INTRINSIC :: INDEX, LEN, LEN_TRIM INTEGER(KIND=4), EXTERNAL :: IVLSTR, TYPSTR ! @@ -3163,10 +3162,6 @@ SUBROUTINE FSORT(Namin,Namout,Iunit,Iacc,Iform,Keys,Mrec,Mkey, & INTEGER(KIND=4), DIMENSION(*) :: Keys INTEGER(KIND=4) :: Iunit, Iacc, Iform, Mrec, Mkey, Mbuf, Ierr ! -! Functions used -! - CHARACTER(LEN=*), INTRINSIC :: REPEAT -! ! Local variables. ! INTEGER(KIND=4) :: iend @@ -3653,7 +3648,6 @@ SUBROUTINE SRTKEYS(Keys,Buffin,Keystr) ! ! Functions used ! - CHARACTER(LEN=*), INTRINSIC :: REPEAT INTEGER(KIND=4), INTRINSIC :: LEN ! ! Local variables From 7d0685bfd0419265db8c96d8889515c44cf1c797 Mon Sep 17 00:00:00 2001 From: josh Date: Fri, 29 Jan 2016 11:23:41 -0800 Subject: [PATCH 122/216] Added bricc, bldhst and radlist ensdf evaluation tools. Also expanded briccs interface to include multiple types of use. Need to fix bricc bug --- pyne/ensdf_processing.py | 147 + setup.py | 2 +- src/CMakeLists.txt | 1 + .../bldhst/ref_bldhst_iccseq.dat | 13004 ++++++++++++++++ tests/ensdf_processing/bldhst/ref_iccndx.dat | Bin 0 -> 448 bytes tests/ensdf_processing/bldhst/ref_icctbl.dat | Bin 0 -> 572176 bytes tests/ensdf_processing/bricc/ref_a228.ens | 3007 ++++ tests/ensdf_processing/bricc/ref_bricc_44.out | 1 + tests/ensdf_processing/radlst/ref_ensdf.rpt | 431 + tests/ensdf_processing/radlst/ref_mednew.dat | 207 + tests/ensdf_processing/radlst/ref_radlst.inp | 697 + tests/ensdf_processing/radlst/ref_radlst.rpt | 1121 ++ tests/test_ensdf_processing.py | 67 + 13 files changed, 18684 insertions(+), 1 deletion(-) create mode 100644 tests/ensdf_processing/bldhst/ref_bldhst_iccseq.dat create mode 100644 tests/ensdf_processing/bldhst/ref_iccndx.dat create mode 100644 tests/ensdf_processing/bldhst/ref_icctbl.dat create mode 100644 tests/ensdf_processing/bricc/ref_a228.ens create mode 100644 tests/ensdf_processing/bricc/ref_bricc_44.out create mode 100644 tests/ensdf_processing/radlst/ref_ensdf.rpt create mode 100644 tests/ensdf_processing/radlst/ref_mednew.dat create mode 100644 tests/ensdf_processing/radlst/ref_radlst.inp create mode 100644 tests/ensdf_processing/radlst/ref_radlst.rpt diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index be7f693485..716cc9e5a8 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -36,6 +36,7 @@ def verify_download_exe(exe_path, exe_url, compressed = 0, decomp_path = '', dl_ # set proper permissions on newly downloaded file os.chmod(exe_path, 744) if compressed: + os.chmod(exe_path, 777) tfile = tarfile.open(exe_path, 'r:gz') tfile.extractall(decomp_path) @@ -79,6 +80,97 @@ def alphad(inputdict_unchecked): proc.stdin.close() return inputdict_unchecked +def bricc(inputdict_unchecked): + """ + This function calculates the conversion electron, electron-positron pair conversion + coefficients, and the E0 electron factors. + + Parameters + ---------- + inputdict_unchecked : dictionary + dictionary that must have the following key-pair values: + xx + xx + + Returns + ------- + rtn : dictionary + Everything in input dictionary is returned if BRICC completes successfully. + Additional dictionary entries including: + output_file_directory : string, the directory all produced bricc output files will be + located. + bricc_output : string, Only for interactive use: data printed to command line. + NOTE: + All the various ouptput files bricc can generate are found in the output_file_directory + + """ + exe_path = path_to_exe('bricc') + exe_dir = path_to_exe('') + compressed_exe_path = exe_path + '.tar.gz' + + bricc_url = "http://www.nndc.bnl.gov/nndcscr/ensdf_pgm/analysis/BrIcc/Linux/BriccV23-Linux.tgz" + decomp_exe_path = path_to_exe('') + decomp_options = ['bricc', '.tgz', True] + verify_download_exe(compressed_exe_path, bricc_url, compressed = True, decomp_path = decomp_exe_path, dl_size = 127232) + + # check if BriIccHome environment variable has been set (needed by BRICC executable) + if not os.environ.get('BrIccHome'): + os.environ['BrIccHome'] = str(exe_dir) + + input_type = inputdict_unchecked['input_type'] + output_dict = inputdict_unchecked + + if(input_type == 'interactive'): + input_element = inputdict_unchecked['element'] + inp = input_element + '\n' + 'exit' + '\n' + proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + proc.stdin.write(inp.encode('utf-8')) + output_dict['bricc_output'] = proc.communicate()[0] + proc.stdin.close() + elif(input_type == 'evaluation'): + input_file = inputdict_unchecked['input_file'] + briccnh = inputdict_unchecked['BrIccNH'] + if(briccnh): + proc = subprocess.Popen([exe_path, input_file, 'BrIccNH'],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + proc.stdin.close() + else: + proc = subprocess.Popen([exe_path, input_file],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + proc.stdin.close() + + output_dict['output_file_directory'] = exe_dir + return output_dict + +def bldhst(inputdict_unchecked): + """ + This program builds a direct access file of the internal conversion coefficient + table. (BLDHST readme) + + Parameters + ---------- + inputdict_unchecked : dictionary + dictionary that must have the following key-pair values: + input_file : string, input ensdf file. + output_table_file : string, desired output table file path. + output_index_file : string, desired output index file path. + + Returns + ------- + rtn : dictionary + Everything in input dictionary is returned if DELTA completes successfully. + """ + inputdict = {} + input_file = inputdict_unchecked['input_file'] + output_table_file = inputdict_unchecked['output_table_file'] + output_index_file = inputdict_unchecked['output_index_file'] + + exe_path = path_to_exe('bldhst') + proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + inp = input_file + '\n' + output_table_file + '\n' + output_index_file + proc.stdin.write(inp.encode('utf-8')) + proc.communicate()[0] + proc.stdin.close() + return inputdict_unchecked + def delta(inputdict_unchecked): """ This function calculates the best values of mixing ratios based of its analysis of @@ -384,6 +476,61 @@ def radd(inputdict_unchecked): os.remove('ELE.in') return inputdict_unchecked +def radlist(inputdict_unchecked): + """ + This program calculates atomic & nuclear radiations and checks energy balance. + (RADLIST readme) + + Parameters + ---------- + inputdict_unchecked : dictionary + dictionary that must have the following key-pair values: + output_radiation_listing : string, 'Y' if output radiation listing is desired, else 'N'. + output_ensdf_like_file : string, 'Y' if output ensdf like file is desired, else 'N'. + output_file_for_nudat : string, 'Y' if output file for nudat is desired, else 'N'. + output_mird_listing : string, 'Y' if output mird listing is desired, else 'N'. + calculate_continua : string, 'Y' if calculate continua is desired, else 'N'. + input_file : string, input ensdf file. + output_radlst_file : string, path to desired output radlst file. + input_radlst_data_table : string, path to input radlst data table (mednew.dat location). + input_masses_data_table : string, (optional) path to input masses data table. + output_ensdf_file : string, path to desired output ensdf file. + + Returns + ------- + rtn : dictionary + Everything in input dictionary is returned if RADLIST completes successfully. + """ + exe_path = path_to_exe('radlist') + radlist_url = "http://www.nndc.bnl.gov/nndcscr/ensdf_pgm/analysis/radlst/unx/radlist" + print exe_path + verify_download_exe(exe_path, radlist_url, dl_size = 8704) + + inputdict = {} + output_rad_listing = inputdict_unchecked['output_radiation_listing'] + output_endf_like_file = inputdict_unchecked['output_ensdf_like_file'] + output_file_for_nudat = inputdict_unchecked['output_file_for_nudat'] + output_mird_listing = inputdict_unchecked['output_mird_listing'] + calculate_continua = inputdict_unchecked['calculate_continua'] + input_file = inputdict_unchecked['input_file'] + output_radlst_file = inputdict_unchecked['output_radlst_file'] + input_radlst_data_table = inputdict_unchecked['input_radlst_data_table'] + if 'input_masses_data_table' in inputdict_unchecked: + input_masses_data_table = inputdict_unchecked['input_masses_data_table'] + else: + input_masses_data_table = '' + output_ensdf_file = inputdict_unchecked['output_ensdf_file'] + + inp = output_rad_listing + '\n' + output_endf_like_file + '\n' + output_file_for_nudat +\ + '\n' + output_mird_listing + '\n' + calculate_continua + '\n' + input_file +\ + '\n' + output_radlst_file + '\n' + input_radlst_data_table + '\n' + input_masses_data_table +\ + '\n' + output_ensdf_file + proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + proc.stdin.write(inp.encode('utf-8')) + radd_output = proc.communicate()[0] + proc.stdin.close() + return inputdict_unchecked + def ruler(inputdict_unchecked): """ This program calculates reduced transition probabilities. (RULER readme) diff --git a/setup.py b/setup.py index 629e0a78a4..9cb3d741e9 100755 --- a/setup.py +++ b/setup.py @@ -180,7 +180,7 @@ def download_decay(): durl.close() return True -local_ensdf_evaluators = ['alphad', 'delta', 'gtol', 'hsicc', 'hsmrg', 'seqhst', +local_ensdf_evaluators = ['alphad', 'delta', 'gtol', 'bldhst', 'hsicc', 'hsmrg', 'seqhst', 'logft', 'radd', 'ruler'] local_ensdf_tools = [['ensdf_processing/RADD/98AK04.in', '98AK04.in'], ['ensdf_processing/RADD/ELE.in', 'ELE.in']] diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 42dd26b844..2a664e604d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -109,6 +109,7 @@ add_executable(alphad ${PROJECT_SOURCE_DIR}/src/ensdf_processing/ALPHAD/alphad.f add_executable(delta ${PROJECT_SOURCE_DIR}/src/ensdf_processing/DELTA/delta.for) add_executable(gtol ${PROJECT_SOURCE_DIR}/src/ensdf_processing/GTOL/gtol.f ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f) +add_executable(bldhst ${PROJECT_SOURCE_DIR}/src/ensdf_processing/HSICC/bldhst.for) add_executable(hsicc ${PROJECT_SOURCE_DIR}/src/ensdf_processing/HSICC/hsicc.for ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f) add_executable(hsmrg ${PROJECT_SOURCE_DIR}/src/ensdf_processing/HSICC/hsmrg.for diff --git a/tests/ensdf_processing/bldhst/ref_bldhst_iccseq.dat b/tests/ensdf_processing/bldhst/ref_bldhst_iccseq.dat new file mode 100644 index 0000000000..c2ab79e7ab --- /dev/null +++ b/tests/ensdf_processing/bldhst/ref_bldhst_iccseq.dat @@ -0,0 +1,13004 @@ + 3K1 15.006.55E-025.65E+004.10E+022.83E+042.85E-031.87E-011.25E+018.37E+02 + 3K1 17.004.30E-023.29E+002.12E+021.30E+042.07E-031.21E-017.12E+004.23E+02 + 3K1 20.002.48E-021.63E+008.99E+014.72E+031.37E-036.84E-023.45E+001.75E+02 + 3K1 25.001.17E-026.20E-012.77E+011.17E+037.82E-043.15E-021.28E+005.23E+01 + 3K1 32.005.06E-032.12E-017.50E+002.52E+024.22E-041.34E-024.30E-011.38E+01 + 3K1 40.002.37E-038.07E-022.31E+006.28E+012.42E-046.22E-031.61E-014.20E+00 + 3K1 50.001.11E-033.07E-027.12E-011.57E+011.39E-042.91E-036.10E-021.28E+00 + 3K1 65.004.56E-049.86E-031.79E-013.10E+007.33E-051.20E-031.96E-023.23E-01 + 3K1 80.002.26E-044.03E-036.05E-028.64E-014.43E-055.98E-048.10E-031.10E-01 + 3K1 100.001.06E-041.55E-031.90E-022.21E-012.59E-052.86E-043.16E-033.50E-02 + 3K1 120.005.77E-057.12E-047.42E-037.35E-021.68E-051.58E-041.48E-031.39E-02 + 3K1 150.002.74E-052.78E-042.38E-031.94E-029.95E-067.69E-055.94E-044.59E-03 + 3K1 200.001.07E-058.41E-055.65E-043.61E-035.13E-063.11E-051.89E-041.14E-03 + 3K1 300.002.97E-061.66E-058.01E-053.69E-042.08E-069.15E-064.01E-051.76E-04 + 3K1 450.009.07E-073.65E-061.30E-054.42E-058.79E-072.89E-069.42E-063.07E-05 + 3K1 650.003.50E-071.06E-062.93E-067.80E-064.21E-071.09E-062.81E-067.22E-06 + 3K11000.001.38E-073.11E-076.61E-071.37E-061.89E-073.86E-077.84E-071.59E-06 + 3K12000.004.41E-086.99E-081.08E-071.66E-076.01E-089.20E-081.40E-072.13E-07 + 3K16000.001.15E-081.36E-081.61E-081.90E-081.34E-081.58E-081.86E-082.19E-08 + 3L1 15.009.58E-048.23E-025.95E+004.09E+024.17E-052.74E-031.82E-011.22E+01 + 3L1 17.006.29E-044.80E-023.08E+001.88E+023.03E-051.77E-031.04E-016.19E+00 + 3L1 20.003.64E-042.38E-021.31E+006.85E+012.01E-051.00E-035.05E-022.56E+00 + 3L1 25.001.71E-049.05E-034.03E-011.71E+011.15E-054.61E-041.87E-027.65E-01 + 3L1 32.007.41E-053.10E-031.09E-013.67E+006.18E-061.96E-046.29E-032.03E-01 + 3L1 40.003.48E-051.18E-033.37E-029.16E-013.55E-069.12E-052.36E-036.15E-02 + 3L1 50.001.63E-054.49E-041.04E-022.29E-012.04E-064.26E-058.93E-041.88E-02 + 3L1 65.006.69E-061.44E-042.62E-034.53E-021.07E-061.75E-052.88E-044.74E-03 + 3L1 80.003.31E-065.90E-058.86E-041.26E-026.49E-078.76E-061.19E-041.61E-03 + 3L1 100.001.56E-062.27E-052.78E-043.24E-033.80E-074.19E-064.63E-055.13E-04 + 3L1 120.008.45E-071.04E-051.09E-041.08E-032.46E-072.31E-062.17E-052.04E-04 + 3L1 150.004.02E-074.07E-063.49E-052.84E-041.46E-071.13E-068.71E-066.73E-05 + 3L1 200.001.57E-071.23E-068.28E-065.28E-057.52E-084.56E-072.76E-061.67E-05 + 3L1 300.004.35E-082.43E-071.17E-065.40E-063.05E-081.34E-075.88E-072.57E-06 + 3L1 450.001.33E-085.35E-081.90E-076.47E-071.29E-084.23E-081.38E-074.50E-07 + 3L1 650.005.13E-091.56E-084.29E-081.14E-076.17E-091.60E-084.12E-081.06E-07 + 3L11000.002.02E-094.57E-099.69E-092.01E-082.77E-095.66E-091.15E-082.33E-08 + 3L12000.006.46E-101.02E-091.59E-092.43E-098.81E-101.35E-092.05E-093.12E-09 + 6K1 15.004.38E-013.51E+012.36E+031.52E+052.81E-021.80E+001.16E+027.57E+03 + 6K1 17.002.91E-012.08E+011.25E+037.17E+042.02E-021.15E+006.58E+013.80E+03 + 6K1 20.001.71E-011.05E+015.45E+022.69E+041.32E-026.43E-013.15E+011.56E+03 + 6K1 25.008.19E-024.12E+001.74E+026.97E+037.42E-032.91E-011.15E+014.62E+02 + 6K1 32.003.62E-021.45E+004.87E+011.56E+033.94E-031.22E-013.83E+001.21E+02 + 6K1 40.001.73E-025.63E-011.54E+014.01E+022.23E-035.62E-021.43E+003.65E+01 + 6K1 50.008.21E-032.18E-014.87E+001.03E+021.27E-032.60E-025.36E-011.11E+01 + 6K1 65.003.42E-037.16E-021.26E+002.10E+016.63E-041.06E-021.72E-012.79E+00 + 6K1 80.001.71E-032.97E-024.33E-015.99E+003.97E-045.28E-037.04E-029.45E-01 + 6K1 100.008.16E-041.16E-021.38E-011.57E+002.31E-042.51E-032.74E-023.00E-01 + 6K1 120.004.46E-045.38E-035.48E-025.29E-011.49E-041.38E-031.28E-021.19E-01 + 6K1 150.002.14E-042.12E-031.78E-021.42E-018.76E-056.71E-045.13E-033.94E-02 + 6K1 200.008.43E-056.53E-044.30E-032.70E-024.49E-052.71E-041.63E-039.78E-03 + 6K1 300.002.37E-051.31E-046.23E-042.83E-031.80E-057.92E-053.45E-041.50E-03 + 6K1 450.007.33E-062.92E-051.03E-043.46E-047.56E-062.49E-058.11E-052.64E-04 + 6K1 650.002.85E-068.61E-062.36E-056.23E-053.59E-069.38E-062.42E-056.20E-05 + 6K11000.001.12E-062.55E-065.40E-061.12E-051.60E-063.30E-066.73E-061.36E-05 + 6K12000.003.58E-075.75E-078.94E-071.37E-064.99E-077.74E-071.19E-061.81E-06 + 6K16000.009.29E-081.11E-071.32E-071.57E-071.09E-071.30E-071.54E-071.83E-07 + 6L1 15.002.30E-021.82E+001.22E+027.74E+031.50E-039.70E-026.32E+004.17E+02 + 6L1 17.001.53E-021.08E+006.45E+013.67E+031.08E-036.18E-023.57E+002.08E+02 + 6L1 20.009.00E-035.51E-012.83E+011.38E+037.07E-043.45E-021.70E+008.50E+01 + 6L1 25.004.33E-032.16E-019.05E+003.61E+023.96E-041.56E-026.22E-012.50E+01 + 6L1 32.001.92E-037.63E-022.55E+008.12E+012.10E-046.55E-032.06E-016.54E+00 + 6L1 40.009.15E-042.97E-028.10E-012.10E+011.19E-043.01E-037.66E-021.97E+00 + 6L1 50.004.36E-041.15E-022.57E-015.43E+006.80E-051.39E-032.87E-025.97E-01 + 6L1 65.001.82E-043.80E-036.65E-021.11E+003.54E-055.68E-042.19E-031.49E-01 + 6L1 80.009.11E-051.58E-032.29E-023.17E-012.12E-052.82E-043.77E-035.06E-02 + 6L1 100.004.34E-056.15E-047.33E-038.30E-021.23E-051.34E-041.47E-031.61E-02 + 6L1 120.002.37E-052.86E-042.91E-032.81E-027.95E-067.37E-056.85E-046.38E-03 + 6L1 150.001.14E-051.13E-049.47E-047.55E-034.68E-063.58E-052.74E-042.10E-03 + 6L1 200.004.49E-063.48E-052.29E-041.43E-032.40E-061.45E-058.69E-055.23E-04 + 6L1 300.001.27E-066.97E-063.32E-051.50E-049.62E-074.23E-061.84E-058.04E-05 + 6L1 450.003.91E-071.56E-065.47E-061.84E-054.03E-071.33E-064.33E-061.41E-05 + 6L1 650.001.52E-074.59E-071.26E-063.32E-061.92E-075.00E-071.29E-063.31E-06 + 6L11000.006.00E-081.36E-072.88E-075.95E-078.51E-081.76E-073.59E-077.27E-07 + 6L12000.001.91E-083.06E-084.77E-087.33E-082.66E-084.13E-086.34E-089.67E-08 + 10K1 15.001.55E+001.11E+026.67E+033.83E+051.66E-011.05E+016.42E+023.96E+04 + 10K1 17.001.04E+006.75E+013.64E+031.88E+051.18E-016.58E+003.60E+021.98E+04 + 10K1 20.006.24E-013.51E+011.65E+037.40E+047.60E-023.62E+001.70E+028.07E+03 + 10K1 25.003.06E-011.42E+015.49E+022.03E+044.17E-021.60E+006.14E+012.37E+03 + 10K1 32.001.38E-015.17E+001.61E+024.81E+032.17E-026.59E-012.00E+016.15E+02 + 10K1 40.006.73E-022.06E+005.29E+011.30E+031.21E-022.98E-017.36E+001.84E+02 + 10K1 50.003.26E-028.21E-011.73E+013.47E+026.77E-031.36E-012.73E+005.54E+01 + 10K1 65.001.38E-022.77E-014.62E+007.36E+013.46E-035.46E-028.64E-011.38E+01 + 10K1 80.007.02E-031.17E-011.63E+002.16E+012.05E-032.68E-023.52E-014.64E+00 + 10K1 100.003.39E-034.64E-025.33E-015.82E+001.18E-031.27E-021.36E-011.47E+00 + 10K1 120.001.87E-032.19E-022.15E-012.01E+007.54E-046.91E-036.32E-025.81E-01 + 10K1 150.009.09E-048.77E-037.13E-025.51E-014.40E-043.34E-032.52E-021.91E-01 + 10K1 200.003.63E-042.74E-031.76E-021.07E-012.23E-041.34E-037.95E-034.74E-02 + 10K1 300.001.04E-045.62E-042.62E-031.17E-028.83E-053.88E-041.68E-037.27E-03 + 10K1 450.003.25E-051.28E-044.43E-041.47E-033.66E-051.21E-043.94E-041.27E-03 + 10K1 650.001.28E-053.83E-051.04E-042.72E-041.72E-054.53E-051.17E-042.99E-04 + 10K11000.005.06E-061.15E-052.43E-055.01E-057.52E-061.58E-053.24E-056.57E-05 + 10K12000.001.60E-062.61E-064.09E-066.31E-062.30E-063.63E-065.63E-068.65E-06 + 10K16000.004.11E-074.97E-075.97E-077.14E-074.88E-075.90E-077.07E-078.45E-07 + 10L1 15.008.71E-026.12E+003.60E+022.02E+049.81E-036.43E-014.13E+012.68E+03 + 10L1 17.005.89E-023.74E+001.98E+021.00E+046.96E-034.02E-012.29E+011.32E+03 + 10L1 20.003.54E-021.96E+009.05E+014.00E+034.47E-032.19E-011.07E+015.25E+02 + 10L1 25.001.75E-027.99E-013.05E+011.12E+032.45E-039.66E-023.79E+001.51E+02 + 10L1 32.007.94E-032.93E-019.06E+002.67E+021.27E-033.94E-021.22E+003.83E+01 + 10L1 40.003.88E-031.18E-013.00E+007.27E+017.09E-041.77E-024.45E-011.13E+01 + 10L1 50.001.88E-034.71E-029.85E-011.96E+013.98E-048.05E-031.64E-013.37E+00 + 10L1 65.008.03E-041.60E-022.65E-014.20E+002.03E-043.23E-035.16E-028.29E-01 + 10L1 80.004.08E-046.76E-039.39E-021.24E+001.21E-041.59E-032.09E-022.78E-01 + 10L1 100.001.97E-042.69E-033.08E-023.35E-016.92E-057.46E-048.06E-038.74E-02 + 10L1 120.001.09E-041.27E-031.24E-021.16E-014.43E-054.07E-043.74E-033.45E-02 + 10L1 150.005.31E-055.11E-044.14E-033.20E-022.58E-051.97E-041.49E-031.13E-02 + 10L1 200.002.12E-051.60E-041.03E-036.25E-031.31E-057.87E-054.69E-042.80E-03 + 10L1 300.006.08E-063.29E-051.53E-046.80E-045.18E-062.28E-059.89E-054.28E-04 + 10L1 450.001.91E-067.49E-062.59E-058.60E-052.14E-067.11E-062.31E-057.49E-05 + 10L1 650.007.48E-072.24E-066.08E-061.59E-051.01E-062.66E-066.87E-061.76E-05 + 10L11000.002.96E-076.74E-071.43E-062.93E-064.41E-079.26E-071.90E-063.86E-06 + 10L12000.009.40E-081.53E-072.40E-073.70E-071.35E-072.13E-073.31E-075.08E-07 + 10L2 15.001.08E-032.63E-014.83E+016.40E+031.82E-042.50E-022.71E+002.62E+02 + 10L2 17.006.51E-041.37E-012.22E+012.60E+031.20E-041.46E-021.41E+001.21E+02 + 10L2 20.003.34E-045.88E-028.06E+008.08E+027.02E-057.27E-036.00E-014.41E+01 + 10L2 25.001.34E-041.84E-022.01E+001.62E+023.35E-052.78E-031.86E-011.11E+01 + 10L2 32.004.83E-055.09E-034.34E-012.76E+011.47E-059.63E-045.09E-022.40E+00 + 10L2 40.001.92E-051.60E-031.09E-015.59E+007.00E-063.69E-041.58E-026.03E-01 + 10L2 50.007.63E-065.04E-042.74E-021.14E+003.33E-061.42E-044.91E-031.52E-01 + 10L2 65.002.59E-061.30E-045.48E-031.77E-011.39E-064.61E-051.25E-033.04E-02 + 10L2 80.001.10E-064.50E-051.55E-034.11E-026.97E-071.90E-054.26E-048.54E-03 + 10L2 100.004.43E-071.45E-054.01E-048.67E-033.33E-077.37E-061.35E-042.21E-03 + 10L2 120.002.12E-075.80E-061.35E-042.47E-031.82E-073.42E-065.30E-057.38E-04 + 10L2 150.008.66E-081.91E-063.61E-055.40E-048.76E-081.34E-061.71E-051.96E-04 + 10L2 200.002.80E-084.71E-076.81E-067.91E-053.43E-084.09E-074.07E-063.65E-05 + 10L2 300.005.99E-096.97E-087.05E-075.82E-069.31E-097.92E-085.66E-073.66E-06 + 10L2 450.001.39E-091.14E-088.23E-084.94E-072.61E-091.62E-088.54E-084.09E-07 + 10L2 650.004.07E-102.48E-091.33E-086.14E-088.54E-104.08E-091.67E-086.26E-08 + 10L21000.001.10E-104.82E-101.90E-096.61E-092.45E-108.87E-102.81E-098.16E-09 + 10L22000.001.84E-115.11E-111.31E-103.12E-103.86E-119.62E-112.17E-104.56E-10 + 10L3 15.002.12E-035.00E-019.09E+011.20E+049.64E-052.41E-024.83E+006.60E+02 + 10L3 17.001.27E-032.60E-014.14E+014.83E+036.42E-051.34E-022.34E+002.83E+02 + 10L3 20.006.51E-041.11E-011.49E+011.49E+033.78E-056.29E-039.18E-019.45E+01 + 10L3 25.002.60E-043.43E-023.68E+002.95E+021.83E-052.23E-032.56E-012.11E+01 + 10L3 32.009.37E-059.39E-037.79E-014.91E+018.17E-067.17E-046.29E-024.08E+00 + 10L3 40.003.72E-052.91E-031.92E-019.71E+003.94E-062.58E-041.79E-029.34E-01 + 10L3 50.001.48E-059.02E-044.71E-021.92E+001.91E-069.38E-055.13E-032.16E-01 + 10L3 65.005.00E-062.28E-049.10E-032.88E-018.12E-072.88E-051.20E-033.92E-02 + 10L3 80.002.13E-067.72E-052.48E-036.43E-024.15E-071.14E-053.82E-041.03E-02 + 10L3 100.008.60E-072.43E-056.19E-041.29E-022.02E-074.25E-061.13E-042.48E-03 + 10L3 120.004.13E-079.48E-062.00E-043.51E-031.13E-071.91E-064.23E-057.84E-04 + 10L3 150.001.70E-073.04E-065.08E-057.20E-045.60E-087.26E-071.29E-051.95E-04 + 10L3 200.005.59E-087.17E-078.86E-069.58E-052.30E-082.13E-072.84E-063.34E-05 + 10L3 300.001.25E-081.01E-078.09E-075.98E-066.83E-093.99E-083.56E-072.97E-06 + 10L3 450.003.16E-091.59E-088.34E-084.24E-072.17E-098.16E-094.85E-082.93E-07 + 10L3 650.001.03E-093.47E-091.25E-084.58E-088.23E-102.15E-098.79E-093.97E-08 + 10L31000.003.27E-107.30E-101.76E-094.51E-092.95E-105.34E-101.41E-094.50E-09 + 10L32000.007.46E-111.04E-101.54E-102.44E-107.29E-119.05E-111.32E-102.33E-10 + 14K1 15.003.30E+002.09E+021.09E+045.49E+055.79E-013.62E+012.07E+031.17E+05 + 14K1 17.002.25E+001.29E+026.16E+032.82E+054.06E-012.25E+011.15E+035.91E+04 + 14K1 20.001.36E+006.92E+012.91E+031.17E+052.58E-011.22E+015.43E+022.42E+04 + 14K1 25.006.82E-012.89E+011.02E+033.44E+041.39E-015.28E+001.94E+027.12E+03 + 14K1 32.003.15E-011.09E+013.13E+028.64E+037.06E-022.13E+006.24E+011.84E+03 + 14K1 40.001.56E-014.47E+001.07E+022.44E+033.87E-029.44E-012.27E+015.48E+02 + 14K1 50.007.65E-021.82E+003.60E+016.81E+022.14E-024.24E-018.31E+001.64E+02 + 14K1 65.003.31E-026.29E-019.97E+001.51E+021.08E-021.68E-012.60E+004.05E+01 + 14K1 80.001.70E-022.71E-013.60E+004.56E+016.30E-038.15E-021.05E+001.36E+01 + 14K1 100.008.30E-031.09E-011.21E+001.26E+013.57E-033.80E-024.02E-014.27E+00 + 14K1 120.004.63E-035.23E-024.94E-014.45E+002.27E-032.06E-021.86E-011.68E+00 + 14K1 150.002.27E-032.13E-021.67E-011.25E+001.31E-039.87E-037.36E-025.51E-01 + 14K1 200.009.19E-046.77E-034.22E-022.51E-016.56E-043.92E-032.31E-021.36E-01 + 14K1 300.002.68E-041.42E-036.47E-032.82E-022.56E-041.13E-034.84E-032.08E-02 + 14K1 450.008.49E-053.29E-041.12E-033.67E-031.04E-043.48E-041.13E-033.63E-03 + 14K1 650.003.36E-051.00E-042.69E-046.96E-044.84E-051.29E-043.34E-048.52E-04 + 14K11000.001.34E-053.05E-056.43E-051.32E-042.09E-054.46E-059.18E-051.87E-04 + 14K12000.004.22E-066.97E-061.10E-051.71E-056.23E-061.00E-051.57E-052.43E-05 + 14K16000.001.07E-061.31E-061.59E-061.92E-061.28E-061.57E-061.91E-062.30E-06 + 14L1 15.002.22E-011.36E+016.84E+023.29E+044.24E-022.91E+001.86E+021.19E+04 + 14L1 17.001.52E-018.51E+003.92E+021.73E+042.97E-021.79E+001.01E+025.74E+03 + 14L1 20.009.33E-024.60E+001.88E+027.35E+031.88E-029.54E-014.62E+012.24E+03 + 14L1 25.004.72E-021.95E+006.72E+012.21E+031.01E-024.08E-011.59E+016.26E+02 + 14L1 32.002.20E-027.47E-012.11E+015.69E+025.15E-031.62E-014.99E+001.55E+02 + 14L1 40.001.09E-023.09E-017.28E+001.64E+022.82E-037.12E-021.77E+004.46E+01 + 14L1 50.005.42E-031.27E-012.49E+004.64E+011.56E-033.17E-026.40E-011.30E+01 + 14L1 65.002.36E-034.44E-026.96E-011.04E+017.83E-041.25E-021.97E-013.15E+00 + 14L1 80.001.21E-031.92E-022.53E-013.18E+004.58E-046.03E-037.89E-021.04E+00 + 14L1 100.005.96E-047.80E-038.53E-028.88E-012.60E-042.80E-033.00E-023.23E-01 + 14L1 120.003.33E-043.74E-033.52E-023.14E-011.65E-041.51E-031.38E-021.27E-01 + 14L1 150.001.64E-041.53E-031.20E-028.90E-029.52E-057.23E-045.44E-034.11E-02 + 14L1 200.006.64E-054.88E-043.03E-031.79E-024.77E-052.87E-041.70E-031.01E-02 + 14L1 300.001.94E-051.03E-044.67E-042.03E-031.86E-058.22E-053.55E-041.53E-03 + 14L1 450.006.17E-062.39E-058.13E-052.65E-047.60E-062.54E-058.26E-052.67E-04 + 14L1 650.002.44E-067.27E-061.95E-055.05E-053.53E-069.43E-062.44E-056.24E-05 + 14L11000.009.71E-072.22E-064.68E-069.59E-061.52E-063.25E-066.70E-061.36E-05 + 14L12000.003.07E-075.07E-078.01E-071.24E-064.53E-077.31E-071.15E-061.77E-06 + 14L2 15.006.97E-031.92E+003.64E+024.74E+041.42E-031.93E-012.04E+011.90E+03 + 14L2 17.004.25E-031.01E+001.68E+021.94E+049.41E-041.14E-011.07E+018.83E+02 + 14L2 20.002.23E-034.37E-016.17E+016.10E+035.53E-045.70E-024.59E+003.27E+02 + 14L2 25.009.12E-041.39E-011.56E+011.24E+032.66E-042.21E-021.44E+008.35E+01 + 14L2 32.003.38E-043.89E-023.40E+002.14E+021.18E-047.72E-034.00E-011.84E+01 + 14L2 40.001.37E-041.24E-028.62E-014.39E+015.68E-052.99E-031.26E-014.70E+00 + 14L2 50.005.57E-053.95E-032.20E-019.05E+002.73E-051.16E-033.95E-021.20E+00 + 14L2 65.001.93E-051.03E-034.44E-021.43E+001.15E-053.81E-041.02E-022.43E-01 + 14L2 80.008.33E-063.61E-041.26E-023.35E-015.81E-061.58E-043.50E-036.93E-02 + 14L2 100.003.40E-061.17E-043.31E-037.13E-022.80E-066.19E-051.12E-031.81E-02 + 14L2 120.001.65E-064.73E-051.12E-032.04E-021.54E-062.89E-054.44E-046.11E-03 + 14L2 150.006.82E-071.58E-053.02E-044.51E-037.45E-071.14E-051.44E-041.64E-03 + 14L2 200.002.23E-073.92E-065.77E-056.70E-042.94E-073.51E-063.47E-053.09E-04 + 14L2 300.004.88E-085.89E-076.05E-065.00E-058.07E-086.89E-074.90E-063.15E-05 + 14L2 450.001.15E-089.77E-087.14E-074.30E-062.28E-081.43E-077.49E-073.56E-06 + 14L2 650.003.40E-092.13E-081.17E-075.40E-077.50E-093.62E-081.48E-075.53E-07 + 14L21000.009.22E-104.17E-091.68E-085.86E-082.15E-097.91E-092.51E-087.28E-08 + 14L22000.001.54E-104.42E-101.16E-092.78E-093.36E-108.57E-101.95E-094.11E-09 + 14L3 15.001.35E-023.61E+006.76E+028.74E+046.99E-042.49E-015.53E+017.57E+03 + 14L3 17.008.19E-031.89E+003.10E+023.56E+044.69E-041.37E-012.64E+013.20E+03 + 14L3 20.004.28E-038.12E-011.13E+021.11E+042.78E-046.33E-021.01E+011.05E+03 + 14L3 25.001.75E-032.55E-012.80E+012.22E+031.36E-042.20E-022.75E+002.29E+02 + 14L3 32.006.47E-047.06E-026.00E+003.74E+026.15E-056.93E-036.60E-014.32E+01 + 14L3 40.002.62E-042.21E-021.49E+007.49E+013.00E-052.46E-031.84E-019.69E+00 + 14L3 50.001.06E-046.93E-033.70E-011.50E+011.46E-058.79E-045.17E-022.20E+00 + 14L3 65.003.66E-051.77E-037.21E-022.27E+006.30E-062.65E-041.18E-023.92E-01 + 14L3 80.001.58E-056.05E-041.98E-025.11E-013.24E-061.04E-043.72E-031.02E-01 + 14L3 100.006.47E-061.92E-044.97E-031.04E-011.59E-063.82E-051.09E-032.41E-02 + 14L3 120.003.13E-067.54E-051.62E-032.83E-028.95E-071.70E-054.02E-047.56E-03 + 14L3 150.001.31E-062.43E-054.13E-045.84E-034.45E-076.41E-061.21E-041.86E-03 + 14L3 200.004.35E-075.78E-067.25E-057.83E-041.84E-071.86E-062.63E-053.15E-04 + 14L3 300.009.88E-088.17E-076.66E-064.93E-055.49E-083.44E-073.24E-062.76E-05 + 14L3 450.002.52E-081.30E-076.90E-073.52E-061.74E-086.91E-084.34E-072.68E-06 + 14L3 650.008.23E-092.84E-081.03E-073.81E-076.63E-091.79E-087.72E-083.59E-07 + 14L31000.002.62E-095.96E-091.45E-083.76E-082.37E-094.39E-091.21E-083.99E-08 + 14L32000.005.96E-108.42E-101.25E-092.00E-095.82E-107.29E-101.08E-091.96E-09 + 15K1 15.003.82E+002.33E+021.17E+045.66E+057.54E-014.70E+012.62E+031.45E+05 + 15K1 17.002.61E+001.45E+026.68E+032.95E+055.28E-012.92E+011.47E+037.33E+04 + 15K1 20.001.59E+007.82E+013.18E+031.25E+053.34E-011.57E+016.90E+023.02E+04 + 15K1 25.007.98E-013.30E+011.13E+033.72E+041.79E-016.80E+002.46E+028.90E+03 + 15K1 32.003.70E-011.25E+013.53E+029.51E+039.07E-022.72E+007.92E+012.31E+03 + 15K1 40.001.84E-015.18E+001.21E+022.72E+034.95E-021.20E+002.87E+016.87E+02 + 15K1 50.009.06E-022.12E+004.13E+017.68E+022.72E-025.39E-011.05E+012.06E+02 + 15K1 65.003.93E-027.38E-011.15E+011.72E+021.36E-022.12E-013.27E+005.07E+01 + 15K1 80.002.03E-023.19E-014.19E+005.24E+017.97E-031.03E-011.32E+001.70E+01 + 15K1 100.009.93E-031.30E-011.41E+001.46E+014.51E-034.79E-025.04E-015.33E+00 + 15K1 120.005.55E-036.21E-025.81E-015.18E+002.85E-032.59E-022.33E-012.10E+00 + 15K1 150.002.73E-032.53E-021.98E-011.47E+001.64E-031.24E-029.20E-026.87E-01 + 15K1 200.001.11E-038.10E-035.02E-022.96E-018.21E-044.90E-032.88E-021.69E-01 + 15K1 300.003.24E-041.71E-037.75E-033.35E-023.19E-041.40E-036.03E-032.59E-02 + 15K1 450.001.03E-043.98E-041.35E-034.40E-031.30E-044.34E-041.40E-034.51E-03 + 15K1 650.004.09E-051.22E-043.26E-048.41E-046.00E-051.61E-044.15E-041.06E-03 + 15K11000.001.63E-053.72E-057.84E-051.60E-042.58E-055.52E-051.14E-042.31E-04 + 15K12000.005.14E-068.51E-061.35E-052.09E-057.64E-061.24E-051.95E-053.01E-05 + 15K16000.001.30E-061.59E-061.94E-062.34E-061.56E-061.92E-062.34E-062.82E-06 + 15L1 15.002.64E-011.55E+017.48E+023.43E+045.73E-023.99E+002.54E+021.62E+04 + 15L1 17.001.82E-019.79E+004.33E+021.83E+044.01E-022.44E+001.38E+027.79E+03 + 15L1 20.001.12E-015.34E+002.11E+027.94E+032.53E-021.30E+006.27E+013.03E+03 + 15L1 25.005.68E-022.29E+007.65E+012.44E+031.36E-025.51E-012.15E+018.41E+02 + 15L1 32.002.66E-028.84E-012.43E+016.41E+026.87E-032.17E-016.68E+002.07E+02 + 15L1 40.001.33E-023.70E-018.51E+001.87E+023.75E-039.49E-022.36E+005.93E+01 + 15L1 50.006.63E-031.53E-012.93E+005.38E+012.06E-034.21E-028.48E-011.73E+01 + 15L1 65.002.90E-035.38E-028.30E-011.22E+011.03E-031.64E-022.60E-014.14E+00 + 15L1 80.001.50E-032.34E-023.04E-013.77E+006.02E-047.92E-031.04E-011.36E+00 + 15L1 100.007.37E-049.55E-031.03E-011.06E+003.41E-043.67E-033.92E-024.22E-01 + 15L1 120.004.13E-044.59E-034.27E-023.78E-012.15E-041.98E-031.80E-021.65E-01 + 15L1 150.002.04E-041.88E-031.46E-021.08E-011.24E-049.43E-047.09E-035.35E-02 + 15L1 200.008.30E-056.05E-043.73E-032.19E-026.20E-053.73E-042.21E-031.31E-02 + 15L1 300.002.43E-051.28E-045.79E-042.50E-032.41E-051.07E-044.60E-041.98E-03 + 15L1 450.007.77E-062.99E-051.02E-043.30E-049.80E-063.29E-051.07E-043.44E-04 + 15L1 650.003.08E-069.16E-062.45E-056.33E-054.53E-061.22E-053.15E-058.05E-05 + 15L11000.001.23E-062.80E-065.91E-061.21E-051.94E-064.17E-068.62E-061.75E-05 + 15L12000.003.87E-076.42E-071.02E-061.58E-065.76E-079.35E-071.47E-062.28E-06 + 15L2 15.009.84E-032.80E+005.35E+026.92E+042.09E-032.85E-012.98E+012.75E+03 + 15L2 17.006.02E-031.47E+002.47E+022.84E+041.39E-031.68E-011.56E+011.28E+03 + 15L2 20.003.17E-036.40E-019.08E+018.94E+038.20E-048.44E-026.75E+004.77E+02 + 15L2 25.001.31E-032.04E-012.30E+011.83E+033.96E-043.28E-022.13E+001.22E+02 + 15L2 32.004.87E-045.73E-025.03E+003.16E+021.76E-041.15E-025.92E-012.71E+01 + 15L2 40.001.99E-041.83E-021.28E+006.50E+018.49E-054.46E-031.87E-016.94E+00 + 15L2 50.008.09E-055.84E-033.27E-011.34E+014.08E-051.73E-035.88E-021.78E+00 + 15L2 65.002.81E-051.54E-036.62E-022.13E+001.73E-055.71E-041.52E-023.62E-01 + 15L2 80.001.22E-055.38E-041.89E-025.00E-018.74E-062.38E-045.24E-031.03E-01 + 15L2 100.005.01E-061.75E-044.96E-031.07E-014.21E-069.32E-051.68E-032.71E-02 + 15L2 120.002.43E-067.08E-051.68E-033.07E-022.32E-064.36E-056.67E-049.16E-03 + 15L2 150.001.01E-062.36E-054.55E-046.79E-031.13E-061.73E-052.18E-042.46E-03 + 15L2 200.003.32E-075.89E-068.70E-051.01E-034.45E-075.32E-065.25E-054.65E-04 + 15L2 300.007.28E-088.88E-079.15E-067.57E-051.22E-071.05E-067.44E-064.76E-05 + 15L2 450.001.73E-081.48E-071.08E-066.53E-063.47E-082.17E-071.14E-065.42E-06 + 15L2 650.005.11E-093.23E-081.78E-078.21E-071.14E-085.52E-082.26E-078.42E-07 + 15L21000.001.39E-096.33E-092.55E-088.94E-083.27E-091.21E-083.83E-081.11E-07 + 15L22000.002.32E-106.70E-101.77E-094.25E-095.11E-101.31E-092.98E-096.30E-09 + 15L3 15.001.89E-025.25E+009.88E+021.27E+051.02E-033.95E-018.97E+011.23E+04 + 15L3 17.001.16E-022.75E+004.54E+025.18E+046.82E-042.17E-014.26E+015.17E+03 + 15L3 20.006.07E-031.18E+001.65E+021.61E+044.06E-049.97E-021.63E+011.69E+03 + 15L3 25.002.49E-033.73E-014.12E+013.25E+031.99E-043.46E-024.41E+003.67E+02 + 15L3 32.009.27E-041.04E-018.84E+005.50E+029.02E-051.08E-021.05E+006.89E+01 + 15L3 40.003.77E-043.25E-022.20E+001.10E+024.41E-053.82E-032.91E-011.54E+01 + 15L3 50.001.53E-041.02E-025.47E-012.21E+012.15E-051.36E-038.15E-023.48E+00 + 15L3 65.005.32E-052.62E-031.07E-013.36E+009.29E-064.10E-041.85E-026.17E-01 + 15L3 80.002.31E-058.95E-042.94E-027.58E-014.79E-061.60E-045.82E-031.59E-01 + 15L3 100.009.46E-062.84E-047.40E-031.54E-012.36E-065.86E-051.69E-033.77E-02 + 15L3 120.004.60E-061.12E-042.41E-034.21E-021.33E-062.61E-056.25E-041.18E-02 + 15L3 150.001.92E-063.61E-056.16E-048.71E-036.61E-079.79E-061.87E-042.89E-03 + 15L3 200.006.41E-078.61E-061.08E-041.17E-032.73E-072.83E-064.06E-054.87E-04 + 15L3 300.001.46E-071.22E-069.98E-067.38E-058.16E-085.21E-074.98E-064.26E-05 + 15L3 450.003.73E-081.94E-071.03E-065.28E-062.60E-081.04E-076.64E-074.12E-06 + 15L3 650.001.22E-084.24E-081.55E-075.72E-079.86E-092.70E-081.18E-075.50E-07 + 15L31000.003.90E-098.89E-092.18E-085.64E-083.52E-096.57E-091.83E-086.08E-08 + 15L32000.008.85E-101.25E-091.87E-092.99E-098.64E-101.08E-091.62E-092.96E-09 + 16K1 15.004.37E+002.56E+021.24E+045.75E+059.68E-016.03E+013.28E+031.76E+05 + 16K1 17.002.99E+001.61E+027.13E+033.04E+056.77E-013.73E+011.84E+038.95E+04 + 16K1 20.001.83E+008.73E+013.44E+031.31E+054.26E-012.01E+018.65E+023.70E+04 + 16K1 25.009.22E-013.72E+011.24E+033.97E+042.28E-018.65E+003.08E+021.10E+04 + 16K1 32.004.29E-011.42E+013.92E+021.03E+041.15E-013.45E+009.91E+012.85E+03 + 16K1 40.002.14E-015.92E+001.36E+022.99E+036.25E-021.52E+003.58E+018.49E+02 + 16K1 50.001.06E-012.44E+004.67E+018.55E+023.43E-026.76E-011.31E+012.55E+02 + 16K1 65.004.61E-028.55E-011.32E+011.94E+021.71E-022.66E-014.07E+006.27E+01 + 16K1 80.002.38E-023.71E-014.81E+005.94E+019.96E-031.28E-011.64E+002.10E+01 + 16K1 100.001.17E-021.51E-011.63E+001.67E+015.62E-035.95E-026.24E-016.57E+00 + 16K1 120.006.56E-037.27E-026.74E-015.95E+003.55E-033.21E-022.88E-012.59E+00 + 16K1 150.003.24E-032.98E-022.31E-011.70E+002.04E-031.53E-021.14E-018.45E-01 + 16K1 200.001.32E-039.57E-035.89E-023.44E-011.02E-036.06E-033.55E-022.08E-01 + 16K1 300.003.87E-042.03E-039.15E-033.94E-023.93E-041.73E-037.42E-033.17E-02 + 16K1 450.001.24E-044.75E-041.61E-035.21E-031.59E-045.33E-041.72E-035.53E-03 + 16K1 650.004.91E-051.46E-043.89E-041.00E-037.33E-051.97E-045.08E-041.30E-03 + 16K11000.001.96E-054.47E-059.42E-051.93E-043.14E-056.75E-051.39E-042.83E-04 + 16K12000.006.17E-061.03E-051.63E-052.53E-059.24E-061.51E-052.37E-053.68E-05 + 16K16000.001.55E-061.91E-062.33E-062.83E-061.88E-062.32E-062.83E-063.42E-06 + 16L1 15.003.08E-011.74E+018.00E+023.49E+047.59E-025.37E+003.42E+022.16E+04 + 16L1 17.002.13E-011.11E+014.69E+021.89E+045.31E-023.28E+001.85E+021.04E+04 + 16L1 20.001.32E-016.09E+002.31E+028.38E+033.34E-021.73E+008.36E+014.03E+03 + 16L1 25.006.73E-022.64E+008.54E+012.64E+031.79E-027.31E-012.85E+011.11E+03 + 16L1 32.003.17E-021.03E+002.76E+017.08E+029.00E-032.86E-018.80E+002.72E+02 + 16L1 40.001.59E-024.33E-019.75E+002.10E+024.89E-031.24E-013.09E+007.75E+01 + 16L1 50.007.96E-031.81E-013.40E+006.11E+012.68E-035.49E-021.11E+002.24E+01 + 16L1 65.003.50E-036.39E-029.72E-011.41E+011.34E-032.13E-023.37E-015.36E+00 + 16L1 80.001.82E-032.80E-023.59E-014.38E+007.77E-041.02E-021.34E-011.76E+00 + 16L1 100.008.96E-041.15E-021.22E-011.24E+004.38E-044.73E-035.05E-025.42E-01 + 16L1 120.005.04E-045.54E-035.10E-024.46E-012.77E-042.54E-032.31E-022.11E-01 + 16L1 150.002.49E-042.28E-031.75E-021.28E-011.59E-041.21E-039.07E-036.83E-02 + 16L1 200.001.02E-047.36E-044.51E-032.62E-027.91E-054.76E-042.81E-031.67E-02 + 16L1 300.003.00E-051.57E-047.05E-043.03E-033.06E-051.36E-045.85E-042.52E-03 + 16L1 450.009.60E-063.69E-051.25E-044.03E-041.24E-054.17E-051.35E-044.36E-04 + 16L1 650.003.82E-061.13E-053.03E-057.79E-055.72E-061.54E-053.99E-051.02E-04 + 16L11000.001.52E-063.48E-067.34E-061.50E-052.44E-065.27E-061.09E-052.22E-05 + 16L12000.004.80E-077.99E-071.27E-061.97E-067.20E-071.17E-061.85E-062.87E-06 + 16L2 15.001.34E-023.96E+007.61E+029.79E+043.00E-034.08E-014.23E+013.87E+03 + 16L2 17.008.25E-032.09E+003.52E+024.03E+042.00E-032.41E-012.22E+011.81E+03 + 16L2 20.004.36E-039.08E-011.30E+021.27E+041.18E-031.21E-019.62E+006.75E+02 + 16L2 25.001.81E-032.89E-013.29E+012.61E+035.70E-044.71E-023.04E+001.74E+02 + 16L2 32.006.78E-048.18E-027.22E+004.52E+022.55E-041.66E-028.50E-013.86E+01 + 16L2 40.002.78E-042.61E-021.84E+009.33E+011.23E-046.45E-032.68E-019.93E+00 + 16L2 50.001.14E-048.38E-034.71E-011.93E+015.92E-052.51E-038.49E-022.56E+00 + 16L2 65.003.98E-052.21E-039.57E-023.07E+002.51E-058.29E-042.20E-025.22E-01 + 16L2 80.001.74E-057.75E-042.73E-027.23E-011.27E-053.46E-047.61E-031.49E-01 + 16L2 100.007.14E-062.53E-047.20E-031.55E-016.14E-061.36E-042.44E-033.92E-02 + 16L2 120.003.47E-061.03E-042.44E-034.45E-023.39E-066.36E-059.72E-041.33E-02 + 16L2 150.001.45E-063.43E-056.62E-049.88E-031.65E-062.53E-053.18E-043.58E-03 + 16L2 200.004.78E-078.58E-061.27E-041.47E-036.52E-077.80E-067.68E-056.79E-04 + 16L2 300.001.05E-071.30E-061.34E-051.11E-041.80E-071.54E-061.09E-056.98E-05 + 16L2 450.002.51E-082.16E-071.59E-069.59E-065.11E-083.20E-071.68E-067.97E-06 + 16L2 650.007.43E-094.74E-082.62E-071.21E-061.68E-088.16E-083.34E-071.24E-06 + 16L21000.002.02E-099.30E-093.77E-081.32E-074.83E-091.79E-085.67E-081.65E-07 + 16L22000.003.38E-109.83E-102.61E-096.29E-097.52E-101.94E-094.42E-099.34E-09 + 16L3 15.002.58E-027.39E+001.40E+031.79E+051.43E-036.06E-011.41E+021.93E+04 + 16L3 17.001.58E-023.87E+006.44E+027.32E+049.62E-043.32E-016.68E+018.09E+03 + 16L3 20.008.33E-031.67E+002.35E+022.28E+045.74E-041.52E-012.54E+012.63E+03 + 16L3 25.003.44E-035.28E-015.86E+014.61E+032.82E-045.26E-026.83E+005.70E+02 + 16L3 32.001.29E-031.47E-011.26E+017.82E+021.28E-041.64E-021.62E+001.06E+02 + 16L3 40.005.26E-044.62E-023.15E+001.57E+026.27E-055.76E-034.46E-012.36E+01 + 16L3 50.002.15E-041.46E-027.84E-013.17E+013.07E-052.04E-031.24E-015.32E+00 + 16L3 65.007.49E-053.74E-031.54E-014.82E+001.33E-056.12E-042.82E-029.39E-01 + 16L3 80.003.26E-051.28E-034.24E-021.09E+006.85E-062.38E-048.80E-032.41E-01 + 16L3 100.001.34E-054.08E-041.07E-022.22E-013.38E-068.71E-052.56E-035.70E-02 + 16L3 120.006.53E-061.61E-043.48E-036.07E-021.90E-063.87E-059.41E-041.78E-02 + 16L3 150.002.74E-065.20E-058.90E-041.26E-029.49E-071.45E-052.81E-044.35E-03 + 16L3 200.009.16E-071.24E-051.57E-041.69E-033.93E-074.17E-066.06E-057.31E-04 + 16L3 300.002.10E-071.76E-061.45E-051.07E-041.18E-077.64E-077.41E-066.37E-05 + 16L3 450.005.37E-082.81E-071.50E-067.67E-063.74E-081.52E-079.83E-076.14E-06 + 16L3 650.001.76E-086.13E-082.25E-078.32E-071.42E-083.92E-081.73E-078.16E-07 + 16L31000.005.61E-091.29E-083.16E-088.19E-085.06E-099.51E-092.67E-088.99E-08 + 16L32000.001.27E-091.81E-092.70E-094.34E-091.24E-091.56E-092.34E-094.32E-09 + 17K1 15.004.94E+002.79E+021.29E+045.73E+051.23E+007.64E+014.04E+032.10E+05 + 17K1 17.003.40E+001.76E+027.50E+033.08E+058.56E-014.71E+012.27E+031.07E+05 + 17K1 20.002.08E+009.63E+013.67E+031.35E+055.38E-012.53E+011.07E+034.47E+04 + 17K1 25.001.05E+004.14E+011.34E+034.18E+042.86E+011.09E+013.81E+021.33E+04 + 17K1 32.004.93E-011.60E+014.29E+021.11E+041.44E-014.31E+001.22E+023.48E+03 + 17K1 40.002.46E-016.69E+001.51E+023.25E+037.80E-021.89E+004.42E+011.04E+03 + 17K1 50.001.22E-012.78E+005.22E+019.39E+024.26E-028.39E-011.61E+013.11E+02 + 17K1 65.005.35E-029.78E-011.48E+012.15E+022.12E-023.28E-015.00E+007.65E+01 + 17K1 80.002.77E-024.27E-015.46E+006.66E+011.23E-021.58E-012.01E+002.56E+01 + 17K1 100.001.37E-021.75E-011.86E+001.89E+016.92E-037.32E-027.63E-018.01E+00 + 17K1 120.007.67E-038.42E-027.73E-016.75E+004.36E-033.94E-023.52E-013.15E+00 + 17K1 150.003.80E-033.47E-022.66E-011.94E+002.50E-031.88E-021.39E-011.03E+00 + 17K1 200.001.55E-031.12E-026.82E-023.96E-011.24E-037.40E-034.32E-022.53E-01 + 17K1 300.004.57E-042.38E-031.07E-024.57E-024.78E-042.11E-039.02E-033.85E-02 + 17K1 450.001.46E-045.60E-041.89E-036.10E-031.93E-046.47E-042.09E-036.70E-03 + 17K1 650.005.83E-051.73E-044.60E-041.18E-038.86E-052.38E-046.16E-041.57E-03 + 17K11000.002.33E-055.32E-051.12E-042.29E-043.78E-058.16E-051.69E-043.43E-04 + 17K12000.007.32E-061.22E-051.94E-053.02E-051.11E-051.81E-052.86E-054.44E-05 + 17K16000.001.84E-062.27E-062.78E-063.37E-062.23E-062.76E-063.38E-064.10E-06 + 17L1 15.003.54E-011.92E+018.40E+023.45E+049.90E-027.12E+004.53E+022.85E+04 + 17L1 17.002.46E-011.23E+014.99E+021.92E+046.91E-024.33E+002.44E+021.36E+04 + 17L1 20.001.53E-016.82E+002.49E+028.67E+034.34E-022.28E+001.10E+025.27E+03 + 17L1 25.007.85E-022.99E+009.36E+012.80E+032.31E-029.56E-013.72E+011.45E+03 + 17L1 32.003.72E-021.18E+003.08E+017.68E+021.16E-023.72E-011.14E+013.52E+02 + 17L1 40.001.88E-025.00E-011.10E+012.31E+026.28E-031.61E-013.99E+009.97E+01 + 17L1 50.009.42E-032.10E-013.87E+006.83E+013.43E-037.05E-021.42E+002.87E+01 + 17L1 65.004.16E-037.49E-021.12E+001.60E+011.70E-032.72E-024.30E-016.82E+00 + 17L1 80.002.17E-033.29E-024.16E-015.01E+009.88E-041.30E-021.70E-012.23E+00 + 17L1 100.001.07E-031.36E-021.43E-011.44E+005.55E-045.99E-036.39E-026.86E-01 + 17L1 120.006.04E-046.58E-035.99E-025.18E-013.50E-043.22E-032.92E-022.67E-01 + 17L1 150.003.00E-042.72E-032.07E-021.50E-012.00E-041.52E-031.14E-028.60E-02 + 17L1 200.001.23E-048.82E-045.36E-033.09E-029.95E-055.99E-043.54E-032.09E-02 + 17L1 300.003.64E-051.89E-048.45E-043.60E-033.84E-051.70E-047.33E-043.15E-03 + 17L1 450.001.17E-054.47E-051.50E-044.85E-041.55E-055.21E-051.69E-045.45E-04 + 17L1 650.004.66E-061.38E-053.67E-059.43E-057.11E-061.92E-054.97E-051.27E-04 + 17L11000.001.86E-064.26E-068.96E-061.83E-053.03E-066.55E-061.36E-052.76E-05 + 17L12000.005.86E-079.78E-071.56E-062.42E-068.86E-071.45E-062.30E-063.57E-06 + 17L2 15.001.79E-025.45E+001.05E+031.35E+054.19E-035.69E-015.85E+015.29E+03 + 17L2 17.001.10E-022.88E+004.89E+025.56E+042.79E-033.36E-013.08E+012.48E+03 + 17L2 20.005.85E-031.25E+001.80E+021.76E+041.65E-031.69E-011.33E+019.28E+02 + 17L2 25.002.44E-034.01E-014.58E+013.62E+038.00E-046.60E-024.23E+002.40E+02 + 17L2 32.009.21E-041.14E-011.01E+016.30E+023.58E-042.33E-021.19E+005.36E+01 + 17L2 40.003.80E-043.64E-022.57E+001.30E+021.73E-049.07E-033.76E-011.38E+01 + 17L2 50.001.56E-041.17E-026.61E-012.71E+018.35E-053.54E-031.19E-013.57E+00 + 17L2 65.005.48E-053.10E-031.35E-014.31E+003.55E-051.17E-033.10E-027.31E-01 + 17L2 80.002.40E-051.09E-033.85E-021.02E+001.80E-054.90E-041.07E-022.10E-01 + 17L2 100.009.90E-063.57E-041.02E-022.18E-018.72E-061.93E-043.46E-035.53E-02 + 17L2 120.004.83E-061.44E-043.46E-036.30E-024.83E-069.04E-051.38E-031.88E-02 + 17L2 150.002.02E-064.84E-059.39E-041.40E-022.35E-063.60E-054.51E-045.07E-03 + 17L2 200.006.70E-071.21E-051.81E-042.09E-039.31E-071.11E-051.09E-049.65E-04 + 17L2 300.001.48E-071.84E-061.91E-051.58E-042.58E-072.20E-061.56E-059.96E-05 + 17L2 450.003.54E-083.08E-072.28E-061.37E-057.32E-084.59E-072.41E-061.14E-05 + 17L2 650.001.05E-086.76E-083.75E-071.74E-062.42E-081.17E-074.80E-071.78E-06 + 17L21000.002.87E-091.33E-085.41E-081.90E-076.92E-092.58E-088.18E-082.37E-07 + 17L22000.004.79E-101.41E-093.74E-099.05E-091.08E-092.79E-096.38E-091.35E-08 + 17L3 15.003.42E-021.01E+011.93E+032.46E+051.97E-039.05E-012.16E+022.95E+04 + 17L3 17.002.10E-025.32E+008.90E+021.01E+051.32E-034.94E-011.02E+021.23E+04 + 17L3 20.001.11E-022.30E+003.25E+023.15E+047.90E-042.26E-013.86E+013.99E+03 + 17L3 25.004.63E-037.28E-018.13E+016.37E+033.89E-047.78E-021.03E+018.60E+02 + 17L3 32.001.74E-032.03E-011.75E+011.08E+031.77E-042.41E-022.43E+001.59E+02 + 17L3 40.007.14E-046.41E-024.38E+002.19E+028.68E-058.46E-036.66E-013.53E+01 + 17L3 50.002.93E-042.02E-021.09E+004.41E+014.26E-052.99E-031.85E-017.91E+00 + 17L3 65.001.03E-045.21E-032.15E-016.72E+001.85E-058.91E-044.17E-021.39E+00 + 17L3 80.004.48E-051.79E-035.93E-021.52E+009.54E-063.45E-041.30E-023.57E-01 + 17L3 100.001.85E-055.70E-041.50E-023.10E-014.71E-061.26E-043.75E-038.40E-02 + 17L3 120.009.03E-062.25E-044.88E-038.52E-022.66E-065.58E-051.38E-032.61E-02 + 17L3 150.003.80E-067.29E-051.25E-031.77E-021.33E-062.08E-054.10E-046.37E-03 + 17L3 200.001.27E-061.74E-052.21E-042.38E-035.50E-075.99E-068.83E-051.07E-03 + 17L3 300.002.93E-072.48E-062.04E-051.51E-041.65E-071.09E-061.07E-059.26E-05 + 17L3 450.007.50E-083.95E-072.12E-061.08E-055.25E-082.17E-071.42E-068.90E-06 + 17L3 650.002.46E-088.63E-083.18E-071.18E-061.99E-085.55E-082.49E-071.18E-06 + 17L31000.007.85E-091.81E-084.46E-081.16E-077.09E-091.34E-083.81E-081.29E-07 + 17L32000.001.78E-092.53E-093.80E-096.11E-091.74E-092.19E-093.30E-096.13E-09 + 18K1 15.005.53E+002.99E+021.32E+045.60E+051.54E+009.56E+014.91E+032.46E+05 + 18K1 17.003.81E+001.91E+027.78E+033.07E+051.07E+005.89E+012.76E+031.27E+05 + 18K1 20.002.34E+001.05E+023.86E+031.37E+056.71E-013.15E+011.30E+035.31E+04 + 18K1 25.001.19E+004.55E+011.43E+034.34E+043.56E-011.35E+014.65E+021.59E+04 + 18K1 32.005.60E-011.78E+014.65E+021.17E+041.78E-015.33E+001.49E+024.18E+03 + 18K1 40.002.81E-017.48E+001.65E+023.49E+039.63E-022.33E+005.39E+011.25E+03 + 18K1 50.001.40E-013.12E+005.77E+011.02E+035.24E-021.03E+001.96E+013.75E+02 + 18K1 65.006.15E-021.11E+001.66E+012.36E+022.60E-024.02E-016.07E+009.23E+01 + 18K1 80.003.19E-024.85E-016.13E+007.38E+011.50E-021.93E-012.43E+003.08E+01 + 18K1 100.001.58E-022.00E-012.10E+002.11E+018.44E-038.91E-029.25E-019.65E+00 + 18K1 120.008.88E-039.66E-028.77E-017.58E+005.30E-034.79E-024.25E-013.79E+00 + 18K1 150.004.41E-033.99E-023.03E-012.19E+003.03E-032.27E-021.67E-011.24E+00 + 18K1 200.001.80E-031.29E-027.82E-024.50E-011.50E-038.94E-035.21E-023.04E-01 + 18K1 300.005.34E-042.76E-031.23E-025.24E-025.77E-042.54E-031.09E-024.62E-02 + 18K1 450.001.72E-046.54E-042.20E-037.06E-032.32E-047.78E-042.51E-038.04E-03 + 18K1 650.006.85E-052.03E-045.38E-041.38E-031.06E-042.86E-047.39E-041.88E-03 + 18K11000.002.73E-056.26E-051.32E-042.69E-044.50E-059.76E-052.02E-044.10E-04 + 18K12000.008.60E-061.44E-052.30E-053.57E-051.31E-052.16E-053.42E-055.31E-05 + 18K16000.002.15E-062.67E-063.27E-063.98E-062.61E-063.25E-064.00E-064.86E-06 + 18L1 15.004.03E-012.09E+018.64E+023.34E+041.27E-019.32E+005.91E+023.70E+04 + 18L1 17.002.81E-011.35E+015.21E+021.89E+048.86E-025.64E+003.17E+021.77E+04 + 18L1 20.001.75E-017.53E+002.64E+028.78E+035.56E-022.96E+001.42E+026.80E+03 + 18L1 25.009.03E-023.34E+001.01E+022.91E+032.95E-021.23E+004.78E+011.86E+03 + 18L1 32.004.30E-021.33E+003.37E+018.18E+021.47E-024.76E-011.46E+014.49E+02 + 18L1 40.002.18E-025.69E-011.22E+012.51E+027.95E-032.05E-015.08E+001.27E+02 + 18L1 50.001.10E-022.41E-014.35E+007.51E+014.33E-038.94E-021.80E+003.64E+01 + 18L1 65.004.87E-038.64E-021.27E+001.78E+012.14E-033.44E-025.42E-018.59E+00 + 18L1 80.002.55E-033.82E-024.76E-015.64E+001.24E-031.64E-022.13E-012.80E+00 + 18L1 100.001.27E-031.58E-021.65E-011.63E+006.95E-047.51E-038.00E-028.57E-01 + 18L1 120.007.15E-047.71E-036.93E-025.93E-014.36E-044.02E-033.64E-023.32E-01 + 18L1 150.003.56E-043.20E-032.41E-021.73E-012.49E-041.90E-031.42E-021.07E-01 + 18L1 200.001.46E-041.04E-036.28E-033.60E-021.23E-047.43E-044.39E-032.59E-02 + 18L1 300.004.35E-052.25E-049.99E-044.23E-034.74E-052.10E-049.07E-043.89E-03 + 18L1 450.001.40E-055.34E-051.79E-045.74E-041.91E-056.43E-052.09E-046.72E-04 + 18L1 650.005.61E-061.66E-054.40E-051.13E-048.72E-062.36E-056.12E-051.57E-04 + 18L11000.002.24E-065.14E-061.08E-052.21E-053.70E-068.04E-061.67E-053.40E-05 + 18L12000.007.05E-071.18E-061.89E-062.94E-061.08E-061.77E-062.81E-064.37E-06 + 18L2 15.002.33E-027.34E+001.43E+031.81E+055.71E-037.74E-017.88E+017.06E+03 + 18L2 17.001.44E-023.88E+006.62E+027.49E+043.82E-034.58E-014.16E+013.32E+03 + 18L2 20.007.68E-031.69E+002.45E+022.37E+042.26E-032.31E-011.81E+011.25E+03 + 18L2 25.003.22E-035.43E-016.23E+014.90E+031.10E-039.03E-025.75E+003.23E+02 + 18L2 32.001.22E-031.54E-011.37E+018.56E+024.92E-043.19E-021.62E+007.26E+01 + 18L2 40.005.06E-044.95E-023.52E+001.78E+022.38E-041.25E-025.14E-011.88E+01 + 18L2 50.002.09E-041.60E-029.05E-013.70E+011.15E-044.87E-031.63E-014.87E+00 + 18L2 65.007.37E-054.24E-031.85E-015.91E+004.91E-051.62E-034.26E-021.00E+00 + 18L2 80.003.24E-051.49E-035.31E-021.40E+002.50E-056.78E-041.48E-022.88E-01 + 18L2 100.001.34E-054.90E-041.40E-023.01E-011.21E-052.67E-044.77E-037.62E-02 + 18L2 120.006.56E-061.99E-044.78E-038.69E-026.70E-061.25E-041.91E-032.59E-02 + 18L2 150.002.75E-066.68E-051.30E-031.94E-023.26E-065.01E-056.26E-047.02E-03 + 18L2 200.009.16E-071.68E-052.51E-042.91E-031.30E-061.55E-051.52E-041.34E-03 + 18L2 300.002.04E-072.56E-062.66E-052.20E-043.60E-073.08E-062.18E-051.39E-04 + 18L2 450.004.88E-084.29E-073.18E-061.92E-051.02E-076.44E-073.37E-061.59E-05 + 18L2 650.001.46E-089.43E-085.25E-072.43E-063.39E-081.65E-076.74E-072.50E-06 + 18L21000.003.97E-091.85E-087.59E-082.67E-079.71E-093.62E-081.15E-073.33E-07 + 18L22000.006.63E-101.96E-095.25E-091.27E-081.51E-093.93E-098.99E-091.90E-08 + 18L3 15.004.43E-021.36E+012.61E+033.29E+052.64E-031.32E+003.21E+024.39E+04 + 18L3 17.002.73E-027.15E+001.20E+031.35E+051.78E-037.18E-011.51E+021.83E+04 + 18L3 20.001.46E-023.10E+004.39E+024.23E+041.06E-033.28E-015.71E+015.91E+03 + 18L3 25.006.08E-039.81E-011.10E+028.58E+035.24E-041.12E-011.52E+011.27E+03 + 18L3 32.002.30E-032.75E-012.38E+011.47E+032.39E-043.47E-023.55E+002.34E+02 + 18L3 40.009.48E-048.68E-025.96E+002.96E+021.17E-041.21E-029.70E-015.14E+01 + 18L3 50.003.90E-042.74E-021.49E+005.99E+015.77E-054.27E-032.68E-011.15E+01 + 18L3 65.001.37E-047.09E-032.93E-019.16E+002.51E-051.27E-036.01E-022.01E+00 + 18L3 80.006.01E-052.44E-038.11E-022.08E+001.30E-054.90E-041.87E-025.14E-01 + 18L3 100.002.49E-057.77E-042.05E-024.25E-016.42E-061.78E-045.38E-031.21E-01 + 18L3 120.001.22E-053.07E-046.69E-031.17E-013.63E-067.87E-051.97E-033.74E-02 + 18L3 150.005.14E-069.97E-051.72E-032.42E-021.81E-062.93E-055.85E-049.11E-03 + 18L3 200.001.73E-062.39E-053.04E-043.27E-037.52E-078.40E-061.25E-041.52E-03 + 18L3 300.003.99E-073.40E-062.81E-052.08E-042.26E-071.52E-061.52E-051.32E-04 + 18L3 450.001.02E-075.43E-072.92E-061.50E-057.18E-083.01E-072.00E-061.26E-05 + 18L3 650.003.36E-081.19E-074.38E-071.62E-062.73E-087.68E-083.49E-071.66E-06 + 18L31000.001.07E-082.48E-086.14E-081.60E-079.70E-091.85E-085.31E-081.81E-07 + 18L32000.002.43E-093.47E-095.21E-098.41E-092.37E-093.00E-094.54E-098.51E-09 + 19K1 15.006.15E+003.18E+021.33E+045.40E+051.91E+001.18E+025.89E+032.84E+05 + 19K1 17.004.25E+002.04E+027.98E+033.01E+051.33E+007.29E+013.32E+031.48E+05 + 19K1 20.002.62E+001.13E+024.01E+031.37E+058.30E-013.89E+011.57E+036.24E+04 + 19K1 25.001.34E+004.97E+011.51E+034.45E+044.39E-011.66E+015.62E+021.89E+04 + 19K1 32.006.31E-011.95E+014.99E+021.23E+042.19E-016.53E+001.81E+024.98E+03 + 19K1 40.003.17E-018.29E+001.79E+023.70E+031.18E-012.85E+006.51E+011.49E+03 + 19K1 50.001.59E-013.48E+006.32E+011.10E+036.40E-021.26E+002.37E+014.48E+02 + 19K1 65.007.00E-021.24E+001.83E+012.57E+023.16E-024.88E-017.32E+001.10E+02 + 19K1 80.003.65E-025.47E-016.81E+008.09E+011.82E-022.34E-012.93E+003.69E+01 + 19K1 100.001.81E-022.26E-012.35E+002.33E+011.02E-021.08E-011.11E+001.15E+01 + 19K1 120.001.02E-021.10E-019.85E-018.43E+006.40E-035.77E-025.10E-014.53E+00 + 19K1 150.005.07E-034.54E-023.42E-012.45E+003.65E-032.73E-022.01E-011.48E+00 + 19K1 200.002.08E-031.48E-028.88E-025.08E-011.80E-031.07E-026.23E-023.62E-01 + 19K1 300.006.18E-043.18E-031.41E-025.96E-026.89E-043.04E-031.30E-025.51E-02 + 19K1 450.001.99E-047.57E-042.53E-038.10E-032.76E-049.28E-042.99E-039.57E-03 + 19K1 650.007.97E-052.35E-046.23E-041.59E-031.26E-043.41E-048.80E-042.24E-03 + 19K11000.003.19E-057.30E-051.53E-043.13E-045.31E-051.16E-042.40E-044.87E-04 + 19K12000.001.00E-051.68E-052.69E-054.19E-051.54E-052.54E-054.04E-056.29E-05 + 19K16000.002.49E-063.10E-063.82E-064.66E-063.04E-063.80E-064.68E-065.71E-06 + 19L1 15.004.53E-012.24E+018.76E+023.15E+041.61E-011.20E+017.62E+024.75E+04 + 19L1 17.003.16E-011.46E+015.36E+021.84E+041.12E-017.26E+004.08E+022.26E+04 + 19L1 20.001.98E-018.23E+002.76E+028.75E+037.03E-023.79E+001.82E+028.68E+03 + 19L1 25.001.03E-013.68E+001.08E+022.99E+033.72E-021.57E+006.09E+012.36E+03 + 19L1 32.004.93E-021.48E+003.66E+018.60E+021.85E-026.04E-011.85E+015.67E+02 + 19L1 40.002.51E-026.39E-011.34E+012.69E+029.96E-032.58E-016.40E+001.59E+02 + 19L1 50.001.27E-022.72E-014.83E+008.16E+015.40E-031.12E-012.25E+004.55E+01 + 19L1 65.005.65E-039.87E-021.43E+001.96E+012.66E-034.29E-026.75E-011.07E+01 + 19L1 80.002.97E-034.38E-025.38E-016.28E+001.54E-032.04E-022.65E-013.47E+00 + 19L1 100.001.48E-031.83E-021.88E-011.83E+008.59E-049.30E-039.90E-021.06E+00 + 19L1 120.008.37E-048.92E-037.93E-026.71E-015.38E-044.97E-034.50E-024.10E-01 + 19L1 150.004.18E-043.72E-032.78E-021.97E-013.07E-042.34E-031.75E-021.31E-01 + 19L1 200.001.73E-041.22E-037.28E-034.13E-021.51E-049.13E-045.38E-033.18E-02 + 19L1 300.005.15E-052.64E-041.17E-034.92E-035.80E-052.58E-041.11E-034.76E-03 + 19L1 450.001.67E-056.32E-052.11E-046.73E-042.32E-057.85E-052.55E-048.19E-04 + 19L1 650.006.68E-061.97E-055.21E-051.33E-041.06E-052.88E-057.46E-051.91E-04 + 19L11000.002.67E-066.13E-061.29E-052.63E-054.47E-069.75E-062.03E-054.13E-05 + 19L12000.008.39E-071.41E-062.26E-063.52E-061.29E-062.14E-063.40E-065.30E-06 + 19L2 15.002.97E-029.70E+001.90E+032.40E+057.65E-031.03E+001.04E+029.26E+03 + 19L2 17.001.84E-025.13E+008.82E+029.91E+045.11E-036.12E-015.52E+014.37E+03 + 19L2 20.009.87E-032.24E+003.26E+023.15E+043.03E-033.10E-012.40E+011.64E+03 + 19L2 25.004.16E-037.21E-018.32E+016.52E+031.47E-031.21E-017.67E+004.28E+02 + 19L2 32.001.59E-032.05E-011.84E+011.14E+036.63E-044.30E-022.16E+009.65E+01 + 19L2 40.006.61E-046.62E-024.72E+002.38E+023.22E-041.68E-026.89E-012.51E+01 + 19L2 50.002.74E-042.14E-021.22E+004.97E+011.56E-046.58E-032.20E-016.52E+00 + 19L2 65.009.73E-055.68E-032.49E-017.96E+006.65E-052.19E-035.75E-021.34E+00 + 19L2 80.004.29E-052.01E-037.17E-021.89E+003.39E-059.20E-042.00E-023.88E-01 + 19L2 100.001.78E-056.61E-041.90E-024.07E-011.65E-053.63E-046.47E-031.03E-01 + 19L2 120.008.74E-062.69E-046.48E-031.18E-019.13E-061.71E-042.59E-033.51E-02 + 19L2 150.003.68E-069.04E-051.77E-032.63E-024.45E-066.83E-058.52E-049.52E-03 + 19L2 200.001.23E-062.28E-053.41E-043.96E-031.77E-062.12E-052.08E-041.82E-03 + 19L2 300.002.74E-073.48E-063.64E-053.01E-044.93E-074.22E-062.98E-051.90E-04 + 19L2 450.006.61E-085.85E-074.36E-062.63E-051.41E-078.85E-074.63E-062.19E-05 + 19L2 650.001.97E-081.29E-077.20E-073.34E-064.65E-082.27E-079.28E-073.44E-06 + 19L21000.005.39E-092.54E-081.04E-073.67E-071.34E-084.99E-081.59E-074.59E-07 + 19L22000.009.00E-102.69E-097.23E-091.76E-082.07E-095.42E-091.24E-082.63E-08 + 19L3 15.005.64E-021.79E+013.45E+034.33E+053.47E-031.88E+004.70E+026.42E+04 + 19L3 17.003.49E-029.42E+001.59E+031.78E+052.34E-031.02E+002.20E+022.67E+04 + 19L3 20.001.86E-024.09E+005.83E+025.59E+041.40E-034.66E-018.30E+018.58E+03 + 19L3 25.007.82E-031.30E+001.46E+021.14E+046.92E-041.59E-012.19E+011.83E+03 + 19L3 32.002.97E-033.64E-013.17E+011.95E+033.17E-044.90E-025.11E+003.36E+02 + 19L3 40.001.23E-031.15E-017.95E+003.94E+021.56E-041.70E-021.39E+007.36E+01 + 19L3 50.005.09E-043.65E-021.99E+007.99E+017.68E-055.98E-033.82E-011.64E+01 + 19L3 65.001.80E-049.45E-033.93E-011.22E+013.34E-051.77E-038.52E-022.85E+00 + 19L3 80.007.91E-053.25E-031.09E-012.78E+001.73E-056.82E-042.64E-027.27E-01 + 19L3 100.003.29E-051.04E-032.75E-025.70E-018.58E-062.47E-047.57E-031.70E-01 + 19L3 120.001.61E-054.12E-049.00E-031.57E-014.85E-061.09E-042.77E-035.27E-02 + 19L3 150.006.82E-061.34E-042.31E-033.26E-022.43E-064.04E-058.18E-041.28E-02 + 19L3 200.002.30E-063.21E-054.09E-044.41E-031.01E-061.15E-051.75E-042.13E-03 + 19L3 300.005.32E-074.58E-063.80E-052.81E-043.03E-072.08E-062.11E-051.83E-04 + 19L3 450.001.37E-077.32E-073.95E-062.02E-059.64E-084.10E-072.76E-061.75E-05 + 19L3 650.004.51E-081.60E-075.93E-072.20E-063.66E-081.04E-074.79E-072.30E-06 + 19L31000.001.44E-083.34E-088.29E-082.16E-071.30E-082.49E-087.25E-082.50E-07 + 19L32000.003.25E-094.66E-097.02E-091.13E-083.17E-094.02E-096.13E-091.16E-08 + 20K1 15.006.78E+003.35E+021.33E+045.12E+052.34E+001.45E+026.98E+033.22E+05 + 20K1 17.004.69E+002.16E+028.08E+032.92E+051.63E+008.93E+013.95E+031.69E+05 + 20K1 20.002.90E+001.21E+024.13E+031.36E+051.02E+004.76E+011.88E+037.23E+04 + 20K1 25.001.49E+005.37E+011.59E+034.51E+045.36E-012.02E+016.73E+022.21E+04 + 20K1 32.007.05E-012.13E+015.31E+021.27E+042.67E-017.94E+002.16E+025.86E+03 + 20K1 40.003.56E-019.11E+001.92E+023.90E+031.43E-013.45E+007.80E+011.76E+03 + 20K1 50.001.79E-013.85E+006.85E+011.17E+037.74E-021.52E+002.84E+015.31E+02 + 20K1 65.007.90E-021.38E+002.00E+012.77E+023.81E-025.87E-018.74E+001.31E+02 + 20K1 80.004.13E-026.11E-017.51E+008.80E+012.19E-022.80E-013.49E+004.37E+01 + 20K1 100.002.05E-022.54E-012.61E+002.55E+011.22E-021.29E-011.32E+001.37E+01 + 20K1 120.001.16E-021.23E-011.10E+009.29E+007.65E-036.89E-026.07E-015.37E+00 + 20K1 150.005.78E-035.14E-023.83E-012.71E+004.36E-033.26E-022.38E-011.75E+00 + 20K1 200.002.38E-031.68E-021.00E-015.67E-012.14E-031.27E-027.39E-024.28E-01 + 20K1 300.007.09E-043.63E-031.60E-026.73E-028.17E-043.60E-031.53E-026.50E-02 + 20K1 450.002.30E-048.69E-042.89E-039.21E-033.26E-041.10E-033.54E-031.13E-02 + 20K1 650.009.21E-052.71E-047.16E-041.82E-031.48E-044.02E-041.04E-032.64E-03 + 20K11000.003.68E-058.45E-051.77E-043.61E-046.23E-051.36E-042.83E-045.74E-04 + 20K12000.001.16E-051.95E-053.12E-054.87E-051.79E-052.98E-054.74E-057.39E-05 + 20K16000.002.87E-063.58E-064.42E-065.41E-063.51E-064.41E-065.45E-066.66E-06 + 20L1 15.005.04E-012.38E+018.74E+022.91E+042.03E-011.54E+019.73E+026.03E+04 + 20L1 17.003.54E-011.56E+015.43E+021.74E+041.41E-019.26E+005.19E+022.86E+04 + 20L1 20.002.22E-018.88E+002.85E+028.56E+038.79E-024.81E+002.31E+021.10E+04 + 20L1 25.001.16E-014.02E+001.13E+023.02E+034.64E-021.98E+007.69E+012.96E+03 + 20L1 32.005.58E-021.63E+003.91E+018.92E+022.30E-027.58E-012.32E+017.09E+02 + 20L1 40.002.86E-027.12E-011.46E+012.84E+021.24E-023.23E-017.99E+001.98E+02 + 20L1 50.001.45E-023.05E-015.30E+008.76E+016.68E-031.39E-012.80E+005.64E+01 + 20L1 65.006.49E-031.11E-011.58E+002.14E+013.28E-035.31E-028.34E-011.32E+01 + 20L1 80.003.42E-034.98E-026.01E-016.92E+001.89E-032.51E-023.26E-014.27E+00 + 20L1 100.001.71E-032.08E-022.11E-012.04E+001.05E-031.14E-021.21E-011.30E+00 + 20L1 120.009.70E-041.02E-028.98E-027.51E-016.58E-046.08E-035.50E-025.01E-01 + 20L1 150.004.86E-044.28E-033.16E-022.22E-013.74E-042.86E-032.13E-021.60E-01 + 20L1 200.002.01E-041.41E-038.34E-034.70E-021.84E-041.11E-036.54E-033.86E-02 + 20L1 300.006.03E-053.07E-041.35E-035.65E-037.01E-053.12E-041.34E-035.76E-03 + 20L1 450.001.96E-057.40E-052.45E-047.81E-042.80E-059.49E-053.08E-049.89E-04 + 20L1 650.007.87E-062.32E-056.12E-051.56E-041.27E-053.47E-059.00E-052.30E-04 + 20L11000.003.15E-067.23E-061.52E-053.10E-055.34E-061.17E-052.44E-054.97E-05 + 20L12000.009.89E-071.67E-062.68E-064.18E-061.53E-062.56E-064.08E-066.37E-06 + 20L2 15.003.73E-021.26E+012.48E+033.11E+051.01E-021.36E+001.36E+021.19E+04 + 20L2 17.002.32E-026.68E+001.15E+031.29E+056.74E-038.05E-017.20E+015.65E+03 + 20L2 20.001.25E-022.93E+004.27E+024.11E+044.00E-034.08E-013.14E+012.13E+03 + 20L2 25.005.29E-039.42E-011.09E+028.53E+031.95E-031.60E-011.01E+015.58E+02 + 20L2 32.002.03E-032.69E-012.42E+011.50E+038.78E-045.68E-022.85E+001.26E+02 + 20L2 40.008.49E-048.69E-026.23E+003.13E+024.27E-042.23E-029.09E-013.29E+01 + 20L2 50.003.54E-042.81E-021.61E+006.55E+012.07E-048.74E-032.91E-018.58E+00 + 20L2 65.001.26E-047.50E-033.30E-011.05E+018.86E-052.92E-037.63E-021.78E+00 + 20L2 80.005.58E-052.65E-039.52E-022.50E+004.53E-051.23E-032.66E-025.13E-01 + 20L2 100.002.33E-058.75E-042.53E-025.41E-012.20E-054.86E-048.62E-031.37E-01 + 20L2 120.001.14E-053.57E-048.64E-031.57E-011.22E-052.29E-043.45E-034.66E-02 + 20L2 150.004.84E-061.20E-042.36E-033.51E-025.97E-069.15E-051.14E-031.27E-02 + 20L2 200.001.62E-063.04E-054.57E-045.29E-032.38E-062.85E-052.78E-042.44E-03 + 20L2 300.003.63E-074.66E-064.89E-054.04E-046.64E-075.69E-064.01E-052.55E-04 + 20L2 450.008.78E-087.85E-075.87E-063.54E-051.90E-071.20E-066.25E-062.95E-05 + 20L2 650.002.63E-081.73E-079.72E-074.51E-066.28E-083.07E-071.26E-064.65E-06 + 20L21000.007.20E-093.42E-081.41E-074.97E-071.81E-086.78E-082.15E-076.23E-07 + 20L22000.001.20E-093.62E-099.78E-092.38E-082.79E-097.35E-091.69E-083.58E-08 + 20L3 15.007.05E-022.32E+014.50E+035.60E+054.50E-032.63E+006.75E+029.21E+04 + 20L3 17.004.38E-021.22E+012.08E+032.30E+053.04E-031.43E+003.16E+023.82E+04 + 20L3 20.002.35E-025.31E+007.61E+027.25E+041.82E-036.50E-011.18E+021.22E+04 + 20L3 25.009.90E-031.69E+001.91E+021.48E+049.00E-042.21E-013.11E+012.59E+03 + 20L3 32.003.78E-034.74E-014.15E+012.54E+034.12E-046.79E-027.20E+004.74E+02 + 20L3 40.001.58E-031.50E-011.04E+015.16E+022.03E-042.35E-021.95E+001.03E+02 + 20L3 50.006.54E-044.77E-022.62E+001.05E+021.00E-048.24E-035.34E-012.29E+01 + 20L3 65.002.32E-041.24E-025.17E-011.61E+014.37E-052.43E-031.19E-013.98E+00 + 20L3 80.001.02E-044.27E-031.43E-013.66E+002.27E-059.32E-043.66E-021.01E+00 + 20L3 100.004.26E-051.37E-033.63E-027.51E-011.13E-053.37E-041.05E-022.36E-01 + 20L3 120.002.10E-055.42E-041.19E-022.07E-016.37E-061.48E-043.81E-037.28E-02 + 20L3 150.008.89E-061.76E-043.06E-034.31E-023.19E-065.49E-051.12E-031.76E-02 + 20L3 200.003.01E-064.24E-055.43E-045.84E-031.33E-061.56E-052.39E-042.93E-03 + 20L3 300.006.99E-076.06E-065.04E-053.73E-043.99E-072.80E-062.87E-052.51E-04 + 20L3 450.001.80E-079.69E-075.25E-062.69E-051.27E-075.49E-073.74E-062.39E-05 + 20L3 650.005.94E-082.12E-077.88E-072.92E-064.83E-081.39E-076.48E-073.13E-06 + 20L31000.001.89E-084.43E-081.10E-072.88E-071.71E-083.31E-089.74E-083.38E-07 + 20L32000.004.28E-096.15E-099.28E-091.50E-084.18E-095.31E-098.13E-091.55E-08 + 21K1 15.007.42E+003.48E+021.31E+044.76E+052.86E+001.77E+028.16E+033.59E+05 + 21K1 17.005.15E+002.27E+028.07E+032.77E+051.98E+001.09E+024.64E+031.91E+05 + 21K1 20.003.19E+001.29E+024.20E+031.32E+051.24E+005.77E+012.21E+038.26E+04 + 21K1 25.001.65E+005.75E+011.64E+034.52E+046.50E-012.45E+017.97E+022.55E+04 + 21K1 32.007.82E-012.31E+015.58E+021.30E+043.22E-019.57E+002.57E+026.83E+03 + 21K1 40.003.96E-019.93E+002.05E+024.06E+031.72E-014.15E+009.26E+012.06E+03 + 21K1 50.002.00E-014.22E+007.37E+011.23E+039.29E-021.82E+003.36E+016.23E+02 + 21K1 65.008.86E-021.53E+002.18E+012.96E+024.56E-027.01E-011.04E+011.54E+02 + 21K1 80.004.64E-026.78E-018.21E+009.49E+012.62E-023.34E-014.14E+005.14E+01 + 21K1 100.002.31E-022.82E-012.87E+002.77E+011.46E-021.53E-011.56E+001.61E+01 + 21K1 120.001.31E-021.38E-011.21E+001.02E+019.09E-038.17E-027.17E-016.31E+00 + 21K1 150.006.54E-035.76E-024.25E-012.99E+005.16E-033.86E-022.81E-012.05E+00 + 21K1 200.002.70E-031.89E-021.12E-016.29E-012.53E-031.51E-028.70E-025.03E-01 + 21K1 300.008.09E-044.11E-031.80E-027.53E-029.61E-044.24E-031.80E-027.62E-02 + 21K1 450.002.63E-049.89E-043.28E-031.04E-023.82E-041.29E-034.15E-031.32E-02 + 21K1 650.001.06E-043.10E-048.17E-042.07E-031.73E-044.71E-041.22E-033.09E-03 + 21K11000.004.23E-059.70E-052.04E-044.14E-047.25E-051.59E-043.30E-046.71E-04 + 21K12000.001.32E-052.25E-053.60E-055.62E-052.07E-053.46E-055.53E-058.62E-05 + 21K16000.003.28E-064.11E-065.09E-066.23E-064.02E-065.07E-066.29E-067.70E-06 + 21L1 15.005.57E-012.49E+018.57E+022.60E+042.52E-011.95E+011.23E+037.57E+04 + 21L1 17.003.92E-011.65E+015.42E+021.61E+041.75E-011.17E+016.54E+023.59E+04 + 21L1 20.002.47E-019.49E+002.90E+028.20E+031.09E-016.06E+002.90E+021.37E+04 + 21L1 25.001.30E-014.35E+001.18E+023.00E+035.73E-022.48E+009.61E+013.69E+03 + 21L1 32.006.27E-021.79E+004.14E+019.12E+022.84E-029.43E-012.88E+018.79E+02 + 21L1 40.003.23E-027.84E-011.56E+012.96E+021.52E-024.00E-019.88E+002.45E+02 + 21L1 50.001.65E-023.39E-015.75E+009.29E+018.19E-031.72E-013.45E+006.93E+01 + 21L1 65.007.39E-031.25E-011.74E+002.31E+014.01E-036.51E-021.02E+001.61E+01 + 21L1 80.003.90E-035.60E-026.65E-017.53E+002.30E-033.07E-023.98E-015.20E+00 + 21L1 100.001.96E-032.36E-022.36E-012.24E+001.28E-031.39E-021.48E-011.58E+00 + 21L1 120.001.11E-031.16E-021.01E-018.32E-017.98E-047.38E-036.68E-026.07E-01 + 21L1 150.005.60E-044.88E-033.57E-022.48E-014.53E-043.46E-032.58E-021.93E-01 + 21L1 200.002.33E-041.61E-039.48E-035.29E-022.22E-041.34E-037.89E-034.65E-02 + 21L1 300.007.00E-053.55E-041.55E-036.43E-038.42E-053.75E-041.61E-036.92E-03 + 21L1 450.002.28E-058.58E-052.83E-048.98E-043.35E-051.14E-043.69E-041.19E-03 + 21L1 650.009.19E-062.70E-057.11E-051.80E-041.51E-054.14E-051.07E-042.74E-04 + 21L11000.003.68E-068.46E-061.78E-053.62E-056.34E-061.40E-052.91E-055.94E-05 + 21L12000.001.15E-061.96E-063.15E-064.92E-061.81E-063.03E-064.85E-067.58E-06 + 21L2 15.004.62E-021.62E+013.20E+033.98E+051.31E-021.76E+001.74E+021.51E+04 + 21L2 17.002.88E-028.58E+001.49E+031.65E+058.76E-031.04E+009.25E+017.18E+03 + 21L2 20.001.56E-023.76E+005.52E+025.27E+045.20E-035.29E-014.05E+012.72E+03 + 21L2 25.006.63E-031.21E+001.41E+021.10E+042.54E-032.08E-011.30E+017.14E+02 + 21L2 32.002.56E-033.48E-013.14E+011.94E+031.15E-037.41E-023.69E+001.62E+02 + 21L2 40.001.07E-031.12E-018.10E+004.05E+025.59E-042.91E-021.18E+004.24E+01 + 21L2 50.004.50E-043.65E-022.10E+008.51E+012.72E-041.14E-023.79E-011.11E+01 + 21L2 65.001.61E-049.76E-034.31E-011.37E+011.16E-043.83E-039.97E-022.31E+00 + 21L2 80.007.15E-053.46E-031.25E-013.27E+005.96E-051.61E-033.48E-026.70E-01 + 21L2 100.003.00E-051.14E-033.31E-027.08E-012.90E-056.39E-041.13E-021.78E-01 + 21L2 120.001.48E-054.67E-041.13E-022.06E-011.61E-053.02E-044.54E-036.11E-02 + 21L2 150.006.26E-061.58E-043.10E-034.61E-027.90E-061.21E-041.50E-031.67E-02 + 21L2 200.002.11E-064.00E-056.03E-046.98E-033.16E-063.77E-053.68E-043.21E-03 + 21L2 300.004.74E-076.14E-066.46E-055.34E-048.82E-077.56E-065.32E-053.37E-04 + 21L2 450.001.15E-071.04E-067.78E-064.70E-052.52E-071.59E-068.31E-063.91E-05 + 21L2 650.003.45E-082.29E-071.29E-066.00E-068.37E-084.10E-071.67E-066.19E-06 + 21L21000.009.48E-094.53E-081.88E-076.63E-072.40E-089.05E-082.88E-078.32E-07 + 21L22000.001.58E-094.80E-091.30E-083.19E-083.72E-099.84E-092.26E-084.80E-08 + 21L3 15.008.69E-022.97E+015.77E+037.14E+055.75E-033.63E+009.54E+021.30E+05 + 21L3 17.005.41E-021.56E+012.67E+032.94E+053.88E-031.97E+004.45E+025.37E+04 + 21L3 20.002.91E-026.80E+009.79E+029.27E+042.33E-038.94E-011.66E+021.72E+04 + 21L3 25.001.24E-022.17E+002.47E+021.90E+041.15E-033.04E-014.34E+013.62E+03 + 21L3 32.004.74E-036.10E-015.36E+013.26E+035.30E-049.28E-021.00E+016.58E+02 + 21L3 40.001.98E-031.94E-011.35E+016.64E+022.62E-043.21E-022.69E+001.43E+02 + 21L3 50.008.27E-046.16E-023.39E+001.35E+021.29E-041.12E-027.35E-013.16E+01 + 21L3 65.002.95E-041.60E-026.70E-012.08E+015.65E-053.28E-031.63E-015.46E+00 + 21L3 80.001.30E-045.53E-031.86E-014.75E+002.94E-051.26E-035.00E-021.38E+00 + 21L3 100.005.45E-051.77E-034.73E-029.75E-011.46E-054.53E-041.43E-023.22E-01 + 21L3 120.002.69E-057.04E-041.55E-022.69E-018.26E-061.99E-045.18E-039.91E-02 + 21L3 150.001.14E-052.29E-043.99E-035.62E-024.14E-067.33E-051.52E-032.39E-02 + 21L3 200.003.88E-065.52E-057.09E-047.62E-031.72E-062.08E-053.23E-043.96E-03 + 21L3 300.009.03E-077.90E-066.59E-054.87E-045.19E-073.72E-063.86E-053.39E-04 + 21L3 450.002.34E-071.26E-066.87E-063.52E-051.65E-077.24E-075.01E-063.21E-05 + 21L3 650.007.70E-082.76E-071.03E-063.83E-066.27E-081.83E-078.63E-074.20E-06 + 21L31000.002.46E-085.77E-081.44E-073.77E-072.23E-084.33E-081.29E-074.51E-07 + 21L32000.005.54E-098.00E-091.21E-081.96E-085.41E-096.90E-091.06E-082.04E-08 + 22K1 15.008.07E+003.59E+021.27E+044.34E+053.45E+002.13E+029.41E+033.94E+05 + 22K1 17.005.62E+002.37E+027.98E+032.60E+052.39E+001.30E+025.38E+032.12E+05 + 22K1 20.003.50E+001.35E+024.22E+031.27E+051.49E+006.93E+012.58E+039.30E+04 + 22K1 25.001.81E+006.12E+011.69E+034.48E+047.79E-012.93E+019.33E+022.91E+04 + 22K1 32.008.63E-012.48E+015.83E+021.32E+043.85E-011.14E+013.02E+027.86E+03 + 22K1 40.004.39E-011.08E+012.17E+024.19E+032.05E-014.94E+001.09E+022.38E+03 + 22K1 50.002.22E-014.60E+007.87E+011.29E+031.11E-012.16E+003.95E+017.23E+02 + 22K1 65.009.87E-021.68E+002.35E+013.15E+025.40E-028.30E-011.22E+011.79E+02 + 22K1 80.005.18E-027.47E-018.91E+001.02E+023.09E-023.95E-014.85E+005.98E+01 + 22K1 100.002.59E-023.13E-013.13E+002.99E+011.72E-021.80E-011.83E+001.87E+01 + 22K1 120.001.47E-021.53E-011.33E+001.10E+011.07E-029.61E-028.39E-017.34E+00 + 22K1 150.007.36E-036.42E-024.69E-013.26E+006.06E-034.52E-023.28E-012.39E+00 + 22K1 200.003.05E-032.11E-021.24E-016.93E-012.96E-031.76E-021.01E-015.85E-01 + 22K1 300.009.16E-044.63E-032.02E-028.37E-021.12E-034.95E-032.10E-028.85E-02 + 22K1 450.002.99E-041.12E-033.69E-031.17E-024.44E-041.50E-034.82E-031.53E-02 + 22K1 650.001.20E-043.52E-049.26E-042.34E-032.01E-045.48E-041.41E-033.58E-03 + 22K11000.004.82E-051.11E-042.32E-044.71E-048.38E-051.85E-043.84E-047.80E-04 + 22K12000.001.51E-052.57E-054.12E-056.45E-052.38E-054.00E-056.40E-059.99E-05 + 22K16000.003.72E-064.68E-065.81E-067.13E-064.57E-065.80E-067.21E-068.85E-06 + 22L1 15.006.10E-012.59E+018.26E+022.25E+043.10E-012.45E+011.54E+039.42E+04 + 22L1 17.004.30E-011.73E+015.33E+021.46E+042.15E-011.46E+018.17E+024.46E+04 + 22L1 20.002.72E-011.00E+012.91E+027.72E+031.34E-017.55E+003.61E+021.70E+04 + 22L1 25.001.44E-014.66E+001.21E+022.93E+037.02E-023.08E+001.19E+024.55E+03 + 22L1 32.006.99E-021.93E+004.34E+019.21E+023.47E-021.16E+003.55E+011.08E+03 + 22L1 40.003.61E-028.57E-011.66E+013.05E+021.85E-024.91E-011.21E+012.99E+02 + 22L1 50.001.85E-023.73E-016.18E+009.75E+019.95E-032.10E-014.21E+008.45E+01 + 22L1 65.008.34E-031.38E-011.89E+002.46E+014.85E-037.92E-021.24E+001.96E+01 + 22L1 80.004.42E-036.25E-027.30E-018.12E+002.78E-033.72E-024.82E-016.29E+00 + 22L1 100.002.23E-032.64E-022.60E-012.44E+001.54E-031.68E-021.78E-011.90E+00 + 22L1 120.001.27E-031.31E-021.12E-019.13E-019.59E-048.89E-038.03E-027.29E-01 + 22L1 150.006.40E-045.52E-033.99E-022.74E-015.42E-044.15E-033.10E-022.32E-01 + 22L1 200.002.67E-041.83E-031.07E-025.91E-022.65E-041.61E-039.44E-035.55E-02 + 22L1 300.008.06E-054.05E-041.76E-037.25E-031.00E-044.48E-041.92E-038.24E-03 + 22L1 450.002.64E-059.87E-053.25E-041.02E-033.97E-051.35E-044.38E-041.41E-03 + 22L1 650.001.06E-053.12E-058.19E-052.07E-041.79E-054.90E-051.27E-043.25E-04 + 22L11000.004.27E-069.82E-062.06E-054.19E-057.45E-061.65E-053.44E-057.03E-05 + 22L12000.001.34E-062.28E-063.67E-065.74E-062.11E-063.56E-065.72E-068.95E-06 + 22L2 15.005.63E-022.05E+014.07E+035.03E+051.67E-022.25E+002.21E+021.90E+04 + 22L2 17.003.53E-021.09E+011.90E+032.09E+051.12E-021.34E+001.17E+029.02E+03 + 22L2 20.001.91E-024.77E+007.04E+026.68E+046.68E-036.78E-015.14E+013.43E+03 + 22L2 25.008.19E-031.54E+001.81E+021.40E+043.27E-032.67E-011.66E+019.03E+02 + 22L2 32.003.18E-034.43E-014.02E+012.47E+031.48E-039.53E-024.71E+002.06E+02 + 22L2 40.001.34E-031.44E-011.04E+015.18E+027.21E-043.75E-021.51E+005.41E+01 + 22L2 50.005.64E-044.66E-022.69E+001.09E+023.51E-041.48E-024.86E-011.42E+01 + 22L2 65.002.03E-041.25E-025.56E-011.76E+011.51E-044.95E-031.28E-012.96E+00 + 22L2 80.009.04E-054.44E-031.61E-014.21E+007.73E-052.09E-034.50E-028.61E-01 + 22L2 100.003.80E-051.47E-034.28E-029.14E-013.77E-058.30E-041.46E-022.30E-01 + 22L2 120.001.88E-056.02E-041.47E-022.66E-012.10E-053.92E-045.89E-037.89E-02 + 22L2 150.007.99E-062.04E-044.03E-035.98E-021.03E-051.58E-041.95E-032.16E-02 + 22L2 200.002.70E-065.18E-057.84E-049.07E-034.13E-064.93E-054.79E-044.17E-03 + 22L2 300.006.10E-077.98E-068.43E-056.97E-041.15E-069.90E-066.96E-054.39E-04 + 22L2 450.001.49E-071.35E-061.02E-056.15E-053.32E-072.09E-061.09E-055.12E-05 + 22L2 650.004.47E-083.00E-071.69E-067.88E-061.10E-075.39E-072.20E-068.13E-06 + 22L21000.001.23E-085.93E-082.47E-078.72E-073.16E-081.19E-073.79E-071.10E-06 + 22L22000.002.05E-096.28E-091.72E-084.20E-084.88E-091.30E-082.99E-086.34E-08 + 22L3 15.001.06E-013.74E+017.31E+038.97E+057.24E-034.94E+001.33E+031.81E+05 + 22L3 17.006.60E-021.97E+013.38E+033.70E+054.89E-032.68E+006.17E+027.45E+04 + 22L3 20.003.57E-028.59E+001.24E+031.17E+052.94E-031.21E+002.30E+022.37E+04 + 22L3 25.001.52E-022.74E+003.13E+022.40E+041.46E-034.10E-015.98E+014.98E+03 + 22L3 32.005.87E-037.73E-016.82E+014.14E+036.71E-041.25E-011.37E+019.01E+02 + 22L3 40.002.46E-032.46E-011.72E+018.44E+023.32E-044.31E-023.68E+001.95E+02 + 22L3 50.001.03E-037.83E-024.33E+001.72E+021.64E-041.50E-029.99E-014.29E+01 + 22L3 65.003.69E-042.04E-028.58E-012.66E+017.18E-054.38E-032.20E-017.39E+00 + 22L3 80.001.64E-047.06E-032.39E-016.07E+003.74E-051.67E-036.74E-021.87E+00 + 22L3 100.006.87E-052.27E-036.06E-021.25E+001.86E-056.01E-041.92E-024.33E-01 + 22L3 120.003.39E-059.01E-041.99E-023.45E-011.05E-052.63E-046.95E-031.33E-01 + 22L3 150.001.45E-052.94E-045.13E-037.21E-025.29E-069.68E-052.04E-033.20E-02 + 22L3 200.004.93E-067.08E-059.12E-049.80E-032.21E-062.73E-054.31E-045.29E-03 + 22L3 300.001.15E-061.01E-058.50E-056.28E-046.64E-074.86E-065.11E-054.50E-04 + 22L3 450.002.99E-071.63E-068.87E-064.55E-052.12E-079.41E-076.59E-064.24E-05 + 22L3 650.009.85E-083.55E-071.33E-064.95E-068.03E-082.36E-071.13E-065.54E-06 + 22L31000.003.14E-087.42E-081.86E-074.88E-072.85E-085.58E-081.68E-075.93E-07 + 22L32000.007.08E-091.02E-081.55E-082.53E-086.92E-098.84E-091.37E-082.65E-08 + 23K1 15.008.74E+003.67E+021.21E+043.88E+054.14E+002.55E+021.08E+044.25E+05 + 23K1 17.006.10E+002.44E+027.78E+032.40E+052.86E+001.56E+026.19E+032.33E+05 + 23K1 20.003.80E+001.41E+024.21E+031.21E+051.78E+008.28E+012.99E+031.04E+05 + 23K1 25.001.97E+006.46E+011.72E+034.39E+049.31E-013.49E+011.09E+033.29E+04 + 23K1 32.009.46E-012.65E+016.04E+021.33E+044.59E-011.36E+013.52E+028.99E+03 + 23K1 40.004.83E-011.16E+012.27E+024.29E+032.44E-015.86E+001.27E+022.74E+03 + 23K1 50.002.45E-014.98E+008.34E+011.34E+031.31E-012.55E+004.62E+018.35E+02 + 23K1 65.001.09E-011.83E+002.51E+013.31E+026.38E-029.79E-011.42E+012.07E+02 + 23K1 80.005.76E-028.18E-019.61E+001.08E+023.65E-024.64E-015.67E+006.93E+01 + 23K1 100.002.88E-023.44E-013.40E+003.21E+012.02E-022.11E-012.14E+002.17E+01 + 23K1 120.001.64E-021.69E-011.45E+001.19E+011.26E-021.13E-019.77E-018.51E+00 + 23K1 150.008.23E-037.11E-025.14E-013.54E+007.09E-035.29E-023.82E-012.77E+00 + 23K1 200.003.42E-032.35E-021.37E-017.58E-013.46E-032.05E-021.18E-016.77E-01 + 23K1 300.001.03E-035.18E-032.24E-029.24E-021.30E-035.75E-032.43E-021.02E-01 + 23K1 450.003.37E-041.26E-034.13E-031.30E-025.14E-041.74E-035.59E-031.77E-02 + 23K1 650.001.36E-043.98E-041.04E-032.63E-032.31E-046.34E-041.63E-034.14E-03 + 23K11000.005.46E-051.25E-042.63E-045.33E-049.63E-052.13E-044.43E-049.00E-04 + 23K12000.001.71E-052.92E-054.70E-057.35E-052.71E-054.59E-057.37E-051.15E-04 + 23K16000.004.19E-065.29E-066.59E-068.11E-065.17E-066.59E-068.22E-061.01E-05 + 23L1 15.006.63E-012.66E+017.84E+021.89E+043.78E-013.05E+011.91E+031.16E+05 + 23L1 17.004.70E-011.79E+015.17E+021.28E+042.62E-011.82E+011.01E+035.49E+04 + 23L1 20.002.98E-011.05E+012.89E+027.12E+031.63E-019.34E+004.46E+022.08E+04 + 23L1 25.001.58E-014.94E+001.23E+022.83E+038.53E-023.79E+001.46E+025.57E+03 + 23L1 32.007.74E-022.08E+004.50E+019.18E+024.20E-021.43E+004.34E+011.32E+03 + 23L1 40.004.01E-029.28E-011.75E+013.12E+022.24E-025.98E-011.48E+013.64E+02 + 23L1 50.002.06E-024.08E-016.59E+001.01E+021.20E-022.55E-015.10E+001.02E+02 + 23L1 65.009.35E-031.52E-012.04E+002.60E+015.83E-039.56E-021.50E+002.36E+01 + 23L1 80.004.97E-036.91E-027.94E-018.69E+003.33E-034.48E-025.80E-017.55E+00 + 23L1 100.002.51E-032.94E-022.86E-012.64E+001.84E-032.01E-022.13E-012.27E+00 + 23L1 120.001.44E-031.46E-021.23E-019.93E-011.14E-031.06E-029.60E-028.70E-01 + 23L1 150.007.25E-046.19E-034.42E-023.01E-016.46E-044.95E-033.69E-022.76E-01 + 23L1 200.003.03E-042.07E-031.19E-026.54E-023.14E-041.91E-031.12E-026.59E-02 + 23L1 300.009.21E-054.60E-041.98E-038.12E-031.18E-045.30E-042.28E-039.74E-03 + 23L1 450.003.03E-051.13E-043.69E-041.16E-034.67E-051.59E-045.17E-041.66E-03 + 23L1 650.001.22E-053.58E-059.37E-052.37E-042.09E-055.77E-051.50E-043.83E-04 + 23L11000.004.92E-061.13E-052.37E-054.82E-058.70E-061.94E-054.05E-058.26E-05 + 23L12000.001.54E-062.63E-064.25E-066.65E-062.45E-064.16E-066.69E-061.05E-05 + 23L2 15.006.79E-022.56E+015.11E+036.26E+052.12E-022.84E+002.76E+022.34E+04 + 23L2 17.004.27E-021.36E+012.38E+032.61E+051.42E-021.69E+001.47E+021.12E+04 + 23L2 20.002.32E-025.98E+008.86E+028.36E+048.46E-038.57E-016.45E+014.26E+03 + 23L2 25.001.00E-021.94E+002.28E+021.75E+044.15E-033.39E-012.08E+011.13E+03 + 23L2 32.003.90E-035.57E-015.09E+013.11E+031.88E-031.21E-015.95E+002.58E+02 + 23L2 40.001.65E-031.81E-011.32E+016.53E+029.19E-044.77E-021.92E+006.80E+01 + 23L2 50.006.98E-045.89E-023.42E+001.38E+024.49E-041.88E-026.17E-011.79E+01 + 23L2 65.002.52E-041.58E-027.07E-012.24E+011.93E-046.32E-031.63E-013.75E+00 + 23L2 80.001.13E-045.64E-032.05E-015.35E+009.90E-052.67E-035.73E-021.09E+00 + 23L2 100.004.76E-051.87E-035.46E-021.16E+004.84E-051.06E-031.87E-022.93E-01 + 23L2 120.002.36E-057.67E-041.88E-023.39E-012.70E-055.03E-047.54E-031.01E-01 + 23L2 150.001.01E-052.60E-045.16E-037.65E-021.32E-052.03E-042.50E-032.76E-02 + 23L2 200.003.41E-066.62E-051.01E-031.16E-025.32E-066.35E-056.16E-045.35E-03 + 23L2 300.007.75E-071.02E-051.09E-048.97E-041.49E-061.28E-058.98E-055.66E-04 + 23L2 450.001.89E-071.74E-061.32E-057.94E-054.29E-072.71E-061.41E-056.62E-05 + 23L2 650.005.72E-083.86E-072.19E-061.02E-051.43E-077.00E-072.86E-061.05E-05 + 23L21000.001.57E-087.66E-083.20E-071.13E-064.10E-081.55E-074.93E-071.42E-06 + 23L22000.002.62E-098.10E-092.23E-085.46E-086.31E-091.69E-083.90E-088.26E-08 + 23L3 15.001.27E-014.66E+019.14E+031.11E+069.01E-036.61E+001.83E+032.48E+05 + 23L3 17.007.95E-022.46E+014.23E+034.60E+056.09E-033.58E+008.46E+021.02E+05 + 23L3 20.004.31E-021.07E+011.56E+031.46E+053.66E-031.62E+003.14E+023.23E+04 + 23L3 25.001.85E-023.42E+003.93E+022.99E+041.82E-035.47E-018.12E+016.76E+03 + 23L3 32.007.16E-039.67E-018.58E+015.18E+038.38E-041.66E-011.85E+011.22E+03 + 23L3 40.003.02E-033.08E-012.16E+011.06E+034.16E-045.70E-024.95E+002.63E+02 + 23L3 50.001.27E-039.83E-025.46E+002.16E+022.06E-041.98E-021.34E+005.76E+01 + 23L3 65.004.56E-042.57E-021.08E+003.35E+019.02E-055.76E-032.94E-019.87E+00 + 23L3 80.002.03E-048.90E-033.02E-017.66E+004.70E-052.19E-038.96E-022.49E+00 + 23L3 100.008.55E-052.86E-037.68E-021.58E+002.34E-057.86E-042.54E-025.75E-01 + 23L3 120.004.23E-051.14E-032.52E-024.37E-011.33E-053.43E-049.19E-031.76E-01 + 23L3 150.001.81E-053.72E-046.51E-039.14E-026.68E-061.26E-042.69E-034.23E-02 + 23L3 200.006.18E-068.97E-051.16E-031.24E-022.79E-063.54E-055.66E-046.97E-03 + 23L3 300.001.45E-061.29E-051.08E-047.99E-048.40E-076.27E-066.69E-055.91E-04 + 23L3 450.003.76E-072.07E-061.13E-055.79E-052.68E-071.21E-068.60E-065.56E-05 + 23L3 650.001.24E-074.51E-071.70E-066.31E-061.02E-073.02E-071.47E-067.22E-06 + 23L31000.003.97E-089.41E-082.36E-076.22E-073.60E-087.10E-082.17E-077.69E-07 + 23L32000.008.93E-091.30E-081.97E-083.22E-088.72E-091.12E-081.74E-083.40E-08 + 24K1 15.009.40E+003.71E+021.14E+043.38E+054.93E+003.03E+021.21E+044.49E+05 + 24K1 17.006.58E+002.50E+027.47E+032.16E+053.41E+001.85E+027.03E+032.51E+05 + 24K1 20.004.12E+001.46E+024.13E+031.13E+052.12E+009.83E+013.42E+031.14E+05 + 24K1 25.002.15E+006.77E+011.73E+034.25E+041.11E+004.14E+011.25E+033.68E+04 + 24K1 32.001.03E+002.80E+016.20E+021.32E+045.44E-011.61E+014.08E+021.02E+04 + 24K1 40.005.28E-011.24E+012.36E+024.35E+032.88E-016.91E+001.48E+023.13E+03 + 24K1 50.002.69E-015.36E+008.78E+011.38E+031.54E-013.00E+005.37E+019.56E+02 + 24K1 65.001.20E-011.98E+002.67E+013.46E+027.50E-021.15E+001.65E+012.38E+02 + 24K1 80.006.36E-028.90E-011.03E+011.14E+024.27E-025.43E-016.58E+007.98E+01 + 24K1 100.003.19E-023.76E-013.67E+003.42E+012.36E-022.47E-012.48E+002.50E+01 + 24K1 120.001.82E-021.85E-011.57E+001.27E+011.47E-021.31E-011.13E+009.81E+00 + 24K1 150.009.15E-037.83E-025.61E-013.82E+008.26E-036.15E-024.42E-013.19E+00 + 24K1 200.003.81E-032.60E-021.50E-018.23E-014.01E-032.38E-021.36E-017.80E-01 + 24K1 300.001.15E-035.76E-032.47E-021.01E-011.51E-036.65E-032.81E-021.18E-01 + 24K1 450.003.79E-041.41E-034.59E-031.44E-025.93E-042.01E-036.44E-032.04E-02 + 24K1 650.001.53E-044.47E-041.17E-032.94E-032.66E-047.29E-041.88E-034.76E-03 + 24K11000.006.15E-051.42E-042.96E-046.00E-041.10E-042.45E-045.09E-041.03E-03 + 24K12000.001.92E-053.30E-055.32E-058.33E-053.08E-055.24E-058.43E-051.32E-04 + 24K16000.004.70E-065.96E-067.45E-069.19E-065.81E-067.45E-069.33E-061.15E-05 + 24L1 15.007.17E-012.71E+017.30E+021.51E+044.58E-013.77E+012.36E+031.42E+05 + 24L1 17.005.09E-011.84E+014.93E+021.09E+043.17E-012.24E+011.24E+036.70E+04 + 24L1 20.003.24E-011.10E+012.82E+026.40E+031.97E-011.15E+015.46E+022.54E+04 + 24L1 25.001.73E-015.21E+001.23E+022.68E+031.03E-014.64E+001.79E+026.77E+03 + 24L1 32.008.51E-022.21E+004.62E+019.03E+025.06E-021.73E+005.28E+011.59E+03 + 24L1 40.004.43E-029.98E-011.82E+013.14E+022.69E-027.25E-011.79E+014.38E+02 + 24L1 50.002.29E-024.42E-016.96E+001.04E+021.44E-023.08E-016.15E+001.23E+02 + 24L1 65.001.04E-021.66E-012.18E+002.72E+016.97E-031.15E-011.80E+002.82E+01 + 24L1 80.005.55E-037.60E-028.57E-019.20E+003.97E-035.36E-026.93E-019.01E+00 + 24L1 100.002.81E-033.25E-023.11E-012.83E+002.19E-032.40E-022.54E-012.71E+00 + 24L1 120.001.61E-031.62E-021.35E-011.07E+001.36E-031.26E-021.14E-011.03E+00 + 24L1 150.008.17E-046.90E-034.87E-023.27E-017.64E-045.87E-034.37E-023.27E-01 + 24L1 200.003.43E-042.32E-031.32E-027.18E-023.71E-042.25E-031.32E-027.77E-02 + 24L1 300.001.05E-045.19E-042.22E-039.03E-031.39E-046.23E-042.68E-031.14E-02 + 24L1 450.003.45E-051.28E-044.16E-041.30E-035.46E-051.87E-046.06E-041.94E-03 + 24L1 650.001.40E-054.08E-051.06E-042.68E-042.45E-056.76E-051.76E-044.49E-04 + 24L11000.005.62E-061.29E-052.72E-055.51E-051.01E-052.26E-054.73E-059.66E-05 + 24L12000.001.76E-063.02E-064.88E-067.66E-062.82E-064.82E-067.78E-061.22E-05 + 24L2 15.008.11E-023.17E+016.34E+037.71E+052.65E-023.54E+003.40E+022.86E+04 + 24L2 17.005.11E-021.69E+012.96E+033.22E+051.78E-022.11E+001.81E+021.37E+04 + 24L2 20.002.79E-027.42E+001.10E+031.03E+051.06E-021.07E+007.99E+015.22E+03 + 24L2 25.001.21E-022.41E+002.84E+022.17E+045.21E-034.24E-012.59E+011.39E+03 + 24L2 32.004.73E-036.94E-016.36E+013.87E+032.37E-031.52E-017.42E+003.19E+02 + 24L2 40.002.02E-032.26E-011.65E+018.15E+021.16E-036.00E-022.39E+008.44E+01 + 24L2 50.008.55E-047.37E-024.29E+001.72E+025.67E-042.37E-027.74E-012.23E+01 + 24L2 65.003.11E-041.99E-028.89E-012.80E+012.44E-047.99E-032.05E-014.69E+00 + 24L2 80.001.39E-047.08E-032.58E-016.72E+001.26E-043.38E-037.22E-021.37E+00 + 24L2 100.005.90E-052.36E-036.90E-021.47E+006.14E-051.35E-032.36E-023.68E-01 + 24L2 120.002.93E-059.66E-042.37E-024.28E-013.43E-056.39E-049.54E-031.27E-01 + 24L2 150.001.25E-053.29E-046.53E-039.68E-021.69E-052.58E-043.17E-033.49E-02 + 24L2 200.004.26E-068.38E-051.28E-031.48E-026.79E-068.10E-057.83E-046.78E-03 + 24L2 300.009.74E-071.30E-051.38E-041.14E-031.91E-061.64E-051.15E-047.20E-04 + 24L2 450.002.39E-072.22E-061.68E-051.01E-045.50E-073.47E-061.81E-058.46E-05 + 24L2 650.007.23E-084.93E-072.81E-061.31E-051.83E-079.00E-073.67E-061.35E-05 + 24L21000.001.99E-089.78E-084.10E-071.45E-065.26E-082.00E-076.35E-071.83E-06 + 24L22000.003.32E-091.03E-082.86E-087.02E-088.09E-092.17E-085.02E-081.07E-07 + 24L3 15.001.51E-015.74E+011.13E+041.36E+061.11E-028.76E+002.48E+033.35E+05 + 24L3 17.009.49E-023.03E+015.24E+035.64E+057.51E-034.74E+001.14E+031.38E+05 + 24L3 20.005.16E-021.32E+011.93E+031.79E+054.52E-032.14E+004.23E+024.35E+04 + 24L3 25.002.22E-024.23E+004.88E+023.69E+042.25E-037.20E-011.09E+029.06E+03 + 24L3 32.008.66E-031.20E+001.07E+026.40E+031.04E-032.18E-012.48E+011.63E+03 + 24L3 40.003.67E-033.83E-012.69E+011.31E+035.15E-047.47E-026.58E+003.49E+02 + 24L3 50.001.55E-031.22E-016.81E+002.69E+022.55E-042.58E-021.77E+007.63E+01 + 24L3 65.005.58E-043.20E-021.35E+004.16E+011.12E-047.50E-033.87E-011.30E+01 + 24L3 80.002.49E-041.11E-023.77E-019.55E+005.85E-052.85E-031.18E-013.27E+00 + 24L3 100.001.05E-043.57E-039.61E-021.97E+002.92E-051.02E-033.33E-027.54E-01 + 24L3 120.005.22E-051.42E-033.16E-025.46E-011.66E-054.43E-041.20E-022.31E-01 + 24L3 150.002.24E-054.65E-048.17E-031.15E-018.34E-061.62E-043.50E-035.53E-02 + 24L3 200.007.66E-061.12E-041.46E-031.56E-023.48E-064.55E-057.36E-049.08E-03 + 24L3 300.001.80E-061.62E-051.36E-041.01E-031.05E-068.01E-068.65E-057.68E-04 + 24L3 450.004.69E-072.59E-061.42E-057.30E-053.35E-071.54E-061.11E-057.19E-05 + 24L3 650.001.55E-075.67E-072.14E-067.96E-061.27E-073.83E-071.88E-069.32E-06 + 24L31000.004.95E-081.18E-072.97E-077.84E-074.49E-088.93E-082.76E-079.88E-07 + 24L32000.001.11E-081.62E-082.47E-084.04E-081.09E-081.40E-082.19E-084.32E-08 + 25K1 15.001.01E+013.72E+021.06E+042.91E+055.84E+003.58E+021.36E+044.70E+05 + 25K1 17.007.07E+002.54E+027.12E+031.93E+054.04E+002.19E+027.95E+032.68E+05 + 25K1 20.004.44E+001.50E+024.04E+031.05E+052.50E+001.16E+023.90E+031.24E+05 + 25K1 25.002.32E+007.06E+011.73E+034.09E+041.31E+004.88E+011.44E+034.09E+04 + 25K1 32.001.12E+002.96E+016.34E+021.31E+046.40E-011.89E+014.70E+021.15E+04 + 25K1 40.005.75E-011.31E+012.45E+024.39E+033.39E-018.10E+001.71E+023.55E+03 + 25K1 50.002.93E-015.74E+009.20E+011.42E+031.81E-013.52E+006.21E+011.09E+03 + 25K1 65.001.32E-012.13E+002.83E+013.60E+028.76E-021.34E+001.91E+012.72E+02 + 25K1 80.006.98E-029.64E-011.10E+011.20E+024.98E-026.33E-017.60E+009.14E+01 + 25K1 100.003.52E-024.09E-013.94E+003.62E+012.75E-022.87E-012.86E+002.86E+01 + 25K1 120.002.01E-022.02E-011.70E+001.36E+011.70E-021.52E-011.31E+001.12E+01 + 25K1 150.001.01E-028.58E-026.08E-014.10E+009.57E-037.12E-025.10E-013.66E+00 + 25K1 200.004.23E-032.86E-021.64E-018.91E-014.64E-032.75E-021.57E-018.94E-01 + 25K1 300.001.29E-036.37E-032.72E-021.11E-011.73E-037.65E-033.22E-021.35E-01 + 25K1 450.004.23E-041.56E-035.09E-031.59E-026.79E-042.30E-037.38E-032.34E-02 + 25K1 650.001.71E-044.99E-041.30E-033.27E-033.04E-048.35E-042.15E-035.45E-03 + 25K11000.006.90E-051.59E-043.32E-046.72E-041.25E-042.80E-045.82E-041.18E-03 + 25K12000.002.15E-053.71E-055.99E-059.39E-053.48E-055.95E-059.60E-051.50E-04 + 25K16000.005.25E-066.67E-068.36E-061.03E-056.50E-068.38E-061.05E-051.30E-05 + 25L1 15.007.71E-012.74E+016.70E+021.15E+045.50E-014.63E+012.89E+031.73E+05 + 25L1 17.005.49E-011.88E+014.64E+029.04E+033.81E-012.75E+011.52E+038.14E+04 + 25L1 20.003.51E-011.13E+012.74E+025.65E+032.36E-011.40E+016.66E+023.08E+04 + 25L1 25.001.88E-015.45E+001.23E+022.50E+031.23E-015.64E+002.17E+028.17E+03 + 25L1 32.009.29E-022.34E+004.71E+018.80E+026.05E-022.10E+006.37E+011.92E+03 + 25L1 40.004.86E-021.07E+001.89E+013.14E+023.20E-028.72E-012.15E+015.26E+02 + 25L1 50.002.52E-024.76E-017.31E+001.06E+021.71E-023.69E-017.36E+001.47E+02 + 25L1 65.001.15E-021.81E-012.32E+002.83E+018.26E-031.37E-012.14E+003.36E+01 + 25L1 80.006.16E-038.29E-029.19E-019.68E+004.70E-036.36E-028.23E-011.07E+01 + 25L1 100.003.13E-033.56E-023.36E-013.01E+002.58E-032.84E-023.01E-013.20E+00 + 25L1 120.001.80E-031.78E-021.47E-011.15E+001.60E-031.49E-021.35E-011.22E+00 + 25L1 150.009.14E-047.63E-035.33E-023.54E-018.98E-046.92E-035.15E-023.84E-01 + 25L1 200.003.85E-042.58E-031.46E-027.84E-024.35E-042.65E-031.55E-029.11E-02 + 25L1 300.001.18E-045.80E-042.46E-039.97E-031.62E-047.28E-043.12E-031.33E-02 + 25L1 450.003.90E-051.44E-044.66E-041.45E-036.35E-052.18E-047.06E-042.26E-03 + 25L1 650.001.58E-054.61E-051.20E-043.02E-042.83E-057.86E-052.04E-045.21E-04 + 25L11000.006.38E-061.47E-053.08E-056.25E-051.17E-052.62E-055.49E-051.12E-04 + 25L12000.001.99E-063.44E-065.57E-068.75E-063.23E-065.55E-068.98E-061.41E-05 + 25L2 15.009.56E-023.89E+017.80E+039.41E+053.28E-024.37E+004.16E+023.46E+04 + 25L2 17.006.04E-022.07E+013.65E+033.93E+052.21E-022.60E+002.22E+021.66E+04 + 25L2 20.003.31E-029.11E+001.36E+031.27E+051.32E-021.33E+009.81E+016.35E+03 + 25L2 25.001.44E-022.96E+003.51E+022.67E+046.47E-035.26E-013.19E+011.70E+03 + 25L2 32.005.69E-038.54E-017.84E+014.74E+032.95E-031.88E-019.11E+003.89E+02 + 25L2 40.002.43E-032.78E-012.04E+011.01E+031.44E-037.47E-022.96E+001.04E+02 + 25L2 50.001.03E-039.10E-025.32E+002.13E+027.07E-042.96E-029.59E-012.75E+01 + 25L2 65.003.78E-042.46E-021.10E+003.48E+013.06E-049.98E-032.55E-015.80E+00 + 25L2 80.001.70E-048.78E-033.21E-018.36E+001.57E-044.23E-039.00E-021.70E+00 + 25L2 100.007.22E-052.93E-038.61E-021.83E+007.71E-051.69E-032.95E-024.58E-01 + 25L2 120.003.60E-051.20E-032.97E-025.35E-014.31E-058.02E-041.19E-021.58E-01 + 25L2 150.001.54E-054.10E-048.18E-031.21E-012.12E-053.24E-043.98E-034.36E-02 + 25L2 200.005.27E-061.05E-041.60E-031.85E-028.56E-061.02E-049.84E-048.50E-03 + 25L2 300.001.21E-061.63E-051.74E-041.44E-032.41E-062.07E-051.44E-049.07E-04 + 25L2 450.002.98E-072.79E-062.12E-051.28E-046.96E-074.40E-062.28E-051.07E-04 + 25L2 650.009.03E-086.21E-073.55E-061.65E-052.32E-071.14E-064.65E-061.71E-05 + 25L21000.002.50E-081.23E-075.20E-071.84E-066.67E-082.54E-078.07E-072.33E-06 + 25L22000.004.16E-091.31E-083.62E-088.93E-081.02E-082.77E-086.40E-081.36E-07 + 25L3 15.001.77E-017.00E+011.38E+041.66E+061.35E-021.15E+013.32E+034.50E+05 + 25L3 17.001.12E-013.70E+016.42E+036.87E+059.15E-036.19E+001.53E+031.84E+05 + 25L3 20.006.10E-021.62E+012.36E+032.18E+055.51E-032.79E+005.64E+025.80E+04 + 25L3 25.002.64E-025.18E+005.99E+024.51E+042.75E-039.38E-011.45E+021.20E+04 + 25L3 32.001.03E-021.47E+001.31E+027.84E+031.27E-032.83E-013.27E+012.15E+03 + 25L3 40.004.39E-034.69E-013.32E+011.61E+036.30E-049.68E-028.66E+004.60E+02 + 25L3 50.001.86E-031.50E-018.39E+003.30E+023.13E-043.34E-022.33E+001.00E+02 + 25L3 65.006.74E-043.93E-021.67E+005.13E+011.38E-049.66E-035.05E-011.70E+01 + 25L3 80.003.02E-041.37E-024.67E-011.18E+017.19E-053.66E-031.53E-014.26E+00 + 25L3 100.001.28E-044.41E-031.19E-012.44E+003.59E-051.30E-034.32E-029.79E-01 + 25L3 120.006.36E-051.76E-033.92E-026.76E-012.04E-055.66E-041.55E-022.99E-01 + 25L3 150.002.73E-055.75E-041.01E-021.42E-011.03E-052.07E-044.52E-037.15E-02 + 25L3 200.009.38E-061.39E-041.81E-031.94E-024.29E-065.77E-059.45E-041.17E-02 + 25L3 300.002.21E-062.00E-051.69E-041.25E-031.30E-061.01E-051.11E-049.85E-04 + 25L3 450.005.78E-073.22E-061.77E-059.09E-054.14E-071.93E-061.41E-059.21E-05 + 25L3 650.001.91E-077.03E-072.66E-069.92E-061.57E-074.79E-072.39E-061.19E-05 + 25L31000.006.10E-081.46E-073.70E-079.77E-075.54E-081.11E-073.47E-071.25E-06 + 25L32000.001.37E-082.00E-083.06E-085.02E-081.34E-081.73E-082.72E-085.41E-08 + 26K1 15.001.08E+013.70E+029.65E+032.42E+056.89E+004.21E+021.50E+044.79E+05 + 26K1 17.007.56E+002.55E+026.68E+031.68E+054.76E+002.57E+028.87E+032.81E+05 + 26K1 20.004.76E+001.53E+023.89E+039.54E+042.95E+001.36E+024.39E+031.33E+05 + 26K1 25.002.50E+007.31E+011.71E+033.88E+041.53E+005.72E+011.63E+034.49E+04 + 26K1 32.001.21E+003.10E+016.42E+021.28E+047.50E-012.21E+015.38E+021.28E+04 + 26K1 40.006.24E-011.39E+012.52E+024.40E+033.96E-019.46E+001.96E+023.99E+03 + 26K1 50.003.19E-016.11E+009.57E+011.44E+032.11E-014.09E+007.14E+011.23E+03 + 26K1 65.001.44E-012.29E+002.98E+013.72E+021.02E-011.56E+002.20E+013.09E+02 + 26K1 80.007.64E-021.04E+001.16E+011.25E+025.79E-027.33E-018.74E+001.04E+02 + 26K1 100.003.86E-024.43E-014.20E+003.81E+013.18E-023.32E-013.29E+003.27E+01 + 26K1 120.002.20E-022.20E-011.82E+001.44E+011.97E-021.76E-011.50E+001.28E+01 + 26K1 150.001.11E-029.35E-026.55E-014.38E+001.10E-028.20E-025.85E-014.17E+00 + 26K1 200.004.67E-033.13E-021.78E-019.58E-015.33E-033.16E-021.80E-011.02E+00 + 26K1 300.001.42E-037.01E-032.98E-021.20E-011.99E-038.77E-033.69E-021.54E-01 + 26K1 450.004.71E-041.73E-035.61E-031.74E-027.75E-042.63E-038.42E-032.66E-02 + 26K1 650.001.91E-045.55E-041.44E-033.61E-033.45E-049.53E-042.45E-036.20E-03 + 26K11000.007.70E-051.77E-043.71E-047.50E-041.42E-043.18E-046.63E-041.35E-03 + 26K12000.002.40E-054.15E-056.72E-051.05E-043.91E-056.74E-051.09E-041.71E-04 + 26K16000.005.83E-067.44E-069.35E-061.16E-057.24E-069.39E-061.18E-051.47E-05 + 26L1 15.008.24E-012.75E+016.01E+028.21E+036.57E-015.65E+013.52E+032.09E+05 + 26L1 17.005.89E-011.91E+014.30E+027.13E+034.54E-013.34E+011.85E+039.81E+04 + 26L1 20.003.78E-011.16E+012.61E+024.84E+032.82E-011.70E+018.06E+023.70E+04 + 26L1 25.002.03E-015.66E+001.21E+022.29E+031.47E-016.81E+002.61E+029.80E+03 + 26L1 32.001.01E-012.46E+004.75E+018.45E+027.19E-022.52E+007.65E+012.29E+03 + 26L1 40.005.30E-021.13E+001.94E+013.11E+023.80E-021.04E+002.56E+016.26E+02 + 26L1 50.002.76E-025.09E-017.61E+001.08E+022.02E-024.39E-018.76E+001.74E+02 + 26L1 65.001.27E-021.95E-012.45E+002.92E+019.75E-031.62E-012.54E+003.97E+01 + 26L1 80.006.79E-038.99E-029.78E-011.01E+015.53E-037.52E-029.72E-011.26E+01 + 26L1 100.003.46E-033.89E-023.60E-013.18E+003.03E-033.35E-023.54E-013.76E+00 + 26L1 120.002.00E-031.95E-021.58E-011.22E+001.87E-031.76E-021.58E-011.43E+00 + 26L1 150.001.02E-038.40E-035.79E-023.80E-011.05E-038.11E-036.02E-024.49E-01 + 26L1 200.004.30E-042.85E-031.60E-028.50E-025.07E-043.09E-031.81E-021.06E-01 + 26L1 300.001.32E-046.46E-042.72E-031.09E-021.88E-048.47E-043.63E-031.55E-02 + 26L1 450.004.39E-051.61E-045.20E-041.61E-037.34E-052.52E-048.18E-042.62E-03 + 26L1 650.001.79E-055.19E-051.35E-043.38E-043.26E-059.08E-052.36E-046.03E-04 + 26L11000.007.21E-061.66E-053.49E-057.06E-051.34E-053.02E-056.33E-051.29E-04 + 26L12000.002.25E-063.90E-066.33E-069.95E-063.68E-066.36E-061.03E-051.62E-05 + 26L2 15.001.12E-014.72E+019.50E+031.14E+064.03E-025.35E+005.04E+024.13E+04 + 26L2 17.007.09E-022.51E+014.45E+034.76E+052.71E-023.19E+002.69E+021.99E+04 + 26L2 20.003.90E-021.11E+011.66E+031.53E+051.62E-021.63E+001.19E+027.64E+03 + 26L2 25.001.71E-023.61E+004.29E+023.24E+047.97E-036.46E-013.88E+012.05E+03 + 26L2 32.006.76E-031.04E+009.63E+015.81E+033.63E-032.32E-011.12E+014.75E+02 + 26L2 40.002.90E-033.41E-012.50E+011.23E+031.78E-039.21E-023.63E+001.26E+02 + 26L2 50.001.24E-031.12E-016.54E+002.62E+028.76E-043.65E-021.18E+003.36E+01 + 26L2 65.004.55E-043.02E-021.36E+004.28E+013.79E-041.24E-023.15E-017.12E+00 + 26L2 80.002.06E-041.08E-023.97E-011.03E+011.95E-045.25E-031.11E-012.09E+00 + 26L2 100.008.76E-053.61E-031.06E-012.26E+009.59E-052.10E-033.65E-025.65E-01 + 26L2 120.004.38E-051.49E-033.67E-026.61E-015.37E-059.98E-041.48E-021.96E-01 + 26L2 150.001.88E-055.07E-041.02E-021.50E-012.65E-054.04E-044.94E-035.40E-02 + 26L2 200.006.45E-061.30E-041.99E-032.30E-021.07E-051.27E-041.23E-031.06E-02 + 26L2 300.001.49E-062.03E-052.17E-041.79E-033.02E-062.59E-051.81E-041.13E-03 + 26L2 450.003.68E-073.47E-062.65E-051.60E-048.73E-075.52E-062.86E-051.34E-04 + 26L2 650.001.12E-077.76E-074.45E-062.07E-052.91E-071.44E-065.85E-062.15E-05 + 26L21000.003.10E-081.54E-076.54E-072.32E-068.39E-083.20E-071.02E-062.93E-06 + 26L22000.005.16E-091.63E-084.56E-081.13E-071.28E-083.49E-088.09E-081.72E-07 + 26L3 15.002.07E-018.47E+011.68E+041.99E+061.63E-021.48E+014.40E+035.95E+05 + 26L3 17.001.31E-014.48E+017.78E+038.25E+051.11E-028.00E+002.02E+032.43E+05 + 26L3 20.007.16E-021.96E+012.87E+032.63E+056.67E-033.60E+007.43E+027.63E+04 + 26L3 25.003.11E-026.28E+007.29E+025.44E+043.33E-031.21E+001.90E+021.58E+04 + 26L3 32.001.22E-021.78E+001.60E+029.49E+031.54E-033.64E-014.28E+012.80E+03 + 26L3 40.005.22E-035.70E-014.04E+011.95E+037.65E-041.24E-011.13E+015.98E+02 + 26L3 50.002.22E-031.83E-011.02E+014.02E+023.81E-044.27E-023.02E+001.30E+02 + 26L3 65.008.08E-044.80E-022.04E+006.26E+011.68E-041.23E-026.53E-012.20E+01 + 26L3 80.003.63E-041.67E-025.71E-011.44E+018.77E-054.65E-031.97E-015.49E+00 + 26L3 100.001.54E-045.39E-031.46E-012.98E+004.38E-051.65E-035.55E-021.26E+00 + 26L3 120.007.68E-052.15E-034.81E-028.28E-012.49E-057.17E-041.99E-023.84E-01 + 26L3 150.003.31E-057.05E-041.25E-021.74E-011.26E-052.61E-045.77E-039.15E-02 + 26L3 200.001.14E-051.71E-042.23E-032.38E-025.25E-067.26E-051.20E-031.49E-02 + 26L3 300.002.70E-062.46E-052.09E-041.54E-031.59E-061.27E-051.40E-041.25E-03 + 26L3 450.007.06E-073.96E-062.19E-051.12E-045.07E-072.41E-061.78E-051.17E-04 + 26L3 650.002.34E-078.65E-073.28E-061.23E-051.92E-075.93E-073.00E-061.50E-05 + 26L31000.007.46E-081.80E-074.56E-071.21E-066.78E-081.37E-074.34E-071.58E-06 + 26L32000.001.67E-082.45E-083.76E-086.18E-081.64E-082.12E-083.36E-086.73E-08 + 27K1 15.001.14E+013.63E+028.61E+031.95E+058.07E+004.92E+021.64E+044.80E+05 + 27K1 17.008.05E+002.55E+026.17E+031.43E+055.57E+003.01E+029.81E+032.90E+05 + 27K1 20.005.09E+001.55E+023.71E+038.55E+043.45E+001.59E+024.92E+031.42E+05 + 27K1 25.002.68E+007.53E+011.69E+033.64E+041.79E+006.67E+011.85E+034.89E+04 + 27K1 32.001.30E+003.23E+016.46E+021.25E+048.75E-012.57E+016.12E+021.42E+04 + 27K1 40.006.74E-011.46E+012.58E+024.37E+034.62E-011.10E+012.24E+024.47E+03 + 27K1 50.003.46E-016.48E+009.91E+011.46E+032.45E-014.75E+008.17E+011.39E+03 + 27K1 65.001.57E-012.44E+003.12E+013.82E+021.18E-011.80E+002.52E+013.50E+02 + 27K1 80.008.32E-021.11E+001.23E+011.30E+026.69E-028.46E-011.00E+011.18E+02 + 27K1 100.004.21E-024.77E-014.46E+003.99E+013.67E-023.82E-013.76E+003.71E+01 + 27K1 120.002.41E-022.38E-011.94E+001.52E+012.26E-022.02E-011.72E+001.46E+01 + 27K1 150.001.22E-021.01E-017.04E-014.65E+001.27E-029.41E-026.68E-014.74E+00 + 27K1 200.005.14E-033.42E-021.92E-011.03E+006.11E-033.62E-022.05E-011.16E+00 + 27K1 300.001.57E-037.69E-033.24E-021.30E-012.27E-031.00E-024.20E-021.75E-01 + 27K1 450.005.21E-041.91E-036.15E-031.90E-028.81E-043.00E-039.58E-033.02E-02 + 27K1 650.002.12E-046.15E-041.59E-033.98E-033.91E-041.08E-032.79E-037.04E-03 + 27K11000.008.55E-051.97E-044.12E-048.32E-041.60E-043.61E-047.52E-041.53E-03 + 27K12000.002.66E-054.62E-057.51E-051.18E-044.38E-057.60E-051.23E-041.93E-04 + 27K16000.006.44E-068.26E-061.04E-051.29E-058.02E-061.05E-051.32E-051.65E-05 + 27L1 15.008.77E-012.73E+015.27E+025.33E+037.80E-016.86E+014.26E+032.51E+05 + 27L1 17.006.28E-011.92E+013.91E+025.34E+035.39E-014.04E+012.23E+031.18E+05 + 27L1 20.004.05E-011.18E+012.46E+024.02E+033.34E-012.05E+019.70E+024.43E+04 + 27L1 25.002.19E-015.84E+001.18E+022.06E+031.74E-018.18E+003.13E+021.17E+04 + 27L1 32.001.09E-012.58E+004.76E+018.02E+028.49E-023.01E+009.13E+012.72E+03 + 27L1 40.005.76E-021.19E+001.97E+013.05E+024.48E-021.24E+003.05E+017.42E+02 + 27L1 50.003.01E-025.41E-017.87E+001.08E+022.38E-025.21E-011.04E+012.06E+02 + 27L1 65.001.39E-022.09E-012.57E+002.99E+011.14E-021.92E-013.00E+004.68E+01 + 27L1 80.007.46E-039.70E-021.03E+001.05E+016.47E-038.86E-021.14E+001.48E+01 + 27L1 100.003.82E-034.22E-023.84E-013.33E+003.55E-033.93E-024.15E-014.40E+00 + 27L1 120.002.20E-032.13E-021.70E-011.29E+002.19E-032.05E-021.85E-011.67E+00 + 27L1 150.001.13E-039.19E-036.26E-024.05E-011.22E-039.46E-037.02E-025.23E-01 + 27L1 200.004.77E-043.13E-031.74E-029.16E-025.88E-043.59E-032.10E-021.23E-01 + 27L1 300.001.47E-047.16E-042.99E-031.19E-022.18E-049.82E-044.21E-031.79E-02 + 27L1 450.004.92E-051.79E-045.76E-041.78E-038.43E-052.91E-049.42E-043.02E-03 + 27L1 650.002.01E-055.81E-051.51E-043.76E-043.74E-051.04E-042.71E-046.93E-04 + 27L11000.008.10E-061.87E-053.92E-057.93E-051.53E-053.46E-057.26E-051.48E-04 + 27L12000.002.52E-064.39E-067.15E-061.13E-054.17E-067.26E-061.18E-051.86E-05 + 27L2 15.001.30E-015.69E+011.15E+041.36E+064.91E-026.49E+006.05E+024.90E+04 + 27L2 17.008.25E-023.03E+015.38E+035.71E+053.30E-023.87E+003.24E+022.36E+04 + 27L2 20.004.56E-021.34E+012.01E+031.85E+051.98E-021.98E+001.44E+029.12E+03 + 27L2 25.002.00E-024.36E+005.20E+023.91E+049.74E-037.87E-014.69E+012.45E+03 + 27L2 32.007.97E-031.26E+001.17E+027.02E+034.45E-032.83E-011.36E+015.71E+02 + 27L2 40.003.44E-034.13E-013.05E+011.49E+032.19E-031.13E-014.41E+001.53E+02 + 27L2 50.001.48E-031.36E-017.98E+003.18E+021.07E-034.48E-021.44E+004.07E+01 + 27L2 65.005.44E-043.68E-021.66E+005.21E+014.66E-041.52E-023.85E-018.65E+00 + 27L2 80.002.46E-041.32E-024.85E-011.26E+012.41E-046.45E-031.36E-012.55E+00 + 27L2 100.001.05E-044.41E-031.31E-012.76E+001.18E-042.59E-034.48E-026.90E-01 + 27L2 120.005.28E-051.82E-034.51E-028.11E-016.64E-051.23E-031.82E-022.39E-01 + 27L2 150.002.28E-056.22E-041.25E-021.84E-013.28E-054.99E-046.09E-036.63E-02 + 27L2 200.007.83E-061.60E-042.46E-032.83E-021.33E-051.58E-041.51E-031.30E-02 + 27L2 300.001.81E-062.50E-052.69E-042.22E-033.75E-063.22E-052.24E-041.40E-03 + 27L2 450.004.50E-074.29E-063.29E-051.99E-041.09E-066.88E-063.56E-051.66E-04 + 27L2 650.001.37E-079.61E-075.53E-062.58E-053.63E-071.79E-067.29E-062.67E-05 + 27L21000.003.81E-081.92E-078.14E-072.89E-061.05E-074.00E-071.27E-063.66E-06 + 27L22000.006.35E-092.03E-085.68E-081.41E-071.60E-084.36E-081.01E-072.15E-07 + 27L3 15.002.39E-011.02E+022.02E+042.38E+061.96E-021.90E+015.79E+037.83E+05 + 27L3 17.001.51E-015.37E+019.38E+039.87E+051.33E-021.03E+012.66E+033.18E+05 + 27L3 20.008.32E-022.35E+013.46E+033.15E+058.00E-034.61E+009.72E+029.98E+04 + 27L3 25.003.63E-027.55E+008.80E+026.53E+043.99E-031.54E+002.47E+022.05E+04 + 27L3 32.001.43E-022.15E+001.93E+021.14E+041.85E-034.65E-015.54E+013.63E+03 + 27L3 40.006.15E-036.88E-014.89E+012.35E+039.21E-041.58E-011.46E+017.73E+02 + 27L3 50.002.62E-032.21E-011.24E+014.85E+024.59E-045.42E-023.88E+001.67E+02 + 27L3 65.009.58E-045.80E-022.48E+007.57E+012.02E-041.56E-028.37E-012.82E+01 + 27L3 80.004.32E-042.02E-026.94E-011.74E+011.06E-045.87E-032.52E-017.01E+00 + 27L3 100.001.84E-046.53E-031.77E-013.62E+005.30E-052.08E-037.06E-021.60E+00 + 27L3 120.009.19E-052.61E-035.85E-021.01E+003.02E-058.99E-042.53E-024.88E-01 + 27L3 150.003.96E-058.56E-041.52E-022.12E-011.52E-053.27E-047.31E-031.16E-01 + 27L3 200.001.37E-052.08E-042.72E-032.90E-026.37E-069.06E-051.52E-031.88E-02 + 27L3 300.003.26E-063.00E-052.55E-041.88E-031.93E-061.57E-051.76E-041.58E-03 + 27L3 450.008.54E-074.83E-062.67E-051.37E-046.15E-072.97E-062.23E-051.47E-04 + 27L3 650.002.83E-071.05E-064.01E-061.50E-052.33E-077.29E-073.74E-061.88E-05 + 27L31000.009.03E-082.19E-075.57E-071.48E-068.22E-081.67E-075.37E-071.97E-06 + 27L32000.002.02E-082.98E-084.58E-087.54E-081.98E-082.57E-084.10E-088.29E-08 + 28K1 15.001.21E+013.53E+027.51E+031.52E+059.41E+005.72E+021.76E+044.67E+05 + 28K1 17.008.55E+002.52E+025.60E+031.19E+056.50E+003.49E+021.07E+042.94E+05 + 28K1 20.005.41E+001.56E+023.50E+037.52E+044.02E+001.85E+025.45E+031.48E+05 + 28K1 25.002.86E+007.71E+011.64E+033.37E+042.09E+007.74E+012.07E+035.26E+04 + 28K1 32.001.40E+003.35E+016.46E+021.20E+041.02E+002.98E+016.92E+021.55E+04 + 28K1 40.007.25E-011.53E+012.62E+024.31E+035.35E-011.27E+012.54E+024.96E+03 + 28K1 50.003.73E-016.84E+001.02E+021.46E+032.84E-015.48E+009.29E+011.55E+03 + 28K1 65.001.69E-012.59E+003.25E+013.91E+021.36E-012.07E+002.87E+013.94E+02 + 28K1 80.009.03E-021.19E+001.29E+011.34E+027.71E-029.73E-011.14E+011.33E+02 + 28K1 100.004.58E-025.12E-014.72E+004.16E+014.22E-024.38E-014.29E+004.19E+01 + 28K1 120.002.63E-022.56E-012.07E+001.59E+012.60E-022.31E-011.95E+001.65E+01 + 28K1 150.001.34E-021.10E-017.52E-014.91E+001.45E-021.08E-017.60E-015.37E+00 + 28K1 200.005.63E-033.71E-022.06E-011.09E+006.97E-034.13E-022.33E-011.31E+00 + 28K1 300.001.73E-038.39E-033.51E-021.40E-012.58E-031.14E-024.76E-021.98E-01 + 28K1 450.005.75E-042.10E-036.72E-032.07E-029.99E-043.40E-031.09E-023.42E-02 + 28K1 650.002.35E-046.78E-041.75E-034.36E-034.42E-041.23E-033.15E-037.95E-03 + 28K11000.009.47E-052.18E-044.56E-049.20E-041.80E-044.07E-048.49E-041.72E-03 + 28K12000.002.94E-055.13E-058.35E-051.31E-044.89E-058.53E-051.39E-042.18E-04 + 28K16000.007.10E-069.13E-061.16E-051.44E-058.86E-061.16E-051.48E-051.84E-05 + 28L1 15.009.30E-012.69E+014.50E+023.07E+039.20E-018.27E+015.12E+032.99E+05 + 28L1 17.006.68E-011.91E+013.49E+023.73E+036.35E-014.86E+012.68E+031.40E+05 + 28L1 20.004.32E-011.19E+012.28E+023.22E+033.93E-012.46E+011.16E+035.26E+04 + 28L1 25.002.34E-015.99E+001.14E+021.82E+032.05E-019.77E+003.73E+021.39E+04 + 28L1 32.001.18E-012.68E+004.72E+017.51E+029.98E-023.58E+001.08E+023.22E+03 + 28L1 40.006.22E-021.25E+002.00E+012.95E+025.25E-021.47E+003.61E+018.75E+02 + 28L1 50.003.26E-025.73E-018.08E+001.07E+022.79E-026.15E-011.22E+012.42E+02 + 28L1 65.001.51E-022.23E-012.67E+003.04E+011.34E-022.25E-013.52E+005.48E+01 + 28L1 80.008.15E-031.04E-011.09E+001.08E+017.55E-031.04E-011.34E+001.73E+01 + 28L1 100.004.18E-034.55E-024.08E-013.47E+004.12E-034.59E-024.84E-015.13E+00 + 28L1 120.002.42E-032.30E-021.82E-011.36E+002.54E-032.39E-022.15E-011.94E+00 + 28L1 150.001.24E-031.00E-026.73E-024.30E-011.42E-031.10E-028.15E-026.06E-01 + 28L1 200.005.28E-043.43E-031.88E-029.83E-026.79E-044.16E-032.43E-021.42E-01 + 28L1 300.001.64E-047.89E-043.27E-031.30E-022.51E-041.13E-034.85E-032.07E-02 + 28L1 450.005.48E-051.99E-046.36E-041.95E-039.66E-053.34E-041.08E-033.46E-03 + 28L1 650.002.24E-056.48E-051.67E-044.17E-044.27E-051.20E-043.11E-047.94E-04 + 28L11000.009.07E-062.09E-054.39E-058.87E-051.74E-053.95E-058.30E-051.70E-04 + 28L12000.002.82E-064.93E-068.04E-061.27E-054.71E-068.24E-061.34E-052.12E-05 + 28L2 15.001.49E-016.80E+011.38E+041.62E+065.93E-027.81E+007.20E+025.76E+04 + 28L2 17.009.52E-023.63E+016.46E+036.80E+054.00E-024.67E+003.87E+022.79E+04 + 28L2 20.005.28E-021.60E+012.41E+032.20E+052.39E-022.39E+001.72E+021.08E+04 + 28L2 25.002.33E-025.23E+006.26E+024.68E+041.18E-029.51E-015.63E+012.92E+03 + 28L2 32.009.32E-031.52E+001.41E+028.42E+035.40E-033.43E-011.63E+016.82E+02 + 28L2 40.004.04E-034.97E-013.68E+011.79E+032.66E-031.37E-015.32E+001.83E+02 + 28L2 50.001.74E-031.63E-019.65E+003.83E+021.31E-035.44E-021.74E+004.89E+01 + 28L2 65.006.44E-044.44E-022.02E+006.30E+015.69E-041.85E-024.66E-011.04E+01 + 28L2 80.002.93E-041.60E-025.89E-011.52E+012.94E-047.87E-031.65E-013.08E+00 + 28L2 100.001.26E-045.35E-031.59E-013.35E+001.45E-043.16E-035.45E-028.37E-01 + 28L2 120.006.31E-052.21E-035.50E-029.86E-018.13E-051.51E-032.22E-022.91E-01 + 28L2 150.002.73E-057.56E-041.52E-022.25E-014.02E-056.12E-047.44E-038.07E-02 + 28L2 200.009.43E-061.95E-043.01E-033.46E-021.63E-051.94E-041.86E-031.59E-02 + 28L2 300.002.20E-063.06E-053.30E-042.72E-034.63E-063.96E-052.75E-041.71E-03 + 28L2 450.005.47E-075.27E-064.05E-052.44E-041.34E-068.50E-064.39E-052.04E-04 + 28L2 650.001.67E-071.18E-066.83E-063.18E-054.48E-072.22E-069.01E-063.30E-05 + 28L21000.004.65E-082.36E-071.01E-063.58E-061.29E-074.96E-071.58E-064.53E-06 + 28L22000.007.75E-092.49E-087.03E-081.74E-071.97E-085.42E-081.26E-072.67E-07 + 28L3 15.002.74E-011.21E+022.41E+042.80E+062.33E-022.41E+017.54E+031.02E+06 + 28L3 17.001.74E-016.40E+011.12E+041.17E+061.58E-021.30E+013.45E+034.13E+05 + 28L3 20.009.60E-022.80E+014.13E+033.73E+059.52E-035.85E+001.26E+031.29E+05 + 28L3 25.004.21E-029.01E+001.05E+037.76E+044.76E-031.96E+003.19E+022.64E+04 + 28L3 32.001.67E-022.56E+002.31E+021.36E+042.21E-035.87E-017.12E+014.66E+03 + 28L3 40.007.19E-038.23E-015.87E+012.81E+031.10E-031.99E-011.86E+019.88E+02 + 28L3 50.003.08E-032.64E-011.49E+015.80E+025.49E-046.82E-024.95E+002.13E+02 + 28L3 65.001.13E-036.96E-022.98E+009.07E+012.42E-041.96E-021.06E+003.58E+01 + 28L3 80.005.10E-042.43E-028.36E-012.09E+011.27E-047.35E-033.19E-018.89E+00 + 28L3 100.002.18E-047.85E-032.14E-014.35E+006.35E-052.60E-038.92E-022.03E+00 + 28L3 120.001.09E-043.14E-037.06E-021.21E+003.62E-051.12E-033.19E-026.15E-01 + 28L3 150.004.72E-051.03E-031.83E-022.55E-011.83E-054.06E-049.19E-031.46E-01 + 28L3 200.001.64E-052.51E-043.29E-033.51E-027.66E-061.12E-041.90E-032.37E-02 + 28L3 300.003.90E-063.62E-053.09E-042.28E-032.32E-061.93E-052.20E-041.98E-03 + 28L3 450.001.02E-065.84E-063.24E-051.66E-047.41E-073.64E-062.77E-051.83E-04 + 28L3 650.003.40E-071.27E-064.86E-061.82E-052.80E-078.90E-074.62E-062.34E-05 + 28L31000.001.09E-072.64E-076.75E-071.79E-069.88E-082.03E-076.60E-072.44E-06 + 28L32000.002.43E-083.58E-085.52E-089.12E-082.37E-083.09E-084.97E-081.01E-07 + 29K1 15.001.28E+013.40E+026.39E+031.14E+051.09E+016.62E+021.88E+044.44E+05 + 29K1 17.009.04E+002.47E+025.00E+039.64E+047.54E+004.04E+021.16E+042.92E+05 + 29K1 20.005.74E+001.56E+023.26E+036.51E+044.66E+002.14E+026.00E+031.53E+05 + 29K1 25.003.05E+007.85E+011.59E+033.10E+042.42E+008.94E+012.31E+035.62E+04 + 29K1 32.001.50E+003.46E+016.42E+021.15E+041.18E+003.44E+017.79E+021.69E+04 + 29K1 40.007.78E-011.60E+012.65E+024.23E+036.18E-011.46E+012.87E+025.48E+03 + 29K1 50.004.01E-017.18E+001.05E+021.46E+033.27E-016.31E+001.05E+021.73E+03 + 29K1 65.001.83E-012.75E+003.37E+013.97E+021.57E-012.38E+003.25E+014.41E+02 + 29K1 80.009.77E-021.27E+001.35E+011.37E+028.84E-021.11E+001.29E+011.50E+02 + 29K1 100.004.97E-025.47E-014.97E+004.32E+014.83E-025.01E-014.87E+004.72E+01 + 29K1 120.002.86E-022.74E-012.19E+001.66E+012.97E-022.64E-012.22E+001.86E+01 + 29K1 150.001.45E-021.18E-018.01E-015.17E+001.65E-021.23E-018.61E-016.05E+00 + 29K1 200.006.14E-034.01E-022.21E-011.16E+007.93E-034.69E-022.64E-011.48E+00 + 29K1 300.001.89E-039.13E-033.80E-021.50E-012.92E-031.29E-025.38E-022.23E-01 + 29K1 450.006.32E-042.29E-037.31E-032.24E-021.13E-033.85E-031.22E-023.85E-02 + 29K1 650.002.58E-047.45E-041.92E-034.76E-034.97E-041.38E-033.56E-038.96E-03 + 29K11000.001.04E-042.41E-045.03E-041.01E-032.02E-044.58E-049.56E-041.94E-03 + 29K12000.003.24E-055.68E-059.26E-051.46E-045.44E-059.54E-051.55E-042.44E-04 + 29K16000.007.79E-061.01E-051.28E-051.60E-059.75E-061.29E-051.64E-052.05E-05 + 29L1 15.009.82E-012.63E+013.73E+021.59E+031.08E+009.93E+016.13E+033.54E+05 + 29L1 17.007.07E-011.89E+013.05E+022.39E+037.46E-015.83E+013.20E+031.66E+05 + 29L1 20.004.59E-011.20E+012.09E+022.46E+034.61E-012.94E+011.38E+036.23E+04 + 29L1 25.002.50E-016.10E+001.08E+021.57E+032.40E-011.16E+014.43E+021.64E+04 + 29L1 32.001.26E-012.77E+004.65E+016.93E+021.17E-014.24E+001.28E+023.79E+03 + 29L1 40.006.70E-021.31E+002.01E+012.83E+026.14E-021.74E+004.25E+011.03E+03 + 29L1 50.003.53E-026.03E-018.25E+001.06E+023.25E-027.23E-011.44E+012.83E+02 + 29L1 65.001.64E-022.37E-012.77E+003.06E+011.56E-022.64E-014.11E+006.39E+01 + 29L1 80.008.87E-031.11E-011.14E+001.11E+018.76E-031.21E-011.56E+002.01E+01 + 29L1 100.004.57E-034.89E-024.31E-013.60E+004.78E-035.34E-025.63E-015.95E+00 + 29L1 120.002.65E-032.49E-021.93E-011.42E+002.93E-032.77E-022.49E-012.24E+00 + 29L1 150.001.36E-031.08E-027.20E-024.54E-011.63E-031.27E-029.42E-027.00E-01 + 29L1 200.005.81E-043.74E-032.03E-021.05E-017.81E-044.79E-032.80E-021.64E-01 + 29L1 300.001.81E-048.65E-043.57E-031.40E-022.87E-041.30E-035.56E-032.37E-02 + 29L1 450.006.08E-052.20E-046.99E-042.13E-031.10E-043.82E-041.24E-033.96E-03 + 29L1 650.002.49E-057.19E-051.85E-044.60E-044.85E-051.36E-043.55E-049.06E-04 + 29L11000.001.01E-052.34E-054.89E-059.88E-051.96E-054.49E-059.45E-051.93E-04 + 29L12000.003.14E-065.51E-069.01E-061.42E-055.29E-069.32E-061.52E-052.41E-05 + 29L2 15.001.71E-018.09E+011.64E+041.91E+067.12E-029.35E+008.52E+026.73E+04 + 29L2 17.001.09E-014.31E+017.70E+038.04E+054.80E-025.59E+004.58E+023.26E+04 + 29L2 20.006.08E-021.91E+012.88E+032.61E+052.88E-022.86E+002.04E+021.27E+04 + 29L2 25.002.69E-026.23E+007.49E+025.56E+041.42E-021.14E+006.70E+013.44E+03 + 29L2 32.001.08E-021.81E+001.69E+021.00E+046.52E-034.13E-011.95E+018.08E+02 + 29L2 40.004.72E-035.94E-014.42E+012.14E+033.21E-031.65E-016.37E+002.17E+02 + 29L2 50.002.04E-031.96E-011.16E+014.59E+021.58E-036.56E-022.08E+005.84E+01 + 29L2 65.007.58E-045.33E-022.43E+007.56E+016.89E-042.23E-025.61E-011.25E+01 + 29L2 80.003.46E-041.92E-027.11E-011.83E+013.57E-049.54E-031.99E-013.70E+00 + 29L2 100.001.49E-046.44E-031.92E-014.04E+001.76E-043.84E-036.59E-021.01E+00 + 29L2 120.007.50E-052.66E-036.65E-021.19E+009.90E-051.83E-032.68E-023.51E-01 + 29L2 150.003.26E-059.14E-041.85E-022.72E-014.90E-057.45E-049.03E-039.76E-02 + 29L2 200.001.13E-052.36E-043.66E-034.20E-021.99E-052.36E-042.26E-031.93E-02 + 29L2 300.002.64E-063.72E-054.02E-043.31E-035.67E-064.85E-053.36E-042.09E-03 + 29L2 450.006.59E-076.41E-064.95E-052.99E-041.65E-061.04E-055.38E-052.50E-04 + 29L2 650.002.02E-071.44E-068.36E-063.90E-055.51E-072.73E-061.11E-054.05E-05 + 29L21000.005.63E-082.88E-071.23E-064.39E-061.59E-076.11E-071.94E-065.58E-06 + 29L22000.009.39E-093.05E-088.64E-082.15E-072.42E-086.67E-081.55E-073.30E-07 + 29L3 15.003.12E-011.43E+022.86E+043.30E+062.75E-023.04E+019.76E+031.31E+06 + 29L3 17.001.99E-017.58E+011.33E+041.37E+061.86E-021.64E+014.46E+035.32E+05 + 29L3 20.001.10E-013.32E+014.91E+034.40E+051.13E-027.36E+001.62E+031.66E+05 + 29L3 25.004.84E-021.07E+011.25E+039.18E+045.63E-032.46E+004.09E+023.39E+04 + 29L3 32.001.93E-023.04E+002.75E+021.61E+042.61E-037.37E-019.09E+015.95E+03 + 29L3 40.008.34E-039.78E-017.00E+013.34E+031.30E-032.49E-012.37E+011.26E+03 + 29L3 50.003.58E-033.14E-011.78E+016.90E+026.51E-048.52E-026.27E+002.70E+02 + 29L3 65.001.32E-038.29E-023.56E+001.08E+022.88E-042.44E-021.34E+004.52E+01 + 29L3 80.005.98E-042.89E-021.00E+002.50E+011.51E-049.13E-034.02E-011.12E+01 + 29L3 100.002.56E-049.38E-032.56E-015.20E+007.57E-053.22E-031.12E-012.54E+00 + 29L3 120.001.29E-043.75E-038.47E-021.45E+004.32E-051.39E-033.99E-027.71E-01 + 29L3 150.005.57E-051.23E-032.20E-023.06E-012.18E-055.00E-041.15E-021.82E-01 + 29L3 200.001.94E-053.00E-043.95E-034.21E-029.15E-061.38E-042.37E-032.95E-02 + 29L3 300.004.63E-064.35E-053.72E-042.74E-032.77E-062.37E-052.72E-042.45E-03 + 29L3 450.001.22E-067.01E-063.90E-052.00E-048.85E-074.43E-063.41E-052.26E-04 + 29L3 650.004.05E-071.53E-065.86E-062.19E-053.35E-071.08E-065.68E-062.89E-05 + 29L31000.001.29E-073.17E-078.12E-072.16E-061.18E-072.44E-078.05E-072.99E-06 + 29L32000.002.89E-084.28E-086.62E-081.10E-072.83E-083.70E-085.98E-081.23E-07 + 30K1 15.001.34E+013.20E+025.22E+038.01E+041.26E+017.60E+021.95E+044.04E+05 + 30K1 17.009.52E+002.39E+024.34E+037.50E+048.71E+004.65E+021.24E+042.82E+05 + 30K1 20.006.07E+001.55E+022.98E+035.49E+045.38E+002.46E+026.52E+031.55E+05 + 30K1 25.003.24E+007.93E+011.52E+032.79E+042.79E+001.03E+022.55E+035.91E+04 + 30K1 32.001.59E+003.56E+016.32E+021.08E+041.36E+003.95E+018.69E+021.83E+04 + 30K1 40.008.31E-011.66E+012.66E+024.11E+037.11E-011.68E+013.22E+025.99E+03 + 30K1 50.004.30E-017.51E+001.06E+021.45E+033.76E-017.22E+001.19E+021.91E+03 + 30K1 65.001.97E-012.89E+003.48E+014.01E+021.80E-012.72E+003.67E+014.90E+02 + 30K1 80.001.05E-011.34E+001.40E+011.40E+021.01E-011.27E+001.46E+011.67E+02 + 30K1 100.005.36E-025.82E-015.21E+004.46E+015.51E-025.70E-015.49E+005.28E+01 + 30K1 120.003.09E-022.93E-012.31E+001.73E+013.38E-023.00E-012.50E+002.08E+01 + 30K1 150.001.58E-021.27E-018.49E-015.42E+001.88E-021.39E-019.72E-016.78E+00 + 30K1 200.006.68E-034.32E-022.36E-011.23E+008.99E-035.31E-022.97E-011.66E+00 + 30K1 300.002.07E-039.90E-034.08E-021.61E-013.30E-031.46E-026.06E-022.50E-01 + 30K1 450.006.93E-042.50E-037.93E-032.42E-021.27E-034.33E-031.38E-024.32E-02 + 30K1 650.002.84E-048.16E-042.10E-035.19E-035.57E-041.55E-033.99E-031.00E-02 + 30K11000.001.15E-042.65E-045.53E-041.11E-032.25E-045.13E-041.07E-032.17E-03 + 30K12000.003.56E-056.26E-051.02E-041.61E-046.03E-051.06E-041.74E-042.73E-04 + 30K16000.008.52E-061.10E-051.41E-051.76E-051.07E-051.42E-051.82E-052.27E-05 + 30L1 15.001.03E+002.55E+012.98E+021.04E+031.26E+001.19E+027.29E+034.18E+05 + 30L1 17.007.46E-011.86E+012.59E+021.40E+038.71E-016.94E+013.80E+031.95E+05 + 30L1 20.004.85E-011.19E+011.88E+021.78E+035.39E-013.49E+011.64E+037.32E+04 + 30L1 25.002.66E-016.18E+001.02E+021.31E+032.79E-011.38E+015.23E+021.92E+04 + 30L1 32.001.35E-012.84E+004.53E+016.29E+021.36E-015.00E+001.51E+024.44E+03 + 30L1 40.007.18E-021.36E+002.00E+012.69E+027.13E-022.04E+004.98E+011.20E+03 + 30L1 50.003.79E-026.32E-018.37E+001.03E+023.77E-028.46E-011.68E+013.30E+02 + 30L1 65.001.77E-022.50E-012.86E+003.07E+011.80E-023.08E-014.79E+007.42E+01 + 30L1 80.009.61E-031.18E-011.19E+001.12E+011.01E-021.41E-011.81E+002.33E+01 + 30L1 100.004.96E-035.23E-024.52E-013.71E+005.51E-036.18E-026.51E-016.87E+00 + 30L1 120.002.89E-032.67E-022.04E-011.48E+003.38E-033.21E-022.88E-012.59E+00 + 30L1 150.001.49E-031.17E-027.66E-024.77E-011.88E-031.46E-021.08E-018.05E-01 + 30L1 200.006.37E-044.05E-032.18E-021.11E-018.95E-045.51E-033.22E-021.88E-01 + 30L1 300.001.99E-049.45E-043.87E-031.51E-023.28E-041.49E-036.36E-032.71E-02 + 30L1 450.006.72E-052.42E-047.65E-042.32E-031.25E-044.35E-041.41E-034.51E-03 + 30L1 650.002.76E-057.95E-052.04E-045.06E-045.49E-051.55E-044.04E-041.03E-03 + 30L11000.001.12E-052.59E-055.43E-051.10E-042.22E-055.09E-051.07E-042.19E-04 + 30L12000.003.48E-066.13E-061.01E-051.59E-055.92E-061.05E-051.72E-052.72E-05 + 30L2 15.001.94E-019.55E+011.94E+042.24E+068.50E-021.11E+019.99E+027.77E+04 + 30L2 17.001.24E-015.10E+019.12E+039.42E+055.73E-026.64E+005.38E+023.78E+04 + 30L2 20.006.95E-022.26E+013.42E+033.07E+053.44E-023.41E+002.40E+021.48E+04 + 30L2 25.003.09E-027.38E+008.89E+026.55E+041.70E-021.36E+007.92E+014.02E+03 + 30L2 32.001.25E-022.15E+002.01E+021.19E+047.80E-034.93E-012.31E+019.49E+02 + 30L2 40.005.46E-037.06E-015.26E+012.54E+033.85E-031.97E-017.57E+002.56E+02 + 30L2 50.002.37E-032.33E-011.38E+015.45E+021.90E-037.86E-022.48E+006.91E+01 + 30L2 65.008.86E-046.35E-022.90E+009.01E+018.30E-042.68E-026.70E-011.48E+01 + 30L2 80.004.05E-042.29E-028.51E-012.19E+014.30E-041.15E-022.39E-014.40E+00 + 30L2 100.001.75E-047.70E-032.30E-014.84E+002.13E-044.62E-037.91E-021.20E+00 + 30L2 120.008.84E-053.19E-037.99E-021.43E+001.20E-042.21E-033.23E-024.20E-01 + 30L2 150.003.85E-051.10E-032.22E-023.27E-015.93E-058.99E-041.09E-021.17E-01 + 30L2 200.001.34E-052.84E-044.41E-035.06E-022.41E-052.86E-042.72E-032.32E-02 + 30L2 300.003.14E-064.48E-054.86E-044.00E-036.87E-065.88E-054.07E-042.52E-03 + 30L2 450.007.89E-077.75E-066.00E-053.62E-042.00E-061.27E-056.54E-053.03E-04 + 30L2 650.002.43E-071.74E-061.02E-054.74E-056.71E-073.33E-061.35E-054.93E-05 + 30L21000.006.77E-083.49E-071.50E-065.36E-061.94E-077.47E-072.37E-066.81E-06 + 30L22000.001.13E-083.70E-081.05E-072.62E-072.94E-088.17E-081.90E-074.04E-07 + 30L3 15.003.53E-011.68E+023.36E+043.83E+063.22E-023.81E+011.25E+041.67E+06 + 30L3 17.002.25E-018.92E+011.56E+041.60E+062.19E-022.05E+015.69E+036.77E+05 + 30L3 20.001.25E-013.91E+015.79E+035.13E+051.32E-029.19E+002.06E+032.11E+05 + 30L3 25.005.53E-021.26E+011.48E+031.07E+056.62E-033.07E+005.19E+024.29E+04 + 30L3 32.002.22E-023.59E+003.25E+021.89E+043.07E-039.17E-011.15E+027.50E+03 + 30L3 40.009.61E-031.15E+008.28E+013.92E+031.54E-033.10E-012.98E+011.58E+03 + 30L3 50.004.14E-033.71E-012.11E+018.13E+027.68E-041.06E-017.87E+003.38E+02 + 30L3 65.001.53E-039.81E-024.23E+001.28E+023.40E-043.01E-021.68E+005.65E+01 + 30L3 80.006.96E-043.43E-021.19E+002.96E+011.78E-041.13E-025.01E-011.39E+01 + 30L3 100.002.99E-041.11E-023.05E-016.16E+008.95E-053.96E-031.39E-013.16E+00 + 30L3 120.001.50E-044.45E-031.01E-011.72E+005.11E-051.70E-034.95E-029.57E-01 + 30L3 150.006.54E-051.47E-032.62E-023.64E-012.58E-056.13E-041.42E-022.26E-01 + 30L3 200.002.28E-053.57E-044.71E-035.01E-021.08E-051.68E-042.92E-033.65E-02 + 30L3 300.005.46E-065.18E-054.44E-043.26E-033.29E-062.87E-053.35E-043.02E-03 + 30L3 450.001.44E-068.35E-064.66E-052.39E-041.05E-065.35E-064.18E-052.78E-04 + 30L3 650.004.80E-071.82E-067.00E-062.62E-053.97E-071.29E-066.91E-063.54E-05 + 30L31000.001.53E-073.77E-079.69E-072.58E-061.40E-072.92E-079.75E-073.65E-06 + 30L32000.003.42E-085.08E-087.87E-081.31E-073.34E-084.38E-087.15E-081.49E-07 + 30K 10.663.34E+014.62E+022.22E+038.36E+033.47E+012.91E+034.52E+042.83E+05 + 30K 11.362.82E+014.75E+023.73E+032.52E+042.87E+012.27E+034.24E+044.32E+05 + 30K 12.662.11E+014.37E+025.30E+035.83E+042.08E+011.48E+033.35E+045.21E+05 + 30K 15.861.15E+012.86E+024.99E+038.21E+041.06E+016.08E+021.62E+043.55E+05 + 30K 19.666.34E+001.63E+023.16E+035.84E+045.63E+002.61E+027.01E+031.67E+05 + 30K 24.003.62E+009.03E+011.75E+033.25E+043.13E+001.20E+023.04E+037.15E+04 + 30K 30.001.91E+004.41E+018.07E+021.42E+041.63E+005.04E+011.15E+032.51E+04 + 30K 38.009.60E-011.98E+013.27E+025.20E+038.19E-012.03E+014.03E+027.77E+03 + 30K 50.004.28E-017.48E+001.06E+021.46E+033.74E-017.18E+001.18E+021.91E+03 + 30K 63.002.15E-013.23E+003.97E+014.69E+021.95E-013.03E+004.19E+015.75E+02 + 30K 80.001.05E-011.33E+001.40E+011.40E+021.00E-011.26E+001.45E+011.66E+02 + 30K 93.006.64E-027.60E-017.17E+006.47E+016.66E-027.34E-017.50E+007.63E+01 + 30K 110.004.00E-024.04E-013.39E+002.71E+014.24E-024.05E-013.61E+003.22E+01 + 30K 133.002.25E-021.98E-011.45E+001.01E+012.56E-022.09E-011.60E+001.23E+01 + 30K 160.001.29E-029.87E-026.32E-013.86E+001.58E-021.11E-017.38E-014.90E+00 + 30K 225.004.70E-032.78E-021.40E-016.69E-016.65E-033.60E-021.84E-019.41E-01 + 30K 310.001.87E-038.75E-033.53E-021.36E-013.03E-031.31E-025.32E-022.15E-01 + 30K 400.009.35E-043.65E-031.25E-024.08E-021.66E-036.07E-032.08E-027.04E-02 + 30K 510.005.02E-041.67E-034.91E-031.39E-029.49E-043.01E-038.88E-032.57E-02 + 30K 740.002.11E-045.65E-041.36E-033.14E-034.19E-041.09E-032.63E-036.17E-03 + 30K 1000.001.14E-042.63E-045.49E-041.10E-032.24E-045.10E-041.06E-032.16E-03 + 30K 1250.007.55E-051.58E-043.02E-045.55E-041.44E-042.99E-045.70E-041.05E-03 + 30K 1500.005.53E-051.08E-041.93E-043.33E-041.01E-041.97E-043.52E-046.07E-04 + 30L1 2.197.33E+012.68E+041.80E+073.46E+093.87E+027.29E+052.54E+083.82E+10 + 30L1 2.894.39E+013.90E+034.37E+061.09E+091.69E+021.96E+055.41E+078.57E+09 + 30L1 4.192.07E+017.14E+014.44E+051.34E+085.56E+013.45E+046.89E+069.78E+08 + 30L1 7.395.84E+006.98E+013.45E+032.25E+061.02E+012.59E+033.09E+053.11E+07 + 30L1 11.192.14E+004.79E+011.95E+023.85E+042.95E+004.11E+023.33E+042.44E+06 + 30L1 15.001.02E+002.55E+013.09E+021.07E+031.24E+001.16E+027.12E+034.09E+05 + 30L1 21.004.20E-011.03E+011.68E+021.82E+034.57E-012.77E+011.25E+035.35E+04 + 30L1 29.001.74E-013.86E+006.35E+018.85E+021.77E-017.29E+002.41E+027.77E+03 + 30L1 41.006.59E-021.23E+001.81E+012.43E+026.51E-021.81E+004.31E+011.02E+03 + 30L1 54.002.99E-024.76E-016.08E+007.25E+012.97E-026.13E-011.13E+012.08E+02 + 30L1 71.001.34E-021.79E-011.95E+001.99E+011.38E-022.15E-013.09E+004.42E+01 + 30L1 84.008.18E-039.75E-029.49E-018.75E+008.68E-031.15E-011.41E+001.74E+01 + 30L1 101.004.73E-034.96E-024.27E-013.49E+005.25E-035.83E-026.09E-016.36E+00 + 30L1 124.002.57E-032.32E-021.74E-011.24E+003.03E-032.79E-022.43E-012.13E+00 + 30L1 150.001.46E-031.15E-027.54E-024.70E-011.84E-031.43E-021.06E-017.87E-01 + 30L1 215.005.07E-043.06E-031.56E-027.62E-027.31E-044.24E-032.34E-021.29E-01 + 30L1 300.001.96E-049.28E-043.80E-031.48E-023.21E-041.46E-036.23E-032.65E-02 + 30L1 390.009.59E-053.78E-041.31E-034.33E-031.72E-046.53E-042.32E-038.19E-03 + 30L1 500.005.06E-051.70E-045.06E-041.44E-039.69E-053.16E-049.59E-042.86E-03 + 30L1 730.002.09E-055.65E-051.37E-043.20E-044.21E-051.12E-042.74E-046.55E-04 + 30L11000.001.10E-052.54E-055.32E-051.07E-042.18E-055.01E-051.05E-042.16E-04 + 30L2 2.041.26E+022.16E+063.18E+091.07E+124.11E+013.57E+049.18E+061.61E+09 + 30L2 2.745.22E+014.86E+055.42E+081.85E+111.65E+011.09E+042.87E+065.71E+08 + 30L2 4.041.56E+016.82E+045.22E+071.56E+104.94E+002.27E+035.22E+059.66E+07 + 30L2 7.242.32E+003.59E+031.54E+063.17E+088.01E-012.11E+023.38E+044.56E+06 + 30L2 11.045.51E-014.29E+021.20E+051.78E+072.14E-013.76E+014.37E+034.35E+05 + 30L2 15.001.88E-019.22E+011.88E+042.17E+068.19E-021.07E+019.68E+027.56E+04 + 30L2 21.005.65E-021.70E+012.46E+032.12E+052.84E-022.69E+001.82E+021.08E+04 + 30L2 29.001.74E-023.39E+003.50E+022.27E+041.03E-027.12E-013.65E+011.64E+03 + 30L2 41.004.82E-036.02E-014.37E+012.07E+033.44E-031.71E-016.45E+002.14E+02 + 30L2 54.001.72E-031.53E-018.42E+003.10E+021.44E-035.52E-021.63E+004.24E+01 + 30L2 71.006.14E-043.97E-021.66E+004.75E+016.05E-041.80E-024.16E-018.53E+00 + 30L2 84.003.26E-041.74E-026.15E-011.51E+013.55E-049.05E-031.80E-013.19E+00 + 30L2 101.001.63E-047.07E-032.09E-014.36E+001.98E-044.27E-037.25E-021.09E+00 + 30L2 124.007.55E-052.62E-036.37E-021.11E+001.04E-041.86E-032.65E-023.35E-01 + 30L2 150.003.72E-051.06E-032.14E-023.14E-015.71E-058.66E-041.05E-021.13E-01 + 30L2 215.009.96E-061.95E-042.84E-033.07E-021.86E-052.07E-041.86E-031.49E-02 + 30L2 300.003.03E-064.31E-054.68E-043.85E-036.63E-065.67E-053.92E-042.43E-03 + 30L2 390.001.21E-061.37E-051.19E-048.00E-042.98E-062.09E-051.19E-046.08E-04 + 30L2 500.005.31E-074.82E-063.43E-051.92E-041.41E-068.29E-063.97E-051.71E-04 + 30L2 730.001.66E-071.07E-065.73E-062.48E-054.62E-072.13E-068.04E-062.74E-05 + 30L21000.006.52E-083.36E-071.45E-065.16E-061.87E-077.20E-072.29E-066.56E-06 + 30L3 2.022.50E+024.29E+066.43E+092.19E+121.53E+017.93E+056.26E+095.54E+12 + 30L3 2.721.02E+029.45E+051.06E+093.68E+116.10E+001.80E+058.36E+085.63E+11 + 30L3 4.022.99E+011.30E+059.96E+072.99E+101.82E+002.56E+046.10E+072.86E+10 + 30L3 7.224.35E+006.64E+032.83E+065.83E+082.98E-011.38E+031.29E+063.48E+08 + 30L3 11.021.02E+007.77E+022.14E+053.18E+078.08E-021.69E+028.46E+041.53E+07 + 30L3 15.003.42E-011.63E+023.25E+043.73E+063.11E-023.66E+011.20E+041.61E+06 + 30L3 21.001.01E-012.94E+014.15E+033.54E+051.10E-026.95E+001.46E+031.43E+05 + 30L3 29.003.09E-025.71E+005.74E+023.66E+044.03E-031.43E+002.01E+021.44E+04 + 30L3 41.008.47E-039.82E-016.86E+013.19E+031.37E-032.65E-012.47E+011.28E+03 + 30L3 54.002.99E-032.42E-011.27E+014.56E+025.83E-047.02E-024.79E+001.92E+02 + 30L3 71.001.06E-036.05E-022.38E+006.61E+012.49E-041.91E-029.63E-012.98E+01 + 30L3 84.005.59E-042.58E-028.50E-012.02E+011.48E-048.62E-033.64E-019.67E+00 + 30L3 101.002.78E-041.02E-022.76E-015.54E+008.37E-053.64E-031.26E-012.85E+00 + 30L3 124.001.28E-043.65E-037.96E-021.32E+004.45E-051.41E-033.96E-027.43E-01 + 30L3 150.006.30E-051.41E-032.53E-023.51E-012.49E-055.90E-041.36E-022.17E-01 + 30L3 215.001.69E-052.43E-042.96E-032.95E-028.42E-061.17E-041.90E-032.23E-02 + 30L3 300.005.26E-064.99E-054.27E-043.14E-033.17E-062.77E-053.22E-042.90E-03 + 30L3 390.002.18E-061.51E-059.79E-055.70E-041.50E-069.22E-068.29E-056.12E-04 + 30L3 500.009.99E-075.12E-062.57E-051.20E-047.60E-073.39E-062.38E-051.46E-04 + 30L3 730.003.40E-071.12E-063.85E-061.31E-052.85E-078.18E-073.86E-061.81E-05 + 30L31000.001.50E-073.64E-079.35E-072.49E-061.35E-072.81E-079.39E-073.51E-06 + 30M1 1.143.56E+016.02E+042.94E+079.86E+084.16E+022.89E+063.57E+091.90E+12 + 30M1 2.141.20E+011.95E+032.23E+065.83E+086.27E+011.36E+057.46E+072.52E+10 + 30M1 4.143.16E+002.09E+004.82E+041.70E+078.66E+005.93E+031.51E+062.97E+08 + 30M1 8.146.78E-011.18E+018.40E+011.18E+051.14E+002.67E+023.29E+043.56E+06 + 30M1 15.141.45E-013.69E+004.75E+012.16E+021.80E-011.73E+011.13E+036.92E+04 + 30M1 25.003.83E-028.95E-011.49E+011.93E+024.09E-022.07E+008.18E+013.14E+03 + 30M1 40.001.04E-021.96E-012.89E+003.88E+011.04E-023.04E-017.62E+001.88E+02 + 30M1 52.004.91E-037.97E-021.03E+001.24E+014.94E-031.08E-012.10E+004.07E+01 + 30M1 70.002.07E-032.78E-023.02E-013.10E+002.15E-033.44E-025.07E-017.46E+00 + 30M1 103.006.62E-046.83E-035.81E-024.71E-017.45E-048.19E-038.49E-028.81E-01 + 30M1 150.002.17E-041.70E-031.11E-026.93E-022.75E-042.15E-031.61E-021.20E-01 + 30M2 1.096.10E+017.10E+062.86E+102.61E+133.86E+019.12E+046.37E+073.22E+10 + 30M2 2.091.20E+012.64E+054.78E+082.84E+115.25E+005.59E+032.55E+069.23E+08 + 30M2 4.091.76E+008.90E+037.54E+062.71E+096.64E-013.36E+029.28E+042.13E+07 + 30M2 8.092.05E-012.88E+021.16E+052.39E+078.03E-021.99E+013.17E+034.28E+05 + 30M2 15.092.49E-021.27E+012.64E+033.13E+051.15E-021.53E+001.42E+021.14E+04 + 30M2 25.004.16E-031.01E+001.24E+029.35E+032.36E-031.91E-011.13E+015.87E+02 + 30M2 40.007.46E-049.77E-027.36E+003.59E+025.37E-042.76E-021.07E+003.67E+01 + 30M2 52.002.82E-042.66E-021.53E+005.87E+012.34E-049.39E-032.88E-017.82E+00 + 30M2 70.009.27E-056.14E-032.62E-017.65E+009.17E-052.78E-036.53E-021.36E+00 + 30M2 103.002.19E-059.35E-042.72E-025.60E-012.71E-055.76E-049.63E-031.43E-01 + 30M2 150.005.40E-061.53E-043.12E-034.59E-028.32E-061.26E-041.53E-031.65E-02 + 30M3 1.091.19E+021.33E+075.35E+104.82E+131.38E+012.56E+066.91E+102.01E+14 + 30M3 2.092.29E+014.92E+058.85E+085.21E+111.87E+009.84E+047.92E+089.82E+11 + 30M3 4.093.30E+001.64E+041.38E+074.89E+092.37E-013.43E+038.52E+064.79E+09 + 30M3 8.093.78E-015.20E+022.07E+054.21E+072.92E-021.15E+029.49E+042.55E+07 + 30M3 15.094.51E-022.22E+014.54E+035.33E+054.30E-035.18E+001.74E+032.46E+05 + 30M3 25.007.40E-031.72E+002.06E+021.52E+049.06E-044.29E-017.44E+016.36E+03 + 30M3 40.001.31E-031.59E-011.15E+015.52E+022.12E-044.34E-024.25E+002.30E+02 + 30M3 52.004.89E-044.21E-022.31E+008.65E+019.39E-051.22E-028.86E-013.73E+01 + 30M3 70.001.59E-049.34E-033.74E-011.06E+013.74E-052.96E-031.54E-014.90E+00 + 30M3 103.003.71E-051.34E-033.56E-027.02E-011.14E-054.83E-041.66E-023.70E-01 + 30M3 150.009.06E-062.04E-043.66E-035.09E-023.60E-068.57E-052.00E-033.20E-02 + 30M4 1.014.68E+011.37E+059.01E+091.50E+141.18E+002.16E+042.98E+087.12E+11 + 30M4 2.013.46E+003.84E+036.82E+074.15E+111.10E-016.58E+023.26E+064.33E+09 + 30M4 4.012.13E-011.01E+025.00E+051.21E+099.47E-031.95E+013.78E+042.68E+07 + 30M4 8.011.10E-022.40E+003.62E+033.67E+067.42E-045.67E-014.56E+021.69E+05 + 30M4 15.016.63E-047.48E-024.14E+011.98E+046.85E-052.26E-028.56E+001.74E+03 + 30M4 25.006.31E-054.28E-031.10E+002.91E+029.48E-061.64E-033.44E-014.25E+01 + 30M4 40.006.94E-062.95E-043.95E-026.12E+001.47E-061.45E-041.81E-021.42E+00 + 30M5 1.016.84E+011.95E+051.34E+102.19E+147.72E-013.13E+031.23E+098.20E+13 + 30M5 2.015.05E+005.45E+031.01E+086.02E+117.46E-021.01E+029.94E+061.83E+11 + 30M5 4.013.08E-011.42E+027.41E+051.74E+096.69E-033.22E+007.96E+044.34E+08 + 30M5 8.011.59E-023.36E+005.31E+035.20E+065.50E-041.03E-016.39E+021.13E+06 + 30M5 15.019.51E-041.03E-015.98E+012.75E+045.31E-054.57E-038.13E+005.73E+03 + 30M5 25.009.01E-055.84E-031.56E+003.94E+027.64E-063.62E-042.40E-018.54E+01 + 30M5 40.009.85E-063.95E-045.45E-027.98E+001.23E-063.48E-059.59E-031.89E+00 + 31K 11.372.94E+013.73E+021.58E+035.11E+033.30E+012.59E+033.69E+042.04E+05 + 31K 12.072.51E+013.86E+022.68E+031.58E+042.76E+012.05E+033.50E+043.16E+05 + 31K 13.371.91E+013.61E+023.91E+033.81E+042.04E+011.37E+032.84E+043.95E+05 + 31K 16.571.07E+012.46E+023.91E+035.84E+041.08E+015.87E+021.45E+042.90E+05 + 31K 20.376.06E+001.46E+022.61E+034.45E+045.84E+002.61E+026.56E+031.46E+05 + 31K 24.003.83E+009.06E+011.65E+032.87E+043.60E+001.37E+023.34E+037.42E+04 + 31K 30.002.03E+004.49E+017.85E+021.32E+041.87E+005.77E+011.28E+032.68E+04 + 31K 38.001.02E+002.04E+013.25E+025.00E+039.40E-012.32E+014.51E+028.44E+03 + 31K 50.004.57E-017.80E+001.08E+021.44E+034.28E-018.19E+001.33E+022.10E+03 + 31K 63.002.30E-013.39E+004.08E+014.71E+022.23E-013.46E+004.72E+016.37E+02 + 31K 80.001.12E-011.41E+001.45E+011.43E+021.15E-011.44E+001.64E+011.85E+02 + 31K 93.007.15E-028.06E-017.48E+006.64E+017.59E-028.35E-018.44E+008.51E+01 + 31K 110.004.31E-024.30E-013.55E+002.80E+014.82E-024.59E-014.07E+003.60E+01 + 31K 133.002.43E-022.11E-011.52E+001.05E+012.91E-022.37E-011.81E+001.38E+01 + 31K 160.001.40E-021.06E-016.69E-014.04E+001.79E-021.26E-018.30E-015.48E+00 + 31K 225.005.10E-032.99E-021.49E-017.08E-017.51E-034.06E-022.07E-011.05E+00 + 31K 310.002.04E-039.46E-033.79E-021.45E-013.41E-031.47E-025.97E-022.40E-01 + 31K 400.001.02E-033.96E-031.35E-024.38E-021.86E-036.83E-032.33E-027.88E-02 + 31K 510.005.48E-041.81E-035.32E-031.50E-021.06E-033.38E-039.95E-032.88E-02 + 31K 740.002.31E-046.18E-041.48E-033.42E-034.68E-041.23E-032.95E-036.90E-03 + 31K 1000.001.25E-042.88E-046.01E-041.21E-032.49E-045.70E-041.19E-032.41E-03 + 31K 1250.008.28E-051.74E-043.32E-046.10E-041.60E-043.34E-046.37E-041.18E-03 + 31K 1500.006.07E-051.19E-042.12E-043.66E-041.12E-042.20E-043.93E-046.78E-04 + 31L1 2.306.73E+012.55E+041.52E+072.59E+093.93E+027.17E+052.38E+083.28E+10 + 31L1 3.004.12E+014.17E+034.04E+069.14E+081.77E+022.03E+055.39E+077.97E+09 + 31L1 4.302.00E+011.22E+024.61E+051.26E+086.01E+013.74E+047.27E+069.83E+08 + 31L1 7.505.83E+005.44E+015.09E+032.56E+061.14E+012.93E+033.43E+053.36E+07 + 31L1 11.302.18E+004.33E+011.02E+025.81E+043.34E+004.72E+023.79E+042.72E+06 + 31L1 15.001.07E+002.46E+012.39E+021.41E+031.44E+001.38E+028.46E+034.81E+05 + 31L1 21.004.43E-011.03E+011.52E+021.32E+035.31E-013.28E+011.47E+036.27E+04 + 31L1 29.001.85E-013.93E+006.08E+017.72E+022.06E-018.58E+002.83E+029.08E+03 + 31L1 41.007.05E-021.28E+001.80E+012.30E+027.54E-022.11E+005.04E+011.18E+03 + 31L1 54.003.21E-024.98E-016.17E+007.11E+013.43E-027.14E-011.32E+012.41E+02 + 31L1 71.001.45E-021.89E-012.01E+002.00E+011.59E-022.50E-013.58E+005.11E+01 + 31L1 84.008.84E-031.03E-019.86E-018.89E+001.00E-021.33E-011.63E+002.01E+01 + 31L1 101.005.13E-035.29E-024.47E-013.59E+006.04E-036.74E-027.02E-017.33E+00 + 31L1 124.002.80E-032.49E-021.84E-011.28E+003.48E-033.22E-022.80E-012.44E+00 + 31L1 150.001.59E-031.24E-028.00E-024.92E-012.11E-031.65E-021.22E-019.03E-01 + 31L1 215.005.54E-043.31E-031.68E-028.09E-028.35E-044.86E-032.68E-021.47E-01 + 31L1 300.002.14E-041.01E-034.10E-031.59E-023.66E-041.66E-037.10E-033.02E-02 + 31L1 390.001.05E-044.14E-041.42E-034.68E-031.95E-047.43E-042.64E-039.31E-03 + 31L1 500.005.57E-051.87E-045.53E-041.57E-031.10E-043.59E-041.09E-033.25E-03 + 31L1 730.002.32E-056.24E-051.51E-043.51E-044.75E-051.27E-043.10E-047.42E-04 + 31L11000.001.22E-052.82E-055.89E-051.19E-042.45E-055.66E-051.19E-042.44E-04 + 31L2 2.141.18E+022.00E+062.79E+098.52E+114.19E+013.45E+048.07E+061.26E+09 + 31L2 2.845.09E+014.76E+055.11E+081.63E+111.74E+011.11E+042.71E+064.94E+08 + 31L2 4.141.58E+017.08E+045.28E+071.50E+105.41E+002.42E+035.27E+059.19E+07 + 31L2 7.342.47E+003.93E+031.66E+063.33E+089.09E-012.35E+023.65E+044.75E+06 + 31L2 11.146.00E-014.82E+021.33E+051.95E+072.47E-014.28E+014.86E+034.72E+05 + 31L2 15.002.13E-011.08E+022.21E+042.53E+069.72E-021.27E+011.13E+038.72E+04 + 31L2 21.006.43E-022.01E+012.90E+032.48E+053.38E-023.19E+002.14E+021.25E+04 + 31L2 29.001.99E-024.00E+004.15E+022.66E+041.22E-028.46E-014.30E+011.91E+03 + 31L2 41.005.56E-037.12E-015.18E+012.44E+034.10E-032.04E-017.64E+002.52E+02 + 31L2 54.001.99E-031.81E-011.00E+013.67E+021.72E-036.59E-021.93E+005.01E+01 + 31L2 71.007.15E-044.71E-021.97E+005.64E+017.25E-042.15E-024.95E-011.01E+01 + 31L2 84.003.80E-042.06E-027.33E-011.80E+014.26E-041.08E-022.15E-013.79E+00 + 31L2 101.001.91E-048.42E-032.50E-015.19E+002.38E-045.12E-038.66E-021.30E+00 + 31L2 124.008.88E-053.13E-037.61E-021.32E+001.25E-042.24E-033.16E-023.99E-01 + 31L2 150.004.39E-051.26E-032.56E-023.76E-016.88E-051.04E-031.25E-021.35E-01 + 31L2 215.001.17E-052.34E-043.41E-033.68E-022.24E-052.50E-042.24E-031.79E-02 + 31L2 300.003.59E-065.18E-055.63E-044.63E-038.02E-066.85E-054.72E-042.92E-03 + 31L2 390.001.47E-061.65E-051.44E-049.64E-043.61E-062.53E-051.44E-047.34E-04 + 31L2 500.006.47E-075.80E-064.14E-052.32E-041.71E-061.00E-054.81E-052.07E-04 + 31L2 730.001.95E-071.29E-066.95E-063.00E-055.60E-072.58E-069.76E-063.32E-05 + 31L21000.007.82E-084.06E-071.75E-066.25E-062.27E-078.76E-072.78E-067.97E-06 + 31L3 2.122.35E+023.96E+065.66E+091.76E+121.55E+017.85E+056.01E+095.08E+12 + 31L3 2.829.94E+019.27E+051.01E+093.24E+116.40E+001.88E+058.68E+085.64E+11 + 31L3 4.123.04E+011.35E+051.01E+082.88E+101.98E+002.84E+046.80E+073.11E+10 + 31L3 7.324.62E+007.26E+033.05E+066.11E+083.34E-011.61E+031.53E+064.07E+08 + 31L3 11.121.10E+008.69E+022.38E+053.46E+079.18E-022.01E+021.03E+051.83E+07 + 31L3 15.003.85E-011.90E+023.81E+044.32E+063.63E-024.55E+011.53E+042.05E+06 + 31L3 21.001.15E-013.45E+014.87E+034.12E+051.28E-028.63E+001.85E+031.80E+05 + 31L3 29.003.53E-026.70E+006.75E+024.28E+044.71E-031.77E+002.53E+021.81E+04 + 31L3 41.009.71E-031.15E+008.08E+013.73E+031.61E-033.27E-013.10E+011.60E+03 + 31L3 54.003.45E-032.85E-011.50E+015.36E+026.84E-048.65E-025.98E+002.39E+02 + 31L3 71.001.22E-037.12E-022.80E+007.78E+012.93E-042.34E-021.20E+003.71E+01 + 31L3 84.006.48E-043.05E-021.00E+002.38E+011.74E-041.06E-024.51E-011.20E+01 + 31L3 101.003.23E-041.20E-023.27E-016.54E+009.85E-054.45E-031.56E-013.53E+00 + 31L3 124.001.49E-044.31E-039.43E-021.56E+005.24E-051.72E-034.88E-029.18E-01 + 31L3 150.007.36E-051.67E-032.99E-024.15E-012.93E-057.19E-041.68E-022.68E-01 + 31L3 215.001.99E-052.87E-043.51E-033.49E-029.94E-061.43E-042.33E-032.75E-02 + 31L3 300.006.22E-065.91E-055.08E-043.73E-033.74E-063.34E-053.94E-043.56E-03 + 31L3 390.002.62E-061.79E-051.16E-046.77E-041.77E-061.11E-051.01E-047.49E-04 + 31L3 500.001.19E-066.08E-063.05E-051.43E-048.98E-074.07E-062.89E-051.79E-04 + 31L3 730.003.89E-071.33E-064.57E-061.56E-053.37E-079.77E-074.67E-062.21E-05 + 31L31000.001.75E-074.30E-071.11E-062.96E-061.59E-073.35E-071.13E-064.26E-06 + 31M1 1.163.43E+016.29E+042.57E+074.09E+084.63E+023.29E+064.10E+092.10E+12 + 31M1 2.161.20E+012.34E+032.30E+065.29E+087.17E+011.61E+058.92E+072.95E+10 + 31M1 4.163.22E+005.51E+005.76E+041.84E+071.00E+017.15E+031.83E+063.55E+08 + 31M1 8.167.07E-011.02E+011.77E+021.55E+051.34E+003.22E+023.98E+044.27E+06 + 31M1 15.161.53E-013.61E+003.84E+012.29E+022.11E-012.08E+011.36E+038.28E+04 + 31M1 25.004.11E-029.14E-011.41E+011.68E+024.81E-022.47E+009.81E+013.76E+03 + 31M1 40.001.12E-022.05E-012.90E+003.69E+011.23E-023.61E-019.05E+002.24E+02 + 31M1 52.005.34E-038.43E-021.06E+001.22E+015.79E-031.28E-012.49E+004.81E+01 + 31M1 70.002.26E-032.97E-023.15E-013.15E+002.51E-034.05E-025.96E-018.77E+00 + 31M1 103.007.28E-047.37E-036.16E-024.96E-018.68E-049.59E-039.94E-021.03E+00 + 31M1 150.002.39E-041.85E-031.20E-027.34E-023.19E-042.51E-031.87E-021.40E-01 + 31M2 1.116.09E+017.73E+063.12E+102.72E+134.38E+011.03E+056.92E+073.27E+10 + 31M2 2.111.25E+013.00E+055.46E+083.16E+116.13E+006.53E+032.90E+061.01E+09 + 31M2 4.111.91E+001.04E+048.82E+063.11E+097.88E-013.98E+021.08E+052.42E+07 + 31M2 8.112.30E-013.41E+021.38E+052.79E+079.62E-022.38E+013.73E+034.97E+05 + 31M2 15.112.85E-021.51E+013.15E+033.71E+051.39E-021.84E+001.69E+021.34E+04 + 31M2 25.004.84E-031.22E+001.50E+021.12E+042.87E-032.32E-011.36E+017.02E+02 + 31M2 40.008.77E-041.18E-018.91E+004.34E+026.54E-043.36E-021.30E+004.41E+01 + 31M2 52.003.33E-043.21E-021.86E+007.10E+012.86E-041.14E-023.49E-019.43E+00 + 31M2 70.001.10E-047.44E-033.19E-019.28E+001.12E-043.39E-037.94E-021.65E+00 + 31M2 103.002.61E-051.13E-033.32E-026.82E-013.33E-057.05E-041.18E-021.74E-01 + 31M2 150.006.44E-061.87E-043.81E-035.61E-021.02E-051.55E-041.87E-032.02E-02 + 31M3 1.101.20E+021.47E+075.95E+105.17E+131.56E+013.03E+068.44E+102.50E+14 + 31M3 2.102.41E+015.63E+051.02E+095.86E+112.16E+001.20E+051.01E+091.27E+12 + 31M3 4.103.60E+001.91E+041.61E+075.64E+092.79E-014.28E+031.11E+076.29E+09 + 31M3 8.104.23E-016.13E+022.46E+054.92E+073.46E-021.44E+021.24E+053.34E+07 + 31M3 15.105.14E-022.64E+015.41E+036.30E+055.11E-036.54E+002.26E+033.20E+05 + 31M3 25.008.56E-032.06E+002.47E+021.82E+041.08E-035.44E-019.62E+018.24E+03 + 31M3 40.001.53E-031.91E-011.39E+016.61E+022.53E-045.48E-025.45E+002.95E+02 + 31M3 52.005.73E-045.05E-022.78E+001.04E+021.12E-041.54E-021.13E+004.77E+01 + 31M3 70.001.88E-041.12E-024.51E-011.28E+014.48E-053.72E-031.96E-016.24E+00 + 31M3 103.004.40E-051.60E-034.30E-028.46E-011.36E-056.04E-042.10E-024.69E-01 + 31M3 150.001.08E-052.47E-044.43E-036.15E-024.32E-061.07E-042.52E-034.04E-02 + 31M4 1.025.70E+011.72E+051.20E+102.06E+141.54E+002.93E+044.16E+089.80E+11 + 31M4 2.024.39E+004.97E+039.37E+075.86E+111.47E-019.16E+024.66E+066.13E+09 + 31M4 4.022.78E-011.33E+027.01E+051.73E+091.28E-022.75E+015.44E+043.85E+07 + 31M4 8.021.48E-023.24E+005.12E+035.28E+061.02E-038.07E-016.60E+022.44E+05 + 31M4 15.029.05E-041.03E-015.89E+012.85E+049.54E-053.23E-021.24E+012.51E+03 + 31M4 25.008.75E-055.95E-031.58E+004.23E+021.33E-052.35E-035.01E-016.18E+01 + 31M4 40.009.66E-064.13E-045.66E-028.89E+002.08E-062.09E-042.63E-022.06E+00 + 31M5 1.028.35E+012.45E+051.78E+103.00E+141.00E+004.20E+031.75E+091.22E+14 + 31M5 2.026.40E+007.05E+031.40E+088.51E+119.90E-021.38E+021.46E+072.83E+11 + 31M5 4.024.03E-011.88E+021.04E+062.48E+099.03E-034.48E+001.19E+056.76E+08 + 31M5 8.022.13E-024.53E+007.53E+037.49E+067.54E-041.45E-019.59E+021.76E+06 + 31M5 15.021.30E-031.42E-018.52E+013.97E+047.36E-056.42E-031.22E+018.87E+03 + 31M5 25.001.25E-048.10E-032.24E+005.71E+021.07E-055.12E-043.61E-011.32E+02 + 31M5 40.001.38E-055.52E-047.82E-021.16E+011.73E-064.93E-051.44E-022.89E+00 + 32K 12.102.59E+013.03E+021.14E+033.17E+033.14E+012.31E+033.03E+041.49E+05 + 32K 12.802.24E+013.15E+021.94E+031.00E+042.66E+011.85E+032.90E+042.33E+05 + 32K 14.101.73E+012.99E+022.90E+032.51E+041.99E+011.26E+032.41E+043.01E+05 + 32K 17.309.97E+002.12E+023.07E+034.17E+041.09E+015.65E+021.29E+042.37E+05 + 32K 21.105.78E+001.30E+022.15E+033.39E+046.03E+002.59E+026.12E+031.26E+05 + 32K 25.003.60E+008.00E+011.36E+032.22E+043.65E+001.34E+023.06E+036.40E+04 + 32K 31.001.95E+004.10E+016.77E+021.07E+041.94E+005.80E+011.22E+032.43E+04 + 32K 39.001.01E+001.92E+012.92E+024.27E+039.97E-012.40E+014.47E+028.01E+03 + 32K 51.004.60E-017.56E+001.01E+021.29E+034.61E-018.66E+001.36E+022.08E+03 + 32K 64.002.35E-013.35E+003.90E+014.37E+022.43E-013.70E+004.93E+016.48E+02 + 32K 81.001.16E-011.42E+001.42E+011.36E+021.26E-011.56E+001.74E+011.92E+02 + 32K 94.007.43E-028.18E-017.41E+006.43E+018.37E-029.10E-019.05E+008.95E+01 + 32K 111.004.51E-024.41E-013.56E+002.75E+015.33E-025.03E-014.40E+003.83E+01 + 32K 134.002.56E-022.18E-011.55E+001.05E+013.22E-022.60E-011.96E+001.48E+01 + 32K 160.001.51E-021.13E-017.06E-014.21E+002.02E-021.42E-019.32E-016.11E+00 + 32K 225.005.52E-033.20E-021.58E-017.46E-018.46E-034.57E-022.32E-011.17E+00 + 32K 310.002.21E-031.02E-024.06E-021.54E-013.83E-031.66E-026.69E-022.68E-01 + 32K 400.001.11E-034.28E-031.45E-024.69E-022.09E-037.66E-032.61E-028.79E-02 + 32K 510.005.98E-041.97E-035.75E-031.61E-021.19E-033.79E-031.11E-023.21E-02 + 32K 740.002.52E-046.74E-041.61E-033.71E-035.22E-041.37E-033.29E-037.70E-03 + 32K 1000.001.36E-043.15E-046.57E-041.32E-032.77E-046.36E-041.33E-032.69E-03 + 32K 1250.009.06E-051.90E-043.63E-046.68E-041.77E-043.71E-047.10E-041.31E-03 + 32K 1500.006.64E-051.30E-042.33E-044.02E-041.24E-042.44E-044.38E-047.55E-04 + 32L1 2.416.11E+012.36E+041.25E+071.88E+093.92E+026.89E+052.17E+082.72E+10 + 32L1 3.113.84E+014.31E+033.64E+067.41E+081.83E+022.05E+055.24E+077.18E+09 + 32L1 4.411.92E+011.78E+024.66E+051.16E+086.44E+013.99E+047.52E+069.63E+08 + 32L1 7.615.79E+004.08E+016.86E+032.81E+061.26E+013.27E+033.77E+053.56E+07 + 32L1 11.412.21E+003.86E+016.02E+018.02E+043.76E+005.37E+024.25E+042.99E+06 + 32L1 15.001.12E+002.34E+011.74E+022.90E+031.67E+001.63E+029.99E+035.63E+05 + 32L1 21.004.67E-011.02E+011.34E+029.04E+026.15E-013.87E+011.73E+037.31E+04 + 32L1 29.001.96E-013.98E+005.76E+016.57E+022.38E-011.01E+013.32E+021.06E+04 + 32L1 41.007.51E-021.32E+001.78E+012.15E+028.71E-022.47E+005.87E+011.37E+03 + 32L1 54.003.44E-025.19E-016.22E+006.90E+013.96E-028.30E-011.53E+012.79E+02 + 32L1 71.001.56E-021.99E-012.06E+002.00E+011.83E-022.89E-014.13E+005.89E+01 + 32L1 84.009.54E-031.09E-011.02E+008.98E+001.15E-021.53E-011.88E+002.31E+01 + 32L1 101.005.55E-035.62E-024.66E-013.66E+006.93E-037.75E-028.08E-018.42E+00 + 32L1 124.003.03E-032.66E-021.93E-011.33E+003.98E-033.69E-023.21E-012.80E+00 + 32L1 150.001.73E-031.32E-028.46E-025.13E-012.41E-031.89E-021.39E-011.03E+00 + 32L1 215.006.05E-043.57E-031.79E-028.55E-029.50E-045.54E-033.05E-021.68E-01 + 32L1 300.002.35E-041.10E-034.42E-031.70E-024.15E-041.89E-038.07E-033.43E-02 + 32L1 390.001.16E-044.51E-041.54E-035.04E-032.21E-048.43E-043.00E-031.05E-02 + 32L1 500.006.13E-052.04E-046.02E-041.71E-031.24E-044.07E-041.23E-033.68E-03 + 32L1 730.002.55E-056.86E-051.66E-043.85E-045.34E-051.43E-043.51E-048.38E-04 + 32L11000.001.34E-053.11E-056.50E-051.31E-042.75E-056.38E-051.35E-042.75E-04 + 32L2 2.251.10E+021.82E+062.42E+096.75E+114.23E+013.30E+047.05E+069.80E+08 + 32L2 2.954.93E+014.62E+054.76E+081.41E+111.83E+011.11E+042.53E+064.22E+08 + 32L2 4.251.60E+017.28E+045.28E+071.42E+105.88E+002.55E+035.27E+058.64E+07 + 32L2 7.452.61E+004.28E+031.78E+063.46E+081.02E+002.60E+023.91E+044.90E+06 + 32L2 11.256.49E-015.37E+021.47E+052.11E+072.83E-014.84E+015.37E+035.08E+05 + 32L2 15.002.40E-011.27E+022.59E+042.93E+061.15E-011.49E+011.31E+039.98E+04 + 32L2 21.007.28E-022.35E+013.40E+032.89E+054.00E-023.75E+002.50E+021.45E+04 + 32L2 29.002.27E-024.69E+004.88E+023.11E+041.45E-029.99E-015.03E+012.22E+03 + 32L2 41.006.38E-038.36E-016.11E+012.86E+034.87E-032.41E-018.98E+002.94E+02 + 32L2 54.002.30E-032.14E-011.18E+014.31E+022.05E-037.82E-022.28E+005.87E+01 + 32L2 71.008.28E-045.55E-022.34E+006.65E+018.64E-042.56E-025.85E-011.19E+01 + 32L2 84.004.42E-042.44E-028.69E-012.13E+015.08E-041.29E-022.55E-014.47E+00 + 32L2 101.002.22E-049.96E-032.96E-016.15E+002.85E-046.11E-031.03E-011.54E+00 + 32L2 124.001.04E-043.71E-039.05E-021.56E+001.50E-042.67E-033.76E-024.73E-01 + 32L2 150.005.12E-051.50E-033.05E-024.47E-018.24E-051.24E-031.49E-021.60E-01 + 32L2 215.001.38E-052.79E-044.08E-034.39E-022.69E-053.00E-042.67E-032.13E-02 + 32L2 300.004.26E-066.18E-056.74E-045.54E-039.64E-068.23E-055.66E-043.49E-03 + 32L2 390.001.74E-061.97E-051.72E-041.15E-034.34E-063.04E-051.73E-048.79E-04 + 32L2 500.007.63E-076.94E-064.97E-052.78E-042.06E-061.21E-055.79E-052.49E-04 + 32L2 730.002.31E-071.55E-068.36E-063.62E-056.76E-073.12E-061.18E-054.00E-05 + 32L21000.009.19E-084.88E-072.12E-067.55E-062.74E-071.06E-063.36E-069.62E-06 + 32L3 2.222.20E+023.63E+064.94E+091.40E+121.55E+017.69E+055.70E+094.59E+12 + 32L3 2.929.65E+019.01E+059.43E+082.83E+116.65E+001.95E+058.88E+085.56E+11 + 32L3 4.223.07E+011.38E+051.01E+082.74E+102.13E+003.11E+047.48E+073.33E+10 + 32L3 7.424.87E+007.87E+033.26E+066.34E+083.72E-011.86E+031.80E+064.69E+08 + 32L3 11.221.19E+009.66E+022.62E+053.73E+071.04E-012.38E+021.23E+052.18E+07 + 32L3 15.004.32E-012.21E+024.45E+044.98E+064.22E-025.62E+011.93E+042.59E+06 + 32L3 21.001.30E-014.02E+015.69E+034.77E+051.49E-021.06E+012.33E+032.27E+05 + 32L3 29.004.00E-027.81E+007.89E+024.97E+045.49E-032.18E+003.17E+022.27E+04 + 32L3 41.001.11E-021.35E+009.46E+014.35E+031.87E-034.01E-013.86E+011.99E+03 + 32L3 54.003.95E-033.33E-011.75E+016.25E+027.98E-041.06E-017.43E+002.96E+02 + 32L3 71.001.41E-038.34E-023.29E+009.11E+013.42E-042.86E-021.48E+004.59E+01 + 32L3 84.007.46E-043.57E-021.18E+002.79E+012.03E-041.29E-025.56E-011.48E+01 + 32L3 101.003.73E-041.41E-023.85E-017.67E+001.15E-045.42E-031.93E-014.34E+00 + 32L3 124.001.73E-045.06E-031.11E-011.83E+006.14E-052.09E-036.00E-021.13E+00 + 32L3 150.008.53E-051.96E-033.53E-024.88E-013.44E-058.71E-042.06E-023.28E-01 + 32L3 215.002.30E-053.38E-044.14E-034.12E-021.16E-051.72E-042.84E-033.36E-02 + 32L3 300.007.17E-066.96E-056.00E-044.40E-034.39E-064.02E-054.79E-044.34E-03 + 32L3 390.002.99E-062.11E-051.38E-047.99E-042.08E-061.33E-051.23E-049.11E-04 + 32L3 500.001.37E-067.17E-063.61E-051.69E-041.05E-064.86E-063.50E-052.17E-04 + 32L3 730.004.57E-071.57E-065.40E-061.85E-053.94E-071.16E-065.62E-062.67E-05 + 32L31000.002.02E-075.06E-071.31E-063.50E-061.86E-073.96E-071.35E-065.15E-06 + 32M1 1.183.32E+016.56E+042.24E+072.70E+085.16E+023.75E+064.71E+092.34E+12 + 32M1 2.181.20E+012.76E+032.36E+064.75E+088.19E+011.90E+051.07E+083.45E+10 + 32M1 4.183.29E+001.26E+016.77E+041.96E+071.16E+018.59E+032.22E+064.25E+08 + 32M1 8.187.36E-018.68E+003.17E+021.96E+051.56E+003.88E+024.81E+045.12E+06 + 32M1 15.181.62E-013.51E+003.00E+013.85E+022.47E-012.49E+011.63E+039.89E+04 + 32M1 25.004.41E-029.32E-011.33E+011.31E+025.66E-022.96E+001.17E+024.49E+03 + 32M1 40.001.21E-022.15E-012.90E+003.48E+011.44E-024.28E-011.08E+012.65E+02 + 32M1 52.005.79E-038.90E-021.08E+001.20E+016.77E-031.51E-012.94E+005.68E+01 + 32M1 70.002.46E-033.16E-023.27E-013.18E+002.93E-034.76E-027.01E-011.03E+01 + 32M1 103.007.98E-047.94E-036.52E-025.09E-011.01E-031.12E-021.16E-011.20E+00 + 32M1 150.002.63E-042.01E-031.28E-027.75E-023.70E-042.92E-032.17E-021.62E-01 + 32M2 1.136.08E+018.37E+063.38E+102.83E+134.94E+011.17E+057.48E+073.32E+10 + 32M2 2.131.31E+013.41E+056.21E+083.49E+117.12E+007.59E+033.27E+061.09E+09 + 32M2 4.132.08E+001.21E+041.03E+073.56E+099.31E-014.69E+021.25E+052.73E+07 + 32M2 8.132.56E-014.01E+021.63E+053.26E+071.15E-012.84E+014.39E+035.75E+05 + 32M2 15.133.25E-021.79E+013.76E+034.39E+051.67E-022.20E+002.01E+021.58E+04 + 32M2 25.005.60E-031.46E+001.81E+021.35E+043.47E-032.80E-011.64E+018.36E+02 + 32M2 40.001.03E-031.42E-011.08E+015.21E+027.95E-044.07E-021.56E+005.29E+01 + 32M2 52.003.91E-043.87E-022.25E+008.56E+013.48E-041.39E-024.22E-011.13E+01 + 32M2 70.001.30E-048.98E-033.86E-011.12E+011.37E-044.12E-039.62E-021.99E+00 + 32M2 103.003.11E-051.37E-034.03E-028.27E-014.07E-058.60E-041.43E-022.11E-01 + 32M2 150.007.73E-062.27E-044.65E-036.83E-021.25E-051.90E-042.28E-032.45E-02 + 32M3 1.121.21E+021.61E+076.55E+105.49E+131.75E+013.54E+061.02E+113.05E+14 + 32M3 2.122.53E+016.41E+051.17E+096.54E+112.50E+001.46E+051.28E+091.63E+12 + 32M3 4.123.90E+002.23E+041.88E+076.47E+093.26E-015.31E+031.43E+078.18E+09 + 32M3 8.124.71E-017.21E+022.90E+055.74E+074.07E-021.81E+021.60E+054.34E+07 + 32M3 15.125.84E-023.12E+016.42E+037.41E+056.04E-038.23E+002.92E+034.14E+05 + 32M3 25.009.88E-032.46E+002.96E+022.17E+041.29E-036.87E-011.24E+021.06E+04 + 32M3 40.001.78E-032.28E-011.66E+017.90E+023.02E-046.89E-026.97E+003.78E+02 + 32M3 52.006.70E-046.04E-023.34E+001.24E+021.34E-041.94E-021.44E+006.08E+01 + 32M3 70.002.21E-041.35E-025.43E-011.53E+015.36E-054.66E-032.48E-017.92E+00 + 32M3 103.005.21E-051.93E-035.18E-021.02E+001.63E-057.53E-042.65E-025.93E-01 + 32M3 150.001.29E-052.97E-045.34E-037.41E-025.19E-061.32E-043.16E-035.08E-02 + 32M4 1.036.75E+012.10E+051.53E+102.71E+141.95E+003.84E+045.62E+081.30E+12 + 32M4 2.035.42E+006.27E+031.25E+088.02E+111.91E-011.24E+036.47E+068.41E+09 + 32M4 4.033.55E-011.72E+029.55E+052.40E+091.70E-023.79E+017.63E+045.36E+07 + 32M4 8.031.93E-024.28E+007.06E+037.41E+061.37E-031.12E+009.31E+023.43E+05 + 32M4 15.031.21E-031.37E-018.17E+014.02E+041.30E-044.51E-021.75E+013.54E+03 + 32M4 25.001.18E-048.08E-032.21E+005.99E+021.83E-053.31E-037.12E-018.78E+01 + 32M4 40.001.32E-055.66E-047.93E-021.26E+012.88E-062.94E-043.75E-022.93E+00 + 32M5 1.039.90E+012.98E+052.29E+103.95E+141.26E+005.46E+032.39E+091.74E+14 + 32M5 2.037.91E+008.87E+031.87E+081.16E+121.28E-011.85E+022.07E+074.21E+11 + 32M5 4.035.14E-012.42E+021.42E+063.46E+091.19E-026.06E+001.72E+051.02E+09 + 32M5 8.032.78E-025.96E+001.04E+041.05E+071.01E-031.97E-011.40E+032.67E+06 + 32M5 15.031.72E-031.89E-011.19E+025.59E+049.95E-058.80E-031.79E+011.34E+04 + 32M5 25.001.68E-041.10E-023.14E+008.09E+021.46E-057.06E-045.31E-011.98E+02 + 32M5 40.001.86E-057.53E-041.10E-011.64E+012.38E-066.82E-052.11E-024.31E+00 + 33K 12.872.30E+012.48E+028.27E+022.00E+032.99E+012.06E+032.50E+041.09E+05 + 33K 13.572.00E+012.59E+021.42E+036.42E+032.56E+011.67E+032.42E+041.74E+05 + 33K 14.871.57E+012.49E+022.16E+031.67E+041.95E+011.17E+032.05E+042.30E+05 + 33K 18.079.28E+001.82E+022.41E+032.97E+041.09E+015.43E+021.15E+041.94E+05 + 33K 21.875.50E+001.15E+021.77E+032.58E+046.20E+002.57E+025.69E+031.09E+05 + 33K 26.003.39E+007.10E+011.13E+031.72E+043.72E+001.31E+022.83E+035.55E+04 + 33K 32.001.88E+003.75E+015.85E+028.76E+032.02E+005.83E+011.17E+032.21E+04 + 33K 40.009.92E-011.80E+012.62E+023.65E+031.06E+002.47E+014.43E+027.60E+03 + 33K 52.004.61E-017.32E+009.37E+011.15E+034.97E-019.13E+001.39E+022.05E+03 + 33K 65.002.39E-013.31E+003.73E+014.04E+022.64E-013.96E+005.14E+016.57E+02 + 33K 82.001.20E-011.42E+001.39E+011.30E+021.38E-011.69E+001.84E+012.00E+02 + 33K 95.007.71E-028.29E-017.33E+006.20E+019.20E-029.90E-019.67E+009.38E+01 + 33K 112.004.71E-024.51E-013.56E+002.70E+015.88E-025.50E-014.73E+004.05E+01 + 33K 135.002.69E-022.25E-011.57E+001.04E+013.57E-022.86E-012.13E+001.58E+01 + 33K 160.001.62E-021.20E-017.42E-014.38E+002.28E-021.59E-011.04E+006.80E+00 + 33K 225.005.96E-033.43E-021.68E-017.83E-019.51E-035.13E-022.60E-011.31E+00 + 33K 310.002.40E-031.09E-024.33E-021.63E-014.30E-031.85E-027.47E-022.98E-01 + 33K 400.001.21E-034.62E-031.55E-025.00E-022.33E-038.56E-032.91E-029.79E-02 + 33K 510.006.50E-042.13E-036.20E-031.73E-021.33E-034.23E-031.24E-023.57E-02 + 33K 740.002.74E-047.32E-041.75E-034.02E-035.80E-041.53E-033.66E-038.56E-03 + 33K 1000.001.48E-043.44E-047.16E-041.44E-033.07E-047.07E-041.48E-032.99E-03 + 33K 1250.009.85E-052.08E-043.97E-047.30E-041.96E-044.13E-047.90E-041.46E-03 + 33K 1500.007.22E-051.42E-042.55E-044.40E-041.37E-042.71E-044.86E-048.39E-04 + 33L1 2.535.62E+012.21E+041.06E+071.41E+093.96E+026.72E+052.03E+082.33E+10 + 33L1 3.233.60E+014.45E+033.32E+066.14E+081.90E+022.10E+055.16E+076.61E+09 + 33L1 4.531.84E+012.40E+024.71E+051.07E+086.90E+014.27E+047.83E+069.55E+08 + 33L1 7.735.76E+002.96E+018.80E+033.05E+061.39E+013.66E+034.14E+053.80E+07 + 33L1 11.532.24E+003.42E+016.84E+011.05E+054.22E+006.11E+024.77E+043.28E+06 + 33L1 15.001.17E+002.22E+011.20E+025.66E+031.92E+001.93E+021.18E+046.56E+05 + 33L1 21.004.91E-011.00E+011.16E+026.00E+027.10E-014.55E+012.03E+038.51E+04 + 33L1 29.002.07E-014.01E+005.41E+015.48E+022.74E-011.18E+013.87E+021.23E+04 + 33L1 41.007.99E-021.35E+001.75E+011.98E+021.00E-012.87E+006.81E+011.59E+03 + 33L1 54.003.67E-025.40E-016.25E+006.66E+014.55E-029.61E-011.77E+013.21E+02 + 33L1 71.001.67E-022.09E-012.10E+001.98E+012.10E-023.33E-014.76E+006.77E+01 + 33L1 84.001.02E-021.15E-011.05E+009.03E+001.31E-021.76E-012.16E+002.65E+01 + 33L1 101.005.97E-035.94E-024.84E-013.73E+007.92E-038.90E-029.26E-019.63E+00 + 33L1 124.003.27E-032.83E-022.02E-011.36E+004.55E-034.23E-023.67E-013.20E+00 + 33L1 150.001.87E-031.41E-028.90E-025.33E-012.74E-032.15E-021.59E-011.18E+00 + 33L1 215.006.56E-043.84E-031.90E-029.00E-021.08E-036.31E-033.47E-021.91E-01 + 33L1 300.002.56E-041.19E-034.74E-031.81E-024.70E-042.14E-039.15E-033.88E-02 + 33L1 390.001.26E-044.90E-041.66E-035.42E-032.49E-049.54E-043.39E-031.19E-02 + 33L1 500.006.72E-052.23E-046.54E-041.85E-031.40E-044.59E-041.39E-034.15E-03 + 33L1 730.002.80E-057.52E-051.81E-044.20E-046.00E-051.61E-043.95E-049.45E-04 + 33L11000.001.47E-053.42E-057.15E-051.44E-043.08E-057.17E-051.51E-043.10E-04 + 33L2 2.361.03E+021.66E+062.09E+095.33E+114.26E+013.15E+046.14E+067.59E+08 + 33L2 3.064.76E+014.45E+054.41E+081.21E+111.91E+011.11E+042.35E+063.59E+08 + 33L2 4.361.60E+017.42E+045.24E+071.34E+106.35E+002.67E+035.23E+058.06E+07 + 33L2 7.562.74E+004.61E+031.89E+063.56E+081.15E+002.85E+024.15E+045.01E+06 + 33L2 11.366.98E-015.95E+021.62E+052.26E+073.22E-015.43E+015.88E+035.42E+05 + 33L2 15.002.68E-011.48E+023.02E+043.37E+061.35E-011.74E+011.52E+031.14E+05 + 33L2 21.008.21E-022.74E+013.97E+033.34E+054.71E-024.40E+002.90E+021.66E+04 + 33L2 29.002.57E-025.47E+005.70E+023.62E+041.71E-021.17E+005.87E+012.56E+03 + 33L2 41.007.28E-039.78E-017.17E+013.34E+035.76E-032.84E-011.05E+013.41E+02 + 33L2 54.002.63E-032.50E-011.39E+015.05E+022.42E-039.22E-022.67E+006.84E+01 + 33L2 71.009.52E-046.52E-022.75E+007.80E+011.02E-033.02E-026.89E-011.39E+01 + 33L2 84.005.09E-042.87E-021.02E+002.50E+016.04E-041.53E-023.00E-015.24E+00 + 33L2 101.002.57E-041.17E-023.50E-017.24E+003.38E-047.24E-031.21E-011.81E+00 + 33L2 124.001.20E-044.37E-031.07E-011.85E+001.78E-043.17E-034.45E-025.57E-01 + 33L2 150.005.97E-051.77E-033.61E-025.28E-019.82E-051.48E-031.77E-021.89E-01 + 33L2 215.001.62E-053.30E-044.84E-035.20E-023.21E-053.57E-043.18E-032.53E-02 + 33L2 300.004.95E-067.33E-058.02E-046.58E-031.15E-059.84E-056.75E-044.15E-03 + 33L2 390.002.00E-062.34E-052.05E-041.38E-035.20E-063.64E-052.06E-041.05E-03 + 33L2 500.008.86E-078.26E-065.94E-053.32E-042.47E-061.45E-056.93E-052.97E-04 + 33L2 730.002.79E-071.85E-061.00E-054.33E-058.12E-073.75E-061.41E-054.79E-05 + 33L21000.001.09E-075.82E-072.54E-069.05E-063.30E-071.28E-064.04E-061.16E-05 + 33L3 2.322.05E+023.31E+064.29E+091.11E+121.55E+017.48E+055.35E+094.11E+12 + 33L3 3.029.31E+018.69E+058.75E+082.44E+116.87E+002.01E+058.98E+085.43E+11 + 33L3 4.323.08E+011.41E+051.00E+082.58E+102.27E+003.37E+048.12E+073.52E+10 + 33L3 7.525.10E+008.47E+033.46E+066.51E+084.10E-012.13E+032.08E+065.35E+08 + 33L3 11.321.28E+001.07E+032.87E+053.99E+071.16E-012.79E+021.47E+052.56E+07 + 33L3 15.004.81E-012.56E+025.15E+045.71E+064.87E-026.90E+012.43E+043.25E+06 + 33L3 21.001.45E-014.66E+016.60E+035.49E+051.72E-021.30E+012.92E+032.83E+05 + 33L3 29.004.51E-029.06E+009.17E+025.73E+046.35E-032.66E+003.95E+022.82E+04 + 33L3 41.001.26E-021.57E+001.10E+025.04E+032.17E-034.90E-014.78E+012.46E+03 + 33L3 54.004.49E-033.88E-012.04E+017.26E+029.26E-041.29E-019.16E+003.65E+02 + 33L3 71.001.61E-039.72E-023.84E+001.06E+023.97E-043.48E-021.82E+005.64E+01 + 33L3 84.008.54E-044.16E-021.38E+003.25E+012.36E-041.56E-026.82E-011.81E+01 + 33L3 101.004.28E-041.65E-024.50E-018.95E+001.34E-046.56E-032.36E-015.31E+00 + 33L3 124.001.99E-045.91E-031.30E-012.14E+007.14E-052.52E-037.32E-021.38E+00 + 33L3 150.009.83E-052.30E-034.13E-025.70E-014.00E-051.05E-032.51E-024.00E-01 + 33L3 215.002.68E-053.95E-044.86E-034.82E-021.36E-052.06E-043.45E-034.08E-02 + 33L3 300.008.42E-068.15E-057.04E-045.17E-035.11E-064.80E-055.79E-045.26E-03 + 33L3 390.003.51E-062.47E-051.62E-049.39E-042.43E-061.58E-051.48E-041.10E-03 + 33L3 500.001.60E-068.39E-064.24E-051.98E-041.23E-065.77E-064.21E-052.62E-04 + 33L3 730.005.41E-071.84E-066.35E-062.17E-054.60E-071.37E-066.73E-063.22E-05 + 33L31000.002.38E-075.94E-071.54E-064.12E-062.16E-074.65E-071.61E-066.17E-06 + 33M1 1.203.21E+016.78E+041.94E+074.57E+085.70E+024.23E+065.35E+092.57E+12 + 33M1 2.201.19E+013.19E+032.40E+064.20E+089.30E+012.23E+051.26E+084.01E+10 + 33M1 4.203.36E+002.33E+017.80E+042.07E+071.34E+011.03E+042.67E+065.05E+08 + 33M1 8.207.65E-017.20E+005.06E+022.42E+051.82E+004.65E+025.78E+046.12E+06 + 33M1 15.201.71E-013.39E+002.26E+016.97E+022.89E-012.98E+011.95E+031.18E+05 + 33M1 25.004.71E-029.46E-011.23E+011.04E+026.63E-023.53E+001.40E+025.35E+03 + 33M1 40.001.31E-022.24E-012.88E+003.25E+011.68E-025.07E-011.27E+013.13E+02 + 33M1 52.006.27E-039.37E-021.10E+001.17E+017.90E-031.78E-013.46E+006.69E+01 + 33M1 70.002.68E-033.36E-023.39E-013.19E+003.41E-035.58E-028.23E-011.21E+01 + 33M1 103.008.73E-048.54E-036.87E-025.25E-011.17E-031.31E-021.36E-011.40E+00 + 33M1 150.002.89E-042.18E-031.37E-028.16E-024.28E-043.39E-032.52E-021.88E-01 + 33M2 1.156.10E+019.14E+063.71E+103.01E+135.60E+011.33E+058.23E+073.46E+10 + 33M2 2.151.38E+013.87E+057.10E+083.90E+118.27E+008.85E+033.73E+061.20E+09 + 33M2 4.152.25E+001.40E+041.20E+074.08E+091.10E+005.54E+021.45E+053.09E+07 + 33M2 8.152.85E-014.72E+021.92E+053.80E+071.37E-013.38E+015.15E+036.65E+05 + 33M2 15.153.68E-022.12E+014.46E+035.17E+052.00E-022.63E+002.37E+021.85E+04 + 33M2 25.006.46E-031.74E+002.17E+021.60E+044.19E-033.37E-011.95E+019.91E+02 + 33M2 40.001.19E-031.69E-011.29E+016.24E+029.61E-044.91E-021.88E+006.30E+01 + 33M2 52.004.58E-044.66E-022.70E+001.03E+024.22E-041.68E-025.07E-011.35E+01 + 33M2 70.001.53E-041.08E-024.66E-011.35E+011.66E-044.99E-031.16E-012.39E+00 + 33M2 103.003.68E-051.56E-034.88E-029.97E-014.95E-051.04E-031.73E-022.54E-01 + 33M2 150.009.21E-062.74E-045.64E-038.27E-021.53E-052.31E-042.77E-032.97E-02 + 33M3 1.141.21E+021.74E+077.12E+105.75E+131.96E+014.09E+061.20E+113.66E+14 + 33M3 2.142.65E+017.24E+051.33E+097.23E+112.86E+001.76E+051.59E+092.06E+12 + 33M3 4.144.22E+002.57E+042.18E+077.37E+093.79E-016.53E+031.83E+071.05E+10 + 33M3 8.145.22E-018.44E+023.40E+056.65E+074.77E-022.25E+022.06E+055.61E+07 + 33M3 15.146.60E-023.68E+017.58E+038.68E+057.11E-031.03E+013.74E+035.32E+05 + 33M3 25.001.13E-022.92E+003.52E+022.57E+041.52E-038.62E-011.59E+021.37E+04 + 33M3 40.002.06E-032.71E-011.98E+019.38E+023.58E-048.63E-028.86E+004.81E+02 + 33M3 52.007.80E-047.20E-023.99E+001.48E+021.59E-042.42E-021.82E+007.70E+01 + 33M3 70.002.58E-041.61E-026.49E-011.83E+016.37E-055.80E-033.13E-011.00E+01 + 33M3 103.006.12E-052.30E-036.20E-021.22E+001.94E-059.34E-043.32E-027.45E-01 + 33M3 150.001.51E-053.55E-046.42E-038.88E-026.19E-061.64E-043.95E-036.35E-02 + 33M4 1.047.82E+012.50E+051.90E+103.46E+142.41E+004.92E+047.37E+081.67E+12 + 33M4 2.046.55E+007.74E+031.63E+081.07E+122.43E-011.64E+038.75E+061.13E+10 + 33M4 4.044.43E-012.18E+021.27E+063.27E+092.21E-025.09E+011.05E+057.31E+07 + 33M4 8.042.47E-025.52E+009.53E+031.02E+071.81E-031.52E+001.28E+034.72E+05 + 33M4 15.041.57E-031.80E-011.11E+025.54E+041.73E-046.17E-022.43E+014.89E+03 + 33M4 25.001.56E-041.07E-023.02E+008.30E+022.45E-054.55E-039.91E-011.22E+02 + 33M4 40.001.76E-057.58E-041.09E-011.75E+013.89E-064.06E-045.22E-024.08E+00 + 33M4 52.005.14E-061.72E-041.71E-022.06E+001.38E-061.05E-041.01E-026.17E-01 + 33M4 70.001.27E-063.22E-052.14E-031.85E-014.22E-072.29E-051.60E-037.35E-02 + 33M4 103.002.06E-073.71E-061.48E-048.36E-039.01E-083.17E-061.48E-044.73E-03 + 33M4 150.003.79E-084.64E-071.14E-054.29E-042.00E-084.66E-071.49E-053.38E-04 + 33M5 1.041.15E+023.54E+052.85E+105.05E+141.55E+006.92E+033.18E+092.39E+14 + 33M5 2.049.56E+001.09E+042.43E+081.55E+121.62E-012.41E+022.87E+076.08E+11 + 33M5 4.046.42E-013.05E+021.89E+064.70E+091.53E-028.03E+002.43E+051.51E+09 + 33M5 8.043.56E-027.67E+001.41E+041.44E+071.32E-032.63E-012.00E+033.95E+06 + 33M5 15.042.25E-032.47E-011.61E+027.69E+041.32E-041.18E-022.57E+011.97E+04 + 33M5 25.002.22E-041.44E-024.29E+001.12E+031.94E-059.50E-047.62E-012.90E+02 + 33M5 40.002.49E-051.00E-031.50E-012.27E+013.20E-069.23E-053.02E-026.30E+00 + 33M5 52.007.26E-062.25E-042.33E-022.60E+001.16E-062.52E-055.05E-037.65E-01 + 33M5 70.001.79E-064.14E-052.82E-032.24E-013.66E-075.81E-066.76E-047.21E-02 + 33M5 103.002.89E-074.62E-061.85E-049.41E-038.21E-088.80E-075.13E-053.50E-03 + 33M5 150.005.26E-085.59E-071.34E-054.41E-041.93E-081.43E-074.36E-061.94E-04 + 34K 13.662.04E+012.04E+026.07E+021.28E+032.85E+011.84E+032.08E+048.13E+04 + 34K 14.361.79E+012.13E+021.05E+034.16E+032.46E+011.52E+032.03E+041.30E+05 + 34K 15.661.42E+012.08E+021.62E+031.12E+041.90E+011.08E+031.75E+041.77E+05 + 34K 18.868.62E+001.57E+021.90E+032.13E+041.09E+015.20E+021.02E+041.58E+05 + 34K 22.665.22E+001.02E+021.46E+031.96E+046.36E+002.53E+025.26E+039.40E+04 + 34K 27.003.21E+006.32E+019.43E+021.35E+043.79E+001.28E+022.61E+034.82E+04 + 34K 33.001.82E+003.44E+015.07E+027.16E+032.10E+005.87E+011.12E+032.01E+04 + 34K 41.009.77E-011.70E+012.35E+023.12E+031.12E+002.55E+014.38E+027.21E+03 + 34K 53.004.63E-017.07E+008.71E+011.03E+035.33E-019.61E+001.41E+022.02E+03 + 34K 66.002.43E-013.26E+003.56E+013.73E+022.86E-014.23E+005.35E+016.65E+02 + 34K 83.001.23E-011.42E+001.35E+011.23E+021.51E-011.82E+001.95E+012.06E+02 + 34K 96.007.97E-028.37E-017.23E+005.97E+011.01E-011.07E+001.03E+019.81E+01 + 34K 113.004.90E-024.60E-013.56E+002.64E+016.48E-026.00E-015.08E+004.29E+01 + 34K 136.002.82E-022.32E-011.58E+001.03E+013.94E-023.13E-012.30E+001.69E+01 + 34K 165.001.59E-021.14E-016.80E-013.88E+002.37E-021.61E-011.02E+006.47E+00 + 34K 230.006.02E-033.38E-021.61E-017.36E-011.01E-025.35E-022.65E-011.31E+00 + 34K 315.002.48E-031.11E-024.31E-021.60E-014.62E-031.97E-027.84E-023.08E-01 + 34K 400.001.30E-034.97E-031.66E-025.32E-022.60E-039.55E-033.24E-021.09E-01 + 34K 510.007.03E-042.30E-036.66E-031.85E-021.48E-034.71E-031.38E-023.97E-02 + 34K 740.002.98E-047.94E-041.89E-034.34E-036.43E-041.70E-034.07E-039.50E-03 + 34K 1000.001.61E-043.74E-047.78E-041.56E-033.40E-047.85E-041.64E-033.32E-03 + 34K 1250.001.07E-042.26E-044.32E-047.96E-042.16E-044.57E-048.76E-041.61E-03 + 34K 1500.007.85E-051.55E-042.78E-044.81E-041.51E-043.00E-045.39E-049.30E-04 + 34L1 2.655.10E+012.02E+048.67E+061.02E+093.93E+026.40E+051.83E+081.93E+10 + 34L1 3.353.34E+014.46E+032.94E+064.92E+081.95E+022.10E+054.95E+075.88E+09 + 34L1 4.651.76E+013.00E+024.62E+059.64E+077.31E+014.50E+047.98E+069.20E+08 + 34L1 7.855.68E+002.04E+011.07E+043.21E+061.53E+014.03E+034.47E+053.97E+07 + 34L1 11.652.25E+002.97E+011.23E+021.30E+054.70E+006.87E+025.29E+043.56E+06 + 34L1 15.001.21E+002.08E+017.63E+019.77E+032.21E+002.27E+021.38E+047.60E+05 + 34L1 21.005.14E-019.80E+009.80E+014.21E+028.16E-015.32E+012.36E+039.85E+04 + 34L1 29.002.18E-014.03E+005.02E+014.44E+023.15E-011.37E+014.49E+021.42E+04 + 34L1 41.008.46E-021.38E+001.70E+011.81E+021.15E-013.32E+007.88E+011.83E+03 + 34L1 54.003.91E-025.58E-016.24E+006.37E+015.20E-021.11E+002.03E+013.69E+02 + 34L1 71.001.78E-022.18E-012.14E+001.95E+012.40E-023.83E-015.47E+007.76E+01 + 34L1 84.001.10E-021.21E-011.08E+009.02E+001.50E-022.02E-012.48E+003.03E+01 + 34L1 101.006.41E-036.27E-025.00E-013.77E+009.02E-031.02E-011.06E+001.10E+01 + 34L1 124.003.52E-033.00E-022.10E-011.40E+005.17E-034.83E-024.19E-013.64E+00 + 34L1 150.002.02E-031.50E-029.34E-025.51E-013.11E-032.45E-021.81E-011.34E+00 + 34L1 215.007.12E-044.12E-032.02E-029.45E-021.22E-037.15E-033.93E-022.16E-01 + 34L1 300.002.79E-041.28E-035.07E-031.92E-025.30E-042.42E-031.03E-024.39E-02 + 34L1 390.001.38E-045.30E-041.79E-035.80E-032.81E-041.08E-033.83E-031.34E-02 + 34L1 500.007.34E-052.42E-047.08E-041.99E-031.57E-045.17E-041.57E-034.68E-03 + 34L1 730.003.07E-058.23E-051.98E-044.58E-046.71E-051.81E-044.44E-041.06E-03 + 34L11000.001.61E-053.75E-057.84E-051.58E-043.44E-058.03E-051.70E-043.48E-04 + 34L2 2.489.51E+011.50E+061.80E+094.17E+114.26E+012.99E+045.31E+065.84E+08 + 34L2 3.184.57E+014.26E+054.04E+081.03E+111.97E+011.10E+042.16E+063.02E+08 + 34L2 4.481.60E+017.51E+045.14E+071.24E+106.81E+002.77E+035.14E+057.43E+07 + 34L2 7.682.86E+004.94E+031.99E+063.62E+081.27E+003.11E+024.36E+045.08E+06 + 34L2 11.487.47E-016.54E+021.76E+052.40E+073.64E-016.05E+016.40E+035.74E+05 + 34L2 15.002.98E-011.71E+023.50E+043.87E+061.58E-012.03E+011.74E+031.28E+05 + 34L2 21.009.20E-023.18E+014.62E+033.85E+055.51E-025.13E+003.35E+021.89E+04 + 34L2 29.002.90E-026.35E+006.64E+024.18E+042.01E-021.37E+006.80E+012.94E+03 + 34L2 41.008.26E-031.14E+008.36E+013.87E+036.77E-033.33E-011.22E+013.94E+02 + 34L2 54.003.00E-032.92E-011.62E+015.87E+022.85E-031.08E-013.12E+007.94E+01 + 34L2 71.001.09E-037.62E-023.22E+009.11E+011.21E-033.55E-028.06E-011.62E+01 + 34L2 84.005.85E-043.35E-021.20E+002.92E+017.13E-041.80E-023.52E-016.11E+00 + 34L2 101.002.95E-041.37E-024.11E-018.48E+004.00E-048.54E-031.42E-012.11E+00 + 34L2 124.001.38E-045.12E-031.26E-012.17E+002.11E-043.74E-035.24E-026.52E-01 + 34L2 150.006.90E-052.07E-034.25E-026.20E-011.16E-041.75E-032.09E-022.22E-01 + 34L2 215.001.88E-053.88E-045.71E-036.14E-023.81E-054.24E-043.76E-032.98E-02 + 34L2 300.005.84E-068.65E-059.50E-047.79E-031.37E-051.17E-048.00E-044.91E-03 + 34L2 390.002.39E-062.76E-052.44E-041.63E-036.20E-064.34E-052.45E-041.24E-03 + 34L2 500.001.06E-069.78E-067.06E-053.94E-042.95E-061.73E-058.26E-053.53E-04 + 34L2 730.003.29E-072.20E-061.19E-055.16E-059.70E-074.48E-061.69E-055.72E-05 + 34L21000.001.30E-076.91E-073.02E-061.08E-053.94E-071.53E-064.83E-061.38E-05 + 34L3 2.441.90E+023.00E+063.69E+098.78E+111.54E+017.21E+054.98E+093.64E+12 + 34L3 3.148.95E+018.31E+058.05E+082.09E+117.04E+002.04E+058.97E+085.21E+11 + 34L3 4.443.07E+011.43E+059.86E+072.41E+102.41E+003.62E+048.71E+073.67E+10 + 34L3 7.645.32E+009.05E+033.64E+066.63E+084.50E-012.42E+032.39E+066.03E+08 + 34L3 11.441.36E+001.17E+033.11E+054.23E+071.29E-013.24E+021.73E+052.98E+07 + 34L3 15.005.33E-012.95E+025.95E+046.51E+065.61E-028.41E+013.04E+044.05E+06 + 34L3 21.001.62E-015.37E+017.63E+036.29E+051.98E-021.59E+013.63E+033.52E+05 + 34L3 29.005.06E-021.05E+011.06E+036.59E+047.31E-033.24E+004.88E+023.48E+04 + 34L3 41.001.42E-021.81E+001.28E+025.81E+032.51E-035.95E-015.88E+013.03E+03 + 34L3 54.005.09E-034.49E-012.37E+018.38E+021.07E-031.56E-011.12E+014.48E+02 + 34L3 71.001.83E-031.13E-014.46E+001.23E+024.59E-044.20E-022.22E+006.89E+01 + 34L3 84.009.74E-044.83E-021.60E+003.77E+012.73E-041.89E-028.32E-012.21E+01 + 34L3 101.004.89E-041.91E-025.23E-011.04E+011.55E-047.91E-032.87E-016.46E+00 + 34L3 124.002.28E-046.86E-031.51E-012.48E+008.27E-053.03E-038.89E-021.67E+00 + 34L3 150.001.13E-042.67E-034.81E-026.63E-014.64E-051.26E-033.04E-024.85E-01 + 34L3 215.003.06E-054.60E-045.68E-035.62E-021.57E-052.47E-044.17E-034.93E-02 + 34L3 300.009.61E-069.50E-058.23E-046.03E-035.94E-065.71E-056.97E-046.34E-03 + 34L3 390.004.07E-062.88E-051.89E-041.10E-032.82E-061.88E-051.77E-041.33E-03 + 34L3 500.001.87E-069.79E-064.95E-052.32E-041.42E-066.82E-065.04E-053.15E-04 + 34L3 730.006.21E-072.14E-067.42E-062.54E-055.33E-071.61E-068.02E-063.86E-05 + 34L31000.002.76E-076.91E-071.80E-064.82E-062.50E-075.45E-071.91E-067.37E-06 + 34M1 1.233.08E+016.86E+041.63E+078.51E+086.22E+024.66E+065.90E+092.73E+12 + 34M1 2.231.18E+013.61E+032.39E+063.60E+081.05E+022.58E+051.47E+084.56E+10 + 34M1 4.233.41E+003.77E+018.80E+042.14E+071.54E+011.22E+043.17E+065.93E+08 + 34M1 8.237.92E-015.79E+007.43E+022.89E+052.10E+005.54E+026.91E+047.25E+06 + 34M1 15.231.80E-013.25E+001.63E+011.18E+033.36E-013.54E+012.32E+031.39E+05 + 34M1 25.005.03E-029.55E-011.13E+018.06E+017.74E-024.19E+001.67E+026.35E+03 + 34M1 40.001.41E-022.32E-012.85E+003.00E+011.96E-025.98E-011.50E+013.69E+02 + 34M1 52.006.78E-039.82E-021.11E+001.13E+019.20E-032.09E-014.07E+007.85E+01 + 34M1 70.002.91E-033.57E-023.49E-013.19E+003.96E-036.53E-029.63E-011.41E+01 + 34M1 103.009.52E-049.14E-037.22E-025.40E-011.36E-031.52E-021.58E-011.63E+00 + 34M1 150.003.18E-042.36E-031.46E-028.57E-024.93E-043.92E-032.92E-022.18E-01 + 34M2 1.176.06E+019.81E+063.99E+103.12E+136.27E+011.49E+058.88E+073.51E+10 + 34M2 2.171.43E+014.35E+058.01E+084.29E+119.52E+001.02E+044.19E+061.30E+09 + 34M2 4.172.42E+001.62E+041.39E+074.64E+091.28E+006.49E+021.66E+053.47E+07 + 34M2 8.173.15E-015.51E+022.25E+054.40E+071.62E-013.98E+016.00E+037.62E+05 + 34M2 15.174.15E-022.49E+015.26E+036.05E+052.38E-023.13E+002.79E+022.15E+04 + 34M2 25.007.41E-032.07E+002.58E+021.90E+045.02E-034.03E-012.32E+011.17E+03 + 34M2 40.001.38E-032.02E-011.54E+017.43E+021.16E-035.89E-022.24E+007.48E+01 + 34M2 52.005.33E-045.53E-023.24E+001.23E+025.09E-042.02E-026.07E-011.61E+01 + 34M2 70.001.79E-041.29E-025.58E-011.61E+012.01E-046.02E-031.39E-012.85E+00 + 34M2 103.004.34E-051.98E-035.87E-021.20E+006.00E-051.26E-032.08E-023.05E-01 + 34M2 150.001.09E-053.30E-046.80E-039.96E-021.86E-052.80E-043.35E-033.57E-02 + 34M3 1.161.20E+021.87E+077.64E+105.94E+132.17E+014.67E+061.40E+114.30E+14 + 34M3 2.162.75E+018.11E+051.49E+097.92E+113.26E+002.10E+051.96E+092.57E+12 + 34M3 4.164.53E+002.95E+042.52E+078.34E+094.38E-017.97E+032.31E+071.34E+10 + 34M3 8.165.76E-019.82E+023.96E+057.66E+075.56E-022.78E+022.63E+057.18E+07 + 34M3 15.167.41E-024.31E+018.90E+031.01E+068.33E-031.28E+014.76E+036.78E+05 + 34M3 25.001.29E-023.45E+004.17E+023.02E+041.79E-031.08E+002.03E+021.74E+04 + 34M3 40.002.37E-033.21E-012.35E+011.11E+034.22E-041.07E-011.12E+016.09E+02 + 34M3 52.009.02E-048.53E-024.74E+001.75E+021.88E-043.00E-022.30E+009.71E+01 + 34M3 70.003.00E-041.90E-027.73E-012.16E+017.54E-057.19E-033.93E-011.25E+01 + 34M3 103.007.15E-052.73E-037.40E-021.45E+002.30E-051.15E-034.14E-029.31E-01 + 34M3 150.001.78E-054.23E-047.66E-031.06E-017.34E-062.01E-044.90E-037.90E-02 + 34M4 1.068.84E+012.90E+052.29E+104.24E+142.91E+006.10E+049.32E+082.06E+12 + 34M4 2.067.75E+009.33E+032.06E+081.38E+123.03E-012.11E+031.15E+071.46E+10 + 34M4 4.065.42E-012.70E+021.66E+064.34E+092.81E-026.71E+011.41E+059.73E+07 + 34M4 8.063.11E-026.99E+001.26E+041.37E+072.34E-032.03E+001.74E+036.35E+05 + 34M4 15.062.01E-032.32E-011.48E+027.49E+042.26E-048.28E-023.30E+016.63E+03 + 34M4 25.002.03E-041.39E-024.06E+001.13E+033.24E-056.15E-031.35E+001.67E+02 + 34M4 40.002.30E-059.98E-041.46E-012.39E+015.17E-065.50E-047.13E-025.58E+00 + 34M4 52.006.78E-062.28E-042.31E-022.81E+001.84E-061.43E-041.39E-028.45E-01 + 34M4 70.001.69E-064.28E-052.89E-032.52E-015.64E-073.11E-052.19E-031.01E-01 + 34M4 103.002.74E-074.95E-062.00E-041.14E-021.21E-074.31E-062.03E-046.48E-03 + 34M4 150.004.88E-086.21E-071.54E-055.87E-042.69E-086.35E-072.04E-054.64E-04 + 34M5 1.061.30E+024.09E+053.43E+106.17E+141.87E+008.49E+034.06E+093.15E+14 + 34M5 2.061.13E+011.31E+043.08E+082.01E+122.00E-013.07E+023.86E+078.50E+11 + 34M5 4.067.85E-013.77E+022.47E+066.24E+091.93E-021.04E+013.35E+052.17E+09 + 34M5 8.064.47E-029.68E+001.86E+041.94E+071.69E-033.45E-012.80E+035.72E+06 + 34M5 15.062.87E-033.17E-012.15E+021.04E+051.71E-041.55E-023.61E+012.84E+04 + 34M5 25.002.88E-041.87E-025.78E+001.53E+032.54E-051.26E-031.08E+004.19E+02 + 34M5 40.003.26E-051.32E-032.03E-013.10E+014.22E-061.23E-044.24E-029.02E+00 + 34M5 52.009.57E-062.96E-043.14E-023.54E+001.53E-063.35E-057.08E-031.09E+00 + 34M5 70.002.38E-065.47E-053.81E-033.05E-014.86E-077.75E-069.47E-041.02E-01 + 34M5 103.003.89E-076.15E-062.50E-041.28E-021.09E-071.18E-067.15E-054.95E-03 + 34M5 150.007.04E-087.50E-071.82E-056.02E-042.59E-081.92E-076.04E-062.73E-04 + 35K 14.471.81E+011.69E+024.51E+028.28E+022.73E+011.66E+031.74E+046.12E+04 + 35K 15.171.60E+011.77E+027.79E+022.73E+032.37E+011.38E+031.71E+049.84E+04 + 35K 16.471.29E+011.74E+021.23E+037.53E+031.86E+019.97E+021.49E+041.37E+05 + 35K 19.678.02E+001.35E+021.50E+031.53E+041.10E+014.97E+029.12E+031.29E+05 + 35K 23.474.95E+009.09E+011.20E+031.49E+046.50E+002.49E+024.87E+038.08E+04 + 35K 27.003.36E+006.26E+018.70E+021.15E+044.30E+001.45E+022.81E+034.87E+04 + 35K 33.001.91E+003.46E+014.84E+026.49E+032.38E+006.63E+011.23E+032.10E+04 + 35K 41.001.03E+001.73E+012.30E+022.94E+031.27E+002.88E+014.82E+027.68E+03 + 35K 53.004.90E-017.29E+008.71E+011.00E+036.04E-011.08E+011.56E+022.19E+03 + 35K 66.002.58E-013.38E+003.60E+013.69E+023.23E-014.76E+005.93E+017.26E+02 + 35K 83.001.31E-011.49E+001.38E+011.23E+021.70E-012.04E+002.16E+012.26E+02 + 35K 96.008.49E-028.77E-017.44E+006.04E+011.14E-011.21E+001.15E+011.08E+02 + 35K 113.005.23E-024.83E-013.68E+002.69E+017.29E-026.73E-015.65E+004.72E+01 + 35K 136.003.02E-022.44E-011.65E+001.06E+014.42E-023.51E-012.56E+001.86E+01 + 35K 165.001.70E-021.20E-017.11E-014.02E+002.65E-021.80E-011.14E+007.16E+00 + 35K 230.006.47E-033.59E-021.70E-017.69E-011.13E-025.98E-022.95E-011.45E+00 + 35K 315.002.67E-031.19E-024.58E-021.69E-015.15E-032.20E-028.71E-023.41E-01 + 35K 400.001.41E-035.33E-031.77E-025.64E-022.89E-031.06E-023.60E-021.20E-01 + 35K 510.007.61E-042.47E-037.14E-031.98E-021.64E-035.24E-031.53E-024.39E-02 + 35K 740.003.23E-048.59E-042.04E-034.67E-037.12E-041.88E-034.51E-031.05E-02 + 35K 1000.001.75E-044.06E-048.44E-041.69E-033.75E-048.69E-041.82E-033.67E-03 + 35K 1250.001.16E-042.46E-044.70E-048.65E-042.38E-045.05E-049.69E-041.79E-03 + 35K 1500.008.50E-051.68E-043.03E-045.23E-041.66E-043.31E-045.95E-041.03E-03 + 35L1 2.784.66E+011.86E+047.19E+067.56E+083.91E+026.13E+051.67E+081.61E+10 + 35L1 3.483.12E+014.44E+032.62E+063.97E+082.00E+022.11E+054.76E+075.27E+09 + 35L1 4.781.68E+013.60E+024.52E+058.66E+077.73E+014.72E+048.12E+068.88E+08 + 35L1 7.985.61E+001.34E+011.26E+043.35E+061.67E+014.44E+034.82E+054.14E+07 + 35L1 11.782.27E+002.56E+012.21E+021.56E+055.22E+007.70E+025.85E+043.84E+06 + 35L1 16.001.07E+001.72E+016.06E+017.51E+032.10E+002.01E+021.15E+045.93E+05 + 35L1 22.004.76E-018.49E+007.75E+013.41E+028.15E-015.09E+012.16E+038.58E+04 + 35L1 30.002.10E-013.65E+004.22E+013.38E+023.27E-011.38E+014.38E+021.33E+04 + 35L1 42.008.37E-021.31E+001.52E+011.51E+021.22E-013.48E+008.06E+011.82E+03 + 35L1 55.003.94E-025.41E-015.79E+005.62E+015.64E-021.19E+002.14E+013.80E+02 + 35L1 72.001.83E-022.16E-012.04E+001.80E+012.63E-024.16E-015.86E+008.19E+01 + 35L1 85.001.13E-021.21E-011.05E+008.50E+001.65E-022.21E-012.68E+003.23E+01 + 35L1 102.006.67E-036.36E-024.94E-013.63E+009.98E-031.12E-011.15E+001.19E+01 + 35L1 125.003.69E-033.07E-022.11E-011.37E+005.74E-035.34E-024.60E-013.96E+00 + 35L1 150.002.17E-031.60E-029.76E-025.67E-013.53E-032.79E-022.05E-011.51E+00 + 35L1 215.007.68E-044.40E-032.13E-029.88E-021.38E-038.10E-034.45E-022.44E-01 + 35L1 300.003.02E-041.37E-035.41E-032.03E-025.97E-042.73E-031.17E-024.94E-02 + 35L1 390.001.50E-045.73E-041.92E-036.19E-033.16E-041.21E-034.31E-031.51E-02 + 35L1 500.008.01E-052.63E-047.64E-042.14E-031.76E-045.81E-041.76E-035.25E-03 + 35L1 730.003.35E-058.96E-052.15E-044.97E-047.50E-052.03E-044.98E-041.19E-03 + 35L11000.001.76E-054.10E-058.57E-051.73E-043.82E-058.98E-051.90E-043.89E-04 + 35L2 2.608.83E+011.36E+061.55E+093.30E+114.26E+012.84E+044.62E+064.54E+08 + 35L2 3.304.38E+014.06E+053.71E+088.85E+102.04E+011.09E+041.99E+062.55E+08 + 35L2 4.601.59E+017.57E+045.04E+071.16E+107.28E+002.87E+035.04E+056.84E+07 + 35L2 7.802.97E+005.27E+032.09E+063.68E+081.41E+003.37E+024.58E+045.12E+06 + 35L2 11.607.95E-017.16E+021.91E+052.54E+074.10E-016.71E+016.93E+036.05E+05 + 35L2 16.002.65E-011.43E+022.74E+042.84E+061.50E-011.81E+011.46E+031.01E+05 + 35L2 22.008.71E-022.91E+014.04E+033.21E+055.56E-024.93E+003.06E+021.65E+04 + 35L2 30.002.89E-026.21E+006.28E+023.82E+042.11E-021.39E+006.64E+012.77E+03 + 35L2 42.008.54E-031.17E+008.41E+013.80E+037.35E-033.52E-011.26E+013.94E+02 + 35L2 55.003.18E-033.10E-011.69E+016.01E+023.16E-031.17E-013.31E+008.23E+01 + 35L2 72.001.18E-038.27E-023.46E+009.63E+011.36E-033.93E-028.76E-011.73E+01 + 35L2 85.006.40E-043.69E-021.31E+003.14E+018.08E-042.01E-023.87E-016.63E+00 + 35L2 102.003.27E-041.53E-024.53E-019.25E+004.57E-049.63E-031.59E-012.32E+00 + 35L2 125.001.55E-045.76E-031.41E-012.40E+002.42E-044.26E-035.90E-027.27E-01 + 35L2 150.007.94E-052.43E-034.99E-027.26E-011.37E-042.06E-032.45E-022.59E-01 + 35L2 215.002.16E-054.55E-046.72E-037.21E-024.51E-055.00E-044.42E-033.50E-02 + 35L2 300.006.71E-061.02E-041.12E-039.17E-031.63E-051.38E-049.45E-045.78E-03 + 35L2 390.002.76E-063.26E-052.88E-041.92E-037.35E-065.14E-052.90E-041.47E-03 + 35L2 500.001.23E-061.15E-058.35E-054.66E-043.50E-062.06E-059.79E-054.18E-04 + 35L2 730.003.79E-072.59E-061.41E-056.12E-051.15E-065.34E-062.01E-056.78E-05 + 35L21000.001.50E-078.18E-073.59E-061.28E-054.68E-071.82E-065.76E-061.64E-05 + 35L3 2.551.77E+022.73E+063.20E+097.00E+111.52E+016.97E+054.64E+093.24E+12 + 35L3 3.258.60E+017.95E+057.42E+081.80E+117.21E+002.08E+058.96E+085.02E+11 + 35L3 4.553.06E+011.44E+059.68E+072.24E+102.55E+003.88E+049.30E+073.82E+10 + 35L3 7.755.52E+009.64E+033.81E+066.73E+084.92E-012.72E+032.72E+066.77E+08 + 35L3 11.551.45E+001.28E+033.36E+054.47E+071.44E-013.74E+022.02E+053.45E+07 + 35L3 16.004.70E-012.45E+024.61E+044.73E+065.26E-027.41E+012.51E+043.14E+06 + 35L3 22.001.53E-014.88E+016.60E+035.18E+051.97E-021.53E+013.36E+033.11E+05 + 35L3 30.004.99E-021.01E+019.93E+025.94E+047.55E-033.32E+004.88E+023.37E+04 + 35L3 42.001.45E-021.84E+001.27E+025.62E+032.67E-036.39E-016.23E+013.13E+03 + 35L3 55.005.35E-034.72E-012.45E+018.47E+021.16E-031.73E-011.23E+014.81E+02 + 35L3 72.001.96E-031.21E-014.74E+001.28E+025.05E-044.73E-022.49E+007.62E+01 + 35L3 85.001.06E-035.25E-021.73E+004.00E+013.03E-042.14E-029.43E-012.48E+01 + 35L3 102.005.36E-042.10E-025.71E-011.12E+011.73E-049.05E-033.28E-017.33E+00 + 35L3 125.002.52E-047.62E-031.67E-012.71E+009.30E-053.49E-031.03E-011.92E+00 + 35L3 150.001.29E-043.09E-035.58E-027.67E-015.35E-051.50E-033.67E-025.86E-01 + 35L3 215.003.53E-055.33E-046.59E-036.51E-021.82E-052.93E-045.00E-035.93E-02 + 35L3 300.001.11E-051.10E-049.57E-047.00E-036.85E-066.76E-058.35E-047.61E-03 + 35L3 390.004.65E-063.34E-052.20E-041.27E-033.25E-062.21E-052.12E-041.59E-03 + 35L3 500.002.13E-061.13E-055.77E-052.70E-041.64E-068.02E-066.00E-053.76E-04 + 35L3 730.007.18E-072.48E-068.63E-062.96E-056.15E-071.88E-069.51E-064.60E-05 + 35L31000.003.16E-077.97E-072.09E-065.61E-062.89E-076.34E-072.26E-068.76E-06 + 35M1 1.262.98E+017.01E+041.39E+071.40E+096.83E+025.19E+066.61E+092.96E+12 + 35M1 2.261.17E+014.06E+032.38E+063.09E+081.18E+023.00E+051.72E+085.23E+10 + 35M1 4.263.46E+005.60E+019.86E+042.21E+071.76E+011.44E+043.78E+066.98E+08 + 35M1 8.268.20E-014.52E+001.03E+033.41E+052.43E+006.59E+028.25E+048.59E+06 + 35M1 15.261.89E-013.09E+001.16E+011.84E+033.89E-014.20E+012.75E+031.65E+05 + 35M1 25.005.35E-029.60E-011.02E+016.28E+019.01E-024.97E+001.98E+027.52E+03 + 35M1 40.001.51E-022.40E-012.79E+002.73E+012.28E-027.04E-011.77E+014.34E+02 + 35M1 52.007.30E-031.03E-011.11E+001.08E+011.07E-022.45E-014.77E+009.19E+01 + 35M1 70.003.15E-033.77E-023.58E-013.17E+004.59E-037.62E-021.12E+001.65E+01 + 35M1 103.001.04E-039.76E-037.55E-025.53E-011.57E-031.77E-021.83E-011.89E+00 + 35M1 150.003.46E-042.54E-031.55E-028.95E-025.68E-044.53E-033.38E-022.52E-01 + 35M2 1.196.03E+011.05E+074.30E+103.26E+137.01E+011.66E+059.62E+073.59E+10 + 35M2 2.191.48E+014.87E+059.02E+084.72E+111.09E+011.18E+044.70E+061.41E+09 + 35M2 4.192.59E+001.85E+041.60E+075.26E+091.50E+007.57E+021.91E+053.89E+07 + 35M2 8.193.47E-016.40E+022.63E+055.07E+071.90E-014.69E+016.96E+038.71E+05 + 35M2 15.194.66E-022.92E+016.18E+037.05E+052.82E-023.70E+003.27E+022.49E+04 + 35M2 25.008.45E-032.45E+003.06E+022.25E+045.99E-034.80E-012.75E+011.37E+03 + 35M2 40.001.59E-032.39E-011.84E+018.80E+021.38E-037.03E-022.66E+008.82E+01 + 35M2 52.006.17E-046.57E-023.85E+001.45E+026.10E-042.41E-027.22E-011.91E+01 + 35M2 70.002.09E-041.53E-026.66E-011.92E+012.41E-047.21E-031.66E-013.38E+00 + 35M2 103.005.08E-052.36E-037.02E-021.43E+007.22E-051.52E-032.49E-023.63E-01 + 35M2 150.001.28E-053.95E-048.16E-031.19E-012.24E-053.37E-044.02E-034.27E-02 + 35M3 1.181.20E+022.01E+078.27E+106.23E+132.41E+015.34E+061.64E+115.10E+14 + 35M3 2.182.86E+019.08E+051.68E+098.73E+113.70E+002.50E+052.42E+093.20E+12 + 35M3 4.184.85E+003.38E+042.89E+079.43E+095.05E-019.69E+032.91E+071.71E+10 + 35M3 8.186.33E-011.14E+034.61E+058.79E+076.45E-023.41E+023.33E+059.16E+07 + 35M3 15.188.29E-025.02E+011.04E+041.17E+069.71E-031.58E+016.02E+038.61E+05 + 35M3 25.001.47E-024.05E+004.92E+023.55E+042.10E-031.33E+002.57E+022.21E+04 + 35M3 40.002.72E-033.78E-012.78E+011.30E+034.96E-041.33E-011.41E+017.67E+02 + 35M3 52.001.04E-031.00E-015.60E+002.06E+022.21E-043.71E-022.88E+001.22E+02 + 35M3 70.003.47E-042.25E-029.15E-012.55E+018.87E-058.86E-034.90E-011.57E+01 + 35M3 103.008.31E-053.23E-038.77E-021.71E+002.71E-051.41E-035.14E-021.16E+00 + 35M3 150.002.08E-055.01E-049.10E-031.25E-018.66E-062.46E-046.06E-039.78E-02 + 35M4 1.079.92E+013.35E+052.74E+105.21E+143.48E+007.55E+041.18E+092.56E+12 + 35M4 2.079.07E+001.12E+042.59E+081.78E+123.73E-012.70E+031.51E+071.89E+10 + 35M4 4.076.55E-013.31E+022.14E+065.71E+093.52E-028.73E+011.86E+051.28E+08 + 35M4 8.073.85E-028.73E+001.65E+041.81E+072.98E-032.67E+002.32E+038.45E+05 + 35M4 15.072.54E-032.94E-011.95E+029.99E+042.91E-041.10E-014.42E+018.86E+03 + 35M4 25.002.59E-041.79E-025.37E+001.52E+034.21E-058.19E-031.82E+002.24E+02 + 35M4 40.002.96E-051.29E-031.94E-013.20E+016.76E-067.34E-049.60E-027.51E+00 + 35M4 52.008.81E-062.97E-043.07E-023.77E+002.41E-061.91E-041.87E-021.14E+00 + 35M4 70.002.22E-065.60E-053.84E-033.39E-017.42E-074.16E-052.96E-031.36E-01 + 35M4 103.003.62E-076.50E-062.66E-041.54E-021.59E-075.78E-062.74E-048.75E-03 + 35M4 150.006.25E-088.20E-072.06E-057.91E-043.56E-088.53E-072.76E-056.27E-04 + 35M5 1.071.46E+024.73E+054.15E+107.66E+142.23E+001.04E+045.23E+094.19E+14 + 35M5 2.071.32E+011.57E+043.89E+082.59E+122.45E-013.88E+025.17E+071.18E+12 + 35M5 4.079.48E-014.61E+023.19E+068.22E+092.41E-021.33E+014.58E+053.08E+09 + 35M5 8.075.53E-021.21E+012.43E+042.57E+072.14E-034.46E-013.85E+038.16E+06 + 35M5 15.073.61E-034.01E-012.83E+021.38E+052.18E-042.02E-024.99E+014.04E+04 + 35M5 25.003.68E-042.40E-027.66E+002.05E+033.28E-051.64E-031.49E+005.95E+02 + 35M5 40.004.20E-051.70E-032.69E-014.15E+015.48E-061.61E-045.88E-021.27E+01 + 35M5 52.001.24E-053.84E-044.17E-024.74E+002.00E-064.39E-059.79E-031.53E+00 + 35M5 70.003.08E-067.11E-055.06E-034.09E-016.35E-071.02E-051.30E-031.43E-01 + 35M5 103.005.06E-078.04E-063.33E-041.72E-021.43E-071.55E-069.80E-056.89E-03 + 35M5 150.009.37E-089.89E-072.42E-058.08E-043.40E-082.53E-078.25E-063.79E-04 + 36K 15.331.62E+011.40E+023.37E+025.40E+022.61E+011.49E+031.46E+044.62E+04 + 36K 16.031.44E+011.47E+025.82E+021.81E+032.28E+011.25E+031.44E+047.46E+04 + 36K 17.331.17E+011.46E+029.28E+025.10E+031.81E+019.20E+021.28E+041.06E+05 + 36K 20.537.45E+001.17E+021.18E+031.10E+041.10E+014.74E+028.09E+031.05E+05 + 36K 24.334.69E+008.04E+019.81E+021.13E+046.63E+002.44E+024.48E+036.92E+04 + 36K 28.003.18E+005.57E+017.25E+028.98E+034.37E+001.41E+022.60E+034.23E+04 + 36K 34.001.85E+003.16E+014.18E+025.29E+032.47E+006.65E+011.17E+031.90E+04 + 36K 42.001.01E+001.63E+012.06E+022.51E+031.33E+002.95E+014.75E+027.25E+03 + 36K 54.004.90E-017.02E+008.07E+018.91E+026.46E-011.13E+011.59E+022.15E+03 + 36K 67.002.61E-013.32E+003.42E+013.38E+023.49E-015.06E+006.14E+017.30E+02 + 36K 84.001.34E-011.48E+001.34E+011.16E+021.85E-012.20E+002.28E+012.33E+02 + 36K 97.008.75E-028.83E-017.30E+005.79E+011.24E-011.30E+001.21E+011.12E+02 + 36K 114.005.42E-024.90E-013.66E+002.61E+017.98E-027.30E-016.04E+004.96E+01 + 36K 137.003.15E-022.50E-011.66E+001.05E+014.86E-023.83E-012.76E+001.98E+01 + 36K 165.001.82E-021.27E-017.42E-014.14E+002.97E-022.02E-011.26E+007.89E+00 + 36K 230.006.94E-033.81E-021.79E-018.01E-011.26E-026.66E-023.27E-011.60E+00 + 36K 315.002.87E-031.27E-024.84E-021.77E-015.73E-032.45E-029.65E-023.77E-01 + 36K 400.001.52E-035.70E-031.88E-025.97E-023.21E-031.18E-023.99E-021.33E-01 + 36K 510.008.21E-042.66E-037.63E-032.11E-021.82E-035.81E-031.70E-024.85E-02 + 36K 740.003.49E-049.28E-042.20E-035.02E-037.86E-042.08E-034.99E-031.16E-02 + 36K 1000.001.89E-044.39E-049.13E-041.83E-034.13E-049.60E-042.01E-034.05E-03 + 36K 1250.001.26E-042.67E-045.10E-049.38E-042.61E-045.58E-041.07E-031.97E-03 + 36K 1500.009.20E-051.83E-043.29E-045.69E-041.82E-043.65E-046.57E-041.13E-03 + 36L1 2.924.24E+011.68E+045.88E+065.49E+083.86E+025.80E+051.50E+081.33E+10 + 36L1 3.622.89E+014.35E+032.29E+063.15E+082.03E+022.08E+054.51E+074.64E+09 + 36L1 4.921.60E+014.15E+024.34E+057.63E+078.10E+014.90E+048.15E+068.43E+08 + 36L1 8.125.51E+008.26E+001.44E+043.41E+061.81E+014.84E+035.14E+054.27E+07 + 36L1 11.922.27E+002.17E+013.55E+021.81E+055.76E+008.58E+026.41E+044.11E+06 + 36L1 16.001.11E+001.59E+013.89E+011.15E+042.40E+002.34E+021.33E+046.82E+05 + 36L1 22.004.96E-018.23E+006.37E+013.63E+029.31E-015.92E+012.50E+039.86E+04 + 36L1 30.002.20E-013.63E+003.85E+012.66E+023.73E-011.60E+015.06E+021.53E+04 + 36L1 42.008.83E-021.33E+001.46E+011.35E+021.40E-014.01E+009.26E+012.08E+03 + 36L1 55.004.17E-025.56E-015.73E+005.30E+016.42E-021.36E+002.45E+014.34E+02 + 36L1 72.001.94E-022.24E-012.06E+001.75E+012.99E-024.76E-016.69E+009.32E+01 + 36L1 85.001.21E-021.26E-011.07E+008.41E+001.87E-022.53E-013.06E+003.68E+01 + 36L1 102.007.13E-036.67E-025.07E-013.64E+001.13E-021.28E-011.31E+001.34E+01 + 36L1 125.003.95E-033.24E-022.18E-011.39E+006.50E-036.06E-025.22E-014.48E+00 + 36L1 150.002.33E-031.69E-021.02E-015.82E-013.98E-033.16E-022.33E-011.71E+00 + 36L1 215.008.29E-044.69E-032.25E-021.03E-011.55E-039.14E-035.02E-022.75E-01 + 36L1 300.003.27E-041.47E-035.75E-032.15E-026.71E-043.08E-031.31E-025.56E-02 + 36L1 390.001.62E-046.17E-042.06E-036.59E-033.54E-041.36E-034.83E-031.70E-02 + 36L1 500.008.67E-052.84E-048.23E-042.30E-031.97E-046.52E-041.97E-035.88E-03 + 36L1 730.003.65E-059.74E-052.33E-045.39E-048.35E-052.27E-045.57E-041.33E-03 + 36L11000.001.92E-054.47E-059.35E-051.88E-044.25E-051.00E-042.12E-044.34E-04 + 36L2 2.738.13E+011.22E+061.31E+092.56E+114.23E+012.66E+043.96E+063.45E+08 + 36L2 3.434.17E+013.83E+053.35E+087.41E+102.09E+011.07E+041.81E+062.11E+08 + 36L2 4.731.58E+017.53E+044.86E+071.05E+107.71E+002.93E+034.87E+056.19E+07 + 36L2 7.933.07E+005.56E+032.16E+063.68E+081.55E+003.62E+024.74E+045.09E+06 + 36L2 11.738.41E-017.78E+022.05E+052.66E+074.59E-017.39E+017.43E+036.30E+05 + 36L2 16.002.93E-011.64E+023.15E+043.23E+061.74E-012.09E+011.66E+031.13E+05 + 36L2 22.009.69E-023.35E+014.65E+033.66E+056.46E-025.70E+003.50E+021.86E+04 + 36L2 30.003.23E-027.16E+007.25E+024.37E+042.45E-021.61E+007.62E+013.15E+03 + 36L2 42.009.62E-031.35E+009.73E+014.37E+038.57E-034.09E-011.45E+014.51E+02 + 36L2 55.003.60E-033.58E-011.96E+016.93E+023.69E-031.37E-013.83E+009.46E+01 + 36L2 72.001.34E-039.58E-024.02E+001.11E+021.59E-034.59E-021.02E+001.99E+01 + 36L2 85.007.28E-044.27E-021.52E+003.64E+019.46E-042.34E-024.50E-017.66E+00 + 36L2 102.003.72E-041.77E-025.28E-011.07E+015.35E-041.13E-021.85E-012.69E+00 + 36L2 125.001.77E-046.70E-031.64E-012.79E+002.84E-044.99E-036.88E-028.44E-01 + 36L2 150.009.10E-052.82E-035.82E-028.46E-011.61E-042.42E-032.86E-023.01E-01 + 36L2 215.002.51E-055.31E-047.86E-038.42E-025.31E-055.88E-045.18E-034.08E-02 + 36L2 300.007.84E-061.19E-041.31E-031.07E-021.92E-051.63E-041.11E-036.77E-03 + 36L2 390.003.22E-063.82E-053.38E-042.26E-038.69E-066.07E-053.41E-041.72E-03 + 36L2 500.001.43E-061.35E-059.83E-055.49E-044.14E-062.43E-051.15E-044.92E-04 + 36L2 730.004.48E-073.05E-061.67E-057.21E-051.37E-066.32E-062.37E-058.01E-05 + 36L21000.001.77E-079.62E-074.24E-061.52E-055.55E-072.16E-066.83E-061.94E-05 + 36L3 2.671.63E+022.44E+062.72E+095.46E+111.50E+016.63E+054.24E+092.82E+12 + 36L3 3.378.19E+017.50E+056.71E+081.52E+117.31E+002.08E+058.76E+084.71E+11 + 36L3 4.673.02E+011.43E+059.35E+072.05E+102.67E+004.09E+049.76E+073.88E+10 + 36L3 7.875.69E+001.02E+043.95E+066.73E+085.34E-013.04E+033.06E+067.47E+08 + 36L3 11.671.53E+001.38E+033.60E+054.67E+071.58E-014.28E+022.35E+053.95E+07 + 36L3 16.005.17E-012.80E+025.27E+045.35E+066.00E-028.94E+013.10E+043.87E+06 + 36L3 22.001.69E-015.58E+017.56E+035.88E+052.24E-021.85E+014.13E+033.81E+05 + 36L3 30.005.55E-021.16E+011.14E+036.76E+048.62E-034.00E+005.98E+024.12E+04 + 36L3 42.001.63E-022.11E+001.46E+026.42E+033.05E-037.68E-017.60E+013.82E+03 + 36L3 55.006.01E-035.41E-012.82E+019.69E+021.33E-032.07E-011.49E+015.84E+02 + 36L3 72.002.21E-031.39E-015.46E+001.47E+025.79E-045.66E-023.02E+009.21E+01 + 36L3 85.001.19E-036.04E-021.99E+004.59E+013.47E-042.56E-021.14E+002.99E+01 + 36L3 102.006.05E-042.42E-026.58E-011.28E+011.99E-041.08E-023.96E-018.84E+00 + 36L3 125.002.86E-048.78E-031.93E-013.12E+001.07E-044.16E-031.23E-012.31E+00 + 36L3 150.001.46E-043.56E-036.45E-028.83E-016.14E-051.79E-034.40E-027.03E-01 + 36L3 215.004.01E-056.15E-047.62E-037.52E-022.09E-053.47E-045.99E-037.10E-02 + 36L3 300.001.26E-051.27E-041.11E-038.09E-037.88E-067.97E-059.95E-049.09E-03 + 36L3 390.005.32E-063.86E-052.54E-041.47E-033.74E-062.60E-052.52E-041.89E-03 + 36L3 500.002.45E-061.31E-056.68E-053.13E-041.89E-069.39E-067.11E-054.48E-04 + 36L3 730.008.26E-072.86E-061.00E-053.43E-057.06E-072.19E-061.12E-055.45E-05 + 36L31000.003.64E-079.22E-072.41E-066.50E-063.31E-077.35E-072.66E-061.04E-05 + 36M1 1.292.84E+016.98E+041.14E+071.95E+097.37E+025.62E+067.13E+093.07E+12 + 36M1 2.291.16E+014.46E+032.33E+062.55E+081.32E+023.41E+051.97E+085.84E+10 + 36M1 4.293.50E+007.77E+011.08E+052.23E+072.00E+011.68E+044.44E+068.08E+08 + 36M1 8.298.45E-013.38E+001.37E+033.94E+052.79E+007.78E+029.75E+041.01E+07 + 36M1 15.291.98E-012.92E+008.61E+002.68E+034.49E-014.95E+013.25E+031.93E+05 + 36M1 25.005.68E-029.62E-019.10E+005.08E+011.04E-015.87E+002.34E+028.87E+03 + 36M1 40.001.62E-022.47E-012.72E+002.46E+012.64E-028.26E-012.08E+015.08E+02 + 36M1 52.007.84E-031.07E-011.11E+001.03E+011.23E-022.86E-015.58E+001.07E+02 + 36M1 70.003.39E-033.96E-023.66E-013.12E+005.29E-038.87E-021.31E+001.91E+01 + 36M1 103.001.12E-031.04E-027.82E-025.53E-011.80E-032.04E-022.12E-012.19E+00 + 36M1 150.003.78E-042.73E-031.64E-029.32E-026.52E-045.22E-033.89E-022.90E-01 + 36M1 280.006.44E-053.03E-041.23E-034.78E-031.30E-046.31E-042.85E-031.28E-02 + 36M1 500.001.42E-054.63E-051.34E-043.74E-043.22E-051.07E-043.25E-049.71E-04 + 36M2 1.225.81E+011.07E+074.31E+103.10E+137.58E+011.77E+059.70E+073.35E+10 + 36M2 2.221.50E+015.28E+059.74E+084.93E+111.23E+011.31E+045.07E+061.45E+09 + 36M2 4.222.74E+002.09E+041.80E+075.78E+091.72E+008.67E+022.14E+054.23E+07 + 36M2 8.223.78E-017.35E+023.02E+055.75E+072.22E-015.45E+017.97E+039.79E+05 + 36M2 15.225.19E-023.39E+017.19E+038.12E+053.32E-024.33E+003.79E+022.85E+04 + 36M2 25.009.59E-032.88E+003.62E+022.64E+047.12E-035.69E-013.23E+011.60E+03 + 36M2 40.001.83E-032.82E-012.17E+011.04E+031.65E-038.35E-023.14E+001.04E+02 + 36M2 52.007.11E-047.75E-024.56E+001.72E+027.28E-042.87E-028.55E-012.24E+01 + 36M2 70.002.42E-041.81E-027.91E-012.27E+012.88E-048.60E-031.97E-013.99E+00 + 36M2 103.005.93E-052.80E-038.36E-021.70E+008.66E-051.81E-032.96E-024.31E-01 + 36M2 150.001.50E-054.70E-049.74E-031.42E-012.69E-054.04E-044.80E-035.08E-02 + 36M3 1.211.16E+022.05E+078.29E+105.94E+132.58E+015.78E+061.78E+115.48E+14 + 36M3 2.212.90E+019.84E+051.81E+099.10E+114.11E+002.87E+052.84E+093.77E+12 + 36M3 4.215.13E+003.80E+043.25E+071.03E+105.73E-011.15E+043.57E+072.11E+10 + 36M3 8.216.88E-011.30E+035.27E+059.92E+077.42E-024.14E+024.16E+051.15E+08 + 36M3 15.219.21E-025.81E+011.20E+041.34E+061.12E-021.93E+017.54E+031.08E+06 + 36M3 25.001.66E-024.74E+005.77E+024.14E+042.45E-031.65E+003.23E+022.79E+04 + 36M3 40.003.10E-034.43E-013.27E+011.53E+035.79E-041.63E-011.76E+019.60E+02 + 36M3 52.001.19E-031.18E-016.59E+002.41E+022.59E-044.56E-023.59E+001.52E+02 + 36M3 70.003.98E-042.64E-021.08E+003.00E+011.04E-041.09E-026.08E-011.95E+01 + 36M3 103.009.60E-053.80E-031.03E-012.01E+003.17E-051.73E-036.35E-021.43E+00 + 36M3 150.002.41E-055.91E-041.07E-021.48E-011.02E-052.99E-047.45E-031.20E-01 + 36M4 1.091.08E+023.73E+053.14E+106.05E+144.05E+008.99E+041.42E+093.01E+12 + 36M4 2.091.04E+011.30E+043.15E+082.21E+124.49E-013.36E+031.91E+072.36E+10 + 36M4 4.097.77E-013.97E+022.69E+067.32E+094.34E-021.11E+022.42E+051.65E+08 + 36M4 8.094.69E-021.07E+012.11E+042.36E+073.74E-033.45E+003.04E+031.10E+06 + 36M4 15.093.15E-033.67E-012.52E+021.31E+053.69E-041.43E-015.82E+011.16E+04 + 36M4 25.003.28E-042.27E-027.02E+002.01E+035.41E-051.08E-022.42E+002.98E+02 + 36M4 40.003.78E-051.66E-032.54E-014.24E+018.73E-069.66E-041.28E-019.97E+00 + 36M4 52.001.12E-053.81E-044.02E-025.00E+003.12E-062.52E-042.49E-021.51E+00 + 36M4 70.002.79E-067.22E-055.04E-034.50E-019.63E-075.49E-053.94E-031.80E-01 + 36M4 103.004.60E-078.44E-063.50E-042.04E-022.08E-077.64E-063.65E-041.17E-02 + 36M4 150.008.39E-081.07E-062.71E-051.05E-034.64E-081.13E-063.68E-058.37E-04 + 36M5 1.091.59E+025.23E+054.72E+108.81E+142.58E+001.22E+046.32E+095.16E+14 + 36M5 2.091.51E+011.82E+044.72E+083.20E+122.94E-014.75E+026.64E+071.57E+12 + 36M5 4.091.12E+005.52E+024.01E+061.05E+102.95E-021.68E+016.08E+054.24E+09 + 36M5 8.096.73E-021.48E+013.12E+043.34E+072.66E-035.66E-015.20E+031.14E+07 + 36M5 15.094.48E-034.98E-013.66E+021.81E+052.75E-042.58E-026.78E+015.64E+04 + 36M5 25.004.63E-043.04E-021.00E+012.70E+034.19E-052.12E-032.04E+008.33E+02 + 36M5 40.005.31E-052.16E-033.52E-015.48E+017.02E-062.07E-048.02E-021.77E+01 + 36M5 52.001.57E-054.91E-045.46E-026.27E+002.57E-065.68E-051.33E-022.12E+00 + 36M5 70.003.91E-069.12E-056.64E-035.41E-018.19E-071.32E-051.77E-031.98E-01 + 36M5 103.006.47E-071.04E-054.37E-042.28E-021.85E-072.01E-061.33E-049.46E-03 + 36M5 150.001.20E-071.27E-063.18E-051.07E-034.40E-083.29E-071.11E-055.18E-04 + 37K 16.201.45E+011.17E+022.57E+023.66E+022.50E+011.34E+031.23E+043.57E+04 + 37K 16.901.30E+011.23E+024.42E+021.22E+032.20E+011.14E+031.22E+045.76E+04 + 37K 18.201.07E+011.23E+027.11E+023.51E+031.77E+018.52E+021.10E+048.30E+04 + 37K 21.406.92E+001.01E+029.34E+027.96E+031.09E+014.53E+027.21E+038.63E+04 + 37K 25.204.44E+007.13E+018.07E+028.60E+036.74E+002.39E+024.12E+035.93E+04 + 37K 29.003.02E+004.98E+016.07E+027.04E+034.45E+001.39E+022.41E+033.69E+04 + 37K 35.001.78E+002.90E+013.62E+024.33E+032.56E+006.68E+011.12E+031.73E+04 + 37K 43.009.95E-011.53E+011.84E+022.14E+031.40E+003.03E+014.68E+026.85E+03 + 37K 55.004.90E-016.76E+007.47E+017.93E+026.90E-011.19E+011.61E+022.10E+03 + 37K 68.002.64E-013.25E+003.24E+013.11E+023.76E-015.36E+006.34E+017.34E+02 + 37K 85.001.37E-011.48E+001.30E+011.10E+022.01E-012.35E+002.39E+012.39E+02 + 37K 98.009.01E-028.87E-017.16E+005.54E+011.35E-011.40E+001.28E+011.16E+02 + 37K 115.005.62E-024.97E-013.63E+002.53E+018.73E-027.91E-016.44E+005.20E+01 + 37K 138.003.28E-022.56E-011.66E+001.03E+015.33E-024.16E-012.96E+002.09E+01 + 37K 165.001.94E-021.34E-017.72E-014.26E+003.32E-022.25E-011.40E+008.67E+00 + 37K 230.007.42E-034.04E-021.88E-018.32E-011.40E-027.41E-023.62E-011.76E+00 + 37K 315.003.08E-031.35E-025.12E-021.86E-016.37E-032.72E-021.07E-014.16E-01 + 37K 410.001.53E-035.62E-031.82E-025.65E-023.36E-031.22E-024.04E-021.32E-01 + 37K 520.008.44E-042.69E-037.60E-032.07E-021.92E-036.09E-031.75E-024.95E-02 + 37K 750.003.67E-049.64E-042.27E-035.13E-038.41E-042.22E-035.28E-031.22E-02 + 37K 1000.002.05E-044.74E-049.86E-041.97E-034.53E-041.06E-032.21E-034.47E-03 + 37K 1250.001.36E-042.89E-045.52E-041.02E-032.86E-046.14E-041.18E-032.17E-03 + 37K 1500.009.93E-051.98E-043.57E-046.17E-041.99E-044.01E-047.23E-041.25E-03 + 37L1 3.073.87E+011.52E+044.86E+064.08E+083.81E+025.47E+051.34E+081.10E+10 + 37L1 3.772.69E+014.21E+032.01E+062.52E+082.06E+022.05E+054.26E+074.10E+09 + 37L1 5.071.52E+014.63E+024.14E+056.72E+078.48E+015.06E+048.16E+068.00E+08 + 37L1 8.275.40E+005.02E+001.61E+043.45E+061.96E+015.25E+035.47E+054.38E+07 + 37L1 12.072.27E+001.82E+015.21E+022.06E+056.33E+009.51E+027.00E+044.38E+06 + 37L1 16.001.15E+001.47E+012.98E+011.66E+042.73E+002.73E+021.55E+047.82E+05 + 37L1 22.005.17E-017.94E+005.09E+015.21E+021.06E+006.87E+012.89E+031.13E+05 + 37L1 30.002.30E-013.60E+003.48E+012.06E+024.25E-011.85E+015.82E+021.75E+04 + 37L1 42.009.29E-021.34E+001.40E+011.19E+021.59E-014.61E+001.06E+022.38E+03 + 37L1 55.004.40E-025.70E-015.64E+004.97E+017.29E-021.56E+002.80E+014.94E+02 + 37L1 72.002.06E-022.32E-012.07E+001.70E+013.39E-025.44E-017.63E+001.06E+02 + 37L1 85.001.28E-021.31E-011.08E+008.29E+002.12E-022.88E-013.48E+004.17E+01 + 37L1 102.007.60E-036.97E-025.19E-013.64E+001.28E-021.45E-011.49E+001.52E+01 + 37L1 125.004.22E-033.40E-022.25E-011.41E+007.34E-036.87E-025.91E-015.07E+00 + 37L1 150.002.49E-031.78E-021.06E-015.95E-014.49E-033.57E-022.63E-011.93E+00 + 37L1 215.008.91E-044.98E-032.36E-021.07E-011.75E-031.03E-025.65E-023.09E-01 + 37L1 300.003.53E-041.58E-036.10E-032.26E-027.52E-043.46E-031.47E-026.23E-02 + 37L1 390.001.76E-046.63E-042.20E-037.00E-033.96E-041.53E-035.42E-031.90E-02 + 37L1 500.009.41E-053.06E-048.84E-042.46E-032.19E-047.29E-042.21E-036.57E-03 + 37L1 730.003.96E-051.06E-042.53E-045.83E-049.29E-052.53E-046.21E-041.48E-03 + 37L11000.002.09E-054.87E-051.02E-042.05E-044.70E-051.11E-042.36E-044.84E-04 + 37L2 2.867.49E+011.09E+061.11E+092.00E+114.18E+012.49E+043.42E+062.69E+08 + 37L2 3.563.96E+013.59E+053.01E+086.22E+102.13E+011.04E+041.64E+061.76E+08 + 37L2 4.861.55E+017.46E+044.67E+079.59E+098.13E+002.99E+034.70E+055.60E+07 + 37L2 8.063.15E+005.84E+032.23E+063.66E+081.69E+003.88E+024.89E+045.05E+06 + 37L2 11.868.86E-018.40E+022.18E+052.77E+075.11E-018.09E+017.93E+036.54E+05 + 37L2 16.003.23E-011.88E+023.61E+043.65E+062.02E-012.40E+011.88E+031.26E+05 + 37L2 22.001.07E-013.84E+015.34E+034.17E+057.48E-026.57E+003.99E+022.10E+04 + 37L2 30.003.60E-028.21E+008.33E+024.99E+042.84E-021.86E+008.72E+013.57E+03 + 37L2 42.001.08E-021.55E+001.12E+025.00E+039.95E-034.73E-011.66E+015.14E+02 + 37L2 55.004.05E-034.12E-012.27E+017.96E+024.29E-031.58E-014.41E+001.08E+02 + 37L2 72.001.51E-031.10E-014.64E+001.28E+021.85E-035.33E-021.17E+002.29E+01 + 37L2 85.008.25E-044.94E-021.76E+004.20E+011.10E-032.73E-025.21E-018.81E+00 + 37L2 102.004.23E-042.05E-026.12E-011.24E+016.25E-041.31E-022.14E-013.10E+00 + 37L2 125.002.02E-047.75E-031.90E-013.23E+003.32E-045.82E-037.99E-029.76E-01 + 37L2 150.001.04E-043.27E-036.77E-029.81E-011.89E-042.82E-033.32E-023.49E-01 + 37L2 215.002.87E-056.17E-049.17E-039.80E-026.23E-056.88E-046.05E-034.75E-02 + 37L2 300.008.99E-061.38E-041.53E-031.25E-022.26E-051.91E-041.30E-037.91E-03 + 37L2 390.003.70E-064.45E-053.96E-042.65E-031.02E-057.14E-054.00E-042.02E-03 + 37L2 500.001.64E-061.58E-051.15E-046.43E-044.88E-062.86E-051.36E-045.77E-04 + 37L2 730.005.06E-073.57E-061.96E-058.48E-051.61E-067.46E-062.80E-059.43E-05 + 37L21000.002.04E-071.13E-064.99E-061.79E-056.55E-072.55E-068.06E-062.29E-05 + 37L3 2.801.50E+022.19E+062.32E+094.31E+111.47E+016.30E+053.86E+092.45E+12 + 37L3 3.507.79E+017.05E+056.07E+081.28E+117.38E+002.07E+058.52E+084.41E+11 + 37L3 4.802.97E+011.42E+059.01E+071.88E+102.79E+004.29E+041.02E+083.93E+10 + 37L3 8.005.84E+001.07E+044.07E+066.71E+085.76E-013.37E+033.41E+068.19E+08 + 37L3 11.801.60E+001.49E+033.83E+054.85E+071.74E-014.87E+022.70E+054.48E+07 + 37L3 16.005.67E-013.19E+026.01E+046.02E+066.81E-021.07E+023.81E+044.75E+06 + 37L3 22.001.86E-016.36E+018.63E+036.65E+052.55E-022.22E+015.06E+034.66E+05 + 37L3 30.006.15E-021.32E+011.30E+037.67E+049.80E-034.79E+007.29E+025.01E+04 + 37L3 42.001.81E-022.41E+001.67E+027.30E+033.47E-039.20E-019.22E+014.63E+03 + 37L3 55.006.72E-036.19E-013.22E+011.11E+031.51E-032.47E-011.81E+017.06E+02 + 37L3 72.002.48E-031.59E-016.25E+001.68E+026.60E-046.75E-023.64E+001.11E+02 + 37L3 85.001.34E-036.91E-022.28E+005.25E+013.96E-043.05E-021.37E+003.60E+01 + 37L3 102.006.82E-042.77E-027.55E-011.47E+012.27E-041.28E-024.75E-011.06E+01 + 37L3 125.003.22E-041.01E-022.21E-013.58E+001.22E-044.93E-031.48E-012.76E+00 + 37L3 150.001.66E-044.08E-037.41E-021.01E+007.01E-052.11E-035.26E-028.41E-01 + 37L3 215.004.57E-057.07E-048.77E-038.64E-022.39E-054.09E-047.13E-038.46E-02 + 37L3 300.001.44E-051.46E-041.28E-039.32E-039.01E-069.36E-051.18E-031.08E-02 + 37L3 390.006.05E-064.44E-052.93E-041.70E-034.28E-063.05E-052.98E-042.25E-03 + 37L3 500.002.77E-061.51E-057.70E-053.60E-042.16E-061.10E-058.40E-055.31E-04 + 37L3 730.009.29E-073.29E-061.15E-053.95E-058.07E-072.55E-061.32E-056.44E-05 + 37L31000.004.13E-071.06E-062.78E-067.51E-063.78E-078.49E-073.11E-061.22E-05 + 37M1 1.322.72E+016.91E+049.59E+062.40E+097.89E+026.02E+067.60E+093.17E+12 + 37M1 2.321.14E+014.84E+032.26E+062.10E+081.46E+023.86E+052.23E+086.48E+10 + 37M1 4.323.53E+001.02E+021.17E+052.24E+072.27E+011.95E+045.19E+069.31E+08 + 37M1 8.328.69E-012.45E+001.75E+034.47E+053.19E+009.14E+021.15E+051.18E+07 + 37M1 15.322.07E-012.73E+007.78E+003.71E+035.17E-015.82E+013.82E+032.26E+05 + 37M1 25.006.02E-029.57E-017.96E+004.77E+011.21E-016.92E+002.77E+021.04E+04 + 37M1 40.001.73E-022.53E-012.63E+002.19E+013.04E-029.66E-012.43E+015.94E+02 + 37M1 52.008.41E-031.11E-011.11E+009.72E+001.42E-023.33E-016.51E+001.25E+02 + 37M1 70.003.65E-034.16E-023.72E-013.06E+006.10E-031.03E-011.52E+002.22E+01 + 37M1 103.001.21E-031.10E-028.10E-025.61E-012.07E-032.36E-022.44E-012.52E+00 + 37M1 150.004.11E-042.92E-031.72E-029.67E-027.47E-046.01E-034.47E-023.33E-01 + 37M1 280.007.03E-053.28E-041.32E-035.10E-031.48E-047.21E-043.25E-031.46E-02 + 37M1 500.001.56E-055.07E-051.46E-044.07E-043.64E-051.21E-043.69E-041.10E-03 + 37M2 1.255.75E+011.13E+074.55E+103.19E+138.35E+011.95E+051.04E+083.42E+10 + 37M2 2.251.54E+015.83E+051.08E+095.36E+111.39E+011.49E+045.65E+061.56E+09 + 37M2 4.252.91E+002.37E+042.04E+076.48E+091.99E+001.00E+032.43E+054.70E+07 + 37M2 8.254.12E-018.46E+023.48E+056.56E+072.59E-016.34E+019.16E+031.11E+06 + 37M2 15.255.77E-023.93E+018.36E+039.37E+053.89E-025.07E+004.39E+023.27E+04 + 37M2 25.001.08E-023.37E+004.25E+023.08E+048.42E-036.71E-013.79E+011.86E+03 + 37M2 40.002.08E-033.31E-012.56E+011.22E+031.95E-039.88E-023.69E+001.21E+02 + 37M2 52.008.15E-049.12E-025.38E+002.02E+028.64E-043.40E-021.01E+002.63E+01 + 37M2 70.002.79E-042.14E-029.35E-012.68E+013.43E-041.02E-022.33E-014.69E+00 + 37M2 103.006.87E-053.31E-039.90E-022.01E+001.03E-042.16E-033.51E-025.09E-01 + 37M2 150.001.75E-055.57E-041.16E-021.69E-013.22E-054.83E-045.71E-036.03E-02 + 37M3 1.241.15E+022.15E+078.72E+106.07E+132.80E+016.43E+062.00E+116.23E+14 + 37M3 2.242.98E+011.08E+062.00E+099.83E+114.60E+003.34E+053.40E+094.57E+12 + 37M3 4.245.44E+004.29E+043.68E+071.15E+106.52E-011.38E+044.41E+072.63E+10 + 37M3 8.247.48E-011.49E+036.06E+051.13E+088.52E-025.01E+025.19E+051.44E+08 + 37M3 15.241.02E-016.70E+011.39E+041.54E+061.30E-022.35E+019.42E+031.35E+06 + 37M3 25.001.87E-025.53E+006.75E+024.80E+042.85E-032.02E+004.05E+023.51E+04 + 37M3 40.003.51E-035.17E-013.82E+011.78E+036.73E-042.00E-012.19E+011.20E+03 + 37M3 52.001.35E-031.38E-017.72E+002.82E+023.01E-045.57E-024.45E+001.89E+02 + 37M3 70.004.56E-043.09E-021.26E+003.50E+011.21E-041.32E-027.51E-012.41E+01 + 37M3 103.001.11E-044.46E-031.21E-012.35E+003.71E-052.10E-037.80E-021.76E+00 + 37M3 150.002.80E-056.93E-041.26E-021.73E-011.19E-053.62E-049.12E-031.47E-01 + 37M4 1.111.16E+024.05E+053.48E+106.76E+144.62E+001.04E+051.66E+093.43E+12 + 37M4 2.111.17E+011.49E+043.74E+082.68E+125.32E-014.10E+032.37E+072.88E+10 + 37M4 4.119.09E-014.71E+023.33E+069.21E+095.28E-021.40E+023.08E+052.08E+08 + 37M4 8.115.64E-021.30E+012.66E+043.03E+074.63E-034.40E+003.93E+031.42E+06 + 37M4 15.113.87E-034.53E-013.21E+021.69E+054.63E-041.84E-017.58E+011.51E+04 + 37M4 25.004.09E-042.85E-029.07E+002.63E+036.86E-051.40E-023.18E+003.90E+02 + 37M4 40.004.78E-052.09E-033.29E-015.56E+011.11E-051.26E-031.68E-011.31E+01 + 37M4 52.001.42E-054.84E-045.21E-026.55E+003.99E-063.28E-043.27E-021.99E+00 + 37M4 70.003.59E-069.21E-056.54E-035.90E-011.24E-067.17E-055.18E-032.37E-01 + 37M4 103.005.89E-071.08E-054.54E-042.68E-022.67E-079.99E-064.80E-041.54E-02 + 37M4 150.001.04E-071.38E-063.52E-051.38E-035.99E-081.48E-064.85E-051.10E-03 + 37M5 1.111.71E+025.70E+055.28E+109.94E+142.95E+001.41E+047.49E+096.21E+14 + 37M5 2.111.71E+012.08E+045.64E+083.89E+123.47E-015.75E+028.39E+072.05E+12 + 37M5 4.111.31E+006.52E+024.98E+061.32E+103.57E-022.08E+017.96E+055.75E+09 + 37M5 8.118.08E-021.78E+013.95E+044.28E+073.27E-037.10E-016.93E+031.57E+07 + 37M5 15.115.49E-036.13E-014.68E+022.34E+053.43E-043.26E-029.09E+017.77E+04 + 37M5 25.005.76E-043.79E-021.29E+013.54E+035.27E-052.70E-032.76E+001.15E+03 + 37M5 40.006.68E-052.72E-034.56E-017.17E+018.90E-062.65E-041.08E-012.43E+01 + 37M5 52.001.99E-056.20E-047.07E-028.19E+003.26E-067.26E-051.79E-022.91E+00 + 37M5 70.005.01E-061.16E-048.61E-037.07E-011.04E-061.69E-052.38E-032.70E-01 + 37M5 103.008.38E-071.32E-055.68E-042.98E-022.37E-072.58E-061.77E-041.28E-02 + 37M5 150.001.55E-071.63E-064.13E-051.40E-035.64E-084.24E-071.48E-057.00E-04 + 37N+ 50.001.58E-034.80E-022.05E+007.50E+012.48E-037.26E-022.13E+006.35E+01 + 37N+ 70.005.96E-041.16E-022.99E-017.51E+009.42E-041.84E-023.60E-017.29E+00 + 37N+ 100.002.10E-042.72E-034.23E-026.97E-013.46E-044.53E-035.95E-028.13E-01 + 37N+ 150.006.39E-055.56E-045.17E-035.25E-021.14E-049.92E-048.57E-037.68E-02 + 37N+ 200.002.77E-051.87E-041.27E-039.27E-035.31E-053.56E-042.34E-031.58E-02 + 37N+ 500.002.34E-067.94E-062.49E-057.85E-055.44E-061.86E-055.89E-051.87E-04 + 38K 17.101.30E+019.87E+011.97E+022.50E+022.39E+011.22E+031.05E+042.77E+04 + 38K 17.801.17E+011.04E+023.38E+028.35E+022.13E+011.04E+031.04E+044.47E+04 + 38K 19.109.71E+001.04E+025.47E+022.44E+031.72E+017.89E+029.47E+036.53E+04 + 38K 22.306.43E+008.71E+017.42E+025.78E+031.09E+014.31E+026.41E+037.07E+04 + 38K 26.104.20E+006.32E+016.64E+026.55E+036.84E+002.34E+023.79E+035.07E+04 + 38K 30.002.87E+004.46E+015.09E+025.53E+034.54E+001.36E+022.24E+033.23E+04 + 38K 36.001.72E+002.66E+013.14E+023.55E+032.65E+006.72E+011.08E+031.57E+04 + 38K 44.009.77E-011.43E+011.65E+021.82E+031.48E+003.11E+014.62E+026.46E+03 + 38K 56.004.89E-016.50E+006.91E+017.06E+027.36E-011.24E+011.63E+022.06E+03 + 38K 69.002.67E-013.19E+003.07E+012.85E+024.05E-015.68E+006.54E+017.36E+02 + 38K 86.001.40E-011.47E+001.26E+011.03E+022.18E-012.52E+002.50E+012.44E+02 + 38K 99.009.26E-028.89E-017.00E+005.28E+011.47E-011.51E+001.36E+011.21E+02 + 38K 116.005.81E-025.03E-013.59E+002.45E+019.53E-028.55E-016.85E+005.44E+01 + 38K 139.003.41E-022.61E-011.66E+001.01E+015.84E-024.52E-013.17E+002.21E+01 + 38K 165.002.06E-021.40E-018.01E-014.36E+003.70E-022.50E-011.55E+009.51E+00 + 38K 230.007.92E-034.27E-021.96E-018.62E-011.56E-028.22E-024.00E-011.93E+00 + 38K 315.003.29E-031.43E-025.39E-021.95E-017.06E-033.01E-021.18E-014.57E-01 + 38K 410.001.64E-035.99E-031.93E-025.96E-023.72E-031.35E-024.45E-021.45E-01 + 38K 520.009.06E-042.88E-038.09E-032.19E-022.12E-036.73E-031.93E-025.44E-02 + 38K 750.003.94E-041.04E-032.43E-035.49E-039.26E-042.45E-035.82E-031.34E-02 + 38K 1000.002.21E-045.11E-041.06E-032.12E-034.97E-041.17E-032.44E-034.91E-03 + 38K 1250.001.46E-043.11E-045.97E-041.10E-033.13E-046.75E-041.30E-032.39E-03 + 38K 1500.001.07E-042.14E-043.86E-046.68E-042.17E-044.40E-047.95E-041.37E-03 + 38L1 3.223.53E+011.36E+044.00E+063.03E+083.75E+025.15E+051.20E+089.15E+09 + 38L1 3.922.49E+014.05E+031.76E+062.01E+082.08E+022.01E+054.01E+073.60E+09 + 38L1 5.221.44E+015.04E+023.92E+055.87E+078.82E+015.20E+048.11E+067.53E+08 + 38L1 8.425.29E+003.36E+001.76E+043.43E+062.11E+015.66E+035.77E+054.47E+07 + 38L1 12.222.26E+001.50E+017.12E+022.28E+056.94E+001.05E+037.60E+044.64E+06 + 38L1 16.001.19E+001.33E+013.44E+012.27E+043.10E+003.17E+021.79E+048.94E+05 + 38L1 22.005.37E-017.61E+003.96E+018.25E+021.21E+007.94E+013.33E+031.29E+05 + 38L1 30.002.40E-013.56E+003.10E+011.62E+024.82E-012.13E+016.69E+022.00E+04 + 38L1 42.009.76E-021.35E+001.33E+011.04E+021.80E-015.29E+001.22E+022.71E+03 + 38L1 55.004.64E-025.82E-015.52E+004.61E+018.26E-021.78E+003.19E+015.61E+02 + 38L1 72.002.18E-022.40E-012.07E+001.64E+013.83E-026.19E-018.67E+001.20E+02 + 38L1 85.001.36E-021.36E-011.09E+008.13E+002.40E-023.27E-013.94E+004.72E+01 + 38L1 102.008.08E-037.26E-025.29E-013.62E+001.44E-021.64E-011.69E+001.72E+01 + 38L1 125.004.51E-033.56E-022.32E-011.42E+008.27E-037.77E-026.67E-015.71E+00 + 38L1 150.002.67E-031.87E-021.09E-016.06E-015.06E-034.03E-022.96E-012.17E+00 + 38L1 215.009.56E-045.28E-032.48E-021.11E-011.96E-031.16E-026.35E-023.47E-01 + 38L1 300.003.80E-041.68E-036.45E-032.37E-028.41E-043.88E-031.65E-026.98E-02 + 38L1 390.001.89E-047.11E-042.34E-037.41E-034.42E-041.71E-036.06E-032.12E-02 + 38L1 500.001.02E-043.30E-049.47E-042.63E-032.44E-048.14E-042.47E-037.33E-03 + 38L1 730.004.29E-051.14E-042.73E-046.29E-041.03E-042.82E-046.92E-041.65E-03 + 38L11000.002.27E-055.29E-051.11E-042.23E-045.20E-051.24E-042.63E-045.38E-04 + 38L2 3.016.89E+019.67E+059.41E+081.57E+114.12E+012.33E+042.95E+062.09E+08 + 38L2 3.713.75E+013.36E+052.70E+085.20E+102.16E+011.01E+041.49E+061.46E+08 + 38L2 5.011.52E+017.35E+044.45E+078.67E+098.53E+003.03E+034.51E+055.04E+07 + 38L2 8.213.22E+006.09E+032.28E+063.62E+081.85E+004.12E+025.02E+044.97E+06 + 38L2 12.019.29E-019.02E+022.32E+052.87E+075.67E-018.83E+018.42E+036.75E+05 + 38L2 16.003.54E-012.15E+024.13E+044.12E+062.32E-012.75E+012.13E+031.40E+05 + 38L2 22.001.18E-014.39E+016.11E+034.72E+058.63E-027.55E+004.53E+022.35E+04 + 38L2 30.003.99E-029.40E+009.55E+025.68E+043.29E-022.14E+009.94E+014.02E+03 + 38L2 42.001.20E-021.78E+001.29E+025.71E+031.15E-025.46E-011.90E+015.83E+02 + 38L2 55.004.54E-034.73E-012.61E+019.11E+024.97E-031.83E-015.06E+001.23E+02 + 38L2 72.001.71E-031.27E-015.35E+001.47E+022.15E-036.16E-021.35E+002.62E+01 + 38L2 85.009.32E-045.68E-022.03E+004.83E+011.28E-033.16E-026.00E-011.01E+01 + 38L2 102.004.79E-042.36E-027.06E-011.43E+017.28E-041.52E-022.47E-013.56E+00 + 38L2 125.002.29E-048.95E-032.20E-013.73E+003.87E-046.76E-039.24E-021.12E+00 + 38L2 150.001.18E-043.78E-037.84E-021.13E+002.20E-043.28E-033.85E-024.03E-01 + 38L2 215.003.28E-057.15E-041.06E-021.14E-017.29E-058.03E-047.03E-035.50E-02 + 38L2 300.001.03E-051.61E-041.79E-031.46E-022.64E-052.24E-041.51E-039.19E-03 + 38L2 390.004.26E-065.18E-054.62E-043.08E-031.20E-058.36E-054.68E-042.35E-03 + 38L2 500.001.90E-061.84E-051.35E-047.51E-045.73E-063.36E-051.59E-046.74E-04 + 38L2 730.005.91E-074.16E-062.29E-059.92E-051.89E-068.78E-063.28E-051.10E-04 + 38L21000.002.39E-071.32E-065.85E-062.10E-057.71E-073.00E-069.48E-062.69E-05 + 38L3 2.941.39E+021.95E+061.98E+093.40E+111.43E+015.96E+053.51E+092.12E+12 + 38L3 3.647.38E+016.60E+055.46E+081.08E+117.43E+002.05E+058.22E+084.10E+11 + 38L3 4.942.91E+011.40E+058.62E+071.70E+102.89E+004.47E+041.05E+083.94E+10 + 38L3 8.145.96E+001.11E+044.17E+066.64E+086.19E-013.71E+033.78E+068.90E+08 + 38L3 11.941.68E+001.59E+034.06E+055.01E+071.90E-015.50E+023.08E+055.06E+07 + 38L3 16.006.20E-013.62E+026.83E+046.76E+067.71E-021.28E+024.67E+045.81E+06 + 38L3 22.002.04E-017.22E+019.81E+037.49E+052.89E-022.65E+016.17E+035.67E+05 + 38L3 30.006.78E-021.50E+011.48E+038.66E+041.11E-025.72E+008.85E+026.08E+04 + 38L3 42.002.01E-022.75E+001.90E+028.27E+033.94E-031.10E+001.11E+025.59E+03 + 38L3 55.007.48E-037.05E-013.68E+011.25E+031.72E-032.94E-012.18E+018.49E+02 + 38L3 72.002.77E-031.81E-017.14E+001.91E+027.50E-048.01E-024.36E+001.33E+02 + 38L3 85.001.50E-037.88E-022.61E+005.98E+014.50E-043.62E-021.64E+004.31E+01 + 38L3 102.007.66E-043.16E-028.64E-011.68E+012.58E-041.52E-025.68E-011.27E+01 + 38L3 125.003.62E-041.15E-022.53E-014.08E+001.39E-045.83E-031.76E-013.30E+00 + 38L3 150.001.86E-044.67E-038.49E-021.16E+007.99E-052.49E-036.27E-021.00E+00 + 38L3 215.005.13E-058.09E-041.01E-029.89E-022.72E-054.81E-048.46E-031.00E-01 + 38L3 300.001.62E-051.67E-041.46E-031.07E-021.03E-051.10E-041.40E-031.28E-02 + 38L3 390.006.87E-065.08E-053.37E-041.95E-034.87E-063.55E-053.52E-042.66E-03 + 38L3 500.003.17E-061.73E-058.85E-054.14E-042.46E-061.27E-059.89E-056.26E-04 + 38L3 730.001.06E-063.77E-061.32E-054.54E-059.19E-072.94E-061.55E-057.59E-05 + 38L31000.004.67E-071.21E-063.19E-068.63E-064.30E-079.77E-073.63E-061.43E-05 + 38M1 1.362.61E+016.81E+048.08E+062.78E+098.41E+026.41E+068.05E+093.25E+12 + 38M1 2.361.12E+015.20E+032.19E+061.72E+081.61E+024.33E+052.51E+087.15E+10 + 38M1 4.363.56E+001.30E+021.26E+052.23E+072.55E+012.26E+046.02E+061.07E+09 + 38M1 8.368.92E-011.74E+002.17E+035.01E+053.64E+001.07E+031.35E+051.37E+07 + 38M1 15.362.16E-012.53E+009.30E+004.94E+035.92E-016.81E+014.48E+032.64E+05 + 38M1 25.006.36E-029.47E-016.87E+005.43E+011.39E-018.13E+003.25E+021.23E+04 + 38M1 40.001.84E-022.58E-012.52E+001.94E+013.51E-021.13E+002.84E+016.92E+02 + 38M1 52.008.98E-031.14E-011.09E+009.09E+001.64E-023.87E-017.57E+001.45E+02 + 38M1 70.003.92E-034.34E-023.76E-012.99E+007.01E-031.19E-011.76E+002.57E+01 + 38M1 103.001.31E-031.17E-028.37E-025.67E-012.37E-032.72E-022.82E-012.90E+00 + 38M1 150.004.46E-043.12E-031.81E-021.00E-018.54E-046.89E-035.13E-023.81E-01 + 38M1 280.007.68E-053.55E-041.42E-035.42E-031.69E-048.22E-043.70E-031.66E-02 + 38M1 500.001.71E-055.53E-051.59E-044.41E-044.12E-051.38E-044.19E-041.25E-03 + 38M2 1.285.59E+011.15E+074.60E+103.12E+139.00E+012.08E+051.07E+083.32E+10 + 38M2 2.281.57E+016.30E+051.17E+095.64E+111.56E+011.66E+046.13E+061.63E+09 + 38M2 4.283.05E+002.65E+042.29E+077.13E+092.27E+001.14E+032.71E+055.12E+07 + 38M2 8.284.46E-019.65E+023.98E+057.40E+073.00E-017.32E+011.04E+041.24E+06 + 38M2 15.286.37E-024.53E+019.65E+031.07E+064.54E-025.90E+005.06E+023.72E+04 + 38M2 25.001.22E-023.93E+004.97E+023.59E+049.92E-037.88E-014.42E+012.16E+03 + 38M2 40.002.37E-033.87E-013.00E+011.42E+032.31E-031.16E-014.32E+001.41E+02 + 38M2 52.009.31E-041.07E-016.32E+002.36E+021.02E-034.01E-021.18E+003.07E+01 + 38M2 70.003.20E-042.51E-021.10E+003.14E+014.06E-041.20E-022.73E-015.49E+00 + 38M2 103.007.91E-053.89E-031.16E-012.36E+001.23E-042.55E-034.14E-025.97E-01 + 38M2 150.002.04E-056.56E-041.37E-021.99E-013.83E-055.73E-046.76E-037.11E-02 + 38M2 280.002.25E-063.80E-054.49E-043.89E-035.68E-065.08E-053.64E-042.33E-03 + 38M2 500.003.26E-073.22E-062.36E-051.32E-041.00E-065.88E-062.78E-051.18E-04 + 38M3 1.271.13E+022.20E+078.85E+105.96E+132.99E+016.96E+062.18E+116.76E+14 + 38M3 2.273.03E+011.17E+062.16E+091.04E+125.08E+003.82E+053.97E+095.38E+12 + 38M3 4.275.71E+004.79E+044.11E+071.27E+107.36E-011.63E+045.36E+073.22E+10 + 38M3 8.278.07E-011.70E+036.89E+051.27E+089.72E-026.02E+026.42E+051.79E+08 + 38M3 15.271.12E-017.69E+011.60E+041.75E+061.49E-022.84E+011.17E+041.68E+06 + 38M3 25.002.09E-026.41E+007.85E+025.56E+043.29E-032.47E+005.05E+024.38E+04 + 38M3 40.003.96E-036.00E-014.45E+012.06E+037.79E-042.44E-012.71E+011.48E+03 + 38M3 52.001.54E-031.60E-018.99E+003.27E+023.48E-046.78E-025.49E+002.33E+02 + 38M3 70.005.19E-043.60E-021.47E+004.07E+011.40E-041.61E-029.23E-012.96E+01 + 38M3 103.001.26E-045.20E-031.42E-012.74E+004.32E-052.54E-039.54E-022.15E+00 + 38M3 150.003.20E-058.09E-041.48E-022.02E-011.38E-054.37E-041.11E-021.80E-01 + 38M4 1.131.23E+024.37E+053.81E+107.47E+145.22E+001.20E+051.92E+093.88E+12 + 38M4 2.131.31E+011.69E+044.40E+083.20E+126.24E-014.95E+032.90E+073.49E+10 + 38M4 4.131.05E+005.52E+024.07E+061.15E+106.35E-021.74E+023.89E+052.61E+08 + 38M4 8.136.72E-021.56E+013.33E+043.84E+075.67E-035.56E+005.03E+031.81E+06 + 38M4 15.134.69E-035.54E-014.06E+022.17E+055.75E-042.34E-019.76E+011.94E+04 + 38M4 25.005.04E-043.54E-021.16E+013.41E+038.61E-051.80E-024.13E+005.07E+02 + 38M4 40.005.92E-052.62E-034.21E-017.21E+011.40E-051.62E-032.18E-011.70E+01 + 38M4 52.001.77E-056.08E-046.68E-028.49E+005.05E-064.23E-044.25E-022.58E+00 + 38M4 70.004.46E-061.16E-048.39E-037.65E-011.57E-069.26E-056.74E-033.09E-01 + 38M4 103.007.34E-071.37E-055.83E-043.47E-023.41E-071.29E-056.25E-042.00E-02 + 38M4 150.001.30E-071.76E-064.53E-051.79E-037.66E-081.92E-066.33E-051.44E-03 + 38M5 1.131.81E+026.13E+055.81E+101.10E+153.32E+001.61E+048.72E+097.32E+14 + 38M5 2.131.91E+012.36E+046.65E+084.66E+124.06E-016.86E+021.05E+082.63E+12 + 38M5 4.131.52E+007.62E+026.10E+061.65E+104.27E-022.54E+011.03E+067.68E+09 + 38M5 8.139.61E-022.14E+014.94E+045.43E+073.99E-038.81E-019.11E+032.13E+07 + 38M5 15.136.65E-037.46E-015.92E+023.00E+054.23E-044.07E-021.21E+021.06E+05 + 38M5 25.007.10E-044.69E-021.66E+014.57E+036.58E-053.40E-033.70E+001.58E+03 + 38M5 40.008.32E-053.39E-035.84E-019.27E+011.11E-053.35E-041.44E-013.30E+01 + 38M5 52.002.49E-057.74E-049.06E-021.06E+014.10E-069.19E-052.39E-023.94E+00 + 38M5 70.006.32E-061.45E-041.10E-029.15E-011.31E-062.14E-053.16E-033.64E-01 + 38M5 103.001.06E-061.66E-057.29E-043.86E-023.00E-073.27E-062.35E-041.72E-02 + 38M5 150.001.97E-072.06E-065.31E-051.81E-037.16E-085.39E-071.95E-059.36E-04 + 38N+ 50.001.91E-036.02E-022.67E+009.83E+013.18E-039.50E-022.84E+008.59E+01 + 38N+ 70.007.20E-041.44E-023.85E-019.81E+001.21E-032.39E-024.76E-019.76E+00 + 38N+ 100.002.54E-043.34E-035.38E-029.04E-014.42E-045.86E-037.79E-021.08E+00 + 38N+ 150.007.77E-056.79E-046.48E-036.72E-021.45E-041.28E-031.11E-021.01E-01 + 38N+ 200.003.38E-052.28E-041.57E-031.17E-026.76E-054.56E-043.01E-032.06E-02 + 38N+ 500.002.87E-069.73E-063.07E-059.75E-056.87E-062.35E-057.49E-052.38E-04 + 39K 18.041.17E+018.33E+011.52E+021.72E+022.30E+011.10E+038.93E+032.17E+04 + 39K 18.741.06E+018.74E+012.59E+025.73E+022.05E+019.49E+028.89E+033.49E+04 + 39K 20.048.86E+008.84E+014.23E+021.70E+031.68E+017.31E+028.18E+035.15E+04 + 39K 23.245.97E+007.54E+015.91E+024.21E+031.08E+014.10E+025.71E+035.80E+04 + 39K 27.043.97E+005.59E+015.46E+024.99E+036.93E+002.28E+023.47E+034.33E+04 + 39K 31.002.73E+004.00E+014.28E+024.35E+034.63E+001.34E+022.09E+032.83E+04 + 39K 37.001.67E+002.45E+012.73E+022.91E+032.75E+006.75E+011.03E+031.43E+04 + 39K 45.009.60E-011.35E+011.48E+021.56E+031.55E+003.18E+014.55E+026.10E+03 + 39K 57.004.88E-016.25E+006.39E+016.27E+027.84E-011.30E+011.65E+022.01E+03 + 39K 70.002.69E-013.11E+002.90E+012.60E+024.36E-016.00E+006.74E+017.37E+02 + 39K 87.001.43E-011.46E+001.21E+019.69E+012.36E-012.69E+002.61E+012.50E+02 + 39K 100.009.50E-028.90E-016.84E+005.03E+011.60E-011.62E+001.43E+011.25E+02 + 39K 117.005.99E-025.08E-013.55E+002.37E+011.04E-019.23E-017.28E+005.68E+01 + 39K 140.003.54E-022.66E-011.66E+009.94E+006.38E-024.90E-013.39E+002.33E+01 + 39K 165.002.19E-021.47E-018.29E-014.46E+004.11E-022.77E-011.70E+001.04E+01 + 39K 230.008.43E-034.50E-022.05E-018.91E-011.73E-029.11E-024.41E-012.12E+00 + 39K 315.003.52E-031.51E-025.67E-022.03E-017.82E-033.33E-021.30E-015.02E-01 + 39K 410.001.76E-036.37E-032.04E-026.27E-024.11E-031.49E-024.91E-021.59E-01 + 39K 520.009.73E-043.07E-038.60E-032.32E-022.34E-037.42E-032.13E-025.97E-02 + 39K 750.004.24E-041.11E-032.60E-035.87E-031.02E-032.70E-036.40E-031.47E-02 + 39K 1000.002.37E-045.50E-041.14E-032.28E-035.45E-041.28E-032.68E-035.39E-03 + 39K 1250.001.57E-043.36E-046.44E-041.18E-033.42E-047.41E-041.42E-032.62E-03 + 39K 1500.001.15E-042.31E-044.17E-047.22E-042.37E-044.83E-048.72E-041.51E-03 + 39L1 3.373.23E+011.23E+043.30E+062.25E+083.69E+024.84E+051.08E+087.59E+09 + 39L1 4.072.31E+013.87E+031.53E+061.59E+082.10E+021.97E+053.76E+073.16E+09 + 39L1 5.371.37E+015.41E+023.68E+055.10E+079.16E+015.32E+048.02E+067.06E+08 + 39L1 8.575.17E+003.11E+001.89E+043.38E+062.26E+016.08E+036.06E+054.53E+07 + 39L1 12.372.25E+001.22E+019.23E+022.49E+057.57E+001.15E+038.21E+044.89E+06 + 39L1 16.001.22E+001.19E+015.46E+012.98E+043.52E+003.67E+022.07E+041.02E+06 + 39L1 22.005.56E-017.24E+002.99E+011.29E+031.37E+009.16E+013.83E+031.47E+05 + 39L1 30.002.50E-013.50E+002.72E+011.36E+025.47E-012.44E+017.66E+022.27E+04 + 39L1 42.001.02E-011.36E+001.26E+018.99E+012.04E-016.05E+001.39E+023.07E+03 + 39L1 55.004.89E-025.93E-015.38E+004.25E+019.34E-022.03E+003.63E+016.36E+02 + 39L1 72.002.30E-022.46E-012.06E+001.57E+014.32E-027.03E-019.83E+001.36E+02 + 39L1 85.001.44E-021.41E-011.10E+007.94E+002.71E-023.71E-014.46E+005.33E+01 + 39L1 102.008.57E-037.55E-025.37E-013.59E+001.63E-021.86E-011.90E+001.94E+01 + 39L1 125.004.79E-033.73E-022.37E-011.43E+009.31E-038.78E-027.52E-016.43E+00 + 39L1 150.002.84E-031.97E-021.13E-016.16E-015.68E-034.54E-023.34E-012.44E+00 + 39L1 215.001.02E-035.58E-032.59E-021.15E-012.20E-031.30E-027.12E-023.89E-01 + 39L1 300.004.08E-041.79E-036.81E-032.48E-029.40E-044.34E-031.85E-027.80E-02 + 39L1 390.002.04E-047.60E-042.49E-037.84E-034.92E-041.91E-036.76E-032.37E-02 + 39L1 500.001.10E-043.54E-041.01E-032.80E-032.72E-049.07E-042.75E-038.17E-03 + 39L1 730.004.63E-051.24E-042.94E-046.77E-041.14E-043.13E-047.69E-041.83E-03 + 39L11000.002.46E-055.73E-051.20E-042.41E-045.75E-051.37E-042.92E-045.97E-04 + 39L2 3.166.34E+018.61E+057.95E+081.22E+114.06E+012.17E+042.55E+061.62E+08 + 39L2 3.863.55E+013.13E+052.41E+084.33E+102.19E+019.79E+031.34E+061.21E+08 + 39L2 5.161.49E+017.21E+044.23E+077.79E+098.92E+003.06E+034.30E+054.50E+07 + 39L2 8.363.29E+006.33E+032.33E+063.56E+082.00E+004.37E+025.12E+044.86E+06 + 39L2 12.169.70E-019.65E+022.45E+052.95E+076.26E-019.58E+018.89E+036.91E+05 + 39L2 16.003.87E-012.44E+024.70E+044.63E+062.67E-013.14E+012.39E+031.55E+05 + 39L2 22.001.30E-015.00E+016.96E+035.33E+059.92E-028.63E+005.13E+022.62E+04 + 39L2 30.004.42E-021.07E+011.09E+036.43E+043.78E-022.45E+001.13E+024.52E+03 + 39L2 42.001.34E-022.03E+001.47E+026.49E+031.33E-026.27E-012.17E+016.60E+02 + 39L2 55.005.07E-035.41E-012.99E+011.04E+035.74E-032.11E-015.79E+001.40E+02 + 39L2 72.001.91E-031.45E-016.14E+001.68E+022.49E-037.11E-021.55E+002.98E+01 + 39L2 85.001.05E-036.51E-022.33E+005.53E+011.48E-033.65E-026.89E-011.15E+01 + 39L2 102.005.40E-042.71E-028.13E-011.64E+018.44E-041.76E-022.84E-014.08E+00 + 39L2 125.002.59E-041.03E-022.54E-014.29E+004.50E-047.82E-031.06E-011.29E+00 + 39L2 150.001.34E-044.36E-039.04E-021.30E+002.56E-043.80E-034.45E-024.63E-01 + 39L2 215.003.75E-058.25E-041.23E-021.31E-018.49E-059.33E-048.14E-036.35E-02 + 39L2 300.001.18E-051.86E-042.07E-031.69E-023.08E-052.61E-041.76E-031.06E-02 + 39L2 390.004.87E-066.00E-055.36E-043.58E-031.40E-059.76E-055.45E-042.73E-03 + 39L2 500.002.16E-062.14E-051.57E-048.74E-046.70E-063.93E-051.85E-047.85E-04 + 39L2 730.006.80E-074.84E-062.68E-051.16E-042.22E-061.03E-053.84E-051.29E-04 + 39L21000.002.77E-071.53E-066.83E-062.45E-059.03E-073.52E-061.11E-053.15E-05 + 39L3 3.081.28E+021.74E+061.68E+092.68E+111.40E+015.63E+053.17E+091.83E+12 + 39L3 3.786.99E+016.16E+054.90E+089.04E+107.45E+002.03E+057.90E+083.79E+11 + 39L3 5.082.85E+011.37E+058.21E+071.54E+102.99E+004.64E+041.08E+083.92E+10 + 39L3 8.286.07E+001.15E+044.24E+066.53E+086.62E-014.06E+034.15E+069.60E+08 + 39L3 12.081.75E+001.70E+034.27E+055.15E+072.07E-016.19E+023.50E+055.66E+07 + 39L3 16.006.75E-014.10E+027.73E+047.55E+068.69E-021.53E+025.69E+047.06E+06 + 39L3 22.002.24E-018.18E+011.11E+048.40E+053.26E-023.15E+017.49E+036.87E+05 + 39L3 30.007.46E-021.70E+011.68E+039.75E+041.25E-026.80E+001.07E+037.33E+04 + 39L3 42.002.22E-023.12E+002.16E+029.33E+034.45E-031.30E+001.34E+026.71E+03 + 39L3 55.008.30E-038.00E-014.18E+011.42E+031.94E-033.49E-012.61E+011.02E+03 + 39L3 72.003.09E-032.06E-018.13E+002.16E+028.48E-049.48E-025.22E+001.59E+02 + 39L3 85.001.68E-038.96E-022.97E+006.78E+015.10E-044.27E-021.96E+005.14E+01 + 39L3 102.008.57E-043.60E-029.84E-011.90E+012.92E-041.79E-026.77E-011.51E+01 + 39L3 125.004.07E-041.31E-022.89E-014.64E+001.57E-046.86E-032.10E-013.92E+00 + 39L3 150.002.10E-045.32E-039.69E-021.32E+009.06E-052.93E-037.43E-021.19E+00 + 39L3 215.005.80E-059.23E-041.15E-021.13E-013.09E-055.63E-041.00E-021.19E-01 + 39L3 300.001.84E-051.91E-041.67E-031.22E-021.17E-051.28E-041.65E-031.51E-02 + 39L3 390.007.77E-065.80E-053.86E-042.23E-035.54E-064.13E-054.14E-043.13E-03 + 39L3 500.003.59E-061.97E-051.01E-044.74E-042.79E-061.47E-051.16E-047.37E-04 + 39L3 730.001.21E-064.29E-061.51E-055.20E-051.04E-063.39E-061.81E-058.90E-05 + 39L31000.005.28E-071.38E-063.65E-069.88E-064.88E-071.12E-064.22E-061.68E-05 + 39M1 1.392.49E+016.68E+046.74E+063.09E+098.93E+026.77E+068.45E+093.29E+12 + 39M1 2.391.10E+015.54E+032.10E+061.37E+081.77E+024.83E+052.81E+087.81E+10 + 39M1 4.393.57E+001.61E+021.34E+052.19E+072.86E+012.60E+046.95E+061.21E+09 + 39M1 8.399.14E-011.25E+002.64E+035.54E+054.13E+001.25E+031.57E+051.59E+07 + 39M1 15.392.24E-012.32E+001.34E+016.35E+036.76E-017.94E+015.23E+033.07E+05 + 39M1 25.006.70E-029.33E-015.83E+007.22E+011.60E-019.52E+003.82E+021.43E+04 + 39M1 40.001.95E-022.62E-012.40E+001.70E+014.03E-021.31E+003.30E+018.04E+02 + 39M1 52.009.58E-031.18E-011.08E+008.43E+001.88E-024.49E-018.78E+001.68E+02 + 39M1 70.004.20E-034.52E-023.79E-012.90E+008.03E-031.38E-012.03E+002.96E+01 + 39M1 103.001.41E-031.23E-028.63E-025.70E-012.71E-033.13E-023.24E-013.33E+00 + 39M1 150.004.82E-043.32E-031.90E-021.03E-019.73E-047.88E-035.87E-024.36E-01 + 39M1 280.008.36E-053.83E-041.51E-035.74E-031.91E-049.34E-044.21E-031.89E-02 + 39M1 500.001.88E-056.03E-051.73E-044.77E-044.65E-051.56E-044.74E-041.41E-03 + 39M2 1.315.42E+011.17E+074.65E+103.04E+139.69E+012.22E+051.10E+083.21E+10 + 39M2 2.311.58E+016.78E+051.26E+095.92E+111.73E+011.85E+046.63E+061.69E+09 + 39M2 4.313.20E+002.95E+042.56E+077.81E+092.59E+001.30E+033.03E+055.56E+07 + 39M2 8.314.80E-011.10E+034.53E+058.31E+073.46E-018.42E+011.18E+041.38E+06 + 39M2 15.317.00E-025.20E+011.11E+041.22E+065.28E-026.83E+005.80E+024.21E+04 + 39M2 25.001.36E-024.56E+005.79E+024.16E+041.16E-029.22E-015.13E+012.48E+03 + 39M2 40.002.68E-034.50E-013.50E+011.65E+032.71E-031.36E-015.03E+001.63E+02 + 39M2 52.001.06E-031.24E-017.39E+002.75E+021.20E-034.71E-021.38E+003.56E+01 + 39M2 70.003.65E-042.93E-021.29E+003.67E+014.79E-041.42E-023.20E-016.40E+00 + 39M2 103.009.07E-054.56E-031.37E-012.76E+001.45E-043.01E-034.86E-026.98E-01 + 39M2 150.002.35E-057.70E-041.61E-022.34E-014.55E-056.78E-047.96E-038.34E-02 + 39M2 280.002.64E-064.48E-055.31E-044.59E-036.76E-066.04E-054.31E-042.75E-03 + 39M2 500.003.87E-073.81E-062.80E-051.56E-041.19E-067.01E-063.31E-051.40E-04 + 39M3 1.301.10E+022.24E+078.95E+105.81E+133.18E+017.51E+062.35E+117.30E+14 + 39M3 2.303.07E+011.26E+062.33E+091.09E+125.60E+004.34E+054.61E+096.28E+12 + 39M3 4.305.99E+005.33E+044.58E+071.38E+108.26E-011.91E+046.47E+073.91E+10 + 39M3 8.308.68E-011.92E+037.81E+051.41E+081.10E-017.18E+027.88E+052.20E+08 + 39M3 15.301.23E-018.78E+011.83E+041.98E+061.70E-023.42E+011.44E+042.08E+06 + 39M3 25.002.33E-027.40E+009.09E+026.39E+043.78E-033.00E+006.26E+025.45E+04 + 39M3 40.004.45E-036.94E-015.16E+012.38E+038.97E-042.96E-013.35E+011.83E+03 + 39M3 52.001.73E-031.85E-011.04E+013.78E+024.02E-048.21E-026.74E+002.86E+02 + 39M3 70.005.89E-044.17E-021.71E+004.71E+011.62E-041.94E-021.13E+003.62E+01 + 39M3 103.001.44E-046.04E-031.65E-013.18E+004.98E-053.06E-031.16E-012.62E+00 + 39M3 150.003.67E-059.40E-041.72E-022.35E-011.60E-055.24E-041.35E-022.18E-01 + 39M3 280.004.11E-064.68E-054.42E-043.43E-032.52E-063.09E-054.29E-044.18E-03 + 39M3 500.006.38E-073.51E-061.81E-058.46E-054.97E-072.63E-062.08E-051.33E-04 + 39M4 1.161.29E+024.65E+054.12E+108.12E+145.84E+001.36E+052.18E+094.30E+12 + 39M4 2.161.44E+011.90E+045.11E+083.77E+127.25E-015.91E+033.51E+074.15E+10 + 39M4 4.161.21E+006.41E+024.92E+061.41E+107.57E-022.14E+024.86E+053.22E+08 + 39M4 8.167.92E-021.86E+014.12E+044.82E+076.88E-036.95E+006.37E+032.27E+06 + 39M4 15.165.64E-036.70E-015.07E+022.75E+057.06E-042.95E-011.24E+022.47E+04 + 39M4 25.006.18E-044.36E-021.47E+014.38E+031.07E-042.29E-025.32E+006.52E+02 + 39M4 40.007.33E-053.25E-035.34E-019.25E+011.76E-052.07E-032.81E-012.19E+01 + 39M4 52.002.20E-057.57E-048.47E-021.09E+016.32E-065.41E-045.48E-023.33E+00 + 39M4 70.005.59E-061.45E-041.07E-029.83E-011.97E-061.18E-048.69E-033.98E-01 + 39M4 103.009.36E-071.72E-057.42E-044.47E-024.30E-071.66E-058.07E-042.58E-02 + 39M4 150.001.72E-072.21E-065.77E-052.31E-039.68E-082.46E-068.17E-051.86E-03 + 39M5 1.161.90E+026.51E+056.29E+101.20E+153.70E+001.81E+049.99E+098.46E+14 + 39M5 2.162.10E+012.64E+047.74E+085.50E+124.69E-018.09E+021.28E+083.31E+12 + 39M5 4.161.74E+008.82E+027.39E+062.02E+105.06E-023.08E+011.31E+061.01E+10 + 39M5 8.161.13E-012.53E+016.12E+046.81E+074.80E-031.08E+001.18E+042.85E+07 + 39M5 15.167.98E-038.98E-017.41E+023.79E+055.16E-045.04E-021.58E+021.42E+05 + 39M5 25.008.67E-045.74E-022.10E+015.86E+038.12E-054.25E-034.90E+002.14E+03 + 39M5 40.001.02E-044.18E-037.41E-011.19E+021.38E-054.19E-041.91E-014.44E+01 + 39M5 52.003.06E-059.59E-041.15E-011.36E+015.10E-061.15E-043.15E-025.28E+00 + 39M5 70.007.77E-061.80E-041.40E-021.17E+001.64E-062.68E-054.16E-034.86E-01 + 39M5 103.001.31E-062.07E-059.27E-044.94E-023.75E-074.11E-063.08E-042.29E-02 + 39M5 150.002.43E-072.57E-066.75E-052.33E-038.98E-086.79E-072.55E-051.24E-03 + 39N+ 50.002.19E-037.26E-023.35E+001.26E+023.89E-031.18E-013.63E+001.12E+02 + 39N+ 70.008.29E-041.71E-024.79E-011.24E+011.47E-032.96E-026.00E-011.25E+01 + 39N+ 100.002.93E-043.93E-036.58E-021.13E+005.38E-047.22E-039.72E-021.36E+00 + 39N+ 150.008.98E-057.93E-047.79E-038.29E-021.76E-041.56E-031.37E-021.26E-01 + 39N+ 200.003.91E-052.65E-041.87E-031.43E-028.19E-055.56E-043.70E-032.55E-02 + 39N+ 500.003.35E-061.13E-053.60E-051.15E-048.24E-062.84E-059.05E-052.89E-04 + 40K 19.001.05E+017.06E+011.18E+021.19E+022.21E+011.00E+037.65E+031.70E+04 + 40K 19.709.57E+007.41E+012.00E+023.97E+021.98E+018.70E+027.63E+032.74E+04 + 40K 21.008.09E+007.53E+013.28E+021.19E+031.64E+016.78E+027.09E+034.08E+04 + 40K 24.205.55E+006.54E+014.71E+023.08E+031.08E+013.90E+025.08E+034.77E+04 + 40K 28.003.75E+004.96E+014.49E+023.80E+037.01E+002.21E+023.18E+033.70E+04 + 40K 32.002.60E+003.60E+013.61E+023.43E+034.72E+001.32E+021.95E+032.48E+04 + 40K 38.001.61E+002.25E+012.37E+022.39E+032.85E+006.79E+019.89E+021.30E+04 + 40K 46.009.44E-011.27E+011.32E+021.33E+031.63E+003.26E+014.48E+025.75E+03 + 40K 58.004.87E-016.01E+005.90E+015.56E+028.34E-011.35E+011.66E+021.96E+03 + 40K 71.002.72E-013.04E+002.74E+012.38E+024.68E-016.34E+006.93E+017.36E+02 + 40K 88.001.46E-011.45E+001.17E+019.08E+012.55E-012.87E+002.73E+012.55E+02 + 40K 101.009.74E-028.90E-016.66E+004.79E+011.74E-011.74E+001.50E+011.28E+02 + 40K 118.006.18E-025.12E-013.50E+002.29E+011.13E-019.94E-017.71E+005.92E+01 + 40K 141.003.67E-022.71E-011.66E+009.73E+006.96E-025.30E-013.62E+002.45E+01 + 40K 170.002.13E-021.38E-017.55E-013.94E+004.22E-022.78E-011.66E+009.82E+00 + 40K 235.008.43E-034.39E-021.95E-018.30E-011.81E-029.39E-024.45E-012.10E+00 + 40K 320.003.59E-031.52E-025.59E-021.97E-018.31E-033.50E-021.35E-015.12E-01 + 40K 410.001.87E-036.77E-032.15E-026.58E-024.53E-031.64E-025.39E-021.74E-01 + 40K 520.001.04E-033.27E-039.13E-032.46E-022.58E-038.18E-032.34E-026.55E-02 + 40K 750.004.54E-041.19E-032.78E-036.26E-031.12E-032.97E-037.03E-031.61E-02 + 40K 1000.002.54E-045.91E-041.23E-032.45E-035.96E-041.41E-032.94E-035.91E-03 + 40K 1250.001.69E-043.61E-046.93E-041.27E-033.73E-048.12E-041.56E-032.87E-03 + 40K 1500.001.23E-042.48E-044.50E-047.79E-042.58E-045.28E-049.55E-041.65E-03 + 40L1 3.532.96E+011.11E+042.74E+061.69E+083.64E+024.56E+059.68E+076.33E+09 + 40L1 4.232.15E+013.70E+031.34E+061.27E+082.12E+021.93E+053.53E+072.77E+09 + 40L1 5.531.30E+015.73E+023.46E+054.43E+079.50E+015.43E+047.92E+066.61E+08 + 40L1 8.735.04E+004.10E+002.01E+043.32E+062.43E+016.50E+036.34E+054.57E+07 + 40L1 12.532.24E+009.70E+001.15E+032.68E+058.25E+001.26E+038.85E+045.13E+06 + 40L1 16.001.26E+001.05E+019.17E+013.81E+043.98E+004.24E+022.38E+041.16E+06 + 40L1 22.005.76E-016.85E+002.24E+011.92E+031.55E+001.05E+024.40E+031.67E+05 + 40L1 30.002.61E-013.42E+002.35E+011.31E+026.18E-012.80E+018.76E+022.58E+04 + 40L1 42.001.07E-011.36E+001.18E+017.70E+012.30E-016.90E+001.58E+023.48E+03 + 40L1 55.005.13E-026.01E-015.21E+003.88E+011.05E-012.31E+004.13E+017.19E+02 + 40L1 72.002.43E-022.53E-012.04E+001.50E+014.87E-027.97E-011.11E+011.53E+02 + 40L1 85.001.52E-021.45E-011.10E+007.71E+003.05E-024.20E-015.04E+006.00E+01 + 40L1 102.009.08E-037.83E-025.44E-013.54E+001.83E-022.10E-012.15E+002.18E+01 + 40L1 125.005.09E-033.88E-022.43E-011.43E+001.04E-029.89E-028.47E-017.22E+00 + 40L1 150.003.02E-032.06E-021.16E-016.24E-016.37E-035.11E-023.75E-012.74E+00 + 40L1 215.001.09E-035.89E-032.70E-021.18E-012.46E-031.46E-027.97E-024.34E-01 + 40L1 300.004.37E-041.90E-037.17E-032.60E-021.05E-034.85E-032.06E-028.70E-02 + 40L1 390.002.19E-048.11E-042.64E-038.27E-035.48E-042.13E-037.53E-032.64E-02 + 40L1 500.001.18E-043.79E-041.08E-032.98E-033.02E-041.01E-033.06E-039.08E-03 + 40L1 730.005.02E-051.33E-043.17E-047.28E-041.26E-043.47E-048.54E-042.03E-03 + 40L11000.002.65E-056.20E-051.30E-042.61E-046.33E-051.52E-043.23E-046.62E-04 + 40L2 3.315.84E+017.70E+056.77E+089.64E+104.01E+012.04E+042.21E+061.27E+08 + 40L2 4.013.36E+012.92E+052.16E+083.62E+102.22E+019.49E+031.21E+061.00E+08 + 40L2 5.311.45E+017.06E+044.01E+077.00E+099.31E+003.08E+034.10E+054.02E+07 + 40L2 8.513.34E+006.56E+032.36E+063.49E+082.16E+004.61E+025.21E+044.74E+06 + 40L2 12.311.01E+001.03E+032.57E+053.02E+076.89E-011.04E+029.36E+037.06E+05 + 40L2 16.004.22E-012.77E+025.33E+045.18E+063.05E-013.58E+012.68E+031.71E+05 + 40L2 22.001.43E-015.67E+017.91E+035.99E+051.14E-019.85E+005.78E+022.92E+04 + 40L2 30.004.87E-021.22E+011.24E+037.27E+044.34E-022.80E+001.28E+025.07E+03 + 40L2 42.001.48E-022.31E+001.68E+027.36E+031.53E-027.18E-012.47E+017.44E+02 + 40L2 55.005.65E-036.17E-013.41E+011.18E+036.62E-032.41E-016.59E+001.59E+02 + 40L2 72.002.14E-031.66E-017.02E+001.92E+022.87E-038.17E-021.77E+003.39E+01 + 40L2 85.001.17E-037.45E-022.67E+006.31E+011.71E-034.20E-027.89E-011.31E+01 + 40L2 102.006.07E-043.10E-029.32E-011.88E+019.75E-042.02E-023.26E-014.65E+00 + 40L2 125.002.91E-041.18E-022.91E-014.91E+005.20E-049.03E-031.22E-011.47E+00 + 40L2 150.001.51E-045.00E-031.04E-011.50E+002.97E-044.40E-035.12E-025.31E-01 + 40L2 215.004.23E-059.50E-041.42E-021.51E-019.86E-051.08E-039.40E-037.31E-02 + 40L2 300.001.34E-052.15E-042.39E-031.95E-023.59E-053.03E-042.04E-031.23E-02 + 40L2 390.005.55E-066.93E-056.21E-044.14E-031.63E-051.13E-046.32E-043.16E-03 + 40L2 500.002.50E-062.47E-051.82E-041.01E-037.81E-064.58E-052.15E-049.10E-04 + 40L2 730.007.91E-075.60E-063.11E-051.35E-042.59E-061.20E-054.48E-051.50E-04 + 40L21000.003.11E-071.78E-067.97E-062.86E-051.05E-064.12E-061.30E-053.68E-05 + 40L3 3.221.18E+021.56E+061.44E+092.13E+111.37E+015.34E+052.89E+091.59E+12 + 40L3 3.926.62E+015.76E+054.40E+087.62E+107.46E+002.00E+057.59E+083.50E+11 + 40L3 5.222.79E+011.35E+057.81E+071.39E+103.08E+004.79E+041.10E+083.90E+10 + 40L3 8.426.17E+001.19E+044.31E+066.40E+087.06E-014.42E+034.55E+061.03E+09 + 40L3 12.221.82E+001.81E+034.49E+055.27E+072.24E-016.92E+023.95E+056.31E+07 + 40L3 16.007.32E-014.62E+028.72E+048.40E+069.77E-021.81E+026.92E+048.56E+06 + 40L3 22.002.44E-019.23E+011.25E+049.38E+053.67E-023.74E+019.06E+038.30E+05 + 40L3 30.008.18E-021.93E+011.90E+031.09E+051.41E-028.06E+001.29E+038.82E+04 + 40L3 42.002.44E-023.52E+002.44E+021.05E+045.01E-031.54E+001.61E+028.04E+03 + 40L3 55.009.17E-039.05E-014.73E+011.60E+032.19E-034.12E-013.12E+011.22E+03 + 40L3 72.003.42E-032.33E-019.21E+002.44E+029.57E-041.12E-016.22E+001.89E+02 + 40L3 85.001.86E-031.01E-013.37E+007.66E+015.76E-045.03E-022.33E+006.11E+01 + 40L3 102.009.53E-044.08E-021.12E+002.15E+013.30E-042.11E-028.03E-011.79E+01 + 40L3 125.004.53E-041.48E-023.28E-015.26E+001.78E-048.06E-032.48E-014.64E+00 + 40L3 150.002.34E-046.04E-031.10E-011.49E+001.02E-043.43E-038.79E-021.40E+00 + 40L3 215.006.51E-051.05E-031.31E-021.28E-013.49E-056.57E-041.18E-021.40E-01 + 40L3 300.002.08E-052.17E-041.91E-031.39E-021.32E-051.48E-041.93E-031.78E-02 + 40L3 390.008.80E-066.60E-054.39E-042.54E-036.26E-064.78E-054.85E-043.67E-03 + 40L3 500.004.05E-062.24E-051.15E-045.40E-043.16E-061.70E-051.35E-048.63E-04 + 40L3 730.001.35E-064.88E-061.73E-055.94E-051.18E-063.89E-062.10E-051.04E-04 + 40L31000.006.03E-071.57E-064.16E-061.13E-055.51E-071.28E-064.89E-061.95E-05 + 40M1 1.432.39E+016.59E+045.69E+063.38E+099.50E+027.19E+068.92E+093.37E+12 + 40M1 2.431.08E+015.89E+032.02E+061.09E+081.94E+025.38E+053.14E+088.55E+10 + 40M1 4.433.59E+001.95E+021.42E+052.15E+073.21E+012.98E+048.02E+061.38E+09 + 40M1 8.439.35E-011.04E+003.15E+036.08E+054.68E+001.45E+031.83E+051.83E+07 + 40M1 15.432.32E-012.11E+002.04E+017.97E+037.71E-019.24E+016.10E+033.55E+05 + 40M1 25.007.04E-029.13E-014.89E+001.03E+021.84E-011.11E+014.46E+021.67E+04 + 40M1 40.002.07E-022.66E-012.27E+001.49E+014.62E-021.52E+003.84E+019.32E+02 + 40M1 52.001.02E-021.21E-011.05E+007.77E+002.15E-025.19E-011.02E+011.94E+02 + 40M1 70.004.48E-034.70E-023.80E-012.79E+009.18E-031.59E-012.34E+003.41E+01 + 40M1 103.001.51E-031.29E-028.85E-025.70E-013.10E-033.58E-023.71E-013.82E+00 + 40M1 150.005.19E-043.52E-031.98E-021.06E-011.11E-039.00E-036.69E-024.97E-01 + 40M1 280.009.09E-054.11E-041.61E-036.07E-032.16E-041.06E-034.77E-032.14E-02 + 40M1 500.002.04E-056.55E-051.87E-045.15E-045.24E-051.76E-045.35E-041.60E-03 + 40M2 1.345.27E+011.20E+074.71E+102.98E+131.04E+022.36E+051.13E+083.12E+10 + 40M2 2.341.60E+017.30E+051.35E+096.21E+111.93E+012.05E+047.17E+061.76E+09 + 40M2 4.343.34E+003.28E+042.85E+078.54E+092.94E+001.47E+033.36E+056.03E+07 + 40M2 8.345.15E-011.24E+035.13E+059.30E+073.98E-019.65E+011.34E+041.54E+06 + 40M2 15.347.67E-025.94E+011.27E+041.39E+066.12E-027.88E+006.62E+024.75E+04 + 40M2 25.001.52E-025.28E+006.72E+024.80E+041.36E-021.07E+005.94E+012.85E+03 + 40M2 40.003.01E-035.21E-014.07E+011.91E+033.18E-031.59E-015.84E+001.88E+02 + 40M2 52.001.19E-031.44E-018.61E+003.19E+021.41E-035.50E-021.60E+004.12E+01 + 40M2 70.004.14E-043.40E-021.50E+004.26E+015.63E-041.66E-023.73E-017.42E+00 + 40M2 103.001.04E-045.32E-031.60E-013.22E+001.71E-043.54E-035.69E-028.13E-01 + 40M2 150.002.70E-059.01E-041.89E-022.74E-015.37E-057.98E-049.34E-039.75E-02 + 40M2 280.003.05E-065.26E-056.26E-045.40E-038.01E-067.14E-055.08E-043.23E-03 + 40M2 500.004.51E-074.48E-063.31E-051.85E-041.42E-068.33E-063.92E-051.66E-04 + 40M3 1.331.07E+022.29E+079.09E+105.71E+133.39E+018.11E+062.55E+117.91E+14 + 40M3 2.333.11E+011.35E+062.51E+091.14E+126.14E+004.93E+055.34E+097.33E+12 + 40M3 4.336.25E+005.91E+045.09E+071.51E+109.25E-012.23E+047.78E+074.74E+10 + 40M3 8.339.30E-012.17E+038.83E+051.58E+081.25E-018.54E+029.64E+052.71E+08 + 40M3 15.331.34E-011.00E+022.09E+042.24E+061.93E-024.10E+011.77E+042.55E+06 + 40M3 25.002.58E-028.51E+001.05E+037.33E+044.33E-033.62E+007.72E+026.74E+04 + 40M3 40.004.98E-037.99E-015.96E+012.73E+031.03E-033.57E-014.10E+012.25E+03 + 40M3 52.001.95E-032.14E-011.20E+014.34E+024.61E-049.89E-028.23E+003.50E+02 + 40M3 70.006.64E-044.81E-021.98E+005.43E+011.86E-042.34E-021.37E+004.41E+01 + 40M3 103.001.63E-046.98E-031.91E-013.67E+005.74E-053.67E-031.41E-013.18E+00 + 40M3 150.004.19E-051.09E-032.00E-022.72E-011.84E-056.26E-041.62E-022.63E-01 + 40M3 280.004.73E-065.42E-055.14E-043.98E-032.91E-063.66E-055.15E-045.02E-03 + 40M3 500.007.24E-074.06E-062.10E-059.83E-055.73E-073.10E-062.48E-051.59E-04 + 40M4 1.181.36E+024.97E+054.47E+108.90E+146.51E+001.54E+052.49E+094.80E+12 + 40M4 2.181.59E+012.13E+045.92E+084.45E+128.38E-017.03E+034.24E+074.94E+10 + 40M4 4.181.37E+007.41E+025.92E+061.72E+108.95E-022.61E+026.03E+053.97E+08 + 40M4 8.189.26E-022.20E+015.05E+046.01E+078.27E-038.63E+008.01E+032.84E+06 + 40M4 15.186.72E-038.04E-016.29E+023.45E+058.60E-043.69E-011.57E+023.11E+04 + 40M4 25.007.48E-045.32E-021.84E+015.57E+031.32E-042.89E-026.78E+008.30E+02 + 40M4 40.008.96E-053.99E-036.71E-011.18E+022.17E-052.62E-033.58E-012.79E+01 + 40M4 52.002.70E-059.33E-041.07E-011.39E+017.85E-066.85E-046.99E-024.24E+00 + 40M4 70.006.90E-061.80E-041.34E-021.25E+002.45E-061.50E-041.11E-025.08E-01 + 40M4 103.001.16E-062.15E-059.35E-045.69E-025.36E-072.10E-051.03E-033.30E-02 + 40M4 150.002.08E-072.78E-067.29E-052.94E-031.21E-073.13E-061.05E-042.38E-03 + 40M5 1.182.00E+026.93E+056.84E+101.31E+154.12E+002.03E+041.15E+109.83E+14 + 40M5 2.182.31E+012.94E+048.98E+086.47E+125.40E-019.50E+021.57E+084.15E+12 + 40M5 4.181.98E+001.02E+038.90E+062.47E+105.95E-023.71E+011.66E+061.32E+10 + 40M5 8.181.32E-012.97E+017.52E+048.47E+075.74E-031.32E+001.53E+043.79E+07 + 40M5 15.189.49E-031.07E+009.21E+024.75E+056.24E-046.18E-022.05E+021.90E+05 + 40M5 25.001.05E-036.96E-022.64E+017.44E+039.93E-055.26E-036.42E+002.86E+03 + 40M5 40.001.25E-045.10E-039.32E-011.51E+021.70E-055.19E-042.50E-015.92E+01 + 40M5 52.003.75E-051.17E-031.45E-011.72E+016.29E-061.43E-044.12E-027.01E+00 + 40M5 70.009.56E-062.22E-041.77E-021.49E+002.03E-063.33E-055.42E-036.42E-01 + 40M5 103.001.60E-062.57E-051.17E-036.28E-024.66E-075.12E-064.00E-043.01E-02 + 40M5 150.002.92E-073.21E-068.51E-052.96E-031.12E-078.46E-073.29E-051.62E-03 + 40N+ 50.002.46E-038.48E-024.03E+001.53E+024.64E-031.44E-014.49E+001.41E+02 + 40N+ 70.009.31E-041.98E-025.72E-011.51E+011.76E-033.58E-027.36E-011.56E+01 + 40N+ 100.003.30E-044.50E-037.78E-021.36E+006.41E-048.68E-031.18E-011.67E+00 + 40N+ 150.001.01E-049.03E-049.09E-039.87E-022.10E-041.87E-031.66E-021.53E-01 + 40N+ 200.004.44E-053.02E-042.17E-031.69E-029.70E-056.62E-044.43E-033.07E-02 + 40N+ 500.003.82E-061.29E-054.12E-051.33E-049.68E-063.35E-051.07E-043.43E-04 + 41K 19.999.50E+006.00E+019.18E+018.27E+012.13E+019.12E+026.57E+031.34E+04 + 41K 20.698.69E+006.29E+011.55E+022.75E+021.92E+017.98E+026.57E+032.16E+04 + 41K 21.997.40E+006.42E+012.56E+028.38E+021.60E+016.29E+026.16E+033.25E+04 + 41K 25.195.16E+005.68E+013.77E+022.25E+031.07E+013.71E+024.53E+033.92E+04 + 41K 28.993.54E+004.39E+013.70E+022.90E+037.08E+002.15E+022.91E+033.16E+04 + 41K 33.002.48E+003.24E+013.05E+022.71E+034.83E+001.30E+021.82E+032.18E+04 + 41K 39.001.56E+002.07E+012.06E+021.96E+032.95E+006.84E+019.50E+021.19E+04 + 41K 47.009.27E-011.19E+011.19E+021.13E+031.71E+003.34E+014.41E+025.42E+03 + 41K 59.004.86E-015.77E+005.44E+014.93E+028.86E-011.41E+011.68E+021.91E+03 + 41K 72.002.74E-012.97E+002.59E+012.17E+025.01E-016.68E+007.12E+017.34E+02 + 41K 89.001.48E-011.43E+001.13E+018.50E+012.75E-013.05E+002.84E+012.59E+02 + 41K 102.009.97E-028.89E-016.49E+004.54E+011.88E-011.86E+001.58E+011.32E+02 + 41K 119.006.36E-025.15E-013.44E+002.20E+011.23E-011.07E+008.16E+006.15E+01 + 41K 142.003.80E-022.75E-011.65E+009.50E+007.59E-025.73E-013.86E+002.58E+01 + 41K 170.002.25E-021.45E-017.78E-014.01E+004.68E-023.07E-011.82E+001.07E+01 + 41K 235.008.95E-034.61E-022.03E-018.55E-012.01E-021.04E-014.89E-012.29E+00 + 41K 320.003.83E-031.60E-025.86E-022.05E-019.17E-033.86E-021.48E-015.60E-01 + 41K 410.002.00E-037.17E-032.27E-026.90E-024.99E-031.81E-025.92E-021.91E-01 + 41K 520.001.11E-033.48E-039.67E-032.59E-022.83E-038.99E-032.57E-027.16E-02 + 41K 750.004.87E-041.27E-032.97E-036.67E-031.22E-033.26E-037.71E-031.77E-02 + 41K 1000.002.73E-046.33E-041.32E-032.62E-036.51E-041.54E-033.22E-036.47E-03 + 41K 1250.001.80E-043.88E-047.45E-041.37E-034.07E-048.89E-041.71E-033.14E-03 + 41K 1500.001.32E-042.67E-044.84E-048.39E-042.80E-045.77E-041.04E-031.80E-03 + 41L1 3.702.71E+019.97E+032.27E+061.25E+083.58E+024.29E+058.66E+075.25E+09 + 41L1 4.402.00E+013.51E+031.16E+061.00E+082.13E+021.87E+053.29E+072.42E+09 + 41L1 5.701.23E+015.99E+023.22E+053.81E+079.81E+015.51E+047.77E+066.13E+08 + 41L1 8.904.91E+006.16E+002.11E+043.21E+062.59E+016.92E+036.60E+054.58E+07 + 41L1 12.702.22E+007.56E+001.39E+032.84E+058.95E+001.37E+039.48E+045.35E+06 + 41L1 16.001.29E+009.17E+001.48E+024.73E+044.49E+004.89E+022.73E+041.31E+06 + 41L1 22.005.95E-016.42E+001.75E+012.73E+031.74E+001.21E+025.03E+031.89E+05 + 41L1 30.002.71E-013.33E+002.00E+011.49E+026.97E-013.20E+019.99E+022.92E+04 + 41L1 42.001.12E-011.36E+001.09E+016.56E+012.60E-017.86E+001.79E+023.93E+03 + 41L1 55.005.38E-026.08E-015.02E+003.52E+011.19E-012.63E+004.67E+018.11E+02 + 41L1 72.002.56E-022.58E-012.02E+001.42E+015.48E-029.02E-011.26E+011.72E+02 + 41L1 85.001.61E-021.50E-011.10E+007.46E+003.42E-024.74E-015.69E+006.75E+01 + 41L1 102.009.60E-038.10E-025.49E-013.49E+002.05E-022.37E-012.42E+002.45E+01 + 41L1 125.005.39E-034.04E-022.47E-011.43E+001.17E-021.11E-019.51E-018.09E+00 + 41L1 150.003.21E-032.15E-021.19E-016.30E-017.13E-035.74E-024.20E-013.07E+00 + 41L1 215.001.17E-036.20E-032.81E-021.22E-012.74E-031.63E-028.91E-024.85E-01 + 41L1 300.004.68E-042.01E-037.53E-032.71E-021.17E-035.41E-032.30E-029.68E-02 + 41L1 390.002.36E-048.63E-042.79E-038.71E-036.09E-042.37E-038.38E-032.93E-02 + 41L1 500.001.27E-044.06E-041.15E-033.16E-033.35E-041.12E-033.39E-031.01E-02 + 41L1 730.005.39E-051.43E-043.40E-047.82E-041.40E-043.85E-049.46E-042.25E-03 + 41L11000.002.87E-056.70E-051.40E-042.82E-046.97E-051.68E-043.57E-047.32E-04 + 41L2 3.465.38E+016.87E+055.73E+087.55E+103.95E+011.90E+041.90E+069.85E+07 + 41L2 4.163.17E+012.71E+051.92E+083.01E+102.24E+019.16E+031.09E+068.24E+07 + 41L2 5.461.41E+016.89E+043.78E+076.24E+099.68E+003.09E+033.89E+053.56E+07 + 41L2 8.663.39E+006.76E+032.39E+063.39E+082.33E+004.84E+025.26E+044.59E+06 + 41L2 12.461.05E+001.09E+032.69E+053.08E+077.56E-011.12E+029.79E+037.16E+05 + 41L2 16.004.59E-013.14E+026.02E+045.78E+063.49E-014.06E+013.00E+031.87E+05 + 41L2 22.001.56E-016.43E+018.96E+036.72E+051.30E-011.12E+016.49E+023.23E+04 + 41L2 30.005.35E-021.38E+011.41E+038.18E+044.97E-023.19E+001.44E+025.66E+03 + 41L2 42.001.64E-022.63E+001.91E+028.31E+031.75E-028.19E-012.79E+018.35E+02 + 41L2 55.006.27E-037.01E-013.88E+011.34E+037.60E-032.76E-017.49E+001.79E+02 + 41L2 72.002.38E-031.89E-018.01E+002.18E+023.30E-039.35E-022.01E+003.84E+01 + 41L2 85.001.31E-038.49E-023.05E+007.18E+011.97E-034.81E-029.00E-011.49E+01 + 41L2 102.006.80E-043.54E-021.07E+002.14E+011.12E-032.33E-023.72E-015.29E+00 + 41L2 125.003.27E-041.35E-023.34E-015.61E+006.01E-041.04E-021.40E-011.68E+00 + 41L2 150.001.70E-045.72E-031.19E-011.71E+003.43E-045.06E-035.87E-026.06E-01 + 41L2 215.004.79E-051.09E-031.63E-021.73E-011.14E-041.25E-031.08E-028.38E-02 + 41L2 300.001.52E-052.47E-042.76E-032.25E-024.16E-053.50E-042.35E-031.41E-02 + 41L2 390.006.34E-067.98E-057.17E-044.78E-031.90E-051.32E-047.31E-043.64E-03 + 41L2 500.002.84E-062.85E-052.10E-041.17E-039.08E-065.32E-052.50E-041.05E-03 + 41L2 730.008.87E-076.47E-063.61E-051.56E-043.01E-061.40E-055.20E-051.74E-04 + 41L21000.003.58E-072.06E-069.25E-063.32E-051.23E-064.81E-061.51E-054.28E-05 + 41L3 3.371.09E+021.40E+061.22E+091.68E+111.33E+015.04E+052.61E+091.37E+12 + 41L3 4.076.26E+015.37E+053.94E+086.37E+107.45E+001.97E+057.25E+083.22E+11 + 41L3 5.372.71E+011.32E+057.39E+071.24E+103.17E+004.93E+041.12E+083.84E+10 + 41L3 8.576.24E+001.23E+044.35E+066.23E+087.50E-014.79E+034.94E+061.10E+09 + 41L3 12.371.88E+001.91E+034.68E+055.36E+072.42E-017.71E+024.43E+056.98E+07 + 41L3 16.007.92E-015.20E+029.80E+049.31E+061.09E-012.14E+028.37E+041.03E+07 + 41L3 22.002.65E-011.04E+021.41E+041.05E+064.11E-024.41E+011.09E+049.98E+05 + 41L3 30.008.94E-022.17E+012.14E+031.22E+051.58E-029.51E+001.55E+031.06E+05 + 41L3 42.002.68E-023.97E+002.76E+021.18E+045.63E-031.81E+001.92E+029.59E+03 + 41L3 55.001.01E-021.02E+005.34E+011.79E+032.46E-034.85E-013.72E+011.45E+03 + 41L3 72.003.78E-032.63E-011.04E+012.74E+021.08E-031.31E-017.39E+002.25E+02 + 41L3 85.002.06E-031.15E-013.81E+008.63E+016.48E-045.90E-022.76E+007.24E+01 + 41L3 102.001.06E-034.61E-021.26E+002.43E+013.71E-042.47E-029.50E-012.12E+01 + 41L3 125.005.04E-041.68E-023.72E-015.93E+002.00E-049.42E-032.93E-015.47E+00 + 41L3 150.002.61E-046.83E-031.25E-011.69E+001.15E-044.01E-031.04E-011.66E+00 + 41L3 215.007.23E-051.19E-031.48E-021.45E-013.94E-057.64E-041.38E-021.65E-01 + 41L3 300.002.31E-052.46E-042.17E-031.57E-021.49E-051.72E-042.26E-032.08E-02 + 41L3 390.009.86E-067.48E-054.99E-042.88E-037.06E-065.52E-055.66E-044.30E-03 + 41L3 500.004.57E-062.54E-051.31E-046.13E-043.56E-061.96E-051.58E-041.01E-03 + 41L3 730.001.53E-065.53E-061.96E-056.75E-051.33E-064.46E-062.44E-051.21E-04 + 41L31000.006.70E-071.77E-064.72E-061.28E-056.20E-071.46E-065.64E-062.27E-05 + 41M1 1.472.28E+016.45E+044.75E+063.58E+091.01E+037.57E+069.31E+093.39E+12 + 41M1 2.471.06E+016.21E+031.92E+068.56E+072.12E+025.96E+053.48E+089.26E+10 + 41M1 4.473.59E+002.31E+021.49E+052.08E+073.58E+013.40E+049.18E+061.56E+09 + 41M1 8.479.53E-011.11E+003.69E+036.59E+055.28E+001.67E+032.13E+052.11E+07 + 41M1 15.472.40E-011.89E+003.05E+019.77E+038.75E-011.07E+027.07E+034.10E+05 + 41M1 25.007.39E-028.88E-014.08E+001.48E+022.10E-011.29E+015.21E+021.95E+04 + 41M1 40.002.18E-022.68E-012.12E+001.33E+015.27E-021.76E+004.44E+011.08E+03 + 41M1 52.001.08E-021.24E-011.02E+007.11E+002.46E-025.99E-011.17E+012.23E+02 + 41M1 70.004.77E-034.86E-023.79E-012.68E+001.05E-021.82E-012.69E+003.91E+01 + 41M1 103.001.62E-031.35E-029.05E-025.69E-013.52E-034.10E-024.24E-014.36E+00 + 41M1 150.005.59E-043.72E-032.06E-021.08E-011.26E-031.02E-027.62E-025.65E-01 + 41M1 280.009.82E-054.41E-041.71E-036.40E-032.44E-041.20E-035.40E-032.42E-02 + 41M1 500.002.22E-057.10E-052.02E-045.54E-045.88E-051.98E-046.02E-041.80E-03 + 41M2 1.385.09E+011.21E+074.72E+102.87E+131.12E+022.50E+051.15E+082.98E+10 + 41M2 2.381.61E+017.80E+051.44E+096.45E+112.13E+012.26E+047.67E+061.80E+09 + 41M2 4.383.47E+003.62E+043.15E+079.27E+093.32E+001.66E+033.71E+056.48E+07 + 41M2 8.385.51E-011.40E+035.79E+051.04E+084.55E-011.10E+021.50E+041.70E+06 + 41M2 15.388.36E-026.76E+011.45E+041.56E+067.06E-029.05E+007.52E+025.33E+04 + 41M2 25.001.69E-026.08E+007.77E+025.51E+041.58E-021.25E+006.84E+013.26E+03 + 41M2 40.003.37E-036.02E-014.71E+012.20E+033.71E-031.85E-016.75E+002.16E+02 + 41M2 52.001.34E-031.67E-019.98E+003.69E+021.65E-036.41E-021.86E+004.74E+01 + 41M2 70.004.69E-043.94E-021.74E+004.93E+016.59E-041.94E-024.33E-018.56E+00 + 41M2 103.001.18E-046.17E-031.86E-013.74E+002.00E-044.13E-036.62E-029.42E-01 + 41M2 150.003.10E-051.05E-032.20E-023.19E-016.31E-059.36E-041.09E-021.13E-01 + 41M2 280.003.50E-066.15E-057.34E-046.33E-039.46E-068.41E-055.96E-043.79E-03 + 41M2 500.005.23E-075.26E-063.90E-052.17E-041.68E-069.84E-064.63E-051.96E-04 + 41M3 1.361.04E+022.31E+079.12E+105.51E+133.58E+018.66E+062.72E+118.41E+14 + 41M3 2.363.13E+011.44E+062.67E+091.18E+126.70E+005.54E+056.12E+098.44E+12 + 41M3 4.366.50E+006.51E+045.61E+071.63E+101.03E+002.59E+049.27E+075.68E+10 + 41M3 8.369.92E-012.43E+039.91E+051.75E+081.41E-011.01E+031.17E+063.30E+08 + 41M3 15.361.46E-011.13E+022.36E+042.51E+062.19E-024.88E+012.15E+043.12E+06 + 41M3 25.002.85E-029.75E+001.20E+038.36E+044.95E-034.36E+009.49E+028.29E+04 + 41M3 40.005.55E-039.17E-016.85E+013.12E+031.18E-034.29E-015.01E+012.74E+03 + 41M3 52.002.18E-032.45E-011.39E+014.97E+025.27E-041.19E-011.00E+014.26E+02 + 41M3 70.007.46E-045.53E-022.28E+006.22E+012.13E-042.80E-021.67E+005.35E+01 + 41M3 103.001.84E-048.04E-032.20E-014.22E+006.57E-054.38E-031.70E-013.83E+00 + 41M3 150.004.74E-051.25E-032.31E-023.13E-012.11E-057.45E-041.95E-023.17E-01 + 41M3 280.005.36E-066.26E-055.95E-044.60E-033.34E-064.33E-056.15E-046.00E-03 + 41M3 500.008.42E-074.70E-062.43E-051.14E-046.57E-073.63E-062.95E-051.89E-04 + 41M4 1.211.41E+025.24E+054.78E+109.55E+147.19E+001.73E+052.80E+095.25E+12 + 41M4 2.211.73E+012.36E+046.77E+085.16E+129.59E-018.26E+035.05E+075.78E+10 + 41M4 4.211.55E+008.48E+027.04E+062.08E+101.05E-013.16E+027.39E+054.81E+08 + 41M4 8.211.07E-012.57E+016.14E+047.41E+079.87E-031.06E+019.96E+033.51E+06 + 41M4 15.217.94E-039.56E-017.73E+024.30E+051.04E-034.58E-011.97E+023.88E+04 + 41M4 25.008.99E-046.43E-022.29E+017.02E+031.61E-043.62E-028.57E+001.05E+03 + 41M4 40.001.08E-044.86E-038.36E-011.48E+022.67E-053.28E-034.53E-013.53E+01 + 41M4 52.003.28E-051.14E-031.33E-011.75E+019.66E-068.60E-048.84E-025.36E+00 + 41M4 70.008.42E-062.21E-041.67E-021.58E+003.03E-061.89E-041.40E-026.43E-01 + 41M4 103.001.42E-062.65E-051.17E-037.18E-026.64E-072.65E-051.31E-034.18E-02 + 41M4 150.002.59E-073.43E-069.12E-053.72E-031.50E-073.94E-061.33E-043.02E-03 + 41M5 1.202.08E+027.29E+057.34E+101.41E+154.54E+002.25E+041.30E+101.12E+15 + 41M5 2.202.52E+013.25E+041.03E+097.52E+126.15E-011.10E+031.89E+085.13E+12 + 41M5 4.202.23E+001.16E+031.06E+072.99E+106.94E-024.42E+012.07E+061.70E+10 + 41M5 8.201.53E-013.47E+019.15E+041.04E+086.81E-031.59E+001.95E+044.97E+07 + 41M5 15.201.12E-021.27E+001.13E+035.91E+057.48E-047.52E-022.64E+022.50E+05 + 41M5 25.001.25E-038.37E-023.28E+019.36E+031.20E-046.46E-038.34E+003.80E+03 + 41M5 40.001.50E-046.18E-031.16E+001.90E+022.07E-056.38E-043.24E-017.81E+01 + 41M5 52.004.55E-051.43E-031.80E-012.17E+017.69E-061.76E-045.33E-029.21E+00 + 41M5 70.001.17E-052.70E-042.20E-021.87E+002.48E-064.11E-057.00E-038.42E-01 + 41M5 103.001.98E-063.14E-051.46E-037.90E-025.72E-076.32E-065.15E-043.94E-02 + 41M5 150.003.60E-073.94E-061.06E-043.72E-031.37E-071.05E-064.22E-052.11E-03 + 41N+ 50.002.68E-039.79E-024.82E+001.84E+025.38E-031.70E-015.44E+001.73E+02 + 41N+ 70.001.02E-032.25E-026.78E-011.80E+012.04E-034.21E-028.83E-011.90E+01 + 41N+ 100.003.61E-045.06E-039.11E-021.62E+007.40E-041.02E-021.40E-012.02E+00 + 41N+ 150.001.11E-041.00E-031.05E-021.16E-012.41E-042.17E-031.94E-021.81E-01 + 41N+ 200.004.88E-053.34E-042.47E-031.97E-021.11E-047.66E-045.17E-033.62E-02 + 41N+ 500.004.23E-061.43E-054.60E-051.51E-041.10E-053.83E-051.23E-043.95E-04 + 42K 21.008.61E+005.12E+017.22E+015.83E+012.05E+018.34E+025.67E+031.07E+04 + 42K 21.707.90E+005.37E+011.21E+021.94E+021.86E+017.34E+025.68E+031.71E+04 + 42K 23.006.78E+005.50E+012.01E+025.95E+021.57E+015.86E+025.37E+032.60E+04 + 42K 26.204.80E+004.94E+013.02E+021.66E+031.06E+013.53E+024.04E+033.24E+04 + 42K 30.003.34E+003.89E+013.05E+022.22E+037.14E+002.09E+022.66E+032.70E+04 + 42K 34.002.38E+002.93E+012.58E+022.14E+034.93E+001.29E+021.71E+031.92E+04 + 42K 40.001.52E+001.91E+011.80E+021.61E+033.06E+006.88E+019.13E+021.08E+04 + 42K 48.009.11E-011.12E+011.06E+029.66E+021.80E+003.42E+014.34E+025.11E+03 + 42K 60.004.84E-015.54E+005.02E+014.37E+029.41E-011.47E+011.69E+021.86E+03 + 42K 73.002.76E-012.90E+002.44E+011.98E+025.36E-017.04E+007.30E+017.32E+02 + 42K 90.001.51E-011.42E+001.08E+017.94E+012.97E-013.25E+002.96E+012.64E+02 + 42K 103.001.02E-018.86E-016.31E+004.31E+012.03E-011.99E+001.66E+011.36E+02 + 42K 120.006.54E-025.18E-013.38E+002.12E+011.33E-011.15E+008.62E+006.39E+01 + 42K 143.003.93E-022.78E-011.64E+009.27E+008.26E-026.18E-014.10E+002.70E+01 + 42K 170.002.38E-021.51E-018.01E-014.07E+005.19E-023.39E-011.99E+001.16E+01 + 42K 235.009.50E-034.83E-022.11E-018.79E-012.22E-021.14E-015.36E-012.50E+00 + 42K 320.004.07E-031.69E-026.12E-022.13E-011.01E-024.25E-021.62E-016.11E-01 + 42K 410.002.13E-037.59E-032.38E-027.21E-025.49E-031.99E-026.49E-022.08E-01 + 42K 520.001.19E-033.69E-031.02E-022.73E-023.11E-039.87E-032.81E-027.82E-02 + 42K 750.005.21E-041.36E-033.16E-037.09E-031.34E-033.57E-038.43E-031.93E-02 + 42K 1000.002.92E-046.78E-041.41E-032.80E-037.10E-041.69E-033.52E-037.06E-03 + 42K 1250.001.93E-044.16E-047.99E-041.47E-034.42E-049.71E-041.87E-033.43E-03 + 42K 1500.001.41E-042.86E-045.21E-049.02E-043.04E-046.30E-041.14E-031.97E-03 + 42L1 3.872.49E+019.03E+031.90E+069.50E+073.53E+024.05E+057.82E+074.41E+09 + 42L1 4.571.86E+013.34E+031.01E+068.03E+072.15E+021.83E+053.09E+072.13E+09 + 42L1 5.871.16E+016.21E+023.00E+053.29E+071.01E+025.59E+047.64E+065.72E+08 + 42L1 9.074.78E+009.12E+002.19E+043.10E+062.76E+017.36E+036.86E+054.60E+07 + 42L1 12.872.20E+005.80E+001.64E+032.99E+059.70E+001.49E+031.01E+055.58E+06 + 42L1 17.001.15E+007.79E+001.19E+023.54E+044.23E+004.30E+022.26E+041.03E+06 + 42L1 23.005.50E-015.55E+001.50E+012.44E+031.72E+001.14E+024.55E+031.64E+05 + 42L1 31.002.58E-012.98E+001.65E+011.50E+027.12E-013.18E+019.60E+022.71E+04 + 42L1 43.001.09E-011.27E+009.51E+005.44E+012.73E-018.11E+001.81E+023.86E+03 + 42L1 56.005.36E-025.81E-014.56E+003.02E+011.27E-012.77E+004.83E+018.22E+02 + 42L1 73.002.58E-022.52E-011.89E+001.28E+015.91E-029.66E-011.33E+011.79E+02 + 42L1 86.001.64E-021.48E-011.05E+006.86E+003.71E-025.11E-016.06E+007.09E+01 + 42L1 103.009.85E-038.09E-025.32E-013.28E+002.24E-022.57E-012.60E+002.60E+01 + 42L1 126.005.57E-034.08E-022.44E-011.38E+001.28E-021.21E-011.03E+008.68E+00 + 42L1 155.003.10E-032.00E-021.07E-015.48E-017.30E-035.72E-024.07E-012.88E+00 + 42L1 220.001.16E-036.02E-032.66E-021.12E-012.88E-031.68E-029.03E-024.82E-01 + 42L1 305.004.79E-042.02E-037.42E-032.62E-021.24E-035.71E-032.39E-029.96E-02 + 42L1 390.002.52E-049.18E-042.95E-039.16E-036.75E-042.63E-039.31E-033.25E-02 + 42L1 500.001.37E-044.33E-041.23E-033.35E-033.70E-041.24E-033.76E-031.12E-02 + 42L1 730.005.82E-051.54E-043.65E-048.38E-041.54E-044.26E-041.05E-032.49E-03 + 42L11000.003.08E-057.22E-051.51E-043.04E-047.67E-051.85E-043.95E-048.08E-04 + 42L2 3.634.98E+016.16E+054.90E+086.00E+103.90E+011.78E+041.66E+067.78E+07 + 42L2 4.333.00E+012.53E+051.72E+082.52E+102.26E+018.86E+039.87E+056.85E+07 + 42L2 5.631.38E+016.71E+043.57E+075.59E+091.01E+013.10E+033.69E+053.17E+07 + 42L2 8.833.43E+006.96E+032.40E+063.30E+082.50E+005.08E+025.31E+044.44E+06 + 42L2 12.631.08E+001.16E+032.81E+053.13E+078.27E-011.20E+021.02E+047.25E+05 + 42L2 17.004.06E-012.62E+024.73E+044.27E+063.29E-013.60E+012.50E+031.48E+05 + 42L2 23.001.46E-015.82E+017.76E+035.56E+051.29E-011.06E+015.87E+022.79E+04 + 42L2 31.005.23E-021.33E+011.31E+037.34E+045.13E-023.18E+001.38E+025.23E+03 + 42L2 43.001.66E-022.65E+001.88E+027.99E+031.86E-028.48E-012.81E+018.18E+02 + 42L2 56.006.51E-037.28E-013.96E+011.34E+038.23E-032.93E-017.77E+001.81E+02 + 42L2 73.002.52E-032.01E-018.41E+002.25E+023.63E-031.01E-012.14E+004.00E+01 + 42L2 86.001.40E-039.12E-023.25E+007.53E+012.19E-035.25E-029.67E-011.58E+01 + 42L2 103.007.33E-043.84E-021.15E+002.28E+011.25E-032.56E-024.05E-015.68E+00 + 42L2 126.003.56E-041.48E-023.64E-016.06E+006.75E-041.15E-021.54E-011.83E+00 + 42L2 155.001.71E-045.60E-031.13E-011.58E+003.57E-045.11E-035.74E-025.76E-01 + 42L2 220.005.00E-051.12E-031.65E-021.72E-011.23E-041.31E-031.11E-028.46E-02 + 42L2 305.001.63E-052.63E-042.91E-032.33E-024.58E-053.80E-042.51E-031.49E-02 + 42L2 390.007.19E-069.16E-058.26E-045.49E-032.20E-051.52E-048.43E-044.19E-03 + 42L2 500.003.23E-063.28E-052.43E-041.35E-031.05E-056.16E-052.88E-041.21E-03 + 42L2 730.001.02E-067.46E-064.17E-051.80E-043.50E-061.62E-056.03E-052.01E-04 + 42L21000.004.14E-072.37E-061.07E-053.84E-051.43E-065.59E-061.76E-054.96E-05 + 42L3 3.521.01E+021.26E+061.05E+091.35E+111.30E+014.78E+052.38E+091.20E+12 + 42L3 4.225.93E+015.02E+053.54E+085.38E+107.45E+001.93E+056.95E+082.97E+11 + 42L3 5.522.64E+011.28E+057.00E+071.12E+103.25E+005.07E+041.13E+083.79E+10 + 42L3 8.726.31E+001.26E+044.39E+066.07E+087.94E-015.18E+035.35E+061.17E+09 + 42L3 12.521.94E+002.02E+034.88E+055.44E+072.60E-018.55E+024.96E+057.70E+07 + 42L3 17.006.96E-014.30E+027.60E+046.81E+061.02E-011.87E+026.82E+047.94E+06 + 42L3 23.002.47E-019.32E+011.21E+048.54E+054.01E-024.17E+019.88E+038.64E+05 + 42L3 31.008.67E-022.06E+011.97E+031.08E+051.60E-029.51E+001.51E+039.96E+04 + 42L3 43.002.70E-023.96E+002.69E+021.12E+045.86E-031.90E+001.98E+029.66E+03 + 42L3 56.001.04E-021.05E+005.39E+011.77E+032.60E-035.21E-013.96E+011.51E+03 + 42L3 73.003.97E-032.77E-011.08E+012.79E+021.16E-031.44E-018.05E+002.42E+02 + 42L3 86.002.18E-031.22E-014.00E+008.93E+017.01E-046.53E-023.05E+007.90E+01 + 42L3 103.001.13E-034.95E-021.35E+002.55E+014.04E-042.75E-021.06E+002.34E+01 + 42L3 126.005.44E-041.82E-024.00E-016.32E+002.19E-041.06E-023.29E-016.11E+00 + 42L3 155.002.58E-046.56E-031.16E-011.52E+001.17E-044.01E-031.01E-011.57E+00 + 42L3 220.007.49E-051.20E-031.47E-021.40E-014.13E-057.99E-041.43E-021.67E-01 + 42L3 305.002.46E-052.58E-042.23E-031.60E-021.60E-051.85E-042.42E-032.20E-02 + 42L3 390.001.10E-058.45E-055.66E-043.26E-037.94E-066.36E-056.59E-045.01E-03 + 42L3 500.005.09E-062.87E-051.49E-046.95E-044.01E-062.25E-051.83E-041.17E-03 + 42L3 730.001.71E-066.24E-062.22E-057.66E-051.49E-065.09E-062.82E-051.41E-04 + 42L31000.007.58E-072.00E-065.34E-061.45E-056.96E-071.66E-066.50E-062.63E-05 + 42M1 1.502.18E+016.35E+044.08E+063.74E+091.07E+037.99E+069.77E+093.45E+12 + 42M1 2.501.04E+016.54E+031.83E+066.83E+072.31E+026.59E+053.86E+081.01E+11 + 42M1 4.503.60E+002.71E+021.56E+052.01E+073.98E+013.87E+041.05E+071.76E+09 + 42M1 8.509.72E-011.50E+004.28E+037.10E+055.95E+001.93E+032.46E+052.42E+07 + 42M1 15.502.48E-011.68E+004.38E+011.18E+049.92E-011.24E+028.19E+034.72E+05 + 42M1 25.007.73E-028.59E-013.46E+002.09E+022.40E-011.50E+016.06E+022.26E+04 + 42M1 40.002.30E-022.69E-011.97E+001.22E+016.01E-022.03E+005.13E+011.24E+03 + 42M1 52.001.14E-021.26E-019.86E-016.51E+002.80E-026.89E-011.35E+012.57E+02 + 42M1 70.005.07E-035.01E-023.77E-012.55E+001.19E-022.09E-013.08E+004.47E+01 + 42M1 103.001.73E-031.41E-029.22E-025.65E-014.00E-034.68E-024.84E-014.97E+00 + 42M1 150.006.00E-043.93E-032.13E-021.10E-011.42E-031.16E-028.66E-026.42E-01 + 42M1 280.001.06E-044.72E-041.82E-036.73E-032.75E-041.35E-036.10E-032.73E-02 + 42M1 500.002.41E-057.68E-052.17E-045.95E-046.60E-052.23E-046.77E-042.02E-03 + 42M2 1.414.94E+011.24E+074.79E+102.82E+131.20E+022.66E+051.19E+082.90E+10 + 42M2 2.411.62E+018.35E+051.54E+096.75E+112.35E+012.49E+048.27E+061.87E+09 + 42M2 4.413.61E+004.00E+043.48E+071.01E+103.74E+001.87E+034.11E+056.99E+07 + 42M2 8.415.87E-011.57E+036.52E+051.15E+085.20E-011.25E+021.69E+041.88E+06 + 42M2 15.419.08E-027.68E+011.65E+041.76E+068.11E-021.04E+018.53E+025.97E+04 + 42M2 25.001.86E-026.98E+008.95E+026.31E+041.83E-021.44E+007.85E+013.71E+03 + 42M2 40.003.76E-036.92E-015.43E+012.53E+034.31E-032.14E-017.77E+002.47E+02 + 42M2 52.001.51E-031.92E-011.15E+014.24E+021.92E-037.43E-022.14E+005.44E+01 + 42M2 70.005.28E-044.55E-022.02E+005.69E+017.68E-042.25E-025.01E-019.85E+00 + 42M2 103.001.34E-047.14E-032.16E-014.32E+002.34E-044.82E-037.68E-021.09E+00 + 42M2 150.003.52E-051.22E-032.56E-023.70E-017.39E-051.09E-031.27E-021.32E-01 + 42M2 280.004.07E-067.17E-058.57E-047.38E-031.11E-059.87E-056.98E-044.42E-03 + 42M2 500.006.07E-076.16E-064.57E-052.55E-041.98E-061.16E-055.44E-052.29E-04 + 42M3 1.391.01E+022.37E+079.29E+105.46E+133.81E+019.35E+062.95E+119.13E+14 + 42M3 2.393.16E+011.54E+062.86E+091.24E+127.32E+006.25E+057.04E+099.79E+12 + 42M3 4.396.75E+007.18E+046.20E+071.77E+101.14E+003.01E+041.11E+086.83E+10 + 42M3 8.391.05E+002.73E+031.11E+061.94E+081.58E-011.19E+031.42E+064.02E+08 + 42M3 15.391.58E-011.28E+022.67E+042.82E+062.47E-025.80E+012.62E+043.80E+06 + 42M3 25.003.14E-021.11E+011.38E+039.51E+045.62E-035.22E+001.16E+031.02E+05 + 42M3 40.006.15E-031.05E+007.84E+013.56E+031.34E-035.13E-016.08E+013.34E+03 + 42M3 52.002.43E-032.81E-011.59E+015.67E+026.01E-041.42E-011.21E+015.16E+02 + 42M3 70.008.36E-046.33E-022.61E+007.11E+012.43E-043.34E-022.01E+006.46E+01 + 42M3 103.002.07E-049.21E-032.53E-014.83E+007.50E-055.21E-032.04E-014.61E+00 + 42M3 150.005.36E-051.44E-032.65E-023.59E-012.41E-058.83E-042.34E-023.79E-01 + 42M3 280.006.13E-067.20E-056.85E-045.29E-033.82E-065.10E-057.31E-047.15E-03 + 42M3 500.009.59E-075.40E-062.80E-051.31E-047.52E-074.24E-063.48E-052.24E-04 + 42M4 1.231.46E+025.54E+055.12E+101.03E+157.93E+001.94E+053.15E+095.79E+12 + 42M4 2.231.88E+012.61E+047.72E+085.98E+121.09E+009.68E+035.99E+076.78E+10 + 42M4 4.231.74E+009.65E+028.32E+062.51E+101.22E-013.80E+029.02E+055.83E+08 + 42M4 8.231.23E-012.99E+017.42E+049.08E+071.17E-021.29E+011.23E+044.32E+06 + 42M4 15.239.31E-031.13E+009.44E+025.32E+051.24E-035.64E-012.45E+024.81E+04 + 42M4 25.001.07E-037.71E-022.83E+018.78E+031.95E-044.50E-021.08E+011.31E+03 + 42M4 40.001.30E-045.87E-031.03E+001.85E+023.25E-054.09E-035.68E-014.42E+01 + 42M4 52.003.97E-051.38E-031.64E-012.19E+011.18E-051.07E-031.11E-016.73E+00 + 42M4 70.001.02E-052.69E-042.07E-021.97E+003.71E-062.35E-041.76E-028.07E-01 + 42M4 103.001.75E-063.25E-051.45E-038.99E-028.16E-073.31E-051.64E-035.26E-02 + 42M4 150.003.26E-074.23E-061.13E-044.66E-031.85E-074.94E-061.67E-043.81E-03 + 42M5 1.232.15E+027.68E+057.89E+101.53E+154.99E+002.49E+041.47E+101.28E+15 + 42M5 2.232.73E+013.58E+041.18E+098.71E+126.98E-011.28E+032.27E+086.32E+12 + 42M5 4.232.50E+001.31E+031.26E+073.60E+108.05E-025.24E+012.58E+062.18E+10 + 42M5 8.231.76E-014.01E+011.11E+051.28E+088.01E-031.91E+002.46E+046.48E+07 + 42M5 15.231.31E-021.49E+001.38E+037.30E+058.90E-049.09E-023.37E+023.28E+05 + 42M5 25.001.49E-039.99E-024.06E+011.17E+041.45E-047.86E-031.08E+015.01E+03 + 42M5 40.001.80E-047.43E-031.44E+002.37E+022.51E-057.78E-044.16E-011.02E+02 + 42M5 52.005.48E-051.72E-032.23E-012.70E+019.32E-062.15E-046.85E-021.20E+01 + 42M5 70.001.41E-053.27E-042.73E-022.34E+003.02E-065.02E-058.98E-031.09E+00 + 42M5 103.002.38E-063.82E-051.81E-039.87E-026.98E-077.74E-066.58E-045.10E-02 + 42M5 150.004.32E-074.80E-061.32E-044.65E-031.68E-071.28E-065.37E-052.72E-03 + 42N+ 50.002.94E-031.13E-015.69E+002.18E+026.28E-032.02E-016.59E+002.13E+02 + 42N+ 70.001.12E-032.56E-027.96E-012.13E+012.37E-034.99E-021.06E+002.30E+01 + 42N+ 100.003.98E-045.70E-031.06E-011.91E+008.62E-041.20E-021.67E-012.42E+00 + 42N+ 150.001.23E-041.12E-031.20E-021.36E-012.80E-042.54E-032.29E-022.16E-01 + 42N+ 200.005.40E-053.73E-042.81E-032.28E-021.29E-048.94E-046.07E-034.28E-02 + 42N+ 500.004.72E-061.60E-055.17E-051.71E-041.27E-054.42E-051.42E-044.59E-04 + 43K 22.047.81E+004.39E+015.73E+014.18E+011.98E+017.63E+024.92E+038.60E+03 + 43K 22.747.19E+004.60E+019.57E+011.38E+021.80E+016.76E+024.94E+031.37E+04 + 43K 24.046.22E+004.73E+011.58E+024.27E+021.53E+015.45E+024.70E+032.09E+04 + 43K 27.244.47E+004.30E+012.43E+021.23E+031.06E+013.36E+023.61E+032.68E+04 + 43K 31.043.15E+003.45E+012.52E+021.70E+037.19E+002.03E+022.44E+032.31E+04 + 43K 35.002.27E+002.64E+012.18E+021.69E+035.05E+001.28E+021.60E+031.70E+04 + 43K 41.001.47E+001.76E+011.56E+021.32E+033.17E+006.93E+018.78E+029.88E+03 + 43K 49.008.96E-011.05E+019.51E+018.24E+021.88E+003.50E+014.27E+024.81E+03 + 43K 61.004.82E-015.31E+004.63E+013.87E+029.99E-011.53E+011.71E+021.81E+03 + 43K 74.002.78E-012.82E+002.30E+011.80E+025.74E-017.40E+007.47E+017.28E+02 + 43K 91.001.53E-011.40E+001.04E+017.41E+013.19E-013.45E+003.07E+012.68E+02 + 43K 104.001.04E-018.82E-016.12E+004.08E+012.20E-012.12E+001.73E+011.39E+02 + 43K 121.006.71E-025.20E-013.32E+002.03E+011.44E-011.23E+009.09E+006.62E+01 + 43K 144.004.05E-022.82E-011.63E+009.02E+008.97E-026.65E-014.36E+002.82E+01 + 43K 170.002.51E-021.57E-018.22E-014.13E+005.73E-023.74E-012.18E+001.26E+01 + 43K 235.001.00E-025.06E-022.18E-019.01E-012.44E-021.26E-015.87E-012.71E+00 + 43K 320.004.32E-031.78E-026.39E-022.20E-011.11E-024.67E-021.77E-016.66E-01 + 43K 410.002.26E-038.01E-032.50E-027.53E-026.03E-032.18E-027.10E-022.27E-01 + 43K 520.001.26E-033.92E-031.08E-022.87E-023.41E-031.08E-023.08E-028.53E-02 + 43K 750.005.55E-041.45E-033.36E-037.53E-031.46E-033.91E-039.22E-032.10E-02 + 43K 1000.003.11E-047.26E-041.50E-032.99E-037.73E-041.84E-033.85E-037.70E-03 + 43K 1250.002.07E-044.45E-048.57E-041.57E-034.81E-041.06E-032.04E-033.74E-03 + 43K 1500.001.51E-043.07E-045.59E-049.69E-043.30E-046.87E-041.24E-032.15E-03 + 43L1 4.042.29E+018.13E+031.58E+067.22E+073.47E+023.81E+057.01E+073.70E+09 + 43L1 4.741.73E+013.15E+038.82E+056.41E+072.15E+021.78E+052.88E+071.86E+09 + 43L1 6.041.10E+016.35E+022.77E+052.82E+071.04E+025.64E+047.46E+065.29E+08 + 43L1 9.244.65E+001.28E+012.26E+042.97E+062.93E+017.78E+037.08E+054.58E+07 + 43L1 13.042.18E+004.39E+001.88E+033.10E+051.05E+011.62E+031.08E+055.77E+06 + 43L1 17.001.18E+006.70E+001.78E+024.29E+044.75E+004.93E+022.58E+041.16E+06 + 43L1 23.005.66E-015.17E+001.41E+013.28E+031.94E+001.31E+025.18E+031.84E+05 + 43L1 31.002.67E-012.89E+001.38E+011.99E+028.00E-013.63E+011.09E+033.05E+04 + 43L1 43.001.14E-011.26E+008.73E+004.78E+013.06E-019.21E+002.05E+024.34E+03 + 43L1 56.005.60E-025.85E-014.35E+002.73E+011.42E-013.13E+005.46E+019.24E+02 + 43L1 73.002.71E-022.57E-011.85E+001.20E+016.63E-021.09E+001.49E+012.01E+02 + 43L1 86.001.72E-021.51E-011.04E+006.59E+004.16E-025.75E-016.81E+007.95E+01 + 43L1 103.001.04E-028.32E-025.34E-013.21E+002.51E-022.89E-012.91E+002.91E+01 + 43L1 126.005.89E-034.22E-022.47E-011.37E+001.43E-021.36E-011.15E+009.69E+00 + 43L1 155.003.28E-032.08E-021.10E-015.52E-018.14E-036.40E-024.55E-013.22E+00 + 43L1 220.001.23E-036.32E-032.76E-021.15E-013.20E-031.88E-021.01E-015.36E-01 + 43L1 305.005.10E-042.13E-037.77E-032.73E-021.38E-036.35E-032.66E-021.11E-01 + 43L1 390.002.70E-049.74E-043.11E-039.62E-037.48E-042.92E-031.03E-023.60E-02 + 43L1 500.001.46E-044.62E-041.30E-033.55E-034.10E-041.38E-034.17E-031.23E-02 + 43L1 730.006.24E-051.65E-043.91E-048.97E-041.70E-044.70E-041.16E-032.75E-03 + 43L11000.003.31E-057.77E-051.63E-043.28E-048.42E-052.04E-044.35E-048.91E-04 + 43L2 3.794.59E+015.51E+054.18E+084.77E+103.84E+011.67E+041.45E+066.17E+07 + 43L2 4.492.83E+012.34E+051.53E+082.10E+102.28E+018.53E+038.91E+055.69E+07 + 43L2 5.791.33E+016.51E+043.35E+074.97E+091.04E+013.10E+033.49E+052.80E+07 + 43L2 8.993.45E+007.12E+032.41E+063.18E+082.68E+005.30E+025.34E+044.27E+06 + 43L2 12.791.12E+001.22E+032.92E+053.16E+079.02E-011.28E+021.06E+047.30E+05 + 43L2 17.004.40E-012.95E+025.32E+044.74E+063.74E-014.07E+012.79E+031.61E+05 + 43L2 23.001.59E-016.56E+018.74E+036.19E+051.47E-011.20E+016.56E+023.08E+04 + 43L2 31.005.72E-021.50E+011.48E+038.22E+045.85E-023.60E+001.55E+025.80E+03 + 43L2 43.001.83E-022.99E+002.13E+028.97E+032.13E-029.63E-013.17E+019.13E+02 + 43L2 56.007.18E-038.23E-014.49E+011.51E+039.40E-033.33E-018.77E+002.03E+02 + 43L2 73.002.79E-032.27E-019.53E+002.54E+024.15E-031.15E-012.42E+004.50E+01 + 43L2 86.001.56E-031.03E-013.69E+008.52E+012.50E-035.99E-021.10E+001.78E+01 + 43L2 103.008.16E-044.36E-021.31E+002.58E+011.44E-032.93E-024.60E-016.42E+00 + 43L2 126.003.98E-041.68E-024.14E-016.88E+007.74E-041.32E-021.75E-012.07E+00 + 43L2 155.001.91E-046.37E-031.29E-011.80E+004.11E-045.86E-036.55E-026.54E-01 + 43L2 220.005.59E-051.28E-031.89E-021.96E-011.42E-041.51E-031.28E-029.64E-02 + 43L2 305.001.83E-053.00E-043.33E-032.67E-025.29E-054.37E-042.88E-031.70E-02 + 43L2 390.008.16E-061.05E-049.48E-046.30E-032.54E-051.75E-049.69E-044.80E-03 + 43L2 500.003.70E-063.76E-052.79E-041.55E-031.22E-057.11E-053.32E-041.39E-03 + 43L2 730.001.16E-068.56E-064.80E-052.08E-044.05E-061.88E-056.96E-052.32E-04 + 43L21000.004.66E-072.73E-061.24E-054.43E-051.65E-066.48E-062.03E-055.73E-05 + 43L3 3.689.32E+011.13E+069.04E+081.08E+111.27E+014.52E+052.16E+091.04E+12 + 43L3 4.385.60E+014.66E+053.17E+084.52E+107.42E+001.89E+056.61E+082.72E+11 + 43L3 5.682.57E+011.25E+056.60E+071.00E+103.33E+005.17E+041.14E+083.70E+10 + 43L3 8.886.35E+001.29E+044.40E+065.87E+088.38E-015.57E+035.75E+061.23E+09 + 43L3 12.682.00E+002.12E+035.06E+055.49E+072.79E-019.43E+025.51E+058.43E+07 + 43L3 17.007.50E-014.81E+028.50E+047.51E+061.13E-012.19E+028.19E+049.51E+06 + 43L3 23.002.67E-011.04E+021.35E+049.46E+054.47E-024.89E+011.18E+041.03E+06 + 43L3 31.009.42E-022.31E+012.20E+031.20E+051.79E-021.11E+011.80E+031.18E+05 + 43L3 43.002.95E-024.44E+003.01E+021.24E+046.54E-032.22E+002.35E+021.15E+04 + 43L3 56.001.14E-021.18E+006.05E+011.98E+032.91E-036.10E-014.68E+011.79E+03 + 43L3 73.004.36E-033.11E-011.21E+013.12E+021.29E-031.68E-019.50E+002.85E+02 + 43L3 86.002.40E-031.37E-014.50E+009.99E+017.84E-047.62E-023.59E+009.29E+01 + 43L3 103.001.25E-035.56E-021.51E+002.86E+014.52E-043.21E-021.24E+002.75E+01 + 43L3 126.006.01E-042.05E-024.51E-017.09E+002.45E-041.23E-023.86E-017.16E+00 + 43L3 155.002.86E-047.38E-031.31E-011.71E+001.31E-044.65E-031.18E-011.84E+00 + 43L3 220.008.33E-051.35E-031.66E-021.58E-014.63E-059.24E-041.67E-021.95E-01 + 43L3 305.002.75E-052.91E-042.52E-031.80E-021.79E-052.13E-042.82E-032.56E-02 + 43L3 390.001.23E-059.53E-056.39E-043.68E-038.90E-067.31E-057.66E-045.83E-03 + 43L3 500.005.70E-063.24E-051.68E-047.84E-044.49E-062.58E-052.12E-041.36E-03 + 43L3 730.001.90E-067.04E-062.51E-058.65E-051.67E-065.79E-063.25E-051.63E-04 + 43L31000.008.48E-072.25E-066.03E-061.64E-057.77E-071.88E-067.47E-063.04E-05 + 43M1 1.542.09E+016.23E+043.59E+063.78E+091.12E+038.35E+061.01E+103.48E+12 + 43M1 2.541.02E+016.84E+031.75E+065.57E+072.51E+027.24E+054.25E+081.08E+11 + 43M1 4.543.60E+003.13E+021.62E+051.94E+074.42E+014.39E+041.20E+071.97E+09 + 43M1 8.549.88E-012.21E+004.90E+037.59E+056.68E+002.22E+032.83E+052.76E+07 + 43M1 15.542.56E-011.48E+006.06E+011.39E+041.12E+001.43E+029.45E+035.41E+05 + 43M1 25.008.08E-028.27E-013.05E+002.87E+022.73E-011.74E+017.03E+022.61E+04 + 43M1 40.002.42E-022.70E-011.82E+001.19E+016.83E-022.34E+005.92E+011.43E+03 + 43M1 52.001.21E-021.28E-019.47E-015.99E+003.18E-027.91E-011.55E+012.94E+02 + 43M1 70.005.38E-035.15E-023.73E-012.43E+001.35E-022.39E-013.53E+005.11E+01 + 43M1 103.001.84E-031.47E-029.36E-025.60E-014.53E-035.33E-025.51E-015.65E+00 + 43M1 150.006.41E-044.13E-032.20E-021.12E-011.61E-031.32E-029.82E-027.27E-01 + 43M1 280.001.14E-045.03E-041.92E-037.06E-033.10E-041.53E-036.87E-033.07E-02 + 43M1 500.002.62E-058.29E-052.33E-046.38E-047.38E-052.50E-047.59E-042.26E-03 + 43M2 1.444.78E+011.25E+074.78E+102.73E+131.28E+022.80E+051.21E+082.80E+10 + 43M2 2.441.62E+018.85E+051.64E+096.99E+112.58E+012.73E+048.84E+061.92E+09 + 43M2 4.443.73E+004.39E+043.83E+071.09E+104.19E+002.09E+034.52E+057.49E+07 + 43M2 8.446.23E-011.76E+037.30E+051.28E+085.90E-011.42E+021.89E+042.06E+06 + 43M2 15.449.83E-028.68E+011.86E+041.98E+069.29E-021.18E+019.63E+026.67E+04 + 43M2 25.002.05E-027.99E+001.03E+037.21E+042.12E-021.66E+008.98E+014.21E+03 + 43M2 40.004.18E-037.94E-016.25E+012.90E+034.99E-032.47E-018.91E+002.81E+02 + 43M2 52.001.68E-032.21E-011.33E+014.86E+022.23E-038.59E-022.46E+006.21E+01 + 43M2 70.005.93E-045.23E-022.32E+006.54E+018.92E-042.61E-025.77E-011.13E+01 + 43M2 103.001.51E-048.23E-032.49E-014.98E+002.73E-045.59E-038.88E-021.25E+00 + 43M2 150.004.01E-051.40E-032.97E-024.28E-018.63E-051.27E-031.47E-021.52E-01 + 43M2 280.004.62E-068.31E-059.97E-048.58E-031.30E-051.15E-048.13E-045.13E-03 + 43M2 500.007.03E-077.17E-065.34E-052.98E-042.32E-061.36E-056.37E-052.68E-04 + 43M3 1.429.87E+012.39E+079.32E+105.31E+134.01E+019.95E+063.14E+119.69E+14 + 43M3 2.423.18E+011.64E+063.04E+091.28E+127.94E+006.98E+057.99E+091.12E+13 + 43M3 4.426.98E+007.86E+046.80E+071.91E+101.26E+003.46E+041.30E+088.12E+10 + 43M3 8.421.12E+003.04E+031.24E+062.13E+081.77E-011.39E+031.70E+064.86E+08 + 43M3 15.421.70E-011.44E+023.01E+043.14E+062.78E-026.85E+013.16E+044.61E+06 + 43M3 25.003.44E-021.27E+011.57E+031.08E+056.37E-036.23E+001.41E+031.24E+05 + 43M3 40.006.80E-031.19E+008.95E+014.04E+031.52E-036.11E-017.37E+014.05E+03 + 43M3 52.002.69E-033.20E-011.81E+016.45E+026.81E-041.69E-011.46E+016.24E+02 + 43M3 70.009.31E-047.22E-022.99E+008.09E+012.75E-043.97E-022.42E+007.77E+01 + 43M3 103.002.32E-041.05E-022.89E-015.51E+008.52E-056.18E-032.44E-015.52E+00 + 43M3 150.006.03E-051.65E-033.04E-024.11E-012.74E-051.04E-032.78E-024.52E-01 + 43M3 280.006.86E-068.24E-057.87E-046.07E-034.35E-065.98E-058.66E-048.49E-03 + 43M3 500.001.07E-066.18E-063.22E-051.51E-048.56E-074.94E-064.11E-052.65E-04 + 43M4 1.261.50E+025.77E+055.38E+101.09E+158.63E+002.13E+053.49E+096.26E+12 + 43M4 2.262.02E+012.86E+048.67E+086.81E+121.23E+001.12E+047.01E+077.82E+10 + 43M4 4.261.93E+001.09E+039.74E+062.98E+101.41E-014.53E+021.09E+066.97E+08 + 43M4 8.261.41E-013.45E+018.88E+041.10E+081.37E-021.57E+011.51E+045.27E+06 + 43M4 15.261.08E-021.32E+001.14E+036.52E+051.48E-036.89E-013.02E+025.92E+04 + 43M4 25.001.27E-039.19E-023.47E+011.09E+042.35E-045.56E-021.34E+011.64E+03 + 43M4 40.001.55E-047.05E-031.27E+002.30E+023.93E-055.05E-037.08E-015.51E+01 + 43M4 52.004.75E-051.67E-032.02E-012.72E+011.43E-051.33E-031.38E-018.39E+00 + 43M4 70.001.23E-053.25E-042.55E-022.45E+004.51E-062.92E-042.20E-021.01E+00 + 43M4 103.002.13E-063.93E-051.78E-031.12E-019.94E-074.10E-052.05E-036.56E-02 + 43M4 150.003.89E-075.15E-061.40E-045.81E-032.27E-076.13E-062.09E-044.76E-03 + 43M4 280.002.44E-081.98E-072.38E-065.00E-051.97E-082.73E-075.06E-066.78E-05 + 43M4 500.002.28E-091.15E-087.04E-087.80E-072.11E-091.63E-081.79E-071.54E-06 + 43M5 1.252.21E+027.97E+058.30E+101.61E+155.42E+002.72E+041.63E+101.43E+15 + 43M5 2.252.93E+013.90E+041.32E+099.92E+127.83E-011.46E+032.69E+087.64E+12 + 43M5 4.252.78E+001.47E+031.47E+074.27E+109.24E-026.14E+013.17E+062.76E+10 + 43M5 8.252.00E-014.61E+011.33E+051.55E+089.35E-032.28E+003.09E+048.36E+07 + 43M5 15.251.52E-021.74E+001.68E+038.93E+051.05E-031.09E-014.27E+024.25E+05 + 43M5 25.001.76E-031.18E-014.98E+011.45E+041.73E-049.51E-031.38E+016.55E+03 + 43M5 40.002.14E-048.86E-031.77E+002.93E+023.01E-059.42E-045.32E-011.33E+02 + 43M5 52.006.52E-052.06E-032.75E-013.35E+011.12E-052.60E-048.74E-021.56E+01 + 43M5 70.001.68E-053.93E-043.36E-022.90E+003.64E-066.09E-051.14E-021.41E+00 + 43M5 103.002.91E-064.60E-052.22E-031.22E-018.43E-079.39E-068.34E-046.55E-02 + 43M5 150.005.37E-075.83E-061.62E-045.77E-032.04E-071.56E-066.79E-053.48E-03 + 43M5 280.003.68E-082.15E-072.39E-063.99E-052.05E-088.86E-081.21E-063.05E-05 + 43M5 500.003.73E-091.28E-086.34E-084.89E-072.77E-097.47E-093.87E-084.53E-07 + 43N+ 50.003.31E-031.32E-016.85E+002.64E+027.53E-032.46E-018.17E+002.67E+02 + 43N+ 70.001.26E-032.97E-029.52E-012.57E+012.84E-036.05E-021.30E+002.86E+01 + 43N+ 100.004.50E-046.57E-031.26E-012.30E+001.03E-031.44E-022.04E-012.98E+00 + 43N+ 150.001.40E-041.29E-031.41E-021.62E-013.34E-043.05E-032.78E-022.63E-01 + 43N+ 200.006.15E-054.26E-043.27E-032.70E-021.54E-041.07E-037.31E-035.19E-02 + 43N+ 500.005.40E-061.83E-055.97E-051.99E-041.50E-055.24E-051.69E-045.48E-04 + 44K 23.127.10E+003.77E+014.54E+012.96E+011.91E+017.00E+024.27E+036.91E+03 + 44K 23.826.56E+003.95E+017.53E+019.77E+011.75E+016.23E+024.29E+031.10E+04 + 44K 25.125.71E+004.07E+011.25E+023.06E+021.50E+015.08E+024.11E+031.68E+04 + 44K 28.324.16E+003.75E+011.96E+029.07E+021.05E+013.19E+023.22E+032.22E+04 + 44K 32.122.97E+003.06E+012.08E+021.30E+037.24E+001.96E+022.23E+031.97E+04 + 44K 36.002.18E+002.39E+011.85E+021.34E+035.17E+001.26E+021.51E+031.50E+04 + 44K 42.001.43E+001.62E+011.36E+021.09E+033.29E+006.99E+018.44E+029.01E+03 + 44K 50.008.80E-019.88E+008.51E+017.02E+021.97E+003.59E+014.20E+024.53E+03 + 44K 62.004.80E-015.09E+004.26E+013.42E+021.06E+001.59E+011.72E+021.76E+03 + 44K 75.002.79E-012.74E+002.16E+011.64E+026.13E-017.78E+007.64E+017.23E+02 + 44K 92.001.55E-011.38E+009.96E+006.91E+013.43E-013.66E+003.19E+012.71E+02 + 44K 105.001.06E-018.77E-015.93E+003.85E+012.37E-012.26E+001.81E+011.42E+02 + 44K 122.006.88E-025.21E-013.25E+001.95E+011.56E-011.32E+009.57E+006.84E+01 + 44K 145.004.18E-022.85E-011.61E+008.77E+009.73E-027.15E-014.62E+002.95E+01 + 44K 170.002.65E-021.63E-018.42E-014.17E+006.33E-024.12E-012.38E+001.37E+01 + 44K 235.001.06E-025.28E-022.26E-019.23E-012.69E-021.38E-016.41E-012.95E+00 + 44K 320.004.58E-031.87E-026.66E-022.28E-011.22E-025.13E-021.94E-017.24E-01 + 44K 410.002.40E-038.45E-032.62E-027.85E-026.62E-032.39E-027.75E-022.47E-01 + 44K 520.001.34E-034.15E-031.14E-023.01E-023.73E-031.19E-023.36E-029.29E-02 + 44K 750.005.92E-041.54E-033.57E-037.98E-031.59E-034.27E-031.01E-022.29E-02 + 44K 1000.003.33E-047.74E-041.61E-033.19E-038.42E-042.01E-034.20E-038.39E-03 + 44K 1250.002.21E-044.76E-049.17E-041.68E-035.22E-041.15E-032.22E-034.07E-03 + 44K 1500.001.61E-043.28E-045.99E-041.04E-033.57E-047.48E-041.35E-032.34E-03 + 44L1 4.222.10E+017.35E+031.32E+065.43E+073.42E+023.58E+056.30E+073.09E+09 + 44L1 4.921.61E+012.98E+037.66E+055.08E+072.16E+021.72E+052.68E+071.62E+09 + 44L1 6.221.04E+016.46E+022.55E+052.41E+071.07E+025.68E+047.26E+064.87E+08 + 44L1 9.424.51E+001.70E+012.30E+042.82E+063.10E+018.19E+037.29E+054.53E+07 + 44L1 13.222.15E+003.29E+002.12E+033.19E+051.13E+011.74E+031.14E+055.95E+06 + 44L1 17.001.20E+005.64E+002.52E+025.11E+045.33E+005.64E+022.94E+041.30E+06 + 44L1 23.005.83E-014.76E+001.59E+014.27E+032.17E+001.49E+025.88E+032.07E+05 + 44L1 31.002.76E-012.78E+001.15E+012.73E+028.98E-014.12E+011.23E+033.43E+04 + 44L1 43.001.18E-011.24E+007.95E+004.37E+013.43E-011.04E+012.31E+024.88E+03 + 44L1 56.005.84E-025.87E-014.14E+002.46E+011.59E-013.53E+006.15E+011.04E+03 + 44L1 73.002.84E-022.61E-011.81E+001.13E+017.42E-021.23E+001.68E+012.25E+02 + 44L1 86.001.80E-021.54E-011.03E+006.31E+004.65E-026.47E-017.64E+008.88E+01 + 44L1 103.001.09E-028.55E-025.34E-013.13E+002.80E-023.24E-013.26E+003.25E+01 + 44L1 126.006.20E-034.36E-022.50E-011.36E+001.60E-021.52E-011.29E+001.08E+01 + 44L1 155.003.47E-032.17E-021.12E-015.54E-019.07E-037.15E-025.07E-013.58E+00 + 44L1 220.001.31E-036.62E-032.85E-021.18E-013.56E-032.09E-021.12E-015.95E-01 + 44L1 305.005.43E-042.25E-038.12E-032.83E-021.53E-037.05E-032.95E-021.22E-01 + 44L1 390.002.88E-041.03E-033.28E-031.01E-028.28E-043.24E-031.14E-023.99E-02 + 44L1 500.001.56E-044.92E-041.38E-033.76E-034.52E-041.52E-034.61E-031.36E-02 + 44L1 730.006.69E-051.77E-044.19E-049.59E-041.87E-045.19E-041.28E-033.04E-03 + 44L11000.003.56E-058.36E-051.75E-043.53E-049.23E-052.25E-044.80E-049.81E-04 + 44L11500.001.73E-053.55E-056.54E-051.15E-043.91E-058.28E-051.52E-042.67E-04 + 44L2 3.974.24E+014.93E+053.56E+083.77E+103.78E+011.56E+041.25E+064.82E+07 + 44L2 4.672.66E+012.17E+051.36E+081.74E+102.29E+018.20E+037.99E+054.67E+07 + 44L2 5.971.29E+016.30E+043.13E+074.39E+091.08E+013.08E+033.28E+052.46E+07 + 44L2 9.173.47E+007.27E+032.40E+063.05E+082.86E+005.51E+025.33E+044.08E+06 + 44L2 12.971.15E+001.28E+033.01E+053.18E+079.80E-011.36E+021.10E+047.30E+05 + 44L2 17.004.75E-013.31E+025.97E+045.24E+064.25E-014.58E+013.09E+031.75E+05 + 44L2 23.001.73E-017.37E+019.82E+036.88E+051.67E-011.35E+017.31E+023.38E+04 + 44L2 31.006.24E-021.68E+011.66E+039.17E+046.65E-024.07E+001.74E+026.42E+03 + 44L2 43.002.00E-023.37E+002.40E+021.01E+042.42E-021.09E+003.56E+011.02E+03 + 44L2 56.007.91E-039.29E-015.07E+011.69E+031.07E-023.78E-019.88E+002.27E+02 + 44L2 73.003.09E-032.57E-011.08E+012.86E+024.74E-031.31E-012.74E+005.05E+01 + 44L2 86.001.72E-031.17E-014.17E+009.61E+012.86E-036.81E-021.24E+002.00E+01 + 44L2 103.009.06E-044.94E-021.48E+002.91E+011.64E-033.33E-025.21E-017.23E+00 + 44L2 126.004.43E-041.90E-024.71E-017.78E+008.87E-041.50E-021.99E-012.34E+00 + 44L2 155.002.13E-047.23E-031.47E-012.04E+004.71E-046.69E-037.45E-027.40E-01 + 44L2 220.006.27E-051.46E-032.15E-022.23E-011.63E-041.73E-031.46E-021.10E-01 + 44L2 305.002.06E-053.43E-043.81E-033.05E-026.09E-055.02E-043.30E-031.94E-02 + 44L2 390.009.19E-061.20E-041.08E-037.20E-032.92E-052.02E-041.11E-035.49E-03 + 44L2 500.004.17E-064.30E-053.20E-041.78E-031.41E-058.20E-053.82E-041.60E-03 + 44L2 730.001.32E-069.81E-065.52E-052.39E-044.68E-062.17E-058.03E-052.67E-04 + 44L21000.005.33E-073.13E-061.42E-055.11E-051.91E-067.49E-062.35E-056.61E-05 + 44L21500.001.83E-078.06E-072.87E-068.35E-066.20E-072.03E-065.30E-061.24E-05 + 44L3 3.848.62E+011.01E+067.75E+088.63E+101.24E+014.27E+051.96E+099.04E+11 + 44L3 4.545.29E+014.33E+052.83E+083.79E+107.37E+001.85E+056.27E+082.49E+11 + 44L3 5.842.49E+011.21E+056.20E+078.92E+093.39E+005.27E+041.14E+083.60E+10 + 44L3 9.046.38E+001.32E+044.39E+065.65E+088.81E-015.95E+036.15E+061.29E+09 + 44L3 12.842.05E+002.22E+035.22E+055.52E+072.99E-011.04E+036.08E+059.17E+07 + 44L3 17.008.05E-015.37E+029.49E+048.26E+061.26E-012.56E+029.80E+041.13E+07 + 44L3 23.002.88E-011.17E+021.51E+041.04E+064.97E-025.71E+011.41E+041.23E+06 + 44L3 31.001.02E-012.58E+012.46E+031.33E+051.99E-021.30E+012.13E+031.40E+05 + 44L3 43.003.21E-024.97E+003.37E+021.38E+047.28E-032.59E+002.78E+021.35E+04 + 44L3 56.001.24E-021.31E+006.78E+012.20E+033.24E-037.11E-015.52E+012.10E+03 + 44L3 73.004.78E-033.48E-011.36E+013.48E+021.44E-031.96E-011.12E+013.35E+02 + 44L3 86.002.64E-031.53E-015.04E+001.12E+028.74E-048.86E-024.21E+001.09E+02 + 44L3 103.001.37E-036.24E-021.70E+003.19E+015.05E-043.73E-021.46E+003.21E+01 + 44L3 126.006.63E-042.29E-025.06E-017.93E+002.74E-041.43E-024.52E-018.37E+00 + 44L3 155.003.16E-048.28E-031.47E-011.91E+001.47E-045.38E-031.38E-012.15E+00 + 44L3 220.009.21E-051.52E-031.86E-021.77E-015.17E-051.06E-031.94E-022.27E-01 + 44L3 305.003.04E-053.26E-042.84E-032.02E-022.00E-052.45E-043.27E-032.97E-02 + 44L3 390.001.37E-051.07E-047.20E-044.14E-039.94E-068.38E-058.87E-046.76E-03 + 44L3 500.006.36E-063.64E-051.89E-048.83E-045.01E-062.94E-052.45E-041.58E-03 + 44L3 730.002.15E-067.89E-062.83E-059.75E-051.86E-066.57E-063.74E-051.88E-04 + 44L31000.009.40E-072.52E-066.78E-061.85E-058.67E-072.12E-068.55E-063.50E-05 + 44L31500.003.68E-077.01E-071.37E-062.83E-063.55E-075.99E-071.51E-064.59E-06 + 44M1 1.581.99E+016.06E+043.09E+063.76E+091.18E+038.68E+061.04E+103.45E+12 + 44M1 2.589.92E+007.10E+031.64E+064.56E+072.72E+027.90E+054.64E+081.15E+11 + 44M1 4.583.59E+003.56E+021.67E+051.84E+074.88E+014.94E+041.35E+072.20E+09 + 44M1 8.581.00E+003.28E+005.54E+038.03E+057.48E+002.53E+033.25E+053.14E+07 + 44M1 15.582.63E-011.28E+008.09E+011.63E+041.26E+001.64E+021.09E+046.18E+05 + 44M1 25.008.42E-027.90E-012.90E+003.83E+023.10E-012.01E+018.14E+023.02E+04 + 44M1 40.002.54E-022.69E-011.67E+001.23E+017.75E-022.69E+006.80E+011.64E+03 + 44M1 52.001.27E-021.29E-019.04E-015.56E+003.60E-029.06E-011.77E+013.36E+02 + 44M1 70.005.69E-035.28E-023.67E-012.31E+001.53E-022.73E-014.02E+005.82E+01 + 44M1 103.001.96E-031.53E-029.46E-025.52E-015.12E-036.06E-026.26E-016.41E+00 + 44M1 150.006.86E-044.34E-032.27E-021.14E-011.81E-031.49E-021.11E-018.21E-01 + 44M1 280.001.23E-045.36E-042.02E-037.39E-033.48E-041.72E-037.73E-033.45E-02 + 44M1 500.002.84E-058.92E-052.50E-046.83E-048.25E-052.80E-048.50E-042.53E-03 + 44M2 1.484.58E+011.24E+074.70E+102.58E+131.35E+022.91E+051.21E+082.62E+10 + 44M2 2.481.61E+019.31E+051.72E+097.13E+112.82E+012.96E+049.31E+061.94E+09 + 44M2 4.483.83E+004.78E+044.17E+071.16E+104.68E+002.33E+034.92E+057.92E+07 + 44M2 8.486.58E-011.96E+038.13E+051.40E+086.68E-011.60E+022.10E+042.25E+06 + 44M2 15.481.06E-019.76E+012.10E+042.21E+061.06E-011.34E+011.08E+037.39E+04 + 44M2 25.002.25E-029.11E+001.17E+038.19E+042.44E-021.91E+001.02E+024.75E+03 + 44M2 40.004.63E-039.07E-017.15E+013.30E+035.76E-032.85E-011.02E+013.19E+02 + 44M2 52.001.87E-032.52E-011.52E+015.56E+022.57E-039.90E-022.82E+007.07E+01 + 44M2 70.006.64E-045.99E-022.67E+007.49E+011.03E-033.01E-026.62E-011.29E+01 + 44M2 103.001.70E-049.45E-032.87E-015.72E+003.16E-046.47E-031.02E-011.43E+00 + 44M2 150.004.53E-051.62E-033.43E-024.93E-011.00E-041.47E-031.70E-021.75E-01 + 44M2 280.005.29E-069.62E-051.16E-039.94E-031.52E-051.34E-049.44E-045.94E-03 + 44M2 500.008.09E-078.32E-066.21E-053.46E-042.72E-061.59E-057.43E-053.12E-04 + 44M3 1.469.51E+012.39E+079.20E+105.05E+134.18E+011.05E+073.28E+111.01E+15 + 44M3 2.463.17E+011.72E+063.19E+091.31E+128.55E+007.72E+058.95E+091.26E+13 + 44M3 4.467.18E+008.55E+047.40E+072.03E+101.39E+003.96E+041.53E+089.54E+10 + 44M3 8.461.18E+003.37E+031.38E+062.33E+081.96E-011.62E+032.03E+065.82E+08 + 44M3 15.461.83E-011.61E+023.37E+043.48E+063.11E-028.05E+013.80E+045.55E+06 + 44M3 25.003.76E-021.44E+011.78E+031.22E+057.18E-037.40E+001.71E+031.51E+05 + 44M3 40.007.49E-031.35E+001.02E+024.56E+031.71E-037.25E-018.88E+014.89E+03 + 44M3 52.002.98E-033.63E-012.06E+017.30E+027.70E-042.00E-011.76E+017.50E+02 + 44M3 70.001.03E-038.20E-023.40E+009.18E+013.12E-044.69E-022.89E+009.31E+01 + 44M3 103.002.58E-041.20E-023.30E-016.25E+009.65E-057.29E-032.91E-016.58E+00 + 44M3 150.006.75E-051.88E-033.47E-024.67E-013.11E-051.23E-033.31E-025.37E-01 + 44M3 280.007.79E-069.41E-058.99E-046.92E-034.94E-066.99E-051.02E-031.00E-02 + 44M3 500.001.21E-067.06E-063.69E-051.72E-049.71E-075.73E-064.82E-053.12E-04 + 44M4 1.281.53E+025.97E+055.60E+101.14E+159.34E+002.33E+053.81E+096.64E+12 + 44M4 2.282.15E+013.10E+049.65E+087.68E+121.38E+001.29E+048.13E+078.91E+10 + 44M4 4.282.13E+001.22E+031.13E+073.51E+101.62E-015.36E+021.30E+068.26E+08 + 44M4 8.281.60E-013.95E+011.05E+051.33E+081.60E-021.89E+011.84E+046.37E+06 + 44M4 15.281.25E-021.54E+001.37E+037.93E+051.75E-038.36E-013.71E+027.22E+04 + 44M4 25.001.49E-031.09E-014.23E+011.35E+042.81E-046.81E-021.66E+012.02E+03 + 44M4 40.001.84E-048.40E-031.55E+002.84E+024.72E-056.21E-038.77E-016.81E+01 + 44M4 52.005.64E-052.00E-032.46E-013.35E+011.72E-051.63E-031.71E-011.04E+01 + 44M4 70.001.47E-053.91E-043.11E-023.03E+005.44E-063.59E-042.73E-021.25E+00 + 44M4 103.002.52E-064.75E-052.18E-031.38E-011.20E-065.05E-052.54E-038.13E-02 + 44M4 150.004.57E-076.26E-061.71E-047.18E-032.75E-077.57E-062.59E-045.91E-03 + 44M4 280.002.98E-082.41E-072.92E-066.19E-052.39E-083.37E-076.30E-068.44E-05 + 44M4 500.002.82E-091.42E-088.71E-089.69E-072.57E-092.02E-082.23E-071.92E-06 + 44M5 1.282.26E+028.22E+058.68E+101.69E+155.85E+002.94E+041.79E+101.57E+15 + 44M5 2.283.13E+014.22E+041.48E+091.12E+138.75E-011.65E+033.15E+089.13E+12 + 44M5 4.283.07E+001.65E+031.71E+075.03E+101.06E-017.16E+013.86E+063.45E+10 + 44M5 8.282.27E-015.26E+011.58E+051.87E+081.08E-022.69E+003.84E+041.07E+08 + 44M5 15.281.75E-022.02E+002.02E+031.09E+061.23E-031.30E-015.36E+025.47E+05 + 44M5 25.002.06E-031.39E-016.08E+011.78E+042.05E-041.14E-021.75E+018.50E+03 + 44M5 40.002.53E-041.05E-022.15E+003.61E+023.59E-051.13E-036.74E-011.72E+02 + 44M5 52.007.74E-052.45E-033.35E-014.13E+011.34E-053.13E-041.11E-012.00E+01 + 44M5 70.002.01E-054.69E-044.10E-023.57E+004.37E-067.35E-051.44E-021.81E+00 + 44M5 103.003.50E-065.50E-052.71E-031.51E-011.01E-061.13E-051.05E-038.36E-02 + 44M5 150.006.54E-076.99E-061.99E-047.11E-032.46E-071.89E-068.52E-054.43E-03 + 44M5 280.004.59E-082.57E-072.93E-064.92E-052.47E-081.07E-071.51E-063.85E-05 + 44M5 500.004.66E-091.55E-087.69E-086.02E-073.35E-099.08E-094.77E-085.69E-07 + 44N+ 50.003.52E-031.48E-017.89E+003.05E+028.49E-032.83E-019.60E+003.19E+02 + 44N+ 70.001.34E-033.30E-021.09E+002.97E+013.20E-036.92E-021.52E+003.38E+01 + 44N+ 100.004.80E-047.22E-031.43E-012.64E+001.16E-031.64E-022.35E-013.48E+00 + 44N+ 150.001.49E-041.40E-031.58E-021.85E-013.75E-043.45E-033.17E-023.04E-01 + 44N+ 200.006.58E-054.61E-043.64E-033.07E-021.72E-041.21E-038.30E-035.94E-02 + 44N+ 500.005.82E-061.98E-056.50E-052.20E-041.66E-055.85E-051.89E-046.15E-04 + 45K 24.226.47E+003.25E+013.62E+012.13E+011.85E+016.44E+023.73E+035.59E+03 + 45K 24.925.99E+003.40E+015.98E+017.00E+011.70E+015.76E+023.75E+038.86E+03 + 45K 26.225.25E+003.51E+019.93E+012.21E+021.46E+014.73E+023.61E+031.37E+04 + 45K 29.423.88E+003.28E+011.58E+026.74E+021.04E+013.03E+022.88E+031.84E+04 + 45K 33.222.80E+002.72E+011.72E+029.98E+027.27E+001.90E+022.04E+031.68E+04 + 45K 37.002.09E+002.17E+011.56E+021.06E+035.30E+001.25E+021.42E+031.32E+04 + 45K 43.001.39E+001.49E+011.19E+028.92E+023.41E+007.04E+018.12E+028.22E+03 + 45K 51.008.66E-019.28E+007.62E+015.97E+022.07E+003.67E+014.13E+024.26E+03 + 45K 63.004.78E-014.88E+003.92E+013.03E+021.12E+001.65E+011.73E+021.71E+03 + 45K 76.002.81E-012.67E+002.03E+011.49E+026.54E-018.17E+007.81E+017.17E+02 + 45K 93.001.57E-011.36E+009.54E+006.43E+013.69E-013.88E+003.30E+012.74E+02 + 45K 106.001.08E-018.71E-015.74E+003.63E+012.55E-012.41E+001.89E+011.46E+02 + 45K 123.007.05E-025.22E-013.18E+001.86E+011.69E-011.41E+001.01E+017.06E+01 + 45K 146.004.31E-022.87E-011.60E+008.51E+001.05E-017.69E-014.89E+003.07E+01 + 45K 175.002.57E-021.53E-017.66E-013.68E+006.46E-024.10E-012.31E+001.28E+01 + 45K 240.001.06E-025.13E-022.14E-018.56E-012.81E-021.42E-016.44E-012.90E+00 + 45K 325.004.65E-031.86E-026.53E-022.20E-011.29E-025.35E-021.99E-017.34E-01 + 45K 410.002.55E-038.90E-032.75E-028.18E-027.25E-032.62E-028.46E-022.69E-01 + 45K 520.001.43E-034.38E-031.20E-023.16E-024.08E-031.30E-023.66E-021.01E-01 + 45K 750.006.30E-041.64E-033.79E-038.45E-031.74E-034.66E-031.10E-022.49E-02 + 45K 1000.003.54E-048.26E-041.71E-033.40E-039.15E-042.19E-034.57E-039.13E-03 + 45K 1250.002.35E-045.09E-049.80E-041.80E-035.66E-041.26E-032.42E-034.43E-03 + 45K 1500.001.72E-043.51E-046.41E-041.11E-033.87E-048.13E-041.47E-032.54E-03 + 45L1 4.411.93E+016.63E+031.11E+064.13E+073.36E+023.37E+055.65E+072.59E+09 + 45L1 5.111.50E+012.80E+036.65E+054.05E+072.16E+021.67E+052.49E+071.41E+09 + 45L1 6.419.85E+006.51E+022.34E+052.05E+071.10E+025.69E+047.04E+064.48E+08 + 45L1 9.614.37E+002.17E+012.33E+042.67E+063.27E+018.60E+037.47E+054.47E+07 + 45L1 13.412.12E+002.52E+002.36E+033.24E+051.21E+011.87E+031.21E+056.10E+06 + 45L1 17.001.23E+004.66E+003.44E+026.00E+045.97E+006.45E+023.34E+041.45E+06 + 45L1 23.005.99E-014.35E+002.09E+015.41E+032.43E+001.70E+026.67E+032.33E+05 + 45L1 31.002.85E-012.66E+009.68E+003.73E+021.00E+004.68E+011.40E+033.85E+04 + 45L1 43.001.23E-011.22E+007.19E+004.25E+013.84E-011.18E+012.60E+025.47E+03 + 45L1 56.006.09E-025.87E-013.91E+002.23E+011.78E-013.99E+006.91E+011.16E+03 + 45L1 73.002.96E-022.64E-011.76E+001.06E+018.29E-021.38E+001.88E+012.51E+02 + 45L1 86.001.89E-021.57E-011.01E+006.02E+005.19E-027.26E-018.55E+009.92E+01 + 45L1 103.001.15E-028.77E-025.33E-013.04E+003.12E-023.63E-013.65E+003.63E+01 + 45L1 126.006.54E-034.50E-022.52E-011.34E+001.78E-021.70E-011.44E+001.20E+01 + 45L1 155.003.67E-032.25E-021.14E-015.56E-011.01E-027.98E-025.65E-013.98E+00 + 45L1 220.001.39E-036.92E-032.94E-021.21E-013.95E-032.33E-021.24E-016.60E-01 + 45L1 305.005.77E-042.36E-038.48E-032.94E-021.70E-037.82E-033.27E-021.36E-01 + 45L1 390.003.07E-041.09E-033.45E-031.06E-029.15E-043.58E-031.26E-024.40E-02 + 45L1 500.001.67E-045.23E-041.46E-033.97E-034.99E-041.68E-035.09E-031.51E-02 + 45L1 730.007.17E-051.89E-044.47E-041.02E-032.05E-045.72E-041.41E-033.34E-03 + 45L11000.003.81E-058.96E-051.88E-043.79E-041.01E-042.47E-045.28E-041.08E-03 + 45L11500.001.85E-053.82E-057.06E-051.24E-044.26E-059.08E-051.67E-042.93E-04 + 45L2 4.153.92E+014.42E+053.04E+083.00E+103.72E+011.46E+041.09E+063.81E+07 + 45L2 4.852.51E+012.01E+051.20E+081.45E+102.30E+017.88E+037.19E+053.86E+07 + 45L2 6.151.25E+016.08E+042.92E+073.88E+091.11E+013.06E+033.08E+052.16E+07 + 45L2 9.353.48E+007.39E+032.39E+062.92E+083.04E+005.71E+025.31E+043.89E+06 + 45L2 13.151.18E+001.34E+033.10E+053.18E+071.06E+001.45E+021.13E+047.28E+05 + 45L2 17.005.11E-013.71E+026.68E+045.78E+064.81E-015.15E+013.41E+031.90E+05 + 45L2 23.001.87E-018.27E+011.10E+047.63E+051.89E-011.53E+018.12E+023.70E+04 + 45L2 31.006.79E-021.89E+011.87E+031.02E+057.54E-024.59E+001.94E+027.08E+03 + 45L2 43.002.19E-023.79E+002.70E+021.12E+042.75E-021.23E+003.99E+011.13E+03 + 45L2 56.008.68E-031.04E+005.71E+011.90E+031.22E-024.27E-011.11E+012.53E+02 + 45L2 73.003.40E-032.90E-011.22E+013.22E+025.40E-031.48E-013.08E+005.65E+01 + 45L2 86.001.90E-031.32E-014.72E+001.08E+023.26E-037.73E-021.40E+002.24E+01 + 45L2 103.001.00E-035.58E-021.67E+003.28E+011.88E-033.79E-025.89E-018.13E+00 + 45L2 126.004.91E-042.15E-025.33E-018.79E+001.01E-031.71E-022.25E-012.63E+00 + 45L2 155.002.37E-048.19E-031.67E-012.31E+005.39E-047.62E-038.45E-028.36E-01 + 45L2 220.007.02E-051.65E-032.45E-022.53E-011.86E-041.97E-031.66E-021.24E-01 + 45L2 305.002.32E-053.90E-044.34E-033.47E-026.99E-055.75E-043.76E-032.21E-02 + 45L2 390.001.03E-051.36E-041.24E-038.21E-033.36E-052.31E-041.27E-036.26E-03 + 45L2 500.004.68E-064.90E-053.66E-042.03E-031.62E-059.42E-054.38E-041.83E-03 + 45L2 730.001.48E-061.12E-056.33E-052.74E-045.40E-062.50E-059.23E-053.06E-04 + 45L21000.006.02E-073.58E-061.63E-055.86E-052.20E-068.65E-062.70E-057.61E-05 + 45L21500.002.08E-079.25E-073.30E-069.62E-067.15E-072.34E-066.12E-061.43E-05 + 45L3 4.007.98E+019.12E+056.66E+086.93E+101.20E+014.04E+051.78E+097.85E+11 + 45L3 4.704.99E+014.02E+052.53E+083.18E+107.32E+001.81E+055.94E+082.27E+11 + 45L3 6.002.41E+011.17E+055.80E+077.94E+093.45E+005.34E+041.14E+083.49E+10 + 45L3 9.206.39E+001.34E+044.37E+065.42E+089.24E-016.35E+036.54E+061.34E+09 + 45L3 13.002.10E+002.32E+035.37E+055.52E+073.18E-011.13E+036.69E+059.94E+07 + 45L3 17.008.63E-015.98E+021.06E+059.06E+061.40E-012.99E+021.17E+051.35E+07 + 45L3 23.003.10E-011.30E+021.68E+041.15E+065.52E-026.66E+011.67E+041.45E+06 + 45L3 31.001.10E-012.88E+012.74E+031.47E+052.21E-021.52E+012.53E+031.66E+05 + 45L3 43.003.48E-025.54E+003.76E+021.53E+048.09E-033.02E+003.28E+021.59E+04 + 45L3 56.001.36E-021.47E+007.56E+012.44E+033.60E-038.27E-016.50E+012.47E+03 + 45L3 73.005.22E-033.88E-011.52E+013.87E+021.60E-032.27E-011.31E+013.92E+02 + 45L3 86.002.89E-031.71E-015.64E+001.24E+029.72E-041.03E-014.93E+001.28E+02 + 45L3 103.001.50E-036.97E-021.90E+003.56E+015.61E-044.32E-021.70E+003.75E+01 + 45L3 126.007.29E-042.57E-025.66E-018.85E+003.05E-041.65E-025.27E-019.76E+00 + 45L3 155.003.47E-049.27E-031.65E-012.13E+001.63E-046.21E-031.61E-012.50E+00 + 45L3 220.001.01E-041.70E-032.09E-021.98E-015.77E-051.23E-032.25E-022.63E-01 + 45L3 305.003.35E-053.66E-043.19E-032.27E-022.23E-052.81E-043.78E-033.45E-02 + 45L3 390.001.51E-051.20E-048.08E-044.64E-031.11E-059.57E-051.02E-037.82E-03 + 45L3 500.007.01E-064.07E-052.13E-049.91E-045.58E-063.35E-052.83E-041.82E-03 + 45L3 730.002.34E-068.84E-063.18E-051.10E-042.07E-067.44E-064.30E-052.17E-04 + 45L31000.001.05E-062.82E-067.61E-062.08E-059.64E-072.39E-069.77E-064.02E-05 + 45L31500.004.09E-077.83E-071.53E-063.17E-063.94E-076.71E-071.71E-065.25E-06 + 45M1 1.631.90E+015.91E+042.76E+063.69E+091.23E+039.00E+061.07E+103.42E+12 + 45M1 2.639.67E+007.35E+031.55E+063.97E+072.93E+028.60E+055.04E+081.23E+11 + 45M1 4.633.57E+004.02E+021.71E+051.75E+075.38E+015.55E+041.52E+072.44E+09 + 45M1 8.631.01E+004.72E+006.20E+038.45E+058.35E+002.89E+033.72E+053.55E+07 + 45M1 15.632.70E-011.10E+001.05E+021.87E+041.42E+001.88E+021.25E+047.05E+05 + 45M1 25.008.76E-027.50E-013.19E+005.00E+023.51E-012.32E+019.41E+023.48E+04 + 45M1 40.002.66E-022.67E-011.53E+001.37E+018.77E-023.09E+007.80E+011.88E+03 + 45M1 52.001.34E-021.30E-018.55E-015.27E+004.08E-021.04E+002.03E+013.84E+02 + 45M1 70.006.01E-035.40E-023.60E-012.19E+001.73E-023.11E-014.58E+006.62E+01 + 45M1 103.002.08E-031.58E-029.61E-025.44E-015.77E-036.87E-027.10E-017.26E+00 + 45M1 150.007.31E-044.54E-032.34E-021.15E-012.04E-031.69E-021.25E-019.27E-01 + 45M1 280.001.32E-045.69E-042.13E-037.73E-033.90E-041.93E-038.68E-033.87E-02 + 45M1 500.003.07E-059.58E-052.68E-047.30E-049.20E-053.13E-049.50E-042.83E-03 + 45M2 1.524.40E+011.24E+074.63E+102.46E+131.42E+023.03E+051.21E+082.48E+10 + 45M2 2.521.60E+019.78E+051.80E+097.27E+113.08E+013.21E+049.82E+061.96E+09 + 45M2 4.523.93E+005.20E+044.53E+071.24E+105.21E+002.58E+035.35E+058.39E+07 + 45M2 8.526.93E-012.17E+039.03E+051.54E+087.54E-011.80E+022.33E+042.45E+06 + 45M2 15.521.14E-011.10E+022.35E+042.45E+061.21E-011.52E+011.21E+038.18E+04 + 45M2 25.002.46E-021.04E+011.34E+039.29E+042.80E-022.18E+001.16E+025.36E+03 + 45M2 40.005.11E-031.03E+008.17E+013.75E+036.63E-033.26E-011.16E+013.61E+02 + 45M2 52.002.08E-032.88E-011.74E+016.33E+022.97E-031.14E-013.22E+008.03E+01 + 45M2 70.007.39E-046.84E-023.06E+008.54E+011.19E-033.46E-027.57E-011.47E+01 + 45M2 103.001.91E-041.08E-023.29E-016.55E+003.66E-047.46E-031.17E-011.64E+00 + 45M2 150.005.11E-051.86E-033.94E-025.66E-011.16E-041.70E-031.96E-022.00E-01 + 45M2 280.005.98E-061.11E-041.34E-031.15E-021.77E-051.56E-041.09E-036.86E-03 + 45M2 500.009.22E-079.63E-067.21E-054.02E-043.18E-061.85E-058.64E-053.62E-04 + 45M3 1.509.19E+012.39E+079.10E+104.82E+134.37E+011.10E+073.44E+111.05E+15 + 45M3 2.503.16E+011.81E+063.34E+091.34E+129.19E+008.52E+051.00E+101.41E+13 + 45M3 4.507.37E+009.28E+048.03E+072.17E+101.52E+004.51E+041.78E+081.12E+11 + 45M3 8.501.24E+003.73E+031.52E+062.54E+082.18E-011.88E+032.42E+066.95E+08 + 45M3 15.501.96E-011.80E+023.77E+043.85E+063.48E-029.43E+014.55E+046.66E+06 + 45M3 25.004.09E-021.62E+012.02E+031.37E+058.08E-038.76E+002.07E+031.83E+05 + 45M3 40.008.22E-031.53E+001.15E+025.14E+031.93E-038.58E-011.07E+025.88E+03 + 45M3 52.003.28E-034.11E-012.34E+018.24E+028.68E-042.36E-012.10E+018.99E+02 + 45M3 70.001.14E-039.29E-023.86E+001.04E+023.51E-045.54E-023.45E+001.11E+02 + 45M3 103.002.87E-041.36E-023.74E-017.08E+001.09E-048.58E-033.46E-017.82E+00 + 45M3 150.007.52E-052.13E-033.95E-025.30E-013.51E-051.44E-033.92E-026.36E-01 + 45M3 280.008.71E-061.07E-041.02E-037.88E-035.58E-068.15E-051.20E-031.18E-02 + 45M3 500.001.37E-068.03E-064.20E-051.97E-041.10E-066.63E-065.65E-053.66E-04 + 45M4 1.311.56E+026.14E+055.79E+101.17E+151.00E+012.54E+054.13E+097.02E+12 + 45M4 2.312.29E+013.35E+041.07E+098.59E+121.54E+001.47E+049.35E+071.01E+11 + 45M4 4.312.34E+001.36E+031.30E+074.10E+101.85E-016.29E+021.55E+069.72E+08 + 45M4 8.311.80E-014.51E+011.24E+051.59E+081.86E-022.26E+012.22E+047.65E+06 + 45M4 15.311.44E-021.78E+001.64E+039.59E+052.05E-031.01E+004.51E+028.76E+04 + 45M4 25.001.74E-031.28E-015.12E+011.65E+043.33E-048.31E-022.04E+012.49E+03 + 45M4 40.002.16E-049.96E-031.88E+003.49E+025.63E-057.58E-031.08E+008.38E+01 + 45M4 52.006.67E-052.37E-032.99E-014.11E+012.06E-051.99E-032.11E-011.28E+01 + 45M4 70.001.74E-054.67E-043.78E-023.72E+006.53E-064.39E-043.36E-021.53E+00 + 45M4 103.003.01E-065.70E-052.65E-031.69E-011.45E-066.19E-053.14E-031.00E-01 + 45M4 150.005.49E-077.54E-062.08E-048.82E-033.32E-079.29E-063.20E-047.29E-03 + 45M4 280.003.63E-082.94E-073.56E-067.63E-052.90E-084.14E-077.79E-061.04E-04 + 45M4 500.003.14E-091.72E-081.06E-071.19E-063.12E-092.48E-082.76E-072.38E-06 + 45M5 1.312.30E+028.43E+059.00E+101.75E+156.28E+003.16E+041.95E+101.72E+15 + 45M5 2.313.33E+014.54E+041.64E+091.25E+139.70E-011.86E+033.67E+081.08E+13 + 45M5 4.313.37E+001.83E+031.98E+075.88E+101.20E-018.29E+014.66E+064.28E+10 + 45M5 8.312.55E-015.96E+011.87E+052.23E+081.25E-023.16E+004.74E+041.36E+08 + 45M5 15.312.01E-022.32E+002.41E+031.31E+061.44E-031.53E-016.68E+026.98E+05 + 45M5 25.002.41E-031.63E-017.37E+012.18E+042.42E-041.37E-022.20E+011.10E+04 + 45M5 40.002.98E-041.24E-022.61E+004.42E+024.26E-051.36E-038.49E-012.20E+02 + 45M5 52.009.08E-052.89E-034.07E-015.05E+011.59E-053.75E-041.39E-012.56E+01 + 45M5 70.002.36E-055.56E-044.98E-024.36E+005.20E-068.80E-051.81E-022.31E+00 + 45M5 103.004.18E-066.55E-053.30E-031.84E-011.21E-061.36E-051.32E-031.06E-01 + 45M5 150.007.86E-078.34E-062.42E-048.70E-032.94E-072.27E-061.06E-045.59E-03 + 45M5 280.005.03E-083.08E-073.55E-066.02E-052.97E-081.29E-071.87E-064.83E-05 + 45M5 500.005.88E-091.85E-089.45E-087.35E-074.02E-091.09E-085.85E-087.10E-07 + 45N+ 50.003.80E-031.68E-019.15E+003.55E+029.77E-033.31E-011.14E+013.85E+02 + 45N+ 70.001.45E-033.71E-021.26E+003.45E+013.68E-038.06E-021.79E+004.04E+01 + 45N+ 100.005.22E-048.03E-031.64E-013.06E+001.33E-031.90E-022.75E-014.12E+00 + 45N+ 150.001.63E-041.54E-031.79E-022.13E-014.29E-043.98E-033.69E-023.56E-01 + 45N+ 200.007.19E-055.08E-044.10E-033.51E-021.96E-041.39E-039.60E-036.92E-02 + 45N+ 500.006.40E-062.18E-057.22E-052.47E-041.89E-056.66E-052.16E-047.05E-04 + 46K 25.355.90E+002.81E+012.89E+011.53E+011.80E+015.93E+023.26E+034.54E+03 + 46K 26.055.48E+002.94E+014.76E+015.03E+011.65E+015.33E+023.28E+037.17E+03 + 46K 27.354.83E+003.04E+017.91E+011.60E+021.43E+014.42E+023.17E+031.11E+04 + 46K 30.553.61E+002.87E+011.28E+025.02E+021.03E+012.89E+022.58E+031.53E+04 + 46K 34.352.64E+002.41E+011.42E+027.67E+027.31E+001.84E+021.86E+031.44E+04 + 46K 38.002.01E+001.96E+011.32E+028.33E+025.43E+001.25E+021.33E+031.17E+04 + 46K 44.001.35E+001.38E+011.03E+027.31E+023.53E+007.10E+017.81E+027.49E+03 + 46K 52.008.51E-018.72E+006.81E+015.08E+022.17E+003.75E+014.06E+024.00E+03 + 46K 64.004.76E-014.67E+003.61E+012.67E+021.19E+001.71E+011.73E+021.65E+03 + 46K 77.002.82E-012.59E+001.91E+011.35E+026.97E-018.57E+007.96E+017.10E+02 + 46K 94.001.59E-011.34E+009.12E+005.97E+013.95E-014.10E+003.42E+012.77E+02 + 46K 107.001.10E-018.64E-015.55E+003.42E+012.75E-012.56E+001.97E+011.48E+02 + 46K 124.007.21E-025.21E-013.11E+001.78E+011.82E-011.51E+001.06E+017.28E+01 + 46K 147.004.43E-022.90E-011.58E+008.24E+001.14E-018.24E-015.17E+003.20E+01 + 46K 175.002.70E-021.58E-017.82E-013.71E+007.12E-024.50E-012.51E+001.38E+01 + 46K 240.001.11E-025.34E-022.21E-018.74E-013.09E-021.55E-017.01E-013.13E+00 + 46K 325.004.91E-031.95E-026.78E-022.27E-011.42E-025.86E-022.17E-017.96E-01 + 46K 410.002.70E-039.36E-032.87E-028.50E-027.94E-032.86E-029.22E-022.92E-01 + 46K 520.001.51E-034.63E-031.26E-023.31E-024.46E-031.42E-023.99E-021.10E-01 + 46K 750.006.70E-041.74E-034.01E-038.94E-031.89E-035.08E-031.19E-022.71E-02 + 46K 1000.003.77E-048.79E-041.82E-033.62E-039.94E-042.39E-034.97E-039.92E-03 + 46K 1250.002.50E-045.42E-041.05E-031.92E-036.13E-041.37E-032.63E-034.81E-03 + 46K 1500.001.83E-043.75E-046.86E-041.19E-034.18E-048.83E-041.60E-032.76E-03 + 46L1 4.601.78E+016.00E+039.26E+053.13E+073.31E+023.17E+055.08E+072.17E+09 + 46L1 5.301.39E+012.63E+035.78E+053.22E+072.17E+021.61E+052.31E+071.23E+09 + 46L1 6.609.31E+006.54E+022.15E+051.74E+071.12E+025.70E+046.81E+064.10E+08 + 46L1 9.804.23E+002.68E+012.34E+042.51E+063.45E+019.00E+037.63E+054.39E+07 + 46L1 13.602.08E+002.05E+002.59E+033.28E+051.30E+012.01E+031.27E+056.24E+06 + 46L1 17.001.26E+003.77E+004.53E+026.94E+046.68E+007.35E+023.80E+041.62E+06 + 46L1 23.006.15E-013.94E+002.93E+016.71E+032.72E+001.93E+027.55E+032.60E+05 + 46L1 31.002.94E-012.53E+008.32E+005.01E+021.12E+005.30E+011.58E+034.30E+04 + 46L1 43.001.27E-011.20E+006.45E+004.45E+014.29E-011.33E+012.93E+026.11E+03 + 46L1 56.006.33E-025.86E-013.68E+002.04E+011.99E-014.49E+007.76E+011.30E+03 + 46L1 73.003.10E-022.67E-011.71E+009.86E+009.24E-021.55E+002.11E+012.80E+02 + 46L1 86.001.98E-021.60E-019.97E-015.73E+005.79E-028.14E-019.56E+001.11E+02 + 46L1 103.001.20E-028.97E-025.31E-012.95E+003.48E-024.06E-014.07E+004.03E+01 + 46L1 126.006.87E-034.63E-022.54E-011.32E+001.98E-021.90E-011.60E+001.34E+01 + 46L1 155.003.86E-032.32E-021.16E-015.56E-011.12E-028.89E-026.29E-014.42E+00 + 46L1 220.001.47E-037.22E-033.03E-021.23E-014.38E-032.59E-021.38E-017.31E-01 + 46L1 305.006.12E-042.48E-038.83E-033.05E-021.88E-038.67E-033.62E-021.50E-01 + 46L1 390.003.26E-041.15E-033.62E-031.10E-021.01E-033.96E-031.40E-024.86E-02 + 46L1 500.001.78E-045.54E-041.54E-034.19E-035.50E-041.86E-035.61E-031.66E-02 + 46L1 730.007.66E-052.02E-044.77E-041.09E-032.25E-046.30E-041.55E-033.68E-03 + 46L11000.004.08E-059.61E-052.02E-044.07E-041.11E-042.72E-045.80E-041.18E-03 + 46L11500.001.99E-054.11E-057.60E-051.34E-044.64E-059.94E-051.83E-043.21E-04 + 46L2 4.333.62E+013.97E+052.60E+082.39E+103.66E+011.37E+049.49E+053.00E+07 + 46L2 5.032.36E+011.86E+051.07E+081.21E+102.31E+017.56E+036.45E+053.18E+07 + 46L2 6.331.21E+015.85E+042.72E+073.42E+091.14E+013.03E+032.88E+051.89E+07 + 46L2 9.533.48E+007.49E+032.37E+062.78E+083.23E+005.90E+025.28E+043.69E+06 + 46L2 13.331.21E+001.40E+033.19E+053.17E+071.15E+001.53E+021.16E+047.23E+05 + 46L2 17.005.49E-014.15E+027.46E+046.35E+065.43E-015.77E+013.76E+032.05E+05 + 46L2 23.002.02E-019.26E+011.23E+048.43E+052.14E-011.71E+019.00E+024.04E+04 + 46L2 31.007.36E-022.12E+012.09E+031.13E+058.53E-025.16E+002.16E+027.78E+03 + 46L2 43.002.39E-024.25E+003.03E+021.25E+043.12E-021.39E+004.45E+011.25E+03 + 46L2 56.009.50E-031.17E+006.41E+012.12E+031.38E-024.82E-011.24E+012.82E+02 + 46L2 73.003.74E-033.26E-011.37E+013.60E+026.13E-031.68E-013.46E+006.31E+01 + 46L2 86.002.10E-031.48E-015.31E+001.21E+023.71E-038.75E-021.57E+002.51E+01 + 46L2 103.001.11E-036.28E-021.89E+003.69E+012.14E-034.29E-026.63E-019.11E+00 + 46L2 126.005.45E-042.43E-026.02E-019.90E+001.15E-031.94E-022.54E-012.96E+00 + 46L2 155.002.63E-049.25E-031.89E-012.60E+006.15E-048.66E-039.57E-029.42E-01 + 46L2 220.007.84E-051.87E-032.77E-022.87E-012.13E-042.25E-031.88E-021.40E-01 + 46L2 305.002.60E-054.42E-044.93E-033.94E-028.01E-056.56E-044.28E-032.50E-02 + 46L2 390.001.16E-051.55E-041.41E-039.34E-033.86E-052.65E-041.45E-037.12E-03 + 46L2 500.005.29E-065.58E-054.17E-042.31E-031.86E-051.08E-045.00E-042.08E-03 + 46L2 730.001.70E-061.28E-057.23E-053.13E-046.21E-062.87E-051.06E-043.51E-04 + 46L21000.006.80E-074.09E-061.87E-056.72E-052.54E-069.95E-063.11E-058.72E-05 + 46L21500.002.35E-071.05E-063.78E-061.10E-058.22E-072.70E-067.05E-061.65E-05 + 46L3 4.177.40E+018.21E+055.74E+085.57E+101.17E+013.82E+051.61E+096.83E+11 + 46L3 4.874.71E+013.74E+052.26E+082.67E+107.26E+001.76E+055.62E+082.07E+11 + 46L3 6.172.33E+011.13E+055.43E+077.04E+093.50E+005.41E+041.14E+083.37E+10 + 46L3 9.376.40E+001.36E+044.34E+065.18E+089.66E-016.74E+036.93E+061.40E+09 + 46L3 13.172.14E+002.42E+035.51E+055.51E+073.39E-011.24E+037.33E+051.07E+08 + 46L3 17.009.23E-016.65E+021.17E+059.90E+061.55E-013.48E+021.39E+051.60E+07 + 46L3 23.003.33E-011.44E+021.87E+041.26E+066.11E-027.74E+011.98E+041.72E+06 + 46L3 31.001.19E-013.20E+013.05E+031.62E+052.44E-021.76E+012.98E+031.95E+05 + 46L3 43.003.77E-026.17E+004.18E+021.69E+048.96E-033.51E+003.86E+021.87E+04 + 46L3 56.001.47E-021.63E+008.42E+012.70E+033.99E-039.59E-017.62E+012.89E+03 + 46L3 73.005.69E-034.33E-011.69E+014.29E+021.78E-032.63E-011.53E+014.58E+02 + 46L3 86.003.15E-031.91E-016.29E+001.38E+021.08E-031.19E-015.76E+001.49E+02 + 46L3 103.001.65E-037.77E-022.12E+003.95E+016.23E-044.99E-021.99E+004.37E+01 + 46L3 126.007.98E-042.86E-026.33E-019.85E+003.38E-041.90E-026.14E-011.13E+01 + 46L3 155.003.82E-041.03E-021.84E-012.38E+001.81E-047.16E-031.87E-012.90E+00 + 46L3 220.001.12E-041.90E-032.34E-022.21E-016.41E-051.41E-032.60E-023.04E-01 + 46L3 305.003.73E-054.09E-043.57E-032.53E-022.47E-053.21E-044.37E-033.98E-02 + 46L3 390.001.67E-051.34E-049.05E-045.19E-031.23E-051.09E-041.18E-039.02E-03 + 46L3 500.007.75E-064.56E-052.38E-041.11E-036.21E-063.81E-053.25E-042.10E-03 + 46L3 730.002.63E-069.88E-063.56E-051.23E-042.30E-068.41E-064.92E-052.49E-04 + 46L31000.001.16E-063.14E-068.52E-062.33E-051.07E-062.68E-061.11E-054.61E-05 + 46L31500.004.54E-078.66E-071.71E-063.55E-064.37E-077.49E-071.94E-066.00E-06 + 46M1 1.671.80E+015.75E+042.48E+063.57E+091.29E+039.31E+061.09E+103.37E+12 + 46M1 2.679.41E+007.58E+031.46E+063.64E+073.16E+029.32E+055.46E+081.30E+11 + 46M1 4.673.55E+004.49E+021.75E+051.65E+075.92E+016.20E+041.71E+072.69E+09 + 46M1 8.671.03E+006.54E+006.88E+038.83E+059.30E+003.28E+034.23E+054.01E+07 + 46M1 15.672.77E-019.40E-011.33E+022.13E+041.59E+002.15E+021.42E+048.01E+05 + 46M1 25.009.09E-027.06E-013.58E+006.38E+023.96E-012.67E+011.08E+033.99E+04 + 46M1 40.002.79E-022.63E-011.39E+001.62E+019.91E-023.53E+008.93E+012.14E+03 + 46M1 52.001.40E-021.31E-018.11E-015.14E+004.60E-021.18E+002.31E+014.37E+02 + 46M1 70.006.33E-035.50E-023.52E-012.09E+001.95E-023.53E-015.21E+007.51E+01 + 46M1 103.002.20E-031.63E-029.59E-025.34E-016.50E-037.78E-028.03E-018.20E+00 + 46M1 150.007.77E-044.74E-032.39E-021.16E-012.29E-031.90E-021.41E-011.04E+00 + 46M1 280.001.42E-046.03E-042.24E-038.06E-034.36E-042.16E-039.72E-034.34E-02 + 46M1 500.003.30E-051.03E-042.86E-047.78E-041.02E-043.49E-041.06E-033.16E-03 + 46M2 1.564.22E+011.24E+074.56E+102.34E+131.50E+023.15E+051.22E+082.33E+10 + 46M2 2.561.59E+011.03E+061.88E+097.40E+113.34E+013.47E+041.03E+071.97E+09 + 46M2 4.564.02E+005.64E+044.92E+071.32E+105.79E+002.86E+035.81E+058.85E+07 + 46M2 8.567.28E-012.41E+031.00E+061.68E+088.49E-012.02E+022.57E+042.66E+06 + 46M2 15.561.22E-011.23E+022.64E+042.72E+061.37E-011.72E+011.35E+039.02E+04 + 46M2 25.002.69E-021.18E+011.52E+031.05E+053.21E-022.49E+001.32E+026.02E+03 + 46M2 40.005.63E-031.17E+009.30E+014.25E+037.61E-033.73E-011.32E+014.08E+02 + 46M2 52.002.30E-033.27E-011.98E+017.18E+023.41E-031.30E-013.66E+009.08E+01 + 46M2 70.008.22E-047.79E-023.49E+009.72E+011.37E-033.96E-028.64E-011.66E+01 + 46M2 103.002.13E-041.23E-023.77E-017.47E+004.22E-048.57E-031.34E-011.87E+00 + 46M2 150.005.73E-052.12E-034.52E-026.47E-011.35E-041.96E-032.25E-022.29E-01 + 46M2 280.006.80E-061.27E-041.54E-031.32E-022.06E-051.80E-041.26E-037.89E-03 + 46M2 500.001.04E-061.11E-058.34E-054.64E-043.70E-062.16E-051.00E-044.18E-04 + 46M3 1.538.86E+012.39E+079.00E+104.61E+134.55E+011.16E+073.59E+111.09E+15 + 46M3 2.533.14E+011.90E+063.49E+091.36E+129.85E+009.38E+051.11E+101.58E+13 + 46M3 4.537.55E+001.01E+058.69E+072.30E+101.67E+005.12E+042.06E+081.30E+11 + 46M3 8.531.30E+004.12E+031.68E+062.77E+082.41E-012.18E+032.86E+068.27E+08 + 46M3 15.532.09E-012.01E+024.20E+044.24E+063.87E-021.10E+025.42E+047.95E+06 + 46M3 25.004.44E-021.83E+012.28E+031.53E+059.06E-031.03E+012.49E+032.21E+05 + 46M3 40.008.98E-031.73E+001.30E+025.78E+032.16E-031.01E+001.28E+027.04E+03 + 46M3 52.003.60E-034.64E-012.64E+019.26E+029.74E-042.78E-012.51E+011.07E+03 + 46M3 70.001.26E-031.05E-014.36E+001.17E+023.95E-046.51E-024.10E+001.32E+02 + 46M3 103.003.19E-041.54E-024.24E-017.99E+001.23E-041.01E-024.10E-019.27E+00 + 46M3 150.008.41E-052.41E-034.47E-025.99E-013.96E-051.68E-034.62E-027.51E-01 + 46M3 280.009.82E-061.21E-041.16E-038.93E-036.29E-069.47E-051.41E-031.39E-02 + 46M3 500.001.55E-069.10E-064.78E-052.23E-041.24E-067.65E-066.59E-054.29E-04 + 46M4 1.341.58E+026.30E+055.96E+101.21E+151.08E+012.75E+054.45E+097.37E+12 + 46M4 2.342.42E+013.60E+041.17E+099.55E+121.70E+001.66E+041.07E+081.13E+11 + 46M4 4.342.56E+001.51E+031.49E+074.77E+102.10E-017.35E+021.83E+061.14E+09 + 46M4 8.342.02E-015.11E+011.46E+051.89E+082.15E-022.68E+012.67E+049.14E+06 + 46M4 15.341.64E-022.06E+001.95E+031.15E+062.39E-031.21E+005.47E+021.06E+05 + 46M4 25.002.02E-031.50E-016.17E+012.01E+043.94E-041.01E-012.50E+013.04E+03 + 46M4 40.002.54E-041.17E-022.26E+004.25E+026.69E-059.20E-031.32E+001.02E+02 + 46M4 52.007.85E-052.81E-033.61E-015.01E+012.45E-052.42E-032.58E-011.56E+01 + 46M4 70.002.06E-055.55E-044.56E-024.53E+007.79E-065.34E-044.11E-021.88E+00 + 46M4 103.003.58E-066.80E-053.20E-032.07E-011.73E-067.54E-053.85E-031.23E-01 + 46M4 150.006.64E-079.04E-062.52E-041.08E-023.99E-071.13E-053.93E-048.95E-03 + 46M4 280.004.69E-083.53E-074.33E-069.33E-053.49E-085.06E-079.57E-061.28E-04 + 46M4 500.004.76E-092.08E-081.30E-071.46E-063.76E-093.04E-083.40E-072.93E-06 + 46M5 1.332.33E+028.62E+059.31E+101.80E+156.72E+003.39E+042.12E+101.86E+15 + 46M5 2.333.52E+014.86E+041.81E+091.39E+131.07E+002.08E+034.24E+081.27E+13 + 46M5 4.333.68E+002.02E+032.27E+076.83E+101.35E-019.54E+015.60E+065.27E+10 + 46M5 8.332.86E-016.73E+012.19E+052.65E+081.43E-023.70E+005.82E+041.71E+08 + 46M5 15.332.29E-022.66E+002.87E+031.57E+061.67E-031.81E-018.28E+028.86E+05 + 46M5 25.002.79E-031.90E-018.88E+012.66E+042.84E-041.62E-022.76E+011.41E+04 + 46M5 40.003.47E-041.45E-023.15E+005.37E+025.01E-051.61E-031.06E+002.80E+02 + 46M5 52.001.07E-043.40E-034.91E-016.14E+011.88E-054.46E-041.74E-013.25E+01 + 46M5 70.002.78E-056.55E-046.01E-025.31E+006.16E-061.05E-042.26E-022.92E+00 + 46M5 103.004.87E-067.76E-053.98E-032.24E-011.44E-061.62E-051.64E-031.34E-01 + 46M5 150.009.19E-079.92E-062.92E-041.06E-023.50E-072.71E-061.32E-047.03E-03 + 46M5 280.006.47E-083.66E-074.30E-067.33E-053.55E-081.55E-072.30E-066.03E-05 + 46M5 500.005.96E-092.26E-081.11E-078.95E-074.82E-091.31E-087.13E-088.81E-07 + 46N+ 50.003.91E-031.89E-011.06E+014.11E+021.05E-023.67E-011.32E+014.53E+02 + 46N+ 70.001.49E-034.10E-021.45E+003.98E+013.97E-038.88E-022.04E+004.69E+01 + 46N+ 100.005.36E-048.71E-031.86E-013.52E+001.43E-032.08E-023.09E-014.72E+00 + 46N+ 150.001.67E-041.64E-032.00E-022.43E-014.61E-044.33E-034.08E-024.01E-01 + 46N+ 200.007.39E-055.35E-044.51E-033.96E-022.11E-041.50E-031.05E-027.71E-02 + 46N+ 500.006.60E-062.27E-057.64E-052.66E-042.00E-057.11E-052.32E-047.64E-04 + 47K 26.515.39E+002.44E+012.34E+011.13E+011.74E+015.48E+022.86E+033.72E+03 + 47K 27.215.03E+002.54E+013.82E+013.68E+011.61E+014.94E+022.88E+035.85E+03 + 47K 28.514.45E+002.63E+016.34E+011.17E+021.40E+014.13E+022.80E+039.06E+03 + 47K 31.713.37E+002.51E+011.04E+023.76E+021.02E+012.74E+022.32E+031.28E+04 + 47K 35.512.49E+002.14E+011.18E+025.91E+027.34E+001.78E+021.70E+031.23E+04 + 47K 40.001.81E+001.69E+011.09E+026.58E+025.17E+001.12E+021.15E+039.69E+03 + 47K 46.001.24E+001.20E+018.59E+015.80E+023.43E+006.59E+016.92E+026.34E+03 + 47K 54.007.94E-017.77E+005.78E+014.11E+022.15E+003.58E+013.70E+023.49E+03 + 47K 66.004.53E-014.27E+003.15E+012.23E+021.20E+001.68E+011.63E+021.50E+03 + 47K 79.002.73E-012.41E+001.71E+011.16E+027.16E-018.56E+007.69E+016.62E+02 + 47K 96.001.57E-011.27E+008.38E+005.30E+014.12E-014.17E+003.38E+012.65E+02 + 47K 109.001.09E-018.30E-015.17E+003.09E+012.88E-012.63E+001.97E+011.45E+02 + 47K 126.007.21E-025.07E-012.94E+001.64E+011.92E-011.56E+001.07E+017.20E+01 + 47K 149.004.47E-022.85E-011.51E+007.74E+001.21E-018.63E-015.30E+003.22E+01 + 47K 175.002.83E-021.64E-017.97E-013.73E+007.84E-024.94E-012.73E+001.49E+01 + 47K 240.001.17E-025.56E-022.27E-018.91E-013.39E-021.70E-017.63E-013.39E+00 + 47K 325.005.19E-032.04E-027.04E-022.34E-011.55E-026.41E-022.36E-018.61E-01 + 47K 420.002.69E-039.13E-032.75E-028.00E-028.19E-032.91E-029.20E-022.85E-01 + 47K 530.001.53E-034.62E-031.24E-023.22E-024.65E-031.46E-024.07E-021.10E-01 + 47K 760.006.91E-041.78E-034.09E-039.04E-032.00E-035.35E-031.25E-022.80E-02 + 47K 1050.003.65E-048.39E-041.71E-033.34E-039.69E-042.29E-034.69E-039.15E-03 + 47K 1300.002.48E-045.33E-041.02E-031.84E-036.10E-041.35E-032.56E-034.62E-03 + 47K 1550.001.84E-043.75E-046.81E-041.17E-034.22E-048.87E-041.59E-032.72E-03 + 47L1 4.811.64E+015.41E+037.79E+052.41E+073.25E+022.97E+054.56E+071.83E+09 + 47L1 5.511.30E+012.46E+035.02E+052.57E+072.16E+021.55E+052.14E+071.07E+09 + 47L1 6.818.80E+006.51E+021.96E+051.48E+071.15E+025.68E+046.56E+063.75E+08 + 47L1 10.014.09E+003.18E+012.33E+042.34E+063.62E+019.38E+037.76E+054.30E+07 + 47L1 13.812.05E+001.87E+002.80E+033.29E+051.39E+012.14E+031.33E+056.35E+06 + 47L1 18.001.12E+003.31E+003.63E+025.27E+046.29E+006.48E+023.16E+041.28E+06 + 47L1 24.005.69E-013.41E+002.83E+015.79E+032.68E+001.82E+026.81E+032.25E+05 + 47L1 32.002.80E-012.25E+007.32E+004.99E+021.14E+005.23E+011.51E+033.97E+04 + 47L1 44.001.24E-011.11E+005.57E+004.44E+014.48E-011.36E+012.93E+025.96E+03 + 47L1 57.006.28E-025.54E-013.29E+001.82E+012.10E-014.69E+007.96E+011.30E+03 + 47L1 74.003.11E-022.58E-011.58E+008.86E+009.91E-021.64E+002.20E+012.89E+02 + 47L1 87.002.00E-021.56E-019.40E-015.24E+006.24E-028.71E-011.01E+011.15E+02 + 47L1 104.001.22E-028.88E-025.09E-012.75E+003.77E-024.37E-014.34E+004.25E+01 + 47L1 127.007.05E-034.63E-022.47E-011.26E+002.15E-022.06E-011.72E+001.42E+01 + 47L1 155.004.06E-032.40E-021.18E-015.56E-011.24E-029.90E-026.99E-014.90E+00 + 47L1 220.001.55E-037.52E-033.12E-021.26E-014.86E-032.87E-021.53E-018.09E-01 + 47L1 305.006.50E-042.61E-039.19E-033.15E-022.07E-039.59E-034.00E-021.65E-01 + 47L1 390.003.47E-041.21E-033.80E-031.15E-021.11E-034.38E-031.54E-025.36E-02 + 47L1 500.001.90E-045.87E-041.63E-034.41E-036.05E-042.05E-036.19E-031.83E-02 + 47L1 730.008.16E-052.15E-045.08E-041.16E-032.47E-046.93E-041.70E-034.04E-03 + 47L11000.004.36E-051.03E-042.16E-044.36E-041.21E-042.98E-046.36E-041.30E-03 + 47L11500.002.11E-054.41E-058.18E-051.44E-045.05E-051.09E-042.01E-043.52E-04 + 47L2 4.523.35E+013.55E+052.22E+081.91E+103.60E+011.28E+048.29E+052.39E+07 + 47L2 5.222.22E+011.72E+059.45E+071.00E+102.31E+017.23E+035.79E+052.63E+07 + 47L2 6.521.16E+015.61E+042.52E+073.00E+091.17E+012.99E+032.69E+051.65E+07 + 47L2 9.723.47E+007.56E+032.33E+062.64E+083.42E+006.08E+025.22E+043.48E+06 + 47L2 13.521.23E+001.45E+033.25E+053.14E+071.24E+001.62E+021.19E+047.15E+05 + 47L2 18.004.89E-013.49E+025.91E+044.77E+065.13E-015.13E+013.16E+031.63E+05 + 47L2 24.001.89E-018.38E+011.07E+046.99E+052.12E-011.62E+018.12E+023.48E+04 + 47L2 32.007.16E-022.03E+011.94E+031.01E+058.74E-025.10E+002.06E+027.16E+03 + 47L2 44.002.40E-024.25E+002.96E+021.19E+043.29E-021.42E+004.44E+011.21E+03 + 47L2 57.009.76E-031.21E+006.49E+012.10E+031.48E-025.06E-011.28E+012.83E+02 + 47L2 74.003.91E-033.42E-011.42E+013.68E+026.67E-031.79E-013.63E+006.51E+01 + 47L2 87.002.21E-031.58E-015.59E+001.26E+024.07E-039.45E-021.67E+002.62E+01 + 47L2 104.001.18E-036.75E-022.01E+003.89E+012.36E-034.67E-027.13E-019.65E+00 + 47L2 127.005.85E-042.63E-026.49E-011.06E+011.28E-032.13E-022.76E-013.18E+00 + 47L2 155.002.92E-041.04E-022.13E-012.93E+007.01E-049.83E-031.08E-011.06E+00 + 47L2 220.008.70E-052.11E-033.14E-023.24E-012.43E-042.56E-032.13E-021.58E-01 + 47L2 305.002.90E-055.01E-045.60E-034.46E-029.16E-057.48E-044.87E-032.83E-02 + 47L2 390.001.30E-051.76E-041.60E-031.06E-024.42E-053.02E-041.65E-038.08E-03 + 47L2 500.005.92E-066.33E-054.75E-042.63E-032.13E-051.23E-045.71E-042.37E-03 + 47L2 730.001.88E-061.45E-058.26E-053.57E-047.13E-063.29E-051.21E-044.00E-04 + 47L21000.007.84E-074.65E-062.14E-057.68E-052.91E-061.14E-053.56E-059.99E-05 + 47L21500.002.67E-071.20E-064.33E-061.26E-059.45E-073.11E-068.10E-061.90E-05 + 47L3 4.356.85E+017.37E+054.93E+084.50E+101.14E+013.60E+051.46E+095.92E+11 + 47L3 5.054.44E+013.46E+052.01E+082.23E+107.17E+001.71E+055.28E+081.87E+11 + 47L3 6.352.25E+011.08E+055.05E+076.23E+093.54E+005.45E+041.12E+083.23E+10 + 47L3 9.556.38E+001.37E+044.28E+064.93E+081.01E+007.12E+037.30E+061.44E+09 + 47L3 13.352.18E+002.51E+035.62E+055.46E+073.59E-011.34E+037.97E+051.15E+08 + 47L3 18.008.14E-015.53E+029.17E+047.33E+061.43E-013.03E+021.14E+051.24E+07 + 47L3 24.003.09E-011.29E+021.60E+041.03E+065.92E-027.27E+011.78E+041.48E+06 + 47L3 32.001.15E-013.03E+012.79E+031.43E+052.45E-021.75E+012.87E+031.83E+05 + 47L3 44.003.76E-026.10E+004.04E+021.59E+049.23E-033.63E+003.93E+021.86E+04 + 47L3 57.001.50E-021.66E+008.41E+012.64E+034.18E-031.02E+008.00E+012.99E+03 + 47L3 74.005.89E-034.50E-011.73E+014.32E+021.88E-032.84E-011.65E+014.86E+02 + 47L3 87.003.30E-032.00E-016.52E+001.41E+021.15E-031.30E-016.27E+001.60E+02 + 47L3 104.001.74E-038.25E-022.23E+004.10E+016.70E-045.49E-022.18E+004.76E+01 + 47L3 127.008.50E-043.07E-026.72E-011.03E+013.66E-042.11E-026.80E-011.25E+01 + 47L3 155.004.19E-041.15E-022.05E-012.64E+002.01E-048.23E-032.16E-013.35E+00 + 47L3 220.001.24E-042.12E-032.61E-022.46E-017.10E-051.61E-033.01E-023.52E-01 + 47L3 305.004.11E-054.56E-043.99E-032.82E-022.74E-053.66E-045.03E-034.59E-02 + 47L3 390.001.85E-051.50E-041.01E-035.80E-031.36E-051.24E-041.36E-031.04E-02 + 47L3 500.008.60E-065.08E-052.66E-041.24E-036.88E-064.32E-053.73E-042.41E-03 + 47L3 730.002.91E-061.10E-053.97E-051.37E-042.55E-069.48E-065.62E-052.85E-04 + 47L31000.001.26E-063.50E-069.51E-062.61E-051.18E-063.01E-061.27E-055.28E-05 + 47L31500.004.97E-079.68E-071.90E-063.97E-064.82E-078.36E-072.19E-066.83E-06 + 47M1 1.721.72E+015.55E+042.31E+063.36E+091.34E+039.50E+061.10E+103.28E+12 + 47M1 2.729.14E+007.75E+031.37E+063.57E+073.38E+021.00E+065.84E+081.35E+11 + 47M1 4.723.52E+004.96E+021.77E+051.55E+076.48E+016.89E+041.90E+072.95E+09 + 47M1 8.721.04E+008.72E+007.56E+039.17E+051.03E+013.72E+034.80E+054.50E+07 + 47M1 15.722.83E-018.00E-011.64E+022.41E+041.78E+002.44E+021.62E+049.06E+05 + 47M1 25.009.43E-026.62E-014.50E+007.98E+024.47E-013.07E+011.25E+034.58E+04 + 47M1 40.002.91E-022.59E-011.27E+001.99E+011.12E-014.03E+001.02E+022.44E+03 + 47M1 52.001.47E-021.31E-017.64E-015.21E+005.19E-021.35E+002.63E+014.96E+02 + 47M1 70.006.66E-035.58E-023.42E-012.00E+002.19E-024.01E-015.91E+008.51E+01 + 47M1 103.002.33E-031.68E-029.61E-025.25E-017.30E-038.79E-029.07E-019.26E+00 + 47M1 150.008.26E-044.94E-032.45E-021.17E-012.57E-032.14E-021.59E-011.17E+00 + 47M1 280.001.52E-046.38E-042.34E-038.40E-034.87E-042.42E-031.09E-024.85E-02 + 47M1 500.003.55E-051.10E-043.06E-048.29E-041.14E-043.89E-041.18E-033.51E-03 + 47M2 1.604.03E+011.22E+074.41E+102.18E+131.57E+023.23E+051.20E+082.17E+10 + 47M2 2.601.57E+011.06E+061.93E+097.44E+113.61E+013.71E+041.08E+071.97E+09 + 47M2 4.604.10E+006.08E+045.29E+071.39E+106.39E+003.14E+036.26E+059.28E+07 + 47M2 8.607.61E-012.65E+031.10E+061.82E+089.52E-012.26E+022.83E+042.87E+06 + 47M2 15.601.30E-011.37E+022.94E+043.00E+061.55E-011.94E+011.51E+039.91E+04 + 47M2 25.002.92E-021.33E+011.73E+031.18E+053.67E-022.84E+001.49E+026.74E+03 + 47M2 40.006.17E-031.33E+001.06E+024.80E+038.72E-034.26E-011.49E+014.59E+02 + 47M2 52.002.53E-033.71E-012.25E+018.13E+023.91E-031.48E-014.16E+001.02E+02 + 47M2 70.009.09E-048.85E-023.97E+001.10E+021.58E-034.53E-029.82E-011.88E+01 + 47M2 103.002.38E-041.41E-024.30E-018.50E+004.86E-049.82E-031.53E-012.12E+00 + 47M2 150.006.45E-052.42E-035.17E-027.39E-011.55E-042.26E-032.57E-022.61E-01 + 47M2 280.007.69E-061.46E-041.77E-031.51E-022.38E-052.08E-041.45E-039.04E-03 + 47M2 500.001.20E-061.28E-059.62E-055.35E-044.30E-062.50E-051.16E-044.82E-04 + 47M3 1.578.53E+012.36E+078.75E+104.34E+134.70E+011.20E+073.68E+111.11E+15 + 47M3 2.573.11E+011.97E+063.61E+091.37E+121.05E+011.02E+061.22E+101.73E+13 + 47M3 4.577.70E+001.08E+059.34E+072.42E+101.81E+005.77E+042.37E+081.51E+11 + 47M3 8.571.36E+004.52E+031.85E+062.99E+082.66E-012.50E+033.37E+069.76E+08 + 47M3 15.572.22E-012.23E+024.66E+044.66E+064.29E-021.28E+026.43E+049.45E+06 + 47M3 25.004.80E-022.06E+012.57E+031.72E+051.01E-021.21E+012.99E+032.65E+05 + 47M3 40.009.80E-031.94E+001.47E+026.47E+032.42E-031.19E+001.52E+028.41E+03 + 47M3 52.003.95E-035.22E-012.98E+011.04E+031.09E-033.26E-012.99E+011.28E+03 + 47M3 70.001.39E-031.18E-014.92E+001.31E+024.42E-047.63E-024.87E+001.57E+02 + 47M3 103.003.52E-041.73E-024.79E-018.99E+001.37E-041.18E-024.84E-011.09E+01 + 47M3 150.009.31E-052.72E-035.06E-026.75E-014.44E-051.96E-035.43E-028.84E-01 + 47M3 280.001.09E-051.37E-041.32E-031.01E-027.07E-061.10E-041.65E-031.62E-02 + 47M3 500.001.73E-061.03E-055.41E-052.53E-041.39E-068.79E-067.66E-055.00E-04 + 47M4 1.371.58E+026.34E+055.99E+101.21E+151.14E+012.92E+054.69E+097.56E+12 + 47M4 2.372.53E+013.83E+041.27E+091.04E+131.87E+001.86E+041.20E+081.25E+11 + 47M4 4.372.78E+001.66E+031.69E+075.47E+102.36E-018.51E+022.14E+061.31E+09 + 47M4 8.372.25E-015.76E+011.70E+052.23E+082.46E-023.16E+013.18E+041.08E+07 + 47M4 15.371.86E-022.35E+002.30E+031.38E+062.78E-031.44E+006.57E+021.26E+05 + 47M4 25.002.33E-031.75E-017.39E+012.44E+044.63E-041.22E-013.05E+013.69E+03 + 47M4 40.002.95E-041.38E-022.71E+005.15E+027.90E-051.11E-021.61E+001.25E+02 + 47M4 52.009.18E-053.30E-034.33E-016.08E+012.90E-052.93E-033.15E-011.90E+01 + 47M4 70.002.42E-056.55E-045.48E-025.50E+009.24E-066.47E-045.01E-022.29E+00 + 47M4 103.004.25E-068.07E-053.85E-032.51E-012.06E-069.14E-054.69E-031.50E-01 + 47M4 150.007.85E-071.08E-053.03E-041.31E-024.76E-071.37E-054.80E-041.09E-02 + 47M4 280.005.22E-084.26E-075.21E-061.14E-044.18E-086.16E-071.17E-051.57E-04 + 47M4 500.005.02E-092.51E-081.56E-071.79E-064.51E-093.70E-084.17E-073.59E-06 + 47M5 1.372.33E+028.65E+059.39E+101.81E+157.09E+003.56E+042.24E+101.96E+15 + 47M5 2.373.68E+015.14E+041.96E+091.52E+131.17E+002.30E+034.81E+081.46E+13 + 47M5 4.373.99E+002.21E+032.58E+077.83E+101.51E-011.09E+026.64E+066.40E+10 + 47M5 8.373.18E-017.53E+012.55E+053.12E+081.63E-024.29E+007.07E+042.13E+08 + 47M5 15.372.60E-023.02E+003.39E+031.87E+061.92E-032.11E-011.02E+031.12E+06 + 47M5 25.003.21E-032.20E-011.07E+023.22E+043.32E-041.92E-023.44E+011.79E+04 + 47M5 40.004.03E-041.68E-023.78E+006.50E+025.88E-051.91E-031.32E+003.55E+02 + 47M5 52.001.25E-043.97E-035.90E-017.43E+012.21E-055.28E-042.16E-014.11E+01 + 47M5 70.003.27E-057.69E-047.22E-026.42E+007.26E-061.24E-042.81E-023.68E+00 + 47M5 103.005.74E-069.12E-054.79E-032.72E-011.70E-061.93E-052.03E-031.68E-01 + 47M5 150.001.07E-061.17E-053.51E-041.28E-024.15E-073.22E-061.63E-048.78E-03 + 47M5 280.007.49E-084.44E-075.16E-068.88E-054.21E-081.84E-072.82E-067.50E-05 + 47M5 500.008.28E-092.73E-081.36E-071.09E-065.71E-091.56E-088.64E-081.09E-06 + 47N+ 50.004.42E-032.17E-011.23E+014.79E+021.28E-024.50E-011.61E+015.58E+02 + 47N+ 70.001.70E-034.69E-021.68E+004.64E+014.81E-031.08E-012.49E+005.74E+01 + 47N+ 100.006.11E-049.96E-032.15E-014.09E+001.73E-032.54E-023.76E-015.75E+00 + 47N+ 150.001.92E-041.88E-032.31E-022.82E-015.58E-045.26E-034.95E-024.86E-01 + 47N+ 200.008.51E-056.13E-045.20E-034.60E-022.55E-041.82E-031.28E-029.33E-02 + 47N+ 500.007.68E-062.63E-058.86E-053.10E-042.41E-058.56E-052.80E-049.19E-04 + 48K 27.714.93E+002.12E+011.90E+018.38E+001.69E+015.06E+022.52E+033.07E+03 + 48K 28.414.61E+002.21E+013.08E+012.70E+011.57E+014.58E+022.53E+034.79E+03 + 48K 29.714.11E+002.29E+015.10E+018.62E+011.37E+013.86E+022.47E+037.44E+03 + 48K 32.913.14E+002.21E+018.47E+012.82E+021.01E+012.61E+022.08E+031.07E+04 + 48K 36.712.35E+001.90E+019.76E+014.56E+027.36E+001.71E+021.55E+031.05E+04 + 48K 41.001.75E+001.54E+019.28E+015.22E+025.32E+001.12E+021.09E+038.60E+03 + 48K 47.001.20E+001.11E+017.50E+014.77E+023.56E+006.66E+016.68E+025.80E+03 + 48K 55.007.82E-017.31E+005.18E+013.50E+022.25E+003.66E+013.64E+023.28E+03 + 48K 67.004.51E-014.09E+002.90E+011.97E+021.27E+001.74E+011.64E+021.45E+03 + 48K 80.002.74E-012.34E+001.60E+011.05E+027.63E-018.97E+007.84E+016.55E+02 + 48K 97.001.59E-011.25E+008.00E+004.92E+014.41E-014.41E+003.49E+012.67E+02 + 48K 110.001.11E-018.22E-014.98E+002.91E+013.09E-012.79E+002.05E+011.47E+02 + 48K 127.007.37E-025.06E-012.87E+001.56E+012.07E-011.66E+001.12E+017.40E+01 + 48K 150.004.59E-022.86E-011.49E+007.48E+001.31E-019.24E-015.59E+003.34E+01 + 48K 175.002.97E-021.69E-018.11E-013.74E+008.62E-025.41E-012.96E+001.60E+01 + 48K 240.001.23E-025.77E-022.33E-019.06E-013.72E-021.86E-018.29E-013.65E+00 + 48K 325.005.46E-032.13E-027.29E-022.41E-011.70E-027.00E-022.57E-019.31E-01 + 48K 420.002.84E-039.58E-032.87E-028.30E-028.95E-033.18E-021.00E-013.09E-01 + 48K 530.001.62E-034.87E-031.30E-023.37E-025.08E-031.60E-024.42E-021.19E-01 + 48K 760.007.33E-041.89E-034.32E-039.55E-032.17E-035.82E-031.35E-023.03E-02 + 48K 1050.003.87E-048.91E-041.82E-033.55E-031.05E-032.49E-035.09E-039.92E-03 + 48K 1300.002.63E-045.67E-041.08E-031.97E-036.60E-041.47E-032.78E-035.01E-03 + 48K 1550.001.95E-043.99E-047.26E-041.25E-034.55E-049.61E-041.73E-032.94E-03 + 48L1 5.021.51E+014.86E+036.52E+051.85E+073.18E+022.78E+054.06E+071.53E+09 + 48L1 5.721.20E+012.29E+034.34E+052.04E+072.15E+021.49E+051.96E+079.25E+08 + 48L1 7.028.29E+006.42E+021.78E+051.25E+071.17E+025.63E+046.28E+063.40E+08 + 48L1 10.223.95E+003.69E+012.30E+042.17E+063.80E+019.72E+037.83E+054.18E+07 + 48L1 14.022.01E+001.94E+002.98E+033.27E+051.48E+012.28E+031.38E+056.43E+06 + 48L1 18.001.14E+002.67E+004.64E+026.02E+047.02E+007.36E+023.57E+041.43E+06 + 48L1 24.005.82E-013.06E+003.93E+017.00E+032.98E+002.06E+027.68E+032.51E+05 + 48L1 32.002.88E-012.13E+006.93E+006.46E+021.27E+005.91E+011.69E+034.43E+04 + 48L1 44.001.28E-011.08E+004.99E+005.18E+014.99E-011.53E+013.29E+026.64E+03 + 48L1 57.006.51E-025.51E-013.08E+001.74E+012.34E-015.27E+008.91E+011.45E+03 + 48L1 74.003.24E-022.59E-011.52E+008.33E+001.10E-011.84E+002.46E+013.21E+02 + 48L1 87.002.09E-021.58E-019.19E-015.00E+006.94E-029.73E-011.13E+011.28E+02 + 48L1 104.001.28E-029.04E-025.04E-012.67E+004.18E-024.88E-014.83E+004.72E+01 + 48L1 127.007.39E-034.75E-022.48E-011.24E+002.39E-022.29E-011.91E+001.58E+01 + 48L1 155.004.27E-032.47E-021.19E-015.55E-011.38E-021.10E-017.75E-015.43E+00 + 48L1 220.001.64E-037.82E-033.21E-021.28E-015.37E-033.18E-021.69E-018.94E-01 + 48L1 305.006.88E-042.73E-039.56E-033.26E-022.29E-031.06E-024.42E-021.82E-01 + 48L1 390.003.68E-041.28E-033.98E-031.21E-021.23E-034.83E-031.70E-025.90E-02 + 48L1 500.002.02E-046.22E-041.72E-034.65E-036.65E-042.26E-036.81E-032.01E-02 + 48L1 730.008.74E-052.29E-045.42E-041.24E-032.71E-047.61E-041.87E-034.44E-03 + 48L11000.004.66E-051.10E-042.31E-044.67E-041.32E-043.27E-046.98E-041.43E-03 + 48L11500.002.27E-054.73E-058.79E-051.55E-045.49E-051.19E-042.19E-043.85E-04 + 48L2 4.733.08E+013.17E+051.88E+081.51E+103.52E+011.19E+047.20E+051.91E+07 + 48L2 5.432.08E+011.58E+058.32E+078.28E+092.31E+016.89E+035.17E+052.17E+07 + 48L2 6.731.12E+015.36E+042.32E+072.62E+091.19E+012.94E+032.50E+051.44E+07 + 48L2 9.933.45E+007.59E+032.29E+062.49E+083.60E+006.23E+025.13E+043.27E+06 + 48L2 13.731.25E+001.50E+033.31E+053.10E+071.33E+001.70E+021.21E+047.03E+05 + 48L2 18.005.23E-013.89E+026.58E+045.22E+065.78E-015.73E+013.47E+031.76E+05 + 48L2 24.002.03E-019.35E+011.19E+047.69E+052.39E-011.81E+018.96E+023.78E+04 + 48L2 32.007.73E-022.26E+012.16E+031.12E+059.86E-025.71E+002.28E+027.84E+03 + 48L2 44.002.61E-024.75E+003.30E+021.32E+043.71E-021.60E+004.94E+011.33E+03 + 48L2 57.001.06E-021.35E+007.26E+012.33E+031.68E-025.69E-011.42E+013.13E+02 + 48L2 74.004.28E-033.83E-011.59E+014.10E+027.55E-032.02E-014.06E+007.23E+01 + 48L2 87.002.43E-031.77E-016.27E+001.41E+024.61E-031.06E-011.87E+002.92E+01 + 48L2 104.001.30E-037.57E-022.26E+004.35E+012.67E-035.27E-028.00E-011.08E+01 + 48L2 127.006.45E-042.96E-027.30E-011.18E+011.46E-032.41E-023.10E-013.55E+00 + 48L2 155.003.23E-041.17E-022.40E-013.29E+007.96E-041.11E-021.22E-011.19E+00 + 48L2 220.009.66E-052.38E-033.55E-023.65E-012.77E-042.90E-032.41E-021.78E-01 + 48L2 305.003.22E-055.65E-046.34E-035.04E-021.04E-048.51E-045.51E-033.20E-02 + 48L2 390.001.45E-051.99E-041.82E-031.20E-025.05E-053.45E-041.87E-039.15E-03 + 48L2 500.006.60E-067.18E-055.40E-042.99E-032.44E-051.41E-046.50E-042.69E-03 + 48L2 730.002.11E-061.65E-059.41E-054.07E-048.16E-063.76E-051.38E-044.56E-04 + 48L21000.008.77E-075.28E-062.44E-058.76E-053.34E-061.31E-054.08E-051.14E-04 + 48L21500.002.94E-071.37E-064.95E-061.45E-051.08E-063.56E-069.29E-062.17E-05 + 48L3 4.546.32E+016.59E+054.21E+083.60E+101.10E+013.37E+051.31E+095.08E+11 + 48L3 5.244.17E+013.18E+051.78E+081.86E+107.06E+001.65E+054.93E+081.69E+11 + 48L3 6.542.16E+011.03E+054.68E+075.47E+093.57E+005.46E+041.10E+083.07E+10 + 48L3 9.746.33E+001.37E+044.20E+064.66E+081.04E+007.48E+037.63E+061.47E+09 + 48L3 13.542.21E+002.59E+035.71E+055.39E+073.79E-011.45E+038.63E+051.22E+08 + 48L3 18.008.68E-016.12E+021.01E+057.98E+061.58E-013.51E+021.34E+051.46E+07 + 48L3 24.003.30E-011.43E+021.77E+041.13E+066.52E-028.40E+012.10E+041.74E+06 + 48L3 32.001.23E-013.36E+013.09E+031.57E+052.70E-022.02E+013.37E+032.14E+05 + 48L3 44.004.05E-026.76E+004.47E+021.74E+041.02E-024.19E+004.60E+022.17E+04 + 48L3 57.001.62E-021.84E+009.32E+012.91E+034.61E-031.17E+009.34E+013.48E+03 + 48L3 74.006.39E-034.99E-011.92E+014.77E+022.08E-033.28E-011.92E+015.64E+02 + 48L3 87.003.58E-032.22E-017.24E+001.56E+021.27E-031.49E-017.28E+001.85E+02 + 48L3 104.001.89E-039.16E-022.47E+004.53E+017.40E-046.31E-022.53E+005.51E+01 + 48L3 127.009.28E-043.41E-027.47E-011.15E+014.05E-042.43E-027.88E-011.44E+01 + 48L3 155.004.58E-041.28E-022.28E-012.93E+002.22E-049.43E-032.50E-013.88E+00 + 48L3 220.001.35E-042.36E-032.90E-022.73E-017.86E-051.84E-033.47E-024.05E-01 + 48L3 305.004.49E-055.07E-044.44E-033.14E-023.03E-054.17E-045.78E-035.27E-02 + 48L3 390.002.03E-051.66E-041.13E-036.45E-031.51E-051.41E-041.55E-031.19E-02 + 48L3 500.009.46E-065.65E-052.97E-041.38E-037.61E-064.89E-054.27E-042.77E-03 + 48L3 730.003.18E-061.22E-054.43E-051.53E-042.81E-061.07E-056.41E-053.26E-04 + 48L31000.001.41E-063.89E-061.06E-052.91E-051.30E-063.37E-061.44E-056.02E-05 + 48L31500.005.57E-071.07E-062.12E-064.42E-065.31E-079.29E-072.46E-067.76E-06 + 48M1 1.771.62E+015.31E+042.16E+063.07E+091.38E+039.56E+061.08E+103.12E+12 + 48M1 2.778.83E+007.85E+031.28E+063.61E+073.59E+021.06E+066.16E+081.39E+11 + 48M1 4.773.48E+005.42E+021.78E+051.44E+077.06E+017.60E+042.09E+073.20E+09 + 48M1 8.771.04E+001.13E+018.23E+039.44E+051.14E+014.18E+035.41E+055.02E+07 + 48M1 15.772.89E-016.85E-011.99E+022.68E+041.98E+002.77E+021.84E+041.02E+06 + 48M1 25.009.76E-026.16E-015.88E+009.82E+025.04E-013.51E+011.43E+035.24E+04 + 48M1 40.003.03E-022.54E-011.17E+002.50E+011.26E-014.60E+001.16E+022.78E+03 + 48M1 52.001.54E-021.31E-017.18E-015.51E+005.83E-021.53E+002.99E+015.63E+02 + 48M1 70.007.00E-035.66E-023.32E-011.94E+002.46E-024.54E-016.69E+009.62E+01 + 48M1 103.002.45E-031.73E-029.61E-025.16E-018.20E-039.92E-021.02E+001.04E+01 + 48M1 150.008.75E-045.13E-032.50E-021.18E-012.88E-032.41E-021.79E-011.32E+00 + 48M1 280.001.62E-046.73E-042.45E-038.74E-035.43E-042.71E-031.21E-025.41E-02 + 48M1 500.003.82E-051.17E-043.26E-048.83E-041.26E-044.33E-041.31E-033.91E-03 + 48M2 1.653.83E+011.18E+074.18E+102.00E+131.63E+023.26E+051.17E+081.98E+10 + 48M2 2.651.54E+011.09E+061.97E+097.36E+113.87E+013.93E+041.11E+071.94E+09 + 48M2 4.654.16E+006.49E+045.64E+071.46E+107.03E+003.43E+036.69E+059.63E+07 + 48M2 8.657.93E-012.90E+031.21E+061.97E+081.06E+002.51E+023.09E+043.08E+06 + 48M2 15.651.38E-011.52E+023.26E+043.30E+061.74E-012.17E+011.67E+031.08E+05 + 48M2 25.003.16E-021.50E+011.95E+031.33E+054.18E-023.22E+001.68E+027.53E+03 + 48M2 40.006.75E-031.50E+001.20E+025.41E+039.96E-034.84E-011.69E+015.14E+02 + 48M2 52.002.78E-034.20E-012.55E+019.17E+024.47E-031.69E-014.70E+001.15E+02 + 48M2 70.001.00E-031.00E-014.51E+001.25E+021.81E-035.17E-021.11E+002.12E+01 + 48M2 103.002.64E-041.60E-024.89E-019.64E+005.58E-041.12E-021.74E-012.40E+00 + 48M2 150.007.19E-052.76E-035.90E-028.41E-011.79E-042.59E-032.93E-022.97E-01 + 48M2 280.008.65E-061.67E-042.03E-031.73E-022.75E-052.40E-041.66E-031.03E-02 + 48M2 500.001.35E-061.46E-051.11E-046.15E-044.98E-062.89E-051.33E-045.55E-04 + 48M3 1.628.15E+012.29E+078.33E+103.98E+134.79E+011.22E+073.69E+111.09E+15 + 48M3 2.623.07E+012.02E+063.68E+091.36E+121.11E+011.10E+061.32E+101.87E+13 + 48M3 4.627.82E+001.15E+059.94E+072.53E+101.96E+006.44E+042.68E+081.71E+11 + 48M3 8.621.41E+004.94E+032.01E+063.22E+082.91E-012.86E+033.93E+061.14E+09 + 48M3 15.622.35E-012.46E+025.14E+045.08E+064.74E-021.48E+027.57E+041.12E+07 + 48M3 25.005.18E-022.31E+012.89E+031.91E+051.13E-021.42E+013.57E+033.18E+05 + 48M3 40.001.06E-022.18E+001.65E+027.22E+032.70E-031.39E+001.81E+021.00E+04 + 48M3 52.004.30E-035.87E-013.35E+011.16E+031.22E-033.82E-013.54E+011.52E+03 + 48M3 70.001.52E-031.33E-015.53E+001.47E+024.94E-048.91E-025.75E+001.85E+02 + 48M3 103.003.88E-041.95E-025.39E-011.01E+011.54E-041.37E-025.70E-011.29E+01 + 48M3 150.001.03E-043.06E-035.70E-027.59E-014.97E-052.28E-036.37E-021.04E+00 + 48M3 280.001.21E-051.54E-041.49E-031.14E-027.92E-061.27E-041.93E-031.90E-02 + 48M3 500.001.94E-061.16E-056.12E-052.86E-041.56E-061.01E-058.89E-055.81E-04 + 48M4 1.411.56E+026.27E+055.87E+101.17E+151.19E+013.04E+054.82E+097.53E+12 + 48M4 2.412.62E+014.01E+041.35E+091.11E+132.03E+002.05E+041.33E+081.36E+11 + 48M4 4.412.99E+001.81E+031.89E+076.19E+102.64E-019.75E+022.47E+061.50E+09 + 48M4 8.412.49E-016.44E+011.96E+052.60E+082.80E-023.71E+013.76E+041.27E+07 + 48M4 15.412.10E-022.68E+002.69E+031.63E+063.20E-031.71E+007.85E+021.50E+05 + 48M4 25.002.68E-032.03E-018.81E+012.95E+045.41E-041.46E-013.69E+014.47E+03 + 48M4 40.003.43E-041.61E-023.23E+006.22E+029.28E-051.34E-021.95E+001.51E+02 + 48M4 52.001.07E-043.87E-035.17E-017.34E+013.42E-053.53E-033.81E-012.30E+01 + 48M4 70.002.82E-057.71E-046.55E-026.64E+001.09E-057.80E-046.08E-022.77E+00 + 48M4 103.004.95E-069.54E-054.60E-033.03E-012.45E-061.10E-045.69E-031.81E-01 + 48M4 150.009.22E-071.28E-053.63E-041.58E-025.65E-071.66E-055.83E-041.33E-02 + 48M4 280.006.34E-085.05E-076.26E-061.38E-044.98E-087.45E-071.43E-051.91E-04 + 48M4 500.005.71E-092.98E-081.87E-072.16E-065.39E-094.48E-085.08E-074.38E-06 + 48M5 1.402.30E+028.53E+059.24E+101.76E+157.39E+003.67E+042.31E+102.00E+15 + 48M5 2.403.82E+015.37E+042.09E+091.62E+131.27E+002.51E+035.36E+081.64E+13 + 48M5 4.404.28E+002.39E+032.89E+078.86E+101.68E-011.23E+027.78E+067.64E+10 + 48M5 8.403.51E-018.38E+012.95E+053.63E+081.85E-024.94E+008.52E+042.63E+08 + 48M5 15.402.92E-023.42E+003.98E+032.22E+062.20E-032.46E-011.24E+031.39E+06 + 48M5 25.003.68E-032.53E-011.27E+023.88E+043.85E-042.26E-024.27E+012.27E+04 + 48M5 40.004.65E-041.95E-024.52E+007.83E+026.86E-052.24E-031.64E+004.47E+02 + 48M5 52.001.44E-044.62E-037.05E-018.95E+012.59E-056.23E-042.68E-015.16E+01 + 48M5 70.003.81E-058.97E-048.63E-027.73E+008.51E-061.47E-043.47E-024.60E+00 + 48M5 103.006.78E-061.07E-045.73E-033.27E-011.99E-062.27E-052.50E-032.09E-01 + 48M5 150.001.29E-061.38E-054.20E-041.54E-024.89E-073.81E-062.00E-041.09E-02 + 48M5 280.009.05E-085.17E-076.17E-061.07E-044.97E-082.18E-073.43E-069.26E-05 + 48M5 500.009.31E-093.26E-081.62E-071.31E-066.75E-091.85E-081.04E-071.34E-06 + 48N+ 50.004.87E-032.49E-011.44E+015.64E+021.50E-025.35E-011.95E+016.82E+02 + 48N+ 70.001.87E-035.36E-021.96E+005.44E+015.63E-031.28E-012.99E+006.95E+01 + 48N+ 100.006.76E-041.13E-022.50E-014.78E+002.03E-032.99E-024.48E-016.90E+00 + 48N+ 150.002.13E-042.12E-032.67E-023.29E-016.50E-046.18E-035.85E-025.78E-01 + 48N+ 200.009.46E-056.88E-045.95E-035.34E-022.96E-042.13E-031.50E-021.10E-01 + 48N+ 500.008.60E-062.95E-051.00E-043.54E-042.79E-059.94E-053.25E-041.07E-03 + 49K 28.944.53E+001.85E+011.56E+016.27E+001.64E+014.69E+022.23E+032.56E+03 + 49K 29.644.24E+001.92E+012.50E+012.01E+011.53E+014.26E+022.24E+033.95E+03 + 49K 30.943.79E+002.00E+014.13E+016.39E+011.34E+013.61E+022.19E+036.13E+03 + 49K 34.142.93E+001.94E+016.92E+012.13E+021.01E+012.48E+021.87E+038.92E+03 + 49K 37.942.21E+001.69E+018.11E+013.52E+027.37E+001.65E+021.42E+039.02E+03 + 49K 42.001.69E+001.40E+017.89E+014.13E+025.47E+001.12E+021.03E+037.63E+03 + 49K 48.001.17E+001.03E+016.54E+013.92E+023.70E+006.73E+016.45E+025.30E+03 + 49K 56.007.70E-016.88E+004.64E+012.98E+022.36E+003.75E+013.58E+023.08E+03 + 49K 68.004.49E-013.91E+002.66E+011.74E+021.34E+001.80E+011.65E+021.40E+03 + 49K 81.002.75E-012.27E+001.50E+019.51E+018.11E-019.39E+007.98E+016.47E+02 + 49K 98.001.60E-011.23E+007.63E+004.55E+014.72E-014.65E+003.59E+012.69E+02 + 49K 111.001.13E-018.13E-014.80E+002.73E+013.32E-012.96E+002.13E+011.50E+02 + 49K 128.007.52E-025.04E-012.79E+001.49E+012.23E-011.77E+001.17E+017.60E+01 + 49K 151.004.71E-022.88E-011.47E+007.22E+001.41E-019.88E-015.89E+003.46E+01 + 49K 180.002.87E-021.58E-017.38E-013.31E+008.77E-025.37E-012.86E+001.50E+01 + 49K 245.001.22E-025.59E-022.21E-018.40E-013.86E-021.90E-018.29E-013.58E+00 + 49K 330.005.53E-032.12E-027.13E-022.32E-011.79E-027.29E-022.63E-019.40E-01 + 49K 420.003.00E-031.00E-022.99E-028.61E-029.77E-033.46E-021.08E-013.34E-01 + 49K 530.001.72E-035.12E-031.36E-023.52E-025.53E-031.74E-024.80E-021.29E-01 + 49K 760.007.76E-042.00E-034.56E-031.01E-022.36E-036.33E-031.47E-023.28E-02 + 49K 1050.004.10E-049.46E-041.93E-033.76E-031.14E-032.71E-035.52E-031.07E-02 + 49K 1300.002.79E-046.02E-041.15E-032.09E-037.13E-041.59E-033.01E-035.42E-03 + 49K 1550.002.06E-044.25E-047.74E-041.34E-034.90E-041.04E-031.87E-033.19E-03 + 49L1 5.241.39E+014.36E+035.49E+051.44E+073.11E+022.59E+053.62E+071.28E+09 + 49L1 5.941.12E+012.13E+033.75E+051.63E+072.14E+021.43E+051.80E+078.01E+08 + 49L1 7.247.82E+006.30E+021.61E+051.05E+071.19E+025.57E+046.00E+063.08E+08 + 49L1 10.443.81E+004.19E+012.26E+042.00E+063.97E+011.00E+047.89E+054.04E+07 + 49L1 14.241.97E+002.23E+003.15E+033.22E+051.57E+012.41E+031.44E+056.48E+06 + 49L1 18.001.17E+002.13E+005.79E+026.80E+047.81E+008.35E+024.03E+041.58E+06 + 49L1 24.005.96E-012.71E+005.36E+018.33E+033.32E+002.33E+028.65E+032.79E+05 + 49L1 32.002.96E-012.00E+007.17E+008.20E+021.42E+006.66E+011.90E+034.93E+04 + 49L1 44.001.32E-011.05E+004.47E+006.30E+015.55E-011.72E+013.68E+027.38E+03 + 49L1 57.006.75E-025.45E-012.86E+001.73E+012.61E-015.91E+009.96E+011.61E+03 + 49L1 74.003.37E-022.60E-011.46E+007.90E+001.22E-012.06E+002.75E+013.57E+02 + 49L1 87.002.18E-021.60E-018.96E-014.77E+007.71E-021.09E+001.25E+011.42E+02 + 49L1 104.001.34E-029.20E-024.98E-012.58E+004.65E-025.44E-015.37E+005.23E+01 + 49L1 127.007.74E-034.86E-022.48E-011.22E+002.65E-022.55E-012.12E+001.75E+01 + 49L1 155.004.48E-032.55E-021.21E-015.53E-011.53E-021.22E-018.60E-016.00E+00 + 49L1 220.001.73E-038.12E-033.29E-021.30E-015.94E-033.52E-021.87E-019.86E-01 + 49L1 305.007.28E-042.86E-039.92E-033.37E-022.52E-031.17E-024.87E-022.01E-01 + 49L1 390.003.91E-041.35E-034.16E-031.26E-021.35E-035.32E-031.87E-026.49E-02 + 49L1 500.002.15E-046.57E-041.81E-034.89E-037.31E-042.49E-037.49E-032.21E-02 + 49L1 730.009.30E-052.44E-045.76E-041.32E-032.96E-048.35E-042.05E-034.87E-03 + 49L11000.004.96E-051.17E-042.47E-045.00E-041.44E-043.58E-047.64E-041.56E-03 + 49L11500.002.41E-055.06E-059.44E-051.67E-045.96E-051.30E-042.40E-044.21E-04 + 49L2 4.942.84E+012.82E+051.60E+081.21E+103.45E+011.10E+046.29E+051.53E+07 + 49L2 5.641.95E+011.45E+057.31E+076.85E+092.30E+016.56E+034.63E+051.79E+07 + 49L2 6.941.07E+015.10E+042.13E+072.28E+091.22E+012.88E+032.32E+051.25E+07 + 49L2 10.143.42E+007.60E+032.23E+062.33E+083.79E+006.36E+025.03E+043.06E+06 + 49L2 13.941.27E+001.55E+033.35E+053.04E+071.42E+001.78E+021.23E+046.89E+05 + 49L2 18.005.59E-014.33E+027.30E+045.70E+066.49E-016.39E+013.80E+031.88E+05 + 49L2 24.002.18E-011.04E+021.32E+048.44E+052.68E-012.02E+019.86E+024.10E+04 + 49L2 32.008.34E-022.52E+012.40E+031.23E+051.11E-016.39E+002.52E+028.56E+03 + 49L2 44.002.82E-025.30E+003.68E+021.46E+044.18E-021.79E+005.48E+011.47E+03 + 49L2 57.001.16E-021.51E+008.10E+012.59E+031.89E-026.39E-011.58E+013.45E+02 + 49L2 74.004.68E-034.28E-011.78E+014.57E+028.54E-032.27E-014.54E+008.01E+01 + 49L2 87.002.66E-031.98E-017.02E+001.57E+025.21E-031.20E-012.09E+003.24E+01 + 49L2 104.001.42E-038.48E-022.53E+004.85E+013.03E-035.94E-028.95E-011.20E+01 + 49L2 127.007.09E-043.32E-028.19E-011.33E+011.65E-032.72E-023.48E-013.96E+00 + 49L2 155.003.55E-041.32E-022.70E-013.69E+009.04E-041.26E-021.37E-011.33E+00 + 49L2 220.001.07E-042.68E-034.00E-024.10E-013.15E-043.29E-032.71E-022.00E-01 + 49L2 305.003.60E-056.38E-047.16E-035.68E-021.19E-049.66E-046.24E-033.61E-02 + 49L2 390.001.62E-052.24E-042.06E-031.36E-025.76E-053.92E-042.12E-031.03E-02 + 49L2 500.007.40E-068.12E-056.12E-043.38E-032.78E-051.61E-047.38E-043.05E-03 + 49L2 730.002.41E-061.87E-051.07E-044.62E-049.33E-064.30E-051.57E-045.18E-04 + 49L21000.009.65E-076.00E-062.78E-059.98E-053.82E-061.50E-054.65E-051.30E-04 + 49L21500.003.42E-071.55E-065.64E-061.65E-051.24E-064.08E-061.06E-052.48E-05 + 49L3 4.735.84E+015.89E+053.60E+082.91E+101.06E+013.16E+051.17E+094.37E+11 + 49L3 5.433.92E+012.93E+051.57E+081.56E+106.94E+001.59E+054.60E+081.51E+11 + 49L3 6.732.07E+019.87E+044.32E+074.80E+093.58E+005.45E+041.08E+082.91E+10 + 49L3 9.936.28E+001.37E+044.11E+064.38E+081.08E+007.83E+037.93E+061.50E+09 + 49L3 13.732.24E+002.66E+035.77E+055.30E+073.99E-011.56E+039.29E+051.30E+08 + 49L3 18.009.23E-016.77E+021.12E+058.66E+061.73E-014.05E+021.58E+051.71E+07 + 49L3 24.003.52E-011.58E+021.95E+041.23E+067.17E-029.69E+012.47E+042.04E+06 + 49L3 32.001.32E-013.71E+013.41E+031.72E+052.97E-022.33E+013.95E+032.50E+05 + 49L3 44.004.36E-027.48E+004.94E+021.91E+041.12E-024.82E+005.37E+022.53E+04 + 49L3 57.001.75E-022.04E+001.03E+023.20E+035.08E-031.35E+001.09E+024.04E+03 + 49L3 74.006.93E-035.52E-012.13E+015.25E+022.29E-033.77E-012.23E+016.54E+02 + 49L3 87.003.89E-032.46E-018.02E+001.72E+021.40E-031.72E-018.44E+002.15E+02 + 49L3 104.002.06E-031.01E-012.74E+005.00E+018.16E-047.25E-022.93E+006.37E+01 + 49L3 127.001.01E-033.78E-028.29E-011.27E+014.46E-042.78E-029.10E-011.67E+01 + 49L3 155.005.00E-041.42E-022.53E-013.24E+002.45E-041.08E-022.88E-014.46E+00 + 49L3 220.001.48E-042.62E-033.23E-023.03E-018.67E-052.10E-033.99E-024.66E-01 + 49L3 305.004.93E-055.64E-044.94E-033.48E-023.35E-054.75E-046.63E-036.05E-02 + 49L3 390.002.23E-051.85E-041.25E-037.17E-031.67E-051.60E-041.78E-031.36E-02 + 49L3 500.001.04E-056.27E-053.30E-041.54E-038.39E-065.52E-054.87E-043.16E-03 + 49L3 730.003.51E-061.36E-054.93E-051.70E-043.10E-061.20E-057.29E-053.73E-04 + 49L31000.001.56E-064.30E-061.18E-053.24E-051.44E-063.77E-061.63E-056.85E-05 + 49L31500.005.98E-071.18E-062.34E-064.92E-065.84E-071.03E-062.77E-068.80E-06 + 49M1 1.831.54E+015.06E+042.05E+062.77E+091.41E+039.57E+061.06E+102.96E+12 + 49M1 2.838.53E+007.92E+031.19E+063.75E+073.81E+021.12E+066.46E+081.42E+11 + 49M1 4.833.43E+005.87E+021.79E+051.34E+077.66E+018.34E+042.30E+073.45E+09 + 49M1 8.831.05E+001.41E+018.90E+039.67E+051.26E+014.69E+036.07E+055.57E+07 + 49M1 15.832.94E-016.02E-012.38E+022.97E+042.20E+003.13E+022.08E+041.15E+06 + 49M1 25.001.01E-015.70E-017.76E+001.19E+035.66E-014.02E+011.64E+035.99E+04 + 49M1 40.003.15E-022.48E-011.09E+003.17E+011.41E-015.23E+001.33E+023.16E+03 + 49M1 52.001.61E-021.30E-016.75E-016.09E+006.55E-021.74E+003.40E+016.37E+02 + 49M1 70.007.34E-035.71E-023.21E-011.91E+002.77E-025.14E-017.57E+001.09E+02 + 49M1 103.002.58E-031.77E-029.58E-025.08E-019.18E-031.12E-011.15E+001.17E+01 + 49M1 150.009.26E-045.33E-032.54E-021.19E-013.22E-032.71E-022.00E-011.47E+00 + 49M1 280.001.73E-047.09E-042.56E-039.09E-036.05E-043.02E-031.36E-026.04E-02 + 49M1 500.004.09E-051.25E-043.47E-049.38E-041.40E-044.81E-041.46E-034.34E-03 + 49M2 1.703.63E+011.13E+073.93E+101.81E+131.67E+023.27E+051.13E+081.80E+10 + 49M2 2.701.51E+011.11E+061.99E+097.23E+114.13E+014.14E+041.13E+071.90E+09 + 49M2 4.704.20E+006.90E+045.97E+071.51E+107.69E+003.74E+037.13E+059.95E+07 + 49M2 8.708.24E-013.17E+031.32E+062.11E+081.18E+002.78E+023.37E+043.29E+06 + 49M2 15.701.46E-011.68E+023.61E+043.61E+061.96E-012.43E+011.84E+031.18E+05 + 49M2 25.003.42E-021.69E+012.20E+031.49E+054.75E-023.65E+001.89E+028.39E+03 + 49M2 40.007.36E-031.69E+001.35E+026.08E+031.13E-025.49E-011.90E+015.76E+02 + 49M2 52.003.05E-034.74E-012.89E+011.03E+035.10E-031.92E-015.31E+001.29E+02 + 49M2 70.001.11E-031.13E-015.10E+001.41E+022.06E-035.88E-021.26E+002.39E+01 + 49M2 103.002.93E-041.81E-025.55E-011.09E+016.39E-041.28E-021.97E-012.71E+00 + 49M2 150.008.01E-053.13E-036.71E-029.54E-012.05E-042.96E-033.34E-023.36E-01 + 49M2 280.009.72E-061.90E-042.32E-031.97E-023.17E-052.75E-041.90E-031.18E-02 + 49M2 500.001.52E-061.68E-051.27E-047.05E-045.75E-063.33E-051.53E-046.36E-04 + 49M3 1.667.77E+012.21E+077.87E+103.63E+134.87E+011.23E+073.66E+111.06E+15 + 49M3 2.663.01E+012.06E+063.72E+091.34E+121.16E+011.17E+061.41E+101.99E+13 + 49M3 4.667.91E+001.22E+051.05E+082.62E+102.11E+007.15E+043.03E+081.94E+11 + 49M3 8.661.47E+005.37E+032.19E+063.44E+083.19E-013.25E+034.56E+061.33E+09 + 49M3 15.662.49E-012.71E+025.66E+045.53E+065.23E-021.70E+028.89E+041.31E+07 + 49M3 25.005.57E-022.58E+013.23E+032.13E+051.26E-021.66E+014.25E+033.80E+05 + 49M3 40.001.15E-022.44E+001.85E+028.05E+033.01E-031.62E+002.15E+021.19E+04 + 49M3 52.004.68E-036.57E-013.75E+011.30E+031.36E-034.45E-014.19E+011.79E+03 + 49M3 70.001.66E-031.49E-016.20E+001.64E+025.51E-041.04E-016.78E+002.19E+02 + 49M3 103.004.26E-042.19E-026.05E-011.13E+011.71E-041.59E-026.69E-011.51E+01 + 49M3 150.001.14E-043.44E-036.40E-028.50E-015.55E-052.64E-037.45E-021.21E+00 + 49M3 280.001.35E-051.74E-041.68E-031.28E-028.85E-061.46E-042.24E-032.21E-02 + 49M3 500.002.15E-061.30E-056.89E-053.22E-041.74E-061.15E-051.03E-046.74E-04 + 49M4 1.451.53E+026.15E+055.69E+101.12E+151.23E+013.14E+054.90E+097.41E+12 + 49M4 2.452.70E+014.17E+041.42E+091.17E+132.19E+002.25E+041.46E+081.46E+11 + 49M4 4.453.19E+001.96E+032.10E+076.93E+102.93E-011.11E+032.84E+061.69E+09 + 49M4 8.452.74E-017.16E+012.24E+053.01E+083.17E-024.32E+014.42E+041.48E+07 + 49M4 15.452.36E-023.03E+003.13E+031.92E+063.68E-032.02E+009.33E+021.78E+05 + 49M4 25.003.07E-032.34E-011.05E+023.55E+046.30E-041.75E-014.46E+015.38E+03 + 49M4 40.003.94E-041.87E-023.84E+007.47E+021.08E-041.60E-022.35E+001.81E+02 + 49M4 52.001.23E-044.51E-036.14E-018.82E+014.01E-054.23E-034.60E-012.77E+01 + 49M4 70.003.27E-059.02E-047.79E-027.99E+001.28E-059.35E-047.33E-023.34E+00 + 49M4 103.005.84E-061.12E-045.48E-033.65E-012.88E-061.32E-046.87E-032.19E-01 + 49M4 150.001.12E-061.51E-054.33E-041.91E-026.68E-072.00E-057.04E-041.60E-02 + 49M4 280.007.72E-086.02E-077.48E-061.66E-045.90E-088.97E-071.73E-052.32E-04 + 49M4 500.005.92E-093.59E-082.24E-072.61E-066.39E-095.40E-086.17E-075.33E-06 + 49M5 1.442.27E+028.33E+058.99E+101.69E+157.64E+003.75E+042.35E+102.00E+15 + 49M5 2.443.93E+015.56E+042.20E+091.71E+131.36E+002.71E+035.92E+081.82E+13 + 49M5 4.444.58E+002.58E+033.21E+079.93E+101.86E-011.38E+029.04E+069.04E+10 + 49M5 8.443.86E-019.26E+013.39E+054.21E+082.08E-025.65E+001.02E+053.21E+08 + 49M5 15.443.27E-023.85E+004.64E+032.61E+062.51E-032.84E-011.51E+031.72E+06 + 49M5 25.004.20E-032.91E-011.51E+024.65E+044.45E-042.64E-025.27E+012.86E+04 + 49M5 40.005.35E-042.25E-025.38E+009.38E+027.96E-052.63E-032.02E+005.61E+02 + 49M5 52.001.66E-045.34E-038.38E-011.07E+023.01E-057.30E-043.30E-016.46E+01 + 49M5 70.004.40E-051.04E-031.03E-019.27E+009.92E-061.72E-044.27E-025.74E+00 + 49M5 103.007.77E-061.25E-046.82E-033.92E-012.33E-062.67E-053.07E-032.60E-01 + 49M5 150.001.46E-061.61E-055.00E-041.85E-025.73E-074.49E-062.44E-041.35E-02 + 49M5 280.001.04E-076.04E-077.35E-061.28E-045.84E-082.57E-074.17E-061.14E-04 + 49M5 500.001.25E-083.69E-081.95E-071.56E-067.93E-092.18E-081.25E-071.63E-06 + 49N+ 50.005.39E-032.95E-011.73E+016.82E+021.76E-026.39E-012.39E+018.51E+02 + 49N+ 70.002.08E-036.29E-022.35E+006.57E+016.59E-031.53E-013.63E+008.59E+01 + 49N+ 100.007.51E-041.31E-022.99E-015.77E+002.37E-033.54E-025.39E-018.42E+00 + 49N+ 150.002.37E-042.42E-033.15E-023.94E-017.58E-047.27E-036.98E-026.98E-01 + 49N+ 200.001.05E-047.82E-046.98E-036.37E-023.45E-042.50E-031.78E-021.32E-01 + 49N+ 500.009.62E-063.32E-051.15E-044.11E-043.22E-051.15E-043.79E-041.26E-03 + 50K 30.204.15E+001.62E+011.28E+014.74E+001.60E+014.35E+021.97E+032.14E+03 + 50K 30.903.90E+001.68E+012.03E+011.50E+011.49E+013.96E+021.98E+033.27E+03 + 50K 32.203.50E+001.74E+013.35E+014.76E+011.32E+013.38E+021.95E+035.07E+03 + 50K 35.402.73E+001.70E+015.66E+011.61E+029.97E+002.36E+021.68E+037.49E+03 + 50K 39.202.09E+001.51E+016.74E+012.73E+027.39E+001.60E+021.30E+037.73E+03 + 50K 43.001.63E+001.28E+016.70E+013.26E+025.63E+001.12E+029.76E+026.76E+03 + 50K 49.001.15E+009.54E+005.71E+013.22E+023.84E+006.81E+016.22E+024.84E+03 + 50K 57.007.58E-016.46E+004.15E+012.53E+022.47E+003.84E+013.52E+022.90E+03 + 50K 69.004.46E-013.74E+002.44E+011.53E+021.42E+001.87E+011.65E+021.35E+03 + 50K 82.002.75E-012.20E+001.40E+018.59E+018.63E-019.82E+008.12E+016.38E+02 + 50K 99.001.62E-011.21E+007.27E+004.21E+015.04E-014.91E+003.70E+012.70E+02 + 50K 112.001.14E-018.04E-014.62E+002.56E+013.56E-013.13E+002.21E+011.52E+02 + 50K 129.007.67E-025.02E-012.71E+001.41E+012.40E-011.88E+001.23E+017.79E+01 + 50K 152.004.83E-022.89E-011.44E+006.96E+001.52E-011.05E+006.19E+003.58E+01 + 50K 180.003.00E-021.63E-017.49E-013.31E+009.62E-025.87E-013.09E+001.61E+01 + 50K 245.001.28E-025.79E-022.26E-018.53E-014.23E-022.08E-018.99E-013.85E+00 + 50K 330.005.81E-032.20E-027.37E-022.38E-011.95E-027.94E-022.86E-011.01E+00 + 50K 420.003.16E-031.05E-023.11E-028.91E-021.06E-023.77E-021.18E-013.61E-01 + 50K 530.001.81E-035.38E-031.43E-023.67E-026.02E-031.89E-025.20E-021.40E-01 + 50K 760.008.21E-042.11E-034.82E-031.06E-022.56E-036.87E-031.59E-023.55E-02 + 50K 1050.004.34E-041.00E-032.05E-033.99E-031.23E-032.94E-035.98E-031.16E-02 + 50K 1300.002.95E-046.40E-041.23E-032.23E-037.69E-041.72E-033.26E-035.87E-03 + 50K 1550.002.19E-044.51E-048.25E-041.42E-035.28E-041.13E-032.03E-033.45E-03 + 50L1 5.461.28E+013.92E+034.63E+051.12E+073.05E+022.42E+053.23E+071.08E+09 + 50L1 6.161.04E+011.98E+033.25E+051.31E+072.13E+021.36E+051.65E+076.93E+08 + 50L1 7.467.37E+006.16E+021.46E+058.85E+061.20E+025.50E+045.71E+062.78E+08 + 50L1 10.663.67E+004.67E+012.21E+041.84E+064.14E+011.03E+047.91E+053.90E+07 + 50L1 14.461.93E+002.73E+003.30E+033.16E+051.67E+012.55E+031.49E+056.50E+06 + 50L1 18.001.19E+001.73E+007.09E+027.62E+048.69E+009.46E+024.54E+041.75E+06 + 50L1 24.006.09E-012.38E+007.16E+019.78E+033.69E+002.63E+029.72E+033.10E+05 + 50L1 32.003.04E-011.87E+008.11E+001.02E+031.58E+007.50E+012.13E+035.48E+04 + 50L1 44.001.37E-011.02E+004.03E+007.83E+016.17E-011.94E+014.12E+028.20E+03 + 50L1 57.006.99E-025.38E-012.66E+001.79E+012.90E-016.61E+001.11E+021.79E+03 + 50L1 74.003.50E-022.61E-011.40E+007.57E+001.36E-012.30E+003.06E+013.95E+02 + 50L1 87.002.26E-021.61E-018.71E-014.58E+008.55E-021.21E+001.40E+011.57E+02 + 50L1 104.001.40E-029.33E-024.91E-012.50E+005.15E-026.06E-015.97E+005.79E+01 + 50L1 127.008.09E-034.97E-022.48E-011.20E+002.94E-022.84E-012.35E+001.93E+01 + 50L1 155.004.70E-032.62E-021.22E-015.52E-011.69E-021.36E-019.52E-016.63E+00 + 50L1 220.001.82E-038.42E-033.37E-021.32E-016.56E-033.90E-022.06E-011.09E+00 + 50L1 305.007.68E-042.99E-031.03E-023.48E-022.78E-031.29E-025.37E-022.21E-01 + 50L1 390.004.13E-041.41E-034.35E-031.31E-021.49E-035.86E-032.06E-027.13E-02 + 50L1 500.002.28E-046.94E-041.91E-035.15E-038.02E-042.73E-038.22E-032.42E-02 + 50L1 730.009.89E-052.59E-046.12E-041.40E-033.24E-049.16E-042.25E-035.33E-03 + 50L11000.005.29E-051.25E-042.64E-045.35E-041.57E-043.92E-048.37E-041.71E-03 + 50L11500.002.57E-055.41E-051.01E-041.79E-046.47E-051.42E-042.62E-044.59E-04 + 50L2 5.162.62E+012.52E+051.36E+089.69E+093.38E+011.03E+045.50E+051.23E+07 + 50L2 5.861.83E+011.33E+056.42E+075.67E+092.29E+016.24E+034.14E+051.48E+07 + 50L2 7.161.03E+014.84E+041.96E+071.98E+091.24E+012.82E+032.15E+051.08E+07 + 50L2 10.363.39E+007.58E+032.17E+062.18E+083.98E+006.48E+024.92E+042.85E+06 + 50L2 14.161.28E+001.59E+033.38E+052.98E+071.52E+001.86E+021.24E+046.72E+05 + 50L2 18.005.96E-014.81E+028.08E+046.20E+067.28E-017.11E+014.15E+032.01E+05 + 50L2 24.002.34E-011.16E+021.47E+049.24E+053.01E-012.25E+011.08E+034.43E+04 + 50L2 32.008.98E-022.80E+012.67E+031.36E+051.25E-017.13E+002.78E+029.32E+03 + 50L2 44.003.06E-025.90E+004.10E+021.62E+044.71E-022.00E+006.07E+011.61E+03 + 50L2 57.001.26E-021.68E+009.03E+012.87E+032.13E-027.15E-011.76E+013.80E+02 + 50L2 74.005.09E-034.78E-011.99E+015.07E+029.63E-032.54E-015.05E+008.86E+01 + 50L2 87.002.90E-032.21E-017.84E+001.74E+025.89E-031.34E-012.34E+003.59E+01 + 50L2 104.001.56E-039.48E-022.83E+005.41E+013.42E-036.68E-021.00E+001.33E+01 + 50L2 127.007.79E-043.71E-029.18E-011.48E+011.87E-033.06E-023.90E-014.41E+00 + 50L2 155.003.91E-041.47E-023.03E-014.13E+001.02E-031.42E-021.53E-011.48E+00 + 50L2 220.001.18E-043.01E-034.50E-024.60E-013.58E-043.72E-033.05E-022.25E-01 + 50L2 305.003.99E-057.17E-048.07E-036.39E-021.35E-041.09E-037.04E-034.06E-02 + 50L2 390.001.80E-052.53E-042.32E-031.53E-026.56E-054.45E-042.40E-031.17E-02 + 50L2 500.008.28E-069.16E-056.92E-043.82E-033.17E-051.82E-048.36E-043.44E-03 + 50L2 730.002.68E-062.12E-051.21E-045.24E-041.07E-054.90E-051.79E-045.87E-04 + 50L21000.001.09E-066.79E-063.16E-051.13E-044.36E-061.71E-055.30E-051.48E-04 + 50L21500.003.77E-071.76E-066.42E-061.88E-051.41E-064.67E-061.21E-052.83E-05 + 50L3 4.935.40E+015.27E+053.08E+082.35E+101.03E+012.96E+051.05E+093.76E+11 + 50L3 5.633.68E+012.69E+051.39E+081.30E+106.82E+001.53E+054.28E+081.36E+11 + 50L3 6.931.99E+019.39E+043.98E+074.20E+093.60E+005.42E+041.05E+082.75E+10 + 50L3 10.136.21E+001.37E+044.01E+064.12E+081.12E+008.16E+038.21E+061.52E+09 + 50L3 13.932.26E+002.73E+035.82E+055.19E+074.19E-011.67E+039.95E+051.37E+08 + 50L3 18.009.79E-017.47E+021.23E+059.38E+061.90E-014.66E+021.86E+052.00E+07 + 50L3 24.003.76E-011.75E+022.15E+041.34E+067.87E-021.12E+022.89E+042.38E+06 + 50L3 32.001.41E-014.10E+013.76E+031.87E+053.26E-022.68E+014.61E+032.91E+05 + 50L3 44.004.68E-028.26E+005.45E+022.09E+041.23E-025.54E+006.25E+022.94E+04 + 50L3 57.001.89E-022.25E+001.14E+023.51E+035.58E-031.55E+001.26E+024.68E+03 + 50L3 74.007.48E-036.10E-012.35E+015.77E+022.52E-034.32E-012.58E+017.56E+02 + 50L3 87.004.21E-032.72E-018.87E+001.89E+021.54E-031.97E-019.76E+002.48E+02 + 50L3 104.002.23E-031.12E-013.03E+005.51E+018.97E-048.30E-023.38E+007.35E+01 + 50L3 127.001.10E-034.18E-029.17E-011.39E+014.91E-043.18E-021.05E+001.92E+01 + 50L3 155.005.43E-041.57E-022.80E-013.57E+002.70E-041.23E-023.32E-015.13E+00 + 50L3 220.001.62E-042.90E-033.58E-023.35E-019.55E-052.39E-034.57E-025.34E-01 + 50L3 305.005.41E-056.24E-045.48E-033.85E-023.69E-055.38E-047.58E-036.93E-02 + 50L3 390.002.45E-052.05E-041.39E-037.94E-031.83E-051.81E-042.03E-031.56E-02 + 50L3 500.001.14E-056.95E-053.67E-041.70E-039.24E-066.23E-055.55E-043.61E-03 + 50L3 730.003.85E-061.50E-055.47E-051.89E-043.41E-061.34E-058.28E-054.24E-04 + 50L31000.001.69E-064.75E-061.30E-053.59E-051.58E-064.20E-061.84E-057.79E-05 + 50L31500.006.68E-071.30E-062.60E-065.45E-066.41E-071.14E-063.11E-069.95E-06 + 50M1 1.881.45E+014.82E+041.97E+062.48E+091.44E+039.53E+061.03E+102.78E+12 + 50M1 2.888.23E+007.95E+031.11E+063.94E+074.02E+021.18E+066.72E+081.44E+11 + 50M1 4.883.38E+006.32E+021.79E+051.24E+078.30E+019.11E+042.50E+073.70E+09 + 50M1 8.881.05E+001.74E+019.56E+039.85E+051.39E+015.24E+036.79E+056.16E+07 + 50M1 15.882.99E-015.51E-012.80E+023.25E+042.45E+003.53E+022.35E+041.29E+06 + 50M1 25.001.04E-015.25E-011.02E+011.42E+036.35E-014.59E+011.88E+036.83E+04 + 50M1 40.003.28E-022.42E-011.05E+004.01E+011.58E-015.94E+001.51E+023.58E+03 + 50M1 52.001.68E-021.29E-016.35E-016.99E+007.35E-021.97E+003.85E+017.20E+02 + 50M1 70.007.68E-035.76E-023.10E-011.92E+003.10E-025.80E-018.54E+001.22E+02 + 50M1 103.002.72E-031.81E-029.53E-025.02E-011.03E-021.26E-011.29E+001.32E+01 + 50M1 150.009.79E-045.51E-032.58E-021.20E-013.60E-033.03E-022.24E-011.65E+00 + 50M1 280.001.84E-047.46E-042.67E-039.45E-036.74E-043.37E-031.51E-026.72E-02 + 50M1 500.004.37E-051.33E-043.68E-049.97E-041.55E-045.34E-041.62E-034.81E-03 + 50M2 1.763.44E+011.08E+073.67E+101.63E+131.72E+023.27E+051.09E+081.63E+10 + 50M2 2.761.47E+011.13E+061.99E+097.04E+114.39E+014.34E+041.15E+071.85E+09 + 50M2 4.764.23E+007.31E+046.30E+071.56E+108.40E+004.05E+037.55E+051.02E+08 + 50M2 8.768.53E-013.45E+031.43E+062.26E+081.31E+003.06E+023.66E+043.50E+06 + 50M2 15.761.55E-011.86E+023.98E+043.94E+062.20E-012.71E+012.03E+031.28E+05 + 50M2 25.003.69E-021.90E+012.48E+031.67E+055.40E-024.13E+002.12E+029.33E+03 + 50M2 40.008.01E-031.90E+001.52E+026.82E+031.29E-026.22E-012.14E+016.43E+02 + 50M2 52.003.33E-035.34E-013.25E+011.16E+035.81E-032.18E-015.98E+001.45E+02 + 50M2 70.001.22E-031.28E-015.77E+001.58E+022.35E-036.67E-021.42E+002.68E+01 + 50M2 103.003.24E-042.04E-026.28E-011.23E+017.31E-041.46E-022.24E-013.05E+00 + 50M2 150.008.92E-053.55E-037.61E-021.08E+002.35E-043.37E-033.79E-023.80E-01 + 50M2 280.001.09E-052.16E-042.64E-032.25E-023.64E-053.15E-042.17E-031.34E-02 + 50M2 500.001.71E-061.91E-051.45E-048.07E-046.63E-063.83E-051.76E-047.27E-04 + 50M3 1.717.40E+012.12E+077.39E+103.29E+134.93E+011.24E+073.61E+111.03E+15 + 50M3 2.712.96E+012.09E+063.74E+091.31E+121.22E+011.25E+061.50E+102.11E+13 + 50M3 4.717.99E+001.29E+051.11E+082.70E+102.26E+007.91E+043.39E+082.18E+11 + 50M3 8.711.52E+005.82E+032.37E+063.67E+083.47E-013.68E+035.26E+061.54E+09 + 50M3 15.712.62E-012.98E+026.21E+046.00E+065.74E-021.95E+021.04E+051.54E+07 + 50M3 25.005.98E-022.88E+013.61E+032.36E+051.39E-021.94E+015.05E+034.53E+05 + 50M3 40.001.25E-022.73E+002.06E+028.94E+033.34E-031.89E+002.54E+021.41E+04 + 50M3 52.005.09E-037.34E-014.19E+011.44E+031.51E-035.18E-014.94E+012.12E+03 + 50M3 70.001.81E-031.66E-016.94E+001.82E+026.12E-041.21E-017.96E+002.57E+02 + 50M3 103.004.66E-042.45E-026.77E-011.26E+011.91E-041.85E-027.83E-011.77E+01 + 50M3 150.001.25E-043.85E-037.18E-029.50E-016.18E-053.06E-038.69E-021.41E+00 + 50M3 280.001.49E-051.95E-041.88E-031.43E-029.86E-061.68E-042.60E-032.56E-02 + 50M3 500.002.37E-061.46E-057.75E-053.61E-041.94E-061.32E-051.19E-047.79E-04 + 50M4 1.491.50E+025.99E+055.46E+101.06E+151.27E+013.22E+054.92E+097.22E+12 + 50M4 2.492.76E+014.32E+041.48E+091.22E+132.34E+002.45E+041.58E+081.55E+11 + 50M4 4.493.40E+002.11E+032.31E+077.71E+103.23E-011.26E+033.23E+061.90E+09 + 50M4 8.493.00E-017.93E+012.55E+053.47E+083.58E-025.00E+015.16E+041.71E+07 + 50M4 15.492.63E-023.41E+003.63E+032.25E+064.20E-032.37E+001.10E+032.09E+05 + 50M4 25.003.50E-032.69E-011.24E+024.25E+047.30E-042.08E-015.36E+016.45E+03 + 50M4 40.004.54E-042.16E-024.54E+008.94E+021.26E-041.91E-022.82E+002.18E+02 + 50M4 52.001.43E-045.24E-037.27E-011.06E+024.68E-055.04E-035.53E-013.33E+01 + 50M4 70.003.81E-051.05E-039.23E-029.56E+001.50E-051.12E-038.81E-024.01E+00 + 50M4 103.006.75E-061.31E-046.50E-034.37E-013.38E-061.58E-048.27E-032.63E-01 + 50M4 150.001.26E-061.78E-055.14E-042.29E-027.86E-072.39E-058.48E-041.93E-02 + 50M4 280.008.57E-087.15E-078.89E-061.99E-046.96E-081.08E-062.08E-052.80E-04 + 50M4 500.008.10E-094.23E-082.68E-073.13E-067.56E-096.48E-087.46E-076.44E-06 + 50M5 1.482.22E+028.08E+058.66E+101.60E+157.86E+003.80E+042.37E+101.99E+15 + 50M5 2.484.03E+015.72E+042.30E+091.79E+131.46E+002.91E+036.47E+082.00E+13 + 50M5 4.484.87E+002.76E+033.55E+071.10E+112.05E-011.53E+021.04E+071.06E+11 + 50M5 8.484.22E-011.02E+023.86E+054.84E+082.34E-026.43E+001.21E+053.90E+08 + 50M5 15.483.65E-024.31E+005.38E+033.05E+062.85E-033.27E-011.82E+032.12E+06 + 50M5 25.004.78E-033.32E-011.79E+025.56E+045.12E-043.08E-026.47E+013.59E+04 + 50M5 40.006.13E-042.59E-026.37E+001.12E+039.20E-053.07E-032.48E+007.00E+02 + 50M5 52.001.91E-046.16E-039.93E-011.28E+023.49E-058.53E-044.04E-018.03E+01 + 50M5 70.005.08E-051.20E-031.22E-011.11E+011.15E-052.01E-045.23E-027.12E+00 + 50M5 103.009.09E-061.45E-048.08E-034.68E-012.72E-063.13E-053.75E-033.21E-01 + 50M5 150.001.72E-061.87E-055.93E-042.21E-026.68E-075.26E-062.98E-041.66E-02 + 50M5 280.001.15E-077.11E-078.70E-061.53E-046.83E-083.02E-075.03E-061.39E-04 + 50M5 500.001.27E-084.50E-082.27E-071.87E-069.29E-092.56E-081.50E-071.99E-06 + 50N+ 50.005.93E-033.43E-012.04E+018.08E+022.04E-027.58E-012.90E+011.04E+03 + 50N+ 70.002.29E-037.25E-022.77E+007.77E+017.67E-031.80E-014.36E+001.04E+02 + 50N+ 100.008.28E-041.50E-023.50E-016.81E+002.75E-034.17E-026.42E-011.01E+01 + 50N+ 150.002.61E-042.74E-033.67E-024.64E-018.80E-048.50E-038.24E-028.31E-01 + 50N+ 200.001.17E-048.80E-048.07E-037.46E-024.00E-042.91E-032.09E-021.56E-01 + 50N+ 500.001.07E-053.71E-051.30E-044.72E-043.70E-051.33E-044.39E-041.46E-03 + 51K 31.493.82E+001.42E+011.06E+013.61E+001.56E+014.04E+021.75E+031.79E+03 + 51K 32.193.59E+001.47E+011.66E+011.13E+011.45E+013.69E+021.76E+032.72E+03 + 51K 33.493.24E+001.53E+012.73E+013.57E+011.29E+013.17E+021.73E+034.22E+03 + 51K 36.692.55E+001.50E+014.65E+011.23E+029.89E+002.24E+021.51E+036.30E+03 + 51K 40.491.97E+001.34E+015.62E+012.12E+027.40E+001.54E+021.19E+036.63E+03 + 51K 44.001.58E+001.16E+015.68E+012.56E+025.79E+001.12E+029.25E+025.98E+03 + 51K 50.001.12E+008.83E+004.97E+012.63E+023.98E+006.89E+016.00E+024.41E+03 + 51K 58.007.46E-016.08E+003.70E+012.15E+022.58E+003.93E+013.46E+022.72E+03 + 51K 70.004.44E-013.58E+002.24E+011.34E+021.50E+001.93E+011.65E+021.31E+03 + 51K 83.002.76E-012.13E+001.31E+017.75E+019.17E-011.03E+018.24E+016.28E+02 + 51K 100.001.64E-011.18E+006.91E+003.89E+015.39E-015.17E+003.81E+012.71E+02 + 51K 113.001.16E-017.94E-014.44E+002.39E+013.82E-013.31E+002.29E+011.54E+02 + 51K 130.007.82E-024.99E-012.64E+001.34E+012.58E-012.00E+001.28E+017.97E+01 + 51K 153.004.94E-022.89E-011.42E+006.70E+001.64E-011.13E+006.51E+003.70E+01 + 51K 180.003.14E-021.68E-017.59E-013.31E+001.05E-016.40E-013.34E+001.72E+01 + 51K 245.001.34E-025.99E-022.32E-018.64E-014.63E-022.26E-019.73E-014.13E+00 + 51K 330.006.11E-032.29E-027.61E-022.44E-012.13E-028.65E-023.09E-011.09E+00 + 51K 420.003.33E-031.10E-023.23E-029.22E-021.16E-024.10E-021.27E-013.89E-01 + 51K 530.001.91E-035.65E-031.49E-023.82E-026.56E-032.06E-025.64E-021.51E-01 + 51K 760.008.68E-042.23E-035.08E-031.12E-022.78E-037.46E-031.72E-023.84E-02 + 51K 1050.004.60E-041.06E-032.17E-034.23E-031.33E-033.18E-036.47E-031.25E-02 + 51K 1300.003.12E-046.79E-041.30E-032.37E-038.30E-041.86E-033.53E-036.34E-03 + 51K 1550.002.31E-044.79E-048.77E-041.52E-035.69E-041.22E-032.19E-033.72E-03 + 51L1 5.701.18E+013.53E+033.92E+058.71E+062.99E+022.26E+052.88E+079.11E+08 + 51L1 6.409.69E+001.83E+032.81E+051.05E+072.12E+021.30E+051.52E+076.00E+08 + 51L1 7.706.94E+006.00E+021.32E+057.46E+061.22E+025.41E+045.43E+062.51E+08 + 51L1 10.903.53E+005.13E+012.15E+041.69E+064.31E+011.06E+047.92E+053.75E+07 + 51L1 14.701.88E+003.42E+003.43E+033.08E+051.76E+012.68E+031.53E+056.51E+06 + 51L1 18.001.20E+001.47E+008.54E+028.45E+049.65E+001.07E+035.10E+041.94E+06 + 51L1 24.006.22E-012.06E+009.33E+011.14E+044.10E+002.96E+021.09E+043.43E+05 + 51L1 32.003.12E-011.73E+009.81E+001.25E+031.75E+008.44E+012.39E+036.08E+04 + 51L1 44.001.41E-019.83E-013.70E+009.81E+016.85E-012.17E+014.60E+029.10E+03 + 51L1 57.007.23E-025.30E-012.46E+001.93E+013.21E-017.40E+001.24E+021.98E+03 + 51L1 74.003.63E-022.60E-011.34E+007.37E+001.51E-012.57E+003.40E+014.38E+02 + 51L1 87.002.35E-021.62E-018.45E-014.42E+009.48E-021.35E+001.55E+011.74E+02 + 51L1 104.001.45E-029.46E-024.83E-012.43E+005.71E-026.74E-016.62E+006.40E+01 + 51L1 127.008.46E-035.07E-022.47E-011.18E+003.25E-023.15E-012.61E+002.13E+01 + 51L1 155.004.92E-032.69E-021.22E-015.50E-011.87E-021.50E-011.05E+007.32E+00 + 51L1 220.001.91E-038.72E-033.45E-021.35E-017.24E-034.31E-022.28E-011.20E+00 + 51L1 305.008.10E-043.12E-031.06E-023.59E-023.06E-031.42E-025.91E-022.43E-01 + 51L1 390.004.36E-041.48E-034.54E-031.37E-021.63E-036.45E-032.26E-027.83E-02 + 51L1 500.002.41E-047.32E-042.01E-035.41E-038.80E-043.00E-039.02E-032.66E-02 + 51L1 730.001.05E-042.75E-046.50E-041.49E-033.54E-041.00E-032.46E-035.84E-03 + 51L11000.005.62E-051.34E-042.82E-045.72E-041.71E-044.29E-049.15E-041.87E-03 + 51L11500.002.73E-055.79E-051.08E-041.92E-047.02E-051.54E-042.86E-045.01E-04 + 51L2 5.382.42E+012.25E+051.16E+087.80E+093.31E+019.57E+034.83E+059.97E+06 + 51L2 6.081.72E+011.22E+055.64E+074.70E+092.28E+015.93E+033.71E+051.23E+07 + 51L2 7.389.81E+004.60E+041.79E+071.72E+091.26E+012.76E+031.99E+059.36E+06 + 51L2 10.583.35E+007.55E+032.11E+062.03E+084.16E+006.59E+024.80E+042.65E+06 + 51L2 14.381.29E+001.63E+033.40E+052.90E+071.62E+001.94E+021.25E+046.54E+05 + 51L2 18.006.35E-015.34E+028.94E+046.74E+068.16E-017.90E+014.52E+032.14E+05 + 51L2 24.002.50E-011.28E+021.62E+041.01E+063.38E-012.50E+011.19E+034.77E+04 + 51L2 32.009.65E-023.11E+012.96E+031.49E+051.40E-017.94E+003.05E+021.01E+04 + 51L2 44.003.30E-026.56E+004.56E+021.78E+045.29E-022.23E+006.71E+011.76E+03 + 51L2 57.001.36E-021.87E+001.01E+023.17E+032.40E-027.99E-011.95E+014.18E+02 + 51L2 74.005.54E-035.33E-012.22E+015.62E+021.08E-022.85E-015.62E+009.78E+01 + 51L2 87.003.16E-032.46E-018.75E+001.93E+026.64E-031.51E-012.60E+003.98E+01 + 51L2 104.001.70E-031.06E-013.17E+006.01E+013.86E-037.49E-021.12E+001.48E+01 + 51L2 127.008.54E-044.15E-021.03E+001.65E+012.11E-033.44E-024.35E-014.91E+00 + 51L2 155.004.30E-041.65E-023.39E-014.61E+001.16E-031.59E-021.72E-011.65E+00 + 51L2 220.001.31E-043.38E-035.05E-025.15E-014.06E-044.19E-033.43E-022.51E-01 + 51L2 305.004.42E-058.06E-049.09E-037.18E-021.54E-041.24E-037.93E-034.56E-02 + 51L2 390.002.00E-052.85E-042.62E-031.72E-027.45E-055.04E-042.71E-031.31E-02 + 51L2 500.009.21E-061.03E-047.82E-044.31E-033.61E-052.07E-049.46E-043.88E-03 + 51L2 730.002.97E-062.39E-051.37E-045.92E-041.21E-055.57E-052.03E-046.65E-04 + 51L21000.001.24E-067.67E-063.58E-051.28E-044.98E-061.95E-056.03E-051.68E-04 + 51L21500.004.24E-071.99E-067.30E-062.14E-051.61E-065.33E-061.38E-053.22E-05 + 51L3 5.134.99E+014.73E+052.65E+081.91E+109.91E+002.78E+059.47E+083.24E+11 + 51L3 5.833.45E+012.48E+051.23E+081.09E+106.70E+001.47E+053.98E+081.21E+11 + 51L3 7.131.91E+018.93E+043.66E+073.68E+093.60E+005.39E+041.02E+082.59E+10 + 51L3 10.336.14E+001.37E+043.90E+063.85E+081.15E+008.49E+038.48E+061.53E+09 + 51L3 14.132.28E+002.80E+035.86E+055.06E+074.39E-011.78E+031.06E+061.43E+08 + 51L3 18.001.04E+008.23E+021.35E+051.01E+072.08E-015.35E+022.18E+052.34E+07 + 51L3 24.003.99E-011.93E+022.36E+041.45E+068.62E-021.28E+023.38E+042.78E+06 + 51L3 32.001.51E-014.51E+014.13E+032.04E+053.57E-023.07E+015.38E+033.38E+05 + 51L3 44.005.02E-029.10E+006.00E+022.29E+041.35E-026.36E+007.26E+023.40E+04 + 51L3 57.002.03E-022.48E+001.25E+023.84E+036.12E-031.78E+001.46E+025.41E+03 + 51L3 74.008.06E-036.73E-012.59E+016.33E+022.76E-034.95E-012.98E+018.72E+02 + 51L3 87.004.54E-033.01E-019.78E+002.07E+021.69E-032.25E-011.13E+012.86E+02 + 51L3 104.002.41E-031.24E-013.35E+006.05E+019.85E-049.49E-023.90E+008.45E+01 + 51L3 127.001.19E-034.62E-021.01E+001.53E+015.39E-043.63E-021.21E+002.20E+01 + 51L3 155.005.90E-041.74E-023.10E-013.93E+002.96E-041.40E-023.81E-015.89E+00 + 51L3 220.001.76E-043.20E-033.96E-023.69E-011.05E-042.72E-035.24E-026.12E-01 + 51L3 305.005.90E-056.91E-046.07E-034.26E-024.05E-056.10E-048.66E-037.91E-02 + 51L3 390.002.68E-052.27E-041.54E-038.78E-032.02E-052.04E-042.32E-031.78E-02 + 51L3 500.001.25E-057.69E-054.06E-041.89E-031.01E-057.01E-056.32E-044.11E-03 + 51L3 730.004.22E-061.66E-056.06E-052.10E-043.74E-061.50E-059.39E-054.82E-04 + 51L31000.001.84E-065.25E-061.44E-053.98E-051.73E-064.68E-062.08E-058.83E-05 + 51L31500.007.28E-071.43E-062.87E-066.04E-067.01E-071.26E-063.49E-061.12E-05 + 51M1 1.941.38E+014.59E+041.90E+062.20E+091.47E+039.47E+061.00E+102.61E+12 + 51M1 2.947.93E+007.98E+031.05E+064.15E+074.24E+021.23E+066.97E+081.46E+11 + 51M1 4.943.32E+006.77E+021.78E+051.15E+078.97E+019.92E+042.72E+073.95E+09 + 51M1 8.941.05E+002.10E+011.02E+041.00E+061.52E+015.84E+037.57E+056.80E+07 + 51M1 15.943.04E-015.38E-013.26E+023.55E+042.71E+003.97E+022.64E+041.44E+06 + 51M1 26.009.78E-024.64E-019.92E+001.27E+036.34E-014.39E+011.73E+036.05E+04 + 51M1 41.003.20E-022.22E-019.84E-014.19E+011.65E-016.07E+001.50E+023.48E+03 + 51M1 53.001.66E-021.22E-015.78E-017.36E+007.78E-022.05E+003.95E+017.25E+02 + 51M1 71.007.73E-035.56E-022.88E-011.88E+003.33E-026.18E-018.97E+001.27E+02 + 51M1 104.002.78E-031.80E-029.17E-024.81E-011.12E-021.36E-011.39E+001.40E+01 + 51M1 150.001.03E-035.70E-032.62E-021.21E-014.01E-033.40E-022.51E-011.84E+00 + 51M1 280.001.95E-047.84E-042.78E-039.81E-037.49E-043.75E-031.68E-027.47E-02 + 51M1 500.004.68E-051.42E-043.91E-041.06E-031.72E-045.92E-041.79E-035.33E-03 + 51M2 1.813.25E+011.04E+073.42E+101.47E+131.76E+023.26E+051.05E+081.48E+10 + 51M2 2.811.43E+011.14E+061.99E+096.85E+114.66E+014.54E+041.17E+071.80E+09 + 51M2 4.814.26E+007.72E+046.62E+071.61E+109.14E+004.37E+037.98E+051.05E+08 + 51M2 8.818.82E-013.74E+031.55E+062.41E+081.46E+003.37E+023.97E+043.72E+06 + 51M2 15.811.63E-012.04E+024.38E+044.29E+062.46E-013.01E+012.23E+031.39E+05 + 51M2 26.003.51E-021.76E+012.21E+031.43E+055.43E-023.98E+001.96E+028.28E+03 + 51M2 41.008.01E-031.90E+001.48E+026.46E+031.36E-026.36E-012.13E+016.22E+02 + 51M2 53.003.41E-035.47E-013.28E+011.14E+036.23E-032.28E-016.13E+001.45E+02 + 51M2 71.001.27E-031.34E-015.99E+001.62E+022.57E-037.15E-021.50E+002.77E+01 + 51M2 104.003.45E-042.20E-026.72E-011.30E+018.09E-041.59E-022.41E-013.25E+00 + 51M2 150.009.87E-054.01E-038.62E-021.22E+002.69E-043.84E-034.29E-024.29E-01 + 51M2 280.001.22E-052.45E-043.00E-032.55E-024.17E-053.61E-042.47E-031.52E-02 + 51M2 500.001.93E-062.18E-051.66E-049.20E-047.63E-064.39E-052.01E-048.30E-04 + 51M3 1.777.05E+012.03E+076.93E+102.98E+134.98E+011.24E+073.55E+119.93E+14 + 51M3 2.772.89E+012.12E+063.75E+091.28E+121.27E+011.32E+061.59E+102.22E+13 + 51M3 4.778.05E+001.36E+051.16E+082.78E+102.42E+008.71E+043.78E+082.43E+11 + 51M3 8.771.57E+006.29E+032.55E+063.89E+083.77E-014.16E+036.05E+061.78E+09 + 51M3 15.772.76E-013.27E+026.79E+046.49E+066.29E-022.23E+021.21E+051.80E+07 + 51M3 26.005.63E-022.64E+013.17E+031.99E+051.37E-021.85E+014.65E+034.01E+05 + 51M3 41.001.24E-022.69E+001.98E+028.34E+033.43E-031.94E+002.56E+021.39E+04 + 51M3 53.005.16E-037.44E-014.17E+011.40E+031.58E-035.47E-015.16E+012.17E+03 + 51M3 71.001.87E-031.73E-017.11E+001.84E+026.50E-041.30E-018.56E+002.73E+02 + 51M3 104.004.94E-042.61E-027.14E-011.31E+012.06E-042.04E-028.64E-011.94E+01 + 51M3 150.001.37E-044.31E-038.03E-021.06E+006.86E-053.53E-031.01E-011.65E+00 + 51M3 280.001.63E-052.18E-042.11E-031.60E-021.10E-051.93E-043.01E-032.97E-02 + 51M3 500.002.64E-061.63E-058.69E-054.05E-042.15E-061.50E-051.37E-048.99E-04 + 51M4 1.541.46E+025.82E+055.22E+109.98E+141.30E+013.29E+054.93E+097.02E+12 + 51M4 2.542.82E+014.45E+041.53E+091.27E+132.51E+002.65E+041.71E+081.63E+11 + 51M4 4.543.60E+002.27E+032.53E+078.53E+103.56E-011.42E+033.66E+062.13E+09 + 51M4 8.543.27E-018.74E+012.89E+053.97E+084.02E-025.78E+016.00E+041.97E+07 + 51M4 15.542.93E-023.83E+004.18E+032.62E+064.78E-032.77E+001.30E+032.45E+05 + 51M4 26.003.36E-032.50E-011.10E+023.66E+047.30E-042.02E-015.01E+015.80E+03 + 51M4 41.004.65E-042.18E-024.50E+008.71E+021.33E-042.00E-022.90E+002.18E+02 + 51M4 53.001.50E-045.47E-037.50E-011.08E+025.06E-055.45E-035.88E-013.47E+01 + 51M4 71.004.11E-051.13E-039.87E-021.02E+011.66E-051.24E-039.67E-024.34E+00 + 51M4 104.007.55E-061.45E-047.19E-034.83E-013.81E-061.80E-049.34E-032.95E-01 + 51M4 150.001.49E-062.08E-056.08E-042.73E-029.21E-072.85E-051.02E-032.31E-02 + 51M4 280.009.76E-088.40E-071.05E-052.38E-048.19E-081.29E-062.50E-053.36E-04 + 51M4 500.008.38E-095.03E-083.17E-073.76E-068.90E-097.75E-088.97E-077.76E-06 + 51M5 1.532.17E+027.82E+058.33E+101.51E+158.06E+003.84E+042.38E+101.96E+15 + 51M5 2.534.11E+015.87E+042.40E+091.86E+131.55E+003.11E+037.03E+082.18E+13 + 51M5 4.535.16E+002.95E+033.90E+071.22E+112.24E-011.70E+021.19E+071.23E+11 + 51M5 8.534.60E-011.12E+024.39E+055.54E+082.61E-027.30E+001.43E+054.71E+08 + 51M5 15.534.05E-024.81E+006.22E+033.55E+063.22E-033.75E-012.18E+032.60E+06 + 51M5 26.004.57E-033.06E-011.60E+024.77E+045.10E-042.95E-026.03E+013.21E+04 + 51M5 41.006.26E-042.59E-026.31E+001.09E+039.67E-053.16E-032.55E+007.09E+02 + 51M5 53.002.01E-046.37E-031.02E+001.30E+023.75E-059.04E-044.33E-018.51E+01 + 51M5 71.005.45E-051.28E-031.30E-011.17E+011.26E-052.18E-045.79E-027.84E+00 + 51M5 104.001.00E-051.59E-048.93E-035.14E-013.04E-063.48E-054.27E-033.66E-01 + 51M5 150.002.00E-062.18E-057.00E-042.63E-027.77E-076.13E-063.61E-042.04E-02 + 51M5 280.001.38E-078.28E-071.03E-051.82E-047.95E-083.53E-076.06E-061.70E-04 + 51M5 500.001.67E-085.07E-082.71E-072.21E-061.08E-083.00E-081.78E-072.41E-06 + 51N+ 50.006.45E-033.96E-012.39E+019.48E+022.36E-028.90E-013.48E+011.27E+03 + 51N+ 70.002.49E-038.30E-023.23E+009.09E+018.83E-032.11E-015.19E+001.26E+02 + 51N+ 100.009.04E-041.70E-024.07E-017.95E+003.17E-034.85E-027.58E-011.21E+01 + 51N+ 150.002.86E-043.07E-034.24E-025.40E-011.01E-039.85E-039.64E-029.81E-01 + 51N+ 200.001.28E-049.82E-049.25E-038.66E-024.58E-043.36E-032.43E-021.83E-01 + 51N+ 500.001.18E-054.12E-051.46E-045.38E-044.22E-051.52E-045.04E-041.68E-03 + 52K 32.813.51E+001.24E+018.79E+002.77E+001.52E+013.75E+021.56E+031.51E+03 + 52K 33.513.31E+001.29E+011.37E+018.54E+001.42E+013.45E+021.56E+032.28E+03 + 52K 34.813.00E+001.34E+012.23E+012.69E+011.27E+012.98E+021.55E+033.52E+03 + 52K 38.012.39E+001.33E+013.82E+019.34E+019.80E+002.13E+021.36E+035.32E+03 + 52K 41.811.86E+001.19E+014.69E+011.65E+027.40E+001.48E+021.09E+035.70E+03 + 52K 46.001.44E+001.02E+014.78E+012.07E+025.59E+001.03E+028.17E+025.10E+03 + 52K 52.001.03E+007.82E+004.21E+012.13E+023.91E+006.48E+015.41E+023.81E+03 + 52K 60.007.01E-015.46E+003.18E+011.76E+022.57E+003.77E+013.19E+022.40E+03 + 52K 72.004.25E-013.28E+001.97E+011.13E+021.52E+001.90E+011.56E+021.19E+03 + 52K 85.002.68E-011.99E+001.18E+016.71E+019.41E-011.03E+017.97E+015.87E+02 + 52K 102.001.61E-011.12E+006.35E+003.46E+015.60E-015.25E+003.76E+012.59E+02 + 52K 115.001.15E-017.61E-014.13E+002.16E+013.99E-013.39E+002.29E+011.49E+02 + 52K 132.007.79E-024.84E-012.49E+001.23E+012.71E-012.07E+001.29E+017.86E+01 + 52K 155.004.97E-022.83E-011.36E+006.27E+001.74E-011.17E+006.65E+003.70E+01 + 52K 180.003.28E-021.72E-017.68E-013.30E+001.15E-016.98E-013.61E+001.84E+01 + 52K 245.001.41E-026.19E-022.37E-018.74E-015.06E-022.47E-011.05E+004.43E+00 + 52K 330.006.41E-032.38E-027.85E-022.50E-012.33E-029.41E-023.35E-011.17E+00 + 52K 420.003.50E-031.15E-023.36E-029.52E-021.26E-024.46E-021.38E-014.19E-01 + 52K 530.002.02E-035.92E-031.56E-023.98E-027.13E-032.23E-026.10E-021.62E-01 + 52K 760.009.18E-042.35E-035.35E-031.17E-023.02E-038.09E-031.87E-024.14E-02 + 52K 1050.004.86E-041.12E-032.30E-034.48E-031.44E-033.45E-037.00E-031.35E-02 + 52K 1300.003.30E-047.20E-041.38E-032.52E-038.94E-042.02E-033.81E-036.84E-03 + 52K 1550.002.44E-045.09E-049.33E-041.61E-036.11E-041.32E-032.37E-034.02E-03 + 52L1 5.941.09E+013.19E+033.35E+056.81E+062.94E+022.12E+052.59E+077.76E+08 + 52L1 6.649.02E+001.70E+032.44E+058.43E+062.10E+021.24E+051.39E+075.20E+08 + 52L1 7.946.54E+005.82E+021.19E+056.27E+061.23E+025.32E+045.15E+062.27E+08 + 52L1 11.143.39E+005.58E+012.08E+041.54E+064.48E+011.09E+047.90E+053.59E+07 + 52L1 14.941.84E+004.25E+003.54E+032.99E+051.86E+012.82E+031.58E+056.49E+06 + 52L1 19.001.08E+001.37E+006.93E+026.53E+049.12E+009.47E+024.28E+041.55E+06 + 52L1 25.005.76E-011.81E+008.60E+019.70E+034.03E+002.79E+029.83E+032.97E+05 + 52L1 33.002.96E-011.54E+001.00E+011.19E+031.77E+008.29E+012.27E+035.60E+04 + 52L1 45.001.37E-019.01E-013.35E+001.03E+027.11E-012.21E+014.57E+028.82E+03 + 52L1 58.007.13E-024.98E-012.21E+001.98E+013.39E-017.69E+001.26E+021.98E+03 + 52L1 75.003.63E-022.50E-011.23E+007.01E+001.61E-012.71E+003.54E+014.48E+02 + 52L1 88.002.37E-021.58E-017.91E-014.15E+001.02E-011.44E+001.63E+011.80E+02 + 52L1 105.001.48E-029.29E-024.60E-012.30E+006.15E-027.21E-017.01E+006.70E+01 + 52L1 128.008.64E-035.03E-022.39E-011.13E+003.52E-023.39E-012.78E+002.25E+01 + 52L1 155.005.14E-032.75E-021.23E-015.48E-012.07E-021.66E-011.16E+008.06E+00 + 52L1 220.002.01E-039.02E-033.53E-021.37E-017.98E-034.75E-022.51E-011.32E+00 + 52L1 305.008.55E-043.25E-031.10E-023.71E-023.37E-031.57E-026.50E-022.67E-01 + 52L1 400.004.34E-041.44E-034.35E-031.29E-021.68E-036.55E-032.26E-027.67E-02 + 52L1 510.002.44E-047.31E-041.99E-035.30E-039.19E-043.11E-039.22E-032.68E-02 + 52L1 740.001.08E-042.83E-046.64E-041.51E-033.75E-041.06E-032.57E-036.06E-03 + 52L11000.005.98E-051.42E-043.01E-046.11E-041.87E-044.68E-049.99E-042.04E-03 + 52L11500.002.91E-056.19E-051.16E-042.07E-047.60E-051.68E-043.12E-045.47E-04 + 52L2 5.612.24E+012.02E+059.93E+076.33E+093.25E+018.96E+034.28E+058.07E+06 + 52L2 6.311.61E+011.12E+054.96E+073.90E+092.27E+015.64E+033.32E+051.02E+07 + 52L2 7.619.38E+004.36E+041.64E+071.49E+091.28E+012.69E+031.84E+058.11E+06 + 52L2 10.813.30E+007.50E+032.04E+061.89E+084.35E+006.69E+024.66E+042.46E+06 + 52L2 14.611.30E+001.67E+033.41E+052.82E+071.73E+002.01E+021.26E+046.34E+05 + 52L2 19.005.68E-014.52E+027.16E+045.13E+067.73E-017.06E+013.83E+031.73E+05 + 52L2 25.002.34E-011.16E+021.41E+048.41E+053.34E-012.36E+011.07E+034.13E+04 + 52L2 33.009.34E-022.97E+012.74E+031.33E+051.43E-017.81E+002.90E+029.28E+03 + 52L2 45.003.29E-026.53E+004.43E+021.69E+045.54E-022.28E+006.65E+011.70E+03 + 52L2 58.001.39E-021.91E+001.01E+023.12E+032.56E-028.33E-011.99E+014.16E+02 + 52L2 75.005.74E-035.56E-012.28E+015.69E+021.17E-023.02E-015.85E+001.00E+02 + 52L2 88.003.31E-032.59E-019.13E+001.99E+027.22E-031.61E-012.74E+004.12E+01 + 52L2 105.001.80E-031.13E-013.34E+006.27E+014.23E-038.09E-021.19E+001.55E+01 + 52L2 128.009.09E-044.46E-021.10E+001.74E+012.33E-033.75E-024.68E-015.21E+00 + 52L2 155.004.71E-041.84E-023.79E-015.13E+001.31E-031.79E-021.92E-011.84E+00 + 52L2 220.001.44E-043.78E-035.66E-025.76E-014.59E-044.72E-033.85E-022.80E-01 + 52L2 305.004.88E-059.04E-041.02E-028.05E-021.74E-041.40E-038.92E-035.11E-02 + 52L2 400.002.04E-052.88E-042.60E-031.68E-027.86E-055.20E-042.74E-031.30E-02 + 52L2 510.009.60E-061.07E-048.02E-044.36E-033.87E-052.19E-049.84E-043.98E-03 + 52L2 740.003.17E-062.56E-051.46E-046.25E-041.33E-056.04E-052.18E-047.07E-04 + 52L21000.001.38E-068.66E-064.05E-051.45E-045.67E-062.22E-056.85E-051.90E-04 + 52L21500.004.71E-072.25E-068.28E-062.42E-051.84E-066.08E-061.58E-053.66E-05 + 52L3 5.344.64E+014.26E+052.28E+081.57E+109.60E+002.62E+058.54E+082.81E+11 + 52L3 6.043.24E+012.28E+051.09E+089.11E+096.57E+001.42E+053.70E+081.09E+11 + 52L3 7.341.83E+018.48E+043.36E+073.22E+093.60E+005.35E+049.88E+072.44E+10 + 52L3 10.546.05E+001.36E+043.79E+063.60E+081.18E+008.81E+038.71E+061.54E+09 + 52L3 14.342.29E+002.85E+035.87E+054.93E+074.58E-011.90E+031.13E+061.50E+08 + 52L3 19.009.19E-016.88E+021.07E+057.61E+061.93E-014.68E+021.79E+051.82E+07 + 52L3 25.003.70E-011.72E+022.03E+041.19E+068.32E-021.20E+023.03E+042.39E+06 + 52L3 33.001.45E-014.25E+013.77E+031.80E+053.55E-023.02E+015.14E+033.14E+05 + 52L3 45.004.96E-028.95E+005.76E+022.14E+041.38E-026.51E+007.32E+023.35E+04 + 52L3 58.002.05E-022.51E+001.24E+023.72E+036.35E-031.87E+001.52E+025.53E+03 + 52L3 75.008.27E-036.94E-012.63E+016.31E+022.91E-035.30E-013.17E+019.15E+02 + 52L3 88.004.70E-033.13E-011.01E+012.10E+021.79E-032.43E-011.21E+013.04E+02 + 52L3 105.002.52E-031.30E-013.48E+006.21E+011.05E-031.03E-014.24E+009.10E+01 + 52L3 128.001.25E-034.90E-021.07E+001.60E+015.77E-043.98E-021.32E+002.40E+01 + 52L3 155.006.40E-041.92E-023.42E-014.32E+003.25E-041.60E-024.37E-016.74E+00 + 52L3 220.001.91E-043.54E-034.37E-024.06E-011.15E-043.09E-035.99E-026.99E-01 + 52L3 305.006.44E-057.62E-046.71E-034.69E-024.45E-056.90E-049.88E-039.02E-02 + 52L3 400.002.71E-052.23E-041.48E-038.26E-032.06E-052.06E-042.31E-031.74E-02 + 52L3 510.001.29E-057.80E-054.05E-041.85E-031.05E-057.24E-056.48E-044.17E-03 + 52L3 740.004.41E-061.73E-056.27E-052.15E-043.96E-061.59E-059.93E-055.08E-04 + 52L31000.002.02E-065.78E-061.59E-054.41E-051.89E-065.20E-062.35E-051.00E-04 + 52L31500.007.92E-071.57E-063.16E-066.67E-067.65E-071.40E-063.91E-061.27E-05 + 52M1 2.011.30E+014.36E+041.85E+061.94E+091.50E+039.37E+069.71E+092.44E+12 + 52M1 3.017.64E+007.97E+039.81E+054.35E+074.45E+021.29E+067.19E+081.46E+11 + 52M1 5.013.27E+007.20E+021.77E+051.07E+079.66E+011.08E+052.95E+074.20E+09 + 52M1 9.011.05E+002.50E+011.09E+041.01E+061.67E+016.49E+038.41E+057.46E+07 + 52M1 16.013.08E-015.66E-013.75E+023.85E+043.00E+004.46E+022.97E+041.60E+06 + 52M1 26.001.01E-014.26E-011.28E+011.50E+037.09E-015.00E+011.97E+036.87E+04 + 52M1 41.003.31E-022.15E-011.01E+005.21E+011.85E-016.87E+001.70E+023.93E+03 + 52M1 53.001.73E-021.20E-015.53E-018.77E+008.70E-022.32E+004.46E+018.17E+02 + 52M1 71.008.08E-035.57E-022.78E-011.98E+003.72E-026.96E-011.01E+011.42E+02 + 52M1 104.002.92E-031.83E-029.10E-024.80E-011.25E-021.53E-011.56E+001.56E+01 + 52M1 150.001.09E-035.88E-032.66E-021.22E-014.47E-033.80E-022.81E-012.06E+00 + 52M1 280.002.07E-048.22E-042.90E-031.02E-028.32E-044.17E-031.87E-028.29E-02 + 52M1 500.005.00E-051.51E-044.15E-041.12E-031.90E-046.55E-041.98E-035.89E-03 + 52M2 1.873.08E+019.88E+063.18E+101.32E+131.80E+023.24E+051.00E+081.33E+10 + 52M2 2.871.39E+011.15E+061.98E+096.64E+114.93E+014.73E+041.18E+071.74E+09 + 52M2 4.874.27E+008.12E+046.93E+071.65E+109.93E+004.71E+038.41E+051.07E+08 + 52M2 8.879.09E-014.05E+031.67E+062.57E+081.61E+003.71E+024.28E+043.94E+06 + 52M2 15.871.72E-012.24E+024.80E+044.66E+062.75E-013.34E+012.45E+031.50E+05 + 52M2 26.003.77E-021.97E+012.47E+031.59E+056.14E-024.48E+002.19E+029.17E+03 + 52M2 41.008.69E-032.13E+001.66E+027.21E+031.54E-027.17E-012.38E+016.92E+02 + 52M2 53.003.71E-036.14E-013.68E+011.28E+037.07E-032.57E-016.87E+001.61E+02 + 52M2 71.001.39E-031.51E-016.73E+001.81E+022.92E-038.08E-021.68E+003.09E+01 + 52M2 104.003.80E-042.48E-027.58E-011.46E+019.21E-041.80E-022.72E-013.64E+00 + 52M2 150.001.09E-044.53E-039.74E-021.38E+003.06E-044.36E-034.85E-024.83E-01 + 52M2 280.001.35E-052.78E-043.41E-032.89E-024.78E-054.11E-042.81E-031.72E-02 + 52M2 500.002.16E-062.48E-051.89E-041.05E-038.76E-065.03E-052.30E-049.45E-04 + 52M3 1.826.71E+011.95E+076.47E+102.69E+135.02E+011.24E+073.47E+119.53E+14 + 52M3 2.822.83E+012.14E+063.74E+091.24E+121.33E+011.39E+061.67E+102.32E+13 + 52M3 4.828.09E+001.43E+051.22E+082.85E+102.59E+009.56E+044.20E+082.70E+11 + 52M3 8.821.62E+006.79E+032.75E+064.13E+084.09E-014.68E+036.93E+062.04E+09 + 52M3 15.822.89E-013.57E+027.41E+046.99E+066.88E-022.54E+021.41E+052.09E+07 + 52M3 26.006.02E-022.93E+013.53E+032.20E+051.51E-022.15E+015.49E+034.75E+05 + 52M3 41.001.33E-022.99E+002.20E+029.23E+033.80E-032.25E+003.01E+021.63E+04 + 52M3 53.005.57E-038.28E-014.64E+011.55E+031.74E-036.34E-016.05E+012.55E+03 + 52M3 71.002.03E-031.93E-017.92E+002.04E+027.20E-041.51E-011.00E+013.19E+02 + 52M3 104.005.37E-042.90E-027.96E-011.45E+012.28E-042.36E-021.01E+002.26E+01 + 52M3 150.001.50E-044.81E-038.96E-021.18E+007.60E-054.07E-031.17E-011.91E+00 + 52M3 280.001.81E-052.43E-042.36E-031.78E-021.21E-052.21E-043.47E-033.43E-02 + 52M3 500.002.93E-061.82E-059.72E-054.52E-042.38E-061.71E-051.57E-041.03E-03 + 52M4 1.581.42E+025.62E+054.96E+109.32E+141.33E+013.35E+054.91E+096.77E+12 + 52M4 2.582.87E+014.56E+041.58E+091.31E+132.66E+002.85E+041.83E+081.72E+11 + 52M4 4.583.80E+002.42E+032.76E+079.37E+103.90E-011.59E+034.11E+062.36E+09 + 52M4 8.583.55E-019.60E+013.26E+054.53E+084.49E-026.64E+016.94E+042.26E+07 + 52M4 15.583.25E-024.29E+004.80E+033.04E+065.42E-033.22E+001.52E+032.85E+05 + 52M4 26.003.80E-032.86E-011.30E+024.35E+048.40E-042.39E-015.97E+016.90E+03 + 52M4 41.005.30E-042.50E-025.29E+001.03E+031.54E-042.37E-023.45E+002.59E+02 + 52M4 53.001.72E-046.30E-038.81E-011.28E+025.85E-056.45E-037.01E-014.13E+01 + 52M4 71.004.73E-051.31E-031.16E-011.21E+011.92E-051.47E-031.15E-015.16E+00 + 52M4 104.008.74E-061.69E-048.45E-035.74E-014.43E-062.14E-041.11E-023.51E-01 + 52M4 150.001.73E-062.43E-057.16E-043.24E-021.07E-063.39E-051.21E-032.76E-02 + 52M4 280.001.16E-079.82E-071.24E-052.84E-049.60E-081.53E-063.00E-054.02E-04 + 52M4 500.001.15E-085.88E-083.76E-074.47E-061.04E-089.23E-081.08E-069.31E-06 + 52M5 1.572.11E+027.53E+057.95E+101.41E+158.22E+003.85E+042.38E+101.92E+15 + 52M5 2.574.18E+015.99E+042.48E+091.92E+131.65E+003.30E+037.59E+082.36E+13 + 52M5 4.575.44E+003.13E+034.26E+071.34E+112.44E-011.88E+021.36E+071.43E+11 + 52M5 8.574.99E-011.22E+024.96E+056.31E+082.90E-028.24E+001.68E+055.65E+08 + 52M5 15.574.48E-025.34E+007.15E+034.11E+063.63E-034.28E-012.61E+033.17E+06 + 52M5 26.005.16E-033.47E-011.88E+025.65E+045.83E-043.42E-027.34E+014.00E+04 + 52M5 41.007.11E-042.95E-027.41E+001.29E+031.11E-043.66E-033.11E+008.77E+02 + 52M5 53.002.29E-047.28E-031.20E+001.54E+024.31E-051.05E-035.26E-011.05E+02 + 52M5 71.006.25E-051.47E-031.53E-011.38E+011.46E-052.53E-047.03E-029.65E+00 + 52M5 104.001.14E-051.83E-041.05E-026.09E-013.51E-064.04E-055.17E-034.48E-01 + 52M5 150.002.29E-062.52E-058.24E-043.12E-028.99E-077.13E-064.36E-042.49E-02 + 52M5 280.001.70E-079.60E-071.21E-052.16E-049.23E-084.11E-077.26E-062.07E-04 + 52M5 500.001.71E-086.10E-083.14E-072.62E-061.26E-083.49E-082.12E-072.91E-06 + 52N+ 50.007.04E-034.56E-012.79E+011.11E+032.72E-021.05E+004.17E+011.54E+03 + 52N+ 70.002.72E-039.50E-023.77E+001.06E+021.02E-022.47E-016.17E+001.51E+02 + 52N+ 100.009.89E-041.92E-024.73E-019.27E+003.65E-035.65E-028.94E-011.44E+01 + 52N+ 150.003.14E-043.46E-034.89E-026.29E-011.16E-031.14E-021.13E-011.16E+00 + 52N+ 200.001.41E-041.10E-031.06E-021.00E-015.27E-043.89E-032.83E-022.15E-01 + 52N+ 500.001.31E-054.58E-051.64E-046.14E-044.82E-051.75E-045.80E-041.94E-03 + 53K 34.173.24E+001.09E+017.32E+002.13E+001.48E+013.50E+021.39E+031.28E+03 + 53K 34.873.06E+001.13E+011.13E+016.49E+001.39E+013.22E+021.40E+031.91E+03 + 53K 36.172.78E+001.17E+011.83E+012.03E+011.25E+012.80E+021.38E+032.94E+03 + 53K 39.372.23E+001.17E+013.15E+017.15E+019.72E+002.03E+021.23E+034.49E+03 + 53K 43.171.75E+001.07E+013.92E+011.29E+027.41E+001.43E+029.93E+024.90E+03 + 53K 47.001.40E+009.29E+004.06E+011.63E+025.78E+001.04E+027.77E+024.52E+03 + 53K 53.001.01E+007.24E+003.67E+011.74E+024.06E+006.57E+015.23E+023.48E+03 + 53K 61.006.91E-015.14E+002.84E+011.50E+022.70E+003.86E+013.14E+022.25E+03 + 53K 73.004.22E-013.13E+001.80E+019.95E+011.60E+001.97E+011.56E+021.15E+03 + 53K 86.002.68E-011.93E+001.10E+016.04E+011.00E+001.07E+018.09E+015.77E+02 + 53K 103.001.62E-011.10E+006.03E+003.19E+015.98E-015.52E+003.86E+012.60E+02 + 53K 116.001.16E-017.50E-013.97E+002.02E+014.27E-013.59E+002.36E+011.51E+02 + 53K 133.007.93E-024.80E-012.41E+001.17E+012.91E-012.20E+001.34E+018.02E+01 + 53K 156.005.08E-022.84E-011.33E+006.02E+001.87E-011.25E+006.97E+003.82E+01 + 53K 185.003.17E-021.61E-016.99E-012.92E+001.17E-016.92E-013.48E+001.73E+01 + 53K 250.001.39E-025.99E-022.24E-018.11E-015.24E-022.51E-011.05E+004.33E+00 + 53K 335.006.47E-032.36E-027.66E-022.41E-012.44E-029.76E-023.42E-011.18E+00 + 53K 420.003.68E-031.20E-023.48E-029.83E-021.38E-024.85E-021.49E-014.50E-01 + 53K 530.002.12E-036.20E-031.63E-024.14E-027.75E-032.43E-026.60E-021.75E-01 + 53K 760.009.67E-042.47E-035.63E-031.23E-023.27E-038.78E-032.02E-024.46E-02 + 53K 1050.005.13E-041.19E-032.43E-034.74E-031.55E-033.73E-037.57E-031.46E-02 + 53K 1300.003.49E-047.63E-041.47E-032.67E-039.64E-042.18E-034.12E-037.38E-03 + 53K 1550.002.58E-045.39E-049.91E-041.72E-036.58E-041.42E-032.56E-034.34E-03 + 53L1 6.191.01E+012.88E+032.85E+055.36E+062.88E+021.98E+052.31E+076.57E+08 + 53L1 6.898.40E+001.57E+032.12E+056.78E+062.09E+021.19E+051.27E+074.50E+08 + 53L1 8.196.16E+005.64E+021.07E+055.27E+061.25E+025.22E+044.87E+062.04E+08 + 53L1 11.393.26E+005.99E+012.01E+041.40E+064.65E+011.11E+047.86E+053.43E+07 + 53L1 15.191.79E+005.22E+003.63E+032.89E+051.97E+012.95E+031.62E+056.45E+06 + 53L1 19.001.10E+001.30E+008.22E+027.18E+041.01E+011.07E+034.80E+041.70E+06 + 53L1 25.005.87E-011.57E+001.09E+021.11E+044.47E+003.14E+021.10E+043.28E+05 + 53L1 33.003.03E-011.42E+001.26E+011.42E+031.97E+009.31E+012.54E+036.19E+04 + 53L1 45.001.41E-018.65E-013.24E+001.28E+027.88E-012.47E+015.09E+029.75E+03 + 53L1 58.007.36E-024.88E-012.07E+002.26E+013.75E-018.58E+001.41E+022.19E+03 + 53L1 75.003.76E-022.49E-011.18E+007.11E+001.78E-013.02E+003.93E+014.95E+02 + 53L1 88.002.46E-021.58E-017.66E-014.10E+001.12E-011.60E+001.81E+011.99E+02 + 53L1 105.001.54E-029.38E-024.51E-012.26E+006.80E-028.01E-017.76E+007.39E+01 + 53L1 128.009.01E-035.12E-022.38E-011.12E+003.89E-023.76E-013.08E+002.48E+01 + 53L1 155.005.37E-032.81E-021.24E-015.48E-012.28E-021.84E-011.28E+008.88E+00 + 53L1 220.002.10E-039.32E-033.60E-021.39E-018.80E-035.25E-022.77E-011.45E+00 + 53L1 305.008.99E-043.38E-031.14E-023.82E-023.71E-031.73E-027.15E-022.93E-01 + 53L1 400.004.58E-041.51E-034.55E-031.35E-021.85E-037.20E-032.48E-028.40E-02 + 53L1 510.002.59E-047.70E-042.09E-035.57E-031.01E-033.41E-031.01E-022.93E-02 + 53L1 740.001.15E-043.00E-047.04E-041.61E-034.10E-041.16E-032.82E-036.63E-03 + 53L11000.006.35E-051.51E-043.21E-046.52E-042.03E-045.12E-041.09E-032.23E-03 + 53L11500.003.09E-056.60E-051.24E-042.21E-048.24E-051.83E-043.40E-045.96E-04 + 53L2 5.852.07E+011.81E+058.48E+075.11E+093.19E+018.35E+033.77E+056.56E+06 + 53L2 6.551.51E+011.02E+054.35E+073.23E+092.25E+015.35E+032.97E+058.48E+06 + 53L2 7.858.96E+004.12E+041.49E+071.29E+091.29E+012.62E+031.70E+057.01E+06 + 53L2 11.053.25E+007.43E+031.97E+061.75E+084.54E+006.76E+024.52E+042.27E+06 + 53L2 14.851.31E+001.70E+033.40E+052.73E+071.84E+002.09E+021.26E+046.13E+05 + 53L2 19.006.03E-015.00E+027.89E+045.55E+068.64E-017.82E+014.16E+031.83E+05 + 53L2 25.002.49E-011.29E+021.56E+049.15E+053.73E-012.62E+011.17E+034.43E+04 + 53L2 33.001.00E-013.29E+013.02E+031.45E+051.60E-018.67E+003.18E+021.01E+04 + 53L2 45.003.54E-027.23E+004.90E+021.85E+046.21E-022.53E+007.33E+011.85E+03 + 53L2 58.001.50E-022.12E+001.12E+023.43E+032.87E-029.28E-012.19E+014.56E+02 + 53L2 75.006.22E-036.17E-012.53E+016.28E+021.32E-023.37E-016.48E+001.10E+02 + 53L2 88.003.60E-032.88E-011.01E+012.20E+028.12E-031.80E-013.04E+004.54E+01 + 53L2 105.001.96E-031.25E-013.72E+006.95E+014.76E-039.05E-021.32E+001.71E+01 + 53L2 128.009.93E-044.97E-021.22E+001.93E+012.62E-034.20E-025.21E-015.78E+00 + 53L2 155.005.16E-042.05E-024.23E-015.71E+001.48E-032.01E-022.14E-012.04E+00 + 53L2 220.001.58E-044.22E-036.33E-026.42E-015.19E-045.31E-034.31E-023.13E-01 + 53L2 305.005.39E-051.01E-031.14E-029.00E-021.97E-041.58E-031.00E-025.71E-02 + 53L2 400.002.25E-053.23E-042.92E-031.88E-028.91E-055.88E-043.09E-031.46E-02 + 53L2 510.001.06E-051.20E-049.03E-044.90E-034.40E-052.48E-041.11E-034.47E-03 + 53L2 740.003.57E-062.88E-051.65E-047.05E-041.51E-056.86E-052.47E-047.98E-04 + 53L21000.001.53E-069.76E-064.58E-051.64E-046.45E-062.52E-057.77E-052.15E-04 + 53L21500.005.28E-072.54E-069.37E-062.74E-052.09E-066.92E-061.79E-054.16E-05 + 53L3 5.564.30E+013.82E+051.96E+081.28E+109.27E+002.46E+057.68E+082.43E+11 + 53L3 6.263.05E+012.10E+059.62E+077.63E+096.43E+001.36E+053.43E+089.72E+10 + 53L3 7.561.75E+018.04E+043.09E+072.81E+093.60E+005.30E+049.55E+072.28E+10 + 53L3 10.765.96E+001.34E+043.66E+063.35E+081.21E+009.11E+038.92E+061.54E+09 + 53L3 14.562.30E+002.91E+035.87E+054.78E+074.78E-012.02E+031.20E+061.56E+08 + 53L3 19.009.72E-017.56E+021.17E+058.19E+062.11E-015.36E+022.09E+052.12E+07 + 53L3 25.003.92E-011.89E+022.22E+041.29E+069.08E-021.37E+023.52E+042.77E+06 + 53L3 33.001.54E-014.67E+014.13E+031.95E+053.88E-023.45E+015.97E+033.63E+05 + 53L3 45.005.30E-029.83E+006.32E+022.32E+041.50E-027.44E+008.46E+023.87E+04 + 53L3 58.002.19E-022.76E+001.36E+024.05E+036.94E-032.13E+001.76E+026.36E+03 + 53L3 75.008.89E-037.63E-012.89E+016.89E+023.18E-036.04E-013.65E+011.05E+03 + 53L3 88.005.06E-033.44E-011.10E+012.29E+021.96E-032.77E-011.39E+013.48E+02 + 53L3 105.002.71E-031.43E-013.83E+006.80E+011.15E-031.18E-014.86E+001.04E+02 + 53L3 128.001.35E-035.39E-021.17E+001.75E+016.31E-044.53E-021.52E+002.74E+01 + 53L3 155.006.93E-042.11E-023.76E-014.74E+003.56E-041.82E-024.99E-017.71E+00 + 53L3 220.002.07E-043.90E-034.82E-024.46E-011.26E-043.50E-036.83E-027.97E-01 + 53L3 305.006.97E-058.40E-047.40E-035.16E-024.87E-057.79E-041.12E-021.03E-01 + 53L3 400.002.93E-052.46E-041.64E-039.10E-032.25E-052.32E-042.62E-031.98E-02 + 53L3 510.001.39E-058.59E-054.47E-042.04E-031.15E-058.13E-057.34E-044.73E-03 + 53L3 740.004.82E-061.91E-056.93E-052.37E-044.33E-061.78E-051.12E-045.75E-04 + 53L31000.002.23E-066.34E-061.76E-054.86E-052.06E-065.77E-062.64E-051.13E-04 + 53L31500.008.66E-071.72E-063.48E-067.36E-068.34E-071.54E-064.37E-061.43E-05 + 53M1 2.071.23E+014.13E+041.79E+061.69E+091.52E+039.22E+069.30E+092.25E+12 + 53M1 3.077.34E+007.94E+039.20E+054.50E+074.67E+021.33E+067.36E+081.46E+11 + 53M1 5.073.20E+007.62E+021.75E+059.92E+061.04E+021.16E+053.17E+074.43E+09 + 53M1 9.071.05E+002.93E+011.15E+041.02E+061.83E+017.19E+039.31E+058.16E+07 + 53M1 16.073.12E-016.37E-014.27E+024.14E+043.31E+004.99E+023.32E+041.78E+06 + 53M1 26.001.04E-013.90E-011.62E+011.74E+037.93E-015.68E+012.24E+037.80E+04 + 53M1 41.003.43E-022.08E-011.07E+006.43E+012.06E-017.77E+001.92E+024.43E+03 + 53M1 53.001.79E-021.18E-015.36E-011.06E+019.72E-022.62E+005.03E+019.19E+02 + 53M1 71.008.41E-035.58E-022.69E-012.13E+004.15E-027.83E-011.14E+011.60E+02 + 53M1 104.003.06E-031.86E-029.02E-024.84E-011.39E-021.71E-011.74E+001.75E+01 + 53M1 150.001.15E-036.05E-032.69E-021.23E-014.98E-034.24E-023.13E-012.29E+00 + 53M1 280.002.20E-048.61E-043.01E-031.06E-029.23E-044.64E-032.07E-029.20E-02 + 53M1 500.005.32E-051.60E-044.39E-041.19E-032.10E-047.25E-042.19E-036.51E-03 + 53M2 1.932.90E+019.38E+062.93E+101.17E+131.84E+023.20E+059.55E+071.19E+10 + 53M2 2.931.35E+011.16E+061.96E+096.38E+115.20E+014.90E+041.19E+071.68E+09 + 53M2 4.934.27E+008.51E+047.22E+071.68E+101.08E+015.05E+038.82E+051.09E+08 + 53M2 8.939.34E-014.37E+031.80E+062.72E+081.78E+004.06E+024.61E+044.16E+06 + 53M2 15.931.80E-012.46E+025.26E+045.04E+063.06E-013.70E+012.67E+031.62E+05 + 53M2 26.004.04E-022.20E+012.77E+031.77E+056.93E-025.04E+002.44E+021.01E+04 + 53M2 41.009.39E-032.38E+001.86E+028.04E+031.74E-028.07E-012.66E+017.67E+02 + 53M2 53.004.03E-036.88E-014.13E+011.43E+038.01E-032.90E-017.69E+001.80E+02 + 53M2 71.001.52E-031.69E-017.56E+002.03E+023.31E-039.11E-021.88E+003.45E+01 + 53M2 104.004.17E-042.78E-028.52E-011.64E+011.05E-032.04E-023.06E-014.08E+00 + 53M2 150.001.21E-045.10E-031.10E-011.55E+003.49E-044.94E-035.47E-025.42E-01 + 53M2 280.001.51E-053.14E-043.86E-033.27E-025.46E-054.68E-043.19E-031.95E-02 + 53M2 500.002.41E-062.81E-052.15E-041.19E-031.00E-055.75E-052.62E-041.07E-03 + 53M3 1.876.38E+011.85E+076.00E+102.41E+135.04E+011.24E+073.37E+119.05E+14 + 53M3 2.872.76E+012.15E+063.71E+091.19E+121.38E+011.46E+061.75E+102.40E+13 + 53M3 4.878.11E+001.50E+051.27E+082.90E+102.75E+001.04E+054.63E+082.98E+11 + 53M3 8.871.66E+007.29E+032.94E+064.35E+084.42E-015.25E+037.90E+062.33E+09 + 53M3 15.873.03E-013.89E+028.06E+047.52E+067.50E-022.89E+021.63E+052.42E+07 + 53M3 26.006.42E-023.26E+013.92E+032.42E+051.67E-022.48E+016.47E+035.62E+05 + 53M3 41.001.43E-023.32E+002.45E+021.02E+044.19E-032.60E+003.53E+021.92E+04 + 53M3 53.006.01E-039.20E-015.15E+011.71E+031.92E-037.32E-017.08E+012.98E+03 + 53M3 71.002.20E-032.14E-018.80E+002.25E+027.94E-041.74E-011.17E+013.72E+02 + 53M3 104.005.84E-043.23E-028.86E-011.61E+012.51E-042.71E-021.17E+002.62E+01 + 53M3 150.001.64E-045.35E-039.98E-021.31E+008.40E-054.67E-031.36E-012.22E+00 + 53M3 280.001.98E-052.71E-042.63E-031.98E-021.34E-052.52E-044.00E-033.95E-02 + 53M3 500.003.20E-062.03E-051.08E-045.04E-042.64E-061.94E-051.80E-041.19E-03 + 53M4 1.631.38E+025.39E+054.66E+108.59E+141.35E+013.37E+054.83E+096.44E+12 + 53M4 2.632.90E+014.64E+041.61E+091.33E+132.82E+003.05E+041.94E+081.78E+11 + 53M4 4.633.99E+002.57E+032.98E+071.02E+114.24E-011.77E+034.60E+062.60E+09 + 53M4 8.633.84E-011.05E+023.66E+055.13E+085.00E-027.59E+017.98E+042.58E+07 + 53M4 15.633.58E-024.77E+005.48E+033.51E+066.11E-033.74E+001.77E+033.30E+05 + 53M4 26.004.28E-033.25E-011.51E+025.14E+049.63E-042.82E-017.10E+018.18E+03 + 53M4 41.006.03E-042.87E-026.18E+001.22E+031.78E-042.80E-024.10E+003.07E+02 + 53M4 53.001.96E-047.24E-031.03E+001.51E+026.75E-057.62E-038.33E-014.90E+01 + 53M4 71.005.38E-051.51E-031.36E-011.43E+012.22E-051.73E-031.37E-016.13E+00 + 53M4 104.009.93E-061.96E-049.90E-036.79E-015.14E-062.53E-041.33E-024.17E-01 + 53M4 150.001.99E-062.83E-058.40E-043.84E-021.25E-064.02E-051.45E-033.28E-02 + 53M4 280.001.41E-071.15E-061.46E-053.36E-041.12E-071.82E-063.57E-054.79E-04 + 53M4 500.001.37E-086.99E-084.43E-075.32E-061.22E-081.10E-071.29E-061.11E-05 + 53M5 1.622.04E+027.19E+057.52E+101.31E+158.35E+003.84E+042.35E+101.85E+15 + 53M5 2.624.23E+016.07E+042.54E+091.96E+131.74E+003.49E+038.12E+082.52E+13 + 53M5 4.625.71E+003.31E+034.63E+071.46E+112.65E-012.06E+021.54E+071.63E+11 + 53M5 8.625.39E-011.33E+025.58E+057.14E+083.21E-029.25E+001.97E+056.72E+08 + 53M5 15.624.93E-025.90E+008.19E+034.74E+064.07E-034.86E-013.10E+033.85E+06 + 53M5 26.005.80E-033.92E-012.20E+026.67E+046.63E-043.94E-028.91E+014.95E+04 + 53M5 41.008.06E-043.35E-028.68E+001.52E+031.27E-044.23E-033.77E+001.08E+03 + 53M5 53.002.60E-048.29E-031.41E+001.82E+024.93E-051.21E-036.38E-011.29E+02 + 53M5 71.007.11E-051.68E-031.79E-011.63E+011.67E-052.93E-048.50E-021.18E+01 + 53M5 104.001.31E-052.09E-041.23E-027.18E-014.04E-064.67E-056.24E-035.47E-01 + 53M5 150.002.63E-062.89E-059.66E-043.68E-021.04E-068.25E-065.25E-043.03E-02 + 53M5 280.001.97E-071.11E-061.42E-052.55E-041.07E-074.76E-078.68E-062.50E-04 + 53M5 500.002.16E-086.81E-083.69E-073.08E-061.46E-084.05E-082.51E-073.51E-06 + 53N+ 50.007.63E-035.22E-013.24E+011.29E+033.12E-021.22E+004.97E+011.86E+03 + 53N+ 70.002.95E-031.08E-014.36E+001.23E+021.17E-022.87E-017.30E+001.81E+02 + 53N+ 100.001.07E-032.17E-025.46E-011.08E+014.18E-036.55E-021.05E+001.71E+01 + 53N+ 150.003.42E-043.87E-035.61E-027.28E-011.33E-031.32E-021.31E-011.36E+00 + 53N+ 200.001.53E-041.22E-031.21E-021.16E-016.02E-044.47E-033.28E-022.51E-01 + 53N+ 500.001.44E-055.06E-051.84E-046.97E-045.47E-051.99E-046.62E-042.23E-03 + 54K 35.562.99E+009.62E+006.11E+001.65E+001.45E+013.26E+021.24E+031.09E+03 + 54K 36.262.83E+009.93E+009.30E+004.96E+001.36E+013.02E+021.25E+031.61E+03 + 54K 37.562.58E+001.03E+011.50E+011.54E+011.22E+012.63E+021.24E+032.47E+03 + 54K 40.762.09E+001.03E+012.60E+015.48E+019.64E+001.93E+021.11E+033.80E+03 + 54K 44.561.65E+009.51E+003.27E+011.01E+027.42E+001.38E+029.09E+024.22E+03 + 54K 49.001.28E+008.17E+003.43E+011.33E+025.61E+009.61E+016.93E+023.88E+03 + 54K 55.009.42E-016.44E+003.12E+011.42E+024.00E+006.21E+014.74E+023.02E+03 + 54K 63.006.52E-014.64E+002.45E+011.23E+022.69E+003.72E+012.90E+022.00E+03 + 54K 75.004.05E-012.88E+001.59E+018.42E+011.63E+001.94E+011.48E+021.05E+03 + 54K 88.002.60E-011.80E+009.90E+005.24E+011.03E+001.07E+017.83E+015.40E+02 + 54K 105.001.59E-011.04E+005.54E+002.84E+016.20E-015.61E+003.81E+012.49E+02 + 54K 118.001.15E-017.19E-013.69E+001.83E+014.46E-013.67E+002.36E+011.47E+02 + 54K 135.007.90E-024.65E-012.27E+001.07E+013.06E-012.27E+001.36E+017.90E+01 + 54K 158.005.10E-022.78E-011.27E+005.63E+001.98E-011.30E+007.11E+003.81E+01 + 54K 185.003.30E-021.65E-017.06E-012.91E+001.28E-017.53E-013.75E+001.84E+01 + 54K 250.001.46E-026.18E-022.29E-018.19E-015.72E-022.73E-011.13E+004.63E+00 + 54K 335.006.78E-032.45E-027.88E-022.46E-012.66E-021.06E-013.69E-011.26E+00 + 54K 430.003.65E-031.16E-023.33E-029.27E-021.41E-024.90E-021.48E-014.39E-01 + 54K 540.002.14E-036.17E-031.60E-024.03E-028.04E-032.49E-026.68E-021.75E-01 + 54K 770.009.93E-042.52E-035.71E-031.24E-023.43E-039.17E-032.09E-024.59E-02 + 54K 1050.005.42E-041.26E-032.57E-035.01E-031.68E-034.04E-038.17E-031.57E-02 + 54K 1300.003.68E-048.08E-041.56E-032.83E-031.04E-032.36E-034.45E-037.96E-03 + 54K 1550.002.73E-045.71E-041.05E-031.82E-037.07E-041.53E-032.76E-034.67E-03 + 54L1 6.459.29E+002.58E+032.41E+054.19E+062.81E+021.84E+052.05E+075.52E+08 + 54L1 7.157.79E+001.45E+031.83E+055.42E+062.07E+021.12E+051.16E+073.86E+08 + 54L1 8.455.78E+005.42E+029.55E+044.39E+061.25E+025.09E+044.58E+061.81E+08 + 54L1 11.653.12E+006.35E+011.93E+041.26E+064.81E+011.13E+047.75E+053.25E+07 + 54L1 15.451.74E+006.28E+003.68E+032.77E+052.07E+013.07E+031.65E+056.36E+06 + 54L1 19.001.11E+001.40E+009.63E+027.84E+041.12E+011.20E+035.36E+041.87E+06 + 54L1 25.005.98E-011.35E+001.35E+021.26E+044.95E+003.52E+021.23E+043.61E+05 + 54L1 33.003.10E-011.30E+001.61E+011.68E+032.18E+001.04E+022.83E+036.82E+04 + 54L1 45.001.45E-018.26E-013.25E+001.57E+028.73E-012.76E+015.66E+021.08E+04 + 54L1 58.007.59E-024.76E-011.94E+002.65E+014.15E-019.57E+001.56E+022.42E+03 + 54L1 75.003.89E-022.47E-011.12E+007.39E+001.97E-013.36E+004.35E+015.46E+02 + 54L1 88.002.55E-021.58E-017.40E-014.10E+001.24E-011.77E+002.00E+012.20E+02 + 54L1 105.001.59E-029.45E-024.42E-012.23E+007.52E-028.88E-018.59E+008.14E+01 + 54L1 128.009.37E-035.20E-022.36E-011.11E+004.30E-024.16E-013.40E+002.73E+01 + 54L1 155.005.61E-032.87E-021.24E-015.48E-012.52E-022.04E-011.42E+009.76E+00 + 54L1 220.002.21E-039.61E-033.67E-021.41E-019.69E-035.79E-023.04E-011.59E+00 + 54L1 305.009.47E-043.52E-031.18E-023.95E-024.08E-031.90E-027.85E-023.21E-01 + 54L1 400.004.84E-041.59E-034.74E-031.41E-022.03E-037.90E-032.72E-029.20E-02 + 54L1 510.002.73E-048.10E-042.19E-035.86E-031.10E-033.74E-031.11E-023.20E-02 + 54L1 740.001.22E-043.17E-047.46E-041.70E-034.47E-041.27E-033.08E-037.23E-03 + 54L11000.006.74E-051.61E-043.41E-046.96E-042.21E-045.58E-041.19E-032.43E-03 + 54L11500.003.28E-057.03E-051.33E-042.37E-048.93E-051.99E-043.70E-046.49E-04 + 54L2 6.101.91E+011.61E+057.22E+074.11E+093.12E+017.76E+033.31E+055.31E+06 + 54L2 6.801.41E+019.34E+043.81E+072.66E+092.24E+015.07E+032.65E+057.02E+06 + 54L2 8.108.54E+003.88E+041.36E+071.11E+091.31E+012.54E+031.56E+056.03E+06 + 54L2 11.303.19E+007.33E+031.89E+061.61E+084.73E+006.81E+024.37E+042.09E+06 + 54L2 15.101.31E+001.73E+033.38E+052.63E+071.95E+002.15E+021.26E+045.89E+05 + 54L2 19.006.39E-015.52E+028.68E+045.99E+069.64E-018.64E+014.50E+031.93E+05 + 54L2 25.002.65E-011.42E+021.71E+049.94E+054.17E-012.90E+011.28E+034.74E+04 + 54L2 33.001.07E-013.63E+013.34E+031.59E+051.79E-019.62E+003.48E+021.08E+04 + 54L2 45.003.81E-028.01E+005.42E+022.03E+046.96E-022.81E+008.06E+012.01E+03 + 54L2 58.001.62E-022.35E+001.24E+023.77E+033.22E-021.03E+002.42E+014.98E+02 + 54L2 75.006.74E-036.84E-012.81E+016.93E+021.48E-023.76E-017.16E+001.21E+02 + 54L2 88.003.90E-033.20E-011.13E+012.43E+029.11E-032.01E-013.36E+004.99E+01 + 54L2 105.002.13E-031.39E-014.13E+007.69E+015.35E-031.01E-011.46E+001.89E+01 + 54L2 128.001.08E-035.52E-021.36E+002.14E+012.95E-034.69E-025.80E-016.38E+00 + 54L2 155.005.64E-042.29E-024.71E-016.34E+001.66E-032.25E-022.38E-012.26E+00 + 54L2 220.001.74E-044.71E-037.07E-027.16E-015.86E-045.97E-034.81E-023.48E-01 + 54L2 305.005.94E-051.13E-031.28E-021.01E-012.23E-041.77E-031.12E-026.38E-02 + 54L2 400.002.50E-053.62E-043.28E-032.11E-021.01E-046.63E-043.47E-031.63E-02 + 54L2 510.001.18E-051.35E-041.01E-035.50E-034.99E-052.80E-041.25E-035.02E-03 + 54L2 740.003.94E-063.24E-051.86E-047.93E-041.72E-057.77E-052.79E-048.99E-04 + 54L21000.001.69E-061.10E-055.17E-051.86E-047.32E-062.86E-058.80E-052.43E-04 + 54L21500.005.96E-072.85E-061.06E-053.10E-052.37E-067.87E-062.03E-054.71E-05 + 54L3 5.783.98E+013.43E+051.68E+081.04E+108.94E+002.30E+056.88E+082.08E+11 + 54L3 6.482.85E+011.92E+058.47E+076.37E+096.29E+001.30E+053.16E+088.64E+10 + 54L3 7.781.67E+017.60E+042.82E+072.44E+093.58E+005.23E+049.18E+072.12E+10 + 54L3 10.985.85E+001.33E+043.53E+063.10E+081.24E+009.38E+039.09E+061.53E+09 + 54L3 14.782.30E+002.95E+035.84E+054.62E+074.97E-012.13E+031.26E+061.62E+08 + 54L3 19.001.02E+008.29E+021.28E+058.79E+062.30E-016.11E+022.43E+052.46E+07 + 54L3 25.004.15E-012.08E+022.43E+041.39E+069.90E-021.56E+024.09E+043.21E+06 + 54L3 33.001.63E-015.13E+014.52E+032.11E+054.23E-023.94E+016.91E+034.19E+05 + 54L3 45.005.65E-021.08E+016.92E+022.52E+041.64E-028.48E+009.77E+024.45E+04 + 54L3 58.002.34E-023.02E+001.49E+024.41E+037.57E-032.43E+002.02E+027.31E+03 + 54L3 75.009.53E-038.38E-013.17E+017.51E+023.47E-036.88E-014.20E+011.21E+03 + 54L3 88.005.43E-033.78E-011.21E+012.50E+022.13E-033.15E-011.60E+013.99E+02 + 54L3 105.002.92E-031.57E-014.20E+007.43E+011.25E-031.34E-015.57E+001.19E+02 + 54L3 128.001.46E-035.93E-021.29E+001.91E+016.89E-045.15E-021.73E+003.13E+01 + 54L3 155.007.48E-042.32E-024.14E-015.19E+003.89E-042.06E-025.70E-018.79E+00 + 54L3 220.002.25E-044.28E-035.30E-024.89E-011.38E-043.95E-037.78E-029.07E-01 + 54L3 305.007.58E-059.24E-048.15E-035.67E-025.32E-058.78E-041.28E-021.17E-01 + 54L3 400.003.19E-052.71E-041.81E-031.00E-022.46E-052.61E-042.97E-032.25E-02 + 54L3 510.001.52E-059.45E-054.93E-042.24E-031.26E-059.11E-058.31E-045.36E-03 + 54L3 740.005.25E-062.10E-057.63E-052.61E-044.73E-061.98E-051.27E-046.50E-04 + 54L31000.002.42E-066.94E-061.93E-055.36E-052.25E-066.40E-062.97E-051.28E-04 + 54L31500.009.34E-071.89E-063.82E-068.10E-069.08E-071.69E-064.87E-061.60E-05 + 54M1 2.141.15E+013.89E+041.72E+061.45E+091.53E+039.00E+068.80E+092.05E+12 + 54M1 3.147.02E+007.85E+038.61E+054.59E+074.86E+021.37E+067.46E+081.44E+11 + 54M1 5.143.13E+008.02E+021.73E+059.17E+061.11E+021.25E+053.38E+074.64E+09 + 54M1 9.141.05E+003.39E+011.21E+041.02E+061.99E+017.93E+031.03E+068.87E+07 + 54M1 16.143.16E-017.55E-014.83E+024.43E+043.65E+005.57E+023.70E+041.96E+06 + 54M1 26.001.06E-013.57E-012.02E+012.02E+038.85E-016.44E+012.55E+038.83E+04 + 54M1 41.003.55E-022.00E-011.19E+007.84E+012.30E-018.77E+002.17E+024.99E+03 + 54M1 53.001.86E-021.16E-015.29E-011.28E+011.08E-012.95E+005.66E+011.03E+03 + 54M1 71.008.77E-035.57E-022.61E-012.36E+004.63E-028.80E-011.28E+011.79E+02 + 54M1 104.003.20E-031.89E-028.93E-024.93E-011.55E-021.92E-011.95E+001.95E+01 + 54M1 150.001.20E-036.22E-032.72E-021.25E-015.54E-034.74E-023.49E-012.55E+00 + 54M1 280.002.33E-048.99E-043.13E-031.10E-021.02E-035.15E-032.30E-021.02E-01 + 54M1 500.005.67E-051.70E-044.65E-041.26E-032.32E-048.02E-042.42E-037.19E-03 + 54M2 2.002.72E+018.76E+062.65E+101.02E+131.86E+023.11E+058.90E+071.04E+10 + 54M2 3.001.31E+011.15E+061.91E+096.01E+115.44E+015.02E+041.18E+071.58E+09 + 54M2 5.004.25E+008.84E+047.43E+071.69E+101.16E+015.37E+039.15E+051.09E+08 + 54M2 9.009.57E-014.68E+031.92E+062.85E+081.95E+004.42E+024.93E+044.35E+06 + 54M2 16.001.89E-012.68E+025.72E+045.42E+063.41E-014.08E+012.91E+031.73E+05 + 54M2 26.004.32E-022.45E+013.09E+031.96E+057.81E-025.65E+002.71E+021.12E+04 + 54M2 41.001.01E-022.66E+002.08E+028.94E+031.97E-029.07E-012.97E+018.49E+02 + 54M2 53.004.37E-037.69E-014.62E+011.59E+039.06E-033.26E-018.59E+001.99E+02 + 54M2 71.001.65E-031.89E-018.47E+002.26E+023.75E-031.03E-012.11E+003.84E+01 + 54M2 104.004.57E-043.12E-029.57E-011.83E+011.19E-032.30E-023.43E-014.55E+00 + 54M2 150.001.33E-045.73E-031.24E-011.73E+003.97E-045.59E-036.16E-026.07E-01 + 54M2 280.001.68E-053.55E-044.36E-033.69E-026.23E-055.32E-043.61E-032.20E-02 + 54M2 500.002.71E-063.18E-052.44E-041.35E-031.15E-056.56E-052.98E-041.22E-03 + 54M3 1.946.01E+011.74E+075.46E+102.11E+135.01E+011.21E+073.20E+118.37E+14 + 54M3 2.942.68E+012.14E+063.62E+091.13E+121.41E+011.52E+061.80E+102.44E+13 + 54M3 4.948.09E+001.56E+051.31E+082.92E+102.91E+001.13E+055.05E+083.24E+11 + 54M3 8.941.70E+007.80E+033.13E+064.55E+084.76E-015.85E+038.93E+062.64E+09 + 54M3 15.943.16E-014.23E+028.73E+048.04E+068.15E-023.27E+021.87E+052.78E+07 + 54M3 26.006.84E-023.61E+014.34E+032.66E+051.84E-022.87E+017.61E+036.62E+05 + 54M3 41.001.54E-023.68E+002.71E+021.12E+044.61E-033.00E+004.13E+022.25E+04 + 54M3 53.006.47E-031.02E+005.71E+011.89E+032.12E-038.43E-018.26E+013.49E+03 + 54M3 71.002.38E-032.38E-019.76E+002.48E+028.75E-042.00E-011.36E+014.33E+02 + 54M3 104.006.35E-043.58E-029.83E-011.78E+012.77E-043.12E-021.36E+003.04E+01 + 54M3 150.001.78E-045.94E-031.11E-011.44E+009.27E-055.36E-031.57E-012.56E+00 + 54M3 280.002.17E-053.01E-042.92E-032.20E-021.48E-052.88E-044.60E-034.55E-02 + 54M3 500.003.52E-062.26E-051.21E-045.61E-042.91E-062.19E-052.06E-041.36E-03 + 54M4 1.681.33E+025.16E+054.37E+107.89E+141.37E+013.39E+054.73E+096.11E+12 + 54M4 2.682.93E+014.71E+041.63E+091.35E+132.97E+003.25E+042.05E+081.84E+11 + 54M4 4.684.18E+002.73E+033.21E+071.11E+114.61E-011.96E+035.11E+062.85E+09 + 54M4 8.684.14E-011.14E+024.08E+055.78E+085.54E-028.64E+019.14E+042.93E+07 + 54M4 15.683.94E-025.30E+006.24E+034.03E+066.88E-034.32E+002.06E+033.82E+05 + 54M4 26.004.81E-033.69E-011.76E+026.07E+041.10E-033.32E-018.41E+019.67E+03 + 54M4 41.006.81E-043.27E-027.21E+001.44E+032.04E-043.29E-024.86E+003.63E+02 + 54M4 53.002.23E-048.29E-031.20E+001.78E+027.77E-058.97E-039.86E-015.79E+01 + 54M4 71.006.17E-051.73E-031.58E-011.68E+012.56E-052.04E-031.62E-017.25E+00 + 54M4 104.001.15E-052.26E-041.16E-028.01E-015.94E-062.98E-041.57E-024.94E-01 + 54M4 150.002.29E-063.28E-059.82E-044.54E-021.45E-064.74E-051.72E-033.89E-02 + 54M4 280.001.57E-071.35E-061.71E-053.98E-041.30E-072.15E-064.25E-055.70E-04 + 54M4 500.001.47E-088.24E-085.20E-076.30E-061.42E-081.30E-071.53E-061.33E-05 + 54M5 1.671.96E+026.77E+056.96E+101.18E+158.39E+003.76E+042.27E+101.74E+15 + 54M5 2.674.24E+016.08E+042.57E+091.96E+131.82E+003.63E+038.55E+082.64E+13 + 54M5 4.675.95E+003.47E+034.97E+071.57E+112.86E-012.24E+021.72E+071.84E+11 + 54M5 8.675.79E-011.43E+026.22E+058.01E+083.54E-021.03E+012.28E+057.93E+08 + 54M5 15.675.41E-026.50E+009.32E+035.42E+064.55E-035.50E-013.66E+034.63E+06 + 54M5 26.006.50E-034.41E-012.56E+027.84E+047.52E-044.53E-021.08E+026.10E+04 + 54M5 41.009.09E-043.79E-021.01E+011.78E+031.44E-044.86E-034.55E+001.33E+03 + 54M5 53.002.95E-049.41E-031.65E+002.13E+025.63E-051.39E-037.69E-011.58E+02 + 54M5 71.008.10E-051.91E-032.09E-011.92E+011.91E-053.37E-041.02E-011.44E+01 + 54M5 104.001.51E-052.39E-041.44E-028.44E-014.63E-065.38E-057.51E-036.66E-01 + 54M5 150.003.04E-063.32E-051.13E-034.32E-021.19E-069.52E-066.30E-043.67E-02 + 54M5 280.002.10E-071.28E-061.65E-053.00E-041.23E-075.50E-071.03E-053.02E-04 + 54M5 500.002.32E-087.75E-084.28E-073.62E-061.67E-084.68E-082.96E-074.21E-06 + 54N+ 50.008.25E-035.96E-013.73E+011.49E+033.58E-021.42E+005.90E+012.24E+03 + 54N+ 70.003.20E-031.23E-015.02E+001.42E+021.34E-023.34E-018.60E+002.16E+02 + 54N+ 100.001.17E-032.45E-026.27E-011.24E+014.80E-037.58E-021.23E+002.02E+01 + 54N+ 150.003.72E-044.32E-036.41E-028.37E-011.52E-031.52E-021.53E-011.59E+00 + 54N+ 200.001.67E-041.36E-031.38E-021.33E-016.88E-045.13E-033.79E-022.92E-01 + 54N+ 500.001.58E-055.59E-052.06E-047.90E-046.22E-052.27E-047.57E-042.55E-03 + 55K 36.982.76E+008.49E+005.14E+001.30E+001.41E+013.05E+021.11E+039.29E+02 + 55K 37.682.62E+008.76E+007.74E+003.84E+001.33E+012.83E+021.12E+031.36E+03 + 55K 38.982.39E+009.10E+001.24E+011.18E+011.20E+012.48E+021.11E+032.09E+03 + 55K 42.181.95E+009.17E+002.16E+014.23E+019.56E+001.84E+021.01E+033.23E+03 + 55K 45.981.56E+008.49E+002.74E+017.88E+017.42E+001.33E+028.33E+023.64E+03 + 55K 50.001.25E+007.48E+002.92E+011.04E+025.81E+009.67E+016.60E+023.45E+03 + 55K 56.009.22E-015.98E+002.72E+011.16E+024.17E+006.31E+014.59E+022.76E+03 + 55K 64.006.43E-014.36E+002.19E+011.05E+022.82E+003.82E+012.86E+021.87E+03 + 55K 76.004.03E-012.75E+001.46E+017.39E+011.72E+002.01E+011.49E+021.01E+03 + 55K 89.002.61E-011.74E+009.23E+004.71E+011.09E+001.12E+017.94E+015.30E+02 + 55K 106.001.61E-011.02E+005.25E+002.61E+016.62E-015.90E+003.91E+012.48E+02 + 55K 119.001.16E-017.08E-013.53E+001.70E+014.77E-013.88E+002.44E+011.48E+02 + 55K 136.008.03E-024.61E-012.20E+001.01E+013.28E-012.40E+001.41E+018.05E+01 + 55K 159.005.21E-022.77E-011.24E+005.40E+002.13E-011.38E+007.44E+003.92E+01 + 55K 185.003.44E-021.69E-017.11E-012.89E+001.40E-018.19E-014.03E+001.95E+01 + 55K 250.001.52E-026.36E-022.33E-018.27E-016.24E-022.97E-011.22E+004.94E+00 + 55K 335.007.09E-032.54E-028.10E-022.51E-012.90E-021.15E-013.98E-011.36E+00 + 55K 430.003.82E-031.21E-023.45E-029.56E-021.54E-025.32E-021.60E-014.71E-01 + 55K 540.002.24E-036.46E-031.67E-024.19E-028.73E-032.70E-027.22E-021.88E-01 + 55K 770.001.05E-032.66E-036.01E-031.31E-023.72E-039.93E-032.26E-024.94E-02 + 55K 1050.005.71E-041.33E-032.72E-035.29E-031.81E-034.36E-038.82E-031.70E-02 + 55K 1300.003.89E-048.54E-041.65E-033.00E-031.12E-032.54E-034.80E-038.57E-03 + 55K 1550.002.87E-046.05E-041.12E-031.94E-037.59E-041.65E-032.97E-035.03E-03 + 55L1 6.718.61E+002.34E+032.08E+053.38E+062.77E+021.72E+051.84E+074.74E+08 + 55L1 7.417.27E+001.35E+031.60E+054.43E+062.06E+021.07E+051.06E+073.37E+08 + 55L1 8.715.45E+005.23E+028.63E+043.72E+061.27E+024.99E+044.33E+061.64E+08 + 55L1 11.913.00E+006.70E+011.85E+041.15E+064.98E+011.15E+047.69E+053.10E+07 + 55L1 15.711.70E+007.44E+003.74E+032.66E+052.18E+013.21E+031.68E+056.30E+06 + 55L1 19.001.13E+001.67E+001.12E+038.51E+041.24E+011.35E+036.00E+042.05E+06 + 55L1 25.006.08E-011.18E+001.65E+021.41E+045.48E+003.95E+021.37E+043.97E+05 + 55L1 33.003.17E-011.18E+002.05E+011.97E+032.41E+001.17E+023.15E+037.53E+04 + 55L1 45.001.48E-017.87E-013.42E+001.92E+029.66E-013.08E+016.30E+021.19E+04 + 55L1 58.007.82E-024.64E-011.85E+003.14E+014.59E-011.07E+011.73E+022.67E+03 + 55L1 75.004.02E-022.44E-011.07E+007.89E+002.18E-013.73E+004.82E+016.02E+02 + 55L1 88.002.64E-021.58E-017.16E-014.18E+001.37E-011.97E+002.21E+012.42E+02 + 55L1 105.001.65E-029.51E-024.33E-012.23E+008.30E-029.85E-019.49E+008.96E+01 + 55L1 128.009.75E-035.27E-022.34E-011.11E+004.74E-024.60E-013.75E+003.01E+01 + 55L1 155.005.84E-032.93E-021.25E-015.50E-012.78E-022.25E-011.56E+001.07E+01 + 55L1 220.002.31E-039.91E-033.75E-021.44E-011.07E-026.38E-023.35E-011.74E+00 + 55L1 305.009.94E-043.66E-031.22E-024.08E-024.48E-032.09E-028.61E-023.51E-01 + 55L1 400.005.09E-041.66E-034.94E-031.47E-022.22E-038.67E-032.98E-021.01E-01 + 55L1 510.002.88E-048.52E-042.30E-036.16E-031.21E-034.09E-031.21E-023.50E-02 + 55L1 740.001.29E-043.36E-047.90E-041.81E-034.88E-041.38E-033.36E-037.89E-03 + 55L11000.007.14E-051.71E-043.63E-047.42E-042.41E-046.09E-041.30E-032.65E-03 + 55L11500.003.47E-057.49E-051.42E-042.54E-049.67E-052.17E-044.03E-047.06E-04 + 55L2 6.361.77E+011.45E+056.19E+073.36E+093.06E+017.25E+032.94E+054.40E+06 + 55L2 7.061.32E+018.56E+043.34E+072.22E+092.22E+014.81E+032.39E+055.89E+06 + 55L2 8.368.14E+003.66E+041.23E+079.63E+081.33E+012.47E+031.44E+055.23E+06 + 55L2 11.563.13E+007.23E+031.81E+061.49E+084.92E+006.87E+024.22E+041.93E+06 + 55L2 15.361.32E+001.75E+033.36E+052.53E+072.06E+002.22E+021.26E+045.66E+05 + 55L2 19.006.77E-016.09E+029.54E+046.46E+061.08E+009.54E+014.87E+032.04E+05 + 55L2 25.002.82E-011.57E+021.89E+041.08E+064.65E-013.21E+011.39E+035.06E+04 + 55L2 33.001.14E-014.01E+013.68E+031.73E+052.00E-011.06E+013.81E+021.17E+04 + 55L2 45.004.08E-028.85E+005.98E+022.22E+047.78E-023.12E+008.84E+012.18E+03 + 55L2 58.001.74E-022.60E+001.37E+024.14E+033.60E-021.15E+002.66E+015.44E+02 + 55L2 75.007.28E-037.58E-013.11E+017.62E+021.66E-024.18E-017.91E+001.32E+02 + 55L2 88.004.22E-033.55E-011.25E+012.68E+021.02E-022.24E-013.72E+005.48E+01 + 55L2 105.002.31E-031.54E-014.59E+008.49E+016.01E-031.13E-011.62E+002.08E+01 + 55L2 128.001.18E-036.14E-021.51E+002.37E+013.31E-035.24E-026.44E-017.05E+00 + 55L2 155.006.15E-042.54E-025.24E-017.02E+001.87E-032.52E-022.65E-012.50E+00 + 55L2 220.001.90E-045.25E-037.89E-027.96E-016.60E-046.69E-035.37E-023.86E-01 + 55L2 305.006.54E-051.26E-031.43E-021.12E-012.52E-041.99E-031.26E-027.11E-02 + 55L2 400.002.77E-054.04E-043.67E-032.36E-021.14E-047.47E-043.89E-031.83E-02 + 55L2 510.001.31E-051.51E-041.14E-036.17E-035.64E-053.16E-041.41E-035.63E-03 + 55L2 740.004.38E-063.63E-052.09E-048.92E-041.94E-058.78E-053.14E-041.01E-03 + 55L21000.001.89E-061.23E-055.82E-052.09E-048.31E-063.24E-059.94E-052.74E-04 + 55L21500.006.53E-073.21E-061.20E-053.51E-052.69E-068.93E-062.30E-055.33E-05 + 55L3 6.013.68E+013.08E+051.45E+088.57E+098.63E+002.16E+056.18E+081.80E+11 + 55L3 6.712.68E+011.76E+057.48E+075.35E+096.14E+001.25E+052.92E+087.70E+10 + 55L3 8.011.59E+017.18E+042.58E+072.13E+093.56E+005.15E+048.82E+071.98E+10 + 55L3 11.215.74E+001.31E+043.39E+062.87E+081.27E+009.64E+039.23E+061.52E+09 + 55L3 15.012.30E+002.99E+035.81E+054.45E+075.16E-012.25E+031.33E+061.67E+08 + 55L3 19.001.08E+009.08E+021.40E+059.43E+062.50E-016.97E+022.82E+052.85E+07 + 55L3 25.004.39E-012.27E+022.65E+041.50E+061.08E-011.78E+024.74E+043.71E+06 + 55L3 33.001.73E-015.62E+014.94E+032.28E+054.61E-024.48E+017.98E+034.83E+05 + 55L3 45.006.02E-021.18E+017.57E+022.73E+041.79E-029.66E+001.13E+035.12E+04 + 55L3 58.002.50E-023.31E+001.63E+024.79E+038.25E-032.76E+002.32E+028.39E+03 + 55L3 75.001.02E-029.18E-013.47E+018.17E+023.78E-037.82E-014.81E+011.38E+03 + 55L3 88.005.83E-034.15E-011.33E+012.72E+022.33E-033.58E-011.83E+014.56E+02 + 55L3 105.003.14E-031.73E-014.61E+008.10E+011.36E-031.52E-016.37E+001.36E+02 + 55L3 128.001.57E-036.50E-021.41E+002.09E+017.51E-045.84E-021.98E+003.57E+01 + 55L3 155.008.07E-042.55E-024.54E-015.67E+004.24E-042.33E-026.50E-011.00E+01 + 55L3 220.002.43E-044.70E-035.83E-025.36E-011.50E-044.47E-038.84E-021.03E+00 + 55L3 305.008.21E-051.02E-038.96E-036.22E-025.80E-059.89E-041.45E-021.32E-01 + 55L3 400.003.46E-052.98E-041.99E-031.10E-022.69E-052.93E-043.36E-032.54E-02 + 55L3 510.001.66E-051.04E-045.42E-042.46E-031.37E-051.02E-049.39E-046.06E-03 + 55L3 740.005.75E-062.30E-058.39E-052.87E-045.15E-062.20E-051.42E-047.34E-04 + 55L31000.002.60E-067.62E-062.13E-055.90E-052.45E-067.08E-063.33E-051.44E-04 + 55L31500.001.02E-062.06E-064.19E-068.90E-069.86E-071.86E-065.43E-061.80E-05 + 55M1 2.221.09E+013.66E+041.68E+061.24E+091.54E+038.75E+068.31E+091.87E+12 + 55M1 3.226.73E+007.76E+038.13E+054.63E+075.06E+021.40E+067.53E+081.41E+11 + 55M1 5.223.06E+008.39E+021.70E+058.55E+061.19E+021.33E+053.60E+074.84E+09 + 55M1 9.221.04E+003.88E+011.26E+041.02E+062.17E+018.72E+031.13E+069.62E+07 + 55M1 16.223.19E-019.23E-015.41E+024.72E+044.01E+006.21E+024.12E+042.17E+06 + 55M1 26.001.09E-013.28E-012.50E+012.32E+039.87E-017.30E+012.89E+039.99E+04 + 55M1 41.003.66E-021.91E-011.37E+009.48E+012.57E-019.90E+002.45E+025.62E+03 + 55M1 53.001.93E-021.13E-015.34E-011.55E+011.21E-013.32E+006.37E+011.16E+03 + 55M1 71.009.12E-035.54E-022.55E-012.66E+005.16E-029.87E-011.43E+012.00E+02 + 55M1 104.003.34E-031.92E-028.85E-025.08E-011.72E-022.14E-012.18E+002.18E+01 + 55M1 150.001.26E-036.38E-032.75E-021.27E-016.16E-035.28E-023.89E-012.84E+00 + 55M1 280.002.46E-049.40E-043.25E-031.14E-021.13E-035.71E-032.55E-021.13E-01 + 55M1 500.006.02E-051.80E-044.92E-041.34E-032.56E-048.85E-042.67E-037.93E-03 + 55M2 2.062.57E+018.26E+062.43E+109.02E+121.88E+023.06E+058.46E+079.41E+09 + 55M2 3.061.27E+011.14E+061.88E+095.75E+115.71E+015.17E+041.18E+071.52E+09 + 55M2 5.064.24E+009.21E+047.69E+071.72E+101.25E+015.73E+039.55E+051.11E+08 + 55M2 9.069.80E-015.02E+032.05E+063.01E+082.14E+004.82E+025.29E+044.57E+06 + 55M2 16.061.97E-012.93E+026.23E+045.84E+063.78E-014.49E+013.17E+031.86E+05 + 55M2 26.004.61E-022.73E+013.45E+032.17E+058.80E-026.33E+003.01E+021.23E+04 + 55M2 41.001.09E-022.96E+002.32E+029.92E+032.22E-021.02E+003.31E+019.39E+02 + 55M2 53.004.72E-038.58E-015.16E+011.77E+031.02E-023.66E-019.58E+002.21E+02 + 55M2 71.001.79E-032.12E-019.48E+002.52E+024.24E-031.15E-012.36E+004.26E+01 + 55M2 104.005.00E-043.50E-021.07E+002.05E+011.35E-032.59E-023.84E-015.08E+00 + 55M2 150.001.46E-046.42E-031.39E-011.94E+004.51E-046.31E-036.92E-026.79E-01 + 55M2 280.001.86E-053.99E-044.92E-034.15E-027.10E-056.03E-044.07E-032.47E-02 + 55M2 500.003.02E-063.60E-052.77E-041.53E-031.31E-057.47E-053.38E-041.38E-03 + 55M3 2.005.72E+011.64E+075.02E+101.88E+135.00E+011.20E+073.08E+117.85E+14 + 55M3 3.002.60E+012.13E+063.56E+091.08E+121.46E+011.58E+061.85E+102.50E+13 + 55M3 5.008.09E+001.62E+051.35E+082.95E+103.07E+001.23E+055.51E+083.53E+11 + 55M3 9.001.74E+008.33E+033.34E+064.77E+085.12E-016.51E+031.01E+072.98E+09 + 55M3 16.003.29E-014.59E+029.44E+048.59E+068.85E-023.70E+022.15E+053.20E+07 + 55M3 26.007.26E-023.99E+014.81E+032.92E+052.02E-023.30E+018.92E+037.79E+05 + 55M3 41.001.64E-024.07E+003.00E+021.23E+045.07E-033.45E+004.83E+022.63E+04 + 55M3 53.006.95E-031.13E+006.32E+012.07E+032.33E-039.70E-019.62E+014.06E+03 + 55M3 71.002.56E-032.63E-011.08E+012.73E+029.62E-042.30E-011.58E+015.04E+02 + 55M3 104.006.87E-043.97E-021.09E+001.96E+013.05E-043.58E-021.57E+003.52E+01 + 55M3 150.001.94E-046.59E-031.23E-011.60E+001.02E-046.14E-031.81E-012.95E+00 + 55M3 280.002.37E-053.34E-043.25E-032.44E-021.63E-053.28E-045.29E-035.22E-02 + 55M3 500.003.89E-062.51E-051.34E-046.23E-043.20E-062.48E-052.36E-041.56E-03 + 55M4 1.741.27E+024.83E+053.97E+106.96E+141.37E+013.33E+054.50E+095.60E+12 + 55M4 2.742.92E+014.71E+041.62E+091.33E+133.09E+003.40E+042.12E+081.85E+11 + 55M4 4.744.34E+002.86E+033.41E+071.18E+114.96E-012.15E+035.60E+063.07E+09 + 55M4 8.744.43E-011.24E+024.51E+056.44E+086.11E-029.77E+011.04E+053.29E+07 + 55M4 15.744.31E-025.85E+007.05E+034.60E+067.69E-034.96E+002.38E+034.38E+05 + 55M4 26.005.38E-034.18E-012.05E+027.13E+041.25E-033.89E-019.93E+011.14E+04 + 55M4 41.007.68E-043.72E-028.38E+001.69E+032.33E-043.86E-025.73E+004.28E+02 + 55M4 53.002.52E-049.46E-031.40E+002.10E+028.90E-051.05E-021.16E+006.82E+01 + 55M4 71.006.99E-051.98E-031.84E-011.98E+012.94E-052.40E-031.92E-018.55E+00 + 55M4 104.001.30E-052.60E-041.35E-029.42E-016.85E-063.50E-041.86E-025.83E-01 + 55M4 150.002.60E-063.78E-051.14E-035.34E-021.67E-065.58E-052.03E-034.60E-02 + 55M4 280.001.79E-071.56E-062.00E-054.69E-041.51E-072.53E-065.03E-056.75E-04 + 55M4 500.001.73E-089.50E-086.08E-077.43E-061.65E-081.53E-071.82E-061.57E-05 + 55M5 1.731.88E+026.38E+056.45E+101.06E+158.41E+003.69E+042.19E+101.63E+15 + 55M5 2.734.25E+016.08E+042.58E+091.96E+131.90E+003.77E+038.97E+082.76E+13 + 55M5 4.736.19E+003.62E+035.31E+071.69E+113.07E-012.43E+021.91E+072.07E+11 + 55M5 8.736.19E-011.54E+026.92E+058.95E+083.88E-021.15E+012.63E+059.32E+08 + 55M5 15.735.91E-027.13E+001.06E+046.19E+065.06E-036.20E-014.31E+035.55E+06 + 55M5 26.007.25E-034.95E-012.98E+029.20E+048.51E-045.20E-021.30E+027.49E+04 + 55M5 41.001.02E-034.28E-021.18E+012.09E+031.64E-045.58E-035.48E+001.62E+03 + 55M5 53.003.32E-041.06E-021.92E+002.50E+026.40E-051.60E-039.25E-011.93E+02 + 55M5 71.009.17E-052.17E-032.44E-012.25E+012.18E-053.87E-041.23E-011.76E+01 + 55M5 104.001.70E-052.73E-041.67E-029.89E-015.29E-066.18E-059.00E-038.07E-01 + 55M5 150.003.40E-063.79E-051.31E-035.07E-021.36E-061.09E-057.53E-044.44E-02 + 55M5 280.002.45E-071.48E-061.93E-053.51E-041.41E-076.34E-071.23E-053.63E-04 + 55M5 500.002.70E-089.01E-084.99E-074.24E-061.92E-085.39E-083.47E-075.03E-06 + 55N+ 50.008.97E-036.80E-014.29E+011.72E+034.14E-021.67E+007.03E+012.69E+03 + 55N+ 70.003.49E-031.39E-015.77E+001.64E+021.55E-023.90E-011.02E+012.57E+02 + 55N+ 100.001.28E-032.77E-027.20E-011.43E+015.54E-038.83E-021.44E+002.39E+01 + 55N+ 150.004.08E-044.85E-037.34E-029.62E-011.76E-031.76E-021.78E-011.87E+00 + 55N+ 200.001.84E-041.52E-031.57E-021.53E-017.93E-045.94E-034.41E-023.41E-01 + 55N+ 500.001.74E-056.22E-052.32E-048.99E-047.12E-052.61E-048.71E-042.95E-03 + 56K 38.442.55E+007.51E+004.34E+001.03E+001.38E+012.85E+029.95E+027.98E+02 + 56K 39.142.43E+007.74E+006.46E+002.99E+001.31E+012.65E+021.00E+031.16E+03 + 56K 40.442.22E+008.04E+001.03E+019.11E+001.18E+012.34E+029.96E+021.77E+03 + 56K 43.641.83E+008.14E+001.79E+013.28E+019.49E+001.76E+029.12E+022.75E+03 + 56K 47.441.47E+007.59E+002.30E+016.19E+017.42E+001.28E+027.64E+023.15E+03 + 56K 51.001.21E+006.84E+002.47E+018.14E+016.00E+009.74E+016.28E+023.05E+03 + 56K 57.009.03E-015.55E+002.37E+019.46E+014.34E+006.40E+014.44E+022.52E+03 + 56K 65.006.35E-014.10E+001.96E+018.85E+012.96E+003.91E+012.81E+021.75E+03 + 56K 77.004.00E-012.63E+001.33E+016.47E+011.81E+002.08E+011.49E+029.68E+02 + 56K 90.002.61E-011.68E+008.60E+004.23E+011.16E+001.17E+018.04E+015.20E+02 + 56K 107.001.62E-019.96E-014.98E+002.40E+017.05E-016.19E+004.01E+012.48E+02 + 56K 120.001.18E-016.96E-013.38E+001.59E+015.10E-014.09E+002.51E+011.49E+02 + 56K 137.008.16E-024.57E-012.13E+009.59E+003.51E-012.55E+001.46E+018.19E+01 + 56K 160.005.32E-022.77E-011.22E+005.18E+002.28E-011.47E+007.78E+004.03E+01 + 56K 185.003.57E-021.73E-017.16E-012.87E+001.53E-018.90E-014.33E+002.07E+01 + 56K 250.001.59E-026.55E-022.37E-018.33E-016.81E-023.22E-011.31E+005.27E+00 + 56K 335.007.42E-032.63E-028.33E-022.56E-013.16E-021.25E-014.29E-011.45E+00 + 56K 430.004.01E-031.26E-023.58E-029.86E-021.67E-025.76E-021.72E-015.05E-01 + 56K 540.002.36E-036.75E-031.74E-024.35E-029.47E-032.93E-027.78E-022.02E-01 + 56K 770.001.10E-032.79E-036.31E-031.37E-024.02E-031.07E-022.43E-025.31E-02 + 56K 1050.006.01E-041.40E-032.87E-035.59E-031.95E-034.71E-039.51E-031.83E-02 + 56K 1300.004.09E-049.03E-041.74E-033.18E-031.20E-032.74E-035.17E-039.22E-03 + 56K 1550.003.03E-046.40E-041.18E-032.05E-038.15E-041.78E-033.20E-035.42E-03 + 56L1 6.997.97E+002.11E+031.78E+052.71E+062.71E+021.61E+051.65E+074.04E+08 + 56L1 7.696.78E+001.24E+031.39E+053.60E+062.04E+021.02E+059.70E+062.93E+08 + 56L1 8.995.13E+005.02E+027.75E+043.13E+061.28E+024.87E+044.08E+061.47E+08 + 56L1 12.192.88E+007.00E+011.77E+041.03E+065.14E+011.17E+047.58E+052.94E+07 + 56L1 15.991.65E+008.66E+003.76E+032.53E+052.29E+013.33E+031.71E+056.20E+06 + 56L1 20.001.02E+001.55E+009.18E+026.68E+041.18E+011.20E+035.07E+041.65E+06 + 56L1 26.005.65E-011.06E+001.50E+021.21E+045.40E+003.72E+021.24E+043.45E+05 + 56L1 34.003.01E-011.05E+002.07E+011.84E+032.44E+001.15E+023.00E+036.93E+04 + 56L1 46.001.44E-017.19E-013.44E+001.96E+021.00E+003.13E+016.25E+021.15E+04 + 56L1 59.007.71E-024.34E-011.73E+003.35E+014.83E-011.10E+011.76E+022.66E+03 + 56L1 76.004.01E-022.33E-019.98E-018.10E+002.31E-013.93E+005.00E+016.14E+02 + 56L1 89.002.65E-021.52E-016.73E-014.16E+001.47E-012.09E+002.31E+012.50E+02 + 56L1 106.001.67E-029.29E-024.13E-012.18E+008.92E-021.05E+001.00E+019.35E+01 + 56L1 129.009.93E-035.21E-022.27E-011.08E+005.12E-024.94E-013.99E+003.17E+01 + 56L1 155.006.09E-032.99E-021.25E-015.53E-013.06E-022.48E-011.72E+001.18E+01 + 56L1 220.002.41E-031.02E-023.82E-021.47E-011.17E-027.02E-023.68E-011.91E+00 + 56L1 305.001.04E-033.80E-031.26E-024.21E-024.92E-032.29E-029.45E-023.85E-01 + 56L1 400.005.36E-041.73E-035.15E-031.53E-022.44E-039.51E-033.26E-021.10E-01 + 56L1 510.003.04E-048.94E-042.42E-036.48E-031.32E-034.48E-031.32E-023.82E-02 + 56L1 740.001.36E-043.55E-048.36E-041.92E-035.32E-041.51E-033.67E-038.61E-03 + 56L11000.007.57E-051.81E-043.87E-047.91E-042.62E-046.64E-041.41E-032.88E-03 + 56L11500.003.68E-057.98E-051.52E-042.72E-041.05E-042.36E-044.38E-047.68E-04 + 56L2 6.621.64E+011.30E+055.30E+072.74E+093.00E+016.76E+032.60E+053.64E+06 + 56L2 7.321.24E+017.83E+042.93E+071.85E+092.21E+014.56E+032.14E+054.94E+06 + 56L2 8.627.75E+003.45E+041.12E+078.31E+081.34E+012.40E+031.33E+054.53E+06 + 56L2 11.823.07E+007.11E+031.73E+061.36E+085.10E+006.90E+024.07E+041.77E+06 + 56L2 15.621.31E+001.77E+033.33E+052.43E+072.18E+002.29E+021.25E+045.42E+05 + 56L2 20.006.09E-015.21E+027.73E+044.99E+061.02E+008.58E+014.17E+031.67E+05 + 56L2 26.002.64E-011.43E+021.65E+049.03E+054.60E-013.03E+011.26E+034.41E+04 + 56L2 34.001.10E-013.83E+013.40E+031.55E+052.03E-011.05E+013.61E+021.07E+04 + 56L2 46.004.07E-028.78E+005.80E+022.10E+048.13E-023.17E+008.74E+012.10E+03 + 56L2 59.001.77E-022.64E+001.37E+024.06E+033.83E-021.19E+002.70E+015.39E+02 + 56L2 76.007.51E-037.87E-013.19E+017.68E+021.78E-024.41E-018.19E+001.34E+02 + 56L2 89.004.39E-033.72E-011.29E+012.74E+021.11E-022.38E-013.90E+005.65E+01 + 56L2 106.002.42E-031.64E-014.82E+008.81E+016.55E-031.21E-011.72E+002.17E+01 + 56L2 129.001.24E-036.56E-021.61E+002.49E+013.64E-035.67E-026.88E-017.44E+00 + 56L2 155.006.69E-042.82E-025.82E-017.78E+002.10E-032.81E-022.94E-012.76E+00 + 56L2 220.002.08E-045.84E-038.79E-028.84E-017.43E-047.49E-035.98E-024.29E-01 + 56L2 305.007.17E-051.41E-031.60E-021.25E-012.84E-042.24E-031.40E-027.92E-02 + 56L2 400.003.05E-054.52E-044.11E-032.63E-021.29E-048.40E-044.36E-032.04E-02 + 56L2 510.001.45E-051.69E-041.28E-036.90E-036.38E-053.56E-041.58E-036.30E-03 + 56L2 740.004.81E-064.07E-052.35E-041.00E-032.20E-059.92E-053.54E-041.14E-03 + 56L21000.002.12E-061.38E-056.55E-052.35E-049.42E-063.67E-051.12E-043.09E-04 + 56L21500.007.20E-073.61E-061.35E-053.95E-053.05E-061.01E-052.61E-056.03E-05 + 56L3 6.253.42E+012.77E+051.25E+087.07E+098.33E+002.03E+055.57E+081.56E+11 + 56L3 6.952.51E+011.62E+056.61E+074.50E+096.00E+001.20E+052.70E+086.87E+10 + 56L3 8.251.52E+016.78E+042.35E+071.86E+093.54E+005.07E+048.46E+071.84E+10 + 56L3 11.455.63E+001.29E+043.26E+062.66E+081.29E+009.89E+039.35E+061.51E+09 + 56L3 15.252.30E+003.02E+035.76E+054.28E+075.34E-012.37E+031.39E+061.72E+08 + 56L3 20.009.62E-017.67E+021.12E+057.18E+062.32E-016.14E+022.34E+052.24E+07 + 56L3 26.004.07E-012.04E+022.28E+041.24E+061.04E-011.67E+024.25E+043.20E+06 + 56L3 34.001.66E-015.29E+014.50E+032.01E+054.57E-024.40E+017.61E+034.47E+05 + 56L3 46.005.93E-021.16E+017.23E+022.55E+041.82E-029.84E+001.13E+035.01E+04 + 56L3 59.002.51E-023.33E+001.61E+024.62E+038.51E-032.88E+002.40E+028.51E+03 + 56L3 76.001.04E-029.41E-013.51E+018.10E+023.95E-038.32E-015.08E+011.44E+03 + 56L3 89.006.00E-034.29E-011.36E+012.74E+022.45E-033.85E-011.96E+014.82E+02 + 56L3 106.003.26E-031.81E-014.77E+008.26E+011.44E-031.64E-016.88E+001.45E+02 + 56L3 129.001.64E-036.86E-021.48E+002.16E+017.99E-046.36E-022.16E+003.86E+01 + 56L3 155.008.68E-042.79E-024.97E-016.18E+004.61E-042.64E-027.40E-011.14E+01 + 56L3 220.002.63E-045.16E-036.39E-025.85E-011.63E-045.04E-031.00E-011.17E+00 + 56L3 305.008.91E-051.11E-039.83E-036.81E-026.32E-051.11E-031.64E-021.50E-01 + 56L3 400.003.76E-053.26E-042.18E-031.20E-022.93E-053.28E-043.80E-032.87E-02 + 56L3 510.001.79E-051.14E-045.95E-042.70E-031.49E-051.14E-041.06E-036.85E-03 + 56L3 740.006.19E-062.52E-059.21E-053.16E-045.59E-062.45E-051.60E-048.27E-04 + 56L31000.002.82E-068.34E-062.33E-056.48E-052.66E-067.82E-063.73E-051.62E-04 + 56L31500.001.11E-062.24E-064.58E-069.77E-061.07E-062.04E-066.04E-062.02E-05 + 56M1 2.291.03E+013.45E+041.63E+061.06E+091.56E+038.50E+067.83E+091.71E+12 + 56M1 3.296.45E+007.66E+037.70E+054.63E+075.25E+021.44E+067.58E+081.38E+11 + 56M1 5.292.99E+008.76E+021.68E+058.00E+061.27E+021.42E+053.81E+075.03E+09 + 56M1 9.291.04E+004.40E+011.32E+041.01E+062.35E+019.56E+031.23E+061.04E+08 + 56M1 16.293.22E-011.14E+006.02E+025.01E+044.41E+006.90E+024.58E+042.39E+06 + 56M1 26.001.12E-013.04E-013.05E+012.64E+031.10E+008.25E+013.28E+031.13E+05 + 56M1 41.003.78E-021.83E-011.62E+001.14E+022.86E-011.11E+012.76E+026.31E+03 + 56M1 53.002.00E-021.11E-015.54E-011.88E+011.35E-013.73E+007.16E+011.30E+03 + 56M1 71.009.47E-035.51E-022.51E-013.04E+005.74E-021.11E+001.60E+012.24E+02 + 56M1 104.003.49E-031.94E-028.78E-025.31E-011.92E-022.39E-012.43E+002.42E+01 + 56M1 150.001.32E-036.54E-032.77E-021.31E-016.83E-035.88E-024.33E-013.15E+00 + 56M1 280.002.60E-049.80E-043.37E-031.19E-021.25E-036.33E-032.82E-021.25E-01 + 56M1 500.006.41E-051.90E-045.20E-041.42E-032.82E-049.77E-042.95E-038.73E-03 + 56M2 2.142.42E+017.72E+062.19E+107.87E+121.90E+022.97E+057.94E+078.34E+09 + 56M2 3.141.22E+011.13E+061.82E+095.41E+115.96E+015.28E+041.17E+071.44E+09 + 56M2 5.144.21E+009.52E+047.89E+071.72E+101.34E+016.07E+039.88E+051.11E+08 + 56M2 9.149.99E-015.37E+032.18E+063.15E+082.35E+005.23E+025.64E+044.77E+06 + 56M2 16.142.05E-013.18E+026.76E+046.26E+064.19E-014.94E+013.43E+031.99E+05 + 56M2 26.004.91E-023.04E+013.84E+032.40E+059.89E-027.09E+003.34E+021.35E+04 + 56M2 41.001.17E-023.30E+002.59E+021.10E+042.50E-021.14E+003.68E+011.04E+03 + 56M2 53.005.10E-039.56E-015.76E+011.96E+031.15E-024.10E-011.07E+012.44E+02 + 56M2 71.001.95E-032.36E-011.06E+012.80E+024.78E-031.29E-012.63E+004.73E+01 + 56M2 104.005.45E-043.91E-021.20E+002.28E+011.52E-032.91E-024.30E-015.65E+00 + 56M2 150.001.60E-047.20E-031.56E-012.17E+005.11E-047.11E-037.76E-027.59E-01 + 56M2 280.002.06E-054.49E-045.54E-034.67E-028.08E-056.83E-044.59E-032.78E-02 + 56M2 500.003.35E-064.06E-053.13E-041.72E-031.50E-058.49E-053.83E-041.56E-03 + 56M3 2.065.43E+011.55E+074.59E+101.67E+134.98E+011.18E+072.93E+117.30E+14 + 56M3 3.062.53E+012.11E+063.48E+091.03E+121.50E+011.63E+061.90E+102.53E+13 + 56M3 5.068.06E+001.67E+051.38E+082.97E+103.24E+001.32E+055.98E+083.83E+11 + 56M3 9.061.78E+008.88E+033.54E+064.98E+085.49E-017.23E+031.14E+073.36E+09 + 56M3 16.063.42E-014.97E+021.02E+059.16E+069.58E-024.17E+022.46E+053.67E+07 + 56M3 26.007.71E-024.41E+015.31E+033.20E+052.21E-023.79E+011.04E+049.14E+05 + 56M3 41.001.76E-024.50E+003.31E+021.35E+045.56E-033.96E+005.62E+023.07E+04 + 56M3 53.007.44E-031.25E+006.98E+012.28E+032.55E-031.11E+001.12E+024.73E+03 + 56M3 71.002.76E-032.91E-011.19E+013.01E+021.06E-032.64E-011.83E+015.84E+02 + 56M3 104.007.42E-044.39E-021.20E+002.16E+013.35E-044.10E-021.81E+004.06E+01 + 56M3 150.002.11E-047.29E-031.36E-011.76E+001.12E-047.01E-032.09E-013.40E+00 + 56M3 280.002.59E-053.70E-043.60E-032.70E-021.80E-053.73E-046.06E-035.99E-02 + 56M3 500.004.22E-062.77E-051.49E-046.90E-043.52E-062.80E-052.69E-041.78E-03 + 56M4 1.801.22E+024.56E+053.66E+106.27E+141.38E+013.31E+054.34E+095.24E+12 + 56M4 2.802.92E+014.72E+041.62E+091.32E+133.23E+003.58E+042.21E+081.88E+11 + 56M4 4.804.50E+003.00E+033.62E+071.26E+115.34E-012.36E+036.16E+063.32E+09 + 56M4 8.804.73E-011.34E+024.99E+057.18E+086.72E-021.10E+021.18E+053.69E+07 + 56M4 15.804.70E-026.45E+007.96E+035.24E+068.59E-035.69E+002.74E+035.01E+05 + 56M4 26.006.02E-034.72E-012.37E+028.36E+041.42E-034.54E-011.17E+021.34E+04 + 56M4 41.008.64E-044.22E-029.70E+001.98E+032.65E-044.52E-026.75E+005.02E+02 + 56M4 53.002.84E-041.08E-021.62E+002.46E+021.02E-041.23E-021.37E+008.01E+01 + 56M4 71.007.90E-052.27E-032.14E-012.32E+013.37E-052.81E-032.26E-011.00E+01 + 56M4 104.001.48E-052.98E-041.56E-021.10E+007.86E-064.11E-042.19E-026.86E-01 + 56M4 150.003.01E-064.36E-051.33E-036.26E-021.92E-066.55E-052.39E-035.42E-02 + 56M4 280.002.08E-071.81E-062.33E-055.51E-041.74E-072.97E-065.95E-057.97E-04 + 56M4 500.001.91E-081.11E-077.09E-078.75E-061.90E-081.80E-072.15E-061.86E-05 + 56M5 1.781.81E+026.00E+055.98E+109.58E+148.42E+003.61E+042.12E+101.53E+15 + 56M5 2.784.25E+016.07E+042.59E+091.95E+131.97E+003.91E+039.37E+082.86E+13 + 56M5 4.786.42E+003.77E+035.66E+071.80E+113.29E-012.62E+022.12E+072.32E+11 + 56M5 8.786.61E-011.65E+027.66E+059.97E+084.25E-021.27E+013.03E+051.09E+09 + 56M5 15.786.44E-027.79E+001.20E+047.04E+065.61E-036.96E-015.05E+036.62E+06 + 56M5 26.008.09E-035.54E-013.46E+021.08E+059.59E-045.94E-021.56E+029.17E+04 + 56M5 41.001.14E-034.81E-021.37E+012.44E+031.85E-046.37E-036.57E+001.98E+03 + 56M5 53.003.73E-041.20E-022.23E+002.92E+027.26E-051.82E-031.11E+002.35E+02 + 56M5 71.001.03E-042.45E-032.83E-012.63E+012.47E-054.42E-041.47E-012.13E+01 + 56M5 104.001.94E-053.10E-041.94E-021.15E+006.03E-067.08E-051.08E-029.76E-01 + 56M5 150.003.95E-064.32E-051.53E-035.92E-021.56E-061.25E-058.98E-045.35E-02 + 56M5 280.002.77E-071.68E-062.23E-054.11E-041.61E-077.27E-071.45E-054.35E-04 + 56M5 500.003.18E-081.03E-075.78E-074.94E-062.21E-086.20E-084.07E-076.00E-06 + 56N+ 50.009.79E-037.81E-014.98E+012.00E+034.80E-021.96E+008.40E+013.25E+03 + 56N+ 70.003.81E-031.60E-016.69E+001.90E+021.79E-024.57E-011.21E+013.09E+02 + 56N+ 100.001.40E-033.14E-028.32E-011.65E+016.41E-031.03E-011.71E+002.85E+01 + 56N+ 150.004.48E-045.47E-038.45E-021.11E+002.03E-032.05E-022.09E-012.21E+00 + 56N+ 200.002.02E-041.70E-031.80E-021.77E-019.15E-046.89E-035.14E-024.00E-01 + 56N+ 500.001.93E-056.93E-052.63E-041.03E-038.17E-053.00E-041.00E-033.41E-03 + 57K 39.922.36E+006.66E+003.67E+008.16E-011.36E+012.67E+028.96E+026.88E+02 + 57K 40.622.25E+006.86E+005.41E+002.33E+001.28E+012.49E+029.02E+029.89E+02 + 57K 41.922.07E+007.12E+008.60E+007.05E+001.17E+012.21E+028.98E+021.50E+03 + 57K 45.121.71E+007.23E+001.50E+012.54E+019.42E+001.68E+028.29E+022.35E+03 + 57K 48.921.39E+006.79E+001.94E+014.88E+017.43E+001.23E+027.01E+022.72E+03 + 57K 53.001.12E+006.07E+002.11E+016.68E+015.88E+009.13E+015.67E+022.65E+03 + 57K 59.008.46E-014.97E+002.03E+017.76E+014.30E+006.10E+014.06E+022.21E+03 + 57K 67.006.01E-013.72E+001.70E+017.35E+012.97E+003.79E+012.62E+021.57E+03 + 57K 79.003.85E-012.42E+001.18E+015.50E+011.84E+002.05E+011.41E+028.87E+02 + 57K 92.002.53E-011.57E+007.75E+003.68E+011.19E+001.17E+017.80E+014.87E+02 + 57K 109.001.59E-019.45E-014.57E+002.14E+017.32E-016.29E+003.95E+012.37E+02 + 57K 122.001.16E-016.67E-013.14E+001.43E+015.32E-014.19E+002.51E+011.45E+02 + 57K 139.008.13E-024.42E-012.00E+008.80E+003.69E-012.63E+001.48E+018.05E+01 + 57K 162.005.33E-022.70E-011.16E+004.84E+002.41E-011.53E+007.93E+004.02E+01 + 57K 190.003.45E-021.62E-016.53E-012.55E+001.56E-018.81E-014.17E+001.94E+01 + 57K 255.001.57E-026.33E-022.24E-017.74E-017.04E-023.27E-011.31E+005.14E+00 + 57K 340.007.47E-032.60E-028.12E-022.47E-013.31E-021.29E-014.37E-011.46E+00 + 57K 430.004.20E-031.31E-023.70E-021.01E-011.81E-026.24E-021.86E-015.41E-01 + 57K 540.002.47E-037.05E-031.81E-024.52E-021.03E-023.17E-028.39E-022.16E-01 + 57K 770.001.16E-032.93E-036.62E-031.44E-024.35E-031.16E-022.62E-025.71E-02 + 57K 1050.006.34E-041.48E-033.03E-035.90E-032.10E-035.09E-031.02E-021.96E-02 + 57K 1300.004.31E-049.54E-041.85E-033.36E-031.29E-032.96E-035.57E-039.92E-03 + 57K 1550.003.19E-046.76E-041.25E-032.18E-038.75E-041.92E-033.45E-035.83E-03 + 57L1 7.277.40E+001.92E+031.54E+052.19E+062.67E+021.51E+051.48E+073.47E+08 + 57L1 7.976.33E+001.16E+031.22E+052.95E+062.03E+029.75E+048.90E+062.56E+08 + 57L1 9.274.84E+004.83E+026.98E+042.65E+061.29E+024.76E+043.85E+061.32E+08 + 57L1 12.472.76E+007.29E+011.69E+049.34E+055.31E+011.18E+047.48E+052.79E+07 + 57L1 16.271.61E+009.94E+003.78E+032.41E+052.40E+013.46E+031.74E+056.10E+06 + 57L1 20.001.03E+001.96E+001.05E+037.21E+041.30E+011.35E+035.65E+041.81E+06 + 57L1 26.005.75E-019.58E-011.80E+021.35E+045.96E+004.16E+021.38E+043.79E+05 + 57L1 34.003.07E-019.58E-012.58E+012.12E+032.69E+001.28E+023.33E+037.62E+04 + 57L1 46.001.48E-016.82E-013.86E+002.35E+021.10E+003.49E+016.93E+021.26E+04 + 57L1 59.007.93E-024.21E-011.70E+003.99E+015.33E-011.23E+011.95E+022.92E+03 + 57L1 76.004.14E-022.30E-019.63E-018.98E+002.55E-014.36E+005.53E+016.75E+02 + 57L1 89.002.75E-021.52E-016.53E-014.39E+001.62E-012.31E+002.56E+012.74E+02 + 57L1 106.001.73E-029.32E-024.05E-012.23E+009.83E-021.16E+001.10E+011.03E+02 + 57L1 129.001.03E-025.27E-022.25E-011.09E+005.64E-025.46E-014.39E+003.48E+01 + 57L1 155.006.34E-033.04E-021.25E-015.59E-013.37E-022.74E-011.89E+001.29E+01 + 57L1 220.002.52E-031.05E-023.89E-021.50E-011.29E-027.73E-024.04E-012.09E+00 + 57L1 305.001.09E-033.94E-031.30E-024.36E-025.40E-032.52E-021.03E-014.21E-01 + 57L1 400.005.63E-041.81E-035.36E-031.60E-022.67E-031.04E-023.57E-021.20E-01 + 57L1 510.003.20E-049.39E-042.54E-036.81E-031.45E-034.91E-031.45E-024.17E-02 + 57L1 740.001.44E-043.75E-048.85E-042.03E-035.80E-041.65E-034.00E-039.38E-03 + 57L11000.008.01E-051.92E-044.11E-048.43E-042.85E-047.24E-041.54E-033.14E-03 + 57L11500.003.91E-058.49E-051.62E-042.91E-041.13E-042.56E-044.77E-048.34E-04 + 57L2 6.891.52E+011.17E+054.57E+072.25E+092.96E+016.34E+032.32E+053.04E+06 + 57L2 7.591.16E+017.20E+042.59E+071.55E+092.20E+014.34E+031.94E+054.17E+06 + 57L2 8.897.40E+003.26E+041.02E+077.21E+081.36E+012.33E+031.23E+053.93E+06 + 57L2 12.093.01E+007.00E+031.66E+061.26E+085.30E+006.94E+023.92E+041.63E+06 + 57L2 15.891.31E+001.79E+033.30E+052.33E+072.30E+002.35E+021.24E+045.19E+05 + 57L2 20.006.43E-015.74E+028.48E+045.37E+061.14E+009.45E+014.50E+031.76E+05 + 57L2 26.002.80E-011.57E+021.81E+049.77E+055.13E-013.34E+011.37E+034.69E+04 + 57L2 34.001.18E-014.22E+013.73E+031.68E+052.27E-011.16E+013.94E+021.15E+04 + 57L2 46.004.35E-029.69E+006.39E+022.29E+049.07E-023.51E+009.57E+012.27E+03 + 57L2 59.001.90E-022.92E+001.51E+024.44E+034.27E-021.32E+002.97E+015.87E+02 + 57L2 76.008.09E-038.70E-013.52E+018.43E+021.99E-024.90E-019.02E+001.47E+02 + 57L2 89.004.74E-034.12E-011.43E+013.01E+021.24E-022.65E-014.30E+006.19E+01 + 57L2 106.002.62E-031.81E-015.33E+009.70E+017.34E-031.35E-011.90E+002.38E+01 + 57L2 129.001.35E-037.27E-021.78E+002.75E+014.08E-036.32E-027.62E-018.19E+00 + 57L2 155.007.28E-043.13E-026.46E-018.59E+002.36E-033.13E-023.27E-013.04E+00 + 57L2 220.002.28E-046.49E-039.77E-029.80E-018.36E-048.38E-036.65E-024.75E-01 + 57L2 305.007.87E-051.57E-031.78E-021.39E-013.20E-042.51E-031.57E-028.80E-02 + 57L2 400.003.33E-055.04E-044.59E-032.93E-021.45E-049.43E-044.88E-032.27E-02 + 57L2 510.001.58E-051.89E-041.43E-037.71E-037.21E-054.00E-041.77E-037.04E-03 + 57L2 740.005.37E-064.56E-052.63E-041.12E-032.49E-051.12E-043.98E-041.27E-03 + 57L21000.002.33E-061.55E-057.36E-052.64E-041.07E-054.14E-051.27E-043.47E-04 + 57L21500.008.12E-074.05E-061.52E-054.46E-053.45E-061.15E-052.95E-056.80E-05 + 57L3 6.483.18E+012.51E+051.09E+085.88E+098.06E+001.92E+055.04E+081.36E+11 + 57L3 7.182.36E+011.49E+055.88E+073.82E+095.88E+001.15E+052.51E+086.17E+10 + 57L3 8.481.45E+016.42E+042.16E+071.63E+093.52E+005.01E+048.14E+071.72E+10 + 57L3 11.685.52E+001.27E+043.13E+062.46E+081.31E+001.01E+049.48E+061.49E+09 + 57L3 15.482.29E+003.05E+035.71E+054.12E+075.53E-012.49E+031.46E+061.77E+08 + 57L3 20.001.01E+008.38E+021.21E+057.68E+062.52E-016.97E+022.70E+052.59E+07 + 57L3 26.004.29E-012.23E+022.48E+041.33E+061.13E-011.89E+024.91E+043.68E+06 + 57L3 34.001.75E-015.78E+014.90E+032.16E+054.96E-024.99E+018.77E+035.13E+05 + 57L3 46.006.29E-021.27E+017.89E+022.75E+041.97E-021.12E+011.30E+035.74E+04 + 57L3 59.002.67E-023.64E+001.76E+025.00E+039.24E-033.27E+002.75E+029.72E+03 + 57L3 76.001.11E-021.03E+003.83E+018.79E+024.28E-039.43E-015.81E+011.64E+03 + 57L3 89.006.41E-034.69E-011.48E+012.98E+022.66E-034.36E-012.23E+015.49E+02 + 57L3 106.003.48E-031.97E-015.21E+008.98E+011.57E-031.86E-017.84E+001.66E+02 + 57L3 129.001.76E-037.51E-021.62E+002.35E+018.68E-047.20E-022.45E+004.39E+01 + 57L3 155.009.32E-043.06E-025.44E-016.74E+005.01E-042.98E-028.41E-011.29E+01 + 57L3 220.002.83E-045.65E-037.00E-026.39E-011.78E-045.67E-031.14E-011.32E+00 + 57L3 305.009.62E-051.22E-031.08E-027.44E-026.87E-051.25E-031.85E-021.69E-01 + 57L3 400.004.07E-053.57E-042.39E-031.32E-023.18E-053.68E-044.29E-033.25E-02 + 57L3 510.001.95E-051.24E-046.52E-042.96E-031.62E-051.27E-041.19E-037.72E-03 + 57L3 740.006.72E-062.75E-051.01E-043.46E-046.07E-062.72E-051.80E-049.31E-04 + 57L31000.003.07E-069.10E-062.55E-057.10E-052.88E-068.64E-064.18E-051.82E-04 + 57L31500.001.19E-062.44E-065.01E-061.07E-051.16E-062.24E-066.72E-062.26E-05 + 57M1 2.369.79E+003.33E+041.63E+069.42E+081.59E+038.43E+067.59E+091.61E+12 + 57M1 3.366.23E+007.67E+037.47E+054.72E+075.50E+021.49E+067.76E+081.38E+11 + 57M1 5.362.94E+009.20E+021.67E+057.63E+061.36E+021.53E+054.08E+075.30E+09 + 57M1 9.361.04E+004.98E+011.38E+041.02E+062.56E+011.05E+041.36E+061.13E+08 + 57M1 16.363.25E-011.42E+006.69E+025.32E+044.85E+007.68E+025.10E+042.64E+06 + 57M1 26.001.15E-012.87E-013.68E+013.00E+031.22E+009.33E+013.71E+031.27E+05 + 57M1 41.003.90E-021.74E-011.93E+001.35E+023.18E-011.25E+013.11E+027.09E+03 + 57M1 53.002.07E-021.08E-015.91E-012.26E+011.50E-014.19E+008.04E+011.45E+03 + 57M1 71.009.83E-035.47E-022.50E-013.53E+006.39E-021.24E+001.79E+012.50E+02 + 57M1 104.003.64E-031.96E-028.72E-025.63E-012.13E-022.67E-012.71E+002.70E+01 + 57M1 150.001.39E-036.69E-032.80E-021.35E-017.58E-036.54E-024.81E-013.50E+00 + 57M1 280.002.74E-041.02E-033.49E-031.24E-021.39E-037.01E-033.12E-021.38E-01 + 57M1 500.006.79E-052.01E-045.49E-041.50E-033.11E-041.08E-033.25E-039.62E-03 + 57M2 2.202.29E+017.32E+062.03E+107.06E+121.94E+022.94E+057.59E+077.59E+09 + 57M2 3.201.18E+011.12E+061.79E+095.18E+116.25E+015.44E+041.17E+071.39E+09 + 57M2 5.204.19E+009.90E+048.14E+071.74E+101.44E+016.46E+031.03E+061.13E+08 + 57M2 9.201.02E+005.74E+032.32E+063.31E+082.57E+005.68E+026.03E+045.00E+06 + 57M2 16.202.14E-013.46E+027.33E+046.72E+064.64E-015.43E+013.73E+032.13E+05 + 57M2 26.005.23E-023.37E+014.27E+032.66E+051.11E-017.92E+003.71E+021.49E+04 + 57M2 41.001.26E-023.67E+002.88E+021.22E+042.81E-021.27E+004.08E+011.14E+03 + 57M2 53.005.50E-031.06E+006.41E+012.17E+031.30E-024.59E-011.19E+012.69E+02 + 57M2 71.002.11E-032.63E-011.18E+013.11E+025.39E-031.45E-012.93E+005.23E+01 + 57M2 104.005.94E-044.36E-021.34E+002.54E+011.72E-033.27E-024.80E-016.27E+00 + 57M2 150.001.75E-048.05E-031.74E-012.43E+005.78E-048.00E-038.69E-028.46E-01 + 57M2 280.002.27E-055.04E-046.23E-035.24E-029.18E-057.72E-045.17E-033.12E-02 + 57M2 500.003.73E-064.57E-053.53E-041.94E-031.71E-059.64E-054.34E-041.76E-03 + 57M3 2.125.18E+011.47E+074.26E+101.50E+134.98E+011.17E+072.84E+116.91E+14 + 57M3 3.122.46E+012.10E+063.42E+099.87E+111.54E+011.70E+061.96E+102.59E+13 + 57M3 5.128.04E+001.74E+051.43E+083.00E+103.41E+001.43E+056.50E+084.16E+11 + 57M3 9.121.81E+009.46E+033.76E+065.21E+085.88E-018.02E+031.28E+073.79E+09 + 57M3 16.123.55E-015.37E+021.10E+059.76E+061.04E-014.69E+022.81E+054.20E+07 + 57M3 26.008.16E-024.86E+015.86E+033.51E+052.42E-024.35E+011.22E+041.07E+06 + 57M3 41.001.87E-024.96E+003.65E+021.48E+046.08E-034.54E+006.54E+023.57E+04 + 57M3 53.007.96E-031.38E+007.70E+012.50E+032.80E-031.28E+001.30E+025.49E+03 + 57M3 71.002.96E-033.21E-011.32E+013.30E+021.16E-033.02E-012.12E+016.76E+02 + 57M3 104.008.01E-044.85E-021.33E+002.37E+013.67E-044.69E-022.09E+004.69E+01 + 57M3 150.002.28E-048.06E-031.50E-011.94E+001.23E-048.00E-032.40E-013.91E+00 + 57M3 280.002.81E-054.10E-043.98E-032.98E-021.97E-054.24E-046.93E-036.85E-02 + 57M3 500.004.62E-063.07E-051.65E-047.63E-043.86E-063.16E-053.06E-042.03E-03 + 57M4 1.851.17E+024.37E+053.43E+105.76E+141.39E+013.31E+054.24E+094.99E+12 + 57M4 2.852.93E+014.77E+041.64E+091.33E+133.38E+003.78E+042.31E+081.94E+11 + 57M4 4.854.67E+003.15E+033.85E+071.35E+115.74E-012.60E+036.78E+063.61E+09 + 57M4 8.855.05E-011.45E+025.51E+058.01E+087.38E-021.25E+021.33E+054.15E+07 + 57M4 15.855.12E-027.09E+008.96E+035.96E+069.56E-036.51E+003.16E+035.73E+05 + 57M4 26.006.68E-035.31E-012.74E+029.77E+041.61E-035.30E-011.37E+021.57E+04 + 57M4 41.009.68E-044.78E-021.12E+012.32E+033.02E-045.27E-027.92E+005.88E+02 + 57M4 53.003.20E-041.22E-021.87E+002.87E+021.16E-041.44E-021.61E+009.38E+01 + 57M4 71.008.97E-052.58E-032.47E-012.71E+013.85E-053.28E-032.65E-011.18E+01 + 57M4 104.001.68E-053.41E-041.81E-021.29E+009.00E-064.80E-042.57E-028.05E-01 + 57M4 150.003.37E-065.00E-051.54E-037.32E-022.21E-067.67E-052.81E-036.36E-02 + 57M4 280.002.36E-072.08E-062.70E-056.45E-042.00E-073.49E-067.00E-059.38E-04 + 57M4 500.002.19E-081.29E-078.23E-071.02E-052.19E-082.11E-072.54E-062.20E-05 + 57M5 1.831.75E+025.71E+055.64E+108.86E+148.50E+003.58E+042.08E+101.47E+15 + 57M5 2.834.26E+016.09E+042.63E+091.97E+132.06E+004.08E+039.89E+083.01E+13 + 57M5 4.836.66E+003.94E+036.06E+071.93E+113.53E-012.84E+022.36E+072.60E+11 + 57M5 8.837.05E-011.77E+028.49E+051.11E+094.64E-021.41E+013.48E+051.27E+09 + 57M5 15.837.00E-028.51E+001.35E+048.00E+066.21E-037.81E-015.91E+037.88E+06 + 57M5 26.008.97E-036.19E-014.00E+021.26E+051.08E-036.77E-021.86E+021.12E+05 + 57M5 41.001.28E-035.40E-021.58E+012.84E+032.09E-047.26E-037.86E+002.40E+03 + 57M5 53.004.18E-041.35E-022.58E+003.40E+028.21E-052.08E-031.33E+002.84E+02 + 57M5 71.001.16E-042.77E-033.28E-013.06E+012.80E-055.04E-041.76E-012.58E+01 + 57M5 104.002.18E-053.50E-042.25E-021.35E+006.85E-068.08E-051.28E-021.17E+00 + 57M5 150.004.47E-064.90E-051.77E-036.89E-021.77E-061.43E-051.07E-036.42E-02 + 57M5 280.003.33E-071.92E-062.59E-054.78E-041.84E-078.32E-071.72E-055.20E-04 + 57M5 500.003.56E-081.18E-076.66E-075.76E-062.51E-087.09E-084.76E-077.13E-06 + 57N+ 50.001.05E-028.84E-015.69E+012.30E+035.42E-022.25E+009.86E+013.87E+03 + 57N+ 70.004.08E-031.80E-017.63E+002.18E+022.03E-025.23E-011.41E+013.64E+02 + 57N+ 100.001.50E-033.52E-029.47E-011.89E+017.23E-031.18E-011.97E+003.33E+01 + 57N+ 150.004.81E-046.06E-039.58E-021.27E+002.29E-032.33E-022.39E-012.55E+00 + 57N+ 200.002.17E-041.87E-032.03E-022.01E-011.03E-037.80E-035.86E-024.60E-01 + 57N+ 500.002.09E-057.56E-052.91E-041.15E-039.14E-053.36E-041.13E-033.85E-03 + 58K 41.442.19E+005.90E+003.09E+006.36E-011.33E+012.51E+028.07E+025.91E+02 + 58K 42.142.09E+006.08E+004.53E+001.80E+001.26E+012.35E+028.14E+028.44E+02 + 58K 43.441.93E+006.30E+007.15E+005.43E+001.15E+012.08E+028.10E+021.28E+03 + 58K 46.641.61E+006.43E+001.25E+011.98E+019.36E+001.60E+027.53E+022.01E+03 + 58K 50.441.31E+006.08E+001.63E+013.84E+017.44E+001.19E+026.44E+022.36E+03 + 58K 54.001.10E+005.56E+001.78E+015.19E+016.09E+009.21E+015.40E+022.35E+03 + 58K 60.008.29E-014.61E+001.77E+016.31E+014.48E+006.21E+013.93E+022.02E+03 + 58K 68.005.93E-013.50E+001.51E+016.20E+013.11E+003.89E+012.57E+021.47E+03 + 58K 80.003.82E-012.31E+001.08E+014.81E+011.94E+002.12E+011.41E+028.52E+02 + 58K 93.002.54E-011.52E+007.21E+003.30E+011.26E+001.22E+017.89E+014.76E+02 + 58K 110.001.60E-019.23E-014.33E+001.96E+017.80E-016.60E+004.05E+012.36E+02 + 58K 123.001.18E-016.55E-013.00E+001.33E+015.69E-014.41E+002.58E+011.45E+02 + 58K 140.008.25E-024.37E-011.93E+008.31E+003.95E-012.78E+001.53E+018.18E+01 + 58K 163.005.44E-022.70E-011.13E+004.63E+002.59E-011.63E+008.27E+004.12E+01 + 58K 190.003.58E-021.65E-016.55E-012.53E+001.70E-019.56E-014.47E+002.06E+01 + 58K 255.001.63E-026.50E-022.28E-017.78E-017.67E-023.55E-011.40E+005.48E+00 + 58K 340.007.80E-032.69E-028.33E-022.52E-013.60E-021.40E-014.71E-011.55E+00 + 58K 430.004.39E-031.36E-023.82E-021.04E-011.97E-026.76E-022.00E-015.80E-01 + 58K 540.002.59E-037.35E-031.88E-024.68E-021.11E-023.43E-029.03E-022.32E-01 + 58K 770.001.22E-033.08E-036.95E-031.50E-024.70E-031.26E-022.83E-026.13E-02 + 58K 1050.006.66E-041.56E-033.19E-036.22E-032.27E-035.49E-031.10E-022.11E-02 + 58K 1300.004.53E-041.01E-031.95E-033.56E-031.39E-033.19E-036.00E-031.07E-02 + 58K 1550.003.35E-047.15E-041.33E-032.31E-039.39E-042.07E-033.72E-036.26E-03 + 58L1 7.556.87E+001.75E+031.33E+051.74E+062.63E+021.42E+051.34E+072.97E+08 + 58L1 8.255.91E+001.07E+031.07E+052.39E+062.02E+029.32E+048.17E+062.23E+08 + 58L1 9.554.56E+004.65E+026.29E+042.23E+061.30E+024.65E+043.63E+061.18E+08 + 58L1 12.752.65E+007.56E+011.61E+048.41E+055.49E+011.20E+047.37E+052.64E+07 + 58L1 16.551.56E+001.13E+013.79E+032.29E+052.52E+013.59E+031.76E+055.99E+06 + 58L1 20.001.04E+002.55E+001.20E+037.72E+041.43E+011.51E+036.29E+041.97E+06 + 58L1 26.005.83E-018.98E-012.13E+021.49E+046.58E+004.66E+021.53E+044.15E+05 + 58L1 34.003.14E-018.69E-013.19E+012.42E+032.97E+001.43E+023.70E+038.36E+04 + 58L1 46.001.51E-016.44E-014.46E+002.78E+021.22E+003.89E+017.68E+021.39E+04 + 58L1 59.008.15E-024.08E-011.72E+004.76E+015.89E-011.36E+012.16E+023.21E+03 + 58L1 76.004.27E-022.27E-019.35E-011.01E+012.82E-014.83E+006.11E+017.41E+02 + 58L1 89.002.84E-021.51E-016.36E-014.72E+001.79E-012.56E+002.82E+013.01E+02 + 58L1 106.001.80E-029.34E-023.97E-012.31E+001.08E-011.29E+001.22E+011.13E+02 + 58L1 129.001.07E-025.32E-022.23E-011.11E+006.22E-026.03E-014.83E+003.81E+01 + 58L1 155.006.60E-033.09E-021.25E-015.68E-013.72E-023.02E-012.08E+001.42E+01 + 58L1 220.002.63E-031.08E-023.96E-021.54E-011.42E-028.50E-024.43E-012.29E+00 + 58L1 305.001.15E-034.08E-031.34E-024.51E-025.93E-032.77E-021.13E-014.60E-01 + 58L1 400.005.92E-041.89E-035.59E-031.67E-022.93E-031.14E-023.90E-021.31E-01 + 58L1 510.003.38E-049.85E-042.66E-037.17E-031.58E-035.37E-031.58E-024.55E-02 + 58L1 740.001.53E-043.96E-049.37E-042.16E-036.33E-041.80E-034.37E-031.02E-02 + 58L11000.008.48E-052.04E-044.37E-048.98E-043.10E-047.89E-041.68E-033.41E-03 + 58L11500.004.13E-059.03E-051.73E-043.11E-041.22E-042.78E-045.18E-049.07E-04 + 58L2 7.161.41E+011.06E+053.95E+071.85E+092.91E+015.95E+032.07E+052.49E+06 + 58L2 7.861.09E+016.63E+042.29E+071.30E+092.19E+014.13E+031.74E+053.49E+06 + 58L2 9.167.06E+003.08E+049.28E+066.24E+081.37E+012.27E+031.13E+053.40E+06 + 58L2 12.362.94E+006.88E+031.59E+061.15E+085.50E+006.97E+023.77E+041.49E+06 + 58L2 16.161.31E+001.81E+033.26E+052.23E+072.43E+002.42E+021.23E+044.96E+05 + 58L2 20.006.79E-016.31E+029.28E+045.76E+061.27E+001.04E+024.84E+031.84E+05 + 58L2 26.002.97E-011.73E+021.98E+041.06E+065.71E-013.68E+011.48E+034.98E+04 + 58L2 34.001.25E-014.64E+014.10E+031.82E+052.53E-011.28E+014.29E+021.24E+04 + 58L2 46.004.65E-021.07E+017.03E+022.50E+041.01E-013.88E+001.05E+022.46E+03 + 58L2 59.002.03E-023.22E+001.66E+024.85E+034.77E-021.46E+003.25E+016.37E+02 + 58L2 76.008.70E-039.60E-013.88E+019.24E+022.23E-025.43E-019.91E+001.60E+02 + 58L2 89.005.11E-034.55E-011.58E+013.31E+021.39E-022.94E-014.73E+006.76E+01 + 58L2 106.002.84E-032.00E-015.89E+001.07E+028.21E-031.49E-012.09E+002.61E+01 + 58L2 129.001.46E-038.05E-021.97E+003.03E+014.57E-037.03E-028.42E-019.00E+00 + 58L2 155.007.91E-043.47E-027.16E-019.49E+002.65E-033.49E-023.62E-013.35E+00 + 58L2 220.002.48E-047.20E-031.09E-011.09E+009.40E-049.36E-037.39E-025.25E-01 + 58L2 305.008.59E-051.74E-031.99E-021.54E-013.61E-042.81E-031.75E-029.77E-02 + 58L2 400.003.66E-055.62E-045.13E-033.27E-021.64E-041.06E-035.45E-032.53E-02 + 58L2 510.001.75E-052.11E-041.60E-038.61E-038.14E-054.50E-041.98E-037.86E-03 + 58L2 740.005.94E-065.09E-052.95E-041.26E-032.82E-051.26E-044.47E-041.43E-03 + 58L21000.002.57E-061.74E-058.27E-052.97E-041.21E-054.68E-051.42E-043.90E-04 + 58L21500.009.10E-074.53E-061.71E-055.01E-053.91E-061.30E-053.33E-057.67E-05 + 58L3 6.722.96E+012.28E+059.48E+074.88E+097.80E+001.81E+054.58E+081.19E+11 + 58L3 7.422.23E+011.38E+055.23E+073.23E+095.75E+001.11E+052.34E+085.54E+10 + 58L3 8.721.39E+016.08E+041.98E+071.42E+093.50E+004.94E+047.83E+071.60E+10 + 58L3 11.925.41E+001.25E+043.01E+062.28E+081.34E+001.04E+049.59E+061.47E+09 + 58L3 15.722.29E+003.08E+035.65E+053.95E+075.71E-012.62E+031.52E+061.81E+08 + 58L3 20.001.06E+009.14E+021.32E+058.19E+062.73E-017.90E+023.12E+052.97E+07 + 58L3 26.004.52E-012.43E+022.70E+041.42E+061.22E-012.14E+025.65E+044.22E+06 + 58L3 34.001.85E-016.30E+015.33E+032.33E+055.38E-025.66E+011.01E+045.87E+05 + 58L3 46.006.67E-021.38E+018.59E+022.97E+042.14E-021.26E+011.48E+036.56E+04 + 58L3 59.002.84E-023.98E+001.92E+025.40E+031.00E-023.70E+003.14E+021.11E+04 + 58L3 76.001.18E-021.12E+004.17E+019.52E+024.65E-031.07E+006.63E+011.87E+03 + 58L3 89.006.84E-035.13E-011.62E+013.23E+022.88E-034.93E-012.55E+016.24E+02 + 58L3 106.003.72E-032.16E-015.68E+009.75E+011.70E-032.10E-018.92E+001.88E+02 + 58L3 129.001.88E-038.21E-021.76E+002.55E+019.43E-048.13E-022.79E+004.98E+01 + 58L3 155.009.99E-043.34E-025.95E-017.33E+005.44E-043.36E-029.55E-011.46E+01 + 58L3 220.003.04E-046.18E-037.65E-026.96E-011.93E-046.39E-031.29E-011.50E+00 + 58L3 305.001.04E-041.33E-031.18E-028.12E-027.46E-051.40E-032.10E-021.91E-01 + 58L3 400.004.40E-053.91E-042.62E-031.44E-023.45E-054.11E-044.83E-033.66E-02 + 58L3 510.002.10E-051.36E-047.14E-043.24E-031.76E-051.42E-041.34E-038.70E-03 + 58L3 740.007.23E-063.01E-051.10E-043.79E-046.58E-063.01E-052.02E-041.05E-03 + 58L31000.003.34E-069.90E-062.79E-057.78E-053.12E-069.53E-064.67E-052.04E-04 + 58L31500.001.28E-062.66E-065.47E-061.17E-051.25E-062.45E-067.46E-062.53E-05 + 58M1 2.439.23E+003.17E+041.59E+068.16E+081.61E+038.28E+067.25E+091.49E+12 + 58M1 3.435.97E+007.61E+037.11E+054.72E+075.73E+021.53E+067.86E+081.36E+11 + 58M1 5.432.87E+009.60E+021.65E+057.18E+061.45E+021.63E+054.33E+075.51E+09 + 58M1 9.431.03E+005.58E+011.44E+041.01E+062.79E+011.15E+041.48E+061.22E+08 + 58M1 16.433.27E-011.76E+007.38E+025.62E+045.32E+008.53E+025.65E+042.90E+06 + 58M1 26.001.18E-012.78E-014.39E+013.37E+031.36E+001.05E+024.20E+031.44E+05 + 58M1 41.004.01E-021.66E-012.34E+001.59E+023.54E-011.41E+013.50E+027.95E+03 + 58M1 53.002.13E-021.05E-016.48E-012.70E+011.66E-014.70E+009.02E+011.63E+03 + 58M1 71.001.02E-025.41E-022.52E-014.13E+007.10E-021.39E+002.01E+012.79E+02 + 58M1 104.003.79E-031.97E-028.69E-026.04E-012.37E-022.98E-013.02E+003.00E+01 + 58M1 150.001.45E-036.84E-032.83E-021.40E-018.41E-037.28E-025.34E-013.88E+00 + 58M1 280.002.89E-041.06E-033.62E-031.30E-021.53E-037.76E-033.45E-021.52E-01 + 58M1 500.007.21E-052.12E-045.80E-041.59E-033.43E-041.19E-033.58E-031.06E-02 + 58M2 2.272.16E+016.94E+061.87E+106.27E+121.97E+022.89E+057.20E+076.75E+09 + 58M2 3.271.14E+011.12E+061.75E+094.93E+116.55E+015.59E+041.17E+071.32E+09 + 58M2 5.274.16E+001.03E+058.37E+071.75E+101.55E+016.86E+031.07E+061.13E+08 + 58M2 9.271.04E+006.13E+032.47E+063.46E+082.81E+006.16E+026.43E+045.21E+06 + 58M2 16.272.22E-013.76E+027.94E+047.19E+065.14E-015.96E+014.04E+032.27E+05 + 58M2 26.005.55E-023.74E+014.75E+032.93E+051.25E-018.85E+004.10E+021.63E+04 + 58M2 41.001.35E-024.08E+003.20E+021.35E+043.16E-021.42E+004.53E+011.26E+03 + 58M2 53.005.91E-031.18E+007.13E+012.41E+031.46E-025.14E-011.32E+012.97E+02 + 58M2 71.002.28E-032.93E-011.31E+013.45E+026.08E-031.62E-013.26E+005.78E+01 + 58M2 104.006.45E-044.86E-021.50E+002.83E+011.94E-033.67E-025.35E-016.96E+00 + 58M2 150.001.91E-048.99E-031.95E-012.70E+006.54E-049.00E-039.72E-029.42E-01 + 58M2 280.002.50E-055.66E-047.00E-035.87E-021.04E-048.72E-045.81E-033.49E-02 + 58M2 500.004.16E-065.15E-053.98E-042.19E-031.94E-051.09E-044.90E-041.98E-03 + 58M3 2.184.92E+011.40E+073.94E+101.34E+134.98E+011.16E+072.74E+116.53E+14 + 58M3 3.182.39E+012.10E+063.36E+099.43E+111.58E+011.76E+062.02E+102.65E+13 + 58M3 5.188.01E+001.80E+051.47E+083.02E+103.60E+001.54E+057.05E+084.50E+11 + 58M3 9.181.85E+001.01E+043.99E+065.43E+086.29E-018.88E+031.43E+074.26E+09 + 58M3 16.183.68E-015.80E+021.18E+051.04E+071.12E-015.27E+023.21E+054.80E+07 + 58M3 26.008.62E-025.36E+016.45E+033.83E+052.65E-024.98E+011.42E+041.25E+06 + 58M3 41.001.99E-025.47E+004.02E+021.62E+046.65E-035.19E+007.59E+024.15E+04 + 58M3 53.008.51E-031.52E+008.48E+012.73E+033.06E-031.46E+001.50E+026.36E+03 + 58M3 71.003.17E-033.54E-011.45E+013.61E+021.27E-033.46E-012.45E+017.81E+02 + 58M3 104.008.63E-045.35E-021.47E+002.60E+014.02E-045.35E-022.41E+005.40E+01 + 58M3 150.002.47E-048.90E-031.66E-012.13E+001.35E-049.12E-032.76E-014.49E+00 + 58M3 280.003.07E-054.52E-044.40E-033.28E-022.16E-054.81E-047.92E-037.83E-02 + 58M3 500.005.00E-063.39E-051.82E-048.43E-044.23E-063.56E-053.49E-042.31E-03 + 58M4 1.901.14E+024.20E+053.24E+105.35E+141.41E+013.34E+054.18E+094.77E+12 + 58M4 2.902.94E+014.82E+041.65E+091.34E+133.54E+004.00E+042.43E+081.99E+11 + 58M4 4.904.85E+003.31E+034.11E+071.44E+116.18E-012.86E+037.46E+063.92E+09 + 58M4 8.905.39E-011.56E+026.08E+058.92E+088.11E-021.40E+021.51E+054.66E+07 + 58M4 15.905.57E-027.80E+001.01E+046.78E+061.06E-027.45E+003.63E+036.55E+05 + 58M4 26.007.43E-035.97E-013.15E+021.14E+051.82E-036.17E-011.61E+021.83E+04 + 58M4 41.001.08E-035.40E-021.29E+012.70E+033.42E-046.14E-029.28E+006.88E+02 + 58M4 53.003.58E-041.38E-022.16E+003.34E+021.32E-041.68E-021.88E+001.10E+02 + 58M4 71.001.01E-042.93E-032.85E-013.16E+014.38E-053.83E-033.10E-011.38E+01 + 58M4 104.001.91E-053.90E-042.09E-021.51E+001.03E-055.61E-043.01E-029.42E-01 + 58M4 150.003.90E-065.74E-051.78E-038.55E-022.53E-068.96E-053.30E-037.46E-02 + 58M4 280.002.78E-072.41E-063.13E-057.54E-042.30E-074.08E-068.23E-051.10E-03 + 58M4 500.002.74E-081.48E-079.58E-071.20E-052.52E-082.47E-072.99E-062.59E-05 + 58M5 1.881.69E+025.47E+055.35E+108.22E+148.59E+003.56E+042.05E+101.42E+15 + 58M5 2.884.28E+016.12E+042.67E+091.98E+132.15E+004.25E+031.04E+093.17E+13 + 58M5 4.886.91E+004.11E+036.48E+072.07E+113.78E-013.07E+022.62E+072.92E+11 + 58M5 8.887.51E-011.90E+029.40E+051.24E+095.07E-021.56E+014.00E+051.49E+09 + 58M5 15.887.59E-029.28E+001.53E+049.08E+066.87E-038.75E-016.91E+039.38E+06 + 58M5 26.009.93E-036.89E-014.62E+021.46E+051.21E-037.70E-022.23E+021.36E+05 + 58M5 41.001.42E-036.04E-021.83E+013.31E+032.36E-048.27E-039.38E+002.91E+03 + 58M5 53.004.68E-041.52E-022.98E+003.95E+029.26E-052.37E-031.58E+003.44E+02 + 58M5 71.001.30E-043.12E-033.79E-013.56E+013.17E-055.74E-042.10E-013.11E+01 + 58M5 104.002.46E-053.96E-042.60E-021.56E+007.76E-069.21E-051.53E-021.41E+00 + 58M5 150.005.04E-065.56E-052.05E-038.02E-022.01E-061.63E-051.27E-037.70E-02 + 58M5 280.003.76E-072.18E-062.99E-055.56E-042.09E-079.51E-072.03E-056.20E-04 + 58M5 500.004.21E-081.36E-077.71E-076.69E-062.86E-088.10E-085.56E-078.46E-06 + 58N+ 50.001.08E-029.55E-016.18E+012.49E+035.98E-022.51E+001.11E+024.39E+03 + 58N+ 70.004.23E-031.93E-018.28E+002.36E+022.23E-025.82E-011.58E+014.10E+02 + 58N+ 100.001.56E-033.77E-021.03E+002.05E+017.97E-031.30E-012.20E+003.73E+01 + 58N+ 150.005.02E-046.46E-031.04E-011.38E+002.52E-032.57E-022.66E-012.84E+00 + 58N+ 200.002.28E-041.99E-032.20E-022.19E-011.13E-038.61E-036.49E-025.11E-01 + 58N+ 500.002.20E-058.02E-053.12E-041.25E-031.00E-043.69E-041.24E-034.23E-03 + 59K 42.992.04E+005.24E+002.60E+004.90E-011.31E+012.36E+027.28E+025.06E+02 + 59K 43.691.95E+005.39E+003.78E+001.38E+001.24E+012.21E+027.34E+027.19E+02 + 59K 44.991.80E+005.59E+005.95E+004.18E+001.13E+011.97E+027.32E+021.08E+03 + 59K 48.191.51E+005.72E+001.04E+011.53E+019.31E+001.53E+026.85E+021.72E+03 + 59K 51.991.24E+005.45E+001.37E+013.03E+017.45E+001.15E+025.92E+022.04E+03 + 59K 56.001.02E+004.95E+001.53E+014.27E+015.99E+008.69E+014.90E+022.05E+03 + 59K 62.007.79E-014.14E+001.52E+015.19E+014.45E+005.94E+013.61E+021.78E+03 + 59K 70.005.64E-013.18E+001.31E+015.16E+013.13E+003.78E+012.40E+021.31E+03 + 59K 82.003.68E-012.13E+009.54E+004.09E+011.98E+002.10E+011.35E+027.82E+02 + 59K 95.002.47E-011.42E+006.50E+002.87E+011.30E+001.22E+017.65E+014.46E+02 + 59K 112.001.57E-018.76E-013.97E+001.75E+018.10E-016.70E+003.99E+012.26E+02 + 59K 125.001.16E-016.27E-012.79E+001.21E+015.94E-014.51E+002.57E+011.41E+02 + 59K 142.008.21E-024.22E-011.82E+007.63E+004.15E-012.86E+001.54E+018.03E+01 + 59K 165.005.45E-022.63E-011.08E+004.33E+002.73E-011.69E+008.42E+004.10E+01 + 59K 190.003.72E-021.68E-016.57E-012.50E+001.85E-011.04E+004.79E+002.17E+01 + 59K 255.001.70E-026.67E-022.31E-017.82E-018.36E-023.84E-011.51E+005.82E+00 + 59K 340.008.14E-032.78E-028.54E-022.56E-013.92E-021.51E-015.06E-011.66E+00 + 59K 430.004.59E-031.42E-023.95E-021.07E-012.14E-027.31E-022.15E-016.20E-01 + 59K 540.002.72E-037.67E-031.96E-024.86E-021.21E-023.71E-029.72E-022.49E-01 + 59K 770.001.28E-033.23E-037.29E-031.58E-025.08E-031.36E-023.04E-026.58E-02 + 59K 1050.007.00E-041.64E-033.37E-036.55E-032.44E-035.93E-031.19E-022.26E-02 + 59K 1300.004.76E-041.06E-032.06E-033.76E-031.50E-033.44E-036.46E-031.14E-02 + 59K 1550.003.52E-047.55E-041.40E-032.45E-031.01E-032.23E-034.00E-036.73E-03 + 59L1 7.836.39E+001.60E+031.14E+051.38E+062.60E+021.34E+051.21E+072.55E+08 + 59L1 8.535.53E+001.00E+039.34E+041.94E+062.01E+028.92E+047.52E+061.94E+08 + 59L1 9.834.31E+004.48E+025.67E+041.87E+061.32E+024.56E+043.43E+061.06E+08 + 59L1 13.032.54E+007.83E+011.53E+047.56E+055.67E+011.22E+047.26E+052.49E+07 + 59L1 16.831.52E+001.27E+013.79E+032.17E+052.65E+013.72E+031.79E+055.87E+06 + 59L1 20.001.05E+003.35E+001.35E+038.22E+041.58E+011.70E+037.00E+042.15E+06 + 59L1 26.005.92E-018.89E-012.50E+021.64E+047.27E+005.21E+021.70E+044.54E+05 + 59L1 34.003.19E-017.90E-013.90E+012.75E+033.28E+001.59E+024.10E+039.17E+04 + 59L1 46.001.55E-016.06E-015.27E+003.27E+021.35E+004.32E+018.50E+021.52E+04 + 59L1 59.008.37E-023.93E-011.79E+005.65E+016.50E-011.52E+012.39E+023.53E+03 + 59L1 76.004.40E-022.23E-019.18E-011.15E+013.11E-015.35E+006.74E+018.13E+02 + 59L1 89.002.93E-021.50E-016.22E-015.15E+001.97E-012.84E+003.11E+013.30E+02 + 59L1 106.001.86E-029.34E-023.91E-012.43E+001.19E-011.42E+001.34E+011.24E+02 + 59L1 129.001.11E-025.36E-022.21E-011.14E+006.85E-026.66E-015.32E+004.18E+01 + 59L1 155.006.85E-033.14E-021.26E-015.80E-014.09E-023.33E-012.29E+001.55E+01 + 59L1 220.002.75E-031.11E-024.03E-021.58E-011.56E-029.34E-024.86E-012.51E+00 + 59L1 305.001.20E-034.23E-031.38E-024.67E-026.51E-033.03E-021.24E-015.03E-01 + 59L1 400.006.23E-041.97E-035.82E-031.75E-023.21E-031.25E-024.26E-021.43E-01 + 59L1 510.003.56E-041.03E-032.79E-037.54E-031.73E-035.87E-031.72E-024.97E-02 + 59L1 740.001.61E-044.18E-049.91E-042.29E-036.90E-041.97E-034.76E-031.11E-02 + 59L11000.008.96E-052.16E-044.65E-049.57E-043.37E-048.60E-041.83E-033.71E-03 + 59L11500.004.35E-059.60E-051.84E-043.33E-041.33E-043.03E-045.63E-049.85E-04 + 59L2 7.441.32E+019.61E+043.43E+071.52E+092.88E+015.60E+031.84E+052.03E+06 + 59L2 8.141.03E+016.12E+042.03E+071.09E+092.19E+013.94E+031.57E+052.90E+06 + 59L2 9.446.74E+002.91E+048.47E+065.41E+081.39E+012.21E+031.05E+052.93E+06 + 59L2 12.642.88E+006.77E+031.52E+061.06E+085.71E+007.00E+023.63E+041.36E+06 + 59L2 16.441.31E+001.83E+033.22E+052.13E+072.56E+002.48E+021.22E+044.72E+05 + 59L2 20.007.15E-016.93E+021.01E+056.16E+061.41E+001.14E+025.20E+031.92E+05 + 59L2 26.003.14E-011.90E+022.17E+041.14E+066.35E-014.05E+011.60E+035.28E+04 + 59L2 34.001.33E-015.11E+014.49E+031.97E+052.81E-011.41E+014.66E+021.32E+04 + 59L2 46.004.96E-021.18E+017.72E+022.71E+041.13E-014.28E+001.14E+022.65E+03 + 59L2 59.002.18E-023.54E+001.83E+025.30E+035.32E-021.61E+003.56E+016.91E+02 + 59L2 76.009.35E-031.06E+004.28E+011.01E+032.49E-026.01E-011.09E+011.74E+02 + 59L2 89.005.51E-035.02E-011.74E+013.62E+021.55E-023.26E-015.21E+007.38E+01 + 59L2 106.003.06E-032.21E-016.51E+001.17E+029.19E-031.66E-012.31E+002.86E+01 + 59L2 129.001.58E-038.90E-022.18E+003.34E+015.12E-037.82E-029.30E-019.88E+00 + 59L2 155.008.58E-043.84E-027.93E-011.05E+012.97E-033.89E-024.00E-013.69E+00 + 59L2 220.002.70E-047.99E-031.20E-011.20E+001.06E-031.04E-028.21E-025.80E-01 + 59L2 305.009.42E-051.94E-032.21E-021.71E-014.06E-043.14E-031.94E-021.08E-01 + 59L2 400.004.02E-056.25E-045.72E-033.63E-021.85E-041.19E-036.09E-032.81E-02 + 59L2 510.001.93E-052.35E-041.78E-039.60E-039.19E-055.05E-042.22E-038.76E-03 + 59L2 740.006.58E-065.69E-053.30E-041.40E-033.18E-051.42E-045.02E-041.60E-03 + 59L21000.002.85E-061.94E-059.28E-053.33E-041.36E-055.28E-051.60E-044.38E-04 + 59L21500.001.00E-065.07E-061.92E-055.64E-054.42E-061.47E-053.75E-058.63E-05 + 59L3 6.962.77E+012.08E+058.30E+074.06E+097.58E+001.72E+054.18E+081.04E+11 + 59L3 7.662.10E+011.28E+054.67E+072.74E+095.64E+001.07E+052.18E+085.00E+10 + 59L3 8.961.33E+015.78E+041.82E+071.25E+093.48E+004.89E+047.55E+071.50E+10 + 59L3 12.165.30E+001.23E+042.89E+062.10E+081.36E+001.07E+049.70E+061.46E+09 + 59L3 15.962.28E+003.11E+035.59E+053.79E+075.90E-012.75E+031.59E+061.86E+08 + 59L3 20.001.11E+009.97E+021.43E+058.72E+062.95E-018.95E+023.60E+053.41E+07 + 59L3 26.004.75E-012.65E+022.93E+041.52E+061.32E-012.43E+026.50E+044.84E+06 + 59L3 34.001.96E-016.88E+015.79E+032.50E+055.82E-026.40E+011.16E+046.72E+05 + 59L3 46.007.06E-021.51E+019.34E+023.20E+042.31E-021.43E+011.70E+037.49E+04 + 59L3 59.003.02E-024.34E+002.08E+025.83E+031.08E-024.19E+003.59E+021.26E+04 + 59L3 76.001.26E-021.23E+004.54E+011.03E+035.04E-031.21E+007.56E+012.12E+03 + 59L3 89.007.29E-035.60E-011.76E+013.49E+023.12E-035.57E-012.90E+017.09E+02 + 59L3 106.003.98E-032.36E-016.19E+001.06E+021.84E-032.37E-011.01E+012.13E+02 + 59L3 129.002.02E-038.96E-021.92E+002.77E+011.02E-039.17E-023.17E+005.64E+01 + 59L3 155.001.07E-033.65E-026.49E-017.96E+005.90E-043.79E-021.08E+001.66E+01 + 59L3 220.003.27E-046.76E-038.36E-027.57E-012.09E-047.18E-031.46E-011.69E+00 + 59L3 305.001.12E-041.46E-031.29E-028.84E-028.09E-051.57E-032.36E-022.16E-01 + 59L3 400.004.71E-054.27E-042.86E-031.57E-023.74E-054.60E-045.44E-034.12E-02 + 59L3 510.002.25E-051.49E-047.82E-043.53E-031.91E-051.58E-041.51E-039.78E-03 + 59L3 740.007.88E-063.28E-051.21E-044.14E-047.13E-063.34E-052.26E-041.17E-03 + 59L31000.003.60E-061.08E-053.05E-058.51E-053.38E-061.05E-055.22E-052.28E-04 + 59L31500.001.40E-062.88E-065.96E-061.28E-051.35E-062.68E-068.28E-062.82E-05 + 59M1 2.518.66E+003.02E+041.54E+067.00E+081.63E+038.12E+066.91E+091.36E+12 + 59M1 3.515.70E+007.54E+036.74E+054.68E+075.97E+021.57E+067.92E+081.33E+11 + 59M1 5.512.80E+001.00E+031.62E+056.73E+061.55E+021.74E+054.58E+075.71E+09 + 59M1 9.511.02E+006.23E+011.49E+041.00E+063.03E+011.26E+041.62E+061.32E+08 + 59M1 16.513.29E-012.17E+008.10E+025.90E+045.83E+009.45E+026.25E+043.18E+06 + 59M1 26.001.20E-012.77E-015.20E+013.78E+031.51E+001.19E+024.74E+031.62E+05 + 59M1 41.004.13E-021.58E-012.83E+001.86E+023.93E-011.59E+013.94E+028.91E+03 + 59M1 53.002.20E-021.02E-017.27E-013.22E+011.85E-015.27E+001.01E+021.82E+03 + 59M1 71.001.06E-025.34E-022.58E-014.84E+007.88E-021.55E+002.24E+013.11E+02 + 59M1 104.003.95E-031.99E-028.70E-026.58E-012.63E-023.32E-013.37E+003.33E+01 + 59M1 150.001.52E-036.98E-032.87E-021.46E-019.33E-038.09E-025.93E-014.30E+00 + 59M1 280.003.04E-041.11E-033.76E-031.35E-021.70E-038.58E-033.81E-021.68E-01 + 59M1 500.007.62E-052.24E-046.13E-041.69E-033.77E-041.31E-033.94E-031.16E-02 + 59M2 2.342.04E+016.68E+061.75E+105.69E+122.02E+022.88E+056.93E+076.06E+09 + 59M2 3.341.11E+011.12E+061.73E+094.74E+116.90E+015.78E+041.17E+071.26E+09 + 59M2 5.344.14E+001.07E+058.66E+071.78E+101.67E+017.31E+031.11E+061.14E+08 + 59M2 9.341.06E+006.56E+032.64E+063.64E+083.08E+006.70E+026.87E+045.44E+06 + 59M2 16.342.31E-014.08E+028.61E+047.71E+065.69E-016.55E+014.37E+032.42E+05 + 59M2 26.005.89E-024.15E+015.27E+033.23E+051.40E-019.87E+004.54E+021.78E+04 + 59M2 41.001.44E-024.52E+003.56E+021.49E+043.55E-021.59E+005.01E+011.38E+03 + 59M2 53.006.35E-031.31E+007.93E+012.66E+031.64E-025.74E-011.46E+013.27E+02 + 59M2 71.002.46E-033.26E-011.46E+013.82E+026.85E-031.82E-013.62E+006.39E+01 + 59M2 104.007.01E-045.42E-021.67E+003.14E+012.19E-034.11E-025.96E-017.71E+00 + 59M2 150.002.09E-041.00E-022.18E-013.01E+007.40E-041.01E-021.09E-011.05E+00 + 59M2 280.002.76E-056.34E-047.85E-036.57E-021.18E-049.83E-046.53E-033.90E-02 + 59M2 500.004.61E-065.79E-054.49E-042.46E-032.21E-051.24E-045.53E-042.23E-03 + 59M3 2.244.70E+011.35E+073.72E+101.23E+135.02E+011.16E+072.70E+116.32E+14 + 59M3 3.242.33E+012.11E+063.34E+099.10E+111.64E+011.84E+062.10E+102.74E+13 + 59M3 5.247.99E+001.87E+051.52E+083.06E+103.79E+001.67E+057.69E+084.91E+11 + 59M3 9.241.88E+001.08E+044.24E+065.68E+086.74E-019.85E+031.61E+074.79E+09 + 59M3 16.243.82E-016.28E+021.28E+051.11E+071.21E-015.92E+023.66E+055.48E+07 + 59M3 26.009.10E-025.90E+017.09E+034.18E+052.89E-025.69E+011.65E+041.46E+06 + 59M3 41.002.12E-026.02E+004.42E+021.77E+047.26E-035.94E+008.80E+024.82E+04 + 59M3 53.009.07E-031.67E+009.33E+012.98E+033.34E-031.67E+001.74E+027.36E+03 + 59M3 71.003.40E-033.90E-011.60E+013.95E+021.38E-033.95E-012.82E+019.01E+02 + 59M3 104.009.29E-045.90E-021.61E+002.85E+014.39E-046.10E-022.77E+006.20E+01 + 59M3 150.002.67E-049.81E-031.83E-012.34E+001.47E-041.04E-023.16E-015.14E+00 + 59M3 280.003.33E-054.99E-044.86E-033.61E-022.36E-055.44E-049.03E-038.93E-02 + 59M3 500.005.51E-063.73E-052.01E-049.30E-044.63E-064.01E-053.96E-042.63E-03 + 59M4 1.951.11E+024.08E+053.09E+105.02E+141.43E+013.40E+054.16E+094.60E+12 + 59M4 2.952.96E+014.90E+041.68E+091.36E+133.71E+004.26E+042.56E+082.05E+11 + 59M4 4.955.04E+003.49E+034.39E+071.55E+116.66E-013.15E+038.22E+064.25E+09 + 59M4 8.955.75E-011.69E+026.71E+059.94E+088.90E-021.58E+021.71E+055.22E+07 + 59M4 15.956.05E-028.58E+001.13E+047.70E+061.18E-028.51E+004.17E+037.47E+05 + 59M4 26.008.24E-036.70E-013.63E+021.33E+052.05E-037.17E-011.88E+022.14E+04 + 59M4 41.001.21E-036.09E-021.49E+013.14E+033.88E-047.15E-021.08E+018.02E+02 + 59M4 53.004.02E-041.57E-022.49E+003.89E+021.49E-041.95E-022.20E+001.28E+02 + 59M4 71.001.13E-043.33E-033.28E-013.67E+014.99E-054.46E-033.63E-011.61E+01 + 59M4 104.002.16E-054.44E-042.41E-021.75E+001.17E-056.54E-043.53E-021.10E+00 + 59M4 150.004.44E-066.56E-052.05E-039.96E-022.89E-061.05E-043.87E-038.73E-02 + 59M4 280.003.15E-072.76E-063.62E-058.80E-042.64E-074.77E-069.67E-051.29E-03 + 59M4 500.002.98E-081.71E-071.11E-061.40E-052.90E-082.89E-073.51E-063.04E-05 + 59M5 1.931.65E+025.28E+055.14E+107.76E+148.74E+003.57E+042.06E+101.40E+15 + 59M5 2.934.31E+016.19E+042.73E+092.02E+132.25E+004.45E+031.11E+093.36E+13 + 59M5 4.937.18E+004.31E+036.96E+072.23E+114.06E-013.33E+022.92E+073.28E+11 + 59M5 8.938.00E-012.04E+021.04E+061.38E+095.54E-021.73E+014.59E+051.73E+09 + 59M5 15.938.24E-021.01E+011.72E+041.03E+077.59E-039.80E-018.07E+031.11E+07 + 59M5 26.001.10E-027.67E-015.32E+021.70E+051.36E-038.75E-022.65E+021.66E+05 + 59M5 41.001.59E-036.75E-022.11E+013.84E+032.65E-049.39E-031.12E+013.53E+03 + 59M5 53.005.23E-041.70E-023.44E+004.59E+021.04E-042.69E-031.88E+004.15E+02 + 59M5 71.001.46E-043.50E-034.37E-014.13E+013.58E-056.53E-042.50E-013.74E+01 + 59M5 104.002.77E-054.46E-043.00E-021.81E+008.78E-061.05E-041.81E-021.70E+00 + 59M5 150.005.72E-066.29E-052.36E-039.31E-022.28E-061.86E-051.50E-039.22E-02 + 59M5 280.004.25E-072.47E-063.45E-056.46E-042.38E-071.08E-062.38E-057.39E-04 + 59M5 500.004.47E-081.53E-078.79E-077.75E-063.25E-089.25E-086.48E-071.00E-05 + 59N+ 50.001.14E-021.06E+006.93E+012.80E+036.66E-022.84E+001.28E+025.11E+03 + 59N+ 70.004.45E-032.15E-019.28E+002.65E+022.49E-026.56E-011.81E+014.75E+02 + 59N+ 100.001.64E-034.16E-021.15E+002.30E+018.87E-031.47E-012.50E+004.28E+01 + 59N+ 150.005.31E-047.07E-031.16E-011.55E+002.80E-032.88E-023.00E-013.24E+00 + 59N+ 200.002.41E-042.17E-032.45E-022.45E-011.26E-039.61E-037.30E-025.78E-01 + 59N+ 500.002.35E-058.63E-053.42E-041.39E-031.11E-044.08E-041.38E-034.72E-03 + 60K 44.571.89E+004.64E+002.20E+003.86E-011.28E+012.21E+026.56E+024.36E+02 + 60K 45.271.81E+004.79E+003.18E+001.08E+001.22E+012.09E+026.64E+026.17E+02 + 60K 46.571.68E+004.96E+004.97E+003.25E+001.12E+011.87E+026.63E+029.26E+02 + 60K 49.771.42E+005.10E+008.70E+001.20E+019.26E+001.46E+026.25E+021.48E+03 + 60K 53.571.17E+004.88E+001.16E+012.40E+017.46E+001.11E+025.45E+021.77E+03 + 60K 58.009.51E-014.43E+001.31E+013.51E+015.91E+008.24E+014.46E+021.79E+03 + 60K 64.007.34E-013.73E+001.31E+014.28E+014.44E+005.70E+013.33E+021.57E+03 + 60K 72.005.36E-012.89E+001.15E+014.31E+013.15E+003.68E+012.25E+021.18E+03 + 60K 84.003.54E-011.97E+008.47E+003.49E+012.02E+002.08E+011.29E+027.19E+02 + 60K 97.002.40E-011.33E+005.87E+002.50E+011.33E+001.23E+017.43E+014.19E+02 + 60K 114.001.55E-018.32E-013.65E+001.56E+018.41E-016.81E+003.94E+012.17E+02 + 60K 127.001.15E-016.01E-012.60E+001.09E+016.20E-014.62E+002.56E+011.37E+02 + 60K 144.008.17E-024.08E-011.71E+007.01E+004.35E-012.95E+001.55E+017.89E+01 + 60K 167.005.46E-022.57E-011.03E+004.04E+002.88E-011.75E+008.57E+004.09E+01 + 60K 195.003.60E-021.58E-016.01E-012.23E+001.88E-011.03E+004.62E+002.04E+01 + 60K 260.001.68E-026.44E-022.19E-017.29E-018.64E-023.90E-011.50E+005.67E+00 + 60K 345.008.19E-032.75E-028.33E-022.47E-014.10E-021.57E-015.15E-011.66E+00 + 60K 430.004.80E-031.47E-024.08E-021.10E-012.32E-027.91E-022.31E-016.62E-01 + 60K 540.002.84E-037.99E-032.04E-025.04E-021.31E-024.01E-021.05E-012.66E-01 + 60K 770.001.34E-033.38E-037.64E-031.65E-025.49E-031.46E-023.27E-027.05E-02 + 60K 1050.007.35E-041.72E-033.55E-036.90E-032.63E-036.39E-031.28E-022.43E-02 + 60K 1300.005.01E-041.12E-032.18E-033.98E-031.61E-033.70E-036.95E-031.23E-02 + 60K 1550.003.70E-047.97E-041.49E-032.59E-031.08E-032.40E-034.30E-037.22E-03 + 60L1 8.135.95E+001.47E+039.95E+041.11E+062.57E+021.27E+051.10E+072.21E+08 + 60L1 8.835.18E+009.38E+028.24E+041.59E+062.01E+028.56E+046.94E+061.71E+08 + 60L1 10.134.07E+004.32E+025.12E+041.59E+061.33E+024.46E+043.25E+069.59E+07 + 60L1 13.332.44E+008.06E+011.46E+046.80E+055.86E+011.23E+047.15E+052.36E+07 + 60L1 17.131.47E+001.41E+013.77E+032.05E+052.77E+013.85E+031.81E+055.75E+06 + 60L1 21.009.59E-013.04E+001.13E+036.57E+041.51E+011.52E+035.97E+041.75E+06 + 60L1 27.005.52E-018.55E-012.27E+021.41E+047.17E+004.91E+021.55E+043.96E+05 + 60L1 35.003.04E-017.16E-013.86E+012.54E+033.32E+001.56E+023.90E+038.45E+04 + 60L1 47.001.50E-015.54E-015.55E+003.27E+021.39E+004.38E+018.42E+021.47E+04 + 60L1 60.008.23E-023.67E-011.80E+005.96E+016.82E-011.57E+012.42E+023.51E+03 + 60L1 77.004.38E-022.12E-018.83E-011.23E+013.30E-015.62E+006.97E+018.27E+02 + 60L1 90.002.93E-021.44E-015.95E-015.40E+002.10E-013.00E+003.25E+013.40E+02 + 60L1 107.001.87E-029.10E-023.76E-012.48E+001.28E-011.51E+001.41E+011.29E+02 + 60L1 130.001.13E-025.28E-022.15E-011.15E+007.37E-027.13E-015.64E+004.39E+01 + 60L1 155.007.12E-033.18E-021.26E-015.96E-014.50E-023.67E-012.51E+001.70E+01 + 60L1 220.002.87E-031.13E-024.11E-021.62E-011.71E-021.03E-015.33E-012.74E+00 + 60L1 305.001.26E-034.38E-031.42E-024.85E-027.14E-033.33E-021.36E-015.49E-01 + 60L1 400.006.53E-042.05E-036.06E-031.83E-023.51E-031.37E-024.66E-021.56E-01 + 60L1 510.003.74E-041.08E-032.93E-037.94E-031.89E-036.42E-031.88E-025.41E-02 + 60L1 740.001.70E-044.42E-041.05E-032.43E-037.52E-042.15E-035.18E-031.21E-02 + 60L11000.009.46E-052.29E-044.94E-041.02E-033.66E-049.36E-041.99E-034.04E-03 + 60L11500.004.60E-051.02E-041.97E-043.56E-041.43E-043.29E-046.11E-041.07E-03 + 60L2 7.721.23E+018.74E+042.99E+071.26E+092.85E+015.28E+031.65E+051.68E+06 + 60L2 8.429.66E+005.66E+041.80E+079.18E+082.19E+013.77E+031.42E+052.45E+06 + 60L2 9.726.44E+002.76E+047.74E+064.70E+081.41E+012.15E+039.67E+042.55E+06 + 60L2 12.922.82E+006.66E+031.45E+069.71E+075.92E+007.03E+023.49E+041.25E+06 + 60L2 16.721.30E+001.85E+033.18E+052.03E+072.70E+002.54E+021.21E+044.50E+05 + 60L2 21.006.47E-015.98E+028.31E+044.83E+061.35E+001.04E+024.49E+031.59E+05 + 60L2 27.002.94E-011.74E+021.90E+049.58E+056.29E-013.84E+011.45E+034.62E+04 + 60L2 35.001.28E-014.87E+014.16E+031.77E+052.87E-011.38E+014.42E+021.21E+04 + 60L2 47.004.92E-021.16E+017.47E+022.56E+041.18E-014.34E+001.13E+022.54E+03 + 60L2 60.002.20E-023.60E+001.82E+025.17E+035.64E-021.67E+003.60E+016.83E+02 + 60L2 77.009.61E-031.10E+004.37E+011.02E+032.67E-026.32E-011.12E+011.77E+02 + 60L2 90.005.70E-035.25E-011.80E+013.69E+021.67E-023.46E-015.43E+007.58E+01 + 60L2 107.003.20E-032.34E-016.81E+001.21E+029.99E-031.77E-012.43E+002.97E+01 + 60L2 130.001.67E-039.49E-022.30E+003.49E+015.60E-038.43E-029.89E-011.04E+01 + 60L2 155.009.30E-044.25E-028.76E-011.15E+013.32E-034.32E-024.42E-014.05E+00 + 60L2 220.002.94E-048.85E-031.34E-011.33E+001.18E-031.16E-029.10E-026.40E-01 + 60L2 305.001.03E-042.15E-032.46E-021.90E-014.56E-043.51E-032.16E-021.20E-01 + 60L2 400.004.41E-056.95E-046.36E-034.04E-022.08E-041.33E-036.78E-033.13E-02 + 60L2 510.002.11E-052.62E-041.99E-031.07E-021.03E-045.67E-042.48E-039.75E-03 + 60L2 740.007.17E-066.34E-053.70E-041.57E-033.59E-051.60E-045.63E-041.79E-03 + 60L21000.003.17E-062.17E-051.04E-043.72E-041.54E-055.94E-051.80E-044.90E-04 + 60L21500.001.09E-065.67E-062.16E-056.33E-054.99E-061.66E-054.23E-059.71E-05 + 60L3 7.212.59E+011.90E+057.30E+073.42E+097.36E+001.64E+053.83E+089.23E+10 + 60L3 7.911.99E+011.19E+054.19E+072.34E+095.54E+001.03E+052.04E+084.52E+10 + 60L3 9.211.27E+015.49E+041.67E+071.10E+093.47E+004.83E+047.29E+071.41E+10 + 60L3 12.415.19E+001.21E+042.78E+061.95E+081.38E+001.09E+049.81E+061.44E+09 + 60L3 16.212.27E+003.14E+035.53E+053.63E+076.09E-012.88E+031.66E+061.90E+08 + 60L3 21.009.97E-018.49E+021.16E+056.73E+062.75E-017.93E+023.01E+052.72E+07 + 60L3 27.004.41E-012.39E+022.53E+041.27E+061.27E-012.27E+025.85E+044.19E+06 + 60L3 35.001.87E-016.47E+015.28E+032.20E+055.76E-026.27E+011.10E+046.21E+05 + 60L3 47.006.94E-021.47E+018.91E+022.97E+042.34E-021.45E+011.70E+037.31E+04 + 60L3 60.003.02E-024.34E+002.05E+025.60E+031.11E-024.35E+003.69E+021.28E+04 + 60L3 77.001.28E-021.25E+004.57E+011.02E+035.24E-031.28E+007.94E+012.20E+03 + 60L3 90.007.47E-035.77E-011.79E+013.50E+023.27E-035.95E-013.08E+017.44E+02 + 60L3 107.004.11E-032.45E-016.38E+001.07E+021.94E-032.56E-011.09E+012.27E+02 + 60L3 130.002.10E-039.41E-022.00E+002.84E+011.08E-039.94E-023.43E+006.05E+01 + 60L3 155.001.15E-033.98E-027.07E-018.63E+006.39E-044.26E-021.22E+001.87E+01 + 60L3 220.003.50E-047.37E-039.11E-028.22E-012.27E-048.06E-031.64E-011.91E+00 + 60L3 305.001.19E-041.59E-031.41E-029.62E-028.76E-051.76E-032.66E-022.43E-01 + 60L3 400.005.07E-054.66E-043.13E-031.71E-024.05E-055.13E-046.12E-034.63E-02 + 60L3 510.002.44E-051.62E-048.53E-043.85E-032.07E-051.76E-041.69E-031.10E-02 + 60L3 740.008.51E-063.57E-051.32E-044.52E-047.70E-063.69E-052.53E-041.32E-03 + 60L31000.003.86E-061.17E-053.33E-059.29E-053.65E-061.15E-055.82E-052.55E-04 + 60L31500.001.51E-063.12E-066.49E-061.40E-051.45E-062.93E-069.18E-063.15E-05 + 60M1 2.578.29E+002.96E+041.56E+066.33E+081.68E+038.18E+066.84E+091.32E+12 + 60M1 3.575.52E+007.62E+036.63E+054.77E+076.28E+021.63E+068.19E+081.35E+11 + 60M1 5.572.75E+001.05E+031.62E+056.53E+061.66E+021.87E+054.92E+076.03E+09 + 60M1 9.571.02E+006.95E+011.56E+041.01E+063.29E+011.39E+041.78E+061.43E+08 + 60M1 16.573.32E-012.65E+008.89E+026.23E+046.40E+001.05E+036.94E+043.51E+06 + 60M1 26.001.23E-012.87E-016.11E+014.22E+031.68E+001.34E+025.36E+031.82E+05 + 60M1 41.004.24E-021.51E-013.42E+002.16E+024.37E-011.78E+014.42E+029.98E+03 + 60M1 53.002.27E-029.85E-028.31E-013.80E+012.05E-015.90E+001.13E+022.03E+03 + 60M1 71.001.09E-025.27E-022.68E-015.69E+008.75E-021.73E+002.50E+013.46E+02 + 60M1 104.004.10E-032.00E-028.75E-027.24E-012.91E-023.70E-013.74E+003.70E+01 + 60M1 150.001.58E-037.12E-032.91E-021.54E-011.03E-028.98E-026.58E-014.76E+00 + 60M1 280.003.20E-041.15E-033.90E-031.42E-021.87E-039.49E-034.21E-021.85E-01 + 60M1 500.008.08E-052.36E-046.48E-041.80E-034.15E-041.44E-034.34E-031.28E-02 + 60M2 2.401.94E+016.41E+061.64E+105.17E+122.07E+022.87E+056.68E+075.50E+09 + 60M2 3.401.07E+011.12E+061.71E+094.56E+117.26E+015.97E+041.18E+071.21E+09 + 60M2 5.404.11E+001.11E+058.94E+071.80E+101.80E+017.78E+031.16E+061.15E+08 + 60M2 9.401.08E+007.00E+032.81E+063.81E+083.37E+007.26E+027.33E+045.68E+06 + 60M2 16.402.39E-014.43E+029.32E+048.25E+066.28E-017.18E+014.73E+032.58E+05 + 60M2 26.006.24E-024.60E+015.84E+033.56E+051.57E-011.10E+015.01E+021.95E+04 + 60M2 41.001.54E-025.01E+003.94E+021.64E+043.98E-021.77E+005.54E+011.52E+03 + 60M2 53.006.81E-031.46E+008.80E+012.94E+031.84E-026.40E-011.62E+013.60E+02 + 60M2 71.002.65E-033.62E-011.62E+014.22E+027.70E-032.03E-014.01E+007.04E+01 + 60M2 104.007.60E-046.02E-021.86E+003.48E+012.47E-034.60E-026.63E-018.53E+00 + 60M2 150.002.28E-041.12E-022.43E-013.35E+008.35E-041.13E-021.21E-011.16E+00 + 60M2 280.003.02E-057.09E-048.80E-037.34E-021.34E-041.11E-037.32E-034.36E-02 + 60M2 500.005.08E-066.49E-055.05E-042.77E-032.51E-051.40E-046.23E-042.50E-03 + 60M3 2.304.52E+011.31E+073.55E+101.14E+135.07E+011.18E+072.69E+116.19E+14 + 60M3 3.302.28E+012.13E+063.33E+098.88E+111.69E+011.94E+062.20E+102.85E+13 + 60M3 5.307.98E+001.95E+051.58E+083.11E+104.00E+001.81E+058.40E+085.37E+11 + 60M3 9.301.92E+001.15E+044.50E+065.95E+087.21E-011.09E+041.81E+075.40E+09 + 60M3 16.303.95E-016.78E+021.37E+051.18E+071.30E-016.65E+024.17E+056.26E+07 + 60M3 26.009.59E-026.48E+017.79E+034.55E+053.15E-026.50E+011.92E+041.70E+06 + 60M3 41.002.25E-026.62E+004.86E+021.93E+047.92E-036.77E+001.02E+035.59E+04 + 60M3 53.009.66E-031.84E+001.02E+023.26E+033.64E-031.90E+002.01E+028.50E+03 + 60M3 71.003.63E-034.29E-011.75E+014.31E+021.51E-034.50E-013.25E+011.04E+03 + 60M3 104.009.94E-046.49E-021.77E+003.12E+014.79E-046.95E-023.18E+007.12E+01 + 60M3 150.002.86E-041.08E-022.01E-012.56E+001.61E-041.18E-023.62E-015.88E+00 + 60M3 280.003.62E-055.50E-045.35E-033.96E-022.58E-056.16E-041.03E-021.02E-01 + 60M3 500.005.96E-064.10E-052.22E-041.02E-035.05E-064.50E-054.49E-042.98E-03 + 60M4 2.001.08E+023.97E+052.96E+104.75E+141.46E+013.46E+054.16E+094.48E+12 + 60M4 3.002.98E+014.98E+041.71E+091.38E+133.89E+004.52E+042.71E+082.13E+11 + 60M4 5.005.22E+003.67E+034.68E+071.67E+117.15E-013.46E+039.06E+064.62E+09 + 60M4 9.006.11E-011.82E+027.39E+051.11E+099.73E-021.78E+021.94E+055.85E+07 + 60M4 16.006.55E-029.40E+001.27E+048.72E+061.31E-029.70E+004.78E+038.51E+05 + 60M4 26.009.11E-037.50E-014.16E+021.54E+052.31E-038.30E-012.20E+022.48E+04 + 60M4 41.001.34E-036.85E-021.71E+013.65E+034.37E-048.29E-021.26E+019.33E+02 + 60M4 53.004.49E-041.77E-022.85E+004.51E+021.69E-042.26E-022.57E+001.49E+02 + 60M4 71.001.27E-043.77E-033.77E-014.26E+015.65E-055.18E-034.23E-011.87E+01 + 60M4 104.002.42E-055.05E-042.77E-022.03E+001.33E-057.60E-044.11E-021.28E+00 + 60M4 150.004.94E-067.48E-052.36E-031.16E-013.29E-061.22E-044.52E-031.02E-01 + 60M4 280.003.52E-073.18E-064.16E-051.02E-033.01E-075.55E-061.13E-041.51E-03 + 60M4 500.003.37E-081.97E-071.28E-061.63E-053.32E-083.36E-074.11E-063.57E-05 + 60M5 1.981.61E+025.12E+054.97E+107.38E+148.89E+003.59E+042.07E+101.38E+15 + 60M5 2.984.34E+016.26E+042.79E+092.06E+132.35E+004.66E+031.18E+093.57E+13 + 60M5 4.987.44E+004.50E+037.45E+072.40E+114.34E-013.59E+023.25E+073.69E+11 + 60M5 8.988.49E-012.18E+021.15E+061.53E+096.02E-021.91E+015.26E+052.02E+09 + 60M5 15.988.90E-021.10E+011.93E+041.17E+078.35E-031.09E+009.39E+031.32E+07 + 60M5 26.001.21E-028.50E-016.12E+021.96E+051.51E-039.90E-023.15E+022.01E+05 + 60M5 41.001.76E-037.52E-022.43E+014.44E+032.97E-041.06E-021.33E+014.25E+03 + 60M5 53.005.82E-041.89E-023.95E+005.30E+021.17E-043.04E-032.23E+005.00E+02 + 60M5 71.001.63E-043.92E-035.03E-014.77E+014.02E-057.39E-042.96E-014.49E+01 + 60M5 104.003.09E-055.01E-043.46E-022.10E+009.89E-061.19E-042.14E-022.03E+00 + 60M5 150.006.31E-067.08E-052.71E-031.08E-012.57E-062.11E-051.77E-031.10E-01 + 60M5 280.004.68E-072.80E-063.96E-057.47E-042.69E-071.23E-062.80E-058.76E-04 + 60M5 500.005.07E-081.79E-071.01E-068.98E-063.68E-081.05E-077.53E-071.18E-05 + 60N+ 50.001.28E-021.22E+007.66E+012.99E+037.70E-023.17E+001.37E+025.17E+03 + 60N+ 70.004.92E-032.42E-011.02E+012.83E+022.84E-027.26E-011.93E+014.84E+02 + 60N+ 100.001.83E-034.74E-021.30E+002.54E+011.03E-021.66E-012.74E+004.53E+01 + 60N+ 150.005.87E-047.96E-031.30E-011.72E+003.23E-033.25E-023.30E-013.47E+00 + 60N+ 200.002.63E-042.40E-032.71E-022.69E-011.43E-031.07E-027.98E-026.19E-01 + 60N+ 500.002.51E-059.28E-053.71E-041.52E-031.23E-044.54E-041.53E-035.25E-03 + 61K 46.181.75E+004.13E+001.86E+003.04E-011.26E+012.09E+025.94E+023.77E+02 + 61K 46.881.69E+004.26E+002.68E+008.44E-011.21E+011.97E+026.02E+025.30E+02 + 61K 48.181.57E+004.41E+004.17E+002.53E+001.11E+011.77E+026.01E+027.94E+02 + 61K 51.381.33E+004.55E+007.30E+009.39E+009.21E+001.40E+025.70E+021.27E+03 + 61K 55.181.11E+004.38E+009.79E+001.90E+017.47E+001.07E+025.01E+021.54E+03 + 61K 59.009.30E-014.06E+001.11E+012.72E+016.15E+008.34E+014.27E+021.59E+03 + 61K 65.007.21E-013.46E+001.14E+013.47E+014.64E+005.82E+013.23E+021.43E+03 + 61K 73.005.30E-012.72E+001.02E+013.63E+013.31E+003.78E+012.21E+021.10E+03 + 61K 85.003.53E-011.88E+007.73E+003.05E+012.13E+002.15E+011.29E+026.89E+02 + 61K 98.002.40E-011.28E+005.45E+002.24E+011.41E+001.28E+017.51E+014.09E+02 + 61K 115.001.56E-018.11E-013.45E+001.43E+018.96E-017.14E+004.03E+012.15E+02 + 61K 128.001.16E-015.89E-012.48E+001.01E+016.62E-014.86E+002.64E+011.37E+02 + 61K 145.008.29E-024.03E-011.65E+006.60E+004.66E-013.12E+001.60E+017.99E+01 + 61K 168.005.56E-022.56E-011.01E+003.86E+003.09E-011.86E+008.92E+004.18E+01 + 61K 195.003.72E-021.61E-016.02E-012.20E+002.05E-011.11E+004.94E+002.15E+01 + 61K 260.001.75E-026.60E-022.22E-017.32E-019.40E-024.22E-011.61E+006.02E+00 + 61K 345.008.53E-032.84E-028.53E-022.52E-014.45E-021.69E-015.52E-011.77E+00 + 61K 440.004.75E-031.43E-023.91E-021.05E-012.38E-027.97E-022.29E-016.44E-01 + 61K 550.002.86E-037.94E-032.00E-024.91E-021.35E-024.10E-021.06E-012.65E-01 + 61K 780.001.37E-033.44E-037.74E-031.66E-025.75E-031.53E-023.38E-027.21E-02 + 61K 1050.007.72E-041.81E-033.74E-037.27E-032.84E-036.89E-031.37E-022.61E-02 + 61K 1300.005.25E-041.18E-032.30E-034.20E-031.73E-033.99E-037.47E-031.32E-02 + 61K 1550.003.89E-048.40E-041.57E-032.74E-031.16E-032.58E-034.62E-037.75E-03 + 61L1 8.435.54E+001.35E+038.65E+048.91E+052.54E+021.20E+059.94E+061.91E+08 + 61L1 9.134.85E+008.76E+027.25E+041.30E+062.00E+028.20E+046.40E+061.50E+08 + 61L1 10.433.84E+004.16E+024.62E+041.34E+061.34E+024.36E+043.06E+068.62E+07 + 61L1 13.632.33E+008.26E+011.39E+046.10E+056.04E+011.24E+047.02E+052.22E+07 + 61L1 17.431.43E+001.55E+013.74E+031.93E+052.90E+013.98E+031.82E+055.61E+06 + 61L1 21.009.68E-013.93E+001.26E+036.96E+041.67E+011.70E+036.62E+041.90E+06 + 61L1 27.005.59E-019.16E-012.63E+021.54E+047.90E+005.48E+021.71E+044.32E+05 + 61L1 35.003.09E-016.61E-014.63E+012.85E+033.66E+001.74E+024.32E+039.24E+04 + 61L1 47.001.54E-015.21E-016.63E+003.79E+021.54E+004.87E+019.30E+021.61E+04 + 61L1 60.008.44E-023.53E-011.95E+007.01E+017.51E-011.74E+012.67E+023.84E+03 + 61L1 77.004.51E-022.08E-018.88E-011.42E+013.64E-016.22E+007.68E+019.06E+02 + 61L1 90.003.02E-021.42E-015.90E-016.04E+002.32E-013.31E+003.57E+013.72E+02 + 61L1 107.001.94E-029.08E-023.73E-012.68E+001.41E-011.67E+001.55E+011.41E+02 + 61L1 130.001.17E-025.31E-022.15E-011.20E+008.12E-027.86E-016.20E+004.80E+01 + 61L1 155.007.39E-033.22E-021.27E-016.16E-014.95E-024.04E-012.76E+001.86E+01 + 61L1 220.002.99E-031.16E-024.19E-021.68E-011.88E-021.13E-015.84E-012.99E+00 + 61L1 305.001.31E-034.53E-031.47E-025.05E-027.82E-033.65E-021.49E-015.99E-01 + 61L1 400.006.86E-042.14E-036.32E-031.92E-023.85E-031.50E-025.09E-021.70E-01 + 61L1 510.003.94E-041.13E-033.07E-038.36E-032.07E-037.01E-032.05E-025.89E-02 + 61L1 740.001.79E-044.66E-041.11E-032.58E-038.20E-042.34E-035.65E-031.32E-02 + 61L11000.009.99E-052.42E-045.25E-041.08E-033.98E-041.02E-032.16E-034.39E-03 + 61L11500.004.87E-051.08E-042.10E-043.80E-041.55E-043.57E-046.64E-041.16E-03 + 61L2 8.011.15E+017.96E+042.61E+071.04E+092.82E+014.98E+031.48E+051.39E+06 + 61L2 8.719.10E+005.23E+041.60E+077.75E+082.18E+013.60E+031.29E+052.06E+06 + 61L2 10.016.14E+002.61E+047.07E+064.08E+081.43E+012.09E+038.93E+042.21E+06 + 61L2 13.212.76E+006.54E+031.39E+068.89E+076.14E+007.04E+023.35E+041.14E+06 + 61L2 17.011.29E+001.86E+033.13E+051.93E+072.84E+002.60E+021.20E+044.27E+05 + 61L2 21.006.81E-016.56E+029.07E+045.16E+061.50E+001.14E+024.82E+031.66E+05 + 61L2 27.003.11E-011.90E+022.08E+041.03E+066.99E-014.22E+011.57E+034.88E+04 + 61L2 35.001.36E-015.35E+014.55E+031.91E+053.19E-011.52E+014.79E+021.29E+04 + 61L2 47.005.24E-021.28E+018.19E+022.78E+041.31E-014.78E+001.23E+022.74E+03 + 61L2 60.002.35E-023.96E+002.00E+025.63E+036.29E-021.84E+003.93E+017.38E+02 + 61L2 77.001.03E-021.21E+004.80E+011.11E+032.98E-026.99E-011.23E+011.92E+02 + 61L2 90.006.13E-035.79E-011.98E+014.04E+021.87E-023.82E-015.96E+008.25E+01 + 61L2 107.003.44E-032.58E-017.50E+001.33E+021.12E-021.97E-012.67E+003.24E+01 + 61L2 130.001.80E-031.05E-012.54E+003.83E+016.26E-039.35E-021.09E+001.14E+01 + 61L2 155.001.01E-034.69E-029.68E-011.27E+013.72E-034.80E-024.88E-014.44E+00 + 61L2 220.003.19E-049.80E-031.48E-011.46E+001.33E-031.30E-021.01E-017.05E-01 + 61L2 305.001.12E-042.39E-032.73E-022.10E-015.12E-043.92E-032.40E-021.33E-01 + 61L2 400.004.84E-057.72E-047.08E-034.48E-022.34E-041.49E-037.56E-033.47E-02 + 61L2 510.002.33E-052.91E-042.22E-031.19E-021.17E-046.35E-042.76E-031.08E-02 + 61L2 740.007.89E-067.07E-054.13E-041.75E-034.05E-051.79E-046.30E-041.99E-03 + 61L21000.003.50E-062.42E-051.16E-044.17E-041.74E-056.69E-052.02E-045.49E-04 + 61L21500.001.21E-066.34E-062.42E-057.10E-055.64E-061.87E-054.76E-051.09E-04 + 61L3 7.462.43E+011.74E+056.42E+072.87E+097.15E+001.56E+053.51E+088.15E+10 + 61L3 8.161.88E+011.10E+053.75E+072.00E+095.43E+009.98E+041.91E+084.09E+10 + 61L3 9.461.22E+015.21E+041.54E+079.63E+083.44E+004.77E+047.02E+071.31E+10 + 61L3 12.665.08E+001.19E+042.66E+061.80E+081.41E+001.12E+049.89E+061.42E+09 + 61L3 16.462.26E+003.16E+035.46E+053.48E+076.27E-013.01E+031.72E+061.94E+08 + 61L3 21.001.04E+009.23E+021.25E+057.15E+062.97E-018.96E+023.45E+053.11E+07 + 61L3 27.004.63E-012.60E+022.74E+041.35E+061.37E-012.57E+026.70E+044.78E+06 + 61L3 35.001.97E-017.04E+015.72E+032.36E+056.22E-027.07E+011.26E+047.08E+05 + 61L3 47.007.33E-021.60E+019.67E+023.19E+042.53E-021.64E+011.94E+038.32E+04 + 61L3 60.003.20E-024.73E+002.22E+026.03E+031.20E-024.91E+004.20E+021.45E+04 + 61L3 77.001.36E-021.36E+004.96E+011.10E+035.66E-031.44E+009.03E+012.49E+03 + 61L3 90.007.94E-036.29E-011.95E+013.77E+023.53E-036.70E-013.49E+018.42E+02 + 61L3 107.004.37E-032.67E-016.93E+001.16E+022.10E-032.88E-011.23E+012.56E+02 + 61L3 130.002.24E-031.02E-012.18E+003.08E+011.17E-031.12E-013.88E+006.84E+01 + 61L3 155.001.22E-034.34E-027.69E-019.34E+006.91E-044.79E-021.38E+002.11E+01 + 61L3 220.003.76E-048.03E-039.92E-028.92E-012.45E-049.04E-031.85E-012.15E+00 + 61L3 305.001.28E-041.73E-031.53E-021.04E-019.47E-051.97E-033.00E-022.73E-01 + 61L3 400.005.45E-055.08E-043.41E-031.86E-024.38E-055.72E-046.88E-035.20E-02 + 61L3 510.002.61E-051.77E-049.31E-044.20E-032.23E-051.95E-041.90E-031.23E-02 + 61L3 740.009.11E-063.88E-051.44E-044.93E-048.31E-064.08E-052.83E-041.47E-03 + 61L31000.004.14E-061.27E-053.62E-051.01E-043.93E-061.27E-056.49E-052.86E-04 + 61L31500.001.61E-063.38E-067.05E-061.52E-051.56E-063.20E-061.02E-053.51E-05 + 61M1 2.657.85E+002.84E+041.53E+065.51E+081.71E+038.07E+066.57E+091.22E+12 + 61M1 3.655.29E+007.58E+036.42E+054.71E+076.54E+021.67E+068.28E+081.32E+11 + 61M1 5.652.68E+001.09E+031.60E+056.27E+061.77E+021.99E+055.20E+076.25E+09 + 61M1 9.651.01E+007.68E+011.62E+041.00E+063.57E+011.51E+041.94E+061.54E+08 + 61M1 16.653.34E-013.20E+009.69E+026.52E+047.01E+001.16E+037.67E+043.84E+06 + 61M1 26.001.26E-013.09E-017.12E+014.69E+031.86E+001.51E+026.04E+032.04E+05 + 61M1 41.004.36E-021.44E-014.13E+002.49E+024.84E-012.00E+014.96E+021.12E+04 + 61M1 53.002.34E-029.53E-029.63E-014.47E+012.28E-016.61E+001.27E+022.27E+03 + 61M1 71.001.13E-025.19E-022.84E-016.69E+009.70E-021.93E+002.79E+013.85E+02 + 61M1 104.004.26E-032.00E-028.86E-028.06E-013.23E-024.12E-014.16E+004.10E+01 + 61M1 150.001.65E-037.25E-032.95E-021.63E-011.14E-029.97E-027.29E-015.26E+00 + 61M1 280.003.36E-041.19E-034.05E-031.49E-022.07E-031.05E-024.64E-022.04E-01 + 61M1 500.008.55E-052.48E-046.84E-041.91E-034.57E-041.59E-034.76E-031.40E-02 + 61M2 2.471.84E+016.15E+061.53E+104.68E+122.12E+022.86E+056.43E+074.97E+09 + 61M2 3.471.04E+011.12E+061.69E+094.38E+117.63E+016.15E+041.18E+071.16E+09 + 61M2 5.474.08E+001.15E+059.21E+071.81E+101.93E+018.25E+031.20E+061.15E+08 + 61M2 9.471.09E+007.46E+032.98E+063.99E+083.68E+007.86E+027.80E+045.92E+06 + 61M2 16.472.48E-014.80E+021.01E+058.80E+066.94E-017.85E+015.11E+032.74E+05 + 61M2 26.006.59E-025.08E+016.46E+033.91E+051.75E-011.22E+015.52E+022.13E+04 + 61M2 41.001.64E-025.55E+004.37E+021.80E+044.46E-021.97E+006.12E+011.66E+03 + 61M2 53.007.29E-031.61E+009.75E+013.24E+032.07E-027.13E-011.79E+013.95E+02 + 61M2 71.002.85E-034.01E-011.80E+014.66E+028.65E-032.26E-014.44E+007.75E+01 + 61M2 104.008.21E-046.69E-022.06E+003.85E+012.78E-035.14E-027.36E-019.42E+00 + 61M2 150.002.48E-041.24E-022.71E-013.72E+009.41E-041.27E-021.35E-011.29E+00 + 61M2 280.003.33E-057.92E-049.84E-038.19E-021.51E-041.24E-038.20E-034.86E-02 + 61M2 500.005.61E-067.28E-055.67E-043.10E-032.85E-051.58E-047.01E-042.81E-03 + 61M3 2.364.33E+011.26E+073.34E+101.04E+135.09E+011.18E+072.63E+115.95E+14 + 61M3 3.362.23E+012.13E+063.30E+098.56E+111.74E+012.02E+062.28E+102.92E+13 + 61M3 5.367.95E+002.02E+051.62E+083.14E+104.20E+001.95E+059.10E+085.81E+11 + 61M3 9.361.95E+001.22E+044.76E+066.20E+087.69E-011.21E+042.02E+076.05E+09 + 61M3 16.364.08E-017.30E+021.48E+051.25E+071.40E-017.44E+024.74E+057.12E+07 + 61M3 26.001.01E-017.11E+018.54E+034.95E+053.43E-027.40E+012.23E+041.98E+06 + 61M3 41.002.38E-027.26E+005.32E+022.10E+048.61E-037.71E+001.18E+036.46E+04 + 61M3 53.001.03E-022.02E+001.12E+023.55E+033.96E-032.16E+002.31E+029.80E+03 + 61M3 71.003.88E-034.71E-011.92E+014.70E+021.64E-035.12E-013.73E+011.19E+03 + 61M3 104.001.07E-037.13E-021.95E+003.40E+015.22E-047.89E-023.64E+008.15E+01 + 61M3 150.003.09E-041.19E-022.21E-012.80E+001.75E-041.34E-024.13E-016.71E+00 + 61M3 280.003.90E-056.04E-045.88E-034.34E-022.82E-056.95E-041.17E-021.16E-01 + 61M3 500.006.46E-064.51E-052.44E-041.12E-035.50E-065.05E-055.08E-043.38E-03 + 61M4 2.051.05E+023.84E+052.82E+104.45E+141.48E+013.51E+054.12E+094.32E+12 + 61M4 3.052.98E+015.04E+041.73E+091.39E+134.06E+004.78E+042.84E+082.18E+11 + 61M4 5.055.39E+003.85E+034.96E+071.78E+117.65E-013.79E+039.92E+064.99E+09 + 61M4 9.056.47E-011.96E+028.10E+051.22E+091.06E-012.00E+022.18E+056.52E+07 + 61M4 16.057.07E-021.03E+011.42E+049.84E+061.45E-021.10E+015.45E+039.64E+05 + 61M4 26.001.00E-028.37E-014.75E+021.78E+052.59E-039.60E-012.56E+022.88E+04 + 61M4 41.001.49E-037.68E-021.95E+014.22E+034.92E-049.59E-021.47E+011.08E+03 + 61M4 53.005.00E-041.99E-023.27E+005.22E+021.90E-042.62E-022.99E+001.73E+02 + 61M4 71.001.42E-044.25E-034.32E-014.93E+016.39E-056.00E-034.92E-012.17E+01 + 61M4 104.002.72E-055.72E-043.17E-022.35E+001.51E-058.81E-044.79E-021.49E+00 + 61M4 150.005.60E-068.52E-052.71E-031.34E-013.74E-061.41E-045.26E-031.18E-01 + 61M4 280.004.02E-073.63E-064.79E-051.19E-033.43E-076.45E-061.32E-041.76E-03 + 61M4 500.003.64E-082.27E-071.47E-061.90E-053.78E-083.91E-074.81E-064.17E-05 + 61M5 2.031.57E+024.94E+054.77E+106.97E+149.01E+003.59E+042.06E+101.35E+15 + 61M5 3.034.36E+016.30E+042.84E+092.08E+132.45E+004.86E+031.25E+093.77E+13 + 61M5 5.037.68E+004.68E+037.95E+072.56E+114.63E-013.87E+023.59E+074.12E+11 + 61M5 9.038.99E-012.33E+021.27E+061.70E+096.54E-022.10E+016.00E+052.34E+09 + 61M5 16.039.59E-021.19E+012.17E+041.31E+079.16E-031.22E+001.09E+041.56E+07 + 61M5 26.001.33E-029.40E-017.01E+022.27E+051.68E-031.12E-013.73E+022.42E+05 + 61M5 41.001.95E-038.35E-022.78E+015.12E+033.31E-041.20E-021.57E+015.11E+03 + 61M5 53.006.46E-042.11E-024.53E+006.12E+021.31E-043.44E-032.64E+005.99E+02 + 61M5 71.001.82E-044.38E-035.77E-015.50E+014.51E-058.35E-043.50E-015.37E+01 + 61M5 104.003.46E-055.62E-043.97E-022.42E+001.11E-051.34E-042.53E-022.42E+00 + 61M5 150.007.13E-067.97E-053.11E-031.24E-012.90E-062.39E-052.09E-031.31E-01 + 61M5 280.005.34E-073.18E-064.54E-058.62E-043.04E-071.39E-063.27E-051.04E-03 + 61M5 500.005.38E-081.99E-071.15E-061.03E-054.16E-081.19E-078.73E-071.39E-05 + 61N+ 50.001.34E-021.34E+008.48E+013.31E+038.57E-023.57E+001.57E+025.96E+03 + 61N+ 70.005.16E-032.65E-011.13E+013.13E+023.16E-028.15E-012.19E+015.54E+02 + 61N+ 100.001.93E-035.19E-021.43E+002.81E+011.14E-021.85E-013.10E+005.15E+01 + 61N+ 150.006.19E-048.65E-031.44E-011.90E+003.59E-033.63E-023.71E-013.92E+00 + 61N+ 200.002.78E-042.59E-032.99E-022.98E-011.59E-031.20E-028.93E-026.95E-01 + 61N+ 500.002.65E-059.94E-054.07E-041.68E-031.34E-044.98E-041.69E-035.81E-03 + 62K 47.831.63E+003.68E+001.58E+002.39E-011.24E+011.97E+025.39E+023.27E+02 + 62K 48.531.58E+003.80E+002.26E+006.61E-011.19E+011.87E+025.46E+024.57E+02 + 62K 49.831.46E+003.93E+003.50E+001.97E+001.09E+011.68E+025.46E+026.82E+02 + 62K 53.031.25E+004.06E+006.13E+007.38E+009.17E+001.34E+025.21E+021.09E+03 + 62K 56.831.05E+003.94E+008.29E+001.51E+017.49E+001.03E+024.62E+021.34E+03 + 62K 61.008.71E-013.64E+009.50E+002.24E+016.09E+007.94E+013.91E+021.40E+03 + 62K 67.006.81E-013.13E+009.82E+002.87E+014.63E+005.61E+012.99E+021.27E+03 + 62K 75.005.06E-012.49E+008.92E+003.04E+013.34E+003.69E+012.08E+029.95E+02 + 62K 87.003.40E-011.74E+006.87E+002.61E+012.17E+002.13E+011.23E+026.35E+02 + 62K 100.002.34E-011.20E+004.93E+001.96E+011.46E+001.28E+017.30E+013.84E+02 + 62K 117.001.53E-017.70E-013.18E+001.28E+019.31E-017.26E+003.98E+012.06E+02 + 62K 130.001.15E-015.64E-012.30E+009.17E+006.90E-014.97E+002.63E+011.33E+02 + 62K 147.008.24E-023.89E-011.55E+006.06E+004.89E-013.21E+001.61E+017.84E+01 + 62K 170.005.57E-022.49E-019.59E-013.61E+003.26E-011.93E+009.07E+004.15E+01 + 62K 195.003.86E-021.63E-016.02E-012.17E+002.23E-011.20E+005.27E+002.27E+01 + 62K 260.001.81E-026.76E-022.25E-017.34E-011.02E-014.56E-011.72E+006.38E+00 + 62K 345.008.88E-032.92E-028.73E-022.56E-014.84E-021.83E-015.92E-011.88E+00 + 62K 440.004.96E-031.48E-024.04E-021.08E-012.58E-028.61E-022.46E-016.86E-01 + 62K 550.002.99E-038.27E-032.08E-025.09E-021.47E-024.43E-021.13E-012.83E-01 + 62K 780.001.43E-033.61E-038.10E-031.74E-026.21E-031.65E-023.63E-027.72E-02 + 62K 1050.008.09E-041.91E-033.93E-037.65E-033.05E-037.43E-031.48E-022.79E-02 + 62K 1300.005.51E-041.24E-032.43E-034.44E-031.86E-034.29E-038.02E-031.41E-02 + 62K 1550.004.07E-048.85E-041.66E-032.90E-031.24E-032.78E-034.96E-038.31E-03 + 62L1 8.745.17E+001.24E+037.54E+047.19E+052.51E+021.13E+059.02E+061.65E+08 + 62L1 9.444.54E+008.19E+026.39E+041.07E+061.99E+027.86E+045.89E+061.31E+08 + 62L1 10.743.63E+004.00E+024.17E+041.13E+061.36E+024.26E+042.89E+067.75E+07 + 62L1 13.942.24E+008.43E+011.31E+045.47E+056.22E+011.25E+046.88E+052.09E+07 + 62L1 17.741.39E+001.70E+013.70E+031.81E+053.03E+014.10E+031.84E+055.47E+06 + 62L1 21.009.76E-015.03E+001.41E+037.34E+041.84E+011.90E+037.34E+042.06E+06 + 62L1 27.005.66E-011.04E+003.02E+021.67E+048.70E+006.11E+021.90E+044.70E+05 + 62L1 35.003.15E-016.21E-015.50E+013.18E+034.04E+001.94E+024.78E+031.01E+05 + 62L1 47.001.57E-014.90E-017.94E+004.35E+021.69E+005.40E+011.03E+031.76E+04 + 62L1 60.008.64E-023.39E-012.16E+008.19E+018.27E-011.93E+012.95E+024.20E+03 + 62L1 77.004.63E-022.03E-019.08E-011.65E+014.00E-016.88E+008.45E+019.91E+02 + 62L1 90.003.12E-021.41E-015.92E-016.81E+002.55E-013.66E+003.93E+014.07E+02 + 62L1 107.002.00E-029.04E-023.71E-012.91E+001.55E-011.84E+001.71E+011.54E+02 + 62L1 130.001.21E-025.34E-022.15E-011.27E+008.92E-028.66E-016.80E+005.25E+01 + 62L1 155.007.66E-033.26E-021.27E-016.42E-015.44E-024.45E-013.02E+002.03E+01 + 62L1 220.003.11E-031.19E-024.28E-021.74E-012.07E-021.24E-016.39E-013.27E+00 + 62L1 305.001.37E-034.68E-031.52E-025.26E-028.57E-034.00E-021.62E-016.53E-01 + 62L1 400.007.17E-042.22E-036.58E-032.01E-024.21E-031.64E-025.55E-021.85E-01 + 62L1 510.004.13E-041.19E-033.22E-038.81E-032.26E-037.66E-032.24E-026.41E-02 + 62L1 740.001.89E-044.91E-041.17E-032.73E-038.93E-042.55E-036.15E-031.43E-02 + 62L11000.001.05E-042.56E-045.57E-041.16E-034.32E-041.11E-032.35E-034.76E-03 + 62L11500.005.15E-051.15E-042.23E-044.06E-041.68E-043.87E-047.20E-041.26E-03 + 62L2 8.311.07E+017.25E+042.28E+078.69E+082.79E+014.70E+031.32E+051.15E+06 + 62L2 9.018.57E+004.84E+041.42E+076.54E+082.18E+013.43E+031.17E+051.73E+06 + 62L2 10.315.86E+002.47E+046.44E+063.55E+081.45E+012.03E+038.25E+041.91E+06 + 62L2 13.512.69E+006.41E+031.32E+068.12E+076.35E+007.05E+023.21E+041.04E+06 + 62L2 17.311.29E+001.87E+033.07E+051.84E+072.99E+002.66E+021.18E+044.05E+05 + 62L2 21.007.15E-017.19E+029.88E+045.50E+061.66E+001.24E+025.15E+031.72E+05 + 62L2 27.003.28E-012.09E+022.26E+041.11E+067.76E-014.63E+011.69E+035.14E+04 + 62L2 35.001.44E-015.87E+014.97E+032.06E+053.54E-011.67E+015.19E+021.38E+04 + 62L2 47.005.57E-021.40E+018.96E+023.01E+041.46E-015.26E+001.33E+022.94E+03 + 62L2 60.002.51E-024.35E+002.19E+026.12E+037.00E-022.03E+004.29E+017.97E+02 + 62L2 77.001.10E-021.33E+005.27E+011.21E+033.32E-027.72E-011.35E+012.08E+02 + 62L2 90.006.57E-036.37E-012.18E+014.41E+022.08E-024.23E-016.53E+008.97E+01 + 62L2 107.003.70E-032.84E-018.25E+001.45E+021.24E-022.18E-012.93E+003.53E+01 + 62L2 130.001.94E-031.15E-012.80E+004.20E+016.99E-031.04E-011.20E+001.24E+01 + 62L2 155.001.09E-035.18E-021.07E+001.39E+014.16E-035.33E-025.38E-014.87E+00 + 62L2 220.003.47E-041.08E-021.64E-011.61E+001.49E-031.44E-021.11E-017.76E-01 + 62L2 305.001.22E-042.65E-033.02E-022.32E-015.75E-044.37E-032.66E-021.46E-01 + 62L2 400.005.28E-058.57E-047.86E-034.97E-022.63E-041.66E-038.40E-033.84E-02 + 62L2 510.002.54E-053.24E-042.47E-031.32E-021.31E-047.11E-043.08E-031.20E-02 + 62L2 740.008.71E-067.88E-054.61E-041.95E-034.56E-052.01E-047.05E-042.22E-03 + 62L21000.003.84E-062.70E-051.30E-044.65E-041.96E-057.52E-052.27E-046.14E-04 + 62L21500.001.35E-067.08E-062.71E-057.95E-056.36E-062.10E-055.35E-051.22E-04 + 62L3 7.722.27E+011.59E+055.65E+072.42E+096.95E+001.49E+053.22E+087.21E+10 + 62L3 8.421.77E+011.02E+053.36E+071.71E+095.32E+009.64E+041.79E+083.70E+10 + 62L3 9.721.16E+014.95E+041.41E+078.46E+083.42E+004.71E+046.75E+071.23E+10 + 62L3 12.924.96E+001.17E+042.55E+061.66E+081.42E+001.14E+049.94E+061.40E+09 + 62L3 16.722.24E+003.18E+035.37E+053.32E+076.45E-013.15E+031.78E+061.98E+08 + 62L3 21.001.09E+001.00E+031.35E+057.58E+063.20E-011.01E+033.96E+053.55E+07 + 62L3 27.004.86E-012.83E+022.97E+041.44E+061.48E-012.89E+027.66E+045.46E+06 + 62L3 35.002.07E-017.66E+016.20E+032.52E+056.71E-027.97E+011.44E+048.05E+05 + 62L3 47.007.73E-021.74E+011.05E+033.42E+042.73E-021.85E+012.20E+039.45E+04 + 62L3 60.003.38E-025.14E+002.41E+026.48E+031.30E-025.53E+004.78E+021.64E+04 + 62L3 77.001.44E-021.48E+005.38E+011.18E+036.10E-031.62E+001.03E+022.82E+03 + 62L3 90.008.43E-036.84E-012.11E+014.07E+023.81E-037.54E-013.96E+019.52E+02 + 62L3 107.004.65E-032.91E-017.52E+001.25E+022.26E-033.24E-011.40E+012.89E+02 + 62L3 130.002.38E-031.12E-012.36E+003.32E+011.26E-031.26E-014.39E+007.71E+01 + 62L3 155.001.31E-034.72E-028.36E-011.01E+017.46E-045.38E-021.56E+002.38E+01 + 62L3 220.004.02E-048.75E-031.08E-019.66E-012.65E-041.01E-022.09E-012.41E+00 + 62L3 305.001.38E-041.89E-031.67E-021.13E-011.02E-042.20E-033.37E-023.06E-01 + 62L3 400.005.88E-055.53E-043.71E-032.02E-024.73E-056.37E-047.71E-035.83E-02 + 62L3 510.002.83E-051.92E-041.01E-034.56E-032.41E-052.17E-042.13E-031.38E-02 + 62L3 740.009.84E-064.22E-051.56E-045.36E-048.96E-064.51E-053.16E-041.65E-03 + 62L31000.004.46E-061.38E-053.94E-051.10E-044.23E-061.40E-057.22E-053.19E-04 + 62L31500.001.72E-063.66E-067.65E-061.66E-051.68E-063.48E-061.12E-053.90E-05 + 62M1 2.727.47E+002.77E+041.53E+064.88E+081.74E+038.03E+066.40E+091.16E+12 + 62M1 3.725.10E+007.61E+036.30E+054.69E+076.84E+021.73E+068.44E+081.32E+11 + 62M1 5.722.62E+001.14E+031.60E+056.10E+061.89E+022.12E+055.52E+076.52E+09 + 62M1 9.721.00E+008.47E+011.68E+041.00E+063.87E+011.65E+042.11E+061.66E+08 + 62M1 16.723.36E-013.83E+001.05E+036.83E+047.67E+001.28E+038.47E+044.21E+06 + 62M1 26.001.28E-013.44E-018.24E+015.19E+032.06E+001.69E+026.80E+032.29E+05 + 62M1 41.004.47E-021.39E-014.95E+002.85E+025.37E-012.24E+015.55E+021.25E+04 + 62M1 53.002.41E-029.24E-021.13E+005.22E+012.52E-017.38E+001.42E+022.52E+03 + 62M1 71.001.17E-025.11E-023.07E-017.84E+001.07E-012.16E+003.11E+014.28E+02 + 62M1 104.004.42E-032.01E-029.05E-029.04E-013.57E-024.58E-014.62E+004.55E+01 + 62M1 150.001.72E-037.37E-033.01E-021.74E-011.26E-021.10E-018.07E-015.81E+00 + 62M1 280.003.53E-041.24E-034.20E-031.57E-022.28E-031.16E-025.11E-022.25E-01 + 62M1 500.009.02E-052.61E-047.22E-042.03E-035.02E-041.74E-035.23E-031.54E-02 + 62M2 2.541.75E+015.89E+061.43E+104.24E+122.17E+022.83E+056.17E+074.49E+09 + 62M2 3.541.00E+011.12E+061.66E+094.19E+118.00E+016.32E+041.18E+071.11E+09 + 62M2 5.544.04E+001.19E+059.45E+071.83E+102.07E+018.74E+031.24E+061.16E+08 + 62M2 9.541.11E+007.94E+033.15E+064.16E+084.02E+008.50E+028.28E+046.16E+06 + 62M2 16.542.56E-015.19E+021.09E+059.38E+067.65E-018.58E+015.51E+032.91E+05 + 62M2 26.006.96E-025.61E+017.14E+034.29E+051.96E-011.36E+016.08E+022.32E+04 + 62M2 41.001.74E-026.13E+004.83E+021.98E+045.00E-022.19E+006.75E+011.82E+03 + 62M2 53.007.80E-031.79E+001.08E+023.56E+032.32E-027.93E-011.97E+014.33E+02 + 62M2 71.003.06E-034.44E-012.00E+015.14E+029.70E-032.52E-014.92E+008.52E+01 + 62M2 104.008.88E-047.42E-022.29E+004.26E+013.12E-035.74E-028.16E-011.04E+01 + 62M2 150.002.69E-041.38E-023.01E-014.12E+001.06E-031.42E-021.50E-011.43E+00 + 62M2 280.003.64E-058.83E-041.10E-029.13E-021.71E-041.40E-039.16E-035.41E-02 + 62M2 500.006.21E-068.15E-056.36E-043.47E-033.23E-051.78E-047.88E-043.14E-03 + 62M3 2.424.13E+011.21E+073.12E+109.43E+125.10E+011.18E+072.56E+115.68E+14 + 62M3 3.422.16E+012.12E+063.24E+098.19E+111.79E+012.09E+062.34E+102.97E+13 + 62M3 5.427.89E+002.09E+051.66E+083.15E+104.40E+002.09E+059.80E+086.24E+11 + 62M3 9.421.98E+001.29E+045.02E+066.43E+088.18E-011.33E+042.25E+076.74E+09 + 62M3 16.424.21E-017.85E+021.58E+051.32E+071.50E-018.30E+025.36E+058.06E+07 + 62M3 26.001.06E-017.79E+019.36E+035.37E+053.72E-028.42E+012.58E+042.30E+06 + 62M3 41.002.52E-027.96E+005.82E+022.28E+049.36E-038.77E+001.35E+037.46E+04 + 62M3 53.001.09E-022.21E+001.23E+023.85E+034.31E-032.46E+002.66E+021.13E+04 + 62M3 71.004.13E-035.16E-012.10E+015.12E+021.79E-035.81E-014.28E+011.37E+03 + 62M3 104.001.14E-037.82E-022.13E+003.71E+015.68E-048.95E-024.16E+009.32E+01 + 62M3 150.003.32E-041.30E-022.42E-013.05E+001.91E-041.52E-024.71E-017.65E+00 + 62M3 280.004.20E-056.63E-046.46E-034.75E-023.06E-057.84E-041.33E-021.31E-01 + 62M3 500.006.99E-064.95E-052.68E-041.23E-035.98E-065.66E-055.75E-043.82E-03 + 62M4 2.111.02E+023.71E+052.67E+104.14E+141.50E+013.54E+054.06E+094.14E+12 + 62M4 3.112.98E+015.08E+041.74E+091.39E+134.23E+005.04E+042.96E+082.23E+11 + 62M4 5.115.55E+004.02E+035.24E+071.89E+118.16E-014.13E+031.08E+075.36E+09 + 62M4 9.116.84E-012.10E+028.85E+051.35E+091.15E-012.23E+022.44E+057.24E+07 + 62M4 16.117.61E-021.12E+011.58E+041.11E+071.59E-021.25E+016.20E+031.09E+06 + 62M4 26.001.10E-029.33E-015.42E+022.06E+052.89E-031.11E+002.97E+023.33E+04 + 62M4 41.001.65E-038.60E-022.23E+014.87E+035.53E-041.11E-011.71E+011.25E+03 + 62M4 53.005.55E-042.23E-023.73E+006.02E+022.14E-043.03E-023.46E+002.00E+02 + 62M4 71.001.58E-044.79E-034.93E-015.69E+017.20E-056.93E-035.71E-012.51E+01 + 62M4 104.003.07E-056.47E-043.62E-022.72E+001.71E-051.02E-035.56E-021.73E+00 + 62M4 150.006.35E-069.66E-053.10E-031.55E-014.24E-061.63E-046.11E-031.37E-01 + 62M4 280.004.42E-074.14E-065.48E-051.37E-033.90E-077.48E-061.53E-042.05E-03 + 62M4 500.004.59E-082.59E-071.69E-062.20E-054.31E-084.53E-075.61E-064.86E-05 + 62M5 2.081.52E+024.73E+054.54E+106.48E+149.08E+003.56E+042.03E+101.31E+15 + 62M5 3.084.35E+016.30E+042.87E+092.09E+132.54E+005.02E+031.31E+093.92E+13 + 62M5 5.087.91E+004.85E+038.42E+072.72E+114.92E-014.14E+023.95E+074.56E+11 + 62M5 9.089.48E-012.47E+021.39E+061.87E+097.07E-022.30E+016.81E+052.69E+09 + 62M5 16.081.03E-011.29E+012.42E+041.47E+071.00E-021.35E+001.26E+041.83E+07 + 62M5 26.001.46E-021.04E+008.02E+022.61E+051.87E-031.26E-014.41E+022.91E+05 + 62M5 41.002.15E-039.25E-023.18E+015.89E+033.69E-041.35E-021.85E+016.13E+03 + 62M5 53.007.14E-042.34E-025.18E+007.04E+021.46E-043.87E-033.12E+007.17E+02 + 62M5 71.002.02E-044.87E-036.60E-016.33E+015.04E-059.41E-044.12E-016.40E+01 + 62M5 104.003.90E-056.28E-044.54E-022.78E+001.25E-051.51E-042.98E-022.88E+00 + 62M5 150.008.06E-068.92E-053.57E-031.43E-013.26E-062.69E-052.45E-031.55E-01 + 62M5 280.005.77E-073.56E-065.19E-059.91E-043.42E-071.57E-063.82E-051.22E-03 + 62M5 500.006.86E-082.25E-071.32E-061.19E-054.68E-081.34E-071.01E-061.64E-05 + 62N+ 50.001.41E-021.48E+009.40E+013.67E+039.53E-024.02E+001.79E+026.87E+03 + 62N+ 70.005.42E-032.92E-011.25E+013.48E+023.51E-029.16E-012.50E+016.35E+02 + 62N+ 100.002.03E-035.68E-021.59E+003.11E+011.27E-022.08E-013.50E+005.86E+01 + 62N+ 150.006.53E-049.42E-031.59E-012.11E+003.98E-034.05E-024.17E-014.42E+00 + 62N+ 200.002.93E-042.81E-033.30E-023.31E-011.76E-031.33E-029.98E-027.80E-01 + 62N+ 500.002.84E-051.07E-044.43E-041.85E-031.50E-045.56E-041.88E-036.49E-03 + 63K 49.521.52E+003.29E+001.35E+001.89E-011.22E+011.86E+024.90E+022.84E+02 + 63K 50.221.47E+003.40E+001.92E+005.19E-011.18E+011.77E+024.98E+023.96E+02 + 63K 51.521.37E+003.51E+002.95E+001.55E+001.08E+011.60E+024.97E+025.87E+02 + 63K 54.721.18E+003.63E+005.16E+005.81E+009.13E+001.28E+024.77E+029.44E+02 + 63K 58.529.91E-013.54E+007.02E+001.20E+017.50E+009.99E+014.26E+021.17E+03 + 63K 63.008.18E-013.27E+008.17E+001.85E+016.05E+007.59E+013.59E+021.23E+03 + 63K 69.006.45E-012.83E+008.49E+002.38E+014.64E+005.42E+012.78E+021.13E+03 + 63K 77.004.83E-012.27E+007.80E+002.55E+013.38E+003.61E+011.96E+028.98E+02 + 63K 89.003.28E-011.61E+006.11E+002.23E+012.22E+002.12E+011.18E+025.86E+02 + 63K 102.002.28E-011.13E+004.46E+001.71E+011.50E+001.29E+017.10E+013.61E+02 + 63K 119.001.50E-017.32E-012.92E+001.14E+019.67E-017.38E+003.93E+011.98E+02 + 63K 132.001.14E-015.41E-012.14E+008.31E+007.21E-015.09E+002.62E+011.29E+02 + 63K 149.008.20E-023.76E-011.46E+005.58E+005.13E-013.31E+001.62E+017.70E+01 + 63K 172.005.58E-022.43E-019.15E-013.38E+003.44E-012.00E+009.21E+004.13E+01 + 63K 200.003.73E-021.53E-015.52E-011.95E+002.27E-011.19E+005.09E+002.13E+01 + 63K 265.001.79E-026.53E-022.13E-016.86E-011.06E-014.63E-011.71E+006.21E+00 + 63K 350.008.92E-032.89E-028.52E-022.47E-015.06E-021.89E-016.02E-011.88E+00 + 63K 440.005.17E-031.53E-024.16E-021.11E-012.80E-029.30E-022.64E-017.32E-01 + 63K 550.003.12E-038.61E-032.16E-025.27E-021.59E-024.78E-021.22E-013.02E-01 + 63K 780.001.50E-033.78E-038.48E-031.82E-026.70E-031.77E-023.90E-028.27E-02 + 63K 1050.008.48E-042.00E-034.14E-038.05E-033.29E-038.00E-031.59E-022.99E-02 + 63K 1300.005.78E-041.31E-032.56E-034.68E-031.99E-034.62E-038.62E-031.52E-02 + 63K 1550.004.27E-049.33E-041.75E-033.06E-031.33E-032.98E-035.33E-038.91E-03 + 63L1 9.054.82E+001.14E+036.60E+045.81E+052.49E+021.07E+058.20E+061.44E+08 + 63L1 9.754.26E+007.67E+025.65E+048.76E+051.99E+027.54E+045.44E+061.15E+08 + 63L1 11.053.43E+003.84E+023.77E+049.59E+051.37E+024.17E+042.73E+066.98E+07 + 63L1 14.252.14E+008.59E+011.24E+044.90E+056.41E+011.26E+046.74E+051.97E+07 + 63L1 18.051.34E+001.84E+013.65E+031.70E+053.17E+014.23E+031.85E+055.32E+06 + 63L1 22.008.92E-014.57E+001.19E+035.95E+041.76E+011.71E+036.31E+041.70E+06 + 63L1 28.005.29E-011.03E+002.74E+021.44E+048.61E+005.78E+021.73E+044.13E+05 + 63L1 36.003.00E-015.81E-015.38E+012.94E+034.09E+001.90E+024.55E+039.32E+04 + 63L1 48.001.52E-014.50E-018.33E+004.31E+021.75E+005.48E+011.02E+031.70E+04 + 63L1 61.008.50E-023.16E-012.27E+008.53E+018.68E-011.99E+012.99E+024.17E+03 + 63L1 78.004.61E-021.93E-019.08E-011.76E+014.24E-017.21E+008.73E+011.01E+03 + 63L1 91.003.12E-021.35E-015.81E-017.27E+002.72E-013.87E+004.10E+014.18E+02 + 63L1 108.002.01E-028.79E-023.63E-013.07E+001.66E-011.96E+001.79E+011.60E+02 + 63L1 131.001.22E-025.25E-022.11E-011.32E+009.60E-029.26E-017.20E+005.50E+01 + 63L1 160.007.30E-033.01E-021.17E-015.97E-015.47E-024.34E-012.87E+001.87E+01 + 63L1 225.003.05E-031.14E-024.07E-021.66E-012.13E-021.25E-016.34E-013.18E+00 + 63L1 310.001.38E-034.62E-031.49E-025.17E-029.00E-034.14E-021.66E-016.58E-01 + 63L1 400.007.51E-042.32E-036.85E-032.11E-024.60E-031.79E-026.06E-022.02E-01 + 63L1 510.004.33E-041.24E-033.38E-039.30E-032.47E-038.36E-032.44E-026.98E-02 + 63L1 740.001.99E-045.18E-041.24E-032.90E-039.73E-042.78E-036.69E-031.55E-02 + 63L11000.001.11E-042.71E-045.92E-041.23E-034.69E-041.21E-032.55E-035.17E-03 + 63L11500.005.43E-051.22E-042.38E-044.34E-041.81E-044.20E-047.81E-041.36E-03 + 63L2 8.621.00E+016.63E+041.99E+077.25E+082.77E+014.45E+031.19E+059.57E+05 + 63L2 9.328.08E+004.48E+041.26E+075.54E+082.18E+013.28E+031.06E+051.46E+06 + 63L2 10.625.60E+002.33E+045.88E+063.08E+081.46E+011.97E+037.63E+041.66E+06 + 63L2 13.822.63E+006.27E+031.26E+067.42E+076.58E+007.05E+023.08E+049.47E+05 + 63L2 17.621.28E+001.88E+033.02E+051.74E+073.14E+002.72E+021.16E+043.83E+05 + 63L2 22.006.51E-016.26E+028.19E+044.36E+061.60E+001.14E+024.49E+031.44E+05 + 63L2 28.003.08E-011.91E+022.00E+049.38E+057.72E-014.40E+011.54E+034.52E+04 + 63L2 36.001.39E-015.61E+014.60E+031.85E+053.61E-011.64E+014.93E+021.27E+04 + 63L2 48.005.53E-021.39E+018.68E+022.84E+041.52E-015.33E+001.31E+022.82E+03 + 63L2 61.002.53E-024.41E+002.19E+025.97E+037.41E-022.10E+004.33E+017.87E+02 + 63L2 78.001.13E-021.37E+005.38E+011.21E+033.55E-028.10E-011.39E+012.10E+02 + 63L2 91.006.79E-036.65E-012.25E+014.48E+022.25E-024.47E-016.79E+009.18E+01 + 63L2 108.003.86E-032.99E-018.61E+001.49E+021.35E-022.32E-013.08E+003.66E+01 + 63L2 131.002.04E-031.23E-012.95E+004.39E+017.63E-031.11E-011.27E+001.30E+01 + 63L2 160.001.06E-034.94E-029.90E-011.25E+014.23E-035.24E-025.13E-014.51E+00 + 63L2 225.003.49E-041.08E-021.61E-011.55E+001.56E-031.48E-021.11E-017.59E-01 + 63L2 310.001.26E-042.73E-033.09E-022.34E-016.15E-044.60E-032.75E-021.49E-01 + 63L2 400.005.75E-059.50E-048.73E-035.50E-022.95E-041.85E-039.34E-034.25E-02 + 63L2 510.002.78E-053.60E-042.74E-031.46E-021.47E-047.95E-043.43E-031.34E-02 + 63L2 740.009.61E-068.77E-055.14E-042.17E-035.14E-052.26E-047.87E-042.48E-03 + 63L21000.004.20E-063.01E-051.45E-045.19E-042.21E-058.46E-052.54E-046.86E-04 + 63L21500.001.50E-067.89E-063.03E-058.90E-057.17E-062.37E-056.01E-051.37E-04 + 63L3 7.982.13E+011.46E+054.99E+072.04E+096.75E+001.42E+052.95E+086.39E+10 + 63L3 8.681.67E+019.53E+043.01E+071.47E+095.22E+009.33E+041.67E+083.35E+10 + 63L3 9.981.11E+014.70E+041.30E+077.44E+083.39E+004.64E+046.49E+071.15E+10 + 63L3 13.184.85E+001.15E+042.44E+061.53E+081.44E+001.16E+049.99E+061.37E+09 + 63L3 16.982.22E+003.19E+035.28E+053.16E+076.62E-013.28E+031.85E+062.01E+08 + 63L3 22.009.82E-018.62E+021.11E+055.92E+062.99E-019.02E+023.34E+052.86E+07 + 63L3 28.004.52E-012.56E+022.58E+041.20E+061.43E-012.72E+026.92E+044.74E+06 + 63L3 36.001.98E-017.22E+015.65E+032.23E+056.63E-027.80E+011.37E+047.45E+05 + 63L3 48.007.59E-021.70E+019.98E+023.18E+042.76E-021.88E+012.20E+039.20E+04 + 63L3 61.003.38E-025.14E+002.36E+026.22E+031.33E-025.73E+004.89E+021.65E+04 + 63L3 78.001.46E-021.51E+005.40E+011.16E+036.33E-031.71E+001.07E+022.92E+03 + 63L3 91.008.60E-037.04E-012.14E+014.06E+023.97E-038.02E-014.19E+019.96E+02 + 63L3 108.004.78E-033.02E-017.72E+001.26E+022.37E-033.47E-011.49E+013.06E+02 + 63L3 131.002.47E-031.17E-012.45E+003.40E+011.33E-031.36E-014.73E+008.25E+01 + 63L3 160.001.25E-034.40E-027.52E-018.80E+007.32E-045.18E-021.46E+002.17E+01 + 63L3 225.003.98E-048.55E-031.03E-019.01E-012.67E-041.02E-022.07E-012.35E+00 + 63L3 310.001.40E-041.91E-031.66E-021.11E-011.05E-042.27E-033.46E-023.11E-01 + 63L3 400.006.29E-056.01E-044.04E-032.19E-025.10E-057.09E-048.64E-036.54E-02 + 63L3 510.003.02E-052.09E-041.10E-034.95E-032.60E-052.41E-042.38E-031.54E-02 + 63L3 740.001.05E-054.57E-051.70E-045.83E-049.64E-064.98E-053.52E-041.84E-03 + 63L31000.004.80E-061.50E-054.28E-051.20E-044.55E-061.53E-058.03E-053.55E-04 + 63L31500.001.85E-063.94E-068.29E-061.80E-051.80E-063.80E-061.24E-054.34E-05 + 63M1 2.807.09E+002.68E+041.51E+064.27E+081.78E+037.94E+066.17E+091.08E+12 + 63M1 3.804.90E+007.60E+036.16E+054.60E+077.13E+021.77E+068.54E+081.30E+11 + 63M1 5.802.56E+001.19E+031.59E+055.94E+062.01E+022.25E+055.82E+076.75E+09 + 63M1 9.809.95E-019.29E+011.74E+049.95E+054.19E+011.80E+042.30E+061.78E+08 + 63M1 16.803.37E-014.53E+001.14E+037.12E+048.38E+001.42E+039.33E+044.59E+06 + 63M1 26.001.31E-013.94E-019.48E+015.73E+032.29E+001.90E+027.65E+032.57E+05 + 63M1 41.004.58E-021.35E-015.91E+003.25E+025.95E-012.50E+016.22E+021.39E+04 + 63M1 53.002.48E-028.96E-021.32E+006.06E+012.80E-018.25E+001.58E+022.81E+03 + 63M1 71.001.20E-025.03E-023.36E-019.17E+001.19E-012.40E+003.46E+014.75E+02 + 63M1 104.004.58E-032.01E-029.32E-021.02E+003.95E-025.09E-015.13E+005.03E+01 + 63M1 150.001.79E-037.49E-033.07E-021.88E-011.40E-021.22E-018.92E-016.42E+00 + 63M1 280.003.70E-041.28E-034.36E-031.66E-022.52E-031.28E-025.63E-022.47E-01 + 63M1 500.009.52E-052.75E-047.62E-042.16E-035.52E-041.92E-035.74E-031.69E-02 + 63M2 2.611.66E+015.62E+061.33E+103.81E+122.22E+022.80E+055.90E+074.03E+09 + 63M2 3.619.70E+001.11E+061.62E+093.99E+118.37E+016.48E+041.17E+071.05E+09 + 63M2 5.613.99E+001.23E+059.67E+071.83E+102.22E+019.23E+031.28E+061.16E+08 + 63M2 9.611.12E+008.42E+033.33E+064.32E+084.38E+009.17E+028.78E+046.38E+06 + 63M2 16.612.64E-015.60E+021.17E+059.97E+068.42E-019.36E+015.93E+033.09E+05 + 63M2 26.007.33E-026.19E+017.89E+034.70E+052.19E-011.51E+016.69E+022.53E+04 + 63M2 41.001.85E-026.78E+005.33E+022.18E+045.59E-022.43E+007.44E+011.98E+03 + 63M2 53.008.32E-031.97E+001.19E+023.92E+032.60E-028.81E-012.18E+014.74E+02 + 63M2 71.003.28E-034.91E-012.21E+015.66E+021.09E-022.80E-015.43E+009.35E+01 + 63M2 104.009.59E-048.22E-022.54E+004.70E+013.51E-036.40E-029.04E-011.14E+01 + 63M2 150.002.92E-041.54E-023.34E-014.56E+001.19E-031.59E-021.67E-011.58E+00 + 63M2 280.003.97E-059.85E-041.23E-021.02E-011.93E-041.57E-031.02E-026.02E-02 + 63M2 500.006.84E-069.12E-057.12E-043.89E-033.66E-052.01E-048.84E-043.52E-03 + 63M3 2.483.96E+011.17E+072.94E+108.64E+125.12E+011.18E+072.52E+115.47E+14 + 63M3 3.482.11E+012.12E+063.20E+097.89E+111.83E+012.17E+062.42E+103.05E+13 + 63M3 5.487.85E+002.16E+051.71E+083.17E+104.61E+002.25E+051.06E+096.73E+11 + 63M3 9.482.01E+001.37E+045.30E+066.67E+088.70E-011.46E+042.50E+077.51E+09 + 63M3 16.484.34E-018.43E+021.69E+051.39E+071.61E-019.25E+026.06E+059.12E+07 + 63M3 26.001.11E-018.53E+011.02E+045.83E+054.04E-029.56E+012.97E+042.66E+06 + 63M3 41.002.66E-028.72E+006.37E+022.47E+041.02E-029.95E+001.56E+038.59E+04 + 63M3 53.001.15E-022.42E+001.34E+024.18E+034.68E-032.79E+003.05E+021.30E+04 + 63M3 71.004.38E-035.65E-012.30E+015.56E+021.94E-036.60E-014.91E+011.57E+03 + 63M3 104.001.22E-038.57E-022.33E+004.03E+016.17E-041.01E-014.75E+001.06E+02 + 63M3 150.003.55E-041.43E-022.65E-013.32E+002.07E-041.71E-025.36E-018.71E+00 + 63M3 280.004.55E-057.28E-047.08E-035.19E-023.33E-058.83E-041.50E-021.49E-01 + 63M3 500.007.53E-065.42E-052.94E-041.35E-036.50E-066.34E-056.49E-044.32E-03 + 63M4 2.169.85E+013.58E+052.52E+103.85E+141.51E+013.57E+054.00E+093.97E+12 + 63M4 3.162.98E+015.11E+041.74E+091.39E+134.39E+005.29E+043.08E+082.27E+11 + 63M4 5.165.71E+004.19E+035.52E+072.00E+118.68E-014.49E+031.18E+075.74E+09 + 63M4 9.167.21E-012.25E+029.64E+051.48E+091.25E-012.49E+022.73E+058.02E+07 + 63M4 16.168.17E-021.22E+011.76E+041.24E+071.75E-021.41E+017.04E+031.23E+06 + 63M4 26.001.21E-021.04E+006.17E+022.37E+053.23E-031.27E+003.44E+023.85E+04 + 63M4 41.001.82E-039.61E-022.54E+015.60E+036.19E-041.27E-011.98E+011.45E+03 + 63M4 53.006.15E-042.50E-024.25E+006.93E+022.40E-043.49E-024.01E+002.31E+02 + 63M4 71.001.76E-045.38E-035.62E-016.55E+018.10E-058.00E-036.61E-012.90E+01 + 63M4 104.003.41E-057.30E-044.13E-023.13E+001.92E-051.18E-036.44E-022.00E+00 + 63M4 150.007.06E-061.09E-043.54E-031.78E-014.79E-061.89E-047.09E-031.59E-01 + 63M4 280.005.07E-074.72E-066.27E-051.58E-034.42E-078.65E-061.78E-042.38E-03 + 63M4 500.005.17E-082.98E-071.94E-062.54E-054.89E-085.24E-076.52E-065.65E-05 + 63M5 2.131.48E+024.55E+054.35E+106.10E+149.18E+003.55E+042.03E+101.28E+15 + 63M5 3.134.35E+016.32E+042.91E+092.10E+132.64E+005.21E+031.37E+094.11E+13 + 63M5 5.138.13E+005.03E+038.93E+072.89E+115.22E-014.44E+024.34E+075.05E+11 + 63M5 9.139.99E-012.63E+021.52E+062.06E+097.63E-022.51E+017.72E+053.10E+09 + 63M5 16.131.10E-011.39E+012.70E+041.65E+071.09E-021.49E+001.45E+042.14E+07 + 63M5 26.001.59E-021.14E+009.15E+023.00E+052.07E-031.41E-015.19E+023.49E+05 + 63M5 41.002.36E-031.02E-013.63E+016.76E+034.10E-041.52E-022.18E+017.32E+03 + 63M5 53.007.87E-042.60E-025.92E+008.08E+021.63E-044.35E-033.67E+008.55E+02 + 63M5 71.002.23E-045.41E-037.54E-017.26E+015.63E-051.06E-034.85E-017.62E+01 + 63M5 104.004.28E-056.99E-045.18E-023.19E+001.39E-051.70E-043.50E-023.41E+00 + 63M5 150.008.88E-069.97E-054.07E-031.64E-013.65E-063.03E-052.87E-031.83E-01 + 63M5 280.006.63E-074.02E-065.92E-051.14E-033.84E-071.77E-064.46E-051.44E-03 + 63M5 500.007.06E-082.50E-071.49E-061.36E-055.26E-081.51E-071.16E-061.92E-05 + 63N+ 50.001.47E-021.63E+001.04E+024.06E+031.06E-014.52E+002.05E+027.90E+03 + 63N+ 70.005.68E-033.20E-011.38E+013.83E+023.91E-021.03E+002.83E+017.25E+02 + 63N+ 100.002.13E-036.21E-021.75E+003.43E+011.41E-022.32E-013.95E+006.64E+01 + 63N+ 150.006.87E-041.02E-021.75E-012.33E+004.42E-034.51E-024.67E-014.98E+00 + 63N+ 200.003.09E-043.04E-033.63E-023.65E-011.95E-031.48E-021.11E-018.75E-01 + 63N+ 500.003.00E-051.15E-044.86E-042.05E-031.64E-046.10E-042.07E-037.18E-03 + 64K 51.241.42E+002.94E+001.16E+001.52E-011.21E+011.76E+024.47E+022.49E+02 + 64K 51.941.38E+003.04E+001.63E+004.13E-011.16E+011.68E+024.54E+023.44E+02 + 64K 53.241.28E+003.13E+002.49E+001.22E+001.07E+011.52E+024.53E+025.08E+02 + 64K 56.441.11E+003.25E+004.36E+004.60E+009.10E+001.23E+024.37E+028.18E+02 + 64K 60.249.39E-013.18E+005.96E+009.64E+007.52E+009.65E+013.93E+021.02E+03 + 64K 64.008.02E-013.00E+006.89E+001.42E+016.30E+007.71E+013.44E+021.09E+03 + 64K 70.006.35E-012.63E+007.37E+001.92E+014.86E+005.53E+012.70E+021.03E+03 + 64K 78.004.78E-012.14E+006.94E+002.14E+013.55E+003.71E+011.93E+028.39E+02 + 64K 90.003.27E-011.54E+005.57E+001.95E+012.35E+002.19E+011.18E+025.60E+02 + 64K 103.002.28E-011.09E+004.13E+001.53E+011.59E+001.34E+017.17E+013.52E+02 + 64K 120.001.51E-017.12E-012.76E+001.04E+011.03E+007.73E+004.01E+011.96E+02 + 64K 133.001.15E-015.29E-012.04E+007.71E+007.69E-015.35E+002.69E+011.29E+02 + 64K 150.008.31E-023.71E-011.41E+005.25E+005.48E-013.49E+001.68E+017.77E+01 + 64K 173.005.67E-022.42E-018.90E-013.22E+003.68E-012.12E+009.58E+004.21E+01 + 64K 200.003.86E-021.56E-015.51E-011.92E+002.47E-011.29E+005.42E+002.24E+01 + 64K 265.001.86E-026.67E-022.16E-016.88E-011.15E-015.00E-011.83E+006.57E+00 + 64K 350.009.28E-032.97E-028.71E-022.51E-015.49E-022.04E-016.45E-012.00E+00 + 64K 440.005.39E-031.59E-024.29E-021.14E-013.03E-021.00E-012.82E-017.79E-01 + 64K 550.003.26E-038.95E-032.24E-025.46E-021.72E-025.16E-021.31E-013.22E-01 + 64K 780.001.57E-033.95E-038.88E-031.90E-027.23E-031.91E-024.19E-028.84E-02 + 64K 1050.008.89E-042.10E-034.35E-038.47E-033.54E-038.61E-031.70E-023.20E-02 + 64K 1300.006.05E-041.38E-032.70E-034.94E-032.14E-034.97E-039.25E-031.62E-02 + 64K 1550.004.48E-049.82E-041.85E-033.24E-031.43E-033.21E-035.72E-039.55E-03 + 64L1 9.384.51E+001.05E+035.80E+044.78E+052.46E+021.02E+057.47E+061.25E+08 + 64L1 10.084.00E+007.18E+025.02E+047.28E+051.99E+027.23E+045.03E+061.02E+08 + 64L1 11.383.24E+003.69E+023.41E+048.16E+051.38E+024.07E+042.57E+066.29E+07 + 64L1 14.582.05E+008.71E+011.18E+044.39E+056.60E+011.27E+046.59E+051.85E+07 + 64L1 18.381.30E+001.98E+013.60E+031.60E+053.31E+014.35E+031.86E+055.17E+06 + 64L1 22.008.99E-015.73E+001.32E+036.25E+041.94E+011.91E+036.98E+041.84E+06 + 64L1 28.005.35E-011.22E+003.11E+021.56E+049.47E+006.43E+021.91E+044.49E+05 + 64L1 36.003.04E-015.69E-016.31E+013.25E+034.50E+002.11E+025.02E+031.02E+05 + 64L1 48.001.55E-014.26E-019.93E+004.90E+021.93E+006.07E+011.12E+031.86E+04 + 64L1 61.008.70E-023.04E-012.58E+009.86E+019.55E-012.20E+013.29E+024.56E+03 + 64L1 78.004.73E-021.89E-019.58E-012.04E+014.67E-017.96E+009.60E+011.10E+03 + 64L1 91.003.21E-021.33E-015.96E-018.27E+002.99E-014.26E+004.50E+014.57E+02 + 64L1 108.002.07E-028.74E-023.67E-013.40E+001.83E-012.16E+001.97E+011.74E+02 + 64L1 131.001.26E-025.27E-022.12E-011.42E+001.05E-011.02E+007.90E+006.00E+01 + 64L1 160.007.57E-033.05E-021.18E-016.30E-016.01E-024.77E-013.14E+002.04E+01 + 64L1 225.003.18E-031.17E-024.16E-021.74E-012.34E-021.38E-016.94E-013.47E+00 + 64L1 310.001.44E-034.77E-031.54E-025.41E-029.86E-034.54E-021.81E-017.17E-01 + 64L1 400.007.86E-042.41E-037.15E-032.21E-025.04E-031.96E-026.61E-022.20E-01 + 64L1 510.004.55E-041.30E-033.55E-039.81E-032.69E-039.13E-032.66E-027.59E-02 + 64L1 740.002.09E-045.45E-041.31E-033.08E-031.06E-033.03E-037.27E-031.69E-02 + 64L11000.001.17E-042.87E-046.28E-041.31E-035.09E-041.31E-032.77E-035.61E-03 + 64L11500.005.71E-051.29E-042.53E-044.64E-041.96E-044.56E-048.47E-041.48E-03 + 64L2 8.939.38E+006.06E+041.75E+076.08E+082.74E+014.21E+031.08E+058.08E+05 + 64L2 9.637.62E+004.16E+041.13E+074.71E+082.18E+013.14E+039.66E+041.25E+06 + 64L2 10.935.34E+002.21E+045.37E+062.69E+081.48E+011.92E+037.07E+041.45E+06 + 64L2 14.132.56E+006.14E+031.20E+066.78E+076.80E+007.05E+022.95E+048.65E+05 + 64L2 17.931.27E+001.88E+032.96E+051.65E+073.30E+002.77E+021.14E+043.63E+05 + 64L2 22.006.83E-016.86E+028.91E+044.64E+061.77E+001.24E+024.80E+031.49E+05 + 64L2 28.003.25E-012.10E+022.17E+041.00E+068.56E-014.82E+011.66E+034.76E+04 + 64L2 36.001.47E-016.15E+015.02E+031.99E+054.01E-011.80E+015.33E+021.35E+04 + 64L2 48.005.86E-021.53E+019.48E+023.07E+041.69E-015.86E+001.43E+023.02E+03 + 64L2 61.002.69E-024.84E+002.39E+026.48E+038.24E-022.31E+004.72E+018.48E+02 + 64L2 78.001.21E-021.51E+005.89E+011.32E+033.96E-028.93E-011.51E+012.28E+02 + 64L2 91.007.27E-037.31E-012.47E+014.88E+022.50E-024.93E-017.43E+009.96E+01 + 64L2 108.004.14E-033.29E-019.45E+001.63E+021.51E-022.56E-013.38E+003.98E+01 + 64L2 131.002.19E-031.35E-013.25E+004.80E+018.51E-031.23E-011.40E+001.42E+01 + 64L2 160.001.14E-035.45E-021.09E+001.37E+014.73E-035.80E-025.64E-014.93E+00 + 64L2 225.003.79E-041.20E-021.77E-011.71E+001.75E-031.64E-021.23E-018.34E-01 + 64L2 310.001.37E-043.03E-033.41E-022.58E-016.90E-045.12E-033.05E-021.64E-01 + 64L2 400.006.26E-051.05E-039.68E-036.08E-023.32E-042.07E-031.04E-024.70E-02 + 64L2 510.003.03E-053.99E-043.05E-031.62E-021.66E-048.89E-043.82E-031.48E-02 + 64L2 740.001.05E-059.74E-055.72E-042.41E-035.78E-052.53E-048.79E-042.76E-03 + 64L21000.004.63E-063.35E-051.62E-045.79E-042.49E-059.49E-052.84E-047.65E-04 + 64L21500.001.65E-068.80E-063.39E-059.95E-058.07E-062.67E-056.75E-051.54E-04 + 64L3 8.242.00E+011.34E+054.42E+071.74E+096.57E+001.35E+052.72E+085.68E+10 + 64L3 8.941.58E+018.87E+042.71E+071.26E+095.11E+009.02E+041.56E+083.04E+10 + 64L3 10.241.06E+014.46E+041.20E+076.56E+083.37E+004.58E+046.24E+071.07E+10 + 64L3 13.444.73E+001.13E+042.33E+061.41E+081.46E+001.18E+041.00E+071.34E+09 + 64L3 17.242.20E+003.20E+035.19E+053.01E+076.79E-013.41E+031.91E+062.03E+08 + 64L3 22.001.02E+009.35E+021.19E+056.27E+063.22E-011.01E+033.81E+053.25E+07 + 64L3 28.004.73E-012.77E+022.78E+041.28E+061.54E-013.06E+027.89E+045.39E+06 + 64L3 36.002.08E-017.83E+016.11E+032.38E+057.13E-028.77E+011.56E+048.45E+05 + 64L3 48.007.99E-021.85E+011.08E+033.40E+042.97E-022.11E+012.49E+031.04E+05 + 64L3 61.003.56E-025.58E+002.55E+026.67E+031.43E-026.44E+005.55E+021.87E+04 + 64L3 78.001.54E-021.64E+005.84E+011.25E+036.81E-031.92E+001.21E+023.29E+03 + 64L3 91.009.11E-037.64E-012.32E+014.37E+024.28E-039.00E-014.74E+011.12E+03 + 64L3 108.005.07E-033.28E-018.36E+001.36E+022.55E-033.90E-011.69E+013.45E+02 + 64L3 131.002.62E-031.27E-012.66E+003.67E+011.43E-031.52E-015.34E+009.29E+01 + 64L3 160.001.33E-034.78E-028.16E-019.50E+007.88E-045.80E-021.65E+002.44E+01 + 64L3 225.004.25E-049.29E-031.12E-019.73E-012.88E-041.14E-022.32E-012.63E+00 + 64L3 310.001.50E-042.07E-031.80E-021.20E-011.13E-042.53E-033.88E-023.48E-01 + 64L3 400.006.77E-056.52E-044.38E-032.37E-025.49E-057.89E-049.68E-037.31E-02 + 64L3 510.003.25E-052.26E-041.20E-035.37E-032.80E-052.67E-042.66E-031.73E-02 + 64L3 740.001.12E-054.96E-051.85E-046.33E-041.04E-055.49E-053.93E-042.06E-03 + 64L31000.005.17E-061.62E-054.65E-051.30E-044.89E-061.68E-058.92E-053.96E-04 + 64L31500.002.00E-064.25E-068.98E-061.95E-051.93E-064.13E-061.37E-054.82E-05 + 64M1 2.886.74E+002.59E+041.50E+063.73E+081.81E+037.82E+065.92E+091.01E+12 + 64M1 3.884.70E+007.57E+036.07E+054.48E+077.41E+021.81E+068.58E+081.28E+11 + 64M1 5.882.49E+001.23E+031.58E+055.83E+062.13E+022.38E+056.11E+076.96E+09 + 64M1 9.889.86E-011.01E+021.79E+049.91E+054.52E+011.95E+042.48E+061.90E+08 + 64M1 16.883.38E-015.31E+001.23E+037.41E+049.15E+001.56E+031.03E+055.00E+06 + 64M1 26.001.33E-014.62E-011.09E+026.31E+032.53E+002.14E+028.60E+032.88E+05 + 64M1 41.004.69E-021.32E-017.01E+003.69E+026.58E-012.80E+016.95E+021.55E+04 + 64M1 53.002.54E-028.71E-021.56E+006.99E+013.09E-019.20E+001.76E+023.12E+03 + 64M1 71.001.24E-024.94E-023.74E-011.07E+011.32E-012.68E+003.85E+015.27E+02 + 64M1 104.004.74E-032.01E-029.67E-021.16E+004.37E-025.65E-015.68E+005.56E+01 + 64M1 150.001.86E-037.60E-033.15E-022.04E-011.54E-021.35E-019.86E-017.08E+00 + 64M1 280.003.88E-041.33E-034.54E-031.75E-022.77E-031.41E-026.20E-022.71E-01 + 64M1 500.001.00E-042.90E-048.05E-042.29E-036.06E-042.10E-036.30E-031.85E-02 + 64M2 2.691.58E+015.37E+061.24E+103.45E+122.27E+022.78E+055.68E+073.68E+09 + 64M2 3.699.38E+001.11E+061.58E+093.81E+118.76E+016.64E+041.17E+071.01E+09 + 64M2 5.693.94E+001.27E+059.89E+071.83E+102.37E+019.75E+031.33E+061.16E+08 + 64M2 9.691.14E+008.92E+033.52E+064.50E+084.76E+009.88E+029.30E+046.62E+06 + 64M2 16.692.72E-016.03E+021.25E+051.06E+079.26E-011.02E+026.38E+033.27E+05 + 64M2 26.007.71E-026.83E+018.70E+035.15E+052.44E-011.67E+017.35E+022.76E+04 + 64M2 41.001.97E-027.48E+005.88E+022.39E+046.25E-022.70E+008.18E+012.17E+03 + 64M2 53.008.87E-032.18E+001.32E+024.30E+032.91E-029.78E-012.40E+015.18E+02 + 64M2 71.003.52E-035.43E-012.44E+016.22E+021.22E-023.11E-015.99E+001.03E+02 + 64M2 104.001.03E-039.10E-022.81E+005.18E+013.94E-037.12E-021.00E+001.26E+01 + 64M2 150.003.17E-041.70E-023.71E-015.04E+001.34E-031.77E-021.85E-011.74E+00 + 64M2 280.004.35E-051.10E-031.36E-021.13E-012.18E-041.76E-031.14E-026.68E-02 + 64M2 500.007.52E-061.02E-047.97E-044.34E-034.14E-052.26E-049.91E-043.93E-03 + 64M3 2.543.81E+011.12E+072.77E+107.93E+125.13E+011.18E+072.46E+115.26E+14 + 64M3 3.542.06E+012.12E+063.15E+097.60E+111.88E+012.25E+062.48E+103.11E+13 + 64M3 5.547.80E+002.23E+051.75E+083.19E+104.82E+002.41E+051.14E+097.23E+11 + 64M3 9.542.03E+001.44E+045.58E+066.92E+089.23E-011.60E+042.78E+078.34E+09 + 64M3 16.544.46E-019.04E+021.81E+051.47E+071.73E-011.03E+036.83E+051.03E+08 + 64M3 26.001.16E-019.33E+011.12E+046.31E+054.37E-021.08E+023.43E+043.08E+06 + 64M3 41.002.80E-029.53E+006.95E+022.68E+041.10E-021.13E+011.79E+039.88E+04 + 64M3 53.001.22E-022.65E+001.47E+024.54E+035.07E-033.16E+003.50E+021.49E+04 + 64M3 71.004.65E-036.18E-012.51E+016.03E+022.10E-037.47E-015.61E+011.79E+03 + 64M3 104.001.30E-039.37E-022.55E+004.38E+016.69E-041.15E-015.42E+001.21E+02 + 64M3 150.003.80E-041.56E-022.90E-013.62E+002.25E-041.94E-026.10E-019.89E+00 + 64M3 280.004.88E-057.96E-047.75E-035.66E-023.61E-059.94E-041.70E-021.68E-01 + 64M3 500.008.17E-065.93E-053.22E-041.48E-037.05E-067.09E-057.31E-044.87E-03 + 64M4 2.229.53E+013.45E+052.38E+103.58E+141.52E+013.59E+053.93E+093.81E+12 + 64M4 3.222.96E+015.14E+041.74E+091.38E+134.55E+005.55E+043.20E+082.31E+11 + 64M4 5.225.85E+004.36E+035.79E+072.10E+119.21E-014.88E+031.27E+076.13E+09 + 64M4 9.227.57E-012.40E+021.05E+061.62E+091.35E-012.77E+023.05E+058.85E+07 + 64M4 16.228.75E-021.32E+011.94E+041.39E+071.92E-021.59E+017.96E+031.38E+06 + 64M4 26.001.32E-021.15E+007.01E+022.72E+053.59E-031.46E+003.97E+024.43E+04 + 64M4 41.002.01E-031.07E-012.88E+016.43E+036.91E-041.46E-012.28E+011.67E+03 + 64M4 53.006.79E-042.79E-024.82E+007.96E+022.69E-044.01E-024.63E+002.66E+02 + 64M4 71.001.95E-046.03E-036.39E-017.52E+019.08E-059.20E-037.63E-013.35E+01 + 64M4 104.003.81E-058.21E-044.70E-023.60E+002.16E-051.35E-037.44E-022.30E+00 + 64M4 150.007.95E-061.24E-044.02E-032.05E-015.40E-062.17E-048.19E-031.83E-01 + 64M4 280.005.75E-075.35E-067.15E-051.82E-035.00E-079.98E-062.06E-042.75E-03 + 64M4 500.005.79E-083.37E-072.21E-062.93E-055.54E-086.05E-077.57E-066.56E-05 + 64M5 2.181.43E+024.36E+054.13E+105.69E+149.23E+003.51E+042.00E+101.23E+15 + 64M5 3.184.34E+016.30E+042.92E+092.10E+132.73E+005.37E+031.43E+094.26E+13 + 64M5 5.188.33E+005.19E+039.42E+073.05E+115.52E-014.72E+024.74E+075.56E+11 + 64M5 9.181.05E+002.78E+021.66E+062.25E+098.21E-022.74E+018.70E+053.54E+09 + 64M5 16.181.18E-011.49E+013.00E+041.84E+071.19E-021.65E+001.66E+042.49E+07 + 64M5 26.001.74E-021.25E+001.04E+033.44E+052.29E-031.59E-016.10E+024.18E+05 + 64M5 41.002.59E-031.13E-014.14E+017.74E+034.55E-041.70E-022.56E+018.73E+03 + 64M5 53.008.68E-042.87E-026.74E+009.25E+021.81E-044.87E-034.31E+001.02E+03 + 64M5 71.002.47E-046.00E-038.58E-018.31E+016.26E-051.18E-035.69E-019.04E+01 + 64M5 104.004.77E-057.78E-045.91E-023.66E+001.55E-051.91E-044.10E-024.03E+00 + 64M5 150.009.89E-061.11E-044.64E-031.88E-014.07E-063.40E-053.36E-032.16E-01 + 64M5 280.007.36E-074.48E-066.74E-051.30E-034.29E-071.99E-065.18E-051.69E-03 + 64M5 500.008.04E-082.89E-071.70E-061.56E-055.89E-081.70E-071.34E-062.24E-05 + 64N+ 50.001.57E-021.82E+001.17E+024.62E+031.19E-015.17E+002.38E+029.29E+03 + 64N+ 70.006.05E-033.58E-011.55E+014.34E+024.41E-021.17E+003.27E+018.46E+02 + 64N+ 100.002.27E-036.91E-021.97E+003.87E+011.59E-022.64E-014.53E+007.68E+01 + 64N+ 150.007.35E-041.13E-021.97E-012.62E+004.98E-035.11E-025.32E-015.71E+00 + 64N+ 200.003.32E-043.35E-034.08E-024.12E-012.20E-031.68E-021.27E-011.00E+00 + 64N+ 500.003.19E-051.24E-045.31E-042.26E-031.81E-046.76E-042.30E-037.98E-03 + 65K 53.001.33E+002.63E+009.90E-011.21E-011.19E+011.67E+024.07E+022.17E+02 + 65K 53.701.29E+002.71E+001.38E+003.27E-011.15E+011.59E+024.14E+022.98E+02 + 65K 55.001.21E+002.81E+002.10E+009.71E-011.07E+011.45E+024.15E+024.37E+02 + 65K 58.201.05E+002.91E+003.68E+003.65E+009.07E+001.18E+024.00E+027.08E+02 + 65K 62.008.89E-012.86E+005.07E+007.71E+007.54E+009.33E+013.63E+028.92E+02 + 65K 66.007.56E-012.70E+005.93E+001.17E+016.28E+007.40E+013.17E+029.58E+02 + 65K 72.006.03E-012.39E+006.39E+001.59E+014.88E+005.37E+012.51E+029.16E+02 + 65K 80.004.57E-011.96E+006.08E+001.80E+013.59E+003.64E+011.82E+027.59E+02 + 65K 92.003.16E-011.43E+004.96E+001.67E+012.40E+002.18E+011.13E+025.17E+02 + 65K 105.002.22E-011.02E+003.74E+001.34E+011.64E+001.35E+016.98E+013.31E+02 + 65K 122.001.49E-016.77E-012.54E+009.33E+001.07E+007.85E+003.96E+011.88E+02 + 65K 135.001.13E-015.07E-011.90E+006.99E+008.03E-015.47E+002.68E+011.25E+02 + 65K 152.008.27E-023.58E-011.33E+004.83E+005.75E-013.60E+001.69E+017.62E+01 + 65K 175.005.68E-022.36E-018.49E-013.02E+003.88E-012.20E+009.72E+004.18E+01 + 65K 200.003.99E-021.58E-015.50E-011.89E+002.68E-011.39E+005.77E+002.35E+01 + 65K 265.001.93E-026.82E-022.18E-016.89E-011.25E-015.40E-011.95E+006.94E+00 + 65K 350.009.64E-033.06E-028.90E-022.55E-015.96E-022.20E-016.90E-012.12E+00 + 65K 440.005.61E-031.64E-024.42E-021.17E-013.29E-021.08E-013.03E-018.29E-01 + 65K 550.003.40E-039.31E-032.33E-025.65E-021.86E-025.56E-021.40E-013.44E-01 + 65K 780.001.64E-034.14E-039.28E-031.99E-027.81E-032.06E-024.49E-029.44E-02 + 65K 1050.009.30E-042.21E-034.57E-038.91E-033.81E-039.27E-031.83E-023.43E-02 + 65K 1300.006.35E-041.45E-032.84E-035.21E-032.30E-035.35E-039.93E-031.74E-02 + 65K 1550.004.69E-041.03E-031.96E-033.42E-031.53E-033.45E-036.14E-031.02E-02 + 65L1 9.714.21E+009.72E+025.08E+043.88E+052.44E+029.65E+046.80E+061.09E+08 + 65L1 10.413.75E+006.73E+024.44E+046.00E+051.99E+026.93E+044.64E+068.96E+07 + 65L1 11.713.06E+003.55E+023.09E+046.92E+051.40E+023.97E+042.42E+065.65E+07 + 65L1 14.911.97E+008.81E+011.11E+043.92E+056.79E+011.28E+046.44E+051.74E+07 + 65L1 18.711.26E+002.11E+013.53E+031.49E+053.45E+014.46E+031.86E+055.01E+06 + 65L1 22.009.06E-017.12E+001.45E+036.52E+042.13E+012.13E+037.71E+041.99E+06 + 65L1 28.005.41E-011.47E+003.52E+021.67E+041.04E+017.15E+022.11E+044.87E+05 + 65L1 36.003.09E-015.74E-017.33E+013.57E+034.96E+002.35E+025.54E+031.11E+05 + 65L1 48.001.58E-014.05E-011.18E+015.54E+022.12E+006.73E+011.23E+032.02E+04 + 65L1 61.008.90E-022.92E-012.97E+001.14E+021.05E+002.43E+013.62E+024.97E+03 + 65L1 78.004.85E-021.84E-011.03E+002.35E+015.14E-018.79E+001.05E+021.20E+03 + 65L1 91.003.30E-021.31E-016.18E-019.44E+003.29E-014.70E+004.94E+014.99E+02 + 65L1 108.002.14E-028.69E-023.74E-013.79E+002.01E-012.38E+002.16E+011.90E+02 + 65L1 131.001.31E-025.28E-022.15E-011.54E+001.16E-011.12E+008.65E+006.55E+01 + 65L1 160.007.84E-033.08E-021.20E-016.69E-016.60E-025.24E-013.44E+002.23E+01 + 65L1 225.003.30E-031.19E-024.27E-021.82E-012.57E-021.51E-017.58E-013.78E+00 + 65L1 310.001.50E-034.93E-031.60E-025.68E-021.08E-024.96E-021.98E-017.80E-01 + 65L1 400.008.23E-042.51E-037.46E-032.33E-025.51E-032.14E-027.20E-022.39E-01 + 65L1 510.004.78E-041.36E-033.72E-031.04E-022.94E-039.96E-032.89E-028.25E-02 + 65L1 740.002.19E-045.75E-041.38E-033.27E-031.15E-033.30E-037.91E-031.83E-02 + 65L11000.001.24E-043.03E-046.67E-041.40E-035.53E-041.43E-033.01E-036.09E-03 + 65L11500.006.02E-051.37E-042.70E-044.95E-042.12E-044.95E-049.18E-041.60E-03 + 65L2 9.258.78E+005.54E+041.53E+075.09E+082.73E+013.98E+039.71E+046.73E+05 + 65L2 9.957.19E+003.85E+041.00E+073.99E+082.18E+013.00E+038.78E+041.05E+06 + 65L2 11.255.10E+002.09E+044.89E+062.33E+081.50E+011.86E+036.53E+041.25E+06 + 65L2 14.452.49E+006.00E+031.13E+066.18E+077.03E+007.03E+022.82E+047.86E+05 + 65L2 18.251.25E+001.89E+032.89E+051.56E+073.46E+002.82E+021.12E+043.42E+05 + 65L2 22.007.15E-017.50E+029.68E+044.93E+061.97E+001.36E+025.11E+031.54E+05 + 65L2 28.003.41E-012.29E+022.37E+041.07E+069.49E-015.28E+011.78E+034.99E+04 + 65L2 36.001.55E-016.73E+015.47E+032.14E+054.45E-011.97E+015.75E+021.43E+04 + 65L2 48.006.22E-021.67E+011.04E+033.32E+041.88E-016.43E+001.55E+023.23E+03 + 65L2 61.002.87E-025.31E+002.61E+027.02E+039.16E-022.54E+005.13E+019.12E+02 + 65L2 78.001.29E-021.65E+006.45E+011.43E+034.40E-029.83E-011.65E+012.46E+02 + 65L2 91.007.78E-038.02E-012.70E+015.31E+022.79E-025.44E-018.12E+001.08E+02 + 65L2 108.004.44E-033.61E-011.04E+011.78E+021.68E-022.83E-013.70E+004.32E+01 + 65L2 131.002.36E-031.49E-013.57E+005.24E+019.50E-031.36E-011.53E+001.55E+01 + 65L2 160.001.23E-036.00E-021.20E+001.50E+015.28E-036.42E-026.20E-015.38E+00 + 65L2 225.004.09E-041.32E-021.96E-011.88E+001.95E-031.82E-021.36E-019.15E-01 + 65L2 310.001.49E-043.34E-033.77E-022.84E-017.73E-045.69E-033.37E-021.81E-01 + 65L2 400.006.84E-051.17E-031.07E-026.72E-023.72E-042.30E-031.15E-025.19E-02 + 65L2 510.003.32E-054.43E-043.38E-031.80E-021.86E-049.93E-044.24E-031.64E-02 + 65L2 740.001.15E-051.08E-046.37E-042.68E-036.51E-052.83E-049.80E-043.06E-03 + 65L21000.005.10E-063.73E-051.81E-046.45E-042.80E-051.06E-043.18E-048.53E-04 + 65L21500.001.81E-069.80E-063.79E-051.11E-049.09E-063.00E-057.57E-051.72E-04 + 65L3 8.511.88E+011.23E+053.91E+071.47E+096.39E+001.30E+052.50E+085.05E+10 + 65L3 9.211.50E+018.26E+042.44E+071.09E+095.01E+008.73E+041.47E+082.75E+10 + 65L3 10.511.02E+014.23E+041.10E+075.77E+083.34E+004.52E+045.99E+079.99E+09 + 65L3 13.714.62E+001.10E+042.22E+061.29E+081.48E+001.20E+041.00E+071.31E+09 + 65L3 17.512.18E+003.21E+035.09E+052.86E+076.96E-013.55E+031.96E+062.06E+08 + 65L3 22.001.07E+001.01E+031.29E+056.62E+063.46E-011.14E+034.35E+053.70E+07 + 65L3 28.004.94E-013.01E+023.00E+041.36E+061.65E-013.43E+028.99E+046.12E+06 + 65L3 36.002.18E-018.49E+016.59E+032.53E+057.67E-029.85E+011.77E+049.57E+05 + 65L3 48.008.39E-022.01E+011.17E+033.63E+043.19E-022.36E+012.83E+031.18E+05 + 65L3 61.003.75E-026.05E+002.76E+027.14E+031.54E-027.23E+006.28E+022.11E+04 + 65L3 78.001.63E-021.78E+006.31E+011.34E+037.32E-032.15E+001.37E+023.71E+03 + 65L3 91.009.64E-038.29E-012.51E+014.69E+024.60E-031.01E+005.35E+011.27E+03 + 65L3 108.005.38E-033.56E-019.04E+001.46E+022.75E-034.37E-011.90E+013.88E+02 + 65L3 131.002.79E-031.38E-012.88E+003.95E+011.54E-031.71E-016.01E+001.04E+02 + 65L3 160.001.41E-035.19E-028.84E-011.02E+018.48E-046.49E-021.86E+002.74E+01 + 65L3 225.004.53E-041.01E-021.21E-011.05E+003.10E-041.27E-022.61E-012.95E+00 + 65L3 310.001.60E-042.25E-031.95E-021.29E-011.22E-042.82E-034.34E-023.89E-01 + 65L3 400.007.21E-057.08E-044.76E-032.57E-025.91E-058.76E-041.08E-028.17E-02 + 65L3 510.003.47E-052.45E-041.30E-035.82E-033.01E-052.96E-042.97E-031.93E-02 + 65L3 740.001.20E-055.37E-052.01E-046.87E-041.11E-056.05E-054.37E-042.29E-03 + 65L31000.005.48E-061.75E-055.04E-051.41E-045.24E-061.84E-059.90E-054.41E-04 + 65L31500.002.15E-064.59E-069.72E-062.12E-052.07E-064.49E-061.51E-055.35E-05 + 65M1 2.976.35E+002.48E+041.46E+063.19E+081.83E+037.65E+065.61E+099.26E+11 + 65M1 3.974.49E+007.50E+035.90E+054.29E+077.67E+021.84E+068.55E+081.23E+11 + 65M1 5.972.42E+001.27E+031.56E+055.67E+062.26E+022.50E+056.37E+077.10E+09 + 65M1 9.979.73E-011.10E+021.84E+049.80E+054.87E+012.11E+042.68E+062.02E+08 + 65M1 16.973.38E-016.18E+001.32E+037.68E+049.97E+001.71E+031.12E+055.43E+06 + 65M1 26.001.35E-015.50E-011.24E+026.90E+032.80E+002.39E+029.66E+033.22E+05 + 65M1 41.004.80E-021.32E-018.26E+004.17E+027.28E-013.13E+017.77E+021.73E+04 + 65M1 53.002.61E-028.50E-021.84E+008.03E+013.42E-011.03E+011.96E+023.47E+03 + 65M1 71.001.28E-024.86E-024.21E-011.24E+011.46E-012.98E+004.28E+015.83E+02 + 65M1 104.004.91E-032.01E-021.01E-011.32E+004.83E-026.27E-016.29E+006.15E+01 + 65M1 150.001.94E-037.71E-033.25E-022.23E-011.71E-021.50E-011.09E+007.80E+00 + 65M1 280.004.06E-041.38E-034.72E-031.86E-023.06E-031.55E-026.82E-022.98E-01 + 65M1 500.001.06E-043.04E-048.50E-042.44E-036.66E-042.31E-036.91E-032.02E-02 + 65M2 2.771.48E+015.10E+061.14E+103.07E+122.31E+022.73E+055.38E+073.26E+09 + 65M2 3.779.02E+001.09E+061.53E+093.58E+119.13E+016.75E+041.15E+079.44E+08 + 65M2 5.773.88E+001.30E+051.00E+081.82E+102.53E+011.02E+041.36E+061.15E+08 + 65M2 9.771.15E+009.42E+033.69E+064.64E+085.17E+001.06E+039.80E+046.81E+06 + 65M2 16.772.80E-016.48E+021.34E+051.12E+071.02E+001.11E+026.83E+033.45E+05 + 65M2 26.008.10E-027.52E+019.58E+035.63E+052.73E-011.85E+018.07E+022.99E+04 + 65M2 41.002.08E-028.24E+006.48E+022.61E+046.98E-022.99E+008.99E+012.36E+03 + 65M2 53.009.44E-032.40E+001.45E+024.71E+033.25E-021.08E+002.64E+015.66E+02 + 65M2 71.003.76E-035.99E-012.69E+016.83E+021.36E-023.46E-016.60E+001.12E+02 + 65M2 104.001.11E-031.01E-013.10E+005.71E+014.41E-037.92E-021.10E+001.38E+01 + 65M2 150.003.42E-041.89E-024.11E-015.57E+001.51E-031.97E-022.05E-011.92E+00 + 65M2 280.004.75E-051.22E-031.52E-021.25E-012.46E-041.97E-031.27E-027.41E-02 + 65M2 500.008.26E-061.14E-048.91E-044.84E-034.68E-052.54E-041.11E-034.38E-03 + 65M3 2.613.63E+011.07E+072.58E+107.17E+125.13E+011.17E+072.39E+115.00E+14 + 65M3 3.612.00E+012.11E+063.08E+097.23E+111.92E+012.33E+062.53E+103.14E+13 + 65M3 5.617.72E+002.29E+051.78E+083.18E+105.03E+002.57E+051.21E+097.70E+11 + 65M3 9.612.05E+001.52E+045.85E+067.13E+089.77E-011.75E+043.07E+079.21E+09 + 65M3 16.614.58E-019.68E+021.93E+051.55E+071.85E-011.14E+037.67E+051.16E+08 + 65M3 26.001.22E-011.02E+021.22E+046.83E+054.73E-021.23E+023.95E+043.56E+06 + 65M3 41.002.95E-021.04E+017.58E+022.90E+041.19E-021.28E+012.05E+031.14E+05 + 65M3 53.001.29E-022.89E+001.60E+024.91E+035.48E-033.58E+004.00E+021.70E+04 + 65M3 71.004.93E-036.76E-012.74E+016.53E+022.27E-038.45E-016.41E+012.05E+03 + 65M3 104.001.38E-031.02E-012.78E+004.75E+017.24E-041.30E-016.17E+001.38E+02 + 65M3 150.004.06E-041.71E-023.16E-013.93E+002.44E-042.19E-026.92E-011.12E+01 + 65M3 280.005.23E-058.71E-048.47E-036.17E-023.92E-051.12E-031.93E-021.90E-01 + 65M3 500.008.80E-066.48E-053.53E-041.61E-037.63E-067.92E-058.24E-045.49E-03 + 65M4 2.279.21E+013.31E+052.24E+103.31E+141.53E+013.61E+053.86E+093.63E+12 + 65M4 3.272.95E+015.15E+041.73E+091.37E+134.70E+005.80E+043.30E+082.34E+11 + 65M4 5.275.99E+004.53E+036.06E+072.21E+119.76E-015.28E+031.38E+076.52E+09 + 65M4 9.277.95E-012.55E+021.13E+061.77E+091.46E-013.07E+023.39E+059.74E+07 + 65M4 16.279.36E-021.43E+012.15E+041.55E+072.09E-021.79E+018.99E+031.55E+06 + 65M4 26.001.44E-021.27E+007.94E+023.12E+053.99E-031.68E+004.58E+025.10E+04 + 65M4 41.002.21E-031.19E-013.27E+017.37E+037.71E-041.68E-012.63E+011.91E+03 + 65M4 53.007.50E-043.11E-025.47E+009.12E+023.00E-044.61E-025.34E+003.06E+02 + 65M4 71.002.16E-046.74E-037.25E-018.62E+011.02E-041.06E-028.80E-013.85E+01 + 65M4 104.004.20E-059.22E-045.34E-024.12E+002.43E-051.56E-038.58E-022.65E+00 + 65M4 150.008.78E-061.39E-044.57E-032.35E-016.08E-062.50E-049.46E-032.11E-01 + 65M4 280.006.55E-076.08E-068.14E-052.10E-035.64E-071.15E-052.39E-043.18E-03 + 65M4 500.006.15E-083.82E-072.51E-063.37E-056.26E-086.97E-078.76E-067.59E-05 + 65M5 2.241.38E+024.16E+053.92E+105.27E+149.27E+003.47E+041.96E+101.19E+15 + 65M5 3.244.32E+016.26E+042.93E+092.08E+132.81E+005.52E+031.49E+094.39E+13 + 65M5 5.248.52E+005.34E+039.90E+073.20E+115.82E-015.02E+025.16E+076.08E+11 + 65M5 9.241.10E+002.93E+021.80E+062.46E+098.82E-022.98E+019.79E+054.03E+09 + 65M5 16.241.26E-011.60E+013.32E+042.05E+071.30E-021.81E+001.91E+042.90E+07 + 65M5 26.001.89E-021.37E+001.18E+033.94E+052.52E-031.77E-017.15E+024.98E+05 + 65M5 41.002.84E-031.24E-014.70E+018.85E+035.03E-041.90E-023.00E+011.04E+04 + 65M5 53.009.54E-043.16E-027.67E+001.06E+032.00E-045.45E-035.05E+001.21E+03 + 65M5 71.002.73E-046.63E-039.76E-019.50E+016.95E-051.33E-036.66E-011.07E+02 + 65M5 104.005.31E-058.63E-046.72E-024.18E+001.73E-052.13E-044.79E-024.76E+00 + 65M5 150.001.11E-051.24E-045.28E-032.14E-014.54E-063.81E-053.92E-032.54E-01 + 65M5 280.008.22E-074.99E-067.66E-051.49E-034.80E-072.23E-066.01E-051.98E-03 + 65M5 500.008.78E-083.21E-071.92E-061.78E-056.58E-081.91E-071.54E-062.61E-05 + 65N+ 50.001.61E-021.97E+001.26E+024.96E+031.30E-015.70E+002.65E+021.04E+04 + 65N+ 70.006.22E-033.86E-011.68E+014.67E+024.81E-021.29E+003.63E+019.43E+02 + 65N+ 100.002.34E-037.43E-022.13E+004.18E+011.74E-022.89E-015.01E+008.52E+01 + 65N+ 150.007.59E-041.21E-022.13E-012.84E+005.43E-035.59E-025.85E-016.30E+00 + 65N+ 200.003.43E-043.57E-034.41E-024.46E-012.40E-031.83E-021.39E-011.10E+00 + 65N+ 500.003.30E-051.30E-045.66E-042.43E-031.95E-047.28E-042.48E-038.63E-03 + 66K 54.791.24E+002.35E+008.45E-019.50E-021.18E+011.58E+023.71E+021.89E+02 + 66K 55.491.21E+002.44E+001.18E+002.56E-011.14E+011.52E+023.79E+022.60E+02 + 66K 56.791.13E+002.51E+001.77E+007.64E-011.06E+011.39E+023.79E+023.77E+02 + 66K 59.999.85E-012.61E+003.11E+002.89E+009.05E+001.13E+023.67E+026.14E+02 + 66K 63.798.42E-012.58E+004.31E+006.17E+007.56E+009.02E+013.35E+027.79E+02 + 66K 68.007.14E-012.44E+005.11E+009.65E+006.28E+007.13E+012.93E+028.46E+02 + 66K 74.005.73E-012.17E+005.54E+001.32E+014.91E+005.22E+012.35E+028.18E+02 + 66K 82.004.38E-011.79E+005.34E+001.51E+013.65E+003.58E+011.72E+026.87E+02 + 66K 94.003.06E-011.32E+004.43E+001.43E+012.46E+002.17E+011.08E+024.78E+02 + 66K 107.002.17E-019.57E-013.39E+001.17E+011.69E+001.36E+016.80E+013.11E+02 + 66K 124.001.46E-016.43E-012.34E+008.34E+001.11E+007.99E+003.91E+011.80E+02 + 66K 137.001.12E-014.85E-011.77E+006.34E+008.39E-015.60E+002.67E+011.21E+02 + 66K 154.008.22E-023.46E-011.25E+004.44E+006.04E-013.70E+001.70E+017.47E+01 + 66K 177.005.69E-022.30E-018.10E-012.82E+004.09E-012.28E+009.87E+004.15E+01 + 66K 205.003.86E-021.48E-015.06E-011.71E+002.73E-011.38E+005.58E+002.21E+01 + 66K 270.001.90E-026.59E-022.07E-016.45E-011.29E-015.47E-011.94E+006.75E+00 + 66K 355.009.68E-033.02E-028.70E-022.47E-016.23E-022.27E-017.00E-012.12E+00 + 66K 440.005.84E-031.70E-024.55E-021.20E-013.56E-021.17E-013.24E-018.81E-01 + 66K 550.003.55E-039.67E-032.41E-025.85E-022.01E-025.99E-021.50E-013.66E-01 + 66K 780.001.72E-034.32E-039.71E-032.08E-028.43E-032.22E-024.82E-021.01E-01 + 66K 1050.009.74E-042.32E-034.81E-039.36E-034.10E-039.98E-031.96E-023.66E-02 + 66K 1300.006.65E-041.52E-033.00E-035.49E-032.47E-035.75E-031.06E-021.86E-02 + 66K 1550.004.91E-041.09E-032.06E-033.61E-031.64E-033.70E-036.58E-031.09E-02 + 66L1 10.053.93E+009.00E+024.46E+043.11E+052.43E+029.16E+046.20E+069.46E+07 + 66L1 10.753.52E+006.32E+023.94E+044.92E+051.99E+026.66E+044.29E+067.88E+07 + 66L1 12.052.89E+003.41E+022.79E+045.84E+051.41E+023.88E+042.29E+065.08E+07 + 66L1 15.251.88E+008.91E+011.05E+043.49E+056.99E+011.28E+046.28E+051.63E+07 + 66L1 19.051.22E+002.25E+013.46E+031.39E+053.60E+014.58E+031.86E+054.85E+06 + 66L1 23.008.31E-016.49E+001.24E+035.35E+042.06E+011.93E+036.69E+041.66E+06 + 66L1 29.005.07E-011.47E+003.20E+021.45E+041.03E+016.79E+021.93E+044.29E+05 + 66L1 37.002.94E-015.62E-017.13E+013.29E+035.03E+002.31E+025.28E+031.02E+05 + 66L1 49.001.54E-013.78E-011.22E+015.44E+022.20E+006.81E+011.22E+031.95E+04 + 66L1 62.008.74E-022.73E-013.16E+001.17E+021.10E+002.51E+013.66E+024.93E+03 + 66L1 79.004.82E-021.75E-011.07E+002.50E+015.44E-019.20E+001.09E+021.22E+03 + 66L1 92.003.29E-021.26E-016.27E-011.01E+013.50E-014.96E+005.14E+015.11E+02 + 66L1 109.002.15E-028.43E-023.74E-014.05E+002.15E-012.52E+002.26E+011.97E+02 + 66L1 132.001.32E-025.19E-022.14E-011.62E+001.25E-011.20E+009.15E+006.85E+01 + 66L1 160.008.11E-033.11E-021.22E-017.16E-017.25E-025.76E-013.76E+002.43E+01 + 66L1 225.003.43E-031.22E-024.38E-021.92E-012.82E-021.65E-018.28E-014.11E+00 + 66L1 310.001.56E-035.09E-031.66E-025.97E-021.18E-025.43E-022.16E-018.49E-01 + 66L1 400.008.60E-042.61E-037.78E-032.45E-026.03E-032.34E-027.85E-022.60E-01 + 66L1 510.005.00E-041.42E-033.91E-031.09E-023.21E-031.09E-023.15E-028.96E-02 + 66L1 740.002.31E-046.05E-041.46E-033.47E-031.26E-033.59E-038.60E-031.99E-02 + 66L11000.001.30E-043.21E-047.08E-041.49E-036.01E-041.55E-033.27E-036.60E-03 + 66L11500.006.34E-051.45E-042.87E-045.28E-042.29E-045.37E-049.96E-041.74E-03 + 66L2 9.588.22E+005.08E+041.35E+074.25E+082.71E+013.77E+038.72E+045.53E+05 + 66L2 10.286.78E+003.58E+048.94E+063.38E+082.19E+012.87E+037.96E+048.84E+05 + 66L2 11.584.86E+001.97E+044.46E+062.03E+081.52E+011.81E+036.02E+041.08E+06 + 66L2 14.782.43E+005.86E+031.08E+065.61E+077.27E+007.01E+022.69E+047.12E+05 + 66L2 18.581.24E+001.89E+032.82E+051.47E+073.63E+002.87E+021.10E+043.21E+05 + 66L2 23.006.54E-016.59E+028.10E+043.95E+061.90E+001.25E+024.49E+031.30E+05 + 66L2 29.003.22E-012.11E+022.10E+049.16E+059.46E-015.03E+011.63E+034.40E+04 + 66L2 37.001.50E-016.44E+015.08E+031.92E+054.54E-011.94E+015.47E+021.32E+04 + 66L2 49.006.16E-021.66E+011.00E+033.13E+041.96E-016.51E+001.52E+023.10E+03 + 66L2 62.002.89E-025.38E+002.60E+026.83E+039.69E-022.62E+005.17E+018.98E+02 + 66L2 79.001.32E-021.71E+006.56E+011.43E+034.71E-021.03E+001.70E+012.48E+02 + 66L2 92.008.01E-038.36E-012.78E+015.39E+023.00E-025.75E-018.43E+001.10E+02 + 66L2 109.004.61E-033.80E-011.08E+011.83E+021.82E-023.01E-013.88E+004.47E+01 + 66L2 132.002.47E-031.58E-013.76E+005.46E+011.04E-021.46E-011.62E+001.62E+01 + 66L2 160.001.32E-036.60E-021.32E+001.64E+015.89E-037.10E-026.81E-015.88E+00 + 66L2 225.004.42E-041.46E-022.15E-012.06E+002.18E-032.02E-021.49E-011.00E+00 + 66L2 310.001.62E-043.69E-034.17E-023.13E-018.66E-046.33E-033.73E-021.99E-01 + 66L2 400.007.42E-051.29E-031.19E-027.42E-024.17E-042.57E-031.27E-025.73E-02 + 66L2 510.003.62E-054.90E-043.75E-031.99E-022.09E-041.11E-034.71E-031.82E-02 + 66L2 740.001.27E-051.20E-047.08E-042.98E-037.32E-053.17E-041.09E-033.40E-03 + 66L21000.005.59E-064.14E-052.01E-047.18E-043.15E-051.19E-043.55E-049.51E-04 + 66L21500.001.97E-061.09E-054.23E-051.24E-041.02E-053.37E-058.48E-051.92E-04 + 66L3 8.791.77E+011.14E+053.47E+071.25E+096.22E+001.24E+052.31E+084.50E+10 + 66L3 9.491.42E+017.71E+042.19E+079.33E+084.91E+008.46E+041.37E+082.50E+10 + 66L3 10.799.75E+004.02E+041.01E+075.07E+083.31E+004.45E+045.76E+079.32E+09 + 66L3 13.994.51E+001.08E+042.12E+061.19E+081.49E+001.22E+041.00E+071.28E+09 + 66L3 17.792.16E+003.21E+034.99E+052.72E+077.13E-013.68E+032.02E+062.08E+08 + 66L3 23.009.67E-018.78E+021.06E+055.23E+063.24E-011.03E+033.70E+053.01E+07 + 66L3 29.004.61E-012.73E+022.62E+041.14E+061.59E-013.24E+028.14E+045.34E+06 + 66L3 37.002.08E-018.02E+016.02E+032.24E+057.58E-029.64E+011.69E+048.86E+05 + 66L3 49.008.23E-021.96E+011.11E+033.37E+043.22E-022.39E+012.81E+031.15E+05 + 66L3 62.003.73E-026.05E+002.70E+026.83E+031.58E-027.48E+006.42E+022.12E+04 + 66L3 79.001.65E-021.81E+006.32E+011.32E+037.57E-032.27E+001.43E+023.82E+03 + 66L3 92.009.81E-038.51E-012.54E+014.67E+024.78E-031.07E+005.65E+011.32E+03 + 66L3 109.005.52E-033.68E-019.25E+001.48E+022.87E-034.68E-012.03E+014.09E+02 + 66L3 132.002.88E-031.44E-012.97E+004.03E+011.62E-031.84E-016.47E+001.11E+02 + 66L3 160.001.50E-035.63E-029.56E-011.10E+019.12E-047.25E-022.08E+003.07E+01 + 66L3 225.004.82E-041.09E-021.31E-011.13E+003.33E-041.42E-022.92E-013.30E+00 + 66L3 310.001.71E-042.44E-032.11E-021.40E-011.31E-043.14E-034.86E-024.35E-01 + 66L3 400.007.68E-057.67E-045.16E-032.78E-026.35E-059.73E-041.21E-029.12E-02 + 66L3 510.003.70E-052.66E-041.41E-036.30E-033.23E-053.27E-043.31E-032.15E-02 + 66L3 740.001.30E-055.81E-052.17E-047.44E-041.19E-056.66E-054.86E-042.55E-03 + 66L31000.005.85E-061.89E-055.45E-051.53E-045.61E-062.02E-051.10E-044.90E-04 + 66L31500.002.30E-064.94E-061.05E-052.30E-052.21E-064.88E-061.67E-055.93E-05 + 66M1 3.056.02E+002.42E+041.44E+062.79E+081.87E+037.60E+065.44E+098.70E+11 + 66M1 4.054.31E+007.51E+035.80E+054.18E+078.00E+021.88E+068.64E+081.21E+11 + 66M1 6.052.36E+001.31E+031.55E+055.57E+062.40E+022.65E+056.70E+077.32E+09 + 66M1 10.059.63E-011.19E+021.90E+049.75E+055.27E+012.29E+042.90E+062.15E+08 + 66M1 17.053.39E-017.16E+001.42E+037.96E+041.09E+011.88E+031.23E+055.90E+06 + 66M1 26.001.37E-016.59E-011.40E+027.54E+033.10E+002.68E+021.08E+043.60E+05 + 66M1 41.004.91E-021.33E-019.69E+004.69E+028.06E-013.49E+018.68E+021.92E+04 + 66M1 53.002.68E-028.34E-022.17E+009.18E+013.78E-011.14E+012.19E+023.85E+03 + 66M1 71.001.31E-024.78E-024.78E-011.44E+011.61E-013.31E+004.75E+016.46E+02 + 66M1 104.005.08E-032.01E-021.08E-011.51E+005.34E-026.95E-016.97E+006.79E+01 + 66M1 150.002.01E-037.82E-033.36E-022.45E-011.88E-021.66E-011.20E+008.60E+00 + 66M1 280.004.25E-041.42E-034.93E-031.98E-023.37E-031.71E-027.50E-023.27E-01 + 66M1 500.001.11E-043.20E-048.98E-042.60E-037.31E-042.54E-037.57E-032.22E-02 + 66M2 2.841.41E+014.90E+061.07E+102.78E+122.37E+022.71E+055.16E+072.91E+09 + 66M2 3.848.70E+001.09E+061.50E+093.41E+119.58E+016.92E+041.15E+078.93E+08 + 66M2 5.843.83E+001.34E+051.03E+081.82E+102.71E+011.08E+041.40E+061.14E+08 + 66M2 9.841.16E+009.98E+033.89E+064.81E+085.63E+001.14E+031.04E+057.03E+06 + 66M2 16.842.88E-016.98E+021.44E+051.19E+071.12E+001.21E+027.33E+033.64E+05 + 66M2 26.008.51E-028.28E+011.06E+046.15E+053.04E-012.05E+018.85E+023.25E+04 + 66M2 41.002.21E-029.08E+007.14E+022.86E+047.80E-023.31E+009.88E+012.57E+03 + 66M2 53.001.00E-022.65E+001.60E+025.17E+033.63E-021.20E+002.90E+016.18E+02 + 66M2 71.004.02E-036.62E-012.97E+017.50E+021.53E-023.83E-017.27E+001.23E+02 + 66M2 104.001.19E-031.11E-013.43E+006.28E+014.95E-038.80E-021.22E+001.52E+01 + 66M2 150.003.70E-042.09E-024.55E-016.14E+001.69E-032.20E-022.27E-012.11E+00 + 66M2 280.005.17E-051.35E-031.69E-021.39E-012.77E-042.20E-031.41E-028.22E-02 + 66M2 500.009.03E-061.27E-049.95E-045.39E-035.29E-052.86E-041.24E-034.88E-03 + 66M3 2.683.47E+011.04E+072.43E+106.52E+125.14E+011.18E+072.34E+114.79E+14 + 66M3 3.681.94E+012.10E+063.02E+096.90E+111.96E+012.41E+062.60E+103.18E+13 + 66M3 5.687.65E+002.36E+051.82E+083.17E+105.24E+002.75E+051.30E+098.21E+11 + 66M3 9.682.07E+001.61E+046.13E+067.35E+081.03E+001.92E+043.39E+071.02E+10 + 66M3 16.684.70E-011.04E+032.05E+051.63E+071.97E-011.27E+038.61E+051.30E+08 + 66M3 26.001.27E-011.11E+021.33E+047.38E+055.11E-021.39E+024.54E+044.10E+06 + 66M3 41.003.10E-021.14E+018.25E+023.13E+041.29E-021.44E+012.35E+031.30E+05 + 66M3 53.001.36E-023.16E+001.74E+025.31E+035.93E-034.05E+004.58E+021.95E+04 + 66M3 71.005.22E-037.38E-012.98E+017.07E+022.46E-039.55E-017.31E+012.33E+03 + 66M3 104.001.47E-031.12E-013.03E+005.15E+017.84E-041.46E-017.01E+001.57E+02 + 66M3 150.004.34E-041.87E-023.45E-014.26E+002.64E-042.46E-027.85E-011.27E+01 + 66M3 280.005.63E-059.53E-049.25E-036.71E-024.24E-051.25E-032.18E-022.14E-01 + 66M3 500.009.48E-067.08E-053.85E-041.76E-038.26E-068.84E-059.27E-046.18E-03 + 66M4 2.338.92E+013.20E+052.12E+103.07E+141.55E+013.63E+053.79E+093.45E+12 + 66M4 3.332.93E+015.17E+041.73E+091.36E+134.86E+006.07E+043.41E+082.36E+11 + 66M4 5.336.13E+004.70E+036.33E+072.32E+111.03E+005.71E+031.48E+076.92E+09 + 66M4 9.338.34E-012.72E+021.23E+061.93E+091.57E-013.41E+023.76E+051.07E+08 + 66M4 16.339.99E-021.55E+012.37E+041.72E+072.29E-022.02E+011.01E+041.73E+06 + 66M4 26.001.57E-021.41E+008.99E+023.58E+054.43E-031.92E+005.27E+025.85E+04 + 66M4 41.002.42E-031.32E-013.70E+018.44E+038.58E-041.93E-013.03E+012.20E+03 + 66M4 53.008.25E-043.47E-026.20E+001.04E+033.35E-045.29E-026.14E+003.51E+02 + 66M4 71.002.39E-047.54E-038.21E-019.86E+011.14E-041.21E-021.01E+004.42E+01 + 66M4 104.004.68E-051.03E-036.05E-024.72E+002.72E-051.79E-039.88E-023.05E+00 + 66M4 150.009.82E-061.57E-045.19E-032.69E-016.82E-062.88E-041.09E-022.43E-01 + 66M4 280.007.28E-076.87E-069.25E-052.40E-036.36E-071.32E-052.76E-043.67E-03 + 66M4 500.007.13E-084.36E-072.86E-063.87E-057.06E-088.02E-071.01E-058.78E-05 + 66M5 2.291.34E+024.00E+053.75E+104.94E+149.35E+003.45E+041.95E+101.15E+15 + 66M5 3.294.30E+016.25E+042.95E+092.08E+132.90E+005.68E+031.55E+094.56E+13 + 66M5 5.298.73E+005.50E+031.04E+083.37E+116.15E-015.33E+025.63E+076.67E+11 + 66M5 9.291.15E+003.09E+021.96E+062.68E+099.47E-023.23E+011.10E+064.59E+09 + 66M5 16.291.34E-011.71E+013.68E+042.28E+071.41E-021.99E+002.18E+043.36E+07 + 66M5 26.002.06E-021.50E+001.34E+034.50E+052.78E-031.98E-018.38E+025.94E+05 + 66M5 41.003.10E-031.36E-015.34E+011.01E+045.56E-042.13E-023.51E+011.23E+04 + 66M5 53.001.05E-033.48E-028.70E+001.21E+032.22E-046.09E-035.90E+001.43E+03 + 66M5 71.003.00E-047.32E-031.11E+001.08E+027.70E-051.48E-037.78E-011.27E+02 + 66M5 104.005.80E-059.55E-047.63E-024.76E+001.92E-052.39E-045.59E-025.61E+00 + 66M5 150.001.21E-051.37E-045.99E-032.44E-015.06E-064.26E-054.57E-032.99E-01 + 66M5 280.009.33E-075.59E-068.69E-051.70E-035.35E-072.50E-066.96E-052.32E-03 + 66M5 500.001.02E-073.52E-072.18E-062.02E-057.35E-082.14E-071.77E-063.05E-05 + 66N+ 50.001.68E-022.16E+001.39E+025.47E+031.44E-016.39E+003.02E+021.19E+04 + 66N+ 70.006.50E-034.24E-011.85E+015.15E+025.33E-021.44E+004.11E+011.07E+03 + 66N+ 100.002.45E-038.12E-022.35E+004.60E+011.92E-023.23E-015.63E+009.64E+01 + 66N+ 150.007.96E-041.32E-022.35E-013.12E+006.01E-036.22E-026.54E-017.08E+00 + 66N+ 200.003.62E-043.87E-034.85E-024.92E-012.65E-032.03E-021.55E-011.23E+00 + 66N+ 500.003.55E-051.42E-046.29E-042.73E-032.18E-048.15E-042.78E-039.71E-03 + 67K 56.621.16E+002.11E+007.25E-017.59E-021.17E+011.50E+023.40E+021.66E+02 + 67K 57.321.13E+002.18E+001.01E+002.04E-011.13E+011.45E+023.46E+022.26E+02 + 67K 58.621.06E+002.25E+001.50E+006.07E-011.05E+011.32E+023.47E+023.28E+02 + 67K 61.829.29E-012.34E+002.64E+002.30E+009.03E+001.09E+023.37E+025.34E+02 + 67K 65.627.98E-012.32E+003.67E+004.96E+007.59E+008.73E+013.10E+026.83E+02 + 67K 70.006.75E-012.20E+004.41E+007.95E+006.29E+006.88E+012.71E+027.50E+02 + 67K 76.005.46E-011.97E+004.81E+001.09E+014.95E+005.09E+012.20E+027.31E+02 + 67K 84.004.21E-011.64E+004.69E+001.27E+013.71E+003.53E+011.63E+026.24E+02 + 67K 96.002.96E-011.23E+003.95E+001.23E+012.52E+002.17E+011.04E+024.42E+02 + 67K 109.002.12E-018.99E-013.07E+001.03E+011.75E+001.37E+016.62E+012.93E+02 + 67K 126.001.44E-016.11E-012.15E+007.48E+001.16E+008.13E+003.86E+011.72E+02 + 67K 139.001.11E-014.65E-011.65E+005.76E+008.77E-015.73E+002.66E+011.17E+02 + 67K 156.008.18E-023.34E-011.18E+004.10E+006.34E-013.82E+001.70E+017.33E+01 + 67K 179.005.69E-022.24E-017.73E-012.64E+004.32E-012.36E+001.00E+014.12E+01 + 67K 205.003.99E-021.50E-015.04E-011.68E+002.97E-011.48E+005.93E+002.31E+01 + 67K 270.001.97E-026.72E-022.09E-016.46E-011.40E-015.90E-012.07E+007.12E+00 + 67K 355.001.00E-023.11E-028.89E-022.51E-016.76E-022.45E-017.48E-012.25E+00 + 67K 450.005.77E-031.66E-024.39E-021.14E-013.64E-021.17E-013.20E-018.56E-01 + 67K 560.003.56E-039.62E-032.38E-025.73E-022.08E-026.12E-021.51E-013.64E-01 + 67K 790.001.75E-034.40E-039.84E-032.10E-028.82E-032.31E-024.97E-021.03E-01 + 67K 1050.001.02E-032.43E-035.05E-039.84E-034.42E-031.07E-022.10E-023.92E-02 + 67K 1300.006.95E-041.60E-033.16E-035.79E-032.65E-036.18E-031.14E-021.99E-02 + 67K 1550.005.14E-041.14E-032.18E-033.82E-031.76E-033.98E-037.06E-031.17E-02 + 67L1 10.393.68E+008.34E+023.92E+042.54E+052.41E+028.71E+045.66E+068.26E+07 + 67L1 11.093.30E+005.94E+023.50E+044.07E+051.99E+026.39E+043.96E+066.94E+07 + 67L1 12.392.73E+003.28E+022.52E+044.95E+051.43E+023.78E+042.15E+064.57E+07 + 67L1 15.591.80E+008.97E+019.87E+033.11E+057.19E+011.29E+046.12E+051.52E+07 + 67L1 19.391.18E+002.38E+013.38E+031.29E+053.76E+014.69E+031.86E+054.68E+06 + 67L1 23.008.36E-017.93E+001.35E+035.56E+042.26E+012.15E+037.38E+041.78E+06 + 67L1 29.005.12E-011.79E+003.59E+021.55E+041.14E+017.54E+022.12E+044.64E+05 + 67L1 37.002.99E-015.98E-018.19E+013.60E+035.53E+002.56E+025.82E+031.11E+05 + 67L1 49.001.56E-013.65E-011.44E+016.09E+022.42E+007.54E+011.34E+032.13E+04 + 67L1 62.008.93E-022.64E-013.67E+001.33E+021.21E+002.77E+014.02E+025.37E+03 + 67L1 79.004.94E-021.71E-011.17E+002.86E+015.98E-011.01E+011.19E+021.33E+03 + 67L1 92.003.38E-021.24E-016.67E-011.15E+013.85E-015.46E+005.63E+015.57E+02 + 67L1 109.002.21E-028.37E-023.88E-014.55E+002.36E-012.78E+002.48E+012.15E+02 + 67L1 132.001.36E-025.20E-022.20E-011.78E+001.37E-011.32E+001.00E+017.46E+01 + 67L1 160.008.38E-033.14E-021.25E-017.70E-017.96E-026.32E-014.12E+002.64E+01 + 67L1 225.003.56E-031.25E-024.51E-022.02E-013.09E-021.81E-019.04E-014.48E+00 + 67L1 310.001.63E-035.25E-031.72E-026.28E-021.29E-025.94E-022.35E-019.24E-01 + 67L1 400.009.00E-042.71E-038.13E-032.59E-026.59E-032.56E-028.55E-022.83E-01 + 67L1 510.005.25E-041.49E-034.10E-031.16E-023.51E-031.19E-023.43E-029.73E-02 + 67L1 740.002.42E-046.37E-041.55E-033.69E-031.37E-033.91E-039.34E-032.16E-02 + 67L11000.001.37E-043.39E-047.51E-041.58E-036.53E-041.69E-033.55E-037.16E-03 + 67L11500.006.69E-051.54E-043.06E-045.64E-042.48E-045.82E-041.08E-031.88E-03 + 67L2 9.927.71E+004.67E+041.19E+073.57E+082.70E+013.58E+037.89E+044.62E+05 + 67L2 10.626.40E+003.32E+047.98E+062.88E+082.19E+012.75E+037.25E+047.50E+05 + 67L2 11.924.64E+001.87E+044.07E+061.76E+081.54E+011.76E+035.56E+049.39E+05 + 67L2 15.122.36E+005.73E+031.02E+065.11E+077.51E+006.99E+022.57E+046.46E+05 + 67L2 18.921.23E+001.89E+032.75E+051.38E+073.81E+002.91E+021.08E+043.02E+05 + 67L2 23.006.85E-017.20E+028.79E+044.19E+062.11E+001.36E+024.77E+031.34E+05 + 67L2 29.003.38E-012.31E+022.28E+049.78E+051.05E+005.50E+011.75E+034.61E+04 + 67L2 37.001.58E-017.05E+015.53E+032.06E+055.04E-012.13E+015.89E+021.39E+04 + 67L2 49.006.52E-021.81E+011.09E+033.38E+042.17E-017.14E+001.65E+023.30E+03 + 67L2 62.003.07E-025.89E+002.84E+027.39E+031.08E-012.88E+005.61E+019.64E+02 + 67L2 79.001.40E-021.87E+007.17E+011.55E+035.24E-021.13E+001.85E+012.68E+02 + 67L2 92.008.55E-039.17E-013.04E+015.85E+023.34E-026.33E-019.19E+001.19E+02 + 67L2 109.004.93E-034.17E-011.18E+011.99E+022.03E-023.32E-014.24E+004.84E+01 + 67L2 132.002.65E-031.73E-014.12E+005.95E+011.15E-021.61E-011.78E+001.76E+01 + 67L2 160.001.42E-037.26E-021.45E+001.80E+016.57E-037.85E-027.47E-016.40E+00 + 67L2 225.004.77E-041.61E-022.37E-012.26E+002.44E-032.23E-021.65E-011.10E+00 + 67L2 310.001.75E-044.08E-034.60E-023.44E-019.69E-047.03E-034.12E-022.19E-01 + 67L2 400.008.11E-051.43E-031.31E-028.19E-024.68E-042.86E-031.41E-026.31E-02 + 67L2 510.003.97E-055.43E-044.16E-032.20E-022.35E-041.23E-035.23E-032.01E-02 + 67L2 740.001.37E-051.33E-047.87E-043.31E-038.23E-053.55E-041.22E-033.78E-03 + 67L21000.006.13E-064.60E-052.24E-047.98E-043.55E-051.34E-043.96E-041.06E-03 + 67L21500.002.16E-061.21E-054.72E-051.38E-041.15E-053.78E-059.50E-052.14E-04 + 67L3 9.071.66E+011.05E+053.08E+071.06E+096.05E+001.19E+052.13E+084.02E+10 + 67L3 9.771.34E+017.19E+041.97E+078.05E+084.82E+008.20E+041.29E+082.27E+10 + 67L3 11.079.33E+003.82E+049.31E+064.47E+083.28E+004.39E+045.53E+078.70E+09 + 67L3 14.274.39E+001.06E+042.02E+061.09E+081.50E+001.24E+041.00E+071.25E+09 + 67L3 18.072.14E+003.21E+034.88E+052.57E+077.29E-013.82E+032.07E+062.09E+08 + 67L3 23.001.01E+009.50E+021.14E+055.51E+063.48E-011.15E+034.21E+053.41E+07 + 67L3 29.004.81E-012.96E+022.82E+041.21E+061.71E-013.63E+029.24E+046.04E+06 + 67L3 37.002.18E-018.68E+016.49E+032.38E+058.13E-021.08E+021.91E+041.00E+06 + 67L3 49.008.63E-022.12E+011.20E+033.60E+043.45E-022.68E+013.18E+031.29E+05 + 67L3 62.003.93E-026.55E+002.91E+027.30E+031.69E-028.38E+007.25E+022.39E+04 + 67L3 79.001.73E-021.96E+006.81E+011.41E+038.12E-032.54E+001.62E+024.29E+03 + 67L3 92.001.04E-029.21E-012.74E+015.00E+025.13E-031.20E+006.36E+011.48E+03 + 67L3 109.005.83E-033.99E-019.99E+001.58E+023.08E-035.23E-012.28E+014.59E+02 + 67L3 132.003.05E-031.56E-013.21E+004.33E+011.74E-032.06E-017.27E+001.25E+02 + 67L3 160.001.59E-036.10E-021.03E+001.18E+019.79E-048.10E-022.34E+003.43E+01 + 67L3 225.005.13E-041.18E-021.42E-011.22E+003.58E-041.58E-023.28E-013.69E+00 + 67L3 310.001.82E-042.64E-032.29E-021.51E-011.41E-043.50E-035.43E-024.85E-01 + 67L3 400.008.19E-058.31E-045.58E-033.00E-026.81E-051.08E-031.35E-021.02E-01 + 67L3 510.003.95E-052.88E-041.53E-036.81E-033.46E-053.62E-043.69E-032.39E-02 + 67L3 740.001.38E-056.28E-052.35E-048.05E-041.28E-057.33E-055.40E-042.84E-03 + 67L31000.006.26E-062.03E-055.90E-051.66E-046.01E-062.21E-051.22E-045.44E-04 + 67L31500.002.42E-065.31E-061.13E-052.49E-052.36E-065.30E-061.84E-056.57E-05 + 67M1 3.135.73E+002.36E+041.44E+062.45E+081.91E+037.54E+065.27E+098.19E+11 + 67M1 4.134.14E+007.53E+035.76E+054.06E+078.34E+021.93E+068.72E+081.20E+11 + 67M1 6.132.30E+001.36E+031.55E+055.54E+062.55E+022.80E+057.03E+077.54E+09 + 67M1 10.139.52E-011.29E+021.96E+049.73E+055.68E+012.48E+043.13E+062.30E+08 + 67M1 17.133.39E-018.23E+001.52E+038.26E+041.19E+012.06E+031.35E+056.41E+06 + 67M1 26.001.40E-017.92E-011.58E+028.21E+033.43E+003.00E+021.22E+044.02E+05 + 67M1 41.005.01E-021.38E-011.13E+015.25E+028.91E-013.90E+019.68E+022.14E+04 + 67M1 53.002.74E-028.26E-022.55E+001.05E+024.18E-011.27E+012.44E+024.28E+03 + 67M1 71.001.35E-024.72E-025.46E-011.65E+011.78E-013.68E+005.28E+017.15E+02 + 67M1 104.005.25E-032.01E-021.15E-011.73E+005.90E-027.70E-017.71E+007.50E+01 + 67M1 150.002.09E-037.92E-033.50E-022.71E-012.08E-021.83E-011.33E+009.47E+00 + 67M1 280.004.44E-041.47E-035.14E-032.12E-023.71E-031.88E-028.24E-023.59E-01 + 67M1 500.001.17E-043.36E-049.50E-042.78E-038.03E-042.78E-038.29E-032.42E-02 + 67M2 2.921.33E+014.67E+069.90E+092.50E+122.42E+022.67E+054.92E+072.60E+09 + 67M2 3.928.37E+001.08E+061.46E+093.22E+119.99E+017.05E+041.14E+078.41E+08 + 67M2 5.923.77E+001.37E+051.04E+081.80E+102.89E+011.13E+041.43E+061.13E+08 + 67M2 9.921.16E+001.05E+044.08E+064.96E+086.11E+001.22E+031.09E+057.23E+06 + 67M2 16.922.95E-017.49E+021.54E+051.25E+071.23E+001.31E+027.84E+033.83E+05 + 67M2 26.008.92E-029.11E+011.16E+046.72E+053.39E-012.27E+019.69E+023.52E+04 + 67M2 41.002.33E-021.00E+017.85E+023.13E+048.70E-023.67E+001.08E+022.80E+03 + 67M2 53.001.06E-022.92E+001.76E+025.65E+034.06E-021.33E+003.19E+016.73E+02 + 67M2 71.004.28E-037.29E-013.27E+018.22E+021.71E-024.25E-018.00E+001.34E+02 + 67M2 104.001.28E-031.23E-013.79E+006.90E+015.54E-039.77E-021.34E+001.66E+01 + 67M2 150.003.99E-042.31E-025.03E-016.77E+001.90E-032.44E-022.51E-012.32E+00 + 67M2 280.005.63E-051.50E-031.88E-021.54E-013.12E-042.46E-031.57E-029.09E-02 + 67M2 500.009.95E-061.41E-041.11E-036.00E-035.97E-053.21E-041.39E-035.43E-03 + 67M3 2.743.33E+019.99E+062.29E+105.98E+125.15E+011.18E+072.29E+114.61E+14 + 67M3 3.741.89E+012.09E+062.97E+096.62E+112.01E+012.49E+062.66E+103.23E+13 + 67M3 5.747.58E+002.43E+051.85E+083.17E+105.46E+002.93E+051.39E+098.76E+11 + 67M3 9.742.09E+001.69E+046.43E+067.59E+081.09E+002.09E+043.73E+071.12E+10 + 67M3 16.744.82E-011.11E+032.18E+051.71E+072.10E-011.41E+039.66E+051.46E+08 + 67M3 26.001.33E-011.21E+021.45E+047.96E+055.52E-021.57E+025.21E+044.72E+06 + 67M3 41.003.25E-021.24E+018.97E+023.38E+041.39E-021.63E+012.69E+031.49E+05 + 67M3 53.001.43E-023.44E+001.89E+025.73E+036.40E-034.57E+005.22E+022.23E+04 + 67M3 71.005.53E-038.05E-013.24E+017.64E+022.65E-031.08E+008.32E+012.66E+03 + 67M3 104.001.56E-031.22E-013.30E+005.57E+018.46E-041.65E-017.96E+001.78E+02 + 67M3 150.004.62E-042.04E-023.76E-014.62E+002.85E-042.77E-028.90E-011.44E+01 + 67M3 280.006.04E-051.04E-031.01E-027.29E-024.58E-051.41E-032.45E-022.42E-01 + 67M3 500.001.02E-057.71E-054.20E-041.91E-038.92E-069.86E-051.04E-036.94E-03 + 67M4 2.398.63E+013.08E+052.00E+102.85E+141.55E+013.65E+053.72E+093.30E+12 + 67M4 3.392.91E+015.17E+041.72E+091.35E+135.01E+006.34E+043.52E+082.38E+11 + 67M4 5.396.25E+004.87E+036.60E+072.42E+111.09E+006.17E+031.60E+077.33E+09 + 67M4 9.398.72E-012.89E+021.32E+062.10E+091.69E-013.77E+024.16E+051.17E+08 + 67M4 16.391.06E-011.68E+012.60E+041.91E+072.49E-022.26E+011.14E+041.93E+06 + 67M4 26.001.71E-021.56E+001.01E+034.09E+054.90E-032.20E+006.06E+026.70E+04 + 67M4 41.002.65E-031.47E-014.18E+019.64E+039.53E-042.21E-013.48E+012.51E+03 + 67M4 53.009.05E-043.86E-027.00E+001.19E+033.73E-046.05E-027.05E+004.02E+02 + 67M4 71.002.63E-048.41E-039.28E-011.13E+021.27E-041.39E-021.16E+005.06E+01 + 67M4 104.005.18E-051.16E-036.84E-025.39E+003.04E-052.05E-031.13E-013.49E+00 + 67M4 150.001.09E-051.76E-045.87E-033.08E-017.64E-063.30E-041.25E-022.79E-01 + 67M4 280.007.99E-077.74E-061.05E-042.75E-037.14E-071.52E-053.17E-044.22E-03 + 67M4 500.007.63E-084.93E-073.25E-064.43E-057.95E-089.21E-071.17E-051.01E-04 + 67M5 2.351.30E+023.83E+053.57E+104.61E+149.39E+003.41E+041.92E+101.11E+15 + 67M5 3.354.28E+016.21E+042.96E+092.07E+132.99E+005.83E+031.61E+094.70E+13 + 67M5 5.358.91E+005.65E+031.09E+083.54E+116.47E-015.65E+026.11E+077.27E+11 + 67M5 9.351.20E+003.25E+022.12E+062.91E+091.01E-013.50E+011.23E+065.20E+09 + 67M5 16.351.43E-011.83E+014.07E+042.53E+071.52E-022.18E+002.49E+043.89E+07 + 67M5 26.002.23E-021.64E+001.52E+035.13E+053.06E-032.21E-019.78E+027.05E+05 + 67M5 41.003.38E-031.49E-016.05E+011.15E+046.13E-042.37E-024.10E+011.46E+04 + 67M5 53.001.14E-033.82E-029.86E+001.37E+032.45E-046.79E-036.89E+001.69E+03 + 67M5 71.003.29E-048.06E-031.26E+001.23E+028.52E-051.65E-039.07E-011.49E+02 + 67M5 104.006.42E-051.05E-038.64E-025.42E+002.13E-052.66E-046.51E-026.60E+00 + 67M5 150.001.35E-051.52E-046.79E-032.78E-015.61E-064.75E-055.31E-033.51E-01 + 67M5 280.001.02E-066.21E-069.84E-051.93E-035.95E-072.79E-068.05E-052.71E-03 + 67M5 500.001.14E-074.00E-072.45E-062.31E-058.17E-082.39E-072.03E-063.54E-05 + 67N+ 50.001.75E-022.37E+001.53E+026.02E+031.60E-017.16E+003.42E+021.36E+04 + 67N+ 70.006.79E-034.64E-012.04E+015.66E+025.91E-021.61E+004.64E+011.22E+03 + 67N+ 100.002.56E-038.87E-022.58E+005.05E+012.13E-023.59E-016.32E+001.09E+02 + 67N+ 150.008.36E-041.43E-022.58E-013.43E+006.65E-036.91E-027.31E-017.93E+00 + 67N+ 200.003.80E-044.19E-035.33E-025.41E-012.93E-032.25E-021.72E-011.37E+00 + 67N+ 500.003.72E-051.51E-046.78E-042.96E-032.38E-048.90E-043.04E-031.06E-02 + 68K 58.481.09E+001.89E+006.24E-016.08E-021.16E+011.43E+023.11E+021.46E+02 + 68K 59.181.06E+001.94E+008.54E-011.64E-011.12E+011.37E+023.15E+021.96E+02 + 68K 60.481.00E+002.02E+001.28E+004.84E-011.05E+011.26E+023.18E+022.85E+02 + 68K 63.688.77E-012.10E+002.24E+001.84E+009.02E+001.05E+023.10E+024.65E+02 + 68K 67.487.56E-012.09E+003.13E+004.00E+007.62E+008.44E+012.87E+025.99E+02 + 68K 71.006.64E-012.02E+003.69E+006.02E+006.57E+007.01E+012.60E+026.57E+02 + 68K 77.005.38E-011.83E+004.15E+008.76E+005.19E+005.21E+012.13E+026.62E+02 + 68K 85.004.17E-011.55E+004.15E+001.06E+013.90E+003.63E+011.60E+025.80E+02 + 68K 97.002.95E-011.17E+003.59E+001.07E+012.67E+002.24E+011.04E+024.22E+02 + 68K 110.002.12E-018.64E-012.84E+009.17E+001.86E+001.43E+016.68E+012.85E+02 + 68K 127.001.45E-015.94E-012.03E+006.83E+001.23E+008.51E+003.93E+011.70E+02 + 68K 140.001.12E-014.54E-011.56E+005.33E+009.36E-016.02E+002.72E+011.17E+02 + 68K 157.008.28E-023.29E-011.13E+003.85E+006.77E-014.02E+001.76E+017.37E+01 + 68K 180.005.78E-022.22E-017.50E-012.52E+004.62E-012.50E+001.04E+014.18E+01 + 68K 205.004.12E-021.52E-015.02E-011.65E+003.22E-011.60E+006.29E+002.42E+01 + 68K 270.002.04E-026.85E-022.11E-016.47E-011.52E-016.36E-012.20E+007.50E+00 + 68K 355.001.04E-023.19E-029.07E-022.55E-017.33E-022.64E-017.99E-012.38E+00 + 68K 450.006.00E-031.71E-024.52E-021.17E-013.95E-021.26E-013.43E-019.08E-01 + 68K 560.003.71E-039.99E-032.47E-025.93E-022.25E-026.59E-021.62E-013.87E-01 + 68K 790.001.83E-034.59E-031.03E-022.19E-029.52E-032.48E-025.32E-021.10E-01 + 68K 1050.001.07E-032.55E-035.31E-031.03E-024.75E-031.15E-022.25E-024.18E-02 + 68K 1300.007.27E-041.68E-033.33E-036.10E-032.85E-036.65E-031.22E-022.13E-02 + 68K 1550.005.38E-041.20E-032.30E-034.03E-031.88E-034.27E-037.56E-031.25E-02 + 68L1 10.753.44E+007.74E+023.46E+042.07E+052.40E+028.28E+045.17E+067.22E+07 + 68L1 11.453.10E+005.58E+023.11E+043.37E+051.99E+026.14E+043.66E+066.13E+07 + 68L1 12.752.58E+003.15E+022.28E+044.20E+051.44E+023.69E+042.03E+064.11E+07 + 68L1 15.951.72E+009.02E+019.29E+032.77E+057.39E+011.29E+045.95E+051.42E+07 + 68L1 19.751.14E+002.51E+013.30E+031.20E+053.91E+014.80E+031.86E+054.51E+06 + 68L1 23.008.41E-019.59E+001.48E+035.75E+042.49E+012.39E+038.12E+041.91E+06 + 68L1 29.005.17E-012.19E+004.00E+021.64E+041.25E+018.37E+022.34E+045.02E+05 + 68L1 37.003.03E-016.56E-019.36E+013.91E+036.08E+002.83E+026.40E+031.20E+05 + 68L1 49.001.59E-013.57E-011.68E+016.79E+022.66E+008.34E+011.48E+032.31E+04 + 68L1 62.009.11E-022.55E-014.26E+001.51E+021.33E+003.06E+014.42E+025.85E+03 + 68L1 79.005.06E-021.67E-011.30E+003.27E+016.58E-011.12E+011.31E+021.44E+03 + 68L1 92.003.47E-021.22E-017.18E-011.32E+014.23E-016.02E+006.18E+016.07E+02 + 68L1 109.002.27E-028.31E-024.06E-015.13E+002.60E-013.06E+002.72E+012.34E+02 + 68L1 132.001.40E-025.21E-022.27E-011.97E+001.50E-011.45E+001.10E+018.13E+01 + 68L1 160.008.66E-033.17E-021.28E-018.34E-018.74E-026.94E-014.50E+002.88E+01 + 68L1 225.003.70E-031.27E-024.64E-022.15E-013.39E-021.98E-019.87E-014.87E+00 + 68L1 310.001.70E-035.42E-031.78E-026.64E-021.42E-026.50E-022.56E-011.00E+00 + 68L1 400.009.39E-042.81E-038.50E-032.74E-027.21E-032.79E-029.31E-023.07E-01 + 68L1 510.005.48E-041.55E-034.31E-031.23E-023.83E-031.29E-023.73E-021.06E-01 + 68L1 740.002.54E-046.70E-041.64E-033.92E-031.49E-034.26E-031.01E-022.34E-02 + 68L11000.001.43E-043.58E-047.97E-041.69E-037.10E-041.83E-033.86E-037.76E-03 + 68L11500.007.05E-051.63E-043.26E-046.02E-042.68E-046.31E-041.17E-032.04E-03 + 68L2 10.267.24E+004.29E+041.05E+073.01E+082.69E+013.40E+037.14E+043.87E+05 + 68L2 10.966.05E+003.09E+047.13E+062.45E+082.20E+012.64E+036.60E+046.36E+05 + 68L2 12.264.43E+001.77E+043.72E+061.53E+081.56E+011.71E+035.14E+048.15E+05 + 68L2 15.462.30E+005.58E+039.64E+054.64E+077.76E+006.96E+022.45E+045.85E+05 + 68L2 19.261.21E+001.88E+032.68E+051.30E+073.99E+002.96E+021.05E+042.84E+05 + 68L2 23.007.16E-017.86E+029.52E+044.43E+062.33E+001.48E+025.07E+031.38E+05 + 68L2 29.003.54E-012.52E+022.47E+041.04E+061.16E+006.00E+011.87E+034.81E+04 + 68L2 37.001.67E-017.70E+016.01E+032.21E+055.59E-012.33E+016.33E+021.47E+04 + 68L2 49.006.89E-021.98E+011.19E+033.64E+042.41E-017.82E+001.78E+023.52E+03 + 68L2 62.003.25E-026.45E+003.09E+027.98E+031.20E-013.15E+006.08E+011.03E+03 + 68L2 79.001.49E-022.05E+007.83E+011.68E+035.83E-021.24E+002.01E+012.88E+02 + 68L2 92.009.12E-031.00E+003.33E+016.35E+023.72E-026.96E-011.00E+011.29E+02 + 68L2 109.005.26E-034.58E-011.29E+012.16E+022.26E-023.66E-014.63E+005.25E+01 + 68L2 132.002.83E-031.90E-014.51E+006.49E+011.29E-021.78E-011.94E+001.91E+01 + 68L2 160.001.53E-037.98E-021.59E+001.96E+017.33E-038.67E-028.19E-016.97E+00 + 68L2 225.005.16E-041.77E-022.61E-012.47E+002.73E-032.47E-021.81E-011.20E+00 + 68L2 310.001.90E-044.50E-035.08E-023.79E-011.08E-037.80E-034.55E-022.40E-01 + 68L2 400.008.80E-051.58E-031.45E-029.02E-025.24E-043.18E-031.56E-026.95E-02 + 68L2 510.004.31E-056.00E-044.61E-032.43E-022.63E-041.38E-035.80E-032.22E-02 + 68L2 740.001.51E-051.48E-048.74E-043.66E-039.24E-053.96E-041.35E-034.19E-03 + 68L21000.006.74E-065.10E-052.49E-048.87E-043.99E-051.50E-044.42E-041.18E-03 + 68L21500.002.38E-061.35E-055.26E-051.54E-041.30E-054.24E-051.06E-042.39E-04 + 68L3 9.361.56E+019.67E+042.74E+079.09E+085.89E+001.14E+051.97E+083.59E+10 + 68L3 10.061.27E+016.72E+041.78E+076.95E+084.72E+007.95E+041.21E+082.06E+10 + 68L3 11.368.93E+003.63E+048.57E+063.94E+083.25E+004.33E+045.31E+078.12E+09 + 68L3 14.564.28E+001.04E+041.93E+061.00E+081.52E+001.26E+049.99E+061.22E+09 + 68L3 18.362.11E+003.21E+034.77E+052.44E+077.44E-013.95E+032.13E+062.10E+08 + 68L3 23.001.05E+001.03E+031.23E+055.80E+063.73E-011.29E+034.79E+053.85E+07 + 68L3 29.005.01E-013.20E+023.03E+041.28E+061.83E-014.06E+021.05E+056.83E+06 + 68L3 37.002.28E-019.39E+016.98E+032.53E+058.71E-021.21E+022.17E+041.13E+06 + 68L3 49.009.05E-022.30E+011.29E+033.83E+043.70E-023.00E+013.60E+031.46E+05 + 68L3 62.004.13E-027.09E+003.13E+027.79E+031.81E-029.38E+008.18E+022.68E+04 + 68L3 79.001.83E-022.12E+007.34E+011.51E+038.71E-032.84E+001.82E+024.82E+03 + 68L3 92.001.09E-029.97E-012.96E+015.35E+025.50E-031.34E+007.16E+011.66E+03 + 68L3 109.006.16E-034.32E-011.08E+011.69E+023.31E-035.85E-012.56E+015.15E+02 + 68L3 132.003.22E-031.69E-013.46E+004.64E+011.86E-032.30E-018.16E+001.40E+02 + 68L3 160.001.69E-036.60E-021.11E+001.27E+011.05E-039.04E-022.62E+003.84E+01 + 68L3 225.005.45E-041.28E-021.53E-011.31E+003.84E-041.76E-023.67E-014.12E+00 + 68L3 310.001.94E-042.86E-032.47E-021.62E-011.51E-043.89E-036.07E-025.41E-01 + 68L3 400.008.73E-059.00E-046.04E-033.23E-027.31E-051.20E-031.50E-021.13E-01 + 68L3 510.004.22E-053.11E-041.65E-037.35E-033.71E-054.01E-044.11E-032.66E-02 + 68L3 740.001.48E-056.77E-052.55E-048.71E-041.37E-058.06E-056.00E-043.15E-03 + 68L31000.006.69E-062.19E-056.38E-051.80E-046.42E-062.41E-051.35E-046.04E-04 + 68L31500.002.58E-065.70E-061.22E-052.69E-052.52E-065.75E-062.03E-057.27E-05 + 68M1 3.215.47E+002.32E+041.44E+062.18E+081.96E+037.52E+065.14E+097.78E+11 + 68M1 4.213.99E+007.58E+035.77E+053.96E+078.71E+021.98E+068.84E+081.19E+11 + 68M1 6.212.24E+001.42E+031.56E+055.55E+062.72E+022.97E+057.40E+077.80E+09 + 68M1 10.219.42E-011.40E+022.03E+049.74E+056.14E+012.69E+043.38E+062.45E+08 + 68M1 17.213.39E-019.42E+001.63E+038.57E+041.29E+012.27E+031.48E+056.97E+06 + 68M1 26.001.42E-019.51E-011.78E+028.93E+033.79E+003.36E+021.36E+044.48E+05 + 68M1 41.005.12E-021.45E-011.31E+015.87E+029.84E-014.35E+011.08E+032.38E+04 + 68M1 53.002.81E-028.26E-022.98E+001.19E+024.62E-011.42E+012.71E+024.74E+03 + 68M1 71.001.39E-024.68E-026.28E-011.90E+011.97E-014.09E+005.85E+017.92E+02 + 68M1 104.005.41E-032.01E-021.25E-011.97E+006.51E-028.53E-018.53E+008.27E+01 + 68M1 150.002.17E-038.03E-033.67E-023.01E-012.30E-022.03E-011.46E+001.04E+01 + 68M1 280.004.64E-041.53E-035.38E-032.27E-024.08E-032.07E-029.05E-023.94E-01 + 68M1 500.001.23E-043.53E-041.00E-032.97E-038.81E-043.05E-039.08E-032.65E-02 + 68M2 3.011.26E+014.45E+069.16E+092.23E+122.47E+022.63E+054.68E+072.31E+09 + 68M2 4.018.04E+001.06E+061.41E+093.04E+111.04E+027.17E+041.12E+077.90E+08 + 68M2 6.013.70E+001.41E+051.05E+081.79E+103.08E+011.19E+041.47E+061.12E+08 + 68M2 10.011.17E+001.11E+044.27E+065.11E+086.63E+001.31E+031.15E+057.42E+06 + 68M2 17.013.02E-018.03E+021.64E+051.32E+071.35E+001.42E+028.38E+034.02E+05 + 68M2 26.009.33E-021.00E+021.28E+047.33E+053.78E-012.51E+011.06E+033.81E+04 + 68M2 41.002.46E-021.10E+018.63E+023.41E+049.71E-024.05E+001.19E+023.04E+03 + 68M2 53.001.13E-023.21E+001.94E+026.18E+034.53E-021.47E+003.50E+017.33E+02 + 68M2 71.004.56E-038.03E-013.60E+019.00E+021.91E-024.70E-018.79E+001.46E+02 + 68M2 104.001.37E-031.36E-014.17E+007.57E+016.21E-031.08E-011.48E+001.82E+01 + 68M2 150.004.31E-042.55E-025.56E-017.45E+002.13E-032.72E-022.77E-012.55E+00 + 68M2 280.006.12E-051.67E-032.08E-021.70E-013.51E-042.75E-031.74E-021.00E-01 + 68M2 500.001.09E-051.57E-041.24E-036.68E-036.74E-053.59E-041.55E-036.04E-03 + 68M3 2.813.18E+019.54E+062.13E+105.40E+125.13E+011.17E+072.22E+114.36E+14 + 68M3 3.811.83E+012.07E+062.89E+096.27E+112.04E+012.56E+062.70E+103.24E+13 + 68M3 5.817.49E+002.48E+051.88E+083.14E+105.67E+003.11E+051.47E+099.26E+11 + 68M3 9.812.11E+001.78E+046.71E+067.78E+081.15E+002.28E+044.09E+071.23E+10 + 68M3 16.814.93E-011.18E+032.31E+051.79E+072.24E-011.55E+031.08E+061.63E+08 + 68M3 26.001.38E-011.32E+021.57E+048.57E+055.95E-021.77E+025.97E+045.43E+06 + 68M3 41.003.41E-021.35E+019.75E+023.64E+041.50E-021.84E+013.07E+031.71E+05 + 68M3 53.001.51E-023.75E+002.06E+026.18E+036.90E-035.15E+005.96E+022.54E+04 + 68M3 71.005.84E-038.77E-013.52E+018.24E+022.86E-031.21E+009.47E+013.03E+03 + 68M3 104.001.66E-031.33E-013.58E+006.02E+019.13E-041.86E-019.03E+002.02E+02 + 68M3 150.004.92E-042.22E-024.09E-015.00E+003.07E-043.12E-021.01E+001.63E+01 + 68M3 280.006.45E-051.13E-031.10E-027.91E-024.95E-051.58E-032.76E-022.72E-01 + 68M3 500.001.09E-058.40E-054.58E-042.08E-039.62E-061.10E-041.17E-037.80E-03 + 68M4 2.458.33E+012.96E+051.88E+102.63E+141.56E+013.66E+053.63E+093.13E+12 + 68M4 3.452.89E+015.17E+041.71E+091.33E+135.16E+006.60E+043.62E+082.39E+11 + 68M4 5.456.37E+005.04E+036.85E+072.53E+111.15E+006.64E+031.71E+077.73E+09 + 68M4 9.459.10E-013.07E+021.42E+062.27E+091.82E-014.16E+024.59E+051.28E+08 + 68M4 16.451.13E-011.81E+012.86E+042.11E+072.71E-022.54E+011.28E+042.15E+06 + 68M4 26.001.86E-021.72E+001.14E+034.66E+055.42E-032.51E+006.95E+027.66E+04 + 68M4 41.002.89E-031.63E-014.71E+011.10E+041.06E-032.52E-013.98E+012.87E+03 + 68M4 53.009.91E-044.28E-027.89E+001.36E+034.14E-046.91E-028.08E+004.59E+02 + 68M4 71.002.89E-049.36E-031.05E+001.28E+021.41E-041.59E-021.33E+005.79E+01 + 68M4 104.005.76E-051.29E-037.72E-026.14E+003.39E-052.34E-031.30E-014.00E+00 + 68M4 150.001.22E-051.98E-046.63E-033.51E-018.55E-063.78E-041.44E-023.20E-01 + 68M4 280.008.87E-078.76E-061.18E-043.14E-038.01E-071.74E-053.65E-044.84E-03 + 68M4 500.008.50E-085.59E-073.68E-065.07E-058.93E-081.06E-061.35E-051.16E-04 + 68M5 2.411.26E+023.66E+053.38E+104.28E+149.41E+003.36E+041.89E+101.07E+15 + 68M5 3.414.24E+016.16E+042.95E+092.04E+133.07E+005.96E+031.67E+094.82E+13 + 68M5 5.419.07E+005.79E+031.14E+083.69E+116.79E-015.97E+026.61E+077.89E+11 + 68M5 9.411.25E+003.41E+022.29E+063.16E+091.08E-013.78E+011.38E+065.87E+09 + 68M5 16.411.51E-011.95E+014.48E+042.80E+071.65E-022.39E+002.83E+044.48E+07 + 68M5 26.002.41E-021.79E+001.72E+035.83E+053.35E-032.46E-011.14E+038.36E+05 + 68M5 41.003.68E-031.63E-016.84E+011.31E+046.74E-042.63E-024.78E+011.72E+04 + 68M5 53.001.25E-034.19E-021.11E+011.56E+032.69E-047.55E-038.02E+001.99E+03 + 68M5 71.003.60E-048.86E-031.42E+001.40E+029.40E-051.84E-031.06E+001.76E+02 + 68M5 104.007.05E-051.16E-039.78E-026.15E+002.35E-052.96E-047.57E-027.74E+00 + 68M5 150.001.49E-051.68E-047.68E-033.16E-016.22E-065.29E-056.16E-034.10E-01 + 68M5 280.001.14E-066.87E-061.11E-042.19E-036.60E-073.11E-069.29E-053.16E-03 + 68M5 500.001.20E-074.41E-072.75E-062.61E-059.07E-082.66E-072.32E-064.11E-05 + 68N+ 50.001.82E-022.60E+001.68E+026.63E+031.77E-018.01E+003.88E+021.56E+04 + 68N+ 70.007.08E-035.08E-012.24E+016.21E+026.55E-021.80E+005.24E+011.39E+03 + 68N+ 100.002.68E-039.68E-022.84E+005.54E+012.36E-024.00E-017.10E+001.23E+02 + 68N+ 150.008.76E-041.56E-022.84E-013.77E+007.37E-037.67E-028.16E-018.89E+00 + 68N+ 200.003.99E-044.54E-035.86E-025.95E-013.25E-032.49E-021.91E-011.53E+00 + 68N+ 500.003.90E-051.60E-047.32E-043.22E-032.60E-049.72E-043.33E-031.16E-02 + 69K 60.391.02E+001.70E+005.37E-014.88E-021.15E+011.36E+022.85E+021.28E+02 + 69K 61.099.91E-011.74E+007.31E-011.32E-011.11E+011.30E+022.89E+021.72E+02 + 69K 62.399.40E-011.81E+001.09E+003.87E-011.04E+011.21E+022.92E+022.48E+02 + 69K 65.598.28E-011.89E+001.91E+001.47E+009.02E+001.01E+022.86E+024.06E+02 + 69K 69.397.17E-011.89E+002.68E+003.23E+007.65E+008.17E+012.66E+025.26E+02 + 69K 73.006.30E-011.83E+003.18E+004.95E+006.60E+006.79E+012.42E+025.82E+02 + 69K 79.005.14E-011.67E+003.61E+007.28E+005.25E+005.09E+012.00E+025.93E+02 + 69K 87.004.00E-011.42E+003.65E+008.97E+003.97E+003.58E+011.52E+025.26E+02 + 69K 99.002.86E-011.09E+003.21E+009.22E+002.74E+002.24E+011.00E+023.90E+02 + 69K 112.002.07E-018.12E-012.58E+008.05E+001.92E+001.44E+016.51E+012.68E+02 + 69K 129.001.43E-015.64E-011.87E+006.13E+001.28E+008.66E+003.89E+011.63E+02 + 69K 142.001.11E-014.35E-011.46E+004.85E+009.78E-016.16E+002.71E+011.13E+02 + 69K 159.008.23E-023.17E-011.06E+003.55E+007.11E-014.14E+001.77E+017.22E+01 + 69K 182.005.78E-022.16E-017.16E-012.36E+004.88E-012.59E+001.05E+014.15E+01 + 69K 210.003.99E-021.43E-014.63E-011.49E+003.28E-011.59E+006.09E+002.28E+01 + 69K 275.002.01E-026.63E-022.01E-016.09E-011.57E-016.46E-012.19E+007.30E+00 + 69K 360.001.05E-023.16E-028.88E-022.48E-017.67E-022.72E-018.11E-012.38E+00 + 69K 450.006.24E-031.77E-024.65E-021.20E-014.28E-021.36E-013.66E-019.64E-01 + 69K 560.003.86E-031.04E-022.56E-026.14E-022.44E-027.10E-021.73E-014.12E-01 + 69K 790.001.91E-034.80E-031.07E-022.29E-021.03E-022.67E-025.70E-021.17E-01 + 69K 1050.001.11E-032.67E-035.57E-031.09E-025.12E-031.24E-022.41E-024.47E-02 + 69K 1300.007.61E-041.76E-033.50E-036.42E-033.06E-037.14E-031.31E-022.27E-02 + 69K 1550.005.63E-041.27E-032.42E-034.25E-032.02E-034.59E-038.11E-031.34E-02 + 69L1 11.123.22E+007.19E+023.06E+041.69E+052.39E+027.88E+044.73E+066.32E+07 + 69L1 11.822.91E+005.25E+022.77E+042.80E+051.99E+025.90E+043.39E+065.41E+07 + 69L1 13.122.44E+003.02E+022.07E+043.57E+051.46E+023.60E+041.91E+063.69E+07 + 69L1 16.321.65E+009.05E+018.74E+032.47E+057.60E+011.29E+045.79E+051.33E+07 + 69L1 20.121.10E+002.63E+013.21E+031.11E+054.07E+014.90E+031.85E+054.34E+06 + 69L1 24.007.74E-018.78E+001.27E+034.78E+042.41E+012.19E+037.10E+041.61E+06 + 69L1 30.004.85E-012.18E+003.65E+021.44E+041.24E+017.97E+022.14E+044.45E+05 + 69L1 38.002.89E-016.68E-019.06E+013.61E+036.18E+002.79E+026.11E+031.12E+05 + 69L1 50.001.54E-013.44E-011.73E+016.63E+022.75E+008.45E+011.46E+032.23E+04 + 69L1 63.008.95E-022.42E-014.53E+001.54E+021.40E+003.16E+014.47E+025.80E+03 + 69L1 80.005.02E-021.60E-011.38E+003.45E+016.97E-011.17E+011.35E+021.46E+03 + 69L1 93.003.47E-021.18E-017.50E-011.41E+014.51E-016.34E+006.42E+016.21E+02 + 69L1 110.002.28E-028.08E-024.17E-015.51E+002.78E-013.24E+002.85E+012.42E+02 + 69L1 133.001.42E-025.11E-022.30E-012.10E+001.62E-011.54E+001.16E+018.49E+01 + 69L1 160.008.94E-033.20E-021.32E-019.08E-019.59E-027.62E-014.92E+003.13E+01 + 69L1 225.003.83E-031.30E-024.80E-022.29E-013.72E-022.17E-011.08E+005.30E+00 + 69L1 310.001.77E-035.59E-031.86E-027.03E-021.55E-027.10E-022.79E-011.09E+00 + 69L1 400.009.80E-042.92E-038.89E-032.90E-027.89E-033.05E-021.01E-013.33E-01 + 69L1 510.005.74E-041.62E-034.54E-031.30E-024.19E-031.41E-024.06E-021.15E-01 + 69L1 740.002.68E-047.05E-041.73E-034.17E-031.63E-034.63E-031.10E-022.54E-02 + 69L11000.001.51E-043.78E-048.47E-041.80E-037.71E-041.99E-034.18E-038.41E-03 + 69L11500.007.43E-051.73E-043.47E-046.43E-042.90E-046.85E-041.27E-032.20E-03 + 69L2 10.626.79E+003.95E+049.23E+062.54E+082.68E+013.23E+036.47E+043.24E+05 + 69L2 11.325.71E+002.88E+046.38E+062.09E+082.21E+012.53E+036.03E+045.41E+05 + 69L2 12.624.23E+001.67E+043.39E+061.34E+081.59E+011.66E+034.76E+047.08E+05 + 69L2 15.822.24E+005.45E+039.12E+054.21E+078.01E+006.92E+022.33E+045.30E+05 + 69L2 19.621.20E+001.88E+032.60E+051.22E+074.18E+003.00E+021.03E+042.66E+05 + 69L2 24.006.58E-016.96E+028.05E+043.60E+062.27E+001.37E+024.49E+031.17E+05 + 69L2 30.003.35E-012.33E+022.20E+048.94E+051.16E+005.74E+011.72E+034.27E+04 + 69L2 38.001.61E-017.39E+015.59E+031.99E+055.72E-012.29E+016.04E+021.36E+04 + 69L2 50.006.83E-021.97E+011.15E+033.43E+042.52E-017.92E+001.75E+023.38E+03 + 69L2 63.003.28E-026.53E+003.08E+027.77E+031.27E-013.25E+006.13E+011.02E+03 + 69L2 80.001.52E-022.12E+007.96E+011.68E+036.24E-021.30E+002.06E+012.90E+02 + 69L2 93.009.38E-031.05E+003.42E+016.43E+024.00E-027.34E-011.04E+011.31E+02 + 69L2 110.005.46E-034.81E-011.35E+012.22E+022.44E-023.89E-014.84E+005.41E+01 + 69L2 133.002.96E-032.02E-014.74E+006.74E+011.40E-021.90E-012.05E+001.99E+01 + 69L2 160.001.64E-038.76E-021.74E+002.14E+018.18E-039.57E-028.97E-017.59E+00 + 69L2 225.005.55E-041.95E-022.87E-012.71E+003.05E-032.74E-021.99E-011.31E+00 + 69L2 310.002.06E-044.96E-035.60E-024.16E-011.21E-038.65E-035.01E-022.64E-01 + 69L2 400.009.56E-051.74E-031.60E-029.93E-025.87E-043.53E-031.73E-027.65E-02 + 69L2 510.004.70E-056.64E-045.10E-032.68E-022.95E-041.53E-036.43E-032.45E-02 + 69L2 740.001.64E-051.64E-049.70E-044.06E-031.04E-044.43E-041.50E-034.64E-03 + 69L21000.007.39E-065.66E-052.77E-049.85E-044.49E-051.68E-044.93E-041.31E-03 + 69L21500.002.63E-061.50E-055.87E-051.72E-041.46E-054.76E-051.19E-042.67E-04 + 69L3 9.651.47E+018.96E+042.45E+077.80E+085.74E+001.09E+051.83E+083.22E+10 + 69L3 10.351.21E+016.29E+041.61E+076.02E+084.63E+007.72E+041.14E+081.88E+10 + 69L3 11.658.55E+003.45E+047.90E+063.48E+083.22E+004.27E+045.10E+077.59E+09 + 69L3 14.854.17E+001.01E+041.84E+069.19E+071.53E+001.27E+049.96E+061.19E+09 + 69L3 18.652.09E+003.20E+034.66E+052.31E+077.59E-014.09E+032.18E+062.11E+08 + 69L3 24.009.52E-018.97E+021.02E+054.64E+063.50E-011.17E+034.10E+053.16E+07 + 69L3 30.004.69E-012.91E+022.65E+041.08E+061.77E-013.84E+029.53E+045.99E+06 + 69L3 38.002.18E-018.88E+016.39E+032.24E+058.60E-021.19E+022.06E+041.05E+06 + 69L3 50.008.86E-022.24E+011.23E+033.55E+043.73E-023.04E+013.58E+031.42E+05 + 69L3 63.004.11E-027.07E+003.06E+027.45E+031.85E-029.69E+008.35E+022.69E+04 + 69L3 80.001.84E-022.16E+007.33E+011.48E+038.98E-032.98E+001.90E+024.95E+03 + 69L3 93.001.11E-021.02E+002.99E+015.31E+025.70E-031.42E+007.54E+011.73E+03 + 69L3 110.006.30E-034.47E-011.10E+011.70E+023.44E-036.25E-012.73E+015.42E+02 + 69L3 133.003.32E-031.76E-013.57E+004.72E+011.95E-032.47E-018.75E+001.48E+02 + 69L3 160.001.79E-037.14E-021.20E+001.36E+011.12E-031.01E-012.94E+004.29E+01 + 69L3 225.005.78E-041.39E-021.65E-011.41E+004.11E-041.96E-024.10E-014.60E+00 + 69L3 310.002.06E-043.09E-032.67E-021.75E-011.62E-044.32E-036.77E-026.03E-01 + 69L3 400.009.31E-059.74E-046.53E-033.48E-027.83E-051.33E-031.68E-021.26E-01 + 69L3 510.004.50E-053.37E-041.79E-037.92E-033.97E-054.43E-044.57E-032.96E-02 + 69L3 740.001.57E-057.30E-052.75E-049.40E-041.46E-058.86E-056.66E-043.50E-03 + 69L31000.007.18E-062.36E-056.89E-051.94E-046.86E-062.64E-051.49E-046.70E-04 + 69L31500.002.74E-066.11E-061.31E-052.90E-052.69E-066.23E-062.23E-058.04E-05 + 69M1 3.315.13E+002.22E+041.39E+061.83E+081.97E+037.28E+064.81E+097.02E+11 + 69M1 4.313.79E+007.47E+035.61E+053.70E+078.97E+021.99E+068.67E+081.13E+11 + 69M1 6.312.17E+001.45E+031.54E+055.42E+062.86E+023.09E+057.61E+077.82E+09 + 69M1 10.319.26E-011.50E+022.06E+049.60E+056.59E+012.88E+043.60E+062.57E+08 + 69M1 17.313.38E-011.07E+011.73E+038.80E+041.40E+012.47E+031.61E+057.49E+06 + 69M1 26.001.44E-011.14E+001.99E+029.67E+034.19E+003.76E+021.53E+044.99E+05 + 69M1 41.005.22E-021.56E-011.51E+016.52E+021.09E+004.85E+011.20E+032.64E+04 + 69M1 53.002.87E-028.34E-023.48E+001.34E+025.11E-011.58E+013.01E+025.25E+03 + 69M1 71.001.43E-024.64E-027.23E-012.17E+012.17E-014.54E+006.49E+018.75E+02 + 69M1 104.005.59E-032.01E-021.36E-012.26E+007.19E-029.45E-019.42E+009.11E+01 + 69M1 150.002.25E-038.14E-033.87E-023.36E-012.53E-022.24E-011.61E+001.14E+01 + 69M1 280.004.85E-041.58E-035.64E-032.44E-024.50E-032.28E-029.94E-024.31E-01 + 69M1 500.001.29E-043.71E-041.06E-033.17E-039.68E-043.35E-039.94E-032.90E-02 + 69M2 3.091.19E+014.25E+068.49E+092.01E+122.52E+022.60E+054.46E+072.06E+09 + 69M2 4.097.73E+001.05E+061.37E+092.86E+111.09E+027.29E+041.11E+077.43E+08 + 69M2 6.093.63E+001.44E+051.06E+081.77E+103.28E+011.24E+041.50E+061.10E+08 + 69M2 10.091.17E+001.17E+044.46E+065.26E+087.19E+001.40E+031.20E+057.61E+06 + 69M2 17.093.09E-018.61E+021.75E+051.39E+071.48E+001.54E+028.95E+034.23E+05 + 69M2 26.009.76E-021.10E+021.40E+047.98E+054.21E-012.77E+011.16E+034.13E+04 + 69M2 41.002.59E-021.21E+019.48E+023.73E+041.08E-014.48E+001.30E+023.30E+03 + 69M2 53.001.20E-023.53E+002.13E+026.75E+035.06E-021.63E+003.83E+017.97E+02 + 69M2 71.004.86E-038.84E-013.96E+019.84E+022.13E-025.21E-019.65E+001.60E+02 + 69M2 104.001.47E-031.49E-014.60E+008.30E+016.95E-031.20E-011.63E+001.99E+01 + 69M2 150.004.63E-042.82E-026.14E-018.19E+002.39E-033.02E-023.06E-012.80E+00 + 69M2 280.006.66E-051.85E-032.31E-021.88E-013.95E-043.06E-031.94E-021.11E-01 + 69M2 500.001.19E-051.75E-041.38E-037.42E-037.61E-054.03E-041.72E-036.72E-03 + 69M3 2.883.03E+019.12E+061.98E+104.86E+125.10E+011.16E+072.14E+114.12E+14 + 69M3 3.881.77E+012.05E+062.80E+095.92E+112.07E+012.63E+062.73E+103.23E+13 + 69M3 5.887.39E+002.54E+051.90E+083.10E+105.88E+003.30E+051.56E+099.74E+11 + 69M3 9.882.12E+001.86E+046.98E+067.96E+081.21E+002.48E+044.48E+071.35E+10 + 69M3 16.885.04E-011.26E+032.45E+051.87E+072.38E-011.71E+031.20E+061.82E+08 + 69M3 26.001.44E-011.44E+021.71E+049.22E+056.41E-021.99E+026.82E+046.23E+06 + 69M3 41.003.57E-021.47E+011.06E+033.92E+041.61E-022.07E+013.51E+031.95E+05 + 69M3 53.001.58E-024.08E+002.23E+026.66E+037.44E-035.80E+006.78E+022.89E+04 + 69M3 71.006.15E-039.55E-013.83E+018.88E+023.09E-031.37E+001.08E+023.44E+03 + 69M3 104.001.75E-031.45E-013.89E+006.49E+019.84E-042.09E-011.02E+012.29E+02 + 69M3 150.005.23E-042.42E-024.44E-015.40E+003.31E-043.51E-021.14E+001.84E+01 + 69M3 280.006.87E-051.23E-031.19E-028.57E-025.33E-051.77E-033.11E-023.06E-01 + 69M3 500.001.16E-059.15E-054.99E-042.26E-031.04E-051.22E-041.31E-038.74E-03 + 69M4 2.518.04E+012.85E+051.77E+102.43E+141.57E+013.67E+053.55E+092.98E+12 + 69M4 3.512.86E+015.16E+041.69E+091.30E+135.30E+006.87E+043.71E+082.40E+11 + 69M4 5.516.48E+005.20E+037.10E+072.62E+111.21E+007.14E+031.83E+078.14E+09 + 69M4 9.519.47E-013.25E+021.52E+062.46E+091.95E-014.58E+025.06E+051.39E+08 + 69M4 16.511.20E-011.95E+013.13E+042.33E+072.94E-022.83E+011.43E+042.39E+06 + 69M4 26.002.01E-021.89E+001.29E+035.31E+055.97E-032.86E+007.96E+028.74E+04 + 69M4 41.003.15E-031.80E-015.30E+011.25E+041.17E-032.88E-014.56E+013.28E+03 + 69M4 53.001.09E-034.75E-028.88E+001.54E+034.59E-047.89E-029.25E+005.24E+02 + 69M4 71.003.18E-041.04E-021.18E+001.46E+021.56E-041.81E-021.53E+006.61E+01 + 69M4 104.006.32E-051.44E-038.70E-026.99E+003.78E-052.68E-031.49E-014.56E+00 + 69M4 150.001.34E-052.21E-047.48E-034.00E-019.54E-064.32E-041.65E-023.66E-01 + 69M4 280.001.00E-069.85E-061.34E-043.58E-038.96E-071.99E-054.19E-045.55E-03 + 69M4 500.001.03E-076.29E-074.17E-065.79E-051.00E-071.21E-061.55E-051.34E-04 + 69M5 2.471.22E+023.49E+053.21E+103.97E+149.42E+003.32E+041.85E+101.03E+15 + 69M5 3.474.21E+016.10E+042.94E+092.02E+133.15E+006.09E+031.72E+094.93E+13 + 69M5 5.479.23E+005.92E+031.19E+083.84E+117.11E-016.28E+027.13E+078.53E+11 + 69M5 9.471.31E+003.58E+022.47E+063.41E+091.15E-014.08E+011.53E+066.60E+09 + 69M5 16.471.60E-012.08E+014.92E+043.09E+071.77E-022.61E+003.21E+045.15E+07 + 69M5 26.002.61E-021.94E+001.94E+036.62E+053.67E-032.73E-011.33E+039.89E+05 + 69M5 41.004.00E-031.78E-017.72E+011.48E+047.39E-042.93E-025.55E+012.03E+04 + 69M5 53.001.36E-034.59E-021.26E+011.77E+032.96E-048.38E-039.32E+002.35E+03 + 69M5 71.003.93E-049.71E-031.60E+001.59E+021.04E-042.04E-031.23E+002.06E+02 + 69M5 104.007.79E-051.28E-031.10E-016.97E+002.60E-053.29E-048.79E-029.07E+00 + 69M5 150.001.66E-051.86E-048.67E-033.58E-016.88E-065.88E-057.14E-034.79E-01 + 69M5 280.001.24E-067.65E-061.25E-042.49E-037.32E-073.46E-061.07E-043.67E-03 + 69M5 500.001.32E-074.91E-073.09E-062.96E-051.01E-072.96E-072.65E-064.76E-05 + 69N+ 50.001.89E-022.85E+001.84E+027.28E+031.96E-018.95E+004.39E+021.77E+04 + 69N+ 70.007.37E-035.56E-012.45E+016.81E+027.24E-022.00E+005.90E+011.57E+03 + 69N+ 100.002.80E-031.06E-013.11E+006.07E+012.61E-024.45E-017.95E+001.38E+02 + 69N+ 150.009.17E-041.69E-023.11E-014.14E+008.14E-038.50E-029.09E-019.95E+00 + 69N+ 200.004.19E-044.92E-036.43E-026.55E-013.59E-032.76E-022.13E-011.71E+00 + 69N+ 500.004.19E-051.75E-048.14E-043.61E-032.90E-041.09E-033.73E-031.31E-02 + 70K 62.339.57E-011.53E+004.64E-013.93E-021.14E+011.30E+022.62E+021.13E+02 + 70K 63.039.31E-011.57E+006.27E-011.06E-011.10E+011.24E+022.65E+021.51E+02 + 70K 64.338.84E-011.63E+009.30E-013.10E-011.04E+011.16E+022.68E+022.17E+02 + 70K 67.537.82E-011.70E+001.63E+001.19E+009.02E+009.67E+012.64E+023.55E+02 + 70K 71.336.80E-011.70E+002.29E+002.62E+007.69E+007.92E+012.47E+024.62E+02 + 70K 75.005.98E-011.65E+002.74E+004.07E+006.64E+006.59E+012.25E+025.16E+02 + 70K 81.004.91E-011.52E+003.14E+006.05E+005.32E+004.98E+011.88E+025.31E+02 + 70K 89.003.85E-011.31E+003.21E+007.57E+004.05E+003.54E+011.44E+024.78E+02 + 70K 101.002.77E-011.01E+002.87E+007.95E+002.81E+002.24E+019.64E+013.62E+02 + 70K 114.002.02E-017.63E-012.34E+007.08E+001.99E+001.45E+016.35E+012.52E+02 + 70K 131.001.40E-015.36E-011.72E+005.50E+001.34E+008.82E+003.84E+011.56E+02 + 70K 144.001.10E-014.17E-011.36E+004.41E+001.02E+006.31E+002.70E+011.10E+02 + 70K 161.008.19E-023.07E-011.00E+003.28E+007.47E-014.27E+001.77E+017.07E+01 + 70K 184.005.79E-022.11E-016.83E-012.22E+005.14E-012.68E+001.07E+014.11E+01 + 70K 210.004.11E-021.45E-014.61E-011.47E+003.57E-011.71E+006.45E+002.38E+01 + 70K 275.002.08E-026.75E-022.03E-016.09E-011.71E-016.95E-012.33E+007.67E+00 + 70K 360.001.08E-023.24E-029.07E-022.52E-018.31E-022.93E-018.65E-012.51E+00 + 70K 450.006.49E-031.82E-024.79E-021.24E-014.63E-021.47E-013.91E-011.02E+00 + 70K 560.004.02E-031.08E-022.65E-026.35E-022.64E-027.64E-021.85E-014.38E-01 + 70K 790.001.99E-035.01E-031.12E-022.39E-021.11E-022.87E-026.11E-021.25E-01 + 70K 1050.001.16E-032.80E-035.85E-031.14E-025.51E-031.33E-022.59E-024.77E-02 + 70K 1300.007.95E-041.85E-033.69E-036.77E-033.29E-037.68E-031.41E-022.43E-02 + 70K 1550.005.88E-041.33E-032.55E-034.49E-032.16E-034.93E-038.68E-031.43E-02 + 70L1 11.493.02E+006.71E+022.71E+041.39E+052.38E+027.51E+044.34E+065.55E+07 + 70L1 12.192.74E+004.95E+022.48E+042.33E+052.00E+025.68E+043.14E+064.80E+07 + 70L1 13.492.31E+002.91E+021.88E+043.04E+051.47E+023.52E+041.80E+063.33E+07 + 70L1 16.691.58E+009.07E+018.23E+032.20E+057.81E+011.30E+045.63E+051.24E+07 + 70L1 20.491.07E+002.75E+013.13E+031.03E+054.24E+015.01E+031.84E+054.18E+06 + 70L1 24.007.78E-011.05E+011.38E+034.92E+042.65E+012.43E+037.81E+041.73E+06 + 70L1 30.004.89E-012.64E+004.05E+021.52E+041.37E+018.83E+022.36E+044.80E+05 + 70L1 38.002.92E-017.59E-011.03E+023.90E+036.79E+003.09E+026.72E+031.21E+05 + 70L1 50.001.57E-013.47E-012.00E+017.33E+023.03E+009.33E+011.60E+032.42E+04 + 70L1 63.009.12E-022.37E-015.25E+001.72E+021.54E+003.49E+014.90E+026.30E+03 + 70L1 80.005.13E-021.57E-011.56E+003.92E+017.66E-011.29E+011.48E+021.59E+03 + 70L1 93.003.55E-021.16E-018.23E-011.60E+014.95E-016.98E+007.02E+016.75E+02 + 70L1 110.002.35E-028.03E-024.46E-016.21E+003.05E-013.56E+003.11E+012.63E+02 + 70L1 133.001.46E-025.12E-022.41E-012.34E+001.78E-011.69E+001.26E+019.23E+01 + 70L1 160.009.23E-033.23E-021.37E-019.93E-011.05E-018.35E-015.37E+003.40E+01 + 70L1 225.003.97E-031.33E-024.97E-022.45E-014.07E-022.38E-011.17E+005.76E+00 + 70L1 310.001.84E-035.77E-031.93E-027.46E-021.70E-027.77E-023.04E-011.19E+00 + 70L1 400.001.02E-033.04E-039.32E-033.08E-028.63E-033.33E-021.10E-013.62E-01 + 70L1 510.005.99E-041.70E-034.78E-031.38E-024.57E-031.54E-024.41E-021.24E-01 + 70L1 740.002.80E-047.43E-041.83E-034.44E-031.77E-035.04E-031.20E-022.75E-02 + 70L11000.001.59E-044.00E-048.99E-041.92E-038.38E-042.16E-034.54E-039.11E-03 + 70L11500.007.81E-051.83E-043.69E-046.86E-043.14E-047.43E-041.37E-032.38E-03 + 70L2 10.986.39E+003.65E+048.17E+062.15E+082.68E+013.07E+035.88E+042.72E+05 + 70L2 11.685.40E+002.68E+045.72E+061.79E+082.22E+012.43E+035.51E+044.60E+05 + 70L2 12.984.04E+001.59E+043.10E+061.17E+081.61E+011.61E+034.41E+046.15E+05 + 70L2 16.182.17E+005.31E+038.63E+053.82E+078.28E+006.89E+022.22E+044.80E+05 + 70L2 19.981.18E+001.87E+032.53E+051.15E+074.38E+003.04E+021.00E+042.49E+05 + 70L2 24.006.87E-017.59E+028.71E+043.79E+062.52E+001.49E+024.76E+031.20E+05 + 70L2 30.003.51E-012.55E+022.38E+049.51E+051.29E+006.26E+011.84E+034.44E+04 + 70L2 38.001.70E-018.07E+016.07E+032.13E+056.33E-012.50E+016.48E+021.43E+04 + 70L2 50.007.21E-022.15E+011.25E+033.69E+042.79E-018.67E+001.89E+023.59E+03 + 70L2 63.003.47E-027.14E+003.35E+028.38E+031.40E-013.56E+006.63E+011.09E+03 + 70L2 80.001.62E-022.31E+008.68E+011.82E+036.93E-021.43E+002.24E+013.12E+02 + 70L2 93.009.99E-031.15E+003.74E+016.97E+024.45E-028.07E-011.13E+011.41E+02 + 70L2 110.005.82E-035.27E-011.47E+012.41E+022.72E-024.28E-015.28E+005.85E+01 + 70L2 133.003.17E-032.21E-015.19E+007.33E+011.56E-022.10E-012.24E+002.16E+01 + 70L2 160.001.76E-039.62E-021.91E+002.33E+019.11E-031.05E-019.82E-018.25E+00 + 70L2 225.005.98E-042.14E-023.15E-012.96E+003.40E-033.03E-022.19E-011.43E+00 + 70L2 310.002.22E-045.47E-036.16E-024.56E-011.36E-039.59E-035.52E-022.89E-01 + 70L2 400.001.04E-041.92E-031.77E-021.09E-016.58E-043.92E-031.91E-028.41E-02 + 70L2 510.005.10E-057.34E-045.64E-032.96E-023.31E-041.71E-037.12E-032.70E-02 + 70L2 740.001.79E-051.81E-041.08E-034.49E-031.17E-044.94E-041.67E-035.14E-03 + 70L21000.008.04E-066.28E-053.08E-041.09E-035.04E-051.87E-045.49E-041.45E-03 + 70L21500.002.89E-061.66E-056.53E-051.91E-041.64E-055.34E-051.33E-042.98E-04 + 70L3 9.941.39E+018.30E+042.19E+076.69E+085.60E+001.05E+051.69E+082.89E+10 + 70L3 10.641.14E+015.89E+041.46E+075.22E+084.54E+007.50E+041.07E+081.71E+10 + 70L3 11.948.19E+003.29E+047.28E+063.08E+083.19E+004.22E+044.90E+077.08E+09 + 70L3 15.144.06E+009.90E+031.75E+068.43E+071.54E+001.29E+049.92E+061.16E+09 + 70L3 18.942.06E+003.20E+034.54E+052.18E+077.74E-014.23E+032.23E+062.12E+08 + 70L3 24.009.88E-019.69E+021.09E+054.87E+063.75E-011.30E+034.65E+053.57E+07 + 70L3 30.004.88E-013.15E+022.85E+041.14E+061.89E-014.29E+021.08E+056.75E+06 + 70L3 38.002.28E-019.59E+016.86E+032.38E+059.20E-021.33E+022.33E+041.18E+06 + 70L3 50.009.27E-022.43E+011.32E+033.78E+043.99E-023.40E+014.03E+031.59E+05 + 70L3 63.004.31E-027.64E+003.30E+027.93E+031.98E-021.08E+019.40E+023.02E+04 + 70L3 80.001.94E-022.33E+007.89E+011.57E+039.61E-033.33E+002.13E+025.55E+03 + 70L3 93.001.17E-021.10E+003.21E+015.68E+026.11E-031.59E+008.46E+011.93E+03 + 70L3 110.006.63E-034.83E-011.18E+011.82E+023.69E-036.97E-013.06E+016.06E+02 + 70L3 133.003.51E-031.90E-013.85E+005.05E+012.09E-032.76E-019.80E+001.66E+02 + 70L3 160.001.89E-037.72E-021.30E+001.46E+011.20E-031.12E-013.29E+004.79E+01 + 70L3 225.006.12E-041.50E-021.78E-011.51E+004.40E-042.18E-024.58E-015.12E+00 + 70L3 310.002.18E-043.34E-032.88E-021.88E-011.73E-044.79E-037.54E-026.71E-01 + 70L3 400.009.90E-051.05E-037.05E-033.75E-028.37E-051.47E-031.87E-021.40E-01 + 70L3 510.004.79E-053.63E-041.93E-038.54E-034.25E-054.89E-045.08E-033.29E-02 + 70L3 740.001.67E-057.87E-052.97E-041.01E-031.56E-059.73E-057.38E-043.88E-03 + 70L31000.007.68E-062.54E-057.43E-052.10E-047.31E-062.88E-051.65E-047.42E-04 + 70L31500.002.93E-066.54E-061.42E-053.13E-052.86E-066.76E-062.45E-058.88E-05 + 70M1 3.404.86E+002.16E+041.37E+061.59E+082.01E+037.17E+064.61E+096.52E+11 + 70M1 4.403.62E+007.46E+035.55E+053.53E+079.30E+022.02E+068.65E+081.09E+11 + 70M1 6.402.10E+001.49E+031.53E+055.39E+063.03E+023.24E+057.90E+077.96E+09 + 70M1 10.409.13E-011.61E+022.12E+049.57E+057.09E+013.10E+043.86E+062.72E+08 + 70M1 17.403.38E-011.20E+011.83E+039.07E+041.53E+012.70E+031.75E+058.08E+06 + 70M1 27.001.34E-011.11E+001.81E+028.45E+034.13E+003.53E+021.38E+044.34E+05 + 70M1 42.005.03E-021.59E-011.51E+016.25E+021.12E+004.85E+011.18E+032.51E+04 + 70M1 54.002.81E-028.20E-023.64E+001.34E+025.34E-011.62E+013.03E+025.18E+03 + 70M1 72.001.42E-024.51E-027.78E-012.27E+012.30E-014.75E+006.69E+018.88E+02 + 70M1 105.005.62E-031.97E-021.44E-012.44E+007.72E-021.01E+009.93E+009.50E+01 + 70M1 150.002.32E-038.26E-034.10E-023.75E-012.79E-022.47E-011.78E+001.26E+01 + 70M1 280.005.05E-041.63E-035.92E-032.63E-024.95E-032.50E-021.09E-014.72E-01 + 70M1 500.001.36E-043.89E-041.13E-033.40E-031.06E-033.67E-031.09E-023.17E-02 + 70M2 3.171.13E+014.07E+067.92E+091.82E+122.58E+022.57E+054.28E+071.86E+09 + 70M2 4.177.44E+001.04E+061.33E+092.71E+111.14E+027.43E+041.10E+077.02E+08 + 70M2 6.173.57E+001.47E+051.08E+081.75E+103.50E+011.30E+041.53E+061.09E+08 + 70M2 10.171.18E+001.23E+044.67E+065.41E+087.79E+001.50E+031.26E+057.81E+06 + 70M2 17.173.16E-019.22E+021.87E+051.47E+071.62E+001.67E+029.55E+034.44E+05 + 70M2 27.009.16E-021.00E+021.23E+046.73E+054.19E-012.63E+011.06E+033.62E+04 + 70M2 42.002.54E-021.18E+019.03E+023.46E+041.12E-014.50E+001.27E+023.13E+03 + 70M2 54.001.19E-023.55E+002.10E+026.51E+035.34E-021.67E+003.84E+017.82E+02 + 70M2 72.004.94E-039.11E-014.02E+019.82E+022.28E-025.45E-019.92E+001.61E+02 + 70M2 105.001.52E-031.58E-014.80E+008.56E+017.56E-031.28E-011.72E+002.07E+01 + 70M2 150.004.98E-043.11E-026.77E-019.00E+002.68E-033.35E-023.37E-013.07E+00 + 70M2 280.007.21E-052.05E-032.56E-022.08E-014.44E-043.41E-032.15E-021.23E-01 + 70M2 500.001.29E-051.94E-041.53E-038.24E-038.58E-054.51E-041.92E-037.45E-03 + 70M3 2.952.92E+018.86E+061.88E+104.51E+125.12E+011.17E+072.12E+113.99E+14 + 70M3 3.951.73E+012.05E+062.76E+095.70E+112.12E+012.72E+062.81E+103.29E+13 + 70M3 5.957.32E+002.61E+051.94E+083.11E+106.11E+003.52E+051.66E+091.04E+12 + 70M3 9.952.14E+001.96E+047.30E+068.20E+081.28E+002.70E+044.92E+071.48E+10 + 70M3 16.955.15E-011.34E+032.60E+051.95E+072.53E-011.89E+031.34E+062.04E+08 + 70M3 27.001.34E-011.30E+021.47E+047.63E+056.15E-021.86E+026.08E+045.34E+06 + 70M3 42.003.47E-021.42E+019.91E+023.57E+041.61E-022.07E+013.42E+031.86E+05 + 70M3 54.001.57E-024.05E+002.16E+026.30E+037.56E-035.95E+006.85E+022.87E+04 + 70M3 72.006.19E-039.70E-013.81E+018.69E+023.18E-031.44E+001.12E+023.53E+03 + 70M3 105.001.80E-031.50E-013.98E+006.56E+011.03E-032.24E-011.09E+012.42E+02 + 70M3 150.005.56E-042.63E-024.82E-015.83E+003.57E-043.94E-021.28E+002.07E+01 + 70M3 280.007.37E-051.34E-031.30E-029.27E-025.74E-051.98E-033.50E-023.44E-01 + 70M3 500.001.25E-059.94E-055.42E-042.45E-031.12E-051.36E-041.47E-039.79E-03 + 70M4 2.587.78E+012.75E+051.67E+102.26E+141.57E+013.69E+053.49E+092.85E+12 + 70M4 3.582.84E+015.16E+041.67E+091.29E+135.45E+007.15E+043.81E+082.42E+11 + 70M4 5.586.58E+005.37E+037.36E+072.73E+111.27E+007.68E+031.96E+078.58E+09 + 70M4 9.589.86E-013.44E+021.63E+062.65E+092.08E-015.04E+025.57E+051.52E+08 + 70M4 16.581.27E-012.10E+013.42E+042.57E+073.18E-023.17E+011.60E+042.65E+06 + 70M4 27.001.87E-021.71E+001.11E+034.41E+055.75E-032.70E+007.17E+027.57E+04 + 70M4 42.003.11E-031.75E-015.03E+011.16E+041.18E-032.90E-014.48E+013.14E+03 + 70M4 54.001.10E-034.77E-028.77E+001.51E+034.74E-048.19E-029.41E+005.23E+02 + 70M4 72.003.29E-041.07E-021.20E+001.48E+021.65E-041.93E-021.60E+006.82E+01 + 70M4 105.006.69E-051.53E-039.17E-027.36E+004.05E-052.91E-031.61E-014.87E+00 + 70M4 150.001.48E-052.47E-048.41E-034.54E-011.06E-054.93E-041.88E-024.17E-01 + 70M4 280.001.12E-061.10E-051.51E-044.08E-031.00E-062.28E-054.80E-046.35E-03 + 70M4 500.001.11E-077.05E-074.71E-066.59E-051.12E-071.38E-061.78E-051.53E-04 + 70M5 2.531.18E+023.33E+053.04E+103.69E+149.43E+003.26E+041.82E+109.87E+14 + 70M5 3.534.16E+016.03E+042.93E+091.99E+133.22E+006.21E+031.77E+095.03E+13 + 70M5 5.539.37E+006.05E+031.24E+083.99E+117.44E-016.61E+027.67E+079.20E+11 + 70M5 9.531.36E+003.74E+022.66E+063.68E+091.23E-014.38E+011.70E+067.41E+09 + 70M5 16.531.69E-012.21E+015.40E+043.40E+071.91E-022.84E+003.63E+045.91E+07 + 70M5 27.002.41E-021.73E+001.67E+035.47E+053.51E-032.51E-011.18E+038.44E+05 + 70M5 42.003.92E-031.71E-017.34E+011.37E+047.44E-042.88E-025.45E+011.95E+04 + 70M5 54.001.37E-034.54E-021.24E+011.71E+033.04E-048.48E-039.49E+002.36E+03 + 70M5 72.004.06E-049.87E-031.64E+001.60E+021.08E-042.11E-031.29E+002.15E+02 + 70M5 105.008.15E-051.34E-031.16E-017.30E+002.77E-053.48E-049.53E-029.81E+00 + 70M5 150.001.79E-052.04E-049.77E-034.05E-017.59E-066.52E-058.25E-035.58E-01 + 70M5 280.001.39E-068.48E-061.41E-042.82E-038.09E-073.84E-061.23E-044.26E-03 + 70M5 500.001.59E-075.45E-073.50E-063.34E-051.11E-073.28E-073.02E-065.50E-05 + 70N+ 50.001.97E-023.12E+002.02E+028.01E+032.17E-011.00E+014.98E+022.02E+04 + 70N+ 70.007.69E-036.08E-012.69E+017.47E+028.01E-022.24E+006.66E+011.78E+03 + 70N+ 100.002.92E-031.15E-013.42E+006.66E+012.89E-024.95E-018.92E+001.56E+02 + 70N+ 150.009.01E-041.77E-023.36E-014.54E+008.50E-039.21E-021.03E+001.18E+01 + 70N+ 200.004.40E-045.34E-037.07E-027.20E-013.97E-033.06E-022.36E-011.90E+00 + 70N+ 500.004.57E-051.92E-049.00E-043.99E-033.33E-041.23E-034.13E-031.42E-02 + 71K 64.318.98E-011.37E+004.03E-013.22E-021.13E+011.24E+022.41E+021.00E+02 + 71K 65.018.74E-011.41E+005.41E-018.63E-021.10E+011.19E+022.44E+021.33E+02 + 71K 66.318.32E-011.46E+007.98E-012.51E-011.03E+011.11E+022.47E+021.91E+02 + 71K 69.517.39E-011.53E+001.39E+009.59E-019.03E+009.31E+012.43E+023.11E+02 + 71K 73.316.45E-011.54E+001.97E+002.13E+007.73E+007.67E+012.29E+024.08E+02 + 71K 77.005.70E-011.50E+002.37E+003.34E+006.70E+006.42E+012.10E+024.58E+02 + 71K 83.004.70E-011.39E+002.73E+005.03E+005.39E+004.89E+011.77E+024.77E+02 + 71K 91.003.71E-011.20E+002.83E+006.40E+004.13E+003.50E+011.37E+024.35E+02 + 71K 103.002.69E-019.42E-012.57E+006.87E+002.89E+002.24E+019.30E+013.35E+02 + 71K 116.001.98E-017.18E-012.13E+006.24E+002.06E+001.46E+016.20E+012.38E+02 + 71K 133.001.38E-015.10E-011.59E+004.95E+001.39E+008.99E+003.80E+011.50E+02 + 71K 146.001.08E-013.99E-011.27E+004.02E+001.07E+006.46E+002.69E+011.06E+02 + 71K 163.008.15E-022.96E-019.46E-013.03E+007.85E-014.40E+001.78E+016.92E+01 + 71K 186.005.79E-022.05E-016.52E-012.08E+005.43E-012.78E+001.08E+014.07E+01 + 71K 215.003.99E-021.37E-014.27E-011.34E+003.63E-011.70E+006.25E+002.24E+01 + 71K 280.002.06E-026.54E-021.94E-015.76E-011.77E-017.06E-012.32E+007.47E+00 + 71K 365.001.09E-023.21E-028.89E-022.45E-018.70E-023.02E-018.77E-012.51E+00 + 71K 450.006.73E-031.88E-024.93E-021.27E-015.02E-021.58E-014.18E-011.08E+00 + 71K 560.004.18E-031.12E-022.75E-026.58E-022.86E-028.23E-021.98E-014.65E-01 + 71K 790.002.08E-035.24E-031.17E-022.50E-021.20E-023.09E-026.54E-021.33E-01 + 71K 1050.001.22E-032.94E-036.14E-031.20E-025.93E-031.43E-022.77E-025.09E-02 + 71K 1300.008.31E-041.95E-033.88E-037.13E-033.53E-038.25E-031.51E-022.59E-02 + 71K 1550.006.15E-041.40E-032.69E-034.73E-032.32E-035.29E-039.30E-031.53E-02 + 71L1 11.872.83E+006.25E+022.41E+041.16E+052.37E+027.16E+043.97E+064.89E+07 + 71L1 12.572.58E+004.67E+022.22E+041.95E+052.00E+025.46E+042.91E+064.25E+07 + 71L1 13.872.18E+002.79E+021.71E+042.60E+051.49E+023.43E+041.70E+063.00E+07 + 71L1 17.071.51E+009.07E+017.73E+031.96E+058.03E+011.30E+045.46E+051.16E+07 + 71L1 20.871.03E+002.86E+013.04E+039.51E+044.41E+015.11E+031.83E+054.01E+06 + 71L1 24.007.81E-011.24E+011.49E+035.05E+042.91E+012.69E+038.59E+041.85E+06 + 71L1 30.004.93E-013.19E+004.46E+021.60E+041.50E+019.79E+022.59E+045.17E+05 + 71L1 38.002.96E-018.79E-011.16E+024.20E+037.47E+003.41E+027.37E+031.31E+05 + 71L1 50.001.59E-013.57E-012.30E+018.07E+023.33E+001.03E+021.76E+032.63E+04 + 71L1 63.009.30E-022.34E-016.07E+001.93E+021.69E+003.84E+015.37E+026.84E+03 + 71L1 80.005.25E-021.54E-011.77E+004.43E+018.42E-011.42E+011.62E+021.73E+03 + 71L1 93.003.64E-021.15E-019.11E-011.81E+015.44E-017.68E+007.69E+017.34E+02 + 71L1 110.002.41E-027.99E-024.80E-017.00E+003.36E-013.92E+003.41E+012.86E+02 + 71L1 133.001.51E-025.13E-022.54E-012.60E+001.95E-011.86E+001.38E+011.00E+02 + 71L1 160.009.52E-033.26E-021.43E-011.09E+001.16E-019.16E-015.87E+003.70E+01 + 71L1 225.004.12E-031.36E-025.17E-022.63E-014.47E-022.61E-011.28E+006.26E+00 + 71L1 310.001.91E-035.95E-032.02E-027.94E-021.86E-028.49E-023.32E-011.29E+00 + 71L1 400.001.07E-033.16E-039.77E-033.27E-029.44E-033.63E-021.20E-013.93E-01 + 71L1 510.006.27E-041.77E-035.03E-031.47E-025.00E-031.68E-024.80E-021.35E-01 + 71L1 740.002.94E-047.81E-041.94E-034.73E-031.93E-035.49E-031.30E-022.98E-02 + 71L11000.001.67E-044.22E-049.55E-042.04E-039.11E-042.35E-034.92E-039.87E-03 + 71L11500.008.20E-051.94E-043.93E-047.33E-043.39E-048.06E-041.49E-032.58E-03 + 71L2 11.356.01E+003.37E+047.24E+061.83E+082.67E+012.93E+035.36E+042.32E+05 + 71L2 12.055.11E+002.50E+045.13E+061.53E+082.23E+012.33E+035.05E+043.96E+05 + 71L2 13.353.85E+001.50E+042.83E+061.02E+081.64E+011.57E+034.09E+045.37E+05 + 71L2 16.552.11E+005.17E+038.15E+053.47E+078.55E+006.85E+022.12E+044.35E+05 + 71L2 20.351.16E+001.86E+032.46E+051.07E+074.58E+003.08E+029.80E+032.33E+05 + 71L2 24.007.16E-018.28E+029.42E+044.00E+062.79E+001.62E+025.03E+031.23E+05 + 71L2 30.003.67E-012.78E+022.58E+041.01E+061.42E+006.83E+011.96E+034.62E+04 + 71L2 38.001.78E-018.81E+016.59E+032.28E+057.02E-012.73E+016.95E+021.50E+04 + 71L2 50.007.60E-022.35E+011.36E+033.96E+043.10E-019.48E+002.04E+023.81E+03 + 71L2 63.003.67E-027.81E+003.65E+029.03E+031.56E-013.90E+007.18E+011.16E+03 + 71L2 80.001.72E-022.53E+009.46E+011.97E+037.70E-021.57E+002.43E+013.35E+02 + 71L2 93.001.06E-021.25E+004.08E+017.55E+024.95E-028.86E-011.23E+011.52E+02 + 71L2 110.006.21E-035.78E-011.61E+012.61E+023.02E-024.70E-015.75E+006.32E+01 + 71L2 133.003.39E-032.43E-015.68E+007.97E+011.74E-022.31E-012.45E+002.34E+01 + 71L2 160.001.88E-031.05E-012.09E+002.54E+011.02E-021.16E-011.07E+008.96E+00 + 71L2 225.006.45E-042.35E-023.46E-013.24E+003.80E-033.34E-022.40E-011.56E+00 + 71L2 310.002.41E-046.02E-036.78E-025.01E-011.52E-031.06E-026.08E-023.17E-01 + 71L2 400.001.12E-042.12E-031.95E-021.20E-017.37E-044.36E-032.10E-029.25E-02 + 71L2 510.005.53E-058.11E-046.23E-033.26E-023.71E-041.90E-037.88E-032.97E-02 + 71L2 740.001.97E-052.01E-041.19E-034.97E-031.31E-045.51E-041.86E-035.68E-03 + 71L21000.008.75E-066.96E-053.42E-041.21E-035.67E-052.10E-046.12E-041.61E-03 + 71L21500.003.18E-061.85E-057.27E-052.13E-041.84E-055.98E-051.49E-043.32E-04 + 71L3 10.241.31E+017.71E+041.96E+075.79E+085.46E+001.01E+051.57E+082.60E+10 + 71L3 10.941.09E+015.52E+041.32E+074.55E+084.46E+007.29E+041.01E+081.57E+10 + 71L3 12.247.85E+003.13E+046.71E+062.73E+083.16E+004.16E+044.71E+076.62E+09 + 71L3 15.443.95E+009.68E+031.66E+067.74E+071.55E+001.31E+049.87E+061.13E+09 + 71L3 19.242.03E+003.19E+034.43E+052.06E+077.88E-014.37E+032.27E+062.12E+08 + 71L3 24.001.03E+001.05E+031.17E+055.11E+064.00E-011.45E+035.27E+054.03E+07 + 71L3 30.005.07E-013.40E+023.06E+041.20E+062.02E-014.79E+021.22E+057.60E+06 + 71L3 38.002.37E-011.04E+027.37E+032.52E+059.83E-021.48E+022.63E+041.32E+06 + 71L3 50.009.69E-022.62E+011.42E+034.01E+044.26E-023.79E+014.54E+031.79E+05 + 71L3 63.004.51E-028.25E+003.54E+028.44E+032.11E-021.21E+011.06E+033.38E+04 + 71L3 80.002.03E-022.52E+008.48E+011.68E+031.03E-023.71E+002.39E+026.21E+03 + 71L3 93.001.23E-021.19E+003.45E+016.05E+026.53E-031.77E+009.50E+012.16E+03 + 71L3 110.006.98E-035.21E-011.27E+011.95E+023.94E-037.77E-013.43E+016.77E+02 + 71L3 133.003.70E-032.05E-014.14E+005.40E+012.23E-033.07E-011.10E+011.85E+02 + 71L3 160.002.00E-038.35E-021.39E+001.56E+011.29E-031.25E-013.68E+005.34E+01 + 71L3 225.006.49E-041.62E-021.92E-011.62E+004.71E-042.42E-025.11E-015.71E+00 + 71L3 310.002.32E-043.61E-033.11E-022.02E-011.85E-045.31E-038.40E-027.46E-01 + 71L3 400.001.05E-041.13E-037.60E-034.03E-028.95E-051.63E-032.08E-021.56E-01 + 71L3 510.005.11E-053.92E-042.08E-039.19E-034.54E-055.40E-045.65E-033.65E-02 + 71L3 740.001.78E-058.47E-053.20E-041.09E-031.67E-051.07E-048.18E-044.30E-03 + 71L31000.008.13E-062.73E-058.00E-052.26E-047.79E-063.15E-051.82E-048.21E-04 + 71L31500.003.12E-067.01E-061.52E-053.38E-053.04E-067.32E-062.70E-059.81E-05 + 71M1 3.494.63E+002.11E+041.36E+061.40E+082.04E+037.06E+064.42E+096.08E+11 + 71M1 4.493.48E+007.45E+035.54E+053.37E+079.65E+022.05E+068.62E+081.06E+11 + 71M1 6.492.04E+001.54E+031.54E+055.39E+063.20E+023.39E+058.19E+078.10E+09 + 71M1 10.499.00E-011.72E+022.18E+049.57E+057.62E+013.33E+044.13E+062.87E+08 + 71M1 17.493.37E-011.35E+011.95E+039.36E+041.66E+012.95E+031.91E+058.72E+06 + 71M1 27.001.36E-011.33E+002.02E+029.14E+034.56E+003.95E+021.54E+044.83E+05 + 71M1 42.005.13E-021.76E-011.73E+016.93E+021.23E+005.40E+011.31E+032.78E+04 + 71M1 54.002.87E-028.50E-024.21E+001.50E+025.90E-011.80E+013.36E+025.73E+03 + 71M1 72.001.45E-024.53E-028.97E-012.58E+012.54E-015.27E+007.41E+019.80E+02 + 71M1 105.005.79E-031.98E-021.60E-012.77E+008.52E-021.11E+001.10E+011.05E+02 + 71M1 150.002.41E-038.38E-034.38E-024.20E-013.08E-022.73E-011.96E+001.38E+01 + 71M1 280.005.27E-041.69E-036.24E-032.85E-025.45E-032.75E-021.20E-015.17E-01 + 71M1 500.001.43E-044.08E-041.19E-033.64E-031.17E-034.02E-031.19E-023.46E-02 + 71M2 3.261.07E+013.87E+067.30E+091.63E+122.63E+022.53E+054.07E+071.67E+09 + 71M2 4.267.15E+001.02E+061.28E+092.54E+111.18E+027.52E+041.08E+076.59E+08 + 71M2 6.263.50E+001.50E+051.09E+081.73E+103.72E+011.36E+041.56E+061.07E+08 + 71M2 10.261.18E+001.29E+044.85E+065.54E+088.43E+001.60E+031.32E+057.99E+06 + 71M2 17.263.23E-019.85E+021.99E+051.54E+071.77E+001.80E+021.02E+044.65E+05 + 71M2 27.009.56E-021.10E+021.35E+047.33E+054.66E-012.90E+011.16E+033.92E+04 + 71M2 42.002.68E-021.30E+019.90E+023.77E+041.25E-014.96E+001.39E+023.40E+03 + 71M2 54.001.26E-023.90E+002.30E+027.10E+035.95E-021.84E+004.21E+018.49E+02 + 71M2 72.005.25E-031.00E+004.41E+011.07E+032.55E-026.03E-011.09E+011.75E+02 + 71M2 105.001.63E-031.73E-015.28E+009.37E+018.45E-031.42E-011.89E+002.26E+01 + 71M2 150.005.35E-043.43E-027.46E-019.87E+003.00E-033.71E-023.71E-013.36E+00 + 71M2 280.007.80E-052.27E-032.83E-022.29E-014.99E-043.80E-032.38E-021.35E-01 + 71M2 500.001.42E-052.16E-041.70E-039.13E-039.67E-055.04E-042.14E-038.27E-03 + 71M3 3.022.80E+018.49E+061.76E+104.10E+125.10E+011.16E+072.05E+113.79E+14 + 71M3 4.021.68E+012.03E+062.69E+095.41E+112.15E+012.79E+062.84E+103.29E+13 + 71M3 6.027.22E+002.66E+051.96E+083.07E+106.32E+003.72E+051.75E+091.09E+12 + 71M3 10.022.15E+002.05E+047.59E+068.38E+081.34E+002.92E+045.36E+071.61E+10 + 71M3 17.025.25E-011.43E+032.75E+052.04E+072.68E-012.08E+031.49E+062.26E+08 + 71M3 27.001.39E-011.41E+021.59E+048.20E+056.61E-022.09E+026.94E+046.11E+06 + 71M3 42.003.63E-021.54E+011.07E+033.84E+041.73E-022.33E+013.89E+032.11E+05 + 71M3 54.001.64E-024.40E+002.34E+026.77E+038.13E-036.69E+007.78E+023.26E+04 + 71M3 72.006.51E-031.05E+004.13E+019.34E+023.42E-031.61E+001.27E+023.99E+03 + 71M3 105.001.90E-031.64E-014.32E+007.06E+011.11E-032.52E-011.23E+012.73E+02 + 71M3 150.005.90E-042.86E-025.22E-016.29E+003.84E-044.42E-021.45E+002.33E+01 + 71M3 280.007.84E-051.46E-031.41E-021.00E-016.18E-052.21E-033.93E-023.86E-01 + 71M3 500.001.34E-051.08E-045.89E-042.66E-031.20E-051.51E-041.64E-031.09E-02 + 71M4 2.647.52E+012.65E+051.58E+102.10E+141.58E+013.71E+053.42E+092.73E+12 + 71M4 3.642.80E+015.15E+041.66E+091.26E+135.59E+007.43E+043.91E+082.43E+11 + 71M4 5.646.68E+005.54E+037.61E+072.83E+111.33E+008.23E+032.09E+079.02E+09 + 71M4 9.641.02E+003.63E+021.74E+062.86E+092.22E-015.54E+026.12E+051.65E+08 + 71M4 16.641.34E-012.25E+013.73E+042.83E+073.44E-023.53E+011.79E+042.94E+06 + 71M4 27.002.02E-021.88E+001.24E+035.00E+056.32E-033.06E+008.19E+028.61E+04 + 71M4 42.003.37E-031.93E-015.64E+011.32E+041.30E-033.30E-015.11E+013.57E+03 + 71M4 54.001.19E-035.27E-029.83E+001.71E+035.23E-049.31E-021.07E+015.94E+02 + 71M4 72.003.59E-041.19E-021.35E+001.68E+021.82E-042.19E-021.82E+007.76E+01 + 71M4 105.007.32E-051.70E-031.03E-018.34E+004.49E-053.32E-031.83E-015.54E+00 + 71M4 150.001.63E-052.76E-049.45E-035.15E-011.18E-055.62E-042.15E-024.76E-01 + 71M4 280.001.23E-061.24E-051.70E-044.63E-031.12E-062.60E-055.49E-047.25E-03 + 71M4 500.001.18E-078.01E-075.30E-067.49E-051.25E-071.58E-062.04E-051.76E-04 + 71M5 2.591.14E+023.18E+052.88E+103.42E+149.42E+003.21E+041.78E+109.46E+14 + 71M5 3.594.12E+015.95E+042.91E+091.95E+133.29E+006.31E+031.82E+095.12E+13 + 71M5 5.599.49E+006.16E+031.29E+084.13E+117.77E-016.93E+028.23E+079.89E+11 + 71M5 9.591.40E+003.91E+022.86E+063.96E+091.30E-014.70E+011.89E+068.29E+09 + 71M5 16.591.78E-012.35E+015.92E+043.73E+072.05E-023.09E+004.10E+046.75E+07 + 71M5 27.002.59E-021.88E+001.88E+036.18E+053.83E-032.78E-011.37E+039.93E+05 + 71M5 42.004.25E-031.86E-018.26E+011.55E+048.13E-043.19E-026.31E+012.29E+04 + 71M5 54.001.49E-034.94E-021.40E+011.93E+033.33E-049.38E-031.10E+012.76E+03 + 71M5 72.004.42E-041.08E-021.84E+001.81E+021.19E-042.33E-031.49E+002.52E+02 + 71M5 105.008.92E-051.46E-031.31E-018.24E+003.04E-053.85E-041.10E-011.14E+01 + 71M5 150.001.98E-052.25E-041.10E-024.57E-018.35E-067.21E-059.52E-036.49E-01 + 71M5 280.001.54E-069.30E-061.58E-043.18E-038.92E-074.25E-061.41E-044.93E-03 + 71M5 500.001.72E-075.96E-073.91E-063.77E-051.23E-073.64E-073.43E-066.34E-05 + 71N+ 50.002.06E-023.45E+002.24E+028.99E+032.41E-011.12E+015.69E+022.34E+04 + 71N+ 70.008.07E-036.74E-012.99E+018.35E+028.91E-022.51E+007.58E+012.05E+03 + 71N+ 100.003.07E-031.27E-013.79E+007.41E+013.21E-025.54E-011.01E+011.78E+02 + 71N+ 150.009.37E-041.92E-023.68E-014.98E+009.34E-031.02E-011.15E+001.32E+01 + 71N+ 200.004.63E-045.84E-037.84E-028.00E-014.40E-033.40E-022.64E-012.14E+00 + 71N+ 500.004.86E-052.08E-049.91E-044.42E-033.68E-041.36E-034.58E-031.58E-02 + 72K 66.358.43E-011.24E+003.50E-012.65E-021.13E+011.18E+022.22E+028.91E+01 + 72K 67.058.22E-011.27E+004.67E-017.04E-021.09E+011.14E+022.24E+021.17E+02 + 72K 68.357.83E-011.32E+006.85E-012.03E-011.03E+011.06E+022.27E+021.67E+02 + 72K 71.556.98E-011.38E+001.19E+007.77E-019.03E+008.97E+012.25E+022.72E+02 + 72K 75.356.12E-011.39E+001.69E+001.74E+007.77E+007.43E+012.12E+023.59E+02 + 72K 79.005.43E-011.36E+002.04E+002.73E+006.77E+006.26E+011.96E+024.06E+02 + 72K 85.004.51E-011.27E+002.38E+004.18E+005.48E+004.80E+011.66E+024.27E+02 + 72K 93.003.58E-011.11E+002.49E+005.41E+004.23E+003.47E+011.31E+023.96E+02 + 72K 105.002.62E-018.77E-012.30E+005.93E+002.98E+002.24E+018.98E+013.11E+02 + 72K 118.001.93E-016.76E-011.93E+005.50E+002.13E+001.48E+016.06E+012.24E+02 + 72K 135.001.36E-014.85E-011.47E+004.45E+001.45E+009.16E+003.76E+011.43E+02 + 72K 148.001.07E-013.82E-011.18E+003.66E+001.12E+006.62E+002.68E+011.03E+02 + 72K 165.008.11E-022.86E-018.92E-012.80E+008.25E-014.53E+001.79E+016.77E+01 + 72K 188.005.79E-022.00E-016.23E-011.96E+005.73E-012.89E+001.10E+014.03E+01 + 72K 215.004.11E-021.38E-014.24E-011.32E+003.95E-011.83E+006.62E+002.33E+01 + 72K 280.002.13E-026.66E-021.95E-015.76E-011.92E-017.59E-012.46E+007.84E+00 + 72K 365.001.13E-023.29E-029.07E-022.49E-019.43E-023.25E-019.34E-012.64E+00 + 72K 460.006.65E-031.84E-024.78E-021.22E-015.14E-021.59E-014.13E-011.05E+00 + 72K 570.004.19E-031.11E-022.72E-026.46E-022.95E-028.41E-022.00E-014.61E-01 + 72K 800.002.11E-035.32E-031.19E-022.53E-021.25E-023.21E-026.72E-021.35E-01 + 72K 1050.001.27E-033.08E-036.45E-031.26E-026.39E-031.54E-022.97E-025.42E-02 + 72K 1300.008.69E-042.04E-034.08E-037.50E-033.80E-038.86E-031.61E-022.77E-02 + 72K 1550.006.43E-041.47E-032.84E-034.99E-032.49E-035.68E-039.96E-031.63E-02 + 72L1 12.272.65E+005.81E+022.14E+049.61E+042.36E+026.80E+043.62E+064.28E+07 + 72L1 12.972.42E+004.39E+021.98E+041.64E+052.00E+025.23E+042.68E+063.76E+07 + 72L1 14.272.06E+002.68E+021.54E+042.21E+051.50E+023.33E+041.59E+062.69E+07 + 72L1 17.471.44E+009.03E+017.24E+031.74E+058.23E+011.29E+045.28E+051.07E+07 + 72L1 21.279.94E-012.97E+012.93E+038.76E+044.58E+015.19E+031.81E+053.83E+06 + 72L1 25.007.22E-011.14E+011.30E+034.24E+042.84E+012.48E+037.56E+041.57E+06 + 72L1 31.004.63E-013.15E+004.09E+021.41E+041.50E+019.35E+022.38E+044.60E+05 + 72L1 39.002.82E-019.09E-011.12E+023.88E+037.60E+003.37E+027.05E+031.21E+05 + 72L1 51.001.55E-013.57E-012.34E+017.85E+023.45E+001.05E+021.74E+032.54E+04 + 72L1 64.009.12E-022.27E-016.42E+001.95E+021.77E+003.97E+015.43E+026.78E+03 + 72L1 81.005.20E-021.49E-011.89E+004.63E+018.92E-011.48E+011.66E+021.75E+03 + 72L1 94.003.63E-021.11E-019.69E-011.92E+015.80E-018.09E+007.98E+017.51E+02 + 72L1 111.002.42E-027.80E-025.04E-017.51E+003.59E-014.15E+003.56E+012.96E+02 + 72L1 134.001.52E-025.06E-022.64E-012.80E+002.10E-011.98E+001.46E+011.05E+02 + 72L1 160.009.81E-033.29E-021.50E-011.20E+001.27E-011.00E+006.40E+004.02E+01 + 72L1 225.004.26E-031.39E-025.39E-022.83E-014.90E-022.85E-011.40E+006.79E+00 + 72L1 310.001.98E-036.15E-032.11E-028.47E-022.04E-029.27E-023.61E-011.40E+00 + 72L1 400.001.11E-033.28E-031.03E-023.48E-021.03E-023.96E-021.31E-014.26E-01 + 72L1 510.006.55E-041.86E-035.30E-031.56E-025.46E-031.83E-025.22E-021.46E-01 + 72L1 740.003.08E-048.22E-042.06E-035.04E-032.10E-035.97E-031.41E-023.23E-02 + 72L11000.001.75E-044.46E-041.01E-032.18E-039.90E-042.56E-035.34E-031.07E-02 + 72L11500.008.62E-052.05E-044.18E-047.82E-043.67E-048.74E-041.61E-032.79E-03 + 72L2 11.745.64E+003.10E+046.38E+061.55E+082.67E+012.78E+034.87E+041.97E+05 + 72L2 12.444.82E+002.32E+044.58E+061.31E+082.24E+012.23E+034.61E+043.38E+05 + 72L2 13.743.67E+001.42E+042.58E+068.84E+071.66E+011.52E+033.78E+044.67E+05 + 72L2 16.942.05E+005.02E+037.67E+053.13E+078.81E+006.79E+022.01E+043.93E+05 + 72L2 20.741.14E+001.85E+032.37E+051.00E+074.79E+003.11E+029.52E+032.17E+05 + 72L2 25.006.61E-017.38E+028.03E+043.28E+062.73E+001.51E+024.49E+031.06E+05 + 72L2 31.003.48E-012.58E+022.31E+048.72E+051.43E+006.55E+011.81E+034.12E+04 + 72L2 39.001.73E-018.47E+016.15E+032.06E+057.20E-012.70E+016.64E+021.39E+04 + 72L2 51.007.52E-022.33E+011.32E+033.74E+043.24E-019.60E+002.01E+023.66E+03 + 72L2 64.003.69E-027.91E+003.63E+028.79E+031.65E-014.02E+007.22E+011.14E+03 + 72L2 81.001.75E-022.61E+009.61E+011.96E+038.25E-021.64E+002.49E+013.37E+02 + 72L2 94.001.09E-021.31E+004.19E+017.63E+025.33E-029.34E-011.27E+011.55E+02 + 72L2 111.006.42E-036.06E-011.67E+012.68E+023.28E-024.99E-016.01E+006.50E+01 + 72L2 134.003.53E-032.57E-015.96E+008.26E+011.89E-022.47E-012.58E+002.44E+01 + 72L2 160.002.01E-031.16E-012.29E+002.77E+011.13E-021.28E-011.17E+009.72E+00 + 72L2 225.006.93E-042.59E-023.80E-013.54E+004.24E-033.69E-022.63E-011.70E+00 + 72L2 310.002.60E-046.63E-037.46E-025.49E-011.70E-031.18E-026.69E-023.47E-01 + 72L2 400.001.21E-042.34E-032.15E-021.32E-018.25E-044.83E-032.32E-021.01E-01 + 72L2 510.006.01E-058.96E-046.88E-033.59E-024.16E-042.11E-038.71E-033.27E-02 + 72L2 740.002.14E-052.22E-041.32E-035.49E-031.47E-046.15E-042.06E-036.28E-03 + 72L21000.009.61E-067.72E-053.80E-041.34E-036.37E-052.34E-046.81E-041.79E-03 + 72L21500.003.48E-062.05E-058.09E-052.37E-042.07E-056.70E-051.66E-043.69E-04 + 72L3 10.561.24E+017.13E+041.74E+074.96E+085.31E+009.71E+041.45E+082.32E+10 + 72L3 11.261.03E+015.16E+041.19E+073.94E+084.36E+007.06E+049.41E+071.42E+10 + 72L3 12.567.50E+002.97E+046.16E+062.41E+083.11E+004.09E+044.49E+076.14E+09 + 72L3 15.763.84E+009.43E+031.58E+067.06E+071.55E+001.32E+049.76E+061.09E+09 + 72L3 19.562.00E+003.17E+034.30E+051.94E+078.00E-014.49E+032.31E+062.11E+08 + 72L3 25.009.36E-019.19E+029.81E+044.12E+063.77E-011.32E+034.55E+053.33E+07 + 72L3 31.004.75E-013.11E+022.69E+041.02E+061.95E-014.54E+021.11E+056.70E+06 + 72L3 39.002.27E-019.81E+016.75E+032.24E+059.70E-021.45E+022.51E+041.23E+06 + 72L3 51.009.48E-022.56E+011.35E+033.72E+044.29E-023.83E+014.51E+031.73E+05 + 72L3 64.004.48E-028.24E+003.46E+028.06E+032.15E-021.25E+011.08E+033.38E+04 + 72L3 81.002.05E-022.55E+008.45E+011.64E+031.06E-023.89E+002.49E+026.36E+03 + 72L3 94.001.24E-021.22E+003.48E+016.00E+026.75E-031.87E+009.97E+012.24E+03 + 72L3 111.007.12E-035.38E-011.30E+011.95E+024.10E-038.28E-013.63E+017.10E+02 + 72L3 134.003.80E-032.14E-014.26E+005.48E+012.33E-033.30E-011.17E+011.96E+02 + 72L3 160.002.10E-039.01E-021.50E+001.67E+011.38E-031.39E-014.11E+005.95E+01 + 72L3 225.006.87E-041.75E-022.07E-011.73E+005.03E-042.69E-025.69E-016.35E+00 + 72L3 310.002.46E-043.90E-033.35E-022.16E-011.98E-045.89E-039.35E-028.29E-01 + 72L3 400.001.12E-041.22E-038.19E-034.33E-029.56E-051.80E-032.31E-021.73E-01 + 72L3 510.005.40E-054.23E-042.24E-039.88E-034.85E-055.95E-046.27E-034.05E-02 + 72L3 740.001.88E-059.12E-053.45E-041.18E-031.78E-051.17E-049.06E-044.77E-03 + 72L31000.008.59E-062.93E-058.61E-052.43E-048.29E-063.44E-052.01E-049.09E-04 + 72L31500.003.33E-067.50E-061.64E-053.64E-053.23E-067.92E-062.96E-051.08E-04 + 72M1 3.604.35E+002.02E+041.31E+061.18E+082.06E+036.81E+064.11E+095.46E+11 + 72M1 4.603.30E+007.33E+035.41E+053.13E+079.91E+022.05E+068.39E+081.00E+11 + 72M1 6.601.97E+001.57E+031.52E+055.30E+063.36E+023.51E+058.35E+078.06E+09 + 72M1 10.608.83E-011.83E+022.22E+049.46E+058.16E+013.55E+044.37E+062.98E+08 + 72M1 17.603.35E-011.51E+012.05E+039.57E+041.80E+013.20E+032.06E+059.31E+06 + 72M1 27.001.38E-011.57E+002.24E+029.85E+035.04E+004.40E+021.72E+045.37E+05 + 72M1 42.005.22E-021.97E-011.98E+017.65E+021.36E+006.01E+011.45E+033.08E+04 + 72M1 54.002.93E-028.94E-024.86E+001.68E+026.51E-012.00E+013.73E+026.33E+03 + 72M1 72.001.49E-024.58E-021.03E+002.92E+012.80E-015.84E+008.19E+011.08E+03 + 72M1 105.005.96E-032.00E-021.78E-013.16E+009.40E-021.23E+001.21E+011.15E+02 + 72M1 150.002.49E-038.51E-034.71E-024.71E-013.40E-023.01E-012.15E+001.52E+01 + 72M1 280.005.49E-041.75E-036.58E-033.08E-025.99E-033.03E-021.31E-015.66E-01 + 72M1 500.001.49E-044.29E-041.27E-033.91E-031.28E-034.41E-031.30E-023.77E-02 + 72M2 3.361.00E+013.63E+066.62E+091.42E+122.66E+022.45E+053.80E+071.47E+09 + 72M2 4.366.83E+009.93E+051.22E+092.34E+111.22E+027.53E+041.05E+076.09E+08 + 72M2 6.363.41E+001.52E+051.08E+081.68E+103.93E+011.40E+041.57E+061.04E+08 + 72M2 10.361.18E+001.34E+045.02E+065.62E+089.09E+001.70E+031.38E+058.10E+06 + 72M2 17.363.28E-011.05E+032.10E+051.61E+071.94E+001.94E+021.08E+044.84E+05 + 72M2 27.009.96E-021.21E+021.47E+047.96E+055.19E-013.20E+011.26E+034.23E+04 + 72M2 42.002.81E-021.42E+011.09E+034.10E+041.39E-015.47E+001.52E+023.68E+03 + 72M2 54.001.33E-024.28E+002.52E+027.73E+036.64E-022.03E+004.60E+019.21E+02 + 72M2 72.005.57E-031.10E+004.84E+011.17E+032.85E-026.65E-011.19E+011.91E+02 + 72M2 105.001.74E-031.91E-015.80E+001.02E+029.45E-031.57E-012.07E+002.46E+01 + 72M2 150.005.74E-043.78E-028.21E-011.08E+013.36E-034.11E-024.09E-013.68E+00 + 72M2 280.008.46E-052.51E-033.13E-022.52E-015.61E-044.23E-032.63E-021.49E-01 + 72M2 500.001.55E-052.39E-041.89E-031.01E-021.09E-045.64E-042.38E-039.16E-03 + 72M3 3.112.67E+018.02E+061.61E+103.63E+125.03E+011.14E+071.94E+113.50E+14 + 72M3 4.111.62E+011.98E+062.57E+095.03E+112.17E+012.83E+062.82E+103.22E+13 + 72M3 6.117.10E+002.69E+051.95E+083.00E+106.50E+003.90E+051.83E+091.13E+12 + 72M3 10.112.15E+002.14E+047.83E+068.49E+081.40E+003.15E+045.80E+071.74E+10 + 72M3 17.115.34E-011.51E+032.89E+052.11E+072.84E-012.28E+031.65E+062.50E+08 + 72M3 27.001.44E-011.53E+021.73E+048.79E+057.09E-022.35E+027.91E+046.98E+06 + 72M3 42.003.79E-021.67E+011.16E+034.12E+041.86E-022.61E+014.42E+032.40E+05 + 72M3 54.001.72E-024.78E+002.53E+027.26E+038.73E-037.51E+008.82E+023.70E+04 + 72M3 72.006.85E-031.14E+004.47E+011.00E+033.68E-031.81E+001.44E+024.52E+03 + 72M3 105.002.00E-031.78E-014.67E+007.59E+011.19E-032.83E-011.39E+013.08E+02 + 72M3 150.006.23E-043.11E-025.66E-016.77E+004.12E-044.95E-021.63E+002.63E+01 + 72M3 280.008.36E-051.59E-031.53E-021.08E-016.64E-052.47E-034.41E-024.33E-01 + 72M3 500.001.43E-051.17E-046.39E-042.88E-031.29E-051.68E-041.84E-031.22E-02 + 72M4 2.727.16E+012.49E+051.44E+101.86E+141.56E+013.64E+053.23E+092.50E+12 + 72M4 3.722.74E+015.04E+041.59E+091.20E+135.66E+007.57E+043.90E+082.36E+11 + 72M4 5.726.71E+005.63E+037.72E+072.86E+111.38E+008.71E+032.19E+079.28E+09 + 72M4 9.721.05E+003.81E+021.84E+063.03E+092.36E-016.03E+026.64E+051.77E+08 + 72M4 16.721.41E-012.41E+014.03E+043.09E+073.70E-023.91E+011.98E+043.22E+06 + 72M4 27.002.18E-022.07E+001.39E+035.66E+056.93E-033.48E+009.33E+029.77E+04 + 72M4 42.003.66E-032.13E-016.31E+011.49E+041.43E-033.75E-015.82E+014.05E+03 + 72M4 54.001.30E-035.82E-021.10E+011.93E+035.77E-041.06E-011.22E+016.74E+02 + 72M4 72.003.91E-041.32E-021.51E+001.90E+022.01E-042.49E-022.08E+008.80E+01 + 72M4 105.008.08E-051.89E-031.15E-019.44E+004.97E-053.77E-032.09E-016.30E+00 + 72M4 150.001.81E-053.08E-041.06E-025.83E-011.31E-056.40E-042.45E-025.41E-01 + 72M4 280.001.35E-061.39E-051.90E-045.25E-031.24E-062.96E-056.27E-048.26E-03 + 72M4 500.001.38E-078.99E-075.96E-068.51E-051.39E-071.80E-062.33E-052.01E-04 + 72M5 2.661.08E+022.96E+052.65E+103.05E+149.29E+003.09E+041.70E+108.73E+14 + 72M5 3.664.03E+015.77E+042.83E+091.87E+133.33E+006.31E+031.83E+095.06E+13 + 72M5 5.669.55E+006.20E+031.32E+084.20E+118.04E-017.18E+028.69E+071.04E+12 + 72M5 9.661.45E+004.05E+023.03E+064.20E+091.37E-015.01E+012.07E+069.15E+09 + 72M5 16.661.87E-012.48E+016.43E+044.06E+072.19E-023.34E+004.60E+047.65E+07 + 72M5 27.002.79E-022.03E+002.11E+036.98E+054.17E-033.07E-011.58E+031.17E+06 + 72M5 42.004.59E-032.02E-019.27E+011.75E+048.88E-043.52E-027.29E+012.68E+04 + 72M5 54.001.61E-035.38E-021.57E+012.18E+033.64E-041.04E-021.27E+013.23E+03 + 72M5 72.004.79E-041.18E-022.07E+002.04E+021.30E-042.58E-031.72E+002.94E+02 + 72M5 105.009.71E-051.60E-031.47E-019.28E+003.34E-054.25E-041.27E-011.33E+01 + 72M5 150.002.15E-052.47E-041.23E-025.15E-019.18E-067.96E-051.10E-027.54E-01 + 72M5 280.001.66E-061.02E-051.78E-043.58E-039.83E-074.70E-061.62E-045.70E-03 + 72M5 500.001.86E-076.56E-074.36E-064.24E-051.35E-074.02E-073.90E-067.30E-05 + 72N+ 50.002.17E-023.82E+002.48E+021.00E+042.71E-011.27E+016.52E+022.71E+04 + 72N+ 70.008.52E-037.45E-013.32E+019.27E+021.00E-012.84E+008.65E+012.35E+03 + 72N+ 100.003.24E-031.41E-014.21E+008.22E+013.60E-026.24E-011.14E+012.03E+02 + 72N+ 150.001.07E-032.23E-024.21E-015.60E+001.12E-021.18E-011.29E+001.43E+01 + 72N+ 200.004.93E-046.42E-038.71E-028.89E-014.94E-033.82E-022.98E-012.42E+00 + 72N+ 500.005.19E-052.26E-041.10E-034.92E-034.11E-041.52E-035.11E-031.77E-02 + 73K 68.427.92E-011.11E+003.05E-012.19E-021.12E+011.13E+022.04E+027.93E+01 + 73K 69.127.73E-011.14E+004.05E-015.78E-021.09E+011.09E+022.07E+021.04E+02 + 73K 70.427.38E-011.19E+005.90E-011.66E-011.03E+011.02E+022.09E+021.47E+02 + 73K 73.626.60E-011.24E+001.02E+006.33E-019.05E+008.64E+012.08E+022.40E+02 + 73K 77.425.81E-011.26E+001.45E+001.42E+007.81E+007.20E+011.97E+023.17E+02 + 73K 81.005.18E-011.24E+001.76E+002.24E+006.85E+006.12E+011.83E+023.60E+02 + 73K 87.004.32E-011.16E+002.07E+003.48E+005.57E+004.73E+011.57E+023.84E+02 + 73K 95.003.46E-011.02E+002.20E+004.58E+004.32E+003.44E+011.24E+023.61E+02 + 73K 107.002.55E-018.17E-012.06E+005.14E+003.07E+002.25E+018.67E+012.88E+02 + 73K 120.001.89E-016.36E-011.76E+004.85E+002.21E+001.49E+015.92E+012.11E+02 + 73K 137.001.34E-014.62E-011.36E+004.01E+001.52E+009.33E+003.72E+011.37E+02 + 73K 150.001.06E-013.66E-011.10E+003.35E+001.17E+006.79E+002.68E+019.93E+01 + 73K 167.008.07E-022.76E-018.42E-012.60E+008.67E-014.67E+001.80E+016.63E+01 + 73K 190.005.79E-021.95E-015.96E-011.84E+006.04E-012.99E+001.11E+013.99E+01 + 73K 215.004.23E-021.39E-014.21E-011.29E+004.29E-011.96E+007.00E+002.43E+01 + 73K 280.002.19E-026.77E-021.97E-015.77E-012.08E-018.17E-012.61E+008.22E+00 + 73K 365.001.17E-023.37E-029.26E-022.53E-011.02E-013.49E-019.95E-012.79E+00 + 73K 460.006.90E-031.90E-024.92E-021.25E-015.56E-021.71E-014.41E-011.11E+00 + 73K 570.004.35E-031.15E-022.82E-026.69E-023.19E-029.04E-022.13E-014.89E-01 + 73K 800.002.20E-035.56E-031.24E-022.64E-021.35E-023.45E-027.19E-021.44E-01 + 73K 1050.001.33E-033.23E-036.77E-031.32E-026.88E-031.66E-023.17E-025.78E-02 + 73K 1300.009.07E-042.14E-034.30E-037.90E-034.08E-039.52E-031.73E-022.95E-02 + 73K 1550.006.71E-041.54E-032.99E-035.26E-032.67E-036.10E-031.07E-021.74E-02 + 73L1 12.682.48E+005.41E+021.90E+048.01E+042.35E+026.47E+043.31E+063.76E+07 + 73L1 13.382.28E+004.13E+021.77E+041.37E+052.01E+025.02E+042.47E+063.32E+07 + 73L1 14.681.95E+002.56E+021.40E+041.89E+051.52E+023.24E+041.49E+062.42E+07 + 73L1 17.881.38E+008.98E+016.78E+031.54E+058.44E+011.29E+045.10E+059.96E+06 + 73L1 21.689.58E-013.06E+012.83E+038.05E+044.76E+015.27E+031.79E+053.66E+06 + 73L1 25.007.24E-011.34E+011.40E+034.33E+043.12E+012.74E+038.29E+041.67E+06 + 73L1 31.004.66E-013.77E+004.48E+021.48E+041.65E+011.04E+032.61E+044.94E+05 + 73L1 39.002.85E-011.06E+001.25E+024.15E+038.35E+003.72E+027.73E+031.31E+05 + 73L1 51.001.57E-013.80E-012.67E+018.58E+023.79E+001.15E+021.90E+032.75E+04 + 73L1 64.009.29E-022.28E-017.38E+002.17E+021.95E+004.37E+015.94E+027.35E+03 + 73L1 81.005.31E-021.48E-012.15E+005.21E+019.80E-011.63E+011.82E+021.90E+03 + 73L1 94.003.71E-021.10E-011.08E+002.16E+016.37E-018.89E+008.72E+018.15E+02 + 73L1 111.002.48E-027.78E-025.51E-018.45E+003.94E-014.56E+003.89E+013.21E+02 + 73L1 134.001.56E-025.08E-022.82E-013.12E+002.30E-012.17E+001.59E+011.14E+02 + 73L1 160.001.01E-023.32E-021.59E-011.32E+001.39E-011.10E+006.98E+004.36E+01 + 73L1 225.004.40E-031.42E-025.64E-023.06E-015.37E-023.12E-011.52E+007.38E+00 + 73L1 310.002.06E-036.35E-032.21E-029.06E-022.24E-021.01E-013.93E-011.52E+00 + 73L1 400.001.16E-033.41E-031.08E-023.71E-021.13E-024.32E-021.42E-014.62E-01 + 73L1 510.006.85E-041.94E-035.59E-031.66E-025.97E-031.99E-025.67E-021.59E-01 + 73L1 740.003.23E-048.65E-042.18E-035.37E-032.29E-036.50E-031.53E-023.50E-02 + 73L11000.001.84E-044.71E-041.08E-032.33E-031.08E-032.78E-035.79E-031.16E-02 + 73L11500.009.06E-052.17E-044.45E-048.35E-043.98E-049.48E-041.74E-033.02E-03 + 73L2 12.145.30E+002.86E+045.65E+061.31E+082.66E+012.64E+034.43E+041.68E+05 + 73L2 12.844.56E+002.16E+044.09E+061.12E+082.25E+012.14E+034.22E+042.90E+05 + 73L2 14.143.50E+001.34E+042.35E+067.70E+071.68E+011.48E+033.49E+044.07E+05 + 73L2 17.341.98E+004.88E+037.22E+052.83E+079.09E+006.73E+021.91E+043.54E+05 + 73L2 21.141.13E+001.84E+032.29E+059.32E+065.00E+003.14E+029.25E+032.02E+05 + 73L2 25.006.89E-018.05E+028.67E+043.45E+063.02E+001.64E+024.74E+031.08E+05 + 73L2 31.003.63E-012.81E+022.50E+049.24E+051.58E+007.14E+011.92E+034.27E+04 + 73L2 39.001.81E-019.24E+016.66E+032.20E+057.97E-012.94E+017.10E+021.46E+04 + 73L2 51.007.92E-022.54E+011.43E+034.01E+043.59E-011.05E+012.16E+023.87E+03 + 73L2 64.003.90E-028.64E+003.94E+029.45E+031.83E-014.40E+007.80E+011.22E+03 + 73L2 81.001.85E-022.85E+001.05E+022.11E+039.16E-021.80E+002.70E+013.61E+02 + 73L2 94.001.16E-021.43E+004.56E+018.25E+025.92E-021.02E+001.38E+011.67E+02 + 73L2 111.006.84E-036.64E-011.82E+012.90E+023.65E-025.48E-016.53E+007.01E+01 + 73L2 134.003.77E-032.81E-016.51E+008.97E+012.11E-022.72E-012.81E+002.64E+01 + 73L2 160.002.15E-031.27E-012.50E+003.01E+011.26E-021.41E-011.28E+001.05E+01 + 73L2 225.007.44E-042.84E-024.16E-013.86E+004.73E-034.08E-022.89E-011.86E+00 + 73L2 310.002.79E-047.30E-038.21E-026.01E-011.90E-031.30E-027.36E-023.79E-01 + 73L2 400.001.31E-042.57E-032.37E-021.45E-019.23E-045.36E-032.56E-021.11E-01 + 73L2 510.006.50E-059.88E-047.59E-033.95E-024.66E-042.34E-039.63E-033.60E-02 + 73L2 740.002.34E-052.46E-041.46E-036.07E-031.65E-046.85E-042.29E-036.94E-03 + 73L21000.001.06E-058.55E-054.22E-041.49E-037.15E-052.62E-047.57E-041.98E-03 + 73L21500.003.80E-062.27E-059.00E-052.63E-042.33E-057.50E-051.85E-044.11E-04 + 73L3 10.881.16E+016.61E+041.56E+074.28E+085.16E+009.33E+041.35E+082.08E+10 + 73L3 11.589.76E+004.83E+041.07E+073.42E+084.27E+006.84E+048.83E+071.29E+10 + 73L3 12.887.17E+002.82E+045.66E+062.12E+083.08E+004.02E+044.30E+075.71E+09 + 73L3 16.083.73E+009.18E+031.49E+066.45E+071.56E+001.33E+049.66E+061.05E+09 + 73L3 19.881.97E+003.15E+034.17E+051.82E+078.12E-014.62E+032.34E+062.10E+08 + 73L3 25.009.70E-019.91E+021.05E+054.31E+064.03E-011.48E+035.14E+053.75E+07 + 73L3 31.004.93E-013.35E+022.88E+041.07E+062.09E-015.06E+021.25E+057.52E+06 + 73L3 39.002.37E-011.06E+027.24E+032.36E+051.03E-011.62E+022.83E+041.38E+06 + 73L3 51.009.90E-022.76E+011.45E+033.94E+044.58E-024.27E+015.07E+031.94E+05 + 73L3 64.004.69E-028.88E+003.71E+028.56E+032.30E-021.39E+011.21E+033.78E+04 + 73L3 81.002.14E-022.75E+009.07E+011.75E+031.13E-024.34E+002.79E+027.11E+03 + 73L3 94.001.30E-021.32E+003.74E+016.39E+027.21E-032.08E+001.12E+022.50E+03 + 73L3 111.007.49E-035.81E-011.39E+012.08E+024.37E-039.22E-014.06E+017.92E+02 + 73L3 134.004.00E-032.31E-014.57E+005.85E+012.49E-033.67E-011.31E+012.19E+02 + 73L3 160.002.22E-039.72E-021.61E+001.78E+011.47E-031.55E-014.58E+006.63E+01 + 73L3 225.007.25E-041.89E-022.23E-011.86E+005.37E-042.99E-026.34E-017.05E+00 + 73L3 310.002.60E-044.21E-033.60E-022.32E-012.11E-046.52E-031.04E-019.20E-01 + 73L3 400.001.19E-041.32E-038.82E-034.64E-021.02E-041.99E-032.56E-021.92E-01 + 73L3 510.005.75E-054.55E-042.41E-031.06E-025.17E-056.56E-046.95E-034.48E-02 + 73L3 740.002.01E-059.81E-053.72E-041.27E-031.90E-051.29E-041.00E-035.27E-03 + 73L31000.009.14E-063.14E-059.26E-052.62E-048.82E-063.75E-052.22E-041.00E-03 + 73L31500.003.54E-068.02E-061.75E-053.91E-053.43E-068.57E-063.25E-051.19E-04 + 73M1 3.714.11E+001.95E+041.27E+061.02E+082.08E+036.62E+063.87E+094.97E+11 + 73M1 4.713.15E+007.26E+035.34E+052.93E+071.02E+032.05E+068.22E+089.56E+10 + 73M1 6.711.91E+001.60E+031.51E+055.24E+063.54E+023.64E+058.55E+078.06E+09 + 73M1 10.718.66E-011.95E+022.26E+049.41E+058.74E+013.79E+044.63E+063.11E+08 + 73M1 17.713.33E-011.68E+012.17E+039.81E+041.95E+013.48E+032.23E+059.96E+06 + 73M1 27.001.40E-011.86E+002.49E+021.06E+045.56E+004.91E+021.92E+045.97E+05 + 73M1 42.005.31E-022.24E-012.25E+018.42E+021.50E+006.68E+011.62E+033.41E+04 + 73M1 54.002.99E-029.54E-025.58E+001.87E+027.18E-012.22E+014.13E+027.00E+03 + 73M1 72.001.52E-024.68E-021.19E+003.30E+013.09E-016.47E+009.06E+011.19E+03 + 73M1 105.006.13E-032.02E-021.99E-013.59E+001.04E-011.36E+001.33E+011.27E+02 + 73M1 150.002.57E-038.65E-035.09E-025.29E-013.74E-023.32E-012.37E+001.66E+01 + 73M1 280.005.71E-041.81E-036.97E-033.35E-026.59E-033.32E-021.44E-016.19E-01 + 73M1 500.001.57E-044.50E-041.34E-034.20E-031.40E-034.83E-031.42E-024.12E-02 + 73M2 3.479.45E+003.41E+065.99E+091.25E+122.70E+022.38E+053.56E+071.29E+09 + 73M2 4.476.51E+009.65E+051.15E+092.15E+111.27E+027.54E+041.01E+075.62E+08 + 73M2 6.473.32E+001.53E+051.07E+081.63E+104.16E+011.45E+041.58E+061.01E+08 + 73M2 10.471.17E+001.40E+045.18E+065.70E+089.81E+001.80E+031.43E+058.19E+06 + 73M2 17.473.34E-011.11E+032.22E+051.67E+072.12E+002.09E+021.14E+045.03E+05 + 73M2 27.001.04E-011.32E+021.61E+048.65E+055.77E-013.53E+011.38E+034.56E+04 + 73M2 42.002.95E-021.56E+011.19E+034.46E+041.55E-016.03E+001.66E+023.98E+03 + 73M2 54.001.41E-024.70E+002.76E+028.41E+037.40E-022.24E+005.03E+019.98E+02 + 73M2 72.005.90E-031.21E+005.31E+011.28E+033.18E-027.34E-011.30E+012.07E+02 + 73M2 105.001.85E-032.10E-016.37E+001.12E+021.06E-021.74E-012.27E+002.68E+01 + 73M2 150.006.15E-044.17E-029.03E-011.19E+013.76E-034.56E-024.50E-014.03E+00 + 73M2 280.009.14E-052.77E-033.46E-022.78E-016.29E-044.71E-032.91E-021.64E-01 + 73M2 500.001.68E-052.65E-042.10E-031.12E-021.23E-046.30E-042.65E-031.01E-02 + 73M3 3.192.54E+017.58E+061.47E+103.22E+124.96E+011.11E+071.84E+113.23E+14 + 73M3 4.191.56E+011.94E+062.45E+094.67E+112.18E+012.86E+062.80E+103.14E+13 + 73M3 6.196.96E+002.72E+051.95E+082.92E+106.68E+004.08E+051.90E+091.16E+12 + 73M3 10.192.15E+002.22E+048.07E+068.58E+081.47E+003.39E+046.26E+071.87E+10 + 73M3 17.195.43E-011.60E+033.04E+052.19E+072.99E-012.50E+031.82E+062.76E+08 + 73M3 27.001.50E-011.66E+021.87E+049.42E+057.61E-022.64E+029.00E+047.97E+06 + 73M3 42.003.95E-021.82E+011.26E+034.41E+042.00E-022.93E+015.02E+032.73E+05 + 73M3 54.001.80E-025.19E+002.74E+027.79E+039.36E-038.43E+009.99E+024.19E+04 + 73M3 72.007.19E-031.24E+004.83E+011.08E+033.94E-032.03E+001.62E+025.11E+03 + 73M3 105.002.11E-031.93E-015.05E+008.16E+011.28E-033.17E-011.57E+013.47E+02 + 73M3 150.006.60E-043.38E-026.12E-017.28E+004.43E-045.54E-021.83E+002.95E+01 + 73M3 280.008.87E-051.72E-031.66E-021.17E-017.12E-052.75E-034.94E-024.84E-01 + 73M3 500.001.52E-051.27E-046.92E-043.11E-031.38E-051.87E-042.05E-031.37E-02 + 73M4 2.796.83E+012.35E+051.31E+101.66E+141.54E+013.57E+053.07E+092.30E+12 + 73M4 3.792.68E+014.95E+041.54E+091.14E+135.74E+007.73E+043.90E+082.31E+11 + 73M4 5.796.75E+005.73E+037.83E+072.90E+111.43E+009.22E+032.29E+079.54E+09 + 73M4 9.791.09E+003.99E+021.94E+063.21E+092.50E-016.56E+027.20E+051.89E+08 + 73M4 16.791.48E-012.57E+014.36E+043.36E+073.97E-024.33E+012.19E+043.53E+06 + 73M4 27.002.34E-022.27E+001.55E+036.40E+057.59E-033.94E+001.06E+031.11E+05 + 73M4 42.003.96E-032.34E-017.05E+011.69E+041.57E-034.25E-016.62E+014.59E+03 + 73M4 54.001.41E-036.41E-021.23E+012.18E+036.35E-041.20E-011.39E+017.63E+02 + 73M4 72.004.27E-041.46E-021.69E+002.14E+022.22E-042.83E-022.36E+009.98E+01 + 73M4 105.008.80E-052.10E-031.29E-011.07E+015.50E-054.29E-032.37E-017.14E+00 + 73M4 150.001.98E-053.42E-041.19E-026.59E-011.45E-057.27E-042.79E-026.14E-01 + 73M4 280.001.53E-061.55E-052.13E-045.94E-031.38E-063.36E-057.14E-049.40E-03 + 73M4 500.001.55E-071.00E-066.70E-069.64E-051.55E-072.04E-062.66E-052.29E-04 + 73M5 2.731.03E+022.77E+052.45E+102.74E+149.16E+002.98E+041.62E+108.10E+14 + 73M5 3.733.94E+015.61E+042.75E+091.78E+133.36E+006.32E+031.84E+095.01E+13 + 73M5 5.739.59E+006.25E+031.35E+084.26E+118.32E-017.44E+029.18E+071.10E+12 + 73M5 9.731.49E+004.19E+023.22E+064.46E+091.45E-015.33E+012.27E+061.01E+10 + 73M5 16.731.96E-012.61E+016.99E+044.42E+072.34E-023.61E+005.15E+048.66E+07 + 73M5 27.002.99E-022.20E+002.37E+037.87E+054.53E-033.39E-011.83E+031.37E+06 + 73M5 42.004.95E-032.19E-011.04E+021.97E+049.68E-043.88E-028.41E+013.13E+04 + 73M5 54.001.74E-035.84E-021.76E+012.45E+033.97E-041.14E-021.46E+013.76E+03 + 73M5 72.005.20E-041.28E-022.32E+002.29E+021.42E-042.84E-031.99E+003.42E+02 + 73M5 105.001.06E-041.75E-031.65E-011.04E+013.65E-054.69E-041.46E-011.54E+01 + 73M5 150.002.38E-052.70E-041.39E-025.80E-011.01E-058.78E-051.26E-028.74E-01 + 73M5 280.001.85E-061.13E-051.99E-044.03E-031.08E-065.18E-061.86E-046.58E-03 + 73M5 500.002.03E-077.40E-074.87E-064.78E-051.49E-074.44E-074.43E-068.39E-05 + 73N+ 50.002.27E-024.22E+002.75E+021.11E+043.01E-011.43E+017.43E+023.11E+04 + 73N+ 70.008.91E-038.23E-013.67E+011.03E+031.11E-013.18E+009.81E+012.69E+03 + 73N+ 100.003.40E-031.55E-014.65E+009.08E+014.00E-026.97E-011.29E+012.30E+02 + 73N+ 150.001.12E-032.45E-024.66E-016.20E+001.25E-021.32E-011.44E+001.61E+01 + 73N+ 200.005.19E-047.03E-039.64E-029.84E-015.48E-034.25E-023.33E-012.71E+00 + 73N+ 500.005.49E-052.45E-041.21E-035.46E-034.55E-041.68E-035.66E-031.96E-02 + 74K 70.527.45E-011.01E+002.66E-011.82E-021.11E+011.08E+021.89E+027.07E+01 + 74K 71.227.28E-011.03E+003.51E-014.77E-021.08E+011.04E+021.91E+029.20E+01 + 74K 72.526.96E-011.07E+005.09E-011.36E-011.03E+019.74E+011.93E+021.30E+02 + 74K 75.726.24E-011.12E+008.80E-015.17E-019.07E+008.34E+011.92E+022.11E+02 + 74K 79.525.52E-011.14E+001.25E+001.17E+007.86E+006.99E+011.83E+022.80E+02 + 74K 84.004.81E-011.11E+001.58E+002.02E+006.71E+005.74E+011.68E+023.27E+02 + 74K 90.004.04E-011.04E+001.84E+003.04E+005.50E+004.48E+011.44E+023.45E+02 + 74K 98.003.25E-019.25E-011.94E+003.97E+004.30E+003.30E+011.15E+023.25E+02 + 74K 110.002.42E-017.48E-011.83E+004.46E+003.09E+002.18E+018.14E+012.62E+02 + 74K 123.001.82E-015.88E-011.58E+004.26E+002.24E+001.47E+015.63E+011.94E+02 + 74K 140.001.30E-014.32E-011.24E+003.58E+001.55E+009.28E+003.58E+011.28E+02 + 74K 153.001.04E-013.45E-011.01E+003.02E+001.21E+006.80E+002.60E+019.39E+01 + 74K 170.007.91E-022.63E-017.84E-012.38E+008.97E-014.71E+001.77E+016.34E+01 + 74K 193.005.72E-021.87E-015.62E-011.71E+006.29E-013.05E+001.11E+013.87E+01 + 74K 220.004.11E-021.32E-013.92E-011.19E+004.37E-011.95E+006.79E+002.29E+01 + 74K 285.002.17E-026.57E-021.89E-015.47E-012.15E-018.29E-012.60E+008.00E+00 + 74K 370.001.17E-023.34E-029.10E-022.47E-011.07E-013.60E-011.01E+002.78E+00 + 74K 460.007.16E-031.96E-025.06E-021.29E-016.03E-021.84E-014.70E-011.18E+00 + 74K 570.004.52E-031.20E-022.92E-026.93E-023.46E-029.73E-022.28E-015.19E-01 + 74K 800.002.29E-035.80E-031.30E-022.76E-021.46E-023.71E-027.69E-021.53E-01 + 74K 1050.001.38E-033.38E-037.10E-031.39E-027.42E-031.78E-023.40E-026.16E-02 + 74K 1300.009.46E-042.25E-034.52E-038.31E-034.39E-031.02E-021.85E-023.15E-02 + 74K 1550.007.00E-041.62E-033.15E-035.55E-032.86E-036.55E-031.14E-021.86E-02 + 74L1 13.102.33E+005.05E+021.70E+046.70E+042.35E+026.16E+043.03E+063.31E+07 + 74L1 13.802.14E+003.89E+021.58E+041.16E+052.01E+024.82E+042.29E+062.94E+07 + 74L1 15.101.84E+002.46E+021.27E+041.61E+051.54E+023.15E+041.40E+062.17E+07 + 74L1 18.301.31E+008.93E+016.34E+031.37E+058.66E+011.28E+044.92E+059.23E+06 + 74L1 22.109.23E-013.15E+012.73E+037.40E+044.94E+015.35E+031.77E+053.49E+06 + 74L1 26.006.72E-011.25E+011.23E+033.67E+043.05E+012.54E+037.36E+041.43E+06 + 74L1 32.004.39E-013.73E+004.13E+021.31E+041.65E+019.93E+022.42E+044.42E+05 + 74L1 40.002.73E-011.10E+001.20E+023.84E+038.52E+003.68E+027.41E+031.22E+05 + 74L1 52.001.52E-013.89E-012.71E+018.34E+023.93E+001.17E+021.89E+032.65E+04 + 74L1 65.009.12E-022.26E-017.76E+002.19E+022.05E+004.51E+016.01E+027.28E+03 + 74L1 82.005.27E-021.44E-012.31E+005.42E+011.04E+001.71E+011.87E+021.92E+03 + 74L1 95.003.70E-021.08E-011.16E+002.29E+016.78E-019.36E+009.05E+018.33E+02 + 74L1 112.002.48E-027.63E-025.86E-019.03E+004.22E-014.83E+004.07E+013.31E+02 + 74L1 135.001.58E-025.02E-022.96E-013.36E+002.47E-012.32E+001.68E+011.18E+02 + 74L1 160.001.04E-023.36E-021.69E-011.46E+001.53E-011.21E+007.62E+004.73E+01 + 74L1 225.004.55E-031.45E-025.92E-023.32E-015.89E-023.41E-011.66E+008.00E+00 + 74L1 310.002.14E-036.55E-032.32E-029.71E-022.45E-021.11E-014.28E-011.64E+00 + 74L1 400.001.20E-033.55E-031.13E-023.96E-021.24E-024.72E-021.54E-015.01E-01 + 74L1 510.007.15E-042.03E-035.91E-031.77E-026.52E-032.17E-026.16E-021.72E-01 + 74L1 740.003.38E-049.10E-042.31E-035.72E-032.50E-037.07E-031.66E-023.79E-02 + 74L11000.001.93E-044.97E-041.14E-032.48E-031.17E-033.02E-036.28E-031.25E-02 + 74L11500.009.51E-052.30E-044.74E-048.92E-044.31E-041.03E-031.89E-033.27E-03 + 74L2 12.544.98E+002.64E+045.00E+061.11E+082.67E+012.52E+034.04E+041.44E+05 + 74L2 13.244.31E+002.02E+043.66E+069.59E+072.26E+012.05E+033.86E+042.49E+05 + 74L2 14.543.34E+001.27E+042.14E+066.70E+071.71E+011.43E+033.23E+043.54E+05 + 74L2 17.741.92E+004.73E+036.78E+052.55E+079.37E+006.67E+021.81E+043.19E+05 + 74L2 21.541.10E+001.82E+032.21E+058.67E+065.22E+003.16E+028.97E+031.88E+05 + 74L2 26.006.39E-017.23E+027.45E+042.86E+062.97E+001.53E+024.26E+039.32E+04 + 74L2 32.003.45E-012.63E+022.25E+048.03E+051.59E+006.87E+011.79E+033.83E+04 + 74L2 40.001.76E-018.91E+016.23E+031.99E+058.20E-012.91E+016.80E+021.35E+04 + 74L2 52.007.85E-022.53E+011.39E+033.79E+043.76E-011.06E+012.13E+023.72E+03 + 74L2 65.003.92E-028.77E+003.92E+029.20E+031.94E-014.54E+007.85E+011.20E+03 + 74L2 82.001.89E-022.94E+001.06E+022.11E+039.82E-021.88E+002.76E+013.63E+02 + 74L2 95.001.19E-021.49E+004.68E+018.33E+026.38E-021.08E+001.43E+011.69E+02 + 74L2 112.007.07E-036.97E-011.89E+012.97E+023.95E-025.82E-016.82E+007.21E+01 + 74L2 135.003.92E-032.98E-016.82E+009.29E+012.30E-022.91E-012.97E+002.74E+01 + 74L2 160.002.30E-031.39E-012.74E+003.27E+011.41E-021.55E-011.40E+001.14E+01 + 74L2 225.007.98E-043.12E-024.56E-014.21E+005.28E-034.50E-023.16E-012.02E+00 + 74L2 310.003.01E-048.03E-039.02E-026.57E-012.12E-031.44E-028.09E-024.14E-01 + 74L2 400.001.42E-042.84E-032.61E-021.59E-011.03E-035.95E-032.82E-021.22E-01 + 74L2 510.007.05E-051.09E-038.38E-034.35E-025.23E-042.60E-031.06E-023.96E-02 + 74L2 740.002.54E-052.71E-041.62E-036.70E-031.85E-047.63E-042.53E-037.67E-03 + 74L21000.001.15E-059.46E-054.67E-041.65E-038.03E-052.92E-048.42E-042.20E-03 + 74L21500.004.16E-062.52E-051.00E-042.92E-042.62E-058.40E-052.06E-044.57E-04 + 74L3 11.211.10E+016.13E+041.39E+073.69E+085.03E+008.97E+041.25E+081.87E+10 + 74L3 11.919.25E+004.52E+049.69E+062.98E+084.18E+006.64E+048.28E+071.17E+10 + 74L3 13.216.85E+002.68E+045.20E+061.88E+083.04E+003.96E+044.11E+075.31E+09 + 74L3 16.413.62E+008.94E+031.41E+065.89E+071.56E+001.34E+049.54E+061.01E+09 + 74L3 20.211.93E+003.12E+034.04E+051.71E+078.24E-014.75E+032.37E+062.09E+08 + 74L3 26.008.89E-018.76E+028.87E+043.51E+063.81E-011.35E+034.48E+053.14E+07 + 74L3 32.004.63E-013.08E+022.54E+049.16E+052.02E-014.81E+021.15E+056.66E+06 + 74L3 40.002.27E-011.01E+026.65E+032.11E+051.02E-011.59E+022.70E+041.28E+06 + 74L3 52.009.68E-022.70E+011.38E+033.66E+044.60E-024.32E+015.03E+031.89E+05 + 74L3 65.004.65E-028.86E+003.62E+028.18E+032.34E-021.43E+011.23E+033.78E+04 + 74L3 82.002.15E-022.79E+009.04E+011.71E+031.16E-024.54E+002.89E+027.27E+03 + 74L3 95.001.32E-021.35E+003.76E+016.32E+027.44E-032.20E+001.17E+022.59E+03 + 74L3 112.007.63E-035.99E-011.42E+012.08E+024.54E-039.81E-014.30E+018.29E+02 + 74L3 135.004.10E-032.40E-014.70E+005.93E+012.60E-033.93E-011.40E+012.31E+02 + 74L3 160.002.34E-031.05E-011.73E+001.90E+011.57E-031.72E-015.11E+007.37E+01 + 74L3 225.007.65E-042.04E-022.39E-011.98E+005.73E-043.32E-027.06E-017.83E+00 + 74L3 310.002.75E-044.53E-033.87E-022.48E-012.25E-047.22E-031.16E-011.02E+00 + 74L3 400.001.25E-041.42E-039.49E-034.98E-021.09E-042.20E-032.84E-022.12E-01 + 74L3 510.006.10E-054.90E-042.60E-031.14E-025.51E-057.23E-047.70E-034.96E-02 + 74L3 740.002.13E-051.05E-044.00E-041.36E-032.02E-051.41E-041.11E-035.83E-03 + 74L31000.009.66E-063.37E-059.96E-052.82E-049.37E-064.09E-052.45E-041.11E-03 + 74L31500.003.73E-068.57E-061.88E-054.21E-053.63E-069.27E-063.57E-051.31E-04 + 74M1 3.823.88E+001.88E+041.23E+068.74E+072.10E+036.42E+063.62E+094.51E+11 + 74M1 4.823.00E+007.18E+035.25E+052.73E+071.05E+032.05E+068.02E+089.06E+10 + 74M1 6.821.84E+001.63E+031.50E+055.18E+063.72E+023.76E+058.71E+078.03E+09 + 74M1 10.828.49E-012.06E+022.31E+049.35E+059.35E+014.04E+044.89E+063.23E+08 + 74M1 17.823.31E-011.86E+012.28E+031.00E+052.11E+013.77E+032.41E+051.06E+07 + 74M1 27.001.41E-012.18E+002.75E+021.14E+046.14E+005.47E+022.14E+046.62E+05 + 74M1 42.005.40E-022.57E-012.55E+019.25E+021.66E+007.43E+011.79E+033.77E+04 + 74M1 54.003.05E-021.03E-016.40E+002.08E+027.92E-012.46E+014.58E+027.72E+03 + 74M1 72.001.56E-024.82E-021.37E+003.71E+013.41E-017.17E+001.00E+021.31E+03 + 74M1 105.006.30E-032.04E-022.24E-014.07E+001.14E-011.50E+001.47E+011.39E+02 + 74M1 150.002.65E-038.81E-035.53E-025.94E-014.13E-023.66E-012.60E+001.83E+01 + 74M1 280.005.94E-041.87E-037.39E-033.65E-027.25E-033.65E-021.57E-016.76E-01 + 74M1 500.001.64E-044.73E-041.43E-034.51E-031.54E-035.29E-031.55E-024.49E-02 + 74M2 3.578.90E+003.20E+065.44E+091.09E+122.73E+022.31E+053.33E+071.14E+09 + 74M2 4.576.22E+009.39E+051.09E+091.98E+111.31E+027.55E+049.81E+065.19E+08 + 74M2 6.573.23E+001.54E+051.06E+081.57E+104.40E+011.50E+041.59E+069.81E+07 + 74M2 10.571.17E+001.45E+045.33E+065.76E+081.06E+011.91E+031.48E+058.28E+06 + 74M2 17.573.39E-011.18E+032.34E+051.74E+072.31E+002.25E+021.21E+045.23E+05 + 74M2 27.001.08E-011.45E+021.76E+049.38E+056.42E-013.88E+011.50E+034.91E+04 + 74M2 42.003.10E-021.71E+011.30E+034.84E+041.73E-016.64E+001.81E+024.30E+03 + 74M2 54.001.48E-025.15E+003.02E+029.15E+038.25E-022.47E+005.49E+011.08E+03 + 74M2 72.006.24E-031.33E+005.81E+011.39E+033.54E-028.10E-011.43E+012.25E+02 + 74M2 105.001.97E-032.31E-016.99E+001.22E+021.18E-021.92E-012.49E+002.92E+01 + 74M2 150.006.58E-044.59E-029.93E-011.30E+014.21E-035.04E-024.94E-014.40E+00 + 74M2 280.009.86E-053.06E-033.82E-023.06E-017.07E-045.23E-033.21E-021.80E-01 + 74M2 500.001.83E-052.94E-042.33E-031.24E-021.38E-047.03E-042.94E-031.12E-02 + 74M3 3.282.42E+017.17E+061.35E+102.86E+124.89E+011.09E+071.75E+112.98E+14 + 74M3 4.281.51E+011.89E+062.34E+094.34E+112.19E+012.90E+062.78E+103.06E+13 + 74M3 6.286.83E+002.75E+051.94E+082.84E+106.85E+004.27E+051.98E+091.20E+12 + 74M3 10.282.15E+002.31E+048.30E+068.67E+081.53E+003.64E+046.75E+072.01E+10 + 74M3 17.285.51E-011.69E+033.19E+052.26E+073.16E-012.73E+032.00E+063.03E+08 + 74M3 27.001.55E-011.80E+022.02E+041.01E+068.15E-022.96E+021.02E+059.08E+06 + 74M3 42.004.11E-021.97E+011.36E+034.72E+042.14E-023.29E+015.69E+033.10E+05 + 74M3 54.001.88E-025.63E+002.95E+028.34E+031.00E-029.45E+001.13E+034.75E+04 + 74M3 72.007.54E-031.35E+005.21E+011.15E+034.23E-032.27E+001.83E+025.77E+03 + 74M3 105.002.23E-032.09E-015.46E+008.75E+011.37E-033.55E-011.77E+013.91E+02 + 74M3 150.006.97E-043.67E-026.61E-017.82E+004.74E-046.20E-022.06E+003.31E+01 + 74M3 280.009.42E-051.87E-031.79E-021.26E-017.64E-053.07E-035.53E-025.42E-01 + 74M3 500.001.62E-051.37E-047.50E-043.36E-031.48E-052.07E-042.29E-031.52E-02 + 74M4 2.876.52E+012.22E+051.20E+101.48E+141.52E+013.51E+052.92E+092.12E+12 + 74M4 3.872.62E+014.85E+041.48E+091.09E+135.80E+007.88E+043.88E+082.24E+11 + 74M4 5.876.77E+005.83E+037.92E+072.93E+111.49E+009.73E+032.40E+079.79E+09 + 74M4 9.871.12E+004.17E+022.05E+063.40E+092.64E-017.13E+027.79E+052.02E+08 + 74M4 16.871.55E-012.74E+014.70E+043.65E+074.26E-024.79E+012.42E+043.86E+06 + 74M4 27.002.52E-022.48E+001.73E+037.22E+058.29E-034.47E+001.21E+031.25E+05 + 74M4 42.004.28E-032.57E-017.87E+011.90E+041.73E-034.82E-017.51E+015.19E+03 + 74M4 54.001.53E-037.06E-021.37E+012.46E+036.97E-041.36E-011.58E+018.64E+02 + 74M4 72.004.65E-041.61E-021.89E+002.42E+022.44E-043.21E-022.68E+001.13E+02 + 74M4 105.009.61E-052.32E-031.44E-011.20E+016.06E-054.87E-032.70E-018.08E+00 + 74M4 150.002.16E-053.80E-041.32E-027.44E-011.60E-058.25E-043.17E-026.96E-01 + 74M4 280.001.65E-061.73E-052.39E-046.71E-031.53E-063.82E-058.13E-041.07E-02 + 74M4 500.001.67E-071.12E-067.50E-061.09E-041.72E-072.32E-063.03E-052.61E-04 + 74M5 2.819.89E+012.60E+052.27E+102.46E+149.04E+002.88E+041.55E+107.52E+14 + 74M5 3.813.86E+015.45E+042.68E+091.71E+133.40E+006.32E+031.85E+094.96E+13 + 74M5 5.819.63E+006.28E+031.37E+084.32E+118.60E-017.70E+029.68E+071.15E+12 + 74M5 9.811.53E+004.33E+023.41E+064.72E+091.53E-015.65E+012.48E+061.11E+10 + 74M5 16.812.05E-012.74E+017.58E+044.80E+072.50E-023.89E+005.76E+049.78E+07 + 74M5 27.003.21E-022.37E+002.65E+038.85E+054.92E-033.73E-012.11E+031.60E+06 + 74M5 42.005.33E-032.37E-011.17E+022.21E+041.05E-034.27E-029.69E+013.66E+04 + 74M5 54.001.88E-036.34E-021.98E+012.76E+034.33E-041.26E-021.69E+014.39E+03 + 74M5 72.005.63E-041.39E-022.60E+002.57E+021.55E-043.13E-032.29E+003.98E+02 + 74M5 105.001.15E-041.91E-031.85E-011.17E+013.99E-055.16E-041.68E-011.79E+01 + 74M5 150.002.58E-052.95E-041.55E-026.51E-011.10E-059.67E-051.45E-021.01E+00 + 74M5 280.002.05E-061.24E-052.23E-044.53E-031.18E-065.71E-062.12E-047.59E-03 + 74M5 500.002.23E-078.08E-075.44E-065.36E-051.63E-074.89E-075.02E-069.63E-05 + 74N+ 50.002.38E-024.67E+003.04E+021.23E+043.37E-011.62E+018.51E+023.59E+04 + 74N+ 70.009.38E-039.10E-014.06E+011.14E+031.25E-013.59E+001.12E+023.08E+03 + 74N+ 100.003.58E-031.71E-015.15E+001.00E+024.48E-027.85E-011.46E+012.62E+02 + 74N+ 150.001.19E-032.70E-025.17E-016.86E+001.40E-021.48E-011.63E+001.82E+01 + 74N+ 200.005.50E-047.73E-031.07E-011.09E+006.14E-034.76E-023.74E-013.06E+00 + 74N+ 500.005.89E-052.67E-041.34E-036.07E-035.09E-041.87E-036.32E-032.19E-02 + 75K 72.687.01E-019.09E-012.33E-011.52E-021.11E+011.03E+021.74E+026.32E+01 + 75K 73.386.86E-019.32E-013.05E-013.95E-021.08E+019.97E+011.77E+028.17E+01 + 75K 74.686.56E-019.65E-014.40E-011.12E-011.03E+019.36E+011.79E+021.15E+02 + 75K 77.885.91E-011.01E+007.58E-014.24E-019.10E+008.05E+011.78E+021.86E+02 + 75K 81.685.24E-011.03E+001.08E+009.62E-017.92E+006.78E+011.71E+022.48E+02 + 75K 86.004.61E-011.01E+001.36E+001.65E+006.82E+005.63E+011.58E+022.90E+02 + 75K 92.003.89E-019.57E-011.60E+002.54E+005.62E+004.43E+011.37E+023.10E+02 + 75K 100.003.15E-018.54E-011.72E+003.37E+004.42E+003.28E+011.10E+022.96E+02 + 75K 112.002.36E-016.98E-011.65E+003.88E+003.19E+002.19E+017.88E+012.43E+02 + 75K 125.001.78E-015.54E-011.44E+003.78E+002.33E+001.48E+015.51E+011.83E+02 + 75K 142.001.28E-014.11E-011.14E+003.24E+001.62E+009.47E+003.55E+011.23E+02 + 75K 155.001.03E-013.31E-019.48E-012.76E+001.26E+006.97E+002.60E+019.09E+01 + 75K 172.007.87E-022.54E-017.41E-012.21E+009.44E-014.86E+001.78E+016.21E+01 + 75K 195.005.72E-021.83E-015.38E-011.62E+006.64E-013.16E+001.12E+013.83E+01 + 75K 220.004.23E-021.33E-013.89E-011.16E+004.76E-012.10E+007.17E+002.38E+01 + 75K 285.002.24E-026.68E-021.90E-015.48E-012.34E-018.91E-012.76E+008.38E+00 + 75K 370.001.21E-023.43E-029.29E-022.51E-011.16E-013.87E-011.07E+002.93E+00 + 75K 460.007.42E-032.02E-025.21E-021.32E-016.53E-021.98E-015.01E-011.24E+00 + 75K 570.004.70E-031.24E-023.03E-027.17E-023.74E-021.05E-012.43E-015.50E-01 + 75K 800.002.39E-036.05E-031.36E-022.88E-021.58E-023.99E-028.22E-021.63E-01 + 75K 1050.001.44E-033.54E-037.46E-031.45E-027.99E-031.91E-023.63E-026.56E-02 + 75K 1300.009.87E-042.36E-034.75E-038.75E-034.72E-031.10E-021.98E-023.36E-02 + 75K 1550.007.31E-041.70E-033.32E-035.85E-033.07E-037.03E-031.22E-021.99E-02 + 75L1 13.532.18E+004.72E+021.52E+045.63E+042.34E+025.88E+042.78E+062.92E+07 + 75L1 14.232.01E+003.68E+021.42E+049.76E+042.02E+024.64E+042.12E+062.61E+07 + 75L1 15.531.74E+002.36E+021.16E+041.38E+051.55E+023.07E+041.32E+061.95E+07 + 75L1 18.731.25E+008.87E+015.94E+031.22E+058.89E+011.28E+044.75E+058.57E+06 + 75L1 22.538.90E-013.24E+012.64E+036.80E+045.13E+015.43E+031.75E+053.33E+06 + 75L1 26.006.73E-011.45E+011.32E+033.73E+043.35E+012.81E+038.06E+041.53E+06 + 75L1 32.004.42E-014.41E+004.51E+021.36E+041.81E+011.10E+032.65E+044.74E+05 + 75L1 40.002.76E-011.30E+001.34E+024.09E+039.36E+004.06E+028.12E+031.31E+05 + 75L1 52.001.54E-014.26E-013.07E+019.07E+024.32E+001.29E+022.06E+032.87E+04 + 75L1 65.009.27E-022.33E-018.87E+002.41E+022.25E+004.96E+016.57E+027.88E+03 + 75L1 82.005.38E-021.45E-012.63E+006.05E+011.14E+001.88E+012.04E+022.08E+03 + 75L1 95.003.78E-021.08E-011.30E+002.56E+017.46E-011.03E+019.89E+019.03E+02 + 75L1 112.002.55E-027.65E-026.47E-011.01E+014.64E-015.31E+004.45E+013.59E+02 + 75L1 135.001.62E-025.05E-023.20E-013.75E+002.72E-012.54E+001.83E+011.29E+02 + 75L1 160.001.07E-023.40E-021.80E-011.62E+001.68E-011.32E+008.31E+005.13E+01 + 75L1 225.004.70E-031.48E-026.24E-023.61E-016.46E-023.74E-011.81E+008.68E+00 + 75L1 310.002.22E-036.77E-032.44E-021.04E-012.68E-021.21E-014.65E-011.78E+00 + 75L1 400.001.26E-033.69E-031.20E-024.23E-021.35E-025.15E-021.68E-015.43E-01 + 75L1 510.007.47E-042.12E-036.24E-031.89E-027.13E-032.37E-026.69E-021.86E-01 + 75L1 740.003.54E-049.58E-042.45E-036.11E-032.73E-037.70E-031.80E-024.11E-02 + 75L11000.002.03E-045.25E-041.22E-032.65E-031.27E-033.28E-036.81E-031.35E-02 + 75L11500.001.00E-042.44E-045.04E-049.53E-044.67E-041.11E-032.05E-033.53E-03 + 75L2 12.964.69E+002.44E+044.44E+069.51E+072.67E+012.40E+033.70E+041.23E+05 + 75L2 13.664.07E+001.88E+043.29E+068.24E+072.28E+011.97E+033.54E+042.15E+05 + 75L2 14.963.18E+001.20E+041.95E+065.85E+071.73E+011.39E+033.00E+043.10E+05 + 75L2 18.161.86E+004.60E+036.38E+052.30E+079.67E+006.61E+021.72E+042.88E+05 + 75L2 21.961.08E+001.80E+032.13E+058.06E+065.46E+003.19E+028.70E+031.75E+05 + 75L2 26.006.65E-017.88E+028.04E+043.00E+063.29E+001.66E+024.48E+039.46E+04 + 75L2 32.003.60E-012.86E+022.43E+048.49E+051.77E+007.48E+011.90E+033.95E+04 + 75L2 40.001.84E-019.71E+016.74E+032.12E+059.08E-013.17E+017.27E+021.41E+04 + 75L2 52.008.25E-022.76E+011.51E+034.06E+044.17E-011.16E+012.29E+023.93E+03 + 75L2 65.004.13E-029.57E+004.25E+029.88E+032.16E-014.96E+008.46E+011.28E+03 + 75L2 82.002.00E-023.21E+001.16E+022.27E+031.09E-012.06E+002.99E+013.88E+02 + 75L2 95.001.26E-021.62E+005.10E+018.99E+027.10E-021.18E+001.55E+011.82E+02 + 75L2 112.007.51E-037.62E-012.06E+013.21E+024.39E-026.39E-017.41E+007.76E+01 + 75L2 135.004.18E-033.26E-017.44E+001.01E+022.56E-023.19E-013.23E+002.96E+01 + 75L2 160.002.46E-031.52E-012.99E+003.55E+011.57E-021.71E-011.52E+001.24E+01 + 75L2 225.008.55E-043.42E-025.00E-014.59E+005.90E-034.96E-023.46E-012.20E+00 + 75L2 310.003.24E-048.83E-039.90E-027.19E-012.37E-031.59E-028.89E-024.53E-01 + 75L2 400.001.53E-043.12E-032.87E-021.74E-011.16E-036.59E-033.11E-021.34E-01 + 75L2 510.007.67E-051.20E-039.24E-034.78E-025.86E-042.89E-031.17E-024.35E-02 + 75L2 740.002.76E-053.00E-041.79E-037.39E-032.08E-048.50E-042.81E-038.46E-03 + 75L21000.001.26E-051.05E-045.18E-041.82E-039.03E-053.26E-049.35E-042.43E-03 + 75L21500.004.55E-062.80E-051.11E-043.24E-042.94E-059.40E-052.30E-045.08E-04 + 75L3 11.531.04E+015.71E+041.25E+073.20E+084.90E+008.65E+041.16E+081.68E+10 + 75L3 12.238.79E+004.24E+048.79E+062.60E+084.09E+006.46E+047.79E+071.07E+10 + 75L3 13.536.56E+002.55E+044.79E+061.66E+083.00E+003.90E+043.94E+074.94E+09 + 75L3 16.733.52E+008.72E+031.34E+065.39E+071.56E+001.35E+049.44E+069.81E+08 + 75L3 20.531.90E+003.10E+033.92E+051.60E+078.35E-014.88E+032.41E+062.08E+08 + 75L3 26.009.20E-019.44E+029.48E+043.67E+064.06E-011.51E+035.04E+053.52E+07 + 75L3 32.004.80E-013.32E+022.72E+049.62E+052.15E-015.36E+021.29E+057.46E+06 + 75L3 40.002.36E-011.08E+027.12E+032.22E+051.09E-011.77E+023.03E+041.43E+06 + 75L3 52.001.01E-012.91E+011.47E+033.87E+044.90E-024.81E+015.65E+032.11E+05 + 75L3 65.004.86E-029.55E+003.88E+028.66E+032.49E-021.59E+011.38E+034.22E+04 + 75L3 82.002.25E-023.01E+009.68E+011.81E+031.23E-025.05E+003.24E+028.11E+03 + 75L3 95.001.38E-021.45E+004.03E+016.72E+027.93E-032.45E+001.31E+022.89E+03 + 75L3 112.008.01E-036.46E-011.52E+012.22E+024.84E-031.09E+004.80E+019.23E+02 + 75L3 135.004.31E-032.58E-015.04E+006.32E+012.77E-034.37E-011.56E+012.57E+02 + 75L3 160.002.46E-031.13E-011.86E+002.03E+011.67E-031.91E-015.70E+008.19E+01 + 75L3 225.008.09E-042.20E-022.57E-012.12E+006.10E-043.68E-027.85E-018.69E+00 + 75L3 310.002.91E-044.88E-034.16E-022.65E-012.40E-048.00E-031.28E-011.13E+00 + 75L3 400.001.32E-041.53E-031.02E-025.33E-021.16E-042.43E-033.15E-022.35E-01 + 75L3 510.006.42E-055.27E-042.79E-031.22E-025.86E-057.97E-048.53E-035.49E-02 + 75L3 740.002.26E-051.13E-044.30E-041.46E-032.14E-051.55E-041.22E-036.44E-03 + 75L31000.001.03E-053.60E-051.07E-043.03E-049.95E-064.46E-052.70E-041.22E-03 + 75L31500.003.94E-069.14E-062.01E-054.52E-053.85E-061.00E-053.92E-051.45E-04 + 75M1 3.933.67E+001.82E+041.20E+067.58E+072.12E+036.24E+063.41E+094.11E+11 + 75M1 4.932.86E+007.12E+035.18E+052.56E+071.08E+032.06E+067.84E+088.62E+10 + 75M1 6.931.78E+001.67E+031.50E+055.13E+063.91E+023.90E+058.88E+078.01E+09 + 75M1 10.938.33E-012.18E+022.35E+049.32E+051.00E+024.30E+045.17E+063.36E+08 + 75M1 17.933.29E-012.05E+012.40E+031.03E+052.29E+014.09E+032.60E+051.13E+07 + 75M1 27.001.43E-012.56E+003.04E+021.23E+046.77E+006.09E+022.39E+047.35E+05 + 75M1 42.005.49E-022.97E-012.87E+011.01E+031.83E+008.25E+011.99E+034.17E+04 + 75M1 54.003.11E-021.13E-017.30E+002.31E+028.75E-012.73E+015.08E+028.52E+03 + 75M1 72.001.59E-025.03E-021.57E+004.16E+013.77E-017.94E+001.11E+021.45E+03 + 75M1 105.006.48E-032.08E-022.52E-014.60E+001.26E-011.66E+001.62E+011.53E+02 + 75M1 150.002.74E-038.99E-036.04E-026.68E-014.55E-024.03E-012.86E+002.00E+01 + 75M1 280.006.18E-041.94E-037.87E-033.98E-027.98E-034.01E-021.73E-017.39E-01 + 75M1 500.001.72E-044.96E-041.52E-034.86E-031.69E-035.79E-031.69E-024.90E-02 + 75M2 3.688.39E+003.02E+064.95E+099.64E+112.78E+022.25E+053.13E+071.02E+09 + 75M2 4.685.94E+009.14E+051.04E+091.83E+111.36E+027.56E+049.52E+064.81E+08 + 75M2 6.683.15E+001.55E+051.06E+081.53E+104.65E+011.55E+041.60E+069.52E+07 + 75M2 10.681.16E+001.51E+045.50E+065.83E+081.14E+012.02E+031.54E+058.38E+06 + 75M2 17.683.44E-011.26E+032.47E+051.81E+072.52E+002.42E+021.28E+045.43E+05 + 75M2 27.001.12E-011.59E+021.93E+041.02E+067.14E-014.28E+011.63E+035.29E+04 + 75M2 42.003.24E-021.88E+011.42E+035.26E+041.93E-017.31E+001.97E+024.65E+03 + 75M2 54.001.56E-025.65E+003.30E+029.95E+039.20E-022.72E+006.00E+011.17E+03 + 75M2 72.006.60E-031.46E+006.36E+011.51E+033.96E-028.93E-011.56E+012.44E+02 + 75M2 105.002.10E-032.53E-017.66E+001.33E+021.32E-022.12E-012.73E+003.18E+01 + 75M2 150.007.04E-045.05E-021.09E+001.42E+014.71E-035.58E-025.43E-014.80E+00 + 75M2 280.001.06E-043.38E-034.21E-023.36E-017.93E-045.81E-033.55E-021.98E-01 + 75M2 500.001.99E-053.26E-042.58E-031.37E-021.55E-047.85E-043.26E-031.24E-02 + 75M3 3.372.31E+016.82E+061.24E+102.56E+124.84E+011.07E+071.67E+112.78E+14 + 75M3 4.371.45E+011.85E+062.25E+094.05E+112.21E+012.94E+062.77E+103.00E+13 + 75M3 6.376.71E+002.78E+051.93E+082.77E+107.03E+004.47E+052.05E+091.24E+12 + 75M3 10.372.15E+002.40E+048.54E+068.76E+081.60E+003.92E+047.27E+072.16E+10 + 75M3 17.375.59E-011.79E+033.34E+052.34E+073.33E-012.99E+032.21E+063.34E+08 + 75M3 27.001.60E-011.95E+022.18E+041.08E+068.73E-023.31E+021.16E+051.03E+07 + 75M3 42.004.28E-022.14E+011.46E+035.05E+042.29E-023.68E+016.44E+033.52E+05 + 75M3 54.001.96E-026.10E+003.19E+028.92E+031.07E-021.06E+011.28E+035.37E+04 + 75M3 72.007.90E-031.46E+005.63E+011.24E+034.53E-032.55E+002.07E+026.51E+03 + 75M3 105.002.34E-032.27E-015.89E+009.38E+011.46E-033.97E-011.99E+014.39E+02 + 75M3 150.007.37E-043.98E-027.14E-018.39E+005.08E-046.93E-022.32E+003.72E+01 + 75M3 280.001.00E-042.03E-031.94E-021.35E-018.18E-053.42E-036.19E-026.05E-01 + 75M3 500.001.73E-051.49E-048.11E-043.63E-031.58E-052.30E-042.55E-031.70E-02 + 75M4 2.956.24E+012.11E+051.11E+101.33E+141.50E+013.47E+052.79E+091.97E+12 + 75M4 3.952.56E+014.77E+041.43E+091.04E+135.88E+008.06E+043.89E+082.20E+11 + 75M4 5.956.79E+005.93E+038.03E+072.97E+111.54E+001.03E+042.51E+071.01E+10 + 75M4 9.951.15E+004.37E+022.15E+063.60E+092.79E-017.75E+028.43E+052.16E+08 + 75M4 16.951.62E-012.92E+015.07E+043.96E+074.57E-025.29E+012.67E+044.23E+06 + 75M4 27.002.70E-022.71E+001.92E+038.13E+059.05E-035.06E+001.37E+031.41E+05 + 75M4 42.004.62E-032.82E-018.77E+012.14E+041.89E-035.46E-018.51E+015.86E+03 + 75M4 54.001.65E-037.77E-021.53E+012.77E+037.64E-041.54E-011.79E+019.75E+02 + 75M4 72.005.04E-041.77E-022.10E+002.72E+022.68E-043.64E-023.04E+001.28E+02 + 75M4 105.001.05E-042.57E-031.61E-011.35E+016.68E-055.52E-033.06E-019.14E+00 + 75M4 150.002.37E-054.22E-041.48E-028.38E-011.77E-059.36E-043.60E-027.88E-01 + 75M4 280.001.82E-061.93E-052.67E-047.57E-031.69E-064.34E-059.24E-041.21E-02 + 75M4 500.001.82E-071.25E-068.39E-061.23E-041.91E-072.63E-063.45E-052.97E-04 + 75M5 2.889.46E+012.44E+052.11E+102.22E+148.93E+002.78E+041.49E+107.01E+14 + 75M5 3.883.78E+015.30E+042.61E+091.63E+133.43E+006.32E+031.86E+094.91E+13 + 75M5 5.889.66E+006.32E+031.40E+084.38E+118.88E-017.95E+021.02E+081.21E+12 + 75M5 9.881.57E+004.47E+023.61E+064.99E+091.61E-015.99E+012.71E+061.22E+10 + 75M5 16.882.15E-012.88E+018.21E+045.21E+072.66E-024.18E+006.43E+041.10E+08 + 75M5 27.003.43E-022.56E+002.96E+039.95E+055.33E-034.10E-012.42E+031.87E+06 + 75M5 42.005.73E-032.56E-011.30E+022.49E+041.14E-034.69E-021.12E+024.26E+04 + 75M5 54.002.03E-036.86E-022.21E+013.09E+034.71E-041.38E-021.94E+015.10E+03 + 75M5 72.006.09E-041.51E-022.91E+002.89E+021.69E-043.43E-032.63E+004.62E+02 + 75M5 105.001.25E-042.08E-032.07E-011.32E+014.36E-055.66E-041.93E-012.08E+01 + 75M5 150.002.80E-053.22E-041.74E-027.30E-011.21E-051.06E-041.66E-021.17E+00 + 75M5 280.002.22E-061.35E-052.49E-045.08E-031.30E-066.28E-062.42E-048.73E-03 + 75M5 500.002.42E-078.77E-076.05E-066.00E-051.79E-075.38E-075.69E-061.10E-04 + 75N+ 50.002.49E-025.15E+003.36E+021.37E+043.75E-011.81E+019.68E+024.12E+04 + 75N+ 70.009.81E-031.01E+004.48E+011.26E+031.38E-014.01E+001.27E+023.52E+03 + 75N+ 100.003.76E-031.89E-015.69E+001.11E+024.98E-028.76E-011.65E+012.97E+02 + 75N+ 150.001.25E-032.97E-025.71E-017.58E+001.55E-021.65E-011.82E+002.05E+01 + 75N+ 200.005.79E-048.47E-031.18E-011.21E+006.82E-035.29E-024.17E-013.43E+00 + 75N+ 500.006.24E-052.90E-041.47E-036.72E-035.63E-042.07E-036.99E-032.43E-02 + 76K 74.876.61E-018.22E-012.05E-011.28E-021.11E+019.89E+011.61E+025.66E+01 + 76K 75.576.46E-018.42E-012.66E-013.28E-021.08E+019.56E+011.63E+027.26E+01 + 76K 76.876.20E-018.72E-013.81E-019.22E-021.03E+019.00E+011.66E+021.02E+02 + 76K 80.075.60E-019.18E-016.55E-013.49E-019.13E+007.77E+011.65E+021.64E+02 + 76K 83.874.98E-019.35E-019.38E-017.96E-017.98E+006.58E+011.59E+022.20E+02 + 76K 88.004.42E-019.24E-011.18E+001.35E+006.94E+005.54E+011.48E+022.57E+02 + 76K 94.003.74E-018.77E-011.40E+002.11E+005.74E+004.38E+011.30E+022.79E+02 + 76K 102.003.05E-017.90E-011.52E+002.87E+004.54E+003.27E+011.06E+022.70E+02 + 76K 114.002.30E-016.52E-011.48E+003.37E+003.30E+002.20E+017.63E+012.26E+02 + 76K 127.001.74E-015.22E-011.31E+003.35E+002.42E+001.50E+015.40E+011.73E+02 + 76K 144.001.27E-013.92E-011.06E+002.93E+001.69E+009.67E+003.51E+011.18E+02 + 76K 157.001.02E-013.18E-018.88E-012.54E+001.33E+007.15E+002.59E+018.80E+01 + 76K 174.007.83E-022.45E-017.01E-012.05E+009.93E-015.01E+001.79E+016.07E+01 + 76K 197.005.72E-021.78E-015.15E-011.53E+007.02E-013.28E+001.13E+013.79E+01 + 76K 225.004.11E-021.26E-013.64E-011.07E+004.86E-012.09E+006.96E+002.25E+01 + 76K 290.002.21E-026.49E-021.83E-015.22E-012.42E-019.05E-012.74E+008.16E+00 + 76K 375.001.21E-023.40E-029.15E-022.45E-011.21E-013.99E-011.09E+002.92E+00 + 76K 460.007.69E-032.08E-025.37E-021.36E-017.08E-022.13E-015.33E-011.31E+00 + 76K 570.004.88E-031.28E-023.14E-027.42E-024.05E-021.12E-012.59E-015.82E-01 + 76K 800.002.49E-036.32E-031.42E-023.01E-021.70E-024.29E-028.78E-021.73E-01 + 76K 1050.001.50E-033.70E-037.82E-031.53E-028.61E-032.06E-023.88E-026.99E-02 + 76K 1300.001.03E-032.47E-035.00E-039.21E-035.07E-031.18E-022.11E-023.58E-02 + 76K 1550.007.64E-041.79E-033.49E-036.17E-033.29E-037.55E-031.31E-022.12E-02 + 76L1 13.972.05E+004.42E+021.35E+044.74E+042.34E+025.61E+042.55E+062.58E+07 + 76L1 14.671.89E+003.47E+021.28E+048.25E+042.02E+024.45E+041.96E+062.32E+07 + 76L1 15.971.64E+002.27E+021.05E+041.18E+051.57E+022.98E+041.23E+061.76E+07 + 76L1 19.171.20E+008.80E+015.55E+031.08E+059.12E+011.27E+044.58E+057.93E+06 + 76L1 22.978.57E-013.32E+012.54E+036.24E+045.32E+015.50E+031.72E+053.16E+06 + 76L1 26.006.75E-011.67E+011.41E+033.77E+043.68E+013.11E+038.82E+041.62E+06 + 76L1 32.004.44E-015.19E+004.90E+021.42E+041.99E+011.21E+032.90E+045.07E+05 + 76L1 40.002.78E-011.53E+001.48E+024.35E+031.03E+014.48E+028.88E+031.41E+05 + 76L1 52.001.56E-014.75E-013.46E+019.83E+024.75E+001.42E+022.26E+033.10E+04 + 76L1 65.009.42E-022.44E-011.01E+012.65E+022.47E+005.46E+017.18E+028.53E+03 + 76L1 82.005.48E-021.47E-012.98E+006.73E+011.25E+002.07E+012.23E+022.25E+03 + 76L1 95.003.87E-021.09E-011.47E+002.86E+018.19E-011.13E+011.08E+029.78E+02 + 76L1 112.002.61E-027.70E-027.18E-011.13E+015.09E-015.82E+004.85E+013.89E+02 + 76L1 135.001.66E-025.10E-023.49E-014.18E+002.98E-012.79E+001.99E+011.39E+02 + 76L1 160.001.10E-023.45E-021.93E-011.79E+001.84E-011.45E+009.05E+005.57E+01 + 76L1 225.004.86E-031.52E-026.60E-023.93E-017.09E-024.09E-011.97E+009.41E+00 + 76L1 310.002.30E-037.00E-032.58E-021.12E-012.94E-021.32E-015.06E-011.93E+00 + 76L1 400.001.31E-033.84E-031.26E-024.53E-021.48E-025.62E-021.82E-015.89E-01 + 76L1 510.007.78E-042.22E-036.60E-032.03E-027.79E-032.58E-027.27E-022.02E-01 + 76L1 740.003.70E-041.01E-032.60E-036.52E-032.97E-038.38E-031.96E-024.45E-02 + 76L11000.002.12E-045.55E-041.29E-032.83E-031.39E-033.57E-037.38E-031.47E-02 + 76L11500.001.05E-042.58E-045.37E-041.02E-035.06E-041.21E-032.22E-033.82E-03 + 76L2 13.384.41E+002.26E+043.95E+068.12E+072.68E+012.29E+033.38E+041.06E+05 + 76L2 14.083.85E+001.76E+042.95E+067.09E+072.30E+011.89E+033.25E+041.86E+05 + 76L2 15.383.03E+001.13E+041.78E+065.10E+071.76E+011.35E+032.78E+042.71E+05 + 76L2 18.581.80E+004.46E+035.99E+052.08E+079.98E+006.55E+021.63E+042.60E+05 + 76L2 22.381.06E+001.79E+032.05E+057.49E+065.70E+003.21E+028.43E+031.62E+05 + 76L2 26.006.91E-018.57E+028.66E+043.14E+063.64E+001.81E+024.72E+039.57E+04 + 76L2 32.003.75E-013.12E+022.62E+048.96E+051.96E+008.13E+012.01E+034.07E+04 + 76L2 40.001.93E-011.06E+027.29E+032.25E+051.01E+003.45E+017.76E+021.48E+04 + 76L2 52.008.67E-023.01E+011.63E+034.34E+044.63E-011.27E+012.46E+024.15E+03 + 76L2 65.004.35E-021.04E+014.62E+021.06E+042.39E-015.42E+009.12E+011.36E+03 + 76L2 82.002.11E-023.51E+001.26E+022.45E+031.21E-012.25E+003.23E+014.15E+02 + 76L2 95.001.33E-021.77E+005.54E+019.70E+027.89E-021.30E+001.68E+011.95E+02 + 76L2 112.007.97E-038.33E-012.24E+013.47E+024.89E-027.01E-018.04E+008.35E+01 + 76L2 135.004.45E-033.57E-018.12E+001.09E+022.85E-023.51E-013.51E+003.19E+01 + 76L2 160.002.62E-031.67E-013.26E+003.85E+011.74E-021.88E-011.66E+001.34E+01 + 76L2 225.009.17E-043.76E-025.47E-015.00E+006.58E-035.47E-023.79E-012.39E+00 + 76L2 310.003.49E-049.71E-031.09E-017.86E-012.65E-031.76E-029.76E-024.94E-01 + 76L2 400.001.66E-043.44E-033.16E-021.91E-011.29E-037.30E-033.42E-021.47E-01 + 76L2 510.008.30E-051.33E-031.02E-025.25E-026.56E-043.21E-031.30E-024.78E-02 + 76L2 740.002.99E-053.32E-041.98E-038.15E-032.33E-049.46E-043.11E-039.33E-03 + 76L21000.001.36E-051.16E-045.74E-042.01E-031.01E-043.64E-041.04E-032.69E-03 + 76L21500.004.98E-063.10E-051.23E-043.60E-043.30E-051.05E-042.57E-045.64E-04 + 76L3 11.879.82E+005.32E+041.12E+072.78E+084.77E+008.34E+041.08E+081.51E+10 + 76L3 12.578.34E+003.98E+047.97E+062.27E+084.01E+006.27E+047.33E+079.77E+09 + 76L3 13.876.28E+002.42E+044.41E+061.47E+082.96E+003.84E+043.77E+074.60E+09 + 76L3 17.073.41E+008.49E+031.27E+064.92E+071.57E+001.36E+049.32E+069.46E+08 + 76L3 20.871.87E+003.08E+033.79E+051.51E+078.46E-015.01E+032.43E+062.06E+08 + 76L3 26.009.52E-011.02E+031.01E+053.83E+064.32E-011.68E+035.68E+053.94E+07 + 76L3 32.004.98E-013.58E+022.91E+041.01E+062.29E-015.96E+021.45E+058.35E+06 + 76L3 40.002.45E-011.17E+027.60E+032.34E+051.16E-011.97E+023.41E+041.60E+06 + 76L3 52.001.05E-013.13E+011.58E+034.09E+045.22E-025.35E+016.33E+032.35E+05 + 76L3 65.005.07E-021.03E+014.15E+029.17E+032.65E-021.77E+011.54E+034.71E+04 + 76L3 82.002.36E-023.24E+001.04E+021.92E+031.31E-025.62E+003.62E+029.03E+03 + 76L3 95.001.45E-021.57E+004.32E+017.13E+028.44E-032.72E+001.46E+023.22E+03 + 76L3 112.008.40E-036.96E-011.63E+012.36E+025.15E-031.21E+005.36E+011.03E+03 + 76L3 135.004.53E-032.78E-015.40E+006.72E+012.95E-034.85E-011.74E+012.86E+02 + 76L3 160.002.59E-031.22E-011.99E+002.16E+011.78E-032.12E-016.35E+009.09E+01 + 76L3 225.008.53E-042.37E-022.75E-012.26E+006.50E-044.08E-028.73E-019.63E+00 + 76L3 310.003.08E-045.26E-034.47E-022.83E-012.56E-048.84E-031.42E-011.25E+00 + 76L3 400.001.40E-041.65E-031.09E-025.71E-021.23E-042.68E-033.49E-022.60E-01 + 76L3 510.006.81E-055.67E-043.00E-031.31E-026.24E-058.78E-049.44E-036.07E-02 + 76L3 740.002.39E-051.21E-044.61E-041.57E-032.28E-051.69E-041.35E-037.11E-03 + 76L31000.001.09E-053.86E-051.15E-043.25E-041.05E-054.86E-052.98E-041.35E-03 + 76L31500.004.16E-069.74E-062.16E-054.85E-054.07E-061.08E-054.30E-051.59E-04 + 76M1 4.053.47E+001.76E+041.17E+066.55E+072.15E+036.05E+063.20E+093.73E+11 + 76M1 5.052.72E+007.04E+035.11E+052.39E+071.11E+032.05E+067.64E+088.15E+10 + 76M1 7.051.71E+001.70E+031.49E+055.07E+064.10E+024.02E+059.03E+077.95E+09 + 76M1 11.058.16E-012.31E+022.40E+049.28E+051.07E+024.57E+045.45E+063.48E+08 + 76M1 18.053.26E-012.26E+012.52E+031.05E+052.48E+014.42E+032.80E+051.21E+07 + 76M1 27.001.44E-012.98E+003.35E+021.32E+047.47E+006.78E+022.66E+048.15E+05 + 76M1 42.005.57E-023.44E-013.23E+011.11E+032.02E+009.17E+012.21E+034.61E+04 + 76M1 54.003.17E-021.26E-018.31E+002.56E+029.65E-013.03E+015.62E+029.40E+03 + 76M1 72.001.63E-025.29E-021.80E+004.66E+014.16E-018.79E+001.22E+021.59E+03 + 76M1 105.006.65E-032.13E-022.85E-015.19E+001.39E-011.83E+001.78E+011.68E+02 + 76M1 150.002.82E-039.20E-036.63E-027.50E-015.01E-024.45E-013.15E+002.19E+01 + 76M1 280.006.43E-042.01E-038.39E-034.36E-028.78E-034.40E-021.89E-018.08E-01 + 76M1 500.001.79E-045.22E-041.62E-035.24E-031.86E-036.34E-031.85E-025.34E-02 + 76M2 3.797.91E+002.85E+064.51E+098.49E+112.82E+022.19E+052.94E+079.05E+08 + 76M2 4.795.67E+008.89E+059.84E+081.68E+111.40E+027.57E+049.23E+064.45E+08 + 76M2 6.793.06E+001.57E+051.05E+081.48E+104.92E+011.60E+041.61E+069.22E+07 + 76M2 10.791.16E+001.57E+045.65E+065.89E+081.23E+012.13E+031.59E+058.46E+06 + 76M2 17.793.48E-011.33E+032.60E+051.88E+072.75E+002.60E+021.35E+045.64E+05 + 76M2 27.001.16E-011.74E+022.11E+041.10E+067.95E-014.71E+011.78E+035.70E+04 + 76M2 42.003.40E-022.05E+011.55E+035.71E+042.15E-018.05E+002.15E+025.02E+03 + 76M2 54.001.64E-026.19E+003.61E+021.08E+041.02E-013.00E+006.54E+011.27E+03 + 76M2 72.006.98E-031.60E+006.97E+011.65E+034.41E-029.84E-011.70E+012.64E+02 + 76M2 105.002.23E-032.78E-018.40E+001.45E+021.47E-022.34E-012.99E+003.46E+01 + 76M2 150.007.52E-045.56E-021.20E+001.55E+015.27E-036.17E-025.96E-015.24E+00 + 76M2 280.001.15E-043.73E-034.65E-023.70E-018.91E-046.46E-033.91E-022.17E-01 + 76M2 500.002.17E-053.61E-042.85E-031.51E-021.75E-048.75E-043.62E-031.37E-02 + 76M3 3.462.21E+016.47E+061.14E+102.28E+124.77E+011.05E+071.59E+112.57E+14 + 76M3 4.461.40E+011.81E+062.14E+093.76E+112.22E+012.97E+062.75E+102.92E+13 + 76M3 6.466.58E+002.81E+051.92E+082.69E+107.20E+004.67E+052.13E+091.27E+12 + 76M3 10.462.14E+002.49E+048.77E+068.83E+081.66E+004.20E+047.81E+072.32E+10 + 76M3 17.465.67E-011.89E+033.50E+052.41E+073.51E-013.26E+032.42E+063.66E+08 + 76M3 27.001.66E-012.11E+022.35E+041.15E+069.33E-023.71E+021.32E+051.18E+07 + 76M3 42.004.45E-022.32E+011.58E+035.40E+042.45E-024.12E+017.29E+033.98E+05 + 76M3 54.002.05E-026.61E+003.44E+029.54E+031.15E-021.18E+011.45E+036.06E+04 + 76M3 72.008.27E-031.58E+006.07E+011.32E+034.84E-032.85E+002.33E+027.34E+03 + 76M3 105.002.46E-032.46E-016.35E+001.01E+021.57E-034.44E-012.24E+014.93E+02 + 76M3 150.007.77E-044.31E-027.70E-019.00E+005.44E-047.74E-022.60E+004.17E+01 + 76M3 280.001.06E-042.19E-032.09E-021.45E-018.76E-053.81E-036.92E-026.76E-01 + 76M3 500.001.84E-051.61E-048.76E-043.91E-031.69E-052.54E-042.85E-031.89E-02 + 76M4 3.035.95E+011.99E+051.01E+101.19E+141.48E+013.41E+052.65E+091.82E+12 + 76M4 4.032.50E+014.67E+041.37E+099.85E+125.93E+008.20E+043.87E+082.13E+11 + 76M4 6.036.80E+006.02E+038.09E+072.98E+111.59E+001.09E+042.61E+071.03E+10 + 76M4 10.031.18E+004.56E+022.26E+063.78E+092.94E-018.40E+029.09E+052.30E+08 + 76M4 17.031.70E-013.11E+015.44E+044.29E+074.88E-025.83E+012.93E+044.61E+06 + 76M4 27.002.89E-022.97E+002.14E+039.15E+059.87E-035.72E+001.55E+031.60E+05 + 76M4 42.004.97E-033.10E-019.75E+012.41E+042.07E-036.17E-019.64E+016.61E+03 + 76M4 54.001.79E-038.53E-021.70E+013.11E+038.37E-041.74E-012.02E+011.10E+03 + 76M4 72.005.47E-041.95E-022.34E+003.06E+022.94E-044.12E-023.44E+001.44E+02 + 76M4 105.001.14E-042.84E-031.79E-011.52E+017.34E-056.25E-033.46E-011.03E+01 + 76M4 150.002.58E-054.68E-041.65E-029.43E-011.95E-051.06E-034.08E-028.90E-01 + 76M4 280.002.02E-062.15E-052.98E-048.53E-031.87E-064.92E-051.05E-031.37E-02 + 76M4 500.002.03E-071.40E-069.38E-061.39E-042.11E-072.99E-063.92E-053.37E-04 + 76M5 2.969.04E+012.28E+051.95E+102.00E+148.80E+002.68E+041.43E+106.50E+14 + 76M5 3.963.69E+015.13E+042.53E+091.56E+133.45E+006.30E+031.87E+094.84E+13 + 76M5 5.969.68E+006.33E+031.43E+084.42E+119.15E-018.19E+021.07E+081.26E+12 + 76M5 9.961.61E+004.60E+023.82E+065.26E+091.68E-016.34E+012.95E+061.33E+10 + 76M5 16.962.24E-013.02E+018.88E+045.63E+072.83E-024.49E+007.15E+041.24E+08 + 76M5 27.003.66E-022.75E+003.31E+031.12E+065.77E-034.51E-012.79E+032.18E+06 + 76M5 42.006.15E-032.77E-011.46E+022.79E+041.24E-035.15E-021.28E+024.96E+04 + 76M5 54.002.18E-037.42E-022.47E+013.47E+035.11E-041.51E-022.23E+015.92E+03 + 76M5 72.006.58E-041.64E-023.26E+003.23E+021.84E-043.77E-033.02E+005.35E+02 + 76M5 105.001.36E-042.26E-032.31E-011.47E+014.75E-056.21E-042.22E-012.40E+01 + 76M5 150.003.05E-053.50E-041.94E-028.18E-011.32E-051.17E-041.90E-021.35E+00 + 76M5 280.002.38E-061.48E-052.78E-045.69E-031.42E-066.89E-062.76E-041.00E-02 + 76M5 500.002.70E-079.61E-076.72E-066.72E-051.95E-075.91E-076.43E-061.26E-04 + 76N+ 50.002.61E-025.68E+003.70E+021.52E+044.20E-012.05E+011.10E+034.73E+04 + 76N+ 70.001.03E-021.11E+004.95E+011.39E+031.55E-014.53E+001.44E+024.02E+03 + 76N+ 100.003.95E-032.08E-016.28E+001.22E+025.58E-029.85E-011.87E+013.38E+02 + 76N+ 150.001.32E-033.27E-026.32E-018.37E+001.74E-021.85E-012.05E+002.32E+01 + 76N+ 200.006.13E-049.31E-031.31E-011.34E+007.64E-035.93E-024.69E-013.86E+00 + 76N+ 500.006.64E-053.16E-041.63E-037.46E-036.29E-042.31E-037.79E-032.71E-02 + 77K 77.116.23E-017.44E-011.80E-011.07E-021.11E+019.48E+011.49E+025.07E+01 + 77K 77.816.09E-017.61E-012.33E-012.74E-021.08E+019.18E+011.51E+026.47E+01 + 77K 79.115.85E-017.88E-013.31E-017.64E-021.03E+018.66E+011.53E+029.00E+01 + 77K 82.315.30E-018.30E-015.67E-012.88E-019.17E+007.51E+011.54E+021.45E+02 + 77K 86.114.74E-018.48E-018.13E-016.60E-018.05E+006.39E+011.48E+021.95E+02 + 77K 90.004.24E-018.42E-011.01E+001.10E+007.08E+005.46E+011.39E+022.28E+02 + 77K 96.003.61E-018.05E-011.22E+001.76E+005.88E+004.34E+011.23E+022.51E+02 + 77K 104.002.95E-017.30E-011.35E+002.44E+004.67E+003.26E+011.01E+022.47E+02 + 77K 116.002.24E-016.09E-011.33E+002.94E+003.41E+002.22E+017.40E+012.10E+02 + 77K 129.001.71E-014.93E-011.20E+002.98E+002.52E+001.52E+015.28E+011.63E+02 + 77K 146.001.25E-013.74E-019.85E-012.66E+001.77E+009.87E+003.48E+011.13E+02 + 77K 159.001.01E-013.05E-018.32E-012.33E+001.39E+007.34E+002.58E+018.52E+01 + 77K 176.007.79E-022.37E-016.64E-011.91E+001.05E+005.17E+001.80E+015.94E+01 + 77K 199.005.73E-021.74E-014.94E-011.44E+007.42E-013.40E+001.15E+013.75E+01 + 77K 225.004.22E-021.27E-013.61E-011.06E+005.28E-012.25E+007.34E+002.33E+01 + 77K 290.002.28E-026.59E-021.85E-015.23E-012.63E-019.73E-012.90E+008.53E+00 + 77K 375.001.25E-023.48E-029.34E-022.50E-011.32E-014.29E-011.16E+003.07E+00 + 77K 470.007.61E-032.05E-025.23E-021.31E-017.25E-022.14E-015.28E-011.27E+00 + 77K 580.004.89E-031.28E-023.12E-027.33E-024.19E-021.15E-012.61E-015.78E-01 + 77K 810.002.53E-036.43E-031.44E-023.04E-021.78E-024.46E-029.03E-021.76E-01 + 77K 1100.001.44E-033.55E-037.44E-031.43E-028.26E-031.95E-023.63E-026.41E-02 + 77K 1350.001.01E-032.42E-034.87E-038.88E-034.97E-031.15E-022.04E-023.40E-02 + 77K 1600.007.54E-041.77E-033.45E-036.06E-033.27E-037.48E-031.28E-022.06E-02 + 77L1 14.421.92E+004.14E+021.21E+044.00E+042.34E+025.35E+042.34E+062.28E+07 + 77L1 15.121.78E+003.28E+021.15E+046.99E+042.03E+024.28E+041.81E+062.06E+07 + 77L1 16.421.55E+002.18E+029.55E+031.01E+051.59E+022.90E+041.16E+061.58E+07 + 77L1 19.621.14E+008.73E+015.20E+039.56E+049.36E+011.26E+044.41E+057.34E+06 + 77L1 23.428.25E-013.40E+012.44E+035.72E+045.53E+015.56E+031.69E+053.01E+06 + 77L1 27.006.27E-011.56E+011.25E+033.23E+043.62E+012.90E+037.87E+041.40E+06 + 77L1 33.004.19E-015.12E+004.52E+021.26E+042.00E+011.17E+032.69E+044.56E+05 + 77L1 41.002.66E-011.58E+001.43E+024.03E+031.05E+014.43E+028.53E+031.32E+05 + 77L1 53.001.52E-014.98E-013.50E+019.53E+024.94E+001.44E+022.24E+032.99E+04 + 77L1 66.009.24E-022.49E-011.05E+012.66E+022.60E+005.64E+017.26E+028.44E+03 + 77L1 83.005.43E-021.46E-013.19E+006.96E+011.33E+002.16E+012.30E+022.28E+03 + 77L1 96.003.85E-021.08E-011.58E+003.01E+018.73E-011.19E+011.12E+029.99E+02 + 77L1 113.002.61E-027.63E-027.70E-011.21E+015.46E-016.17E+005.07E+014.02E+02 + 77L1 136.001.67E-025.08E-023.71E-014.49E+003.21E-012.97E+002.10E+011.45E+02 + 77L1 165.001.05E-023.26E-021.88E-011.72E+001.85E-011.41E+008.57E+005.12E+01 + 77L1 230.004.76E-031.48E-026.56E-023.92E-017.32E-024.13E-011.95E+009.12E+00 + 77L1 315.002.30E-036.98E-032.60E-021.14E-013.09E-021.37E-015.16E-011.94E+00 + 77L1 400.001.36E-034.00E-031.34E-024.87E-021.62E-026.13E-021.98E-016.38E-01 + 77L1 510.008.13E-042.32E-037.00E-032.17E-028.52E-032.81E-027.89E-022.19E-01 + 77L1 740.003.88E-041.06E-032.76E-036.97E-033.25E-039.12E-032.12E-024.82E-02 + 77L11000.002.22E-045.86E-041.37E-033.03E-031.51E-033.88E-038.01E-031.59E-02 + 77L11500.001.10E-042.73E-045.72E-041.09E-035.48E-041.31E-032.40E-034.13E-03 + 77L2 13.824.16E+002.10E+043.51E+066.93E+072.69E+012.19E+033.09E+049.14E+04 + 77L2 14.523.65E+001.64E+042.65E+066.09E+072.32E+011.81E+032.99E+041.61E+05 + 77L2 15.822.89E+001.07E+041.62E+064.45E+071.79E+011.31E+032.57E+042.37E+05 + 77L2 19.021.74E+004.32E+035.62E+051.87E+071.03E+016.49E+021.54E+042.34E+05 + 77L2 22.821.04E+001.77E+031.97E+056.94E+065.96E+003.23E+028.16E+031.50E+05 + 77L2 27.006.43E-017.76E+027.51E+042.62E+063.60E+001.70E+024.26E+038.36E+04 + 77L2 33.003.57E-012.92E+022.37E+047.83E+051.98E+007.86E+011.87E+033.67E+04 + 77L2 41.001.87E-011.02E+026.84E+032.05E+051.04E+003.42E+017.44E+021.37E+04 + 77L2 53.008.58E-022.99E+011.59E+034.11E+044.85E-011.28E+012.42E+023.99E+03 + 77L2 66.004.37E-021.06E+014.59E+021.03E+042.54E-015.59E+009.18E+011.34E+03 + 77L2 83.002.15E-023.62E+001.27E+022.44E+031.30E-012.35E+003.31E+014.17E+02 + 77L2 96.001.37E-021.85E+005.69E+019.79E+028.51E-021.36E+001.73E+011.98E+02 + 77L2 113.008.23E-038.74E-012.32E+013.54E+025.30E-027.43E-018.39E+008.57E+01 + 77L2 136.004.62E-033.78E-018.50E+001.13E+023.10E-023.75E-013.70E+003.31E+01 + 77L2 165.002.54E-031.59E-013.02E+003.47E+011.78E-021.85E-011.58E+001.24E+01 + 77L2 230.009.17E-043.75E-025.35E-014.79E+006.90E-035.58E-023.77E-012.33E+00 + 77L2 315.003.58E-049.99E-031.10E-017.85E-012.84E-031.84E-021.00E-014.99E-01 + 77L2 400.001.79E-043.79E-033.47E-022.09E-011.45E-038.09E-033.76E-021.60E-01 + 77L2 510.008.99E-051.46E-031.12E-025.77E-027.36E-043.56E-031.43E-025.25E-02 + 77L2 740.003.26E-053.66E-042.18E-038.98E-032.62E-041.05E-033.45E-031.03E-02 + 77L21000.001.49E-051.28E-046.36E-042.23E-031.14E-044.06E-041.15E-032.98E-03 + 77L21500.005.46E-063.43E-051.37E-043.99E-043.71E-051.18E-042.86E-046.27E-04 + 77L3 12.219.28E+004.95E+041.01E+072.41E+084.65E+008.05E+041.00E+081.36E+10 + 77L3 12.917.92E+003.74E+047.22E+061.98E+083.92E+006.10E+046.89E+078.91E+09 + 77L3 14.216.01E+002.30E+044.06E+061.31E+082.92E+003.78E+043.60E+074.28E+09 + 77L3 17.413.31E+008.26E+031.20E+064.49E+071.57E+001.37E+049.19E+069.10E+08 + 77L3 21.211.83E+003.05E+033.67E+051.41E+078.56E-015.13E+032.46E+062.04E+08 + 77L3 27.008.76E-019.05E+028.61E+043.14E+064.09E-011.54E+034.98E+053.32E+07 + 77L3 33.004.68E-013.30E+022.58E+048.66E+052.22E-015.69E+021.33E+057.43E+06 + 77L3 41.002.35E-011.11E+027.00E+032.09E+051.14E-011.93E+023.26E+041.49E+06 + 77L3 53.001.03E-013.07E+011.50E+033.80E+045.24E-025.41E+016.28E+032.29E+05 + 77L3 66.005.02E-021.03E+014.05E+028.75E+032.69E-021.83E+011.57E+034.70E+04 + 77L3 83.002.37E-023.29E+001.03E+021.88E+031.35E-025.88E+003.75E+029.22E+03 + 77L3 96.001.46E-021.60E+004.34E+017.05E+028.71E-032.87E+001.53E+023.32E+03 + 77L3 113.008.54E-037.17E-011.65E+012.36E+025.34E-031.29E+005.66E+011.07E+03 + 77L3 136.004.63E-032.89E-015.54E+006.80E+013.07E-035.20E-011.85E+013.02E+02 + 77L3 165.002.46E-031.13E-011.78E+001.87E+011.73E-032.03E-015.89E+008.21E+01 + 77L3 230.008.36E-042.29E-022.60E-012.09E+006.48E-044.06E-028.55E-019.25E+00 + 77L3 315.003.08E-045.26E-034.38E-022.73E-012.60E-049.07E-031.44E-011.25E+00 + 77L3 400.001.48E-041.77E-031.18E-026.10E-021.31E-042.95E-033.87E-022.87E-01 + 77L3 510.007.19E-056.09E-043.22E-031.40E-026.63E-059.66E-041.04E-026.70E-02 + 77L3 740.002.54E-051.30E-044.95E-041.68E-032.42E-051.85E-041.49E-037.84E-03 + 77L31000.001.15E-054.13E-051.23E-043.49E-041.12E-055.30E-053.28E-041.49E-03 + 77L31500.004.38E-061.04E-052.31E-055.21E-054.31E-061.17E-054.71E-051.75E-04 + 77M1 4.173.26E+001.69E+041.12E+065.62E+072.16E+035.84E+062.97E+093.35E+11 + 77M1 5.172.58E+006.94E+035.00E+052.21E+071.14E+032.04E+067.38E+087.63E+10 + 77M1 7.171.65E+001.73E+031.48E+054.97E+064.29E+024.13E+059.11E+077.83E+09 + 77M1 11.177.97E-012.43E+022.44E+049.21E+051.14E+024.83E+045.71E+063.59E+08 + 77M1 18.173.23E-012.47E+012.64E+031.07E+052.68E+014.77E+033.01E+051.28E+07 + 77M1 27.001.45E-013.45E+003.68E+021.41E+048.25E+007.55E+022.97E+049.03E+05 + 77M1 42.005.65E-024.00E-013.63E+011.21E+032.23E+001.02E+022.45E+035.09E+04 + 77M1 54.003.22E-021.41E-019.42E+002.82E+021.06E+003.36E+016.22E+021.04E+04 + 77M1 72.001.66E-025.63E-022.05E+005.20E+014.59E-019.73E+001.35E+021.75E+03 + 77M1 105.006.82E-032.19E-023.22E-015.83E+001.53E-012.02E+001.96E+011.84E+02 + 77M1 150.002.91E-039.44E-037.31E-028.42E-015.53E-024.90E-013.46E+002.40E+01 + 77M1 280.006.67E-042.09E-038.98E-034.77E-029.67E-034.84E-022.07E-018.82E-01 + 77M1 500.001.88E-045.48E-041.73E-035.66E-032.04E-036.94E-032.02E-025.82E-02 + 77M2 3.917.43E+002.67E+064.07E+097.42E+112.86E+022.12E+052.74E+077.98E+08 + 77M2 4.915.40E+008.60E+059.26E+081.54E+111.45E+027.54E+048.89E+064.09E+08 + 77M2 6.912.97E+001.57E+051.03E+081.42E+105.20E+011.64E+041.61E+068.88E+07 + 77M2 10.911.15E+001.63E+045.79E+065.92E+081.32E+012.25E+031.64E+058.50E+06 + 77M2 17.913.52E-011.41E+032.73E+051.95E+073.00E+002.79E+021.42E+045.83E+05 + 77M2 27.001.21E-011.90E+022.30E+041.20E+068.85E-015.19E+011.94E+036.13E+04 + 77M2 42.003.55E-022.25E+011.70E+036.19E+042.39E-018.86E+002.34E+025.41E+03 + 77M2 54.001.72E-026.79E+003.95E+021.17E+041.14E-013.30E+007.13E+011.37E+03 + 77M2 72.007.37E-031.75E+007.62E+011.79E+034.92E-021.08E+001.86E+012.86E+02 + 77M2 105.002.37E-033.06E-019.20E+001.58E+021.65E-022.58E-013.27E+003.76E+01 + 77M2 150.008.03E-046.11E-021.32E+001.70E+015.90E-036.82E-026.54E-015.72E+00 + 77M2 280.001.24E-044.11E-035.12E-024.06E-011.00E-037.17E-034.31E-022.38E-01 + 77M2 500.002.35E-054.00E-043.16E-031.67E-021.97E-049.76E-044.01E-031.51E-02 + 77M3 3.552.10E+016.11E+061.04E+102.02E+124.70E+011.03E+071.51E+112.37E+14 + 77M3 4.551.35E+011.77E+062.04E+093.47E+112.22E+013.00E+062.71E+102.83E+13 + 77M3 6.556.45E+002.83E+051.90E+082.60E+107.36E+004.86E+052.19E+091.30E+12 + 77M3 10.552.14E+002.57E+048.98E+068.86E+081.73E+004.50E+048.36E+072.47E+10 + 77M3 17.555.74E-011.99E+033.66E+052.48E+073.69E-013.55E+032.65E+064.00E+08 + 77M3 27.001.72E-012.29E+022.54E+041.23E+069.98E-024.15E+021.49E+051.34E+07 + 77M3 42.004.63E-022.51E+011.70E+035.76E+042.62E-024.61E+018.24E+034.50E+05 + 77M3 54.002.14E-027.16E+003.70E+021.02E+041.23E-021.32E+011.63E+036.85E+04 + 77M3 72.008.64E-031.72E+006.53E+011.41E+035.18E-033.19E+002.63E+028.26E+03 + 77M3 105.002.58E-032.67E-016.84E+001.08E+021.68E-034.96E-012.52E+015.54E+02 + 77M3 150.008.17E-044.67E-028.31E-019.64E+005.82E-048.64E-022.91E+004.67E+01 + 77M3 280.001.12E-042.38E-032.26E-021.56E-019.36E-054.24E-037.73E-027.54E-01 + 77M3 500.001.95E-051.74E-049.46E-044.21E-031.81E-052.82E-043.17E-032.10E-02 + 77M4 3.125.67E+011.88E+059.25E+091.06E+141.46E+013.35E+052.51E+091.67E+12 + 77M4 4.122.44E+014.56E+041.31E+099.29E+125.98E+008.32E+043.84E+082.06E+11 + 77M4 6.126.79E+006.09E+038.13E+072.99E+111.64E+001.14E+042.71E+071.05E+10 + 77M4 10.121.21E+004.75E+022.36E+063.97E+093.10E-019.08E+029.77E+052.44E+08 + 77M4 17.121.77E-013.30E+015.83E+044.62E+075.21E-026.42E+013.22E+045.01E+06 + 77M4 27.003.09E-023.24E+002.38E+031.03E+061.07E-026.46E+001.75E+031.80E+05 + 77M4 42.005.35E-033.39E-011.08E+022.70E+042.26E-036.98E-011.09E+027.44E+03 + 77M4 54.001.93E-039.37E-021.89E+013.49E+039.16E-041.97E-012.29E+011.24E+03 + 77M4 72.005.93E-042.15E-022.60E+003.43E+023.22E-044.66E-023.89E+001.62E+02 + 77M4 105.001.25E-043.14E-031.99E-011.71E+018.07E-057.07E-033.92E-011.16E+01 + 77M4 150.002.85E-055.18E-041.83E-021.06E+002.14E-051.20E-034.61E-021.00E+00 + 77M4 280.002.21E-062.39E-053.31E-049.60E-032.06E-065.57E-051.19E-031.55E-02 + 77M4 500.002.25E-071.56E-061.05E-051.57E-042.33E-073.38E-064.46E-053.82E-04 + 77M5 3.048.63E+012.13E+051.80E+101.79E+148.65E+002.58E+041.36E+106.00E+14 + 77M5 4.043.60E+014.96E+042.45E+091.48E+133.47E+006.26E+031.86E+094.74E+13 + 77M5 6.049.67E+006.33E+031.45E+084.44E+119.40E-018.42E+021.12E+081.31E+12 + 77M5 10.041.65E+004.73E+024.02E+065.53E+091.76E-016.68E+013.20E+061.45E+10 + 77M5 17.042.33E-013.16E+019.57E+046.07E+073.00E-024.82E+007.95E+041.39E+08 + 77M5 27.003.90E-022.96E+003.69E+031.25E+066.23E-034.94E-013.20E+032.54E+06 + 77M5 42.006.59E-032.98E-011.63E+023.12E+041.34E-035.64E-021.47E+025.76E+04 + 77M5 54.002.35E-038.01E-022.76E+013.88E+035.55E-041.66E-022.55E+016.87E+03 + 77M5 72.007.09E-041.77E-023.64E+003.62E+022.00E-044.13E-033.46E+006.19E+02 + 77M5 105.001.46E-042.45E-032.58E-011.65E+015.17E-056.81E-042.54E-012.77E+01 + 77M5 150.003.30E-053.81E-042.16E-029.15E-011.43E-051.28E-042.18E-021.55E+00 + 77M5 280.002.64E-061.62E-053.09E-046.37E-031.55E-067.56E-063.15E-041.15E-02 + 77M5 500.003.02E-071.06E-067.47E-067.51E-052.13E-076.48E-077.26E-061.44E-04 + 77N+ 50.002.72E-026.26E+004.08E+021.68E+044.66E-012.29E+011.25E+035.42E+04 + 77N+ 70.001.08E-021.22E+005.45E+011.53E+031.72E-015.06E+001.63E+024.58E+03 + 77N+ 100.004.14E-032.29E-016.92E+001.35E+026.19E-021.10E+002.10E+013.82E+02 + 77N+ 150.001.39E-033.59E-026.97E-019.22E+001.93E-022.05E-012.29E+002.60E+01 + 77N+ 200.006.45E-041.02E-021.45E-011.47E+008.48E-036.58E-025.22E-014.32E+00 + 77N+ 500.007.04E-053.42E-041.79E-038.25E-036.95E-042.55E-038.60E-032.99E-02 + 78K 79.395.87E-016.73E-011.58E-019.04E-031.11E+019.10E+011.39E+024.54E+01 + 78K 80.095.75E-016.88E-012.03E-012.29E-021.08E+018.82E+011.40E+025.77E+01 + 78K 81.395.53E-017.13E-012.88E-016.35E-021.03E+018.34E+011.42E+027.98E+01 + 78K 84.595.02E-017.52E-014.92E-012.39E-019.22E+007.26E+011.43E+021.29E+02 + 78K 88.394.50E-017.69E-017.06E-015.49E-018.12E+006.21E+011.38E+021.73E+02 + 78K 92.004.08E-017.67E-018.72E-018.93E-017.23E+005.39E+011.31E+022.02E+02 + 78K 98.003.48E-017.38E-011.07E+001.46E+006.03E+004.31E+011.16E+022.25E+02 + 78K 106.002.86E-016.75E-011.19E+002.07E+004.81E+003.26E+019.67E+012.25E+02 + 78K 118.002.19E-015.69E-011.20E+002.56E+003.54E+002.23E+017.17E+011.95E+02 + 78K 131.001.68E-014.65E-011.10E+002.65E+002.62E+001.54E+015.18E+011.54E+02 + 78K 148.001.23E-013.56E-019.14E-012.41E+001.85E+001.01E+013.45E+011.08E+02 + 78K 161.009.98E-022.93E-017.80E-012.14E+001.46E+007.53E+002.58E+018.24E+01 + 78K 178.007.76E-022.29E-016.30E-011.78E+001.10E+005.33E+001.80E+015.80E+01 + 78K 201.005.73E-021.69E-014.74E-011.37E+007.84E-013.52E+001.16E+013.71E+01 + 78K 230.004.11E-021.20E-013.39E-019.80E-015.40E-012.24E+007.13E+002.21E+01 + 78K 295.002.25E-026.42E-021.78E-015.00E-012.73E-019.88E-012.89E+008.31E+00 + 78K 380.001.26E-023.46E-029.22E-022.45E-011.38E-014.42E-011.17E+003.06E+00 + 78K 470.007.88E-032.11E-025.39E-021.35E-017.86E-022.30E-015.62E-011.34E+00 + 78K 580.005.07E-031.33E-023.24E-027.59E-024.54E-021.23E-012.78E-016.12E-01 + 78K 810.002.63E-036.71E-031.51E-023.18E-021.93E-024.79E-029.64E-021.87E-01 + 78K 1100.001.50E-033.72E-037.81E-031.50E-028.90E-032.10E-023.88E-026.82E-02 + 78K 1350.001.05E-032.54E-035.12E-039.35E-035.34E-031.23E-022.18E-023.62E-02 + 78K 1600.007.87E-041.86E-033.64E-036.38E-033.51E-038.03E-031.37E-022.20E-02 + 78L1 14.881.80E+003.89E+021.09E+043.37E+042.34E+025.11E+042.15E+062.01E+07 + 78L1 15.581.68E+003.11E+021.03E+045.91E+042.04E+024.12E+041.67E+061.83E+07 + 78L1 16.881.47E+002.09E+028.68E+038.70E+041.61E+022.82E+041.08E+061.42E+07 + 78L1 20.081.09E+008.64E+014.85E+038.46E+049.60E+011.26E+044.24E+056.78E+06 + 78L1 23.887.93E-013.47E+012.34E+035.23E+045.73E+015.63E+031.67E+052.85E+06 + 78L1 27.006.28E-011.79E+011.32E+033.25E+043.98E+013.20E+038.60E+041.48E+06 + 78L1 33.004.21E-015.97E+004.90E+021.30E+042.20E+011.29E+032.94E+044.87E+05 + 78L1 41.002.68E-011.86E+001.57E+024.26E+031.16E+014.89E+029.32E+031.41E+05 + 78L1 53.001.54E-015.64E-013.91E+011.03E+035.43E+001.59E+022.44E+033.23E+04 + 78L1 66.009.39E-022.67E-011.19E+012.91E+022.85E+006.20E+017.93E+029.12E+03 + 78L1 83.005.53E-021.51E-013.61E+007.70E+011.46E+002.38E+012.51E+022.46E+03 + 78L1 96.003.93E-021.10E-011.78E+003.34E+019.60E-011.31E+011.22E+021.08E+03 + 78L1 113.002.67E-027.75E-028.59E-011.34E+016.00E-016.77E+005.53E+014.35E+02 + 78L1 136.001.72E-025.16E-024.08E-015.00E+003.53E-013.26E+002.29E+011.57E+02 + 78L1 165.001.08E-023.32E-022.03E-011.90E+002.04E-011.55E+009.33E+005.55E+01 + 78L1 230.004.92E-031.52E-026.98E-024.28E-018.03E-024.51E-012.12E+009.88E+00 + 78L1 315.002.39E-037.23E-032.76E-021.23E-013.38E-021.49E-015.61E-012.10E+00 + 78L1 400.001.41E-034.17E-031.42E-025.23E-021.78E-026.69E-022.16E-016.91E-01 + 78L1 510.008.46E-042.43E-037.42E-032.32E-029.33E-033.07E-028.57E-022.37E-01 + 78L1 740.004.06E-041.12E-032.94E-037.45E-033.54E-039.92E-032.30E-025.21E-02 + 78L11000.002.33E-046.19E-041.46E-033.24E-031.64E-034.22E-038.68E-031.72E-02 + 78L11500.001.16E-042.89E-046.09E-041.16E-035.95E-041.42E-032.60E-034.47E-03 + 78L2 14.273.92E+001.94E+043.12E+065.93E+072.70E+012.09E+032.83E+047.85E+04 + 78L2 14.973.45E+001.54E+042.38E+065.24E+072.34E+011.74E+032.74E+041.39E+05 + 78L2 16.272.75E+001.02E+041.47E+063.88E+071.82E+011.27E+032.38E+042.07E+05 + 78L2 19.471.69E+004.19E+035.28E+051.68E+071.06E+016.42E+021.46E+042.11E+05 + 78L2 23.271.02E+001.75E+031.90E+056.43E+066.23E+003.25E+027.89E+031.39E+05 + 78L2 27.006.68E-018.44E+028.08E+042.74E+063.99E+001.84E+024.47E+038.41E+04 + 78L2 33.003.72E-013.18E+022.56E+048.25E+052.19E+008.54E+011.98E+033.77E+04 + 78L2 41.001.95E-011.12E+027.38E+032.17E+051.15E+003.72E+017.92E+021.43E+04 + 78L2 53.009.01E-023.26E+011.72E+034.38E+045.39E-011.40E+012.60E+024.20E+03 + 78L2 66.004.60E-021.15E+014.98E+021.11E+042.82E-016.10E+009.88E+011.42E+03 + 78L2 83.002.27E-023.95E+001.38E+022.62E+031.44E-012.57E+003.57E+014.45E+02 + 78L2 96.001.45E-022.02E+006.18E+011.05E+039.46E-021.49E+001.87E+012.12E+02 + 78L2 113.008.73E-039.55E-012.53E+013.82E+025.90E-028.15E-019.10E+009.20E+01 + 78L2 136.004.92E-034.13E-019.26E+001.22E+023.46E-024.11E-014.02E+003.57E+01 + 78L2 165.002.71E-031.74E-013.30E+003.76E+011.98E-022.03E-011.72E+001.34E+01 + 78L2 230.009.82E-044.11E-025.85E-015.21E+007.71E-036.15E-024.12E-012.53E+00 + 78L2 315.003.85E-041.10E-021.21E-018.57E-013.17E-032.04E-021.10E-015.44E-01 + 78L2 400.001.93E-044.17E-033.82E-022.29E-011.62E-038.95E-034.14E-021.76E-01 + 78L2 510.009.74E-051.61E-031.23E-026.33E-028.24E-043.95E-031.58E-025.76E-02 + 78L2 740.003.52E-054.05E-042.41E-039.90E-032.94E-041.17E-033.81E-031.13E-02 + 78L21000.001.62E-051.42E-047.04E-042.46E-031.28E-044.53E-041.28E-033.29E-03 + 78L21500.005.98E-063.80E-051.52E-044.43E-044.17E-051.32E-043.18E-046.96E-04 + 78L3 12.568.78E+004.62E+049.06E+062.09E+084.53E+007.77E+049.35E+071.23E+10 + 78L3 13.267.52E+003.52E+046.55E+061.73E+083.84E+005.93E+046.48E+078.13E+09 + 78L3 14.565.74E+002.19E+043.74E+061.16E+082.88E+003.72E+043.44E+073.97E+09 + 78L3 17.763.21E+008.05E+031.14E+064.09E+071.57E+001.38E+049.06E+068.76E+08 + 78L3 21.561.80E+003.03E+033.55E+051.32E+078.66E-015.26E+032.48E+062.02E+08 + 78L3 27.009.05E-019.74E+029.18E+043.28E+064.35E-011.72E+035.59E+053.71E+07 + 78L3 33.004.84E-013.55E+022.75E+049.06E+052.36E-016.32E+021.50E+058.29E+06 + 78L3 41.002.44E-011.19E+027.47E+032.20E+051.21E-012.15E+023.65E+041.66E+06 + 78L3 53.001.07E-013.30E+011.60E+034.01E+045.57E-026.01E+017.03E+032.55E+05 + 78L3 66.005.23E-021.10E+014.32E+029.25E+032.86E-022.03E+011.75E+035.23E+04 + 78L3 83.002.47E-023.54E+001.10E+021.99E+031.43E-026.53E+004.19E+021.03E+04 + 78L3 96.001.53E-021.72E+004.64E+017.47E+029.26E-033.19E+001.71E+023.69E+03 + 78L3 113.008.94E-037.72E-011.77E+012.50E+025.68E-031.43E+006.31E+011.19E+03 + 78L3 136.004.86E-033.11E-015.92E+007.22E+013.26E-035.77E-012.06E+013.35E+02 + 78L3 165.002.58E-031.22E-011.91E+001.99E+011.84E-032.25E-016.55E+009.09E+01 + 78L3 230.008.79E-042.47E-022.79E-012.22E+006.89E-044.50E-029.49E-011.02E+01 + 78L3 315.003.25E-045.66E-034.70E-022.91E-012.76E-041.00E-021.60E-011.38E+00 + 78L3 400.001.56E-041.91E-031.26E-026.52E-021.39E-043.26E-034.28E-023.17E-01 + 78L3 510.007.59E-056.55E-043.45E-031.50E-027.04E-051.06E-031.15E-027.40E-02 + 78L3 740.002.68E-051.39E-045.31E-041.80E-032.56E-052.03E-041.65E-038.64E-03 + 78L31000.001.22E-054.41E-051.32E-043.74E-041.18E-055.78E-053.61E-041.64E-03 + 78L31500.004.61E-061.10E-052.47E-055.58E-054.55E-061.26E-055.16E-051.93E-04 + 78M1 4.303.08E+001.64E+041.09E+064.89E+072.19E+035.67E+062.79E+093.04E+11 + 78M1 5.302.46E+006.88E+034.92E+052.06E+071.18E+032.04E+067.18E+087.21E+10 + 78M1 7.301.59E+001.76E+031.48E+054.90E+064.50E+024.25E+059.23E+077.74E+09 + 78M1 11.307.79E-012.57E+022.48E+049.18E+051.22E+025.12E+045.99E+063.70E+08 + 78M1 18.303.20E-012.71E+012.76E+031.09E+052.89E+015.16E+033.23E+051.36E+07 + 78M1 27.001.47E-013.99E+004.04E+021.51E+049.10E+008.40E+023.30E+049.99E+05 + 78M1 42.005.73E-024.65E-014.06E+011.32E+032.46E+001.13E+022.72E+035.62E+04 + 78M1 54.003.28E-021.60E-011.06E+013.11E+021.17E+003.72E+016.88E+021.14E+04 + 78M1 72.001.70E-026.07E-022.34E+005.79E+015.06E-011.08E+011.49E+021.93E+03 + 78M1 105.007.00E-032.27E-023.65E-016.56E+001.69E-012.24E+002.16E+012.02E+02 + 78M1 150.002.99E-039.71E-038.08E-029.45E-016.09E-025.40E-013.80E+002.63E+01 + 78M1 280.006.93E-042.17E-039.64E-035.24E-021.06E-025.31E-022.26E-019.63E-01 + 78M1 500.001.97E-045.77E-041.84E-036.11E-032.24E-037.60E-032.21E-026.34E-02 + 78M2 4.036.99E+002.51E+063.70E+096.51E+112.91E+022.06E+052.57E+077.06E+08 + 78M2 5.035.14E+008.35E+058.75E+081.41E+111.50E+027.52E+048.59E+063.76E+08 + 78M2 7.032.88E+001.58E+051.02E+081.36E+105.49E+011.69E+041.61E+068.55E+07 + 78M2 11.031.14E+001.69E+045.93E+065.95E+081.42E+012.38E+031.69E+058.54E+06 + 78M2 18.033.56E-011.50E+032.87E+052.02E+073.28E+002.99E+021.50E+046.02E+05 + 78M2 27.001.25E-012.08E+022.52E+041.29E+069.85E-015.71E+012.11E+036.59E+04 + 78M2 42.003.71E-022.46E+011.85E+036.71E+042.67E-019.75E+002.55E+025.84E+03 + 78M2 54.001.81E-027.43E+004.31E+021.27E+041.27E-013.63E+007.77E+011.48E+03 + 78M2 72.007.77E-031.92E+008.33E+011.94E+035.50E-021.19E+002.03E+013.10E+02 + 78M2 105.002.51E-033.36E-011.01E+011.73E+021.84E-022.84E-013.58E+004.09E+01 + 78M2 150.008.58E-046.72E-021.44E+001.85E+016.60E-037.54E-027.17E-016.23E+00 + 78M2 280.001.33E-044.54E-035.64E-024.46E-011.12E-037.96E-034.76E-022.61E-01 + 78M2 500.002.55E-054.43E-043.50E-031.84E-022.22E-041.09E-034.45E-031.67E-02 + 78M3 3.642.00E+015.80E+069.55E+091.79E+124.63E+011.01E+071.43E+112.19E+14 + 78M3 4.641.30E+011.72E+061.94E+093.21E+112.23E+013.03E+062.68E+102.75E+13 + 78M3 6.646.31E+002.85E+051.88E+082.51E+107.53E+005.06E+052.26E+091.32E+12 + 78M3 10.642.13E+002.66E+049.18E+068.89E+081.80E+004.81E+048.94E+072.63E+10 + 78M3 17.645.80E-012.10E+033.82E+052.55E+073.87E-013.87E+032.90E+064.37E+08 + 78M3 27.001.77E-012.48E+022.74E+041.31E+061.06E-014.64E+021.69E+051.52E+07 + 78M3 42.004.81E-022.72E+011.83E+036.15E+042.80E-025.15E+019.30E+035.09E+05 + 78M3 54.002.22E-027.76E+003.99E+021.09E+041.31E-021.48E+011.84E+037.72E+04 + 78M3 72.009.03E-031.86E+007.03E+011.51E+035.53E-033.56E+002.96E+029.29E+03 + 78M3 105.002.71E-032.89E-017.37E+001.15E+021.79E-035.54E-012.83E+016.21E+02 + 78M3 150.008.60E-045.05E-028.95E-011.03E+016.21E-049.64E-023.27E+005.22E+01 + 78M3 280.001.19E-042.57E-032.43E-021.67E-011.00E-044.72E-038.63E-028.41E-01 + 78M3 500.002.08E-051.88E-041.02E-034.53E-031.93E-053.12E-043.53E-032.34E-02 + 78M4 3.205.41E+011.77E+058.45E+099.43E+131.44E+013.29E+052.38E+091.53E+12 + 78M4 4.202.37E+014.46E+041.26E+098.77E+126.02E+008.45E+043.80E+081.99E+11 + 78M4 6.206.78E+006.16E+038.16E+072.99E+111.69E+001.20E+042.81E+071.06E+10 + 78M4 10.201.23E+004.95E+022.46E+064.16E+093.25E-019.81E+021.05E+062.58E+08 + 78M4 17.201.84E-013.50E+016.24E+044.98E+075.55E-027.06E+013.53E+045.43E+06 + 78M4 27.003.30E-023.54E+002.63E+031.15E+061.17E-027.29E+001.98E+032.02E+05 + 78M4 42.005.74E-033.71E-011.20E+023.03E+042.46E-037.88E-011.23E+028.37E+03 + 78M4 54.002.08E-031.03E-012.10E+013.91E+031.00E-032.23E-012.58E+011.39E+03 + 78M4 72.006.41E-042.36E-022.89E+003.85E+023.53E-045.26E-024.39E+001.82E+02 + 78M4 105.001.35E-043.46E-032.21E-011.92E+018.85E-057.99E-034.42E-011.31E+01 + 78M4 150.003.09E-055.73E-042.04E-021.19E+002.36E-051.36E-035.21E-021.13E+00 + 78M4 280.002.42E-062.65E-053.69E-041.08E-022.28E-066.30E-051.35E-031.75E-02 + 78M4 500.002.45E-071.73E-061.17E-051.76E-042.58E-073.83E-065.06E-054.33E-04 + 78M5 3.128.23E+011.99E+051.66E+101.60E+148.50E+002.47E+041.29E+105.53E+14 + 78M5 4.123.50E+014.78E+042.36E+091.40E+133.49E+006.20E+031.86E+094.63E+13 + 78M5 6.129.65E+006.32E+031.46E+084.45E+119.65E-018.63E+021.17E+081.36E+12 + 78M5 10.121.69E+004.86E+024.22E+065.79E+091.85E-017.03E+013.47E+061.58E+10 + 78M5 17.122.43E-013.31E+011.03E+056.53E+073.18E-025.15E+008.81E+041.55E+08 + 78M5 27.004.16E-023.17E+004.11E+031.40E+066.73E-035.41E-013.66E+032.95E+06 + 78M5 42.007.05E-033.21E-011.81E+023.49E+041.45E-036.18E-021.68E+026.67E+04 + 78M5 54.002.52E-038.64E-023.07E+014.33E+036.01E-041.81E-022.93E+017.95E+03 + 78M5 72.007.65E-041.91E-024.05E+004.04E+022.17E-044.52E-033.96E+007.15E+02 + 78M5 105.001.59E-042.65E-032.88E-011.84E+015.62E-057.45E-042.90E-013.19E+01 + 78M5 150.003.60E-054.14E-042.41E-021.02E+001.56E-051.40E-042.49E-021.78E+00 + 78M5 280.002.86E-061.77E-053.44E-047.11E-031.69E-068.27E-063.58E-041.32E-02 + 78M5 500.003.23E-071.16E-068.28E-068.39E-052.33E-077.09E-078.20E-061.65E-04 + 78N+ 50.002.84E-026.89E+004.48E+021.85E+045.21E-012.58E+011.42E+036.19E+04 + 78N+ 70.001.13E-021.34E+005.99E+011.69E+031.93E-015.68E+001.84E+025.21E+03 + 78N+ 100.004.33E-032.52E-017.61E+001.48E+026.92E-021.23E+002.36E+014.31E+02 + 78N+ 150.001.46E-033.94E-027.68E-011.01E+012.15E-022.30E-012.57E+002.93E+01 + 78N+ 200.006.80E-041.12E-021.59E-011.62E+009.47E-037.35E-025.84E-014.83E+00 + 78N+ 500.007.47E-053.72E-041.98E-039.13E-037.75E-042.84E-039.57E-033.33E-02 + 79K 81.725.54E-016.10E-011.40E-017.68E-031.11E+018.74E+011.29E+024.08E+01 + 79K 82.425.43E-016.23E-011.78E-011.93E-021.08E+018.48E+011.30E+025.15E+01 + 79K 83.725.23E-016.45E-012.52E-015.31E-021.03E+018.03E+011.32E+027.09E+01 + 79K 86.924.76E-016.81E-014.27E-011.99E-019.28E+007.03E+011.33E+021.14E+02 + 79K 90.724.28E-016.99E-016.15E-014.59E-018.19E+006.04E+011.29E+021.54E+02 + 79K 95.003.82E-016.97E-017.85E-018.06E-017.17E+005.13E+011.21E+021.84E+02 + 79K 101.003.28E-016.71E-019.52E-011.29E+006.01E+004.13E+011.08E+022.04E+02 + 79K 109.002.72E-016.17E-011.06E+001.82E+004.83E+003.16E+019.05E+012.04E+02 + 79K 121.002.09E-015.24E-011.08E+002.25E+003.58E+002.18E+016.78E+011.78E+02 + 79K 134.001.62E-014.32E-019.96E-012.35E+002.68E+001.53E+014.95E+011.43E+02 + 79K 151.001.20E-013.34E-018.40E-012.18E+001.91E+001.01E+013.34E+011.02E+02 + 79K 164.009.74E-022.77E-017.23E-011.95E+001.51E+007.57E+002.51E+017.81E+01 + 79K 181.007.62E-022.19E-015.90E-011.65E+001.14E+005.40E+001.78E+015.56E+01 + 79K 204.005.66E-021.63E-014.50E-011.28E+008.19E-013.59E+001.16E+013.60E+01 + 79K 230.004.22E-021.21E-013.37E-019.64E-015.87E-012.40E+007.51E+002.29E+01 + 79K 295.002.32E-026.52E-021.80E-015.02E-012.97E-011.06E+003.06E+008.67E+00 + 79K 380.001.30E-023.54E-029.42E-022.49E-011.50E-014.75E-011.24E+003.21E+00 + 79K 470.008.15E-032.18E-025.55E-021.39E-018.52E-022.48E-015.97E-011.42E+00 + 79K 580.005.26E-031.38E-023.36E-027.86E-024.92E-021.33E-012.96E-016.47E-01 + 79K 810.002.74E-037.00E-031.57E-023.32E-022.08E-025.15E-021.03E-011.98E-01 + 79K 1100.001.56E-033.90E-038.20E-031.58E-029.60E-032.26E-024.15E-027.26E-02 + 79K 1350.001.09E-032.66E-035.39E-039.84E-035.75E-031.33E-022.33E-023.86E-02 + 79K 1600.008.21E-041.95E-033.83E-036.73E-033.77E-038.62E-031.47E-022.34E-02 + 79L1 15.351.69E+003.65E+029.76E+032.86E+042.35E+024.89E+041.97E+061.78E+07 + 79L1 16.051.58E+002.95E+029.32E+035.03E+042.06E+023.97E+041.55E+061.62E+07 + 79L1 17.351.39E+002.01E+027.90E+037.47E+041.63E+022.75E+041.02E+061.27E+07 + 79L1 20.551.04E+008.56E+014.54E+037.50E+049.85E+011.25E+044.08E+056.27E+06 + 79L1 24.357.63E-013.54E+012.25E+034.78E+045.95E+015.69E+031.64E+052.70E+06 + 79L1 28.005.85E-011.68E+011.18E+032.81E+043.93E+013.00E+037.73E+041.29E+06 + 79L1 34.003.98E-015.89E+004.54E+021.16E+042.21E+011.25E+032.74E+044.39E+05 + 79L1 42.002.57E-011.92E+001.52E+023.95E+031.18E+014.85E+028.97E+031.32E+05 + 79L1 54.001.49E-015.96E-013.95E+019.95E+025.65E+001.61E+022.42E+033.12E+04 + 79L1 67.009.21E-022.77E-011.24E+012.91E+023.00E+006.41E+018.02E+029.03E+03 + 79L1 84.005.48E-021.53E-013.85E+007.93E+011.55E+002.48E+012.58E+022.49E+03 + 79L1 97.003.91E-021.10E-011.91E+003.50E+011.02E+001.38E+011.27E+021.10E+03 + 79L1 114.002.67E-027.76E-029.24E-011.43E+016.43E-017.17E+005.78E+014.48E+02 + 79L1 137.001.73E-025.17E-024.37E-015.36E+003.80E-013.47E+002.41E+011.63E+02 + 79L1 165.001.11E-023.39E-022.21E-012.11E+002.24E-011.69E+001.02E+016.01E+01 + 79L1 230.005.09E-031.56E-027.46E-024.68E-018.82E-024.94E-012.30E+001.07E+01 + 79L1 315.002.48E-037.50E-032.93E-021.33E-013.71E-021.63E-016.10E-012.28E+00 + 79L1 400.001.47E-034.35E-031.50E-025.63E-021.95E-027.30E-022.34E-017.48E-01 + 79L1 510.008.81E-042.55E-037.88E-032.49E-021.02E-023.34E-029.31E-022.56E-01 + 79L1 740.004.25E-041.18E-033.12E-037.97E-033.87E-031.08E-022.50E-025.64E-02 + 79L11000.002.44E-046.55E-041.56E-033.46E-031.79E-034.58E-039.41E-031.86E-02 + 79L11500.001.21E-043.06E-046.49E-041.24E-036.46E-041.55E-032.82E-034.83E-03 + 79L2 14.733.69E+001.81E+042.78E+065.08E+072.72E+011.99E+032.59E+046.78E+04 + 79L2 15.433.27E+001.44E+042.13E+064.51E+072.37E+011.68E+032.52E+041.20E+05 + 79L2 16.732.63E+009.62E+031.34E+063.39E+071.85E+011.23E+032.21E+041.81E+05 + 79L2 19.931.63E+004.06E+034.95E+051.51E+071.10E+016.35E+021.38E+041.90E+05 + 79L2 23.731.00E+001.73E+031.82E+055.95E+066.51E+003.27E+027.62E+031.29E+05 + 79L2 28.006.24E-017.70E+027.05E+042.31E+063.97E+001.74E+024.07E+037.40E+04 + 79L2 34.003.55E-013.00E+022.32E+047.24E+052.23E+008.28E+011.85E+033.40E+04 + 79L2 42.001.90E-011.08E+026.95E+031.99E+051.19E+003.70E+017.61E+021.33E+04 + 79L2 54.008.92E-023.25E+011.67E+034.16E+045.66E-011.42E+012.56E+024.04E+03 + 79L2 67.004.62E-021.17E+014.95E+021.08E+043.00E-016.29E+009.94E+011.39E+03 + 79L2 84.002.31E-024.08E+001.40E+022.61E+031.55E-012.69E+003.66E+014.46E+02 + 79L2 97.001.48E-022.10E+006.34E+011.06E+031.02E-011.57E+001.93E+012.15E+02 + 79L2 114.009.01E-031.00E+002.62E+013.91E+026.40E-028.64E-019.48E+009.44E+01 + 79L2 137.005.11E-034.37E-019.70E+001.26E+023.77E-024.39E-014.23E+003.71E+01 + 79L2 165.002.88E-031.91E-013.60E+004.08E+012.21E-022.23E-011.88E+001.44E+01 + 79L2 230.001.05E-034.51E-026.40E-015.67E+008.61E-036.78E-024.50E-012.74E+00 + 79L2 315.004.14E-041.21E-021.33E-019.35E-013.55E-032.25E-021.20E-015.93E-01 + 79L2 400.002.08E-044.58E-034.19E-022.51E-011.82E-039.91E-034.55E-021.92E-01 + 79L2 510.001.05E-041.78E-031.36E-026.95E-029.24E-044.39E-031.74E-026.32E-02 + 79L2 740.003.85E-054.47E-042.66E-031.09E-023.30E-041.30E-034.22E-031.25E-02 + 79L21000.001.76E-051.57E-047.80E-042.72E-031.44E-045.05E-041.42E-033.64E-03 + 79L21500.006.53E-064.21E-051.69E-044.91E-044.69E-051.47E-043.55E-047.73E-04 + 79L3 12.928.31E+004.32E+048.15E+061.82E+084.42E+007.51E+048.72E+071.11E+10 + 79L3 13.627.15E+003.31E+045.95E+061.52E+083.76E+005.78E+046.11E+077.43E+09 + 79L3 14.925.50E+002.09E+043.44E+061.03E+082.84E+003.66E+043.30E+073.70E+09 + 79L3 18.123.11E+007.83E+031.07E+063.74E+071.57E+001.39E+048.92E+068.42E+08 + 79L3 21.921.76E+003.00E+033.42E+051.23E+078.75E-015.38E+032.50E+061.99E+08 + 79L3 28.008.35E-018.73E+027.87E+042.71E+064.13E-011.59E+034.94E+053.15E+07 + 79L3 34.004.56E-013.29E+022.45E+047.81E+052.28E-016.05E+021.38E+057.41E+06 + 79L3 42.002.34E-011.14E+026.90E+031.97E+051.20E-012.12E+023.50E+041.55E+06 + 79L3 54.001.04E-013.24E+011.53E+033.73E+045.59E-026.08E+016.98E+032.48E+05 + 79L3 67.005.19E-021.10E+014.22E+028.83E+032.91E-022.09E+011.78E+035.23E+04 + 79L3 84.002.48E-023.59E+001.10E+021.94E+031.47E-026.83E+004.33E+021.05E+04 + 79L3 97.001.54E-021.76E+004.66E+017.38E+029.53E-033.36E+001.78E+023.81E+03 + 79L3 114.009.08E-037.95E-011.79E+012.50E+025.87E-031.52E+006.65E+011.24E+03 + 79L3 137.004.96E-033.23E-016.07E+007.29E+013.39E-036.17E-012.20E+013.53E+02 + 79L3 165.002.70E-031.31E-012.04E+002.11E+011.95E-032.49E-017.27E+001.01E+02 + 79L3 230.009.23E-042.66E-022.99E-012.36E+007.33E-044.98E-021.05E+001.13E+01 + 79L3 315.003.42E-046.08E-035.04E-023.11E-012.93E-041.11E-021.77E-011.53E+00 + 79L3 400.001.65E-042.05E-031.35E-026.96E-021.48E-043.59E-034.74E-023.50E-01 + 79L3 510.008.02E-057.03E-043.70E-031.60E-027.47E-051.17E-031.28E-028.16E-02 + 79L3 740.002.82E-051.49E-045.69E-041.93E-032.72E-052.22E-041.81E-039.52E-03 + 79L31000.001.28E-054.72E-051.41E-044.01E-041.25E-056.29E-053.97E-041.80E-03 + 79L31500.004.86E-061.17E-052.64E-055.98E-054.80E-061.37E-055.65E-052.12E-04 + 79M1 4.422.91E+001.59E+041.05E+064.25E+072.22E+035.50E+062.61E+092.74E+11 + 79M1 5.422.33E+006.80E+034.83E+051.91E+071.21E+032.02E+066.94E+086.76E+10 + 79M1 7.421.53E+001.79E+031.47E+054.81E+064.72E+024.36E+059.30E+077.62E+09 + 79M1 11.427.61E-012.70E+022.53E+049.14E+051.30E+025.42E+046.27E+063.80E+08 + 79M1 18.423.17E-012.95E+012.89E+031.12E+053.13E+015.56E+033.46E+051.44E+07 + 79M1 27.001.48E-014.60E+004.43E+021.62E+041.00E+019.35E+023.67E+041.11E+06 + 79M1 42.005.81E-025.40E-014.53E+011.44E+032.72E+001.25E+023.02E+036.20E+04 + 79M1 54.003.33E-021.82E-011.20E+013.42E+021.30E+004.12E+017.61E+021.26E+04 + 79M1 72.001.73E-026.60E-022.66E+006.43E+015.58E-011.19E+011.65E+022.12E+03 + 79M1 105.007.17E-032.37E-024.13E-017.35E+001.87E-012.47E+002.38E+012.22E+02 + 79M1 150.003.08E-031.00E-028.96E-021.06E+006.72E-025.95E-014.17E+002.88E+01 + 79M1 280.007.18E-042.26E-031.04E-025.76E-021.17E-025.83E-022.48E-011.05E+00 + 79M1 500.002.05E-046.07E-041.97E-036.62E-032.46E-038.33E-032.41E-026.91E-02 + 79M2 4.156.59E+002.37E+063.36E+095.71E+112.96E+022.00E+052.40E+076.27E+08 + 79M2 5.154.89E+008.09E+058.24E+081.29E+111.55E+027.49E+048.27E+063.46E+08 + 79M2 7.152.79E+001.58E+059.99E+071.31E+105.80E+011.73E+041.60E+068.22E+07 + 79M2 11.151.13E+001.75E+046.06E+065.96E+081.53E+012.50E+031.75E+058.56E+06 + 79M2 18.153.60E-011.58E+033.01E+052.08E+073.57E+003.20E+021.58E+046.22E+05 + 79M2 27.001.30E-012.27E+022.75E+041.40E+061.10E+006.28E+012.29E+037.08E+04 + 79M2 42.003.87E-022.69E+012.02E+037.27E+042.97E-011.07E+012.77E+026.29E+03 + 79M2 54.001.89E-028.14E+004.71E+021.38E+041.42E-014.00E+008.47E+011.60E+03 + 79M2 72.008.18E-032.10E+009.10E+012.11E+036.14E-021.31E+002.21E+013.36E+02 + 79M2 105.002.66E-033.68E-011.10E+011.88E+022.06E-023.14E-013.91E+004.44E+01 + 79M2 150.009.14E-047.39E-021.58E+002.02E+017.39E-038.33E-027.86E-016.79E+00 + 79M2 280.001.43E-045.01E-036.21E-024.89E-011.26E-038.83E-035.24E-022.87E-01 + 79M2 500.002.77E-054.90E-043.87E-032.03E-022.49E-041.21E-034.93E-031.84E-02 + 79M3 3.741.91E+015.50E+068.75E+091.59E+124.57E+019.94E+061.36E+112.02E+14 + 79M3 4.741.26E+011.68E+061.84E+092.96E+112.23E+013.05E+062.64E+102.65E+13 + 79M3 6.746.18E+002.86E+051.86E+082.42E+107.68E+005.26E+052.33E+091.35E+12 + 79M3 10.742.12E+002.75E+049.37E+068.90E+081.87E+005.14E+049.54E+072.80E+10 + 79M3 17.745.87E-012.21E+033.98E+052.61E+074.06E-014.20E+033.17E+064.76E+08 + 79M3 27.001.83E-012.68E+022.95E+041.40E+061.14E-015.19E+021.91E+051.72E+07 + 79M3 42.004.99E-022.94E+011.97E+036.55E+042.99E-025.76E+011.05E+045.75E+05 + 79M3 54.002.31E-028.39E+004.29E+021.16E+041.40E-021.65E+012.07E+038.70E+04 + 79M3 72.009.43E-032.01E+007.57E+011.61E+035.90E-033.98E+003.33E+021.04E+04 + 79M3 105.002.84E-033.13E-017.93E+001.23E+021.91E-036.18E-013.18E+016.96E+02 + 79M3 150.009.06E-045.47E-029.63E-011.10E+016.64E-041.07E-013.66E+005.84E+01 + 79M3 280.001.25E-042.78E-032.62E-021.80E-011.07E-045.25E-039.63E-029.37E-01 + 79M3 500.002.20E-052.03E-041.10E-034.87E-032.06E-053.46E-043.92E-032.60E-02 + 79M4 3.295.16E+011.68E+057.72E+098.39E+131.42E+013.23E+052.25E+091.41E+12 + 79M4 4.292.31E+014.35E+041.20E+098.24E+126.05E+008.56E+043.76E+081.91E+11 + 79M4 6.296.76E+006.23E+038.16E+072.97E+111.74E+001.26E+042.90E+071.08E+10 + 79M4 10.291.26E+005.14E+022.56E+064.34E+093.41E-011.06E+031.12E+062.72E+08 + 79M4 17.291.92E-013.71E+016.66E+045.35E+075.91E-027.76E+013.86E+045.88E+06 + 79M4 27.003.52E-023.86E+002.92E+031.29E+061.27E-028.22E+002.24E+032.27E+05 + 79M4 42.006.17E-034.06E-011.33E+023.39E+042.68E-038.89E-011.39E+029.40E+03 + 79M4 54.002.24E-031.13E-012.33E+014.38E+031.09E-032.51E-012.91E+011.57E+03 + 79M4 72.006.91E-042.60E-023.20E+004.31E+023.85E-045.94E-024.95E+002.05E+02 + 79M4 105.001.46E-043.81E-032.45E-012.15E+019.69E-059.02E-034.99E-011.47E+01 + 79M4 150.003.35E-056.33E-042.26E-021.33E+002.59E-051.53E-035.89E-021.27E+00 + 79M4 280.002.62E-062.94E-054.10E-041.21E-022.51E-067.13E-051.52E-031.98E-02 + 79M4 500.002.66E-071.93E-061.30E-051.98E-042.84E-074.33E-065.73E-054.90E-04 + 79M5 3.217.86E+011.86E+051.53E+101.43E+148.37E+002.38E+041.23E+105.11E+14 + 79M5 4.213.41E+014.61E+042.28E+091.32E+133.50E+006.14E+031.85E+094.51E+13 + 79M5 6.219.63E+006.30E+031.48E+084.44E+119.89E-018.83E+021.22E+081.41E+12 + 79M5 10.211.72E+004.97E+024.43E+066.05E+091.93E-017.39E+013.75E+061.71E+10 + 79M5 17.212.52E-013.45E+011.11E+057.01E+073.36E-025.50E+009.74E+041.73E+08 + 79M5 27.004.42E-023.40E+004.58E+031.56E+067.25E-035.92E-014.19E+033.42E+06 + 79M5 42.007.54E-033.45E-012.02E+023.89E+041.57E-036.75E-021.93E+027.73E+04 + 79M5 54.002.70E-039.31E-023.42E+014.84E+036.50E-041.98E-023.35E+019.19E+03 + 79M5 72.008.22E-042.07E-024.52E+004.51E+022.35E-044.93E-034.53E+008.25E+02 + 79M5 105.001.71E-042.87E-033.21E-012.05E+016.10E-058.14E-043.32E-013.68E+01 + 79M5 150.003.91E-054.50E-042.69E-021.14E+001.70E-051.53E-042.84E-022.05E+00 + 79M5 280.003.16E-061.92E-053.83E-047.94E-031.84E-069.04E-064.07E-041.51E-02 + 79M5 500.003.39E-071.27E-069.16E-069.35E-052.53E-077.75E-079.24E-061.88E-04 + 79N+ 50.002.97E-027.65E+004.97E+022.06E+045.79E-012.89E+011.63E+037.14E+04 + 79N+ 70.001.18E-021.49E+006.66E+011.87E+032.14E-016.36E+002.09E+025.97E+03 + 79N+ 100.004.54E-032.80E-018.45E+001.64E+027.68E-021.37E+002.67E+014.91E+02 + 79N+ 150.001.53E-034.36E-028.54E-011.12E+012.39E-022.56E-012.89E+003.31E+01 + 79N+ 200.007.15E-041.24E-021.78E-011.80E+001.05E-028.16E-026.53E-015.44E+00 + 79N+ 500.007.93E-054.06E-042.19E-031.02E-028.58E-043.14E-031.06E-023.69E-02 + 80K 84.105.23E-015.53E-011.24E-016.59E-031.11E+018.41E+011.19E+023.68E+01 + 80K 84.805.13E-015.65E-011.57E-011.64E-021.08E+018.16E+011.21E+024.61E+01 + 80K 86.104.94E-015.85E-012.20E-014.47E-021.04E+017.74E+011.23E+026.32E+01 + 80K 89.304.52E-016.18E-013.73E-011.67E-019.34E+006.80E+011.23E+021.01E+02 + 80K 93.104.08E-016.35E-015.37E-013.85E-018.27E+005.87E+011.20E+021.37E+02 + 80K 97.003.68E-016.36E-016.76E-016.53E-017.35E+005.08E+011.14E+021.63E+02 + 80K 103.003.18E-016.17E-018.32E-011.08E+006.18E+004.11E+011.03E+021.83E+02 + 80K 111.002.64E-015.71E-019.44E-011.55E+004.99E+003.16E+018.69E+011.86E+02 + 80K 123.002.04E-014.90E-019.75E-011.97E+003.72E+002.20E+016.58E+011.66E+02 + 80K 136.001.59E-014.08E-019.12E-012.10E+002.79E+001.55E+014.86E+011.34E+02 + 80K 153.001.18E-013.19E-017.82E-011.98E+002.00E+001.03E+013.31E+019.75E+01 + 80K 166.009.66E-022.66E-016.79E-011.80E+001.59E+007.78E+002.51E+017.55E+01 + 80K 183.007.58E-022.12E-015.61E-011.54E+001.21E+005.57E+001.79E+015.43E+01 + 80K 206.005.66E-021.59E-014.33E-011.22E+008.66E-013.73E+001.17E+013.56E+01 + 80K 235.004.11E-021.15E-013.18E-018.99E-016.01E-012.40E+007.32E+002.17E+01 + 80K 300.002.30E-026.36E-021.74E-014.81E-013.08E-011.08E+003.04E+008.45E+00 + 80K 385.001.30E-023.52E-029.32E-022.45E-011.57E-014.90E-011.26E+003.20E+00 + 80K 470.008.44E-032.24E-025.72E-021.43E-019.24E-022.66E-016.35E-011.49E+00 + 80K 580.005.45E-031.43E-023.48E-028.14E-025.33E-021.43E-013.16E-016.83E-01 + 80K 810.002.84E-037.30E-031.65E-023.47E-022.25E-025.53E-021.10E-012.11E-01 + 80K 1100.001.63E-034.08E-038.61E-031.66E-021.03E-022.42E-024.43E-027.72E-02 + 80K 1350.001.14E-032.80E-035.67E-031.04E-026.19E-031.42E-022.49E-024.11E-02 + 80K 1600.008.56E-042.05E-034.04E-037.09E-034.04E-039.26E-031.57E-022.50E-02 + 80L1 15.841.59E+003.44E+028.79E+032.44E+042.35E+024.67E+041.81E+061.58E+07 + 80L1 16.541.49E+002.79E+028.42E+034.29E+042.07E+023.82E+041.44E+061.44E+07 + 80L1 17.841.31E+001.93E+027.21E+036.44E+041.65E+022.67E+049.54E+051.15E+07 + 80L1 21.049.90E-018.46E+014.24E+036.66E+041.01E+021.24E+043.92E+055.78E+06 + 80L1 24.847.34E-013.60E+012.15E+034.37E+046.17E+015.74E+031.60E+052.56E+06 + 80L1 28.005.85E-011.92E+011.25E+032.81E+044.32E+013.31E+038.44E+041.36E+06 + 80L1 34.004.00E-016.82E+004.89E+021.20E+042.43E+011.37E+032.99E+044.68E+05 + 80L1 42.002.59E-012.24E+001.66E+024.16E+031.30E+015.35E+029.80E+031.42E+05 + 80L1 54.001.51E-016.82E-014.39E+011.07E+036.21E+001.78E+022.64E+033.36E+04 + 80L1 67.009.34E-023.04E-011.39E+013.17E+023.30E+007.05E+018.75E+029.75E+03 + 80L1 84.005.57E-021.61E-014.35E+008.73E+011.71E+002.73E+012.81E+022.69E+03 + 80L1 97.003.99E-021.14E-012.16E+003.87E+011.13E+001.51E+011.38E+021.19E+03 + 80L1 114.002.73E-027.97E-021.03E+001.58E+017.06E-017.86E+006.30E+014.85E+02 + 80L1 137.001.77E-025.29E-024.82E-015.95E+004.17E-013.80E+002.63E+011.77E+02 + 80L1 165.001.14E-023.48E-022.41E-012.33E+002.46E-011.86E+001.11E+016.51E+01 + 80L1 230.005.24E-031.61E-028.00E-025.13E-019.68E-025.40E-012.51E+001.16E+01 + 80L1 315.002.57E-037.78E-033.12E-021.45E-014.07E-021.78E-016.63E-012.46E+00 + 80L1 400.001.52E-034.54E-031.60E-026.06E-022.13E-027.96E-022.54E-018.10E-01 + 80L1 510.009.18E-042.67E-038.37E-032.67E-021.12E-023.64E-021.01E-012.78E-01 + 80L1 740.004.44E-041.24E-033.32E-038.54E-034.23E-031.18E-022.71E-026.11E-02 + 80L11000.002.56E-046.92E-041.66E-033.70E-031.95E-034.98E-031.02E-022.01E-02 + 80L11500.001.27E-043.25E-046.92E-041.33E-037.01E-041.68E-033.05E-035.22E-03 + 80L2 15.213.48E+001.68E+042.47E+064.35E+072.74E+011.91E+032.38E+045.89E+04 + 80L2 15.913.09E+001.34E+041.92E+063.89E+072.39E+011.61E+032.32E+041.04E+05 + 80L2 17.212.50E+009.11E+031.23E+062.96E+071.89E+011.20E+032.05E+041.59E+05 + 80L2 20.411.58E+003.94E+034.63E+051.36E+071.13E+016.28E+021.31E+041.71E+05 + 80L2 24.219.79E-011.70E+031.74E+055.50E+066.80E+003.28E+027.35E+031.19E+05 + 80L2 28.006.48E-018.37E+027.58E+042.40E+064.40E+001.88E+024.26E+037.42E+04 + 80L2 34.003.69E-013.26E+022.50E+047.62E+052.47E+008.99E+011.96E+033.49E+04 + 80L2 42.001.98E-011.18E+027.50E+032.10E+051.32E+004.02E+018.10E+021.38E+04 + 80L2 54.009.35E-023.54E+011.80E+034.43E+046.28E-011.55E+012.75E+024.25E+03 + 80L2 67.004.86E-021.28E+015.36E+021.15E+043.34E-016.87E+001.07E+021.48E+03 + 80L2 84.002.44E-024.45E+001.52E+022.80E+031.73E-012.94E+003.95E+014.76E+02 + 80L2 97.001.57E-022.29E+006.88E+011.15E+031.14E-011.72E+002.09E+012.30E+02 + 80L2 114.009.54E-031.09E+002.85E+014.21E+027.13E-029.47E-011.03E+011.01E+02 + 80L2 137.005.42E-034.78E-011.06E+011.36E+024.20E-024.82E-014.59E+003.99E+01 + 80L2 165.003.07E-032.09E-013.92E+004.41E+012.47E-022.45E-012.04E+001.56E+01 + 80L2 230.001.13E-034.95E-027.00E-016.16E+009.62E-037.46E-024.92E-012.98E+00 + 80L2 315.004.45E-041.32E-021.45E-011.02E+003.97E-032.48E-021.32E-016.47E-01 + 80L2 400.002.24E-045.04E-034.61E-022.74E-012.04E-031.10E-025.00E-022.10E-01 + 80L2 510.001.13E-041.96E-031.50E-027.62E-021.04E-034.86E-031.91E-026.93E-02 + 80L2 740.004.18E-054.94E-042.94E-031.20E-023.70E-041.45E-034.67E-031.38E-02 + 80L21000.001.92E-051.73E-048.63E-043.00E-031.61E-045.63E-041.57E-034.02E-03 + 80L21500.007.10E-064.66E-051.87E-045.44E-045.27E-051.65E-043.95E-048.57E-04 + 80L3 13.287.86E+004.03E+047.34E+061.59E+084.31E+007.25E+048.12E+071.00E+10 + 80L3 13.986.79E+003.11E+045.40E+061.33E+083.68E+005.62E+045.74E+076.78E+09 + 80L3 15.285.26E+001.99E+043.17E+069.08E+072.80E+003.60E+043.15E+073.43E+09 + 80L3 18.483.02E+007.62E+031.01E+063.40E+071.57E+001.40E+048.77E+068.08E+08 + 80L3 22.281.73E+002.97E+033.30E+051.15E+078.83E-015.50E+032.52E+061.96E+08 + 80L3 28.008.62E-019.39E+028.38E+042.82E+064.39E-011.77E+035.54E+053.52E+07 + 80L3 34.004.72E-013.54E+022.61E+048.17E+052.43E-016.72E+021.55E+058.26E+06 + 80L3 42.002.42E-011.22E+027.35E+032.06E+051.27E-012.35E+023.92E+041.73E+06 + 80L3 54.001.09E-013.48E+011.63E+033.92E+045.93E-026.75E+017.79E+032.75E+05 + 80L3 67.005.40E-021.19E+014.50E+029.31E+033.09E-022.32E+011.99E+035.80E+04 + 80L3 84.002.58E-023.86E+001.17E+022.05E+031.56E-027.58E+004.83E+021.16E+04 + 80L3 97.001.61E-021.89E+004.98E+017.80E+021.01E-023.73E+001.99E+024.23E+03 + 80L3 114.009.49E-038.56E-011.91E+012.64E+026.24E-031.68E+007.40E+011.38E+03 + 80L3 137.005.19E-033.48E-016.48E+007.73E+013.60E-036.83E-012.44E+013.91E+02 + 80L3 165.002.83E-031.41E-012.18E+002.24E+012.07E-032.76E-018.08E+001.11E+02 + 80L3 230.009.70E-042.86E-023.20E-012.51E+007.78E-045.51E-021.17E+001.25E+01 + 80L3 315.003.60E-046.54E-035.39E-023.31E-013.11E-041.22E-021.96E-011.69E+00 + 80L3 400.001.74E-042.20E-031.45E-027.42E-021.57E-043.96E-035.24E-023.86E-01 + 80L3 510.008.48E-057.54E-043.97E-031.71E-027.92E-051.29E-031.41E-029.00E-02 + 80L3 740.002.98E-051.60E-046.09E-042.06E-032.88E-052.43E-042.00E-031.05E-02 + 80L31000.001.36E-055.04E-051.51E-044.29E-041.32E-056.85E-054.36E-041.98E-03 + 80L31500.005.13E-061.25E-052.82E-056.40E-055.07E-061.47E-056.19E-052.32E-04 + 80M1 4.562.74E+001.53E+041.01E+063.68E+072.24E+035.29E+062.41E+092.46E+11 + 80M1 5.562.21E+006.69E+034.72E+051.76E+071.24E+032.00E+066.67E+086.30E+10 + 80M1 7.561.47E+001.82E+031.46E+054.71E+064.93E+024.46E+059.32E+077.44E+09 + 80M1 11.567.42E-012.83E+022.56E+049.08E+051.39E+025.71E+046.53E+063.89E+08 + 80M1 18.563.13E-013.21E+013.01E+031.13E+053.38E+015.98E+033.69E+051.51E+07 + 80M1 27.001.49E-015.28E+004.85E+021.73E+041.11E+011.04E+034.09E+041.22E+06 + 80M1 42.005.89E-026.27E-015.04E+011.56E+033.00E+001.39E+023.34E+036.84E+04 + 80M1 54.003.39E-022.07E-011.35E+013.75E+021.43E+004.57E+018.42E+021.39E+04 + 80M1 72.001.77E-027.24E-023.01E+007.13E+016.16E-011.32E+011.82E+022.33E+03 + 80M1 105.007.34E-032.49E-024.68E-018.23E+002.06E-012.72E+002.62E+012.43E+02 + 80M1 150.003.17E-031.04E-029.97E-021.19E+007.41E-026.55E-014.58E+003.15E+01 + 80M1 280.007.46E-042.36E-031.12E-026.33E-021.29E-026.40E-022.71E-011.15E+00 + 80M1 500.002.14E-046.39E-042.11E-037.16E-032.70E-039.11E-032.63E-027.53E-02 + 80M2 4.286.18E+002.21E+063.02E+094.95E+113.00E+021.92E+052.23E+075.52E+08 + 80M2 5.284.64E+007.79E+057.69E+081.16E+111.60E+027.42E+047.91E+063.15E+08 + 80M2 7.282.70E+001.58E+059.76E+071.24E+106.10E+011.77E+041.59E+067.85E+07 + 80M2 11.281.11E+001.80E+046.17E+065.94E+081.64E+012.63E+031.79E+058.54E+06 + 80M2 18.283.62E-011.67E+033.15E+052.14E+073.89E+003.42E+021.66E+046.39E+05 + 80M2 27.001.34E-012.48E+023.00E+041.52E+061.22E+006.91E+012.49E+037.60E+04 + 80M2 42.004.04E-022.95E+012.21E+037.87E+043.31E-011.18E+013.02E+026.78E+03 + 80M2 54.001.98E-028.91E+005.14E+021.50E+041.59E-014.40E+009.22E+011.72E+03 + 80M2 72.008.61E-032.30E+009.94E+012.29E+036.85E-021.45E+002.41E+013.63E+02 + 80M2 105.002.82E-034.04E-011.21E+012.04E+022.30E-023.46E-014.27E+004.81E+01 + 80M2 150.009.73E-048.12E-021.73E+002.20E+018.27E-039.20E-028.61E-017.39E+00 + 80M2 280.001.54E-045.52E-036.84E-025.36E-011.41E-039.79E-035.77E-023.14E-01 + 80M2 500.003.00E-055.42E-044.28E-032.24E-022.81E-041.35E-035.45E-032.03E-02 + 80M3 3.851.82E+015.18E+067.94E+091.40E+124.48E+019.68E+061.28E+111.84E+14 + 80M3 4.851.21E+011.63E+061.73E+092.71E+112.23E+013.05E+062.58E+102.54E+13 + 80M3 6.856.03E+002.86E+051.82E+082.32E+107.81E+005.44E+052.38E+091.36E+12 + 80M3 10.852.11E+002.83E+049.53E+068.87E+081.93E+005.47E+041.01E+082.95E+10 + 80M3 17.855.92E-012.32E+034.14E+052.67E+074.26E-014.56E+033.45E+065.17E+08 + 80M3 27.001.88E-012.90E+023.17E+041.49E+061.21E-015.79E+022.16E+051.95E+07 + 80M3 42.005.17E-023.18E+012.12E+036.98E+043.18E-026.43E+011.18E+046.49E+05 + 80M3 54.002.41E-029.08E+004.61E+021.24E+041.49E-021.85E+012.33E+039.79E+04 + 80M3 72.009.83E-032.18E+008.13E+011.72E+036.29E-034.44E+003.74E+021.17E+04 + 80M3 105.002.97E-033.38E-018.53E+001.31E+022.04E-036.89E-013.56E+017.80E+02 + 80M3 150.009.51E-045.92E-021.04E+001.18E+017.08E-041.20E-014.09E+006.52E+01 + 80M3 280.001.32E-043.01E-032.83E-021.92E-011.14E-045.84E-031.07E-011.04E+00 + 80M3 500.002.33E-052.19E-041.19E-035.23E-032.19E-053.82E-044.36E-032.89E-02 + 80M4 3.384.90E+011.58E+057.00E+097.39E+131.39E+013.16E+052.12E+091.28E+12 + 80M4 4.382.24E+014.22E+041.14E+097.69E+126.06E+008.64E+043.69E+081.83E+11 + 80M4 6.386.72E+006.27E+038.12E+072.94E+111.78E+001.31E+042.98E+071.08E+10 + 80M4 10.381.28E+005.34E+022.66E+064.51E+093.57E-011.14E+031.20E+062.86E+08 + 80M4 17.381.99E-013.93E+017.09E+045.73E+076.28E-028.50E+014.21E+046.35E+06 + 80M4 27.003.75E-024.21E+003.23E+031.45E+061.38E-029.26E+002.53E+032.55E+05 + 80M4 42.006.61E-034.44E-011.47E+023.79E+042.91E-031.00E+001.57E+021.06E+04 + 80M4 54.002.40E-031.23E-012.58E+014.90E+031.19E-032.83E-013.28E+011.76E+03 + 80M4 72.007.44E-042.85E-023.54E+004.82E+024.21E-046.70E-025.58E+002.30E+02 + 80M4 105.001.58E-044.20E-032.71E-012.40E+011.06E-041.02E-025.63E-011.66E+01 + 80M4 150.003.65E-056.99E-042.50E-021.49E+002.84E-051.73E-036.64E-021.43E+00 + 80M4 280.002.85E-063.27E-054.55E-041.36E-022.75E-068.05E-051.72E-032.23E-02 + 80M4 500.002.91E-072.15E-061.44E-052.22E-043.12E-074.89E-066.48E-055.53E-04 + 80M5 3.297.47E+011.72E+051.40E+101.26E+148.19E+002.27E+041.16E+104.66E+14 + 80M5 4.293.31E+014.42E+042.18E+091.24E+133.49E+006.05E+031.82E+094.36E+13 + 80M5 6.299.57E+006.25E+031.48E+084.41E+111.01E+008.99E+021.26E+081.44E+12 + 80M5 10.291.75E+005.08E+024.63E+066.29E+092.01E-017.74E+014.03E+061.84E+10 + 80M5 17.292.61E-013.59E+011.19E+057.51E+073.55E-025.86E+001.07E+051.91E+08 + 80M5 27.004.70E-023.65E+005.09E+031.75E+067.81E-036.46E-014.79E+033.97E+06 + 80M5 42.008.05E-033.70E-012.24E+024.34E+041.69E-037.37E-022.20E+028.93E+04 + 80M5 54.002.89E-031.00E-013.81E+015.39E+037.02E-042.17E-023.82E+011.06E+04 + 80M5 72.008.82E-042.23E-025.03E+005.02E+022.54E-045.39E-035.17E+009.51E+02 + 80M5 105.001.84E-043.10E-033.57E-012.29E+016.61E-058.88E-043.78E-014.23E+01 + 80M5 150.004.20E-054.87E-042.99E-021.27E+001.84E-051.67E-043.23E-022.35E+00 + 80M5 280.003.35E-062.09E-054.25E-048.85E-032.00E-069.87E-064.62E-041.72E-02 + 80M5 500.003.67E-071.38E-061.01E-051.04E-042.76E-078.46E-071.04E-052.14E-04 + 80N+ 50.003.09E-028.35E+005.43E+022.27E+046.49E-013.25E+011.84E+038.10E+04 + 80N+ 70.001.23E-021.63E+007.26E+012.05E+032.40E-017.14E+002.36E+026.74E+03 + 80N+ 100.004.76E-033.06E-019.22E+001.79E+028.61E-021.54E+002.99E+015.52E+02 + 80N+ 150.001.61E-034.77E-029.33E-011.23E+012.68E-022.86E-013.23E+003.70E+01 + 80N+ 200.007.55E-041.35E-021.95E-011.97E+001.18E-029.15E-027.29E-016.06E+00 + 80N+ 500.008.44E-054.42E-042.41E-031.12E-029.60E-043.50E-031.18E-024.10E-02 + 81K 86.534.94E-015.02E-011.10E-015.71E-031.11E+018.09E+011.11E+023.31E+01 + 81K 87.234.84E-015.13E-011.39E-011.40E-021.09E+017.86E+011.12E+024.14E+01 + 81K 88.534.68E-015.31E-011.93E-013.78E-021.04E+017.46E+011.14E+025.64E+01 + 81K 91.734.29E-015.61E-013.26E-011.40E-019.40E+006.59E+011.15E+029.01E+01 + 81K 95.533.88E-015.78E-014.70E-013.25E-018.36E+005.71E+011.12E+021.22E+02 + 81K 100.003.47E-015.80E-016.10E-015.89E-017.32E+004.86E+011.06E+021.48E+02 + 81K 106.003.00E-015.63E-017.46E-019.54E-016.19E+003.96E+019.61E+011.66E+02 + 81K 114.002.51E-015.24E-018.46E-011.37E+005.03E+003.07E+018.16E+011.69E+02 + 81K 126.001.96E-014.53E-018.80E-011.75E+003.78E+002.16E+016.25E+011.52E+02 + 81K 139.001.53E-013.80E-018.31E-011.88E+002.85E+001.54E+014.66E+011.25E+02 + 81K 156.001.15E-013.00E-017.21E-011.80E+002.06E+001.03E+013.21E+019.16E+01 + 81K 169.009.44E-022.52E-016.32E-011.65E+001.64E+007.83E+002.45E+017.16E+01 + 81K 186.007.45E-022.03E-015.27E-011.43E+001.25E+005.64E+001.76E+015.21E+01 + 81K 209.005.60E-021.54E-014.12E-011.15E+009.04E-013.81E+001.17E+013.45E+01 + 81K 235.004.21E-021.16E-013.15E-018.85E-016.53E-012.57E+007.69E+002.24E+01 + 81K 300.002.36E-026.46E-021.75E-014.83E-013.34E-011.16E+003.22E+008.80E+00 + 81K 385.001.34E-023.61E-029.53E-022.50E-011.70E-015.26E-011.34E+003.36E+00 + 81K 480.008.35E-032.21E-025.61E-021.39E-019.48E-022.68E-016.29E-011.45E+00 + 81K 590.005.46E-031.43E-023.47E-028.07E-025.52E-021.46E-013.18E-016.78E-01 + 81K 820.002.89E-037.44E-031.68E-023.51E-022.36E-025.74E-021.13E-012.14E-01 + 81K 1100.001.69E-034.27E-039.04E-031.74E-021.12E-022.60E-024.74E-028.21E-02 + 81K 1350.001.19E-032.93E-035.96E-031.09E-026.66E-031.53E-022.66E-024.38E-02 + 81K 1600.008.91E-042.15E-034.25E-037.48E-034.35E-039.94E-031.68E-022.66E-02 + 81L1 16.351.49E+003.23E+027.89E+032.08E+042.35E+024.46E+041.66E+061.39E+07 + 81L1 17.051.40E+002.64E+027.58E+033.66E+042.08E+023.66E+041.32E+061.28E+07 + 81L1 18.351.24E+001.85E+026.55E+035.53E+041.67E+022.59E+048.91E+051.03E+07 + 81L1 21.559.43E-018.34E+013.95E+035.88E+041.04E+021.22E+043.75E+055.32E+06 + 81L1 25.357.04E-013.65E+012.06E+033.98E+046.39E+015.78E+031.57E+052.41E+06 + 81L1 29.005.47E-011.81E+011.13E+032.44E+044.28E+013.12E+037.62E+041.19E+06 + 81L1 35.003.78E-016.74E+004.56E+021.07E+042.45E+011.33E+032.80E+044.24E+05 + 81L1 43.002.48E-012.31E+001.60E+023.86E+031.34E+015.31E+029.45E+031.33E+05 + 81L1 55.001.46E-017.23E-014.42E+011.03E+036.48E+001.81E+022.62E+033.25E+04 + 81L1 68.009.16E-023.20E-011.45E+013.16E+023.48E+007.28E+018.86E+029.65E+03 + 81L1 85.005.52E-021.66E-014.62E+008.97E+011.81E+002.85E+012.89E+022.71E+03 + 81L1 98.003.97E-021.17E-012.31E+004.04E+011.20E+001.59E+011.43E+021.22E+03 + 81L1 115.002.73E-028.07E-021.11E+001.67E+017.57E-018.33E+006.58E+015.00E+02 + 81L1 138.001.78E-025.35E-025.19E-016.36E+004.49E-014.05E+002.76E+011.84E+02 + 81L1 165.001.17E-023.57E-022.63E-012.58E+002.70E-012.03E+001.20E+017.04E+01 + 81L1 230.005.40E-031.67E-028.60E-025.62E-011.06E-015.90E-012.73E+001.25E+01 + 81L1 315.002.66E-038.09E-033.33E-021.57E-014.47E-021.94E-017.20E-012.67E+00 + 81L1 410.001.50E-034.49E-031.59E-026.00E-022.19E-028.01E-022.51E-017.84E-01 + 81L1 520.009.20E-042.69E-038.47E-032.70E-021.16E-023.74E-021.02E-012.77E-01 + 81L1 750.004.53E-041.28E-033.43E-038.80E-034.46E-031.23E-022.81E-026.27E-02 + 81L11000.002.68E-047.32E-041.77E-033.96E-032.13E-035.42E-031.11E-022.17E-02 + 81L11500.001.33E-043.44E-047.38E-041.42E-037.61E-041.82E-033.30E-035.65E-03 + 81L2 15.703.28E+001.56E+042.21E+063.73E+072.76E+011.82E+032.19E+045.14E+04 + 81L2 16.402.93E+001.26E+041.72E+063.36E+072.42E+011.55E+032.13E+049.09E+04 + 81L2 17.702.39E+008.62E+031.12E+062.58E+071.93E+011.16E+031.90E+041.39E+05 + 81L2 20.901.52E+003.81E+034.33E+051.22E+071.17E+016.20E+021.24E+041.54E+05 + 81L2 24.709.57E-011.68E+031.67E+055.07E+067.10E+003.29E+027.09E+031.10E+05 + 81L2 29.006.07E-017.68E+026.67E+042.04E+064.40E+001.79E+023.89E+036.56E+04 + 81L2 35.003.53E-013.08E+022.28E+046.72E+052.51E+008.74E+011.84E+033.16E+04 + 81L2 43.001.93E-011.15E+027.07E+031.93E+051.37E+004.00E+017.80E+021.29E+04 + 81L2 55.009.27E-023.54E+011.76E+034.21E+046.62E-011.58E+012.71E+024.08E+03 + 81L2 68.004.88E-021.30E+015.34E+021.12E+043.55E-017.09E+001.08E+021.45E+03 + 81L2 85.002.48E-024.60E+001.55E+022.79E+031.85E-013.08E+004.04E+014.77E+02 + 81L2 98.001.60E-022.39E+007.06E+011.16E+031.23E-011.81E+002.16E+012.33E+02 + 81L2 115.009.83E-031.15E+002.95E+014.30E+027.75E-021.00E+001.07E+011.04E+02 + 81L2 138.005.63E-035.06E-011.10E+011.41E+024.59E-025.15E-014.82E+004.13E+01 + 81L2 165.003.27E-032.29E-014.28E+004.78E+012.75E-022.69E-012.22E+001.68E+01 + 81L2 230.001.20E-035.42E-027.65E-016.69E+001.07E-028.22E-025.37E-013.23E+00 + 81L2 315.004.78E-041.45E-021.59E-011.11E+004.44E-032.74E-021.45E-017.04E-01 + 81L2 410.002.25E-045.03E-034.50E-022.63E-012.13E-031.12E-024.98E-022.04E-01 + 81L2 520.001.16E-042.00E-031.51E-027.56E-021.10E-035.06E-031.96E-026.96E-02 + 81L2 750.004.37E-055.19E-043.07E-031.24E-024.01E-041.55E-034.91E-031.43E-02 + 81L21000.002.08E-051.92E-049.55E-043.31E-031.81E-046.28E-041.75E-034.44E-03 + 81L21500.007.75E-065.16E-052.08E-046.02E-045.93E-051.84E-044.39E-049.51E-04 + 81L3 13.667.44E+003.77E+046.60E+061.38E+084.20E+007.01E+047.56E+079.05E+09 + 81L3 14.366.45E+002.93E+044.90E+061.17E+083.60E+005.47E+045.40E+076.18E+09 + 81L3 15.665.03E+001.89E+042.91E+068.05E+072.76E+003.55E+043.00E+073.19E+09 + 81L3 18.862.92E+007.40E+039.56E+053.10E+071.56E+001.40E+048.61E+067.74E+08 + 81L3 22.661.69E+002.93E+033.18E+051.07E+078.90E-015.62E+032.53E+061.93E+08 + 81L3 29.007.98E-018.46E+027.22E+042.35E+064.18E-011.64E+034.92E+053.01E+07 + 81L3 35.004.45E-013.29E+022.34E+047.07E+052.36E-016.45E+021.43E+057.41E+06 + 81L3 43.002.33E-011.17E+026.80E+031.85E+051.26E-012.32E+023.76E+041.62E+06 + 81L3 55.001.06E-013.41E+011.56E+033.65E+045.95E-026.83E+017.74E+032.68E+05 + 81L3 68.005.35E-021.18E+014.39E+028.89E+033.13E-022.39E+012.02E+035.79E+04 + 81L3 85.002.59E-023.91E+001.16E+022.00E+031.60E-027.92E+005.00E+021.19E+04 + 81L3 98.001.62E-021.94E+005.00E+017.70E+021.04E-023.93E+002.08E+024.36E+03 + 81L3 115.009.63E-038.81E-011.94E+012.64E+026.45E-031.79E+007.80E+011.44E+03 + 81L3 138.005.30E-033.61E-016.63E+007.80E+013.74E-037.31E-012.60E+014.12E+02 + 81L3 165.002.96E-031.51E-012.33E+002.38E+012.20E-033.05E-018.96E+001.23E+02 + 81L3 230.001.02E-033.07E-023.42E-012.67E+008.25E-046.09E-021.29E+001.38E+01 + 81L3 315.003.79E-047.03E-035.77E-023.52E-013.30E-041.35E-022.17E-011.86E+00 + 81L3 410.001.70E-042.12E-031.35E-026.79E-021.55E-043.89E-035.06E-023.67E-01 + 81L3 520.008.43E-057.44E-043.84E-031.63E-027.96E-051.29E-031.40E-028.84E-02 + 81L3 750.003.01E-051.62E-046.11E-042.05E-032.94E-052.51E-042.06E-031.07E-02 + 81L31000.001.43E-055.37E-051.62E-044.59E-041.40E-057.46E-054.80E-042.18E-03 + 81L31500.005.41E-061.33E-053.01E-056.85E-055.34E-061.59E-056.78E-052.55E-04 + 81M1 4.702.58E+001.48E+049.73E+053.20E+072.25E+035.09E+062.23E+092.19E+11 + 81M1 5.702.10E+006.58E+034.61E+051.63E+071.27E+031.98E+066.39E+085.85E+10 + 81M1 7.701.41E+001.84E+031.45E+054.59E+065.15E+024.55E+059.32E+077.25E+09 + 81M1 11.707.23E-012.96E+022.60E+049.02E+051.48E+026.00E+046.79E+063.96E+08 + 81M1 18.703.09E-013.48E+013.14E+031.15E+053.65E+016.42E+033.94E+051.59E+07 + 81M1 27.001.50E-016.04E+005.30E+021.84E+041.22E+011.16E+034.54E+041.35E+06 + 81M1 42.005.96E-027.27E-015.61E+011.69E+033.31E+001.54E+023.70E+037.54E+04 + 81M1 54.003.44E-022.38E-011.52E+014.10E+021.58E+005.06E+019.31E+021.52E+04 + 81M1 72.001.80E-028.01E-023.41E+007.89E+016.80E-011.46E+012.00E+022.56E+03 + 81M1 105.007.52E-032.64E-025.29E-019.20E+002.27E-013.00E+002.88E+012.66E+02 + 81M1 150.003.26E-031.08E-021.11E-011.33E+008.17E-027.21E-015.02E+003.45E+01 + 81M1 280.007.73E-042.46E-031.21E-026.97E-021.42E-027.03E-022.97E-011.25E+00 + 81M1 500.002.24E-046.74E-042.26E-037.77E-032.97E-039.98E-032.87E-028.20E-02 + 81M2 4.425.79E+002.06E+062.70E+094.27E+113.04E+021.85E+052.06E+074.85E+08 + 81M2 5.424.40E+007.48E+057.16E+081.05E+111.65E+027.33E+047.54E+062.87E+08 + 81M2 7.422.61E+001.57E+059.50E+071.18E+106.42E+011.80E+041.57E+067.47E+07 + 81M2 11.421.10E+001.85E+046.25E+065.90E+081.77E+012.75E+031.83E+058.49E+06 + 81M2 18.423.65E-011.76E+033.28E+052.20E+074.24E+003.65E+021.73E+046.56E+05 + 81M2 27.001.38E-012.71E+023.27E+041.64E+061.36E+007.59E+012.71E+038.15E+04 + 81M2 42.004.21E-023.23E+012.41E+038.51E+043.70E-011.30E+013.28E+027.30E+03 + 81M2 54.002.08E-029.75E+005.61E+021.62E+041.77E-014.84E+001.00E+021.86E+03 + 81M2 72.009.06E-032.52E+001.09E+022.48E+037.65E-021.59E+002.63E+013.92E+02 + 81M2 105.002.99E-034.43E-011.32E+012.22E+022.57E-023.81E-014.67E+005.22E+01 + 81M2 150.001.04E-038.92E-021.90E+002.40E+019.26E-031.02E-019.43E-018.04E+00 + 81M2 280.001.66E-046.08E-037.53E-025.87E-011.59E-031.09E-026.35E-023.44E-01 + 81M2 500.003.25E-056.00E-044.73E-032.47E-023.16E-041.50E-036.04E-032.23E-02 + 81M3 3.961.73E+014.86E+067.17E+091.22E+124.38E+019.39E+061.19E+111.66E+14 + 81M3 4.961.16E+011.57E+061.62E+092.46E+112.21E+013.05E+062.51E+102.41E+13 + 81M3 6.965.88E+002.86E+051.78E+082.21E+107.93E+005.61E+052.42E+091.36E+12 + 81M3 10.962.09E+002.91E+049.65E+068.80E+082.00E+005.80E+041.07E+083.10E+10 + 81M3 17.965.96E-012.43E+034.29E+052.72E+074.45E-014.93E+033.74E+065.59E+08 + 81M3 27.001.94E-013.14E+023.41E+041.58E+061.29E-016.46E+022.44E+052.21E+07 + 81M3 42.005.35E-023.44E+012.28E+037.42E+043.39E-027.17E+011.33E+047.31E+05 + 81M3 54.002.50E-029.82E+004.95E+021.31E+041.59E-022.06E+012.62E+031.10E+05 + 81M3 72.001.02E-022.35E+008.74E+011.83E+036.71E-034.95E+004.20E+021.32E+04 + 81M3 105.003.11E-033.66E-019.16E+001.40E+022.17E-037.68E-013.99E+018.72E+02 + 81M3 150.009.98E-046.40E-021.11E+001.26E+017.55E-041.33E-014.57E+007.28E+01 + 81M3 280.001.40E-043.25E-033.04E-022.06E-011.21E-046.48E-031.20E-011.16E+00 + 81M3 500.002.45E-052.36E-041.28E-035.62E-032.34E-054.23E-044.85E-033.20E-02 + 81M4 3.484.64E+011.47E+056.29E+096.45E+131.36E+013.07E+051.98E+091.16E+12 + 81M4 4.482.16E+014.09E+041.07E+097.11E+126.05E+008.67E+043.60E+081.74E+11 + 81M4 6.486.66E+006.29E+038.03E+072.89E+111.82E+001.36E+043.04E+071.08E+10 + 81M4 10.481.30E+005.52E+022.74E+064.66E+093.73E-011.22E+031.27E+062.99E+08 + 81M4 17.482.06E-014.15E+017.53E+046.11E+076.65E-029.30E+014.58E+046.83E+06 + 81M4 27.003.99E-024.59E+003.57E+031.62E+061.49E-021.04E+012.85E+032.86E+05 + 81M4 42.007.08E-034.86E-011.63E+024.24E+043.16E-031.13E+001.76E+021.18E+04 + 81M4 54.002.58E-031.35E-012.85E+015.47E+031.29E-033.20E-013.70E+011.97E+03 + 81M4 72.008.03E-043.13E-023.92E+005.38E+024.59E-047.56E-026.28E+002.58E+02 + 81M4 105.001.71E-044.62E-033.00E-012.68E+011.16E-041.15E-026.34E-011.86E+01 + 81M4 150.003.94E-057.72E-042.77E-021.67E+003.10E-051.95E-037.48E-021.61E+00 + 81M4 280.003.14E-063.62E-055.04E-041.52E-023.02E-069.09E-051.94E-032.51E-02 + 81M4 500.003.19E-072.38E-061.60E-052.49E-043.43E-075.52E-067.33E-056.25E-04 + 81M5 3.397.08E+011.59E+051.27E+101.11E+147.98E+002.15E+041.09E+104.22E+14 + 81M5 4.393.20E+014.22E+042.07E+091.15E+133.48E+005.93E+031.79E+094.18E+13 + 81M5 6.399.49E+006.18E+031.48E+084.35E+111.03E+009.12E+021.30E+081.47E+12 + 81M5 10.391.78E+005.17E+024.81E+066.51E+092.09E-018.08E+014.32E+061.97E+10 + 81M5 17.392.70E-013.73E+011.27E+058.00E+073.74E-026.23E+001.18E+052.12E+08 + 81M5 27.004.99E-023.90E+005.66E+031.95E+068.40E-037.05E-015.47E+034.59E+06 + 81M5 42.008.59E-033.97E-012.50E+024.83E+041.83E-038.04E-022.51E+021.03E+05 + 81M5 54.003.09E-031.07E-014.24E+016.00E+037.58E-042.36E-024.36E+011.22E+04 + 81M5 72.009.44E-042.40E-025.59E+005.59E+022.74E-045.87E-035.90E+001.09E+03 + 81M5 105.001.98E-043.35E-033.97E-012.54E+017.16E-059.68E-044.31E-014.85E+01 + 81M5 150.004.53E-055.27E-043.32E-021.41E+002.00E-051.82E-043.68E-022.69E+00 + 81M5 280.003.67E-062.27E-054.72E-049.84E-032.17E-061.08E-055.25E-041.97E-02 + 81M5 500.004.15E-071.50E-061.12E-051.16E-042.99E-079.23E-071.17E-052.44E-04 + 81N+ 50.003.26E-029.38E+006.09E+022.55E+047.25E-013.68E+012.12E+039.46E+04 + 81N+ 70.001.30E-021.83E+008.15E+012.30E+032.69E-018.06E+002.71E+027.82E+03 + 81N+ 100.005.02E-033.43E-011.04E+012.01E+029.61E-021.73E+003.42E+016.35E+02 + 81N+ 150.001.70E-035.34E-021.05E+001.38E+012.99E-023.20E-013.66E+004.22E+01 + 81N+ 200.007.99E-041.51E-022.19E-012.22E+001.31E-021.02E-018.21E-016.89E+00 + 81N+ 500.008.93E-054.86E-042.70E-031.26E-021.07E-033.89E-031.31E-024.59E-02 + 82K 89.004.67E-014.56E-019.79E-024.96E-031.12E+017.79E+011.03E+022.99E+01 + 82K 89.704.58E-014.66E-011.23E-011.20E-021.09E+017.58E+011.04E+023.72E+01 + 82K 91.004.43E-014.82E-011.70E-013.22E-021.05E+017.21E+011.06E+025.04E+01 + 82K 94.204.07E-015.10E-012.86E-011.19E-019.48E+006.39E+011.07E+028.02E+01 + 82K 98.003.69E-015.26E-014.12E-012.75E-018.45E+005.56E+011.05E+021.09E+02 + 82K 102.003.35E-015.29E-015.25E-014.76E-017.53E+004.83E+011.01E+021.31E+02 + 82K 108.002.91E-015.18E-016.53E-017.94E-016.39E+003.96E+019.15E+011.49E+02 + 82K 116.002.44E-014.86E-017.52E-011.17E+005.21E+003.08E+017.85E+011.55E+02 + 82K 128.001.92E-014.25E-017.96E-011.53E+003.93E+002.19E+016.07E+011.41E+02 + 82K 141.001.51E-013.59E-017.64E-011.69E+002.98E+001.56E+014.57E+011.18E+02 + 82K 158.001.14E-012.87E-016.73E-011.65E+002.16E+001.06E+013.18E+018.78E+01 + 82K 171.009.37E-022.42E-015.96E-011.53E+001.73E+008.05E+002.45E+016.93E+01 + 82K 188.007.42E-021.96E-015.02E-011.34E+001.32E+005.83E+001.77E+015.09E+01 + 82K 211.005.60E-021.50E-013.97E-011.09E+009.58E-013.95E+001.18E+013.41E+01 + 82K 240.004.11E-021.11E-012.99E-018.30E-016.70E-012.57E+007.50E+002.13E+01 + 82K 305.002.34E-026.31E-021.70E-014.65E-013.47E-011.18E+003.21E+008.59E+00 + 82K 390.001.35E-023.59E-029.44E-022.46E-011.79E-015.43E-011.36E+003.35E+00 + 82K 480.008.63E-032.28E-025.79E-021.43E-011.03E-012.88E-016.68E-011.53E+00 + 82K 590.005.66E-031.48E-023.61E-028.36E-025.98E-021.57E-013.38E-017.16E-01 + 82K 820.003.00E-037.77E-031.75E-023.67E-022.55E-026.17E-021.21E-012.27E-01 + 82K 1100.001.76E-034.48E-039.49E-031.83E-021.20E-022.80E-025.06E-028.72E-02 + 82K 1350.001.24E-033.08E-036.28E-031.15E-027.17E-031.64E-022.85E-024.66E-02 + 82K 1600.009.28E-042.26E-034.48E-037.88E-034.67E-031.07E-021.80E-022.84E-02 + 82L1 16.861.40E+003.04E+027.12E+031.79E+042.36E+024.27E+041.53E+061.23E+07 + 82L1 17.561.31E+002.51E+026.86E+033.14E+042.10E+023.53E+041.23E+061.14E+07 + 82L1 18.861.17E+001.78E+025.98E+034.78E+041.69E+022.52E+048.35E+059.24E+06 + 82L1 22.068.98E-018.24E+013.69E+035.21E+041.06E+021.21E+043.60E+054.90E+06 + 82L1 25.866.76E-013.70E+011.97E+033.63E+046.63E+015.82E+031.53E+052.27E+06 + 82L1 29.005.46E-012.05E+011.19E+032.44E+044.71E+013.44E+038.31E+041.25E+06 + 82L1 35.003.79E-017.75E+004.89E+021.10E+042.70E+011.47E+033.05E+044.51E+05 + 82L1 43.002.49E-012.68E+001.75E+024.05E+031.47E+015.85E+021.03E+041.42E+05 + 82L1 55.001.48E-018.31E-014.89E+011.10E+037.13E+001.99E+022.86E+033.50E+04 + 82L1 68.009.28E-023.57E-011.62E+013.43E+023.83E+008.00E+019.66E+021.04E+04 + 82L1 85.005.61E-021.78E-015.19E+009.83E+012.00E+003.13E+013.15E+022.93E+03 + 82L1 98.004.05E-021.23E-012.60E+004.45E+011.32E+001.74E+011.56E+021.32E+03 + 82L1 115.002.79E-028.39E-021.24E+001.85E+018.33E-019.14E+007.17E+015.40E+02 + 82L1 138.001.82E-025.53E-025.75E-017.04E+004.94E-014.44E+003.01E+011.99E+02 + 82L1 165.001.20E-023.68E-022.89E-012.86E+002.97E-012.22E+001.31E+017.62E+01 + 82L1 230.005.57E-031.72E-029.27E-026.16E-011.17E-016.46E-012.97E+001.36E+01 + 82L1 315.002.75E-038.42E-033.56E-021.71E-014.90E-022.12E-017.83E-012.89E+00 + 82L1 410.001.56E-034.70E-031.70E-026.48E-022.40E-028.74E-022.73E-018.49E-01 + 82L1 520.009.57E-042.83E-039.03E-032.90E-021.27E-024.07E-021.11E-012.99E-01 + 82L1 750.004.73E-041.35E-033.65E-039.43E-034.87E-031.34E-023.05E-026.79E-02 + 82L11000.002.81E-047.74E-041.88E-034.24E-032.32E-035.90E-031.20E-022.35E-02 + 82L11500.001.40E-043.65E-047.87E-041.52E-038.27E-041.98E-033.58E-036.11E-03 + 82L2 16.203.09E+001.45E+041.97E+063.21E+072.78E+011.74E+032.01E+044.50E+04 + 82L2 16.902.77E+001.18E+041.55E+062.90E+072.45E+011.49E+031.97E+047.93E+04 + 82L2 18.202.27E+008.17E+031.02E+062.25E+071.96E+011.13E+031.76E+041.22E+05 + 82L2 21.401.47E+003.69E+034.05E+051.10E+071.21E+016.12E+021.17E+041.38E+05 + 82L2 25.209.35E-011.66E+031.60E+054.67E+067.42E+003.30E+026.83E+031.01E+05 + 82L2 29.006.29E-018.35E+027.17E+042.12E+064.88E+001.94E+024.07E+036.56E+04 + 82L2 35.003.67E-013.36E+022.46E+047.06E+052.79E+009.49E+011.94E+033.23E+04 + 82L2 43.002.01E-011.25E+027.63E+032.04E+051.52E+004.35E+018.29E+021.34E+04 + 82L2 55.009.70E-023.86E+011.90E+034.47E+047.36E-011.72E+012.90E+024.29E+03 + 82L2 68.005.13E-021.42E+015.78E+021.20E+043.95E-017.73E+001.16E+021.53E+03 + 82L2 85.002.61E-025.01E+001.68E+023.00E+032.06E-013.36E+004.35E+015.08E+02 + 82L2 98.001.69E-022.60E+007.66E+011.24E+031.37E-011.98E+002.33E+012.49E+02 + 82L2 115.001.04E-021.26E+003.21E+014.63E+028.63E-021.10E+001.16E+011.11E+02 + 82L2 138.005.97E-035.53E-011.20E+011.52E+025.12E-025.65E-015.23E+004.44E+01 + 82L2 165.003.48E-032.50E-014.66E+005.17E+013.08E-022.96E-012.42E+001.81E+01 + 82L2 230.001.29E-035.94E-028.36E-017.27E+001.20E-029.05E-025.86E-013.50E+00 + 82L2 315.005.12E-041.60E-021.74E-011.21E+004.97E-033.03E-021.59E-017.66E-01 + 82L2 410.002.42E-045.54E-034.94E-022.87E-012.39E-031.24E-025.47E-022.23E-01 + 82L2 520.001.25E-042.21E-031.66E-028.29E-021.24E-035.61E-032.15E-027.63E-02 + 82L2 750.004.75E-055.73E-043.39E-031.36E-024.50E-041.72E-035.43E-031.57E-02 + 82L21000.002.28E-052.12E-041.06E-033.66E-032.04E-047.01E-041.94E-034.90E-03 + 82L21500.008.45E-065.72E-052.31E-046.67E-046.67E-052.06E-044.89E-041.05E-03 + 82L3 14.037.04E+003.53E+045.96E+061.21E+084.09E+006.79E+047.06E+078.20E+09 + 82L3 14.736.14E+002.76E+044.45E+061.02E+083.53E+005.33E+045.09E+075.65E+09 + 82L3 16.034.81E+001.80E+042.68E+067.16E+072.72E+003.49E+042.87E+072.96E+09 + 82L3 19.232.83E+007.20E+039.02E+052.82E+071.56E+001.41E+048.46E+067.42E+08 + 82L3 23.031.66E+002.90E+033.06E+051.00E+078.97E-015.74E+032.54E+061.90E+08 + 82L3 29.008.23E-019.10E+027.68E+042.44E+064.43E-011.82E+035.51E+053.35E+07 + 82L3 35.004.60E-013.53E+022.49E+047.38E+052.50E-017.15E+021.60E+058.24E+06 + 82L3 43.002.41E-011.26E+027.24E+031.94E+051.33E-012.57E+024.20E+041.80E+06 + 82L3 55.001.10E-013.67E+011.66E+033.84E+046.31E-027.58E+018.63E+032.97E+05 + 82L3 68.005.56E-021.27E+014.68E+029.36E+033.32E-022.65E+012.25E+036.43E+04 + 82L3 85.002.69E-024.21E+001.24E+022.11E+031.69E-028.78E+005.56E+021.31E+04 + 82L3 98.001.69E-022.08E+005.33E+018.13E+021.10E-024.35E+002.31E+024.83E+03 + 82L3 115.001.00E-029.47E-012.07E+012.79E+026.84E-031.98E+008.67E+011.59E+03 + 82L3 138.005.54E-033.88E-017.08E+008.26E+013.97E-038.09E-012.88E+014.55E+02 + 82L3 165.003.10E-031.63E-012.49E+002.52E+012.33E-033.38E-019.94E+001.36E+02 + 82L3 230.001.07E-033.30E-023.65E-012.83E+008.75E-046.73E-021.43E+001.53E+01 + 82L3 315.003.98E-047.55E-036.17E-023.75E-013.50E-041.49E-022.40E-012.05E+00 + 82L3 410.001.79E-042.27E-031.45E-027.24E-021.64E-044.28E-035.58E-024.04E-01 + 82L3 520.008.88E-057.98E-044.10E-031.73E-028.43E-051.42E-031.55E-029.73E-02 + 82L3 750.003.18E-051.73E-046.54E-042.19E-033.11E-052.75E-042.26E-031.18E-02 + 82L31000.001.51E-055.73E-051.73E-044.91E-041.48E-058.12E-055.27E-042.40E-03 + 82L31500.005.72E-061.41E-053.21E-057.32E-055.63E-061.72E-057.42E-052.80E-04 + 82M1 4.852.43E+001.42E+049.33E+052.79E+072.27E+034.88E+062.06E+091.96E+11 + 82M1 5.851.99E+006.47E+034.49E+051.50E+071.30E+031.95E+066.10E+085.41E+10 + 82M1 7.851.35E+001.86E+031.43E+054.48E+065.37E+024.63E+059.29E+077.04E+09 + 82M1 11.857.03E-013.10E+022.63E+048.95E+051.57E+026.30E+047.04E+064.03E+08 + 82M1 18.853.05E-013.77E+013.27E+031.17E+053.93E+016.89E+034.19E+051.67E+07 + 82M1 27.001.51E-016.89E+005.78E+021.97E+041.35E+011.28E+035.05E+041.49E+06 + 82M1 42.006.03E-028.41E-016.22E+011.84E+033.66E+001.71E+024.10E+038.30E+04 + 82M1 54.003.49E-022.73E-011.70E+014.48E+021.74E+005.60E+011.03E+031.68E+04 + 82M1 72.001.83E-028.94E-023.85E+008.71E+017.51E-011.61E+012.21E+022.81E+03 + 82M1 105.007.69E-032.82E-025.98E-011.03E+012.51E-013.32E+003.17E+012.92E+02 + 82M1 150.003.35E-031.13E-021.24E-011.48E+009.02E-027.94E-015.51E+003.77E+01 + 82M1 280.008.01E-042.58E-031.31E-027.69E-021.57E-027.71E-023.25E-011.37E+00 + 82M1 500.002.34E-047.10E-042.43E-038.43E-033.26E-031.09E-023.13E-028.92E-02 + 82M2 4.555.44E+001.93E+062.43E+093.71E+113.08E+021.79E+051.92E+074.30E+08 + 82M2 5.554.18E+007.20E+056.68E+089.47E+101.70E+027.25E+047.21E+062.62E+08 + 82M2 7.552.52E+001.56E+059.26E+071.12E+106.76E+011.84E+041.56E+067.13E+07 + 82M2 11.551.08E+001.90E+046.35E+065.87E+081.90E+012.88E+031.87E+058.46E+06 + 82M2 18.553.67E-011.85E+033.42E+052.26E+074.62E+003.90E+021.82E+046.73E+05 + 82M2 27.001.43E-012.97E+023.56E+041.77E+061.52E+008.35E+012.94E+038.74E+04 + 82M2 42.004.38E-023.53E+012.62E+039.21E+044.12E-011.43E+013.57E+027.85E+03 + 82M2 54.002.17E-021.07E+016.12E+021.76E+041.98E-015.32E+001.09E+022.00E+03 + 82M2 72.009.52E-032.76E+001.19E+022.69E+038.55E-021.75E+002.86E+014.24E+02 + 82M2 105.003.16E-034.86E-011.44E+012.41E+022.88E-024.20E-015.10E+005.66E+01 + 82M2 150.001.10E-039.80E-022.08E+002.62E+011.04E-021.12E-011.03E+008.74E+00 + 82M2 280.001.78E-046.70E-038.28E-026.43E-011.78E-031.20E-026.99E-023.76E-01 + 82M2 500.003.52E-056.63E-045.23E-032.72E-023.56E-041.67E-036.68E-032.46E-02 + 82M3 4.071.65E+014.58E+066.51E+091.07E+124.29E+019.14E+061.12E+111.51E+14 + 82M3 5.071.12E+011.52E+061.53E+092.25E+112.21E+013.05E+062.45E+102.30E+13 + 82M3 7.075.74E+002.86E+051.74E+082.11E+108.05E+005.79E+052.46E+091.37E+12 + 82M3 11.072.07E+003.00E+049.78E+068.74E+082.06E+006.16E+041.13E+083.26E+10 + 82M3 18.076.01E-012.55E+034.45E+052.78E+074.65E-015.34E+034.06E+066.05E+08 + 82M3 27.002.00E-013.39E+023.67E+041.68E+061.38E-017.21E+022.75E+052.50E+07 + 82M3 42.005.54E-023.72E+012.45E+037.89E+043.61E-028.00E+011.50E+048.24E+05 + 82M3 54.002.60E-021.06E+015.32E+021.40E+041.69E-022.30E+012.95E+031.24E+05 + 82M3 72.001.07E-022.54E+009.38E+011.94E+037.14E-035.52E+004.71E+021.48E+04 + 82M3 105.003.26E-033.95E-019.83E+001.49E+022.31E-038.56E-014.47E+019.75E+02 + 82M3 150.001.05E-036.92E-021.20E+001.34E+018.04E-041.49E-015.11E+008.11E+01 + 82M3 280.001.47E-043.51E-033.27E-022.20E-011.29E-047.20E-031.33E-011.29E+00 + 82M3 500.002.59E-052.55E-041.37E-036.03E-032.49E-054.68E-045.38E-033.55E-02 + 82M4 3.594.40E+011.38E+055.67E+095.65E+131.33E+012.99E+051.85E+091.05E+12 + 82M4 4.592.09E+013.96E+041.01E+096.58E+126.04E+008.71E+043.51E+081.65E+11 + 82M4 6.596.60E+006.31E+037.94E+072.84E+111.86E+001.42E+043.11E+071.08E+10 + 82M4 10.591.32E+005.71E+022.83E+064.81E+093.89E-011.31E+031.35E+063.13E+08 + 82M4 17.592.13E-014.38E+017.98E+046.51E+077.04E-021.02E+024.97E+047.33E+06 + 82M4 27.004.24E-025.00E+003.94E+031.81E+061.61E-021.17E+013.20E+033.20E+05 + 82M4 42.007.56E-035.30E-011.80E+024.73E+043.43E-031.27E+001.98E+021.32E+04 + 82M4 54.002.77E-031.48E-013.15E+016.11E+031.40E-033.60E-014.16E+012.21E+03 + 82M4 72.008.65E-043.43E-024.33E+006.01E+024.99E-048.52E-027.07E+002.89E+02 + 82M4 105.001.85E-045.08E-033.32E-013.00E+011.26E-041.29E-027.13E-012.08E+01 + 82M4 150.004.27E-058.51E-043.07E-021.86E+003.39E-052.20E-038.43E-021.81E+00 + 82M4 280.003.44E-064.01E-055.58E-041.70E-023.32E-061.02E-042.19E-032.82E-02 + 82M4 500.003.50E-072.64E-061.78E-052.79E-043.77E-076.23E-068.28E-057.04E-04 + 82M5 3.486.72E+011.47E+051.16E+109.78E+137.79E+002.05E+041.03E+103.83E+14 + 82M5 4.483.10E+014.03E+041.98E+091.07E+133.46E+005.82E+031.76E+094.01E+13 + 82M5 6.489.40E+006.11E+031.48E+084.28E+111.05E+009.24E+021.33E+081.50E+12 + 82M5 10.481.80E+005.26E+025.01E+066.73E+092.17E-018.42E+014.63E+062.11E+10 + 82M5 17.482.79E-013.87E+011.35E+058.52E+073.94E-026.61E+001.30E+052.34E+08 + 82M5 27.005.29E-024.17E+006.28E+032.17E+069.02E-037.69E-016.24E+035.30E+06 + 82M5 42.009.16E-034.26E-012.77E+025.38E+041.96E-038.76E-022.86E+021.19E+05 + 82M5 54.003.30E-031.15E-014.70E+016.67E+038.17E-042.57E-024.97E+011.41E+04 + 82M5 72.001.01E-032.58E-026.21E+006.21E+022.96E-046.39E-036.72E+001.26E+03 + 82M5 105.002.13E-043.61E-034.41E-012.83E+017.74E-051.05E-034.91E-015.56E+01 + 82M5 150.004.89E-055.69E-043.69E-021.57E+002.16E-051.98E-044.19E-023.08E+00 + 82M5 280.003.91E-062.46E-055.23E-041.09E-022.36E-061.17E-055.95E-042.24E-02 + 82M5 500.004.61E-071.63E-061.24E-051.29E-043.25E-071.00E-061.32E-052.77E-04 + 82N+ 50.003.41E-021.02E+016.66E+022.81E+048.10E-014.11E+012.38E+031.07E+05 + 82N+ 70.001.36E-022.00E+008.91E+012.53E+033.00E-018.98E+003.03E+028.82E+03 + 82N+ 100.005.27E-033.74E-011.13E+012.20E+021.07E-011.92E+003.81E+017.12E+02 + 82N+ 150.001.79E-035.82E-021.15E+001.51E+013.35E-023.55E-014.06E+004.71E+01 + 82N+ 200.008.40E-041.64E-022.40E-012.42E+001.47E-021.13E-019.11E-017.66E+00 + 82N+ 500.009.49E-055.27E-042.95E-031.38E-021.19E-034.28E-031.44E-025.06E-02 + 83K 91.534.42E-014.15E-018.75E-024.35E-031.12E+017.51E+019.62E+012.71E+01 + 83K 92.234.33E-014.24E-011.09E-011.04E-021.10E+017.31E+019.72E+013.35E+01 + 83K 93.534.19E-014.38E-011.51E-012.75E-021.05E+016.96E+019.88E+014.52E+01 + 83K 96.733.86E-014.64E-012.51E-011.01E-019.56E+006.19E+011.00E+027.16E+01 + 83K 100.533.52E-014.79E-013.63E-012.34E-018.55E+005.41E+019.84E+019.73E+01 + 83K 105.003.16E-014.84E-014.74E-014.29E-017.54E+004.65E+019.39E+011.19E+02 + 83K 111.002.76E-014.74E-015.87E-017.06E-016.43E+003.83E+018.58E+011.35E+02 + 83K 119.002.33E-014.47E-016.78E-011.03E+005.27E+003.01E+017.40E+011.41E+02 + 83K 131.001.84E-013.93E-017.22E-011.37E+004.00E+002.15E+015.78E+011.30E+02 + 83K 144.001.46E-013.36E-016.99E-011.52E+003.06E+001.55E+014.39E+011.09E+02 + 83K 161.001.11E-012.71E-016.23E-011.50E+002.23E+001.06E+013.09E+018.26E+01 + 83K 174.009.16E-022.30E-015.57E-011.41E+001.79E+008.12E+002.39E+016.58E+01 + 83K 191.007.30E-021.88E-014.74E-011.25E+001.38E+005.92E+001.75E+014.88E+01 + 83K 214.005.54E-021.45E-013.79E-011.03E+001.00E+004.04E+001.18E+013.31E+01 + 83K 240.004.21E-021.12E-012.97E-018.18E-017.29E-012.76E+007.88E+002.19E+01 + 83K 305.002.41E-026.41E-021.72E-014.68E-013.77E-011.26E+003.38E+008.92E+00 + 83K 390.001.39E-023.68E-029.67E-022.51E-011.94E-015.83E-011.44E+003.50E+00 + 83K 480.008.92E-032.35E-025.97E-021.47E-011.12E-013.09E-017.10E-011.61E+00 + 83K 590.005.86E-031.54E-023.74E-028.67E-026.48E-021.68E-013.60E-017.56E-01 + 83K 820.003.12E-038.11E-031.83E-023.84E-022.76E-026.63E-021.29E-012.41E-01 + 83K 1100.001.84E-034.69E-039.97E-031.92E-021.30E-023.01E-025.41E-029.27E-02 + 83K 1350.001.29E-033.23E-036.61E-031.21E-027.73E-031.76E-023.04E-024.96E-02 + 83K 1600.009.67E-042.38E-034.72E-038.31E-035.02E-031.15E-021.92E-023.02E-02 + 83L1 17.391.32E+002.87E+026.43E+031.54E+042.37E+024.09E+041.40E+061.10E+07 + 83L1 18.091.24E+002.38E+026.22E+032.70E+042.11E+023.40E+041.14E+061.02E+07 + 83L1 19.391.11E+001.71E+025.46E+034.13E+041.72E+022.45E+047.83E+058.32E+06 + 83L1 22.598.56E-018.13E+013.44E+034.63E+041.09E+021.20E+043.45E+054.51E+06 + 83L1 26.396.49E-013.75E+011.88E+033.31E+046.87E+015.86E+031.50E+052.14E+06 + 83L1 30.005.12E-011.95E+011.07E+032.13E+044.69E+013.26E+037.56E+041.10E+06 + 83L1 36.003.59E-017.67E+004.57E+029.91E+032.74E+011.43E+032.87E+044.10E+05 + 83L1 44.002.39E-012.77E+001.69E+023.77E+031.51E+015.83E+029.96E+031.33E+05 + 83L1 56.001.44E-018.82E-014.92E+011.07E+037.44E+002.03E+022.84E+033.39E+04 + 83L1 69.009.10E-023.80E-011.67E+013.42E+024.04E+008.27E+019.78E+021.03E+04 + 83L1 86.005.55E-021.86E-015.50E+001.01E+022.13E+003.28E+013.24E+022.96E+03 + 83L1 99.004.02E-021.27E-012.78E+004.62E+011.41E+001.84E+011.62E+021.34E+03 + 83L1 116.002.79E-028.61E-021.34E+001.95E+018.94E-019.68E+007.49E+015.56E+02 + 83L1 139.001.83E-025.65E-026.20E-017.51E+005.32E-014.73E+003.17E+012.07E+02 + 83L1 165.001.23E-023.81E-023.17E-013.16E+003.27E-012.44E+001.43E+018.24E+01 + 83L1 230.005.74E-031.79E-021.00E-016.77E-011.28E-017.06E-013.23E+001.47E+01 + 83L1 315.002.84E-038.78E-033.82E-021.86E-015.38E-022.32E-018.51E-013.13E+00 + 83L1 410.001.62E-034.92E-031.81E-027.00E-022.63E-029.54E-022.96E-019.19E-01 + 83L1 520.009.98E-042.97E-039.64E-033.13E-021.39E-024.44E-021.20E-013.24E-01 + 83L1 750.004.94E-041.42E-033.89E-031.01E-025.33E-031.46E-023.31E-027.34E-02 + 83L11000.002.95E-048.19E-042.01E-034.55E-032.53E-036.42E-031.30E-022.54E-02 + 83L11500.001.47E-043.87E-048.40E-041.63E-038.99E-042.15E-033.88E-036.60E-03 + 83L2 16.712.92E+001.35E+041.76E+062.77E+072.81E+011.67E+031.85E+043.95E+04 + 83L2 17.412.63E+001.11E+041.40E+062.51E+072.49E+011.44E+031.82E+046.95E+04 + 83L2 18.712.17E+007.75E+039.28E+051.97E+072.00E+011.10E+031.64E+041.08E+05 + 83L2 21.911.42E+003.57E+033.79E+059.85E+061.25E+016.05E+021.11E+041.24E+05 + 83L2 25.719.13E-011.63E+031.53E+054.30E+067.76E+003.31E+026.58E+039.32E+04 + 83L2 30.005.92E-017.71E+026.35E+041.82E+064.90E+001.85E+023.74E+035.84E+04 + 83L2 36.003.52E-013.19E+022.25E+046.26E+052.85E+009.26E+011.83E+032.94E+04 + 83L2 44.001.96E-011.22E+027.22E+031.87E+051.58E+004.33E+017.99E+021.25E+04 + 83L2 56.009.62E-023.86E+011.85E+034.26E+047.76E-011.75E+012.87E+024.13E+03 + 83L2 69.005.15E-021.44E+015.77E+021.17E+044.22E-017.98E+001.16E+021.51E+03 + 83L2 86.002.65E-025.18E+001.70E+022.99E+032.22E-013.52E+004.45E+015.09E+02 + 83L2 99.001.73E-022.71E+007.86E+011.25E+031.48E-012.09E+002.41E+012.52E+02 + 83L2 116.001.07E-021.32E+003.32E+014.73E+029.39E-021.17E+001.21E+011.14E+02 + 83L2 139.006.19E-035.85E-011.26E+011.57E+025.60E-026.03E-015.50E+004.60E+01 + 83L2 165.003.69E-032.74E-015.08E+005.59E+013.43E-023.25E-012.63E+001.95E+01 + 83L2 230.001.37E-036.51E-029.13E-017.89E+001.34E-029.97E-026.40E-013.79E+00 + 83L2 315.005.49E-041.75E-021.91E-011.32E+005.57E-033.34E-021.74E-018.34E-01 + 83L2 410.002.60E-046.09E-035.43E-023.14E-012.68E-031.37E-026.01E-022.44E-01 + 83L2 520.001.35E-042.43E-031.83E-029.08E-021.39E-036.22E-032.37E-028.35E-02 + 83L2 750.005.14E-056.33E-043.74E-031.50E-025.06E-041.91E-036.00E-031.73E-02 + 83L21000.002.48E-052.34E-041.17E-034.03E-032.30E-047.81E-042.15E-035.41E-03 + 83L21500.009.22E-066.34E-052.56E-047.39E-047.51E-052.30E-045.44E-041.17E-03 + 83L3 14.426.68E+003.31E+045.38E+061.06E+083.99E+006.58E+046.60E+077.43E+09 + 83L3 15.125.84E+002.61E+044.05E+069.01E+073.45E+005.20E+044.80E+075.17E+09 + 83L3 16.424.60E+001.72E+042.47E+066.37E+072.68E+003.44E+042.75E+072.76E+09 + 83L3 19.622.74E+007.00E+038.51E+052.57E+071.55E+001.42E+048.30E+067.11E+08 + 83L3 23.421.62E+002.87E+032.94E+059.32E+069.04E-015.86E+032.54E+061.86E+08 + 83L3 30.007.65E-018.24E+026.67E+042.05E+064.24E-011.71E+034.93E+052.89E+07 + 83L3 36.004.35E-013.30E+022.23E+046.42E+052.43E-016.89E+021.49E+057.43E+06 + 83L3 44.002.32E-011.21E+026.72E+031.75E+051.32E-012.54E+024.04E+041.69E+06 + 83L3 56.001.08E-013.61E+011.59E+033.58E+046.33E-027.68E+018.58E+032.89E+05 + 83L3 69.005.51E-021.27E+014.57E+028.94E+033.37E-022.73E+012.28E+036.42E+04 + 83L3 86.002.70E-024.27E+001.23E+022.06E+031.73E-029.18E+005.75E+021.34E+04 + 83L3 99.001.71E-022.13E+005.35E+018.02E+021.13E-024.58E+002.41E+024.98E+03 + 83L3 116.001.02E-029.76E-012.10E+012.78E+027.06E-032.10E+009.14E+011.66E+03 + 83L3 139.005.66E-034.02E-017.24E+008.33E+014.11E-038.64E-013.06E+014.79E+02 + 83L3 165.003.24E-031.75E-012.66E+002.67E+012.47E-033.74E-011.10E+011.50E+02 + 83L3 230.001.12E-033.55E-023.90E-013.01E+009.27E-047.44E-021.58E+001.68E+01 + 83L3 315.004.18E-048.11E-036.59E-023.98E-013.71E-041.64E-022.65E-012.26E+00 + 83L3 410.001.88E-042.44E-031.55E-027.70E-021.74E-044.72E-036.16E-024.45E-01 + 83L3 520.009.38E-058.55E-044.39E-031.85E-028.92E-051.56E-031.70E-021.07E-01 + 83L3 750.003.36E-051.86E-046.99E-042.34E-033.28E-053.01E-042.49E-031.29E-02 + 83L31000.001.58E-056.11E-051.85E-045.25E-041.56E-058.84E-055.79E-042.63E-03 + 83L31500.006.02E-061.50E-053.42E-057.82E-055.92E-061.85E-058.12E-053.07E-04 + 83M1 5.002.29E+001.37E+048.99E+052.46E+072.29E+034.71E+061.91E+091.75E+11 + 83M1 6.001.89E+006.39E+034.39E+051.39E+071.33E+031.92E+065.85E+085.03E+10 + 83M1 8.001.29E+001.88E+031.42E+054.37E+065.61E+024.72E+059.27E+076.84E+09 + 83M1 12.006.84E-013.24E+022.67E+048.92E+051.67E+026.62E+047.30E+064.10E+08 + 83M1 19.003.01E-014.07E+013.40E+031.19E+054.25E+017.39E+034.46E+051.75E+07 + 83M1 28.001.41E-016.60E+005.27E+021.74E+041.34E+011.21E+034.55E+041.30E+06 + 83M1 43.005.80E-028.71E-016.11E+011.75E+033.77E+001.71E+023.98E+037.86E+04 + 83M1 55.003.40E-022.90E-011.73E+014.42E+021.82E+005.73E+011.03E+031.64E+04 + 83M1 73.001.81E-029.54E-024.05E+008.88E+017.96E-011.68E+012.26E+022.83E+03 + 83M1 106.007.70E-032.95E-026.46E-011.08E+012.69E-013.52E+003.32E+013.02E+02 + 83M1 155.003.19E-031.10E-021.21E-011.40E+009.06E-027.70E-015.17E+003.44E+01 + 83M1 285.007.96E-042.60E-031.35E-027.86E-021.64E-027.95E-023.29E-011.36E+00 + 83M1 500.002.44E-047.50E-042.61E-039.16E-033.59E-031.20E-023.42E-029.72E-02 + 83M2 4.705.11E+001.81E+062.18E+093.23E+113.13E+021.72E+051.78E+073.82E+08 + 83M2 5.703.97E+006.92E+056.23E+088.56E+101.76E+027.18E+046.89E+062.40E+08 + 83M2 7.702.43E+001.55E+059.01E+071.06E+107.13E+011.87E+041.54E+066.79E+07 + 83M2 11.701.07E+001.96E+046.43E+065.82E+082.04E+013.02E+031.92E+058.41E+06 + 83M2 18.703.68E-011.95E+033.57E+052.32E+075.04E+004.16E+021.90E+046.90E+05 + 83M2 28.001.34E-012.72E+023.13E+041.50E+061.52E+007.93E+012.68E+037.69E+04 + 83M2 43.004.27E-023.45E+012.49E+038.52E+044.30E-011.43E+013.47E+027.43E+03 + 83M2 55.002.15E-021.07E+016.00E+021.68E+042.09E-015.44E+001.09E+021.96E+03 + 83M2 73.009.61E-032.84E+001.20E+022.67E+039.18E-021.83E+002.93E+014.25E+02 + 83M2 106.003.25E-035.11E-011.50E+012.47E+023.13E-024.46E-015.33E+005.83E+01 + 83M2 155.001.06E-039.31E-021.92E+002.33E+011.06E-021.10E-019.77E-018.03E+00 + 83M2 285.001.82E-046.87E-038.34E-026.37E-011.91E-031.25E-027.14E-023.78E-01 + 83M2 500.003.80E-057.34E-045.77E-033.00E-024.01E-041.86E-037.39E-032.71E-02 + 83M3 4.181.57E+014.32E+065.91E+099.45E+114.20E+018.92E+061.05E+111.38E+14 + 83M3 5.181.07E+011.47E+061.44E+092.06E+112.20E+013.05E+062.38E+102.19E+13 + 83M3 7.185.60E+002.85E+051.71E+082.01E+108.16E+005.97E+052.50E+091.37E+12 + 83M3 11.182.06E+003.08E+049.91E+068.67E+082.13E+006.54E+041.20E+083.42E+10 + 83M3 18.186.05E-012.67E+034.61E+052.83E+074.86E-015.77E+034.40E+066.53E+08 + 83M3 28.001.85E-013.06E+023.15E+041.39E+061.31E-016.71E+022.44E+052.12E+07 + 83M3 43.005.34E-023.58E+012.27E+037.13E+043.58E-027.93E+011.45E+047.75E+05 + 83M3 55.002.55E-021.05E+015.10E+021.31E+041.71E-022.34E+012.94E+031.21E+05 + 83M3 73.001.06E-022.57E+009.26E+011.88E+037.30E-035.74E+004.84E+021.49E+04 + 83M3 106.003.30E-034.08E-019.98E+001.48E+022.40E-039.10E-014.72E+011.02E+03 + 83M3 155.009.91E-046.38E-021.06E+001.15E+017.77E-041.41E-014.69E+007.23E+01 + 83M3 285.001.47E-043.49E-033.18E-022.10E-011.31E-047.35E-031.34E-011.28E+00 + 83M3 500.002.75E-052.75E-041.48E-036.46E-032.64E-055.17E-045.97E-033.93E-02 + 83M4 3.694.17E+011.30E+055.12E+094.97E+131.30E+012.92E+051.73E+099.53E+11 + 83M4 4.692.02E+013.84E+049.52E+086.10E+126.03E+008.76E+043.43E+081.57E+11 + 83M4 6.696.53E+006.33E+037.85E+072.79E+111.90E+001.47E+043.17E+071.08E+10 + 83M4 10.691.34E+005.90E+022.91E+064.96E+094.05E-011.40E+031.43E+063.26E+08 + 83M4 17.692.21E-014.63E+018.44E+046.93E+077.45E-021.11E+025.39E+047.87E+06 + 83M4 28.003.92E-024.53E+003.37E+031.49E+061.54E-021.10E+012.86E+032.75E+05 + 83M4 43.007.35E-035.14E-011.69E+024.35E+043.43E-031.27E+001.93E+021.25E+04 + 83M4 55.002.76E-031.47E-013.06E+015.87E+031.43E-033.70E-014.17E+012.17E+03 + 83M4 73.008.79E-043.50E-024.35E+005.99E+025.17E-048.95E-027.30E+002.94E+02 + 83M4 106.001.92E-045.33E-033.44E-013.10E+011.33E-041.39E-027.57E-012.18E+01 + 83M4 155.004.08E-057.96E-042.73E-021.61E+003.28E-052.11E-037.80E-021.62E+00 + 83M4 285.003.49E-064.06E-055.53E-041.67E-023.40E-061.06E-042.23E-032.83E-02 + 83M4 500.003.83E-072.92E-061.97E-053.12E-044.14E-077.02E-069.34E-057.93E-04 + 83M5 3.586.38E+011.36E+051.06E+108.64E+137.61E+001.95E+049.68E+093.48E+14 + 83M5 4.583.00E+013.85E+041.88E+099.95E+123.45E+005.71E+031.73E+093.85E+13 + 83M5 6.589.31E+006.03E+031.48E+084.22E+111.07E+009.36E+021.37E+081.52E+12 + 83M5 10.581.83E+005.35E+025.20E+066.95E+092.25E-018.77E+014.95E+062.25E+10 + 83M5 17.582.88E-014.01E+011.44E+059.06E+074.14E-027.01E+001.42E+052.58E+08 + 83M5 28.004.85E-023.69E+005.39E+031.78E+068.54E-037.00E-015.51E+034.47E+06 + 83M5 43.008.86E-034.03E-012.60E+024.91E+041.95E-038.50E-022.77E+021.12E+05 + 83M5 55.003.27E-031.12E-014.59E+016.37E+038.24E-042.56E-024.98E+011.39E+04 + 83M5 73.001.02E-032.58E-026.25E+006.16E+023.04E-046.50E-036.95E+001.29E+03 + 83M5 106.002.19E-043.70E-034.58E-012.91E+018.08E-051.10E-035.23E-015.89E+01 + 83M5 155.004.58E-055.19E-043.26E-021.34E+002.08E-051.85E-043.80E-022.71E+00 + 83M5 285.004.04E-062.45E-055.15E-041.06E-022.40E-061.18E-055.98E-042.23E-02 + 83M5 500.004.86E-071.77E-061.37E-051.43E-043.51E-071.09E-061.48E-053.14E-04 + 83N+ 50.003.57E-021.15E+017.43E+023.15E+049.15E-014.69E+012.75E+031.25E+05 + 83N+ 70.001.43E-022.25E+009.95E+012.82E+033.39E-011.02E+013.50E+021.02E+04 + 83N+ 100.005.56E-034.20E-011.26E+012.45E+021.21E-012.19E+004.37E+018.20E+02 + 83N+ 150.001.89E-036.53E-021.29E+001.68E+013.77E-024.04E-014.64E+005.39E+01 + 83N+ 200.008.93E-041.84E-022.69E-012.71E+001.66E-021.28E-011.04E+008.73E+00 + 83N+ 500.001.02E-045.85E-043.32E-031.56E-021.34E-034.85E-031.63E-025.70E-02 + 84K 94.104.18E-013.78E-017.84E-023.82E-031.13E+017.25E+018.97E+012.45E+01 + 84K 94.804.10E-013.85E-019.74E-029.04E-031.10E+017.06E+019.06E+013.02E+01 + 84K 96.103.97E-013.99E-011.33E-012.37E-021.06E+016.73E+019.21E+014.05E+01 + 84K 99.303.67E-014.22E-012.22E-018.61E-029.66E+006.01E+019.34E+016.39E+01 + 84K 103.103.35E-014.37E-013.20E-012.00E-018.66E+005.27E+019.21E+018.70E+01 + 84K 107.003.06E-014.42E-014.08E-013.45E-017.78E+004.63E+018.88E+011.05E+02 + 84K 113.002.68E-014.37E-015.14E-015.87E-016.66E+003.84E+018.18E+011.21E+02 + 84K 121.002.27E-014.15E-016.03E-018.86E-015.47E+003.03E+017.12E+011.28E+02 + 84K 133.001.80E-013.69E-016.55E-011.20E+004.18E+002.18E+015.63E+011.21E+02 + 84K 146.001.43E-013.18E-016.44E-011.36E+003.20E+001.58E+014.31E+011.03E+02 + 84K 163.001.10E-012.59E-015.83E-011.38E+002.34E+001.08E+013.07E+017.91E+01 + 84K 176.009.09E-022.22E-015.26E-011.31E+001.89E+008.35E+002.39E+016.36E+01 + 84K 193.007.27E-021.82E-014.53E-011.18E+001.46E+006.11E+001.76E+014.77E+01 + 84K 216.005.55E-021.42E-013.67E-019.85E-011.06E+004.19E+001.19E+013.26E+01 + 84K 245.004.11E-021.07E-012.83E-017.71E-017.50E-012.76E+007.69E+002.09E+01 + 84K 310.002.39E-026.28E-021.67E-014.52E-013.93E-011.29E+003.38E+008.71E+00 + 84K 395.001.39E-023.67E-029.61E-022.48E-012.04E-016.01E-011.46E+003.49E+00 + 84K 480.009.22E-032.43E-026.16E-021.51E-011.21E-013.32E-017.54E-011.69E+00 + 84K 590.006.07E-031.60E-023.89E-028.99E-027.04E-021.81E-013.83E-017.98E-01 + 84K 820.003.24E-038.46E-031.92E-024.01E-022.99E-027.13E-021.37E-012.55E-01 + 84K 1100.001.91E-034.91E-031.05E-022.02E-021.41E-023.23E-025.78E-029.85E-02 + 84K 1350.001.34E-033.39E-036.95E-031.27E-028.34E-031.90E-023.25E-025.28E-02 + 84K 1600.001.01E-032.50E-034.97E-038.76E-035.41E-031.23E-022.06E-023.22E-02 + 84L1 17.941.23E+002.70E+025.79E+031.32E+042.38E+023.90E+041.29E+069.68E+06 + 84L1 18.641.16E+002.26E+025.62E+032.31E+042.13E+023.26E+041.05E+069.01E+06 + 84L1 19.941.04E+001.64E+024.97E+033.56E+041.74E+022.38E+047.31E+057.44E+06 + 84L1 23.148.14E-018.01E+013.20E+034.08E+041.12E+021.19E+043.29E+054.14E+06 + 84L1 26.946.22E-013.78E+011.79E+033.00E+047.12E+015.89E+031.46E+052.01E+06 + 84L1 30.005.10E-012.20E+011.13E+032.11E+045.17E+013.60E+038.22E+041.16E+06 + 84L1 36.003.60E-018.76E+004.89E+021.01E+043.01E+011.57E+033.12E+044.35E+05 + 84L1 44.002.40E-013.19E+001.84E+023.93E+031.67E+016.42E+021.09E+041.42E+05 + 84L1 56.001.45E-011.01E+005.42E+011.14E+038.20E+002.23E+023.10E+033.64E+04 + 84L1 69.009.22E-024.28E-011.86E+013.68E+024.45E+009.10E+011.07E+031.11E+04 + 84L1 86.005.64E-022.03E-016.16E+001.10E+022.34E+003.60E+013.53E+023.19E+03 + 84L1 99.004.10E-021.36E-013.12E+005.07E+011.56E+002.02E+011.76E+021.45E+03 + 84L1 116.002.85E-029.07E-021.50E+002.15E+019.85E-011.06E+018.16E+016.01E+02 + 84L1 139.001.88E-025.89E-026.89E-018.30E+005.86E-015.19E+003.45E+012.24E+02 + 84L1 165.001.26E-023.97E-023.50E-013.49E+003.60E-012.67E+001.55E+018.91E+01 + 84L1 230.005.91E-031.86E-021.09E-017.43E-011.41E-017.73E-013.51E+001.59E+01 + 84L1 315.002.94E-039.17E-034.10E-022.02E-015.92E-022.53E-019.25E-013.38E+00 + 84L1 410.001.68E-035.16E-031.94E-027.58E-022.89E-021.04E-013.22E-019.94E-01 + 84L1 520.001.04E-033.13E-031.03E-023.37E-021.53E-024.85E-021.31E-013.51E-01 + 84L1 750.005.16E-041.50E-034.16E-031.09E-025.84E-031.59E-023.59E-027.95E-02 + 84L11000.003.08E-048.68E-042.15E-034.88E-032.77E-036.99E-031.41E-022.75E-02 + 84L11500.001.54E-044.10E-048.97E-041.75E-039.79E-042.34E-034.21E-037.14E-03 + 84L2 17.242.75E+001.26E+041.57E+062.38E+072.84E+011.60E+031.70E+043.47E+04 + 84L2 17.942.48E+001.04E+041.25E+062.16E+072.52E+011.38E+031.67E+046.07E+04 + 84L2 19.242.07E+007.34E+038.44E+051.72E+072.05E+011.06E+031.52E+049.44E+04 + 84L2 22.441.37E+003.45E+033.54E+058.81E+061.29E+015.97E+021.04E+041.12E+05 + 84L2 26.248.91E-011.61E+031.46E+053.95E+068.11E+003.31E+026.32E+038.56E+04 + 84L2 30.006.13E-018.38E+026.81E+041.89E+065.45E+002.00E+023.90E+035.81E+04 + 84L2 36.003.65E-013.47E+022.42E+046.56E+053.17E+001.00E+021.92E+033.00E+04 + 84L2 44.002.04E-011.32E+027.77E+031.97E+051.75E+004.71E+018.48E+021.30E+04 + 84L2 56.001.01E-014.20E+012.00E+034.52E+048.64E-011.90E+013.06E+024.32E+03 + 84L2 69.005.40E-021.57E+016.23E+021.25E+044.70E-018.71E+001.25E+021.59E+03 + 84L2 86.002.79E-025.65E+001.84E+023.20E+032.48E-013.84E+004.80E+015.41E+02 + 84L2 99.001.83E-022.96E+008.53E+011.34E+031.65E-012.28E+002.60E+012.69E+02 + 84L2 116.001.13E-021.44E+003.61E+015.09E+021.05E-011.28E+001.30E+011.22E+02 + 84L2 139.006.56E-036.40E-011.37E+011.69E+026.25E-026.62E-015.96E+004.94E+01 + 84L2 165.003.92E-033.00E-015.53E+006.04E+013.84E-023.57E-012.85E+002.10E+01 + 84L2 230.001.47E-037.14E-029.97E-018.56E+001.50E-021.10E-016.98E-014.10E+00 + 84L2 315.005.89E-041.93E-022.09E-011.44E+006.25E-033.69E-021.90E-019.07E-01 + 84L2 410.002.80E-046.70E-035.96E-023.43E-013.00E-031.51E-026.60E-022.66E-01 + 84L2 520.001.46E-042.68E-032.01E-029.95E-021.56E-036.90E-032.61E-029.15E-02 + 84L2 750.005.57E-056.99E-044.13E-031.65E-025.69E-042.13E-036.63E-031.91E-02 + 84L21000.002.70E-052.59E-041.29E-034.45E-032.58E-048.71E-042.38E-035.98E-03 + 84L21500.001.00E-057.02E-052.84E-048.18E-048.46E-052.57E-046.06E-041.30E-03 + 84L3 14.816.32E+003.10E+044.85E+069.28E+073.89E+006.37E+046.17E+076.72E+09 + 84L3 15.515.55E+002.46E+043.68E+067.92E+073.38E+005.07E+044.52E+074.73E+09 + 84L3 16.814.40E+001.64E+042.28E+065.65E+072.64E+003.39E+042.62E+072.56E+09 + 84L3 20.012.65E+006.80E+038.02E+052.34E+071.55E+001.42E+048.13E+066.80E+08 + 84L3 23.811.58E+002.83E+032.83E+058.67E+069.09E-015.98E+032.55E+061.83E+08 + 84L3 30.007.88E-018.86E+027.08E+042.12E+064.49E-011.89E+035.51E+053.21E+07 + 84L3 36.004.49E-013.54E+022.38E+046.69E+052.57E-017.64E+021.66E+058.25E+06 + 84L3 44.002.40E-011.30E+027.14E+031.83E+051.40E-012.82E+024.51E+041.87E+06 + 84L3 56.001.12E-013.88E+011.69E+033.75E+046.71E-028.51E+019.56E+033.21E+05 + 84L3 69.005.71E-021.37E+014.86E+029.40E+033.57E-023.02E+012.54E+037.11E+04 + 84L3 86.002.80E-024.59E+001.31E+022.17E+031.83E-021.02E+016.39E+021.48E+04 + 84L3 99.001.78E-022.29E+005.70E+018.46E+021.20E-025.08E+002.68E+025.50E+03 + 84L3 116.001.06E-021.05E+002.24E+012.94E+027.48E-032.33E+001.01E+021.83E+03 + 84L3 139.005.90E-034.33E-017.72E+008.80E+014.36E-039.57E-013.39E+015.29E+02 + 84L3 165.003.39E-031.88E-012.83E+002.82E+012.62E-034.13E-011.22E+011.66E+02 + 84L3 230.001.17E-033.81E-024.16E-013.19E+009.82E-048.22E-021.75E+001.85E+01 + 84L3 315.004.38E-048.70E-037.04E-024.23E-013.93E-041.81E-022.93E-012.49E+00 + 84L3 410.001.98E-042.61E-031.66E-028.19E-021.84E-045.19E-036.80E-024.89E-01 + 84L3 520.009.86E-059.16E-044.69E-031.97E-029.43E-051.72E-031.88E-021.18E-01 + 84L3 750.003.53E-051.98E-047.47E-042.50E-033.47E-053.29E-042.74E-031.42E-02 + 84L31000.001.67E-056.51E-051.97E-045.61E-041.64E-059.62E-056.36E-042.89E-03 + 84L31500.006.36E-061.59E-053.64E-058.36E-056.23E-062.00E-058.88E-053.37E-04 + 84M1 5.152.16E+001.33E+048.68E+052.18E+072.32E+034.54E+061.78E+091.58E+11 + 84M1 6.151.79E+006.31E+034.31E+051.30E+071.36E+031.90E+065.62E+084.68E+10 + 84M1 8.151.24E+001.91E+031.42E+054.27E+065.87E+024.81E+059.26E+076.66E+09 + 84M1 12.156.66E-013.39E+022.71E+048.89E+051.78E+026.95E+047.57E+064.17E+08 + 84M1 19.152.96E-014.40E+013.54E+031.21E+054.58E+017.93E+034.74E+051.84E+07 + 84M1 28.001.42E-017.50E+005.75E+021.86E+041.48E+011.34E+035.05E+041.43E+06 + 84M1 43.005.86E-021.00E+006.76E+011.89E+034.16E+001.89E+024.41E+038.66E+04 + 84M1 55.003.45E-023.34E-011.93E+014.82E+022.02E+006.34E+011.14E+031.81E+04 + 84M1 73.001.84E-021.07E-014.55E+009.78E+018.80E-011.86E+012.50E+023.11E+03 + 84M1 106.007.87E-033.19E-027.30E-011.20E+012.98E-013.88E+003.65E+013.31E+02 + 84M1 155.003.28E-031.16E-021.35E-011.56E+001.00E-018.48E-015.68E+003.76E+01 + 84M1 285.008.25E-042.73E-031.47E-028.68E-021.81E-028.73E-023.60E-011.49E+00 + 84M1 500.002.54E-047.93E-042.81E-039.96E-033.95E-031.31E-023.73E-021.06E-01 + 84M2 4.854.76E+001.67E+061.93E+092.74E+113.16E+021.64E+051.63E+073.32E+08 + 84M2 5.853.74E+006.59E+055.72E+087.58E+101.80E+027.03E+046.49E+062.15E+08 + 84M2 7.852.33E+001.53E+058.66E+079.91E+097.47E+011.89E+041.51E+066.38E+07 + 84M2 11.851.05E+002.00E+046.46E+065.72E+082.18E+013.14E+031.94E+058.27E+06 + 84M2 18.853.69E-012.04E+033.69E+052.36E+075.48E+004.42E+021.98E+047.03E+05 + 84M2 28.001.38E-012.97E+023.41E+041.62E+061.70E+008.72E+012.91E+038.23E+04 + 84M2 43.004.44E-023.77E+012.72E+039.21E+044.80E-011.57E+013.77E+027.99E+03 + 84M2 55.002.25E-021.17E+016.54E+021.82E+042.34E-015.99E+001.19E+022.11E+03 + 84M2 73.001.01E-023.11E+001.31E+022.89E+031.03E-012.01E+003.19E+014.59E+02 + 84M2 106.003.43E-035.60E-011.63E+012.68E+023.51E-024.92E-015.82E+006.32E+01 + 84M2 155.001.13E-031.02E-012.10E+002.54E+011.19E-021.21E-011.07E+008.73E+00 + 84M2 285.001.95E-047.57E-039.17E-026.97E-012.15E-031.39E-027.86E-024.13E-01 + 84M2 500.004.11E-058.11E-046.38E-033.30E-024.52E-042.08E-038.17E-032.98E-02 + 84M3 4.301.48E+014.02E+065.27E+098.12E+114.09E+018.58E+069.73E+101.23E+14 + 84M3 5.301.03E+011.41E+061.33E+091.84E+112.17E+013.02E+062.29E+102.05E+13 + 84M3 7.305.43E+002.82E+051.65E+081.89E+108.23E+006.11E+052.51E+091.36E+12 + 84M3 11.302.03E+003.14E+049.95E+068.51E+082.19E+006.90E+041.25E+083.56E+10 + 84M3 18.306.07E-012.79E+034.75E+052.86E+075.06E-016.22E+034.74E+067.01E+08 + 84M3 28.001.91E-013.31E+023.38E+041.48E+061.39E-017.47E+022.74E+052.40E+07 + 84M3 43.005.52E-023.86E+012.44E+037.57E+043.81E-028.84E+011.63E+048.71E+05 + 84M3 55.002.64E-021.13E+015.47E+021.39E+041.82E-022.60E+013.30E+031.36E+05 + 84M3 73.001.11E-022.78E+009.93E+012.00E+037.76E-036.40E+005.42E+021.67E+04 + 84M3 106.003.44E-034.41E-011.07E+011.58E+022.55E-031.01E+005.27E+011.14E+03 + 84M3 155.001.04E-036.90E-021.14E+001.22E+018.26E-041.57E-015.23E+008.05E+01 + 84M3 285.001.54E-043.77E-033.42E-022.24E-011.39E-048.15E-031.49E-011.42E+00 + 84M3 500.002.92E-052.96E-041.59E-036.92E-032.81E-055.72E-046.62E-034.36E-02 + 84M4 3.803.94E+011.21E+054.58E+094.31E+131.27E+012.82E+051.61E+098.55E+11 + 84M4 4.801.95E+013.70E+048.89E+085.59E+125.99E+008.76E+043.32E+081.47E+11 + 84M4 6.806.45E+006.32E+037.70E+072.71E+111.93E+001.53E+043.21E+071.07E+10 + 84M4 10.801.36E+006.08E+022.98E+065.08E+094.21E-011.49E+031.51E+063.38E+08 + 84M4 17.802.27E-014.88E+018.90E+047.34E+077.86E-021.21E+025.83E+048.41E+06 + 84M4 28.004.16E-024.93E+003.71E+031.66E+061.66E-021.24E+013.22E+033.08E+05 + 84M4 43.007.84E-035.61E-011.86E+024.85E+043.71E-031.43E+002.16E+021.40E+04 + 84M4 55.002.95E-031.61E-013.37E+016.53E+031.55E-034.16E-014.68E+012.42E+03 + 84M4 73.009.43E-043.84E-024.80E+006.67E+025.61E-041.01E-018.20E+003.28E+02 + 84M4 106.002.07E-045.85E-033.79E-013.45E+011.45E-041.57E-028.50E-012.44E+01 + 84M4 155.004.40E-058.77E-043.01E-021.80E+003.58E-052.38E-038.77E-021.82E+00 + 84M4 285.003.75E-064.49E-056.11E-041.86E-023.72E-061.19E-042.51E-033.17E-02 + 84M4 500.004.16E-073.24E-062.17E-053.49E-044.53E-077.91E-061.05E-048.92E-04 + 84M5 3.686.04E+011.25E+059.63E+097.54E+137.40E+001.84E+049.04E+093.13E+14 + 84M5 4.682.89E+013.65E+041.78E+099.16E+123.42E+005.56E+031.68E+093.66E+13 + 84M5 6.689.19E+005.93E+031.46E+084.12E+111.08E+009.43E+021.40E+081.54E+12 + 84M5 10.681.85E+005.42E+025.38E+067.13E+092.32E-019.10E+015.27E+062.39E+10 + 84M5 17.682.96E-014.15E+011.54E+059.60E+074.34E-027.41E+001.56E+052.82E+08 + 84M5 28.005.13E-023.94E+005.97E+031.97E+069.16E-037.61E-016.28E+035.15E+06 + 84M5 43.009.42E-034.31E-012.89E+025.45E+042.09E-039.24E-023.15E+021.29E+05 + 84M5 55.003.48E-031.20E-015.09E+017.07E+038.86E-042.78E-025.67E+011.59E+04 + 84M5 73.001.09E-032.76E-026.94E+006.83E+023.27E-047.07E-037.91E+001.48E+03 + 84M5 106.002.36E-043.98E-035.08E-013.23E+018.72E-051.19E-035.95E-016.74E+01 + 84M5 155.004.95E-055.60E-043.62E-021.49E+002.25E-052.01E-044.31E-023.09E+00 + 84M5 285.004.31E-062.65E-055.70E-041.17E-022.59E-061.28E-056.76E-042.54E-02 + 84M5 500.005.06E-071.92E-061.50E-051.58E-043.80E-071.19E-061.66E-053.57E-04 + 84N+ 50.003.73E-021.27E+018.24E+023.51E+041.02E+005.27E+013.14E+031.44E+05 + 84N+ 70.001.50E-022.50E+001.10E+023.13E+033.78E-011.15E+013.97E+021.17E+04 + 84N+ 100.005.82E-034.67E-011.40E+012.71E+021.35E-012.45E+004.94E+019.33E+02 + 84N+ 150.001.99E-037.26E-021.43E+001.86E+014.21E-024.50E-015.21E+006.09E+01 + 84N+ 200.009.39E-042.04E-023.00E-013.01E+001.85E-021.43E-011.16E+009.81E+00 + 84N+ 500.001.08E-046.42E-043.69E-031.74E-021.49E-035.37E-031.81E-026.34E-02 + 85K 96.733.95E-013.44E-017.05E-023.38E-031.13E+017.00E+018.37E+012.23E+01 + 85K 97.433.88E-013.51E-018.71E-027.89E-031.11E+016.82E+018.46E+012.72E+01 + 85K 98.733.76E-013.63E-011.19E-012.05E-021.07E+016.52E+018.59E+013.63E+01 + 85K 101.933.49E-013.85E-011.96E-017.39E-029.76E+005.84E+018.73E+015.71E+01 + 85K 105.733.19E-013.99E-012.83E-011.72E-018.78E+005.14E+018.63E+017.79E+01 + 85K 110.002.90E-014.05E-013.69E-013.10E-017.83E+004.48E+018.32E+019.53E+01 + 85K 116.002.55E-014.01E-014.63E-015.23E-016.73E+003.73E+017.69E+011.10E+02 + 85K 124.002.17E-013.82E-015.45E-017.88E-015.56E+002.96E+016.73E+011.17E+02 + 85K 136.001.74E-013.43E-015.97E-011.08E+004.27E+002.16E+015.37E+011.11E+02 + 85K 149.001.39E-012.98E-015.92E-011.23E+003.29E+001.58E+014.15E+019.59E+01 + 85K 166.001.07E-012.45E-015.43E-011.26E+002.42E+001.09E+012.99E+017.46E+01 + 85K 179.008.90E-022.11E-014.94E-011.21E+001.96E+008.44E+002.34E+016.05E+01 + 85K 196.007.16E-021.75E-014.29E-011.10E+001.52E+006.21E+001.73E+014.58E+01 + 85K 219.005.49E-021.38E-013.52E-019.35E-011.11E+004.29E+001.19E+013.17E+01 + 85K 245.004.21E-021.08E-012.81E-017.60E-018.16E-012.96E+008.07E+002.14E+01 + 85K 310.002.45E-026.38E-021.69E-014.55E-014.28E-011.38E+003.56E+009.04E+00 + 85K 395.001.44E-023.77E-029.84E-022.53E-012.22E-016.46E-011.54E+003.65E+00 + 85K 490.009.14E-032.40E-026.08E-021.48E-011.25E-013.36E-017.48E-011.64E+00 + 85K 600.006.08E-031.60E-023.89E-028.94E-027.31E-021.85E-013.87E-017.92E-01 + 85K 830.003.29E-038.64E-031.95E-024.07E-023.14E-027.41E-021.41E-012.59E-01 + 85K 1100.001.98E-035.15E-031.10E-022.12E-021.52E-023.47E-026.17E-021.05E-01 + 85K 1350.001.40E-033.55E-037.32E-031.34E-029.00E-032.04E-023.48E-025.62E-02 + 85K 1600.001.05E-032.62E-035.24E-039.24E-035.82E-031.32E-022.20E-023.43E-02 + 85L1 18.491.16E+002.56E+025.25E+031.15E+042.40E+023.74E+041.18E+068.61E+06 + 85L1 19.191.10E+002.15E+025.10E+031.99E+042.15E+023.15E+049.72E+058.05E+06 + 85L1 20.499.86E-011.58E+024.55E+033.09E+041.77E+022.31E+046.85E+056.70E+06 + 85L1 23.697.75E-017.90E+012.99E+033.62E+041.15E+021.18E+043.15E+053.81E+06 + 85L1 27.495.97E-013.82E+011.71E+032.73E+047.39E+015.92E+031.43E+051.89E+06 + 85L1 31.004.79E-012.11E+011.03E+031.86E+045.17E+013.42E+037.52E+041.02E+06 + 85L1 37.003.41E-018.69E+004.58E+029.13E+033.06E+011.54E+032.94E+043.97E+05 + 85L1 45.002.31E-013.28E+001.78E+023.67E+031.72E+016.41E+021.05E+041.34E+05 + 85L1 57.001.41E-011.08E+005.44E+011.10E+038.58E+002.27E+023.08E+033.53E+04 + 85L1 70.009.04E-024.58E-011.92E+013.67E+024.70E+009.41E+011.08E+031.10E+04 + 85L1 87.005.58E-022.15E-016.51E+001.12E+022.49E+003.77E+013.63E+023.22E+03 + 85L1 100.004.07E-021.43E-013.33E+005.26E+011.66E+002.13E+011.83E+021.48E+03 + 85L1 117.002.85E-029.43E-021.61E+002.26E+011.06E+001.13E+018.52E+016.19E+02 + 85L1 140.001.89E-026.08E-027.44E-018.82E+006.32E-015.53E+003.63E+012.32E+02 + 85L1 165.001.29E-024.14E-023.86E-013.85E+003.96E-012.92E+001.69E+019.63E+01 + 85L1 230.006.08E-031.94E-021.18E-018.16E-011.55E-018.45E-013.82E+001.72E+01 + 85L1 315.003.04E-039.60E-034.41E-022.20E-016.51E-022.77E-011.00E+003.66E+00 + 85L1 410.001.74E-035.42E-032.08E-028.21E-023.18E-021.14E-013.50E-011.08E+00 + 85L1 520.001.08E-033.30E-031.10E-023.63E-021.68E-025.29E-021.42E-013.79E-01 + 85L1 750.005.38E-041.59E-034.44E-031.17E-026.39E-031.73E-023.90E-028.60E-02 + 85L11000.003.22E-049.19E-042.29E-035.23E-033.03E-037.61E-031.53E-022.98E-02 + 85L11500.001.62E-044.35E-049.58E-041.87E-031.07E-032.54E-034.56E-037.73E-03 + 85L2 17.782.60E+001.18E+041.40E+062.05E+072.88E+011.54E+031.57E+043.05E+04 + 85L2 18.482.35E+009.73E+031.13E+061.88E+072.57E+011.33E+031.54E+045.32E+04 + 85L2 19.781.97E+006.96E+037.70E+051.51E+072.09E+011.03E+031.41E+048.31E+04 + 85L2 22.981.32E+003.34E+033.30E+057.90E+061.34E+015.90E+029.86E+031.00E+05 + 85L2 26.788.69E-011.58E+031.39E+053.63E+068.49E+003.32E+026.08E+037.87E+04 + 85L2 31.005.79E-017.78E+026.07E+041.62E+065.50E+001.91E+023.60E+035.19E+04 + 85L2 37.003.50E-013.31E+022.23E+045.84E+053.25E+009.83E+011.82E+032.74E+04 + 85L2 45.001.99E-011.29E+027.38E+031.82E+051.83E+004.70E+018.19E+021.21E+04 + 85L2 57.009.98E-024.21E+011.96E+034.31E+049.14E-011.94E+013.03E+024.16E+03 + 85L2 70.005.43E-021.60E+016.22E+021.22E+045.02E-019.00E+001.26E+021.57E+03 + 85L2 87.002.83E-025.85E+001.87E+023.19E+032.67E-014.02E+004.91E+015.43E+02 + 85L2 100.001.87E-023.09E+008.75E+011.36E+031.79E-012.41E+002.68E+012.73E+02 + 85L2 117.001.17E-021.51E+003.74E+015.19E+021.14E-011.36E+001.36E+011.25E+02 + 85L2 140.006.80E-036.78E-011.43E+011.75E+026.84E-027.07E-016.27E+005.12E+01 + 85L2 165.004.16E-033.28E-016.02E+006.53E+014.29E-023.92E-013.10E+002.27E+01 + 85L2 230.001.56E-037.83E-021.09E+009.29E+001.68E-021.21E-017.61E-014.44E+00 + 85L2 315.006.31E-042.12E-022.29E-011.57E+007.00E-034.08E-022.08E-019.86E-01 + 85L2 410.003.01E-047.38E-036.54E-023.75E-013.37E-031.68E-027.24E-022.90E-01 + 85L2 520.001.57E-042.95E-032.21E-021.09E-011.75E-037.65E-032.88E-021.00E-01 + 85L2 750.006.03E-057.72E-044.55E-031.81E-026.40E-042.37E-037.33E-032.10E-02 + 85L21000.002.92E-052.87E-041.43E-034.91E-032.91E-049.71E-042.64E-036.59E-03 + 85L21500.001.09E-057.78E-053.15E-049.05E-049.52E-052.88E-046.74E-041.44E-03 + 85L3 15.216.00E+002.91E+044.39E+068.14E+073.79E+006.18E+045.77E+076.10E+09 + 85L3 15.915.28E+002.32E+043.36E+066.98E+073.31E+004.94E+044.26E+074.33E+09 + 85L3 17.214.21E+001.56E+042.10E+065.03E+072.60E+003.34E+042.51E+072.38E+09 + 85L3 20.412.57E+006.62E+037.55E+052.13E+071.54E+001.43E+047.97E+066.50E+08 + 85L3 24.211.55E+002.80E+032.72E+058.06E+069.14E-016.10E+032.55E+061.79E+08 + 85L3 31.007.34E-018.07E+026.18E+041.79E+064.30E-011.78E+034.96E+052.79E+07 + 85L3 37.004.26E-013.32E+022.14E+045.84E+052.50E-017.39E+021.55E+057.47E+06 + 85L3 45.002.31E-011.24E+026.63E+031.65E+051.38E-012.79E+024.35E+041.76E+06 + 85L3 57.001.09E-013.81E+011.62E+033.50E+046.73E-028.63E+019.51E+033.12E+05 + 85L3 70.005.66E-021.37E+014.75E+028.97E+033.61E-023.12E+012.58E+037.09E+04 + 85L3 87.002.81E-024.66E+001.30E+022.11E+031.88E-021.06E+016.61E+021.51E+04 + 85L3 100.001.79E-022.34E+005.72E+018.33E+021.23E-025.35E+002.79E+025.67E+03 + 85L3 117.001.08E-021.08E+002.26E+012.93E+027.71E-032.47E+001.07E+021.90E+03 + 85L3 140.006.02E-034.49E-017.88E+008.87E+014.51E-031.02E+003.60E+015.56E+02 + 85L3 165.003.54E-032.02E-013.02E+002.98E+012.77E-034.57E-011.35E+011.83E+02 + 85L3 230.001.23E-034.09E-024.44E-013.38E+001.04E-039.08E-021.94E+002.04E+01 + 85L3 315.004.60E-049.34E-037.52E-024.49E-014.15E-042.00E-023.23E-012.74E+00 + 85L3 410.002.07E-042.80E-031.77E-028.71E-021.95E-045.72E-037.50E-025.38E-01 + 85L3 520.001.03E-049.81E-045.01E-032.10E-029.97E-051.89E-032.07E-021.29E-01 + 85L3 750.003.72E-052.12E-047.97E-042.66E-033.66E-053.60E-043.01E-031.56E-02 + 85L31000.001.74E-056.94E-052.10E-045.99E-041.73E-051.05E-046.98E-043.17E-03 + 85L31500.006.67E-061.68E-053.88E-058.92E-056.54E-062.16E-059.71E-053.69E-04 + 85M1 5.322.02E+001.27E+048.22E+051.89E+072.33E+034.33E+061.62E+091.39E+11 + 85M1 6.321.69E+006.17E+034.16E+051.19E+071.39E+031.86E+065.30E+084.27E+10 + 85M1 8.321.18E+001.92E+031.40E+054.11E+066.11E+024.85E+059.12E+076.37E+09 + 85M1 12.326.45E-013.52E+022.74E+048.78E+051.89E+027.25E+047.77E+064.19E+08 + 85M1 19.322.91E-014.72E+013.66E+031.22E+054.94E+018.46E+035.01E+051.91E+07 + 85M1 28.001.43E-018.51E+006.27E+021.98E+041.64E+011.49E+035.61E+041.58E+06 + 85M1 43.005.92E-021.16E+007.46E+012.04E+034.60E+002.10E+024.88E+039.53E+04 + 85M1 55.003.49E-023.84E-012.14E+015.25E+022.23E+007.02E+011.26E+031.99E+04 + 85M1 73.001.87E-021.21E-015.11E+001.08E+029.73E-012.05E+012.75E+023.41E+03 + 85M1 106.008.04E-033.48E-028.23E-011.34E+013.29E-014.29E+004.02E+013.63E+02 + 85M1 155.003.36E-031.24E-021.51E-011.74E+001.11E-019.34E-016.23E+004.11E+01 + 85M1 285.008.54E-042.88E-031.60E-029.57E-022.00E-029.59E-023.94E-011.62E+00 + 85M1 500.002.65E-048.39E-043.03E-031.08E-024.35E-031.44E-024.07E-021.15E-01 + 85M2 5.014.46E+001.56E+061.73E+092.37E+113.20E+021.58E+051.51E+072.94E+08 + 85M2 6.013.54E+006.32E+055.30E+086.80E+101.86E+026.93E+046.17E+061.95E+08 + 85M2 8.012.24E+001.52E+058.38E+079.32E+097.86E+011.92E+041.48E+066.03E+07 + 85M2 12.011.03E+002.05E+046.51E+065.64E+082.34E+013.28E+031.98E+058.18E+06 + 85M2 19.013.70E-012.14E+033.83E+052.41E+075.97E+004.71E+022.06E+047.18E+05 + 85M2 28.001.43E-013.25E+023.71E+041.74E+061.90E+009.58E+013.16E+038.82E+04 + 85M2 43.004.62E-024.13E+012.96E+039.95E+045.37E-011.73E+014.09E+028.59E+03 + 85M2 55.002.35E-021.28E+017.13E+021.97E+042.61E-016.58E+001.29E+022.27E+03 + 85M2 73.001.06E-023.41E+001.42E+023.13E+031.15E-012.21E+003.47E+014.95E+02 + 85M2 106.003.62E-036.14E-011.79E+012.91E+023.93E-025.42E-016.35E+006.84E+01 + 85M2 155.001.20E-031.12E-012.30E+002.77E+011.33E-021.34E-011.17E+009.48E+00 + 85M2 285.002.09E-048.34E-031.01E-017.63E-012.41E-031.54E-028.64E-024.51E-01 + 85M2 500.004.45E-058.97E-047.04E-033.63E-025.10E-042.31E-039.04E-033.28E-02 + 85M3 4.431.41E+013.77E+064.74E+097.04E+113.98E+018.30E+069.03E+101.10E+14 + 85M3 5.439.82E+001.36E+061.24E+091.66E+112.15E+013.00E+062.20E+101.92E+13 + 85M3 7.435.28E+002.80E+051.60E+081.78E+108.31E+006.26E+052.53E+091.34E+12 + 85M3 11.432.01E+003.22E+041.00E+078.36E+082.25E+007.28E+041.31E+083.69E+10 + 85M3 18.436.10E-012.92E+034.89E+052.90E+075.27E-016.70E+035.11E+067.51E+08 + 85M3 28.001.96E-013.57E+023.63E+041.56E+061.48E-018.33E+023.09E+052.70E+07 + 85M3 43.005.70E-024.18E+012.61E+038.03E+044.05E-029.85E+011.83E+049.79E+05 + 85M3 55.002.73E-021.22E+015.87E+021.48E+041.93E-022.90E+013.70E+031.52E+05 + 85M3 73.001.15E-023.00E+001.06E+022.12E+038.25E-037.13E+006.07E+021.87E+04 + 85M3 106.003.59E-034.76E-011.15E+011.68E+022.71E-031.13E+005.89E+011.27E+03 + 85M3 155.001.08E-037.45E-021.22E+001.30E+018.78E-041.74E-015.83E+008.96E+01 + 85M3 285.001.63E-044.07E-033.67E-022.39E-011.48E-049.05E-031.66E-011.57E+00 + 85M3 500.003.06E-053.19E-041.71E-037.40E-032.98E-056.32E-047.34E-034.82E-02 + 85M4 3.913.73E+011.14E+054.11E+093.75E+131.24E+012.74E+051.50E+097.70E+11 + 85M4 4.911.88E+013.57E+048.32E+085.13E+125.96E+008.76E+043.21E+081.39E+11 + 85M4 6.916.36E+006.31E+037.55E+072.64E+111.97E+001.58E+043.26E+071.06E+10 + 85M4 10.911.37E+006.27E+023.05E+065.20E+094.37E-011.59E+031.59E+063.51E+08 + 85M4 17.912.34E-015.13E+019.37E+047.76E+078.28E-021.32E+026.30E+048.97E+06 + 85M4 28.004.40E-025.36E+004.08E+031.85E+061.79E-021.39E+013.61E+033.43E+05 + 85M4 43.008.35E-036.12E-012.05E+025.39E+044.01E-031.61E+002.43E+021.56E+04 + 85M4 55.003.15E-031.76E-013.71E+017.27E+031.68E-034.68E-015.25E+012.70E+03 + 85M4 73.001.01E-034.20E-025.28E+007.43E+026.09E-041.13E-019.19E+003.67E+02 + 85M4 106.002.23E-046.42E-034.18E-013.84E+011.57E-041.76E-029.54E-012.73E+01 + 85M4 155.004.74E-059.65E-043.32E-022.00E+003.90E-052.68E-039.84E-022.03E+00 + 85M4 285.004.06E-064.96E-056.74E-042.08E-024.07E-061.35E-042.82E-033.56E-02 + 85M4 500.004.51E-073.59E-062.40E-053.90E-044.96E-078.90E-061.19E-041.00E-03 + 85M5 3.795.72E+011.15E+058.75E+096.60E+137.20E+001.74E+048.47E+092.82E+14 + 85M5 4.792.79E+013.47E+041.69E+098.45E+123.39E+005.42E+031.64E+093.48E+13 + 85M5 6.799.07E+005.82E+031.45E+084.02E+111.09E+009.50E+021.43E+081.55E+12 + 85M5 10.791.86E+005.48E+025.56E+067.31E+092.40E-019.43E+015.60E+062.53E+10 + 85M5 17.793.05E-014.28E+011.63E+051.02E+084.55E-027.83E+001.70E+053.09E+08 + 85M5 28.005.42E-024.20E+006.62E+032.19E+069.81E-038.27E-017.14E+035.93E+06 + 85M5 43.009.99E-034.61E-013.20E+026.05E+042.24E-031.00E-013.58E+021.48E+05 + 85M5 55.003.71E-031.29E-015.64E+017.83E+039.52E-043.02E-026.44E+011.83E+04 + 85M5 73.001.17E-032.96E-027.69E+007.57E+023.52E-047.67E-038.99E+001.69E+03 + 85M5 106.002.53E-044.27E-035.63E-013.57E+019.39E-051.29E-036.76E-017.71E+01 + 85M5 155.005.35E-056.03E-044.01E-021.65E+002.42E-052.18E-044.89E-023.52E+00 + 85M5 285.004.71E-062.86E-056.31E-041.30E-022.80E-061.39E-057.64E-042.88E-02 + 85M5 500.005.53E-072.08E-061.66E-051.75E-044.11E-071.29E-061.87E-054.04E-04 + 85N+ 50.003.88E-021.40E+019.03E+023.87E+041.15E+005.93E+013.56E+031.64E+05 + 85N+ 70.001.56E-022.74E+001.21E+023.44E+034.25E-011.29E+014.48E+021.33E+04 + 85N+ 100.006.09E-035.13E-011.54E+012.97E+021.52E-012.75E+005.55E+011.05E+03 + 85N+ 150.002.09E-037.98E-021.57E+002.04E+014.72E-025.04E-015.84E+006.83E+01 + 85N+ 200.009.91E-042.25E-023.30E-013.31E+002.08E-021.60E-011.30E+001.10E+01 + 85N+ 500.001.14E-047.02E-044.08E-031.92E-021.67E-035.99E-032.01E-027.04E-02 + 86K 99.403.75E-013.14E-016.35E-023.01E-031.14E+016.75E+017.81E+012.02E+01 + 86K 100.103.68E-013.20E-017.81E-026.93E-031.12E+016.59E+017.89E+012.45E+01 + 86K 101.403.57E-013.31E-011.06E-011.78E-021.08E+016.30E+018.02E+013.26E+01 + 86K 104.603.32E-013.51E-011.74E-016.37E-029.85E+005.67E+018.16E+015.11E+01 + 86K 108.403.04E-013.65E-012.52E-011.48E-018.88E+005.01E+018.09E+016.97E+01 + 86K 112.002.81E-013.71E-013.17E-012.48E-018.08E+004.48E+017.87E+018.34E+01 + 86K 118.002.48E-013.70E-014.06E-014.34E-016.96E+003.74E+017.33E+019.85E+01 + 86K 126.002.12E-013.56E-014.87E-016.75E-015.77E+002.99E+016.48E+011.07E+02 + 86K 138.001.70E-013.22E-015.43E-019.50E-014.45E+002.18E+015.22E+011.03E+02 + 86K 151.001.37E-012.83E-015.47E-011.11E+003.45E+001.61E+014.08E+019.03E+01 + 86K 168.001.06E-012.35E-015.10E-011.16E+002.55E+001.12E+012.96E+017.13E+01 + 86K 181.008.84E-022.04E-014.68E-011.13E+002.06E+008.68E+002.34E+015.83E+01 + 86K 198.007.13E-021.70E-014.11E-011.04E+001.60E+006.42E+001.74E+014.46E+01 + 86K 221.005.49E-021.35E-013.41E-018.95E-011.18E+004.45E+001.20E+013.12E+01 + 86K 250.004.12E-021.03E-012.69E-017.20E-018.38E-012.96E+007.88E+002.04E+01 + 86K 315.002.43E-026.26E-021.66E-014.41E-014.44E-011.41E+003.55E+008.82E+00 + 86K 400.001.44E-023.76E-029.80E-022.50E-012.32E-016.66E-011.56E+003.64E+00 + 86K 490.009.44E-032.48E-026.27E-021.52E-011.35E-013.60E-017.93E-011.73E+00 + 86K 600.006.30E-031.66E-024.05E-029.26E-027.91E-021.99E-014.11E-018.34E-01 + 86K 830.003.41E-039.02E-032.04E-024.25E-023.39E-027.95E-021.50E-012.74E-01 + 86K 1100.002.06E-035.39E-031.15E-022.22E-021.64E-023.73E-026.58E-021.11E-01 + 86K 1350.001.45E-033.73E-037.70E-031.41E-029.68E-032.19E-023.71E-025.97E-02 + 86K 1600.001.09E-032.75E-035.52E-039.73E-036.25E-031.42E-022.35E-023.65E-02 + 86L1 19.051.09E+002.43E+024.78E+031.00E+042.42E+023.60E+041.10E+067.69E+06 + 86L1 19.751.03E+002.06E+024.65E+031.73E+042.17E+023.04E+049.04E+057.21E+06 + 86L1 21.059.34E-011.53E+024.18E+032.69E+041.80E+022.25E+046.43E+056.05E+06 + 86L1 24.257.39E-017.80E+012.80E+033.22E+041.18E+021.17E+043.02E+053.51E+06 + 86L1 28.055.73E-013.86E+011.63E+032.49E+047.65E+015.96E+031.39E+051.78E+06 + 86L1 31.004.78E-012.36E+011.08E+031.84E+045.69E+013.77E+038.17E+041.08E+06 + 86L1 37.003.42E-019.86E+004.89E+029.30E+033.37E+011.69E+033.20E+044.20E+05 + 86L1 45.002.32E-013.76E+001.92E+023.82E+031.89E+017.05E+021.14E+041.43E+05 + 86L1 57.001.42E-011.24E+005.96E+011.17E+039.43E+002.50E+023.36E+033.78E+04 + 86L1 70.009.15E-025.18E-012.13E+013.94E+025.16E+001.03E+021.17E+031.18E+04 + 86L1 87.005.66E-022.37E-017.25E+001.22E+022.74E+004.14E+013.95E+023.47E+03 + 86L1 100.004.14E-021.55E-013.71E+005.74E+011.83E+002.33E+011.99E+021.59E+03 + 86L1 117.002.90E-021.01E-011.80E+002.48E+011.16E+001.23E+019.27E+016.68E+02 + 86L1 140.001.93E-026.42E-028.26E-019.71E+006.95E-016.05E+003.95E+012.51E+02 + 86L1 165.001.33E-024.34E-024.26E-014.24E+004.35E-013.20E+001.84E+011.04E+02 + 86L1 230.006.25E-032.03E-021.29E-018.95E-011.71E-019.24E-014.14E+001.86E+01 + 86L1 315.003.14E-031.00E-024.76E-022.40E-017.13E-023.02E-011.09E+003.95E+00 + 86L1 410.001.81E-035.69E-032.23E-028.89E-023.48E-021.24E-013.80E-011.16E+00 + 86L1 520.001.12E-033.47E-031.18E-023.92E-021.84E-025.76E-021.54E-014.10E-01 + 86L1 750.005.63E-041.68E-034.75E-031.25E-026.98E-031.89E-024.23E-029.30E-02 + 86L11000.003.37E-049.73E-042.45E-035.61E-033.30E-038.27E-031.66E-023.22E-02 + 86L11500.001.70E-044.62E-041.02E-032.00E-031.16E-032.76E-034.94E-038.35E-03 + 86L2 18.342.46E+001.10E+041.26E+061.77E+072.92E+011.48E+031.45E+042.70E+04 + 86L2 19.042.23E+009.15E+031.02E+061.63E+072.61E+011.29E+031.43E+044.67E+04 + 86L2 20.341.88E+006.61E+037.03E+051.32E+072.14E+011.01E+031.31E+047.33E+04 + 86L2 23.541.27E+003.23E+033.09E+057.09E+061.39E+015.83E+029.32E+039.02E+04 + 86L2 27.348.48E-011.56E+031.33E+053.34E+068.88E+003.32E+025.84E+037.24E+04 + 86L2 31.005.98E-018.46E+026.51E+041.68E+066.11E+002.07E+023.75E+035.15E+04 + 86L2 37.003.64E-013.60E+022.39E+046.11E+053.62E+001.07E+021.91E+032.78E+04 + 86L2 45.002.07E-011.41E+027.94E+031.91E+052.03E+005.11E+018.69E+021.25E+04 + 86L2 57.001.04E-014.59E+012.11E+034.57E+041.02E+002.11E+013.24E+024.35E+03 + 86L2 70.005.69E-021.75E+016.72E+021.30E+045.59E-019.81E+001.35E+021.65E+03 + 86L2 87.002.98E-026.38E+002.03E+023.41E+032.98E-014.39E+005.28E+015.76E+02 + 86L2 100.001.97E-023.37E+009.49E+011.45E+032.00E-012.63E+002.89E+012.91E+02 + 86L2 117.001.23E-021.65E+004.06E+015.58E+021.27E-011.48E+001.47E+011.34E+02 + 86L2 140.007.20E-037.40E-011.56E+011.88E+027.64E-027.75E-016.79E+005.49E+01 + 86L2 165.004.42E-033.59E-016.55E+007.05E+014.79E-024.30E-013.36E+002.44E+01 + 86L2 230.001.67E-038.58E-021.19E+001.01E+011.88E-021.33E-018.29E-014.80E+00 + 86L2 315.006.76E-042.32E-022.51E-011.71E+007.84E-034.50E-022.28E-011.07E+00 + 86L2 410.003.23E-048.11E-037.17E-024.09E-013.78E-031.85E-027.95E-023.17E-01 + 86L2 520.001.70E-043.25E-032.43E-021.19E-011.96E-038.48E-033.16E-021.09E-01 + 86L2 750.006.52E-058.52E-045.02E-031.99E-027.19E-042.63E-038.10E-032.30E-02 + 86L21000.003.19E-053.17E-041.58E-035.41E-033.27E-041.08E-032.92E-037.27E-03 + 86L21500.001.20E-058.61E-053.49E-041.00E-031.07E-043.22E-047.49E-041.59E-03 + 86L3 15.625.69E+002.74E+043.97E+067.16E+073.70E+006.00E+045.40E+075.54E+09 + 86L3 16.325.03E+002.20E+043.06E+066.16E+073.24E+004.82E+044.02E+073.97E+09 + 86L3 17.624.04E+001.49E+041.93E+064.48E+072.56E+003.29E+042.40E+072.21E+09 + 86L3 20.822.49E+006.43E+037.12E+051.94E+071.54E+001.43E+047.81E+066.22E+08 + 86L3 24.621.51E+002.77E+032.61E+057.50E+069.19E-016.21E+032.55E+061.75E+08 + 86L3 31.007.56E-018.67E+026.56E+041.86E+064.54E-011.97E+035.53E+053.10E+07 + 86L3 37.004.39E-013.56E+022.27E+046.08E+052.65E-018.17E+021.73E+058.28E+06 + 86L3 45.002.38E-011.34E+027.05E+031.72E+051.46E-013.09E+024.84E+041.95E+06 + 86L3 57.001.13E-014.09E+011.72E+033.67E+047.12E-029.54E+011.06E+043.46E+05 + 86L3 70.005.87E-021.47E+015.05E+029.42E+033.82E-023.45E+012.87E+037.84E+04 + 86L3 87.002.91E-025.00E+001.39E+022.22E+031.98E-021.18E+017.34E+021.67E+04 + 86L3 100.001.86E-022.51E+006.08E+018.78E+021.31E-025.91E+003.10E+026.26E+03 + 86L3 117.001.12E-021.16E+002.41E+013.08E+028.16E-032.73E+001.18E+022.10E+03 + 86L3 140.006.27E-034.82E-018.40E+009.36E+014.77E-031.13E+003.99E+016.13E+02 + 86L3 165.003.70E-032.17E-013.22E+003.15E+012.93E-035.05E-011.49E+012.02E+02 + 86L3 230.001.29E-034.40E-024.73E-013.58E+001.10E-031.00E-012.14E+002.25E+01 + 86L3 315.004.84E-041.00E-028.02E-024.76E-014.39E-042.20E-023.56E-013.02E+00 + 86L3 410.002.18E-043.00E-031.89E-029.25E-022.06E-046.28E-038.26E-025.91E-01 + 86L3 520.001.08E-041.05E-035.35E-032.23E-021.05E-042.07E-032.28E-021.42E-01 + 86L3 750.003.90E-052.26E-048.51E-042.84E-033.86E-053.93E-043.31E-031.71E-02 + 86L31000.001.84E-057.38E-052.24E-046.39E-041.82E-051.14E-047.66E-043.48E-03 + 86L31500.006.98E-061.78E-054.12E-059.52E-056.87E-062.33E-051.06E-044.04E-04 + 86M1 5.481.90E+001.23E+047.86E+051.67E+072.34E+034.15E+061.49E+091.23E+11 + 86M1 6.481.60E+006.07E+034.04E+051.09E+071.42E+031.83E+065.04E+083.93E+10 + 86M1 8.481.13E+001.94E+031.38E+053.98E+066.36E+024.91E+059.01E+076.13E+09 + 86M1 12.486.25E-013.66E+022.76E+048.70E+052.00E+027.56E+047.99E+064.22E+08 + 86M1 19.482.86E-015.07E+013.80E+031.24E+055.31E+019.03E+035.30E+051.99E+07 + 86M1 28.001.43E-019.62E+006.82E+022.10E+041.81E+011.65E+036.22E+041.74E+06 + 86M1 43.005.98E-021.32E+008.22E+012.20E+035.08E+002.33E+025.39E+031.05E+05 + 86M1 55.003.54E-024.40E-012.38E+015.71E+022.46E+007.77E+011.38E+032.18E+04 + 86M1 73.001.90E-021.37E-015.72E+001.18E+021.07E+002.27E+013.03E+023.74E+03 + 86M1 106.008.20E-033.81E-029.25E-011.48E+013.63E-014.72E+004.41E+013.97E+02 + 86M1 155.003.45E-031.32E-021.69E-011.93E+001.22E-011.03E+006.82E+004.48E+01 + 86M1 285.008.85E-043.03E-031.75E-021.06E-012.20E-021.05E-014.30E-011.77E+00 + 86M1 500.002.76E-048.88E-043.27E-031.18E-024.77E-031.57E-024.44E-021.25E-01 + 86M2 5.164.20E+001.47E+061.56E+092.08E+113.27E+021.53E+051.41E+072.63E+08 + 86M2 6.163.36E+006.09E+054.95E+086.16E+101.92E+026.86E+045.91E+061.79E+08 + 86M2 8.162.16E+001.51E+058.15E+078.82E+098.29E+011.96E+041.47E+065.75E+07 + 86M2 12.161.01E+002.10E+046.58E+065.58E+082.52E+013.43E+032.02E+058.11E+06 + 86M2 19.163.70E-012.25E+033.98E+052.46E+076.51E+005.01E+022.16E+047.34E+05 + 86M2 28.001.47E-013.55E+024.05E+041.88E+062.12E+001.05E+023.43E+039.45E+04 + 86M2 43.004.79E-024.51E+013.23E+031.08E+056.00E-011.90E+014.45E+029.23E+03 + 86M2 55.002.45E-021.40E+017.77E+022.13E+042.92E-017.24E+001.40E+022.44E+03 + 86M2 73.001.11E-023.73E+001.55E+023.39E+031.29E-012.43E+003.78E+015.35E+02 + 86M2 106.003.82E-036.74E-011.95E+013.16E+024.40E-025.97E-016.92E+007.41E+01 + 86M2 155.001.28E-031.23E-012.51E+003.01E+011.50E-021.48E-011.28E+001.03E+01 + 86M2 285.002.23E-049.19E-031.11E-018.35E-012.71E-031.71E-029.50E-024.93E-01 + 86M2 500.004.80E-059.92E-047.77E-033.99E-025.74E-042.57E-039.98E-033.60E-02 + 86M3 4.541.35E+013.59E+064.35E+096.29E+113.92E+018.15E+068.58E+101.02E+14 + 86M3 5.549.49E+001.32E+061.17E+091.53E+112.15E+013.01E+062.16E+101.85E+13 + 86M3 7.545.16E+002.81E+051.57E+081.70E+108.43E+006.46E+052.57E+091.35E+12 + 86M3 11.541.99E+003.31E+041.01E+078.30E+082.32E+007.71E+041.39E+083.87E+10 + 86M3 18.546.13E-013.05E+035.06E+052.95E+075.50E-017.24E+035.52E+068.10E+08 + 86M3 28.002.01E-013.86E+023.89E+041.66E+061.57E-019.26E+023.47E+053.05E+07 + 86M3 43.005.89E-024.51E+012.80E+038.51E+044.30E-021.10E+022.05E+041.10E+06 + 86M3 55.002.83E-021.32E+016.28E+021.57E+042.05E-023.23E+014.15E+031.71E+05 + 86M3 73.001.19E-023.24E+001.14E+022.25E+038.76E-037.92E+006.79E+022.09E+04 + 86M3 106.003.74E-035.15E-011.23E+011.78E+022.88E-031.25E+006.58E+011.41E+03 + 86M3 155.001.14E-038.05E-021.31E+001.38E+019.33E-041.94E-016.50E+009.96E+01 + 86M3 285.001.71E-044.39E-033.93E-022.55E-011.57E-041.00E-021.84E-011.74E+00 + 86M3 500.003.22E-053.43E-041.83E-037.92E-033.17E-056.97E-048.13E-035.33E-02 + 86M4 4.023.53E+011.06E+053.70E+093.27E+131.21E+012.67E+051.39E+096.94E+11 + 86M4 5.021.81E+013.45E+047.78E+084.70E+125.92E+008.77E+043.11E+081.31E+11 + 86M4 7.026.27E+006.30E+037.40E+072.56E+112.00E+001.63E+043.29E+071.05E+10 + 86M4 11.021.38E+006.46E+023.12E+065.31E+094.53E-011.70E+031.67E+063.63E+08 + 86M4 18.022.41E-015.40E+019.86E+048.20E+078.72E-021.43E+026.79E+049.56E+06 + 86M4 28.004.66E-025.84E+004.49E+032.06E+061.93E-021.56E+014.05E+033.83E+05 + 86M4 43.008.89E-036.68E-012.25E+026.00E+044.34E-031.81E+002.72E+021.74E+04 + 86M4 55.003.36E-031.92E-014.09E+018.08E+031.82E-035.26E-015.88E+013.02E+03 + 86M4 73.001.08E-034.60E-025.82E+008.25E+026.60E-041.27E-011.03E+014.09E+02 + 86M4 106.002.39E-047.05E-034.60E-014.27E+011.71E-041.98E-021.07E+003.05E+01 + 86M4 155.005.12E-051.06E-033.66E-022.23E+004.25E-053.01E-031.10E-012.27E+00 + 86M4 285.004.43E-065.47E-057.44E-042.31E-024.44E-061.51E-043.17E-033.99E-02 + 86M4 500.004.97E-073.95E-062.65E-054.35E-045.42E-071.00E-051.34E-041.13E-03 + 86M5 3.895.43E+011.07E+057.98E+095.80E+137.01E+001.65E+047.94E+092.55E+14 + 86M5 4.892.69E+013.30E+041.60E+097.80E+123.36E+005.29E+031.60E+093.31E+13 + 86M5 6.898.95E+005.72E+031.44E+083.92E+111.11E+009.56E+021.46E+081.56E+12 + 86M5 10.891.88E+005.54E+025.74E+067.48E+092.48E-019.76E+015.94E+062.68E+10 + 86M5 17.893.13E-014.42E+011.73E+051.07E+084.76E-028.25E+001.85E+053.38E+08 + 86M5 28.005.73E-024.47E+007.32E+032.43E+061.05E-028.97E-018.10E+036.81E+06 + 86M5 43.001.06E-024.92E-013.54E+026.70E+042.40E-031.09E-014.06E+021.70E+05 + 86M5 55.003.94E-031.38E-016.24E+018.67E+031.02E-033.27E-027.31E+012.09E+04 + 86M5 73.001.24E-033.17E-028.52E+008.38E+023.78E-048.31E-031.02E+011.93E+03 + 86M5 106.002.71E-044.59E-036.24E-013.96E+011.01E-041.40E-037.66E-018.80E+01 + 86M5 155.005.71E-056.49E-044.44E-021.82E+002.61E-052.36E-045.54E-024.01E+00 + 86M5 285.004.95E-063.09E-056.97E-041.44E-023.02E-061.51E-058.62E-043.27E-02 + 86M5 500.006.22E-072.25E-061.83E-051.94E-044.44E-071.40E-062.09E-054.57E-04 + 86N+ 50.004.05E-021.55E+011.00E+034.30E+041.28E+006.65E+014.05E+031.88E+05 + 86N+ 70.001.64E-023.05E+001.34E+023.82E+034.74E-011.45E+015.09E+021.52E+04 + 86N+ 100.006.38E-035.70E-011.70E+013.29E+021.69E-013.07E+006.27E+011.20E+03 + 86N+ 150.002.19E-038.86E-021.74E+002.26E+015.27E-025.62E-016.55E+007.71E+01 + 86N+ 200.001.04E-032.49E-023.67E-013.67E+002.31E-021.78E-011.45E+001.23E+01 + 86N+ 500.001.21E-047.72E-044.54E-032.14E-021.86E-036.64E-032.23E-027.82E-02 + 87K 102.143.55E-012.87E-015.76E-022.71E-031.15E+016.53E+017.31E+011.84E+01 + 87K 102.843.49E-012.93E-017.04E-026.13E-031.13E+016.38E+017.38E+012.22E+01 + 87K 104.143.39E-013.03E-019.50E-021.55E-021.09E+016.11E+017.50E+012.94E+01 + 87K 107.343.15E-013.21E-011.55E-015.53E-029.97E+005.51E+017.64E+014.58E+01 + 87K 111.142.90E-013.34E-012.24E-011.28E-019.01E+004.89E+017.59E+016.25E+01 + 87K 115.002.67E-013.40E-012.87E-012.22E-018.17E+004.35E+017.39E+017.58E+01 + 87K 121.002.37E-013.41E-013.68E-013.87E-017.06E+003.65E+016.91E+018.95E+01 + 87K 129.002.03E-013.29E-014.42E-016.02E-015.88E+002.93E+016.14E+019.72E+01 + 87K 141.001.64E-013.00E-014.97E-018.54E-014.57E+002.16E+014.99E+019.49E+01 + 87K 154.001.33E-012.65E-015.05E-011.01E+003.55E+001.60E+013.93E+018.41E+01 + 87K 171.001.03E-012.23E-014.76E-011.07E+002.64E+001.12E+012.88E+016.72E+01 + 87K 184.008.66E-021.95E-014.41E-011.05E+002.15E+008.77E+002.29E+015.55E+01 + 87K 201.007.02E-021.64E-013.91E-019.80E-011.68E+006.53E+001.72E+014.28E+01 + 87K 224.005.44E-021.31E-013.28E-018.52E-011.24E+004.55E+001.20E+013.03E+01 + 87K 250.004.21E-021.04E-012.68E-017.10E-019.13E-013.17E+008.26E+002.09E+01 + 87K 315.002.50E-026.37E-021.68E-014.44E-014.84E-011.51E+003.74E+009.13E+00 + 87K 400.001.48E-023.86E-021.00E-012.56E-012.53E-017.15E-011.66E+003.80E+00 + 87K 490.009.75E-032.56E-026.48E-021.57E-011.47E-013.87E-018.41E-011.81E+00 + 87K 600.006.52E-031.73E-024.21E-029.61E-028.59E-022.13E-014.37E-018.79E-01 + 87K 830.003.54E-039.42E-032.14E-024.45E-023.67E-028.55E-021.60E-012.90E-01 + 87K 1100.002.15E-035.65E-031.21E-022.33E-021.77E-024.01E-027.03E-021.18E-01 + 87K 1350.001.51E-033.91E-038.11E-031.48E-021.04E-022.35E-023.97E-026.35E-02 + 87K 1600.001.14E-032.89E-035.82E-031.03E-026.74E-031.53E-022.51E-023.88E-02 + 87L1 19.641.03E+002.30E+024.33E+038.73E+032.43E+023.44E+041.01E+066.83E+06 + 87L1 20.349.73E-011.96E+024.23E+031.50E+042.19E+022.93E+048.36E+056.43E+06 + 87L1 21.648.82E-011.47E+023.82E+032.34E+041.82E+022.19E+046.01E+055.44E+06 + 87L1 24.847.02E-017.68E+012.61E+032.86E+041.21E+021.15E+042.89E+053.22E+06 + 87L1 28.645.49E-013.88E+011.56E+032.26E+047.93E+015.98E+031.35E+051.67E+06 + 87L1 32.004.49E-012.27E+019.86E+021.63E+045.71E+013.60E+037.51E+049.55E+05 + 87L1 38.003.25E-019.79E+004.59E+028.43E+033.43E+011.65E+033.03E+043.85E+05 + 87L1 46.002.23E-013.87E+001.86E+023.57E+031.95E+017.05E+021.11E+041.35E+05 + 87L1 58.001.38E-011.31E+005.98E+011.13E+039.88E+002.55E+023.34E+033.67E+04 + 87L1 71.008.97E-025.56E-012.19E+013.92E+025.46E+001.07E+021.19E+031.17E+04 + 87L1 88.005.60E-022.54E-017.64E+001.24E+022.92E+004.34E+014.06E+023.50E+03 + 87L1 101.004.12E-021.64E-013.95E+005.94E+011.96E+002.46E+012.06E+021.62E+03 + 87L1 118.002.90E-021.06E-011.93E+002.60E+011.25E+001.31E+019.68E+016.87E+02 + 87L1 141.001.94E-026.70E-028.92E-011.03E+017.50E-016.45E+004.15E+012.61E+02 + 87L1 170.001.27E-024.27E-024.20E-014.04E+004.40E-013.13E+001.74E+019.59E+01 + 87L1 235.006.13E-032.03E-021.31E-018.94E-011.77E-019.35E-014.10E+001.80E+01 + 87L1 320.003.13E-031.02E-024.90E-022.46E-017.52E-023.13E-011.11E+003.97E+00 + 87L1 410.001.87E-035.99E-032.40E-029.65E-023.82E-021.35E-014.12E-011.26E+00 + 87L1 520.001.17E-033.66E-031.26E-024.24E-022.02E-026.29E-021.67E-014.44E-01 + 87L1 750.005.88E-041.78E-035.08E-031.35E-027.65E-032.06E-024.59E-021.01E-01 + 87L11000.003.53E-041.03E-032.62E-036.02E-033.61E-039.01E-031.80E-023.48E-02 + 87L11500.001.78E-044.90E-041.09E-032.15E-031.26E-033.01E-035.36E-039.03E-03 + 87L2 18.912.32E+001.03E+041.13E+061.53E+072.96E+011.42E+031.34E+042.40E+04 + 87L2 19.612.12E+008.60E+039.20E+051.41E+072.66E+011.24E+031.32E+044.12E+04 + 87L2 20.911.79E+006.27E+036.42E+051.16E+072.20E+019.77E+021.22E+046.48E+04 + 87L2 24.111.23E+003.13E+032.88E+056.35E+061.44E+015.75E+028.81E+038.12E+04 + 87L2 27.918.26E-011.53E+031.26E+053.06E+069.30E+003.33E+025.62E+036.66E+04 + 87L2 32.005.66E-017.89E+025.83E+041.46E+066.20E+001.99E+023.47E+034.62E+04 + 87L2 38.003.50E-013.45E+022.21E+045.46E+053.73E+001.05E+021.81E+032.54E+04 + 87L2 46.002.03E-011.38E+027.55E+031.77E+052.13E+005.12E+018.41E+021.18E+04 + 87L2 58.001.03E-014.60E+012.07E+034.36E+041.08E+002.15E+013.21E+024.20E+03 + 87L2 71.005.71E-021.78E+016.72E+021.27E+045.99E-011.01E+011.36E+021.63E+03 + 87L2 88.003.03E-026.61E+002.06E+023.40E+033.22E-014.60E+005.41E+015.78E+02 + 87L2 101.002.01E-023.52E+009.74E+011.47E+032.17E-012.78E+002.99E+012.94E+02 + 87L2 118.001.27E-021.74E+004.21E+015.69E+021.39E-011.58E+001.53E+011.37E+02 + 87L2 141.007.46E-037.85E-011.63E+011.95E+028.37E-028.28E-017.13E+005.68E+01 + 87L2 170.004.29E-033.45E-016.10E+006.38E+014.93E-024.24E-013.22E+002.26E+01 + 87L2 235.001.67E-038.59E-021.16E+009.65E+001.99E-021.36E-018.27E-014.68E+00 + 87L2 320.006.92E-042.40E-022.54E-011.70E+008.43E-034.71E-022.34E-011.08E+00 + 87L2 410.003.47E-048.93E-037.87E-024.47E-014.25E-032.05E-028.72E-023.46E-01 + 87L2 520.001.83E-043.58E-032.67E-021.30E-012.21E-039.40E-033.48E-021.20E-01 + 87L2 750.007.07E-059.42E-045.53E-032.19E-028.10E-042.93E-038.95E-032.53E-02 + 87L21000.003.45E-053.50E-041.75E-035.96E-033.68E-041.21E-033.24E-038.02E-03 + 87L21500.001.30E-059.54E-053.87E-041.11E-031.21E-043.60E-048.33E-041.76E-03 + 87L3 16.035.40E+002.58E+043.60E+066.31E+073.61E+005.84E+045.07E+075.04E+09 + 87L3 16.734.79E+002.08E+042.79E+065.45E+073.17E+004.72E+043.80E+073.64E+09 + 87L3 18.033.86E+001.43E+041.79E+063.99E+072.52E+003.25E+042.29E+072.06E+09 + 87L3 21.232.41E+006.26E+036.72E+051.76E+071.53E+001.44E+047.65E+065.95E+08 + 87L3 25.031.48E+002.73E+032.51E+056.97E+069.24E-016.33E+032.55E+061.71E+08 + 87L3 32.007.06E-017.94E+025.76E+041.58E+064.36E-011.86E+035.00E+052.71E+07 + 87L3 38.004.16E-013.35E+022.06E+045.33E+052.58E-017.92E+021.62E+057.52E+06 + 87L3 46.002.30E-011.29E+026.56E+031.56E+051.44E-013.06E+024.67E+041.83E+06 + 87L3 58.001.11E-014.03E+011.64E+033.42E+047.14E-029.69E+011.05E+043.37E+05 + 87L3 71.005.81E-021.47E+014.93E+028.99E+033.87E-023.56E+012.91E+037.83E+04 + 87L3 88.002.92E-025.08E+001.38E+022.16E+032.03E-021.23E+017.58E+021.70E+04 + 87L3 101.001.87E-022.57E+006.10E+018.65E+021.34E-026.22E+003.23E+026.44E+03 + 87L3 118.001.13E-021.19E+002.44E+013.07E+028.41E-032.89E+001.24E+022.18E+03 + 87L3 141.006.39E-035.00E-018.57E+009.41E+014.94E-031.20E+004.23E+016.44E+02 + 87L3 170.003.50E-032.01E-012.88E+002.73E+012.83E-034.82E-011.38E+011.82E+02 + 87L3 235.001.26E-034.26E-024.46E-013.29E+001.09E-039.96E-022.09E+002.15E+01 + 87L3 320.004.83E-041.00E-027.83E-024.57E-014.44E-042.25E-023.60E-013.00E+00 + 87L3 410.002.28E-043.22E-032.01E-029.82E-022.17E-046.92E-039.10E-026.50E-01 + 87L3 520.001.14E-041.12E-035.70E-032.37E-021.11E-042.27E-032.51E-021.56E-01 + 87L3 750.004.09E-052.42E-049.07E-043.02E-034.07E-054.30E-043.64E-031.88E-02 + 87L31000.001.93E-057.86E-052.39E-046.81E-041.92E-051.24E-048.40E-043.81E-03 + 87L31500.007.35E-061.88E-054.39E-051.01E-047.21E-062.51E-051.16E-044.42E-04 + 87M1 5.651.79E+001.19E+047.53E+051.49E+072.37E+033.99E+061.38E+091.10E+11 + 87M1 6.651.51E+005.97E+033.93E+051.01E+071.45E+031.80E+064.79E+083.62E+10 + 87M1 8.651.08E+001.96E+031.37E+053.86E+066.63E+024.97E+058.90E+075.90E+09 + 87M1 12.656.06E-013.81E+022.80E+048.64E+052.13E+027.89E+048.21E+064.24E+08 + 87M1 19.652.82E-015.44E+013.94E+031.26E+055.73E+019.64E+035.60E+052.08E+07 + 87M1 28.001.44E-011.09E+017.42E+022.24E+042.00E+011.83E+036.91E+041.92E+06 + 87M1 43.006.03E-021.52E+009.06E+012.37E+035.62E+002.58E+025.96E+031.15E+05 + 87M1 55.003.58E-025.05E-012.64E+016.21E+022.72E+008.60E+011.53E+032.39E+04 + 87M1 73.001.93E-021.56E-016.40E+001.29E+021.19E+002.51E+013.34E+024.10E+03 + 87M1 106.008.37E-034.20E-021.04E+001.64E+014.01E-015.21E+004.85E+014.34E+02 + 87M1 155.003.54E-031.41E-021.89E-012.15E+001.35E-011.13E+007.49E+004.90E+01 + 87M1 285.009.15E-043.21E-031.92E-021.17E-012.43E-021.15E-014.71E-011.93E+00 + 87M1 500.002.88E-049.42E-043.53E-031.29E-025.26E-031.72E-024.85E-021.36E-01 + 87M2 5.333.93E+001.37E+061.39E+091.78E+113.32E+021.47E+051.30E+072.33E+08 + 87M2 6.333.17E+005.82E+054.56E+085.48E+101.98E+026.73E+045.58E+061.62E+08 + 87M2 8.332.07E+001.49E+057.83E+078.24E+098.72E+011.98E+041.43E+065.41E+07 + 87M2 12.339.91E-012.14E+046.59E+065.47E+082.70E+013.57E+032.05E+057.98E+06 + 87M2 19.333.70E-012.36E+034.12E+052.50E+077.09E+005.32E+022.24E+047.47E+05 + 87M2 28.001.51E-013.88E+024.41E+042.03E+062.37E+001.16E+023.72E+031.01E+05 + 87M2 43.004.97E-024.94E+013.51E+031.16E+056.71E-012.08E+014.83E+029.92E+03 + 87M2 55.002.55E-021.54E+018.47E+022.31E+043.27E-017.96E+001.53E+022.63E+03 + 87M2 73.001.16E-024.09E+001.69E+023.68E+031.44E-012.68E+004.11E+015.77E+02 + 87M2 106.004.03E-037.39E-012.13E+013.43E+024.94E-026.57E-017.55E+008.01E+01 + 87M2 155.001.35E-031.36E-012.75E+003.28E+011.68E-021.63E-011.40E+001.12E+01 + 87M2 285.002.40E-041.01E-021.22E-019.13E-013.05E-031.89E-021.04E-015.39E-01 + 87M2 500.005.18E-051.10E-038.58E-034.39E-026.48E-042.86E-031.10E-023.96E-02 + 87M3 4.661.28E+013.38E+063.94E+095.51E+113.83E+017.92E+068.03E+109.22E+13 + 87M3 5.669.11E+001.27E+061.09E+091.39E+112.13E+013.00E+062.09E+101.74E+13 + 87M3 7.665.02E+002.79E+051.52E+081.61E+108.51E+006.63E+052.59E+091.34E+12 + 87M3 11.661.97E+003.38E+041.02E+078.16E+082.38E+008.14E+041.45E+084.02E+10 + 87M3 18.666.15E-013.19E+035.21E+052.98E+075.72E-017.79E+035.94E+068.67E+08 + 87M3 28.002.07E-014.17E+024.18E+041.76E+061.67E-011.03E+033.90E+053.43E+07 + 87M3 43.006.08E-024.87E+013.00E+039.02E+044.57E-021.22E+022.30E+041.23E+06 + 87M3 55.002.93E-021.43E+016.73E+021.66E+042.18E-023.59E+014.65E+031.91E+05 + 87M3 73.001.24E-023.50E+001.22E+022.39E+039.30E-038.82E+007.60E+022.34E+04 + 87M3 106.003.90E-035.56E-011.31E+011.89E+023.06E-031.39E+007.35E+011.58E+03 + 87M3 155.001.19E-038.69E-021.40E+001.47E+019.91E-042.15E-017.24E+001.11E+02 + 87M3 285.001.80E-044.74E-034.22E-022.72E-011.67E-041.11E-022.04E-011.93E+00 + 87M3 500.003.39E-053.69E-041.96E-038.46E-033.36E-057.70E-049.01E-035.90E-02 + 87M4 4.143.35E+011.00E+053.33E+092.87E+131.18E+012.60E+051.30E+096.29E+11 + 87M4 5.141.75E+013.33E+047.29E+084.32E+125.89E+008.79E+043.02E+081.23E+11 + 87M4 7.146.18E+006.30E+037.25E+072.49E+112.03E+001.69E+043.33E+071.04E+10 + 87M4 11.141.39E+006.65E+023.18E+065.42E+094.69E-011.81E+031.75E+063.75E+08 + 87M4 18.142.48E-015.68E+011.04E+058.65E+079.17E-021.56E+027.32E+041.02E+07 + 87M4 28.004.93E-026.35E+004.93E+032.29E+062.08E-021.75E+014.54E+034.27E+05 + 87M4 43.009.45E-037.28E-012.47E+026.66E+044.68E-032.03E+003.05E+021.94E+04 + 87M4 55.003.58E-032.10E-014.49E+018.97E+031.96E-035.91E-016.59E+013.36E+03 + 87M4 73.001.16E-035.03E-026.39E+009.16E+027.15E-041.43E-011.15E+014.56E+02 + 87M4 106.002.57E-047.73E-035.06E-014.75E+011.86E-042.23E-021.20E+003.40E+01 + 87M4 155.005.52E-051.17E-034.03E-022.48E+004.62E-053.39E-031.24E-012.54E+00 + 87M4 285.004.77E-066.04E-058.19E-042.57E-024.84E-061.70E-043.56E-034.46E-02 + 87M4 500.005.29E-074.37E-062.93E-054.84E-045.93E-071.13E-051.50E-041.26E-03 + 87M5 4.005.14E+019.83E+047.26E+095.09E+136.82E+001.57E+047.45E+092.31E+14 + 87M5 5.002.60E+013.13E+041.52E+097.19E+123.33E+005.14E+031.56E+093.14E+13 + 87M5 7.008.82E+005.60E+031.42E+083.82E+111.12E+009.60E+021.49E+081.56E+12 + 87M5 11.001.90E+005.59E+025.91E+067.64E+092.55E-011.01E+026.30E+062.83E+10 + 87M5 18.003.21E-014.55E+011.83E+051.13E+084.98E-028.69E+002.01E+053.69E+08 + 87M5 28.006.04E-024.75E+008.10E+032.69E+061.12E-029.73E-019.20E+037.82E+06 + 87M5 43.001.12E-025.24E-013.92E+027.41E+042.57E-031.18E-014.61E+021.94E+05 + 87M5 55.004.18E-031.47E-016.91E+019.60E+031.09E-033.55E-028.30E+012.39E+04 + 87M5 73.001.33E-033.39E-029.43E+009.27E+024.06E-049.00E-031.16E+012.21E+03 + 87M5 106.002.89E-044.92E-036.90E-014.37E+011.09E-041.51E-038.68E-011.00E+02 + 87M5 155.006.11E-056.97E-044.91E-022.02E+002.81E-052.55E-046.28E-024.57E+00 + 87M5 285.005.40E-063.32E-057.69E-041.59E-023.26E-061.63E-059.74E-043.71E-02 + 87M5 500.006.73E-072.43E-062.01E-052.14E-044.78E-071.51E-062.34E-055.17E-04 + 87N+ 50.004.23E-021.71E+011.10E+034.75E+041.44E+007.49E+014.59E+032.14E+05 + 87N+ 70.001.71E-023.36E+001.47E+024.20E+035.32E-011.63E+015.75E+021.72E+04 + 87N+ 100.006.69E-036.28E-011.87E+013.61E+021.90E-013.45E+007.06E+011.35E+03 + 87N+ 150.002.30E-039.77E-021.92E+002.48E+015.91E-026.30E-017.35E+008.66E+01 + 87N+ 200.001.10E-032.75E-024.04E-014.04E+002.60E-021.99E-011.62E+001.38E+01 + 87N+ 500.001.29E-048.47E-045.02E-032.37E-022.08E-037.40E-032.48E-028.69E-02 + 88K 104.923.36E-012.63E-015.23E-022.45E-031.16E+016.32E+016.83E+011.67E+01 + 88K 105.623.31E-012.68E-016.37E-025.46E-031.14E+016.17E+016.90E+012.01E+01 + 88K 106.923.22E-012.77E-018.54E-021.37E-021.10E+015.92E+017.02E+012.65E+01 + 88K 110.123.00E-012.94E-011.39E-014.81E-021.01E+015.36E+017.16E+014.12E+01 + 88K 113.922.77E-013.06E-012.01E-011.12E-019.15E+004.77E+017.12E+015.62E+01 + 88K 118.002.54E-013.13E-012.60E-011.99E-018.27E+004.23E+016.94E+016.88E+01 + 88K 124.002.26E-013.14E-013.33E-013.45E-017.18E+003.57E+016.52E+018.14E+01 + 88K 132.001.95E-013.05E-014.02E-015.38E-016.00E+002.89E+015.82E+018.88E+01 + 88K 144.001.58E-012.80E-014.56E-017.70E-014.69E+002.15E+014.78E+018.75E+01 + 88K 157.001.29E-012.50E-014.68E-019.21E-013.67E+001.60E+013.80E+017.83E+01 + 88K 174.001.01E-012.12E-014.46E-019.91E-012.74E+001.13E+012.81E+016.34E+01 + 88K 187.008.50E-021.86E-014.17E-019.80E-012.24E+008.88E+002.25E+015.28E+01 + 88K 204.006.92E-021.58E-013.73E-019.23E-011.75E+006.64E+001.70E+014.11E+01 + 88K 227.005.39E-021.28E-013.16E-018.13E-011.30E+004.66E+001.20E+012.94E+01 + 88K 255.004.12E-021.00E-012.57E-016.76E-019.41E-013.19E+008.08E+001.99E+01 + 88K 320.002.47E-026.27E-021.64E-014.32E-015.04E-011.54E+003.73E+008.93E+00 + 88K 405.001.49E-023.87E-021.00E-012.53E-012.66E-017.38E-011.68E+003.79E+00 + 88K 490.001.01E-022.65E-026.70E-021.62E-011.60E-014.15E-018.92E-011.90E+00 + 88K 600.006.75E-031.79E-024.37E-029.97E-029.33E-022.29E-014.64E-019.25E-01 + 88K 830.003.68E-039.84E-032.24E-024.65E-023.98E-029.19E-021.71E-013.07E-01 + 88K 1100.002.23E-035.92E-031.28E-022.45E-021.92E-024.31E-027.51E-021.25E-01 + 88K 1350.001.57E-034.11E-038.53E-031.56E-021.13E-022.53E-024.25E-026.75E-02 + 88K 1600.001.18E-033.04E-036.14E-031.08E-027.26E-031.64E-022.69E-024.13E-02 + 88L1 20.249.65E-012.18E+023.94E+037.65E+032.45E+023.31E+049.28E+056.09E+06 + 88L1 20.949.16E-011.87E+023.85E+031.30E+042.22E+022.82E+047.76E+055.74E+06 + 88L1 22.248.33E-011.42E+023.51E+032.04E+041.86E+022.13E+045.63E+054.90E+06 + 88L1 25.446.68E-017.57E+012.44E+032.54E+041.24E+021.14E+042.76E+052.96E+06 + 88L1 29.245.26E-013.91E+011.48E+032.06E+048.23E+016.00E+031.32E+051.57E+06 + 88L1 32.004.47E-012.54E+011.03E+031.60E+046.30E+013.97E+038.16E+049.99E+05 + 88L1 38.003.24E-011.11E+014.88E+028.53E+033.79E+011.82E+033.29E+044.07E+05 + 88L1 46.002.23E-014.41E+002.01E+023.69E+032.15E+017.76E+021.21E+041.43E+05 + 88L1 58.001.39E-011.50E+006.53E+011.19E+031.09E+012.81E+023.64E+033.93E+04 + 88L1 71.009.06E-026.32E-012.42E+014.19E+026.02E+001.18E+021.30E+031.26E+04 + 88L1 88.005.68E-022.83E-018.48E+001.35E+023.22E+004.76E+014.42E+023.77E+03 + 88L1 101.004.18E-021.80E-014.40E+006.46E+012.16E+002.70E+012.24E+021.75E+03 + 88L1 118.002.95E-021.15E-012.15E+002.84E+011.38E+001.43E+011.05E+027.41E+02 + 88L1 141.001.98E-027.15E-029.91E-011.13E+018.27E-017.07E+004.52E+012.81E+02 + 88L1 170.001.30E-024.52E-024.64E-014.44E+004.85E-013.43E+001.90E+011.04E+02 + 88L1 235.006.30E-032.13E-021.43E-019.81E-011.95E-011.02E+004.46E+001.95E+01 + 88L1 320.003.24E-031.07E-025.30E-022.68E-018.27E-023.42E-011.21E+004.29E+00 + 88L1 410.001.94E-036.32E-032.58E-021.05E-014.20E-021.48E-014.48E-011.36E+00 + 88L1 520.001.22E-033.87E-031.36E-024.58E-022.22E-026.86E-021.82E-014.80E-01 + 88L1 750.006.13E-041.88E-035.44E-031.45E-028.39E-032.24E-024.98E-021.09E-01 + 88L11000.003.69E-041.09E-032.80E-036.47E-033.95E-039.81E-031.95E-023.77E-02 + 88L11500.001.87E-045.21E-041.17E-032.30E-031.38E-033.27E-035.81E-039.77E-03 + 88L2 19.482.20E+009.64E+031.01E+061.33E+073.02E+011.37E+031.24E+042.14E+04 + 88L2 20.182.01E+008.11E+038.33E+051.23E+072.72E+011.20E+031.23E+043.65E+04 + 88L2 21.481.71E+005.97E+035.87E+051.02E+072.25E+019.52E+021.14E+045.75E+04 + 88L2 24.681.18E+003.03E+032.69E+055.71E+061.49E+015.69E+028.34E+037.32E+04 + 88L2 28.488.05E-011.51E+031.20E+052.81E+069.75E+003.34E+025.40E+036.13E+04 + 88L2 32.005.85E-018.59E+026.25E+041.51E+066.91E+002.16E+023.62E+034.57E+04 + 88L2 38.003.62E-013.75E+022.38E+045.71E+054.16E+001.14E+021.90E+032.58E+04 + 88L2 46.002.11E-011.50E+028.13E+031.86E+052.37E+005.56E+018.91E+021.21E+04 + 88L2 58.001.08E-015.02E+012.23E+034.62E+041.20E+002.34E+013.42E+024.38E+03 + 88L2 71.005.98E-021.95E+017.26E+021.35E+046.69E-011.11E+011.46E+021.71E+03 + 88L2 88.003.18E-027.21E+002.23E+023.64E+033.60E-015.02E+005.82E+016.13E+02 + 88L2 101.002.12E-023.84E+001.06E+021.57E+032.42E-013.04E+003.22E+013.13E+02 + 88L2 118.001.34E-021.90E+004.56E+016.12E+021.55E-011.72E+001.65E+011.46E+02 + 88L2 141.007.90E-038.58E-011.77E+012.10E+029.37E-029.08E-017.73E+006.09E+01 + 88L2 170.004.56E-033.77E-016.64E+006.88E+015.52E-024.66E-013.49E+002.43E+01 + 88L2 235.001.78E-039.42E-021.27E+001.05E+012.23E-021.50E-019.01E-015.07E+00 + 88L2 320.007.40E-042.63E-022.78E-011.85E+009.46E-035.20E-022.56E-011.18E+00 + 88L2 410.003.74E-049.82E-038.63E-024.87E-014.78E-032.27E-029.57E-023.77E-01 + 88L2 520.001.97E-043.95E-032.94E-021.43E-012.49E-031.04E-023.83E-021.31E-01 + 88L2 750.007.63E-051.04E-036.11E-032.41E-029.12E-043.26E-039.89E-032.78E-02 + 88L21000.003.76E-053.88E-041.93E-036.57E-034.15E-041.35E-033.59E-038.85E-03 + 88L21500.001.43E-051.06E-044.30E-041.23E-031.36E-044.03E-049.27E-041.95E-03 + 88L3 16.445.14E+002.44E+043.28E+065.58E+073.53E+005.69E+044.77E+074.61E+09 + 88L3 17.144.57E+001.98E+042.56E+064.84E+073.11E+004.62E+043.60E+073.35E+09 + 88L3 18.443.70E+001.37E+041.65E+063.57E+072.48E+003.21E+042.20E+071.92E+09 + 88L3 21.642.33E+006.10E+036.34E+051.61E+071.52E+001.45E+047.51E+065.70E+08 + 88L3 25.441.45E+002.70E+032.41E+056.50E+069.29E-016.46E+032.55E+061.68E+08 + 88L3 32.007.26E-018.53E+026.10E+041.63E+064.61E-012.06E+035.58E+053.00E+07 + 88L3 38.004.29E-013.60E+022.18E+045.54E+052.73E-018.76E+021.80E+058.33E+06 + 88L3 46.002.37E-011.38E+026.96E+031.63E+051.52E-013.39E+025.20E+042.03E+06 + 88L3 58.001.14E-014.33E+011.75E+033.58E+047.54E-021.07E+021.17E+043.73E+05 + 88L3 71.006.01E-021.58E+015.24E+029.44E+034.09E-023.93E+013.23E+038.65E+04 + 88L3 88.003.02E-025.45E+001.46E+022.27E+032.14E-021.36E+018.41E+021.87E+04 + 88L3 101.001.94E-022.76E+006.48E+019.10E+021.42E-026.88E+003.58E+027.11E+03 + 88L3 118.001.18E-021.28E+002.59E+013.23E+028.88E-033.20E+001.38E+022.41E+03 + 88L3 141.006.65E-035.37E-019.12E+009.93E+015.22E-031.33E+004.68E+017.09E+02 + 88L3 170.003.65E-032.16E-013.06E+002.89E+013.00E-035.32E-011.53E+012.00E+02 + 88L3 235.001.31E-034.57E-024.75E-013.48E+001.15E-031.10E-012.30E+002.37E+01 + 88L3 320.005.05E-041.07E-028.35E-024.84E-014.68E-042.48E-023.97E-013.30E+00 + 88L3 410.002.39E-043.45E-032.15E-021.04E-012.30E-047.61E-031.00E-017.13E-01 + 88L3 520.001.19E-041.20E-036.08E-032.52E-021.17E-042.49E-032.76E-021.71E-01 + 88L3 750.004.32E-052.58E-049.67E-043.22E-034.29E-054.70E-044.00E-032.06E-02 + 88L31000.002.03E-058.36E-052.55E-047.25E-042.02E-051.35E-049.21E-044.18E-03 + 88L31500.007.68E-061.99E-054.66E-051.08E-047.56E-062.71E-051.27E-044.84E-04 + 88M1 5.821.69E+001.15E+047.26E+051.35E+072.40E+033.85E+061.27E+099.86E+10 + 88M1 6.821.43E+005.90E+033.84E+059.47E+061.49E+031.77E+064.57E+083.35E+10 + 88M1 8.821.03E+001.98E+031.36E+053.75E+066.92E+025.04E+058.82E+075.69E+09 + 88M1 12.825.88E-013.97E+022.84E+048.61E+052.26E+028.24E+048.44E+064.28E+08 + 88M1 19.822.77E-015.83E+014.08E+031.28E+056.18E+011.03E+045.92E+052.16E+07 + 88M1 28.001.44E-011.23E+018.07E+022.39E+042.21E+012.04E+037.66E+042.11E+06 + 88M1 43.006.08E-021.73E+009.97E+012.56E+036.21E+002.86E+026.59E+031.27E+05 + 88M1 55.003.62E-025.79E-012.93E+016.74E+023.01E+009.52E+011.69E+032.63E+04 + 88M1 73.001.96E-021.78E-017.15E+001.42E+021.31E+002.77E+013.68E+024.50E+03 + 88M1 106.008.54E-034.65E-021.17E+001.81E+014.44E-015.75E+005.33E+014.75E+02 + 88M1 155.003.63E-031.53E-022.12E-012.39E+001.49E-011.25E+008.21E+005.35E+01 + 88M1 285.009.45E-043.41E-032.10E-021.29E-012.68E-021.27E-015.15E-012.10E+00 + 88M1 500.003.00E-041.00E-033.82E-031.40E-025.79E-031.89E-025.29E-021.48E-01 + 88M2 5.493.69E+001.28E+061.26E+091.55E+113.39E+021.42E+051.21E+072.09E+08 + 88M2 6.493.01E+005.59E+054.24E+084.95E+102.05E+026.66E+045.33E+061.48E+08 + 88M2 8.491.99E+001.48E+057.57E+077.76E+099.19E+012.01E+041.41E+065.14E+07 + 88M2 12.499.72E-012.19E+046.63E+065.38E+082.90E+013.73E+032.08E+057.88E+06 + 88M2 19.493.70E-012.47E+034.27E+052.55E+077.74E+005.66E+022.34E+047.61E+05 + 88M2 28.001.55E-014.24E+024.80E+042.19E+062.65E+001.28E+024.04E+031.08E+05 + 88M2 43.005.16E-025.40E+013.83E+031.26E+057.52E-012.29E+015.25E+021.07E+04 + 88M2 55.002.66E-021.68E+019.23E+022.49E+043.67E-018.75E+001.66E+022.83E+03 + 88M2 73.001.22E-024.48E+001.85E+023.98E+031.62E-012.95E+004.48E+016.22E+02 + 88M2 106.004.25E-038.11E-012.33E+013.72E+025.54E-027.24E-018.24E+008.67E+01 + 88M2 155.001.43E-031.49E-013.01E+003.56E+011.89E-021.80E-011.53E+001.21E+01 + 88M2 285.002.57E-041.12E-021.34E-019.99E-013.44E-032.10E-021.15E-015.89E-01 + 88M2 500.005.60E-051.21E-039.47E-034.83E-027.31E-043.19E-031.22E-024.36E-02 + 88M3 4.791.22E+013.18E+063.56E+094.82E+113.74E+017.70E+067.50E+108.33E+13 + 88M3 5.798.75E+001.23E+061.02E+091.25E+112.11E+012.99E+062.02E+101.64E+13 + 88M3 7.794.88E+002.77E+051.47E+081.52E+108.58E+006.79E+052.61E+091.33E+12 + 88M3 11.791.95E+003.46E+041.02E+078.01E+082.44E+008.57E+041.52E+084.17E+10 + 88M3 18.796.17E-013.33E+035.35E+053.01E+075.94E-018.38E+036.37E+069.26E+08 + 88M3 28.002.12E-014.50E+024.47E+041.86E+061.77E-011.15E+034.38E+053.86E+07 + 88M3 43.006.27E-025.26E+013.21E+039.55E+044.85E-021.36E+022.58E+041.38E+06 + 88M3 55.003.03E-021.54E+017.20E+021.76E+042.31E-023.99E+015.21E+032.14E+05 + 88M3 73.001.28E-023.78E+001.31E+022.53E+039.87E-039.81E+008.50E+022.61E+04 + 88M3 106.004.06E-036.00E-011.41E+012.01E+023.24E-031.55E+008.20E+011.76E+03 + 88M3 155.001.24E-039.38E-021.50E+001.56E+011.05E-032.39E-018.06E+001.23E+02 + 88M3 285.001.89E-045.12E-034.52E-022.90E-011.77E-041.23E-022.27E-012.14E+00 + 88M3 500.003.57E-053.98E-042.11E-039.04E-033.56E-058.51E-049.98E-036.52E-02 + 88M4 4.253.19E+019.46E+043.02E+092.54E+131.16E+012.55E+051.23E+095.76E+11 + 88M4 5.251.69E+013.24E+046.86E+084.00E+125.86E+008.84E+042.94E+081.17E+11 + 88M4 7.256.10E+006.32E+037.12E+072.42E+112.06E+001.75E+043.38E+071.04E+10 + 88M4 11.251.41E+006.86E+023.25E+065.54E+094.86E-011.93E+031.85E+063.89E+08 + 88M4 18.252.55E-015.99E+011.09E+059.13E+079.64E-021.70E+027.90E+041.09E+07 + 88M4 28.005.21E-026.91E+005.42E+032.54E+062.24E-021.97E+015.09E+034.76E+05 + 88M4 43.001.00E-027.94E-012.72E+027.39E+045.05E-032.28E+003.41E+022.16E+04 + 88M4 55.003.82E-032.29E-014.93E+019.95E+032.12E-036.64E-017.38E+013.74E+03 + 88M4 73.001.24E-035.51E-027.03E+001.02E+037.74E-041.61E-011.29E+015.08E+02 + 88M4 106.002.75E-048.48E-035.57E-015.27E+012.01E-042.51E-021.34E+003.79E+01 + 88M4 155.005.93E-051.28E-034.43E-022.75E+005.02E-053.81E-031.39E-012.83E+00 + 88M4 285.005.23E-066.66E-059.02E-042.86E-025.27E-061.92E-043.99E-034.99E-02 + 88M4 500.005.78E-074.82E-063.23E-055.39E-046.47E-071.27E-051.69E-041.42E-03 + 88M5 4.104.90E+019.13E+046.68E+094.52E+136.66E+001.49E+047.05E+092.11E+14 + 88M5 5.102.51E+012.99E+041.44E+096.68E+123.30E+005.03E+031.53E+093.01E+13 + 88M5 7.108.70E+005.51E+031.42E+083.73E+111.13E+009.67E+021.52E+081.58E+12 + 88M5 11.101.91E+005.65E+026.10E+067.83E+092.63E-011.04E+026.68E+062.99E+10 + 88M5 18.103.30E-014.69E+011.94E+051.19E+085.21E-029.15E+002.19E+054.03E+08 + 88M5 28.006.36E-025.05E+008.95E+032.98E+061.20E-021.05E+001.04E+048.97E+06 + 88M5 43.001.19E-025.58E-014.34E+028.20E+042.75E-031.28E-015.23E+022.23E+05 + 88M5 55.004.44E-031.57E-017.64E+011.06E+041.17E-033.84E-029.40E+012.74E+04 + 88M5 73.001.41E-033.62E-021.04E+011.02E+034.35E-049.74E-031.31E+012.52E+03 + 88M5 106.003.08E-045.26E-037.64E-014.83E+011.17E-041.64E-039.83E-011.14E+02 + 88M5 155.006.55E-057.48E-045.43E-022.23E+003.02E-052.76E-047.10E-025.19E+00 + 88M5 285.005.81E-063.58E-058.49E-041.76E-023.51E-061.76E-051.10E-034.21E-02 + 88M5 500.007.26E-072.62E-062.21E-052.36E-045.15E-071.63E-062.63E-055.84E-04 + 88N+ 50.004.41E-021.90E+011.22E+035.28E+041.61E+008.42E+015.23E+032.46E+05 + 88N+ 70.001.79E-023.74E+001.63E+024.65E+035.95E-011.83E+016.53E+021.97E+04 + 88N+ 100.007.00E-036.99E-012.08E+013.99E+022.13E-013.86E+007.98E+011.53E+03 + 88N+ 150.002.42E-031.09E-012.13E+002.75E+016.61E-027.04E-018.26E+009.77E+01 + 88N+ 200.001.16E-033.06E-024.50E-014.48E+002.90E-022.22E-011.82E+001.55E+01 + 88N+ 500.001.37E-049.33E-045.59E-032.64E-022.32E-038.22E-032.75E-029.66E-02 + 89K 107.753.19E-012.41E-014.77E-022.22E-031.17E+016.13E+016.40E+011.53E+01 + 89K 108.453.14E-012.46E-015.78E-024.88E-031.15E+015.99E+016.47E+011.83E+01 + 89K 109.753.05E-012.54E-017.72E-021.21E-021.11E+015.75E+016.57E+012.39E+01 + 89K 112.952.86E-012.70E-011.25E-014.22E-021.02E+015.22E+016.71E+013.70E+01 + 89K 116.752.64E-012.81E-011.80E-019.78E-029.30E+004.66E+016.69E+015.05E+01 + 89K 121.002.42E-012.88E-012.36E-011.78E-018.40E+004.13E+016.54E+016.25E+01 + 89K 127.002.16E-012.90E-013.03E-013.08E-017.31E+003.50E+016.16E+017.40E+01 + 89K 135.001.87E-012.83E-013.67E-014.82E-016.14E+002.85E+015.53E+018.11E+01 + 89K 147.001.53E-012.62E-014.19E-016.97E-014.82E+002.13E+014.58E+018.08E+01 + 89K 160.001.25E-012.36E-014.35E-018.42E-013.79E+001.60E+013.67E+017.30E+01 + 89K 177.009.85E-022.01E-014.20E-019.18E-012.85E+001.14E+012.74E+015.99E+01 + 89K 190.008.34E-021.78E-013.95E-019.16E-012.33E+009.00E+002.21E+015.02E+01 + 89K 207.006.82E-021.52E-013.57E-018.72E-011.83E+006.76E+001.68E+013.95E+01 + 89K 230.005.34E-021.24E-013.06E-017.77E-011.37E+004.78E+001.19E+012.86E+01 + 89K 255.004.22E-021.01E-012.57E-016.67E-011.03E+003.41E+008.46E+002.04E+01 + 89K 320.002.54E-026.38E-021.67E-014.35E-015.49E-011.65E+003.93E+009.23E+00 + 89K 405.001.53E-023.98E-021.03E-012.59E-012.90E-017.92E-011.78E+003.95E+00 + 89K 500.009.98E-032.63E-026.64E-021.59E-011.65E-014.20E-018.86E-011.85E+00 + 89K 610.006.76E-031.81E-024.40E-029.94E-029.70E-022.35E-014.68E-019.19E-01 + 89K 840.003.74E-031.01E-022.29E-024.73E-024.19E-029.56E-021.75E-013.13E-01 + 89K 1100.002.32E-036.21E-031.34E-022.57E-022.07E-024.63E-028.01E-021.33E-01 + 89K 1350.001.63E-034.32E-038.99E-031.64E-021.22E-022.72E-024.54E-027.18E-02 + 89K 1600.001.23E-033.19E-036.47E-031.14E-027.84E-031.76E-022.87E-024.40E-02 + 89L1 20.849.09E-012.08E+023.60E+036.73E+032.48E+023.19E+048.60E+055.46E+06 + 89L1 21.548.64E-011.79E+023.53E+031.14E+042.25E+022.73E+047.22E+055.16E+06 + 89L1 22.847.88E-011.37E+023.23E+031.78E+041.89E+022.08E+045.29E+054.43E+06 + 89L1 26.046.37E-017.48E+012.28E+032.26E+041.28E+021.13E+042.64E+052.73E+06 + 89L1 29.845.04E-013.94E+011.42E+031.87E+048.55E+016.03E+031.28E+051.47E+06 + 89L1 33.004.21E-012.45E+019.48E+021.42E+046.35E+013.81E+037.53E+048.94E+05 + 89L1 39.003.09E-011.10E+014.61E+027.77E+033.87E+011.79E+033.12E+043.74E+05 + 89L1 47.002.15E-014.53E+001.95E+023.46E+032.23E+017.78E+021.18E+041.36E+05 + 89L1 59.001.35E-011.59E+006.56E+011.15E+031.14E+012.87E+023.63E+033.82E+04 + 89L1 72.008.89E-026.79E-012.48E+014.17E+026.38E+001.22E+021.31E+031.25E+04 + 89L1 89.005.62E-023.04E-018.91E+001.37E+023.44E+004.99E+014.55E+023.81E+03 + 89L1 102.004.16E-021.93E-014.68E+006.67E+012.32E+002.84E+012.32E+021.79E+03 + 89L1 119.002.95E-021.22E-012.31E+002.97E+011.48E+001.52E+011.10E+027.64E+02 + 89L1 142.001.99E-027.54E-021.07E+001.20E+018.94E-017.54E+004.75E+012.92E+02 + 89L1 170.001.33E-024.80E-025.13E-014.88E+005.35E-013.75E+002.06E+011.12E+02 + 89L1 235.006.49E-032.25E-021.56E-011.08E+002.15E-011.12E+004.85E+002.10E+01 + 89L1 320.003.34E-031.13E-025.75E-022.93E-019.11E-023.74E-011.31E+004.64E+00 + 89L1 410.002.01E-036.68E-032.78E-021.14E-014.63E-021.62E-014.87E-011.47E+00 + 89L1 520.001.26E-034.10E-031.46E-024.96E-022.44E-027.50E-021.97E-015.19E-01 + 89L1 750.006.40E-042.00E-035.83E-031.57E-029.21E-032.45E-025.41E-021.18E-01 + 89L11000.003.86E-041.16E-033.00E-036.96E-034.32E-031.07E-022.12E-024.07E-02 + 89L11500.001.96E-045.53E-041.25E-032.47E-031.50E-033.56E-036.30E-031.06E-02 + 89L2 20.082.08E+009.03E+039.11E+051.15E+073.07E+011.32E+031.15E+041.90E+04 + 89L2 20.781.91E+007.64E+037.53E+051.07E+072.77E+011.16E+031.14E+043.23E+04 + 89L2 22.081.63E+005.67E+035.36E+058.90E+062.32E+019.27E+021.06E+045.09E+04 + 89L2 25.281.14E+002.93E+032.51E+055.12E+061.55E+015.62E+027.88E+036.58E+04 + 89L2 29.087.84E-011.49E+031.15E+052.58E+061.02E+013.34E+025.19E+035.63E+04 + 89L2 33.005.55E-018.06E+025.64E+041.31E+067.04E+002.09E+023.36E+034.12E+04 + 89L2 39.003.49E-013.61E+022.21E+045.13E+054.30E+001.12E+021.81E+032.37E+04 + 89L2 47.002.06E-011.48E+027.76E+031.72E+052.48E+005.58E+018.64E+021.14E+04 + 89L2 59.001.07E-015.05E+012.18E+034.41E+041.28E+002.39E+013.39E+024.23E+03 + 89L2 72.006.01E-021.99E+017.26E+021.32E+047.18E-011.15E+011.47E+021.69E+03 + 89L2 89.003.23E-027.47E+002.27E+023.63E+033.89E-015.27E+005.96E+016.14E+02 + 89L2 102.002.16E-024.01E+001.08E+021.59E+032.63E-013.20E+003.33E+013.17E+02 + 89L2 119.001.37E-022.00E+004.73E+016.24E+021.70E-011.83E+001.72E+011.50E+02 + 89L2 142.008.18E-039.10E-011.85E+012.16E+021.03E-019.71E-018.12E+006.30E+01 + 89L2 170.004.83E-034.13E-017.22E+007.43E+016.19E-025.12E-013.79E+002.62E+01 + 89L2 235.001.89E-031.03E-011.39E+001.13E+012.50E-021.65E-019.82E-015.48E+00 + 89L2 320.007.91E-042.89E-023.05E-012.01E+001.06E-025.74E-022.80E-011.28E+00 + 89L2 410.004.01E-041.08E-029.47E-025.32E-015.37E-032.51E-021.05E-014.11E-01 + 89L2 520.002.13E-044.35E-033.23E-021.56E-012.80E-031.16E-024.21E-021.43E-01 + 89L2 750.008.28E-051.15E-036.74E-032.65E-021.03E-033.63E-031.09E-023.06E-02 + 89L21000.004.06E-054.29E-042.14E-037.24E-034.68E-041.50E-033.98E-039.76E-03 + 89L21500.001.56E-051.17E-044.77E-041.36E-031.53E-044.51E-041.03E-032.17E-03 + 89L3 16.874.88E+002.30E+042.98E+064.92E+073.45E+005.54E+044.48E+074.20E+09 + 89L3 17.574.35E+001.87E+042.34E+064.28E+073.05E+004.52E+043.41E+073.08E+09 + 89L3 18.873.55E+001.31E+041.52E+063.19E+072.45E+003.17E+042.10E+071.79E+09 + 89L3 22.072.25E+005.94E+035.98E+051.47E+071.51E+001.45E+047.35E+065.44E+08 + 89L3 25.871.41E+002.67E+032.31E+056.03E+069.32E-016.58E+032.54E+061.64E+08 + 89L3 33.006.80E-017.85E+025.38E+041.39E+064.43E-011.96E+035.07E+052.64E+07 + 89L3 39.004.08E-013.39E+021.98E+044.88E+052.66E-018.52E+021.69E+057.60E+06 + 89L3 47.002.29E-011.33E+026.50E+031.47E+051.51E-013.37E+025.03E+041.92E+06 + 89L3 59.001.12E-014.27E+011.67E+033.35E+047.57E-021.09E+021.16E+043.64E+05 + 89L3 72.005.95E-021.58E+015.11E+029.01E+034.14E-024.06E+013.28E+038.63E+04 + 89L3 89.003.02E-025.54E+001.46E+022.21E+032.19E-021.42E+018.69E+021.91E+04 + 89L3 102.001.95E-022.82E+006.50E+018.95E+021.45E-027.25E+003.73E+027.31E+03 + 89L3 119.001.19E-021.32E+002.62E+013.22E+029.15E-033.39E+001.45E+022.50E+03 + 89L3 142.006.76E-035.57E-019.30E+009.98E+015.40E-031.42E+004.96E+017.44E+02 + 89L3 170.003.81E-032.32E-013.26E+003.04E+013.16E-035.88E-011.69E+012.20E+02 + 89L3 235.001.37E-034.91E-025.06E-013.68E+001.22E-031.21E-012.54E+002.60E+01 + 89L3 320.005.28E-041.15E-028.89E-025.12E-014.95E-042.73E-024.37E-013.63E+00 + 89L3 410.002.50E-043.70E-032.29E-021.10E-012.42E-048.37E-031.10E-017.83E-01 + 89L3 520.001.25E-041.29E-036.48E-032.67E-021.24E-042.74E-033.03E-021.88E-01 + 89L3 750.004.53E-052.75E-041.03E-033.42E-034.52E-055.13E-044.39E-032.26E-02 + 89L31000.002.13E-058.90E-052.71E-047.73E-042.12E-051.47E-041.01E-034.58E-03 + 89L31500.008.06E-062.11E-054.95E-051.15E-047.93E-062.92E-051.38E-045.29E-04 + 89M1 6.001.59E+001.11E+046.94E+051.21E+072.42E+033.69E+061.17E+098.77E+10 + 89M1 7.001.35E+005.81E+033.73E+058.78E+061.53E+031.74E+064.33E+083.07E+10 + 89M1 9.009.88E-012.00E+031.34E+053.63E+067.21E+025.09E+058.68E+075.44E+09 + 89M1 13.005.69E-014.13E+022.87E+048.53E+052.41E+028.58E+048.64E+064.28E+08 + 89M1 20.002.71E-016.24E+014.23E+031.29E+056.66E+011.10E+046.24E+052.24E+07 + 89M1 28.001.44E-011.38E+018.76E+022.54E+042.45E+012.26E+038.50E+042.33E+06 + 89M1 43.006.13E-021.98E+001.10E+022.76E+036.88E+003.17E+027.29E+031.39E+05 + 89M1 55.003.66E-026.63E-013.24E+017.31E+023.33E+001.05E+021.86E+032.89E+04 + 89M1 73.001.99E-022.02E-017.97E+001.55E+021.45E+003.06E+014.05E+024.93E+03 + 89M1 106.008.71E-035.17E-021.31E+002.00E+014.91E-016.35E+005.86E+015.20E+02 + 89M1 155.003.72E-031.65E-022.37E-012.65E+001.65E-011.37E+009.01E+005.85E+01 + 89M1 285.009.77E-043.63E-032.31E-021.42E-012.96E-021.39E-015.63E-012.29E+00 + 89M1 500.003.12E-041.06E-034.14E-031.53E-026.39E-032.07E-025.78E-021.62E-01 + 89M2 5.663.47E+001.21E+061.13E+091.36E+113.47E+021.38E+051.13E+071.88E+08 + 89M2 6.662.85E+005.39E+053.95E+084.47E+102.13E+026.59E+045.10E+061.36E+08 + 89M2 8.661.92E+001.47E+057.32E+077.30E+099.71E+012.04E+041.39E+064.88E+07 + 89M2 12.669.53E-012.25E+046.67E+065.30E+083.13E+013.89E+032.12E+057.79E+06 + 89M2 19.663.70E-012.59E+034.42E+052.60E+078.45E+006.02E+022.43E+047.76E+05 + 89M2 28.001.59E-014.64E+025.23E+042.36E+062.97E+001.40E+024.39E+031.16E+05 + 89M2 43.005.34E-025.91E+014.17E+031.36E+058.43E-012.52E+015.70E+021.15E+04 + 89M2 55.002.77E-021.84E+011.01E+032.69E+044.11E-019.63E+001.80E+023.05E+03 + 89M2 73.001.27E-024.91E+002.01E+024.31E+031.81E-013.24E+004.87E+016.71E+02 + 89M2 106.004.47E-038.90E-012.54E+014.04E+026.23E-027.98E-018.98E+009.38E+01 + 89M2 155.001.52E-031.64E-013.29E+003.88E+012.12E-021.99E-011.67E+001.32E+01 + 89M2 285.002.75E-041.23E-021.47E-011.09E+003.88E-032.32E-021.26E-016.44E-01 + 89M2 500.006.03E-051.34E-031.05E-025.30E-028.26E-043.55E-031.35E-024.79E-02 + 89M3 4.911.18E+013.04E+063.28E+094.33E+113.68E+017.59E+067.15E+107.73E+13 + 89M3 5.918.46E+001.20E+069.67E+081.16E+112.10E+013.01E+061.98E+101.58E+13 + 89M3 7.914.77E+002.77E+051.44E+081.45E+108.69E+007.01E+052.65E+091.33E+12 + 89M3 11.911.93E+003.55E+041.03E+077.93E+082.51E+009.08E+041.60E+084.36E+10 + 89M3 18.916.19E-013.48E+035.53E+053.06E+076.18E-019.04E+036.87E+069.95E+08 + 89M3 28.002.17E-014.86E+024.80E+041.97E+061.88E-011.28E+034.92E+054.35E+07 + 89M3 43.006.46E-025.69E+013.44E+031.01E+055.14E-021.51E+022.89E+041.55E+06 + 89M3 55.003.13E-021.67E+017.70E+021.86E+042.45E-024.44E+015.83E+032.40E+05 + 89M3 73.001.33E-024.09E+001.40E+022.68E+031.05E-021.09E+019.50E+022.91E+04 + 89M3 106.004.23E-036.48E-011.50E+012.13E+023.44E-031.72E+009.14E+011.95E+03 + 89M3 155.001.30E-031.01E-011.60E+001.66E+011.11E-032.66E-018.97E+001.37E+02 + 89M3 285.001.98E-045.52E-034.84E-023.08E-011.88E-041.37E-022.52E-012.37E+00 + 89M3 500.003.78E-054.28E-042.26E-039.65E-033.77E-059.40E-041.10E-027.20E-02 + 89M4 4.373.02E+018.88E+042.71E+092.21E+131.13E+012.48E+051.14E+095.19E+11 + 89M4 5.371.62E+013.13E+046.40E+083.65E+125.81E+008.83E+042.84E+081.10E+11 + 89M4 7.375.99E+006.30E+036.93E+072.34E+112.08E+001.81E+043.41E+071.02E+10 + 89M4 11.371.41E+007.05E+023.30E+065.62E+095.02E-012.05E+031.93E+064.00E+08 + 89M4 18.372.61E-016.29E+011.14E+059.59E+071.01E-011.84E+028.48E+041.15E+07 + 89M4 28.005.50E-027.52E+005.94E+032.82E+062.41E-022.21E+015.70E+035.30E+05 + 89M4 43.001.07E-028.66E-012.98E+028.19E+045.44E-032.56E+003.82E+022.41E+04 + 89M4 55.004.06E-032.50E-015.41E+011.10E+042.29E-037.46E-018.25E+014.17E+03 + 89M4 73.001.32E-036.02E-027.71E+001.13E+038.36E-041.81E-011.44E+015.65E+02 + 89M4 106.002.95E-049.29E-036.11E-015.84E+012.18E-042.82E-021.50E+004.22E+01 + 89M4 155.006.37E-051.41E-034.86E-023.05E+005.45E-054.29E-031.55E-013.15E+00 + 89M4 285.005.63E-067.34E-059.91E-043.18E-025.74E-062.16E-044.48E-035.58E-02 + 89M4 500.006.34E-075.32E-063.55E-056.00E-047.05E-071.42E-051.90E-041.59E-03 + 89M5 4.224.64E+018.41E+046.08E+093.96E+136.47E+001.41E+046.60E+091.90E+14 + 89M5 5.222.42E+012.83E+041.36E+096.13E+123.27E+004.88E+031.49E+092.84E+13 + 89M5 7.228.55E+005.38E+031.40E+083.61E+111.14E+009.67E+021.54E+081.58E+12 + 89M5 11.221.92E+005.69E+026.27E+067.95E+092.71E-011.07E+027.05E+063.14E+10 + 89M5 18.223.37E-014.82E+012.05E+051.25E+085.43E-029.60E+002.38E+054.38E+08 + 89M5 28.006.70E-025.37E+009.89E+033.30E+061.28E-021.14E+001.18E+041.03E+07 + 89M5 43.001.26E-025.94E-014.79E+029.06E+042.94E-031.38E-015.92E+022.55E+05 + 89M5 55.004.70E-031.67E-018.45E+011.17E+041.25E-034.15E-021.07E+023.13E+04 + 89M5 73.001.50E-033.87E-021.15E+011.13E+034.66E-041.05E-021.48E+012.88E+03 + 89M5 106.003.29E-045.63E-038.44E-015.34E+011.25E-041.77E-031.11E+001.30E+02 + 89M5 155.007.01E-058.02E-046.00E-022.46E+003.25E-052.98E-048.03E-025.90E+00 + 89M5 285.006.19E-063.86E-059.37E-041.94E-023.78E-061.91E-051.24E-034.76E-02 + 89M5 500.007.59E-072.83E-062.43E-052.61E-045.54E-071.76E-062.94E-056.60E-04 + 89N+ 50.004.59E-022.08E+011.33E+035.86E+041.81E+009.48E+015.92E+032.80E+05 + 89N+ 70.001.87E-024.11E+001.79E+025.14E+036.70E-012.05E+017.36E+022.23E+04 + 89N+ 100.007.32E-037.69E-012.28E+014.39E+022.39E-014.33E+008.96E+011.73E+03 + 89N+ 150.002.54E-031.20E-012.34E+003.02E+017.43E-027.88E-019.25E+001.10E+02 + 89N+ 200.001.22E-033.37E-024.95E-014.92E+003.26E-022.48E-012.03E+001.74E+01 + 89N+ 500.001.45E-041.02E-036.19E-032.92E-022.60E-039.17E-033.06E-021.07E-01 + 90K 110.653.03E-012.22E-014.37E-022.02E-031.18E+015.94E+016.00E+011.39E+01 + 90K 111.352.98E-012.26E-015.27E-024.38E-031.16E+015.80E+016.06E+011.66E+01 + 90K 112.652.90E-012.33E-016.99E-021.07E-021.12E+015.58E+016.16E+012.16E+01 + 90K 115.852.72E-012.48E-011.13E-013.71E-021.04E+015.08E+016.29E+013.33E+01 + 90K 119.652.52E-012.59E-011.62E-018.59E-029.45E+004.55E+016.29E+014.54E+01 + 90K 124.002.31E-012.66E-012.14E-011.59E-018.53E+004.03E+016.15E+015.65E+01 + 90K 130.002.07E-012.69E-012.75E-012.75E-017.45E+003.44E+015.82E+016.71E+01 + 90K 138.001.80E-012.63E-013.35E-014.32E-016.29E+002.81E+015.26E+017.41E+01 + 90K 150.001.48E-012.46E-013.87E-016.31E-014.96E+002.12E+014.39E+017.45E+01 + 90K 163.001.22E-012.23E-014.05E-017.71E-013.92E+001.60E+013.55E+016.81E+01 + 90K 180.009.63E-021.92E-013.95E-018.51E-012.96E+001.15E+012.68E+015.65E+01 + 90K 193.008.18E-021.71E-013.75E-018.58E-012.43E+009.12E+002.17E+014.78E+01 + 90K 210.006.72E-021.47E-013.42E-018.24E-011.92E+006.89E+001.67E+013.80E+01 + 90K 233.005.29E-021.21E-012.96E-017.44E-011.44E+004.90E+001.19E+012.78E+01 + 90K 260.004.13E-029.80E-022.48E-016.37E-011.06E+003.43E+008.28E+001.95E+01 + 90K 325.002.52E-026.30E-021.64E-014.24E-015.73E-011.68E+003.92E+009.01E+00 + 90K 410.001.54E-023.99E-021.03E-012.57E-013.05E-018.18E-011.80E+003.93E+00 + 90K 500.001.03E-022.73E-026.87E-021.64E-011.79E-014.50E-019.39E-011.94E+00 + 90K 610.006.99E-031.88E-024.57E-021.03E-011.05E-012.52E-014.97E-019.67E-01 + 90K 840.003.87E-031.05E-022.40E-024.94E-024.54E-021.03E-011.87E-013.30E-01 + 90K 1100.002.41E-036.51E-031.41E-022.70E-022.24E-024.98E-028.55E-021.41E-01 + 90K 1350.001.70E-034.53E-039.47E-031.73E-021.32E-022.92E-024.84E-027.63E-02 + 90K 1600.001.28E-033.36E-036.82E-031.20E-028.45E-031.89E-023.07E-024.68E-02 + 90L1 21.478.54E-011.98E+023.27E+035.90E+032.51E+023.06E+047.92E+054.86E+06 + 90L1 22.178.13E-011.71E+023.21E+039.89E+032.28E+022.63E+046.69E+054.60E+06 + 90L1 23.477.44E-011.32E+022.96E+031.55E+041.92E+022.02E+044.95E+053.98E+06 + 90L1 26.676.05E-017.36E+012.13E+032.00E+041.32E+021.12E+042.52E+052.50E+06 + 90L1 30.474.82E-013.96E+011.35E+031.70E+048.87E+016.04E+031.25E+051.38E+06 + 90L1 34.003.97E-012.37E+018.74E+021.27E+046.41E+013.67E+036.98E+048.02E+05 + 90L1 40.002.94E-011.10E+014.36E+027.09E+033.96E+011.76E+032.97E+043.44E+05 + 90L1 48.002.06E-014.66E+001.90E+023.24E+032.31E+017.80E+021.15E+041.28E+05 + 90L1 60.001.31E-011.68E+006.58E+011.12E+031.20E+012.93E+023.62E+033.72E+04 + 90L1 73.008.71E-027.29E-012.55E+014.14E+026.76E+001.26E+021.33E+031.24E+04 + 90L1 90.005.55E-023.28E-019.35E+001.39E+023.67E+005.23E+014.68E+023.85E+03 + 90L1 103.004.13E-022.08E-014.96E+006.87E+012.48E+003.00E+012.41E+021.82E+03 + 90L1 120.002.95E-021.30E-012.47E+003.10E+011.60E+001.61E+011.15E+027.86E+02 + 90L1 143.002.00E-027.98E-021.15E+001.26E+019.66E-018.04E+005.00E+013.04E+02 + 90L1 170.001.36E-025.13E-025.68E-015.36E+005.90E-014.11E+002.24E+011.21E+02 + 90L1 235.006.66E-032.38E-021.71E-011.18E+002.36E-011.22E+005.27E+002.27E+01 + 90L1 320.003.45E-031.20E-026.24E-023.20E-011.00E-014.09E-011.43E+005.01E+00 + 90L1 410.002.08E-037.06E-033.00E-021.24E-015.09E-021.77E-015.29E-011.59E+00 + 90L1 520.001.31E-034.34E-031.57E-025.37E-022.68E-028.18E-022.14E-015.62E-01 + 90L1 750.006.68E-042.12E-036.25E-031.69E-021.01E-022.67E-025.87E-021.27E-01 + 90L11000.004.04E-041.23E-033.21E-037.48E-034.73E-031.17E-022.30E-024.41E-02 + 90L11500.002.05E-045.88E-041.34E-032.65E-031.64E-033.88E-036.84E-031.14E-02 + 90L2 20.691.97E+008.48E+038.20E+051.00E+073.13E+011.27E+031.07E+041.70E+04 + 90L2 21.391.81E+007.21E+036.82E+059.33E+062.84E+011.12E+031.06E+042.86E+04 + 90L2 22.691.55E+005.40E+034.90E+057.82E+062.38E+019.03E+029.89E+034.51E+04 + 90L2 25.891.10E+002.84E+032.35E+054.59E+061.61E+015.55E+027.45E+035.93E+04 + 90L2 29.697.64E-011.46E+031.09E+052.36E+061.07E+013.34E+024.98E+035.17E+04 + 90L2 34.005.28E-017.59E+025.11E+041.15E+067.19E+002.02E+023.14E+033.72E+04 + 90L2 40.003.37E-013.48E+022.06E+044.62E+054.45E+001.10E+021.72E+032.18E+04 + 90L2 48.002.02E-011.46E+027.42E+031.60E+052.61E+005.60E+018.39E+021.07E+04 + 90L2 60.001.06E-015.08E+012.14E+034.22E+041.36E+002.45E+013.37E+024.09E+03 + 90L2 73.006.04E-022.03E+017.26E+021.29E+047.71E-011.19E+011.48E+021.66E+03 + 90L2 90.003.28E-027.75E+002.31E+023.62E+034.22E-015.52E+006.10E+016.16E+02 + 90L2 103.002.21E-024.19E+001.11E+021.60E+032.87E-013.38E+003.44E+013.22E+02 + 90L2 120.001.41E-022.10E+004.91E+016.37E+021.86E-011.95E+001.79E+011.53E+02 + 90L2 143.008.47E-039.65E-011.94E+012.23E+021.13E-011.04E+008.53E+006.52E+01 + 90L2 170.005.12E-034.52E-017.86E+008.02E+016.94E-025.62E-014.11E+002.81E+01 + 90L2 235.002.02E-031.13E-011.51E+001.23E+012.81E-021.82E-011.07E+005.92E+00 + 90L2 320.008.47E-043.18E-023.33E-012.19E+001.19E-026.34E-023.06E-011.39E+00 + 90L2 410.004.30E-041.19E-021.04E-015.80E-016.05E-032.78E-021.15E-014.48E-01 + 90L2 520.002.29E-044.80E-033.55E-021.71E-013.15E-031.28E-024.64E-021.57E-01 + 90L2 750.008.96E-051.27E-037.43E-032.91E-021.16E-034.04E-031.21E-023.36E-02 + 90L21000.004.41E-054.75E-042.36E-037.98E-035.28E-041.68E-034.41E-031.08E-02 + 90L21500.001.70E-051.30E-045.29E-041.50E-031.73E-045.04E-041.15E-032.40E-03 + 90L3 17.304.65E+002.18E+042.71E+064.36E+073.37E+005.41E+044.22E+073.84E+09 + 90L3 18.004.15E+001.78E+042.14E+063.80E+072.99E+004.44E+043.23E+072.84E+09 + 90L3 19.303.40E+001.25E+041.41E+062.85E+072.41E+003.13E+042.02E+071.67E+09 + 90L3 22.502.18E+005.79E+035.64E+051.34E+071.51E+001.46E+047.20E+065.21E+08 + 90L3 26.301.38E+002.64E+032.22E+055.61E+069.36E-016.70E+032.54E+061.60E+08 + 90L3 34.006.38E-017.25E+024.77E+041.20E+064.27E-011.87E+034.64E+052.33E+07 + 90L3 40.003.88E-013.21E+021.81E+044.31E+052.60E-018.31E+021.60E+056.96E+06 + 90L3 48.002.21E-011.29E+026.07E+031.34E+051.49E-013.36E+024.88E+041.81E+06 + 90L3 60.001.10E-014.22E+011.61E+033.13E+047.59E-021.11E+021.16E+043.55E+05 + 90L3 73.005.89E-021.59E+015.00E+028.62E+034.19E-024.19E+013.34E+038.63E+04 + 90L3 90.003.02E-025.63E+001.45E+022.16E+032.23E-021.49E+018.98E+021.94E+04 + 90L3 103.001.96E-022.89E+006.51E+018.81E+021.49E-027.63E+003.89E+027.52E+03 + 90L3 120.001.20E-021.36E+002.65E+013.20E+029.42E-033.59E+001.52E+022.60E+03 + 90L3 143.006.88E-035.78E-019.49E+001.00E+025.58E-031.52E+005.26E+017.80E+02 + 90L3 170.003.96E-032.49E-013.47E+003.21E+013.34E-036.49E-011.87E+012.42E+02 + 90L3 235.001.43E-035.27E-025.38E-013.88E+001.28E-031.34E-012.80E+002.86E+01 + 90L3 320.005.51E-041.23E-029.47E-025.42E-015.22E-043.01E-024.82E-013.98E+00 + 90L3 410.002.61E-043.96E-032.44E-021.17E-012.56E-049.20E-031.21E-018.59E-01 + 90L3 520.001.31E-041.38E-036.91E-032.84E-021.30E-043.00E-033.34E-022.06E-01 + 90L3 750.004.73E-052.93E-041.10E-033.64E-034.75E-055.61E-044.82E-032.47E-02 + 90L31000.002.22E-059.47E-052.88E-048.23E-042.23E-051.60E-041.11E-035.01E-03 + 90L31500.008.43E-062.23E-055.26E-051.23E-048.31E-063.15E-051.51E-045.79E-04 + 90M1 6.181.50E+001.08E+046.67E+051.09E+072.46E+033.56E+061.09E+097.85E+10 + 90M1 7.181.28E+005.73E+033.63E+058.19E+061.57E+031.71E+064.12E+082.83E+10 + 90M1 9.189.44E-012.02E+031.33E+053.52E+067.52E+025.15E+058.57E+075.23E+09 + 90M1 13.185.51E-014.29E+022.90E+048.48E+052.56E+028.94E+048.85E+064.30E+08 + 90M1 20.182.66E-016.68E+014.38E+031.31E+057.18E+011.17E+046.57E+052.32E+07 + 90M1 28.001.45E-011.55E+019.52E+022.71E+042.71E+012.51E+039.43E+042.56E+06 + 90M1 43.006.18E-022.25E+001.20E+022.97E+037.61E+003.51E+028.06E+031.53E+05 + 90M1 55.003.70E-027.58E-013.58E+017.92E+023.69E+001.17E+022.06E+033.17E+04 + 90M1 73.002.02E-022.31E-018.88E+001.69E+021.61E+003.39E+014.46E+025.40E+03 + 90M1 106.008.87E-035.78E-021.47E+002.20E+015.43E-017.01E+006.44E+015.69E+02 + 90M1 155.003.81E-031.80E-022.65E-012.93E+001.82E-011.51E+009.88E+006.39E+01 + 90M1 285.001.01E-033.87E-032.54E-021.57E-013.27E-021.53E-016.16E-012.50E+00 + 90M1 500.003.25E-041.13E-034.49E-031.67E-027.04E-032.27E-026.31E-021.76E-01 + 90M2 5.833.26E+001.14E+061.02E+091.18E+113.54E+021.33E+051.05E+071.69E+08 + 90M2 6.832.70E+005.17E+053.66E+084.01E+102.21E+026.50E+044.85E+061.24E+08 + 90M2 8.831.84E+001.45E+057.06E+076.84E+091.02E+022.07E+041.37E+064.61E+07 + 90M2 12.839.32E-012.29E+046.69E+065.20E+083.36E+014.05E+032.15E+057.67E+06 + 90M2 19.833.69E-012.71E+034.57E+052.63E+079.22E+006.40E+022.53E+047.89E+05 + 90M2 28.001.63E-015.07E+025.70E+042.55E+063.33E+001.55E+024.76E+031.24E+05 + 90M2 43.005.53E-026.47E+014.54E+031.46E+059.45E-012.77E+016.20E+021.23E+04 + 90M2 55.002.88E-022.02E+011.10E+032.91E+044.61E-011.06E+011.96E+023.28E+03 + 90M2 73.001.33E-025.38E+002.20E+024.66E+032.04E-013.57E+005.30E+017.24E+02 + 90M2 106.004.70E-039.76E-012.78E+014.38E+027.00E-028.79E-019.80E+001.02E+02 + 90M2 155.001.61E-031.80E-013.60E+004.21E+012.39E-022.19E-011.83E+001.43E+01 + 90M2 285.002.94E-041.36E-021.62E-011.19E+004.37E-032.58E-021.39E-017.03E-01 + 90M2 500.006.52E-051.48E-031.15E-025.83E-029.33E-043.95E-031.49E-025.26E-02 + 90M3 5.051.12E+012.86E+062.96E+093.77E+113.59E+017.36E+066.66E+106.95E+13 + 90M3 6.058.11E+001.15E+068.97E+081.04E+112.08E+012.98E+061.90E+101.48E+13 + 90M3 8.054.63E+002.75E+051.39E+081.36E+108.74E+007.16E+052.65E+091.31E+12 + 90M3 12.051.90E+003.62E+041.03E+077.74E+082.57E+009.54E+041.66E+084.48E+10 + 90M3 19.056.20E-013.63E+035.67E+053.07E+076.41E-019.69E+037.35E+061.06E+09 + 90M3 28.002.23E-015.25E+025.13E+042.09E+061.99E-011.42E+035.52E+054.88E+07 + 90M3 43.006.65E-026.14E+013.68E+031.07E+055.45E-021.68E+023.23E+041.74E+06 + 90M3 55.003.23E-021.80E+018.24E+021.97E+042.60E-024.94E+016.52E+032.68E+05 + 90M3 73.001.38E-024.41E+001.49E+022.84E+031.11E-021.21E+011.06E+033.25E+04 + 90M3 106.004.39E-037.00E-011.61E+012.25E+023.65E-031.91E+001.02E+022.17E+03 + 90M3 155.001.35E-031.09E-011.71E+001.76E+011.18E-032.95E-019.98E+001.52E+02 + 90M3 285.002.08E-045.95E-035.18E-023.28E-011.99E-041.51E-022.79E-012.62E+00 + 90M3 500.003.98E-054.60E-042.42E-031.03E-023.99E-051.04E-031.22E-027.95E-02 + 90M4 4.492.86E+018.38E+042.45E+091.94E+131.10E+012.42E+051.07E+094.71E+11 + 90M4 5.491.56E+013.03E+045.98E+083.35E+125.76E+008.85E+042.75E+081.04E+11 + 90M4 7.495.90E+006.29E+036.77E+072.26E+112.11E+001.87E+043.43E+071.01E+10 + 90M4 11.491.42E+007.26E+023.36E+065.71E+095.18E-012.18E+032.02E+064.12E+08 + 90M4 18.492.68E-016.61E+011.19E+051.01E+081.06E-012.00E+029.10E+041.22E+07 + 90M4 28.005.81E-028.18E+006.51E+033.13E+062.59E-022.48E+016.38E+035.89E+05 + 90M4 43.001.13E-029.44E-013.27E+029.08E+045.86E-032.88E+004.27E+022.67E+04 + 90M4 55.004.32E-032.73E-015.93E+011.22E+042.47E-038.38E-019.22E+014.63E+03 + 90M4 73.001.41E-036.59E-028.46E+001.25E+039.03E-042.03E-011.61E+016.29E+02 + 90M4 106.003.16E-041.02E-026.70E-016.47E+012.36E-043.17E-021.68E+004.70E+01 + 90M4 155.006.88E-051.55E-035.34E-023.38E+005.91E-054.82E-031.74E-013.51E+00 + 90M4 285.006.08E-068.07E-051.09E-033.53E-026.24E-062.42E-045.02E-036.23E-02 + 90M4 500.006.81E-075.87E-063.91E-056.67E-047.67E-071.60E-052.13E-041.78E-03 + 90M5 4.334.40E+017.78E+045.56E+093.50E+136.30E+001.34E+046.21E+091.72E+14 + 90M5 5.332.33E+012.68E+041.29E+095.65E+123.23E+004.75E+031.45E+092.70E+13 + 90M5 7.338.41E+005.27E+031.38E+083.51E+111.15E+009.69E+021.57E+081.58E+12 + 90M5 11.331.93E+005.72E+026.44E+068.09E+092.78E-011.11E+027.45E+063.30E+10 + 90M5 18.333.45E-014.95E+012.17E+051.32E+085.66E-021.01E+012.58E+054.75E+08 + 90M5 28.007.04E-025.70E+001.09E+043.64E+061.36E-021.23E+001.34E+041.18E+07 + 90M5 43.001.33E-026.32E-015.29E+021.00E+053.14E-031.49E-016.70E+022.91E+05 + 90M5 55.004.99E-031.78E-019.34E+011.29E+041.34E-034.48E-021.21E+023.57E+04 + 90M5 73.001.59E-034.12E-021.27E+011.25E+034.99E-041.14E-021.68E+013.28E+03 + 90M5 106.003.49E-046.02E-039.33E-015.88E+011.34E-041.91E-031.26E+001.48E+02 + 90M5 155.007.45E-058.60E-046.63E-022.71E+003.49E-053.22E-049.07E-026.69E+00 + 90M5 285.006.77E-064.15E-051.03E-032.14E-024.06E-062.06E-051.39E-035.39E-02 + 90M5 500.007.94E-073.05E-062.66E-052.88E-045.95E-071.90E-063.29E-057.44E-04 + 90N+ 50.004.79E-022.31E+011.48E+036.50E+042.03E+001.07E+026.74E+033.21E+05 + 90N+ 70.001.95E-024.56E+001.98E+025.68E+037.54E-012.31E+018.36E+022.55E+04 + 90N+ 100.007.68E-038.54E-012.52E+014.85E+022.69E-014.87E+001.01E+021.96E+03 + 90N+ 150.002.67E-031.33E-012.60E+003.33E+018.36E-028.85E-011.04E+011.24E+02 + 90N+ 200.001.28E-033.75E-025.50E-015.45E+003.67E-022.78E-012.28E+001.95E+01 + 90N+ 500.001.55E-041.13E-036.90E-033.25E-022.92E-031.02E-023.42E-021.20E-01 + 91K 113.602.87E-012.04E-014.00E-021.83E-031.20E+015.76E+015.62E+011.26E+01 + 91K 114.302.83E-012.07E-014.81E-023.91E-031.18E+015.63E+015.68E+011.50E+01 + 91K 115.602.76E-012.14E-016.35E-029.50E-031.14E+015.43E+015.77E+011.95E+01 + 91K 118.802.59E-012.28E-011.02E-013.26E-021.05E+014.95E+015.91E+012.99E+01 + 91K 122.602.40E-012.39E-011.47E-017.56E-029.63E+004.45E+015.92E+014.08E+01 + 91K 127.002.21E-012.46E-011.95E-011.41E-018.70E+003.95E+015.80E+015.11E+01 + 91K 133.001.99E-012.49E-012.51E-012.45E-017.63E+003.38E+015.51E+016.09E+01 + 91K 141.001.73E-012.45E-013.07E-013.88E-016.46E+002.78E+015.01E+016.77E+01 + 91K 153.001.43E-012.31E-013.58E-015.72E-015.12E+002.11E+014.21E+016.88E+01 + 91K 166.001.18E-012.11E-013.78E-017.07E-014.06E+001.61E+013.43E+016.35E+01 + 91K 183.009.43E-021.83E-013.73E-017.91E-013.09E+001.16E+012.62E+015.34E+01 + 91K 196.008.04E-021.64E-013.57E-018.04E-012.54E+009.25E+002.13E+014.55E+01 + 91K 213.006.63E-021.43E-013.28E-017.81E-012.01E+007.03E+001.65E+013.65E+01 + 91K 236.005.25E-021.18E-012.87E-017.13E-011.51E+005.03E+001.19E+012.70E+01 + 91K 265.004.04E-029.52E-022.40E-016.11E-011.10E+003.45E+008.13E+001.86E+01 + 91K 330.002.50E-026.23E-021.62E-014.15E-016.00E-011.72E+003.92E+008.82E+00 + 91K 415.001.54E-024.01E-021.03E-012.56E-013.21E-018.46E-011.83E+003.92E+00 + 91K 500.001.06E-022.82E-027.11E-021.69E-011.95E-014.84E-019.96E-012.03E+00 + 91K 610.007.23E-031.95E-024.76E-021.07E-011.15E-012.71E-015.28E-011.02E+00 + 91K 840.004.02E-031.10E-022.51E-025.17E-024.93E-021.10E-011.99E-013.49E-01 + 91K 1100.002.50E-036.84E-031.48E-022.84E-022.43E-025.35E-029.13E-021.49E-01 + 91K 1350.001.77E-034.76E-039.98E-031.82E-021.42E-023.14E-025.18E-028.11E-02 + 91K 1600.001.33E-033.53E-037.20E-031.27E-029.13E-032.04E-023.29E-024.99E-02 + 91L1 22.108.04E-011.89E+022.99E+035.13E+032.54E+022.95E+047.34E+054.34E+06 + 91L1 22.807.67E-011.64E+022.94E+038.59E+032.32E+022.55E+046.23E+054.13E+06 + 91L1 24.107.03E-011.28E+022.72E+031.36E+041.97E+021.97E+044.65E+053.59E+06 + 91L1 27.305.76E-017.27E+011.99E+031.78E+041.36E+021.11E+042.41E+052.30E+06 + 91L1 31.104.62E-013.99E+011.28E+031.54E+049.23E+016.07E+031.21E+051.29E+06 + 91L1 34.003.95E-012.64E+019.11E+021.24E+047.09E+014.05E+037.58E+048.37E+05 + 91L1 40.002.93E-011.23E+014.61E+027.14E+034.38E+011.94E+033.22E+043.63E+05 + 91L1 48.002.07E-015.28E+002.04E+023.34E+032.56E+018.59E+021.25E+041.36E+05 + 91L1 60.001.32E-011.92E+007.15E+011.18E+031.33E+013.23E+023.93E+033.97E+04 + 91L1 73.008.79E-028.29E-012.80E+014.41E+027.48E+001.39E+021.45E+031.33E+04 + 91L1 90.005.62E-023.69E-011.03E+011.50E+024.06E+005.75E+015.09E+024.14E+03 + 91L1 103.004.19E-022.31E-015.50E+007.45E+012.75E+003.30E+012.62E+021.96E+03 + 91L1 120.003.00E-021.43E-012.75E+003.38E+011.77E+001.77E+011.25E+028.47E+02 + 91L1 143.002.03E-028.66E-021.28E+001.38E+011.07E+008.83E+005.44E+013.27E+02 + 91L1 170.001.39E-025.51E-026.29E-015.88E+006.51E-014.51E+002.44E+011.30E+02 + 91L1 235.006.84E-032.54E-021.88E-011.30E+002.61E-011.34E+005.73E+002.46E+01 + 91L1 320.003.56E-031.27E-026.79E-023.50E-011.11E-014.47E-011.55E+005.42E+00 + 91L1 410.002.16E-037.49E-033.25E-021.35E-015.61E-021.93E-015.75E-011.72E+00 + 91L1 520.001.36E-034.60E-031.69E-025.82E-022.95E-028.94E-022.33E-016.08E-01 + 91L1 750.006.97E-042.25E-036.72E-031.82E-021.11E-022.91E-026.38E-021.38E-01 + 91L11000.004.22E-041.31E-033.45E-038.05E-035.20E-031.27E-022.50E-024.78E-02 + 91L11500.002.15E-046.26E-041.43E-032.85E-031.79E-034.23E-037.42E-031.24E-02 + 91L2 21.311.87E+007.99E+037.39E+058.70E+063.21E+011.23E+039.87E+031.50E+04 + 91L2 22.011.72E+006.82E+036.18E+058.13E+062.91E+011.09E+039.79E+032.51E+04 + 91L2 23.311.48E+005.15E+034.49E+056.87E+062.46E+018.81E+029.22E+033.98E+04 + 91L2 26.511.06E+002.76E+032.20E+054.12E+061.68E+015.49E+027.05E+035.33E+04 + 91L2 30.317.44E-011.44E+031.04E+052.16E+061.13E+013.35E+024.78E+034.74E+04 + 91L2 34.005.45E-018.27E+025.47E+041.19E+068.04E+002.19E+023.26E+033.66E+04 + 91L2 40.003.49E-013.79E+022.21E+044.81E+054.98E+001.20E+021.80E+032.20E+04 + 91L2 48.002.09E-011.59E+027.98E+031.68E+052.92E+006.09E+018.87E+021.10E+04 + 91L2 60.001.11E-015.54E+012.31E+034.46E+041.52E+002.67E+013.59E+024.25E+03 + 91L2 73.006.32E-022.22E+017.84E+021.37E+048.64E-011.30E+011.59E+021.75E+03 + 91L2 90.003.44E-028.47E+002.50E+023.87E+034.73E-016.03E+006.56E+016.52E+02 + 91L2 103.002.32E-024.58E+001.21E+021.71E+033.22E-013.70E+003.70E+013.42E+02 + 91L2 120.001.49E-022.30E+005.33E+016.84E+022.08E-012.13E+001.94E+011.63E+02 + 91L2 143.008.94E-031.06E+002.11E+012.40E+021.27E-011.14E+009.23E+006.98E+01 + 91L2 170.005.42E-034.96E-018.55E+008.65E+017.80E-026.18E-014.46E+003.02E+01 + 91L2 235.002.15E-031.24E-011.65E+001.33E+013.16E-022.00E-011.17E+006.40E+00 + 91L2 320.009.06E-043.50E-023.65E-012.38E+001.35E-027.01E-023.35E-011.50E+00 + 91L2 410.004.62E-041.31E-021.14E-016.33E-016.81E-033.08E-021.26E-014.88E-01 + 91L2 520.002.46E-045.29E-033.90E-021.87E-013.56E-031.42E-025.10E-021.71E-01 + 91L2 750.009.67E-051.40E-038.20E-033.19E-021.31E-034.49E-031.33E-023.69E-02 + 91L21000.004.79E-055.26E-042.61E-038.80E-035.96E-041.87E-034.88E-031.19E-02 + 91L21500.001.85E-051.44E-045.87E-041.66E-031.95E-045.65E-041.28E-032.66E-03 + 91L3 17.734.42E+002.06E+042.47E+063.86E+073.30E+005.29E+043.98E+073.51E+09 + 91L3 18.433.96E+001.70E+041.96E+063.37E+072.93E+004.36E+043.07E+072.62E+09 + 91L3 19.733.26E+001.20E+041.31E+062.55E+072.38E+003.11E+041.94E+071.56E+09 + 91L3 22.932.11E+005.65E+035.32E+051.22E+071.50E+001.47E+047.06E+064.99E+08 + 91L3 26.731.35E+002.61E+032.13E+055.21E+069.39E-016.84E+032.54E+061.57E+08 + 91L3 34.006.56E-017.79E+025.05E+041.24E+064.51E-012.06E+035.16E+052.58E+07 + 91L3 40.003.99E-013.45E+021.91E+044.47E+052.74E-019.19E+021.78E+057.69E+06 + 91L3 48.002.27E-011.38E+026.44E+031.39E+051.58E-013.71E+025.42E+042.00E+06 + 91L3 60.001.13E-014.53E+011.70E+033.27E+048.01E-021.23E+021.29E+043.92E+05 + 91L3 73.006.09E-021.71E+015.30E+029.02E+034.43E-024.63E+013.70E+039.51E+04 + 91L3 90.003.13E-026.05E+001.53E+022.26E+032.35E-021.64E+019.94E+022.14E+04 + 91L3 103.002.04E-023.10E+006.91E+019.25E+021.57E-028.44E+004.30E+028.29E+03 + 91L3 120.001.25E-021.46E+002.81E+013.36E+029.94E-033.97E+001.68E+022.86E+03 + 91L3 143.007.15E-036.21E-011.01E+011.06E+025.89E-031.68E+005.81E+018.58E+02 + 91L3 170.004.12E-032.68E-013.68E+003.38E+013.52E-037.17E-012.06E+012.66E+02 + 91L3 235.001.49E-035.65E-025.72E-014.10E+001.35E-031.48E-013.09E+003.14E+01 + 91L3 320.005.76E-041.32E-021.01E-015.73E-015.50E-043.31E-025.30E-014.37E+00 + 91L3 410.002.74E-044.25E-032.59E-021.24E-012.69E-041.01E-021.34E-019.42E-01 + 91L3 520.001.37E-041.47E-037.35E-033.01E-021.37E-043.30E-033.67E-022.26E-01 + 91L3 750.004.95E-053.13E-041.17E-033.87E-035.00E-056.14E-045.29E-032.71E-02 + 91L31000.002.33E-051.01E-043.07E-048.76E-042.34E-051.74E-041.21E-035.49E-03 + 91L31500.008.82E-062.36E-055.59E-051.31E-048.70E-063.40E-051.65E-046.33E-04 + 91M1 6.371.41E+001.05E+046.38E+059.77E+062.49E+033.44E+061.01E+097.01E+10 + 91M1 7.371.21E+005.66E+033.53E+057.58E+061.61E+031.68E+063.92E+082.60E+10 + 91M1 9.379.00E-012.04E+031.32E+053.39E+067.86E+025.21E+058.44E+075.00E+09 + 91M1 13.375.32E-014.46E+022.94E+048.39E+052.72E+029.31E+049.06E+064.30E+08 + 91M1 20.372.61E-017.14E+014.53E+031.33E+057.75E+011.25E+046.92E+052.41E+07 + 91M1 28.001.45E-011.74E+011.03E+032.88E+043.01E+012.79E+031.05E+052.82E+06 + 91M1 43.006.22E-022.56E+001.32E+023.19E+038.44E+003.89E+028.91E+031.68E+05 + 91M1 55.003.74E-028.66E-013.96E+018.58E+024.09E+001.29E+022.27E+033.48E+04 + 91M1 73.002.04E-022.63E-019.87E+001.85E+021.78E+003.75E+014.92E+025.92E+03 + 91M1 106.009.04E-036.48E-021.64E+002.43E+016.02E-017.74E+007.08E+016.23E+02 + 91M1 155.003.90E-031.97E-022.96E-013.25E+002.02E-011.67E+001.08E+016.98E+01 + 91M1 285.001.04E-034.15E-032.80E-021.73E-013.62E-021.68E-016.74E-012.72E+00 + 91M1 500.003.38E-041.21E-034.88E-031.83E-027.78E-032.49E-026.89E-021.92E-01 + 91M2 6.003.06E+001.07E+069.29E+081.04E+113.64E+021.29E+059.83E+061.51E+08 + 91M2 7.002.55E+005.00E+053.42E+083.62E+102.30E+026.45E+044.64E+061.13E+08 + 91M2 9.001.77E+001.44E+056.84E+076.44E+091.09E+022.10E+041.34E+064.36E+07 + 91M2 13.009.12E-012.35E+046.73E+065.11E+083.63E+014.22E+032.18E+057.55E+06 + 91M2 20.003.68E-012.84E+034.73E+052.68E+071.01E+016.80E+022.63E+048.03E+05 + 91M2 28.001.68E-015.55E+026.21E+042.75E+063.73E+001.70E+025.17E+031.33E+05 + 91M2 43.005.72E-027.09E+014.95E+031.58E+051.06E+003.05E+016.73E+021.32E+04 + 91M2 55.002.99E-022.21E+011.19E+033.15E+045.19E-011.16E+012.13E+023.53E+03 + 91M2 73.001.39E-025.90E+002.39E+025.04E+032.29E-013.93E+005.77E+017.80E+02 + 91M2 106.004.95E-031.07E+003.03E+014.75E+027.88E-029.69E-011.07E+011.10E+02 + 91M2 155.001.70E-031.98E-013.94E+004.58E+012.69E-022.42E-012.00E+001.55E+01 + 91M2 285.003.14E-041.50E-021.77E-011.31E+004.94E-032.86E-021.52E-017.68E-01 + 91M2 500.007.02E-051.64E-031.27E-026.41E-021.06E-034.40E-031.65E-025.78E-02 + 91M3 5.171.07E+012.72E+062.70E+093.34E+113.52E+017.23E+066.30E+106.38E+13 + 91M3 6.177.80E+001.12E+068.43E+089.49E+102.06E+012.99E+061.85E+101.41E+13 + 91M3 8.174.50E+002.74E+051.35E+081.29E+108.82E+007.36E+052.67E+091.30E+12 + 91M3 12.171.88E+003.71E+041.04E+077.60E+082.64E+001.01E+051.74E+084.65E+10 + 91M3 19.176.21E-013.79E+035.82E+053.10E+076.65E-011.04E+047.89E+061.13E+09 + 91M3 28.002.28E-015.68E+025.50E+042.20E+062.11E-011.58E+036.19E+055.49E+07 + 91M3 43.006.84E-026.64E+013.93E+031.13E+055.77E-021.87E+023.62E+041.94E+06 + 91M3 55.003.33E-021.95E+018.80E+022.08E+042.75E-025.49E+017.29E+032.99E+05 + 91M3 73.001.43E-024.77E+001.60E+023.00E+031.18E-021.35E+011.18E+033.62E+04 + 91M3 106.004.57E-037.57E-011.72E+012.39E+023.86E-032.13E+001.14E+022.42E+03 + 91M3 155.001.41E-031.18E-011.83E+001.86E+011.25E-033.28E-011.11E+011.68E+02 + 91M3 285.002.17E-046.42E-035.54E-023.48E-012.11E-041.68E-023.10E-012.90E+00 + 91M3 500.004.18E-054.95E-042.59E-031.10E-024.23E-051.15E-031.35E-028.77E-02 + 91M4 4.612.72E+017.96E+042.23E+091.72E+131.08E+012.38E+051.01E+094.29E+11 + 91M4 5.611.51E+012.94E+045.62E+083.09E+125.73E+008.91E+042.68E+089.82E+10 + 91M4 7.615.80E+006.30E+036.62E+072.19E+112.14E+001.93E+043.47E+079.96E+09 + 91M4 11.611.43E+007.48E+023.41E+065.80E+095.35E-012.32E+032.12E+064.24E+08 + 91M4 18.612.74E-016.96E+011.25E+051.06E+081.11E-012.17E+029.78E+041.29E+07 + 91M4 28.006.12E-028.91E+007.13E+033.46E+062.78E-022.79E+017.13E+036.54E+05 + 91M4 43.001.20E-021.03E+003.58E+021.01E+056.31E-033.23E+004.77E+022.97E+04 + 91M4 55.004.59E-032.99E-016.50E+011.35E+042.66E-039.42E-011.03E+025.14E+03 + 91M4 73.001.50E-037.20E-029.27E+001.38E+039.75E-042.28E-011.80E+016.99E+02 + 91M4 106.003.39E-041.12E-027.35E-017.17E+012.55E-043.56E-021.87E+005.23E+01 + 91M4 155.007.39E-051.70E-035.85E-023.75E+006.41E-055.42E-031.94E-013.91E+00 + 91M4 285.006.57E-068.88E-051.20E-033.91E-026.78E-062.72E-045.62E-036.95E-02 + 91M4 500.007.49E-076.46E-064.29E-057.41E-048.35E-071.80E-052.39E-041.99E-03 + 91M5 4.444.20E+017.25E+045.14E+093.12E+136.15E+001.28E+045.90E+091.58E+14 + 91M5 5.442.25E+012.56E+041.23E+095.25E+123.21E+004.64E+031.43E+092.58E+13 + 91M5 7.448.29E+005.17E+031.37E+083.42E+111.17E+009.73E+021.60E+081.58E+12 + 91M5 11.441.94E+005.77E+026.64E+068.25E+092.86E-011.14E+027.88E+063.48E+10 + 91M5 18.443.53E-015.08E+012.30E+051.38E+085.90E-021.06E+012.80E+055.16E+08 + 91M5 28.007.40E-026.04E+001.21E+044.02E+061.45E-021.33E+001.52E+041.35E+07 + 91M5 43.001.40E-026.71E-015.85E+021.10E+053.35E-031.61E-017.59E+023.32E+05 + 91M5 55.005.27E-031.89E-011.03E+021.43E+041.43E-034.84E-021.36E+024.07E+04 + 91M5 73.001.69E-034.40E-021.41E+011.38E+035.34E-041.23E-021.90E+013.73E+03 + 91M5 106.003.72E-046.43E-031.03E+006.49E+011.44E-042.06E-031.42E+001.68E+02 + 91M5 155.007.97E-059.21E-047.32E-022.99E+003.74E-053.47E-041.02E-017.59E+00 + 91M5 285.007.15E-064.46E-051.14E-032.36E-024.36E-062.22E-051.57E-036.09E-02 + 91M5 500.008.74E-073.28E-062.92E-053.17E-046.40E-072.05E-063.68E-058.39E-04 + 91N+ 50.004.94E-022.53E+011.61E+037.12E+042.26E+001.19E+027.55E+033.62E+05 + 91N+ 70.002.02E-025.00E+002.15E+026.20E+038.38E-012.57E+019.34E+022.86E+04 + 91N+ 100.007.95E-039.36E-012.75E+015.28E+022.99E-015.40E+001.13E+022.19E+03 + 91N+ 150.002.78E-031.46E-012.84E+003.63E+019.30E-029.79E-011.15E+011.38E+02 + 91N+ 200.001.33E-034.11E-026.03E-015.94E+004.08E-023.08E-012.52E+002.16E+01 + 91N+ 500.001.62E-041.24E-037.58E-033.58E-023.24E-031.13E-023.76E-021.32E-01 + 92K 116.612.73E-011.88E-013.69E-021.66E-031.21E+015.59E+015.27E+011.15E+01 + 92K 117.312.69E-011.91E-014.41E-023.52E-031.19E+015.47E+015.32E+011.36E+01 + 92K 118.612.62E-011.98E-015.80E-028.47E-031.15E+015.28E+015.41E+011.76E+01 + 92K 121.812.47E-012.10E-019.27E-022.89E-021.07E+014.83E+015.55E+012.69E+01 + 92K 125.612.30E-012.20E-011.33E-016.68E-029.80E+004.35E+015.57E+013.68E+01 + 92K 130.002.12E-012.27E-011.77E-011.25E-018.88E+003.88E+015.47E+014.61E+01 + 92K 136.001.91E-012.31E-012.29E-012.18E-017.80E+003.33E+015.22E+015.52E+01 + 92K 144.001.67E-012.29E-012.82E-013.48E-016.63E+002.75E+014.77E+016.18E+01 + 92K 156.001.39E-012.17E-013.32E-015.19E-015.28E+002.11E+014.05E+016.35E+01 + 92K 169.001.15E-012.00E-013.54E-016.49E-014.21E+001.61E+013.33E+015.93E+01 + 92K 186.009.23E-021.76E-013.53E-017.36E-013.21E+001.17E+012.56E+015.04E+01 + 92K 199.007.90E-021.58E-013.40E-017.55E-012.66E+009.39E+002.10E+014.33E+01 + 92K 216.006.55E-021.38E-013.16E-017.41E-012.11E+007.17E+001.63E+013.51E+01 + 92K 239.005.21E-021.16E-012.79E-016.85E-011.59E+005.15E+001.19E+012.62E+01 + 92K 265.004.13E-029.60E-022.40E-016.03E-011.19E+003.69E+008.49E+001.90E+01 + 92K 330.002.56E-026.36E-021.64E-014.18E-016.53E-011.84E+004.12E+009.09E+00 + 92K 415.001.59E-024.13E-021.06E-012.62E-013.50E-019.07E-011.93E+004.08E+00 + 92K 510.001.05E-022.82E-027.08E-021.66E-012.01E-014.90E-019.89E-011.98E+00 + 92K 620.007.25E-031.97E-024.80E-021.07E-011.19E-012.78E-015.33E-011.01E+00 + 92K 850.004.08E-031.13E-022.57E-025.26E-025.19E-021.15E-012.05E-013.55E-01 + 92K 1100.002.60E-037.17E-031.56E-022.98E-022.63E-025.76E-029.74E-021.58E-01 + 92K 1350.001.84E-035.00E-031.05E-021.91E-021.54E-023.38E-025.53E-028.61E-02 + 92K 1600.001.39E-033.71E-037.59E-031.34E-029.84E-032.19E-023.51E-025.30E-02 + 92L1 22.767.56E-011.80E+022.73E+034.49E+032.58E+022.85E+046.80E+053.88E+06 + 92L1 23.467.23E-011.58E+022.69E+037.48E+032.35E+022.47E+045.80E+053.70E+06 + 92L1 24.766.65E-011.24E+022.51E+031.18E+042.01E+021.92E+044.36E+053.24E+06 + 92L1 27.965.48E-017.18E+011.86E+031.58E+041.40E+021.09E+042.30E+052.11E+06 + 92L1 31.764.42E-014.01E+011.22E+031.40E+049.58E+016.09E+031.18E+051.21E+06 + 92L1 35.003.73E-012.56E+018.44E+021.11E+047.18E+013.91E+037.05E+047.54E+05 + 92L1 41.002.79E-011.23E+014.38E+026.53E+034.50E+011.91E+033.07E+043.35E+05 + 92L1 49.001.99E-015.42E+001.98E+023.14E+032.66E+018.63E+021.21E+041.29E+05 + 92L1 61.001.28E-012.02E+007.17E+011.14E+031.40E+013.31E+023.93E+033.87E+04 + 92L1 74.008.62E-028.90E-012.87E+014.37E+027.93E+001.44E+021.47E+031.32E+04 + 92L1 91.005.56E-023.99E-011.08E+011.52E+024.34E+006.03E+015.24E+024.18E+03 + 92L1 104.004.17E-022.49E-015.82E+007.66E+012.95E+003.48E+012.72E+022.00E+03 + 92L1 121.002.99E-021.53E-012.93E+003.52E+011.90E+001.88E+011.31E+028.71E+02 + 92L1 144.002.04E-029.24E-021.38E+001.46E+011.15E+009.41E+005.73E+013.40E+02 + 92L1 170.001.42E-025.94E-026.96E-016.44E+007.18E-014.94E+002.65E+011.41E+02 + 92L1 235.007.03E-032.70E-022.06E-011.42E+002.88E-011.47E+006.23E+002.65E+01 + 92L1 320.003.68E-031.35E-027.39E-023.82E-011.22E-014.89E-011.68E+005.86E+00 + 92L1 410.002.23E-037.94E-033.52E-021.46E-016.17E-022.11E-016.24E-011.86E+00 + 92L1 520.001.41E-034.88E-031.82E-026.31E-023.24E-029.76E-022.53E-016.57E-01 + 92L1 750.007.28E-042.39E-037.22E-031.96E-021.22E-023.18E-026.92E-021.49E-01 + 92L11000.004.43E-041.40E-033.70E-038.67E-035.69E-031.39E-022.71E-025.17E-02 + 92L11500.002.25E-046.66E-041.53E-033.06E-031.95E-034.60E-038.05E-031.34E-02 + 92L2 21.951.77E+007.53E+036.68E+057.57E+063.28E+011.18E+039.16E+031.33E+04 + 92L2 22.651.63E+006.46E+035.62E+057.10E+062.99E+011.06E+039.10E+032.22E+04 + 92L2 23.951.42E+004.92E+034.12E+056.04E+062.54E+018.61E+028.61E+033.53E+04 + 92L2 27.151.02E+002.67E+032.05E+053.70E+061.75E+015.44E+026.67E+034.80E+04 + 92L2 30.957.24E-011.42E+039.90E+041.98E+061.19E+013.35E+024.59E+034.35E+04 + 92L2 35.005.20E-017.83E+024.98E+041.04E+068.26E+002.13E+023.05E+033.32E+04 + 92L2 41.003.37E-013.67E+022.06E+044.36E+055.18E+001.19E+021.72E+032.03E+04 + 92L2 49.002.05E-011.57E+027.65E+031.56E+053.08E+006.13E+018.64E+021.04E+04 + 92L2 61.001.10E-015.60E+012.27E+034.28E+041.63E+002.73E+013.57E+024.11E+03 + 92L2 74.006.35E-022.28E+017.86E+021.34E+049.30E-011.35E+011.60E+021.72E+03 + 92L2 91.003.50E-028.79E+002.55E+023.87E+035.14E-016.33E+006.72E+016.54E+02 + 92L2 104.002.38E-024.79E+001.24E+021.73E+033.51E-013.91E+003.83E+013.46E+02 + 92L2 121.001.53E-022.42E+005.53E+016.98E+022.28E-012.27E+002.02E+011.67E+02 + 92L2 144.009.26E-031.12E+002.20E+012.48E+021.40E-011.22E+009.70E+007.23E+01 + 92L2 170.005.74E-035.43E-019.30E+009.32E+018.76E-026.78E-014.84E+003.24E+01 + 92L2 235.002.28E-031.37E-011.80E+001.44E+013.55E-022.20E-011.27E+006.91E+00 + 92L2 320.009.68E-043.85E-023.99E-012.59E+001.51E-027.74E-023.66E-011.63E+00 + 92L2 410.004.96E-041.44E-021.25E-016.90E-017.67E-033.41E-021.39E-015.31E-01 + 92L2 520.002.66E-045.84E-034.29E-022.05E-014.01E-031.58E-025.61E-021.87E-01 + 92L2 750.001.05E-041.55E-039.04E-033.51E-021.47E-035.00E-031.47E-024.05E-02 + 92L21000.005.21E-055.82E-042.89E-039.70E-036.73E-042.09E-035.41E-031.31E-02 + 92L21500.002.02E-051.60E-046.51E-041.84E-032.20E-046.33E-041.42E-032.94E-03 + 92L3 18.174.22E+001.96E+042.27E+063.43E+073.23E+005.18E+043.77E+073.23E+09 + 92L3 18.873.79E+001.62E+041.81E+063.01E+072.88E+004.29E+042.92E+072.43E+09 + 92L3 20.173.13E+001.16E+041.21E+062.29E+072.34E+003.08E+041.86E+071.46E+09 + 92L3 23.372.05E+005.52E+035.04E+051.12E+071.49E+001.48E+046.94E+064.78E+08 + 92L3 27.171.32E+002.59E+032.05E+054.86E+069.43E-016.97E+032.54E+061.53E+08 + 92L3 35.006.17E-017.24E+024.50E+041.07E+064.35E-011.97E+034.74E+052.29E+07 + 92L3 41.003.81E-013.27E+021.75E+043.97E+052.69E-018.98E+021.68E+057.07E+06 + 92L3 49.002.20E-011.34E+026.03E+031.27E+051.56E-013.70E+025.26E+041.90E+06 + 92L3 61.001.11E-014.49E+011.64E+033.06E+048.04E-021.25E+021.29E+043.83E+05 + 92L3 74.006.03E-021.71E+015.19E+028.62E+034.48E-024.78E+013.76E+039.50E+04 + 92L3 91.003.13E-026.15E+001.52E+022.20E+032.40E-021.72E+011.03E+032.18E+04 + 92L3 104.002.05E-023.18E+006.93E+019.10E+021.61E-028.88E+004.48E+028.52E+03 + 92L3 121.001.26E-021.51E+002.84E+013.34E+021.02E-024.21E+001.77E+022.97E+03 + 92L3 144.007.26E-036.44E-011.03E+011.06E+026.09E-031.79E+006.15E+018.99E+02 + 92L3 170.004.29E-032.88E-013.91E+003.55E+013.72E-037.91E-012.28E+012.93E+02 + 92L3 235.001.55E-036.07E-026.08E-014.32E+001.43E-031.63E-013.40E+003.44E+01 + 92L3 320.006.02E-041.42E-021.07E-016.05E-015.80E-043.65E-025.84E-014.79E+00 + 92L3 410.002.87E-044.55E-032.76E-021.31E-012.84E-041.11E-021.47E-011.03E+00 + 92L3 520.001.44E-041.58E-037.83E-033.19E-021.45E-043.62E-034.03E-022.47E-01 + 92L3 750.005.20E-053.33E-041.24E-034.11E-035.25E-056.70E-045.80E-032.97E-02 + 92L31000.002.44E-051.07E-043.26E-049.32E-042.46E-051.89E-041.33E-036.00E-03 + 92L31500.009.23E-062.49E-055.93E-051.39E-049.10E-063.67E-051.81E-046.92E-04 + 92M1 6.551.33E+001.03E+046.17E+058.92E+062.54E+033.34E+069.41E+086.34E+10 + 92M1 7.551.15E+005.62E+033.46E+057.11E+061.66E+031.66E+063.75E+082.42E+10 + 92M1 9.558.60E-012.07E+031.31E+053.29E+068.22E+025.28E+058.36E+074.82E+09 + 92M1 13.555.16E-014.65E+022.98E+048.36E+052.89E+029.70E+049.29E+064.32E+08 + 92M1 20.552.56E-017.63E+014.70E+031.35E+058.35E+011.33E+047.29E+052.50E+07 + 92M1 29.001.36E-011.67E+019.50E+022.58E+043.00E+012.63E+039.45E+042.46E+06 + 92M1 44.005.97E-022.62E+001.29E+023.04E+038.73E+003.89E+028.65E+031.59E+05 + 92M1 56.003.63E-029.12E-013.99E+018.43E+024.29E+001.32E+022.27E+033.40E+04 + 92M1 74.002.01E-022.83E-011.03E+011.87E+021.90E+003.90E+015.03E+025.97E+03 + 92M1 107.009.02E-037.03E-021.76E+002.54E+016.48E-018.21E+007.41E+016.44E+02 + 92M1 155.004.00E-032.16E-023.31E-013.59E+002.23E-011.83E+001.19E+017.62E+01 + 92M1 285.001.07E-034.45E-033.08E-021.91E-014.00E-021.85E-017.37E-012.97E+00 + 92M1 500.003.51E-041.29E-035.30E-032.00E-028.57E-032.73E-027.52E-022.08E-01 + 92M2 6.182.87E+001.01E+068.39E+089.04E+103.74E+021.25E+059.15E+061.34E+08 + 92M2 7.182.41E+004.81E+053.18E+083.26E+102.39E+026.37E+044.41E+061.03E+08 + 92M2 9.181.69E+001.43E+056.58E+076.03E+091.15E+022.13E+041.32E+064.11E+07 + 92M2 13.188.91E-012.40E+046.74E+065.00E+083.90E+014.39E+032.21E+057.41E+06 + 92M2 20.183.66E-012.98E+034.88E+052.71E+071.10E+017.22E+022.73E+048.14E+05 + 92M2 29.001.58E-015.13E+025.49E+042.34E+063.78E+001.62E+024.74E+031.18E+05 + 92M2 44.005.57E-026.96E+014.71E+031.47E+051.11E+003.07E+016.56E+021.25E+04 + 92M2 56.002.96E-022.23E+011.17E+033.02E+045.53E-011.20E+012.13E+023.44E+03 + 92M2 74.001.40E-026.07E+002.42E+025.00E+032.47E-014.11E+005.90E+017.82E+02 + 92M2 107.005.07E-031.13E+003.14E+014.85E+028.63E-021.03E+001.12E+011.13E+02 + 92M2 155.001.80E-032.18E-014.31E+004.98E+013.03E-022.67E-012.19E+001.68E+01 + 92M2 285.003.35E-041.65E-021.95E-011.43E+005.57E-033.17E-021.67E-018.38E-01 + 92M2 500.007.57E-051.82E-031.41E-027.04E-021.19E-034.90E-031.82E-026.35E-02 + 92M3 5.301.02E+012.59E+062.48E+092.97E+113.46E+017.10E+065.98E+105.88E+13 + 92M3 6.307.52E+001.09E+067.94E+088.68E+102.05E+013.00E+061.81E+101.34E+13 + 92M3 8.304.39E+002.73E+051.31E+081.22E+108.90E+007.56E+052.70E+091.29E+12 + 92M3 12.301.86E+003.80E+041.04E+077.47E+082.70E+001.06E+051.81E+084.81E+10 + 92M3 19.306.21E-013.96E+035.98E+053.13E+076.90E-011.12E+048.46E+061.21E+09 + 92M3 29.002.12E-015.14E+024.73E+041.82E+062.01E-011.47E+035.48E+054.67E+07 + 92M3 44.006.59E-026.39E+013.65E+031.02E+055.71E-021.85E+023.48E+041.82E+06 + 92M3 56.003.26E-021.92E+018.43E+021.94E+042.76E-025.58E+017.24E+032.91E+05 + 92M3 74.001.42E-024.81E+001.57E+022.89E+031.20E-021.40E+011.21E+033.65E+04 + 92M3 107.004.60E-037.80E-011.74E+012.37E+023.98E-032.26E+001.19E+022.51E+03 + 92M3 155.001.47E-031.28E-011.96E+001.98E+011.33E-033.63E-011.23E+011.87E+02 + 92M3 285.002.27E-046.93E-035.93E-023.70E-012.23E-041.86E-023.43E-013.20E+00 + 92M3 500.004.37E-055.32E-042.77E-031.17E-024.47E-051.26E-031.49E-029.68E-02 + 92M4 4.732.60E+017.60E+042.04E+091.54E+131.06E+012.35E+059.55E+083.96E+11 + 92M4 5.731.46E+012.88E+045.31E+082.87E+125.71E+009.00E+042.62E+089.36E+10 + 92M4 7.735.72E+006.33E+036.50E+072.14E+112.17E+002.01E+043.52E+079.89E+09 + 92M4 11.731.44E+007.72E+023.48E+065.91E+095.53E-012.47E+032.22E+064.38E+08 + 92M4 18.732.81E-017.33E+011.30E+051.11E+081.16E-012.36E+021.05E+051.37E+07 + 92M4 29.005.65E-028.13E+006.10E+032.86E+062.64E-022.62E+016.38E+035.63E+05 + 92M4 44.001.16E-021.00E+003.34E+029.21E+046.26E-033.23E+004.61E+022.80E+04 + 92M4 56.004.53E-032.98E-016.29E+011.29E+042.69E-039.66E-011.03E+025.03E+03 + 92M4 74.001.51E-037.36E-029.25E+001.37E+031.00E-032.40E-011.85E+017.06E+02 + 92M4 107.003.49E-041.17E-027.56E-017.36E+012.67E-043.82E-021.98E+005.45E+01 + 92M4 155.007.93E-051.87E-036.41E-024.15E+006.94E-056.09E-032.17E-014.35E+00 + 92M4 285.007.00E-069.78E-051.31E-034.34E-027.36E-063.06E-046.29E-037.74E-02 + 92M4 500.007.96E-077.12E-064.72E-058.23E-049.08E-072.02E-052.68E-042.22E-03 + 92M5 4.524.09E+016.99E+044.99E+092.97E+136.14E+001.26E+045.89E+091.55E+14 + 92M5 5.522.22E+012.51E+041.23E+095.14E+123.23E+004.66E+031.46E+092.60E+13 + 92M5 7.528.28E+005.17E+031.40E+083.46E+111.19E+009.97E+021.68E+081.65E+12 + 92M5 11.521.97E+005.89E+026.96E+068.61E+092.97E-011.19E+028.49E+063.74E+10 + 92M5 18.523.63E-015.26E+012.46E+051.47E+086.17E-021.12E+013.07E+055.69E+08 + 92M5 29.006.79E-025.35E+001.04E+043.31E+061.37E-021.21E+001.34E+041.13E+07 + 92M5 44.001.35E-026.33E-015.49E+021.01E+053.30E-031.55E-017.30E+023.11E+05 + 92M5 56.005.18E-031.83E-011.00E+021.35E+041.43E-034.78E-021.36E+023.98E+04 + 92M5 74.001.69E-034.36E-021.41E+011.36E+035.43E-041.24E-021.95E+013.79E+03 + 92M5 107.003.81E-046.54E-031.07E+006.62E+011.49E-042.13E-031.50E+001.77E+02 + 92M5 155.008.52E-059.84E-048.08E-023.29E+004.01E-053.74E-041.15E-018.60E+00 + 92M5 285.007.66E-064.78E-051.25E-032.60E-024.67E-062.39E-051.76E-036.88E-02 + 92M5 500.009.30E-073.54E-063.21E-053.49E-046.86E-072.21E-064.11E-059.45E-04 + 92N+ 50.005.07E-022.77E+011.75E+037.78E+042.49E+001.31E+028.45E+034.08E+05 + 92N+ 70.002.07E-025.47E+002.34E+026.76E+039.24E-012.83E+011.04E+033.20E+04 + 92N+ 100.008.18E-031.03E+002.99E+015.74E+023.30E-015.94E+001.25E+022.44E+03 + 92N+ 150.002.86E-031.60E-013.10E+003.95E+011.02E-011.08E+001.28E+011.52E+02 + 92N+ 200.001.38E-034.50E-026.59E-016.47E+004.50E-023.38E-012.78E+002.39E+01 + 92N+ 500.001.68E-041.34E-038.31E-033.92E-023.56E-031.23E-024.10E-021.44E-01 + 93K 119.672.59E-011.74E-013.41E-021.52E-031.23E+015.43E+014.95E+011.05E+01 + 93K 120.372.55E-011.77E-014.06E-023.18E-031.21E+015.32E+015.00E+011.24E+01 + 93K 121.672.49E-011.83E-015.31E-027.58E-031.17E+015.14E+015.08E+011.59E+01 + 93K 124.872.35E-011.94E-018.46E-022.57E-021.09E+014.71E+015.21E+012.43E+01 + 93K 128.672.19E-012.04E-011.21E-015.93E-021.00E+014.26E+015.24E+013.31E+01 + 93K 133.002.03E-012.11E-011.61E-011.10E-019.09E+003.82E+015.17E+014.15E+01 + 93K 139.001.83E-012.15E-012.09E-011.94E-018.02E+003.29E+014.95E+015.00E+01 + 93K 147.001.61E-012.14E-012.60E-013.12E-016.84E+002.74E+014.55E+015.65E+01 + 93K 159.001.35E-012.05E-013.08E-014.72E-015.47E+002.11E+013.89E+015.86E+01 + 93K 172.001.12E-011.90E-013.32E-015.97E-014.38E+001.62E+013.23E+015.53E+01 + 93K 189.009.04E-021.68E-013.35E-016.87E-013.36E+001.19E+012.50E+014.76E+01 + 93K 202.007.77E-021.53E-013.25E-017.11E-012.78E+009.54E+002.07E+014.13E+01 + 93K 219.006.46E-021.35E-013.05E-017.04E-012.22E+007.32E+001.62E+013.37E+01 + 93K 242.005.16E-021.14E-012.72E-016.58E-011.68E+005.29E+001.18E+012.55E+01 + 93K 270.004.05E-029.36E-022.33E-015.80E-011.24E+003.72E+008.34E+001.82E+01 + 93K 335.002.54E-026.31E-021.63E-014.09E-016.84E-011.88E+004.12E+008.89E+00 + 93K 420.001.59E-024.16E-021.07E-012.61E-013.70E-019.39E-011.96E+004.07E+00 + 93K 510.001.09E-022.92E-027.33E-021.72E-012.19E-015.26E-011.05E+002.07E+00 + 93K 620.007.49E-032.06E-025.00E-021.11E-011.30E-012.99E-015.66E-011.06E+00 + 93K 850.004.23E-031.18E-022.70E-025.50E-025.64E-021.24E-012.18E-013.76E-01 + 93K 1100.002.70E-037.53E-031.64E-023.13E-022.86E-026.20E-021.04E-011.68E-01 + 93K 1350.001.92E-035.26E-031.11E-022.02E-021.67E-023.64E-025.91E-029.16E-02 + 93K 1600.001.44E-033.91E-038.01E-031.41E-021.06E-022.36E-023.76E-025.64E-02 + 93L1 23.427.13E-011.73E+022.50E+033.94E+032.62E+022.75E+046.31E+053.48E+06 + 93L1 24.126.82E-011.52E+022.47E+036.54E+032.40E+022.40E+045.41E+053.32E+06 + 93L1 25.426.29E-011.20E+022.31E+031.04E+042.05E+021.88E+044.10E+052.93E+06 + 93L1 28.625.21E-017.09E+011.75E+031.41E+041.44E+021.08E+042.20E+051.94E+06 + 93L1 32.424.23E-014.04E+011.16E+031.27E+049.98E+016.12E+031.14E+051.13E+06 + 93L1 36.003.52E-012.50E+017.86E+029.98E+037.31E+013.79E+036.60E+046.84E+05 + 93L1 42.002.66E-011.24E+014.17E+025.99E+034.64E+011.89E+032.94E+043.11E+05 + 93L1 50.001.91E-015.58E+001.94E+022.95E+032.77E+018.70E+021.19E+041.23E+05 + 93L1 62.001.25E-012.14E+007.20E+011.10E+031.47E+013.39E+023.93E+033.77E+04 + 93L1 75.008.45E-029.57E-012.95E+014.34E+028.44E+001.50E+021.50E+031.31E+04 + 93L1 92.005.49E-024.32E-011.13E+011.55E+024.65E+006.34E+015.40E+024.23E+03 + 93L1 105.004.14E-022.70E-016.16E+007.88E+013.17E+003.67E+012.82E+022.04E+03 + 93L1 122.002.99E-021.65E-013.14E+003.67E+012.06E+002.00E+011.37E+028.98E+02 + 93L1 145.002.05E-029.92E-021.48E+001.54E+011.25E+001.01E+016.03E+013.53E+02 + 93L1 170.001.45E-026.44E-027.70E-017.05E+007.95E-015.42E+002.88E+011.52E+02 + 93L1 235.007.21E-032.89E-022.26E-011.56E+003.18E-011.61E+006.78E+002.87E+01 + 93L1 320.003.79E-031.44E-028.06E-024.17E-011.35E-015.35E-011.83E+006.34E+00 + 93L1 410.002.31E-038.46E-033.81E-021.59E-016.81E-022.31E-016.78E-012.01E+00 + 93L1 520.001.47E-035.20E-031.97E-026.85E-023.58E-021.07E-012.75E-017.11E-01 + 93L1 750.007.59E-042.55E-037.77E-032.12E-021.34E-023.48E-027.52E-021.61E-01 + 93L11000.004.63E-041.49E-033.97E-039.34E-036.25E-031.52E-022.95E-025.59E-02 + 93L11500.002.36E-047.09E-041.65E-033.29E-032.14E-035.02E-038.75E-031.45E-02 + 93L2 22.601.68E+007.11E+036.04E+056.60E+063.37E+011.15E+038.52E+031.18E+04 + 93L2 23.301.55E+006.13E+035.11E+056.21E+063.08E+011.02E+028.45E+031.97E+04 + 93L2 24.601.35E+004.70E+033.78E+055.32E+062.62E+018.41E+028.04E+033.13E+04 + 93L2 27.809.89E-012.59E+031.92E+053.32E+061.82E+015.38E+026.30E+034.32E+04 + 93L2 31.607.05E-011.40E+039.43E+041.82E+061.25E+013.36E+024.41E+033.99E+04 + 93L2 36.004.97E-017.44E+024.56E+049.23E+058.50E+002.08E+022.87E+033.02E+04 + 93L2 42.003.26E-013.56E+021.93E+043.96E+055.41E+001.18E+021.65E+031.88E+04 + 93L2 50.002.01E-011.55E+027.34E+031.46E+053.25E+006.20E+018.44E+029.79E+03 + 93L2 62.001.10E-015.67E+012.24E+034.11E+041.74E+002.81E+013.55E+023.98E+03 + 93L2 75.006.37E-022.33E+017.88E+021.32E+041.01E+001.40E+011.62E+021.70E+03 + 93L2 92.003.55E-029.14E+002.60E+023.87E+035.59E-016.66E+006.91E+016.58E+02 + 93L2 105.002.43E-025.02E+001.27E+021.75E+033.83E-014.14E+003.96E+013.51E+02 + 93L2 122.001.57E-022.56E+005.74E+017.13E+022.51E-012.42E+002.11E+011.71E+02 + 93L2 145.009.58E-031.19E+002.31E+012.56E+021.54E-011.31E+001.02E+017.47E+01 + 93L2 170.006.07E-035.96E-011.00E+011.01E+029.85E-027.46E-015.25E+003.48E+01 + 93L2 235.002.43E-031.50E-011.97E+001.56E+014.00E-022.43E-011.38E+007.46E+00 + 93L2 320.001.04E-034.24E-024.37E-012.82E+001.71E-028.57E-024.01E-011.77E+00 + 93L2 410.005.32E-041.59E-021.37E-017.53E-018.66E-033.78E-021.52E-015.79E-01 + 93L2 520.002.86E-046.45E-034.72E-022.24E-014.53E-031.76E-026.18E-022.05E-01 + 93L2 750.001.14E-041.72E-039.99E-033.86E-021.67E-035.58E-031.63E-024.46E-02 + 93L21000.005.66E-056.46E-043.20E-031.07E-027.61E-042.33E-036.00E-031.44E-02 + 93L21500.002.20E-051.78E-047.23E-042.04E-032.50E-047.09E-041.58E-033.27E-03 + 93L3 18.614.02E+001.87E+042.08E+063.05E+073.16E+005.09E+043.57E+072.98E+09 + 93L3 19.313.63E+001.55E+041.67E+062.69E+072.83E+004.23E+042.79E+072.25E+09 + 93L3 20.613.01E+001.12E+041.13E+062.06E+072.31E+003.06E+041.79E+071.37E+09 + 93L3 23.811.99E+005.40E+034.76E+051.02E+071.49E+001.49E+046.81E+064.59E+08 + 93L3 27.611.29E+002.56E+031.97E+054.52E+069.47E-017.12E+032.54E+061.50E+08 + 93L3 36.005.82E-016.75E+024.02E+049.25E+054.21E-011.90E+034.37E+052.05E+07 + 93L3 42.003.64E-013.12E+021.60E+043.53E+052.63E-018.81E+021.59E+056.52E+06 + 93L3 50.002.13E-011.30E+025.66E+031.16E+051.55E-013.70E+025.12E+041.80E+06 + 93L3 62.001.09E-014.44E+011.57E+032.87E+048.06E-021.27E+021.28E+043.75E+05 + 93L3 75.005.97E-021.72E+015.08E+028.25E+034.54E-024.95E+013.83E+039.51E+04 + 93L3 92.003.13E-026.26E+001.51E+022.15E+032.45E-021.80E+011.06E+032.22E+04 + 93L3 105.002.06E-023.26E+006.95E+018.96E+021.65E-029.37E+004.67E+028.77E+03 + 93L3 122.001.28E-021.56E+002.88E+013.32E+021.05E-024.47E+001.86E+023.09E+03 + 93L3 145.007.37E-036.69E-011.05E+011.06E+026.28E-031.91E+006.52E+019.43E+02 + 93L3 170.004.46E-033.09E-014.15E+003.74E+013.92E-038.73E-012.51E+013.21E+02 + 93L3 235.001.62E-036.51E-026.46E-014.55E+001.51E-031.79E-013.75E+003.78E+01 + 93L3 320.006.29E-041.52E-021.14E-016.39E-016.11E-044.02E-026.43E-015.25E+00 + 93L3 410.003.00E-044.87E-032.93E-021.39E-012.99E-041.22E-021.62E-011.13E+00 + 93L3 520.001.50E-041.69E-038.33E-033.38E-021.52E-043.97E-034.43E-022.71E-01 + 93L3 750.005.43E-053.56E-041.32E-034.37E-035.52E-057.33E-046.37E-033.25E-02 + 93L31000.002.55E-051.14E-043.47E-049.91E-042.58E-052.06E-041.46E-036.56E-03 + 93L31500.009.66E-062.64E-056.29E-051.48E-049.53E-063.96E-051.97E-047.57E-04 + 93M1 6.721.27E+001.02E+046.05E+058.32E+062.61E+033.28E+068.94E+085.85E+10 + 93M1 7.721.10E+005.65E+033.43E+056.79E+061.72E+031.66E+063.65E+082.28E+10 + 93M1 9.728.26E-012.12E+031.32E+053.24E+068.66E+025.40E+058.36E+074.70E+09 + 93M1 13.725.00E-014.87E+023.05E+048.41E+053.09E+021.02E+059.60E+064.37E+08 + 93M1 20.722.51E-018.19E+014.90E+031.38E+059.05E+011.42E+047.72E+052.60E+07 + 93M1 29.001.36E-011.87E+011.03E+032.75E+043.33E+012.92E+031.05E+052.71E+06 + 93M1 44.006.01E-022.97E+001.42E+023.28E+039.70E+004.31E+029.57E+031.75E+05 + 93M1 56.003.67E-021.04E+004.41E+019.13E+024.76E+001.46E+022.51E+033.74E+04 + 93M1 74.002.04E-023.23E-011.14E+012.04E+022.10E+004.32E+015.55E+026.54E+03 + 93M1 107.009.18E-037.92E-021.96E+002.79E+017.19E-019.07E+008.15E+017.05E+02 + 93M1 155.004.09E-032.38E-023.70E-013.97E+002.48E-012.02E+001.30E+018.33E+01 + 93M1 285.001.11E-034.79E-033.40E-022.12E-014.44E-022.03E-018.06E-013.24E+00 + 93M1 500.003.66E-041.38E-035.77E-032.19E-029.48E-033.00E-028.22E-022.27E-01 + 93M2 6.362.70E+009.62E+057.68E+088.00E+103.86E+021.23E+058.63E+061.22E+08 + 93M2 7.362.29E+004.67E+052.98E+082.96E+102.50E+026.34E+044.24E+069.50E+07 + 93M2 9.361.63E+001.42E+056.39E+075.69E+091.22E+022.17E+041.30E+063.91E+07 + 93M2 13.368.71E-012.46E+046.78E+064.92E+084.22E+014.59E+032.25E+057.32E+06 + 93M2 20.363.65E-013.12E+035.05E+052.76E+071.21E+017.68E+022.85E+048.29E+05 + 93M2 29.001.62E-015.61E+025.98E+042.53E+064.25E+001.79E+025.15E+031.26E+05 + 93M2 44.005.76E-027.62E+015.14E+031.58E+051.25E+003.38E+017.13E+021.35E+04 + 93M2 56.003.08E-022.44E+011.28E+033.27E+046.23E-011.32E+012.32E+023.71E+03 + 93M2 74.001.46E-026.66E+002.64E+025.41E+032.79E-014.53E+006.43E+018.44E+02 + 93M2 107.005.32E-031.24E+003.43E+015.26E+029.73E-021.14E+001.22E+011.22E+02 + 93M2 155.001.91E-032.39E-014.72E+005.41E+013.42E-022.95E-012.39E+001.83E+01 + 93M2 285.003.58E-041.82E-022.14E-011.56E+006.30E-033.51E-021.84E-019.15E-01 + 93M2 500.008.16E-052.01E-031.55E-027.74E-021.35E-035.46E-032.01E-026.98E-02 + 93M3 5.439.80E+002.49E+062.29E+092.66E+113.41E+017.03E+065.71E+105.46E+13 + 93M3 6.437.26E+001.07E+067.52E+087.99E+102.04E+013.02E+061.77E+101.28E+13 + 93M3 8.434.28E+002.74E+051.28E+081.16E+109.00E+007.80E+052.73E+091.29E+12 + 93M3 12.431.84E+003.90E+041.05E+077.35E+082.77E+001.12E+051.90E+085.00E+10 + 93M3 19.436.22E-014.14E+036.15E+053.16E+077.16E-011.21E+049.08E+061.29E+09 + 93M3 29.002.17E-015.56E+025.06E+041.93E+062.13E-011.64E+036.14E+055.24E+07 + 93M3 44.006.78E-026.91E+013.90E+031.08E+056.04E-022.06E+023.89E+042.04E+06 + 93M3 56.003.36E-022.08E+019.00E+022.05E+042.92E-026.20E+018.09E+033.25E+05 + 93M3 74.001.47E-025.20E+001.68E+023.05E+031.27E-021.55E+011.35E+034.07E+04 + 93M3 107.004.78E-038.43E-011.85E+012.50E+024.21E-032.51E+001.33E+022.79E+03 + 93M3 155.001.53E-031.38E-012.09E+002.09E+011.40E-034.04E-011.37E+012.07E+02 + 93M3 285.002.39E-047.47E-036.34E-023.93E-012.36E-042.06E-023.80E-013.54E+00 + 93M3 500.004.57E-055.73E-042.96E-031.25E-024.72E-051.40E-031.65E-021.07E-01 + 93M4 4.852.48E+017.27E+041.87E+091.37E+131.04E+012.33E+059.08E+083.66E+11 + 93M4 5.851.41E+012.81E+045.02E+082.67E+125.69E+009.10E+042.56E+088.93E+10 + 93M4 7.855.64E+006.36E+036.37E+072.08E+112.20E+002.08E+043.57E+079.81E+09 + 93M4 11.851.45E+007.98E+023.54E+066.01E+095.71E-012.64E+032.33E+064.52E+08 + 93M4 18.852.87E-017.72E+011.36E+051.17E+081.22E-012.56E+021.13E+051.46E+07 + 93M4 29.005.95E-028.85E+006.67E+033.17E+062.83E-022.94E+017.12E+036.25E+05 + 93M4 44.001.23E-021.09E+003.66E+021.02E+056.72E-033.63E+005.15E+023.10E+04 + 93M4 56.004.81E-033.25E-016.88E+011.43E+042.89E-031.08E+001.15E+025.58E+03 + 93M4 74.001.61E-038.05E-021.01E+011.52E+031.08E-032.69E-012.07E+017.83E+02 + 93M4 107.003.72E-041.28E-028.27E-018.14E+012.88E-044.29E-022.21E+006.05E+01 + 93M4 155.008.47E-052.05E-037.02E-024.59E+007.51E-056.84E-032.42E-014.84E+00 + 93M4 285.007.57E-061.08E-041.44E-034.80E-027.99E-063.44E-047.03E-038.63E-02 + 93M4 500.008.63E-077.83E-065.18E-059.12E-049.87E-072.26E-053.00E-042.48E-03 + 93M5 4.663.83E+016.33E+044.44E+092.52E+135.90E+001.17E+045.38E+091.35E+14 + 93M5 5.662.11E+012.34E+041.13E+094.57E+123.16E+004.44E+031.38E+092.38E+13 + 93M5 7.668.06E+004.98E+031.35E+083.26E+111.19E+009.82E+021.67E+081.60E+12 + 93M5 11.661.96E+005.86E+027.05E+068.57E+093.02E-011.21E+028.82E+063.85E+10 + 93M5 18.663.69E-015.36E+012.57E+051.53E+086.39E-021.16E+013.30E+056.08E+08 + 93M5 29.007.13E-025.67E+001.15E+043.64E+061.46E-021.31E+001.52E+041.29E+07 + 93M5 44.001.42E-026.72E-016.06E+021.11E+053.52E-031.68E-018.26E+023.54E+05 + 93M5 56.005.47E-031.95E-011.11E+021.49E+041.53E-035.16E-021.54E+024.52E+04 + 93M5 74.001.79E-034.64E-021.56E+011.49E+035.80E-041.34E-022.20E+014.30E+03 + 93M5 107.004.06E-046.97E-031.18E+007.28E+011.59E-042.29E-031.70E+002.00E+02 + 93M5 155.009.12E-051.05E-038.92E-023.62E+004.29E-054.03E-041.30E-019.73E+00 + 93M5 285.008.24E-065.12E-051.38E-032.86E-025.01E-062.58E-051.99E-037.77E-02 + 93M5 500.001.03E-063.79E-063.52E-053.84E-047.35E-072.38E-064.60E-051.06E-03 + 93N+ 50.005.30E-023.07E+011.93E+038.64E+042.83E+001.49E+029.61E+034.66E+05 + 93N+ 70.002.17E-026.08E+002.59E+027.48E+031.05E+003.21E+011.18E+033.65E+04 + 93N+ 100.008.61E-031.14E+003.31E+016.34E+023.75E-016.72E+001.42E+022.77E+03 + 93N+ 150.003.02E-031.78E-013.43E+004.36E+011.16E-011.22E+001.44E+011.72E+02 + 93N+ 200.001.46E-035.01E-027.32E-017.16E+005.11E-023.81E-013.13E+002.69E+01 + 93N+ 500.001.80E-041.50E-039.29E-034.37E-024.04E-031.39E-024.60E-021.61E-01 + 94K 122.812.46E-011.61E-013.15E-021.38E-031.25E+015.28E+014.64E+019.55E+00 + 94K 123.512.43E-011.63E-013.74E-022.87E-031.23E+015.17E+014.69E+011.12E+01 + 94K 124.812.37E-011.69E-014.88E-026.79E-031.19E+015.00E+014.77E+011.44E+01 + 94K 128.012.24E-011.80E-017.73E-022.28E-021.11E+014.60E+014.89E+012.18E+01 + 94K 131.812.09E-011.89E-011.11E-015.28E-021.02E+014.17E+014.93E+012.98E+01 + 94K 136.001.95E-011.96E-011.46E-019.64E-029.31E+003.76E+014.88E+013.72E+01 + 94K 142.001.77E-012.01E-011.91E-011.72E-018.23E+003.26E+014.70E+014.52E+01 + 94K 150.001.56E-012.01E-012.39E-012.79E-017.04E+002.72E+014.34E+015.14E+01 + 94K 162.001.31E-011.93E-012.87E-014.28E-015.66E+002.11E+013.74E+015.40E+01 + 94K 175.001.09E-011.81E-013.12E-015.49E-014.55E+001.63E+013.13E+015.15E+01 + 94K 192.008.86E-021.62E-013.19E-016.40E-013.50E+001.20E+012.45E+014.49E+01 + 94K 205.007.64E-021.48E-013.11E-016.68E-012.91E+009.70E+002.03E+013.93E+01 + 94K 222.006.38E-021.31E-012.94E-016.69E-012.33E+007.48E+001.60E+013.24E+01 + 94K 245.005.12E-021.11E-012.65E-016.33E-011.77E+005.43E+001.18E+012.47E+01 + 94K 270.004.14E-029.45E-022.33E-015.72E-011.35E+003.98E+008.69E+001.84E+01 + 94K 335.002.61E-026.44E-021.65E-014.12E-017.45E-012.01E+004.32E+009.15E+00 + 94K 420.001.64E-024.28E-021.10E-012.66E-014.02E-011.01E+002.07E+004.22E+00 + 94K 510.001.12E-023.03E-027.60E-021.77E-012.38E-015.64E-011.11E+002.16E+00 + 94K 620.007.74E-032.14E-025.21E-021.15E-011.41E-013.21E-016.01E-011.11E+00 + 94K 850.004.38E-031.23E-022.83E-025.75E-026.12E-021.33E-012.32E-013.96E-01 + 94K 1100.002.81E-037.90E-031.72E-023.28E-023.10E-026.66E-021.11E-011.78E-01 + 94K 1350.001.99E-035.53E-031.17E-022.12E-021.80E-023.91E-026.31E-029.72E-02 + 94K 1600.001.50E-034.11E-038.45E-031.49E-021.15E-022.54E-024.02E-026.00E-02 + 94L1 24.106.71E-011.66E+022.29E+033.43E+032.66E+022.66E+045.85E+053.11E+06 + 94L1 24.806.43E-011.46E+022.27E+035.69E+032.44E+022.32E+045.04E+052.98E+06 + 94L1 26.105.94E-011.17E+022.13E+039.07E+032.10E+021.83E+043.85E+052.64E+06 + 94L1 29.304.95E-017.00E+011.64E+031.25E+041.49E+021.07E+042.10E+051.78E+06 + 94L1 33.104.05E-014.06E+011.11E+031.16E+041.04E+026.13E+031.11E+051.06E+06 + 94L1 36.003.50E-012.78E+018.15E+029.67E+038.08E+014.18E+037.14E+047.10E+05 + 94L1 42.002.66E-011.38E+014.39E+026.00E+035.12E+012.08E+033.19E+043.27E+05 + 94L1 50.001.91E-016.28E+002.07E+023.03E+033.06E+019.58E+021.29E+041.30E+05 + 94L1 62.001.25E-012.42E+007.79E+011.15E+031.63E+013.73E+024.27E+034.02E+04 + 94L1 75.008.52E-021.08E+003.22E+014.60E+029.32E+001.65E+021.63E+031.41E+04 + 94L1 92.005.55E-024.86E-011.25E+011.66E+025.14E+006.96E+015.87E+024.54E+03 + 94L1 105.004.19E-023.02E-016.80E+008.49E+013.50E+004.03E+013.07E+022.19E+03 + 94L1 122.003.04E-021.83E-013.47E+003.98E+012.27E+002.19E+011.49E+029.66E+02 + 94L1 145.002.09E-021.09E-011.64E+001.68E+011.38E+001.10E+016.55E+013.80E+02 + 94L1 170.001.48E-026.99E-028.51E-017.70E+008.77E-015.94E+003.13E+011.64E+02 + 94L1 235.007.40E-033.10E-022.49E-011.70E+003.51E-011.76E+007.36E+003.09E+01 + 94L1 320.003.91E-031.53E-028.78E-024.55E-011.48E-015.85E-011.99E+006.84E+00 + 94L1 410.002.39E-039.01E-034.14E-021.74E-017.50E-022.52E-017.37E-012.17E+00 + 94L1 520.001.52E-035.53E-032.13E-027.43E-023.93E-021.17E-012.98E-017.69E-01 + 94L1 750.007.90E-042.71E-038.36E-032.29E-021.47E-023.79E-028.17E-021.75E-01 + 94L11000.004.84E-041.58E-034.27E-031.01E-026.85E-031.65E-023.20E-026.05E-02 + 94L11500.002.48E-047.56E-041.76E-033.54E-032.34E-035.47E-039.50E-031.57E-02 + 94L2 23.261.59E+006.72E+035.47E+055.75E+063.47E+011.11E+037.91E+031.05E+04 + 94L2 23.961.48E+005.82E+034.65E+055.43E+063.17E+019.98E+027.88E+031.74E+04 + 94L2 25.261.29E+004.49E+033.47E+054.69E+062.72E+018.23E+027.51E+032.78E+04 + 94L2 28.469.53E-012.52E+031.80E+052.98E+061.91E+015.33E+025.97E+033.89E+04 + 94L2 32.266.86E-011.38E+038.97E+041.66E+061.32E+013.37E+024.23E+033.66E+04 + 94L2 36.005.12E-018.12E+024.88E+049.49E+059.55E+002.25E+022.97E+032.95E+04 + 94L2 42.003.37E-013.89E+022.08E+044.11E+056.07E+001.28E+021.72E+031.88E+04 + 94L2 50.002.09E-011.70E+027.90E+031.53E+053.65E+006.73E+018.89E+021.00E+04 + 94L2 62.001.14E-016.18E+012.41E+034.34E+041.95E+003.06E+013.78E+024.14E+03 + 94L2 75.006.67E-022.55E+018.51E+021.40E+041.13E+001.53E+011.73E+021.78E+03 + 94L2 92.003.72E-029.99E+002.81E+024.12E+036.28E-017.27E+007.40E+016.94E+02 + 94L2 105.002.55E-025.49E+001.38E+021.87E+034.31E-014.52E+004.26E+013.73E+02 + 94L2 122.001.66E-022.80E+006.22E+017.64E+022.81E-012.64E+002.27E+011.83E+02 + 94L2 145.001.01E-021.30E+002.51E+012.75E+021.73E-011.43E+001.10E+017.99E+01 + 94L2 170.006.43E-036.52E-011.10E+011.08E+021.11E-018.19E-015.70E+003.74E+01 + 94L2 235.002.58E-031.65E-012.14E+001.69E+014.51E-022.68E-011.51E+008.05E+00 + 94L2 320.001.10E-034.65E-024.78E-013.06E+001.92E-029.46E-024.38E-011.92E+00 + 94L2 410.005.69E-041.75E-021.50E-018.21E-019.77E-034.18E-021.67E-016.30E-01 + 94L2 520.003.07E-047.11E-035.19E-022.45E-015.11E-031.95E-026.79E-022.24E-01 + 94L2 750.001.23E-041.90E-031.10E-024.23E-021.88E-036.20E-031.80E-024.89E-02 + 94L21000.006.12E-057.15E-043.54E-031.18E-028.60E-042.60E-036.65E-031.59E-02 + 94L21500.002.40E-051.97E-048.02E-042.25E-032.82E-047.94E-041.76E-033.62E-03 + 94L3 19.053.84E+001.78E+041.90E+062.72E+073.10E+005.00E+043.39E+072.74E+09 + 94L3 19.753.47E+001.48E+041.53E+062.40E+072.78E+004.17E+042.66E+072.09E+09 + 94L3 21.052.89E+001.08E+041.05E+061.85E+072.28E+003.04E+041.73E+071.28E+09 + 94L3 24.251.92E+005.28E+034.50E+059.34E+061.48E+001.50E+046.69E+064.40E+08 + 94L3 28.051.26E+002.54E+031.89E+054.20E+069.50E-017.26E+032.53E+061.47E+08 + 94L3 36.005.97E-017.25E+024.25E+049.54E+054.43E-012.10E+034.86E+052.26E+07 + 94L3 42.003.74E-013.35E+021.70E+043.65E+052.77E-019.73E+021.77E+057.19E+06 + 94L3 50.002.19E-011.40E+025.99E+031.21E+051.63E-014.09E+025.68E+041.99E+06 + 94L3 62.001.12E-014.78E+011.67E+033.00E+048.50E-021.41E+021.42E+044.13E+05 + 94L3 75.006.17E-021.85E+015.38E+028.62E+034.78E-025.46E+014.24E+031.05E+05 + 94L3 92.003.23E-026.72E+001.61E+022.25E+032.58E-021.99E+011.17E+032.44E+04 + 94L3 105.002.13E-023.50E+007.36E+019.39E+021.74E-021.03E+015.17E+029.63E+03 + 94L3 122.001.32E-021.67E+003.05E+013.49E+021.11E-024.93E+002.05E+023.39E+03 + 94L3 145.007.65E-037.19E-011.11E+011.12E+026.62E-032.10E+007.19E+011.04E+03 + 94L3 170.004.63E-033.32E-014.41E+003.93E+014.13E-039.63E-012.77E+013.53E+02 + 94L3 235.001.69E-036.99E-026.86E-014.80E+001.59E-031.98E-014.13E+004.14E+01 + 94L3 320.006.55E-041.63E-021.21E-016.74E-016.43E-044.42E-027.07E-015.75E+00 + 94L3 410.003.12E-045.22E-033.12E-021.46E-013.15E-041.34E-021.78E-011.24E+00 + 94L3 520.001.57E-041.80E-038.86E-033.58E-021.60E-044.36E-034.86E-022.96E-01 + 94L3 750.005.66E-053.79E-041.41E-034.63E-035.80E-058.00E-046.98E-033.55E-02 + 94L31000.002.69E-051.21E-043.68E-041.05E-032.70E-052.24E-041.59E-037.18E-03 + 94L31500.001.01E-052.79E-056.67E-051.57E-049.95E-064.27E-052.15E-048.26E-04 + 94M1 6.931.18E+009.82E+035.72E+057.38E+062.64E+033.14E+068.18E+085.14E+10 + 94M1 7.931.03E+005.54E+033.29E+056.20E+061.76E+031.62E+063.42E+082.07E+10 + 94M1 9.937.84E-012.13E+031.29E+053.07E+069.00E+025.41E+058.14E+074.43E+09 + 94M1 13.934.81E-015.03E+023.06E+048.24E+053.28E+021.05E+059.72E+064.32E+08 + 94M1 20.932.45E-018.70E+015.03E+031.39E+059.73E+011.50E+048.06E+052.67E+07 + 94M1 29.001.35E-012.09E+011.12E+032.92E+043.69E+013.24E+031.16E+052.97E+06 + 94M1 44.006.04E-023.36E+001.55E+023.51E+031.07E+014.78E+021.06E+041.92E+05 + 94M1 56.003.70E-021.18E+004.85E+019.85E+025.28E+001.62E+022.76E+034.09E+04 + 94M1 74.002.06E-023.67E-011.26E+012.21E+022.33E+004.78E+016.11E+027.16E+03 + 94M1 107.009.33E-038.92E-022.19E+003.06E+017.97E-011.00E+018.95E+017.70E+02 + 94M1 155.004.17E-032.63E-024.12E-014.38E+002.74E-012.23E+001.43E+019.09E+01 + 94M1 285.001.14E-035.17E-033.75E-022.33E-014.90E-022.23E-018.82E-013.52E+00 + 94M1 500.003.81E-041.48E-036.28E-032.40E-021.05E-023.29E-028.97E-022.47E-01 + 94M2 6.542.53E+009.12E+056.97E+087.01E+103.99E+021.19E+058.07E+061.08E+08 + 94M2 7.542.16E+004.50E+052.78E+082.67E+102.61E+026.28E+044.05E+068.65E+07 + 94M2 9.541.56E+001.41E+056.16E+075.33E+091.29E+022.20E+041.28E+063.68E+07 + 94M2 13.548.50E-012.51E+046.79E+064.81E+084.55E+014.78E+032.27E+057.18E+06 + 94M2 20.543.63E-013.27E+035.20E+052.79E+071.32E+018.16E+022.95E+048.40E+05 + 94M2 29.001.65E-016.14E+026.51E+042.72E+064.79E+001.97E+025.59E+031.34E+05 + 94M2 44.005.95E-028.35E+015.60E+031.71E+051.41E+003.72E+017.74E+021.44E+04 + 94M2 56.003.19E-022.68E+011.39E+033.53E+047.01E-011.45E+012.52E+023.98E+03 + 94M2 74.001.52E-027.31E+002.88E+025.85E+033.14E-014.98E+006.99E+019.09E+02 + 94M2 107.005.59E-031.36E+003.75E+015.70E+021.10E-011.25E+001.33E+011.32E+02 + 94M2 155.002.02E-032.63E-015.16E+005.88E+013.86E-023.26E-012.61E+001.98E+01 + 94M2 285.003.82E-042.01E-022.35E-011.70E+007.12E-033.90E-022.02E-019.99E-01 + 94M2 500.008.77E-052.23E-031.71E-028.50E-021.53E-036.08E-032.22E-027.67E-02 + 94M3 5.569.39E+002.39E+062.12E+092.38E+113.35E+016.94E+065.45E+105.07E+13 + 94M3 6.567.00E+001.04E+067.11E+087.33E+102.03E+013.04E+061.73E+101.23E+13 + 94M3 8.564.17E+002.74E+051.25E+081.10E+109.09E+008.03E+052.76E+091.28E+12 + 94M3 12.561.81E+004.00E+041.05E+077.22E+082.84E+001.18E+051.99E+085.18E+10 + 94M3 19.566.23E-014.33E+036.32E+053.18E+077.42E-011.30E+049.73E+061.37E+09 + 94M3 29.002.22E-016.01E+025.41E+042.03E+062.25E-011.82E+036.87E+055.87E+07 + 94M3 44.006.96E-027.47E+014.17E+031.14E+056.39E-022.28E+024.35E+042.28E+06 + 94M3 56.003.46E-022.24E+019.61E+022.17E+043.09E-026.88E+019.03E+033.63E+05 + 94M3 74.001.52E-025.62E+001.79E+023.22E+031.34E-021.73E+011.51E+034.52E+04 + 94M3 107.004.96E-039.11E-011.98E+012.65E+024.45E-032.78E+001.48E+023.10E+03 + 94M3 155.001.59E-031.49E-012.23E+002.21E+011.49E-034.47E-011.52E+012.29E+02 + 94M3 285.002.49E-048.06E-036.77E-024.17E-012.49E-042.28E-024.21E-013.91E+00 + 94M3 500.004.81E-056.16E-043.17E-031.33E-024.99E-051.54E-031.82E-021.18E-01 + 94M4 4.972.37E+016.96E+041.72E+091.23E+131.02E+012.30E+058.62E+083.37E+11 + 94M4 5.971.37E+012.75E+044.74E+082.48E+125.66E+009.19E+042.50E+088.49E+10 + 94M4 7.975.55E+006.39E+036.24E+072.02E+112.23E+002.16E+043.61E+079.70E+09 + 94M4 11.971.46E+008.23E+023.60E+066.10E+095.89E-012.81E+032.44E+064.65E+08 + 94M4 18.972.94E-018.13E+011.42E+051.22E+081.27E-012.78E+021.21E+051.54E+07 + 94M4 29.006.25E-029.64E+007.29E+033.50E+063.03E-023.30E+017.95E+036.93E+05 + 94M4 44.001.30E-021.19E+004.00E+021.13E+057.22E-034.08E+005.74E+023.44E+04 + 94M4 56.005.10E-033.55E-017.52E+011.58E+043.11E-031.22E+001.28E+026.19E+03 + 94M4 74.001.71E-038.80E-021.11E+011.67E+031.16E-033.02E-012.30E+018.68E+02 + 94M4 107.003.97E-041.40E-029.05E-018.99E+013.11E-044.82E-022.46E+006.71E+01 + 94M4 155.009.08E-052.25E-037.69E-025.07E+008.12E-057.68E-032.70E-015.38E+00 + 94M4 285.008.17E-061.18E-041.57E-035.32E-028.65E-063.86E-047.86E-039.61E-02 + 94M4 500.009.36E-078.60E-065.68E-051.01E-031.07E-062.54E-053.36E-042.77E-03 + 94M5 4.773.66E+015.92E+044.13E+092.26E+135.78E+001.12E+045.14E+091.25E+14 + 94M5 5.772.05E+012.23E+041.09E+094.26E+123.14E+004.34E+031.36E+092.28E+13 + 94M5 7.777.94E+004.89E+031.34E+083.18E+111.20E+009.85E+021.70E+081.61E+12 + 94M5 11.771.97E+005.89E+027.25E+068.72E+093.10E-011.24E+029.31E+064.04E+10 + 94M5 18.773.77E-015.49E+012.71E+051.60E+086.65E-021.22E+013.57E+056.59E+08 + 94M5 29.007.48E-026.00E+001.26E+044.02E+061.55E-021.41E+001.71E+041.47E+07 + 94M5 44.001.50E-027.13E-016.68E+021.22E+053.74E-031.81E-019.32E+024.03E+05 + 94M5 56.005.78E-032.07E-011.22E+021.64E+041.63E-035.55E-021.73E+025.14E+04 + 94M5 74.001.90E-034.94E-021.72E+011.64E+036.19E-041.44E-022.49E+014.88E+03 + 94M5 107.004.31E-047.43E-031.30E+008.01E+011.70E-042.46E-031.91E+002.27E+02 + 94M5 155.009.68E-051.12E-039.83E-023.98E+004.59E-054.34E-041.47E-011.10E+01 + 94M5 285.008.66E-065.49E-051.52E-033.15E-025.37E-062.77E-052.23E-038.76E-02 + 94M5 500.001.10E-064.07E-063.85E-054.22E-047.87E-072.56E-065.13E-051.20E-03 + 94N+ 50.005.46E-023.36E+012.10E+039.39E+043.15E+001.66E+021.07E+045.23E+05 + 94N+ 70.002.24E-026.65E+002.82E+028.11E+031.17E+003.57E+011.32E+034.08E+04 + 94N+ 100.008.90E-031.25E+003.60E+016.87E+024.17E-017.46E+001.58E+023.08E+03 + 94N+ 150.003.13E-031.95E-013.75E+004.74E+011.29E-011.35E+001.59E+011.91E+02 + 94N+ 200.001.52E-035.51E-028.01E-017.80E+005.68E-024.22E-013.45E+002.97E+01 + 94N+ 500.001.89E-041.63E-031.02E-024.80E-024.49E-031.53E-025.06E-021.77E-01 + 95K 126.032.34E-011.49E-012.93E-021.27E-031.27E+015.13E+014.36E+018.71E+00 + 95K 126.732.31E-011.52E-013.47E-022.61E-031.25E+015.03E+014.40E+011.02E+01 + 95K 128.032.26E-011.57E-014.50E-026.12E-031.21E+014.87E+014.48E+011.30E+01 + 95K 131.232.13E-011.67E-017.10E-022.04E-021.13E+014.49E+014.60E+011.97E+01 + 95K 135.032.00E-011.76E-011.02E-014.71E-021.04E+014.08E+014.64E+012.69E+01 + 95K 139.001.87E-011.82E-011.33E-018.41E-029.57E+003.71E+014.61E+013.33E+01 + 95K 145.001.70E-011.87E-011.75E-011.52E-018.49E+003.23E+014.46E+014.08E+01 + 95K 153.001.51E-011.89E-012.20E-012.50E-017.29E+002.70E+014.15E+014.68E+01 + 95K 165.001.27E-011.83E-012.67E-013.89E-015.88E+002.11E+013.60E+014.98E+01 + 95K 178.001.07E-011.72E-012.94E-015.06E-014.75E+001.64E+013.03E+014.80E+01 + 95K 195.008.69E-021.56E-013.04E-015.98E-013.67E+001.22E+012.39E+014.24E+01 + 95K 208.007.51E-021.43E-012.99E-016.30E-013.06E+009.87E+002.00E+013.74E+01 + 95K 225.006.30E-021.28E-012.85E-016.37E-012.45E+007.65E+001.59E+013.11E+01 + 95K 248.005.09E-021.10E-012.59E-016.09E-011.87E+005.59E+001.18E+012.40E+01 + 95K 275.004.06E-029.25E-022.28E-015.52E-011.40E+004.02E+008.54E+001.77E+01 + 95K 340.002.59E-026.41E-021.64E-014.04E-017.83E-012.06E+004.32E+008.95E+00 + 95K 425.001.64E-024.33E-021.11E-012.66E-014.26E-011.04E+002.10E+004.21E+00 + 95K 520.001.11E-023.03E-027.59E-021.75E-012.47E-015.73E-011.10E+002.12E+00 + 95K 630.007.76E-032.17E-025.27E-021.16E-011.48E-013.29E-016.07E-011.11E+00 + 95K 860.004.45E-031.27E-022.90E-025.86E-026.46E-021.38E-012.39E-014.03E-01 + 95K 1150.002.71E-037.69E-031.67E-023.14E-023.00E-026.38E-021.05E-011.65E-01 + 95K 1400.001.95E-035.47E-031.15E-022.07E-021.78E-023.84E-026.12E-029.30E-02 + 95K 1650.001.49E-034.10E-038.42E-031.47E-021.15E-022.53E-023.97E-025.87E-02 + 95L1 24.776.34E-011.60E+022.11E+033.04E+032.72E+022.58E+045.47E+052.81E+06 + 95L1 25.476.08E-011.42E+022.10E+035.02E+032.50E+022.27E+044.73E+052.70E+06 + 95L1 26.775.63E-011.14E+021.98E+038.01E+032.16E+021.80E+043.64E+052.41E+06 + 95L1 29.974.72E-016.95E+011.54E+031.12E+041.54E+021.07E+042.02E+051.65E+06 + 95L1 33.773.88E-014.09E+011.06E+031.06E+041.08E+026.18E+031.08E+059.93E+05 + 95L1 37.003.32E-012.72E+017.63E+028.75E+038.26E+014.08E+036.72E+046.47E+05 + 95L1 43.002.54E-011.39E+014.20E+025.53E+035.30E+012.07E+033.07E+043.05E+05 + 95L1 51.001.84E-016.47E+002.02E+022.86E+033.20E+019.68E+021.27E+041.24E+05 + 95L1 63.001.22E-012.56E+007.82E+011.12E+031.72E+013.84E+024.28E+033.93E+04 + 95L1 76.008.35E-021.16E+003.30E+014.57E+029.94E+001.71E+021.66E+031.40E+04 + 95L1 93.005.49E-025.27E-011.30E+011.68E+025.52E+007.32E+016.06E+024.59E+03 + 95L1 106.004.16E-023.28E-017.19E+008.73E+013.78E+004.26E+013.19E+022.24E+03 + 95L1 123.003.03E-021.99E-013.70E+004.14E+012.46E+002.33E+011.56E+029.95E+02 + 95L1 146.002.09E-021.17E-011.77E+001.76E+011.50E+001.18E+016.90E+013.96E+02 + 95L1 175.001.42E-027.06E-028.39E-017.32E+008.95E-015.83E+002.99E+011.52E+02 + 95L1 240.007.27E-033.18E-022.54E-011.70E+003.66E-011.79E+007.31E+003.01E+01 + 95L1 325.003.91E-031.59E-029.14E-024.68E-011.57E-016.08E-012.03E+006.88E+00 + 95L1 410.002.47E-039.62E-034.50E-021.89E-018.29E-022.76E-018.02E-012.35E+00 + 95L1 520.001.58E-035.91E-032.30E-028.07E-024.34E-021.28E-013.25E-018.32E-01 + 95L1 750.008.24E-042.89E-039.01E-032.48E-021.62E-024.15E-028.88E-021.89E-01 + 95L11000.005.06E-041.69E-034.59E-031.09E-027.54E-031.81E-023.48E-026.56E-02 + 95L11500.002.60E-048.06E-041.90E-033.81E-032.57E-035.98E-031.03E-021.70E-02 + 95L2 23.941.51E+006.36E+034.96E+055.02E+063.57E+011.08E+037.36E+039.32E+03 + 95L2 24.641.41E+005.53E+034.23E+054.75E+063.28E+019.71E+027.34E+031.54E+04 + 95L2 25.941.23E+004.30E+033.19E+054.13E+062.82E+018.05E+027.03E+032.47E+04 + 95L2 29.149.19E-012.45E+031.68E+052.67E+062.00E+015.28E+025.66E+033.50E+04 + 95L2 32.946.68E-011.36E+038.54E+041.52E+061.39E+013.38E+024.06E+033.36E+04 + 95L2 37.004.91E-017.77E+024.49E+048.44E+059.89E+002.21E+022.81E+032.69E+04 + 95L2 43.003.27E-013.79E+021.96E+043.75E+056.37E+001.27E+021.65E+031.75E+04 + 95L2 51.002.05E-011.69E+027.62E+031.43E+053.87E+006.80E+018.69E+029.48E+03 + 95L2 63.001.14E-016.26E+012.38E+034.17E+042.10E+003.14E+013.76E+024.01E+03 + 95L2 76.006.71E-022.62E+018.55E+021.37E+041.22E+001.59E+011.75E+021.76E+03 + 95L2 93.003.78E-021.04E+012.87E+024.12E+036.85E-017.65E+007.60E+016.97E+02 + 95L2 106.002.61E-025.75E+001.42E+021.89E+034.72E-014.78E+004.41E+013.78E+02 + 95L2 123.001.70E-022.96E+006.46E+017.81E+023.10E-012.81E+002.37E+011.87E+02 + 95L2 146.001.05E-021.39E+002.63E+012.84E+021.91E-011.53E+001.16E+018.27E+01 + 95L2 175.006.26E-036.31E-011.03E+019.87E+011.15E-018.14E-015.48E+003.49E+01 + 95L2 240.002.59E-031.66E-012.11E+001.63E+014.80E-022.75E-011.51E+007.88E+00 + 95L2 325.001.13E-034.82E-024.86E-013.06E+002.08E-029.93E-024.51E-011.95E+00 + 95L2 410.006.11E-041.93E-021.65E-018.95E-011.10E-024.64E-021.83E-016.87E-01 + 95L2 520.003.30E-047.86E-035.71E-022.68E-015.78E-032.16E-027.47E-022.45E-01 + 95L2 750.001.33E-042.10E-031.22E-024.65E-022.13E-036.92E-031.99E-025.38E-02 + 95L21000.006.65E-057.93E-043.91E-031.30E-029.74E-042.91E-037.38E-031.75E-02 + 95L21500.002.61E-052.19E-048.91E-042.50E-033.19E-048.91E-041.96E-034.01E-03 + 95L3 19.503.67E+001.70E+041.75E+062.42E+073.04E+004.92E+043.22E+072.53E+09 + 95L3 20.203.32E+001.42E+041.42E+062.15E+072.73E+004.12E+042.54E+071.94E+09 + 95L3 21.502.77E+001.04E+049.75E+051.67E+072.25E+003.02E+041.67E+071.20E+09 + 95L3 24.701.86E+005.17E+034.26E+058.55E+061.47E+001.51E+046.58E+064.22E+08 + 95L3 28.501.23E+002.52E+031.81E+053.91E+069.53E-017.42E+032.53E+061.44E+08 + 95L3 37.005.64E-016.79E+023.82E+048.31E+054.30E-012.02E+034.50E+052.03E+07 + 95L3 43.003.58E-013.20E+021.56E+043.26E+052.72E-019.57E+021.68E+056.66E+06 + 95L3 51.002.12E-011.36E+025.64E+031.10E+051.62E-014.10E+025.54E+041.89E+06 + 95L3 63.001.10E-014.74E+011.60E+032.81E+048.53E-021.44E+021.42E+044.05E+05 + 95L3 76.006.11E-021.86E+015.27E+028.25E+034.84E-025.66E+014.31E+031.05E+05 + 95L3 93.003.23E-026.85E+001.60E+022.19E+032.63E-022.08E+011.21E+032.49E+04 + 95L3 106.002.14E-023.59E+007.38E+019.24E+021.78E-021.09E+015.38E+029.91E+03 + 95L3 123.001.33E-021.73E+003.08E+013.46E+021.14E-025.23E+002.16E+023.52E+03 + 95L3 146.007.77E-037.47E-011.13E+011.12E+026.83E-032.25E+007.61E+011.08E+03 + 95L3 175.004.39E-033.09E-013.95E+003.42E+013.99E-039.22E-012.57E+013.19E+02 + 95L3 240.001.64E-036.79E-026.47E-014.41E+001.57E-031.97E-014.03E+003.96E+01 + 95L3 325.006.52E-041.63E-021.18E-016.46E-016.47E-044.52E-027.12E-015.72E+00 + 95L3 410.003.26E-045.59E-033.32E-021.55E-013.31E-041.48E-021.95E-011.36E+00 + 95L3 520.001.64E-041.93E-039.41E-033.79E-021.68E-044.79E-035.34E-023.24E-01 + 95L3 750.005.93E-054.04E-041.50E-034.92E-036.09E-058.76E-047.66E-033.88E-02 + 95L31000.002.80E-051.28E-043.91E-041.12E-032.83E-052.44E-041.75E-037.85E-03 + 95L31500.001.05E-052.94E-057.07E-051.67E-041.04E-054.61E-052.35E-049.02E-04 + 95M1 7.121.12E+009.66E+035.54E+056.80E+062.70E+033.06E+067.68E+084.67E+10 + 95M1 8.129.76E-015.52E+033.23E+055.84E+061.83E+031.61E+063.29E+081.92E+10 + 95M1 10.127.49E-012.17E+031.29E+052.98E+069.45E+025.50E+058.05E+074.27E+09 + 95M1 14.124.65E-015.24E+023.11E+048.21E+053.50E+021.10E+059.95E+064.32E+08 + 95M1 21.122.40E-019.29E+015.22E+031.41E+051.05E+021.60E+048.48E+052.76E+07 + 95M1 29.001.35E-012.34E+011.22E+033.11E+044.10E+013.61E+031.29E+053.27E+06 + 95M1 44.006.06E-023.80E+001.70E+023.78E+031.19E+015.30E+021.17E+042.11E+05 + 95M1 56.003.73E-021.34E+005.33E+011.07E+035.87E+001.80E+023.05E+034.49E+04 + 95M1 74.002.09E-024.18E-011.40E+012.41E+022.59E+005.29E+016.73E+027.85E+03 + 95M1 107.009.48E-031.01E-012.44E+003.35E+018.85E-011.11E+019.84E+018.43E+02 + 95M1 155.004.26E-032.92E-024.61E-014.84E+003.04E-012.46E+001.57E+019.93E+01 + 95M1 285.001.18E-035.60E-034.15E-022.58E-015.44E-022.46E-019.65E-013.84E+00 + 95M1 500.003.96E-041.59E-036.86E-032.63E-021.16E-023.61E-029.80E-022.69E-01 + 95M2 6.712.40E+008.80E+056.50E+086.36E+104.16E+021.19E+057.75E+061.00E+08 + 95M2 7.712.06E+004.42E+052.65E+082.48E+102.75E+026.33E+043.95E+068.12E+07 + 95M2 9.711.50E+001.41E+056.05E+075.11E+091.38E+022.26E+041.28E+063.55E+07 + 95M2 13.718.33E-012.59E+046.88E+064.77E+084.95E+015.02E+032.33E+057.15E+06 + 95M2 20.713.62E-013.44E+035.41E+052.86E+071.46E+018.71E+023.09E+048.60E+05 + 95M2 29.001.69E-016.73E+027.10E+042.94E+065.40E+002.18E+026.08E+031.44E+05 + 95M2 44.006.14E-029.16E+016.10E+031.85E+051.59E+004.10E+018.42E+021.55E+04 + 95M2 56.003.31E-022.94E+011.52E+033.81E+047.92E-011.60E+012.74E+024.29E+03 + 95M2 74.001.59E-028.03E+003.14E+026.33E+033.55E-015.50E+007.62E+019.81E+02 + 95M2 107.005.87E-031.50E+004.09E+016.18E+021.24E-011.39E+001.45E+011.43E+02 + 95M2 155.002.13E-032.90E-015.65E+006.40E+014.37E-023.61E-012.86E+002.15E+01 + 95M2 285.004.08E-042.22E-022.59E-011.86E+008.06E-034.33E-022.22E-011.09E+00 + 95M2 500.009.46E-052.47E-031.89E-029.35E-021.74E-036.78E-032.45E-028.43E-02 + 95M3 5.679.12E+002.34E+062.01E+092.21E+113.34E+017.00E+065.35E+104.88E+13 + 95M3 6.676.83E+001.04E+066.88E+086.94E+102.04E+013.11E+061.74E+101.21E+13 + 95M3 8.674.10E+002.78E+051.24E+081.07E+109.24E+008.39E+052.84E+091.31E+12 + 95M3 12.671.80E+004.14E+041.07E+077.20E+082.93E+001.26E+052.10E+085.45E+10 + 95M3 19.676.26E-014.55E+036.54E+053.24E+077.72E-011.40E+041.05E+071.48E+09 + 95M3 29.002.27E-016.49E+025.79E+042.15E+062.38E-012.02E+037.69E+056.58E+07 + 95M3 44.007.16E-028.07E+014.45E+031.20E+056.76E-022.54E+024.86E+042.55E+06 + 95M3 56.003.57E-022.43E+011.03E+032.29E+043.27E-027.65E+011.01E+044.05E+05 + 95M3 74.001.57E-026.08E+001.91E+023.40E+031.42E-021.92E+011.68E+035.04E+04 + 95M3 107.005.14E-039.84E-012.11E+012.80E+024.71E-033.09E+001.64E+023.44E+03 + 95M3 155.001.65E-031.61E-012.38E+002.34E+011.57E-034.97E-011.69E+012.54E+02 + 95M3 285.002.60E-048.69E-037.23E-024.42E-012.64E-042.53E-024.66E-014.32E+00 + 95M3 500.005.04E-056.63E-043.38E-031.41E-025.27E-051.70E-032.02E-021.30E-01 + 95M4 5.092.27E+016.68E+041.58E+091.10E+131.00E+012.29E+058.20E+083.11E+11 + 95M4 6.091.32E+012.70E+044.48E+082.30E+125.64E+009.30E+042.45E+088.09E+10 + 95M4 8.095.47E+006.43E+036.11E+071.96E+112.25E+002.24E+043.65E+079.61E+09 + 95M4 12.091.46E+008.50E+023.65E+066.19E+096.07E-012.99E+032.55E+064.78E+08 + 95M4 19.093.00E-018.56E+011.48E+051.28E+081.33E-013.02E+021.30E+051.63E+07 + 95M4 29.006.57E-021.05E+017.96E+033.87E+063.24E-023.71E+018.87E+037.68E+05 + 95M4 44.001.37E-021.30E+004.36E+021.24E+057.74E-034.58E+006.40E+023.81E+04 + 95M4 56.005.40E-033.88E-018.22E+011.74E+043.34E-031.37E+001.43E+026.85E+03 + 95M4 74.001.82E-039.62E-021.21E+011.85E+031.25E-033.40E-012.57E+019.63E+02 + 95M4 107.004.24E-041.53E-029.89E-019.93E+013.35E-045.41E-022.74E+007.44E+01 + 95M4 155.009.72E-052.47E-038.41E-025.60E+008.77E-058.63E-033.02E-015.97E+00 + 95M4 285.008.77E-061.30E-041.72E-035.88E-029.37E-064.34E-048.78E-031.07E-01 + 95M4 500.001.00E-069.48E-066.22E-051.12E-031.16E-062.85E-053.76E-043.09E-03 + 95M5 4.893.50E+015.55E+043.86E+092.04E+135.67E+001.08E+044.94E+091.16E+14 + 95M5 5.891.98E+012.14E+041.04E+093.99E+123.12E+004.25E+031.34E+092.20E+13 + 95M5 7.897.82E+004.80E+031.34E+083.10E+111.21E+009.88E+021.74E+081.62E+12 + 95M5 11.891.98E+005.93E+027.47E+068.88E+093.18E-011.28E+029.84E+064.24E+10 + 95M5 18.893.85E-015.63E+012.86E+051.68E+086.91E-021.27E+013.87E+057.13E+08 + 95M5 29.007.83E-026.34E+001.39E+044.42E+061.64E-021.52E+001.93E+041.68E+07 + 95M5 44.001.57E-027.55E-017.37E+021.34E+053.98E-031.94E-011.05E+034.58E+05 + 95M5 56.006.09E-032.19E-011.35E+021.80E+041.74E-035.98E-021.96E+025.84E+04 + 95M5 74.002.01E-035.24E-021.90E+011.80E+036.60E-041.55E-022.81E+015.54E+03 + 95M5 107.004.57E-047.91E-031.43E+008.80E+011.81E-042.65E-032.16E+002.57E+02 + 95M5 155.001.03E-041.20E-031.08E-014.38E+004.90E-054.66E-041.65E-011.24E+01 + 95M5 285.009.27E-065.87E-051.67E-033.46E-025.74E-062.98E-052.51E-039.87E-02 + 95M5 500.001.18E-064.36E-064.22E-054.63E-048.42E-072.75E-065.73E-051.34E-03 + 95N+ 50.005.67E-023.72E+012.32E+031.04E+053.55E+001.87E+021.22E+045.97E+05 + 95N+ 70.002.33E-027.37E+003.11E+028.94E+031.32E+004.01E+011.49E+034.63E+04 + 95N+ 100.009.28E-031.39E+003.97E+017.56E+024.69E-018.36E+001.78E+023.48E+03 + 95N+ 150.003.28E-032.17E-014.14E+005.22E+011.46E-011.51E+001.79E+012.14E+02 + 95N+ 200.001.59E-036.12E-028.87E-018.60E+006.39E-024.71E-013.86E+003.33E+01 + 95N+ 500.001.99E-041.81E-031.14E-025.34E-025.03E-031.71E-025.62E-021.96E-01 + 96K 129.272.23E-011.39E-012.75E-021.18E-031.29E+015.00E+014.11E+017.97E+00 + 96K 129.972.20E-011.41E-013.24E-022.39E-031.27E+014.90E+014.14E+019.30E+00 + 96K 131.272.15E-011.46E-014.18E-025.56E-031.23E+014.75E+014.22E+011.18E+01 + 96K 134.472.04E-011.56E-016.57E-021.84E-021.15E+014.39E+014.33E+011.78E+01 + 96K 138.271.91E-011.64E-019.41E-024.23E-021.06E+014.00E+014.38E+012.43E+01 + 96K 142.001.80E-011.70E-011.21E-017.34E-029.85E+003.67E+014.36E+012.98E+01 + 96K 148.001.64E-011.76E-011.60E-011.34E-018.75E+003.20E+014.24E+013.68E+01 + 96K 156.001.46E-011.78E-012.04E-012.24E-017.54E+002.70E+013.96E+014.27E+01 + 96K 168.001.23E-011.74E-012.50E-013.54E-016.11E+002.11E+013.47E+014.60E+01 + 96K 181.001.04E-011.65E-012.78E-014.67E-014.95E+001.66E+012.94E+014.48E+01 + 96K 198.008.53E-021.50E-012.90E-015.59E-013.84E+001.24E+012.35E+014.00E+01 + 96K 211.007.40E-021.39E-012.88E-015.95E-013.21E+001.00E+011.97E+013.56E+01 + 96K 228.006.23E-021.25E-012.76E-016.07E-012.58E+007.82E+001.58E+012.99E+01 + 96K 251.005.05E-021.08E-012.54E-015.87E-011.98E+005.75E+001.18E+012.33E+01 + 96K 280.003.99E-029.08E-022.23E-015.33E-011.46E+004.06E+008.41E+001.70E+01 + 96K 345.002.57E-026.39E-021.63E-013.97E-018.21E-012.11E+004.32E+008.76E+00 + 96K 430.001.65E-024.37E-021.12E-012.66E-014.50E-011.08E+002.13E+004.20E+00 + 96K 520.001.14E-023.15E-027.88E-021.80E-012.69E-016.15E-011.17E+002.21E+00 + 96K 630.008.02E-032.26E-025.50E-021.20E-011.61E-013.54E-016.44E-011.16E+00 + 96K 860.004.62E-031.33E-023.05E-026.13E-027.03E-021.49E-012.55E-014.26E-01 + 96K 1150.002.81E-038.08E-031.76E-023.30E-023.25E-026.87E-021.12E-011.75E-01 + 96K 1400.002.03E-035.75E-031.21E-022.18E-021.93E-024.13E-026.54E-029.88E-02 + 96K 1650.001.55E-034.32E-038.90E-031.55E-021.24E-022.72E-024.24E-026.24E-02 + 96L1 25.525.94E-011.53E+021.93E+032.66E+032.75E+022.48E+045.04E+052.50E+06 + 96L1 26.225.71E-011.36E+021.91E+034.36E+032.54E+022.19E+044.38E+052.40E+06 + 96L1 27.525.31E-011.10E+021.82E+036.98E+032.20E+021.75E+043.40E+052.15E+06 + 96L1 30.724.47E-016.83E+011.43E+039.93E+031.59E+021.05E+041.92E+051.50E+06 + 96L1 34.523.70E-014.09E+011.00E+039.51E+031.12E+026.17E+031.04E+059.20E+05 + 96L1 38.003.14E-012.68E+017.13E+027.88E+038.45E+013.98E+036.32E+045.88E+05 + 96L1 44.002.42E-011.39E+014.01E+025.08E+035.48E+012.06E+032.95E+042.83E+05 + 96L1 52.001.77E-016.66E+001.98E+022.69E+033.35E+019.78E+021.24E+041.18E+05 + 96L1 64.001.19E-012.70E+007.85E+011.09E+031.82E+013.94E+024.29E+033.84E+04 + 96L1 77.008.18E-021.25E+003.38E+014.53E+021.06E+011.78E+021.68E+031.39E+04 + 96L1 94.005.42E-025.71E-011.36E+011.71E+025.92E+007.69E+016.24E+024.64E+03 + 96L1 107.004.13E-023.56E-017.58E+008.95E+014.07E+004.51E+013.31E+022.28E+03 + 96L1 124.003.02E-022.16E-013.94E+004.29E+012.66E+002.48E+011.63E+021.02E+03 + 96L1 147.002.10E-021.27E-011.90E+001.85E+011.63E+001.26E+017.27E+014.10E+02 + 96L1 175.001.45E-027.72E-029.26E-017.98E+009.90E-016.39E+003.24E+011.64E+02 + 96L1 240.007.46E-033.44E-022.79E-011.85E+004.05E-011.96E+007.94E+003.25E+01 + 96L1 325.004.03E-031.70E-029.98E-025.10E-011.74E-016.65E-012.21E+007.43E+00 + 96L1 410.002.56E-031.03E-024.89E-022.06E-019.16E-023.02E-018.71E-012.54E+00 + 96L1 520.001.64E-036.31E-032.49E-028.76E-024.79E-021.40E-013.53E-019.00E-01 + 96L1 750.008.60E-043.08E-039.72E-032.68E-021.79E-024.53E-029.65E-022.05E-01 + 96L11000.005.29E-041.80E-034.94E-031.17E-028.29E-031.97E-023.78E-027.10E-02 + 96L11500.002.73E-048.60E-042.04E-034.10E-032.81E-036.53E-031.12E-021.85E-02 + 96L2 24.651.43E+006.01E+034.49E+054.38E+063.68E+011.04E+036.84E+038.32E+03 + 96L2 25.351.34E+005.25E+033.85E+054.15E+063.38E+019.44E+026.83E+031.36E+04 + 96L2 26.651.18E+004.11E+032.92E+053.64E+062.92E+017.87E+026.56E+032.19E+04 + 96L2 29.858.85E-012.38E+031.57E+052.39E+062.09E+015.23E+025.34E+033.15E+04 + 96L2 33.656.49E-011.34E+038.11E+041.39E+061.47E+013.38E+023.89E+033.07E+04 + 96L2 38.004.71E-017.45E+024.15E+047.53E+051.03E+012.17E+022.65E+032.46E+04 + 96L2 44.003.18E-013.71E+021.85E+043.42E+056.69E+001.27E+021.59E+031.62E+04 + 96L2 52.002.01E-011.68E+027.35E+031.34E+054.11E+006.89E+018.50E+028.97E+03 + 96L2 64.001.13E-016.35E+012.35E+034.01E+042.25E+003.23E+013.75E+023.88E+03 + 96L2 77.006.75E-022.70E+018.60E+021.35E+041.32E+001.65E+011.77E+021.73E+03 + 96L2 94.003.84E-021.08E+012.93E+024.12E+037.48E-018.05E+007.80E+016.99E+02 + 96L2 107.002.66E-026.03E+001.47E+021.91E+035.18E-015.06E+004.56E+013.83E+02 + 96L2 124.001.75E-023.12E+006.71E+017.98E+023.41E-013.00E+002.47E+011.91E+02 + 96L2 147.001.08E-021.47E+002.76E+012.93E+022.11E-011.64E+001.22E+018.56E+01 + 96L2 175.006.62E-036.93E-011.12E+011.06E+021.30E-018.95E-015.94E+003.75E+01 + 96L2 240.002.75E-031.82E-012.30E+001.76E+015.42E-023.03E-011.64E+008.50E+00 + 96L2 325.001.21E-035.31E-025.33E-013.33E+002.35E-021.10E-014.93E-012.11E+00 + 96L2 410.006.55E-042.13E-021.81E-019.76E-011.25E-025.14E-022.01E-017.48E-01 + 96L2 520.003.55E-048.68E-036.28E-022.93E-016.54E-032.40E-028.22E-022.67E-01 + 96L2 750.001.44E-042.33E-031.34E-025.11E-022.42E-037.71E-032.20E-025.90E-02 + 96L21000.007.23E-058.80E-044.33E-031.43E-021.10E-033.25E-038.18E-031.93E-02 + 96L21500.002.85E-052.43E-049.90E-042.76E-033.61E-049.99E-042.18E-034.44E-03 + 96L3 19.973.50E+001.62E+041.60E+062.16E+072.98E+004.83E+043.05E+072.33E+09 + 96L3 20.673.17E+001.36E+041.30E+061.92E+072.68E+004.06E+042.42E+071.80E+09 + 96L3 21.972.66E+001.00E+049.05E+051.50E+072.22E+003.00E+041.60E+071.13E+09 + 96L3 25.171.80E+005.06E+034.02E+057.80E+061.47E+001.52E+046.44E+064.04E+08 + 96L3 28.971.20E+002.50E+031.74E+053.63E+069.54E-017.56E+032.52E+061.40E+08 + 96L3 38.005.34E-016.39E+023.44E+047.26E+054.17E-011.96E+034.19E+051.84E+07 + 96L3 44.003.42E-013.06E+021.44E+042.92E+052.67E-019.43E+021.60E+056.18E+06 + 96L3 52.002.05E-011.33E+025.31E+031.01E+051.61E-014.11E+025.41E+041.81E+06 + 96L3 64.001.08E-014.71E+011.54E+032.64E+048.56E-021.47E+021.42E+043.97E+05 + 96L3 77.006.05E-021.88E+015.16E+027.90E+034.90E-025.86E+014.39E+031.05E+05 + 96L3 94.003.23E-026.98E+001.59E+022.13E+032.68E-022.18E+011.25E+032.53E+04 + 96L3 107.002.14E-023.68E+007.40E+019.08E+021.82E-021.15E+015.61E+021.02E+04 + 96L3 124.001.35E-021.78E+003.11E+013.44E+021.17E-025.55E+002.27E+023.65E+03 + 96L3 147.007.88E-037.76E-011.15E+011.12E+027.05E-032.40E+008.06E+011.14E+03 + 96L3 175.004.56E-033.32E-014.19E+003.59E+014.20E-031.02E+002.83E+013.49E+02 + 96L3 240.001.71E-037.29E-026.86E-014.64E+001.65E-032.17E-014.43E+004.34E+01 + 96L3 325.006.78E-041.75E-021.25E-016.81E-016.81E-044.97E-027.83E-016.26E+00 + 96L3 410.003.41E-045.99E-033.52E-021.63E-013.48E-041.63E-022.14E-011.48E+00 + 96L3 520.001.71E-042.06E-031.00E-024.00E-021.77E-045.25E-035.86E-023.55E-01 + 96L3 750.006.19E-054.31E-041.59E-035.21E-036.39E-059.57E-048.40E-034.25E-02 + 96L31000.002.92E-051.36E-044.15E-041.19E-032.97E-052.65E-041.91E-038.57E-03 + 96L31500.001.10E-053.11E-057.49E-051.77E-041.09E-054.97E-052.57E-049.85E-04 + 96M1 7.331.05E+009.44E+035.32E+056.23E+062.76E+032.96E+067.14E+084.19E+10 + 96M1 8.339.24E-015.47E+033.14E+055.46E+061.88E+031.58E+063.12E+081.77E+10 + 96M1 10.337.13E-012.19E+031.28E+052.88E+069.88E+025.55E+057.90E+074.07E+09 + 96M1 14.334.48E-015.44E+023.15E+048.13E+053.72E+021.14E+051.01E+074.30E+08 + 96M1 21.332.34E-019.89E+015.40E+031.43E+051.14E+021.70E+048.88E+052.84E+07 + 96M1 29.001.35E-012.61E+011.32E+033.31E+044.56E+014.00E+031.43E+053.59E+06 + 96M1 44.006.09E-024.28E+001.86E+024.06E+031.33E+015.88E+021.29E+042.31E+05 + 96M1 56.003.75E-021.52E+005.86E+011.15E+036.51E+001.99E+023.36E+034.93E+04 + 96M1 74.002.11E-024.75E-011.54E+012.62E+022.88E+005.85E+017.41E+028.59E+03 + 96M1 107.009.64E-031.14E-012.71E+003.68E+019.82E-011.22E+011.08E+029.22E+02 + 96M1 155.004.36E-033.25E-025.13E-015.33E+003.38E-012.71E+001.72E+011.09E+02 + 96M1 285.001.22E-036.07E-034.59E-022.84E-016.03E-022.71E-011.06E+004.19E+00 + 96M1 500.004.11E-041.70E-037.48E-032.88E-021.28E-023.96E-021.07E-012.93E-01 + 96M2 6.942.21E+008.15E+055.72E+085.35E+104.24E+021.13E+057.03E+068.67E+07 + 96M2 7.941.92E+004.18E+052.40E+082.15E+102.84E+026.14E+043.66E+067.16E+07 + 96M2 9.941.42E+001.38E+055.69E+074.64E+091.45E+022.26E+041.22E+063.25E+07 + 96M2 13.948.05E-012.61E+046.76E+064.56E+085.31E+015.16E+032.32E+056.86E+06 + 96M2 20.943.57E-013.57E+035.51E+052.84E+071.59E+019.18E+023.17E+048.59E+05 + 96M2 29.001.73E-017.37E+027.73E+043.16E+066.09E+002.40E+026.58E+031.53E+05 + 96M2 44.006.32E-021.00E+026.64E+031.99E+051.80E+004.51E+019.14E+021.66E+04 + 96M2 56.003.43E-023.22E+011.66E+034.11E+048.94E-011.76E+012.97E+024.60E+03 + 96M2 74.001.65E-028.81E+003.42E+026.84E+034.01E-016.06E+008.28E+011.06E+03 + 96M2 107.006.15E-031.64E+004.47E+016.70E+021.40E-011.53E+001.58E+011.54E+02 + 96M2 155.002.25E-033.19E-016.18E+006.95E+014.94E-023.99E-013.13E+002.33E+01 + 96M2 285.004.36E-042.45E-022.84E-012.03E+009.14E-034.80E-022.44E-011.19E+00 + 96M2 500.001.02E-042.74E-032.09E-021.03E-011.97E-037.56E-032.71E-029.25E-02 + 96M3 5.848.59E+002.18E+061.78E+091.87E+113.23E+016.71E+064.89E+104.28E+13 + 96M3 6.846.49E+009.86E+056.26E+086.07E+102.00E+013.05E+061.64E+101.10E+13 + 96M3 8.843.95E+002.72E+051.17E+089.77E+099.20E+008.45E+052.79E+091.25E+12 + 96M3 12.841.76E+004.18E+041.05E+076.89E+082.97E+001.31E+052.15E+085.49E+10 + 96M3 19.846.22E-014.71E+036.62E+053.20E+077.94E-011.49E+041.11E+071.54E+09 + 96M3 29.002.32E-017.02E+026.18E+042.26E+062.52E-012.25E+038.60E+057.36E+07 + 96M3 44.007.34E-028.73E+014.75E+031.26E+057.14E-022.82E+025.42E+042.84E+06 + 96M3 56.003.67E-022.62E+011.09E+032.41E+043.45E-028.50E+011.12E+044.50E+05 + 96M3 74.001.62E-026.57E+002.04E+023.59E+031.50E-022.13E+011.87E+035.60E+04 + 96M3 107.005.32E-031.06E+002.25E+012.95E+024.98E-033.43E+001.83E+023.81E+03 + 96M3 155.001.72E-031.74E-012.54E+002.47E+011.66E-035.51E-011.88E+012.81E+02 + 96M3 285.002.72E-049.38E-037.72E-024.69E-012.79E-042.80E-025.16E-014.77E+00 + 96M3 500.005.30E-057.13E-043.62E-031.50E-025.56E-051.87E-032.23E-021.43E-01 + 96M4 5.222.16E+016.38E+041.44E+099.80E+129.82E+002.25E+057.75E+082.85E+11 + 96M4 6.221.28E+012.63E+044.20E+082.12E+125.60E+009.37E+042.38E+087.65E+10 + 96M4 8.225.37E+006.44E+035.95E+071.89E+112.28E+002.32E+043.67E+079.45E+09 + 96M4 12.221.46E+008.76E+023.69E+066.25E+096.24E-013.18E+032.66E+064.89E+08 + 96M4 19.223.06E-019.00E+011.54E+051.34E+081.39E-013.28E+021.38E+051.72E+07 + 96M4 29.006.90E-021.14E+018.69E+034.27E+063.47E-024.16E+019.89E+038.51E+05 + 96M4 44.001.44E-021.42E+004.76E+021.37E+058.29E-035.14E+007.13E+024.22E+04 + 96M4 56.005.72E-034.24E-018.97E+011.92E+043.58E-031.54E+001.59E+027.59E+03 + 96M4 74.001.93E-031.05E-011.32E+012.04E+031.34E-033.81E-012.86E+011.07E+03 + 96M4 107.004.51E-041.68E-021.08E+001.10E+023.61E-046.08E-023.06E+008.25E+01 + 96M4 155.001.04E-042.71E-039.18E-026.18E+009.46E-059.70E-033.36E-016.62E+00 + 96M4 285.009.49E-061.43E-041.88E-036.50E-021.01E-054.87E-049.80E-031.19E-01 + 96M4 500.001.08E-061.04E-056.81E-051.24E-031.26E-063.20E-054.20E-043.44E-03 + 96M5 5.003.35E+015.19E+043.59E+091.84E+135.54E+001.03E+044.72E+091.07E+14 + 96M5 6.001.92E+012.04E+049.99E+083.71E+123.09E+004.15E+031.32E+092.10E+13 + 96M5 8.007.69E+004.69E+031.33E+083.01E+111.22E+009.89E+021.77E+081.62E+12 + 96M5 12.001.98E+005.95E+027.67E+069.00E+093.26E-011.31E+021.04E+074.43E+10 + 96M5 19.003.92E-015.76E+013.02E+051.75E+087.17E-021.33E+014.17E+057.70E+08 + 96M5 29.008.20E-026.71E+001.53E+044.86E+061.74E-021.63E+002.18E+041.91E+07 + 96M5 44.001.66E-027.99E-018.12E+021.47E+054.23E-032.09E-011.19E+035.21E+05 + 96M5 56.006.42E-032.32E-011.49E+021.98E+041.85E-036.43E-022.21E+026.63E+04 + 96M5 74.002.12E-035.56E-022.09E+011.98E+037.02E-041.66E-023.16E+016.28E+03 + 96M5 107.004.83E-048.41E-031.58E+009.66E+011.93E-042.85E-032.43E+002.91E+02 + 96M5 155.001.09E-041.28E-031.19E-014.81E+005.23E-055.01E-041.86E-011.41E+01 + 96M5 285.001.00E-056.27E-051.84E-033.80E-026.14E-063.20E-052.81E-031.11E-01 + 96M5 500.001.22E-064.67E-064.62E-055.09E-048.99E-072.95E-066.40E-051.51E-03 + 96N+ 50.005.72E-024.08E+012.53E+031.17E+053.97E+002.08E+021.37E+046.82E+05 + 96N+ 70.002.39E-028.11E+003.40E+029.97E+031.47E+004.47E+011.67E+035.25E+04 + 96N+ 100.009.57E-031.53E+004.35E+018.33E+025.25E-019.31E+001.98E+023.92E+03 + 96N+ 150.003.41E-032.39E-014.54E+005.73E+011.63E-011.67E+001.99E+012.40E+02 + 96N+ 200.001.66E-036.75E-029.75E-019.44E+007.15E-025.23E-014.29E+003.71E+01 + 96N+ 500.002.11E-041.99E-031.26E-025.89E-025.61E-031.89E-026.20E-022.16E-01 + 97K 132.602.12E-011.30E-012.58E-021.09E-031.31E+014.87E+013.86E+017.28E+00 + 97K 133.302.09E-011.32E-013.03E-022.19E-031.29E+014.78E+013.90E+018.47E+00 + 97K 134.602.05E-011.36E-013.90E-025.05E-031.26E+014.63E+013.97E+011.07E+01 + 97K 137.801.94E-011.45E-016.09E-021.66E-021.18E+014.29E+014.08E+011.61E+01 + 97K 141.601.83E-011.53E-018.71E-023.81E-021.09E+013.93E+014.13E+012.20E+01 + 97K 146.001.71E-011.60E-011.16E-017.17E-029.97E+003.55E+014.12E+012.78E+01 + 97K 152.001.56E-011.65E-011.53E-011.28E-018.89E+003.11E+014.00E+013.40E+01 + 97K 160.001.39E-011.68E-011.93E-012.11E-017.68E+002.64E+013.76E+013.93E+01 + 97K 172.001.18E-011.65E-012.37E-013.32E-016.26E+002.08E+013.31E+014.24E+01 + 97K 185.001.01E-011.57E-012.64E-014.37E-015.09E+001.64E+012.82E+014.16E+01 + 97K 202.008.28E-021.45E-012.78E-015.27E-013.98E+001.23E+012.27E+013.75E+01 + 97K 215.007.21E-021.34E-012.77E-015.63E-013.34E+001.01E+011.92E+013.35E+01 + 97K 232.006.10E-021.22E-012.68E-015.79E-012.70E+007.90E+001.54E+012.84E+01 + 97K 255.004.97E-021.06E-012.48E-015.65E-012.07E+005.84E+001.17E+012.24E+01 + 97K 280.004.07E-029.19E-022.24E-015.26E-011.60E+004.34E+008.75E+001.72E+01 + 97K 345.002.64E-026.55E-021.66E-014.00E-018.98E-012.26E+004.53E+009.00E+00 + 97K 430.001.70E-024.52E-021.15E-012.71E-014.92E-011.16E+002.25E+004.35E+00 + 97K 520.001.18E-023.27E-028.18E-021.86E-012.94E-016.61E-011.24E+002.31E+00 + 97K 630.008.28E-032.36E-025.74E-021.25E-011.76E-013.80E-016.84E-011.22E+00 + 97K 860.004.78E-031.39E-023.20E-026.42E-027.66E-021.60E-012.71E-014.50E-01 + 97K 1150.002.92E-038.50E-031.85E-023.47E-023.54E-027.40E-021.19E-011.86E-01 + 97K 1400.002.11E-036.06E-031.28E-022.30E-022.09E-024.45E-027.00E-021.05E-01 + 97K 1650.001.61E-034.56E-039.40E-031.64E-021.35E-022.94E-024.54E-026.64E-02 + 97L1 26.255.59E-011.47E+021.77E+032.34E+032.81E+022.40E+044.68E+052.24E+06 + 97L1 26.955.38E-011.31E+021.76E+033.82E+032.60E+022.13E+044.09E+052.16E+06 + 97L1 28.255.01E-011.07E+021.68E+036.13E+032.26E+021.71E+043.19E+051.95E+06 + 97L1 31.454.25E-016.76E+011.34E+038.84E+031.64E+021.04E+041.83E+051.37E+06 + 97L1 35.253.53E-014.11E+019.55E+028.63E+031.17E+026.18E+031.01E+058.58E+05 + 97L1 38.003.11E-012.96E+017.37E+027.58E+039.38E+014.39E+036.84E+046.08E+05 + 97L1 44.002.41E-011.55E+014.21E+025.05E+036.08E+012.27E+033.19E+042.97E+05 + 97L1 52.001.77E-017.47E+002.10E+022.74E+033.72E+011.08E+031.35E+041.25E+05 + 97L1 64.001.19E-013.05E+008.46E+011.13E+032.02E+014.34E+024.66E+034.08E+04 + 97L1 77.008.23E-021.41E+003.68E+014.79E+021.18E+011.96E+021.83E+031.49E+04 + 97L1 94.005.47E-026.45E-011.49E+011.82E+026.57E+008.46E+016.78E+024.98E+03 + 97L1 107.004.18E-024.01E-018.33E+009.61E+014.51E+004.95E+013.60E+022.45E+03 + 97L1 124.003.06E-022.41E-014.35E+004.64E+012.95E+002.72E+011.77E+021.10E+03 + 97L1 147.002.14E-021.41E-012.09E+002.01E+011.81E+001.38E+017.90E+014.42E+02 + 97L1 175.001.48E-028.48E-021.02E+008.69E+001.10E+007.02E+003.53E+011.76E+02 + 97L1 240.007.65E-033.72E-023.07E-012.03E+004.49E-012.15E+008.64E+003.51E+01 + 97L1 325.004.15E-031.83E-021.09E-015.58E-011.92E-017.29E-012.40E+008.03E+00 + 97L1 410.002.65E-031.10E-025.33E-022.25E-011.01E-013.31E-019.47E-012.75E+00 + 97L1 520.001.70E-036.76E-032.71E-029.53E-025.30E-021.53E-013.84E-019.74E-01 + 97L1 750.008.95E-043.30E-031.05E-022.90E-021.97E-024.96E-021.05E-012.22E-01 + 97L11000.005.54E-041.93E-035.32E-031.26E-029.13E-032.16E-024.11E-027.70E-02 + 97L11500.002.87E-049.18E-042.19E-034.42E-033.09E-037.13E-031.22E-022.00E-02 + 97L2 25.381.36E+005.70E+034.07E+053.82E+063.80E+011.01E+036.37E+037.40E+03 + 97L2 26.081.27E+004.99E+033.51E+053.63E+063.51E+019.19E+026.37E+031.21E+04 + 97L2 27.381.13E+003.94E+032.68E+053.20E+063.04E+017.70E+026.14E+031.94E+04 + 97L2 30.588.53E-012.31E+031.47E+052.15E+062.19E+015.18E+025.06E+032.83E+04 + 97L2 34.386.30E-011.32E+037.70E+041.27E+061.55E+013.39E+023.73E+032.81E+04 + 97L2 38.004.85E-018.13E+024.44E+047.71E+051.16E+012.35E+022.74E+032.38E+04 + 97L2 44.003.28E-014.05E+021.98E+043.55E+057.54E+001.38E+021.66E+031.62E+04 + 97L2 52.002.09E-011.84E+027.90E+031.40E+054.63E+007.50E+018.96E+029.14E+03 + 97L2 64.001.18E-016.94E+012.54E+034.23E+042.54E+003.53E+013.99E+024.02E+03 + 97L2 77.007.04E-022.95E+019.28E+021.43E+041.49E+001.80E+011.89E+021.81E+03 + 97L2 94.004.02E-021.19E+013.17E+024.39E+038.44E-018.81E+008.37E+017.38E+02 + 97L2 107.002.79E-026.61E+001.59E+022.04E+035.84E-015.55E+004.90E+014.06E+02 + 97L2 124.001.84E-023.42E+007.28E+018.55E+023.85E-013.29E+002.67E+012.04E+02 + 97L2 147.001.14E-021.62E+003.00E+013.15E+022.39E-011.81E+001.32E+019.14E+01 + 97L2 175.007.01E-037.60E-011.22E+011.15E+021.47E-019.85E-016.45E+004.02E+01 + 97L2 240.002.93E-032.00E-012.51E+001.90E+016.13E-023.34E-011.79E+009.17E+00 + 97L2 325.001.29E-035.85E-025.83E-013.62E+002.67E-021.22E-015.39E-012.29E+00 + 97L2 410.007.02E-042.35E-021.99E-011.06E+001.41E-025.70E-022.20E-018.14E-01 + 97L2 520.003.82E-049.60E-036.91E-023.20E-017.41E-032.67E-029.05E-022.92E-01 + 97L2 750.001.55E-042.58E-031.48E-025.62E-022.74E-038.60E-032.43E-026.49E-02 + 97L21000.007.86E-059.77E-044.80E-031.58E-021.25E-033.64E-039.07E-032.13E-02 + 97L21500.003.11E-052.71E-041.10E-033.06E-034.10E-041.12E-032.43E-034.93E-03 + 97L3 20.443.34E+001.55E+041.47E+061.93E+072.92E+004.76E+042.90E+072.16E+09 + 97L3 21.143.04E+001.31E+041.21E+061.72E+072.63E+004.02E+042.31E+071.67E+09 + 97L3 22.442.56E+009.69E+038.42E+051.35E+072.19E+002.99E+041.55E+071.06E+09 + 97L3 25.641.75E+004.96E+033.81E+057.14E+061.46E+001.54E+046.33E+063.87E+08 + 97L3 29.441.17E+002.48E+031.67E+053.38E+069.56E-017.72E+032.52E+061.37E+08 + 97L3 38.005.48E-016.87E+023.64E+047.48E+054.39E-012.16E+034.65E+052.02E+07 + 97L3 44.003.52E-013.29E+021.52E+043.02E+052.81E-011.04E+031.78E+056.81E+06 + 97L3 52.002.11E-011.43E+025.61E+031.05E+051.69E-014.54E+026.00E+041.99E+06 + 97L3 64.001.11E-015.06E+011.63E+032.75E+049.01E-021.62E+021.58E+044.37E+05 + 97L3 77.006.24E-022.02E+015.46E+028.24E+035.15E-026.47E+014.86E+031.15E+05 + 97L3 94.003.33E-027.51E+001.68E+022.23E+032.83E-022.41E+011.39E+032.78E+04 + 97L3 107.002.22E-023.96E+007.83E+019.50E+021.92E-021.27E+016.19E+021.12E+04 + 97L3 124.001.39E-021.92E+003.30E+013.60E+021.23E-026.13E+002.50E+024.01E+03 + 97L3 147.008.17E-038.34E-011.22E+011.18E+027.42E-032.65E+008.88E+011.25E+03 + 97L3 175.004.73E-033.57E-014.45E+003.77E+014.42E-031.12E+003.12E+013.83E+02 + 97L3 240.001.77E-037.82E-027.28E-014.88E+001.74E-032.39E-014.88E+004.75E+01 + 97L3 325.007.06E-041.87E-021.33E-017.17E-017.16E-045.48E-028.61E-016.85E+00 + 97L3 410.003.55E-046.42E-033.74E-021.73E-013.66E-041.79E-022.35E-011.62E+00 + 97L3 520.001.79E-042.21E-031.06E-024.23E-021.86E-045.76E-036.43E-023.88E-01 + 97L3 750.006.45E-054.59E-041.69E-035.53E-036.70E-051.05E-039.20E-034.64E-02 + 97L31000.003.05E-051.44E-044.41E-041.26E-033.11E-052.89E-042.09E-039.37E-03 + 97L31500.001.15E-053.28E-057.93E-051.89E-041.13E-055.37E-052.81E-041.07E-03 + 97M1 7.549.93E-019.25E+035.13E+055.72E+062.82E+032.88E+066.66E+083.78E+10 + 97M1 8.548.73E-015.44E+033.06E+055.11E+061.94E+031.57E+062.98E+081.63E+10 + 97M1 10.546.80E-012.22E+031.27E+052.77E+061.04E+035.61E+057.77E+073.89E+09 + 97M1 14.544.32E-015.66E+023.19E+048.05E+053.96E+021.18E+051.03E+074.28E+08 + 97M1 21.542.29E-011.05E+025.58E+031.45E+051.23E+021.81E+049.30E+052.93E+07 + 97M1 29.001.35E-012.92E+011.43E+033.53E+045.07E+014.45E+031.58E+053.95E+06 + 97M1 44.006.11E-024.83E+002.03E+024.36E+031.48E+016.52E+021.43E+042.54E+05 + 97M1 56.003.78E-021.72E+006.44E+011.24E+037.25E+002.21E+023.71E+035.40E+04 + 97M1 74.002.13E-025.40E-011.71E+012.85E+023.20E+006.48E+018.17E+029.41E+03 + 97M1 107.009.78E-031.29E-013.02E+004.03E+011.09E+001.35E+011.19E+021.01E+03 + 97M1 155.004.45E-033.62E-025.73E-015.87E+003.75E-012.99E+001.89E+011.19E+02 + 97M1 285.001.25E-036.61E-035.08E-023.14E-016.69E-022.98E-011.16E+004.57E+00 + 97M1 500.004.27E-041.84E-038.18E-033.15E-021.42E-024.36E-021.17E-013.19E-01 + 97M2 7.142.07E+007.73E+055.21E+084.70E+104.40E+021.10E+056.58E+067.78E+07 + 97M2 8.141.81E+004.04E+052.23E+081.94E+102.98E+026.09E+043.50E+066.54E+07 + 97M2 10.141.36E+001.37E+055.48E+074.33E+091.55E+022.29E+041.20E+063.06E+07 + 97M2 14.147.83E-012.66E+046.76E+064.45E+085.75E+015.36E+032.34E+056.72E+06 + 97M2 21.143.54E-013.73E+035.67E+052.87E+071.75E+019.74E+023.28E+048.68E+05 + 97M2 29.001.76E-018.08E+028.43E+043.41E+066.88E+002.65E+027.15E+031.64E+05 + 97M2 44.006.51E-021.10E+027.24E+032.15E+052.03E+004.98E+019.93E+021.78E+04 + 97M2 56.003.55E-023.53E+011.80E+034.44E+041.01E+001.94E+013.24E+024.95E+03 + 97M2 74.001.72E-029.68E+003.73E+027.40E+034.53E-016.68E+009.02E+011.14E+03 + 97M2 107.006.45E-031.81E+004.88E+017.26E+021.59E-011.69E+001.72E+011.67E+02 + 97M2 155.002.37E-033.52E-016.77E+007.55E+015.60E-024.41E-013.42E+002.53E+01 + 97M2 285.004.65E-042.71E-023.13E-012.22E+001.04E-025.33E-022.69E-011.30E+00 + 97M2 500.001.10E-043.04E-032.31E-021.13E-012.24E-038.43E-033.00E-021.02E-01 + 97M3 5.988.23E+002.09E+061.64E+091.67E+113.18E+016.63E+064.66E+103.96E+13 + 97M3 6.986.26E+009.63E+055.90E+085.56E+101.99E+013.06E+061.60E+101.05E+13 + 97M3 8.983.84E+002.72E+051.13E+089.23E+099.27E+008.69E+052.81E+091.24E+12 + 97M3 12.981.74E+004.28E+041.05E+076.73E+083.04E+001.38E+052.23E+085.65E+10 + 97M3 19.986.21E-014.91E+036.78E+053.22E+078.22E-011.60E+041.18E+071.64E+09 + 97M3 29.002.37E-017.59E+026.60E+042.38E+062.66E-012.50E+039.61E+058.24E+07 + 97M3 44.007.54E-029.43E+015.06E+031.33E+057.54E-023.13E+026.05E+043.17E+06 + 97M3 56.003.78E-022.83E+011.17E+032.54E+043.65E-029.44E+011.25E+045.02E+05 + 97M3 74.001.67E-027.10E+002.17E+023.78E+031.58E-022.37E+012.08E+036.22E+04 + 97M3 107.005.51E-031.15E+002.40E+013.11E+025.26E-033.81E+002.03E+024.23E+03 + 97M3 155.001.78E-031.88E-012.71E+002.61E+011.75E-036.11E-012.08E+013.11E+02 + 97M3 285.002.83E-041.01E-028.24E-024.97E-012.94E-043.10E-025.71E-015.26E+00 + 97M3 500.005.53E-057.67E-043.86E-031.60E-025.87E-052.07E-032.46E-021.57E-01 + 97M4 5.352.06E+016.13E+041.32E+098.78E+129.64E+002.24E+057.37E+082.63E+11 + 97M4 6.351.23E+012.58E+043.96E+081.97E+125.57E+009.48E+042.32E+087.27E+10 + 97M4 8.355.28E+006.48E+035.81E+071.83E+112.30E+002.41E+043.71E+079.32E+09 + 97M4 12.351.47E+009.04E+023.74E+066.32E+096.42E-013.38E+032.77E+065.01E+08 + 97M4 19.353.12E-019.48E+011.61E+051.39E+081.45E-013.56E+021.48E+051.81E+07 + 97M4 29.007.24E-021.25E+019.47E+034.71E+063.71E-024.67E+011.10E+049.42E+05 + 97M4 44.001.52E-021.55E+005.20E+021.51E+058.88E-035.77E+007.94E+024.67E+04 + 97M4 56.006.04E-034.63E-019.79E+012.12E+043.84E-031.72E+001.77E+028.40E+03 + 97M4 74.002.04E-031.15E-011.44E+012.24E+031.44E-034.28E-013.19E+011.18E+03 + 97M4 107.004.78E-041.84E-021.18E+001.21E+023.88E-046.83E-023.41E+009.14E+01 + 97M4 155.001.10E-042.97E-031.00E-016.82E+001.02E-041.09E-023.75E-017.34E+00 + 97M4 285.001.02E-051.57E-042.06E-037.18E-021.10E-055.47E-041.09E-021.32E-01 + 97M4 500.001.16E-061.15E-057.45E-051.37E-031.36E-063.59E-054.70E-043.83E-03 + 97M5 5.123.20E+014.86E+043.35E+091.65E+135.42E+009.88E+034.52E+099.92E+13 + 97M5 6.121.86E+011.95E+049.58E+083.46E+123.06E+004.05E+031.30E+092.02E+13 + 97M5 8.127.57E+004.59E+031.32E+082.93E+111.23E+009.89E+021.80E+081.62E+12 + 97M5 12.121.99E+005.97E+027.88E+069.12E+093.34E-011.34E+021.09E+074.63E+10 + 97M5 19.123.99E-015.89E+013.18E+051.83E+087.43E-021.39E+014.51E+058.30E+08 + 97M5 29.008.57E-027.08E+001.69E+045.35E+061.85E-021.75E+002.46E+042.17E+07 + 97M5 44.001.74E-028.45E-018.95E+021.62E+054.49E-032.25E-011.34E+035.91E+05 + 97M5 56.006.77E-032.46E-011.64E+022.17E+041.96E-036.91E-022.49E+027.52E+04 + 97M5 74.002.24E-035.90E-022.30E+012.17E+037.47E-041.79E-023.56E+017.11E+03 + 97M5 107.005.13E-048.93E-031.74E+001.06E+022.06E-043.06E-032.74E+003.29E+02 + 97M5 155.001.16E-041.36E-031.32E-015.27E+005.58E-055.37E-042.09E-011.59E+01 + 97M5 285.001.06E-056.71E-052.02E-034.17E-026.55E-063.43E-053.16E-031.25E-01 + 97M5 500.001.29E-065.00E-065.06E-055.58E-049.61E-073.17E-067.14E-051.70E-03 + 97N+ 50.005.89E-024.48E+012.77E+031.29E+054.44E+002.32E+021.53E+047.68E+05 + 97N+ 70.002.46E-028.91E+003.71E+021.09E+041.65E+004.98E+011.87E+035.89E+04 + 97N+ 100.009.90E-031.68E+004.75E+019.10E+025.87E-011.03E+012.21E+024.38E+03 + 97N+ 150.003.53E-032.63E-014.97E+006.25E+011.82E-011.86E+002.21E+012.66E+02 + 97N+ 200.001.73E-037.44E-021.07E+001.03E+017.99E-025.80E-014.75E+004.11E+01 + 97N+ 500.002.21E-042.19E-031.39E-026.48E-026.27E-032.09E-026.84E-022.38E-01 + 98K 136.002.02E-011.22E-012.43E-021.01E-031.34E+014.74E+013.63E+016.65E+00 + 98K 136.701.99E-011.24E-012.84E-022.01E-031.31E+014.65E+013.67E+017.71E+00 + 98K 138.001.95E-011.28E-013.64E-024.59E-031.28E+014.52E+013.73E+019.72E+00 + 98K 141.201.85E-011.36E-015.66E-021.50E-021.20E+014.20E+013.84E+011.45E+01 + 98K 145.001.75E-011.44E-018.09E-023.43E-021.11E+013.85E+013.90E+011.98E+01 + 98K 149.001.64E-011.50E-011.06E-016.17E-021.03E+013.52E+013.89E+012.47E+01 + 98K 155.001.51E-011.56E-011.40E-011.12E-019.20E+003.10E+013.80E+013.06E+01 + 98K 163.001.35E-011.59E-011.79E-011.88E-017.97E+002.63E+013.59E+013.58E+01 + 98K 175.001.15E-011.58E-012.22E-013.01E-016.52E+002.09E+013.19E+013.91E+01 + 98K 188.009.84E-021.51E-012.51E-014.03E-015.33E+001.66E+012.74E+013.88E+01 + 98K 205.008.13E-021.40E-012.66E-014.93E-014.17E+001.25E+012.22E+013.54E+01 + 98K 218.007.10E-021.31E-012.67E-015.32E-013.51E+001.03E+011.89E+013.19E+01 + 98K 235.006.03E-021.19E-012.61E-015.53E-012.84E+008.09E+001.53E+012.73E+01 + 98K 258.004.94E-021.05E-012.44E-015.45E-012.19E+006.01E+001.16E+012.17E+01 + 98K 285.004.00E-029.07E-022.20E-015.09E-011.66E+004.39E+008.61E+001.65E+01 + 98K 350.002.62E-026.55E-021.66E-013.94E-019.43E-012.32E+004.54E+008.81E+00 + 98K 435.001.70E-024.58E-021.16E-012.71E-015.21E-011.20E+002.28E+004.34E+00 + 98K 530.001.17E-023.29E-028.20E-021.84E-013.05E-016.71E-011.23E+002.26E+00 + 98K 640.008.31E-032.40E-025.81E-021.25E-011.84E-013.91E-016.91E-011.21E+00 + 98K 870.004.86E-031.43E-023.29E-026.55E-028.09E-021.67E-012.79E-014.57E-01 + 98K 1150.003.03E-038.94E-031.95E-023.64E-023.84E-027.97E-021.27E-011.97E-01 + 98K 1400.002.19E-036.38E-031.35E-022.42E-022.27E-024.80E-027.48E-021.11E-01 + 98K 1650.001.67E-034.80E-039.93E-031.73E-021.46E-023.16E-024.86E-027.07E-02 + 98L1 27.015.27E-011.41E+021.63E+032.06E+032.87E+022.33E+044.35E+052.00E+06 + 98L1 27.715.07E-011.27E+021.62E+033.35E+032.65E+022.07E+043.81E+051.94E+06 + 98L1 29.014.73E-011.04E+021.55E+035.38E+032.32E+021.67E+043.00E+051.76E+06 + 98L1 32.214.03E-016.68E+011.26E+037.87E+031.70E+021.03E+041.75E+051.26E+06 + 98L1 36.013.37E-014.13E+019.09E+027.82E+031.22E+026.19E+039.79E+047.99E+05 + 98L1 39.002.95E-012.92E+016.92E+026.86E+039.64E+014.31E+036.46E+045.56E+05 + 98L1 45.002.30E-011.56E+014.03E+024.66E+036.31E+012.26E+033.08E+042.77E+05 + 98L1 53.001.71E-017.69E+002.06E+022.59E+033.90E+011.09E+031.32E+041.19E+05 + 98L1 65.001.16E-013.21E+008.49E+011.10E+032.14E+014.47E+024.67E+033.99E+04 + 98L1 78.008.06E-021.51E+003.76E+014.74E+021.25E+012.04E+021.86E+031.48E+04 + 98L1 95.005.40E-026.98E-011.55E+011.84E+027.06E+008.90E+017.00E+025.03E+03 + 98L1 108.004.14E-024.35E-018.77E+009.85E+014.87E+005.24E+013.74E+022.50E+03 + 98L1 125.003.05E-022.63E-014.62E+004.81E+013.19E+002.89E+011.85E+021.13E+03 + 98L1 148.002.14E-021.53E-012.25E+002.11E+011.96E+001.48E+018.32E+014.59E+02 + 98L1 175.001.51E-029.33E-021.13E+009.46E+001.21E+007.70E+003.84E+011.90E+02 + 98L1 240.007.84E-034.04E-023.38E-012.21E+004.97E-012.35E+009.39E+003.78E+01 + 98L1 325.004.27E-031.97E-021.19E-016.09E-012.13E-017.99E-012.61E+008.68E+00 + 98L1 420.002.61E-031.13E-025.40E-022.24E-011.05E-013.35E-019.38E-012.67E+00 + 98L1 530.001.71E-036.97E-032.79E-029.69E-025.55E-021.57E-013.89E-019.72E-01 + 98L1 760.009.12E-043.44E-031.10E-023.02E-022.10E-025.22E-021.09E-012.28E-01 + 98L11050.005.34E-041.88E-035.13E-031.19E-028.82E-032.06E-023.83E-027.03E-02 + 98L11550.002.85E-049.25E-042.20E-034.40E-033.10E-037.15E-031.21E-021.96E-02 + 98L2 26.121.29E+005.40E+033.69E+053.34E+063.93E+019.84E+025.93E+036.59E+03 + 98L2 26.821.21E+004.75E+033.20E+053.18E+063.64E+018.95E+025.93E+031.07E+04 + 98L2 28.121.08E+003.77E+032.46E+052.82E+063.17E+017.55E+025.74E+031.73E+04 + 98L2 31.328.22E-012.25E+031.37E+051.92E+062.30E+015.13E+024.78E+032.54E+04 + 98L2 35.126.13E-011.30E+037.32E+041.16E+061.64E+013.39E+023.57E+032.57E+04 + 98L2 39.004.66E-017.84E+024.12E+046.90E+051.21E+012.32E+022.60E+032.18E+04 + 98L2 45.003.19E-013.97E+021.88E+043.25E+057.96E+001.38E+021.60E+031.50E+04 + 98L2 53.002.05E-011.83E+027.65E+031.31E+054.94E+007.61E+018.77E+028.66E+03 + 98L2 65.001.17E-017.06E+012.51E+034.07E+042.74E+003.63E+013.98E+023.90E+03 + 98L2 78.007.08E-023.04E+019.34E+021.40E+041.62E+001.88E+011.92E+021.79E+03 + 98L2 95.004.09E-021.24E+013.24E+024.39E+039.24E-019.28E+008.59E+017.41E+02 + 98L2 108.002.85E-026.94E+001.64E+022.06E+036.42E-015.88E+005.08E+014.11E+02 + 98L2 125.001.89E-023.62E+007.57E+018.73E+024.25E-013.50E+002.78E+012.09E+02 + 98L2 148.001.18E-021.72E+003.14E+013.25E+022.65E-011.94E+001.39E+019.46E+01 + 98L2 175.007.41E-038.35E-011.33E+011.23E+021.66E-011.08E+006.99E+004.31E+01 + 98L2 240.003.11E-032.21E-012.74E+002.06E+016.93E-023.69E-011.95E+009.90E+00 + 98L2 325.001.38E-036.45E-026.39E-013.93E+003.02E-021.35E-015.90E-012.48E+00 + 98L2 420.007.07E-042.37E-021.96E-011.03E+001.50E-025.85E-022.21E-017.98E-01 + 98L2 530.003.92E-049.90E-037.00E-023.19E-017.98E-032.80E-029.29E-022.95E-01 + 98L2 760.001.62E-042.73E-031.55E-025.81E-023.00E-039.22E-032.56E-026.76E-02 + 98L21050.007.63E-059.24E-044.42E-031.42E-021.24E-033.52E-038.56E-031.96E-02 + 98L21550.003.15E-052.73E-041.09E-032.99E-034.24E-041.15E-032.45E-034.88E-03 + 98L3 20.913.20E+001.49E+041.36E+061.72E+072.86E+004.69E+042.77E+072.00E+09 + 98L3 21.612.91E+001.26E+041.11E+061.54E+072.59E+003.98E+042.21E+071.56E+09 + 98L3 22.912.46E+009.39E+037.85E+051.22E+072.16E+002.98E+041.49E+079.96E+08 + 98L3 26.111.69E+004.87E+033.61E+056.54E+061.45E+001.55E+046.22E+063.71E+08 + 98L3 29.911.14E+002.46E+031.60E+053.14E+069.59E-017.88E+032.51E+061.34E+08 + 98L3 39.005.19E-016.48E+023.29E+046.57E+054.27E-012.10E+034.34E+051.83E+07 + 98L3 45.003.37E-013.17E+021.40E+042.71E+052.76E-011.03E+031.70E+056.34E+06 + 98L3 53.002.04E-011.40E+025.30E+039.61E+041.68E-014.57E+025.87E+041.90E+06 + 98L3 65.001.09E-015.04E+011.58E+032.59E+049.04E-021.66E+021.58E+044.29E+05 + 98L3 78.006.18E-022.03E+015.35E+027.89E+035.21E-026.70E+014.95E+031.15E+05 + 98L3 95.003.33E-027.66E+001.67E+022.17E+032.88E-022.52E+011.43E+032.83E+04 + 98L3 108.002.23E-024.07E+007.85E+019.34E+021.96E-021.34E+016.45E+021.15E+04 + 98L3 125.001.41E-021.98E+003.33E+013.58E+021.26E-026.50E+002.63E+024.16E+03 + 98L3 148.008.28E-038.67E-011.24E+011.18E+027.65E-032.82E+009.40E+011.30E+03 + 98L3 175.004.91E-033.84E-014.71E+003.95E+014.65E-031.24E+003.44E+014.20E+02 + 98L3 240.001.84E-038.40E-027.72E-015.13E+001.83E-032.63E-015.36E+005.21E+01 + 98L3 325.007.35E-042.01E-021.41E-017.56E-017.53E-046.02E-029.46E-017.49E+00 + 98L3 420.003.45E-046.16E-033.49E-021.57E-013.59E-041.75E-022.26E-011.53E+00 + 98L3 530.001.77E-042.17E-031.02E-024.01E-021.85E-045.78E-036.37E-023.79E-01 + 98L3 760.006.51E-054.63E-041.68E-035.46E-036.78E-051.08E-039.41E-034.70E-02 + 98L31050.002.80E-051.27E-043.76E-041.05E-032.86E-052.54E-041.79E-037.84E-03 + 98L31550.001.12E-053.09E-057.38E-051.73E-041.09E-055.10E-052.61E-049.90E-04 + 98M1 7.759.36E-019.07E+034.93E+055.25E+062.89E+032.80E+066.21E+083.40E+10 + 98M1 8.758.26E-015.41E+032.98E+054.78E+062.01E+031.55E+062.84E+081.50E+10 + 98M1 10.756.47E-012.25E+031.26E+052.67E+061.09E+035.66E+057.63E+073.71E+09 + 98M1 14.754.16E-015.87E+023.23E+047.97E+054.22E+021.23E+051.05E+074.25E+08 + 98M1 21.752.23E-011.12E+025.77E+031.46E+051.33E+021.92E+049.73E+053.01E+07 + 98M1 29.001.34E-013.26E+011.55E+033.75E+045.64E+014.94E+031.75E+054.33E+06 + 98M1 44.006.12E-025.43E+002.21E+024.67E+031.64E+017.24E+021.58E+042.79E+05 + 98M1 56.003.80E-021.95E+007.06E+011.34E+038.06E+002.44E+024.10E+035.92E+04 + 98M1 74.002.15E-026.12E-011.88E+013.09E+023.56E+007.17E+019.00E+021.03E+04 + 98M1 107.009.93E-031.45E-013.35E+004.40E+011.21E+001.49E+011.31E+021.10E+03 + 98M1 155.004.54E-034.05E-026.38E-016.46E+004.17E-013.30E+002.07E+011.29E+02 + 98M1 285.001.29E-037.21E-035.62E-023.46E-017.43E-023.28E-011.27E+004.98E+00 + 98M1 500.004.43E-041.98E-038.95E-033.46E-021.57E-024.78E-021.28E-013.48E-01 + 98M2 7.351.94E+007.35E+054.74E+084.13E+104.57E+021.07E+056.17E+066.99E+07 + 98M2 8.351.71E+003.91E+052.08E+081.74E+103.12E+026.04E+043.34E+065.96E+07 + 98M2 10.351.29E+001.35E+055.27E+074.04E+091.65E+022.32E+041.17E+062.88E+07 + 98M2 14.357.61E-012.72E+046.74E+064.33E+086.23E+015.58E+032.36E+056.56E+06 + 98M2 21.353.51E-013.90E+035.83E+052.89E+071.92E+011.03E+033.40E+048.77E+05 + 98M2 29.001.80E-018.86E+029.19E+043.67E+067.79E+002.92E+027.76E+031.75E+05 + 98M2 44.006.71E-021.21E+027.89E+032.31E+052.30E+005.49E+011.08E+031.91E+04 + 98M2 56.003.67E-023.88E+011.97E+034.80E+041.14E+002.14E+013.52E+025.32E+03 + 98M2 74.001.79E-021.06E+014.07E+028.00E+035.13E-017.37E+009.82E+011.23E+03 + 98M2 107.006.76E-031.99E+005.34E+017.87E+021.80E-011.86E+001.88E+011.80E+02 + 98M2 155.002.50E-033.87E-017.41E+008.21E+016.34E-024.88E-013.74E+002.75E+01 + 98M2 285.004.96E-043.00E-023.44E-012.43E+001.18E-025.92E-022.95E-011.42E+00 + 98M2 500.001.18E-043.37E-032.55E-021.24E-012.54E-039.40E-033.31E-021.12E-01 + 98M3 6.127.89E+002.01E+061.51E+091.49E+113.12E+016.56E+064.45E+103.67E+13 + 98M3 7.126.04E+009.42E+055.56E+085.08E+101.98E+013.08E+061.56E+101.00E+13 + 98M3 9.123.74E+002.72E+051.10E+088.71E+099.33E+008.93E+052.82E+091.22E+12 + 98M3 13.121.71E+004.38E+041.05E+076.58E+083.10E+001.45E+052.32E+085.82E+10 + 98M3 20.126.20E-015.13E+036.93E+053.23E+078.49E-011.72E+041.26E+071.74E+09 + 98M3 29.002.42E-018.20E+027.05E+042.51E+062.81E-012.77E+031.07E+069.22E+07 + 98M3 44.007.73E-021.02E+025.40E+031.40E+057.97E-023.48E+026.75E+043.53E+06 + 98M3 56.003.88E-023.07E+011.24E+032.67E+043.85E-021.05E+021.40E+045.58E+05 + 98M3 74.001.72E-027.68E+002.31E+023.98E+031.67E-022.63E+012.32E+036.91E+04 + 98M3 107.005.70E-031.24E+002.56E+013.28E+025.56E-034.22E+002.26E+024.69E+03 + 98M3 155.001.85E-032.03E-012.89E+002.76E+011.85E-036.78E-012.31E+013.43E+02 + 98M3 285.002.95E-041.09E-028.79E-025.26E-013.11E-043.43E-026.32E-015.80E+00 + 98M3 500.005.80E-058.25E-044.12E-031.70E-026.19E-052.28E-032.71E-021.73E-01 + 98M4 5.481.97E+015.90E+041.21E+097.88E+129.47E+002.22E+057.01E+082.43E+11 + 98M4 6.481.19E+012.53E+043.74E+081.82E+125.53E+009.60E+042.26E+086.91E+10 + 98M4 8.485.19E+006.52E+035.67E+071.77E+112.32E+002.50E+043.74E+079.19E+09 + 98M4 12.481.47E+009.33E+023.78E+066.38E+096.60E-013.60E+032.89E+065.13E+08 + 98M4 19.483.18E-019.99E+011.67E+051.45E+081.51E-013.86E+021.58E+051.91E+07 + 98M4 29.007.59E-021.36E+011.03E+045.19E+063.96E-025.24E+011.23E+041.04E+06 + 98M4 44.001.60E-021.69E+005.67E+021.66E+059.51E-036.48E+008.84E+025.17E+04 + 98M4 56.006.38E-035.06E-011.07E+022.33E+044.12E-031.94E+001.97E+029.29E+03 + 98M4 74.002.16E-031.26E-011.57E+012.47E+031.55E-034.81E-013.55E+011.31E+03 + 98M4 107.005.09E-042.02E-021.29E+001.33E+024.18E-047.67E-023.79E+001.01E+02 + 98M4 155.001.18E-043.26E-031.09E-017.52E+001.10E-041.22E-024.17E-018.13E+00 + 98M4 285.001.09E-051.73E-042.25E-037.93E-021.18E-056.14E-041.22E-021.47E-01 + 98M4 500.001.25E-061.26E-058.15E-051.52E-031.47E-064.03E-055.25E-044.27E-03 + 98M5 5.243.06E+014.55E+043.13E+091.49E+135.31E+009.47E+034.34E+099.21E+13 + 98M5 6.241.80E+011.86E+049.20E+083.23E+123.03E+003.96E+031.28E+091.94E+13 + 98M5 8.247.44E+004.50E+031.31E+082.85E+111.24E+009.89E+021.83E+081.62E+12 + 98M5 12.241.99E+005.99E+028.09E+069.24E+093.42E-011.38E+021.15E+074.84E+10 + 98M5 19.244.06E-016.02E+013.35E+051.91E+087.70E-021.44E+014.86E+058.94E+08 + 98M5 29.008.96E-027.48E+001.86E+045.88E+061.96E-021.89E+002.77E+042.47E+07 + 98M5 44.001.82E-028.93E-019.86E+021.78E+054.76E-032.41E-011.51E+036.71E+05 + 98M5 56.007.12E-032.60E-011.80E+022.39E+042.08E-037.41E-022.80E+028.52E+04 + 98M5 74.002.36E-036.25E-022.54E+012.38E+037.94E-041.92E-024.01E+018.05E+03 + 98M5 107.005.42E-049.49E-031.92E+001.16E+022.19E-043.28E-033.08E+003.72E+02 + 98M5 155.001.23E-041.45E-031.45E-015.78E+005.95E-055.76E-042.36E-011.79E+01 + 98M5 285.001.13E-057.16E-052.22E-034.58E-026.99E-063.68E-053.54E-031.41E-01 + 98M5 500.001.38E-065.36E-065.53E-056.12E-041.02E-063.39E-067.96E-051.90E-03 + 98N+ 50.006.10E-024.96E+013.05E+031.42E+055.00E+002.61E+021.74E+048.73E+05 + 98N+ 70.002.56E-029.88E+004.09E+021.20E+041.86E+005.59E+012.11E+036.68E+04 + 98N+ 100.001.03E-021.86E+005.23E+011.00E+036.61E-011.16E+012.48E+024.94E+03 + 98N+ 150.003.69E-032.93E-015.49E+006.88E+012.05E-012.08E+002.47E+012.99E+02 + 98N+ 200.001.81E-038.28E-021.18E+001.14E+018.99E-026.49E-015.31E+004.59E+01 + 98N+ 500.002.33E-042.43E-031.54E-027.19E-027.04E-032.33E-027.60E-022.64E-01 + 99K 139.471.92E-011.14E-012.30E-029.44E-041.36E+014.63E+013.42E+016.08E+00 + 99K 140.171.90E-011.16E-012.68E-021.85E-031.34E+014.54E+013.45E+017.02E+00 + 99K 141.471.86E-011.20E-013.42E-024.19E-031.31E+014.41E+013.51E+018.83E+00 + 99K 144.671.77E-011.28E-015.29E-021.36E-021.23E+014.11E+013.62E+011.31E+01 + 99K 148.471.67E-011.36E-017.55E-023.10E-021.14E+013.78E+013.68E+011.79E+01 + 99K 152.001.59E-011.41E-019.60E-025.26E-021.06E+013.50E+013.68E+012.19E+01 + 99K 158.001.46E-011.47E-011.29E-019.79E-029.54E+003.09E+013.62E+012.74E+01 + 99K 166.001.31E-011.51E-011.66E-011.68E-018.29E+002.64E+013.44E+013.24E+01 + 99K 178.001.12E-011.51E-012.09E-012.73E-016.81E+002.10E+013.08E+013.60E+01 + 99K 191.009.62E-021.46E-012.38E-013.71E-015.58E+001.68E+012.67E+013.61E+01 + 99K 208.007.99E-021.36E-012.56E-014.61E-014.39E+001.28E+012.18E+013.34E+01 + 99K 221.007.00E-021.28E-012.59E-015.02E-013.70E+001.05E+011.86E+013.04E+01 + 99K 238.005.97E-021.18E-012.54E-015.27E-013.01E+008.29E+001.52E+012.62E+01 + 99K 261.004.91E-021.04E-012.40E-015.26E-012.32E+006.19E+001.16E+012.10E+01 + 99K 290.003.94E-028.96E-022.16E-014.94E-011.73E+004.45E+008.49E+001.58E+01 + 99K 355.002.61E-026.57E-021.66E-013.88E-019.93E-012.38E+004.54E+008.63E+00 + 99K 440.001.71E-024.65E-021.18E-012.71E-015.52E-011.24E+002.32E+004.33E+00 + 99K 530.001.21E-023.43E-028.52E-021.90E-013.33E-017.21E-011.30E+002.35E+00 + 99K 640.008.58E-032.51E-026.07E-021.30E-012.00E-014.20E-017.33E-011.27E+00 + 99K 870.005.03E-031.51E-023.45E-026.85E-028.81E-021.80E-012.97E-014.82E-01 + 99K 1150.003.15E-039.41E-032.06E-023.83E-024.18E-028.59E-021.36E-012.08E-01 + 99K 1400.002.28E-036.73E-031.43E-022.55E-022.46E-025.17E-027.99E-021.18E-01 + 99K 1650.001.74E-035.06E-031.05E-021.83E-021.58E-023.41E-025.20E-027.52E-02 + 99L1 27.784.94E-011.36E+021.50E+031.82E+032.91E+022.25E+044.05E+051.80E+06 + 99L1 28.484.78E-011.23E+021.49E+032.94E+032.72E+022.01E+043.55E+051.74E+06 + 99L1 29.784.47E-011.02E+021.44E+034.72E+032.38E+021.63E+042.82E+051.59E+06 + 99L1 32.983.83E-016.60E+011.18E+037.00E+031.76E+021.02E+041.67E+051.15E+06 + 99L1 36.783.22E-014.14E+018.64E+027.09E+031.27E+026.20E+039.47E+047.44E+05 + 99L1 40.002.80E-012.89E+016.52E+026.22E+039.93E+014.24E+036.13E+045.10E+05 + 99L1 46.002.20E-011.58E+013.87E+024.30E+036.57E+012.26E+032.98E+042.59E+05 + 99L1 54.001.64E-017.93E+002.02E+022.44E+034.09E+011.11E+031.30E+041.14E+05 + 99L1 66.001.12E-013.39E+008.53E+011.06E+032.27E+014.61E+024.69E+033.90E+04 + 99L1 79.007.90E-021.62E+003.85E+014.70E+021.34E+012.13E+021.90E+031.47E+04 + 99L1 96.005.33E-027.56E-011.62E+011.86E+027.60E+009.38E+017.22E+025.09E+03 + 99L1 109.004.11E-024.74E-019.24E+001.01E+025.26E+005.55E+013.88E+022.55E+03 + 99L1 126.003.04E-022.86E-014.91E+004.98E+013.46E+003.08E+011.93E+021.17E+03 + 99L1 149.002.15E-021.66E-012.41E+002.21E+012.13E+001.58E+018.77E+014.77E+02 + 99L1 175.001.54E-021.03E-011.25E+001.03E+011.35E+008.46E+004.17E+012.05E+02 + 99L1 240.008.02E-034.40E-023.72E-012.42E+005.50E-012.58E+001.02E+014.08E+01 + 99L1 325.004.39E-032.13E-021.31E-016.64E-012.35E-018.75E-012.84E+009.38E+00 + 99L1 420.002.70E-031.21E-025.89E-022.44E-011.16E-013.67E-011.02E+002.89E+00 + 99L1 530.001.77E-037.48E-033.03E-021.05E-016.14E-021.72E-014.23E-011.05E+00 + 99L1 760.009.51E-043.69E-031.19E-023.27E-022.31E-025.71E-021.19E-012.47E-01 + 99L11050.005.58E-042.01E-035.53E-031.29E-029.71E-032.25E-024.17E-027.61E-02 + 99L11550.003.00E-049.89E-042.36E-034.74E-033.40E-037.82E-031.31E-022.12E-02 + 99L2 26.881.23E+005.13E+033.36E+052.93E+064.06E+019.58E+025.54E+035.89E+03 + 99L2 27.581.15E+004.53E+032.91E+052.79E+063.78E+018.73E+025.53E+039.51E+03 + 99L2 28.881.03E+003.62E+032.27E+052.49E+063.30E+017.40E+025.37E+031.53E+04 + 99L2 32.087.91E-012.18E+031.28E+051.72E+062.42E+015.08E+024.52E+032.29E+04 + 99L2 35.885.95E-011.28E+036.95E+041.06E+061.74E+013.40E+023.42E+032.35E+04 + 99L2 40.004.49E-017.59E+023.83E+046.21E+051.27E+012.29E+022.47E+032.00E+04 + 99L2 46.003.10E-013.91E+021.78E+042.98E+058.43E+001.38E+021.54E+031.40E+04 + 99L2 54.002.02E-011.84E+027.42E+031.23E+055.29E+007.74E+018.61E+028.22E+03 + 99L2 66.001.17E-017.20E+012.49E+033.92E+042.96E+003.75E+013.98E+023.78E+03 + 99L2 79.007.13E-023.14E+019.41E+021.38E+041.77E+001.96E+011.95E+021.77E+03 + 99L2 96.004.15E-021.29E+013.31E+024.40E+031.01E+009.78E+008.83E+017.44E+02 + 99L2 109.002.92E-027.30E+001.69E+022.09E+037.08E-016.23E+005.26E+014.17E+02 + 99L2 126.001.95E-023.83E+007.88E+018.92E+024.70E-013.74E+002.90E+012.14E+02 + 99L2 149.001.22E-021.84E+003.30E+013.36E+022.94E-012.08E+001.46E+019.78E+01 + 99L2 175.007.83E-039.18E-011.45E+011.33E+021.88E-011.19E+007.58E+004.62E+01 + 99L2 240.003.31E-032.43E-013.00E+002.23E+017.85E-024.07E-012.13E+001.07E+01 + 99L2 325.001.47E-037.11E-026.99E-014.28E+003.42E-021.49E-016.45E-012.69E+00 + 99L2 420.007.57E-042.62E-022.15E-011.12E+001.70E-026.50E-022.42E-018.69E-01 + 99L2 530.004.21E-041.09E-027.70E-023.49E-019.06E-033.11E-021.02E-013.22E-01 + 99L2 760.001.76E-043.03E-031.71E-026.39E-023.40E-031.03E-022.84E-027.43E-02 + 99L21050.008.26E-051.03E-034.90E-031.56E-021.41E-033.95E-039.51E-032.16E-02 + 99L21550.003.44E-053.04E-041.21E-033.32E-034.82E-041.29E-032.73E-035.41E-03 + 99L3 21.393.06E+001.42E+041.25E+061.55E+072.81E+004.61E+042.64E+071.86E+09 + 99L3 22.092.79E+001.22E+041.03E+061.38E+072.55E+003.95E+042.12E+071.45E+09 + 99L3 23.392.37E+009.10E+037.33E+051.10E+072.13E+002.97E+041.44E+079.38E+08 + 99L3 26.591.64E+004.78E+033.41E+055.99E+061.44E+001.57E+046.11E+063.56E+08 + 99L3 30.391.11E+002.44E+031.54E+052.92E+069.60E-018.04E+032.51E+061.30E+08 + 99L3 40.004.93E-016.14E+022.99E+045.79E+054.15E-012.05E+034.07E+051.67E+07 + 99L3 46.003.24E-013.05E+021.30E+042.44E+052.71E-011.02E+031.63E+055.93E+06 + 99L3 54.001.98E-011.37E+025.01E+038.84E+041.67E-014.60E+025.75E+041.82E+06 + 99L3 66.001.07E-015.03E+011.52E+032.43E+049.08E-021.70E+021.58E+044.22E+05 + 99L3 79.006.12E-022.05E+015.25E+027.56E+035.28E-026.95E+015.04E+031.16E+05 + 99L3 96.003.33E-027.82E+001.66E+022.11E+032.93E-022.64E+011.48E+032.89E+04 + 99L3 109.002.23E-024.18E+007.87E+019.19E+022.00E-021.41E+016.73E+021.18E+04 + 99L3 126.001.42E-022.05E+003.37E+013.55E+021.30E-026.89E+002.76E+024.31E+03 + 99L3 149.008.40E-039.02E-011.27E+011.18E+027.88E-033.01E+009.94E+011.36E+03 + 99L3 175.005.09E-034.13E-014.99E+004.14E+014.89E-031.37E+003.79E+014.60E+02 + 99L3 240.001.92E-039.02E-028.18E-015.39E+001.92E-032.90E-015.90E+005.70E+01 + 99L3 325.007.64E-042.15E-021.50E-017.96E-017.91E-046.63E-021.04E+008.19E+00 + 99L3 420.003.59E-046.60E-033.70E-021.66E-013.77E-041.92E-022.48E-011.68E+00 + 99L3 530.001.84E-042.32E-031.08E-024.24E-021.94E-046.34E-036.98E-024.14E-01 + 99L3 760.006.80E-054.94E-041.78E-035.78E-037.10E-051.18E-031.03E-025.14E-02 + 99L31050.002.92E-051.35E-043.99E-041.12E-032.99E-052.76E-041.96E-038.56E-03 + 99L31550.001.16E-053.26E-057.81E-051.84E-041.14E-055.50E-052.85E-041.08E-03 + 99M1 7.978.82E-018.91E+034.74E+054.82E+062.96E+032.72E+065.79E+083.06E+10 + 99M1 8.977.81E-015.38E+032.90E+054.47E+062.08E+031.53E+062.70E+081.38E+10 + 99M1 10.976.16E-012.28E+031.24E+052.57E+061.14E+035.72E+057.49E+073.53E+09 + 99M1 14.974.01E-016.10E+023.26E+047.88E+054.50E+021.27E+051.07E+074.21E+08 + 99M1 21.972.17E-011.19E+025.96E+031.48E+051.43E+022.03E+041.02E+063.08E+07 + 99M1 29.001.34E-013.63E+011.68E+033.99E+046.28E+015.49E+031.94E+054.76E+06 + 99M1 44.006.13E-026.11E+002.42E+025.01E+031.83E+018.03E+021.74E+043.06E+05 + 99M1 56.003.82E-022.20E+007.75E+011.44E+038.97E+002.71E+024.52E+036.49E+04 + 99M1 74.002.17E-026.94E-012.08E+013.35E+023.96E+007.94E+019.91E+021.13E+04 + 99M1 107.001.01E-021.64E-013.72E+004.80E+011.35E+001.65E+011.44E+021.21E+03 + 99M1 155.004.62E-034.53E-027.10E-017.10E+004.63E-013.64E+002.27E+011.41E+02 + 99M1 285.001.33E-037.89E-036.22E-023.81E-018.25E-023.61E-011.39E+005.43E+00 + 99M1 500.004.60E-042.14E-039.80E-033.79E-021.74E-025.26E-021.40E-013.79E-01 + 99M2 7.561.81E+006.99E+054.32E+083.63E+104.75E+021.05E+055.79E+066.28E+07 + 99M2 8.561.61E+003.78E+051.94E+081.57E+103.28E+025.99E+043.19E+065.44E+07 + 99M2 10.561.23E+001.34E+055.07E+073.77E+091.75E+022.35E+041.15E+062.71E+07 + 99M2 14.567.39E-012.77E+046.72E+064.21E+086.75E+015.80E+032.38E+056.41E+06 + 99M2 21.563.47E-014.08E+035.99E+052.91E+072.11E+011.10E+033.52E+048.84E+05 + 99M2 29.001.83E-019.72E+021.00E+053.96E+068.82E+003.22E+028.43E+031.87E+05 + 99M2 44.006.90E-021.33E+028.60E+032.50E+052.61E+006.06E+011.17E+032.05E+04 + 99M2 56.003.80E-024.26E+012.15E+035.18E+041.30E+002.36E+013.83E+025.72E+03 + 99M2 74.001.86E-021.17E+014.44E+028.65E+035.82E-018.14E+001.07E+021.32E+03 + 99M2 107.007.08E-032.19E+005.83E+018.53E+022.04E-012.06E+002.05E+011.95E+02 + 99M2 155.002.64E-034.27E-018.11E+008.92E+017.20E-025.40E-014.09E+002.98E+01 + 99M2 285.005.28E-043.32E-023.78E-012.65E+001.34E-026.58E-023.25E-011.55E+00 + 99M2 500.001.27E-043.74E-032.82E-021.36E-012.89E-031.05E-023.66E-021.23E-01 + 99M3 6.267.57E+001.94E+061.39E+091.34E+113.07E+016.49E+064.25E+103.40E+13 + 99M3 7.265.82E+009.21E+055.24E+084.65E+101.96E+013.10E+061.52E+109.56E+12 + 99M3 9.263.64E+002.72E+051.07E+088.22E+099.39E+009.18E+052.84E+091.21E+12 + 99M3 13.261.69E+004.49E+041.05E+076.42E+083.17E+001.53E+052.41E+085.98E+10 + 99M3 20.266.19E-015.36E+037.09E+053.23E+078.77E-011.84E+041.34E+071.84E+09 + 99M3 29.002.47E-018.88E+027.52E+042.64E+062.96E-013.08E+031.20E+061.03E+08 + 99M3 44.007.92E-021.10E+025.76E+031.47E+058.41E-023.86E+027.53E+043.93E+06 + 99M3 56.003.99E-023.32E+011.33E+032.81E+044.07E-021.16E+021.56E+046.21E+05 + 99M3 74.001.77E-028.31E+002.46E+024.19E+031.76E-022.91E+012.58E+037.67E+04 + 99M3 107.005.90E-031.34E+002.73E+013.46E+025.87E-034.69E+002.51E+025.19E+03 + 99M3 155.001.93E-032.19E-013.08E+002.91E+011.96E-037.52E-012.56E+013.80E+02 + 99M3 285.003.08E-041.18E-029.37E-025.57E-013.28E-043.80E-026.99E-016.39E+00 + 99M3 500.006.03E-058.87E-044.40E-031.80E-026.53E-052.52E-033.00E-021.90E-01 + 99M4 5.621.88E+015.69E+041.11E+097.07E+129.30E+002.21E+056.68E+082.25E+11 + 99M4 6.621.15E+012.49E+043.53E+081.69E+125.50E+009.73E+042.21E+086.57E+10 + 99M4 8.625.10E+006.56E+035.54E+071.71E+112.35E+002.59E+043.77E+079.06E+09 + 99M4 12.621.47E+009.64E+023.82E+066.43E+096.78E-013.83E+033.01E+065.25E+08 + 99M4 19.623.24E-011.05E+021.73E+051.51E+081.57E-014.18E+021.69E+052.01E+07 + 99M4 29.007.95E-021.48E+011.12E+045.72E+064.23E-025.88E+011.37E+041.15E+06 + 99M4 44.001.69E-021.85E+006.17E+021.83E+051.02E-027.28E+009.84E+025.71E+04 + 99M4 56.006.73E-035.53E-011.16E+022.57E+044.41E-032.18E+002.19E+021.03E+04 + 99M4 74.002.29E-031.38E-011.71E+012.72E+031.66E-035.41E-013.94E+011.44E+03 + 99M4 107.005.41E-042.21E-021.40E+001.47E+024.49E-048.62E-024.22E+001.12E+02 + 99M4 155.001.26E-043.58E-031.19E-018.28E+001.18E-041.37E-024.65E-019.00E+00 + 99M4 285.001.16E-051.90E-042.46E-038.74E-021.28E-056.90E-041.36E-021.63E-01 + 99M4 500.001.35E-061.39E-058.90E-051.68E-031.59E-064.52E-055.87E-044.75E-03 + 99M5 5.362.93E+014.27E+042.94E+091.35E+135.20E+009.08E+034.16E+098.55E+13 + 99M5 6.361.74E+011.78E+048.84E+083.01E+123.01E+003.87E+031.26E+091.86E+13 + 99M5 8.367.32E+004.40E+031.30E+082.77E+111.24E+009.89E+021.86E+081.62E+12 + 99M5 12.361.99E+006.00E+028.31E+069.35E+093.49E-011.41E+021.21E+075.05E+10 + 99M5 19.364.13E-016.14E+013.53E+051.99E+087.97E-021.50E+015.24E+059.61E+08 + 99M5 29.009.36E-027.89E+002.05E+046.45E+062.07E-022.03E+003.12E+042.80E+07 + 99M5 44.001.91E-029.44E-011.09E+031.95E+055.05E-032.59E-011.70E+037.60E+05 + 99M5 56.007.48E-032.75E-011.99E+022.62E+042.21E-037.96E-023.15E+029.65E+04 + 99M5 74.002.49E-036.62E-022.80E+012.61E+038.44E-042.06E-024.51E+019.11E+03 + 99M5 107.005.71E-041.01E-022.11E+001.27E+022.33E-043.51E-033.47E+004.19E+02 + 99M5 155.001.30E-041.54E-031.60E-016.34E+006.34E-056.18E-042.65E-012.02E+01 + 99M5 285.001.22E-057.63E-052.44E-035.01E-027.45E-063.94E-053.97E-031.58E-01 + 99M5 500.001.51E-065.72E-066.05E-056.70E-041.09E-063.63E-068.87E-052.13E-03 + 99N+ 50.006.28E-025.45E+013.33E+031.57E+055.60E+002.91E+021.94E+049.85E+05 + 99N+ 70.002.64E-021.09E+014.46E+021.32E+042.08E+006.23E+012.35E+037.50E+04 + 99N+ 100.001.07E-022.05E+005.72E+011.09E+037.40E-011.29E+012.77E+025.52E+03 + 99N+ 150.003.83E-033.23E-016.01E+007.51E+012.30E-012.31E+002.75E+013.32E+02 + 99N+ 200.001.88E-039.14E-021.30E+001.24E+011.01E-017.19E-015.88E+005.09E+01 + 99N+ 500.002.44E-042.67E-031.70E-027.92E-027.86E-032.58E-028.37E-022.91E-01 +100K 143.011.83E-011.08E-012.18E-028.80E-041.39E+014.52E+013.23E+015.56E+00 +100K 143.711.81E-011.10E-012.53E-021.71E-031.37E+014.44E+013.25E+016.40E+00 +100K 145.011.77E-011.13E-013.22E-023.84E-031.34E+014.31E+013.31E+018.02E+00 +100K 148.211.69E-011.21E-014.96E-021.23E-021.26E+014.03E+013.42E+011.19E+01 +100K 152.011.60E-011.28E-017.07E-022.81E-021.17E+013.71E+013.48E+011.62E+01 +100K 156.001.51E-011.34E-019.24E-025.05E-021.09E+013.41E+013.48E+012.03E+01 +100K 162.001.39E-011.40E-011.23E-019.25E-029.75E+003.03E+013.43E+012.52E+01 +100K 170.001.25E-011.44E-011.59E-011.57E-018.51E+002.59E+013.27E+012.98E+01 +100K 182.001.08E-011.44E-011.99E-012.56E-017.02E+002.08E+012.94E+013.32E+01 +100K 195.009.31E-021.41E-012.28E-013.48E-015.78E+001.67E+012.56E+013.36E+01 +100K 212.007.77E-021.32E-012.46E-014.36E-014.56E+001.28E+012.11E+013.13E+01 +100K 225.006.84E-021.25E-012.51E-014.77E-013.86E+001.06E+011.82E+012.87E+01 +100K 242.005.85E-021.15E-012.48E-015.04E-013.15E+008.40E+001.49E+012.49E+01 +100K 265.004.84E-021.03E-012.35E-015.08E-012.44E+006.31E+001.15E+012.02E+01 +100K 290.004.01E-029.11E-022.17E-014.86E-011.90E+004.76E+008.82E+001.60E+01 +100K 355.002.67E-026.75E-021.69E-013.90E-011.09E+002.55E+004.76E+008.83E+00 +100K 440.001.76E-024.82E-021.21E-012.77E-016.05E-011.34E+002.44E+004.48E+00 +100K 530.001.24E-023.57E-028.86E-021.96E-013.65E-017.75E-011.38E+002.45E+00 +100K 640.008.86E-032.63E-026.34E-021.35E-012.19E-014.52E-017.77E-011.33E+00 +100K 870.005.21E-031.58E-023.63E-027.16E-029.63E-021.94E-013.16E-015.09E-01 +100K 1150.003.27E-039.91E-032.17E-024.02E-024.55E-029.26E-021.45E-012.21E-01 +100K 1400.002.37E-037.09E-031.51E-022.69E-022.68E-025.58E-028.55E-021.26E-01 +100K 1650.001.81E-035.34E-031.11E-021.93E-021.72E-023.68E-025.57E-028.00E-02 +100L1 28.574.65E-011.32E+021.39E+031.61E+032.98E+022.19E+043.77E+051.62E+06 +100L1 29.274.51E-011.19E+021.38E+032.58E+032.79E+021.96E+043.32E+051.56E+06 +100L1 30.574.22E-019.90E+011.33E+034.15E+032.45E+021.60E+042.65E+051.43E+06 +100L1 33.773.63E-016.53E+011.11E+036.24E+031.82E+021.01E+041.59E+051.06E+06 +100L1 37.573.07E-014.16E+018.22E+026.42E+031.33E+026.22E+039.16E+046.93E+05 +100L1 41.002.66E-012.87E+016.16E+025.66E+031.03E+024.18E+035.83E+044.69E+05 +100L1 47.002.10E-011.60E+013.73E+023.98E+036.86E+012.27E+032.89E+042.43E+05 +100L1 55.001.58E-018.19E+001.98E+022.31E+034.32E+011.13E+031.29E+041.09E+05 +100L1 67.001.09E-013.58E+008.58E+011.03E+032.42E+014.76E+024.72E+033.82E+04 +100L1 80.007.74E-021.73E+003.95E+014.66E+021.44E+012.22E+021.94E+031.47E+04 +100L1 97.005.26E-028.20E-011.69E+011.89E+028.21E+009.89E+017.46E+025.15E+03 +100L1 110.004.07E-025.16E-019.72E+001.03E+025.70E+005.88E+014.04E+022.61E+03 +100L1 127.003.03E-023.12E-015.22E+005.16E+013.76E+003.28E+012.03E+021.20E+03 +100L1 150.002.15E-021.81E-012.58E+002.32E+012.33E+001.69E+019.24E+014.95E+02 +100L1 175.001.56E-021.14E-011.38E+001.12E+011.50E+009.29E+004.54E+012.21E+02 +100L1 240.008.21E-034.81E-024.10E-012.64E+006.11E-012.84E+001.11E+014.41E+01 +100L1 325.004.52E-032.31E-021.43E-017.26E-012.61E-019.61E-013.09E+001.01E+01 +100L1 420.002.79E-031.31E-026.43E-022.66E-011.29E-014.02E-011.11E+003.13E+00 +100L1 530.001.84E-038.05E-033.29E-021.15E-016.80E-021.89E-014.60E-011.14E+00 +100L1 760.009.91E-043.96E-031.28E-023.55E-022.56E-026.26E-021.29E-012.68E-01 +100L11050.005.84E-042.16E-035.97E-031.40E-021.07E-022.47E-024.54E-028.26E-02 +100L11550.003.14E-041.06E-032.55E-035.12E-033.75E-038.56E-031.43E-022.30E-02 +100L2 27.661.17E+004.88E+033.05E+052.56E+064.22E+019.33E+025.17E+035.25E+03 +100L2 28.361.10E+004.32E+032.66E+052.44E+063.94E+018.52E+025.16E+038.44E+03 +100L2 29.669.82E-013.48E+032.08E+052.19E+063.45E+017.26E+025.03E+031.36E+04 +100L2 32.867.62E-012.13E+031.20E+051.54E+062.55E+015.04E+024.28E+032.06E+04 +100L2 36.665.78E-011.26E+036.60E+049.63E+051.85E+013.41E+023.28E+032.14E+04 +100L2 41.004.33E-017.38E+023.58E+045.60E+051.33E+012.28E+022.35E+031.83E+04 +100L2 47.003.03E-013.86E+021.70E+042.75E+058.96E+001.39E+021.49E+031.30E+04 +100L2 55.001.99E-011.84E+027.22E+031.16E+055.68E+007.89E+018.46E+027.81E+03 +100L2 67.001.17E-017.35E+012.47E+033.79E+043.21E+003.88E+013.98E+023.67E+03 +100L2 80.007.18E-023.25E+019.50E+021.36E+041.93E+002.05E+011.98E+021.75E+03 +100L2 97.004.22E-021.35E+013.39E+024.41E+031.12E+001.03E+019.08E+017.47E+02 +100L2 110.002.98E-027.69E+001.74E+022.11E+037.82E-016.62E+005.45E+014.23E+02 +100L2 127.002.00E-024.06E+008.20E+019.13E+025.22E-013.99E+003.03E+012.19E+02 +100L2 150.001.26E-021.96E+003.46E+013.47E+023.27E-012.24E+001.54E+011.01E+02 +100L2 175.008.28E-031.01E+001.58E+011.43E+022.13E-011.31E+008.23E+004.95E+01 +100L2 240.003.51E-032.68E-013.27E+002.42E+018.91E-024.50E-012.32E+001.15E+01 +100L2 325.001.57E-037.85E-027.66E-014.65E+003.89E-021.65E-017.07E-012.92E+00 +100L2 420.008.12E-042.90E-022.36E-011.22E+001.94E-027.22E-022.66E-019.47E-01 +100L2 530.004.53E-041.21E-028.49E-023.82E-011.03E-023.47E-021.13E-013.52E-01 +100L2 760.001.90E-043.37E-031.90E-027.03E-023.87E-031.15E-023.14E-028.17E-02 +100L21050.009.00E-051.14E-035.43E-031.73E-021.60E-034.42E-031.06E-022.39E-02 +100L21550.003.75E-053.38E-041.35E-033.68E-035.48E-041.45E-033.05E-036.01E-03 +100L3 21.872.93E+001.37E+041.16E+061.39E+072.75E+004.56E+042.52E+071.72E+09 +100L3 22.572.68E+001.17E+049.56E+051.24E+072.50E+003.92E+042.04E+071.35E+09 +100L3 23.872.28E+008.83E+036.84E+059.93E+062.11E+002.96E+041.40E+078.84E+08 +100L3 27.071.59E+004.70E+033.23E+055.49E+061.44E+001.58E+046.01E+063.42E+08 +100L3 30.871.09E+002.43E+031.48E+052.72E+069.62E-018.22E+032.50E+061.27E+08 +100L3 41.004.69E-015.84E+022.72E+045.12E+054.05E-012.00E+033.84E+051.53E+07 +100L3 47.003.11E-012.95E+021.21E+042.20E+052.67E-011.01E+031.57E+055.56E+06 +100L3 55.001.93E-011.34E+024.74E+038.14E+041.66E-014.64E+025.65E+041.75E+06 +100L3 67.001.05E-015.02E+011.47E+032.29E+049.12E-021.74E+021.59E+044.15E+05 +100L3 80.006.06E-022.08E+015.15E+027.25E+035.34E-027.21E+015.14E+031.16E+05 +100L3 97.003.32E-028.00E+001.65E+022.06E+032.99E-022.78E+011.53E+032.94E+04 +100L3 110.002.24E-024.30E+007.89E+019.04E+022.05E-021.49E+017.01E+021.22E+04 +100L3 127.001.43E-022.12E+003.40E+013.52E+021.33E-027.32E+002.90E+024.48E+03 +100L3 150.008.51E-039.39E-011.29E+011.19E+028.12E-033.22E+001.05E+021.43E+03 +100L3 175.005.27E-034.44E-015.28E+004.34E+015.13E-031.51E+004.17E+015.03E+02 +100L3 240.001.99E-039.70E-028.67E-015.66E+002.02E-033.20E-016.49E+006.23E+01 +100L3 325.007.96E-042.31E-021.59E-018.37E-018.31E-047.30E-021.14E+008.96E+00 +100L3 420.003.74E-047.08E-033.93E-021.75E-013.96E-042.12E-022.73E-011.83E+00 +100L3 530.001.92E-042.49E-031.15E-024.47E-022.04E-046.96E-037.66E-024.52E-01 +100L3 760.007.07E-055.27E-041.89E-036.12E-037.44E-051.29E-031.13E-025.61E-02 +100L31050.003.06E-051.43E-044.23E-041.18E-033.13E-053.01E-042.14E-039.34E-03 +100L31550.001.21E-053.44E-058.26E-051.95E-041.19E-055.93E-053.12E-041.18E-03 +100M1 8.198.31E-018.75E+034.57E+054.44E+063.04E+032.65E+065.41E+082.76E+10 +100M1 9.197.38E-015.35E+032.83E+054.18E+062.15E+031.51E+062.58E+081.27E+10 +100M1 11.195.86E-012.32E+031.23E+052.47E+061.19E+035.78E+057.35E+073.36E+09 +100M1 15.193.85E-016.33E+023.30E+047.79E+054.80E+021.32E+051.08E+074.17E+08 +100M1 22.192.11E-011.27E+026.15E+031.50E+051.55E+022.15E+041.06E+063.16E+07 +100M1 29.001.33E-014.05E+011.82E+034.25E+047.00E+016.11E+032.15E+055.23E+06 +100M1 44.006.14E-026.87E+002.64E+025.38E+032.04E+018.92E+021.93E+043.35E+05 +100M1 56.003.84E-022.48E+008.50E+011.56E+031.00E+013.01E+024.99E+037.12E+04 +100M1 74.002.19E-027.86E-012.29E+013.63E+024.41E+008.80E+011.09E+031.24E+04 +100M1 107.001.02E-021.86E-014.12E+005.25E+011.50E+001.83E+011.58E+021.32E+03 +100M1 155.004.71E-035.08E-027.90E-017.81E+005.17E-014.03E+002.50E+011.54E+02 +100M1 285.001.37E-038.65E-036.89E-024.20E-019.18E-023.98E-011.52E+005.93E+00 +100M1 500.004.78E-042.32E-031.07E-024.16E-021.94E-025.79E-021.53E-014.13E-01 +100M2 7.781.70E+006.66E+053.94E+083.19E+104.95E+021.03E+055.43E+065.64E+07 +100M2 8.781.51E+003.66E+051.81E+081.41E+103.45E+025.95E+043.04E+064.96E+07 +100M2 10.781.18E+001.33E+054.87E+073.52E+091.87E+022.39E+041.12E+062.55E+07 +100M2 14.787.17E-012.83E+046.70E+064.09E+087.33E+016.03E+032.40E+056.25E+06 +100M2 21.783.43E-014.26E+036.15E+052.93E+072.33E+011.16E+033.64E+048.92E+05 +100M2 29.001.86E-011.07E+031.09E+054.27E+061.00E+013.56E+029.16E+032.00E+05 +100M2 44.007.09E-021.46E+029.38E+032.70E+052.96E+006.69E+011.28E+032.20E+04 +100M2 56.003.92E-024.69E+012.34E+035.60E+041.47E+002.61E+014.17E+026.15E+03 +100M2 74.001.94E-021.29E+014.85E+029.36E+036.61E-018.99E+001.17E+021.42E+03 +100M2 107.007.41E-032.41E+006.38E+019.25E+022.32E-012.28E+002.24E+012.11E+02 +100M2 155.002.78E-034.71E-018.89E+009.70E+018.19E-025.99E-014.48E+003.23E+01 +100M2 285.005.62E-043.67E-024.16E-012.90E+001.52E-027.32E-023.57E-011.69E+00 +100M2 500.001.36E-044.15E-033.11E-021.50E-013.30E-031.17E-024.05E-021.35E-01 +100M3 6.407.26E+001.87E+061.29E+091.20E+113.02E+016.44E+064.06E+103.16E+13 +100M3 7.405.62E+009.03E+054.95E+084.26E+101.95E+013.12E+061.49E+109.12E+12 +100M3 9.403.54E+002.72E+051.04E+087.76E+099.45E+009.45E+052.86E+091.20E+12 +100M3 13.401.67E+004.60E+041.05E+076.26E+083.23E+001.61E+052.51E+086.14E+10 +100M3 20.406.18E-015.59E+037.24E+053.23E+079.06E-011.98E+041.43E+071.94E+09 +100M3 29.002.52E-019.61E+028.02E+042.77E+063.13E-013.42E+031.34E+061.15E+08 +100M3 44.008.12E-021.20E+026.14E+031.55E+058.88E-024.29E+028.39E+044.38E+06 +100M3 56.004.10E-023.59E+011.41E+032.96E+044.29E-021.29E+021.73E+046.91E+05 +100M3 74.001.82E-028.99E+002.62E+024.41E+031.86E-023.24E+012.87E+038.52E+04 +100M3 107.006.10E-031.45E+002.90E+013.64E+026.19E-035.20E+002.78E+025.75E+03 +100M3 155.002.00E-032.37E-013.28E+003.07E+012.06E-038.34E-012.84E+014.20E+02 +100M3 285.003.22E-041.27E-029.99E-025.89E-013.46E-044.21E-027.73E-017.04E+00 +100M3 500.006.31E-059.55E-044.69E-031.91E-026.88E-052.78E-033.31E-022.09E-01 +100M4 5.751.80E+015.49E+041.02E+096.36E+129.14E+002.20E+056.37E+082.08E+11 +100M4 6.751.12E+012.45E+043.33E+081.57E+125.47E+009.87E+042.16E+086.25E+10 +100M4 8.755.01E+006.61E+035.40E+071.65E+112.37E+002.69E+043.80E+078.93E+09 +100M4 12.751.47E+009.96E+023.85E+066.48E+096.95E-014.07E+033.13E+065.37E+08 +100M4 19.753.29E-011.11E+021.80E+051.57E+081.64E-014.54E+021.80E+052.11E+07 +100M4 29.008.32E-021.62E+011.22E+046.30E+064.51E-026.61E+011.52E+041.27E+06 +100M4 44.001.77E-022.02E+006.72E+022.02E+051.09E-028.18E+001.10E+036.31E+04 +100M4 56.007.09E-036.05E-011.27E+022.83E+044.72E-032.44E+002.44E+021.13E+04 +100M4 74.002.42E-031.51E-011.87E+012.99E+031.78E-036.08E-014.39E+011.60E+03 +100M4 107.005.74E-042.43E-021.53E+001.61E+024.82E-049.69E-024.69E+001.24E+02 +100M4 155.001.34E-043.93E-031.30E-019.12E+001.27E-041.55E-025.17E-019.97E+00 +100M4 285.001.24E-052.09E-042.68E-039.64E-021.38E-057.75E-041.52E-021.81E-01 +100M4 500.001.44E-061.52E-059.72E-051.85E-031.72E-065.07E-056.55E-045.28E-03 +100M5 5.492.81E+014.01E+042.75E+091.22E+135.10E+008.72E+034.01E+097.96E+13 +100M5 6.491.68E+011.70E+048.50E+082.81E+122.98E+003.78E+031.24E+091.78E+13 +100M5 8.497.19E+004.30E+031.29E+082.69E+111.25E+009.87E+021.89E+081.62E+12 +100M5 12.491.99E+006.01E+028.52E+069.45E+093.57E-011.44E+021.27E+075.26E+10 +100M5 19.494.20E-016.27E+013.72E+052.07E+088.25E-021.57E+015.65E+051.03E+09 +100M5 29.009.77E-028.32E+002.26E+047.08E+062.19E-022.17E+003.51E+043.18E+07 +100M5 44.002.01E-029.97E-011.20E+032.14E+055.35E-032.78E-011.91E+038.61E+05 +100M5 56.007.86E-032.91E-012.19E+022.87E+042.34E-038.53E-023.55E+021.09E+05 +100M5 74.002.62E-037.01E-023.08E+012.86E+038.96E-042.20E-025.08E+011.03E+04 +100M5 107.006.04E-041.07E-022.33E+001.40E+022.48E-043.76E-033.90E+004.73E+02 +100M5 155.001.38E-041.63E-031.76E-016.94E+006.74E-056.61E-042.98E-012.27E+01 +100M5 285.001.28E-058.14E-052.69E-035.49E-027.94E-064.22E-054.45E-031.78E-01 +100M5 500.001.63E-066.11E-066.62E-057.34E-041.16E-063.89E-069.90E-052.39E-03 +100N+ 50.006.47E-025.99E+013.65E+031.75E+056.28E+003.25E+022.18E+041.11E+06 +100N+ 70.002.72E-021.19E+014.88E+021.46E+042.33E+006.94E+012.63E+038.43E+04 +100N+ 100.001.10E-022.26E+006.26E+011.20E+038.29E-011.43E+013.08E+026.17E+03 +100N+ 150.003.97E-033.56E-016.59E+008.23E+012.57E-012.56E+003.05E+013.69E+02 +100N+ 200.001.96E-031.01E-011.43E+001.36E+011.13E-017.98E-016.51E+005.64E+01 +100N+ 500.002.58E-042.95E-031.88E-028.73E-028.79E-032.86E-029.23E-023.20E-01 +101K 146.631.74E-011.02E-012.08E-028.22E-041.42E+014.41E+013.04E+015.08E+00 +101K 147.331.72E-011.04E-012.41E-021.58E-031.40E+014.33E+013.06E+015.84E+00 +101K 148.631.69E-011.07E-013.04E-023.52E-031.37E+014.22E+013.12E+017.29E+00 +101K 151.831.61E-011.15E-014.67E-021.12E-021.29E+013.94E+013.22E+011.08E+01 +101K 155.631.53E-011.22E-016.64E-022.56E-021.20E+013.64E+013.28E+011.47E+01 +101K 160.001.44E-011.28E-018.87E-024.81E-021.11E+013.34E+013.30E+011.87E+01 +101K 166.001.33E-011.34E-011.18E-018.70E-029.98E+002.97E+013.25E+012.32E+01 +101K 174.001.20E-011.38E-011.51E-011.47E-018.74E+002.55E+013.11E+012.74E+01 +101K 186.001.04E-011.39E-011.91E-012.39E-017.24E+002.07E+012.81E+013.07E+01 +101K 199.009.02E-021.36E-012.19E-013.27E-015.98E+001.67E+012.47E+013.12E+01 +101K 216.007.57E-021.29E-012.38E-014.12E-014.75E+001.28E+012.05E+012.93E+01 +101K 229.006.68E-021.22E-012.43E-014.53E-014.03E+001.07E+011.77E+012.70E+01 +101K 246.005.75E-021.14E-012.42E-014.82E-013.30E+008.51E+001.46E+012.37E+01 +101K 269.004.77E-021.02E-012.32E-014.90E-012.57E+006.43E+001.14E+011.94E+01 +101K 295.003.95E-029.05E-022.15E-014.72E-011.99E+004.82E+008.70E+001.53E+01 +101K 360.002.65E-026.80E-021.69E-013.85E-011.15E+002.62E+004.77E+008.65E+00 +101K 445.001.77E-024.91E-021.23E-012.77E-016.42E-011.39E+002.48E+004.46E+00 +101K 540.001.24E-023.61E-028.91E-021.95E-013.79E-017.88E-011.37E+002.40E+00 +101K 650.008.90E-032.68E-026.44E-021.35E-012.30E-014.66E-017.87E-011.33E+00 +101K 880.005.30E-031.63E-023.73E-027.32E-021.02E-012.02E-013.26E-015.18E-01 +101K 1150.003.40E-031.04E-022.29E-024.23E-024.96E-029.98E-021.55E-012.34E-01 +101K 1400.002.46E-037.48E-031.59E-022.83E-022.91E-026.01E-029.14E-021.33E-01 +101K 1650.001.89E-035.64E-031.17E-022.03E-021.86E-023.97E-025.96E-028.51E-02 +101L1 29.384.37E-011.27E+021.28E+031.42E+033.04E+022.12E+043.51E+051.45E+06 +101L1 30.084.24E-011.15E+021.27E+032.27E+032.86E+021.90E+043.10E+051.40E+06 +101L1 31.383.98E-019.66E+011.23E+033.65E+032.52E+021.56E+042.49E+051.29E+06 +101L1 34.583.45E-016.46E+011.04E+035.55E+031.89E+021.00E+041.51E+059.67E+05 +101L1 38.382.92E-014.17E+017.82E+025.81E+031.39E+026.23E+038.85E+046.44E+05 +101L1 41.002.63E-013.16E+016.33E+025.37E+031.14E+024.62E+036.30E+044.82E+05 +101L1 47.002.08E-011.77E+013.89E+023.93E+037.63E+012.50E+033.12E+042.53E+05 +101L1 55.001.58E-019.13E+002.10E+022.34E+034.80E+011.24E+031.40E+041.15E+05 +101L1 67.001.09E-014.01E+009.19E+011.07E+032.69E+015.24E+025.12E+034.05E+04 +101L1 80.007.76E-021.95E+004.27E+014.89E+021.60E+012.45E+022.10E+031.56E+04 +101L1 97.005.30E-029.23E-011.84E+012.00E+029.12E+001.09E+028.10E+025.51E+03 +101L1 110.004.11E-025.80E-011.06E+011.10E+026.33E+006.47E+014.39E+022.79E+03 +101L1 127.003.07E-023.50E-015.73E+005.55E+014.18E+003.61E+012.20E+021.29E+03 +101L1 150.002.18E-022.02E-012.84E+002.51E+012.59E+001.86E+011.01E+025.33E+02 +101L1 175.001.59E-021.26E-011.51E+001.21E+011.66E+001.02E+014.93E+012.38E+02 +101L1 240.008.40E-035.27E-024.51E-012.88E+006.79E-013.11E+001.21E+014.76E+01 +101L1 325.004.65E-032.51E-021.57E-017.92E-012.90E-011.05E+003.36E+001.09E+01 +101L1 420.002.89E-031.41E-027.02E-022.90E-011.42E-014.41E-011.21E+003.38E+00 +101L1 530.001.91E-038.66E-033.58E-021.25E-017.53E-022.07E-015.01E-011.23E+00 +101L1 760.001.03E-034.25E-031.39E-023.85E-022.83E-026.86E-021.41E-012.90E-01 +101L11050.006.10E-042.31E-036.45E-031.51E-021.18E-022.70E-024.94E-028.95E-02 +101L11550.003.29E-041.13E-032.75E-035.52E-034.12E-039.37E-031.56E-022.50E-02 +101L2 28.461.11E+004.63E+032.78E+052.25E+064.38E+019.08E+024.83E+034.69E+03 +101L2 29.161.05E+004.13E+032.43E+052.14E+064.11E+018.33E+024.82E+037.49E+03 +101L2 30.469.38E-013.34E+031.92E+051.93E+063.61E+017.12E+024.71E+031.21E+04 +101L2 33.667.34E-012.07E+031.12E+051.38E+062.69E+015.00E+024.05E+031.85E+04 +101L2 37.465.61E-011.24E+036.26E+048.77E+051.97E+013.41E+023.14E+031.96E+04 +101L2 41.004.45E-018.06E+023.83E+045.71E+051.51E+012.47E+022.42E+031.76E+04 +101L2 47.003.12E-014.22E+021.82E+042.84E+051.01E+011.51E+021.55E+031.29E+04 +101L2 55.002.06E-012.02E+027.75E+031.21E+056.43E+008.59E+018.90E+027.90E+03 +101L2 67.001.21E-018.04E+012.66E+033.99E+043.64E+004.23E+014.22E+023.79E+03 +101L2 80.007.48E-023.56E+011.03E+031.44E+042.19E+002.24E+012.11E+021.82E+03 +101L2 97.004.41E-021.48E+013.67E+024.69E+031.26E+001.13E+019.74E+017.86E+02 +101L2 110.003.12E-028.44E+001.89E+022.25E+038.86E-017.26E+005.86E+014.47E+02 +101L2 127.002.10E-024.46E+008.90E+019.77E+025.92E-014.39E+003.27E+012.32E+02 +101L2 150.001.33E-022.15E+003.76E+013.73E+023.71E-012.46E+001.66E+011.08E+02 +101L2 175.008.74E-031.11E+001.72E+011.54E+022.42E-011.45E+008.92E+005.30E+01 +101L2 240.003.73E-032.95E-013.57E+002.61E+011.01E-014.98E-012.52E+001.24E+01 +101L2 325.001.68E-038.67E-028.40E-015.05E+004.42E-021.83E-017.73E-013.17E+00 +101L2 420.008.70E-043.20E-022.60E-011.33E+002.20E-028.02E-022.92E-011.03E+00 +101L2 530.004.88E-041.34E-029.35E-024.18E-011.17E-023.86E-021.24E-013.85E-01 +101L2 760.002.05E-043.74E-032.10E-027.73E-024.41E-031.29E-023.47E-028.99E-02 +101L21050.009.75E-051.27E-036.03E-031.91E-021.82E-034.96E-031.17E-022.64E-02 +101L21550.004.11E-053.77E-041.50E-034.08E-036.23E-041.63E-033.40E-036.67E-03 +101L3 22.362.81E+001.31E+041.07E+061.25E+072.70E+004.50E+042.40E+071.60E+09 +101L3 23.062.57E+001.13E+048.87E+051.12E+072.46E+003.89E+041.96E+071.26E+09 +101L3 24.362.19E+008.59E+036.38E+058.97E+062.08E+002.96E+041.35E+078.33E+08 +101L3 27.561.54E+004.62E+033.07E+055.03E+061.43E+001.60E+045.91E+063.29E+08 +101L3 31.361.06E+002.41E+031.42E+052.53E+069.63E-018.40E+032.50E+061.24E+08 +101L3 41.004.81E-016.29E+022.87E+045.26E+054.26E-012.21E+034.25E+051.68E+07 +101L3 47.003.19E-013.17E+021.28E+042.27E+052.81E-011.12E+031.74E+056.10E+06 +101L3 55.001.98E-011.45E+025.01E+038.43E+041.74E-015.12E+026.25E+041.92E+06 +101L3 67.001.08E-015.40E+011.55E+032.38E+049.59E-021.92E+021.76E+044.56E+05 +101L3 80.006.24E-022.24E+015.44E+027.55E+035.61E-027.97E+015.68E+031.27E+05 +101L3 97.003.43E-028.61E+001.75E+022.15E+033.14E-023.06E+011.69E+033.23E+04 +101L3 110.002.31E-024.63E+008.34E+019.43E+022.15E-021.64E+017.73E+021.33E+04 +101L3 127.001.48E-022.28E+003.60E+013.68E+021.40E-028.08E+003.19E+024.90E+03 +101L3 150.008.80E-031.01E+001.36E+011.24E+028.53E-033.55E+001.16E+021.56E+03 +101L3 175.005.46E-034.77E-015.59E+004.55E+015.39E-031.66E+004.59E+015.51E+02 +101L3 240.002.06E-031.04E-019.19E-015.94E+002.12E-033.53E-017.13E+006.82E+01 +101L3 325.008.27E-042.48E-021.68E-018.81E-018.73E-048.04E-021.25E+009.79E+00 +101L3 420.003.89E-047.58E-034.16E-021.85E-014.15E-042.33E-022.99E-012.00E+00 +101L3 530.002.00E-042.66E-031.22E-024.72E-022.13E-047.64E-038.40E-024.94E-01 +101L3 760.007.37E-055.61E-042.01E-036.48E-037.79E-051.41E-031.24E-026.13E-02 +101L31050.003.18E-051.52E-044.48E-041.26E-033.27E-053.27E-042.35E-031.02E-02 +101L31550.001.26E-053.62E-058.73E-052.07E-041.24E-056.40E-053.40E-041.28E-03 +101M1 8.427.83E-018.60E+034.39E+054.09E+063.12E+032.58E+065.05E+082.49E+10 +101M1 9.426.98E-015.33E+032.75E+053.91E+062.23E+031.49E+062.45E+081.17E+10 +101M1 11.425.57E-012.35E+031.22E+052.37E+061.25E+035.83E+057.19E+073.19E+09 +101M1 15.423.70E-016.57E+023.34E+047.69E+055.11E+021.37E+051.10E+074.12E+08 +101M1 22.422.06E-011.35E+026.35E+031.51E+051.68E+022.28E+041.11E+063.23E+07 +101M1 30.001.24E-013.91E+011.69E+033.84E+047.06E+015.80E+031.95E+054.57E+06 +101M1 45.005.88E-027.01E+002.59E+025.14E+032.12E+018.94E+021.88E+043.18E+05 +101M1 57.003.72E-022.60E+008.57E+011.53E+031.06E+013.08E+024.99E+036.97E+04 +101M1 75.002.15E-028.43E-012.37E+013.67E+024.73E+009.20E+011.12E+031.25E+04 +101M1 108.001.01E-022.03E-014.38E+005.46E+011.63E+001.94E+011.66E+021.37E+03 +101M1 155.004.80E-035.70E-028.78E-018.57E+005.75E-014.45E+002.74E+011.69E+02 +101M1 285.001.41E-039.51E-037.64E-024.63E-011.02E-014.39E-011.66E+006.46E+00 +101M1 510.004.79E-042.41E-031.11E-024.23E-022.04E-025.97E-021.55E-014.12E-01 +101M2 8.001.58E+006.35E+053.60E+082.81E+105.17E+021.00E+055.10E+065.07E+07 +101M2 9.001.42E+003.55E+051.69E+081.27E+103.64E+025.91E+042.90E+064.53E+07 +101M2 11.001.12E+001.32E+054.68E+073.27E+092.00E+022.42E+041.10E+062.39E+07 +101M2 15.006.94E-012.88E+046.67E+063.96E+087.97E+016.26E+032.42E+056.08E+06 +101M2 22.003.39E-014.45E+036.31E+052.95E+072.57E+011.23E+033.76E+048.98E+05 +101M2 30.001.76E-019.96E+029.75E+043.67E+061.03E+013.43E+028.47E+031.78E+05 +101M2 45.006.90E-021.44E+028.99E+032.51E+053.15E+006.77E+011.25E+032.10E+04 +101M2 57.003.88E-024.75E+012.31E+035.40E+041.59E+002.69E+014.18E+026.02E+03 +101M2 75.001.94E-021.33E+014.91E+029.30E+037.24E-019.45E+001.20E+021.43E+03 +101M2 108.007.57E-032.55E+006.63E+019.47E+022.57E-012.44E+002.35E+012.17E+02 +101M2 155.002.93E-035.20E-019.74E+001.06E+029.32E-026.63E-014.90E+003.51E+01 +101M2 285.006.00E-044.07E-024.57E-013.17E+001.73E-028.14E-023.93E-011.84E+00 +101M2 510.001.40E-044.29E-033.16E-021.49E-013.56E-031.23E-024.17E-021.36E-01 +101M3 6.556.97E+001.81E+061.19E+091.07E+112.98E+016.39E+063.88E+102.94E+13 +101M3 7.555.42E+008.85E+054.67E+083.90E+101.94E+013.14E+061.45E+108.70E+12 +101M3 9.553.45E+002.72E+051.00E+087.31E+099.51E+009.71E+052.87E+091.18E+12 +101M3 13.551.64E+004.71E+041.05E+076.10E+083.30E+001.69E+052.60E+086.30E+10 +101M3 20.556.16E-015.84E+037.39E+053.23E+079.35E-012.12E+041.52E+072.05E+09 +101M3 30.002.35E-018.78E+026.93E+042.30E+062.98E-013.21E+031.19E+069.83E+07 +101M3 45.007.81E-021.16E+025.70E+031.39E+058.75E-024.26E+028.07E+044.10E+06 +101M3 57.004.00E-023.56E+011.35E+032.75E+044.29E-021.32E+021.72E+046.71E+05 +101M3 75.001.80E-029.10E+002.58E+024.23E+031.89E-023.36E+012.93E+038.55E+04 +101M3 108.006.13E-031.50E+002.92E+013.60E+026.35E-035.52E+002.92E+025.95E+03 +101M3 155.002.07E-032.56E-013.49E+003.23E+012.18E-039.25E-013.15E+014.64E+02 +101M3 285.003.34E-041.37E-021.06E-016.23E-013.65E-044.66E-028.55E-017.76E+00 +101M3 510.006.24E-059.40E-044.51E-031.81E-026.85E-052.79E-033.28E-022.04E-01 +101M4 5.891.73E+015.32E+049.45E+085.73E+128.99E+002.20E+056.08E+081.93E+11 +101M4 6.891.08E+012.41E+043.14E+081.46E+125.44E+001.00E+052.11E+085.95E+10 +101M4 8.894.91E+006.67E+035.26E+071.59E+112.39E+002.79E+043.83E+078.79E+09 +101M4 12.891.47E+001.03E+033.89E+066.53E+097.13E-014.34E+033.26E+065.48E+08 +101M4 19.893.35E-011.17E+021.86E+051.64E+081.70E-014.92E+021.92E+052.22E+07 +101M4 30.007.69E-021.49E+011.05E+045.23E+064.29E-026.26E+011.37E+041.10E+06 +101M4 45.001.71E-021.97E+006.26E+021.84E+051.07E-028.21E+001.06E+035.93E+04 +101M4 57.006.98E-036.07E-011.22E+022.69E+044.75E-032.51E+002.43E+021.11E+04 +101M4 75.002.43E-031.55E-011.85E+012.96E+031.82E-036.39E-014.49E+011.60E+03 +101M4 108.005.89E-042.54E-021.56E+001.65E+025.00E-041.04E-014.93E+001.28E+02 +101M4 155.001.43E-044.32E-031.42E-011.00E+011.37E-041.74E-025.75E-011.10E+01 +101M4 285.001.32E-052.30E-042.92E-031.06E-011.49E-058.71E-041.69E-022.00E-01 +101M4 510.001.46E-061.52E-059.50E-051.78E-031.73E-065.17E-056.56E-045.21E-03 +101M5 5.612.69E+013.76E+042.59E+091.11E+135.00E+008.37E+033.86E+097.41E+13 +101M5 6.611.63E+011.62E+048.18E+082.63E+122.95E+003.69E+031.22E+091.71E+13 +101M5 8.617.07E+004.21E+031.28E+082.61E+111.26E+009.86E+021.93E+081.62E+12 +101M5 12.611.99E+006.02E+028.74E+069.54E+093.64E-011.47E+021.33E+075.47E+10 +101M5 19.614.26E-016.39E+013.91E+052.15E+088.53E-021.63E+016.08E+051.11E+09 +101M5 30.008.98E-027.38E+001.96E+045.83E+062.07E-021.97E+003.12E+042.68E+07 +101M5 45.001.93E-029.38E-011.12E+031.94E+055.25E-032.67E-011.84E+038.03E+05 +101M5 57.007.69E-032.81E-012.13E+022.71E+042.34E-038.38E-023.53E+021.06E+05 +101M5 75.002.61E-036.92E-023.09E+012.81E+039.07E-042.21E-025.20E+011.04E+04 +101M5 108.006.14E-041.08E-022.40E+001.42E+022.55E-043.86E-034.11E+004.94E+02 +101M5 155.001.46E-041.73E-031.94E-017.60E+007.17E-057.08E-043.34E-012.56E+01 +101M5 285.001.36E-058.66E-052.95E-036.01E-028.45E-064.51E-054.98E-031.99E-01 +101M5 510.001.62E-065.98E-066.38E-056.92E-041.16E-063.84E-069.67E-052.31E-03 +102K 150.331.66E-019.75E-021.99E-027.69E-041.46E+014.31E+012.87E+014.65E+00 +102K 151.031.64E-019.91E-022.29E-021.47E-031.44E+014.24E+012.89E+015.33E+00 +102K 152.331.61E-011.02E-012.89E-023.24E-031.40E+014.13E+012.95E+016.63E+00 +102K 155.531.54E-011.09E-014.41E-021.02E-021.32E+013.87E+013.04E+019.77E+00 +102K 159.331.46E-011.16E-016.26E-022.33E-021.23E+013.58E+013.10E+011.33E+01 +102K 163.001.39E-011.21E-018.03E-024.02E-021.16E+013.33E+013.12E+011.64E+01 +102K 169.001.29E-011.27E-011.08E-017.50E-021.04E+012.97E+013.09E+012.07E+01 +102K 177.001.17E-011.32E-011.41E-011.30E-019.16E+002.57E+012.98E+012.48E+01 +102K 189.001.02E-011.34E-011.80E-012.16E-017.61E+002.09E+012.72E+012.82E+01 +102K 202.008.84E-021.32E-012.09E-013.01E-016.31E+001.69E+012.40E+012.90E+01 +102K 219.007.45E-021.26E-012.30E-013.85E-015.02E+001.31E+012.01E+012.77E+01 +102K 232.006.59E-021.21E-012.36E-014.28E-014.27E+001.09E+011.75E+012.57E+01 +102K 249.005.69E-021.13E-012.37E-014.61E-013.50E+008.75E+001.45E+012.28E+01 +102K 272.004.75E-021.02E-012.29E-014.73E-012.74E+006.64E+001.14E+011.88E+01 +102K 300.003.89E-029.01E-022.12E-014.59E-012.09E+004.90E+008.60E+001.48E+01 +102K 365.002.64E-026.86E-021.70E-013.80E-011.21E+002.69E+004.78E+008.48E+00 +102K 450.001.77E-025.01E-021.25E-012.78E-016.84E-011.44E+002.53E+004.45E+00 +102K 540.001.27E-023.77E-029.28E-022.01E-014.16E-018.48E-011.45E+002.50E+00 +102K 650.009.19E-032.81E-026.74E-021.41E-012.52E-015.01E-018.35E-011.39E+00 +102K 880.005.49E-031.72E-023.93E-027.66E-021.11E-012.18E-013.47E-015.46E-01 +102K 1150.003.53E-031.10E-022.42E-024.45E-025.42E-021.08E-011.65E-012.48E-01 +102K 1400.002.56E-037.90E-031.68E-022.99E-023.18E-026.50E-029.78E-021.42E-01 +102K 1650.001.96E-035.96E-031.24E-022.15E-022.03E-024.29E-026.38E-029.06E-02 +102L1 30.224.13E-011.23E+021.17E+031.25E+033.15E+022.06E+043.26E+051.30E+06 +102L1 30.924.00E-011.12E+021.17E+031.99E+032.94E+021.86E+042.90E+051.26E+06 +102L1 32.223.76E-019.43E+011.14E+033.21E+032.60E+021.53E+042.34E+051.17E+06 +102L1 35.423.27E-016.39E+019.72E+024.95E+031.97E+029.93E+031.44E+058.85E+05 +102L1 39.222.79E-014.19E+017.43E+025.26E+031.45E+026.24E+038.56E+045.98E+05 +102L1 42.002.49E-013.14E+015.99E+024.89E+031.19E+024.58E+036.02E+044.45E+05 +102L1 48.001.99E-011.80E+013.75E+023.64E+038.00E+012.51E+033.03E+042.38E+05 +102L1 56.001.52E-019.43E+002.06E+022.21E+035.08E+011.27E+031.38E+041.10E+05 +102L1 68.001.06E-014.23E+009.24E+011.04E+032.87E+015.42E+025.16E+033.98E+04 +102L1 81.007.60E-022.09E+004.37E+014.85E+021.72E+012.56E+022.15E+031.56E+04 +102L1 98.005.22E-021.00E+001.92E+012.03E+029.87E+001.15E+028.38E+025.58E+03 +102L1 111.004.07E-026.31E-011.12E+011.13E+026.88E+006.87E+014.57E+022.85E+03 +102L1 128.003.05E-023.82E-016.08E+005.74E+014.55E+003.85E+012.31E+021.33E+03 +102L1 151.002.18E-022.21E-013.04E+002.63E+012.83E+001.99E+011.06E+025.54E+02 +102L1 180.001.53E-021.29E-011.49E+001.15E+011.71E+001.01E+014.73E+012.21E+02 +102L1 245.008.26E-035.49E-024.61E-012.86E+007.13E-013.17E+001.20E+014.64E+01 +102L1 330.004.65E-032.64E-021.64E-018.13E-013.09E-011.10E+003.44E+001.10E+01 +102L1 420.002.98E-031.53E-027.68E-023.16E-011.58E-014.84E-011.31E+003.66E+00 +102L1 530.001.98E-039.36E-033.90E-021.36E-018.37E-022.27E-015.45E-011.33E+00 +102L1 760.001.08E-034.57E-031.51E-024.18E-023.14E-027.52E-021.53E-013.15E-01 +102L11050.006.39E-042.48E-036.98E-031.64E-021.31E-022.96E-025.39E-029.71E-02 +102L11550.003.46E-041.22E-032.96E-035.97E-034.55E-031.03E-021.70E-022.72E-02 +102L2 29.281.05E+004.43E+032.52E+051.95E+064.60E+018.85E+024.47E+034.16E+03 +102L2 29.989.96E-013.95E+032.22E+051.88E+064.30E+018.14E+024.50E+036.65E+03 +102L2 31.288.97E-013.21E+031.76E+051.71E+063.79E+017.00E+024.41E+031.07E+04 +102L2 34.487.07E-012.02E+031.05E+051.24E+062.85E+014.96E+023.83E+031.66E+04 +102L2 38.285.44E-011.22E+035.94E+047.99E+052.10E+013.42E+023.00E+031.78E+04 +102L2 42.004.30E-017.87E+023.59E+045.16E+051.60E+012.46E+022.31E+031.62E+04 +102L2 48.003.04E-014.19E+021.74E+042.62E+051.08E+011.52E+021.51E+031.20E+04 +102L2 56.002.03E-012.03E+027.56E+031.14E+056.93E+008.77E+018.75E+027.51E+03 +102L2 68.001.21E-018.23E+012.65E+033.85E+043.96E+004.38E+014.23E+023.68E+03 +102L2 81.007.53E-023.69E+011.04E+031.42E+042.40E+002.35E+012.14E+021.80E+03 +102L2 98.004.48E-021.55E+013.76E+024.70E+031.40E+001.20E+011.00E+027.90E+02 +102L2 111.003.19E-028.90E+001.95E+022.28E+039.83E-017.72E+006.07E+014.54E+02 +102L2 128.002.16E-024.74E+009.28E+019.99E+026.58E-014.69E+003.42E+012.38E+02 +102L2 151.001.38E-022.30E+003.96E+013.86E+024.15E-012.65E+001.75E+011.12E+02 +102L2 180.008.55E-031.08E+001.62E+011.42E+022.55E-011.45E+008.65E+004.99E+01 +102L2 245.003.75E-032.99E-013.53E+002.53E+011.09E-015.14E-012.54E+001.22E+01 +102L2 330.001.72E-039.02E-028.58E-015.07E+004.83E-021.93E-017.99E-013.21E+00 +102L2 420.009.32E-043.55E-022.85E-011.45E+002.51E-028.93E-023.21E-011.13E+00 +102L2 530.005.25E-041.49E-021.03E-014.58E-011.34E-024.31E-021.37E-014.22E-01 +102L2 760.002.22E-044.16E-032.32E-028.50E-025.03E-031.44E-023.85E-029.89E-02 +102L21050.001.06E-041.42E-036.69E-032.11E-022.08E-035.56E-031.31E-022.92E-02 +102L21550.004.48E-054.21E-041.68E-034.53E-037.11E-041.84E-033.80E-037.41E-03 +102L3 22.852.68E+001.28E+049.86E+051.12E+072.66E+004.50E+042.30E+071.49E+09 +102L3 23.552.46E+001.10E+048.24E+051.01E+072.43E+003.87E+041.88E+071.18E+09 +102L3 24.852.11E+008.36E+035.97E+058.12E+062.05E+002.96E+041.31E+077.86E+08 +102L3 28.051.50E+004.55E+032.91E+054.61E+061.42E+001.62E+045.82E+063.16E+08 +102L3 31.851.04E+002.40E+031.36E+052.35E+069.65E-018.59E+032.50E+061.21E+08 +102L3 42.004.58E-016.00E+022.63E+044.67E+054.15E-012.17E+034.01E+051.54E+07 +102L3 48.003.07E-013.08E+021.19E+042.05E+052.77E-011.12E+031.67E+055.73E+06 +102L3 56.001.92E-011.42E+024.75E+037.78E+041.73E-015.18E+026.15E+041.85E+06 +102L3 68.001.06E-015.40E+011.50E+032.25E+049.63E-021.97E+021.76E+044.49E+05 +102L3 81.006.18E-022.26E+015.34E+027.24E+035.68E-028.28E+015.79E+031.28E+05 +102L3 98.003.42E-028.81E+001.74E+022.09E+033.20E-023.22E+011.75E+033.29E+04 +102L3 111.002.32E-024.76E+008.36E+019.27E+022.20E-021.74E+018.06E+021.37E+04 +102L3 128.001.49E-022.36E+003.63E+013.65E+021.44E-028.59E+003.35E+025.09E+03 +102L3 151.008.91E-031.05E+001.39E+011.24E+028.78E-033.80E+001.23E+021.64E+03 +102L3 180.005.17E-034.48E-015.03E+003.96E+015.21E-031.60E+004.27E+014.99E+02 +102L3 245.002.01E-031.01E-018.66E-015.47E+002.10E-033.52E-016.96E+006.52E+01 +102L3 330.008.22E-042.48E-021.64E-018.42E-018.76E-048.23E-021.26E+009.72E+00 +102L3 420.004.05E-048.14E-034.41E-021.94E-014.36E-042.56E-023.28E-012.19E+00 +102L3 530.002.08E-042.85E-031.29E-024.98E-022.24E-048.39E-039.21E-025.40E-01 +102L3 760.007.71E-055.98E-042.13E-036.85E-038.15E-051.54E-031.36E-026.69E-02 +102L31050.003.31E-051.61E-044.75E-041.33E-033.42E-053.56E-042.57E-031.11E-02 +102L31550.001.31E-053.81E-059.23E-052.20E-041.29E-056.92E-053.71E-041.40E-03 +102M1 8.667.38E-018.47E+034.22E+053.77E+063.21E+032.51E+064.72E+082.24E+10 +102M1 9.666.59E-015.31E+032.68E+053.66E+062.31E+031.47E+062.34E+081.08E+10 +102M1 11.665.30E-012.38E+031.21E+052.27E+061.32E+035.89E+057.05E+073.03E+09 +102M1 15.663.55E-016.83E+023.38E+047.59E+055.47E+021.41E+051.11E+074.07E+08 +102M1 22.662.00E-011.43E+026.56E+031.53E+051.82E+022.42E+041.16E+063.31E+07 +102M1 30.001.24E-014.36E+011.84E+034.09E+047.90E+016.45E+032.17E+055.02E+06 +102M1 45.005.88E-027.88E+002.83E+025.52E+032.38E+019.94E+022.08E+043.49E+05 +102M1 57.003.73E-022.93E+009.39E+011.65E+031.18E+013.42E+025.51E+037.64E+04 +102M1 75.002.16E-029.54E-012.61E+013.98E+025.28E+001.02E+021.24E+031.37E+04 +102M1 108.001.03E-022.30E-014.85E+005.96E+011.82E+002.15E+011.83E+021.49E+03 +102M1 155.004.89E-036.41E-029.77E-019.41E+006.43E-014.92E+003.01E+011.84E+02 +102M1 285.001.44E-031.05E-028.47E-025.11E-011.14E-014.85E-011.82E+007.06E+00 +102M1 510.004.97E-042.62E-031.22E-024.65E-022.27E-026.58E-021.70E-014.50E-01 +102M2 8.231.48E+006.06E+053.29E+082.47E+105.41E+029.83E+044.79E+064.56E+07 +102M2 9.231.34E+003.44E+051.57E+081.15E+103.84E+025.87E+042.77E+064.13E+07 +102M2 11.231.06E+001.31E+054.50E+073.05E+092.14E+022.46E+041.07E+062.24E+07 +102M2 15.236.72E-012.94E+046.63E+063.84E+088.68E+016.51E+032.44E+055.92E+06 +102M2 22.233.34E-014.65E+036.47E+052.96E+072.83E+011.31E+033.88E+049.04E+05 +102M2 30.001.78E-011.10E+031.06E+053.95E+061.17E+013.80E+029.21E+031.90E+05 +102M2 45.007.08E-021.59E+029.81E+032.71E+053.60E+007.48E+011.36E+032.25E+04 +102M2 57.004.00E-025.23E+012.52E+035.83E+041.81E+002.98E+014.55E+026.48E+03 +102M2 75.002.02E-021.47E+015.37E+021.01E+048.25E-011.04E+011.30E+021.54E+03 +102M2 108.007.92E-032.81E+007.25E+011.03E+032.93E-012.70E+002.56E+012.35E+02 +102M2 155.003.09E-035.75E-011.07E+011.15E+021.06E-017.36E-015.36E+003.80E+01 +102M2 285.006.39E-044.51E-025.03E-013.47E+001.98E-029.06E-024.33E-012.02E+00 +102M2 510.001.51E-044.77E-033.49E-021.64E-014.07E-031.38E-024.61E-021.50E-01 +102M3 6.706.69E+001.75E+061.10E+099.60E+102.93E+016.35E+063.72E+102.73E+13 +102M3 7.705.23E+008.69E+054.41E+083.57E+101.92E+013.17E+061.42E+108.30E+12 +102M3 9.703.36E+002.73E+059.72E+076.89E+099.56E+001.00E+062.89E+091.17E+12 +102M3 13.701.62E+004.83E+041.04E+075.93E+083.36E+001.78E+052.70E+086.47E+10 +102M3 20.706.14E-016.10E+037.54E+053.23E+079.64E-012.27E+041.62E+072.17E+09 +102M3 30.002.39E-019.51E+027.39E+042.42E+063.14E-013.57E+031.33E+061.10E+08 +102M3 45.007.99E-021.25E+026.07E+031.46E+059.23E-024.74E+028.99E+044.57E+06 +102M3 57.004.11E-023.86E+011.44E+032.89E+044.53E-021.46E+021.91E+047.46E+05 +102M3 75.001.86E-029.86E+002.74E+024.45E+031.99E-023.74E+013.25E+039.49E+04 +102M3 108.006.32E-031.63E+003.11E+013.79E+026.70E-036.13E+003.24E+026.59E+03 +102M3 155.002.14E-032.77E-013.72E+003.41E+012.29E-031.03E+003.49E+015.12E+02 +102M3 285.003.49E-041.48E-021.13E-016.58E-013.85E-045.16E-029.45E-018.55E+00 +102M3 510.006.54E-051.01E-034.81E-031.92E-027.21E-053.09E-033.61E-022.25E-01 +102M4 6.021.65E+015.15E+048.71E+085.17E+128.83E+002.20E+055.81E+081.79E+11 +102M4 7.021.04E+012.38E+042.97E+081.35E+125.40E+001.02E+052.06E+085.66E+10 +102M4 9.024.82E+006.73E+035.13E+071.54E+112.41E+002.90E+043.85E+078.65E+09 +102M4 13.021.47E+001.07E+033.92E+066.56E+097.31E-014.62E+033.39E+065.60E+08 +102M4 20.023.40E-011.23E+021.93E+051.70E+081.77E-015.34E+022.04E+052.33E+07 +102M4 30.008.05E-021.63E+011.14E+045.75E+064.57E-027.04E+011.52E+041.21E+06 +102M4 45.001.80E-022.16E+006.81E+022.03E+051.15E-029.23E+001.18E+036.55E+04 +102M4 57.007.35E-036.64E-011.33E+022.96E+045.07E-032.83E+002.70E+021.22E+04 +102M4 75.002.56E-031.70E-012.02E+013.25E+031.95E-037.18E-014.99E+011.77E+03 +102M4 108.006.23E-042.79E-021.70E+001.81E+025.37E-041.17E-015.48E+001.42E+02 +102M4 155.001.52E-044.74E-031.54E-011.10E+011.47E-041.95E-026.40E-011.22E+01 +102M4 285.001.41E-052.52E-043.18E-031.17E-011.60E-059.79E-041.88E-022.22E-01 +102M4 510.001.53E-061.67E-051.04E-041.97E-031.87E-065.80E-057.32E-045.78E-03 +102M5 5.732.58E+013.54E+042.43E+091.00E+134.90E+008.04E+033.72E+096.91E+13 +102M5 6.731.58E+011.55E+047.88E+082.45E+122.92E+003.60E+031.21E+091.64E+13 +102M5 8.736.94E+004.11E+031.27E+082.53E+111.26E+009.84E+021.96E+081.62E+12 +102M5 12.731.99E+006.02E+028.97E+069.63E+093.72E-011.50E+021.40E+075.69E+10 +102M5 19.734.33E-016.51E+014.11E+052.24E+088.81E-021.69E+016.55E+051.19E+09 +102M5 30.009.36E-027.77E+002.15E+046.39E+062.18E-022.11E+003.51E+043.04E+07 +102M5 45.002.02E-029.89E-011.24E+032.12E+055.55E-032.86E-012.07E+039.09E+05 +102M5 57.008.07E-032.96E-012.35E+022.97E+042.47E-038.98E-023.97E+021.20E+05 +102M5 75.002.74E-037.31E-023.41E+013.07E+039.61E-042.37E-025.85E+011.17E+04 +102M5 108.006.48E-041.14E-022.64E+001.55E+022.70E-044.13E-034.62E+005.57E+02 +102M5 155.001.55E-041.84E-032.13E-018.31E+007.62E-057.57E-043.75E-012.88E+01 +102M5 285.001.45E-059.20E-053.24E-036.58E-028.99E-064.82E-055.59E-032.24E-01 +102M5 510.001.68E-066.38E-066.98E-057.57E-041.23E-064.10E-061.08E-042.58E-03 +103K 154.101.58E-019.32E-021.90E-027.21E-041.49E+014.21E+012.70E+014.26E+00 +103K 154.801.56E-019.47E-022.19E-021.36E-031.47E+014.15E+012.73E+014.86E+00 +103K 156.101.54E-019.78E-022.75E-022.98E-031.44E+014.04E+012.78E+016.03E+00 +103K 159.301.47E-011.04E-014.18E-029.36E-031.36E+013.80E+012.87E+018.85E+00 +103K 163.101.40E-011.11E-015.92E-022.12E-021.27E+013.52E+012.93E+011.20E+01 +103K 167.001.33E-011.16E-017.70E-023.78E-021.18E+013.27E+012.96E+011.50E+01 +103K 173.001.24E-011.22E-011.03E-016.99E-021.07E+012.93E+012.94E+011.89E+01 +103K 181.001.12E-011.27E-011.34E-011.21E-019.44E+002.54E+012.83E+012.28E+01 +103K 193.009.83E-021.30E-011.72E-012.02E-017.87E+002.08E+012.60E+012.60E+01 +103K 206.008.57E-021.29E-012.01E-012.82E-016.55E+001.69E+012.32E+012.70E+01 +103K 223.007.26E-021.24E-012.23E-013.64E-015.24E+001.32E+011.95E+012.59E+01 +103K 236.006.45E-021.19E-012.30E-014.07E-014.47E+001.10E+011.71E+012.43E+01 +103K 253.005.59E-021.11E-012.32E-014.41E-013.68E+008.87E+001.43E+012.17E+01 +103K 276.004.68E-021.02E-012.26E-014.57E-012.88E+006.77E+001.13E+011.81E+01 +103K 305.003.84E-029.00E-022.10E-014.46E-012.19E+004.98E+008.50E+001.42E+01 +103K 370.002.63E-026.93E-021.70E-013.75E-011.28E+002.77E+004.80E+008.31E+00 +103K 455.001.78E-025.12E-021.27E-012.78E-017.27E-011.50E+002.57E+004.44E+00 +103K 540.001.31E-023.93E-029.65E-022.07E-014.56E-019.11E-011.53E+002.60E+00 +103K 650.009.48E-032.94E-027.04E-021.46E-012.76E-015.39E-018.84E-011.45E+00 +103K 880.005.68E-031.81E-024.13E-028.01E-021.22E-012.35E-013.69E-015.75E-01 +103K 1150.003.66E-031.16E-022.55E-024.67E-025.91E-021.16E-011.76E-012.62E-01 +103K 1400.002.66E-038.35E-031.78E-023.15E-023.46E-027.01E-021.05E-011.50E-01 +103K 1650.002.04E-036.30E-031.32E-022.27E-022.21E-024.63E-026.83E-029.63E-02 +103L1 31.073.88E-011.19E+021.08E+031.10E+033.23E+022.00E+043.03E+051.16E+06 +103L1 31.773.76E-011.09E+021.09E+031.75E+033.02E+021.81E+042.71E+051.13E+06 +103L1 33.073.55E-019.22E+011.06E+032.82E+032.68E+021.50E+042.20E+051.05E+06 +103L1 36.273.10E-016.33E+019.11E+024.40E+032.04E+029.83E+031.38E+058.09E+05 +103L1 40.072.65E-014.20E+017.06E+024.76E+031.52E+026.25E+038.26E+045.55E+05 +103L1 43.002.37E-013.14E+015.69E+024.45E+031.23E+024.54E+035.76E+044.10E+05 +103L1 49.001.91E-011.82E+013.62E+023.37E+038.38E+012.53E+032.95E+042.24E+05 +103L1 57.001.46E-019.75E+002.03E+022.10E+035.36E+011.29E+031.37E+041.05E+05 +103L1 69.001.03E-014.46E+009.29E+011.01E+033.06E+015.61E+025.19E+033.90E+04 +103L1 82.007.44E-022.23E+004.47E+014.80E+021.85E+012.68E+022.19E+031.55E+04 +103L1 99.005.15E-021.08E+001.99E+012.05E+021.07E+011.21E+028.65E+025.65E+03 +103L1 112.004.03E-026.86E-011.17E+011.15E+027.45E+007.29E+014.75E+022.91E+03 +103L1 129.003.04E-024.17E-016.44E+005.93E+014.95E+004.10E+012.42E+021.37E+03 +103L1 152.002.18E-022.42E-013.25E+002.74E+013.09E+002.14E+011.12E+025.75E+02 +103L1 180.001.55E-021.43E-011.64E+001.25E+011.90E+001.11E+015.14E+012.38E+02 +103L1 245.008.44E-036.03E-025.07E-013.12E+007.92E-013.49E+001.31E+015.01E+01 +103L1 330.004.78E-032.87E-021.80E-018.86E-013.43E-011.20E+003.74E+001.19E+01 +103L1 420.003.08E-031.66E-028.39E-023.44E-011.76E-015.31E-011.43E+003.96E+00 +103L1 530.002.05E-031.01E-024.25E-021.48E-019.27E-022.49E-015.94E-011.44E+00 +103L1 760.001.12E-034.92E-031.64E-024.53E-023.47E-028.25E-021.67E-013.41E-01 +103L11050.006.68E-042.67E-037.55E-031.77E-021.44E-023.25E-025.86E-021.05E-01 +103L11550.003.63E-041.30E-033.20E-036.45E-035.00E-031.12E-021.85E-022.95E-02 +103L2 30.121.00E+004.22E+032.30E+051.71E+064.81E+018.63E+024.18E+033.71E+03 +103L2 30.829.48E-013.78E+032.03E+051.65E+064.50E+017.96E+024.20E+035.91E+03 +103L2 32.128.58E-013.10E+031.63E+051.51E+063.98E+016.88E+024.13E+039.51E+03 +103L2 35.326.81E-011.97E+039.77E+041.11E+063.01E+014.93E+023.62E+031.49E+04 +103L2 39.125.28E-011.21E+035.64E+047.27E+052.23E+013.43E+022.88E+031.63E+04 +103L2 43.004.16E-017.71E+023.38E+044.68E+051.70E+012.45E+022.21E+031.48E+04 +103L2 49.002.97E-014.16E+021.67E+042.42E+051.16E+011.54E+021.46E+031.12E+04 +103L2 57.002.00E-012.05E+027.38E+031.08E+057.49E+008.97E+018.62E+027.14E+03 +103L2 69.001.21E-018.44E+012.64E+033.73E+044.32E+004.54E+014.24E+023.57E+03 +103L2 82.007.59E-023.83E+011.05E+031.40E+042.64E+002.46E+012.17E+021.78E+03 +103L2 99.004.56E-021.63E+013.86E+024.71E+031.54E+001.27E+011.03E+027.94E+02 +103L2 112.003.26E-029.39E+002.02E+022.31E+031.09E+008.21E+006.30E+014.60E+02 +103L2 129.002.22E-025.03E+009.67E+011.02E+037.33E-015.02E+003.57E+012.44E+02 +103L2 152.001.42E-022.46E+004.16E+013.99E+024.63E-012.85E+001.85E+011.16E+02 +103L2 180.009.03E-031.19E+001.77E+011.52E+022.90E-011.60E+009.38E+005.35E+01 +103L2 245.003.98E-033.30E-013.86E+002.73E+011.24E-015.68E-012.77E+001.32E+01 +103L2 330.001.84E-039.97E-029.41E-015.51E+005.50E-022.14E-018.75E-013.49E+00 +103L2 420.009.99E-043.93E-023.14E-011.59E+002.86E-029.93E-023.53E-011.22E+00 +103L2 530.005.64E-041.65E-021.14E-015.01E-011.52E-024.80E-021.51E-014.61E-01 +103L2 760.002.40E-044.62E-032.57E-029.35E-025.73E-031.61E-024.26E-021.09E-01 +103L21050.001.15E-041.58E-037.43E-032.33E-022.37E-036.24E-031.45E-023.22E-02 +103L21550.004.91E-054.70E-041.87E-035.03E-038.09E-042.07E-034.25E-038.23E-03 +103L3 23.362.57E+001.23E+049.12E+051.00E+072.61E+004.46E+042.21E+071.38E+09 +103L3 24.062.37E+001.06E+047.65E+059.06E+062.39E+003.85E+041.81E+071.11E+09 +103L3 25.362.04E+008.14E+035.59E+057.35E+062.03E+002.96E+041.27E+077.43E+08 +103L3 28.561.45E+004.48E+032.76E+054.23E+061.41E+001.64E+045.72E+063.03E+08 +103L3 32.361.01E+002.39E+031.31E+052.19E+069.66E-018.78E+032.49E+061.19E+08 +103L3 43.004.37E-015.75E+022.41E+044.15E+054.06E-012.13E+033.80E+051.42E+07 +103L3 49.002.95E-012.99E+021.11E+041.86E+052.73E-011.11E+031.62E+055.40E+06 +103L3 57.001.87E-011.40E+024.51E+037.19E+041.72E-015.24E+026.06E+041.78E+06 +103L3 69.001.04E-015.41E+011.46E+032.12E+049.67E-022.03E+021.77E+044.43E+05 +103L3 82.006.12E-022.29E+015.24E+026.95E+035.75E-028.60E+015.92E+031.28E+05 +103L3 99.003.42E-029.02E+001.73E+022.04E+033.26E-023.38E+011.81E+033.35E+04 +103L3 112.002.33E-024.91E+008.39E+019.12E+022.25E-021.83E+018.40E+021.41E+04 +103L3 129.001.50E-022.45E+003.67E+013.62E+021.47E-029.12E+003.52E+025.28E+03 +103L3 152.009.02E-031.10E+001.41E+011.24E+029.04E-034.06E+001.30E+021.71E+03 +103L3 180.005.35E-034.82E-015.32E+004.15E+015.47E-031.76E+004.69E+015.46E+02 +103L3 245.002.08E-031.09E-019.16E-015.73E+002.20E-033.88E-017.64E+007.13E+01 +103L3 330.008.53E-042.67E-021.74E-018.85E-019.20E-049.05E-021.39E+001.06E+01 +103L3 420.004.21E-048.72E-034.68E-022.05E-014.57E-042.81E-023.60E-012.39E+00 +103L3 530.002.17E-043.05E-031.37E-025.26E-022.34E-049.21E-031.01E-015.89E-01 +103L3 760.008.04E-056.38E-042.26E-037.25E-038.53E-051.68E-031.48E-027.30E-02 +103L31050.003.45E-051.71E-045.03E-041.41E-033.57E-053.88E-042.81E-031.21E-02 +103L31550.001.36E-054.02E-059.76E-052.33E-041.34E-057.46E-054.05E-041.53E-03 +103M1 8.906.96E-018.33E+034.06E+053.48E+063.30E+032.44E+064.41E+082.02E+10 +103M1 9.906.23E-015.28E+032.60E+053.42E+062.40E+031.45E+062.22E+089.93E+09 +103M1 11.905.03E-012.42E+031.19E+052.17E+061.38E+035.93E+056.89E+072.87E+09 +103M1 15.903.41E-017.08E+023.41E+047.47E+055.83E+021.46E+051.12E+074.01E+08 +103M1 22.901.94E-011.52E+026.76E+031.54E+051.97E+022.56E+041.20E+063.37E+07 +103M1 30.001.23E-014.86E+011.99E+034.36E+048.81E+017.17E+032.40E+055.51E+06 +103M1 45.005.87E-028.83E+003.08E+025.92E+032.65E+011.10E+032.29E+043.82E+05 +103M1 57.003.74E-023.30E+001.03E+021.78E+031.32E+013.80E+026.08E+038.37E+04 +103M1 75.002.17E-021.08E+002.87E+014.31E+025.89E+001.13E+021.36E+031.49E+04 +103M1 108.001.04E-022.60E-015.37E+006.50E+012.03E+002.38E+012.01E+021.63E+03 +103M1 155.004.97E-037.20E-021.08E+001.03E+017.16E-015.44E+003.31E+012.01E+02 +103M1 285.001.48E-031.16E-029.38E-025.62E-011.27E-015.34E-012.00E+007.70E+00 +103M1 510.005.16E-042.84E-031.34E-025.10E-022.52E-027.25E-021.86E-014.90E-01 +103M2 8.471.38E+005.79E+053.00E+082.18E+105.67E+029.64E+044.50E+064.10E+07 +103M2 9.471.25E+003.34E+051.47E+081.03E+104.06E+025.84E+042.64E+063.76E+07 +103M2 11.471.01E+001.30E+054.32E+072.83E+092.30E+022.49E+041.05E+062.10E+07 +103M2 15.476.49E-012.99E+046.59E+063.72E+089.44E+016.76E+032.45E+055.76E+06 +103M2 22.473.29E-014.86E+036.63E+052.97E+073.13E+011.39E+034.01E+049.08E+05 +103M2 30.001.81E-011.20E+031.16E+054.26E+061.34E+014.20E+021.00E+042.03E+05 +103M2 45.007.27E-021.75E+021.07E+042.93E+054.10E+008.28E+011.48E+032.41E+04 +103M2 57.004.13E-025.76E+012.75E+036.30E+042.07E+003.29E+014.96E+026.97E+03 +103M2 75.002.09E-021.62E+015.86E+021.09E+049.41E-011.16E+011.42E+021.66E+03 +103M2 108.008.28E-033.11E+007.93E+011.11E+033.34E-012.99E+002.80E+012.54E+02 +103M2 155.003.25E-036.35E-011.17E+011.25E+021.21E-018.16E-015.88E+004.13E+01 +103M2 285.006.80E-045.00E-025.54E-013.79E+002.26E-021.01E-014.76E-012.20E+00 +103M2 510.001.62E-045.30E-033.86E-021.81E-014.65E-031.54E-025.11E-021.65E-01 +103M3 6.856.42E+001.69E+061.02E+098.62E+102.88E+016.31E+063.57E+102.54E+13 +103M3 7.855.05E+008.54E+054.16E+083.27E+101.91E+013.19E+061.39E+107.92E+12 +103M3 9.853.27E+002.74E+059.42E+076.49E+099.62E+001.03E+062.90E+091.15E+12 +103M3 13.851.59E+004.96E+041.04E+075.77E+083.43E+001.88E+052.80E+086.62E+10 +103M3 20.856.12E-016.37E+037.69E+053.23E+079.94E-012.43E+041.72E+072.29E+09 +103M3 30.002.43E-011.03E+037.88E+042.54E+063.31E-013.97E+031.48E+061.23E+08 +103M3 45.008.18E-021.36E+026.46E+031.54E+059.73E-025.26E+021.00E+055.08E+06 +103M3 57.004.21E-024.18E+011.53E+033.04E+044.77E-021.62E+022.13E+048.29E+05 +103M3 75.001.91E-021.07E+012.92E+024.68E+032.10E-024.15E+013.61E+031.05E+05 +103M3 108.006.53E-031.76E+003.31E+013.98E+027.06E-036.80E+003.59E+027.29E+03 +103M3 155.002.22E-033.00E-013.96E+003.59E+012.42E-031.14E+003.86E+015.65E+02 +103M3 285.003.63E-041.60E-021.21E-016.95E-014.05E-045.71E-021.04E+009.41E+00 +103M3 510.006.83E-051.09E-035.12E-032.04E-027.59E-053.41E-033.99E-022.47E-01 +103M4 6.171.58E+015.01E+048.05E+084.66E+128.69E+002.20E+055.56E+081.66E+11 +103M4 7.171.01E+012.35E+042.80E+081.26E+125.37E+001.03E+052.02E+085.39E+10 +103M4 9.174.73E+006.80E+034.99E+071.49E+112.43E+003.02E+043.88E+078.51E+09 +103M4 13.171.47E+001.10E+033.95E+066.60E+097.49E-014.91E+033.52E+065.71E+08 +103M4 20.173.45E-011.30E+021.99E+051.76E+081.84E-015.79E+022.17E+052.44E+07 +103M4 30.008.41E-021.79E+011.24E+046.32E+064.86E-027.91E+011.69E+041.34E+06 +103M4 45.001.89E-022.36E+007.40E+022.23E+051.22E-021.04E+011.31E+037.22E+04 +103M4 57.007.74E-037.28E-011.44E+023.25E+045.42E-033.18E+003.00E+021.35E+04 +103M4 75.002.71E-031.86E-012.19E+013.57E+032.08E-038.07E-015.55E+011.95E+03 +103M4 108.006.60E-043.06E-021.85E+001.99E+025.75E-041.31E-016.09E+001.56E+02 +103M4 155.001.61E-045.21E-031.68E-011.21E+011.58E-042.20E-027.11E-011.35E+01 +103M4 285.001.51E-052.77E-043.46E-031.29E-011.72E-051.10E-032.09E-022.46E-01 +103M4 510.001.65E-061.84E-051.13E-042.17E-032.01E-066.50E-058.17E-046.42E-03 +103M5 5.862.47E+013.33E+042.29E+099.13E+124.80E+007.72E+033.59E+096.45E+13 +103M5 6.861.53E+011.48E+047.59E+082.29E+122.90E+003.52E+031.19E+091.58E+13 +103M5 8.866.82E+004.02E+031.26E+082.45E+111.27E+009.81E+021.99E+081.61E+12 +103M5 12.861.99E+006.02E+029.20E+069.71E+093.79E-011.53E+021.47E+075.90E+10 +103M5 19.864.39E-016.63E+014.33E+052.33E+089.09E-021.75E+017.04E+051.27E+09 +103M5 30.009.76E-028.18E+002.37E+047.01E+062.30E-022.26E+003.94E+043.44E+07 +103M5 45.002.11E-021.04E+001.36E+032.32E+055.87E-033.06E-012.32E+031.03E+06 +103M5 57.008.45E-033.13E-012.58E+023.25E+042.62E-039.61E-024.46E+021.36E+05 +103M5 75.002.88E-037.72E-023.75E+013.36E+031.02E-032.53E-026.57E+011.32E+04 +103M5 108.006.84E-041.21E-022.91E+001.69E+022.87E-044.41E-035.19E+006.27E+02 +103M5 155.001.64E-041.95E-032.35E-019.09E+008.09E-058.09E-044.21E-013.23E+01 +103M5 285.001.54E-059.78E-053.56E-037.19E-029.55E-065.15E-056.25E-032.51E-01 +103M5 510.001.80E-066.79E-067.62E-058.28E-041.31E-064.38E-061.20E-042.89E-03 diff --git a/tests/ensdf_processing/bldhst/ref_iccndx.dat b/tests/ensdf_processing/bldhst/ref_iccndx.dat new file mode 100644 index 0000000000000000000000000000000000000000..b056261850bc356836e5ecefb619a087cc4ce3b7 GIT binary patch literal 448 zcma*jyD|en7(n3@mx#CraTk{)#3dmfK#g~>Z$PQsT4&Ixw(t8+L^~yYBYkpy|K;W4-~#syN;N literal 0 HcmV?d00001 diff --git a/tests/ensdf_processing/bldhst/ref_icctbl.dat b/tests/ensdf_processing/bldhst/ref_icctbl.dat new file mode 100644 index 0000000000000000000000000000000000000000..0b27e3127e3392d33266aa79bfa61122e2491f06 GIT binary patch literal 572176 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 yr#iPy^q`oov^H=oi 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

        R?Q(R?x5TZL{fT04_KLgDwIJM6xLEJ2mVdm zmbj~C_J-4k7-t6G))hTglynZ`B)a$6<1U6VZ}FGqi2G zvmQ8OI|bEqQn_bhCSfdb;Z#N^$UmA`^)crgV_RtY=-PLQqb5#N-wAqJ@y%8!7EJm{ z&0$_p{T}EEz#PG&iH(>2dQ7=C@*3pw4Nt*-zgj!w!qBBsEEM8r-NWDQYfawfAbwJL zip!IJ(yo7_&Qe?*;+=zh`vpPr8@{c(j*`0>#MryAPmasl$=dz9OZeHeKoPv~I@J5O zH}?|pfbH5FXAWmW=+C4174!7)zC};$W4^!k)c5?`yr#|tFPh}ZxFo-8yTNaRsZ|Oj z($8mqlGs*oY)Vu5zx@{|?Y}F>wdl$|g>~za2RGwl`xX7)cKQ=d@5tWrT&;rK^j_4z zEf1(h7Y)JQGj=x`;Mk_EzfkqD27jXmSKhPJYVE~Q_YZ7=%A zeo0N+C1Yy=TP&r<@6bB0l$x)lT$9uR*nC{yZf>?$3#nN zcgxi?IJWXT%9~jwK5Enwu|%j|jyTrh{v?*&uAa8eTIamz6zp@yV$SZ(_HPtDKn<9G3erboN|9<&e9A0?*s z8?0a42JkfZ|88$aT)o=-Zfd@)on<%7b4fEE4PNp@|7BIWWU)*A8pOvv(dSvm?=Xk6 zp%cH|nwhAZ&7E_c`VM3mTrhzi*kXdQ^r37CK1>Ki-@__v-KZjr6_jx7u!s75Rtc*S&p;^Ns20Rt3#j z=9JhKiLV%vxA^Y%V8R#qg>#OcTssd=nRC8j8$m-5tp)4Ga3XSZ4t03Fnh&CHtiNAG zXPx`IUz{_G{%?z^1z%2H;H{wLZjSzL<$UEpP492&;pSXC-SKB&Nyh_d%&<@50qe{~ z(bCPcb2^;9m~ZSRmg^9;{<+2RQP_4e`m}J4nMcJi{nX=kJY0{Mq?l)jhOIk$INuoC z!XQ|J=ju8?lV{pSo$jjWglEU1KY5tnC12vN!q#3y2JPU=&T2WzdfJcAw$~P^(s{J9KB$!Pn@C|H(%(Mz4H0aH`dxwy_;g5uf0pa z|6g(Uoc3Dx0dpHt?|<6$mNhncZ^`e@Imq9zf~qY&wJz2xr|Agl-(K)rg-z7st=Hm_ z8y&xct!hr@1+0M!qw8-_lryWY~ds%MFu~#^2vOAhF z0r4UhFS;XWMW2dqo^(~ddW;zUea7MVRo_G$zXL{fJfJ@0XgqPZniwq&Ka*o~pSdH! z{oOZfm9x&UHM+OxD-9$@yCH0KYY~^;pmI&hZ6>noI_nJE!eHrvBdU*Oj^sPhy_Ft{ z?x~jb5HZga&N{<(UeNe_!vQT0NdKVk{*YU-vZ`IxHi*1hU`jUR?1 ztA571cdB;M(w)lozt}bnRg3(dSuOZ7{UEDxZawSYUGw(LQQK>|l^e0O7wz|}7;DXe z&KWg}XP`w|*|U6adtd#XU-TGw#$!o zp|jl{O|y?Vn`7MP;6J1dOTIJN?hL|jV*h-`UgVCFxGAiqed}HyvC_HB9h{|5iUKuk>E&Pe^Xu2aZ$^ zoaz(iW!rXrrFuxY57pwgSaaN~+DKt_aNMw~ACxYFV=IjV>4^x(>d>fxPr6&;PNNtD`tGo5nTfy=lz=!zxd0TPgc&_0oTXDBkBLwFt>-+VqeBwXZ zeGi&o*9=UJ8rRgbH83@8jDbGm=RWmy(08B@DC0KeA92F%IcQBvQ&Kf};yQ5-vNkT_ z=V$n*5zqHWIomemy=!JECR0Chou8@`l#Y`)rRXCv7iZj#A^F~|yIRq&?j~xX7PH>> z5l^lmCw`uMTeEVuUhdiNQ=8F*F%#fwACNnH4!@=Pw=ejoX*t{c(9*h=Tm^(5#@IuDDgfSPGd6e1S5fYzISkUgLCxKhm2CM51 zzp4W7?SAHasN8!P9}?G#wGLkQ5c&xha8IvAd?&7hi#fbdW^3*(ZG0z6Hko|c$N3e( z>OSG08F2Y(U^lVM7QK`kpFWVn->!e-eRN4jVw>g{PHl78lFyd-+~99J7kZ3Fr0}j_ zVHM)!Mbrq?^V|5IV_P{a9dV=Hfq7$Nu@DY`=lO{q;oDllD-3 zFL8uddqcGlTV2mkLs*e|yzDYt>ff}7`(F5wM_5`~&mCZCn+#u0+Qc^ZAUOx{H`NC# zFF4|**4{UZXL{8y)Vikv`#R=pw_CYk+2(Z~n|3f@YZ%rB;~^iVdN1jqRevpN-TH}Y z`Z+Ib+qCsZ0$X=g;938}m+gYX-UnOmO~p?~m8Y{lI+3y+n|7R9xl_!4AAWHw_b@oM z@~5LG=&lz>11Du$^D`@`^}Tq}B*t9|h9&Ko_HfzL?f&c^E=t+@YSuOVoeaJ%o&Lf< zu>Av$8~9s~w_}NVp_HwB0I>_>{=j;=659jZ{Yz}^sDa~R^tdQz+YLW-2euF4*WWkT z*sx*axc7m-6`e#wXbLg7{T`%CDJ#q)u`9d26Ac1dt)y;baqt;F07gO>F(=Opo>a^;ERjD0JyoHK_l;>D9A z=)(6HjZG#Thoh|7m-#*Tf$HIrvOO47zcbEa?v1su-5#v@*;DMxKG;&bquPa(?OEw% z!l9oGS79!G%pW}6HV+?ljNfx%JChjEnM0bv-^5W6zO6c5)u<`I!kvL<{f_xNwjD$C zzxLKod)p^Gr`_O-v0cn_o@O5M>sjS&$@kr7dAVOuD<|%8ZNKgq(uY)UgRWgK#y&YN z`9Aeg6W%31CEZ);7mI(So(uGJW8Tgj_J^dC3_dSB+F<|kSJZ;RLm0t6ZlB!qs%fhn z7Uy3*Y=wDDxNir0?4~3i;=L?-pC9+^@FMleE!1$KJ~_v#%^j3 zXb`mi_X4-LXR{kW>&ZM5^llqpSNACIsM2PpRyJkJz5zp*9+#W?0BQv0c);}VEkBwX z*sJCgaW$2_7eRiKVao4Zh7*BkW3-;BV_cRJErcLCo_B!9V%i!4u%)2+dQ2&y6 z;^H7RZS~lv#EY_(?rUn?QX(VxcSU!AIgN-XT3mtcIqqa$_R}lmOQxi32hTnW4~V<7 z_^9M~sI6gt5i9yFY@dwiUh9l|bWE+_<3Bf}K41m>+YNTc~-xoVY*A^N=S3e^V_4=No4% zb!X!8r^Y=f4NU4czT|m`*YVZ5n{r=e9=Ytdz0MwD+_U5|7pr#wdw2ok3r<`qCNL&=%8I7JMdrCcA!91Ds_3St9x2ZW${|0^qM#Mhv&p4;i_-$uu%+uC? z#n@MrvmFsqFNBZtZzPVAX3EMyyPs#$>t-{4_HV{+!SCN_8LW=KseZ#~c=^UZ*@ixk zWBuAkiml+6fz`Ee_9oA^KXhh*%RT z-NlUCb$x6N-#w2!7hH?Vs|}`Rw5z&h#O4h6IG5fl+zV~n_|bLjO|UujB>3NyZ1ua4 z2AegyX{_#&XLIlTYg5X0ee89(q0RkPas4PgsIuX>=kjj(JIABx*WHv``N6wVw(+C; z0?IF1ofbx{$cA{ylkc(TH}T*1MoT_=E2rV{4dg(a`TiPEe`~9xF&KZdIAiBj9sdCN zlGBlrF4VulNp@_tk2@Zz%(rPBwkBG!#IW@2Ez8jZke2n2AICc_dyIRmJ+Ag~__1~D zV=!syF4Lny8Vr{7p(-uM&*$vTcdW&^P5s-;Z^rC?=ii2`yjx zC&0=1ihDvf`(=Ar`fBJJ5D#63zW{%G=p*NxCwH|Zc)r!c?9CPUyDHS{oQ|mfuVqap zh9IA7@Hb};TMYiDe(@$J%l%k2E{hkv&+md!818{%doU>OxoXf&O*}qA>qU1h%ioH+ z4tl(&=6jYJwp+pK&apSE1gTvQiL*gm#Xb5__V5J9?=auAka%LR{XT@fC4X{4TpIMy zy76~5^St=l)VLi(^}a1q9Vq<}=JWFw^r2kn5%&z93x5X=Qp$EjNVoxK8ux$*{${0r z$>Cq!iV-+F+4H@zPd*#_xbh2r_g4BEiI;=MbI-qTj<}=qMp3JOFSz=z{H>%de}g^m zq8E)P|MxoPY;B*p*~LC3$9yaMTD(OcO< ze@}9$-@W3H)EwByD~@?GmM^Z5dC~U8nFDU^ZtCAYJw71wlLJ#tZL4i7eCUiHe}o1b z{ew20MBk_=$13U;vA%Dg^J$&5f`KpLRtj787QXgn+K>{v7V@RY~%nzbGRrs9lyX8;Wq_Dp@&`M=Qw z(rK3UamezXGx-T z-!%Qu72A)iPrr_#;CAeZ@7u@IFPWI!o3ic18XUtto?M)8G-6(J&Rg_=)PD0!P3||@ zqCW|zT4#efXUSJ>`_p0_-%m_H{XM;9%ARdraC`a&FR`b6t|k_Ph26wjRG-74iW8E1 zNaNB=hkKB6v+ObE(J5%hp5m>+B{ZBe=bbeT#owLhLBE!>q7CQH2Y%J)!b2fWU4?yx zaA3AsBs?)Eqd$UeX;c1%{hnrPD=XJ{4UCEQ^(ZP z`e{qtKO~wj-9Y>n@A;0HVnBR*IonI^81X=*_`&Mgc@y@IV69vlQvdG6{#n`7`8eO0 zac>EHw=YP1_DR&gVQV?)~s# z^d}eL_wd#GD#sGdu1@-28-J75jFlJ?RKFZ!97Y-RB9XXC|RCjPmHXFSaMG3(6Kzn!mA(JlOpb&MZv>Q@X#tZ!lxyY?n& zOD;Y@Tzn}B98g-fB)=G0z`Kjc%U6tFGW?N$LpV^O9*jRA=yEW0Dgipcu zny};2KGPqqLLS_Vi|se$P`3JoJ%C*lJe%dC|J$;Fb&^xmQKi?`o)XRTIUSt6dcuS8SiBe-;6sE+&bk|@N*&Sz@st${nt3_7u&+1G>I24 z`jhVi=D%=X^vai;V+$8Sv4^L+vwpF)v0HKM(TyfH866QGXY01t10$a7_$X`-1nJ3U z&Qx#_#$Fkc_Lr~b6!`_}PM>hrB(_b}^W5$Esu!BhnZ(M61N!gbk6%fg%^fQ7ytB@X z{v_IDF5x9VR^ABrq-sy~22=i%+#>6Alg77rPmFt({Q7;Fa6{eoDoimtF{%x(eP;v1 zD>b#Kwrw|CKYl4SZNp-btT_c>YW-VIx;Q}nb9_~+%L`ubbz|S;xY&NkUdalmu0QYU zm-F4FANSk#=LTYuH)A`eT$6v_s|n{DccYgJxc_QD`K3ss+<|!)AH1Zm@^@D6ZP5|W z*U78*TXpAr!!~B)Z~oiDiPwhZOmDNL7xfCn0YfAHn>*#yU-pM{W_2Tnfsa}N?)6?! z+^?JCHS?7(wXChgeNEzaU6OeZ;9185>N8`sf;byWZ(Nq6+GCRg>Ew?}gVlL9tsUW% zCI&8nyV9(6{L>Gca)0=c_ln>8Bis4Lj9VB~PR{NRbRej_nclPfw`D~_R$KLbaON;C z`2MWg9=I2rCu0L(QxWM@nI5gwfmkKaIDUt54+K>+WNU=3Vyr5mN|%4(Qm@Csv+rdd zyMkroHZ}fX)2abzkAFpe<)mMDoHX=xc8yJ|==dFjzo}+lv5RVTYYt!Gqb4ci;2-I3 z+1ow8ocW%m-f2yD^h-0)2{%2zKFZtPeNVM^aG7ejm3K+bp?lhT)lU8qur_y&Rh;AQ z_3{3J119~n)-SB{iEGC98a`!><9D!qkNLwz?frOk;K1t&N-BE$gPpN<9*n3Db)U;; zI(`SNt`ckK7eCsJk%Nc-&QlGhVpI$KO_-UjKWXNRZOF#oN*aXIzd4=r!HYF|+Zq}* zL!}RO%sr6b%~_LRb&CR?uRdh$j0jqDpNSv7tVh1M&juHz7xmqj4siSqSkmzT8q?(0 ze`U=+9!-pVB}ei4q@RB4X$?OZ?R4*E=iJ1$Q&3tKtDm}=vyj)bsr3+FRU; zkJPj8nb{9z!bfwX_rf}r_M-iM74L{|_UGmEGr^-h%CoO}?8hFjT-zjb;Q3oUiuY5t z_?;1%o4VIN^hyum|3!DFyMO(DYWH{kcTbmo{ zYX()<;Mn#ZT|1;&9?mRZeuG-RaNab7)eWO(iFo(xW3~Cl$#I{r8>MKKBxEue#u5!uXu|riFxSsICqTG3u_)u@-xn{48-A*q7FhZ3}J|5=N#q!kyFC z_`YlKy~JN=*4nl&ma}bPG$rMW#F^Xkzn%EBMvVIxxe@hg`=XrfWg%f%^83m|>E8d@ zGnKLZ7|f{#^R2-9aOTh@q*zI|!j_-i@ffuopYxuc<@ruCX5DhOJwwt7mbRrZ(${`} zik6Ox? zGl#Z3+dSq?&M;+rcj(-d`+eg5s}GZK8fXsmXw&oE$GG&jactQu4Vq`uWBn6hrlzJ% zXYAOt9jr$ecF&gCT91dm8`{bzpGF>>zH7n@)!$+kTK3hL$G9@v#7iOdypa~E-miGB z;+0AxTlgD#gk`pH1l6CIwPxll{0$ueQ_rTk44yqbwI)q|9UVu-EO6C1(}G!NA9;@6 zhndV{HUBg$v$fL0t>)J9PF%LvJEv&0G$QfadE^B@qu-tfZa%dnsrPVgSo*HQ8l+)B z?{43YyEYnq%Ny%1%-Xo~bZWn;{*7FUNBu0E{JZLut~v3d`Icx|mDz&7DP|fl<*>o_ z6o-okFmzi#pT51mQECq0Z{jCk_rWStkE7ZkakNIRyMXW0-}gX8cwlC}d7Vf4z6|L7 z3wu|83!@dO`sAH2+Pdd&e1Y%N+R0N-i@@!h|G@S%`P?_iD`()prh?TiRsWedcwNeN zr0*A_DQV(gYa`>LFJavc5Al&Gu`@aUcT%>KeyT*T%Xb-fA~~YDjC%-M>Y=2=Bu@R% z87bT178jAjTS@-*Qr7f9a$-lY1rIC%e>+_qvsQLb*;1P-4K~gYVMlGqy}v{K+YbK5 z#E3XvR@J}p^Y*hz`&G3QX6+@m^0z0`r{Ynb6a0-FrS;3Wa<&7hvAG<7c8)cY!+UGQ zxNVrjba2MpsPuix#+?WU@;i7E1K9`9>2H$s+Z%I%!T*`03`Q`cCa1nmzZ&2Tt=ms}*Iq$`>Jrq=JRjUoB z$Z1`K?Jnwxo@MUW^Eck%SzDH~{a1Zn(WQ8TJLFRCkTLW=hv0YQp8_FE{J_+>4MNI+ z*!lM+_?r#nZL9O|arm7Vna3}oGTV+Joj=k};cUg{i2JaP9EJA#Wy~YLob8B^^j^WT z;P!2SzooHjp-Fcs^J#)4z4)(O-cWhVE$jlYTWFRdWecMGReFN*E-<9uN5LGn0gOQpum3Qx^@ z$gT5Rc$#Wz#Zy(kDPe-@E19w--zP4R_$uP%Paf3I`%=S}#QMcv@rn8zdMdRymA5Cp zat(NTyxYWHeV_7h9(o>VX?bsa`f9XfUm!PVo{jpq&&aRSr;U3ox{`7Kr(JS}4QtIe zxQ8|Q0{>sJ^Np#0JIp(TlR0N*#JYG^yd=9lSRI%q7>(%(XEa@%agR|q^C5XIRtp;z3cLDw;9&BpdWx>r=o*+*CCt&&SpceI-sNElN z3G)bHd&Jp8y{B|-n+K{XL#c} zOH#Jv?csvD#EDTHA~3 zZJK)aS!vy3^g+#~|2+3X+qQ4<2I}9s__?!0tp~@_qp5E$zR^$aA?Dxmbne54)}?HV zTf9k~#KnH<&Z3Dwx@4CeyqsFO>hL)^+upb?_w0%rQnr1IKLJzwh#VN0`S{iG(mk)` z;Ggg<4@3(`y^&LW>soRk&U}C8emsl2W+VDDHKcb{mmK0he84{je?!xZoS1E^eJpO6 zm1sxXFKy4u?9alVO^pCG<8Bag65kKVE z4h+)kho9BpOkEPOo?REyy@1-x5PH-xtHYO0Oh7(rVo-gR?LO7?2|D;zR66K}?;|{* z&IispkL@yp9gsI;A6E)XQqdXzLzeS(|dKJ;&X>1l!LH{x)^{ zIMxJflfGl>hgsJH_@36pDV}n+=R?AFQ&TIkwl3g%*T75P6D;8<>)~nQsqyZEAL(Af9v6oxNk0CkGO&!p<<(3GH15x zTX=R!+adOt<$wEjZ{7&UUN`op6+!)*9v|YRx0uI3cg-9A$+pp$PjP{29jVdGy5#0A zzWhBCh?~bz6H|$Kx$o_uExZkW3qN|wCceLT`8)Kg&J$<4;%j#uGj8P^>ae}&IiTIx z-tef87@Y6jwe`-uuZ^%MxB`{di19_cA)EsLi%Y0Ekm z|0H=aZ)y7vO;75M56`7HUN_CFT4Z7ANn6(Of_b6z^KVx3%zt;WNAp=2%1Q@wC!hJ8 zSNNV|Ti8K0nA`Ra$g(^&Bi4i8qjx+5fAxmJj`MD=S)=IK`LD@2YQBXXI1Ax7ie{M_ zwK((Ia;JB^6Iq5RZ*}5mOjtk+IUzIIBQPU3=+)V#DdOFgt zd0~FUy5Lc;{U6COIpezcn^Svo5Y3Gg^g2d@k-SP=9f-wk@WZ4n`fv0+OJ@OnWV1fe zC?J(jD@=|VfsER{?gU-Deo^F;HwJ$MlBwExBb_y&TBdC z{=}YINZnO6_TTrjtYd(H(2`w)fq4%(&{E44C|)dfgmfnLu2$K5PxXGuCqc4)-0?ueSpI?lt(% z6XAHEUhb(%$MTKdm2k~?^{935hQ$8s;BVqAvaE-wZ`u*HUVk8OV{_$y7LtFg6rm^D z^#{)R_91b`DaL@WSUkxw)zl3d^dR%#9@4tleaF~3*samD?tekp>YWEC>N4&bZ{ZvC z@|M60;k-9&XR6kKJ=M?m9wSFyHS)(l4d_>_$iK;p<0R1erh*$37d#}$? zt%uRv)48B{E@_JnQ>APDswoja7V%C9jSu=!YEauJzW-maciypbnIrG20e@Ik?r__< z&$bDQ^ZKgoCu>#C}$os(v=p zFG4Ns{jV=Ay6%O)x(QcmS$kJrn;y-({cpgT>l5Q*dji|d!T4wWbIENNe(t@t+x~rX zv*Votd4ry~wd<}+Y9?(@w{AcW)1B1oJQ<^JwxIa0Kf0(E(rVG)=)Zk%bW#s@+|#Xl zI`uo~HA=(n**Z;%3{N)PqThUcd*P;c`jH1Wzb$oSgGJfz4g-IquQJ~F+Fapp^~Uz6 zo@Z*L-n~Ch#3c^?=G>+Ff!)&^a%n5|p|HON!|LBW`|wWJ*EtK@)BCW9=WdlA-kKOP3FSh+d(nHz5kJvZ3EJxfM;%8!?V=s9qqWgwBU-=HTb#Rwf z=3NdWKRhN(T_ib5V(K7uxbHvb?oo{UNoa4+ZS*_6${wX!_1ElHXbFyNFpE8CB(-*n zT%W`?#TF;ZM6{rkBiDF3e~7K|VPSV$Tt74TTkVkxy~1nX{dQ|$^79vE-F@a&uWA<* zJ4@4{Y`*90ML#~~nKtfDYB;BH-p|Nb@#|BbSyx^`4c(vgk%SWGW+8ai>-gxbY%8Z< zbZqx0i(cHZzo*d=I(S3uF}p?4b(6YvPmGK0M|_7TTe`LfyDu+1`S#8p(oeK%Y>775 z(Y^4Fl84=QoHp*K>fARMW4}KC~RkjKC0gki1k9^rl*+4)nW12 zoqN0nIh;$(c~>@vPeR{*c%iR$&Gqb4uQPUid&eC=d5b5mCg(qau}iTxYlv}EZ0h@{ z7rNW8d;`7H*~06kVF&iW`>n%wC2ZMu6vNO<>-{6WmH(Z8*9M;3+AAGSe4ldd;@nHx zvhOVGu)Y&~rRigrZWiaH@BAGfcLIa)d|%oG{=pX$_m;v=P94^dV6|694`;ONa?e9K z*RzjtkGW79Z(VAPe-Zr6%mLf?*h{(Vb3eydik?Vo*Hba7Rr)~q%CuQUsn<_%_nl7C z>UtpXBUsGDuQ$Xx_b$>{X@zxNe|s{ zY_HxI5x)ak~b)Vw2;+XTs_Wn z(7w}V)x}`9SCF@=im&_|5(ZSY+939xemqOoN76RM2J=%5oOH>_we1bg|MN*tw8Eu6 z)!;f@U5Rn=ojEHD(u35U-g%;he|e|E0NQVz@5{czv#a44zxs;G#yw}Jy}Gy4y}xYj zJYd@>^xoR}(1Po9a?V4YAF90BBb`*o*1_MT4S@!1$ZFZuXqOl+TjinQSBj4ql6Yng z{w6*=qm^yZ!$7}-@)V{vNV*`8sb^60mF*sQ{@W$)PTWy=ALMMA%Y-B0xjpqE6hrUTzyk@!|;fIDtogQ=-+{>pDE1=OFbys~Pg z#k)w}j^CFUw^IXK+%eK<6MvVuRvfO%R*YE{|X znqXg}leW~}nw~b*?U5TrSEz_*cO7%6W^7H3Yhqk+(TG!0aj{|>hhMuHw!d+X2vd8v z+_+csUM$mtCwx!)|LNA%u={}LR+0HC=5l_UIO6nd)vu@CL1AUWDS3z3|Af7AU#_if zcYbvXxvDzgp?8`3IAPQD2w}I6xo{Ux+V-@sZM6U_wJP%+nMn-*^tLyFkgM02HjN68HH=X~!Eob|nt(tQ6?CCyC-3I4GF7v&BG4Er}yUT3p zgOWDA^6Scf)4zo;HbV>eUHm}$eGAKM!QWKBy7<}60p0ojJ#-d~>2Jwmr*150vMcPclVhcwG|8Xy*ErA?hINmla;%tmi|>U7xHvT zpVWOG|H_c=?oSV`H#&%LED`rc$ltFf=4n=D3;s5-O@{0@T?B{^xmz8l^}k*h;2){gSreZ%-8V@=xx2X@>5S;vu8w zHBfKq+v;V-_SWRuM5{JO+!p>GCk(bXu!-`yAWT zt$(CfPW+kTY*~RV@n-xP+iE#GVl`V7v+moHwCywX4|L^@V7tqSY2kK;ZO^WPz~7WRE4sIwZ69#5R;(N4k|KO}9s26%`%rJ#wA_gG%^}VJcii!&-hN~A z+gW3;^84c8Z`=4B*px6y&&B0zi$mXxozH&r1wPW8_5B0*+aPTFVf$MGe{;v(9@5>N z{vFoB1Z)D}>XlgU@9&cUd{xe?!8X z#OokFc+M(nDTZKM3EO<$->jUnaT^-^P3M5HG3xH9ue})C3Cv?7^EiXOI|q2{$Wg1d zL+i`Yjw)fTHDGU0%|_pHwnOZUu@_{Ft{mp~eMnBDbx=GU>b+Hev+6dI)7dkd*GYVzOT2BHr%ie-B~xF8lC&n;(F$A+D^o; z5_2HmH?vU_v>7k-|Fd8R=l$&&iV@InG~BT5uYNhXHif_SD_-J7i^fO%@23_`{QV{; zD7`7w$Rx(?xH9^M!vhz8A#9zT8KV~kUHjJfB>h*@77CMd-*Ly-@vnG4lbHVmcv(ir ztdkAsZ&CbzJ!=}Qv-wzN`=R&C3CbmgjWZ>_<*rG8yKmPRYi{I-ruhE$?% z&?b*qB`m#jwB=Zfx;vg{J&mIWuQ)mG;l=erADpSrxbqw?88~o=FH45JU21d*(v30Gsv&M$n)OD{(*K)bbO3+9NU`2YMa3# z$>k@08+w!>ox=uyD?V=W>C_!_ZqDQP^#H?GZ>{s&)bpbLH_Mtq4LF!ztp?z4h4^|3 z&kg*o|Lx^$i$mh|P#h#~IX$C5jWaxNc@Fd~W ztgN*qxsts{9s_t zdkd?8)jh$Q{*8HXH%!_#G(9!yT^%$?@AftOnZYk9{=s$_wtL<6M((Pe>9G+;=+w#7 zw$*P+{Ug0CW!?uUijRM#yN~V zGx*~5Eeu!pAOED0zoO5}wFQ40bhIb6!6$XkQQvx2$H*#W*t=927XqCVP&zd;IIy}eP{D6O-5nMOzHy<+sAH9kg9d8T8jPq zVyvw<*n8GSs8Q#=vYv(vk64TMy5~H$#hiu1b;klPu-Hex3QIpbHB}fq=c~cr+&OGV z_n|7|=q_^wYutkF`w#Ak$H>cVOtLohjAO)6Yi}^-`No7j!B$`W-$9j5w@!3 zUz<}lZae$Tsuj{~5N5#Iyf&nMZ1vuodYJg%?*72ILu~06Q2WL`pf7bW>x1H-VSi!W zf509{UyM6n)-ihHKGmP-KC~#@E9;TNH~Qdt^s~6(~^xE&46;bWE zJ749a#Q)*+I=_NX?Z{z2<6N9Y9uqFyI?p6xWe0yllQ*LvJ(pPW4Q$ri8=Ft&JE&Pv z-m4@#v4$M{P5D#R08>kZ4Yev(32Ou#&}xpK3vY3rnSOKcUULke&xRzC}-Q&(ej0h?}c67f>ZBz!&m&K z?%vw?RPO3Y+ue7}xP!C1!X2x=-I7Q4iO6%7qnsiSo^ofr|G;axW-_Fo5oGr9`WI^v!r9VYXRt+n_@?Ff8-u0IfK zv=3EDlOA$C@^JMc^ex3y^R$28INo0|_c`vUi8;u3z%{9<_VfOU3DMzlbYTwQ8`LGq zr<1lb>35pXeycp(Z^VW5BC3n8aaeoPkNET&*B_X}Cn5Fw!^6iu_XK0#kt4kxou!VZ zMi18?uuY-Ask2{N#nLOGwlUQH&6fgodN*O;n~Hq}=574J^uJx#qrUI$?hRG5%pKJm zMB6EYTG@a&flcp?YfBzn`jq0?SKW~68mI#?+R^IMR6ZgxZmRNb!qwv8Z*pJTJ-cYw zlV5_r{hBS^)@!pGb({6mx7U~1{!G2|>%sWYKDqB#`?+w!+UDe^=Vp^L&im(reqEPs zsGPI~FQL}wR)fC<`|c`en)7`ZYWA|}QOdn+_|;wBUHeQAcU(^t8@y}{q+|L+d|JtxvX^`?BjClQx8_?yvt z3l7P#mdrKWyA$E=H1&Ej7UzQ1xxUVs)jrg|U>Ux1iaY$)u+^_o49;ir+Mn3gvBgp8 zW4m*Z?|{wYJGFVgtGNSxANk>pc6_!1*ev}QueWynmvLvB{uakq#+rCtSgxtF@1GiW zdRCm@Cf^zJ)oywX;0|EVw5$#GV;}D&_qmLHfxOA;*Il1v+!ULdc)$2Hxzn@$|I8LY zpu;8oHJ?4``kBGsnjKv3h4VJ!mKXNnFAcM)V=(xM@Fzz{fO3x=f zXL^tDJ-c$YU)aFL*ffv)RK1f9|Gt?oIL<~sHx2&DUeTlN9x7VXWE1?8^|BRv-Tq~x zqB?J6cTYSsY>(j2soB<@TO)VBJHK%0I~#fgYOD%cyGo*Pn-?xUbf^1{v8@FjTO72e zy&vXp1$AF-(%sa8wLTc>|7V?oth!a)^9|dA1pfAD4tx%IBbsmPGVZ4i;BSwIgEg}9 zj#sr@f53J=9J$N!{bM0`ons9)UtFjf3roD?{QK0oVs}5o_C)rMfv@n6M`tU(DhZY3 z?cVGm=6I6zes9FlKX9KzdxNpAj8@=zw9c_|!ZGz4#*SBHzo4ezv0?5x#JK%K%E>9u zXwFXdOJWG{`euCgVfHQ6fw<$M9f+Q^`Y-0pelFW8^@UX*1a3-RwHbO;xlvWecwthlkECM`tN92hOY) zs&`GVbk)sXFcE*>d*2C68h=MRxlo_>ALVk&=5WrwAhNB~=t@tde|Gpik9urMKKriI zhGjiHMeDBdeOBqU#J#1Ep0-u&%ca@UMPKp5WnG?ms>AgLa}8FDY^ijAm&JRhfxnqK zV5{EA@!7hcfAvyckv;9Qo<`%E8rFRu&M3Ng>}Yr2p{Gr~livkZ4gX_yf7J^IcFcn!-NyOHMqkyStZQi|>HNI2a7~aZhPv)lE(O zJJ+mapIQTlw3|niw%yDS&)om~w5i-jPIDjW7=GsX-9G7(8}1u}^E%H#`_8uOoBI@J zC?6+YkpHTTLGN!Ed(ordZ$G=W2KP?I~Htm<7Ch2$hE$qGhVwPWLYgcXoY;anITPcYW3=UU`4# z&ksHAIdNCeCoa{%{@lYn7r`(2is5!~ z=HTFO=)!Pz3kUjxm|-CJ+r{|a)8u6?4~x^f%ythN25HnE*1_L+&%BS`-k#iV2J+cC z?A>lmpm7`8!VnjQH-H%&WdB_f8vWc@;>F8&et)p;HzuB$gTJXZLYP~i#v82N8?%*5 z*bMKE^ok7^gn4GNJ!iv(uUZNE)#qgN-n%yNze;s7;IPWrQ}u0JP`u-}Tf*OB3+vg^ z{}i7zdsW6`BX0mxyUpY~)fYvd4|8#BNA|2w?zMfU`kh$A85J6TKs7BD7#Q#L1$?pqnJpN+x7+l~8%;OWrHl7mcMH{`&zU_LyCdanhryS55BzCA zn7VTHZi$CO_~M+|s*8WS%r-vWu0OyI$afTIak)6hEqJ5aE0zR$j%LYEot!zci=l!@36V zy7HT`Cf*fSp*Yb#9-f=P-yEMLr<+6mz%LE?uXi^ND4y0cQJ;mhK$pEJ{-uO1_?znM z#rwYJg*T0+g)rw|Z`-FkXeQWaa%~EKQ@x7nB{l}fWJp`2hVpCP8^z{7;*UAO9QQ1JRJBT#{O>RP{7^)CpfgfrP|t9@Lx{FO5hW zDsHXeywJD>=t-Q)=3QX>9l4zO+<(BPEVwF%%#2w5o{w4Iy^^#I)c8AF_fTnn8a|Jf z1F?OKywpPx>*|MM@!|85wm)}MzwBykM>B^p^qsthZGd}GGjw0-$Kn?cPTIB@*Ca$P zhjUZ-n@vuPdQ9ckS8oqnpRI@z<0oyE?-NIoqfbf>Lj5|{H|*2X(4r!Sy6GqGdbgY3 zCj3qPhGq@KxAXgl($gj$x@O$vever79w}$*;BO-v5StqPH|~4X)Ee#z_173)DtBB5 zfBU&xob~ty&te?>lZW|Sr5v7j7=CEZ3)i+-_d@oizc?eV=J#>F2oDr)8LY%Scy>wK z?IG!rZO$D`{$U0-G59Cz^8e5HTpssc)poe!9yR@MCmw7L1hvyyt9PHq_ za<>1HFZo+FSL`=$um<{toI3qF{JuWSV0vl;QurEj=elP zIJ=Uz?QHq2aAM^P=D;5)&RKAD_J%NH-^Xut#~os;j{nckZwLtQh3_T!+rew8osY8r zWwW1UVxO?(jK;V9>P=Pc1AP$G|IGxS9gqDD{Ko5;i#zT?TXm!2^Q!XBR50$DaM{)c z7neT69L~<(i8b%wZ)bX+^R4*m!VLI=ST9!Q*PZ83XWxVU*fJcoW#eY%s1Jrc%5Xf3 zyF}}=_2ZLF{e-?JX-nRo+96-R+ZxgP_L0HTIh*0b`~nOvFR(lRjpW)C{jv z%QK{Zug>VOaOL>CiuB4|&im?0?ibrSKPGJ(to%J&+?-YkbxCo5EdIhzxlZqOM|=$Y z*l5K$b2z;Cg3!I+`?)Jsz*j$mCvrJ`YV!4S#7U#b&rfsxw_}aN7lUWjW-o;A<*A1a zM-hEm#5v$^!5sR_!1NRI)jFp47W^$Y$5Q{>9X08zdw_8t!Ir##d}2A<4E25SyuqT{ zgUhXWI_6-ojo5p(Irw;T+&&@noUqNq_P4Or^XI6}E5rL3SB)*4M@if9A=PxCamaJJ z((uNr9ym3%4bPbGDji(Twm2kCV8hEU4kl{=8o{ccew{g!uTjo2IqvpQ+M+b4E;IfH z_qAu~e_P11lhc>JB6$|Z*=(!dUVMe(yCx=Z*Bd#ecDAQuZF2fk zSi`IY@{#H}Q;wngM&+D(ma`pVSAOVW_;#Kr78uA_2TYyV=YRdn9?**KieT^fj$&=q zSH3fK4KeKvjJ+^eyJn|=YUPzvF!j@}ExCvdbq1naUP(PQx)q$v1qGDcyr%=PTVU!+=A^{5K36URi- zmUaB&@O_?E!g~bwBT~* zM3T1jRw-}KI%Y5V9zCk~>^$8wR6A38^SZoCkIyA<@6PueeRUJEtm1}-HzasZ)4XdY zfWHMR8T_qu%+KV+99ykp!?hE<1n#iXh;@&ZyP_HVlP%G*8uvjg-ZsuX*0s$@@W{@` zPh%1F-a7hklX9$|+r)ycH$tSbDrE)vC)5X)@?Oxe+mn`88m1CYh(=={8{(x#&&y1 zTnY|_%Sxxs@Whn#9q08eRX!YY}|&_pVi@Sqgg*UvbN5K?%r0Dac|>Xqn6*`8SZmv zXN#9n^>_FjfA1WcJ%2S^m52CjI&-S-?mNt3h^<_p?k=DtG(CT2d@$w%x&SH9FSGxvw`BH%GLPJPp7eqFCa{>*-hJ?c+Y&7JzOlD4elfBILUH?@Tq9!jJC*5|6~o{kT^>K$6K zso}az+Tt(bVtV-FMxKuwyy3b0q8q)+Wl2vS{R}VlG2DSQhr$lsH(ucAXQ^-J=1*e5 zMUUdIb~rx#lDskdPZj?CW@*Hb;#b|tsKi7)? zXNwzJ{jcJiV!iu}eJ>p+$P5wiDDekz^2-V&>NO}qKZL1;u zZ}2j!H;Q`imXAD>SewGW(n8@QL*V}?C7&|d7H&Of_RIJ#_?!5l(OxMVcOZR9jT!e! ze2Q8%aBC-CC08Q+?b4?b>rLa%0?S{W@#*_IE4YVpcDCvBJpQr~Uu2JvZd2kp==@SG zxVYU;x1Pk6OF~uO@t5Wp$`HSd?t0Fh z-Mlx>Sc{tfy;Rn5Wi)|fZ?)6#XAK7_Ls{~fN z!M2VLipH%Dd9nA~ma}aShv3vK;jb+xbS%g`5yDqu)Hl4XI;GszH*9d91vikA~wHHqC8c_c;8M`^gc`<{j6I zT7jDrcQWB`r?QpjL*ItpfGvi9Qnf~gU$1xNi1@n7ep_0i|BW8S;kD4=8cHmu`d{_o z&80qSiTjQjcOZAC=B#V(2GSo!D^N8gPW<^HehhBtyf7GUW+>`J9lN?{&2zh60 z8}WX@YfPPj`!0@zc3gOteAQ*#J;>FU49-zr&dIO8g*_Tz$#GMR-Yw@USY8T$I}~Cs z3-sIEhIno+^RAWHCwUI|4p_5Kb&=AfP<*2ro|@~I1q#yNRsJiHC(twd&qn*l+iJ!n z>Ut{}PJnNU?n1vS*KlSiN0gXDDx5^YK#ebh@!yW-{`C3eq8Wv|;gtL(yR^cNylGF@ z>9+HSkFPJY{WU0!rg)v+xu2{&R#=c*7yY*vv&A9ZtZwhF7pDEw)3x2duQBmxAA`RU zgA|m0_Gy>Xts7^@Yu}r@xz06Rw)C6Wqs+Fq(?5Sc-QaHz-e0#!c_Z~C(F;>Ja?Rb{ zT-!l|mL&RlH-zK&q#67To=f5h@(=&JBft89KN4|?@V8TFQNwK#ha3K;3DNj~T6xM5 zTg9<3J-4~F9)HvIb!^i@-~P4$f8gAcCia%9aF@Q$zdyFE`SYUj%n`2tVmpxg#bt?j zeYw$ub?`T8lHtLO8_qc657^F9Pa}An?%M2UXt;^z-PFUkOb=WCE_3%NY>$MlIktz` zu7o}62kh6`FV{cdC)dHg@GN^8T>p;mV4I@4HtDl*@4kh-rb6iYV;9jIGZ;TO&u34# zerE8uP0dz$)!!s7onIbnk@aZbt(=>g0dxkr51e)P9mf67-gw zQw#QKq<7PL1?~T?=$>!b7CHDE_om>z_vZcf;`T1rOz4b1ObEySisYdu?D|96#^wvC z{gS@dk6*oM1@EKp>hg$cMD&hLUY`Cp z?SJlXlkbTC;&kit)Q2{sb}AJNr5*f}mDn$y1p5^avhfGT9T<9S<2U}B2Bz?y&_MxH zRA1QP#VvUU4{?@W>+Vt5&I&Dthfe#wsWr8{Vci+Tw?AigDtm+QH+S44p%!;E_2Dnn zUhQV=D}>Mb6oXCO&a)(#D6>tmRX;@ky)>zkhB?K3s^oWWeNop={WkM^>f0@U&C5UkPQL4t^uNu`*4<;yY-%dtZqBGt zSSZ}f%xg%4T=jpt^Of(^`QZ(6)jtQ7mni*ljp=_g{y}b#`V`mCI>~pcr_6^_n4F2? z5cmLyPyNz*B5#@#uPF^)XTI{C+t2^)ckVUUQwQ^r!QXlSu0-8rP# z)PsAaXQmzzacC{=JIe#tyHDDA>h($5;yY8W8JJ#W-g=MlB;}qT-Fad9_BH`exZPsE zQ_Jj*`=7o0zE3-S@Y0^nefNzMSG&RAZu~Uf`JVUodX)b{PZl@MZ#lAOLtFKd_<4Zd zzl=9#<-)so7dfi7U@hNr?#yJ)j_t~-jf{@iuYc?fC}&>zwGw*727yJi0q^-9jOvx7 z?Z}>u4VI+*`YBZ@mqHTJr%h@;Wb8avBph$|Ad@UEF&F6EATKD;EL9vkriN=rZ(j>E<7 zjH}pE_4?AD(j65JZ~XB}e%ndx&hY=G<;LwmZ`A)x&y{+#guC~dS`VB3Jhxx?Z&x|n zfURdBJWJf!;v8%-?swMfOW1$Pf5*$&=GpYznsHT|A&oTkP&qvwCD^Hs#GUWWHs^0Z zIbGo)%B37$TuhwQjb~8IxL=gBz0;m~dc5h2Qq8n9FApz%ihV%&*-2*JW#c|-|5f`g zQy;B*6!AIo-gsBFu)UMtwxQg(Pl<=qU@X$FmgbeTPKdu5yEC@4%Gu7cRnslKcXH>M zwJQEZ-nt6s*j(mZojDIKvyE@CmBUdES7!?KbS6hE9wxLS;ipgz&V3HY4eq3VP>TRm zSUdVuoWmQzo|NaBlJqm-PO6*fc2Cm)_19ojg~CwL#JiC*Ky^AT%WT1&UYg!8Lw$vn zsy}UV$*Mn6{#p7j!nMlg&?jf;x3BxvXQf(J)uc+3Y@q)Z@U=Dc`_(M71$UCxp|EM` zm@Nu-4ji=l!A1FnsdrbeUD>#+a#p-^mEz6}v>7r~Q@k-)QF*sOzx+M$;pn_cJO^+m z;nFDuJEW7u9=JL~*ptrL8843sJU&T0L$WP^Z{=6hf9!B6KAU6WdG-9NN8`E$F?562 zCmq{1eZ)JukMAiZ?#H&|Ea&75;`Zqgbcu<3qP9dKi3xg?f z$APB}-Rih__7meaSb1SceFo+X5Fdxphz?V8l@cMh8dF^C+QyDIgDY(cwpVcn@a9>feV)8lk#HeSjV?ulBtpK`}>=1Ynr z(E~!=Q~XWhmfNr`re+M>Y2(jmncZ2=)^L2_hYj()BJMObsAZ+sR#+SyYiPQ0Uby2v z1wQmC+$t0BZ{3NH`~eW#!Vi}!JS;& zogwLJflJ}9vzbRexYH&4|2sa{jpsrgU2@!Grtd3#Vk_=e)M{B@p=EZI^*~>n^b}fl zEN5%k(mhjugm`w*KVW~H&RS^7-0$FyzKnP7&Y_XPoz$Pm+Go6j#Fw4eqZaTThZws? zIomWF{R^Z0-hJa1)_})w;|mi=O${)1U*4fR?oj*po>encSE4;fx<86No!qnP3cT36 zwo47}q&-44U+=W+nw8aQKIi2mdOiCvZ^c}$?Lj-G!1ik%l& z-HA2t;7-!0pbm!~xE2QgSD*Ci2k&H$t(m}@-ElK>#JO~8>vIN25_hU{j^Z~}T?BDb zVr?=md9G<=t|C8usbBGG{*B`ehaxpq8Ckpf1o|G`m0X+3i>jUvT_hhGFQ!inPHn>j zC!RUgza)MewYNXA$ATpdd0LoiEMEN=)`5q0+L!h84DWZ0`;NhU{)g80O5?s_{1TvfO?;_Sw|{{juVO9V#B&q=Hc0y3(a`BBC&|@9r%9W-uim!NbuD&>=zI6UDP`!=WD?+x|%!7^Q_@b{GLa1RzKL9 zobfDdt6?jg*Zpmc?Ax2%syhn5y*Yo|W^-<{$F^ZTOyaxP?~}G^^o`e2A2$2WX#RE) z=l&RMH<6pG!P<F!tVT#dV{fs{}{mr93;E&%1M2YA<-;xZ!sD zdg;xquSG%cCt>L<84W}A*p=BH6qmS9{gw2RnC}+u{L@z(0+-yhgm`9J;*90Jk*^j< zKlK)d^Yz^0KV}MpDxTOL%)VBp)0^zhAv0&io;$sByFTS7CIDMo84!o^xs&%~2ur?r z(q4CMcGNmXyUdf{VzX~=`se-=pRULdXT5YS)K@Bg%;bDo$LJ+_#Q!L4?e-xv{de5z zqyOty)mr*hSDvt?ZhHfF>1+6{U@e>An*d9CAaJ$8ok|~FmEU2(8ty}8zNv!-y+vO6 zlAzH|Z=0Lj@{*?c(oeD4Hj0+qH#L9DE0dD8@a|FPSe3h7#YnuQZf<=48F1-JLE%oN zUq|y7-R@7?4jNR-dnut0Ws2ctEnYPVE=6*ith182Yw|oRXOXXV=CFU?zwG(rc;4Vn z2P(%(?yC((^$2`(7Z}{B+TQQT1v$1_$9n$Qk_X=(v8sL(lb=~=gjxG{#H8C+W*ap9 z-KIY8ls95^jKx$(WbSfsF&BTalDv^SZvT+@;^m7*%khurqejmoUV;5$NHl)vIQx)m z>zv01cM{Ju{L<>nHyRbfodTb`=R7%^MMn2*|Gssc*VIr1zY4>F$huxij|*H*;+9R0 zyOUf+E#fxC#@E^6L=`ToS~=6_iOyS@?Xi&jOS}cd{`~z8>Je4H`3&C!wyr!#a$L)n z@1p&OZC&<*4YvGo$&l*UzC=7Fer5N!HL`<$*Chuwp0(JId7KUX^J#6yeF%R#&AQz0 z?j`)TG`s0tFZ6?_SyRNV>!=qy z#%IU4YaZLBw(1pyJLx>`I{AhyG#7l|Pg;(i>%v6exjWy3HkgoiQQs;Vy6frQ`^&6v zys96Rc9g+M-QUJKp3(FsZ{6KKg9A7GJ3m0(tGDy8>KP~Jzh$`1%AP}J&eqinJxzBs z^NHW(%+ON5bUVZ?BW|H%6(_pu*z|pUeyE10*}>LcY9hh4R{G99P}>8~koUoRTN{iZ zIWFtC-kzJ&r|oayX*YeFhx$oxgL`|Y4{tHuvwO^TFTH%=PWo+y@F~=AdbyNKhs!hA zbWonoP-*p$moJ?A%`$Rru5Ht7?>e+yPA#RLVN5K3+bwxI*U;C!Z&|uShumpG95yB)mH?QW5tsIRP!ueAIe!8|g zIk`6Z^XqL-tmDECE2Ha)?Ui$aYY~1d3yw6yy&z12{?j2(olmSyVKXl7M2t!<#oE~d z-<}We;=AY<_K1~qoSj&kWw;YL8gQq{oLMX2Gv9*m4(BXh6tV7lC9&RQJ20eLJ@vir z-}ff5%lkRxqwr&50@YD@#A)XIHsxV-zV-G#jK3bhX1A^WMTh5|T9)J*(zr*A{)O(w z;P2Na_S8ab>nrz~MSq^@d#KX) z8hoY1=sgDOw#lnD>5_7`sZNam`mSAHzNVn)y-xTF@kslUh;*Z<8+6|><35zl@1p@sWNiO?s{-8l$apzi0olm1E zy|;<|*TJ2*=MtYy#3w(9mNa~TbI8wg-9kSieP5Hju0IePr5XKL%W7d;u_i|Qk{lE9 z%yanND`xL@pP76|*g>lFP2!grUJr3s8s42aaZ!A4VxQC;W`RR4Wna99KHCe3V=sx2 zW5V`I=1~#b64xKFJrd#`K<`B=?{YeObv#GfD5?c7*&1lS=TVu zcjoR#pQ^ZL_iE4c7tS^M zklI%l^&RI|%y#of8JtH=T;Cxk_yjGAPlD=o?$v5+QNIIg!JU50?*Hz#yj3%6bnCom z7dc%sF1DwGZTh?vjJNKYTQT=wVcUNz(<3%JJ2)~sZ`}($x*nYRE4Y(m3%>#J!wo^J za9r%vz)b}cdhJJ#s&O`T9l76Sx9zeq?WrDRwl{-sq8+dzBWkT_p8x593yaKW!4$rKPlkN4A)r(ThC>cS0j5%j&%*6729u{; z(fGRhdGG{eN+&sf)1qAIvAN^Qcce$b8I4Bi+eXJxb@oO}eAcR{gN-}CO}-;tf7TzgNDmu*(C@jEw$9>g^HLv0Jp2IPRgJm1zwJM}&s7sW=LS6KOPe>(FHYmz)1LRp zPgQfxdUAay?eO9f=0%-Z+uZ1am%9|jADPwD@G5~j-8-&E(aCjJc2A6pZ7FkPy->IF z)%?kYm$jMK11?+Yns!IeKAcl{=F{%(J5Kw#TOF{2Ibc!;!^_v$1;Yl{?yf#c`sO3c zzo=Jm>9>}9zG2%nfjf=Mu|oIf9g6Sh^5LbbWt3idTfs?7)sS?tW%)Cpgymy}~;>Mu?^Jes1R{KBHe*eP8QlxbGO- zG=nYDPf2{t*_j!Msn=Y4tkW-N3Wlsi|>qtfL~z2eB0?^%UuI)R%&`d(t1Y?+m(Wf2VT|C#BD5`kAMBN(KLh^XEEAM{o7lS%%L#@!LA7MtRVn z_rW1+M2~(_r;9WbmCqIb`r6HXy9~T_B)F6LZP*@W?|dvQJ3aLxx>yQ_3N zxNq3vwy1ZuhwGE{lg$I~{(^Xb*mc#O7=JI6K92J1@gG_k%-)@^_8svq9$pNdOCP*2 zeAQc<`xJd&=qkH@2IiAy&X$yRqwojfkZN7jZ|awhiRy9VKlgS04BLUB>YmCOhC9~c z9DxIW)0eIM!nllXySQ@_&rH7a?DSOs!|R{Jhq=F(W`*bfG}35)TNX8^;{Hh59tok} z?ITu(E3`Gfl46se^8Vg)0{h7f-bqb&FJTTTHn}LT?xNyv5ufa|{R=$OH6V^qT;lE} zo#Z>b`}CHlN<6}F6uWHysA2leSLb=Uw|#@V#O2iqs#e$@gGX5V zU1HpV7HCa0G<{Uc-zo3s)b2Gl*w>ud7xEqMd@rNMsdlFF`qC*CPlb5y;R|P6_4p`v zj=kOyr(x3S6 z`Es_MZ0Y$3qY|DZT#Gv*Ht%8o75@pFap#b2kL~uZ`WDHLw$D_bK#jwHvtE~Bqu5#h zxwb|2$g!(T50fyFqFbl2SAEFca{{@YP1qeNXM2m?Wz|emzbnmTVZ72m6kezPad97( zjXM}j?Mb6Uqc~jJ8-W^AdH(Hr7EdwX?d5Do*@MmuG`NX+nA8`*XW$UL5Zi&w4RCgf$oDKF=xy+XMlD3(2Gau`}ggWobiN~fS{Y0{u|z&pH)TBRL|LCb8xo#6V*;C#t|&(LVFN&Ef#zpH1FbLY$uPUXJ0 zJ~`x~OkGL)tJ?&I*IZ)!NOd~XPrk)Ir}~40Ex6O%qxX~J%9Qp$%#gDNcUIKW`Hf4x6 zxZcu0;LFly4F91suJ{JeW=liO;4#uLHXQ8>IX~w{tlwwEbmw$!Pq+RzTUe6msWF@$ zpRs>Ek1ph7b0>(OnwYd*8Ldp8%zE}Muol&b1ltp1jVDihx8V+=wmE4#vO!&=(UY1w zin#tZ%>mm2c<8xn?7Scr9}`a6u8g(}iHBA>EGym~>}w{rJ4$ZL5=UG+aF5Qc`VWD&1Rn9#*?$h*C9Hgdk3hRLUFMLT(4RkH~MHazJ zFTF2!4oei%VtWy`9ochFai>x55YMf&8ae(4Ia^%YUFy{!-|{qZg>ari^uBc0`Hgw> z=DxR@-{{(whUV41BCvK|J8X5w`;Ptb7rujglyn42JC(DoV5=w9(P@33J>*_&=d%{* zhml@`sSS0-=}t zj(ScD8C!X9*LJ9VGFl_!(tn154OO7GF&b1Klj^{Pr4Jeu!``)BYEN1?*Karbi9DVs zQ~e*}K4EXb{(kmW^(DKu2knnO&Gpk8o3Z1gR|DX&nObM_|5ue<+8g8+MkUs~gF8_V z=2x98abkd8k<2GPeLEl=^VT|z4VGOtZf4Gzeb4&-NMC4hB;8rmAEEwr>CQ}kUa@gv z4&Z>25CxIRvVrq1R zSTkun(`JVEgd_+z_rwgWl) zm1`?xy?;lI?7?V*mH)$MUT0nK+**E_d=6;qB>J6}^V`9l*42%&_V7n>WgcQ4x0JJ8 z5|XxaYHAbK;#l^mn<9$;_V3%toT-nEA9L3QIfY$la{HY7kT??QAyco3qt^pBYCKZT zwlp+zLKW7$@NRmv$W4mt&D7ypk1>z$+%?3w6>Q>N;!fq1xAC_pa->bEdX)Y9F5=%0 zm$PkbOH)V~2In5%xf{;slkDA{Sr6KOPGIl&8SloP{#$+J%vrmW`CDT!D(U|0BX^>C zu@5F~hr&}f#?Lw+#(0FWKQndm;6>*AcH$Fv+@;b(@r`Y_j~HSI>uWV!!UF;yUV1a{ zr@vYIW#b;SkDnUj)7h=OgX)^qzrU~VdjY2hV{YP%b#SLapVs%GYiqbpRVyN14R8vh zyXw@^xO2$NfeYI!y_ff&I%xW%Hf?{?Pmgm(uTj@gJMtyDh=eWgmHB$q=ild%-;I8* z_<-qwg8Tp84Do6wZCS^gP8CvfdYWFUKYhZo>ecV*Q+=y?BwHN5z+K1mJ8gD)n4|%| zyk9PyeeeQa#eM#|Xq~ys^Fw2naPKyANIgEH#L@67z9JIe>B}w7tdVc(NWny>HF`SV zso8UE;c=%HtYXmW|8F?{XtmtZ!qPm$SFe62xHwu|(V^V9-zdi98G=FY93LxfI6Ck6 zh;`sjaifz^G;$jGYG>RfLn@$?Ihwq{#pKNYgU6>z-tK&Gr}ot&(gqy<*H`3%99ykp z(_5``fjU`n`$_ZK@RLs36f0TLoBNw_CPfuro1Ws0gH>PR#suVop4MK%dh3m!vmX>MjV!AntePC7v0Y;Hz6_t4`jgv#%6hv8+ZFh@YL$gMxpUZMa3|$hEbCg<)_*x#tEs6~*#o{p z6RBc3+fvoRv*#<9O^jg;%#q%s!++LY`=Pr>F^3AmZmFkhhHX7;*W2`usQ-!YSzb8lVj88P@h@42fyMjJF~%Q{xQ=is@mJ#$v>^GHKs+JXM*&ptSp zd-x$QyoTJ>_1g+Ns5XG#pJlbK7_l;Up@rKs4{ZXtfE(l~$NNBh7P&Upwt2Q{*3G*- zF^aRhE56+@EUp318$AktJ5#@$Z6=zD7Uw2?zJpIhgAZ2D6Zdy~SDoCMcaJSl??KtP zkJB5a*rP*^l~yGhzlHp1N!=W4=0$K5T%F&s^VY;VF6EK7It6&{a`(^Ek zNK2>n6f3cgh0UDG7N5kRK_TLcv-s=P^gFFaH>ETzF1peymnYVyY|}z_-9LnTzwYhy zEtz$5DBIjKr2jd7b7H;8b|8JiO;|HMc<(yF}J1m%lMP7Qu;=~$~?JT4B<_Y%G?+Z6lO&lgD- z$Hdm^#o3*o&e^sS`^t=sed4_-4>R@rHh5z*Gt!%u1pHst&Qc!0yRI7V(!%~U-{rhx zV;#p&Yba_8_!_7~{KOP8^Kvv>1a-@2v{?JV{(d?R#!47}cb z#~r6`f1Tbwc)v=Y568b~m3!d%ufUzqI1qn5{8RL*CiY(kcXBwbW^qUPDjKXXhF<$# z{08{c#BV`7>dryF^Y+&>S*!Gqw!bQ3)tySu%2@UraDQni>I_NDSH7eBHhCrPch?v` z3v_R=t%NOgPX|6t?2``eG@|pX`*rrH}(N9fH;+}QR#EiUaqXXj9Sv$|yt z`CxGIWt+@ihGq}(R4vzc823M$Jfe75{p!=!^ApE|^pi7+x|tf)#B-pm@N;^Y_6Oqy z@8^m$uJ6=haHsFGOQ)6O30G?W!N%*$Z2#srEeu*ubj^iBu&{8^?_Kxrdm&poarrH~ zbe$dluBU4Y-w?jjEoki>7i+xY^@4Zq77tvLZ0U@S`mAl26{X{Pl-c$r|M#Bm3c>=H<-5bEi9?68#5*>>`0;A) ze#Y5yD%)tsibLSU>?r+!c^?mdnfPIN7#uYBg*iXEzK(5LX#05aLszq{(s#{%<_+&A zpUXK;PY(QYuK!{?FeI+N)YPl+@2%t?PDaGtBi#}B10(T)d9MFrJIm<#ICpJ&mV(cQ z)f=z#(<&YiHuZLnPhxu{H21HM&6(=#9lPxrH+&E0*Qa3cuj7+nyFQ6+iha+hy8LZ6 zJOiV6FSQLfoj7_89u{Q%yW_I&=w3)~6#brOI5#_F>HLwtv}%Bal_zcSo!pG6p6icI z@rkcqJ(i=}F7OnMxWzAxGeW0)~E>4*JE3WXWmZ?c)dd0+L@Ayud z_MM8oMx}T4O{d4@R=@fy;GawO_WRE(U$6YE75p`P(cjm1DOz?nxRdcS zY(K}(9tQKjBeLqxw4#^utMp{=+O5r?BR|(b$ekFccK?Ef5YlJT^$|GCU$9I|NM9N-t77${Z8|Vqe^*J zPll{}KZ@;4>sPqDjd;hYvn;(Px5w?zyMES5z5{P4y@VCBt=5|&#V0?`lh%WH?5q<_ zq9xu+?!JR<8u|e%6l?I@i9@E{8k5FfwH0%Du5d)NU%K;^?;LxeM#e;OrmA-m-%(vk zg9GAUfV+e`zB1ccpa5JZw)!qx`*ju@=5Dy(4evGTScy)F^3}|;#r?K_8$oN zc&=^iQNw3>#oaNo!Lp!L(#-WUY*TD{*Sx|%m7`uVq;B@-%U|~Be%f{NVf?fL-{rhF z`A)Fi==5_<_S5@zm%mGJM&OjEW%{}by*=Fj(I$+$zQefx*%O}swbSyCzwRs?3vK{k V=%ZDgemwJRXS9Mn;vKTA{{u0ngRuYr literal 0 HcmV?d00001 diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index a671120cd0..0084dac2b5 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -66,6 +66,61 @@ def test_gtol(): d_report = file_comp(input_dict['report_file'], ref_output_report, exceptions) cleanup_tmp() +def test_bldhst(): + create_tmp() + input_dict = {} + input_dict['input_file'] = 'ensdf_processing/bldhst/ref_bldhst_iccseq.dat' + input_dict['output_table_file'] = tmp_path + '/tmp_bldhst_icctbl.dat' + input_dict['output_index_file'] = tmp_path + '/tmp_bldhst_iccndx.dat' + output_dict = ensdf_processing.bldhst(input_dict) + ref_table = 'ensdf_processing/bldhst/ref_icctbl.dat' + ref_index = 'ensdf_processing/bldhst/ref_iccndx.dat' + d_table = file_comp(input_dict['output_table_file'], ref_table, []) + d_index = file_comp(input_dict['output_index_file'], ref_index, []) + cleanup_tmp() + +def test_hsicc(): + create_tmp() + input_dict = {} + input_dict['data_deck'] = 'ensdf_processing/hsicc/ref_hsicc_data.tst' + input_dict['icc_index'] = 'ensdf_processing/hsicc/ref_hsicc_iccndx.dat' + input_dict['icc_table'] = 'ensdf_processing/hsicc/ref_hsicc_icctbl.dat' + input_dict['complete_report'] = tmp_path + '/tmp_out_hsicc_hscalc.lst' + input_dict['new_card_deck'] = tmp_path + '/tmp_out_hsicc_cards.new' + input_dict['comparison_report'] = tmp_path + '/tmp_out_hsicc_compar.lst' + input_dict['is_multipol_known'] = 'Y' + output_dict = ensdf_processing.hsicc(input_dict) + ref_report = 'ensdf_processing/hsicc/ref_hscalc.lst' + ref_card_deck = 'ensdf_processing/hsicc/ref_cards.new' + ref_comparison_report = 'ensdf_processing/hsicc/ref_compar.lst' + + exceptions = [[3, 55], [3, 70], [3, 83], [3, 107], [3, 131], [3, 151]] + d_report = file_comp(input_dict['complete_report'], ref_report, exceptions) + d_card_deck = file_comp(input_dict['new_card_deck'], ref_card_deck, []) + d_comparison_report = file_comp(input_dict['comparison_report'], ref_comparison_report, []) + cleanup_tmp() + +def test_hsmrg(): + create_tmp() + input_dict = {} + input_dict['data_deck'] = 'ensdf_processing/hsmrg/ref_hsmrg_data.tst' + input_dict['card_deck'] = 'ensdf_processing/hsmrg/ref_hsmrg_cards.new' + input_dict['merged_data_deck'] = tmp_path + '/tmp_out_cards.mrg' + output_dict = ensdf_processing.hsmrg(input_dict) + ref_deck = 'ensdf_processing/hsmrg/ref_cards.mrg' + d_report = file_comp(input_dict['merged_data_deck'], ref_deck, []) + cleanup_tmp() + +def test_seqhst(): + create_tmp() + input_dict = {} + input_dict['binary_table_input_file'] = 'ensdf_processing/seqhst/ref_seqhst_icctbl.dat' + input_dict['sequential_output_file'] = tmp_path + '/tmp_out_iccseq.dat' + output_dict = ensdf_processing.seqhst(input_dict) + ref_sequence = 'ensdf_processing/seqhst/ref_iccseq.dat' + d_report = file_comp(input_dict['sequential_output_file'], ref_sequence, []) + cleanup_tmp() + def create_tmp(): if not os.path.exists(tmp_path): os.makedirs(tmp_path) @@ -127,3 +182,7 @@ def file_comp(file_out, file_ref, exceptions): gabs = test_gabs() delta = test_delta() gtol = test_gtol() + bldhst = test_bldhst() + hsicc = test_hsicc() + hsmrg = test_hsmrg() + seqhst = test_seqhst() \ No newline at end of file From b1d0250194627fd8dbd3dfa99788dc7f6bf63815 Mon Sep 17 00:00:00 2001 From: josh Date: Tue, 19 Jan 2016 15:01:43 -0800 Subject: [PATCH 093/216] Fixed gtol doccumentation and added missing endline to test_ensdf_processing --- pyne/ensdf_processing.py | 6 ++++-- tests/test_ensdf_processing.py | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 5a8f105b46..85198b7281 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -130,8 +130,10 @@ def gabs(inputdict_unchecked): def gtol(inputdict_unchecked): """ - This function ... - + GTOL uses gamma-ray energies to derive a set of least-squares adjusted level energies. The + net feeding at each level is calculated from the input gamma intensities and conversion + coefficients. (GTOL readme) + Input Dictionary Required Key Pair Value: input_file : input ensdf file. report_file : desired gtol report file path. diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 0084dac2b5..356bc51dad 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -185,4 +185,5 @@ def file_comp(file_out, file_ref, exceptions): bldhst = test_bldhst() hsicc = test_hsicc() hsmrg = test_hsmrg() - seqhst = test_seqhst() \ No newline at end of file + seqhst = test_seqhst() + \ No newline at end of file From 8e14e39f785b74480066959691707689c69a4d34 Mon Sep 17 00:00:00 2001 From: josh Date: Tue, 19 Jan 2016 15:21:25 -0800 Subject: [PATCH 094/216] removed out of place quotes --- pyne/ensdf_processing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 85198b7281..2941f416b8 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -133,7 +133,7 @@ def gtol(inputdict_unchecked): GTOL uses gamma-ray energies to derive a set of least-squares adjusted level energies. The net feeding at each level is calculated from the input gamma intensities and conversion coefficients. (GTOL readme) - + Input Dictionary Required Key Pair Value: input_file : input ensdf file. report_file : desired gtol report file path. @@ -170,7 +170,7 @@ def gtol(inputdict_unchecked): if(supress_ic): inp = inp + 'Y' + '\n' else: - inp = inp + 'N' + '\n' + `dcc_theory` + '\n' + inp = inp + 'N' + '\n' + dcc_theory + '\n' proc.stdin.write(inp.encode('utf-8')) proc.communicate()[0] proc.stdin.close() From cefc6c1a5b1fbcab0ccc93b3946853bc336a8c57 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Thu, 21 Jan 2016 13:44:06 -0600 Subject: [PATCH 095/216] Addressed review comments --- docs/usersguide/data.rst | 45 ++++++++++++++++++++++++++++++++-------- src/atomicgen.py | 13 ++++++------ 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/docs/usersguide/data.rst b/docs/usersguide/data.rst index e94072e040..9cf661dd3c 100644 --- a/docs/usersguide/data.rst +++ b/docs/usersguide/data.rst @@ -8,16 +8,45 @@ Atomic & Isotopic Data .. automodule:: pyne.data -For a complete specification for the classes in the ``cccc`` module, please -refer to the Library Reference entry for :ref:`pyne_cccc`. +The isotopic & elemental abundance data is usually loaded at the time the atomic_mass function is called. This data now +exists in the C++ implementation. Behind the scenes the nuc_data.h5 file is loaded and the appropriate data elements populated, now +when this function is called, if the nuc_data.h5 does not exist, the data is instead loaded from that stored in a C++ class. This +is not particularly useful for Python users of PyNE, however the pure C++ users can now use the atomic and isotopic data +from the amalgamated source and do not need to carry the nuc_data.h5 with you. *************************** -Example Use of Data Class +C++ example Use of Data Class *************************** -The isotopic & elemental abundance data is usually loaded at the time the atomic_mass function is launched. This data now -exists in the C++ implementaion, behinds the scenes the nuc_data.h5 file is loaded and the appropriate data elements populated. +The main use of this feature is to allow C++ users to be able to call the abundance and nuclear data functions without the use of nuc_data.h5. For example, +.. code-block:: c + + #include "pyne.h" + #include + + int main(int argc, char* argv[]) { + pyne::NUC_DATA_PATH = ""; // for atomic data + double atomic_mass = pyne::atomic_mass("2H"); + std::cout << std::setprecision(8); + std::cout << "Atomic mass of deuterium is " << atomic_mass << std::endl; + } + +To compile & link against your installed version of PyNE + +.. code-block:: rest + g++ test.cpp -I$HOME/.local/include/pyne -I/include -L$HOME/.local/lib/ -L/lib -lhdf5 -lpyne -o test + +Running this example gives +.. code-block:: test + ./test + Atomic mass of deuterium is 2.0141018 + +*************************** +Python example Use of Data Class +*************************** + +A Python example for loading data is shown below.OA .. code-block:: ipython @@ -26,18 +55,16 @@ exists in the C++ implementaion, behinds the scenes the nuc_data.h5 file is load In [2]: print atomic_mass('2H') 2.01410177812 -If one chooses to, the nuclear data path can be set to some nonesense value and the data will be initialised from memory -instead. +If for whatever reason the nuc_data.h5 file is not found or doesn't exist, the above command will still work. You can force the nuc_data.h5m file to be not found as shown in the below example. .. code-block:: ipython In [1]: from pyne.pyne_config import pyne_conf In [2]: from pyne.data import atomic_mass - + # note, never do this, this is just for testing and this example In [3]: pyne_conf.NUC_DATA_PATH = b'some silly path that doesnt exist' In [4]: print atomic_mass('2H') 2.01410177812 -This is not particularly useful for Python users of PyNE, however the pure C++ users can now use the atomic and isotopic data from the amalgamated source and not need to carry the nuc_data.h5 with you. diff --git a/src/atomicgen.py b/src/atomicgen.py index 98939605ad..ec7b627bea 100755 --- a/src/atomicgen.py +++ b/src/atomicgen.py @@ -7,12 +7,12 @@ def print_header_file(filename): header_file += "/// \/file atomic_nuclear_data.h\n" header_file += "/// \/author Andrew Davis (andrew.davis@wisc.edu)\n" header_file += "///\n" - header_file += "/// \/brief Impliments all the fundamental atomic & nuclear data data\n" + header_file += "/// \/brief Implements all the fundamental atomic & nuclear data data\n" header_file += "#include \n" header_file += "\n" header_file += "namespace pyne\n" header_file += "{\n" - header_file += " /// main function to be called when you whish to load the nuclide data \n" + header_file += " /// main function to be called when you wish to load the nuclide data \n" header_file += " /// into memory \n" header_file += " void _load_atomic_mass_map_memory();\n" header_file += " /// function to create mapping from nuclides in id form\n" @@ -53,7 +53,7 @@ def print_atomic_mass_errors(): nuc = (10000000 * int(m.group(1))) + (10000 * int(m.group(2))) error = 1E-6 * float(m.group(5).strip().replace('#', '')) atomic_mass_error = " atomic_mass_error["+str(nuc)+"] = "+str(error)+";\n" - + file.close() return atomic_mass_error # print the masses map @@ -69,7 +69,7 @@ def print_atomic_mass(): nuc = (10000000 * int(m.group(1))) + (10000 * int(m.group(2))) mass = float(m.group(3)) + 1E-6 * float(m.group(4).strip().replace('#','')) atomic_mass += " atomic_mass_map["+str(nuc)+"] = "+str(mass)+";\n" - + file.close() return atomic_mass # print the abundances map @@ -126,5 +126,6 @@ def print_cpp_file(filename): f.write(cpp_file) f.close() -print_cpp_file("atomic_data.cpp") -print_header_file("atomic_data.h") +if __name__ == '__main__': + print_cpp_file("atomic_data.cpp") + print_header_file("atomic_data.h") From 9d9fcb4ce6865c3c9a5ad1e5f009d389d4a03d83 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Thu, 21 Jan 2016 14:19:20 -0600 Subject: [PATCH 096/216] renamed code-block type to bash --- docs/usersguide/data.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/usersguide/data.rst b/docs/usersguide/data.rst index 9cf661dd3c..000bfb7a01 100644 --- a/docs/usersguide/data.rst +++ b/docs/usersguide/data.rst @@ -34,11 +34,11 @@ The main use of this feature is to allow C++ users to be able to call the abunda To compile & link against your installed version of PyNE -.. code-block:: rest +.. code-block:: bash g++ test.cpp -I$HOME/.local/include/pyne -I/include -L$HOME/.local/lib/ -L/lib -lhdf5 -lpyne -o test Running this example gives -.. code-block:: test +.. code-block:: bash ./test Atomic mass of deuterium is 2.0141018 From 18aaa7a30c8f9ee374780ca96a7031d7e842ac48 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Thu, 21 Jan 2016 14:20:44 -0600 Subject: [PATCH 097/216] missing new lines --- docs/usersguide/data.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/usersguide/data.rst b/docs/usersguide/data.rst index 000bfb7a01..c94a67eef7 100644 --- a/docs/usersguide/data.rst +++ b/docs/usersguide/data.rst @@ -35,10 +35,12 @@ The main use of this feature is to allow C++ users to be able to call the abunda To compile & link against your installed version of PyNE .. code-block:: bash + g++ test.cpp -I$HOME/.local/include/pyne -I/include -L$HOME/.local/lib/ -L/lib -lhdf5 -lpyne -o test Running this example gives .. code-block:: bash + ./test Atomic mass of deuterium is 2.0141018 From 8dd05515b7e42b1e5b3eac332e8337696317d5cd Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Thu, 21 Jan 2016 14:21:54 -0600 Subject: [PATCH 098/216] more formatting --- docs/usersguide/data.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/usersguide/data.rst b/docs/usersguide/data.rst index c94a67eef7..6f0c854250 100644 --- a/docs/usersguide/data.rst +++ b/docs/usersguide/data.rst @@ -38,7 +38,8 @@ To compile & link against your installed version of PyNE g++ test.cpp -I$HOME/.local/include/pyne -I/include -L$HOME/.local/lib/ -L/lib -lhdf5 -lpyne -o test -Running this example gives +Running this example gives. + .. code-block:: bash ./test From 1114e5fa194ff68d723637f69e71dd66f35ee6ea Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 21 Jan 2016 18:02:00 -0800 Subject: [PATCH 099/216] Fixed typo --- tests/test_ensdf_processing.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 356bc51dad..1807b9f090 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -130,7 +130,7 @@ def cleanup_tmp(): def file_comp(file_out, file_ref, exceptions): ''' - xceptions format: [type, options] + Exceptions format: [type, options] type 1: prefix of length n. options: 'prefix'. type 2: general line ignore. @@ -186,4 +186,3 @@ def file_comp(file_out, file_ref, exceptions): hsicc = test_hsicc() hsmrg = test_hsmrg() seqhst = test_seqhst() - \ No newline at end of file From e839c8e5f09751bae6d8d3f22d5e661bbc0da646 Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 21 Jan 2016 18:11:55 -0800 Subject: [PATCH 100/216] Added interface, tests and reference files for the following ensdf analysis programs: logft, radd, radlst, ruler --- pyne/ensdf_processing.py | 154 + setup.py | 16 + src/CMakeLists.txt | 5 + tests/ensdf_processing/logft/ref_logft.dat | 99 + tests/ensdf_processing/logft/ref_logft.inp | 47 + tests/ensdf_processing/logft/ref_logft.new | 47 + tests/ensdf_processing/radd/ref_output.out | 22 + tests/ensdf_processing/radlst/ref_ensdf.rpt | 431 +++ tests/ensdf_processing/radlst/ref_mednew.dat | 207 ++ tests/ensdf_processing/radlst/ref_radlst.inp | 697 ++++ tests/ensdf_processing/radlst/ref_radlst.rpt | 1121 ++++++ tests/ensdf_processing/ruler/ref_ruler.inp | 3007 ++++++++++++++++ tests/ensdf_processing/ruler/ref_ruler.rpt | 3406 ++++++++++++++++++ tests/test_ensdf_processing.py | 60 + 14 files changed, 9319 insertions(+) create mode 100644 tests/ensdf_processing/logft/ref_logft.dat create mode 100644 tests/ensdf_processing/logft/ref_logft.inp create mode 100644 tests/ensdf_processing/logft/ref_logft.new create mode 100644 tests/ensdf_processing/radd/ref_output.out create mode 100644 tests/ensdf_processing/radlst/ref_ensdf.rpt create mode 100644 tests/ensdf_processing/radlst/ref_mednew.dat create mode 100644 tests/ensdf_processing/radlst/ref_radlst.inp create mode 100644 tests/ensdf_processing/radlst/ref_radlst.rpt create mode 100755 tests/ensdf_processing/ruler/ref_ruler.inp create mode 100644 tests/ensdf_processing/ruler/ref_ruler.rpt diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index c0ecaac585..fe560e40ad 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -104,3 +104,157 @@ def gabs(inputdict_unchecked): proc.communicate()[0] proc.stdin.close() + + +def logft(inputdict_unchecked): + #NOTE: changed input file line length to 90 to support longer file paths in fortran source. + """ + This program calculates log ft values for beta and electron-capture decay, average beta energies, + and capture fractions. (LOGFT readme) + + Input Dictionary Required Key Pair Value: + input_data_set : path to input data file. + output_report : desired path to output report file. + data_table : path to data table. + output_data_set : desired path to output data set. + + Output Dictionary Values: + Everything in input dictionary is returned if LOGFT completes successfully. + """ + inputdict = {} + input_data_set = inputdict_unchecked['input_data_set'] + output_report = inputdict_unchecked['output_report'] + data_table = inputdict_unchecked['data_table'] + output_data_set = inputdict_unchecked['output_data_set'] + + exe_path = path_to_exe('logft') + inp = input_data_set + '\n' + output_report + '\n' + data_table + '\n' + output_data_set + '\n' + proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + proc.stdin.write(inp.encode('utf-8')) + proc.communicate()[0] + proc.stdin.close() + return inputdict_unchecked + +def radd(inputdict_unchecked): + """ + This code (RadD.FOR) deduces the radius parameter (r 0 ) for odd-odd and odd-A nuclei + using the even-even radii [1] as input parameters. These radii deduced for odd-A and + odd-odd nuclides can be used in the calculation of alpha hindrance factors. In this + procedure, it is assumed that radius parameter ( r 0 Z , N ) for odd-Z and odd-N + nuclides lies midway between the radius parameters of adjacent even-even neighbors + calculates reduced transition probabilities. (RADD readme) + + Input Dictionary Required Key Pair Value: + input_file : input ensdf file + output file : file for output to be written to (doesn't have to exist) + + Output Dictionary Values: + Everything in input dictionary is returned if RADD completes successfully. + """ + inputdict = {} + atomic_number = inputdict_unchecked['atomic_number'] + neutron_number = inputdict_unchecked['neutron_number'] + output_file = inputdict_unchecked['output_file'] + + # Create symlinks to the two binaries the radd executables uses. + AK04_path = path_to_exe('98AK04.in') + ELE_path = path_to_exe('ELE.in') + AK04_set = False + ELE_set = False + if not os.path.exists('98AK04.in'): + os.symlink(AK04_path, '98AK04.in') + AK04_set = True + if not os.path.exists('ELE.in'): + os.symlink(ELE_path, 'ELE.in') + ELE_set = True + + exe_path = path_to_exe('radd') + inp = atomic_number + '\n' + neutron_number + '\n' + 'NO' + '\n' + proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + proc.stdin.write(inp.encode('utf-8')) + radd_output = proc.communicate()[0] + proc.stdin.close() + f = open(output_file, 'w') + f.write(radd_output) + f.close() + + if AK04_set: + os.remove('98AK04.in') + if ELE_set: + os.remove('ELE.in') + return inputdict_unchecked + +def radlist(inputdict_unchecked): + """ + This program calculates atomic & nuclear radiations and checks energy balance. + (RADLIST readme) + + Input Dictionary Required Key Pair Value: + output_radiation_listing : String, 'Y' if output radiation listing is desired, else 'N'. + output_ensdf_like_file : String, 'Y' if output ensdf like file is desired, else 'N'. + output_file_for_nudat : String, 'Y' if output file for nudat is desired, else 'N'. + output_mird_listing : String, 'Y' if output mird listing is desired, else 'N'. + calculate_continua : String, 'Y' if calculate continua is desired, else 'N'. + input_file : input ensdf file. + output_radlst_file : path to desired output radlst file. + input_radlst_data_table : path to input radlst data table (mednew.dat location). + input_masses_data_table : (optional) path to input masses data table. + output_ensdf_file : path to desired output ensdf file. + + Output Dictionary Values: + Everything in input dictionary is returned if RADLIST completes successfully. + """ + exe_path = path_to_exe('radlist') + radlist_url = "http://www.nndc.bnl.gov/nndcscr/ensdf_pgm/analysis/radlst/unx/radlist" + print exe_path + verify_download_exe(exe_path, radlist_url, dl_size = 8704) + + inputdict = {} + output_rad_listing = inputdict_unchecked['output_radiation_listing'] + output_endf_like_file = inputdict_unchecked['output_ensdf_like_file'] + output_file_for_nudat = inputdict_unchecked['output_file_for_nudat'] + output_mird_listing = inputdict_unchecked['output_mird_listing'] + calculate_continua = inputdict_unchecked['calculate_continua'] + input_file = inputdict_unchecked['input_file'] + output_radlst_file = inputdict_unchecked['output_radlst_file'] + input_radlst_data_table = inputdict_unchecked['input_radlst_data_table'] + if 'input_masses_data_table' in inputdict_unchecked: + input_masses_data_table = inputdict_unchecked['input_masses_data_table'] + else: + input_masses_data_table = '' + output_ensdf_file = inputdict_unchecked['output_ensdf_file'] + + inp = output_rad_listing + '\n' + output_endf_like_file + '\n' + output_file_for_nudat +\ + '\n' + output_mird_listing + '\n' + calculate_continua + '\n' + input_file +\ + '\n' + output_radlst_file + '\n' + input_radlst_data_table + '\n' + input_masses_data_table +\ + '\n' + output_ensdf_file + proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + proc.stdin.write(inp.encode('utf-8')) + radd_output = proc.communicate()[0] + proc.stdin.close() + return inputdict_unchecked + +def ruler(inputdict_unchecked): + """ + This program calculates reduced transition probabilities. (RULER readme) + + Input Dictionary Required Key Pair Value: + input_file : input ensdf file + output file : file for output to be written to (doesn't have to exist) + + Output Dictionary Values: + Everything in input dictionary is returned if RULER completes successfully. + """ + inputdict = {} + input_file = inputdict_unchecked['input_file'] + output_report_file = inputdict_unchecked['output_report_file'] + mode_of_operation = inputdict_unchecked['mode_of_operation'] + assumed_dcc_theory = inputdict_unchecked['assumed_dcc_theory'] + + exe_path = path_to_exe('ruler') + ruler_output = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) + inp = input_file + '\n' + output_report_file + '\n' + mode_of_operation + '\n' + assumed_dcc_theory + ruler_output.stdin.write(inp.encode('utf-8')) + ruler_output.communicate()[0] + ruler_output.stdin.close() + return inputdict_unchecked \ No newline at end of file diff --git a/setup.py b/setup.py index 7f43a39b94..e6dfb2db85 100755 --- a/setup.py +++ b/setup.py @@ -177,6 +177,12 @@ def download_decay(): return True ALPHAD_H = os.path.join('build', 'src/alphad') +LOGFT_H = os.path.join('build', 'src/logft') +RADD_H = os.path.join('build', 'src/radd') +RADD_98AK04_H = os.path.join('src', 'ensdf_processing/RADD/98AK04.in') +RADD_ELE_H = os.path.join('src', 'ensdf_processing/RADD/ELE.in') +RULER_H = os.path.join('build', 'src/ruler') + def copy_ensdf_executables(exe_dest): print('Copying ENSDF Executables to install directory') # Hack for copying the executables the first time PyNE is instealled, before @@ -188,8 +194,18 @@ def copy_ensdf_executables(exe_dest): exe_dest = exe_dest + '/' + f exe_dest = exe_dest + '/pyne' ALPHAD_DEST = os.path.join(exe_dest, 'alphad') + LOGFT_DEST = os.path.join(exe_dest, 'logft') + RADD_DEST = os.path.join(exe_dest, 'radd') + RADD_98AK04_DEST = os.path.join(exe_dest, '98AK04.in') + RADD_ELE_DEST = os.path.join(exe_dest, 'ELE.in') + RULER_DEST = os.path.join(exe_dest, 'ruler') try: shutil.copy(ALPHAD_H, ALPHAD_DEST) + shutil.copy(LOGFT_H, LOGFT_DEST) + shutil.copy(RADD_H, RADD_DEST) + shutil.copy(RADD_98AK04_H, RADD_98AK04_DEST) + shutil.copy(RADD_ELE_H, RADD_ELE_DEST) + shutil.copy(RULER_H, RULER_DEST) except Exception: print('Some ENSDF processing executables were unable to be copied to the \ install directory.') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2519815b6e..e0bdbe6dad 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -104,6 +104,11 @@ set_source_files_properties(decay.cpp PROPERTIES COMPILE_FLAGS add_executable(alphad ${PROJECT_SOURCE_DIR}/src/ensdf_processing/ALPHAD/alphad.f ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f) +add_executable(logft ${PROJECT_SOURCE_DIR}/src/ensdf_processing/LOGFT/logft.for + ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f) +add_executable(radd ${PROJECT_SOURCE_DIR}/src/ensdf_processing/RADD/RadD.for) +add_executable(ruler ${PROJECT_SOURCE_DIR}/src/ensdf_processing/RULER/ruler.f + ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f) # Print include dir get_property(inc_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES) diff --git a/tests/ensdf_processing/logft/ref_logft.dat b/tests/ensdf_processing/logft/ref_logft.dat new file mode 100644 index 0000000000..d4af19ccb9 --- /dev/null +++ b/tests/ensdf_processing/logft/ref_logft.dat @@ -0,0 +1,99 @@ + 1 1.555E-06 0.0 0.0 0.0 0.0 + 2 9.766E-06 0.0 0.0 0.0 0.0 + 3 3.683E-05 0.0 0.0 0.0 0.0 + 4 8.913E-05 2.76E-06 0.0 0.0 0.0 + 5 0.1707E-030.7164E-050.5732E-090.0 0.0 + 6 0.3002E-030.1532E-040.2758E-080.0 0.0 + 7 0.4849E-030.2710E-040.6504E-080.6504E-080.0 + 8 0.7339E-030.4272E-040.1367E-070.2691E-070.0 + 9 0.1058E-020.6295E-040.2581E-070.7680E-070.0 + 10 0.1471E-020.8836E-040.4683E-070.1829E-060.0 + 11 0.1983E-020.1639E-030.8817E-070.3425E-060.2300E-05 + 12 0.2605E-020.2223E-030.1568E-060.6039E-060.6592E-05 + 13 0.3353E-020.2913E-030.2596E-060.1002E-050.1878E-04 + 14 0.4243E-020.3758E-030.3823E-060.1453E-050.3015E-04 + 15 0.5284E-020.4779E-030.5887E-060.2226E-050.4632E-04 + 16 0.6496E-020.5986E-030.8779E-060.3308E-050.6696E-04 + 17 0.7897E-020.7412E-030.1274E-050.4767E-050.9071E-04 + 18 0.9502E-020.9044E-030.1810E-050.6720E-050.1167E-03 + 19 0.1134E-010.1093E-020.2510E-050.9239E-050.1605E-03 + 20 0.1342E-010.1312E-020.3418E-050.1251E-040.2130E-03 + 21 0.1574E-010.1551E-020.4577E-050.1668E-040.2613E-03 + 22 0.1835E-010.1835E-020.6077E-050.2195E-040.3135E-03 + 23 0.2130E-010.2151E-020.7968E-050.2838E-040.3717E-03 + 24 0.2460E-010.2513E-020.1031E-040.3644E-040.4190E-03 + 25 0.2823E-010.2917E-020.1319E-040.4636E-040.5076E-03 + 26 0.3227E-010.3361E-020.1673E-040.5796E-040.5885E-03 + 27 0.3677E-010.3867E-020.2105E-040.7247E-040.6788E-03 + 28 0.4168E-010.4430E-020.2631E-040.8930E-040.7746E-03 + 29 0.4707E-010.5041E-020.3254E-040.1094E-030.8563E-03 + 30 0.5308E-010.5726E-020.4005E-040.1335E-030.1006E-02 + 31 0.5959E-010.6492E-020.4903E-040.1611E-030.1163E-02 + 32 0.6679E-010.7321E-020.5951E-040.1935E-030.1338E-02 + 33 0.7461E-010.8244E-020.7200E-040.2315E-030.1557E-02 + 34 0.8309E-010.9244E-020.8621E-040.2747E-030.1779E-02 + 35 0.9248E-010.1035E-010.1033E-030.3251E-030.2043E-02 + 36 0.1026E 000.1156E-010.1231E-030.3832E-030.2336E-02 + 37 0.1136E 000.1291E-010.1474E-030.4504E-030.2678E-02 + 38 0.1257E 000.1434E-010.1735E-030.5246E-030.3061E-02 + 39 0.1388E 000.1591E-010.2050E-030.6106E-030.3509E-02 + 40 0.1530E 000.1767E-010.2409E-030.7079E-030.3961E-02 + 41 0.1685E 000.1958E-010.2842E-030.8199E-030.4450E-02 + 42 0.1846E 000.2160E-010.3301E-030.9441E-030.4977E-02 + 43 0.2026E 000.2384E-010.3852E-030.1084E-020.5561E-02 + 44 0.2220E 000.2628E-010.4501E-030.1242E-020.6210E-02 + 45 0.2431E 000.2896E-010.5208E-030.1419E-020.6922E-02 + 46 0.2656E 000.3186E-010.6040E-030.1615E-020.7704E-02 + 47 0.2902E 000.3502E-010.6974E-030.1836E-020.8638E-02 + 48 0.3165E 000.3846E-010.8029E-030.2083E-020.9683E-02 + 49 0.3451E 000.4222E-010.9268E-030.2359E-020.1074E-01 + 50 0.3757E 000.4631E-010.1066E-020.2664E-020.1201E-01 + 51 0.4090E 000.5075E-010.1222E-020.3004E-020.1331E-01 + 52 0.4446E 000.5553E-010.1402E-020.3383E-020.1477E-01 + 53 0.4831E 000.6074E-010.1599E-020.3801E-020.1640E-01 + 54 0.5246E 000.6644E-010.1832E-020.4276E-020.1820E-01 + 55 0.5698E 000.7256E-010.2086E-020.4770E-020.2022E-01 + 56 0.6180E 000.7934E-010.2381E-020.5334E-020.2248E-01 + 57 0.6693E 000.8653E-010.2706E-020.5939E-020.2477E-01 + 58 0.7256E 000.9448E-010.3083E-020.6643E-020.2731E-01 + 59 0.7863E 000.1032E 000.3505E-020.7383E-020.2996E-01 + 60 0.8500E 000.1124E 000.3972E-020.8212E-020.3285E-01 + 61 0.9200E 000.1225E 000.4508E-020.9109E-020.3615E-01 + 62 0.9940E 000.1335E 000.5103E-020.1010E-010.3959E-01 + 63 0.1075E 010.1455E 000.5785E-020.1120E-010.4338E-01 + 64 0.1162E 010.1584E 000.6544E-020.1238E-010.4754E-01 + 65 0.1256E 010.1727E 000.8230E-020.1371E-010.5214E-01 + 66 0.1356E 010.1881E 000.8374E-020.1513E-010.5714E-01 + 67 0.1462E 010.2043E 000.9436E-020.1666E-010.6254E-01 + 68 0.1577E 010.2222E 000.1064E-010.1836E-010.6847E-01 + 69 0.1702E 010.2419E 000.1200E-010.2015E-010.7505E-01 + 70 0.1835E 010.2628E 000.1353E-010.2221E-010.8243E-01 + 71 0.1981E 010.2862E 000.1525E-010.2443E-010.9026E-01 + 72 0.2135E 010.3107E 000.1718E-010.2679E-010.9906E-01 + 73 0.2301E 010.3381E 000.1933E-010.2941E-010.1085E 00 + 74 0.2480E 010.3676E 000.2179E-010.3229E-010.1191E 00 + 75 0.2671E 010.3993E 000.2447E-010.3534E-010.1302E 00 + 76 0.2881E 010.4348E 000.2756E-010.3877E-010.1431E 00 + 77 0.3101E 010.4717E 000.3097E-010.4238E-010.1564E 00 + 78 0.3340E 010.5129E 000.3481E-010.4633E-010.1717E 00 + 79 0.3596E 010.5565E 000.3903E-010.5058E-010.1881E 00 + 80 0.3874E 010.6054E 000.4392E-010.5526E-010.2066E 00 + 81 0.4173E 010.6583E 000.4939E-010.6040E-010.2260E 00 + 82 0.4492E 010.7154E 000.5546E-010.6578E-010.2478E 00 + 83 0.4836E 010.7777E 000.6231E-010.7166E-010.2718E 00 + 84 0.5207E 010.8454E 000.6993E-010.7790E-010.2990E 00 + 85 0.5610E 010.9186E 000.7854E-010.8473E-010.3281E 00 + 86 0.6037E 010.9986E 000.8816E-010.9210E-010.3597E 00 + 87 0.6502E 010.1086E 010.9902E-010.1002E 000.3946E 00 + 88 0.7004E 010.1181E 010.1112E 000.1086E 000.4330E 00 + 89 0.7546E 010.1286E 010.1251E 000.1181E 000.4754E 00 + 90 0.8125E 010.1399E 010.1404E 000.1285E 000.5215E 00 + 91 0.8756E 010.1523E 010.1578E 000.1397E 000.5708E 00 + 92 0.9435E 010.1659E 010.1774E 000.1520E 000.6268E 00 + 93 0.1017E 020.1806E 010.1995E 000.1650E 000.6882E 00 + 94 0.1096E 020.1968E 010.2243E 000.1792E 000.7558E 00 + 95 0.1182E 020.2146E 010.2524E 000.1942E 000.8331E 00 + 96 0.1276E 020.2340E 010.2843E 000.2100E 000.9158E 00 + 97 0.1377E 020.2554E 010.3204E 000.2272E 000.1007E 01 + 98 0.1486E 020.2797E 010.3622E 000.2470E 000.1115E 01 + diff --git a/tests/ensdf_processing/logft/ref_logft.inp b/tests/ensdf_processing/logft/ref_logft.inp new file mode 100644 index 0000000000..8971efe5aa --- /dev/null +++ b/tests/ensdf_processing/logft/ref_logft.inp @@ -0,0 +1,47 @@ +205TL 205HG B- DECAY 71HI01 78NDS 780310 +205HG P 0 1/2- 5.2 M 1 1538 8 +205TL N 0.022 10 1 +205TL L 0 1/2+ +205TL B 96 2 5.27115 +205TL2 B EAV= 542 4$ +205TL CB E SOME APPROXIMATE MEASUREMENTS LISTED IN 71SC35 +205TL L 203.7 3/2+ 1.46 NS 8 +205TL CL T 71SH35, 67MA45 +205TL G 203.74 3 100 M1+E2 +1.56 15 0.440 +205TL CG E FROM 72BA53 +205TL CG MR FROM COUL. EX. (73KR02) +205TL CG CC FROM 73KR02 +205TL B 3.1 13 6.5 2 +205TL2 B EAV= 460 4$ +205TL1CB IB ESTIMATED BY 71HI01 TO BE 3.7% 15 BASED ON RATIOS OF +205TL2CB IG(203.7) TO 197HG,203HG IG'S AND CC(203.7)=0.62; IB=3.1% IF CC IS +205TL3CB REDUCED TO 0.44 +205TL L 619.3 5/2+ +205TL B 0.016 7 8.6920 1U +205TL2 B EAV= 299 3$ +205TL G 415.6 3 0.59 8 (M1) 0.1691 +205TL G 618.6 7 0.090 20 +205TL CG RI(618.6)/RI(415.6) IS AP TWICE AS LARGE AS IN COUL. EX. +205TL2CG AND (N,N'G) +205TL L 1140.9 (3/2)+ +205TL B 0.0030 16 7.7424 +205TL2 B EAV= 115 3$ +205TL G 937.2 6 0.093 20 +205TL G 1141.1 15 0.045 20 +205TL L 1218.7 1/2+ +205TL B 0.007 4 7.1 3 +205TL2 B EAV= 90.0 25$ +205TL G 1014.7 8 0.031 10 +205TL G 1218.7 4 0.28 5 +205TL L 1340.3 (3/2)+ +205TL B 0.006 3 6.4723 +205TL2 B EAV= 53.4 24$ +205TL G 720.8 8 0.051 15 +205TL G 1136.8 6 0.21 5 +205TL G 1340.3 8 0.015 5 +205TL L 1433.9 (1/2,3/2) +205TL B 0.0049 25 5.6925 +205TL2 B EAV= 27.1 22$ +205TL G 1230.8 10 0.023 10 +205TL G 1433.9 5 0.20 5 + diff --git a/tests/ensdf_processing/logft/ref_logft.new b/tests/ensdf_processing/logft/ref_logft.new new file mode 100644 index 0000000000..e77d49832b --- /dev/null +++ b/tests/ensdf_processing/logft/ref_logft.new @@ -0,0 +1,47 @@ +205TL 205HG B- DECAY 71HI01 78NDS 780310 +205HG P 0 1/2- 5.2 M 1 1538 8 +205TL N 0.022 10 1 +205TL L 0 1/2+ +205TL B 96 2 5.271 15 +205TLS B EAV=542.4 33 +205TL CB E SOME APPROXIMATE MEASUREMENTS LISTED IN 71SC35 +205TL L 203.7 3/2+ 1.46 NS 8 +205TL CL T 71SH35, 67MA45 +205TL G 203.74 3 100 M1+E2 +1.56 15 0.440 +205TL CG E FROM 72BA53 +205TL CG MR FROM COUL. EX. (73KR02) +205TL CG CC FROM 73KR02 +205TL B 3.1 13 6.53 19 +205TLS B EAV=460.0 32 +205TL1CB IB ESTIMATED BY 71HI01 TO BE 3.7% 15 BASED ON RATIOS OF +205TL2CB IG(203.7) TO 197HG,203HG IG'S AND CC(203.7)=0.62; IB=3.1% IF CC IS +205TL3CB REDUCED TO 0.44 +205TL L 619.3 5/2+ +205TL B 0.016 7 8.69 20 1U +205TLS B EAV=298.9 29 +205TL G 415.6 3 0.59 8 (M1) 0.1691 +205TL G 618.6 7 0.090 20 +205TL CG RI(618.6)/RI(415.6) IS AP TWICE AS LARGE AS IN COUL. EX. +205TL2CG AND (N,N'G) +205TL L 1140.9 (3/2)+ +205TL B 0.0030 16 7.74 24 +205TLS B EAV=114.5 26 +205TL G 937.2 6 0.093 20 +205TL G 1141.1 15 0.045 20 +205TL L 1218.7 1/2+ +205TL B 0.007 4 7.1 3 +205TLS B EAV=90.0 25 +205TL G 1014.7 8 0.031 10 +205TL G 1218.7 4 0.28 5 +205TL L 1340.3 (3/2)+ +205TL B 0.006 3 6.47 23 +205TLS B EAV=53.4 24 +205TL G 720.8 8 0.051 15 +205TL G 1136.8 6 0.21 5 +205TL G 1340.3 8 0.015 5 +205TL L 1433.9 (1/2,3/2) +205TL B 0.0049 25 5.69 25 +205TLS B EAV=27.1 22 +205TL G 1230.8 10 0.023 10 +205TL G 1433.9 5 0.20 5 + diff --git a/tests/ensdf_processing/radd/ref_output.out b/tests/ensdf_processing/radd/ref_output.out new file mode 100644 index 0000000000..ec97f31cdf --- /dev/null +++ b/tests/ensdf_processing/radd/ref_output.out @@ -0,0 +1,22 @@ + ENTER ATOMIC NUMBER(Z) and NEUTRON NUMBER(N) FOR ALPHA DAUGHTER NUCLEUS + + + +================================================================= + CALCULATION FOR RADIUS PARAMETER +================================================================= + + Alpha Parent Daughter + ================ ================ ================ + Ele Z N A Ele Z N A Radius (fm) + ---------------- ---------------- ---------------- + Ra 88 115 203 Rn 86 113 199 1.5665 0.0520 + +----------------------------------------------------------------- + + ATTENTION!:One of the input even-even radius,used in these calculations,has asymmetric uncertainity (1998Ak04) and larger uncertainity has been considered + + + Do you wish to calculate radius parameter for any other nuclide? + + Type yes or YES to calculate again and no or NO to exit diff --git a/tests/ensdf_processing/radlst/ref_ensdf.rpt b/tests/ensdf_processing/radlst/ref_ensdf.rpt new file mode 100644 index 0000000000..f4abbfca02 --- /dev/null +++ b/tests/ensdf_processing/radlst/ref_ensdf.rpt @@ -0,0 +1,431 @@ +0 + + + + + 205HG B- DECAY (5.2 M 1) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + B- 1 MAX 104. 8 + AVG 27.1 22 0.0049 25 0 + B- 2 MAX 198. 8 + AVG 53.4 24 0.006 3 0 + B- 3 MAX 319. 8 + AVG 90.0 25 0.007 4 0 + B- 4 MAX 397. 8 + AVG 115. 3 0.0030 16 0 + B- 5 MAX 919. 8 + AVG 299. 3 0.016 7 0.0001 + B- 6 MAX 1334. 8 + AVG 460. 4 3.1 13 0.0304 + B- 7 MAX 1538. 8 + AVG 542. 4 96.0 20 1.11 + TOTAL B- + AVG 539. 4 99.1 24 1.14 + + G 1 203.74 3 2.2 10 0.0095 + G 2 415.6 3 0.013 7 0.0001 + G 3 618.6 7 0.0020 10 0 + G 4 720.8 8 0.0011 6 0 + G 5 937.2 6 0.0020 11 0 + G 7 1136.8 6 0.0046 24 0.0001 + G 9 1218.7 4 0.006 3 0.0002 + G 12 1433.9 5 0.0044 23 0.0001 +0 + + + + + 205HG B- DECAY (5.2 M 1) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + B- 1 MAX 104. 8 + AVG 27.1 22 0.0049 25 0 + B- 2 MAX 198. 8 + AVG 53.4 24 0.006 3 0 + B- 3 MAX 319. 8 + AVG 90.0 25 0.007 4 0 + B- 4 MAX 397. 8 + AVG 115. 3 0.0030 16 0 + B- 5 MAX 919. 8 + AVG 299. 3 0.016 7 0.0001 + B- 6 MAX 1334. 8 + AVG 460. 4 3.1 13 0.0304 + B- 7 MAX 1538. 8 + AVG 542. 4 96.0 20 1.11 + TOTAL B- + AVG 539. 4 99.1 24 1.14 + + G 1 203.74 3 2.2 10 0.0095 + G 2 415.6 3 0.013 7 0.0001 + G 3 618.6 7 0.0020 10 0 + G 4 720.8 8 0.0011 6 0 + G 5 937.2 6 0.0020 11 0 + G 7 1136.8 6 0.0046 24 0.0001 + G 9 1218.7 4 0.006 3 0.0002 + G 12 1433.9 5 0.0044 23 0.0001 +0 + + + + + 252CF A DECAY (2.638 Y 10) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + AUGER-L 10.70 5.1 4 0.0012 + CE- L - 1 18.87 3 11.0 8 0.0044 + CE- M - 1 37.06 3 3.07 21 0.0024 + CE- L - 2 75.67 0.172 6 0.0003 + CE- M - 2 93.86 0.049 4 0 + CE-NOP- 2 98.51 0.0191 7 0 + CE- L - 3 135. 15 0.00316 11 0 + + A 1 5825.9 5 0.001938 0.0002 + A 2 5976.5 5 0.23 4 0.0296 + A 3 6075.7 5 15.2 3 1.97 + A 4 6118.3 5 81.6 3 10.63 + + X-RAY L 15.00 6.0 5 0.0019 + G 1 43.40 3 0.0148 9 0 + G 2 100.2 0.01260 0 + G 3 160. 15 0.001938 0 +0 + + + + + 172LU EC DECAY (6.70 D 3) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + AUGER-L 5.840 135. 4 0.0168 + CE- K - 1 17.34 16.6 9 0.0061 + CE- K - 2 29.24 10.0 7 0.0062 + AUGER-K 42.20 5.86 15 0.0053 + CE- L - 1 68.18 55. 4 0.0795 + CE- M - 1 76.27 13.5 8 0.0219 + CE-NOP- 1 78.18 3.7 3 0.0062 + CE- L - 2 80.08 11.3 7 0.0192 + CE- M - 2 88.17 2.76 18 0.0052 + CE-NOP- 2 90.08 0.77 5 0.0015 + CE- K - 11 120.1 4.4 3 0.0112 + CE- L - 11 171.0 2.39 15 0.0087 + CE- M - 11 179.1 0.58 6 0.0022 + CE-NOP- 11 181.0 0.157 11 0.0006 + CE- K - 20 218.4 0.071 7 0.0003 + CE- L - 20 269.2 0.0234 21 0.0001 + CE- M - 20 277.3 0.0056 6 0 + CE-NOP- 20 279.2 0.0016 3 0 + + B+ 1 MAX 1218. + AVG 557.17 22 0.070 0.0008 + + X-RAY L 7.420 42.2 11 0.0067 + X-RAY KA2 51.3540 5 30.2 8 0.0331 + X-RAY KA1 52.3889 5 53.3 13 0.0595 + X-RAY KB 59.40 22.1 6 0.0279 + G 1 78.67 10.6 5 0.0177 + G 2 90.57 5.2 3 0.0101 + G 3 112.7 4.5 3 0.0108 + G 5 134.5 0.080 10 0.0002 + G 6 134.5 0.080 10 0.0002 + G 7 134.5 0.080 10 0.0002 + G 8 142.5 0.0056 0 + G 9 145.7 0.16 4 0.0005 + G 10 151.1 0.09 3 0.0003 + G 11 181.5 19.9 11 0.0769 + G 12 196.4 0.120 10 0.0005 + G 13 197.0 0.0050 0 + G 14 203.4 6.04 25 0.0262 + G 15 210.2 0.090 20 0.0004 + G 16 247.1 0.50 7 0.0026 + G 17 254.8 0.090 10 0.0005 + G 18 264.8 0.65 9 0.0037 + G 19 270.0 2.20 14 0.0127 + G 20 279.7 1.10 10 0.0065 + G 21 293.6 0.0016 0 + G 22 319.1 0.170 20 0.0012 + G 23 323.9 1.57 6 0.0108 + G 24 330.4 0.62 7 0.0044 + G 25 347.8 0.0024 0 + G 26 358.5 0.120 10 0.0009 + G 27 366.7 0.32 4 0.0025 + G 28 372.5 2.77 18 0.0220 + G 29 377.5 3.18 10 0.0256 + G 30 383.1 0.050 20 0.0004 + G 31 399.8 0.54 3 0.0046 + G 32 399.8 0.54 3 0.0046 + G 33 410.3 2.08 7 0.0182 + G 34 416.6 0.080 10 0.0007 + G 35 423.0 0.170 20 0.0015 + G 36 423.0 0.0022 0 + G 37 427.6 0.150 20 0.0014 + G 39 432.5 1.54 9 0.0142 + G 40 436.1 0.0063 0 + G 41 437.5 0.240 20 0.0022 + G 42 443.4 0.160 20 0.0015 + G 43 482.1 0.72 5 0.0074 + G 44 486.2 0.74 8 0.0077 + G 45 490.4 2.00 13 0.0209 + G 46 512.8 0.160 20 0.0017 + G 47 524.3 0.24 5 0.0027 + G 48 528.2 4.01 12 0.0451 + G 49 536.3 0.70 4 0.0080 + G 50 540.1 1.34 9 0.0154 + G 51 551.2 0.43 3 0.0050 + G 52 565.5 0.0011 0 + G 53 566.3 0.17 9 0.0021 + G 54 576.8 0.36 3 0.0044 + G 55 584.6 0.37 5 0.0046 + G 56 594.6 0.58 7 0.0073 + G 57 607.2 0.65 5 0.0084 + G 58 625.6 0.29 4 0.0039 + G 59 630.8 0.30 6 0.0040 + G 60 644.4 0.24 6 0.0033 + G 61 681.8 0.76 6 0.0110 + G 62 697.3 5.9 3 0.0876 + G 63 709.1 0.72 4 0.0109 + G 64 723.0 0.49 4 0.0075 + G 65 810.0 16.0 4 0.276 + G 66 816.3 1.10 7 0.0191 + G 68 900.7 28.8 7 0.553 + G 69 912.0 14.7 4 0.286 + G 70 929.1 3.15 11 0.0623 + G 72 967.5 0.19 4 0.0039 + G 73 970.6 0.10 3 0.0021 + G 74 1003. 5.26 12 0.112 + G 75 1019. 0.17 10 0.0037 + G 76 1022. 1.48 6 0.0322 + G 78 1041. 0.38 5 0.0084 + G 79 1081. 1.14 3 0.0262 + G 80 1094. 63.6 13 1.48 + G 81 1113. 1.88 9 0.0446 + G 82 1116. 0.20 4 0.0048 + G 84 1166. 0.14 3 0.0035 + G 85 1184. 0.49 3 0.0124 + G 86 1206. 0.022 0.0006 + G 87 1289. 0.150 20 0.0041 + G 88 1322. 0.15 3 0.0042 + G 89 1348. 0.0045 0.0001 + G 90 1387. 0.800 10 0.0236 + G 92 1397. 0.34 5 0.0101 + G 93 1403. 0.61 5 0.0182 + G 94 1441. 0.06 5 0.0018 + G 95 1466. 0.66 4 0.0206 + G 96 1470. 0.60 3 0.0188 + G 97 1489. 1.10 4 0.0349 + G 98 1530. 0.14 3 0.0046 + G 99 1543. 0.96 5 0.0315 + G 100 1580. 0.200 20 0.0067 + G 101 1584. 2.53 13 0.0854 + G 102 1603. 0.29 3 0.0099 + G 103 1609. 0.100 10 0.0034 + G 104 1622. 2.13 8 0.0736 + G 105 1666. 0.17 7 0.0060 + G 106 1670. 0.55 7 0.0196 + G 107 1724. 0.430 20 0.0158 + G 108 1813. 0.180 10 0.0070 + G 109 1915. 0.58 3 0.0237 + G 110 1931. 0.040 10 0.0016 + G 111 1994. 0.160 20 0.0068 + G 112 2025. 0.050 20 0.0022 + G 113 2083. 0.30 6 0.0133 + G 114 2096. 0.11 3 0.0049 + MAXIMUM G+/- INTENSITY = 0.14% +0 + + + + + 242AM IT DECAY (141 Y 2) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + G 1 48.63 5 99.50 20 0.103 +0 + + + + + 126I EC DECAY (13.02 D 7) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + AUGER-L 3.190 46. 5 0.0031 + AUGER-K 22.70 5.9 7 0.0029 + CE- K - 1 634.517 12 0.108 12 0.0015 + + B+ 1 MAX 468. 5 + AVG 216.8 22 0.203 23 0.0009 + B+ 2 MAX 1134. 5 + AVG 530.2 22 0.96 17 0.0108 + TOTAL B+ + AVG 475.4 25 1.16 17 0.0117 + + X-RAY L 3.770 4.3 5 0.0003 + X-RAY KA2 27.20170 20 11.9 13 0.0069 + X-RAY KA1 27.47230 20 22.1 24 0.0130 + X-RAY KB 31.00 7.7 9 0.0051 + G 1 666.331 12 33.1 25 0.470 + G 3 753.819 13 4.2 4 0.0669 + G 5 1379. 0.00238 24 0 + G 6 1420.19 3 0.295 23 0.0089 + G 7 2045.09 5 0.0046 5 0.0002 + MAXIMUM G+/- INTENSITY = 2.32% +0 + + + + + 126I B- DECAY (13.02 D 7) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + AUGER-L 3.430 0.53 7 0 + AUGER-K 24.60 0.062 9 0 + CE- K - 1 354.072 11 0.53 8 0.0040 + CE- L - 1 383.180 11 0.083 10 0.0007 + CE- M - 1 387.491 11 0.017 7 0.0001 + CE-NOP- 1 388.425 11 0.004 7 0 + CE- K - 2 456.682 11 0.0227 20 0.0002 + CE- L - 2 485.790 11 0.0033 6 0 + + B- 1 MAX 371. 5 + AVG 108.9 17 3.6 3 0.0084 + B- 2 MAX 862. 5 + AVG 289.7 20 32.1 3 0.198 + B- 3 MAX 1251. 5 + AVG 458.6 21 8.0 3 0.0781 + TOTAL B- + AVG 305.6 22 43.7 6 0.284 + + X-RAY L 4.110 0.057 8 0 + X-RAY KA2 29.4580 10 0.140 21 0 + X-RAY KA1 29.7790 10 0.26 4 0.0002 + X-RAY KB 33.60 0.093 14 0 + G 1 388.633 11 34. 3 0.282 + G 2 491.243 11 2.85 22 0.0298 + G 3 879.876 13 0.75 6 0.0141 +0 + + + + + 57CR B- DECAY (21.1 S 10) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + AUGER-L 0.6100 0.6 3 0 + AUGER-K 5.190 0.25 13 0 + CE- K - 1 76.86 20 0.37 19 0.0006 + CE- L - 1 82.63 20 0.036 19 0 + + B- 1 MAX 2097.6 3 + AVG 860.0 2.5 3 0.0458 + B- 2 MAX 2306.5 5 + AVG 960.0 1.7 8 0.0348 + B- 3 MAX 2459.2 4 + AVG 1030. 0.24 21 0.0053 + B- 4 MAX 2566.9 6 + AVG 1080. 0.43 22 0.0099 + B- 5 MAX 2613.9 4 + AVG 1110. 2.6 14 0.0615 + B- 6 MAX 2652.8 9 + AVG 1120. 0.22 13 0.0052 + B- 7 MAX 2964.2 4 + AVG 1270. 7. 4 0.189 + B- 8 MAX 3074.1 6 + AVG 1330. 0.21 13 0.0059 + B- 9 MAX 3264.84 25 + AVG 1420. 6. 3 0.181 + B- 10 MAX 3306.91 21 + AVG 1440. 0.8 5 0.0245 + B- 11 MAX 3424.7 4 + AVG 1490. 0.4 3 0.0127 + B- 12 MAX 3743.77 23 + AVG 1650. 2.1 11 0.0738 + B- 13 MAX 3949.46 23 + AVG 1750. 2.6 22 0.0969 + B- 14 MAX 4716.16 17 + AVG 2120. 0.3 4 0.0158 + B- 15 MAX 4800. + AVG 2160. 74. 12 3.40 + TOTAL B- + AVG 1934. 101. 14 4.17 + + X-RAY L 0.6400 0.0027 14 0 + X-RAY KA2 5.88765 3 0.035 18 0 + X-RAY KA1 5.89875 3 0.07 4 0 + X-RAY KB 6.490 0.014 8 0 + G 1 83.40 20 8. 5 0.0145 + G 2 205.8 3 2.9 14 0.0126 + G 3 342.9 5 0.5 3 0.0035 + G 4 479.1 5 0.18 12 0.0019 + G 5 684.1 5 0.5 4 0.0078 + G 6 766.5 5 0.34 18 0.0056 + G 7 850.2 6 8. 5 0.145 + G 8 1055.8 3 0.8 4 0.0187 + G 9 1129.9 3 1.4 7 0.0333 + G 10 1209.2 3 0.6 3 0.0148 + G 11 1292.2 5 0.7 4 0.0205 + G 12 1327.3 3 0.32 23 0.0089 + G 13 1335.7 5 1.2 8 0.0334 + G 14 1409.3 3 0.9 5 0.0276 + G 15 1492.7 3 0.9 5 0.0300 + G 16 1535.0 3 4.8 23 0.158 + G 17 1642.2 5 0.21 13 0.0075 + G 18 1752.1 5 5.1 24 0.190 + G 19 1835.2 6 1.4 7 0.0534 + G 20 1852.0 4 1.2 6 0.0463 + G 21 2063.5 8 0.22 13 0.0096 + G 22 2257.2 9 0.24 21 0.0115 + G 23 2410.0 7 0.9 5 0.0442 + G 24 2493.1 7 0.8 4 0.0422 + G 25 2618.3 8 0.44 25 0.0245 +0 + + + + + 57CO EC DECAY (271.80 D 5) I(MIN)=0.0010% +0Radiation Energy Intensity (G-Rad + Type (keV) (%) uCi-h) + ---------- --------------- ------------ -------- + + AUGER-L 0.6700 251.7 20 0.0036 + AUGER-K 5.620 105.1 9 0.0126 + CE- K - 2 114.9494 10 1.84 15 0.0045 + CE- L - 2 121.2153 5 0.193 20 0.0005 + CE-MNO- 2 121.9685 10 0.032 5 0 + CE- K - 3 129.3623 11 1.26 15 0.0035 + + X-RAY L 0.7000 1.52 16 0 + X-RAY KA2 6.39084 3 17.23 15 0.0023 + X-RAY KA1 6.40384 3 33.7 3 0.0046 + X-RAY KB 7.060 6.97 6 0.0010 + G 1 14.41300 15 9.68 25 0.0030 + G 2 122.0614 3 85.9 12 0.223 + G 3 136.4743 5 10.33 10 0.0300 + G 5 339.69 21 0.0025 4 0 + G 6 352.33 21 0.001932 0 + G 8 570.09 20 0.0137 9 0.0002 + G 9 692.41 7 0.162 5 0.0024 + G 10 706.54 22 0.0048 6 0 +1 Work on the program RADLST sponsored by the Division + of Basic Energy Sciences, US Department of Energy, under con- + tract No. DE-AC02-76CH00016 with Associated Universities, Inc. +0 Neither the Associated Universities, Inc., nor the + US Department of Energy make any warranty or assume any legal + responsibility for the results produced by the program. + diff --git a/tests/ensdf_processing/radlst/ref_mednew.dat b/tests/ensdf_processing/radlst/ref_mednew.dat new file mode 100644 index 0000000000..b9e653e2f6 --- /dev/null +++ b/tests/ensdf_processing/radlst/ref_mednew.dat @@ -0,0 +1,207 @@ + 1 M + 1 2 M + 2 M + 2 2 M + 3 M + 3 2 M + 4 M + 4 2 M + 5 M 0.0010 3 0.0 0.1880 4 + 5 2 M 0.17 0.1 + 6 M 0.0020 4 0.0 0.2838 4 + 6 2 M 0.26 0.2 + 7 M 0.0035 9 0.0 0.4016 4 + 7 2 M 0.38 0.3 + 8 M 0.005812 0.0 0.5320 4 0.0237 4 + 8 2 M 0.52 0.5249 7 0.5 + 9 M 0.009018 0.0 0.6854 4 0.031 1 + 9 2 M 0.66 0.6768 8 0.6 + 10 M 0.0152 8 0.0 1.985 6 0.8669 3 0.045 1 + 10 2 M 0.5028 25 0.82 0.8486 2 0.8486 2 0.86 + 11 M 0.0213 9 0.0 1.962 6 1.0721 4 0.0633 4 + 11 2 M 0.0084 25 0.5029 25 0.99 1.0410 3 1.0410 3 1.07 + 12 M 0.0291 9 0.0 1.938 6 1.3050 4 0.0894 4 + 12 2 M 0.017 4 0.5031 25 1.18 1.2536 4 1.2536 4 1.30 + 13 M 0.0387 120.0010 5 1.921 6 1.5596 4 0.1177 4 + 13 2 M 0.021 3 0.5033 25 1.39 1.48670 2 1.48627 2 1.56 + 14 M 0.0504 130.0011 6 1.895 7 1.8389 4 0.1487 4 + 14 2 M 0.029 3 0.5037 25 1.61 1.73998 3 1.73938 3 1.84 + 15 M 0.0642 160.0012 6 1.857 7 2.1455 4 0.1893 4 + 15 2 M 0.043 4 0.5048 25 1.85 2.0137 3 2.0127 3 2.14 + 16 M 0.0804 190.0013 6 1.807 7 2.4720 4 0.2292 4 + 16 2 M 0.062 4 0.5053 25 2.11 2.30784 4 2.30664 4 2.47 + 17 M 0.0989 240.0014 5 1.751 6 2.8224 3 0.2702 4 0.0175 4 + 17 2 M 0.086 4 0.5056 25 2.38 2.62239 6 2.62078 6 2.82 + 18 M 0.1199 280.0015 5 1.697 6 3.2029 3 0.320 1 0.0253 4 + 18 2 M 0.1079 30 0.5049 25 2.66 2.95770 3 2.95563 3 3.19 + 19 M 0.143 4 0.0016 5 1.654 6 3.6074 4 0.3771 4 0.0339 4 + 19 2 M 0.1225 24 0.5055 25 2.97 3.3138 2 3.3111 3 3.59 + 20 M 0.169 4 0.0018 6 1.621 6 4.0381 4 0.4378 4 0.0437 4 + 20 2 M 0.1296 23 0.5061 25 3.30 0.31 3.69168 4 3.68809 4 4.01 0.34 + 21 M 0.196 5 0.0020 7 1.594 5 4.4928 4 0.5004 4 0.0538 4 + 21 2 M 0.1319 21 0.5069 25 3.64 0.37 4.0906 2 4.0861 2 4.46 0.40 + 22 M 0.226 5 0.0021 7 1.567 5 4.9664 4 0.5637 4 0.0603 4 + 22 2 M 0.1325 18 0.5076 25 4.00 0.42 4.51084 4 4.50486 4 4.93 0.45 + 23 M 0.256 5 0.0023 8 1.538 5 5.4651 3 0.6282 4 0.0665 4 + 23 2 M 0.1334 16 0.5083 25 4.38 0.47 4.95220 4 4.94464 4 5.43 0.51 + 24 M 0.289 5 0.0026 9 1.508 5 5.9892 3 0.6946 4 0.0741 4 + 24 2 M 0.1346 14 0.5091 25 4.78 0.54 5.41472 5 5.40551 5 5.95 0.57 + 25 M 0.321 5 0.0047 7 1.478 4 6.5390 4 0.7690 4 0.0839 5 + 25 2 M 0.1359 14 0.5099 25 5.19 0.61 5.89875 3 5.88765 3 6.49 0.64 + 26 M 0.355 4 0.0060 6 1.447 4 7.1120 9 0.8461 4 0.0929 9 + 26 2 M 0.1368 14 0.5107 25 5.62 0.67 6.40384 3 6.39084 3 7.06 0.70 + 27 M 0.388 4 0.0072 5 1.418 4 7.7089 3 0.9256 4 0.1007 4 + 27 2 M 0.1372 14 0.5116 25 6.07 0.75 6.93032 4 6.91530 4 7.65 0.78 + 28 M 0.421 4 0.0084 4 1.388 4 8.3328 4 1.0081 4 0.1118 6 + 28 2 M 0.1378 14 0.5124 25 6.54 0.84 7.47815 4 7.46089 4 8.26 0.85 + 29 M 0.454 4 0.0097 4 1.357 4 8.9789 4 1.0966 4 0.1198 6 + 29 2 M 0.1391 14 0.5133 25 7.03 0.92 8.04778 1 8.02783 1 8.91 0.93 + 30 M 0.486 4 0.0108 4 1.326 4 9.6586 6 1.1936 9 0.1359 11 + 30 2 M 0.1417 12 0.5142 25 7.53 0.99 8.63886 5 8.61578 5 9.57 1.01 + 31 M 0.517 4 0.0123 4 1.295 4 10.3671 5 1.2977 11 0.1581 5 + 31 2 M 0.1457 12 0.5146 25 8.04 1.10 9.25174 7 9.22482 7 10.3 1.10 + 32 M 0.546 4 0.0140 4 1.263 4 11.103 7 1.4143 7 0.1800 8 + 32 2 M 0.1509 12 0.5149 25 8.56 1.19 9.88642 7 9.85532 7 11.0 1.19 + 33 M 0.575 4 0.0155 5 1.232 4 11.8667 7 1.5265 8 0.2035 7 + 33 2 M 0.1566 13 0.5153 25 9.11 1.24 10.5437 1 10.5080 1 11.7 1.28 + 34 M 0.602 4 0.0175 5 1.203 4 12.6578 7 1.6539 35 0.2315 7 + 34 2 M 0.1626 13 0.5158 25 9.67 1.32 11.2224 2 11.1814 2 12.5 1.38 + 35 M 0.628 4 0.0194 5 1.175 4 13.4737 4 1.7820 4 0.2565 4 0.0273 5 + 35 2 M 0.1683 14 0.5181 25 10.2 1.41 11.9242 2 11.8776 2 13.3 1.48 + 36 M 0.652 4 0.0215 6 1.149 4 14.3256 8 1.9210 6 0.288 1 0.0240 8 + 36 2 M 0.1737 14 0.5186 25 10.8 1.50 12.649 2 12.598 2 14.1 1.59 + 37 M 0.674 4 0.0237 6 1.125 4 15.1997 3 2.0651 3 0.3221 3 0.0293 3 + 37 2 M 0.1788 15 0.5195 25 11.4 1.68 13.3953 2 13.3358 2 15.0 1.69 + 38 M 0.696 4 0.0262 7 1.102 4 16.1046 3 2.2163 3 0.3575 3 0.0377 3 + 38 2 M 0.1835 15 0.5205 25 12.1 1.79 14.1650 2 14.0979 2 15.8 1.81 + 39 M 0.716 4 0.0289 7 1.081 4 17.0384 3 2.3725 3 0.3936 3 0.0454 3 + 39 2 M 0.1878 16 0.5215 25 12.7 1.91 14.9584 2 14.8829 2 16.7 1.92 + 40 M 0.734 4 0.0317 8 1.062 4 17.9976 4 2.5316 3 0.4303 3 0.0513 3 + 40 2 M 0.1918 16 0.5225 25 13.4 2.02 15.7751 2 15.6909 2 17.7 2.04 + 41 M 0.751 4 0.0347 9 1.045 4 18.9856 4 2.6977 3 0.4684 3 0.0581 3 + 41 2 M 0.1953 16 0.5236 25 14.0 2.15 16.6151 2 16.5210 2 18.6 2.17 + 42 M 0.767 4 0.0381 9 1.029 4 19.9995 3 2.8655 3 0.5046 3 0.0618 3 + 42 2 M 0.1986 16 0.5247 25 14.8 2.27 17.4793 1 17.3743 14 19.6 2.29 + 43 M 0.782 4 0.0415 101.014 4 21.0440 7 3.0425 4 0.544 1 0.068 2 + 43 2 M 0.2017 17 0.5259 25 15.5 2.17 18.3671 8 18.2508 8 20.6 2.42 + 44 M 0.796 4 0.0453 111.000 4 22.1172 3 3.2240 3 0.5850 3 0.0749 3 + 44 2 M 0.2045 17 0.5270 25 16.2 2.53 19.2792 2 19.1504 2 21.7 2.56 + 45 M 0.809 4 0.0494 120.987 4 23.2199 3 3.4119 3 0.6271 3 0.0810 3 + 45 2 M 0.2072 17 0.5282 25 17.0 2.39 20.2161 2 20.0737 2 22.7 2.70 + 46 M 0.820 4 0.0536 130.975 4 24.3503 3 3.6043 3 0.6699 3 0.0864 3 + 46 2 M 0.2099 17 0.5293 25 17.7 2.50 21.1771 2 21.0201 2 23.8 2.84 + 47 M 0.831 4 0.0583 140.964 4 25.5140 3 3.8058 3 0.7175 3 0.0952 3 + 47 2 M 0.2125 17 0.5305 25 18.5 2.61 22.1629 1 21.9903 3 24.9 2.98 + 48 M 0.842 4 0.0632 160.953 4 26.7112 3 4.0180 3 0.7702 3 0.1076 3 + 48 2 M 0.2151 18 0.5317 25 19.3 2.72 23.1736 2 22.9841 2 26.1 3.13 + 49 M 0.851 4 0.0684 200.944 4 27.9399 3 4.2375 3 0.8256 3 0.1219 3 + 49 2 M 0.2178 18 0.5330 25 20.1 2.84 24.2097 2 24.0020 2 27.3 3.29 + 50 M 0.860 4 0.0740 250.934 4 29.2001 4 4.4647 3 0.8838 3 0.1365 4 + 50 2 M 0.2206 18 0.5343 25 21.0 2.95 25.2713 2 25.0440 2 28.5 3.44 + 51 M 0.868 4 0.0796 300.925 4 30.4912 3 4.6983 3 0.9437 3 0.1520 3 + 51 2 M 0.2236 23 0.5356 25 21.8 3.07 26.3591 2 26.1108 2 29.7 3.60 + 52 M 0.875 4 0.0862 350.917 4 31.8138 3 4.9392 3 1.0060 3 0.1683 3 + 52 2 M 0.2266 23 0.5370 25 22.7 3.19 27.4723 2 27.2017 2 31.0 3.77 + 53 M 0.882 4 0.092 4 0.909 4 33.1694 4 5.1881 3 1.0721 3 0.1864 3 + 53 2 M 0.2296 23 0.5384 25 23.6 3.31 28.6120 3 28.3172 4 32.3 3.94 + 54 M 0.888 5 0.097 5 0.902 4 34.5614 11 5.4528 4 1.142 1 0.208 1 + 54 2 M 0.2327 24 0.5398 25 24.6 3.43 29.779 1 29.458 1 33.6 4.11 + 55 M 0.894 4 0.104 5 0.895 4 35.9846 4 5.7143 4 1.2171 4 0.2308 4 + 55 2 M 0.2358 24 0.5413 25 25.5 3.55 30.9728 3 30.6251 3 35.0 4.29 + 56 M 0.900 4 0.110 5 0.888 4 37.4406 4 5.9888 4 1.2928 4 0.2530 5 + 56 2 M 0.2387 24 0.5428 25 26.4 3.67 32.1936 3 31.8171 3 36.4 4.47 + 57 M 0.905 4 0.117 5 0.882 4 38.9246 4 6.2663 5 1.3613 3 0.2704 8 + 57 2 M 0.2416 25 0.5444 25 27.4 3.80 33.4418 2 33.0341 2 37.8 4.65 + 58 M 0.910 4 0.125 5 0.876 4 40.4430 4 6.5488 5 1.4346 6 0.2896 7 + 58 2 M 0.2443 25 0.5460 25 28.4 3.94 34.7197 2 34.2789 2 39.3 4.84 + 59 M 0.914 4 0.132 5 0.871 4 41.9906 5 6.8348 5 1.5110 8 0.3045 9 + 59 2 M 0.2469 25 0.5476 25 29.4 4.08 36.0263 2 35.5502 2 40.7 5.03 + 60 M 0.918 4 0.140 6 0.866 4 43.5689 4 7.1260 4 1.5753 7 0.3152 8 + 60 2 M 0.2492 25 0.5491 25 30.5 4.23 37.3610 3 36.8474 3 42.3 5.23 + 61 M 0.922 4 0.148 6 0.861 4 45.1840 7 7.4279 8 1.649 5 0.330 5 + 61 2 M 0.2513 26 0.5508 25 31.5 4.38 38.7247 5 38.1712 5 43.8 5.43 + 62 M 0.926 4 0.158 6 0.857 4 46.8342 5 7.7368 5 1.7228 8 0.3457 9 + 62 2 M 0.2533 26 0.5525 25 32.6 4.53 40.1181 3 39.5224 3 45.4 5.64 + 63 M 0.929 4 0.168 7 0.853 4 48.5190 4 8.0520 4 1.8000 5 0.3602 7 + 63 2 M 0.2550 26 0.5542 25 33.7 4.69 41.5422 3 40.9019 3 47.0 5.85 + 64 M 0.932 4 0.176 6 0.850 4 50.2391 5 8.3756 5 1.8808 5 0.3758 7 + 64 2 M 0.2566 26 0.5559 25 34.9 4.84 42.9962 3 42.3089 3 48.7 6.06 + 65 M 0.935 4 0.186 8 0.847 4 51.9957 5 8.7080 5 1.9675 6 0.3979 8 + 65 2 M 0.2581 26 0.5577 25 36.0 5.00 44.4816 3 43.7441 3 50.4 6.27 + 66 M 0.938 4 0.196 8 0.844 4 53.7885 5 9.0458 5 2.0468 4 0.4163 5 + 66 2 M 0.2594 26 0.5596 25 37.2 5.16 45.9984 4 45.2078 4 52.1 6.50 + 67 M 0.940 4 0.206 8 0.841 4 55.6177 5 9.3942 4 2.1283 6 0.4357 8 + 67 2 M 0.2607 27 0.5615 25 38.4 5.33 47.5467 4 46.6997 4 53.9 6.72 + 68 M 0.942 4 0.216 9 0.838 4 57.4855 5 9.7513 4 2.2065 6 0.4491 10 + 68 2 M 0.2619 27 0.5634 25 39.7 5.50 49.1277 4 48.2211 4 55.7 6.95 + 69 M 0.945 4 0.227 9 0.836 4 59.3896 5 10.1157 4 2.3068 7 0.4717 9 + 69 2 M 0.2630 27 0.5664 25 40.9 5.67 50.7416 4 49.7726 4 57.5 7.18 + 70 M 0.947 4 0.238 10 0.833 4 61.3323 5 10.4864 4 2.3981 4 0.4872 6 + 70 2 M 0.2641 27 0.5673 25 42.2 5.84 52.3889 5 51.3540 5 59.4 7.42 + 71 M 0.949 4 0.248 10 0.831 4 63.3138 5 10.8704 4 2.4912 5 0.5062 6 + 71 2 M 0.265 4 0.5694 25 43.5 6.02 54.0698 5 52.9650 5 61.3 7.66 + 72 M 0.951 4 0.260 10 0.829 4 65.3508 6 11.2707 4 2.6009 4 0.5381 4 + 72 2 M 0.266 4 0.5714 25 44.8 6.18 55.7902 8 54.6114 8 63.2 7.90 + 73 M 0.952 4 0.272 11 0.827 4 67.4164 6 11.6815 3 2.7080 4 0.5655 5 + 73 2 M 0.267 4 0.5736 25 46.2 6.35 57.532 1 56.277 1 65.2 8.15 + 74 M 0.954 4 0.283 11 0.825 4 69.5250 3 12.0998 3 2.8196 4 0.5950 4 + 74 2 M 0.268 4 0.5757 25 45.7 6.53 59.3182 1 57.9817 5 67.2 8.40 + 75 M 0.955 4 0.295 12 0.823 4 71.6764 4 12.5267 4 2.9317 4 0.6250 4 + 75 2 M 0.269 4 0.5780 25 47.0 6.70 61.1403 6 59.7179 6 69.3 8.65 + 76 M 0.957 4 0.308 12 0.821 4 73.8708 5 12.9680 4 3.0485 4 0.6543 5 + 76 2 M 0.271 4 0.5803 25 48.3 6.88 63.0005 7 61.4867 7 71.4 8.91 + 77 M 0.958 4 0.319 13 0.819 4 76.1110 5 13.4185 3 3.1737 7 0.6901 4 + 77 2 M 0.272 4 0.5827 25 49.6 7.06 64.8956 7 63.2867 7 73.6 9.18 + 78 M 0.959 4 0.331 13 0.818 4 78.3948 7 13.8799 4 3.2960 9 0.7220 6 + 78 2 M 0.273 4 0.5850 25 51.0 7.24 66.832 2 65.122 2 75.7 9.44 + 79 M 0.960 4 0.343 14 0.816 4 80.7249 5 14.3528 4 3.4249 3 0.7588 4 + 79 2 M 0.274 4 0.5874 25 52.4 7.42 68.8037 8 66.9895 8 78.0 9.71 + 80 M 0.962 4 0.355 14 0.814 4 83.1023 8 14.8393 10 3.5616 11 0.8003 10 + 80 2 M 0.276 4 0.5899 25 53.8 7.60 70.819 2 68.895 2 80.3 9.99 + 81 M 0.963 4 0.367 15 0.813 5 85.5304 6 15.3467 4 3.7041 4 0.8455 5 + 81 2 M 0.277 4 0.5924 25 55.2 7.78 72.8715 9 70.8319 9 82.6 10.3 + 82 M 0.963 4 0.379 15 0.811 5 88.0045 7 15.8608 5 3.8507 5 0.8936 7 + 82 2 M 0.279 4 0.5950 25 56.7 7.97 74.9694 9 72.8042 9 84.9 10.6 + 83 M 0.964 4 0.391 16 0.809 5 90.5259 7 16.3875 4 3.9991 3 0.9382 3 + 83 2 M 0.280 4 0.5977 25 58.2 8.15 77.1079 10 74.8148 10 87.3 10.8 + 84 M 0.965 4 0.403 16 0.807 5 93.1050 38 16.939 10 4.1494 39 0.9953 29 + 84 2 M 0.282 4 0.6005 25 59.7 8.33 79.290 5 76.862 5 89.8 11.1 + 85 M 0.966 4 0.416 17 0.806 5 95.730 8 17.493 29 4.317 5 1.042 5 + 85 2 M 0.284 4 0.6033 25 61.2 8.52 81.52 1 78.95 1 92.3 11.4 + 86 M 0.967 4 0.428 17 0.804 5 98.404 12 18.049 38 4.482 5 1.097 5 + 86 2 M 0.285 4 0.6062 25 62.7 8.71 83.78 2 81.07 2 94.9 11.7 + 87 M 0.967 4 0.440 18 0.802 5 101.137 13 18.639 40 4.652 5 1.153 5 + 87 2 M 0.287 4 0.6092 25 64.3 8.90 86.10 2 83.23 2 97.5 12.0 + 88 M 0.968 4 0.452 18 0.801 5 103.922 8 19.2367 15 4.8220 15 1.2084 16 + 88 2 M 0.289 4 0.6122 25 65.9 9.09 88.47 1 85.43 1 100.1 12.3 + 89 M 0.969 4 0.464 18 0.799 5 106.755 6 19.840 18 5.002 5 1.269 5 + 89 2 M 0.291 4 0.6152 25 67.5 9.28 90.884 6 87.67 1 102.8 12.7 + 90 M 0.969 4 0.476 18 0.797 5 109.6509 9 20.4721 5 5.1823 3 1.3295 4 + 90 2 M 0.294 4 0.6182 25 69.2 9.48 93.350 2 89.953 2 105.6 13.0 + 91 M 0.970 4 0.488 18 0.795 5 112.601424 21.1046 18 5.3669 16 1.3871 18 + 91 2 M 0.296 5 0.6214 25 70.8 9.68 95.868 2 92.287 2 108.4 13.3 + 92 M 0.970 4 0.500 19 0.793 5 115.606116 21.7574 3 5.5480 4 1.4408 4 + 92 2 M 0.298 5 0.6247 25 72.6 9.89 98.439 2 94.665 2 111.3 13.6 + 93 M 0.971 4 0.511 20 0.791 5 118.678 33 22.4268 9 5.7232 36 1.5007 8 + 93 2 M 0.301 5 0.6282 25 74.3 10.1 101.07 4 97.08 4 114.2 13.9 + 94 M 0.971 4 0.521 20 0.790 5 121.818 44 23.0972 16 5.9329 14 1.5586 8 + 94 2 M 0.303 5 0.6317 25 76.0 10.3 103.76 5 99.55 5 117.3 14.3 + 95 M 0.971 4 0.530 22 0.788 5 124.998 25 23.806 17 6.125 12 1.616 20 + 95 2 M 0.306 5 0.6352 25 77.8 10.5 106.49 3 102.05 3 120.3 14.6 + 96 M 0.972 4 0.538 23 0.786 5 128.261 44 24.532 32 6.336 18 1.685 20 + 96 2 M 0.309 6 0.6387 25 79.6 10.7 109.29 5 104.61 5 123.4 15.0 + 97 M 0.972 4 0.546 24 0.784 5 131.583 44 25.270 32 6.545 18 1.750 20 + 97 2 M 0.311 6 0.6424 25 81.5 10.9 112.14 5 107.21 5 126.6 15.3 + 98 M 0.972 4 0.553 25 0.782 6 134.971 44 26.019 32 6.755 18 1.810 20 + 98 2 M 0.314 7 0.6462 25 83.3 11.2 115.07 5 109.87 5 129.8 15.7 + 99 M 0.973 4 0.560 26 0.780 6 138.429 44 26.793 32 6.975 18 1.878 20 + 99 2 M 0.317 8 0.6500 25 85.2 11.4 118.05 5 112.57 5 133.2 16.0 +100 M 0.973 4 0.567 27 0.778 7 141.968 34 27.590 25 7.206 12 1.954 20 +100 2 M 0.321 9 0.6538 25 87.5 11.6 121.10 4 115.32 4 136.6 16.4 +101 M 0.99 2 0.74 10 0.78 3 145.571 62 28.400 44 7.433 20 2.019 20 +101 2 M +102 M 0.99 2 0.76 10 0.78 3 149.256 62 29.234 44 7.670 20 2.092 20 +102 2 M +103 M 0.99 2 0.78 10 0.78 3 153.023 62 30.098 44 7.921 20 2.174 20 +103 2 M +-1 diff --git a/tests/ensdf_processing/radlst/ref_radlst.inp b/tests/ensdf_processing/radlst/ref_radlst.inp new file mode 100644 index 0000000000..c417a976c1 --- /dev/null +++ b/tests/ensdf_processing/radlst/ref_radlst.inp @@ -0,0 +1,697 @@ +205TL 205HG B- DECAY 1971HI01 78NDS 197803 +205HG P 0 1/2- 5.2 M 1 1538 8 +205TL N 0.022 10 1 +205TL L 0 1/2+ +205TL B 96 2 5.27115 +205TL2 B EAV= 542 4$ +205TL CB E some approximate measurements listed in 1971SC35 +205TL L 203.7 3/2+ 1.46 NS 8 +205TL CL T 1971SH35, 1967MA45 +205TL G 203.74 3 100 M1+E2 +1.56 15 0.440 +205TL CG E from 1972BA53 +205TL CG MR from COUL. EX. (1973KR02) +205TL CG CC from 1973KR02 +205TL B 3.1 13 6.5 2 +205TL2 B EAV= 460 4$ +205TL CB IB estimated by 1971HI01 to be 3.7% 15 based on ratios of +205TL2CB IG(203.7) to 197HG,203HG IG's and CC(203.7)=0.62; IB=3.1% if CC is +205TL3CB reduced to 0.44 +205TL L 619.3 5/2+ +205TL B 0.016 7 8.6920 1U +205TL2 B EAV= 299 3$ +205TL G 415.6 3 0.59 8 (M1) 0.1691 +205TL G 618.6 7 0.090 20 +205TL CG RI(618.6)/RI(415.6) is AP twice as large as in COUL. EX. +205TL2CG and (N,N'G) +205TL L 1140.9 (3/2)+ +205TL B 0.0030 16 7.7424 +205TL2 B EAV= 115 3$ +205TL G 937.2 6 0.093 20 +205TL G 1141.1 15 0.045 20 +205TL L 1218.7 1/2+ +205TL B 0.007 4 7.1 3 +205TL2 B EAV= 90.0 25$ +205TL G 1014.7 8 0.031 10 +205TL G 1218.7 4 0.28 5 +205TL L 1340.3 (3/2)+ +205TL B 0.006 3 6.4723 +205TL2 B EAV= 53.4 24$ +205TL G 720.8 8 0.051 15 +205TL G 1136.8 6 0.21 5 +205TL G 1340.3 8 0.015 5 +205TL L 1433.9 (1/2,3/2) +205TL B 0.0049 25 5.6925 +205TL2 B EAV= 27.1 22$ +205TL G 1230.8 10 0.023 10 +205TL G 1433.9 5 0.20 5 + +205TL 205HG B- DECAY 1971HI01 78NDS 197803 +205HG P 0 1/2- 5.2 M 1 1538 8 +205TL N 0.022 10 1 +205TL L 0 1/2+ +205TL B 96 2 5.27115 +205TL2 B EAV= 542 4$ +205TL CB E some approximate measurements listed in 1971SC35 +205TL L 203.7 3/2+ 1.46 NS 8 +205TL CL T 1971SH35, 1967MA45 +205TL G 203.74 3 100 M1+E2 +1.56 15 0.440 +205TL CG E from 1972BA53 +205TL CG MR from COUL. EX. (1973KR02) +205TL CG CC from 1973KR02 +205TL B 3.1 13 6.5 2 +205TL2 B EAV= 460 4$ +205TL CB IB estimated by 1971HI01 to be 3.7% 15 based on ratios of +205TL2CB IG(203.7) to 197HG,203HG IG's and CC(203.7)=0.62; IB=3.1% if CC is +205TL3CB reduced to 0.44 +205TL L 619.3 5/2+ +205TL B 0.016 7 8.6920 1U +205TL2 B EAV= 299 3$ +205TL G 415.6 3 0.59 8 (M1) 0.1691 +205TL G 618.6 7 0.090 20 +205TL CG RI(618.6)/RI(415.6) is AP twice as large as in COUL. EX. +205TL2CG and (N,N'G) +205TL L 1140.9 (3/2)+ +205TL B 0.0030 16 7.7424 +205TL2 B EAV= 115 3$ +205TL G 937.2 6 0.093 20 +205TL G 1141.1 15 0.045 20 +205TL L 1218.7 1/2+ +205TL B 0.007 4 7.1 3 +205TL2 B EAV= 90.0 25$ +205TL G 1014.7 8 0.031 10 +205TL G 1218.7 4 0.28 5 +205TL L 1340.3 (3/2)+ +205TL B 0.006 3 6.4723 +205TL2 B EAV= 53.4 24$ +205TL G 720.8 8 0.051 15 +205TL G 1136.8 6 0.21 5 +205TL G 1340.3 8 0.015 5 +205TL L 1433.9 (1/2,3/2) +205TL B 0.0049 25 5.6925 +205TL2 B EAV= 27.1 22$ +205TL G 1230.8 10 0.023 10 +205TL G 1433.9 5 0.20 5 + +248CM 252CF A DECAY 1955AS42,1970BA18,1971WA2881NDS 198105 +248CM C 1964AS10 +248CM N 1.0 0.96908 8 +252CF P 0.0 0+ 2.638 Y 10 6217.1 5 +248CM C XL=7.8% 4 (1971WA28) +248CM CA E From 1970BA18 and corrected according to 1971BB10 +248CM CA IA Average of 1955AS42,1970BA18 +248CM CA Limits on other A's, G's given by 1963LE17,1963BJ03 +248CM L 0 0+ +248CM A 6118.3 5 84.2 3 1.0 +248CM L 43.40 2+ 126 PS 10 +248CM CL T from 1970TO08 +248CM A 6075.7 5 15.7 3 3.24 6 +248CM G 43.399 25 0.0153 9 E2 1014 +248CM2 G LC= 739 $MC= 207.2 $ +248CM CG CC ECC=1013 70 if I(A)=15.5% 1971WA28 +248CM L 144 4+ +248CM A 5976.6 0.24 4 65 +248CM G 100.2 0.013 AP (E2) 19.00 +248CM2 G LC= 13.63 $MC= 3.85 $NC+= 1.516 $ +248CM L 297 6+ +248CM A 5826.3 0.002 AP1200 AP +248CM G 160 15 0.002 (E2) 2.447 +248CM2 G KC= 0.1773 $LC= 1.631 $MC= 0.460 $NC+= 0.1791 $ +248CM L 510 8+ +248CM A 5616 6.0E-5 AP2600 AP + +172YB 172LU EC DECAY 75NDS,WBE197812 +172YB N 1.0 1.0 +172LU P 0. (4-) 6.70 D 3 2500 AP +172YB Q -2500. AP 8023.6 28 7337.930 +172YB L 0. 0+ +172YB L 78.67 2+ +172YB G 78.67 E2 8.40 99.2 42 +172YB2 G KC= 1.575 $LC= 5.19 $MC= 1.277 $N+= 0.351 $ +172YB L 260.14 4+ +172YB E 2220 AP 0.070 1.50 9.42 +172YB2 E EAV= 557.17 $CK= 0.7914 $CL= 0.12611 $CM+= 0.03803 $ +172YB G 181.47 E2 0.377 27.4 14 +172YB2 G KC= 0.2194 $LC= 0.1203 $MC= 0.0290 $N+=0.00791 $ +172YB L 539.84 6+ +172YB G 279.70 E2 0.0922 1.2 1 +172YB2 G KC= 0.0644 $LC=0.02133 $MC=0.00506 $N+=0.00145 $ +172YB E 1960. AP 0.3312 11.1016 1U +172YB2 E EAV= 449.65 $CK= 0.8151 $CL= 0.13864 $CM+= 0.04225 $ +172YB L 1042.8 0+ +172YB G 964.1 ? +172YB L 1117.8 2+ +172YB G 857.54 ? +172YB G 1039.07 ? +172YB G 1117.95 ? +172YB L 1172.28 3+ +172YB G 912.05 E2+M1 14.7 4 +172YB G 1093.64 E2+M1 63.6 13 +172YB E 1328. AP 4.322 8.4923 +172YB2 E CK= 0.8232 $CL= 0.13553 $CM+= 0.04108 $ +172YB L 1262.86 4+ +172YB G 90.57 E2+M1 -1.73 6 4.74 30.1 16 +172YB2 G KC= 1.91 4$LC= 2.15 3$MC= 0.526 7$N+= 0.1464 20$ +172YB G 723.03 (E2) 0.49 4 +172YB G 1002.75 E2+M1 5.26 12 +172YB G 1184.29 (E2) 0.49 3 +172YB E 1238. AP 3.417 8.5322 +172YB2 E CK= 0.8224 $CL= 0.13621 $CM+= 0.04132 $ +172YB L 1375.63 (5)+ +172YB G 112.71 E2+M1 4.5 3 +172YB G 203.37 E2 6.04 25 +172YB G 1116.09 0.20 4 +172YB E 1125. AP 1.5 5 8.8015 +172YB2 E CK= 0.8211 $CL= 0.13720 $CM+= 0.04168 $ +172YB L 1466.01 2+ +172YB G 293.61 .0016 AP ? +172YB G 347.8 0.0024 AP ? +172YB G 423.04 .0022 AP ? +172YB G 1205.62 .022 AP ? +172YB G 1387.22 (E2) 0.80 1 +172YB G 1466.12 (E2) 0.66 4 +172YB L 1476.8 +172YB L 1509.99 (6)+ +172YB G 134.48 0.08 1 +172YB G 247.12 0.50 7 +172YB G 970.64 0.10 3 +172YB L 1549.15 (3+) +172YB G 431.29 .0004 AP ? +172YB G 1288.98 (M1) 0.15 2 +172YB G 1470.48 (E2) 0.60 3 +172YB E 951. AP 0.37 6 9.26 7 +172YB2 E CK= 0.8184 $CL= 0.13919 $CM+= 0.04239 $ +172YB L 1609.18 2+ +172YB G 131.8 IF M1 .00056 AP ? +172YB G 142.5 IF M1 .0056 AP ? +172YB G 436.1 .0063 AP ? +172YB G 565.5 .0011 AP ? +172YB G 1348.1 .0045 AP ? +172YB G 1529.72 0.14 3 +172YB G 1609.18 0.10 1 +172YB E 891. AP 0.26 9 9.3515 +172YB2 E CK= 0.8172 $CL= 0.14008 $CM+= 0.04271 $ +172YB L 1640.38 (4,5)- +172YB G 264.76 (E1+M2) 0.65 9 +172YB G 377.52 E1+M2 3.18 10 +172YB E 860. AP 2.1 2 8.41 5 +172YB2 E CK= 0.8165 $CL= 0.14059 $CM+= 0.04290 $ +172YB L 1657.91 (4+) +172YB G 1397.29 0.34 5 +172YB G 1579.70 0.20 2 +172YB E 843. AP 0.15 8 9.5424 +172YB2 E CK= 0.8161 $CL= 0.14090 $CM+= 0.04301 $ +172YB L 1662.77 3(+) +172YB G 197.02 0.005 AP ? +172YB G 399.75 0.54 3 +172YB G 490.41 (M1) 2.00 13 +172YB G 1402.87 (E2) 0.61 5 +172YB G 1584.18 (E2) 2.53 13 +172YB E 838. AP 3.6 2 8.15025 +172YB2 E CK= 0.8160 $CL= 0.14098 $CM+= 0.04304 $ +172YB L 1700.57 (3+) +172YB G 151.09 IF M1 0.09 3 +172YB G 437.55 (M1) 0.24 2 +172YB G 528.23 (M1) 4.01 12 +172YB G 1440.52 (E2) 0.06 5 +172YB G 1622.01 2.13 8 +172YB E 800. AP 3.8 3 8.08 4 +172YB2 E CK= 0.8150 $CL= 0.14170 $CM+= 0.04330 $ +172YB L 1706.22 (5,6)- +172YB G 196.36 IF E1 0.12 1 +172YB G 330.44 E1+M2 0.62 7 +172YB G 443.42 0.16 2 +172YB G 1166.46 E1 0.14 3 +172YB E 794. AP 0.72 9 8.80 6 +172YB2 E CK= 0.8148 $CL= 0.14182 $CM+= 0.04334 $ +172YB L 1749.07 (4+) +172YB G 486.17 (M1) 0.74 8 +172YB G 576.78 (M1) 0.36 3 +172YB G 1489.00 (E2) 1.10 4 +172YB G 1670.19 (E2,M1) 0.55 7 +172YB L 1792.27 (5+) +172YB G 134.48 E2+M1 0.08 1 ? +172YB G 416.64 M1+E2 0.08 1 +172YB E 708. AP 0.03 2 10.1 3 +172YB2 E CK= 0.8121 $CL= 0.14380 $CM+= 0.04406 $ +172YB L 1803.04 (4)+ +172YB G 145.72 (M1) 0.16 4 +172YB G 427.57 (M1+E2) 0.15 2 +172YB G 540.15 M1 1.34 9 +172YB G 630.82 0.30 6 +172YB G 1542.89 (E2) 0.96 5 +172YB G 1724.41 (E2,M1) 0.43 2 +172YB E 697. AP 0.41 19 8.9221 +172YB2 E CK= 0.8117 $CL= 0.14409 $CM+= 0.04416 $ +172YB L 1862.76 (5+) +172YB G 1322.38 (E2) 0.15 3 +172YB G 1602.62 (E2,M1) 0.29 3 +172YB E 638. AP 0.24 9 9.0717 +172YB2 E CK= 0.8093 $CL= 0.14587 $CM+= 0.04481 $ +172YB L 1926.94 (5+) +172YB G 134.48 E2+M1 0.08 1 ? +172YB G 551.19 0.43 3 +172YB G 1387.22 (E2) ? +172YB G 1666.33 0.17 7 +172YB E 573. AP 0.40 8 8.75 9 +172YB2 E CK= 0.8061 $CL= 0.14826 $CM+= 0.04567 $ +172YB L 2073.00 (4+) +172YB G 210.22 IF M1 0.09 2 +172YB G 270.02 (M1) 2.20 14 +172YB G 323.89 (M1) 1.57 6 +172YB G 366.68 E1 0.32 4 +172YB G 372.51 (M1+E2) 2.77 18 +172YB G 410.31 2.08 7 +172YB G 432.53 (E1+M2) 1.54 9 +172YB G 607.16 0.65 5 +172YB G 697.26 M1 5.90 26 +172YB G 810.05 M1 15.98 38 +172YB G 900.69 M1 28.82 66 +172YB G 1812.89 (E2) 0.18 1 +172YB G 1994.30 0.16 2 +172YB E 427. AP 62.3 9 6.270 7 +172YB2 E CK= 0.7944 $CL= 0.15685 $CM+= 0.04880 $ +172YB L 2174.99 (3+) +172YB G 383.08 0.05 2 +172YB G 566.28 0.17 9 +172YB G 625.60 0.29 4 +172YB G 709.13 (E2+M1) 0.72 4 +172YB G 1914.78 (M1) 0.58 3 +172YB G 2095.71 (E2,M1) 0.11 3 +172YB E 325. AP 1.9 1 7.51123 +172YB2 E CK= 0.7784 $CL= 0.16855 $CM+= 0.05309 $ +172YB L 2181.80 (4,5+) +172YB G 254.82 0.09 1 +172YB G 319.10 (M1) 0.17 2 +172YB G 524.32 (E2+M1) 0.24 5 +172YB E 318. AP 0.50 5 8.07 5 +172YB2 E CK= 0.7768 $CL= 0.16967 $CM+= 0.05350 $ +172YB L 2191.91 (5)+ +172YB G 399.75 0.54 3 +172YB G 681.76 (M1) 0.76 6 +172YB G 816.34 (M1) 1.10 7 +172YB G 929.07 E2+M1 3.15 11 +172YB G 1019.23 0.17 10 +172YB G 1931.22 0.04 1 +172YB E 308. AP 5.2 2 7.01817 +172YB2 E CK= 0.7744 $CL= 0.17144 $CM+= 0.05415 $ +172YB L 2213.29 + +172YB G 512.78 (M1) 0.16 2 +172YB G 1040.91 (M1) 0.38 5 +172YB E 287. AP 0.54 6 7.93 5 +172YB2 E CK= 0.7686 $CL= 0.17571 $CM+= 0.05573 $ +172YB L 2285.20 (4)+ +172YB G 358.48 (M1) 0.12 1 +172YB G 422.97 0.17 2 +172YB G 482.13 (M1) 0.72 5 +172YB G 536.26 (M1) 0.70 4 +172YB G 584.60 0.37 5 +172YB G 644.40 0.24 6 +172YB G 1022.33 M1 1.48 6 +172YB G 1113.20 M1+E2 1.88 9 +172YB G 2024.90 0.05 2 +172YB E 215. AP 5.7 2 6.58716 +172YB2 E CK= 0.7369 $CL= 0.19880 $CM+= 0.06431 $ +172YB L 2343.64 (4,5+) +172YB G 594.56 (M1+E2) 0.58 7 +172YB G 967.50 (M1) 0.19 4 +172YB G 1080.81 (M1) 1.14 3 +172YB G 2082.66 (M1) 0.30 6 +172YB E 156. AP 2.2 1 6.62220 +172YB2 E CK= 0.6764 $CL= 0.24265 $CM+= 0.08090 $ + +242AM 242AM IT DECAY (141 Y) 85NDS 198508 +242AM N 1.0 0.995 2 +242AM L 0.0 1- 16.02 H 2 +242AM L 48.63 5 5- 141 Y 2 M1 +242AM G 48.63 5 E4 100 +242AM CG L1: L2: L3: M1: M2: M3: M4: M5: N1: N2: N3: N45: +242AM2CG O=<6: 17: 18:<2: 13: 10: 8: 10: <2: 6: 4: 8: AP 6. +242AM3CG Uncertainties on relative subshell intensities are AP 30% (1960AS05) +242AM CG E from 1960AS05 (s CE) +242AM CG M from L- and M- subshell ratios. + +126TE 126I EC DECAY 1977JA04 82NDS 198212 +126TE C 1977JA04: 127I(N,2N), COMPTON suppression spectrometer, semi G +126TE C Others: semi G: 1970GA32, 1970SI05, 1971MI20, 1971ZH01, 1972KA20, +126TE2C 1975OK04, 1976GR04; magnetic spectrometer: 1970GA32, 1971ZH01 +126TE C The decay scheme is that proposed by 1977JA04. +126TE2C Evaluators note that the 1396(0+), 1685(0+), 2601(0+) and +126TE3C 2051 states in 126TE in the decay proposed by 1971ZH01 +126TE4C have not been confirmed by 1975OK04, 1976GR04 or 1977JA04 +126TE C See also 126I B- decay +126TE CL J Spin and parity values are those given under adopted levels +126TE CG E From 1977JA04. The evaluators have added 10 EV in +126TE2CG quadrature to the uncertainties of 1977JA04 to account for +126TE3CG the uncertainty in calibration. +126TE CG RI From 1977JA04. +126TE CG I(G+-)/I(666G)=0.0587 18. +126TE N 0.0588 37 0.563 201.0 +126TE CN BR From I(B+)/I(B-)=0.028 1 (1955KO14), I(406B+)/I(1110B+)= +126TE2CN 0.29 1 (1955KO14, uncertainty assigned by evaluators), adopted +126TE3CN IG, EC/B-=1.27 10 (1955KO14, authors' value corrected by +126TE4CN evaluators for KC(137BA)=0.0916 and OMEGA(K) from 1972BB16), adopted +126TE5CN CC and EC/B+(GS)=23.1 5 (1U theory). +126I P 0.0 2- 13.02 D 7 2156 5 +126TE L 0.0 0+ +126TE E 1.7 3 39 7 9.13 8 41 7 1U +126TE2 E EAV= 530.2 22$CK= 0.8177 $CL= 0.11134 $CM+= 0.02952 $ +126TE L 666.34 1 2+ +126TE E 0.36 4 52 4 7.45 4 52 4 +126TE2 E EAV= 216.8 22$CK= 0.8494 $CL= 0.11368 $CM+= 0.03006 $ +126TE CE IB from B+(666 level)/B+(GS)=0.29 1 (1955KO14) +126TE G 666.331 12 1000 21 E2 0.00382 +126TE2 G KC=0.00325 +126TE L 1361.3 3 (4)+ +126TE E 0.0004 LE 12.34GE 0.0004 LE 1U +126TE2 E CK= 0.8383 $CL= 0.12742 13$CM+= 0.03433 4$ +126TE G 695.0 0.007 AP ? +126TE L 1420.17 2 2+ +126TE E 8 7 7.6 4 8 7 +126TE2 E CK= 0.8503 $CL= 0.11826 $CM+= 0.03145 $ +126TE G 753.819 13 125.8 26 (E2) 0.0028 +126TE G 1420.19 3 8.91 19 +126TE L 1873.1 3 0+ +126TE E 0.0008 2 10.1612 0.0008 2 1U +126TE2 E CK= 0.769 3$CL= 0.1799 20$CM+= 0.0512 7$ +126TE G 1206.8 3 0.014 4 +126TE L 2045.1 1 (2+,1) +126TE E 0.012 1 8.59 7 0.012 1 +126TE2 E CK= 0.771 7$CL= 0.179 5$CM+= 0.0505 15$ +126TE G 1378.76 0.072 5 +126TE G 2045.09 5 0.14 1 + +126XE 126I B- DECAY 1977JA04 82NDS 198212 +126XE C 1977JA04: 127I(N,2N), COMPTON suppression spectrometer, semi G +126XE C 1976SA28: 126TE(P,N) MS; GG(THETA,H,T) +126XE C See also 126I EC decay. Branching from 126I EC decay +126XE CG E From 1977JA04. The evaluators have added 10 EV in +126XE2CG quadrature to the uncertainties of 1977JA04 to account for +126XE3CG the uncertainty in calibration. +126XE CL J Spin and parity values are those given under adopted +126XE2CL levels +126XE CG M From GG(THETA) data (1959SA05, 1960AS04, 1971GR14, 1971TA04), +126XE2CG EKC and K/LM (1953MA59, 1955KO14) +126XE CG RI Relative to I(666.331G in 126TE)=1000 (1977JA04) +126XE N 0.0757 43 0.437 201.0 +126XE CN BR See 126I EC decay +126I P 0.0 2- 13.02 D 7 1251 5 +126XE L 0.0 0+ +126XE B 1250 10 18.3 7 10.1117 1U +126XE CB First-forbidden unique shape (1953MA59, 1955KO14) +126XE2 B EAV= 458.6 21$ +126XE L 388.633 11 2+ 41.3 PS 14 +126XE CL T1/2 from (B)(388.663G)(T) (1963DE21), G=0.22 5 +126XE B 865 5 73.4 7 8.20 5 +126XE CB Allowed shape (1955KO14) +126XE2 B EAV= 289.7 20$ +126XE G 388.633 11 1030 21 E2 0.0187 C +126XE2 G KC=0.0156$LC=0.00244$MC=0.00050$NC+=0.00012$ +126XE CG M from GG(THETA); EKC=0.016 2 (1953MA59); K/LM=6.7 10 +126XExCG (1955KO14) +126XE L 879.88 10 2+ +126XE B 385 5 8.3 7 7.89 5 +126XE CB E from BG-coin (1955KO14) +126XE2 B EAV= 108.9 17$ +126XE G 491.243 11 86.1 17M1+E2 +15 4 0.00944 C +126XE2 G KC=0.00798$LC=0.00116$MC=0.00024$ +126XE CG M from GG(THETA); EKC=0.0061 (1971ZH01); K/LM=6.3 10 (1965SA11) +126XE G 879.876 13 22.8 5 + + 57MN 57CR B- DECAY 1978DA04 86NDS 198601 + 57CR P 0 3/2-,5/2-,7/2- 21.1 S 10 4.8E+3 SY + 57MN C Measured G's, B's, 205.8G(T), and GG- and BG-coincidences; GELI, + 57MN2C scintillator; rabbit and helium-jet systems. 83G and 850G obscured by + 57MN3C contaminants from 56CR and 56MN. + 57MN CL Decay scheme constructed from GG-coincidence and singles data + 57MN CG Identification made by T1/2 or coincidence relationships + 57MN DB EAV CALCULATED BY EVALUATORS + 57MN CL E Calculated by evaluators using least-squares adjustment + 57MN2CL procedures; good agreement with 1978DA04. + 57MN DL DE GENERALLY SMALLER THAN THE 0.4 KEV ESTIMATED BY 1978DA04 FOR + 57MN2DL THE LOWER STATES AND LARGER FOR THE HIGHER STATES + 57MN CL J From adopted levels. Assignments suggested by 1978DA04 are + 57MN2CL given under comments. These suggested assignments are based on LOGFT + 57MN3CL and existence of G's with the assumption that JPI(57CR)=3/2-. The + 57MN4CL argument for JPI(57CR)=3/2- depends on the transition to the 2186 + 57MN5CL state. The evaluators do not adopt this argument since J(2186)=1/2 is + 57MN6CL based on a calculation (1978AN10) in (A,P) and DFT does not permit the + 57MN7CL statement that the transition is allowed. + 57MN DB E ENERGY CALIBRATION BY MEANS OF OTHER KNOWN BETA SPECTRA + 57MN2DB OBTAINED IN THE SAME BG MEASUREMENT + 57MN CB IB Calculated by evaluators from intensity balancing at each + 57MN2CB state, except as noted; in good agreement with 1978DA04 although DIB + 57MN3CB are generally higher here + 57MN CB LOGFT Calculated by evaluators based on Q-=4.8 MEV instead of + 57MN2CB 5.10 MEV 10; AP 0.1 to 0.3 lower than values given by 1978DA04 + 57MN CG RI Relative intensity. Some RI's had to be obtained from + 57MN2CG the 83G coincidence spectrum because of low intensity or interference + 57MN3CG from other lines in the singles spectrum + 57MN N 0.051 24 1 1 + 57MN CN NR From SUMOF RI(1+CC) to GS and IB(to GS)=74% 12 + 57MN CG CC Calculated by evaluators using adopted EG + 57MN DG KC,LC: CALCULATED BY EVALUATORS USING ADOPTED EG + 57MN CG M(A),CC(A)$Added by evaluators on basis of comment by 1978DA04 that, + 57MN2CG theoretically, there was 5% conversion for this GAMMA. + 57MN CB E(D) Q- obtained from these values is discrepant with value + 57MN2CB recommended by 1985WA02 + 57MN CB IB(B) As given by the 1978DA04. Evaluators note a possible + 57MN2CB intensity imbalance + 57MN CB IB(A) The ratio of accumulated 57CR to accumulated 57MN activity + 57MN2CB was obtained from the helium-jet run. SIGMA(57MN)/SIGMA(57CR) was + 57MN3CB used to obtain the GS feeding. DIB also reflects the uncertainty in + 57MN4CB the ratio of production SIGMA's. + 57MN L 0 5/2- + 57MN B 74 12 5.3 + 57MN2 B EAV AP 2.16E+3 + 57MN3 B FLAG=A + 57MN L 83.39 17 5/2-,7/2- + 57MN CL J 7/2- + 57MN B 0.7 LT 7.3 GT ? + 57MN2 B EAV AP 2.12E+3 + 57MN3 B FLAG=B + 57MN G 83.4 2 160 32 IF M1 0.0508 C + 57MN2 G KC= 0.0449 $LC=0.00443 + 57MN3 G FLAG=A + 57MN L 850.16 23 3/2- + 57MN B 2.6 22 6.4 + 57MN2 B EAV AP 1.75E+3 + 57MN G 766.5 5 6.7 16 + 57MN G 850.2 6 157 33 + 57MN L 1055.87 231/2-,3/2-,5/2- + 57MN CL J (1/2-) + 57MN B 2.1 11 6.5 + 57MN2 B EAV AP 1.65E+3 + 57MN G 205.8 3 56.2 35 + 57MN DG E NOTE APPARENT MISPRINT IN TABLE I OF 1978DA04 GIVING EG=105.8 + 57MN2DG (EVALUATORS) + 57MN G 1055.8 3 16.3 19 + 57MN L 1375.0 4 - + 57MN CL J 3/2,5/2 + 57MN B 0.4 3 7.9 + 57MN2 B EAV AP 1.49E+3 + 57MN G 1292.2 5 14.6 26 + 57MN L 1492.77 21 - + 57MN CL J 3/2,5/2 + 57MN B 0.8 5 6.6 + 57MN2 B EAV AP 1.44E+3 + 57MN G 1409.3 3 18.0 29 + 57MN G 1492.7 3 18.5 25 + 57MN L 1534.85 25 - + 57MN CL J LE 5/2- + 57MN B 3.54E+3 13 6. 3 5.7 C + 57MN2 B EAV AP 1.42E+3 + 57MN3 B FLAG=D + 57MN G 479.1 5 3.6 14 + 57MN G 684.1 5 10.5 42 + 57MN G 1535.0 3 94.7 64 C + 57MN L 1725.6 6 - + 57MN CL J 3/2,5/2 + 57MN B 0.21 13 7.1 + 57MN2 B EAV AP 1.33E+3 + 57MN G 1642.2 5 4.2 15 + 57MN L 1835.5 4 (5/2)- + 57MN B 3.28E+3 9 7. 4 5.4 C + 57MN2 B EAV AP 1.27E+3 + 57MN3 B FLAG=D + 57MN G 342.9 5 9.5 25 + 57MN G 1752.1 5 100 C + 57MN G 1835.2 6 26.8 24 + 57MN L 2146.9 9 + 57MN CL J 3/2,5/2 + 57MN B 0.22 13 6.7 + 57MN2 B EAV AP 1.12E+3 + 57MN G 2063.5 8 4.3 15 + 57MN L 2185.8 4 + 57MN CL J 1/2- + 57MN B 2.6 14 5.6 + 57MN2 B EAV AP 1.11E+3 + 57MN G 1129.9 3 27.1 25 + 57MN G 1335.7 5 23. 10 + 57MN L 2232.9 6 5/2-,7/2- + 57MN CL J (3/2-) + 57MN B 0.43 22 6.4 + 57MN2 B EAV AP 1.08E+3 + 57MN L 2340.6 4 5/2+,3/2+ + 57MN CL J 3/2,5/2 + 57MN B 0.24 21 6.5 + 57MN2 B EAV AP 1.03E+3 + 57MN G 2257.2 9 4.7 34 + 57MN L 2493.3 5 + 57MN CL J 3/2-,5/2- + 57MN B 1.7 8 5.6 + 57MN2 B EAV AP 9.6E+2 + 57MN G 2410.0 7 16.9 19 + 57MN G 2493.1 7 15.6 14 + 57MN L 2702.2 3 + 57MN CL J 3/2-,5/2- + 57MN B 2.5 3 5.2 + 57MN2 B EAV AP 8.6E+2 + 57MN G 1209.2 3 11.3 21 + 57MN G 1327.3 3 6.2 33 + 57MN G 1852.0 4 23.0 28 + 57MN G 2618.3 8 8.6 27 + + 57FE 57CO EC DECAY 86NDS 198601 + 57FE CL E Calculated by evaluators using least-squares adjustment + 57FE2CL procedures. Uncertainty in 198AU reference scale (+-1.1 EV) for + 57FE3CL 122G and 136G added in quadrature after adjustment + 57FE CL J From adopted levels. Results deduced from G(THETA,H,TEMP), + 57FE2CL GG(THETA), and CC's are consistent + 57FE CG See 1970RA51 for summary of conversion-electron + 57FE2CG ratio measurements (spectrometer, CE) from 1954AL06, 1955CO31, + 57FE3CG 1957BE45, 1960EW04, and 1967HA06. The ratios have also been measured + 57FE4CG by 1971PO05 (spectrometer, CE). These data were used in the present + 57FE5CG evaluation as noted below. Others: see 1981HAZY + 57FE CG $14.4G summary: EG: unweighted av of 2 LAMBDA measurements + 57FE2CG (1967BE65,1965BE41; moss,cryst), in good agreement with 14.4127 4 and + 57FE3CG 14.4147 25 obtained by 1976BO16 and 1972HE42, respectively, from a fit + 57FE4CG of EG(122G,136G) into level scheme. Note that these values are not + 57FE5CG consistent with 14.4050 6 from E(CEM1)=14.3134 2 (1971PO05). + 57FE6CG E(CE): E(CEK)=7.289 8 (1967HA06,spectrometer); 7.300 6 (1963TH04,pc). + 57FE7CG E(CEM1)=14.3134 2 ("METALLIC"), 14.3122 2 ("OXIDE"); + 57FE8CG E(CEN1)=14.4017 2 ("METALLIC"), 14.4005 2 ("OXIDE") (1971PO05, + 57FE9CG spectrometer). RI: from TI and CC. Other: 87 4 (1971KO19; GELI). + 57FEACG ECC: weighted av from 1963MU02 (spectrometer K/L), 1963TH04 + 57FEBCG (NAI,pc XG/G), 1965KI03 (NAI GG), 1967HA06 (spectrometer CEK/K-AUGER), + 57FECCG 1968RU04 (pc XX/XG), and 1971KO19 (GELI RI) as evaluated by 1984HAZS. + 57FEDCG See adopted gammas for final value recommended by 1984HAZS. Others: see + 57FEECG 1981HAZY. EKC: weighted av of data from 1963MU02, 1967HA06, 1968RU04, + 57FEFCG and thesis by ^N. Frani-coursol (UNIV. Paris). See adopted gammas for + 57FEGCG recommended value (1984HAZS). K:L:M+: unweighted av of 1957BE45, + 57FEHCG 1960EW04, 1963MU02, 1971PO05. Other: K/L+=100/12.1 6 (1967HA06). + 57FEICG L1/L23: other: 10.9 8 (1960EW04) + 57FE CG Chemical effects were observed in the spectral shapes and + 57FE2CG ratios of the outer-shell conversion electrons by 1971PO05, 1971PL10, + 57FE3CG and 1974FU15, among others. See 1984MA23 for calculations which + 57FE4CG included solid-state effects + 57FE CG 122G and 136G summary: MR(122G): weighted av of + 57FE2CG G(THETA,H,TEMP) (GELI); +0.120 2 (1972FO05), +0.116 1 (1973SC15), + 57FE3CG +0.1195 10 (1975CO22); and GG(THETA) (GELI), +0.120 4 (1972KR15). + 57FE4CG Others: 1972VI09, 1972NI01. ECC,EKC(122G,136G): from 1967HA06 + 57FE5CG (spectrometer, CE/pe). 1967MU20 excluded from consideration since the + 57FE6CG CEK were not completely separated and there appeared to be no + 57FE7CG separation of the higher shell electrons (1984HAZS). Others: 1984HAZS, + 57FE8CG 1981HAZY. K/L+(122G,136G): unweighted av of 1954AL06, 1957BE45, + 57FExCG 1965MO22, 1967HA06. + 57FE cG $"Shakeoff" measurements (1971Po04, spectrometer): 14.4|g: + 57FE2cG No KM observed (KM{-1}/ce(K)<1%; KM{-23}<4%). 122.1|g: + 57FE3cG |SKL/ce(K)=0.009 {I5}; E(KL{-3})=7905 eV {I+20-10}; + 57FE4cG 0.4|*10{+-4}=-0.413 {I5} relative to {+232}Th +228THxcL (1989Ka29) +228TH L 57.759 4 2+ 0.405 NS 7 A +228THX L XREF=ABCDEF +228TH cL J E2 |g to 0+ g.s. +228TH cL T from {+232}U |a decay +228TH G 57.766 5 100 E2 156 L +228TH cG M also from {+232}U |a decay +228THB G BE2W=167 6 +228TH L 186.823 4 4+ 0.164 NS 4 A +228THX L XREF=ABCDEF +228TH cL J E2 |g to 2+ level; member of g.s. rotational band +228TH cL T from {+232}U |a decay +228TH G 129.065 1 100 E2 3.81 L +228TH cG M also from (|a,|a'2n|g) +228THB G BE2W=242 9 +228TH L 328.003 4 1- B +228THX L XREF=ABC +228TH cL J E1 |g to 0+ +228TH G 270.245 2 100.0 16 E1 0.0474 J +228TH3 G FLAG=L +228TH G 328.000 6 89.3 21 E1 0.0308 J +228TH3 G FLAG=L +228TH L 378.179 10 6+ A +228THX L XREF=ABCDF +228TH cL J E2 |g to 2+ level: member of g.s. rotational band +228TH G 191.353 10 100 E2 0.791 L +228TH cG M also from (|a,|a'2n|g) +228TH L 396.078 5 3- B +228THX L XREF=ABC +228TH cL J E1 |g's to 4+ and 2+ levels +228TH G 209.253 6 34.5 6 E1 0.086 L +228TH G 338.320 3 100.0 17 E1 0.0288 L +228TH L 519.192 6 5- B +228THX L XREF=ABCDF +228TH cL J E1 |g's to 4+ and 6+ levels +228TH G 141.01 2 10.1 6 E1 0.220 +228TH G 332.370 4 100 5 E1 0.0299 L +228TH L 622.5 3 8+ A +228THX L XREF=DF +228TH cL J E2 |g to 6+ level; member of g.s. rotational band +228TH G 244.4 3 E2 0.332 G +228TH cG M from (|a,|a'2n|g) +228TH L 695.6 3 7- B +228THX L XREF=DF +228TH cL J |g to 6+ level; member of K|p=0- octupole band +228TH G 317.4 3 [E1] 0.0331 G +228TH L 831.823 10 0+ C +228THX L XREF=ABCDE +228TH cL J L=0 in (p,t) +228TH G 503.823 13 100 7 (E1) 0.0125 L +228TH3 G FLAG=M +228TH G 774.1 2 33 AP L +228TH3 G FLAG=M +228TH G 831 E0 0.04 2 +228TH cG E,M,TI from {+232}U |a decay +228TH L 874.473 18 2+ C +228THX L XREF=ABCE +228TH cL J E1 |g to 3- level, |g to 0+ g.s. +228TH G 478.40 6 100 5 E1 0.0139 +228TH G 546.45 2 91 5 +228TH G 688.11 4 32 3 & +228TH3 G FL=186.823$ FLAG=N +228TH G 816.62 10 12.3 20 +228TH G 874.45 7 23 3 +228TH L 911.8 4 10+ A +228THX L XREF=DF +228TH cL J |g to 8+ level; member of g.s. band +228TH G 289.4 3 G +228TH L 920.8 3 9- B +228THX L XREF=DF +228TH cL J |g to 7- and 8+ levels; member of K|p=0- band +228TH G 225.1 3 24.6 15 G +228TH3 G FLAG=H +228TH G 298.3 3 100 G +228TH3 G FLAG=H +228TH L 938.58 7 0+ D +228THX L XREF=AE +228TH cL J from L(p,t) quoted in 1995Ba42 +228TH G 610.64 10 100 22 L +228TH3 G FLAG=M +228TH G 880.76 10 27 8 L +228TH3 G FLAG=M +228TH L 944.196 13 1,2+ +228THX L XREF=ABE +228TH cL J |g's to 1- level and 0+ g.s. Possibly unnatural parity level +228TH2cL from (p,t); possible band head for a K|p=1+ band. However, log| +228TH3cL {Ift}=9.8 from 3+ {+228}Pa would rule out J|p=1+ +228TH G 616.20 3 91 11 +228TH G 944.196 14 100 8 L +228TH L 968.369 17 3- F +228THX L XREF=AB +228TH cL J |g's to 1- and 5- levels +228TH G 449.21 4 39 5 +228TH G 572.29 4 100 5 +228TH G 640.34 3 28 4 +228TH L 968.968 5 2+ G +228THX L XREF=AB +228TH cL J E2 |g to 0+ g.s. +228TH G 782.142 5 1.89 6 L +228TH G 911.204 4 100.0 16 E2+M1 +24 8 0.0121 L +228TH G 968.971 17 61.1 11 E2 0.0107 L +228TH L 979.499 14 2+ D +228THX L XREF=ABE +228TH cL J |g's to 0+ g.s. and 4+ level +228TH G 583.41 5 123 11 R +228TH2 G FLAG=M +228TH G 651.48 5 100 9 R +228TH2 G FLAG=M +228TH G 792.8 89 AP L +228TH3 G FLAG=M +228TH G 921.98 10 18.6 LE L +228TH3 G FLAG=BM +228TH cG Doubly placed |g with undivided intensity (I|g=16.3 {I23}) +228TH2cG in {+228}Ac decay +228TH G 979.48 10 29 3 L +228TH3 G FLAG=M +228TH L 1016.406 21 2+,3-,4+ +228THX L XREF=AB +228TH cL J |g's to 3- and 2+ levels, |g from 3+ level; natural parity +228TH2cL from (p,t) (quoted in 1995Ba42). Multiply placed +228TH3cL |g to 0+ would limit J|p to 2+; possible 2+ member of K|p=1+ band. +228TH4cL However, |g from 1450-keV 4- level would rule out 2+. +228TH G 620.33 6 28.4 14 +228TH G 688.11 4 24.0 15 & +228TH3 G FL=328.003$ FLAG=N +228TH G 958.61 4 100 12 +228TH G 1016.44 15 6.8 11 & +228TH3 G FLAG=LM +228TH L 1022.527 6 (3)+ G +228THX L XREF=AB +228TH cL J E2 |g's to 4+ and 2+ levels; E1 |g from 4- level; +228TH2cL member of K|p=2+ band +228TH G 835.710 6 32.4 11 E2 0.0143 L +228TH cG M |d|<-9 ({+228}Pa decay) +228TH G 964.766 10 100.0 18 E2+M1 -7.2 10 0.0108 L +228TH L 1059.93 3 4- +228THX L XREF=AB +228TH cL J |g's to 3- and 5- levels; J|p=3-,4+,5- ruled out by +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 540.68 5 58 10 +228TH G 663.88 6 87 7 (M1+E2) 0.06 4 +228TH G 873.11 12 100 10 +228TH L 1091.017 8 4+ G +228THX L XREF=AB +228TH cL J E2 |g to 4+ level, |g to 2+ level; |g to 6+ level +228TH G 694.8 2 2.9 4 I +228TH3 G FLAG=K +228TH G 713.1 3 1.8 4 I +228TH3 G FLAG=K +228TH G 904.19 3 100 4 E2 0.0123 +228TH cG MR |>+3.7 ({+228}Pa decay) +228TH G 1033.248 9 26.5 9 E2 L +228TH L 1122.951 6 2- H +228THX L XREF=AB +228TH cL J E1 |g to 2+ level, E2+M1 |g to 1- level, (E1+M2) |g to (3)+ +228TH2cL level; member of K|p=2- band +228TH G 100.41 3 2.2 3 (E1+M2) 0.23 AP 3.2 AP L +228TH3 G FLAG=M +228TH G 153.977 10 16.7 5 E1 0.178 L +228TH3 G FL=968.968 +228TH G 726.863 15 13.7 13 (E2) 0.0189 L +228TH G 794.947 5 100.0 16 E2+M1 -4.4 10 0.0182 15 L +228TH G 1065.19 4 3.02 12 +228TH L 1153.467 10 2+ 0.29 NS 2 I +228THX L XREF=AB +228TH cL J |g to 2+ has E0 component +228TH cL T from {+228}Ac |b{+-} decay +228TH G 173.964 13 15.5 22 M1+E2 1.2 +11-6 2.3 18 L +228THB G BM1W=4.E-5 +6-4$BE2W=0.6 +7-6 +228TH G 184.54 2 31 4 E0+M1 63 8 M +228TH3 G FL=968.968$ FLAG=L +228THB G BM1W=1.2E-4 3 +228TH cG |a(K)exp, L1/L2, L1/L3 indicate E0+5.4%M1 transition +228TH2cG ({+228}Ac |b{+-} decay) +228TH G 278.70 10 71 9 (M1+E2) 0.7 5 @ +228TH3 G FL=874.473 +228TH G 321.646 8 100 5 [E2] 0.140 L +228THB G BE2W=0.29 5 +228TH G 1095.679 20 55 4 [M1,E2] 0.018 10 L +228TH G 1153.52 4 61 4 [E2] +228THB G BE2W=0.00030 6 +228TH L 1160 5 +228THX L XREF=E +228TH L 1168.375 5 3- H +228THX L XREF=AB +228TH cL J E1 |g's to 2+ levels, |g to 5- level +228TH G 77.34 3 1.7 3 L +228TH3 G FLAG=M +228TH G 145.849 10 10.4 4 E1 0.203 L +228TH G 199.407 10 20.8 8 E1 0.096 L +228TH G 649.03 13 2.7 3 & +228TH G 772.291 5 100.0 20 E2+M1 -3.4 +8-27 0.021 3 L +228TH G 840.377 7 61.9 21 E2 0.0142 L +228TH G 981.5 2 3.0 4 I +228TH3 G FLAG=K +228TH G 1110.610 10 18.7 20 E1 @ +228TH2 G FLAG=L +228TH L 1174.508 18 (5+) G +228THX L XREF=AB +228TH cL J |g to 4+ level; member of K|p=2+ band +228TH G 987.88 9 +228TH L 1175.39 5 2+ +228THX L XREF=A +228TH cL J |g to 0+ g.s., |g to 4+ level +228TH G 231.42 10 32 5 L +228TH3 G FLAG=M +228TH G 988.63 20 100 17 L +228TH3 G FLAG=M +228TH G 1117.63 10 70 10 L +228TH3 G FLAG=M +228TH G 1175.31 10 31 4 L +228TH3 G FLAG=M +228TH L 1189.8 4 11- B +228THX L XREF=DF +228TH cL J |g's to 9- and 10+ levels; band structure +228TH G 268.9 3 67 5 G +228TH3 G FLAG=H +228TH G 278.0 3 100 G +228TH3 G FLAG=H +228TH L 1200.54 4 (3)+ I +228THX L XREF=B +228TH cL J E0 transition to (3)+ level +228TH G 178.14 7 22 LE (E0) I +228TH3 G FLAG=K +228TH G 231.50 5 100 5 I +228TH3 G FL=968.968$ FLAG=K +228TH G 1013.54 13 41 5 & +228TH3 G FLAG=IK +228TH G 1142.78 11 3 I +228TH3 G FLAG=K +228TH L 1226.565 7 (4)- H +228THX L XREF=AB +228TH cL J E1 |g's to 4+ and (3)+ levels; member of K|p=2- band +228TH G 135.51 2 3.66 20 E1 0.242 +228TH G 204.026 10 20.7 10 E1 0.091 L +228TH G 707.41 3 27.5 6 (E2) 0.0200 +228TH G 830.486 8 100 4 E2(+M1) -7.7 9 0.0152 2 L +228TH G 1039.84 8 9.9 6 +228TH L 1239.4 4 12+ A +228THX L XREF=DF +228TH cL J |g to 10+ level; member of g.s. band +228TH G 327.5 3 G +228TH L 1297.423 10 (5)- H +228THX L XREF=AB +228TH cL J E1 |g to 4+ level; band structure +228TH G 601.7 3 11.1 19 & ? +228TH3 G FLAG=IK +228TH G 778.1 2 100 11 I +228TH3 G FLAG=K +228TH cG |g not reported in {+228}Ac decay +228TH G 901.26 13 74 11 K +228TH G 1110.610 10 89 7 E1 @ +228TH3 G FLAG=L +228TH L 1344.078 11 3- J +228THX L XREF=A +228TH cL J |g's to 1- and 5- levels; band structure. Although the |g to +228TH2cL 1- level is multiply placed, this position in level scheme is +228TH3cL supported by coin results +228TH G 168.65 10 9 3 L +228TH3 G FLAG=M +228TH G 824.934 23 47 5 L +228TH3 G FLAG=M +228TH G 947.982 11 100 8 L +228TH3 G FLAG=M +228TH G 1016.44 15 18 3 & +228TH3 G FLAG=LM +228TH G 1157.14 15 6.6 12 L +228TH3 G FLAG=M +228TH G 1286.27 20 47 9 L +228TH3 G FLAG=M +228TH L 1416.11 6 2+,3- +228THX L XREF=A +228TH cL J |g's to 1- and 4+ levels +228TH G 471.76 15 100 10 L +228TH3 G FLAG=M +228TH G 1019.86 10 64 12 L +228TH3 G FLAG=M +228TH G 1088.18 15 18 4 L +228TH3 G FLAG=M +228TH G 1229.40 15 23 7 L +228TH3 G FLAG=M +228TH L 1431.979 6 4+ +228THX L XREF=AB +228TH cL J E1 |g to 3- level, E2+M1 |g to 4+ level; J|=3 from +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 257.49 2 0.64 3 (M1) 1.36 +228TH G 263.62 2 0.95 5 E1 0.0502 +228TH G 278.70 10 0.70 11 @ +228TH3 G FL=1153.467 +228TH G 340.98 2 8.8 4 E2+M1 -5.2 18 0.136 23 +228TH G 409.462 6 43.8 8 E2+M1 -5.4 8 0.082 4 +228TH G 452.51 5 0.45 4 +228TH G 463.004 6 100.0 16 E2 0.0522 L +228TH G 1245.16 6 2.47 12 +228TH G 1374.24 6 0.32 9 M +228TH L 1450.394 10 4- +228THX L XREF=AB +228TH cL J M1+E2 |g's to 3- level, |g to 4+ level; J|=3 from +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 18.4 11.9 16 [E1] 6.6 K +228TH cG E deduced from E(level) +228TH G 153.02 2 3.58 19 M1+E2 +0.60 8 4.8 2 I +228TH3 G FLAG=K +228TH G 223.80 2 43.4 20 M1+E2 -0.18 5 1.97 3 +228TH G 275.85 4 2.65 23 I +228TH3 G FLAG=K +228TH G 282.00 3 60 3 M1+E2 -0.51 12 0.88 7 K +228TH G 327.45 4 100.0 10 I +228TH3 G FLAG=K +228TH G 359.36 3 4.19 23 I +228TH3 G FLAG=K +228TH G 390.45 5 3.58 19 I +228TH3 G FLAG=K +228TH G 427.90 3 4.0 3 I +228TH3 G FLAG=K +228TH G 434.01 3 5.6 3 I +228TH3 G FLAG=K +228TH G 482.03 5 5.9 4 I +228TH3 G FL=968.369$ FLAG=K +228TH G 1054.22 6 10.9 10 +228TH L 1497.1 5 13- B +228THX L XREF=DF +228TH cL J |g's to 11- and 12+ levels; band structure +228TH G 257.7 3 52 4 G +228TH3 G FLAG=H +228TH G 307.3 3 100 G +228TH3 G FLAG=H +228TH L 1531.474 6 3+ +228THX L XREF=AB +228TH cL J E2+M1 |g to 2+ level, M1 |g to 4+ level +228TH G 99.509 6 100 6 M1 4.09 L +228TH G 356.94 10 1.35 14 L +228TH3 G FLAG=M +228TH G 377.99 10 1.98 24 L +228TH3 G FLAG=M +228TH G 440.44 5 9.6 6 M1 0.314 +228TH G 508.959 17 40 10 E2(+M1) 1.1 GT 0.08 4 L +228TH G 562.500 4 71 4 E2+M1 +1.6 6 0.07 3 L +228TH G 1135.24 15 0.78 12 L +228TH3 G FLAG=M +228TH G 1344.59 15 0.71 14 L +228TH3 G FLAG=M +228TH L 1539.21 9 2,3,4 +228THX L XREF=A +228TH cL J |g to 3- level, |g from 3+ level +228TH G 416.30 20 100 16 L +228TH2 G FLAG=M +228TH G 1142.85 15 78 16 L +228TH2 G FLAG=M +228TH L 1580.91 6 (2-) +228THX L XREF=B +228TH cL J (M1+E2) |g's to 3- and 1- levels +228TH G 354.2 2 43 7 & +228TH3 G FLAG=IK +228TH G 601.7 3 44 7 & +228TH3 G FLAG=IK +228TH G 1184.71 9 69 6 (M1+E2) 0.015 8 I +228TH3 G FLAG=K +228TH G 1252.98 10 100 9 (M1+E2) 0.013 7 I +228TH3 G FLAG=K +228TH G 1523.4 2 88 9 & +228TH3 G FLAG=IK +228TH L 1588.335 14 4- +228THX L XREF=B +228TH cL J E1 |g's to 3+ and 4+; J|=3- from |g(|q,H,T) +228TH2cL ({+228}Pa decay) +228TH G 56.86 3 16.1 8 E1 0.533 I +228TH3 G FLAG=K +228TH G 137.95 2 100 3 M1 7.89 I +228TH3 G FLAG=K +228TH G 156.34 2 20.6 11 E1 0.172 I +228TH3 G FLAG=K +228TH G 420.03 8 10.3 8 I +228TH3 G FLAG=K +228TH L 1599.5 5 14+ A +228THX L XREF=DF +228TH cL J |g to 12+; band structure +228TH G 360.1 3 G +228TH L 1617.78 7 2+,3,4+ +228THX L XREF=AB +228TH cL J |g's to 4+ and 2+ levels +228TH G 649.03 13 114 11 & +228TH2 G FL=968.968$ FLAG=M +228TH G 1430.95 10 100 20 L +228TH3 G FLAG=M +228TH G 1559.78 14 57 11 M +228TH L 1638.284 9 2+ +228THX L XREF=AB +228TH cL J |g's to 0+ g.s. and 4+ level +228TH G 470.20 19 2.3 6 +228TH G 515.06 10 8.2 8 L +228TH3 G FLAG=M +228TH G 1309.71 20 3.2 10 L +228TH3 G FLAG=M +228TH G 1451.40 15 1.8 4 L +228TH3 G FLAG=M +228TH G 1580.53 3 100 7 (M1,E2) +228TH G 1638.281 10 85 7 (E2) L +228TH L 1643.125 15 (2-,3-) +228THX L XREF=AB +228TH cL J (M1) |g's to 2- and 3- levels, +228TH G 474.79 11 4.6 7 +228TH G 520.151 16 11.8 10 (M1) 0.201 L +228TH G 627.23 20 2.8 6 L +228TH3 G FLAG=M +228TH G 674.16 30 LE Q +228TH3 G FL=968.968 +228TH cG E from level energies +228TH G 674.76 30 LE Q +228TH3 G FL=968.369 +228TH cG E from level energies +228TH G 699.08 15 7.4 10 L +228TH3 G FLAG=M +228TH G 1247.08 3 100 5 (M1) 0.0201 +228TH G 1315.31 9 2.7 4 +228TH L 1645.954 12 3+ +228THX L XREF=AB +228TH cL J E2 |g's to 2+ and 4+ levels, |g's to 2- and 4- levels +228TH G 114.54 6 0.28 4 +228TH G 419.42 10 0.65 9 L +228TH3 G FLAG=M +228TH G 492.30 8 0.74 5 +228TH G 523.131 16 3.5 3 B +228TH3 G FL=1122.951$ FLAG=L +228TH G 555.07 16 1.40 14 +228TH G 623.27 20 0.34 9 L +228TH3 G FLAG=M +228TH G 629.40 5 1.20 21 +228TH G 666.47 4 1.8 2 @ +228TH G 677.07 9 1.99 16 +228TH3 G FL=968.968 +228TH G 1249.97 14 1.94 14 +228TH G 1459.138 15 23.7 12 E2 L +228TH G 1588.19 3 100.0 25 E2 +228TH L 1682.81 3 2+,3(+),4+ +228THX L XREF=AB +228TH cL J (E2) |g to 4+ level, |g to 2+ level +228TH G 660.1 3 0.6 AP L +228TH3 G FLAG=M +228TH G 1495.93 7 100 5 (E2) +228TH G 1625.06 5 29.1 19 +228TH L 1683.82 5 (4-) +228THX L XREF=AB +228TH cL J (M1+E2) |g's to 3- and 5- levels +228TH G 457.35 7 19.2 19 +228TH G 623.7 2 26 LE I +228TH3 G FLAG=K +228TH cG |g not resolved from the 623.27|g from 1645 level in {+228}Pa +228TH2cG decay, I(doublet)=23 {I3}. Not reported in {+228}Ac decay. +228TH G 1164.55 7 83 4 (M1+E2) 0.016 9 +228TH G 1287.78 12 100 7 (M1+E2) 0.012 7 +228TH L 1688.394 11 2+,3+ +228THX L XREF=AB +228TH cL J |g's to 2+ and 4+ levels; J|p|=3-,4+ from +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 42.46 5 0.60 20 L +228TH3 G FLAG=M +228TH G 672.00 15 1.7 5 L +228TH3 G FLAG=M +228TH G 813.77 15 0.46 11 L +228TH3 G FLAG=M +228TH G 1501.57 5 29.4 15 +228TH G 1630.627 10 100 3 (M1,E2) L +228TH L 1724.283 6 2+ +228THX L XREF=AB +228TH cL J M1 |g to 2+ level, |g to 0+ g.s.; log| {Ift}=7.06 for |b{+-} +228TH2cL decay from 3+ {+228}Ac 7.32 for |e decay from 3+ {+228}Pa +228TH G 548.73 15 2.3 3 L +228TH2 G FLAG=M +228TH G 570.88 4 17.1 9 (M1) 0.156 +228TH G 701.747 14 18.2 10 (M1) 0.091 L +228TH G 755.315 4 100 3 M1 0.0747 L +228TH G 1537.87 9 4.2 5 B +228TH3 G FL=186.823 +228TH G 1666.523 13 17.3 8 M1 L +228TH G 1724.20 4 2.7 3 +228TH L 1735.450 25 (4+) +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels; possible |g to 6+ level would +228TH2cL limit J|p to 4+ +228TH G 1217.03 10 39 6 B ? +228TH3 G FL=519.192$ FLAG=LM +228TH G 1357.78 15 37 7 B ? +228TH3 G FL=378.179$ FLAG=LM +228TH G 1548.65 4 70 7 L +228TH3 G FLAG=M +228TH G 1677.67 3 100 9 L +228TH3 G FLAG=M +228TH L 1743.89 3 4+ +228THX L XREF=AB +228TH cL J (E2) |g to 2+ level; (E2+M1) |g to 4+ level; |g to 6+ level +228TH G 399.62 10 16.3 17 L +228TH3 G FLAG=MP +228TH G 590.65 11 9.3 11 I ? +228TH3 G FLAG=K +228TH cG |g not reported in {+228}Ac decay +228TH G 684.0 3 10.4 23 I ? +228TH3 G FLAG=K +228TH cG |g not reported in {+228}Ac decay +228TH G 1365.71 9 8.8 8 +228TH G 1557.10 4 100 5 (E2+M1) +1.2 2 +228TH G 1686.12 5 53.8 23 (E2) +228TH L 1758.24 12 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 326.04 20 100 15 L +228TH3 G FLAG=M +228TH G 1571.52 20 17 5 L +228TH3 G FLAG=M +228TH G 1700.59 20 31 7 L +228TH3 G FLAG=M +228TH L 1760.218 24 2+,3(+) +228THX L XREF=AB +228TH cL J (E2) |g to 4+ level, |g to 2+ level; J|p|=4+ from +228TH2cL |g(|q,H,T) in {+228}Pa decay +228TH G 584.7 3 12 4 & +228TH3 G FLAG=IK +228TH G 737.72 5 73 7 +228TH G 791.44 9 21 6 @ +228TH3 G FL=968.968 +228TH G 1573.26 5 65 4 (E2) +228TH G 1702.44 5 100 7 +228TH L 1795.90 10 3-,4+ +228THX L XREF=A +228TH cL J |g's to 5- and 2+ levels +228TH G 1276.69 10 78 17 L +228TH3 G FLAG=M +228TH G 1738.22 25 100 22 L +228TH3 G FLAG=M +228TH L 1797.65 8 2+ +228THX L XREF=A +228TH cL J |g's to 0+ g.s. and 3- level; log| {If{+1u}t}=8.14 for +228TH2cL |b{+-} decay from 3+ {+228}Ac +228TH G 1401.49 10 60 15 L +228TH3 G FLAG=M +228TH G 1469.71 15 100 20 L +228TH3 G FLAG=M +228TH G 1740.4 3 55 15 L +228TH3 G FLAG=M +228TH G 1797.5 5 11 4 L +228TH3 G FLAG=M +228TH L 1804.689 23 4+ +228THX L XREF=B +228TH cL J M1+E2 |g to 3+ level, (M1+E2) |g to 4+ level, |g to 6+ level +228TH G 116.26 5 12.8 16 I +228TH3 G FLAG=K +228TH G 121.18 7 15.2 24 I ? +228TH3 G FL=1683.82$ FLAG=KB +228TH G 121.87 3 26.4 24 I +228TH3 G FLAG=K +228TH G 158.74 3 100 6 M1+E2 0.55 15 I +228TH3 G FLAG=K +228TH G 354.2 2 23 4 & +228TH3 G FLAG=IK +228TH G 372.60 3 126 6 I ? +228TH3 G FL=1431.979$ FLAG=KB +228TH G 651.5 2 27 4 I +228TH3 G FLAG=K +228TH G 1426.5 2 38 5 I +228TH3 G FLAG=K +228TH G 1618.0 1 72 5 (M1,E2) I +228TH3 G FLAG=K +228TH L 1817.432 23 4- +228THX L XREF=B +228TH cL J E2+M1 |g to 3- level, D+Q |g to 5- level +228TH G 367.04 2 100 5 M1 0.512 I +228TH3 G FLAG=K +228TH G 1298.3 2 18.4 16 (M1+E2) I +228TH3 G FLAG=K +228TH cG MR +0.27|<|d|<+5 from |g(|q,H,T) in {+228}Pa decay +228TH G 1421.1 2 57 3 E2+M1 +2.0 5 I +228TH3 G FLAG=K +228TH L 1838.3 5 15- B +228THX L XREF=D +228TH cL J |g to 13- level; band structure +228TH G 341.2 3 G +228TH L 1892.996 17 3+ +228THX L XREF=AB +228TH cL J E2+M1 |g to 2+ level, M1+E2 |g to 4+ level +228TH G 477.1 3 4.4 13 I +228TH3 G FLAG=KP +228TH G 666.47 4 11 2 @ +228TH G 692.47 7 12.6 9 (M1+E2+E0) 0.24 3 I +228TH3 G FLAG=K +228TH cG CC from |a(K)exp in {+228}Pa decay +228TH G 724.42 11 4.8 6 & +228TH3 G FLAG=IK +228TH G 739.2 2 3.6 6 I +228TH3 G FLAG=K +228TH G 770.2 2 14.3 9 I +228TH3 G FLAG=K +228TH G 870.45 2 100 5 M1 +228TH cG MR -0.1 {I1} ({+228}Pa decay) +228TH G 924.3 2 17.0 13 I +228TH3 G FLAG=K +228TH G 1706.17 7 18.1 8 M1+E2 +0.42 4 +228TH G 1835.29 5 64 8 E2+M1 +2.9 3 +228TH L 1899.95 4 2+ +228THX L XREF=AB +228TH cL J M1+E2 |g tp 2+ level, |g's to 0+ g.s. and 3- level +228TH G 877.39 7 41 4 +228TH G 883.6 3 6.6 18 I +228TH3 G FLAG=K +228TH G 920.8 3 17 4 I +228TH3 G FLAG=K +228TH G 931.02 7 43 4 I +228TH3 G FLAG=K +228TH G 1503.7 2 31 3 I +228TH3 G FLAG=K +228TH G 1842.14 8 100 5 M1+E2 -0.86 14 +228TH G 1900.14 17 9 3 +228TH L 1901.93 8 3-,4 +228THX L XREF=B +228TH cL J |g's to 3- and 5- levels; multiply placed |g to 6+ would +228TH2cL rule out J|p=3- and 4-. log| {If{+1u}t}=7.10 for decay from 3+ {+228}Pa +228TH3cL rules out 5- +228TH G 1383.2 2 100 9 I +228TH3 G FLAG=K +228TH G 1505.9 2 100 9 I +228TH3 G FLAG=K +228TH G 1523.4 2 109 11 & +228TH3 G FLAG=IK +228TH G 1715.06 10 91 6 I +228TH3 G FLAG=K +228TH L 1906.64 10 (2+) +228THX L XREF=A +228TH cL J |g to 0+ g.s., |g to 2+,3- level; log| {If{+1u}t}=7.5 from +228THxcL 3+ {+228}Ac +228TH G 490.33 15 93 19 L +228TH3 G FLAG=M +228TH G 1074.71 15 84 25 L +228TH3 G FLAG=M +228TH G 1907.18 20 100 8 L +228TH3 G FLAG=M +228TH L 1925.22 4 3+,4+ +228THX L XREF=B +228TH cL J M1+E2 |g to 4+ level, |g's to (5+) and 3- levels +228TH G 724.42 11 7.9 9 & +228TH3 G FLAG=IK +228TH G 750.10 10 7.0 8 I +228TH3 G FLAG=K +228TH G 865.15 13 5.2 7 I +228TH3 G FLAG=K +228TH G 956.8 2 26 5 I +228TH3 G FL=968.369$ FLAG=K +228TH G 1529.02 6 27.2 14 I +228TH3 G FLAG=K +228TH G 1738.48 5 100 5 M1+E2 I +228TH3 G FLAG=K +228TH L 1928.57 6 3+ +228THX L XREF=AB +228TH cL J |g's to 2+ and 4+ levels; J|p|=2+,3-,4+ from +228TH2cL |g(|q,H,T) in {+228}Pa decay +228TH G 168.42 9 12 3 I +228TH3 G FLAG=K +228TH G 389.12 15 42 6 L +228TH3 G FLAG=M +228TH G 584.7 3 30 10 & +228TH3 G FLAG=IKP +228TH G 1741.74 21 43 12 +228TH G 1870.81 9 100 6 (M1+E2) +228TH L 1937.16 9 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 397.94 10 100 11 L +228TH3 G FLAG=M +228TH G 1062.55 15 37 11 L +228TH3 G FLAG=M +228TH G 1750.54 20 30 3 L +228TH3 G FLAG=M +228TH G 1879.6 3 4.8 18 L +228TH3 G FLAG=M +228TH L 1944.895 11 3+ +228THX L XREF=AB +228TH cL J E2+M1 |g's to 2+ and 4+ levels +228TH G 184.61 5 1.7 2 (M1) 3.45 I +228TH3 G FLAG=K +228TH G 220.61 2 5.2 3 (M1) 2.10 I +228TH3 G FLAG=K +228TH G 299.10 10 1.79 21 M1 0.90 I +228TH3 G FLAG=K +228TH G 306.61 2 8.3 4 M1 0.84 I +228TH3 G FLAG=K +228TH G 512.79 11 5.5 6 I +228TH3 G FLAG=K +228TH G 718.31 2 26.2 17 (E1) +228TH G 776.52 3 32 3 +228TH G 791.44 9 15 2 (M1) 0.0661 @ +228TH G 853.97 8 3.4 3 I +228TH3 G FLAG=K +228TH G 922.5 2 9.4 5 I +228TH3 G FLAG=K +228TH G 928.4 2 3.7 3 I +228TH3 G FLAG=K +228TH G 975.98 5 56 3 M1 0.0381 +228TH3 G FL=968.968 +228TH G 1070.40 7 5.0 3 I +228TH3 G FLAG=K +228TH G 1549.3 2 5.0 8 I +228TH3 G FLAG=K +228TH G 1758.11 5 37.7 20 E2+M1 -9 1 +228TH G 1887.12 5 100 5 E2+M1 -9.1 9 +228TH L 1958.72 22 2+ +228THX L XREF=A +228TH cL J |g's to 0+ g.s. and 4+ level +228TH G 1772.2 3 100 28 L +228TH3 G FLAG=M +228TH G 1958.4 3 83 28 L +228TH3 G FLAG=M +228TH L 1964.98 7 2+,3,4+ +228THX L XREF=B +228TH cL J |g to 2+ and 4+ levels; multiple placed |g to 0+ g.s., would +228TH2cL limit J|p to 2+ +228TH G 548.74 11 46 LT I +228TH3 G FLAG=K +228TH cG Multiply placed |g in {+228}Pa decay with I|g(doublet)=41 +228THxcG {I5} +228TH G 1778.0 6 6 2 I +228TH3 G FLAG=K +228TH G 1907.13 11 100 9 I +228TH3 G FLAG=K +228TH G 1965.22 12 43 4 & +228TH3 G FLAG=K +228TH L 1974.20 11 3-,4+ +228THX L XREF=B +228TH cL J |g's to 2+ and 5- levels +228TH G 1455.0 2 87 5 I +228TH3 G FLAG=K +228TH G 1578.2 2 100 10 I +228TH3 G FLAG=K +228TH G 1787.2 2 28 3 I +228TH3 G FLAG=K +228TH G 1916.6 3 11.3 23 I +228TH3 G FLAG=K +228TH L 1981.97 6 2+,3,4+ +228THX L XREF=B +228TH cL J |g's to 2+ and 4+ levels +228TH G 1013.54 13 32 4 & +228TH3 G FLAG=IK +228TH G 1795.15 6 100 6 I +228TH3 G FLAG=K +228TH G 1924.2 2 15.1 17 I +228TH3 G FLAG=K +228TH L 1987.46 10 4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 6+ levels +228TH G 1017.92 20 29 7 L +228TH3 G FL=968.968$ FLAG=M +228TH G 1609.41 15 39 8 L +228TH3 G FLAG=M +228TH G 1800.86 20 22 4 L +228TH3 G FLAG=M +228TH G 1929.78 20 100 11 L +228TH3 G FLAG=M +228TH L 1988.1 6 16+ A +228THX L XREF=D +228TH cL J |g to 14+ level; band structure +228TH G 388.6 3 G +228TH L 2010.11 5 2+,3,(4+) +228THX L XREF=AB +228TH cL J |g's to 2+, 2- and 4+ levels limit J|p to 2+, 3. However, +228TH2cL possible E0 component in the 918|g to (4)+ level ({+228}Ac |b{+-} +228TH3cL decay) would require J|p=(4+), making the 887|g to 2- level an M2 +228THxcL transition +228TH G 214.85 10 49 7 L ? +228TH3 G FL=1795.90$ FLAG=M +228TH cG |g not reported in {+228}Pa decay +228TH G 372.57 20 11 3 L ? +228TH3 G FL=1638.284$ FLAG=MB +228TH G 887.33 10 46 5 L +228TH3 G FLAG=M +228TH G 919.01 13 47 6 +228TH cG M possible E0 component ({+228}Ac |b{+-} decay) +228TH G 1040.92 15 75 15 L +228TH3 G FLAG=M +228TH G 1823.21 10 65 6 +228TH G 1952.37 10 100 7 +228TH L 2013.6 3 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 1826.7 3 100 38 L +228TH3 G FLAG=M +228TH G 1955.9 5 38 14 L +228TH3 G FLAG=M +228TH L 2016.76 10 (2-,3-,4-) +228THX L XREF=B +228TH cL J (M1+E2) |g to 3- level +228TH G 1620.67 10 100 (M1+E2) I +228TH3 G FLAG=K +228TH L 2022.84 8 +228THX L XREF=AB +228TH cL Level is proposed in both {+228}Ac and {+228}Pa decays. +228TH2cL However, there is agreement only on one |g (1148.16|g) from this level +228TH G 1053.09 20 220 68 L ? +228TH3 G FL=968.968$ FLAG=MB +228TH cG Possibly part of a doublet in {+228}Pa decay +228TH G 1148.16 14 100 20 +228TH G 1965.22 12 143 14 & +228TH3 G FLAG=M +228TH cG E,RI a multiply placed |g in {+228}Pa with I|g(doublet)=143 {I13}. +228TH2cG All intensity placed here in {+228}Ac decay with I|g=346 {I31} +228TH L 2029.84 16 1,2+ +228THX L XREF=A +228TH cL J |g to 0+ g.s. +228TH G 939.87 15 200 70 L ? +228TH3 G FL=1091.017$ FLAG=MB +228TH G 1013.58 20 100 28 L +228TH3 G FLAG=M +228TH G 1971.9 3 78 17 L +228TH3 G FLAG=M +228TH G 2029.4 5 39 11 L +228TH3 G FLAG=M +228TH L 2036.99 17 2+,3,4+ +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 1850.13 20 100 18 L +228TH3 G FLAG=M +228TH G 1979.3 3 41 11 L +228TH3 G FLAG=M +228TH L 2123.1 3 (2+) +228THX L XREF=A +228TH cL E the level may be questionable, Q(|b{+-})({+228}Ac)=2127 {I3}. +228TH cL J |g's to 4+ and 1- levels; log| {Ift}=3.5 {I20} indicates an +228TH2cL allowed transition +228TH G 1795.1 5 100 38 L +228TH3 G FLAG=M +228TH G 1936.3 3 100 24 L +228TH3 G FLAG=M +228TH L 2209.7 6 17- B +228THX L XREF=D +228TH cL J |g to 15- level; band structure +228TH G 371.4 3 [E2] G +228TH L 2407.9 7 18+ A +228THX L XREF=D +228TH cL J |g tp 16+ level; band structure +228TH G 419.8 3 [E2] G +228THF G FL=1988.1 + +228TH 228AC B- DECAY 1987DA28 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228AC P 0 3+ 6.15 H 2 2127 3 +228TH N 1.000 1.000 1.0 1.0 +228TH PN 2 +228TH cN NR From absolute I|g, based on measurements by 1992Li05, +228TH2cN 1983Sc13 and 1982Sa36. This normalization leads to I|b(g.s.)=6% {I6}, +228TH4cN although consistent with zero as expected from the spin change |DJ=3, +228TH5cN it may indicate that some g.s. transitions are missing from the level +228THxcN scheme. +228TH cL 1992Li05: measured absolute I|g +228TH cL 1987Da28: measured E|g, I|g, |g|g. Earlier report: 1985Da05 +228TH cL 1983Sc13, 1982Sa36: measured absolute I|g +228TH cL 1982Ma52, 1960Ar06, 1957Bj56: measured ce +228TH cL 1979Bo30: measured E|g; not included in E|g calculation +228TH2cL because five out of twelve E|g disagree with measurements of 1987Da28 +228TH3cL and 1979He10 (deviation>3 x |s) +228TH cL 1979He10: measured E|g +228TH cL 1974De14: measured E|g, I|g, |b|g(|q), |b|g(circ pol)(|q) +228TH cL +228TH cL The decay scheme is that proposed by 1987Da28 +228TH cL E,J From adopted levels +228TH CL BAND(A) GS ROTATIONAL BAND +228TH CL BAND(B) KPI=0- OCTUPOLE BAND +228TH CL BAND(C) KPI=0+ TWO OCTUPOLE PHONON BAND +228TH CL BAND(D) KPI=1- OCTUPOLE BAND +228TH CL BAND(E) KPI=2+ GAMMA-VIBRATIONAL BAND +228TH CL BAND(F) KPI=2- OCTUPOLE BAND +228TH CL BAND(G) KPI=2+ ROTATIONAL BAND ON QUASIPARTICLE STATE +228TH cB J|p({+228}Ac)=3+ +228TH cB Q(|b{+-})=2127 {I3} (1995Au04) +228TH cB IB Deduced from intensity balance in the level scheme. +228TH cG E From 1987Da28, unless otherwise noted +228TH cG RI From 1987Da28, unless otherwise noted. The relative I|g of +228TH2cG 1987Da28 have been normalized to the absolute measurements of 1992Li05, +228TH3cG 1983Sc13 and 1982Sa36 at the three |g's with I|g>10 % (338.324|g +228TH4cG I|g=11.27% {I19}, 911.205|g I|g=25.8% {I4} and 968.987|g I|g=15.8% +228TH5cG {I3}, giving a normalization factor of 0.0258 {I5}). +228TH cG M From adopted I|g and the Ice data of 1960Ar06 and 1971He23 +228TH2cG (as noted with |a(exp)) normalized to theoretical values for: +228TH3cG |a(L)(E2) for 129.065|g, |a(K)(E1) for 209.253|g and |a(K)(E2) for +228THxcG 968.971|g +228TH cG E(A) Weighted average of measurements by 1987Da28, 1979He10. The +228TH2cG measurements of 1979He10 have been corrected by using the calibration +228TH3cG line E|g from 1995HeZZ. +228TH cG E(B) Energy fit poor, E|g not included in the least squares fit +228TH2cG to obtain E(level) +228TH cG E(M) |g unassigned by 1987Da28. Placement suggested by {+228}Pa +228TH2cG decay +228TH cG RI(D) Weighted average of absolute intensity measurements of +228TH2cG 1992Li05, 1983Sc13, 1982Sa36 +228TH cG RI(E) Weighted average of measurements by 1992Li05, 1987Da28, +228TH2cG 1983Sc13, 1982Sa36 +228TH cG RI(F) Weighted average of measurements by 1987Da28, 1983Sc13, +228THxcG 1982Sa36 +228TH cG RI(G) Weighted average of measurements by 1987Da28, 1983Sc13 +228TH cG RI(H) Weighted average of measurements by 1987Da28, 1982Sa36 +228TH cG RI(I) Weighted average of measurements by 1992Li05, 1987Da28, +228THxcG 1983Sc13 +228TH cG RI(N) Intensity of the doublet divided by evaluator by comparison +228TH2cG with branching ratios and the intensities of the doublet as measured +228TH3cG in both {+228}Ac and {+228}Pa decays. +228TH cG M(J),MR(K)$From {+228}Pa |e decay +228TH cG M(L) |a(K)exp(1245|g+1247|g)=0.013 {I3} (1971He23); theory: +228TH2cG |a(K)(M1)=0.0162, |a(K)(E2)=0.00521. I(1245|g)=0.095 {I18}, +228TH3cG I(1247|g)=0.50 {I3}; the 1245|g is [M1,E2]. Therefore: if the 1245|g +228TH4cG is M1, then |a(K)exp(1247|g)=0.013 {I3}; if 1245|g is E2, then +228THxcG |a(K)exp(1247|g)=0.015 {I3}. In each case the |g M1(+E2). +228TH cG E(P) The adopted J|p require that this |g have an unreasonable +228TH2cG multipolarity (M2 or E3). The placement of this transition is +228TH3cG therefore questionable. +228TH cG RI(Q) Total intensity (I|g=0.013 {I3}) placed from 1344.1 level by +228TH2cG 1987Da28. Alternate placement from 1928.6 level suggested by {+228}Pa +228TH3cG decay. +228TH cG E(R) |g's of approximately same energy and intensity are reported +228TH2cG in both {+228}Ac and {+228}Pa decays. On the basis of coin with +228TH3cG 911.2|g, it is suggested in {+228}Ac decay that the |g feeds the 2+ +228TH4cG 968.97 level. In {+228}Pa decay, the |g is placed feeding the 3- +228TH5cG 968.37 level. The energy of the |g (E|g=674.65 {I5}) agrees with decay +228TH6cG to the 968.37 level. Possibly the |g is a doublet feeding both the +228TH7cG 968.97 and 968.37 levels. I|g(doublet)=0.101 {I8} +228TH cG E(T),RI(T)$|g not reported in this decay. Placement suggested by +228TH2cG {+228}Pa decay. I|g deduced from branching ratio in {+228}Pa decay. +228TH cG RI(U) The energy of the 853-keV transition from the 1944.9 level is +228TH2cG expected to be 853.877 {I12} from E(level); the expected intensity +228TH3cG is I|g=0.0031 {I4} from branching ratio in {+228}Pa decay. Therefore, +228TH4cG the the 853.17 {I10} |g with I|g=0.0119 {I18} reported by 1987Da28 +228TH5cG seems to be a doublet with part of the intensity belonging to a |g +228TH6cG unplaced in level scheme +228TH G 56.96 5 0.019 4 +228TH G 137.91 5 0.024 5 M1 7.90 +228TH cG M |a(K)exp=5.5 {I17}, K/L=5.6 {I27} (1971He23) +228TH G 466.40 10 0.029 3 +228TH G 634.18 10 0.0106 21 +228TH G 853.17 10 0.0088 18 U +228TH G 1337.33 20 0.0049 15 +228TH G 1378.23 10 0.0059 18 +228TH G 1385.39 10 0.0106 21 +228TH G 1434.22 15 0.0080 23 +228TH G 1438.01 10 0.0059 15 +228TH G 1480.37 15 0.016 3 +228TH G 1529.05 10 0.057 6 +228TH G 1671.64 15 0.0041 13 +228TH G 1684.01 20 0.015 5 +228TH G 1721.4 3 0.0057 21 +228TH G 1745.28 20 0.0065 8 +228TH G 1784.4 3 0.0059 10 +228TH G 1787.3 5 0.0013 5 +228TH G 1915.9 4 0.0008 3 +228TH G 1919.5 3 0.0021 5 +228TH G 1944.20 20 0.0021 5 +228TH G 2000.9 5 0.0010 3 +228TH L 0.0 0+ A +228TH L 57.759 4 2+ A +228TH B 8 6 8.9 4 +228THS B EAV=744.1 13 +228TH G 57.766 5 0.47 3 E2 156 A +228TH3 G FLAG=H +228THS G LC=114$ MC=31.1$ NC+=11.4 +228TH cG M |a(L)exp=124 {I11} (1971He23); L12/L3=1.42 (1982Ma52), 1.14 +228TH2cG {I8} (1960Ar06), 1.15 {I15} (1957Bj56); theory: |a(K)=114, L12/L3=1.23 +228TH L 186.823 4 4+ A +228TH B 0.8 6 9.8 4 +228THS B EAV=691.5 13 +228TH G 129.065 1 2.42 9 E2 3.81 A +228TH3 G FLAG=E +228THS G KC=0.269$ LC=2.58$ MC=0.707$ NC+=0.263 +228TH cG M L12/L3=1.94 {I14} (1960Ar06), 1.7 {I2} (1957Bj56). K/L=0.10 +228TH2cG {I1} (1971He23), 0.12 {I3} (1957Bj56); theory: L12/L3=1.70, K/L=0.10 +228TH L 328.003 4 1- B +228TH B 0.65 17 10.69 12 1U +228THS B EAV=606.6 12 +228TH G 270.245 2 3.46 6 E1 0.0474 A +228TH3 G FLAG=E +228THS G KC=0.0379$ LC=0.00721$ MC=0.00173$ NC+=0.00061 +228TH cG M |a(K)exp=0.029 {I4} (1971He23); theory: |a(K)=0.0379 +228TH G 328.000 6 2.95 12 E1 0.0308 H +228THS G KC=0.0247$ LC=0.00458$ MC=0.00110$ NC+=0.00039 +228TH cG M |a(K)exp=0.037 {I8} (1971He23); theory |a(K)=0.0247 +228TH L 378.179 10 6+ A +228TH G 191.353 10 0.123 8 E2 0.791 H +228THS G KC=0.174$ LC=0.450$ MC=0.123$ NC+=0.0454 +228TH cG M |a(K)exp=0.24 {I7}, K/L=1.0 {I5}; theory: |a(K)(E2)=0.174, +228TH2cG K/L(E2)=0.39, |a(K)(M1)=2.49, K/L(M1)=5.25 +228TH L 396.078 5 3- B +228TH B 11.66 24 8.428 10 +228THS B EAV=606.9 12 +228TH G 209.253 6 3.89 7 E1 0.086 E +228THS G KC=0.0678$ LC=0.0135$ MC=0.00323$ NC+=0.00114 +228TH cG M from K/L and L subshell ratios in {+228}Pa |e decay. +228TH2cG Other: K/L=2.4 {I4} (1971He23) +228TH G 338.320 3 11.27 19 E1 0.0288 A +228TH3 G FLAG=D +228THS G KC=0.0231$ LC=0.00426$ MC=0.00102$ NC+=0.00036 +228TH cG M |a(K)exp=0.019 {I2} (1960Ar06); theory: |a(K)=0.0231 +228TH L 519.192 6 5- B +228TH B 0.08 LT 11.3 GT 1U +228THS B EAV=534.3 12 +228TH G 141.02 3 0.050 8 E1 0.220 J +228THS G KC=0.171$ LC=0.0366$ MC=0.0088$ NC+=0.00313 +228TH cG M |a(K)exp=0.7 {I5} (1971He23); theory: |a(K)(E1)=0.171, +228TH2cG |a(K)(E2)=0.259, |a(K)(M1)=5.92, |a(K)(M2)=26.1. +228TH G 332.370 4 0.40 4 E1 0.0299 A +228TH3 G FLAG=EJ +228THS G KC=0.0240$ LC=0.00444$ MC=0.00106$ NC+=0.00038 +228TH cG M ce(K) not seen by 1960Ar06. |a(K)exp=0.41 {I8} (1971He23) +228TH2cG does not agree with [E1] required by the level scheme. +228TH L 831.823 10 0+ C +228TH G 503.823 13 0.182 12 (E1) 0.0125 A +228TH3 G FLAG=G +228THS G KC=0.0101$ LC=0.00178 +228TH cG M Ice not seen (1971He23), upper limit in Ice suggests E1 +228TH G 774.1 2 0.06 AP [E2] 0.0167 +228THS G KC=0.0122$ LC=0.00339 +228TH L 874.473 18 2+ C +228TH B 0.23 10 9.62 19 +228THS B EAV=418.5 12 +228TH G 478.33 5 0.209 15 E1 0.0139 +228THS G KC=0.0112$ LC=0.00199$ MC=0.00047$ NC+=0.00017 +228TH G 546.47 5 0.201 13 [E1] 0.0106 +228THS G KC=0.0086$ LC=0.00151 +228TH G 688.10 5 0.067 5 [E2] 0.0212 & +228TH2 G FL=186.823$ FLAG=B +228THS G KC=0.0151$ LC=0.00464 +228TH G 816.71 10 0.030 3 [M1,E2] 0.038 23 +228THS G KC=0.030 19$ LC=0.006 3 +228TH G 874.44 7 0.047 10 [E2] 0.0131 A +228THS G KC=0.0098$ LC=0.00249 +228TH L 938.58 7 0+ D +228TH G 610.64 10 0.023 5 [E1] +228TH G 880.76 10 0.0062 18 [E2] 0.0129 +228THS G KC=0.0096$ LC=0.00244 +228TH L 944.196 13 1,2+ +228TH B 0.07 LT 10.0 GT +228THS B EAV=391.8 12 +228TH G 616.22 3 0.080 5 A +228TH G 944.196 14 0.095 8 A +228TH L 968.369 20 3- D +228TH B 0.21 4 9.54 9 +228THS B EAV=382.6 12 +228TH G 449.15 5 0.048 5 [E2] 0.0563 A +228THS G KC=0.0335$ LC=0.0168$ MC=0.00439$ NC+=0.00162 +228TH G 572.14 8 0.150 16 [M1,E2] 0.09 7 A +228THS G KC=0.07 6$ LC=0.016 8 +228TH G 640.34 3 0.054 5 [E2] 0.0247 A +228THS G KC=0.0172$ LC=0.00567 +228TH L 968.968 5 2+ E +228TH B 29.9 10 7.39 2 +228THS B EAV=382.3 12 +228TH G 782.142 5 0.485 19 [E2] 0.0163 A +228TH3 G FLAG=E +228THS G KC=0.0119$ LC=0.00330 +228TH cG M |a(K)exp=0.024 {I3} (1960Ar06), 0.07 {I3} (1971He23) +228TH2cG inconsistent with with each other and with E2 assignment required by +228THxcG level scheme +228TH G 911.204 4 25.8 4 E2 0.0121 A +228TH3 G FLAG=D +228THS G KC=0.0091$ LC=0.00225 +228TH cG M |a(K)exp=0.0104 {I10}, K/L=4.6 {I5} (1971He23), +228TH2cG |a(K)exp=0.0092 {I9} (1960Ar06); theory: |a(K)=0.0091, K/L=4.04. +228THxcG |d=+24 {I8} from {+228}Pa decay +228TH G 968.971 17 15.8 3 E2 0.0107 A +228TH3 G FLAG=D +228THS G KC=0.00815$ LC=0.00194 +228TH cG M |a(L)exp=0.0016 {I3} (1971He23); theory: |a(K)=0.00815, +228TH2cG |a(L)=0.0194; |a(K)exp used in normalization of the ce spectra. +228TH L 979.499 14 2+ +228TH B 0.13 7 9.73 24 +228THS B EAV=378.3 12 +228TH G 583.41 5 0.111 10 [E1] 0.0094 +228THS G KC=0.00761$ LC=0.00132 +228TH cG RI does not agree with the branching ratio in {+228}Pa decay +228TH G 651.51 3 0.090 8 [E1] 0.0076 A +228THS G KC=0.00617$ LC=0.00106 +228TH G 792.8 0.08 AP [E2] 0.0159 +228THS G KC=0.0116$ LC=0.00319 +228TH G 921.98 10 0.0147 21 [M1,E2] 0.028 17 & +228THS G KC=0.022 14$ LC=0.0044 22 +228TH cG M |a(K)exp=2.0 {I4} (1971He23) may indicate an E0 component +228TH cG Total intensity placed here by 1987Da28 +228TH G 979.48 10 0.026 3 [E2] 0.0105 +228THS G KC=0.00799$ LC=0.00189 +228TH L 1016.406 21 2+,3-,4+ +228TH B 0.31 5 9.31 7 +228THS B EAV=364.3 12 +228TH G 620.38 5 0.080 5 +228TH G 688.10 5 0.067 5 & +228TH2 G FL=328.003 +228TH cG |g not placed here by 1987Da28; this placement of the |g +228TH2cG suggested in {+228}Pa decay +228TH G 958.61 4 0.28 4 A +228TH3 G FLAG=H +228TH G 1016.44 15 0.019 3 & +228TH L 1022.527 6 (3)+ E +228TH B 3.10 15 8.30 2 +228THS B EAV=362.0 12 +228TH G 835.710 6 1.61 6 E2 0.0143 A +228TH3 G FLAG=EJ +228THS G KC=0.0106$ LC=0.00279 +228TH cG M |a(K)exp|<0.015 (1971He23); theory: |a(K)=0.0106 +228TH G 964.766 10 4.99 9 E2+M1 -7.2 10 0.0108 A +228TH3 G FLAG=E +228THS G KC=0.00821$ LC=0.00196 +228TH cG M |a(K)exp=0.0084 {I9} (1971He23); theory: |a(K)=0.00821 +228TH L 1059.93 3 4- +228TH B 0.071 11 9.88 7 +228THS B EAV=347.9 12 +228TH G 540.76 10 0.026 3 [M1,E2] 0.11 8 +228THS G KC=0.08 6$ LC=0.018 9 +228TH G 663.82 10 0.028 6 (M1+E2) 0.06 4 J +228THS G KC=0.05 4$ LC=0.010 6 +228TH G 873.17 15 0.031 6 [E1] 0.00441 +228THS G KC=0.00361$ LC=0.00060 +228TH L 1091.017 8 4+ E +228TH B 0.26 5 9.28 9 +228THS B EAV=336.3 12 +228TH G 904.20 4 0.77 3 E2 0.0123 A +228TH3 G FLAG=FJ +228THS G KC=0.0092$ LC=0.00229 +228TH cG M |a(K)exp=0.027 {I10} (1971He23), ce(K) not seen (1960Ar06); +228TH2cG |a(K)exp does not agree with |a(K)exp measured in {+228}Pa |e decay. +228TH G 1033.248 9 0.201 13 E2 0.0095 A +228TH3 G FLAG=J +228THS G KC=0.00727$ LC=0.00167 +228TH L 1122.951 6 2- F +228TH B 5.92 14 7.871 12 +228THS B EAV=324.4 12 +228TH G 100.41 3 0.093 13 (E1+M2) 0.23 AP 3.2 AP +228THS G LC=2.4$ MC=0.64$ NC+=0.25 +228TH cG M,MR |a(L3)exp|?0.43 (1971He23); theory: |a(L3)(E1)=0.0213, +228TH2cG |a(L3)(M2)=8.66. |a(L3)exp could also fit M1+E2; however, level scheme +228TH3cG requires |D|p=yes +228TH G 153.977 10 0.722 21 E1 0.178 E +228TH3 G FL=968.968 +228THS G KC=0.139$ LC=0.0292$ MC=0.00703$ NC+=0.00250 +228TH cG M |a(K)exp=0.095 {I16} (1971He23); theory: |a(K)=0.129 +228TH G 726.863 15 0.62 8 (E2) 0.0189 +228THS G KC=0.0136$ LC=0.00400 +228TH cG M |a(K)exp|?0.012 (1971He23); theory: |a(K)=0.0136 +228TH G 794.947 5 4.25 7 E2+M1 -4.4 10 0.0182 15 A +228TH3 G FLAG=DK +228THS G KC=0.0136 13$ LC=0.00349 20 +228TH cG M |a(K)exp=0.0118 {I20}, K/L=1.6 {I7} (1971He23), +228TH2cG |a(K)exp=0.0139 {I19} (1960Ar06); theory: |a(K)(E2)=0.0116, +228THxcG |a(K)(M1)=0.0524 +228TH G 1065.18 4 0.132 10 A +228TH L 1153.467 10 2+ 0.29 NS 2 +228TH cL T from 1974De14 +228TH B 5.1 8 7.89 7 +228THS B EAV=313.1 11 +228TH G 173.964 13 0.035 5 M1+E2 1.2 +11-6 2.3 18 A +228THS G KC=1.5 10$ LC=0.66 4$ MC=0.171 22$ NC+=0.063 5 +228TH cG M,MR from |a(K)exp=1.5 {I8} (1971He23); also fits E1+M2 with +228TH2cG |d=0.35 {I12}, level scheme requires |D|p=no. Theory: |a(K)(E1)=0.104, +228TH3cG |a(K)(E2)=0.203, |a(K)(M1)=3.26, |a(K)(M2)=12.9 +228TH G 184.54 2 0.070 8 E0+M1 63 8 4.5 8 +228TH3 G FL=968.968 +228THS G KC=53 7$ LC=10.2 13$ MC=0.126$ NC+=0.0462 +228TH cG M K/L=4.0 {I5}, L1/L2=33 {I6}, L1/L3>>50 (1974De14), +228TH2cG |a(K)exp=53 {I7} (1971He23); measured |a(K)exp yields an E0 transition +228TH3cG with an admixture of: 5.4% M1 with K/L=5.2, L1/L2=30, L1/L3=3300, or +228TH4cG 1.4% E2 with K/L=5.0, L1/L2=16.5, L1/L3=58. Thus the ratios support +228TH5cG E0+M1 transition +228TH cG CC from |a(K)exp +228TH G 278.95 5 0.160 21 (M1,E2) 0.7 5 @ +228TH3 G FL=874.473$ FLAG=N +228THS G KC=0.48 39$ LC=0.130 35$ MC=0.033 7$ NC+=0.0119 24 +228TH cG M |a(K)exp(doublet)=0.18 {I4} (1960Ar06), +228TH2cG |a(L)exp(279|g+282|g)=0.37 {I7} (1971He23); theory: |a(K)(M1)=0.872, +228THxcG |a(K)(E2)=0.0854 +228TH G 321.646 8 0.226 11 [E2] 0.140 A +228TH3 G FLAG=D +228THS G KC=0.0643$ LC=0.0550$ MC=0.0147$ NC+=0.00544 +228TH cG M |a(K)exp=0.49 {I8} (1971He23) indicating mainly M1 transition +228TH2cG (|a(K)(M1)=0.590) which is not in agreement with the level scheme. +228TH3cG 1960Ar06 did not see ce(K) suggesting that the |a(K)exp may be +228THxcG unreliable. +228TH G 1095.679 20 0.129 10 [M1,E2] 0.018 10 A +228TH G 1153.52 4 0.139 10 A +228TH L 1168.375 5 3- F +228TH B 3.08 7 8.084 11 +228THS B EAV=307.6 11 +228TH G 77.34 3 0.026 5 [E1] 0.235 +228THS G LC=0.177$ MC=0.0431$ NC+=0.0150 +228TH G 145.849 10 0.158 8 E1 0.203 H +228TH3 G FLAG=J +228THS G KC=0.158$ LC=0.0336$ MC=0.00809$ NC+=0.00287 +228TH cG M |a(K)exp=1.3 {I4} (1971He23); theory: |a(K)=0.158. ce not +228TH2cG seen by 1960Ar06 or in {+228}Pa decay. +228TH G 199.407 10 0.315 5 E1 0.096 H +228TH3 G FLAG=J +228THS G KC=0.0758$ LC=0.0152$ MC=0.00365$ NC+=0.00129 +228TH cG M ce(K), ce(L) not seen (1971He23,1960Ar06), suggests E1 mult +228TH G 648.84 10 0.040 4 [E2] 0.0240 & +228TH2 G FL=519.192 +228THS G KC=0.0168$ LC=0.00546 +228TH G 772.291 5 1.49 3 E2+M1 -3.4 +8-27 0.021 3 A +228TH3 G FLAG=EK +228THS G KC=0.0157 24$ LC=0.0040 4 +228TH cG M |a(K)exp=0.016 {I7} (1971He23), 0.019 {I3} (1960Ar06); +228TH2cG theory: |a(K)=0.0157 {I24} +228TH G 840.377 7 0.91 4 E2 0.0142 A +228TH3 G FLAG=EJ +228THS G KC=0.0105$ LC=0.00275 +228TH cG M |a(K)exp|<0.026 (1971He23); theory: |a(K)=0.0105 +228TH G 1110.610 10 0.285 23 E1 @ +228TH3 G FLAG=AJN +228TH L 1174.508 18 (5+) E +228TH B 0.005 LT 10.9 GT +228THS B EAV=305.4 11 +228TH G 987.71 20 0.077 13 [M1,E2] 0.024 14 +228THS G KC=0.019 11$ LC=0.0037 18 +228TH L 1175.39 5 2+ +228TH B 0.17 3 9.33 8 +228THS B EAV=305.0 11 +228TH G 231.42 10 0.025 4 [D,E2] 1.0 9 +228TH G 988.63 20 0.077 13 [E2] 0.0103 +228TH G 1117.63 10 0.054 8 +228TH G 1175.31 10 0.024 3 +228TH L 1226.565 7 (4)- F +228TH B 0.66 4 8.66 3 +228THS B EAV=286.3 11 +228TH G 135.54 5 0.018 4 E1 0.242 J +228THS G KC=0.188$ LC=0.0406$ MC=0.0098$ NC+=0.00348 +228TH cG M |a(K)exp|?3 (1971He23); theory: |a(K)=0.188 +228TH G 204.026 10 0.112 15 E1 0.091 H +228THS G KC=0.0719$ LC=0.0143$ MC=0.00344$ NC+=0.00122 +228TH cG M |a(L)exp<0.23 (1971He23); theory: |a(L)(E1)=0.0143, +228THxcG |a(L)(E2)=0.342 +228TH G 707.41 5 0.155 15 (E2) 0.0200 H +228TH3 G FLAG=J +228THS G KC=0.0143$ LC=0.00711 +228TH G 830.486 8 0.540 21 E2(+M1) -7.7 9 0.0152 2 A +228TH3 G FLAG=FJK +228THS G KC=0.0113 2 $ LC=0.00293 3 +228TH cG M |a(K)exp=0.020 {I11} (1971He23); theory: |a(K)=0.0113 {I2} +228TH G 1039.65 15 0.044 9 +228TH L 1297.423 10 (5)- F +228TH B 0.058 13 9.95 10 1U +228THS B EAV=257.9 10 +228TH G 778.23 0.022 6 [M1,E2] 0.04 3 S +228TH3 G FLAG=T +228THS G KC=0.034 22$ LC=0.007 4 +228TH G 901.23 15 0.016 3 [E2] 0.0123 +228THS G KC=0.00926$ LC=0.00231 +228TH G 1110.610 10 0.019 10 E1 @ +228TH3 G FLAG=JN +228TH L 1344.078 11 3- +228TH B 0.208 16 8.95 4 +228THS B EAV=243.9 11 +228TH G 168.65 10 0.010 3 [E1] 0.143 @ +228TH2 G FLAG=Q +228THS G KC=0.112$ LC=0.0232$ MC=0.00557$ NC+=0.00197 +228TH G 824.934 23 0.050 5 [E2] 0.0147 A +228THS G KC=0.0108$ LC=0.00288 +228TH G 947.982 11 0.106 8 [M1,E2] 0.026 15 A +228THS G KC=0.021 12$ LC=0.0041 20 +228TH G 1016.44 15 0.019 3 & +228TH G 1157.14 15 0.0070 13 +228TH G 1286.27 20 0.050 10 +228TH L 1416.11 6 2+,3- +228TH B 0.060 8 9.35 6 +228THS B EAV=218.4 11 +228TH G 471.76 15 0.033 3 [D,E2] 0.14 12 +228TH G 1019.86 10 0.021 4 +228TH G 1088.18 15 0.0059 13 +228TH G 1229.40 15 0.0075 23 +228TH L 1431.979 6 4+ +228TH B 0.8 4 8.19 22 +228THS B EAV=212.9 11 +228TH G 257.52 10 0.030 3 (M1) 1.36 J +228THS G KC=1.09$ LC=0.205$ MC=0.0495$ NC+=0.0180 +228TH G 263.58 10 0.040 4 E1 0.0502 J +228THS G KC=0.0400$ LC=0.00766$ MC=0.00184$ NC+=0.00065 +228TH G 278.95 5 0.031 5 [E2] 0.216 @ +228TH3 G FL=1153.467$ FLAG=N +228THS G KC=0.086$ LC=0.096$ MC=0.0257$ NC+=0.0095 +228TH cG |g not placed here by 1987Da28; this alternate placement is +228TH2cG suggested in {+228}Pa decay +228TH G 340.96 5 0.369 21 E2+M1 -5.2 18 0.136 23 E +228TH3 G FLAG=JK +228THS G KC=0.073 20$ LC=0.046 2$ MC=0.0122 5$ NC+=0.00450 17 +228TH cG M |a(K)exp=0.66 {I7} (1971He23) suggests an M1 transition. +228TH2cG However, ce(K) not seen by 1960Ar06. +228TH G 409.462 6 1.92 4 E2+M1 -5.4 8 0.082 4 A +228TH3 G FLAG=EK +228THS G KC=0.049 4$ LC=0.0242 5$ MC=0.00631 10$ NC+=0.00233 4 +228TH cG M |a(K)exp=0.058 {I9}, K/L=2.0 {I4} (1971He23), |a(K)exp=0049 +228TH2cG {I4} (1960Ar06). Theory: |a(K)=0.49 {I4}, K/L=2.02 +228TH G 452.47 10 0.015 5 [E2] 0.0553 +228THS G KC=0.0330$ LC=0.0164$ MC=0.00429$ NC+=0.00158 +228TH G 463.004 6 4.40 7 E2 0.0522 A +228TH3 G FLAG=E +228THS G KC=0.0316$ LC=0.0152$ MC=0.00397$ NC+=0.00146 +228TH cG M |a(K)exp=0.036 {I4}, K/L=3.0 {I7} (1971He23); |a(K)exp=0.028 +228TH2cG {I3} (1960Ar06); theory: |a(K)=0.0316, K/L=2.1 +228TH G 1103.41 10 0.0150 23 [E3] B ? +228TH2 G FL=328.003$ FLAG=P +228TH G 1245.05 20 0.095 18 [M1,E2] 0.013 7 L +228TH G 1374.19 10 0.014 4 +228TH L 1450.394 10 4- +228TH B 0.59 7 8.28 6 +228THS B EAV=206.5 11 +228TH G 18.4 0.014 4 [E1] 6.6 0.11 3 S +228TH cG TI,RI deduced from branching ratio in Pa decay +228TH G 223.85 10 0.054 5 M1+E2 -0.18 5 1.97 3 J +228TH3 G FLAG=K +228THS G KC=1.56 3$ LC=0.302 1$ MC=0.0729 2$ NC+=0.0266 1 +228TH cG M |a(K)exp=1.7 {I5}, K/L=4.2 {I19} (1971He23); theory: +228THxcG |a(K)=1.56 {I3}, K/L=5.2 +228TH G 282.00 3 0.072 19 M1+E2 -0.51 12 0.88 7 A +228TH3 G FLAG=HJK +228THS G KC=0.69 6$ LC=0.145 6$ MC=0.0355 11$ NC+=0.0129 4 +228TH G 327.44 0.12 4 [E2] 0.132 S +228TH3 G FLAG=T +228THS G KC=0.0621$ LC=0.0515$ MC=0.0137$ NC+=0.00508 +228TH cG |g may be masked by strong 328.000|g. +228TH cG E E|g from E(level) +228TH G 480.94 20 0.023 5 [M2] P +228TH3 G FL=968.968 +228TH cG Not reported in {+228}Pa decay +228TH G 930.93 10 0.0124 18 & +228TH cG Placement of |g in level scheme uncertain. Alternate +228TH2cG placement suggested in {+228}Pa decay +228TH G 1054.11 20 0.018 5 +228TH L 1531.474 6 3+ +228TH B 8.0 4 6.96 2 +228THS B EAV=178.7 11 +228TH G 99.509 6 1.26 7 M1 4.09 A +228TH2 G FLAG=H +228THS G LC=3.07$ MC=0.741$ NC+=0.273 +228TH cG M |a(L12)exp=3.0 {I3} (1971He23), 2.0 {I3} (1960Ar06); L3 not +228TH2cG seen (1960Ar06) theory: |a(L)=3.07 +228TH G 356.94 10 0.0170 18 [E2] 0.103 +228THS G KC=0.0523$ LC=0.0374$ MC=0.0099$ NC+=0.00368 +228TH cG M |a(K)exp=1.9 {I9} (1971He23) does not agree with +228TH2cG multipolarity deduced from level scheme. Theory: |a(K)=0.0523 +228TH G 377.99 10 0.025 3 [M1,E2] 0.28 19 +228THS G KC=0.21 17$ LC=0.051 20$ MC=0.013 5$ NC+=0.0046 16 +228TH G 440.44 5 0.121 8 M1 0.314 +228THS G KC=0.252$ LC=0.0471$ MC=0.0113$ NC+=0.00410 +228TH cG M |a(K)exp=0.26 {I9} (1971He23); theory: |a(K)=0.252. Limit of +228TH2cG E2 admixture |d<0.8 +228TH G 508.959 17 0.45 5 E2(+M1) 1.1 GT 0.08 4 A +228THS G KC=0.06 3$ LC=0.016 5 +228TH cG M,MR |a(K)exp=0.06 {I3} (1971He23); theory: |a(K)(E2)=0.0264, +228THxcG |a(K)(M1)=0.171 +228TH G 562.500 4 0.87 3 E2+M1 +1.6 6 0.07 3 A +228TH3 G FLAG=EK +228THS G KC=0.051 23$ LC=0.013 4 +228TH cG M |a(K)exp=0.048 {I10} (1971He23); E1+M2 mixture requires +228THxcG |d=0.39 +228TH G 1135.24 15 0.0098 15 +228TH G 1344.59 15 0.0090 18 +228TH L 1539.21 9 2,3,4 +228TH G 416.30 20 0.0132 21 [E1] 0.0185 +228THS G KC=0.0149$ LC=0.00268$ MC=0.000640$ NC+=0.000228 +228TH G 1142.85 15 0.0103 21 +228TH L 1617.78 7 2+,3,4+ +228TH B 0.075 13 8.77 8 +228THS B EAV=149.8 10 +228TH G 648.84 10 0.040 4 & +228TH3 G FL=968.968 +228TH cG |g not placed here by 1987Da28. This multiply placement +228TH2cG suggested in {+228}Pa decay +228TH G 1430.95 10 0.035 7 +228TH G 1559.85 20 0.020 4 +228TH L 1638.284 9 2+ G +228TH cL Quasiparticle configuration=((|p 3/2+[651])(|p 1/2+[660])) or +228TH2cL configuration=((|p 3/2+[651])(|p 1/2+[400])) suggested for this level +228TH B 1.15 5 7.52 2 +228THS B EAV=143.0 10 +228TH G 470.25 20 0.013 3 [E1] 0.0144 +228THS G KC=0.0116$ LC=0.00206$ MC=0.00049$ NC+=0.00018 +228TH G 515.06 10 0.049 5 [E1] 0.0120 +228THS G KC=0.0097$ LC=0.00170 +228TH G 1309.71 20 0.019 6 +228TH G 1451.40 15 0.0106 21 +228TH G 1580.53 3 0.60 4 (M1,E2) A +228TH3 G FLAG=I +228TH cG M |a(K)exp=0.012 {I7} (1971He23); theory: |a(K)(M1)=0.0087, +228THxcG |a(K)(E2)=0.00343 +228TH G 1638.281 10 0.47 3 (E2) A +228TH3 G FLAG=IJ +228TH L 1643.125 15 (2-,3-) +228TH B 0.80 6 7.67 4 +228THS B EAV=141.4 10 +228TH G 474.75 10 0.022 3 [M1,E2] 0.15 11 +228THS G KC=0.12 9$ LC=0.026 13$ MC=0.006 3$ NC+=0.0023 10 +228TH G 520.151 16 0.067 5 (M1) 0.201 A +228THS G KC=0.161$ LC=0.0301 +228TH cG M |a(K)exp=0.31 {I12} (1971He23); theory: |a(K)=0.161 +228TH G 627.23 20 0.014 3 +228TH G 674.16 0.109 LE [E1] R +228TH3 G FL=968.968 +228TH cG E deduced from E(level) +228TH G 674.75 0.109 LE [M1,E2] 0.06 4 R +228TH3 G FL=968.369 +228THS G KC=0.048 32$ LC=0.010 5 +228TH cG E deduced from E(level) +228TH G 699.08 15 0.037 5 [D,E2] 0.05 4 +228TH G 1247.08 4 0.50 3 (M1) 0.0201 A +228TH3 G FLAG=IL +228TH G 1315.34 10 0.015 3 [M1,E2] 0.012 6 +228TH L 1645.954 12 3+ +228TH B 4.16 20 6.94 2 +228THS B EAV=140.5 10 +228TH G 114.56 7 0.0098 21 [M1,E2] 10 4 +228THS G KC=5.5 52$ LC=3.2 12$ MC=0.9 4$ NC+=0.32 14 +228TH G 419.42 10 0.021 3 [E1] 0.0182 +228THS G KC=0.0147$ LC=0.00264$ MC=0.00063$ NC+=0.000225 +228TH G 492.37 10 0.0235 23 [M1,E2] 0.14 10 +228THS G KC=0.11 8$ LC=0.024 12$ MC=0.006 3$ NC+=0.0021 10 +228TH G 523.131 16 0.103 8 [E1] 0.0116 A +228TH3 G FL=1122.951$ FLAG=B +228THS G KC=0.00942$ LC=0.000165 +228TH cG M |a(K)exp|<0.08 (1971He23); theory: |a(K)(E1)=0.0094, +228TH2cG |a(K)(E2)=0.0251, |a(K)(E3)=0.0610, |a(K)(M1)=0.158 +228TH G 555.12 10 0.046 5 [M1,E2] 0.10 7 +228THS G KC=0.08 6$ LC=0.017 9 +228TH G 623.27 20 0.011 3 [M1,E2] 0.08 5 +228THS G KC=0.06 4$ LC=0.012 6 +228TH G 629.40 5 0.045 5 [D,E2] 0.06 6 +228TH G 666.45 10 0.057 6 [M1,E2] 0.06 4 @ +228TH3 G FLAG=N +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG I|g(doublet)=0.052 {I5}. All of intensity placed here by +228THxcG 1987Da28, +228TH G 677.11 10 0.062 5 [M1,E2] 0.06 4 +228TH3 G FL=968.968 +228THS G KC=0.05 3$ LC=0.010 5 +228TH G 1250.04 10 0.062 5 A +228TH G 1459.138 15 0.83 8 E2 A +228TH3 G FLAG=IJ +228TH G 1588.20 3 3.22 8 E2 A +228TH3 G FLAG=IJ +228TH cG M |a(K)exp=0.0050 {I16} (1971He23); theory: |a(K)=0.00340 +228TH L 1682.81 3 2+,3(+),4+ +228TH B 1.12 5 7.40 2 +228THS B EAV=128.5 10 +228TH G 660.1 3 0.005 AP [M1,E2] 0.06 4 +228THS G KC=0.05 3$ LC=0.010 5 +228TH G 1495.910 20 0.86 4 (E2) A +228TH3 G FLAG=IJ +228TH G 1625.06 5 0.255 18 A +228TH L 1683.82 5 (4-) +228TH B 0.165 17 8.23 5 +228THS B EAV=128.2 10 +228TH G 457.17 15 0.0150 23 [M1,E2] 0.17 12 +228THS G KC=0.13 10$ LC=0.029 14$ MC=0.007 3$ NC+=0.0026 11 +228TH G 1164.50 8 0.065 5 (M1+E2) 0.016 9 J +228TH G 1287.68 20 0.080 15 (M1+E2) 0.012 7 J +228TH cG |g listed in table I of 1987Da28 as deexciting the 1682.8 +228TH2cG level; however, on level scheme (fig. 4) shown as deexciting the +228TH3cG 1683.8 level. The energy fit is much better from the 1683.8 level. +228TH L 1688.394 11 2+,3+ G +228TH B 2.45 16 7.04 3 +228THS B EAV=126.7 10 +228TH G 42.46 5 0.009 3 [M1] 49 +228TH cG From intensity balance at 1646 level, multipolarity cannot +228TH2cG be pure E2. Some E2 admixture, however, cannot be ruled out +228TH G 672.00 15 0.026 8 +228TH cG |g listed in table I of 1987Da28 as deexciting the 1683.8 +228TH2cG level; however, on level scheme (fig. 4) shown as deexciting the +228TH3cG 1688.4 level. +228TH G 813.77 15 0.0070 16 [M1,E2] 0.038 23 +228THS G KC=0.030 19$ LC=0.006 3 +228TH G 1501.57 5 0.46 3 G +228TH G 1630.627 10 1.51 4 (M1,E2) A +228TH2 G FLAG=I +228TH cG M from |a(K)exp(1625|g+1630|g)=0.0062 {I20} (1971He23); theory: +228TH2cG |a(K)(M1)=0.0090, |a(K)(E2)=0.0034 +228TH L 1724.283 6 2+ +228TH B 1.76 5 7.06 2 +228THS B EAV=115.3 10 +228TH G 497.49 15 0.0059 18 [M2] 0.608 P +228THS G KC=0.457$ LC=0.113$ MC=0.0282$ NC+=0.0104 +228TH G 548.73 15 0.023 3 [M1,E2] 0.10 7 +228THS G KC=0.08 6$ LC=0.017 9 +228TH G 570.91 10 0.182 24 (M1) 0.156 G +228THS G KC=0.125$ LC=0.0234 +228TH cG M |a(K)exp=0.20 {I8} (1971He23); theory: |a(K)=0.125 +228TH cG 1987Da28 assigns this |g to be the 1539.2 to 968.4 transition +228TH2cG on the basis of coin with 911.2|g. However, the E(level) difference is +228TH3cG 570.25 {I9}. In {+228}Pa decay this |g is assigned to the 1724.3 level; +228TH4cG energy, intensity, multipolarity, and coin results agree with this +228TH5cG assignment. +228TH G 701.747 14 0.173 10 (M1) 0.091 A +228TH3 G FLAG=J +228THS G KC=0.0726$ LC=0.0135 +228TH G 755.315 4 1.00 3 M1 0.0747 A +228TH3 G FLAG=DJ +228THS G KC=0.0599$ LC=0.0111 +228TH cG M |a(K)exp=0.055 {I9} (1971He23), 0.057 {I8} (1960Ar06); +228TH2cG theory: |a(K)(M1)=0.0599, |a(K)(E2)=0.0127 +228TH G 1537.89 10 0.047 5 B +228TH2 G FL=186.823 +228TH G 1666.523 13 0.178 13 M1 A +228TH3 G FLAG=J +228TH G 1724.21 4 0.029 3 A +228TH L 1735.450 25 (4+) +228TH B 0.133 9 8.14 4 +228THS B EAV=111.7 10 +228TH G 1217.03 10 0.021 3 B +228TH2 G FL=519.192 +228TH G 1357.78 15 0.020 4 B +228TH2 G FL=378.179 +228TH G 1548.65 4 0.038 4 A +228TH G 1677.67 3 0.054 5 A +228TH L 1743.89 3 4+ +228TH B 0.389 18 7.65 2 +228THS B EAV=109.1 10 +228TH G 399.62 10 0.029 3 [E1] 0.0212 +228THS G KC=0.0162$ LC=0.00293$ MC=0.000701$ NC+=0.000250 +228TH G 590.4 0.017 3 [E2] 0.0295 S +228TH3 G FLAG=T +228THS G KC=0.0200$ LC=0.00716 +228TH G 684.0 0.019 5 [E1] S +228TH3 G FLAG=T +228TH G 1347.50 15 0.015 3 +228TH cG |g not seen in {+228}Pa decay. I|g<0.004 from upper limit in +228TH2cG {+228}Pa decay +228TH G 1365.70 15 0.014 3 M +228TH G 1415.66 10 0.021 4 [E3] P +228TH3 G FL=328.003 +228TH G 1557.11 4 0.178 13 (E2+M1) +1.2 2 A +228TH3 G FLAG=JK +228TH G 1686.09 7 0.095 8 (E2) A +228TH3 G FLAG=J +228TH L 1758.24 12 2+,3,4+ +228TH B 0.062 13 8.39 10 +228THS B EAV=104.6 10 +228TH G 326.04 20 0.033 5 [D,E2] 0.4 3 +228TH G 1571.52 20 0.0057 16 +228TH G 1700.59 20 0.0101 23 +228TH L 1760.218 24 2+,3(+) G +228TH B 0.119 10 8.10 4 +228THS B EAV=104.0 10 +228TH G 737.72 5 0.037 4 [M1,E2] 0.05 3 +228TH cG M |a(K)exp=0.28 {I14} (1971He23); theory: |a(K)(M1)=0.0637, +228TH2cG |a(K)(E2)=0.0133, |a(K)(M2)=0.147. Unconfirmed |a(K)exp seems to +228THxcG indicate E0 admixture +228TH G 791.49 25 0.010 3 [M1,E2] 0.04 3 @ +228TH3 G FL=968.968$ FLAG=N +228THS G KC=0.032 21$ LC=0.007 4 +228TH cG |g placed here with I|g=0.023 {I7} by 1987Da28 +228TH G 1573.26 5 0.033 3 (E2) A +228TH3 G FLAG=J +228TH G 1702.43 5 0.048 5 A +228TH L 1795.90 10 3-,4+ +228TH B 0.01 LT 9.0 GT +228THS B EAV=92.9 10 +228TH G 1276.69 10 0.014 3 +228TH G 1738.22 25 0.018 4 +228TH L 1797.65 8 2+ +228TH B 0.045 6 8.37 6 +228THS B EAV=92.4 10 +228TH G 1401.49 10 0.012 3 +228TH G 1469.71 15 0.020 4 +228TH G 1740.4 3 0.011 3 +228TH G 1797.5 5 0.0021 8 +228TH L 1892.996 17 3+ +228TH B 0.112 7 7.51 4 +228THS B EAV=63.7 9 +228TH G 666.45 10 0.005 2 [E1] @ +228TH3 G FLAG=N +228TH cG This placement of the |g suggested by {+228}Pa decay. +228TH G 692.5 0.0056 7 (M1+E2+E0) 0.24 3 S +228TH3 G FLAG=T +228TH G 770.04 0.0063 8 [E1] S +228TH3 G FLAG=T +228TH G 870.46 4 0.044 4 M1 0.0515 A +228TH3 G FLAG=J +228THS G KC=0.0414$ LC=0.00762 +228TH G 924.03 0.0075 10 [M1,E2] S +228TH3 G FLAG=T +228TH G 1706.19 10 0.0085 10 M1+E2 +0.42 4 J +228TH3 G FLAG=K +228TH G 1835.43 10 0.038 4 E2+M1 +2.9 3 J +228TH3 G FLAG=K +228TH L 1899.95 4 2+ G +228TH cL Quasiparticle configuration=((|p 3/2[651])(|p 1/2[660])) or +228TH2cL configuration=((|p 3/2[651])(|p 1/2[400])) suggested for this level +228TH B 0.071 6 7.66 4 +228THS B EAV=61.7 9 +228TH G 877.46 10 0.014 3 [M1,E2] 0.032 19 +228THS G KC=0.025 15$ LC=0.005 3 +228TH G 930.93 10 0.0124 18 & +228TH cG This placement of |g suggested in {+228}Pa decay +228TH G 1713.47 20 0.0054 10 +228TH cG |g not seen in {+228}Pa decay. I|g<0.002 from upper limit in +228TH2cG {+228}Pa decay +228TH G 1842.13 10 0.042 4 M1+E2 -0.86 14 J +228TH3 G FLAG=K +228TH G 1900.07 20 0.0028 5 +228TH L 1906.64 10 (2+) +228TH B 0.034 5 7.94 7 +228THS B EAV=59.7 9 +228TH G 490.33 15 0.0111 23 [D,E2] 0.12 11 +228TH G 1074.71 15 0.010 3 +228TH G 1907.18 20 0.0119 10 +228TH L 1928.57 6 3+ +228TH B 0.057 7 7.57 6 +228THS B EAV=53.4 9 +228TH G 168.65 10 0.0030 7 [M1,E2] 2.9 16 @ +228TH2 G FLAG=Q +228THS G KC=1.9 17$ LC=0.73 6$ MC=0.19 3$ NC+=0.070 10 +228TH G 389.12 15 0.0103 15 [M1,E2] 0.26 18 +228TH G 1742.0 3 0.0080 23 +228TH G 1870.83 10 0.0243 23 (M1+E2) J +228TH L 1937.16 9 2+,3,4+ +228TH B 0.046 5 7.61 6 +228THS B EAV=50.9 9 +228TH G 397.94 10 0.027 3 +228TH G 1062.55 15 0.010 3 +228TH G 1750.54 20 0.0080 8 +228TH G 1879.6 3 0.0013 5 +228TH L 1944.895 11 3+ G +228TH B 0.244 14 6.83 4 +228THS B EAV=48.7 9 +228TH G 718.48 15 0.019 4 (E1) J +228TH G 776.56 10 0.019 6 +228TH G 791.49 25 0.013 3 (M1) 0.0661 @ +228TH3 G FLAG=N +228THS G KC=0.0530$ LC=0.0098 +228TH cG This placement suggested by {+228}Pa decay +228TH G 853.17 10 0.0031 4 [M1,E2] 0.034 20 B +228TH2 G FL=1091.017$ FLAG=U +228THS G KC=0.027 17$ LC=0.005 3 +228TH cG RI from branching ratio in {+228}Pa decay +228TH G 921.98 10 0.0147 21 & +228TH cG This placement suggested by {+228}Pa decay +228TH G 975.96 5 0.050 5 M1 0.0381 J +228TH3 G FL=968.968 +228THS G KC=0.0306$ LC=0.00563 +228TH G 1000.69 15 0.005 +228TH cG |g not seen in {+228}Pa decay. I|g<0.002 from upper limit in +228TH2cG {+228}Pa decay. +228TH G 1758.11 10 0.035 4 E2+M1 -9 1 J +228TH3 G FLAG=K +228TH G 1887.10 5 0.090 8 E2+M1 -9.1 1 J +228TH3 G FLAG=K +228TH L 1958.72 22 2+ +228TH B 0.0033 7 8.59 10 +228THS B EAV=44.8 9 +228TH G 1772.2 3 0.0018 5 +228TH G 1958.4 3 0.0015 5 +228TH L 1987.46 10 4+ +228TH B 0.038 3 7.27 5 +228THS B EAV=36.8 9 +228TH G 1017.92 20 0.0057 13 +228TH3 G FL=968.968 +228TH G 1609.41 15 0.0077 15 +228TH G 1800.86 20 0.0044 8 +228TH G 1929.78 20 0.0199 21 +228TH L 2010.11 5 2+,3,(4+) +228TH cL 1987Da28 suggests that this is the 4+ level of K|p=2+ +228TH2cL rotational band built on the 1900.00 level. However, the relatively +228TH3cL strong 887.33|g to the 1123-keV level would then have M2 mult. +228TH B 0.27 4 6.19 8 +228THS B EAV=30.5 9 +228TH G 214.85 10 0.029 4 [D,E2] 1.2 11 +228TH G 372.57 20 0.0067 15 [D,E2] 0.26 24 +228TH3 G FL=1638.284 +228TH G 887.33 10 0.027 3 +228TH G 918.97 10 0.027 3 +228TH cG M |a(K)exp=1.1 {I2} (1971He23) indicates E0 component; +228TH2cG however, then the relatively strong |g to 1123 {I2}- level must be M2 +228TH G 1040.92 15 0.044 9 +228TH G 1823.22 10 0.044 4 +228TH G 1952.33 15 0.059 5 +228TH L 2013.6 3 2+,3,4+ +228TH B 0.0029 9 8.11 14 +228THS B EAV=29.6 9 +228TH G 1826.7 3 0.0021 8 +228TH G 1955.9 5 0.0008 3 +228TH L 2022.84 10 +228TH B 0.054 6 6.73 7 +228THS B EAV=27.1 9 +228TH G 384.63 20 0.0067 15 [D,E2] 0.24 22 +228TH cG Not reported in {+228}Pa decay +228TH G 1053.09 20 0.013 4 B +228TH3 G FL=968.968 +228TH G 1148.12 15 0.0059 13 +228TH G 1190.81 20 0.0062 16 +228TH G 1965.24 20 0.0204 18 +228TH cG RI from {+228}Pa decay I|g|<0.0085 {I23} +228TH L 2029.84 16 1,2+ +228TH B 0.019 4 7.09 10 +228THS B EAV=25.2 8 +228TH G 939.87 15 0.009 3 B +228TH3 G FL=1091.017$ +228TH G 1013.58 20 0.0046 13 +228TH G 1971.9 3 0.0036 8 +228TH G 2029.4 5 0.0018 5 +228TH L 2036.99 17 2+,3,4+ +228TH B 0.0062 10 7.48 9 +228THS B EAV=23.3 8 +228TH G 1850.13 20 0.0044 8 +228TH G 1979.3 3 0.0018 5 +228TH L 2123.1 3 (2+) +228TH B 0.0042 10 3.5 20 +228THS B EAV=1.0 8 +228TH G 1795.1 5 0.0021 8 +228TH G 1936.3 3 0.0021 5 + +228TH 228PA EC DECAY 1995BA42 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228PA P 0.0 3+ 22 H 1 2148 5 +228TH N 0.095 5 0.095 5 0.9815 17 1.01885 +228TH PN 2 +228TH cN NR From |SI(|g+ce)(g.s.)=100. No direct |e+|b{++} decay to g.s. +228TH2cN (|DJ=3 transition) +228TH cL 1995Ba42: measured |g, ce, |g|g, |g(|q,H,T) +228TH cL 1993Ac02: measured |g, ce +228TH cL 1973Ku09: measured |g, ce, |g|g, |g(ce) +228TH cL 1971Am05, 1970SpZW, 1960Ar06: measured ce +228TH cL The decay scheme for {+228}Pa and the band assignments in +228TH2cL {+228}Th are those proposed by 1995Ba42. For a discussion of the +228TH3cL structure of the bands, and of the band parameters, see 1995Ba42 +228TH cL E Rounded off values from adopted levels +228TH cL J From adopted levels +228TH CL BAND(A) GS ROTATIONAL BAND +228TH CL BAND(B) KPI=0- BAND +228TH CL BAND(C) FIRST KPI=0+ BAND +228TH CL BAND(D) SECOND KPI=0+ BAND +228TH CL BAND(F) KPI=1- BANDHEAD +228TH CL BAND(G) FIRST KPI=2+ BAND +228TH CL BAND(H) KPI=2- BAND +228TH CL BAND(I) SECOND K=2+ BAND +228TH CL BAND(J) KPI=3- BANDHEAD +228TH cE J|p({+228}Pa)=3+ +228TH cE Q(|e)=2148 {I5} (1995Au04) +228TH cE IE,TI Deduced from intensity balance in level scheme +228TH cG E,RI From 1995Ba42, unless otherwise noted +228TH cG M Based on |g(|q,H,T) of 1995Ba42 and on |a's and Ice +228TH2cG ratios. |a's deduced from I(ce(K)) of 1973Ku09, 1971Am05 and/or +228TH3cG 1960Ar06 as noted and I|g of 1995Ba42. The I(ce(K)) are normalized to +228TH4cG I|g at 911.204|g (|a(K)(E2)=0.0091). +228TH cG MR From |g(|q,H,T) in 1995Ba42, unless otherwise noted +228TH cG CC Values correspond to E|g given in adopted gammas +228TH cG E(G) |g is seen as a part of a multiplet in 1995Ba42 +228TH cG E(J),RI(J)$From 1973Ku09; |g not seen by 1995Ba42 +228TH cG E(N) Energy calculated from E(level), existence of |g suggested +228TH2cG by {+228}Ac decay +228TH cG E(P) This line seems to be a doublet of lines with E|g|?1431 +228TH2cG and 1433 keV, which are both in coin with the 4+ to 2+ transition +228TH cG E(R) |g's of approximately same energy and intensity are reported +228TH2cG in both {+228}Ac and {+228}Pa decays. On the basis of coin with 911.2|g +228TH3cG it is suggested in {+228}Ac decay that this |g feeds the 2+ 968.97 +228TH4cG level. In {+228}Pa decay, the |g is placed feeding the 3- 968.37 +228TH5cG level. The energy of the |g (E|g=674.65 {I5}) agrees with decay to the +228TH6cG 968.37 level. Possibly the |g is a doublet feeding both the 968.97 and +228TH7cG 968.37 levels with I|g(doublet)=2.64 {I18} +228TH cG RI(I) Derived from coin spectrum +228TH cG RI(M) Intensity of doublet divided by evaluator by comparison +228TH2cG with branching ratios and the intensities of the doublet as +228TH3cG measured in both {+228}Ac and {+228}Pa decays +228TH cG RI(Q) The total intensity of this doublet does not agree with +228TH2cG the total intensity of this |g as seen in {+228}Ac decay, considering +228TH3cG the observed branching ratios from the 1646.0 level in both decays and +228TH4cG from the 1682.8 level in {+228}Pa decay. +228TH cG M(K) From |a data of 1995Ba42 (data not given) +228TH cG M(A),MR(E)$From adopted gammas +228TH G 141.9 1 0.21 3 +228TH G 206.30 5 0.50 7 +228TH G 216.1 1 1.1 3 +228TH cG |g dominant in {+224}Ra +228TH cG M possibly E1, no ce seen (1960Ar06) +228TH G 357.3 1 0.37 4 +228TH G 425.4 1 0.41 5 +228TH G 443.8 1 0.62 7 +228TH G 471.7 2 0.37 9 +228TH G 490.7 1 0.82 4 G +228TH G 555.7 1 1.5 2 +228TH G 621.6 3 1.0 2 G +228TH G 796 1 2.0 AP J +228TH cG |g seen coin only (1973Ku09) +228TH G 801.2 1 0.46 5 +228TH cG M |a(K)exp=0.14 {I4} (1973Ku09); theory: |a(K)(E2)=0.0141, +228THxcG |a(K)(M1)=0.0512 +228TH G 895.9 1 1.41 7 +228TH G 1017.2 2 0.82 12 G +228TH G 1018.9 2 1.3 2 +228TH G 1024.4 2 0.43 6 +228TH G 1058.5 1 0.66 7 +228TH G 1062.4 1 0.57 6 +228TH G 1074.7 3 0.42 5 G +228TH G 1077.5 3 0.36 5 G +228TH G 1103.4 1 0.44 4 +228TH G 1175.6 2 0.24 4 G +228TH G 1281.7 2 0.29 3 +228TH G 1286.3 3 0.39 9 G +228TH cG E this |g is placed from the 1682.8 level by 1995Ba42. +228TH2cG A 1286.27 {I20} |g seen in {+228}Ac decay is placed from the 1344.08 +228TH3cG level. However, the ratio I|g/I|g(1496.15|g)=0.14 {I3} here does not +228TH4cG agree with I|g/I|g(1495.91|g)=0.058 {I15} in {+228}Ac decay. The +228TH5cG calculated energy of the transition from the 1682.8 level is 1286.73 +228TH6cG {I3}. From 1344.08 level the ratio I|g/I|g(947.98|g)=0.47 {I10} in +228TH7cG {+228}Ac decay; in this decay, I(948|g)|?0.2 giving the estimated +228THxcG I|g|?0.1 for that placement. +228TH G 1310.8 1 0.48 5 +228TH G 1358.0 2 0.34 5 +228TH G 1432 1 1.3 LE @ +228TH2 G FLAG=P +228TH G 1480.4 3 0.77 10 G +228TH cG M |a(K)exp=0.009 {I3} (1973Ku09); theory: |a(K)(E2)=0.00385, +228THxcG |a(K)(M1)=0.0104 +228TH G 1483.2 3 0.52 7 G +228TH G 1486.3 3 0.27 7 G +228TH G 1542.8 2 0.28 5 +228TH G 1547.2 3 0.54 11 G +228TH G 1609.6 1 0.92 7 (M1) +228TH cG M |a(K)exp=0.014 {I3} (1973Ku09); theory: |a(K)(M1)=0.0092 +228TH G 1677.9 1 0.65 5 +228TH G 1746.2 2 0.34 4 +228TH G 1752.1 2 0.37 4 G +228TH G 1784.4 2 0.62 5 G +228TH G 1807.2 1 0.60 5 +228TH cG M |a(K)exp=0.006 {I3} (1973Ku09); theory: |a(K)(M1)=0.0068, +228THxcG |a(K)(E2)=0.0028 +228TH G 1865.1 1 0.80 4 +228TH G 1919.4 2 0.26 3 +228TH G 1936.0 2 0.20 3 +228TH G 1958.1 2 0.29 3 +228TH L 0.0 0+ A +228TH L 57.76 2+ A +228TH E 0.065 LE 9.9 LE 8.3 GE 10 LE +228THS E EAV=502.6 22 $CK=0.7750 $CL=0.1625 $CM+=0.05599 +228TH G 57.76 2 5.5 3 E2 156 +228THS G LC= 114$ MC= 31.1$ N+= 11.5 +228TH cG M L1/L3=0.036 {I11}, L2/L3=1.187 {I5}, M1/M2=0.0328 {I27}, +228TH2cG M2/M3=1.137 {I19} (1970SpZW); theory: L1/L3=0.0390, L2/L3=1.19, +228TH3cG M1/M2=0.0382, M2/M3=1.14 +228TH L 186.82 4+ A +228TH E 0.009 5 2.1 12 8.94 25 2.1 12 +228THS E EAV=446.7 22 $CK=0.7758 $CL=0.1636 $CM+=0.05644 +228TH G 129.06 2 45.7 23 E2 3.81 +228THS G KC= 0.269 $LC= 2.58$ MC= 0.707$ N+= 0.263 +228TH cG M L12/L3=1.62 {I12} (1960Ar06); theory: L12/L3=1.70 +228TH L 328.00 1- B +228TH E 0.7 LE 10.4 GE 0.7 LE 1U +228THS E CK=0.7572 $CL=0.1793 $CM+=0.06308 +228TH G 270.25 2 33.9 17 E1 0.0474 +228THS G KC= 0.0379 $LC=0.00721$ MC=0.00173 $N+=0.00061 $ +228TH cG M |a(K)exp=0.032 (1960Ar06); theory: |a(K)=0.0379 +228TH G 328.03 4 30 3 E1 0.0308 G +228THS G KC=0.0247$ LC=0.00458$ MC=0.00110 $N+=0.00039 $ +228TH cG M |a(K)exp=0.019 {I2} (1960Ar06); theory: |a(K)=0.0247 +228TH L 378.18 6+ A +228TH G 191.35 2 4.60 23 E2 0.791 A +228THS G KC=0.174$ LC=0.450$ MC=0.123$ NC+=0.0454 +228TH cG M |a(L3)exp=0.16 (1960Ar06); theory: |a(L3)=0.141 +228TH L 396.08 3- B +228TH E 0.001 1 0.8 5 9.3 3 0.8 5 +228THS E EAV=354.3 23 $CK=0.7757 $CL=0.1655 $CM+=0.05720 +228TH G 68.08 0.04 LE [E2] 70.2 N +228THS G LC=51.0$ MC=14.0$ NC+=5.16 +228TH cG RI limit of I|g deduced from the limit of Ice(L2) (1993Ac02) +228TH G 209.26 2 26.3 13 E1 0.086 +228THS G KC=0.0678$ LC=0.0135$ MC=0.00323$ NC+=0.00114 +228TH cG M K/L12=4.4 (1960Ar06); theory: K/L12(E1)=5.9, K/L12(E2)=0.69, +228TH2cG K/L12(M1)=5.3. |a(K)exp=0.075 (1960Ar06); theory: |a(K)(E1)=0.0678, +228THxcG |a(K)(M1)=1.94 +228TH G 338.32 2 82 4 E1 0.0288 +228THS G KC=0.0231$ LC=0.00426$ MC=0.00102$ NC+=0.00036 +228TH cG M |a(K)exp=0.019 (1960Ar06); theory: |a(K)=0.0231 +228TH L 519.19 5- B +228TH E 0.53 13 10.33 11 0.53 13 1U +228THS E CK=0.7523 $CL=0.1830 $CM+=0.06464 +228TH G 141.00 2 2.08 10 E1 0.220 K +228THS G KC=0.171$ LC=0.0366$ MC=0.0088$ NC+=0.00313 +228TH G 332.37 2 21.0 11 E1 0.0299 K +228THS G KC=0.0240$ LC=0.00444$ MC=0.00106$ NC+=0.00038 +228TH cG M ce(K) not seen (1960Ar06) +228TH L 695.6 7- ? +228TH cL Possibly fed by multiply placed 601.7|g from the 1297.4 (5)- +228TH2cL level. The 317.4|g from this level is not seen by 1995Ba42. +228TH L 831.82 0+ C +228TH E 0.03 LE 10.4 GE 0.03 LE +228THS E CK=0.7702 $CL=0.1705 $CM+=0.05928 +228TH G 503.7 2 0.78 8 (E1) 0.0125 A +228THS G KC=0.0101$ LC=0.00178 +228TH G 774.06 0.26 AP [E2] 0.0167 N +228THS G KC=0.0122$ LC=0.00339 +228TH cG E,RI |g is part of a multiplet in 1995Ba42; I|g from branching +228TH2cG ratio in adopted |g's +228TH L 874.47 2+ C +228TH E 0.52 6 9.15 6 0.52 6 +228THS E CK=0.7693 $CL=0.1712 $CM+=0.05955 +228TH G 478.45 4 3.17 17 E1 0.0139 K +228THS G KC=0.0112$ LC=0.00199$ MC=0.00047$ NC+=0.00017 +228TH G 546.45 2 2.80 14 [E1] 0.0107 +228THS G KC=0.00864$ LC=0.00151 +228TH G 688.14 8 1.21 14 [E2] 0.0212 & +228TH3 G FL=186.82 +228THS G KC=0.0151$ LC=0.00464 +228TH G 816.50 12 0.33 4 [M1,E2] 0.038 23 +228THS G KC=0.030 19$ LC=0.006 3 +228TH G 874.5 2 0.77 12 [E2] 0.0131 G +228THS G KC=0.0098$ LC=0.00249 +228TH L 944.20 1,2+ +228TH cL Possibly J|p=1+, K|p=1+ bandhead. (p,t) suggests possible +228TH2cL unnatural parity level; however, log| {Ift}=9.79 for decay from 3+ +228TH3cL {+228}Pa would rule out J|p=1+ +228TH E 0.108 19 9.78 8 0.108 19 +228THS E CK=0.7676 $CL=0.1724 $CM+=0.06005 +228TH G 616.15 5 1.07 8 +228TH G 944.31 6 0.98 8 +228TH L 968.37 3- F +228TH E 0.39 11 9.20 13 0.39 11 +228THS E CK=0.7670 $CL=0.1728 $CM+=0.06024 +228TH G 449.23 3 2.45 13 [E2] 0.0563 +228THS G KC=0.0335$ LC=0.0168$ MC=0.00439$ NC+=0.00162 +228TH G 572.30 2 5.8 3 [M1,E2] 0.09 7 +228THS G KC=0.07 6$ LC=0.016 8 +228TH G 640.33 5 1.53 10 [E2] 0.0247 +228THS G KC=0.0172$ LC=0.00567 +228TH cG M |a(K)exp=0.16 {I3} (1973Ku09), 0.18 (1960Ar06); theory: +228THxcG |a(K)(E2)=0.0172 +228TH L 968.97 2+ G +228TH E 9.2 19 7.83 10 9.2 19 +228THS E CK=0.7669 $CL=0.1728 $CM+=0.06024 +228TH G 782.08 3 4.70 23 [E2] 0.0163 +228THS G KC=0.0119$ LC=0.00330 +228TH cG M |a(K)exp=0.029 (1960Ar06); theory: |a(K)(E2)=0.0119 +228TH G 911.20 2 247 12 E2+M1 +24 8 0.0121 +228THS G KC=0.0091$ LC=0.00225 +228TH cG M |a(K)(E2)=0.0091 used for normalization of I(ce(K)) of +228TH2cG 1973Ku09, 1960Ar06 to the I|g of 1995Ba42 +228TH G 968.98 2 149 8 E2 0.0107 +228THS G KC=0.00815$ LC=0.00194 +228TH cG M |a(K)exp=0.0074 {I30} (1973Ku09), 0.0082 (1960Ar06); +228TH2cG theory: |a(K)(E1)=0.0030, |a(K)(E2)=0.00815 +228TH L 979.50 2+ D +228TH E 0.37 5 9.22 7 0.37 5 +228THS E CK=0.7667 $CL=0.1730 $CM+=0.06033 +228TH G 583.4 1 3.6 3 [E1] 0.0094 I +228THS G KC=0.00761$ LC=0.00132 +228TH cG RI does not agree with the branching ratio in {+228}Ac decay +228TH G 651.40 5 1.59 10 [E1] +228TH3 G FLAG=G +228THS G CC=0.00758$ KC=0.00617$ LC=0.00106 +228TH cG RI indicated as a doublet in 1995Ba42, however, no other +228TH2cG placement of |g given. +228TH G 792.68 1.4 AP [E2] 0.0159 G +228TH3 G FLAG=N +228THS G KC=0.0116$ LC=0.00319 +228TH cG RI deduced from branching ratio in adopted |g's +228TH G 921.74 0.30 LT [M1,E2] 0.028 17 G +228TH3 G FLAG=N +228THS G KC=0.022 14$ LC=0.0044 22 +228TH cG |g seen in {+228}Ac decay; here |g is part of a multiplet +228TH cG RI deduced from branching ratio in adopted |g's +228TH G 979.4 4 0.5 AP [E2] 0.0105 G +228THS G KC=0.00799$ LC=0.00180 +228TH L 1016.41 2+,3-,4+ +228TH cL Possibly 2+ member of K|p=1+ band. +228TH E 0.34 8 9.22 11 0.34 8 +228THS E CK=0.7656 $CL=0.1738 $CM+=0.06064 +228TH G 620.27 5 1.41 10 G +228TH cG M |a(K)exp=0.16 {I3} (1973Ku09); theory: +228TH2cG |a(K)(E1)=0.00677, |a(K)(E2)=0.0183, |a(K)(M1)=0.100 +228TH G 688.14 8 1.21 14 & +228TH3 G FL=328.00 +228TH G 958.69 11 5.0 6 G +228TH G 1016.41 0.34 6 G +228TH3 G FLAG=N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.7 (1995Ba42) +228TH L 1022.53 (3)+ G +228TH E 1.8 8 8.49 20 1.8 8 +228THS E CK=0.7654 $CL=0.1739 $CM+=0.06069 +228TH G 835.65 2 42.7 22 E2 0.0143 +228THS G KC=0.0106$ LC=0.00279 +228TH cG M |a(K)exp=0.0119 {I17} (1973Ku09), 0.0105 {I15} (1960Ar06); +228TH2cG theory: |a(K)=0.0106 +228TH cG MR |<-9 from |g(|q,H,T) (1995Ba42) +228TH G 964.80 2 122 6 E2+M1 -7.2 10 0.0108 +228THS G KC=0.00821$ LC=0.00196 +228TH cG M |a(K)exp=0.012 {I5} (1973Ku09), 0.011 (1960Ar06); theory: +228THxcG |a(K)=0.00821 +228TH L 1059.93 4- +228TH cL J 3-,4+,5- ruled out by |g(|q,H,T) (1995Ba42) +228TH E 0.15 4 9.54 12 0.15 4 +228THS E CK=0.7643 $CL=0.1747 $CM+=0.06103 +228TH G 540.66 5 0.89 6 [M1,E2] 0.11 8 +228THS G KC=0.08 6$ LC=0.018 9$ +228TH G 663.92 8 1.44 11 (M1+E2) 0.06 4 +228THS G KC=0.05 4$ LC=0.010 6 +228TH cG M |a(K)exp=0.10 {I3} (1973Ku09), 0.075 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0842, |a(K)(E2)=0.0161 +228TH G 873.0 2 1.66 17 [E1] 0.00441 G +228THS G KC=0.00361$ LC=0.00060 +228TH L 1091.02 4+ G +228TH E 0.66 18 8.87 12 0.66 18 +228THS E CK=0.7632 $CL=0.1754 $CM+=0.06133 +228TH G 694.8 2 0.76 10 [E1] 0.00671 G +228THS G KC=0.00547$ LC=0.00093 +228TH G 713.1 3 0.48 11 [E2] 0.0197 I +228THS G KC=0.0141$ LC=0.00421 +228TH G 904.19 3 26.5 13 E2 0.0123 +228THS G KC=0.0092$ LC=0.00229 +228TH cG M |a(K)exp=0.012 {I3} (1973Ku09), 0.0092 (1960Ar06) +228TH2cG theory: |a(K)(E2)=0.00921, |a(K)(M1)=0.0374 +228TH cG MR |>+3.7 from |g(|q,H,T) (1995Ba42) +228TH G 1033.27 7 7.6 4 E2 0.0095 +228TH cG M E2 in 1995Ba42; possibly from |g(|q,H,T), although not +228TH2cG listed in table 3 +228TH L 1122.95 2- H +228TH E 0.7 4 8.82 25 0.7 4 +228THS E CK=0.7621 $CL=0.1762 $CM+=0.06167 +228TH G 100.42 0.5 LT (E1+M2) 0.23 AP 3.2 AP A +228TH3 G FLAG=EN +228THS G LC=2.4$ MC=0.64$ NC+=0.25 +228TH cG RI deduced from I(ce(L1)) +228TH G 153.95 2 5.5 3 E1 0.178 K +228THS G KC=0.139$ LC=0.0292$ MC=0.00703$ NC+=0.00250 +228TH cG M no ce(K) observed (1960Ar06) +228TH G 726.90 10 4.4 6 (E2) 0.0189 A +228THS G KC=0.0136$ LC=0.00400 +228TH G 794.97 2 34.4 17 E2+M1 -4.4 10 0.0182 15 +228THS G KC=0.0136 13$ LC=0.00349 20 +228TH cG M |a(K)exp=0.014 {I3} (1973Ku09), 0.014 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0116, |a(K)(M1)=0.0524 +228TH G 1065.21 7 1.03 7 [E1] 0.00311 +228THS G KC=0.00255$ LC=0.00042 +228TH L 1153.47 2+ I +228TH E 0.51 25 8.93 22 0.51 25 +228THS E CK=0.7610 $CL=0.1770 $CM+=0.06201 +228TH G 174.02 4 0.30 3 M1+E2 1.2 +11-6 2.23 18 A +228TH2 G FLAG=E +228THS G KC=1.5 10$ LC=0.66 4$ MC=0.171 22$ NC+=0.063 5 +228TH cG RI not in agreement with branching ratio in {+228}Ac decay +228TH G 184.61 5 0.21 3 E0+M1 63 8 @ +228TH3 G FL=968.97$ FLAG=M +228TH cG M |a(L12)exp=15 (1960Ar06); |a(L12)=10.2 for 5.4% M1 (10.5 for +228TH2cG 1.4%E2) transition deduced from {+228}Ac |b{+-} decay +228TH cG CC from {+228}Ac |b{+-} decay +228TH G 278.66 2 0.44 6 (M1+E2) 0.7 5 @ +228TH3 G FL=874.47$ FLAG=AM +228THS G KC=0.5 4$ LC=0.13 4$ MC=0.033 7$ NC+=0.0120 25 +228TH cG M 1995Ba42 gives M=(E2), data not given. For the doublet: +228TH2cG |a(K)exp=0.26 (1960Ar06); theory: |a(K)(M1)=0.872, |a(K)(E2)=0.0854 +228TH G 321.71 3 0.67 4 [E2] 0.140 +228THS G KC=0.0643$ LC=0.0550$ MC=0.0147$ NC+=0.00544 +228TH G 966.64 0.5 LE [E2] 0.0108 I +228TH3 G FLAG=N +228TH G 1095.74 14 0.32 6 [M1,E2] 0.018 10 +228TH G 1153.6 3 0.37 8 +228TH L 1168.38 3- H +228TH E 0.9 3 8.66 15 0.9 3 +228THS E CK=0.7604 $CL=0.1774 $CM+=0.06219 +228TH G 77.36 0.44 9 [E1] 0.235 N +228THS G LC=0.177$ MC=0.0431$ NC+=0.0150 +228TH cG RI deduced from branching ratio in adopted |g's. I|g|<0.6 +228TH2cG (1995Ba42) +228TH G 145.82 2 2.57 13 E1 0.203 K +228THS G KC=0.158$ LC=0.0336$ MC=0.00809$ NC+=0.00287 +228TH cG M ce not seen (1960Ar06) +228TH G 199.40 2 4.65 23 E1 0.096 K +228THS G KC=0.0758$ LC=0.0152$ MC=0.00365$ NC+=0.00129 +228TH cG M ce not seen (1960Ar06) +228TH G 649.12 7 0.97 9 [E2] 0.0240 & +228THS G KC=0.0168$ LC=0.00546 +228TH G 772.28 2 25.2 13 E2+M1 -3.4 +8-27 0.021 3 +228THS G KC=0.0157 24$ LC=0.0040 4 +228TH cG M |a(K)exp=0.0157 {I22} (1973Ku09), 0.015 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0122, |a(K)(M1)=0.0565 +228TH cG MR from |a(K)exp and -19|<|d|<-3 from |g(|q,H,T) +228TH2cG (1995Ba42) +228TH G 840.36 4 15.9 8 E2 0.0142 +228THS G KC=0.0105$ LC=0.00275 +228TH cG M |a(K)exp=0.0092 {I24} (1973Ku09), 0.0113 (1960Ar06); theory: +228TH2cG |a(K)=0.0105 +228TH G 981.5 2 0.76 10 [E1] I +228THS G CC=0.00358$ KC=0.00294$ LC=0.00049 +228TH G 1110.55 5 4.7 5 E1 @ +228THS G CC=0.00289$ KC=0.00237$ LC=0.00039 +228TH cG RI I|g(doublet)=7.1 {I4} and I|g(|g from 1297.42 level)=2.4 +228TH2cG {I2} (from coin) +228TH cG M for the 1110.55 doublet: |a(K)exp=0.0013 {I3} (1973Ku09), +228TH2cG 0.0019 (1960Ar06); theory: |a(K)=0.00237 +228TH L 1174.51 (5+) G +228TH G 987.92 10 4.31 22 [M1,E2] 0.024 14 +228THS G KC=0.019 11$ LC=0.0037 18 +228TH L 1175.4 2+ ? +228TH cL Possibly fed by multiply placed 584.7|g from the 1760.2 +228TH2cL level, and the 750.10|g from the 1925.2 level. However, the 988.63|g +228TH3cL and the 1117.63|g from this level were not seen by 1995Ba42. +228TH L 1200.5 (3)+ I +228TH E 0.13 LE 9.5 GE 0.13 LE +228THS E CK=0.7590 $CL=0.1784 $CM+=0.06259 7 +228TH G 178.14 7 0.2 LE E0 1.2 +228TH cG E from ce(L1) (1995Ba42) +228TH cG M no |g seen. No ce(L3) seen, |a(L12)exp>6 (1960Ar06) +228TH cG TI I(ce(L12)) (1960Ar06) +228TH G 231.50 5 0.92 5 [M1,E2] 1.1 8 +228THS G KC=0.8 7$ LC=0.24 4$ MC=0.061 6$ NC+=0.0223 20 +228TH G 1013.54 13 0.38 5 [M1,E2] 0.022 13 & +228THS G KC=0.018 11$ LC=0.0034 17 +228TH G 1142.78 0.10 3 [M1,E2] 0.017 9 +228THS G KC=0.013 8$ LC=0.0025 12 +228TH cG E deduced from E(level) +228TH L 1226.57 (4)- H +228TH E 0.3 LE 9.1 GE 0.3 LE +228THS E CK=0.7578 $CL=0.1792 $CM+=0.06294 7 +228TH G 135.51 2 1.04 6 E1 0.242 K +228THS G KC=0.188$ LC=0.0406$ MC=0.0098$ NC+=0.00348 +228TH G 204.05 2 6.0 3 E1 0.091 K +228THS G KC=0.0719$ LC=0.0143$ MC=0.00344$ NC+=0.00122 +228TH cG M ce not seen (1960Ar06) +228TH G 707.40 3 7.9 4 (E2) 0.0200 +228THS G KC=0.0143 $ LC=0.00431 +228TH cG M,MR |a(K)exp=0.020 {I6} (1973Ku09), thus |d|>2; theory: +228TH2cG |a(K)(E2)=0.0143, |a(K)(M1)=0.0711 +228TH G 830.48 3 29.0 15 E2(+M1) -7.7 9 0.0152 2 +228THS G KC=0.0113 2 $ LC=0.00293 3 +228TH cG M |a(K)exp=0.0140 {I18} (1973Ku09); theory: |a(K)(E2)=0.0107, +228THxcG |a(K)(M1)=0.0468 +228TH G 1039.87 6 2.92 15 +228TH L 1297.42 (5)- H +228TH E 0.16 LE 9.6 GE 0.16 LE 1U +228THS E CK=0.7009 8 $CL=0.2188 5 $CM+=0.08035 23 +228TH G 601.7 3 0.30 5 [E2] 0.0283 & ? +228TH cG Feeds the 695.6 level; see comment with the that level +228TH cG M |a(K)exp|>0.24 {I5} (1973Ku09); theory: |a(K)(E1)=0.00716, +228TH2cG |a(K)(E2)=0.0192, |a(K)(M1)=0.108 +228TH G 778.1 2 2.7 3 [M1,E2] 0.04 3 G +228THS G KC=0.034 22$ LC=0.007 4 +228TH G 901.4 3 2.0 3 [E2] 0.0123 G +228THS G KC=0.0093$ LC=0.00231 +228TH G 1110.55 5 2.4 2 E1 @ +228TH3 G FLAG=I +228TH cG M for the 1110.55 doublet: |a(K)exp=0.0013 {I3} (1973Ku09), +228TH2cG 0.0019 (1960Ar06); theory: |a(K)=0.00237 +228TH L 1344.08 3- J ? +228TH cL Possibly fed by the 399.94|g from the 1743.9 level, the +228TH2cL 415.91|g from the 1760.2 level, and the multiply placed 584.7|g from +228TH3cL the 1928.6 level; total feeding I(|g+ce)=0.97 {I13}. 1995Ba42 report an +228TH4cL indication of the strongest line deexciting this level, the 948|g +228TH5cL with I|g|?0.2; the other |g's deexciting this level were not seen +228TH6cL by 1995Ba42. Therefore, there is no intensity balance at this level. +228TH G 948 0.2 AP +228TH L 1416.1 2+,3- ? +228TH cL Possibly fed by the 477.1|g from the 1893.0 level and the +228TH2cL multiply placed 548.74|g from the 1965.0 level. However, although a +228TH3cL 471.7|g was seen (not placed in level scheme), the other |g's placed +228TH4cL from this level in {+228}Ac decay were not seen by 1995Ba42. +228TH L 1431.98 4+ +228TH cL J J|=3 from |g(|q,H,T) (1995Ba42) +228TH E 31.8 21 6.81 4 31.8 21 +228THS E CK=0.7450 $CL=0.1882 3 $CM+=0.06675 13 +228TH G 257.49 2 1.40 7 (M1) 1.36 K +228THS G KC=1.09$ LC=0.205$ MC=0.0495$ NC+=0.0180 +228TH G 263.62 2 2.17 11 E1 0.0502 K +228THS G KC=0.0400$ LC=0.00766$ MC=0.00184$ NC+=0.00065 +228TH G 278.66 2 1.61 21 [E2] 0.216 @ +228TH3 G FL=1153.47$ FLAG=M +228THS G KC=0.086$ LC=0.095$ MC=0.0257$ NC+=0.0095 +228TH cG M for the doublet: |a(K)exp=0.26 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.872, |a(K)(E2)=0.0854 +228TH G 340.98 2 20.5 10 E2+M1 -5.2 18 0.136 23 +228THS G KC=0.073 20$ LC=0.046 2$ MC=0.0122 5$ NC+=0.00450 17 +228TH cG M from K:L12:L3=140:90:30, |a(K)exp=0.061 (1960Ar06); theory: +228TH2cG K:L12:L3=140:74:18, |a(K)=0.073 {I20} +228TH G 409.45 2 100 5 E2+M1 -5.4 8 0.082 4 +228THS G KC= 0.049 4$ LC=0.0242 5$ MC=0.00631 10$ N+=0.00233 4 +228TH cG M |a(K)exp=0.049, K:L12:L3=54 {I3}:21 {I1}:4.6 {I3} +228TH2cG (1960Ar06); theory: |a(K)=0.049 {I4}, K:L12:L3=54:22:4.3 +228TH G 452.52 6 1.02 8 [E2] 0.0553 +228THS G KC=0.0330$ LC=0.0164$ MC=0.00429$ NC+=0.00158 +228TH G 463.02 2 224 11 E2 0.0522 +228THS G KC= 0.0316 $LC=0.0152 $MC=0.00397 $N+=0.00146 $ +228TH cG M |a(K)exp=0.044 {I5} (1973Ku09), |a(K)exp=0.035, K/L12=2.64 +228TH2cG {I21}, K/L3=11.6 {I8} (1960Ar06); theory: |a(K)=0.0316, K/L12=2.44, +228TH3cG K/L3=13.7; K/L3(M1)=1220 +228TH G 1053.80 0.5 AP I +228TH cG E deduced from E(level) +228TH G 1245.17 6 5.6 3 [M1,E2] 0.013 7 G +228THS G KC=0.011 6$ LC=0.0020 10 +228TH G 1374.26 7 1.0 AP +228TH L 1450.39 4- +228TH cL J J|=3 from |g(|q,H,T) (1995Ba42) +228TH E 8.7 8 7.35 5 8.7 8 +228THS E CK=0.7435 $CL=0.1893 4 $CM+=0.06722 14 +228TH G 18.41 3.7 5 [E1] 6.6 28 3 +228THS G L/T=0.59$ M/T=0.31 +228TH cG E deduced from E(level) +228TH cG TI deduced from coin experiment which gives branching=18% {I2} +228TH2cG for decay from 1450 level to 1432 level (1995Ba42). +228TH cG RI from I(|g+ce) and |a +228TH G 153.02 2 1.11 6 M1+E2 0.60 8 4.8 2 +228THS G KC=3.5 2$ LC=0.97 2$ MC=0.245 6$ NC+=0.090 2 +228TH cG M,MR from ce data (data not given) (1995Ba42) +228TH G 223.80 2 13.3 7 M1+E2 -0.18 5 1.97 3 +228THS G KC= 1.56 3$ LC= 0.302 1$ MC= 0.0729 2$ N+= 0.0266 1$ +228TH cG M |a(K)exp=1.32, K/L1=5.1 {I6}, ce(L3) not seen (1960Ar06); +228TH2cG theory: |a(K)=1.56, K/L1=5.93, K/L3=443 +228TH G 275.85 4 0.82 7 [E1] 0.0453 +228THS G KC=0.0362$ LC=0.00687$ MC=0.00165$ NC+=0.00058 +228TH G 282.01 2 18.6 9 M1+E2 -0.51 12 0.88 7 +228THS G KC=0.69 6$ LC= 0.145 6$ MC=0.0355 11$ N+=0.0129 4 +228TH cG M |a(K)exp=0.62, K/L12=4.1 {I5}, K/L3=58 {I6} (1960Ar06); +228TH2cG theory: |a(K)=0.69 {I6}, K/L12=4.9 {I6}, K/L3=133 {I43} +228TH G 327.45 4 31 3 [E2] 0.132 G +228THS G KC=0.0621$ LC=0.0515$ MC=0.0137$ NC+=0.00508 +228TH cG M |a(K)exp=0.055 (1960Ar06) based on the division of I|g and E1 +228TH2cG mult. in alternate placement. Theory: |a(K)(E2)=0.0619, |a(K)(M1)=0.559 +228TH G 359.36 3 1.30 7 [E1] 0.0252 +228THS G KC=0.0203$ LC=0.00372$ MC=0.00089$ NC+=0.00032 +228TH G 390.45 5 1.11 6 [M1,E2] 0.26 18 +228THS G KC=0.20 16$ LC=0.046 19$ MC=0.011 5$ NC+=0.0042 16 +228TH G 427.90 3 1.24 8 [E1] 0.0174 +228THS G KC=0.0141$ LC=0.00252$ MC=0.00060$ NC+=0.00022 +228TH G 434.01 3 1.73 10 [D,E2] 0.14 13 +228TH G 482.03 5 1.84 13 [M1,E2] 0.15 10 +228THS G KC=0.11 9$ LC=0.025 12$ MC=0.006 3$ NC+=0.0022 10 +228TH G 1054.23 6 3.3 3 [M1,E2] 0.020 11 +228THS G KC=0.016 9$ LC=0.0031 15 +228TH L 1531.47 3+ +228TH E 0.89 16 8.21 8 0.89 16 +228THS E CK=0.7351 $CL=0.1952 5 $CM+=0.06971 18 +228TH G 99.47 6 1.8 3 M1 4.09 +228THS G LC=3.07$ MC=0.741$ NC+=0.273 +228TH cG M |a(L12)exp=2.0, no ce(L3), L/M=2.0, L/N=6 (1960Ar06); theory: +228TH2cG |a(L12)=3.06, |a(L3)=0.0165 +228TH cG MR |<0.4 from ce data (data not given) (1995Ba42) +228TH G 356.96 0.024 5 [E2] 0.103 N +228TH cG Part of a multiplet, I|g not measured. +228TH cG RI from branching ratio in adopted |g's +228TH G 378.01 0.036 7 [M1,E2] 0.28 19 N +228THS G KC=0.21 17$ LC=0.051 20$ MC=0.013 5$ NC+=0.0046 16 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.2 (1995Ba42) +228TH G 440.4 4 0.15 7 M1 0.314 A +228THS G KC=0.252$ LC=0.0471$ MC=0.0113$ NC+=0.00410 +228TH G 509.13 8 1.2 2 E2(+M1) 1.1 GT 0.08 4 A +228TH3 G FLAG=EG +228THS G KC=0.06 3$ LC=0.016 5 +228TH G 562.50 4 1.44 9 E2+M1 +1.6 6 0.07 3 +228THS G KC=0.051 24$ LC=0.013 4 +228TH G 1135.39 0.014 4 N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH G 1344.65 0.013 4 N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH L 1539.2 2,3,4 +228TH cL Possibly fed by the 389.36|g from the 1928.6 level. +228TH2cL However, the |g's shown as deexciting this level in {+228}Ac decay +228TH3cL have either not been reported (416.30|g) or placed elsewhere in +228TH4cL level scheme (1142.85|g). 1995Ba42 suggests that the existence of +228TH5cL this level is doubtful. +228TH L 1580.9 (2-) +228TH E 0.166 21 8.86 6 0.166 21 +228THS E CK=0.7286 8 $CL=0.1998 6 $CM+=0.07167 23 +228TH G 354.2 2 0.29 5 [E2] 0.106 & +228THS G KC=0.0531$ LC=0.0385$ MC=0.0102$ NC+=0.00378 +228TH G 601.7 3 0.30 5 [E1] 0.0088 & +228THS G KC=0.00718$ LC=0.00124 +228TH G 1184.71 9 0.47 4 (M1+E2) 0.015 8 +228THS G KC=0.012 7$ LC=0.0023 11 +228TH cG M |a(K)exp=0.0105 {I20} (1973Ku09); theory: |a(K)(E2)=0.00571, +228TH2cG |a(K)(M1)=0.0185 +228TH G 1252.98 10 0.68 6 (M1+E2) 0.013 7 +228THS G KC=0.011 6$ LC=0.0020 10 +228TH cG M |a(K)exp=0.010 {I3} (1971Am05); theory: |a(K)(E2)=0.00517, +228THxcG |a(K)(M1)=0.0160 +228TH G 1523.4 2 0.60 6 & +228THS G CC=0.00139$ KC=0.00139 +228TH L 1588.3 4- +228TH cL J |g(|q,H,T) excludes 3- (1995Ba42) +228TH E 5.8 5 7.30 5 5.8 5 +228THS E CK=0.7275 8 $CL=0.2005 6 $CM+=0.07200 23 +228TH G 56.86 3 1.06 5 E1 0.533 K +228THS G LC=0.400$ MC=0.098$ NC+=0.0339 +228TH G 137.95 2 6.6 3 M1 7.89 +228THS G KC=6.30$ LC=1.20$ MC=0.289$ NC+=0.106 +228TH cG M |a(L12)exp=1.23, ce(L3) not seen (1960Ar06); theory: M1: +228TH2cG |a(L12)=1.20, |a(L3)=0.00622; E2: |a(L12)=1.22, |a(L3)=0.690 +228TH cG MR -0.2|<|d|<1.4 (|g(|q,H,T)), |<0.3 (|a) +228TH2cG (1995Ba42) +228TH G 156.34 2 1.36 7 E1 0.172 K +228THS G KC=0.134$ LC=0.0281$ MC=0.00676$ NC+=0.00240 +228TH G 420.03 8 0.68 5 [M1,E2] 0.21 15 +228THS G KC=0.16 13$ LC=0.037 17$ MC=0.009 4$ NC+=0.0034 14 +228TH L 1617.8 2+,3,4+ +228TH E 0.13 3 8.90 11 0.13 3 +228THS E CK=0.7227 9 $CL=0.2039 7 $CM+=0.0734 3 +228TH G 649.12 7 0.97 9 & +228TH3 G FL=968.97$ FLAG=G +228TH G 1432 1 0.60 14 @ +228TH2 G FLAG=P +228TH cG RI from I|g/I|g(1560|g) in adopted |g's. I|g(doublet)|<1.8 +228TH cG M for the doublet |a(K)exp=0.0032 {I7} (1973Ku09); +228TH2cG |a(K)(E2)=0.00409, |a(K)(M1)=0.0113 +228TH G 1559.7 2 0.34 5 G +228TH L 1638.3 2+ +228TH E 0.08 LE 9.1 GE 0.08 LE +228THS E CK=0.7190 10 $CL=0.2065 7 $CM+=0.0745 3 +228TH G 469.9 5 0.14 8 [E1] 0.0144 +228THS G KC=0.0116$ LC=0.00206$ MC=0.00049$ NC+=0.00018 +228TH G 515.20 11 0.62 9 [E1] 0.0120 ? +228THS G KC=0.0097$ LC=0.00170 +228TH cG RI disagrees with the branching ratio in {+228}Ac decay +228TH G 1310.26 0.07 3 G +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 1451.45 0.039 9 [E2] N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.05 (1995Ba42) +228TH G 1580.5 3 2.18 14 (M1,E2) G +228TH cG M |a(K)exp=0.0046 {I15} (1973Ku09); theory: |a(K)(M1)=0.0087, +228TH2cG |a(K)(E2)=0.00343 +228TH G 1638.30 7 1.98 10 (E2) +228TH cG M |a(K)exp=0.0026 {I8} (1973Ku09); theory: |a(K)(M1)=0.0087, +228THxcG |a(K)(E2)=0.0034 +228TH L 1643.1 (2-,3-) +228TH E 1.33 13 7.83 5 1.33 13 +228THS E CK=0.7181 10 $CL=0.2071 7 $CM+=0.0748 3 +228TH G 475.1 3 0.7 2 [M1,E2] 0.15 11 +228THS G KC=0.12 9$ LC=0.026 13$ MC=0.006 3$ NC+=0.0023 10 +228TH G 520.17 8 0.92 10 (M1) 0.201 A +228THS G KC=0.161$ LC=0.0301 +228TH G 626.72 0.23 5 G +228TH3 G FLAG=N +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 674.16 2.82 LE [E1] G +228TH3 G FLAG=R +228TH cG E from E(level) +228TH G 674.75 2.82 LE [M1,E2] 0.06 4 G +228TH3 G FLAG=R +228TH cG E from E(level) +228TH G 698.93 0.61 9 [D,E2] 0.05 4 G +228TH3 G FLAG=N +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 1247.07 5 8.2 4 (M1) 0.0201 G +228TH2 G FLAG=A +228THS G KC=0.0162 +228TH cG M for the 1245+1246 doublet: |a(K)exp=0.0088 {I11} (1973Ku09), +228TH2cG 0.021 (1960Ar06); theory: |a(K)(M1)=0.0162, |a(K)(E2)=0.00521 +228TH G 1315.2 2 0.20 5 [M1,E2] 0.012 6 +228THS G KC=0.009 5$ LC=0.0018 8 +228TH L 1646.0 3+ +228TH E 4.1 3 7.34 4 4.1 3 +228THS E CK=0.7175 10 $CL=0.2075 7 $CM+=0.0750 3 +228TH G 114.49 10 0.10 2 [M1,E2] 10 4 +228THS G KC=5.5 52$ LC=3.2 12$ MC=0.9 4$ NC+=0.32 14 +228TH G 419.39 0.24 3 [E1] 0.0182 N +228TH3 G FLAG=G +228THS G KC=0.0147$ LC=0.00264$ MC=0.00063$ NC+=0.000225 +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 492.22 10 0.28 3 [M1,E2] 0.14 10 +228THS G KC=0.11 8$ LC=0.024 12$ MC=0.006 3$ NC+=0.0021 10 +228TH G 523.16 11 1.40 10 [E1] 0.0116 +228TH2 G FL=1122.95 +228THS G KC=0.0094$ LC=0.00165 +228TH G 554.6 3 0.48 11 [M1,E2] 0.10 7 G +228THS G KC=0.08 6$ LC=0.017 9 +228TH G 623.7 2 0.36 6 [M1,E2] 0.08 5 & +228TH2 G FLAG=GQ +228THS G KC=0.06 4$ LC=0.012 6 +228TH G 629.4 2 0.37 6 [D,E2] 0.06 6 +228TH G 666.47 4 0.66 7 [M1,E2] 0.06 4 @ +228TH2 G FLAG=M +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG M for the doublet (I|g=2.47 {I13}): |a(K)exp=0.053 {I16} +228TH2cG (1973Ku09), 0.025 (1960Ar06); theory: |a(K)(M1)=0.0831, +228THxcG |a(K)(E2)=0.0160 +228TH G 676.9 2 0.89 15 [M1,E2] 0.06 4 G +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG M |a(K)exp=0.17 {I5} (1973Ku09), 0.10 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0797, |a(K)(E2)=0.0155 +228TH G 1249.7 2 0.73 10 G +228TH G 1459.2 2 8.6 5 E2 G +228TH2 G FLAG=I +228TH cG M |a(K)exp=0.0045 {I9} (1971Am05), 0.0026 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00395, |a(K)(M1)=0.0108 +228TH G 1588.15 5 37.2 19 E2 +228TH cG M |a(K)exp=0.0025 {I4} (1971Am05), 0.0031 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0034, |a(K)(E1)=0.0013, |a(K)(M1)=0.0086 +228TH cG MR |<-6 from nuclear orientation (1995Ba42) +228TH L 1682.8 2+,3(+),4+ +228TH E 0.2 LE 8.6 GE 0.2 LE +228THS E CK=0.7094 13 $CL=0.2131 9 $CM+=0.0774 4 +228TH G 660.28 0.02 AP [M1,E2] 0.06 4 N +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.2 (1995Ba42) +228TH G 1496.15 6 2.74 14 (E2) +228TH cG M |a(K)exp=0.0029 {I9} (1973Ku09); theory: |a(K)(E2)=0.00378, +228TH2cG |a(K)(M1)=0.0101 +228TH G 1625.0 2 0.70 14 +228TH L 1683.8 (4-) +228TH E 0.300 23 8.39 4 0.300 23 +228THS E CK=0.7092 13 $CL=0.2133 9 $CM+=0.0775 4 +228TH G 457.38 6 0.30 3 [M1,E2] 0.17 12 +228THS G KC=0.13 10$ LC=0.029 14$ MC=0.007 3$ NC+=0.0026 11 +228TH G 623.7 2 0.36 6 [M1,E2] 0.07 5 & +228TH2 G FLAG=GQ +228THS G KC=0.06 4$ LC=0.012 7 +228TH G 1164.58 7 1.32 7 (M1+E2) 0.016 9 +228THS G KC=0.013 7$ LC=0.0024 12 +228TH cG M |a(K)exp=0.012 {I2} (1973Ku09), 0.014 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00588, |a(K)(M1)=0.0193 +228TH G 1287.79 8 1.56 11 (M1+E2) 0.012 7 G +228THS G KC=0.010 5$ LC=0.0019 9 +228TH cG M |a(K)exp=0.0104 {I15} (1973Ku09); theory: |a(K)(M1)=0.0149, +228TH2cG |a(K)(E2)=0.00492 +228TH L 1688.4 2+,3+ +228TH cL J J|p=3-,4+ excluded by |g(|q,H,T) (1995Ba42) +228TH E 0.25 8 8.46 14 0.25 8 +228THS E CK=0.7081 13 $CL=0.2141 9 $CM+=0.0778 4 +228TH G 42.44 0.016 6 [M1] 49 N +228THS G LC=37.1$ MC=8.95 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH G 671.99 0.045 14 N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.2 (1995Ba42) +228TH G 813.94 0.012 3 [M1,E2] 0.038 23 N +228THS G KC=0.030 19$ LC=0.006 3 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH G 1501.5 2 0.74 6 G +228TH G 1630.63 6 2.65 13 (M1,E2) A +228TH L 1724.3 2+ +228TH E 2.80 19 7.32 4 2.80 19 +228THS E CK=0.6982 16 $CL=0.2210 11 $CM+=0.0808 5 +228TH G 497.72 0.1 LE [M2] N ? +228TH G 548.74 11 0.41 5 [M1,E2] 0.10 7 & ? +228THS G KC=0.08 6$ LC=0.017 9 +228TH cG |g feeds the 1175.4 level; see comment with that level +228TH G 570.88 4 3.33 17 (M1) 0.156 G +228TH3 G FLAG=A +228THS G KC=0.125$ LC=0.0234 +228TH G 701.72 4 3.76 21 (M1) 0.091 +228THS G KC=0.0726$ LC=0.0135 +228TH cG M |a(K)exp=0.081 {I14} (1973Ku09), 0.057 (1960Ar06); theory: +228TH2cG |a(K)=0.0726 +228TH G 755.32 2 19.6 10 M1 0.0747 +228THS G KC=0.0599$ LC=0.0111 +228TH cG M |a(K)exp=0.063 {I6} (1973Ku09), 0.057 (1960Ar06); theory: +228THxcG |a(K)(M1)=0.0599 +228TH G 1537.8 2 0.73 10 [E2] +228TH cG M |a(K)exp=0.0080 {I25} (1973Ku09); theory: |a(K)(E2)=0.00360 +228TH G 1666.53 6 3.35 17 M1 +228TH cG M |a(K)exp=0.0081 {I21} (1971Am05); theory: |a(K)(M1)=0.0084 +228TH cG MR 0.00 {I5} from |g(|q,H,T) (1995Ba42) +228TH G 1724.0 2 0.50 5 +228TH L 1743.9 4+ +228TH E 0.88 6 7.77 4 0.88 6 +228THS E CK=0.6917 18 $CL=0.2255 13 $CM+=0.0828 6 +228TH G 399.94 7 0.35 4 [E1] 0.0212 ? +228THS G KC=0.0162$ LC=0.00293$ MC=0.00070$ NC+=0.00025 +228TH cG Possibly feeds the 1344.08 level; see comment with that level +228TH G 590.65 11 0.41 5 [E2] 0.0295 +228THS G KC=0.0200$ LC=0.00716 +228TH cG M |a(K)exp=0.088 {I17} (1973Ku09); theory: |a(K)(E2)=0.0200, +228THxcG |a(K)(M1)=0.115 +228TH G 684.0 3 0.46 10 [E1] +228THS G CC=0.00691$ KC=0.00563$ LC=0.00096 +228TH G 1347.84 0.1 LE N ? +228TH G 1365.72 12 0.40 4 +228TH G 1415.42 10 0.97 6 [E3] ? +228TH G 1557.06 6 4.42 22 (E2+M1) +1.2 2 +228TH cG M |a(K)exp=0.0056 {I11} (1973Ku09), 0.0061 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00352, |a(K)(M1)=0.00908 +228TH G 1686.15 7 2.39 12 (E2) +228TH cG M |a(K)exp=0.0031 {I11} (1973Ku09); theory: |a(K)(E2)=0.0032, +228THxcG |a(K)(M1)=0.0082 +228TH L 1760.2 2+,3(+) +228TH cL J |g(|q,H,T) excludes J|p=4+ (1995Ba42) +228TH E 0.12 4 8.59 15 0.12 4 +228THS E CK=0.6857 20 $CL=0.2297 14 $CM+=0.0846 6 +228TH G 415.91 8 0.49 5 [E1] 0.0185 ? +228THS G KC=0.0150$ LC=0.00269$ MC=0.00064$ NC+=0.00023 +228TH cG Possibly feeds the 1344.08 level; see comment with that level +228TH G 584.7 3 0.22 7 [M1,E2] 0.10 7 & ? +228TH3 G FLAG=G +228THS G KC=0.08 6$ LC=0.017 9 +228TH cG Possibly feeds the 1175.4 level; see comment with that level +228TH G 737.8 2 0.74 13 [M1,E2] 0.05 3 G +228THS G KC=0.04 3$ LC=0.008 4 +228TH G 791.43 9 0.24 9 [M1,E2] 0.04 3 @ +228TH3 G FLAG=M +228THS G KC=0.032 21$ LC=0.007 4 +228TH G 1573.3 3 0.70 7 (E2) +228TH cG M |a(K)exp=0.011 {I4} (1973Ku09); theory: |a(K)(M1)=0.00884, +228TH2cG |a(K)(E2)=0.00346 |a(K)(E1)=0.00132 +228TH G 1702.6 3 1.15 11 G +228TH L 1804.7 4+ +228TH E 1.44 18 7.38 6 1.44 18 +228THS E CK=0.665 3 $CL=0.2439 20 $CM+=0.0908 9 +228TH G 116.26 5 0.16 2 [M1,E2] 9 4 +228THS G KC=5 5$ LC=3.1 11$ MC=0.8 4$ NC+=0.30 13 +228TH G 121.18 7 0.19 3 [E1] 0.316 +228TH2 G FL=1683.8 +228THS G KC=0.244$ LC=0.0542$ MC=0.0131$ NC+=0.00465 +228TH G 121.87 3 0.33 3 [M1,E2] 8 4 +228THS G KC=5 5$ LC=2.5 9$ MC=0.7 3$ NC+=0.25 10 +228TH G 158.74 3 1.25 7 M1+E2 0.55 15 4.4 4 +228THS G KC=3.3 4$ LC=0.85 2$ MC=0.213 9$ NC+=0.079 4 +228TH cG M,MR from ce data (data not given) (1995Ba42) +228TH G 354.2 2 0.29 5 [E1] 0.0260 & +228THS G KC=0.0209$ LC=0.00384$ MC=0.00092$ NC+=0.00033 +228TH G 372.60 3 1.57 8 [M1,E2] 0.29 20 +228THS G KC=0.22 18$ LC=0.053 21$ MC=0.013 5$ NC+=0.0048 7 +228TH G 651.5 2 0.34 5 [E2] 0.0238 I +228THS G KC=0.0166$ LC=0.00540 +228TH G 1426.5 2 0.48 6 [E2] +228TH G 1618.0 1 0.90 6 (M1,E2) G +228TH cG M |a(K)exp=0.012 {I4} (1973Ku09); theory: |a(K)(M1)=0.0091, +228THxcG |a(K)(E2)=0.0035 +228TH L 1817.4 4- +228TH cL J |g(|q,H,T) excludes J|p=3-,5- +228TH E 0.52 4 7.77 5 0.52 4 +228THS E CK=0.658 3 $CL=0.2490 22 $CM+=0.0930 10 +228TH G 367.04 2 2.45 12 M1 0.512 +228THS G KC=0.411$ LC=0.0773$ MC=0.0185$ NC+=0.00674 +228TH cG M,MR -0.2|<|d|<1.4 (|g(|q,H,T)), |<0.3 (|a) +228TH2cG (1995Ba42) +228TH G 1298.3 2 0.45 4 (M1+E2) 0.012 6 +228TH cG M |a(K)exp=0.011 {I4} (1973Ku09); theory: |a(K)(M1)=0.0146, +228TH2cG |a(K)(E2)=0.00486, |a(K)(E1)=0.00182, |a(K)(M2)=0.0146 +228TH cG MR +0.27|<|d|<+5 from |g(|q,H,T) (1995Ba42) +228TH G 1421.1 2 1.40 7 E2+M1 +2.0 5 +228TH cG M |a(K)exp=0.0055 {I14} (1973Ku09); theory: |a(K)(E2)=0.00414 +228TH L 1893.0 3+ +228TH E 3.77 23 6.60 5 3.77 23 +228THS E CK=0.591 7 $CL=0.295 5 $CM+=0.1138 21 +228TH G 477.1 3 0.7 2 G ? +228TH cG Possibly feeds the 1416.1 level; see comment with that level +228TH G 666.47 4 1.81 15 [E1] @ +228TH2 G FLAG=M +228TH cG M for the doublet (I|g=2.47 {I13}): |a(K)exp=0.053 {I16} +228TH2cG (1973Ku09), 0.025 (1960Ar06); theory: |a(K)(E1)=0.00591, +228THxcG |a(K)(E2)=0.0160 +228TH G 692.47 7 2.01 15(M1+E2+E0) 0.24 3 +228TH cG M |a(K)exp=0.17 {I3} (1973Ku09), 0.13 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0148, |a(K)(M1)=0.0751. |a(K)exp may indicate E0 presence. +228TH cG CC from |a(K)exp +228TH G 724.42 11 0.76 9 [E1] & +228TH G 739.2 2 0.57 9 [M1,E2] 0.0790 I +228TH cG M |a(K)exp=0.18 {I5} (1973Ku09); theory: |a(K)(M1)=0.0637. +228TH2cG ce(K) may include the ce(K)(737.8|g) +228TH G 770.2 2 2.28 15 [E1] G +228TH G 870.45 2 15.9 8 M1 0.0515 +228THS G KC=0.0414$ LC=0.00762 +228TH cG M |a(K)exp=0.038 {I5} (1973Ku09), 0.046 (1960Ar06): theory: +228TH2cG |a(K)(M1)=0.0414 +228TH cG MR -0.1 {I1} from |g(|q,H,T) (1995Ba42) +228TH G 924.3 2 2.7 2 [M1,E2] 0.028 17 G +228THS G KC=0.022 14$ LC=0.0043 22 +228TH cG M |a(K)exp=0.09 {I3} (1971Am05), 0.083 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0354, |a(K)(E2)=0.00886 +228TH G 1706.16 7 2.84 14 M1+E2 +0.42 4 +228TH cG M |a(K)exp=0.0071 {I16} (1973Ku09), 0.0063 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0079, |a(K)(E2)=0.0031 +228TH G 1835.26 5 9.8 5 E2+M1 +2.9 3 +228TH cG M |a(K)exp=0.0036 {I6} (1971Am05), 0.0055 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00275, |a(K)(M1)=0.0065 +228TH L 1900.0 2+ +228TH E 0.56 4 7.39 5 0.56 4 +228THS E CK=0.581 8 $CL=0.302 5 $CM+=0.1167 23 +228TH G 877.35 7 0.97 8 [M1,E2] 0.032 19 +228THS G KC=0.025 16$ LC=0.005 3 +228TH G 883.6 3 0.15 4 G +228TH G 920.8 3 0.38 10 [M1,E2] 0.028 17 G +228THS G KC=0.022 14$ LC=0.0044 22 +228TH cG |g not reported in {+228}Ac decay +228TH G 931.02 7 0.99 8 [M1,E2] 0.027 17 +228TH G 1503.7 2 0.72 6 [E1] G +228TH cG M |a(K)exp=0.0050 {I23} (1973Ku09); theory: |a(K)(E1)=0.00142, +228TH2cG |a(K)(E2)=0.00374 +228TH cG |g not reported in {+228}Ac decay +228TH G 1713.16 0.1 LE ? +228TH G 1842.15 8 2.29 12 M1+E2 -0.86 14 +228TH cG M |a(K)exp=0.0059 {I20} (1971Am05); theory: |a(K)(M1)=0.0064, +228THxcG |a(K)(E2)=0.0027 +228TH G 1900.3 3 0.34 5 +228TH L 1901.9 3-,4 +228TH E 0.177 19 7.88 6 0.177 19 +228THS E CK=0.579 8 $CL=0.304 6 $CM+=0.1176 24 +228TH G 1383.2 2 0.55 5 +228TH G 1505.9 2 0.55 5 G +228TH G 1523.4 2 0.60 6 & +228TH G 1715.06 10 0.50 3 +228TH L 1925.2 3+,4+ +228TH cL J |g(|q,H,T) excludes J|p=2+,3- +228TH E 1.52 11 6.81 5 1.52 11 +228THS E CK=0.539 11 $CL=0.331 7 $CM+=0.130 4 +228TH G 724.42 11 0.76 9 [M1,E2] 0.05 4 & +228THS G KC=0.04 3$ LC=0.008 5 +228TH G 750.10 10 0.67 8 [M1,E2] 0.05 3 ? +228TH cG Possibly feeds the 1175.4 level; see comment with that level +228TH G 865.15 13 0.50 7 +228TH G 956.8 2 2.5 5 G +228TH G 1529.02 6 2.61 13 [E1] +228TH cG M |a(K)exp=0.0034 {I11} (1973Ku09); theory: |a(K)(E1)=0.00138, +228TH2cG |a(K)(E2)=0.00364, |a(K)(M1)=0.0095; +228TH G 1738.48 5 9.6 5 M1+E2 +228TH cG M |a(K)exp=0.0061 {I8} (1971Am05), 0.0057 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0074, |a(K)(E2)=0.0030 +228TH L 1928.6 3+ +228TH cL J |g(|q,H,T) excludes J|p=2+,3-,4+ +228TH E 0.187 22 7.70 7 0.187 22 +228THS E CK=0.532 11 $CL=0.336 8 $CM+=0.132 4 +228TH G 168.42 9 0.09 2 [M1,E2] 2.9 16 +228THS G KC=1.9 17$ LC=0.73 6$ MC=0.19 3$ NC+=0.070 10 +228TH G 389.36 0.31 5 [M1,E2] 0.26 18 N ? +228TH cG RI from branching ratio in adopted |g's; I|g|<0.4 (1995Ba42) +228TH cG Possibility feeds the 1539.2 level; see comment with that +228TH2cG level +228TH G 584.7 3 0.22 7 [E1] & ? +228TH cG |g feeds the 1344 level; see comment with 1344 level +228TH3 G FLAG=G +228TH G 1741.6 2 0.42 8 G +228TH G 1870.80 9 0.73 4 (M1+E2) +228TH cG M |a(K)exp=0.0028 {I14} (1973Ku09); theory: |a(K)(E2)=0.0026, +228TH2cG |a(K)(M1)=0.0071 |a(K)(E1)=0.00100, |a(K)(M2)=0.0138 +228TH cG MR -0.32 {I9} or -1.7 {I3} from |g(|q,H,T) (1995Ba42) +228TH L 1944.9 3+ +228TH E 7.8 5 5.98 5 7.8 5 +228THS E CK=0.494 14 $CL=0.362 10 $CM+=0.144 5 +228TH G 184.61 5 0.41 5 (M1) 3.45 @ +228TH3 G FLAG=M +228THS G KC=2.76$ LC=0.525$ MC=0.125$ NC+=0.0461 +228TH cG M from ce data (data not given) (1995Ba42) +228TH G 220.61 2 1.24 6 (M1) 2.10 +228THS G KC=1.68$ LC=0.317$ MC=0.0763$ NC+=0.0278 +228TH cG M from ce data (data not given) (1995Ba42) +228TH G 299.10 10 0.43 5 M1 0.90 +228THS G KC=0.719$ LC=0.135$ MC=0.0326$ NC+=0.0118 +228TH cG M from ce data (data not given) (1995Ba42) +228TH G 306.61 2 2.00 10 M1 0.84 +228THS G KC=0.672$ LC=0.126$ MC=0.0304$ NC+=0.0111 +228TH cG M,MR from ce data, |d|<0.3 (data not given) (1995Ba42) +228TH G 512.79 11 1.33 13 [M1,E2] 0.12 9 G +228THS G KC=0.10 7$ LC=0.021 11 +228TH G 718.31 2 6.4 3 (E1) +228THS G CC=0.00631$ KC=0.00514$ LC=0.00087 +228TH cG M |a(K)exp=0.0074 {I36} (1973Ku09); theory: |a(K)(E1)=0.00514, +228TH2cG |a(K)(E2)=0.0140 +228TH G 776.52 3 7.9 4 [E1] +228THS G CC=0.00546$ KC=0.00446$ LC=0.00075 +228TH cG M |a(K)exp=0.009 {I3} (1973Ku09); theory: |a(K)(E1)=0.00446, +228THxcG |a(K)(E2)=0.0121 +228TH G 791.43 9 3.6 4 (M1) 0.0661 @ +228TH2 G FLAG=M +228THS G KC=0.0530$ LC=0.0098 +228TH cG M |a(K)exp(doublet)=0.054 {I11} (1973Ku09), I|g(doublet)=3.8; +228TH2cG theory: |a(K)(M1)=0.0530 +228TH G 853.97 8 0.82 7 [M1,E2] 0.034 21 +228THS G KC=0.027 17$ LC=0.005 3 +228TH cG M |a(K)exp=0.055 {I25} (1973Ku09,1960Ar06); theory: +228THxcG |a(K)(M1)=0.0436 +228TH G 922.5 2 2.25 12 [M1,E2] 0.028 16 G +228THS G KC=0.022 13$ LC=0.0044 22 +228TH G 928.4 2 0.89 8 G +228TH G 976.00 5 13.4 7 M1 0.0381 +228THS G KC=0.0306$ LC=0.00563 +228TH cG M |a(K)exp=0.025 {I6} (1973Ku09), 0.034 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0306, |a(K)(E2)=0.00804 +228TH cG MR 0.00 {I5} from |g(|q,H,T) (1995Ba42) +228TH G 1000.70 0.5 LE N +228TH G 1070.40 7 1.20 8 +228TH G 1549.3 2 1.2 2 G +228TH G 1758.11 5 9.0 5 E2+M1 -9 1 +228TH cG M |a(K)exp=0.0038 {I8} (1971Am05), 0.0015 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0029, |a(K)(M1)=0.0072 +228TH G 1887.13 5 24.0 12 E2+M1 -9.1 9 +228TH cG M |a(K)exp=0.0028 {I5} (1971Am05), 0.0023 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0026, |a(K)(M1)=0.0059 +228TH L 1965.0 2+,3,4+ +228TH E 0.139 17 7.57 7 0.139 17 +228THS E CK=0.430 20 $CL=0.405 14 $CM+=0.165 7 +228TH G 548.74 11 0.41 5 [M1,E2] 0.10 7 & ? +228THS G KC=0.08 6$ LC=0.017 9 +228TH cG Possibly feeds the 1416.1 level; see comment with that level +228TH G 1778.0 6 0.06 2 +228TH G 1907.13 11 0.99 5 +228TH G 1965.22 12 0.43 4 & +228TH L 1974.2 3-,4+ +228TH E 0.281 21 7.19 6 0.281 21 +228THS E CK=0.392 23 $CL=0.431 16 $CM+=0.177 8 +228TH G 1455.0 2 1.16 7 G +228TH G 1578.2 2 1.33 13 G +228TH G 1787.2 2 0.37 4 G +228TH G 1916.6 3 0.15 3 G +228TH L 1982.0 2+,3,4+ +228TH E 0.145 14 7.41 7 0.145 14 +228THS E CK=0.36 3 $CL=0.456 18 $CM+=0.189 9 +228TH G 1013.54 13 0.38 5 & +228TH G 1795.15 6 1.19 7 +228TH G 1924.2 2 0.18 2 +228TH L 2010.1 2+,3,4(+) +228TH E 0.30 4 6.81 9 0.30 4 +228THS E CK=0.17 4 $CL=0.58 3 $CM+=0.250 14 +228TH G 371.83 0.84 23 G +228TH3 G FLAG=N +228TH cG RI from branching ratio in adopted |g's +228TH G 887.16 0.35 5 N +228TH cG RI from branching ration in adopted |g's; I|g|<0.4 (1995Ba42) +228TH G 919.4 3 0.6 2 I +228TH G 1041.14 0.3 LE N +228TH G 1823.19 10 0.47 3 +228TH G 1952.39 10 0.76 5 +228TH L 2016.8 (2-,3-,4-) +228TH E 0.46 4 6.54 8 0.46 4 +228THS E CK=0.12 4 $CL=0.61 3 $CM+=0.268 15 +228TH G 1620.67 10 4.9 3 (M1+E2) +228TH cG M |a(K)exp=0.0060 {I15} (1973Ku09); theory: |a(K)(M1)=0.0090, +228TH2cG |a(K)(E2)=0.0034 +228TH L 2022.8 +228TH E 0.059 22 7.37 18 0.059 22 +228THS E CK=0.07 4 $CL=0.641 25 $CM+=0.285 15 +228TH G 384.53 0.1 LE [M1,E2] 0.27 18 N ? +228TH G 1148.20 14 0.30 4 +228TH G 1190.98 0.1 LE N +228TH G 1965.22 12 0.43 4 & + +228TH 232U A DECAY 1977KU15,1986LOZT 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +232U P 0 0+ 68.9 Y 4 5413.63 9 +228TH N 0.00259 0.00259 1 +228TH PN 2 +228TH cN NR From absolute I|g measurements of 1984Ge07, 1986LoZT +228TH cL E,J From adopted levels +228TH cA Q(|a)({+232}U)=5413.63 {I9} corrected value from G. Audi, +228THxcA Aug. 1996. +228TH cA E 1972Go33, 1971So15, 1966Ba49, 1963Le17. Calculated values +228TH2cA are from Q(|a) and E(level) in {+228}Th +228TH cA IA Calculated from I(|g+ce) balance in level scheme, unless +228TH2cA otherwise noted. The values differ +228TH3cA substantially from the direct I|a measurements of 1966Ba49. +228TH cA HF HF(5320.12|a)=1.00 yields r{-0}({+228}Th)=1.5289 {I3} +228TH cA E(B) From 1991Ry01. Recommended E|a=5262.36 {I9} in 1991Ry01 is a +228TH2cA misprint, see originally published E|a and adjustment. +228TH cA IA(F) From I(A{-0})/I|a(58)=0.463 {I5} (weighted average from +228TH2cA 1955As28, 1965Be15, 1966Ba49, 1971So15) and I(A{-0})+I(a(58)=99.70 {I2} +228TH cG E,RI$From 1977Ku15, except as noted. (I|g of 1977Ku15 are normalized +228TH2cG to 26.33 for the 129|g). Others: 1963Le17, 1965Be15, 1966Ah02, +228THxcG 1984Ge07. +228TH cG M From adopted gammas, unless otherwise noted +228TH cG RI(A) From 1986LoZT, 1984Ge07 +228TH cG M(D) 1977Ku15 quote A. Plochocki, thesis (1974) as establishing +228TH2cG the multipolarity E0+E2; however, no published information is +228TH3cG available on this. 1977Ku15 give I|g=I(|g+ce) in their level scheme, +228TH4cG suggesting that the E0 admixture may not be significant for intensity +228TH5cG calculations. +228TH L 0.0 0+ +228TH A 5320.12 14 68.15 23 1.00 B +228TH2 A FLAG=F +228TH L 57.762 5 2+ 0.406 NS 7 +228TH cL T weighted average of 0.409 ns {I10} (1970To08) and 0.402 ns +228TH2cL {I10} (1965Ne03); other: 0.40 ns {I3} (1960Be25) +228TH A 5263.36 9 31.55 230.992 12 B +228TH2 A FLAG=F +228TH G 57.78 5 77.2 7 E2 156 A +228THS G LC= 114 $MC= 31.1 $NC+= 11.4 $ +228TH cG CC 158 {I7} (1968Du06) +228TH cG M L1:L2:L3=3.55 {I25}:115 {I4}:100 (1966Ha01); +228TH2cG M1:M2:M3=5.3 {I13}:107 {I8}:100, M3/L3=0.32 {I3} (1966Ra15); theory: +228TH2cG L1:L2:L3=3.90:119:100, M1:M2:M3=4.35:114:100, M3/L3=0.276 +228TH L 186.828 5 4+ 0.164 NS 4 +228TH cL T weighted average of 0.169 ns {I7} (1970To08), 0.161 ns {I5} +228TH2cL (1965Ne03) +228TH A 5139.0 20 0.30 2 17.5 12 +228TH cA IA weighted average from 1955As28, 1965Be15, 1966Ba49, 1971So15. +228TH G 129.08 5 26.33 15 E2 3.81 A +228THS G KC= 0.269 $LC= 2.57 $MC= 0.706 $NC+= 0.263 $ +228TH L 328.003 5 1- +228TH A 4997.94 CA 0.00616 8 111 2 +228TH cA IA other: 0.0029 {I2} (1966Ba49) +228TH G 270.2 2 1.220 19 E1 0.0474 A +228THS G KC= 0.0379 $LC=0.00722 $MC=0.00173 $NC+=0.00061 $ +228TH G 327.9 2 1.093 23 E1 0.0308 A +228THS G KC=0.02472 $LC=0.00458 $MC=0.00110 $NC+=0.00039 $ +228TH L 378.178 11 6+ +228TH A 4948.63 CA 5.1E-5 5 6.4E+3 6 +228TH cA IA$other: 0.00017 {I3} (1966Ba49) +228TH G 191.0 2 0.012 1 E2 0.791 +228THS G KC= 0.1741 $LC= 0.453 $MC= 0.1237 $NC+= 0.0457 $ +228TH L 396.085 5 3- +228TH A 4931.04 CA 4.8E-5 4 5.2E+3 5 +228TH cA IA$other: 0.00021 {I3} (1966Ba49) +228TH G 209.5 5 0.0041 10 E1 0.0856 +228THS G KC= 0.0676 $LC=0.01341 $MC=0.00323 $NC+=0.00114 $ +228TH G 338.1 2 0.0143 5 E1 0.0288 +228THS G KC=0.02314 $LC=0.00427 $MC=0.00102 $NC+=0.00036 $ +228TH L 519.199 6 5- +228TH A 4810.04 CA 5.6E-5 3 680 40 +228TH G 141.0 5 0.0012 5 (E1) 0.220 +228THS G KC= 0.1711 $LC= 0.0367 $MC=0.00883 $NC+=0.00313 $ +228TH G 332.3 3 0.019 1 (E1) 0.0299 +228THS G KC=0.02402 $LC=0.00444 $MC=0.00106 $NC+=0.00038 $ +228TH L 831.832 11 0+ +228TH A 4502.80 CA 2.1E-5 2 10.6 11 +228TH cA IA$other: 0.000024 {I7} (1963Le17) +228TH G 503.6 3 0.0056 3 (E1) 0.0125 +228THS G KC=0.01015 $LC=0.00179 $ +228TH G 773.4 5 0.0018 3 [E2] 0.0167 +228THS G KC=0.01218 $LC=0.00340 $ +228TH G 831 0.0003 LT E0 8E-4 4 +228TH cG M,TI from 1963Le17 +228TH L 874.48 3 2+ +228TH A 4460.94 CA 3.9E-6 9 27 8 +228TH cA IA$includes additional weak |g's at 688.1, 816.7 and 874.4 keV, +228TH2cA from adopted levels. I|a=3.2|*10{+-6} {I9} without inclusion of these +228TH3cA additional |g's +228TH G 478 1 0.00055 21 [E1] 0.0139 +228THS G KC=0.01127 $LC=0.00199 $MC=0.00047 $NC+=0.00017 $ +228TH G 547 1 0.00039 24 [E1] 0.0106 +228THS G KC=0.00863 $LC=0.00150 $ +228TH G 817 1 0.0003 AP [M1+E2] 0.038 23 D + +228TH 226RA(A,2NG) 1993AC02,1986SC18 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH PN 6 +228TH c 1993Ac02: E|a=28 MeV; measured E|g, I|g in coin with +228TH2c ce(L2)(129.1|g) +228TH c 1986Sc18: E|a=33, 42, 55 MeV; measured ce, (ce)(ce), (ce)|g +228TH c The level scheme is that proposed by 1986Sc18 and 1993Ac02, +228TH2c confirming levels known from {+228}Ac |b{+-} decay, {+228}Pa |e decay +228TH3c and {+230}Th(|a,|a'2n), and adding the levels with J>14. The 1- and 3- +228TH3c levels of the K|p=0- band are not seen in this experiment. +228TH cL E From least squares fit to E|g, unless otherwise noted +228TH cL J From adopted levels, unless otherwise noted +228TH cL E(A) Rounded-off values from adopted levels +228TH cL J(B) From this data set, based on the level decay mode, band +228TH2cL structure (1993Ac02) +228TH CL BAND(D) GS ROTATIONAL BAND +228TH CL BAND(E) KPI=0- BAND +228TH cG E From 1993Ac02 +228TH cG RI Relative I|g from the level (1993Ac02) +228TH L 0.0 0+ D +228TH L 57.76 2+ A +228TH2 L FLAG=D +228TH L 186.83 4+ A +228TH2 L FLAG=D +228TH L 378.18 6+ A +228TH2 L FLAG=D +228TH G 191.4 3 +228TH L 519.20 5- A +228TH2 L FLAG=E +228TH G 332.4 3 +228TH L 622.5 3 8+ D +228TH G 244.4 3 +228TH L 695.6 3 7- E +228TH G 317.4 3 +228TH L 911.8 4 10+ D +228TH G 289.4 3 +228TH L 920.8 3 9- E +228TH G 225.1 3 1.00 +228TH G 298.3 3 4.07 24 +228TH L 1189.8 4 11- E +228TH G 268.9 3 1.00 +228TH G 278.0 3 1.50 10 +228TH L 1239.4 4 12+ D +228TH G 327.5 3 +228TH L 1497.1 5 13- E +228TH G 257.7 3 0.52 4 +228TH G 307.3 3 1.00 +228TH L 1599.5 5 14+ B +228TH2 L FLAG=D +228TH G 360.1 3 +228TH L 1838.3 5 15- B +228TH2 L FLAG=E +228TH G 341.2 3 +228TH L 1988.1 6 16+ B +228TH2 L FLAG=D +228TH G 388.6 3 +228TH L 2209.7 6 17- B +228TH2 L FLAG=E +228TH G 371.4 3 +228TH L 2407.9 7 18+ B +228TH2 L FLAG=D +228TH G 419.8 3 +228THF G FL=1988.1 + +228TH 230TH(P,T) 1972MA15 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH c 1972Ma15: E=17 MeV +228TH c 1995Ba42: authors quote H. Baltzer, et al., to be published +228TH cL E From 1972Ma15, unless otherwise noted +228TH cL E(A),L(B)$From 1995Ba42 +228TH L 0 0 +228TH L 57 5 +228TH L 185 5 +228TH L 830 5 0 +228TH L 874 5 +228TH L 938 0 A +228TH3 L FLAG=B +228TH L 944 A +228TH cL Possibly unnatural parity level (1995Ba42) +228TH L 977 5 +228TH cL Natural parity level (1995Ba42) +228TH L 1016 A +228TH cL Natural parity level (1995Ba42) +228TH L 1160 5 A +228TH cL Possibly unnatural parity level (1995Ba42) + +228TH 230TH(A,A'2NG) 1984HA21 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH c E=56 MeV. Measured ce and ce|g +228TH cL J From 1984Ha21 based on coin and band structure +228TH cL E From a least-squares fit to the E|g data. +228TH cL The authors do not see transitions from the known 1- and +228TH2cL 3- members of the K|p=0- band. The level scheme is based on +228TH3cL coincidence data, energy fits, and intensity systematics +228TH cG Authors give only E|g. Multipolarity of 129, 191 and 244 |g's +228TH2cG in the ground-state band are determined as E2 from (L1+L2)/L3 ce data +228TH L 0 0+ +228TH L 57.8 2+ +228TH G 57.8 S +228TH cG E not seen. E|g is rounded-off value from adopted |g's +228TH L 187 4+ +228TH G 129.0 2 E2 +228TH L 378 6+ +228TH G 191.0 1 E2 +228TH L 519 5- +228TH G 332.0 4 +228TH L 622 8+ +228TH G 244.3 1 E2 +228TH3 G FL=378 +228TH L 695 7- +228TH G 317.2 2 +228TH L 911 10+ +228TH G 289.3 2 +228TH L 921 9- +228TH G 298.7 2 +228TH L 1190 11- +228TH G 268.9 5 +228TH G 278.4 3 +228TH L 1239 12+ +228TH G 327.2 4 +228TH L 1497 (13-) +228TH cL E shown as tentative by authors, but |g's to 11- and 12+ +228TH2cL are consistent with adopted data from (|a,2n|g) +228TH G 257.3 5 +228TH G 306.6 5 +228TH L 1596 (14+) ? +228TH cL E the adopted 14+ member of this band is at 1599.5-keV +228TH2cL from (|a,2n|g) with E|g=360.1 to 12+ +228TH G 357.2 5 + diff --git a/tests/ensdf_processing/ruler/ref_ruler.rpt b/tests/ensdf_processing/ruler/ref_ruler.rpt new file mode 100644 index 0000000000..e2bc4a1c4e --- /dev/null +++ b/tests/ensdf_processing/ruler/ref_ruler.rpt @@ -0,0 +1,3406 @@ + +RULER Version 3.2d [20-Jan-2009] RUN ON 06-Oct-2015 + + Comparison to RUL's Mode + INPUT FILE: a228.ens + + + Assuming 0.0140 DCC from theory if DCC not given + +228TH ADOPTED LEVELS, GAMMAS 97NDS 199709 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH Q -2148 5 7109.6 25 6372.0 23 5520.1222 1995AU04 +228TH PN 6 +228TH c +228TH c Calculations, compilations, systematics: +228TH c |a decay widths: 1996De19 +228TH c Biding energies, deformation role: 1986Ch23 +228TH c B(E1) from octupole states: 1989De11, 1986Le05, 1981Le15 +228TH c Cluster model for |a decay; Geiger-Nuttall plot: 1991Bu05, +228TH2c 1986Da03 +228TH c Equilibrium deformation: 1988So08, 1984Na22, 1981Gy03 +228TH c Heavy cluster spontaneous emission: 1996Bu05, 1994Bu07, 1993Go18, +228TH2c 1992Sa30, 1986Po15, 1986Po06 +228TH c Levels, shapes, B(|l): 1996Li18, 1995De13, 1995La01, 1989Hu05, +228TH2c 1989Sh35, 1988Ri07, 1986An10, 1986Go07, 1984Ba59, 1984Ba63 +228TH c Octupole shapes and shape changes: 1987Na10 +228TH c p-n interaction energy: 1990Mo11 +228TH c Rotational bands in even-even nuclei: 1992So10, 1988Ab07 +228TH c Quasi-bands in even-even nuclei: 1984Sa37 +228TH c Super- and hyperdeformed configurations: 1995We02 +228TH c Yrast band parity splitting: 1994Jo02, 1993Jo12 +228TH XA228AC B- DECAY +228TH XB228PA EC DECAY +228TH XC232U A DECAY +228TH XD226RA(A,2NG) +228TH XE230TH(P,T) +228TH XF230TH(A,A'2NG) +228TH cL +228TH cL For a discussion of the level scheme and the rotational +228TH2cL bands see 1995Ba42, 1987Da28 +228TH cL E From least squares fit to E|g +228TH CL BAND(A) GS ROTATIONAL BAND +228TH CL BAND(B) KPI=0- OCTUPOLE-VIBRATIONAL BAND +228TH CL BAND(C) FIRST KPI=0+ BAND +228TH CL BAND(D) SECOND KPI=0+ BAND +228TH CL BAND(F) KPI=1- OCTUPOLE-VIBRATIONAL BAND HEAD +228TH CL BAND(G) FIRST KPI=2+ BAND +228TH CL BAND(H) KPI=2- OCTUPOLE-VIBRATIONAL BAND +228TH CL BAND(I) SECOND KPI=2+ BAND +228TH CL BAND(J) KPI=3- OCTUPOLE-VIBRATIONAL BAND HEAD +228TH cG E,RI Weighted average of measurements in {+228}Ac and {+228}Pa +228TH2cG decays, unless otherwise noted. +228TH cG M,MR From {+228}Ac |b{+-} decay and/or {+228}Pa |e decay +228TH cG E(I),RI(K)$From {+228}Pa |e decay +228TH cG RI(J) From {+232}U |a decay +228TH cG E(L),RI(M)$From {+228}Ac |b{+-} decay +228TH cG E(G),RI(H)$From (|a,2n|g) data set +228TH cG E(B) Energy fit poor. Not included in E(level) calculation. +228TH cG E(N) Doublet, energy not included in E(level) calculation +228TH cG E(P) A |g of this energy was seen in {+228}Pa decay and placed +228TH2cG here in level scheme; however, the |g's deexciting the final level of +228TH3cG this |g were not seen in {+228}Pa decay +228TH cG E(Q) |g's of approximately same energy and intensity seen in both +228TH2cG {+228}Ac and {+228}Pa decays. On the basis of coin with 911|g, it is +228TH3cG suggested in {+228}Ac decay, that the |g feeds the 2+ 968.968 level. In +228TH4cG {+228}Pa decay, the |g is placed feeding the 3- 968.368 level. The +228TH5cG energy fit is much better feeding the 3- level. Possibly the |g seen +228TH6cG is a doublet feeding both the 968 and 969 levels. I|g(doublet)=24 {I6}, +228TH7cG E(doublet)=674.65 {I5}. +228TH cG RI(R) There is a disagreement in the ratio I|g(583|g/I|g(651|g) +228TH2cG between {+228}Ac decay (1.23 {I15}) and {+228}Pa decay (2.26 {I24}). +228TH L 0.0 0+ 1.9116 Y 16 A +228TH2 L %A=100$%{+20}O=1.13E-11 22$ +228THX L XREF=ABCDEF +228TH cL %{+20}O=1.13|*10{+-11} {I22} (1993Bo20) +228TH cL T value (698.2 d {I6}) recommended by 1991BaZS; based on +228TH2cL measurements from 1971Jo14, 1962Ma57, 1956Ki16 (tropical year +228TH3cL (365.24220 days) used in conversion). Other: 1.912 y {I2} (recommended +228TH4cL value, 1990Ho28), 1.906 y (1918Me01). +228TH cL Isotope shift: |D=-0.413 {I5} relative to {+232}Th +228THxcL (1989Ka29) +228TH L 57.759 4 2+ 0.405 NS 7 A +228THX L XREF=ABCDEF +228TH cL J E2 |g to 0+ g.s. +228TH cL T from {+232}U |a decay +228TH G 57.766 5 100 E2 156 L DCC of 22 from theory assumed +228TH cG M also from {+232}U |a decay +228THB G BE2W=167 6 + +EG=57.766 5 BRANCHING RATIO (IN PERCENT)=100.0 + PARTIAL TRANSITION T1/2=4.05E-10 7 SEC + TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY (1+CC)=157.0 22 + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 9.403E-13 6 1.1429E-10 7 + 2 1.0634E-5 11 0.0012925 13 + 3 183.28 24 2.228E4 3 + 4 4.680E9 8 5.688E11 10 + 5 1.673E17 4 2.033E19 4 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 1.48E-5 4 0.010 (IV) 0.00180 4 2.000 + 2 (IS) 167 4 1000.000 (IV) 2.03E4 5 1.000 <=== + 3 2.88E9 7 100.000 <=== 3.50E11 8 10.000 <=== + 4 8.95E18 20 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + +228TH L 186.823 4 4+ 0.164 NS 4 A +228THX L XREF=ABCDEF +228TH cL J E2 |g to 2+ level; member of g.s. rotational band +228TH cL T from {+232}U |a decay +228TH G 129.065 1 100 E2 3.81 L DCC of 6 from theory assumed +228TH cG M also from (|a,|a'2n|g) +228THB G BE2W=242 9 + +EG=129.0650 10 BRANCHING RATIO (IN PERCENT)=100.0 + PARTIAL TRANSITION T1/2=1.64E-10 4 SEC + TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY (1+CC)=4.81 6 + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 8.4305E-14 5 1.02471E-11 6 + 2 1.90986E-7 17 2.32140E-5 20 + 3 0.65942 8 80.151 10 + 4 3.3730E6 5 4.0999E8 6 + 5 2.4153E13 5 2.9357E15 6 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 0.000107 3 0.010 (IV) 0.0130 4 2.000 + 2 (IS) 242 7 1000.000 (IV) 2.94E4 8 1.000 <=== + 3 8.36E8 23 100.000 <=== 1.02E11 3 10.000 <=== + 4 5.20E17 14 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + +228TH L 328.003 4 1- B NO HALF-LIFE GIVEN. +228THX L XREF=ABC +228TH cL J E1 |g to 0+ +228TH G 270.245 2 100.0 16 E1 0.0474 J DCC of 7 from theory assumed +228TH3 G FLAG=L +228TH G 328.000 6 89.3 21 E1 0.0308 J DCC of 5 from theory assumed +228TH3 G FLAG=L +228TH L 378.179 10 6+ A NO HALF-LIFE GIVEN. +228THX L XREF=ABCDF +228TH cL J E2 |g to 2+ level: member of g.s. rotational band +228TH G 191.353 10 100 E2 0.791 L DCC of 11 from theory assumed +228TH cG M also from (|a,|a'2n|g) +228TH L 396.078 5 3- B NO HALF-LIFE GIVEN. +228THX L XREF=ABC +228TH cL J E1 |g's to 4+ and 2+ levels +228TH G 209.253 6 34.5 6 E1 0.086 L DCC of 12 from theory assumed +228TH G 338.320 3 100.0 17 E1 0.0288 L DCC of 4 from theory assumed +228TH L 519.192 6 5- B NO HALF-LIFE GIVEN. +228THX L XREF=ABCDF +228TH cL J E1 |g's to 4+ and 6+ levels +228TH G 141.01 2 10.1 6 E1 0.220 DCC of 3 from theory assumed +228TH G 332.370 4 100 5 E1 0.0299 L DCC of 5 from theory assumed +228TH L 622.5 3 8+ A NO HALF-LIFE GIVEN. +228THX L XREF=DF +228TH cL J E2 |g to 6+ level; member of g.s. rotational band +228TH G 244.4 3 E2 0.332 G DCC of 5 from theory assumed NO RI OR TI. +228TH cG M from (|a,|a'2n|g) +228TH L 695.6 3 7- B NO HALF-LIFE GIVEN. +228THX L XREF=DF +228TH cL J |g to 6+ level; member of K|p=0- octupole band +228TH G 317.4 3 [E1] 0.0331 G DCC of 5 from theory assumed NO RI OR TI. +228TH L 831.823 10 0+ C NO HALF-LIFE GIVEN. +228THX L XREF=ABCDE +228TH cL J L=0 in (p,t) +228TH G 503.823 13 100 7 (E1) 0.0125 L DCC of 18 from theory assumed +228TH3 G FLAG=M +228TH G 774.1 2 33 AP L 50% DRI ASSUMED. +228TH3 G FLAG=M +228TH G 831 E0 0.04 2 +-1 KEV ASSIGNED. +228TH cG E,M,TI from {+232}U |a decay +228TH L 874.473 18 2+ C NO HALF-LIFE GIVEN. +228THX L XREF=ABCE +228TH cL J E1 |g to 3- level, |g to 0+ g.s. +228TH G 478.40 6 100 5 E1 0.0139 DCC of 20 from theory assumed +228TH G 546.45 2 91 5 +228TH G 688.11 4 32 3 & PLACED TWICE. +228TH3 G FL=186.823$ FLAG=N FL= FOUND. +228TH G 816.62 10 12.3 20 +228TH G 874.45 7 23 3 +228TH L 911.8 4 10+ A NO HALF-LIFE GIVEN. +228THX L XREF=DF +228TH cL J |g to 8+ level; member of g.s. band +228TH G 289.4 3 G NO RI OR TI. +228TH L 920.8 3 9- B NO HALF-LIFE GIVEN. +228THX L XREF=DF +228TH cL J |g to 7- and 8+ levels; member of K|p=0- band +228TH G 225.1 3 24.6 15 G +228TH3 G FLAG=H +228TH G 298.3 3 100 G +228TH3 G FLAG=H +228TH L 938.58 7 0+ D NO HALF-LIFE GIVEN. +228THX L XREF=AE +228TH cL J from L(p,t) quoted in 1995Ba42 +228TH G 610.64 10 100 22 L +228TH3 G FLAG=M +228TH G 880.76 10 27 8 L +228TH3 G FLAG=M +228TH L 944.196 13 1,2+ NO HALF-LIFE GIVEN. +228THX L XREF=ABE +228TH cL J |g's to 1- level and 0+ g.s. Possibly unnatural parity level +228TH2cL from (p,t); possible band head for a K|p=1+ band. However, log| +228TH3cL {Ift}=9.8 from 3+ {+228}Pa would rule out J|p=1+ +228TH G 616.20 3 91 11 +228TH G 944.196 14 100 8 L +228TH L 968.369 17 3- F NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J |g's to 1- and 5- levels +228TH G 449.21 4 39 5 +228TH G 572.29 4 100 5 +228TH G 640.34 3 28 4 +228TH L 968.968 5 2+ G NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J E2 |g to 0+ g.s. +228TH G 782.142 5 1.89 6 L +228TH G 911.204 4 100.0 16 E2+M1 +24 8 0.0121 L DCC of 17 from theory assumed +228TH G 968.971 17 61.1 11 E2 0.0107 L DCC of 15 from theory assumed +228TH L 979.499 14 2+ D NO HALF-LIFE GIVEN. +228THX L XREF=ABE +228TH cL J |g's to 0+ g.s. and 4+ level +228TH G 583.41 5 123 11 R +228TH2 G FLAG=M +228TH G 651.48 5 100 9 R +228TH2 G FLAG=M +228TH G 792.8 89 AP L +-1 KEV ASSIGNED. 50% DRI ASSUMED. +228TH3 G FLAG=M +228TH G 921.98 10 18.6 LE L RI/2 ASSUMED. +228TH3 G FLAG=BM +228TH cG Doubly placed |g with undivided intensity (I|g=16.3 {I23}) +228TH2cG in {+228}Ac decay +228TH G 979.48 10 29 3 L +228TH3 G FLAG=M +228TH L 1016.406 21 2+,3-,4+ NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J |g's to 3- and 2+ levels, |g from 3+ level; natural parity +228TH2cL from (p,t) (quoted in 1995Ba42). Multiply placed +228TH3cL |g to 0+ would limit J|p to 2+; possible 2+ member of K|p=1+ band. +228TH4cL However, |g from 1450-keV 4- level would rule out 2+. +228TH G 620.33 6 28.4 14 +228TH G 688.11 4 24.0 15 & PLACED TWICE. +228TH3 G FL=328.003$ FLAG=N FL= FOUND. +228TH G 958.61 4 100 12 +228TH G 1016.44 15 6.8 11 & PLACED TWICE. +228TH3 G FLAG=LM +228TH L 1022.527 6 (3)+ G NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J E2 |g's to 4+ and 2+ levels; E1 |g from 4- level; +228TH2cL member of K|p=2+ band +228TH G 835.710 6 32.4 11 E2 0.0143 L DCC of 20 from theory assumed +228TH cG M |d|<-9 ({+228}Pa decay) +228TH G 964.766 10 100.0 18 E2+M1 -7.2 10 0.0108 L DCC of 16 from theory assumed +228TH L 1059.93 3 4- NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J |g's to 3- and 5- levels; J|p=3-,4+,5- ruled out by +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 540.68 5 58 10 +228TH G 663.88 6 87 7 (M1+E2) 0.06 4 +228TH G 873.11 12 100 10 +228TH L 1091.017 8 4+ G NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J E2 |g to 4+ level, |g to 2+ level; |g to 6+ level +228TH G 694.8 2 2.9 4 I +228TH3 G FLAG=K +228TH G 713.1 3 1.8 4 I +228TH3 G FLAG=K +228TH G 904.19 3 100 4 E2 0.0123 DCC of 18 from theory assumed +228TH cG MR |>+3.7 ({+228}Pa decay) +228TH G 1033.248 9 26.5 9 E2 L +228TH L 1122.951 6 2- H NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J E1 |g to 2+ level, E2+M1 |g to 1- level, (E1+M2) |g to (3)+ +228TH2cL level; member of K|p=2- band +228TH G 100.41 3 2.2 3 (E1+M2) 0.23 AP 3.2 AP L DCC of 5 from theory assumed +228TH3 G FLAG=M +228TH G 153.977 10 16.7 5 E1 0.178 L DCC of 25 from theory assumed +228TH3 G FL=968.968 FL= FOUND. +228TH G 726.863 15 13.7 13 (E2) 0.0189 L DCC of 3 from theory assumed +228TH G 794.947 5 100.0 16 E2+M1 -4.4 10 0.0182 15 L +228TH G 1065.19 4 3.02 12 +228TH L 1153.467 10 2+ 0.29 NS 2 I +228THX L XREF=AB +228TH cL J |g to 2+ has E0 component +228TH cL T from {+228}Ac |b{+-} decay +228TH G 173.964 13 15.5 22 M1+E2 1.2 +11-6 2.3 18 L +228THB G BM1W=4.E-5 +6-4$BE2W=0.6 +7-6 +228TH G 184.54 2 31 4 E0+M1 63 8 M +228TH3 G FL=968.968$ FLAG=L FL= FOUND. +228THB G BM1W=1.2E-4 3 +228TH cG |a(K)exp, L1/L2, L1/L3 indicate E0+5.4%M1 transition +228TH2cG ({+228}Ac |b{+-} decay) +228TH G 278.70 10 71 9 (M1+E2) 0.7 5 @ +228TH3 G FL=874.473 FL= FOUND. +228TH G 321.646 8 100 5 [E2] 0.140 L DCC of 20 from theory assumed +228THB G BE2W=0.29 5 +228TH G 1095.679 20 55 4 [M1,E2] 0.018 10 L +228TH G 1153.52 4 61 4 [E2] +228THB G BE2W=0.00030 6 + +EG=173.964 13 BRANCHING RATIO (IN PERCENT)=2.1 13 + PARTIAL TRANSITION T1/2=1.4E-8 8 SEC + TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY (1+CC)=3.3 18 + WARNING---MR .NE. 0. FOLLOW PAGE 2 NS MEMO 1B/1 (82) TO CORRECT CALCULATIONS + + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 3.4427E-14 18 4.1845E-12 22 + 2 4.293E-8 4 5.218E-6 5 + 3 0.08158 10 9.916 12 + 4 2.297E5 4 2.792E7 4 + 5 9.053E11 16 1.1004E14 19 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 8.E-7 7 0.010 (IV) 9.E-5 8 2.000 + 2 (IS) 1.0 8 1000.000 (IV) 1.2E2 10 1.000 <=== + 3 1.8E6 15 100.000 <=== 2.2E8 18 10.000 <=== + 4 6.E14 5 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + + +EG=184.540 20 BRANCHING RATIO (IN PERCENT)=83 20 + PARTIAL TRANSITION T1/2=3.5E-10 9 SEC + TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY (1+CC)=64 8 + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 2.8841E-14 22 3.506E-12 3 + 2 3.196E-8 4 3.885E-6 5 + 3 0.05397 9 6.561 11 + 4 1.350E5 3 1.641E7 4 + 5 4.730E11 12 5.749E13 15 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 1.3E-6 4 0.010 (IV) 0.00016 5 2.000 + 2 (IS) 1.4 4 1000.000 (IV) 1.7E2 5 1.000 <=== + 3 2.4E6 7 100.000 <=== 2.9E8 8 10.000 <=== + 4 7.4E14 21 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + + +EG=278.70 10 BRANCHING RATIO (IN PERCENT)=5.1 18 + PARTIAL TRANSITION T1/2=5.7E-9 21 SEC + TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY (1+CC)=1.7 5 + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 8.373E-15 21 1.018E-12 3 + 2 4.068E-9 16 4.944E-7 20 + 3 0.003012 17 0.3661 20 + 4 3304 23 4.02E5 3 + 5 5.07E9 5 6.17E11 5 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 9.E-7 4 0.010 (IV) 0.00010 5 2.000 + 2 (IS) 0.42 20 1000.000 (IV) 51 24 1.000 <=== + 3 3.1E5 15 100.000 <=== 3.8E7 18 10.000 <=== + 4 4.1E13 20 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + + +EG=321.646 8 BRANCHING RATIO (IN PERCENT)=4.8 8 + PARTIAL TRANSITION T1/2=6.1E-9 11 SEC + TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY (1+CC)=1.1400 20 + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 5.4468E-15 10 6.6205E-13 12 + 2 1.9868E-9 6 2.4149E-7 7 + 3 0.0011045 5 0.13425 5 + 4 909.7 5 1.1057E5 6 + 5 1.0488E9 6 1.2748E11 8 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 7.9E-7 14 0.010 (IV) 9.6E-5 17 2.000 + 2 (IS) 0.29 5 1000.000 (IV) 35 6 1.000 <=== + 3 1.6E5 3 100.000 <=== 1.9E7 4 10.000 <=== + 4 1.6E13 3 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + + +EG=1095.679 20 BRANCHING RATIO (IN PERCENT)=2.3 4 + PARTIAL TRANSITION T1/2=1.24E-8 23 SEC + TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY (1+CC)=1.018 10 + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 1.37794E-16 18 1.67485E-14 22 + 2 4.3314E-12 9 5.2647E-10 11 + 3 2.0751E-7 6 2.5222E-5 7 + 4 0.014728 6 1.7902 7 + 5 1463.3 7 1.7787E5 8 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 1.09E-8 20 0.010 (IV) 1.33E-6 25 2.000 + 2 (IS) 0.00034 7 1000.000 (IV) 0.042 8 1.000 + 3 16 3 100.000 2.0E3 4 10.000 <=== + 4 1.4E8 3 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + + +EG=1153.52 4 BRANCHING RATIO (IN PERCENT)=2.6 5 + PARTIAL TRANSITION T1/2=1.13E-8 21 SEC + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 1.1809E-16 3 1.4353E-14 4 + 2 3.3490E-12 13 4.0707E-10 16 + 3 1.4476E-7 8 1.7595E-5 10 + 4 0.009270 7 1.1267 8 + 5 831.0 7 1.0100E5 8 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 1.04E-8 19 0.010 (IV) 1.26E-6 23 2.000 + 2 (IS) 0.00030 6 1000.000 (IV) 0.036 7 1.000 + 3 12.8 23 100.000 1.6E3 3 10.000 <=== + 4 9.9E7 18 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + +228TH L 1160 5 NO HALF-LIFE GIVEN. +228THX L XREF=E +228TH L 1168.375 5 3- H NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J E1 |g's to 2+ levels, |g to 5- level +228TH G 77.34 3 1.7 3 L +228TH3 G FLAG=M +228TH G 145.849 10 10.4 4 E1 0.203 L DCC of 3 from theory assumed +228TH G 199.407 10 20.8 8 E1 0.096 L DCC of 14 from theory assumed +228TH G 649.03 13 2.7 3 & PLACED TWICE. +228TH G 772.291 5 100.0 20 E2+M1 -3.4 +8-27 0.021 3 L +228TH G 840.377 7 61.9 21 E2 0.0142 L DCC of 20 from theory assumed +228TH G 981.5 2 3.0 4 I +228TH3 G FLAG=K +228TH G 1110.610 10 18.7 20 E1 @ +228TH2 G FLAG=L +228TH L 1174.508 18 (5+) G NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J |g to 4+ level; member of K|p=2+ band +228TH G 987.88 9 NO RI OR TI. +228TH L 1175.39 5 2+ NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL J |g to 0+ g.s., |g to 4+ level +228TH G 231.42 10 32 5 L +228TH3 G FLAG=M +228TH G 988.63 20 100 17 L +228TH3 G FLAG=M +228TH G 1117.63 10 70 10 L +228TH3 G FLAG=M +228TH G 1175.31 10 31 4 L +228TH3 G FLAG=M +228TH L 1189.8 4 11- B NO HALF-LIFE GIVEN. +228THX L XREF=DF +228TH cL J |g's to 9- and 10+ levels; band structure +228TH G 268.9 3 67 5 G +228TH3 G FLAG=H +228TH G 278.0 3 100 G +228TH3 G FLAG=H +228TH L 1200.54 4 (3)+ I NO HALF-LIFE GIVEN. +228THX L XREF=B +228TH cL J E0 transition to (3)+ level +228TH G 178.14 7 22 LE (E0) I RI/2 ASSUMED. +228TH3 G FLAG=K +228TH G 231.50 5 100 5 I +228TH3 G FL=968.968$ FLAG=K FL= FOUND. +228TH G 1013.54 13 41 5 & PLACED TWICE. +228TH3 G FLAG=IK +228TH G 1142.78 11 3 I +-1 KEV ASSIGNED. +228TH3 G FLAG=K +228TH L 1226.565 7 (4)- H NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J E1 |g's to 4+ and (3)+ levels; member of K|p=2- band +228TH G 135.51 2 3.66 20 E1 0.242 DCC of 4 from theory assumed +228TH G 204.026 10 20.7 10 E1 0.091 L DCC of 13 from theory assumed +228TH G 707.41 3 27.5 6 (E2) 0.0200 DCC of 3 from theory assumed +228TH G 830.486 8 100 4 E2(+M1) -7.7 9 0.0152 2 L +228TH G 1039.84 8 9.9 6 +228TH L 1239.4 4 12+ A NO HALF-LIFE GIVEN. +228THX L XREF=DF +228TH cL J |g to 10+ level; member of g.s. band +228TH G 327.5 3 G NO RI OR TI. +228TH L 1297.423 10 (5)- H NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J E1 |g to 4+ level; band structure +228TH G 601.7 3 11.1 19 & ? PLACED TWICE. UNCERTAIN PLACEMENT. +228TH3 G FLAG=IK +228TH G 778.1 2 100 11 I +228TH3 G FLAG=K +228TH cG |g not reported in {+228}Ac decay +228TH G 901.26 13 74 11 K +228TH G 1110.610 10 89 7 E1 @ +228TH3 G FLAG=L +228TH L 1344.078 11 3- J NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL J |g's to 1- and 5- levels; band structure. Although the |g to +228TH2cL 1- level is multiply placed, this position in level scheme is +228TH3cL supported by coin results +228TH G 168.65 10 9 3 L +228TH3 G FLAG=M +228TH G 824.934 23 47 5 L +228TH3 G FLAG=M +228TH G 947.982 11 100 8 L +228TH3 G FLAG=M +228TH G 1016.44 15 18 3 & PLACED TWICE. +228TH3 G FLAG=LM +228TH G 1157.14 15 6.6 12 L +228TH3 G FLAG=M +228TH G 1286.27 20 47 9 L +228TH3 G FLAG=M +228TH L 1416.11 6 2+,3- NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL J |g's to 1- and 4+ levels +228TH G 471.76 15 100 10 L +228TH3 G FLAG=M +228TH G 1019.86 10 64 12 L +228TH3 G FLAG=M +228TH G 1088.18 15 18 4 L +228TH3 G FLAG=M +228TH G 1229.40 15 23 7 L +228TH3 G FLAG=M +228TH L 1431.979 6 4+ NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J E1 |g to 3- level, E2+M1 |g to 4+ level; J|=3 from +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 257.49 2 0.64 3 (M1) 1.36 DCC of 19 from theory assumed +228TH G 263.62 2 0.95 5 E1 0.0502 DCC of 7 from theory assumed +228TH G 278.70 10 0.70 11 @ +228TH3 G FL=1153.467 FL= FOUND. +228TH G 340.98 2 8.8 4 E2+M1 -5.2 18 0.136 23 +228TH G 409.462 6 43.8 8 E2+M1 -5.4 8 0.082 4 +228TH G 452.51 5 0.45 4 +228TH G 463.004 6 100.0 16 E2 0.0522 L DCC of 8 from theory assumed +228TH G 1245.16 6 2.47 12 +228TH G 1374.24 6 0.32 9 M +228TH L 1450.394 10 4- NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J M1+E2 |g's to 3- level, |g to 4+ level; J|=3 from +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 18.4 11.9 16 [E1] 6.6 K +-1 KEV ASSIGNED. DCC of 10 from theory assumed +228TH cG E deduced from E(level) +228TH G 153.02 2 3.58 19 M1+E2 +0.60 8 4.8 2 I +228TH3 G FLAG=K +228TH G 223.80 2 43.4 20 M1+E2 -0.18 5 1.97 3 +228TH G 275.85 4 2.65 23 I +228TH3 G FLAG=K +228TH G 282.00 3 60 3 M1+E2 -0.51 12 0.88 7 K +228TH G 327.45 4 100.0 10 I +228TH3 G FLAG=K +228TH G 359.36 3 4.19 23 I +228TH3 G FLAG=K +228TH G 390.45 5 3.58 19 I +228TH3 G FLAG=K +228TH G 427.90 3 4.0 3 I +228TH3 G FLAG=K +228TH G 434.01 3 5.6 3 I +228TH3 G FLAG=K +228TH G 482.03 5 5.9 4 I +228TH3 G FL=968.369$ FLAG=K FL= FOUND. +228TH G 1054.22 6 10.9 10 +228TH L 1497.1 5 13- B NO HALF-LIFE GIVEN. +228THX L XREF=DF +228TH cL J |g's to 11- and 12+ levels; band structure +228TH G 257.7 3 52 4 G +228TH3 G FLAG=H +228TH G 307.3 3 100 G +228TH3 G FLAG=H +228TH L 1531.474 6 3+ NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J E2+M1 |g to 2+ level, M1 |g to 4+ level +228TH G 99.509 6 100 6 M1 4.09 L DCC of 6 from theory assumed +228TH G 356.94 10 1.35 14 L +228TH3 G FLAG=M +228TH G 377.99 10 1.98 24 L +228TH3 G FLAG=M +228TH G 440.44 5 9.6 6 M1 0.314 DCC of 5 from theory assumed +228TH G 508.959 17 40 10 E2(+M1) 1.1 GT 0.08 4 L +228TH G 562.500 4 71 4 E2+M1 +1.6 6 0.07 3 L +228TH G 1135.24 15 0.78 12 L +228TH3 G FLAG=M +228TH G 1344.59 15 0.71 14 L +228TH3 G FLAG=M +228TH L 1539.21 9 2,3,4 NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL J |g to 3- level, |g from 3+ level +228TH G 416.30 20 100 16 L +228TH2 G FLAG=M +228TH G 1142.85 15 78 16 L +228TH2 G FLAG=M +228TH L 1580.91 6 (2-) NO HALF-LIFE GIVEN. +228THX L XREF=B +228TH cL J (M1+E2) |g's to 3- and 1- levels +228TH G 354.2 2 43 7 & PLACED TWICE. +228TH3 G FLAG=IK +228TH G 601.7 3 44 7 & PLACED TWICE. +228TH3 G FLAG=IK +228TH G 1184.71 9 69 6 (M1+E2) 0.015 8 I +228TH3 G FLAG=K +228TH G 1252.98 10 100 9 (M1+E2) 0.013 7 I +228TH3 G FLAG=K +228TH G 1523.4 2 88 9 & PLACED TWICE. +228TH3 G FLAG=IK +228TH L 1588.335 14 4- NO HALF-LIFE GIVEN. +228THX L XREF=B +228TH cL J E1 |g's to 3+ and 4+; J|=3- from |g(|q,H,T) +228TH2cL ({+228}Pa decay) +228TH G 56.86 3 16.1 8 E1 0.533 I DCC of 8 from theory assumed +228TH3 G FLAG=K +228TH G 137.95 2 100 3 M1 7.89 I DCC of 11 from theory assumed +228TH3 G FLAG=K +228TH G 156.34 2 20.6 11 E1 0.172 I DCC of 24 from theory assumed +228TH3 G FLAG=K +228TH G 420.03 8 10.3 8 I +228TH3 G FLAG=K +228TH L 1599.5 5 14+ A NO HALF-LIFE GIVEN. +228THX L XREF=DF +228TH cL J |g to 12+; band structure +228TH G 360.1 3 G NO RI OR TI. +228TH L 1617.78 7 2+,3,4+ NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J |g's to 4+ and 2+ levels +228TH G 649.03 13 114 11 & PLACED TWICE. +228TH2 G FL=968.968$ FLAG=M FL= FOUND. +228TH G 1430.95 10 100 20 L +228TH3 G FLAG=M +228TH G 1559.78 14 57 11 M +228TH L 1638.284 9 2+ NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J |g's to 0+ g.s. and 4+ level +228TH G 470.20 19 2.3 6 +228TH G 515.06 10 8.2 8 L +228TH3 G FLAG=M +228TH G 1309.71 20 3.2 10 L +228TH3 G FLAG=M +228TH G 1451.40 15 1.8 4 L +228TH3 G FLAG=M +228TH G 1580.53 3 100 7 (M1,E2) +228TH G 1638.281 10 85 7 (E2) L +228TH L 1643.125 15 (2-,3-) NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J (M1) |g's to 2- and 3- levels, +228TH G 474.79 11 4.6 7 +228TH G 520.151 16 11.8 10 (M1) 0.201 L DCC of 3 from theory assumed +228TH G 627.23 20 2.8 6 L +228TH3 G FLAG=M +228TH G 674.16 30 LE Q +-1 KEV ASSIGNED. RI/2 ASSUMED. +228TH3 G FL=968.968 FL= FOUND. +228TH cG E from level energies +228TH G 674.76 30 LE Q +-1 KEV ASSIGNED. RI/2 ASSUMED. +228TH3 G FL=968.369 FL= FOUND. +228TH cG E from level energies +228TH G 699.08 15 7.4 10 L +228TH3 G FLAG=M +228TH G 1247.08 3 100 5 (M1) 0.0201 DCC of 3 from theory assumed +228TH G 1315.31 9 2.7 4 +228TH L 1645.954 12 3+ NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J E2 |g's to 2+ and 4+ levels, |g's to 2- and 4- levels +228TH G 114.54 6 0.28 4 +228TH G 419.42 10 0.65 9 L +228TH3 G FLAG=M +228TH G 492.30 8 0.74 5 +228TH G 523.131 16 3.5 3 B +228TH3 G FL=1122.951$ FLAG=L FL= FOUND. +228TH G 555.07 16 1.40 14 +228TH G 623.27 20 0.34 9 L +228TH3 G FLAG=M +228TH G 629.40 5 1.20 21 +228TH G 666.47 4 1.8 2 @ +228TH G 677.07 9 1.99 16 +228TH3 G FL=968.968 FL= FOUND. +228TH G 1249.97 14 1.94 14 +228TH G 1459.138 15 23.7 12 E2 L +228TH G 1588.19 3 100.0 25 E2 +228TH L 1682.81 3 2+,3(+),4+ NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J (E2) |g to 4+ level, |g to 2+ level +228TH G 660.1 3 0.6 AP L 50% DRI ASSUMED. +228TH3 G FLAG=M +228TH G 1495.93 7 100 5 (E2) +228TH G 1625.06 5 29.1 19 +228TH L 1683.82 5 (4-) NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J (M1+E2) |g's to 3- and 5- levels +228TH G 457.35 7 19.2 19 +228TH G 623.7 2 26 LE I RI/2 ASSUMED. +228TH3 G FLAG=K +228TH cG |g not resolved from the 623.27|g from 1645 level in {+228}Pa +228TH2cG decay, I(doublet)=23 {I3}. Not reported in {+228}Ac decay. +228TH G 1164.55 7 83 4 (M1+E2) 0.016 9 +228TH G 1287.78 12 100 7 (M1+E2) 0.012 7 +228TH L 1688.394 11 2+,3+ NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J |g's to 2+ and 4+ levels; J|p|=3-,4+ from +228TH2cL |g(|q,H,T) ({+228}Pa decay) +228TH G 42.46 5 0.60 20 L +228TH3 G FLAG=M +228TH G 672.00 15 1.7 5 L +228TH3 G FLAG=M +228TH G 813.77 15 0.46 11 L +228TH3 G FLAG=M +228TH G 1501.57 5 29.4 15 +228TH G 1630.627 10 100 3 (M1,E2) L +228TH L 1724.283 6 2+ NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J M1 |g to 2+ level, |g to 0+ g.s.; log| {Ift}=7.06 for |b{+-} +228TH2cL decay from 3+ {+228}Ac 7.32 for |e decay from 3+ {+228}Pa +228TH G 548.73 15 2.3 3 L +228TH2 G FLAG=M +228TH G 570.88 4 17.1 9 (M1) 0.156 DCC of 22 from theory assumed +228TH G 701.747 14 18.2 10 (M1) 0.091 L DCC of 13 from theory assumed +228TH G 755.315 4 100 3 M1 0.0747 L DCC of 11 from theory assumed +228TH G 1537.87 9 4.2 5 B +228TH3 G FL=186.823 FL= FOUND. +228TH G 1666.523 13 17.3 8 M1 L +228TH G 1724.20 4 2.7 3 +228TH L 1735.450 25 (4+) NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels; possible |g to 6+ level would +228TH2cL limit J|p to 4+ +228TH G 1217.03 10 39 6 B ? UNCERTAIN PLACEMENT. +228TH3 G FL=519.192$ FLAG=LM FL= FOUND. +228TH G 1357.78 15 37 7 B ? UNCERTAIN PLACEMENT. +228TH3 G FL=378.179$ FLAG=LM FL= FOUND. +228TH G 1548.65 4 70 7 L +228TH3 G FLAG=M +228TH G 1677.67 3 100 9 L +228TH3 G FLAG=M +228TH L 1743.89 3 4+ NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J (E2) |g to 2+ level; (E2+M1) |g to 4+ level; |g to 6+ level +228TH G 399.62 10 16.3 17 L +228TH3 G FLAG=MP +228TH G 590.65 11 9.3 11 I ? UNCERTAIN PLACEMENT. +228TH3 G FLAG=K +228TH cG |g not reported in {+228}Ac decay +228TH G 684.0 3 10.4 23 I ? UNCERTAIN PLACEMENT. +228TH3 G FLAG=K +228TH cG |g not reported in {+228}Ac decay +228TH G 1365.71 9 8.8 8 +228TH G 1557.10 4 100 5 (E2+M1) +1.2 2 +228TH G 1686.12 5 53.8 23 (E2) +228TH L 1758.24 12 2+,3,4+ NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 326.04 20 100 15 L +228TH3 G FLAG=M +228TH G 1571.52 20 17 5 L +228TH3 G FLAG=M +228TH G 1700.59 20 31 7 L +228TH3 G FLAG=M +228TH L 1760.218 24 2+,3(+) NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J (E2) |g to 4+ level, |g to 2+ level; J|p|=4+ from +228TH2cL |g(|q,H,T) in {+228}Pa decay +228TH G 584.7 3 12 4 & PLACED TWICE. +228TH3 G FLAG=IK +228TH G 737.72 5 73 7 +228TH G 791.44 9 21 6 @ +228TH3 G FL=968.968 FL= FOUND. +228TH G 1573.26 5 65 4 (E2) +228TH G 1702.44 5 100 7 +228TH L 1795.90 10 3-,4+ NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL J |g's to 5- and 2+ levels +228TH G 1276.69 10 78 17 L +228TH3 G FLAG=M +228TH G 1738.22 25 100 22 L +228TH3 G FLAG=M +228TH L 1797.65 8 2+ NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL J |g's to 0+ g.s. and 3- level; log| {If{+1u}t}=8.14 for +228TH2cL |b{+-} decay from 3+ {+228}Ac +228TH G 1401.49 10 60 15 L +228TH3 G FLAG=M +228TH G 1469.71 15 100 20 L +228TH3 G FLAG=M +228TH G 1740.4 3 55 15 L +228TH3 G FLAG=M +228TH G 1797.5 5 11 4 L +228TH3 G FLAG=M +228TH L 1804.689 23 4+ NO HALF-LIFE GIVEN. +228THX L XREF=B +228TH cL J M1+E2 |g to 3+ level, (M1+E2) |g to 4+ level, |g to 6+ level +228TH G 116.26 5 12.8 16 I +228TH3 G FLAG=K +228TH G 121.18 7 15.2 24 I ? UNCERTAIN PLACEMENT. +228TH3 G FL=1683.82$ FLAG=KB FL= FOUND. +228TH G 121.87 3 26.4 24 I +228TH3 G FLAG=K +228TH G 158.74 3 100 6 M1+E2 0.55 15 I +228TH3 G FLAG=K +228TH G 354.2 2 23 4 & PLACED TWICE. +228TH3 G FLAG=IK +228TH G 372.60 3 126 6 I ? UNCERTAIN PLACEMENT. +228TH3 G FL=1431.979$ FLAG=KB FL= FOUND. +228TH G 651.5 2 27 4 I +228TH3 G FLAG=K +228TH G 1426.5 2 38 5 I +228TH3 G FLAG=K +228TH G 1618.0 1 72 5 (M1,E2) I +228TH3 G FLAG=K +228TH L 1817.432 23 4- NO HALF-LIFE GIVEN. +228THX L XREF=B +228TH cL J E2+M1 |g to 3- level, D+Q |g to 5- level +228TH G 367.04 2 100 5 M1 0.512 I DCC of 8 from theory assumed +228TH3 G FLAG=K +228TH G 1298.3 2 18.4 16 (M1+E2) I +228TH3 G FLAG=K +228TH cG MR +0.27|<|d|<+5 from |g(|q,H,T) in {+228}Pa decay +228TH G 1421.1 2 57 3 E2+M1 +2.0 5 I +228TH3 G FLAG=K +228TH L 1838.3 5 15- B NO HALF-LIFE GIVEN. +228THX L XREF=D +228TH cL J |g to 13- level; band structure +228TH G 341.2 3 G NO RI OR TI. +228TH L 1892.996 17 3+ NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J E2+M1 |g to 2+ level, M1+E2 |g to 4+ level +228TH G 477.1 3 4.4 13 I +228TH3 G FLAG=KP +228TH G 666.47 4 11 2 @ +228TH G 692.47 7 12.6 9 (M1+E2+E0) 0.24 3 I +228TH3 G FLAG=K +228TH cG CC from |a(K)exp in {+228}Pa decay +228TH G 724.42 11 4.8 6 & PLACED TWICE. +228TH3 G FLAG=IK +228TH G 739.2 2 3.6 6 I +228TH3 G FLAG=K +228TH G 770.2 2 14.3 9 I +228TH3 G FLAG=K +228TH G 870.45 2 100 5 M1 +228TH cG MR -0.1 {I1} ({+228}Pa decay) +228TH G 924.3 2 17.0 13 I +228TH3 G FLAG=K +228TH G 1706.17 7 18.1 8 M1+E2 +0.42 4 +228TH G 1835.29 5 64 8 E2+M1 +2.9 3 +228TH L 1899.95 4 2+ NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J M1+E2 |g tp 2+ level, |g's to 0+ g.s. and 3- level +228TH G 877.39 7 41 4 +228TH G 883.6 3 6.6 18 I +228TH3 G FLAG=K +228TH G 920.8 3 17 4 I +228TH3 G FLAG=K +228TH G 931.02 7 43 4 I +228TH3 G FLAG=K +228TH G 1503.7 2 31 3 I +228TH3 G FLAG=K +228TH G 1842.14 8 100 5 M1+E2 -0.86 14 +228TH G 1900.14 17 9 3 +228TH L 1901.93 8 3-,4 NO HALF-LIFE GIVEN. +228THX L XREF=B +228TH cL J |g's to 3- and 5- levels; multiply placed |g to 6+ would +228TH2cL rule out J|p=3- and 4-. log| {If{+1u}t}=7.10 for decay from 3+ {+228}Pa +228TH3cL rules out 5- +228TH G 1383.2 2 100 9 I +228TH3 G FLAG=K +228TH G 1505.9 2 100 9 I +228TH3 G FLAG=K +228TH G 1523.4 2 109 11 & PLACED TWICE. +228TH3 G FLAG=IK +228TH G 1715.06 10 91 6 I +228TH3 G FLAG=K +228TH L 1906.64 10 (2+) NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL J |g to 0+ g.s., |g to 2+,3- level; log| {If{+1u}t}=7.5 from +228THxcL 3+ {+228}Ac +228TH G 490.33 15 93 19 L +228TH3 G FLAG=M +228TH G 1074.71 15 84 25 L +228TH3 G FLAG=M +228TH G 1907.18 20 100 8 L +228TH3 G FLAG=M +228TH L 1925.22 4 3+,4+ NO HALF-LIFE GIVEN. +228THX L XREF=B +228TH cL J M1+E2 |g to 4+ level, |g's to (5+) and 3- levels +228TH G 724.42 11 7.9 9 & PLACED TWICE. +228TH3 G FLAG=IK +228TH G 750.10 10 7.0 8 I +228TH3 G FLAG=K +228TH G 865.15 13 5.2 7 I +228TH3 G FLAG=K +228TH G 956.8 2 26 5 I +228TH3 G FL=968.369$ FLAG=K FL= FOUND. +228TH G 1529.02 6 27.2 14 I +228TH3 G FLAG=K +228TH G 1738.48 5 100 5 M1+E2 I +228TH3 G FLAG=K +228TH L 1928.57 6 3+ NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J |g's to 2+ and 4+ levels; J|p|=2+,3-,4+ from +228TH2cL |g(|q,H,T) in {+228}Pa decay +228TH G 168.42 9 12 3 I +228TH3 G FLAG=K +228TH G 389.12 15 42 6 L +228TH3 G FLAG=M +228TH G 584.7 3 30 10 & PLACED TWICE. +228TH3 G FLAG=IKP +228TH G 1741.74 21 43 12 +228TH G 1870.81 9 100 6 (M1+E2) +228TH L 1937.16 9 2+,3,4+ NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 397.94 10 100 11 L +228TH3 G FLAG=M +228TH G 1062.55 15 37 11 L +228TH3 G FLAG=M +228TH G 1750.54 20 30 3 L +228TH3 G FLAG=M +228TH G 1879.6 3 4.8 18 L +228TH3 G FLAG=M +228TH L 1944.895 11 3+ NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J E2+M1 |g's to 2+ and 4+ levels +228TH G 184.61 5 1.7 2 (M1) 3.45 I DCC of 5 from theory assumed +228TH3 G FLAG=K +228TH G 220.61 2 5.2 3 (M1) 2.10 I DCC of 3 from theory assumed +228TH3 G FLAG=K +228TH G 299.10 10 1.79 21 M1 0.90 I DCC of 13 from theory assumed +228TH3 G FLAG=K +228TH G 306.61 2 8.3 4 M1 0.84 I DCC of 12 from theory assumed +228TH3 G FLAG=K +228TH G 512.79 11 5.5 6 I +228TH3 G FLAG=K +228TH G 718.31 2 26.2 17 (E1) +228TH G 776.52 3 32 3 +228TH G 791.44 9 15 2 (M1) 0.0661 @ DCC of 10 from theory assumed +228TH G 853.97 8 3.4 3 I +228TH3 G FLAG=K +228TH G 922.5 2 9.4 5 I +228TH3 G FLAG=K +228TH G 928.4 2 3.7 3 I +228TH3 G FLAG=K +228TH G 975.98 5 56 3 M1 0.0381 DCC of 6 from theory assumed +228TH3 G FL=968.968 FL= FOUND. +228TH G 1070.40 7 5.0 3 I +228TH3 G FLAG=K +228TH G 1549.3 2 5.0 8 I +228TH3 G FLAG=K +228TH G 1758.11 5 37.7 20 E2+M1 -9 1 +228TH G 1887.12 5 100 5 E2+M1 -9.1 9 +228TH L 1958.72 22 2+ NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL J |g's to 0+ g.s. and 4+ level +228TH G 1772.2 3 100 28 L +228TH3 G FLAG=M +228TH G 1958.4 3 83 28 L +228TH3 G FLAG=M +228TH L 1964.98 7 2+,3,4+ NO HALF-LIFE GIVEN. +228THX L XREF=B +228TH cL J |g to 2+ and 4+ levels; multiple placed |g to 0+ g.s., would +228TH2cL limit J|p to 2+ +228TH G 548.74 11 46 LT I RI/2 ASSUMED. +228TH3 G FLAG=K +228TH cG Multiply placed |g in {+228}Pa decay with I|g(doublet)=41 +228THxcG {I5} +228TH G 1778.0 6 6 2 I +228TH3 G FLAG=K +228TH G 1907.13 11 100 9 I +228TH3 G FLAG=K +228TH G 1965.22 12 43 4 & PLACED TWICE. +228TH3 G FLAG=K +228TH L 1974.20 11 3-,4+ NO HALF-LIFE GIVEN. +228THX L XREF=B +228TH cL J |g's to 2+ and 5- levels +228TH G 1455.0 2 87 5 I +228TH3 G FLAG=K +228TH G 1578.2 2 100 10 I +228TH3 G FLAG=K +228TH G 1787.2 2 28 3 I +228TH3 G FLAG=K +228TH G 1916.6 3 11.3 23 I +228TH3 G FLAG=K +228TH L 1981.97 6 2+,3,4+ NO HALF-LIFE GIVEN. +228THX L XREF=B +228TH cL J |g's to 2+ and 4+ levels +228TH G 1013.54 13 32 4 & PLACED TWICE. +228TH3 G FLAG=IK +228TH G 1795.15 6 100 6 I +228TH3 G FLAG=K +228TH G 1924.2 2 15.1 17 I +228TH3 G FLAG=K +228TH L 1987.46 10 4+ NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL J |g's to 2+ and 6+ levels +228TH G 1017.92 20 29 7 L +228TH3 G FL=968.968$ FLAG=M FL= FOUND. +228TH G 1609.41 15 39 8 L +228TH3 G FLAG=M +228TH G 1800.86 20 22 4 L +228TH3 G FLAG=M +228TH G 1929.78 20 100 11 L +228TH3 G FLAG=M +228TH L 1988.1 6 16+ A NO HALF-LIFE GIVEN. +228THX L XREF=D +228TH cL J |g to 14+ level; band structure +228TH G 388.6 3 G NO RI OR TI. +228TH L 2010.11 5 2+,3,(4+) NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL J |g's to 2+, 2- and 4+ levels limit J|p to 2+, 3. However, +228TH2cL possible E0 component in the 918|g to (4)+ level ({+228}Ac |b{+-} +228TH3cL decay) would require J|p=(4+), making the 887|g to 2- level an M2 +228THxcL transition +228TH G 214.85 10 49 7 L ? UNCERTAIN PLACEMENT. +228TH3 G FL=1795.90$ FLAG=M FL= FOUND. +228TH cG |g not reported in {+228}Pa decay +228TH G 372.57 20 11 3 L ? UNCERTAIN PLACEMENT. +228TH3 G FL=1638.284$ FLAG=MB FL= FOUND. +228TH G 887.33 10 46 5 L +228TH3 G FLAG=M +228TH G 919.01 13 47 6 +228TH cG M possible E0 component ({+228}Ac |b{+-} decay) +228TH G 1040.92 15 75 15 L +228TH3 G FLAG=M +228TH G 1823.21 10 65 6 +228TH G 1952.37 10 100 7 +228TH L 2013.6 3 2+,3,4+ NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 1826.7 3 100 38 L +228TH3 G FLAG=M +228TH G 1955.9 5 38 14 L +228TH3 G FLAG=M +228TH L 2016.76 10 (2-,3-,4-) NO HALF-LIFE GIVEN. +228THX L XREF=B +228TH cL J (M1+E2) |g to 3- level +228TH G 1620.67 10 100 (M1+E2) I +228TH3 G FLAG=K +228TH L 2022.84 8 NO HALF-LIFE GIVEN. +228THX L XREF=AB +228TH cL Level is proposed in both {+228}Ac and {+228}Pa decays. +228TH2cL However, there is agreement only on one |g (1148.16|g) from this level +228TH G 1053.09 20 220 68 L ? UNCERTAIN PLACEMENT. +228TH3 G FL=968.968$ FLAG=MB FL= FOUND. +228TH cG Possibly part of a doublet in {+228}Pa decay +228TH G 1148.16 14 100 20 +228TH G 1965.22 12 143 14 & PLACED TWICE. +228TH3 G FLAG=M +228TH cG E,RI a multiply placed |g in {+228}Pa with I|g(doublet)=143 {I13}. +228TH2cG All intensity placed here in {+228}Ac decay with I|g=346 {I31} +228TH L 2029.84 16 1,2+ NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL J |g to 0+ g.s. +228TH G 939.87 15 200 70 L ? UNCERTAIN PLACEMENT. +228TH3 G FL=1091.017$ FLAG=MB FL= FOUND. +228TH G 1013.58 20 100 28 L +228TH3 G FLAG=M +228TH G 1971.9 3 78 17 L +228TH3 G FLAG=M +228TH G 2029.4 5 39 11 L +228TH3 G FLAG=M +228TH L 2036.99 17 2+,3,4+ NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL J |g's to 2+ and 4+ levels +228TH G 1850.13 20 100 18 L +228TH3 G FLAG=M +228TH G 1979.3 3 41 11 L +228TH3 G FLAG=M +228TH L 2123.1 3 (2+) NO HALF-LIFE GIVEN. +228THX L XREF=A +228TH cL E the level may be questionable, Q(|b{+-})({+228}Ac)=2127 {I3}. +228TH cL J |g's to 4+ and 1- levels; log| {Ift}=3.5 {I20} indicates an +228TH2cL allowed transition +228TH G 1795.1 5 100 38 L +228TH3 G FLAG=M +228TH G 1936.3 3 100 24 L +228TH3 G FLAG=M +228TH L 2209.7 6 17- B NO HALF-LIFE GIVEN. +228THX L XREF=D +228TH cL J |g to 15- level; band structure +228TH G 371.4 3 [E2] G NO RI OR TI. +228TH L 2407.9 7 18+ A NO HALF-LIFE GIVEN. +228THX L XREF=D +228TH cL J |g tp 16+ level; band structure +228TH G 419.8 3 [E2] G NO RI OR TI. +228THF G FL=1988.1 FL= FOUND. + +EG=419.8 3 NO INTENSITY OR PARTIAL WIDTH + +228TH 228AC B- DECAY 1987DA28 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228AC P 0 3+ 6.15 H 2 2127 3 +228TH N 1.000 1.000 1.0 1.0 +228TH PN 2 +228TH cN NR From absolute I|g, based on measurements by 1992Li05, +228TH2cN 1983Sc13 and 1982Sa36. This normalization leads to I|b(g.s.)=6% {I6}, +228TH4cN although consistent with zero as expected from the spin change |DJ=3, +228TH5cN it may indicate that some g.s. transitions are missing from the level +228THxcN scheme. +228TH cL 1992Li05: measured absolute I|g +228TH cL 1987Da28: measured E|g, I|g, |g|g. Earlier report: 1985Da05 +228TH cL 1983Sc13, 1982Sa36: measured absolute I|g +228TH cL 1982Ma52, 1960Ar06, 1957Bj56: measured ce +228TH cL 1979Bo30: measured E|g; not included in E|g calculation +228TH2cL because five out of twelve E|g disagree with measurements of 1987Da28 +228TH3cL and 1979He10 (deviation>3 x |s) +228TH cL 1979He10: measured E|g +228TH cL 1974De14: measured E|g, I|g, |b|g(|q), |b|g(circ pol)(|q) +228TH cL +228TH cL The decay scheme is that proposed by 1987Da28 +228TH cL E,J From adopted levels +228TH CL BAND(A) GS ROTATIONAL BAND +228TH CL BAND(B) KPI=0- OCTUPOLE BAND +228TH CL BAND(C) KPI=0+ TWO OCTUPOLE PHONON BAND +228TH CL BAND(D) KPI=1- OCTUPOLE BAND +228TH CL BAND(E) KPI=2+ GAMMA-VIBRATIONAL BAND +228TH CL BAND(F) KPI=2- OCTUPOLE BAND +228TH CL BAND(G) KPI=2+ ROTATIONAL BAND ON QUASIPARTICLE STATE +228TH cB J|p({+228}Ac)=3+ +228TH cB Q(|b{+-})=2127 {I3} (1995Au04) +228TH cB IB Deduced from intensity balance in the level scheme. +228TH cG E From 1987Da28, unless otherwise noted +228TH cG RI From 1987Da28, unless otherwise noted. The relative I|g of +228TH2cG 1987Da28 have been normalized to the absolute measurements of 1992Li05, +228TH3cG 1983Sc13 and 1982Sa36 at the three |g's with I|g>10 % (338.324|g +228TH4cG I|g=11.27% {I19}, 911.205|g I|g=25.8% {I4} and 968.987|g I|g=15.8% +228TH5cG {I3}, giving a normalization factor of 0.0258 {I5}). +228TH cG M From adopted I|g and the Ice data of 1960Ar06 and 1971He23 +228TH2cG (as noted with |a(exp)) normalized to theoretical values for: +228TH3cG |a(L)(E2) for 129.065|g, |a(K)(E1) for 209.253|g and |a(K)(E2) for +228THxcG 968.971|g +228TH cG E(A) Weighted average of measurements by 1987Da28, 1979He10. The +228TH2cG measurements of 1979He10 have been corrected by using the calibration +228TH3cG line E|g from 1995HeZZ. +228TH cG E(B) Energy fit poor, E|g not included in the least squares fit +228TH2cG to obtain E(level) +228TH cG E(M) |g unassigned by 1987Da28. Placement suggested by {+228}Pa +228TH2cG decay +228TH cG RI(D) Weighted average of absolute intensity measurements of +228TH2cG 1992Li05, 1983Sc13, 1982Sa36 +228TH cG RI(E) Weighted average of measurements by 1992Li05, 1987Da28, +228TH2cG 1983Sc13, 1982Sa36 +228TH cG RI(F) Weighted average of measurements by 1987Da28, 1983Sc13, +228THxcG 1982Sa36 +228TH cG RI(G) Weighted average of measurements by 1987Da28, 1983Sc13 +228TH cG RI(H) Weighted average of measurements by 1987Da28, 1982Sa36 +228TH cG RI(I) Weighted average of measurements by 1992Li05, 1987Da28, +228THxcG 1983Sc13 +228TH cG RI(N) Intensity of the doublet divided by evaluator by comparison +228TH2cG with branching ratios and the intensities of the doublet as measured +228TH3cG in both {+228}Ac and {+228}Pa decays. +228TH cG M(J),MR(K)$From {+228}Pa |e decay +228TH cG M(L) |a(K)exp(1245|g+1247|g)=0.013 {I3} (1971He23); theory: +228TH2cG |a(K)(M1)=0.0162, |a(K)(E2)=0.00521. I(1245|g)=0.095 {I18}, +228TH3cG I(1247|g)=0.50 {I3}; the 1245|g is [M1,E2]. Therefore: if the 1245|g +228TH4cG is M1, then |a(K)exp(1247|g)=0.013 {I3}; if 1245|g is E2, then +228THxcG |a(K)exp(1247|g)=0.015 {I3}. In each case the |g M1(+E2). +228TH cG E(P) The adopted J|p require that this |g have an unreasonable +228TH2cG multipolarity (M2 or E3). The placement of this transition is +228TH3cG therefore questionable. +228TH cG RI(Q) Total intensity (I|g=0.013 {I3}) placed from 1344.1 level by +228TH2cG 1987Da28. Alternate placement from 1928.6 level suggested by {+228}Pa +228TH3cG decay. +228TH cG E(R) |g's of approximately same energy and intensity are reported +228TH2cG in both {+228}Ac and {+228}Pa decays. On the basis of coin with +228TH3cG 911.2|g, it is suggested in {+228}Ac decay that the |g feeds the 2+ +228TH4cG 968.97 level. In {+228}Pa decay, the |g is placed feeding the 3- +228TH5cG 968.37 level. The energy of the |g (E|g=674.65 {I5}) agrees with decay +228TH6cG to the 968.37 level. Possibly the |g is a doublet feeding both the +228TH7cG 968.97 and 968.37 levels. I|g(doublet)=0.101 {I8} +228TH cG E(T),RI(T)$|g not reported in this decay. Placement suggested by +228TH2cG {+228}Pa decay. I|g deduced from branching ratio in {+228}Pa decay. +228TH cG RI(U) The energy of the 853-keV transition from the 1944.9 level is +228TH2cG expected to be 853.877 {I12} from E(level); the expected intensity +228TH3cG is I|g=0.0031 {I4} from branching ratio in {+228}Pa decay. Therefore, +228TH4cG the the 853.17 {I10} |g with I|g=0.0119 {I18} reported by 1987Da28 +228TH5cG seems to be a doublet with part of the intensity belonging to a |g +228TH6cG unplaced in level scheme +228TH G 56.96 5 0.019 4 +228TH G 137.91 5 0.024 5 M1 7.90 +228TH cG M |a(K)exp=5.5 {I17}, K/L=5.6 {I27} (1971He23) +228TH G 466.40 10 0.029 3 +228TH G 634.18 10 0.0106 21 +228TH G 853.17 10 0.0088 18 U +228TH G 1337.33 20 0.0049 15 +228TH G 1378.23 10 0.0059 18 +228TH G 1385.39 10 0.0106 21 +228TH G 1434.22 15 0.0080 23 +228TH G 1438.01 10 0.0059 15 +228TH G 1480.37 15 0.016 3 +228TH G 1529.05 10 0.057 6 +228TH G 1671.64 15 0.0041 13 +228TH G 1684.01 20 0.015 5 +228TH G 1721.4 3 0.0057 21 +228TH G 1745.28 20 0.0065 8 +228TH G 1784.4 3 0.0059 10 +228TH G 1787.3 5 0.0013 5 +228TH G 1915.9 4 0.0008 3 +228TH G 1919.5 3 0.0021 5 +228TH G 1944.20 20 0.0021 5 +228TH G 2000.9 5 0.0010 3 +228TH L 0.0 0+ A NO HALF-LIFE GIVEN. +228TH L 57.759 4 2+ A NO HALF-LIFE GIVEN. +228TH B 8 6 8.9 4 +228THS B EAV=744.1 13 +228TH G 57.766 5 0.47 3 E2 156 A DCC of 22 from theory assumed +228TH3 G FLAG=H +228THS G LC=114$ MC=31.1$ NC+=11.4 +228TH cG M |a(L)exp=124 {I11} (1971He23); L12/L3=1.42 (1982Ma52), 1.14 +228TH2cG {I8} (1960Ar06), 1.15 {I15} (1957Bj56); theory: |a(K)=114, L12/L3=1.23 +228TH L 186.823 4 4+ A NO HALF-LIFE GIVEN. +228TH B 0.8 6 9.8 4 +228THS B EAV=691.5 13 +228TH G 129.065 1 2.42 9 E2 3.81 A DCC of 6 from theory assumed +228TH3 G FLAG=E +228THS G KC=0.269$ LC=2.58$ MC=0.707$ NC+=0.263 +228TH cG M L12/L3=1.94 {I14} (1960Ar06), 1.7 {I2} (1957Bj56). K/L=0.10 +228TH2cG {I1} (1971He23), 0.12 {I3} (1957Bj56); theory: L12/L3=1.70, K/L=0.10 +228TH L 328.003 4 1- B NO HALF-LIFE GIVEN. +228TH B 0.65 17 10.69 12 1U +228THS B EAV=606.6 12 +228TH G 270.245 2 3.46 6 E1 0.0474 A DCC of 7 from theory assumed +228TH3 G FLAG=E +228THS G KC=0.0379$ LC=0.00721$ MC=0.00173$ NC+=0.00061 +228TH cG M |a(K)exp=0.029 {I4} (1971He23); theory: |a(K)=0.0379 +228TH G 328.000 6 2.95 12 E1 0.0308 H DCC of 5 from theory assumed +228THS G KC=0.0247$ LC=0.00458$ MC=0.00110$ NC+=0.00039 +228TH cG M |a(K)exp=0.037 {I8} (1971He23); theory |a(K)=0.0247 +228TH L 378.179 10 6+ A NO HALF-LIFE GIVEN. +228TH G 191.353 10 0.123 8 E2 0.791 H DCC of 11 from theory assumed +228THS G KC=0.174$ LC=0.450$ MC=0.123$ NC+=0.0454 +228TH cG M |a(K)exp=0.24 {I7}, K/L=1.0 {I5}; theory: |a(K)(E2)=0.174, +228TH2cG K/L(E2)=0.39, |a(K)(M1)=2.49, K/L(M1)=5.25 +228TH L 396.078 5 3- B NO HALF-LIFE GIVEN. +228TH B 11.66 24 8.428 10 +228THS B EAV=606.9 12 +228TH G 209.253 6 3.89 7 E1 0.086 E DCC of 12 from theory assumed +228THS G KC=0.0678$ LC=0.0135$ MC=0.00323$ NC+=0.00114 +228TH cG M from K/L and L subshell ratios in {+228}Pa |e decay. +228TH2cG Other: K/L=2.4 {I4} (1971He23) +228TH G 338.320 3 11.27 19 E1 0.0288 A DCC of 4 from theory assumed +228TH3 G FLAG=D +228THS G KC=0.0231$ LC=0.00426$ MC=0.00102$ NC+=0.00036 +228TH cG M |a(K)exp=0.019 {I2} (1960Ar06); theory: |a(K)=0.0231 +228TH L 519.192 6 5- B NO HALF-LIFE GIVEN. +228TH B 0.08 LT 11.3 GT 1U +228THS B EAV=534.3 12 +228TH G 141.02 3 0.050 8 E1 0.220 J DCC of 3 from theory assumed +228THS G KC=0.171$ LC=0.0366$ MC=0.0088$ NC+=0.00313 +228TH cG M |a(K)exp=0.7 {I5} (1971He23); theory: |a(K)(E1)=0.171, +228TH2cG |a(K)(E2)=0.259, |a(K)(M1)=5.92, |a(K)(M2)=26.1. +228TH G 332.370 4 0.40 4 E1 0.0299 A DCC of 5 from theory assumed +228TH3 G FLAG=EJ +228THS G KC=0.0240$ LC=0.00444$ MC=0.00106$ NC+=0.00038 +228TH cG M ce(K) not seen by 1960Ar06. |a(K)exp=0.41 {I8} (1971He23) +228TH2cG does not agree with [E1] required by the level scheme. +228TH L 831.823 10 0+ C NO HALF-LIFE GIVEN. +228TH G 503.823 13 0.182 12 (E1) 0.0125 A DCC of 18 from theory assumed +228TH3 G FLAG=G +228THS G KC=0.0101$ LC=0.00178 +228TH cG M Ice not seen (1971He23), upper limit in Ice suggests E1 +228TH G 774.1 2 0.06 AP [E2] 0.0167 50% DRI ASSUMED. DCC of 24 from theory assumed +228THS G KC=0.0122$ LC=0.00339 +228TH L 874.473 18 2+ C NO HALF-LIFE GIVEN. +228TH B 0.23 10 9.62 19 +228THS B EAV=418.5 12 +228TH G 478.33 5 0.209 15 E1 0.0139 DCC of 20 from theory assumed +228THS G KC=0.0112$ LC=0.00199$ MC=0.00047$ NC+=0.00017 +228TH G 546.47 5 0.201 13 [E1] 0.0106 DCC of 15 from theory assumed +228THS G KC=0.0086$ LC=0.00151 +228TH G 688.10 5 0.067 5 [E2] 0.0212 & DCC of 3 from theory assumed PLACED TWICE. +228TH2 G FL=186.823$ FLAG=B FL= FOUND. +228THS G KC=0.0151$ LC=0.00464 +228TH G 816.71 10 0.030 3 [M1,E2] 0.038 23 +228THS G KC=0.030 19$ LC=0.006 3 +228TH G 874.44 7 0.047 10 [E2] 0.0131 A DCC of 19 from theory assumed +228THS G KC=0.0098$ LC=0.00249 +228TH L 938.58 7 0+ D NO HALF-LIFE GIVEN. +228TH G 610.64 10 0.023 5 [E1] +228TH G 880.76 10 0.0062 18 [E2] 0.0129 DCC of 18 from theory assumed +228THS G KC=0.0096$ LC=0.00244 +228TH L 944.196 13 1,2+ NO HALF-LIFE GIVEN. +228TH B 0.07 LT 10.0 GT +228THS B EAV=391.8 12 +228TH G 616.22 3 0.080 5 A +228TH G 944.196 14 0.095 8 A +228TH L 968.369 20 3- D NO HALF-LIFE GIVEN. +228TH B 0.21 4 9.54 9 +228THS B EAV=382.6 12 +228TH G 449.15 5 0.048 5 [E2] 0.0563 A DCC of 8 from theory assumed +228THS G KC=0.0335$ LC=0.0168$ MC=0.00439$ NC+=0.00162 +228TH G 572.14 8 0.150 16 [M1,E2] 0.09 7 A +228THS G KC=0.07 6$ LC=0.016 8 +228TH G 640.34 3 0.054 5 [E2] 0.0247 A DCC of 4 from theory assumed +228THS G KC=0.0172$ LC=0.00567 +228TH L 968.968 5 2+ E NO HALF-LIFE GIVEN. +228TH B 29.9 10 7.39 2 +228THS B EAV=382.3 12 +228TH G 782.142 5 0.485 19 [E2] 0.0163 A DCC of 23 from theory assumed +228TH3 G FLAG=E +228THS G KC=0.0119$ LC=0.00330 +228TH cG M |a(K)exp=0.024 {I3} (1960Ar06), 0.07 {I3} (1971He23) +228TH2cG inconsistent with with each other and with E2 assignment required by +228THxcG level scheme +228TH G 911.204 4 25.8 4 E2 0.0121 A DCC of 17 from theory assumed +228TH3 G FLAG=D +228THS G KC=0.0091$ LC=0.00225 +228TH cG M |a(K)exp=0.0104 {I10}, K/L=4.6 {I5} (1971He23), +228TH2cG |a(K)exp=0.0092 {I9} (1960Ar06); theory: |a(K)=0.0091, K/L=4.04. +228THxcG |d=+24 {I8} from {+228}Pa decay +228TH G 968.971 17 15.8 3 E2 0.0107 A DCC of 15 from theory assumed +228TH3 G FLAG=D +228THS G KC=0.00815$ LC=0.00194 +228TH cG M |a(L)exp=0.0016 {I3} (1971He23); theory: |a(K)=0.00815, +228TH2cG |a(L)=0.0194; |a(K)exp used in normalization of the ce spectra. +228TH L 979.499 14 2+ NO HALF-LIFE GIVEN. +228TH B 0.13 7 9.73 24 +228THS B EAV=378.3 12 +228TH G 583.41 5 0.111 10 [E1] 0.0094 DCC of 14 from theory assumed +228THS G KC=0.00761$ LC=0.00132 +228TH cG RI does not agree with the branching ratio in {+228}Pa decay +228TH G 651.51 3 0.090 8 [E1] 0.0076 A DCC of 11 from theory assumed +228THS G KC=0.00617$ LC=0.00106 +228TH G 792.8 0.08 AP [E2] 0.0159 +-1 KEV ASSIGNED. 50% DRI ASSUMED. + DCC of 23 from theory assumed +228THS G KC=0.0116$ LC=0.00319 +228TH G 921.98 10 0.0147 21 [M1,E2] 0.028 17 & PLACED TWICE. +228THS G KC=0.022 14$ LC=0.0044 22 +228TH cG M |a(K)exp=2.0 {I4} (1971He23) may indicate an E0 component +228TH cG Total intensity placed here by 1987Da28 +228TH G 979.48 10 0.026 3 [E2] 0.0105 DCC of 15 from theory assumed +228THS G KC=0.00799$ LC=0.00189 +228TH L 1016.406 21 2+,3-,4+ NO HALF-LIFE GIVEN. +228TH B 0.31 5 9.31 7 +228THS B EAV=364.3 12 +228TH G 620.38 5 0.080 5 +228TH G 688.10 5 0.067 5 & PLACED TWICE. +228TH2 G FL=328.003 FL= FOUND. +228TH cG |g not placed here by 1987Da28; this placement of the |g +228TH2cG suggested in {+228}Pa decay +228TH G 958.61 4 0.28 4 A +228TH3 G FLAG=H +228TH G 1016.44 15 0.019 3 & PLACED TWICE. +228TH L 1022.527 6 (3)+ E NO HALF-LIFE GIVEN. +228TH B 3.10 15 8.30 2 +228THS B EAV=362.0 12 +228TH G 835.710 6 1.61 6 E2 0.0143 A DCC of 20 from theory assumed +228TH3 G FLAG=EJ +228THS G KC=0.0106$ LC=0.00279 +228TH cG M |a(K)exp|<0.015 (1971He23); theory: |a(K)=0.0106 +228TH G 964.766 10 4.99 9 E2+M1 -7.2 10 0.0108 A DCC of 16 from theory assumed +228TH3 G FLAG=E +228THS G KC=0.00821$ LC=0.00196 +228TH cG M |a(K)exp=0.0084 {I9} (1971He23); theory: |a(K)=0.00821 +228TH L 1059.93 3 4- NO HALF-LIFE GIVEN. +228TH B 0.071 11 9.88 7 +228THS B EAV=347.9 12 +228TH G 540.76 10 0.026 3 [M1,E2] 0.11 8 +228THS G KC=0.08 6$ LC=0.018 9 +228TH G 663.82 10 0.028 6 (M1+E2) 0.06 4 J +228THS G KC=0.05 4$ LC=0.010 6 +228TH G 873.17 15 0.031 6 [E1] 0.00441 DCC of 7 from theory assumed +228THS G KC=0.00361$ LC=0.00060 +228TH L 1091.017 8 4+ E NO HALF-LIFE GIVEN. +228TH B 0.26 5 9.28 9 +228THS B EAV=336.3 12 +228TH G 904.20 4 0.77 3 E2 0.0123 A DCC of 18 from theory assumed +228TH3 G FLAG=FJ +228THS G KC=0.0092$ LC=0.00229 +228TH cG M |a(K)exp=0.027 {I10} (1971He23), ce(K) not seen (1960Ar06); +228TH2cG |a(K)exp does not agree with |a(K)exp measured in {+228}Pa |e decay. +228TH G 1033.248 9 0.201 13 E2 0.0095 A DCC of 14 from theory assumed +228TH3 G FLAG=J +228THS G KC=0.00727$ LC=0.00167 +228TH L 1122.951 6 2- F NO HALF-LIFE GIVEN. +228TH B 5.92 14 7.871 12 +228THS B EAV=324.4 12 +228TH G 100.41 3 0.093 13 (E1+M2) 0.23 AP 3.2 AP DCC of 5 from theory assumed +228THS G LC=2.4$ MC=0.64$ NC+=0.25 +228TH cG M,MR |a(L3)exp|?0.43 (1971He23); theory: |a(L3)(E1)=0.0213, +228TH2cG |a(L3)(M2)=8.66. |a(L3)exp could also fit M1+E2; however, level scheme +228TH3cG requires |D|p=yes +228TH G 153.977 10 0.722 21 E1 0.178 E DCC of 25 from theory assumed +228TH3 G FL=968.968 FL= FOUND. +228THS G KC=0.139$ LC=0.0292$ MC=0.00703$ NC+=0.00250 +228TH cG M |a(K)exp=0.095 {I16} (1971He23); theory: |a(K)=0.129 +228TH G 726.863 15 0.62 8 (E2) 0.0189 DCC of 3 from theory assumed +228THS G KC=0.0136$ LC=0.00400 +228TH cG M |a(K)exp|?0.012 (1971He23); theory: |a(K)=0.0136 +228TH G 794.947 5 4.25 7 E2+M1 -4.4 10 0.0182 15 A +228TH3 G FLAG=DK +228THS G KC=0.0136 13$ LC=0.00349 20 +228TH cG M |a(K)exp=0.0118 {I20}, K/L=1.6 {I7} (1971He23), +228TH2cG |a(K)exp=0.0139 {I19} (1960Ar06); theory: |a(K)(E2)=0.0116, +228THxcG |a(K)(M1)=0.0524 +228TH G 1065.18 4 0.132 10 A +228TH L 1153.467 10 2+ 0.29 NS 2 +228TH cL T from 1974De14 +228TH B 5.1 8 7.89 7 +228THS B EAV=313.1 11 +228TH G 173.964 13 0.035 5 M1+E2 1.2 +11-6 2.3 18 A +228THS G KC=1.5 10$ LC=0.66 4$ MC=0.171 22$ NC+=0.063 5 +228TH cG M,MR from |a(K)exp=1.5 {I8} (1971He23); also fits E1+M2 with +228TH2cG |d=0.35 {I12}, level scheme requires |D|p=no. Theory: |a(K)(E1)=0.104, +228TH3cG |a(K)(E2)=0.203, |a(K)(M1)=3.26, |a(K)(M2)=12.9 +228TH G 184.54 2 0.070 8 E0+M1 63 8 4.5 8 +228TH3 G FL=968.968 FL= FOUND. +228THS G KC=53 7$ LC=10.2 13$ MC=0.126$ NC+=0.0462 +228TH cG M K/L=4.0 {I5}, L1/L2=33 {I6}, L1/L3>>50 (1974De14), +228TH2cG |a(K)exp=53 {I7} (1971He23); measured |a(K)exp yields an E0 transition +228TH3cG with an admixture of: 5.4% M1 with K/L=5.2, L1/L2=30, L1/L3=3300, or +228TH4cG 1.4% E2 with K/L=5.0, L1/L2=16.5, L1/L3=58. Thus the ratios support +228TH5cG E0+M1 transition +228TH cG CC from |a(K)exp +228TH G 278.95 5 0.160 21 (M1,E2) 0.7 5 @ +228TH3 G FL=874.473$ FLAG=N FL= FOUND. +228THS G KC=0.48 39$ LC=0.130 35$ MC=0.033 7$ NC+=0.0119 24 +228TH cG M |a(K)exp(doublet)=0.18 {I4} (1960Ar06), +228TH2cG |a(L)exp(279|g+282|g)=0.37 {I7} (1971He23); theory: |a(K)(M1)=0.872, +228THxcG |a(K)(E2)=0.0854 +228TH G 321.646 8 0.226 11 [E2] 0.140 A DCC of 20 from theory assumed +228TH3 G FLAG=D +228THS G KC=0.0643$ LC=0.0550$ MC=0.0147$ NC+=0.00544 +228TH cG M |a(K)exp=0.49 {I8} (1971He23) indicating mainly M1 transition +228TH2cG (|a(K)(M1)=0.590) which is not in agreement with the level scheme. +228TH3cG 1960Ar06 did not see ce(K) suggesting that the |a(K)exp may be +228THxcG unreliable. +228TH G 1095.679 20 0.129 10 [M1,E2] 0.018 10 A +228TH G 1153.52 4 0.139 10 A + +EG=173.964 13 BRANCHING RATIO (IN PERCENT)=2.1 13 + PARTIAL TRANSITION T1/2=1.4E-8 8 SEC + TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY (1+CC)=3.3 18 + WARNING---MR .NE. 0. FOLLOW PAGE 2 NS MEMO 1B/1 (82) TO CORRECT CALCULATIONS + + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 3.4427E-14 18 4.1845E-12 22 + 2 4.293E-8 4 5.218E-6 5 + 3 0.08158 10 9.916 12 + 4 2.297E5 4 2.792E7 4 + 5 9.053E11 16 1.1004E14 19 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 8.E-7 7 0.010 (IV) 9.E-5 8 2.000 + 2 (IS) 1.0 8 1000.000 (IV) 1.2E2 10 1.000 <=== + 3 1.8E6 15 100.000 <=== 2.2E8 18 10.000 <=== + 4 6.E14 5 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + + +EG=184.540 20 BRANCHING RATIO (IN PERCENT)=83 20 + PARTIAL TRANSITION T1/2=3.5E-10 9 SEC + TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY (1+CC)=64 8 + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 2.8841E-14 22 3.506E-12 3 + 2 3.196E-8 4 3.885E-6 5 + 3 0.05397 9 6.561 11 + 4 1.350E5 3 1.641E7 4 + 5 4.730E11 12 5.749E13 15 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 1.3E-6 4 0.010 (IV) 0.00016 5 2.000 + 2 (IS) 1.4 4 1000.000 (IV) 1.7E2 5 1.000 <=== + 3 2.4E6 7 100.000 <=== 2.9E8 8 10.000 <=== + 4 7.3E14 20 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + + +EG=278.95 5 BRANCHING RATIO (IN PERCENT)=5.0 18 + PARTIAL TRANSITION T1/2=5.8E-9 21 SEC + TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY (1+CC)=1.7 5 + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 8.350E-15 11 1.0150E-12 13 + 2 4.050E-9 8 4.922E-7 10 + 3 0.002993 8 0.3638 10 + 4 3278 12 3.984E5 14 + 5 5.024E9 21 6.11E11 3 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 9.E-7 4 0.010 (IV) 0.00010 5 2.000 + 2 (IS) 0.41 20 1000.000 (IV) 50 24 1.000 <=== + 3 3.0E5 15 100.000 <=== 3.7E7 18 10.000 <=== + 4 4.1E13 19 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + + +EG=321.646 8 BRANCHING RATIO (IN PERCENT)=4.8 8 + PARTIAL TRANSITION T1/2=6.1E-9 11 SEC + TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY (1+CC)=1.1400 20 + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 5.4468E-15 10 6.6205E-13 12 + 2 1.9868E-9 6 2.4149E-7 7 + 3 0.0011045 5 0.13425 5 + 4 909.7 5 1.1057E5 6 + 5 1.0488E9 6 1.2748E11 8 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 7.8E-7 14 0.010 (IV) 9.5E-5 17 2.000 + 2 (IS) 0.29 5 1000.000 (IV) 35 6 1.000 <=== + 3 1.6E5 3 100.000 <=== 1.9E7 4 10.000 <=== + 4 1.6E13 3 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + + +EG=1095.679 20 BRANCHING RATIO (IN PERCENT)=2.4 4 + PARTIAL TRANSITION T1/2=1.20E-8 22 SEC + TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY (1+CC)=1.018 10 + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 1.37794E-16 18 1.67485E-14 22 + 2 4.3314E-12 9 5.2647E-10 11 + 3 2.0751E-7 6 2.5222E-5 7 + 4 0.014728 6 1.7902 7 + 5 1463.3 7 1.7787E5 8 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 1.13E-8 21 0.010 (IV) 1.4E-6 3 2.000 + 2 (IS) 0.00036 7 1000.000 (IV) 0.043 8 1.000 + 3 17 4 100.000 2.1E3 4 10.000 <=== + 4 1.5E8 3 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + + +EG=1153.52 4 BRANCHING RATIO (IN PERCENT)=2.6 5 + PARTIAL TRANSITION T1/2=1.13E-8 21 SEC + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 1.1809E-16 3 1.4353E-14 4 + 2 3.3490E-12 13 4.0707E-10 16 + 3 1.4476E-7 8 1.7595E-5 10 + 4 0.009270 7 1.1267 8 + 5 831.0 7 1.0100E5 8 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 1.05E-8 19 0.010 (IV) 1.27E-6 23 2.000 + 2 (IS) 0.00030 6 1000.000 (IV) 0.036 7 1.000 + 3 12.8 23 100.000 1.6E3 3 10.000 <=== + 4 1.00E8 18 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + +228TH L 1168.375 5 3- F NO HALF-LIFE GIVEN. +228TH B 3.08 7 8.084 11 +228THS B EAV=307.6 11 +228TH G 77.34 3 0.026 5 [E1] 0.235 DCC of 4 from theory assumed +228THS G LC=0.177$ MC=0.0431$ NC+=0.0150 +228TH G 145.849 10 0.158 8 E1 0.203 H DCC of 3 from theory assumed +228TH3 G FLAG=J +228THS G KC=0.158$ LC=0.0336$ MC=0.00809$ NC+=0.00287 +228TH cG M |a(K)exp=1.3 {I4} (1971He23); theory: |a(K)=0.158. ce not +228TH2cG seen by 1960Ar06 or in {+228}Pa decay. +228TH G 199.407 10 0.315 5 E1 0.096 H DCC of 14 from theory assumed +228TH3 G FLAG=J +228THS G KC=0.0758$ LC=0.0152$ MC=0.00365$ NC+=0.00129 +228TH cG M ce(K), ce(L) not seen (1971He23,1960Ar06), suggests E1 mult +228TH G 648.84 10 0.040 4 [E2] 0.0240 & DCC of 4 from theory assumed PLACED TWICE. +228TH2 G FL=519.192 FL= FOUND. +228THS G KC=0.0168$ LC=0.00546 +228TH G 772.291 5 1.49 3 E2+M1 -3.4 +8-27 0.021 3 A +228TH3 G FLAG=EK +228THS G KC=0.0157 24$ LC=0.0040 4 +228TH cG M |a(K)exp=0.016 {I7} (1971He23), 0.019 {I3} (1960Ar06); +228TH2cG theory: |a(K)=0.0157 {I24} +228TH G 840.377 7 0.91 4 E2 0.0142 A DCC of 20 from theory assumed +228TH3 G FLAG=EJ +228THS G KC=0.0105$ LC=0.00275 +228TH cG M |a(K)exp|<0.026 (1971He23); theory: |a(K)=0.0105 +228TH G 1110.610 10 0.285 23 E1 @ +228TH3 G FLAG=AJN +228TH L 1174.508 18 (5+) E NO HALF-LIFE GIVEN. +228TH B 0.005 LT 10.9 GT +228THS B EAV=305.4 11 +228TH G 987.71 20 0.077 13 [M1,E2] 0.024 14 +228THS G KC=0.019 11$ LC=0.0037 18 +228TH L 1175.39 5 2+ NO HALF-LIFE GIVEN. +228TH B 0.17 3 9.33 8 +228THS B EAV=305.0 11 +228TH G 231.42 10 0.025 4 [D,E2] 1.0 9 +228TH G 988.63 20 0.077 13 [E2] 0.0103 DCC of 15 from theory assumed +228TH G 1117.63 10 0.054 8 +228TH G 1175.31 10 0.024 3 +228TH L 1226.565 7 (4)- F NO HALF-LIFE GIVEN. +228TH B 0.66 4 8.66 3 +228THS B EAV=286.3 11 +228TH G 135.54 5 0.018 4 E1 0.242 J DCC of 4 from theory assumed +228THS G KC=0.188$ LC=0.0406$ MC=0.0098$ NC+=0.00348 +228TH cG M |a(K)exp|?3 (1971He23); theory: |a(K)=0.188 +228TH G 204.026 10 0.112 15 E1 0.091 H DCC of 13 from theory assumed +228THS G KC=0.0719$ LC=0.0143$ MC=0.00344$ NC+=0.00122 +228TH cG M |a(L)exp<0.23 (1971He23); theory: |a(L)(E1)=0.0143, +228THxcG |a(L)(E2)=0.342 +228TH G 707.41 5 0.155 15 (E2) 0.0200 H DCC of 3 from theory assumed +228TH3 G FLAG=J +228THS G KC=0.0143$ LC=0.00711 +228TH G 830.486 8 0.540 21 E2(+M1) -7.7 9 0.0152 2 A +228TH3 G FLAG=FJK +228THS G KC=0.0113 2 $ LC=0.00293 3 +228TH cG M |a(K)exp=0.020 {I11} (1971He23); theory: |a(K)=0.0113 {I2} +228TH G 1039.65 15 0.044 9 +228TH L 1297.423 10 (5)- F NO HALF-LIFE GIVEN. +228TH B 0.058 13 9.95 10 1U +228THS B EAV=257.9 10 +228TH G 778.23 0.022 6 [M1,E2] 0.04 3 S +-1 KEV ASSIGNED. +228TH3 G FLAG=T +228THS G KC=0.034 22$ LC=0.007 4 +228TH G 901.23 15 0.016 3 [E2] 0.0123 DCC of 18 from theory assumed +228THS G KC=0.00926$ LC=0.00231 +228TH G 1110.610 10 0.019 10 E1 @ +228TH3 G FLAG=JN +228TH L 1344.078 11 3- NO HALF-LIFE GIVEN. +228TH B 0.208 16 8.95 4 +228THS B EAV=243.9 11 +228TH G 168.65 10 0.010 3 [E1] 0.143 @ DCC of 20 from theory assumed +228TH2 G FLAG=Q +228THS G KC=0.112$ LC=0.0232$ MC=0.00557$ NC+=0.00197 +228TH G 824.934 23 0.050 5 [E2] 0.0147 A DCC of 21 from theory assumed +228THS G KC=0.0108$ LC=0.00288 +228TH G 947.982 11 0.106 8 [M1,E2] 0.026 15 A +228THS G KC=0.021 12$ LC=0.0041 20 +228TH G 1016.44 15 0.019 3 & PLACED TWICE. +228TH G 1157.14 15 0.0070 13 +228TH G 1286.27 20 0.050 10 +228TH L 1416.11 6 2+,3- NO HALF-LIFE GIVEN. +228TH B 0.060 8 9.35 6 +228THS B EAV=218.4 11 +228TH G 471.76 15 0.033 3 [D,E2] 0.14 12 +228TH G 1019.86 10 0.021 4 +228TH G 1088.18 15 0.0059 13 +228TH G 1229.40 15 0.0075 23 +228TH L 1431.979 6 4+ NO HALF-LIFE GIVEN. +228TH B 0.8 4 8.19 22 +228THS B EAV=212.9 11 +228TH G 257.52 10 0.030 3 (M1) 1.36 J DCC of 19 from theory assumed +228THS G KC=1.09$ LC=0.205$ MC=0.0495$ NC+=0.0180 +228TH G 263.58 10 0.040 4 E1 0.0502 J DCC of 7 from theory assumed +228THS G KC=0.0400$ LC=0.00766$ MC=0.00184$ NC+=0.00065 +228TH G 278.95 5 0.031 5 [E2] 0.216 @ DCC of 3 from theory assumed +228TH3 G FL=1153.467$ FLAG=N FL= FOUND. +228THS G KC=0.086$ LC=0.096$ MC=0.0257$ NC+=0.0095 +228TH cG |g not placed here by 1987Da28; this alternate placement is +228TH2cG suggested in {+228}Pa decay +228TH G 340.96 5 0.369 21 E2+M1 -5.2 18 0.136 23 E +228TH3 G FLAG=JK +228THS G KC=0.073 20$ LC=0.046 2$ MC=0.0122 5$ NC+=0.00450 17 +228TH cG M |a(K)exp=0.66 {I7} (1971He23) suggests an M1 transition. +228TH2cG However, ce(K) not seen by 1960Ar06. +228TH G 409.462 6 1.92 4 E2+M1 -5.4 8 0.082 4 A +228TH3 G FLAG=EK +228THS G KC=0.049 4$ LC=0.0242 5$ MC=0.00631 10$ NC+=0.00233 4 +228TH cG M |a(K)exp=0.058 {I9}, K/L=2.0 {I4} (1971He23), |a(K)exp=0049 +228TH2cG {I4} (1960Ar06). Theory: |a(K)=0.49 {I4}, K/L=2.02 +228TH G 452.47 10 0.015 5 [E2] 0.0553 DCC of 8 from theory assumed +228THS G KC=0.0330$ LC=0.0164$ MC=0.00429$ NC+=0.00158 +228TH G 463.004 6 4.40 7 E2 0.0522 A DCC of 8 from theory assumed +228TH3 G FLAG=E +228THS G KC=0.0316$ LC=0.0152$ MC=0.00397$ NC+=0.00146 +228TH cG M |a(K)exp=0.036 {I4}, K/L=3.0 {I7} (1971He23); |a(K)exp=0.028 +228TH2cG {I3} (1960Ar06); theory: |a(K)=0.0316, K/L=2.1 +228TH G 1103.41 10 0.0150 23 [E3] B ? UNCERTAIN PLACEMENT. +228TH2 G FL=328.003$ FLAG=P FL= FOUND. +228TH G 1245.05 20 0.095 18 [M1,E2] 0.013 7 L +228TH G 1374.19 10 0.014 4 +228TH L 1450.394 10 4- NO HALF-LIFE GIVEN. +228TH B 0.59 7 8.28 6 +228THS B EAV=206.5 11 +228TH G 18.4 0.014 4 [E1] 6.6 0.11 3 S +-1 KEV ASSIGNED. DCC of 10 from theory assumed +228TH cG TI,RI deduced from branching ratio in Pa decay +228TH G 223.85 10 0.054 5 M1+E2 -0.18 5 1.97 3 J +228TH3 G FLAG=K +228THS G KC=1.56 3$ LC=0.302 1$ MC=0.0729 2$ NC+=0.0266 1 +228TH cG M |a(K)exp=1.7 {I5}, K/L=4.2 {I19} (1971He23); theory: +228THxcG |a(K)=1.56 {I3}, K/L=5.2 +228TH G 282.00 3 0.072 19 M1+E2 -0.51 12 0.88 7 A +228TH3 G FLAG=HJK +228THS G KC=0.69 6$ LC=0.145 6$ MC=0.0355 11$ NC+=0.0129 4 +228TH G 327.44 0.12 4 [E2] 0.132 S +-1 KEV ASSIGNED. DCC of 19 from theory assumed +228TH3 G FLAG=T +228THS G KC=0.0621$ LC=0.0515$ MC=0.0137$ NC+=0.00508 +228TH cG |g may be masked by strong 328.000|g. +228TH cG E E|g from E(level) +228TH G 480.94 20 0.023 5 [M2] P +228TH3 G FL=968.968 FL= FOUND. +228TH cG Not reported in {+228}Pa decay +228TH G 930.93 10 0.0124 18 & PLACED TWICE. +228TH cG Placement of |g in level scheme uncertain. Alternate +228TH2cG placement suggested in {+228}Pa decay +228TH G 1054.11 20 0.018 5 +228TH L 1531.474 6 3+ NO HALF-LIFE GIVEN. +228TH B 8.0 4 6.96 2 +228THS B EAV=178.7 11 +228TH G 99.509 6 1.26 7 M1 4.09 A DCC of 6 from theory assumed +228TH2 G FLAG=H +228THS G LC=3.07$ MC=0.741$ NC+=0.273 +228TH cG M |a(L12)exp=3.0 {I3} (1971He23), 2.0 {I3} (1960Ar06); L3 not +228TH2cG seen (1960Ar06) theory: |a(L)=3.07 +228TH G 356.94 10 0.0170 18 [E2] 0.103 DCC of 15 from theory assumed +228THS G KC=0.0523$ LC=0.0374$ MC=0.0099$ NC+=0.00368 +228TH cG M |a(K)exp=1.9 {I9} (1971He23) does not agree with +228TH2cG multipolarity deduced from level scheme. Theory: |a(K)=0.0523 +228TH G 377.99 10 0.025 3 [M1,E2] 0.28 19 +228THS G KC=0.21 17$ LC=0.051 20$ MC=0.013 5$ NC+=0.0046 16 +228TH G 440.44 5 0.121 8 M1 0.314 DCC of 5 from theory assumed +228THS G KC=0.252$ LC=0.0471$ MC=0.0113$ NC+=0.00410 +228TH cG M |a(K)exp=0.26 {I9} (1971He23); theory: |a(K)=0.252. Limit of +228TH2cG E2 admixture |d<0.8 +228TH G 508.959 17 0.45 5 E2(+M1) 1.1 GT 0.08 4 A +228THS G KC=0.06 3$ LC=0.016 5 +228TH cG M,MR |a(K)exp=0.06 {I3} (1971He23); theory: |a(K)(E2)=0.0264, +228THxcG |a(K)(M1)=0.171 +228TH G 562.500 4 0.87 3 E2+M1 +1.6 6 0.07 3 A +228TH3 G FLAG=EK +228THS G KC=0.051 23$ LC=0.013 4 +228TH cG M |a(K)exp=0.048 {I10} (1971He23); E1+M2 mixture requires +228THxcG |d=0.39 +228TH G 1135.24 15 0.0098 15 +228TH G 1344.59 15 0.0090 18 +228TH L 1539.21 9 2,3,4 NO HALF-LIFE GIVEN. +228TH G 416.30 20 0.0132 21 [E1] 0.0185 DCC of 3 from theory assumed +228THS G KC=0.0149$ LC=0.00268$ MC=0.000640$ NC+=0.000228 +228TH G 1142.85 15 0.0103 21 +228TH L 1617.78 7 2+,3,4+ NO HALF-LIFE GIVEN. +228TH B 0.075 13 8.77 8 +228THS B EAV=149.8 10 +228TH G 648.84 10 0.040 4 & PLACED TWICE. +228TH3 G FL=968.968 FL= FOUND. +228TH cG |g not placed here by 1987Da28. This multiply placement +228TH2cG suggested in {+228}Pa decay +228TH G 1430.95 10 0.035 7 +228TH G 1559.85 20 0.020 4 +228TH L 1638.284 9 2+ G NO HALF-LIFE GIVEN. +228TH cL Quasiparticle configuration=((|p 3/2+[651])(|p 1/2+[660])) or +228TH2cL configuration=((|p 3/2+[651])(|p 1/2+[400])) suggested for this level +228TH B 1.15 5 7.52 2 +228THS B EAV=143.0 10 +228TH G 470.25 20 0.013 3 [E1] 0.0144 DCC of 21 from theory assumed +228THS G KC=0.0116$ LC=0.00206$ MC=0.00049$ NC+=0.00018 +228TH G 515.06 10 0.049 5 [E1] 0.0120 DCC of 17 from theory assumed +228THS G KC=0.0097$ LC=0.00170 +228TH G 1309.71 20 0.019 6 +228TH G 1451.40 15 0.0106 21 +228TH G 1580.53 3 0.60 4 (M1,E2) A +228TH3 G FLAG=I +228TH cG M |a(K)exp=0.012 {I7} (1971He23); theory: |a(K)(M1)=0.0087, +228THxcG |a(K)(E2)=0.00343 +228TH G 1638.281 10 0.47 3 (E2) A +228TH3 G FLAG=IJ +228TH L 1643.125 15 (2-,3-) NO HALF-LIFE GIVEN. +228TH B 0.80 6 7.67 4 +228THS B EAV=141.4 10 +228TH G 474.75 10 0.022 3 [M1,E2] 0.15 11 +228THS G KC=0.12 9$ LC=0.026 13$ MC=0.006 3$ NC+=0.0023 10 +228TH G 520.151 16 0.067 5 (M1) 0.201 A DCC of 3 from theory assumed +228THS G KC=0.161$ LC=0.0301 +228TH cG M |a(K)exp=0.31 {I12} (1971He23); theory: |a(K)=0.161 +228TH G 627.23 20 0.014 3 +228TH G 674.16 0.109 LE [E1] R +-1 KEV ASSIGNED. RI/2 ASSUMED. +228TH3 G FL=968.968 FL= FOUND. +228TH cG E deduced from E(level) +228TH G 674.75 0.109 LE [M1,E2] 0.06 4 R +-1 KEV ASSIGNED. RI/2 ASSUMED. +228TH3 G FL=968.369 FL= FOUND. +228THS G KC=0.048 32$ LC=0.010 5 +228TH cG E deduced from E(level) +228TH G 699.08 15 0.037 5 [D,E2] 0.05 4 +228TH G 1247.08 4 0.50 3 (M1) 0.0201 A DCC of 3 from theory assumed +228TH3 G FLAG=IL +228TH G 1315.34 10 0.015 3 [M1,E2] 0.012 6 +228TH L 1645.954 12 3+ NO HALF-LIFE GIVEN. +228TH B 4.16 20 6.94 2 +228THS B EAV=140.5 10 +228TH G 114.56 7 0.0098 21 [M1,E2] 10 4 +228THS G KC=5.5 52$ LC=3.2 12$ MC=0.9 4$ NC+=0.32 14 +228TH G 419.42 10 0.021 3 [E1] 0.0182 DCC of 3 from theory assumed +228THS G KC=0.0147$ LC=0.00264$ MC=0.00063$ NC+=0.000225 +228TH G 492.37 10 0.0235 23 [M1,E2] 0.14 10 +228THS G KC=0.11 8$ LC=0.024 12$ MC=0.006 3$ NC+=0.0021 10 +228TH G 523.131 16 0.103 8 [E1] 0.0116 A DCC of 17 from theory assumed +228TH3 G FL=1122.951$ FLAG=B FL= FOUND. +228THS G KC=0.00942$ LC=0.000165 +228TH cG M |a(K)exp|<0.08 (1971He23); theory: |a(K)(E1)=0.0094, +228TH2cG |a(K)(E2)=0.0251, |a(K)(E3)=0.0610, |a(K)(M1)=0.158 +228TH G 555.12 10 0.046 5 [M1,E2] 0.10 7 +228THS G KC=0.08 6$ LC=0.017 9 +228TH G 623.27 20 0.011 3 [M1,E2] 0.08 5 +228THS G KC=0.06 4$ LC=0.012 6 +228TH G 629.40 5 0.045 5 [D,E2] 0.06 6 +228TH G 666.45 10 0.057 6 [M1,E2] 0.06 4 @ +228TH3 G FLAG=N +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG I|g(doublet)=0.052 {I5}. All of intensity placed here by +228THxcG 1987Da28, +228TH G 677.11 10 0.062 5 [M1,E2] 0.06 4 +228TH3 G FL=968.968 FL= FOUND. +228THS G KC=0.05 3$ LC=0.010 5 +228TH G 1250.04 10 0.062 5 A +228TH G 1459.138 15 0.83 8 E2 A +228TH3 G FLAG=IJ +228TH G 1588.20 3 3.22 8 E2 A +228TH3 G FLAG=IJ +228TH cG M |a(K)exp=0.0050 {I16} (1971He23); theory: |a(K)=0.00340 +228TH L 1682.81 3 2+,3(+),4+ NO HALF-LIFE GIVEN. +228TH B 1.12 5 7.40 2 +228THS B EAV=128.5 10 +228TH G 660.1 3 0.005 AP [M1,E2] 0.06 4 50% DRI ASSUMED. +228THS G KC=0.05 3$ LC=0.010 5 +228TH G 1495.910 20 0.86 4 (E2) A +228TH3 G FLAG=IJ +228TH G 1625.06 5 0.255 18 A +228TH L 1683.82 5 (4-) NO HALF-LIFE GIVEN. +228TH B 0.165 17 8.23 5 +228THS B EAV=128.2 10 +228TH G 457.17 15 0.0150 23 [M1,E2] 0.17 12 +228THS G KC=0.13 10$ LC=0.029 14$ MC=0.007 3$ NC+=0.0026 11 +228TH G 1164.50 8 0.065 5 (M1+E2) 0.016 9 J +228TH G 1287.68 20 0.080 15 (M1+E2) 0.012 7 J +228TH cG |g listed in table I of 1987Da28 as deexciting the 1682.8 +228TH2cG level; however, on level scheme (fig. 4) shown as deexciting the +228TH3cG 1683.8 level. The energy fit is much better from the 1683.8 level. +228TH L 1688.394 11 2+,3+ G NO HALF-LIFE GIVEN. +228TH B 2.45 16 7.04 3 +228THS B EAV=126.7 10 +228TH G 42.46 5 0.009 3 [M1] 49 DCC of 7 from theory assumed +228TH cG From intensity balance at 1646 level, multipolarity cannot +228TH2cG be pure E2. Some E2 admixture, however, cannot be ruled out +228TH G 672.00 15 0.026 8 +228TH cG |g listed in table I of 1987Da28 as deexciting the 1683.8 +228TH2cG level; however, on level scheme (fig. 4) shown as deexciting the +228TH3cG 1688.4 level. +228TH G 813.77 15 0.0070 16 [M1,E2] 0.038 23 +228THS G KC=0.030 19$ LC=0.006 3 +228TH G 1501.57 5 0.46 3 G +228TH G 1630.627 10 1.51 4 (M1,E2) A +228TH2 G FLAG=I +228TH cG M from |a(K)exp(1625|g+1630|g)=0.0062 {I20} (1971He23); theory: +228TH2cG |a(K)(M1)=0.0090, |a(K)(E2)=0.0034 +228TH L 1724.283 6 2+ NO HALF-LIFE GIVEN. +228TH B 1.76 5 7.06 2 +228THS B EAV=115.3 10 +228TH G 497.49 15 0.0059 18 [M2] 0.608 P DCC of 9 from theory assumed +228THS G KC=0.457$ LC=0.113$ MC=0.0282$ NC+=0.0104 +228TH G 548.73 15 0.023 3 [M1,E2] 0.10 7 +228THS G KC=0.08 6$ LC=0.017 9 +228TH G 570.91 10 0.182 24 (M1) 0.156 G DCC of 22 from theory assumed +228THS G KC=0.125$ LC=0.0234 +228TH cG M |a(K)exp=0.20 {I8} (1971He23); theory: |a(K)=0.125 +228TH cG 1987Da28 assigns this |g to be the 1539.2 to 968.4 transition +228TH2cG on the basis of coin with 911.2|g. However, the E(level) difference is +228TH3cG 570.25 {I9}. In {+228}Pa decay this |g is assigned to the 1724.3 level; +228TH4cG energy, intensity, multipolarity, and coin results agree with this +228TH5cG assignment. +228TH G 701.747 14 0.173 10 (M1) 0.091 A DCC of 13 from theory assumed +228TH3 G FLAG=J +228THS G KC=0.0726$ LC=0.0135 +228TH G 755.315 4 1.00 3 M1 0.0747 A DCC of 11 from theory assumed +228TH3 G FLAG=DJ +228THS G KC=0.0599$ LC=0.0111 +228TH cG M |a(K)exp=0.055 {I9} (1971He23), 0.057 {I8} (1960Ar06); +228TH2cG theory: |a(K)(M1)=0.0599, |a(K)(E2)=0.0127 +228TH G 1537.89 10 0.047 5 B +228TH2 G FL=186.823 FL= FOUND. +228TH G 1666.523 13 0.178 13 M1 A +228TH3 G FLAG=J +228TH G 1724.21 4 0.029 3 A +228TH L 1735.450 25 (4+) NO HALF-LIFE GIVEN. +228TH B 0.133 9 8.14 4 +228THS B EAV=111.7 10 +228TH G 1217.03 10 0.021 3 B +228TH2 G FL=519.192 FL= FOUND. +228TH G 1357.78 15 0.020 4 B +228TH2 G FL=378.179 FL= FOUND. +228TH G 1548.65 4 0.038 4 A +228TH G 1677.67 3 0.054 5 A +228TH L 1743.89 3 4+ NO HALF-LIFE GIVEN. +228TH B 0.389 18 7.65 2 +228THS B EAV=109.1 10 +228TH G 399.62 10 0.029 3 [E1] 0.0212 DCC of 3 from theory assumed +228THS G KC=0.0162$ LC=0.00293$ MC=0.000701$ NC+=0.000250 +228TH G 590.4 0.017 3 [E2] 0.0295 S +-1 KEV ASSIGNED. DCC of 5 from theory assumed +228TH3 G FLAG=T +228THS G KC=0.0200$ LC=0.00716 +228TH G 684.0 0.019 5 [E1] S +-1 KEV ASSIGNED. +228TH3 G FLAG=T +228TH G 1347.50 15 0.015 3 +228TH cG |g not seen in {+228}Pa decay. I|g<0.004 from upper limit in +228TH2cG {+228}Pa decay +228TH G 1365.70 15 0.014 3 M +228TH G 1415.66 10 0.021 4 [E3] P +228TH3 G FL=328.003 FL= FOUND. +228TH G 1557.11 4 0.178 13 (E2+M1) +1.2 2 A +228TH3 G FLAG=JK +228TH G 1686.09 7 0.095 8 (E2) A +228TH3 G FLAG=J +228TH L 1758.24 12 2+,3,4+ NO HALF-LIFE GIVEN. +228TH B 0.062 13 8.39 10 +228THS B EAV=104.6 10 +228TH G 326.04 20 0.033 5 [D,E2] 0.4 3 +228TH G 1571.52 20 0.0057 16 +228TH G 1700.59 20 0.0101 23 +228TH L 1760.218 24 2+,3(+) G NO HALF-LIFE GIVEN. +228TH B 0.119 10 8.10 4 +228THS B EAV=104.0 10 +228TH G 737.72 5 0.037 4 [M1,E2] 0.05 3 +228TH cG M |a(K)exp=0.28 {I14} (1971He23); theory: |a(K)(M1)=0.0637, +228TH2cG |a(K)(E2)=0.0133, |a(K)(M2)=0.147. Unconfirmed |a(K)exp seems to +228THxcG indicate E0 admixture +228TH G 791.49 25 0.010 3 [M1,E2] 0.04 3 @ +228TH3 G FL=968.968$ FLAG=N FL= FOUND. +228THS G KC=0.032 21$ LC=0.007 4 +228TH cG |g placed here with I|g=0.023 {I7} by 1987Da28 +228TH G 1573.26 5 0.033 3 (E2) A +228TH3 G FLAG=J +228TH G 1702.43 5 0.048 5 A +228TH L 1795.90 10 3-,4+ NO HALF-LIFE GIVEN. +228TH B 0.01 LT 9.0 GT +228THS B EAV=92.9 10 +228TH G 1276.69 10 0.014 3 +228TH G 1738.22 25 0.018 4 +228TH L 1797.65 8 2+ NO HALF-LIFE GIVEN. +228TH B 0.045 6 8.37 6 +228THS B EAV=92.4 10 +228TH G 1401.49 10 0.012 3 +228TH G 1469.71 15 0.020 4 +228TH G 1740.4 3 0.011 3 +228TH G 1797.5 5 0.0021 8 +228TH L 1892.996 17 3+ NO HALF-LIFE GIVEN. +228TH B 0.112 7 7.51 4 +228THS B EAV=63.7 9 +228TH G 666.45 10 0.005 2 [E1] @ +228TH3 G FLAG=N +228TH cG This placement of the |g suggested by {+228}Pa decay. +228TH G 692.5 0.0056 7 (M1+E2+E0) 0.24 3 S +-1 KEV ASSIGNED. +228TH3 G FLAG=T +228TH G 770.04 0.0063 8 [E1] S +-1 KEV ASSIGNED. +228TH3 G FLAG=T +228TH G 870.46 4 0.044 4 M1 0.0515 A DCC of 8 from theory assumed +228TH3 G FLAG=J +228THS G KC=0.0414$ LC=0.00762 +228TH G 924.03 0.0075 10 [M1,E2] S +-1 KEV ASSIGNED. +228TH3 G FLAG=T +228TH G 1706.19 10 0.0085 10 M1+E2 +0.42 4 J +228TH3 G FLAG=K +228TH G 1835.43 10 0.038 4 E2+M1 +2.9 3 J +228TH3 G FLAG=K +228TH L 1899.95 4 2+ G NO HALF-LIFE GIVEN. +228TH cL Quasiparticle configuration=((|p 3/2[651])(|p 1/2[660])) or +228TH2cL configuration=((|p 3/2[651])(|p 1/2[400])) suggested for this level +228TH B 0.071 6 7.66 4 +228THS B EAV=61.7 9 +228TH G 877.46 10 0.014 3 [M1,E2] 0.032 19 +228THS G KC=0.025 15$ LC=0.005 3 +228TH G 930.93 10 0.0124 18 & PLACED TWICE. +228TH cG This placement of |g suggested in {+228}Pa decay +228TH G 1713.47 20 0.0054 10 +228TH cG |g not seen in {+228}Pa decay. I|g<0.002 from upper limit in +228TH2cG {+228}Pa decay +228TH G 1842.13 10 0.042 4 M1+E2 -0.86 14 J +228TH3 G FLAG=K +228TH G 1900.07 20 0.0028 5 +228TH L 1906.64 10 (2+) NO HALF-LIFE GIVEN. +228TH B 0.034 5 7.94 7 +228THS B EAV=59.7 9 +228TH G 490.33 15 0.0111 23 [D,E2] 0.12 11 +228TH G 1074.71 15 0.010 3 +228TH G 1907.18 20 0.0119 10 +228TH L 1928.57 6 3+ NO HALF-LIFE GIVEN. +228TH B 0.057 7 7.57 6 +228THS B EAV=53.4 9 +228TH G 168.65 10 0.0030 7 [M1,E2] 2.9 16 @ +228TH2 G FLAG=Q +228THS G KC=1.9 17$ LC=0.73 6$ MC=0.19 3$ NC+=0.070 10 +228TH G 389.12 15 0.0103 15 [M1,E2] 0.26 18 +228TH G 1742.0 3 0.0080 23 +228TH G 1870.83 10 0.0243 23 (M1+E2) J +228TH L 1937.16 9 2+,3,4+ NO HALF-LIFE GIVEN. +228TH B 0.046 5 7.61 6 +228THS B EAV=50.9 9 +228TH G 397.94 10 0.027 3 +228TH G 1062.55 15 0.010 3 +228TH G 1750.54 20 0.0080 8 +228TH G 1879.6 3 0.0013 5 +228TH L 1944.895 11 3+ G NO HALF-LIFE GIVEN. +228TH B 0.244 14 6.83 4 +228THS B EAV=48.7 9 +228TH G 718.48 15 0.019 4 (E1) J +228TH G 776.56 10 0.019 6 +228TH G 791.49 25 0.013 3 (M1) 0.0661 @ DCC of 10 from theory assumed +228TH3 G FLAG=N +228THS G KC=0.0530$ LC=0.0098 +228TH cG This placement suggested by {+228}Pa decay +228TH G 853.17 10 0.0031 4 [M1,E2] 0.034 20 B +228TH2 G FL=1091.017$ FLAG=U FL= FOUND. +228THS G KC=0.027 17$ LC=0.005 3 +228TH cG RI from branching ratio in {+228}Pa decay +228TH G 921.98 10 0.0147 21 & PLACED TWICE. +228TH cG This placement suggested by {+228}Pa decay +228TH G 975.96 5 0.050 5 M1 0.0381 J DCC of 6 from theory assumed +228TH3 G FL=968.968 FL= FOUND. +228THS G KC=0.0306$ LC=0.00563 +228TH G 1000.69 15 0.005 +228TH cG |g not seen in {+228}Pa decay. I|g<0.002 from upper limit in +228TH2cG {+228}Pa decay. +228TH G 1758.11 10 0.035 4 E2+M1 -9 1 J +228TH3 G FLAG=K +228TH G 1887.10 5 0.090 8 E2+M1 -9.1 1 J +228TH3 G FLAG=K +228TH L 1958.72 22 2+ NO HALF-LIFE GIVEN. +228TH B 0.0033 7 8.59 10 +228THS B EAV=44.8 9 +228TH G 1772.2 3 0.0018 5 +228TH G 1958.4 3 0.0015 5 +228TH L 1987.46 10 4+ NO HALF-LIFE GIVEN. +228TH B 0.038 3 7.27 5 +228THS B EAV=36.8 9 +228TH G 1017.92 20 0.0057 13 +228TH3 G FL=968.968 FL= FOUND. +228TH G 1609.41 15 0.0077 15 +228TH G 1800.86 20 0.0044 8 +228TH G 1929.78 20 0.0199 21 +228TH L 2010.11 5 2+,3,(4+) NO HALF-LIFE GIVEN. +228TH cL 1987Da28 suggests that this is the 4+ level of K|p=2+ +228TH2cL rotational band built on the 1900.00 level. However, the relatively +228TH3cL strong 887.33|g to the 1123-keV level would then have M2 mult. +228TH B 0.27 4 6.19 8 +228THS B EAV=30.5 9 +228TH G 214.85 10 0.029 4 [D,E2] 1.2 11 +228TH G 372.57 20 0.0067 15 [D,E2] 0.26 24 +228TH3 G FL=1638.284 FL= FOUND. +228TH G 887.33 10 0.027 3 +228TH G 918.97 10 0.027 3 +228TH cG M |a(K)exp=1.1 {I2} (1971He23) indicates E0 component; +228TH2cG however, then the relatively strong |g to 1123 {I2}- level must be M2 +228TH G 1040.92 15 0.044 9 +228TH G 1823.22 10 0.044 4 +228TH G 1952.33 15 0.059 5 +228TH L 2013.6 3 2+,3,4+ NO HALF-LIFE GIVEN. +228TH B 0.0029 9 8.11 14 +228THS B EAV=29.6 9 +228TH G 1826.7 3 0.0021 8 +228TH G 1955.9 5 0.0008 3 +228TH L 2022.84 10 NO HALF-LIFE GIVEN. +228TH B 0.054 6 6.73 7 +228THS B EAV=27.1 9 +228TH G 384.63 20 0.0067 15 [D,E2] 0.24 22 +228TH cG Not reported in {+228}Pa decay +228TH G 1053.09 20 0.013 4 B +228TH3 G FL=968.968 FL= FOUND. +228TH G 1148.12 15 0.0059 13 +228TH G 1190.81 20 0.0062 16 +228TH G 1965.24 20 0.0204 18 +228TH cG RI from {+228}Pa decay I|g|<0.0085 {I23} +228TH L 2029.84 16 1,2+ NO HALF-LIFE GIVEN. +228TH B 0.019 4 7.09 10 +228THS B EAV=25.2 8 +228TH G 939.87 15 0.009 3 B +228TH3 G FL=1091.017$ FL= FOUND. +228TH G 1013.58 20 0.0046 13 +228TH G 1971.9 3 0.0036 8 +228TH G 2029.4 5 0.0018 5 +228TH L 2036.99 17 2+,3,4+ NO HALF-LIFE GIVEN. +228TH B 0.0062 10 7.48 9 +228THS B EAV=23.3 8 +228TH G 1850.13 20 0.0044 8 +228TH G 1979.3 3 0.0018 5 +228TH L 2123.1 3 (2+) NO HALF-LIFE GIVEN. +228TH B 0.0042 10 3.5 20 +228THS B EAV=1.0 8 +228TH G 1795.1 5 0.0021 8 +228TH G 1936.3 3 0.0021 5 + +EG=1795.1 5 NO INTENSITY OR PARTIAL WIDTH + +EG=1936.3 3 NO INTENSITY OR PARTIAL WIDTH + +228TH 228PA EC DECAY 1995BA42 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228PA P 0.0 3+ 22 H 1 2148 5 +228TH N 0.095 5 0.095 5 0.9815 17 1.01885 +228TH PN 2 +228TH cN NR From |SI(|g+ce)(g.s.)=100. No direct |e+|b{++} decay to g.s. +228TH2cN (|DJ=3 transition) +228TH cL 1995Ba42: measured |g, ce, |g|g, |g(|q,H,T) +228TH cL 1993Ac02: measured |g, ce +228TH cL 1973Ku09: measured |g, ce, |g|g, |g(ce) +228TH cL 1971Am05, 1970SpZW, 1960Ar06: measured ce +228TH cL The decay scheme for {+228}Pa and the band assignments in +228TH2cL {+228}Th are those proposed by 1995Ba42. For a discussion of the +228TH3cL structure of the bands, and of the band parameters, see 1995Ba42 +228TH cL E Rounded off values from adopted levels +228TH cL J From adopted levels +228TH CL BAND(A) GS ROTATIONAL BAND +228TH CL BAND(B) KPI=0- BAND +228TH CL BAND(C) FIRST KPI=0+ BAND +228TH CL BAND(D) SECOND KPI=0+ BAND +228TH CL BAND(F) KPI=1- BANDHEAD +228TH CL BAND(G) FIRST KPI=2+ BAND +228TH CL BAND(H) KPI=2- BAND +228TH CL BAND(I) SECOND K=2+ BAND +228TH CL BAND(J) KPI=3- BANDHEAD +228TH cE J|p({+228}Pa)=3+ +228TH cE Q(|e)=2148 {I5} (1995Au04) +228TH cE IE,TI Deduced from intensity balance in level scheme +228TH cG E,RI From 1995Ba42, unless otherwise noted +228TH cG M Based on |g(|q,H,T) of 1995Ba42 and on |a's and Ice +228TH2cG ratios. |a's deduced from I(ce(K)) of 1973Ku09, 1971Am05 and/or +228TH3cG 1960Ar06 as noted and I|g of 1995Ba42. The I(ce(K)) are normalized to +228TH4cG I|g at 911.204|g (|a(K)(E2)=0.0091). +228TH cG MR From |g(|q,H,T) in 1995Ba42, unless otherwise noted +228TH cG CC Values correspond to E|g given in adopted gammas +228TH cG E(G) |g is seen as a part of a multiplet in 1995Ba42 +228TH cG E(J),RI(J)$From 1973Ku09; |g not seen by 1995Ba42 +228TH cG E(N) Energy calculated from E(level), existence of |g suggested +228TH2cG by {+228}Ac decay +228TH cG E(P) This line seems to be a doublet of lines with E|g|?1431 +228TH2cG and 1433 keV, which are both in coin with the 4+ to 2+ transition +228TH cG E(R) |g's of approximately same energy and intensity are reported +228TH2cG in both {+228}Ac and {+228}Pa decays. On the basis of coin with 911.2|g +228TH3cG it is suggested in {+228}Ac decay that this |g feeds the 2+ 968.97 +228TH4cG level. In {+228}Pa decay, the |g is placed feeding the 3- 968.37 +228TH5cG level. The energy of the |g (E|g=674.65 {I5}) agrees with decay to the +228TH6cG 968.37 level. Possibly the |g is a doublet feeding both the 968.97 and +228TH7cG 968.37 levels with I|g(doublet)=2.64 {I18} +228TH cG RI(I) Derived from coin spectrum +228TH cG RI(M) Intensity of doublet divided by evaluator by comparison +228TH2cG with branching ratios and the intensities of the doublet as +228TH3cG measured in both {+228}Ac and {+228}Pa decays +228TH cG RI(Q) The total intensity of this doublet does not agree with +228TH2cG the total intensity of this |g as seen in {+228}Ac decay, considering +228TH3cG the observed branching ratios from the 1646.0 level in both decays and +228TH4cG from the 1682.8 level in {+228}Pa decay. +228TH cG M(K) From |a data of 1995Ba42 (data not given) +228TH cG M(A),MR(E)$From adopted gammas +228TH G 141.9 1 0.21 3 +228TH G 206.30 5 0.50 7 +228TH G 216.1 1 1.1 3 +228TH cG |g dominant in {+224}Ra +228TH cG M possibly E1, no ce seen (1960Ar06) +228TH G 357.3 1 0.37 4 +228TH G 425.4 1 0.41 5 +228TH G 443.8 1 0.62 7 +228TH G 471.7 2 0.37 9 +228TH G 490.7 1 0.82 4 G +228TH G 555.7 1 1.5 2 +228TH G 621.6 3 1.0 2 G +228TH G 796 1 2.0 AP J +228TH cG |g seen coin only (1973Ku09) +228TH G 801.2 1 0.46 5 +228TH cG M |a(K)exp=0.14 {I4} (1973Ku09); theory: |a(K)(E2)=0.0141, +228THxcG |a(K)(M1)=0.0512 +228TH G 895.9 1 1.41 7 +228TH G 1017.2 2 0.82 12 G +228TH G 1018.9 2 1.3 2 +228TH G 1024.4 2 0.43 6 +228TH G 1058.5 1 0.66 7 +228TH G 1062.4 1 0.57 6 +228TH G 1074.7 3 0.42 5 G +228TH G 1077.5 3 0.36 5 G +228TH G 1103.4 1 0.44 4 +228TH G 1175.6 2 0.24 4 G +228TH G 1281.7 2 0.29 3 +228TH G 1286.3 3 0.39 9 G +228TH cG E this |g is placed from the 1682.8 level by 1995Ba42. +228TH2cG A 1286.27 {I20} |g seen in {+228}Ac decay is placed from the 1344.08 +228TH3cG level. However, the ratio I|g/I|g(1496.15|g)=0.14 {I3} here does not +228TH4cG agree with I|g/I|g(1495.91|g)=0.058 {I15} in {+228}Ac decay. The +228TH5cG calculated energy of the transition from the 1682.8 level is 1286.73 +228TH6cG {I3}. From 1344.08 level the ratio I|g/I|g(947.98|g)=0.47 {I10} in +228TH7cG {+228}Ac decay; in this decay, I(948|g)|?0.2 giving the estimated +228THxcG I|g|?0.1 for that placement. +228TH G 1310.8 1 0.48 5 +228TH G 1358.0 2 0.34 5 +228TH G 1432 1 1.3 LE @ +228TH2 G FLAG=P +228TH G 1480.4 3 0.77 10 G +228TH cG M |a(K)exp=0.009 {I3} (1973Ku09); theory: |a(K)(E2)=0.00385, +228THxcG |a(K)(M1)=0.0104 +228TH G 1483.2 3 0.52 7 G +228TH G 1486.3 3 0.27 7 G +228TH G 1542.8 2 0.28 5 +228TH G 1547.2 3 0.54 11 G +228TH G 1609.6 1 0.92 7 (M1) +228TH cG M |a(K)exp=0.014 {I3} (1973Ku09); theory: |a(K)(M1)=0.0092 +228TH G 1677.9 1 0.65 5 +228TH G 1746.2 2 0.34 4 +228TH G 1752.1 2 0.37 4 G +228TH G 1784.4 2 0.62 5 G +228TH G 1807.2 1 0.60 5 +228TH cG M |a(K)exp=0.006 {I3} (1973Ku09); theory: |a(K)(M1)=0.0068, +228THxcG |a(K)(E2)=0.0028 +228TH G 1865.1 1 0.80 4 +228TH G 1919.4 2 0.26 3 +228TH G 1936.0 2 0.20 3 +228TH G 1958.1 2 0.29 3 +228TH L 0.0 0+ A NO HALF-LIFE GIVEN. +228TH L 57.76 2+ A NO HALF-LIFE GIVEN. +228TH E 0.065 LE 9.9 LE 8.3 GE 10 LE +228THS E EAV=502.6 22 $CK=0.7750 $CL=0.1625 $CM+=0.05599 +228TH G 57.76 2 5.5 3 E2 156 DCC of 22 from theory assumed +228THS G LC= 114$ MC= 31.1$ N+= 11.5 +228TH cG M L1/L3=0.036 {I11}, L2/L3=1.187 {I5}, M1/M2=0.0328 {I27}, +228TH2cG M2/M3=1.137 {I19} (1970SpZW); theory: L1/L3=0.0390, L2/L3=1.19, +228TH3cG M1/M2=0.0382, M2/M3=1.14 +228TH L 186.82 4+ A NO HALF-LIFE GIVEN. +228TH E 0.009 5 2.1 12 8.94 25 2.1 12 +228THS E EAV=446.7 22 $CK=0.7758 $CL=0.1636 $CM+=0.05644 +228TH G 129.06 2 45.7 23 E2 3.81 DCC of 6 from theory assumed +228THS G KC= 0.269 $LC= 2.58$ MC= 0.707$ N+= 0.263 +228TH cG M L12/L3=1.62 {I12} (1960Ar06); theory: L12/L3=1.70 +228TH L 328.00 1- B NO HALF-LIFE GIVEN. +228TH E 0.7 LE 10.4 GE 0.7 LE 1U +228THS E CK=0.7572 $CL=0.1793 $CM+=0.06308 +228TH G 270.25 2 33.9 17 E1 0.0474 DCC of 7 from theory assumed +228THS G KC= 0.0379 $LC=0.00721$ MC=0.00173 $N+=0.00061 $ +228TH cG M |a(K)exp=0.032 (1960Ar06); theory: |a(K)=0.0379 +228TH G 328.03 4 30 3 E1 0.0308 G DCC of 5 from theory assumed +228THS G KC=0.0247$ LC=0.00458$ MC=0.00110 $N+=0.00039 $ +228TH cG M |a(K)exp=0.019 {I2} (1960Ar06); theory: |a(K)=0.0247 +228TH L 378.18 6+ A NO HALF-LIFE GIVEN. +228TH G 191.35 2 4.60 23 E2 0.791 A DCC of 11 from theory assumed +228THS G KC=0.174$ LC=0.450$ MC=0.123$ NC+=0.0454 +228TH cG M |a(L3)exp=0.16 (1960Ar06); theory: |a(L3)=0.141 +228TH L 396.08 3- B NO HALF-LIFE GIVEN. +228TH E 0.001 1 0.8 5 9.3 3 0.8 5 +228THS E EAV=354.3 23 $CK=0.7757 $CL=0.1655 $CM+=0.05720 +228TH G 68.08 0.04 LE [E2] 70.2 N +-1 KEV ASSIGNED. RI/2 ASSUMED. + DCC of 10 from theory assumed +228THS G LC=51.0$ MC=14.0$ NC+=5.16 +228TH cG RI limit of I|g deduced from the limit of Ice(L2) (1993Ac02) +228TH G 209.26 2 26.3 13 E1 0.086 DCC of 12 from theory assumed +228THS G KC=0.0678$ LC=0.0135$ MC=0.00323$ NC+=0.00114 +228TH cG M K/L12=4.4 (1960Ar06); theory: K/L12(E1)=5.9, K/L12(E2)=0.69, +228TH2cG K/L12(M1)=5.3. |a(K)exp=0.075 (1960Ar06); theory: |a(K)(E1)=0.0678, +228THxcG |a(K)(M1)=1.94 +228TH G 338.32 2 82 4 E1 0.0288 DCC of 4 from theory assumed +228THS G KC=0.0231$ LC=0.00426$ MC=0.00102$ NC+=0.00036 +228TH cG M |a(K)exp=0.019 (1960Ar06); theory: |a(K)=0.0231 +228TH L 519.19 5- B NO HALF-LIFE GIVEN. +228TH E 0.53 13 10.33 11 0.53 13 1U +228THS E CK=0.7523 $CL=0.1830 $CM+=0.06464 +228TH G 141.00 2 2.08 10 E1 0.220 K DCC of 3 from theory assumed +228THS G KC=0.171$ LC=0.0366$ MC=0.0088$ NC+=0.00313 +228TH G 332.37 2 21.0 11 E1 0.0299 K DCC of 5 from theory assumed +228THS G KC=0.0240$ LC=0.00444$ MC=0.00106$ NC+=0.00038 +228TH cG M ce(K) not seen (1960Ar06) +228TH L 695.6 7- ? NO HALF-LIFE GIVEN. +228TH cL Possibly fed by multiply placed 601.7|g from the 1297.4 (5)- +228TH2cL level. The 317.4|g from this level is not seen by 1995Ba42. +228TH L 831.82 0+ C NO HALF-LIFE GIVEN. +228TH E 0.03 LE 10.4 GE 0.03 LE +228THS E CK=0.7702 $CL=0.1705 $CM+=0.05928 +228TH G 503.7 2 0.78 8 (E1) 0.0125 A DCC of 18 from theory assumed +228THS G KC=0.0101$ LC=0.00178 +228TH G 774.06 0.26 AP [E2] 0.0167 N +-1 KEV ASSIGNED. 50% DRI ASSUMED. + DCC of 24 from theory assumed +228THS G KC=0.0122$ LC=0.00339 +228TH cG E,RI |g is part of a multiplet in 1995Ba42; I|g from branching +228TH2cG ratio in adopted |g's +228TH L 874.47 2+ C NO HALF-LIFE GIVEN. +228TH E 0.52 6 9.15 6 0.52 6 +228THS E CK=0.7693 $CL=0.1712 $CM+=0.05955 +228TH G 478.45 4 3.17 17 E1 0.0139 K DCC of 20 from theory assumed +228THS G KC=0.0112$ LC=0.00199$ MC=0.00047$ NC+=0.00017 +228TH G 546.45 2 2.80 14 [E1] 0.0107 DCC of 15 from theory assumed +228THS G KC=0.00864$ LC=0.00151 +228TH G 688.14 8 1.21 14 [E2] 0.0212 & DCC of 3 from theory assumed PLACED TWICE. +228TH3 G FL=186.82 FL= FOUND. +228THS G KC=0.0151$ LC=0.00464 +228TH G 816.50 12 0.33 4 [M1,E2] 0.038 23 +228THS G KC=0.030 19$ LC=0.006 3 +228TH G 874.5 2 0.77 12 [E2] 0.0131 G DCC of 19 from theory assumed +228THS G KC=0.0098$ LC=0.00249 +228TH L 944.20 1,2+ NO HALF-LIFE GIVEN. +228TH cL Possibly J|p=1+, K|p=1+ bandhead. (p,t) suggests possible +228TH2cL unnatural parity level; however, log| {Ift}=9.79 for decay from 3+ +228TH3cL {+228}Pa would rule out J|p=1+ +228TH E 0.108 19 9.78 8 0.108 19 +228THS E CK=0.7676 $CL=0.1724 $CM+=0.06005 +228TH G 616.15 5 1.07 8 +228TH G 944.31 6 0.98 8 +228TH L 968.37 3- F NO HALF-LIFE GIVEN. +228TH E 0.39 11 9.20 13 0.39 11 +228THS E CK=0.7670 $CL=0.1728 $CM+=0.06024 +228TH G 449.23 3 2.45 13 [E2] 0.0563 DCC of 8 from theory assumed +228THS G KC=0.0335$ LC=0.0168$ MC=0.00439$ NC+=0.00162 +228TH G 572.30 2 5.8 3 [M1,E2] 0.09 7 +228THS G KC=0.07 6$ LC=0.016 8 +228TH G 640.33 5 1.53 10 [E2] 0.0247 DCC of 4 from theory assumed +228THS G KC=0.0172$ LC=0.00567 +228TH cG M |a(K)exp=0.16 {I3} (1973Ku09), 0.18 (1960Ar06); theory: +228THxcG |a(K)(E2)=0.0172 +228TH L 968.97 2+ G NO HALF-LIFE GIVEN. +228TH E 9.2 19 7.83 10 9.2 19 +228THS E CK=0.7669 $CL=0.1728 $CM+=0.06024 +228TH G 782.08 3 4.70 23 [E2] 0.0163 DCC of 23 from theory assumed +228THS G KC=0.0119$ LC=0.00330 +228TH cG M |a(K)exp=0.029 (1960Ar06); theory: |a(K)(E2)=0.0119 +228TH G 911.20 2 247 12 E2+M1 +24 8 0.0121 DCC of 17 from theory assumed +228THS G KC=0.0091$ LC=0.00225 +228TH cG M |a(K)(E2)=0.0091 used for normalization of I(ce(K)) of +228TH2cG 1973Ku09, 1960Ar06 to the I|g of 1995Ba42 +228TH G 968.98 2 149 8 E2 0.0107 DCC of 15 from theory assumed +228THS G KC=0.00815$ LC=0.00194 +228TH cG M |a(K)exp=0.0074 {I30} (1973Ku09), 0.0082 (1960Ar06); +228TH2cG theory: |a(K)(E1)=0.0030, |a(K)(E2)=0.00815 +228TH L 979.50 2+ D NO HALF-LIFE GIVEN. +228TH E 0.37 5 9.22 7 0.37 5 +228THS E CK=0.7667 $CL=0.1730 $CM+=0.06033 +228TH G 583.4 1 3.6 3 [E1] 0.0094 I DCC of 14 from theory assumed +228THS G KC=0.00761$ LC=0.00132 +228TH cG RI does not agree with the branching ratio in {+228}Ac decay +228TH G 651.40 5 1.59 10 [E1] +228TH3 G FLAG=G +228THS G CC=0.00758$ KC=0.00617$ LC=0.00106 +228TH cG RI indicated as a doublet in 1995Ba42, however, no other +228TH2cG placement of |g given. +228TH G 792.68 1.4 AP [E2] 0.0159 G +-1 KEV ASSIGNED. 50% DRI ASSUMED. + DCC of 23 from theory assumed +228TH3 G FLAG=N +228THS G KC=0.0116$ LC=0.00319 +228TH cG RI deduced from branching ratio in adopted |g's +228TH G 921.74 0.30 LT [M1,E2] 0.028 17 G +-1 KEV ASSIGNED. RI/2 ASSUMED. +228TH3 G FLAG=N +228THS G KC=0.022 14$ LC=0.0044 22 +228TH cG |g seen in {+228}Ac decay; here |g is part of a multiplet +228TH cG RI deduced from branching ratio in adopted |g's +228TH G 979.4 4 0.5 AP [E2] 0.0105 G 50% DRI ASSUMED. DCC of 15 from theory assumed +228THS G KC=0.00799$ LC=0.00180 +228TH L 1016.41 2+,3-,4+ NO HALF-LIFE GIVEN. +228TH cL Possibly 2+ member of K|p=1+ band. +228TH E 0.34 8 9.22 11 0.34 8 +228THS E CK=0.7656 $CL=0.1738 $CM+=0.06064 +228TH G 620.27 5 1.41 10 G +228TH cG M |a(K)exp=0.16 {I3} (1973Ku09); theory: +228TH2cG |a(K)(E1)=0.00677, |a(K)(E2)=0.0183, |a(K)(M1)=0.100 +228TH G 688.14 8 1.21 14 & PLACED TWICE. +228TH3 G FL=328.00 FL= FOUND. +228TH G 958.69 11 5.0 6 G +228TH G 1016.41 0.34 6 G +-1 KEV ASSIGNED. +228TH3 G FLAG=N +228TH cG RI from branching ratio in adopted |g's; I|g|<0.7 (1995Ba42) +228TH L 1022.53 (3)+ G NO HALF-LIFE GIVEN. +228TH E 1.8 8 8.49 20 1.8 8 +228THS E CK=0.7654 $CL=0.1739 $CM+=0.06069 +228TH G 835.65 2 42.7 22 E2 0.0143 DCC of 20 from theory assumed +228THS G KC=0.0106$ LC=0.00279 +228TH cG M |a(K)exp=0.0119 {I17} (1973Ku09), 0.0105 {I15} (1960Ar06); +228TH2cG theory: |a(K)=0.0106 +228TH cG MR |<-9 from |g(|q,H,T) (1995Ba42) +228TH G 964.80 2 122 6 E2+M1 -7.2 10 0.0108 DCC of 16 from theory assumed +228THS G KC=0.00821$ LC=0.00196 +228TH cG M |a(K)exp=0.012 {I5} (1973Ku09), 0.011 (1960Ar06); theory: +228THxcG |a(K)=0.00821 +228TH L 1059.93 4- NO HALF-LIFE GIVEN. +228TH cL J 3-,4+,5- ruled out by |g(|q,H,T) (1995Ba42) +228TH E 0.15 4 9.54 12 0.15 4 +228THS E CK=0.7643 $CL=0.1747 $CM+=0.06103 +228TH G 540.66 5 0.89 6 [M1,E2] 0.11 8 +228THS G KC=0.08 6$ LC=0.018 9$ +228TH G 663.92 8 1.44 11 (M1+E2) 0.06 4 +228THS G KC=0.05 4$ LC=0.010 6 +228TH cG M |a(K)exp=0.10 {I3} (1973Ku09), 0.075 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0842, |a(K)(E2)=0.0161 +228TH G 873.0 2 1.66 17 [E1] 0.00441 G DCC of 7 from theory assumed +228THS G KC=0.00361$ LC=0.00060 +228TH L 1091.02 4+ G NO HALF-LIFE GIVEN. +228TH E 0.66 18 8.87 12 0.66 18 +228THS E CK=0.7632 $CL=0.1754 $CM+=0.06133 +228TH G 694.8 2 0.76 10 [E1] 0.00671 G DCC of 10 from theory assumed +228THS G KC=0.00547$ LC=0.00093 +228TH G 713.1 3 0.48 11 [E2] 0.0197 I DCC of 3 from theory assumed +228THS G KC=0.0141$ LC=0.00421 +228TH G 904.19 3 26.5 13 E2 0.0123 DCC of 18 from theory assumed +228THS G KC=0.0092$ LC=0.00229 +228TH cG M |a(K)exp=0.012 {I3} (1973Ku09), 0.0092 (1960Ar06) +228TH2cG theory: |a(K)(E2)=0.00921, |a(K)(M1)=0.0374 +228TH cG MR |>+3.7 from |g(|q,H,T) (1995Ba42) +228TH G 1033.27 7 7.6 4 E2 0.0095 DCC of 14 from theory assumed +228TH cG M E2 in 1995Ba42; possibly from |g(|q,H,T), although not +228TH2cG listed in table 3 +228TH L 1122.95 2- H NO HALF-LIFE GIVEN. +228TH E 0.7 4 8.82 25 0.7 4 +228THS E CK=0.7621 $CL=0.1762 $CM+=0.06167 +228TH G 100.42 0.5 LT (E1+M2) 0.23 AP 3.2 AP A +-1 KEV ASSIGNED. RI/2 ASSUMED. + DCC of 5 from theory assumed +228TH3 G FLAG=EN +228THS G LC=2.4$ MC=0.64$ NC+=0.25 +228TH cG RI deduced from I(ce(L1)) +228TH G 153.95 2 5.5 3 E1 0.178 K DCC of 25 from theory assumed +228THS G KC=0.139$ LC=0.0292$ MC=0.00703$ NC+=0.00250 +228TH cG M no ce(K) observed (1960Ar06) +228TH G 726.90 10 4.4 6 (E2) 0.0189 A DCC of 3 from theory assumed +228THS G KC=0.0136$ LC=0.00400 +228TH G 794.97 2 34.4 17 E2+M1 -4.4 10 0.0182 15 +228THS G KC=0.0136 13$ LC=0.00349 20 +228TH cG M |a(K)exp=0.014 {I3} (1973Ku09), 0.014 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0116, |a(K)(M1)=0.0524 +228TH G 1065.21 7 1.03 7 [E1] 0.00311 DCC of 5 from theory assumed +228THS G KC=0.00255$ LC=0.00042 +228TH L 1153.47 2+ I NO HALF-LIFE GIVEN. +228TH E 0.51 25 8.93 22 0.51 25 +228THS E CK=0.7610 $CL=0.1770 $CM+=0.06201 +228TH G 174.02 4 0.30 3 M1+E2 1.2 +11-6 2.23 18 A +228TH2 G FLAG=E +228THS G KC=1.5 10$ LC=0.66 4$ MC=0.171 22$ NC+=0.063 5 +228TH cG RI not in agreement with branching ratio in {+228}Ac decay +228TH G 184.61 5 0.21 3 E0+M1 63 8 @ +228TH3 G FL=968.97$ FLAG=M FL= FOUND. +228TH cG M |a(L12)exp=15 (1960Ar06); |a(L12)=10.2 for 5.4% M1 (10.5 for +228TH2cG 1.4%E2) transition deduced from {+228}Ac |b{+-} decay +228TH cG CC from {+228}Ac |b{+-} decay +228TH G 278.66 2 0.44 6 (M1+E2) 0.7 5 @ +228TH3 G FL=874.47$ FLAG=AM FL= FOUND. +228THS G KC=0.5 4$ LC=0.13 4$ MC=0.033 7$ NC+=0.0120 25 +228TH cG M 1995Ba42 gives M=(E2), data not given. For the doublet: +228TH2cG |a(K)exp=0.26 (1960Ar06); theory: |a(K)(M1)=0.872, |a(K)(E2)=0.0854 +228TH G 321.71 3 0.67 4 [E2] 0.140 DCC of 20 from theory assumed +228THS G KC=0.0643$ LC=0.0550$ MC=0.0147$ NC+=0.00544 +228TH G 966.64 0.5 LE [E2] 0.0108 I +-1 KEV ASSIGNED. RI/2 ASSUMED. + DCC of 16 from theory assumed +228TH3 G FLAG=N +228TH G 1095.74 14 0.32 6 [M1,E2] 0.018 10 +228TH G 1153.6 3 0.37 8 +228TH L 1168.38 3- H NO HALF-LIFE GIVEN. +228TH E 0.9 3 8.66 15 0.9 3 +228THS E CK=0.7604 $CL=0.1774 $CM+=0.06219 +228TH G 77.36 0.44 9 [E1] 0.235 N +-1 KEV ASSIGNED. DCC of 4 from theory assumed +228THS G LC=0.177$ MC=0.0431$ NC+=0.0150 +228TH cG RI deduced from branching ratio in adopted |g's. I|g|<0.6 +228TH2cG (1995Ba42) +228TH G 145.82 2 2.57 13 E1 0.203 K DCC of 3 from theory assumed +228THS G KC=0.158$ LC=0.0336$ MC=0.00809$ NC+=0.00287 +228TH cG M ce not seen (1960Ar06) +228TH G 199.40 2 4.65 23 E1 0.096 K DCC of 14 from theory assumed +228THS G KC=0.0758$ LC=0.0152$ MC=0.00365$ NC+=0.00129 +228TH cG M ce not seen (1960Ar06) +228TH G 649.12 7 0.97 9 [E2] 0.0240 & DCC of 4 from theory assumed PLACED TWICE. +228THS G KC=0.0168$ LC=0.00546 +228TH G 772.28 2 25.2 13 E2+M1 -3.4 +8-27 0.021 3 +228THS G KC=0.0157 24$ LC=0.0040 4 +228TH cG M |a(K)exp=0.0157 {I22} (1973Ku09), 0.015 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0122, |a(K)(M1)=0.0565 +228TH cG MR from |a(K)exp and -19|<|d|<-3 from |g(|q,H,T) +228TH2cG (1995Ba42) +228TH G 840.36 4 15.9 8 E2 0.0142 DCC of 20 from theory assumed +228THS G KC=0.0105$ LC=0.00275 +228TH cG M |a(K)exp=0.0092 {I24} (1973Ku09), 0.0113 (1960Ar06); theory: +228TH2cG |a(K)=0.0105 +228TH G 981.5 2 0.76 10 [E1] I +228THS G CC=0.00358$ KC=0.00294$ LC=0.00049 +228TH G 1110.55 5 4.7 5 E1 @ +228THS G CC=0.00289$ KC=0.00237$ LC=0.00039 +228TH cG RI I|g(doublet)=7.1 {I4} and I|g(|g from 1297.42 level)=2.4 +228TH2cG {I2} (from coin) +228TH cG M for the 1110.55 doublet: |a(K)exp=0.0013 {I3} (1973Ku09), +228TH2cG 0.0019 (1960Ar06); theory: |a(K)=0.00237 +228TH L 1174.51 (5+) G NO HALF-LIFE GIVEN. +228TH G 987.92 10 4.31 22 [M1,E2] 0.024 14 +228THS G KC=0.019 11$ LC=0.0037 18 +228TH L 1175.4 2+ ? NO HALF-LIFE GIVEN. +228TH cL Possibly fed by multiply placed 584.7|g from the 1760.2 +228TH2cL level, and the 750.10|g from the 1925.2 level. However, the 988.63|g +228TH3cL and the 1117.63|g from this level were not seen by 1995Ba42. +228TH L 1200.5 (3)+ I NO HALF-LIFE GIVEN. +228TH E 0.13 LE 9.5 GE 0.13 LE +228THS E CK=0.7590 $CL=0.1784 $CM+=0.06259 7 +228TH G 178.14 7 0.2 LE E0 1.2 RI/2 ASSUMED. +228TH cG E from ce(L1) (1995Ba42) +228TH cG M no |g seen. No ce(L3) seen, |a(L12)exp>6 (1960Ar06) +228TH cG TI I(ce(L12)) (1960Ar06) +228TH G 231.50 5 0.92 5 [M1,E2] 1.1 8 +228THS G KC=0.8 7$ LC=0.24 4$ MC=0.061 6$ NC+=0.0223 20 +228TH G 1013.54 13 0.38 5 [M1,E2] 0.022 13 & PLACED TWICE. +228THS G KC=0.018 11$ LC=0.0034 17 +228TH G 1142.78 0.10 3 [M1,E2] 0.017 9 +-1 KEV ASSIGNED. +228THS G KC=0.013 8$ LC=0.0025 12 +228TH cG E deduced from E(level) +228TH L 1226.57 (4)- H NO HALF-LIFE GIVEN. +228TH E 0.3 LE 9.1 GE 0.3 LE +228THS E CK=0.7578 $CL=0.1792 $CM+=0.06294 7 +228TH G 135.51 2 1.04 6 E1 0.242 K DCC of 4 from theory assumed +228THS G KC=0.188$ LC=0.0406$ MC=0.0098$ NC+=0.00348 +228TH G 204.05 2 6.0 3 E1 0.091 K DCC of 13 from theory assumed +228THS G KC=0.0719$ LC=0.0143$ MC=0.00344$ NC+=0.00122 +228TH cG M ce not seen (1960Ar06) +228TH G 707.40 3 7.9 4 (E2) 0.0200 DCC of 3 from theory assumed +228THS G KC=0.0143 $ LC=0.00431 +228TH cG M,MR |a(K)exp=0.020 {I6} (1973Ku09), thus |d|>2; theory: +228TH2cG |a(K)(E2)=0.0143, |a(K)(M1)=0.0711 +228TH G 830.48 3 29.0 15 E2(+M1) -7.7 9 0.0152 2 +228THS G KC=0.0113 2 $ LC=0.00293 3 +228TH cG M |a(K)exp=0.0140 {I18} (1973Ku09); theory: |a(K)(E2)=0.0107, +228THxcG |a(K)(M1)=0.0468 +228TH G 1039.87 6 2.92 15 +228TH L 1297.42 (5)- H NO HALF-LIFE GIVEN. +228TH E 0.16 LE 9.6 GE 0.16 LE 1U +228THS E CK=0.7009 8 $CL=0.2188 5 $CM+=0.08035 23 +228TH G 601.7 3 0.30 5 [E2] 0.0283 & ? DCC of 4 from theory assumed PLACED TWICE. + UNCERTAIN PLACEMENT. +228TH cG Feeds the 695.6 level; see comment with the that level +228TH cG M |a(K)exp|>0.24 {I5} (1973Ku09); theory: |a(K)(E1)=0.00716, +228TH2cG |a(K)(E2)=0.0192, |a(K)(M1)=0.108 +228TH G 778.1 2 2.7 3 [M1,E2] 0.04 3 G +228THS G KC=0.034 22$ LC=0.007 4 +228TH G 901.4 3 2.0 3 [E2] 0.0123 G DCC of 18 from theory assumed +228THS G KC=0.0093$ LC=0.00231 +228TH G 1110.55 5 2.4 2 E1 @ +228TH3 G FLAG=I +228TH cG M for the 1110.55 doublet: |a(K)exp=0.0013 {I3} (1973Ku09), +228TH2cG 0.0019 (1960Ar06); theory: |a(K)=0.00237 +228TH L 1344.08 3- J ? NO HALF-LIFE GIVEN. +228TH cL Possibly fed by the 399.94|g from the 1743.9 level, the +228TH2cL 415.91|g from the 1760.2 level, and the multiply placed 584.7|g from +228TH3cL the 1928.6 level; total feeding I(|g+ce)=0.97 {I13}. 1995Ba42 report an +228TH4cL indication of the strongest line deexciting this level, the 948|g +228TH5cL with I|g|?0.2; the other |g's deexciting this level were not seen +228TH6cL by 1995Ba42. Therefore, there is no intensity balance at this level. +228TH G 948 0.2 AP +-1 KEV ASSIGNED. 50% DRI ASSUMED. +228TH L 1416.1 2+,3- ? NO HALF-LIFE GIVEN. +228TH cL Possibly fed by the 477.1|g from the 1893.0 level and the +228TH2cL multiply placed 548.74|g from the 1965.0 level. However, although a +228TH3cL 471.7|g was seen (not placed in level scheme), the other |g's placed +228TH4cL from this level in {+228}Ac decay were not seen by 1995Ba42. +228TH L 1431.98 4+ NO HALF-LIFE GIVEN. +228TH cL J J|=3 from |g(|q,H,T) (1995Ba42) +228TH E 31.8 21 6.81 4 31.8 21 +228THS E CK=0.7450 $CL=0.1882 3 $CM+=0.06675 13 +228TH G 257.49 2 1.40 7 (M1) 1.36 K DCC of 19 from theory assumed +228THS G KC=1.09$ LC=0.205$ MC=0.0495$ NC+=0.0180 +228TH G 263.62 2 2.17 11 E1 0.0502 K DCC of 7 from theory assumed +228THS G KC=0.0400$ LC=0.00766$ MC=0.00184$ NC+=0.00065 +228TH G 278.66 2 1.61 21 [E2] 0.216 @ DCC of 3 from theory assumed +228TH3 G FL=1153.47$ FLAG=M FL= FOUND. +228THS G KC=0.086$ LC=0.095$ MC=0.0257$ NC+=0.0095 +228TH cG M for the doublet: |a(K)exp=0.26 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.872, |a(K)(E2)=0.0854 +228TH G 340.98 2 20.5 10 E2+M1 -5.2 18 0.136 23 +228THS G KC=0.073 20$ LC=0.046 2$ MC=0.0122 5$ NC+=0.00450 17 +228TH cG M from K:L12:L3=140:90:30, |a(K)exp=0.061 (1960Ar06); theory: +228TH2cG K:L12:L3=140:74:18, |a(K)=0.073 {I20} +228TH G 409.45 2 100 5 E2+M1 -5.4 8 0.082 4 +228THS G KC= 0.049 4$ LC=0.0242 5$ MC=0.00631 10$ N+=0.00233 4 +228TH cG M |a(K)exp=0.049, K:L12:L3=54 {I3}:21 {I1}:4.6 {I3} +228TH2cG (1960Ar06); theory: |a(K)=0.049 {I4}, K:L12:L3=54:22:4.3 +228TH G 452.52 6 1.02 8 [E2] 0.0553 DCC of 8 from theory assumed +228THS G KC=0.0330$ LC=0.0164$ MC=0.00429$ NC+=0.00158 +228TH G 463.02 2 224 11 E2 0.0522 DCC of 8 from theory assumed +228THS G KC= 0.0316 $LC=0.0152 $MC=0.00397 $N+=0.00146 $ +228TH cG M |a(K)exp=0.044 {I5} (1973Ku09), |a(K)exp=0.035, K/L12=2.64 +228TH2cG {I21}, K/L3=11.6 {I8} (1960Ar06); theory: |a(K)=0.0316, K/L12=2.44, +228TH3cG K/L3=13.7; K/L3(M1)=1220 +228TH G 1053.80 0.5 AP I +-1 KEV ASSIGNED. 50% DRI ASSUMED. +228TH cG E deduced from E(level) +228TH G 1245.17 6 5.6 3 [M1,E2] 0.013 7 G +228THS G KC=0.011 6$ LC=0.0020 10 +228TH G 1374.26 7 1.0 AP 50% DRI ASSUMED. +228TH L 1450.39 4- NO HALF-LIFE GIVEN. +228TH cL J J|=3 from |g(|q,H,T) (1995Ba42) +228TH E 8.7 8 7.35 5 8.7 8 +228THS E CK=0.7435 $CL=0.1893 4 $CM+=0.06722 14 +228TH G 18.41 3.7 5 [E1] 6.6 28 3 +-1 KEV ASSIGNED. DCC of 10 from theory assumed +228THS G L/T=0.59$ M/T=0.31 +228TH cG E deduced from E(level) +228TH cG TI deduced from coin experiment which gives branching=18% {I2} +228TH2cG for decay from 1450 level to 1432 level (1995Ba42). +228TH cG RI from I(|g+ce) and |a +228TH G 153.02 2 1.11 6 M1+E2 0.60 8 4.8 2 +228THS G KC=3.5 2$ LC=0.97 2$ MC=0.245 6$ NC+=0.090 2 +228TH cG M,MR from ce data (data not given) (1995Ba42) +228TH G 223.80 2 13.3 7 M1+E2 -0.18 5 1.97 3 +228THS G KC= 1.56 3$ LC= 0.302 1$ MC= 0.0729 2$ N+= 0.0266 1$ +228TH cG M |a(K)exp=1.32, K/L1=5.1 {I6}, ce(L3) not seen (1960Ar06); +228TH2cG theory: |a(K)=1.56, K/L1=5.93, K/L3=443 +228TH G 275.85 4 0.82 7 [E1] 0.0453 DCC of 7 from theory assumed +228THS G KC=0.0362$ LC=0.00687$ MC=0.00165$ NC+=0.00058 +228TH G 282.01 2 18.6 9 M1+E2 -0.51 12 0.88 7 +228THS G KC=0.69 6$ LC= 0.145 6$ MC=0.0355 11$ N+=0.0129 4 +228TH cG M |a(K)exp=0.62, K/L12=4.1 {I5}, K/L3=58 {I6} (1960Ar06); +228TH2cG theory: |a(K)=0.69 {I6}, K/L12=4.9 {I6}, K/L3=133 {I43} +228TH G 327.45 4 31 3 [E2] 0.132 G DCC of 19 from theory assumed +228THS G KC=0.0621$ LC=0.0515$ MC=0.0137$ NC+=0.00508 +228TH cG M |a(K)exp=0.055 (1960Ar06) based on the division of I|g and E1 +228TH2cG mult. in alternate placement. Theory: |a(K)(E2)=0.0619, |a(K)(M1)=0.559 +228TH G 359.36 3 1.30 7 [E1] 0.0252 DCC of 4 from theory assumed +228THS G KC=0.0203$ LC=0.00372$ MC=0.00089$ NC+=0.00032 +228TH G 390.45 5 1.11 6 [M1,E2] 0.26 18 +228THS G KC=0.20 16$ LC=0.046 19$ MC=0.011 5$ NC+=0.0042 16 +228TH G 427.90 3 1.24 8 [E1] 0.0174 DCC of 25 from theory assumed +228THS G KC=0.0141$ LC=0.00252$ MC=0.00060$ NC+=0.00022 +228TH G 434.01 3 1.73 10 [D,E2] 0.14 13 +228TH G 482.03 5 1.84 13 [M1,E2] 0.15 10 +228THS G KC=0.11 9$ LC=0.025 12$ MC=0.006 3$ NC+=0.0022 10 +228TH G 1054.23 6 3.3 3 [M1,E2] 0.020 11 +228THS G KC=0.016 9$ LC=0.0031 15 +228TH L 1531.47 3+ NO HALF-LIFE GIVEN. +228TH E 0.89 16 8.21 8 0.89 16 +228THS E CK=0.7351 $CL=0.1952 5 $CM+=0.06971 18 +228TH G 99.47 6 1.8 3 M1 4.09 DCC of 6 from theory assumed +228THS G LC=3.07$ MC=0.741$ NC+=0.273 +228TH cG M |a(L12)exp=2.0, no ce(L3), L/M=2.0, L/N=6 (1960Ar06); theory: +228TH2cG |a(L12)=3.06, |a(L3)=0.0165 +228TH cG MR |<0.4 from ce data (data not given) (1995Ba42) +228TH G 356.96 0.024 5 [E2] 0.103 N +-1 KEV ASSIGNED. DCC of 15 from theory assumed +228TH cG Part of a multiplet, I|g not measured. +228TH cG RI from branching ratio in adopted |g's +228TH G 378.01 0.036 7 [M1,E2] 0.28 19 N +-1 KEV ASSIGNED. +228THS G KC=0.21 17$ LC=0.051 20$ MC=0.013 5$ NC+=0.0046 16 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.2 (1995Ba42) +228TH G 440.4 4 0.15 7 M1 0.314 A DCC of 5 from theory assumed +228THS G KC=0.252$ LC=0.0471$ MC=0.0113$ NC+=0.00410 +228TH G 509.13 8 1.2 2 E2(+M1) 1.1 GT 0.08 4 A +228TH3 G FLAG=EG +228THS G KC=0.06 3$ LC=0.016 5 +228TH G 562.50 4 1.44 9 E2+M1 +1.6 6 0.07 3 +228THS G KC=0.051 24$ LC=0.013 4 +228TH G 1135.39 0.014 4 N +-1 KEV ASSIGNED. +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH G 1344.65 0.013 4 N +-1 KEV ASSIGNED. +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH L 1539.2 2,3,4 NO HALF-LIFE GIVEN. +228TH cL Possibly fed by the 389.36|g from the 1928.6 level. +228TH2cL However, the |g's shown as deexciting this level in {+228}Ac decay +228TH3cL have either not been reported (416.30|g) or placed elsewhere in +228TH4cL level scheme (1142.85|g). 1995Ba42 suggests that the existence of +228TH5cL this level is doubtful. +228TH L 1580.9 (2-) NO HALF-LIFE GIVEN. +228TH E 0.166 21 8.86 6 0.166 21 +228THS E CK=0.7286 8 $CL=0.1998 6 $CM+=0.07167 23 +228TH G 354.2 2 0.29 5 [E2] 0.106 & DCC of 15 from theory assumed PLACED TWICE. +228THS G KC=0.0531$ LC=0.0385$ MC=0.0102$ NC+=0.00378 +228TH G 601.7 3 0.30 5 [E1] 0.0088 & DCC of 13 from theory assumed PLACED TWICE. +228THS G KC=0.00718$ LC=0.00124 +228TH G 1184.71 9 0.47 4 (M1+E2) 0.015 8 +228THS G KC=0.012 7$ LC=0.0023 11 +228TH cG M |a(K)exp=0.0105 {I20} (1973Ku09); theory: |a(K)(E2)=0.00571, +228TH2cG |a(K)(M1)=0.0185 +228TH G 1252.98 10 0.68 6 (M1+E2) 0.013 7 +228THS G KC=0.011 6$ LC=0.0020 10 +228TH cG M |a(K)exp=0.010 {I3} (1971Am05); theory: |a(K)(E2)=0.00517, +228THxcG |a(K)(M1)=0.0160 +228TH G 1523.4 2 0.60 6 & PLACED TWICE. +228THS G CC=0.00139$ KC=0.00139 +228TH L 1588.3 4- NO HALF-LIFE GIVEN. +228TH cL J |g(|q,H,T) excludes 3- (1995Ba42) +228TH E 5.8 5 7.30 5 5.8 5 +228THS E CK=0.7275 8 $CL=0.2005 6 $CM+=0.07200 23 +228TH G 56.86 3 1.06 5 E1 0.533 K DCC of 8 from theory assumed +228THS G LC=0.400$ MC=0.098$ NC+=0.0339 +228TH G 137.95 2 6.6 3 M1 7.89 DCC of 11 from theory assumed +228THS G KC=6.30$ LC=1.20$ MC=0.289$ NC+=0.106 +228TH cG M |a(L12)exp=1.23, ce(L3) not seen (1960Ar06); theory: M1: +228TH2cG |a(L12)=1.20, |a(L3)=0.00622; E2: |a(L12)=1.22, |a(L3)=0.690 +228TH cG MR -0.2|<|d|<1.4 (|g(|q,H,T)), |<0.3 (|a) +228TH2cG (1995Ba42) +228TH G 156.34 2 1.36 7 E1 0.172 K DCC of 24 from theory assumed +228THS G KC=0.134$ LC=0.0281$ MC=0.00676$ NC+=0.00240 +228TH G 420.03 8 0.68 5 [M1,E2] 0.21 15 +228THS G KC=0.16 13$ LC=0.037 17$ MC=0.009 4$ NC+=0.0034 14 +228TH L 1617.8 2+,3,4+ NO HALF-LIFE GIVEN. +228TH E 0.13 3 8.90 11 0.13 3 +228THS E CK=0.7227 9 $CL=0.2039 7 $CM+=0.0734 3 +228TH G 649.12 7 0.97 9 & PLACED TWICE. +228TH3 G FL=968.97$ FLAG=G FL= FOUND. +228TH G 1432 1 0.60 14 @ +228TH2 G FLAG=P +228TH cG RI from I|g/I|g(1560|g) in adopted |g's. I|g(doublet)|<1.8 +228TH cG M for the doublet |a(K)exp=0.0032 {I7} (1973Ku09); +228TH2cG |a(K)(E2)=0.00409, |a(K)(M1)=0.0113 +228TH G 1559.7 2 0.34 5 G +228TH L 1638.3 2+ NO HALF-LIFE GIVEN. +228TH E 0.08 LE 9.1 GE 0.08 LE +228THS E CK=0.7190 10 $CL=0.2065 7 $CM+=0.0745 3 +228TH G 469.9 5 0.14 8 [E1] 0.0144 DCC of 21 from theory assumed +228THS G KC=0.0116$ LC=0.00206$ MC=0.00049$ NC+=0.00018 +228TH G 515.20 11 0.62 9 [E1] 0.0120 ? DCC of 17 from theory assumed UNCERTAIN PLACEMENT. +228THS G KC=0.0097$ LC=0.00170 +228TH cG RI disagrees with the branching ratio in {+228}Ac decay +228TH G 1310.26 0.07 3 G +-1 KEV ASSIGNED. +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 1451.45 0.039 9 [E2] N +-1 KEV ASSIGNED. +228TH cG RI from branching ratio in adopted |g's; I|g|<0.05 (1995Ba42) +228TH G 1580.5 3 2.18 14 (M1,E2) G +228TH cG M |a(K)exp=0.0046 {I15} (1973Ku09); theory: |a(K)(M1)=0.0087, +228TH2cG |a(K)(E2)=0.00343 +228TH G 1638.30 7 1.98 10 (E2) +228TH cG M |a(K)exp=0.0026 {I8} (1973Ku09); theory: |a(K)(M1)=0.0087, +228THxcG |a(K)(E2)=0.0034 +228TH L 1643.1 (2-,3-) NO HALF-LIFE GIVEN. +228TH E 1.33 13 7.83 5 1.33 13 +228THS E CK=0.7181 10 $CL=0.2071 7 $CM+=0.0748 3 +228TH G 475.1 3 0.7 2 [M1,E2] 0.15 11 +228THS G KC=0.12 9$ LC=0.026 13$ MC=0.006 3$ NC+=0.0023 10 +228TH G 520.17 8 0.92 10 (M1) 0.201 A DCC of 3 from theory assumed +228THS G KC=0.161$ LC=0.0301 +228TH G 626.72 0.23 5 G +-1 KEV ASSIGNED. +228TH3 G FLAG=N +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 674.16 2.82 LE [E1] G +-1 KEV ASSIGNED. RI/2 ASSUMED. +228TH3 G FLAG=R +228TH cG E from E(level) +228TH G 674.75 2.82 LE [M1,E2] 0.06 4 G +-1 KEV ASSIGNED. RI/2 ASSUMED. +228TH3 G FLAG=R +228TH cG E from E(level) +228TH G 698.93 0.61 9 [D,E2] 0.05 4 G +-1 KEV ASSIGNED. +228TH3 G FLAG=N +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 1247.07 5 8.2 4 (M1) 0.0201 G DCC of 3 from theory assumed +228TH2 G FLAG=A +228THS G KC=0.0162 +228TH cG M for the 1245+1246 doublet: |a(K)exp=0.0088 {I11} (1973Ku09), +228TH2cG 0.021 (1960Ar06); theory: |a(K)(M1)=0.0162, |a(K)(E2)=0.00521 +228TH G 1315.2 2 0.20 5 [M1,E2] 0.012 6 +228THS G KC=0.009 5$ LC=0.0018 8 +228TH L 1646.0 3+ NO HALF-LIFE GIVEN. +228TH E 4.1 3 7.34 4 4.1 3 +228THS E CK=0.7175 10 $CL=0.2075 7 $CM+=0.0750 3 +228TH G 114.49 10 0.10 2 [M1,E2] 10 4 +228THS G KC=5.5 52$ LC=3.2 12$ MC=0.9 4$ NC+=0.32 14 +228TH G 419.39 0.24 3 [E1] 0.0182 N +-1 KEV ASSIGNED. DCC of 3 from theory assumed +228TH3 G FLAG=G +228THS G KC=0.0147$ LC=0.00264$ MC=0.00063$ NC+=0.000225 +228TH cG RI part of a multiplet, I|g from branching ratio in adopted |g's +228TH G 492.22 10 0.28 3 [M1,E2] 0.14 10 +228THS G KC=0.11 8$ LC=0.024 12$ MC=0.006 3$ NC+=0.0021 10 +228TH G 523.16 11 1.40 10 [E1] 0.0116 DCC of 17 from theory assumed +228TH2 G FL=1122.95 FL= FOUND. +228THS G KC=0.0094$ LC=0.00165 +228TH G 554.6 3 0.48 11 [M1,E2] 0.10 7 G +228THS G KC=0.08 6$ LC=0.017 9 +228TH G 623.7 2 0.36 6 [M1,E2] 0.08 5 & PLACED TWICE. +228TH2 G FLAG=GQ +228THS G KC=0.06 4$ LC=0.012 6 +228TH G 629.4 2 0.37 6 [D,E2] 0.06 6 +228TH G 666.47 4 0.66 7 [M1,E2] 0.06 4 @ +228TH2 G FLAG=M +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG M for the doublet (I|g=2.47 {I13}): |a(K)exp=0.053 {I16} +228TH2cG (1973Ku09), 0.025 (1960Ar06); theory: |a(K)(M1)=0.0831, +228THxcG |a(K)(E2)=0.0160 +228TH G 676.9 2 0.89 15 [M1,E2] 0.06 4 G +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG M |a(K)exp=0.17 {I5} (1973Ku09), 0.10 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0797, |a(K)(E2)=0.0155 +228TH G 1249.7 2 0.73 10 G +228TH G 1459.2 2 8.6 5 E2 G +228TH2 G FLAG=I +228TH cG M |a(K)exp=0.0045 {I9} (1971Am05), 0.0026 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00395, |a(K)(M1)=0.0108 +228TH G 1588.15 5 37.2 19 E2 +228TH cG M |a(K)exp=0.0025 {I4} (1971Am05), 0.0031 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0034, |a(K)(E1)=0.0013, |a(K)(M1)=0.0086 +228TH cG MR |<-6 from nuclear orientation (1995Ba42) +228TH L 1682.8 2+,3(+),4+ NO HALF-LIFE GIVEN. +228TH E 0.2 LE 8.6 GE 0.2 LE +228THS E CK=0.7094 13 $CL=0.2131 9 $CM+=0.0774 4 +228TH G 660.28 0.02 AP [M1,E2] 0.06 4 N +-1 KEV ASSIGNED. 50% DRI ASSUMED. +228THS G KC=0.05 3$ LC=0.010 5 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.2 (1995Ba42) +228TH G 1496.15 6 2.74 14 (E2) +228TH cG M |a(K)exp=0.0029 {I9} (1973Ku09); theory: |a(K)(E2)=0.00378, +228TH2cG |a(K)(M1)=0.0101 +228TH G 1625.0 2 0.70 14 +228TH L 1683.8 (4-) NO HALF-LIFE GIVEN. +228TH E 0.300 23 8.39 4 0.300 23 +228THS E CK=0.7092 13 $CL=0.2133 9 $CM+=0.0775 4 +228TH G 457.38 6 0.30 3 [M1,E2] 0.17 12 +228THS G KC=0.13 10$ LC=0.029 14$ MC=0.007 3$ NC+=0.0026 11 +228TH G 623.7 2 0.36 6 [M1,E2] 0.07 5 & PLACED TWICE. +228TH2 G FLAG=GQ +228THS G KC=0.06 4$ LC=0.012 7 +228TH G 1164.58 7 1.32 7 (M1+E2) 0.016 9 +228THS G KC=0.013 7$ LC=0.0024 12 +228TH cG M |a(K)exp=0.012 {I2} (1973Ku09), 0.014 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00588, |a(K)(M1)=0.0193 +228TH G 1287.79 8 1.56 11 (M1+E2) 0.012 7 G +228THS G KC=0.010 5$ LC=0.0019 9 +228TH cG M |a(K)exp=0.0104 {I15} (1973Ku09); theory: |a(K)(M1)=0.0149, +228TH2cG |a(K)(E2)=0.00492 +228TH L 1688.4 2+,3+ NO HALF-LIFE GIVEN. +228TH cL J J|p=3-,4+ excluded by |g(|q,H,T) (1995Ba42) +228TH E 0.25 8 8.46 14 0.25 8 +228THS E CK=0.7081 13 $CL=0.2141 9 $CM+=0.0778 4 +228TH G 42.44 0.016 6 [M1] 49 N +-1 KEV ASSIGNED. DCC of 7 from theory assumed +228THS G LC=37.1$ MC=8.95 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH G 671.99 0.045 14 N +-1 KEV ASSIGNED. +228TH cG RI from branching ratio in adopted |g's; I|g|<0.2 (1995Ba42) +228TH G 813.94 0.012 3 [M1,E2] 0.038 23 N +-1 KEV ASSIGNED. +228THS G KC=0.030 19$ LC=0.006 3 +228TH cG RI from branching ratio in adopted |g's; I|g|<0.1 (1995Ba42) +228TH G 1501.5 2 0.74 6 G +228TH G 1630.63 6 2.65 13 (M1,E2) A +228TH L 1724.3 2+ NO HALF-LIFE GIVEN. +228TH E 2.80 19 7.32 4 2.80 19 +228THS E CK=0.6982 16 $CL=0.2210 11 $CM+=0.0808 5 +228TH G 497.72 0.1 LE [M2] N ? +-1 KEV ASSIGNED. RI/2 ASSUMED. + UNCERTAIN PLACEMENT. +228TH G 548.74 11 0.41 5 [M1,E2] 0.10 7 & ? PLACED TWICE. UNCERTAIN PLACEMENT. +228THS G KC=0.08 6$ LC=0.017 9 +228TH cG |g feeds the 1175.4 level; see comment with that level +228TH G 570.88 4 3.33 17 (M1) 0.156 G DCC of 22 from theory assumed +228TH3 G FLAG=A +228THS G KC=0.125$ LC=0.0234 +228TH G 701.72 4 3.76 21 (M1) 0.091 DCC of 13 from theory assumed +228THS G KC=0.0726$ LC=0.0135 +228TH cG M |a(K)exp=0.081 {I14} (1973Ku09), 0.057 (1960Ar06); theory: +228TH2cG |a(K)=0.0726 +228TH G 755.32 2 19.6 10 M1 0.0747 DCC of 11 from theory assumed +228THS G KC=0.0599$ LC=0.0111 +228TH cG M |a(K)exp=0.063 {I6} (1973Ku09), 0.057 (1960Ar06); theory: +228THxcG |a(K)(M1)=0.0599 +228TH G 1537.8 2 0.73 10 [E2] +228TH cG M |a(K)exp=0.0080 {I25} (1973Ku09); theory: |a(K)(E2)=0.00360 +228TH G 1666.53 6 3.35 17 M1 +228TH cG M |a(K)exp=0.0081 {I21} (1971Am05); theory: |a(K)(M1)=0.0084 +228TH cG MR 0.00 {I5} from |g(|q,H,T) (1995Ba42) +228TH G 1724.0 2 0.50 5 +228TH L 1743.9 4+ NO HALF-LIFE GIVEN. +228TH E 0.88 6 7.77 4 0.88 6 +228THS E CK=0.6917 18 $CL=0.2255 13 $CM+=0.0828 6 +228TH G 399.94 7 0.35 4 [E1] 0.0212 ? DCC of 3 from theory assumed UNCERTAIN PLACEMENT. +228THS G KC=0.0162$ LC=0.00293$ MC=0.00070$ NC+=0.00025 +228TH cG Possibly feeds the 1344.08 level; see comment with that level +228TH G 590.65 11 0.41 5 [E2] 0.0295 DCC of 5 from theory assumed +228THS G KC=0.0200$ LC=0.00716 +228TH cG M |a(K)exp=0.088 {I17} (1973Ku09); theory: |a(K)(E2)=0.0200, +228THxcG |a(K)(M1)=0.115 +228TH G 684.0 3 0.46 10 [E1] +228THS G CC=0.00691$ KC=0.00563$ LC=0.00096 +228TH G 1347.84 0.1 LE N ? +-1 KEV ASSIGNED. RI/2 ASSUMED. + UNCERTAIN PLACEMENT. +228TH G 1365.72 12 0.40 4 +228TH G 1415.42 10 0.97 6 [E3] ? UNCERTAIN PLACEMENT. +228TH G 1557.06 6 4.42 22 (E2+M1) +1.2 2 +228TH cG M |a(K)exp=0.0056 {I11} (1973Ku09), 0.0061 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00352, |a(K)(M1)=0.00908 +228TH G 1686.15 7 2.39 12 (E2) +228TH cG M |a(K)exp=0.0031 {I11} (1973Ku09); theory: |a(K)(E2)=0.0032, +228THxcG |a(K)(M1)=0.0082 +228TH L 1760.2 2+,3(+) NO HALF-LIFE GIVEN. +228TH cL J |g(|q,H,T) excludes J|p=4+ (1995Ba42) +228TH E 0.12 4 8.59 15 0.12 4 +228THS E CK=0.6857 20 $CL=0.2297 14 $CM+=0.0846 6 +228TH G 415.91 8 0.49 5 [E1] 0.0185 ? DCC of 3 from theory assumed UNCERTAIN PLACEMENT. +228THS G KC=0.0150$ LC=0.00269$ MC=0.00064$ NC+=0.00023 +228TH cG Possibly feeds the 1344.08 level; see comment with that level +228TH G 584.7 3 0.22 7 [M1,E2] 0.10 7 & ? PLACED TWICE. UNCERTAIN PLACEMENT. +228TH3 G FLAG=G +228THS G KC=0.08 6$ LC=0.017 9 +228TH cG Possibly feeds the 1175.4 level; see comment with that level +228TH G 737.8 2 0.74 13 [M1,E2] 0.05 3 G +228THS G KC=0.04 3$ LC=0.008 4 +228TH G 791.43 9 0.24 9 [M1,E2] 0.04 3 @ +228TH3 G FLAG=M +228THS G KC=0.032 21$ LC=0.007 4 +228TH G 1573.3 3 0.70 7 (E2) +228TH cG M |a(K)exp=0.011 {I4} (1973Ku09); theory: |a(K)(M1)=0.00884, +228TH2cG |a(K)(E2)=0.00346 |a(K)(E1)=0.00132 +228TH G 1702.6 3 1.15 11 G +228TH L 1804.7 4+ NO HALF-LIFE GIVEN. +228TH E 1.44 18 7.38 6 1.44 18 +228THS E CK=0.665 3 $CL=0.2439 20 $CM+=0.0908 9 +228TH G 116.26 5 0.16 2 [M1,E2] 9 4 +228THS G KC=5 5$ LC=3.1 11$ MC=0.8 4$ NC+=0.30 13 +228TH G 121.18 7 0.19 3 [E1] 0.316 DCC of 5 from theory assumed +228TH2 G FL=1683.8 FL= FOUND. +228THS G KC=0.244$ LC=0.0542$ MC=0.0131$ NC+=0.00465 +228TH G 121.87 3 0.33 3 [M1,E2] 8 4 +228THS G KC=5 5$ LC=2.5 9$ MC=0.7 3$ NC+=0.25 10 +228TH G 158.74 3 1.25 7 M1+E2 0.55 15 4.4 4 +228THS G KC=3.3 4$ LC=0.85 2$ MC=0.213 9$ NC+=0.079 4 +228TH cG M,MR from ce data (data not given) (1995Ba42) +228TH G 354.2 2 0.29 5 [E1] 0.0260 & DCC of 4 from theory assumed PLACED TWICE. +228THS G KC=0.0209$ LC=0.00384$ MC=0.00092$ NC+=0.00033 +228TH G 372.60 3 1.57 8 [M1,E2] 0.29 20 +228THS G KC=0.22 18$ LC=0.053 21$ MC=0.013 5$ NC+=0.0048 7 +228TH G 651.5 2 0.34 5 [E2] 0.0238 I DCC of 4 from theory assumed +228THS G KC=0.0166$ LC=0.00540 +228TH G 1426.5 2 0.48 6 [E2] +228TH G 1618.0 1 0.90 6 (M1,E2) G +228TH cG M |a(K)exp=0.012 {I4} (1973Ku09); theory: |a(K)(M1)=0.0091, +228THxcG |a(K)(E2)=0.0035 +228TH L 1817.4 4- NO HALF-LIFE GIVEN. +228TH cL J |g(|q,H,T) excludes J|p=3-,5- +228TH E 0.52 4 7.77 5 0.52 4 +228THS E CK=0.658 3 $CL=0.2490 22 $CM+=0.0930 10 +228TH G 367.04 2 2.45 12 M1 0.512 DCC of 8 from theory assumed +228THS G KC=0.411$ LC=0.0773$ MC=0.0185$ NC+=0.00674 +228TH cG M,MR -0.2|<|d|<1.4 (|g(|q,H,T)), |<0.3 (|a) +228TH2cG (1995Ba42) +228TH G 1298.3 2 0.45 4 (M1+E2) 0.012 6 +228TH cG M |a(K)exp=0.011 {I4} (1973Ku09); theory: |a(K)(M1)=0.0146, +228TH2cG |a(K)(E2)=0.00486, |a(K)(E1)=0.00182, |a(K)(M2)=0.0146 +228TH cG MR +0.27|<|d|<+5 from |g(|q,H,T) (1995Ba42) +228TH G 1421.1 2 1.40 7 E2+M1 +2.0 5 +228TH cG M |a(K)exp=0.0055 {I14} (1973Ku09); theory: |a(K)(E2)=0.00414 +228TH L 1893.0 3+ NO HALF-LIFE GIVEN. +228TH E 3.77 23 6.60 5 3.77 23 +228THS E CK=0.591 7 $CL=0.295 5 $CM+=0.1138 21 +228TH G 477.1 3 0.7 2 G ? UNCERTAIN PLACEMENT. +228TH cG Possibly feeds the 1416.1 level; see comment with that level +228TH G 666.47 4 1.81 15 [E1] @ +228TH2 G FLAG=M +228TH cG M for the doublet (I|g=2.47 {I13}): |a(K)exp=0.053 {I16} +228TH2cG (1973Ku09), 0.025 (1960Ar06); theory: |a(K)(E1)=0.00591, +228THxcG |a(K)(E2)=0.0160 +228TH G 692.47 7 2.01 15(M1+E2+E0) 0.24 3 +228TH cG M |a(K)exp=0.17 {I3} (1973Ku09), 0.13 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0148, |a(K)(M1)=0.0751. |a(K)exp may indicate E0 presence. +228TH cG CC from |a(K)exp +228TH G 724.42 11 0.76 9 [E1] & PLACED TWICE. +228TH G 739.2 2 0.57 9 [M1,E2] 0.0790 I DCC of 11 from theory assumed +228TH cG M |a(K)exp=0.18 {I5} (1973Ku09); theory: |a(K)(M1)=0.0637. +228TH2cG ce(K) may include the ce(K)(737.8|g) +228TH G 770.2 2 2.28 15 [E1] G +228TH G 870.45 2 15.9 8 M1 0.0515 DCC of 8 from theory assumed +228THS G KC=0.0414$ LC=0.00762 +228TH cG M |a(K)exp=0.038 {I5} (1973Ku09), 0.046 (1960Ar06): theory: +228TH2cG |a(K)(M1)=0.0414 +228TH cG MR -0.1 {I1} from |g(|q,H,T) (1995Ba42) +228TH G 924.3 2 2.7 2 [M1,E2] 0.028 17 G +228THS G KC=0.022 14$ LC=0.0043 22 +228TH cG M |a(K)exp=0.09 {I3} (1971Am05), 0.083 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0354, |a(K)(E2)=0.00886 +228TH G 1706.16 7 2.84 14 M1+E2 +0.42 4 +228TH cG M |a(K)exp=0.0071 {I16} (1973Ku09), 0.0063 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0079, |a(K)(E2)=0.0031 +228TH G 1835.26 5 9.8 5 E2+M1 +2.9 3 +228TH cG M |a(K)exp=0.0036 {I6} (1971Am05), 0.0055 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.00275, |a(K)(M1)=0.0065 +228TH L 1900.0 2+ NO HALF-LIFE GIVEN. +228TH E 0.56 4 7.39 5 0.56 4 +228THS E CK=0.581 8 $CL=0.302 5 $CM+=0.1167 23 +228TH G 877.35 7 0.97 8 [M1,E2] 0.032 19 +228THS G KC=0.025 16$ LC=0.005 3 +228TH G 883.6 3 0.15 4 G +228TH G 920.8 3 0.38 10 [M1,E2] 0.028 17 G +228THS G KC=0.022 14$ LC=0.0044 22 +228TH cG |g not reported in {+228}Ac decay +228TH G 931.02 7 0.99 8 [M1,E2] 0.027 17 +228TH G 1503.7 2 0.72 6 [E1] G +228TH cG M |a(K)exp=0.0050 {I23} (1973Ku09); theory: |a(K)(E1)=0.00142, +228TH2cG |a(K)(E2)=0.00374 +228TH cG |g not reported in {+228}Ac decay +228TH G 1713.16 0.1 LE ? +-1 KEV ASSIGNED. RI/2 ASSUMED. + UNCERTAIN PLACEMENT. +228TH G 1842.15 8 2.29 12 M1+E2 -0.86 14 +228TH cG M |a(K)exp=0.0059 {I20} (1971Am05); theory: |a(K)(M1)=0.0064, +228THxcG |a(K)(E2)=0.0027 +228TH G 1900.3 3 0.34 5 +228TH L 1901.9 3-,4 NO HALF-LIFE GIVEN. +228TH E 0.177 19 7.88 6 0.177 19 +228THS E CK=0.579 8 $CL=0.304 6 $CM+=0.1176 24 +228TH G 1383.2 2 0.55 5 +228TH G 1505.9 2 0.55 5 G +228TH G 1523.4 2 0.60 6 & PLACED TWICE. +228TH G 1715.06 10 0.50 3 +228TH L 1925.2 3+,4+ NO HALF-LIFE GIVEN. +228TH cL J |g(|q,H,T) excludes J|p=2+,3- +228TH E 1.52 11 6.81 5 1.52 11 +228THS E CK=0.539 11 $CL=0.331 7 $CM+=0.130 4 +228TH G 724.42 11 0.76 9 [M1,E2] 0.05 4 & PLACED TWICE. +228THS G KC=0.04 3$ LC=0.008 5 +228TH G 750.10 10 0.67 8 [M1,E2] 0.05 3 ? UNCERTAIN PLACEMENT. +228TH cG Possibly feeds the 1175.4 level; see comment with that level +228TH G 865.15 13 0.50 7 +228TH G 956.8 2 2.5 5 G +228TH G 1529.02 6 2.61 13 [E1] +228TH cG M |a(K)exp=0.0034 {I11} (1973Ku09); theory: |a(K)(E1)=0.00138, +228TH2cG |a(K)(E2)=0.00364, |a(K)(M1)=0.0095; +228TH G 1738.48 5 9.6 5 M1+E2 +228TH cG M |a(K)exp=0.0061 {I8} (1971Am05), 0.0057 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0074, |a(K)(E2)=0.0030 +228TH L 1928.6 3+ NO HALF-LIFE GIVEN. +228TH cL J |g(|q,H,T) excludes J|p=2+,3-,4+ +228TH E 0.187 22 7.70 7 0.187 22 +228THS E CK=0.532 11 $CL=0.336 8 $CM+=0.132 4 +228TH G 168.42 9 0.09 2 [M1,E2] 2.9 16 +228THS G KC=1.9 17$ LC=0.73 6$ MC=0.19 3$ NC+=0.070 10 +228TH G 389.36 0.31 5 [M1,E2] 0.26 18 N ? +-1 KEV ASSIGNED. UNCERTAIN PLACEMENT. +228TH cG RI from branching ratio in adopted |g's; I|g|<0.4 (1995Ba42) +228TH cG Possibility feeds the 1539.2 level; see comment with that +228TH2cG level +228TH G 584.7 3 0.22 7 [E1] & ? PLACED TWICE. UNCERTAIN PLACEMENT. +228TH cG |g feeds the 1344 level; see comment with 1344 level +228TH3 G FLAG=G +228TH G 1741.6 2 0.42 8 G +228TH G 1870.80 9 0.73 4 (M1+E2) +228TH cG M |a(K)exp=0.0028 {I14} (1973Ku09); theory: |a(K)(E2)=0.0026, +228TH2cG |a(K)(M1)=0.0071 |a(K)(E1)=0.00100, |a(K)(M2)=0.0138 +228TH cG MR -0.32 {I9} or -1.7 {I3} from |g(|q,H,T) (1995Ba42) +228TH L 1944.9 3+ NO HALF-LIFE GIVEN. +228TH E 7.8 5 5.98 5 7.8 5 +228THS E CK=0.494 14 $CL=0.362 10 $CM+=0.144 5 +228TH G 184.61 5 0.41 5 (M1) 3.45 @ DCC of 5 from theory assumed +228TH3 G FLAG=M +228THS G KC=2.76$ LC=0.525$ MC=0.125$ NC+=0.0461 +228TH cG M from ce data (data not given) (1995Ba42) +228TH G 220.61 2 1.24 6 (M1) 2.10 DCC of 3 from theory assumed +228THS G KC=1.68$ LC=0.317$ MC=0.0763$ NC+=0.0278 +228TH cG M from ce data (data not given) (1995Ba42) +228TH G 299.10 10 0.43 5 M1 0.90 DCC of 13 from theory assumed +228THS G KC=0.719$ LC=0.135$ MC=0.0326$ NC+=0.0118 +228TH cG M from ce data (data not given) (1995Ba42) +228TH G 306.61 2 2.00 10 M1 0.84 DCC of 12 from theory assumed +228THS G KC=0.672$ LC=0.126$ MC=0.0304$ NC+=0.0111 +228TH cG M,MR from ce data, |d|<0.3 (data not given) (1995Ba42) +228TH G 512.79 11 1.33 13 [M1,E2] 0.12 9 G +228THS G KC=0.10 7$ LC=0.021 11 +228TH G 718.31 2 6.4 3 (E1) +228THS G CC=0.00631$ KC=0.00514$ LC=0.00087 +228TH cG M |a(K)exp=0.0074 {I36} (1973Ku09); theory: |a(K)(E1)=0.00514, +228TH2cG |a(K)(E2)=0.0140 +228TH G 776.52 3 7.9 4 [E1] +228THS G CC=0.00546$ KC=0.00446$ LC=0.00075 +228TH cG M |a(K)exp=0.009 {I3} (1973Ku09); theory: |a(K)(E1)=0.00446, +228THxcG |a(K)(E2)=0.0121 +228TH G 791.43 9 3.6 4 (M1) 0.0661 @ DCC of 10 from theory assumed +228TH2 G FLAG=M +228THS G KC=0.0530$ LC=0.0098 +228TH cG M |a(K)exp(doublet)=0.054 {I11} (1973Ku09), I|g(doublet)=3.8; +228TH2cG theory: |a(K)(M1)=0.0530 +228TH G 853.97 8 0.82 7 [M1,E2] 0.034 21 +228THS G KC=0.027 17$ LC=0.005 3 +228TH cG M |a(K)exp=0.055 {I25} (1973Ku09,1960Ar06); theory: +228THxcG |a(K)(M1)=0.0436 +228TH G 922.5 2 2.25 12 [M1,E2] 0.028 16 G +228THS G KC=0.022 13$ LC=0.0044 22 +228TH G 928.4 2 0.89 8 G +228TH G 976.00 5 13.4 7 M1 0.0381 DCC of 6 from theory assumed +228THS G KC=0.0306$ LC=0.00563 +228TH cG M |a(K)exp=0.025 {I6} (1973Ku09), 0.034 (1960Ar06); theory: +228TH2cG |a(K)(M1)=0.0306, |a(K)(E2)=0.00804 +228TH cG MR 0.00 {I5} from |g(|q,H,T) (1995Ba42) +228TH G 1000.70 0.5 LE N +-1 KEV ASSIGNED. RI/2 ASSUMED. +228TH G 1070.40 7 1.20 8 +228TH G 1549.3 2 1.2 2 G +228TH G 1758.11 5 9.0 5 E2+M1 -9 1 +228TH cG M |a(K)exp=0.0038 {I8} (1971Am05), 0.0015 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0029, |a(K)(M1)=0.0072 +228TH G 1887.13 5 24.0 12 E2+M1 -9.1 9 +228TH cG M |a(K)exp=0.0028 {I5} (1971Am05), 0.0023 (1960Ar06); theory: +228TH2cG |a(K)(E2)=0.0026, |a(K)(M1)=0.0059 +228TH L 1965.0 2+,3,4+ NO HALF-LIFE GIVEN. +228TH E 0.139 17 7.57 7 0.139 17 +228THS E CK=0.430 20 $CL=0.405 14 $CM+=0.165 7 +228TH G 548.74 11 0.41 5 [M1,E2] 0.10 7 & ? PLACED TWICE. UNCERTAIN PLACEMENT. +228THS G KC=0.08 6$ LC=0.017 9 +228TH cG Possibly feeds the 1416.1 level; see comment with that level +228TH G 1778.0 6 0.06 2 +228TH G 1907.13 11 0.99 5 +228TH G 1965.22 12 0.43 4 & PLACED TWICE. +228TH L 1974.2 3-,4+ NO HALF-LIFE GIVEN. +228TH E 0.281 21 7.19 6 0.281 21 +228THS E CK=0.392 23 $CL=0.431 16 $CM+=0.177 8 +228TH G 1455.0 2 1.16 7 G +228TH G 1578.2 2 1.33 13 G +228TH G 1787.2 2 0.37 4 G +228TH G 1916.6 3 0.15 3 G +228TH L 1982.0 2+,3,4+ NO HALF-LIFE GIVEN. +228TH E 0.145 14 7.41 7 0.145 14 +228THS E CK=0.36 3 $CL=0.456 18 $CM+=0.189 9 +228TH G 1013.54 13 0.38 5 & PLACED TWICE. +228TH G 1795.15 6 1.19 7 +228TH G 1924.2 2 0.18 2 +228TH L 2010.1 2+,3,4(+) NO HALF-LIFE GIVEN. +228TH E 0.30 4 6.81 9 0.30 4 +228THS E CK=0.17 4 $CL=0.58 3 $CM+=0.250 14 +228TH G 371.83 0.84 23 G +-1 KEV ASSIGNED. +228TH3 G FLAG=N +228TH cG RI from branching ratio in adopted |g's +228TH G 887.16 0.35 5 N +-1 KEV ASSIGNED. +228TH cG RI from branching ration in adopted |g's; I|g|<0.4 (1995Ba42) +228TH G 919.4 3 0.6 2 I +228TH G 1041.14 0.3 LE N +-1 KEV ASSIGNED. RI/2 ASSUMED. +228TH G 1823.19 10 0.47 3 +228TH G 1952.39 10 0.76 5 +228TH L 2016.8 (2-,3-,4-) NO HALF-LIFE GIVEN. +228TH E 0.46 4 6.54 8 0.46 4 +228THS E CK=0.12 4 $CL=0.61 3 $CM+=0.268 15 +228TH G 1620.67 10 4.9 3 (M1+E2) +228TH cG M |a(K)exp=0.0060 {I15} (1973Ku09); theory: |a(K)(M1)=0.0090, +228TH2cG |a(K)(E2)=0.0034 +228TH L 2022.8 NO HALF-LIFE GIVEN. +228TH E 0.059 22 7.37 18 0.059 22 +228THS E CK=0.07 4 $CL=0.641 25 $CM+=0.285 15 +228TH G 384.53 0.1 LE [M1,E2] 0.27 18 N ? +-1 KEV ASSIGNED. RI/2 ASSUMED. + UNCERTAIN PLACEMENT. +228TH G 1148.20 14 0.30 4 +228TH G 1190.98 0.1 LE N +-1 KEV ASSIGNED. RI/2 ASSUMED. +228TH G 1965.22 12 0.43 4 & PLACED TWICE. + +EG=384.5 10 NO INTENSITY OR PARTIAL WIDTH + +EG=1148.20 14 NO INTENSITY OR PARTIAL WIDTH + +EG=1191.0 10 NO INTENSITY OR PARTIAL WIDTH + +EG=1965.22 12 NO INTENSITY OR PARTIAL WIDTH + +228TH 232U A DECAY 1977KU15,1986LOZT 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +232U P 0 0+ 68.9 Y 4 5413.63 9 +228TH N 0.00259 0.00259 1 +228TH PN 2 +228TH cN NR From absolute I|g measurements of 1984Ge07, 1986LoZT +228TH cL E,J From adopted levels +228TH cA Q(|a)({+232}U)=5413.63 {I9} corrected value from G. Audi, +228THxcA Aug. 1996. +228TH cA E 1972Go33, 1971So15, 1966Ba49, 1963Le17. Calculated values +228TH2cA are from Q(|a) and E(level) in {+228}Th +228TH cA IA Calculated from I(|g+ce) balance in level scheme, unless +228TH2cA otherwise noted. The values differ +228TH3cA substantially from the direct I|a measurements of 1966Ba49. +228TH cA HF HF(5320.12|a)=1.00 yields r{-0}({+228}Th)=1.5289 {I3} +228TH cA E(B) From 1991Ry01. Recommended E|a=5262.36 {I9} in 1991Ry01 is a +228TH2cA misprint, see originally published E|a and adjustment. +228TH cA IA(F) From I(A{-0})/I|a(58)=0.463 {I5} (weighted average from +228TH2cA 1955As28, 1965Be15, 1966Ba49, 1971So15) and I(A{-0})+I(a(58)=99.70 {I2} +228TH cG E,RI$From 1977Ku15, except as noted. (I|g of 1977Ku15 are normalized +228TH2cG to 26.33 for the 129|g). Others: 1963Le17, 1965Be15, 1966Ah02, +228THxcG 1984Ge07. +228TH cG M From adopted gammas, unless otherwise noted +228TH cG RI(A) From 1986LoZT, 1984Ge07 +228TH cG M(D) 1977Ku15 quote A. Plochocki, thesis (1974) as establishing +228TH2cG the multipolarity E0+E2; however, no published information is +228TH3cG available on this. 1977Ku15 give I|g=I(|g+ce) in their level scheme, +228TH4cG suggesting that the E0 admixture may not be significant for intensity +228TH5cG calculations. +228TH L 0.0 0+ NO HALF-LIFE GIVEN. +228TH A 5320.12 14 68.15 23 1.00 B +228TH2 A FLAG=F +228TH L 57.762 5 2+ 0.406 NS 7 +228TH cL T weighted average of 0.409 ns {I10} (1970To08) and 0.402 ns +228TH2cL {I10} (1965Ne03); other: 0.40 ns {I3} (1960Be25) +228TH A 5263.36 9 31.55 230.992 12 B +228TH2 A FLAG=F +228TH G 57.78 5 77.2 7 E2 156 A DCC of 22 from theory assumed +228THS G LC= 114 $MC= 31.1 $NC+= 11.4 $ +228TH cG CC 158 {I7} (1968Du06) +228TH cG M L1:L2:L3=3.55 {I25}:115 {I4}:100 (1966Ha01); +228TH2cG M1:M2:M3=5.3 {I13}:107 {I8}:100, M3/L3=0.32 {I3} (1966Ra15); theory: +228TH2cG L1:L2:L3=3.90:119:100, M1:M2:M3=4.35:114:100, M3/L3=0.276 + +EG=57.78 5 BRANCHING RATIO (IN PERCENT)=100.0 + PARTIAL TRANSITION T1/2=4.06E-10 7 SEC + TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY (1+CC)=157.0 22 + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 9.40E-13 6 1.142E-10 7 + 2 1.062E-5 11 0.001291 13 + 3 183.0 24 2.22E4 3 + 4 4.67E9 8 5.68E11 10 + 5 1.67E17 4 2.03E19 4 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 1.47E-5 4 0.010 (IV) 0.00179 5 2.000 + 2 (IS) 167 4 1000.000 (IV) 2.03E4 5 1.000 <=== + 3 2.87E9 8 100.000 <=== 3.49E11 9 10.000 <=== + 4 8.90E18 25 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + +228TH L 186.828 5 4+ 0.164 NS 4 +228TH cL T weighted average of 0.169 ns {I7} (1970To08), 0.161 ns {I5} +228TH2cL (1965Ne03) +228TH A 5139.0 20 0.30 2 17.5 12 +228TH cA IA weighted average from 1955As28, 1965Be15, 1966Ba49, 1971So15. +228TH G 129.08 5 26.33 15 E2 3.81 A DCC of 6 from theory assumed +228THS G KC= 0.269 $LC= 2.57 $MC= 0.706 $NC+= 0.263 $ + +EG=129.08 5 BRANCHING RATIO (IN PERCENT)=100.0 + PARTIAL TRANSITION T1/2=1.64E-10 4 SEC + TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY (1+CC)=4.81 6 + WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), INCLUDES UNCERTAINTY IN EG + ORDER ELECTRIC MAGNETIC + 1 8.428E-14 23 1.024E-11 3 + 2 1.909E-7 9 2.320E-5 10 + 3 0.659 4 80.1 5 + 4 3.370E6 25 4.10E8 3 + 5 2.412E13 22 2.93E15 3 + + RECOMMENDED UPPER LIMITS COMPARISON + ORDER ELECTRIC MAGNETIC + CALCULATED RUL CALCULATED RUL + 1 (IV) 0.000107 3 0.010 (IV) 0.0130 4 2.000 + 2 (IS) 242 7 1000.000 (IV) 2.94E4 8 1.000 <=== + 3 8.35E8 23 100.000 <=== 1.02E11 3 10.000 <=== + 4 5.19E17 15 10.000 <=== + + <===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT + +228TH L 328.003 5 1- NO HALF-LIFE GIVEN. +228TH A 4997.94 CA 0.00616 8 111 2 +228TH cA IA other: 0.0029 {I2} (1966Ba49) +228TH G 270.2 2 1.220 19 E1 0.0474 A DCC of 7 from theory assumed +228THS G KC= 0.0379 $LC=0.00722 $MC=0.00173 $NC+=0.00061 $ +228TH G 327.9 2 1.093 23 E1 0.0308 A DCC of 5 from theory assumed +228THS G KC=0.02472 $LC=0.00458 $MC=0.00110 $NC+=0.00039 $ +228TH L 378.178 11 6+ NO HALF-LIFE GIVEN. +228TH A 4948.63 CA 5.1E-5 5 6.4E+3 6 +228TH cA IA$other: 0.00017 {I3} (1966Ba49) +228TH G 191.0 2 0.012 1 E2 0.791 DCC of 11 from theory assumed +228THS G KC= 0.1741 $LC= 0.453 $MC= 0.1237 $NC+= 0.0457 $ +228TH L 396.085 5 3- NO HALF-LIFE GIVEN. +228TH A 4931.04 CA 4.8E-5 4 5.2E+3 5 +228TH cA IA$other: 0.00021 {I3} (1966Ba49) +228TH G 209.5 5 0.0041 10 E1 0.0856 DCC of 12 from theory assumed +228THS G KC= 0.0676 $LC=0.01341 $MC=0.00323 $NC+=0.00114 $ +228TH G 338.1 2 0.0143 5 E1 0.0288 DCC of 4 from theory assumed +228THS G KC=0.02314 $LC=0.00427 $MC=0.00102 $NC+=0.00036 $ +228TH L 519.199 6 5- NO HALF-LIFE GIVEN. +228TH A 4810.04 CA 5.6E-5 3 680 40 +228TH G 141.0 5 0.0012 5 (E1) 0.220 DCC of 3 from theory assumed +228THS G KC= 0.1711 $LC= 0.0367 $MC=0.00883 $NC+=0.00313 $ +228TH G 332.3 3 0.019 1 (E1) 0.0299 DCC of 5 from theory assumed +228THS G KC=0.02402 $LC=0.00444 $MC=0.00106 $NC+=0.00038 $ +228TH L 831.832 11 0+ NO HALF-LIFE GIVEN. +228TH A 4502.80 CA 2.1E-5 2 10.6 11 +228TH cA IA$other: 0.000024 {I7} (1963Le17) +228TH G 503.6 3 0.0056 3 (E1) 0.0125 DCC of 18 from theory assumed +228THS G KC=0.01015 $LC=0.00179 $ +228TH G 773.4 5 0.0018 3 [E2] 0.0167 DCC of 24 from theory assumed +228THS G KC=0.01218 $LC=0.00340 $ +228TH G 831 0.0003 LT E0 8E-4 4 +-1 KEV ASSIGNED. RI/2 ASSUMED. +228TH cG M,TI from 1963Le17 +228TH L 874.48 3 2+ NO HALF-LIFE GIVEN. +228TH A 4460.94 CA 3.9E-6 9 27 8 +228TH cA IA$includes additional weak |g's at 688.1, 816.7 and 874.4 keV, +228TH2cA from adopted levels. I|a=3.2|*10{+-6} {I9} without inclusion of these +228TH3cA additional |g's +228TH G 478 1 0.00055 21 [E1] 0.0139 DCC of 20 from theory assumed +228THS G KC=0.01127 $LC=0.00199 $MC=0.00047 $NC+=0.00017 $ +228TH G 547 1 0.00039 24 [E1] 0.0106 DCC of 15 from theory assumed +228THS G KC=0.00863 $LC=0.00150 $ +228TH G 817 1 0.0003 AP [M1+E2] 0.038 23 D 50% DRI ASSUMED. + +EG=478.0 10 NO INTENSITY OR PARTIAL WIDTH + +EG=547.0 10 NO INTENSITY OR PARTIAL WIDTH + +EG=817.0 10 NO INTENSITY OR PARTIAL WIDTH + +228TH 226RA(A,2NG) 1993AC02,1986SC18 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH PN 6 +228TH c 1993Ac02: E|a=28 MeV; measured E|g, I|g in coin with +228TH2c ce(L2)(129.1|g) +228TH c 1986Sc18: E|a=33, 42, 55 MeV; measured ce, (ce)(ce), (ce)|g +228TH c The level scheme is that proposed by 1986Sc18 and 1993Ac02, +228TH2c confirming levels known from {+228}Ac |b{+-} decay, {+228}Pa |e decay +228TH3c and {+230}Th(|a,|a'2n), and adding the levels with J>14. The 1- and 3- +228TH3c levels of the K|p=0- band are not seen in this experiment. +228TH cL E From least squares fit to E|g, unless otherwise noted +228TH cL J From adopted levels, unless otherwise noted +228TH cL E(A) Rounded-off values from adopted levels +228TH cL J(B) From this data set, based on the level decay mode, band +228TH2cL structure (1993Ac02) +228TH CL BAND(D) GS ROTATIONAL BAND +228TH CL BAND(E) KPI=0- BAND +228TH cG E From 1993Ac02 +228TH cG RI Relative I|g from the level (1993Ac02) +228TH L 0.0 0+ D NO HALF-LIFE GIVEN. +228TH L 57.76 2+ A NO HALF-LIFE GIVEN. +228TH2 L FLAG=D +228TH L 186.83 4+ A NO HALF-LIFE GIVEN. +228TH2 L FLAG=D +228TH L 378.18 6+ A NO HALF-LIFE GIVEN. +228TH2 L FLAG=D +228TH G 191.4 3 NO RI OR TI. +228TH L 519.20 5- A NO HALF-LIFE GIVEN. +228TH2 L FLAG=E +228TH G 332.4 3 NO RI OR TI. +228TH L 622.5 3 8+ D NO HALF-LIFE GIVEN. +228TH G 244.4 3 NO RI OR TI. +228TH L 695.6 3 7- E NO HALF-LIFE GIVEN. +228TH G 317.4 3 NO RI OR TI. +228TH L 911.8 4 10+ D NO HALF-LIFE GIVEN. +228TH G 289.4 3 NO RI OR TI. +228TH L 920.8 3 9- E NO HALF-LIFE GIVEN. +228TH G 225.1 3 1.00 +228TH G 298.3 3 4.07 24 +228TH L 1189.8 4 11- E NO HALF-LIFE GIVEN. +228TH G 268.9 3 1.00 +228TH G 278.0 3 1.50 10 +228TH L 1239.4 4 12+ D NO HALF-LIFE GIVEN. +228TH G 327.5 3 NO RI OR TI. +228TH L 1497.1 5 13- E NO HALF-LIFE GIVEN. +228TH G 257.7 3 0.52 4 +228TH G 307.3 3 1.00 +228TH L 1599.5 5 14+ B NO HALF-LIFE GIVEN. +228TH2 L FLAG=D +228TH G 360.1 3 NO RI OR TI. +228TH L 1838.3 5 15- B NO HALF-LIFE GIVEN. +228TH2 L FLAG=E +228TH G 341.2 3 NO RI OR TI. +228TH L 1988.1 6 16+ B NO HALF-LIFE GIVEN. +228TH2 L FLAG=D +228TH G 388.6 3 NO RI OR TI. +228TH L 2209.7 6 17- B NO HALF-LIFE GIVEN. +228TH2 L FLAG=E +228TH G 371.4 3 NO RI OR TI. +228TH L 2407.9 7 18+ B NO HALF-LIFE GIVEN. +228TH2 L FLAG=D +228TH G 419.8 3 NO RI OR TI. +228THF G FL=1988.1 FL= FOUND. + +EG=419.8 3 NO INTENSITY OR PARTIAL WIDTH + +228TH 230TH(P,T) 1972MA15 97NDS 199704 NO GAMMAS EXPECTED. +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH c 1972Ma15: E=17 MeV +228TH c 1995Ba42: authors quote H. Baltzer, et al., to be published +228TH cL E From 1972Ma15, unless otherwise noted +228TH cL E(A),L(B)$From 1995Ba42 +228TH L 0 0 +228TH L 57 5 +228TH L 185 5 +228TH L 830 5 0 +228TH L 874 5 +228TH L 938 0 A +228TH3 L FLAG=B +228TH L 944 A +228TH cL Possibly unnatural parity level (1995Ba42) +228TH L 977 5 +228TH cL Natural parity level (1995Ba42) +228TH L 1016 A +228TH cL Natural parity level (1995Ba42) +228TH L 1160 5 A +228TH cL Possibly unnatural parity level (1995Ba42) + +228TH 230TH(A,A'2NG) 1984HA21 97NDS 199704 +228TH H TYP=FUL$AUT=AGDA ARTNA-COHEN$CIT=NDS 80, 723 (1997)$CUT=1-Nov-1996$ +228TH c E=56 MeV. Measured ce and ce|g +228TH cL J From 1984Ha21 based on coin and band structure +228TH cL E From a least-squares fit to the E|g data. +228TH cL The authors do not see transitions from the known 1- and +228TH2cL 3- members of the K|p=0- band. The level scheme is based on +228TH3cL coincidence data, energy fits, and intensity systematics +228TH cG Authors give only E|g. Multipolarity of 129, 191 and 244 |g's +228TH2cG in the ground-state band are determined as E2 from (L1+L2)/L3 ce data +228TH L 0 0+ NO HALF-LIFE GIVEN. +228TH L 57.8 2+ NO HALF-LIFE GIVEN. +228TH G 57.8 S +-1 KEV ASSIGNED. NO RI OR TI. +228TH cG E not seen. E|g is rounded-off value from adopted |g's +228TH L 187 4+ NO HALF-LIFE GIVEN. +228TH G 129.0 2 E2 NO RI OR TI. +228TH L 378 6+ NO HALF-LIFE GIVEN. +228TH G 191.0 1 E2 NO RI OR TI. +228TH L 519 5- NO HALF-LIFE GIVEN. +228TH G 332.0 4 NO RI OR TI. +228TH L 622 8+ NO HALF-LIFE GIVEN. +228TH G 244.3 1 E2 NO RI OR TI. +228TH3 G FL=378 FL= FOUND. +228TH L 695 7- NO HALF-LIFE GIVEN. +228TH G 317.2 2 NO RI OR TI. +228TH L 911 10+ NO HALF-LIFE GIVEN. +228TH G 289.3 2 NO RI OR TI. +228TH L 921 9- NO HALF-LIFE GIVEN. +228TH G 298.7 2 NO RI OR TI. +228TH L 1190 11- NO HALF-LIFE GIVEN. +228TH G 268.9 5 NO RI OR TI. +228TH G 278.4 3 NO RI OR TI. +228TH L 1239 12+ NO HALF-LIFE GIVEN. +228TH G 327.2 4 NO RI OR TI. +228TH L 1497 (13-) NO HALF-LIFE GIVEN. +228TH cL E shown as tentative by authors, but |g's to 11- and 12+ +228TH2cL are consistent with adopted data from (|a,2n|g) +228TH G 257.3 5 NO RI OR TI. +228TH G 306.6 5 NO RI OR TI. +228TH L 1596 (14+) ? NO HALF-LIFE GIVEN. +228TH cL E the adopted 14+ member of this band is at 1599.5-keV +228TH2cL from (|a,2n|g) with E|g=360.1 to 12+ +228TH G 357.2 5 NO RI OR TI. + +EG=357.2 5 NO INTENSITY OR PARTIAL WIDTH + +NORMAL TERMINATION OF PROGRAM diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index c7025dc9cb..92aafdb402 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -38,6 +38,66 @@ def test_gabs(): 'ensdf_processing/gabs/ref_gabs_80Br.new', exceptions_dataset) cleanup_tmp() + +def test_logft(): + create_tmp() + input_dict = {} + input_dict['input_data_set'] = 'ensdf_processing/logft/ref_logft.inp' + input_dict['output_report'] = tmp_path + '/tmp_logft.rpt' + input_dict['data_table'] = 'ensdf_processing/logft/ref_logft.dat' + input_dict['output_data_set'] = tmp_path + '/tmp_logft.new' + output_dict = ensdf_processing.logft(input_dict) + ref_output_data_set = 'ensdf_processing/logft/ref_logft.new' + d_data = file_comp(input_dict['output_data_set'], ref_output_data_set, []) + cleanup_tmp() + +def test_radd(): + create_tmp() + input_dict = {} + input_dict['atomic_number'] = '86' + input_dict['neutron_number'] = '113' + input_dict['output_file'] = tmp_path + '/tmp_output.out' + ensdf_processing.radd(input_dict) + ref_output = 'ensdf_processing/radd/ref_output.out' + d_report = file_comp(input_dict['output_file'], ref_output, []) + cleanup_tmp() + +def test_radlist(): + create_tmp() + input_dict = {} + input_dict['output_radiation_listing'] = 'Y' + input_dict['output_ensdf_like_file'] = 'N' + input_dict['output_file_for_nudat'] = 'N' + input_dict['output_mird_listing'] = 'N' + input_dict['calculate_continua'] = 'N' + input_dict['input_file'] = 'ensdf_processing/radlst/ref_radlst.inp' + input_dict['output_radlst_file'] = tmp_path + '/tmp_radlst.rpt' + input_dict['input_radlst_data_table'] = 'ensdf_processing/radlst/ref_mednew.dat' + input_dict['output_ensdf_file'] = tmp_path + '/tmp_ensdf.rpt' + output_dict = ensdf_processing.radlist(input_dict) + ref_output_radlst_file = 'ensdf_processing/radlst/ref_radlst.rpt' + ref_output_ensdf_file = 'ensdf_processing/radlst/ref_ensdf.rpt' + # exceptions contain lines in the ouptut that can have a tolerable precision difference + radlst_exceptions = [[1, '1PROGRAM RADLST 5.5 [ 5-OCT-88]. RUN ON'], [3, 66], [3, 135], [3, 713], [3, 714], [3, 760],[3, 944]] + ensdf_exceptions = [[3, 341], [3, 351], [3, 357]] + d_radlst = file_comp(input_dict['output_radlst_file'], ref_output_radlst_file, radlst_exceptions) + d_ensdf = file_comp(input_dict['output_ensdf_file'], ref_output_ensdf_file, ensdf_exceptions) + cleanup_tmp() + os.remove('atomic.dat') + +def test_ruler(): + create_tmp() + input_dict = {} + input_dict['input_file'] = 'ensdf_processing/ruler/ref_ruler.inp' + input_dict['output_report_file'] = tmp_path + '/tmp_ruler.rpt' + input_dict['mode_of_operation'] = 'R' + input_dict['assumed_dcc_theory'] = '1.4' + output_dict = ensdf_processing.ruler(input_dict) + ref_output = 'ensdf_processing/ruler/ref_ruler.rpt' + exceptions = [[1, ' INPUT FILE:'], [1, 'RULER Version 3.2d [20-Jan-2009]']] + d_report = file_comp(input_dict['output_report_file'], ref_output, exceptions) + cleanup_tmp() + def create_tmp(): if not os.path.exists(tmp_path): os.makedirs(tmp_path) From 42b1278a0f5c221004b87b04cb2df01708e7bbac Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 21 Jan 2016 18:13:22 -0800 Subject: [PATCH 101/216] Added fortran source for logft, radd and ruler ensdf analysis programs --- src/ensdf_processing/LOGFT/logft.for | 3029 ++++++++++++++ src/ensdf_processing/RADD/98AK04.in | 153 + src/ensdf_processing/RADD/ELE.in | 113 + src/ensdf_processing/RADD/RadD.for | 346 ++ src/ensdf_processing/RULER/ruler.f | 5477 ++++++++++++++++++++++++++ 5 files changed, 9118 insertions(+) create mode 100644 src/ensdf_processing/LOGFT/logft.for create mode 100755 src/ensdf_processing/RADD/98AK04.in create mode 100755 src/ensdf_processing/RADD/ELE.in create mode 100755 src/ensdf_processing/RADD/RadD.for create mode 100644 src/ensdf_processing/RULER/ruler.f diff --git a/src/ensdf_processing/LOGFT/logft.for b/src/ensdf_processing/LOGFT/logft.for new file mode 100644 index 0000000000..99c9922b92 --- /dev/null +++ b/src/ensdf_processing/LOGFT/logft.for @@ -0,0 +1,3029 @@ +C***********************************************************************01 00010 +C* 01 00020 +C* PROGRAM LOGFT 01 00030 +C* 01 00040 +C* VERSION 1 SUPPLIED BY ORNL. 01 00050 +C* VERSION 2A(43) AS OF 6-DEC-77. CONVERT TO MACHINE DEPENDENT CODE.01 00060 +C* VERSION 2A(44) AS OF 3-JAN-78. FIX IF ERROR. 01 00070 +C* VERSION 3(45) AS OF 4-JAN-78. REDUCE TO SINGLE PRECISION. 01 00080 +C* VERSION 3(50) AS OF 31-JAN-78. REPLACE MIN1 WITH AMIN1. 01 00090 +C* VERSION 3(51) AS OF 1-MAR-78. MATCH NEW (NOV. '77) NDP PGM. 01 00100 +C* VERSION 3(52) AS OF 10-JUL-78. BRING UP TO NEW FORSTR LEVEL. 01 00110 +C* VERSION 3(53) AS OF 2-AUG-78. FIX STMT 6160 TO BE F7.3 NOT F6.3.01 00120 +C* VERSION 3(54) AS OF 12-DEC-79. HANDLE MISSING UNCERT. FOR INTENS.01 00130 +C* VERSION 3(55) AS OF 12-DEC-79. CORRECT STMT 1274 FOR VAR. LEN. 01 00140 +C* VERSION 3(56) AS OF 12-DEC-79. CHANGE K,L,M+ TO CK,CL,CM+. 01 00150 +C* VERSION 3(57) AS OF 12-DEC-79. RETAIN PREC. OF IE, IB. 01 00160 +C* VERSION 4(60) AS OF 11-FEB-81. ADD SUBR. CNVUXS AND CHANGE CALLS.01 00170 +C* VERSION 4(61) AS OF 26-MAY-81. REMOVE CNVUXS. CNVU2S NOW DOES IT.01 00180 +C* VERSION 4(62) AS OF 26-MAY-81. REPLACE CALL TO INSERT WITH PUTIN.01 00190 +C* VERSION 4(63) AS OF 27-MAY-81. USE DIALOG=LINE FOR DEC. 01 00200 +C* VERSION 5(64) AS OF 20-AUG-81. PLACE NUCID ON 2B AND 2E CARDS. 01 00210 +C* VERSION 5(65) AS OF 2-SEP-81. REMOVE LAST $ ON CONT CARDS. 01 00220 +C* VERSION 5(66) AS OF 23-MAY-84. FIX NEW E CARD GENERATION. 01 00230 +C* VERSION 6 JAN-86. CONVERT TO FORTRAN 77 01 00240 +C* VERSION 6(1) 6-AUG-86. Added VAX MDC 01 00250 +C* VERSION 6(2) 2-DEC-86. Added IbmPC MDC. OVERFLOW IN DEINT01 00260 +C* FIXED. 01 00270 +C* VERSION 6(3) 2-MAR-87. 2 B, 2 E to S B, S E for cont. 01 00280 +C* records 01 00290 +C* VERSION 6(4) 2-NOV-87. VAX mdc READONLY in OPEN data file01 00300 +C* VERSION 7 6-MAR-89. Retain alpha uncertainties. PN 01 00310 +C* records. Mutiple Parent cards. RADLST's 01 00320 +C* integration some output format mods. Clean 01 00330 +C* up code etc. 01 00340 +C* VERSION 7(1) 20-APR-89. BKL,BL1L (Z<5) data values corrected by 01 00350 +C* VERSION 7(2) AUG-89. further fortran cleanup. 01 00360 +C* VERSION 7(3) 14-Dec-89. Correct convergence problems in QROMB 01 00370 +C* Fuction F modified. (T.Burrows) 01 00380 +C* VERSION 7(4) 6-JUN-90. Convert to IBM PC versin. Some cleanup.01 00390 +C* VERSION 7(5) 14-SEP-90. IBM version correction. IBONLY set 01 00400 +C* condition corrected. 01 00410 +C* VERSION 7(6) 15-OCT-90 Old integration package. Created PROCE 01 00420 +C* and WECARD subroutines from sections of MAIN. 01 00430 +C* Corrected TYPSTR declaration, Q(NUMP) bound error01 00440 +C* VERSION 7(7) 22-MAY-91 Correct value assignments to new card. 01 00450 +C* VERSION 7(8) 26-NOV-91 Correct SKIP1 setting when level E nonnu01 00460 +C* VERSION 7(9) 14-Oct-92. Restored RADLST integration package 01 00470 +C* (run-time stack overflow problem on IBM-PC 01 00480 +C* solved with "/ST:4096" on link). 01 00490 +C* Corrected statement out of order in 01 00500 +C* function F(W) and use of consecutive 01 00510 +C* arithmetic operators in subroutine POLINT 01 00520 +C* Restored some variable declarations 01 00530 +C* (commented out) to correspond to commented 01 00540 +C* out sections of code 01 00550 +C* Added Machine coding for ANS 01 00560 +C* (T.W. Burrows) 01 00570 +C* VERSION 7(10) 16-Dec-92. Tightened convergence tests from 01 00580 +C* EPS=1.E-5, EPS1=10.*EPS to EPS=5.E-6, 01 00590 +C* EPS1=EPS and rewrote check on convergence 01 00600 +C* in QROMB after intercomparison with CML 01 00610 +C* code BETA. 01 00620 +C* Finished typing all variables. 01 00630 +C* Changed heurestic check on W0 from 1.2 01 00640 +C* to 2.0 01 00650 +C* Protected against floating overflows in 01 00660 +C* calculating DETOP 01 00670 +C* Rewrote logic in calculating PINT and 01 00680 +C* EINT to protect against unrealistic 01 00690 +C* uncertainties when ETOP large or machine 01 00700 +C* roundoff when ETOP small 01 00710 +C* Corrected integer function IPREC to 01 00720 +C* account for floating point notation 01 00730 +C* Corrected logic for outputing IB and 01 00740 +C* IE when large uncertainties 01 00750 +C* (T.W. Burrows) 01 00760 +C* VERSION 7(11) 17-Feb-93. Finished correcting convergence problems01 00770 +C* by judicious addition of double precision 01 00780 +C* Corrected: 01 00790 +C* a. problem when half-life units at end of 01 00800 +C* field and neglect of "?" in T field 01 00810 +C* b. neglect of PN record 01 00820 +C* c. neglect of parent and level energies of01 00830 +C* the form "0+X" 01 00840 +C* d. overflow on branching ratio output 01 00850 +C* Added: 01 00860 +C* a. more terminal output to notify user of 01 00870 +C* possible problems 01 00880 +C* b. check of NB*BR versus NBBR 01 00890 +C* c. warning when NB=1/BR assumed 01 00900 +C* d. Check for "E" or "B" continuation 01 00910 +C* records other then "2" or "S" 01 00920 +C* e. Improved algorithms for significant 01 00930 +C* digits 01 00940 +C* f. Minor cleanup 01 00950 +C* VERSION 7(12) 10-May-93 a. Added checking on NUCID 01 00960 +C* b. Corrected calculation of A for Z>105 01 00970 +C* c. Corrected logic error which did not 01 00980 +C* suppress new output when non-numeric 01 00990 +C* uncertainty on E(level) 01 01000 +C* d. Added check for unplaced or redundant 01 01010 +C* E or B records 01 01020 +C* e. Added check for calculated transition 01 01030 +C* energies less than or equal to 0 01 01040 +C* f. Delinted using FLINT 2.83 01 01050 +C* (TWB) 01 01060 +C* VERSION 7(13) 03-Aug-93 Changed environment variable for VAX 01 01070 +C* version. (TWB) 01 01080 +C* VERSION 7(14) 03-Sep-93 Commented out IF statement after call to 01 01090 +C* WECARD. For EC only this resulted in 01 01100 +C* the last calculated LOGFn and LOGFnT to 01 01110 +C* be reported and values on E record to 01 01120 +C* not be modified. The error was 01 01130 +C* introduced in version 7(11) [17-Feb-93].01 01140 +C* Version 7(15) 25-Mar-96 a. Outputing a blank "S B" card when 01 01150 +C* linked with the latest version of 01 01160 +C* NSDFLIB - caused by a correction in the 01 01170 +C* CNVU2S routine in NSDFLIB 1.4 - 01 01180 +C* corrected all calls for format 2 of 01 01190 +C* CNVU2S by LOGFT 01 01200 +C* b. Corrected problem when blank T1/2 field01 01210 +C* on P record 01 01220 +C* c. Cleaned out redundant coding in WECARD 01 01230 +C* by introducing ADDFRAC subroutine 01 01240 +C* d. Other minor output cleanup 01 01250 +C* e. Corrected problems noted by AIX XL 01 01260 +C* Fortran Compiler 0.3.02.0002.0000 01 01270 +C* Version 7.15a 13-Apr-99 a. Check for and skip Ionized Atom 01 01280 +C* datasets 01 01290 +C* b. Y2K compliance 01 01300 +C* c. Corrected an arithmetic overflow in 01 01310 +C* calculating dtp 01 01320 +C* d. Check uniqueness. If not allowed or 01 01330 +C* 1U or 2U, added warning to report and 01 01340 +C* terminal output and comment to new file 01 01350 +C* Version 7.2 7-Feb-01 Added code to enable program to run on 01 01352 +C* Linux OS using GNU f77. Save statements 01 01354 +C* were added and NBBR was initialized. 01 01356 +C* 01 01360 +C* REFER ALL COMMENTS AND INQUIRIES TO 01 01370 +C* NATIONAL NUCLEAR DATA CENTER 01 01380 +C* BUILDING 197D 01 01390 +C* BROOKHAVEN NATIONAL LABORATORY 01 01400 +C* UPTON, NEW YORK 11973 01 01410 +C* TELEPHONE 631-344-2901 01 01420 +C* 01 01440 +C***********************************************************************01 01450 +C* 01 01460 +C* 01 01470 +C PROGRAM LOGFT FOR DATA-BANK DATA SETS. 01 01480 +C 01 01490 +C THIS PROGRAM CALCULATES LOG FT FOR BETA DECAY. 01 01500 +C FOR CAPTURE DECAY IT ALSO CALCULATES L/K RATIO. 01 01510 +C FOR POSITRON DECAY IT ALSO CALCULATES E/B+ RATIO. 01 01520 +C IT WILL DO SPECIAL CALCULATIONS FOR FIRST AND SECOND 01 01530 +C FORBIDDEN UNIQUE. 01 01540 +C ALL OTHER CATEGORIES ARE TREATED AS ALLOWED. 01 01550 +C 01 01560 +C THE PROGRAM WAS CONVERTED FROM FORTRAN IV TO 77. 01 01570 +C 01 01580 +C THE FOLLOWING SUBROUTINES ARE SUPPLIED WITH THE MAIN PROGRAM 01 01590 +C 01 01600 +C SETUP SETS UP SOME OF THE VALUES USED IN INTEGRATION 01 01610 +C F THE INTEGRAND 01 01620 +C GAMMA GAMMA FUNCTION (COMPLEX ARGUMENT) 01 01630 +C CAPTUR COMPUTES ELECTRON CAPTURE 01 01640 +C READWV READS IN K, L WAVE FUNCTIONS 01 01650 +C WAVEFN RETURNS WAVE FUNCTION TO CAPTUR 01 01660 +C 01 01670 + PROGRAM LOGFT 01 01680 +C 01 01690 + INTEGER NF 01 01700 + COMMON /FCOMM/NF 01 01710 +C 01 01720 + REAL EPS,EPS1 01 01730 + COMMON/PREC1/EPS,EPS1 01 01740 +C 01 01750 + COMMON /CARDIM/CARD,CARD2,STARS 01 01760 + CHARACTER*80 CARD 01 01770 + CHARACTER*80 CARD2 01 01780 + CHARACTER* 8 STARS 01 01790 +C 01 01800 + COMMON /ENUMS/IZ,JPREC,PERC,DPERC,PINT,DPINT,EINT,DEINT, 01 01810 + 1 IBONLY,ZERUNC,EK,NUMP 01 01820 + INTEGER IZ, JPREC,IBONLY ,ZERUNC,NUMP 01 01830 + REAL DPERC, DPINT,DEINT 01 01840 + REAL PERC, PINT, EINT 01 01850 + REAL EK(5) 01 01860 +C 01 01870 + COMMON /ECHARS/ TYPE,ATI,DATI,UNCERT 01 01880 + CHARACTER* 2 TYPE 01 01890 + CHARACTER ATI*10, DATI*2 01 01900 + CHARACTER*2 UNCERT 01 01910 +C 01 01920 + COMMON /WENUM/ AREA, AREAM, AREAP,FCK, FCKM, FCKP, FCL, FCLM, 01 01930 + 1 FCLP, FCMNM, FCMNO, FCMNP,NPOS,ETOP 01 01940 + INTEGER NPOS 01 01950 + REAL AREA, AREAM, AREAP,FCK, FCKM, FCKP, FCL, FCLM, FCLP, 01 01960 + 1 FCMNM, FCMNO, FCMNP,ETOP 01 01970 +C 01 01980 +C-REAL VARIABLES. 01 01990 +C 01 02000 + REAL A, AREA1U 01 02010 + REAL BR 01 02020 + REAL CAPTUR 01 02030 + REAL DBR, DE(5), DEBAR, DEE, DEIS, 01 02040 + 1 DELEV, DELF, DEK(5), DETOP, DFLT, 01 02050 + 2 DLAREA, DLFT, DNB, DQ(5), DT(5), DTP,DW0 01 02060 + REAL E(5), EAR1U, EAREA, EAREAM, EAREAP, EBAR, EBARM, 01 02070 + 1 EBARP, EBARR, EIS, EKTOP, 01 02080 + 2 ELEV, ELMASS, 01 02090 + 3 ETOPL, ETOPM, ETOPP 01 02100 + REAL FC, FC1, 01 02110 + 1 FCM, FCMN1, FCP, FLOG, FLOGF, 01 02120 + 2 FLOGM, FLOGP, FLOGT, FT, FTOUT 01 02130 + REAL NB 01 02140 + REAL Q(5) 01 02150 + REAL THALF(5), TMULT, TP, TUL(11) 01 02160 + REAL W0 01 02170 + REAL ZL, NBBR, DNBBR 01 02180 + REAL PINTM,PINTP 01 02190 +C 01 02200 +C-External functions 01 02210 + INTEGER Indexf,Iprec,LENSTR,Rlscn,TYPSTR 01 02220 + REAL FNEW,Valstr,XF 01 02230 + EXTERNAL FNEW,Indexf,Iprec,LENSTR,Rlscn,TYPSTR,Valstr,XF 01 02240 +C-Intrinsic functions 01 02250 + Integer IABS,INDEX,INT,MAX0 01 02260 + Real ALOG10 01 02270 + Intrinsic ALOG10,IABS,INDEX,INT,MAX0 01 02280 +C 01 02290 +C-INTEGER VARIABLES. 01 02300 +C 01 02310 + INTEGER I, IE, IK, IPRINT, ISKIP, 01 02320 + 1 ISKIP1,iskip2,lprec 01 02330 + INTEGER J 01 02340 + INTEGER INUMP 01 02350 +C 01 02360 +C-STRING VARIABLES. 01 02370 +C 01 02380 + CHARACTER* 1 C6 01 02390 + CHARACTER* 3 C79 01 02400 + CHARACTER* 1 C8 01 02410 + CHARACTER*80 CARDI 01 02420 + CHARACTER*80 LINE 01 02430 + Character*80 crdcom 01 02440 + CHARACTER*10 STA 01 02450 + CHARACTER* 6 STB 01 02460 + CHARACTER* 5 STR 01 02470 + CHARACTER* 2 UT(11) 01 02480 + CHARACTER*11 XDATE 01 02490 + CHARACTER AN(5)*12, DAN(5)*2 01 02500 +C 01 02510 + LOGICAL PDONE,FIRSTI,DONBBR,somskp,levfnd 01 02520 + Logical dowarn 01 02530 +C 01 02540 +C UNCERT REMEMBERS THE NONNUMERICAL UNCERTAINTY OF INPUT 01 02550 +C PDONE END OF PARENT RECORD FOR THE DATASET 01 02560 +C NUMP NO OF PARENT RECORDS 01 02570 +C 01 02580 +C-INITIALIZATION SECTION. 01 02590 +C 01 02600 + DATA TUL/31536000.,86400.,3600.,60., 1., 1., 1., 1., 1., 1., 1./ 01 02610 +C Right justify single character symbols to allow for possibility 01 02620 +C of symbol being last character in T field (TWB 921224) 01 02630 + DATA UT /' Y', ' D', ' H', ' M',' S','MS','US','NS','PS', 01 02640 + 1 'FS','AS'/ 01 02650 + DATA ELMASS, ZL/0.511004, 1./ 01 02660 +C 01 02670 + 9000 FORMAT(A) 01 02680 + 9001 FORMAT('1'/98X, A) 01 02690 + 9002 FORMAT(1X, A) 01 02700 + 9004 FORMAT('+', 100X,A) 01 02710 + 9005 FORMAT('0', 20X,A ) 01 02720 + 9008 FORMAT(20X, A) 01 02730 + 9009 FORMAT('0', 8X, 'TRANSITION(KEV)=', A, 1X, A, 01 02740 + 1 ', T1/2(SEC)=', A, 1X, A, ', BETA BRANCHING(%)=', 01 02750 + 2 A, 1X, A, ', PARTIAL T1/2(SEC)=', A, 1X, A) 01 02760 + 9010 FORMAT('0', 8X, 'TRANSITION(KEV)=', A, 1X, A, 01 02770 + 1 ', T1/2(SEC)=', A, 1X, A, ', BRANCHING(%)=', 01 02780 + 2 A, 1X, A, ', PARTIAL T1/2(SEC)=', A, 1X, A) 01 02790 + 9011 FORMAT(20X,A , A, 1X, A) 01 02800 + 9012 FORMAT(45X,A ) 01 02810 + 9013 FORMAT(20X, A, I1, A, F6.3,A) 01 02820 + 9016 FORMAT (20X, A, F7.3) 01 02830 + 9017 FORMAT(20X, 'CAPTURE TO POSITRON RATIO =', 1PE10.3, '+-', E9.2, 01 02840 + 1 10X, 'LOG(E/B+)=', 0PF7.3, 10X, 'K/B+=', 1PE10.3) 01 02850 + 9018 FORMAT(20X, 'POSITRON INTENSITY = ', 1PE8.2, '+-', 1PE9.1, ' ,', 01 02860 + 1 10X, 'ELECTRON CAPTURE INTENSITY =', E9.2, '+-', E9.1, ' ,') 01 02870 + 9020 FORMAT(20X, 'E=', F8.2, 5X, 'LOG F', I1, '=', F6.3, '+-', F6.3) 01 02880 + 9021 FORMAT(' LOG F', I1, 'T = ', F6.3, '+-', F6.3, 5X, 'F', I1, 'T=', 01 02890 + 1 E12.5) 01 02900 + 9022 FORMAT('+', 50X, 'AVERAGE BETA(+-) ENERGY=', F8.2, '+-', F7.3, 01 02910 + 1 4X, 'EBAR/E = ', F7.4, /) 01 02920 + 9023 FORMAT('0', A, 5X, A) 01 02930 + 9024 FORMAT('+', 85X, A) 01 02940 + 9025 FORMAT(1X, A, 10X, A) 01 02950 + 9026 FORMAT(////,98X,A) 01 02960 +C 01 02970 + stars='********' 01 02980 + crdcom='*****' 01 02990 + dowarn=.FALSE. 01 03000 + nbbr=0. 01 03005 +C 01 03010 + Write(6,9000)' LOGFT Version 7.2 [ 7-Feb-01]' 01 03020 +C 01 03030 +C+++MDC+++ 01 03040 +C...ANS 01 03050 +C/99901 FORMAT(' INPUT DATA SET FILE (TEST.DAT): ') 01 03070 +C/99902 FORMAT(' OUTPUT REPORT FILE (LOGFT.RPT): ') 01 03140 +C/99903 FORMAT(' DATA TABLE (LOGFT.DAT): ') 01 03200 +C/99904 FORMAT(' OUTPUT DATA SET FILE (LOGFT.NEW): ') 01 03260 +C...VAX, DVF, UNX +99901 FORMAT(' INPUT DATA SET FILE (data.tst): ',$) 01 03070 +99902 FORMAT(' OUTPUT REPORT FILE (logft.rpt): ',$) 01 03140 +99903 FORMAT(' DATA TABLE (logft.dat): ',$) 01 03200 +99904 FORMAT(' OUTPUT DATA SET FILE (logft.new): ',$) 01 03260 +C---MDC +99900 FORMAT(A) 01 03100 +C+++MDC +C...ANS, UNX + WRITE(6,99901) 01 03060 + READ(5,99900) LINE 01 03080 + IF(LINE.EQ.' ') LINE='data.tst' 01 03090 + OPEN(UNIT=35, ACCESS='SEQUENTIAL' ,STATUS='OLD', 01 03110 + 1 FILE=LINE) 01 03120 + WRITE(6,99902) 01 03130 + READ(5,99900) LINE 01 03150 + IF(LINE.EQ.' ') LINE='logft.rpt' 01 03160 + OPEN(UNIT=36, ACCESS='SEQUENTIAL', STATUS='UNKNOWN', 01 03170 + 1 FILE=LINE) 01 03180 + WRITE(6,99903) 01 03190 + READ(5,99900) LINE 01 03210 + IF(LINE.EQ.' ') LINE='logft.dat' 01 03220 + OPEN(UNIT=20, ACCESS='SEQUENTIAL' ,STATUS='OLD', 01 03230 + 1 FILE=LINE) 01 03240 + WRITE(6,99904) 01 03250 + READ(5,99900) LINE 01 03270 + IF(LINE.EQ.' ') LINE='logft.new' 01 03280 + OPEN(UNIT=21, ACCESS='SEQUENTIAL' ,STATUS='UNKNOWN', 01 03290 + 1 FILE=LINE) 01 03300 +C...VAX, DVF 01 03310 +C/ WRITE(6,99901) 01 03320 +C/ READ(5,99900) LINE 01 03340 +C/ IF(LINE.EQ.' ') LINE='DATA.TST' 01 03350 +C/ OPEN(UNIT=35, ACCESS='SEQUENTIAL' ,STATUS='OLD',READONLY, 01 03370 +C/ 1 FILE=LINE) 01 03380 +C/ WRITE(6,99902) 01 03390 +C/ READ(5,99900) LINE 01 03410 +C/ IF(LINE.EQ.' ') LINE='LOGFT.RPT' 01 03420 +C/ OPEN(UNIT=36, ACCESS='SEQUENTIAL', STATUS='UNKNOWN', 01 03430 +C/ 1 FILE=LINE) 01 03440 +C/ WRITE(6,99903) 01 03450 +C/ READ(5,99900) LINE 01 03470 +C...DVF +C/ IF(LINE.EQ.' ') LINE='LOGFT.DAT' 01 03480 +C...VAX +C/ IF(LINE.EQ.' ') LINE='SA1:[ENSDF_PGM.SOURCE.LOGFT]LOGFT.DAT' 01 03480 +C...VAX, DVF +C/ OPEN(UNIT=20, ACCESS='SEQUENTIAL' ,STATUS='OLD', READONLY, 01 03490 +C/ 1 FILE=LINE) 01 03500 +C/ WRITE(6,99904) 01 03510 +C/ READ(5,99900) LINE 01 03530 +C/ IF(LINE.EQ.' ') LINE='LOGFT.NEW' 01 03540 +C/ OPEN(UNIT=21, ACCESS='SEQUENTIAL' ,STATUS='UNKNOWN', 01 03550 +C/ 1 CARRIAGECONTROL='LIST', FILE=LINE) 01 03560 +C---MDC--- 01 03620 +C 01 03630 + XDATE=' ' 01 03640 +C+++MDC+++ 01 03650 +C...DVF, VAX, UNX 01 03660 + CALL DATE_20(XDATE) 01 03670 +C...ANS 01 03680 +C---MDC--- 01 03690 +C 01 03700 +C-PROGRAM BEGINS BY READING WAVE FUNCTION CARDS IN READWV. 01 03710 +C-THE LAST OF THESE CONTAINS BLANKS. 01 03720 +C 01 03730 + CALL READWV 01 03740 +C 01 03750 +C-NTRY IS THE NUMBER IF ITERATIONS TO USE IN THE INTEGRATION BEFORE 01 03760 +C-GIVING UP. 01 03770 +C-PREC IS THE PRECISION DESIRED. 01 03780 +C 01 03790 +C Precision of 0.000001 is too strict for very low W. Old version 01 03800 +C of LOGFT using SIMCON used 0.0001 so comprimise 01 03810 +C EPS=1.0E-6 01 03820 +C EPS1=100.*EPS 01 03830 +C Changed from EPS=1.E-5, EPS1=10.*EPS to EPS=5.E-6,EPS1=EPS 01 03840 +C (TWB. 921216) 01 03850 + EPS=5.0E-6 01 03860 + EPS1=0.1*EPS 01 03870 +C PREC = 1.0E-6 01 03880 + WRITE(36, 1999) 01 03890 + 1999 FORMAT('1PROGRAM L O G F T VERSION 7.2 AS OF 7-Feb-2001.') 01 03900 + IPRINT = 1 01 03910 + INUMP=0 01 03920 + FIRSTI=.TRUE. 01 03930 + iskip=0 01 03940 + somskp=.FALSE. 01 03950 + levfnd=.FALSE. 01 03960 +C 01 03970 +C-CARD FORMAT. 01 03980 +C 01 03990 + 100 READ(35, 9000, END=1265) CARD 01 04000 + I = TYPSTR(CARD(1:1)) 01 04010 + IF (I .LT. 0 .OR. I .EQ. 2) GO TO 900 01 04020 + C6=CARD(6:6) 01 04030 + C79=CARD(7:9) 01 04040 + IF (C6 .NE. ' ' .AND. C6 .NE. '1') GO TO 600 01 04050 + C8=CARD(8:8) 01 04060 +C "PN" record was never being read since check was only on column 01 04070 +C 7 being blank (TWB. 930104) 01 04080 + IF(CARD(7:7) .NE. ' ')THEN 01 04090 + IF(CARD(7:8) .NE. 'PN')GO TO 900 01 04100 + ENDIF 01 04110 + IF(CARD(1:3) .EQ. ' ') GO TO 900 01 04120 +C 01 04130 +C I CARD 01 04140 +C ====== 01 04150 + IF(C79 .EQ. ' ') THEN 01 04160 + BR = 1. 01 04170 + DBR = 0. 01 04180 + NB = 1. 01 04190 + DNB = 0. 01 04200 + NUMP=1 01 04210 + PDONE=.FALSE. 01 04220 +C Added warning message to terminal output when data skipped 01 04230 +C (TWB. 930212) 01 04240 + If(.NOT.firsti)Then 01 04250 + If(iskip .gt. 0)Then 01 04260 + Write(6,9002)'***** Data '// 01 04270 + 2 'set will not be modified - See LOGFT report' 01 04280 + Else 01 04290 + If(somskp)Write(6,9002)'***** Some records '// 01 04300 + 2 'will not be modified - See LOGFT report' 01 04310 + Endif 01 04320 + Endif 01 04330 + iskip=0 01 04340 + somskp=.FALSE. 01 04350 + levfnd=.FALSE. 01 04360 + IF(FIRSTI) THEN 01 04370 + WRITE(36,9026) XDATE 01 04380 + FIRSTI=.FALSE. 01 04390 + ELSE 01 04400 + WRITE(36, 9001) XDATE 01 04410 + ENDIF 01 04420 + WRITE(36, 9002) CARD 01 04430 +C Added terminal output of DSID so that messages would be in 01 04440 +C context (TWB. 930212) 01 04450 + Write(6,9002)'Processing=====>'//card(1:39) 01 04460 +C Check for Ionized Atom dataset and skip 01 04470 + If(INDEX(card(10:39),' DECAY').GT.0 .AND. 01 04480 + 2 (INDEX(card(10:39),'[').GT.0 01 04490 + 3 .AND. INDEX(card(10:39),'[') 01 04500 + 4 .LT.INDEX(card(10:39),' DECAY')))Then 01 04510 + Write(36,9002)'***** Ionized Atom dataset - skipping' 01 04520 + iskip=1 01 04530 + EndIf 01 04540 + STR=CARD(1:5) 01 04550 + i=Rlscn(str,1,A) 01 04560 + If(i .EQ. 6)Then 01 04570 + If(INDEX(str(1:3),' ') .NE. 0)Then 01 04580 + Write(36,9002)'***** Error in NUCID - Z=0 set' 01 04590 + iskip=1 01 04600 + Else 01 04610 + A=Valstr(str(1:3)) 01 04620 + Endif 01 04630 + Else If(i .NE. 4)Then 01 04640 + Write(36,9002)'***** Error in NUCID - Z=0 set' 01 04650 + iskip=1 01 04660 + Else 01 04670 + CALL IZEL(STR(4:5),IZ) 01 04680 + If(iz .EQ. -1)Then 01 04690 + Write(36,9002)'***** Element not identified - Z=0 set' 01 04700 + iskip=1 01 04710 + Endif 01 04720 + Endif 01 04730 + If(iskip .EQ. 1)iz=0 01 04740 + DO 120 I=1,5 01 04750 + Q(I) = 0. 01 04760 + 120 CONTINUE 01 04770 + GOTO 900 01 04780 + ENDIF 01 04790 +C 01 04800 +C COLUMNS 8,9, HAVE SOME LETTERS 01 04810 +C 01 04820 +C P CARD 01 04830 +C ====== 01 04840 +C 01 04850 + IF (C8 .EQ.'P') THEN 01 04860 +C 01 04870 +C ISKIP value reflects that of last p card if there are multiple 01 04880 +C 01 04890 + WRITE(36, 9002) CARD 01 04900 + STA=CARD(10:19) 01 04910 + STB=CARD(20:21) 01 04920 + CALL CNVS2U(STA,STB,EIS,DEIS) 01 04930 +C Added check for non-numeric parent energies (TWB. 930212) 01 04940 + Call Lbsup(sta) 01 04950 + Call Lbsup(stb) 01 04960 + If(Typstr(sta) .EQ. 2 .OR. Typstr(sta) .EQ. -1 01 04970 + 2 .OR. Typstr(stb) .EQ. 2 .OR. Typstr(stb) .EQ. -1)Then 01 04980 + Write(36,9002)'Parent energy value uncertain - skip output' 01 04990 + iskip=1 01 05000 + Endif 01 05010 + STA=CARD(65:74) 01 05020 + STB=CARD(75:76) 01 05030 + CALL CNVS2U(STA,STB,Q(NUMP),DQ(NUMP)) 01 05040 +C 01 05050 +C if DQP (DQ) field has non numeric uncertainty, do not output new rec01 05060 +C 01 05070 + IF(STB .NE. ' ' .AND. DQ(NUMP).EQ.0.)THEN 01 05080 + ISKIP=1 01 05090 + WRITE(36,9002) 01 05100 + 1 ' DQP on P-card with non numeric uncert. - skip output' 01 05110 + ENDIF 01 05120 + Q(NUMP) = Q(NUMP) + EIS 01 05130 + DQ(NUMP) = SQRT(DQ(NUMP) * DQ(NUMP) + DEIS * DEIS) 01 05140 + STA=CARD(40:49) 01 05150 + STB=CARD(50:55) 01 05160 +C 01 05170 + Call Lbsup(sta) 01 05180 + I=LENSTR(STA) 01 05190 +C Check for blank T1/2 field 01 05200 + If(i .LE. 0)Then 01 05210 + Write(6,9002)'No T1/2 given. 1 S assumed' 01 05220 + Write(36,9004)'NO T1/2 GIVEN. *******' 01 05230 + Write(36,FMT='(101X,A)')'1 S ASSUMED' 01 05240 + sta='1 S' 01 05250 + i=3 01 05260 + iskip=1 01 05270 + EndIf 01 05280 +C Format manual allows "?" after half-life (TWB. 921224) 01 05290 + IF(STA(I:I) .EQ. '?')THEN 01 05300 + If(i .GT. 1)Then 01 05310 + WRITE(6,9002)'NOTE UNCERTAIN T1/2 ASSIGNMENT' 01 05320 + WRITE(36, 9004) 'NOTE T1/2 ASSIGNMENT? *******' 01 05330 + I=LENSTR(STA(1:I-1)) 01 05340 + Else 01 05350 +C Check for missing T1/2 01 05360 + Write(6,9002)'No T1/2 given. 1 S assumed' 01 05370 + Write(36,9004)'NO T1/2 GIVEN. *******' 01 05380 + Write(36,FMT='(101X,A)')'1 S ASSUMED' 01 05390 + sta='1 S' 01 05400 + iskip=1 01 05410 + EndIf 01 05420 + ENDIF 01 05430 +C Added error messages to report file 01 05440 + IF(STA(I:I).LT.'A' .AND. STA(I:I).GT.'Z') THEN 01 05450 + WRITE(6,9002) 01 05460 + 1 'NO UNITS GIVEN FOR LIFETIME--SECONDS ASSUMED' 01 05470 + WRITE(36, 9004) 'NO UNITS FOR T1/2-- *******' 01 05480 + WRITE(36,FMT='(101X,A)')'SECONDS ASSUMED' 01 05490 + IK=5 01 05500 + ISKIP=1 01 05510 + ELSE 01 05520 + DO 130 IK=11,1,-1 01 05530 + IF(INDEX(STA,UT(IK)).NE.0) GO TO 140 01 05540 + 130 CONTINUE 01 05550 + WRITE(6,9002) 01 05560 + 1 'HALF-LIFE UNIT NOT RECOGNIZED. SECONDS SUBSTITUTED' 01 05570 + WRITE(36, 9004) 'T1/2 UNIT NOT RECOGNIZED *****' 01 05580 + WRITE(36,FMT='(101X,A)')'SECONDS SUBSTITUTED' 01 05590 + ISKIP=1 01 05600 + IK=5 01 05610 + ENDIF 01 05620 +C 01 05630 + 140 CALL CNVS2U(STA, STB, THALF(NUMP), DT(NUMP)) 01 05640 + TMULT=1. 01 05650 + IF(IK.GT.5) TMULT=.001**(IK-5) 01 05660 + THALF(NUMP) = THALF(NUMP) * TUL(IK) * TMULT 01 05670 + DT(NUMP) = DT(NUMP) * TUL(IK) * TMULT 01 05680 + NUMP=NUMP+1 01 05690 + GOTO 900 01 05700 + ENDIF 01 05710 +C 01 05720 +C-PICK UP BRANCHING RATIO INFORMATION FROM N-CARD. 01 05730 +C ====== 01 05740 +C PN card has P in column 7 01 05750 +C 01 05760 + IF(C8 .EQ.'N') THEN 01 05770 + IF(CARD(7:7) .EQ. 'P') THEN 01 05780 +C 01 05790 +C PN CARD 01 05800 +C ======= 01 05810 +C 01 05820 + STA=CARD(42:49) 01 05830 +C Added cross check between NB*BR and NBBR (TWB. 930212) 01 05840 + IF(STA.NE.' ') THEN 01 05850 + STB=CARD(50:55) 01 05860 + CALL CNVS2U(STA, STB, NBBR,DNBBR) 01 05870 + WRITE(36, 9002) CARD 01 05880 + IF(ABS(NBBR-NB*BR) .GT. 0.001)WRITE(36,FMT= 01 05890 + 2 '(''+'',100X,''CHECK NB*BR='',F5.3,'' .NE. NBBR *'')') 01 05900 + 4 NB*BR 01 05910 + ELSE 01 05920 + IF(BR .NE. 1. .AND.(ABS(NB*BR-1.) .GT. 0.001)) 01 05930 + 2 WRITE(36,FMT= 01 05940 + 3 '(''+'',100X,''CHECK NB*BR='',F5.3,'' *******'')') 01 05950 + 4 NB*BR 01 05960 + WRITE(36, 9002) CARD 01 05970 + ENDIF 01 05980 + DONBBR=.FALSE. 01 05990 + ELSE 01 06000 +C 01 06010 +C N CARD 01 06020 +C 01 06030 +C BR field 01 06040 +C 01 06050 + WRITE(36, 9002) CARD 01 06060 + STA=CARD(32:39) 01 06070 + IF (STA .NE. ' ') THEN 01 06080 + STB=CARD(40:41) 01 06090 + CALL CNVS2U(STA, STB, BR, DBR) 01 06100 + ELSE 01 06110 + BR=0. 01 06120 + DBR=0. 01 06130 + ENDIF 01 06140 + IF(BR .EQ. 0.)THEN 01 06150 + WRITE(36,9002) 01 06160 + 1 ' BR=0. reset to 1. - skip output' 01 06170 + ISKIP=1 01 06180 + BR=1.0 01 06190 + ENDIF 01 06200 + STA=CARD(42:49) 01 06210 +C 01 06220 +C NB field 01 06230 +C 01 06240 + IF (STA .EQ. ' ') THEN 01 06250 + NB = 1. / BR 01 06260 +C Changed from DBR = 0. to DNB = 0. and added warning 01 06270 +C message (TWB. 921224) 01 06280 + DNB = 0. 01 06290 + WRITE(36, 9004) 'NB ASSUMED 1/BR *******' 01 06300 + GOTO 900 01 06310 + ENDIF 01 06320 +C 01 06330 +C-IF STRING 'NR' IS IN NB FIELD, THEN ASSUME SAME 01 06340 +C-NORMALIZATION AS FOR GAMMAS. 01 06350 +C 01 06360 + CALL SQZSTR(STA, ' ' ) 01 06370 + IF (STA(1:2) .EQ. 'NR') THEN 01 06380 +C Not allowed in manual (TWB. 921224) 01 06390 + WRITE(36, 9004) '"NR" IN NB NOT ALLOWED ******' 01 06400 + STA=CARD(22:29) 01 06410 + STB=CARD(30:31) 01 06420 + ELSE 01 06430 + STB=CARD(50:51) 01 06440 + ENDIF 01 06450 + CALL CNVS2U(STA, STB, NB, DNB) 01 06460 + DONBBR=.TRUE. 01 06470 +C Replace ambiguous and misleading message with something 01 06480 +C more informative and move to after PN record (TWB. 930104)01 06490 +C WRITE(36, 9004) 'NOTE BRANCHING RATIO *******' 01 06500 + ENDIF 01 06510 + GO TO 900 01 06520 + ENDIF 01 06530 +C 01 06540 +C G,L,B OR E RECORD(NOT P) 01 06550 +C skip other cards 01 06560 +C 01 06570 + IF (C8 .NE. 'L' .AND. C8. NE. 'E' .AND. 01 06580 + 1 C8 .NE. 'B') GOTO 900 01 06590 +C 01 06600 +C no more parent record 01 06610 +C 01 06620 + IF(.NOT. PDONE) THEN 01 06630 + NUMP=NUMP-1 01 06640 + PDONE=.TRUE. 01 06650 + ENDIF 01 06660 +C IF last Q value is 0, error message and ISKIP set 01 06670 + IF (NUMP.EQ.0) THEN 01 06680 + IF (ISKIP .EQ. 0) WRITE(36, 9005) 01 06690 + 1 'Q-VALUE NOT GIVEN. MISSING P-CARD.' 01 06700 + ISKIP = 1 01 06710 + GOTO 900 01 06720 + ENDIF 01 06730 + IF (Q(NUMP) .EQ. 0.) THEN 01 06740 + IF (ISKIP .EQ. 0) WRITE(36, 9005) 01 06750 + 1 'Q-VALUE NOT GIVEN ON P-CARD.' 01 06760 + ISKIP = 1 01 06770 + GOTO 900 01 06780 + ENDIF 01 06790 + IF (C8 .EQ. 'L') THEN 01 06800 +C 01 06810 +C-PROCESS LEVEL RECORD. L-RECORD 01 06820 +C ======== 01 06830 +C Added cross check between NB*BR and NBBR (TWB. 930212) 01 06840 + IF(DONBBR)THEN 01 06850 + IF(BR .NE. 1. .AND.(ABS(NB*BR-1.) .GT. 0.001))WRITE(36,FMT= 01 06860 + 2 '(''+'',100X,''CHECK NB*BR='',F5.3,'' *******'')') 01 06870 + 3 NB*BR 01 06880 + DONBBR=.FALSE. 01 06890 + ENDIF 01 06900 + INUMP=0 01 06910 + ISKIP1 = 0 01 06920 + iskip2=0 01 06930 + levfnd=.TRUE. 01 06940 + WRITE(36, 9002) CARD 01 06950 + STA=CARD(10:19) 01 06960 + STB=CARD(20:21) 01 06970 + CALL CNVS2U(STA, STB, ELEV, DELEV) 01 06980 +C 01 06990 +C if level energy value contains non numeric info, do not write new 01 07000 +C record 01 07010 + Call Lbsup(sta) 01 07020 + Call Lbsup(stb) 01 07030 +C Program was not picking up "0+X", etc. (TWB. 930212) 01 07040 + If(Typstr(sta) .EQ. 2 .OR. Typstr(sta) .EQ. -1 01 07050 + 2 .OR. Typstr(stb) .EQ. 2 .OR. Typstr(stb) .EQ. -1)Then 01 07060 + ISKIP2=1 01 07070 + somskp=.true. 01 07080 + WRITE(36,9002) 01 07090 + 1 'Level energy value uncertain - skip output' 01 07100 + ENDIF 01 07110 +C 01 07120 +C-CALCULATE BRANCH ENERGY FROM Q-VALUE. 01 07130 +C 01 07140 + DO 200 I=1,NUMP 01 07150 + E(I) = Q(I) - ELEV 01 07160 + DE(I) = SQRT(DQ(I) * DQ(I) + DELEV * DELEV) 01 07170 + EK(I) = E(I) 01 07180 + DEK(I) = DE(I) 01 07190 + E(I) = E(I) * 0.001 01 07200 + DE(I) = DE(I) * 0.001 01 07210 + 200 CONTINUE 01 07220 + GOTO 900 01 07230 + ENDIF 01 07240 +C 01 07250 +C B or E card 01 07260 +C 01 07270 + CARDI=CARD 01 07280 + IBONLY=0 01 07290 + ZERUNC=0 01 07300 + IF (C8 .EQ. 'B') THEN 01 07310 +C 01 07320 +C-START PROCESSING B RECORD. 01 07330 +C ======== 01 07340 +C 01 07350 + WRITE(36, 9000) '0' 01 07360 + If(.NOT.levfnd)Then 01 07370 + Write(36,9002)card 01 07380 + Write(36,9002) 01 07390 + 2 '***** Unplaced B or redundant B for level ignored' 01 07400 + iskip1=1 01 07410 + somskp=.TRUE. 01 07420 + Goto 900 01 07430 + Endif 01 07440 + levfnd=.FALSE. 01 07450 + IZ = -1 * IABS(IZ) 01 07460 + TYPE=CARD(78:79) 01 07470 + STA=CARD(22:29) 01 07480 + STB=CARD(30:31) 01 07490 + CALL CNVS2U(STA, STB, PERC, DPERC) 01 07500 + UNCERT=STB 01 07510 +C NOTE IF DPERC = 0.0 (MISSING UNCERT) 01 07520 +C Added special check for 100% feeding (TWB. 930212) 01 07530 + IF ((DPERC .EQ. 0.0 .AND. PERC .NE. 100.) .OR. STB .NE. ' ') 01 07540 + 2 ZERUNC = 1 01 07550 + jprec=Iprec(sta) 01 07560 + GOTO 300 01 07570 +C 01 07580 +C-END PROCESSING B RECORD. 01 07590 +C 01 07600 + ELSE 01 07610 +C 01 07620 +C-START PROCESSING E RECORD. 01 07630 +C ======== 01 07640 +C 01 07650 + If(.NOT.levfnd)Then 01 07660 + WRITE(36, 9000) '0' 01 07670 + Write(36,9002)card 01 07680 + Write(36,9002) 01 07690 + 2 '***** Unplaced E or redundant E for level ignored' 01 07700 + somskp=.TRUE. 01 07710 + iskip1=1 01 07720 + Goto 900 01 07730 + Endif 01 07740 + levfnd=.FALSE. 01 07750 + CALL PROCE 01 07760 + ENDIF 01 07770 +C 01 07780 + 01 07790 +C-END PROCESSING OF E RECORD. 01 07800 +C 01 07810 +C******************** 01 07820 +C-EITHER B- OR EC/B+ COMES THROUGH HERE. 01 07830 +C B CARD OR E CARD 01 07840 +C ====== ====== 01 07850 +C 01 07860 +C do the calculations below once for each parent record 01 07870 +C 01 07880 + 300 Continue 01 07890 + INUMP=INUMP+1 01 07900 + CARD2=' ' 01 07910 + ETOP = 0. 01 07920 + DETOP = 0. 01 07930 + ISKIP1=iskip2 01 07940 + If(e(inump) .LE. 0.0)Then 01 07950 + Write(36, 01 07960 + 2 FMT='(''0'', 8X, ''TRANSITION(KEV)='', E8.2, 1X, E8.2, 01 07970 + 2 '' less than or equal to 0 - Skipping calculation'')') 01 07980 + 2 E(inump),DE(inump) 01 07990 + Write(36, 9023) cardi, 'OLD CARD' 01 08000 + Write(36, 9024) 'OLD CARD KEPT' 01 08010 + Write(21, 9000) cardi 01 08020 + somskp=.TRUE. 01 08030 + iskip1=1 01 08040 + IF(INUMP.LT.NUMP) GO TO 300 01 08050 + Goto 100 01 08060 + Endif 01 08070 + IF (PERC .LE. 0.) THEN 01 08080 +C 01 08090 +C-RECOVERY FROM MISSING BRANCHING RATIO. 01 08100 +C 01 08110 + WRITE(36, 9002)' INTENSITY SET AT 100.' 01 08120 + PERC = 100. 01 08130 + EINT = PERC 01 08140 + DEINT = 0. 01 08150 + ISKIP1 = 1 01 08160 + somskp=.TRUE. 01 08170 + ENDIF 01 08180 +C 01 08190 +C-CONVERT ENERGY TO MC ** 2 UNITS AND ADD REST MASS. 01 08200 +C 01 08210 + W0 = E(INUMP) / ELMASS + ZL 01 08220 + DW0 = DE(INUMP) / ELMASS 01 08230 +C 01 08240 +C-SET FLAG INITIALLY FOR ALLOWED TRANSITION. 01 08250 +C 01 08260 + IE = 0 01 08270 +C 01 08280 +C-TEST IF FIRST FORBIDDEN UNIQUE OR SECOND FORBIDDEN UNIQUE. 01 08290 +C 01 08300 + IF (TYPE .EQ. '1U') IE = 1 01 08310 + IF (TYPE .EQ. '2U') IE = 2 01 08320 +C 01 08330 +C-Check for other types which will be assumed to be allowed 01 08340 +C 01 08350 + If(type.NE.' ' .AND. ie.EQ.0)Then 01 08360 + dowarn=.TRUE. 01 08370 + Else 01 08380 + dowarn=.FALSE. 01 08390 + crdcom='*****' 01 08400 + EndIf 01 08410 +C 01 08420 +C-HALF-LIFE. 01 08430 +C 01 08440 + IF (THALF(INUMP) .EQ. 0.) THEN 01 08450 + WRITE(36, 9008)'HALF LIFE SET TO 1 S' 01 08460 + ISKIP1 = 1 01 08470 + somskp=.TRUE. 01 08480 + THALF(INUMP) = 1. 01 08490 + DT(INUMP) = 0. 01 08500 + FLOGT = 0. 01 08510 + ENDIF 01 08520 + IF(NBBR.EQ.0.) THEN 01 08530 + TP = 100. * THALF(INUMP) / ABS(PERC) / BR / NB 01 08540 + ELSE 01 08550 + TP= 100. * THALF(INUMP) /ABS(PERC) / NBBR 01 08560 + ENDIF 01 08570 + DTP = 0. 01 08580 + IF (THALF(INUMP) .NE. 0.) THEN 01 08590 + dtp=dt(inump)/thalf(inump) 01 08600 + dtp=dtp*dtp 01 08610 + IF(NBBR.EQ.0.) THEN 01 08620 + dtp=dtp+(dbr/br)*(dbr/br)+(dnb/nb)*(dnb/nb) 01 08630 + ELSE 01 08640 + dtp=dtp+(dnbbr/nbbr)*(dnbbr/nbbr) 01 08650 + ENDIF 01 08660 + ENDIF 01 08670 + IF (PERC .NE. 0.) DTP = DTP + DPERC * DPERC / PERC /PERC 01 08680 + IF (DTP .NE. 0.) DTP = TP * SQRT(DTP) 01 08690 +C-LOG(E) = 0.43429 01 08700 + FLOGT = ALOG10(TP) 01 08710 + DFLT = DTP * 0.43429 / TP 01 08720 +C 01 08730 + CALL CNVU2S(EK(INUMP), DEK(INUMP), AN(1), 8, DAN(1), 2) 01 08740 + CALL CNVU2S(THALF(INUMP), DT(INUMP), AN(2), 12, DAN(2), 2) 01 08750 +C Corrected for overflow on branching ratio (TWB. 930212) 01 08760 + If(dperc .NE. 0)Then 01 08770 + CALL CNVU2S(PERC, DPERC, AN(3), 8, DAN(3), 2) 01 08780 + Else 01 08790 + lprec=-2 01 08800 + If(ALOG10(perc) .GE. 1.)lprec=lprec-INT(ALOG10(perc))+1 01 08810 + Call Cnvu2s(perc,0.0,an(3),8,dan(3),lprec) 01 08820 + dan(3)=uncert 01 08830 + Endif 01 08840 + CALL CNVU2S(TP, DTP, AN(4), 12, DAN(4), 2) 01 08850 +C 01 08860 +C-IZ < 0 FOR B- DECAY. 01 08870 +C 01 08880 + IF(IZ.GT.0 .AND. IBONLY.NE.0) THEN 01 08890 +C 01 08900 +C-ONLY POSITRON INTENSITY WAS GIVEN. 01 08910 +C-EC INTENSITY WILL BE CALCULATED. 01 08920 +C 01 08930 + WRITE(36, 9009) 01 08940 + 1 ( AN(J)(1:8) ,DAN(J)(1:2) ,AN(J+1) ,DAN(J+1)(1:2), 01 08950 + 3 J = 1, 3, 2) 01 08960 + ELSE 01 08970 +C 01 08980 +C-TOTAL BRANCHING WAS GIVEN. 01 08990 +C 01 09000 + WRITE(36, 9010) 01 09010 + 1 ( AN(J)(1:8), DAN(J)(1:2), AN(J+1), DAN(J+1)(1:2), 01 09020 + 3 J = 1, 3, 2) 01 09030 + ENDIF 01 09040 + CALL CNVU2S(FLOGT, DFLT, AN(5), 8, DAN(5), 2) 01 09050 + WRITE(36, 9011) 'LOG PARTIAL T1/2 =', AN(5), DAN(5) 01 09060 + IF (A .EQ. 0.) THEN 01 09070 + WRITE(36, 9004) 'A VALUE MISSING. OLD CARD KEPT' 01 09080 + GOTO 900 01 09090 + ENDIF 01 09100 +C 01 09110 +C-TEST IF POSITRON OR NEGATRON. 01 09120 +C-SET NPOS = -1 FOR B- DECAY. 01 09130 +C 01 09140 + NPOS = -1 01 09150 + IF (IE .EQ. 1) WRITE(36, 9012) 'FIRST-FORBIDDEN-UNIQUE' 01 09160 + IF (IE .EQ. 2) WRITE(36, 9012) 'SECOND-FORBIDDEN UNIQUE' 01 09170 +C 01 09180 +C-IZ < 0 FOR B- DECAY. 01 09190 +C-IZ = 0 IS AN ERROR. 01 09200 +C-IZ > 0 FOR EC, B+ DECAY. 01 09210 +C 01 09220 + IF(IZ.EQ.0) THEN 01 09230 + WRITE(36, 9004) 'Z VALUE MISSING. OLD CARD KEPT' 01 09240 + GOTO 900 01 09250 + ENDIF 01 09260 + IF(IZ.GT.0) THEN 01 09270 +C 01 09280 +C-ELECTRON CAPTURE ALLOWED. 01 09290 +C 01 09300 + FC = CAPTUR(IZ, W0, IPRINT, 0, FCK, FCL, FCMNO) 01 09310 + FC1 = 0. 01 09320 + IF (IE .EQ. 0) THEN 01 09330 + FCP = CAPTUR(IZ, W0 + DW0, IPRINT, 0, FCKP, FCLP, FCMNP) 01 09340 + FCM = CAPTUR(IZ, W0 - DW0, IPRINT, 0, FCKM, FCLM, FCMNM) 01 09350 + ELSE 01 09360 +C 01 09370 +C-CAPTURE FOR FIRST OR SECOND FORBIDDEN UNIQUE. 01 09380 +C 01 09390 + FC1 = CAPTUR(IZ, W0, IPRINT, IE, FCK, FCL, FCMN1) 01 09400 + FCP = CAPTUR(IZ, W0 + DW0, IPRINT, IE, FCKP, FCLP, FCMNP) 01 09410 + FCM = CAPTUR(IZ, W0 - DW0, IPRINT, IE, FCKM, FCLM, FCMNM) 01 09420 + DELF=ALOG10(FC1 / FC) 01 09430 + FC = FC1 01 09440 + FCMNO = FCMN1 01 09450 + IF (IPRINT .NE. 0) WRITE(36, 9013) ' LOG(F', IE, 01 09460 + 1 '/F0) FOR ELECTRON CAPTURE = ', DELF 01 09470 + ENDIF 01 09480 +C 01 09490 +C-TEST IF ENOUGH ENERGY FOR POSITRONS. 01 09500 +C-SET NPOS = 0 FOR EC-ONLY DECAY. 01 09510 +C 01 09520 + NPOS = 0 01 09530 + AREA = 0. 01 09540 + AREAP = 0. 01 09550 + AREAM = 0. 01 09560 + AREA1U = 0. 01 09570 +C 01 09580 + IF (W0 .LE. 3.01) THEN 01 09590 + AREA = AREA + FC 01 09600 + AREAP = AREAP + FCP 01 09610 + AREAM = AREAM + FCM 01 09620 + IF (AREA .LE. 0.) THEN 01 09630 +C 01 09640 +C-ERROR EXIT FOR NEGATIVE OR ZERO INTEGRATION. 01 09650 +C 01 09660 + WRITE(36, 9000) 01 09670 + 1 '0 ZERO OR NEGATIVE INTEGRATION. OLD CARD KEPT' 01 09680 + ISKIP1 = 1 01 09690 + somskp=.TRUE. 01 09700 + GOTO 900 01 09710 + ENDIF 01 09720 + GO TO 410 01 09730 + ENDIF 01 09740 +C 01 09750 +C-POSITRON DECAY SETUP IF B+ IS POSSIBLE. 01 09760 +C 01 09770 + W0 = W0 - 2. 01 09780 +C 01 09790 +C-SET NPOS = +1 FOR COMBINED EC AND B+ DECAY. 01 09800 +C 01 09810 + NPOS = 1 01 09820 + ENDIF 01 09830 +C 01 09840 +C-INTEGRATION PROCEDURE USED FOR EITHER B+ OR B-. 01 09850 +C 01 09860 +C-SET UP CONSTANTS TO BE USED IN INTEGRATION. 01 09870 +C 01 09880 + CALL SETUP(A, IZ, W0 + DW0, 0) 01 09890 +C 01 09900 +C-CALL INTEGRATION SUBROUTINE. 01 09910 +C 01 09920 +C CALL SIMCON(ZL, W0+DW0, PREC, NTRY, AREAP, EAREAP, NOI, RSIM, R2)01 09930 +C Convergence problem solved so heurestic solution removed (TWB. 01 09940 +C 930212) 01 09950 + NF=1 01 09960 + CALL QROMB(FNEW,ZL,W0+DW0,AREAP) 01 09970 + CALL QROMB(XF,ZL,W0+DW0,EAREAP) 01 09980 + CALL SETUP(A, IZ, W0 - DW0, 0) 01 09990 +C CALL SIMCON(ZL, W0-DW0, PREC, NTRY, AREAM, EAREAM, NOI, RSIM, R2)01 10000 + NF=1 01 10010 + CALL QROMB(FNEW,ZL,W0-DW0,AREAM) 01 10020 + CALL QROMB(XF,ZL,W0-DW0,EAREAM) 01 10030 + CALL SETUP(A, IZ, W0, 0) 01 10040 +C CALL SIMCON(ZL, W0, PREC, NTRY, AREA, EAREA, NOI, RSIM, R2) 01 10050 + NF=1 01 10060 + CALL QROMB(FNEW,ZL,W0,AREA) 01 10070 + CALL QROMB(XF,ZL,W0,EAREA) 01 10080 +C 01 10090 +C-TEST FOR CONVERGENCE OF INTEGRATION. for SIMCON 01 10100 +C 01 10110 +C IF (RSIM .GT. PREC) 01 10120 +C 1 WRITE(36, 9014) RSIM, 'DESIRED PRECISION NOT REACHED' 01 10130 +C 01 10140 +C-CALCULATE AVERAGE ENERGY. 01 10150 +C 01 10160 + IF (IE .NE. 0) THEN 01 10170 +C 01 10180 +C-INTEGRATE FOR FIRST OR SECOND FORBIDDEN UNIQUE. 01 10190 +C 01 10200 + CALL SETUP(A, IZ, W0 - DW0, IE) 01 10210 +C CALL SIMCON(ZL, W0-DW0, PREC,NTRY,AREAM,EAREAM,NOI,RSIM,R2) 01 10220 + NF=1 01 10230 + CALL QROMB(FNEW,ZL,W0-DW0,AREAM) 01 10240 + CALL QROMB(XF,ZL,W0-DW0,EAREAM) 01 10250 + CALL SETUP(A, IZ, W0 + DW0, IE) 01 10260 +C CALL SIMCON(ZL, W0+DW0, PREC,NTRY,AREAP,EAREAP,NOI,RSIM,R2) 01 10270 + NF=1 01 10280 + CALL QROMB(FNEW,ZL,W0+DW0,AREAP) 01 10290 + CALL QROMB(XF,ZL,W0+DW0,EAREAP) 01 10300 + CALL SETUP(A, IZ, W0, IE) 01 10310 +C CALL SIMCON(ZL, W0, PREC, NTRY, AREA1U, EAR1U, NOU, RSIM, R2N01 10320 + NF=1 01 10330 + CALL QROMB(FNEW,ZL,W0,AREA1U) 01 10340 + CALL QROMB(XF,ZL,W0,EAR1U) 01 10350 +C IF (RSIM .GT. PREC) WRITE(36, 9015) ' DESIRED ',IE, 01 10360 +C 1 'U PRECISION NOT REACHED',RSIM 01 10370 +C 01 10380 +C-SAVE LOG(F1/F0). 01 10390 +C 01 10400 + DELF = ALOG10(AREA1U / AREA) 01 10410 + AREA = AREA1U 01 10420 + EAREA = EAR1U 01 10430 + IF (IPRINT .NE. 0) WRITE(36, 9013) ' LOG(F', IE, 01 10440 + 1 '/F0) = ', DELF, ' FOR BETAS, + OR -' 01 10450 + ENDIF 01 10460 + EBAR = EAREA / AREA 01 10470 + EBARP = EAREAP / AREAP 01 10480 + EBARM = EBAR 01 10490 + IF (AREAM .NE. 0.) EBARM = EAREAM / AREAM 01 10500 + DEBAR = ELMASS * 1000. * 01 10510 + 1 AMAX1(ABS(EBAR - EBARP), ABS(EBAR - EBARM)) 01 10520 + EBAR = (EBAR - 1.) * ELMASS 01 10530 + EBARR = EBAR / ELMASS / (W0 - ZL) 01 10540 + EBAR = EBAR * 1000. 01 10550 +C 01 10560 +C-IZ < 0 FOR B- DECAY. 01 10570 +C-IZ = 0 IS AN ERROR. (took care before) 01 10580 +C-IZ > 0 FOR EC / B+ DECAY. 01 10590 +C 01 10600 + IF(IZ.GT.0) THEN 01 10610 +C 01 10620 +C-CALCULATE CAPTURE TO POSITRON RATIO. 01 10630 +C-RESTORE FROM POSITRON ENERGY TO TOTAL DECAY ENERGY. 01 10640 +C 01 10650 + W0 = W0 + 2. 01 10660 +C Must protect against floating overflows for either very small 01 10670 +C capture or positron decay (TWB. 921216) 01 10680 + IF(FC .LE. AREA)THEN 01 10690 + ETOP = FC / AREA 01 10700 + ETOPP = FCP / AREAP 01 10710 + ETOPM = ETOP 01 10720 + IF (AREAM .NE. 0.) ETOPM = FCM / AREAM 01 10730 +C 01 10740 +C-DETOP USED FOR SQUARE OF UNCERTAINTY IN EC / POSITRON RATIO. 01 10750 +C 01 10760 + DETOP = (AMAX1(ABS(ETOP - ETOPP), ABS(ETOP - ETOPM))) ** 2 01 10770 +C 01 10780 +C-ADD A 1% UNCERTAINTY FOR THE THEORY. 01 10790 +C 01 10800 + DETOP = DETOP + 0.0001 * ETOP * ETOP 01 10810 + DETOP = SQRT(DETOP) 01 10820 + ELSE 01 10830 +C Calculate positron to capture ratio instead 01 10840 + ETOP=AREA/FC 01 10850 + ETOPP=AREAP/FCP 01 10860 + ETOPM=ETOP 01 10870 + IF(FCM .NE. 0)ETOPM=AREAM/FCM 01 10880 + DETOP = (AMAX1(ABS(ETOP - ETOPP), ABS(ETOP - ETOPM))) ** 2 01 10890 + DETOP = DETOP + 0.0001 * ETOP * ETOP 01 10900 + DETOP = SQRT(DETOP) 01 10910 +C Now invert to get back to capture to positron ratio 01 10920 + DETOP=(DETOP/ETOP)/ETOP 01 10930 + ETOP=1.0/ETOP 01 10940 + ENDIF 01 10950 + EKTOP = FCK / AREA 01 10960 + ETOPL = ALOG10(ETOP) 01 10970 +C 01 10980 + IF (IBONLY .EQ. 1) THEN 01 10990 +C 01 11000 +C-POSITRON INTENSITY ALONE WAS GIVEN. 01 11010 +C 01 11020 + PINT = PERC 01 11030 + EINT = PERC * ETOP 01 11040 + DPINT = DPERC 01 11050 + DEINT = EINT * 01 11060 + 1 (DPERC * DPERC / PERC / PERC + DETOP * DETOP / ETOP / ETOP) 01 11070 + PERC = PINT + EINT 01 11080 + DPERC = PERC * SQRT(DPINT * DPINT / PINT / PINT + 01 11090 + 1 DETOP * DETOP / (1. + ETOP) ** 2) 01 11100 + TP = 100. * THALF(INUMP) / PERC 01 11110 + DTP = TP * 01 11120 + 1 SQRT(DT(INUMP) * DT(INUMP) / THALF(INUMP) / THALF(INUMP) 01 11130 + 1 + DPERC * DPERC / PERC / PERC) 01 11140 + DFLT = DTP * 0.43429 / TP 01 11150 + FLOGT = ALOG10(TP) 01 11160 + WRITE(36, 9016) 01 11170 + 1 'LOG OF POSITRON PLUS CAPTURE PARTIAL HALF-LIFE = ',FLOGT 01 11180 + CALL CNVU2S(PERC, DPERC, AN(3), 8, DAN(3), 2) 01 11190 + CALL CNVU2S(TP, DTP, AN(4), 12, DAN(4), 2) 01 11200 + WRITE(36, 9010) 01 11210 + 1 ( AN(J)(1:8), DAN(J)(1:2), 01 11220 + 2 AN(J+1),DAN(J+1)(1:2),J = 1, 3, 2) 01 11230 + ELSE 01 11240 +C 01 11250 +C-TOTAL INTENSITY (EC AND B+) WAS GIVEN. 01 11260 +C 01 11270 +C Cannot use ETOP+-DETOP to calculate positron intensity when 01 11280 +C electron to capture ratio is large --- DPINT possibly 01 11290 +C overestimated. Cannot use PERC-PINT when electron to 01 11300 +C* capture ratio is low --- possible machine roundoff error 01 11310 + IF(FC .LE. AREA)THEN 01 11320 + EINT=PERC*(ETOP/(1+ETOP)) 01 11330 + PINT = PERC / (1. + ETOP) 01 11340 + DPINT = PINT * SQRT(DPERC * DPERC / PERC / PERC + 01 11350 + 1 DETOP * DETOP / (1. + ETOP) ** 2) 01 11360 + ELSE 01 11370 + PINT=AREA/(AREA+FC) 01 11380 + PINTP=AREAP/(AREAP+FCP) 01 11390 + PINTM=AREAM/(AREAM+FCM) 01 11400 + DPINT=AMAX1(ABS(PINTP-PINT),ABS(PINT-PINTM))**2 01 11410 +C Account for uncertainty in theory 01 11420 + DPINT=DPINT+(0.01*ETOP/(1.+ETOP)**2)**2 01 11430 + DPINT=SQRT(PERC*PERC*DPINT + (PINT*DPERC)**2) 01 11440 + PINT=PERC*PINT 01 11450 + EINT = PERC - PINT 01 11460 + DEINT=(DETOP/ETOP)**2 01 11470 + DEINT=DEINT/((1.+ETOP)**2) 01 11480 + DEINT=EINT*SQRT(DPERC*DPERC/PERC/PERC +DEINT) 01 11490 + ENDIF 01 11500 + ENDIF 01 11510 +C changes the order of this formula due to overflow 01 11520 +C DEINT = EINT * SQRT(DPERC * DPERC / PERC / PERC + 01 11530 +C 1 DETOP * DETOP / (ETOP * (1. + ETOP)) ** 2) 01 11540 +C 01 11550 + DEINT=(DETOP/ETOP)**2 01 11560 + DEINT=DEINT/((1.+ETOP)**2) 01 11570 + DEINT=EINT*SQRT(DPERC*DPERC/PERC/PERC +DEINT) 01 11580 +C 01 11590 +C NOTE: pint and eint are now correlated 01 11600 +C 01 11610 +C 01 11620 +C-PRINT CAPTURE AND POSITRON RATIOS AND INTENSITIES. 01 11630 +C 01 11640 + WRITE(36, 9017) ETOP, DETOP, ETOPL, EKTOP 01 11650 + WRITE(36, 9018) PINT, DPINT, EINT, DEINT 01 11660 +C 01 11670 +C-COMBINE POSITRON AND CAPTURE. 01 11680 +C-ALSO ENTER HERE WITH NPOS = 0 IF EC ONLY (E < 1022). 01 11690 +C 01 11700 + AREA = AREA + FC 01 11710 + AREAP = AREAP + FCP 01 11720 + AREAM = AREAM + FCM 01 11730 + IF (AREA .LE. 0.) THEN 01 11740 +C 01 11750 +C-ERROR EXIT FOR NEGATIVE OR ZERO INTEGRATION. 01 11760 +C 01 11770 + WRITE(36, 9000) 01 11780 + 1 '0 ZERO OR NEGATIVE INTEGRATION. OLD CARD KEPT' 01 11790 + ISKIP1 = 1 01 11800 + somskp=.TRUE. 01 11810 + GOTO 900 01 11820 + ENDIF 01 11830 + ENDIF 01 11840 +410 CONTINUE 01 11850 +C Moved call to WECARD to here so program has access to the new 01 11860 +C E record contents (TWB. 930212) 01 11870 + IF (IZ .GE. 0) THEN 01 11880 +C 01 11890 +C-SKIP FOLLOWING SECTION FOR B- DECAY. 01 11900 +C 01 11910 +C-PLACE IE, IB IN PROPER FIELDS ON NEW FIRST E-CARD. 01 11920 +C 01 11930 + CALL WECARD 01 11940 +ctwb IF (EK(INUMP) .LE. 1022.) GOTO 530 01 11950 + ENDIF 01 11960 +C 01 11970 +C-COMBINE LOG F AND LOG T FOR EITHER B- OR EC / B+. 01 11980 +C 01 11990 + FLOG = ALOG10(AREA) 01 12000 + FLOGP = ALOG10(AREAP) 01 12010 + FLOGM = FLOG 01 12020 + IF (AREAM .GT. 0.) FLOGM = ALOG10(AREAM) 01 12030 + FLOGF = FLOGT + FLOG 01 12040 + FT = AREA * TP 01 12050 + DLAREA = AMAX1(ABS(FLOG - FLOGP), ABS(FLOG - FLOGM)) 01 12060 + DLFT = SQRT(DLAREA * DLAREA + DFLT * DFLT) 01 12070 +C 01 12080 + FTOUT = FLOGF 01 12090 + IF (AREAM .LE. 0.) FTOUT = FLOGT + FLOGP 01 12100 +C Program was not always outputing proper significant digits 01 12110 +C (TWB. 930212) 01 12120 + IF (ZERUNC .NE. 0 01 12130 + 2 .AND. ((CARD(30:30) .GE. 'A' .AND. CARD(30:30) .LE. 'Z') 01 12140 + 3 .OR. (CARD(40:40) .GE. 'A' .AND. CARD(40:40) .LE. 'Z') 01 12150 + 4 .OR. (CARD(30:31) .EQ. ' ' .AND. CARD(40:41) .EQ. ' '))) THEN 01 12160 +C PRINT ONLY TO FIRST DECIMAL PLACE 01 12170 + CALL CNVU2S(FTOUT, 0.3, AN(1), 8, DAN(1), 2) 01 12180 + DAN(1) = ' ' 01 12190 + IF(UNCERT.NE.' ') CALL UNCALP(DAN(1),UNCERT,1) 01 12200 + ELSE 01 12210 + CALL CNVU2S(FTOUT, DLFT, AN(1), 8, DAN(1), 2) 01 12220 + ENDIF 01 12230 +C 01 12240 +C blank out if number is all zero 01 12250 +C 01 12260 + CALL ZBLANK(AN(1)(1:8),DAN(1)) 01 12270 + CARD(42:49)=AN(1)(1:8) 01 12280 + CALL CENTER(CARD(42:49),8) 01 12290 + CARD(50:55)=' ' 01 12300 + CARD(50:51)=DAN(1)(1:2) 01 12310 + IF (AREAM .LE. 0.) CARD(50:51)='LE' 01 12320 +C 01 12330 +C-RE-ENTER HERE FOR B- AS WELL AS FOR EC/B+. 01 12340 +C 01 12350 +C Changed from check on pint to check if IB was output (TWB. 930212)01 12360 + IF (C8 .EQ. 'E' .AND. card(22:29) .EQ. ' ')GOTO 530 01 12370 +C 01 12380 +C-PUT AVERAGE B- OR B+ ENERGY ON SECOND E-CARD. 01 12390 +C 01 12400 +C Program was assuming fractional uncertainty but using absolute 01 12410 +C (TWB. 930212) 01 12420 + DEE = DEBAR/ebar 01 12430 +C 01 12440 +C-DON'T SHOW UNCERTAINTY IF LESS THAN 0.01%. 01 12450 +C-ROUND OFF AS IF UNCERTAINTY IS 0.1 KEV. 01 12460 +C Changed from 0.1% and rewrote algorithm (TWB. 930212) 01 12470 +C 01 12480 + If(dee .le. 0.0001)Then 01 12490 + Call cnvu2s(ebar,0.1,an(1),11,stb,1) 01 12500 + Else 01 12510 + CALL CNVU2S(EBAR, DEBAR, AN(1), 11,STB,-2) 01 12520 + Endif 01 12530 + IF (AN(1)(1:8) .NE. STARS) THEN 01 12540 + Call Addstr(card2,10,'EAV=') 01 12550 + Call Lbsup(an(1)(1:11)) 01 12560 + Call Addstr(card2,14,an(1)(1:Lenstr(an(1)))) 01 12570 + If(card2(14+Lenstr(an(1)):) .NE. ' ') 01 12580 + 2 Call Addstr(card2,14+Lenstr(an(1)),'$') 01 12590 + ENDIF 01 12600 + 530 WRITE(36, 9020) EK(INUMP), IE, FLOG, DLAREA 01 12610 + WRITE(36, 9021) IE, FLOGF, DLFT, IE, FT 01 12620 + IF (NPOS .NE. 0) WRITE(36, 9022) EBAR, DEBAR, EBARR 01 12630 +C 01 12640 +C Unless dit is the last parent card value, loop back to 300 01 12650 +C 01 12660 + IF(INUMP.LT.NUMP) GO TO 300 01 12670 +C 01 12680 + WRITE(36, 9023) CARDI, 'OLD CARD' 01 12690 + IF (ISKIP + ISKIP1 .NE. 0) THEN 01 12700 +C 01 12710 +C-IF THERE WAS AN ERROR, THEN PRINT AND PUNCH OLD CARD. 01 12720 +C 01 12730 + WRITE(36, 9024) 'OLD CARD KEPT' 01 12740 + WRITE(21, 9000) CARDI 01 12750 + crdcom='*****' 01 12760 + GOTO 100 01 12770 + ENDIF 01 12780 +C 01 12790 +C-IF NO ERRORS, THEN PRINT AND PUNCH TWO NEW CARDS. 01 12800 +C 01 12810 + WRITE(36, 9025) CARD, 'NEW CARD' 01 12820 + WRITE(21, 9000) CARD 01 12830 + CARD2(1:5)=CARD(1:5) 01 12840 + CARD2(6:6)='S' 01 12850 + CARD2(8:8)=C8 01 12860 + WRITE(36, 9025) CARD2, 'NEW CARD' 01 12870 + WRITE(21, 9000) CARD2 01 12880 + If(dowarn)Then 01 12890 + Write(6,FMT='(1X,A)')card 01 12900 + Write(6,FMT='(A)') 01 12910 + 2 ' ***** Allowed spectrum assumed for calcuations *****' 01 12920 + Write(36,FMT='(A)') 01 12930 + 2 ' ***** Allowed spectrum assumed for calcuations *****' 01 12940 + crdcom=card(1:5) 01 12950 + crdcom(7:7)='c' 01 12960 + crdcom(8:8)=c8 01 12970 + crdcom(10:)='LOGFT' 01 12980 + If(c8 .EQ. 'E')Then 01 12990 + If(card(22:29) .NE. ' ') 01 13000 + 2 Call Addstr(crdcom,Lenstr(crdcom)+1,',IB') 01 13010 + If(card(32:39) .NE. ' ') 01 13020 + 2 Call Addstr(crdcom,Lenstr(crdcom)+1,',IE') 01 13030 + EndIf 01 13040 + Call Addstr(crdcom,Lenstr(crdcom)+1,'$') 01 13050 + crdcom(Lenstr(crdcom)+1:)= 01 13060 + 2 'Allowed spectrum assumed for calcuations by ^LOGFT' 01 13070 + Write(21,9000)crdcom 01 13080 + EndIf 01 13090 + GO TO 100 01 13100 +C 01 13110 +C-CHECK OLD SECOND CARDS.(B OR E) 01 13120 +C ============ 01 13130 +C 01 13140 + 600 IF(C6.EQ.'S' .OR. C6.EQ.'2') THEN 01 13150 + IF(C79.EQ.' B' .OR. C79.EQ.' E') THEN 01 13160 + WRITE(36, 9002) CARD 01 13170 +C Change column 6 to "S" after writing the card instead of 01 13180 +C before (TWB. 930212) 01 13190 + CARD(6:6)='S' 01 13200 + IF (A .EQ. 0.) THEN 01 13210 + WRITE(36, 9004) 'A VALUE MISSING. OLD CARD KEPT' 01 13220 + crdcom='*****' 01 13230 + GOTO 900 01 13240 + ENDIF 01 13250 + IF (ISKIP + ISKIP1 .EQ. 0) THEN 01 13260 +C 01 13270 +C-IF A SECOND CARD WAS THERE, THEN PRINT IT ALSO FOR REFERENCE. 01 13280 +C 01 13290 + WRITE(36, 9004) 'CHECK OLD SECOND CARD' 01 13300 + WRITE(36, 9000) '0' 01 13310 + GOTO 100 01 13320 + ENDIF 01 13330 + ENDIF 01 13340 + Else 01 13350 +C Had to allow for evaluators using other than "2" or "S" 01 13360 +C (TWB. 930212) 01 13370 + If(c6 .NE. ' ' .AND. c79 .EQ. ' B')Then 01 13380 + If(Indexf(card,10,'EAV=') .GT. 0)Then 01 13390 + WRITE(36, 9002) CARD 01 13400 + CARD(6:6)='S' 01 13410 + IF (A .EQ. 0.) THEN 01 13420 + WRITE(36, 9004) 'A VALUE MISSING. OLD CARD KEPT' 01 13430 + crdcom='*****' 01 13440 + GOTO 900 01 13450 + ENDIF 01 13460 + IF (ISKIP + ISKIP1 .EQ. 0) THEN 01 13470 + WRITE(36, 9004) 'CHECK OLD SECOND CARD' 01 13480 + WRITE(36, 9000) '0' 01 13490 + GOTO 100 01 13500 + ENDIF 01 13510 + Endif 01 13520 + Endif 01 13530 + If(c6 .NE. ' ' .AND. c79 .EQ. ' E')Then 01 13540 + If(Indexf(card,10,'EAV=') .GT. 0 01 13550 + 2 .OR. Indexf(card,10,'CK=') .GT. 0 01 13560 + 3 .OR. Indexf(card,10,'CL=') .GT. 0 01 13570 + 4 .OR. Indexf(card,10,'CM+=') .GT. 0)Then 01 13580 + WRITE(36, 9002) CARD 01 13590 + CARD(6:6)='S' 01 13600 + IF (A .EQ. 0.) THEN 01 13610 + WRITE(36, 9004) 'A VALUE MISSING. OLD CARD KEPT' 01 13620 + crdcom='*****' 01 13630 + GOTO 900 01 13640 + ENDIF 01 13650 + IF (ISKIP + ISKIP1 .EQ. 0) THEN 01 13660 + WRITE(36, 9004) 'CHECK OLD SECOND CARD' 01 13670 + WRITE(36, 9000) '0' 01 13680 + GOTO 100 01 13690 + ENDIF 01 13700 + Endif 01 13710 + Endif 01 13720 + ENDIF 01 13730 +C 01 13740 +C-PRODUCE NEW DATA SET. 01 13750 +C 01 13760 + 900 If(dowarn .AND. crdcom.NE.'*****')Then 01 13770 + If(card .NE. crdcom)Write(21,9000)card 01 13780 + Else 01 13790 + WRITE(21, 9000) CARD 01 13800 + EndIf 01 13810 + GOTO 100 01 13820 +C 01 13830 +C-HERE ON END OF INPUT. 01 13840 +C 01 13850 + 1265 Continue 01 13860 + If(iskip .gt. 0)Then 01 13870 + Write(6,9002)'***** Data set will not be modified - '// 01 13880 + 2 'See LOGFT report' 01 13890 + Else 01 13900 + If(somskp)Write(6,9002)'***** Some records will not be '// 01 13910 + 2 'modified - See LOGFT report' 01 13920 + Endif 01 13930 + WRITE(36, 9000) '0 ALL PROBLEMS COMPLETED' 01 13940 +C+++MDC+++ 01 13950 +C...VAX 01 13960 +C/ CALL EXIT 01 13970 +C...DVF,UNX,ANS 01 13980 + STOP 01 13990 +C---MDC--- 01 14000 +C 01 14010 + END 01 14020 + REAL FUNCTION XF(X) 02 00010 +C 02 00020 +C Used to calculate the average B+- energies 02 00030 +C 02 00040 +C***************** SUBROUTINES AND FUNCTIONS CALLED ********************02 00050 +C* Present Code 02 00060 +C* ------------ 02 00070 +C* FNEW 02 00080 +C* 02 00090 +C***********************************************************************02 00100 + REAL X 02 00110 +C 02 00120 + REAL FNEW 02 00130 + EXTERNAL FNEW 02 00140 +C 02 00150 + REAL Y 02 00160 +C 02 00170 + Y=FNEW(X) 02 00180 + IF(X .NE. 0. .AND. Y .NE. 0.)THEN 02 00190 + XF=X*Y 02 00200 + ELSE 02 00210 + XF=0. 02 00220 + ENDIF 02 00230 + RETURN 02 00240 + END 02 00250 +C----- Integration Routines 03 00010 + SUBROUTINE QROMB(FUNC,A,B,SS) 03 00020 +C Returns as SS the integral of the function FUNC FROM A TO B. 03 00030 +C Integration is performed by Romberg's method of order 2K, 03 00040 +C where, e.g., K=2 is Simpson's Rule 03 00050 +C [Numerical Recipes (The Art of Scientific Computing). W.H. Press, 03 00060 +C et al. Cambridge University Press (NY, 1986), p.114] 03 00070 +C 03 00080 +C***************** SUBROUTINES AND FUNCTIONS CALLED ********************03 00090 +C* Present Code 03 00100 +C* ------------ 03 00110 +C* POLINT TRAPZD 03 00120 +C* 03 00130 +C* FORTRAN 77 Supplied 03 00140 +C* ------------------- 03 00150 +C* ABS 03 00160 +C* 03 00170 +C***********************************************************************03 00180 + REAL FUNC,A,B,SS 03 00190 + EXTERNAL FUNC 03 00200 +C 03 00210 + INTEGER JMAX,JMAXP,K,KM 03 00220 +C PARAMETER (JMAX=30,JMAXP=JMAX+1,K=3,KM=K-1) 03 00230 + PARAMETER (JMAX=20,JMAXP=JMAX+1,K=3,KM=K-1) 03 00240 +C 03 00250 + REAL EPS,DUM 03 00260 + COMMON/PREC1/EPS,DUM 03 00270 +C 03 00280 + REAL S(JMAXP),H(JMAXP),DSS 03 00290 + INTEGER J,JJ 03 00300 +C 03 00310 + REAL ABS,ALOG10 03 00320 + INTRINSIC ABS,ALOG10,DABS,DBLE,INT 03 00330 + Save +C 03 00340 + SS=0. 03 00350 + DSS=0. 03 00360 + H(1)=1. 03 00370 + DO 100 J=1,JMAX 03 00380 + JJ=J 03 00390 + CALL TRAPZD(FUNC,A,B,S(J),JJ) 03 00400 + + IF(J .GE. K)THEN 03 00410 + CALL POLINT(H(J-KM),S(J-KM),K,0.,SS,DSS) 03 00420 +C Add check for when integral is zero 03 00430 + IF(SS .EQ. 0. .AND. DSS .EQ. 0.)RETURN 03 00440 +C IF(ABS(DSS) .LE. EPS*ABS(SS))RETURN 03 00450 + IF(DABS(DBLE(DSS)/DBLE(SS)) .LE. EPS)RETURN 03 00460 + ENDIF 03 00470 + S(J+1)=S(J) 03 00480 + H(J+1)=0.25*H(J) 03 00490 +100 CONTINUE 03 00500 +C PAUSE 'TOO MANY STEPS --- QROMB' 03 00510 + END 03 00520 +C 04 00010 + SUBROUTINE TRAPZD(FUNC,A,B,S,N) 04 00020 +C Compute's the Nth stage of refinement of an extended trapoziodal rule04 00030 +C FUNC is input as the name of the function to be integrated between 04 00040 +C limits A and B, also input. S should not be modified between 04 00050 +C sequential calls. 04 00060 +C [Numerical Recipes (The Art of Scientific Computing). W.H. Press, 04 00070 +C et al. Cambridge University Press (NY, 1986), p.111] 04 00080 +C 04 00090 +C Changed to double precision where necessary to avoid convergence 04 00100 +C problems (TWB. 930212) 04 00110 +C 04 00120 +C***************** SUBROUTINES AND FUNCTIONS CALLED ********************04 00130 +C* Present Code 04 00140 +C* ------------ 04 00150 +C* FUNC* 04 00160 +C* 04 00170 +C* *Dummy routine 04 00180 +C* 04 00190 +C***********************************************************************04 00200 + INTEGER N 04 00210 + REAL FUNC,A,B,S 04 00220 + EXTERNAL FUNC 04 00230 +C 04 00240 + INTEGER IT,J 04 00250 + DOUBLE PRECISION TNM,DEL,SUM,X 04 00260 +C 04 00270 + REAL REAL 04 00280 + DOUBLE PRECISION DBLE 04 00290 + INTRINSIC DBLE,REAL 04 00300 + Save +C 04 00310 + IF(N .EQ. 1)THEN 04 00320 + S=0.5*(B-A)*(FUNC(A)+FUNC(B)) 04 00330 + IT=1 04 00340 + ELSE 04 00350 + TNM=DBLE(IT) 04 00360 + DEL=(DBLE(B)-DBLE(A))/TNM 04 00370 + X=A+0.5D+0*DEL 04 00380 + SUM=0.D+0 04 00390 + DO 100 J=1,IT 04 00400 + SUM=SUM+DBLE(FUNC(REAL(X))) 04 00410 + X=X+DEL 04 00420 +100 CONTINUE 04 00430 + S=0.5D+0*(S+(DBLE(B)-DBLE(A))*SUM/TNM) 04 00440 + IT=2*IT 04 00450 + ENDIF 04 00460 + RETURN 04 00470 + END 04 00480 + SUBROUTINE POLINT(XA,YA,N,X,Y,DY) 05 00010 +C Given arrays XA and YA, each of length N, and given a value X, THE 05 00020 +C value Y and an error estimate DY are returned 05 00030 +C [Numerical Recipes (The Art of Scientific Computing. W.H. Press, 05 00040 +C et al. Cambridge University Press (NY, 1986), p.82] 05 00050 +C 05 00060 + INTEGER N 05 00070 + REAL XA(N),YA(N),X,Y,DY 05 00080 +C 05 00090 + INTEGER NMAX 05 00100 + PARAMETER (NMAX=10) 05 00110 +C 05 00120 + INTEGER NS,I,M 05 00130 + REAL C(NMAX),D(NMAX),DIF,DIFT,HO,HP,DEN,W 05 00140 +C 05 00150 + REAL SCALE,MAXVAL,MINVAL 05 00160 + INTEGER TEST 05 00170 +C 05 00180 + REAL ABS,ALOG10,AMAX1,AMIN1 05 00190 + INTEGER INT 05 00200 + INTRINSIC ABS,ALOG10,AMAX1,AMIN1,INT 05 00210 + Save + 05 00220 +C 05 00230 + IF(N .LE. 1 .OR. N .GT. NMAX)THEN 05 00240 + DY=10000. 05 00250 + RETURN 05 00260 + ENDIF 05 00270 + NS=1 05 00280 + DIF=ABS(X-XA(1)) 05 00290 + MAXVAL=0. 05 00300 + MINVAL=0. 05 00310 + SCALE=1. 05 00320 + DO 100 I=1,N 05 00330 + DIFT=ABS(X-XA(I)) 05 00340 + IF(DIFT .LT. DIF)THEN 05 00350 + NS=I 05 00360 + DIF=DIFT 05 00370 + ENDIF 05 00380 + C(I)=YA(I) 05 00390 + D(I)=YA(I) 05 00400 + IF(YA(I) .NE. 0.)THEN 05 00410 + MAXVAL=AMAX1(MAXVAL,ALOG10(ABS(YA(I)))) 05 00420 + MINVAL=AMIN1(MINVAL,ALOG10(ABS(YA(I)))) 05 00430 + ENDIF 05 00440 +100 CONTINUE 05 00450 + Y=YA(NS) 05 00460 +C Try to keep the scale within reasonable limits 05 00470 + TEST=INT(MINVAL) 05 00480 + IF(TEST .LT. -5)SCALE=10.**(-TEST) 05 00490 + TEST=INT(MAXVAL) 05 00500 + IF(TEST .GT. 5)SCALE=SCALE*10.**(-TEST) 05 00510 + IF(SCALE .NE. 1.)THEN 05 00520 + Y=Y*SCALE 05 00530 + DO 120 I=1,N 05 00540 + C(I)=SCALE*C(I) 05 00550 + D(I)=SCALE*D(I) 05 00560 +120 CONTINUE 05 00570 + ENDIF 05 00580 + NS=NS-1 05 00590 + DO 200 M=1,N-1 05 00600 + DO 150 I=1,N-M 05 00610 + HO=XA(I)-X 05 00620 + HP=XA(I+M)-X 05 00630 + W=C(I+1)-D(I) 05 00640 + DEN=HO-HP 05 00650 + IF(DEN .EQ. 0.)THEN 05 00660 + DY=1000.*Y 05 00670 + IF(SCALE .NE. 1.)THEN 05 00680 + Y=Y/SCALE 05 00690 + DY=DY/SCALE 05 00700 + ENDIF 05 00710 + RETURN 05 00720 + ENDIF 05 00730 + DEN=W/DEN 05 00740 + D(I)=HP*DEN 05 00750 + C(I)=HO*DEN 05 00760 +150 CONTINUE 05 00770 + IF(2*NS .LT. N-M)THEN 05 00780 + DY=C(NS+1) 05 00790 + ELSE 05 00800 + DY=D(NS) 05 00810 + NS=NS-1 05 00820 + ENDIF 05 00830 + Y=Y+DY 05 00840 +200 CONTINUE 05 00850 + IF(SCALE .NE. 1)THEN 05 00860 + Y=Y/SCALE 05 00870 + DY=DY/SCALE 05 00880 + ENDIF 05 00890 + RETURN 05 00900 + END 05 00910 + SUBROUTINE SETUP(A, IZ, W0, IE) 06 00010 +C 06 00020 +C ASSOCIATED WITH FUNCTION F TO REDUCE THE NUMBER OF OPERATIONS IN F. 06 00030 +C SETUP MUST BE CALLED BEFORE F. 06 00040 +C 06 00050 + REAL A, W0 06 00060 + INTEGER IZ, IE 06 00070 +C 06 00080 + REAL APOW, BPOW, CALPHA, CM50A, CM50B, 06 00090 + 1 CM80A, CM80B, CM80C, COL2U, CON2U, CONLU, CONU, FRLOW, FRONT, 06 00100 + 2 G1, G1P1, G2, G2P1, G3, G3P1, R, TWOG, TWOG2, TWOG3, TWOR, V, 06 00110 + 3 W0X 06 00120 + COMPLEX BQ, BQU 06 00130 + INTEGER IEX, IFIN, IZX 06 00140 + COMMON /FCOM/ APOW, BPOW, BQ, BQU, CALPHA, CM50A, CM50B, CM80A, 06 00150 + 1 CM80B, CM80C, COL2U, CON2U, CONLU, CONU, FRLOW, FRONT, G1, 06 00160 + 2 G1P1, G2, G2P1, G3, G3P1, R, TWOG, TWOG2, 06 00170 + 3 TWOG3, TWOR, V, W0X, IEX, IFIN, IZX 06 00180 +C 06 00190 + REAL ALPHA, ATEMP, C, CALPHS, CM50, CM80, 06 00200 + 1 CUBRTA, GI, GR, GRSQ, PI, RSQ, RSQSQ, TAZR, TGM1, 06 00210 + 2 TWOPI, ZR, ZR2, ZR3 06 00220 + INTEGER IZTEMP 06 00230 +C 06 00240 + DATA ALPHA/7.2973E-3/ 06 00250 + DATA PI, TWOPI/3.14 159 265 359, 6.28 318 530 718/ 06 00260 + DATA ATEMP, IZTEMP/0., 0/ 06 00270 + Save +C 06 00280 + IZX = IZ 06 00290 + W0X = W0 06 00300 + IEX = IE 06 00310 +C 06 00320 + IF ((A .EQ. ATEMP) .AND. (IZ .EQ. IZTEMP)) GOTO 200 06 00330 +C-CALCULATE NUCLEAR RADIUS (UNLESS ALREADY DONE). 06 00340 + IF (A .EQ. ATEMP) GOTO 190 06 00350 + ATEMP = A 06 00360 + CUBRTA = ATEMP ** 0.33 333 333 333 06 00370 + R = 2.908E-3 * CUBRTA - 2.437E-3 / CUBRTA 06 00380 + RSQ = R * R 06 00390 + TWOR = R + R 06 00400 + 190 IF (IZ .EQ. IZTEMP) GOTO 240 06 00410 + IZTEMP = IZ 06 00420 + C = IZTEMP 06 00430 + C = ABS(C) 06 00440 +C-CALCULATE TERMS FOR SCREENING (UNLESS ALREADY DONE). 06 00450 + V = ((-9.45E-9 * C + 3.014E-6) * C + 1.881E-4) * C - 5.166E-4 06 00460 + IF (IZTEMP .LT. 0) GOTO 230 06 00470 + APOW = ((1.11E-7 * C - 1.01E-5) * C - 2.38E-3) * C + 0.10206 00480 + BPOW = ((-2.42E-8 * C + 3.83E-6) * C + 3.60E-5) * C-0.015606 00490 +C-FIRST WE COMPUTE THE PART OF THE INTEGRAND THAT IS CONSTANT 06 00500 +C-AND CAN BE PUT IN FRONT OF THE INTEGRAL SIGN. 06 00510 +C-1/2 R**2 GAMMASQ(2G + 1). 06 00520 + 230 CALPHA = C * ALPHA 06 00530 + CALPHS = CALPHA * CALPHA 06 00540 + G1 = SQRT(1. - CALPHS) 06 00550 + TWOG = G1 + G1 06 00560 + ZR = TWOG + 1. 06 00570 + G1P1 = G1 + 1. 06 00580 + TGM1 = TWOG - 1. 06 00590 + CALL GAMMA(ZR, 0., GR, GI) 06 00600 + GRSQ = GR * GR 06 00610 + BQ = CMPLX(ZR, 0.) 06 00620 + 240 FRONT = 0.5 / RSQ / GRSQ 06 00630 + IFIN = 0 06 00640 + IF (IZTEMP .GT. 0) GOTO 75 06 00650 +C-FOR NEGATRONS, SET UP CONSTANT FOR LOW-E APPROXIMATION. 06 00660 + TAZR = TWOR * CALPHA 06 00670 + FRLOW = TWOPI * TWOR * (TAZR ** TGM1) * G1P1 * 06 00680 + 1 (1. - TAZR * 3. / ZR) 06 00690 +C-FOR LARGE Z NEGATRONS, SET UP SCREENING CONSTANTS. 06 00700 + IF (IZTEMP .GE. -50) GOTO 75 06 00710 + CM50 = C - 50. 06 00720 + CM50A = -2.5E-3 * CM50 + 1. 06 00730 + CM50B = -4.0E-6 * CM50 * CM50 06 00740 + IFIN = -1 06 00750 + GOTO 200 06 00760 +C-LARGE Z POSITRON SCREENING CONSTANTS. 06 00770 + 75 IF (IZTEMP .LE. 80) GOTO 200 06 00780 + CM80 = C - 80. 06 00790 + CM80A = -1.7E-4 * CM80 06 00800 + CM80B = +6.3E-4 * CM80 06 00810 + CM80C = -8.8E-3 * CM80 06 00820 + IFIN = 1 06 00830 + 200 IF (IE .LT. 1) GOTO 99 06 00840 +C-SET UP FOR FIRST FORBIDDEN UNIQUE. 06 00850 + G2 = SQRT(4. - CALPHS) 06 00860 + TWOG2 = G2 + G2 06 00870 + ZR2 = TWOG2 + 1. 06 00880 + G2P1 = G2 + 1. 06 00890 + CALL GAMMA(ZR2, 0., GR, GI) 06 00900 + BQU = CMPLX(ZR2, 0.) 06 00910 + RSQSQ = RSQ * RSQ 06 00920 + CONU = 4.5 / RSQSQ / GR / GR 06 00930 + IF (IZTEMP .GT. 0) GOTO 250 06 00940 +C-SET UP CONSTANT FOR LOW-E NEGATRON FIRST FORBIDDEN DECAY. 06 00950 + CONLU = 72. * PI * CALPHA * (1. + G2P1) * 06 00960 + 1 (TAZR ** (ZR2 - 3.)) * (1. - 2.5 * TAZR / ZR2) / 06 00970 + 2 RSQ / GR / GR 06 00980 + 250 IF (IE .LE. 1) GOTO 99 06 00990 +C-SET UP FOR SECOND FORBIDDEN UNIQUE. 06 01000 + G3 = SQRT(9. - CALPHS) 06 01010 + TWOG3 = G3 + G3 06 01020 + ZR3 = TWOG3 + 1. 06 01030 + G3P1 = G3 + 1. 06 01040 + CALL GAMMA(ZR3, 0., GR, GI) 06 01050 + BQU = CMPLX(ZR3, 0.) 06 01060 + CONU = CONU * 3.33 333 333 333 06 01070 + CON2U = 112.5 / RSQSQ / GR / GR / RSQ 06 01080 + IF (IZTEMP .GT. 0) GOTO 99 06 01090 + CONLU = CONLU * 3.33 333 333 333 06 01100 + COL2U = 270. * PI * (TAZR ** (ZR3 - 3.)) * 06 01110 + 1 (G3P1 + 2.) * CALPHA * (1. - 2.33 333 333 * TAZR / 06 01120 + 2 ZR3) / RSQSQ / GR / GR 06 01130 + 99 RETURN 06 01140 + END 06 01150 + REAL FUNCTION F(W) 07 00010 +C 07 00020 +C Fermi function used in calculating B+- spectra and associated 07 00030 +C internal Bremsstrahlung. Modified to be more consistent with F77 07 00040 +C procedures 07 00050 +C 07 00060 +C***************** SUBROUTINES AND FUNCTIONS CALLED ********************07 00070 +C* Present Code 07 00080 +C* ------------ 07 00090 +C* GAMMA 07 00100 +C* NSDMTH 1(00) 07 00110 +C* ------------- 07 00120 +C* HYPERG 07 00130 +C* 07 00140 +C* FORTRAN 77 Supplied 07 00150 +C* ------------------- 07 00160 +C* CEXP CSQRT EXP SQRT 07 00170 +C* 07 00180 +C***********************************************************************07 00190 + REAL W 07 00200 +C 07 00210 + REAL APOW, BPOW, CALPHA, CM50A, CM50B, 07 00220 + 1 CM80A, CM80B, CM80C, COL2U, CON2U, CONLU, CONU, FRLOW, FRONT, 07 00230 + 2 G1, G1P1, G2, G2P1, G3, G3P1, R, TWOG, TWOG2, TWOG3, TWOR, V, 07 00240 + 3 W0 07 00250 + COMPLEX BQ, BQU 07 00260 + INTEGER IE, IFIN, IZ 07 00270 + COMMON /FCOM/ APOW, BPOW, BQ, BQU, CALPHA, CM50A, CM50B, CM80A, 07 00280 + 1 CM80B, CM80C, COL2U, CON2U, CONLU, CONU, FRLOW, FRONT, G1, 07 00290 + 2 G1P1, G2, G2P1, G3, G3P1, R, TWOG, TWOG2, 07 00300 + 3 TWOG3, TWOR, V, W0, IE, IFIN, IZ 07 00310 +C 07 00320 + REAL B, BA, F1U, F2U, 07 00330 + 1 GI, GR, P, PI, PSQ, TWORP, 07 00340 + 2 W0MW, W0MWSQ, X, XSQ, Y, YOW 07 00350 + COMPLEX AQ, B1C, B2C, F1C, G1C, G1Y, G2Y, HGF, HYPERG, QC, XQ 07 00360 +C 07 00370 + REAL EXP,SQRT 07 00380 + COMPLEX CEXP,CMPLX,CSQRT 07 00390 + INTRINSIC CEXP,CMPLX,CSQRT,EXP,SQRT 07 00400 +C 07 00410 + DATA PI/3.14 159 265 359/ 07 00420 + Save +C 07 00430 +C Neutrino energy is not screened, so calculate it first. 07 00440 + W0MW = W0 - W 07 00450 +C At BETA endpoint function is zero. 07 00460 + IF (W0MW .LE. 0.)THEN 07 00470 + F = 0. 07 00480 + RETURN 07 00490 + ENDIF 07 00500 + W0MWSQ = W0MW * W0MW 07 00510 +C For B-, we simply shift the energy down by V. 07 00520 + IF (IZ .LE. 0)THEN 07 00530 + X = W - V 07 00540 +C For low-E B-, we use a power series approximation. 07 00550 + IF (X .LE. 1.0001)THEN 07 00560 + F = FRLOW * X 07 00570 + GOTO 50 07 00580 + ENDIF 07 00590 + ELSE 07 00600 +C For very low-E B+, value is too small to contribute to integral. 07 00610 + IF (W .LT. 1.001)THEN 07 00620 + F=0. 07 00630 + RETURN 07 00640 + ENDIF 07 00650 +C B+ screening. 07 00660 + PSQ = W * W - 1. 07 00670 + P = SQRT(PSQ) 07 00680 + X = W + V * EXP(APOW / P + BPOW / PSQ) 07 00690 + ENDIF 07 00700 +C-CALCULATE SCREENED MOMENTUM. 07 00710 + XSQ = X * X 07 00720 + PSQ = XSQ - 1. 07 00730 + P = SQRT(PSQ) 07 00740 + Y = X * CALPHA / P 07 00750 +C The GAMMA function code we use is not recommended above 10. 07 00760 +C So go back to the low E approximation. 07 00770 + IF (Y .GT. 10.)THEN 07 00780 + IF (IZ .GT. 0)THEN 07 00790 + F=0. 07 00800 + RETURN 07 00810 + ENDIF 07 00820 + F=FRLOW*X 07 00830 + GOTO 50 07 00840 + ENDIF 07 00850 +C Y must have negative sign for positrons. 07 00860 + IF (IZ .GT. 0) Y = -Y 07 00870 +C Begin calculation of electron wave function. 07 00880 +C Call for complex gamma function. 07 00890 + CALL GAMMA(G1, Y, GR, GI) 07 00900 + BA = EXP(PI * Y) / P 07 00910 +C B is that portion of the integrand common to both F and G parts 07 00920 +C of the wave function. 07 00930 + TWORP = TWOR * P 07 00940 + B = (TWORP ** TWOG) * BA * (GR * GR + GI * GI) 07 00950 +C Call for Hypergeometric function. 07 00960 + XQ = CMPLX(0., TWORP) 07 00970 + AQ = CMPLX(G1P1, Y) 07 00980 + HGF = HYPERG(AQ, BQ, XQ) 07 00990 + YOW = Y / X 07 01000 + QC = CEXP(CMPLX(0., -P * R)) 07 01010 + G1Y = CMPLX(G1, Y) 07 01020 + B1C = QC * G1Y * HGF 07 01030 + F1C = B1C * CSQRT(CMPLX(-1., YOW) / G1Y) 07 01040 + G1C = B1C * CSQRT(CMPLX(1., YOW) / G1Y) 07 01050 + F = B * ((X - 1.) * AIMAG(F1C) * AIMAG(F1C) + 07 01060 + 1 (X + 1.) * REAL(G1C) * REAL(G1C)) 07 01070 + 50 F = F * W0MWSQ 07 01080 +C Correction for finite nuclear size effect. 07 01090 + IF (IFIN .LT. 0) F = F * (CM50A + X * CM50B) 07 01100 + IF (IFIN .GT. 0) F = F * (1. + CM80A*X + CM80B/X + CM80C/XSQ) 07 01110 + F = F * FRONT 07 01120 +C For allowed transitions we are finished here. 07 01130 + IF (IE .LT. 1)RETURN 07 01140 +C First forbidden unique. 07 01150 +C Check for low-E FFU BETA -. 07 01160 + IF ((X .LE. 1.0001) .OR. (Y .GT. 10.))THEN 07 01170 + F1U = CONLU * X 07 01180 + ELSE 07 01190 + CALL GAMMA(G2, Y, GR, GI) 07 01200 + B = (TWORP ** TWOG2) * BA * (GR * GR + GI * GI) 07 01210 + AQ = CMPLX(G2P1, Y) 07 01220 + HGF = HYPERG(AQ, BQU, XQ) 07 01230 + G2Y = CMPLX(G2, Y) 07 01240 + B2C = QC * G2Y * HGF 07 01250 + F1C = B2C * CSQRT(CMPLX(-2., YOW) / G2Y) 07 01260 + G1C = B2C * CSQRT(CMPLX(2., YOW) / G2Y) 07 01270 + F1U = CONU * B * ((X - 1.) * AIMAG(F1C) * AIMAG(F1C) + 07 01280 + 1 (X + 1.) * REAL(G1C) * REAL(G1C)) 07 01290 + ENDIF 07 01300 + F = W0MWSQ * (F + F1U) 07 01310 + IF (IE .LE. 1)RETURN 07 01320 +C Second forbidden unique. 07 01330 + IF ((X .LE. 1.0001) .OR. (Y .GT. 10.))THEN 07 01340 + F2U = COL2U * X 07 01350 + ELSE 07 01360 + CALL GAMMA(G3, Y, GR, GI) 07 01370 + B = (TWORP ** TWOG3) * BA * (GR * GR + GI * GI) 07 01380 + AQ = CMPLX(G3P1, Y) 07 01390 + HGF = HYPERG(AQ, BQU, XQ) 07 01400 + G2Y = CMPLX(G3, Y) 07 01410 + B2C = QC * G2Y * HGF 07 01420 + F1C = B2C * CSQRT(CMPLX(-3., YOW) / G2Y) 07 01430 + G1C = B2C * CSQRT(CMPLX(3., YOW) / G2Y) 07 01440 + F2U = CON2U * B * ((X - 1.) * AIMAG(F1C) * AIMAG(F1C) + 07 01450 + 1 (X + 1.) * REAL(G1C) * REAL(G1C)) 07 01460 + ENDIF 07 01470 + F = W0MWSQ * (F + F2U) 07 01480 + RETURN 07 01490 + END 07 01500 + SUBROUTINE GAMMA(XR, XI, ZR, ZI) 08 00010 + REAL XR, XI, ZR, ZI 08 00020 + COMPLEX X, Z, GAMA 08 00030 + X = CMPLX(XR, XI) 08 00040 + Z = GAMA(X) 08 00050 + ZR = REAL(Z) 08 00060 + ZI = AIMAG(Z) 08 00070 + RETURN 08 00080 + END 08 00090 + REAL FUNCTION CAPTUR 09 00010 + 1 (IZ, W0, IPRINT, ITYPE, FCK, FCL, FCMNO) 09 00020 +C 09 00030 + INTEGER IZ, IPRINT, ITYPE 09 00040 + REAL W0, FCK, FCL, FCMNO 09 00050 +C 09 00060 + REAL BKL(127), BL1L(128), BL2L(128), BL3L(128) 09 00070 + REAL WM1L(128), WM3L(128) 09 00080 +C 09 00090 + REAL BK, BL1, BL2, BL3 09 00100 +C REAL EKTOE, EKTOEU, ELTKU, ELTOEK, EMNOTL, EMNTLU 09 00110 + REAL ELTOT, ELTOTU 09 00120 + REAL FL2SQ 09 00130 + REAL GL1SQ, GL3R9 09 00140 + REAL PCAP, PCAPU, PKEX, PKU, PL1EX, PL1U, PL2, PL2U, 09 00150 + 1 PL3U, PM3, PMN, PMNU, PN3, PSIKSQ 09 00160 +C REAL R2TL1, R2TL1U, R3TL1U, 09 00170 + REAL RM3, RMNO, RN3 09 00180 + REAL WE, WEK, WEKSQ, WEL1, WEL1SQ, WEL2, WEL2SQ, 09 00190 + 1 WEL3, WEL3SQ, WEM3, WEM3SQ, WEMNO, WEMSQ, WEN3, WEN3SQ, 09 00200 + 2 WK, WL1, WL2, WL3 09 00210 + REAL Z 09 00220 +C 09 00230 + INTEGER IZEFF 09 00240 +C 09 00250 +C Corrections made for Z<4. Values taken from Appendix III of Table09 00260 +C of Isotopes, Seventh Edition. 880413 09 00270 + DATA BKL/ 0.014E-3,0.0246E-3,0.0000548,0.000112,0.000188, 09 00280 + 1 0.000284,0.0004, 09 00290 + 1 0.000532,0.00068, 09 00300 + 1 .0008669,.0010721,.0013050,.0015596,.0018389,.0021455,.0024720, 09 00310 + 1 .0028224,.0032029,.0036074,.0040381,.0044928,.0049664,.0054651, 09 00320 + 1 .0059892,.0065390,.0071120,.0077089,.0083328,.0089789,.0096586, 09 00330 + 1 .0103671,.0111031,.0118667,.0126578,.0134737,.0143256,.0151997, 09 00340 + 1 .0161046,.0170384,.0179976,.0189856,.0199995,.0210440,.0221172, 09 00350 + 1 .0232199,.0243503,.0255140,.0267112,.0279399,.0292001,.0304912, 09 00360 + 1 .0318138,.0331694,.0345614,.0359846,.0374406,.0389246,.0404430, 09 00370 + 1 .0419906,.0435689,.0451840,.0468342,.0485190,.0502391,.0519957, 09 00380 + 1 .0537885,.0556177,.0574855,.0593896,.0613323,.0633138,.0653508, 09 00390 + 1 .0674164,.0695250,.0716764,.0738708,.0761110,.0783948,.0807249, 09 00400 + 1 .0831023,.0855304,.0880045,.0905259,.0931050,.0957299,.098404 , 09 00410 + 1 .101137 ,.1039219,.1067553,.1096509,.1126014,.1156061,.118678 , 09 00420 + 1 .121818 ,.125027 ,.128220 ,.131590 ,.135960 ,.139490 ,.143090 , 09 00430 + 1.146780,.15054, 25 * .160/ 09 00440 +C Values added for Z=3 and 4 from same source. 880413 09 00450 + DATA BL1L/ 2 * 0.0,0.001E-3,0.003E-3,5 * 0., 09 00460 + 1 .000045 ,.0000633,.0000894,.0001177,.0001487,.0001893,.0002292, 09 00470 + 1 .0002702,.000320 ,.0003771,.0004378,.0005004,.0005637,.0006282, 09 00480 + 1 .0006946,.0007690,.0008461,.0009256,.0010081,.0010966,.0011936, 09 00490 + 1 .0012977,.0014143,.0015265,.0016539,.0017820,.0019210,.0020651, 09 00500 + 1 .0022163,.0023725,.0025316,.0026977,.0028655,.0030425,.0032240, 09 00510 + 1 .0034119,.0036043,.0038058,.0040180,.0042375,.0044647,.0046983, 09 00520 + 1 .0049392,.0051881,.0054528,.0057143,.0059888,.0062663,.0065488, 09 00530 + 1 .0068348,.0071260,.0074279,.0077368,.0080520,.0083756,.0087080, 09 00540 + 1 .0090458,.0093942,.0097513,.0101157,.0104864,.0108704,.0112707, 09 00550 + 1 .0116815,.0120998,.0125267,.0129680,.0134185,.0138799,.0143528, 09 00560 + 1 .0148393,.0153467,.0158608,.0163875,.0169393,.017493 ,.018049 , 09 00570 + 1 .018639 ,.0192367,.019840 ,.0204721,.0211046,.0217574,.0224268, 09 00580 + 1 .0230972,.0237729,.024460 ,.025275 ,.026110 ,.026900 ,.027700 , 09 00590 + 1 .028530 ,.029380 ,.030240 , 25 * 0.031/ 09 00600 + DATA BL2L/ 9 * 0., 09 00610 + 1 .0000183,.0000311,.0000514,.0000731,.0000992,.0001322,.0001648, 09 00620 + 1 .0002016,.0002473,.0002963,.0003500,.0004067,.0004615,.0005205, 09 00630 + 1 .0005837,.0006514,.0007211,.0007936,.0008719,.0009510,.0010428, 09 00640 + 1 .0011423,.0012478,.0013586,.0014762,.0015960,.0017272,.0018639, 09 00650 + 1 .0020068,.0021555,.0023067,.0024647,.0026251,.0027932,.0029669, 09 00660 + 1 .0031461,.0033303,.0035237,.0037270,.0039380,.0041561,.0043804, 09 00670 + 1 .0046120,.0048521,.0051037,.0053594,.0056236,.0058906,.0061642, 09 00680 + 1 .0064404,.0067215,.0070128,.0073118,.0076171,.0079303,.0082516, 09 00690 + 1 .0085806,.0089178,.0092643,.0096169,.0099782,.0103486,.0107394, 09 00700 + 1 .0111361,.0115440,.0119587,.0123850,.0128241,.0132726,.0137336, 09 00710 + 1 .0142087,.0146979,.0152000,.0157111,.0162443,.0167847,.0173371, 09 00720 + 1 .0179065,.0184843,.0190832,.0196932,.0203137,.0209476,.0216005, 09 00730 + 1 .0222662,.0229440,.023779 ,.024385 ,.025250 ,.026020 ,.026810 , 09 00740 + 1 .027610 ,.028440 ,.029280 , 25 * 0.030/ 09 00750 + DATA BL3L/ 9 * 0., 09 00760 + 1 .0000183,.0000311,.0000514,.0000731,.0000992,.0001322,.0001648, 09 00770 + 1 .0002000,.0002452,.0002936,.0003464,.0004022,.0004555,.0005129, 09 00780 + 1 .0005745,.0006403,.0007081,.0007786,.0008547,.0009311,.0010197, 09 00790 + 1 .0011154,.0012167,.0013231,.0014358,.0015499,.0016749,.0018044, 09 00800 + 1 .0019396,.0020800,.0022223,.0023705,.0025202,.0026769,.0028379, 09 00810 + 1 .0030038,.0031733,.0033511,.0035375,.0037301,.0039288,.0041322, 09 00820 + 1 .0043414,.0045571,.0047822,.0050119,.0052470,.0054827,.0057234, 09 00830 + 1 .0059643,.0062079,.0064593,.0067162,.0069769,.0072428,.0075140, 09 00840 + 1 .0077901,.0080711,.0083579,.0086480,.0089436,.0092441,.0095607, 09 00850 + 1 .0098811,.0102068,.0105353,.0108709,.0112152,.0115637,.0119187, 09 00860 + 1 .0122839,.0126575,.0130352,.0134186,.0138138,.0142135,.0146194, 09 00870 + 1 .0150312,.0154444,.0158710,.0163003,.0167331,.0171663,.0176100, 09 00880 + 1 .0180568,.0185041,.018930 ,.019452 ,.019930 ,.020410 ,.020900 , 09 00890 + 1 .021390 ,.021880 ,.022360 , 25 * 0.025/ 09 00900 + DATA WM1L/9*1.00, 09 00910 + 1 1.000000,1.000000,1.000000,1.000000,1.000000,0.999992,0.999980, 09 00920 + 1 0.999966,0.999950,0.999934,0.999914,0.999895,0.999882,0.999870, 09 00930 + 1 0.999855,0.999836,0.999818,0.999803,0.999781,0.999766,0.999734, 09 00940 + 1 0.999691,0.999648,0.999602,0.999547,0.999498,0.999436,0.999370, 09 00950 + 1 0.999300,0.999230,0.999158,0.999083,0.999013,0.998933,0.998855, 09 00960 + 1 0.998773,0.998689,0.998596,0.998493,0.998384,0.998270,0.998153, 09 00970 + 1 0.998031,0.997902,0.997759,0.997618,0.997470,0.997336,0.997193, 09 00980 + 1 0.997043,0.996917,0.996781,0.996629,0.996477,0.996319,0.996150, 09 00990 + 1 0.995995,0.995835,0.995682,0.995486,0.995307,0.995125,0.994910, 09 01000 + 1 0.994701,0.994482,0.994263,0.994034,0.993789,0.993550,0.993298, 09 01010 + 1 0.993030,0.992751,0.992464,0.992174,0.991880,0.991552,0.991229, 09 01020 + 1 0.990896,0.990564,0.990211,0.989859,0.989497,0.989143,0.988800, 09 01030 + 1 0.988390,0.988023,0.987695,0.987170,0.986783,0.986346,0.985900, 09 01040 + 1 0.985438,0.984980,0.984540,25*0.983/ 09 01050 + DATA WM3L/9*1.00, 09 01060 + 1 1.000000,1.000000,1.000000,1.000000,1.000000,1.000000,0.999997, 09 01070 + 1 0.999987,0.999976,0.999965,0.999950,0.999937,0.999932,0.999926, 09 01080 + 1 0.999917,0.999905,0.999894,0.999884,0.999867,0.999856,0.999831, 09 01090 + 1 0.999799,0.999764,0.999725,0.999683,0.999645,0.999582,0.999533, 09 01100 + 1 0.999473,0.999412,0.999353,0.999290,0.999232,0.999168,0.999099, 09 01110 + 1 0.999029,0.998960,0.998882,0.998794,0.998700,0.998602,0.998502, 09 01120 + 1 0.998398,0.998288,0.998166,0.998048,0.997921,0.997802,0.997680, 09 01130 + 1 0.997569,0.997461,0.997345,0.997222,0.997103,0.996978,0.996847, 09 01140 + 1 0.996721,0.996593,0.996454,0.996312,0.996184,0.996040,0.995876, 09 01150 + 1 0.995706,0.995536,0.995367,0.995191,0.995008,0.994823,0.994632, 09 01160 + 1 0.994428,0.994214,0.993999,0.993783,0.993538,0.993295,0.993076, 09 01170 + 1 0.992832,0.992580,0.992350,0.992082,0.991832,0.991578,0.991322, 09 01180 + 1 0.991083,0.990867,0.990613,0.990260,0.990002,0.989722,0.989438, 09 01190 + 1 0.989147,0.988869,0.988826,25*0.99/ 09 01200 + Save +C 09 01210 +C-TO CALCULATE THE ELECTRON CAPTURE CONTRIBUTION TO THE LOG FT. 09 01220 +C 09 01230 +C-CAPTUR MUST BE CALLED FOR ALLOWED CASE BEFORE CALLING FOR UNIQUE. 09 01240 +C 09 01250 +C-WE USE BINDING ENERGIES OF DAUGHTER, WAVE FUNCTIONS OF PARENT. 09 01260 +C 09 01270 + IZEFF = IZ + 1 09 01280 + WE = W0 - 2. 09 01290 + BK = BKL(IZ) 09 01300 + BL1 = BL1L(IZ) 09 01310 + BL2 = BL2L(IZ) 09 01320 + BL3 = BL3L(IZ) 09 01330 + WK = 1. - BK / 0.511 09 01340 + WL1 = 1. - BL1 / 0.511 09 01350 + WL2 = 1. - BL2 / 0.511 09 01360 + WL3 = 1. - BL3 / 0.511 09 01370 + WEK = WE + WK 09 01380 + WEKSQ = WEK * WEK 09 01390 + WEL1 = WE + WL1 09 01400 + WEL1SQ= WEL1 * WEL1 09 01410 + WEL2 = WE + WL2 09 01420 + WEL2SQ= WEL2 * WEL2 09 01430 + WEMNO = WE + WM1L(IZ) 09 01440 + WEMSQ = WEMNO * WEMNO 09 01450 +C 09 01460 +C-GET WAVE FUNCTIONS. 09 01470 +C 09 01480 + CALL WAVEFN(IZEFF, PSIKSQ, GL1SQ, FL2SQ, GL3R9, RMNO) 09 01490 +C 09 01500 +C-K-CAPTURE PORTION. 09 01510 +C 09 01520 +C-TEST IF ENOUGH ENERGY FOR K-CAPTURE. 09 01530 +C 09 01540 + PKEX = 0. 09 01550 + IF (WEK .GT. 0.) PKEX = WEKSQ * PSIKSQ 09 01560 +C 09 01570 +C-L-CAPTURE PORTION. 09 01580 +C 09 01590 + PL1EX = 0. 09 01600 + IF (WEL1 .GT. 0.) PL1EX = WEL1SQ * GL1SQ 09 01610 + PL2 = 0. 09 01620 + IF (WEL2 .GT. 0.) PL2 = WEL2SQ * FL2SQ 09 01630 +C 09 01640 + IF (WEMNO .LE. 0.) GOTO 500 09 01650 + PMN = WEMSQ * RMNO 09 01660 +C 09 01670 +C-BRANCH IF UNIQUE TRANSITION. 09 01680 +C 09 01690 + IF (ITYPE .NE. 0) GOTO 360 09 01700 +C 09 01710 +C-SUMMARIZE CAPTURE COMPONENTS. 09 01720 +C 09 01730 + ELTOT = PL1EX + PL2 09 01740 + PCAP = PKEX + ELTOT + PMN 09 01750 + CAPTUR = 1.5708 * PCAP 09 01760 + FCK = 1.5708 * PKEX 09 01770 + FCL = 1.5708 * ELTOT 09 01780 + FCMNO = 1.5708 * PMN 09 01790 +C 09 01800 +C-PRINTING (OPTIONAL). 09 01810 +C 09 01820 + IF (IPRINT .LE. 0) GOTO 99 09 01830 + IF (IPRINT .LT. 2) GOTO 285 09 01840 + WRITE(36, 6000) IZ, BK, BL1, BL2, BL3 09 01850 + 6000 FORMAT(' BINDING ENERGIES (DAUGHTER)', 09 01860 + 1 5X, 'Z=', I5, 10X, 'K', F8.4, 10X, 'L1', F8.4, 10X, 09 01870 + 2 'L2', F8.4, 10X, 'L3', F8.4) 09 01880 + WRITE(36, 6010) IZEFF, PSIKSQ, GL1SQ, FL2SQ, GL3R9 09 01890 + 6010 FORMAT(' WAVE FUNCTIONS, PARENT. Z=', I4, 8X, 'K', 09 01900 + 1 E10.2, 8X, 'L1', E10.2, 8X, 'L2', E10.2, 8X, 09 01910 + 2 '9*L3/R*R', E10.2) 09 01920 + 285 IF (PKEX .GT. 0.) GOTO 320 09 01930 + WRITE(36, 6020) 09 01940 + 6020 FORMAT(20X, 'ENERGY TOO LOW FOR K-CAPTURE') 09 01950 + IF (PL1EX .GT. 0.) GOTO 330 09 01960 + WRITE(36, 6030) 09 01970 + 6030 FORMAT(20X, 'ENERGY TOO LOW FOR L1 CAPTURE') 09 01980 + IF (PL2 .GT. 0.) GOTO 340 09 01990 + WRITE(36, 6040) 09 02000 + 6040 FORMAT(20X, 'ENERGY TOO LOW FOR L2 CAPTURE') 09 02010 + GOTO 99 09 02020 +C 09 02030 + 320 CONTINUE 09 02040 +C EKTOE = PKEX / PCAP 09 02050 +C ELTOEK = ELTOT / PKEX 09 02060 +C WRITE(36, 6050) EKTOE, ELTOEK 09 02070 +C6050 FORMAT(20X, 'K-CAPTURE TO TOTAL CAPTURE RATIO = ', F7.5, 09 02080 +C 1 10X, ' L/K CAPTURE RATIO', F10.4) 09 02090 +C 09 02100 + 330 CONTINUE 09 02110 +C R2TL1 = PL2 / PL1EX 09 02120 +C WRITE(36, 6060) R2TL1 09 02130 +C6060 FORMAT(20X, 'L2/L1 CAPTURE RATIO = ', E10.3) 09 02140 +C 09 02150 + 340 CONTINUE 09 02160 +C EMNOTL = PMN / ELTOT 09 02170 +C WRITE(36, 6070) EMNOTL 09 02180 +C6070 FORMAT(20X, 'MNO-CAPTURE RATIO TO L-CAPTURE RATIO = ', E10.3) 09 02190 + GOTO 99 09 02200 +C 09 02210 +C-FIRST FORBIDDEN UNIQUE CAPTURE. 09 02220 +C 09 02230 + 360 PKU = PKEX * WEKSQ 09 02240 + PL1U = PL1EX * WEL1SQ 09 02250 + PL2U = PL2 * WEL2SQ 09 02260 +C 09 02270 +C-L3 TERM. 09 02280 +C 09 02290 + WEL3 = WE + WL3 09 02300 + WEL3SQ = WEL3 * WEL3 09 02310 + PL3U = 0. 09 02320 + IF (WEL3 .GT. 0.) PL3U = WEL3SQ * GL3R9 09 02330 +C 09 02340 +C-MNO CAPTURE. 09 02350 +C 09 02360 + PMNU = PMN * WEMSQ 09 02370 + PM3 = 0. 09 02380 + PN3 = 0. 09 02390 + IF (IZ .LT. 18) GOTO 394 09 02400 + WEM3 = WE + WM3L(IZ) 09 02410 + WEM3SQ = WEM3 * WEM3 09 02420 + Z = IZ 09 02430 + RM3 = 4.3E-2 + Z * (4.198E-3 - Z * 1.6E-5) 09 02440 + PM3 = WEM3SQ * GL3R9 * RM3 09 02450 + IF (IZ .LT. 36) GOTO 394 09 02460 + RN3 = -5.27E-3 + Z * (2.352E-3 - Z * 9.85E-6) 09 02470 + WEN3 = WE + 1. 09 02480 + WEN3SQ = WEN3 * WEN3 09 02490 + PN3 = WEN3SQ * GL3R9 * RN3 09 02500 + 394 IF (ITYPE .EQ. 1) GOTO 395 09 02510 +C 09 02520 +C-SECOND FORBIDDEN UNIQUE. 09 02530 +C 09 02540 + PKU = PKU * WEKSQ 09 02550 + PL1U = PL1U * WEL1SQ 09 02560 + PL2U = PL2U * WEL2SQ 09 02570 + PMNU = PMNU * WEMSQ 09 02580 + PL3U = PL3U * WEL3SQ * 3.33 333 333 09 02590 + PM3 = PM3 * WEM3SQ * 3.33 333 333 09 02600 + PN3 = PN3 * WEN3SQ * 3.33 333 333 09 02610 +C 09 02620 +C-SUMMARIZE UNIQUE CAPTURE. 09 02630 +C 09 02640 + 395 ELTOTU = PL1U + PL2U + PL3U 09 02650 + PMNU = PMNU + PM3 + PN3 09 02660 + PCAPU = PKU + ELTOTU + PMNU 09 02670 + CAPTUR = 1.5708 * PCAPU 09 02680 + FCK = 1.5708 * PKU 09 02690 + FCL = 1.5708 * ELTOTU 09 02700 + FCMNO = 1.5708 * PMNU 09 02710 +C 09 02720 +C-PRINTING (OPTIONAL). 09 02730 +C 09 02740 + IF (IPRINT .LE. 0) GOTO 99 09 02750 + IF (PKEX .GT. 0.) GOTO 430 09 02760 + IF (PL3U .GT. 0.) GOTO 440 09 02770 + WRITE(36, 6080) 09 02780 + 6080 FORMAT(20X, 'ENERGY TOO LOW FOR L3 CAPTURE ') 09 02790 + GOTO 460 09 02800 +C 09 02810 + 430 CONTINUE 09 02820 +C EKTOEU = PKU / PCAPU 09 02830 +C ELTKU = ELTOTU / PKU 09 02840 +C WRITE(36, 6050) EKTOEU, ELTKU 09 02850 + 440 IF (PL1U .LE. 0.) GOTO 460 09 02860 +C R2TL1U = PL2U / PL1U 09 02870 +C WRITE(36, 6060) R2TL1U 09 02880 +C R3TL1U = PL3U / PL1U 09 02890 +C WRITE(36, 6090) R3TL1U 09 02900 +C6090 FORMAT(20X, 'L3/L1 CAPTURE RATIO = ', E10.3) 09 02910 + 460 CONTINUE 09 02920 +C EMNTLU = PMNU / ELTOTU 09 02930 +C WRITE(36, 6070) EMNTLU 09 02940 + GOTO 99 09 02950 +C 09 02960 + 500 WRITE(36, 7000) 09 02970 + 7000 FORMAT(' ENERGY TOO LOW FOR THIS PROGRAM') 09 02980 + CAPTUR = 0. 09 02990 + FCK = 0. 09 03000 + FCL = 0. 09 03010 + FCMNO = 0. 09 03020 +C 09 03030 + 99 RETURN 09 03040 + END 09 03050 + BLOCK DATA 10 00010 +C 10 00020 + REAL GKL(130) 10 00030 + REAL GLUL(130) 10 00040 + REAL FLUL(130) 10 00050 + REAL GL3L(130) 10 00060 + REAL RL(130) 10 00070 +C 10 00080 + COMMON /WAVCOM/ GKL, GLUL, FLUL, GL3L, RL 10 00090 +C 10 00100 + DATA GKL, GLUL, FLUL, GL3L, RL/650 * 0.0/ 10 00110 +C 10 00120 + END 10 00130 + SUBROUTINE READWV 11 00010 +C 11 00020 +C READS WAVE FUNCTION DATA FOR USE BY WAVEFN. 11 00030 +C 11 00040 + REAL GKL(130), GK 11 00050 + REAL GLUL(130), GL1 11 00060 + REAL FLUL(130), FL2 11 00070 + REAL GL3L(130), GL3 11 00080 + REAL RL(130), RMNO 11 00090 +C 11 00100 + COMMON /WAVCOM/ GKL, GLUL, FLUL, GL3L, RL 11 00110 +C 11 00120 + INTEGER IZ 11 00130 +C 11 00140 +C Radial wave functions for Z<5 added to LOGFT.DAT as per JKT's 11 00150 +C phone talks with MJM 890413 11 00160 +C It is not clear whether GK's include or GL1/GK=0.031 for Z=4 inc11 00170 +C exchange corrections 11 00180 + Save +C 11 00190 + 1 READ(20, 100) IZ, GK, GL1, FL2, GL3, RMNO 11 00200 + 100 FORMAT(I3, 7X, 5F10.0) 11 00210 +C 11 00220 + IF (IZ .LE. 0) RETURN 11 00230 + GKL(IZ) = GK 11 00240 + GLUL(IZ) = GL1 11 00250 + FLUL(IZ) = FL2 11 00260 + GL3L(IZ) = GL3 11 00270 + RL(IZ) = RMNO 11 00280 + GOTO 1 11 00290 +C 11 00300 + END 11 00310 + SUBROUTINE WAVEFN(IZ, GK, GLU, FLU, GL3, RMNO) 12 00010 +C 12 00020 +C RETURNS WAVE FUNCTION DATA VALUES. 12 00030 +C 12 00040 + REAL GKL(130), GK 12 00050 + REAL GLUL(130), GLU 12 00060 + REAL FLUL(130), FLU 12 00070 + REAL GL3L(130), GL3 12 00080 + REAL RL(130), RMNO 12 00090 + REAL DG, DL, DF, DGL, DR 12 00100 +C 12 00110 + COMMON /WAVCOM/ GKL, GLUL, FLUL, GL3L, RL 12 00120 +C 12 00130 + INTEGER I, IZ, IM1, IP1, IN, INM1 12 00140 + Save +C 12 00150 +C-INITIALIZATION. 12 00160 +C 12 00170 + 10 GK = GKL(IZ) 12 00180 + GLU = GLUL(IZ) 12 00190 + FLU = FLUL(IZ) 12 00200 + GL3 = GL3L(IZ) 12 00210 + RMNO = RL(IZ) 12 00220 +C 12 00230 +C-EXTRAPOLATION FOR MISSING DATA. 12 00240 +C 12 00250 + IF (GK .NE. 0.) RETURN 12 00260 +C 12 00270 +C-FIND NEAREST LIBRARY VALUES. 12 00280 +C 12 00290 + I = IZ 12 00300 + 20 I = I - 1 12 00310 + IF (GKL(I) .EQ. 0.) GOTO 20 12 00320 + IM1 = I - 1 12 00330 + DG = GKL(I) - GKL(IM1) 12 00340 + DL = GLUL(I) - GLUL(I - 1) 12 00350 + DF = FLUL(I) - FLUL(IM1) 12 00360 + DGL = GL3L(I) - GL3L(IM1) 12 00370 + DR = RL(I) - RL(IM1) 12 00380 + IP1 = I + 1 12 00390 + DO 30 IN = IP1, IZ 12 00400 + INM1 = IN - 1 12 00410 + GKL(IN) = GKL(INM1) + DG 12 00420 + GLUL(IN) = GLUL(INM1) + DL 12 00430 + FLUL(IN) = FLUL(INM1) + DF 12 00440 + GL3L(IN) = GL3L(INM1) + DGL 12 00450 + RL(IN) = RL(INM1) + DR 12 00460 + 30 CONTINUE 12 00470 + GOTO 10 12 00480 + END 12 00490 + INTEGER FUNCTION IPREC(STR) 13 00010 +C 13 00020 +C Corrected subroutine to account for floating point notation 13 00030 +C (TWB. 921216) 13 00040 +C Improved algorithms for calculating precision (TWB. 930212) 13 00050 +C 13 00060 + CHARACTER*(*) STR 13 00070 +C 13 00080 + INTEGER I,IEND,IPER 13 00090 + CHARACTER*10 LOCAL 13 00100 +C 13 00110 + INTEGER INDEXF,LENSTR 13 00120 + EXTERNAL INDEXF,LENSTR 13 00130 + INTEGER INDEX 13 00140 + INTRINSIC INDEX 13 00150 +C 13 00160 + LOCAL=STR 13 00170 + CALL SQZSTR(LOCAL, ' ') 13 00180 + IPER = INDEX(LOCAL, '.') 13 00190 + IF (IPER .GT. 0)THEN 13 00200 + IEND=INDEXF(LOCAL,IPER,'E')-1 13 00210 + IF(IEND .LE. 0)IEND=LENSTR(LOCAL) 13 00220 + IPREC = IEND - IPER 13 00230 + IF(IPER .GT. 2)THEN 13 00240 + IPREC=IPREC+IPER-1 13 00250 + ELSE 13 00260 + IF(IPER .EQ. 2)THEN 13 00270 + IF(LOCAL(1:1) .NE. '0')THEN 13 00280 + IPREC=IPREC+1 13 00290 + ELSE 13 00300 + DO 100 I=IPER+1,IEND 13 00310 + IF(LOCAL(I:I) .NE. '0')GOTO 200 13 00320 + IPREC=IPREC-1 13 00330 +100 CONTINUE 13 00340 +200 CONTINUE 13 00350 + ENDIF 13 00360 + ENDIF 13 00370 + ENDIF 13 00380 + ELSE 13 00390 + IEND=INDEX(LOCAL,'E') 13 00400 + IF(IEND .LE. 0)THEN 13 00410 + IPREC=LENSTR(LOCAL) 13 00420 + ELSE 13 00430 + IPREC=IEND-1 13 00440 + ENDIF 13 00450 + ENDIF 13 00460 + RETURN 13 00470 + END 13 00480 + SUBROUTINE UNCALP(DX,UNCERT,IFIELD) 14 00010 +C 14 00020 +C If UNCERT is the given non-numeric uncertainty then decide 14 00030 +C what the correct non-numeric uncertainty for the field IFIELD 14 00040 +C is. And Returns the uncertainty in DX. 14 00050 +C IFIELD=1 OUTPUTFIELD LOGFT 14 00060 +C 4 IB 14 00070 +C 5 IE 14 00080 +C 14 00090 + INTEGER IFIELD 14 00100 + CHARACTER*2 UNCERT 14 00110 + CHARACTER*2 DX 14 00120 +C 14 00130 + IF(UNCERT.EQ.'AP' .OR. UNCERT.EQ.'CA' .OR. UNCERT.EQ.'SY') THEN 14 00140 + DX=UNCERT 14 00150 + RETURN 14 00160 + ENDIF 14 00170 +C 14 00180 +C IFIELD=1 LOGFT 14 00190 +C 14 00200 + IF(IFIELD.EQ.1) THEN 14 00210 + IF(UNCERT(1:1).EQ.'L') THEN 14 00220 + DX='G'//UNCERT(2:2) 14 00230 + ELSE 14 00240 + DX='L'//UNCERT(2:2) 14 00250 + ENDIF 14 00260 + RETURN 14 00270 + ENDIF 14 00280 +C 14 00290 +C IFIELD=4 OR 5 IB OR IE 14 00300 +C 14 00310 + IF(IFIELD.EQ.4 .OR. IFIELD.EQ.5) THEN 14 00320 + DX=UNCERT 14 00330 + RETURN 14 00340 + ENDIF 14 00350 + RETURN 14 00360 + END 14 00370 + SUBROUTINE CENTER(STR,IFIELD) 15 00010 +C 15 00020 +C Take STR and center its characters in STR(1:IFIELD) 15 00030 +C 15 00040 + CHARACTER*(*) STR 15 00050 + INTEGER IFIELD 15 00060 +C 15 00070 + INTEGER I,LAST 15 00080 +C 15 00090 + INTEGER LENSTR 15 00100 + EXTERNAL LENSTR 15 00110 +C 15 00120 + CALL LBSUP(STR) 15 00130 + LAST=LENSTR(STR) 15 00140 + IF(LAST.GE.IFIELD) RETURN 15 00150 + I=IFIELD - (IFIELD-LAST)/2 15 00160 + CALL PADLFT(STR,I) 15 00170 + RETURN 15 00180 + END 15 00190 + REAL FUNCTION FNEW(X) 16 00010 +C 16 00020 +C Short form of the Fermi function used for B+- and associated IB. 16 00030 +C This function attempts to obtain the Fermi function by polynomial 16 00040 +C interpolation. If the interpolation is not successful, the value 16 00050 +C is obtained from FUNCTION F and stored in FSAV for later 16 00060 +C interpolations. The parameter N should be reset to 1 with 16 00070 +C each call to SETUP. 16 00080 +C 16 00090 +C***************** SUBROUTINES AND FUNCTIONS CALLED ********************16 00100 +C* Present Code 16 00110 +C* ------------ 16 00120 +C* F LOCATE POLINT 16 00130 +C* 16 00140 +C* FORTRAN 77 Supplied 16 00150 +C* ------------------- 16 00160 +C* ABS 16 00170 +C* 16 00180 +C***********************************************************************16 00190 + REAL X 16 00200 +C 16 00210 + INTEGER NSAV,NSET,NSTEPM,NTEST 16 00220 +C PARAMETER (NSAV=200,NSET=3,NSTEPM=6) 16 00230 + PARAMETER (NSAV=200,NSET=3,NSTEPM=6,NTEST=NSAV/10) 16 00240 +C 16 00250 + REAL F 16 00260 + EXTERNAL F 16 00270 + REAL ABS,ALOG10 16 00280 + DOUBLE PRECISION DABS,DBLE 16 00290 + INTRINSIC ABS,ALOG10,DABS,DBLE 16 00300 +C 16 00310 + REAL DUM,EPREC 16 00320 + COMMON/PREC1/DUM,EPREC 16 00330 +C 16 00340 + INTEGER N 16 00350 + COMMON /FCOMM/N 16 00360 +C 16 00370 + INTEGER I,J,JJ,LOWER,NSTEP,THPCK 16 00380 + REAL DY,TEMP1,TEMP2,Y,ESAV(NSAV),FSAV(NSAV) 16 00390 +C 16 00400 + LOGICAL ISLOW,ISHIG 16 00410 + REAL LOWZER,HGHZER 16 00420 + Save +C 16 00430 + IF(N .EQ. 1)THEN 16 00440 + ISLOW=.FALSE. 16 00450 + ISHIG=.FALSE. 16 00460 + ELSE 16 00470 + IF(ISLOW)THEN 16 00480 + IF(X .LE. LOWZER)THEN 16 00490 + FNEW=0. 16 00500 + RETURN 16 00510 + ENDIF 16 00520 + ENDIF 16 00530 + IF(ISHIG)THEN 16 00540 + IF(X .GE. HGHZER)THEN 16 00550 + FNEW=0. 16 00560 + RETURN 16 00570 + ENDIF 16 00580 + ENDIF 16 00590 + ENDIF 16 00600 + IF(N .GE. NSET .AND. X .LE. ESAV(N-1))THEN 16 00610 + CALL LOCATE(ESAV,N-1,X,LOWER) 16 00620 +C Changed comparison to double precision (TWB. 930112) 16 00630 + IF(LOWER .EQ. 0 .AND. ABS(ALOG10(X)-ALOG10(ESAV(1))) .LE. 1.)16 00640 + 2 THEN 16 00650 + IF(DABS(DBLE(X)/DBLE(ESAV(1))-1.D+0) .LT. DBLE(EPREC))THEN16 00660 + FNEW=FSAV(1) 16 00670 + RETURN 16 00680 + ENDIF 16 00690 + ENDIF 16 00700 +C Rewrote comparisons in double precision and tightened up 16 00710 +C the tests - picking wrong value sometimes (TWB. 930112) 16 00720 + IF(LOWER .NE. 0)THEN 16 00730 + IF(DABS(DBLE(X)-DBLE(ESAV(LOWER))) .LE. 16 00740 + 2 DABS(DBLE(X)-DBLE(ESAV(LOWER+1))))THEN 16 00750 + THPCK=LOWER 16 00760 + ELSE 16 00770 + THPCK=LOWER+1 16 00780 + ENDIF 16 00790 + IF(DABS(DBLE(X)/DBLE(ESAV(THPCK))-1.D+0) 16 00800 + 2 .LT. DBLE(EPREC))THEN 16 00810 + FNEW=FSAV(THPCK) 16 00820 + RETURN 16 00830 + ENDIF 16 00840 + NSTEP=MIN0(N-1,NSTEPM) 16 00850 + IF(LOWER .GT. N-1-NSTEP)THEN 16 00860 + LOWER=N-1-NSTEP 16 00870 + ELSE 16 00880 + LOWER=LOWER-NSTEP/2 16 00890 + ENDIF 16 00900 + IF(LOWER .GE. 1)THEN 16 00910 + NSTEP=MIN0(N-1-LOWER,NSTEPM) 16 00920 + CALL POLINT(ESAV(LOWER),FSAV(LOWER),NSTEP,X,Y,DY) 16 00930 +C Changed check on precision to double precision - 16 00940 +C convergence problems (TWB. 930212) 16 00950 + IF(Y .NE. 0.)THEN 16 00960 + IF(DABS(DBLE(DY)/DBLE(Y)) .LE. EPREC)THEN 16 00970 + FNEW=Y 16 00980 + RETURN 16 00990 + ENDIF 16 01000 + ENDIF 16 01010 + ENDIF 16 01020 + ENDIF 16 01030 + ENDIF 16 01040 + FNEW=F(X) 16 01050 + IF(N .GT. NTEST)THEN 16 01060 + IF(FSAV(2) .EQ. 0.)THEN 16 01070 + DO 300 I=(N-1)/2,2,-1 16 01080 + IF(FSAV(I) .EQ. 0. .AND. I .GT. 1)THEN 16 01090 + ISLOW=.TRUE. 16 01100 + LOWZER=ESAV(I) 16 01110 + GOTO 310 16 01120 + ENDIF 16 01130 +300 CONTINUE 16 01140 +310 CONTINUE 16 01150 + JJ=1 16 01160 + DO 320 J=I,N-1 16 01170 + ESAV(JJ)=ESAV(J) 16 01180 + FSAV(JJ)=FSAV(J) 16 01190 + JJ=JJ+1 16 01200 +320 CONTINUE 16 01210 + N=JJ 16 01220 + ENDIF 16 01230 + IF(FSAV(N-2) .EQ. 0.)THEN 16 01240 + DO 400 I=(N-1)/2,N-2 16 01250 + IF(FSAV(I) .EQ. 0. .AND. I .LT. N-1)THEN 16 01260 + ISHIG=.TRUE. 16 01270 + HGHZER=ESAV(I) 16 01280 + GOTO 410 16 01290 + ENDIF 16 01300 +400 CONTINUE 16 01310 +410 CONTINUE 16 01320 + N=I+1 16 01330 + ENDIF 16 01340 + ENDIF 16 01350 + IF(N .GT. NSAV)RETURN 16 01360 + ESAV(N)=X 16 01370 + FSAV(N)=FNEW 16 01380 + IF(N .GT. 1)THEN 16 01390 + DO 200 I=1,N-1 16 01400 + DO 100 J=I+1,N 16 01410 + IF(ESAV(I) .GT. ESAV(J))THEN 16 01420 + TEMP1=ESAV(J) 16 01430 + TEMP2=FSAV(J) 16 01440 + ESAV(J)=ESAV(I) 16 01450 + FSAV(J)=FSAV(I) 16 01460 + ESAV(I)=TEMP1 16 01470 + FSAV(I)=TEMP2 16 01480 + ENDIF 16 01490 +100 CONTINUE 16 01500 +200 CONTINUE 16 01510 + ENDIF 16 01520 + N=N+1 16 01530 + RETURN 16 01540 + END 16 01550 + SUBROUTINE LOCATE(XX,N,X,J) 17 00010 +C 17 00020 +C Given an array XX of length N, and a given value X, returns a value J17 00030 +C such that X is between XX(J) and XX(J+1). XX must be monotonic, 17 00040 +C either increasing or decreasing. J=0 or J=N is returned to indicat17 00050 +C that X is out of the range. 17 00060 +C [Numerical Recipes (The Art of Scientific Computing. W.H. Press, 17 00070 +C et al. Cambridge University Press (NY, 1986), p.90] 17 00080 +C 17 00090 + INTEGER N,J 17 00100 + REAL XX(N),X 17 00110 +C 17 00120 + INTEGER JL,JU,JM 17 00130 +C 17 00140 + JL=0 17 00150 + JU=N+1 17 00160 +10 IF(JU-JL .GT. 1)THEN 17 00170 + JM=(JU+JL)/2 17 00180 + IF((XX(N) .GT. XX(1)) .EQV. (X .GT. XX(JM)))THEN 17 00190 + JL=JM 17 00200 + ELSE 17 00210 + JU=JM 17 00220 + ENDIF 17 00230 + GOTO 10 17 00240 + ENDIF 17 00250 + J=JL 17 00260 + RETURN 17 00270 + END 17 00280 + SUBROUTINE ZBLANK(X,DX) 18 00010 +C 18 00020 +C if x is zero then x and dx are set to blank 18 00030 +C 18 00040 + CHARACTER *(*) X,DX 18 00050 +C 18 00060 + INTEGER I,J 18 00070 +C 18 00080 + INTEGER LENSTR 18 00090 + EXTERNAL LENSTR 18 00100 +C 18 00110 + J=LENSTR(X) 18 00120 + DO 100 I=1,J 18 00130 + IF(X(I:I).NE.'.' .AND. X(I:I).NE.' ' .AND. 18 00140 + 1 X(I:I).NE.'0') RETURN 18 00150 + 100 CONTINUE 18 00160 + X=' ' 18 00170 + DX=' ' 18 00180 + RETURN 18 00190 + END 18 00200 + SUBROUTINE PROCE 19 00010 +C 19 00020 +C process E card 19 00030 +C 19 00040 + COMMON /CARDIM/CARD,CARD2,STARS 19 00050 + CHARACTER*80 CARD 19 00060 + CHARACTER*80 CARD2 19 00070 + CHARACTER* 8 STARS 19 00080 +C 19 00090 + COMMON /ENUMS/IZ,JPREC,PERC,DPERC,PINT,DPINT,EINT,DEINT, 19 00100 + 1 IBONLY,ZERUNC,EK,NUMP 19 00110 + INTEGER IZ, JPREC,IBONLY ,ZERUNC,NUMP 19 00120 + REAL DPERC, DPINT,DEINT 19 00130 + REAL PERC, PINT, EINT 19 00140 + REAL EK(5) 19 00150 +C 19 00160 + COMMON /ECHARS/ TYPE,ATI,DATI,UNCERT 19 00170 + CHARACTER* 2 TYPE 19 00180 + CHARACTER ATI*10, DATI*2 19 00190 + CHARACTER*2 UNCERT 19 00200 +C 19 00210 + INTEGER J2PREC 19 00220 + CHARACTER*10 STA 19 00230 + CHARACTER* 2 STB 19 00240 +C 19 00250 + INTEGER IPREC 19 00260 + EXTERNAL IPREC 19 00270 + Save +C 19 00280 + 9006 FORMAT(11X,A, /,'0') 19 00290 + 9007 FORMAT(35X,A ) 19 00300 +C 19 00310 + WRITE(36, FMT='(A)') 19 00320 + IZ = IABS(IZ) 19 00330 + TYPE=CARD(78:79) 19 00340 +C 19 00350 +C TI field (65-74) 19 00360 +C 19 00370 + STA=CARD(65:74) 19 00380 + IF(STA .NE. ' ') THEN 19 00390 +C TI VALUE GIVEN - Use TI for total intensity 19 00400 + STB=CARD(75:76) 19 00410 +C 19 00420 +C-SAVE TOTAL INTENSITY FROM THE TI-FIELD. 19 00430 +C 19 00440 + ATI=STA 19 00450 + DATI=STB 19 00460 + UNCERT=STB 19 00470 +C 19 00480 +C SAVE PRECISION OF INPUT 19 00490 + JPREC = IPREC(STA) 19 00500 + CALL CNVS2U(STA, STB, PERC, DPERC) 19 00510 +C NOTE IF DPERC = 0.0 (MISSING UNCERT) 19 00520 +C Program was wrongly setting ZERUNC when pure 100% decay 19 00530 +C (TWB. 930212) 19 00540 + IF ((DPERC .EQ. 0.0 .AND. PERC .NE. 100.) .OR. STB .NE. ' ') 19 00550 + 2 ZERUNC = 1 19 00560 + EINT = PERC 19 00570 + DEINT = DPERC 19 00580 +C 19 00590 +C-REPLACE OLD IB, IE WITH BLANKS. 19 00600 +C 19 00610 + CARD(22:41)=' ' 19 00620 + ELSE 19 00630 +C 19 00640 +C-NO ENTRY GIVEN IN THE TI-FIELD. 19 00650 +C-DECODE POSITRON INTENSITY.(IB) (22-29) 19 00660 +C 19 00670 + STA=CARD(22:29) 19 00680 +C SAVE PRECISION OF INPUT 19 00690 + JPREC = IPREC(STA) 19 00700 + STB=CARD(30:31) 19 00710 + CALL CNVS2U(STA, STB, PINT, DPINT) 19 00720 + UNCERT=STB 19 00730 +C 19 00740 +C-DECODE CAPTURE INTENSITY.(IE) (32-39) 19 00750 +C (if both TI and IB are blank, then use IE's uncertainty for UNCERT 19 00760 +C 19 00770 + STA=CARD(32:39) 19 00780 +C SAVE PRECISION OF INPUT 19 00790 + J2PREC = IPREC(STA) 19 00800 +C USE GREATER PRECISION 19 00810 + IF (J2PREC .GT. JPREC) JPREC = J2PREC 19 00820 + STB=CARD(40:41) 19 00830 + CALL CNVS2U(STA, STB, EINT, DEINT) 19 00840 +C 19 00850 +C If IB uncertainty is numeric or IB's are not given then 19 00860 +C save STB for UNCERTainty 19 00870 +C 19 00880 + IF(PINT.EQ.0. .AND. UNCERT.EQ.' ') UNCERT=STB 19 00890 +C Uncertainty from IE field should only be used if dominate 19 00900 +C (TWB. 930212) 19 00910 + IF(DEINT.GT.0 .AND. EINT .GT. PINT) UNCERT=STB 19 00920 +C 19 00930 +C-FIND TOTAL INTENSITY. 19 00940 +C 19 00950 + PERC = PINT + EINT 19 00960 + DPERC = SQRT(DPINT * DPINT + DEINT * DEINT) 19 00970 +C 19 00980 +C if both IB(PINT) and IE(EINT) are given, blank out IB, IE fields 19 00990 +C 19 01000 + IF (PINT .NE. 0.0 .AND. EINT .NE. 0.0) THEN 19 01010 + CALL CNVU2S(PERC, DPERC, ATI, 10, DATI, 2) 19 01020 + CARD(22:41)=' ' 19 01030 + ENDIF 19 01040 +C NOTE IF DPINT OR DEINT = 0.0 19 01050 +C BUT THEIR CORRESP VALUES NOT = 0.0 and not equal to 100 19 01060 + ZERUNC = 0 19 01070 +C Program was not correctly setting all ZERUNC=1 cases 19 01080 +C and not calculating uncertainty when 100% decay 19 01090 +C (TWB. 930112) 19 01100 + IF ((DPINT .EQ. 0.0 .AND. PINT .NE. 0.0 19 01110 + 2 .AND. PINT .NE. 100.) 19 01120 + 3 .OR. (uncert(1:1) .GE. 'A' .AND. uncert(1:1) .LE. 'Z')) 19 01130 + 4 ZERUNC = 1 19 01140 + IF ((DEINT .EQ. 0.0 .AND. EINT .NE. 0.0 19 01150 + 2 .AND. EINT .NE. 100.) 19 01160 + 3 .OR. (uncert(1:1) .GE. 'A' .AND. uncert(1:1) .LE. 'Z')) 19 01170 + 4 ZERUNC = 1 19 01180 + IF (EINT .EQ. 0.) THEN 19 01190 + WRITE(36, 9006)'NO CAPTURE INTENSITY GIVEN.' 19 01200 + IF(PINT.NE.0.) IBONLY = 1 19 01210 + ENDIF 19 01220 + IF (PINT .NE. 0.) THEN 19 01230 +C 19 01240 +C IB (PINT) given 19 01250 +C 19 01260 + IF (EINT.NE.0.) THEN 19 01270 + IF ((DEINT .NE. 0.) .AND. (DPINT .NE. 0.)) THEN 19 01280 + DPERC = PERC * AMIN1(DEINT / EINT, DPINT / PINT) 19 01290 + ENDIF 19 01300 + ENDIF 19 01310 + RETURN 19 01320 + ELSE 19 01330 +C 19 01340 +C-IF NO POSITRON INTENSITY, THEN ASSUME IE IS TOTAL. 19 01350 +C-SAVE TOTAL INTENSITY IN THE TI-FIELD. 19 01360 +C 19 01370 + ATI=STA 19 01380 + DATI=STB 19 01390 + WRITE(36,9007) 19 01400 + 1 'IE is assumed to be the total intensity' 19 01410 + ENDIF 19 01420 + ENDIF 19 01430 +C use last EK if there are more 19 01440 +C Program was outputing extraneous messages (TWB. 930212) 19 01450 + IF (EK(NUMP) .GT. 1022. .AND. pint .EQ. 0.) WRITE(36, 9007) 19 01460 + 1 'NO POSITRON INTENSITY GIVEN' 19 01470 + RETURN 19 01480 + END 19 01490 + SUBROUTINE WECARD 20 00010 +C 20 00020 +C Place IE, IB in proper fields on the new first E-Card 20 00030 +C 20 00040 + COMMON /CARDIM/CARD,CARD2,STARS 20 00050 + CHARACTER*80 CARD 20 00060 + CHARACTER*80 CARD2 20 00070 + CHARACTER* 8 STARS 20 00080 +C 20 00090 + COMMON /ENUMS/IZ,JPREC,PERC,DPERC,PINT,DPINT,EINT,DEINT, 20 00100 + 1 IBONLY,ZERUNC,EK,NUMP 20 00110 + INTEGER IZ, JPREC,IBONLY ,ZERUNC,NUMP 20 00120 + REAL DPERC, DPINT,DEINT 20 00130 + REAL PERC, PINT, EINT 20 00140 + REAL EK(5) 20 00150 +C 20 00160 + COMMON /ECHARS/ TYPE,ATI,DATI,UNCERT 20 00170 + CHARACTER* 2 TYPE 20 00180 + CHARACTER ATI*10, DATI*2 20 00190 + CHARACTER*2 UNCERT 20 00200 +C 20 00210 + COMMON /WENUM/ AREA, AREAM, AREAP,FCK, FCKM, FCKP, FCL, FCLM, 20 00220 + 1 FCLP,FCMNM, FCMNO, FCMNP,NPOS,ETOP 20 00230 + INTEGER NPOS 20 00240 + REAL AREA, AREAM, AREAP,FCK, FCKM, FCKP, FCL, FCLM, FCLP, 20 00250 + 1 FCMNM, FCMNO, FCMNP,ETOP 20 00260 +C 20 00270 + INTEGER LPREC,DELTMP,theprc 20 00280 + REAL EKTOT,DEKTOT,ELTOT,DELTOT,EMTOT,DEMTOT 20 00290 + REAL EKTOTM,EKTOTP,ELTOTM,ELTOTP,EMTOTM,EMTOTP 20 00300 + REAL DPREC 20 00310 + CHARACTER*2 STB 20 00320 + Character seint*8,dseint*2 20 00330 + Character spint*8,dspint*2 20 00340 + Character*11 scard2 20 00350 +C 20 00360 + INTEGER INT,LEN,NINT 20 00370 + REAL ALOG10 20 00380 + INTRINSIC ALOG10,INT,LEN,NINT 20 00390 +C 20 00400 + INTEGER LENSTR 20 00410 + EXTERNAL LENSTR 20 00420 + Save +C 20 00430 + EKTOT = FCK / AREA 20 00440 + EKTOTP = FCKP / AREAP 20 00450 + EKTOTM = EKTOT 20 00460 + IF (AREAM .GT. 0.) EKTOTM = FCKM / AREAM 20 00470 + DEKTOT = AMAX1(ABS(EKTOTP - EKTOT), ABS(EKTOT - EKTOTM)) 20 00480 + ELTOT = FCL / AREA 20 00490 + ELTOTP = FCLP / AREAP 20 00500 + ELTOTM = ELTOT 20 00510 + IF (AREAM .GT. 0.) ELTOTM = FCLM / AREAM 20 00520 + DELTOT = AMAX1(ABS(ELTOT - ELTOTP), ABS(ELTOT - ELTOTM)) 20 00530 + EMTOT = FCMNO / AREA 20 00540 + EMTOTP = FCMNP / AREAP 20 00550 + EMTOTM = EMTOT 20 00560 + IF (AREAM .GT. 0.) EMTOTM = FCMNM / AREAM 20 00570 + DEMTOT = AMAX1(ABS(EMTOT - EMTOTP), ABS(EMTOT - EMTOTM)) 20 00580 + WRITE(36, 9019) EKTOT, DEKTOT, ELTOT, DELTOT, EMTOT, DEMTOT 20 00590 + 9019 FORMAT(20X, 'K/(EC+B+)=', 1PE10.4, '+-', E9.2, 20 00600 + 1 5X, 'L/(EC+B+)=', 1PE10.4, '+-', E9.2, 20 00610 + 2 5X, 'MNO/(EC+B+)=', 1PE10.4, '+-', E9.2) 20 00620 +C 20 00630 +C NPOS=0 EC only decay 20 00640 +C 20 00650 + Call Lbsup(ati) 20 00660 + IF (NPOS .EQ. 0) THEN 20 00670 + If(Lenstr(ati) .GT. LEN(seint))Write(36,fmt='(3A)') 20 00680 + 2 ' Warning: ',ati(1:Lenstr(ati)),' will be truncated' 20 00690 + seint=ATI 20 00700 + dseint=DATI 20 00710 + spint=STARS 20 00720 + GO TO 510 20 00730 + ENDIF 20 00740 +C Reduced limit to output IB and IE from 0.01% to 0.001% 20 00750 +C (TWB. 930212) 20 00760 + IF ((EINT .LT. 0.001) .AND. (ETOP .LT. 0.001)) THEN 20 00770 + If(Lenstr(ati) .GT. LEN(spint))Write(36,fmt='(3A)') 20 00780 + 2 ' Warning: ',ati(1:Lenstr(ati)),' will be truncated' 20 00790 + spint=ATI 20 00800 + dspint=DATI 20 00810 + seint=STARS 20 00820 + GOTO 510 20 00830 + ENDIF 20 00840 + IF ((PINT .LT. 0.001) .AND. (ETOP .GT. 1000.)) THEN 20 00850 + seint=ATI 20 00860 + dseint=DATI 20 00870 + spint=STARS 20 00880 + GO TO 510 20 00890 + ENDIF 20 00900 +C TO PREVENT WRITING VALUES WHOSE UNCERTAINTY IS 20 00910 +C LARGER THAN THE VALUE BY A FACTOR OF 5 20 00920 + IF (DEINT / EINT .GT. 5.0) ZERUNC = 1 20 00930 + IF (DPINT / PINT .GT. 5.0) ZERUNC = 1 20 00940 + IF (ZERUNC .EQ. 0) THEN 20 00950 + CALL CNVU2S(EINT, DEINT, seint, 8, dseint, 2) 20 00960 + CALL CNVU2S(PINT, DPINT, spint, 8, dspint, 2) 20 00970 + ELSE 20 00980 +C PRINT USING CALCULATED PRECISION 20 00990 +C Logic was mixed up. Wrong value of JPREC was being used and 20 01000 +C wrong uncertainty was being output for the smaller of 20 01010 +C EINT and PINT (TWB. 921216) 20 01020 +C Continued refinement of logic (TWB. 930212) 20 01030 + If(eint .GT. 1.)Then 20 01040 + lprec=INT(ALOG10(EINT))+1 20 01050 + Else 20 01060 + LPREC=INT(ALOG10(EINT)) 20 01070 + Endif 20 01080 + theprc=lprec-jprec 20 01090 + DPREC=3.0*10.0**theprc 20 01100 + DELTMP=NINT(DEINT/10.0**theprc) 20 01110 +1000 CONTINUE 20 01120 + IF(DELTMP .GT. 25)THEN 20 01130 + theprc=theprc+1 20 01140 + DPREC=DPREC*10. 20 01150 + DELTMP=NINT(DEINT/10.0**theprc) 20 01160 + GoTo 1000 20 01170 + ENDIF 20 01180 + CALL CNVU2S(EINT, DPREC, seint, 8, dseint, 2) 20 01190 + CALL KNVI2S(DELTMP,dseint,0) 20 01200 + If(pint .GT. 1.)Then 20 01210 + lprec=INT(ALOG10(PINT))+1 20 01220 + Else 20 01230 + LPREC=INT(ALOG10(PINT)) 20 01240 + Endif 20 01250 + theprc=lprec-jprec 20 01260 + DPREC=3.0*10.0**theprc 20 01270 + DELTMP=NINT(DPINT/10.0**theprc) 20 01280 +1100 CONTINUE 20 01290 + IF(DELTMP .GT. 25)THEN 20 01300 + theprc=theprc+1 20 01310 + DPREC=DPREC*10. 20 01320 + DELTMP=NINT(DPINT/10.0**theprc) 20 01330 + GoTo 1100 20 01340 + ENDIF 20 01350 + CALL CNVU2S(PINT, DPREC, spint, 8, dspint, 2) 20 01360 + CALL KNVI2S(DELTMP,dspint,0) 20 01370 + IF(LENSTR(UNCERT) .EQ. 0)THEN 20 01380 + dseint = ' ' 20 01390 + dspint = ' ' 20 01400 + ELSE 20 01410 + IF(UNCERT(1:1) .GE. 'A' .AND. UNCERT(1:1) .LE. 'Z')THEN 20 01420 + dseint=UNCERT 20 01430 + dspint=UNCERT 20 01440 + ENDIF 20 01450 + ENDIF 20 01460 + ENDIF 20 01470 + 510 CONTINUE 20 01480 +C 20 01490 +C if the number is all 0, then blank out 20 01500 +C 20 01510 + CALL ZBLANK(spint,dspint) 20 01520 + CALL ZBLANK(seint,dseint) 20 01530 + IF (seint(1:8) .NE. STARS) THEN 20 01540 + CALL LBSUP(seint) 20 01550 + CARD(32:39)=seint 20 01560 + CARD(40:41)=dseint 20 01570 + ENDIF 20 01580 + IF (spint(1:8) .NE. STARS) THEN 20 01590 + CALL LBSUP(spint) 20 01600 + CARD(22:29)=spint 20 01610 + CARD(30:31)=dspint 20 01620 + ENDIF 20 01630 + CALL CENTER(CARD(22:29),8) 20 01640 + CALL CENTER(CARD(32:39),8) 20 01650 +C 20 01660 +C-PREPARE NEW SECOND E-CARD. 20 01670 +C 20 01680 +C Do not output capture fractions if IE is not output (TWB 930212) 20 01690 + If(card(32:39) .NE. ' ')Then 20 01700 + If(ektot .GT. 0.)Call Addfrac(card2,ektot,dektot,'CK') 20 01710 + If(eltot .GT. 0.)Call Addfrac(card2,eltot,deltot,'CL') 20 01720 + If(emtot .GT. 0.)Call Addfrac(card2,emtot,demtot,'CM+') 20 01730 + Endif 20 01740 + RETURN 20 01750 + END 20 01760 + Subroutine Addfrac(card,frac,dfrac,text) 21 00010 +C Adds electron-capture fractions to the new "S E" record 21 00020 +C card "S E" record 21 00030 +C frac capture fraction 21 00040 +C dfrac uncertainty in capture fraction 21 00050 +C text type of fraction 21 00060 +C 21 00070 + Character*(*)card 21 00080 + Real frac,dfrac 21 00090 + Character*(*) text 21 00100 +C 21 00110 + Integer lprec,start 21 00120 + Character*2 dsx 21 00130 + Character*11 sx 21 00140 +C 21 00150 + Integer Lenstr 21 00160 + External Lenstr 21 00170 +C 21 00180 + Integer INDEX,NINT 21 00190 + Real ALOG10 21 00200 + Intrinsic ALOG10,INDEX,NINT 21 00210 +C 21 00220 + If(Lenstr(card) .LT. 10)Then 21 00230 + start=10 21 00240 + Else 21 00250 + start=Lenstr(card)+1 21 00260 + EndIf 21 00270 +C 21 00280 + If(dfrac/frac .LE. 0.0001)Then 21 00290 + dfrac=0.001*frac 21 00300 + Call Cnvu2s(frac,0.0,sx,11,dsx,0) 21 00310 + ElseIf(dfrac/frac .LE. 0.001)Then 21 00320 + Call Cnvu2s(frac,dfrac,sx,11,dsx,-1) 21 00330 + Else 21 00340 + Call Cnvu2s(frac,dfrac,sx,11,dsx,2) 21 00350 + Call Lbsup(sx) 21 00360 + Call Lbsup(dsx) 21 00370 + Call Addstr(sx,Lenstr(sx)+2,dsx) 21 00380 + EndIf 21 00390 + If(INDEX(sx,'*') .GT. 0)Then 21 00400 + lprec=NINT(ALOG10(frac)-ALOG10(dfrac)) 21 00410 + Call Cnvu2s(frac,0.0,sx,11,dsx,-lprec) 21 00420 + Endif 21 00430 + If(INDEX(sx,'*') .EQ. 0)Then 21 00440 + card(start:)=text 21 00450 + start=start+Lenstr(text) 21 00460 + Call Addstr(card,start,'=') 21 00470 + Call Lbsup(sx) 21 00480 + start=start+1 21 00490 + Call Addstr(card,start,sx) 21 00500 + If(text .NE. 'CM+')Then 21 00510 + start=start+Lenstr(sx) 21 00520 + Call Addstr(card,start,'$') 21 00530 + EndIf 21 00540 + EndIf 21 00550 +C 21 00560 + Return 21 00570 + End 21 00580 +C+++MDC+++ +C...VAX, DVF, UNX +C SUBROUTINE DATE_20(DATE) +C +C CHARACTER DATE*(*) +C +C RETURNS DATE AS A CHARACTER STRING OF 11 CHARACTERS IN THE +C FORM DD-MMM-YYYY +C +C Character*3 mon(12) +C Data mon/'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep', +C +'Oct','Nov','Dec'/ +C...VAX, DVF +C/ Integer im +C/ Character*4 ccyy +C/ Character*2 dd +C/ CHARACTER DAY*8 +C/C +C/C GET THE DATE AS A CHARACTER STRING CCYYMMDD +C/C +C/ CALL DATE_AND_TIME(DAY) +C/ Read(day,'(A4,I2,A2)') ccyy,im,dd +C/ WRITE(DATE,FMT='(A2,''-'',A3,''-'',A4)') dd,MON(im),ccyy +C...UNX +C INTEGER IYMD(3) +C CALL IDATE(IYMD) +C WRITE(DATE,FMT='(I2,''-'',A3,''-'',I4)') IYMD(1),MON(IYMD(2)), +C + IYMD(3) +C...VAX, DVF, UNX +C RETURN +C END +C---MDC--- diff --git a/src/ensdf_processing/RADD/98AK04.in b/src/ensdf_processing/RADD/98AK04.in new file mode 100755 index 0000000000..b2b08329ce --- /dev/null +++ b/src/ensdf_processing/RADD/98AK04.in @@ -0,0 +1,153 @@ +1 52 54 1.70 0.04 +1 52 56 1.632 0.014 +1 52 58 1.57 0.05 +1 54 56 1.70 0.06 +0 54 58 1.64 0.06 +0 60 84 1.596 0.009 +0 62 84 1.569 0.008 +0 62 86 1.57 0.02 +0 64 84 1.570 0.003 +0 64 86 1.572 0.012 +0 64 88 1.574 0.007 +0 66 84 1.566 0.010 +0 66 86 1.580 0.009 +0 66 88 1.54 0.04 +0 68 84 1.567 0.004 +0 68 86 1.551 0.024 +0 70 84 1.5570 0.0025 +0 70 86 1.596 0.019 +0 70 88 1.53 0.06 +0 72 84 1.552 0.006 +0 72 86 1.562 0.003 +0 72 88 1.548 0.020 +0 72 90 1.570 0.013 +0 72 102 1.55 0.06 +0 74 86 1.557 0.010 +0 74 88 1.569 0.009 +0 74 90 1.567 0.024 +0 74 94 1.56 0.04 +0 76 86 1.563 0.033 +0 76 88 1.552 0.013 +0 76 90 1.556 0.016 +0 76 92 1.563 0.011 +0 76 94 1.550 0.030 +0 76 96 1.56 0.02 +0 76 98 1.53 0.04 +0 76 110 1.49 0.03 +0 78 88 1.551 0.028 +0 78 90 1.554 0.017 +0 78 92 1.561 0.006 +0 78 94 1.558 0.008 +0 78 96 1.553 0.014 +0 78 98 1.559 0.010 +0 78 100 1.54 0.03 +0 78 102 1.53 0.04 +0 78 104 1.538 0.025 +0 78 106 1.536 0.031 +1 78 108 1.50 0.02 +0 78 110 1.470 0.017 +0 78 112 1.474 0.010 +0 80 96 1.55 0.03 +1 80 98 1.545 0.010 +0 80 100 1.533 0.008 +0 80 102 1.522 0.005 +0 80 104 1.512 0.011 +0 80 106 1.504 0.027 +0 80 108 1.481 0.028 +0 82 98 1.53 0.04 +0 82 100 1.51 0.05 +0 82 102 1.505 0.013 +1 82 104 1.50 0.02 +0 82 106 1.491 0.014 +0 82 108 1.462 0.025 +0 82 110 1.500 0.013 +0 82 112 1.432 0.023 +0 82 128 1.449 0.042 +0 84 106 1.54 0.02 +0 84 108 1.511 0.008 +0 84 110 1.511 0.006 +0 84 112 1.506 0.006 +0 84 114 1.496 0.003 +0 84 116 1.4803 0.0026 +0 84 118 1.4719 0.0031 +0 84 120 1.4617 0.0017 +0 84 122 1.4550 0.0017 +0 84 124 1.4296 0.0008 +0 84 126 1.40882 0.00010 +0 84 128 1.5212 0.0004 +0 84 130 1.5394 0.0006 +0 84 132 1.5408 0.0009 +0 84 134 1.5379 0.0007 +0 86 112 1.551 0.010 +0 86 114 1.522 0.009 +0 86 116 1.516 0.007 +0 86 118 1.504 0.003 +0 86 120 1.492 0.007 +0 86 122 1.476 0.006 +0 86 124 1.4571 0.0033 +0 86 126 1.4343 0.0034 +0 86 128 1.532 0.006 +0 86 130 1.5649 0.0008 +0 86 132 1.559 0.008 +0 86 134 1.5555 0.0002 +0 86 136 1.5487 0.0002 +2 88 114 1.60 0.10 +0 88 116 1.533 0.004 +0 88 118 1.527 0.008 +0 88 120 1.495 0.014 +0 88 122 1.487 0.006 +0 88 124 1.467 0.010 +0 88 126 1.4552 0.0021 +0 88 128 1.541 0.005 +0 88 130 1.563 0.004 +0 88 132 1.556 0.008 +0 88 134 1.5446 0.0019 +0 88 136 1.5419 0.0006 +0 88 138 1.5397 0.0004 +0 90 122 1.510 0.027 +0 90 124 1.492 0.016 +0 90 126 1.466 0.006 +0 90 128 1.554 0.009 +0 90 130 1.566 0.009 +0 90 132 1.539 0.008 +0 90 134 1.536 0.005 +0 90 136 1.5383 0.0008 +0 90 138 1.5332 0.0008 +0 90 140 1.5331 0.0013 +0 90 142 1.5361 0.0022 +2 92 126 1.46 0.09 +0 92 132 1.527 0.030 +0 92 134 1.522 0.022 +0 92 136 1.524 0.009 +0 92 138 1.531 0.005 +0 92 140 1.5289 0.0005 +0 92 142 1.5216 0.0005 +0 92 144 1.527 0.003 +0 92 146 1.536 0.003 +0 94 140 1.518 0.025 +0 94 142 1.5103 0.0003 +0 94 144 1.5075 0.0002 +0 94 146 1.5168 0.0003 +0 94 148 1.5143 0.0009 +0 94 150 1.5062 0.0010 +0 96 144 1.4949 0.0018 +0 96 146 1.5013 0.0010 +0 96 148 1.4979 0.0007 +0 96 150 1.4954 0.0010 +0 96 152 1.4963 0.0008 +0 98 142 1.491 0.017 +0 98 144 1.490 0.020 +0 98 146 1.495 0.012 +0 98 148 1.4953 0.0009 +0 98 150 1.4851 0.0024 +0 98 152 1.4836 0.0005 +0 98 154 1.5012 0.0006 +0 98 156 1.517 0.004 +0 100 148 1.490 0.013 +1 100 150 1.478 0.014 +0 100 152 1.4670 0.0008 +0 100 154 1.4888 0.0008 +0 100 156 1.500 0.003 +1 102 150 1.474 0.016 +0 102 152 1.465 0.007 +0 102 154 1.4765 0.0019 diff --git a/src/ensdf_processing/RADD/ELE.in b/src/ensdf_processing/RADD/ELE.in new file mode 100755 index 0000000000..da11e1229d --- /dev/null +++ b/src/ensdf_processing/RADD/ELE.in @@ -0,0 +1,113 @@ +H 1 +He 2 +Li 3 +Be 4 +B 5 +C 6 +N 7 +O 8 +F 9 +Ne 10 +Na 11 +Mg 12 +Al 13 +Si 14 +P 15 +S 16 +Cl 17 +Ar 18 +K 19 +Ca 20 +Sc 21 +Ti 22 +V 23 +Cr 24 +Mn 25 +Fe 26 +Co 27 +Ni 28 +Cu 29 +Zn 30 +Ga 31 +Ge 32 +As 33 +Se 34 +Br 35 +Kr 36 +Rb 37 +Sr 38 +Y 39 +Zr 40 +Nb 41 +Mo 42 +Tc 43 +Ru 44 +Rh 45 +Pd 46 +Ag 47 +Cd 48 +In 49 +Sn 50 +Sb 51 +Te 52 +I 53 +Xe 54 +Cs 55 +Ba 56 +La 57 +Ce 58 +Pr 59 +Nd 60 +Pm 61 +Sm 62 +Eu 63 +Gd 64 +Tb 65 +Dy 66 +Ho 67 +Er 68 +Tm 69 +Yb 70 +Lu 71 +Hf 72 +Ta 73 +W 74 +Re 75 +Os 76 +Ir 77 +Pt 78 +Au 79 +Hg 80 +Tl 81 +Pb 82 +Bi 83 +Po 84 +At 85 +Rn 86 +Fr 87 +Ra 88 +Ac 89 +Th 90 +Pa 91 +U 92 +Np 93 +Pu 94 +Am 95 +Cm 96 +Bk 97 +Cf 98 +Es 99 +Fm 100 +Md 101 +No 102 +Lr 103 +Rf 104 +Db 105 +Sg 106 +Bh 107 +Hs 108 +Mt 109 +Ds 110 +Rg 111 +Cn 112 + diff --git a/src/ensdf_processing/RADD/RadD.for b/src/ensdf_processing/RADD/RadD.for new file mode 100755 index 0000000000..c26885874d --- /dev/null +++ b/src/ensdf_processing/RADD/RadD.for @@ -0,0 +1,346 @@ +C ================================================================================================ +c PROGRAM FOR CALCULATION OF RADIUS PARAMETER FOR EVEN-ODD, ODD-EVEN AND ODD-ODD NUCLEI +c ================================================================================================ + + CHARACTER *3 ELE(200),ELMD,ELMP,YN + DIMENSION N(500),NZ(500),R(500),ERR(500),KZ(200),LP(200) + 68 OPEN(UNIT=18,FILE='98AK04.in',STATUS='OLD') + OPEN(UNIT=19,FILE='ELE.in',STATUS='OLD') + NN=153 + DO 10 I=1,NN + READ(18,23)LP(I),NZ(I),N(I),R(I),ERR(I) + 23 FORMAT(I1,1X,I3,1X,I3,1X,F7.5,1X,F7.5) + 10 CONTINUE + WRITE(*,*)'ENTER ATOMIC NUMBER(Z) and NEUTRON NUMBER(N) FOR ALPH + 1A DAUGHTER NUCLEUS' + READ(*,*)NZ1,N1 + WRITE(*,159) + 159 FORMAT(//) + WRITE(*,129) + WRITE(*,85) + 85 FORMAT(10X,' CALCULATION FOR RADIUS PARAMETER') + WRITE(*,129) + 129 FORMAT(65('=')) + +c----------------------------------------------------------------------------------------------------- +c Identification of parent and daughter nuclide +c----------------------------------------------------------------------------------------------------- + LNZP=NZ1+2 + DO 121 I=1,112 + READ(19,29)ELE(I),KZ(I) + 29 FORMAT(A3,1X,I3) + IF(KZ(I).EQ.NZ1)ELMD=ELE(I) + IF(KZ(I).EQ.LNZP)ELMP=ELE(I) + 121 CONTINUE +c----------------------------------------------------------------------------------------------------- +c Console Printing Format +c----------------------------------------------------------------------------------------------------- + + NNZ1=NZ1 + NN1=N1 + NNA1=NNZ1+NN1 + AD=MOD(NZ1,2) + AN=MOD(N1,2) + WRITE(*,61) + 61 FORMAT(/,4X,'Alpha Parent',15x,'Daughter') + WRITE(*,62) + 62 FORMAT(2X,16('='),9X,16('='),4X,16('=')) + WRITE(*,63) + 63 FORMAT(2X,'Ele Z N A',11x,' Ele Z N A',6x,' Radius (f + 1m)') + WRITE(*,64) + 64 FORMAT(2X,16('-'),9X,16('-'),4X,16('-')) +c----------------------------------------------------------------------------------------------------- +c check for even-even,even-odd,odd-even and odd-odd nuclide +c----------------------------------------------------------------------------------------------------- + IF((AD.EQ.0.0).AND.(AN.EQ.0.0))THEN + GOTO 21 + ELSEIF((AD.EQ.0.0).AND.(AN.NE.0.0))THEN + GOTO 25 + ELSEIF((AD.NE.0.0).AND.(AN.EQ.0.0))THEN + GOTO 33 + ELSEIF((AD.NE.0.0).AND.(AN.NE.0.0))THEN + GOTO 34 + ENDIF +c --------------------------------------------------------------------------------------------------- +c Radius parameter for even-even nuclei: Below segment of the +c program simply list the even even even radii (as given by 1998Ak04) +c----------------------------------------------------------------------------------------------------- + 21 NZ1=NZ1+2 + N1=N1+2 + DO 41 I=1,NN + IF((NZ1.EQ.NZ(I)).AND.(N1.EQ.N(I)))THEN + R1=R(I) + ERROR=ERR(I) + LP1=LP(I) + GOTO 67 + STOP + ENDIF + IF(I.EQ.NN)THEN + WRITE(*,*)'Radius parameter for the even-even nucleus d + 1oes not exist in 1998Ak04' + GOTO 83 + STOP + ENDIF + 41 CONTINUE +c ---------------------------------------------------------------------------------------------------- +c Calculations of radius parameter for for even-odd nucleus +c----------------------------------------------------------------------------------------------------- + 25 AN2=N1+3 + NZ1=NZ1+2 + + DO 42 I=1,NN + IF((NZ1.EQ.NZ(I)).AND.(AN2.EQ.N(I)))THEN + R11=R(I) + ERR1=ERR(I) + LP1=LP(I) + GOTO 72 + ENDIF + IF(I.EQ.NN)THEN + WRITE(*,*)'Radius parameter for one of the even-even nu + 1cleus does not exist in 1998Ak04' + GOTO 83 + STOP + ENDIF + 42 CONTINUE + 72 AN2=AN2-2 + DO 57 I=1,NN + IF((NZ1.EQ.NZ(I)).AND.(AN2.EQ.N(I)))THEN + R22=R(I) + ERR2=ERR(I) + LP2=LP(I) + GOTO 73 + ENDIF + IF(I.EQ.NN)THEN + WRITE(*,*)'Radius parameter for one of the even-even nu + 1cleus does not exist in 1998Ak04' + GOTO 83 + STOP + ENDIF + 57 CONTINUE + 73 R1=(R11+R22)/2.0 + ERROR=(ERR1+ERR2)/2.0 + GOTO 67 + STOP +c ---------------------------------------------------------------------------------------------------- +c Calculations of radius parameter for odd-even nucleus +c ---------------------------------------------------------------------------------------------------- + 33 NZ1=NZ1+3 + AN2=N1+2 + DO 43 I=1,NN + IF((NZ1.EQ.NZ(I)).AND.(AN2.EQ.N(I)))THEN + R11=R(I) + ERR1=ERR(I) + LP1=LP(I) + GOTO 69 + ENDIF + IF(I.EQ.NN)THEN + WRITE(*,*)'Radius parameter for one of the even-even nu + 1cleus does not exist in 1998Ak04' + GOTO 83 + STOP + ENDIF + 43 CONTINUE + 69 NZ1=NZ1-2 + DO 53 I=1,NN + IF((NZ1.EQ.NZ(I)).AND.(AN2.EQ.N(I)))THEN + R12=R(I) + ERR2=ERR(I) + LP2=LP(I) + GOTO 79 + ENDIF + IF(I.EQ.NN)THEN + WRITE(*,*)'Radius parameter for one of the even-even nu + 1cleus does not exist in 1998Ak04' + GOTO 83 + STOP + ENDIF + 53 CONTINUE + 79 R1=(R11+R12)/2.0 + ERROR=(ERR1+ERR2)/2.0 + GOTO 67 + STOP +c ---------------------------------------------------------------------------------------------------- +c Calculations of radius parameter for odd-odd nuclei (Method 1) +c ---------------------------------------------------------------------------------------------------- + 34 N1=N1+3 + NZ1=NZ1+1 + DO 75 I=1,NN + IF((NZ1.EQ.NZ(I)).AND.(N1.EQ.N(I)))THEN + R11=R(I) + ERR1=ERR(I) + LP1=LP(I) + GOTO 91 + ENDIF + IF(I.EQ.NN)THEN + WRITE(*,*)'Radius parameter for one of the even-even nu + 1cleus does not exist in 1998Ak04' + GOTO 83 + STOP + ENDIF + 75 CONTINUE + 91 N1=N1-2 + DO 93 I=1,NN + IF((NZ1.EQ.NZ(I)).AND.(N1.EQ.N(I)))THEN + R12=R(I) + ERR2=ERR(I) + LP2=LP(I) + GOTO 92 + ENDIF + IF(I.EQ.NN)THEN + WRITE(*,*)'Radius parameter for one of the even-even nu + 1cleus does not exist in 1998Ak04' + GOTO 83 + STOP + ENDIF + 93 CONTINUE + 92 N1=N1+2 + NZ1=NZ1+2 + DO 94 I=1,NN + IF((NZ1.EQ.NZ(I)).AND.(N1.EQ.N(I)))THEN + R13=R(I) + ERR3=ERR(I) + LP3=LP(I) + GOTO 95 + ENDIF + IF(I.EQ.NN)THEN + WRITE(*,*)'Radius parameter for one of the even-even nu + 1cleus does not exist in 1998Ak04' + GOTO 83 + STOP + ENDIF + 94 CONTINUE + 95 N1=N1-2 + DO 96 I=1,NN + IF((NZ1.EQ.NZ(I)).AND.(N1.EQ.N(I)))THEN + R14=R(I) + ERR4=ERR(I) + LP4=LP(I) + GOTO 97 + ENDIF + IF(I.EQ.NN)THEN + WRITE(*,*)'Radius parameter for one of the even-even nu + 1cleus does not exist in 1998Ak04' + GOTO 83 + STOP + ENDIF + 96 CONTINUE + 97 R10=(R11+R12)/2.0 + ERR10=(ERR1+ERR2)/2.0 + R20=(R13+R14)/2.0 + ERR20=(ERR3+ERR4)/2.0 + R1=(R10+R20)/2.0 + ERROR=(ERR10+ERR20)/2.0 + WRITE(*,71)ELMP,NNZ1+2,NN1+2,NNA1+4,ELMD,NNZ1,NN1,NNA1,R1,ERROR + 71 FORMAT(' ',1X,A3,I3,1X,I3,2X,I3,11X,A3,1X,I3,1X,I3,2X,I3,5X,F7.4 + 1,F7.4,' <-----Method 1') + GOTO 101 +c ---------------------------------------------------------------------------------------------------- +c Calculations of radius parameter for odd-odd nuclei (Method 2) +c----------------------------------------------------------------------------------------------------- + 101 N1=NN1 + NZ1=NNZ1 + N1=N1+1 + NZ1=NZ1+3 + DO 102 I=1,NN + IF((NZ1.EQ.NZ(I)).AND.(N1.EQ.N(I)))THEN + R21=R(I) + ERR21=ERR(I) + LP1=LP(I) + GOTO 103 + ENDIF + IF(I.EQ.NN)THEN + WRITE(*,*)'Radius parameter for one of the even-even nu + 1cleus does not exist in 1998Ak04' + GOTO 83 + STOP + ENDIF + 102 CONTINUE + 103 NZ1=NZ1-2 + DO 104 I=1,NN + IF((NZ1.EQ.NZ(I)).AND.(N1.EQ.N(I)))THEN + R22=R(I) + ERR22=ERR(I) + LP2=LP(I) + GOTO 105 + ENDIF + IF(I.EQ.NN)THEN + WRITE(*,*)'Radius parameter for one of the even-even nu + 1cleus does not exist in 1998Ak04' + GOTO 83 + STOP + ENDIF + 104 CONTINUE + 105 N1=N1+2 + NZ1=NZ1+2 + DO 106 I=1,NN + IF((NZ1.EQ.NZ(I)).AND.(N1.EQ.N(I)))THEN + R23=R(I) + LP3=LP(I) + ERR23=ERR(I) + GOTO 107 + ENDIF + IF(I.EQ.NN)THEN + WRITE(*,*)'Radius parameter for one of the even-even nu + 1cleus does not exist in 1998Ak04' + GOTO 83 + STOP + ENDIF + 106 CONTINUE + 107 NZ1=NZ1-2 + DO 108 I=1,NN + IF((NZ1.EQ.NZ(I)).AND.(N1.EQ.N(I)))THEN + R24=R(I) + ERR24=ERR(I) + LP4=LP(I) + GOTO 109 + ENDIF + IF(I.EQ.NN)THEN + WRITE(*,*)'Radius parameter for one of the even-even nu + 1cleus does not exist in 1998Ak04' + GOTO 83 + STOP + ENDIF + 108 CONTINUE + 109 R10=(R21+R22)/2.0 + ERR1=(ERR21+ERR22)/2.0 + R20=(R23+R24)/2.0 + ERR2=(ERR23+ERR24)/2.0 + R1=(R10+R20)/2.0 + ERROR=(ERR1+ERR2)/2.0 +c ---------------------------------------------------------------------------------------------------- +c Output Printing +c ---------------------------------------------------------------------------------------------------- + WRITE(*,82)ELMP,NNZ1+2,NN1+2,NNA1+4,ELMD,NNZ1,NN1,NNA1,R1,ERROR + 82 FORMAT(' ',1X,A3,I3,1X,I3,2X,I3,11X,A3,1X,I3,1X,I3,2X,I3,5X,F7.4 + 1,F7.4,' <-----Method 2') + GOTO 831 + STOP + 67 WRITE(*,65)ELMP,NNZ1+2,NN1+2,NNA1+4,ELMD,NNZ1,NN1,NNA1,R1,ERROR + 65 FORMAT(' ',1X,A3,I3,1X,I3,2X,I3,11X,A3,1X,I3,1X,I3,2X,I3,5X,F7.4 + 1,F7.4) + 831 WRITE(*,149) + 149 FORMAT(/,65('-'),/) + IF((LP1.EQ.1).OR.(LP2.EQ.1).OR.(LP3.EQ.1).OR.(LP4.EQ.1))THEN + WRITE(*,15) + 15 FORMAT(' ATTENTION!: One of the input even-even radius,used in t + 1hese calculations, appearing from systematics (1998Ak04)') + ENDIF + IF((LP1.EQ.2).OR.(LP2.EQ.2).OR.(LP3.EQ.2).OR.(LP4.EQ.2))THEN + WRITE(*,39) + 39 FORMAT(' ATTENTION!:One of the input even-even radius,used in th + 1ese calculations,has asymmetric uncertainity (1998Ak04) and larger + 1 uncertainity has been considered') + ENDIF + 83 WRITE(*,59) + CLOSE(19) + CLOSE(18) + + 59 FORMAT(//,' Do you wish to calculate radius parameter for any ot + 1her nuclide?',/) + write(*,*)'Type yes or YES to calculate again and no or NO to ex + 1it' + READ(*,60)YN + 60 FORMAT(A3) + IF((YN.EQ.'yes').OR.(YN.EQ.'YES'))GOTO 68 + END diff --git a/src/ensdf_processing/RULER/ruler.f b/src/ensdf_processing/RULER/ruler.f new file mode 100644 index 0000000000..b750da4972 --- /dev/null +++ b/src/ensdf_processing/RULER/ruler.f @@ -0,0 +1,5477 @@ +!*********************************************************************** +! +! PROGRAM RULER +! +! 1. Calculates Reduced Electromagnetic Transition Strengths and +! compares to Recommended Upper Limits (RUL's). +! 2. Calculates BELW, BMLW for inclusion in ENSDF data sets. +! +! The program uses as input data a file in the standard ENSDF +! format. Output consists of a report file summarizing the +! calculations, assumptions, and comparisons made and, in case +! 2, a file in the ENSDF format which includes the calculated +! BELW and BMLW. +! +! The formalism and constants given in NS MEMO 1B/1 (82) by M.J. +! Martin are used in the calculations. The Recommended Upper +! Limits (RUL's) are from the Formats Manual. +! +! An attempt has been made to separate the subprograms having +! character strings from the others. This is due to a current +! limitation on the TOPS-10 compiler. +! +! There is a current limit of 50 gammas associated with a level +! and 100 records associated with a level. +! +! Version 3.0 : October 20, 2004 C.L.Dunford +! Converted to Fortran 95 +! Command line input added +! 3.1 : October 28, 2004 T.W.Burrows +! Incorporated 1.32 revision of Fortran 77 version +! 3.1a: May 25, 2006 T.W.Burrows +! 1. Corrected problem which put program into infinite +! loop if Mode of Operation not entered correctly +! 2. Added input dialogue asking for theoretical DCC +! to assume +! 3. Corrected initialization problem which caused some +! uncertainties to be underestimated +! 4. Corrected a couple of minor formatting problems +! in the report file +! 5. Corrected problem in comparing old and new values +! when a limit or "AP" +! 3.1b: October 18, 2006 T.W.Burrows +! 1. Corrected initialization problem caused in +! porting from F77 to F95 ( in F95 instead of +! " " in F77 if string not initialized) +! 3.1c: October 30, 2006 T.W.Burrows +! 1. Correct some output formatting problems in OUT235 +! 2. Increased length of sdx in OUT235 to handle asymmetric +! uncertainties +! 3. Corrected omission of a few lines of code in OUT235 +! which caused asymmetric uncertainties to be underestimated +! 3.2: July 23, 2007 T.W.Burrows +! 1. Added logic in attempt to correctly calculate +! values if width's or very short T1/2's are given on +! Level records +! 2. Completely rewrote logic for handling asymmetric +! uncertainties +! 3. Added comparison of calculated BElW's and BMlW's +! and noted discrepancies +! 4. Checked to see if there was an existing BElW or +! or BMlW and missing MULT, MR, etc. +! 5. Added four possible warnings to standard output: +! a. T1/2''s in eV or as and insufficint data to +! derive gamma widths +! b. BElW or BMlW found but no MULT, DPI unknown, +! or mixed MULT with no MR +! c. Problem with asymmetric uncertainties +! d. Some BElW's or BMlW's exceed RUL +! Details given in report file +! 6. Corrected problem for mixed transitions which led to an +! old transition probability be kept if the other value +! agreed with the new value +! 7. Cleaned up some problems in the comparison mode +! which resulted confusion between IV and IS RUL's +! 8. Cleaned up some formatting problems of new records +! 9. Changed default for theoretical CC's from HSICC to +! BRICC +! 10. Corrected problem when input file name had leading +! blanks +! 11. Cleaned up some formatting of messages in the report file +! 3.2a: August 6, 2007 T.W.Burrows (with input from Balraj +! Singh) +! 1. Also added a check against RUL when old record +! kept +! 2. Automatically create a new file summarizing +! problems when calculating new values +! 3.2b: Dec 16, 2008 J.K. Tuli +! Fixed bug in MR initialization. Two lines added at *JKT. +! 3.2c: Jan 5, 2009 J.K. Tuli +! Eliminated codes marked **JKT**, **JKT2** in subroutine +! OUT2ON which was erroneously accepting old card. +! 3.2d: jan 20, 2009 Jun-ichi Katakura +! Fixed bug in TI initialization. Four lines added at *JK. +!*********************************************************************** +!* +!* Version 1 As of 4-Oct-83. Preliminary version. +!* 1.1 As of 18-Feb-84. First exportable version. +!* 1.2 As of 13-Aug-84. Fixed errors and expanded +!* 1. References now accounted for when obtaining BR from %IT +!* 2. BR obtained from N record for isomeric level in IT Decay +!* Data sets +!* 3. Multipolarities sorted in ascending order +!* 4. Expanded comparisons between old and new records +!* 5. Cleaned up COMMON's +!* 1.3 June-86. Use F77STR and NSDCNV libraries. +!* 1.4 8-Aug-86. Add VAX MDC +!* 1.5 14-Aug-86. Multipolarity field on G card. +!* 1.6 17-Dec-86. Fix undef. oper when BR blank. +!* Add IbmPC MDC. +!* 1.7 10-Feb-87. Added check for embedded non- +!* gamma radiations +!* 1.8 2-Nov-87. VAX mdc OPEN with READONLY for +!* dataset +!* 1.9 15-Jun-89. Added checking to avoid floating overflows. +!* If result will be greater than 10**38, +!* value is set to 10**38 +!* 1.10 19-Jan-90. DX2 modified. +!* 1.11 26-Apr-90. Rewrote subroutine READIN +!* 1. Corrected bug which caused wrong translation of values +!* on continuation records when followed by other quantities +!* 2. Corrected logic problem which had been supressing many +!* messages. +!* 3. Added check for possible record length overflow in report +!* 4. Other minor bugS fixed after running all ARCHIVAL ENSDF +!* IT DECAY and ADOPTED LEVELS, GAMMAS data sets through RULER +!* 1.12 15-Jun-90 Mods/cleanups in order to run on IBM PC Microsoft +!* v5.0.- Use CNVU2S for BRTI etc, Data statement +!* position NORM calling arguments,etc. +!* 1.13 04-SEP-90 In order to fit in IBM PC, subroutines READIN and +!* OUT2 were broken into smaller routines, ADMESS, +!* DOMESS and APPEND subroutines were eliminated and +!* WRTRPT modified, COMMONs MESSN and MESSC were added. +!* 1.14 20-DEC-90 Typo in READIN corrected. Added TYPST routine to +!* check un acceptable chars. +!* 1.15 20-Apr-93 Added ANS MDC Explicitly typed all variables and +!* functions Replaced string concatanation with +!* other methods (Problems on some compilers) +!* Restored parmaters I50, I51, and LINEMX for IPC +!* to same as for other computers +!* Delinted using FLINT 2.83 +!* 1.16 24-May-93 +!* 1. Changed estimate of AP from 10% to 50% as per JKT and MJM +!* 2. Changed from assuming 50% admixture for mixed MULT.'s with +!* no MR to giving upper limits assuming pure +!* 3. Corrected several logic errors which taken together gave +!* incorrect results if an AP found on RI or TI +!* 4. Corrected minor output logic error in DUMP when END record +!* encountered +!* 5. Added check for '&' in column 77. Assume TI=DTI=(TI+DTI)/2 +!* 6. Removed assumption of parentheses for 'IF' in MULT field +!* 7. Correct out-of-bounds error in OUT2 +!* 8. Removed some redundant coding +!* 9. Added Date stamp to IBM PC +!* 1.16a 06-Aug-93 +!* 1. Corrected alignment problem for Alpha FORTRAN +!* 2. Removed two lines of never accessed coding +!* 1.17 16-Sep-93 Renormalization was not being done when there +!* were approximate intensities +!* 1.18 29-Nov-93 +!* 1. Added check for missing or non-numeric EG for insertion option +!* 2. Corrected logic errors in output of asymmtric uncertainties +!* 1.19 29-Apr-94 +!* 1. Corrected more logic errors in output of uncertainties +!* 2. Do not calculate BElW's, BMlW's as per MJM and JKT +!* 1.20 13-Dec-94 Check for option 7 (% photon branching) on PN and +!* calculate BR properly. +!* 1.20a 6-Mar-98 +!* 1. Corrected range error in OUT2ON +!* 2. Changed calls to VAX TIME/DATE routines to handle Y2K problem. +!* 1.20b 21-Sep-99 Corrected logic problems in outputting +!* asymmetric uncertainties +!* 1.3 7-Feb-2001 +!* 1. Added UNX MDC coding (RRK) +!* 2. Added Date_20 subroutine +!* 1.31 9-May-2002 +!* 1. Not recognizing asymmetric DT's - Fixed. +!* 2. Some logic problems in storing +DT and -DT - Fixed. +!* 3. Problems with approximate T1/2's when preceded by +!* asymmetric DT's - Fixed +!* 1.31a 15-Jul-2002 "2 G" records containing "BM1=",... confused +!* program - Fixed and added note to report to check the record + +!* 1.32 20-Oct-2004 Not recognizing t1/2 limits - Fixed +!* +!* Refer all comments and inquiries to +!* Thomas W. Burrows +!* National Nuclear Data Center +!* Building 197D +!* Brookhaven National Laboratory +!* Upton, New York 11973-5000 +!* U.S.A. +!* nndctb@bnl.gov +!* Telephone: 631-344-5084 +!* +!*********************************************************************** +! + PROGRAM RULER +! + IMPLICIT NONE +! + CHARACTER(LEN=*), PARAMETER :: version = 'RULER Version 3.2d' + CHARACTER(LEN=*), PARAMETER :: verdate = '20-Jan-2009' + CHARACTER(LEN=11) :: xdate +! +! I/O Unit definitions +! +! IDEFO = terminal output +! IDEFI= terminal input +! IRPT = report file +! IN = input dataset +! IOUT = output dataset +! COMMON /IOUNTS/ IDEFI, IDEFO, IRPT, IN, IOUT +! + INTEGER(KIND=4), PARAMETER :: idefi = 5, idefo = 6 + INTEGER(KIND=4), PARAMETER :: in=20,iout=21,irpt=22,iprob=23 +! + INTEGER(KIND=4), PARAMETER :: i50 = 52, i51 = i50 + 1 +! +!+++MDC+++ +!...VMS +!/ CHARACTER(LEN=*), PARAMETER :: nuldev = 'NL:' +!/ CHARACTER(LEN=*), PARAMETER :: ostat = 'NEW' +!...UNX +!/ CHARACTER(LEN=*), PARAMETER :: nuldev = '/dev/null' +!/ CHARACTER(LEN=*), PARAMETER :: ostat = 'REPLACE' +!...DVF + CHARACTER(LEN=*), PARAMETER :: nuldev = ' ' + CHARACTER(LEN=*), PARAMETER :: ostat = 'REPLACE' +!---MDC--- +! +! Mode of operation (0 - Compare; 1 - Calculate) +! + INTEGER(KIND=4) :: mode +! +! COMMON /STOREC/ LINE, CARD +! COMMON /STOREN/ LINCNT +! + INTEGER(KIND=4), PARAMETER :: linemx = 100 + CHARACTER(LEN=80), DIMENSION(linemx) :: line + CHARACTER(LEN=80) :: card + INTEGER(KIND=4) :: lincnt +! +! COMMON /MESSC / MESS +! + INTEGER(KIND=4), PARAMETER :: maxmes = 5 + CHARACTER(LEN=50), DIMENSION(maxmes) :: mess +! +! Gamma information required +! +! LINEG = record number of level record +! EG,DEG = gamma energy, uncertainty +! RI,DRI = relative photon intensity, uncertainty +! *MULT = multipolarity +! *DELTA,DDELTA = mixing ratio, uncertainty +! *DELUP,DELLOW = upper, lower bounds on mixing ratio +! *DELOPU,DELOPL = operators for mixing ratio ranges +! CC,DCC = total conversion coefficient, uncertainty +! TI,DTI = relative total intensity, uncertainty +! TIUP,TILOW = upper, lower bounds on total intensity +! TIOPUP,TIOPLO = operators for total intensity ranges +! * set only if BELW, BMLW are to be calculated +! +! COMMON /GAMMAC/ MULT, TIOPUP, TIOPLO, DELOPL, DELOPU +! + CHARACTER(LEN=13), DIMENSION(i50) :: mult + CHARACTER(LEN=2), DIMENSION(i50) :: delopl, delopu, tioplo, tiopup +! +! COMMON /GAMMAN/ EG, DEG, RI, DRI, DELTA, DDELTA, CC, DCC, TI, DTI,& +! & TIUP, TILOW, DELUP, DELLOW, LINEG +! + INTEGER(KIND=4), DIMENSION(i51) :: lineg + REAL(KIND=8), DIMENSION(i50) :: cc, dcc, ddelta, deg, dellow, & + & delta, delup, dri, dti, eg, ri, & + & ti, tilow, tiup + CHARACTER(LEN=10), DIMENSION(i50) :: flg + CHARACTER(LEN=60), DIMENSION(i50) :: widg +! +! Level information required +! +! T = half-life in seconds +! DT = symmetric uncertainty on T +! DTPLUS = + part of asymmetric uncertainty +! DTMIN = - part of asymmetric uncertainty +! TLOWER,TUPPER = lower,upper bounds on half-life +! TOPLOW,TOPUP = operators on half-life range +! TGIVEN = Half-life given +! +! COMMON /LEVELG/ TOPLOW, TOPUP +! + LOGICAL(KIND=4) :: tgiven + CHARACTER(LEN=2) :: toplow, topup +! +! COMMON /LEVELN/ T, DT, DTPLUS, DTMIN, TLOWER, TUPPER +! + REAL(KIND=8) :: dt, dtmin, dtplus, t, tlower, tupper +! +! COMMON /PART / PT, DPT, DPTPLU, DPTMIN +! + CHARACTER(LEN=2), DIMENSION(i50) :: ptoplow,ptopup + REAL(KIND=8), DIMENSION(i50) :: dpt,dptmin,dptplu,pt,ptlower, & + & ptupper +! +! COMMON /BRANCH/ BR, DBR +! + REAL(KIND=8) :: br, dbr +! +! COMMON /RULS / LIMITS +! + REAL(KIND=4), DIMENSION(2,5,2) :: limits +! +! Assumptions for DCC when not given + Character(LEN=1) :: ccsrc + REAL(KIND=4) :: ccass +! +! +! COMMON /SPTCAL/ SPT, DSPT, BSP +! + REAL(KIND=8), DIMENSION(2,5) :: bsp, dspt, spt +! +! Storage for branching and width data found on continuation records +! + INTEGER(KIND=4), PARAMETER :: maxsav=40 + INTEGER(KIND=4) :: nsav + LOGICAL(KIND=4) :: tadjust + CHARACTER(LEN=60), DIMENSION(maxsav) :: savcont + CHARACTER(LEN=10) :: tcomp + CHARACTER(LEN=5) :: dtcomp +! +! Save level energy in case partial gamma widths found on level +! continuation record +! + INTEGER(KIND=4), PARAMETER :: maxlsav=1000 + INTEGER(KIND=4) :: nlsav + CHARACTER(LEN=13), DIMENSION(maxlsav) :: lsav +! +! Flags to check results when width found on Level record +! + LOGICAL(KIND=4) :: chkds,chkds2,chkds3,chkds4,chklev + LOGICAL(KIND=4), DIMENSION(i50) :: chkgam +! +! Storage for output to new problem summary file +! + INTEGER(KIND=4) :: totprob ! Total number of problems encountered + INTEGER(KIND=4) :: nprobs + CHARACTER(LEN=20) :: egprob + CHARACTER(LEN=50) :: rptfile,probfile + CHARACTER(LEN=80) :: idprob, levprob, gamprob + CHARACTER(LEN=133), DIMENSion(30) :: linprob +! +! Fundamental constants from memo NS-1B/1 (82) +! MUN2B=MUN2/B=1.59234X10-38/10-24 +! + REAL(KIND=8) :: e2, h, hc, mun2b, r0 + DATA hc, h, e2, mun2b, r0/1.9733D-8, 0.6584D-18, 1.43998D-10, & + & 1.59234D-14, 1.2D-13/ +! + REAL(KIND=8) :: pi + DATA pi/3.14159265D+0/ +! + CALL RUN_RULER +! + STOP +! + CONTAINS +! +!*********************************************************************** +! + SUBROUTINE RUN_RULER +! + IMPLICIT NONE +! +! Local variables +! + LOGICAL(KIND=4) :: datact, perint + INTEGER(KIND=4) :: ia, iflag, ig, levcnt +! +! DATACT = .TRUE. If dataset being processed. +! .FALSE. If dataset not being processed. +! +! Set up I/O units +! + CALL OPENFI +! +! Initially there is no active dataset +! + datact = .FALSE. +! +! Zero arrays +! + CALL ZERARR +! +! Read in data + levcnt = 0 + DO WHILE (.TRUE.) + CALL READIN(datact,ia,ig,levcnt,perint) +! + IF(.NOT.datact) levcnt = 0 + CALL RENORM(ig,iflag,perint) +! Check on iflag error and mode out of order (TWB. 930524) + IF(iflag.NE.0) THEN +! +! Dump stored information if BELW,BMLW are to be calculated +! and there are insufficient data for calculation + CALL DUMP +! + CYCLE + END IF +! Moved call to Part12 before check on mode since both modes used +! it (TWB. 930524) +! +! Calculate partial half-lifes + CALL PART12(ig) +! +! +! Calculate recommended upper limits + CALL COMWID(ia) +! + IF(mode.EQ.1) THEN +! +! Calculate and insert BELWs,BMLW's +! + CALL OUT2(ig,ia) +! +! Zero arrays + CALL ZERARR +! + CYCLE + END IF +! +! Calculate and compare gamma strengths and report results + CALL OUT1(ig,ia) + IF(.NOT.datact) WRITE(irpt,'(A)')' ' +! +! Zero arrays +! + CALL ZERARR + END DO +! + WRITE(idefo,'(/A)')' Program completed successfully' +! + RETURN + END SUBROUTINE RUN_RULER +! +!*********************************************************************** +! + SUBROUTINE OPENFI +! +! Terminal dialogue and I/O Unit definitions +! +! + IMPLICIT NONE +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + CHARACTER(LEN=1), EXTERNAL :: LOCASE + REAL(KIND=4), EXTERNAL :: VALSTR +! +! Local variables +! + INTEGER(KIND=4), PARAMETER :: nf = 5 + CHARACTER(LEN=50), DIMENSION(nf) :: carray + CHARACTER(LEN=50), DIMENSION(nf-1) :: file + CHARACTER(LEN=100) :: line + CHARACTER(LEN=50) :: carrayuc + CHARACTER(LEN=100) :: input, output + INTEGER(KIND=4) :: npar, i +! +! DEFINE DEFAULT FILE NAMES +! + file(1) = 'ruler.inp' + file(2) = 'ruler.rpt' + file(3) = 'ruler.out' + file(4) = ' ' +! +! GET CURRENT DATE +! + XDAte = ' ' + CALL DATE_20(XDAte) +! +! GET COMMAND LINE PARAMETERS IF THERE ARE ANY +! + npar = nf + CALL GET_COMMAND_LINE('%',carray,npar) +! +! Check input for new file names +! + IF(npar.GT.1) THEN + DO i = 2, npar + IF(carray(i).EQ.' '.OR.carray(i).EQ.'#') CYCLE + file(i-1) = carray(i) + carrayuc = carray(i) + CALL UPSTR(carrayuc) + IF(carrayuc.EQ.'NULL') file(i-1) = nuldev + END DO + END IF +! +! Open standard output file if not blank +! + IF(file(4).NE.' ') CALL OPEN_FILE(idefo,file(4),ostat) +! + WRITE(idefo,'(/1X,A/)') version//' ['//verdate//']' +! +! GET INPUT ENSDF FILE NAME +! + 10 IF(npar.EQ.0) THEN + WRITE(idefo,'(5X,3A,$)')'INPUT DATA FILE (DEF: ', TRIM(file(1))& + & , '): ' + READ(idefi,'(A)') line + Call Lbsup(line) + IF(line.EQ.' ') line = file(1) + ELSE + line = file(1) + END IF + input = line + OPEN(UNIT=in,FILE=input,STATUS='OLD',ACTION='READ',ERR=20) +! +! REPORT FILE +! + IF(npar.EQ.0) THEN + WRITE(idefo,'(5X,3A,$)') 'OUTPUT REPORT FILE (DEF: ', & + & TRIM(file(2)), '): ' + READ(idefi,'(A)') line + IF(line.EQ.' ') line = file(2) + ELSE + line = file(2) + END IF + rptfile=line + CALL OPEN_FILE(irpt,line,ostat) + WRITE(irpt,'(/A,30X,A/)') version//' ['//verdate//']', & + & 'RUN ON '//XDAte +! + IF(npar.EQ.0) THEN + WRITE(idefo,'(5X,A,/10X,A,$)') 'Mode of Operation ', & + & '(R-Compare to RULs,B-Calculate BELW,BMLW)? ' + READ(idefi,'(A)') line + ELSE + line = carray(1)(1:1) + END IF +! + 25 Continue + IF(LOCASE(line(1:1)).EQ.'r') THEN + Mode = 0 + WRITE(irpt,'(9X,A/9X,A//)') 'Comparison to RUL''s Mode', & + & 'INPUT FILE: '//TRIM(input) + ELSE IF(LOCASE(line(1:1)).EQ.'b') THEN + Mode = 1 + IF(npar.EQ.0) THEN + WRITE(idefo,'(5X,3A,$)') & + & 'OUTPUT DATA SET FILE (DEF: ',TRIM(file(3)), '): ' + READ(idefi,'(A)') line + IF(line.EQ.' ') line = file(3) + ELSE + line = file(3) + END IF + output = line + CALL OPEN_FILE(iout,line,ostat) + line=line(1:INDEX(line,'.'))//'prob' + probfile=line + CALL OPEN_FILE(iprob,line,ostat) + WRITE(iprob,'(/A,30X,A/)') version//' ['//verdate//']', & + & 'RUN ON '//XDAte + Write(iprob,'(10X,A/)')'PROBLEMS SUMMARY' + totprob=0 + WRITE(irpt,'(9X,A/9X,A/9X,A//)') & + & 'Calculation and Insertion of BELWs,BMLWs Mode', & + & 'INPUT FILE: '//TRIM(input), 'OUTPUT FILE: '// & + & TRIM(output) + ELSE + WRITE(idefo,'(/10X,A/)') 'Please reenter mode' + WRITE(idefo,'(5X,A,/10X,A,$)') 'Mode of Operation ', & + & '(R-Compare to RULs,B-Calculate BELW,BMLW)? ' + READ(idefi,'(A)') line + GO TO 25 + END IF + IF(npar .EQ. 0)Then + Write(idefo,'(5X,A,$)') & + & 'Assumed DCC theory (Bricc-1.4%, Hsicc-3%, Other-?) - ' + READ(idefi,'(A)') line + If(Locase(line(1:1)).EQ.'h')Then + ccsrc='H' + ccass=0.03 + ElseIf(Locase(line(1:1)).EQ.'b' .OR. line(1:1).EQ.' ')Then + ccsrc='B' + ccass=0.014 + ElseIf(Locase(line(1:1)).EQ.'o')Then + ccsrc='O' + READ(idefi,'(A)') line + Call Lbsup(line) + ccass=Valstr(TRIM(line))/100 + Else + ccsrc='B' + ccass=0.014 + EndIf + Else + line=carray(4) + If(Locase(line(1:1)).EQ.'h')Then + ccsrc='H' + ccass=0.03 + ElseIf(Locase(line(1:1)).EQ.'b' .OR. line(1:1).EQ.' ')Then + ccsrc='B' + ccass=0.014 + ElseIf(Locase(line(1:1)).EQ.'o')Then + ccsrc='O' + line=carray(5) + Call Lbsup(line) + ccass=Valstr(TRIM(line))/100 + Else + ccsrc='B' + ccass=0.014 + EndIf + EndIf + If(ccsrc .EQ. 'H')Then + Write(irpt,'(9X,A,F7.4,A/)')'Assuming ',ccass, & + & ' theoretical DCC added in quadrature to DCC' + Else + Write(irpt,'(9X,A,F7.4,A/)')'Assuming ',ccass, & + & ' DCC from theory if DCC not given' + EndIf + RETURN +! + 20 WRITE(idefo,'(/10X,A/)') 'Input File not found. Please reenter' + GO TO 10 +! + RETURN + END SUBROUTINE OPENFI +! +!*********************************************************************** +! + SUBROUTINE OPEN_FILE(I,Ofile,Ostat) +! +! MACHINE DEPENDENT OUTPUT FILE OPEN ROUTINE +! + IMPLICIT NONE +! +! Dummy variables +! + CHARACTER(LEN=*) :: Ofile, Ostat + INTEGER(KIND=4) :: I +! +!+++MDC+++ +!...VMS +!/ OPEN(UNIT=I,FILE=Ofile,ACCESS='SEQUENTIAL',STATUS=Ostat, & +!/ & CARRIAGECONTROL='LIST') +!...UNX, DVF + OPEN(UNIT=I,FILE=Ofile,ACCESS='SEQUENTIAL',STATUS=Ostat) +!---MDC--- +! + RETURN + END SUBROUTINE OPEN_FILE +! +!*********************************************************************** +! + SUBROUTINE ZERARR +! +! ZERARR --- Zero's the arrays +! + IMPLICIT NONE +! +! Local variables +! + INTEGER(KIND=4) :: i +! + LINeg = 0 + MULt = ' ' + TIOplo = ' ' + TIOpup = ' ' + DELopl = ' ' + DELopu = ' ' + TIUp = 0. + TILow = 0. + DELta = 0. + DDElta = 0. + DELup = 0. + DELlow = 0. + TUPper = 0. + TLOwer = 0. + TOPlow = ' ' + TOPup = ' ' + PT = 0. + DPT = 0. + DPTplu = 0. + DPTmin = 0. + EG = 0. + DEG = 0. + RI = 0. + DRI = 0. + DELta = 0. + DDElta = 0. + CC = 0. + DCC = 0. + TI = 0. + DTI = 0. + flg=' ' + widg = ' ' +! + RETURN + END SUBROUTINE ZERARR +! +!*********************************************************************** +! + SUBROUTINE READIN(Datact,Ia,Ig,Levcnt,Perint) +! +! READS IN AND INTERPRETS ENSDF DATA SETS +! + IMPLICIT NONE +! +! Dummy arguments +! + LOGICAL(KIND=4) :: Datact, Perint + INTEGER(KIND=4) :: Ia, Ig, Levcnt +! +! Functions used +! + CHARACTER(LEN=0), INTRINSIC :: TRIM + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM + INTEGER(KIND=4), INTRINSIC :: INDEX, LEN, MAX0, MIN0 + INTEGER(KIND=4), EXTERNAL :: INDEXF, TYPSTR + REAL(KIND=8), EXTERNAL :: DVALST + REAL(KIND=8), INTRINSIC :: DABS +! +! Local variables +! + CHARACTER(LEN=20), SAVE :: ittsav + CHARACTER(LEN=70), SAVE :: tmpstr + CHARACTER(LEN=10), SAVE :: tsave + CHARACTER(LEN=6), SAVE :: test + CHARACTER(LEN=10) :: flsav + CHARACTER(LEN=70) :: widstr + LOGICAL(KIND=4), SAVE :: itset, nogamm, nonorm, isdup + INTEGER(KIND=4), SAVE :: i, icmess, iz, j, k + REAL(KIND=8), SAVE :: brit, dbrit, x +! + CHARACTER(LEN=4), DIMENSION(0:5,2) :: bw + DATA((bw(i,j),i=0,5),j=1,2)/'BE0W', 'BE1W', 'BE2W', 'BE3W', & + & 'BE4W', 'BE5W', ' ', 'BM1W', 'BM2W', 'BM3W', 'BM4W', & + & 'BM5W'/ +! +! Output messages and scratch character arrays +! +! Logical definitions +! DATACT=.TRUE. Dataset active +! .FALSE. No dataset active +! TGIVEN=.TRUE. Half-life or width given +! .FALSE. No half-life or width given +! NOGAMM=.TRUE. DSID indicates no gammas in dataset +! .FALSE. DSID indicates gammas in dataset +! ITSET =.TRUE. DSID indicates Isomeric Decay +! .FALSE. DSID indicates not Isomeric Decay +! NONORM=.TRUE. No normalization record found +! .FALSE. Normalization record found +! +! Linux GNU f77 needs a save to preserve logicals between reads. +! + IF(Levcnt.GT.1) GO TO 20 + LINcnt = 1 + 10 DO WHILE (.TRUE.) + READ(in,FMT='(A)',ERR=40,END=50) CARd + If(card(6:9) .EQ. ' L ')Then + levprob=line(1) + gamprob=' ' + egprob=' ' + chkgam=.FALSE. + nlsav=nlsav+1 + lsav(nlsav)=card(10:19) + Call Lbsup(lsav(nlsav)) + lsav(nlsav)=TRIM(lsav(nlsav))//' '//card(20:21) + EndIf +! +! Store card images in internal array for later creation of +! new ENSDF data set + IF(Mode.EQ.1) THEN + LINe(LINcnt) = CARd + LINcnt = LINcnt + 1 +! +! Check on array limit + IF(LINcnt.GT.linemx) THEN + IF(Ig.NE.0.AND.Levcnt.GT.1) THEN + WRITE(irpt,'(A)')'TOO MANY RECORDS (>LINEMX) TO STORE' + END IF + CALL DUMP + END IF + END IF +! + DO i = 1, 5 + MESs(i) = ' ' + END DO + icmess = 0 + IF(CARd(6:9).EQ.' '.AND.CARd(1:5).NE.' ') THEN + idprob=card + levprob=' ' + gamprob=' ' + levprob=' ' + linprob=' ' + egprob=' ' + nprobs=0 + IF(.NOT.Datact) THEN + tgiven = .FALSE. + nogamm = .TRUE. + itset = .FALSE. + nonorm = .TRUE. + Perint = .FALSE. + brit = 0. + dbrit = 0. + ittsav = '*****' + nlsav=0 + lsav=' ' + chkds=.FALSE. + chkds2=.FALSE. + chkds3=.FALSE. + chkds4=.FALSE. +! +! Checks DSID for existence of gammas in current dataset + IF(INDEX(CARd(10:39),'G)').NE.0) nogamm = .FALSE. + IF(INDEX(CARd(10:39),'GAMMA').NE.0) nogamm = .FALSE. + IF(INDEX(CARd(10:39),'COUL').NE.0) nogamm = .FALSE. + IF(INDEX(CARd(10:39),'DECAY').NE.0) THEN + nogamm = .FALSE. +! Is this an isomeric decay data set? + IF(INDEX(CARd(10:39),' IT ').NE.0) THEN + itset = .TRUE. + i = INDEX(CARd(1:39),'(') + j = INDEX(CARd(1:39),')') + IF(i.NE.0) THEN + IF(j.EQ.0) j = 40 + ittsav = CARd(i+1:j-1) + CALL LBSUP(ittsav) + END IF + END IF + END IF + Levcnt = 0 + Ig = 0 + Datact = .TRUE. + IF(nogamm) THEN + icmess = icmess + 1 + MESs(icmess) = ' NO GAMMAS EXPECTED.' + END IF +! +! Obtain Z and A from NUCID of DSID record + CALL AZ(CARd(1:5),Ia,iz) + WRITE(idefo,'(2A)')' CURRENT DATA SET: ', CARd(1:39) + IF(nogamm) THEN + WRITE(idefo,'(21X,A)') 'NO GAMMAS EXPECTED' + END IF + CALL WRTRPT + CYCLE + ELSE + icmess = icmess + 1 + MESs(icmess) = 'CURRENT DATASET NOT DONE.' + WRITE(idefo,'(1X,2A)') CARd(1:39), & + & ' FOUND NEW DSID BEFORE CURRENT DATASET DONE' + GO TO 60 + END IF + END IF + IF(nogamm) THEN + IF(CARd(1:10).NE.' ') THEN + CALL WRTRPT + CYCLE + END IF + END IF + IF(CARd(1:10).EQ.' ') THEN + If(chkds)Then + Write(idefo,'(A)')' Warning - T1/2''s in eV or as' + If(mode .EQ. 1)Write(idefo,'(A)') & + & ' Some records not modified - See report files' + EndIf + If(chkds2)Then + Write(idefo,'(A)') & + & ' Warning - BELW or BMLW found but no MULT, DPI unknown,'& + Write(idefo,'(2A)')' or mixed MULT with no MR - ', & + & 'See report files' + EndIf + If(chkds3)Then + Write(idefo,'(A)') & + & ' Warning - Problem with asymmetric uncertainties' & + Write(idefo,'(A)') & + & ' - See report files' + EndIf + If(chkds4)Then + Write(idefo,'(A)') & + & ' Some BELW''s or BMLW''s exceed RUL' + Write(idefo,'(A)') & + & ' - See report files' + EndIf + IF(Datact) THEN + Datact = .FALSE. + Levcnt = 0 + IF(itset.AND..NOT.nonorm) THEN + BR = brit + DBR = dbrit + END IF + GO TO 60 + ELSE + WRITE(idefo,'(1X,2A)') CARd(1:39), & + & 'END CARD FOUND WITH NO ACTIVE DATASET' + icmess = icmess + 1 + MESs(icmess) = 'END CARD WITH NO ACTIVE DATASET.' + CALL WRTRPT + Levcnt = 0 + CYCLE + END IF + END IF +! Get Branching Ratio from NORMALIZATION record for IT decay + IF(CARd(6:9).EQ.' N ') THEN + nonorm = .FALSE. + IF(itset) THEN + icmess = icmess + 1 + MESs(icmess) = ' BR TAKEN FROM N CARD.' + CALL DCNVSU(CARd(32:39),CARd(40:41),brit,dbrit) + IF(brit.EQ.0.) THEN + brit = 1. + icmess = icmess + 1 + MESs(icmess) = ' BR SET TO 1.' + END IF + IF(dbrit.EQ.0) THEN + IF(CARd(40:41).EQ.'AP') THEN + dbrit = 0.5*brit + icmess = icmess + 1 + MESs(icmess) = '50% DBR ASSUMED.' + END IF + IF(CARd(40:40).EQ.'G') THEN + icmess = icmess + 1 + MESs(icmess) = ' (1.+BR)/2 ASSUMED.' + brit = (1.+brit)/2. + dbrit = 1. - brit + END IF + IF(CARd(40:40).EQ.'L') THEN + icmess = icmess + 1 + MESs(icmess) = ' BR/2 ASSUMED.' + brit = brit/2. + dbrit = brit + END IF + END IF + END IF + CALL WRTRPT + CYCLE + END IF +! Check to see if Option 7 (%photon branching) is chosen on PN + IF(CARd(6:9).EQ.' PN ') THEN + IF(CARd(78:78).EQ.'7') Perint = .TRUE. + END IF +! GAMMA record + IF(CARd(6:9).EQ.' G ') THEN + gamprob=card + egprob=' ' + widstr=' ' + flsav=' ' + IF(Levcnt.LT.2) THEN + CALL WRTRPT + CYCLE + END IF + Ig = Ig + 1 +! + CALL PRCGAM(CARd,Ig,icmess) + widg(ig)=' ' +! + IF(CARd(77:77).EQ.'*') THEN + icmess = icmess + 1 + MESs(icmess) = ' PLACED TWICE.' + END IF + IF(CARd(77:77).EQ.'&') THEN + icmess = icmess + 1 + IF(TI(Ig).NE.0.) THEN + TI(Ig) = (TI(Ig)+DTI(Ig))/2. + DTI(Ig) = TI(Ig) + MESs(icmess) = & + & ' PLACED TWICE; TI=DTI=(TI+DTI)/2 ASSUMED.' + ELSE + MESs(icmess) = ' PLACED TWICE.' + END IF + END IF + IF(CARd(80:80).EQ.'?') THEN + icmess = icmess + 1 + MESs(icmess) = ' UNCERTAIN PLACEMENT.' + END IF + CALL WRTRPT + CYCLE + END IF +! GAMMA continuation record + IF(CARd(7:9).EQ.' G '.AND. CARd(6:6).NE.' ') THEN + If(Chkbs(card) .AND. mode.EQ.1)Then + If(mult(ig) .EQ. ' ')Then + icmess=icmess+1 + mess(icmess)=' BELW or BMLW FOUND BUT NO MULT.' + If(mode .EQ. 1)Then + nprobs=1 + linprob(1)=card + linprob(1)(90:)='BELW or BMLW FOUND BUT NO MULT' + levprob=line(1) + Call ERRRPT + EndIf + chkds2=.TRUE. + ElseIf(INDEX(mult(ig),'+').GT.0 .AND. dellow(ig).EQ.0.0 & + & .AND. delta(ig).EQ.0.0 .AND. delup(ig).EQ.0.0 .AND. & + & ddelta(ig).EQ.0.0 .AND. delopu(ig).EQ.' ' .AND. & + & delopl(ig).EQ.' ')Then + icmess=icmess+1 + If(INDEX(mult(ig),'E0') .EQ. 0)Then + mess(icmess)=' BELW and BMLW FOUND BUT NO MR.' + If(mode .EQ. 1)Then + nprobs=1 + linprob(1)=card + linprob(1)(90:)='BELW and BMLW FOUND BUT NO MR' + levprob=line(1) + Call ERRRPT + EndIf + chkds2=.TRUE. + Else + mess(icmess)=' BELW or BMLW FOUND BUT NO MR.' + If(mode .EQ. 1)Then + nprobs=1 + linprob(1)=card + linprob(1)(90:)='BELW or BMLW FOUND BUT NO MR' + levprob=line(1) + Call ERRRPT + EndIf + chkds2=.TRUE. + EndIf + ElseIf(INDEX(mult(ig),'+').GT.0 .AND. & + & (INDEX(mult(ig),'E').EQ.0 .OR. & + & INDEX(mult(ig),'M').EQ.0))Then + icmess=icmess+1 + mess(icmess)='BELW or BMLW FOUND BUT DPI UNKNOWN.' + If(mode .EQ. 1)Then + nprobs=1 + linprob(1)=card + linprob(1)(90:)= & + & 'BELW or BMLW FOUND BUT DPI UNKNOWN' + levprob=line(1) + Call ERRRPT + EndIf + chkds2=.TRUE. + Else + Do i=0,5 + Do j=1,2 + If(INDEX(card,bw(i,j)).GT.0 & + & .AND. INDEX(mult(ig),bw(i,j)(2:3)).EQ.0)Then + icmess=icmess+1 + mess(icmess)=' '//bw(i,j) + Call Addstr(mess(icmess), & + & LEN_TRIM(mess(icmess))+1, & + & ' disagrees with '//TRIM(mult(ig))//'.') + If(mode .EQ. 1)Then + nprobs=1 + linprob(1)=card + linprob(1)(90:)=bw(i,j) + linprob(1)=TRIM(linprob(1))// & + & ' disagrees with ' + linprob(1)=TRIM(linprob(1))//' '//mult(ig) + If(levprob .NE. ' ')levprob=line(1) + Call ERRRPT + EndIf + chkds2=.TRUE. + EndIf + EndDo + EndDo + EndIf + EndIf + i=Indexf(card,10,'WIDTHG') + If(i .GT. 0)Then + icmess = icmess + 1 + mess(icmess) = ' WIDTHG FOUND.' + widstr = card(i:) + Call Getstr(widstr) + widg(ig)=widstr + EndIf + i=Indexf(card,10,'FL=') + If(i .GT. 0)Then + icmess = icmess + 1 + mess(icmess) = ' FL= FOUND.' + flsav=card(Indexf(card,10,'=')+1:) + Call Getstr(flsav) + EndIf + i=INDEXF(card,10,'DE') + If(i .GT. 0)Then + icmess = icmess + 1 + mess(icmess) = ' DE FOUND - Ignored.' + EndIf + i=INDEXF(card,10,'DRI') + If(i .GT. 0)Then + icmess = icmess + 1 + mess(icmess) = ' DRI FOUND - Ignored.' + EndIf + i=INDEXF(card,10,'DTI') + If(i .GT. 0)Then + icmess = icmess + 1 + mess(icmess) = ' DTI FOUND - Ignored.' + EndIf + CALL WRTRPT + CYCLE + END IF +! LEVEL continuation record + IF(CARd(7:9).EQ.' L '.AND.CARd(6:6).NE.' ') THEN +! Check for and process T1/2 uncertainty + isdup=.FALSE. + i = INDEXF(CARd,10,'DT=') + IF(i.GT.0) THEN + IF(DT.GT.0) THEN + icmess = icmess + 1 + MESs(icmess) = ' IGNORING DT.' + ELSE + icmess = icmess + 1 + MESs(icmess) = ' DT FOUND.' + tmpstr = CARd(i+LEN('DT='):) + CALL GETSTR(tmpstr) + j = INDEX(tmpstr,'+') + k = INDEX(tmpstr,'-') + IF(j.GT.0.AND.k.GT.0) THEN + IF(j.LT.k) THEN + CALL DCNVSU(tsave,tmpstr(j+1:k-1),x,DTPlus) + CALL DCNVSU(tsave,tmpstr(k+1:LEN_TRIM(tmpstr)), & + & x,DTMin) + ELSE + CALL DCNVSU(tsave,tmpstr(k+1:j-1),x,DTMin) + CALL DCNVSU(tsave,tmpstr(j+1:LEN_TRIM(tmpstr)), & + & x,DTPlus) + END IF + icmess = icmess + 1 + MESs(icmess) = ' ASYMMETRIC UNCERTAINTY.' + ELSE + CALL DCNVSU(tsave,TRIM(tmpstr),x,DT) + END IF + END IF + END IF +! Check for and process T1/2 + i = INDEXF(CARd,10,'T') + IF(i.GE.10.AND. & + & (CARd(i-1:i-1).EQ.' '.OR.CARd(i-1:i-1).EQ.'$').AND. & + & (CARd(i+1:i+1).LT.'A'.OR.CARd(i+1:i+1).GT.'Z').AND. & + & CARd(i+1:).NE.' ') THEN +! + CALL PRCT12(CARd,i,tsave,icmess) +! + END IF +!TWB-20070531! Check for and process IT branching ratio +!TWB-20070531 i = INDEXF(CARd,10,'%IT') + tmpstr=card + i=INDEX(tmpstr,'%IT') + If(i .GT. 0)Then + icmess=icmess+1 + mess(icmess)=' %IT FOUND.' + EndIf + If(i .EQ. 0)Then + i=INDEX(tmpstr,'%G') + If(i .GT. 0)Then + icmess=icmess+1 + mess(icmess)=' %G FOUND.' + EndIf + EndIf + If(i .EQ. 0)Then + i=INDEX(tmpstr,'WIDTH') + If(i .GT. 0)Then + If(icmess .GT. 0)Then + Do j=1,icmess + If(mess(j) .EQ. ' PARTIAL WIDTH FOUND.') & + & isdup=.TRUE. + EndDo + EndIf + If(.NOT.isdup)Then + icmess=icmess+1 + mess(icmess)=' PARTIAL WIDTH FOUND.' + EndIf + EndIf + EndIf + Do While(i .GT. 0) + nsav=nsav+1 + j=INDEXF(tmpstr,i,'$') + If(j .GT. 0)Then + savcont(nsav)=tmpstr(i:j-1) + If(i .GT. 0)Then + tmpstr=tmpstr(1:i-1)//tmpstr(j:) + Else + tmpstr=tmpstr(j+1:) + EndIf + Else + savcont(nsav)=tmpstr(i:) + If(i .GT. 0)Then + tmpstr=tmpstr(1:i-1) + Else + tmpstr=' ' + EndIf + EndIf + i=INDEX(tmpstr,'%IT') + If(i .GT. 0)Then + icmess=icmess+1 + mess(icmess)=' %IT FOUND.' + EndIf + If(i .EQ. 0)Then + i=INDEX(tmpstr,'%G') + If(i .GT. 0)Then + icmess=icmess+1 + mess(icmess)=' %G FOUND.' + EndIf + EndIf + If(i .EQ. 0)Then + i=INDEX(tmpstr,'WIDTH') + If(i .GT. 0)Then + If(icmess .GT. 0)Then + Do j=1,icmess + If(mess(j) .EQ. ' PARTIAL WIDTH FOUND.') & + & isdup=.TRUE. + EndDo + EndIf + If(.NOT.isdup)Then + icmess=icmess+1 + mess(icmess)=' PARTIAL WIDTH FOUND.' + EndIf + EndIf + EndIf + EndDo +! +!TWB-20070531 CALL PRCIT(CARd,i,Mode,tsave,ittsav,brit,dbrit,icmess) +! + CALL WRTRPT + CYCLE + END IF + IF(CARd(6:9).NE.' L ') THEN + CALL WRTRPT + CYCLE + END IF +! LEVEL record + Levcnt = Levcnt + 1 + IF(Levcnt.GT.2) THEN + IF(.NOT.(.NOT.tgiven.OR.Ig.EQ.0)) THEN + GO TO 60 + Else + Do i=1,ig + If(widg(i) .NE. ' ')Goto 60 + EndDo + END IF + CALL DUMP + Levcnt = Levcnt - 1 + ELSE + CALL DUMP + END IF + EXIT + END DO + 20 Ig = 0. + BR = 1. + DBR = 0. + T = 0. + DT = 0. + DTPlus = 0. + DTMin = 0. + TLOwer = 0. + TUPper = 0. + TOPlow = ' ' + TOPup = ' ' + tgiven = CARd(40:49).NE.' ' + If(INDEX(card(40:49),'EV').GT.0 .OR. INDEX(card(40:49),'AS').GT.0) & + & Then + chklev=.TRUE. + Else + chklev=.FALSE. + EndIf + test = ' ' + nsav=0 + IF(tgiven) THEN + tsave = CARd(40:49) + CALL LBSUP(tsave) + tcomp=tsave + IF(tsave.EQ.'STABLE') GO TO 30 + test = CARd(50:55) + Call Lbsup(test) + dtcomp=test + IF(CARd(49:49).EQ.' ' .AND. TYPSTR(test(1:1)).EQ.1) THEN + tmpstr = CARd(40:55) + ELSE + If(TYPSTR(test(1:1)).EQ.1) THEN + tmpstr = CARd(40:49)//' '//CARd(50:55) + ELSE + tmpstr = CARd(40:49) + END IF + END IF + CALL READT(tmpstr,T,DT) + IF(T.LT.0.) THEN + T = 0. + tgiven = .FALSE. + tsave = ' ' + icmess = icmess + 1 + MESs(icmess) = ' BAD T1/2 UNIT.' + GO TO 30 + END IF + ELSE + icmess = icmess + 1 + MESs(icmess) = ' NO HALF-LIFE GIVEN.' + END IF + IF(DT.EQ.0.AND.tsave.NE.' ') THEN + i = INDEX(test,'+') + j = INDEX(test,'-') + IF(i.GT.0.AND.j.GT.0) THEN + tmpstr = tsave + IF(i.LT.j) THEN + tmpstr = TRIM(tmpstr)//' '//test(i+1:j-1) + Call READT(tmpstr,t,dtplus) + tmpstr = tsave + tmpstr = TRIM(tmpstr)//' '//test(j+1:) + Call READT(tmpstr,t,dtmin) + ELSE + tmpstr = TRIM(tmpstr)//' '//test(j+1:i-1) + Call READT(tmpstr,t,dtmin) + tmpstr = tsave + tmpstr = TRIM(tmpstr)//' '//test(i+1:) + Call READT(tmpstr,t,dtplus) + END IF + icmess = icmess + 1 + MESs(icmess) = ' ASYMMETRIC UNCERTAINTY.' + END IF + IF(test.EQ.'AP') THEN + IF(Mode.EQ.0) THEN + DT = 0.5*T + icmess = icmess + 1 + MESs(icmess) = ' 50% DT ASSUMED.' + ELSE + TOPlow = 'AP' + TOPup = 'AP' + TLOwer = T + T = 0.0 + END IF + END IF + IF(test(1:1).EQ.'L') THEN + IF(Mode.EQ.1) THEN + TOPup = test(1:2) + TUPper = T + END IF + icmess = icmess + 1 + MESs(icmess) = ' UPPER LIMIT ON T.' + END IF + IF(test(1:1).EQ.'G') THEN + IF(Mode.EQ.1) THEN + TOPlow = test(1:2) + TLOwer = T + END IF + icmess = icmess + 1 + MESs(icmess) = ' LOWER LIMIT ON T.' + END IF + END IF + 30 Continue + CALL WRTRPT + GO TO 10 +! +! Error messages + 40 WRITE(idefo,'(1X,2A)') LINe(LINcnt)(1:39), ' ERROR IN INPUT FILE' + WRITE(irpt,'(A)') 'ERROR IN INPUT FILE' + STOP +! + 50 Continue + If(totprob .GT. 0)Then + Write(mess(1),'(I3)')totprob + Call Lbsup(mess(1)) + Call Addstr(mess(1),1,' >>>>> ') + If(totprob .EQ. 1)Then + mess(1)=TRIM(mess(1))//' possible problem encountered.' + Else + mess(1)=TRIM(mess(1))//' possible problems encountered.' + EndIf + Write(idefo,'(//A)')mess(1) + Write(idefo,'(2A)')' >>>>> Problems summarized in: ', & + & TRIM(probfile) + Write(idefo,'(2A/)')' >>>>> Full details in: ',TRIM(rptfile) + Else + Close(iprob,STATUS='DELETE') + EndIf + IF(.NOT.Datact) THEN + WRITE(idefo,'(/A)') ' Program completed successfully' + WRITE(irpt,'(A)') 'NORMAL TERMINATION OF PROGRAM' + ELSE + WRITE(idefo,'(/A)') ' Program failed' + WRITE(irpt,'(A)') 'ABNORMAL TERMINATION OF PROGRAM' + END IF + STOP + 60 LINeg(Ig+1) = LINcnt - 1 +! + RETURN + END SUBROUTINE READIN +! +!*********************************************************************** +! + SUBROUTINE PRCT12(Card,I,Tsave,Icmess) +! +! Check for and process T1/2 +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=80) :: Card + CHARACTER(LEN=10) :: Tsave + INTEGER(KIND=4) :: I, Icmess +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM, INDEX, LEN, MAX0 + REAL(KIND=8), INTRINSIC :: DSQRT +! +! Local variables +! + CHARACTER(LEN=70) :: tmpstr + INTEGER(KIND=4) :: j, k + REAL(KIND=8) :: dx, x +! + PT = 0.0 + DPT = 0.0 + DPTplu = 0.0 + DPTmin = 0.0 +! +! Stores level half-life information +! + IF(Tgiven) THEN + Icmess = Icmess + 1 + MESs(Icmess) = ' HALF-LIFE IGNORED.' + ELSE + tmpstr = Card(I+LEN('T'):) + CALL GETSTR(tmpstr) + Icmess = Icmess + 1 + MESs(Icmess) = ' HALF-LIFE FOUND.' + I = INDEX(tmpstr,'=') + IF(I.GT.0) THEN + tmpstr = tmpstr(I+1:) + CALL LBSUP(tmpstr) + Tsave = tmpstr(1:INDEX(tmpstr,' ')-1) + CALL READT(tmpstr,T,DT) + IF(T.LT.0.) GO TO 5 + If(INDEX(tmpstr,'EV').GT.0 .OR. INDEX(tmpstr,'AS').GT.0)Then + chklev=.TRUE. + Else + chklev=.FALSE. + EndIf + IF(DT.EQ.0) THEN + tmpstr = tmpstr(INDEX(tmpstr,' ')+1:) + CALL LBSUP(tmpstr) + I = INDEX(tmpstr,'+') + j = INDEX(tmpstr,'-') + IF(I.GT.0.AND.j.GT.0) THEN + IF(I.LT.j) THEN + CALL DCNVSU(Tsave,tmpstr(I+1:j-1),x,DTPlus) + CALL DCNVSU(Tsave,tmpstr(j+1:LEN_TRIM(tmpstr)),x, & + & DTMin) + ELSE + CALL DCNVSU(Tsave,tmpstr(j+1:I-1),x,DTMin) + CALL DCNVSU(Tsave,tmpstr(I+1:LEN_TRIM(tmpstr)),x, & + & DTPlus) + END IF + Icmess = Icmess + 1 + MESs(Icmess) = ' ASYMMETRIC UNCERTAINTY.' + END IF + END IF + END IF + j = MAX0(INDEX(tmpstr,'G'),INDEX(tmpstr,'>')) + k = MAX0(INDEX(tmpstr,'L'),INDEX(tmpstr,'<')) + IF(j.GT.0.OR.k.EQ.0) THEN + IF(j.GT.0.AND.k.GT.0) THEN + Icmess = Icmess + 1 + MESs(Icmess) = ' RANGE ON T1/2.' + IF(j.LT.k) THEN + I = LEADNO(tmpstr(1:k-1),j+1) + CALL READT(tmpstr(I:k-1),TLOwer,dx) + IF(TLOwer.LT.0.) GO TO 5 + TOPlow = tmpstr(j:I-1) + TLOwer = TLOwer - dx + IF(TLOwer.LT.0.) TLOwer = 0. + I = LEADNO(TRIM(tmpstr),k+1) + CALL READT(tmpstr(I:),TUPper,dx) + IF(TUPper.LT.0.) GO TO 5 + TOPup = tmpstr(k:I-1) + TUPper = TUPper + dx + ELSE + I = LEADNO(TRIM(tmpstr),j+1) + CALL READT(tmpstr(I:),TLOwer,dx) + IF(TLOwer.LT.0.) GO TO 5 + TOPlow = tmpstr(j:I-1) + TLOwer = TLOwer - dx + IF(TLOwer.LT.0.) TLOwer = 0. + I = LEADNO(tmpstr(1:j-1),k+1) + CALL READT(tmpstr(I:j-1),TUPper,dx) + IF(TUPper.LT.0.) GO TO 5 + TOPup = tmpstr(k:I-1) + TUPper = TUPper + dx + END IF + ELSE IF(j.GT.0) THEN + I = LEADNO(TRIM(tmpstr),j+1) + CALL READT(tmpstr(I:),TLOwer,dx) + IF(TLOwer.LT.0.) GO TO 5 + TOPlow = tmpstr(j:I-1) + TLOwer = TLOwer - dx + IF(TLOwer.LT.0.) TLOwer = 0. + Icmess = Icmess + 1 + MESs(Icmess) = ' LOWER LIMIT ON T1/2.' + ELSE + I = LEADNO(TRIM(tmpstr),k+1) + CALL READT(tmpstr(I:),TUPper,dx) + IF(TUPper.LT.0.) GO TO 5 + TOPup = tmpstr(k:I-1) + TUPper = TUPper + dx + Icmess = Icmess + 1 + MESs(Icmess) = ' UPPER LIMIT ON T1/2.' + END IF + END IF + I = INDEX(tmpstr,'AP') + IF(I.GT.0) THEN + tmpstr = tmpstr(I+LEN('AP'):) + CALL LBSUP(tmpstr) + CALL READT(tmpstr,T,DT) + IF(T.LT.0.) GO TO 5 + IF(Mode.EQ.0) THEN + DT = DSQRT((0.5*T)**2+DT**2) + Icmess = Icmess + 1 + MESs(Icmess) = ' 50% DT ASSUMED.' + ELSE + TOPlow = 'AP' + TLOwer = T + END IF + END IF + 5 IF(T.LT.0..OR.TLOwer.LT.0..OR.TUPper.LT.0.) THEN + Icmess = Icmess + 1 + MESs(Icmess) = ' BAD T1/2 UNIT.' + Tgiven = .FALSE. + ELSE + Tgiven = .TRUE. + END IF + END IF +! + RETURN + END SUBROUTINE PRCT12 +! +!*********************************************************************** +! + SUBROUTINE PRCIT(Card,I,Tsave,Ittsav,Brit,Dbrit,Icmess) +! +! Check for and process IT branching ratio +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=80) :: Card + CHARACTER(LEN=20) :: Ittsav + CHARACTER(LEN=10) :: Tsave + INTEGER(KIND=4) :: I, Icmess + REAL(KIND=8) :: Brit, Dbrit +! +! Functions used +! + CHARACTER(LEN=8), INTRINSIC :: TRIM + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM, INDEX, LEN, MAX0 + INTEGER(KIND=4), EXTERNAL :: INDEXF + REAL(KIND=8), INTRINSIC :: DABS, DSQRT +! +! Local variables +! + CHARACTER(LEN=70) :: tmpstr + INTEGER(KIND=4) :: j, k, l + REAL(KIND=8) :: dx, dy, x, y +! +! Stores %IT +! + IF(I.GT.0) THEN + tmpstr = Card(I+LEN('%IT'):) + CALL GETSTR(tmpstr) + Icmess = Icmess + 1 + MESs(Icmess) = ' %IT FOUND.' + IF(tmpstr(1:1).EQ.'=') THEN + tmpstr = tmpstr(2:) + CALL GETSTR(tmpstr) + j = INDEX(tmpstr,' ') + IF(j.GT.0.AND.j.LT.LEN_TRIM(tmpstr)) THEN + CALL DCNVSU(tmpstr(1:j-1),tmpstr(j+1:),BR,DBR) + ELSE + CALL DCNVSU(TRIM(tmpstr),' ',BR,DBR) + END IF + BR = BR/100. + DBR = DBR/100. + END IF + j = MAX0(INDEX(tmpstr,'G'),INDEX(tmpstr,'>')) + k = MAX0(INDEX(tmpstr,'L'),INDEX(tmpstr,'<')) + IF(j.GT.0.OR.k.GT.0) THEN + IF(j.GT.0.AND.k.GT.0) THEN + Icmess = Icmess + 1 + MESs(Icmess) = ' (LOWER+UPPER)/2 ASSUMED.' + IF(j.LT.k) THEN + I = LEADNO(tmpstr(1:k-1),j+1) + l = INDEXF(tmpstr,I,' ') + IF(l.GT.0.AND.l.LT.k-1) THEN + CALL DCNVSU(tmpstr(I:l-1),tmpstr(l+1:k-1),x,dx) + ELSE + CALL DCNVSU(tmpstr(I:l-1),' ',x,dx) + END IF + I = LEADNO(TRIM(tmpstr),k+1) + l = INDEXF(tmpstr,I,' ') + IF(l.GT.0.AND.l.LT.LEN_TRIM(tmpstr)) THEN + CALL DCNVSU(tmpstr(I:l-1),tmpstr(l+1:),y,dy) + ELSE + CALL DCNVSU(tmpstr(I:l-1),' ',y,dy) + END IF + ELSE + I = LEADNO(TRIM(tmpstr),j+1) + l = INDEXF(tmpstr,I,' ') + IF(l.GT.0.AND.l.LT.LEN_TRIM(tmpstr)) THEN + CALL DCNVSU(tmpstr(I:l-1),tmpstr(l+1:),x,dx) + ELSE + CALL DCNVSU(tmpstr(I:l-1),' ',x,dx) + END IF + I = LEADNO(tmpstr(1:j-1),k+1) + l = INDEXF(tmpstr,I,' ') + IF(l.GT.0.AND.l.LT.j-1) THEN + CALL DCNVSU(tmpstr(I:l-1),tmpstr(l+1:j-1),y,dy) + ELSE + CALL DCNVSU(tmpstr(I:l-1),' ',y,dy) + END IF + END IF + y = y + dy + x = x - dx + BR = (x+y)/2. + DBR = y - BR + BR = BR/100. + DBR = DBR/100. + ELSE IF(j.GT.0) THEN + I = LEADNO(TRIM(tmpstr),j+1) + l = INDEXF(tmpstr,I,' ') + IF(l.GT.0.AND.l.LT.LEN_TRIM(tmpstr)) THEN + CALL DCNVSU(tmpstr(I:l-1),tmpstr(l+1:),x,dx) + ELSE + CALL DCNVSU(TRIM(tmpstr),' ',x,dx) + END IF + x = x - dx + BR = (100.+x)/200. + DBR = 1. - BR + Icmess = Icmess + 1 + MESs(Icmess) = ' (1.+%IT)/2 ASSUMED.' + ELSE + I = LEADNO(TRIM(tmpstr),k+1) + l = INDEXF(tmpstr,I,' ') + IF(l.GT.0.AND.l.LT.LEN_TRIM(tmpstr)) THEN + CALL DCNVSU(tmpstr(I:l-1),tmpstr(l+1:),x,dx) + ELSE + CALL DCNVSU(TRIM(tmpstr),' ',x,dx) + END IF + x = x + dx + BR = x/200. + DBR = BR + Icmess = Icmess + 1 + MESs(Icmess) = ' %IT/2 ASSUMED.' + END IF + END IF + I = INDEX(tmpstr,'AP') + IF(I.GT.0) THEN + tmpstr = tmpstr(I+LEN('AP'):) + CALL LBSUP(tmpstr) + j = INDEX(tmpstr,' ') + IF(j.GT.0.AND.j.LT.LEN_TRIM(tmpstr)) THEN + CALL DCNVSU(tmpstr(1:j-1),tmpstr(j+1:),BR,DBR) + ELSE + CALL DCNVSU(TRIM(tmpstr),' ',BR,DBR) + END IF + BR = BR/100. + DBR = DBR/100. + Icmess = Icmess + 1 + MESs(Icmess) = ' 50% DIT ASSUMED.' + DBR = DSQRT(DBR**2+0.25*BR**2) + END IF + IF(Tsave.EQ.Ittsav.AND.Brit.NE.0.) THEN + IF(DABS(Brit-BR)/Brit.GT.0.001) THEN + Icmess = Icmess + 1 + MESs(Icmess) = ' CONFLICT WITH BR.' + ELSE IF(Dbrit.GT.0.) THEN + IF(DABS(Dbrit-DBR)/Dbrit.GT.0.1) THEN + Icmess = Icmess + 1 + MESs(Icmess) = ' CONFLICT WITH BR.' + END IF + ELSE IF(DBR.GT.0.) THEN + IF(DABS(Dbrit-DBR)/DBR.GT.0.1) THEN + Icmess = Icmess + 1 + MESs(Icmess) = ' CONFLICT WITH BR.' + END IF + END IF + ELSE IF(BR.EQ.0.) THEN + IF(Mode.EQ.0) THEN + BR = 1.0 + DBR = 0.0 + Icmess = Icmess + 1 + MESs(Icmess) = ' %IT SET TO 100.' + ELSE + BR = 0.5 + DBR = 0.5 + Icmess = Icmess + 1 + MESs(Icmess) = ' %IT SET TO 50+-50.' + END IF + END IF + END IF +! + RETURN + END SUBROUTINE PRCIT +! +!*********************************************************************** +! + SUBROUTINE PRCGAM(Card,Ig,Icmess) +! +! Gamma record +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=80) :: Card + INTEGER(KIND=4) :: Icmess, Ig +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX + REAL(KIND=8), INTRINSIC :: DABS, DSQRT +! +! Local variables +! + CHARACTER(LEN=70) :: tmpstr + Character(LEN=9) :: dummy1 + Character(LEN=2) :: dummy2 +! *JKT 12/16/2008 + DELup(Ig) = 0. + DELlow(Ig) = 0. +! *JKT 12/16/2008 +! Changes by J. Katakra + +! *JK 01/20/2009 + TIup(Ig)=0. + TIlow(Ig)=0. + TIopup(Ig)=' ' + TIoplo(Ig)=' ' +! *JK 01/20/2009 + +! +! Stores gamma information +! +! Get the energy + CALL DCNVSU(Card(10:19),Card(20:21),EG(Ig),DEG(Ig)) + IF(DEG(Ig).EQ.0.) THEN + DEG(Ig) = 1. + Icmess = Icmess + 1 + MESs(Icmess) = ' +-1 KEV ASSIGNED.' + END IF +! Get the photon intensity + CALL DCNVSU(Card(22:29),Card(30:31),RI(Ig),DRI(Ig)) + IF(DRI(Ig).EQ.0.) THEN + IF(Card(30:31).EQ.'AP') THEN + DRI(Ig) = 0.5*RI(Ig) + Icmess = Icmess + 1 + MESs(Icmess) = ' 50% DRI ASSUMED.' + END IF + IF(Card(30:30).EQ.'L') THEN + RI(Ig) = RI(Ig)/2. + DRI(Ig) = RI(Ig) + Icmess = Icmess + 1 + MESs(Icmess) = ' RI/2 ASSUMED.' + END IF + IF(Card(30:30).EQ.'G') THEN + DRI(Ig) = 0 + Icmess = Icmess + 1 + MESs(Icmess) = 'DRI ASSUMED 0.' + END IF + END IF +! Get the multipolarity + IF(Mode.EQ.1) THEN + LINeg(Ig) = LINcnt - 1 + MULt(Ig) = Card(32:41) + END IF +! Get the mixing ratio + CALL DCNVSU(Card(42:49),Card(50:55),DELta(Ig),DDElta(Ig)) + DELta(Ig) = DABS(DELta(Ig)) + IF(DDElta(Ig).EQ.0.) THEN + tmpstr = Card(50:55) + CALL LBSUP(tmpstr) + IF(INDEX(tmpstr,'L').NE.0) THEN + DELup(Ig) = DELta(Ig) + DELopu(Ig) = tmpstr(1:2) + END IF + IF(INDEX(tmpstr,'G').NE.0) THEN + DELlow(Ig) = DELta(Ig) + DELopl(Ig) = tmpstr(1:2) + END IF + IF(INDEX(tmpstr,'A').NE.0) THEN + DELup(Ig) = DELta(Ig) + DELopu(Ig) = tmpstr(1:2) + END IF + END IF +901 FORMAT(' ',I3,5x,F10.2,A10,3F10.3) +! Get the conversion coefficient + CALL DCNVSU(Card(56:62),Card(63:64),CC(Ig),DCC(Ig)) +! Take into account theoretical uncertainty to assume + IF(CC(Ig) .NE. 0.) THEN + If(ccsrc .EQ. 'H')Then + DCC(Ig) = DSQRT((0.03*CC(Ig))**2+DCC(Ig)**2) + Icmess = Icmess + 1 + MESs(Icmess) = ' 3% UNC. ADDED TO DCC.' + ElseIf(DCC(ig) .EQ. 0.0)Then + dcc(ig)=ccass*cc(ig) + icmess=icmess+1 + Call Dcnvus(cc(ig),dcc(ig),dummy1,9,dummy2,2) + Call Lbsup(dummy2) + mess(icmess)=' DCC of '//TRIM(dummy2)//' from theory assumed' + EndIf + END IF +! Get the total transition intensity + CALL DCNVSU(Card(65:74),Card(75:76),TI(Ig),DTI(Ig)) + IF(DTI(Ig).EQ.0.) THEN + IF(Card(75:76).EQ.'AP') THEN + IF(Mode.EQ.0) THEN + DTI(Ig) = 0.5*TI(Ig) + Icmess = Icmess + 1 + MESs(Icmess) = ' 50% DTI ASSUMED.' + ELSE + TIOpup(Ig) = Card(75:76) + TIUp(Ig) = TI(Ig) + TI(Ig) = 0. + END IF + END IF + IF(Card(75:75).EQ.'L') THEN + IF(Mode.EQ.0) THEN + TI(Ig) = TI(Ig)/2. + DTI(Ig) = TI(Ig) + Icmess = Icmess + 1 + MESs(Icmess) = ' TI/2 ASSUMED.' + ELSE + TIOpup(Ig) = Card(75:76) + TIUp(Ig) = TI(Ig) + TI(Ig) = 0. + END IF + END IF + IF(Card(75:75).EQ.'G') THEN + IF(Mode.EQ.0) THEN + DTI(Ig) = 0. + Icmess = Icmess + 1 + MESs(Icmess) = ' DTI ASSUMED 0.' + ELSE + TIOplo(Ig) = Card(75:76) + TILow(Ig) = TI(Ig) + TI(Ig) = 0. + END IF + END IF + END IF + IF(RI(Ig).EQ.0..AND.TI(Ig).EQ.0.) THEN + Icmess = Icmess + 1 + MESs(Icmess) = ' NO RI OR TI.' +! Find total transition intensity if not given + ELSE IF(Card(65:76).EQ.' '.AND.Mode.EQ.1) THEN + TI(Ig) = RI(Ig)*(1+CC(Ig)) + DTI(Ig) = TI(Ig)*DSQRT((DRI(Ig)/RI(Ig))**2+(DCC(Ig)/(1+CC(Ig)))& + & **2) + IF(Card(30:31).EQ.'AP') THEN + TIUp(Ig) = TI(Ig) + TIOpup(Ig) = 'AP' + TI(Ig) = 0. + DTI(Ig) = 0. + END IF + IF(Card(30:31).EQ.'G') THEN + IF(DCC(Ig).NE.0..OR.Card(63:64).EQ.'G') THEN + TILow(Ig) = TI(Ig) + TIOplo(Ig) = Card(30:31) + TI(Ig) = 0. + DTI(Ig) = 0. + ELSE + TI(Ig) = 0. + DTI(Ig) = 0. + Icmess = Icmess + 1 + MESs(Icmess) = ' CANNOT STORE TI.' + END IF + END IF + IF(Card(30:31).EQ.'L') THEN + IF(DCC(Ig).NE.0..OR.Card(63:64).EQ.'L') THEN + TIUp(Ig) = TI(Ig) + TIOpup(Ig) = Card(30:31) + TI(Ig) = 0. + DTI(Ig) = 0. + ELSE + TI(Ig) = 0. + DTI(Ig) = 0. + Icmess = Icmess + 1 + MESs(Icmess) = ' CANNOT STORE TI.' + END IF + END IF + END IF +! + RETURN + END SUBROUTINE PRCGAM +! +!*********************************************************************** +! + SUBROUTINE GETSTR(Str) +! +! Supresses leading blanks of a string and removes characters +! following "$" or "(" including the delimiter +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Str +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX +! +! Local variables +! + INTEGER(KIND=4) :: i +! + CALL LBSUP(Str) + i = INDEX(Str,'$') - 1 + IF(i.GT.0) Str = Str(1:i) + i = INDEX(Str,'(') - 1 + IF(i.GT.0) Str = Str(1:i) +! + RETURN + END SUBROUTINE GETSTR +! +!*********************************************************************** +! + INTEGER(KIND=4) FUNCTION LEADNO(Str,Pos) +! +! Returns position of first number in STR with search starting +! at character position POS +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Str + INTEGER(KIND=4) :: Pos +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: LEN +! +! Local variables +! + INTEGER(KIND=4) :: i +! + DO i = Pos, LEN(Str) + IF(Str(i:i).GE.'0'.AND.Str(i:i).LE.'9') EXIT + END DO + LEADNO = i +! + RETURN + END FUNCTION LEADNO +! +!*********************************************************************** +! + SUBROUTINE WRTRPT +! + IMPLICIT NONE +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM +! +! Local variables +! + CHARACTER(LEN=80), PARAMETER :: blank=' ' + CHARACTER(LEN=180) :: str + INTEGER(KIND=4) :: i, j, k +! +! combine card info and separate messages into STR +! + str = CARd + DO i = 1, maxmes + k = LEN_TRIM(str) + IF(k.LT.80) k = 80 + IF(MESs(i).NE.' ') str(k+1:) = MESs(i) + END DO +! + IF(str.EQ.' ') THEN + WRITE(irpt,'(A)')' ' + RETURN + END IF + IF(LEN_TRIM(str).LE.132) THEN + WRITE(irpt,'(A)') TRIM(str) + ELSE +100 Continue + Do i=LEN_TRIM(str)-1,81,-1 + If(str(i:i).EQ.'.' .AND. i.LE.132)GoTo 200 + EndDo + Write(irpt,'(A)')str(1:132) + Write(irpt,'(80X,A)')TRIM(str(133:)) + GoTo 300 +200 Continue + Write(irpt,'(A)')str(1:i) + If(80+LEN_TRIM(str(i+1:)) .LE. 132)Then + Write(irpt,'(80X,A)')TRIM(str(i+1:)) + Else + str=blank//str(i+1:) + GoTo 100 + EndIf + END IF +! +300 Continue + RETURN + END SUBROUTINE WRTRPT +! +!*********************************************************************** +! + SUBROUTINE DUMP +! +! Clears stored data and dumps to output file +! + IMPLICIT NONE +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM +! +! Local variables +! + INTEGER(KIND=4) :: i +! + IF(LINcnt.LE.2) GO TO 10 + IF(Mode.EQ.0) GO TO 10 + DO i = 1, LINcnt - 2 + WRITE(iout,'(A)') LINe(i) + END DO + 10 LINe(1) = CARd + LINcnt = 2 + IF(LEN_TRIM(CARd).EQ.0) THEN + IF(Mode.EQ.1) WRITE(iout,'(A)') CARd + CALL WRTRPT + END IF +! + RETURN + END SUBROUTINE DUMP +! +!*********************************************************************** +! + SUBROUTINE PART12(ig) +! +! Calculates partial half-lifes +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: ig +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX + INTEGER(KIND=4), EXTERNAL :: INDEXF + REAL(KIND=4) :: ABS,SQRT + CHARACTER(LEN=*), INTRINSIC :: TRIM +! +! Local variables +! + INTEGER(KIND=4) :: i,j,k,l,pass + Logical(KIND=4) :: isfirst,ispar + REAL(KIND=4) :: comp,dcomp,elbot,delbot,eltop,deltop + REAL(KIND=8) :: dum + CHARACTER(LEN=2) :: sdx + CHARACTER(LEN=10) :: sx + CHARACTER(LEN=30) :: tmpstr + Character(LEN=60), DIMENSION(maxlsav) :: parg +! + isfirst=.TRUE. + pt=0.0 + dpt=0.0 + dptmin=0.0 + dptplu=0.0 + ptlower=0.0 + ptupper=0.0 + ptoplow=' ' + ptopup=' ' + ispar=.FALSE. + parg=' ' + Call Decide(ispar,parg) + If(ispar)Then + i=INDEX(lsav(nlsav),' ') + If(i .GT. 0)Then + sx=lsav(nlsav)(1:i-1) + sdx=lsav(nlsav)(i+1:) + Call Lbsup(sdx) + Else + sx=lsav(nlsav) + sdx=' ' + EndIf + Call Cnvs2u(sx,sdx,eltop,deltop) + Do i=1,nlsav-1 + If(parg(i).NE.' ')Then + j=INDEX(lsav(i),' ') + If(j .GT. 0)Then + sx=lsav(i)(1:j-1) + sdx=lsav(i)(j+1:) + Call Lbsup(sdx) + Else + sx=lsav(i) + sdx=' ' + EndIf + Call Cnvs2u(sx,sdx,elbot,delbot) + comp=eltop-elbot + dcomp=SQRT(deltop*deltop+delbot*delbot) + Do j=ig,1,-1 + pass=0 + Do While(pass .LT. 10) + If(INDEX(lsav(i),TRIM(flg(j))).EQ.1 & + & .AND. flg(j).NE.' ')Then + dcomp=0.0 + If(isfirst)Then + Write(irpt,'(1X)') + isfirst=.FALSE. + EndIf + If(widg(i) .NE. ' ')Write(irpt,'(F8.1,4A)') & + & eg(j),': Using ',TRIM(parg(i)), & + & ' instead of ',TRIM(widg(j)) + widg(j)=parg(i) + GoTo 100 + EndIf + comp=ABS(comp-eg(j)) + If(deg(j) .NE. 0)Then + dcomp=deg(j)*deg(j)+dcomp*dcomp + Else + dcomp=1.0+dcomp*dcomp + EndIf + dcomp=SQRT(dcomp+pass*pass) + If(comp .LE. dcomp)Then + If(isfirst)Then + Write(irpt,'(1X)') + isfirst=.FALSE. + EndIf + If(pass .LE. 2)Then + Write(irpt,'(F8.1,4A)')eg(j),': Using ', & + & TRIM(parg(i)),' instead of ',TRIM(widg(j)) + Else + Write(irpt,'(F8.1,5A,I1,A)')eg(j),': Using ',& + & TRIM(parg(i)),' instead of ',TRIM(widg(j)),& + & ' [',pass,' passes]' + EndIf + widg(j)=parg(i) + GoTo 100 + EndIf + pass=pass+1 + Enddo + EndDo + Write(irpt,'(2A)')' ***** No match for: ', & + & TRIM(parg(i)) +100 Continue + EndIf + EndDo + EndIf + isfirst=.TRUE. + IF(Ig.EQ.1 .AND. widg(1).EQ.' ') THEN + PT(1) = T/BR + IF(DT.NE.0.) THEN + DPT(1) = DX2(PT(1),T,DT,BR,DBR) + GO TO 10 + ELSE + DPT(1) = 0. + END IF + IF(DTPlus.NE.0.) THEN + DPTplu(1) = DX2(PT(1),T,DTPlus,BR,DBR) + DPTmin(1) = DX2(PT(1),T,DTMin,BR,DBR) + ELSE + DPTplu(1) = 0. + DPTmin(1) = 0. + END IF + GO TO 10 + END IF + DO i = 1, Ig + PT(i) = 0. + If(widg(i) .EQ. ' ')Then + chkgam(i)=chklev + If(mode .EQ. 0)chkds=chkds .OR. chklev + IF(TI(i).EQ.0.) CYCLE + PT(i) = 100.*T/(TI(i)*BR) + IF(DT.NE.0.) THEN + DPT(i) = DX3(PT(i),T,DT,TI(i),DTI(i),BR,DBR) + ELSE + DPT(i) = 0. + IF(DTPlus.NE.0.) THEN + DPTplu(i) = DX3(PT(i),T,DTPlus,TI(i),DTI(i),BR,DBR) + DPTmin(i) = DX3(PT(i),T,DTMin,TI(i),DTI(i),BR,DBR) + ELSE + DPTplu(i) = 0. + DPTmin(i) = 0. + END IF + END IF + Else + If(isfirst)Then + Write(irpt,'(1X)') + isfirst=.FALSE. + EndIf + Write(irpt,'(F8.1,3A)')eg(i),': ',TRIM(widg(i)), & + & ' used for partial transition T1/2' + j=INDEX(widg(i),'=') + If(j .GT. 0)Then + k=Indexf(widg(i),j,'+') + If(k .EQ. 0)Then + Call Readt(TRIM(widg(i)(j+1:)),pt(i),dpt(i)) + Else + l=Indexf(widg(i),k,'-') + Call Readt(widg(i)(j+1:k-1)//' '//widg(i)(k+1:l-1), & + & pt(i),dptplu(i)) + Call Readt(widg(i)(j+1:k-1)//' '//widg(i)(l+1:), & + & pt(i),dptmin(i)) + EndIf + ElseIf((INDEX(widg(i),'>').GT.0.OR.INDEX(widg(i),' G').GT.0)& + & .AND.(INDEX(widg(i),'<').GT.0.OR.INDEX(widg(i),'L').GT.0))& + & Then + j=INDEX(widg(i),'>') + If(j .EQ. 0)j=INDEX(widg(i),' G') + k=INDEX(widg(i),'<') + If(k .EQ. 0)k=INDEX(widg(i),'L') + If(j .LT. k)Then + tmpstr=widg(i)(j+1:k) + Call Lbsup(tmpstr) + If(tmpstr(1:1) .EQ. 'G')tmpstr=tmpstr(3:) + Call Readt(tmpstr,ptupper(i),dum) + tmpstr=widg(i)(k:) + Call Lbsup(tmpstr) + If(tmpstr(1:1) .EQ. 'L')tmpstr=tmpstr(3:) + Call Readt(TRIM(tmpstr),ptlower(i),dum) + Else + tmpstr=widg(i)(k+1:j) + Call Lbsup(tmpstr) + If(tmpstr(1:1) .EQ. 'L')tmpstr=tmpstr(3:) + Call Readt(tmpstr,ptlower(i),dum) + tmpstr=widg(i)(j:) + Call Lbsup(tmpstr) + If(tmpstr(1:1) .EQ. 'G')tmpstr=tmpstr(3:) + Call Readt(TRIM(tmpstr),ptupper(i),dum) + EndIf + ElseIf(INDEX(widg(i),'>').GT.0.OR.INDEX(widg(i),' G').GT.0) & + & Then + j=INDEX(widg(i),'>') + If(j .GT. 0)Then + Call Readt(TRIM(widg(i)(j+1:)),pt(i),dpt(i)) + ptopup(i)='LT' + Else + j=INDEX(widg(i),' G') + ptopup(i)='L'//widg(i)(j+2:Indexf(widg(i),j+1,' ')-1) + Call Readt(TRIM(widg(i)(j+4:)),pt(i),dpt(i)) + EndIf + ElseIf(INDEX(widg(i),'<').GT.0 .OR. INDEX(widg(i),'L').GT.0)& + & Then + j=INDEX(widg(i),'<') + If(j .GT. 0)Then + Call Readt(TRIM(widg(i)(j+1:)),pt(i),dpt(i)) + ptoplow(i)='GT' + Else + j=INDEX(widg(i),'L') + ptoplow(i)='G'//widg(i)(j+1:Indexf(widg(i),j,' ')-1) + Call Readt(TRIM(widg(i)(j+3:)),pt(i),dpt(i)) + EndIf + ElseIf(INDEX(widg(i),' AP ') .GT. 0)Then + j=Index(widg(i),' AP ') + Call Readt(TRIM(widg(i)(j+4:)),pt(i),dpt(i)) + ptoplow(i)='AP' + EndIf + EndIf + END DO + 10 RETURN +! + END SUBROUTINE PART12 +! +!*********************************************************************** +! + SUBROUTINE COMWID(A) +! +! CALCULATES Recommended Upper Limits on Reduced Transition Strengths +! from APPENDIX D-4 of manual. +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: A +! +! Zero arrays +! + LIMits = 0. +! + IF(A.LT.6) RETURN + IF(A.LE.44) THEN +! +! Isoscalar limits (Note: when not defined as IV or IS, limits +! stored as isoscaler) +! +! Electric + LIMits(1,1,1) = 0.003 + LIMits(1,2,1) = 100. + LIMits(1,3,1) = 100. + LIMits(1,4,1) = 100. +! Magnetic + LIMits(2,1,1) = 0.03 + LIMits(2,2,1) = 0.1 +! +! Isovector limits +! Electric + LIMits(1,1,2) = 0.3 + IF(A.GE.21) LIMits(1,1,2) = 0.1 + LIMits(1,2,2) = 10. +! Magnetic + LIMits(2,1,2) = 10. + LIMits(2,2,2) = 3. + LIMits(2,3,2) = 10. + END IF +! + IF(A.GT.44.AND.A.LE.150) THEN +! +! Isoscalar limits --- see note above +! Electric + LIMits(1,2,1) = 300. + LIMits(1,3,1) = 100. + LIMits(1,4,1) = 100. + IF(A.GE.90) LIMits(1,4,1) = 30. +! Magnetic + LIMits(2,4,1) = 30. +! +! Isovector limits +! ELECTRIC + LIMits(1,1,2) = 0.01 +! MAGNETIC + LIMits(2,1,2) = 3. + LIMits(2,2,2) = 1. + LIMits(2,3,2) = 10. + END IF + IF(A.GT.150) THEN +! Magnetic + LIMits(2,4,1) = 10. +! +! Isoscalar limits --- see note above +! Electric + LIMits(1,2,1) = 1000. + LIMits(1,3,1) = 100. +! Magnetic + LIMits(2,5,1) = 10. +! +! Isovector limits +! Electric + LIMits(1,1,2) = 0.01 +! Magnetic + LIMits(2,1,2) = 2. + LIMits(2,2,2) = 1. + LIMits(2,3,2) = 10. + END IF +! + RETURN + END SUBROUTINE COMWID +! +!*********************************************************************** +! + SUBROUTINE OUT1(Ig,Ia) +! +! Prepares report file for RUL'S comparison +! Calculates experimental reduced widths and compares results to +! to Nuclear Data Sheets Recommended Upper Limits. Note that +! the experimental reduced widths are not corrected for +! conversion or mixed multipolarities. +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Ia, Ig +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM + REAL(KIND=8), INTRINSIC :: DBLE, DLOG10, DSQRT +! +! Local variables +! + CHARACTER(LEN=132) :: line, line2, line3 + CHARACTER(LEN=2) :: sdx + CHARACTER(LEN=20) :: sx + INTEGER(KIND=4) :: i, iflag, j, k, l, lendx, lenx, lim + REAL(KIND=8) :: a, brti, d1pcc, dbrti, onepcc, temp, tmplog + REAL(KIND=8), DIMENSION(5,2) :: dratio, ratio +! + CHARACTER(LEN=4), DIMENSION(2) :: mess + DATA mess/'(IS)', '(IV)'/ +! + a = DBLE(Ia) + IF(Ia.LT.6) THEN + lim = 0 + ELSE + lim = 4 + END IF + lendx = 2 + DO i = 1, Ig + lenx = 20 + iflag = 0 + IF(CC(i).EQ.0.) THEN + onepcc = 1. + d1pcc = 0. + ELSE + onepcc = 1. + CC(i) + d1pcc = DCC(i) + END IF + line = ' ' + sx = ' ' + sdx = ' ' + CALL DCNVUS(EG(i),DEG(i),sx,lenx,sdx,lendx) + CALL LBSUP(sx) + CALL LBSUP(sdx) + line = 'EG='//TRIM(sx)//' '//TRIM(sdx) + IF(pt(i).EQ.0. .AND. ptlower(i).EQ.0. .AND. ptupper(i).EQ.0.) & + & THEN + line2 = ' NO INTENSITY OR PARTIAL WIDTH' + WRITE(irpt,'(A)')' ' + WRITE(irpt,'(A28,A)') line,TRIM(line2) + CYCLE + END IF + IF(EG(i).LE.0.) THEN + line2 = ' NO GAMMA ENERGY' + WRITE(irpt,'(A)')' ' + WRITE(irpt,'(A28,A13)') line, line2 + CYCLE + END IF + CALL STCALC(EG(i),DEG(i),a) + sx = ' ' + sdx = ' ' + IF(BR.NE.0.AND.TI(i).NE.0) THEN + brti = BR*TI(i) + dbrti = brti*DSQRT((DBR/BR)**2+(DTI(i)/TI(i))**2) + ELSE + brti = TI(i) + dbrti = DTI(i) + END IF + CALL DCNVUS(brti,dbrti,sx,lenx,sdx,lendx) + CALL LBSUP(sx) + CALL LBSUP(sdx) + WRITE(irpt,'(A)')' ' + If(widg(i) .EQ. ' ')Then + line2 = ' BRANCHING RATIO (IN PERCENT)='//TRIM(sx) & + & //' '//TRIM(sdx) + Else + line2=' ' + brti=1. + dbrti=0. + EndIf + WRITE(irpt,'(A28,A50)') line, line2 + line = ' ' + line2 = ' ' + sx = ' ' + sdx = ' ' + IF(DPT(i).NE.0.) THEN + CALL DCNVUS(PT(i),DPT(i),sx,lenx,sdx,lendx) + CALL LBSUP(sx) + CALL LBSUP(sdx) + line3 = ' PARTIAL TRANSITION T1/2='//TRIM(sx) & + & //' '//TRIM(sdx)//' SEC' + WRITE(irpt,'(A)') line3(1:90) + IF(CC(i).NE.0.) THEN + sx = ' ' + sdx = ' ' + CALL DCNVUS(onepcc,d1pcc,sx,lenx,sdx,lendx) + CALL LBSUP(sx) + CALL LBSUP(sdx) + line3 = ' TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY '// & + & '(1+CC)='//TRIM(sx)//' '//TRIM(sdx) + WRITE(irpt,'(A)') line3(1:90) + END IF + IF(DELta(i).NE.0.) THEN + WRITE(irpt,'(A/)') & + & ' WARNING---MR .NE. 0. FOLLOW PAGE 2 NS MEMO '& + & //'1B/1 (82) TO CORRECT CALCULATIONS' + END IF + If(chkgam(i))Then + Write(irpt,'(3A/)') & + & ' WARNING---T1/2=',TRIM(tcomp), & + & '. Check for partial transition widths.' + EndIf + CALL WTABLE + IF(lim.EQ.0) CYCLE + DO j = 1, lim + DO k = 1, 2 + tmplog = DLOG10(SPT(k,j)) - DLOG10(PT(i)) + IF(tmplog.LT.38.D0) THEN + ratio(j,k) = SPT(k,j)/PT(i) + ELSE + ratio(j,k) = 1.D+38 + END IF + dratio(j,k) = DX2(ratio(j,k),PT(i),DPT(i),SPT(k,j), & + & DSPt(k,j)) + temp = ratio(j,k) + tmplog = DLOG10(temp) - DLOG10(onepcc) + IF(tmplog.LT.38.D0) THEN + ratio(j,k) = ratio(j,k)/onepcc + ELSE + ratio(j,k) = 1.D+38 + END IF + dratio(j,k) = DX2(ratio(j,k),temp,dratio(j,k),onepcc, & + & d1pcc) + END DO + END DO + GO TO 5 + ElseIf(dpt(i).eq.0..AND.DPTplu(i).NE.0.) Then + sx = ' ' + sdx = ' ' + CALL DCNVUS(PT(i),DPTplu(i),sx,lenx,sdx,lendx) + CALL LBSUP(sx) + CALL LBSUP(sdx) + line = ' PARTIAL TRANSITION T1/2='//TRIM(sx)//'+'//TRIM(sdx) + sx = ' ' + sdx = ' ' + CALL DCNVUS(PT(i),DPTmin(i),sx,lenx,sdx,lendx) + CALL LBSUP(sx) + CALL LBSUP(sdx) + line = TRIM(line)//'-'//TRIM(sdx)//' SEC' + WRITE(irpt,'(A)') line + IF(CC(i).NE.0.) THEN + sx = ' ' + sdx = ' ' + CALL DCNVUS(onepcc,d1pcc,sx,lenx,sdx,lendx) + CALL LBSUP(sx) + CALL LBSUP(sdx) + line3 = ' TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY '// & + & '(1+CC)='//TRIM(sx)//' '//TRIM(sdx) + WRITE(irpt,'(A)') line3(1:90) + END IF + IF(DELta(i).NE.0.) THEN + WRITE(irpt,'(A/)') & + & ' WARNING---MR .NE. 0. FOLLOW PAGE 2 NS MEMO '& + & //'1B/1 (82) TO CORRECT CALCULATIONS' + END IF + CALL WTABLE + ElseIf(ptlower(i) .GT. 0.0)Then + sx = ' ' + sdx = ' ' + CALL DCNVUS(ptlower(i),0.0,sx,lenx,sdx,lendx) + CALL LBSUP(sx) + CALL LBSUP(sdx) + WRITE(irpt,'(2A)')' PARTIAL TRANSITION T1/2>', sx + IF(CC(i).NE.0.) THEN + sx = ' ' + sdx = ' ' + CALL DCNVUS(onepcc,d1pcc,sx,lenx,sdx,lendx) + CALL LBSUP(sx) + CALL LBSUP(sdx) + line3 = ' TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY '// & + & '(1+CC)='//TRIM(sx)//' '//TRIM(sdx) + WRITE(irpt,'(A)') line3(1:90) + END IF + IF(DELta(i).NE.0.) THEN + WRITE(irpt,'(A/)') & + & ' WARNING---MR .NE. 0. FOLLOW PAGE 2 NS MEMO ' & + & //'1B/1 (82) TO CORRECT CALCULATIONS' + END IF + CALL WTABLE + Else + sx = ' ' + sdx = ' ' + CALL DCNVUS(PT(i),DPT(i),sx,lenx,sdx,lendx) + CALL LBSUP(sx) + CALL LBSUP(sdx) + If(ptopup(i) .NE. ' ')Then + WRITE(irpt,'(2A)')' PARTIAL TRANSITION T1/2<', sx + ElseIf(ptoplow(i) .NE. ' ')Then + If(ptoplow(i) .EQ. 'AP')Then + WRITE(irpt,'(2A)')' PARTIAL TRANSITION T1/2 AP ', sx + Else + WRITE(irpt,'(2A)')' PARTIAL TRANSITION T1/2>', sx + EndIf + Else + WRITE(irpt,'(2A)')' PARTIAL TRANSITION T1/2=', sx + EndIf + IF(CC(i).NE.0.) THEN + sx = ' ' + sdx = ' ' + CALL DCNVUS(onepcc,d1pcc,sx,lenx,sdx,lendx) + CALL LBSUP(sx) + CALL LBSUP(sdx) + line3 = ' TO OBTAIN PARTIAL GAMMA T1/2 MULTIPLY BY '// & + & '(1+CC)='//TRIM(sx)//' '//TRIM(sdx) + WRITE(irpt,'(A)') line3(1:90) + END IF + IF(DELta(i).NE.0.) THEN + WRITE(irpt,'(A/)') & + & ' WARNING---MR .NE. 0. FOLLOW PAGE 2 NS MEMO ' & + & //'1B/1 (82) TO CORRECT CALCULATIONS' + END IF + CALL WTABLE + EndIf + IF(lim.EQ.0) CYCLE + DO j = 1, lim + DO k = 1, 2 + If(ptlower(i) .EQ. 0)Then + tmplog = DLOG10(SPT(k,j)) - DLOG10(PT(i)) + Else + tmplog = DLOG10(SPT(k,j)) - DLOG10(ptlower(i)) + EndIf + IF(tmplog.LT.38.D0) THEN + If(ptlower(i) .EQ. 0)Then + ratio(j,k) = SPT(k,j)/PT(i) + Else + ratio(j,k) = spt(k,j)/ptlower(i) + EndIf + ELSE + ratio(j,k) = 1.D+38 + END IF + dratio(j,k) = DX2(ratio(j,k),PT(i),DPTmin(i),SPT(k,j), & + & DSPt(k,j)) + temp = ratio(j,k) + tmplog = DLOG10(temp) - DLOG10(onepcc) + IF(tmplog.LT.38.D0) THEN + ratio(j,k) = ratio(j,k)/onepcc + ELSE + ratio(j,k) = 1.D+38 + END IF + dratio(j,k) = DX2(ratio(j,k),temp,dratio(j,k),onepcc, & + & d1pcc) + END DO + END DO + 5 IF(lim.EQ.0) CYCLE + WRITE(irpt,'(/9X,A)') 'RECOMMENDED UPPER LIMITS COMPARISON' + WRITE(irpt,'(10X,A,2X,A,15X,A)') 'ORDER', & + & ' ELECTRIC ', ' MAGNETIC' + WRITE(irpt,'(16X,A,T37,A,T63,A,T83,A)')' CALCULATED', ' RUL',& + & ' CALCULATED', ' RUL' + lenx = 10 + DO j = 1, lim + line = ' ' + DO l = 1, 2 + DO k = 1, 2 + IF(LIMits(k,j,l).EQ.0.) CYCLE + sx = ' ' + sdx = ' ' + CALL DCNVUS(ratio(j,k),dratio(j,k),sx,lenx,sdx,lendx) + IF(k.EQ.1) THEN + WRITE(line(11:),'(I4,8X,A10,1X,A2)') j, sx, sdx + WRITE(line(37:),'(F9.3,60X,A)') LIMits(k,j,l), ':' + IF(Ia.LE.44) THEN + IF(j.EQ.1) line(17:20) = mess(l) + IF(j.EQ.2) line(17:20) = mess(l) + ELSE + IF(j.LE.2) line(17:20) = mess(l) + END IF + ELSE + If(line(11:14) .EQ. ' ')Write(line(11:14),'(I4)')j + WRITE(line(64:99),'(A10,1X,A2,T16,F9.3)') sx, sdx, & + & LIMits(k,j,l) + IF(Ia.LE.44) THEN + IF(j.LE.3) line(58:61) = mess(l) + ELSE + IF(j.LE.2) line(58:61) = mess(l) + END IF + END IF + IF(LIMits(k,j,l).LT.(ratio(j,k)-dratio(j,k))) THEN + IF(k.EQ.1) line(47:50) = '<===' + IF(k.EQ.2) line(89:92) = '<===' + iflag = 1 + ELSE + IF(k.EQ.1) line(47:50) = ' ' + IF(k.EQ.2) line(89:92) = ' ' + END IF + END DO + IF(Ia.LE.44.AND.j.LE.2) WRITE(irpt,'(A)') line(2:92) + END DO + IF(Ia.GT.44.OR.j.GT.2) WRITE(irpt,'(A)') line(2:92) + END DO + IF(iflag.EQ.0) THEN + WRITE(irpt,'(A)')' ' + ELSE + WRITE(irpt,'(/9X,A/)') & + & '<===CALCULATED STRENGTH EXCEEDS RECOMMENDED UPPER LIMIT' + END IF + END DO +! + RETURN + END SUBROUTINE OUT1 +! +!*********************************************************************** +! + SUBROUTINE OUT2(Ig,Ia) +! +! Prepares report and output files for Reduced Matrix +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Ia, Ig +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM + INTEGER(KIND=4), EXTERNAL :: INDEXF, TYPSTR + REAL(KIND=4), INTRINSIC :: FLOAT +! +! Local variables +! + CHARACTER(LEN=80) :: line2, nucard + CHARACTER(LEN=2), DIMENSION(2) :: opercn + CHARACTER(LEN=5), DIMENSION(2) :: out + CHARACTER(LEN=2) :: sdx + CHARACTER(LEN=4) :: ssave + CHARACTER(LEN=20) :: sx + LOGICAL(KIND=4), DIMENSION(2) :: pargiv, isap + INTEGER(KIND=4) :: i, i10000, j, k, l, l2, lendx, lenx + INTEGER(KIND=4), DIMENSION(2) :: itest + REAL(KIND=8) :: a, d1pcc, onepcc, temp + REAL(KIND=8), DIMENSION(2) :: dpercn, dx, dxmin, dxplus, percnt, & + & x, xlower, xupper +! + CHARACTER(LEN=2), DIMENSION(0:5,2) :: test + DATA((test(i,j),i=0,5),j=1,2)/'E0', 'E1', 'E2', 'E3', 'E4', 'E5', & + & ' ', 'M1', 'M2', 'M3', 'M4', 'M5'/ +! + CHARACTER(LEN=4), DIMENSION(0:5,2) :: bw + DATA((bw(i,j),i=0,5),j=1,2)/'BE0W', 'BE1W', 'BE2W', 'BE3W', & + & 'BE4W', 'BE5W', ' ', 'BM1W', 'BM2W', 'BM3W', 'BM4W', & + & 'BM5W'/ +! +! Calculate single-particle Reduced Matrix Elements +! + a = FLOAT(Ia) + CALL BSPCAL(a) +! +! Dump preceding non-G Records + DO i = 1, LINeg(1) - 1 + WRITE(iout,'(A)') LINe(i) + END DO +! + lendx = 2 + DO i = 1, Ig +! +! Initialize arrays + lenx = 20 + nucard = LINe(1)(1:5)//'B G ' + ssave = ' ' + percnt(1) = 1. + percnt(2) = 0. + dpercn(1) = 0. + dpercn(2) = 0. + DO j = 1, 2 + out(j) = ' ' + itest(j) = 0 + dpercn(j) = 0. + opercn(j) = ' ' + pargiv(j) = .FALSE. + END DO + IF(CC(i).EQ.0.) THEN + onepcc = 1. + d1pcc = 0. + ELSE + onepcc = 1. + CC(i) + d1pcc = DCC(i) + END IF +! + sx = ' ' + sdx = ' ' + CALL DCNVUS(EG(i),DEG(i),sx,lenx,sdx,lendx) + CALL LBSUP(sx) + CALL LBSUP(sdx) + WRITE(irpt,'(A)')' ' + line2 = ' EG='//TRIM(sx)//' '//TRIM(sdx) + gamprob=' ' + egprob=line2 + WRITE(irpt,'(A)') line2 +! + IF(EG(i).LE.0.) THEN + WRITE(irpt,'(A)')' MISSING OR NON-NUMERIC ENERGY' + DO j = LINeg(i), LINeg(i+1) - 1 + WRITE(iout,'(A)') LINe(j) + END DO + CYCLE + END IF +! Check for given multipolarity + IF(MULt(i).EQ.' ') THEN + WRITE(irpt,'(A)')' NO MULTIPOLARITY GIVEN' + DO j = LINeg(i), LINeg(i+1) - 1 + WRITE(iout,'(A)') LINe(j) + END DO + CYCLE + END IF +! +! Calculate single-particle half-lifes + CALL STCALC(EG(i),DEG(i),a) +! Write out single-particle half-lifes + CALL WTABLE +! +! Write out single-particle Reduced Transition Matrix Elements + WRITE(irpt,'(/10X,A)') & + & 'WEISSKOPF SINGLE-PARTICLE REDUCED MATRIX ELEMENTS' + WRITE(irpt,'(10X,A,4X,A,3X,A)') 'ORDER', 'ELECTRIC ', & + & 'MAGNETIC' + WRITE(irpt,'(5(10X,I3,2X,2(2X,1PE13.5)/))') & + & (k,(BSP(j,k),j=1,2),k=1,5) +! +! Decode multipolarity and check mixing ratio +! If D or Q exist in MULT(I), do not decode. +! + i10000 = 0 + CALL OUT230(i,pargiv,percnt,dpercn,opercn,test,itest,i10000, & + & out,bw,ssave) + IF(i10000.NE.0) THEN + i10000 = 0 + CYCLE + END IF + IF(out(1).EQ.' '.AND.out(2).EQ.' ') THEN + WRITE(irpt,'(5X,A)') 'CANNOT CALCULATE ANY BEM''s,BMW''s' + WRITE(irpt,'(A) ')' ' + DO j = LINeg(i), LINeg(i+1) - 1 + WRITE(iout,'(A)') LINe(j) + END DO + CYCLE + END IF +! + CALL OUT233(i,x,dx,xupper,xlower,itest,out,onepcc,d1pcc,ssave, & + & opercn,percnt,dpercn,dxplus,dxmin,a) +! + DO j = 1, 2 + IF(itest(j).LE.10) CYCLE + IF(x(j).EQ.0.) CYCLE + If(widg(i).NE.' ' .AND. ssave.EQ.'AP')Then + dx(j) = 0. + dxplus(j) = 0.0 + dxmin(j) = 0.0 + isap(j) = .TRUE. + ElseIf(opercn(j).EQ.'AP' .OR. TIOpup(i).EQ.'AP' .OR. & + & TOPup.EQ.'AP')THEN + dx(j) = 0. + dxplus(j) = 0.0 + dxmin(j) = 0.0 + isap(j) = .TRUE. + Else + isap(j)=.FALSE. + END IF + END DO + DO j = 1, 2 + IF(itest(j).LE.10) CYCLE + k = itest(j)/10. + l = itest(j) - 10*k + IF(x(j).EQ.0.) THEN + IF(xupper(j).NE.0..AND.xlower(j).NE.0.) THEN + WRITE(irpt,'(9X,2A,E10.3,A,E10.3)') bw(l,k)(1:3), '<',& + & xupper(j), '>', xlower(j) + ELSE + IF(xupper(j).NE.0.) THEN + WRITE(irpt,'(9X,2A,E10.3)') bw(l,k)(1:3), '<', & + & xupper(j) + END IF + IF(xlower(j).NE.0.) THEN + WRITE(irpt,'(9X,2A,E10.3)') bw(l,k)(1:3), '>', & + & xlower(j) + END IF + END IF + xupper(j) = xupper(j)/BSP(k,l) + xlower(j) = xlower(j)/BSP(k,l) + ELSE IF(dx(j).NE.0.) THEN + WRITE(irpt,'(9X,2A,1PE10.3,A,1PE9.2)') bw(l,k)(1:3), '=',& + & x(j), '+-', dx(j) + temp = x(j) + x(j) = x(j)/BSP(k,l) + dx(j) = x(j)*dx(j)/temp + ELSE IF(isap(j)) THEN + x(j) = x(j)/BSP(k,l) + WRITE(irpt,'(9X,2A,1PE10.3)') bw(l,k)(1:3),' AP',x(j) + ELSE + WRITE(irpt,'(9X,2A,1PE10.3,A,1PE9.2,A,1PE9.2)') bw(l,k) & + & (1:3), '=', x(j), '+', dxplus(j), '+', dxmin(j) + temp = x(j) + x(j) = x(j)/BSP(k,l) + dxplus(j) = x(j)*dxplus(j)/temp + dxmin(j) = x(j)*dxmin(j)/temp + END IF + END DO + DO j = 1, 2 + IF(x(j).NE.0.) GO TO 5 + IF(xupper(j).NE.0.) GO TO 5 + IF(xlower(j).NE.0.) GO TO 5 + END DO + WRITE(irpt,'(5X,A)') 'CANNOT CALCULATE ANY BEM''s,BMW''s' + WRITE(irpt,'(A)')' ' + DO j = LINeg(i), LINeg(i+1) - 1 + WRITE(iout,'(A)') LINe(j) + END DO + CYCLE +! + 5 Continue + CALL OUT235(itest,out,x,dx,xupper,xlower,nucard,pargiv,dxplus, & + & dxmin,i) +! + If(chkgam(i))Then + Write(irpt,'(5A)')' NEW CARD: ',TRIM(nucard), & + & ' - T1/2=',TRIM(tcomp),'. Record not output' + nprobs=1 + linprob(1)=' NEW CARD: '//TRIM(nucard)//' - T1/2=' + linprob(1)=TRIM(linprob(1))//TRIM(tcomp) + linprob(1)=TRIM(linprob(1))//'. Record not output' + Call ERRRPT + chkds=.TRUE. + Else + WRITE(irpt,'(2A)')' NEW CARD: ', TRIM(nucard) + EndIf +! +! Compare old cards with new card +! + i10000 = 0 + CALL OUT2ON(i,nucard,bw,out,i10000) + IF(i10000.GT.0) THEN + i10000 = 0 + CYCLE + END IF +! +! Write out new record if comparisons have failed + l2 = LEN_TRIM(nucard) + IF(l2.GT.10 .AND. .NOT.chkgam(i))Then + Call BWVSRUL(nucard,'N') + WRITE(iout,'(A)') nucard + EndIf +! + END DO + LINe(1) = CARd + LINcnt = 2 + IF(LINe(1).EQ.' ') THEN + WRITE(iout,'(A)') LINe(1) + LINcnt = 1 + END IF +! + RETURN + END SUBROUTINE OUT2 +! +!*********************************************************************** +! + SUBROUTINE OUT2ON(I,Nucard,Bw,Out,I10000) +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=80) :: Nucard + CHARACTER(LEN=4), DIMENSION(0:5,2) :: Bw + CHARACTER(LEN=5), DIMENSION(2) :: Out + INTEGER(KIND=4) :: I, I10000 +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + CHARACTER(LEN=1), INTRINSIC :: CHAR + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM, ICHAR, INDEX, MAX0 + INTEGER(KIND=4), EXTERNAL :: INDEXF + REAL(KIND=4), EXTERNAL :: VALSTR +! +! Local variables +! + CHARACTER(LEN=2) :: sdx + CHARACTER(LEN=40) :: str, str1, str2 + CHARACTER(LEN=20) :: sx + INTEGER(KIND=4) :: j, k, k1, k2, l, l1, l2, m, m1, m2, n, ll, kk + INTEGER(KIND=4) :: i1,i2 + REAL(KIND=8) :: dy1, dy2, y1, y2 + REAL(KIND=4) :: test1,test2 +! + l2 = LEN_TRIM(Nucard) + DO j = LINeg(I), LINeg(I+1) - 1 + IF(LINe(j)(6:9).EQ.' G '.OR.LEN_TRIM(Nucard).LE.10) THEN + WRITE(iout,'(A)') LINe(j) + CYCLE + END IF +! Check for embedded non-gamma radiations [3-Feb-87] + IF(LINe(j)(8:8).NE.'G') THEN + IF(LEN_TRIM(Nucard) .GT. 10)Then + Call BWVSRUL(nucard,'N') + WRITE(iout,'(A)') Nucard + EndIf + DO k = j, LINeg(I+1) - 1 + WRITE(iout,'(A)') LINe(k) + END DO +! GOTO 10000 + I10000 = 1 + RETURN + END IF + DO l = 0, 5 + DO m = 1, 2 + IF(Bw(l,m)(1:3).EQ.' ') CYCLE + kk = INDEX(line(j),Bw(l,m)(1:3)) + IF(kk.NE.0.AND.line(j)(7:7).EQ.' ') THEN + IF(line(j)(kk+3:kk+3).EQ.'W') GO TO 5 + WRITE(irpt,'(2A)') ' CHECK CARD: ', LINE(j)(1:l1) + END IF + END DO + END DO + WRITE(iout,'(A)') LINe(j) + CYCLE + 5 l1 = LEN_TRIM(LINe(j)) + WRITE(irpt,'(4X,2A)') 'OLD CARD: ', LINe(j)(1:l1) +! If old card and new card are identical, keep old record +* Remove code between **JKT** (check for <, >, AP) + GOTO 51 +* **JKT** + If(INDEX(nucard(10:l2),'>').GT.0 .OR. & + & INDEX(nucard(10:l2),'<').GT.0 .OR. & + & INDEX(nucard(10:l2),' AP ').GT.0)Then + i1=Indexf(nucard(1:l2),10,'>') + If(i1 .GT. 0)Then + i2=Indexf(line(j)(1:l1),10,'>') + If(i2 .GT. 0)Then + test1=Valstr(nucard(i1+1:l2)) + test2=Valstr(line(j)(i2+1:l1)) + If(test1 .EQ. test2)Then + WRITE(iout,'(A)') LINe(j) + WRITE(irpt,'(6X,A)')'***** OLD CARD KEPT *****' + Call BWVSRUL(line(j),'O') + Nucard(10:) = ' ' + l2 = LEN_TRIM(Nucard) + CYCLE + EndIf + EndIf + EndIf + i1=Indexf(nucard(1:l2),10,'<') + If(i1 .GT. 0)Then + i2=Indexf(line(j)(1:l1),10,'<') + If(i2 .GT. 0)Then + test1=Valstr(nucard(i1+1:l2)) + test2=Valstr(line(j)(i2+1:l1)) + If(test1 .EQ. test2)Then + WRITE(iout,'(A)') LINe(j) + WRITE(irpt,'(6X,A)')'***** OLD CARD KEPT *****' + Call BWVSRUL(line(j),'O') + Nucard(10:) = ' ' + l2 = LEN_TRIM(Nucard) + CYCLE + EndIf + EndIf + EndIf + i1=Indexf(nucard(1:l2),10,' AP ') + If(i1 .GT. 0)Then + i2=Indexf(line(j)(1:l1),10,' AP ') + If(i2 .GT. 0)Then + i1=i1+5 + i2=i2+5 + test1=Valstr(nucard(i1:l2)) + test2=Valstr(line(j)(i2:l1)) + If(test1 .EQ. test2)Then + WRITE(iout,'(A)') LINe(j) + WRITE(irpt,'(6X,A)')'***** OLD CARD KEPT *****' + Call BWVSRUL(line(j),'O') + Nucard(10:) = ' ' + l2 = LEN_TRIM(Nucard) + CYCLE + EndIf + EndIf + EndIf + EndIf +* **JKT** +51 Continue + + IF(INDEX(LINe(j)(10:l1),Nucard(10:l2)).NE.0) THEN + Do k=0,5 + Do l=1,2 + If(INDEX(line(j),bw(k,l)).GT.0 & + & .AND. INDEX(nucard,bw(k,l)).EQ.0)GoTo 100 + EndDo + EndDo + WRITE(iout,'(A)') LINe(j) + WRITE(irpt,'(6X,A)')'***** OLD CARD KEPT *****' + Call BWVSRUL(line(j),'O') + Nucard(10:) = ' ' + l2 = LEN_TRIM(Nucard) +100 Continue + CYCLE + END IF + If(chkgam(i))Then + Write(iout,'(A)') line(j) + Call BWVSRUL(line(j),'O') + Write(irpt,'(6X,A)')'***** OLD CARD KEPT *****' + nucard(10:) = ' ' + l2 = LEN_TRIM(nucard) + Cycle + EndIf +! Check for reference on old card - If present keep + m1 = INDEX(LINe(j),'(') + IF(m1.EQ.0) GO TO 10 + m2 = INDEX(LINe(j),')') + IF(m2.GT.0) THEN + DO n = 1, 2 + IF(ICHAR(LINe(j)(m1+n:m1+n)).LT.48.OR. & + & ICHAR(LINe(j)(m1+n:m1+n)).GT.57) GO TO 10 + END DO + DO n = 3, 4 + IF(ICHAR(LINe(j)(m1+n:m1+n)).LT.65.OR. & + & ICHAR(LINe(j)(m1+n:m1+n)).GT.90) GO TO 10 + END DO + DO n = 5, 6 + IF((ICHAR(LINe(j)(m1+n:m1+n)).LT.48.OR.ICHAR(LINe(j)(m1+n& + & :m1+n)).GT.57).AND. & + & (ICHAR(LINe(j)(m1+n:m1+n)).LT.65.OR. & + & ICHAR(LINe(j)(m1+n:m1+n)).GT.90)) GO TO 10 + END DO + WRITE(iout,'(A)') LINe(j) + WRITE(irpt,'(6X,A)')'***** OLD CARD KEPT *****' + Call BWVSRUL(line(j),'O') + Nucard(10:) = ' ' + l2 = LEN_TRIM(Nucard) + CYCLE + END IF +! Check for agreement of types and number between old and +! new records --- keep new record if disagreement + 10 DO l = 1, 2 + IF(Out(l).EQ.' ') THEN + m = 0 + DO l1 = 0, 5 + DO l2 = 1, 2 + IF(Bw(l1,l2).EQ.' ') CYCLE + IF(INDEX(LINe(j),Bw(l1,l2)).NE.0) m = m + 1 + IF(m.GT.1) GO TO 15 + END DO + END DO + ELSE IF(INDEX(LINe(j),Out(l)(1:4)).EQ.0) THEN + GO TO 15 + END IF + END DO + DO l = 1, 2 + IF(Out(l).EQ.' ') CYCLE + k1 = INDEX(LINe(j),Out(l)(1:4)) +! Check for missing old value + IF(k1.LE.0) THEN + IF(l.EQ.1) CYCLE + GO TO 15 + END IF + k2 = INDEX(Nucard,Out(l)(1:4)) +! Check for missing new value + IF(k2.LE.0) THEN + IF(l.EQ.1) CYCLE + GO TO 15 + END IF + str1 = LINe(j)(k1:) + str2 = Nucard(k2:) + m1 = INDEX(str1,'$') - 1 + m2 = INDEX(str2,'$') - 1 + IF(m1.LE.0) m1 = LEN_TRIM(str1) + IF(m2.LE.0) m2 = LEN_TRIM(str2) +! Ignore "?" + IF(INDEX(str1(1:m1),'?').NE.0) m1 = m1 - 1 + IF(INDEX(str2(1:m2),'?').NE.0) m2 = m2 - 1 + str1 = str1(1:m1) + str2 = str2(1:m2) +! Ignore "()" + CALL SQZSTR(str1,'(') + CALL SQZSTR(str1,')') + CALL SQZSTR(str2,'(') + CALL SQZSTR(str2,')') +! Check for agreement on "=" + IF(INDEX(str2,'=').NE.0) THEN + IF(INDEX(str1,'=').EQ.0.AND.INDEX(str1,'EQ').EQ.0) & + & GO TO 15 + k1 = MAX0(INDEX(str1,'=')+1,INDEX(str1,'EQ')+3) + k2 = INDEX(str2,'=') + 1 + str1 = str1(k1:) + IF(TYPST(str1(1:LEN_TRIM(str1))).EQ.1) THEN + WRITE(irpt,'(6X,A)') & + & '***** OLD CARD NOT TRANSLATED *****' + GO TO 15 + END IF + str2 = str2(k2:) + m1 = INDEX(str1,' ') + m2 = INDEX(str2,' ') + IF(m1.LE.1) THEN + CALL DCNVSU(str1,' ',y1,dy1) + ELSE + sx = str1(1:m1-1) + sdx = str1(m1+1:) + CALL DCNVSU(sx,sdx,y1,dy1) + END IF + IF(m2.LE.1) THEN + CALL DCNVSU(str2,' ',y2,dy2) + ELSE + sx = str2(1:m2-1) + sdx = str2(m2+1:) + CALL DCNVSU(sx,sdx,y2,dy2) + END IF + IF(y1.NE.y2.OR.dy1.NE.dy2) GO TO 15 + CYCLE + END IF +! Check for agreement on "AP" + IF(INDEX(str2,'AP').NE.0) THEN + IF(INDEX(str1,'AP').EQ.0) GO TO 15 + k1 = INDEX(str1,'AP') + 3 + k2 = INDEX(str2,'AP') + 3 + str1 = str1(k1:) + IF(TYPST(str1(1:LEN_TRIM(str1))).EQ.1) THEN + WRITE(irpt,'(6X,A)') & + & '***** OLD CARD NOT TRANSLATED *****' + GO TO 15 + END IF + str2 = str2(k2:) + CALL DCNVSU(str1,' ',y1,dy1) + CALL DCNVSU(str2,' ',y2,dy2) + IF(y1.NE.y2) GO TO 15 + CYCLE + END IF +! Check for agreement on "<" + IF(INDEX(str2,'<').NE.0) THEN + IF(INDEX(str1,'<').EQ.0.AND.INDEX(str1,'L').EQ.0)GO TO 15 +! If ranges are given, ignore for now and use +! new record + IF(INDEX(str2,'>').NE.0.OR.INDEX(str1,'>').NE.0.OR. & + & INDEX(str1,'G').NE.0) GO TO 15 + k1 = MAX0(INDEX(str1,'<')+1,INDEX(str1,'L')+3) + k2 = MAX0(INDEX(str2,'<')+1,INDEX(str2,'L')+3) + str1 = str1(k1:) + IF(TYPST(str1(1:LEN_TRIM(str1))).EQ.1) THEN + WRITE(irpt,'(6X,A)') & + & '***** OLD CARD NOT TRANSLATED *****' + GO TO 15 + END IF + str2 = str2(k2:) + CALL DCNVSU(str1,' ',y1,dy1) + CALL DCNVSU(str2,' ',y2,dy2) + IF(y1.NE.y2) GO TO 15 + CYCLE + END IF +! Check for agreement on ">" + IF(INDEX(str2,'>').NE.0) THEN + IF(INDEX(str1,'>').EQ.0.AND.INDEX(str1,'G').EQ.0)GO TO 15 +! If ranges are given, ignore for now and use +! new record + IF(INDEX(str2,'>').NE.0.OR.INDEX(str1,'>').NE.0.OR. & + & INDEX(str1,'G').NE.0) GO TO 15 + k1 = MAX0(INDEX(str1,'>')+1,INDEX(str1,'G')+3) + k2 = INDEX(str2,'>') + 1 + str1 = str1(k1:) + IF(TYPST(str1(1:LEN_TRIM(str1))).EQ.1) THEN + WRITE(irpt,'(6X,A)') & + & '***** OLD CARD NOT TRANSLATED *****' + GO TO 15 + END IF + str2 = str2(k2:) + CALL DCNVSU(str1,' ',y1,dy1) + CALL DCNVSU(str2,' ',y2,dy2) + IF(y1.NE.y2) GO TO 15 + CYCLE + END IF + GO TO 15 + END DO +* Eliminate coding between **jkt2** (Accept new card) +* **JKT2** + goto 14 + WRITE(iout,'(A)') LINe(j) + WRITE(irpt,'(6X,A)')'***** OLD CARD KEPT *****' + Call BWVSRUL(line(j),'O') + Nucard(10:) = ' ' + l2 = LEN_TRIM(Nucard) + 14 continue + CYCLE +! Make sure other data on old continuation record is +! retained + 15 Continue + DO l1 = 0, 5 + DO l2 = 1, 2 + IF(Bw(l1,l2).NE.' ') THEN + m = INDEXF(LINe(j),10,Bw(l1,l2)) + IF(m.GT.0) THEN + n = INDEXF(LINe(j),m,'$') + IF(n.GT.0) THEN + str = LINe(j)(m:n) + CALL REPSTR(LINe(j),TRIM(str),CHAR(0)) + ELSE + LINe(j) = LINe(j)(1:MAX0(9,m-1)) + END IF + ll = LEN_TRIM(LINe(j)) + IF(LINe(j)(ll:ll).EQ.'$') LINe(j)(ll:ll) = ' ' + IF(LINe(j)(10:).EQ.' ') GO TO 20 + CALL LBSUP(LINe(j)(10:)) + END IF + END IF + END DO + END DO + IF(LINe(j)(10:).NE.' ') WRITE(iout,'(A)') LINe(j) + 20 END DO +! + RETURN + END SUBROUTINE OUT2ON +! +!*********************************************************************** +! + SUBROUTINE OUT235(Itest,Out,X,Dx,Xupper,Xlower,Nucard,Pargiv, & + & Dxplus,Dxmin,thegam) +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=80) :: Nucard + CHARACTER(LEN=5), DIMENSION(2) :: Out + LOGICAL(KIND=4), DIMENSION(2) :: Pargiv + INTEGER(KIND=4) :: thegam + INTEGER(KIND=4), DIMENSION(2) :: Itest + REAL(KIND=8), DIMENSION(2) :: Dx, Dxmin, Dxplus, X, Xlower, Xupper +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM, INDEX + INTEGER(KIND=4), EXTERNAL :: INDEXF, IVLSTR + REAL(KIND=8), INTRINSIC :: DMAX1, DMIN1 +! +! Local variables +! + CHARACTER(LEN=3) :: chksdx + CHARACTER(LEN=3) :: sdx, sdx2 + CHARACTER(LEN=40) :: str + CHARACTER(LEN=20) :: sx, sx2, test + CHARACTER(LEN=80) :: proberr + INTEGER(KIND=4) :: i, isdx, j, k + REAL(KIND=4) :: try, dtry + REAL(KIND=8) :: temp +! + DO j = 1, 2 + IF(Itest(j).LE.10) CYCLE + IF(Out(j).EQ.' ') CYCLE + IF(X(j).EQ.0.AND.Xupper(j).EQ.0.AND.Xlower(j).EQ.0) THEN + WRITE(irpt,'(8X,2A)') 'CANNOT CALCULATE FOR ', Out(j)(1:4) + CYCLE + END IF + IF(X(j)-Dx(j).LT.0.0) THEN + Dxplus(j) = Dx(j) + Dxmin(j) = X(j) + Dx(j) = 0.0 + END IF + IF(LEN_TRIM(Nucard).GT.10) THEN + Nucard = TRIM(Nucard)//'$' + END IF + IF(LEN_TRIM(Nucard).LE.10) THEN + Nucard = TRIM(Nucard)//' '//Out(j) + ELSE + Nucard = TRIM(Nucard)//Out(j) + END IF + IF(X(j).NE.0..AND.Dx(j).NE.0.) THEN + If(dpt(thegam).EQ.0.0 .AND. (dx(j)/x(j).LT.0.05))Then + CALL DCNVUS(X(j),0.05*x(j),sx,10,sdx,2) + sdx=' ' + Else + CALL DCNVUS(X(j),Dx(j),sx,10,sdx,2) + EndIf + CALL LBSUP(sx) + CALL LBSUP(sdx) + sx = CK4EP(sx) + str = TRIM(sx)//' '//sdx + IF(Pargiv(j)) THEN + str = '('//TRIM(str)//')' + END IF + Nucard = TRIM(Nucard)//str + ELSE IF(X(j).NE.0..AND.Dx(j).EQ.0.) THEN + IF(Dxplus(j).EQ.0.) THEN + Nucard = Nucard(1:LEN_TRIM(nucard)-1)//' AP' + CALL DCNVUS(X(j),Dx(j),sx,10,sdx,-2) + CALL LBSUP(sx) + sx = CK4EP(sx) + IF(.NOT.Pargiv(j)) THEN + Nucard = TRIM(Nucard)//' '//sx + ELSE + Nucard = TRIM(Nucard)//' ('//TRIM(sx)//')' + END IF + ELSE + CALL Asycal(x(j),dxplus(j),dxmin(j),str,proberr) + If(proberr .NE. ' ')Then + Write(irpt,'(5X,4A)')'***** Problem with ',TRIM(str), & + & ': ',TRIM(proberr) + nprobs=1 + linprob(nprobs)(6:)='***** Problem with '//TRIM(str) + linprob(nprobs)=TRIM(linprob(nprobs))//': '//proberr + chkds3=.TRUE. + Write(irpt,'(10X,E8.3,A,E8.3,A,E8.3)') & + & x(j),' +',dxplus(j),'-',dxmin(j) + nprobs=nprobs+1 + Write(linprob(nprobs),'(10X,E8.3,A,E8.3,A,E8.3)') & + & x(j),' +',dxplus(j),'-',dxmin(j) + Call ERRRPT + EndIf + If(pargiv(j))str='('//TRIM(str)//')' + nucard=TRIM(nucard)//str + END IF + ELSE + If(xlower(j).NE.0 .AND. xupper(j).NE.0)Then + CALL DCNVUS(Xlower(j),Dx(j),sx,10,sdx,-2) + CALL LBSUP(sx) + k = INDEX(sx,'E') + IF(k.GT.0) THEN + IF(sx(k+1:k+1).GE.'0'.AND.sx(k+1:k+1).LE.'9') & + & CALL ADDSTR(sx,k+1,'+') + END IF + str = ' GT '//CK4EP(sx) + CALL DCNVUS(Xupper(j),Dx(j),sx,10,sdx,-2) + CALL LBSUP(sx) + k = INDEX(sx,'E') + IF(k.GT.0) THEN + IF(sx(k+1:k+1).GE.'0'.AND.sx(k+1:k+1).LE.'9') & + & CALL ADDSTR(sx,k+1,'+') + END IF + str=TRIM(str)//' LT '//CK4EP(sx) + If(pargiv(j))str=TRIM(str)//'?' + ElseIf(xlower(j).NE.0.)Then + CALL DCNVUS(Xlower(j),Dx(j),sx,10,sdx,-2) + CALL LBSUP(sx) + k = INDEX(sx,'E') + IF(k.GT.0) THEN + IF(sx(k+1:k+1).GE.'0'.AND.sx(k+1:k+1).LE.'9') & + & CALL ADDSTR(sx,k+1,'+') + END IF + str = '>'//CK4EP(sx) + IF(Pargiv(j)) str = TRIM(str)//'?' + ElseIf(Xupper(j).NE.0.)Then + CALL DCNVUS(Xupper(j),Dx(j),sx,10,sdx,-2) + CALL LBSUP(sx) + k = INDEX(sx,'E') + IF(k.GT.0) THEN + IF(sx(k+1:k+1).GE.'0'.AND.sx(k+1:k+1).LE.'9') & + & CALL ADDSTR(sx,k+1,'+') + END IF + str = '<'//CK4EP(sx) + IF(Pargiv(j)) str = TRIM(str)//'?' + END IF + Nucard(LEN_TRIM(Nucard):) = str + END IF + 10 END DO +! + RETURN + END SUBROUTINE OUT235 +! +!*********************************************************************** +! + SUBROUTINE OUT233(I,X,Dx,Xupper,Xlower,Itest,Out,Onepcc,D1pcc, & + & Ssave,Opercn,Percnt,Dpercn,Dxplus,Dxmin,A) +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=4) :: Ssave + CHARACTER(LEN=2), DIMENSION(2) :: Opercn + CHARACTER(LEN=5), DIMENSION(2) :: Out + INTEGER(KIND=4) :: I + INTEGER(KIND=4), DIMENSION(2) :: Itest + REAL(KIND=8) :: A, D1pcc, Onepcc + REAL(KIND=8), DIMENSION(2) :: Dpercn, Dx, Dxmin, Dxplus, Percnt, & + & X, Xlower, Xupper +! +! Local variables +! + INTEGER(KIND=4) :: j, k, l + REAL(KIND=8) :: temp +! + DO j = 1, 2 + X(j) = 0. + Dx(j) = 0. + Xupper(j) = 0. + Xlower(j) = 0. + IF(Itest(j).LE.10.OR.Out(j).EQ.' ') CYCLE + k = Itest(j)/10 + l = Itest(j) - 10*k + CALL BCALC(k,l,EG(I),DEG(I),X(j),Dx(j),A) + If(ptlower(i) .NE. 0.0)Then + xupper(j)=x(j)/ptlower(i) + xlower(j)=x(j)/ptupper(i) + x(j)=0.0 + ElseIf(pt(i).NE.0.) Then + temp = X(j) + X(j) = X(j)/PT(I) + Dx(j) = DX2(X(j),temp,Dx(j),PT(I),DPT(I)) + temp = X(j) + X(j) = X(j)/Onepcc + Dx(j) = DX2(X(j),temp,Dx(j),Onepcc,D1pcc) + IF(Ssave.EQ.'AP') THEN + Dx(j) = 0. + END IF + IF(Ssave.EQ.'GE') THEN + Xupper(j) = X(j) + Dx(j) + X(j) = 0. + Dx(j) = 0. + END IF + IF(Ssave.EQ.'GT') THEN + Xupper(j) = X(j) + Dx(j) + X(j) = 0. + Dx(j) = 0. + END IF + IF(Ssave.EQ.'LE') THEN + Xlower(j) = X(j) - Dx(j) + IF(Xlower(j).LT.0.) Xlower(j) = 0. + X(j) = 0. + Dx(j) = 0. + END IF + IF(Ssave.EQ.'LT') THEN + Xlower(j) = X(j) - Dx(j) + IF(Xlower(j).LT.0.) Xlower(j) = 0. + X(j) = 0. + Dx(j) = 0. + END IF + END IF + IF(DPTplu(I).NE.0.) THEN + Dxplus(j) = DX2(X(j),X(j),Dx(j),PT(I),DPTmin(I)) + Dxmin(j) = DX2(X(j),X(j),Dx(j),PT(I),DPTplu(I)) + Dx(j) = 0. + END IF + IF(X(j).NE.0.) THEN + IF(Opercn(j).EQ.' '.OR.Opercn(j).EQ.'AP') THEN + temp = X(j) + X(j) = X(j)*Percnt(j) + If(dx(j) .NE. 0.0)Then + Dx(j) = DX2(X(j),temp,Dx(j),Percnt(j),Dpercn(j)) + IF(Opercn(j).EQ.'AP') Dx(j) = 0. + Else + dxplus(j)=DX2(x(j),temp,dxplus(j),Percnt(j),Dpercn(j)) + dxmin(j)=DX2(x(j),temp,dxmin(j),Percnt(j),Dpercn(j)) + If(opercn(j).EQ.'AP')Then + dxplus(j)=0.0 + dxmin(j)=0.0 + EndIf + EndIf + ELSE + IF(Opercn(j)(1:1).EQ.'L') THEN + Xupper(j) = (X(j)+Dx(j))*Percnt(j) + Xlower(j) = 0. + X(j) = 0. + Dx(j) = 0. + END IF + IF(Opercn(j)(1:1).EQ.'G') THEN + Xlower(j) = (X(j)-Dx(j))*Percnt(j) + IF(Xlower(j).LT.0.) Xlower(j) = 0. + Xupper(j) = 0. + X(j) = 0. + Dx(j) = 0. + END IF + END IF + CYCLE + END IF + IF(X(j).EQ.0.) THEN + IF(Opercn(j).EQ.' '.OR.Opercn(j).EQ.'AP') THEN + Xupper(j) = Xupper(j)*(Percnt(j)+Dpercn(j)) + Xlower(j) = Xlower(j)*(Percnt(j)-Dpercn(j)) + IF(Xlower(j).LT.0.) Xlower(j) = 0. + ELSE + IF(Opercn(j)(1:1).EQ.'L') THEN + Xupper(j) = Xupper(j)*Percnt(j) + Xlower(j) = 0. + END IF + IF(Opercn(j)(1:1).EQ.'G') THEN + Xlower(j) = Xlower(j)*Percnt(j) + Xupper(j) = 0. + END IF + END IF + END IF + END DO +! + RETURN + END SUBROUTINE OUT233 +! +!*********************************************************************** +! + SUBROUTINE OUT230(I,Pargiv,Percnt,Dpercn,Opercn,Test,Itest,I10000,& + & Out,Bw,Ssave) +! +! Decode multipolarity and check mixing ratio +! If D or Q exist in MULT(I), do not decode. +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=4) :: Ssave + CHARACTER(LEN=4), DIMENSION(0:5,2) :: Bw + CHARACTER(LEN=2), DIMENSION(2) :: Opercn + CHARACTER(LEN=5), DIMENSION(2) :: Out + CHARACTER(LEN=2), DIMENSION(0:5,2) :: Test + LOGICAL(KIND=4), DIMENSION(2) :: Pargiv + INTEGER(KIND=4) :: I, I10000 + INTEGER(KIND=4), DIMENSION(2) :: Itest + REAL(KIND=8), DIMENSION(2) :: Dpercn, Percnt +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM, INDEX, MAX0 + INTEGER(KIND=4), EXTERNAL :: INDEXF +! +! Local variables +! + LOGICAL(KIND=4) :: tpargi + INTEGER(KIND=4) :: isave, itest1, itest2, j, j1, j2, k, l, titest +! + CALL LBSUP(MULt(I)) + IF(((LEN_TRIM(MULt(I))-INDEX(MULt(I),'IF ')).LE.4).AND. & + & (INDEX(MULt(I),'Q').EQ.0).AND.(INDEX(MULt(I),'D').EQ.0)) THEN + WRITE(irpt,'(4X,2A)') 'MULT=', MULt(I) + DO j = 0, 5 + DO k = 1, 2 + IF(INDEX(TRIM(MULt(I)),Test(j,k)).EQ.0) CYCLE + Itest(1) = 10*k + j + GO TO 5 + END DO + END DO + 5 IF(DELta(I).NE.0..OR.DELup(I).NE.0..OR.DELlow(I).NE.0.) THEN + WRITE(irpt,'(4X,3A)') 'PURE MULT=', MULt(I), & + & ' WITH MIXING RATIO' + j = INDEX(MULt(I),')') + IF(j.EQ.0) THEN + IF(Itest(1).GE.20) THEN + isave = Itest(1) - 20 + 1 + IF(isave.GT.5) isave = isave - 2 + Ssave = Test(1,isave) + ELSE + isave = Itest(1) - 10 + 1 + IF(isave.GT.5) isave = isave - 2 + Ssave = Test(2,isave) + END IF + MULt(I) = TRIM(MULt(I))//'+'//Ssave + ELSE + CALL SQZSTR(MULt(I),')') + IF(Itest(1).GE.20) THEN + isave = Itest(1) - 20 + 1 + IF(isave.GT.5) isave = isave - 2 + Ssave = Test(1,isave) + ELSE + isave = Itest(1) - 10 + 1 + IF(isave.GT.5) isave = isave - 2 + Ssave = Test(2,isave) + END IF + MULt(I) = TRIM(MULt(I))//'+'//TRIM(Ssave)//')' + END IF + WRITE(irpt,'(9X,2A)') MULt(I), ' ASSUMED' + GO TO 10 + END IF + GO TO 20 + END IF + 10 IF((INDEX(MULt(I),'+').EQ.0.AND.INDEX(MULt(I),',').EQ.0).OR. & + & INDEX(MULt(I),'NOT').NE.0.OR.INDEX(MULt(I),'Q').NE.0.OR. & + & INDEX(MULt(I),'D').NE.0) THEN + WRITE(irpt,'(4X,3A)') 'MULT=', MULt(I), ' CANNOT BE DECODED' + WRITE(irpt,'(A)')' ' + DO j = LINeg(I), LINeg(I+1) - 1 + WRITE(iout,'(A)') LINe(j) + END DO + I10000 = 1 + RETURN + ELSE + WRITE(irpt,'(4X,2A)') 'MULT=', MULt(I) +! +! Decode mixed multipolarity + DO j = 1, 2 + IF(j.EQ.1) THEN + j1 = 1 + j2 = MAX0(INDEX(MULt(I),'+'),INDEX(MULt(I),',')) - 1 + ELSE + j1 = j2 + 2 + j2 = LEN_TRIM(MULt(I)) + END IF + DO k = 0, 5 + DO l = 1, 2 + IF(INDEX(MULt(I)(j1:j2),Test(k,l)).EQ.0) CYCLE + Itest(j) = 10*l + k + GO TO 15 + END DO + END DO + 15 IF(INDEX(MULt(I)(j1:j2),'(').NE.0.OR. & + & INDEX(MULt(I)(j1:j2),')').NE.0) Pargiv(j) = .TRUE. + END DO + IF((DELta(I).EQ.0..AND.DDElta(I).EQ.0).AND.DELup(I).EQ.0..AND. & + & DELlow(I).EQ.0.) THEN + Percnt(1) = 0.0 + Percnt(2) = 0.0 + WRITE(irpt,'(5X,A)') 'NO MIXING RATIO GIVEN' + END IF + IF(DELta(I).NE.0.) THEN + Percnt(1) = 1./(1.+DELta(I)**2) + Percnt(2) = 1. - Percnt(1) + Dpercn(1) = (2*DELta(I)*DDElta(I))/((1.+DELta(I)**2)**2) + Dpercn(2) = Dpercn(1) + WRITE(irpt,'(5X,A,2(1PE9.3,A,E8.2,2X))') 'ADMIXTURES=', & + & (Percnt(j),'+-',Dpercn(j),j=1,2) + END IF + IF(DELup(I).NE.0.) THEN + Percnt(1) = 1./(1.+DELup(I)**2) + Percnt(2) = 1. - Percnt(1) + Opercn(2) = DELopu(I) + IF(Opercn(2).EQ.'LT') Opercn(1) = 'GE' + IF(Opercn(2).EQ.'LE') Opercn(1) = 'GT' + IF(Opercn(2).EQ.'AP') Opercn(1) = 'AP' + WRITE(irpt,'(5X,A,2(A2,1X,1PE9.3,2X))') 'ADMIXTURES=', & + & (Opercn(j),Percnt(j),j=1,2) + END IF + IF(DELlow(I).NE.0.) THEN + Percnt(1) = 1./(1.+DELlow(I)**2) + Percnt(2) = 1. - Percnt(1) + Opercn(2) = DELopl(I) + IF(Opercn(2).EQ.'GT') Opercn(1) = 'LE' + IF(Opercn(2).EQ.'GE') Opercn(1) = 'LT' + WRITE(irpt,'(5X,A,2(A2,1X,1PE9.3,2X))') 'ADMIXTURES=', & + & (Opercn(j),Percnt(j),j=1,2) + END IF + END IF +! +! Check order of multipolarities +! + 20 IF(Itest(2).NE.0) THEN + itest1 = Itest(1) - 10*(Itest(1)/10) + itest2 = Itest(2) - 10*(Itest(2)/10) + IF(itest1.GT.itest2) THEN + titest = Itest(1) + tpargi = Pargiv(1) +! + Itest(1) = Itest(2) + Pargiv(1) = Pargiv(2) +! + Itest(2) = titest + Pargiv(2) = tpargi + END IF + END IF +! + DO j = 1, 2 + IF(Itest(j).LE.10) CYCLE + k = Itest(j)/10 + l = Itest(j) - 10*k + Out(j) = Bw(l,k) + CALL ADDSTR(Out(j),LEN_TRIM(Out(j))+1,'=') + END DO + Ssave = ' ' + IF(TIOplo(I).EQ.' ') TIOplo(I) = TOPlow + IF(TIOpup(I).EQ.' ') TIOpup(I) = TOPup + IF((TOPlow(1:1).NE.TIOplo(I)(1:1).AND.TOPlow.NE.' '.AND. & + & TOPlow.NE.'AP'.AND.TIOplo(I).NE.'AP').OR. & + & (TOPup(1:1).NE.TIOpup(I)(1:1).AND.TOPup.NE.' '.AND. & + & TOPup.NE.'AP'.AND.TIOpup(I).NE.'AP')) THEN + WRITE(irpt,'(4X,A)') 'CANNOT CALCULATE PARTIAL T1/2 CORRECTLY' + WRITE(irpt,'(A)')' ' + DO j = LINeg(I), LINeg(I+1) - 1 + WRITE(iout,'(A)') LINe(j) + END DO + I10000 = 1 + RETURN + ELSE IF(DPT(I).NE.0.) THEN + WRITE(irpt,'(/5X,A,E10.3,A,E9.2,A)') 'PARTIAL T1/2=', PT(I), & + & '+-', DPT(I), ' SEC' + ELSE IF(DPTplu(i).NE.0.) THEN + WRITE(irpt,'(/5X,A,E10.3,A,E9.2,A,E9.2,A)') & + & 'PARTIAL T1/2=',PT(i),'+',DPTplu(i),'-',DPTmin(i),' SEC' + ElseIf(widg(i) .NE. ' ')Then + ssave=' ' + If(ptoplow(i) .NE. ' ')ssave=ptoplow(i) + If(ptopup(i) .NE. ' ')ssave=ptopup(i) + If(ssave .NE. ' ')Write(irpt,'(/5x,2A,E10.3)')'PARTIAL T1/2 ', & + & TRIM(ssave),pt(i) + ELSE + IF(TOPlow.NE.' ') Ssave = TOPlow + IF(TOPup.NE.' ') Ssave = TOPup + IF((TIOplo(I).EQ.' '.OR.TIOpup(I).EQ.'AP') & + & .AND.Ssave.EQ.'AP') PT(I)= 100*(TLOwer/TI(i))/BR + IF(TILow(I).NE.0.AND.TLOwer.NE.0.)PT(I) = 100*(TLOwer/TILow(I))& + & /BR + IF(TIUp(I).NE.0.AND.TUPper.NE.0.) PT(I) = 100*(TUPper/TIUp(I)) & + & /BR + IF(TIUp(I).NE.0.AND.TLOwer.NE.0.) PT(I) = 100*(TLOwer/TIUp(I)) & + & /BR + IF(TILow(I).NE.0.AND.TUPper.NE.0.)PT(I) = 100*(TUPper/TILow(I))& + & /BR + IF(PT(I).EQ.0.) THEN + WRITE(irpt,'(4X,A)') & + & 'CANNOT CALCULATE PARTIAL T1/2 CORRECTLY' + WRITE(irpt,'(A)')' ' + DO j = LINeg(I), LINeg(I+1) - 1 + WRITE(iout,'(A)') LINe(j) + END DO + I10000 = 1 + RETURN + END IF + WRITE(irpt,'(/5X,A,A2,A,E10.3,A)') 'PARTIAL T1/2 ', Ssave(1:2),& + & ' ', PT(I), ' SEC' + END IF +! + RETURN + END SUBROUTINE OUT230 +! +!*********************************************************************** +! + SUBROUTINE STCALC(E,De,A) +! +! Calculates Weisskopf single-particle half-lifes +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=8) :: A, De, E +! +! Functions used +! + REAL(KIND=8), INTRINSIC :: DBLE, DLOG, DLOG10 +! +! Local variables +! + INTEGER(KIND=4) :: i, j + REAL(KIND=8) :: lambda, r, t, t1, temp, tmplog +! +! Zero arrays for single-particle half-lifes +! + SPT = 0. + DSPt = 0. +! +! Calculation of Weisskopf single-particle half-lifes +! from memo NS-1B/1 (82). Equation 5 and equation on page 5. +! + t1 = DLOG(2.D+0)/2. + t1 = t1*(h/e2) + r = r0*A**(1./3.) + DO i = 1, 5 + lambda = DBLE(i) + temp = t1*(lambda/(lambda+1))*(((3.+lambda)/3.)**2) + temp = temp*(hc/E) + tmplog = DLOG10(temp) + DBLE(2*i)*DLOG10(hc/(E*r)) + IF(tmplog.LT.38.D0) THEN + temp = 10.D0**tmplog + ELSE + temp = 1.D+38 + END IF + DO j = 1, i + t = DBLE(2*j+1) + tmplog = DLOG10(temp) + DBLE(2)*DLOG10(t) + IF(tmplog.LT.38.D0) THEN + temp = 10.D0**tmplog + ELSE + temp = 1.D+38 + END IF + END DO + SPT(1,i) = temp + tmplog = DLOG10(temp) + DLOG10((2.*t+1.)*De/E) + IF(tmplog.LT.38.D0) THEN + DSPt(1,i) = 10.D0**tmplog + ELSE + DSPt(1,i) = 1.D+38 + END IF + tmplog = DLOG10(3.2568D0) + DLOG10(SPT(1,i)) + (2.D0/3.D0) & + & *DLOG10(A) + IF(tmplog.LT.38.D0) THEN + SPT(2,i) = 10.D0**tmplog + ELSE + SPT(2,i) = 1.D+38 + END IF + tmplog = DLOG10(3.2568D0) + DLOG10(DSPt(1,i)) + (2.D0/3.D0) & + & *DLOG10(A) + IF(tmplog.LT.38.D0) THEN + DSPt(2,i) = 10.D0**tmplog + ELSE + DSPt(2,i) = 1.D+38 + END IF + END DO + RETURN + END SUBROUTINE STCALC +! +!*********************************************************************** +! + SUBROUTINE BSPCAL(A) +! +! Calculate single-particle Reduced Matrix Elements as per +! equations 3 and 4, NS MEMO 1B/1 (82) +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=8) :: A +! +! Functions used +! + REAL(KIND=8), INTRINSIC :: DBLE +! +! Local variables +! + INTEGER(KIND=4) :: j + REAL(KIND=8) :: lambda, r, t +! +! ZERO ARRAYS +! + BSP = 0. +! + r = r0*A**(1./3.) + DO j = 1, 5 + lambda = DBLE(j) + t = (3./(3.+lambda))**2 + t = t*(r**2/1.D-24)**j + BSP(1,j) = t/(4.*pi) + BSP(2,j) = ((10.*(1.D-24))/(r**2))*t/pi + END DO + RETURN + END SUBROUTINE BSPCAL +! +!*********************************************************************** +! + SUBROUTINE BCALC(Itype,Iorder,E,De,X,Dx,A) +! +! Calculate Reduced Matrix Elements as per equations 1 and 2, +! NS MEMO 1B/1 (82). Excludes partial T1/2, BR, and MR. +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Iorder, Itype + REAL(KIND=8) :: A, De, Dx, E, X +! +! Functions used +! + REAL(KIND=8), INTRINSIC :: DBLE, DLOG +! +! Local variables +! + INTEGER(KIND=4) :: i + REAL(KIND=8) :: lambda, t +! + lambda = DBLE(Iorder) + t = hc/E + t = (h*t)*((t**2)/1.D-24)**Iorder + t = t*(lambda/(lambda+1.))*(DLOG(2.D+0)/(8.*pi)) + DO i = 1, Iorder + lambda = DBLE(i) + t = t*((2.*lambda+1.)**2) + END DO + IF(Itype.EQ.1) X = t/e2 + IF(Itype.EQ.2) X = t/mun2b + Dx = X*(2.*lambda+1.)*(De/E) +! + RETURN + END SUBROUTINE BCALC +! +!*********************************************************************** +! + SUBROUTINE RENORM(Ig,Iflag,Perint) +! +! Renormalizes electromagnetic transition branching ratios +! + IMPLICIT NONE +! +! Dummy arguments +! + LOGICAL(KIND=4) :: Perint + INTEGER(KIND=4) :: Iflag, Ig +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM + REAL(KIND=8), INTRINSIC :: DSQRT +! +! Local variables +! + INTEGER(KIND=4) :: i + REAL(KIND=8) :: dtot, missint, tot, x +! + Iflag = 0 + IF(Ig.EQ.1) THEN + TI(Ig) = 100. + DTI(Ig) = 0. + RETURN + END IF + IF(Mode.EQ.1) CALL NORM(Ig,Iflag) + IF(Iflag.NE.0) RETURN + tot = 0. + dtot = 0. + IF(Perint) missint = 100.0 + DO i = 1, Ig + IF(Perint) THEN + IF(TI(i).NE.0.) THEN + missint = missint - TI(i) + ELSE + missint = missint - RI(i) + END IF + END IF + IF(TI(i).EQ.0..AND.LEN_TRIM(TIOpup(i)//TIOplo(i)).EQ.0) THEN + TI(i) = RI(i)*(1.+CC(i)) + IF(RI(i).NE.0.) DTI(i) = TI(i) & + & *DSQRT((DRI(i)/RI(i))**2+(DCC(i) & + & /(1.+CC(i)))**2) + END IF + IF(LEN_TRIM(TIOpup(i)//TIOplo(i)).EQ.0) THEN + tot = tot + TI(i) + dtot = dtot + DTI(i)*DTI(i) + ELSE + IF(TIOpup(i).EQ.'AP') THEN + tot = tot + TIUp(i) + dtot = dtot + 0.25*TIUp(i)*TIUp(i) + END IF + IF(TIOpup(i)(1:1).EQ.'L') THEN + tot = tot + 0.5*TIUp(i) + dtot = dtot + 0.25*TIUp(i)*TIUp(i) + END IF + END IF + END DO + IF(tot.EQ.0.) THEN + Iflag = 1 + RETURN + END IF + dtot = SQRT(dtot) + IF(Perint) THEN + IF(missint.GT.0.0) tot = tot + missint + END IF + DO i = 1, Ig + IF(LEN_TRIM(TIOpup(i)//TIOplo(i)).EQ.0) THEN + x = TI(i) + TI(i) = 100.*TI(i)/tot + IF(x.NE.0.)DTI(i) = TI(i)*DSQRT((DTI(i)/x)**2+(dtot/tot)**2) + ELSE + TIUp(i) = 100.*TIUp(i)/tot + TILow(i) = 100.*TILow(i)/tot + END IF + END DO +! + RETURN + END SUBROUTINE RENORM +! +!*********************************************************************** +! + SUBROUTINE WTABLE +! +! Outputs Weisskopf single-particle half-lives +! + IMPLICIT NONE +! +! Local variables +! + CHARACTER(LEN=2) :: sdx + CHARACTER(LEN=20) :: sx + CHARACTER(LEN=100) :: line + INTEGER(KIND=4) :: j, k, lendx, lenx +! + lenx = 20 + lendx = 2 + WRITE(irpt,'(10X,2A)') & + & 'WEISSKOPF SINGLE-PARTICLE HALF-LIFES (SEC), '& + & , 'INCLUDES UNCERTAINTY IN EG' + WRITE(irpt,'(10X,A,4X,A,13X,A)') 'ORDER', 'ELECTRIC ', & + & 'MAGNETIC' + DO k = 1, 5 + DO j = 1, 2 + sx = ' ' + sdx = ' ' + CALL DCNVUS(SPT(j,k),DSPt(j,k),sx,lenx,sdx,lendx) + CALL LBSUP(sx) + CALL LBSUP(sdx) + IF(j.EQ.1) THEN + WRITE(line,'(10X,I3,6X,A15,1X,A2)') k, sx, sdx + ELSE + WRITE(line(45:),'(A15,1X,A2)') sx, sdx + WRITE(irpt,'(A)') line + END IF + END DO + END DO +! + RETURN + END SUBROUTINE WTABLE +! +!*********************************************************************** +! + REAL(KIND=8) FUNCTION DX2(X,Y,Dy,Z,Dz) +! +! Calculates the uncertainty for the product or dividend of two +! numbers +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=8) :: Dy, Dz, X, Y, Z +! +! Functions used +! + REAL(KIND=8), INTRINSIC :: DABS, DLOG10, DSQRT +! +! Local variables +! + REAL(KIND=8) :: a, b, tmplg1, tmplg2 +! + IF(Dy.LE.0..AND.Dz.LE.0.) THEN + DX2 = 0. + RETURN + END IF + IF(Y.NE.0..AND.Z.NE.0.) THEN + tmplg1 = 0.D0 + tmplg2 = 0.D0 + IF(Dy.NE.0.) tmplg1 = 2.D0*DLOG10(DABS(Dy/Y)) + IF(Dz.NE.0.) tmplg2 = 2.0D0*DLOG10(DABS(Dz/Z)) + IF(tmplg1.LT.38..AND.tmplg1.LT.38.) THEN + IF(Dy.NE.0.) THEN + a = 10.D0**tmplg1 + ELSE + a = 0.D0 + END IF + IF(Dz.NE.0.) THEN + b = 10.D0**tmplg2 + ELSE + b = 0. + END IF + IF(a.LT.(1.D+38-b)) THEN + a = a + b + a = DSQRT(a) + tmplg1 = DLOG10(X) + DLOG10(a) + IF(tmplg1.LT.38.) THEN + DX2 = 10.D0**tmplg1 + ELSE + DX2 = 1.D+38 + END IF + RETURN + ELSE + DX2 = 1.D+38 + RETURN + END IF + ELSE + DX2 = 1.D+38 + RETURN + END IF + ELSE + DX2 = 0. + IF(Y.NE.0.) DX2 = Dz + IF(Z.NE.0.) DX2 = Dy + END IF +! + RETURN + END FUNCTION DX2 +! +!*********************************************************************** +! + REAL(KIND=8) FUNCTION DX3(X,W,Dw,Y,Dy,Z,Dz) +! +! Calculates the uncertainty for the product or dividend of three +! numbers +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=8) :: Dw, Dy, Dz, W, X, Y, Z +! +! Local variables +! + REAL(KIND=8) :: a + REAL(KIND=8), INTRINSIC :: DSQRT +! + IF(W.NE.0..AND.Y.NE.0..AND.Z.NE.0.) THEN + a = (Dw/W)**2 + (Dy/Y)**2 + (Dz/Z)**2 + DX3 = X*DSQRT(a) + ELSE + DX3 = 0. + IF(Y.NE.0..AND.Z.NE.0.) THEN + DX3 = DX2(X,Y,Dy,Z,Dz) + ELSE IF(W.NE.0..AND.Z.NE.0.) THEN + DX3 = DX2(X,W,Dw,Z,Dz) + ELSE IF(W.NE.0..AND.Y.NE.0.) THEN + DX3 = DX2(X,W,Dw,Y,Dy) + ELSE IF(W.NE.0.) THEN + DX3 = Dw + ELSE IF(Y.NE.0.) THEN + DX3 = Dy + ELSE IF(Z.NE.0.) THEN + DX3 = Dz + END IF + END IF +! + RETURN + END FUNCTION DX3 +! +!*********************************************************************** +! + SUBROUTINE NORM(Ig,Iflag) +! +! Keeps track of ranges and operators in calculating +! + IMPLICIT NONE +! +! Dummy arguments +! + INTEGER(KIND=4) :: Iflag, Ig +! +! Local variables +! + INTEGER(KIND=4) :: i, isave + CHARACTER(LEN=2) :: ssave +! +! Test for operators + DO i = 1, Ig + IF(TIOplo(i).NE.' '.OR.TIOpup(i).NE.' ') GO TO 10 + END DO + RETURN + 10 ssave = ' ' + DO i = 1, Ig + IF(TIOplo(i).EQ.' '.AND.TIOpup(i).EQ.' ') CYCLE + IF(TIOpup(i).NE.' '.AND.TIOpup(i).NE.'AP'.AND.ssave.EQ.' ')THEN + isave = i + ssave = TIOpup(i) + ELSE IF(ssave.NE.' ') THEN + Iflag = 1 + WRITE(irpt,'(A)') 'CANNOT CALCULATE TI CORRECTLY' + RETURN + END IF + IF(TIOplo(i).NE.' '.AND.TIOpup(i).NE.'AP'.AND.ssave.EQ.' ')THEN + isave = i + ssave = TIOplo(i) + ELSE IF(ssave.NE.' ') THEN + Iflag = 1 + WRITE(irpt,'(A)') 'CANNOT CALCULATE TI CORRECTLY' + RETURN + END IF + END DO + DO i = 1, Ig + IF(isave.EQ.i) CYCLE + IF(ssave(1:1).EQ.'G') THEN + TIOpup(i)(1:1) = 'L' + TIOpup(i)(2:2) = ssave(2:2) + END IF + IF(ssave(1:1).EQ.'L') THEN + TIOplo(i)(1:1) = 'G' + TIOplo(i)(2:2) = ssave(2:2) + END IF + IF(TIOpup(i).EQ.' '.AND.TIOplo(i).EQ.'AP') TIOpup(i) = 'AP' + IF(TIOplo(i).EQ.' '.AND.TIOpup(i).EQ.'AP') TIOplo(i) = 'AP' + END DO +! + RETURN + END SUBROUTINE NORM +! +!*********************************************************************** +! + SUBROUTINE AZ(Str,A,Z) +! +! GETS MASS NUMBER A (INTEGER) AND ATOMIC NUMBER Z (INTEGER) +! FROM STRING STR. +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Str + INTEGER(KIND=4) :: A, Z +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM + INTEGER(KIND=4), EXTERNAL :: IVLSTR, TYPSTR +! +! Local variables +! + CHARACTER(LEN=2) :: el + CHARACTER(LEN=10) :: work + INTEGER(KIND=4) :: ie, is +! +!--- GET A + work = Str + CALL SQZSTR(work,' ') + IF(TYPSTR(work).EQ.1) THEN +!--- A>103 --> ELEMENT SYMBOL IS NUMBER. SINCE NUCID IS +!--- 5 CHARACTERS LONG, A MUST BE CH. 1-3 AND Z MUST BE CH. 4-5. + A = IVLSTR(work(1:3)) + CALL IZEL(work(4:5),Z) + GO TO 10 + END IF +! +!--- FIND OUT WHERE ELEMENT SYMBOL STARTS AND ENDS + ie = LEN_TRIM(work) + is = ie - 1 +!--- MAKE SURE THAT IS POINTS TO AN ALPHA CHARACTER; IF NOT, +!--- ELEMENT CODE IS ONE LETTER. + IF(TYPSTR(work(is:is)).NE.2) is = ie + A = IVLSTR(work(1:is-1)) +!--- GET Z + el = work(is:ie) + CALL IZEL(el,Z) +! + 10 RETURN + END SUBROUTINE AZ +! +!*********************************************************************** +! + SUBROUTINE READT(Str,T,Dt) +! +! READS HALF-LIFE FROM STRING STR. IF UNIT IS GIVEN, +! THE RESULT IS CONVERTED TO SECONDS. +! ** NOTE: THERE MUST BE AT LEAST ONE SPACE BETWEEN UNIT AND ERROR. +! IF STR IS NOT IN 2-CARD FORMAT THE CALL SHOULD BE E.G. +! CALL READT(CARD(40:49)//' '//CARD(50:55) +! IN ORDER TO GET THE NECESSARY SPACE. +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Str + REAL(KIND=8) :: Dt, T +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM + REAL(KIND=8), INTRINSIC :: DBLE +! +! Local variables +! + CHARACTER(LEN=10) :: unit + CHARACTER(LEN=50) :: work + INTEGER(KIND=4) :: i, ifound, lcu + REAL(KIND=8) :: relerr +! + CHARACTER(LEN=3), DIMENSION(17) :: tunits + DATA tunits/'AS ', 'FS ', 'PS ', 'NS ', 'US ', 'MS ', 'S ', & + & 'M ', 'H ', 'D ', 'Y ', 'KY ', 'MY ', 'GY ', 'EV ', & + & 'KEV', 'MEV'/ +! +! 1 YEAR IS 365.256 DAYS +! +! T1/2(S)=LN(2)*HBAR/WIDTH(EV) WHERE +! LN(2)*HBAR=C=4.5624*10**-16 EV*S --> 1/C=2.1918*10**15 +! + REAL(KIND=4), DIMENSION(17) :: tfact + DATA tfact/1.E-18, 1.E-15, 1.E-12, 1.E-9, 1.E-6, 1.E-3, 1., 60., & + & 3600., 8.64E+4, 3.155812E+7, 3.155812E+10, 3.155812E+13, & + & 3.155812E+16, 2.1918E+15, 2.1918E+18, 2.1918E+21/ +! + work = Str +!--- GET VALUE AND UNIT + CALL READ2(work,0,' ',ifound,unit,T,Dt) +!--- INTERPRET UNIT, CONVERT TO SECONDS. + lcu = LEN_TRIM(unit) + IF(lcu.GT.3.OR.lcu.LE.0) THEN + T = -1. + RETURN + END IF +!--- MAKE UNIT 3 CHARACTERS LONG + IF(lcu.EQ.1) unit(2:2) = ' ' + IF(lcu.LE.2) unit(3:3) = ' ' + DO i = 1, 17 + IF(unit(1:3).EQ.tunits(i)) THEN + T = T*DBLE(tfact(i)) + Dt = Dt*DBLE(tfact(i)) +!--- SPECIAL TREATMENT FOR EV, KEV, MEV + IF(i.GE.15) THEN + IF(T.GT.0.0D0) THEN + relerr = Dt/T + T = 1.0D0/T + Dt = T*relerr + END IF + RETURN + END IF + RETURN + END IF + END DO +! + RETURN + END SUBROUTINE READT +! +!*********************************************************************** +! + SUBROUTINE READ2(Str,Look,Str1,Ifound,Unit,X,Dx) +! +! READS VALUE AND ERROR OF NUMBER IN STR +! FOLLOWING THE STRING STR1. IFOUND=1 SIGNALS THAT STR1 +! IS FOUND. IF LOOK=0, NUMBER IS READ DIRECTLY FROM STR WITHOUT +! SEARCHING FOR STR1. STRING UNIT CONTAINS UNIT IF GIVEN. +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Str, Str1, Unit + INTEGER(KIND=4) :: Ifound, Look + REAL(KIND=8) :: Dx, X +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX, LEN + INTEGER(KIND=4), EXTERNAL :: INDEXF +! +! Local variables +! + CHARACTER(LEN=30) :: work + INTEGER(KIND=4) :: iblan1, iblank, iend, ipoint +! + X = 0.0 + Dx = 0.0 + IF(Look.EQ.0) THEN + work = Str + GO TO 10 + END IF + Ifound = 0 + Unit = ' ' + ipoint = INDEX(Str,Str1) + IF(ipoint.GT.0) THEN + Ifound = 1 + work = Str(ipoint+LEN(Str1):) + GO TO 10 + END IF + GO TO 20 +!--- FIND END OF STRING ($ DELIMITER) + 10 iend = INDEX(work,'$') + IF(iend.GT.0) work = work(1:iend) +!--- FIND END OF FIRST NUMBER AND CHECK IF UNIT + CALL LBSUP(work) + iblank = INDEX(work,' ') + IF(iblank.LE.0) THEN + iblank = 30 + Unit = ' ' + ELSE + Unit = work(iblank+1:) + CALL LBSUP(Unit) + iblan1 = INDEX(Unit,' ') + IF(iblan1.GT.0) THEN + Unit = Unit(1:iblan1) + END IF + END IF +!TWB-20070604 CALL DCNVSU(work(1:iblank-1),work(iblank:30),X,Dx) + CALL DCNVSU(work(1:iblank-1), & + & work(INDEXF(work,iblank+1,' '):),X,Dx) +! + 20 RETURN + END SUBROUTINE READ2 +! +!*********************************************************************** +! + INTEGER(KIND=4) FUNCTION TYPST(String) +! +! determine if unacceatable characters are in the string +! 0 = no unacceptable characters . +! 1 = something besides E,+,-,., ,or number is present +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: String +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM +! +! Local variables +! + INTEGER(KIND=4) :: i +! + TYPST = 0 + DO i = 1, LEN_TRIM(String) + IF(String(i:i).NE.' '.AND.String(i:i).NE.'.') THEN + IF(String(i:i).NE.'+'.AND.String(i:i).NE.'-') THEN + IF(String(i:i).NE.'E') THEN + IF(String(i:i).LT.'0'.OR.String(i:i).GT.'9') THEN + TYPST = 1 + EXIT + END IF + END IF + END IF + END IF + END DO +! + RETURN + END FUNCTION TYPST +! +!*********************************************************************** +! + CHARACTER(LEN=20) FUNCTION CK4EP(Str) +! +! Checks for floating point notation and adds "+" following "E" if +! necessary. This procedure is necessary since CNVU2S does not +! include the "+" but production codes require it on continuation +! records. +! + IMPLICIT NONE +! +! Dummy arguments +! + CHARACTER(LEN=*) :: Str +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX, LEN +! +! Local variables +! + INTEGER(KIND=4) :: i +! + CK4EP = Str + IF(LEN(Str).EQ.0) RETURN + i = INDEX(CK4EP,'E') + IF(i.GT.0) THEN + IF(CK4EP(i+1:i+1).GE.'0'.AND.CK4EP(i+1:i+1).LE.'9') & + & CALL ADDSTR(CK4EP,i+1,'+') + END IF +! + RETURN + END FUNCTION CK4EP +! + Subroutine Decide(ispar,parg) +! +! Decides what branching ratio or partial width on Level +! continuations to use +! + IMPLICIT NONE +! +! Dummy variables + Logical(KIND=4) :: ispar + CHARACTER(LEN=*), DIMENSION(*) :: parg +! +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX,LEN_TRIM + INTEGER(KIND=4), EXTERNAL :: INDEXF,IVLSTR,TYPSTR + REAL (KIND=8), INTRINSIC :: DSQRT + CHARACTER(LEN=*), INTRINSIC :: TRIM +! +! Local variables +! + INTEGER(KIND=4) :: nadj + INTEGER (KIND=4) :: i,j,k,l,chosen + Logical (KIND=4) :: partg,nochange + INTEGER(KIND=4), PARAMETER :: maxadj=40 + INTEGER (KIND=4), PARAMETER :: maxchos=3 + REAL (KIND=8) :: newt,newdt,oldt,olddt,tmpt,tmpdt + CHARACTER(LEN=10) :: sx + CHARACTER(LEN=5) :: sdx + CHARACTER(LEN=3) :: un + CHARACTER(LEN=60) :: tmpstr + CHARACTER(LEN=80) :: dumcrd + CHARACTER(LEN=60), DIMENSION(maxadj) :: adjust + CHARACTER (LEN=6), DIMENSION(maxchos) :: choice + DATA choice/'WIDTHG','%G','%IT'/ +! + tadjust=.FALSE. + If(nsav .EQ. 0)Return + chosen=0 + partg=.FALSE. + nadj=0 + Do i=1,maxchos + Do j=1,nsav + k=LEN_TRIM(choice(i)) + If(i .EQ. 1)Then + If(TRIM(choice(i)) .EQ. savcont(j)(1:k))Then + k=k+1 + If(savcont(j)(k:k).LT.'0' .OR. savcont(j)(k:k).GT.'9')& + & Then + chosen=j + tadjust=.TRUE. + Else + ispar=.TRUE. + l=Ivlstr(savcont(j)(k:))+1 + parg(l)=savcont(j) + EndIf + EndIf + ElseIf(chosen .EQ. 0)Then + If(TRIM(choice(i)) .EQ. savcont(j)(1:k))Then + chosen=j + EndIf + EndIf + EndDo + EndDo +100 Continue + If(chosen .GT. 0)Then + If(savcont(chosen)(1:1) .EQ. '%')Then + Write(irpt,'(/8A)')' ***** T1/2=',TRIM(tcomp),' ', & + & TRIM(dtcomp),' will be adjusted for ', & + & TRIM(savcont(chosen)),' *****' + chklev=.FALSE. + If(savcont(chosen)(1:2) .EQ. '%G')Then + i=3 + Else + i=4 + EndIf + Call PrcIT2(TRIM(savcont(chosen)(i:)),TRIM(tcomp), & + & TRIM(dtcomp)) + Else + Write(irpt,'(/8A)')' ***** ',TRIM(savcont(chosen)), & + & ' will be used in place of ',TRIM(tcomp),' ',TRIM(dtcomp),& + & ' *****' + chklev=.FALSE. + i=INDEX(savcont(chosen),'=') + If(i .GT. 0)Then + tmpstr=savcont(chosen)(i+1:) + Call Lbsup(tmpstr) + i=INDEX(tmpstr,'+') + If(i .EQ. 0)Then + Call Readt(TRIM(tmpstr),t,dt) + Else + dt=0.0 + j=INDEX(tmpstr,'-') + Call Readt(tmpstr(1:i-1)//tmpstr(i+1:j-1),t,dtplus) + Call Readt(tmpstr(1:i-1)//tmpstr(j+1:),t,dtmin) + EndIf + EndIf + EndIf + ElseIf(tcomp .NE. ' ')Then + Do i=1,nsav + If(INDEX(savcont(i),TRIM(tcomp)//' '//TRIM(dtcomp)) .GT. 0) & + & THEN + Write(irpt,'(/8A)')' ***** ',TRIM(savcont(i)), & + & ' equal to T1/2=',TRIM(tcomp),' ',TRIM(dtcomp),' *****'& + tcomp=' ' + GoTo 200 + EndIf + EndDo + EndIf +200 Continue + If(savcont(chosen)(1:LEN_TRIM(choice(1))).NE.TRIM(choice(1)) .AND.& + & tcomp.NE.' ')Then + Do i=1,nsav + If(savcont(i)(1:5).EQ.'WIDTH' .AND. savcont(i)(6:6).NE.'G') & + & Then + nadj=nadj+1 + adjust(nadj)=savcont(i) + EndIf + EndDo + If(nadj .GT. 0)Then + If(Typstr(dtcomp) .EQ. 1)Then + Write(irpt,'(/5A)')' ***** T1/2=',TRIM(tcomp),' ', & + & TRIM(dtcomp),' will be adjusted for: *****' + nochange=.FALSE. + Else + Write(irpt,'(/5A)')' ***** T1/2=',TRIM(tcomp),' ', & + & TRIM(dtcomp),' will not be adjusted for: *****' + nochange=.TRUE. + EndIf + If(.NOT.nochange)Then + Call Lbsup(tcomp) + j=INDEX(tcomp,' ') + k=Indexf(tcomp,j+1,' ') + sx=tcomp(1:j-1) + un=tcomp(j+1:k-1) + sdx=dtcomp + Call Lbsup(sdx) + Call Dcnvsu(sx,sdx,oldt,olddt) + If(un .EQ. 'KEV')Then + oldt=oldt*1.0E+3 + olddt=olddt*1.0E+3 + ElseIf(un .EQ. 'MEV')Then + oldt=oldt*1.0E+6 + olddt=olddt*1.0E+6 + EndIf + newt=oldt + newdt=olddt*olddt + EndIf + Do i=1,nadj + j=INDEX(adjust(i),'=') + k=INDEX(adjust(i),'+') + If(j.GT.0 .AND. k.EQ.0)Then + Write(irpt,'(2A)')' ',adjust(i) + Else + Write(irpt,'(2A,1X,A)')' ',TRIM(adjust(i)), & + & 'Range or asymmetric. Skipping adjustment' + nochange=.TRUE. + EndIf + If(.NOT.nochange)Then + sx=adjust(i)(j+1:) + Call Lbsup(sx) + j=INDEX(sx,' ') + k=Indexf(sx,j+1,' ') + sdx=sx(k+1:) + Call Lbsup(sdx) + un=sx(j+1:k-1) + sx=sx(1:j-1) + Call Dcnvsu(sx,sdx,tmpt,tmpdt) + If(un .EQ. 'KEV')Then + tmpt=oldt*1.0E+3 + tmpdt=olddt*1.0E+3 + ElseIf(un .EQ. 'MEV')Then + tmpt=oldt*1.0E+6 + tmpdt=olddt*1.0E+6 + EndIf + newt=newt-tmpt + newdt=newdt-tmpdt*tmpdt + EndIf + EndDo + If(.NOT.nochange)Then + chklev=.FALSE. + Call Dcnvus(oldt,olddt,sx,10,sdx,2) + Call Lbsup(sx) + Call Lbsup(sdx) + tmpstr='Changing '//TRIM(sx)//' EV '//sdx + If(newdt .GT. 0)Then + newdt=DSQRT(newdt) + Else + newdt=0.0 + EndIf + If(newt .LE. 0)Then + tgiven=.FALSE. + newt=0.0 + EndIf + Call Dcnvus(newt,newdt,sx,10,sdx,2) + Call Lbsup(sx) + Call Lbsup(sdx) + tmpstr=TRIM(tmpstr)//' to '//TRIM(sx)//' eV '//sdx + If(.NOT.tgiven) & + & tmpstr=TRIM(tmpstr)//' - No gammas expected' + Write(irpt,'(2A)')' ',TRIM(tmpstr) + EndIf + EndIf + EndIf + Do i=1,nsav + k=LEN_TRIM(choice(1)) + If(TRIM(choice(1)).EQ.savcont(i)(1:k) .AND. & + & (savcont(i)(k+1:k+1).GE.'0' .AND. & + & savcont(i)(k+1:k+1).LE.'9'))Then + partg=.TRUE. + GoTo 300 + EndIf + EndDo +300 Continue + If(partg)Then + Write(irpt,'(/A)')' ***** Partial gamma widths found *****' + Do i=1,nsav + k=LEN_TRIM(choice(1)) + If(TRIM(choice(1)).EQ.savcont(i)(1:k) .AND. & + & (savcont(i)(k+1:k+1).GE.'0' .AND. & + & savcont(i)(k+1:k+1).LE.'9')) & + & Write(irpt,'(2A)')' ',TRIM(savcont(i)) + EndDo + EndIf +! + Return +! + End Subroutine Decide +! + Subroutine PrcIT2(itg,t,dt) +! +! Processes %IT or %G found on Level continuation record +! + IMPLICIT NONE +! +! Dummy variables +! + CHARACTER(LEN=*) :: itg,t,dt +! +! Functions used +! + CHARACTER(LEN=8), INTRINSIC :: TRIM + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM, INDEX, LEN, MAX0 + INTEGER(KIND=4), EXTERNAL :: INDEXF,IVLSTR + REAL(KIND=8), INTRINSIC :: DABS, DSQRT +! +! Local variables +! + CHARACTER(LEN=70) :: tmpstr + INTEGER(KIND=4) :: i, j, k, l + REAL(KIND=8) :: dx, dy, x, y +! + tmpstr=itg + i=INDEX(tmpstr,'(') + If(i .GT. 0)tmpstr=tmpstr(1:i-1) + If(tmpstr(1:1) .EQ. '=')Then + tmpstr=tmpstr(2:) + j=INDEX(tmpstr,' ') + If(j.GT.0.AND.j.LT.LEN_TRIM(tmpstr)) Then + k=Indexf(tmpstr,j+1,'+') + If(k .EQ. 0)Then + Call DCNVSU(tmpstr(1:j-1),tmpstr(j+1:),br,dbr) + Else + l=Indexf(tmpstr,k+1,'-') + If(Ivlstr(tmpstr(k+1:l-1)) .GT. Ivlstr(tmpstr(l+1:)))Then + Write(irpt,'(4A)')' Assuming: ', & + & tmpstr(1:j-1),' ',tmpstr(k+1:l-1) + Call DCNVSU(tmpstr(1:j-1),tmpstr(k+1:l-1),br,dbr) + Else + Write(irpt,'(4A)')' Assuming: ', & + & tmpstr(1:j-1),' ',tmpstr(l+1:) + Call DCNVSU(tmpstr(1:j-1),tmpstr(l+1:),br,dbr) + EndIf + EndIf + Else + Call DCNVSU(TRIM(tmpstr),' ',br,dbr) + EndIf + BR=BR/100. + DBR=DBR/100. + Else + j = MAX0(INDEX(tmpstr,'G'),INDEX(tmpstr,'>')) + k = MAX0(INDEX(tmpstr,'L'),INDEX(tmpstr,'<')) + IF(j.GT.0.OR.k.GT.0) THEN + IF(j.GT.0.AND.k.GT.0) THEN + Write(irpt,'(2A)')' Assuming: ', & + & '(lower+upper)/2' + IF(j.LT.k) THEN + I = LEADNO(tmpstr(1:k-1),j+1) + l = INDEXF(tmpstr,I,' ') + IF(l.GT.0.AND.l.LT.k-1) THEN + CALL DCNVSU(tmpstr(I:l-1),tmpstr(l+1:k-1),x,dx) + ELSE + CALL DCNVSU(tmpstr(I:l-1),' ',x,dx) + END IF + I = LEADNO(TRIM(tmpstr),k+1) + l = INDEXF(tmpstr,I,' ') + IF(l.GT.0.AND.l.LT.LEN_TRIM(tmpstr)) THEN + CALL DCNVSU(tmpstr(I:l-1),tmpstr(l+1:),y,dy) + ELSE + CALL DCNVSU(tmpstr(I:l-1),' ',y,dy) + END IF + ELSE + I = LEADNO(TRIM(tmpstr),j+1) + l = INDEXF(tmpstr,I,' ') + IF(l.GT.0.AND.l.LT.LEN_TRIM(tmpstr)) THEN + CALL DCNVSU(tmpstr(I:l-1),tmpstr(l+1:),x,dx) + ELSE + CALL DCNVSU(tmpstr(I:l-1),' ',x,dx) + END IF + I = LEADNO(tmpstr(1:j-1),k+1) + l = INDEXF(tmpstr,I,' ') + IF(l.GT.0.AND.l.LT.j-1) THEN + CALL DCNVSU(tmpstr(I:l-1),tmpstr(l+1:j-1),y,dy) + ELSE + CALL DCNVSU(tmpstr(I:l-1),' ',y,dy) + END IF + END IF + y = y + dy + x = x - dx + BR = (x+y)/2. + DBR = y - BR + BR = BR/100. + DBR = DBR/100. + ELSE IF(j.GT.0) THEN + I = LEADNO(TRIM(tmpstr),j+1) + l = INDEXF(tmpstr,I,' ') + IF(l.GT.0.AND.l.LT.LEN_TRIM(tmpstr)) THEN + CALL DCNVSU(tmpstr(I:l-1),tmpstr(l+1:),x,dx) + ELSE + CALL DCNVSU(TRIM(tmpstr),' ',x,dx) + END IF + x = x - dx + BR = (100.+x)/200. + DBR = 1. - BR + Write(irpt,'(2A)')' Assuming: ', & + & '(1.+%IT)/2' + ELSE + I = LEADNO(TRIM(tmpstr),k+1) + l = INDEXF(tmpstr,I,' ') + IF(l.GT.0.AND.l.LT.LEN_TRIM(tmpstr)) THEN + CALL DCNVSU(tmpstr(I:l-1),tmpstr(l+1:),x,dx) + ELSE + CALL DCNVSU(TRIM(tmpstr),' ',x,dx) + END IF + x = x + dx + BR = x/200. + DBR = BR + Write(irpt,'(2A)')' Assuming: ', & + & '%IT/2' + END IF + ElseIf(INDEX(tmpstr,'AP') .GT. 0)Then + I = INDEX(tmpstr,'AP') + tmpstr = tmpstr(I+LEN('AP'):) + CALL LBSUP(tmpstr) + j = INDEX(tmpstr,' ') + IF(j.GT.0.AND.j.LT.LEN_TRIM(tmpstr)) THEN + CALL DCNVSU(tmpstr(1:j-1),tmpstr(j+1:),BR,DBR) + ELSE + CALL DCNVSU(TRIM(tmpstr),' ',BR,DBR) + END IF + BR = BR/100. + DBR = DBR/100. + Write(irpt,'(2A)')' Assuming: ', & + & '50% uncertainty' + DBR = DSQRT(DBR**2+0.25*BR**2) + Else + Write(irpt,'(2A)')' String could not be ', & + & 'decoded - No adjustment' + EndIf + EndIf +! + End Subroutine PrcIT2 +! + LOGICAL(KIND=4) FUNCTION CHKBS(str) +! + IMPLICIT NONE +! +! Dummy variables +! + CHARACTER(LEN=80) :: str +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX +! +! Local variables +! + INTEGER(KIND=4) :: i,j + CHARACTER(LEN=4), DIMENSION(0:5,2) :: bw + DATA((bw(i,j),i=0,5),j=1,2)/'BE0W', 'BE1W', 'BE2W', 'BE3W', & + & 'BE4W', 'BE5W', ' ', 'BM1W', 'BM2W', 'BM3W', 'BM4W', & + & 'BM5W'/ +! + chkbs=.FALSE. + Do i=1,5 + Do j=1,2 + If(INDEX(str,bw(i,j)) .GT. 0)Then + chkbs=.TRUE. + Return + EndIf + EndDo + EndDo +! + Return +! + END FUNCTION CHKBS +! + SUBROUTINE ASYCAL(x,dxplu,dxmin,outstr,proberr) +! +! Formats the strings for asymmetric uncertainties +! + IMPLICIT NONE +! +! Dummy arguments +! + REAL(KIND=8) :: x,dxplu,dxmin + CHARACTER(LEN=*) :: outstr,proberr +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM + INTEGER(KIND=4), INTRINSIC :: LEN_TRIM, INDEX, IABS + INTEGER(KIND=4), EXTERNAL :: IVLSTR +! +! Local variables +! + INTEGER(KIND=4) :: i, j, ie, je, ip, jp, sigdig, trycnt + CHARACTER(LEN=6) :: sdx, sdx2 + CHARACTER(LEN=40) :: str, test + CHARACTER(LEN=20) :: sx, sx2 +! + str=' ' + proberr=' ' + trycnt=0 + CALL DCNVUS(x,dxplu,sx,10,sdx,2) + CALL LBSUP(sx) + CALL LBSUP(sdx) + CALL DCNVUS(x,dxmin,sx2,10,sdx2,2) + CALL LBSUP(sx2) + CALL LBSUP(sdx2) + ie=INDEX(sx,'E') + je=INDEX(sx2,'E') + ip=INDEX(sx,'.') + jp=INDEX(sx2,'.') + If(sx .EQ. sx2)Then + ElseIf(ie.GT.0 .AND. je.GT.0)Then + If(sx(ie:) .EQ. sx2(je:))Then + If(ip.GT.0 .AND. jp.GT.0)Then + If(LEN_TRIM(sx) .GT. LEN_TRIM(sx2))Then + sigdig=LEN_TRIM(sx)-LEN_TRIM(sx2)+1 + If(sigdig.EQ.LEN_TRIM(sdx2) .AND. sdx2.NE.'10') & + & sigdig=sigdig+1 + CALL DCNVUS(x,dxmin,sx2,LEN(sx2),sdx2,-sigdig) + CALL LBSUP(sx2) + i=INDEX(sx2,' ') + sdx2=sx2(i+1:) + sx2=sx2(1:i-1) + ElseIf(LEN_TRIM(sx2) .GT. LEN_TRIM(sx))Then + sigdig=LEN_TRIM(sx2)-LEN_TRIM(sx)+1 + If(sigdig.EQ.LEN_trim(sdx) .AND. sdx.NE.'10') & + & sigdig=sigdig+1 + CALL DCNVUS(x,dxplu,sx,LEN(sx),sdx,-sigdig) + CALL LBSUP(sx) + i=INDEX(sx,' ') + sdx=sx(i+1:) + sx=sx(1:i-1) + Else + EndIf + ElseIf(ip .GT. 0)Then + ElseIf(jp .GT. 0)Then + If(LEN_TRIM(sx) .GT. LEN_TRIM(sx2)-1)Then + sigdig=LEN_TRIM(sx)-(LEN_TRIM(sx2)-1)+1 + If(sigdig.EQ.LEN_trim(sdx2) .AND. sdx2.NE.'10') & + & sigdig=sigdig+1 + CALL DCNVUS(x,dxmin,sx2,LEN(sx2),sdx2,-sigdig) + CALL LBSUP(sx2) + i=INDEX(sx2,' ') + sdx2=sx2(i+1:) + sx2=sx2(1:i-1) + ElseIf(LEN_TRIM(sx2)-1 .GT. LEN_TRIM(sx))Then + sigdig=LEN_TRIM(sx2)-1-LEN_TRIM(sx)+1 + If(sigdig.EQ.LEN_trim(sdx) .AND. sdx.NE.'10') & + & sigdig=sigdig+1 + CALL DCNVUS(x,dxplu,sx,LEN(sx),sdx,-sigdig) + CALL LBSUP(sx) + i=INDEX(sx,' ') + sdx=sx(i+1:) + sx=sx(1:i-1) + Else + EndIf + Else + EndIf + ElseIf(Ivlstr(sx(ie+1:)) .LT. Ivlstr(sx2(je+1:)))Then + If(jp.GT.0 .AND. ip.GT.0)Then + sigdig=LEN_TRIM(sx)-ip-(LEN_TRIM(sx2)-jp) + ElseIf(jp .GT. 0)Then + sigdig=LEN_TRIM(sx)-(LEN_TRIM(sx2)-jp) + Else + sigdig=LEN_TRIM(sx)-ip-LEN_TRIM(sx2) + EndIf + If(sigdig .LE. 0)sigdig=1 + If(sigdig .LE. LEN_TRIM(sdx2))sigdig=sigdig+1 + CALL DCNVUS(x,dxmin,sx2,LEN(sx2),sdx2,-sigdig) + CALL LBSUP(sx2) + i=INDEX(sx2,' ') + sdx2=sx2(i+1:) + sx2=sx2(1:i-1) + Else + If(ip.GT.0 .AND. jp.GT.0)Then + sigdig=LEN_TRIM(sx2)-jp-(LEN_TRIM(sx)-ip) + ElseIf(ip .GT. 0)Then + sigdig=LEN_TRIM(sx2)-(LEN_TRIM(sx)-ip) + Else + sigdig=LEN_TRIM(sx2)-jp-LEN_TRIM(sx) + EndIf + If(sigdig .LE. 0)sigdig=1 + If(sigdig .LE. LEN_TRIM(sdx))sigdig=sigdig+1 +130 Continue + CALL DCNVUS(x,dxplu,sx,LEN(sx),sdx,-sigdig) + CALL LBSUP(sx) + i=INDEX(sx,' ') + sdx=sx(i+1:) + sx=sx(1:i-1) + If(LEN_TRIM(sx).LT.LEN_TRIM(sx2) .AND. trycnt.LE.4)Then + trycnt=trycnt+1 + sigdig=sigdig+1 + GoTo 130 + Else + ie=INDEX(sx,'E') + je=INDEX(sx2,'E') + If(ie.GT.0 .AND. je.GT.0)Then + If(sx(ie:) .GT. sx2(je:))Then + sigdig=sigdig+1 + GoTo 130 + EndIf + EndIf + EndIf + EndIf + ElseIf(ie.GT.0)Then + If(ip.GT.0 .AND. jp.GT.0)Then + If(LEN_TRIM(sx2) .GT. LEN_TRIM(sx(1:ie-1)))Then + sigdig=LEN_TRIM(sx2)-1-LEN_TRIM(sx(1:ie-1))+1 + If(sigdig.LE.LEN_trim(sdx) .AND. sdx.NE.'10') & + & sigdig=sigdig+1 +100 Continue + CALL DCNVUS(x,dxplu,sx,LEN(sx),sdx,-sigdig) + CALL LBSUP(sx) + i=INDEX(sx,' ') + sdx=sx(i+1:) + sx=sx(1:i-1) + i=INDEX(sx,'E')-1 + If(i .EQ. -1)i=LEN_TRIM(sx) + If(LEN_TRIM(sx2).GT.LEN_TRIM(sx(1:i)) .AND. trycnt.LE.4) & + & Then + trycnt=trycnt+1 + sigdig=sigdig+1 + GoTo 100 + EndIf + Else + EndIf + ElseIf(ip .GT. 0)Then + If(LEN_TRIM(sx2) .GT. LEN_TRIM(sx(1:ip-1)))Then + sigdig=LEN_TRIM(sx2)-LEN_TRIM(sx(1:ie-1))+1 + If(sigdig.EQ.LEN_trim(sdx) .AND. sdx.NE.'10') & + & sigdig=sigdig+1 +110 Continue + CALL DCNVUS(x,dxplu,sx,LEN(sx),sdx,-sigdig) + CALL LBSUP(sx) + i=INDEX(sx,' ') + sdx=sx(i+1:) + sx=sx(1:i-1) + i=INDEX(sx,'.')-1 + If(i .EQ. -1)i=LEN_TRIM(sx) + If(LEN_TRIM(sx2).GT.LEN_TRIM(sx(1:i)) .AND. trycnt.LE.4) & + & Then + trycnt=trycnt+1 + sigdig=sigdig+1 + GoTo 110 + EndIf + ElseIf(LEN_TRIM(sx2) .EQ. LEN_TRIM(sx(1:ip-1)))Then + sigdig=LEN_TRIM(sdx)+1 + CALL DCNVUS(x,dxplu,sx,LEN(sx),sdx,-sigdig) + CALL LBSUP(sx) + i=INDEX(sx,' ') + sdx=sx(i+1:) + sx=sx(1:i-1) + Else + EndIf + ElseIf(jp .GT. 0)Then + Else + EndIf + ElseIf(je .GT. 0)Then + If(LEN_TRIM(sx) .GT. LEN_TRIM(sx2(1:jp-1)))Then + sigdig=LEN_TRIM(sx)-LEN_TRIM(sx2(1:jp-1)) + If(sigdig .EQ. 0)sigdig=1 + If(sigdig .LE. LEN_TRIM(sdx2))sigdig=sigdig+1 + CALL DCNVUS(x,dxmin,sx2,LEN(sx2),sdx2,-sigdig) + CALL LBSUP(sx2) + i=INDEX(sx2,' ') + sdx2=sx2(i+1:) + sx2=sx2(1:i-1) + Else + EndIf + Else + If(ip.GT.0 .AND. jp.GT.0)Then + If(LEN_TRIM(sx) .GT. LEN_TRIM(sx2))Then + sigdig=LEN_TRIM(sx)-LEN_TRIM(sx2)+1 + If(sigdig.EQ.LEN_trim(sdx2) .AND. sdx2.NE. '10') & + & sigdig=sigdig+1 + CALL DCNVUS(x,dxmin,sx2,LEN(sx2),sdx2,-sigdig) + CALL LBSUP(sx2) + i=INDEX(sx2,' ') + sdx2=sx2(i+1:) + sx2=sx2(1:i-1) + ElseIf(LEN_TRIM(sx2) .GT. LEN_TRIM(sx))Then + sigdig=LEN_TRIM(sx2)-LEN_TRIM(sx)+1 + If(sigdig.EQ.LEN_trim(sdx) .AND. sdx.NE.'10') & + & sigdig=sigdig+1 + CALL DCNVUS(x,dxplu,sx,LEN(sx),sdx,-sigdig) + CALL LBSUP(sx) + i=INDEX(sx,' ') + sdx=sx(i+1:) + sx=sx(1:i-1) + Else + EndIf + ElseIf(ip .GT. 0)Then + If(LEN_TRIM(sx)-1 .GT. LEN_TRIM(sx2))Then + sigdig=LEN_TRIM(sdx2)+1 + CALL DCNVUS(x,dxmin,sx2,LEN(sx2),sdx2,-sigdig) + CALL LBSUP(sx2) + i=INDEX(sx2,' ') + sdx2=sx2(i+1:) + sx2=sx2(1:i-1) + Else + EndIf + ElseIf(jp .GT. 0)Then + If(LEN_TRIM(sx) .GT. LEN_TRIM(sx2)-1)Then + sigdig=LEN_TRIM(sx)-(LEN_TRIM(sx2)-1)+1 + If(sigdig.EQ.LEN_trim(sdx2) .AND. sdx2.NE.'10') & + & sigdig=sigdig+1 + CALL DCNVUS(x,dxmin,sx2,LEN(sx2),sdx2,-sigdig) + CALL LBSUP(sx2) + i=INDEX(sx2,' ') + sdx2=sx2(i+1:) + sx2=sx2(1:i-1) + ElseIf(LEN_TRIM(sx2)-1 .GT. LEN_TRIM(sx))Then + sigdig=LEN_TRIM(sx2)-1-LEN_TRIM(sx)+1 + If(sigdig.EQ.LEN_TRIM(sdx) .AND. sdx.NE.'10') & + & sigdig=sigdig+1 + CALL DCNVUS(x,dxplu,sx,LEN(sx),sdx,-sigdig) + CALL LBSUP(sx) + i=INDEX(sx,' ') + sdx=sx(i+1:) + sx=sx(1:i-1) + Else + EndIf + Else + EndIf + EndIf + If(x .LE. dxmin)Then + test=sx + If(INDEX(test,'E').EQ.0 .AND. INDEX(test,'.').EQ.0)Then + sdx2=test + ELSE + i=INDEX(test,'E') + If(i .GT. 0)test=test(1:i-1) + i=INDEX(test,'.') + If(i .GT. 0)Then + If(test(1:1) .EQ. '0')Then + i=i+1 + Do While(test(i:i) .EQ. '0') + i=i+1 + EndDo + test=test(i:) + Else + test=test(1:i-1)//test(i+1:) + EndIf + If(LEN_TRIM(test).EQ.LEN_TRIM(sdx2) & + & .AND. test.LT.sdx2)Then + sdx2=test + ElseIf(LEN_TRIM(test).LT.LEN_TRIM(sdx2))Then + sdx2=test + EndIf + EndIf + EndIf + EndIf + If(sx .NE. sx2)Then + proberr=TRIM(sx)//' +'//TRIM(sdx)//'; '//TRIM(sx2)//' -'//sdx2 + EndIf + str=CK4EP(sx) + If(sdx .EQ. sdx2)Then + str=TRIM(str)//' '//sdx + Else + str=TRIM(str)//' +'//TRIM(sdx)//'-'//sdx2 + EndIf + If(IABS(LEN_TRIM(sdx)-LEN_TRIM(sdx2)) .GT. 2)Then + proberr='Too many sig. digits. Convert to limit?' + EndIf + outstr=str +! + Return +! + END SUBROUTINE ASYCAL +! + SUBROUTINE BWVSRUL(instr,oldnew) +! +! Compares calculated BElW's and BMlW's to RUL and reports discrepances +! + IMPLICIT NONE +! +! Dummy variables +! + CHARACTER(LEN=*) :: instr,oldnew +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INDEX, LEN_TRIM + INTEGER(KIND=4), EXTERNAL :: INDEXF + CHARACTER(LEN=1), INTRINSIC :: CHAR + CHARACTER(LEN=*), INTRINSIC :: TRIM +! +! Local variables +! + INTEGER(KIND=4) :: i,ivis,j,k,lncnt + CHARACTER(LEN=2) :: typ + CHARACTER(LEN=2), DIMENSION(3) :: vecsca + CHARACTER(LEN=20) :: sx,sdx + CHARACTER(LEN=40) :: oldstr,testlim + CHARACTER(LEN=40), DIMENSION(2) :: str + CHARACTER(LEN=80), DIMENSION(8) :: line + REAL(KIND=4) :: test,x,dx +! + Data vecsca/' ','IS','IV'/ +! + str=' ' + line=' ' + lncnt=0 + If(oldnew .EQ. 'N')Then + i=INDEX(instr,'$') + If(i .GT. 0)Then + str(1)=instr(10:i-1) + str(2)=instr(i+1:) + Else + str(1)=instr(10:) + EndIf + ElseIf(oldnew .EQ. 'O')Then + i=0 + j=10 + Do While(j .LT. LEN_TRIM(instr)) + k=Indexf(instr,j,'$') + If(k .EQ. 0)k=LEN_TRIM(instr) + If(instr(j:j).EQ.'B' .AND. instr(j+3:j+3).EQ.'W')Then + i=i+1 + str(i)=instr(j:k) + If(str(i)(LEN_TRIM(str(i)):LEN_TRIM(str(i))) .EQ. '$') & + & str(i)(LEN_TRIM(str(i)):LEN_TRIM(str(i)))=' ' + EndIf + j=k+1 + EndDo + Else + Return + EndIf + Do i=1,2 + oldstr=str(i) + Call REPSTR(str(i),'(',CHAR(0)) + Call REPSTR(str(i),')',CHAR(0)) + Call REPSTR(str(i),'?',CHAR(0)) + If(str(i).NE.' ' .AND. INDEX(str(i),'<').EQ.0 & + & .AND. INDEX(str(i),' L').EQ.0)Then + typ=str(i)(2:3) + j=INDEX(str(i),'=') + If(j .GT. 0)Then + str(i)=str(i)(j+1:) + j=INDEX(str(i),' ') + If(j .EQ. 0)Then + sx=str(i) + sdx=' ' + Else + sx=str(i)(1:j-1) + sdx=str(i)(j+1:) + Call Lbsup(sdx) + j=INDEX(sdx,'-') + If(j .GT. 0)sdx=sdx(j+1:) + Call Lbsup(sdx) + EndIf + Call CNVS2U(sx,sdx,x,dx) + EndIf + j=INDEX(str(i),' AP ') + If(j .GT. 0)Then + sx=str(i)(j+4:) + sdx=' ' + Call CNVS2U(sx,sdx,x,dx) + dx=0.4*x + EndIf + j=INDEX(str(i),'>') + If(j .GT. 0)Then + j=j+1 + Else + j=INDEX(str(i),' G') + If(j .GT. 0)j=j+4 + EndIf + If(j .GT. 0)Then + sx=str(i)(j:) + sdx=' ' + Call CNVS2U(sx,sdx,x,dx) + dx=0.1*x + EndIf + Do j=3,1,-1 + test=x-j*dx + If(test .GT. 0)Then + Do ivis=1,3 + testlim=Comlim(instr(1:3),typ,test,vecsca(ivis)) + If(testlim .NE. ' ')Then + lncnt=lncnt+1 + line(lncnt)(10:)=TRIM(oldstr)//' exceeds' + line(lncnt)=TRIM(line(lncnt))//' '//testlim + Do k=lncnt-1,1,-1 + If(INDEX(line(k),TRIM(line(lncnt))) .GT. 0) & + & Then + lncnt=lncnt-1 + GoTo 100 + EndIf + EndDo + If(INDEX(oldstr,'>').EQ.0 & + & .AND.INDEX(oldstr,' G').EQ.0)Then + line(lncnt)=TRIM(line(lncnt))//' by' + If(j .EQ. 3)Then + line(lncnt)=TRIM(line(lncnt)) & + & //' more than 3' + Else + k=LEN_TRIM(line(lncnt))+2 + Write(line(lncnt)(k:k),'(I1)')j + line(lncnt)=TRIM(line(lncnt))//' to' + k=LEN_TRIM(line(lncnt))+2 + Write(line(lncnt)(k:k),'(I1)')j+1 + EndIf + line(lncnt)=TRIM(line(lncnt))//' sigma' + EndIf + If(INDEX(oldstr,'AP') .GT. 0)Then + line(lncnt)=TRIM(line(lncnt))//' assuming' + line(lncnt)=TRIM(line(lncnt))//' 40% uncer.' + EndIf + EndIf +100 Continue + EndDo + EndIf + EndDo + EndIf + EndDo + If(lncnt .GT. 0)Then + chkds4=.TRUE. + nprobs=1 + If(oldnew .EQ. 'N')Then + Write(irpt,'(/4X,A)')'Discrepancies with RUL on new record:' + linprob(1)(5:)='Discrepancies with RUL on new record:' + ElseIf(oldnew .EQ. 'O')Then + Write(irpt,'(/4X,A)')'Discrepancies with RUL on old record:' + linprob(1)(5:)='Discrepancies with RUL on old record:' + Else + Write(irpt,'(/4X,A)')'Discrepancies with RUL:' + linprob(1)(5:)='Discrepancies with RUL on record:' + EndIf + Do i=1,lncnt + Write(irpt,'(A)')TRIM(line(i)) + nprobs=nprobs+1 + linprob(nprobs)=line(i) + EndDo + Call ERRRPT + EndIf +! + Return +! + END SUBROUTINE BWVSRUL +! + CHARACTER(LEN=40) FUNCTION COMLIM(mass,mult,x,typ) +! +! Compares lower limit to RUL +! + IMPLICIT NONE +! +! Dummy variables +! + Character(LEN=*) mass,mult,typ + REAL(KIND=4) :: x +! +! Functions used +! + INTEGER(KIND=4), INTRINSIC :: INT,LEN_TRIM + INTEGER(KIND=4), EXTERNAL :: IVLSTR + CHARACTER(LEN=*), INTRINSIC :: TRIM +! +! Local variables +! + INTEGER(KIND=4) :: a, i, iord, imult, ivis +! + comlim=' ' + a=Ivlstr(mass) + If(mult(1:1) .EQ. 'E')Then + imult=1 + Else + imult=2 + EndIf + iord=Ivlstr(mult(2:2)) + If(iord .GT. 4)Return + If(a .LT. 6)Then + Return + ElseIf(a .LE. 44)Then + If(imult.EQ.1 .AND. iord.LE.2 .AND. typ.EQ.' ')Return + If(imult.EQ.1 .AND. iord.GT.2 .AND. typ.NE.' ')Return + If(imult.EQ.2 .AND. iord.LE.2 .AND. typ.EQ.' ')Return + If(imult.EQ.2 .AND. iord.EQ.3 .AND. typ.NE.'IV')Return + If(imult.EQ.2 .AND. iord.GT.3)Return + If(typ.EQ.'IS' .OR. typ.EQ.' ')Then + ivis=1 + Else + ivis=2 + EndIf + Else + If(imult.EQ.1 .AND. iord.EQ.1 .AND. typ.NE.'IV')Return + If(imult.EQ.1 .AND. iord.EQ.2 .AND. typ.NE.'IS')Return + If(imult.EQ.1 .AND. iord.GT.2 .AND. typ.NE.' ')Return + If(imult.EQ.2 .AND. iord.LE.3 .AND. typ.NE.'IV')Return + If(imult.EQ.2 .AND. iord.GT.3 .AND. typ.NE.' ')Return + If(typ.EQ.'IS' .OR. typ.EQ.' ')Then + ivis=1 + Else + ivis=2 + EndIf + EndIf +! + If(limits(imult,iord,ivis) .EQ. 0)Return +! + If(x .GT. limits(imult,iord,ivis))Then + comlim='RUL' + If(typ .NE. ' ')comlim=TRIM(comlim)//'('//typ//')' + comlim=TRIM(comlim)//'=' + i=LEN_TRIM(comlim)+1 + If(limits(imult,iord,ivis) .GE. 1)Then + Write(comlim(i:),'(I3)')INT(limits(imult,iord,ivis)) + Call Lbsup(comlim(i:)) + Else + Write(comlim(i:),'(F1.10)')limits(imult,iord,ivis) + Call Lbsup(comlim(i:)) + i=LEN_TRIM(comlim) + Do While(comlim(i:i) .EQ. '0') + comlim(i:i)=' ' + i=LEN_TRIM(comlim) + EndDo + EndIf + EndIf +! + RETURN +! + END FUNCTION COMLIM +! + SUBROUTINE ERRRPT + IMPLICIT NONE +! +! Outputs problems to new summary file +! +! Functions used +! + CHARACTER(LEN=*), INTRINSIC :: TRIM +! +! Local variables +! + INTEGER(KIND=4) :: i +! + If(mode .NE. 1)Return +! + totprob=totprob+1 + If(idprob .NE. ' ')Then + Write(iprob,'(//A)')TRIM(idprob) + idprob=' ' + EndIf + If(levprob .NE. ' ')Then + Write(iprob,'(/A)')TRIM(levprob) + levprob=' ' + EndIf + If(gamprob .NE. ' ')Then + Write(iprob,'(/A)')TRIM(gamprob) + gamprob=' ' + EndIf + If(egprob .NE. ' ')Then + Write(iprob,'(/A)')TRIM(egprob) + egprob=' ' + EndIf + Do i=1,nprobs + Write(iprob,'(A)')TRIM(linprob(i)) + EndDo + nprobs=0 + linprob=' ' +! + RETURN +! + ENDSUBROUTINE ERRRPT +! + END PROGRAM RULER From 6c168564a3bfe6d257f406305dd53a8366c4e24a Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 21 Jan 2016 18:16:13 -0800 Subject: [PATCH 102/216] Removed print statement --- pyne/ensdf_processing.py | 1 - tests/test_ensdf_processing.py | 5 ++++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index fe560e40ad..94fe01f893 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -206,7 +206,6 @@ def radlist(inputdict_unchecked): """ exe_path = path_to_exe('radlist') radlist_url = "http://www.nndc.bnl.gov/nndcscr/ensdf_pgm/analysis/radlst/unx/radlist" - print exe_path verify_download_exe(exe_path, radlist_url, dl_size = 8704) inputdict = {} diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 92aafdb402..fa39d522a1 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -157,4 +157,7 @@ def file_comp(file_out, file_ref, exceptions): if __name__ == "__main__": alphad = test_alphad() gabs = test_gabs() - + logft = test_logft() + radd = test_radd() + radlst = test_radlist() + ruler = test_ruler() From e13da914d9124bc4ea049ef92fff31ea807036d0 Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 21 Jan 2016 18:16:57 -0800 Subject: [PATCH 103/216] Added missing newline to end of file --- pyne/ensdf_processing.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 94fe01f893..2621157c66 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -256,4 +256,5 @@ def ruler(inputdict_unchecked): ruler_output.stdin.write(inp.encode('utf-8')) ruler_output.communicate()[0] ruler_output.stdin.close() - return inputdict_unchecked \ No newline at end of file + return inputdict_unchecked + \ No newline at end of file From df796fd14c4b09e9764863deedf0951d1f677198 Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 21 Jan 2016 18:20:47 -0800 Subject: [PATCH 104/216] Removed extra newlines --- pyne/ensdf_processing.py | 3 --- tests/test_ensdf_processing.py | 1 - 2 files changed, 4 deletions(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 2621157c66..fe7f2ecc8b 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -104,8 +104,6 @@ def gabs(inputdict_unchecked): proc.communicate()[0] proc.stdin.close() - - def logft(inputdict_unchecked): #NOTE: changed input file line length to 90 to support longer file paths in fortran source. """ @@ -257,4 +255,3 @@ def ruler(inputdict_unchecked): ruler_output.communicate()[0] ruler_output.stdin.close() return inputdict_unchecked - \ No newline at end of file diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index fa39d522a1..d6e355deaa 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -38,7 +38,6 @@ def test_gabs(): 'ensdf_processing/gabs/ref_gabs_80Br.new', exceptions_dataset) cleanup_tmp() - def test_logft(): create_tmp() input_dict = {} From 54f2d0ef303af0455b534f3b61a9c883de217114 Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 21 Jan 2016 22:54:38 -0800 Subject: [PATCH 105/216] Added byte decoding for python3 to radd output --- pyne/ensdf_processing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index fe7f2ecc8b..9dababba1c 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -173,7 +173,7 @@ def radd(inputdict_unchecked): radd_output = proc.communicate()[0] proc.stdin.close() f = open(output_file, 'w') - f.write(radd_output) + f.write(radd_output.decode("utf-8")) f.close() if AK04_set: From f7e6434720677a73c1f88ee952b34be44aebe34f Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 21 Jan 2016 23:08:16 -0800 Subject: [PATCH 106/216] Forced reference files to open with ascii encoding --- tests/test_ensdf_processing.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index d6e355deaa..3195adc303 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -1,4 +1,4 @@ -import filecmp, numpy, os, shutil +import filecmp, numpy, os, shutil, codecs from pyne import ensdf_processing import nose @@ -116,8 +116,8 @@ def file_comp(file_out, file_ref, exceptions): type 4: carriage return vs. non standard return type. options: line number of return. ''' - f_out = open(file_out, 'r') - f_ref = open(file_ref, 'r') + f_out = codecs.open(file_out, 'r', 'ascii') + f_ref = codecs.open(file_ref, 'r', 'ascii') diff_lines = numpy.array([]) line_num = 0 for line_out in f_out: @@ -140,9 +140,7 @@ def file_comp(file_out, file_ref, exceptions): # special exception for lines with possible carriage return instead of standard #line feed return if line_ref[:-2] == line_out[:-1]: - if map(bin,bytearray(line_ref[len(line_ref)-1])) \ - == map(bin,bytearray(line_out[len(line_out)-1])): - ignore = True + ignore = True if not ignore: raise Exception('ENSDF Processing: Incorrect output generated, file: ' + file_ref) line_num = line_num + 1 From 41d417e31c32a76b66fec0651cfaacaa9a38e0ae Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 21 Jan 2016 23:18:36 -0800 Subject: [PATCH 107/216] Force fortran reference files to be read in with ascii encoding --- tests/test_ensdf_processing.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 1807b9f090..76ddc1a7d8 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -1,4 +1,4 @@ -import filecmp, numpy, os, shutil +import filecmp, numpy, os, shutil, codecs from pyne import ensdf_processing import nose @@ -140,8 +140,8 @@ def file_comp(file_out, file_ref, exceptions): type 4: carriage return vs. non standard return type. options: line number of return. ''' - f_out = open(file_out, 'r') - f_ref = open(file_ref, 'r') + f_out = codecs.open(file_out, 'r', 'ascii') + f_ref = codecs.open(file_ref, 'r', 'ascii') diff_lines = numpy.array([]) line_num = 0 for line_out in f_out: From 4a5d4c9e0b62eb10d6299b362696ebdd961130d5 Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 21 Jan 2016 23:26:57 -0800 Subject: [PATCH 108/216] Reveresed codecs change --- tests/test_ensdf_processing.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index 76ddc1a7d8..1807b9f090 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -1,4 +1,4 @@ -import filecmp, numpy, os, shutil, codecs +import filecmp, numpy, os, shutil from pyne import ensdf_processing import nose @@ -140,8 +140,8 @@ def file_comp(file_out, file_ref, exceptions): type 4: carriage return vs. non standard return type. options: line number of return. ''' - f_out = codecs.open(file_out, 'r', 'ascii') - f_ref = codecs.open(file_ref, 'r', 'ascii') + f_out = open(file_out, 'r') + f_ref = open(file_ref, 'r') diff_lines = numpy.array([]) line_num = 0 for line_out in f_out: From 4cd3ca73bcf53b96ffaf3027487692aa17693492 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Fri, 22 Jan 2016 13:11:34 -0600 Subject: [PATCH 109/216] stray OA --- docs/usersguide/data.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usersguide/data.rst b/docs/usersguide/data.rst index 6f0c854250..8d3b82b03b 100644 --- a/docs/usersguide/data.rst +++ b/docs/usersguide/data.rst @@ -49,7 +49,7 @@ Running this example gives. Python example Use of Data Class *************************** -A Python example for loading data is shown below.OA +A Python example for loading data is shown below. .. code-block:: ipython From 11976790abee37518503f89f313e10ad340fb2bd Mon Sep 17 00:00:00 2001 From: josh Date: Tue, 26 Jan 2016 14:37:48 -0800 Subject: [PATCH 110/216] Removed radlist --- pyne/ensdf_processing.py | 49 - tests/ensdf_processing/radlst/ref_ensdf.rpt | 431 ------- tests/ensdf_processing/radlst/ref_mednew.dat | 207 ---- tests/ensdf_processing/radlst/ref_radlst.inp | 697 ----------- tests/ensdf_processing/radlst/ref_radlst.rpt | 1121 ------------------ tests/test_ensdf_processing.py | 24 - 6 files changed, 2529 deletions(-) delete mode 100644 tests/ensdf_processing/radlst/ref_ensdf.rpt delete mode 100644 tests/ensdf_processing/radlst/ref_mednew.dat delete mode 100644 tests/ensdf_processing/radlst/ref_radlst.inp delete mode 100644 tests/ensdf_processing/radlst/ref_radlst.rpt diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 9dababba1c..b39faaa118 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -182,55 +182,6 @@ def radd(inputdict_unchecked): os.remove('ELE.in') return inputdict_unchecked -def radlist(inputdict_unchecked): - """ - This program calculates atomic & nuclear radiations and checks energy balance. - (RADLIST readme) - - Input Dictionary Required Key Pair Value: - output_radiation_listing : String, 'Y' if output radiation listing is desired, else 'N'. - output_ensdf_like_file : String, 'Y' if output ensdf like file is desired, else 'N'. - output_file_for_nudat : String, 'Y' if output file for nudat is desired, else 'N'. - output_mird_listing : String, 'Y' if output mird listing is desired, else 'N'. - calculate_continua : String, 'Y' if calculate continua is desired, else 'N'. - input_file : input ensdf file. - output_radlst_file : path to desired output radlst file. - input_radlst_data_table : path to input radlst data table (mednew.dat location). - input_masses_data_table : (optional) path to input masses data table. - output_ensdf_file : path to desired output ensdf file. - - Output Dictionary Values: - Everything in input dictionary is returned if RADLIST completes successfully. - """ - exe_path = path_to_exe('radlist') - radlist_url = "http://www.nndc.bnl.gov/nndcscr/ensdf_pgm/analysis/radlst/unx/radlist" - verify_download_exe(exe_path, radlist_url, dl_size = 8704) - - inputdict = {} - output_rad_listing = inputdict_unchecked['output_radiation_listing'] - output_endf_like_file = inputdict_unchecked['output_ensdf_like_file'] - output_file_for_nudat = inputdict_unchecked['output_file_for_nudat'] - output_mird_listing = inputdict_unchecked['output_mird_listing'] - calculate_continua = inputdict_unchecked['calculate_continua'] - input_file = inputdict_unchecked['input_file'] - output_radlst_file = inputdict_unchecked['output_radlst_file'] - input_radlst_data_table = inputdict_unchecked['input_radlst_data_table'] - if 'input_masses_data_table' in inputdict_unchecked: - input_masses_data_table = inputdict_unchecked['input_masses_data_table'] - else: - input_masses_data_table = '' - output_ensdf_file = inputdict_unchecked['output_ensdf_file'] - - inp = output_rad_listing + '\n' + output_endf_like_file + '\n' + output_file_for_nudat +\ - '\n' + output_mird_listing + '\n' + calculate_continua + '\n' + input_file +\ - '\n' + output_radlst_file + '\n' + input_radlst_data_table + '\n' + input_masses_data_table +\ - '\n' + output_ensdf_file - proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) - proc.stdin.write(inp.encode('utf-8')) - radd_output = proc.communicate()[0] - proc.stdin.close() - return inputdict_unchecked - def ruler(inputdict_unchecked): """ This program calculates reduced transition probabilities. (RULER readme) diff --git a/tests/ensdf_processing/radlst/ref_ensdf.rpt b/tests/ensdf_processing/radlst/ref_ensdf.rpt deleted file mode 100644 index f4abbfca02..0000000000 --- a/tests/ensdf_processing/radlst/ref_ensdf.rpt +++ /dev/null @@ -1,431 +0,0 @@ -0 - - - - - 205HG B- DECAY (5.2 M 1) I(MIN)=0.0010% -0Radiation Energy Intensity (G-Rad - Type (keV) (%) uCi-h) - ---------- --------------- ------------ -------- - - B- 1 MAX 104. 8 - AVG 27.1 22 0.0049 25 0 - B- 2 MAX 198. 8 - AVG 53.4 24 0.006 3 0 - B- 3 MAX 319. 8 - AVG 90.0 25 0.007 4 0 - B- 4 MAX 397. 8 - AVG 115. 3 0.0030 16 0 - B- 5 MAX 919. 8 - AVG 299. 3 0.016 7 0.0001 - B- 6 MAX 1334. 8 - AVG 460. 4 3.1 13 0.0304 - B- 7 MAX 1538. 8 - AVG 542. 4 96.0 20 1.11 - TOTAL B- - AVG 539. 4 99.1 24 1.14 - - G 1 203.74 3 2.2 10 0.0095 - G 2 415.6 3 0.013 7 0.0001 - G 3 618.6 7 0.0020 10 0 - G 4 720.8 8 0.0011 6 0 - G 5 937.2 6 0.0020 11 0 - G 7 1136.8 6 0.0046 24 0.0001 - G 9 1218.7 4 0.006 3 0.0002 - G 12 1433.9 5 0.0044 23 0.0001 -0 - - - - - 205HG B- DECAY (5.2 M 1) I(MIN)=0.0010% -0Radiation Energy Intensity (G-Rad - Type (keV) (%) uCi-h) - ---------- --------------- ------------ -------- - - B- 1 MAX 104. 8 - AVG 27.1 22 0.0049 25 0 - B- 2 MAX 198. 8 - AVG 53.4 24 0.006 3 0 - B- 3 MAX 319. 8 - AVG 90.0 25 0.007 4 0 - B- 4 MAX 397. 8 - AVG 115. 3 0.0030 16 0 - B- 5 MAX 919. 8 - AVG 299. 3 0.016 7 0.0001 - B- 6 MAX 1334. 8 - AVG 460. 4 3.1 13 0.0304 - B- 7 MAX 1538. 8 - AVG 542. 4 96.0 20 1.11 - TOTAL B- - AVG 539. 4 99.1 24 1.14 - - G 1 203.74 3 2.2 10 0.0095 - G 2 415.6 3 0.013 7 0.0001 - G 3 618.6 7 0.0020 10 0 - G 4 720.8 8 0.0011 6 0 - G 5 937.2 6 0.0020 11 0 - G 7 1136.8 6 0.0046 24 0.0001 - G 9 1218.7 4 0.006 3 0.0002 - G 12 1433.9 5 0.0044 23 0.0001 -0 - - - - - 252CF A DECAY (2.638 Y 10) I(MIN)=0.0010% -0Radiation Energy Intensity (G-Rad - Type (keV) (%) uCi-h) - ---------- --------------- ------------ -------- - - AUGER-L 10.70 5.1 4 0.0012 - CE- L - 1 18.87 3 11.0 8 0.0044 - CE- M - 1 37.06 3 3.07 21 0.0024 - CE- L - 2 75.67 0.172 6 0.0003 - CE- M - 2 93.86 0.049 4 0 - CE-NOP- 2 98.51 0.0191 7 0 - CE- L - 3 135. 15 0.00316 11 0 - - A 1 5825.9 5 0.001938 0.0002 - A 2 5976.5 5 0.23 4 0.0296 - A 3 6075.7 5 15.2 3 1.97 - A 4 6118.3 5 81.6 3 10.63 - - X-RAY L 15.00 6.0 5 0.0019 - G 1 43.40 3 0.0148 9 0 - G 2 100.2 0.01260 0 - G 3 160. 15 0.001938 0 -0 - - - - - 172LU EC DECAY (6.70 D 3) I(MIN)=0.0010% -0Radiation Energy Intensity (G-Rad - Type (keV) (%) uCi-h) - ---------- --------------- ------------ -------- - - AUGER-L 5.840 135. 4 0.0168 - CE- K - 1 17.34 16.6 9 0.0061 - CE- K - 2 29.24 10.0 7 0.0062 - AUGER-K 42.20 5.86 15 0.0053 - CE- L - 1 68.18 55. 4 0.0795 - CE- M - 1 76.27 13.5 8 0.0219 - CE-NOP- 1 78.18 3.7 3 0.0062 - CE- L - 2 80.08 11.3 7 0.0192 - CE- M - 2 88.17 2.76 18 0.0052 - CE-NOP- 2 90.08 0.77 5 0.0015 - CE- K - 11 120.1 4.4 3 0.0112 - CE- L - 11 171.0 2.39 15 0.0087 - CE- M - 11 179.1 0.58 6 0.0022 - CE-NOP- 11 181.0 0.157 11 0.0006 - CE- K - 20 218.4 0.071 7 0.0003 - CE- L - 20 269.2 0.0234 21 0.0001 - CE- M - 20 277.3 0.0056 6 0 - CE-NOP- 20 279.2 0.0016 3 0 - - B+ 1 MAX 1218. - AVG 557.17 22 0.070 0.0008 - - X-RAY L 7.420 42.2 11 0.0067 - X-RAY KA2 51.3540 5 30.2 8 0.0331 - X-RAY KA1 52.3889 5 53.3 13 0.0595 - X-RAY KB 59.40 22.1 6 0.0279 - G 1 78.67 10.6 5 0.0177 - G 2 90.57 5.2 3 0.0101 - G 3 112.7 4.5 3 0.0108 - G 5 134.5 0.080 10 0.0002 - G 6 134.5 0.080 10 0.0002 - G 7 134.5 0.080 10 0.0002 - G 8 142.5 0.0056 0 - G 9 145.7 0.16 4 0.0005 - G 10 151.1 0.09 3 0.0003 - G 11 181.5 19.9 11 0.0769 - G 12 196.4 0.120 10 0.0005 - G 13 197.0 0.0050 0 - G 14 203.4 6.04 25 0.0262 - G 15 210.2 0.090 20 0.0004 - G 16 247.1 0.50 7 0.0026 - G 17 254.8 0.090 10 0.0005 - G 18 264.8 0.65 9 0.0037 - G 19 270.0 2.20 14 0.0127 - G 20 279.7 1.10 10 0.0065 - G 21 293.6 0.0016 0 - G 22 319.1 0.170 20 0.0012 - G 23 323.9 1.57 6 0.0108 - G 24 330.4 0.62 7 0.0044 - G 25 347.8 0.0024 0 - G 26 358.5 0.120 10 0.0009 - G 27 366.7 0.32 4 0.0025 - G 28 372.5 2.77 18 0.0220 - G 29 377.5 3.18 10 0.0256 - G 30 383.1 0.050 20 0.0004 - G 31 399.8 0.54 3 0.0046 - G 32 399.8 0.54 3 0.0046 - G 33 410.3 2.08 7 0.0182 - G 34 416.6 0.080 10 0.0007 - G 35 423.0 0.170 20 0.0015 - G 36 423.0 0.0022 0 - G 37 427.6 0.150 20 0.0014 - G 39 432.5 1.54 9 0.0142 - G 40 436.1 0.0063 0 - G 41 437.5 0.240 20 0.0022 - G 42 443.4 0.160 20 0.0015 - G 43 482.1 0.72 5 0.0074 - G 44 486.2 0.74 8 0.0077 - G 45 490.4 2.00 13 0.0209 - G 46 512.8 0.160 20 0.0017 - G 47 524.3 0.24 5 0.0027 - G 48 528.2 4.01 12 0.0451 - G 49 536.3 0.70 4 0.0080 - G 50 540.1 1.34 9 0.0154 - G 51 551.2 0.43 3 0.0050 - G 52 565.5 0.0011 0 - G 53 566.3 0.17 9 0.0021 - G 54 576.8 0.36 3 0.0044 - G 55 584.6 0.37 5 0.0046 - G 56 594.6 0.58 7 0.0073 - G 57 607.2 0.65 5 0.0084 - G 58 625.6 0.29 4 0.0039 - G 59 630.8 0.30 6 0.0040 - G 60 644.4 0.24 6 0.0033 - G 61 681.8 0.76 6 0.0110 - G 62 697.3 5.9 3 0.0876 - G 63 709.1 0.72 4 0.0109 - G 64 723.0 0.49 4 0.0075 - G 65 810.0 16.0 4 0.276 - G 66 816.3 1.10 7 0.0191 - G 68 900.7 28.8 7 0.553 - G 69 912.0 14.7 4 0.286 - G 70 929.1 3.15 11 0.0623 - G 72 967.5 0.19 4 0.0039 - G 73 970.6 0.10 3 0.0021 - G 74 1003. 5.26 12 0.112 - G 75 1019. 0.17 10 0.0037 - G 76 1022. 1.48 6 0.0322 - G 78 1041. 0.38 5 0.0084 - G 79 1081. 1.14 3 0.0262 - G 80 1094. 63.6 13 1.48 - G 81 1113. 1.88 9 0.0446 - G 82 1116. 0.20 4 0.0048 - G 84 1166. 0.14 3 0.0035 - G 85 1184. 0.49 3 0.0124 - G 86 1206. 0.022 0.0006 - G 87 1289. 0.150 20 0.0041 - G 88 1322. 0.15 3 0.0042 - G 89 1348. 0.0045 0.0001 - G 90 1387. 0.800 10 0.0236 - G 92 1397. 0.34 5 0.0101 - G 93 1403. 0.61 5 0.0182 - G 94 1441. 0.06 5 0.0018 - G 95 1466. 0.66 4 0.0206 - G 96 1470. 0.60 3 0.0188 - G 97 1489. 1.10 4 0.0349 - G 98 1530. 0.14 3 0.0046 - G 99 1543. 0.96 5 0.0315 - G 100 1580. 0.200 20 0.0067 - G 101 1584. 2.53 13 0.0854 - G 102 1603. 0.29 3 0.0099 - G 103 1609. 0.100 10 0.0034 - G 104 1622. 2.13 8 0.0736 - G 105 1666. 0.17 7 0.0060 - G 106 1670. 0.55 7 0.0196 - G 107 1724. 0.430 20 0.0158 - G 108 1813. 0.180 10 0.0070 - G 109 1915. 0.58 3 0.0237 - G 110 1931. 0.040 10 0.0016 - G 111 1994. 0.160 20 0.0068 - G 112 2025. 0.050 20 0.0022 - G 113 2083. 0.30 6 0.0133 - G 114 2096. 0.11 3 0.0049 - MAXIMUM G+/- INTENSITY = 0.14% -0 - - - - - 242AM IT DECAY (141 Y 2) I(MIN)=0.0010% -0Radiation Energy Intensity (G-Rad - Type (keV) (%) uCi-h) - ---------- --------------- ------------ -------- - - G 1 48.63 5 99.50 20 0.103 -0 - - - - - 126I EC DECAY (13.02 D 7) I(MIN)=0.0010% -0Radiation Energy Intensity (G-Rad - Type (keV) (%) uCi-h) - ---------- --------------- ------------ -------- - - AUGER-L 3.190 46. 5 0.0031 - AUGER-K 22.70 5.9 7 0.0029 - CE- K - 1 634.517 12 0.108 12 0.0015 - - B+ 1 MAX 468. 5 - AVG 216.8 22 0.203 23 0.0009 - B+ 2 MAX 1134. 5 - AVG 530.2 22 0.96 17 0.0108 - TOTAL B+ - AVG 475.4 25 1.16 17 0.0117 - - X-RAY L 3.770 4.3 5 0.0003 - X-RAY KA2 27.20170 20 11.9 13 0.0069 - X-RAY KA1 27.47230 20 22.1 24 0.0130 - X-RAY KB 31.00 7.7 9 0.0051 - G 1 666.331 12 33.1 25 0.470 - G 3 753.819 13 4.2 4 0.0669 - G 5 1379. 0.00238 24 0 - G 6 1420.19 3 0.295 23 0.0089 - G 7 2045.09 5 0.0046 5 0.0002 - MAXIMUM G+/- INTENSITY = 2.32% -0 - - - - - 126I B- DECAY (13.02 D 7) I(MIN)=0.0010% -0Radiation Energy Intensity (G-Rad - Type (keV) (%) uCi-h) - ---------- --------------- ------------ -------- - - AUGER-L 3.430 0.53 7 0 - AUGER-K 24.60 0.062 9 0 - CE- K - 1 354.072 11 0.53 8 0.0040 - CE- L - 1 383.180 11 0.083 10 0.0007 - CE- M - 1 387.491 11 0.017 7 0.0001 - CE-NOP- 1 388.425 11 0.004 7 0 - CE- K - 2 456.682 11 0.0227 20 0.0002 - CE- L - 2 485.790 11 0.0033 6 0 - - B- 1 MAX 371. 5 - AVG 108.9 17 3.6 3 0.0084 - B- 2 MAX 862. 5 - AVG 289.7 20 32.1 3 0.198 - B- 3 MAX 1251. 5 - AVG 458.6 21 8.0 3 0.0781 - TOTAL B- - AVG 305.6 22 43.7 6 0.284 - - X-RAY L 4.110 0.057 8 0 - X-RAY KA2 29.4580 10 0.140 21 0 - X-RAY KA1 29.7790 10 0.26 4 0.0002 - X-RAY KB 33.60 0.093 14 0 - G 1 388.633 11 34. 3 0.282 - G 2 491.243 11 2.85 22 0.0298 - G 3 879.876 13 0.75 6 0.0141 -0 - - - - - 57CR B- DECAY (21.1 S 10) I(MIN)=0.0010% -0Radiation Energy Intensity (G-Rad - Type (keV) (%) uCi-h) - ---------- --------------- ------------ -------- - - AUGER-L 0.6100 0.6 3 0 - AUGER-K 5.190 0.25 13 0 - CE- K - 1 76.86 20 0.37 19 0.0006 - CE- L - 1 82.63 20 0.036 19 0 - - B- 1 MAX 2097.6 3 - AVG 860.0 2.5 3 0.0458 - B- 2 MAX 2306.5 5 - AVG 960.0 1.7 8 0.0348 - B- 3 MAX 2459.2 4 - AVG 1030. 0.24 21 0.0053 - B- 4 MAX 2566.9 6 - AVG 1080. 0.43 22 0.0099 - B- 5 MAX 2613.9 4 - AVG 1110. 2.6 14 0.0615 - B- 6 MAX 2652.8 9 - AVG 1120. 0.22 13 0.0052 - B- 7 MAX 2964.2 4 - AVG 1270. 7. 4 0.189 - B- 8 MAX 3074.1 6 - AVG 1330. 0.21 13 0.0059 - B- 9 MAX 3264.84 25 - AVG 1420. 6. 3 0.181 - B- 10 MAX 3306.91 21 - AVG 1440. 0.8 5 0.0245 - B- 11 MAX 3424.7 4 - AVG 1490. 0.4 3 0.0127 - B- 12 MAX 3743.77 23 - AVG 1650. 2.1 11 0.0738 - B- 13 MAX 3949.46 23 - AVG 1750. 2.6 22 0.0969 - B- 14 MAX 4716.16 17 - AVG 2120. 0.3 4 0.0158 - B- 15 MAX 4800. - AVG 2160. 74. 12 3.40 - TOTAL B- - AVG 1934. 101. 14 4.17 - - X-RAY L 0.6400 0.0027 14 0 - X-RAY KA2 5.88765 3 0.035 18 0 - X-RAY KA1 5.89875 3 0.07 4 0 - X-RAY KB 6.490 0.014 8 0 - G 1 83.40 20 8. 5 0.0145 - G 2 205.8 3 2.9 14 0.0126 - G 3 342.9 5 0.5 3 0.0035 - G 4 479.1 5 0.18 12 0.0019 - G 5 684.1 5 0.5 4 0.0078 - G 6 766.5 5 0.34 18 0.0056 - G 7 850.2 6 8. 5 0.145 - G 8 1055.8 3 0.8 4 0.0187 - G 9 1129.9 3 1.4 7 0.0333 - G 10 1209.2 3 0.6 3 0.0148 - G 11 1292.2 5 0.7 4 0.0205 - G 12 1327.3 3 0.32 23 0.0089 - G 13 1335.7 5 1.2 8 0.0334 - G 14 1409.3 3 0.9 5 0.0276 - G 15 1492.7 3 0.9 5 0.0300 - G 16 1535.0 3 4.8 23 0.158 - G 17 1642.2 5 0.21 13 0.0075 - G 18 1752.1 5 5.1 24 0.190 - G 19 1835.2 6 1.4 7 0.0534 - G 20 1852.0 4 1.2 6 0.0463 - G 21 2063.5 8 0.22 13 0.0096 - G 22 2257.2 9 0.24 21 0.0115 - G 23 2410.0 7 0.9 5 0.0442 - G 24 2493.1 7 0.8 4 0.0422 - G 25 2618.3 8 0.44 25 0.0245 -0 - - - - - 57CO EC DECAY (271.80 D 5) I(MIN)=0.0010% -0Radiation Energy Intensity (G-Rad - Type (keV) (%) uCi-h) - ---------- --------------- ------------ -------- - - AUGER-L 0.6700 251.7 20 0.0036 - AUGER-K 5.620 105.1 9 0.0126 - CE- K - 2 114.9494 10 1.84 15 0.0045 - CE- L - 2 121.2153 5 0.193 20 0.0005 - CE-MNO- 2 121.9685 10 0.032 5 0 - CE- K - 3 129.3623 11 1.26 15 0.0035 - - X-RAY L 0.7000 1.52 16 0 - X-RAY KA2 6.39084 3 17.23 15 0.0023 - X-RAY KA1 6.40384 3 33.7 3 0.0046 - X-RAY KB 7.060 6.97 6 0.0010 - G 1 14.41300 15 9.68 25 0.0030 - G 2 122.0614 3 85.9 12 0.223 - G 3 136.4743 5 10.33 10 0.0300 - G 5 339.69 21 0.0025 4 0 - G 6 352.33 21 0.001932 0 - G 8 570.09 20 0.0137 9 0.0002 - G 9 692.41 7 0.162 5 0.0024 - G 10 706.54 22 0.0048 6 0 -1 Work on the program RADLST sponsored by the Division - of Basic Energy Sciences, US Department of Energy, under con- - tract No. DE-AC02-76CH00016 with Associated Universities, Inc. -0 Neither the Associated Universities, Inc., nor the - US Department of Energy make any warranty or assume any legal - responsibility for the results produced by the program. - diff --git a/tests/ensdf_processing/radlst/ref_mednew.dat b/tests/ensdf_processing/radlst/ref_mednew.dat deleted file mode 100644 index b9e653e2f6..0000000000 --- a/tests/ensdf_processing/radlst/ref_mednew.dat +++ /dev/null @@ -1,207 +0,0 @@ - 1 M - 1 2 M - 2 M - 2 2 M - 3 M - 3 2 M - 4 M - 4 2 M - 5 M 0.0010 3 0.0 0.1880 4 - 5 2 M 0.17 0.1 - 6 M 0.0020 4 0.0 0.2838 4 - 6 2 M 0.26 0.2 - 7 M 0.0035 9 0.0 0.4016 4 - 7 2 M 0.38 0.3 - 8 M 0.005812 0.0 0.5320 4 0.0237 4 - 8 2 M 0.52 0.5249 7 0.5 - 9 M 0.009018 0.0 0.6854 4 0.031 1 - 9 2 M 0.66 0.6768 8 0.6 - 10 M 0.0152 8 0.0 1.985 6 0.8669 3 0.045 1 - 10 2 M 0.5028 25 0.82 0.8486 2 0.8486 2 0.86 - 11 M 0.0213 9 0.0 1.962 6 1.0721 4 0.0633 4 - 11 2 M 0.0084 25 0.5029 25 0.99 1.0410 3 1.0410 3 1.07 - 12 M 0.0291 9 0.0 1.938 6 1.3050 4 0.0894 4 - 12 2 M 0.017 4 0.5031 25 1.18 1.2536 4 1.2536 4 1.30 - 13 M 0.0387 120.0010 5 1.921 6 1.5596 4 0.1177 4 - 13 2 M 0.021 3 0.5033 25 1.39 1.48670 2 1.48627 2 1.56 - 14 M 0.0504 130.0011 6 1.895 7 1.8389 4 0.1487 4 - 14 2 M 0.029 3 0.5037 25 1.61 1.73998 3 1.73938 3 1.84 - 15 M 0.0642 160.0012 6 1.857 7 2.1455 4 0.1893 4 - 15 2 M 0.043 4 0.5048 25 1.85 2.0137 3 2.0127 3 2.14 - 16 M 0.0804 190.0013 6 1.807 7 2.4720 4 0.2292 4 - 16 2 M 0.062 4 0.5053 25 2.11 2.30784 4 2.30664 4 2.47 - 17 M 0.0989 240.0014 5 1.751 6 2.8224 3 0.2702 4 0.0175 4 - 17 2 M 0.086 4 0.5056 25 2.38 2.62239 6 2.62078 6 2.82 - 18 M 0.1199 280.0015 5 1.697 6 3.2029 3 0.320 1 0.0253 4 - 18 2 M 0.1079 30 0.5049 25 2.66 2.95770 3 2.95563 3 3.19 - 19 M 0.143 4 0.0016 5 1.654 6 3.6074 4 0.3771 4 0.0339 4 - 19 2 M 0.1225 24 0.5055 25 2.97 3.3138 2 3.3111 3 3.59 - 20 M 0.169 4 0.0018 6 1.621 6 4.0381 4 0.4378 4 0.0437 4 - 20 2 M 0.1296 23 0.5061 25 3.30 0.31 3.69168 4 3.68809 4 4.01 0.34 - 21 M 0.196 5 0.0020 7 1.594 5 4.4928 4 0.5004 4 0.0538 4 - 21 2 M 0.1319 21 0.5069 25 3.64 0.37 4.0906 2 4.0861 2 4.46 0.40 - 22 M 0.226 5 0.0021 7 1.567 5 4.9664 4 0.5637 4 0.0603 4 - 22 2 M 0.1325 18 0.5076 25 4.00 0.42 4.51084 4 4.50486 4 4.93 0.45 - 23 M 0.256 5 0.0023 8 1.538 5 5.4651 3 0.6282 4 0.0665 4 - 23 2 M 0.1334 16 0.5083 25 4.38 0.47 4.95220 4 4.94464 4 5.43 0.51 - 24 M 0.289 5 0.0026 9 1.508 5 5.9892 3 0.6946 4 0.0741 4 - 24 2 M 0.1346 14 0.5091 25 4.78 0.54 5.41472 5 5.40551 5 5.95 0.57 - 25 M 0.321 5 0.0047 7 1.478 4 6.5390 4 0.7690 4 0.0839 5 - 25 2 M 0.1359 14 0.5099 25 5.19 0.61 5.89875 3 5.88765 3 6.49 0.64 - 26 M 0.355 4 0.0060 6 1.447 4 7.1120 9 0.8461 4 0.0929 9 - 26 2 M 0.1368 14 0.5107 25 5.62 0.67 6.40384 3 6.39084 3 7.06 0.70 - 27 M 0.388 4 0.0072 5 1.418 4 7.7089 3 0.9256 4 0.1007 4 - 27 2 M 0.1372 14 0.5116 25 6.07 0.75 6.93032 4 6.91530 4 7.65 0.78 - 28 M 0.421 4 0.0084 4 1.388 4 8.3328 4 1.0081 4 0.1118 6 - 28 2 M 0.1378 14 0.5124 25 6.54 0.84 7.47815 4 7.46089 4 8.26 0.85 - 29 M 0.454 4 0.0097 4 1.357 4 8.9789 4 1.0966 4 0.1198 6 - 29 2 M 0.1391 14 0.5133 25 7.03 0.92 8.04778 1 8.02783 1 8.91 0.93 - 30 M 0.486 4 0.0108 4 1.326 4 9.6586 6 1.1936 9 0.1359 11 - 30 2 M 0.1417 12 0.5142 25 7.53 0.99 8.63886 5 8.61578 5 9.57 1.01 - 31 M 0.517 4 0.0123 4 1.295 4 10.3671 5 1.2977 11 0.1581 5 - 31 2 M 0.1457 12 0.5146 25 8.04 1.10 9.25174 7 9.22482 7 10.3 1.10 - 32 M 0.546 4 0.0140 4 1.263 4 11.103 7 1.4143 7 0.1800 8 - 32 2 M 0.1509 12 0.5149 25 8.56 1.19 9.88642 7 9.85532 7 11.0 1.19 - 33 M 0.575 4 0.0155 5 1.232 4 11.8667 7 1.5265 8 0.2035 7 - 33 2 M 0.1566 13 0.5153 25 9.11 1.24 10.5437 1 10.5080 1 11.7 1.28 - 34 M 0.602 4 0.0175 5 1.203 4 12.6578 7 1.6539 35 0.2315 7 - 34 2 M 0.1626 13 0.5158 25 9.67 1.32 11.2224 2 11.1814 2 12.5 1.38 - 35 M 0.628 4 0.0194 5 1.175 4 13.4737 4 1.7820 4 0.2565 4 0.0273 5 - 35 2 M 0.1683 14 0.5181 25 10.2 1.41 11.9242 2 11.8776 2 13.3 1.48 - 36 M 0.652 4 0.0215 6 1.149 4 14.3256 8 1.9210 6 0.288 1 0.0240 8 - 36 2 M 0.1737 14 0.5186 25 10.8 1.50 12.649 2 12.598 2 14.1 1.59 - 37 M 0.674 4 0.0237 6 1.125 4 15.1997 3 2.0651 3 0.3221 3 0.0293 3 - 37 2 M 0.1788 15 0.5195 25 11.4 1.68 13.3953 2 13.3358 2 15.0 1.69 - 38 M 0.696 4 0.0262 7 1.102 4 16.1046 3 2.2163 3 0.3575 3 0.0377 3 - 38 2 M 0.1835 15 0.5205 25 12.1 1.79 14.1650 2 14.0979 2 15.8 1.81 - 39 M 0.716 4 0.0289 7 1.081 4 17.0384 3 2.3725 3 0.3936 3 0.0454 3 - 39 2 M 0.1878 16 0.5215 25 12.7 1.91 14.9584 2 14.8829 2 16.7 1.92 - 40 M 0.734 4 0.0317 8 1.062 4 17.9976 4 2.5316 3 0.4303 3 0.0513 3 - 40 2 M 0.1918 16 0.5225 25 13.4 2.02 15.7751 2 15.6909 2 17.7 2.04 - 41 M 0.751 4 0.0347 9 1.045 4 18.9856 4 2.6977 3 0.4684 3 0.0581 3 - 41 2 M 0.1953 16 0.5236 25 14.0 2.15 16.6151 2 16.5210 2 18.6 2.17 - 42 M 0.767 4 0.0381 9 1.029 4 19.9995 3 2.8655 3 0.5046 3 0.0618 3 - 42 2 M 0.1986 16 0.5247 25 14.8 2.27 17.4793 1 17.3743 14 19.6 2.29 - 43 M 0.782 4 0.0415 101.014 4 21.0440 7 3.0425 4 0.544 1 0.068 2 - 43 2 M 0.2017 17 0.5259 25 15.5 2.17 18.3671 8 18.2508 8 20.6 2.42 - 44 M 0.796 4 0.0453 111.000 4 22.1172 3 3.2240 3 0.5850 3 0.0749 3 - 44 2 M 0.2045 17 0.5270 25 16.2 2.53 19.2792 2 19.1504 2 21.7 2.56 - 45 M 0.809 4 0.0494 120.987 4 23.2199 3 3.4119 3 0.6271 3 0.0810 3 - 45 2 M 0.2072 17 0.5282 25 17.0 2.39 20.2161 2 20.0737 2 22.7 2.70 - 46 M 0.820 4 0.0536 130.975 4 24.3503 3 3.6043 3 0.6699 3 0.0864 3 - 46 2 M 0.2099 17 0.5293 25 17.7 2.50 21.1771 2 21.0201 2 23.8 2.84 - 47 M 0.831 4 0.0583 140.964 4 25.5140 3 3.8058 3 0.7175 3 0.0952 3 - 47 2 M 0.2125 17 0.5305 25 18.5 2.61 22.1629 1 21.9903 3 24.9 2.98 - 48 M 0.842 4 0.0632 160.953 4 26.7112 3 4.0180 3 0.7702 3 0.1076 3 - 48 2 M 0.2151 18 0.5317 25 19.3 2.72 23.1736 2 22.9841 2 26.1 3.13 - 49 M 0.851 4 0.0684 200.944 4 27.9399 3 4.2375 3 0.8256 3 0.1219 3 - 49 2 M 0.2178 18 0.5330 25 20.1 2.84 24.2097 2 24.0020 2 27.3 3.29 - 50 M 0.860 4 0.0740 250.934 4 29.2001 4 4.4647 3 0.8838 3 0.1365 4 - 50 2 M 0.2206 18 0.5343 25 21.0 2.95 25.2713 2 25.0440 2 28.5 3.44 - 51 M 0.868 4 0.0796 300.925 4 30.4912 3 4.6983 3 0.9437 3 0.1520 3 - 51 2 M 0.2236 23 0.5356 25 21.8 3.07 26.3591 2 26.1108 2 29.7 3.60 - 52 M 0.875 4 0.0862 350.917 4 31.8138 3 4.9392 3 1.0060 3 0.1683 3 - 52 2 M 0.2266 23 0.5370 25 22.7 3.19 27.4723 2 27.2017 2 31.0 3.77 - 53 M 0.882 4 0.092 4 0.909 4 33.1694 4 5.1881 3 1.0721 3 0.1864 3 - 53 2 M 0.2296 23 0.5384 25 23.6 3.31 28.6120 3 28.3172 4 32.3 3.94 - 54 M 0.888 5 0.097 5 0.902 4 34.5614 11 5.4528 4 1.142 1 0.208 1 - 54 2 M 0.2327 24 0.5398 25 24.6 3.43 29.779 1 29.458 1 33.6 4.11 - 55 M 0.894 4 0.104 5 0.895 4 35.9846 4 5.7143 4 1.2171 4 0.2308 4 - 55 2 M 0.2358 24 0.5413 25 25.5 3.55 30.9728 3 30.6251 3 35.0 4.29 - 56 M 0.900 4 0.110 5 0.888 4 37.4406 4 5.9888 4 1.2928 4 0.2530 5 - 56 2 M 0.2387 24 0.5428 25 26.4 3.67 32.1936 3 31.8171 3 36.4 4.47 - 57 M 0.905 4 0.117 5 0.882 4 38.9246 4 6.2663 5 1.3613 3 0.2704 8 - 57 2 M 0.2416 25 0.5444 25 27.4 3.80 33.4418 2 33.0341 2 37.8 4.65 - 58 M 0.910 4 0.125 5 0.876 4 40.4430 4 6.5488 5 1.4346 6 0.2896 7 - 58 2 M 0.2443 25 0.5460 25 28.4 3.94 34.7197 2 34.2789 2 39.3 4.84 - 59 M 0.914 4 0.132 5 0.871 4 41.9906 5 6.8348 5 1.5110 8 0.3045 9 - 59 2 M 0.2469 25 0.5476 25 29.4 4.08 36.0263 2 35.5502 2 40.7 5.03 - 60 M 0.918 4 0.140 6 0.866 4 43.5689 4 7.1260 4 1.5753 7 0.3152 8 - 60 2 M 0.2492 25 0.5491 25 30.5 4.23 37.3610 3 36.8474 3 42.3 5.23 - 61 M 0.922 4 0.148 6 0.861 4 45.1840 7 7.4279 8 1.649 5 0.330 5 - 61 2 M 0.2513 26 0.5508 25 31.5 4.38 38.7247 5 38.1712 5 43.8 5.43 - 62 M 0.926 4 0.158 6 0.857 4 46.8342 5 7.7368 5 1.7228 8 0.3457 9 - 62 2 M 0.2533 26 0.5525 25 32.6 4.53 40.1181 3 39.5224 3 45.4 5.64 - 63 M 0.929 4 0.168 7 0.853 4 48.5190 4 8.0520 4 1.8000 5 0.3602 7 - 63 2 M 0.2550 26 0.5542 25 33.7 4.69 41.5422 3 40.9019 3 47.0 5.85 - 64 M 0.932 4 0.176 6 0.850 4 50.2391 5 8.3756 5 1.8808 5 0.3758 7 - 64 2 M 0.2566 26 0.5559 25 34.9 4.84 42.9962 3 42.3089 3 48.7 6.06 - 65 M 0.935 4 0.186 8 0.847 4 51.9957 5 8.7080 5 1.9675 6 0.3979 8 - 65 2 M 0.2581 26 0.5577 25 36.0 5.00 44.4816 3 43.7441 3 50.4 6.27 - 66 M 0.938 4 0.196 8 0.844 4 53.7885 5 9.0458 5 2.0468 4 0.4163 5 - 66 2 M 0.2594 26 0.5596 25 37.2 5.16 45.9984 4 45.2078 4 52.1 6.50 - 67 M 0.940 4 0.206 8 0.841 4 55.6177 5 9.3942 4 2.1283 6 0.4357 8 - 67 2 M 0.2607 27 0.5615 25 38.4 5.33 47.5467 4 46.6997 4 53.9 6.72 - 68 M 0.942 4 0.216 9 0.838 4 57.4855 5 9.7513 4 2.2065 6 0.4491 10 - 68 2 M 0.2619 27 0.5634 25 39.7 5.50 49.1277 4 48.2211 4 55.7 6.95 - 69 M 0.945 4 0.227 9 0.836 4 59.3896 5 10.1157 4 2.3068 7 0.4717 9 - 69 2 M 0.2630 27 0.5664 25 40.9 5.67 50.7416 4 49.7726 4 57.5 7.18 - 70 M 0.947 4 0.238 10 0.833 4 61.3323 5 10.4864 4 2.3981 4 0.4872 6 - 70 2 M 0.2641 27 0.5673 25 42.2 5.84 52.3889 5 51.3540 5 59.4 7.42 - 71 M 0.949 4 0.248 10 0.831 4 63.3138 5 10.8704 4 2.4912 5 0.5062 6 - 71 2 M 0.265 4 0.5694 25 43.5 6.02 54.0698 5 52.9650 5 61.3 7.66 - 72 M 0.951 4 0.260 10 0.829 4 65.3508 6 11.2707 4 2.6009 4 0.5381 4 - 72 2 M 0.266 4 0.5714 25 44.8 6.18 55.7902 8 54.6114 8 63.2 7.90 - 73 M 0.952 4 0.272 11 0.827 4 67.4164 6 11.6815 3 2.7080 4 0.5655 5 - 73 2 M 0.267 4 0.5736 25 46.2 6.35 57.532 1 56.277 1 65.2 8.15 - 74 M 0.954 4 0.283 11 0.825 4 69.5250 3 12.0998 3 2.8196 4 0.5950 4 - 74 2 M 0.268 4 0.5757 25 45.7 6.53 59.3182 1 57.9817 5 67.2 8.40 - 75 M 0.955 4 0.295 12 0.823 4 71.6764 4 12.5267 4 2.9317 4 0.6250 4 - 75 2 M 0.269 4 0.5780 25 47.0 6.70 61.1403 6 59.7179 6 69.3 8.65 - 76 M 0.957 4 0.308 12 0.821 4 73.8708 5 12.9680 4 3.0485 4 0.6543 5 - 76 2 M 0.271 4 0.5803 25 48.3 6.88 63.0005 7 61.4867 7 71.4 8.91 - 77 M 0.958 4 0.319 13 0.819 4 76.1110 5 13.4185 3 3.1737 7 0.6901 4 - 77 2 M 0.272 4 0.5827 25 49.6 7.06 64.8956 7 63.2867 7 73.6 9.18 - 78 M 0.959 4 0.331 13 0.818 4 78.3948 7 13.8799 4 3.2960 9 0.7220 6 - 78 2 M 0.273 4 0.5850 25 51.0 7.24 66.832 2 65.122 2 75.7 9.44 - 79 M 0.960 4 0.343 14 0.816 4 80.7249 5 14.3528 4 3.4249 3 0.7588 4 - 79 2 M 0.274 4 0.5874 25 52.4 7.42 68.8037 8 66.9895 8 78.0 9.71 - 80 M 0.962 4 0.355 14 0.814 4 83.1023 8 14.8393 10 3.5616 11 0.8003 10 - 80 2 M 0.276 4 0.5899 25 53.8 7.60 70.819 2 68.895 2 80.3 9.99 - 81 M 0.963 4 0.367 15 0.813 5 85.5304 6 15.3467 4 3.7041 4 0.8455 5 - 81 2 M 0.277 4 0.5924 25 55.2 7.78 72.8715 9 70.8319 9 82.6 10.3 - 82 M 0.963 4 0.379 15 0.811 5 88.0045 7 15.8608 5 3.8507 5 0.8936 7 - 82 2 M 0.279 4 0.5950 25 56.7 7.97 74.9694 9 72.8042 9 84.9 10.6 - 83 M 0.964 4 0.391 16 0.809 5 90.5259 7 16.3875 4 3.9991 3 0.9382 3 - 83 2 M 0.280 4 0.5977 25 58.2 8.15 77.1079 10 74.8148 10 87.3 10.8 - 84 M 0.965 4 0.403 16 0.807 5 93.1050 38 16.939 10 4.1494 39 0.9953 29 - 84 2 M 0.282 4 0.6005 25 59.7 8.33 79.290 5 76.862 5 89.8 11.1 - 85 M 0.966 4 0.416 17 0.806 5 95.730 8 17.493 29 4.317 5 1.042 5 - 85 2 M 0.284 4 0.6033 25 61.2 8.52 81.52 1 78.95 1 92.3 11.4 - 86 M 0.967 4 0.428 17 0.804 5 98.404 12 18.049 38 4.482 5 1.097 5 - 86 2 M 0.285 4 0.6062 25 62.7 8.71 83.78 2 81.07 2 94.9 11.7 - 87 M 0.967 4 0.440 18 0.802 5 101.137 13 18.639 40 4.652 5 1.153 5 - 87 2 M 0.287 4 0.6092 25 64.3 8.90 86.10 2 83.23 2 97.5 12.0 - 88 M 0.968 4 0.452 18 0.801 5 103.922 8 19.2367 15 4.8220 15 1.2084 16 - 88 2 M 0.289 4 0.6122 25 65.9 9.09 88.47 1 85.43 1 100.1 12.3 - 89 M 0.969 4 0.464 18 0.799 5 106.755 6 19.840 18 5.002 5 1.269 5 - 89 2 M 0.291 4 0.6152 25 67.5 9.28 90.884 6 87.67 1 102.8 12.7 - 90 M 0.969 4 0.476 18 0.797 5 109.6509 9 20.4721 5 5.1823 3 1.3295 4 - 90 2 M 0.294 4 0.6182 25 69.2 9.48 93.350 2 89.953 2 105.6 13.0 - 91 M 0.970 4 0.488 18 0.795 5 112.601424 21.1046 18 5.3669 16 1.3871 18 - 91 2 M 0.296 5 0.6214 25 70.8 9.68 95.868 2 92.287 2 108.4 13.3 - 92 M 0.970 4 0.500 19 0.793 5 115.606116 21.7574 3 5.5480 4 1.4408 4 - 92 2 M 0.298 5 0.6247 25 72.6 9.89 98.439 2 94.665 2 111.3 13.6 - 93 M 0.971 4 0.511 20 0.791 5 118.678 33 22.4268 9 5.7232 36 1.5007 8 - 93 2 M 0.301 5 0.6282 25 74.3 10.1 101.07 4 97.08 4 114.2 13.9 - 94 M 0.971 4 0.521 20 0.790 5 121.818 44 23.0972 16 5.9329 14 1.5586 8 - 94 2 M 0.303 5 0.6317 25 76.0 10.3 103.76 5 99.55 5 117.3 14.3 - 95 M 0.971 4 0.530 22 0.788 5 124.998 25 23.806 17 6.125 12 1.616 20 - 95 2 M 0.306 5 0.6352 25 77.8 10.5 106.49 3 102.05 3 120.3 14.6 - 96 M 0.972 4 0.538 23 0.786 5 128.261 44 24.532 32 6.336 18 1.685 20 - 96 2 M 0.309 6 0.6387 25 79.6 10.7 109.29 5 104.61 5 123.4 15.0 - 97 M 0.972 4 0.546 24 0.784 5 131.583 44 25.270 32 6.545 18 1.750 20 - 97 2 M 0.311 6 0.6424 25 81.5 10.9 112.14 5 107.21 5 126.6 15.3 - 98 M 0.972 4 0.553 25 0.782 6 134.971 44 26.019 32 6.755 18 1.810 20 - 98 2 M 0.314 7 0.6462 25 83.3 11.2 115.07 5 109.87 5 129.8 15.7 - 99 M 0.973 4 0.560 26 0.780 6 138.429 44 26.793 32 6.975 18 1.878 20 - 99 2 M 0.317 8 0.6500 25 85.2 11.4 118.05 5 112.57 5 133.2 16.0 -100 M 0.973 4 0.567 27 0.778 7 141.968 34 27.590 25 7.206 12 1.954 20 -100 2 M 0.321 9 0.6538 25 87.5 11.6 121.10 4 115.32 4 136.6 16.4 -101 M 0.99 2 0.74 10 0.78 3 145.571 62 28.400 44 7.433 20 2.019 20 -101 2 M -102 M 0.99 2 0.76 10 0.78 3 149.256 62 29.234 44 7.670 20 2.092 20 -102 2 M -103 M 0.99 2 0.78 10 0.78 3 153.023 62 30.098 44 7.921 20 2.174 20 -103 2 M --1 diff --git a/tests/ensdf_processing/radlst/ref_radlst.inp b/tests/ensdf_processing/radlst/ref_radlst.inp deleted file mode 100644 index c417a976c1..0000000000 --- a/tests/ensdf_processing/radlst/ref_radlst.inp +++ /dev/null @@ -1,697 +0,0 @@ -205TL 205HG B- DECAY 1971HI01 78NDS 197803 -205HG P 0 1/2- 5.2 M 1 1538 8 -205TL N 0.022 10 1 -205TL L 0 1/2+ -205TL B 96 2 5.27115 -205TL2 B EAV= 542 4$ -205TL CB E some approximate measurements listed in 1971SC35 -205TL L 203.7 3/2+ 1.46 NS 8 -205TL CL T 1971SH35, 1967MA45 -205TL G 203.74 3 100 M1+E2 +1.56 15 0.440 -205TL CG E from 1972BA53 -205TL CG MR from COUL. EX. (1973KR02) -205TL CG CC from 1973KR02 -205TL B 3.1 13 6.5 2 -205TL2 B EAV= 460 4$ -205TL CB IB estimated by 1971HI01 to be 3.7% 15 based on ratios of -205TL2CB IG(203.7) to 197HG,203HG IG's and CC(203.7)=0.62; IB=3.1% if CC is -205TL3CB reduced to 0.44 -205TL L 619.3 5/2+ -205TL B 0.016 7 8.6920 1U -205TL2 B EAV= 299 3$ -205TL G 415.6 3 0.59 8 (M1) 0.1691 -205TL G 618.6 7 0.090 20 -205TL CG RI(618.6)/RI(415.6) is AP twice as large as in COUL. EX. -205TL2CG and (N,N'G) -205TL L 1140.9 (3/2)+ -205TL B 0.0030 16 7.7424 -205TL2 B EAV= 115 3$ -205TL G 937.2 6 0.093 20 -205TL G 1141.1 15 0.045 20 -205TL L 1218.7 1/2+ -205TL B 0.007 4 7.1 3 -205TL2 B EAV= 90.0 25$ -205TL G 1014.7 8 0.031 10 -205TL G 1218.7 4 0.28 5 -205TL L 1340.3 (3/2)+ -205TL B 0.006 3 6.4723 -205TL2 B EAV= 53.4 24$ -205TL G 720.8 8 0.051 15 -205TL G 1136.8 6 0.21 5 -205TL G 1340.3 8 0.015 5 -205TL L 1433.9 (1/2,3/2) -205TL B 0.0049 25 5.6925 -205TL2 B EAV= 27.1 22$ -205TL G 1230.8 10 0.023 10 -205TL G 1433.9 5 0.20 5 - -205TL 205HG B- DECAY 1971HI01 78NDS 197803 -205HG P 0 1/2- 5.2 M 1 1538 8 -205TL N 0.022 10 1 -205TL L 0 1/2+ -205TL B 96 2 5.27115 -205TL2 B EAV= 542 4$ -205TL CB E some approximate measurements listed in 1971SC35 -205TL L 203.7 3/2+ 1.46 NS 8 -205TL CL T 1971SH35, 1967MA45 -205TL G 203.74 3 100 M1+E2 +1.56 15 0.440 -205TL CG E from 1972BA53 -205TL CG MR from COUL. EX. (1973KR02) -205TL CG CC from 1973KR02 -205TL B 3.1 13 6.5 2 -205TL2 B EAV= 460 4$ -205TL CB IB estimated by 1971HI01 to be 3.7% 15 based on ratios of -205TL2CB IG(203.7) to 197HG,203HG IG's and CC(203.7)=0.62; IB=3.1% if CC is -205TL3CB reduced to 0.44 -205TL L 619.3 5/2+ -205TL B 0.016 7 8.6920 1U -205TL2 B EAV= 299 3$ -205TL G 415.6 3 0.59 8 (M1) 0.1691 -205TL G 618.6 7 0.090 20 -205TL CG RI(618.6)/RI(415.6) is AP twice as large as in COUL. EX. -205TL2CG and (N,N'G) -205TL L 1140.9 (3/2)+ -205TL B 0.0030 16 7.7424 -205TL2 B EAV= 115 3$ -205TL G 937.2 6 0.093 20 -205TL G 1141.1 15 0.045 20 -205TL L 1218.7 1/2+ -205TL B 0.007 4 7.1 3 -205TL2 B EAV= 90.0 25$ -205TL G 1014.7 8 0.031 10 -205TL G 1218.7 4 0.28 5 -205TL L 1340.3 (3/2)+ -205TL B 0.006 3 6.4723 -205TL2 B EAV= 53.4 24$ -205TL G 720.8 8 0.051 15 -205TL G 1136.8 6 0.21 5 -205TL G 1340.3 8 0.015 5 -205TL L 1433.9 (1/2,3/2) -205TL B 0.0049 25 5.6925 -205TL2 B EAV= 27.1 22$ -205TL G 1230.8 10 0.023 10 -205TL G 1433.9 5 0.20 5 - -248CM 252CF A DECAY 1955AS42,1970BA18,1971WA2881NDS 198105 -248CM C 1964AS10 -248CM N 1.0 0.96908 8 -252CF P 0.0 0+ 2.638 Y 10 6217.1 5 -248CM C XL=7.8% 4 (1971WA28) -248CM CA E From 1970BA18 and corrected according to 1971BB10 -248CM CA IA Average of 1955AS42,1970BA18 -248CM CA Limits on other A's, G's given by 1963LE17,1963BJ03 -248CM L 0 0+ -248CM A 6118.3 5 84.2 3 1.0 -248CM L 43.40 2+ 126 PS 10 -248CM CL T from 1970TO08 -248CM A 6075.7 5 15.7 3 3.24 6 -248CM G 43.399 25 0.0153 9 E2 1014 -248CM2 G LC= 739 $MC= 207.2 $ -248CM CG CC ECC=1013 70 if I(A)=15.5% 1971WA28 -248CM L 144 4+ -248CM A 5976.6 0.24 4 65 -248CM G 100.2 0.013 AP (E2) 19.00 -248CM2 G LC= 13.63 $MC= 3.85 $NC+= 1.516 $ -248CM L 297 6+ -248CM A 5826.3 0.002 AP1200 AP -248CM G 160 15 0.002 (E2) 2.447 -248CM2 G KC= 0.1773 $LC= 1.631 $MC= 0.460 $NC+= 0.1791 $ -248CM L 510 8+ -248CM A 5616 6.0E-5 AP2600 AP - -172YB 172LU EC DECAY 75NDS,WBE197812 -172YB N 1.0 1.0 -172LU P 0. (4-) 6.70 D 3 2500 AP -172YB Q -2500. AP 8023.6 28 7337.930 -172YB L 0. 0+ -172YB L 78.67 2+ -172YB G 78.67 E2 8.40 99.2 42 -172YB2 G KC= 1.575 $LC= 5.19 $MC= 1.277 $N+= 0.351 $ -172YB L 260.14 4+ -172YB E 2220 AP 0.070 1.50 9.42 -172YB2 E EAV= 557.17 $CK= 0.7914 $CL= 0.12611 $CM+= 0.03803 $ -172YB G 181.47 E2 0.377 27.4 14 -172YB2 G KC= 0.2194 $LC= 0.1203 $MC= 0.0290 $N+=0.00791 $ -172YB L 539.84 6+ -172YB G 279.70 E2 0.0922 1.2 1 -172YB2 G KC= 0.0644 $LC=0.02133 $MC=0.00506 $N+=0.00145 $ -172YB E 1960. AP 0.3312 11.1016 1U -172YB2 E EAV= 449.65 $CK= 0.8151 $CL= 0.13864 $CM+= 0.04225 $ -172YB L 1042.8 0+ -172YB G 964.1 ? -172YB L 1117.8 2+ -172YB G 857.54 ? -172YB G 1039.07 ? -172YB G 1117.95 ? -172YB L 1172.28 3+ -172YB G 912.05 E2+M1 14.7 4 -172YB G 1093.64 E2+M1 63.6 13 -172YB E 1328. AP 4.322 8.4923 -172YB2 E CK= 0.8232 $CL= 0.13553 $CM+= 0.04108 $ -172YB L 1262.86 4+ -172YB G 90.57 E2+M1 -1.73 6 4.74 30.1 16 -172YB2 G KC= 1.91 4$LC= 2.15 3$MC= 0.526 7$N+= 0.1464 20$ -172YB G 723.03 (E2) 0.49 4 -172YB G 1002.75 E2+M1 5.26 12 -172YB G 1184.29 (E2) 0.49 3 -172YB E 1238. AP 3.417 8.5322 -172YB2 E CK= 0.8224 $CL= 0.13621 $CM+= 0.04132 $ -172YB L 1375.63 (5)+ -172YB G 112.71 E2+M1 4.5 3 -172YB G 203.37 E2 6.04 25 -172YB G 1116.09 0.20 4 -172YB E 1125. AP 1.5 5 8.8015 -172YB2 E CK= 0.8211 $CL= 0.13720 $CM+= 0.04168 $ -172YB L 1466.01 2+ -172YB G 293.61 .0016 AP ? -172YB G 347.8 0.0024 AP ? -172YB G 423.04 .0022 AP ? -172YB G 1205.62 .022 AP ? -172YB G 1387.22 (E2) 0.80 1 -172YB G 1466.12 (E2) 0.66 4 -172YB L 1476.8 -172YB L 1509.99 (6)+ -172YB G 134.48 0.08 1 -172YB G 247.12 0.50 7 -172YB G 970.64 0.10 3 -172YB L 1549.15 (3+) -172YB G 431.29 .0004 AP ? -172YB G 1288.98 (M1) 0.15 2 -172YB G 1470.48 (E2) 0.60 3 -172YB E 951. AP 0.37 6 9.26 7 -172YB2 E CK= 0.8184 $CL= 0.13919 $CM+= 0.04239 $ -172YB L 1609.18 2+ -172YB G 131.8 IF M1 .00056 AP ? -172YB G 142.5 IF M1 .0056 AP ? -172YB G 436.1 .0063 AP ? -172YB G 565.5 .0011 AP ? -172YB G 1348.1 .0045 AP ? -172YB G 1529.72 0.14 3 -172YB G 1609.18 0.10 1 -172YB E 891. AP 0.26 9 9.3515 -172YB2 E CK= 0.8172 $CL= 0.14008 $CM+= 0.04271 $ -172YB L 1640.38 (4,5)- -172YB G 264.76 (E1+M2) 0.65 9 -172YB G 377.52 E1+M2 3.18 10 -172YB E 860. AP 2.1 2 8.41 5 -172YB2 E CK= 0.8165 $CL= 0.14059 $CM+= 0.04290 $ -172YB L 1657.91 (4+) -172YB G 1397.29 0.34 5 -172YB G 1579.70 0.20 2 -172YB E 843. AP 0.15 8 9.5424 -172YB2 E CK= 0.8161 $CL= 0.14090 $CM+= 0.04301 $ -172YB L 1662.77 3(+) -172YB G 197.02 0.005 AP ? -172YB G 399.75 0.54 3 -172YB G 490.41 (M1) 2.00 13 -172YB G 1402.87 (E2) 0.61 5 -172YB G 1584.18 (E2) 2.53 13 -172YB E 838. AP 3.6 2 8.15025 -172YB2 E CK= 0.8160 $CL= 0.14098 $CM+= 0.04304 $ -172YB L 1700.57 (3+) -172YB G 151.09 IF M1 0.09 3 -172YB G 437.55 (M1) 0.24 2 -172YB G 528.23 (M1) 4.01 12 -172YB G 1440.52 (E2) 0.06 5 -172YB G 1622.01 2.13 8 -172YB E 800. AP 3.8 3 8.08 4 -172YB2 E CK= 0.8150 $CL= 0.14170 $CM+= 0.04330 $ -172YB L 1706.22 (5,6)- -172YB G 196.36 IF E1 0.12 1 -172YB G 330.44 E1+M2 0.62 7 -172YB G 443.42 0.16 2 -172YB G 1166.46 E1 0.14 3 -172YB E 794. AP 0.72 9 8.80 6 -172YB2 E CK= 0.8148 $CL= 0.14182 $CM+= 0.04334 $ -172YB L 1749.07 (4+) -172YB G 486.17 (M1) 0.74 8 -172YB G 576.78 (M1) 0.36 3 -172YB G 1489.00 (E2) 1.10 4 -172YB G 1670.19 (E2,M1) 0.55 7 -172YB L 1792.27 (5+) -172YB G 134.48 E2+M1 0.08 1 ? -172YB G 416.64 M1+E2 0.08 1 -172YB E 708. AP 0.03 2 10.1 3 -172YB2 E CK= 0.8121 $CL= 0.14380 $CM+= 0.04406 $ -172YB L 1803.04 (4)+ -172YB G 145.72 (M1) 0.16 4 -172YB G 427.57 (M1+E2) 0.15 2 -172YB G 540.15 M1 1.34 9 -172YB G 630.82 0.30 6 -172YB G 1542.89 (E2) 0.96 5 -172YB G 1724.41 (E2,M1) 0.43 2 -172YB E 697. AP 0.41 19 8.9221 -172YB2 E CK= 0.8117 $CL= 0.14409 $CM+= 0.04416 $ -172YB L 1862.76 (5+) -172YB G 1322.38 (E2) 0.15 3 -172YB G 1602.62 (E2,M1) 0.29 3 -172YB E 638. AP 0.24 9 9.0717 -172YB2 E CK= 0.8093 $CL= 0.14587 $CM+= 0.04481 $ -172YB L 1926.94 (5+) -172YB G 134.48 E2+M1 0.08 1 ? -172YB G 551.19 0.43 3 -172YB G 1387.22 (E2) ? -172YB G 1666.33 0.17 7 -172YB E 573. AP 0.40 8 8.75 9 -172YB2 E CK= 0.8061 $CL= 0.14826 $CM+= 0.04567 $ -172YB L 2073.00 (4+) -172YB G 210.22 IF M1 0.09 2 -172YB G 270.02 (M1) 2.20 14 -172YB G 323.89 (M1) 1.57 6 -172YB G 366.68 E1 0.32 4 -172YB G 372.51 (M1+E2) 2.77 18 -172YB G 410.31 2.08 7 -172YB G 432.53 (E1+M2) 1.54 9 -172YB G 607.16 0.65 5 -172YB G 697.26 M1 5.90 26 -172YB G 810.05 M1 15.98 38 -172YB G 900.69 M1 28.82 66 -172YB G 1812.89 (E2) 0.18 1 -172YB G 1994.30 0.16 2 -172YB E 427. AP 62.3 9 6.270 7 -172YB2 E CK= 0.7944 $CL= 0.15685 $CM+= 0.04880 $ -172YB L 2174.99 (3+) -172YB G 383.08 0.05 2 -172YB G 566.28 0.17 9 -172YB G 625.60 0.29 4 -172YB G 709.13 (E2+M1) 0.72 4 -172YB G 1914.78 (M1) 0.58 3 -172YB G 2095.71 (E2,M1) 0.11 3 -172YB E 325. AP 1.9 1 7.51123 -172YB2 E CK= 0.7784 $CL= 0.16855 $CM+= 0.05309 $ -172YB L 2181.80 (4,5+) -172YB G 254.82 0.09 1 -172YB G 319.10 (M1) 0.17 2 -172YB G 524.32 (E2+M1) 0.24 5 -172YB E 318. AP 0.50 5 8.07 5 -172YB2 E CK= 0.7768 $CL= 0.16967 $CM+= 0.05350 $ -172YB L 2191.91 (5)+ -172YB G 399.75 0.54 3 -172YB G 681.76 (M1) 0.76 6 -172YB G 816.34 (M1) 1.10 7 -172YB G 929.07 E2+M1 3.15 11 -172YB G 1019.23 0.17 10 -172YB G 1931.22 0.04 1 -172YB E 308. AP 5.2 2 7.01817 -172YB2 E CK= 0.7744 $CL= 0.17144 $CM+= 0.05415 $ -172YB L 2213.29 + -172YB G 512.78 (M1) 0.16 2 -172YB G 1040.91 (M1) 0.38 5 -172YB E 287. AP 0.54 6 7.93 5 -172YB2 E CK= 0.7686 $CL= 0.17571 $CM+= 0.05573 $ -172YB L 2285.20 (4)+ -172YB G 358.48 (M1) 0.12 1 -172YB G 422.97 0.17 2 -172YB G 482.13 (M1) 0.72 5 -172YB G 536.26 (M1) 0.70 4 -172YB G 584.60 0.37 5 -172YB G 644.40 0.24 6 -172YB G 1022.33 M1 1.48 6 -172YB G 1113.20 M1+E2 1.88 9 -172YB G 2024.90 0.05 2 -172YB E 215. AP 5.7 2 6.58716 -172YB2 E CK= 0.7369 $CL= 0.19880 $CM+= 0.06431 $ -172YB L 2343.64 (4,5+) -172YB G 594.56 (M1+E2) 0.58 7 -172YB G 967.50 (M1) 0.19 4 -172YB G 1080.81 (M1) 1.14 3 -172YB G 2082.66 (M1) 0.30 6 -172YB E 156. AP 2.2 1 6.62220 -172YB2 E CK= 0.6764 $CL= 0.24265 $CM+= 0.08090 $ - -242AM 242AM IT DECAY (141 Y) 85NDS 198508 -242AM N 1.0 0.995 2 -242AM L 0.0 1- 16.02 H 2 -242AM L 48.63 5 5- 141 Y 2 M1 -242AM G 48.63 5 E4 100 -242AM CG L1: L2: L3: M1: M2: M3: M4: M5: N1: N2: N3: N45: -242AM2CG O=<6: 17: 18:<2: 13: 10: 8: 10: <2: 6: 4: 8: AP 6. -242AM3CG Uncertainties on relative subshell intensities are AP 30% (1960AS05) -242AM CG E from 1960AS05 (s CE) -242AM CG M from L- and M- subshell ratios. - -126TE 126I EC DECAY 1977JA04 82NDS 198212 -126TE C 1977JA04: 127I(N,2N), COMPTON suppression spectrometer, semi G -126TE C Others: semi G: 1970GA32, 1970SI05, 1971MI20, 1971ZH01, 1972KA20, -126TE2C 1975OK04, 1976GR04; magnetic spectrometer: 1970GA32, 1971ZH01 -126TE C The decay scheme is that proposed by 1977JA04. -126TE2C Evaluators note that the 1396(0+), 1685(0+), 2601(0+) and -126TE3C 2051 states in 126TE in the decay proposed by 1971ZH01 -126TE4C have not been confirmed by 1975OK04, 1976GR04 or 1977JA04 -126TE C See also 126I B- decay -126TE CL J Spin and parity values are those given under adopted levels -126TE CG E From 1977JA04. The evaluators have added 10 EV in -126TE2CG quadrature to the uncertainties of 1977JA04 to account for -126TE3CG the uncertainty in calibration. -126TE CG RI From 1977JA04. -126TE CG I(G+-)/I(666G)=0.0587 18. -126TE N 0.0588 37 0.563 201.0 -126TE CN BR From I(B+)/I(B-)=0.028 1 (1955KO14), I(406B+)/I(1110B+)= -126TE2CN 0.29 1 (1955KO14, uncertainty assigned by evaluators), adopted -126TE3CN IG, EC/B-=1.27 10 (1955KO14, authors' value corrected by -126TE4CN evaluators for KC(137BA)=0.0916 and OMEGA(K) from 1972BB16), adopted -126TE5CN CC and EC/B+(GS)=23.1 5 (1U theory). -126I P 0.0 2- 13.02 D 7 2156 5 -126TE L 0.0 0+ -126TE E 1.7 3 39 7 9.13 8 41 7 1U -126TE2 E EAV= 530.2 22$CK= 0.8177 $CL= 0.11134 $CM+= 0.02952 $ -126TE L 666.34 1 2+ -126TE E 0.36 4 52 4 7.45 4 52 4 -126TE2 E EAV= 216.8 22$CK= 0.8494 $CL= 0.11368 $CM+= 0.03006 $ -126TE CE IB from B+(666 level)/B+(GS)=0.29 1 (1955KO14) -126TE G 666.331 12 1000 21 E2 0.00382 -126TE2 G KC=0.00325 -126TE L 1361.3 3 (4)+ -126TE E 0.0004 LE 12.34GE 0.0004 LE 1U -126TE2 E CK= 0.8383 $CL= 0.12742 13$CM+= 0.03433 4$ -126TE G 695.0 0.007 AP ? -126TE L 1420.17 2 2+ -126TE E 8 7 7.6 4 8 7 -126TE2 E CK= 0.8503 $CL= 0.11826 $CM+= 0.03145 $ -126TE G 753.819 13 125.8 26 (E2) 0.0028 -126TE G 1420.19 3 8.91 19 -126TE L 1873.1 3 0+ -126TE E 0.0008 2 10.1612 0.0008 2 1U -126TE2 E CK= 0.769 3$CL= 0.1799 20$CM+= 0.0512 7$ -126TE G 1206.8 3 0.014 4 -126TE L 2045.1 1 (2+,1) -126TE E 0.012 1 8.59 7 0.012 1 -126TE2 E CK= 0.771 7$CL= 0.179 5$CM+= 0.0505 15$ -126TE G 1378.76 0.072 5 -126TE G 2045.09 5 0.14 1 - -126XE 126I B- DECAY 1977JA04 82NDS 198212 -126XE C 1977JA04: 127I(N,2N), COMPTON suppression spectrometer, semi G -126XE C 1976SA28: 126TE(P,N) MS; GG(THETA,H,T) -126XE C See also 126I EC decay. Branching from 126I EC decay -126XE CG E From 1977JA04. The evaluators have added 10 EV in -126XE2CG quadrature to the uncertainties of 1977JA04 to account for -126XE3CG the uncertainty in calibration. -126XE CL J Spin and parity values are those given under adopted -126XE2CL levels -126XE CG M From GG(THETA) data (1959SA05, 1960AS04, 1971GR14, 1971TA04), -126XE2CG EKC and K/LM (1953MA59, 1955KO14) -126XE CG RI Relative to I(666.331G in 126TE)=1000 (1977JA04) -126XE N 0.0757 43 0.437 201.0 -126XE CN BR See 126I EC decay -126I P 0.0 2- 13.02 D 7 1251 5 -126XE L 0.0 0+ -126XE B 1250 10 18.3 7 10.1117 1U -126XE CB First-forbidden unique shape (1953MA59, 1955KO14) -126XE2 B EAV= 458.6 21$ -126XE L 388.633 11 2+ 41.3 PS 14 -126XE CL T1/2 from (B)(388.663G)(T) (1963DE21), G=0.22 5 -126XE B 865 5 73.4 7 8.20 5 -126XE CB Allowed shape (1955KO14) -126XE2 B EAV= 289.7 20$ -126XE G 388.633 11 1030 21 E2 0.0187 C -126XE2 G KC=0.0156$LC=0.00244$MC=0.00050$NC+=0.00012$ -126XE CG M from GG(THETA); EKC=0.016 2 (1953MA59); K/LM=6.7 10 -126XExCG (1955KO14) -126XE L 879.88 10 2+ -126XE B 385 5 8.3 7 7.89 5 -126XE CB E from BG-coin (1955KO14) -126XE2 B EAV= 108.9 17$ -126XE G 491.243 11 86.1 17M1+E2 +15 4 0.00944 C -126XE2 G KC=0.00798$LC=0.00116$MC=0.00024$ -126XE CG M from GG(THETA); EKC=0.0061 (1971ZH01); K/LM=6.3 10 (1965SA11) -126XE G 879.876 13 22.8 5 - - 57MN 57CR B- DECAY 1978DA04 86NDS 198601 - 57CR P 0 3/2-,5/2-,7/2- 21.1 S 10 4.8E+3 SY - 57MN C Measured G's, B's, 205.8G(T), and GG- and BG-coincidences; GELI, - 57MN2C scintillator; rabbit and helium-jet systems. 83G and 850G obscured by - 57MN3C contaminants from 56CR and 56MN. - 57MN CL Decay scheme constructed from GG-coincidence and singles data - 57MN CG Identification made by T1/2 or coincidence relationships - 57MN DB EAV CALCULATED BY EVALUATORS - 57MN CL E Calculated by evaluators using least-squares adjustment - 57MN2CL procedures; good agreement with 1978DA04. - 57MN DL DE GENERALLY SMALLER THAN THE 0.4 KEV ESTIMATED BY 1978DA04 FOR - 57MN2DL THE LOWER STATES AND LARGER FOR THE HIGHER STATES - 57MN CL J From adopted levels. Assignments suggested by 1978DA04 are - 57MN2CL given under comments. These suggested assignments are based on LOGFT - 57MN3CL and existence of G's with the assumption that JPI(57CR)=3/2-. The - 57MN4CL argument for JPI(57CR)=3/2- depends on the transition to the 2186 - 57MN5CL state. The evaluators do not adopt this argument since J(2186)=1/2 is - 57MN6CL based on a calculation (1978AN10) in (A,P) and DFT does not permit the - 57MN7CL statement that the transition is allowed. - 57MN DB E ENERGY CALIBRATION BY MEANS OF OTHER KNOWN BETA SPECTRA - 57MN2DB OBTAINED IN THE SAME BG MEASUREMENT - 57MN CB IB Calculated by evaluators from intensity balancing at each - 57MN2CB state, except as noted; in good agreement with 1978DA04 although DIB - 57MN3CB are generally higher here - 57MN CB LOGFT Calculated by evaluators based on Q-=4.8 MEV instead of - 57MN2CB 5.10 MEV 10; AP 0.1 to 0.3 lower than values given by 1978DA04 - 57MN CG RI Relative intensity. Some RI's had to be obtained from - 57MN2CG the 83G coincidence spectrum because of low intensity or interference - 57MN3CG from other lines in the singles spectrum - 57MN N 0.051 24 1 1 - 57MN CN NR From SUMOF RI(1+CC) to GS and IB(to GS)=74% 12 - 57MN CG CC Calculated by evaluators using adopted EG - 57MN DG KC,LC: CALCULATED BY EVALUATORS USING ADOPTED EG - 57MN CG M(A),CC(A)$Added by evaluators on basis of comment by 1978DA04 that, - 57MN2CG theoretically, there was 5% conversion for this GAMMA. - 57MN CB E(D) Q- obtained from these values is discrepant with value - 57MN2CB recommended by 1985WA02 - 57MN CB IB(B) As given by the 1978DA04. Evaluators note a possible - 57MN2CB intensity imbalance - 57MN CB IB(A) The ratio of accumulated 57CR to accumulated 57MN activity - 57MN2CB was obtained from the helium-jet run. SIGMA(57MN)/SIGMA(57CR) was - 57MN3CB used to obtain the GS feeding. DIB also reflects the uncertainty in - 57MN4CB the ratio of production SIGMA's. - 57MN L 0 5/2- - 57MN B 74 12 5.3 - 57MN2 B EAV AP 2.16E+3 - 57MN3 B FLAG=A - 57MN L 83.39 17 5/2-,7/2- - 57MN CL J 7/2- - 57MN B 0.7 LT 7.3 GT ? - 57MN2 B EAV AP 2.12E+3 - 57MN3 B FLAG=B - 57MN G 83.4 2 160 32 IF M1 0.0508 C - 57MN2 G KC= 0.0449 $LC=0.00443 - 57MN3 G FLAG=A - 57MN L 850.16 23 3/2- - 57MN B 2.6 22 6.4 - 57MN2 B EAV AP 1.75E+3 - 57MN G 766.5 5 6.7 16 - 57MN G 850.2 6 157 33 - 57MN L 1055.87 231/2-,3/2-,5/2- - 57MN CL J (1/2-) - 57MN B 2.1 11 6.5 - 57MN2 B EAV AP 1.65E+3 - 57MN G 205.8 3 56.2 35 - 57MN DG E NOTE APPARENT MISPRINT IN TABLE I OF 1978DA04 GIVING EG=105.8 - 57MN2DG (EVALUATORS) - 57MN G 1055.8 3 16.3 19 - 57MN L 1375.0 4 - - 57MN CL J 3/2,5/2 - 57MN B 0.4 3 7.9 - 57MN2 B EAV AP 1.49E+3 - 57MN G 1292.2 5 14.6 26 - 57MN L 1492.77 21 - - 57MN CL J 3/2,5/2 - 57MN B 0.8 5 6.6 - 57MN2 B EAV AP 1.44E+3 - 57MN G 1409.3 3 18.0 29 - 57MN G 1492.7 3 18.5 25 - 57MN L 1534.85 25 - - 57MN CL J LE 5/2- - 57MN B 3.54E+3 13 6. 3 5.7 C - 57MN2 B EAV AP 1.42E+3 - 57MN3 B FLAG=D - 57MN G 479.1 5 3.6 14 - 57MN G 684.1 5 10.5 42 - 57MN G 1535.0 3 94.7 64 C - 57MN L 1725.6 6 - - 57MN CL J 3/2,5/2 - 57MN B 0.21 13 7.1 - 57MN2 B EAV AP 1.33E+3 - 57MN G 1642.2 5 4.2 15 - 57MN L 1835.5 4 (5/2)- - 57MN B 3.28E+3 9 7. 4 5.4 C - 57MN2 B EAV AP 1.27E+3 - 57MN3 B FLAG=D - 57MN G 342.9 5 9.5 25 - 57MN G 1752.1 5 100 C - 57MN G 1835.2 6 26.8 24 - 57MN L 2146.9 9 - 57MN CL J 3/2,5/2 - 57MN B 0.22 13 6.7 - 57MN2 B EAV AP 1.12E+3 - 57MN G 2063.5 8 4.3 15 - 57MN L 2185.8 4 - 57MN CL J 1/2- - 57MN B 2.6 14 5.6 - 57MN2 B EAV AP 1.11E+3 - 57MN G 1129.9 3 27.1 25 - 57MN G 1335.7 5 23. 10 - 57MN L 2232.9 6 5/2-,7/2- - 57MN CL J (3/2-) - 57MN B 0.43 22 6.4 - 57MN2 B EAV AP 1.08E+3 - 57MN L 2340.6 4 5/2+,3/2+ - 57MN CL J 3/2,5/2 - 57MN B 0.24 21 6.5 - 57MN2 B EAV AP 1.03E+3 - 57MN G 2257.2 9 4.7 34 - 57MN L 2493.3 5 - 57MN CL J 3/2-,5/2- - 57MN B 1.7 8 5.6 - 57MN2 B EAV AP 9.6E+2 - 57MN G 2410.0 7 16.9 19 - 57MN G 2493.1 7 15.6 14 - 57MN L 2702.2 3 - 57MN CL J 3/2-,5/2- - 57MN B 2.5 3 5.2 - 57MN2 B EAV AP 8.6E+2 - 57MN G 1209.2 3 11.3 21 - 57MN G 1327.3 3 6.2 33 - 57MN G 1852.0 4 23.0 28 - 57MN G 2618.3 8 8.6 27 - - 57FE 57CO EC DECAY 86NDS 198601 - 57FE CL E Calculated by evaluators using least-squares adjustment - 57FE2CL procedures. Uncertainty in 198AU reference scale (+-1.1 EV) for - 57FE3CL 122G and 136G added in quadrature after adjustment - 57FE CL J From adopted levels. Results deduced from G(THETA,H,TEMP), - 57FE2CL GG(THETA), and CC's are consistent - 57FE CG See 1970RA51 for summary of conversion-electron - 57FE2CG ratio measurements (spectrometer, CE) from 1954AL06, 1955CO31, - 57FE3CG 1957BE45, 1960EW04, and 1967HA06. The ratios have also been measured - 57FE4CG by 1971PO05 (spectrometer, CE). These data were used in the present - 57FE5CG evaluation as noted below. Others: see 1981HAZY - 57FE CG $14.4G summary: EG: unweighted av of 2 LAMBDA measurements - 57FE2CG (1967BE65,1965BE41; moss,cryst), in good agreement with 14.4127 4 and - 57FE3CG 14.4147 25 obtained by 1976BO16 and 1972HE42, respectively, from a fit - 57FE4CG of EG(122G,136G) into level scheme. Note that these values are not - 57FE5CG consistent with 14.4050 6 from E(CEM1)=14.3134 2 (1971PO05). - 57FE6CG E(CE): E(CEK)=7.289 8 (1967HA06,spectrometer); 7.300 6 (1963TH04,pc). - 57FE7CG E(CEM1)=14.3134 2 ("METALLIC"), 14.3122 2 ("OXIDE"); - 57FE8CG E(CEN1)=14.4017 2 ("METALLIC"), 14.4005 2 ("OXIDE") (1971PO05, - 57FE9CG spectrometer). RI: from TI and CC. Other: 87 4 (1971KO19; GELI). - 57FEACG ECC: weighted av from 1963MU02 (spectrometer K/L), 1963TH04 - 57FEBCG (NAI,pc XG/G), 1965KI03 (NAI GG), 1967HA06 (spectrometer CEK/K-AUGER), - 57FECCG 1968RU04 (pc XX/XG), and 1971KO19 (GELI RI) as evaluated by 1984HAZS. - 57FEDCG See adopted gammas for final value recommended by 1984HAZS. Others: see - 57FEECG 1981HAZY. EKC: weighted av of data from 1963MU02, 1967HA06, 1968RU04, - 57FEFCG and thesis by ^N. Frani-coursol (UNIV. Paris). See adopted gammas for - 57FEGCG recommended value (1984HAZS). K:L:M+: unweighted av of 1957BE45, - 57FEHCG 1960EW04, 1963MU02, 1971PO05. Other: K/L+=100/12.1 6 (1967HA06). - 57FEICG L1/L23: other: 10.9 8 (1960EW04) - 57FE CG Chemical effects were observed in the spectral shapes and - 57FE2CG ratios of the outer-shell conversion electrons by 1971PO05, 1971PL10, - 57FE3CG and 1974FU15, among others. See 1984MA23 for calculations which - 57FE4CG included solid-state effects - 57FE CG 122G and 136G summary: MR(122G): weighted av of - 57FE2CG G(THETA,H,TEMP) (GELI); +0.120 2 (1972FO05), +0.116 1 (1973SC15), - 57FE3CG +0.1195 10 (1975CO22); and GG(THETA) (GELI), +0.120 4 (1972KR15). - 57FE4CG Others: 1972VI09, 1972NI01. ECC,EKC(122G,136G): from 1967HA06 - 57FE5CG (spectrometer, CE/pe). 1967MU20 excluded from consideration since the - 57FE6CG CEK were not completely separated and there appeared to be no - 57FE7CG separation of the higher shell electrons (1984HAZS). Others: 1984HAZS, - 57FE8CG 1981HAZY. K/L+(122G,136G): unweighted av of 1954AL06, 1957BE45, - 57FExCG 1965MO22, 1967HA06. - 57FE cG $"Shakeoff" measurements (1971Po04, spectrometer): 14.4|g: - 57FE2cG No KM observed (KM{-1}/ce(K)<1%; KM{-23}<4%). 122.1|g: - 57FE3cG |SKL/ce(K)=0.009 {I5}; E(KL{-3})=7905 eV {I+20-10}; - 57FE4cG 0.4|*10{+-4} Date: Tue, 26 Jan 2016 14:44:26 -0800 Subject: [PATCH 111/216] Removed force read encoding as ascii for ensdf test files --- tests/test_ensdf_processing.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_ensdf_processing.py b/tests/test_ensdf_processing.py index dd53cc966d..4e1404ee6d 100644 --- a/tests/test_ensdf_processing.py +++ b/tests/test_ensdf_processing.py @@ -1,4 +1,4 @@ -import filecmp, numpy, os, shutil, codecs +import filecmp, numpy, os, shutil from pyne import ensdf_processing import nose @@ -93,8 +93,8 @@ def file_comp(file_out, file_ref, exceptions): type 4: carriage return vs. non standard return type. options: line number of return. ''' - f_out = codecs.open(file_out, 'r', 'ascii') - f_ref = codecs.open(file_ref, 'r', 'ascii') + f_out = open(file_out, 'r') + f_ref = open(file_ref, 'r') diff_lines = numpy.array([]) line_num = 0 for line_out in f_out: From c239150ada9702e6f03464035caad75a51797753 Mon Sep 17 00:00:00 2001 From: josh Date: Tue, 26 Jan 2016 14:55:29 -0800 Subject: [PATCH 112/216] Removed bldhst --- pyne/ensdf_processing.py | 27 - src/CMakeLists.txt | 1 - .../bldhst/ref_bldhst_iccseq.dat | 13004 ---------------- tests/ensdf_processing/bldhst/ref_iccndx.dat | Bin 448 -> 0 bytes tests/ensdf_processing/bldhst/ref_icctbl.dat | Bin 572176 -> 0 bytes tests/test_ensdf_processing.py | 14 - 6 files changed, 13046 deletions(-) delete mode 100644 tests/ensdf_processing/bldhst/ref_bldhst_iccseq.dat delete mode 100644 tests/ensdf_processing/bldhst/ref_iccndx.dat delete mode 100644 tests/ensdf_processing/bldhst/ref_icctbl.dat diff --git a/pyne/ensdf_processing.py b/pyne/ensdf_processing.py index 2941f416b8..733b6bdc34 100644 --- a/pyne/ensdf_processing.py +++ b/pyne/ensdf_processing.py @@ -176,33 +176,6 @@ def gtol(inputdict_unchecked): proc.stdin.close() return inputdict_unchecked -def bldhst(inputdict_unchecked): - """ - This program builds a direct access file of the internal conversion coefficient - table. (BLDHST readme) - - Input Dictionary Required Key Pair Value: - input_file : input ensdf file. - output_table_file : desired output table file path. - output_index_file : desired output index file path. - - - Output Dictionary Values: - Everything in input dictionary is returned if BLDHST completes successfully. - """ - inputdict = {} - input_file = inputdict_unchecked['input_file'] - output_table_file = inputdict_unchecked['output_table_file'] - output_index_file = inputdict_unchecked['output_index_file'] - - exe_path = path_to_exe('bldhst') - proc = subprocess.Popen([exe_path],stdout=subprocess.PIPE,stdin=subprocess.PIPE) - inp = input_file + '\n' + output_table_file + '\n' + output_index_file - proc.stdin.write(inp.encode('utf-8')) - proc.communicate()[0] - proc.stdin.close() - return inputdict_unchecked - def hsicc(inputdict_unchecked): """ This program calculates internal conversion coefficients. (HSICC readme) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 450136381c..a5c732be4d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -107,7 +107,6 @@ add_executable(alphad ${PROJECT_SOURCE_DIR}/src/ensdf_processing/ALPHAD/alphad.f add_executable(delta ${PROJECT_SOURCE_DIR}/src/ensdf_processing/DELTA/delta.for) add_executable(gtol ${PROJECT_SOURCE_DIR}/src/ensdf_processing/GTOL/gtol.f ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f) -add_executable(bldhst ${PROJECT_SOURCE_DIR}/src/ensdf_processing/HSICC/bldhst.for) add_executable(hsicc ${PROJECT_SOURCE_DIR}/src/ensdf_processing/HSICC/hsicc.for ${PROJECT_SOURCE_DIR}/src/ensdf_processing/nsdflib95.f) add_executable(hsmrg ${PROJECT_SOURCE_DIR}/src/ensdf_processing/HSICC/hsmrg.for diff --git a/tests/ensdf_processing/bldhst/ref_bldhst_iccseq.dat b/tests/ensdf_processing/bldhst/ref_bldhst_iccseq.dat deleted file mode 100644 index c2ab79e7ab..0000000000 --- a/tests/ensdf_processing/bldhst/ref_bldhst_iccseq.dat +++ /dev/null @@ -1,13004 +0,0 @@ - 3K1 15.006.55E-025.65E+004.10E+022.83E+042.85E-031.87E-011.25E+018.37E+02 - 3K1 17.004.30E-023.29E+002.12E+021.30E+042.07E-031.21E-017.12E+004.23E+02 - 3K1 20.002.48E-021.63E+008.99E+014.72E+031.37E-036.84E-023.45E+001.75E+02 - 3K1 25.001.17E-026.20E-012.77E+011.17E+037.82E-043.15E-021.28E+005.23E+01 - 3K1 32.005.06E-032.12E-017.50E+002.52E+024.22E-041.34E-024.30E-011.38E+01 - 3K1 40.002.37E-038.07E-022.31E+006.28E+012.42E-046.22E-031.61E-014.20E+00 - 3K1 50.001.11E-033.07E-027.12E-011.57E+011.39E-042.91E-036.10E-021.28E+00 - 3K1 65.004.56E-049.86E-031.79E-013.10E+007.33E-051.20E-031.96E-023.23E-01 - 3K1 80.002.26E-044.03E-036.05E-028.64E-014.43E-055.98E-048.10E-031.10E-01 - 3K1 100.001.06E-041.55E-031.90E-022.21E-012.59E-052.86E-043.16E-033.50E-02 - 3K1 120.005.77E-057.12E-047.42E-037.35E-021.68E-051.58E-041.48E-031.39E-02 - 3K1 150.002.74E-052.78E-042.38E-031.94E-029.95E-067.69E-055.94E-044.59E-03 - 3K1 200.001.07E-058.41E-055.65E-043.61E-035.13E-063.11E-051.89E-041.14E-03 - 3K1 300.002.97E-061.66E-058.01E-053.69E-042.08E-069.15E-064.01E-051.76E-04 - 3K1 450.009.07E-073.65E-061.30E-054.42E-058.79E-072.89E-069.42E-063.07E-05 - 3K1 650.003.50E-071.06E-062.93E-067.80E-064.21E-071.09E-062.81E-067.22E-06 - 3K11000.001.38E-073.11E-076.61E-071.37E-061.89E-073.86E-077.84E-071.59E-06 - 3K12000.004.41E-086.99E-081.08E-071.66E-076.01E-089.20E-081.40E-072.13E-07 - 3K16000.001.15E-081.36E-081.61E-081.90E-081.34E-081.58E-081.86E-082.19E-08 - 3L1 15.009.58E-048.23E-025.95E+004.09E+024.17E-052.74E-031.82E-011.22E+01 - 3L1 17.006.29E-044.80E-023.08E+001.88E+023.03E-051.77E-031.04E-016.19E+00 - 3L1 20.003.64E-042.38E-021.31E+006.85E+012.01E-051.00E-035.05E-022.56E+00 - 3L1 25.001.71E-049.05E-034.03E-011.71E+011.15E-054.61E-041.87E-027.65E-01 - 3L1 32.007.41E-053.10E-031.09E-013.67E+006.18E-061.96E-046.29E-032.03E-01 - 3L1 40.003.48E-051.18E-033.37E-029.16E-013.55E-069.12E-052.36E-036.15E-02 - 3L1 50.001.63E-054.49E-041.04E-022.29E-012.04E-064.26E-058.93E-041.88E-02 - 3L1 65.006.69E-061.44E-042.62E-034.53E-021.07E-061.75E-052.88E-044.74E-03 - 3L1 80.003.31E-065.90E-058.86E-041.26E-026.49E-078.76E-061.19E-041.61E-03 - 3L1 100.001.56E-062.27E-052.78E-043.24E-033.80E-074.19E-064.63E-055.13E-04 - 3L1 120.008.45E-071.04E-051.09E-041.08E-032.46E-072.31E-062.17E-052.04E-04 - 3L1 150.004.02E-074.07E-063.49E-052.84E-041.46E-071.13E-068.71E-066.73E-05 - 3L1 200.001.57E-071.23E-068.28E-065.28E-057.52E-084.56E-072.76E-061.67E-05 - 3L1 300.004.35E-082.43E-071.17E-065.40E-063.05E-081.34E-075.88E-072.57E-06 - 3L1 450.001.33E-085.35E-081.90E-076.47E-071.29E-084.23E-081.38E-074.50E-07 - 3L1 650.005.13E-091.56E-084.29E-081.14E-076.17E-091.60E-084.12E-081.06E-07 - 3L11000.002.02E-094.57E-099.69E-092.01E-082.77E-095.66E-091.15E-082.33E-08 - 3L12000.006.46E-101.02E-091.59E-092.43E-098.81E-101.35E-092.05E-093.12E-09 - 6K1 15.004.38E-013.51E+012.36E+031.52E+052.81E-021.80E+001.16E+027.57E+03 - 6K1 17.002.91E-012.08E+011.25E+037.17E+042.02E-021.15E+006.58E+013.80E+03 - 6K1 20.001.71E-011.05E+015.45E+022.69E+041.32E-026.43E-013.15E+011.56E+03 - 6K1 25.008.19E-024.12E+001.74E+026.97E+037.42E-032.91E-011.15E+014.62E+02 - 6K1 32.003.62E-021.45E+004.87E+011.56E+033.94E-031.22E-013.83E+001.21E+02 - 6K1 40.001.73E-025.63E-011.54E+014.01E+022.23E-035.62E-021.43E+003.65E+01 - 6K1 50.008.21E-032.18E-014.87E+001.03E+021.27E-032.60E-025.36E-011.11E+01 - 6K1 65.003.42E-037.16E-021.26E+002.10E+016.63E-041.06E-021.72E-012.79E+00 - 6K1 80.001.71E-032.97E-024.33E-015.99E+003.97E-045.28E-037.04E-029.45E-01 - 6K1 100.008.16E-041.16E-021.38E-011.57E+002.31E-042.51E-032.74E-023.00E-01 - 6K1 120.004.46E-045.38E-035.48E-025.29E-011.49E-041.38E-031.28E-021.19E-01 - 6K1 150.002.14E-042.12E-031.78E-021.42E-018.76E-056.71E-045.13E-033.94E-02 - 6K1 200.008.43E-056.53E-044.30E-032.70E-024.49E-052.71E-041.63E-039.78E-03 - 6K1 300.002.37E-051.31E-046.23E-042.83E-031.80E-057.92E-053.45E-041.50E-03 - 6K1 450.007.33E-062.92E-051.03E-043.46E-047.56E-062.49E-058.11E-052.64E-04 - 6K1 650.002.85E-068.61E-062.36E-056.23E-053.59E-069.38E-062.42E-056.20E-05 - 6K11000.001.12E-062.55E-065.40E-061.12E-051.60E-063.30E-066.73E-061.36E-05 - 6K12000.003.58E-075.75E-078.94E-071.37E-064.99E-077.74E-071.19E-061.81E-06 - 6K16000.009.29E-081.11E-071.32E-071.57E-071.09E-071.30E-071.54E-071.83E-07 - 6L1 15.002.30E-021.82E+001.22E+027.74E+031.50E-039.70E-026.32E+004.17E+02 - 6L1 17.001.53E-021.08E+006.45E+013.67E+031.08E-036.18E-023.57E+002.08E+02 - 6L1 20.009.00E-035.51E-012.83E+011.38E+037.07E-043.45E-021.70E+008.50E+01 - 6L1 25.004.33E-032.16E-019.05E+003.61E+023.96E-041.56E-026.22E-012.50E+01 - 6L1 32.001.92E-037.63E-022.55E+008.12E+012.10E-046.55E-032.06E-016.54E+00 - 6L1 40.009.15E-042.97E-028.10E-012.10E+011.19E-043.01E-037.66E-021.97E+00 - 6L1 50.004.36E-041.15E-022.57E-015.43E+006.80E-051.39E-032.87E-025.97E-01 - 6L1 65.001.82E-043.80E-036.65E-021.11E+003.54E-055.68E-042.19E-031.49E-01 - 6L1 80.009.11E-051.58E-032.29E-023.17E-012.12E-052.82E-043.77E-035.06E-02 - 6L1 100.004.34E-056.15E-047.33E-038.30E-021.23E-051.34E-041.47E-031.61E-02 - 6L1 120.002.37E-052.86E-042.91E-032.81E-027.95E-067.37E-056.85E-046.38E-03 - 6L1 150.001.14E-051.13E-049.47E-047.55E-034.68E-063.58E-052.74E-042.10E-03 - 6L1 200.004.49E-063.48E-052.29E-041.43E-032.40E-061.45E-058.69E-055.23E-04 - 6L1 300.001.27E-066.97E-063.32E-051.50E-049.62E-074.23E-061.84E-058.04E-05 - 6L1 450.003.91E-071.56E-065.47E-061.84E-054.03E-071.33E-064.33E-061.41E-05 - 6L1 650.001.52E-074.59E-071.26E-063.32E-061.92E-075.00E-071.29E-063.31E-06 - 6L11000.006.00E-081.36E-072.88E-075.95E-078.51E-081.76E-073.59E-077.27E-07 - 6L12000.001.91E-083.06E-084.77E-087.33E-082.66E-084.13E-086.34E-089.67E-08 - 10K1 15.001.55E+001.11E+026.67E+033.83E+051.66E-011.05E+016.42E+023.96E+04 - 10K1 17.001.04E+006.75E+013.64E+031.88E+051.18E-016.58E+003.60E+021.98E+04 - 10K1 20.006.24E-013.51E+011.65E+037.40E+047.60E-023.62E+001.70E+028.07E+03 - 10K1 25.003.06E-011.42E+015.49E+022.03E+044.17E-021.60E+006.14E+012.37E+03 - 10K1 32.001.38E-015.17E+001.61E+024.81E+032.17E-026.59E-012.00E+016.15E+02 - 10K1 40.006.73E-022.06E+005.29E+011.30E+031.21E-022.98E-017.36E+001.84E+02 - 10K1 50.003.26E-028.21E-011.73E+013.47E+026.77E-031.36E-012.73E+005.54E+01 - 10K1 65.001.38E-022.77E-014.62E+007.36E+013.46E-035.46E-028.64E-011.38E+01 - 10K1 80.007.02E-031.17E-011.63E+002.16E+012.05E-032.68E-023.52E-014.64E+00 - 10K1 100.003.39E-034.64E-025.33E-015.82E+001.18E-031.27E-021.36E-011.47E+00 - 10K1 120.001.87E-032.19E-022.15E-012.01E+007.54E-046.91E-036.32E-025.81E-01 - 10K1 150.009.09E-048.77E-037.13E-025.51E-014.40E-043.34E-032.52E-021.91E-01 - 10K1 200.003.63E-042.74E-031.76E-021.07E-012.23E-041.34E-037.95E-034.74E-02 - 10K1 300.001.04E-045.62E-042.62E-031.17E-028.83E-053.88E-041.68E-037.27E-03 - 10K1 450.003.25E-051.28E-044.43E-041.47E-033.66E-051.21E-043.94E-041.27E-03 - 10K1 650.001.28E-053.83E-051.04E-042.72E-041.72E-054.53E-051.17E-042.99E-04 - 10K11000.005.06E-061.15E-052.43E-055.01E-057.52E-061.58E-053.24E-056.57E-05 - 10K12000.001.60E-062.61E-064.09E-066.31E-062.30E-063.63E-065.63E-068.65E-06 - 10K16000.004.11E-074.97E-075.97E-077.14E-074.88E-075.90E-077.07E-078.45E-07 - 10L1 15.008.71E-026.12E+003.60E+022.02E+049.81E-036.43E-014.13E+012.68E+03 - 10L1 17.005.89E-023.74E+001.98E+021.00E+046.96E-034.02E-012.29E+011.32E+03 - 10L1 20.003.54E-021.96E+009.05E+014.00E+034.47E-032.19E-011.07E+015.25E+02 - 10L1 25.001.75E-027.99E-013.05E+011.12E+032.45E-039.66E-023.79E+001.51E+02 - 10L1 32.007.94E-032.93E-019.06E+002.67E+021.27E-033.94E-021.22E+003.83E+01 - 10L1 40.003.88E-031.18E-013.00E+007.27E+017.09E-041.77E-024.45E-011.13E+01 - 10L1 50.001.88E-034.71E-029.85E-011.96E+013.98E-048.05E-031.64E-013.37E+00 - 10L1 65.008.03E-041.60E-022.65E-014.20E+002.03E-043.23E-035.16E-028.29E-01 - 10L1 80.004.08E-046.76E-039.39E-021.24E+001.21E-041.59E-032.09E-022.78E-01 - 10L1 100.001.97E-042.69E-033.08E-023.35E-016.92E-057.46E-048.06E-038.74E-02 - 10L1 120.001.09E-041.27E-031.24E-021.16E-014.43E-054.07E-043.74E-033.45E-02 - 10L1 150.005.31E-055.11E-044.14E-033.20E-022.58E-051.97E-041.49E-031.13E-02 - 10L1 200.002.12E-051.60E-041.03E-036.25E-031.31E-057.87E-054.69E-042.80E-03 - 10L1 300.006.08E-063.29E-051.53E-046.80E-045.18E-062.28E-059.89E-054.28E-04 - 10L1 450.001.91E-067.49E-062.59E-058.60E-052.14E-067.11E-062.31E-057.49E-05 - 10L1 650.007.48E-072.24E-066.08E-061.59E-051.01E-062.66E-066.87E-061.76E-05 - 10L11000.002.96E-076.74E-071.43E-062.93E-064.41E-079.26E-071.90E-063.86E-06 - 10L12000.009.40E-081.53E-072.40E-073.70E-071.35E-072.13E-073.31E-075.08E-07 - 10L2 15.001.08E-032.63E-014.83E+016.40E+031.82E-042.50E-022.71E+002.62E+02 - 10L2 17.006.51E-041.37E-012.22E+012.60E+031.20E-041.46E-021.41E+001.21E+02 - 10L2 20.003.34E-045.88E-028.06E+008.08E+027.02E-057.27E-036.00E-014.41E+01 - 10L2 25.001.34E-041.84E-022.01E+001.62E+023.35E-052.78E-031.86E-011.11E+01 - 10L2 32.004.83E-055.09E-034.34E-012.76E+011.47E-059.63E-045.09E-022.40E+00 - 10L2 40.001.92E-051.60E-031.09E-015.59E+007.00E-063.69E-041.58E-026.03E-01 - 10L2 50.007.63E-065.04E-042.74E-021.14E+003.33E-061.42E-044.91E-031.52E-01 - 10L2 65.002.59E-061.30E-045.48E-031.77E-011.39E-064.61E-051.25E-033.04E-02 - 10L2 80.001.10E-064.50E-051.55E-034.11E-026.97E-071.90E-054.26E-048.54E-03 - 10L2 100.004.43E-071.45E-054.01E-048.67E-033.33E-077.37E-061.35E-042.21E-03 - 10L2 120.002.12E-075.80E-061.35E-042.47E-031.82E-073.42E-065.30E-057.38E-04 - 10L2 150.008.66E-081.91E-063.61E-055.40E-048.76E-081.34E-061.71E-051.96E-04 - 10L2 200.002.80E-084.71E-076.81E-067.91E-053.43E-084.09E-074.07E-063.65E-05 - 10L2 300.005.99E-096.97E-087.05E-075.82E-069.31E-097.92E-085.66E-073.66E-06 - 10L2 450.001.39E-091.14E-088.23E-084.94E-072.61E-091.62E-088.54E-084.09E-07 - 10L2 650.004.07E-102.48E-091.33E-086.14E-088.54E-104.08E-091.67E-086.26E-08 - 10L21000.001.10E-104.82E-101.90E-096.61E-092.45E-108.87E-102.81E-098.16E-09 - 10L22000.001.84E-115.11E-111.31E-103.12E-103.86E-119.62E-112.17E-104.56E-10 - 10L3 15.002.12E-035.00E-019.09E+011.20E+049.64E-052.41E-024.83E+006.60E+02 - 10L3 17.001.27E-032.60E-014.14E+014.83E+036.42E-051.34E-022.34E+002.83E+02 - 10L3 20.006.51E-041.11E-011.49E+011.49E+033.78E-056.29E-039.18E-019.45E+01 - 10L3 25.002.60E-043.43E-023.68E+002.95E+021.83E-052.23E-032.56E-012.11E+01 - 10L3 32.009.37E-059.39E-037.79E-014.91E+018.17E-067.17E-046.29E-024.08E+00 - 10L3 40.003.72E-052.91E-031.92E-019.71E+003.94E-062.58E-041.79E-029.34E-01 - 10L3 50.001.48E-059.02E-044.71E-021.92E+001.91E-069.38E-055.13E-032.16E-01 - 10L3 65.005.00E-062.28E-049.10E-032.88E-018.12E-072.88E-051.20E-033.92E-02 - 10L3 80.002.13E-067.72E-052.48E-036.43E-024.15E-071.14E-053.82E-041.03E-02 - 10L3 100.008.60E-072.43E-056.19E-041.29E-022.02E-074.25E-061.13E-042.48E-03 - 10L3 120.004.13E-079.48E-062.00E-043.51E-031.13E-071.91E-064.23E-057.84E-04 - 10L3 150.001.70E-073.04E-065.08E-057.20E-045.60E-087.26E-071.29E-051.95E-04 - 10L3 200.005.59E-087.17E-078.86E-069.58E-052.30E-082.13E-072.84E-063.34E-05 - 10L3 300.001.25E-081.01E-078.09E-075.98E-066.83E-093.99E-083.56E-072.97E-06 - 10L3 450.003.16E-091.59E-088.34E-084.24E-072.17E-098.16E-094.85E-082.93E-07 - 10L3 650.001.03E-093.47E-091.25E-084.58E-088.23E-102.15E-098.79E-093.97E-08 - 10L31000.003.27E-107.30E-101.76E-094.51E-092.95E-105.34E-101.41E-094.50E-09 - 10L32000.007.46E-111.04E-101.54E-102.44E-107.29E-119.05E-111.32E-102.33E-10 - 14K1 15.003.30E+002.09E+021.09E+045.49E+055.79E-013.62E+012.07E+031.17E+05 - 14K1 17.002.25E+001.29E+026.16E+032.82E+054.06E-012.25E+011.15E+035.91E+04 - 14K1 20.001.36E+006.92E+012.91E+031.17E+052.58E-011.22E+015.43E+022.42E+04 - 14K1 25.006.82E-012.89E+011.02E+033.44E+041.39E-015.28E+001.94E+027.12E+03 - 14K1 32.003.15E-011.09E+013.13E+028.64E+037.06E-022.13E+006.24E+011.84E+03 - 14K1 40.001.56E-014.47E+001.07E+022.44E+033.87E-029.44E-012.27E+015.48E+02 - 14K1 50.007.65E-021.82E+003.60E+016.81E+022.14E-024.24E-018.31E+001.64E+02 - 14K1 65.003.31E-026.29E-019.97E+001.51E+021.08E-021.68E-012.60E+004.05E+01 - 14K1 80.001.70E-022.71E-013.60E+004.56E+016.30E-038.15E-021.05E+001.36E+01 - 14K1 100.008.30E-031.09E-011.21E+001.26E+013.57E-033.80E-024.02E-014.27E+00 - 14K1 120.004.63E-035.23E-024.94E-014.45E+002.27E-032.06E-021.86E-011.68E+00 - 14K1 150.002.27E-032.13E-021.67E-011.25E+001.31E-039.87E-037.36E-025.51E-01 - 14K1 200.009.19E-046.77E-034.22E-022.51E-016.56E-043.92E-032.31E-021.36E-01 - 14K1 300.002.68E-041.42E-036.47E-032.82E-022.56E-041.13E-034.84E-032.08E-02 - 14K1 450.008.49E-053.29E-041.12E-033.67E-031.04E-043.48E-041.13E-033.63E-03 - 14K1 650.003.36E-051.00E-042.69E-046.96E-044.84E-051.29E-043.34E-048.52E-04 - 14K11000.001.34E-053.05E-056.43E-051.32E-042.09E-054.46E-059.18E-051.87E-04 - 14K12000.004.22E-066.97E-061.10E-051.71E-056.23E-061.00E-051.57E-052.43E-05 - 14K16000.001.07E-061.31E-061.59E-061.92E-061.28E-061.57E-061.91E-062.30E-06 - 14L1 15.002.22E-011.36E+016.84E+023.29E+044.24E-022.91E+001.86E+021.19E+04 - 14L1 17.001.52E-018.51E+003.92E+021.73E+042.97E-021.79E+001.01E+025.74E+03 - 14L1 20.009.33E-024.60E+001.88E+027.35E+031.88E-029.54E-014.62E+012.24E+03 - 14L1 25.004.72E-021.95E+006.72E+012.21E+031.01E-024.08E-011.59E+016.26E+02 - 14L1 32.002.20E-027.47E-012.11E+015.69E+025.15E-031.62E-014.99E+001.55E+02 - 14L1 40.001.09E-023.09E-017.28E+001.64E+022.82E-037.12E-021.77E+004.46E+01 - 14L1 50.005.42E-031.27E-012.49E+004.64E+011.56E-033.17E-026.40E-011.30E+01 - 14L1 65.002.36E-034.44E-026.96E-011.04E+017.83E-041.25E-021.97E-013.15E+00 - 14L1 80.001.21E-031.92E-022.53E-013.18E+004.58E-046.03E-037.89E-021.04E+00 - 14L1 100.005.96E-047.80E-038.53E-028.88E-012.60E-042.80E-033.00E-023.23E-01 - 14L1 120.003.33E-043.74E-033.52E-023.14E-011.65E-041.51E-031.38E-021.27E-01 - 14L1 150.001.64E-041.53E-031.20E-028.90E-029.52E-057.23E-045.44E-034.11E-02 - 14L1 200.006.64E-054.88E-043.03E-031.79E-024.77E-052.87E-041.70E-031.01E-02 - 14L1 300.001.94E-051.03E-044.67E-042.03E-031.86E-058.22E-053.55E-041.53E-03 - 14L1 450.006.17E-062.39E-058.13E-052.65E-047.60E-062.54E-058.26E-052.67E-04 - 14L1 650.002.44E-067.27E-061.95E-055.05E-053.53E-069.43E-062.44E-056.24E-05 - 14L11000.009.71E-072.22E-064.68E-069.59E-061.52E-063.25E-066.70E-061.36E-05 - 14L12000.003.07E-075.07E-078.01E-071.24E-064.53E-077.31E-071.15E-061.77E-06 - 14L2 15.006.97E-031.92E+003.64E+024.74E+041.42E-031.93E-012.04E+011.90E+03 - 14L2 17.004.25E-031.01E+001.68E+021.94E+049.41E-041.14E-011.07E+018.83E+02 - 14L2 20.002.23E-034.37E-016.17E+016.10E+035.53E-045.70E-024.59E+003.27E+02 - 14L2 25.009.12E-041.39E-011.56E+011.24E+032.66E-042.21E-021.44E+008.35E+01 - 14L2 32.003.38E-043.89E-023.40E+002.14E+021.18E-047.72E-034.00E-011.84E+01 - 14L2 40.001.37E-041.24E-028.62E-014.39E+015.68E-052.99E-031.26E-014.70E+00 - 14L2 50.005.57E-053.95E-032.20E-019.05E+002.73E-051.16E-033.95E-021.20E+00 - 14L2 65.001.93E-051.03E-034.44E-021.43E+001.15E-053.81E-041.02E-022.43E-01 - 14L2 80.008.33E-063.61E-041.26E-023.35E-015.81E-061.58E-043.50E-036.93E-02 - 14L2 100.003.40E-061.17E-043.31E-037.13E-022.80E-066.19E-051.12E-031.81E-02 - 14L2 120.001.65E-064.73E-051.12E-032.04E-021.54E-062.89E-054.44E-046.11E-03 - 14L2 150.006.82E-071.58E-053.02E-044.51E-037.45E-071.14E-051.44E-041.64E-03 - 14L2 200.002.23E-073.92E-065.77E-056.70E-042.94E-073.51E-063.47E-053.09E-04 - 14L2 300.004.88E-085.89E-076.05E-065.00E-058.07E-086.89E-074.90E-063.15E-05 - 14L2 450.001.15E-089.77E-087.14E-074.30E-062.28E-081.43E-077.49E-073.56E-06 - 14L2 650.003.40E-092.13E-081.17E-075.40E-077.50E-093.62E-081.48E-075.53E-07 - 14L21000.009.22E-104.17E-091.68E-085.86E-082.15E-097.91E-092.51E-087.28E-08 - 14L22000.001.54E-104.42E-101.16E-092.78E-093.36E-108.57E-101.95E-094.11E-09 - 14L3 15.001.35E-023.61E+006.76E+028.74E+046.99E-042.49E-015.53E+017.57E+03 - 14L3 17.008.19E-031.89E+003.10E+023.56E+044.69E-041.37E-012.64E+013.20E+03 - 14L3 20.004.28E-038.12E-011.13E+021.11E+042.78E-046.33E-021.01E+011.05E+03 - 14L3 25.001.75E-032.55E-012.80E+012.22E+031.36E-042.20E-022.75E+002.29E+02 - 14L3 32.006.47E-047.06E-026.00E+003.74E+026.15E-056.93E-036.60E-014.32E+01 - 14L3 40.002.62E-042.21E-021.49E+007.49E+013.00E-052.46E-031.84E-019.69E+00 - 14L3 50.001.06E-046.93E-033.70E-011.50E+011.46E-058.79E-045.17E-022.20E+00 - 14L3 65.003.66E-051.77E-037.21E-022.27E+006.30E-062.65E-041.18E-023.92E-01 - 14L3 80.001.58E-056.05E-041.98E-025.11E-013.24E-061.04E-043.72E-031.02E-01 - 14L3 100.006.47E-061.92E-044.97E-031.04E-011.59E-063.82E-051.09E-032.41E-02 - 14L3 120.003.13E-067.54E-051.62E-032.83E-028.95E-071.70E-054.02E-047.56E-03 - 14L3 150.001.31E-062.43E-054.13E-045.84E-034.45E-076.41E-061.21E-041.86E-03 - 14L3 200.004.35E-075.78E-067.25E-057.83E-041.84E-071.86E-062.63E-053.15E-04 - 14L3 300.009.88E-088.17E-076.66E-064.93E-055.49E-083.44E-073.24E-062.76E-05 - 14L3 450.002.52E-081.30E-076.90E-073.52E-061.74E-086.91E-084.34E-072.68E-06 - 14L3 650.008.23E-092.84E-081.03E-073.81E-076.63E-091.79E-087.72E-083.59E-07 - 14L31000.002.62E-095.96E-091.45E-083.76E-082.37E-094.39E-091.21E-083.99E-08 - 14L32000.005.96E-108.42E-101.25E-092.00E-095.82E-107.29E-101.08E-091.96E-09 - 15K1 15.003.82E+002.33E+021.17E+045.66E+057.54E-014.70E+012.62E+031.45E+05 - 15K1 17.002.61E+001.45E+026.68E+032.95E+055.28E-012.92E+011.47E+037.33E+04 - 15K1 20.001.59E+007.82E+013.18E+031.25E+053.34E-011.57E+016.90E+023.02E+04 - 15K1 25.007.98E-013.30E+011.13E+033.72E+041.79E-016.80E+002.46E+028.90E+03 - 15K1 32.003.70E-011.25E+013.53E+029.51E+039.07E-022.72E+007.92E+012.31E+03 - 15K1 40.001.84E-015.18E+001.21E+022.72E+034.95E-021.20E+002.87E+016.87E+02 - 15K1 50.009.06E-022.12E+004.13E+017.68E+022.72E-025.39E-011.05E+012.06E+02 - 15K1 65.003.93E-027.38E-011.15E+011.72E+021.36E-022.12E-013.27E+005.07E+01 - 15K1 80.002.03E-023.19E-014.19E+005.24E+017.97E-031.03E-011.32E+001.70E+01 - 15K1 100.009.93E-031.30E-011.41E+001.46E+014.51E-034.79E-025.04E-015.33E+00 - 15K1 120.005.55E-036.21E-025.81E-015.18E+002.85E-032.59E-022.33E-012.10E+00 - 15K1 150.002.73E-032.53E-021.98E-011.47E+001.64E-031.24E-029.20E-026.87E-01 - 15K1 200.001.11E-038.10E-035.02E-022.96E-018.21E-044.90E-032.88E-021.69E-01 - 15K1 300.003.24E-041.71E-037.75E-033.35E-023.19E-041.40E-036.03E-032.59E-02 - 15K1 450.001.03E-043.98E-041.35E-034.40E-031.30E-044.34E-041.40E-034.51E-03 - 15K1 650.004.09E-051.22E-043.26E-048.41E-046.00E-051.61E-044.15E-041.06E-03 - 15K11000.001.63E-053.72E-057.84E-051.60E-042.58E-055.52E-051.14E-042.31E-04 - 15K12000.005.14E-068.51E-061.35E-052.09E-057.64E-061.24E-051.95E-053.01E-05 - 15K16000.001.30E-061.59E-061.94E-062.34E-061.56E-061.92E-062.34E-062.82E-06 - 15L1 15.002.64E-011.55E+017.48E+023.43E+045.73E-023.99E+002.54E+021.62E+04 - 15L1 17.001.82E-019.79E+004.33E+021.83E+044.01E-022.44E+001.38E+027.79E+03 - 15L1 20.001.12E-015.34E+002.11E+027.94E+032.53E-021.30E+006.27E+013.03E+03 - 15L1 25.005.68E-022.29E+007.65E+012.44E+031.36E-025.51E-012.15E+018.41E+02 - 15L1 32.002.66E-028.84E-012.43E+016.41E+026.87E-032.17E-016.68E+002.07E+02 - 15L1 40.001.33E-023.70E-018.51E+001.87E+023.75E-039.49E-022.36E+005.93E+01 - 15L1 50.006.63E-031.53E-012.93E+005.38E+012.06E-034.21E-028.48E-011.73E+01 - 15L1 65.002.90E-035.38E-028.30E-011.22E+011.03E-031.64E-022.60E-014.14E+00 - 15L1 80.001.50E-032.34E-023.04E-013.77E+006.02E-047.92E-031.04E-011.36E+00 - 15L1 100.007.37E-049.55E-031.03E-011.06E+003.41E-043.67E-033.92E-024.22E-01 - 15L1 120.004.13E-044.59E-034.27E-023.78E-012.15E-041.98E-031.80E-021.65E-01 - 15L1 150.002.04E-041.88E-031.46E-021.08E-011.24E-049.43E-047.09E-035.35E-02 - 15L1 200.008.30E-056.05E-043.73E-032.19E-026.20E-053.73E-042.21E-031.31E-02 - 15L1 300.002.43E-051.28E-045.79E-042.50E-032.41E-051.07E-044.60E-041.98E-03 - 15L1 450.007.77E-062.99E-051.02E-043.30E-049.80E-063.29E-051.07E-043.44E-04 - 15L1 650.003.08E-069.16E-062.45E-056.33E-054.53E-061.22E-053.15E-058.05E-05 - 15L11000.001.23E-062.80E-065.91E-061.21E-051.94E-064.17E-068.62E-061.75E-05 - 15L12000.003.87E-076.42E-071.02E-061.58E-065.76E-079.35E-071.47E-062.28E-06 - 15L2 15.009.84E-032.80E+005.35E+026.92E+042.09E-032.85E-012.98E+012.75E+03 - 15L2 17.006.02E-031.47E+002.47E+022.84E+041.39E-031.68E-011.56E+011.28E+03 - 15L2 20.003.17E-036.40E-019.08E+018.94E+038.20E-048.44E-026.75E+004.77E+02 - 15L2 25.001.31E-032.04E-012.30E+011.83E+033.96E-043.28E-022.13E+001.22E+02 - 15L2 32.004.87E-045.73E-025.03E+003.16E+021.76E-041.15E-025.92E-012.71E+01 - 15L2 40.001.99E-041.83E-021.28E+006.50E+018.49E-054.46E-031.87E-016.94E+00 - 15L2 50.008.09E-055.84E-033.27E-011.34E+014.08E-051.73E-035.88E-021.78E+00 - 15L2 65.002.81E-051.54E-036.62E-022.13E+001.73E-055.71E-041.52E-023.62E-01 - 15L2 80.001.22E-055.38E-041.89E-025.00E-018.74E-062.38E-045.24E-031.03E-01 - 15L2 100.005.01E-061.75E-044.96E-031.07E-014.21E-069.32E-051.68E-032.71E-02 - 15L2 120.002.43E-067.08E-051.68E-033.07E-022.32E-064.36E-056.67E-049.16E-03 - 15L2 150.001.01E-062.36E-054.55E-046.79E-031.13E-061.73E-052.18E-042.46E-03 - 15L2 200.003.32E-075.89E-068.70E-051.01E-034.45E-075.32E-065.25E-054.65E-04 - 15L2 300.007.28E-088.88E-079.15E-067.57E-051.22E-071.05E-067.44E-064.76E-05 - 15L2 450.001.73E-081.48E-071.08E-066.53E-063.47E-082.17E-071.14E-065.42E-06 - 15L2 650.005.11E-093.23E-081.78E-078.21E-071.14E-085.52E-082.26E-078.42E-07 - 15L21000.001.39E-096.33E-092.55E-088.94E-083.27E-091.21E-083.83E-081.11E-07 - 15L22000.002.32E-106.70E-101.77E-094.25E-095.11E-101.31E-092.98E-096.30E-09 - 15L3 15.001.89E-025.25E+009.88E+021.27E+051.02E-033.95E-018.97E+011.23E+04 - 15L3 17.001.16E-022.75E+004.54E+025.18E+046.82E-042.17E-014.26E+015.17E+03 - 15L3 20.006.07E-031.18E+001.65E+021.61E+044.06E-049.97E-021.63E+011.69E+03 - 15L3 25.002.49E-033.73E-014.12E+013.25E+031.99E-043.46E-024.41E+003.67E+02 - 15L3 32.009.27E-041.04E-018.84E+005.50E+029.02E-051.08E-021.05E+006.89E+01 - 15L3 40.003.77E-043.25E-022.20E+001.10E+024.41E-053.82E-032.91E-011.54E+01 - 15L3 50.001.53E-041.02E-025.47E-012.21E+012.15E-051.36E-038.15E-023.48E+00 - 15L3 65.005.32E-052.62E-031.07E-013.36E+009.29E-064.10E-041.85E-026.17E-01 - 15L3 80.002.31E-058.95E-042.94E-027.58E-014.79E-061.60E-045.82E-031.59E-01 - 15L3 100.009.46E-062.84E-047.40E-031.54E-012.36E-065.86E-051.69E-033.77E-02 - 15L3 120.004.60E-061.12E-042.41E-034.21E-021.33E-062.61E-056.25E-041.18E-02 - 15L3 150.001.92E-063.61E-056.16E-048.71E-036.61E-079.79E-061.87E-042.89E-03 - 15L3 200.006.41E-078.61E-061.08E-041.17E-032.73E-072.83E-064.06E-054.87E-04 - 15L3 300.001.46E-071.22E-069.98E-067.38E-058.16E-085.21E-074.98E-064.26E-05 - 15L3 450.003.73E-081.94E-071.03E-065.28E-062.60E-081.04E-076.64E-074.12E-06 - 15L3 650.001.22E-084.24E-081.55E-075.72E-079.86E-092.70E-081.18E-075.50E-07 - 15L31000.003.90E-098.89E-092.18E-085.64E-083.52E-096.57E-091.83E-086.08E-08 - 15L32000.008.85E-101.25E-091.87E-092.99E-098.64E-101.08E-091.62E-092.96E-09 - 16K1 15.004.37E+002.56E+021.24E+045.75E+059.68E-016.03E+013.28E+031.76E+05 - 16K1 17.002.99E+001.61E+027.13E+033.04E+056.77E-013.73E+011.84E+038.95E+04 - 16K1 20.001.83E+008.73E+013.44E+031.31E+054.26E-012.01E+018.65E+023.70E+04 - 16K1 25.009.22E-013.72E+011.24E+033.97E+042.28E-018.65E+003.08E+021.10E+04 - 16K1 32.004.29E-011.42E+013.92E+021.03E+041.15E-013.45E+009.91E+012.85E+03 - 16K1 40.002.14E-015.92E+001.36E+022.99E+036.25E-021.52E+003.58E+018.49E+02 - 16K1 50.001.06E-012.44E+004.67E+018.55E+023.43E-026.76E-011.31E+012.55E+02 - 16K1 65.004.61E-028.55E-011.32E+011.94E+021.71E-022.66E-014.07E+006.27E+01 - 16K1 80.002.38E-023.71E-014.81E+005.94E+019.96E-031.28E-011.64E+002.10E+01 - 16K1 100.001.17E-021.51E-011.63E+001.67E+015.62E-035.95E-026.24E-016.57E+00 - 16K1 120.006.56E-037.27E-026.74E-015.95E+003.55E-033.21E-022.88E-012.59E+00 - 16K1 150.003.24E-032.98E-022.31E-011.70E+002.04E-031.53E-021.14E-018.45E-01 - 16K1 200.001.32E-039.57E-035.89E-023.44E-011.02E-036.06E-033.55E-022.08E-01 - 16K1 300.003.87E-042.03E-039.15E-033.94E-023.93E-041.73E-037.42E-033.17E-02 - 16K1 450.001.24E-044.75E-041.61E-035.21E-031.59E-045.33E-041.72E-035.53E-03 - 16K1 650.004.91E-051.46E-043.89E-041.00E-037.33E-051.97E-045.08E-041.30E-03 - 16K11000.001.96E-054.47E-059.42E-051.93E-043.14E-056.75E-051.39E-042.83E-04 - 16K12000.006.17E-061.03E-051.63E-052.53E-059.24E-061.51E-052.37E-053.68E-05 - 16K16000.001.55E-061.91E-062.33E-062.83E-061.88E-062.32E-062.83E-063.42E-06 - 16L1 15.003.08E-011.74E+018.00E+023.49E+047.59E-025.37E+003.42E+022.16E+04 - 16L1 17.002.13E-011.11E+014.69E+021.89E+045.31E-023.28E+001.85E+021.04E+04 - 16L1 20.001.32E-016.09E+002.31E+028.38E+033.34E-021.73E+008.36E+014.03E+03 - 16L1 25.006.73E-022.64E+008.54E+012.64E+031.79E-027.31E-012.85E+011.11E+03 - 16L1 32.003.17E-021.03E+002.76E+017.08E+029.00E-032.86E-018.80E+002.72E+02 - 16L1 40.001.59E-024.33E-019.75E+002.10E+024.89E-031.24E-013.09E+007.75E+01 - 16L1 50.007.96E-031.81E-013.40E+006.11E+012.68E-035.49E-021.11E+002.24E+01 - 16L1 65.003.50E-036.39E-029.72E-011.41E+011.34E-032.13E-023.37E-015.36E+00 - 16L1 80.001.82E-032.80E-023.59E-014.38E+007.77E-041.02E-021.34E-011.76E+00 - 16L1 100.008.96E-041.15E-021.22E-011.24E+004.38E-044.73E-035.05E-025.42E-01 - 16L1 120.005.04E-045.54E-035.10E-024.46E-012.77E-042.54E-032.31E-022.11E-01 - 16L1 150.002.49E-042.28E-031.75E-021.28E-011.59E-041.21E-039.07E-036.83E-02 - 16L1 200.001.02E-047.36E-044.51E-032.62E-027.91E-054.76E-042.81E-031.67E-02 - 16L1 300.003.00E-051.57E-047.05E-043.03E-033.06E-051.36E-045.85E-042.52E-03 - 16L1 450.009.60E-063.69E-051.25E-044.03E-041.24E-054.17E-051.35E-044.36E-04 - 16L1 650.003.82E-061.13E-053.03E-057.79E-055.72E-061.54E-053.99E-051.02E-04 - 16L11000.001.52E-063.48E-067.34E-061.50E-052.44E-065.27E-061.09E-052.22E-05 - 16L12000.004.80E-077.99E-071.27E-061.97E-067.20E-071.17E-061.85E-062.87E-06 - 16L2 15.001.34E-023.96E+007.61E+029.79E+043.00E-034.08E-014.23E+013.87E+03 - 16L2 17.008.25E-032.09E+003.52E+024.03E+042.00E-032.41E-012.22E+011.81E+03 - 16L2 20.004.36E-039.08E-011.30E+021.27E+041.18E-031.21E-019.62E+006.75E+02 - 16L2 25.001.81E-032.89E-013.29E+012.61E+035.70E-044.71E-023.04E+001.74E+02 - 16L2 32.006.78E-048.18E-027.22E+004.52E+022.55E-041.66E-028.50E-013.86E+01 - 16L2 40.002.78E-042.61E-021.84E+009.33E+011.23E-046.45E-032.68E-019.93E+00 - 16L2 50.001.14E-048.38E-034.71E-011.93E+015.92E-052.51E-038.49E-022.56E+00 - 16L2 65.003.98E-052.21E-039.57E-023.07E+002.51E-058.29E-042.20E-025.22E-01 - 16L2 80.001.74E-057.75E-042.73E-027.23E-011.27E-053.46E-047.61E-031.49E-01 - 16L2 100.007.14E-062.53E-047.20E-031.55E-016.14E-061.36E-042.44E-033.92E-02 - 16L2 120.003.47E-061.03E-042.44E-034.45E-023.39E-066.36E-059.72E-041.33E-02 - 16L2 150.001.45E-063.43E-056.62E-049.88E-031.65E-062.53E-053.18E-043.58E-03 - 16L2 200.004.78E-078.58E-061.27E-041.47E-036.52E-077.80E-067.68E-056.79E-04 - 16L2 300.001.05E-071.30E-061.34E-051.11E-041.80E-071.54E-061.09E-056.98E-05 - 16L2 450.002.51E-082.16E-071.59E-069.59E-065.11E-083.20E-071.68E-067.97E-06 - 16L2 650.007.43E-094.74E-082.62E-071.21E-061.68E-088.16E-083.34E-071.24E-06 - 16L21000.002.02E-099.30E-093.77E-081.32E-074.83E-091.79E-085.67E-081.65E-07 - 16L22000.003.38E-109.83E-102.61E-096.29E-097.52E-101.94E-094.42E-099.34E-09 - 16L3 15.002.58E-027.39E+001.40E+031.79E+051.43E-036.06E-011.41E+021.93E+04 - 16L3 17.001.58E-023.87E+006.44E+027.32E+049.62E-043.32E-016.68E+018.09E+03 - 16L3 20.008.33E-031.67E+002.35E+022.28E+045.74E-041.52E-012.54E+012.63E+03 - 16L3 25.003.44E-035.28E-015.86E+014.61E+032.82E-045.26E-026.83E+005.70E+02 - 16L3 32.001.29E-031.47E-011.26E+017.82E+021.28E-041.64E-021.62E+001.06E+02 - 16L3 40.005.26E-044.62E-023.15E+001.57E+026.27E-055.76E-034.46E-012.36E+01 - 16L3 50.002.15E-041.46E-027.84E-013.17E+013.07E-052.04E-031.24E-015.32E+00 - 16L3 65.007.49E-053.74E-031.54E-014.82E+001.33E-056.12E-042.82E-029.39E-01 - 16L3 80.003.26E-051.28E-034.24E-021.09E+006.85E-062.38E-048.80E-032.41E-01 - 16L3 100.001.34E-054.08E-041.07E-022.22E-013.38E-068.71E-052.56E-035.70E-02 - 16L3 120.006.53E-061.61E-043.48E-036.07E-021.90E-063.87E-059.41E-041.78E-02 - 16L3 150.002.74E-065.20E-058.90E-041.26E-029.49E-071.45E-052.81E-044.35E-03 - 16L3 200.009.16E-071.24E-051.57E-041.69E-033.93E-074.17E-066.06E-057.31E-04 - 16L3 300.002.10E-071.76E-061.45E-051.07E-041.18E-077.64E-077.41E-066.37E-05 - 16L3 450.005.37E-082.81E-071.50E-067.67E-063.74E-081.52E-079.83E-076.14E-06 - 16L3 650.001.76E-086.13E-082.25E-078.32E-071.42E-083.92E-081.73E-078.16E-07 - 16L31000.005.61E-091.29E-083.16E-088.19E-085.06E-099.51E-092.67E-088.99E-08 - 16L32000.001.27E-091.81E-092.70E-094.34E-091.24E-091.56E-092.34E-094.32E-09 - 17K1 15.004.94E+002.79E+021.29E+045.73E+051.23E+007.64E+014.04E+032.10E+05 - 17K1 17.003.40E+001.76E+027.50E+033.08E+058.56E-014.71E+012.27E+031.07E+05 - 17K1 20.002.08E+009.63E+013.67E+031.35E+055.38E-012.53E+011.07E+034.47E+04 - 17K1 25.001.05E+004.14E+011.34E+034.18E+042.86E+011.09E+013.81E+021.33E+04 - 17K1 32.004.93E-011.60E+014.29E+021.11E+041.44E-014.31E+001.22E+023.48E+03 - 17K1 40.002.46E-016.69E+001.51E+023.25E+037.80E-021.89E+004.42E+011.04E+03 - 17K1 50.001.22E-012.78E+005.22E+019.39E+024.26E-028.39E-011.61E+013.11E+02 - 17K1 65.005.35E-029.78E-011.48E+012.15E+022.12E-023.28E-015.00E+007.65E+01 - 17K1 80.002.77E-024.27E-015.46E+006.66E+011.23E-021.58E-012.01E+002.56E+01 - 17K1 100.001.37E-021.75E-011.86E+001.89E+016.92E-037.32E-027.63E-018.01E+00 - 17K1 120.007.67E-038.42E-027.73E-016.75E+004.36E-033.94E-023.52E-013.15E+00 - 17K1 150.003.80E-033.47E-022.66E-011.94E+002.50E-031.88E-021.39E-011.03E+00 - 17K1 200.001.55E-031.12E-026.82E-023.96E-011.24E-037.40E-034.32E-022.53E-01 - 17K1 300.004.57E-042.38E-031.07E-024.57E-024.78E-042.11E-039.02E-033.85E-02 - 17K1 450.001.46E-045.60E-041.89E-036.10E-031.93E-046.47E-042.09E-036.70E-03 - 17K1 650.005.83E-051.73E-044.60E-041.18E-038.86E-052.38E-046.16E-041.57E-03 - 17K11000.002.33E-055.32E-051.12E-042.29E-043.78E-058.16E-051.69E-043.43E-04 - 17K12000.007.32E-061.22E-051.94E-053.02E-051.11E-051.81E-052.86E-054.44E-05 - 17K16000.001.84E-062.27E-062.78E-063.37E-062.23E-062.76E-063.38E-064.10E-06 - 17L1 15.003.54E-011.92E+018.40E+023.45E+049.90E-027.12E+004.53E+022.85E+04 - 17L1 17.002.46E-011.23E+014.99E+021.92E+046.91E-024.33E+002.44E+021.36E+04 - 17L1 20.001.53E-016.82E+002.49E+028.67E+034.34E-022.28E+001.10E+025.27E+03 - 17L1 25.007.85E-022.99E+009.36E+012.80E+032.31E-029.56E-013.72E+011.45E+03 - 17L1 32.003.72E-021.18E+003.08E+017.68E+021.16E-023.72E-011.14E+013.52E+02 - 17L1 40.001.88E-025.00E-011.10E+012.31E+026.28E-031.61E-013.99E+009.97E+01 - 17L1 50.009.42E-032.10E-013.87E+006.83E+013.43E-037.05E-021.42E+002.87E+01 - 17L1 65.004.16E-037.49E-021.12E+001.60E+011.70E-032.72E-024.30E-016.82E+00 - 17L1 80.002.17E-033.29E-024.16E-015.01E+009.88E-041.30E-021.70E-012.23E+00 - 17L1 100.001.07E-031.36E-021.43E-011.44E+005.55E-045.99E-036.39E-026.86E-01 - 17L1 120.006.04E-046.58E-035.99E-025.18E-013.50E-043.22E-032.92E-022.67E-01 - 17L1 150.003.00E-042.72E-032.07E-021.50E-012.00E-041.52E-031.14E-028.60E-02 - 17L1 200.001.23E-048.82E-045.36E-033.09E-029.95E-055.99E-043.54E-032.09E-02 - 17L1 300.003.64E-051.89E-048.45E-043.60E-033.84E-051.70E-047.33E-043.15E-03 - 17L1 450.001.17E-054.47E-051.50E-044.85E-041.55E-055.21E-051.69E-045.45E-04 - 17L1 650.004.66E-061.38E-053.67E-059.43E-057.11E-061.92E-054.97E-051.27E-04 - 17L11000.001.86E-064.26E-068.96E-061.83E-053.03E-066.55E-061.36E-052.76E-05 - 17L12000.005.86E-079.78E-071.56E-062.42E-068.86E-071.45E-062.30E-063.57E-06 - 17L2 15.001.79E-025.45E+001.05E+031.35E+054.19E-035.69E-015.85E+015.29E+03 - 17L2 17.001.10E-022.88E+004.89E+025.56E+042.79E-033.36E-013.08E+012.48E+03 - 17L2 20.005.85E-031.25E+001.80E+021.76E+041.65E-031.69E-011.33E+019.28E+02 - 17L2 25.002.44E-034.01E-014.58E+013.62E+038.00E-046.60E-024.23E+002.40E+02 - 17L2 32.009.21E-041.14E-011.01E+016.30E+023.58E-042.33E-021.19E+005.36E+01 - 17L2 40.003.80E-043.64E-022.57E+001.30E+021.73E-049.07E-033.76E-011.38E+01 - 17L2 50.001.56E-041.17E-026.61E-012.71E+018.35E-053.54E-031.19E-013.57E+00 - 17L2 65.005.48E-053.10E-031.35E-014.31E+003.55E-051.17E-033.10E-027.31E-01 - 17L2 80.002.40E-051.09E-033.85E-021.02E+001.80E-054.90E-041.07E-022.10E-01 - 17L2 100.009.90E-063.57E-041.02E-022.18E-018.72E-061.93E-043.46E-035.53E-02 - 17L2 120.004.83E-061.44E-043.46E-036.30E-024.83E-069.04E-051.38E-031.88E-02 - 17L2 150.002.02E-064.84E-059.39E-041.40E-022.35E-063.60E-054.51E-045.07E-03 - 17L2 200.006.70E-071.21E-051.81E-042.09E-039.31E-071.11E-051.09E-049.65E-04 - 17L2 300.001.48E-071.84E-061.91E-051.58E-042.58E-072.20E-061.56E-059.96E-05 - 17L2 450.003.54E-083.08E-072.28E-061.37E-057.32E-084.59E-072.41E-061.14E-05 - 17L2 650.001.05E-086.76E-083.75E-071.74E-062.42E-081.17E-074.80E-071.78E-06 - 17L21000.002.87E-091.33E-085.41E-081.90E-076.92E-092.58E-088.18E-082.37E-07 - 17L22000.004.79E-101.41E-093.74E-099.05E-091.08E-092.79E-096.38E-091.35E-08 - 17L3 15.003.42E-021.01E+011.93E+032.46E+051.97E-039.05E-012.16E+022.95E+04 - 17L3 17.002.10E-025.32E+008.90E+021.01E+051.32E-034.94E-011.02E+021.23E+04 - 17L3 20.001.11E-022.30E+003.25E+023.15E+047.90E-042.26E-013.86E+013.99E+03 - 17L3 25.004.63E-037.28E-018.13E+016.37E+033.89E-047.78E-021.03E+018.60E+02 - 17L3 32.001.74E-032.03E-011.75E+011.08E+031.77E-042.41E-022.43E+001.59E+02 - 17L3 40.007.14E-046.41E-024.38E+002.19E+028.68E-058.46E-036.66E-013.53E+01 - 17L3 50.002.93E-042.02E-021.09E+004.41E+014.26E-052.99E-031.85E-017.91E+00 - 17L3 65.001.03E-045.21E-032.15E-016.72E+001.85E-058.91E-044.17E-021.39E+00 - 17L3 80.004.48E-051.79E-035.93E-021.52E+009.54E-063.45E-041.30E-023.57E-01 - 17L3 100.001.85E-055.70E-041.50E-023.10E-014.71E-061.26E-043.75E-038.40E-02 - 17L3 120.009.03E-062.25E-044.88E-038.52E-022.66E-065.58E-051.38E-032.61E-02 - 17L3 150.003.80E-067.29E-051.25E-031.77E-021.33E-062.08E-054.10E-046.37E-03 - 17L3 200.001.27E-061.74E-052.21E-042.38E-035.50E-075.99E-068.83E-051.07E-03 - 17L3 300.002.93E-072.48E-062.04E-051.51E-041.65E-071.09E-061.07E-059.26E-05 - 17L3 450.007.50E-083.95E-072.12E-061.08E-055.25E-082.17E-071.42E-068.90E-06 - 17L3 650.002.46E-088.63E-083.18E-071.18E-061.99E-085.55E-082.49E-071.18E-06 - 17L31000.007.85E-091.81E-084.46E-081.16E-077.09E-091.34E-083.81E-081.29E-07 - 17L32000.001.78E-092.53E-093.80E-096.11E-091.74E-092.19E-093.30E-096.13E-09 - 18K1 15.005.53E+002.99E+021.32E+045.60E+051.54E+009.56E+014.91E+032.46E+05 - 18K1 17.003.81E+001.91E+027.78E+033.07E+051.07E+005.89E+012.76E+031.27E+05 - 18K1 20.002.34E+001.05E+023.86E+031.37E+056.71E-013.15E+011.30E+035.31E+04 - 18K1 25.001.19E+004.55E+011.43E+034.34E+043.56E-011.35E+014.65E+021.59E+04 - 18K1 32.005.60E-011.78E+014.65E+021.17E+041.78E-015.33E+001.49E+024.18E+03 - 18K1 40.002.81E-017.48E+001.65E+023.49E+039.63E-022.33E+005.39E+011.25E+03 - 18K1 50.001.40E-013.12E+005.77E+011.02E+035.24E-021.03E+001.96E+013.75E+02 - 18K1 65.006.15E-021.11E+001.66E+012.36E+022.60E-024.02E-016.07E+009.23E+01 - 18K1 80.003.19E-024.85E-016.13E+007.38E+011.50E-021.93E-012.43E+003.08E+01 - 18K1 100.001.58E-022.00E-012.10E+002.11E+018.44E-038.91E-029.25E-019.65E+00 - 18K1 120.008.88E-039.66E-028.77E-017.58E+005.30E-034.79E-024.25E-013.79E+00 - 18K1 150.004.41E-033.99E-023.03E-012.19E+003.03E-032.27E-021.67E-011.24E+00 - 18K1 200.001.80E-031.29E-027.82E-024.50E-011.50E-038.94E-035.21E-023.04E-01 - 18K1 300.005.34E-042.76E-031.23E-025.24E-025.77E-042.54E-031.09E-024.62E-02 - 18K1 450.001.72E-046.54E-042.20E-037.06E-032.32E-047.78E-042.51E-038.04E-03 - 18K1 650.006.85E-052.03E-045.38E-041.38E-031.06E-042.86E-047.39E-041.88E-03 - 18K11000.002.73E-056.26E-051.32E-042.69E-044.50E-059.76E-052.02E-044.10E-04 - 18K12000.008.60E-061.44E-052.30E-053.57E-051.31E-052.16E-053.42E-055.31E-05 - 18K16000.002.15E-062.67E-063.27E-063.98E-062.61E-063.25E-064.00E-064.86E-06 - 18L1 15.004.03E-012.09E+018.64E+023.34E+041.27E-019.32E+005.91E+023.70E+04 - 18L1 17.002.81E-011.35E+015.21E+021.89E+048.86E-025.64E+003.17E+021.77E+04 - 18L1 20.001.75E-017.53E+002.64E+028.78E+035.56E-022.96E+001.42E+026.80E+03 - 18L1 25.009.03E-023.34E+001.01E+022.91E+032.95E-021.23E+004.78E+011.86E+03 - 18L1 32.004.30E-021.33E+003.37E+018.18E+021.47E-024.76E-011.46E+014.49E+02 - 18L1 40.002.18E-025.69E-011.22E+012.51E+027.95E-032.05E-015.08E+001.27E+02 - 18L1 50.001.10E-022.41E-014.35E+007.51E+014.33E-038.94E-021.80E+003.64E+01 - 18L1 65.004.87E-038.64E-021.27E+001.78E+012.14E-033.44E-025.42E-018.59E+00 - 18L1 80.002.55E-033.82E-024.76E-015.64E+001.24E-031.64E-022.13E-012.80E+00 - 18L1 100.001.27E-031.58E-021.65E-011.63E+006.95E-047.51E-038.00E-028.57E-01 - 18L1 120.007.15E-047.71E-036.93E-025.93E-014.36E-044.02E-033.64E-023.32E-01 - 18L1 150.003.56E-043.20E-032.41E-021.73E-012.49E-041.90E-031.42E-021.07E-01 - 18L1 200.001.46E-041.04E-036.28E-033.60E-021.23E-047.43E-044.39E-032.59E-02 - 18L1 300.004.35E-052.25E-049.99E-044.23E-034.74E-052.10E-049.07E-043.89E-03 - 18L1 450.001.40E-055.34E-051.79E-045.74E-041.91E-056.43E-052.09E-046.72E-04 - 18L1 650.005.61E-061.66E-054.40E-051.13E-048.72E-062.36E-056.12E-051.57E-04 - 18L11000.002.24E-065.14E-061.08E-052.21E-053.70E-068.04E-061.67E-053.40E-05 - 18L12000.007.05E-071.18E-061.89E-062.94E-061.08E-061.77E-062.81E-064.37E-06 - 18L2 15.002.33E-027.34E+001.43E+031.81E+055.71E-037.74E-017.88E+017.06E+03 - 18L2 17.001.44E-023.88E+006.62E+027.49E+043.82E-034.58E-014.16E+013.32E+03 - 18L2 20.007.68E-031.69E+002.45E+022.37E+042.26E-032.31E-011.81E+011.25E+03 - 18L2 25.003.22E-035.43E-016.23E+014.90E+031.10E-039.03E-025.75E+003.23E+02 - 18L2 32.001.22E-031.54E-011.37E+018.56E+024.92E-043.19E-021.62E+007.26E+01 - 18L2 40.005.06E-044.95E-023.52E+001.78E+022.38E-041.25E-025.14E-011.88E+01 - 18L2 50.002.09E-041.60E-029.05E-013.70E+011.15E-044.87E-031.63E-014.87E+00 - 18L2 65.007.37E-054.24E-031.85E-015.91E+004.91E-051.62E-034.26E-021.00E+00 - 18L2 80.003.24E-051.49E-035.31E-021.40E+002.50E-056.78E-041.48E-022.88E-01 - 18L2 100.001.34E-054.90E-041.40E-023.01E-011.21E-052.67E-044.77E-037.62E-02 - 18L2 120.006.56E-061.99E-044.78E-038.69E-026.70E-061.25E-041.91E-032.59E-02 - 18L2 150.002.75E-066.68E-051.30E-031.94E-023.26E-065.01E-056.26E-047.02E-03 - 18L2 200.009.16E-071.68E-052.51E-042.91E-031.30E-061.55E-051.52E-041.34E-03 - 18L2 300.002.04E-072.56E-062.66E-052.20E-043.60E-073.08E-062.18E-051.39E-04 - 18L2 450.004.88E-084.29E-073.18E-061.92E-051.02E-076.44E-073.37E-061.59E-05 - 18L2 650.001.46E-089.43E-085.25E-072.43E-063.39E-081.65E-076.74E-072.50E-06 - 18L21000.003.97E-091.85E-087.59E-082.67E-079.71E-093.62E-081.15E-073.33E-07 - 18L22000.006.63E-101.96E-095.25E-091.27E-081.51E-093.93E-098.99E-091.90E-08 - 18L3 15.004.43E-021.36E+012.61E+033.29E+052.64E-031.32E+003.21E+024.39E+04 - 18L3 17.002.73E-027.15E+001.20E+031.35E+051.78E-037.18E-011.51E+021.83E+04 - 18L3 20.001.46E-023.10E+004.39E+024.23E+041.06E-033.28E-015.71E+015.91E+03 - 18L3 25.006.08E-039.81E-011.10E+028.58E+035.24E-041.12E-011.52E+011.27E+03 - 18L3 32.002.30E-032.75E-012.38E+011.47E+032.39E-043.47E-023.55E+002.34E+02 - 18L3 40.009.48E-048.68E-025.96E+002.96E+021.17E-041.21E-029.70E-015.14E+01 - 18L3 50.003.90E-042.74E-021.49E+005.99E+015.77E-054.27E-032.68E-011.15E+01 - 18L3 65.001.37E-047.09E-032.93E-019.16E+002.51E-051.27E-036.01E-022.01E+00 - 18L3 80.006.01E-052.44E-038.11E-022.08E+001.30E-054.90E-041.87E-025.14E-01 - 18L3 100.002.49E-057.77E-042.05E-024.25E-016.42E-061.78E-045.38E-031.21E-01 - 18L3 120.001.22E-053.07E-046.69E-031.17E-013.63E-067.87E-051.97E-033.74E-02 - 18L3 150.005.14E-069.97E-051.72E-032.42E-021.81E-062.93E-055.85E-049.11E-03 - 18L3 200.001.73E-062.39E-053.04E-043.27E-037.52E-078.40E-061.25E-041.52E-03 - 18L3 300.003.99E-073.40E-062.81E-052.08E-042.26E-071.52E-061.52E-051.32E-04 - 18L3 450.001.02E-075.43E-072.92E-061.50E-057.18E-083.01E-072.00E-061.26E-05 - 18L3 650.003.36E-081.19E-074.38E-071.62E-062.73E-087.68E-083.49E-071.66E-06 - 18L31000.001.07E-082.48E-086.14E-081.60E-079.70E-091.85E-085.31E-081.81E-07 - 18L32000.002.43E-093.47E-095.21E-098.41E-092.37E-093.00E-094.54E-098.51E-09 - 19K1 15.006.15E+003.18E+021.33E+045.40E+051.91E+001.18E+025.89E+032.84E+05 - 19K1 17.004.25E+002.04E+027.98E+033.01E+051.33E+007.29E+013.32E+031.48E+05 - 19K1 20.002.62E+001.13E+024.01E+031.37E+058.30E-013.89E+011.57E+036.24E+04 - 19K1 25.001.34E+004.97E+011.51E+034.45E+044.39E-011.66E+015.62E+021.89E+04 - 19K1 32.006.31E-011.95E+014.99E+021.23E+042.19E-016.53E+001.81E+024.98E+03 - 19K1 40.003.17E-018.29E+001.79E+023.70E+031.18E-012.85E+006.51E+011.49E+03 - 19K1 50.001.59E-013.48E+006.32E+011.10E+036.40E-021.26E+002.37E+014.48E+02 - 19K1 65.007.00E-021.24E+001.83E+012.57E+023.16E-024.88E-017.32E+001.10E+02 - 19K1 80.003.65E-025.47E-016.81E+008.09E+011.82E-022.34E-012.93E+003.69E+01 - 19K1 100.001.81E-022.26E-012.35E+002.33E+011.02E-021.08E-011.11E+001.15E+01 - 19K1 120.001.02E-021.10E-019.85E-018.43E+006.40E-035.77E-025.10E-014.53E+00 - 19K1 150.005.07E-034.54E-023.42E-012.45E+003.65E-032.73E-022.01E-011.48E+00 - 19K1 200.002.08E-031.48E-028.88E-025.08E-011.80E-031.07E-026.23E-023.62E-01 - 19K1 300.006.18E-043.18E-031.41E-025.96E-026.89E-043.04E-031.30E-025.51E-02 - 19K1 450.001.99E-047.57E-042.53E-038.10E-032.76E-049.28E-042.99E-039.57E-03 - 19K1 650.007.97E-052.35E-046.23E-041.59E-031.26E-043.41E-048.80E-042.24E-03 - 19K11000.003.19E-057.30E-051.53E-043.13E-045.31E-051.16E-042.40E-044.87E-04 - 19K12000.001.00E-051.68E-052.69E-054.19E-051.54E-052.54E-054.04E-056.29E-05 - 19K16000.002.49E-063.10E-063.82E-064.66E-063.04E-063.80E-064.68E-065.71E-06 - 19L1 15.004.53E-012.24E+018.76E+023.15E+041.61E-011.20E+017.62E+024.75E+04 - 19L1 17.003.16E-011.46E+015.36E+021.84E+041.12E-017.26E+004.08E+022.26E+04 - 19L1 20.001.98E-018.23E+002.76E+028.75E+037.03E-023.79E+001.82E+028.68E+03 - 19L1 25.001.03E-013.68E+001.08E+022.99E+033.72E-021.57E+006.09E+012.36E+03 - 19L1 32.004.93E-021.48E+003.66E+018.60E+021.85E-026.04E-011.85E+015.67E+02 - 19L1 40.002.51E-026.39E-011.34E+012.69E+029.96E-032.58E-016.40E+001.59E+02 - 19L1 50.001.27E-022.72E-014.83E+008.16E+015.40E-031.12E-012.25E+004.55E+01 - 19L1 65.005.65E-039.87E-021.43E+001.96E+012.66E-034.29E-026.75E-011.07E+01 - 19L1 80.002.97E-034.38E-025.38E-016.28E+001.54E-032.04E-022.65E-013.47E+00 - 19L1 100.001.48E-031.83E-021.88E-011.83E+008.59E-049.30E-039.90E-021.06E+00 - 19L1 120.008.37E-048.92E-037.93E-026.71E-015.38E-044.97E-034.50E-024.10E-01 - 19L1 150.004.18E-043.72E-032.78E-021.97E-013.07E-042.34E-031.75E-021.31E-01 - 19L1 200.001.73E-041.22E-037.28E-034.13E-021.51E-049.13E-045.38E-033.18E-02 - 19L1 300.005.15E-052.64E-041.17E-034.92E-035.80E-052.58E-041.11E-034.76E-03 - 19L1 450.001.67E-056.32E-052.11E-046.73E-042.32E-057.85E-052.55E-048.19E-04 - 19L1 650.006.68E-061.97E-055.21E-051.33E-041.06E-052.88E-057.46E-051.91E-04 - 19L11000.002.67E-066.13E-061.29E-052.63E-054.47E-069.75E-062.03E-054.13E-05 - 19L12000.008.39E-071.41E-062.26E-063.52E-061.29E-062.14E-063.40E-065.30E-06 - 19L2 15.002.97E-029.70E+001.90E+032.40E+057.65E-031.03E+001.04E+029.26E+03 - 19L2 17.001.84E-025.13E+008.82E+029.91E+045.11E-036.12E-015.52E+014.37E+03 - 19L2 20.009.87E-032.24E+003.26E+023.15E+043.03E-033.10E-012.40E+011.64E+03 - 19L2 25.004.16E-037.21E-018.32E+016.52E+031.47E-031.21E-017.67E+004.28E+02 - 19L2 32.001.59E-032.05E-011.84E+011.14E+036.63E-044.30E-022.16E+009.65E+01 - 19L2 40.006.61E-046.62E-024.72E+002.38E+023.22E-041.68E-026.89E-012.51E+01 - 19L2 50.002.74E-042.14E-021.22E+004.97E+011.56E-046.58E-032.20E-016.52E+00 - 19L2 65.009.73E-055.68E-032.49E-017.96E+006.65E-052.19E-035.75E-021.34E+00 - 19L2 80.004.29E-052.01E-037.17E-021.89E+003.39E-059.20E-042.00E-023.88E-01 - 19L2 100.001.78E-056.61E-041.90E-024.07E-011.65E-053.63E-046.47E-031.03E-01 - 19L2 120.008.74E-062.69E-046.48E-031.18E-019.13E-061.71E-042.59E-033.51E-02 - 19L2 150.003.68E-069.04E-051.77E-032.63E-024.45E-066.83E-058.52E-049.52E-03 - 19L2 200.001.23E-062.28E-053.41E-043.96E-031.77E-062.12E-052.08E-041.82E-03 - 19L2 300.002.74E-073.48E-063.64E-053.01E-044.93E-074.22E-062.98E-051.90E-04 - 19L2 450.006.61E-085.85E-074.36E-062.63E-051.41E-078.85E-074.63E-062.19E-05 - 19L2 650.001.97E-081.29E-077.20E-073.34E-064.65E-082.27E-079.28E-073.44E-06 - 19L21000.005.39E-092.54E-081.04E-073.67E-071.34E-084.99E-081.59E-074.59E-07 - 19L22000.009.00E-102.69E-097.23E-091.76E-082.07E-095.42E-091.24E-082.63E-08 - 19L3 15.005.64E-021.79E+013.45E+034.33E+053.47E-031.88E+004.70E+026.42E+04 - 19L3 17.003.49E-029.42E+001.59E+031.78E+052.34E-031.02E+002.20E+022.67E+04 - 19L3 20.001.86E-024.09E+005.83E+025.59E+041.40E-034.66E-018.30E+018.58E+03 - 19L3 25.007.82E-031.30E+001.46E+021.14E+046.92E-041.59E-012.19E+011.83E+03 - 19L3 32.002.97E-033.64E-013.17E+011.95E+033.17E-044.90E-025.11E+003.36E+02 - 19L3 40.001.23E-031.15E-017.95E+003.94E+021.56E-041.70E-021.39E+007.36E+01 - 19L3 50.005.09E-043.65E-021.99E+007.99E+017.68E-055.98E-033.82E-011.64E+01 - 19L3 65.001.80E-049.45E-033.93E-011.22E+013.34E-051.77E-038.52E-022.85E+00 - 19L3 80.007.91E-053.25E-031.09E-012.78E+001.73E-056.82E-042.64E-027.27E-01 - 19L3 100.003.29E-051.04E-032.75E-025.70E-018.58E-062.47E-047.57E-031.70E-01 - 19L3 120.001.61E-054.12E-049.00E-031.57E-014.85E-061.09E-042.77E-035.27E-02 - 19L3 150.006.82E-061.34E-042.31E-033.26E-022.43E-064.04E-058.18E-041.28E-02 - 19L3 200.002.30E-063.21E-054.09E-044.41E-031.01E-061.15E-051.75E-042.13E-03 - 19L3 300.005.32E-074.58E-063.80E-052.81E-043.03E-072.08E-062.11E-051.83E-04 - 19L3 450.001.37E-077.32E-073.95E-062.02E-059.64E-084.10E-072.76E-061.75E-05 - 19L3 650.004.51E-081.60E-075.93E-072.20E-063.66E-081.04E-074.79E-072.30E-06 - 19L31000.001.44E-083.34E-088.29E-082.16E-071.30E-082.49E-087.25E-082.50E-07 - 19L32000.003.25E-094.66E-097.02E-091.13E-083.17E-094.02E-096.13E-091.16E-08 - 20K1 15.006.78E+003.35E+021.33E+045.12E+052.34E+001.45E+026.98E+033.22E+05 - 20K1 17.004.69E+002.16E+028.08E+032.92E+051.63E+008.93E+013.95E+031.69E+05 - 20K1 20.002.90E+001.21E+024.13E+031.36E+051.02E+004.76E+011.88E+037.23E+04 - 20K1 25.001.49E+005.37E+011.59E+034.51E+045.36E-012.02E+016.73E+022.21E+04 - 20K1 32.007.05E-012.13E+015.31E+021.27E+042.67E-017.94E+002.16E+025.86E+03 - 20K1 40.003.56E-019.11E+001.92E+023.90E+031.43E-013.45E+007.80E+011.76E+03 - 20K1 50.001.79E-013.85E+006.85E+011.17E+037.74E-021.52E+002.84E+015.31E+02 - 20K1 65.007.90E-021.38E+002.00E+012.77E+023.81E-025.87E-018.74E+001.31E+02 - 20K1 80.004.13E-026.11E-017.51E+008.80E+012.19E-022.80E-013.49E+004.37E+01 - 20K1 100.002.05E-022.54E-012.61E+002.55E+011.22E-021.29E-011.32E+001.37E+01 - 20K1 120.001.16E-021.23E-011.10E+009.29E+007.65E-036.89E-026.07E-015.37E+00 - 20K1 150.005.78E-035.14E-023.83E-012.71E+004.36E-033.26E-022.38E-011.75E+00 - 20K1 200.002.38E-031.68E-021.00E-015.67E-012.14E-031.27E-027.39E-024.28E-01 - 20K1 300.007.09E-043.63E-031.60E-026.73E-028.17E-043.60E-031.53E-026.50E-02 - 20K1 450.002.30E-048.69E-042.89E-039.21E-033.26E-041.10E-033.54E-031.13E-02 - 20K1 650.009.21E-052.71E-047.16E-041.82E-031.48E-044.02E-041.04E-032.64E-03 - 20K11000.003.68E-058.45E-051.77E-043.61E-046.23E-051.36E-042.83E-045.74E-04 - 20K12000.001.16E-051.95E-053.12E-054.87E-051.79E-052.98E-054.74E-057.39E-05 - 20K16000.002.87E-063.58E-064.42E-065.41E-063.51E-064.41E-065.45E-066.66E-06 - 20L1 15.005.04E-012.38E+018.74E+022.91E+042.03E-011.54E+019.73E+026.03E+04 - 20L1 17.003.54E-011.56E+015.43E+021.74E+041.41E-019.26E+005.19E+022.86E+04 - 20L1 20.002.22E-018.88E+002.85E+028.56E+038.79E-024.81E+002.31E+021.10E+04 - 20L1 25.001.16E-014.02E+001.13E+023.02E+034.64E-021.98E+007.69E+012.96E+03 - 20L1 32.005.58E-021.63E+003.91E+018.92E+022.30E-027.58E-012.32E+017.09E+02 - 20L1 40.002.86E-027.12E-011.46E+012.84E+021.24E-023.23E-017.99E+001.98E+02 - 20L1 50.001.45E-023.05E-015.30E+008.76E+016.68E-031.39E-012.80E+005.64E+01 - 20L1 65.006.49E-031.11E-011.58E+002.14E+013.28E-035.31E-028.34E-011.32E+01 - 20L1 80.003.42E-034.98E-026.01E-016.92E+001.89E-032.51E-023.26E-014.27E+00 - 20L1 100.001.71E-032.08E-022.11E-012.04E+001.05E-031.14E-021.21E-011.30E+00 - 20L1 120.009.70E-041.02E-028.98E-027.51E-016.58E-046.08E-035.50E-025.01E-01 - 20L1 150.004.86E-044.28E-033.16E-022.22E-013.74E-042.86E-032.13E-021.60E-01 - 20L1 200.002.01E-041.41E-038.34E-034.70E-021.84E-041.11E-036.54E-033.86E-02 - 20L1 300.006.03E-053.07E-041.35E-035.65E-037.01E-053.12E-041.34E-035.76E-03 - 20L1 450.001.96E-057.40E-052.45E-047.81E-042.80E-059.49E-053.08E-049.89E-04 - 20L1 650.007.87E-062.32E-056.12E-051.56E-041.27E-053.47E-059.00E-052.30E-04 - 20L11000.003.15E-067.23E-061.52E-053.10E-055.34E-061.17E-052.44E-054.97E-05 - 20L12000.009.89E-071.67E-062.68E-064.18E-061.53E-062.56E-064.08E-066.37E-06 - 20L2 15.003.73E-021.26E+012.48E+033.11E+051.01E-021.36E+001.36E+021.19E+04 - 20L2 17.002.32E-026.68E+001.15E+031.29E+056.74E-038.05E-017.20E+015.65E+03 - 20L2 20.001.25E-022.93E+004.27E+024.11E+044.00E-034.08E-013.14E+012.13E+03 - 20L2 25.005.29E-039.42E-011.09E+028.53E+031.95E-031.60E-011.01E+015.58E+02 - 20L2 32.002.03E-032.69E-012.42E+011.50E+038.78E-045.68E-022.85E+001.26E+02 - 20L2 40.008.49E-048.69E-026.23E+003.13E+024.27E-042.23E-029.09E-013.29E+01 - 20L2 50.003.54E-042.81E-021.61E+006.55E+012.07E-048.74E-032.91E-018.58E+00 - 20L2 65.001.26E-047.50E-033.30E-011.05E+018.86E-052.92E-037.63E-021.78E+00 - 20L2 80.005.58E-052.65E-039.52E-022.50E+004.53E-051.23E-032.66E-025.13E-01 - 20L2 100.002.33E-058.75E-042.53E-025.41E-012.20E-054.86E-048.62E-031.37E-01 - 20L2 120.001.14E-053.57E-048.64E-031.57E-011.22E-052.29E-043.45E-034.66E-02 - 20L2 150.004.84E-061.20E-042.36E-033.51E-025.97E-069.15E-051.14E-031.27E-02 - 20L2 200.001.62E-063.04E-054.57E-045.29E-032.38E-062.85E-052.78E-042.44E-03 - 20L2 300.003.63E-074.66E-064.89E-054.04E-046.64E-075.69E-064.01E-052.55E-04 - 20L2 450.008.78E-087.85E-075.87E-063.54E-051.90E-071.20E-066.25E-062.95E-05 - 20L2 650.002.63E-081.73E-079.72E-074.51E-066.28E-083.07E-071.26E-064.65E-06 - 20L21000.007.20E-093.42E-081.41E-074.97E-071.81E-086.78E-082.15E-076.23E-07 - 20L22000.001.20E-093.62E-099.78E-092.38E-082.79E-097.35E-091.69E-083.58E-08 - 20L3 15.007.05E-022.32E+014.50E+035.60E+054.50E-032.63E+006.75E+029.21E+04 - 20L3 17.004.38E-021.22E+012.08E+032.30E+053.04E-031.43E+003.16E+023.82E+04 - 20L3 20.002.35E-025.31E+007.61E+027.25E+041.82E-036.50E-011.18E+021.22E+04 - 20L3 25.009.90E-031.69E+001.91E+021.48E+049.00E-042.21E-013.11E+012.59E+03 - 20L3 32.003.78E-034.74E-014.15E+012.54E+034.12E-046.79E-027.20E+004.74E+02 - 20L3 40.001.58E-031.50E-011.04E+015.16E+022.03E-042.35E-021.95E+001.03E+02 - 20L3 50.006.54E-044.77E-022.62E+001.05E+021.00E-048.24E-035.34E-012.29E+01 - 20L3 65.002.32E-041.24E-025.17E-011.61E+014.37E-052.43E-031.19E-013.98E+00 - 20L3 80.001.02E-044.27E-031.43E-013.66E+002.27E-059.32E-043.66E-021.01E+00 - 20L3 100.004.26E-051.37E-033.63E-027.51E-011.13E-053.37E-041.05E-022.36E-01 - 20L3 120.002.10E-055.42E-041.19E-022.07E-016.37E-061.48E-043.81E-037.28E-02 - 20L3 150.008.89E-061.76E-043.06E-034.31E-023.19E-065.49E-051.12E-031.76E-02 - 20L3 200.003.01E-064.24E-055.43E-045.84E-031.33E-061.56E-052.39E-042.93E-03 - 20L3 300.006.99E-076.06E-065.04E-053.73E-043.99E-072.80E-062.87E-052.51E-04 - 20L3 450.001.80E-079.69E-075.25E-062.69E-051.27E-075.49E-073.74E-062.39E-05 - 20L3 650.005.94E-082.12E-077.88E-072.92E-064.83E-081.39E-076.48E-073.13E-06 - 20L31000.001.89E-084.43E-081.10E-072.88E-071.71E-083.31E-089.74E-083.38E-07 - 20L32000.004.28E-096.15E-099.28E-091.50E-084.18E-095.31E-098.13E-091.55E-08 - 21K1 15.007.42E+003.48E+021.31E+044.76E+052.86E+001.77E+028.16E+033.59E+05 - 21K1 17.005.15E+002.27E+028.07E+032.77E+051.98E+001.09E+024.64E+031.91E+05 - 21K1 20.003.19E+001.29E+024.20E+031.32E+051.24E+005.77E+012.21E+038.26E+04 - 21K1 25.001.65E+005.75E+011.64E+034.52E+046.50E-012.45E+017.97E+022.55E+04 - 21K1 32.007.82E-012.31E+015.58E+021.30E+043.22E-019.57E+002.57E+026.83E+03 - 21K1 40.003.96E-019.93E+002.05E+024.06E+031.72E-014.15E+009.26E+012.06E+03 - 21K1 50.002.00E-014.22E+007.37E+011.23E+039.29E-021.82E+003.36E+016.23E+02 - 21K1 65.008.86E-021.53E+002.18E+012.96E+024.56E-027.01E-011.04E+011.54E+02 - 21K1 80.004.64E-026.78E-018.21E+009.49E+012.62E-023.34E-014.14E+005.14E+01 - 21K1 100.002.31E-022.82E-012.87E+002.77E+011.46E-021.53E-011.56E+001.61E+01 - 21K1 120.001.31E-021.38E-011.21E+001.02E+019.09E-038.17E-027.17E-016.31E+00 - 21K1 150.006.54E-035.76E-024.25E-012.99E+005.16E-033.86E-022.81E-012.05E+00 - 21K1 200.002.70E-031.89E-021.12E-016.29E-012.53E-031.51E-028.70E-025.03E-01 - 21K1 300.008.09E-044.11E-031.80E-027.53E-029.61E-044.24E-031.80E-027.62E-02 - 21K1 450.002.63E-049.89E-043.28E-031.04E-023.82E-041.29E-034.15E-031.32E-02 - 21K1 650.001.06E-043.10E-048.17E-042.07E-031.73E-044.71E-041.22E-033.09E-03 - 21K11000.004.23E-059.70E-052.04E-044.14E-047.25E-051.59E-043.30E-046.71E-04 - 21K12000.001.32E-052.25E-053.60E-055.62E-052.07E-053.46E-055.53E-058.62E-05 - 21K16000.003.28E-064.11E-065.09E-066.23E-064.02E-065.07E-066.29E-067.70E-06 - 21L1 15.005.57E-012.49E+018.57E+022.60E+042.52E-011.95E+011.23E+037.57E+04 - 21L1 17.003.92E-011.65E+015.42E+021.61E+041.75E-011.17E+016.54E+023.59E+04 - 21L1 20.002.47E-019.49E+002.90E+028.20E+031.09E-016.06E+002.90E+021.37E+04 - 21L1 25.001.30E-014.35E+001.18E+023.00E+035.73E-022.48E+009.61E+013.69E+03 - 21L1 32.006.27E-021.79E+004.14E+019.12E+022.84E-029.43E-012.88E+018.79E+02 - 21L1 40.003.23E-027.84E-011.56E+012.96E+021.52E-024.00E-019.88E+002.45E+02 - 21L1 50.001.65E-023.39E-015.75E+009.29E+018.19E-031.72E-013.45E+006.93E+01 - 21L1 65.007.39E-031.25E-011.74E+002.31E+014.01E-036.51E-021.02E+001.61E+01 - 21L1 80.003.90E-035.60E-026.65E-017.53E+002.30E-033.07E-023.98E-015.20E+00 - 21L1 100.001.96E-032.36E-022.36E-012.24E+001.28E-031.39E-021.48E-011.58E+00 - 21L1 120.001.11E-031.16E-021.01E-018.32E-017.98E-047.38E-036.68E-026.07E-01 - 21L1 150.005.60E-044.88E-033.57E-022.48E-014.53E-043.46E-032.58E-021.93E-01 - 21L1 200.002.33E-041.61E-039.48E-035.29E-022.22E-041.34E-037.89E-034.65E-02 - 21L1 300.007.00E-053.55E-041.55E-036.43E-038.42E-053.75E-041.61E-036.92E-03 - 21L1 450.002.28E-058.58E-052.83E-048.98E-043.35E-051.14E-043.69E-041.19E-03 - 21L1 650.009.19E-062.70E-057.11E-051.80E-041.51E-054.14E-051.07E-042.74E-04 - 21L11000.003.68E-068.46E-061.78E-053.62E-056.34E-061.40E-052.91E-055.94E-05 - 21L12000.001.15E-061.96E-063.15E-064.92E-061.81E-063.03E-064.85E-067.58E-06 - 21L2 15.004.62E-021.62E+013.20E+033.98E+051.31E-021.76E+001.74E+021.51E+04 - 21L2 17.002.88E-028.58E+001.49E+031.65E+058.76E-031.04E+009.25E+017.18E+03 - 21L2 20.001.56E-023.76E+005.52E+025.27E+045.20E-035.29E-014.05E+012.72E+03 - 21L2 25.006.63E-031.21E+001.41E+021.10E+042.54E-032.08E-011.30E+017.14E+02 - 21L2 32.002.56E-033.48E-013.14E+011.94E+031.15E-037.41E-023.69E+001.62E+02 - 21L2 40.001.07E-031.12E-018.10E+004.05E+025.59E-042.91E-021.18E+004.24E+01 - 21L2 50.004.50E-043.65E-022.10E+008.51E+012.72E-041.14E-023.79E-011.11E+01 - 21L2 65.001.61E-049.76E-034.31E-011.37E+011.16E-043.83E-039.97E-022.31E+00 - 21L2 80.007.15E-053.46E-031.25E-013.27E+005.96E-051.61E-033.48E-026.70E-01 - 21L2 100.003.00E-051.14E-033.31E-027.08E-012.90E-056.39E-041.13E-021.78E-01 - 21L2 120.001.48E-054.67E-041.13E-022.06E-011.61E-053.02E-044.54E-036.11E-02 - 21L2 150.006.26E-061.58E-043.10E-034.61E-027.90E-061.21E-041.50E-031.67E-02 - 21L2 200.002.11E-064.00E-056.03E-046.98E-033.16E-063.77E-053.68E-043.21E-03 - 21L2 300.004.74E-076.14E-066.46E-055.34E-048.82E-077.56E-065.32E-053.37E-04 - 21L2 450.001.15E-071.04E-067.78E-064.70E-052.52E-071.59E-068.31E-063.91E-05 - 21L2 650.003.45E-082.29E-071.29E-066.00E-068.37E-084.10E-071.67E-066.19E-06 - 21L21000.009.48E-094.53E-081.88E-076.63E-072.40E-089.05E-082.88E-078.32E-07 - 21L22000.001.58E-094.80E-091.30E-083.19E-083.72E-099.84E-092.26E-084.80E-08 - 21L3 15.008.69E-022.97E+015.77E+037.14E+055.75E-033.63E+009.54E+021.30E+05 - 21L3 17.005.41E-021.56E+012.67E+032.94E+053.88E-031.97E+004.45E+025.37E+04 - 21L3 20.002.91E-026.80E+009.79E+029.27E+042.33E-038.94E-011.66E+021.72E+04 - 21L3 25.001.24E-022.17E+002.47E+021.90E+041.15E-033.04E-014.34E+013.62E+03 - 21L3 32.004.74E-036.10E-015.36E+013.26E+035.30E-049.28E-021.00E+016.58E+02 - 21L3 40.001.98E-031.94E-011.35E+016.64E+022.62E-043.21E-022.69E+001.43E+02 - 21L3 50.008.27E-046.16E-023.39E+001.35E+021.29E-041.12E-027.35E-013.16E+01 - 21L3 65.002.95E-041.60E-026.70E-012.08E+015.65E-053.28E-031.63E-015.46E+00 - 21L3 80.001.30E-045.53E-031.86E-014.75E+002.94E-051.26E-035.00E-021.38E+00 - 21L3 100.005.45E-051.77E-034.73E-029.75E-011.46E-054.53E-041.43E-023.22E-01 - 21L3 120.002.69E-057.04E-041.55E-022.69E-018.26E-061.99E-045.18E-039.91E-02 - 21L3 150.001.14E-052.29E-043.99E-035.62E-024.14E-067.33E-051.52E-032.39E-02 - 21L3 200.003.88E-065.52E-057.09E-047.62E-031.72E-062.08E-053.23E-043.96E-03 - 21L3 300.009.03E-077.90E-066.59E-054.87E-045.19E-073.72E-063.86E-053.39E-04 - 21L3 450.002.34E-071.26E-066.87E-063.52E-051.65E-077.24E-075.01E-063.21E-05 - 21L3 650.007.70E-082.76E-071.03E-063.83E-066.27E-081.83E-078.63E-074.20E-06 - 21L31000.002.46E-085.77E-081.44E-073.77E-072.23E-084.33E-081.29E-074.51E-07 - 21L32000.005.54E-098.00E-091.21E-081.96E-085.41E-096.90E-091.06E-082.04E-08 - 22K1 15.008.07E+003.59E+021.27E+044.34E+053.45E+002.13E+029.41E+033.94E+05 - 22K1 17.005.62E+002.37E+027.98E+032.60E+052.39E+001.30E+025.38E+032.12E+05 - 22K1 20.003.50E+001.35E+024.22E+031.27E+051.49E+006.93E+012.58E+039.30E+04 - 22K1 25.001.81E+006.12E+011.69E+034.48E+047.79E-012.93E+019.33E+022.91E+04 - 22K1 32.008.63E-012.48E+015.83E+021.32E+043.85E-011.14E+013.02E+027.86E+03 - 22K1 40.004.39E-011.08E+012.17E+024.19E+032.05E-014.94E+001.09E+022.38E+03 - 22K1 50.002.22E-014.60E+007.87E+011.29E+031.11E-012.16E+003.95E+017.23E+02 - 22K1 65.009.87E-021.68E+002.35E+013.15E+025.40E-028.30E-011.22E+011.79E+02 - 22K1 80.005.18E-027.47E-018.91E+001.02E+023.09E-023.95E-014.85E+005.98E+01 - 22K1 100.002.59E-023.13E-013.13E+002.99E+011.72E-021.80E-011.83E+001.87E+01 - 22K1 120.001.47E-021.53E-011.33E+001.10E+011.07E-029.61E-028.39E-017.34E+00 - 22K1 150.007.36E-036.42E-024.69E-013.26E+006.06E-034.52E-023.28E-012.39E+00 - 22K1 200.003.05E-032.11E-021.24E-016.93E-012.96E-031.76E-021.01E-015.85E-01 - 22K1 300.009.16E-044.63E-032.02E-028.37E-021.12E-034.95E-032.10E-028.85E-02 - 22K1 450.002.99E-041.12E-033.69E-031.17E-024.44E-041.50E-034.82E-031.53E-02 - 22K1 650.001.20E-043.52E-049.26E-042.34E-032.01E-045.48E-041.41E-033.58E-03 - 22K11000.004.82E-051.11E-042.32E-044.71E-048.38E-051.85E-043.84E-047.80E-04 - 22K12000.001.51E-052.57E-054.12E-056.45E-052.38E-054.00E-056.40E-059.99E-05 - 22K16000.003.72E-064.68E-065.81E-067.13E-064.57E-065.80E-067.21E-068.85E-06 - 22L1 15.006.10E-012.59E+018.26E+022.25E+043.10E-012.45E+011.54E+039.42E+04 - 22L1 17.004.30E-011.73E+015.33E+021.46E+042.15E-011.46E+018.17E+024.46E+04 - 22L1 20.002.72E-011.00E+012.91E+027.72E+031.34E-017.55E+003.61E+021.70E+04 - 22L1 25.001.44E-014.66E+001.21E+022.93E+037.02E-023.08E+001.19E+024.55E+03 - 22L1 32.006.99E-021.93E+004.34E+019.21E+023.47E-021.16E+003.55E+011.08E+03 - 22L1 40.003.61E-028.57E-011.66E+013.05E+021.85E-024.91E-011.21E+012.99E+02 - 22L1 50.001.85E-023.73E-016.18E+009.75E+019.95E-032.10E-014.21E+008.45E+01 - 22L1 65.008.34E-031.38E-011.89E+002.46E+014.85E-037.92E-021.24E+001.96E+01 - 22L1 80.004.42E-036.25E-027.30E-018.12E+002.78E-033.72E-024.82E-016.29E+00 - 22L1 100.002.23E-032.64E-022.60E-012.44E+001.54E-031.68E-021.78E-011.90E+00 - 22L1 120.001.27E-031.31E-021.12E-019.13E-019.59E-048.89E-038.03E-027.29E-01 - 22L1 150.006.40E-045.52E-033.99E-022.74E-015.42E-044.15E-033.10E-022.32E-01 - 22L1 200.002.67E-041.83E-031.07E-025.91E-022.65E-041.61E-039.44E-035.55E-02 - 22L1 300.008.06E-054.05E-041.76E-037.25E-031.00E-044.48E-041.92E-038.24E-03 - 22L1 450.002.64E-059.87E-053.25E-041.02E-033.97E-051.35E-044.38E-041.41E-03 - 22L1 650.001.06E-053.12E-058.19E-052.07E-041.79E-054.90E-051.27E-043.25E-04 - 22L11000.004.27E-069.82E-062.06E-054.19E-057.45E-061.65E-053.44E-057.03E-05 - 22L12000.001.34E-062.28E-063.67E-065.74E-062.11E-063.56E-065.72E-068.95E-06 - 22L2 15.005.63E-022.05E+014.07E+035.03E+051.67E-022.25E+002.21E+021.90E+04 - 22L2 17.003.53E-021.09E+011.90E+032.09E+051.12E-021.34E+001.17E+029.02E+03 - 22L2 20.001.91E-024.77E+007.04E+026.68E+046.68E-036.78E-015.14E+013.43E+03 - 22L2 25.008.19E-031.54E+001.81E+021.40E+043.27E-032.67E-011.66E+019.03E+02 - 22L2 32.003.18E-034.43E-014.02E+012.47E+031.48E-039.53E-024.71E+002.06E+02 - 22L2 40.001.34E-031.44E-011.04E+015.18E+027.21E-043.75E-021.51E+005.41E+01 - 22L2 50.005.64E-044.66E-022.69E+001.09E+023.51E-041.48E-024.86E-011.42E+01 - 22L2 65.002.03E-041.25E-025.56E-011.76E+011.51E-044.95E-031.28E-012.96E+00 - 22L2 80.009.04E-054.44E-031.61E-014.21E+007.73E-052.09E-034.50E-028.61E-01 - 22L2 100.003.80E-051.47E-034.28E-029.14E-013.77E-058.30E-041.46E-022.30E-01 - 22L2 120.001.88E-056.02E-041.47E-022.66E-012.10E-053.92E-045.89E-037.89E-02 - 22L2 150.007.99E-062.04E-044.03E-035.98E-021.03E-051.58E-041.95E-032.16E-02 - 22L2 200.002.70E-065.18E-057.84E-049.07E-034.13E-064.93E-054.79E-044.17E-03 - 22L2 300.006.10E-077.98E-068.43E-056.97E-041.15E-069.90E-066.96E-054.39E-04 - 22L2 450.001.49E-071.35E-061.02E-056.15E-053.32E-072.09E-061.09E-055.12E-05 - 22L2 650.004.47E-083.00E-071.69E-067.88E-061.10E-075.39E-072.20E-068.13E-06 - 22L21000.001.23E-085.93E-082.47E-078.72E-073.16E-081.19E-073.79E-071.10E-06 - 22L22000.002.05E-096.28E-091.72E-084.20E-084.88E-091.30E-082.99E-086.34E-08 - 22L3 15.001.06E-013.74E+017.31E+038.97E+057.24E-034.94E+001.33E+031.81E+05 - 22L3 17.006.60E-021.97E+013.38E+033.70E+054.89E-032.68E+006.17E+027.45E+04 - 22L3 20.003.57E-028.59E+001.24E+031.17E+052.94E-031.21E+002.30E+022.37E+04 - 22L3 25.001.52E-022.74E+003.13E+022.40E+041.46E-034.10E-015.98E+014.98E+03 - 22L3 32.005.87E-037.73E-016.82E+014.14E+036.71E-041.25E-011.37E+019.01E+02 - 22L3 40.002.46E-032.46E-011.72E+018.44E+023.32E-044.31E-023.68E+001.95E+02 - 22L3 50.001.03E-037.83E-024.33E+001.72E+021.64E-041.50E-029.99E-014.29E+01 - 22L3 65.003.69E-042.04E-028.58E-012.66E+017.18E-054.38E-032.20E-017.39E+00 - 22L3 80.001.64E-047.06E-032.39E-016.07E+003.74E-051.67E-036.74E-021.87E+00 - 22L3 100.006.87E-052.27E-036.06E-021.25E+001.86E-056.01E-041.92E-024.33E-01 - 22L3 120.003.39E-059.01E-041.99E-023.45E-011.05E-052.63E-046.95E-031.33E-01 - 22L3 150.001.45E-052.94E-045.13E-037.21E-025.29E-069.68E-052.04E-033.20E-02 - 22L3 200.004.93E-067.08E-059.12E-049.80E-032.21E-062.73E-054.31E-045.29E-03 - 22L3 300.001.15E-061.01E-058.50E-056.28E-046.64E-074.86E-065.11E-054.50E-04 - 22L3 450.002.99E-071.63E-068.87E-064.55E-052.12E-079.41E-076.59E-064.24E-05 - 22L3 650.009.85E-083.55E-071.33E-064.95E-068.03E-082.36E-071.13E-065.54E-06 - 22L31000.003.14E-087.42E-081.86E-074.88E-072.85E-085.58E-081.68E-075.93E-07 - 22L32000.007.08E-091.02E-081.55E-082.53E-086.92E-098.84E-091.37E-082.65E-08 - 23K1 15.008.74E+003.67E+021.21E+043.88E+054.14E+002.55E+021.08E+044.25E+05 - 23K1 17.006.10E+002.44E+027.78E+032.40E+052.86E+001.56E+026.19E+032.33E+05 - 23K1 20.003.80E+001.41E+024.21E+031.21E+051.78E+008.28E+012.99E+031.04E+05 - 23K1 25.001.97E+006.46E+011.72E+034.39E+049.31E-013.49E+011.09E+033.29E+04 - 23K1 32.009.46E-012.65E+016.04E+021.33E+044.59E-011.36E+013.52E+028.99E+03 - 23K1 40.004.83E-011.16E+012.27E+024.29E+032.44E-015.86E+001.27E+022.74E+03 - 23K1 50.002.45E-014.98E+008.34E+011.34E+031.31E-012.55E+004.62E+018.35E+02 - 23K1 65.001.09E-011.83E+002.51E+013.31E+026.38E-029.79E-011.42E+012.07E+02 - 23K1 80.005.76E-028.18E-019.61E+001.08E+023.65E-024.64E-015.67E+006.93E+01 - 23K1 100.002.88E-023.44E-013.40E+003.21E+012.02E-022.11E-012.14E+002.17E+01 - 23K1 120.001.64E-021.69E-011.45E+001.19E+011.26E-021.13E-019.77E-018.51E+00 - 23K1 150.008.23E-037.11E-025.14E-013.54E+007.09E-035.29E-023.82E-012.77E+00 - 23K1 200.003.42E-032.35E-021.37E-017.58E-013.46E-032.05E-021.18E-016.77E-01 - 23K1 300.001.03E-035.18E-032.24E-029.24E-021.30E-035.75E-032.43E-021.02E-01 - 23K1 450.003.37E-041.26E-034.13E-031.30E-025.14E-041.74E-035.59E-031.77E-02 - 23K1 650.001.36E-043.98E-041.04E-032.63E-032.31E-046.34E-041.63E-034.14E-03 - 23K11000.005.46E-051.25E-042.63E-045.33E-049.63E-052.13E-044.43E-049.00E-04 - 23K12000.001.71E-052.92E-054.70E-057.35E-052.71E-054.59E-057.37E-051.15E-04 - 23K16000.004.19E-065.29E-066.59E-068.11E-065.17E-066.59E-068.22E-061.01E-05 - 23L1 15.006.63E-012.66E+017.84E+021.89E+043.78E-013.05E+011.91E+031.16E+05 - 23L1 17.004.70E-011.79E+015.17E+021.28E+042.62E-011.82E+011.01E+035.49E+04 - 23L1 20.002.98E-011.05E+012.89E+027.12E+031.63E-019.34E+004.46E+022.08E+04 - 23L1 25.001.58E-014.94E+001.23E+022.83E+038.53E-023.79E+001.46E+025.57E+03 - 23L1 32.007.74E-022.08E+004.50E+019.18E+024.20E-021.43E+004.34E+011.32E+03 - 23L1 40.004.01E-029.28E-011.75E+013.12E+022.24E-025.98E-011.48E+013.64E+02 - 23L1 50.002.06E-024.08E-016.59E+001.01E+021.20E-022.55E-015.10E+001.02E+02 - 23L1 65.009.35E-031.52E-012.04E+002.60E+015.83E-039.56E-021.50E+002.36E+01 - 23L1 80.004.97E-036.91E-027.94E-018.69E+003.33E-034.48E-025.80E-017.55E+00 - 23L1 100.002.51E-032.94E-022.86E-012.64E+001.84E-032.01E-022.13E-012.27E+00 - 23L1 120.001.44E-031.46E-021.23E-019.93E-011.14E-031.06E-029.60E-028.70E-01 - 23L1 150.007.25E-046.19E-034.42E-023.01E-016.46E-044.95E-033.69E-022.76E-01 - 23L1 200.003.03E-042.07E-031.19E-026.54E-023.14E-041.91E-031.12E-026.59E-02 - 23L1 300.009.21E-054.60E-041.98E-038.12E-031.18E-045.30E-042.28E-039.74E-03 - 23L1 450.003.03E-051.13E-043.69E-041.16E-034.67E-051.59E-045.17E-041.66E-03 - 23L1 650.001.22E-053.58E-059.37E-052.37E-042.09E-055.77E-051.50E-043.83E-04 - 23L11000.004.92E-061.13E-052.37E-054.82E-058.70E-061.94E-054.05E-058.26E-05 - 23L12000.001.54E-062.63E-064.25E-066.65E-062.45E-064.16E-066.69E-061.05E-05 - 23L2 15.006.79E-022.56E+015.11E+036.26E+052.12E-022.84E+002.76E+022.34E+04 - 23L2 17.004.27E-021.36E+012.38E+032.61E+051.42E-021.69E+001.47E+021.12E+04 - 23L2 20.002.32E-025.98E+008.86E+028.36E+048.46E-038.57E-016.45E+014.26E+03 - 23L2 25.001.00E-021.94E+002.28E+021.75E+044.15E-033.39E-012.08E+011.13E+03 - 23L2 32.003.90E-035.57E-015.09E+013.11E+031.88E-031.21E-015.95E+002.58E+02 - 23L2 40.001.65E-031.81E-011.32E+016.53E+029.19E-044.77E-021.92E+006.80E+01 - 23L2 50.006.98E-045.89E-023.42E+001.38E+024.49E-041.88E-026.17E-011.79E+01 - 23L2 65.002.52E-041.58E-027.07E-012.24E+011.93E-046.32E-031.63E-013.75E+00 - 23L2 80.001.13E-045.64E-032.05E-015.35E+009.90E-052.67E-035.73E-021.09E+00 - 23L2 100.004.76E-051.87E-035.46E-021.16E+004.84E-051.06E-031.87E-022.93E-01 - 23L2 120.002.36E-057.67E-041.88E-023.39E-012.70E-055.03E-047.54E-031.01E-01 - 23L2 150.001.01E-052.60E-045.16E-037.65E-021.32E-052.03E-042.50E-032.76E-02 - 23L2 200.003.41E-066.62E-051.01E-031.16E-025.32E-066.35E-056.16E-045.35E-03 - 23L2 300.007.75E-071.02E-051.09E-048.97E-041.49E-061.28E-058.98E-055.66E-04 - 23L2 450.001.89E-071.74E-061.32E-057.94E-054.29E-072.71E-061.41E-056.62E-05 - 23L2 650.005.72E-083.86E-072.19E-061.02E-051.43E-077.00E-072.86E-061.05E-05 - 23L21000.001.57E-087.66E-083.20E-071.13E-064.10E-081.55E-074.93E-071.42E-06 - 23L22000.002.62E-098.10E-092.23E-085.46E-086.31E-091.69E-083.90E-088.26E-08 - 23L3 15.001.27E-014.66E+019.14E+031.11E+069.01E-036.61E+001.83E+032.48E+05 - 23L3 17.007.95E-022.46E+014.23E+034.60E+056.09E-033.58E+008.46E+021.02E+05 - 23L3 20.004.31E-021.07E+011.56E+031.46E+053.66E-031.62E+003.14E+023.23E+04 - 23L3 25.001.85E-023.42E+003.93E+022.99E+041.82E-035.47E-018.12E+016.76E+03 - 23L3 32.007.16E-039.67E-018.58E+015.18E+038.38E-041.66E-011.85E+011.22E+03 - 23L3 40.003.02E-033.08E-012.16E+011.06E+034.16E-045.70E-024.95E+002.63E+02 - 23L3 50.001.27E-039.83E-025.46E+002.16E+022.06E-041.98E-021.34E+005.76E+01 - 23L3 65.004.56E-042.57E-021.08E+003.35E+019.02E-055.76E-032.94E-019.87E+00 - 23L3 80.002.03E-048.90E-033.02E-017.66E+004.70E-052.19E-038.96E-022.49E+00 - 23L3 100.008.55E-052.86E-037.68E-021.58E+002.34E-057.86E-042.54E-025.75E-01 - 23L3 120.004.23E-051.14E-032.52E-024.37E-011.33E-053.43E-049.19E-031.76E-01 - 23L3 150.001.81E-053.72E-046.51E-039.14E-026.68E-061.26E-042.69E-034.23E-02 - 23L3 200.006.18E-068.97E-051.16E-031.24E-022.79E-063.54E-055.66E-046.97E-03 - 23L3 300.001.45E-061.29E-051.08E-047.99E-048.40E-076.27E-066.69E-055.91E-04 - 23L3 450.003.76E-072.07E-061.13E-055.79E-052.68E-071.21E-068.60E-065.56E-05 - 23L3 650.001.24E-074.51E-071.70E-066.31E-061.02E-073.02E-071.47E-067.22E-06 - 23L31000.003.97E-089.41E-082.36E-076.22E-073.60E-087.10E-082.17E-077.69E-07 - 23L32000.008.93E-091.30E-081.97E-083.22E-088.72E-091.12E-081.74E-083.40E-08 - 24K1 15.009.40E+003.71E+021.14E+043.38E+054.93E+003.03E+021.21E+044.49E+05 - 24K1 17.006.58E+002.50E+027.47E+032.16E+053.41E+001.85E+027.03E+032.51E+05 - 24K1 20.004.12E+001.46E+024.13E+031.13E+052.12E+009.83E+013.42E+031.14E+05 - 24K1 25.002.15E+006.77E+011.73E+034.25E+041.11E+004.14E+011.25E+033.68E+04 - 24K1 32.001.03E+002.80E+016.20E+021.32E+045.44E-011.61E+014.08E+021.02E+04 - 24K1 40.005.28E-011.24E+012.36E+024.35E+032.88E-016.91E+001.48E+023.13E+03 - 24K1 50.002.69E-015.36E+008.78E+011.38E+031.54E-013.00E+005.37E+019.56E+02 - 24K1 65.001.20E-011.98E+002.67E+013.46E+027.50E-021.15E+001.65E+012.38E+02 - 24K1 80.006.36E-028.90E-011.03E+011.14E+024.27E-025.43E-016.58E+007.98E+01 - 24K1 100.003.19E-023.76E-013.67E+003.42E+012.36E-022.47E-012.48E+002.50E+01 - 24K1 120.001.82E-021.85E-011.57E+001.27E+011.47E-021.31E-011.13E+009.81E+00 - 24K1 150.009.15E-037.83E-025.61E-013.82E+008.26E-036.15E-024.42E-013.19E+00 - 24K1 200.003.81E-032.60E-021.50E-018.23E-014.01E-032.38E-021.36E-017.80E-01 - 24K1 300.001.15E-035.76E-032.47E-021.01E-011.51E-036.65E-032.81E-021.18E-01 - 24K1 450.003.79E-041.41E-034.59E-031.44E-025.93E-042.01E-036.44E-032.04E-02 - 24K1 650.001.53E-044.47E-041.17E-032.94E-032.66E-047.29E-041.88E-034.76E-03 - 24K11000.006.15E-051.42E-042.96E-046.00E-041.10E-042.45E-045.09E-041.03E-03 - 24K12000.001.92E-053.30E-055.32E-058.33E-053.08E-055.24E-058.43E-051.32E-04 - 24K16000.004.70E-065.96E-067.45E-069.19E-065.81E-067.45E-069.33E-061.15E-05 - 24L1 15.007.17E-012.71E+017.30E+021.51E+044.58E-013.77E+012.36E+031.42E+05 - 24L1 17.005.09E-011.84E+014.93E+021.09E+043.17E-012.24E+011.24E+036.70E+04 - 24L1 20.003.24E-011.10E+012.82E+026.40E+031.97E-011.15E+015.46E+022.54E+04 - 24L1 25.001.73E-015.21E+001.23E+022.68E+031.03E-014.64E+001.79E+026.77E+03 - 24L1 32.008.51E-022.21E+004.62E+019.03E+025.06E-021.73E+005.28E+011.59E+03 - 24L1 40.004.43E-029.98E-011.82E+013.14E+022.69E-027.25E-011.79E+014.38E+02 - 24L1 50.002.29E-024.42E-016.96E+001.04E+021.44E-023.08E-016.15E+001.23E+02 - 24L1 65.001.04E-021.66E-012.18E+002.72E+016.97E-031.15E-011.80E+002.82E+01 - 24L1 80.005.55E-037.60E-028.57E-019.20E+003.97E-035.36E-026.93E-019.01E+00 - 24L1 100.002.81E-033.25E-023.11E-012.83E+002.19E-032.40E-022.54E-012.71E+00 - 24L1 120.001.61E-031.62E-021.35E-011.07E+001.36E-031.26E-021.14E-011.03E+00 - 24L1 150.008.17E-046.90E-034.87E-023.27E-017.64E-045.87E-034.37E-023.27E-01 - 24L1 200.003.43E-042.32E-031.32E-027.18E-023.71E-042.25E-031.32E-027.77E-02 - 24L1 300.001.05E-045.19E-042.22E-039.03E-031.39E-046.23E-042.68E-031.14E-02 - 24L1 450.003.45E-051.28E-044.16E-041.30E-035.46E-051.87E-046.06E-041.94E-03 - 24L1 650.001.40E-054.08E-051.06E-042.68E-042.45E-056.76E-051.76E-044.49E-04 - 24L11000.005.62E-061.29E-052.72E-055.51E-051.01E-052.26E-054.73E-059.66E-05 - 24L12000.001.76E-063.02E-064.88E-067.66E-062.82E-064.82E-067.78E-061.22E-05 - 24L2 15.008.11E-023.17E+016.34E+037.71E+052.65E-023.54E+003.40E+022.86E+04 - 24L2 17.005.11E-021.69E+012.96E+033.22E+051.78E-022.11E+001.81E+021.37E+04 - 24L2 20.002.79E-027.42E+001.10E+031.03E+051.06E-021.07E+007.99E+015.22E+03 - 24L2 25.001.21E-022.41E+002.84E+022.17E+045.21E-034.24E-012.59E+011.39E+03 - 24L2 32.004.73E-036.94E-016.36E+013.87E+032.37E-031.52E-017.42E+003.19E+02 - 24L2 40.002.02E-032.26E-011.65E+018.15E+021.16E-036.00E-022.39E+008.44E+01 - 24L2 50.008.55E-047.37E-024.29E+001.72E+025.67E-042.37E-027.74E-012.23E+01 - 24L2 65.003.11E-041.99E-028.89E-012.80E+012.44E-047.99E-032.05E-014.69E+00 - 24L2 80.001.39E-047.08E-032.58E-016.72E+001.26E-043.38E-037.22E-021.37E+00 - 24L2 100.005.90E-052.36E-036.90E-021.47E+006.14E-051.35E-032.36E-023.68E-01 - 24L2 120.002.93E-059.66E-042.37E-024.28E-013.43E-056.39E-049.54E-031.27E-01 - 24L2 150.001.25E-053.29E-046.53E-039.68E-021.69E-052.58E-043.17E-033.49E-02 - 24L2 200.004.26E-068.38E-051.28E-031.48E-026.79E-068.10E-057.83E-046.78E-03 - 24L2 300.009.74E-071.30E-051.38E-041.14E-031.91E-061.64E-051.15E-047.20E-04 - 24L2 450.002.39E-072.22E-061.68E-051.01E-045.50E-073.47E-061.81E-058.46E-05 - 24L2 650.007.23E-084.93E-072.81E-061.31E-051.83E-079.00E-073.67E-061.35E-05 - 24L21000.001.99E-089.78E-084.10E-071.45E-065.26E-082.00E-076.35E-071.83E-06 - 24L22000.003.32E-091.03E-082.86E-087.02E-088.09E-092.17E-085.02E-081.07E-07 - 24L3 15.001.51E-015.74E+011.13E+041.36E+061.11E-028.76E+002.48E+033.35E+05 - 24L3 17.009.49E-023.03E+015.24E+035.64E+057.51E-034.74E+001.14E+031.38E+05 - 24L3 20.005.16E-021.32E+011.93E+031.79E+054.52E-032.14E+004.23E+024.35E+04 - 24L3 25.002.22E-024.23E+004.88E+023.69E+042.25E-037.20E-011.09E+029.06E+03 - 24L3 32.008.66E-031.20E+001.07E+026.40E+031.04E-032.18E-012.48E+011.63E+03 - 24L3 40.003.67E-033.83E-012.69E+011.31E+035.15E-047.47E-026.58E+003.49E+02 - 24L3 50.001.55E-031.22E-016.81E+002.69E+022.55E-042.58E-021.77E+007.63E+01 - 24L3 65.005.58E-043.20E-021.35E+004.16E+011.12E-047.50E-033.87E-011.30E+01 - 24L3 80.002.49E-041.11E-023.77E-019.55E+005.85E-052.85E-031.18E-013.27E+00 - 24L3 100.001.05E-043.57E-039.61E-021.97E+002.92E-051.02E-033.33E-027.54E-01 - 24L3 120.005.22E-051.42E-033.16E-025.46E-011.66E-054.43E-041.20E-022.31E-01 - 24L3 150.002.24E-054.65E-048.17E-031.15E-018.34E-061.62E-043.50E-035.53E-02 - 24L3 200.007.66E-061.12E-041.46E-031.56E-023.48E-064.55E-057.36E-049.08E-03 - 24L3 300.001.80E-061.62E-051.36E-041.01E-031.05E-068.01E-068.65E-057.68E-04 - 24L3 450.004.69E-072.59E-061.42E-057.30E-053.35E-071.54E-061.11E-057.19E-05 - 24L3 650.001.55E-075.67E-072.14E-067.96E-061.27E-073.83E-071.88E-069.32E-06 - 24L31000.004.95E-081.18E-072.97E-077.84E-074.49E-088.93E-082.76E-079.88E-07 - 24L32000.001.11E-081.62E-082.47E-084.04E-081.09E-081.40E-082.19E-084.32E-08 - 25K1 15.001.01E+013.72E+021.06E+042.91E+055.84E+003.58E+021.36E+044.70E+05 - 25K1 17.007.07E+002.54E+027.12E+031.93E+054.04E+002.19E+027.95E+032.68E+05 - 25K1 20.004.44E+001.50E+024.04E+031.05E+052.50E+001.16E+023.90E+031.24E+05 - 25K1 25.002.32E+007.06E+011.73E+034.09E+041.31E+004.88E+011.44E+034.09E+04 - 25K1 32.001.12E+002.96E+016.34E+021.31E+046.40E-011.89E+014.70E+021.15E+04 - 25K1 40.005.75E-011.31E+012.45E+024.39E+033.39E-018.10E+001.71E+023.55E+03 - 25K1 50.002.93E-015.74E+009.20E+011.42E+031.81E-013.52E+006.21E+011.09E+03 - 25K1 65.001.32E-012.13E+002.83E+013.60E+028.76E-021.34E+001.91E+012.72E+02 - 25K1 80.006.98E-029.64E-011.10E+011.20E+024.98E-026.33E-017.60E+009.14E+01 - 25K1 100.003.52E-024.09E-013.94E+003.62E+012.75E-022.87E-012.86E+002.86E+01 - 25K1 120.002.01E-022.02E-011.70E+001.36E+011.70E-021.52E-011.31E+001.12E+01 - 25K1 150.001.01E-028.58E-026.08E-014.10E+009.57E-037.12E-025.10E-013.66E+00 - 25K1 200.004.23E-032.86E-021.64E-018.91E-014.64E-032.75E-021.57E-018.94E-01 - 25K1 300.001.29E-036.37E-032.72E-021.11E-011.73E-037.65E-033.22E-021.35E-01 - 25K1 450.004.23E-041.56E-035.09E-031.59E-026.79E-042.30E-037.38E-032.34E-02 - 25K1 650.001.71E-044.99E-041.30E-033.27E-033.04E-048.35E-042.15E-035.45E-03 - 25K11000.006.90E-051.59E-043.32E-046.72E-041.25E-042.80E-045.82E-041.18E-03 - 25K12000.002.15E-053.71E-055.99E-059.39E-053.48E-055.95E-059.60E-051.50E-04 - 25K16000.005.25E-066.67E-068.36E-061.03E-056.50E-068.38E-061.05E-051.30E-05 - 25L1 15.007.71E-012.74E+016.70E+021.15E+045.50E-014.63E+012.89E+031.73E+05 - 25L1 17.005.49E-011.88E+014.64E+029.04E+033.81E-012.75E+011.52E+038.14E+04 - 25L1 20.003.51E-011.13E+012.74E+025.65E+032.36E-011.40E+016.66E+023.08E+04 - 25L1 25.001.88E-015.45E+001.23E+022.50E+031.23E-015.64E+002.17E+028.17E+03 - 25L1 32.009.29E-022.34E+004.71E+018.80E+026.05E-022.10E+006.37E+011.92E+03 - 25L1 40.004.86E-021.07E+001.89E+013.14E+023.20E-028.72E-012.15E+015.26E+02 - 25L1 50.002.52E-024.76E-017.31E+001.06E+021.71E-023.69E-017.36E+001.47E+02 - 25L1 65.001.15E-021.81E-012.32E+002.83E+018.26E-031.37E-012.14E+003.36E+01 - 25L1 80.006.16E-038.29E-029.19E-019.68E+004.70E-036.36E-028.23E-011.07E+01 - 25L1 100.003.13E-033.56E-023.36E-013.01E+002.58E-032.84E-023.01E-013.20E+00 - 25L1 120.001.80E-031.78E-021.47E-011.15E+001.60E-031.49E-021.35E-011.22E+00 - 25L1 150.009.14E-047.63E-035.33E-023.54E-018.98E-046.92E-035.15E-023.84E-01 - 25L1 200.003.85E-042.58E-031.46E-027.84E-024.35E-042.65E-031.55E-029.11E-02 - 25L1 300.001.18E-045.80E-042.46E-039.97E-031.62E-047.28E-043.12E-031.33E-02 - 25L1 450.003.90E-051.44E-044.66E-041.45E-036.35E-052.18E-047.06E-042.26E-03 - 25L1 650.001.58E-054.61E-051.20E-043.02E-042.83E-057.86E-052.04E-045.21E-04 - 25L11000.006.38E-061.47E-053.08E-056.25E-051.17E-052.62E-055.49E-051.12E-04 - 25L12000.001.99E-063.44E-065.57E-068.75E-063.23E-065.55E-068.98E-061.41E-05 - 25L2 15.009.56E-023.89E+017.80E+039.41E+053.28E-024.37E+004.16E+023.46E+04 - 25L2 17.006.04E-022.07E+013.65E+033.93E+052.21E-022.60E+002.22E+021.66E+04 - 25L2 20.003.31E-029.11E+001.36E+031.27E+051.32E-021.33E+009.81E+016.35E+03 - 25L2 25.001.44E-022.96E+003.51E+022.67E+046.47E-035.26E-013.19E+011.70E+03 - 25L2 32.005.69E-038.54E-017.84E+014.74E+032.95E-031.88E-019.11E+003.89E+02 - 25L2 40.002.43E-032.78E-012.04E+011.01E+031.44E-037.47E-022.96E+001.04E+02 - 25L2 50.001.03E-039.10E-025.32E+002.13E+027.07E-042.96E-029.59E-012.75E+01 - 25L2 65.003.78E-042.46E-021.10E+003.48E+013.06E-049.98E-032.55E-015.80E+00 - 25L2 80.001.70E-048.78E-033.21E-018.36E+001.57E-044.23E-039.00E-021.70E+00 - 25L2 100.007.22E-052.93E-038.61E-021.83E+007.71E-051.69E-032.95E-024.58E-01 - 25L2 120.003.60E-051.20E-032.97E-025.35E-014.31E-058.02E-041.19E-021.58E-01 - 25L2 150.001.54E-054.10E-048.18E-031.21E-012.12E-053.24E-043.98E-034.36E-02 - 25L2 200.005.27E-061.05E-041.60E-031.85E-028.56E-061.02E-049.84E-048.50E-03 - 25L2 300.001.21E-061.63E-051.74E-041.44E-032.41E-062.07E-051.44E-049.07E-04 - 25L2 450.002.98E-072.79E-062.12E-051.28E-046.96E-074.40E-062.28E-051.07E-04 - 25L2 650.009.03E-086.21E-073.55E-061.65E-052.32E-071.14E-064.65E-061.71E-05 - 25L21000.002.50E-081.23E-075.20E-071.84E-066.67E-082.54E-078.07E-072.33E-06 - 25L22000.004.16E-091.31E-083.62E-088.93E-081.02E-082.77E-086.40E-081.36E-07 - 25L3 15.001.77E-017.00E+011.38E+041.66E+061.35E-021.15E+013.32E+034.50E+05 - 25L3 17.001.12E-013.70E+016.42E+036.87E+059.15E-036.19E+001.53E+031.84E+05 - 25L3 20.006.10E-021.62E+012.36E+032.18E+055.51E-032.79E+005.64E+025.80E+04 - 25L3 25.002.64E-025.18E+005.99E+024.51E+042.75E-039.38E-011.45E+021.20E+04 - 25L3 32.001.03E-021.47E+001.31E+027.84E+031.27E-032.83E-013.27E+012.15E+03 - 25L3 40.004.39E-034.69E-013.32E+011.61E+036.30E-049.68E-028.66E+004.60E+02 - 25L3 50.001.86E-031.50E-018.39E+003.30E+023.13E-043.34E-022.33E+001.00E+02 - 25L3 65.006.74E-043.93E-021.67E+005.13E+011.38E-049.66E-035.05E-011.70E+01 - 25L3 80.003.02E-041.37E-024.67E-011.18E+017.19E-053.66E-031.53E-014.26E+00 - 25L3 100.001.28E-044.41E-031.19E-012.44E+003.59E-051.30E-034.32E-029.79E-01 - 25L3 120.006.36E-051.76E-033.92E-026.76E-012.04E-055.66E-041.55E-022.99E-01 - 25L3 150.002.73E-055.75E-041.01E-021.42E-011.03E-052.07E-044.52E-037.15E-02 - 25L3 200.009.38E-061.39E-041.81E-031.94E-024.29E-065.77E-059.45E-041.17E-02 - 25L3 300.002.21E-062.00E-051.69E-041.25E-031.30E-061.01E-051.11E-049.85E-04 - 25L3 450.005.78E-073.22E-061.77E-059.09E-054.14E-071.93E-061.41E-059.21E-05 - 25L3 650.001.91E-077.03E-072.66E-069.92E-061.57E-074.79E-072.39E-061.19E-05 - 25L31000.006.10E-081.46E-073.70E-079.77E-075.54E-081.11E-073.47E-071.25E-06 - 25L32000.001.37E-082.00E-083.06E-085.02E-081.34E-081.73E-082.72E-085.41E-08 - 26K1 15.001.08E+013.70E+029.65E+032.42E+056.89E+004.21E+021.50E+044.79E+05 - 26K1 17.007.56E+002.55E+026.68E+031.68E+054.76E+002.57E+028.87E+032.81E+05 - 26K1 20.004.76E+001.53E+023.89E+039.54E+042.95E+001.36E+024.39E+031.33E+05 - 26K1 25.002.50E+007.31E+011.71E+033.88E+041.53E+005.72E+011.63E+034.49E+04 - 26K1 32.001.21E+003.10E+016.42E+021.28E+047.50E-012.21E+015.38E+021.28E+04 - 26K1 40.006.24E-011.39E+012.52E+024.40E+033.96E-019.46E+001.96E+023.99E+03 - 26K1 50.003.19E-016.11E+009.57E+011.44E+032.11E-014.09E+007.14E+011.23E+03 - 26K1 65.001.44E-012.29E+002.98E+013.72E+021.02E-011.56E+002.20E+013.09E+02 - 26K1 80.007.64E-021.04E+001.16E+011.25E+025.79E-027.33E-018.74E+001.04E+02 - 26K1 100.003.86E-024.43E-014.20E+003.81E+013.18E-023.32E-013.29E+003.27E+01 - 26K1 120.002.20E-022.20E-011.82E+001.44E+011.97E-021.76E-011.50E+001.28E+01 - 26K1 150.001.11E-029.35E-026.55E-014.38E+001.10E-028.20E-025.85E-014.17E+00 - 26K1 200.004.67E-033.13E-021.78E-019.58E-015.33E-033.16E-021.80E-011.02E+00 - 26K1 300.001.42E-037.01E-032.98E-021.20E-011.99E-038.77E-033.69E-021.54E-01 - 26K1 450.004.71E-041.73E-035.61E-031.74E-027.75E-042.63E-038.42E-032.66E-02 - 26K1 650.001.91E-045.55E-041.44E-033.61E-033.45E-049.53E-042.45E-036.20E-03 - 26K11000.007.70E-051.77E-043.71E-047.50E-041.42E-043.18E-046.63E-041.35E-03 - 26K12000.002.40E-054.15E-056.72E-051.05E-043.91E-056.74E-051.09E-041.71E-04 - 26K16000.005.83E-067.44E-069.35E-061.16E-057.24E-069.39E-061.18E-051.47E-05 - 26L1 15.008.24E-012.75E+016.01E+028.21E+036.57E-015.65E+013.52E+032.09E+05 - 26L1 17.005.89E-011.91E+014.30E+027.13E+034.54E-013.34E+011.85E+039.81E+04 - 26L1 20.003.78E-011.16E+012.61E+024.84E+032.82E-011.70E+018.06E+023.70E+04 - 26L1 25.002.03E-015.66E+001.21E+022.29E+031.47E-016.81E+002.61E+029.80E+03 - 26L1 32.001.01E-012.46E+004.75E+018.45E+027.19E-022.52E+007.65E+012.29E+03 - 26L1 40.005.30E-021.13E+001.94E+013.11E+023.80E-021.04E+002.56E+016.26E+02 - 26L1 50.002.76E-025.09E-017.61E+001.08E+022.02E-024.39E-018.76E+001.74E+02 - 26L1 65.001.27E-021.95E-012.45E+002.92E+019.75E-031.62E-012.54E+003.97E+01 - 26L1 80.006.79E-038.99E-029.78E-011.01E+015.53E-037.52E-029.72E-011.26E+01 - 26L1 100.003.46E-033.89E-023.60E-013.18E+003.03E-033.35E-023.54E-013.76E+00 - 26L1 120.002.00E-031.95E-021.58E-011.22E+001.87E-031.76E-021.58E-011.43E+00 - 26L1 150.001.02E-038.40E-035.79E-023.80E-011.05E-038.11E-036.02E-024.49E-01 - 26L1 200.004.30E-042.85E-031.60E-028.50E-025.07E-043.09E-031.81E-021.06E-01 - 26L1 300.001.32E-046.46E-042.72E-031.09E-021.88E-048.47E-043.63E-031.55E-02 - 26L1 450.004.39E-051.61E-045.20E-041.61E-037.34E-052.52E-048.18E-042.62E-03 - 26L1 650.001.79E-055.19E-051.35E-043.38E-043.26E-059.08E-052.36E-046.03E-04 - 26L11000.007.21E-061.66E-053.49E-057.06E-051.34E-053.02E-056.33E-051.29E-04 - 26L12000.002.25E-063.90E-066.33E-069.95E-063.68E-066.36E-061.03E-051.62E-05 - 26L2 15.001.12E-014.72E+019.50E+031.14E+064.03E-025.35E+005.04E+024.13E+04 - 26L2 17.007.09E-022.51E+014.45E+034.76E+052.71E-023.19E+002.69E+021.99E+04 - 26L2 20.003.90E-021.11E+011.66E+031.53E+051.62E-021.63E+001.19E+027.64E+03 - 26L2 25.001.71E-023.61E+004.29E+023.24E+047.97E-036.46E-013.88E+012.05E+03 - 26L2 32.006.76E-031.04E+009.63E+015.81E+033.63E-032.32E-011.12E+014.75E+02 - 26L2 40.002.90E-033.41E-012.50E+011.23E+031.78E-039.21E-023.63E+001.26E+02 - 26L2 50.001.24E-031.12E-016.54E+002.62E+028.76E-043.65E-021.18E+003.36E+01 - 26L2 65.004.55E-043.02E-021.36E+004.28E+013.79E-041.24E-023.15E-017.12E+00 - 26L2 80.002.06E-041.08E-023.97E-011.03E+011.95E-045.25E-031.11E-012.09E+00 - 26L2 100.008.76E-053.61E-031.06E-012.26E+009.59E-052.10E-033.65E-025.65E-01 - 26L2 120.004.38E-051.49E-033.67E-026.61E-015.37E-059.98E-041.48E-021.96E-01 - 26L2 150.001.88E-055.07E-041.02E-021.50E-012.65E-054.04E-044.94E-035.40E-02 - 26L2 200.006.45E-061.30E-041.99E-032.30E-021.07E-051.27E-041.23E-031.06E-02 - 26L2 300.001.49E-062.03E-052.17E-041.79E-033.02E-062.59E-051.81E-041.13E-03 - 26L2 450.003.68E-073.47E-062.65E-051.60E-048.73E-075.52E-062.86E-051.34E-04 - 26L2 650.001.12E-077.76E-074.45E-062.07E-052.91E-071.44E-065.85E-062.15E-05 - 26L21000.003.10E-081.54E-076.54E-072.32E-068.39E-083.20E-071.02E-062.93E-06 - 26L22000.005.16E-091.63E-084.56E-081.13E-071.28E-083.49E-088.09E-081.72E-07 - 26L3 15.002.07E-018.47E+011.68E+041.99E+061.63E-021.48E+014.40E+035.95E+05 - 26L3 17.001.31E-014.48E+017.78E+038.25E+051.11E-028.00E+002.02E+032.43E+05 - 26L3 20.007.16E-021.96E+012.87E+032.63E+056.67E-033.60E+007.43E+027.63E+04 - 26L3 25.003.11E-026.28E+007.29E+025.44E+043.33E-031.21E+001.90E+021.58E+04 - 26L3 32.001.22E-021.78E+001.60E+029.49E+031.54E-033.64E-014.28E+012.80E+03 - 26L3 40.005.22E-035.70E-014.04E+011.95E+037.65E-041.24E-011.13E+015.98E+02 - 26L3 50.002.22E-031.83E-011.02E+014.02E+023.81E-044.27E-023.02E+001.30E+02 - 26L3 65.008.08E-044.80E-022.04E+006.26E+011.68E-041.23E-026.53E-012.20E+01 - 26L3 80.003.63E-041.67E-025.71E-011.44E+018.77E-054.65E-031.97E-015.49E+00 - 26L3 100.001.54E-045.39E-031.46E-012.98E+004.38E-051.65E-035.55E-021.26E+00 - 26L3 120.007.68E-052.15E-034.81E-028.28E-012.49E-057.17E-041.99E-023.84E-01 - 26L3 150.003.31E-057.05E-041.25E-021.74E-011.26E-052.61E-045.77E-039.15E-02 - 26L3 200.001.14E-051.71E-042.23E-032.38E-025.25E-067.26E-051.20E-031.49E-02 - 26L3 300.002.70E-062.46E-052.09E-041.54E-031.59E-061.27E-051.40E-041.25E-03 - 26L3 450.007.06E-073.96E-062.19E-051.12E-045.07E-072.41E-061.78E-051.17E-04 - 26L3 650.002.34E-078.65E-073.28E-061.23E-051.92E-075.93E-073.00E-061.50E-05 - 26L31000.007.46E-081.80E-074.56E-071.21E-066.78E-081.37E-074.34E-071.58E-06 - 26L32000.001.67E-082.45E-083.76E-086.18E-081.64E-082.12E-083.36E-086.73E-08 - 27K1 15.001.14E+013.63E+028.61E+031.95E+058.07E+004.92E+021.64E+044.80E+05 - 27K1 17.008.05E+002.55E+026.17E+031.43E+055.57E+003.01E+029.81E+032.90E+05 - 27K1 20.005.09E+001.55E+023.71E+038.55E+043.45E+001.59E+024.92E+031.42E+05 - 27K1 25.002.68E+007.53E+011.69E+033.64E+041.79E+006.67E+011.85E+034.89E+04 - 27K1 32.001.30E+003.23E+016.46E+021.25E+048.75E-012.57E+016.12E+021.42E+04 - 27K1 40.006.74E-011.46E+012.58E+024.37E+034.62E-011.10E+012.24E+024.47E+03 - 27K1 50.003.46E-016.48E+009.91E+011.46E+032.45E-014.75E+008.17E+011.39E+03 - 27K1 65.001.57E-012.44E+003.12E+013.82E+021.18E-011.80E+002.52E+013.50E+02 - 27K1 80.008.32E-021.11E+001.23E+011.30E+026.69E-028.46E-011.00E+011.18E+02 - 27K1 100.004.21E-024.77E-014.46E+003.99E+013.67E-023.82E-013.76E+003.71E+01 - 27K1 120.002.41E-022.38E-011.94E+001.52E+012.26E-022.02E-011.72E+001.46E+01 - 27K1 150.001.22E-021.01E-017.04E-014.65E+001.27E-029.41E-026.68E-014.74E+00 - 27K1 200.005.14E-033.42E-021.92E-011.03E+006.11E-033.62E-022.05E-011.16E+00 - 27K1 300.001.57E-037.69E-033.24E-021.30E-012.27E-031.00E-024.20E-021.75E-01 - 27K1 450.005.21E-041.91E-036.15E-031.90E-028.81E-043.00E-039.58E-033.02E-02 - 27K1 650.002.12E-046.15E-041.59E-033.98E-033.91E-041.08E-032.79E-037.04E-03 - 27K11000.008.55E-051.97E-044.12E-048.32E-041.60E-043.61E-047.52E-041.53E-03 - 27K12000.002.66E-054.62E-057.51E-051.18E-044.38E-057.60E-051.23E-041.93E-04 - 27K16000.006.44E-068.26E-061.04E-051.29E-058.02E-061.05E-051.32E-051.65E-05 - 27L1 15.008.77E-012.73E+015.27E+025.33E+037.80E-016.86E+014.26E+032.51E+05 - 27L1 17.006.28E-011.92E+013.91E+025.34E+035.39E-014.04E+012.23E+031.18E+05 - 27L1 20.004.05E-011.18E+012.46E+024.02E+033.34E-012.05E+019.70E+024.43E+04 - 27L1 25.002.19E-015.84E+001.18E+022.06E+031.74E-018.18E+003.13E+021.17E+04 - 27L1 32.001.09E-012.58E+004.76E+018.02E+028.49E-023.01E+009.13E+012.72E+03 - 27L1 40.005.76E-021.19E+001.97E+013.05E+024.48E-021.24E+003.05E+017.42E+02 - 27L1 50.003.01E-025.41E-017.87E+001.08E+022.38E-025.21E-011.04E+012.06E+02 - 27L1 65.001.39E-022.09E-012.57E+002.99E+011.14E-021.92E-013.00E+004.68E+01 - 27L1 80.007.46E-039.70E-021.03E+001.05E+016.47E-038.86E-021.14E+001.48E+01 - 27L1 100.003.82E-034.22E-023.84E-013.33E+003.55E-033.93E-024.15E-014.40E+00 - 27L1 120.002.20E-032.13E-021.70E-011.29E+002.19E-032.05E-021.85E-011.67E+00 - 27L1 150.001.13E-039.19E-036.26E-024.05E-011.22E-039.46E-037.02E-025.23E-01 - 27L1 200.004.77E-043.13E-031.74E-029.16E-025.88E-043.59E-032.10E-021.23E-01 - 27L1 300.001.47E-047.16E-042.99E-031.19E-022.18E-049.82E-044.21E-031.79E-02 - 27L1 450.004.92E-051.79E-045.76E-041.78E-038.43E-052.91E-049.42E-043.02E-03 - 27L1 650.002.01E-055.81E-051.51E-043.76E-043.74E-051.04E-042.71E-046.93E-04 - 27L11000.008.10E-061.87E-053.92E-057.93E-051.53E-053.46E-057.26E-051.48E-04 - 27L12000.002.52E-064.39E-067.15E-061.13E-054.17E-067.26E-061.18E-051.86E-05 - 27L2 15.001.30E-015.69E+011.15E+041.36E+064.91E-026.49E+006.05E+024.90E+04 - 27L2 17.008.25E-023.03E+015.38E+035.71E+053.30E-023.87E+003.24E+022.36E+04 - 27L2 20.004.56E-021.34E+012.01E+031.85E+051.98E-021.98E+001.44E+029.12E+03 - 27L2 25.002.00E-024.36E+005.20E+023.91E+049.74E-037.87E-014.69E+012.45E+03 - 27L2 32.007.97E-031.26E+001.17E+027.02E+034.45E-032.83E-011.36E+015.71E+02 - 27L2 40.003.44E-034.13E-013.05E+011.49E+032.19E-031.13E-014.41E+001.53E+02 - 27L2 50.001.48E-031.36E-017.98E+003.18E+021.07E-034.48E-021.44E+004.07E+01 - 27L2 65.005.44E-043.68E-021.66E+005.21E+014.66E-041.52E-023.85E-018.65E+00 - 27L2 80.002.46E-041.32E-024.85E-011.26E+012.41E-046.45E-031.36E-012.55E+00 - 27L2 100.001.05E-044.41E-031.31E-012.76E+001.18E-042.59E-034.48E-026.90E-01 - 27L2 120.005.28E-051.82E-034.51E-028.11E-016.64E-051.23E-031.82E-022.39E-01 - 27L2 150.002.28E-056.22E-041.25E-021.84E-013.28E-054.99E-046.09E-036.63E-02 - 27L2 200.007.83E-061.60E-042.46E-032.83E-021.33E-051.58E-041.51E-031.30E-02 - 27L2 300.001.81E-062.50E-052.69E-042.22E-033.75E-063.22E-052.24E-041.40E-03 - 27L2 450.004.50E-074.29E-063.29E-051.99E-041.09E-066.88E-063.56E-051.66E-04 - 27L2 650.001.37E-079.61E-075.53E-062.58E-053.63E-071.79E-067.29E-062.67E-05 - 27L21000.003.81E-081.92E-078.14E-072.89E-061.05E-074.00E-071.27E-063.66E-06 - 27L22000.006.35E-092.03E-085.68E-081.41E-071.60E-084.36E-081.01E-072.15E-07 - 27L3 15.002.39E-011.02E+022.02E+042.38E+061.96E-021.90E+015.79E+037.83E+05 - 27L3 17.001.51E-015.37E+019.38E+039.87E+051.33E-021.03E+012.66E+033.18E+05 - 27L3 20.008.32E-022.35E+013.46E+033.15E+058.00E-034.61E+009.72E+029.98E+04 - 27L3 25.003.63E-027.55E+008.80E+026.53E+043.99E-031.54E+002.47E+022.05E+04 - 27L3 32.001.43E-022.15E+001.93E+021.14E+041.85E-034.65E-015.54E+013.63E+03 - 27L3 40.006.15E-036.88E-014.89E+012.35E+039.21E-041.58E-011.46E+017.73E+02 - 27L3 50.002.62E-032.21E-011.24E+014.85E+024.59E-045.42E-023.88E+001.67E+02 - 27L3 65.009.58E-045.80E-022.48E+007.57E+012.02E-041.56E-028.37E-012.82E+01 - 27L3 80.004.32E-042.02E-026.94E-011.74E+011.06E-045.87E-032.52E-017.01E+00 - 27L3 100.001.84E-046.53E-031.77E-013.62E+005.30E-052.08E-037.06E-021.60E+00 - 27L3 120.009.19E-052.61E-035.85E-021.01E+003.02E-058.99E-042.53E-024.88E-01 - 27L3 150.003.96E-058.56E-041.52E-022.12E-011.52E-053.27E-047.31E-031.16E-01 - 27L3 200.001.37E-052.08E-042.72E-032.90E-026.37E-069.06E-051.52E-031.88E-02 - 27L3 300.003.26E-063.00E-052.55E-041.88E-031.93E-061.57E-051.76E-041.58E-03 - 27L3 450.008.54E-074.83E-062.67E-051.37E-046.15E-072.97E-062.23E-051.47E-04 - 27L3 650.002.83E-071.05E-064.01E-061.50E-052.33E-077.29E-073.74E-061.88E-05 - 27L31000.009.03E-082.19E-075.57E-071.48E-068.22E-081.67E-075.37E-071.97E-06 - 27L32000.002.02E-082.98E-084.58E-087.54E-081.98E-082.57E-084.10E-088.29E-08 - 28K1 15.001.21E+013.53E+027.51E+031.52E+059.41E+005.72E+021.76E+044.67E+05 - 28K1 17.008.55E+002.52E+025.60E+031.19E+056.50E+003.49E+021.07E+042.94E+05 - 28K1 20.005.41E+001.56E+023.50E+037.52E+044.02E+001.85E+025.45E+031.48E+05 - 28K1 25.002.86E+007.71E+011.64E+033.37E+042.09E+007.74E+012.07E+035.26E+04 - 28K1 32.001.40E+003.35E+016.46E+021.20E+041.02E+002.98E+016.92E+021.55E+04 - 28K1 40.007.25E-011.53E+012.62E+024.31E+035.35E-011.27E+012.54E+024.96E+03 - 28K1 50.003.73E-016.84E+001.02E+021.46E+032.84E-015.48E+009.29E+011.55E+03 - 28K1 65.001.69E-012.59E+003.25E+013.91E+021.36E-012.07E+002.87E+013.94E+02 - 28K1 80.009.03E-021.19E+001.29E+011.34E+027.71E-029.73E-011.14E+011.33E+02 - 28K1 100.004.58E-025.12E-014.72E+004.16E+014.22E-024.38E-014.29E+004.19E+01 - 28K1 120.002.63E-022.56E-012.07E+001.59E+012.60E-022.31E-011.95E+001.65E+01 - 28K1 150.001.34E-021.10E-017.52E-014.91E+001.45E-021.08E-017.60E-015.37E+00 - 28K1 200.005.63E-033.71E-022.06E-011.09E+006.97E-034.13E-022.33E-011.31E+00 - 28K1 300.001.73E-038.39E-033.51E-021.40E-012.58E-031.14E-024.76E-021.98E-01 - 28K1 450.005.75E-042.10E-036.72E-032.07E-029.99E-043.40E-031.09E-023.42E-02 - 28K1 650.002.35E-046.78E-041.75E-034.36E-034.42E-041.23E-033.15E-037.95E-03 - 28K11000.009.47E-052.18E-044.56E-049.20E-041.80E-044.07E-048.49E-041.72E-03 - 28K12000.002.94E-055.13E-058.35E-051.31E-044.89E-058.53E-051.39E-042.18E-04 - 28K16000.007.10E-069.13E-061.16E-051.44E-058.86E-061.16E-051.48E-051.84E-05 - 28L1 15.009.30E-012.69E+014.50E+023.07E+039.20E-018.27E+015.12E+032.99E+05 - 28L1 17.006.68E-011.91E+013.49E+023.73E+036.35E-014.86E+012.68E+031.40E+05 - 28L1 20.004.32E-011.19E+012.28E+023.22E+033.93E-012.46E+011.16E+035.26E+04 - 28L1 25.002.34E-015.99E+001.14E+021.82E+032.05E-019.77E+003.73E+021.39E+04 - 28L1 32.001.18E-012.68E+004.72E+017.51E+029.98E-023.58E+001.08E+023.22E+03 - 28L1 40.006.22E-021.25E+002.00E+012.95E+025.25E-021.47E+003.61E+018.75E+02 - 28L1 50.003.26E-025.73E-018.08E+001.07E+022.79E-026.15E-011.22E+012.42E+02 - 28L1 65.001.51E-022.23E-012.67E+003.04E+011.34E-022.25E-013.52E+005.48E+01 - 28L1 80.008.15E-031.04E-011.09E+001.08E+017.55E-031.04E-011.34E+001.73E+01 - 28L1 100.004.18E-034.55E-024.08E-013.47E+004.12E-034.59E-024.84E-015.13E+00 - 28L1 120.002.42E-032.30E-021.82E-011.36E+002.54E-032.39E-022.15E-011.94E+00 - 28L1 150.001.24E-031.00E-026.73E-024.30E-011.42E-031.10E-028.15E-026.06E-01 - 28L1 200.005.28E-043.43E-031.88E-029.83E-026.79E-044.16E-032.43E-021.42E-01 - 28L1 300.001.64E-047.89E-043.27E-031.30E-022.51E-041.13E-034.85E-032.07E-02 - 28L1 450.005.48E-051.99E-046.36E-041.95E-039.66E-053.34E-041.08E-033.46E-03 - 28L1 650.002.24E-056.48E-051.67E-044.17E-044.27E-051.20E-043.11E-047.94E-04 - 28L11000.009.07E-062.09E-054.39E-058.87E-051.74E-053.95E-058.30E-051.70E-04 - 28L12000.002.82E-064.93E-068.04E-061.27E-054.71E-068.24E-061.34E-052.12E-05 - 28L2 15.001.49E-016.80E+011.38E+041.62E+065.93E-027.81E+007.20E+025.76E+04 - 28L2 17.009.52E-023.63E+016.46E+036.80E+054.00E-024.67E+003.87E+022.79E+04 - 28L2 20.005.28E-021.60E+012.41E+032.20E+052.39E-022.39E+001.72E+021.08E+04 - 28L2 25.002.33E-025.23E+006.26E+024.68E+041.18E-029.51E-015.63E+012.92E+03 - 28L2 32.009.32E-031.52E+001.41E+028.42E+035.40E-033.43E-011.63E+016.82E+02 - 28L2 40.004.04E-034.97E-013.68E+011.79E+032.66E-031.37E-015.32E+001.83E+02 - 28L2 50.001.74E-031.63E-019.65E+003.83E+021.31E-035.44E-021.74E+004.89E+01 - 28L2 65.006.44E-044.44E-022.02E+006.30E+015.69E-041.85E-024.66E-011.04E+01 - 28L2 80.002.93E-041.60E-025.89E-011.52E+012.94E-047.87E-031.65E-013.08E+00 - 28L2 100.001.26E-045.35E-031.59E-013.35E+001.45E-043.16E-035.45E-028.37E-01 - 28L2 120.006.31E-052.21E-035.50E-029.86E-018.13E-051.51E-032.22E-022.91E-01 - 28L2 150.002.73E-057.56E-041.52E-022.25E-014.02E-056.12E-047.44E-038.07E-02 - 28L2 200.009.43E-061.95E-043.01E-033.46E-021.63E-051.94E-041.86E-031.59E-02 - 28L2 300.002.20E-063.06E-053.30E-042.72E-034.63E-063.96E-052.75E-041.71E-03 - 28L2 450.005.47E-075.27E-064.05E-052.44E-041.34E-068.50E-064.39E-052.04E-04 - 28L2 650.001.67E-071.18E-066.83E-063.18E-054.48E-072.22E-069.01E-063.30E-05 - 28L21000.004.65E-082.36E-071.01E-063.58E-061.29E-074.96E-071.58E-064.53E-06 - 28L22000.007.75E-092.49E-087.03E-081.74E-071.97E-085.42E-081.26E-072.67E-07 - 28L3 15.002.74E-011.21E+022.41E+042.80E+062.33E-022.41E+017.54E+031.02E+06 - 28L3 17.001.74E-016.40E+011.12E+041.17E+061.58E-021.30E+013.45E+034.13E+05 - 28L3 20.009.60E-022.80E+014.13E+033.73E+059.52E-035.85E+001.26E+031.29E+05 - 28L3 25.004.21E-029.01E+001.05E+037.76E+044.76E-031.96E+003.19E+022.64E+04 - 28L3 32.001.67E-022.56E+002.31E+021.36E+042.21E-035.87E-017.12E+014.66E+03 - 28L3 40.007.19E-038.23E-015.87E+012.81E+031.10E-031.99E-011.86E+019.88E+02 - 28L3 50.003.08E-032.64E-011.49E+015.80E+025.49E-046.82E-024.95E+002.13E+02 - 28L3 65.001.13E-036.96E-022.98E+009.07E+012.42E-041.96E-021.06E+003.58E+01 - 28L3 80.005.10E-042.43E-028.36E-012.09E+011.27E-047.35E-033.19E-018.89E+00 - 28L3 100.002.18E-047.85E-032.14E-014.35E+006.35E-052.60E-038.92E-022.03E+00 - 28L3 120.001.09E-043.14E-037.06E-021.21E+003.62E-051.12E-033.19E-026.15E-01 - 28L3 150.004.72E-051.03E-031.83E-022.55E-011.83E-054.06E-049.19E-031.46E-01 - 28L3 200.001.64E-052.51E-043.29E-033.51E-027.66E-061.12E-041.90E-032.37E-02 - 28L3 300.003.90E-063.62E-053.09E-042.28E-032.32E-061.93E-052.20E-041.98E-03 - 28L3 450.001.02E-065.84E-063.24E-051.66E-047.41E-073.64E-062.77E-051.83E-04 - 28L3 650.003.40E-071.27E-064.86E-061.82E-052.80E-078.90E-074.62E-062.34E-05 - 28L31000.001.09E-072.64E-076.75E-071.79E-069.88E-082.03E-076.60E-072.44E-06 - 28L32000.002.43E-083.58E-085.52E-089.12E-082.37E-083.09E-084.97E-081.01E-07 - 29K1 15.001.28E+013.40E+026.39E+031.14E+051.09E+016.62E+021.88E+044.44E+05 - 29K1 17.009.04E+002.47E+025.00E+039.64E+047.54E+004.04E+021.16E+042.92E+05 - 29K1 20.005.74E+001.56E+023.26E+036.51E+044.66E+002.14E+026.00E+031.53E+05 - 29K1 25.003.05E+007.85E+011.59E+033.10E+042.42E+008.94E+012.31E+035.62E+04 - 29K1 32.001.50E+003.46E+016.42E+021.15E+041.18E+003.44E+017.79E+021.69E+04 - 29K1 40.007.78E-011.60E+012.65E+024.23E+036.18E-011.46E+012.87E+025.48E+03 - 29K1 50.004.01E-017.18E+001.05E+021.46E+033.27E-016.31E+001.05E+021.73E+03 - 29K1 65.001.83E-012.75E+003.37E+013.97E+021.57E-012.38E+003.25E+014.41E+02 - 29K1 80.009.77E-021.27E+001.35E+011.37E+028.84E-021.11E+001.29E+011.50E+02 - 29K1 100.004.97E-025.47E-014.97E+004.32E+014.83E-025.01E-014.87E+004.72E+01 - 29K1 120.002.86E-022.74E-012.19E+001.66E+012.97E-022.64E-012.22E+001.86E+01 - 29K1 150.001.45E-021.18E-018.01E-015.17E+001.65E-021.23E-018.61E-016.05E+00 - 29K1 200.006.14E-034.01E-022.21E-011.16E+007.93E-034.69E-022.64E-011.48E+00 - 29K1 300.001.89E-039.13E-033.80E-021.50E-012.92E-031.29E-025.38E-022.23E-01 - 29K1 450.006.32E-042.29E-037.31E-032.24E-021.13E-033.85E-031.22E-023.85E-02 - 29K1 650.002.58E-047.45E-041.92E-034.76E-034.97E-041.38E-033.56E-038.96E-03 - 29K11000.001.04E-042.41E-045.03E-041.01E-032.02E-044.58E-049.56E-041.94E-03 - 29K12000.003.24E-055.68E-059.26E-051.46E-045.44E-059.54E-051.55E-042.44E-04 - 29K16000.007.79E-061.01E-051.28E-051.60E-059.75E-061.29E-051.64E-052.05E-05 - 29L1 15.009.82E-012.63E+013.73E+021.59E+031.08E+009.93E+016.13E+033.54E+05 - 29L1 17.007.07E-011.89E+013.05E+022.39E+037.46E-015.83E+013.20E+031.66E+05 - 29L1 20.004.59E-011.20E+012.09E+022.46E+034.61E-012.94E+011.38E+036.23E+04 - 29L1 25.002.50E-016.10E+001.08E+021.57E+032.40E-011.16E+014.43E+021.64E+04 - 29L1 32.001.26E-012.77E+004.65E+016.93E+021.17E-014.24E+001.28E+023.79E+03 - 29L1 40.006.70E-021.31E+002.01E+012.83E+026.14E-021.74E+004.25E+011.03E+03 - 29L1 50.003.53E-026.03E-018.25E+001.06E+023.25E-027.23E-011.44E+012.83E+02 - 29L1 65.001.64E-022.37E-012.77E+003.06E+011.56E-022.64E-014.11E+006.39E+01 - 29L1 80.008.87E-031.11E-011.14E+001.11E+018.76E-031.21E-011.56E+002.01E+01 - 29L1 100.004.57E-034.89E-024.31E-013.60E+004.78E-035.34E-025.63E-015.95E+00 - 29L1 120.002.65E-032.49E-021.93E-011.42E+002.93E-032.77E-022.49E-012.24E+00 - 29L1 150.001.36E-031.08E-027.20E-024.54E-011.63E-031.27E-029.42E-027.00E-01 - 29L1 200.005.81E-043.74E-032.03E-021.05E-017.81E-044.79E-032.80E-021.64E-01 - 29L1 300.001.81E-048.65E-043.57E-031.40E-022.87E-041.30E-035.56E-032.37E-02 - 29L1 450.006.08E-052.20E-046.99E-042.13E-031.10E-043.82E-041.24E-033.96E-03 - 29L1 650.002.49E-057.19E-051.85E-044.60E-044.85E-051.36E-043.55E-049.06E-04 - 29L11000.001.01E-052.34E-054.89E-059.88E-051.96E-054.49E-059.45E-051.93E-04 - 29L12000.003.14E-065.51E-069.01E-061.42E-055.29E-069.32E-061.52E-052.41E-05 - 29L2 15.001.71E-018.09E+011.64E+041.91E+067.12E-029.35E+008.52E+026.73E+04 - 29L2 17.001.09E-014.31E+017.70E+038.04E+054.80E-025.59E+004.58E+023.26E+04 - 29L2 20.006.08E-021.91E+012.88E+032.61E+052.88E-022.86E+002.04E+021.27E+04 - 29L2 25.002.69E-026.23E+007.49E+025.56E+041.42E-021.14E+006.70E+013.44E+03 - 29L2 32.001.08E-021.81E+001.69E+021.00E+046.52E-034.13E-011.95E+018.08E+02 - 29L2 40.004.72E-035.94E-014.42E+012.14E+033.21E-031.65E-016.37E+002.17E+02 - 29L2 50.002.04E-031.96E-011.16E+014.59E+021.58E-036.56E-022.08E+005.84E+01 - 29L2 65.007.58E-045.33E-022.43E+007.56E+016.89E-042.23E-025.61E-011.25E+01 - 29L2 80.003.46E-041.92E-027.11E-011.83E+013.57E-049.54E-031.99E-013.70E+00 - 29L2 100.001.49E-046.44E-031.92E-014.04E+001.76E-043.84E-036.59E-021.01E+00 - 29L2 120.007.50E-052.66E-036.65E-021.19E+009.90E-051.83E-032.68E-023.51E-01 - 29L2 150.003.26E-059.14E-041.85E-022.72E-014.90E-057.45E-049.03E-039.76E-02 - 29L2 200.001.13E-052.36E-043.66E-034.20E-021.99E-052.36E-042.26E-031.93E-02 - 29L2 300.002.64E-063.72E-054.02E-043.31E-035.67E-064.85E-053.36E-042.09E-03 - 29L2 450.006.59E-076.41E-064.95E-052.99E-041.65E-061.04E-055.38E-052.50E-04 - 29L2 650.002.02E-071.44E-068.36E-063.90E-055.51E-072.73E-061.11E-054.05E-05 - 29L21000.005.63E-082.88E-071.23E-064.39E-061.59E-076.11E-071.94E-065.58E-06 - 29L22000.009.39E-093.05E-088.64E-082.15E-072.42E-086.67E-081.55E-073.30E-07 - 29L3 15.003.12E-011.43E+022.86E+043.30E+062.75E-023.04E+019.76E+031.31E+06 - 29L3 17.001.99E-017.58E+011.33E+041.37E+061.86E-021.64E+014.46E+035.32E+05 - 29L3 20.001.10E-013.32E+014.91E+034.40E+051.13E-027.36E+001.62E+031.66E+05 - 29L3 25.004.84E-021.07E+011.25E+039.18E+045.63E-032.46E+004.09E+023.39E+04 - 29L3 32.001.93E-023.04E+002.75E+021.61E+042.61E-037.37E-019.09E+015.95E+03 - 29L3 40.008.34E-039.78E-017.00E+013.34E+031.30E-032.49E-012.37E+011.26E+03 - 29L3 50.003.58E-033.14E-011.78E+016.90E+026.51E-048.52E-026.27E+002.70E+02 - 29L3 65.001.32E-038.29E-023.56E+001.08E+022.88E-042.44E-021.34E+004.52E+01 - 29L3 80.005.98E-042.89E-021.00E+002.50E+011.51E-049.13E-034.02E-011.12E+01 - 29L3 100.002.56E-049.38E-032.56E-015.20E+007.57E-053.22E-031.12E-012.54E+00 - 29L3 120.001.29E-043.75E-038.47E-021.45E+004.32E-051.39E-033.99E-027.71E-01 - 29L3 150.005.57E-051.23E-032.20E-023.06E-012.18E-055.00E-041.15E-021.82E-01 - 29L3 200.001.94E-053.00E-043.95E-034.21E-029.15E-061.38E-042.37E-032.95E-02 - 29L3 300.004.63E-064.35E-053.72E-042.74E-032.77E-062.37E-052.72E-042.45E-03 - 29L3 450.001.22E-067.01E-063.90E-052.00E-048.85E-074.43E-063.41E-052.26E-04 - 29L3 650.004.05E-071.53E-065.86E-062.19E-053.35E-071.08E-065.68E-062.89E-05 - 29L31000.001.29E-073.17E-078.12E-072.16E-061.18E-072.44E-078.05E-072.99E-06 - 29L32000.002.89E-084.28E-086.62E-081.10E-072.83E-083.70E-085.98E-081.23E-07 - 30K1 15.001.34E+013.20E+025.22E+038.01E+041.26E+017.60E+021.95E+044.04E+05 - 30K1 17.009.52E+002.39E+024.34E+037.50E+048.71E+004.65E+021.24E+042.82E+05 - 30K1 20.006.07E+001.55E+022.98E+035.49E+045.38E+002.46E+026.52E+031.55E+05 - 30K1 25.003.24E+007.93E+011.52E+032.79E+042.79E+001.03E+022.55E+035.91E+04 - 30K1 32.001.59E+003.56E+016.32E+021.08E+041.36E+003.95E+018.69E+021.83E+04 - 30K1 40.008.31E-011.66E+012.66E+024.11E+037.11E-011.68E+013.22E+025.99E+03 - 30K1 50.004.30E-017.51E+001.06E+021.45E+033.76E-017.22E+001.19E+021.91E+03 - 30K1 65.001.97E-012.89E+003.48E+014.01E+021.80E-012.72E+003.67E+014.90E+02 - 30K1 80.001.05E-011.34E+001.40E+011.40E+021.01E-011.27E+001.46E+011.67E+02 - 30K1 100.005.36E-025.82E-015.21E+004.46E+015.51E-025.70E-015.49E+005.28E+01 - 30K1 120.003.09E-022.93E-012.31E+001.73E+013.38E-023.00E-012.50E+002.08E+01 - 30K1 150.001.58E-021.27E-018.49E-015.42E+001.88E-021.39E-019.72E-016.78E+00 - 30K1 200.006.68E-034.32E-022.36E-011.23E+008.99E-035.31E-022.97E-011.66E+00 - 30K1 300.002.07E-039.90E-034.08E-021.61E-013.30E-031.46E-026.06E-022.50E-01 - 30K1 450.006.93E-042.50E-037.93E-032.42E-021.27E-034.33E-031.38E-024.32E-02 - 30K1 650.002.84E-048.16E-042.10E-035.19E-035.57E-041.55E-033.99E-031.00E-02 - 30K11000.001.15E-042.65E-045.53E-041.11E-032.25E-045.13E-041.07E-032.17E-03 - 30K12000.003.56E-056.26E-051.02E-041.61E-046.03E-051.06E-041.74E-042.73E-04 - 30K16000.008.52E-061.10E-051.41E-051.76E-051.07E-051.42E-051.82E-052.27E-05 - 30L1 15.001.03E+002.55E+012.98E+021.04E+031.26E+001.19E+027.29E+034.18E+05 - 30L1 17.007.46E-011.86E+012.59E+021.40E+038.71E-016.94E+013.80E+031.95E+05 - 30L1 20.004.85E-011.19E+011.88E+021.78E+035.39E-013.49E+011.64E+037.32E+04 - 30L1 25.002.66E-016.18E+001.02E+021.31E+032.79E-011.38E+015.23E+021.92E+04 - 30L1 32.001.35E-012.84E+004.53E+016.29E+021.36E-015.00E+001.51E+024.44E+03 - 30L1 40.007.18E-021.36E+002.00E+012.69E+027.13E-022.04E+004.98E+011.20E+03 - 30L1 50.003.79E-026.32E-018.37E+001.03E+023.77E-028.46E-011.68E+013.30E+02 - 30L1 65.001.77E-022.50E-012.86E+003.07E+011.80E-023.08E-014.79E+007.42E+01 - 30L1 80.009.61E-031.18E-011.19E+001.12E+011.01E-021.41E-011.81E+002.33E+01 - 30L1 100.004.96E-035.23E-024.52E-013.71E+005.51E-036.18E-026.51E-016.87E+00 - 30L1 120.002.89E-032.67E-022.04E-011.48E+003.38E-033.21E-022.88E-012.59E+00 - 30L1 150.001.49E-031.17E-027.66E-024.77E-011.88E-031.46E-021.08E-018.05E-01 - 30L1 200.006.37E-044.05E-032.18E-021.11E-018.95E-045.51E-033.22E-021.88E-01 - 30L1 300.001.99E-049.45E-043.87E-031.51E-023.28E-041.49E-036.36E-032.71E-02 - 30L1 450.006.72E-052.42E-047.65E-042.32E-031.25E-044.35E-041.41E-034.51E-03 - 30L1 650.002.76E-057.95E-052.04E-045.06E-045.49E-051.55E-044.04E-041.03E-03 - 30L11000.001.12E-052.59E-055.43E-051.10E-042.22E-055.09E-051.07E-042.19E-04 - 30L12000.003.48E-066.13E-061.01E-051.59E-055.92E-061.05E-051.72E-052.72E-05 - 30L2 15.001.94E-019.55E+011.94E+042.24E+068.50E-021.11E+019.99E+027.77E+04 - 30L2 17.001.24E-015.10E+019.12E+039.42E+055.73E-026.64E+005.38E+023.78E+04 - 30L2 20.006.95E-022.26E+013.42E+033.07E+053.44E-023.41E+002.40E+021.48E+04 - 30L2 25.003.09E-027.38E+008.89E+026.55E+041.70E-021.36E+007.92E+014.02E+03 - 30L2 32.001.25E-022.15E+002.01E+021.19E+047.80E-034.93E-012.31E+019.49E+02 - 30L2 40.005.46E-037.06E-015.26E+012.54E+033.85E-031.97E-017.57E+002.56E+02 - 30L2 50.002.37E-032.33E-011.38E+015.45E+021.90E-037.86E-022.48E+006.91E+01 - 30L2 65.008.86E-046.35E-022.90E+009.01E+018.30E-042.68E-026.70E-011.48E+01 - 30L2 80.004.05E-042.29E-028.51E-012.19E+014.30E-041.15E-022.39E-014.40E+00 - 30L2 100.001.75E-047.70E-032.30E-014.84E+002.13E-044.62E-037.91E-021.20E+00 - 30L2 120.008.84E-053.19E-037.99E-021.43E+001.20E-042.21E-033.23E-024.20E-01 - 30L2 150.003.85E-051.10E-032.22E-023.27E-015.93E-058.99E-041.09E-021.17E-01 - 30L2 200.001.34E-052.84E-044.41E-035.06E-022.41E-052.86E-042.72E-032.32E-02 - 30L2 300.003.14E-064.48E-054.86E-044.00E-036.87E-065.88E-054.07E-042.52E-03 - 30L2 450.007.89E-077.75E-066.00E-053.62E-042.00E-061.27E-056.54E-053.03E-04 - 30L2 650.002.43E-071.74E-061.02E-054.74E-056.71E-073.33E-061.35E-054.93E-05 - 30L21000.006.77E-083.49E-071.50E-065.36E-061.94E-077.47E-072.37E-066.81E-06 - 30L22000.001.13E-083.70E-081.05E-072.62E-072.94E-088.17E-081.90E-074.04E-07 - 30L3 15.003.53E-011.68E+023.36E+043.83E+063.22E-023.81E+011.25E+041.67E+06 - 30L3 17.002.25E-018.92E+011.56E+041.60E+062.19E-022.05E+015.69E+036.77E+05 - 30L3 20.001.25E-013.91E+015.79E+035.13E+051.32E-029.19E+002.06E+032.11E+05 - 30L3 25.005.53E-021.26E+011.48E+031.07E+056.62E-033.07E+005.19E+024.29E+04 - 30L3 32.002.22E-023.59E+003.25E+021.89E+043.07E-039.17E-011.15E+027.50E+03 - 30L3 40.009.61E-031.15E+008.28E+013.92E+031.54E-033.10E-012.98E+011.58E+03 - 30L3 50.004.14E-033.71E-012.11E+018.13E+027.68E-041.06E-017.87E+003.38E+02 - 30L3 65.001.53E-039.81E-024.23E+001.28E+023.40E-043.01E-021.68E+005.65E+01 - 30L3 80.006.96E-043.43E-021.19E+002.96E+011.78E-041.13E-025.01E-011.39E+01 - 30L3 100.002.99E-041.11E-023.05E-016.16E+008.95E-053.96E-031.39E-013.16E+00 - 30L3 120.001.50E-044.45E-031.01E-011.72E+005.11E-051.70E-034.95E-029.57E-01 - 30L3 150.006.54E-051.47E-032.62E-023.64E-012.58E-056.13E-041.42E-022.26E-01 - 30L3 200.002.28E-053.57E-044.71E-035.01E-021.08E-051.68E-042.92E-033.65E-02 - 30L3 300.005.46E-065.18E-054.44E-043.26E-033.29E-062.87E-053.35E-043.02E-03 - 30L3 450.001.44E-068.35E-064.66E-052.39E-041.05E-065.35E-064.18E-052.78E-04 - 30L3 650.004.80E-071.82E-067.00E-062.62E-053.97E-071.29E-066.91E-063.54E-05 - 30L31000.001.53E-073.77E-079.69E-072.58E-061.40E-072.92E-079.75E-073.65E-06 - 30L32000.003.42E-085.08E-087.87E-081.31E-073.34E-084.38E-087.15E-081.49E-07 - 30K 10.663.34E+014.62E+022.22E+038.36E+033.47E+012.91E+034.52E+042.83E+05 - 30K 11.362.82E+014.75E+023.73E+032.52E+042.87E+012.27E+034.24E+044.32E+05 - 30K 12.662.11E+014.37E+025.30E+035.83E+042.08E+011.48E+033.35E+045.21E+05 - 30K 15.861.15E+012.86E+024.99E+038.21E+041.06E+016.08E+021.62E+043.55E+05 - 30K 19.666.34E+001.63E+023.16E+035.84E+045.63E+002.61E+027.01E+031.67E+05 - 30K 24.003.62E+009.03E+011.75E+033.25E+043.13E+001.20E+023.04E+037.15E+04 - 30K 30.001.91E+004.41E+018.07E+021.42E+041.63E+005.04E+011.15E+032.51E+04 - 30K 38.009.60E-011.98E+013.27E+025.20E+038.19E-012.03E+014.03E+027.77E+03 - 30K 50.004.28E-017.48E+001.06E+021.46E+033.74E-017.18E+001.18E+021.91E+03 - 30K 63.002.15E-013.23E+003.97E+014.69E+021.95E-013.03E+004.19E+015.75E+02 - 30K 80.001.05E-011.33E+001.40E+011.40E+021.00E-011.26E+001.45E+011.66E+02 - 30K 93.006.64E-027.60E-017.17E+006.47E+016.66E-027.34E-017.50E+007.63E+01 - 30K 110.004.00E-024.04E-013.39E+002.71E+014.24E-024.05E-013.61E+003.22E+01 - 30K 133.002.25E-021.98E-011.45E+001.01E+012.56E-022.09E-011.60E+001.23E+01 - 30K 160.001.29E-029.87E-026.32E-013.86E+001.58E-021.11E-017.38E-014.90E+00 - 30K 225.004.70E-032.78E-021.40E-016.69E-016.65E-033.60E-021.84E-019.41E-01 - 30K 310.001.87E-038.75E-033.53E-021.36E-013.03E-031.31E-025.32E-022.15E-01 - 30K 400.009.35E-043.65E-031.25E-024.08E-021.66E-036.07E-032.08E-027.04E-02 - 30K 510.005.02E-041.67E-034.91E-031.39E-029.49E-043.01E-038.88E-032.57E-02 - 30K 740.002.11E-045.65E-041.36E-033.14E-034.19E-041.09E-032.63E-036.17E-03 - 30K 1000.001.14E-042.63E-045.49E-041.10E-032.24E-045.10E-041.06E-032.16E-03 - 30K 1250.007.55E-051.58E-043.02E-045.55E-041.44E-042.99E-045.70E-041.05E-03 - 30K 1500.005.53E-051.08E-041.93E-043.33E-041.01E-041.97E-043.52E-046.07E-04 - 30L1 2.197.33E+012.68E+041.80E+073.46E+093.87E+027.29E+052.54E+083.82E+10 - 30L1 2.894.39E+013.90E+034.37E+061.09E+091.69E+021.96E+055.41E+078.57E+09 - 30L1 4.192.07E+017.14E+014.44E+051.34E+085.56E+013.45E+046.89E+069.78E+08 - 30L1 7.395.84E+006.98E+013.45E+032.25E+061.02E+012.59E+033.09E+053.11E+07 - 30L1 11.192.14E+004.79E+011.95E+023.85E+042.95E+004.11E+023.33E+042.44E+06 - 30L1 15.001.02E+002.55E+013.09E+021.07E+031.24E+001.16E+027.12E+034.09E+05 - 30L1 21.004.20E-011.03E+011.68E+021.82E+034.57E-012.77E+011.25E+035.35E+04 - 30L1 29.001.74E-013.86E+006.35E+018.85E+021.77E-017.29E+002.41E+027.77E+03 - 30L1 41.006.59E-021.23E+001.81E+012.43E+026.51E-021.81E+004.31E+011.02E+03 - 30L1 54.002.99E-024.76E-016.08E+007.25E+012.97E-026.13E-011.13E+012.08E+02 - 30L1 71.001.34E-021.79E-011.95E+001.99E+011.38E-022.15E-013.09E+004.42E+01 - 30L1 84.008.18E-039.75E-029.49E-018.75E+008.68E-031.15E-011.41E+001.74E+01 - 30L1 101.004.73E-034.96E-024.27E-013.49E+005.25E-035.83E-026.09E-016.36E+00 - 30L1 124.002.57E-032.32E-021.74E-011.24E+003.03E-032.79E-022.43E-012.13E+00 - 30L1 150.001.46E-031.15E-027.54E-024.70E-011.84E-031.43E-021.06E-017.87E-01 - 30L1 215.005.07E-043.06E-031.56E-027.62E-027.31E-044.24E-032.34E-021.29E-01 - 30L1 300.001.96E-049.28E-043.80E-031.48E-023.21E-041.46E-036.23E-032.65E-02 - 30L1 390.009.59E-053.78E-041.31E-034.33E-031.72E-046.53E-042.32E-038.19E-03 - 30L1 500.005.06E-051.70E-045.06E-041.44E-039.69E-053.16E-049.59E-042.86E-03 - 30L1 730.002.09E-055.65E-051.37E-043.20E-044.21E-051.12E-042.74E-046.55E-04 - 30L11000.001.10E-052.54E-055.32E-051.07E-042.18E-055.01E-051.05E-042.16E-04 - 30L2 2.041.26E+022.16E+063.18E+091.07E+124.11E+013.57E+049.18E+061.61E+09 - 30L2 2.745.22E+014.86E+055.42E+081.85E+111.65E+011.09E+042.87E+065.71E+08 - 30L2 4.041.56E+016.82E+045.22E+071.56E+104.94E+002.27E+035.22E+059.66E+07 - 30L2 7.242.32E+003.59E+031.54E+063.17E+088.01E-012.11E+023.38E+044.56E+06 - 30L2 11.045.51E-014.29E+021.20E+051.78E+072.14E-013.76E+014.37E+034.35E+05 - 30L2 15.001.88E-019.22E+011.88E+042.17E+068.19E-021.07E+019.68E+027.56E+04 - 30L2 21.005.65E-021.70E+012.46E+032.12E+052.84E-022.69E+001.82E+021.08E+04 - 30L2 29.001.74E-023.39E+003.50E+022.27E+041.03E-027.12E-013.65E+011.64E+03 - 30L2 41.004.82E-036.02E-014.37E+012.07E+033.44E-031.71E-016.45E+002.14E+02 - 30L2 54.001.72E-031.53E-018.42E+003.10E+021.44E-035.52E-021.63E+004.24E+01 - 30L2 71.006.14E-043.97E-021.66E+004.75E+016.05E-041.80E-024.16E-018.53E+00 - 30L2 84.003.26E-041.74E-026.15E-011.51E+013.55E-049.05E-031.80E-013.19E+00 - 30L2 101.001.63E-047.07E-032.09E-014.36E+001.98E-044.27E-037.25E-021.09E+00 - 30L2 124.007.55E-052.62E-036.37E-021.11E+001.04E-041.86E-032.65E-023.35E-01 - 30L2 150.003.72E-051.06E-032.14E-023.14E-015.71E-058.66E-041.05E-021.13E-01 - 30L2 215.009.96E-061.95E-042.84E-033.07E-021.86E-052.07E-041.86E-031.49E-02 - 30L2 300.003.03E-064.31E-054.68E-043.85E-036.63E-065.67E-053.92E-042.43E-03 - 30L2 390.001.21E-061.37E-051.19E-048.00E-042.98E-062.09E-051.19E-046.08E-04 - 30L2 500.005.31E-074.82E-063.43E-051.92E-041.41E-068.29E-063.97E-051.71E-04 - 30L2 730.001.66E-071.07E-065.73E-062.48E-054.62E-072.13E-068.04E-062.74E-05 - 30L21000.006.52E-083.36E-071.45E-065.16E-061.87E-077.20E-072.29E-066.56E-06 - 30L3 2.022.50E+024.29E+066.43E+092.19E+121.53E+017.93E+056.26E+095.54E+12 - 30L3 2.721.02E+029.45E+051.06E+093.68E+116.10E+001.80E+058.36E+085.63E+11 - 30L3 4.022.99E+011.30E+059.96E+072.99E+101.82E+002.56E+046.10E+072.86E+10 - 30L3 7.224.35E+006.64E+032.83E+065.83E+082.98E-011.38E+031.29E+063.48E+08 - 30L3 11.021.02E+007.77E+022.14E+053.18E+078.08E-021.69E+028.46E+041.53E+07 - 30L3 15.003.42E-011.63E+023.25E+043.73E+063.11E-023.66E+011.20E+041.61E+06 - 30L3 21.001.01E-012.94E+014.15E+033.54E+051.10E-026.95E+001.46E+031.43E+05 - 30L3 29.003.09E-025.71E+005.74E+023.66E+044.03E-031.43E+002.01E+021.44E+04 - 30L3 41.008.47E-039.82E-016.86E+013.19E+031.37E-032.65E-012.47E+011.28E+03 - 30L3 54.002.99E-032.42E-011.27E+014.56E+025.83E-047.02E-024.79E+001.92E+02 - 30L3 71.001.06E-036.05E-022.38E+006.61E+012.49E-041.91E-029.63E-012.98E+01 - 30L3 84.005.59E-042.58E-028.50E-012.02E+011.48E-048.62E-033.64E-019.67E+00 - 30L3 101.002.78E-041.02E-022.76E-015.54E+008.37E-053.64E-031.26E-012.85E+00 - 30L3 124.001.28E-043.65E-037.96E-021.32E+004.45E-051.41E-033.96E-027.43E-01 - 30L3 150.006.30E-051.41E-032.53E-023.51E-012.49E-055.90E-041.36E-022.17E-01 - 30L3 215.001.69E-052.43E-042.96E-032.95E-028.42E-061.17E-041.90E-032.23E-02 - 30L3 300.005.26E-064.99E-054.27E-043.14E-033.17E-062.77E-053.22E-042.90E-03 - 30L3 390.002.18E-061.51E-059.79E-055.70E-041.50E-069.22E-068.29E-056.12E-04 - 30L3 500.009.99E-075.12E-062.57E-051.20E-047.60E-073.39E-062.38E-051.46E-04 - 30L3 730.003.40E-071.12E-063.85E-061.31E-052.85E-078.18E-073.86E-061.81E-05 - 30L31000.001.50E-073.64E-079.35E-072.49E-061.35E-072.81E-079.39E-073.51E-06 - 30M1 1.143.56E+016.02E+042.94E+079.86E+084.16E+022.89E+063.57E+091.90E+12 - 30M1 2.141.20E+011.95E+032.23E+065.83E+086.27E+011.36E+057.46E+072.52E+10 - 30M1 4.143.16E+002.09E+004.82E+041.70E+078.66E+005.93E+031.51E+062.97E+08 - 30M1 8.146.78E-011.18E+018.40E+011.18E+051.14E+002.67E+023.29E+043.56E+06 - 30M1 15.141.45E-013.69E+004.75E+012.16E+021.80E-011.73E+011.13E+036.92E+04 - 30M1 25.003.83E-028.95E-011.49E+011.93E+024.09E-022.07E+008.18E+013.14E+03 - 30M1 40.001.04E-021.96E-012.89E+003.88E+011.04E-023.04E-017.62E+001.88E+02 - 30M1 52.004.91E-037.97E-021.03E+001.24E+014.94E-031.08E-012.10E+004.07E+01 - 30M1 70.002.07E-032.78E-023.02E-013.10E+002.15E-033.44E-025.07E-017.46E+00 - 30M1 103.006.62E-046.83E-035.81E-024.71E-017.45E-048.19E-038.49E-028.81E-01 - 30M1 150.002.17E-041.70E-031.11E-026.93E-022.75E-042.15E-031.61E-021.20E-01 - 30M2 1.096.10E+017.10E+062.86E+102.61E+133.86E+019.12E+046.37E+073.22E+10 - 30M2 2.091.20E+012.64E+054.78E+082.84E+115.25E+005.59E+032.55E+069.23E+08 - 30M2 4.091.76E+008.90E+037.54E+062.71E+096.64E-013.36E+029.28E+042.13E+07 - 30M2 8.092.05E-012.88E+021.16E+052.39E+078.03E-021.99E+013.17E+034.28E+05 - 30M2 15.092.49E-021.27E+012.64E+033.13E+051.15E-021.53E+001.42E+021.14E+04 - 30M2 25.004.16E-031.01E+001.24E+029.35E+032.36E-031.91E-011.13E+015.87E+02 - 30M2 40.007.46E-049.77E-027.36E+003.59E+025.37E-042.76E-021.07E+003.67E+01 - 30M2 52.002.82E-042.66E-021.53E+005.87E+012.34E-049.39E-032.88E-017.82E+00 - 30M2 70.009.27E-056.14E-032.62E-017.65E+009.17E-052.78E-036.53E-021.36E+00 - 30M2 103.002.19E-059.35E-042.72E-025.60E-012.71E-055.76E-049.63E-031.43E-01 - 30M2 150.005.40E-061.53E-043.12E-034.59E-028.32E-061.26E-041.53E-031.65E-02 - 30M3 1.091.19E+021.33E+075.35E+104.82E+131.38E+012.56E+066.91E+102.01E+14 - 30M3 2.092.29E+014.92E+058.85E+085.21E+111.87E+009.84E+047.92E+089.82E+11 - 30M3 4.093.30E+001.64E+041.38E+074.89E+092.37E-013.43E+038.52E+064.79E+09 - 30M3 8.093.78E-015.20E+022.07E+054.21E+072.92E-021.15E+029.49E+042.55E+07 - 30M3 15.094.51E-022.22E+014.54E+035.33E+054.30E-035.18E+001.74E+032.46E+05 - 30M3 25.007.40E-031.72E+002.06E+021.52E+049.06E-044.29E-017.44E+016.36E+03 - 30M3 40.001.31E-031.59E-011.15E+015.52E+022.12E-044.34E-024.25E+002.30E+02 - 30M3 52.004.89E-044.21E-022.31E+008.65E+019.39E-051.22E-028.86E-013.73E+01 - 30M3 70.001.59E-049.34E-033.74E-011.06E+013.74E-052.96E-031.54E-014.90E+00 - 30M3 103.003.71E-051.34E-033.56E-027.02E-011.14E-054.83E-041.66E-023.70E-01 - 30M3 150.009.06E-062.04E-043.66E-035.09E-023.60E-068.57E-052.00E-033.20E-02 - 30M4 1.014.68E+011.37E+059.01E+091.50E+141.18E+002.16E+042.98E+087.12E+11 - 30M4 2.013.46E+003.84E+036.82E+074.15E+111.10E-016.58E+023.26E+064.33E+09 - 30M4 4.012.13E-011.01E+025.00E+051.21E+099.47E-031.95E+013.78E+042.68E+07 - 30M4 8.011.10E-022.40E+003.62E+033.67E+067.42E-045.67E-014.56E+021.69E+05 - 30M4 15.016.63E-047.48E-024.14E+011.98E+046.85E-052.26E-028.56E+001.74E+03 - 30M4 25.006.31E-054.28E-031.10E+002.91E+029.48E-061.64E-033.44E-014.25E+01 - 30M4 40.006.94E-062.95E-043.95E-026.12E+001.47E-061.45E-041.81E-021.42E+00 - 30M5 1.016.84E+011.95E+051.34E+102.19E+147.72E-013.13E+031.23E+098.20E+13 - 30M5 2.015.05E+005.45E+031.01E+086.02E+117.46E-021.01E+029.94E+061.83E+11 - 30M5 4.013.08E-011.42E+027.41E+051.74E+096.69E-033.22E+007.96E+044.34E+08 - 30M5 8.011.59E-023.36E+005.31E+035.20E+065.50E-041.03E-016.39E+021.13E+06 - 30M5 15.019.51E-041.03E-015.98E+012.75E+045.31E-054.57E-038.13E+005.73E+03 - 30M5 25.009.01E-055.84E-031.56E+003.94E+027.64E-063.62E-042.40E-018.54E+01 - 30M5 40.009.85E-063.95E-045.45E-027.98E+001.23E-063.48E-059.59E-031.89E+00 - 31K 11.372.94E+013.73E+021.58E+035.11E+033.30E+012.59E+033.69E+042.04E+05 - 31K 12.072.51E+013.86E+022.68E+031.58E+042.76E+012.05E+033.50E+043.16E+05 - 31K 13.371.91E+013.61E+023.91E+033.81E+042.04E+011.37E+032.84E+043.95E+05 - 31K 16.571.07E+012.46E+023.91E+035.84E+041.08E+015.87E+021.45E+042.90E+05 - 31K 20.376.06E+001.46E+022.61E+034.45E+045.84E+002.61E+026.56E+031.46E+05 - 31K 24.003.83E+009.06E+011.65E+032.87E+043.60E+001.37E+023.34E+037.42E+04 - 31K 30.002.03E+004.49E+017.85E+021.32E+041.87E+005.77E+011.28E+032.68E+04 - 31K 38.001.02E+002.04E+013.25E+025.00E+039.40E-012.32E+014.51E+028.44E+03 - 31K 50.004.57E-017.80E+001.08E+021.44E+034.28E-018.19E+001.33E+022.10E+03 - 31K 63.002.30E-013.39E+004.08E+014.71E+022.23E-013.46E+004.72E+016.37E+02 - 31K 80.001.12E-011.41E+001.45E+011.43E+021.15E-011.44E+001.64E+011.85E+02 - 31K 93.007.15E-028.06E-017.48E+006.64E+017.59E-028.35E-018.44E+008.51E+01 - 31K 110.004.31E-024.30E-013.55E+002.80E+014.82E-024.59E-014.07E+003.60E+01 - 31K 133.002.43E-022.11E-011.52E+001.05E+012.91E-022.37E-011.81E+001.38E+01 - 31K 160.001.40E-021.06E-016.69E-014.04E+001.79E-021.26E-018.30E-015.48E+00 - 31K 225.005.10E-032.99E-021.49E-017.08E-017.51E-034.06E-022.07E-011.05E+00 - 31K 310.002.04E-039.46E-033.79E-021.45E-013.41E-031.47E-025.97E-022.40E-01 - 31K 400.001.02E-033.96E-031.35E-024.38E-021.86E-036.83E-032.33E-027.88E-02 - 31K 510.005.48E-041.81E-035.32E-031.50E-021.06E-033.38E-039.95E-032.88E-02 - 31K 740.002.31E-046.18E-041.48E-033.42E-034.68E-041.23E-032.95E-036.90E-03 - 31K 1000.001.25E-042.88E-046.01E-041.21E-032.49E-045.70E-041.19E-032.41E-03 - 31K 1250.008.28E-051.74E-043.32E-046.10E-041.60E-043.34E-046.37E-041.18E-03 - 31K 1500.006.07E-051.19E-042.12E-043.66E-041.12E-042.20E-043.93E-046.78E-04 - 31L1 2.306.73E+012.55E+041.52E+072.59E+093.93E+027.17E+052.38E+083.28E+10 - 31L1 3.004.12E+014.17E+034.04E+069.14E+081.77E+022.03E+055.39E+077.97E+09 - 31L1 4.302.00E+011.22E+024.61E+051.26E+086.01E+013.74E+047.27E+069.83E+08 - 31L1 7.505.83E+005.44E+015.09E+032.56E+061.14E+012.93E+033.43E+053.36E+07 - 31L1 11.302.18E+004.33E+011.02E+025.81E+043.34E+004.72E+023.79E+042.72E+06 - 31L1 15.001.07E+002.46E+012.39E+021.41E+031.44E+001.38E+028.46E+034.81E+05 - 31L1 21.004.43E-011.03E+011.52E+021.32E+035.31E-013.28E+011.47E+036.27E+04 - 31L1 29.001.85E-013.93E+006.08E+017.72E+022.06E-018.58E+002.83E+029.08E+03 - 31L1 41.007.05E-021.28E+001.80E+012.30E+027.54E-022.11E+005.04E+011.18E+03 - 31L1 54.003.21E-024.98E-016.17E+007.11E+013.43E-027.14E-011.32E+012.41E+02 - 31L1 71.001.45E-021.89E-012.01E+002.00E+011.59E-022.50E-013.58E+005.11E+01 - 31L1 84.008.84E-031.03E-019.86E-018.89E+001.00E-021.33E-011.63E+002.01E+01 - 31L1 101.005.13E-035.29E-024.47E-013.59E+006.04E-036.74E-027.02E-017.33E+00 - 31L1 124.002.80E-032.49E-021.84E-011.28E+003.48E-033.22E-022.80E-012.44E+00 - 31L1 150.001.59E-031.24E-028.00E-024.92E-012.11E-031.65E-021.22E-019.03E-01 - 31L1 215.005.54E-043.31E-031.68E-028.09E-028.35E-044.86E-032.68E-021.47E-01 - 31L1 300.002.14E-041.01E-034.10E-031.59E-023.66E-041.66E-037.10E-033.02E-02 - 31L1 390.001.05E-044.14E-041.42E-034.68E-031.95E-047.43E-042.64E-039.31E-03 - 31L1 500.005.57E-051.87E-045.53E-041.57E-031.10E-043.59E-041.09E-033.25E-03 - 31L1 730.002.32E-056.24E-051.51E-043.51E-044.75E-051.27E-043.10E-047.42E-04 - 31L11000.001.22E-052.82E-055.89E-051.19E-042.45E-055.66E-051.19E-042.44E-04 - 31L2 2.141.18E+022.00E+062.79E+098.52E+114.19E+013.45E+048.07E+061.26E+09 - 31L2 2.845.09E+014.76E+055.11E+081.63E+111.74E+011.11E+042.71E+064.94E+08 - 31L2 4.141.58E+017.08E+045.28E+071.50E+105.41E+002.42E+035.27E+059.19E+07 - 31L2 7.342.47E+003.93E+031.66E+063.33E+089.09E-012.35E+023.65E+044.75E+06 - 31L2 11.146.00E-014.82E+021.33E+051.95E+072.47E-014.28E+014.86E+034.72E+05 - 31L2 15.002.13E-011.08E+022.21E+042.53E+069.72E-021.27E+011.13E+038.72E+04 - 31L2 21.006.43E-022.01E+012.90E+032.48E+053.38E-023.19E+002.14E+021.25E+04 - 31L2 29.001.99E-024.00E+004.15E+022.66E+041.22E-028.46E-014.30E+011.91E+03 - 31L2 41.005.56E-037.12E-015.18E+012.44E+034.10E-032.04E-017.64E+002.52E+02 - 31L2 54.001.99E-031.81E-011.00E+013.67E+021.72E-036.59E-021.93E+005.01E+01 - 31L2 71.007.15E-044.71E-021.97E+005.64E+017.25E-042.15E-024.95E-011.01E+01 - 31L2 84.003.80E-042.06E-027.33E-011.80E+014.26E-041.08E-022.15E-013.79E+00 - 31L2 101.001.91E-048.42E-032.50E-015.19E+002.38E-045.12E-038.66E-021.30E+00 - 31L2 124.008.88E-053.13E-037.61E-021.32E+001.25E-042.24E-033.16E-023.99E-01 - 31L2 150.004.39E-051.26E-032.56E-023.76E-016.88E-051.04E-031.25E-021.35E-01 - 31L2 215.001.17E-052.34E-043.41E-033.68E-022.24E-052.50E-042.24E-031.79E-02 - 31L2 300.003.59E-065.18E-055.63E-044.63E-038.02E-066.85E-054.72E-042.92E-03 - 31L2 390.001.47E-061.65E-051.44E-049.64E-043.61E-062.53E-051.44E-047.34E-04 - 31L2 500.006.47E-075.80E-064.14E-052.32E-041.71E-061.00E-054.81E-052.07E-04 - 31L2 730.001.95E-071.29E-066.95E-063.00E-055.60E-072.58E-069.76E-063.32E-05 - 31L21000.007.82E-084.06E-071.75E-066.25E-062.27E-078.76E-072.78E-067.97E-06 - 31L3 2.122.35E+023.96E+065.66E+091.76E+121.55E+017.85E+056.01E+095.08E+12 - 31L3 2.829.94E+019.27E+051.01E+093.24E+116.40E+001.88E+058.68E+085.64E+11 - 31L3 4.123.04E+011.35E+051.01E+082.88E+101.98E+002.84E+046.80E+073.11E+10 - 31L3 7.324.62E+007.26E+033.05E+066.11E+083.34E-011.61E+031.53E+064.07E+08 - 31L3 11.121.10E+008.69E+022.38E+053.46E+079.18E-022.01E+021.03E+051.83E+07 - 31L3 15.003.85E-011.90E+023.81E+044.32E+063.63E-024.55E+011.53E+042.05E+06 - 31L3 21.001.15E-013.45E+014.87E+034.12E+051.28E-028.63E+001.85E+031.80E+05 - 31L3 29.003.53E-026.70E+006.75E+024.28E+044.71E-031.77E+002.53E+021.81E+04 - 31L3 41.009.71E-031.15E+008.08E+013.73E+031.61E-033.27E-013.10E+011.60E+03 - 31L3 54.003.45E-032.85E-011.50E+015.36E+026.84E-048.65E-025.98E+002.39E+02 - 31L3 71.001.22E-037.12E-022.80E+007.78E+012.93E-042.34E-021.20E+003.71E+01 - 31L3 84.006.48E-043.05E-021.00E+002.38E+011.74E-041.06E-024.51E-011.20E+01 - 31L3 101.003.23E-041.20E-023.27E-016.54E+009.85E-054.45E-031.56E-013.53E+00 - 31L3 124.001.49E-044.31E-039.43E-021.56E+005.24E-051.72E-034.88E-029.18E-01 - 31L3 150.007.36E-051.67E-032.99E-024.15E-012.93E-057.19E-041.68E-022.68E-01 - 31L3 215.001.99E-052.87E-043.51E-033.49E-029.94E-061.43E-042.33E-032.75E-02 - 31L3 300.006.22E-065.91E-055.08E-043.73E-033.74E-063.34E-053.94E-043.56E-03 - 31L3 390.002.62E-061.79E-051.16E-046.77E-041.77E-061.11E-051.01E-047.49E-04 - 31L3 500.001.19E-066.08E-063.05E-051.43E-048.98E-074.07E-062.89E-051.79E-04 - 31L3 730.003.89E-071.33E-064.57E-061.56E-053.37E-079.77E-074.67E-062.21E-05 - 31L31000.001.75E-074.30E-071.11E-062.96E-061.59E-073.35E-071.13E-064.26E-06 - 31M1 1.163.43E+016.29E+042.57E+074.09E+084.63E+023.29E+064.10E+092.10E+12 - 31M1 2.161.20E+012.34E+032.30E+065.29E+087.17E+011.61E+058.92E+072.95E+10 - 31M1 4.163.22E+005.51E+005.76E+041.84E+071.00E+017.15E+031.83E+063.55E+08 - 31M1 8.167.07E-011.02E+011.77E+021.55E+051.34E+003.22E+023.98E+044.27E+06 - 31M1 15.161.53E-013.61E+003.84E+012.29E+022.11E-012.08E+011.36E+038.28E+04 - 31M1 25.004.11E-029.14E-011.41E+011.68E+024.81E-022.47E+009.81E+013.76E+03 - 31M1 40.001.12E-022.05E-012.90E+003.69E+011.23E-023.61E-019.05E+002.24E+02 - 31M1 52.005.34E-038.43E-021.06E+001.22E+015.79E-031.28E-012.49E+004.81E+01 - 31M1 70.002.26E-032.97E-023.15E-013.15E+002.51E-034.05E-025.96E-018.77E+00 - 31M1 103.007.28E-047.37E-036.16E-024.96E-018.68E-049.59E-039.94E-021.03E+00 - 31M1 150.002.39E-041.85E-031.20E-027.34E-023.19E-042.51E-031.87E-021.40E-01 - 31M2 1.116.09E+017.73E+063.12E+102.72E+134.38E+011.03E+056.92E+073.27E+10 - 31M2 2.111.25E+013.00E+055.46E+083.16E+116.13E+006.53E+032.90E+061.01E+09 - 31M2 4.111.91E+001.04E+048.82E+063.11E+097.88E-013.98E+021.08E+052.42E+07 - 31M2 8.112.30E-013.41E+021.38E+052.79E+079.62E-022.38E+013.73E+034.97E+05 - 31M2 15.112.85E-021.51E+013.15E+033.71E+051.39E-021.84E+001.69E+021.34E+04 - 31M2 25.004.84E-031.22E+001.50E+021.12E+042.87E-032.32E-011.36E+017.02E+02 - 31M2 40.008.77E-041.18E-018.91E+004.34E+026.54E-043.36E-021.30E+004.41E+01 - 31M2 52.003.33E-043.21E-021.86E+007.10E+012.86E-041.14E-023.49E-019.43E+00 - 31M2 70.001.10E-047.44E-033.19E-019.28E+001.12E-043.39E-037.94E-021.65E+00 - 31M2 103.002.61E-051.13E-033.32E-026.82E-013.33E-057.05E-041.18E-021.74E-01 - 31M2 150.006.44E-061.87E-043.81E-035.61E-021.02E-051.55E-041.87E-032.02E-02 - 31M3 1.101.20E+021.47E+075.95E+105.17E+131.56E+013.03E+068.44E+102.50E+14 - 31M3 2.102.41E+015.63E+051.02E+095.86E+112.16E+001.20E+051.01E+091.27E+12 - 31M3 4.103.60E+001.91E+041.61E+075.64E+092.79E-014.28E+031.11E+076.29E+09 - 31M3 8.104.23E-016.13E+022.46E+054.92E+073.46E-021.44E+021.24E+053.34E+07 - 31M3 15.105.14E-022.64E+015.41E+036.30E+055.11E-036.54E+002.26E+033.20E+05 - 31M3 25.008.56E-032.06E+002.47E+021.82E+041.08E-035.44E-019.62E+018.24E+03 - 31M3 40.001.53E-031.91E-011.39E+016.61E+022.53E-045.48E-025.45E+002.95E+02 - 31M3 52.005.73E-045.05E-022.78E+001.04E+021.12E-041.54E-021.13E+004.77E+01 - 31M3 70.001.88E-041.12E-024.51E-011.28E+014.48E-053.72E-031.96E-016.24E+00 - 31M3 103.004.40E-051.60E-034.30E-028.46E-011.36E-056.04E-042.10E-024.69E-01 - 31M3 150.001.08E-052.47E-044.43E-036.15E-024.32E-061.07E-042.52E-034.04E-02 - 31M4 1.025.70E+011.72E+051.20E+102.06E+141.54E+002.93E+044.16E+089.80E+11 - 31M4 2.024.39E+004.97E+039.37E+075.86E+111.47E-019.16E+024.66E+066.13E+09 - 31M4 4.022.78E-011.33E+027.01E+051.73E+091.28E-022.75E+015.44E+043.85E+07 - 31M4 8.021.48E-023.24E+005.12E+035.28E+061.02E-038.07E-016.60E+022.44E+05 - 31M4 15.029.05E-041.03E-015.89E+012.85E+049.54E-053.23E-021.24E+012.51E+03 - 31M4 25.008.75E-055.95E-031.58E+004.23E+021.33E-052.35E-035.01E-016.18E+01 - 31M4 40.009.66E-064.13E-045.66E-028.89E+002.08E-062.09E-042.63E-022.06E+00 - 31M5 1.028.35E+012.45E+051.78E+103.00E+141.00E+004.20E+031.75E+091.22E+14 - 31M5 2.026.40E+007.05E+031.40E+088.51E+119.90E-021.38E+021.46E+072.83E+11 - 31M5 4.024.03E-011.88E+021.04E+062.48E+099.03E-034.48E+001.19E+056.76E+08 - 31M5 8.022.13E-024.53E+007.53E+037.49E+067.54E-041.45E-019.59E+021.76E+06 - 31M5 15.021.30E-031.42E-018.52E+013.97E+047.36E-056.42E-031.22E+018.87E+03 - 31M5 25.001.25E-048.10E-032.24E+005.71E+021.07E-055.12E-043.61E-011.32E+02 - 31M5 40.001.38E-055.52E-047.82E-021.16E+011.73E-064.93E-051.44E-022.89E+00 - 32K 12.102.59E+013.03E+021.14E+033.17E+033.14E+012.31E+033.03E+041.49E+05 - 32K 12.802.24E+013.15E+021.94E+031.00E+042.66E+011.85E+032.90E+042.33E+05 - 32K 14.101.73E+012.99E+022.90E+032.51E+041.99E+011.26E+032.41E+043.01E+05 - 32K 17.309.97E+002.12E+023.07E+034.17E+041.09E+015.65E+021.29E+042.37E+05 - 32K 21.105.78E+001.30E+022.15E+033.39E+046.03E+002.59E+026.12E+031.26E+05 - 32K 25.003.60E+008.00E+011.36E+032.22E+043.65E+001.34E+023.06E+036.40E+04 - 32K 31.001.95E+004.10E+016.77E+021.07E+041.94E+005.80E+011.22E+032.43E+04 - 32K 39.001.01E+001.92E+012.92E+024.27E+039.97E-012.40E+014.47E+028.01E+03 - 32K 51.004.60E-017.56E+001.01E+021.29E+034.61E-018.66E+001.36E+022.08E+03 - 32K 64.002.35E-013.35E+003.90E+014.37E+022.43E-013.70E+004.93E+016.48E+02 - 32K 81.001.16E-011.42E+001.42E+011.36E+021.26E-011.56E+001.74E+011.92E+02 - 32K 94.007.43E-028.18E-017.41E+006.43E+018.37E-029.10E-019.05E+008.95E+01 - 32K 111.004.51E-024.41E-013.56E+002.75E+015.33E-025.03E-014.40E+003.83E+01 - 32K 134.002.56E-022.18E-011.55E+001.05E+013.22E-022.60E-011.96E+001.48E+01 - 32K 160.001.51E-021.13E-017.06E-014.21E+002.02E-021.42E-019.32E-016.11E+00 - 32K 225.005.52E-033.20E-021.58E-017.46E-018.46E-034.57E-022.32E-011.17E+00 - 32K 310.002.21E-031.02E-024.06E-021.54E-013.83E-031.66E-026.69E-022.68E-01 - 32K 400.001.11E-034.28E-031.45E-024.69E-022.09E-037.66E-032.61E-028.79E-02 - 32K 510.005.98E-041.97E-035.75E-031.61E-021.19E-033.79E-031.11E-023.21E-02 - 32K 740.002.52E-046.74E-041.61E-033.71E-035.22E-041.37E-033.29E-037.70E-03 - 32K 1000.001.36E-043.15E-046.57E-041.32E-032.77E-046.36E-041.33E-032.69E-03 - 32K 1250.009.06E-051.90E-043.63E-046.68E-041.77E-043.71E-047.10E-041.31E-03 - 32K 1500.006.64E-051.30E-042.33E-044.02E-041.24E-042.44E-044.38E-047.55E-04 - 32L1 2.416.11E+012.36E+041.25E+071.88E+093.92E+026.89E+052.17E+082.72E+10 - 32L1 3.113.84E+014.31E+033.64E+067.41E+081.83E+022.05E+055.24E+077.18E+09 - 32L1 4.411.92E+011.78E+024.66E+051.16E+086.44E+013.99E+047.52E+069.63E+08 - 32L1 7.615.79E+004.08E+016.86E+032.81E+061.26E+013.27E+033.77E+053.56E+07 - 32L1 11.412.21E+003.86E+016.02E+018.02E+043.76E+005.37E+024.25E+042.99E+06 - 32L1 15.001.12E+002.34E+011.74E+022.90E+031.67E+001.63E+029.99E+035.63E+05 - 32L1 21.004.67E-011.02E+011.34E+029.04E+026.15E-013.87E+011.73E+037.31E+04 - 32L1 29.001.96E-013.98E+005.76E+016.57E+022.38E-011.01E+013.32E+021.06E+04 - 32L1 41.007.51E-021.32E+001.78E+012.15E+028.71E-022.47E+005.87E+011.37E+03 - 32L1 54.003.44E-025.19E-016.22E+006.90E+013.96E-028.30E-011.53E+012.79E+02 - 32L1 71.001.56E-021.99E-012.06E+002.00E+011.83E-022.89E-014.13E+005.89E+01 - 32L1 84.009.54E-031.09E-011.02E+008.98E+001.15E-021.53E-011.88E+002.31E+01 - 32L1 101.005.55E-035.62E-024.66E-013.66E+006.93E-037.75E-028.08E-018.42E+00 - 32L1 124.003.03E-032.66E-021.93E-011.33E+003.98E-033.69E-023.21E-012.80E+00 - 32L1 150.001.73E-031.32E-028.46E-025.13E-012.41E-031.89E-021.39E-011.03E+00 - 32L1 215.006.05E-043.57E-031.79E-028.55E-029.50E-045.54E-033.05E-021.68E-01 - 32L1 300.002.35E-041.10E-034.42E-031.70E-024.15E-041.89E-038.07E-033.43E-02 - 32L1 390.001.16E-044.51E-041.54E-035.04E-032.21E-048.43E-043.00E-031.05E-02 - 32L1 500.006.13E-052.04E-046.02E-041.71E-031.24E-044.07E-041.23E-033.68E-03 - 32L1 730.002.55E-056.86E-051.66E-043.85E-045.34E-051.43E-043.51E-048.38E-04 - 32L11000.001.34E-053.11E-056.50E-051.31E-042.75E-056.38E-051.35E-042.75E-04 - 32L2 2.251.10E+021.82E+062.42E+096.75E+114.23E+013.30E+047.05E+069.80E+08 - 32L2 2.954.93E+014.62E+054.76E+081.41E+111.83E+011.11E+042.53E+064.22E+08 - 32L2 4.251.60E+017.28E+045.28E+071.42E+105.88E+002.55E+035.27E+058.64E+07 - 32L2 7.452.61E+004.28E+031.78E+063.46E+081.02E+002.60E+023.91E+044.90E+06 - 32L2 11.256.49E-015.37E+021.47E+052.11E+072.83E-014.84E+015.37E+035.08E+05 - 32L2 15.002.40E-011.27E+022.59E+042.93E+061.15E-011.49E+011.31E+039.98E+04 - 32L2 21.007.28E-022.35E+013.40E+032.89E+054.00E-023.75E+002.50E+021.45E+04 - 32L2 29.002.27E-024.69E+004.88E+023.11E+041.45E-029.99E-015.03E+012.22E+03 - 32L2 41.006.38E-038.36E-016.11E+012.86E+034.87E-032.41E-018.98E+002.94E+02 - 32L2 54.002.30E-032.14E-011.18E+014.31E+022.05E-037.82E-022.28E+005.87E+01 - 32L2 71.008.28E-045.55E-022.34E+006.65E+018.64E-042.56E-025.85E-011.19E+01 - 32L2 84.004.42E-042.44E-028.69E-012.13E+015.08E-041.29E-022.55E-014.47E+00 - 32L2 101.002.22E-049.96E-032.96E-016.15E+002.85E-046.11E-031.03E-011.54E+00 - 32L2 124.001.04E-043.71E-039.05E-021.56E+001.50E-042.67E-033.76E-024.73E-01 - 32L2 150.005.12E-051.50E-033.05E-024.47E-018.24E-051.24E-031.49E-021.60E-01 - 32L2 215.001.38E-052.79E-044.08E-034.39E-022.69E-053.00E-042.67E-032.13E-02 - 32L2 300.004.26E-066.18E-056.74E-045.54E-039.64E-068.23E-055.66E-043.49E-03 - 32L2 390.001.74E-061.97E-051.72E-041.15E-034.34E-063.04E-051.73E-048.79E-04 - 32L2 500.007.63E-076.94E-064.97E-052.78E-042.06E-061.21E-055.79E-052.49E-04 - 32L2 730.002.31E-071.55E-068.36E-063.62E-056.76E-073.12E-061.18E-054.00E-05 - 32L21000.009.19E-084.88E-072.12E-067.55E-062.74E-071.06E-063.36E-069.62E-06 - 32L3 2.222.20E+023.63E+064.94E+091.40E+121.55E+017.69E+055.70E+094.59E+12 - 32L3 2.929.65E+019.01E+059.43E+082.83E+116.65E+001.95E+058.88E+085.56E+11 - 32L3 4.223.07E+011.38E+051.01E+082.74E+102.13E+003.11E+047.48E+073.33E+10 - 32L3 7.424.87E+007.87E+033.26E+066.34E+083.72E-011.86E+031.80E+064.69E+08 - 32L3 11.221.19E+009.66E+022.62E+053.73E+071.04E-012.38E+021.23E+052.18E+07 - 32L3 15.004.32E-012.21E+024.45E+044.98E+064.22E-025.62E+011.93E+042.59E+06 - 32L3 21.001.30E-014.02E+015.69E+034.77E+051.49E-021.06E+012.33E+032.27E+05 - 32L3 29.004.00E-027.81E+007.89E+024.97E+045.49E-032.18E+003.17E+022.27E+04 - 32L3 41.001.11E-021.35E+009.46E+014.35E+031.87E-034.01E-013.86E+011.99E+03 - 32L3 54.003.95E-033.33E-011.75E+016.25E+027.98E-041.06E-017.43E+002.96E+02 - 32L3 71.001.41E-038.34E-023.29E+009.11E+013.42E-042.86E-021.48E+004.59E+01 - 32L3 84.007.46E-043.57E-021.18E+002.79E+012.03E-041.29E-025.56E-011.48E+01 - 32L3 101.003.73E-041.41E-023.85E-017.67E+001.15E-045.42E-031.93E-014.34E+00 - 32L3 124.001.73E-045.06E-031.11E-011.83E+006.14E-052.09E-036.00E-021.13E+00 - 32L3 150.008.53E-051.96E-033.53E-024.88E-013.44E-058.71E-042.06E-023.28E-01 - 32L3 215.002.30E-053.38E-044.14E-034.12E-021.16E-051.72E-042.84E-033.36E-02 - 32L3 300.007.17E-066.96E-056.00E-044.40E-034.39E-064.02E-054.79E-044.34E-03 - 32L3 390.002.99E-062.11E-051.38E-047.99E-042.08E-061.33E-051.23E-049.11E-04 - 32L3 500.001.37E-067.17E-063.61E-051.69E-041.05E-064.86E-063.50E-052.17E-04 - 32L3 730.004.57E-071.57E-065.40E-061.85E-053.94E-071.16E-065.62E-062.67E-05 - 32L31000.002.02E-075.06E-071.31E-063.50E-061.86E-073.96E-071.35E-065.15E-06 - 32M1 1.183.32E+016.56E+042.24E+072.70E+085.16E+023.75E+064.71E+092.34E+12 - 32M1 2.181.20E+012.76E+032.36E+064.75E+088.19E+011.90E+051.07E+083.45E+10 - 32M1 4.183.29E+001.26E+016.77E+041.96E+071.16E+018.59E+032.22E+064.25E+08 - 32M1 8.187.36E-018.68E+003.17E+021.96E+051.56E+003.88E+024.81E+045.12E+06 - 32M1 15.181.62E-013.51E+003.00E+013.85E+022.47E-012.49E+011.63E+039.89E+04 - 32M1 25.004.41E-029.32E-011.33E+011.31E+025.66E-022.96E+001.17E+024.49E+03 - 32M1 40.001.21E-022.15E-012.90E+003.48E+011.44E-024.28E-011.08E+012.65E+02 - 32M1 52.005.79E-038.90E-021.08E+001.20E+016.77E-031.51E-012.94E+005.68E+01 - 32M1 70.002.46E-033.16E-023.27E-013.18E+002.93E-034.76E-027.01E-011.03E+01 - 32M1 103.007.98E-047.94E-036.52E-025.09E-011.01E-031.12E-021.16E-011.20E+00 - 32M1 150.002.63E-042.01E-031.28E-027.75E-023.70E-042.92E-032.17E-021.62E-01 - 32M2 1.136.08E+018.37E+063.38E+102.83E+134.94E+011.17E+057.48E+073.32E+10 - 32M2 2.131.31E+013.41E+056.21E+083.49E+117.12E+007.59E+033.27E+061.09E+09 - 32M2 4.132.08E+001.21E+041.03E+073.56E+099.31E-014.69E+021.25E+052.73E+07 - 32M2 8.132.56E-014.01E+021.63E+053.26E+071.15E-012.84E+014.39E+035.75E+05 - 32M2 15.133.25E-021.79E+013.76E+034.39E+051.67E-022.20E+002.01E+021.58E+04 - 32M2 25.005.60E-031.46E+001.81E+021.35E+043.47E-032.80E-011.64E+018.36E+02 - 32M2 40.001.03E-031.42E-011.08E+015.21E+027.95E-044.07E-021.56E+005.29E+01 - 32M2 52.003.91E-043.87E-022.25E+008.56E+013.48E-041.39E-024.22E-011.13E+01 - 32M2 70.001.30E-048.98E-033.86E-011.12E+011.37E-044.12E-039.62E-021.99E+00 - 32M2 103.003.11E-051.37E-034.03E-028.27E-014.07E-058.60E-041.43E-022.11E-01 - 32M2 150.007.73E-062.27E-044.65E-036.83E-021.25E-051.90E-042.28E-032.45E-02 - 32M3 1.121.21E+021.61E+076.55E+105.49E+131.75E+013.54E+061.02E+113.05E+14 - 32M3 2.122.53E+016.41E+051.17E+096.54E+112.50E+001.46E+051.28E+091.63E+12 - 32M3 4.123.90E+002.23E+041.88E+076.47E+093.26E-015.31E+031.43E+078.18E+09 - 32M3 8.124.71E-017.21E+022.90E+055.74E+074.07E-021.81E+021.60E+054.34E+07 - 32M3 15.125.84E-023.12E+016.42E+037.41E+056.04E-038.23E+002.92E+034.14E+05 - 32M3 25.009.88E-032.46E+002.96E+022.17E+041.29E-036.87E-011.24E+021.06E+04 - 32M3 40.001.78E-032.28E-011.66E+017.90E+023.02E-046.89E-026.97E+003.78E+02 - 32M3 52.006.70E-046.04E-023.34E+001.24E+021.34E-041.94E-021.44E+006.08E+01 - 32M3 70.002.21E-041.35E-025.43E-011.53E+015.36E-054.66E-032.48E-017.92E+00 - 32M3 103.005.21E-051.93E-035.18E-021.02E+001.63E-057.53E-042.65E-025.93E-01 - 32M3 150.001.29E-052.97E-045.34E-037.41E-025.19E-061.32E-043.16E-035.08E-02 - 32M4 1.036.75E+012.10E+051.53E+102.71E+141.95E+003.84E+045.62E+081.30E+12 - 32M4 2.035.42E+006.27E+031.25E+088.02E+111.91E-011.24E+036.47E+068.41E+09 - 32M4 4.033.55E-011.72E+029.55E+052.40E+091.70E-023.79E+017.63E+045.36E+07 - 32M4 8.031.93E-024.28E+007.06E+037.41E+061.37E-031.12E+009.31E+023.43E+05 - 32M4 15.031.21E-031.37E-018.17E+014.02E+041.30E-044.51E-021.75E+013.54E+03 - 32M4 25.001.18E-048.08E-032.21E+005.99E+021.83E-053.31E-037.12E-018.78E+01 - 32M4 40.001.32E-055.66E-047.93E-021.26E+012.88E-062.94E-043.75E-022.93E+00 - 32M5 1.039.90E+012.98E+052.29E+103.95E+141.26E+005.46E+032.39E+091.74E+14 - 32M5 2.037.91E+008.87E+031.87E+081.16E+121.28E-011.85E+022.07E+074.21E+11 - 32M5 4.035.14E-012.42E+021.42E+063.46E+091.19E-026.06E+001.72E+051.02E+09 - 32M5 8.032.78E-025.96E+001.04E+041.05E+071.01E-031.97E-011.40E+032.67E+06 - 32M5 15.031.72E-031.89E-011.19E+025.59E+049.95E-058.80E-031.79E+011.34E+04 - 32M5 25.001.68E-041.10E-023.14E+008.09E+021.46E-057.06E-045.31E-011.98E+02 - 32M5 40.001.86E-057.53E-041.10E-011.64E+012.38E-066.82E-052.11E-024.31E+00 - 33K 12.872.30E+012.48E+028.27E+022.00E+032.99E+012.06E+032.50E+041.09E+05 - 33K 13.572.00E+012.59E+021.42E+036.42E+032.56E+011.67E+032.42E+041.74E+05 - 33K 14.871.57E+012.49E+022.16E+031.67E+041.95E+011.17E+032.05E+042.30E+05 - 33K 18.079.28E+001.82E+022.41E+032.97E+041.09E+015.43E+021.15E+041.94E+05 - 33K 21.875.50E+001.15E+021.77E+032.58E+046.20E+002.57E+025.69E+031.09E+05 - 33K 26.003.39E+007.10E+011.13E+031.72E+043.72E+001.31E+022.83E+035.55E+04 - 33K 32.001.88E+003.75E+015.85E+028.76E+032.02E+005.83E+011.17E+032.21E+04 - 33K 40.009.92E-011.80E+012.62E+023.65E+031.06E+002.47E+014.43E+027.60E+03 - 33K 52.004.61E-017.32E+009.37E+011.15E+034.97E-019.13E+001.39E+022.05E+03 - 33K 65.002.39E-013.31E+003.73E+014.04E+022.64E-013.96E+005.14E+016.57E+02 - 33K 82.001.20E-011.42E+001.39E+011.30E+021.38E-011.69E+001.84E+012.00E+02 - 33K 95.007.71E-028.29E-017.33E+006.20E+019.20E-029.90E-019.67E+009.38E+01 - 33K 112.004.71E-024.51E-013.56E+002.70E+015.88E-025.50E-014.73E+004.05E+01 - 33K 135.002.69E-022.25E-011.57E+001.04E+013.57E-022.86E-012.13E+001.58E+01 - 33K 160.001.62E-021.20E-017.42E-014.38E+002.28E-021.59E-011.04E+006.80E+00 - 33K 225.005.96E-033.43E-021.68E-017.83E-019.51E-035.13E-022.60E-011.31E+00 - 33K 310.002.40E-031.09E-024.33E-021.63E-014.30E-031.85E-027.47E-022.98E-01 - 33K 400.001.21E-034.62E-031.55E-025.00E-022.33E-038.56E-032.91E-029.79E-02 - 33K 510.006.50E-042.13E-036.20E-031.73E-021.33E-034.23E-031.24E-023.57E-02 - 33K 740.002.74E-047.32E-041.75E-034.02E-035.80E-041.53E-033.66E-038.56E-03 - 33K 1000.001.48E-043.44E-047.16E-041.44E-033.07E-047.07E-041.48E-032.99E-03 - 33K 1250.009.85E-052.08E-043.97E-047.30E-041.96E-044.13E-047.90E-041.46E-03 - 33K 1500.007.22E-051.42E-042.55E-044.40E-041.37E-042.71E-044.86E-048.39E-04 - 33L1 2.535.62E+012.21E+041.06E+071.41E+093.96E+026.72E+052.03E+082.33E+10 - 33L1 3.233.60E+014.45E+033.32E+066.14E+081.90E+022.10E+055.16E+076.61E+09 - 33L1 4.531.84E+012.40E+024.71E+051.07E+086.90E+014.27E+047.83E+069.55E+08 - 33L1 7.735.76E+002.96E+018.80E+033.05E+061.39E+013.66E+034.14E+053.80E+07 - 33L1 11.532.24E+003.42E+016.84E+011.05E+054.22E+006.11E+024.77E+043.28E+06 - 33L1 15.001.17E+002.22E+011.20E+025.66E+031.92E+001.93E+021.18E+046.56E+05 - 33L1 21.004.91E-011.00E+011.16E+026.00E+027.10E-014.55E+012.03E+038.51E+04 - 33L1 29.002.07E-014.01E+005.41E+015.48E+022.74E-011.18E+013.87E+021.23E+04 - 33L1 41.007.99E-021.35E+001.75E+011.98E+021.00E-012.87E+006.81E+011.59E+03 - 33L1 54.003.67E-025.40E-016.25E+006.66E+014.55E-029.61E-011.77E+013.21E+02 - 33L1 71.001.67E-022.09E-012.10E+001.98E+012.10E-023.33E-014.76E+006.77E+01 - 33L1 84.001.02E-021.15E-011.05E+009.03E+001.31E-021.76E-012.16E+002.65E+01 - 33L1 101.005.97E-035.94E-024.84E-013.73E+007.92E-038.90E-029.26E-019.63E+00 - 33L1 124.003.27E-032.83E-022.02E-011.36E+004.55E-034.23E-023.67E-013.20E+00 - 33L1 150.001.87E-031.41E-028.90E-025.33E-012.74E-032.15E-021.59E-011.18E+00 - 33L1 215.006.56E-043.84E-031.90E-029.00E-021.08E-036.31E-033.47E-021.91E-01 - 33L1 300.002.56E-041.19E-034.74E-031.81E-024.70E-042.14E-039.15E-033.88E-02 - 33L1 390.001.26E-044.90E-041.66E-035.42E-032.49E-049.54E-043.39E-031.19E-02 - 33L1 500.006.72E-052.23E-046.54E-041.85E-031.40E-044.59E-041.39E-034.15E-03 - 33L1 730.002.80E-057.52E-051.81E-044.20E-046.00E-051.61E-043.95E-049.45E-04 - 33L11000.001.47E-053.42E-057.15E-051.44E-043.08E-057.17E-051.51E-043.10E-04 - 33L2 2.361.03E+021.66E+062.09E+095.33E+114.26E+013.15E+046.14E+067.59E+08 - 33L2 3.064.76E+014.45E+054.41E+081.21E+111.91E+011.11E+042.35E+063.59E+08 - 33L2 4.361.60E+017.42E+045.24E+071.34E+106.35E+002.67E+035.23E+058.06E+07 - 33L2 7.562.74E+004.61E+031.89E+063.56E+081.15E+002.85E+024.15E+045.01E+06 - 33L2 11.366.98E-015.95E+021.62E+052.26E+073.22E-015.43E+015.88E+035.42E+05 - 33L2 15.002.68E-011.48E+023.02E+043.37E+061.35E-011.74E+011.52E+031.14E+05 - 33L2 21.008.21E-022.74E+013.97E+033.34E+054.71E-024.40E+002.90E+021.66E+04 - 33L2 29.002.57E-025.47E+005.70E+023.62E+041.71E-021.17E+005.87E+012.56E+03 - 33L2 41.007.28E-039.78E-017.17E+013.34E+035.76E-032.84E-011.05E+013.41E+02 - 33L2 54.002.63E-032.50E-011.39E+015.05E+022.42E-039.22E-022.67E+006.84E+01 - 33L2 71.009.52E-046.52E-022.75E+007.80E+011.02E-033.02E-026.89E-011.39E+01 - 33L2 84.005.09E-042.87E-021.02E+002.50E+016.04E-041.53E-023.00E-015.24E+00 - 33L2 101.002.57E-041.17E-023.50E-017.24E+003.38E-047.24E-031.21E-011.81E+00 - 33L2 124.001.20E-044.37E-031.07E-011.85E+001.78E-043.17E-034.45E-025.57E-01 - 33L2 150.005.97E-051.77E-033.61E-025.28E-019.82E-051.48E-031.77E-021.89E-01 - 33L2 215.001.62E-053.30E-044.84E-035.20E-023.21E-053.57E-043.18E-032.53E-02 - 33L2 300.004.95E-067.33E-058.02E-046.58E-031.15E-059.84E-056.75E-044.15E-03 - 33L2 390.002.00E-062.34E-052.05E-041.38E-035.20E-063.64E-052.06E-041.05E-03 - 33L2 500.008.86E-078.26E-065.94E-053.32E-042.47E-061.45E-056.93E-052.97E-04 - 33L2 730.002.79E-071.85E-061.00E-054.33E-058.12E-073.75E-061.41E-054.79E-05 - 33L21000.001.09E-075.82E-072.54E-069.05E-063.30E-071.28E-064.04E-061.16E-05 - 33L3 2.322.05E+023.31E+064.29E+091.11E+121.55E+017.48E+055.35E+094.11E+12 - 33L3 3.029.31E+018.69E+058.75E+082.44E+116.87E+002.01E+058.98E+085.43E+11 - 33L3 4.323.08E+011.41E+051.00E+082.58E+102.27E+003.37E+048.12E+073.52E+10 - 33L3 7.525.10E+008.47E+033.46E+066.51E+084.10E-012.13E+032.08E+065.35E+08 - 33L3 11.321.28E+001.07E+032.87E+053.99E+071.16E-012.79E+021.47E+052.56E+07 - 33L3 15.004.81E-012.56E+025.15E+045.71E+064.87E-026.90E+012.43E+043.25E+06 - 33L3 21.001.45E-014.66E+016.60E+035.49E+051.72E-021.30E+012.92E+032.83E+05 - 33L3 29.004.51E-029.06E+009.17E+025.73E+046.35E-032.66E+003.95E+022.82E+04 - 33L3 41.001.26E-021.57E+001.10E+025.04E+032.17E-034.90E-014.78E+012.46E+03 - 33L3 54.004.49E-033.88E-012.04E+017.26E+029.26E-041.29E-019.16E+003.65E+02 - 33L3 71.001.61E-039.72E-023.84E+001.06E+023.97E-043.48E-021.82E+005.64E+01 - 33L3 84.008.54E-044.16E-021.38E+003.25E+012.36E-041.56E-026.82E-011.81E+01 - 33L3 101.004.28E-041.65E-024.50E-018.95E+001.34E-046.56E-032.36E-015.31E+00 - 33L3 124.001.99E-045.91E-031.30E-012.14E+007.14E-052.52E-037.32E-021.38E+00 - 33L3 150.009.83E-052.30E-034.13E-025.70E-014.00E-051.05E-032.51E-024.00E-01 - 33L3 215.002.68E-053.95E-044.86E-034.82E-021.36E-052.06E-043.45E-034.08E-02 - 33L3 300.008.42E-068.15E-057.04E-045.17E-035.11E-064.80E-055.79E-045.26E-03 - 33L3 390.003.51E-062.47E-051.62E-049.39E-042.43E-061.58E-051.48E-041.10E-03 - 33L3 500.001.60E-068.39E-064.24E-051.98E-041.23E-065.77E-064.21E-052.62E-04 - 33L3 730.005.41E-071.84E-066.35E-062.17E-054.60E-071.37E-066.73E-063.22E-05 - 33L31000.002.38E-075.94E-071.54E-064.12E-062.16E-074.65E-071.61E-066.17E-06 - 33M1 1.203.21E+016.78E+041.94E+074.57E+085.70E+024.23E+065.35E+092.57E+12 - 33M1 2.201.19E+013.19E+032.40E+064.20E+089.30E+012.23E+051.26E+084.01E+10 - 33M1 4.203.36E+002.33E+017.80E+042.07E+071.34E+011.03E+042.67E+065.05E+08 - 33M1 8.207.65E-017.20E+005.06E+022.42E+051.82E+004.65E+025.78E+046.12E+06 - 33M1 15.201.71E-013.39E+002.26E+016.97E+022.89E-012.98E+011.95E+031.18E+05 - 33M1 25.004.71E-029.46E-011.23E+011.04E+026.63E-023.53E+001.40E+025.35E+03 - 33M1 40.001.31E-022.24E-012.88E+003.25E+011.68E-025.07E-011.27E+013.13E+02 - 33M1 52.006.27E-039.37E-021.10E+001.17E+017.90E-031.78E-013.46E+006.69E+01 - 33M1 70.002.68E-033.36E-023.39E-013.19E+003.41E-035.58E-028.23E-011.21E+01 - 33M1 103.008.73E-048.54E-036.87E-025.25E-011.17E-031.31E-021.36E-011.40E+00 - 33M1 150.002.89E-042.18E-031.37E-028.16E-024.28E-043.39E-032.52E-021.88E-01 - 33M2 1.156.10E+019.14E+063.71E+103.01E+135.60E+011.33E+058.23E+073.46E+10 - 33M2 2.151.38E+013.87E+057.10E+083.90E+118.27E+008.85E+033.73E+061.20E+09 - 33M2 4.152.25E+001.40E+041.20E+074.08E+091.10E+005.54E+021.45E+053.09E+07 - 33M2 8.152.85E-014.72E+021.92E+053.80E+071.37E-013.38E+015.15E+036.65E+05 - 33M2 15.153.68E-022.12E+014.46E+035.17E+052.00E-022.63E+002.37E+021.85E+04 - 33M2 25.006.46E-031.74E+002.17E+021.60E+044.19E-033.37E-011.95E+019.91E+02 - 33M2 40.001.19E-031.69E-011.29E+016.24E+029.61E-044.91E-021.88E+006.30E+01 - 33M2 52.004.58E-044.66E-022.70E+001.03E+024.22E-041.68E-025.07E-011.35E+01 - 33M2 70.001.53E-041.08E-024.66E-011.35E+011.66E-044.99E-031.16E-012.39E+00 - 33M2 103.003.68E-051.56E-034.88E-029.97E-014.95E-051.04E-031.73E-022.54E-01 - 33M2 150.009.21E-062.74E-045.64E-038.27E-021.53E-052.31E-042.77E-032.97E-02 - 33M3 1.141.21E+021.74E+077.12E+105.75E+131.96E+014.09E+061.20E+113.66E+14 - 33M3 2.142.65E+017.24E+051.33E+097.23E+112.86E+001.76E+051.59E+092.06E+12 - 33M3 4.144.22E+002.57E+042.18E+077.37E+093.79E-016.53E+031.83E+071.05E+10 - 33M3 8.145.22E-018.44E+023.40E+056.65E+074.77E-022.25E+022.06E+055.61E+07 - 33M3 15.146.60E-023.68E+017.58E+038.68E+057.11E-031.03E+013.74E+035.32E+05 - 33M3 25.001.13E-022.92E+003.52E+022.57E+041.52E-038.62E-011.59E+021.37E+04 - 33M3 40.002.06E-032.71E-011.98E+019.38E+023.58E-048.63E-028.86E+004.81E+02 - 33M3 52.007.80E-047.20E-023.99E+001.48E+021.59E-042.42E-021.82E+007.70E+01 - 33M3 70.002.58E-041.61E-026.49E-011.83E+016.37E-055.80E-033.13E-011.00E+01 - 33M3 103.006.12E-052.30E-036.20E-021.22E+001.94E-059.34E-043.32E-027.45E-01 - 33M3 150.001.51E-053.55E-046.42E-038.88E-026.19E-061.64E-043.95E-036.35E-02 - 33M4 1.047.82E+012.50E+051.90E+103.46E+142.41E+004.92E+047.37E+081.67E+12 - 33M4 2.046.55E+007.74E+031.63E+081.07E+122.43E-011.64E+038.75E+061.13E+10 - 33M4 4.044.43E-012.18E+021.27E+063.27E+092.21E-025.09E+011.05E+057.31E+07 - 33M4 8.042.47E-025.52E+009.53E+031.02E+071.81E-031.52E+001.28E+034.72E+05 - 33M4 15.041.57E-031.80E-011.11E+025.54E+041.73E-046.17E-022.43E+014.89E+03 - 33M4 25.001.56E-041.07E-023.02E+008.30E+022.45E-054.55E-039.91E-011.22E+02 - 33M4 40.001.76E-057.58E-041.09E-011.75E+013.89E-064.06E-045.22E-024.08E+00 - 33M4 52.005.14E-061.72E-041.71E-022.06E+001.38E-061.05E-041.01E-026.17E-01 - 33M4 70.001.27E-063.22E-052.14E-031.85E-014.22E-072.29E-051.60E-037.35E-02 - 33M4 103.002.06E-073.71E-061.48E-048.36E-039.01E-083.17E-061.48E-044.73E-03 - 33M4 150.003.79E-084.64E-071.14E-054.29E-042.00E-084.66E-071.49E-053.38E-04 - 33M5 1.041.15E+023.54E+052.85E+105.05E+141.55E+006.92E+033.18E+092.39E+14 - 33M5 2.049.56E+001.09E+042.43E+081.55E+121.62E-012.41E+022.87E+076.08E+11 - 33M5 4.046.42E-013.05E+021.89E+064.70E+091.53E-028.03E+002.43E+051.51E+09 - 33M5 8.043.56E-027.67E+001.41E+041.44E+071.32E-032.63E-012.00E+033.95E+06 - 33M5 15.042.25E-032.47E-011.61E+027.69E+041.32E-041.18E-022.57E+011.97E+04 - 33M5 25.002.22E-041.44E-024.29E+001.12E+031.94E-059.50E-047.62E-012.90E+02 - 33M5 40.002.49E-051.00E-031.50E-012.27E+013.20E-069.23E-053.02E-026.30E+00 - 33M5 52.007.26E-062.25E-042.33E-022.60E+001.16E-062.52E-055.05E-037.65E-01 - 33M5 70.001.79E-064.14E-052.82E-032.24E-013.66E-075.81E-066.76E-047.21E-02 - 33M5 103.002.89E-074.62E-061.85E-049.41E-038.21E-088.80E-075.13E-053.50E-03 - 33M5 150.005.26E-085.59E-071.34E-054.41E-041.93E-081.43E-074.36E-061.94E-04 - 34K 13.662.04E+012.04E+026.07E+021.28E+032.85E+011.84E+032.08E+048.13E+04 - 34K 14.361.79E+012.13E+021.05E+034.16E+032.46E+011.52E+032.03E+041.30E+05 - 34K 15.661.42E+012.08E+021.62E+031.12E+041.90E+011.08E+031.75E+041.77E+05 - 34K 18.868.62E+001.57E+021.90E+032.13E+041.09E+015.20E+021.02E+041.58E+05 - 34K 22.665.22E+001.02E+021.46E+031.96E+046.36E+002.53E+025.26E+039.40E+04 - 34K 27.003.21E+006.32E+019.43E+021.35E+043.79E+001.28E+022.61E+034.82E+04 - 34K 33.001.82E+003.44E+015.07E+027.16E+032.10E+005.87E+011.12E+032.01E+04 - 34K 41.009.77E-011.70E+012.35E+023.12E+031.12E+002.55E+014.38E+027.21E+03 - 34K 53.004.63E-017.07E+008.71E+011.03E+035.33E-019.61E+001.41E+022.02E+03 - 34K 66.002.43E-013.26E+003.56E+013.73E+022.86E-014.23E+005.35E+016.65E+02 - 34K 83.001.23E-011.42E+001.35E+011.23E+021.51E-011.82E+001.95E+012.06E+02 - 34K 96.007.97E-028.37E-017.23E+005.97E+011.01E-011.07E+001.03E+019.81E+01 - 34K 113.004.90E-024.60E-013.56E+002.64E+016.48E-026.00E-015.08E+004.29E+01 - 34K 136.002.82E-022.32E-011.58E+001.03E+013.94E-023.13E-012.30E+001.69E+01 - 34K 165.001.59E-021.14E-016.80E-013.88E+002.37E-021.61E-011.02E+006.47E+00 - 34K 230.006.02E-033.38E-021.61E-017.36E-011.01E-025.35E-022.65E-011.31E+00 - 34K 315.002.48E-031.11E-024.31E-021.60E-014.62E-031.97E-027.84E-023.08E-01 - 34K 400.001.30E-034.97E-031.66E-025.32E-022.60E-039.55E-033.24E-021.09E-01 - 34K 510.007.03E-042.30E-036.66E-031.85E-021.48E-034.71E-031.38E-023.97E-02 - 34K 740.002.98E-047.94E-041.89E-034.34E-036.43E-041.70E-034.07E-039.50E-03 - 34K 1000.001.61E-043.74E-047.78E-041.56E-033.40E-047.85E-041.64E-033.32E-03 - 34K 1250.001.07E-042.26E-044.32E-047.96E-042.16E-044.57E-048.76E-041.61E-03 - 34K 1500.007.85E-051.55E-042.78E-044.81E-041.51E-043.00E-045.39E-049.30E-04 - 34L1 2.655.10E+012.02E+048.67E+061.02E+093.93E+026.40E+051.83E+081.93E+10 - 34L1 3.353.34E+014.46E+032.94E+064.92E+081.95E+022.10E+054.95E+075.88E+09 - 34L1 4.651.76E+013.00E+024.62E+059.64E+077.31E+014.50E+047.98E+069.20E+08 - 34L1 7.855.68E+002.04E+011.07E+043.21E+061.53E+014.03E+034.47E+053.97E+07 - 34L1 11.652.25E+002.97E+011.23E+021.30E+054.70E+006.87E+025.29E+043.56E+06 - 34L1 15.001.21E+002.08E+017.63E+019.77E+032.21E+002.27E+021.38E+047.60E+05 - 34L1 21.005.14E-019.80E+009.80E+014.21E+028.16E-015.32E+012.36E+039.85E+04 - 34L1 29.002.18E-014.03E+005.02E+014.44E+023.15E-011.37E+014.49E+021.42E+04 - 34L1 41.008.46E-021.38E+001.70E+011.81E+021.15E-013.32E+007.88E+011.83E+03 - 34L1 54.003.91E-025.58E-016.24E+006.37E+015.20E-021.11E+002.03E+013.69E+02 - 34L1 71.001.78E-022.18E-012.14E+001.95E+012.40E-023.83E-015.47E+007.76E+01 - 34L1 84.001.10E-021.21E-011.08E+009.02E+001.50E-022.02E-012.48E+003.03E+01 - 34L1 101.006.41E-036.27E-025.00E-013.77E+009.02E-031.02E-011.06E+001.10E+01 - 34L1 124.003.52E-033.00E-022.10E-011.40E+005.17E-034.83E-024.19E-013.64E+00 - 34L1 150.002.02E-031.50E-029.34E-025.51E-013.11E-032.45E-021.81E-011.34E+00 - 34L1 215.007.12E-044.12E-032.02E-029.45E-021.22E-037.15E-033.93E-022.16E-01 - 34L1 300.002.79E-041.28E-035.07E-031.92E-025.30E-042.42E-031.03E-024.39E-02 - 34L1 390.001.38E-045.30E-041.79E-035.80E-032.81E-041.08E-033.83E-031.34E-02 - 34L1 500.007.34E-052.42E-047.08E-041.99E-031.57E-045.17E-041.57E-034.68E-03 - 34L1 730.003.07E-058.23E-051.98E-044.58E-046.71E-051.81E-044.44E-041.06E-03 - 34L11000.001.61E-053.75E-057.84E-051.58E-043.44E-058.03E-051.70E-043.48E-04 - 34L2 2.489.51E+011.50E+061.80E+094.17E+114.26E+012.99E+045.31E+065.84E+08 - 34L2 3.184.57E+014.26E+054.04E+081.03E+111.97E+011.10E+042.16E+063.02E+08 - 34L2 4.481.60E+017.51E+045.14E+071.24E+106.81E+002.77E+035.14E+057.43E+07 - 34L2 7.682.86E+004.94E+031.99E+063.62E+081.27E+003.11E+024.36E+045.08E+06 - 34L2 11.487.47E-016.54E+021.76E+052.40E+073.64E-016.05E+016.40E+035.74E+05 - 34L2 15.002.98E-011.71E+023.50E+043.87E+061.58E-012.03E+011.74E+031.28E+05 - 34L2 21.009.20E-023.18E+014.62E+033.85E+055.51E-025.13E+003.35E+021.89E+04 - 34L2 29.002.90E-026.35E+006.64E+024.18E+042.01E-021.37E+006.80E+012.94E+03 - 34L2 41.008.26E-031.14E+008.36E+013.87E+036.77E-033.33E-011.22E+013.94E+02 - 34L2 54.003.00E-032.92E-011.62E+015.87E+022.85E-031.08E-013.12E+007.94E+01 - 34L2 71.001.09E-037.62E-023.22E+009.11E+011.21E-033.55E-028.06E-011.62E+01 - 34L2 84.005.85E-043.35E-021.20E+002.92E+017.13E-041.80E-023.52E-016.11E+00 - 34L2 101.002.95E-041.37E-024.11E-018.48E+004.00E-048.54E-031.42E-012.11E+00 - 34L2 124.001.38E-045.12E-031.26E-012.17E+002.11E-043.74E-035.24E-026.52E-01 - 34L2 150.006.90E-052.07E-034.25E-026.20E-011.16E-041.75E-032.09E-022.22E-01 - 34L2 215.001.88E-053.88E-045.71E-036.14E-023.81E-054.24E-043.76E-032.98E-02 - 34L2 300.005.84E-068.65E-059.50E-047.79E-031.37E-051.17E-048.00E-044.91E-03 - 34L2 390.002.39E-062.76E-052.44E-041.63E-036.20E-064.34E-052.45E-041.24E-03 - 34L2 500.001.06E-069.78E-067.06E-053.94E-042.95E-061.73E-058.26E-053.53E-04 - 34L2 730.003.29E-072.20E-061.19E-055.16E-059.70E-074.48E-061.69E-055.72E-05 - 34L21000.001.30E-076.91E-073.02E-061.08E-053.94E-071.53E-064.83E-061.38E-05 - 34L3 2.441.90E+023.00E+063.69E+098.78E+111.54E+017.21E+054.98E+093.64E+12 - 34L3 3.148.95E+018.31E+058.05E+082.09E+117.04E+002.04E+058.97E+085.21E+11 - 34L3 4.443.07E+011.43E+059.86E+072.41E+102.41E+003.62E+048.71E+073.67E+10 - 34L3 7.645.32E+009.05E+033.64E+066.63E+084.50E-012.42E+032.39E+066.03E+08 - 34L3 11.441.36E+001.17E+033.11E+054.23E+071.29E-013.24E+021.73E+052.98E+07 - 34L3 15.005.33E-012.95E+025.95E+046.51E+065.61E-028.41E+013.04E+044.05E+06 - 34L3 21.001.62E-015.37E+017.63E+036.29E+051.98E-021.59E+013.63E+033.52E+05 - 34L3 29.005.06E-021.05E+011.06E+036.59E+047.31E-033.24E+004.88E+023.48E+04 - 34L3 41.001.42E-021.81E+001.28E+025.81E+032.51E-035.95E-015.88E+013.03E+03 - 34L3 54.005.09E-034.49E-012.37E+018.38E+021.07E-031.56E-011.12E+014.48E+02 - 34L3 71.001.83E-031.13E-014.46E+001.23E+024.59E-044.20E-022.22E+006.89E+01 - 34L3 84.009.74E-044.83E-021.60E+003.77E+012.73E-041.89E-028.32E-012.21E+01 - 34L3 101.004.89E-041.91E-025.23E-011.04E+011.55E-047.91E-032.87E-016.46E+00 - 34L3 124.002.28E-046.86E-031.51E-012.48E+008.27E-053.03E-038.89E-021.67E+00 - 34L3 150.001.13E-042.67E-034.81E-026.63E-014.64E-051.26E-033.04E-024.85E-01 - 34L3 215.003.06E-054.60E-045.68E-035.62E-021.57E-052.47E-044.17E-034.93E-02 - 34L3 300.009.61E-069.50E-058.23E-046.03E-035.94E-065.71E-056.97E-046.34E-03 - 34L3 390.004.07E-062.88E-051.89E-041.10E-032.82E-061.88E-051.77E-041.33E-03 - 34L3 500.001.87E-069.79E-064.95E-052.32E-041.42E-066.82E-065.04E-053.15E-04 - 34L3 730.006.21E-072.14E-067.42E-062.54E-055.33E-071.61E-068.02E-063.86E-05 - 34L31000.002.76E-076.91E-071.80E-064.82E-062.50E-075.45E-071.91E-067.37E-06 - 34M1 1.233.08E+016.86E+041.63E+078.51E+086.22E+024.66E+065.90E+092.73E+12 - 34M1 2.231.18E+013.61E+032.39E+063.60E+081.05E+022.58E+051.47E+084.56E+10 - 34M1 4.233.41E+003.77E+018.80E+042.14E+071.54E+011.22E+043.17E+065.93E+08 - 34M1 8.237.92E-015.79E+007.43E+022.89E+052.10E+005.54E+026.91E+047.25E+06 - 34M1 15.231.80E-013.25E+001.63E+011.18E+033.36E-013.54E+012.32E+031.39E+05 - 34M1 25.005.03E-029.55E-011.13E+018.06E+017.74E-024.19E+001.67E+026.35E+03 - 34M1 40.001.41E-022.32E-012.85E+003.00E+011.96E-025.98E-011.50E+013.69E+02 - 34M1 52.006.78E-039.82E-021.11E+001.13E+019.20E-032.09E-014.07E+007.85E+01 - 34M1 70.002.91E-033.57E-023.49E-013.19E+003.96E-036.53E-029.63E-011.41E+01 - 34M1 103.009.52E-049.14E-037.22E-025.40E-011.36E-031.52E-021.58E-011.63E+00 - 34M1 150.003.18E-042.36E-031.46E-028.57E-024.93E-043.92E-032.92E-022.18E-01 - 34M2 1.176.06E+019.81E+063.99E+103.12E+136.27E+011.49E+058.88E+073.51E+10 - 34M2 2.171.43E+014.35E+058.01E+084.29E+119.52E+001.02E+044.19E+061.30E+09 - 34M2 4.172.42E+001.62E+041.39E+074.64E+091.28E+006.49E+021.66E+053.47E+07 - 34M2 8.173.15E-015.51E+022.25E+054.40E+071.62E-013.98E+016.00E+037.62E+05 - 34M2 15.174.15E-022.49E+015.26E+036.05E+052.38E-023.13E+002.79E+022.15E+04 - 34M2 25.007.41E-032.07E+002.58E+021.90E+045.02E-034.03E-012.32E+011.17E+03 - 34M2 40.001.38E-032.02E-011.54E+017.43E+021.16E-035.89E-022.24E+007.48E+01 - 34M2 52.005.33E-045.53E-023.24E+001.23E+025.09E-042.02E-026.07E-011.61E+01 - 34M2 70.001.79E-041.29E-025.58E-011.61E+012.01E-046.02E-031.39E-012.85E+00 - 34M2 103.004.34E-051.98E-035.87E-021.20E+006.00E-051.26E-032.08E-023.05E-01 - 34M2 150.001.09E-053.30E-046.80E-039.96E-021.86E-052.80E-043.35E-033.57E-02 - 34M3 1.161.20E+021.87E+077.64E+105.94E+132.17E+014.67E+061.40E+114.30E+14 - 34M3 2.162.75E+018.11E+051.49E+097.92E+113.26E+002.10E+051.96E+092.57E+12 - 34M3 4.164.53E+002.95E+042.52E+078.34E+094.38E-017.97E+032.31E+071.34E+10 - 34M3 8.165.76E-019.82E+023.96E+057.66E+075.56E-022.78E+022.63E+057.18E+07 - 34M3 15.167.41E-024.31E+018.90E+031.01E+068.33E-031.28E+014.76E+036.78E+05 - 34M3 25.001.29E-023.45E+004.17E+023.02E+041.79E-031.08E+002.03E+021.74E+04 - 34M3 40.002.37E-033.21E-012.35E+011.11E+034.22E-041.07E-011.12E+016.09E+02 - 34M3 52.009.02E-048.53E-024.74E+001.75E+021.88E-043.00E-022.30E+009.71E+01 - 34M3 70.003.00E-041.90E-027.73E-012.16E+017.54E-057.19E-033.93E-011.25E+01 - 34M3 103.007.15E-052.73E-037.40E-021.45E+002.30E-051.15E-034.14E-029.31E-01 - 34M3 150.001.78E-054.23E-047.66E-031.06E-017.34E-062.01E-044.90E-037.90E-02 - 34M4 1.068.84E+012.90E+052.29E+104.24E+142.91E+006.10E+049.32E+082.06E+12 - 34M4 2.067.75E+009.33E+032.06E+081.38E+123.03E-012.11E+031.15E+071.46E+10 - 34M4 4.065.42E-012.70E+021.66E+064.34E+092.81E-026.71E+011.41E+059.73E+07 - 34M4 8.063.11E-026.99E+001.26E+041.37E+072.34E-032.03E+001.74E+036.35E+05 - 34M4 15.062.01E-032.32E-011.48E+027.49E+042.26E-048.28E-023.30E+016.63E+03 - 34M4 25.002.03E-041.39E-024.06E+001.13E+033.24E-056.15E-031.35E+001.67E+02 - 34M4 40.002.30E-059.98E-041.46E-012.39E+015.17E-065.50E-047.13E-025.58E+00 - 34M4 52.006.78E-062.28E-042.31E-022.81E+001.84E-061.43E-041.39E-028.45E-01 - 34M4 70.001.69E-064.28E-052.89E-032.52E-015.64E-073.11E-052.19E-031.01E-01 - 34M4 103.002.74E-074.95E-062.00E-041.14E-021.21E-074.31E-062.03E-046.48E-03 - 34M4 150.004.88E-086.21E-071.54E-055.87E-042.69E-086.35E-072.04E-054.64E-04 - 34M5 1.061.30E+024.09E+053.43E+106.17E+141.87E+008.49E+034.06E+093.15E+14 - 34M5 2.061.13E+011.31E+043.08E+082.01E+122.00E-013.07E+023.86E+078.50E+11 - 34M5 4.067.85E-013.77E+022.47E+066.24E+091.93E-021.04E+013.35E+052.17E+09 - 34M5 8.064.47E-029.68E+001.86E+041.94E+071.69E-033.45E-012.80E+035.72E+06 - 34M5 15.062.87E-033.17E-012.15E+021.04E+051.71E-041.55E-023.61E+012.84E+04 - 34M5 25.002.88E-041.87E-025.78E+001.53E+032.54E-051.26E-031.08E+004.19E+02 - 34M5 40.003.26E-051.32E-032.03E-013.10E+014.22E-061.23E-044.24E-029.02E+00 - 34M5 52.009.57E-062.96E-043.14E-023.54E+001.53E-063.35E-057.08E-031.09E+00 - 34M5 70.002.38E-065.47E-053.81E-033.05E-014.86E-077.75E-069.47E-041.02E-01 - 34M5 103.003.89E-076.15E-062.50E-041.28E-021.09E-071.18E-067.15E-054.95E-03 - 34M5 150.007.04E-087.50E-071.82E-056.02E-042.59E-081.92E-076.04E-062.73E-04 - 35K 14.471.81E+011.69E+024.51E+028.28E+022.73E+011.66E+031.74E+046.12E+04 - 35K 15.171.60E+011.77E+027.79E+022.73E+032.37E+011.38E+031.71E+049.84E+04 - 35K 16.471.29E+011.74E+021.23E+037.53E+031.86E+019.97E+021.49E+041.37E+05 - 35K 19.678.02E+001.35E+021.50E+031.53E+041.10E+014.97E+029.12E+031.29E+05 - 35K 23.474.95E+009.09E+011.20E+031.49E+046.50E+002.49E+024.87E+038.08E+04 - 35K 27.003.36E+006.26E+018.70E+021.15E+044.30E+001.45E+022.81E+034.87E+04 - 35K 33.001.91E+003.46E+014.84E+026.49E+032.38E+006.63E+011.23E+032.10E+04 - 35K 41.001.03E+001.73E+012.30E+022.94E+031.27E+002.88E+014.82E+027.68E+03 - 35K 53.004.90E-017.29E+008.71E+011.00E+036.04E-011.08E+011.56E+022.19E+03 - 35K 66.002.58E-013.38E+003.60E+013.69E+023.23E-014.76E+005.93E+017.26E+02 - 35K 83.001.31E-011.49E+001.38E+011.23E+021.70E-012.04E+002.16E+012.26E+02 - 35K 96.008.49E-028.77E-017.44E+006.04E+011.14E-011.21E+001.15E+011.08E+02 - 35K 113.005.23E-024.83E-013.68E+002.69E+017.29E-026.73E-015.65E+004.72E+01 - 35K 136.003.02E-022.44E-011.65E+001.06E+014.42E-023.51E-012.56E+001.86E+01 - 35K 165.001.70E-021.20E-017.11E-014.02E+002.65E-021.80E-011.14E+007.16E+00 - 35K 230.006.47E-033.59E-021.70E-017.69E-011.13E-025.98E-022.95E-011.45E+00 - 35K 315.002.67E-031.19E-024.58E-021.69E-015.15E-032.20E-028.71E-023.41E-01 - 35K 400.001.41E-035.33E-031.77E-025.64E-022.89E-031.06E-023.60E-021.20E-01 - 35K 510.007.61E-042.47E-037.14E-031.98E-021.64E-035.24E-031.53E-024.39E-02 - 35K 740.003.23E-048.59E-042.04E-034.67E-037.12E-041.88E-034.51E-031.05E-02 - 35K 1000.001.75E-044.06E-048.44E-041.69E-033.75E-048.69E-041.82E-033.67E-03 - 35K 1250.001.16E-042.46E-044.70E-048.65E-042.38E-045.05E-049.69E-041.79E-03 - 35K 1500.008.50E-051.68E-043.03E-045.23E-041.66E-043.31E-045.95E-041.03E-03 - 35L1 2.784.66E+011.86E+047.19E+067.56E+083.91E+026.13E+051.67E+081.61E+10 - 35L1 3.483.12E+014.44E+032.62E+063.97E+082.00E+022.11E+054.76E+075.27E+09 - 35L1 4.781.68E+013.60E+024.52E+058.66E+077.73E+014.72E+048.12E+068.88E+08 - 35L1 7.985.61E+001.34E+011.26E+043.35E+061.67E+014.44E+034.82E+054.14E+07 - 35L1 11.782.27E+002.56E+012.21E+021.56E+055.22E+007.70E+025.85E+043.84E+06 - 35L1 16.001.07E+001.72E+016.06E+017.51E+032.10E+002.01E+021.15E+045.93E+05 - 35L1 22.004.76E-018.49E+007.75E+013.41E+028.15E-015.09E+012.16E+038.58E+04 - 35L1 30.002.10E-013.65E+004.22E+013.38E+023.27E-011.38E+014.38E+021.33E+04 - 35L1 42.008.37E-021.31E+001.52E+011.51E+021.22E-013.48E+008.06E+011.82E+03 - 35L1 55.003.94E-025.41E-015.79E+005.62E+015.64E-021.19E+002.14E+013.80E+02 - 35L1 72.001.83E-022.16E-012.04E+001.80E+012.63E-024.16E-015.86E+008.19E+01 - 35L1 85.001.13E-021.21E-011.05E+008.50E+001.65E-022.21E-012.68E+003.23E+01 - 35L1 102.006.67E-036.36E-024.94E-013.63E+009.98E-031.12E-011.15E+001.19E+01 - 35L1 125.003.69E-033.07E-022.11E-011.37E+005.74E-035.34E-024.60E-013.96E+00 - 35L1 150.002.17E-031.60E-029.76E-025.67E-013.53E-032.79E-022.05E-011.51E+00 - 35L1 215.007.68E-044.40E-032.13E-029.88E-021.38E-038.10E-034.45E-022.44E-01 - 35L1 300.003.02E-041.37E-035.41E-032.03E-025.97E-042.73E-031.17E-024.94E-02 - 35L1 390.001.50E-045.73E-041.92E-036.19E-033.16E-041.21E-034.31E-031.51E-02 - 35L1 500.008.01E-052.63E-047.64E-042.14E-031.76E-045.81E-041.76E-035.25E-03 - 35L1 730.003.35E-058.96E-052.15E-044.97E-047.50E-052.03E-044.98E-041.19E-03 - 35L11000.001.76E-054.10E-058.57E-051.73E-043.82E-058.98E-051.90E-043.89E-04 - 35L2 2.608.83E+011.36E+061.55E+093.30E+114.26E+012.84E+044.62E+064.54E+08 - 35L2 3.304.38E+014.06E+053.71E+088.85E+102.04E+011.09E+041.99E+062.55E+08 - 35L2 4.601.59E+017.57E+045.04E+071.16E+107.28E+002.87E+035.04E+056.84E+07 - 35L2 7.802.97E+005.27E+032.09E+063.68E+081.41E+003.37E+024.58E+045.12E+06 - 35L2 11.607.95E-017.16E+021.91E+052.54E+074.10E-016.71E+016.93E+036.05E+05 - 35L2 16.002.65E-011.43E+022.74E+042.84E+061.50E-011.81E+011.46E+031.01E+05 - 35L2 22.008.71E-022.91E+014.04E+033.21E+055.56E-024.93E+003.06E+021.65E+04 - 35L2 30.002.89E-026.21E+006.28E+023.82E+042.11E-021.39E+006.64E+012.77E+03 - 35L2 42.008.54E-031.17E+008.41E+013.80E+037.35E-033.52E-011.26E+013.94E+02 - 35L2 55.003.18E-033.10E-011.69E+016.01E+023.16E-031.17E-013.31E+008.23E+01 - 35L2 72.001.18E-038.27E-023.46E+009.63E+011.36E-033.93E-028.76E-011.73E+01 - 35L2 85.006.40E-043.69E-021.31E+003.14E+018.08E-042.01E-023.87E-016.63E+00 - 35L2 102.003.27E-041.53E-024.53E-019.25E+004.57E-049.63E-031.59E-012.32E+00 - 35L2 125.001.55E-045.76E-031.41E-012.40E+002.42E-044.26E-035.90E-027.27E-01 - 35L2 150.007.94E-052.43E-034.99E-027.26E-011.37E-042.06E-032.45E-022.59E-01 - 35L2 215.002.16E-054.55E-046.72E-037.21E-024.51E-055.00E-044.42E-033.50E-02 - 35L2 300.006.71E-061.02E-041.12E-039.17E-031.63E-051.38E-049.45E-045.78E-03 - 35L2 390.002.76E-063.26E-052.88E-041.92E-037.35E-065.14E-052.90E-041.47E-03 - 35L2 500.001.23E-061.15E-058.35E-054.66E-043.50E-062.06E-059.79E-054.18E-04 - 35L2 730.003.79E-072.59E-061.41E-056.12E-051.15E-065.34E-062.01E-056.78E-05 - 35L21000.001.50E-078.18E-073.59E-061.28E-054.68E-071.82E-065.76E-061.64E-05 - 35L3 2.551.77E+022.73E+063.20E+097.00E+111.52E+016.97E+054.64E+093.24E+12 - 35L3 3.258.60E+017.95E+057.42E+081.80E+117.21E+002.08E+058.96E+085.02E+11 - 35L3 4.553.06E+011.44E+059.68E+072.24E+102.55E+003.88E+049.30E+073.82E+10 - 35L3 7.755.52E+009.64E+033.81E+066.73E+084.92E-012.72E+032.72E+066.77E+08 - 35L3 11.551.45E+001.28E+033.36E+054.47E+071.44E-013.74E+022.02E+053.45E+07 - 35L3 16.004.70E-012.45E+024.61E+044.73E+065.26E-027.41E+012.51E+043.14E+06 - 35L3 22.001.53E-014.88E+016.60E+035.18E+051.97E-021.53E+013.36E+033.11E+05 - 35L3 30.004.99E-021.01E+019.93E+025.94E+047.55E-033.32E+004.88E+023.37E+04 - 35L3 42.001.45E-021.84E+001.27E+025.62E+032.67E-036.39E-016.23E+013.13E+03 - 35L3 55.005.35E-034.72E-012.45E+018.47E+021.16E-031.73E-011.23E+014.81E+02 - 35L3 72.001.96E-031.21E-014.74E+001.28E+025.05E-044.73E-022.49E+007.62E+01 - 35L3 85.001.06E-035.25E-021.73E+004.00E+013.03E-042.14E-029.43E-012.48E+01 - 35L3 102.005.36E-042.10E-025.71E-011.12E+011.73E-049.05E-033.28E-017.33E+00 - 35L3 125.002.52E-047.62E-031.67E-012.71E+009.30E-053.49E-031.03E-011.92E+00 - 35L3 150.001.29E-043.09E-035.58E-027.67E-015.35E-051.50E-033.67E-025.86E-01 - 35L3 215.003.53E-055.33E-046.59E-036.51E-021.82E-052.93E-045.00E-035.93E-02 - 35L3 300.001.11E-051.10E-049.57E-047.00E-036.85E-066.76E-058.35E-047.61E-03 - 35L3 390.004.65E-063.34E-052.20E-041.27E-033.25E-062.21E-052.12E-041.59E-03 - 35L3 500.002.13E-061.13E-055.77E-052.70E-041.64E-068.02E-066.00E-053.76E-04 - 35L3 730.007.18E-072.48E-068.63E-062.96E-056.15E-071.88E-069.51E-064.60E-05 - 35L31000.003.16E-077.97E-072.09E-065.61E-062.89E-076.34E-072.26E-068.76E-06 - 35M1 1.262.98E+017.01E+041.39E+071.40E+096.83E+025.19E+066.61E+092.96E+12 - 35M1 2.261.17E+014.06E+032.38E+063.09E+081.18E+023.00E+051.72E+085.23E+10 - 35M1 4.263.46E+005.60E+019.86E+042.21E+071.76E+011.44E+043.78E+066.98E+08 - 35M1 8.268.20E-014.52E+001.03E+033.41E+052.43E+006.59E+028.25E+048.59E+06 - 35M1 15.261.89E-013.09E+001.16E+011.84E+033.89E-014.20E+012.75E+031.65E+05 - 35M1 25.005.35E-029.60E-011.02E+016.28E+019.01E-024.97E+001.98E+027.52E+03 - 35M1 40.001.51E-022.40E-012.79E+002.73E+012.28E-027.04E-011.77E+014.34E+02 - 35M1 52.007.30E-031.03E-011.11E+001.08E+011.07E-022.45E-014.77E+009.19E+01 - 35M1 70.003.15E-033.77E-023.58E-013.17E+004.59E-037.62E-021.12E+001.65E+01 - 35M1 103.001.04E-039.76E-037.55E-025.53E-011.57E-031.77E-021.83E-011.89E+00 - 35M1 150.003.46E-042.54E-031.55E-028.95E-025.68E-044.53E-033.38E-022.52E-01 - 35M2 1.196.03E+011.05E+074.30E+103.26E+137.01E+011.66E+059.62E+073.59E+10 - 35M2 2.191.48E+014.87E+059.02E+084.72E+111.09E+011.18E+044.70E+061.41E+09 - 35M2 4.192.59E+001.85E+041.60E+075.26E+091.50E+007.57E+021.91E+053.89E+07 - 35M2 8.193.47E-016.40E+022.63E+055.07E+071.90E-014.69E+016.96E+038.71E+05 - 35M2 15.194.66E-022.92E+016.18E+037.05E+052.82E-023.70E+003.27E+022.49E+04 - 35M2 25.008.45E-032.45E+003.06E+022.25E+045.99E-034.80E-012.75E+011.37E+03 - 35M2 40.001.59E-032.39E-011.84E+018.80E+021.38E-037.03E-022.66E+008.82E+01 - 35M2 52.006.17E-046.57E-023.85E+001.45E+026.10E-042.41E-027.22E-011.91E+01 - 35M2 70.002.09E-041.53E-026.66E-011.92E+012.41E-047.21E-031.66E-013.38E+00 - 35M2 103.005.08E-052.36E-037.02E-021.43E+007.22E-051.52E-032.49E-023.63E-01 - 35M2 150.001.28E-053.95E-048.16E-031.19E-012.24E-053.37E-044.02E-034.27E-02 - 35M3 1.181.20E+022.01E+078.27E+106.23E+132.41E+015.34E+061.64E+115.10E+14 - 35M3 2.182.86E+019.08E+051.68E+098.73E+113.70E+002.50E+052.42E+093.20E+12 - 35M3 4.184.85E+003.38E+042.89E+079.43E+095.05E-019.69E+032.91E+071.71E+10 - 35M3 8.186.33E-011.14E+034.61E+058.79E+076.45E-023.41E+023.33E+059.16E+07 - 35M3 15.188.29E-025.02E+011.04E+041.17E+069.71E-031.58E+016.02E+038.61E+05 - 35M3 25.001.47E-024.05E+004.92E+023.55E+042.10E-031.33E+002.57E+022.21E+04 - 35M3 40.002.72E-033.78E-012.78E+011.30E+034.96E-041.33E-011.41E+017.67E+02 - 35M3 52.001.04E-031.00E-015.60E+002.06E+022.21E-043.71E-022.88E+001.22E+02 - 35M3 70.003.47E-042.25E-029.15E-012.55E+018.87E-058.86E-034.90E-011.57E+01 - 35M3 103.008.31E-053.23E-038.77E-021.71E+002.71E-051.41E-035.14E-021.16E+00 - 35M3 150.002.08E-055.01E-049.10E-031.25E-018.66E-062.46E-046.06E-039.78E-02 - 35M4 1.079.92E+013.35E+052.74E+105.21E+143.48E+007.55E+041.18E+092.56E+12 - 35M4 2.079.07E+001.12E+042.59E+081.78E+123.73E-012.70E+031.51E+071.89E+10 - 35M4 4.076.55E-013.31E+022.14E+065.71E+093.52E-028.73E+011.86E+051.28E+08 - 35M4 8.073.85E-028.73E+001.65E+041.81E+072.98E-032.67E+002.32E+038.45E+05 - 35M4 15.072.54E-032.94E-011.95E+029.99E+042.91E-041.10E-014.42E+018.86E+03 - 35M4 25.002.59E-041.79E-025.37E+001.52E+034.21E-058.19E-031.82E+002.24E+02 - 35M4 40.002.96E-051.29E-031.94E-013.20E+016.76E-067.34E-049.60E-027.51E+00 - 35M4 52.008.81E-062.97E-043.07E-023.77E+002.41E-061.91E-041.87E-021.14E+00 - 35M4 70.002.22E-065.60E-053.84E-033.39E-017.42E-074.16E-052.96E-031.36E-01 - 35M4 103.003.62E-076.50E-062.66E-041.54E-021.59E-075.78E-062.74E-048.75E-03 - 35M4 150.006.25E-088.20E-072.06E-057.91E-043.56E-088.53E-072.76E-056.27E-04 - 35M5 1.071.46E+024.73E+054.15E+107.66E+142.23E+001.04E+045.23E+094.19E+14 - 35M5 2.071.32E+011.57E+043.89E+082.59E+122.45E-013.88E+025.17E+071.18E+12 - 35M5 4.079.48E-014.61E+023.19E+068.22E+092.41E-021.33E+014.58E+053.08E+09 - 35M5 8.075.53E-021.21E+012.43E+042.57E+072.14E-034.46E-013.85E+038.16E+06 - 35M5 15.073.61E-034.01E-012.83E+021.38E+052.18E-042.02E-024.99E+014.04E+04 - 35M5 25.003.68E-042.40E-027.66E+002.05E+033.28E-051.64E-031.49E+005.95E+02 - 35M5 40.004.20E-051.70E-032.69E-014.15E+015.48E-061.61E-045.88E-021.27E+01 - 35M5 52.001.24E-053.84E-044.17E-024.74E+002.00E-064.39E-059.79E-031.53E+00 - 35M5 70.003.08E-067.11E-055.06E-034.09E-016.35E-071.02E-051.30E-031.43E-01 - 35M5 103.005.06E-078.04E-063.33E-041.72E-021.43E-071.55E-069.80E-056.89E-03 - 35M5 150.009.37E-089.89E-072.42E-058.08E-043.40E-082.53E-078.25E-063.79E-04 - 36K 15.331.62E+011.40E+023.37E+025.40E+022.61E+011.49E+031.46E+044.62E+04 - 36K 16.031.44E+011.47E+025.82E+021.81E+032.28E+011.25E+031.44E+047.46E+04 - 36K 17.331.17E+011.46E+029.28E+025.10E+031.81E+019.20E+021.28E+041.06E+05 - 36K 20.537.45E+001.17E+021.18E+031.10E+041.10E+014.74E+028.09E+031.05E+05 - 36K 24.334.69E+008.04E+019.81E+021.13E+046.63E+002.44E+024.48E+036.92E+04 - 36K 28.003.18E+005.57E+017.25E+028.98E+034.37E+001.41E+022.60E+034.23E+04 - 36K 34.001.85E+003.16E+014.18E+025.29E+032.47E+006.65E+011.17E+031.90E+04 - 36K 42.001.01E+001.63E+012.06E+022.51E+031.33E+002.95E+014.75E+027.25E+03 - 36K 54.004.90E-017.02E+008.07E+018.91E+026.46E-011.13E+011.59E+022.15E+03 - 36K 67.002.61E-013.32E+003.42E+013.38E+023.49E-015.06E+006.14E+017.30E+02 - 36K 84.001.34E-011.48E+001.34E+011.16E+021.85E-012.20E+002.28E+012.33E+02 - 36K 97.008.75E-028.83E-017.30E+005.79E+011.24E-011.30E+001.21E+011.12E+02 - 36K 114.005.42E-024.90E-013.66E+002.61E+017.98E-027.30E-016.04E+004.96E+01 - 36K 137.003.15E-022.50E-011.66E+001.05E+014.86E-023.83E-012.76E+001.98E+01 - 36K 165.001.82E-021.27E-017.42E-014.14E+002.97E-022.02E-011.26E+007.89E+00 - 36K 230.006.94E-033.81E-021.79E-018.01E-011.26E-026.66E-023.27E-011.60E+00 - 36K 315.002.87E-031.27E-024.84E-021.77E-015.73E-032.45E-029.65E-023.77E-01 - 36K 400.001.52E-035.70E-031.88E-025.97E-023.21E-031.18E-023.99E-021.33E-01 - 36K 510.008.21E-042.66E-037.63E-032.11E-021.82E-035.81E-031.70E-024.85E-02 - 36K 740.003.49E-049.28E-042.20E-035.02E-037.86E-042.08E-034.99E-031.16E-02 - 36K 1000.001.89E-044.39E-049.13E-041.83E-034.13E-049.60E-042.01E-034.05E-03 - 36K 1250.001.26E-042.67E-045.10E-049.38E-042.61E-045.58E-041.07E-031.97E-03 - 36K 1500.009.20E-051.83E-043.29E-045.69E-041.82E-043.65E-046.57E-041.13E-03 - 36L1 2.924.24E+011.68E+045.88E+065.49E+083.86E+025.80E+051.50E+081.33E+10 - 36L1 3.622.89E+014.35E+032.29E+063.15E+082.03E+022.08E+054.51E+074.64E+09 - 36L1 4.921.60E+014.15E+024.34E+057.63E+078.10E+014.90E+048.15E+068.43E+08 - 36L1 8.125.51E+008.26E+001.44E+043.41E+061.81E+014.84E+035.14E+054.27E+07 - 36L1 11.922.27E+002.17E+013.55E+021.81E+055.76E+008.58E+026.41E+044.11E+06 - 36L1 16.001.11E+001.59E+013.89E+011.15E+042.40E+002.34E+021.33E+046.82E+05 - 36L1 22.004.96E-018.23E+006.37E+013.63E+029.31E-015.92E+012.50E+039.86E+04 - 36L1 30.002.20E-013.63E+003.85E+012.66E+023.73E-011.60E+015.06E+021.53E+04 - 36L1 42.008.83E-021.33E+001.46E+011.35E+021.40E-014.01E+009.26E+012.08E+03 - 36L1 55.004.17E-025.56E-015.73E+005.30E+016.42E-021.36E+002.45E+014.34E+02 - 36L1 72.001.94E-022.24E-012.06E+001.75E+012.99E-024.76E-016.69E+009.32E+01 - 36L1 85.001.21E-021.26E-011.07E+008.41E+001.87E-022.53E-013.06E+003.68E+01 - 36L1 102.007.13E-036.67E-025.07E-013.64E+001.13E-021.28E-011.31E+001.34E+01 - 36L1 125.003.95E-033.24E-022.18E-011.39E+006.50E-036.06E-025.22E-014.48E+00 - 36L1 150.002.33E-031.69E-021.02E-015.82E-013.98E-033.16E-022.33E-011.71E+00 - 36L1 215.008.29E-044.69E-032.25E-021.03E-011.55E-039.14E-035.02E-022.75E-01 - 36L1 300.003.27E-041.47E-035.75E-032.15E-026.71E-043.08E-031.31E-025.56E-02 - 36L1 390.001.62E-046.17E-042.06E-036.59E-033.54E-041.36E-034.83E-031.70E-02 - 36L1 500.008.67E-052.84E-048.23E-042.30E-031.97E-046.52E-041.97E-035.88E-03 - 36L1 730.003.65E-059.74E-052.33E-045.39E-048.35E-052.27E-045.57E-041.33E-03 - 36L11000.001.92E-054.47E-059.35E-051.88E-044.25E-051.00E-042.12E-044.34E-04 - 36L2 2.738.13E+011.22E+061.31E+092.56E+114.23E+012.66E+043.96E+063.45E+08 - 36L2 3.434.17E+013.83E+053.35E+087.41E+102.09E+011.07E+041.81E+062.11E+08 - 36L2 4.731.58E+017.53E+044.86E+071.05E+107.71E+002.93E+034.87E+056.19E+07 - 36L2 7.933.07E+005.56E+032.16E+063.68E+081.55E+003.62E+024.74E+045.09E+06 - 36L2 11.738.41E-017.78E+022.05E+052.66E+074.59E-017.39E+017.43E+036.30E+05 - 36L2 16.002.93E-011.64E+023.15E+043.23E+061.74E-012.09E+011.66E+031.13E+05 - 36L2 22.009.69E-023.35E+014.65E+033.66E+056.46E-025.70E+003.50E+021.86E+04 - 36L2 30.003.23E-027.16E+007.25E+024.37E+042.45E-021.61E+007.62E+013.15E+03 - 36L2 42.009.62E-031.35E+009.73E+014.37E+038.57E-034.09E-011.45E+014.51E+02 - 36L2 55.003.60E-033.58E-011.96E+016.93E+023.69E-031.37E-013.83E+009.46E+01 - 36L2 72.001.34E-039.58E-024.02E+001.11E+021.59E-034.59E-021.02E+001.99E+01 - 36L2 85.007.28E-044.27E-021.52E+003.64E+019.46E-042.34E-024.50E-017.66E+00 - 36L2 102.003.72E-041.77E-025.28E-011.07E+015.35E-041.13E-021.85E-012.69E+00 - 36L2 125.001.77E-046.70E-031.64E-012.79E+002.84E-044.99E-036.88E-028.44E-01 - 36L2 150.009.10E-052.82E-035.82E-028.46E-011.61E-042.42E-032.86E-023.01E-01 - 36L2 215.002.51E-055.31E-047.86E-038.42E-025.31E-055.88E-045.18E-034.08E-02 - 36L2 300.007.84E-061.19E-041.31E-031.07E-021.92E-051.63E-041.11E-036.77E-03 - 36L2 390.003.22E-063.82E-053.38E-042.26E-038.69E-066.07E-053.41E-041.72E-03 - 36L2 500.001.43E-061.35E-059.83E-055.49E-044.14E-062.43E-051.15E-044.92E-04 - 36L2 730.004.48E-073.05E-061.67E-057.21E-051.37E-066.32E-062.37E-058.01E-05 - 36L21000.001.77E-079.62E-074.24E-061.52E-055.55E-072.16E-066.83E-061.94E-05 - 36L3 2.671.63E+022.44E+062.72E+095.46E+111.50E+016.63E+054.24E+092.82E+12 - 36L3 3.378.19E+017.50E+056.71E+081.52E+117.31E+002.08E+058.76E+084.71E+11 - 36L3 4.673.02E+011.43E+059.35E+072.05E+102.67E+004.09E+049.76E+073.88E+10 - 36L3 7.875.69E+001.02E+043.95E+066.73E+085.34E-013.04E+033.06E+067.47E+08 - 36L3 11.671.53E+001.38E+033.60E+054.67E+071.58E-014.28E+022.35E+053.95E+07 - 36L3 16.005.17E-012.80E+025.27E+045.35E+066.00E-028.94E+013.10E+043.87E+06 - 36L3 22.001.69E-015.58E+017.56E+035.88E+052.24E-021.85E+014.13E+033.81E+05 - 36L3 30.005.55E-021.16E+011.14E+036.76E+048.62E-034.00E+005.98E+024.12E+04 - 36L3 42.001.63E-022.11E+001.46E+026.42E+033.05E-037.68E-017.60E+013.82E+03 - 36L3 55.006.01E-035.41E-012.82E+019.69E+021.33E-032.07E-011.49E+015.84E+02 - 36L3 72.002.21E-031.39E-015.46E+001.47E+025.79E-045.66E-023.02E+009.21E+01 - 36L3 85.001.19E-036.04E-021.99E+004.59E+013.47E-042.56E-021.14E+002.99E+01 - 36L3 102.006.05E-042.42E-026.58E-011.28E+011.99E-041.08E-023.96E-018.84E+00 - 36L3 125.002.86E-048.78E-031.93E-013.12E+001.07E-044.16E-031.23E-012.31E+00 - 36L3 150.001.46E-043.56E-036.45E-028.83E-016.14E-051.79E-034.40E-027.03E-01 - 36L3 215.004.01E-056.15E-047.62E-037.52E-022.09E-053.47E-045.99E-037.10E-02 - 36L3 300.001.26E-051.27E-041.11E-038.09E-037.88E-067.97E-059.95E-049.09E-03 - 36L3 390.005.32E-063.86E-052.54E-041.47E-033.74E-062.60E-052.52E-041.89E-03 - 36L3 500.002.45E-061.31E-056.68E-053.13E-041.89E-069.39E-067.11E-054.48E-04 - 36L3 730.008.26E-072.86E-061.00E-053.43E-057.06E-072.19E-061.12E-055.45E-05 - 36L31000.003.64E-079.22E-072.41E-066.50E-063.31E-077.35E-072.66E-061.04E-05 - 36M1 1.292.84E+016.98E+041.14E+071.95E+097.37E+025.62E+067.13E+093.07E+12 - 36M1 2.291.16E+014.46E+032.33E+062.55E+081.32E+023.41E+051.97E+085.84E+10 - 36M1 4.293.50E+007.77E+011.08E+052.23E+072.00E+011.68E+044.44E+068.08E+08 - 36M1 8.298.45E-013.38E+001.37E+033.94E+052.79E+007.78E+029.75E+041.01E+07 - 36M1 15.291.98E-012.92E+008.61E+002.68E+034.49E-014.95E+013.25E+031.93E+05 - 36M1 25.005.68E-029.62E-019.10E+005.08E+011.04E-015.87E+002.34E+028.87E+03 - 36M1 40.001.62E-022.47E-012.72E+002.46E+012.64E-028.26E-012.08E+015.08E+02 - 36M1 52.007.84E-031.07E-011.11E+001.03E+011.23E-022.86E-015.58E+001.07E+02 - 36M1 70.003.39E-033.96E-023.66E-013.12E+005.29E-038.87E-021.31E+001.91E+01 - 36M1 103.001.12E-031.04E-027.82E-025.53E-011.80E-032.04E-022.12E-012.19E+00 - 36M1 150.003.78E-042.73E-031.64E-029.32E-026.52E-045.22E-033.89E-022.90E-01 - 36M1 280.006.44E-053.03E-041.23E-034.78E-031.30E-046.31E-042.85E-031.28E-02 - 36M1 500.001.42E-054.63E-051.34E-043.74E-043.22E-051.07E-043.25E-049.71E-04 - 36M2 1.225.81E+011.07E+074.31E+103.10E+137.58E+011.77E+059.70E+073.35E+10 - 36M2 2.221.50E+015.28E+059.74E+084.93E+111.23E+011.31E+045.07E+061.45E+09 - 36M2 4.222.74E+002.09E+041.80E+075.78E+091.72E+008.67E+022.14E+054.23E+07 - 36M2 8.223.78E-017.35E+023.02E+055.75E+072.22E-015.45E+017.97E+039.79E+05 - 36M2 15.225.19E-023.39E+017.19E+038.12E+053.32E-024.33E+003.79E+022.85E+04 - 36M2 25.009.59E-032.88E+003.62E+022.64E+047.12E-035.69E-013.23E+011.60E+03 - 36M2 40.001.83E-032.82E-012.17E+011.04E+031.65E-038.35E-023.14E+001.04E+02 - 36M2 52.007.11E-047.75E-024.56E+001.72E+027.28E-042.87E-028.55E-012.24E+01 - 36M2 70.002.42E-041.81E-027.91E-012.27E+012.88E-048.60E-031.97E-013.99E+00 - 36M2 103.005.93E-052.80E-038.36E-021.70E+008.66E-051.81E-032.96E-024.31E-01 - 36M2 150.001.50E-054.70E-049.74E-031.42E-012.69E-054.04E-044.80E-035.08E-02 - 36M3 1.211.16E+022.05E+078.29E+105.94E+132.58E+015.78E+061.78E+115.48E+14 - 36M3 2.212.90E+019.84E+051.81E+099.10E+114.11E+002.87E+052.84E+093.77E+12 - 36M3 4.215.13E+003.80E+043.25E+071.03E+105.73E-011.15E+043.57E+072.11E+10 - 36M3 8.216.88E-011.30E+035.27E+059.92E+077.42E-024.14E+024.16E+051.15E+08 - 36M3 15.219.21E-025.81E+011.20E+041.34E+061.12E-021.93E+017.54E+031.08E+06 - 36M3 25.001.66E-024.74E+005.77E+024.14E+042.45E-031.65E+003.23E+022.79E+04 - 36M3 40.003.10E-034.43E-013.27E+011.53E+035.79E-041.63E-011.76E+019.60E+02 - 36M3 52.001.19E-031.18E-016.59E+002.41E+022.59E-044.56E-023.59E+001.52E+02 - 36M3 70.003.98E-042.64E-021.08E+003.00E+011.04E-041.09E-026.08E-011.95E+01 - 36M3 103.009.60E-053.80E-031.03E-012.01E+003.17E-051.73E-036.35E-021.43E+00 - 36M3 150.002.41E-055.91E-041.07E-021.48E-011.02E-052.99E-047.45E-031.20E-01 - 36M4 1.091.08E+023.73E+053.14E+106.05E+144.05E+008.99E+041.42E+093.01E+12 - 36M4 2.091.04E+011.30E+043.15E+082.21E+124.49E-013.36E+031.91E+072.36E+10 - 36M4 4.097.77E-013.97E+022.69E+067.32E+094.34E-021.11E+022.42E+051.65E+08 - 36M4 8.094.69E-021.07E+012.11E+042.36E+073.74E-033.45E+003.04E+031.10E+06 - 36M4 15.093.15E-033.67E-012.52E+021.31E+053.69E-041.43E-015.82E+011.16E+04 - 36M4 25.003.28E-042.27E-027.02E+002.01E+035.41E-051.08E-022.42E+002.98E+02 - 36M4 40.003.78E-051.66E-032.54E-014.24E+018.73E-069.66E-041.28E-019.97E+00 - 36M4 52.001.12E-053.81E-044.02E-025.00E+003.12E-062.52E-042.49E-021.51E+00 - 36M4 70.002.79E-067.22E-055.04E-034.50E-019.63E-075.49E-053.94E-031.80E-01 - 36M4 103.004.60E-078.44E-063.50E-042.04E-022.08E-077.64E-063.65E-041.17E-02 - 36M4 150.008.39E-081.07E-062.71E-051.05E-034.64E-081.13E-063.68E-058.37E-04 - 36M5 1.091.59E+025.23E+054.72E+108.81E+142.58E+001.22E+046.32E+095.16E+14 - 36M5 2.091.51E+011.82E+044.72E+083.20E+122.94E-014.75E+026.64E+071.57E+12 - 36M5 4.091.12E+005.52E+024.01E+061.05E+102.95E-021.68E+016.08E+054.24E+09 - 36M5 8.096.73E-021.48E+013.12E+043.34E+072.66E-035.66E-015.20E+031.14E+07 - 36M5 15.094.48E-034.98E-013.66E+021.81E+052.75E-042.58E-026.78E+015.64E+04 - 36M5 25.004.63E-043.04E-021.00E+012.70E+034.19E-052.12E-032.04E+008.33E+02 - 36M5 40.005.31E-052.16E-033.52E-015.48E+017.02E-062.07E-048.02E-021.77E+01 - 36M5 52.001.57E-054.91E-045.46E-026.27E+002.57E-065.68E-051.33E-022.12E+00 - 36M5 70.003.91E-069.12E-056.64E-035.41E-018.19E-071.32E-051.77E-031.98E-01 - 36M5 103.006.47E-071.04E-054.37E-042.28E-021.85E-072.01E-061.33E-049.46E-03 - 36M5 150.001.20E-071.27E-063.18E-051.07E-034.40E-083.29E-071.11E-055.18E-04 - 37K 16.201.45E+011.17E+022.57E+023.66E+022.50E+011.34E+031.23E+043.57E+04 - 37K 16.901.30E+011.23E+024.42E+021.22E+032.20E+011.14E+031.22E+045.76E+04 - 37K 18.201.07E+011.23E+027.11E+023.51E+031.77E+018.52E+021.10E+048.30E+04 - 37K 21.406.92E+001.01E+029.34E+027.96E+031.09E+014.53E+027.21E+038.63E+04 - 37K 25.204.44E+007.13E+018.07E+028.60E+036.74E+002.39E+024.12E+035.93E+04 - 37K 29.003.02E+004.98E+016.07E+027.04E+034.45E+001.39E+022.41E+033.69E+04 - 37K 35.001.78E+002.90E+013.62E+024.33E+032.56E+006.68E+011.12E+031.73E+04 - 37K 43.009.95E-011.53E+011.84E+022.14E+031.40E+003.03E+014.68E+026.85E+03 - 37K 55.004.90E-016.76E+007.47E+017.93E+026.90E-011.19E+011.61E+022.10E+03 - 37K 68.002.64E-013.25E+003.24E+013.11E+023.76E-015.36E+006.34E+017.34E+02 - 37K 85.001.37E-011.48E+001.30E+011.10E+022.01E-012.35E+002.39E+012.39E+02 - 37K 98.009.01E-028.87E-017.16E+005.54E+011.35E-011.40E+001.28E+011.16E+02 - 37K 115.005.62E-024.97E-013.63E+002.53E+018.73E-027.91E-016.44E+005.20E+01 - 37K 138.003.28E-022.56E-011.66E+001.03E+015.33E-024.16E-012.96E+002.09E+01 - 37K 165.001.94E-021.34E-017.72E-014.26E+003.32E-022.25E-011.40E+008.67E+00 - 37K 230.007.42E-034.04E-021.88E-018.32E-011.40E-027.41E-023.62E-011.76E+00 - 37K 315.003.08E-031.35E-025.12E-021.86E-016.37E-032.72E-021.07E-014.16E-01 - 37K 410.001.53E-035.62E-031.82E-025.65E-023.36E-031.22E-024.04E-021.32E-01 - 37K 520.008.44E-042.69E-037.60E-032.07E-021.92E-036.09E-031.75E-024.95E-02 - 37K 750.003.67E-049.64E-042.27E-035.13E-038.41E-042.22E-035.28E-031.22E-02 - 37K 1000.002.05E-044.74E-049.86E-041.97E-034.53E-041.06E-032.21E-034.47E-03 - 37K 1250.001.36E-042.89E-045.52E-041.02E-032.86E-046.14E-041.18E-032.17E-03 - 37K 1500.009.93E-051.98E-043.57E-046.17E-041.99E-044.01E-047.23E-041.25E-03 - 37L1 3.073.87E+011.52E+044.86E+064.08E+083.81E+025.47E+051.34E+081.10E+10 - 37L1 3.772.69E+014.21E+032.01E+062.52E+082.06E+022.05E+054.26E+074.10E+09 - 37L1 5.071.52E+014.63E+024.14E+056.72E+078.48E+015.06E+048.16E+068.00E+08 - 37L1 8.275.40E+005.02E+001.61E+043.45E+061.96E+015.25E+035.47E+054.38E+07 - 37L1 12.072.27E+001.82E+015.21E+022.06E+056.33E+009.51E+027.00E+044.38E+06 - 37L1 16.001.15E+001.47E+012.98E+011.66E+042.73E+002.73E+021.55E+047.82E+05 - 37L1 22.005.17E-017.94E+005.09E+015.21E+021.06E+006.87E+012.89E+031.13E+05 - 37L1 30.002.30E-013.60E+003.48E+012.06E+024.25E-011.85E+015.82E+021.75E+04 - 37L1 42.009.29E-021.34E+001.40E+011.19E+021.59E-014.61E+001.06E+022.38E+03 - 37L1 55.004.40E-025.70E-015.64E+004.97E+017.29E-021.56E+002.80E+014.94E+02 - 37L1 72.002.06E-022.32E-012.07E+001.70E+013.39E-025.44E-017.63E+001.06E+02 - 37L1 85.001.28E-021.31E-011.08E+008.29E+002.12E-022.88E-013.48E+004.17E+01 - 37L1 102.007.60E-036.97E-025.19E-013.64E+001.28E-021.45E-011.49E+001.52E+01 - 37L1 125.004.22E-033.40E-022.25E-011.41E+007.34E-036.87E-025.91E-015.07E+00 - 37L1 150.002.49E-031.78E-021.06E-015.95E-014.49E-033.57E-022.63E-011.93E+00 - 37L1 215.008.91E-044.98E-032.36E-021.07E-011.75E-031.03E-025.65E-023.09E-01 - 37L1 300.003.53E-041.58E-036.10E-032.26E-027.52E-043.46E-031.47E-026.23E-02 - 37L1 390.001.76E-046.63E-042.20E-037.00E-033.96E-041.53E-035.42E-031.90E-02 - 37L1 500.009.41E-053.06E-048.84E-042.46E-032.19E-047.29E-042.21E-036.57E-03 - 37L1 730.003.96E-051.06E-042.53E-045.83E-049.29E-052.53E-046.21E-041.48E-03 - 37L11000.002.09E-054.87E-051.02E-042.05E-044.70E-051.11E-042.36E-044.84E-04 - 37L2 2.867.49E+011.09E+061.11E+092.00E+114.18E+012.49E+043.42E+062.69E+08 - 37L2 3.563.96E+013.59E+053.01E+086.22E+102.13E+011.04E+041.64E+061.76E+08 - 37L2 4.861.55E+017.46E+044.67E+079.59E+098.13E+002.99E+034.70E+055.60E+07 - 37L2 8.063.15E+005.84E+032.23E+063.66E+081.69E+003.88E+024.89E+045.05E+06 - 37L2 11.868.86E-018.40E+022.18E+052.77E+075.11E-018.09E+017.93E+036.54E+05 - 37L2 16.003.23E-011.88E+023.61E+043.65E+062.02E-012.40E+011.88E+031.26E+05 - 37L2 22.001.07E-013.84E+015.34E+034.17E+057.48E-026.57E+003.99E+022.10E+04 - 37L2 30.003.60E-028.21E+008.33E+024.99E+042.84E-021.86E+008.72E+013.57E+03 - 37L2 42.001.08E-021.55E+001.12E+025.00E+039.95E-034.73E-011.66E+015.14E+02 - 37L2 55.004.05E-034.12E-012.27E+017.96E+024.29E-031.58E-014.41E+001.08E+02 - 37L2 72.001.51E-031.10E-014.64E+001.28E+021.85E-035.33E-021.17E+002.29E+01 - 37L2 85.008.25E-044.94E-021.76E+004.20E+011.10E-032.73E-025.21E-018.81E+00 - 37L2 102.004.23E-042.05E-026.12E-011.24E+016.25E-041.31E-022.14E-013.10E+00 - 37L2 125.002.02E-047.75E-031.90E-013.23E+003.32E-045.82E-037.99E-029.76E-01 - 37L2 150.001.04E-043.27E-036.77E-029.81E-011.89E-042.82E-033.32E-023.49E-01 - 37L2 215.002.87E-056.17E-049.17E-039.80E-026.23E-056.88E-046.05E-034.75E-02 - 37L2 300.008.99E-061.38E-041.53E-031.25E-022.26E-051.91E-041.30E-037.91E-03 - 37L2 390.003.70E-064.45E-053.96E-042.65E-031.02E-057.14E-054.00E-042.02E-03 - 37L2 500.001.64E-061.58E-051.15E-046.43E-044.88E-062.86E-051.36E-045.77E-04 - 37L2 730.005.06E-073.57E-061.96E-058.48E-051.61E-067.46E-062.80E-059.43E-05 - 37L21000.002.04E-071.13E-064.99E-061.79E-056.55E-072.55E-068.06E-062.29E-05 - 37L3 2.801.50E+022.19E+062.32E+094.31E+111.47E+016.30E+053.86E+092.45E+12 - 37L3 3.507.79E+017.05E+056.07E+081.28E+117.38E+002.07E+058.52E+084.41E+11 - 37L3 4.802.97E+011.42E+059.01E+071.88E+102.79E+004.29E+041.02E+083.93E+10 - 37L3 8.005.84E+001.07E+044.07E+066.71E+085.76E-013.37E+033.41E+068.19E+08 - 37L3 11.801.60E+001.49E+033.83E+054.85E+071.74E-014.87E+022.70E+054.48E+07 - 37L3 16.005.67E-013.19E+026.01E+046.02E+066.81E-021.07E+023.81E+044.75E+06 - 37L3 22.001.86E-016.36E+018.63E+036.65E+052.55E-022.22E+015.06E+034.66E+05 - 37L3 30.006.15E-021.32E+011.30E+037.67E+049.80E-034.79E+007.29E+025.01E+04 - 37L3 42.001.81E-022.41E+001.67E+027.30E+033.47E-039.20E-019.22E+014.63E+03 - 37L3 55.006.72E-036.19E-013.22E+011.11E+031.51E-032.47E-011.81E+017.06E+02 - 37L3 72.002.48E-031.59E-016.25E+001.68E+026.60E-046.75E-023.64E+001.11E+02 - 37L3 85.001.34E-036.91E-022.28E+005.25E+013.96E-043.05E-021.37E+003.60E+01 - 37L3 102.006.82E-042.77E-027.55E-011.47E+012.27E-041.28E-024.75E-011.06E+01 - 37L3 125.003.22E-041.01E-022.21E-013.58E+001.22E-044.93E-031.48E-012.76E+00 - 37L3 150.001.66E-044.08E-037.41E-021.01E+007.01E-052.11E-035.26E-028.41E-01 - 37L3 215.004.57E-057.07E-048.77E-038.64E-022.39E-054.09E-047.13E-038.46E-02 - 37L3 300.001.44E-051.46E-041.28E-039.32E-039.01E-069.36E-051.18E-031.08E-02 - 37L3 390.006.05E-064.44E-052.93E-041.70E-034.28E-063.05E-052.98E-042.25E-03 - 37L3 500.002.77E-061.51E-057.70E-053.60E-042.16E-061.10E-058.40E-055.31E-04 - 37L3 730.009.29E-073.29E-061.15E-053.95E-058.07E-072.55E-061.32E-056.44E-05 - 37L31000.004.13E-071.06E-062.78E-067.51E-063.78E-078.49E-073.11E-061.22E-05 - 37M1 1.322.72E+016.91E+049.59E+062.40E+097.89E+026.02E+067.60E+093.17E+12 - 37M1 2.321.14E+014.84E+032.26E+062.10E+081.46E+023.86E+052.23E+086.48E+10 - 37M1 4.323.53E+001.02E+021.17E+052.24E+072.27E+011.95E+045.19E+069.31E+08 - 37M1 8.328.69E-012.45E+001.75E+034.47E+053.19E+009.14E+021.15E+051.18E+07 - 37M1 15.322.07E-012.73E+007.78E+003.71E+035.17E-015.82E+013.82E+032.26E+05 - 37M1 25.006.02E-029.57E-017.96E+004.77E+011.21E-016.92E+002.77E+021.04E+04 - 37M1 40.001.73E-022.53E-012.63E+002.19E+013.04E-029.66E-012.43E+015.94E+02 - 37M1 52.008.41E-031.11E-011.11E+009.72E+001.42E-023.33E-016.51E+001.25E+02 - 37M1 70.003.65E-034.16E-023.72E-013.06E+006.10E-031.03E-011.52E+002.22E+01 - 37M1 103.001.21E-031.10E-028.10E-025.61E-012.07E-032.36E-022.44E-012.52E+00 - 37M1 150.004.11E-042.92E-031.72E-029.67E-027.47E-046.01E-034.47E-023.33E-01 - 37M1 280.007.03E-053.28E-041.32E-035.10E-031.48E-047.21E-043.25E-031.46E-02 - 37M1 500.001.56E-055.07E-051.46E-044.07E-043.64E-051.21E-043.69E-041.10E-03 - 37M2 1.255.75E+011.13E+074.55E+103.19E+138.35E+011.95E+051.04E+083.42E+10 - 37M2 2.251.54E+015.83E+051.08E+095.36E+111.39E+011.49E+045.65E+061.56E+09 - 37M2 4.252.91E+002.37E+042.04E+076.48E+091.99E+001.00E+032.43E+054.70E+07 - 37M2 8.254.12E-018.46E+023.48E+056.56E+072.59E-016.34E+019.16E+031.11E+06 - 37M2 15.255.77E-023.93E+018.36E+039.37E+053.89E-025.07E+004.39E+023.27E+04 - 37M2 25.001.08E-023.37E+004.25E+023.08E+048.42E-036.71E-013.79E+011.86E+03 - 37M2 40.002.08E-033.31E-012.56E+011.22E+031.95E-039.88E-023.69E+001.21E+02 - 37M2 52.008.15E-049.12E-025.38E+002.02E+028.64E-043.40E-021.01E+002.63E+01 - 37M2 70.002.79E-042.14E-029.35E-012.68E+013.43E-041.02E-022.33E-014.69E+00 - 37M2 103.006.87E-053.31E-039.90E-022.01E+001.03E-042.16E-033.51E-025.09E-01 - 37M2 150.001.75E-055.57E-041.16E-021.69E-013.22E-054.83E-045.71E-036.03E-02 - 37M3 1.241.15E+022.15E+078.72E+106.07E+132.80E+016.43E+062.00E+116.23E+14 - 37M3 2.242.98E+011.08E+062.00E+099.83E+114.60E+003.34E+053.40E+094.57E+12 - 37M3 4.245.44E+004.29E+043.68E+071.15E+106.52E-011.38E+044.41E+072.63E+10 - 37M3 8.247.48E-011.49E+036.06E+051.13E+088.52E-025.01E+025.19E+051.44E+08 - 37M3 15.241.02E-016.70E+011.39E+041.54E+061.30E-022.35E+019.42E+031.35E+06 - 37M3 25.001.87E-025.53E+006.75E+024.80E+042.85E-032.02E+004.05E+023.51E+04 - 37M3 40.003.51E-035.17E-013.82E+011.78E+036.73E-042.00E-012.19E+011.20E+03 - 37M3 52.001.35E-031.38E-017.72E+002.82E+023.01E-045.57E-024.45E+001.89E+02 - 37M3 70.004.56E-043.09E-021.26E+003.50E+011.21E-041.32E-027.51E-012.41E+01 - 37M3 103.001.11E-044.46E-031.21E-012.35E+003.71E-052.10E-037.80E-021.76E+00 - 37M3 150.002.80E-056.93E-041.26E-021.73E-011.19E-053.62E-049.12E-031.47E-01 - 37M4 1.111.16E+024.05E+053.48E+106.76E+144.62E+001.04E+051.66E+093.43E+12 - 37M4 2.111.17E+011.49E+043.74E+082.68E+125.32E-014.10E+032.37E+072.88E+10 - 37M4 4.119.09E-014.71E+023.33E+069.21E+095.28E-021.40E+023.08E+052.08E+08 - 37M4 8.115.64E-021.30E+012.66E+043.03E+074.63E-034.40E+003.93E+031.42E+06 - 37M4 15.113.87E-034.53E-013.21E+021.69E+054.63E-041.84E-017.58E+011.51E+04 - 37M4 25.004.09E-042.85E-029.07E+002.63E+036.86E-051.40E-023.18E+003.90E+02 - 37M4 40.004.78E-052.09E-033.29E-015.56E+011.11E-051.26E-031.68E-011.31E+01 - 37M4 52.001.42E-054.84E-045.21E-026.55E+003.99E-063.28E-043.27E-021.99E+00 - 37M4 70.003.59E-069.21E-056.54E-035.90E-011.24E-067.17E-055.18E-032.37E-01 - 37M4 103.005.89E-071.08E-054.54E-042.68E-022.67E-079.99E-064.80E-041.54E-02 - 37M4 150.001.04E-071.38E-063.52E-051.38E-035.99E-081.48E-064.85E-051.10E-03 - 37M5 1.111.71E+025.70E+055.28E+109.94E+142.95E+001.41E+047.49E+096.21E+14 - 37M5 2.111.71E+012.08E+045.64E+083.89E+123.47E-015.75E+028.39E+072.05E+12 - 37M5 4.111.31E+006.52E+024.98E+061.32E+103.57E-022.08E+017.96E+055.75E+09 - 37M5 8.118.08E-021.78E+013.95E+044.28E+073.27E-037.10E-016.93E+031.57E+07 - 37M5 15.115.49E-036.13E-014.68E+022.34E+053.43E-043.26E-029.09E+017.77E+04 - 37M5 25.005.76E-043.79E-021.29E+013.54E+035.27E-052.70E-032.76E+001.15E+03 - 37M5 40.006.68E-052.72E-034.56E-017.17E+018.90E-062.65E-041.08E-012.43E+01 - 37M5 52.001.99E-056.20E-047.07E-028.19E+003.26E-067.26E-051.79E-022.91E+00 - 37M5 70.005.01E-061.16E-048.61E-037.07E-011.04E-061.69E-052.38E-032.70E-01 - 37M5 103.008.38E-071.32E-055.68E-042.98E-022.37E-072.58E-061.77E-041.28E-02 - 37M5 150.001.55E-071.63E-064.13E-051.40E-035.64E-084.24E-071.48E-057.00E-04 - 37N+ 50.001.58E-034.80E-022.05E+007.50E+012.48E-037.26E-022.13E+006.35E+01 - 37N+ 70.005.96E-041.16E-022.99E-017.51E+009.42E-041.84E-023.60E-017.29E+00 - 37N+ 100.002.10E-042.72E-034.23E-026.97E-013.46E-044.53E-035.95E-028.13E-01 - 37N+ 150.006.39E-055.56E-045.17E-035.25E-021.14E-049.92E-048.57E-037.68E-02 - 37N+ 200.002.77E-051.87E-041.27E-039.27E-035.31E-053.56E-042.34E-031.58E-02 - 37N+ 500.002.34E-067.94E-062.49E-057.85E-055.44E-061.86E-055.89E-051.87E-04 - 38K 17.101.30E+019.87E+011.97E+022.50E+022.39E+011.22E+031.05E+042.77E+04 - 38K 17.801.17E+011.04E+023.38E+028.35E+022.13E+011.04E+031.04E+044.47E+04 - 38K 19.109.71E+001.04E+025.47E+022.44E+031.72E+017.89E+029.47E+036.53E+04 - 38K 22.306.43E+008.71E+017.42E+025.78E+031.09E+014.31E+026.41E+037.07E+04 - 38K 26.104.20E+006.32E+016.64E+026.55E+036.84E+002.34E+023.79E+035.07E+04 - 38K 30.002.87E+004.46E+015.09E+025.53E+034.54E+001.36E+022.24E+033.23E+04 - 38K 36.001.72E+002.66E+013.14E+023.55E+032.65E+006.72E+011.08E+031.57E+04 - 38K 44.009.77E-011.43E+011.65E+021.82E+031.48E+003.11E+014.62E+026.46E+03 - 38K 56.004.89E-016.50E+006.91E+017.06E+027.36E-011.24E+011.63E+022.06E+03 - 38K 69.002.67E-013.19E+003.07E+012.85E+024.05E-015.68E+006.54E+017.36E+02 - 38K 86.001.40E-011.47E+001.26E+011.03E+022.18E-012.52E+002.50E+012.44E+02 - 38K 99.009.26E-028.89E-017.00E+005.28E+011.47E-011.51E+001.36E+011.21E+02 - 38K 116.005.81E-025.03E-013.59E+002.45E+019.53E-028.55E-016.85E+005.44E+01 - 38K 139.003.41E-022.61E-011.66E+001.01E+015.84E-024.52E-013.17E+002.21E+01 - 38K 165.002.06E-021.40E-018.01E-014.36E+003.70E-022.50E-011.55E+009.51E+00 - 38K 230.007.92E-034.27E-021.96E-018.62E-011.56E-028.22E-024.00E-011.93E+00 - 38K 315.003.29E-031.43E-025.39E-021.95E-017.06E-033.01E-021.18E-014.57E-01 - 38K 410.001.64E-035.99E-031.93E-025.96E-023.72E-031.35E-024.45E-021.45E-01 - 38K 520.009.06E-042.88E-038.09E-032.19E-022.12E-036.73E-031.93E-025.44E-02 - 38K 750.003.94E-041.04E-032.43E-035.49E-039.26E-042.45E-035.82E-031.34E-02 - 38K 1000.002.21E-045.11E-041.06E-032.12E-034.97E-041.17E-032.44E-034.91E-03 - 38K 1250.001.46E-043.11E-045.97E-041.10E-033.13E-046.75E-041.30E-032.39E-03 - 38K 1500.001.07E-042.14E-043.86E-046.68E-042.17E-044.40E-047.95E-041.37E-03 - 38L1 3.223.53E+011.36E+044.00E+063.03E+083.75E+025.15E+051.20E+089.15E+09 - 38L1 3.922.49E+014.05E+031.76E+062.01E+082.08E+022.01E+054.01E+073.60E+09 - 38L1 5.221.44E+015.04E+023.92E+055.87E+078.82E+015.20E+048.11E+067.53E+08 - 38L1 8.425.29E+003.36E+001.76E+043.43E+062.11E+015.66E+035.77E+054.47E+07 - 38L1 12.222.26E+001.50E+017.12E+022.28E+056.94E+001.05E+037.60E+044.64E+06 - 38L1 16.001.19E+001.33E+013.44E+012.27E+043.10E+003.17E+021.79E+048.94E+05 - 38L1 22.005.37E-017.61E+003.96E+018.25E+021.21E+007.94E+013.33E+031.29E+05 - 38L1 30.002.40E-013.56E+003.10E+011.62E+024.82E-012.13E+016.69E+022.00E+04 - 38L1 42.009.76E-021.35E+001.33E+011.04E+021.80E-015.29E+001.22E+022.71E+03 - 38L1 55.004.64E-025.82E-015.52E+004.61E+018.26E-021.78E+003.19E+015.61E+02 - 38L1 72.002.18E-022.40E-012.07E+001.64E+013.83E-026.19E-018.67E+001.20E+02 - 38L1 85.001.36E-021.36E-011.09E+008.13E+002.40E-023.27E-013.94E+004.72E+01 - 38L1 102.008.08E-037.26E-025.29E-013.62E+001.44E-021.64E-011.69E+001.72E+01 - 38L1 125.004.51E-033.56E-022.32E-011.42E+008.27E-037.77E-026.67E-015.71E+00 - 38L1 150.002.67E-031.87E-021.09E-016.06E-015.06E-034.03E-022.96E-012.17E+00 - 38L1 215.009.56E-045.28E-032.48E-021.11E-011.96E-031.16E-026.35E-023.47E-01 - 38L1 300.003.80E-041.68E-036.45E-032.37E-028.41E-043.88E-031.65E-026.98E-02 - 38L1 390.001.89E-047.11E-042.34E-037.41E-034.42E-041.71E-036.06E-032.12E-02 - 38L1 500.001.02E-043.30E-049.47E-042.63E-032.44E-048.14E-042.47E-037.33E-03 - 38L1 730.004.29E-051.14E-042.73E-046.29E-041.03E-042.82E-046.92E-041.65E-03 - 38L11000.002.27E-055.29E-051.11E-042.23E-045.20E-051.24E-042.63E-045.38E-04 - 38L2 3.016.89E+019.67E+059.41E+081.57E+114.12E+012.33E+042.95E+062.09E+08 - 38L2 3.713.75E+013.36E+052.70E+085.20E+102.16E+011.01E+041.49E+061.46E+08 - 38L2 5.011.52E+017.35E+044.45E+078.67E+098.53E+003.03E+034.51E+055.04E+07 - 38L2 8.213.22E+006.09E+032.28E+063.62E+081.85E+004.12E+025.02E+044.97E+06 - 38L2 12.019.29E-019.02E+022.32E+052.87E+075.67E-018.83E+018.42E+036.75E+05 - 38L2 16.003.54E-012.15E+024.13E+044.12E+062.32E-012.75E+012.13E+031.40E+05 - 38L2 22.001.18E-014.39E+016.11E+034.72E+058.63E-027.55E+004.53E+022.35E+04 - 38L2 30.003.99E-029.40E+009.55E+025.68E+043.29E-022.14E+009.94E+014.02E+03 - 38L2 42.001.20E-021.78E+001.29E+025.71E+031.15E-025.46E-011.90E+015.83E+02 - 38L2 55.004.54E-034.73E-012.61E+019.11E+024.97E-031.83E-015.06E+001.23E+02 - 38L2 72.001.71E-031.27E-015.35E+001.47E+022.15E-036.16E-021.35E+002.62E+01 - 38L2 85.009.32E-045.68E-022.03E+004.83E+011.28E-033.16E-026.00E-011.01E+01 - 38L2 102.004.79E-042.36E-027.06E-011.43E+017.28E-041.52E-022.47E-013.56E+00 - 38L2 125.002.29E-048.95E-032.20E-013.73E+003.87E-046.76E-039.24E-021.12E+00 - 38L2 150.001.18E-043.78E-037.84E-021.13E+002.20E-043.28E-033.85E-024.03E-01 - 38L2 215.003.28E-057.15E-041.06E-021.14E-017.29E-058.03E-047.03E-035.50E-02 - 38L2 300.001.03E-051.61E-041.79E-031.46E-022.64E-052.24E-041.51E-039.19E-03 - 38L2 390.004.26E-065.18E-054.62E-043.08E-031.20E-058.36E-054.68E-042.35E-03 - 38L2 500.001.90E-061.84E-051.35E-047.51E-045.73E-063.36E-051.59E-046.74E-04 - 38L2 730.005.91E-074.16E-062.29E-059.92E-051.89E-068.78E-063.28E-051.10E-04 - 38L21000.002.39E-071.32E-065.85E-062.10E-057.71E-073.00E-069.48E-062.69E-05 - 38L3 2.941.39E+021.95E+061.98E+093.40E+111.43E+015.96E+053.51E+092.12E+12 - 38L3 3.647.38E+016.60E+055.46E+081.08E+117.43E+002.05E+058.22E+084.10E+11 - 38L3 4.942.91E+011.40E+058.62E+071.70E+102.89E+004.47E+041.05E+083.94E+10 - 38L3 8.145.96E+001.11E+044.17E+066.64E+086.19E-013.71E+033.78E+068.90E+08 - 38L3 11.941.68E+001.59E+034.06E+055.01E+071.90E-015.50E+023.08E+055.06E+07 - 38L3 16.006.20E-013.62E+026.83E+046.76E+067.71E-021.28E+024.67E+045.81E+06 - 38L3 22.002.04E-017.22E+019.81E+037.49E+052.89E-022.65E+016.17E+035.67E+05 - 38L3 30.006.78E-021.50E+011.48E+038.66E+041.11E-025.72E+008.85E+026.08E+04 - 38L3 42.002.01E-022.75E+001.90E+028.27E+033.94E-031.10E+001.11E+025.59E+03 - 38L3 55.007.48E-037.05E-013.68E+011.25E+031.72E-032.94E-012.18E+018.49E+02 - 38L3 72.002.77E-031.81E-017.14E+001.91E+027.50E-048.01E-024.36E+001.33E+02 - 38L3 85.001.50E-037.88E-022.61E+005.98E+014.50E-043.62E-021.64E+004.31E+01 - 38L3 102.007.66E-043.16E-028.64E-011.68E+012.58E-041.52E-025.68E-011.27E+01 - 38L3 125.003.62E-041.15E-022.53E-014.08E+001.39E-045.83E-031.76E-013.30E+00 - 38L3 150.001.86E-044.67E-038.49E-021.16E+007.99E-052.49E-036.27E-021.00E+00 - 38L3 215.005.13E-058.09E-041.01E-029.89E-022.72E-054.81E-048.46E-031.00E-01 - 38L3 300.001.62E-051.67E-041.46E-031.07E-021.03E-051.10E-041.40E-031.28E-02 - 38L3 390.006.87E-065.08E-053.37E-041.95E-034.87E-063.55E-053.52E-042.66E-03 - 38L3 500.003.17E-061.73E-058.85E-054.14E-042.46E-061.27E-059.89E-056.26E-04 - 38L3 730.001.06E-063.77E-061.32E-054.54E-059.19E-072.94E-061.55E-057.59E-05 - 38L31000.004.67E-071.21E-063.19E-068.63E-064.30E-079.77E-073.63E-061.43E-05 - 38M1 1.362.61E+016.81E+048.08E+062.78E+098.41E+026.41E+068.05E+093.25E+12 - 38M1 2.361.12E+015.20E+032.19E+061.72E+081.61E+024.33E+052.51E+087.15E+10 - 38M1 4.363.56E+001.30E+021.26E+052.23E+072.55E+012.26E+046.02E+061.07E+09 - 38M1 8.368.92E-011.74E+002.17E+035.01E+053.64E+001.07E+031.35E+051.37E+07 - 38M1 15.362.16E-012.53E+009.30E+004.94E+035.92E-016.81E+014.48E+032.64E+05 - 38M1 25.006.36E-029.47E-016.87E+005.43E+011.39E-018.13E+003.25E+021.23E+04 - 38M1 40.001.84E-022.58E-012.52E+001.94E+013.51E-021.13E+002.84E+016.92E+02 - 38M1 52.008.98E-031.14E-011.09E+009.09E+001.64E-023.87E-017.57E+001.45E+02 - 38M1 70.003.92E-034.34E-023.76E-012.99E+007.01E-031.19E-011.76E+002.57E+01 - 38M1 103.001.31E-031.17E-028.37E-025.67E-012.37E-032.72E-022.82E-012.90E+00 - 38M1 150.004.46E-043.12E-031.81E-021.00E-018.54E-046.89E-035.13E-023.81E-01 - 38M1 280.007.68E-053.55E-041.42E-035.42E-031.69E-048.22E-043.70E-031.66E-02 - 38M1 500.001.71E-055.53E-051.59E-044.41E-044.12E-051.38E-044.19E-041.25E-03 - 38M2 1.285.59E+011.15E+074.60E+103.12E+139.00E+012.08E+051.07E+083.32E+10 - 38M2 2.281.57E+016.30E+051.17E+095.64E+111.56E+011.66E+046.13E+061.63E+09 - 38M2 4.283.05E+002.65E+042.29E+077.13E+092.27E+001.14E+032.71E+055.12E+07 - 38M2 8.284.46E-019.65E+023.98E+057.40E+073.00E-017.32E+011.04E+041.24E+06 - 38M2 15.286.37E-024.53E+019.65E+031.07E+064.54E-025.90E+005.06E+023.72E+04 - 38M2 25.001.22E-023.93E+004.97E+023.59E+049.92E-037.88E-014.42E+012.16E+03 - 38M2 40.002.37E-033.87E-013.00E+011.42E+032.31E-031.16E-014.32E+001.41E+02 - 38M2 52.009.31E-041.07E-016.32E+002.36E+021.02E-034.01E-021.18E+003.07E+01 - 38M2 70.003.20E-042.51E-021.10E+003.14E+014.06E-041.20E-022.73E-015.49E+00 - 38M2 103.007.91E-053.89E-031.16E-012.36E+001.23E-042.55E-034.14E-025.97E-01 - 38M2 150.002.04E-056.56E-041.37E-021.99E-013.83E-055.73E-046.76E-037.11E-02 - 38M2 280.002.25E-063.80E-054.49E-043.89E-035.68E-065.08E-053.64E-042.33E-03 - 38M2 500.003.26E-073.22E-062.36E-051.32E-041.00E-065.88E-062.78E-051.18E-04 - 38M3 1.271.13E+022.20E+078.85E+105.96E+132.99E+016.96E+062.18E+116.76E+14 - 38M3 2.273.03E+011.17E+062.16E+091.04E+125.08E+003.82E+053.97E+095.38E+12 - 38M3 4.275.71E+004.79E+044.11E+071.27E+107.36E-011.63E+045.36E+073.22E+10 - 38M3 8.278.07E-011.70E+036.89E+051.27E+089.72E-026.02E+026.42E+051.79E+08 - 38M3 15.271.12E-017.69E+011.60E+041.75E+061.49E-022.84E+011.17E+041.68E+06 - 38M3 25.002.09E-026.41E+007.85E+025.56E+043.29E-032.47E+005.05E+024.38E+04 - 38M3 40.003.96E-036.00E-014.45E+012.06E+037.79E-042.44E-012.71E+011.48E+03 - 38M3 52.001.54E-031.60E-018.99E+003.27E+023.48E-046.78E-025.49E+002.33E+02 - 38M3 70.005.19E-043.60E-021.47E+004.07E+011.40E-041.61E-029.23E-012.96E+01 - 38M3 103.001.26E-045.20E-031.42E-012.74E+004.32E-052.54E-039.54E-022.15E+00 - 38M3 150.003.20E-058.09E-041.48E-022.02E-011.38E-054.37E-041.11E-021.80E-01 - 38M4 1.131.23E+024.37E+053.81E+107.47E+145.22E+001.20E+051.92E+093.88E+12 - 38M4 2.131.31E+011.69E+044.40E+083.20E+126.24E-014.95E+032.90E+073.49E+10 - 38M4 4.131.05E+005.52E+024.07E+061.15E+106.35E-021.74E+023.89E+052.61E+08 - 38M4 8.136.72E-021.56E+013.33E+043.84E+075.67E-035.56E+005.03E+031.81E+06 - 38M4 15.134.69E-035.54E-014.06E+022.17E+055.75E-042.34E-019.76E+011.94E+04 - 38M4 25.005.04E-043.54E-021.16E+013.41E+038.61E-051.80E-024.13E+005.07E+02 - 38M4 40.005.92E-052.62E-034.21E-017.21E+011.40E-051.62E-032.18E-011.70E+01 - 38M4 52.001.77E-056.08E-046.68E-028.49E+005.05E-064.23E-044.25E-022.58E+00 - 38M4 70.004.46E-061.16E-048.39E-037.65E-011.57E-069.26E-056.74E-033.09E-01 - 38M4 103.007.34E-071.37E-055.83E-043.47E-023.41E-071.29E-056.25E-042.00E-02 - 38M4 150.001.30E-071.76E-064.53E-051.79E-037.66E-081.92E-066.33E-051.44E-03 - 38M5 1.131.81E+026.13E+055.81E+101.10E+153.32E+001.61E+048.72E+097.32E+14 - 38M5 2.131.91E+012.36E+046.65E+084.66E+124.06E-016.86E+021.05E+082.63E+12 - 38M5 4.131.52E+007.62E+026.10E+061.65E+104.27E-022.54E+011.03E+067.68E+09 - 38M5 8.139.61E-022.14E+014.94E+045.43E+073.99E-038.81E-019.11E+032.13E+07 - 38M5 15.136.65E-037.46E-015.92E+023.00E+054.23E-044.07E-021.21E+021.06E+05 - 38M5 25.007.10E-044.69E-021.66E+014.57E+036.58E-053.40E-033.70E+001.58E+03 - 38M5 40.008.32E-053.39E-035.84E-019.27E+011.11E-053.35E-041.44E-013.30E+01 - 38M5 52.002.49E-057.74E-049.06E-021.06E+014.10E-069.19E-052.39E-023.94E+00 - 38M5 70.006.32E-061.45E-041.10E-029.15E-011.31E-062.14E-053.16E-033.64E-01 - 38M5 103.001.06E-061.66E-057.29E-043.86E-023.00E-073.27E-062.35E-041.72E-02 - 38M5 150.001.97E-072.06E-065.31E-051.81E-037.16E-085.39E-071.95E-059.36E-04 - 38N+ 50.001.91E-036.02E-022.67E+009.83E+013.18E-039.50E-022.84E+008.59E+01 - 38N+ 70.007.20E-041.44E-023.85E-019.81E+001.21E-032.39E-024.76E-019.76E+00 - 38N+ 100.002.54E-043.34E-035.38E-029.04E-014.42E-045.86E-037.79E-021.08E+00 - 38N+ 150.007.77E-056.79E-046.48E-036.72E-021.45E-041.28E-031.11E-021.01E-01 - 38N+ 200.003.38E-052.28E-041.57E-031.17E-026.76E-054.56E-043.01E-032.06E-02 - 38N+ 500.002.87E-069.73E-063.07E-059.75E-056.87E-062.35E-057.49E-052.38E-04 - 39K 18.041.17E+018.33E+011.52E+021.72E+022.30E+011.10E+038.93E+032.17E+04 - 39K 18.741.06E+018.74E+012.59E+025.73E+022.05E+019.49E+028.89E+033.49E+04 - 39K 20.048.86E+008.84E+014.23E+021.70E+031.68E+017.31E+028.18E+035.15E+04 - 39K 23.245.97E+007.54E+015.91E+024.21E+031.08E+014.10E+025.71E+035.80E+04 - 39K 27.043.97E+005.59E+015.46E+024.99E+036.93E+002.28E+023.47E+034.33E+04 - 39K 31.002.73E+004.00E+014.28E+024.35E+034.63E+001.34E+022.09E+032.83E+04 - 39K 37.001.67E+002.45E+012.73E+022.91E+032.75E+006.75E+011.03E+031.43E+04 - 39K 45.009.60E-011.35E+011.48E+021.56E+031.55E+003.18E+014.55E+026.10E+03 - 39K 57.004.88E-016.25E+006.39E+016.27E+027.84E-011.30E+011.65E+022.01E+03 - 39K 70.002.69E-013.11E+002.90E+012.60E+024.36E-016.00E+006.74E+017.37E+02 - 39K 87.001.43E-011.46E+001.21E+019.69E+012.36E-012.69E+002.61E+012.50E+02 - 39K 100.009.50E-028.90E-016.84E+005.03E+011.60E-011.62E+001.43E+011.25E+02 - 39K 117.005.99E-025.08E-013.55E+002.37E+011.04E-019.23E-017.28E+005.68E+01 - 39K 140.003.54E-022.66E-011.66E+009.94E+006.38E-024.90E-013.39E+002.33E+01 - 39K 165.002.19E-021.47E-018.29E-014.46E+004.11E-022.77E-011.70E+001.04E+01 - 39K 230.008.43E-034.50E-022.05E-018.91E-011.73E-029.11E-024.41E-012.12E+00 - 39K 315.003.52E-031.51E-025.67E-022.03E-017.82E-033.33E-021.30E-015.02E-01 - 39K 410.001.76E-036.37E-032.04E-026.27E-024.11E-031.49E-024.91E-021.59E-01 - 39K 520.009.73E-043.07E-038.60E-032.32E-022.34E-037.42E-032.13E-025.97E-02 - 39K 750.004.24E-041.11E-032.60E-035.87E-031.02E-032.70E-036.40E-031.47E-02 - 39K 1000.002.37E-045.50E-041.14E-032.28E-035.45E-041.28E-032.68E-035.39E-03 - 39K 1250.001.57E-043.36E-046.44E-041.18E-033.42E-047.41E-041.42E-032.62E-03 - 39K 1500.001.15E-042.31E-044.17E-047.22E-042.37E-044.83E-048.72E-041.51E-03 - 39L1 3.373.23E+011.23E+043.30E+062.25E+083.69E+024.84E+051.08E+087.59E+09 - 39L1 4.072.31E+013.87E+031.53E+061.59E+082.10E+021.97E+053.76E+073.16E+09 - 39L1 5.371.37E+015.41E+023.68E+055.10E+079.16E+015.32E+048.02E+067.06E+08 - 39L1 8.575.17E+003.11E+001.89E+043.38E+062.26E+016.08E+036.06E+054.53E+07 - 39L1 12.372.25E+001.22E+019.23E+022.49E+057.57E+001.15E+038.21E+044.89E+06 - 39L1 16.001.22E+001.19E+015.46E+012.98E+043.52E+003.67E+022.07E+041.02E+06 - 39L1 22.005.56E-017.24E+002.99E+011.29E+031.37E+009.16E+013.83E+031.47E+05 - 39L1 30.002.50E-013.50E+002.72E+011.36E+025.47E-012.44E+017.66E+022.27E+04 - 39L1 42.001.02E-011.36E+001.26E+018.99E+012.04E-016.05E+001.39E+023.07E+03 - 39L1 55.004.89E-025.93E-015.38E+004.25E+019.34E-022.03E+003.63E+016.36E+02 - 39L1 72.002.30E-022.46E-012.06E+001.57E+014.32E-027.03E-019.83E+001.36E+02 - 39L1 85.001.44E-021.41E-011.10E+007.94E+002.71E-023.71E-014.46E+005.33E+01 - 39L1 102.008.57E-037.55E-025.37E-013.59E+001.63E-021.86E-011.90E+001.94E+01 - 39L1 125.004.79E-033.73E-022.37E-011.43E+009.31E-038.78E-027.52E-016.43E+00 - 39L1 150.002.84E-031.97E-021.13E-016.16E-015.68E-034.54E-023.34E-012.44E+00 - 39L1 215.001.02E-035.58E-032.59E-021.15E-012.20E-031.30E-027.12E-023.89E-01 - 39L1 300.004.08E-041.79E-036.81E-032.48E-029.40E-044.34E-031.85E-027.80E-02 - 39L1 390.002.04E-047.60E-042.49E-037.84E-034.92E-041.91E-036.76E-032.37E-02 - 39L1 500.001.10E-043.54E-041.01E-032.80E-032.72E-049.07E-042.75E-038.17E-03 - 39L1 730.004.63E-051.24E-042.94E-046.77E-041.14E-043.13E-047.69E-041.83E-03 - 39L11000.002.46E-055.73E-051.20E-042.41E-045.75E-051.37E-042.92E-045.97E-04 - 39L2 3.166.34E+018.61E+057.95E+081.22E+114.06E+012.17E+042.55E+061.62E+08 - 39L2 3.863.55E+013.13E+052.41E+084.33E+102.19E+019.79E+031.34E+061.21E+08 - 39L2 5.161.49E+017.21E+044.23E+077.79E+098.92E+003.06E+034.30E+054.50E+07 - 39L2 8.363.29E+006.33E+032.33E+063.56E+082.00E+004.37E+025.12E+044.86E+06 - 39L2 12.169.70E-019.65E+022.45E+052.95E+076.26E-019.58E+018.89E+036.91E+05 - 39L2 16.003.87E-012.44E+024.70E+044.63E+062.67E-013.14E+012.39E+031.55E+05 - 39L2 22.001.30E-015.00E+016.96E+035.33E+059.92E-028.63E+005.13E+022.62E+04 - 39L2 30.004.42E-021.07E+011.09E+036.43E+043.78E-022.45E+001.13E+024.52E+03 - 39L2 42.001.34E-022.03E+001.47E+026.49E+031.33E-026.27E-012.17E+016.60E+02 - 39L2 55.005.07E-035.41E-012.99E+011.04E+035.74E-032.11E-015.79E+001.40E+02 - 39L2 72.001.91E-031.45E-016.14E+001.68E+022.49E-037.11E-021.55E+002.98E+01 - 39L2 85.001.05E-036.51E-022.33E+005.53E+011.48E-033.65E-026.89E-011.15E+01 - 39L2 102.005.40E-042.71E-028.13E-011.64E+018.44E-041.76E-022.84E-014.08E+00 - 39L2 125.002.59E-041.03E-022.54E-014.29E+004.50E-047.82E-031.06E-011.29E+00 - 39L2 150.001.34E-044.36E-039.04E-021.30E+002.56E-043.80E-034.45E-024.63E-01 - 39L2 215.003.75E-058.25E-041.23E-021.31E-018.49E-059.33E-048.14E-036.35E-02 - 39L2 300.001.18E-051.86E-042.07E-031.69E-023.08E-052.61E-041.76E-031.06E-02 - 39L2 390.004.87E-066.00E-055.36E-043.58E-031.40E-059.76E-055.45E-042.73E-03 - 39L2 500.002.16E-062.14E-051.57E-048.74E-046.70E-063.93E-051.85E-047.85E-04 - 39L2 730.006.80E-074.84E-062.68E-051.16E-042.22E-061.03E-053.84E-051.29E-04 - 39L21000.002.77E-071.53E-066.83E-062.45E-059.03E-073.52E-061.11E-053.15E-05 - 39L3 3.081.28E+021.74E+061.68E+092.68E+111.40E+015.63E+053.17E+091.83E+12 - 39L3 3.786.99E+016.16E+054.90E+089.04E+107.45E+002.03E+057.90E+083.79E+11 - 39L3 5.082.85E+011.37E+058.21E+071.54E+102.99E+004.64E+041.08E+083.92E+10 - 39L3 8.286.07E+001.15E+044.24E+066.53E+086.62E-014.06E+034.15E+069.60E+08 - 39L3 12.081.75E+001.70E+034.27E+055.15E+072.07E-016.19E+023.50E+055.66E+07 - 39L3 16.006.75E-014.10E+027.73E+047.55E+068.69E-021.53E+025.69E+047.06E+06 - 39L3 22.002.24E-018.18E+011.11E+048.40E+053.26E-023.15E+017.49E+036.87E+05 - 39L3 30.007.46E-021.70E+011.68E+039.75E+041.25E-026.80E+001.07E+037.33E+04 - 39L3 42.002.22E-023.12E+002.16E+029.33E+034.45E-031.30E+001.34E+026.71E+03 - 39L3 55.008.30E-038.00E-014.18E+011.42E+031.94E-033.49E-012.61E+011.02E+03 - 39L3 72.003.09E-032.06E-018.13E+002.16E+028.48E-049.48E-025.22E+001.59E+02 - 39L3 85.001.68E-038.96E-022.97E+006.78E+015.10E-044.27E-021.96E+005.14E+01 - 39L3 102.008.57E-043.60E-029.84E-011.90E+012.92E-041.79E-026.77E-011.51E+01 - 39L3 125.004.07E-041.31E-022.89E-014.64E+001.57E-046.86E-032.10E-013.92E+00 - 39L3 150.002.10E-045.32E-039.69E-021.32E+009.06E-052.93E-037.43E-021.19E+00 - 39L3 215.005.80E-059.23E-041.15E-021.13E-013.09E-055.63E-041.00E-021.19E-01 - 39L3 300.001.84E-051.91E-041.67E-031.22E-021.17E-051.28E-041.65E-031.51E-02 - 39L3 390.007.77E-065.80E-053.86E-042.23E-035.54E-064.13E-054.14E-043.13E-03 - 39L3 500.003.59E-061.97E-051.01E-044.74E-042.79E-061.47E-051.16E-047.37E-04 - 39L3 730.001.21E-064.29E-061.51E-055.20E-051.04E-063.39E-061.81E-058.90E-05 - 39L31000.005.28E-071.38E-063.65E-069.88E-064.88E-071.12E-064.22E-061.68E-05 - 39M1 1.392.49E+016.68E+046.74E+063.09E+098.93E+026.77E+068.45E+093.29E+12 - 39M1 2.391.10E+015.54E+032.10E+061.37E+081.77E+024.83E+052.81E+087.81E+10 - 39M1 4.393.57E+001.61E+021.34E+052.19E+072.86E+012.60E+046.95E+061.21E+09 - 39M1 8.399.14E-011.25E+002.64E+035.54E+054.13E+001.25E+031.57E+051.59E+07 - 39M1 15.392.24E-012.32E+001.34E+016.35E+036.76E-017.94E+015.23E+033.07E+05 - 39M1 25.006.70E-029.33E-015.83E+007.22E+011.60E-019.52E+003.82E+021.43E+04 - 39M1 40.001.95E-022.62E-012.40E+001.70E+014.03E-021.31E+003.30E+018.04E+02 - 39M1 52.009.58E-031.18E-011.08E+008.43E+001.88E-024.49E-018.78E+001.68E+02 - 39M1 70.004.20E-034.52E-023.79E-012.90E+008.03E-031.38E-012.03E+002.96E+01 - 39M1 103.001.41E-031.23E-028.63E-025.70E-012.71E-033.13E-023.24E-013.33E+00 - 39M1 150.004.82E-043.32E-031.90E-021.03E-019.73E-047.88E-035.87E-024.36E-01 - 39M1 280.008.36E-053.83E-041.51E-035.74E-031.91E-049.34E-044.21E-031.89E-02 - 39M1 500.001.88E-056.03E-051.73E-044.77E-044.65E-051.56E-044.74E-041.41E-03 - 39M2 1.315.42E+011.17E+074.65E+103.04E+139.69E+012.22E+051.10E+083.21E+10 - 39M2 2.311.58E+016.78E+051.26E+095.92E+111.73E+011.85E+046.63E+061.69E+09 - 39M2 4.313.20E+002.95E+042.56E+077.81E+092.59E+001.30E+033.03E+055.56E+07 - 39M2 8.314.80E-011.10E+034.53E+058.31E+073.46E-018.42E+011.18E+041.38E+06 - 39M2 15.317.00E-025.20E+011.11E+041.22E+065.28E-026.83E+005.80E+024.21E+04 - 39M2 25.001.36E-024.56E+005.79E+024.16E+041.16E-029.22E-015.13E+012.48E+03 - 39M2 40.002.68E-034.50E-013.50E+011.65E+032.71E-031.36E-015.03E+001.63E+02 - 39M2 52.001.06E-031.24E-017.39E+002.75E+021.20E-034.71E-021.38E+003.56E+01 - 39M2 70.003.65E-042.93E-021.29E+003.67E+014.79E-041.42E-023.20E-016.40E+00 - 39M2 103.009.07E-054.56E-031.37E-012.76E+001.45E-043.01E-034.86E-026.98E-01 - 39M2 150.002.35E-057.70E-041.61E-022.34E-014.55E-056.78E-047.96E-038.34E-02 - 39M2 280.002.64E-064.48E-055.31E-044.59E-036.76E-066.04E-054.31E-042.75E-03 - 39M2 500.003.87E-073.81E-062.80E-051.56E-041.19E-067.01E-063.31E-051.40E-04 - 39M3 1.301.10E+022.24E+078.95E+105.81E+133.18E+017.51E+062.35E+117.30E+14 - 39M3 2.303.07E+011.26E+062.33E+091.09E+125.60E+004.34E+054.61E+096.28E+12 - 39M3 4.305.99E+005.33E+044.58E+071.38E+108.26E-011.91E+046.47E+073.91E+10 - 39M3 8.308.68E-011.92E+037.81E+051.41E+081.10E-017.18E+027.88E+052.20E+08 - 39M3 15.301.23E-018.78E+011.83E+041.98E+061.70E-023.42E+011.44E+042.08E+06 - 39M3 25.002.33E-027.40E+009.09E+026.39E+043.78E-033.00E+006.26E+025.45E+04 - 39M3 40.004.45E-036.94E-015.16E+012.38E+038.97E-042.96E-013.35E+011.83E+03 - 39M3 52.001.73E-031.85E-011.04E+013.78E+024.02E-048.21E-026.74E+002.86E+02 - 39M3 70.005.89E-044.17E-021.71E+004.71E+011.62E-041.94E-021.13E+003.62E+01 - 39M3 103.001.44E-046.04E-031.65E-013.18E+004.98E-053.06E-031.16E-012.62E+00 - 39M3 150.003.67E-059.40E-041.72E-022.35E-011.60E-055.24E-041.35E-022.18E-01 - 39M3 280.004.11E-064.68E-054.42E-043.43E-032.52E-063.09E-054.29E-044.18E-03 - 39M3 500.006.38E-073.51E-061.81E-058.46E-054.97E-072.63E-062.08E-051.33E-04 - 39M4 1.161.29E+024.65E+054.12E+108.12E+145.84E+001.36E+052.18E+094.30E+12 - 39M4 2.161.44E+011.90E+045.11E+083.77E+127.25E-015.91E+033.51E+074.15E+10 - 39M4 4.161.21E+006.41E+024.92E+061.41E+107.57E-022.14E+024.86E+053.22E+08 - 39M4 8.167.92E-021.86E+014.12E+044.82E+076.88E-036.95E+006.37E+032.27E+06 - 39M4 15.165.64E-036.70E-015.07E+022.75E+057.06E-042.95E-011.24E+022.47E+04 - 39M4 25.006.18E-044.36E-021.47E+014.38E+031.07E-042.29E-025.32E+006.52E+02 - 39M4 40.007.33E-053.25E-035.34E-019.25E+011.76E-052.07E-032.81E-012.19E+01 - 39M4 52.002.20E-057.57E-048.47E-021.09E+016.32E-065.41E-045.48E-023.33E+00 - 39M4 70.005.59E-061.45E-041.07E-029.83E-011.97E-061.18E-048.69E-033.98E-01 - 39M4 103.009.36E-071.72E-057.42E-044.47E-024.30E-071.66E-058.07E-042.58E-02 - 39M4 150.001.72E-072.21E-065.77E-052.31E-039.68E-082.46E-068.17E-051.86E-03 - 39M5 1.161.90E+026.51E+056.29E+101.20E+153.70E+001.81E+049.99E+098.46E+14 - 39M5 2.162.10E+012.64E+047.74E+085.50E+124.69E-018.09E+021.28E+083.31E+12 - 39M5 4.161.74E+008.82E+027.39E+062.02E+105.06E-023.08E+011.31E+061.01E+10 - 39M5 8.161.13E-012.53E+016.12E+046.81E+074.80E-031.08E+001.18E+042.85E+07 - 39M5 15.167.98E-038.98E-017.41E+023.79E+055.16E-045.04E-021.58E+021.42E+05 - 39M5 25.008.67E-045.74E-022.10E+015.86E+038.12E-054.25E-034.90E+002.14E+03 - 39M5 40.001.02E-044.18E-037.41E-011.19E+021.38E-054.19E-041.91E-014.44E+01 - 39M5 52.003.06E-059.59E-041.15E-011.36E+015.10E-061.15E-043.15E-025.28E+00 - 39M5 70.007.77E-061.80E-041.40E-021.17E+001.64E-062.68E-054.16E-034.86E-01 - 39M5 103.001.31E-062.07E-059.27E-044.94E-023.75E-074.11E-063.08E-042.29E-02 - 39M5 150.002.43E-072.57E-066.75E-052.33E-038.98E-086.79E-072.55E-051.24E-03 - 39N+ 50.002.19E-037.26E-023.35E+001.26E+023.89E-031.18E-013.63E+001.12E+02 - 39N+ 70.008.29E-041.71E-024.79E-011.24E+011.47E-032.96E-026.00E-011.25E+01 - 39N+ 100.002.93E-043.93E-036.58E-021.13E+005.38E-047.22E-039.72E-021.36E+00 - 39N+ 150.008.98E-057.93E-047.79E-038.29E-021.76E-041.56E-031.37E-021.26E-01 - 39N+ 200.003.91E-052.65E-041.87E-031.43E-028.19E-055.56E-043.70E-032.55E-02 - 39N+ 500.003.35E-061.13E-053.60E-051.15E-048.24E-062.84E-059.05E-052.89E-04 - 40K 19.001.05E+017.06E+011.18E+021.19E+022.21E+011.00E+037.65E+031.70E+04 - 40K 19.709.57E+007.41E+012.00E+023.97E+021.98E+018.70E+027.63E+032.74E+04 - 40K 21.008.09E+007.53E+013.28E+021.19E+031.64E+016.78E+027.09E+034.08E+04 - 40K 24.205.55E+006.54E+014.71E+023.08E+031.08E+013.90E+025.08E+034.77E+04 - 40K 28.003.75E+004.96E+014.49E+023.80E+037.01E+002.21E+023.18E+033.70E+04 - 40K 32.002.60E+003.60E+013.61E+023.43E+034.72E+001.32E+021.95E+032.48E+04 - 40K 38.001.61E+002.25E+012.37E+022.39E+032.85E+006.79E+019.89E+021.30E+04 - 40K 46.009.44E-011.27E+011.32E+021.33E+031.63E+003.26E+014.48E+025.75E+03 - 40K 58.004.87E-016.01E+005.90E+015.56E+028.34E-011.35E+011.66E+021.96E+03 - 40K 71.002.72E-013.04E+002.74E+012.38E+024.68E-016.34E+006.93E+017.36E+02 - 40K 88.001.46E-011.45E+001.17E+019.08E+012.55E-012.87E+002.73E+012.55E+02 - 40K 101.009.74E-028.90E-016.66E+004.79E+011.74E-011.74E+001.50E+011.28E+02 - 40K 118.006.18E-025.12E-013.50E+002.29E+011.13E-019.94E-017.71E+005.92E+01 - 40K 141.003.67E-022.71E-011.66E+009.73E+006.96E-025.30E-013.62E+002.45E+01 - 40K 170.002.13E-021.38E-017.55E-013.94E+004.22E-022.78E-011.66E+009.82E+00 - 40K 235.008.43E-034.39E-021.95E-018.30E-011.81E-029.39E-024.45E-012.10E+00 - 40K 320.003.59E-031.52E-025.59E-021.97E-018.31E-033.50E-021.35E-015.12E-01 - 40K 410.001.87E-036.77E-032.15E-026.58E-024.53E-031.64E-025.39E-021.74E-01 - 40K 520.001.04E-033.27E-039.13E-032.46E-022.58E-038.18E-032.34E-026.55E-02 - 40K 750.004.54E-041.19E-032.78E-036.26E-031.12E-032.97E-037.03E-031.61E-02 - 40K 1000.002.54E-045.91E-041.23E-032.45E-035.96E-041.41E-032.94E-035.91E-03 - 40K 1250.001.69E-043.61E-046.93E-041.27E-033.73E-048.12E-041.56E-032.87E-03 - 40K 1500.001.23E-042.48E-044.50E-047.79E-042.58E-045.28E-049.55E-041.65E-03 - 40L1 3.532.96E+011.11E+042.74E+061.69E+083.64E+024.56E+059.68E+076.33E+09 - 40L1 4.232.15E+013.70E+031.34E+061.27E+082.12E+021.93E+053.53E+072.77E+09 - 40L1 5.531.30E+015.73E+023.46E+054.43E+079.50E+015.43E+047.92E+066.61E+08 - 40L1 8.735.04E+004.10E+002.01E+043.32E+062.43E+016.50E+036.34E+054.57E+07 - 40L1 12.532.24E+009.70E+001.15E+032.68E+058.25E+001.26E+038.85E+045.13E+06 - 40L1 16.001.26E+001.05E+019.17E+013.81E+043.98E+004.24E+022.38E+041.16E+06 - 40L1 22.005.76E-016.85E+002.24E+011.92E+031.55E+001.05E+024.40E+031.67E+05 - 40L1 30.002.61E-013.42E+002.35E+011.31E+026.18E-012.80E+018.76E+022.58E+04 - 40L1 42.001.07E-011.36E+001.18E+017.70E+012.30E-016.90E+001.58E+023.48E+03 - 40L1 55.005.13E-026.01E-015.21E+003.88E+011.05E-012.31E+004.13E+017.19E+02 - 40L1 72.002.43E-022.53E-012.04E+001.50E+014.87E-027.97E-011.11E+011.53E+02 - 40L1 85.001.52E-021.45E-011.10E+007.71E+003.05E-024.20E-015.04E+006.00E+01 - 40L1 102.009.08E-037.83E-025.44E-013.54E+001.83E-022.10E-012.15E+002.18E+01 - 40L1 125.005.09E-033.88E-022.43E-011.43E+001.04E-029.89E-028.47E-017.22E+00 - 40L1 150.003.02E-032.06E-021.16E-016.24E-016.37E-035.11E-023.75E-012.74E+00 - 40L1 215.001.09E-035.89E-032.70E-021.18E-012.46E-031.46E-027.97E-024.34E-01 - 40L1 300.004.37E-041.90E-037.17E-032.60E-021.05E-034.85E-032.06E-028.70E-02 - 40L1 390.002.19E-048.11E-042.64E-038.27E-035.48E-042.13E-037.53E-032.64E-02 - 40L1 500.001.18E-043.79E-041.08E-032.98E-033.02E-041.01E-033.06E-039.08E-03 - 40L1 730.005.02E-051.33E-043.17E-047.28E-041.26E-043.47E-048.54E-042.03E-03 - 40L11000.002.65E-056.20E-051.30E-042.61E-046.33E-051.52E-043.23E-046.62E-04 - 40L2 3.315.84E+017.70E+056.77E+089.64E+104.01E+012.04E+042.21E+061.27E+08 - 40L2 4.013.36E+012.92E+052.16E+083.62E+102.22E+019.49E+031.21E+061.00E+08 - 40L2 5.311.45E+017.06E+044.01E+077.00E+099.31E+003.08E+034.10E+054.02E+07 - 40L2 8.513.34E+006.56E+032.36E+063.49E+082.16E+004.61E+025.21E+044.74E+06 - 40L2 12.311.01E+001.03E+032.57E+053.02E+076.89E-011.04E+029.36E+037.06E+05 - 40L2 16.004.22E-012.77E+025.33E+045.18E+063.05E-013.58E+012.68E+031.71E+05 - 40L2 22.001.43E-015.67E+017.91E+035.99E+051.14E-019.85E+005.78E+022.92E+04 - 40L2 30.004.87E-021.22E+011.24E+037.27E+044.34E-022.80E+001.28E+025.07E+03 - 40L2 42.001.48E-022.31E+001.68E+027.36E+031.53E-027.18E-012.47E+017.44E+02 - 40L2 55.005.65E-036.17E-013.41E+011.18E+036.62E-032.41E-016.59E+001.59E+02 - 40L2 72.002.14E-031.66E-017.02E+001.92E+022.87E-038.17E-021.77E+003.39E+01 - 40L2 85.001.17E-037.45E-022.67E+006.31E+011.71E-034.20E-027.89E-011.31E+01 - 40L2 102.006.07E-043.10E-029.32E-011.88E+019.75E-042.02E-023.26E-014.65E+00 - 40L2 125.002.91E-041.18E-022.91E-014.91E+005.20E-049.03E-031.22E-011.47E+00 - 40L2 150.001.51E-045.00E-031.04E-011.50E+002.97E-044.40E-035.12E-025.31E-01 - 40L2 215.004.23E-059.50E-041.42E-021.51E-019.86E-051.08E-039.40E-037.31E-02 - 40L2 300.001.34E-052.15E-042.39E-031.95E-023.59E-053.03E-042.04E-031.23E-02 - 40L2 390.005.55E-066.93E-056.21E-044.14E-031.63E-051.13E-046.32E-043.16E-03 - 40L2 500.002.50E-062.47E-051.82E-041.01E-037.81E-064.58E-052.15E-049.10E-04 - 40L2 730.007.91E-075.60E-063.11E-051.35E-042.59E-061.20E-054.48E-051.50E-04 - 40L21000.003.11E-071.78E-067.97E-062.86E-051.05E-064.12E-061.30E-053.68E-05 - 40L3 3.221.18E+021.56E+061.44E+092.13E+111.37E+015.34E+052.89E+091.59E+12 - 40L3 3.926.62E+015.76E+054.40E+087.62E+107.46E+002.00E+057.59E+083.50E+11 - 40L3 5.222.79E+011.35E+057.81E+071.39E+103.08E+004.79E+041.10E+083.90E+10 - 40L3 8.426.17E+001.19E+044.31E+066.40E+087.06E-014.42E+034.55E+061.03E+09 - 40L3 12.221.82E+001.81E+034.49E+055.27E+072.24E-016.92E+023.95E+056.31E+07 - 40L3 16.007.32E-014.62E+028.72E+048.40E+069.77E-021.81E+026.92E+048.56E+06 - 40L3 22.002.44E-019.23E+011.25E+049.38E+053.67E-023.74E+019.06E+038.30E+05 - 40L3 30.008.18E-021.93E+011.90E+031.09E+051.41E-028.06E+001.29E+038.82E+04 - 40L3 42.002.44E-023.52E+002.44E+021.05E+045.01E-031.54E+001.61E+028.04E+03 - 40L3 55.009.17E-039.05E-014.73E+011.60E+032.19E-034.12E-013.12E+011.22E+03 - 40L3 72.003.42E-032.33E-019.21E+002.44E+029.57E-041.12E-016.22E+001.89E+02 - 40L3 85.001.86E-031.01E-013.37E+007.66E+015.76E-045.03E-022.33E+006.11E+01 - 40L3 102.009.53E-044.08E-021.12E+002.15E+013.30E-042.11E-028.03E-011.79E+01 - 40L3 125.004.53E-041.48E-023.28E-015.26E+001.78E-048.06E-032.48E-014.64E+00 - 40L3 150.002.34E-046.04E-031.10E-011.49E+001.02E-043.43E-038.79E-021.40E+00 - 40L3 215.006.51E-051.05E-031.31E-021.28E-013.49E-056.57E-041.18E-021.40E-01 - 40L3 300.002.08E-052.17E-041.91E-031.39E-021.32E-051.48E-041.93E-031.78E-02 - 40L3 390.008.80E-066.60E-054.39E-042.54E-036.26E-064.78E-054.85E-043.67E-03 - 40L3 500.004.05E-062.24E-051.15E-045.40E-043.16E-061.70E-051.35E-048.63E-04 - 40L3 730.001.35E-064.88E-061.73E-055.94E-051.18E-063.89E-062.10E-051.04E-04 - 40L31000.006.03E-071.57E-064.16E-061.13E-055.51E-071.28E-064.89E-061.95E-05 - 40M1 1.432.39E+016.59E+045.69E+063.38E+099.50E+027.19E+068.92E+093.37E+12 - 40M1 2.431.08E+015.89E+032.02E+061.09E+081.94E+025.38E+053.14E+088.55E+10 - 40M1 4.433.59E+001.95E+021.42E+052.15E+073.21E+012.98E+048.02E+061.38E+09 - 40M1 8.439.35E-011.04E+003.15E+036.08E+054.68E+001.45E+031.83E+051.83E+07 - 40M1 15.432.32E-012.11E+002.04E+017.97E+037.71E-019.24E+016.10E+033.55E+05 - 40M1 25.007.04E-029.13E-014.89E+001.03E+021.84E-011.11E+014.46E+021.67E+04 - 40M1 40.002.07E-022.66E-012.27E+001.49E+014.62E-021.52E+003.84E+019.32E+02 - 40M1 52.001.02E-021.21E-011.05E+007.77E+002.15E-025.19E-011.02E+011.94E+02 - 40M1 70.004.48E-034.70E-023.80E-012.79E+009.18E-031.59E-012.34E+003.41E+01 - 40M1 103.001.51E-031.29E-028.85E-025.70E-013.10E-033.58E-023.71E-013.82E+00 - 40M1 150.005.19E-043.52E-031.98E-021.06E-011.11E-039.00E-036.69E-024.97E-01 - 40M1 280.009.09E-054.11E-041.61E-036.07E-032.16E-041.06E-034.77E-032.14E-02 - 40M1 500.002.04E-056.55E-051.87E-045.15E-045.24E-051.76E-045.35E-041.60E-03 - 40M2 1.345.27E+011.20E+074.71E+102.98E+131.04E+022.36E+051.13E+083.12E+10 - 40M2 2.341.60E+017.30E+051.35E+096.21E+111.93E+012.05E+047.17E+061.76E+09 - 40M2 4.343.34E+003.28E+042.85E+078.54E+092.94E+001.47E+033.36E+056.03E+07 - 40M2 8.345.15E-011.24E+035.13E+059.30E+073.98E-019.65E+011.34E+041.54E+06 - 40M2 15.347.67E-025.94E+011.27E+041.39E+066.12E-027.88E+006.62E+024.75E+04 - 40M2 25.001.52E-025.28E+006.72E+024.80E+041.36E-021.07E+005.94E+012.85E+03 - 40M2 40.003.01E-035.21E-014.07E+011.91E+033.18E-031.59E-015.84E+001.88E+02 - 40M2 52.001.19E-031.44E-018.61E+003.19E+021.41E-035.50E-021.60E+004.12E+01 - 40M2 70.004.14E-043.40E-021.50E+004.26E+015.63E-041.66E-023.73E-017.42E+00 - 40M2 103.001.04E-045.32E-031.60E-013.22E+001.71E-043.54E-035.69E-028.13E-01 - 40M2 150.002.70E-059.01E-041.89E-022.74E-015.37E-057.98E-049.34E-039.75E-02 - 40M2 280.003.05E-065.26E-056.26E-045.40E-038.01E-067.14E-055.08E-043.23E-03 - 40M2 500.004.51E-074.48E-063.31E-051.85E-041.42E-068.33E-063.92E-051.66E-04 - 40M3 1.331.07E+022.29E+079.09E+105.71E+133.39E+018.11E+062.55E+117.91E+14 - 40M3 2.333.11E+011.35E+062.51E+091.14E+126.14E+004.93E+055.34E+097.33E+12 - 40M3 4.336.25E+005.91E+045.09E+071.51E+109.25E-012.23E+047.78E+074.74E+10 - 40M3 8.339.30E-012.17E+038.83E+051.58E+081.25E-018.54E+029.64E+052.71E+08 - 40M3 15.331.34E-011.00E+022.09E+042.24E+061.93E-024.10E+011.77E+042.55E+06 - 40M3 25.002.58E-028.51E+001.05E+037.33E+044.33E-033.62E+007.72E+026.74E+04 - 40M3 40.004.98E-037.99E-015.96E+012.73E+031.03E-033.57E-014.10E+012.25E+03 - 40M3 52.001.95E-032.14E-011.20E+014.34E+024.61E-049.89E-028.23E+003.50E+02 - 40M3 70.006.64E-044.81E-021.98E+005.43E+011.86E-042.34E-021.37E+004.41E+01 - 40M3 103.001.63E-046.98E-031.91E-013.67E+005.74E-053.67E-031.41E-013.18E+00 - 40M3 150.004.19E-051.09E-032.00E-022.72E-011.84E-056.26E-041.62E-022.63E-01 - 40M3 280.004.73E-065.42E-055.14E-043.98E-032.91E-063.66E-055.15E-045.02E-03 - 40M3 500.007.24E-074.06E-062.10E-059.83E-055.73E-073.10E-062.48E-051.59E-04 - 40M4 1.181.36E+024.97E+054.47E+108.90E+146.51E+001.54E+052.49E+094.80E+12 - 40M4 2.181.59E+012.13E+045.92E+084.45E+128.38E-017.03E+034.24E+074.94E+10 - 40M4 4.181.37E+007.41E+025.92E+061.72E+108.95E-022.61E+026.03E+053.97E+08 - 40M4 8.189.26E-022.20E+015.05E+046.01E+078.27E-038.63E+008.01E+032.84E+06 - 40M4 15.186.72E-038.04E-016.29E+023.45E+058.60E-043.69E-011.57E+023.11E+04 - 40M4 25.007.48E-045.32E-021.84E+015.57E+031.32E-042.89E-026.78E+008.30E+02 - 40M4 40.008.96E-053.99E-036.71E-011.18E+022.17E-052.62E-033.58E-012.79E+01 - 40M4 52.002.70E-059.33E-041.07E-011.39E+017.85E-066.85E-046.99E-024.24E+00 - 40M4 70.006.90E-061.80E-041.34E-021.25E+002.45E-061.50E-041.11E-025.08E-01 - 40M4 103.001.16E-062.15E-059.35E-045.69E-025.36E-072.10E-051.03E-033.30E-02 - 40M4 150.002.08E-072.78E-067.29E-052.94E-031.21E-073.13E-061.05E-042.38E-03 - 40M5 1.182.00E+026.93E+056.84E+101.31E+154.12E+002.03E+041.15E+109.83E+14 - 40M5 2.182.31E+012.94E+048.98E+086.47E+125.40E-019.50E+021.57E+084.15E+12 - 40M5 4.181.98E+001.02E+038.90E+062.47E+105.95E-023.71E+011.66E+061.32E+10 - 40M5 8.181.32E-012.97E+017.52E+048.47E+075.74E-031.32E+001.53E+043.79E+07 - 40M5 15.189.49E-031.07E+009.21E+024.75E+056.24E-046.18E-022.05E+021.90E+05 - 40M5 25.001.05E-036.96E-022.64E+017.44E+039.93E-055.26E-036.42E+002.86E+03 - 40M5 40.001.25E-045.10E-039.32E-011.51E+021.70E-055.19E-042.50E-015.92E+01 - 40M5 52.003.75E-051.17E-031.45E-011.72E+016.29E-061.43E-044.12E-027.01E+00 - 40M5 70.009.56E-062.22E-041.77E-021.49E+002.03E-063.33E-055.42E-036.42E-01 - 40M5 103.001.60E-062.57E-051.17E-036.28E-024.66E-075.12E-064.00E-043.01E-02 - 40M5 150.002.92E-073.21E-068.51E-052.96E-031.12E-078.46E-073.29E-051.62E-03 - 40N+ 50.002.46E-038.48E-024.03E+001.53E+024.64E-031.44E-014.49E+001.41E+02 - 40N+ 70.009.31E-041.98E-025.72E-011.51E+011.76E-033.58E-027.36E-011.56E+01 - 40N+ 100.003.30E-044.50E-037.78E-021.36E+006.41E-048.68E-031.18E-011.67E+00 - 40N+ 150.001.01E-049.03E-049.09E-039.87E-022.10E-041.87E-031.66E-021.53E-01 - 40N+ 200.004.44E-053.02E-042.17E-031.69E-029.70E-056.62E-044.43E-033.07E-02 - 40N+ 500.003.82E-061.29E-054.12E-051.33E-049.68E-063.35E-051.07E-043.43E-04 - 41K 19.999.50E+006.00E+019.18E+018.27E+012.13E+019.12E+026.57E+031.34E+04 - 41K 20.698.69E+006.29E+011.55E+022.75E+021.92E+017.98E+026.57E+032.16E+04 - 41K 21.997.40E+006.42E+012.56E+028.38E+021.60E+016.29E+026.16E+033.25E+04 - 41K 25.195.16E+005.68E+013.77E+022.25E+031.07E+013.71E+024.53E+033.92E+04 - 41K 28.993.54E+004.39E+013.70E+022.90E+037.08E+002.15E+022.91E+033.16E+04 - 41K 33.002.48E+003.24E+013.05E+022.71E+034.83E+001.30E+021.82E+032.18E+04 - 41K 39.001.56E+002.07E+012.06E+021.96E+032.95E+006.84E+019.50E+021.19E+04 - 41K 47.009.27E-011.19E+011.19E+021.13E+031.71E+003.34E+014.41E+025.42E+03 - 41K 59.004.86E-015.77E+005.44E+014.93E+028.86E-011.41E+011.68E+021.91E+03 - 41K 72.002.74E-012.97E+002.59E+012.17E+025.01E-016.68E+007.12E+017.34E+02 - 41K 89.001.48E-011.43E+001.13E+018.50E+012.75E-013.05E+002.84E+012.59E+02 - 41K 102.009.97E-028.89E-016.49E+004.54E+011.88E-011.86E+001.58E+011.32E+02 - 41K 119.006.36E-025.15E-013.44E+002.20E+011.23E-011.07E+008.16E+006.15E+01 - 41K 142.003.80E-022.75E-011.65E+009.50E+007.59E-025.73E-013.86E+002.58E+01 - 41K 170.002.25E-021.45E-017.78E-014.01E+004.68E-023.07E-011.82E+001.07E+01 - 41K 235.008.95E-034.61E-022.03E-018.55E-012.01E-021.04E-014.89E-012.29E+00 - 41K 320.003.83E-031.60E-025.86E-022.05E-019.17E-033.86E-021.48E-015.60E-01 - 41K 410.002.00E-037.17E-032.27E-026.90E-024.99E-031.81E-025.92E-021.91E-01 - 41K 520.001.11E-033.48E-039.67E-032.59E-022.83E-038.99E-032.57E-027.16E-02 - 41K 750.004.87E-041.27E-032.97E-036.67E-031.22E-033.26E-037.71E-031.77E-02 - 41K 1000.002.73E-046.33E-041.32E-032.62E-036.51E-041.54E-033.22E-036.47E-03 - 41K 1250.001.80E-043.88E-047.45E-041.37E-034.07E-048.89E-041.71E-033.14E-03 - 41K 1500.001.32E-042.67E-044.84E-048.39E-042.80E-045.77E-041.04E-031.80E-03 - 41L1 3.702.71E+019.97E+032.27E+061.25E+083.58E+024.29E+058.66E+075.25E+09 - 41L1 4.402.00E+013.51E+031.16E+061.00E+082.13E+021.87E+053.29E+072.42E+09 - 41L1 5.701.23E+015.99E+023.22E+053.81E+079.81E+015.51E+047.77E+066.13E+08 - 41L1 8.904.91E+006.16E+002.11E+043.21E+062.59E+016.92E+036.60E+054.58E+07 - 41L1 12.702.22E+007.56E+001.39E+032.84E+058.95E+001.37E+039.48E+045.35E+06 - 41L1 16.001.29E+009.17E+001.48E+024.73E+044.49E+004.89E+022.73E+041.31E+06 - 41L1 22.005.95E-016.42E+001.75E+012.73E+031.74E+001.21E+025.03E+031.89E+05 - 41L1 30.002.71E-013.33E+002.00E+011.49E+026.97E-013.20E+019.99E+022.92E+04 - 41L1 42.001.12E-011.36E+001.09E+016.56E+012.60E-017.86E+001.79E+023.93E+03 - 41L1 55.005.38E-026.08E-015.02E+003.52E+011.19E-012.63E+004.67E+018.11E+02 - 41L1 72.002.56E-022.58E-012.02E+001.42E+015.48E-029.02E-011.26E+011.72E+02 - 41L1 85.001.61E-021.50E-011.10E+007.46E+003.42E-024.74E-015.69E+006.75E+01 - 41L1 102.009.60E-038.10E-025.49E-013.49E+002.05E-022.37E-012.42E+002.45E+01 - 41L1 125.005.39E-034.04E-022.47E-011.43E+001.17E-021.11E-019.51E-018.09E+00 - 41L1 150.003.21E-032.15E-021.19E-016.30E-017.13E-035.74E-024.20E-013.07E+00 - 41L1 215.001.17E-036.20E-032.81E-021.22E-012.74E-031.63E-028.91E-024.85E-01 - 41L1 300.004.68E-042.01E-037.53E-032.71E-021.17E-035.41E-032.30E-029.68E-02 - 41L1 390.002.36E-048.63E-042.79E-038.71E-036.09E-042.37E-038.38E-032.93E-02 - 41L1 500.001.27E-044.06E-041.15E-033.16E-033.35E-041.12E-033.39E-031.01E-02 - 41L1 730.005.39E-051.43E-043.40E-047.82E-041.40E-043.85E-049.46E-042.25E-03 - 41L11000.002.87E-056.70E-051.40E-042.82E-046.97E-051.68E-043.57E-047.32E-04 - 41L2 3.465.38E+016.87E+055.73E+087.55E+103.95E+011.90E+041.90E+069.85E+07 - 41L2 4.163.17E+012.71E+051.92E+083.01E+102.24E+019.16E+031.09E+068.24E+07 - 41L2 5.461.41E+016.89E+043.78E+076.24E+099.68E+003.09E+033.89E+053.56E+07 - 41L2 8.663.39E+006.76E+032.39E+063.39E+082.33E+004.84E+025.26E+044.59E+06 - 41L2 12.461.05E+001.09E+032.69E+053.08E+077.56E-011.12E+029.79E+037.16E+05 - 41L2 16.004.59E-013.14E+026.02E+045.78E+063.49E-014.06E+013.00E+031.87E+05 - 41L2 22.001.56E-016.43E+018.96E+036.72E+051.30E-011.12E+016.49E+023.23E+04 - 41L2 30.005.35E-021.38E+011.41E+038.18E+044.97E-023.19E+001.44E+025.66E+03 - 41L2 42.001.64E-022.63E+001.91E+028.31E+031.75E-028.19E-012.79E+018.35E+02 - 41L2 55.006.27E-037.01E-013.88E+011.34E+037.60E-032.76E-017.49E+001.79E+02 - 41L2 72.002.38E-031.89E-018.01E+002.18E+023.30E-039.35E-022.01E+003.84E+01 - 41L2 85.001.31E-038.49E-023.05E+007.18E+011.97E-034.81E-029.00E-011.49E+01 - 41L2 102.006.80E-043.54E-021.07E+002.14E+011.12E-032.33E-023.72E-015.29E+00 - 41L2 125.003.27E-041.35E-023.34E-015.61E+006.01E-041.04E-021.40E-011.68E+00 - 41L2 150.001.70E-045.72E-031.19E-011.71E+003.43E-045.06E-035.87E-026.06E-01 - 41L2 215.004.79E-051.09E-031.63E-021.73E-011.14E-041.25E-031.08E-028.38E-02 - 41L2 300.001.52E-052.47E-042.76E-032.25E-024.16E-053.50E-042.35E-031.41E-02 - 41L2 390.006.34E-067.98E-057.17E-044.78E-031.90E-051.32E-047.31E-043.64E-03 - 41L2 500.002.84E-062.85E-052.10E-041.17E-039.08E-065.32E-052.50E-041.05E-03 - 41L2 730.008.87E-076.47E-063.61E-051.56E-043.01E-061.40E-055.20E-051.74E-04 - 41L21000.003.58E-072.06E-069.25E-063.32E-051.23E-064.81E-061.51E-054.28E-05 - 41L3 3.371.09E+021.40E+061.22E+091.68E+111.33E+015.04E+052.61E+091.37E+12 - 41L3 4.076.26E+015.37E+053.94E+086.37E+107.45E+001.97E+057.25E+083.22E+11 - 41L3 5.372.71E+011.32E+057.39E+071.24E+103.17E+004.93E+041.12E+083.84E+10 - 41L3 8.576.24E+001.23E+044.35E+066.23E+087.50E-014.79E+034.94E+061.10E+09 - 41L3 12.371.88E+001.91E+034.68E+055.36E+072.42E-017.71E+024.43E+056.98E+07 - 41L3 16.007.92E-015.20E+029.80E+049.31E+061.09E-012.14E+028.37E+041.03E+07 - 41L3 22.002.65E-011.04E+021.41E+041.05E+064.11E-024.41E+011.09E+049.98E+05 - 41L3 30.008.94E-022.17E+012.14E+031.22E+051.58E-029.51E+001.55E+031.06E+05 - 41L3 42.002.68E-023.97E+002.76E+021.18E+045.63E-031.81E+001.92E+029.59E+03 - 41L3 55.001.01E-021.02E+005.34E+011.79E+032.46E-034.85E-013.72E+011.45E+03 - 41L3 72.003.78E-032.63E-011.04E+012.74E+021.08E-031.31E-017.39E+002.25E+02 - 41L3 85.002.06E-031.15E-013.81E+008.63E+016.48E-045.90E-022.76E+007.24E+01 - 41L3 102.001.06E-034.61E-021.26E+002.43E+013.71E-042.47E-029.50E-012.12E+01 - 41L3 125.005.04E-041.68E-023.72E-015.93E+002.00E-049.42E-032.93E-015.47E+00 - 41L3 150.002.61E-046.83E-031.25E-011.69E+001.15E-044.01E-031.04E-011.66E+00 - 41L3 215.007.23E-051.19E-031.48E-021.45E-013.94E-057.64E-041.38E-021.65E-01 - 41L3 300.002.31E-052.46E-042.17E-031.57E-021.49E-051.72E-042.26E-032.08E-02 - 41L3 390.009.86E-067.48E-054.99E-042.88E-037.06E-065.52E-055.66E-044.30E-03 - 41L3 500.004.57E-062.54E-051.31E-046.13E-043.56E-061.96E-051.58E-041.01E-03 - 41L3 730.001.53E-065.53E-061.96E-056.75E-051.33E-064.46E-062.44E-051.21E-04 - 41L31000.006.70E-071.77E-064.72E-061.28E-056.20E-071.46E-065.64E-062.27E-05 - 41M1 1.472.28E+016.45E+044.75E+063.58E+091.01E+037.57E+069.31E+093.39E+12 - 41M1 2.471.06E+016.21E+031.92E+068.56E+072.12E+025.96E+053.48E+089.26E+10 - 41M1 4.473.59E+002.31E+021.49E+052.08E+073.58E+013.40E+049.18E+061.56E+09 - 41M1 8.479.53E-011.11E+003.69E+036.59E+055.28E+001.67E+032.13E+052.11E+07 - 41M1 15.472.40E-011.89E+003.05E+019.77E+038.75E-011.07E+027.07E+034.10E+05 - 41M1 25.007.39E-028.88E-014.08E+001.48E+022.10E-011.29E+015.21E+021.95E+04 - 41M1 40.002.18E-022.68E-012.12E+001.33E+015.27E-021.76E+004.44E+011.08E+03 - 41M1 52.001.08E-021.24E-011.02E+007.11E+002.46E-025.99E-011.17E+012.23E+02 - 41M1 70.004.77E-034.86E-023.79E-012.68E+001.05E-021.82E-012.69E+003.91E+01 - 41M1 103.001.62E-031.35E-029.05E-025.69E-013.52E-034.10E-024.24E-014.36E+00 - 41M1 150.005.59E-043.72E-032.06E-021.08E-011.26E-031.02E-027.62E-025.65E-01 - 41M1 280.009.82E-054.41E-041.71E-036.40E-032.44E-041.20E-035.40E-032.42E-02 - 41M1 500.002.22E-057.10E-052.02E-045.54E-045.88E-051.98E-046.02E-041.80E-03 - 41M2 1.385.09E+011.21E+074.72E+102.87E+131.12E+022.50E+051.15E+082.98E+10 - 41M2 2.381.61E+017.80E+051.44E+096.45E+112.13E+012.26E+047.67E+061.80E+09 - 41M2 4.383.47E+003.62E+043.15E+079.27E+093.32E+001.66E+033.71E+056.48E+07 - 41M2 8.385.51E-011.40E+035.79E+051.04E+084.55E-011.10E+021.50E+041.70E+06 - 41M2 15.388.36E-026.76E+011.45E+041.56E+067.06E-029.05E+007.52E+025.33E+04 - 41M2 25.001.69E-026.08E+007.77E+025.51E+041.58E-021.25E+006.84E+013.26E+03 - 41M2 40.003.37E-036.02E-014.71E+012.20E+033.71E-031.85E-016.75E+002.16E+02 - 41M2 52.001.34E-031.67E-019.98E+003.69E+021.65E-036.41E-021.86E+004.74E+01 - 41M2 70.004.69E-043.94E-021.74E+004.93E+016.59E-041.94E-024.33E-018.56E+00 - 41M2 103.001.18E-046.17E-031.86E-013.74E+002.00E-044.13E-036.62E-029.42E-01 - 41M2 150.003.10E-051.05E-032.20E-023.19E-016.31E-059.36E-041.09E-021.13E-01 - 41M2 280.003.50E-066.15E-057.34E-046.33E-039.46E-068.41E-055.96E-043.79E-03 - 41M2 500.005.23E-075.26E-063.90E-052.17E-041.68E-069.84E-064.63E-051.96E-04 - 41M3 1.361.04E+022.31E+079.12E+105.51E+133.58E+018.66E+062.72E+118.41E+14 - 41M3 2.363.13E+011.44E+062.67E+091.18E+126.70E+005.54E+056.12E+098.44E+12 - 41M3 4.366.50E+006.51E+045.61E+071.63E+101.03E+002.59E+049.27E+075.68E+10 - 41M3 8.369.92E-012.43E+039.91E+051.75E+081.41E-011.01E+031.17E+063.30E+08 - 41M3 15.361.46E-011.13E+022.36E+042.51E+062.19E-024.88E+012.15E+043.12E+06 - 41M3 25.002.85E-029.75E+001.20E+038.36E+044.95E-034.36E+009.49E+028.29E+04 - 41M3 40.005.55E-039.17E-016.85E+013.12E+031.18E-034.29E-015.01E+012.74E+03 - 41M3 52.002.18E-032.45E-011.39E+014.97E+025.27E-041.19E-011.00E+014.26E+02 - 41M3 70.007.46E-045.53E-022.28E+006.22E+012.13E-042.80E-021.67E+005.35E+01 - 41M3 103.001.84E-048.04E-032.20E-014.22E+006.57E-054.38E-031.70E-013.83E+00 - 41M3 150.004.74E-051.25E-032.31E-023.13E-012.11E-057.45E-041.95E-023.17E-01 - 41M3 280.005.36E-066.26E-055.95E-044.60E-033.34E-064.33E-056.15E-046.00E-03 - 41M3 500.008.42E-074.70E-062.43E-051.14E-046.57E-073.63E-062.95E-051.89E-04 - 41M4 1.211.41E+025.24E+054.78E+109.55E+147.19E+001.73E+052.80E+095.25E+12 - 41M4 2.211.73E+012.36E+046.77E+085.16E+129.59E-018.26E+035.05E+075.78E+10 - 41M4 4.211.55E+008.48E+027.04E+062.08E+101.05E-013.16E+027.39E+054.81E+08 - 41M4 8.211.07E-012.57E+016.14E+047.41E+079.87E-031.06E+019.96E+033.51E+06 - 41M4 15.217.94E-039.56E-017.73E+024.30E+051.04E-034.58E-011.97E+023.88E+04 - 41M4 25.008.99E-046.43E-022.29E+017.02E+031.61E-043.62E-028.57E+001.05E+03 - 41M4 40.001.08E-044.86E-038.36E-011.48E+022.67E-053.28E-034.53E-013.53E+01 - 41M4 52.003.28E-051.14E-031.33E-011.75E+019.66E-068.60E-048.84E-025.36E+00 - 41M4 70.008.42E-062.21E-041.67E-021.58E+003.03E-061.89E-041.40E-026.43E-01 - 41M4 103.001.42E-062.65E-051.17E-037.18E-026.64E-072.65E-051.31E-034.18E-02 - 41M4 150.002.59E-073.43E-069.12E-053.72E-031.50E-073.94E-061.33E-043.02E-03 - 41M5 1.202.08E+027.29E+057.34E+101.41E+154.54E+002.25E+041.30E+101.12E+15 - 41M5 2.202.52E+013.25E+041.03E+097.52E+126.15E-011.10E+031.89E+085.13E+12 - 41M5 4.202.23E+001.16E+031.06E+072.99E+106.94E-024.42E+012.07E+061.70E+10 - 41M5 8.201.53E-013.47E+019.15E+041.04E+086.81E-031.59E+001.95E+044.97E+07 - 41M5 15.201.12E-021.27E+001.13E+035.91E+057.48E-047.52E-022.64E+022.50E+05 - 41M5 25.001.25E-038.37E-023.28E+019.36E+031.20E-046.46E-038.34E+003.80E+03 - 41M5 40.001.50E-046.18E-031.16E+001.90E+022.07E-056.38E-043.24E-017.81E+01 - 41M5 52.004.55E-051.43E-031.80E-012.17E+017.69E-061.76E-045.33E-029.21E+00 - 41M5 70.001.17E-052.70E-042.20E-021.87E+002.48E-064.11E-057.00E-038.42E-01 - 41M5 103.001.98E-063.14E-051.46E-037.90E-025.72E-076.32E-065.15E-043.94E-02 - 41M5 150.003.60E-073.94E-061.06E-043.72E-031.37E-071.05E-064.22E-052.11E-03 - 41N+ 50.002.68E-039.79E-024.82E+001.84E+025.38E-031.70E-015.44E+001.73E+02 - 41N+ 70.001.02E-032.25E-026.78E-011.80E+012.04E-034.21E-028.83E-011.90E+01 - 41N+ 100.003.61E-045.06E-039.11E-021.62E+007.40E-041.02E-021.40E-012.02E+00 - 41N+ 150.001.11E-041.00E-031.05E-021.16E-012.41E-042.17E-031.94E-021.81E-01 - 41N+ 200.004.88E-053.34E-042.47E-031.97E-021.11E-047.66E-045.17E-033.62E-02 - 41N+ 500.004.23E-061.43E-054.60E-051.51E-041.10E-053.83E-051.23E-043.95E-04 - 42K 21.008.61E+005.12E+017.22E+015.83E+012.05E+018.34E+025.67E+031.07E+04 - 42K 21.707.90E+005.37E+011.21E+021.94E+021.86E+017.34E+025.68E+031.71E+04 - 42K 23.006.78E+005.50E+012.01E+025.95E+021.57E+015.86E+025.37E+032.60E+04 - 42K 26.204.80E+004.94E+013.02E+021.66E+031.06E+013.53E+024.04E+033.24E+04 - 42K 30.003.34E+003.89E+013.05E+022.22E+037.14E+002.09E+022.66E+032.70E+04 - 42K 34.002.38E+002.93E+012.58E+022.14E+034.93E+001.29E+021.71E+031.92E+04 - 42K 40.001.52E+001.91E+011.80E+021.61E+033.06E+006.88E+019.13E+021.08E+04 - 42K 48.009.11E-011.12E+011.06E+029.66E+021.80E+003.42E+014.34E+025.11E+03 - 42K 60.004.84E-015.54E+005.02E+014.37E+029.41E-011.47E+011.69E+021.86E+03 - 42K 73.002.76E-012.90E+002.44E+011.98E+025.36E-017.04E+007.30E+017.32E+02 - 42K 90.001.51E-011.42E+001.08E+017.94E+012.97E-013.25E+002.96E+012.64E+02 - 42K 103.001.02E-018.86E-016.31E+004.31E+012.03E-011.99E+001.66E+011.36E+02 - 42K 120.006.54E-025.18E-013.38E+002.12E+011.33E-011.15E+008.62E+006.39E+01 - 42K 143.003.93E-022.78E-011.64E+009.27E+008.26E-026.18E-014.10E+002.70E+01 - 42K 170.002.38E-021.51E-018.01E-014.07E+005.19E-023.39E-011.99E+001.16E+01 - 42K 235.009.50E-034.83E-022.11E-018.79E-012.22E-021.14E-015.36E-012.50E+00 - 42K 320.004.07E-031.69E-026.12E-022.13E-011.01E-024.25E-021.62E-016.11E-01 - 42K 410.002.13E-037.59E-032.38E-027.21E-025.49E-031.99E-026.49E-022.08E-01 - 42K 520.001.19E-033.69E-031.02E-022.73E-023.11E-039.87E-032.81E-027.82E-02 - 42K 750.005.21E-041.36E-033.16E-037.09E-031.34E-033.57E-038.43E-031.93E-02 - 42K 1000.002.92E-046.78E-041.41E-032.80E-037.10E-041.69E-033.52E-037.06E-03 - 42K 1250.001.93E-044.16E-047.99E-041.47E-034.42E-049.71E-041.87E-033.43E-03 - 42K 1500.001.41E-042.86E-045.21E-049.02E-043.04E-046.30E-041.14E-031.97E-03 - 42L1 3.872.49E+019.03E+031.90E+069.50E+073.53E+024.05E+057.82E+074.41E+09 - 42L1 4.571.86E+013.34E+031.01E+068.03E+072.15E+021.83E+053.09E+072.13E+09 - 42L1 5.871.16E+016.21E+023.00E+053.29E+071.01E+025.59E+047.64E+065.72E+08 - 42L1 9.074.78E+009.12E+002.19E+043.10E+062.76E+017.36E+036.86E+054.60E+07 - 42L1 12.872.20E+005.80E+001.64E+032.99E+059.70E+001.49E+031.01E+055.58E+06 - 42L1 17.001.15E+007.79E+001.19E+023.54E+044.23E+004.30E+022.26E+041.03E+06 - 42L1 23.005.50E-015.55E+001.50E+012.44E+031.72E+001.14E+024.55E+031.64E+05 - 42L1 31.002.58E-012.98E+001.65E+011.50E+027.12E-013.18E+019.60E+022.71E+04 - 42L1 43.001.09E-011.27E+009.51E+005.44E+012.73E-018.11E+001.81E+023.86E+03 - 42L1 56.005.36E-025.81E-014.56E+003.02E+011.27E-012.77E+004.83E+018.22E+02 - 42L1 73.002.58E-022.52E-011.89E+001.28E+015.91E-029.66E-011.33E+011.79E+02 - 42L1 86.001.64E-021.48E-011.05E+006.86E+003.71E-025.11E-016.06E+007.09E+01 - 42L1 103.009.85E-038.09E-025.32E-013.28E+002.24E-022.57E-012.60E+002.60E+01 - 42L1 126.005.57E-034.08E-022.44E-011.38E+001.28E-021.21E-011.03E+008.68E+00 - 42L1 155.003.10E-032.00E-021.07E-015.48E-017.30E-035.72E-024.07E-012.88E+00 - 42L1 220.001.16E-036.02E-032.66E-021.12E-012.88E-031.68E-029.03E-024.82E-01 - 42L1 305.004.79E-042.02E-037.42E-032.62E-021.24E-035.71E-032.39E-029.96E-02 - 42L1 390.002.52E-049.18E-042.95E-039.16E-036.75E-042.63E-039.31E-033.25E-02 - 42L1 500.001.37E-044.33E-041.23E-033.35E-033.70E-041.24E-033.76E-031.12E-02 - 42L1 730.005.82E-051.54E-043.65E-048.38E-041.54E-044.26E-041.05E-032.49E-03 - 42L11000.003.08E-057.22E-051.51E-043.04E-047.67E-051.85E-043.95E-048.08E-04 - 42L2 3.634.98E+016.16E+054.90E+086.00E+103.90E+011.78E+041.66E+067.78E+07 - 42L2 4.333.00E+012.53E+051.72E+082.52E+102.26E+018.86E+039.87E+056.85E+07 - 42L2 5.631.38E+016.71E+043.57E+075.59E+091.01E+013.10E+033.69E+053.17E+07 - 42L2 8.833.43E+006.96E+032.40E+063.30E+082.50E+005.08E+025.31E+044.44E+06 - 42L2 12.631.08E+001.16E+032.81E+053.13E+078.27E-011.20E+021.02E+047.25E+05 - 42L2 17.004.06E-012.62E+024.73E+044.27E+063.29E-013.60E+012.50E+031.48E+05 - 42L2 23.001.46E-015.82E+017.76E+035.56E+051.29E-011.06E+015.87E+022.79E+04 - 42L2 31.005.23E-021.33E+011.31E+037.34E+045.13E-023.18E+001.38E+025.23E+03 - 42L2 43.001.66E-022.65E+001.88E+027.99E+031.86E-028.48E-012.81E+018.18E+02 - 42L2 56.006.51E-037.28E-013.96E+011.34E+038.23E-032.93E-017.77E+001.81E+02 - 42L2 73.002.52E-032.01E-018.41E+002.25E+023.63E-031.01E-012.14E+004.00E+01 - 42L2 86.001.40E-039.12E-023.25E+007.53E+012.19E-035.25E-029.67E-011.58E+01 - 42L2 103.007.33E-043.84E-021.15E+002.28E+011.25E-032.56E-024.05E-015.68E+00 - 42L2 126.003.56E-041.48E-023.64E-016.06E+006.75E-041.15E-021.54E-011.83E+00 - 42L2 155.001.71E-045.60E-031.13E-011.58E+003.57E-045.11E-035.74E-025.76E-01 - 42L2 220.005.00E-051.12E-031.65E-021.72E-011.23E-041.31E-031.11E-028.46E-02 - 42L2 305.001.63E-052.63E-042.91E-032.33E-024.58E-053.80E-042.51E-031.49E-02 - 42L2 390.007.19E-069.16E-058.26E-045.49E-032.20E-051.52E-048.43E-044.19E-03 - 42L2 500.003.23E-063.28E-052.43E-041.35E-031.05E-056.16E-052.88E-041.21E-03 - 42L2 730.001.02E-067.46E-064.17E-051.80E-043.50E-061.62E-056.03E-052.01E-04 - 42L21000.004.14E-072.37E-061.07E-053.84E-051.43E-065.59E-061.76E-054.96E-05 - 42L3 3.521.01E+021.26E+061.05E+091.35E+111.30E+014.78E+052.38E+091.20E+12 - 42L3 4.225.93E+015.02E+053.54E+085.38E+107.45E+001.93E+056.95E+082.97E+11 - 42L3 5.522.64E+011.28E+057.00E+071.12E+103.25E+005.07E+041.13E+083.79E+10 - 42L3 8.726.31E+001.26E+044.39E+066.07E+087.94E-015.18E+035.35E+061.17E+09 - 42L3 12.521.94E+002.02E+034.88E+055.44E+072.60E-018.55E+024.96E+057.70E+07 - 42L3 17.006.96E-014.30E+027.60E+046.81E+061.02E-011.87E+026.82E+047.94E+06 - 42L3 23.002.47E-019.32E+011.21E+048.54E+054.01E-024.17E+019.88E+038.64E+05 - 42L3 31.008.67E-022.06E+011.97E+031.08E+051.60E-029.51E+001.51E+039.96E+04 - 42L3 43.002.70E-023.96E+002.69E+021.12E+045.86E-031.90E+001.98E+029.66E+03 - 42L3 56.001.04E-021.05E+005.39E+011.77E+032.60E-035.21E-013.96E+011.51E+03 - 42L3 73.003.97E-032.77E-011.08E+012.79E+021.16E-031.44E-018.05E+002.42E+02 - 42L3 86.002.18E-031.22E-014.00E+008.93E+017.01E-046.53E-023.05E+007.90E+01 - 42L3 103.001.13E-034.95E-021.35E+002.55E+014.04E-042.75E-021.06E+002.34E+01 - 42L3 126.005.44E-041.82E-024.00E-016.32E+002.19E-041.06E-023.29E-016.11E+00 - 42L3 155.002.58E-046.56E-031.16E-011.52E+001.17E-044.01E-031.01E-011.57E+00 - 42L3 220.007.49E-051.20E-031.47E-021.40E-014.13E-057.99E-041.43E-021.67E-01 - 42L3 305.002.46E-052.58E-042.23E-031.60E-021.60E-051.85E-042.42E-032.20E-02 - 42L3 390.001.10E-058.45E-055.66E-043.26E-037.94E-066.36E-056.59E-045.01E-03 - 42L3 500.005.09E-062.87E-051.49E-046.95E-044.01E-062.25E-051.83E-041.17E-03 - 42L3 730.001.71E-066.24E-062.22E-057.66E-051.49E-065.09E-062.82E-051.41E-04 - 42L31000.007.58E-072.00E-065.34E-061.45E-056.96E-071.66E-066.50E-062.63E-05 - 42M1 1.502.18E+016.35E+044.08E+063.74E+091.07E+037.99E+069.77E+093.45E+12 - 42M1 2.501.04E+016.54E+031.83E+066.83E+072.31E+026.59E+053.86E+081.01E+11 - 42M1 4.503.60E+002.71E+021.56E+052.01E+073.98E+013.87E+041.05E+071.76E+09 - 42M1 8.509.72E-011.50E+004.28E+037.10E+055.95E+001.93E+032.46E+052.42E+07 - 42M1 15.502.48E-011.68E+004.38E+011.18E+049.92E-011.24E+028.19E+034.72E+05 - 42M1 25.007.73E-028.59E-013.46E+002.09E+022.40E-011.50E+016.06E+022.26E+04 - 42M1 40.002.30E-022.69E-011.97E+001.22E+016.01E-022.03E+005.13E+011.24E+03 - 42M1 52.001.14E-021.26E-019.86E-016.51E+002.80E-026.89E-011.35E+012.57E+02 - 42M1 70.005.07E-035.01E-023.77E-012.55E+001.19E-022.09E-013.08E+004.47E+01 - 42M1 103.001.73E-031.41E-029.22E-025.65E-014.00E-034.68E-024.84E-014.97E+00 - 42M1 150.006.00E-043.93E-032.13E-021.10E-011.42E-031.16E-028.66E-026.42E-01 - 42M1 280.001.06E-044.72E-041.82E-036.73E-032.75E-041.35E-036.10E-032.73E-02 - 42M1 500.002.41E-057.68E-052.17E-045.95E-046.60E-052.23E-046.77E-042.02E-03 - 42M2 1.414.94E+011.24E+074.79E+102.82E+131.20E+022.66E+051.19E+082.90E+10 - 42M2 2.411.62E+018.35E+051.54E+096.75E+112.35E+012.49E+048.27E+061.87E+09 - 42M2 4.413.61E+004.00E+043.48E+071.01E+103.74E+001.87E+034.11E+056.99E+07 - 42M2 8.415.87E-011.57E+036.52E+051.15E+085.20E-011.25E+021.69E+041.88E+06 - 42M2 15.419.08E-027.68E+011.65E+041.76E+068.11E-021.04E+018.53E+025.97E+04 - 42M2 25.001.86E-026.98E+008.95E+026.31E+041.83E-021.44E+007.85E+013.71E+03 - 42M2 40.003.76E-036.92E-015.43E+012.53E+034.31E-032.14E-017.77E+002.47E+02 - 42M2 52.001.51E-031.92E-011.15E+014.24E+021.92E-037.43E-022.14E+005.44E+01 - 42M2 70.005.28E-044.55E-022.02E+005.69E+017.68E-042.25E-025.01E-019.85E+00 - 42M2 103.001.34E-047.14E-032.16E-014.32E+002.34E-044.82E-037.68E-021.09E+00 - 42M2 150.003.52E-051.22E-032.56E-023.70E-017.39E-051.09E-031.27E-021.32E-01 - 42M2 280.004.07E-067.17E-058.57E-047.38E-031.11E-059.87E-056.98E-044.42E-03 - 42M2 500.006.07E-076.16E-064.57E-052.55E-041.98E-061.16E-055.44E-052.29E-04 - 42M3 1.391.01E+022.37E+079.29E+105.46E+133.81E+019.35E+062.95E+119.13E+14 - 42M3 2.393.16E+011.54E+062.86E+091.24E+127.32E+006.25E+057.04E+099.79E+12 - 42M3 4.396.75E+007.18E+046.20E+071.77E+101.14E+003.01E+041.11E+086.83E+10 - 42M3 8.391.05E+002.73E+031.11E+061.94E+081.58E-011.19E+031.42E+064.02E+08 - 42M3 15.391.58E-011.28E+022.67E+042.82E+062.47E-025.80E+012.62E+043.80E+06 - 42M3 25.003.14E-021.11E+011.38E+039.51E+045.62E-035.22E+001.16E+031.02E+05 - 42M3 40.006.15E-031.05E+007.84E+013.56E+031.34E-035.13E-016.08E+013.34E+03 - 42M3 52.002.43E-032.81E-011.59E+015.67E+026.01E-041.42E-011.21E+015.16E+02 - 42M3 70.008.36E-046.33E-022.61E+007.11E+012.43E-043.34E-022.01E+006.46E+01 - 42M3 103.002.07E-049.21E-032.53E-014.83E+007.50E-055.21E-032.04E-014.61E+00 - 42M3 150.005.36E-051.44E-032.65E-023.59E-012.41E-058.83E-042.34E-023.79E-01 - 42M3 280.006.13E-067.20E-056.85E-045.29E-033.82E-065.10E-057.31E-047.15E-03 - 42M3 500.009.59E-075.40E-062.80E-051.31E-047.52E-074.24E-063.48E-052.24E-04 - 42M4 1.231.46E+025.54E+055.12E+101.03E+157.93E+001.94E+053.15E+095.79E+12 - 42M4 2.231.88E+012.61E+047.72E+085.98E+121.09E+009.68E+035.99E+076.78E+10 - 42M4 4.231.74E+009.65E+028.32E+062.51E+101.22E-013.80E+029.02E+055.83E+08 - 42M4 8.231.23E-012.99E+017.42E+049.08E+071.17E-021.29E+011.23E+044.32E+06 - 42M4 15.239.31E-031.13E+009.44E+025.32E+051.24E-035.64E-012.45E+024.81E+04 - 42M4 25.001.07E-037.71E-022.83E+018.78E+031.95E-044.50E-021.08E+011.31E+03 - 42M4 40.001.30E-045.87E-031.03E+001.85E+023.25E-054.09E-035.68E-014.42E+01 - 42M4 52.003.97E-051.38E-031.64E-012.19E+011.18E-051.07E-031.11E-016.73E+00 - 42M4 70.001.02E-052.69E-042.07E-021.97E+003.71E-062.35E-041.76E-028.07E-01 - 42M4 103.001.75E-063.25E-051.45E-038.99E-028.16E-073.31E-051.64E-035.26E-02 - 42M4 150.003.26E-074.23E-061.13E-044.66E-031.85E-074.94E-061.67E-043.81E-03 - 42M5 1.232.15E+027.68E+057.89E+101.53E+154.99E+002.49E+041.47E+101.28E+15 - 42M5 2.232.73E+013.58E+041.18E+098.71E+126.98E-011.28E+032.27E+086.32E+12 - 42M5 4.232.50E+001.31E+031.26E+073.60E+108.05E-025.24E+012.58E+062.18E+10 - 42M5 8.231.76E-014.01E+011.11E+051.28E+088.01E-031.91E+002.46E+046.48E+07 - 42M5 15.231.31E-021.49E+001.38E+037.30E+058.90E-049.09E-023.37E+023.28E+05 - 42M5 25.001.49E-039.99E-024.06E+011.17E+041.45E-047.86E-031.08E+015.01E+03 - 42M5 40.001.80E-047.43E-031.44E+002.37E+022.51E-057.78E-044.16E-011.02E+02 - 42M5 52.005.48E-051.72E-032.23E-012.70E+019.32E-062.15E-046.85E-021.20E+01 - 42M5 70.001.41E-053.27E-042.73E-022.34E+003.02E-065.02E-058.98E-031.09E+00 - 42M5 103.002.38E-063.82E-051.81E-039.87E-026.98E-077.74E-066.58E-045.10E-02 - 42M5 150.004.32E-074.80E-061.32E-044.65E-031.68E-071.28E-065.37E-052.72E-03 - 42N+ 50.002.94E-031.13E-015.69E+002.18E+026.28E-032.02E-016.59E+002.13E+02 - 42N+ 70.001.12E-032.56E-027.96E-012.13E+012.37E-034.99E-021.06E+002.30E+01 - 42N+ 100.003.98E-045.70E-031.06E-011.91E+008.62E-041.20E-021.67E-012.42E+00 - 42N+ 150.001.23E-041.12E-031.20E-021.36E-012.80E-042.54E-032.29E-022.16E-01 - 42N+ 200.005.40E-053.73E-042.81E-032.28E-021.29E-048.94E-046.07E-034.28E-02 - 42N+ 500.004.72E-061.60E-055.17E-051.71E-041.27E-054.42E-051.42E-044.59E-04 - 43K 22.047.81E+004.39E+015.73E+014.18E+011.98E+017.63E+024.92E+038.60E+03 - 43K 22.747.19E+004.60E+019.57E+011.38E+021.80E+016.76E+024.94E+031.37E+04 - 43K 24.046.22E+004.73E+011.58E+024.27E+021.53E+015.45E+024.70E+032.09E+04 - 43K 27.244.47E+004.30E+012.43E+021.23E+031.06E+013.36E+023.61E+032.68E+04 - 43K 31.043.15E+003.45E+012.52E+021.70E+037.19E+002.03E+022.44E+032.31E+04 - 43K 35.002.27E+002.64E+012.18E+021.69E+035.05E+001.28E+021.60E+031.70E+04 - 43K 41.001.47E+001.76E+011.56E+021.32E+033.17E+006.93E+018.78E+029.88E+03 - 43K 49.008.96E-011.05E+019.51E+018.24E+021.88E+003.50E+014.27E+024.81E+03 - 43K 61.004.82E-015.31E+004.63E+013.87E+029.99E-011.53E+011.71E+021.81E+03 - 43K 74.002.78E-012.82E+002.30E+011.80E+025.74E-017.40E+007.47E+017.28E+02 - 43K 91.001.53E-011.40E+001.04E+017.41E+013.19E-013.45E+003.07E+012.68E+02 - 43K 104.001.04E-018.82E-016.12E+004.08E+012.20E-012.12E+001.73E+011.39E+02 - 43K 121.006.71E-025.20E-013.32E+002.03E+011.44E-011.23E+009.09E+006.62E+01 - 43K 144.004.05E-022.82E-011.63E+009.02E+008.97E-026.65E-014.36E+002.82E+01 - 43K 170.002.51E-021.57E-018.22E-014.13E+005.73E-023.74E-012.18E+001.26E+01 - 43K 235.001.00E-025.06E-022.18E-019.01E-012.44E-021.26E-015.87E-012.71E+00 - 43K 320.004.32E-031.78E-026.39E-022.20E-011.11E-024.67E-021.77E-016.66E-01 - 43K 410.002.26E-038.01E-032.50E-027.53E-026.03E-032.18E-027.10E-022.27E-01 - 43K 520.001.26E-033.92E-031.08E-022.87E-023.41E-031.08E-023.08E-028.53E-02 - 43K 750.005.55E-041.45E-033.36E-037.53E-031.46E-033.91E-039.22E-032.10E-02 - 43K 1000.003.11E-047.26E-041.50E-032.99E-037.73E-041.84E-033.85E-037.70E-03 - 43K 1250.002.07E-044.45E-048.57E-041.57E-034.81E-041.06E-032.04E-033.74E-03 - 43K 1500.001.51E-043.07E-045.59E-049.69E-043.30E-046.87E-041.24E-032.15E-03 - 43L1 4.042.29E+018.13E+031.58E+067.22E+073.47E+023.81E+057.01E+073.70E+09 - 43L1 4.741.73E+013.15E+038.82E+056.41E+072.15E+021.78E+052.88E+071.86E+09 - 43L1 6.041.10E+016.35E+022.77E+052.82E+071.04E+025.64E+047.46E+065.29E+08 - 43L1 9.244.65E+001.28E+012.26E+042.97E+062.93E+017.78E+037.08E+054.58E+07 - 43L1 13.042.18E+004.39E+001.88E+033.10E+051.05E+011.62E+031.08E+055.77E+06 - 43L1 17.001.18E+006.70E+001.78E+024.29E+044.75E+004.93E+022.58E+041.16E+06 - 43L1 23.005.66E-015.17E+001.41E+013.28E+031.94E+001.31E+025.18E+031.84E+05 - 43L1 31.002.67E-012.89E+001.38E+011.99E+028.00E-013.63E+011.09E+033.05E+04 - 43L1 43.001.14E-011.26E+008.73E+004.78E+013.06E-019.21E+002.05E+024.34E+03 - 43L1 56.005.60E-025.85E-014.35E+002.73E+011.42E-013.13E+005.46E+019.24E+02 - 43L1 73.002.71E-022.57E-011.85E+001.20E+016.63E-021.09E+001.49E+012.01E+02 - 43L1 86.001.72E-021.51E-011.04E+006.59E+004.16E-025.75E-016.81E+007.95E+01 - 43L1 103.001.04E-028.32E-025.34E-013.21E+002.51E-022.89E-012.91E+002.91E+01 - 43L1 126.005.89E-034.22E-022.47E-011.37E+001.43E-021.36E-011.15E+009.69E+00 - 43L1 155.003.28E-032.08E-021.10E-015.52E-018.14E-036.40E-024.55E-013.22E+00 - 43L1 220.001.23E-036.32E-032.76E-021.15E-013.20E-031.88E-021.01E-015.36E-01 - 43L1 305.005.10E-042.13E-037.77E-032.73E-021.38E-036.35E-032.66E-021.11E-01 - 43L1 390.002.70E-049.74E-043.11E-039.62E-037.48E-042.92E-031.03E-023.60E-02 - 43L1 500.001.46E-044.62E-041.30E-033.55E-034.10E-041.38E-034.17E-031.23E-02 - 43L1 730.006.24E-051.65E-043.91E-048.97E-041.70E-044.70E-041.16E-032.75E-03 - 43L11000.003.31E-057.77E-051.63E-043.28E-048.42E-052.04E-044.35E-048.91E-04 - 43L2 3.794.59E+015.51E+054.18E+084.77E+103.84E+011.67E+041.45E+066.17E+07 - 43L2 4.492.83E+012.34E+051.53E+082.10E+102.28E+018.53E+038.91E+055.69E+07 - 43L2 5.791.33E+016.51E+043.35E+074.97E+091.04E+013.10E+033.49E+052.80E+07 - 43L2 8.993.45E+007.12E+032.41E+063.18E+082.68E+005.30E+025.34E+044.27E+06 - 43L2 12.791.12E+001.22E+032.92E+053.16E+079.02E-011.28E+021.06E+047.30E+05 - 43L2 17.004.40E-012.95E+025.32E+044.74E+063.74E-014.07E+012.79E+031.61E+05 - 43L2 23.001.59E-016.56E+018.74E+036.19E+051.47E-011.20E+016.56E+023.08E+04 - 43L2 31.005.72E-021.50E+011.48E+038.22E+045.85E-023.60E+001.55E+025.80E+03 - 43L2 43.001.83E-022.99E+002.13E+028.97E+032.13E-029.63E-013.17E+019.13E+02 - 43L2 56.007.18E-038.23E-014.49E+011.51E+039.40E-033.33E-018.77E+002.03E+02 - 43L2 73.002.79E-032.27E-019.53E+002.54E+024.15E-031.15E-012.42E+004.50E+01 - 43L2 86.001.56E-031.03E-013.69E+008.52E+012.50E-035.99E-021.10E+001.78E+01 - 43L2 103.008.16E-044.36E-021.31E+002.58E+011.44E-032.93E-024.60E-016.42E+00 - 43L2 126.003.98E-041.68E-024.14E-016.88E+007.74E-041.32E-021.75E-012.07E+00 - 43L2 155.001.91E-046.37E-031.29E-011.80E+004.11E-045.86E-036.55E-026.54E-01 - 43L2 220.005.59E-051.28E-031.89E-021.96E-011.42E-041.51E-031.28E-029.64E-02 - 43L2 305.001.83E-053.00E-043.33E-032.67E-025.29E-054.37E-042.88E-031.70E-02 - 43L2 390.008.16E-061.05E-049.48E-046.30E-032.54E-051.75E-049.69E-044.80E-03 - 43L2 500.003.70E-063.76E-052.79E-041.55E-031.22E-057.11E-053.32E-041.39E-03 - 43L2 730.001.16E-068.56E-064.80E-052.08E-044.05E-061.88E-056.96E-052.32E-04 - 43L21000.004.66E-072.73E-061.24E-054.43E-051.65E-066.48E-062.03E-055.73E-05 - 43L3 3.689.32E+011.13E+069.04E+081.08E+111.27E+014.52E+052.16E+091.04E+12 - 43L3 4.385.60E+014.66E+053.17E+084.52E+107.42E+001.89E+056.61E+082.72E+11 - 43L3 5.682.57E+011.25E+056.60E+071.00E+103.33E+005.17E+041.14E+083.70E+10 - 43L3 8.886.35E+001.29E+044.40E+065.87E+088.38E-015.57E+035.75E+061.23E+09 - 43L3 12.682.00E+002.12E+035.06E+055.49E+072.79E-019.43E+025.51E+058.43E+07 - 43L3 17.007.50E-014.81E+028.50E+047.51E+061.13E-012.19E+028.19E+049.51E+06 - 43L3 23.002.67E-011.04E+021.35E+049.46E+054.47E-024.89E+011.18E+041.03E+06 - 43L3 31.009.42E-022.31E+012.20E+031.20E+051.79E-021.11E+011.80E+031.18E+05 - 43L3 43.002.95E-024.44E+003.01E+021.24E+046.54E-032.22E+002.35E+021.15E+04 - 43L3 56.001.14E-021.18E+006.05E+011.98E+032.91E-036.10E-014.68E+011.79E+03 - 43L3 73.004.36E-033.11E-011.21E+013.12E+021.29E-031.68E-019.50E+002.85E+02 - 43L3 86.002.40E-031.37E-014.50E+009.99E+017.84E-047.62E-023.59E+009.29E+01 - 43L3 103.001.25E-035.56E-021.51E+002.86E+014.52E-043.21E-021.24E+002.75E+01 - 43L3 126.006.01E-042.05E-024.51E-017.09E+002.45E-041.23E-023.86E-017.16E+00 - 43L3 155.002.86E-047.38E-031.31E-011.71E+001.31E-044.65E-031.18E-011.84E+00 - 43L3 220.008.33E-051.35E-031.66E-021.58E-014.63E-059.24E-041.67E-021.95E-01 - 43L3 305.002.75E-052.91E-042.52E-031.80E-021.79E-052.13E-042.82E-032.56E-02 - 43L3 390.001.23E-059.53E-056.39E-043.68E-038.90E-067.31E-057.66E-045.83E-03 - 43L3 500.005.70E-063.24E-051.68E-047.84E-044.49E-062.58E-052.12E-041.36E-03 - 43L3 730.001.90E-067.04E-062.51E-058.65E-051.67E-065.79E-063.25E-051.63E-04 - 43L31000.008.48E-072.25E-066.03E-061.64E-057.77E-071.88E-067.47E-063.04E-05 - 43M1 1.542.09E+016.23E+043.59E+063.78E+091.12E+038.35E+061.01E+103.48E+12 - 43M1 2.541.02E+016.84E+031.75E+065.57E+072.51E+027.24E+054.25E+081.08E+11 - 43M1 4.543.60E+003.13E+021.62E+051.94E+074.42E+014.39E+041.20E+071.97E+09 - 43M1 8.549.88E-012.21E+004.90E+037.59E+056.68E+002.22E+032.83E+052.76E+07 - 43M1 15.542.56E-011.48E+006.06E+011.39E+041.12E+001.43E+029.45E+035.41E+05 - 43M1 25.008.08E-028.27E-013.05E+002.87E+022.73E-011.74E+017.03E+022.61E+04 - 43M1 40.002.42E-022.70E-011.82E+001.19E+016.83E-022.34E+005.92E+011.43E+03 - 43M1 52.001.21E-021.28E-019.47E-015.99E+003.18E-027.91E-011.55E+012.94E+02 - 43M1 70.005.38E-035.15E-023.73E-012.43E+001.35E-022.39E-013.53E+005.11E+01 - 43M1 103.001.84E-031.47E-029.36E-025.60E-014.53E-035.33E-025.51E-015.65E+00 - 43M1 150.006.41E-044.13E-032.20E-021.12E-011.61E-031.32E-029.82E-027.27E-01 - 43M1 280.001.14E-045.03E-041.92E-037.06E-033.10E-041.53E-036.87E-033.07E-02 - 43M1 500.002.62E-058.29E-052.33E-046.38E-047.38E-052.50E-047.59E-042.26E-03 - 43M2 1.444.78E+011.25E+074.78E+102.73E+131.28E+022.80E+051.21E+082.80E+10 - 43M2 2.441.62E+018.85E+051.64E+096.99E+112.58E+012.73E+048.84E+061.92E+09 - 43M2 4.443.73E+004.39E+043.83E+071.09E+104.19E+002.09E+034.52E+057.49E+07 - 43M2 8.446.23E-011.76E+037.30E+051.28E+085.90E-011.42E+021.89E+042.06E+06 - 43M2 15.449.83E-028.68E+011.86E+041.98E+069.29E-021.18E+019.63E+026.67E+04 - 43M2 25.002.05E-027.99E+001.03E+037.21E+042.12E-021.66E+008.98E+014.21E+03 - 43M2 40.004.18E-037.94E-016.25E+012.90E+034.99E-032.47E-018.91E+002.81E+02 - 43M2 52.001.68E-032.21E-011.33E+014.86E+022.23E-038.59E-022.46E+006.21E+01 - 43M2 70.005.93E-045.23E-022.32E+006.54E+018.92E-042.61E-025.77E-011.13E+01 - 43M2 103.001.51E-048.23E-032.49E-014.98E+002.73E-045.59E-038.88E-021.25E+00 - 43M2 150.004.01E-051.40E-032.97E-024.28E-018.63E-051.27E-031.47E-021.52E-01 - 43M2 280.004.62E-068.31E-059.97E-048.58E-031.30E-051.15E-048.13E-045.13E-03 - 43M2 500.007.03E-077.17E-065.34E-052.98E-042.32E-061.36E-056.37E-052.68E-04 - 43M3 1.429.87E+012.39E+079.32E+105.31E+134.01E+019.95E+063.14E+119.69E+14 - 43M3 2.423.18E+011.64E+063.04E+091.28E+127.94E+006.98E+057.99E+091.12E+13 - 43M3 4.426.98E+007.86E+046.80E+071.91E+101.26E+003.46E+041.30E+088.12E+10 - 43M3 8.421.12E+003.04E+031.24E+062.13E+081.77E-011.39E+031.70E+064.86E+08 - 43M3 15.421.70E-011.44E+023.01E+043.14E+062.78E-026.85E+013.16E+044.61E+06 - 43M3 25.003.44E-021.27E+011.57E+031.08E+056.37E-036.23E+001.41E+031.24E+05 - 43M3 40.006.80E-031.19E+008.95E+014.04E+031.52E-036.11E-017.37E+014.05E+03 - 43M3 52.002.69E-033.20E-011.81E+016.45E+026.81E-041.69E-011.46E+016.24E+02 - 43M3 70.009.31E-047.22E-022.99E+008.09E+012.75E-043.97E-022.42E+007.77E+01 - 43M3 103.002.32E-041.05E-022.89E-015.51E+008.52E-056.18E-032.44E-015.52E+00 - 43M3 150.006.03E-051.65E-033.04E-024.11E-012.74E-051.04E-032.78E-024.52E-01 - 43M3 280.006.86E-068.24E-057.87E-046.07E-034.35E-065.98E-058.66E-048.49E-03 - 43M3 500.001.07E-066.18E-063.22E-051.51E-048.56E-074.94E-064.11E-052.65E-04 - 43M4 1.261.50E+025.77E+055.38E+101.09E+158.63E+002.13E+053.49E+096.26E+12 - 43M4 2.262.02E+012.86E+048.67E+086.81E+121.23E+001.12E+047.01E+077.82E+10 - 43M4 4.261.93E+001.09E+039.74E+062.98E+101.41E-014.53E+021.09E+066.97E+08 - 43M4 8.261.41E-013.45E+018.88E+041.10E+081.37E-021.57E+011.51E+045.27E+06 - 43M4 15.261.08E-021.32E+001.14E+036.52E+051.48E-036.89E-013.02E+025.92E+04 - 43M4 25.001.27E-039.19E-023.47E+011.09E+042.35E-045.56E-021.34E+011.64E+03 - 43M4 40.001.55E-047.05E-031.27E+002.30E+023.93E-055.05E-037.08E-015.51E+01 - 43M4 52.004.75E-051.67E-032.02E-012.72E+011.43E-051.33E-031.38E-018.39E+00 - 43M4 70.001.23E-053.25E-042.55E-022.45E+004.51E-062.92E-042.20E-021.01E+00 - 43M4 103.002.13E-063.93E-051.78E-031.12E-019.94E-074.10E-052.05E-036.56E-02 - 43M4 150.003.89E-075.15E-061.40E-045.81E-032.27E-076.13E-062.09E-044.76E-03 - 43M4 280.002.44E-081.98E-072.38E-065.00E-051.97E-082.73E-075.06E-066.78E-05 - 43M4 500.002.28E-091.15E-087.04E-087.80E-072.11E-091.63E-081.79E-071.54E-06 - 43M5 1.252.21E+027.97E+058.30E+101.61E+155.42E+002.72E+041.63E+101.43E+15 - 43M5 2.252.93E+013.90E+041.32E+099.92E+127.83E-011.46E+032.69E+087.64E+12 - 43M5 4.252.78E+001.47E+031.47E+074.27E+109.24E-026.14E+013.17E+062.76E+10 - 43M5 8.252.00E-014.61E+011.33E+051.55E+089.35E-032.28E+003.09E+048.36E+07 - 43M5 15.251.52E-021.74E+001.68E+038.93E+051.05E-031.09E-014.27E+024.25E+05 - 43M5 25.001.76E-031.18E-014.98E+011.45E+041.73E-049.51E-031.38E+016.55E+03 - 43M5 40.002.14E-048.86E-031.77E+002.93E+023.01E-059.42E-045.32E-011.33E+02 - 43M5 52.006.52E-052.06E-032.75E-013.35E+011.12E-052.60E-048.74E-021.56E+01 - 43M5 70.001.68E-053.93E-043.36E-022.90E+003.64E-066.09E-051.14E-021.41E+00 - 43M5 103.002.91E-064.60E-052.22E-031.22E-018.43E-079.39E-068.34E-046.55E-02 - 43M5 150.005.37E-075.83E-061.62E-045.77E-032.04E-071.56E-066.79E-053.48E-03 - 43M5 280.003.68E-082.15E-072.39E-063.99E-052.05E-088.86E-081.21E-063.05E-05 - 43M5 500.003.73E-091.28E-086.34E-084.89E-072.77E-097.47E-093.87E-084.53E-07 - 43N+ 50.003.31E-031.32E-016.85E+002.64E+027.53E-032.46E-018.17E+002.67E+02 - 43N+ 70.001.26E-032.97E-029.52E-012.57E+012.84E-036.05E-021.30E+002.86E+01 - 43N+ 100.004.50E-046.57E-031.26E-012.30E+001.03E-031.44E-022.04E-012.98E+00 - 43N+ 150.001.40E-041.29E-031.41E-021.62E-013.34E-043.05E-032.78E-022.63E-01 - 43N+ 200.006.15E-054.26E-043.27E-032.70E-021.54E-041.07E-037.31E-035.19E-02 - 43N+ 500.005.40E-061.83E-055.97E-051.99E-041.50E-055.24E-051.69E-045.48E-04 - 44K 23.127.10E+003.77E+014.54E+012.96E+011.91E+017.00E+024.27E+036.91E+03 - 44K 23.826.56E+003.95E+017.53E+019.77E+011.75E+016.23E+024.29E+031.10E+04 - 44K 25.125.71E+004.07E+011.25E+023.06E+021.50E+015.08E+024.11E+031.68E+04 - 44K 28.324.16E+003.75E+011.96E+029.07E+021.05E+013.19E+023.22E+032.22E+04 - 44K 32.122.97E+003.06E+012.08E+021.30E+037.24E+001.96E+022.23E+031.97E+04 - 44K 36.002.18E+002.39E+011.85E+021.34E+035.17E+001.26E+021.51E+031.50E+04 - 44K 42.001.43E+001.62E+011.36E+021.09E+033.29E+006.99E+018.44E+029.01E+03 - 44K 50.008.80E-019.88E+008.51E+017.02E+021.97E+003.59E+014.20E+024.53E+03 - 44K 62.004.80E-015.09E+004.26E+013.42E+021.06E+001.59E+011.72E+021.76E+03 - 44K 75.002.79E-012.74E+002.16E+011.64E+026.13E-017.78E+007.64E+017.23E+02 - 44K 92.001.55E-011.38E+009.96E+006.91E+013.43E-013.66E+003.19E+012.71E+02 - 44K 105.001.06E-018.77E-015.93E+003.85E+012.37E-012.26E+001.81E+011.42E+02 - 44K 122.006.88E-025.21E-013.25E+001.95E+011.56E-011.32E+009.57E+006.84E+01 - 44K 145.004.18E-022.85E-011.61E+008.77E+009.73E-027.15E-014.62E+002.95E+01 - 44K 170.002.65E-021.63E-018.42E-014.17E+006.33E-024.12E-012.38E+001.37E+01 - 44K 235.001.06E-025.28E-022.26E-019.23E-012.69E-021.38E-016.41E-012.95E+00 - 44K 320.004.58E-031.87E-026.66E-022.28E-011.22E-025.13E-021.94E-017.24E-01 - 44K 410.002.40E-038.45E-032.62E-027.85E-026.62E-032.39E-027.75E-022.47E-01 - 44K 520.001.34E-034.15E-031.14E-023.01E-023.73E-031.19E-023.36E-029.29E-02 - 44K 750.005.92E-041.54E-033.57E-037.98E-031.59E-034.27E-031.01E-022.29E-02 - 44K 1000.003.33E-047.74E-041.61E-033.19E-038.42E-042.01E-034.20E-038.39E-03 - 44K 1250.002.21E-044.76E-049.17E-041.68E-035.22E-041.15E-032.22E-034.07E-03 - 44K 1500.001.61E-043.28E-045.99E-041.04E-033.57E-047.48E-041.35E-032.34E-03 - 44L1 4.222.10E+017.35E+031.32E+065.43E+073.42E+023.58E+056.30E+073.09E+09 - 44L1 4.921.61E+012.98E+037.66E+055.08E+072.16E+021.72E+052.68E+071.62E+09 - 44L1 6.221.04E+016.46E+022.55E+052.41E+071.07E+025.68E+047.26E+064.87E+08 - 44L1 9.424.51E+001.70E+012.30E+042.82E+063.10E+018.19E+037.29E+054.53E+07 - 44L1 13.222.15E+003.29E+002.12E+033.19E+051.13E+011.74E+031.14E+055.95E+06 - 44L1 17.001.20E+005.64E+002.52E+025.11E+045.33E+005.64E+022.94E+041.30E+06 - 44L1 23.005.83E-014.76E+001.59E+014.27E+032.17E+001.49E+025.88E+032.07E+05 - 44L1 31.002.76E-012.78E+001.15E+012.73E+028.98E-014.12E+011.23E+033.43E+04 - 44L1 43.001.18E-011.24E+007.95E+004.37E+013.43E-011.04E+012.31E+024.88E+03 - 44L1 56.005.84E-025.87E-014.14E+002.46E+011.59E-013.53E+006.15E+011.04E+03 - 44L1 73.002.84E-022.61E-011.81E+001.13E+017.42E-021.23E+001.68E+012.25E+02 - 44L1 86.001.80E-021.54E-011.03E+006.31E+004.65E-026.47E-017.64E+008.88E+01 - 44L1 103.001.09E-028.55E-025.34E-013.13E+002.80E-023.24E-013.26E+003.25E+01 - 44L1 126.006.20E-034.36E-022.50E-011.36E+001.60E-021.52E-011.29E+001.08E+01 - 44L1 155.003.47E-032.17E-021.12E-015.54E-019.07E-037.15E-025.07E-013.58E+00 - 44L1 220.001.31E-036.62E-032.85E-021.18E-013.56E-032.09E-021.12E-015.95E-01 - 44L1 305.005.43E-042.25E-038.12E-032.83E-021.53E-037.05E-032.95E-021.22E-01 - 44L1 390.002.88E-041.03E-033.28E-031.01E-028.28E-043.24E-031.14E-023.99E-02 - 44L1 500.001.56E-044.92E-041.38E-033.76E-034.52E-041.52E-034.61E-031.36E-02 - 44L1 730.006.69E-051.77E-044.19E-049.59E-041.87E-045.19E-041.28E-033.04E-03 - 44L11000.003.56E-058.36E-051.75E-043.53E-049.23E-052.25E-044.80E-049.81E-04 - 44L11500.001.73E-053.55E-056.54E-051.15E-043.91E-058.28E-051.52E-042.67E-04 - 44L2 3.974.24E+014.93E+053.56E+083.77E+103.78E+011.56E+041.25E+064.82E+07 - 44L2 4.672.66E+012.17E+051.36E+081.74E+102.29E+018.20E+037.99E+054.67E+07 - 44L2 5.971.29E+016.30E+043.13E+074.39E+091.08E+013.08E+033.28E+052.46E+07 - 44L2 9.173.47E+007.27E+032.40E+063.05E+082.86E+005.51E+025.33E+044.08E+06 - 44L2 12.971.15E+001.28E+033.01E+053.18E+079.80E-011.36E+021.10E+047.30E+05 - 44L2 17.004.75E-013.31E+025.97E+045.24E+064.25E-014.58E+013.09E+031.75E+05 - 44L2 23.001.73E-017.37E+019.82E+036.88E+051.67E-011.35E+017.31E+023.38E+04 - 44L2 31.006.24E-021.68E+011.66E+039.17E+046.65E-024.07E+001.74E+026.42E+03 - 44L2 43.002.00E-023.37E+002.40E+021.01E+042.42E-021.09E+003.56E+011.02E+03 - 44L2 56.007.91E-039.29E-015.07E+011.69E+031.07E-023.78E-019.88E+002.27E+02 - 44L2 73.003.09E-032.57E-011.08E+012.86E+024.74E-031.31E-012.74E+005.05E+01 - 44L2 86.001.72E-031.17E-014.17E+009.61E+012.86E-036.81E-021.24E+002.00E+01 - 44L2 103.009.06E-044.94E-021.48E+002.91E+011.64E-033.33E-025.21E-017.23E+00 - 44L2 126.004.43E-041.90E-024.71E-017.78E+008.87E-041.50E-021.99E-012.34E+00 - 44L2 155.002.13E-047.23E-031.47E-012.04E+004.71E-046.69E-037.45E-027.40E-01 - 44L2 220.006.27E-051.46E-032.15E-022.23E-011.63E-041.73E-031.46E-021.10E-01 - 44L2 305.002.06E-053.43E-043.81E-033.05E-026.09E-055.02E-043.30E-031.94E-02 - 44L2 390.009.19E-061.20E-041.08E-037.20E-032.92E-052.02E-041.11E-035.49E-03 - 44L2 500.004.17E-064.30E-053.20E-041.78E-031.41E-058.20E-053.82E-041.60E-03 - 44L2 730.001.32E-069.81E-065.52E-052.39E-044.68E-062.17E-058.03E-052.67E-04 - 44L21000.005.33E-073.13E-061.42E-055.11E-051.91E-067.49E-062.35E-056.61E-05 - 44L21500.001.83E-078.06E-072.87E-068.35E-066.20E-072.03E-065.30E-061.24E-05 - 44L3 3.848.62E+011.01E+067.75E+088.63E+101.24E+014.27E+051.96E+099.04E+11 - 44L3 4.545.29E+014.33E+052.83E+083.79E+107.37E+001.85E+056.27E+082.49E+11 - 44L3 5.842.49E+011.21E+056.20E+078.92E+093.39E+005.27E+041.14E+083.60E+10 - 44L3 9.046.38E+001.32E+044.39E+065.65E+088.81E-015.95E+036.15E+061.29E+09 - 44L3 12.842.05E+002.22E+035.22E+055.52E+072.99E-011.04E+036.08E+059.17E+07 - 44L3 17.008.05E-015.37E+029.49E+048.26E+061.26E-012.56E+029.80E+041.13E+07 - 44L3 23.002.88E-011.17E+021.51E+041.04E+064.97E-025.71E+011.41E+041.23E+06 - 44L3 31.001.02E-012.58E+012.46E+031.33E+051.99E-021.30E+012.13E+031.40E+05 - 44L3 43.003.21E-024.97E+003.37E+021.38E+047.28E-032.59E+002.78E+021.35E+04 - 44L3 56.001.24E-021.31E+006.78E+012.20E+033.24E-037.11E-015.52E+012.10E+03 - 44L3 73.004.78E-033.48E-011.36E+013.48E+021.44E-031.96E-011.12E+013.35E+02 - 44L3 86.002.64E-031.53E-015.04E+001.12E+028.74E-048.86E-024.21E+001.09E+02 - 44L3 103.001.37E-036.24E-021.70E+003.19E+015.05E-043.73E-021.46E+003.21E+01 - 44L3 126.006.63E-042.29E-025.06E-017.93E+002.74E-041.43E-024.52E-018.37E+00 - 44L3 155.003.16E-048.28E-031.47E-011.91E+001.47E-045.38E-031.38E-012.15E+00 - 44L3 220.009.21E-051.52E-031.86E-021.77E-015.17E-051.06E-031.94E-022.27E-01 - 44L3 305.003.04E-053.26E-042.84E-032.02E-022.00E-052.45E-043.27E-032.97E-02 - 44L3 390.001.37E-051.07E-047.20E-044.14E-039.94E-068.38E-058.87E-046.76E-03 - 44L3 500.006.36E-063.64E-051.89E-048.83E-045.01E-062.94E-052.45E-041.58E-03 - 44L3 730.002.15E-067.89E-062.83E-059.75E-051.86E-066.57E-063.74E-051.88E-04 - 44L31000.009.40E-072.52E-066.78E-061.85E-058.67E-072.12E-068.55E-063.50E-05 - 44L31500.003.68E-077.01E-071.37E-062.83E-063.55E-075.99E-071.51E-064.59E-06 - 44M1 1.581.99E+016.06E+043.09E+063.76E+091.18E+038.68E+061.04E+103.45E+12 - 44M1 2.589.92E+007.10E+031.64E+064.56E+072.72E+027.90E+054.64E+081.15E+11 - 44M1 4.583.59E+003.56E+021.67E+051.84E+074.88E+014.94E+041.35E+072.20E+09 - 44M1 8.581.00E+003.28E+005.54E+038.03E+057.48E+002.53E+033.25E+053.14E+07 - 44M1 15.582.63E-011.28E+008.09E+011.63E+041.26E+001.64E+021.09E+046.18E+05 - 44M1 25.008.42E-027.90E-012.90E+003.83E+023.10E-012.01E+018.14E+023.02E+04 - 44M1 40.002.54E-022.69E-011.67E+001.23E+017.75E-022.69E+006.80E+011.64E+03 - 44M1 52.001.27E-021.29E-019.04E-015.56E+003.60E-029.06E-011.77E+013.36E+02 - 44M1 70.005.69E-035.28E-023.67E-012.31E+001.53E-022.73E-014.02E+005.82E+01 - 44M1 103.001.96E-031.53E-029.46E-025.52E-015.12E-036.06E-026.26E-016.41E+00 - 44M1 150.006.86E-044.34E-032.27E-021.14E-011.81E-031.49E-021.11E-018.21E-01 - 44M1 280.001.23E-045.36E-042.02E-037.39E-033.48E-041.72E-037.73E-033.45E-02 - 44M1 500.002.84E-058.92E-052.50E-046.83E-048.25E-052.80E-048.50E-042.53E-03 - 44M2 1.484.58E+011.24E+074.70E+102.58E+131.35E+022.91E+051.21E+082.62E+10 - 44M2 2.481.61E+019.31E+051.72E+097.13E+112.82E+012.96E+049.31E+061.94E+09 - 44M2 4.483.83E+004.78E+044.17E+071.16E+104.68E+002.33E+034.92E+057.92E+07 - 44M2 8.486.58E-011.96E+038.13E+051.40E+086.68E-011.60E+022.10E+042.25E+06 - 44M2 15.481.06E-019.76E+012.10E+042.21E+061.06E-011.34E+011.08E+037.39E+04 - 44M2 25.002.25E-029.11E+001.17E+038.19E+042.44E-021.91E+001.02E+024.75E+03 - 44M2 40.004.63E-039.07E-017.15E+013.30E+035.76E-032.85E-011.02E+013.19E+02 - 44M2 52.001.87E-032.52E-011.52E+015.56E+022.57E-039.90E-022.82E+007.07E+01 - 44M2 70.006.64E-045.99E-022.67E+007.49E+011.03E-033.01E-026.62E-011.29E+01 - 44M2 103.001.70E-049.45E-032.87E-015.72E+003.16E-046.47E-031.02E-011.43E+00 - 44M2 150.004.53E-051.62E-033.43E-024.93E-011.00E-041.47E-031.70E-021.75E-01 - 44M2 280.005.29E-069.62E-051.16E-039.94E-031.52E-051.34E-049.44E-045.94E-03 - 44M2 500.008.09E-078.32E-066.21E-053.46E-042.72E-061.59E-057.43E-053.12E-04 - 44M3 1.469.51E+012.39E+079.20E+105.05E+134.18E+011.05E+073.28E+111.01E+15 - 44M3 2.463.17E+011.72E+063.19E+091.31E+128.55E+007.72E+058.95E+091.26E+13 - 44M3 4.467.18E+008.55E+047.40E+072.03E+101.39E+003.96E+041.53E+089.54E+10 - 44M3 8.461.18E+003.37E+031.38E+062.33E+081.96E-011.62E+032.03E+065.82E+08 - 44M3 15.461.83E-011.61E+023.37E+043.48E+063.11E-028.05E+013.80E+045.55E+06 - 44M3 25.003.76E-021.44E+011.78E+031.22E+057.18E-037.40E+001.71E+031.51E+05 - 44M3 40.007.49E-031.35E+001.02E+024.56E+031.71E-037.25E-018.88E+014.89E+03 - 44M3 52.002.98E-033.63E-012.06E+017.30E+027.70E-042.00E-011.76E+017.50E+02 - 44M3 70.001.03E-038.20E-023.40E+009.18E+013.12E-044.69E-022.89E+009.31E+01 - 44M3 103.002.58E-041.20E-023.30E-016.25E+009.65E-057.29E-032.91E-016.58E+00 - 44M3 150.006.75E-051.88E-033.47E-024.67E-013.11E-051.23E-033.31E-025.37E-01 - 44M3 280.007.79E-069.41E-058.99E-046.92E-034.94E-066.99E-051.02E-031.00E-02 - 44M3 500.001.21E-067.06E-063.69E-051.72E-049.71E-075.73E-064.82E-053.12E-04 - 44M4 1.281.53E+025.97E+055.60E+101.14E+159.34E+002.33E+053.81E+096.64E+12 - 44M4 2.282.15E+013.10E+049.65E+087.68E+121.38E+001.29E+048.13E+078.91E+10 - 44M4 4.282.13E+001.22E+031.13E+073.51E+101.62E-015.36E+021.30E+068.26E+08 - 44M4 8.281.60E-013.95E+011.05E+051.33E+081.60E-021.89E+011.84E+046.37E+06 - 44M4 15.281.25E-021.54E+001.37E+037.93E+051.75E-038.36E-013.71E+027.22E+04 - 44M4 25.001.49E-031.09E-014.23E+011.35E+042.81E-046.81E-021.66E+012.02E+03 - 44M4 40.001.84E-048.40E-031.55E+002.84E+024.72E-056.21E-038.77E-016.81E+01 - 44M4 52.005.64E-052.00E-032.46E-013.35E+011.72E-051.63E-031.71E-011.04E+01 - 44M4 70.001.47E-053.91E-043.11E-023.03E+005.44E-063.59E-042.73E-021.25E+00 - 44M4 103.002.52E-064.75E-052.18E-031.38E-011.20E-065.05E-052.54E-038.13E-02 - 44M4 150.004.57E-076.26E-061.71E-047.18E-032.75E-077.57E-062.59E-045.91E-03 - 44M4 280.002.98E-082.41E-072.92E-066.19E-052.39E-083.37E-076.30E-068.44E-05 - 44M4 500.002.82E-091.42E-088.71E-089.69E-072.57E-092.02E-082.23E-071.92E-06 - 44M5 1.282.26E+028.22E+058.68E+101.69E+155.85E+002.94E+041.79E+101.57E+15 - 44M5 2.283.13E+014.22E+041.48E+091.12E+138.75E-011.65E+033.15E+089.13E+12 - 44M5 4.283.07E+001.65E+031.71E+075.03E+101.06E-017.16E+013.86E+063.45E+10 - 44M5 8.282.27E-015.26E+011.58E+051.87E+081.08E-022.69E+003.84E+041.07E+08 - 44M5 15.281.75E-022.02E+002.02E+031.09E+061.23E-031.30E-015.36E+025.47E+05 - 44M5 25.002.06E-031.39E-016.08E+011.78E+042.05E-041.14E-021.75E+018.50E+03 - 44M5 40.002.53E-041.05E-022.15E+003.61E+023.59E-051.13E-036.74E-011.72E+02 - 44M5 52.007.74E-052.45E-033.35E-014.13E+011.34E-053.13E-041.11E-012.00E+01 - 44M5 70.002.01E-054.69E-044.10E-023.57E+004.37E-067.35E-051.44E-021.81E+00 - 44M5 103.003.50E-065.50E-052.71E-031.51E-011.01E-061.13E-051.05E-038.36E-02 - 44M5 150.006.54E-076.99E-061.99E-047.11E-032.46E-071.89E-068.52E-054.43E-03 - 44M5 280.004.59E-082.57E-072.93E-064.92E-052.47E-081.07E-071.51E-063.85E-05 - 44M5 500.004.66E-091.55E-087.69E-086.02E-073.35E-099.08E-094.77E-085.69E-07 - 44N+ 50.003.52E-031.48E-017.89E+003.05E+028.49E-032.83E-019.60E+003.19E+02 - 44N+ 70.001.34E-033.30E-021.09E+002.97E+013.20E-036.92E-021.52E+003.38E+01 - 44N+ 100.004.80E-047.22E-031.43E-012.64E+001.16E-031.64E-022.35E-013.48E+00 - 44N+ 150.001.49E-041.40E-031.58E-021.85E-013.75E-043.45E-033.17E-023.04E-01 - 44N+ 200.006.58E-054.61E-043.64E-033.07E-021.72E-041.21E-038.30E-035.94E-02 - 44N+ 500.005.82E-061.98E-056.50E-052.20E-041.66E-055.85E-051.89E-046.15E-04 - 45K 24.226.47E+003.25E+013.62E+012.13E+011.85E+016.44E+023.73E+035.59E+03 - 45K 24.925.99E+003.40E+015.98E+017.00E+011.70E+015.76E+023.75E+038.86E+03 - 45K 26.225.25E+003.51E+019.93E+012.21E+021.46E+014.73E+023.61E+031.37E+04 - 45K 29.423.88E+003.28E+011.58E+026.74E+021.04E+013.03E+022.88E+031.84E+04 - 45K 33.222.80E+002.72E+011.72E+029.98E+027.27E+001.90E+022.04E+031.68E+04 - 45K 37.002.09E+002.17E+011.56E+021.06E+035.30E+001.25E+021.42E+031.32E+04 - 45K 43.001.39E+001.49E+011.19E+028.92E+023.41E+007.04E+018.12E+028.22E+03 - 45K 51.008.66E-019.28E+007.62E+015.97E+022.07E+003.67E+014.13E+024.26E+03 - 45K 63.004.78E-014.88E+003.92E+013.03E+021.12E+001.65E+011.73E+021.71E+03 - 45K 76.002.81E-012.67E+002.03E+011.49E+026.54E-018.17E+007.81E+017.17E+02 - 45K 93.001.57E-011.36E+009.54E+006.43E+013.69E-013.88E+003.30E+012.74E+02 - 45K 106.001.08E-018.71E-015.74E+003.63E+012.55E-012.41E+001.89E+011.46E+02 - 45K 123.007.05E-025.22E-013.18E+001.86E+011.69E-011.41E+001.01E+017.06E+01 - 45K 146.004.31E-022.87E-011.60E+008.51E+001.05E-017.69E-014.89E+003.07E+01 - 45K 175.002.57E-021.53E-017.66E-013.68E+006.46E-024.10E-012.31E+001.28E+01 - 45K 240.001.06E-025.13E-022.14E-018.56E-012.81E-021.42E-016.44E-012.90E+00 - 45K 325.004.65E-031.86E-026.53E-022.20E-011.29E-025.35E-021.99E-017.34E-01 - 45K 410.002.55E-038.90E-032.75E-028.18E-027.25E-032.62E-028.46E-022.69E-01 - 45K 520.001.43E-034.38E-031.20E-023.16E-024.08E-031.30E-023.66E-021.01E-01 - 45K 750.006.30E-041.64E-033.79E-038.45E-031.74E-034.66E-031.10E-022.49E-02 - 45K 1000.003.54E-048.26E-041.71E-033.40E-039.15E-042.19E-034.57E-039.13E-03 - 45K 1250.002.35E-045.09E-049.80E-041.80E-035.66E-041.26E-032.42E-034.43E-03 - 45K 1500.001.72E-043.51E-046.41E-041.11E-033.87E-048.13E-041.47E-032.54E-03 - 45L1 4.411.93E+016.63E+031.11E+064.13E+073.36E+023.37E+055.65E+072.59E+09 - 45L1 5.111.50E+012.80E+036.65E+054.05E+072.16E+021.67E+052.49E+071.41E+09 - 45L1 6.419.85E+006.51E+022.34E+052.05E+071.10E+025.69E+047.04E+064.48E+08 - 45L1 9.614.37E+002.17E+012.33E+042.67E+063.27E+018.60E+037.47E+054.47E+07 - 45L1 13.412.12E+002.52E+002.36E+033.24E+051.21E+011.87E+031.21E+056.10E+06 - 45L1 17.001.23E+004.66E+003.44E+026.00E+045.97E+006.45E+023.34E+041.45E+06 - 45L1 23.005.99E-014.35E+002.09E+015.41E+032.43E+001.70E+026.67E+032.33E+05 - 45L1 31.002.85E-012.66E+009.68E+003.73E+021.00E+004.68E+011.40E+033.85E+04 - 45L1 43.001.23E-011.22E+007.19E+004.25E+013.84E-011.18E+012.60E+025.47E+03 - 45L1 56.006.09E-025.87E-013.91E+002.23E+011.78E-013.99E+006.91E+011.16E+03 - 45L1 73.002.96E-022.64E-011.76E+001.06E+018.29E-021.38E+001.88E+012.51E+02 - 45L1 86.001.89E-021.57E-011.01E+006.02E+005.19E-027.26E-018.55E+009.92E+01 - 45L1 103.001.15E-028.77E-025.33E-013.04E+003.12E-023.63E-013.65E+003.63E+01 - 45L1 126.006.54E-034.50E-022.52E-011.34E+001.78E-021.70E-011.44E+001.20E+01 - 45L1 155.003.67E-032.25E-021.14E-015.56E-011.01E-027.98E-025.65E-013.98E+00 - 45L1 220.001.39E-036.92E-032.94E-021.21E-013.95E-032.33E-021.24E-016.60E-01 - 45L1 305.005.77E-042.36E-038.48E-032.94E-021.70E-037.82E-033.27E-021.36E-01 - 45L1 390.003.07E-041.09E-033.45E-031.06E-029.15E-043.58E-031.26E-024.40E-02 - 45L1 500.001.67E-045.23E-041.46E-033.97E-034.99E-041.68E-035.09E-031.51E-02 - 45L1 730.007.17E-051.89E-044.47E-041.02E-032.05E-045.72E-041.41E-033.34E-03 - 45L11000.003.81E-058.96E-051.88E-043.79E-041.01E-042.47E-045.28E-041.08E-03 - 45L11500.001.85E-053.82E-057.06E-051.24E-044.26E-059.08E-051.67E-042.93E-04 - 45L2 4.153.92E+014.42E+053.04E+083.00E+103.72E+011.46E+041.09E+063.81E+07 - 45L2 4.852.51E+012.01E+051.20E+081.45E+102.30E+017.88E+037.19E+053.86E+07 - 45L2 6.151.25E+016.08E+042.92E+073.88E+091.11E+013.06E+033.08E+052.16E+07 - 45L2 9.353.48E+007.39E+032.39E+062.92E+083.04E+005.71E+025.31E+043.89E+06 - 45L2 13.151.18E+001.34E+033.10E+053.18E+071.06E+001.45E+021.13E+047.28E+05 - 45L2 17.005.11E-013.71E+026.68E+045.78E+064.81E-015.15E+013.41E+031.90E+05 - 45L2 23.001.87E-018.27E+011.10E+047.63E+051.89E-011.53E+018.12E+023.70E+04 - 45L2 31.006.79E-021.89E+011.87E+031.02E+057.54E-024.59E+001.94E+027.08E+03 - 45L2 43.002.19E-023.79E+002.70E+021.12E+042.75E-021.23E+003.99E+011.13E+03 - 45L2 56.008.68E-031.04E+005.71E+011.90E+031.22E-024.27E-011.11E+012.53E+02 - 45L2 73.003.40E-032.90E-011.22E+013.22E+025.40E-031.48E-013.08E+005.65E+01 - 45L2 86.001.90E-031.32E-014.72E+001.08E+023.26E-037.73E-021.40E+002.24E+01 - 45L2 103.001.00E-035.58E-021.67E+003.28E+011.88E-033.79E-025.89E-018.13E+00 - 45L2 126.004.91E-042.15E-025.33E-018.79E+001.01E-031.71E-022.25E-012.63E+00 - 45L2 155.002.37E-048.19E-031.67E-012.31E+005.39E-047.62E-038.45E-028.36E-01 - 45L2 220.007.02E-051.65E-032.45E-022.53E-011.86E-041.97E-031.66E-021.24E-01 - 45L2 305.002.32E-053.90E-044.34E-033.47E-026.99E-055.75E-043.76E-032.21E-02 - 45L2 390.001.03E-051.36E-041.24E-038.21E-033.36E-052.31E-041.27E-036.26E-03 - 45L2 500.004.68E-064.90E-053.66E-042.03E-031.62E-059.42E-054.38E-041.83E-03 - 45L2 730.001.48E-061.12E-056.33E-052.74E-045.40E-062.50E-059.23E-053.06E-04 - 45L21000.006.02E-073.58E-061.63E-055.86E-052.20E-068.65E-062.70E-057.61E-05 - 45L21500.002.08E-079.25E-073.30E-069.62E-067.15E-072.34E-066.12E-061.43E-05 - 45L3 4.007.98E+019.12E+056.66E+086.93E+101.20E+014.04E+051.78E+097.85E+11 - 45L3 4.704.99E+014.02E+052.53E+083.18E+107.32E+001.81E+055.94E+082.27E+11 - 45L3 6.002.41E+011.17E+055.80E+077.94E+093.45E+005.34E+041.14E+083.49E+10 - 45L3 9.206.39E+001.34E+044.37E+065.42E+089.24E-016.35E+036.54E+061.34E+09 - 45L3 13.002.10E+002.32E+035.37E+055.52E+073.18E-011.13E+036.69E+059.94E+07 - 45L3 17.008.63E-015.98E+021.06E+059.06E+061.40E-012.99E+021.17E+051.35E+07 - 45L3 23.003.10E-011.30E+021.68E+041.15E+065.52E-026.66E+011.67E+041.45E+06 - 45L3 31.001.10E-012.88E+012.74E+031.47E+052.21E-021.52E+012.53E+031.66E+05 - 45L3 43.003.48E-025.54E+003.76E+021.53E+048.09E-033.02E+003.28E+021.59E+04 - 45L3 56.001.36E-021.47E+007.56E+012.44E+033.60E-038.27E-016.50E+012.47E+03 - 45L3 73.005.22E-033.88E-011.52E+013.87E+021.60E-032.27E-011.31E+013.92E+02 - 45L3 86.002.89E-031.71E-015.64E+001.24E+029.72E-041.03E-014.93E+001.28E+02 - 45L3 103.001.50E-036.97E-021.90E+003.56E+015.61E-044.32E-021.70E+003.75E+01 - 45L3 126.007.29E-042.57E-025.66E-018.85E+003.05E-041.65E-025.27E-019.76E+00 - 45L3 155.003.47E-049.27E-031.65E-012.13E+001.63E-046.21E-031.61E-012.50E+00 - 45L3 220.001.01E-041.70E-032.09E-021.98E-015.77E-051.23E-032.25E-022.63E-01 - 45L3 305.003.35E-053.66E-043.19E-032.27E-022.23E-052.81E-043.78E-033.45E-02 - 45L3 390.001.51E-051.20E-048.08E-044.64E-031.11E-059.57E-051.02E-037.82E-03 - 45L3 500.007.01E-064.07E-052.13E-049.91E-045.58E-063.35E-052.83E-041.82E-03 - 45L3 730.002.34E-068.84E-063.18E-051.10E-042.07E-067.44E-064.30E-052.17E-04 - 45L31000.001.05E-062.82E-067.61E-062.08E-059.64E-072.39E-069.77E-064.02E-05 - 45L31500.004.09E-077.83E-071.53E-063.17E-063.94E-076.71E-071.71E-065.25E-06 - 45M1 1.631.90E+015.91E+042.76E+063.69E+091.23E+039.00E+061.07E+103.42E+12 - 45M1 2.639.67E+007.35E+031.55E+063.97E+072.93E+028.60E+055.04E+081.23E+11 - 45M1 4.633.57E+004.02E+021.71E+051.75E+075.38E+015.55E+041.52E+072.44E+09 - 45M1 8.631.01E+004.72E+006.20E+038.45E+058.35E+002.89E+033.72E+053.55E+07 - 45M1 15.632.70E-011.10E+001.05E+021.87E+041.42E+001.88E+021.25E+047.05E+05 - 45M1 25.008.76E-027.50E-013.19E+005.00E+023.51E-012.32E+019.41E+023.48E+04 - 45M1 40.002.66E-022.67E-011.53E+001.37E+018.77E-023.09E+007.80E+011.88E+03 - 45M1 52.001.34E-021.30E-018.55E-015.27E+004.08E-021.04E+002.03E+013.84E+02 - 45M1 70.006.01E-035.40E-023.60E-012.19E+001.73E-023.11E-014.58E+006.62E+01 - 45M1 103.002.08E-031.58E-029.61E-025.44E-015.77E-036.87E-027.10E-017.26E+00 - 45M1 150.007.31E-044.54E-032.34E-021.15E-012.04E-031.69E-021.25E-019.27E-01 - 45M1 280.001.32E-045.69E-042.13E-037.73E-033.90E-041.93E-038.68E-033.87E-02 - 45M1 500.003.07E-059.58E-052.68E-047.30E-049.20E-053.13E-049.50E-042.83E-03 - 45M2 1.524.40E+011.24E+074.63E+102.46E+131.42E+023.03E+051.21E+082.48E+10 - 45M2 2.521.60E+019.78E+051.80E+097.27E+113.08E+013.21E+049.82E+061.96E+09 - 45M2 4.523.93E+005.20E+044.53E+071.24E+105.21E+002.58E+035.35E+058.39E+07 - 45M2 8.526.93E-012.17E+039.03E+051.54E+087.54E-011.80E+022.33E+042.45E+06 - 45M2 15.521.14E-011.10E+022.35E+042.45E+061.21E-011.52E+011.21E+038.18E+04 - 45M2 25.002.46E-021.04E+011.34E+039.29E+042.80E-022.18E+001.16E+025.36E+03 - 45M2 40.005.11E-031.03E+008.17E+013.75E+036.63E-033.26E-011.16E+013.61E+02 - 45M2 52.002.08E-032.88E-011.74E+016.33E+022.97E-031.14E-013.22E+008.03E+01 - 45M2 70.007.39E-046.84E-023.06E+008.54E+011.19E-033.46E-027.57E-011.47E+01 - 45M2 103.001.91E-041.08E-023.29E-016.55E+003.66E-047.46E-031.17E-011.64E+00 - 45M2 150.005.11E-051.86E-033.94E-025.66E-011.16E-041.70E-031.96E-022.00E-01 - 45M2 280.005.98E-061.11E-041.34E-031.15E-021.77E-051.56E-041.09E-036.86E-03 - 45M2 500.009.22E-079.63E-067.21E-054.02E-043.18E-061.85E-058.64E-053.62E-04 - 45M3 1.509.19E+012.39E+079.10E+104.82E+134.37E+011.10E+073.44E+111.05E+15 - 45M3 2.503.16E+011.81E+063.34E+091.34E+129.19E+008.52E+051.00E+101.41E+13 - 45M3 4.507.37E+009.28E+048.03E+072.17E+101.52E+004.51E+041.78E+081.12E+11 - 45M3 8.501.24E+003.73E+031.52E+062.54E+082.18E-011.88E+032.42E+066.95E+08 - 45M3 15.501.96E-011.80E+023.77E+043.85E+063.48E-029.43E+014.55E+046.66E+06 - 45M3 25.004.09E-021.62E+012.02E+031.37E+058.08E-038.76E+002.07E+031.83E+05 - 45M3 40.008.22E-031.53E+001.15E+025.14E+031.93E-038.58E-011.07E+025.88E+03 - 45M3 52.003.28E-034.11E-012.34E+018.24E+028.68E-042.36E-012.10E+018.99E+02 - 45M3 70.001.14E-039.29E-023.86E+001.04E+023.51E-045.54E-023.45E+001.11E+02 - 45M3 103.002.87E-041.36E-023.74E-017.08E+001.09E-048.58E-033.46E-017.82E+00 - 45M3 150.007.52E-052.13E-033.95E-025.30E-013.51E-051.44E-033.92E-026.36E-01 - 45M3 280.008.71E-061.07E-041.02E-037.88E-035.58E-068.15E-051.20E-031.18E-02 - 45M3 500.001.37E-068.03E-064.20E-051.97E-041.10E-066.63E-065.65E-053.66E-04 - 45M4 1.311.56E+026.14E+055.79E+101.17E+151.00E+012.54E+054.13E+097.02E+12 - 45M4 2.312.29E+013.35E+041.07E+098.59E+121.54E+001.47E+049.35E+071.01E+11 - 45M4 4.312.34E+001.36E+031.30E+074.10E+101.85E-016.29E+021.55E+069.72E+08 - 45M4 8.311.80E-014.51E+011.24E+051.59E+081.86E-022.26E+012.22E+047.65E+06 - 45M4 15.311.44E-021.78E+001.64E+039.59E+052.05E-031.01E+004.51E+028.76E+04 - 45M4 25.001.74E-031.28E-015.12E+011.65E+043.33E-048.31E-022.04E+012.49E+03 - 45M4 40.002.16E-049.96E-031.88E+003.49E+025.63E-057.58E-031.08E+008.38E+01 - 45M4 52.006.67E-052.37E-032.99E-014.11E+012.06E-051.99E-032.11E-011.28E+01 - 45M4 70.001.74E-054.67E-043.78E-023.72E+006.53E-064.39E-043.36E-021.53E+00 - 45M4 103.003.01E-065.70E-052.65E-031.69E-011.45E-066.19E-053.14E-031.00E-01 - 45M4 150.005.49E-077.54E-062.08E-048.82E-033.32E-079.29E-063.20E-047.29E-03 - 45M4 280.003.63E-082.94E-073.56E-067.63E-052.90E-084.14E-077.79E-061.04E-04 - 45M4 500.003.14E-091.72E-081.06E-071.19E-063.12E-092.48E-082.76E-072.38E-06 - 45M5 1.312.30E+028.43E+059.00E+101.75E+156.28E+003.16E+041.95E+101.72E+15 - 45M5 2.313.33E+014.54E+041.64E+091.25E+139.70E-011.86E+033.67E+081.08E+13 - 45M5 4.313.37E+001.83E+031.98E+075.88E+101.20E-018.29E+014.66E+064.28E+10 - 45M5 8.312.55E-015.96E+011.87E+052.23E+081.25E-023.16E+004.74E+041.36E+08 - 45M5 15.312.01E-022.32E+002.41E+031.31E+061.44E-031.53E-016.68E+026.98E+05 - 45M5 25.002.41E-031.63E-017.37E+012.18E+042.42E-041.37E-022.20E+011.10E+04 - 45M5 40.002.98E-041.24E-022.61E+004.42E+024.26E-051.36E-038.49E-012.20E+02 - 45M5 52.009.08E-052.89E-034.07E-015.05E+011.59E-053.75E-041.39E-012.56E+01 - 45M5 70.002.36E-055.56E-044.98E-024.36E+005.20E-068.80E-051.81E-022.31E+00 - 45M5 103.004.18E-066.55E-053.30E-031.84E-011.21E-061.36E-051.32E-031.06E-01 - 45M5 150.007.86E-078.34E-062.42E-048.70E-032.94E-072.27E-061.06E-045.59E-03 - 45M5 280.005.03E-083.08E-073.55E-066.02E-052.97E-081.29E-071.87E-064.83E-05 - 45M5 500.005.88E-091.85E-089.45E-087.35E-074.02E-091.09E-085.85E-087.10E-07 - 45N+ 50.003.80E-031.68E-019.15E+003.55E+029.77E-033.31E-011.14E+013.85E+02 - 45N+ 70.001.45E-033.71E-021.26E+003.45E+013.68E-038.06E-021.79E+004.04E+01 - 45N+ 100.005.22E-048.03E-031.64E-013.06E+001.33E-031.90E-022.75E-014.12E+00 - 45N+ 150.001.63E-041.54E-031.79E-022.13E-014.29E-043.98E-033.69E-023.56E-01 - 45N+ 200.007.19E-055.08E-044.10E-033.51E-021.96E-041.39E-039.60E-036.92E-02 - 45N+ 500.006.40E-062.18E-057.22E-052.47E-041.89E-056.66E-052.16E-047.05E-04 - 46K 25.355.90E+002.81E+012.89E+011.53E+011.80E+015.93E+023.26E+034.54E+03 - 46K 26.055.48E+002.94E+014.76E+015.03E+011.65E+015.33E+023.28E+037.17E+03 - 46K 27.354.83E+003.04E+017.91E+011.60E+021.43E+014.42E+023.17E+031.11E+04 - 46K 30.553.61E+002.87E+011.28E+025.02E+021.03E+012.89E+022.58E+031.53E+04 - 46K 34.352.64E+002.41E+011.42E+027.67E+027.31E+001.84E+021.86E+031.44E+04 - 46K 38.002.01E+001.96E+011.32E+028.33E+025.43E+001.25E+021.33E+031.17E+04 - 46K 44.001.35E+001.38E+011.03E+027.31E+023.53E+007.10E+017.81E+027.49E+03 - 46K 52.008.51E-018.72E+006.81E+015.08E+022.17E+003.75E+014.06E+024.00E+03 - 46K 64.004.76E-014.67E+003.61E+012.67E+021.19E+001.71E+011.73E+021.65E+03 - 46K 77.002.82E-012.59E+001.91E+011.35E+026.97E-018.57E+007.96E+017.10E+02 - 46K 94.001.59E-011.34E+009.12E+005.97E+013.95E-014.10E+003.42E+012.77E+02 - 46K 107.001.10E-018.64E-015.55E+003.42E+012.75E-012.56E+001.97E+011.48E+02 - 46K 124.007.21E-025.21E-013.11E+001.78E+011.82E-011.51E+001.06E+017.28E+01 - 46K 147.004.43E-022.90E-011.58E+008.24E+001.14E-018.24E-015.17E+003.20E+01 - 46K 175.002.70E-021.58E-017.82E-013.71E+007.12E-024.50E-012.51E+001.38E+01 - 46K 240.001.11E-025.34E-022.21E-018.74E-013.09E-021.55E-017.01E-013.13E+00 - 46K 325.004.91E-031.95E-026.78E-022.27E-011.42E-025.86E-022.17E-017.96E-01 - 46K 410.002.70E-039.36E-032.87E-028.50E-027.94E-032.86E-029.22E-022.92E-01 - 46K 520.001.51E-034.63E-031.26E-023.31E-024.46E-031.42E-023.99E-021.10E-01 - 46K 750.006.70E-041.74E-034.01E-038.94E-031.89E-035.08E-031.19E-022.71E-02 - 46K 1000.003.77E-048.79E-041.82E-033.62E-039.94E-042.39E-034.97E-039.92E-03 - 46K 1250.002.50E-045.42E-041.05E-031.92E-036.13E-041.37E-032.63E-034.81E-03 - 46K 1500.001.83E-043.75E-046.86E-041.19E-034.18E-048.83E-041.60E-032.76E-03 - 46L1 4.601.78E+016.00E+039.26E+053.13E+073.31E+023.17E+055.08E+072.17E+09 - 46L1 5.301.39E+012.63E+035.78E+053.22E+072.17E+021.61E+052.31E+071.23E+09 - 46L1 6.609.31E+006.54E+022.15E+051.74E+071.12E+025.70E+046.81E+064.10E+08 - 46L1 9.804.23E+002.68E+012.34E+042.51E+063.45E+019.00E+037.63E+054.39E+07 - 46L1 13.602.08E+002.05E+002.59E+033.28E+051.30E+012.01E+031.27E+056.24E+06 - 46L1 17.001.26E+003.77E+004.53E+026.94E+046.68E+007.35E+023.80E+041.62E+06 - 46L1 23.006.15E-013.94E+002.93E+016.71E+032.72E+001.93E+027.55E+032.60E+05 - 46L1 31.002.94E-012.53E+008.32E+005.01E+021.12E+005.30E+011.58E+034.30E+04 - 46L1 43.001.27E-011.20E+006.45E+004.45E+014.29E-011.33E+012.93E+026.11E+03 - 46L1 56.006.33E-025.86E-013.68E+002.04E+011.99E-014.49E+007.76E+011.30E+03 - 46L1 73.003.10E-022.67E-011.71E+009.86E+009.24E-021.55E+002.11E+012.80E+02 - 46L1 86.001.98E-021.60E-019.97E-015.73E+005.79E-028.14E-019.56E+001.11E+02 - 46L1 103.001.20E-028.97E-025.31E-012.95E+003.48E-024.06E-014.07E+004.03E+01 - 46L1 126.006.87E-034.63E-022.54E-011.32E+001.98E-021.90E-011.60E+001.34E+01 - 46L1 155.003.86E-032.32E-021.16E-015.56E-011.12E-028.89E-026.29E-014.42E+00 - 46L1 220.001.47E-037.22E-033.03E-021.23E-014.38E-032.59E-021.38E-017.31E-01 - 46L1 305.006.12E-042.48E-038.83E-033.05E-021.88E-038.67E-033.62E-021.50E-01 - 46L1 390.003.26E-041.15E-033.62E-031.10E-021.01E-033.96E-031.40E-024.86E-02 - 46L1 500.001.78E-045.54E-041.54E-034.19E-035.50E-041.86E-035.61E-031.66E-02 - 46L1 730.007.66E-052.02E-044.77E-041.09E-032.25E-046.30E-041.55E-033.68E-03 - 46L11000.004.08E-059.61E-052.02E-044.07E-041.11E-042.72E-045.80E-041.18E-03 - 46L11500.001.99E-054.11E-057.60E-051.34E-044.64E-059.94E-051.83E-043.21E-04 - 46L2 4.333.62E+013.97E+052.60E+082.39E+103.66E+011.37E+049.49E+053.00E+07 - 46L2 5.032.36E+011.86E+051.07E+081.21E+102.31E+017.56E+036.45E+053.18E+07 - 46L2 6.331.21E+015.85E+042.72E+073.42E+091.14E+013.03E+032.88E+051.89E+07 - 46L2 9.533.48E+007.49E+032.37E+062.78E+083.23E+005.90E+025.28E+043.69E+06 - 46L2 13.331.21E+001.40E+033.19E+053.17E+071.15E+001.53E+021.16E+047.23E+05 - 46L2 17.005.49E-014.15E+027.46E+046.35E+065.43E-015.77E+013.76E+032.05E+05 - 46L2 23.002.02E-019.26E+011.23E+048.43E+052.14E-011.71E+019.00E+024.04E+04 - 46L2 31.007.36E-022.12E+012.09E+031.13E+058.53E-025.16E+002.16E+027.78E+03 - 46L2 43.002.39E-024.25E+003.03E+021.25E+043.12E-021.39E+004.45E+011.25E+03 - 46L2 56.009.50E-031.17E+006.41E+012.12E+031.38E-024.82E-011.24E+012.82E+02 - 46L2 73.003.74E-033.26E-011.37E+013.60E+026.13E-031.68E-013.46E+006.31E+01 - 46L2 86.002.10E-031.48E-015.31E+001.21E+023.71E-038.75E-021.57E+002.51E+01 - 46L2 103.001.11E-036.28E-021.89E+003.69E+012.14E-034.29E-026.63E-019.11E+00 - 46L2 126.005.45E-042.43E-026.02E-019.90E+001.15E-031.94E-022.54E-012.96E+00 - 46L2 155.002.63E-049.25E-031.89E-012.60E+006.15E-048.66E-039.57E-029.42E-01 - 46L2 220.007.84E-051.87E-032.77E-022.87E-012.13E-042.25E-031.88E-021.40E-01 - 46L2 305.002.60E-054.42E-044.93E-033.94E-028.01E-056.56E-044.28E-032.50E-02 - 46L2 390.001.16E-051.55E-041.41E-039.34E-033.86E-052.65E-041.45E-037.12E-03 - 46L2 500.005.29E-065.58E-054.17E-042.31E-031.86E-051.08E-045.00E-042.08E-03 - 46L2 730.001.70E-061.28E-057.23E-053.13E-046.21E-062.87E-051.06E-043.51E-04 - 46L21000.006.80E-074.09E-061.87E-056.72E-052.54E-069.95E-063.11E-058.72E-05 - 46L21500.002.35E-071.05E-063.78E-061.10E-058.22E-072.70E-067.05E-061.65E-05 - 46L3 4.177.40E+018.21E+055.74E+085.57E+101.17E+013.82E+051.61E+096.83E+11 - 46L3 4.874.71E+013.74E+052.26E+082.67E+107.26E+001.76E+055.62E+082.07E+11 - 46L3 6.172.33E+011.13E+055.43E+077.04E+093.50E+005.41E+041.14E+083.37E+10 - 46L3 9.376.40E+001.36E+044.34E+065.18E+089.66E-016.74E+036.93E+061.40E+09 - 46L3 13.172.14E+002.42E+035.51E+055.51E+073.39E-011.24E+037.33E+051.07E+08 - 46L3 17.009.23E-016.65E+021.17E+059.90E+061.55E-013.48E+021.39E+051.60E+07 - 46L3 23.003.33E-011.44E+021.87E+041.26E+066.11E-027.74E+011.98E+041.72E+06 - 46L3 31.001.19E-013.20E+013.05E+031.62E+052.44E-021.76E+012.98E+031.95E+05 - 46L3 43.003.77E-026.17E+004.18E+021.69E+048.96E-033.51E+003.86E+021.87E+04 - 46L3 56.001.47E-021.63E+008.42E+012.70E+033.99E-039.59E-017.62E+012.89E+03 - 46L3 73.005.69E-034.33E-011.69E+014.29E+021.78E-032.63E-011.53E+014.58E+02 - 46L3 86.003.15E-031.91E-016.29E+001.38E+021.08E-031.19E-015.76E+001.49E+02 - 46L3 103.001.65E-037.77E-022.12E+003.95E+016.23E-044.99E-021.99E+004.37E+01 - 46L3 126.007.98E-042.86E-026.33E-019.85E+003.38E-041.90E-026.14E-011.13E+01 - 46L3 155.003.82E-041.03E-021.84E-012.38E+001.81E-047.16E-031.87E-012.90E+00 - 46L3 220.001.12E-041.90E-032.34E-022.21E-016.41E-051.41E-032.60E-023.04E-01 - 46L3 305.003.73E-054.09E-043.57E-032.53E-022.47E-053.21E-044.37E-033.98E-02 - 46L3 390.001.67E-051.34E-049.05E-045.19E-031.23E-051.09E-041.18E-039.02E-03 - 46L3 500.007.75E-064.56E-052.38E-041.11E-036.21E-063.81E-053.25E-042.10E-03 - 46L3 730.002.63E-069.88E-063.56E-051.23E-042.30E-068.41E-064.92E-052.49E-04 - 46L31000.001.16E-063.14E-068.52E-062.33E-051.07E-062.68E-061.11E-054.61E-05 - 46L31500.004.54E-078.66E-071.71E-063.55E-064.37E-077.49E-071.94E-066.00E-06 - 46M1 1.671.80E+015.75E+042.48E+063.57E+091.29E+039.31E+061.09E+103.37E+12 - 46M1 2.679.41E+007.58E+031.46E+063.64E+073.16E+029.32E+055.46E+081.30E+11 - 46M1 4.673.55E+004.49E+021.75E+051.65E+075.92E+016.20E+041.71E+072.69E+09 - 46M1 8.671.03E+006.54E+006.88E+038.83E+059.30E+003.28E+034.23E+054.01E+07 - 46M1 15.672.77E-019.40E-011.33E+022.13E+041.59E+002.15E+021.42E+048.01E+05 - 46M1 25.009.09E-027.06E-013.58E+006.38E+023.96E-012.67E+011.08E+033.99E+04 - 46M1 40.002.79E-022.63E-011.39E+001.62E+019.91E-023.53E+008.93E+012.14E+03 - 46M1 52.001.40E-021.31E-018.11E-015.14E+004.60E-021.18E+002.31E+014.37E+02 - 46M1 70.006.33E-035.50E-023.52E-012.09E+001.95E-023.53E-015.21E+007.51E+01 - 46M1 103.002.20E-031.63E-029.59E-025.34E-016.50E-037.78E-028.03E-018.20E+00 - 46M1 150.007.77E-044.74E-032.39E-021.16E-012.29E-031.90E-021.41E-011.04E+00 - 46M1 280.001.42E-046.03E-042.24E-038.06E-034.36E-042.16E-039.72E-034.34E-02 - 46M1 500.003.30E-051.03E-042.86E-047.78E-041.02E-043.49E-041.06E-033.16E-03 - 46M2 1.564.22E+011.24E+074.56E+102.34E+131.50E+023.15E+051.22E+082.33E+10 - 46M2 2.561.59E+011.03E+061.88E+097.40E+113.34E+013.47E+041.03E+071.97E+09 - 46M2 4.564.02E+005.64E+044.92E+071.32E+105.79E+002.86E+035.81E+058.85E+07 - 46M2 8.567.28E-012.41E+031.00E+061.68E+088.49E-012.02E+022.57E+042.66E+06 - 46M2 15.561.22E-011.23E+022.64E+042.72E+061.37E-011.72E+011.35E+039.02E+04 - 46M2 25.002.69E-021.18E+011.52E+031.05E+053.21E-022.49E+001.32E+026.02E+03 - 46M2 40.005.63E-031.17E+009.30E+014.25E+037.61E-033.73E-011.32E+014.08E+02 - 46M2 52.002.30E-033.27E-011.98E+017.18E+023.41E-031.30E-013.66E+009.08E+01 - 46M2 70.008.22E-047.79E-023.49E+009.72E+011.37E-033.96E-028.64E-011.66E+01 - 46M2 103.002.13E-041.23E-023.77E-017.47E+004.22E-048.57E-031.34E-011.87E+00 - 46M2 150.005.73E-052.12E-034.52E-026.47E-011.35E-041.96E-032.25E-022.29E-01 - 46M2 280.006.80E-061.27E-041.54E-031.32E-022.06E-051.80E-041.26E-037.89E-03 - 46M2 500.001.04E-061.11E-058.34E-054.64E-043.70E-062.16E-051.00E-044.18E-04 - 46M3 1.538.86E+012.39E+079.00E+104.61E+134.55E+011.16E+073.59E+111.09E+15 - 46M3 2.533.14E+011.90E+063.49E+091.36E+129.85E+009.38E+051.11E+101.58E+13 - 46M3 4.537.55E+001.01E+058.69E+072.30E+101.67E+005.12E+042.06E+081.30E+11 - 46M3 8.531.30E+004.12E+031.68E+062.77E+082.41E-012.18E+032.86E+068.27E+08 - 46M3 15.532.09E-012.01E+024.20E+044.24E+063.87E-021.10E+025.42E+047.95E+06 - 46M3 25.004.44E-021.83E+012.28E+031.53E+059.06E-031.03E+012.49E+032.21E+05 - 46M3 40.008.98E-031.73E+001.30E+025.78E+032.16E-031.01E+001.28E+027.04E+03 - 46M3 52.003.60E-034.64E-012.64E+019.26E+029.74E-042.78E-012.51E+011.07E+03 - 46M3 70.001.26E-031.05E-014.36E+001.17E+023.95E-046.51E-024.10E+001.32E+02 - 46M3 103.003.19E-041.54E-024.24E-017.99E+001.23E-041.01E-024.10E-019.27E+00 - 46M3 150.008.41E-052.41E-034.47E-025.99E-013.96E-051.68E-034.62E-027.51E-01 - 46M3 280.009.82E-061.21E-041.16E-038.93E-036.29E-069.47E-051.41E-031.39E-02 - 46M3 500.001.55E-069.10E-064.78E-052.23E-041.24E-067.65E-066.59E-054.29E-04 - 46M4 1.341.58E+026.30E+055.96E+101.21E+151.08E+012.75E+054.45E+097.37E+12 - 46M4 2.342.42E+013.60E+041.17E+099.55E+121.70E+001.66E+041.07E+081.13E+11 - 46M4 4.342.56E+001.51E+031.49E+074.77E+102.10E-017.35E+021.83E+061.14E+09 - 46M4 8.342.02E-015.11E+011.46E+051.89E+082.15E-022.68E+012.67E+049.14E+06 - 46M4 15.341.64E-022.06E+001.95E+031.15E+062.39E-031.21E+005.47E+021.06E+05 - 46M4 25.002.02E-031.50E-016.17E+012.01E+043.94E-041.01E-012.50E+013.04E+03 - 46M4 40.002.54E-041.17E-022.26E+004.25E+026.69E-059.20E-031.32E+001.02E+02 - 46M4 52.007.85E-052.81E-033.61E-015.01E+012.45E-052.42E-032.58E-011.56E+01 - 46M4 70.002.06E-055.55E-044.56E-024.53E+007.79E-065.34E-044.11E-021.88E+00 - 46M4 103.003.58E-066.80E-053.20E-032.07E-011.73E-067.54E-053.85E-031.23E-01 - 46M4 150.006.64E-079.04E-062.52E-041.08E-023.99E-071.13E-053.93E-048.95E-03 - 46M4 280.004.69E-083.53E-074.33E-069.33E-053.49E-085.06E-079.57E-061.28E-04 - 46M4 500.004.76E-092.08E-081.30E-071.46E-063.76E-093.04E-083.40E-072.93E-06 - 46M5 1.332.33E+028.62E+059.31E+101.80E+156.72E+003.39E+042.12E+101.86E+15 - 46M5 2.333.52E+014.86E+041.81E+091.39E+131.07E+002.08E+034.24E+081.27E+13 - 46M5 4.333.68E+002.02E+032.27E+076.83E+101.35E-019.54E+015.60E+065.27E+10 - 46M5 8.332.86E-016.73E+012.19E+052.65E+081.43E-023.70E+005.82E+041.71E+08 - 46M5 15.332.29E-022.66E+002.87E+031.57E+061.67E-031.81E-018.28E+028.86E+05 - 46M5 25.002.79E-031.90E-018.88E+012.66E+042.84E-041.62E-022.76E+011.41E+04 - 46M5 40.003.47E-041.45E-023.15E+005.37E+025.01E-051.61E-031.06E+002.80E+02 - 46M5 52.001.07E-043.40E-034.91E-016.14E+011.88E-054.46E-041.74E-013.25E+01 - 46M5 70.002.78E-056.55E-046.01E-025.31E+006.16E-061.05E-042.26E-022.92E+00 - 46M5 103.004.87E-067.76E-053.98E-032.24E-011.44E-061.62E-051.64E-031.34E-01 - 46M5 150.009.19E-079.92E-062.92E-041.06E-023.50E-072.71E-061.32E-047.03E-03 - 46M5 280.006.47E-083.66E-074.30E-067.33E-053.55E-081.55E-072.30E-066.03E-05 - 46M5 500.005.96E-092.26E-081.11E-078.95E-074.82E-091.31E-087.13E-088.81E-07 - 46N+ 50.003.91E-031.89E-011.06E+014.11E+021.05E-023.67E-011.32E+014.53E+02 - 46N+ 70.001.49E-034.10E-021.45E+003.98E+013.97E-038.88E-022.04E+004.69E+01 - 46N+ 100.005.36E-048.71E-031.86E-013.52E+001.43E-032.08E-023.09E-014.72E+00 - 46N+ 150.001.67E-041.64E-032.00E-022.43E-014.61E-044.33E-034.08E-024.01E-01 - 46N+ 200.007.39E-055.35E-044.51E-033.96E-022.11E-041.50E-031.05E-027.71E-02 - 46N+ 500.006.60E-062.27E-057.64E-052.66E-042.00E-057.11E-052.32E-047.64E-04 - 47K 26.515.39E+002.44E+012.34E+011.13E+011.74E+015.48E+022.86E+033.72E+03 - 47K 27.215.03E+002.54E+013.82E+013.68E+011.61E+014.94E+022.88E+035.85E+03 - 47K 28.514.45E+002.63E+016.34E+011.17E+021.40E+014.13E+022.80E+039.06E+03 - 47K 31.713.37E+002.51E+011.04E+023.76E+021.02E+012.74E+022.32E+031.28E+04 - 47K 35.512.49E+002.14E+011.18E+025.91E+027.34E+001.78E+021.70E+031.23E+04 - 47K 40.001.81E+001.69E+011.09E+026.58E+025.17E+001.12E+021.15E+039.69E+03 - 47K 46.001.24E+001.20E+018.59E+015.80E+023.43E+006.59E+016.92E+026.34E+03 - 47K 54.007.94E-017.77E+005.78E+014.11E+022.15E+003.58E+013.70E+023.49E+03 - 47K 66.004.53E-014.27E+003.15E+012.23E+021.20E+001.68E+011.63E+021.50E+03 - 47K 79.002.73E-012.41E+001.71E+011.16E+027.16E-018.56E+007.69E+016.62E+02 - 47K 96.001.57E-011.27E+008.38E+005.30E+014.12E-014.17E+003.38E+012.65E+02 - 47K 109.001.09E-018.30E-015.17E+003.09E+012.88E-012.63E+001.97E+011.45E+02 - 47K 126.007.21E-025.07E-012.94E+001.64E+011.92E-011.56E+001.07E+017.20E+01 - 47K 149.004.47E-022.85E-011.51E+007.74E+001.21E-018.63E-015.30E+003.22E+01 - 47K 175.002.83E-021.64E-017.97E-013.73E+007.84E-024.94E-012.73E+001.49E+01 - 47K 240.001.17E-025.56E-022.27E-018.91E-013.39E-021.70E-017.63E-013.39E+00 - 47K 325.005.19E-032.04E-027.04E-022.34E-011.55E-026.41E-022.36E-018.61E-01 - 47K 420.002.69E-039.13E-032.75E-028.00E-028.19E-032.91E-029.20E-022.85E-01 - 47K 530.001.53E-034.62E-031.24E-023.22E-024.65E-031.46E-024.07E-021.10E-01 - 47K 760.006.91E-041.78E-034.09E-039.04E-032.00E-035.35E-031.25E-022.80E-02 - 47K 1050.003.65E-048.39E-041.71E-033.34E-039.69E-042.29E-034.69E-039.15E-03 - 47K 1300.002.48E-045.33E-041.02E-031.84E-036.10E-041.35E-032.56E-034.62E-03 - 47K 1550.001.84E-043.75E-046.81E-041.17E-034.22E-048.87E-041.59E-032.72E-03 - 47L1 4.811.64E+015.41E+037.79E+052.41E+073.25E+022.97E+054.56E+071.83E+09 - 47L1 5.511.30E+012.46E+035.02E+052.57E+072.16E+021.55E+052.14E+071.07E+09 - 47L1 6.818.80E+006.51E+021.96E+051.48E+071.15E+025.68E+046.56E+063.75E+08 - 47L1 10.014.09E+003.18E+012.33E+042.34E+063.62E+019.38E+037.76E+054.30E+07 - 47L1 13.812.05E+001.87E+002.80E+033.29E+051.39E+012.14E+031.33E+056.35E+06 - 47L1 18.001.12E+003.31E+003.63E+025.27E+046.29E+006.48E+023.16E+041.28E+06 - 47L1 24.005.69E-013.41E+002.83E+015.79E+032.68E+001.82E+026.81E+032.25E+05 - 47L1 32.002.80E-012.25E+007.32E+004.99E+021.14E+005.23E+011.51E+033.97E+04 - 47L1 44.001.24E-011.11E+005.57E+004.44E+014.48E-011.36E+012.93E+025.96E+03 - 47L1 57.006.28E-025.54E-013.29E+001.82E+012.10E-014.69E+007.96E+011.30E+03 - 47L1 74.003.11E-022.58E-011.58E+008.86E+009.91E-021.64E+002.20E+012.89E+02 - 47L1 87.002.00E-021.56E-019.40E-015.24E+006.24E-028.71E-011.01E+011.15E+02 - 47L1 104.001.22E-028.88E-025.09E-012.75E+003.77E-024.37E-014.34E+004.25E+01 - 47L1 127.007.05E-034.63E-022.47E-011.26E+002.15E-022.06E-011.72E+001.42E+01 - 47L1 155.004.06E-032.40E-021.18E-015.56E-011.24E-029.90E-026.99E-014.90E+00 - 47L1 220.001.55E-037.52E-033.12E-021.26E-014.86E-032.87E-021.53E-018.09E-01 - 47L1 305.006.50E-042.61E-039.19E-033.15E-022.07E-039.59E-034.00E-021.65E-01 - 47L1 390.003.47E-041.21E-033.80E-031.15E-021.11E-034.38E-031.54E-025.36E-02 - 47L1 500.001.90E-045.87E-041.63E-034.41E-036.05E-042.05E-036.19E-031.83E-02 - 47L1 730.008.16E-052.15E-045.08E-041.16E-032.47E-046.93E-041.70E-034.04E-03 - 47L11000.004.36E-051.03E-042.16E-044.36E-041.21E-042.98E-046.36E-041.30E-03 - 47L11500.002.11E-054.41E-058.18E-051.44E-045.05E-051.09E-042.01E-043.52E-04 - 47L2 4.523.35E+013.55E+052.22E+081.91E+103.60E+011.28E+048.29E+052.39E+07 - 47L2 5.222.22E+011.72E+059.45E+071.00E+102.31E+017.23E+035.79E+052.63E+07 - 47L2 6.521.16E+015.61E+042.52E+073.00E+091.17E+012.99E+032.69E+051.65E+07 - 47L2 9.723.47E+007.56E+032.33E+062.64E+083.42E+006.08E+025.22E+043.48E+06 - 47L2 13.521.23E+001.45E+033.25E+053.14E+071.24E+001.62E+021.19E+047.15E+05 - 47L2 18.004.89E-013.49E+025.91E+044.77E+065.13E-015.13E+013.16E+031.63E+05 - 47L2 24.001.89E-018.38E+011.07E+046.99E+052.12E-011.62E+018.12E+023.48E+04 - 47L2 32.007.16E-022.03E+011.94E+031.01E+058.74E-025.10E+002.06E+027.16E+03 - 47L2 44.002.40E-024.25E+002.96E+021.19E+043.29E-021.42E+004.44E+011.21E+03 - 47L2 57.009.76E-031.21E+006.49E+012.10E+031.48E-025.06E-011.28E+012.83E+02 - 47L2 74.003.91E-033.42E-011.42E+013.68E+026.67E-031.79E-013.63E+006.51E+01 - 47L2 87.002.21E-031.58E-015.59E+001.26E+024.07E-039.45E-021.67E+002.62E+01 - 47L2 104.001.18E-036.75E-022.01E+003.89E+012.36E-034.67E-027.13E-019.65E+00 - 47L2 127.005.85E-042.63E-026.49E-011.06E+011.28E-032.13E-022.76E-013.18E+00 - 47L2 155.002.92E-041.04E-022.13E-012.93E+007.01E-049.83E-031.08E-011.06E+00 - 47L2 220.008.70E-052.11E-033.14E-023.24E-012.43E-042.56E-032.13E-021.58E-01 - 47L2 305.002.90E-055.01E-045.60E-034.46E-029.16E-057.48E-044.87E-032.83E-02 - 47L2 390.001.30E-051.76E-041.60E-031.06E-024.42E-053.02E-041.65E-038.08E-03 - 47L2 500.005.92E-066.33E-054.75E-042.63E-032.13E-051.23E-045.71E-042.37E-03 - 47L2 730.001.88E-061.45E-058.26E-053.57E-047.13E-063.29E-051.21E-044.00E-04 - 47L21000.007.84E-074.65E-062.14E-057.68E-052.91E-061.14E-053.56E-059.99E-05 - 47L21500.002.67E-071.20E-064.33E-061.26E-059.45E-073.11E-068.10E-061.90E-05 - 47L3 4.356.85E+017.37E+054.93E+084.50E+101.14E+013.60E+051.46E+095.92E+11 - 47L3 5.054.44E+013.46E+052.01E+082.23E+107.17E+001.71E+055.28E+081.87E+11 - 47L3 6.352.25E+011.08E+055.05E+076.23E+093.54E+005.45E+041.12E+083.23E+10 - 47L3 9.556.38E+001.37E+044.28E+064.93E+081.01E+007.12E+037.30E+061.44E+09 - 47L3 13.352.18E+002.51E+035.62E+055.46E+073.59E-011.34E+037.97E+051.15E+08 - 47L3 18.008.14E-015.53E+029.17E+047.33E+061.43E-013.03E+021.14E+051.24E+07 - 47L3 24.003.09E-011.29E+021.60E+041.03E+065.92E-027.27E+011.78E+041.48E+06 - 47L3 32.001.15E-013.03E+012.79E+031.43E+052.45E-021.75E+012.87E+031.83E+05 - 47L3 44.003.76E-026.10E+004.04E+021.59E+049.23E-033.63E+003.93E+021.86E+04 - 47L3 57.001.50E-021.66E+008.41E+012.64E+034.18E-031.02E+008.00E+012.99E+03 - 47L3 74.005.89E-034.50E-011.73E+014.32E+021.88E-032.84E-011.65E+014.86E+02 - 47L3 87.003.30E-032.00E-016.52E+001.41E+021.15E-031.30E-016.27E+001.60E+02 - 47L3 104.001.74E-038.25E-022.23E+004.10E+016.70E-045.49E-022.18E+004.76E+01 - 47L3 127.008.50E-043.07E-026.72E-011.03E+013.66E-042.11E-026.80E-011.25E+01 - 47L3 155.004.19E-041.15E-022.05E-012.64E+002.01E-048.23E-032.16E-013.35E+00 - 47L3 220.001.24E-042.12E-032.61E-022.46E-017.10E-051.61E-033.01E-023.52E-01 - 47L3 305.004.11E-054.56E-043.99E-032.82E-022.74E-053.66E-045.03E-034.59E-02 - 47L3 390.001.85E-051.50E-041.01E-035.80E-031.36E-051.24E-041.36E-031.04E-02 - 47L3 500.008.60E-065.08E-052.66E-041.24E-036.88E-064.32E-053.73E-042.41E-03 - 47L3 730.002.91E-061.10E-053.97E-051.37E-042.55E-069.48E-065.62E-052.85E-04 - 47L31000.001.26E-063.50E-069.51E-062.61E-051.18E-063.01E-061.27E-055.28E-05 - 47L31500.004.97E-079.68E-071.90E-063.97E-064.82E-078.36E-072.19E-066.83E-06 - 47M1 1.721.72E+015.55E+042.31E+063.36E+091.34E+039.50E+061.10E+103.28E+12 - 47M1 2.729.14E+007.75E+031.37E+063.57E+073.38E+021.00E+065.84E+081.35E+11 - 47M1 4.723.52E+004.96E+021.77E+051.55E+076.48E+016.89E+041.90E+072.95E+09 - 47M1 8.721.04E+008.72E+007.56E+039.17E+051.03E+013.72E+034.80E+054.50E+07 - 47M1 15.722.83E-018.00E-011.64E+022.41E+041.78E+002.44E+021.62E+049.06E+05 - 47M1 25.009.43E-026.62E-014.50E+007.98E+024.47E-013.07E+011.25E+034.58E+04 - 47M1 40.002.91E-022.59E-011.27E+001.99E+011.12E-014.03E+001.02E+022.44E+03 - 47M1 52.001.47E-021.31E-017.64E-015.21E+005.19E-021.35E+002.63E+014.96E+02 - 47M1 70.006.66E-035.58E-023.42E-012.00E+002.19E-024.01E-015.91E+008.51E+01 - 47M1 103.002.33E-031.68E-029.61E-025.25E-017.30E-038.79E-029.07E-019.26E+00 - 47M1 150.008.26E-044.94E-032.45E-021.17E-012.57E-032.14E-021.59E-011.17E+00 - 47M1 280.001.52E-046.38E-042.34E-038.40E-034.87E-042.42E-031.09E-024.85E-02 - 47M1 500.003.55E-051.10E-043.06E-048.29E-041.14E-043.89E-041.18E-033.51E-03 - 47M2 1.604.03E+011.22E+074.41E+102.18E+131.57E+023.23E+051.20E+082.17E+10 - 47M2 2.601.57E+011.06E+061.93E+097.44E+113.61E+013.71E+041.08E+071.97E+09 - 47M2 4.604.10E+006.08E+045.29E+071.39E+106.39E+003.14E+036.26E+059.28E+07 - 47M2 8.607.61E-012.65E+031.10E+061.82E+089.52E-012.26E+022.83E+042.87E+06 - 47M2 15.601.30E-011.37E+022.94E+043.00E+061.55E-011.94E+011.51E+039.91E+04 - 47M2 25.002.92E-021.33E+011.73E+031.18E+053.67E-022.84E+001.49E+026.74E+03 - 47M2 40.006.17E-031.33E+001.06E+024.80E+038.72E-034.26E-011.49E+014.59E+02 - 47M2 52.002.53E-033.71E-012.25E+018.13E+023.91E-031.48E-014.16E+001.02E+02 - 47M2 70.009.09E-048.85E-023.97E+001.10E+021.58E-034.53E-029.82E-011.88E+01 - 47M2 103.002.38E-041.41E-024.30E-018.50E+004.86E-049.82E-031.53E-012.12E+00 - 47M2 150.006.45E-052.42E-035.17E-027.39E-011.55E-042.26E-032.57E-022.61E-01 - 47M2 280.007.69E-061.46E-041.77E-031.51E-022.38E-052.08E-041.45E-039.04E-03 - 47M2 500.001.20E-061.28E-059.62E-055.35E-044.30E-062.50E-051.16E-044.82E-04 - 47M3 1.578.53E+012.36E+078.75E+104.34E+134.70E+011.20E+073.68E+111.11E+15 - 47M3 2.573.11E+011.97E+063.61E+091.37E+121.05E+011.02E+061.22E+101.73E+13 - 47M3 4.577.70E+001.08E+059.34E+072.42E+101.81E+005.77E+042.37E+081.51E+11 - 47M3 8.571.36E+004.52E+031.85E+062.99E+082.66E-012.50E+033.37E+069.76E+08 - 47M3 15.572.22E-012.23E+024.66E+044.66E+064.29E-021.28E+026.43E+049.45E+06 - 47M3 25.004.80E-022.06E+012.57E+031.72E+051.01E-021.21E+012.99E+032.65E+05 - 47M3 40.009.80E-031.94E+001.47E+026.47E+032.42E-031.19E+001.52E+028.41E+03 - 47M3 52.003.95E-035.22E-012.98E+011.04E+031.09E-033.26E-012.99E+011.28E+03 - 47M3 70.001.39E-031.18E-014.92E+001.31E+024.42E-047.63E-024.87E+001.57E+02 - 47M3 103.003.52E-041.73E-024.79E-018.99E+001.37E-041.18E-024.84E-011.09E+01 - 47M3 150.009.31E-052.72E-035.06E-026.75E-014.44E-051.96E-035.43E-028.84E-01 - 47M3 280.001.09E-051.37E-041.32E-031.01E-027.07E-061.10E-041.65E-031.62E-02 - 47M3 500.001.73E-061.03E-055.41E-052.53E-041.39E-068.79E-067.66E-055.00E-04 - 47M4 1.371.58E+026.34E+055.99E+101.21E+151.14E+012.92E+054.69E+097.56E+12 - 47M4 2.372.53E+013.83E+041.27E+091.04E+131.87E+001.86E+041.20E+081.25E+11 - 47M4 4.372.78E+001.66E+031.69E+075.47E+102.36E-018.51E+022.14E+061.31E+09 - 47M4 8.372.25E-015.76E+011.70E+052.23E+082.46E-023.16E+013.18E+041.08E+07 - 47M4 15.371.86E-022.35E+002.30E+031.38E+062.78E-031.44E+006.57E+021.26E+05 - 47M4 25.002.33E-031.75E-017.39E+012.44E+044.63E-041.22E-013.05E+013.69E+03 - 47M4 40.002.95E-041.38E-022.71E+005.15E+027.90E-051.11E-021.61E+001.25E+02 - 47M4 52.009.18E-053.30E-034.33E-016.08E+012.90E-052.93E-033.15E-011.90E+01 - 47M4 70.002.42E-056.55E-045.48E-025.50E+009.24E-066.47E-045.01E-022.29E+00 - 47M4 103.004.25E-068.07E-053.85E-032.51E-012.06E-069.14E-054.69E-031.50E-01 - 47M4 150.007.85E-071.08E-053.03E-041.31E-024.76E-071.37E-054.80E-041.09E-02 - 47M4 280.005.22E-084.26E-075.21E-061.14E-044.18E-086.16E-071.17E-051.57E-04 - 47M4 500.005.02E-092.51E-081.56E-071.79E-064.51E-093.70E-084.17E-073.59E-06 - 47M5 1.372.33E+028.65E+059.39E+101.81E+157.09E+003.56E+042.24E+101.96E+15 - 47M5 2.373.68E+015.14E+041.96E+091.52E+131.17E+002.30E+034.81E+081.46E+13 - 47M5 4.373.99E+002.21E+032.58E+077.83E+101.51E-011.09E+026.64E+066.40E+10 - 47M5 8.373.18E-017.53E+012.55E+053.12E+081.63E-024.29E+007.07E+042.13E+08 - 47M5 15.372.60E-023.02E+003.39E+031.87E+061.92E-032.11E-011.02E+031.12E+06 - 47M5 25.003.21E-032.20E-011.07E+023.22E+043.32E-041.92E-023.44E+011.79E+04 - 47M5 40.004.03E-041.68E-023.78E+006.50E+025.88E-051.91E-031.32E+003.55E+02 - 47M5 52.001.25E-043.97E-035.90E-017.43E+012.21E-055.28E-042.16E-014.11E+01 - 47M5 70.003.27E-057.69E-047.22E-026.42E+007.26E-061.24E-042.81E-023.68E+00 - 47M5 103.005.74E-069.12E-054.79E-032.72E-011.70E-061.93E-052.03E-031.68E-01 - 47M5 150.001.07E-061.17E-053.51E-041.28E-024.15E-073.22E-061.63E-048.78E-03 - 47M5 280.007.49E-084.44E-075.16E-068.88E-054.21E-081.84E-072.82E-067.50E-05 - 47M5 500.008.28E-092.73E-081.36E-071.09E-065.71E-091.56E-088.64E-081.09E-06 - 47N+ 50.004.42E-032.17E-011.23E+014.79E+021.28E-024.50E-011.61E+015.58E+02 - 47N+ 70.001.70E-034.69E-021.68E+004.64E+014.81E-031.08E-012.49E+005.74E+01 - 47N+ 100.006.11E-049.96E-032.15E-014.09E+001.73E-032.54E-023.76E-015.75E+00 - 47N+ 150.001.92E-041.88E-032.31E-022.82E-015.58E-045.26E-034.95E-024.86E-01 - 47N+ 200.008.51E-056.13E-045.20E-034.60E-022.55E-041.82E-031.28E-029.33E-02 - 47N+ 500.007.68E-062.63E-058.86E-053.10E-042.41E-058.56E-052.80E-049.19E-04 - 48K 27.714.93E+002.12E+011.90E+018.38E+001.69E+015.06E+022.52E+033.07E+03 - 48K 28.414.61E+002.21E+013.08E+012.70E+011.57E+014.58E+022.53E+034.79E+03 - 48K 29.714.11E+002.29E+015.10E+018.62E+011.37E+013.86E+022.47E+037.44E+03 - 48K 32.913.14E+002.21E+018.47E+012.82E+021.01E+012.61E+022.08E+031.07E+04 - 48K 36.712.35E+001.90E+019.76E+014.56E+027.36E+001.71E+021.55E+031.05E+04 - 48K 41.001.75E+001.54E+019.28E+015.22E+025.32E+001.12E+021.09E+038.60E+03 - 48K 47.001.20E+001.11E+017.50E+014.77E+023.56E+006.66E+016.68E+025.80E+03 - 48K 55.007.82E-017.31E+005.18E+013.50E+022.25E+003.66E+013.64E+023.28E+03 - 48K 67.004.51E-014.09E+002.90E+011.97E+021.27E+001.74E+011.64E+021.45E+03 - 48K 80.002.74E-012.34E+001.60E+011.05E+027.63E-018.97E+007.84E+016.55E+02 - 48K 97.001.59E-011.25E+008.00E+004.92E+014.41E-014.41E+003.49E+012.67E+02 - 48K 110.001.11E-018.22E-014.98E+002.91E+013.09E-012.79E+002.05E+011.47E+02 - 48K 127.007.37E-025.06E-012.87E+001.56E+012.07E-011.66E+001.12E+017.40E+01 - 48K 150.004.59E-022.86E-011.49E+007.48E+001.31E-019.24E-015.59E+003.34E+01 - 48K 175.002.97E-021.69E-018.11E-013.74E+008.62E-025.41E-012.96E+001.60E+01 - 48K 240.001.23E-025.77E-022.33E-019.06E-013.72E-021.86E-018.29E-013.65E+00 - 48K 325.005.46E-032.13E-027.29E-022.41E-011.70E-027.00E-022.57E-019.31E-01 - 48K 420.002.84E-039.58E-032.87E-028.30E-028.95E-033.18E-021.00E-013.09E-01 - 48K 530.001.62E-034.87E-031.30E-023.37E-025.08E-031.60E-024.42E-021.19E-01 - 48K 760.007.33E-041.89E-034.32E-039.55E-032.17E-035.82E-031.35E-023.03E-02 - 48K 1050.003.87E-048.91E-041.82E-033.55E-031.05E-032.49E-035.09E-039.92E-03 - 48K 1300.002.63E-045.67E-041.08E-031.97E-036.60E-041.47E-032.78E-035.01E-03 - 48K 1550.001.95E-043.99E-047.26E-041.25E-034.55E-049.61E-041.73E-032.94E-03 - 48L1 5.021.51E+014.86E+036.52E+051.85E+073.18E+022.78E+054.06E+071.53E+09 - 48L1 5.721.20E+012.29E+034.34E+052.04E+072.15E+021.49E+051.96E+079.25E+08 - 48L1 7.028.29E+006.42E+021.78E+051.25E+071.17E+025.63E+046.28E+063.40E+08 - 48L1 10.223.95E+003.69E+012.30E+042.17E+063.80E+019.72E+037.83E+054.18E+07 - 48L1 14.022.01E+001.94E+002.98E+033.27E+051.48E+012.28E+031.38E+056.43E+06 - 48L1 18.001.14E+002.67E+004.64E+026.02E+047.02E+007.36E+023.57E+041.43E+06 - 48L1 24.005.82E-013.06E+003.93E+017.00E+032.98E+002.06E+027.68E+032.51E+05 - 48L1 32.002.88E-012.13E+006.93E+006.46E+021.27E+005.91E+011.69E+034.43E+04 - 48L1 44.001.28E-011.08E+004.99E+005.18E+014.99E-011.53E+013.29E+026.64E+03 - 48L1 57.006.51E-025.51E-013.08E+001.74E+012.34E-015.27E+008.91E+011.45E+03 - 48L1 74.003.24E-022.59E-011.52E+008.33E+001.10E-011.84E+002.46E+013.21E+02 - 48L1 87.002.09E-021.58E-019.19E-015.00E+006.94E-029.73E-011.13E+011.28E+02 - 48L1 104.001.28E-029.04E-025.04E-012.67E+004.18E-024.88E-014.83E+004.72E+01 - 48L1 127.007.39E-034.75E-022.48E-011.24E+002.39E-022.29E-011.91E+001.58E+01 - 48L1 155.004.27E-032.47E-021.19E-015.55E-011.38E-021.10E-017.75E-015.43E+00 - 48L1 220.001.64E-037.82E-033.21E-021.28E-015.37E-033.18E-021.69E-018.94E-01 - 48L1 305.006.88E-042.73E-039.56E-033.26E-022.29E-031.06E-024.42E-021.82E-01 - 48L1 390.003.68E-041.28E-033.98E-031.21E-021.23E-034.83E-031.70E-025.90E-02 - 48L1 500.002.02E-046.22E-041.72E-034.65E-036.65E-042.26E-036.81E-032.01E-02 - 48L1 730.008.74E-052.29E-045.42E-041.24E-032.71E-047.61E-041.87E-034.44E-03 - 48L11000.004.66E-051.10E-042.31E-044.67E-041.32E-043.27E-046.98E-041.43E-03 - 48L11500.002.27E-054.73E-058.79E-051.55E-045.49E-051.19E-042.19E-043.85E-04 - 48L2 4.733.08E+013.17E+051.88E+081.51E+103.52E+011.19E+047.20E+051.91E+07 - 48L2 5.432.08E+011.58E+058.32E+078.28E+092.31E+016.89E+035.17E+052.17E+07 - 48L2 6.731.12E+015.36E+042.32E+072.62E+091.19E+012.94E+032.50E+051.44E+07 - 48L2 9.933.45E+007.59E+032.29E+062.49E+083.60E+006.23E+025.13E+043.27E+06 - 48L2 13.731.25E+001.50E+033.31E+053.10E+071.33E+001.70E+021.21E+047.03E+05 - 48L2 18.005.23E-013.89E+026.58E+045.22E+065.78E-015.73E+013.47E+031.76E+05 - 48L2 24.002.03E-019.35E+011.19E+047.69E+052.39E-011.81E+018.96E+023.78E+04 - 48L2 32.007.73E-022.26E+012.16E+031.12E+059.86E-025.71E+002.28E+027.84E+03 - 48L2 44.002.61E-024.75E+003.30E+021.32E+043.71E-021.60E+004.94E+011.33E+03 - 48L2 57.001.06E-021.35E+007.26E+012.33E+031.68E-025.69E-011.42E+013.13E+02 - 48L2 74.004.28E-033.83E-011.59E+014.10E+027.55E-032.02E-014.06E+007.23E+01 - 48L2 87.002.43E-031.77E-016.27E+001.41E+024.61E-031.06E-011.87E+002.92E+01 - 48L2 104.001.30E-037.57E-022.26E+004.35E+012.67E-035.27E-028.00E-011.08E+01 - 48L2 127.006.45E-042.96E-027.30E-011.18E+011.46E-032.41E-023.10E-013.55E+00 - 48L2 155.003.23E-041.17E-022.40E-013.29E+007.96E-041.11E-021.22E-011.19E+00 - 48L2 220.009.66E-052.38E-033.55E-023.65E-012.77E-042.90E-032.41E-021.78E-01 - 48L2 305.003.22E-055.65E-046.34E-035.04E-021.04E-048.51E-045.51E-033.20E-02 - 48L2 390.001.45E-051.99E-041.82E-031.20E-025.05E-053.45E-041.87E-039.15E-03 - 48L2 500.006.60E-067.18E-055.40E-042.99E-032.44E-051.41E-046.50E-042.69E-03 - 48L2 730.002.11E-061.65E-059.41E-054.07E-048.16E-063.76E-051.38E-044.56E-04 - 48L21000.008.77E-075.28E-062.44E-058.76E-053.34E-061.31E-054.08E-051.14E-04 - 48L21500.002.94E-071.37E-064.95E-061.45E-051.08E-063.56E-069.29E-062.17E-05 - 48L3 4.546.32E+016.59E+054.21E+083.60E+101.10E+013.37E+051.31E+095.08E+11 - 48L3 5.244.17E+013.18E+051.78E+081.86E+107.06E+001.65E+054.93E+081.69E+11 - 48L3 6.542.16E+011.03E+054.68E+075.47E+093.57E+005.46E+041.10E+083.07E+10 - 48L3 9.746.33E+001.37E+044.20E+064.66E+081.04E+007.48E+037.63E+061.47E+09 - 48L3 13.542.21E+002.59E+035.71E+055.39E+073.79E-011.45E+038.63E+051.22E+08 - 48L3 18.008.68E-016.12E+021.01E+057.98E+061.58E-013.51E+021.34E+051.46E+07 - 48L3 24.003.30E-011.43E+021.77E+041.13E+066.52E-028.40E+012.10E+041.74E+06 - 48L3 32.001.23E-013.36E+013.09E+031.57E+052.70E-022.02E+013.37E+032.14E+05 - 48L3 44.004.05E-026.76E+004.47E+021.74E+041.02E-024.19E+004.60E+022.17E+04 - 48L3 57.001.62E-021.84E+009.32E+012.91E+034.61E-031.17E+009.34E+013.48E+03 - 48L3 74.006.39E-034.99E-011.92E+014.77E+022.08E-033.28E-011.92E+015.64E+02 - 48L3 87.003.58E-032.22E-017.24E+001.56E+021.27E-031.49E-017.28E+001.85E+02 - 48L3 104.001.89E-039.16E-022.47E+004.53E+017.40E-046.31E-022.53E+005.51E+01 - 48L3 127.009.28E-043.41E-027.47E-011.15E+014.05E-042.43E-027.88E-011.44E+01 - 48L3 155.004.58E-041.28E-022.28E-012.93E+002.22E-049.43E-032.50E-013.88E+00 - 48L3 220.001.35E-042.36E-032.90E-022.73E-017.86E-051.84E-033.47E-024.05E-01 - 48L3 305.004.49E-055.07E-044.44E-033.14E-023.03E-054.17E-045.78E-035.27E-02 - 48L3 390.002.03E-051.66E-041.13E-036.45E-031.51E-051.41E-041.55E-031.19E-02 - 48L3 500.009.46E-065.65E-052.97E-041.38E-037.61E-064.89E-054.27E-042.77E-03 - 48L3 730.003.18E-061.22E-054.43E-051.53E-042.81E-061.07E-056.41E-053.26E-04 - 48L31000.001.41E-063.89E-061.06E-052.91E-051.30E-063.37E-061.44E-056.02E-05 - 48L31500.005.57E-071.07E-062.12E-064.42E-065.31E-079.29E-072.46E-067.76E-06 - 48M1 1.771.62E+015.31E+042.16E+063.07E+091.38E+039.56E+061.08E+103.12E+12 - 48M1 2.778.83E+007.85E+031.28E+063.61E+073.59E+021.06E+066.16E+081.39E+11 - 48M1 4.773.48E+005.42E+021.78E+051.44E+077.06E+017.60E+042.09E+073.20E+09 - 48M1 8.771.04E+001.13E+018.23E+039.44E+051.14E+014.18E+035.41E+055.02E+07 - 48M1 15.772.89E-016.85E-011.99E+022.68E+041.98E+002.77E+021.84E+041.02E+06 - 48M1 25.009.76E-026.16E-015.88E+009.82E+025.04E-013.51E+011.43E+035.24E+04 - 48M1 40.003.03E-022.54E-011.17E+002.50E+011.26E-014.60E+001.16E+022.78E+03 - 48M1 52.001.54E-021.31E-017.18E-015.51E+005.83E-021.53E+002.99E+015.63E+02 - 48M1 70.007.00E-035.66E-023.32E-011.94E+002.46E-024.54E-016.69E+009.62E+01 - 48M1 103.002.45E-031.73E-029.61E-025.16E-018.20E-039.92E-021.02E+001.04E+01 - 48M1 150.008.75E-045.13E-032.50E-021.18E-012.88E-032.41E-021.79E-011.32E+00 - 48M1 280.001.62E-046.73E-042.45E-038.74E-035.43E-042.71E-031.21E-025.41E-02 - 48M1 500.003.82E-051.17E-043.26E-048.83E-041.26E-044.33E-041.31E-033.91E-03 - 48M2 1.653.83E+011.18E+074.18E+102.00E+131.63E+023.26E+051.17E+081.98E+10 - 48M2 2.651.54E+011.09E+061.97E+097.36E+113.87E+013.93E+041.11E+071.94E+09 - 48M2 4.654.16E+006.49E+045.64E+071.46E+107.03E+003.43E+036.69E+059.63E+07 - 48M2 8.657.93E-012.90E+031.21E+061.97E+081.06E+002.51E+023.09E+043.08E+06 - 48M2 15.651.38E-011.52E+023.26E+043.30E+061.74E-012.17E+011.67E+031.08E+05 - 48M2 25.003.16E-021.50E+011.95E+031.33E+054.18E-023.22E+001.68E+027.53E+03 - 48M2 40.006.75E-031.50E+001.20E+025.41E+039.96E-034.84E-011.69E+015.14E+02 - 48M2 52.002.78E-034.20E-012.55E+019.17E+024.47E-031.69E-014.70E+001.15E+02 - 48M2 70.001.00E-031.00E-014.51E+001.25E+021.81E-035.17E-021.11E+002.12E+01 - 48M2 103.002.64E-041.60E-024.89E-019.64E+005.58E-041.12E-021.74E-012.40E+00 - 48M2 150.007.19E-052.76E-035.90E-028.41E-011.79E-042.59E-032.93E-022.97E-01 - 48M2 280.008.65E-061.67E-042.03E-031.73E-022.75E-052.40E-041.66E-031.03E-02 - 48M2 500.001.35E-061.46E-051.11E-046.15E-044.98E-062.89E-051.33E-045.55E-04 - 48M3 1.628.15E+012.29E+078.33E+103.98E+134.79E+011.22E+073.69E+111.09E+15 - 48M3 2.623.07E+012.02E+063.68E+091.36E+121.11E+011.10E+061.32E+101.87E+13 - 48M3 4.627.82E+001.15E+059.94E+072.53E+101.96E+006.44E+042.68E+081.71E+11 - 48M3 8.621.41E+004.94E+032.01E+063.22E+082.91E-012.86E+033.93E+061.14E+09 - 48M3 15.622.35E-012.46E+025.14E+045.08E+064.74E-021.48E+027.57E+041.12E+07 - 48M3 25.005.18E-022.31E+012.89E+031.91E+051.13E-021.42E+013.57E+033.18E+05 - 48M3 40.001.06E-022.18E+001.65E+027.22E+032.70E-031.39E+001.81E+021.00E+04 - 48M3 52.004.30E-035.87E-013.35E+011.16E+031.22E-033.82E-013.54E+011.52E+03 - 48M3 70.001.52E-031.33E-015.53E+001.47E+024.94E-048.91E-025.75E+001.85E+02 - 48M3 103.003.88E-041.95E-025.39E-011.01E+011.54E-041.37E-025.70E-011.29E+01 - 48M3 150.001.03E-043.06E-035.70E-027.59E-014.97E-052.28E-036.37E-021.04E+00 - 48M3 280.001.21E-051.54E-041.49E-031.14E-027.92E-061.27E-041.93E-031.90E-02 - 48M3 500.001.94E-061.16E-056.12E-052.86E-041.56E-061.01E-058.89E-055.81E-04 - 48M4 1.411.56E+026.27E+055.87E+101.17E+151.19E+013.04E+054.82E+097.53E+12 - 48M4 2.412.62E+014.01E+041.35E+091.11E+132.03E+002.05E+041.33E+081.36E+11 - 48M4 4.412.99E+001.81E+031.89E+076.19E+102.64E-019.75E+022.47E+061.50E+09 - 48M4 8.412.49E-016.44E+011.96E+052.60E+082.80E-023.71E+013.76E+041.27E+07 - 48M4 15.412.10E-022.68E+002.69E+031.63E+063.20E-031.71E+007.85E+021.50E+05 - 48M4 25.002.68E-032.03E-018.81E+012.95E+045.41E-041.46E-013.69E+014.47E+03 - 48M4 40.003.43E-041.61E-023.23E+006.22E+029.28E-051.34E-021.95E+001.51E+02 - 48M4 52.001.07E-043.87E-035.17E-017.34E+013.42E-053.53E-033.81E-012.30E+01 - 48M4 70.002.82E-057.71E-046.55E-026.64E+001.09E-057.80E-046.08E-022.77E+00 - 48M4 103.004.95E-069.54E-054.60E-033.03E-012.45E-061.10E-045.69E-031.81E-01 - 48M4 150.009.22E-071.28E-053.63E-041.58E-025.65E-071.66E-055.83E-041.33E-02 - 48M4 280.006.34E-085.05E-076.26E-061.38E-044.98E-087.45E-071.43E-051.91E-04 - 48M4 500.005.71E-092.98E-081.87E-072.16E-065.39E-094.48E-085.08E-074.38E-06 - 48M5 1.402.30E+028.53E+059.24E+101.76E+157.39E+003.67E+042.31E+102.00E+15 - 48M5 2.403.82E+015.37E+042.09E+091.62E+131.27E+002.51E+035.36E+081.64E+13 - 48M5 4.404.28E+002.39E+032.89E+078.86E+101.68E-011.23E+027.78E+067.64E+10 - 48M5 8.403.51E-018.38E+012.95E+053.63E+081.85E-024.94E+008.52E+042.63E+08 - 48M5 15.402.92E-023.42E+003.98E+032.22E+062.20E-032.46E-011.24E+031.39E+06 - 48M5 25.003.68E-032.53E-011.27E+023.88E+043.85E-042.26E-024.27E+012.27E+04 - 48M5 40.004.65E-041.95E-024.52E+007.83E+026.86E-052.24E-031.64E+004.47E+02 - 48M5 52.001.44E-044.62E-037.05E-018.95E+012.59E-056.23E-042.68E-015.16E+01 - 48M5 70.003.81E-058.97E-048.63E-027.73E+008.51E-061.47E-043.47E-024.60E+00 - 48M5 103.006.78E-061.07E-045.73E-033.27E-011.99E-062.27E-052.50E-032.09E-01 - 48M5 150.001.29E-061.38E-054.20E-041.54E-024.89E-073.81E-062.00E-041.09E-02 - 48M5 280.009.05E-085.17E-076.17E-061.07E-044.97E-082.18E-073.43E-069.26E-05 - 48M5 500.009.31E-093.26E-081.62E-071.31E-066.75E-091.85E-081.04E-071.34E-06 - 48N+ 50.004.87E-032.49E-011.44E+015.64E+021.50E-025.35E-011.95E+016.82E+02 - 48N+ 70.001.87E-035.36E-021.96E+005.44E+015.63E-031.28E-012.99E+006.95E+01 - 48N+ 100.006.76E-041.13E-022.50E-014.78E+002.03E-032.99E-024.48E-016.90E+00 - 48N+ 150.002.13E-042.12E-032.67E-023.29E-016.50E-046.18E-035.85E-025.78E-01 - 48N+ 200.009.46E-056.88E-045.95E-035.34E-022.96E-042.13E-031.50E-021.10E-01 - 48N+ 500.008.60E-062.95E-051.00E-043.54E-042.79E-059.94E-053.25E-041.07E-03 - 49K 28.944.53E+001.85E+011.56E+016.27E+001.64E+014.69E+022.23E+032.56E+03 - 49K 29.644.24E+001.92E+012.50E+012.01E+011.53E+014.26E+022.24E+033.95E+03 - 49K 30.943.79E+002.00E+014.13E+016.39E+011.34E+013.61E+022.19E+036.13E+03 - 49K 34.142.93E+001.94E+016.92E+012.13E+021.01E+012.48E+021.87E+038.92E+03 - 49K 37.942.21E+001.69E+018.11E+013.52E+027.37E+001.65E+021.42E+039.02E+03 - 49K 42.001.69E+001.40E+017.89E+014.13E+025.47E+001.12E+021.03E+037.63E+03 - 49K 48.001.17E+001.03E+016.54E+013.92E+023.70E+006.73E+016.45E+025.30E+03 - 49K 56.007.70E-016.88E+004.64E+012.98E+022.36E+003.75E+013.58E+023.08E+03 - 49K 68.004.49E-013.91E+002.66E+011.74E+021.34E+001.80E+011.65E+021.40E+03 - 49K 81.002.75E-012.27E+001.50E+019.51E+018.11E-019.39E+007.98E+016.47E+02 - 49K 98.001.60E-011.23E+007.63E+004.55E+014.72E-014.65E+003.59E+012.69E+02 - 49K 111.001.13E-018.13E-014.80E+002.73E+013.32E-012.96E+002.13E+011.50E+02 - 49K 128.007.52E-025.04E-012.79E+001.49E+012.23E-011.77E+001.17E+017.60E+01 - 49K 151.004.71E-022.88E-011.47E+007.22E+001.41E-019.88E-015.89E+003.46E+01 - 49K 180.002.87E-021.58E-017.38E-013.31E+008.77E-025.37E-012.86E+001.50E+01 - 49K 245.001.22E-025.59E-022.21E-018.40E-013.86E-021.90E-018.29E-013.58E+00 - 49K 330.005.53E-032.12E-027.13E-022.32E-011.79E-027.29E-022.63E-019.40E-01 - 49K 420.003.00E-031.00E-022.99E-028.61E-029.77E-033.46E-021.08E-013.34E-01 - 49K 530.001.72E-035.12E-031.36E-023.52E-025.53E-031.74E-024.80E-021.29E-01 - 49K 760.007.76E-042.00E-034.56E-031.01E-022.36E-036.33E-031.47E-023.28E-02 - 49K 1050.004.10E-049.46E-041.93E-033.76E-031.14E-032.71E-035.52E-031.07E-02 - 49K 1300.002.79E-046.02E-041.15E-032.09E-037.13E-041.59E-033.01E-035.42E-03 - 49K 1550.002.06E-044.25E-047.74E-041.34E-034.90E-041.04E-031.87E-033.19E-03 - 49L1 5.241.39E+014.36E+035.49E+051.44E+073.11E+022.59E+053.62E+071.28E+09 - 49L1 5.941.12E+012.13E+033.75E+051.63E+072.14E+021.43E+051.80E+078.01E+08 - 49L1 7.247.82E+006.30E+021.61E+051.05E+071.19E+025.57E+046.00E+063.08E+08 - 49L1 10.443.81E+004.19E+012.26E+042.00E+063.97E+011.00E+047.89E+054.04E+07 - 49L1 14.241.97E+002.23E+003.15E+033.22E+051.57E+012.41E+031.44E+056.48E+06 - 49L1 18.001.17E+002.13E+005.79E+026.80E+047.81E+008.35E+024.03E+041.58E+06 - 49L1 24.005.96E-012.71E+005.36E+018.33E+033.32E+002.33E+028.65E+032.79E+05 - 49L1 32.002.96E-012.00E+007.17E+008.20E+021.42E+006.66E+011.90E+034.93E+04 - 49L1 44.001.32E-011.05E+004.47E+006.30E+015.55E-011.72E+013.68E+027.38E+03 - 49L1 57.006.75E-025.45E-012.86E+001.73E+012.61E-015.91E+009.96E+011.61E+03 - 49L1 74.003.37E-022.60E-011.46E+007.90E+001.22E-012.06E+002.75E+013.57E+02 - 49L1 87.002.18E-021.60E-018.96E-014.77E+007.71E-021.09E+001.25E+011.42E+02 - 49L1 104.001.34E-029.20E-024.98E-012.58E+004.65E-025.44E-015.37E+005.23E+01 - 49L1 127.007.74E-034.86E-022.48E-011.22E+002.65E-022.55E-012.12E+001.75E+01 - 49L1 155.004.48E-032.55E-021.21E-015.53E-011.53E-021.22E-018.60E-016.00E+00 - 49L1 220.001.73E-038.12E-033.29E-021.30E-015.94E-033.52E-021.87E-019.86E-01 - 49L1 305.007.28E-042.86E-039.92E-033.37E-022.52E-031.17E-024.87E-022.01E-01 - 49L1 390.003.91E-041.35E-034.16E-031.26E-021.35E-035.32E-031.87E-026.49E-02 - 49L1 500.002.15E-046.57E-041.81E-034.89E-037.31E-042.49E-037.49E-032.21E-02 - 49L1 730.009.30E-052.44E-045.76E-041.32E-032.96E-048.35E-042.05E-034.87E-03 - 49L11000.004.96E-051.17E-042.47E-045.00E-041.44E-043.58E-047.64E-041.56E-03 - 49L11500.002.41E-055.06E-059.44E-051.67E-045.96E-051.30E-042.40E-044.21E-04 - 49L2 4.942.84E+012.82E+051.60E+081.21E+103.45E+011.10E+046.29E+051.53E+07 - 49L2 5.641.95E+011.45E+057.31E+076.85E+092.30E+016.56E+034.63E+051.79E+07 - 49L2 6.941.07E+015.10E+042.13E+072.28E+091.22E+012.88E+032.32E+051.25E+07 - 49L2 10.143.42E+007.60E+032.23E+062.33E+083.79E+006.36E+025.03E+043.06E+06 - 49L2 13.941.27E+001.55E+033.35E+053.04E+071.42E+001.78E+021.23E+046.89E+05 - 49L2 18.005.59E-014.33E+027.30E+045.70E+066.49E-016.39E+013.80E+031.88E+05 - 49L2 24.002.18E-011.04E+021.32E+048.44E+052.68E-012.02E+019.86E+024.10E+04 - 49L2 32.008.34E-022.52E+012.40E+031.23E+051.11E-016.39E+002.52E+028.56E+03 - 49L2 44.002.82E-025.30E+003.68E+021.46E+044.18E-021.79E+005.48E+011.47E+03 - 49L2 57.001.16E-021.51E+008.10E+012.59E+031.89E-026.39E-011.58E+013.45E+02 - 49L2 74.004.68E-034.28E-011.78E+014.57E+028.54E-032.27E-014.54E+008.01E+01 - 49L2 87.002.66E-031.98E-017.02E+001.57E+025.21E-031.20E-012.09E+003.24E+01 - 49L2 104.001.42E-038.48E-022.53E+004.85E+013.03E-035.94E-028.95E-011.20E+01 - 49L2 127.007.09E-043.32E-028.19E-011.33E+011.65E-032.72E-023.48E-013.96E+00 - 49L2 155.003.55E-041.32E-022.70E-013.69E+009.04E-041.26E-021.37E-011.33E+00 - 49L2 220.001.07E-042.68E-034.00E-024.10E-013.15E-043.29E-032.71E-022.00E-01 - 49L2 305.003.60E-056.38E-047.16E-035.68E-021.19E-049.66E-046.24E-033.61E-02 - 49L2 390.001.62E-052.24E-042.06E-031.36E-025.76E-053.92E-042.12E-031.03E-02 - 49L2 500.007.40E-068.12E-056.12E-043.38E-032.78E-051.61E-047.38E-043.05E-03 - 49L2 730.002.41E-061.87E-051.07E-044.62E-049.33E-064.30E-051.57E-045.18E-04 - 49L21000.009.65E-076.00E-062.78E-059.98E-053.82E-061.50E-054.65E-051.30E-04 - 49L21500.003.42E-071.55E-065.64E-061.65E-051.24E-064.08E-061.06E-052.48E-05 - 49L3 4.735.84E+015.89E+053.60E+082.91E+101.06E+013.16E+051.17E+094.37E+11 - 49L3 5.433.92E+012.93E+051.57E+081.56E+106.94E+001.59E+054.60E+081.51E+11 - 49L3 6.732.07E+019.87E+044.32E+074.80E+093.58E+005.45E+041.08E+082.91E+10 - 49L3 9.936.28E+001.37E+044.11E+064.38E+081.08E+007.83E+037.93E+061.50E+09 - 49L3 13.732.24E+002.66E+035.77E+055.30E+073.99E-011.56E+039.29E+051.30E+08 - 49L3 18.009.23E-016.77E+021.12E+058.66E+061.73E-014.05E+021.58E+051.71E+07 - 49L3 24.003.52E-011.58E+021.95E+041.23E+067.17E-029.69E+012.47E+042.04E+06 - 49L3 32.001.32E-013.71E+013.41E+031.72E+052.97E-022.33E+013.95E+032.50E+05 - 49L3 44.004.36E-027.48E+004.94E+021.91E+041.12E-024.82E+005.37E+022.53E+04 - 49L3 57.001.75E-022.04E+001.03E+023.20E+035.08E-031.35E+001.09E+024.04E+03 - 49L3 74.006.93E-035.52E-012.13E+015.25E+022.29E-033.77E-012.23E+016.54E+02 - 49L3 87.003.89E-032.46E-018.02E+001.72E+021.40E-031.72E-018.44E+002.15E+02 - 49L3 104.002.06E-031.01E-012.74E+005.00E+018.16E-047.25E-022.93E+006.37E+01 - 49L3 127.001.01E-033.78E-028.29E-011.27E+014.46E-042.78E-029.10E-011.67E+01 - 49L3 155.005.00E-041.42E-022.53E-013.24E+002.45E-041.08E-022.88E-014.46E+00 - 49L3 220.001.48E-042.62E-033.23E-023.03E-018.67E-052.10E-033.99E-024.66E-01 - 49L3 305.004.93E-055.64E-044.94E-033.48E-023.35E-054.75E-046.63E-036.05E-02 - 49L3 390.002.23E-051.85E-041.25E-037.17E-031.67E-051.60E-041.78E-031.36E-02 - 49L3 500.001.04E-056.27E-053.30E-041.54E-038.39E-065.52E-054.87E-043.16E-03 - 49L3 730.003.51E-061.36E-054.93E-051.70E-043.10E-061.20E-057.29E-053.73E-04 - 49L31000.001.56E-064.30E-061.18E-053.24E-051.44E-063.77E-061.63E-056.85E-05 - 49L31500.005.98E-071.18E-062.34E-064.92E-065.84E-071.03E-062.77E-068.80E-06 - 49M1 1.831.54E+015.06E+042.05E+062.77E+091.41E+039.57E+061.06E+102.96E+12 - 49M1 2.838.53E+007.92E+031.19E+063.75E+073.81E+021.12E+066.46E+081.42E+11 - 49M1 4.833.43E+005.87E+021.79E+051.34E+077.66E+018.34E+042.30E+073.45E+09 - 49M1 8.831.05E+001.41E+018.90E+039.67E+051.26E+014.69E+036.07E+055.57E+07 - 49M1 15.832.94E-016.02E-012.38E+022.97E+042.20E+003.13E+022.08E+041.15E+06 - 49M1 25.001.01E-015.70E-017.76E+001.19E+035.66E-014.02E+011.64E+035.99E+04 - 49M1 40.003.15E-022.48E-011.09E+003.17E+011.41E-015.23E+001.33E+023.16E+03 - 49M1 52.001.61E-021.30E-016.75E-016.09E+006.55E-021.74E+003.40E+016.37E+02 - 49M1 70.007.34E-035.71E-023.21E-011.91E+002.77E-025.14E-017.57E+001.09E+02 - 49M1 103.002.58E-031.77E-029.58E-025.08E-019.18E-031.12E-011.15E+001.17E+01 - 49M1 150.009.26E-045.33E-032.54E-021.19E-013.22E-032.71E-022.00E-011.47E+00 - 49M1 280.001.73E-047.09E-042.56E-039.09E-036.05E-043.02E-031.36E-026.04E-02 - 49M1 500.004.09E-051.25E-043.47E-049.38E-041.40E-044.81E-041.46E-034.34E-03 - 49M2 1.703.63E+011.13E+073.93E+101.81E+131.67E+023.27E+051.13E+081.80E+10 - 49M2 2.701.51E+011.11E+061.99E+097.23E+114.13E+014.14E+041.13E+071.90E+09 - 49M2 4.704.20E+006.90E+045.97E+071.51E+107.69E+003.74E+037.13E+059.95E+07 - 49M2 8.708.24E-013.17E+031.32E+062.11E+081.18E+002.78E+023.37E+043.29E+06 - 49M2 15.701.46E-011.68E+023.61E+043.61E+061.96E-012.43E+011.84E+031.18E+05 - 49M2 25.003.42E-021.69E+012.20E+031.49E+054.75E-023.65E+001.89E+028.39E+03 - 49M2 40.007.36E-031.69E+001.35E+026.08E+031.13E-025.49E-011.90E+015.76E+02 - 49M2 52.003.05E-034.74E-012.89E+011.03E+035.10E-031.92E-015.31E+001.29E+02 - 49M2 70.001.11E-031.13E-015.10E+001.41E+022.06E-035.88E-021.26E+002.39E+01 - 49M2 103.002.93E-041.81E-025.55E-011.09E+016.39E-041.28E-021.97E-012.71E+00 - 49M2 150.008.01E-053.13E-036.71E-029.54E-012.05E-042.96E-033.34E-023.36E-01 - 49M2 280.009.72E-061.90E-042.32E-031.97E-023.17E-052.75E-041.90E-031.18E-02 - 49M2 500.001.52E-061.68E-051.27E-047.05E-045.75E-063.33E-051.53E-046.36E-04 - 49M3 1.667.77E+012.21E+077.87E+103.63E+134.87E+011.23E+073.66E+111.06E+15 - 49M3 2.663.01E+012.06E+063.72E+091.34E+121.16E+011.17E+061.41E+101.99E+13 - 49M3 4.667.91E+001.22E+051.05E+082.62E+102.11E+007.15E+043.03E+081.94E+11 - 49M3 8.661.47E+005.37E+032.19E+063.44E+083.19E-013.25E+034.56E+061.33E+09 - 49M3 15.662.49E-012.71E+025.66E+045.53E+065.23E-021.70E+028.89E+041.31E+07 - 49M3 25.005.57E-022.58E+013.23E+032.13E+051.26E-021.66E+014.25E+033.80E+05 - 49M3 40.001.15E-022.44E+001.85E+028.05E+033.01E-031.62E+002.15E+021.19E+04 - 49M3 52.004.68E-036.57E-013.75E+011.30E+031.36E-034.45E-014.19E+011.79E+03 - 49M3 70.001.66E-031.49E-016.20E+001.64E+025.51E-041.04E-016.78E+002.19E+02 - 49M3 103.004.26E-042.19E-026.05E-011.13E+011.71E-041.59E-026.69E-011.51E+01 - 49M3 150.001.14E-043.44E-036.40E-028.50E-015.55E-052.64E-037.45E-021.21E+00 - 49M3 280.001.35E-051.74E-041.68E-031.28E-028.85E-061.46E-042.24E-032.21E-02 - 49M3 500.002.15E-061.30E-056.89E-053.22E-041.74E-061.15E-051.03E-046.74E-04 - 49M4 1.451.53E+026.15E+055.69E+101.12E+151.23E+013.14E+054.90E+097.41E+12 - 49M4 2.452.70E+014.17E+041.42E+091.17E+132.19E+002.25E+041.46E+081.46E+11 - 49M4 4.453.19E+001.96E+032.10E+076.93E+102.93E-011.11E+032.84E+061.69E+09 - 49M4 8.452.74E-017.16E+012.24E+053.01E+083.17E-024.32E+014.42E+041.48E+07 - 49M4 15.452.36E-023.03E+003.13E+031.92E+063.68E-032.02E+009.33E+021.78E+05 - 49M4 25.003.07E-032.34E-011.05E+023.55E+046.30E-041.75E-014.46E+015.38E+03 - 49M4 40.003.94E-041.87E-023.84E+007.47E+021.08E-041.60E-022.35E+001.81E+02 - 49M4 52.001.23E-044.51E-036.14E-018.82E+014.01E-054.23E-034.60E-012.77E+01 - 49M4 70.003.27E-059.02E-047.79E-027.99E+001.28E-059.35E-047.33E-023.34E+00 - 49M4 103.005.84E-061.12E-045.48E-033.65E-012.88E-061.32E-046.87E-032.19E-01 - 49M4 150.001.12E-061.51E-054.33E-041.91E-026.68E-072.00E-057.04E-041.60E-02 - 49M4 280.007.72E-086.02E-077.48E-061.66E-045.90E-088.97E-071.73E-052.32E-04 - 49M4 500.005.92E-093.59E-082.24E-072.61E-066.39E-095.40E-086.17E-075.33E-06 - 49M5 1.442.27E+028.33E+058.99E+101.69E+157.64E+003.75E+042.35E+102.00E+15 - 49M5 2.443.93E+015.56E+042.20E+091.71E+131.36E+002.71E+035.92E+081.82E+13 - 49M5 4.444.58E+002.58E+033.21E+079.93E+101.86E-011.38E+029.04E+069.04E+10 - 49M5 8.443.86E-019.26E+013.39E+054.21E+082.08E-025.65E+001.02E+053.21E+08 - 49M5 15.443.27E-023.85E+004.64E+032.61E+062.51E-032.84E-011.51E+031.72E+06 - 49M5 25.004.20E-032.91E-011.51E+024.65E+044.45E-042.64E-025.27E+012.86E+04 - 49M5 40.005.35E-042.25E-025.38E+009.38E+027.96E-052.63E-032.02E+005.61E+02 - 49M5 52.001.66E-045.34E-038.38E-011.07E+023.01E-057.30E-043.30E-016.46E+01 - 49M5 70.004.40E-051.04E-031.03E-019.27E+009.92E-061.72E-044.27E-025.74E+00 - 49M5 103.007.77E-061.25E-046.82E-033.92E-012.33E-062.67E-053.07E-032.60E-01 - 49M5 150.001.46E-061.61E-055.00E-041.85E-025.73E-074.49E-062.44E-041.35E-02 - 49M5 280.001.04E-076.04E-077.35E-061.28E-045.84E-082.57E-074.17E-061.14E-04 - 49M5 500.001.25E-083.69E-081.95E-071.56E-067.93E-092.18E-081.25E-071.63E-06 - 49N+ 50.005.39E-032.95E-011.73E+016.82E+021.76E-026.39E-012.39E+018.51E+02 - 49N+ 70.002.08E-036.29E-022.35E+006.57E+016.59E-031.53E-013.63E+008.59E+01 - 49N+ 100.007.51E-041.31E-022.99E-015.77E+002.37E-033.54E-025.39E-018.42E+00 - 49N+ 150.002.37E-042.42E-033.15E-023.94E-017.58E-047.27E-036.98E-026.98E-01 - 49N+ 200.001.05E-047.82E-046.98E-036.37E-023.45E-042.50E-031.78E-021.32E-01 - 49N+ 500.009.62E-063.32E-051.15E-044.11E-043.22E-051.15E-043.79E-041.26E-03 - 50K 30.204.15E+001.62E+011.28E+014.74E+001.60E+014.35E+021.97E+032.14E+03 - 50K 30.903.90E+001.68E+012.03E+011.50E+011.49E+013.96E+021.98E+033.27E+03 - 50K 32.203.50E+001.74E+013.35E+014.76E+011.32E+013.38E+021.95E+035.07E+03 - 50K 35.402.73E+001.70E+015.66E+011.61E+029.97E+002.36E+021.68E+037.49E+03 - 50K 39.202.09E+001.51E+016.74E+012.73E+027.39E+001.60E+021.30E+037.73E+03 - 50K 43.001.63E+001.28E+016.70E+013.26E+025.63E+001.12E+029.76E+026.76E+03 - 50K 49.001.15E+009.54E+005.71E+013.22E+023.84E+006.81E+016.22E+024.84E+03 - 50K 57.007.58E-016.46E+004.15E+012.53E+022.47E+003.84E+013.52E+022.90E+03 - 50K 69.004.46E-013.74E+002.44E+011.53E+021.42E+001.87E+011.65E+021.35E+03 - 50K 82.002.75E-012.20E+001.40E+018.59E+018.63E-019.82E+008.12E+016.38E+02 - 50K 99.001.62E-011.21E+007.27E+004.21E+015.04E-014.91E+003.70E+012.70E+02 - 50K 112.001.14E-018.04E-014.62E+002.56E+013.56E-013.13E+002.21E+011.52E+02 - 50K 129.007.67E-025.02E-012.71E+001.41E+012.40E-011.88E+001.23E+017.79E+01 - 50K 152.004.83E-022.89E-011.44E+006.96E+001.52E-011.05E+006.19E+003.58E+01 - 50K 180.003.00E-021.63E-017.49E-013.31E+009.62E-025.87E-013.09E+001.61E+01 - 50K 245.001.28E-025.79E-022.26E-018.53E-014.23E-022.08E-018.99E-013.85E+00 - 50K 330.005.81E-032.20E-027.37E-022.38E-011.95E-027.94E-022.86E-011.01E+00 - 50K 420.003.16E-031.05E-023.11E-028.91E-021.06E-023.77E-021.18E-013.61E-01 - 50K 530.001.81E-035.38E-031.43E-023.67E-026.02E-031.89E-025.20E-021.40E-01 - 50K 760.008.21E-042.11E-034.82E-031.06E-022.56E-036.87E-031.59E-023.55E-02 - 50K 1050.004.34E-041.00E-032.05E-033.99E-031.23E-032.94E-035.98E-031.16E-02 - 50K 1300.002.95E-046.40E-041.23E-032.23E-037.69E-041.72E-033.26E-035.87E-03 - 50K 1550.002.19E-044.51E-048.25E-041.42E-035.28E-041.13E-032.03E-033.45E-03 - 50L1 5.461.28E+013.92E+034.63E+051.12E+073.05E+022.42E+053.23E+071.08E+09 - 50L1 6.161.04E+011.98E+033.25E+051.31E+072.13E+021.36E+051.65E+076.93E+08 - 50L1 7.467.37E+006.16E+021.46E+058.85E+061.20E+025.50E+045.71E+062.78E+08 - 50L1 10.663.67E+004.67E+012.21E+041.84E+064.14E+011.03E+047.91E+053.90E+07 - 50L1 14.461.93E+002.73E+003.30E+033.16E+051.67E+012.55E+031.49E+056.50E+06 - 50L1 18.001.19E+001.73E+007.09E+027.62E+048.69E+009.46E+024.54E+041.75E+06 - 50L1 24.006.09E-012.38E+007.16E+019.78E+033.69E+002.63E+029.72E+033.10E+05 - 50L1 32.003.04E-011.87E+008.11E+001.02E+031.58E+007.50E+012.13E+035.48E+04 - 50L1 44.001.37E-011.02E+004.03E+007.83E+016.17E-011.94E+014.12E+028.20E+03 - 50L1 57.006.99E-025.38E-012.66E+001.79E+012.90E-016.61E+001.11E+021.79E+03 - 50L1 74.003.50E-022.61E-011.40E+007.57E+001.36E-012.30E+003.06E+013.95E+02 - 50L1 87.002.26E-021.61E-018.71E-014.58E+008.55E-021.21E+001.40E+011.57E+02 - 50L1 104.001.40E-029.33E-024.91E-012.50E+005.15E-026.06E-015.97E+005.79E+01 - 50L1 127.008.09E-034.97E-022.48E-011.20E+002.94E-022.84E-012.35E+001.93E+01 - 50L1 155.004.70E-032.62E-021.22E-015.52E-011.69E-021.36E-019.52E-016.63E+00 - 50L1 220.001.82E-038.42E-033.37E-021.32E-016.56E-033.90E-022.06E-011.09E+00 - 50L1 305.007.68E-042.99E-031.03E-023.48E-022.78E-031.29E-025.37E-022.21E-01 - 50L1 390.004.13E-041.41E-034.35E-031.31E-021.49E-035.86E-032.06E-027.13E-02 - 50L1 500.002.28E-046.94E-041.91E-035.15E-038.02E-042.73E-038.22E-032.42E-02 - 50L1 730.009.89E-052.59E-046.12E-041.40E-033.24E-049.16E-042.25E-035.33E-03 - 50L11000.005.29E-051.25E-042.64E-045.35E-041.57E-043.92E-048.37E-041.71E-03 - 50L11500.002.57E-055.41E-051.01E-041.79E-046.47E-051.42E-042.62E-044.59E-04 - 50L2 5.162.62E+012.52E+051.36E+089.69E+093.38E+011.03E+045.50E+051.23E+07 - 50L2 5.861.83E+011.33E+056.42E+075.67E+092.29E+016.24E+034.14E+051.48E+07 - 50L2 7.161.03E+014.84E+041.96E+071.98E+091.24E+012.82E+032.15E+051.08E+07 - 50L2 10.363.39E+007.58E+032.17E+062.18E+083.98E+006.48E+024.92E+042.85E+06 - 50L2 14.161.28E+001.59E+033.38E+052.98E+071.52E+001.86E+021.24E+046.72E+05 - 50L2 18.005.96E-014.81E+028.08E+046.20E+067.28E-017.11E+014.15E+032.01E+05 - 50L2 24.002.34E-011.16E+021.47E+049.24E+053.01E-012.25E+011.08E+034.43E+04 - 50L2 32.008.98E-022.80E+012.67E+031.36E+051.25E-017.13E+002.78E+029.32E+03 - 50L2 44.003.06E-025.90E+004.10E+021.62E+044.71E-022.00E+006.07E+011.61E+03 - 50L2 57.001.26E-021.68E+009.03E+012.87E+032.13E-027.15E-011.76E+013.80E+02 - 50L2 74.005.09E-034.78E-011.99E+015.07E+029.63E-032.54E-015.05E+008.86E+01 - 50L2 87.002.90E-032.21E-017.84E+001.74E+025.89E-031.34E-012.34E+003.59E+01 - 50L2 104.001.56E-039.48E-022.83E+005.41E+013.42E-036.68E-021.00E+001.33E+01 - 50L2 127.007.79E-043.71E-029.18E-011.48E+011.87E-033.06E-023.90E-014.41E+00 - 50L2 155.003.91E-041.47E-023.03E-014.13E+001.02E-031.42E-021.53E-011.48E+00 - 50L2 220.001.18E-043.01E-034.50E-024.60E-013.58E-043.72E-033.05E-022.25E-01 - 50L2 305.003.99E-057.17E-048.07E-036.39E-021.35E-041.09E-037.04E-034.06E-02 - 50L2 390.001.80E-052.53E-042.32E-031.53E-026.56E-054.45E-042.40E-031.17E-02 - 50L2 500.008.28E-069.16E-056.92E-043.82E-033.17E-051.82E-048.36E-043.44E-03 - 50L2 730.002.68E-062.12E-051.21E-045.24E-041.07E-054.90E-051.79E-045.87E-04 - 50L21000.001.09E-066.79E-063.16E-051.13E-044.36E-061.71E-055.30E-051.48E-04 - 50L21500.003.77E-071.76E-066.42E-061.88E-051.41E-064.67E-061.21E-052.83E-05 - 50L3 4.935.40E+015.27E+053.08E+082.35E+101.03E+012.96E+051.05E+093.76E+11 - 50L3 5.633.68E+012.69E+051.39E+081.30E+106.82E+001.53E+054.28E+081.36E+11 - 50L3 6.931.99E+019.39E+043.98E+074.20E+093.60E+005.42E+041.05E+082.75E+10 - 50L3 10.136.21E+001.37E+044.01E+064.12E+081.12E+008.16E+038.21E+061.52E+09 - 50L3 13.932.26E+002.73E+035.82E+055.19E+074.19E-011.67E+039.95E+051.37E+08 - 50L3 18.009.79E-017.47E+021.23E+059.38E+061.90E-014.66E+021.86E+052.00E+07 - 50L3 24.003.76E-011.75E+022.15E+041.34E+067.87E-021.12E+022.89E+042.38E+06 - 50L3 32.001.41E-014.10E+013.76E+031.87E+053.26E-022.68E+014.61E+032.91E+05 - 50L3 44.004.68E-028.26E+005.45E+022.09E+041.23E-025.54E+006.25E+022.94E+04 - 50L3 57.001.89E-022.25E+001.14E+023.51E+035.58E-031.55E+001.26E+024.68E+03 - 50L3 74.007.48E-036.10E-012.35E+015.77E+022.52E-034.32E-012.58E+017.56E+02 - 50L3 87.004.21E-032.72E-018.87E+001.89E+021.54E-031.97E-019.76E+002.48E+02 - 50L3 104.002.23E-031.12E-013.03E+005.51E+018.97E-048.30E-023.38E+007.35E+01 - 50L3 127.001.10E-034.18E-029.17E-011.39E+014.91E-043.18E-021.05E+001.92E+01 - 50L3 155.005.43E-041.57E-022.80E-013.57E+002.70E-041.23E-023.32E-015.13E+00 - 50L3 220.001.62E-042.90E-033.58E-023.35E-019.55E-052.39E-034.57E-025.34E-01 - 50L3 305.005.41E-056.24E-045.48E-033.85E-023.69E-055.38E-047.58E-036.93E-02 - 50L3 390.002.45E-052.05E-041.39E-037.94E-031.83E-051.81E-042.03E-031.56E-02 - 50L3 500.001.14E-056.95E-053.67E-041.70E-039.24E-066.23E-055.55E-043.61E-03 - 50L3 730.003.85E-061.50E-055.47E-051.89E-043.41E-061.34E-058.28E-054.24E-04 - 50L31000.001.69E-064.75E-061.30E-053.59E-051.58E-064.20E-061.84E-057.79E-05 - 50L31500.006.68E-071.30E-062.60E-065.45E-066.41E-071.14E-063.11E-069.95E-06 - 50M1 1.881.45E+014.82E+041.97E+062.48E+091.44E+039.53E+061.03E+102.78E+12 - 50M1 2.888.23E+007.95E+031.11E+063.94E+074.02E+021.18E+066.72E+081.44E+11 - 50M1 4.883.38E+006.32E+021.79E+051.24E+078.30E+019.11E+042.50E+073.70E+09 - 50M1 8.881.05E+001.74E+019.56E+039.85E+051.39E+015.24E+036.79E+056.16E+07 - 50M1 15.882.99E-015.51E-012.80E+023.25E+042.45E+003.53E+022.35E+041.29E+06 - 50M1 25.001.04E-015.25E-011.02E+011.42E+036.35E-014.59E+011.88E+036.83E+04 - 50M1 40.003.28E-022.42E-011.05E+004.01E+011.58E-015.94E+001.51E+023.58E+03 - 50M1 52.001.68E-021.29E-016.35E-016.99E+007.35E-021.97E+003.85E+017.20E+02 - 50M1 70.007.68E-035.76E-023.10E-011.92E+003.10E-025.80E-018.54E+001.22E+02 - 50M1 103.002.72E-031.81E-029.53E-025.02E-011.03E-021.26E-011.29E+001.32E+01 - 50M1 150.009.79E-045.51E-032.58E-021.20E-013.60E-033.03E-022.24E-011.65E+00 - 50M1 280.001.84E-047.46E-042.67E-039.45E-036.74E-043.37E-031.51E-026.72E-02 - 50M1 500.004.37E-051.33E-043.68E-049.97E-041.55E-045.34E-041.62E-034.81E-03 - 50M2 1.763.44E+011.08E+073.67E+101.63E+131.72E+023.27E+051.09E+081.63E+10 - 50M2 2.761.47E+011.13E+061.99E+097.04E+114.39E+014.34E+041.15E+071.85E+09 - 50M2 4.764.23E+007.31E+046.30E+071.56E+108.40E+004.05E+037.55E+051.02E+08 - 50M2 8.768.53E-013.45E+031.43E+062.26E+081.31E+003.06E+023.66E+043.50E+06 - 50M2 15.761.55E-011.86E+023.98E+043.94E+062.20E-012.71E+012.03E+031.28E+05 - 50M2 25.003.69E-021.90E+012.48E+031.67E+055.40E-024.13E+002.12E+029.33E+03 - 50M2 40.008.01E-031.90E+001.52E+026.82E+031.29E-026.22E-012.14E+016.43E+02 - 50M2 52.003.33E-035.34E-013.25E+011.16E+035.81E-032.18E-015.98E+001.45E+02 - 50M2 70.001.22E-031.28E-015.77E+001.58E+022.35E-036.67E-021.42E+002.68E+01 - 50M2 103.003.24E-042.04E-026.28E-011.23E+017.31E-041.46E-022.24E-013.05E+00 - 50M2 150.008.92E-053.55E-037.61E-021.08E+002.35E-043.37E-033.79E-023.80E-01 - 50M2 280.001.09E-052.16E-042.64E-032.25E-023.64E-053.15E-042.17E-031.34E-02 - 50M2 500.001.71E-061.91E-051.45E-048.07E-046.63E-063.83E-051.76E-047.27E-04 - 50M3 1.717.40E+012.12E+077.39E+103.29E+134.93E+011.24E+073.61E+111.03E+15 - 50M3 2.712.96E+012.09E+063.74E+091.31E+121.22E+011.25E+061.50E+102.11E+13 - 50M3 4.717.99E+001.29E+051.11E+082.70E+102.26E+007.91E+043.39E+082.18E+11 - 50M3 8.711.52E+005.82E+032.37E+063.67E+083.47E-013.68E+035.26E+061.54E+09 - 50M3 15.712.62E-012.98E+026.21E+046.00E+065.74E-021.95E+021.04E+051.54E+07 - 50M3 25.005.98E-022.88E+013.61E+032.36E+051.39E-021.94E+015.05E+034.53E+05 - 50M3 40.001.25E-022.73E+002.06E+028.94E+033.34E-031.89E+002.54E+021.41E+04 - 50M3 52.005.09E-037.34E-014.19E+011.44E+031.51E-035.18E-014.94E+012.12E+03 - 50M3 70.001.81E-031.66E-016.94E+001.82E+026.12E-041.21E-017.96E+002.57E+02 - 50M3 103.004.66E-042.45E-026.77E-011.26E+011.91E-041.85E-027.83E-011.77E+01 - 50M3 150.001.25E-043.85E-037.18E-029.50E-016.18E-053.06E-038.69E-021.41E+00 - 50M3 280.001.49E-051.95E-041.88E-031.43E-029.86E-061.68E-042.60E-032.56E-02 - 50M3 500.002.37E-061.46E-057.75E-053.61E-041.94E-061.32E-051.19E-047.79E-04 - 50M4 1.491.50E+025.99E+055.46E+101.06E+151.27E+013.22E+054.92E+097.22E+12 - 50M4 2.492.76E+014.32E+041.48E+091.22E+132.34E+002.45E+041.58E+081.55E+11 - 50M4 4.493.40E+002.11E+032.31E+077.71E+103.23E-011.26E+033.23E+061.90E+09 - 50M4 8.493.00E-017.93E+012.55E+053.47E+083.58E-025.00E+015.16E+041.71E+07 - 50M4 15.492.63E-023.41E+003.63E+032.25E+064.20E-032.37E+001.10E+032.09E+05 - 50M4 25.003.50E-032.69E-011.24E+024.25E+047.30E-042.08E-015.36E+016.45E+03 - 50M4 40.004.54E-042.16E-024.54E+008.94E+021.26E-041.91E-022.82E+002.18E+02 - 50M4 52.001.43E-045.24E-037.27E-011.06E+024.68E-055.04E-035.53E-013.33E+01 - 50M4 70.003.81E-051.05E-039.23E-029.56E+001.50E-051.12E-038.81E-024.01E+00 - 50M4 103.006.75E-061.31E-046.50E-034.37E-013.38E-061.58E-048.27E-032.63E-01 - 50M4 150.001.26E-061.78E-055.14E-042.29E-027.86E-072.39E-058.48E-041.93E-02 - 50M4 280.008.57E-087.15E-078.89E-061.99E-046.96E-081.08E-062.08E-052.80E-04 - 50M4 500.008.10E-094.23E-082.68E-073.13E-067.56E-096.48E-087.46E-076.44E-06 - 50M5 1.482.22E+028.08E+058.66E+101.60E+157.86E+003.80E+042.37E+101.99E+15 - 50M5 2.484.03E+015.72E+042.30E+091.79E+131.46E+002.91E+036.47E+082.00E+13 - 50M5 4.484.87E+002.76E+033.55E+071.10E+112.05E-011.53E+021.04E+071.06E+11 - 50M5 8.484.22E-011.02E+023.86E+054.84E+082.34E-026.43E+001.21E+053.90E+08 - 50M5 15.483.65E-024.31E+005.38E+033.05E+062.85E-033.27E-011.82E+032.12E+06 - 50M5 25.004.78E-033.32E-011.79E+025.56E+045.12E-043.08E-026.47E+013.59E+04 - 50M5 40.006.13E-042.59E-026.37E+001.12E+039.20E-053.07E-032.48E+007.00E+02 - 50M5 52.001.91E-046.16E-039.93E-011.28E+023.49E-058.53E-044.04E-018.03E+01 - 50M5 70.005.08E-051.20E-031.22E-011.11E+011.15E-052.01E-045.23E-027.12E+00 - 50M5 103.009.09E-061.45E-048.08E-034.68E-012.72E-063.13E-053.75E-033.21E-01 - 50M5 150.001.72E-061.87E-055.93E-042.21E-026.68E-075.26E-062.98E-041.66E-02 - 50M5 280.001.15E-077.11E-078.70E-061.53E-046.83E-083.02E-075.03E-061.39E-04 - 50M5 500.001.27E-084.50E-082.27E-071.87E-069.29E-092.56E-081.50E-071.99E-06 - 50N+ 50.005.93E-033.43E-012.04E+018.08E+022.04E-027.58E-012.90E+011.04E+03 - 50N+ 70.002.29E-037.25E-022.77E+007.77E+017.67E-031.80E-014.36E+001.04E+02 - 50N+ 100.008.28E-041.50E-023.50E-016.81E+002.75E-034.17E-026.42E-011.01E+01 - 50N+ 150.002.61E-042.74E-033.67E-024.64E-018.80E-048.50E-038.24E-028.31E-01 - 50N+ 200.001.17E-048.80E-048.07E-037.46E-024.00E-042.91E-032.09E-021.56E-01 - 50N+ 500.001.07E-053.71E-051.30E-044.72E-043.70E-051.33E-044.39E-041.46E-03 - 51K 31.493.82E+001.42E+011.06E+013.61E+001.56E+014.04E+021.75E+031.79E+03 - 51K 32.193.59E+001.47E+011.66E+011.13E+011.45E+013.69E+021.76E+032.72E+03 - 51K 33.493.24E+001.53E+012.73E+013.57E+011.29E+013.17E+021.73E+034.22E+03 - 51K 36.692.55E+001.50E+014.65E+011.23E+029.89E+002.24E+021.51E+036.30E+03 - 51K 40.491.97E+001.34E+015.62E+012.12E+027.40E+001.54E+021.19E+036.63E+03 - 51K 44.001.58E+001.16E+015.68E+012.56E+025.79E+001.12E+029.25E+025.98E+03 - 51K 50.001.12E+008.83E+004.97E+012.63E+023.98E+006.89E+016.00E+024.41E+03 - 51K 58.007.46E-016.08E+003.70E+012.15E+022.58E+003.93E+013.46E+022.72E+03 - 51K 70.004.44E-013.58E+002.24E+011.34E+021.50E+001.93E+011.65E+021.31E+03 - 51K 83.002.76E-012.13E+001.31E+017.75E+019.17E-011.03E+018.24E+016.28E+02 - 51K 100.001.64E-011.18E+006.91E+003.89E+015.39E-015.17E+003.81E+012.71E+02 - 51K 113.001.16E-017.94E-014.44E+002.39E+013.82E-013.31E+002.29E+011.54E+02 - 51K 130.007.82E-024.99E-012.64E+001.34E+012.58E-012.00E+001.28E+017.97E+01 - 51K 153.004.94E-022.89E-011.42E+006.70E+001.64E-011.13E+006.51E+003.70E+01 - 51K 180.003.14E-021.68E-017.59E-013.31E+001.05E-016.40E-013.34E+001.72E+01 - 51K 245.001.34E-025.99E-022.32E-018.64E-014.63E-022.26E-019.73E-014.13E+00 - 51K 330.006.11E-032.29E-027.61E-022.44E-012.13E-028.65E-023.09E-011.09E+00 - 51K 420.003.33E-031.10E-023.23E-029.22E-021.16E-024.10E-021.27E-013.89E-01 - 51K 530.001.91E-035.65E-031.49E-023.82E-026.56E-032.06E-025.64E-021.51E-01 - 51K 760.008.68E-042.23E-035.08E-031.12E-022.78E-037.46E-031.72E-023.84E-02 - 51K 1050.004.60E-041.06E-032.17E-034.23E-031.33E-033.18E-036.47E-031.25E-02 - 51K 1300.003.12E-046.79E-041.30E-032.37E-038.30E-041.86E-033.53E-036.34E-03 - 51K 1550.002.31E-044.79E-048.77E-041.52E-035.69E-041.22E-032.19E-033.72E-03 - 51L1 5.701.18E+013.53E+033.92E+058.71E+062.99E+022.26E+052.88E+079.11E+08 - 51L1 6.409.69E+001.83E+032.81E+051.05E+072.12E+021.30E+051.52E+076.00E+08 - 51L1 7.706.94E+006.00E+021.32E+057.46E+061.22E+025.41E+045.43E+062.51E+08 - 51L1 10.903.53E+005.13E+012.15E+041.69E+064.31E+011.06E+047.92E+053.75E+07 - 51L1 14.701.88E+003.42E+003.43E+033.08E+051.76E+012.68E+031.53E+056.51E+06 - 51L1 18.001.20E+001.47E+008.54E+028.45E+049.65E+001.07E+035.10E+041.94E+06 - 51L1 24.006.22E-012.06E+009.33E+011.14E+044.10E+002.96E+021.09E+043.43E+05 - 51L1 32.003.12E-011.73E+009.81E+001.25E+031.75E+008.44E+012.39E+036.08E+04 - 51L1 44.001.41E-019.83E-013.70E+009.81E+016.85E-012.17E+014.60E+029.10E+03 - 51L1 57.007.23E-025.30E-012.46E+001.93E+013.21E-017.40E+001.24E+021.98E+03 - 51L1 74.003.63E-022.60E-011.34E+007.37E+001.51E-012.57E+003.40E+014.38E+02 - 51L1 87.002.35E-021.62E-018.45E-014.42E+009.48E-021.35E+001.55E+011.74E+02 - 51L1 104.001.45E-029.46E-024.83E-012.43E+005.71E-026.74E-016.62E+006.40E+01 - 51L1 127.008.46E-035.07E-022.47E-011.18E+003.25E-023.15E-012.61E+002.13E+01 - 51L1 155.004.92E-032.69E-021.22E-015.50E-011.87E-021.50E-011.05E+007.32E+00 - 51L1 220.001.91E-038.72E-033.45E-021.35E-017.24E-034.31E-022.28E-011.20E+00 - 51L1 305.008.10E-043.12E-031.06E-023.59E-023.06E-031.42E-025.91E-022.43E-01 - 51L1 390.004.36E-041.48E-034.54E-031.37E-021.63E-036.45E-032.26E-027.83E-02 - 51L1 500.002.41E-047.32E-042.01E-035.41E-038.80E-043.00E-039.02E-032.66E-02 - 51L1 730.001.05E-042.75E-046.50E-041.49E-033.54E-041.00E-032.46E-035.84E-03 - 51L11000.005.62E-051.34E-042.82E-045.72E-041.71E-044.29E-049.15E-041.87E-03 - 51L11500.002.73E-055.79E-051.08E-041.92E-047.02E-051.54E-042.86E-045.01E-04 - 51L2 5.382.42E+012.25E+051.16E+087.80E+093.31E+019.57E+034.83E+059.97E+06 - 51L2 6.081.72E+011.22E+055.64E+074.70E+092.28E+015.93E+033.71E+051.23E+07 - 51L2 7.389.81E+004.60E+041.79E+071.72E+091.26E+012.76E+031.99E+059.36E+06 - 51L2 10.583.35E+007.55E+032.11E+062.03E+084.16E+006.59E+024.80E+042.65E+06 - 51L2 14.381.29E+001.63E+033.40E+052.90E+071.62E+001.94E+021.25E+046.54E+05 - 51L2 18.006.35E-015.34E+028.94E+046.74E+068.16E-017.90E+014.52E+032.14E+05 - 51L2 24.002.50E-011.28E+021.62E+041.01E+063.38E-012.50E+011.19E+034.77E+04 - 51L2 32.009.65E-023.11E+012.96E+031.49E+051.40E-017.94E+003.05E+021.01E+04 - 51L2 44.003.30E-026.56E+004.56E+021.78E+045.29E-022.23E+006.71E+011.76E+03 - 51L2 57.001.36E-021.87E+001.01E+023.17E+032.40E-027.99E-011.95E+014.18E+02 - 51L2 74.005.54E-035.33E-012.22E+015.62E+021.08E-022.85E-015.62E+009.78E+01 - 51L2 87.003.16E-032.46E-018.75E+001.93E+026.64E-031.51E-012.60E+003.98E+01 - 51L2 104.001.70E-031.06E-013.17E+006.01E+013.86E-037.49E-021.12E+001.48E+01 - 51L2 127.008.54E-044.15E-021.03E+001.65E+012.11E-033.44E-024.35E-014.91E+00 - 51L2 155.004.30E-041.65E-023.39E-014.61E+001.16E-031.59E-021.72E-011.65E+00 - 51L2 220.001.31E-043.38E-035.05E-025.15E-014.06E-044.19E-033.43E-022.51E-01 - 51L2 305.004.42E-058.06E-049.09E-037.18E-021.54E-041.24E-037.93E-034.56E-02 - 51L2 390.002.00E-052.85E-042.62E-031.72E-027.45E-055.04E-042.71E-031.31E-02 - 51L2 500.009.21E-061.03E-047.82E-044.31E-033.61E-052.07E-049.46E-043.88E-03 - 51L2 730.002.97E-062.39E-051.37E-045.92E-041.21E-055.57E-052.03E-046.65E-04 - 51L21000.001.24E-067.67E-063.58E-051.28E-044.98E-061.95E-056.03E-051.68E-04 - 51L21500.004.24E-071.99E-067.30E-062.14E-051.61E-065.33E-061.38E-053.22E-05 - 51L3 5.134.99E+014.73E+052.65E+081.91E+109.91E+002.78E+059.47E+083.24E+11 - 51L3 5.833.45E+012.48E+051.23E+081.09E+106.70E+001.47E+053.98E+081.21E+11 - 51L3 7.131.91E+018.93E+043.66E+073.68E+093.60E+005.39E+041.02E+082.59E+10 - 51L3 10.336.14E+001.37E+043.90E+063.85E+081.15E+008.49E+038.48E+061.53E+09 - 51L3 14.132.28E+002.80E+035.86E+055.06E+074.39E-011.78E+031.06E+061.43E+08 - 51L3 18.001.04E+008.23E+021.35E+051.01E+072.08E-015.35E+022.18E+052.34E+07 - 51L3 24.003.99E-011.93E+022.36E+041.45E+068.62E-021.28E+023.38E+042.78E+06 - 51L3 32.001.51E-014.51E+014.13E+032.04E+053.57E-023.07E+015.38E+033.38E+05 - 51L3 44.005.02E-029.10E+006.00E+022.29E+041.35E-026.36E+007.26E+023.40E+04 - 51L3 57.002.03E-022.48E+001.25E+023.84E+036.12E-031.78E+001.46E+025.41E+03 - 51L3 74.008.06E-036.73E-012.59E+016.33E+022.76E-034.95E-012.98E+018.72E+02 - 51L3 87.004.54E-033.01E-019.78E+002.07E+021.69E-032.25E-011.13E+012.86E+02 - 51L3 104.002.41E-031.24E-013.35E+006.05E+019.85E-049.49E-023.90E+008.45E+01 - 51L3 127.001.19E-034.62E-021.01E+001.53E+015.39E-043.63E-021.21E+002.20E+01 - 51L3 155.005.90E-041.74E-023.10E-013.93E+002.96E-041.40E-023.81E-015.89E+00 - 51L3 220.001.76E-043.20E-033.96E-023.69E-011.05E-042.72E-035.24E-026.12E-01 - 51L3 305.005.90E-056.91E-046.07E-034.26E-024.05E-056.10E-048.66E-037.91E-02 - 51L3 390.002.68E-052.27E-041.54E-038.78E-032.02E-052.04E-042.32E-031.78E-02 - 51L3 500.001.25E-057.69E-054.06E-041.89E-031.01E-057.01E-056.32E-044.11E-03 - 51L3 730.004.22E-061.66E-056.06E-052.10E-043.74E-061.50E-059.39E-054.82E-04 - 51L31000.001.84E-065.25E-061.44E-053.98E-051.73E-064.68E-062.08E-058.83E-05 - 51L31500.007.28E-071.43E-062.87E-066.04E-067.01E-071.26E-063.49E-061.12E-05 - 51M1 1.941.38E+014.59E+041.90E+062.20E+091.47E+039.47E+061.00E+102.61E+12 - 51M1 2.947.93E+007.98E+031.05E+064.15E+074.24E+021.23E+066.97E+081.46E+11 - 51M1 4.943.32E+006.77E+021.78E+051.15E+078.97E+019.92E+042.72E+073.95E+09 - 51M1 8.941.05E+002.10E+011.02E+041.00E+061.52E+015.84E+037.57E+056.80E+07 - 51M1 15.943.04E-015.38E-013.26E+023.55E+042.71E+003.97E+022.64E+041.44E+06 - 51M1 26.009.78E-024.64E-019.92E+001.27E+036.34E-014.39E+011.73E+036.05E+04 - 51M1 41.003.20E-022.22E-019.84E-014.19E+011.65E-016.07E+001.50E+023.48E+03 - 51M1 53.001.66E-021.22E-015.78E-017.36E+007.78E-022.05E+003.95E+017.25E+02 - 51M1 71.007.73E-035.56E-022.88E-011.88E+003.33E-026.18E-018.97E+001.27E+02 - 51M1 104.002.78E-031.80E-029.17E-024.81E-011.12E-021.36E-011.39E+001.40E+01 - 51M1 150.001.03E-035.70E-032.62E-021.21E-014.01E-033.40E-022.51E-011.84E+00 - 51M1 280.001.95E-047.84E-042.78E-039.81E-037.49E-043.75E-031.68E-027.47E-02 - 51M1 500.004.68E-051.42E-043.91E-041.06E-031.72E-045.92E-041.79E-035.33E-03 - 51M2 1.813.25E+011.04E+073.42E+101.47E+131.76E+023.26E+051.05E+081.48E+10 - 51M2 2.811.43E+011.14E+061.99E+096.85E+114.66E+014.54E+041.17E+071.80E+09 - 51M2 4.814.26E+007.72E+046.62E+071.61E+109.14E+004.37E+037.98E+051.05E+08 - 51M2 8.818.82E-013.74E+031.55E+062.41E+081.46E+003.37E+023.97E+043.72E+06 - 51M2 15.811.63E-012.04E+024.38E+044.29E+062.46E-013.01E+012.23E+031.39E+05 - 51M2 26.003.51E-021.76E+012.21E+031.43E+055.43E-023.98E+001.96E+028.28E+03 - 51M2 41.008.01E-031.90E+001.48E+026.46E+031.36E-026.36E-012.13E+016.22E+02 - 51M2 53.003.41E-035.47E-013.28E+011.14E+036.23E-032.28E-016.13E+001.45E+02 - 51M2 71.001.27E-031.34E-015.99E+001.62E+022.57E-037.15E-021.50E+002.77E+01 - 51M2 104.003.45E-042.20E-026.72E-011.30E+018.09E-041.59E-022.41E-013.25E+00 - 51M2 150.009.87E-054.01E-038.62E-021.22E+002.69E-043.84E-034.29E-024.29E-01 - 51M2 280.001.22E-052.45E-043.00E-032.55E-024.17E-053.61E-042.47E-031.52E-02 - 51M2 500.001.93E-062.18E-051.66E-049.20E-047.63E-064.39E-052.01E-048.30E-04 - 51M3 1.777.05E+012.03E+076.93E+102.98E+134.98E+011.24E+073.55E+119.93E+14 - 51M3 2.772.89E+012.12E+063.75E+091.28E+121.27E+011.32E+061.59E+102.22E+13 - 51M3 4.778.05E+001.36E+051.16E+082.78E+102.42E+008.71E+043.78E+082.43E+11 - 51M3 8.771.57E+006.29E+032.55E+063.89E+083.77E-014.16E+036.05E+061.78E+09 - 51M3 15.772.76E-013.27E+026.79E+046.49E+066.29E-022.23E+021.21E+051.80E+07 - 51M3 26.005.63E-022.64E+013.17E+031.99E+051.37E-021.85E+014.65E+034.01E+05 - 51M3 41.001.24E-022.69E+001.98E+028.34E+033.43E-031.94E+002.56E+021.39E+04 - 51M3 53.005.16E-037.44E-014.17E+011.40E+031.58E-035.47E-015.16E+012.17E+03 - 51M3 71.001.87E-031.73E-017.11E+001.84E+026.50E-041.30E-018.56E+002.73E+02 - 51M3 104.004.94E-042.61E-027.14E-011.31E+012.06E-042.04E-028.64E-011.94E+01 - 51M3 150.001.37E-044.31E-038.03E-021.06E+006.86E-053.53E-031.01E-011.65E+00 - 51M3 280.001.63E-052.18E-042.11E-031.60E-021.10E-051.93E-043.01E-032.97E-02 - 51M3 500.002.64E-061.63E-058.69E-054.05E-042.15E-061.50E-051.37E-048.99E-04 - 51M4 1.541.46E+025.82E+055.22E+109.98E+141.30E+013.29E+054.93E+097.02E+12 - 51M4 2.542.82E+014.45E+041.53E+091.27E+132.51E+002.65E+041.71E+081.63E+11 - 51M4 4.543.60E+002.27E+032.53E+078.53E+103.56E-011.42E+033.66E+062.13E+09 - 51M4 8.543.27E-018.74E+012.89E+053.97E+084.02E-025.78E+016.00E+041.97E+07 - 51M4 15.542.93E-023.83E+004.18E+032.62E+064.78E-032.77E+001.30E+032.45E+05 - 51M4 26.003.36E-032.50E-011.10E+023.66E+047.30E-042.02E-015.01E+015.80E+03 - 51M4 41.004.65E-042.18E-024.50E+008.71E+021.33E-042.00E-022.90E+002.18E+02 - 51M4 53.001.50E-045.47E-037.50E-011.08E+025.06E-055.45E-035.88E-013.47E+01 - 51M4 71.004.11E-051.13E-039.87E-021.02E+011.66E-051.24E-039.67E-024.34E+00 - 51M4 104.007.55E-061.45E-047.19E-034.83E-013.81E-061.80E-049.34E-032.95E-01 - 51M4 150.001.49E-062.08E-056.08E-042.73E-029.21E-072.85E-051.02E-032.31E-02 - 51M4 280.009.76E-088.40E-071.05E-052.38E-048.19E-081.29E-062.50E-053.36E-04 - 51M4 500.008.38E-095.03E-083.17E-073.76E-068.90E-097.75E-088.97E-077.76E-06 - 51M5 1.532.17E+027.82E+058.33E+101.51E+158.06E+003.84E+042.38E+101.96E+15 - 51M5 2.534.11E+015.87E+042.40E+091.86E+131.55E+003.11E+037.03E+082.18E+13 - 51M5 4.535.16E+002.95E+033.90E+071.22E+112.24E-011.70E+021.19E+071.23E+11 - 51M5 8.534.60E-011.12E+024.39E+055.54E+082.61E-027.30E+001.43E+054.71E+08 - 51M5 15.534.05E-024.81E+006.22E+033.55E+063.22E-033.75E-012.18E+032.60E+06 - 51M5 26.004.57E-033.06E-011.60E+024.77E+045.10E-042.95E-026.03E+013.21E+04 - 51M5 41.006.26E-042.59E-026.31E+001.09E+039.67E-053.16E-032.55E+007.09E+02 - 51M5 53.002.01E-046.37E-031.02E+001.30E+023.75E-059.04E-044.33E-018.51E+01 - 51M5 71.005.45E-051.28E-031.30E-011.17E+011.26E-052.18E-045.79E-027.84E+00 - 51M5 104.001.00E-051.59E-048.93E-035.14E-013.04E-063.48E-054.27E-033.66E-01 - 51M5 150.002.00E-062.18E-057.00E-042.63E-027.77E-076.13E-063.61E-042.04E-02 - 51M5 280.001.38E-078.28E-071.03E-051.82E-047.95E-083.53E-076.06E-061.70E-04 - 51M5 500.001.67E-085.07E-082.71E-072.21E-061.08E-083.00E-081.78E-072.41E-06 - 51N+ 50.006.45E-033.96E-012.39E+019.48E+022.36E-028.90E-013.48E+011.27E+03 - 51N+ 70.002.49E-038.30E-023.23E+009.09E+018.83E-032.11E-015.19E+001.26E+02 - 51N+ 100.009.04E-041.70E-024.07E-017.95E+003.17E-034.85E-027.58E-011.21E+01 - 51N+ 150.002.86E-043.07E-034.24E-025.40E-011.01E-039.85E-039.64E-029.81E-01 - 51N+ 200.001.28E-049.82E-049.25E-038.66E-024.58E-043.36E-032.43E-021.83E-01 - 51N+ 500.001.18E-054.12E-051.46E-045.38E-044.22E-051.52E-045.04E-041.68E-03 - 52K 32.813.51E+001.24E+018.79E+002.77E+001.52E+013.75E+021.56E+031.51E+03 - 52K 33.513.31E+001.29E+011.37E+018.54E+001.42E+013.45E+021.56E+032.28E+03 - 52K 34.813.00E+001.34E+012.23E+012.69E+011.27E+012.98E+021.55E+033.52E+03 - 52K 38.012.39E+001.33E+013.82E+019.34E+019.80E+002.13E+021.36E+035.32E+03 - 52K 41.811.86E+001.19E+014.69E+011.65E+027.40E+001.48E+021.09E+035.70E+03 - 52K 46.001.44E+001.02E+014.78E+012.07E+025.59E+001.03E+028.17E+025.10E+03 - 52K 52.001.03E+007.82E+004.21E+012.13E+023.91E+006.48E+015.41E+023.81E+03 - 52K 60.007.01E-015.46E+003.18E+011.76E+022.57E+003.77E+013.19E+022.40E+03 - 52K 72.004.25E-013.28E+001.97E+011.13E+021.52E+001.90E+011.56E+021.19E+03 - 52K 85.002.68E-011.99E+001.18E+016.71E+019.41E-011.03E+017.97E+015.87E+02 - 52K 102.001.61E-011.12E+006.35E+003.46E+015.60E-015.25E+003.76E+012.59E+02 - 52K 115.001.15E-017.61E-014.13E+002.16E+013.99E-013.39E+002.29E+011.49E+02 - 52K 132.007.79E-024.84E-012.49E+001.23E+012.71E-012.07E+001.29E+017.86E+01 - 52K 155.004.97E-022.83E-011.36E+006.27E+001.74E-011.17E+006.65E+003.70E+01 - 52K 180.003.28E-021.72E-017.68E-013.30E+001.15E-016.98E-013.61E+001.84E+01 - 52K 245.001.41E-026.19E-022.37E-018.74E-015.06E-022.47E-011.05E+004.43E+00 - 52K 330.006.41E-032.38E-027.85E-022.50E-012.33E-029.41E-023.35E-011.17E+00 - 52K 420.003.50E-031.15E-023.36E-029.52E-021.26E-024.46E-021.38E-014.19E-01 - 52K 530.002.02E-035.92E-031.56E-023.98E-027.13E-032.23E-026.10E-021.62E-01 - 52K 760.009.18E-042.35E-035.35E-031.17E-023.02E-038.09E-031.87E-024.14E-02 - 52K 1050.004.86E-041.12E-032.30E-034.48E-031.44E-033.45E-037.00E-031.35E-02 - 52K 1300.003.30E-047.20E-041.38E-032.52E-038.94E-042.02E-033.81E-036.84E-03 - 52K 1550.002.44E-045.09E-049.33E-041.61E-036.11E-041.32E-032.37E-034.02E-03 - 52L1 5.941.09E+013.19E+033.35E+056.81E+062.94E+022.12E+052.59E+077.76E+08 - 52L1 6.649.02E+001.70E+032.44E+058.43E+062.10E+021.24E+051.39E+075.20E+08 - 52L1 7.946.54E+005.82E+021.19E+056.27E+061.23E+025.32E+045.15E+062.27E+08 - 52L1 11.143.39E+005.58E+012.08E+041.54E+064.48E+011.09E+047.90E+053.59E+07 - 52L1 14.941.84E+004.25E+003.54E+032.99E+051.86E+012.82E+031.58E+056.49E+06 - 52L1 19.001.08E+001.37E+006.93E+026.53E+049.12E+009.47E+024.28E+041.55E+06 - 52L1 25.005.76E-011.81E+008.60E+019.70E+034.03E+002.79E+029.83E+032.97E+05 - 52L1 33.002.96E-011.54E+001.00E+011.19E+031.77E+008.29E+012.27E+035.60E+04 - 52L1 45.001.37E-019.01E-013.35E+001.03E+027.11E-012.21E+014.57E+028.82E+03 - 52L1 58.007.13E-024.98E-012.21E+001.98E+013.39E-017.69E+001.26E+021.98E+03 - 52L1 75.003.63E-022.50E-011.23E+007.01E+001.61E-012.71E+003.54E+014.48E+02 - 52L1 88.002.37E-021.58E-017.91E-014.15E+001.02E-011.44E+001.63E+011.80E+02 - 52L1 105.001.48E-029.29E-024.60E-012.30E+006.15E-027.21E-017.01E+006.70E+01 - 52L1 128.008.64E-035.03E-022.39E-011.13E+003.52E-023.39E-012.78E+002.25E+01 - 52L1 155.005.14E-032.75E-021.23E-015.48E-012.07E-021.66E-011.16E+008.06E+00 - 52L1 220.002.01E-039.02E-033.53E-021.37E-017.98E-034.75E-022.51E-011.32E+00 - 52L1 305.008.55E-043.25E-031.10E-023.71E-023.37E-031.57E-026.50E-022.67E-01 - 52L1 400.004.34E-041.44E-034.35E-031.29E-021.68E-036.55E-032.26E-027.67E-02 - 52L1 510.002.44E-047.31E-041.99E-035.30E-039.19E-043.11E-039.22E-032.68E-02 - 52L1 740.001.08E-042.83E-046.64E-041.51E-033.75E-041.06E-032.57E-036.06E-03 - 52L11000.005.98E-051.42E-043.01E-046.11E-041.87E-044.68E-049.99E-042.04E-03 - 52L11500.002.91E-056.19E-051.16E-042.07E-047.60E-051.68E-043.12E-045.47E-04 - 52L2 5.612.24E+012.02E+059.93E+076.33E+093.25E+018.96E+034.28E+058.07E+06 - 52L2 6.311.61E+011.12E+054.96E+073.90E+092.27E+015.64E+033.32E+051.02E+07 - 52L2 7.619.38E+004.36E+041.64E+071.49E+091.28E+012.69E+031.84E+058.11E+06 - 52L2 10.813.30E+007.50E+032.04E+061.89E+084.35E+006.69E+024.66E+042.46E+06 - 52L2 14.611.30E+001.67E+033.41E+052.82E+071.73E+002.01E+021.26E+046.34E+05 - 52L2 19.005.68E-014.52E+027.16E+045.13E+067.73E-017.06E+013.83E+031.73E+05 - 52L2 25.002.34E-011.16E+021.41E+048.41E+053.34E-012.36E+011.07E+034.13E+04 - 52L2 33.009.34E-022.97E+012.74E+031.33E+051.43E-017.81E+002.90E+029.28E+03 - 52L2 45.003.29E-026.53E+004.43E+021.69E+045.54E-022.28E+006.65E+011.70E+03 - 52L2 58.001.39E-021.91E+001.01E+023.12E+032.56E-028.33E-011.99E+014.16E+02 - 52L2 75.005.74E-035.56E-012.28E+015.69E+021.17E-023.02E-015.85E+001.00E+02 - 52L2 88.003.31E-032.59E-019.13E+001.99E+027.22E-031.61E-012.74E+004.12E+01 - 52L2 105.001.80E-031.13E-013.34E+006.27E+014.23E-038.09E-021.19E+001.55E+01 - 52L2 128.009.09E-044.46E-021.10E+001.74E+012.33E-033.75E-024.68E-015.21E+00 - 52L2 155.004.71E-041.84E-023.79E-015.13E+001.31E-031.79E-021.92E-011.84E+00 - 52L2 220.001.44E-043.78E-035.66E-025.76E-014.59E-044.72E-033.85E-022.80E-01 - 52L2 305.004.88E-059.04E-041.02E-028.05E-021.74E-041.40E-038.92E-035.11E-02 - 52L2 400.002.04E-052.88E-042.60E-031.68E-027.86E-055.20E-042.74E-031.30E-02 - 52L2 510.009.60E-061.07E-048.02E-044.36E-033.87E-052.19E-049.84E-043.98E-03 - 52L2 740.003.17E-062.56E-051.46E-046.25E-041.33E-056.04E-052.18E-047.07E-04 - 52L21000.001.38E-068.66E-064.05E-051.45E-045.67E-062.22E-056.85E-051.90E-04 - 52L21500.004.71E-072.25E-068.28E-062.42E-051.84E-066.08E-061.58E-053.66E-05 - 52L3 5.344.64E+014.26E+052.28E+081.57E+109.60E+002.62E+058.54E+082.81E+11 - 52L3 6.043.24E+012.28E+051.09E+089.11E+096.57E+001.42E+053.70E+081.09E+11 - 52L3 7.341.83E+018.48E+043.36E+073.22E+093.60E+005.35E+049.88E+072.44E+10 - 52L3 10.546.05E+001.36E+043.79E+063.60E+081.18E+008.81E+038.71E+061.54E+09 - 52L3 14.342.29E+002.85E+035.87E+054.93E+074.58E-011.90E+031.13E+061.50E+08 - 52L3 19.009.19E-016.88E+021.07E+057.61E+061.93E-014.68E+021.79E+051.82E+07 - 52L3 25.003.70E-011.72E+022.03E+041.19E+068.32E-021.20E+023.03E+042.39E+06 - 52L3 33.001.45E-014.25E+013.77E+031.80E+053.55E-023.02E+015.14E+033.14E+05 - 52L3 45.004.96E-028.95E+005.76E+022.14E+041.38E-026.51E+007.32E+023.35E+04 - 52L3 58.002.05E-022.51E+001.24E+023.72E+036.35E-031.87E+001.52E+025.53E+03 - 52L3 75.008.27E-036.94E-012.63E+016.31E+022.91E-035.30E-013.17E+019.15E+02 - 52L3 88.004.70E-033.13E-011.01E+012.10E+021.79E-032.43E-011.21E+013.04E+02 - 52L3 105.002.52E-031.30E-013.48E+006.21E+011.05E-031.03E-014.24E+009.10E+01 - 52L3 128.001.25E-034.90E-021.07E+001.60E+015.77E-043.98E-021.32E+002.40E+01 - 52L3 155.006.40E-041.92E-023.42E-014.32E+003.25E-041.60E-024.37E-016.74E+00 - 52L3 220.001.91E-043.54E-034.37E-024.06E-011.15E-043.09E-035.99E-026.99E-01 - 52L3 305.006.44E-057.62E-046.71E-034.69E-024.45E-056.90E-049.88E-039.02E-02 - 52L3 400.002.71E-052.23E-041.48E-038.26E-032.06E-052.06E-042.31E-031.74E-02 - 52L3 510.001.29E-057.80E-054.05E-041.85E-031.05E-057.24E-056.48E-044.17E-03 - 52L3 740.004.41E-061.73E-056.27E-052.15E-043.96E-061.59E-059.93E-055.08E-04 - 52L31000.002.02E-065.78E-061.59E-054.41E-051.89E-065.20E-062.35E-051.00E-04 - 52L31500.007.92E-071.57E-063.16E-066.67E-067.65E-071.40E-063.91E-061.27E-05 - 52M1 2.011.30E+014.36E+041.85E+061.94E+091.50E+039.37E+069.71E+092.44E+12 - 52M1 3.017.64E+007.97E+039.81E+054.35E+074.45E+021.29E+067.19E+081.46E+11 - 52M1 5.013.27E+007.20E+021.77E+051.07E+079.66E+011.08E+052.95E+074.20E+09 - 52M1 9.011.05E+002.50E+011.09E+041.01E+061.67E+016.49E+038.41E+057.46E+07 - 52M1 16.013.08E-015.66E-013.75E+023.85E+043.00E+004.46E+022.97E+041.60E+06 - 52M1 26.001.01E-014.26E-011.28E+011.50E+037.09E-015.00E+011.97E+036.87E+04 - 52M1 41.003.31E-022.15E-011.01E+005.21E+011.85E-016.87E+001.70E+023.93E+03 - 52M1 53.001.73E-021.20E-015.53E-018.77E+008.70E-022.32E+004.46E+018.17E+02 - 52M1 71.008.08E-035.57E-022.78E-011.98E+003.72E-026.96E-011.01E+011.42E+02 - 52M1 104.002.92E-031.83E-029.10E-024.80E-011.25E-021.53E-011.56E+001.56E+01 - 52M1 150.001.09E-035.88E-032.66E-021.22E-014.47E-033.80E-022.81E-012.06E+00 - 52M1 280.002.07E-048.22E-042.90E-031.02E-028.32E-044.17E-031.87E-028.29E-02 - 52M1 500.005.00E-051.51E-044.15E-041.12E-031.90E-046.55E-041.98E-035.89E-03 - 52M2 1.873.08E+019.88E+063.18E+101.32E+131.80E+023.24E+051.00E+081.33E+10 - 52M2 2.871.39E+011.15E+061.98E+096.64E+114.93E+014.73E+041.18E+071.74E+09 - 52M2 4.874.27E+008.12E+046.93E+071.65E+109.93E+004.71E+038.41E+051.07E+08 - 52M2 8.879.09E-014.05E+031.67E+062.57E+081.61E+003.71E+024.28E+043.94E+06 - 52M2 15.871.72E-012.24E+024.80E+044.66E+062.75E-013.34E+012.45E+031.50E+05 - 52M2 26.003.77E-021.97E+012.47E+031.59E+056.14E-024.48E+002.19E+029.17E+03 - 52M2 41.008.69E-032.13E+001.66E+027.21E+031.54E-027.17E-012.38E+016.92E+02 - 52M2 53.003.71E-036.14E-013.68E+011.28E+037.07E-032.57E-016.87E+001.61E+02 - 52M2 71.001.39E-031.51E-016.73E+001.81E+022.92E-038.08E-021.68E+003.09E+01 - 52M2 104.003.80E-042.48E-027.58E-011.46E+019.21E-041.80E-022.72E-013.64E+00 - 52M2 150.001.09E-044.53E-039.74E-021.38E+003.06E-044.36E-034.85E-024.83E-01 - 52M2 280.001.35E-052.78E-043.41E-032.89E-024.78E-054.11E-042.81E-031.72E-02 - 52M2 500.002.16E-062.48E-051.89E-041.05E-038.76E-065.03E-052.30E-049.45E-04 - 52M3 1.826.71E+011.95E+076.47E+102.69E+135.02E+011.24E+073.47E+119.53E+14 - 52M3 2.822.83E+012.14E+063.74E+091.24E+121.33E+011.39E+061.67E+102.32E+13 - 52M3 4.828.09E+001.43E+051.22E+082.85E+102.59E+009.56E+044.20E+082.70E+11 - 52M3 8.821.62E+006.79E+032.75E+064.13E+084.09E-014.68E+036.93E+062.04E+09 - 52M3 15.822.89E-013.57E+027.41E+046.99E+066.88E-022.54E+021.41E+052.09E+07 - 52M3 26.006.02E-022.93E+013.53E+032.20E+051.51E-022.15E+015.49E+034.75E+05 - 52M3 41.001.33E-022.99E+002.20E+029.23E+033.80E-032.25E+003.01E+021.63E+04 - 52M3 53.005.57E-038.28E-014.64E+011.55E+031.74E-036.34E-016.05E+012.55E+03 - 52M3 71.002.03E-031.93E-017.92E+002.04E+027.20E-041.51E-011.00E+013.19E+02 - 52M3 104.005.37E-042.90E-027.96E-011.45E+012.28E-042.36E-021.01E+002.26E+01 - 52M3 150.001.50E-044.81E-038.96E-021.18E+007.60E-054.07E-031.17E-011.91E+00 - 52M3 280.001.81E-052.43E-042.36E-031.78E-021.21E-052.21E-043.47E-033.43E-02 - 52M3 500.002.93E-061.82E-059.72E-054.52E-042.38E-061.71E-051.57E-041.03E-03 - 52M4 1.581.42E+025.62E+054.96E+109.32E+141.33E+013.35E+054.91E+096.77E+12 - 52M4 2.582.87E+014.56E+041.58E+091.31E+132.66E+002.85E+041.83E+081.72E+11 - 52M4 4.583.80E+002.42E+032.76E+079.37E+103.90E-011.59E+034.11E+062.36E+09 - 52M4 8.583.55E-019.60E+013.26E+054.53E+084.49E-026.64E+016.94E+042.26E+07 - 52M4 15.583.25E-024.29E+004.80E+033.04E+065.42E-033.22E+001.52E+032.85E+05 - 52M4 26.003.80E-032.86E-011.30E+024.35E+048.40E-042.39E-015.97E+016.90E+03 - 52M4 41.005.30E-042.50E-025.29E+001.03E+031.54E-042.37E-023.45E+002.59E+02 - 52M4 53.001.72E-046.30E-038.81E-011.28E+025.85E-056.45E-037.01E-014.13E+01 - 52M4 71.004.73E-051.31E-031.16E-011.21E+011.92E-051.47E-031.15E-015.16E+00 - 52M4 104.008.74E-061.69E-048.45E-035.74E-014.43E-062.14E-041.11E-023.51E-01 - 52M4 150.001.73E-062.43E-057.16E-043.24E-021.07E-063.39E-051.21E-032.76E-02 - 52M4 280.001.16E-079.82E-071.24E-052.84E-049.60E-081.53E-063.00E-054.02E-04 - 52M4 500.001.15E-085.88E-083.76E-074.47E-061.04E-089.23E-081.08E-069.31E-06 - 52M5 1.572.11E+027.53E+057.95E+101.41E+158.22E+003.85E+042.38E+101.92E+15 - 52M5 2.574.18E+015.99E+042.48E+091.92E+131.65E+003.30E+037.59E+082.36E+13 - 52M5 4.575.44E+003.13E+034.26E+071.34E+112.44E-011.88E+021.36E+071.43E+11 - 52M5 8.574.99E-011.22E+024.96E+056.31E+082.90E-028.24E+001.68E+055.65E+08 - 52M5 15.574.48E-025.34E+007.15E+034.11E+063.63E-034.28E-012.61E+033.17E+06 - 52M5 26.005.16E-033.47E-011.88E+025.65E+045.83E-043.42E-027.34E+014.00E+04 - 52M5 41.007.11E-042.95E-027.41E+001.29E+031.11E-043.66E-033.11E+008.77E+02 - 52M5 53.002.29E-047.28E-031.20E+001.54E+024.31E-051.05E-035.26E-011.05E+02 - 52M5 71.006.25E-051.47E-031.53E-011.38E+011.46E-052.53E-047.03E-029.65E+00 - 52M5 104.001.14E-051.83E-041.05E-026.09E-013.51E-064.04E-055.17E-034.48E-01 - 52M5 150.002.29E-062.52E-058.24E-043.12E-028.99E-077.13E-064.36E-042.49E-02 - 52M5 280.001.70E-079.60E-071.21E-052.16E-049.23E-084.11E-077.26E-062.07E-04 - 52M5 500.001.71E-086.10E-083.14E-072.62E-061.26E-083.49E-082.12E-072.91E-06 - 52N+ 50.007.04E-034.56E-012.79E+011.11E+032.72E-021.05E+004.17E+011.54E+03 - 52N+ 70.002.72E-039.50E-023.77E+001.06E+021.02E-022.47E-016.17E+001.51E+02 - 52N+ 100.009.89E-041.92E-024.73E-019.27E+003.65E-035.65E-028.94E-011.44E+01 - 52N+ 150.003.14E-043.46E-034.89E-026.29E-011.16E-031.14E-021.13E-011.16E+00 - 52N+ 200.001.41E-041.10E-031.06E-021.00E-015.27E-043.89E-032.83E-022.15E-01 - 52N+ 500.001.31E-054.58E-051.64E-046.14E-044.82E-051.75E-045.80E-041.94E-03 - 53K 34.173.24E+001.09E+017.32E+002.13E+001.48E+013.50E+021.39E+031.28E+03 - 53K 34.873.06E+001.13E+011.13E+016.49E+001.39E+013.22E+021.40E+031.91E+03 - 53K 36.172.78E+001.17E+011.83E+012.03E+011.25E+012.80E+021.38E+032.94E+03 - 53K 39.372.23E+001.17E+013.15E+017.15E+019.72E+002.03E+021.23E+034.49E+03 - 53K 43.171.75E+001.07E+013.92E+011.29E+027.41E+001.43E+029.93E+024.90E+03 - 53K 47.001.40E+009.29E+004.06E+011.63E+025.78E+001.04E+027.77E+024.52E+03 - 53K 53.001.01E+007.24E+003.67E+011.74E+024.06E+006.57E+015.23E+023.48E+03 - 53K 61.006.91E-015.14E+002.84E+011.50E+022.70E+003.86E+013.14E+022.25E+03 - 53K 73.004.22E-013.13E+001.80E+019.95E+011.60E+001.97E+011.56E+021.15E+03 - 53K 86.002.68E-011.93E+001.10E+016.04E+011.00E+001.07E+018.09E+015.77E+02 - 53K 103.001.62E-011.10E+006.03E+003.19E+015.98E-015.52E+003.86E+012.60E+02 - 53K 116.001.16E-017.50E-013.97E+002.02E+014.27E-013.59E+002.36E+011.51E+02 - 53K 133.007.93E-024.80E-012.41E+001.17E+012.91E-012.20E+001.34E+018.02E+01 - 53K 156.005.08E-022.84E-011.33E+006.02E+001.87E-011.25E+006.97E+003.82E+01 - 53K 185.003.17E-021.61E-016.99E-012.92E+001.17E-016.92E-013.48E+001.73E+01 - 53K 250.001.39E-025.99E-022.24E-018.11E-015.24E-022.51E-011.05E+004.33E+00 - 53K 335.006.47E-032.36E-027.66E-022.41E-012.44E-029.76E-023.42E-011.18E+00 - 53K 420.003.68E-031.20E-023.48E-029.83E-021.38E-024.85E-021.49E-014.50E-01 - 53K 530.002.12E-036.20E-031.63E-024.14E-027.75E-032.43E-026.60E-021.75E-01 - 53K 760.009.67E-042.47E-035.63E-031.23E-023.27E-038.78E-032.02E-024.46E-02 - 53K 1050.005.13E-041.19E-032.43E-034.74E-031.55E-033.73E-037.57E-031.46E-02 - 53K 1300.003.49E-047.63E-041.47E-032.67E-039.64E-042.18E-034.12E-037.38E-03 - 53K 1550.002.58E-045.39E-049.91E-041.72E-036.58E-041.42E-032.56E-034.34E-03 - 53L1 6.191.01E+012.88E+032.85E+055.36E+062.88E+021.98E+052.31E+076.57E+08 - 53L1 6.898.40E+001.57E+032.12E+056.78E+062.09E+021.19E+051.27E+074.50E+08 - 53L1 8.196.16E+005.64E+021.07E+055.27E+061.25E+025.22E+044.87E+062.04E+08 - 53L1 11.393.26E+005.99E+012.01E+041.40E+064.65E+011.11E+047.86E+053.43E+07 - 53L1 15.191.79E+005.22E+003.63E+032.89E+051.97E+012.95E+031.62E+056.45E+06 - 53L1 19.001.10E+001.30E+008.22E+027.18E+041.01E+011.07E+034.80E+041.70E+06 - 53L1 25.005.87E-011.57E+001.09E+021.11E+044.47E+003.14E+021.10E+043.28E+05 - 53L1 33.003.03E-011.42E+001.26E+011.42E+031.97E+009.31E+012.54E+036.19E+04 - 53L1 45.001.41E-018.65E-013.24E+001.28E+027.88E-012.47E+015.09E+029.75E+03 - 53L1 58.007.36E-024.88E-012.07E+002.26E+013.75E-018.58E+001.41E+022.19E+03 - 53L1 75.003.76E-022.49E-011.18E+007.11E+001.78E-013.02E+003.93E+014.95E+02 - 53L1 88.002.46E-021.58E-017.66E-014.10E+001.12E-011.60E+001.81E+011.99E+02 - 53L1 105.001.54E-029.38E-024.51E-012.26E+006.80E-028.01E-017.76E+007.39E+01 - 53L1 128.009.01E-035.12E-022.38E-011.12E+003.89E-023.76E-013.08E+002.48E+01 - 53L1 155.005.37E-032.81E-021.24E-015.48E-012.28E-021.84E-011.28E+008.88E+00 - 53L1 220.002.10E-039.32E-033.60E-021.39E-018.80E-035.25E-022.77E-011.45E+00 - 53L1 305.008.99E-043.38E-031.14E-023.82E-023.71E-031.73E-027.15E-022.93E-01 - 53L1 400.004.58E-041.51E-034.55E-031.35E-021.85E-037.20E-032.48E-028.40E-02 - 53L1 510.002.59E-047.70E-042.09E-035.57E-031.01E-033.41E-031.01E-022.93E-02 - 53L1 740.001.15E-043.00E-047.04E-041.61E-034.10E-041.16E-032.82E-036.63E-03 - 53L11000.006.35E-051.51E-043.21E-046.52E-042.03E-045.12E-041.09E-032.23E-03 - 53L11500.003.09E-056.60E-051.24E-042.21E-048.24E-051.83E-043.40E-045.96E-04 - 53L2 5.852.07E+011.81E+058.48E+075.11E+093.19E+018.35E+033.77E+056.56E+06 - 53L2 6.551.51E+011.02E+054.35E+073.23E+092.25E+015.35E+032.97E+058.48E+06 - 53L2 7.858.96E+004.12E+041.49E+071.29E+091.29E+012.62E+031.70E+057.01E+06 - 53L2 11.053.25E+007.43E+031.97E+061.75E+084.54E+006.76E+024.52E+042.27E+06 - 53L2 14.851.31E+001.70E+033.40E+052.73E+071.84E+002.09E+021.26E+046.13E+05 - 53L2 19.006.03E-015.00E+027.89E+045.55E+068.64E-017.82E+014.16E+031.83E+05 - 53L2 25.002.49E-011.29E+021.56E+049.15E+053.73E-012.62E+011.17E+034.43E+04 - 53L2 33.001.00E-013.29E+013.02E+031.45E+051.60E-018.67E+003.18E+021.01E+04 - 53L2 45.003.54E-027.23E+004.90E+021.85E+046.21E-022.53E+007.33E+011.85E+03 - 53L2 58.001.50E-022.12E+001.12E+023.43E+032.87E-029.28E-012.19E+014.56E+02 - 53L2 75.006.22E-036.17E-012.53E+016.28E+021.32E-023.37E-016.48E+001.10E+02 - 53L2 88.003.60E-032.88E-011.01E+012.20E+028.12E-031.80E-013.04E+004.54E+01 - 53L2 105.001.96E-031.25E-013.72E+006.95E+014.76E-039.05E-021.32E+001.71E+01 - 53L2 128.009.93E-044.97E-021.22E+001.93E+012.62E-034.20E-025.21E-015.78E+00 - 53L2 155.005.16E-042.05E-024.23E-015.71E+001.48E-032.01E-022.14E-012.04E+00 - 53L2 220.001.58E-044.22E-036.33E-026.42E-015.19E-045.31E-034.31E-023.13E-01 - 53L2 305.005.39E-051.01E-031.14E-029.00E-021.97E-041.58E-031.00E-025.71E-02 - 53L2 400.002.25E-053.23E-042.92E-031.88E-028.91E-055.88E-043.09E-031.46E-02 - 53L2 510.001.06E-051.20E-049.03E-044.90E-034.40E-052.48E-041.11E-034.47E-03 - 53L2 740.003.57E-062.88E-051.65E-047.05E-041.51E-056.86E-052.47E-047.98E-04 - 53L21000.001.53E-069.76E-064.58E-051.64E-046.45E-062.52E-057.77E-052.15E-04 - 53L21500.005.28E-072.54E-069.37E-062.74E-052.09E-066.92E-061.79E-054.16E-05 - 53L3 5.564.30E+013.82E+051.96E+081.28E+109.27E+002.46E+057.68E+082.43E+11 - 53L3 6.263.05E+012.10E+059.62E+077.63E+096.43E+001.36E+053.43E+089.72E+10 - 53L3 7.561.75E+018.04E+043.09E+072.81E+093.60E+005.30E+049.55E+072.28E+10 - 53L3 10.765.96E+001.34E+043.66E+063.35E+081.21E+009.11E+038.92E+061.54E+09 - 53L3 14.562.30E+002.91E+035.87E+054.78E+074.78E-012.02E+031.20E+061.56E+08 - 53L3 19.009.72E-017.56E+021.17E+058.19E+062.11E-015.36E+022.09E+052.12E+07 - 53L3 25.003.92E-011.89E+022.22E+041.29E+069.08E-021.37E+023.52E+042.77E+06 - 53L3 33.001.54E-014.67E+014.13E+031.95E+053.88E-023.45E+015.97E+033.63E+05 - 53L3 45.005.30E-029.83E+006.32E+022.32E+041.50E-027.44E+008.46E+023.87E+04 - 53L3 58.002.19E-022.76E+001.36E+024.05E+036.94E-032.13E+001.76E+026.36E+03 - 53L3 75.008.89E-037.63E-012.89E+016.89E+023.18E-036.04E-013.65E+011.05E+03 - 53L3 88.005.06E-033.44E-011.10E+012.29E+021.96E-032.77E-011.39E+013.48E+02 - 53L3 105.002.71E-031.43E-013.83E+006.80E+011.15E-031.18E-014.86E+001.04E+02 - 53L3 128.001.35E-035.39E-021.17E+001.75E+016.31E-044.53E-021.52E+002.74E+01 - 53L3 155.006.93E-042.11E-023.76E-014.74E+003.56E-041.82E-024.99E-017.71E+00 - 53L3 220.002.07E-043.90E-034.82E-024.46E-011.26E-043.50E-036.83E-027.97E-01 - 53L3 305.006.97E-058.40E-047.40E-035.16E-024.87E-057.79E-041.12E-021.03E-01 - 53L3 400.002.93E-052.46E-041.64E-039.10E-032.25E-052.32E-042.62E-031.98E-02 - 53L3 510.001.39E-058.59E-054.47E-042.04E-031.15E-058.13E-057.34E-044.73E-03 - 53L3 740.004.82E-061.91E-056.93E-052.37E-044.33E-061.78E-051.12E-045.75E-04 - 53L31000.002.23E-066.34E-061.76E-054.86E-052.06E-065.77E-062.64E-051.13E-04 - 53L31500.008.66E-071.72E-063.48E-067.36E-068.34E-071.54E-064.37E-061.43E-05 - 53M1 2.071.23E+014.13E+041.79E+061.69E+091.52E+039.22E+069.30E+092.25E+12 - 53M1 3.077.34E+007.94E+039.20E+054.50E+074.67E+021.33E+067.36E+081.46E+11 - 53M1 5.073.20E+007.62E+021.75E+059.92E+061.04E+021.16E+053.17E+074.43E+09 - 53M1 9.071.05E+002.93E+011.15E+041.02E+061.83E+017.19E+039.31E+058.16E+07 - 53M1 16.073.12E-016.37E-014.27E+024.14E+043.31E+004.99E+023.32E+041.78E+06 - 53M1 26.001.04E-013.90E-011.62E+011.74E+037.93E-015.68E+012.24E+037.80E+04 - 53M1 41.003.43E-022.08E-011.07E+006.43E+012.06E-017.77E+001.92E+024.43E+03 - 53M1 53.001.79E-021.18E-015.36E-011.06E+019.72E-022.62E+005.03E+019.19E+02 - 53M1 71.008.41E-035.58E-022.69E-012.13E+004.15E-027.83E-011.14E+011.60E+02 - 53M1 104.003.06E-031.86E-029.02E-024.84E-011.39E-021.71E-011.74E+001.75E+01 - 53M1 150.001.15E-036.05E-032.69E-021.23E-014.98E-034.24E-023.13E-012.29E+00 - 53M1 280.002.20E-048.61E-043.01E-031.06E-029.23E-044.64E-032.07E-029.20E-02 - 53M1 500.005.32E-051.60E-044.39E-041.19E-032.10E-047.25E-042.19E-036.51E-03 - 53M2 1.932.90E+019.38E+062.93E+101.17E+131.84E+023.20E+059.55E+071.19E+10 - 53M2 2.931.35E+011.16E+061.96E+096.38E+115.20E+014.90E+041.19E+071.68E+09 - 53M2 4.934.27E+008.51E+047.22E+071.68E+101.08E+015.05E+038.82E+051.09E+08 - 53M2 8.939.34E-014.37E+031.80E+062.72E+081.78E+004.06E+024.61E+044.16E+06 - 53M2 15.931.80E-012.46E+025.26E+045.04E+063.06E-013.70E+012.67E+031.62E+05 - 53M2 26.004.04E-022.20E+012.77E+031.77E+056.93E-025.04E+002.44E+021.01E+04 - 53M2 41.009.39E-032.38E+001.86E+028.04E+031.74E-028.07E-012.66E+017.67E+02 - 53M2 53.004.03E-036.88E-014.13E+011.43E+038.01E-032.90E-017.69E+001.80E+02 - 53M2 71.001.52E-031.69E-017.56E+002.03E+023.31E-039.11E-021.88E+003.45E+01 - 53M2 104.004.17E-042.78E-028.52E-011.64E+011.05E-032.04E-023.06E-014.08E+00 - 53M2 150.001.21E-045.10E-031.10E-011.55E+003.49E-044.94E-035.47E-025.42E-01 - 53M2 280.001.51E-053.14E-043.86E-033.27E-025.46E-054.68E-043.19E-031.95E-02 - 53M2 500.002.41E-062.81E-052.15E-041.19E-031.00E-055.75E-052.62E-041.07E-03 - 53M3 1.876.38E+011.85E+076.00E+102.41E+135.04E+011.24E+073.37E+119.05E+14 - 53M3 2.872.76E+012.15E+063.71E+091.19E+121.38E+011.46E+061.75E+102.40E+13 - 53M3 4.878.11E+001.50E+051.27E+082.90E+102.75E+001.04E+054.63E+082.98E+11 - 53M3 8.871.66E+007.29E+032.94E+064.35E+084.42E-015.25E+037.90E+062.33E+09 - 53M3 15.873.03E-013.89E+028.06E+047.52E+067.50E-022.89E+021.63E+052.42E+07 - 53M3 26.006.42E-023.26E+013.92E+032.42E+051.67E-022.48E+016.47E+035.62E+05 - 53M3 41.001.43E-023.32E+002.45E+021.02E+044.19E-032.60E+003.53E+021.92E+04 - 53M3 53.006.01E-039.20E-015.15E+011.71E+031.92E-037.32E-017.08E+012.98E+03 - 53M3 71.002.20E-032.14E-018.80E+002.25E+027.94E-041.74E-011.17E+013.72E+02 - 53M3 104.005.84E-043.23E-028.86E-011.61E+012.51E-042.71E-021.17E+002.62E+01 - 53M3 150.001.64E-045.35E-039.98E-021.31E+008.40E-054.67E-031.36E-012.22E+00 - 53M3 280.001.98E-052.71E-042.63E-031.98E-021.34E-052.52E-044.00E-033.95E-02 - 53M3 500.003.20E-062.03E-051.08E-045.04E-042.64E-061.94E-051.80E-041.19E-03 - 53M4 1.631.38E+025.39E+054.66E+108.59E+141.35E+013.37E+054.83E+096.44E+12 - 53M4 2.632.90E+014.64E+041.61E+091.33E+132.82E+003.05E+041.94E+081.78E+11 - 53M4 4.633.99E+002.57E+032.98E+071.02E+114.24E-011.77E+034.60E+062.60E+09 - 53M4 8.633.84E-011.05E+023.66E+055.13E+085.00E-027.59E+017.98E+042.58E+07 - 53M4 15.633.58E-024.77E+005.48E+033.51E+066.11E-033.74E+001.77E+033.30E+05 - 53M4 26.004.28E-033.25E-011.51E+025.14E+049.63E-042.82E-017.10E+018.18E+03 - 53M4 41.006.03E-042.87E-026.18E+001.22E+031.78E-042.80E-024.10E+003.07E+02 - 53M4 53.001.96E-047.24E-031.03E+001.51E+026.75E-057.62E-038.33E-014.90E+01 - 53M4 71.005.38E-051.51E-031.36E-011.43E+012.22E-051.73E-031.37E-016.13E+00 - 53M4 104.009.93E-061.96E-049.90E-036.79E-015.14E-062.53E-041.33E-024.17E-01 - 53M4 150.001.99E-062.83E-058.40E-043.84E-021.25E-064.02E-051.45E-033.28E-02 - 53M4 280.001.41E-071.15E-061.46E-053.36E-041.12E-071.82E-063.57E-054.79E-04 - 53M4 500.001.37E-086.99E-084.43E-075.32E-061.22E-081.10E-071.29E-061.11E-05 - 53M5 1.622.04E+027.19E+057.52E+101.31E+158.35E+003.84E+042.35E+101.85E+15 - 53M5 2.624.23E+016.07E+042.54E+091.96E+131.74E+003.49E+038.12E+082.52E+13 - 53M5 4.625.71E+003.31E+034.63E+071.46E+112.65E-012.06E+021.54E+071.63E+11 - 53M5 8.625.39E-011.33E+025.58E+057.14E+083.21E-029.25E+001.97E+056.72E+08 - 53M5 15.624.93E-025.90E+008.19E+034.74E+064.07E-034.86E-013.10E+033.85E+06 - 53M5 26.005.80E-033.92E-012.20E+026.67E+046.63E-043.94E-028.91E+014.95E+04 - 53M5 41.008.06E-043.35E-028.68E+001.52E+031.27E-044.23E-033.77E+001.08E+03 - 53M5 53.002.60E-048.29E-031.41E+001.82E+024.93E-051.21E-036.38E-011.29E+02 - 53M5 71.007.11E-051.68E-031.79E-011.63E+011.67E-052.93E-048.50E-021.18E+01 - 53M5 104.001.31E-052.09E-041.23E-027.18E-014.04E-064.67E-056.24E-035.47E-01 - 53M5 150.002.63E-062.89E-059.66E-043.68E-021.04E-068.25E-065.25E-043.03E-02 - 53M5 280.001.97E-071.11E-061.42E-052.55E-041.07E-074.76E-078.68E-062.50E-04 - 53M5 500.002.16E-086.81E-083.69E-073.08E-061.46E-084.05E-082.51E-073.51E-06 - 53N+ 50.007.63E-035.22E-013.24E+011.29E+033.12E-021.22E+004.97E+011.86E+03 - 53N+ 70.002.95E-031.08E-014.36E+001.23E+021.17E-022.87E-017.30E+001.81E+02 - 53N+ 100.001.07E-032.17E-025.46E-011.08E+014.18E-036.55E-021.05E+001.71E+01 - 53N+ 150.003.42E-043.87E-035.61E-027.28E-011.33E-031.32E-021.31E-011.36E+00 - 53N+ 200.001.53E-041.22E-031.21E-021.16E-016.02E-044.47E-033.28E-022.51E-01 - 53N+ 500.001.44E-055.06E-051.84E-046.97E-045.47E-051.99E-046.62E-042.23E-03 - 54K 35.562.99E+009.62E+006.11E+001.65E+001.45E+013.26E+021.24E+031.09E+03 - 54K 36.262.83E+009.93E+009.30E+004.96E+001.36E+013.02E+021.25E+031.61E+03 - 54K 37.562.58E+001.03E+011.50E+011.54E+011.22E+012.63E+021.24E+032.47E+03 - 54K 40.762.09E+001.03E+012.60E+015.48E+019.64E+001.93E+021.11E+033.80E+03 - 54K 44.561.65E+009.51E+003.27E+011.01E+027.42E+001.38E+029.09E+024.22E+03 - 54K 49.001.28E+008.17E+003.43E+011.33E+025.61E+009.61E+016.93E+023.88E+03 - 54K 55.009.42E-016.44E+003.12E+011.42E+024.00E+006.21E+014.74E+023.02E+03 - 54K 63.006.52E-014.64E+002.45E+011.23E+022.69E+003.72E+012.90E+022.00E+03 - 54K 75.004.05E-012.88E+001.59E+018.42E+011.63E+001.94E+011.48E+021.05E+03 - 54K 88.002.60E-011.80E+009.90E+005.24E+011.03E+001.07E+017.83E+015.40E+02 - 54K 105.001.59E-011.04E+005.54E+002.84E+016.20E-015.61E+003.81E+012.49E+02 - 54K 118.001.15E-017.19E-013.69E+001.83E+014.46E-013.67E+002.36E+011.47E+02 - 54K 135.007.90E-024.65E-012.27E+001.07E+013.06E-012.27E+001.36E+017.90E+01 - 54K 158.005.10E-022.78E-011.27E+005.63E+001.98E-011.30E+007.11E+003.81E+01 - 54K 185.003.30E-021.65E-017.06E-012.91E+001.28E-017.53E-013.75E+001.84E+01 - 54K 250.001.46E-026.18E-022.29E-018.19E-015.72E-022.73E-011.13E+004.63E+00 - 54K 335.006.78E-032.45E-027.88E-022.46E-012.66E-021.06E-013.69E-011.26E+00 - 54K 430.003.65E-031.16E-023.33E-029.27E-021.41E-024.90E-021.48E-014.39E-01 - 54K 540.002.14E-036.17E-031.60E-024.03E-028.04E-032.49E-026.68E-021.75E-01 - 54K 770.009.93E-042.52E-035.71E-031.24E-023.43E-039.17E-032.09E-024.59E-02 - 54K 1050.005.42E-041.26E-032.57E-035.01E-031.68E-034.04E-038.17E-031.57E-02 - 54K 1300.003.68E-048.08E-041.56E-032.83E-031.04E-032.36E-034.45E-037.96E-03 - 54K 1550.002.73E-045.71E-041.05E-031.82E-037.07E-041.53E-032.76E-034.67E-03 - 54L1 6.459.29E+002.58E+032.41E+054.19E+062.81E+021.84E+052.05E+075.52E+08 - 54L1 7.157.79E+001.45E+031.83E+055.42E+062.07E+021.12E+051.16E+073.86E+08 - 54L1 8.455.78E+005.42E+029.55E+044.39E+061.25E+025.09E+044.58E+061.81E+08 - 54L1 11.653.12E+006.35E+011.93E+041.26E+064.81E+011.13E+047.75E+053.25E+07 - 54L1 15.451.74E+006.28E+003.68E+032.77E+052.07E+013.07E+031.65E+056.36E+06 - 54L1 19.001.11E+001.40E+009.63E+027.84E+041.12E+011.20E+035.36E+041.87E+06 - 54L1 25.005.98E-011.35E+001.35E+021.26E+044.95E+003.52E+021.23E+043.61E+05 - 54L1 33.003.10E-011.30E+001.61E+011.68E+032.18E+001.04E+022.83E+036.82E+04 - 54L1 45.001.45E-018.26E-013.25E+001.57E+028.73E-012.76E+015.66E+021.08E+04 - 54L1 58.007.59E-024.76E-011.94E+002.65E+014.15E-019.57E+001.56E+022.42E+03 - 54L1 75.003.89E-022.47E-011.12E+007.39E+001.97E-013.36E+004.35E+015.46E+02 - 54L1 88.002.55E-021.58E-017.40E-014.10E+001.24E-011.77E+002.00E+012.20E+02 - 54L1 105.001.59E-029.45E-024.42E-012.23E+007.52E-028.88E-018.59E+008.14E+01 - 54L1 128.009.37E-035.20E-022.36E-011.11E+004.30E-024.16E-013.40E+002.73E+01 - 54L1 155.005.61E-032.87E-021.24E-015.48E-012.52E-022.04E-011.42E+009.76E+00 - 54L1 220.002.21E-039.61E-033.67E-021.41E-019.69E-035.79E-023.04E-011.59E+00 - 54L1 305.009.47E-043.52E-031.18E-023.95E-024.08E-031.90E-027.85E-023.21E-01 - 54L1 400.004.84E-041.59E-034.74E-031.41E-022.03E-037.90E-032.72E-029.20E-02 - 54L1 510.002.73E-048.10E-042.19E-035.86E-031.10E-033.74E-031.11E-023.20E-02 - 54L1 740.001.22E-043.17E-047.46E-041.70E-034.47E-041.27E-033.08E-037.23E-03 - 54L11000.006.74E-051.61E-043.41E-046.96E-042.21E-045.58E-041.19E-032.43E-03 - 54L11500.003.28E-057.03E-051.33E-042.37E-048.93E-051.99E-043.70E-046.49E-04 - 54L2 6.101.91E+011.61E+057.22E+074.11E+093.12E+017.76E+033.31E+055.31E+06 - 54L2 6.801.41E+019.34E+043.81E+072.66E+092.24E+015.07E+032.65E+057.02E+06 - 54L2 8.108.54E+003.88E+041.36E+071.11E+091.31E+012.54E+031.56E+056.03E+06 - 54L2 11.303.19E+007.33E+031.89E+061.61E+084.73E+006.81E+024.37E+042.09E+06 - 54L2 15.101.31E+001.73E+033.38E+052.63E+071.95E+002.15E+021.26E+045.89E+05 - 54L2 19.006.39E-015.52E+028.68E+045.99E+069.64E-018.64E+014.50E+031.93E+05 - 54L2 25.002.65E-011.42E+021.71E+049.94E+054.17E-012.90E+011.28E+034.74E+04 - 54L2 33.001.07E-013.63E+013.34E+031.59E+051.79E-019.62E+003.48E+021.08E+04 - 54L2 45.003.81E-028.01E+005.42E+022.03E+046.96E-022.81E+008.06E+012.01E+03 - 54L2 58.001.62E-022.35E+001.24E+023.77E+033.22E-021.03E+002.42E+014.98E+02 - 54L2 75.006.74E-036.84E-012.81E+016.93E+021.48E-023.76E-017.16E+001.21E+02 - 54L2 88.003.90E-033.20E-011.13E+012.43E+029.11E-032.01E-013.36E+004.99E+01 - 54L2 105.002.13E-031.39E-014.13E+007.69E+015.35E-031.01E-011.46E+001.89E+01 - 54L2 128.001.08E-035.52E-021.36E+002.14E+012.95E-034.69E-025.80E-016.38E+00 - 54L2 155.005.64E-042.29E-024.71E-016.34E+001.66E-032.25E-022.38E-012.26E+00 - 54L2 220.001.74E-044.71E-037.07E-027.16E-015.86E-045.97E-034.81E-023.48E-01 - 54L2 305.005.94E-051.13E-031.28E-021.01E-012.23E-041.77E-031.12E-026.38E-02 - 54L2 400.002.50E-053.62E-043.28E-032.11E-021.01E-046.63E-043.47E-031.63E-02 - 54L2 510.001.18E-051.35E-041.01E-035.50E-034.99E-052.80E-041.25E-035.02E-03 - 54L2 740.003.94E-063.24E-051.86E-047.93E-041.72E-057.77E-052.79E-048.99E-04 - 54L21000.001.69E-061.10E-055.17E-051.86E-047.32E-062.86E-058.80E-052.43E-04 - 54L21500.005.96E-072.85E-061.06E-053.10E-052.37E-067.87E-062.03E-054.71E-05 - 54L3 5.783.98E+013.43E+051.68E+081.04E+108.94E+002.30E+056.88E+082.08E+11 - 54L3 6.482.85E+011.92E+058.47E+076.37E+096.29E+001.30E+053.16E+088.64E+10 - 54L3 7.781.67E+017.60E+042.82E+072.44E+093.58E+005.23E+049.18E+072.12E+10 - 54L3 10.985.85E+001.33E+043.53E+063.10E+081.24E+009.38E+039.09E+061.53E+09 - 54L3 14.782.30E+002.95E+035.84E+054.62E+074.97E-012.13E+031.26E+061.62E+08 - 54L3 19.001.02E+008.29E+021.28E+058.79E+062.30E-016.11E+022.43E+052.46E+07 - 54L3 25.004.15E-012.08E+022.43E+041.39E+069.90E-021.56E+024.09E+043.21E+06 - 54L3 33.001.63E-015.13E+014.52E+032.11E+054.23E-023.94E+016.91E+034.19E+05 - 54L3 45.005.65E-021.08E+016.92E+022.52E+041.64E-028.48E+009.77E+024.45E+04 - 54L3 58.002.34E-023.02E+001.49E+024.41E+037.57E-032.43E+002.02E+027.31E+03 - 54L3 75.009.53E-038.38E-013.17E+017.51E+023.47E-036.88E-014.20E+011.21E+03 - 54L3 88.005.43E-033.78E-011.21E+012.50E+022.13E-033.15E-011.60E+013.99E+02 - 54L3 105.002.92E-031.57E-014.20E+007.43E+011.25E-031.34E-015.57E+001.19E+02 - 54L3 128.001.46E-035.93E-021.29E+001.91E+016.89E-045.15E-021.73E+003.13E+01 - 54L3 155.007.48E-042.32E-024.14E-015.19E+003.89E-042.06E-025.70E-018.79E+00 - 54L3 220.002.25E-044.28E-035.30E-024.89E-011.38E-043.95E-037.78E-029.07E-01 - 54L3 305.007.58E-059.24E-048.15E-035.67E-025.32E-058.78E-041.28E-021.17E-01 - 54L3 400.003.19E-052.71E-041.81E-031.00E-022.46E-052.61E-042.97E-032.25E-02 - 54L3 510.001.52E-059.45E-054.93E-042.24E-031.26E-059.11E-058.31E-045.36E-03 - 54L3 740.005.25E-062.10E-057.63E-052.61E-044.73E-061.98E-051.27E-046.50E-04 - 54L31000.002.42E-066.94E-061.93E-055.36E-052.25E-066.40E-062.97E-051.28E-04 - 54L31500.009.34E-071.89E-063.82E-068.10E-069.08E-071.69E-064.87E-061.60E-05 - 54M1 2.141.15E+013.89E+041.72E+061.45E+091.53E+039.00E+068.80E+092.05E+12 - 54M1 3.147.02E+007.85E+038.61E+054.59E+074.86E+021.37E+067.46E+081.44E+11 - 54M1 5.143.13E+008.02E+021.73E+059.17E+061.11E+021.25E+053.38E+074.64E+09 - 54M1 9.141.05E+003.39E+011.21E+041.02E+061.99E+017.93E+031.03E+068.87E+07 - 54M1 16.143.16E-017.55E-014.83E+024.43E+043.65E+005.57E+023.70E+041.96E+06 - 54M1 26.001.06E-013.57E-012.02E+012.02E+038.85E-016.44E+012.55E+038.83E+04 - 54M1 41.003.55E-022.00E-011.19E+007.84E+012.30E-018.77E+002.17E+024.99E+03 - 54M1 53.001.86E-021.16E-015.29E-011.28E+011.08E-012.95E+005.66E+011.03E+03 - 54M1 71.008.77E-035.57E-022.61E-012.36E+004.63E-028.80E-011.28E+011.79E+02 - 54M1 104.003.20E-031.89E-028.93E-024.93E-011.55E-021.92E-011.95E+001.95E+01 - 54M1 150.001.20E-036.22E-032.72E-021.25E-015.54E-034.74E-023.49E-012.55E+00 - 54M1 280.002.33E-048.99E-043.13E-031.10E-021.02E-035.15E-032.30E-021.02E-01 - 54M1 500.005.67E-051.70E-044.65E-041.26E-032.32E-048.02E-042.42E-037.19E-03 - 54M2 2.002.72E+018.76E+062.65E+101.02E+131.86E+023.11E+058.90E+071.04E+10 - 54M2 3.001.31E+011.15E+061.91E+096.01E+115.44E+015.02E+041.18E+071.58E+09 - 54M2 5.004.25E+008.84E+047.43E+071.69E+101.16E+015.37E+039.15E+051.09E+08 - 54M2 9.009.57E-014.68E+031.92E+062.85E+081.95E+004.42E+024.93E+044.35E+06 - 54M2 16.001.89E-012.68E+025.72E+045.42E+063.41E-014.08E+012.91E+031.73E+05 - 54M2 26.004.32E-022.45E+013.09E+031.96E+057.81E-025.65E+002.71E+021.12E+04 - 54M2 41.001.01E-022.66E+002.08E+028.94E+031.97E-029.07E-012.97E+018.49E+02 - 54M2 53.004.37E-037.69E-014.62E+011.59E+039.06E-033.26E-018.59E+001.99E+02 - 54M2 71.001.65E-031.89E-018.47E+002.26E+023.75E-031.03E-012.11E+003.84E+01 - 54M2 104.004.57E-043.12E-029.57E-011.83E+011.19E-032.30E-023.43E-014.55E+00 - 54M2 150.001.33E-045.73E-031.24E-011.73E+003.97E-045.59E-036.16E-026.07E-01 - 54M2 280.001.68E-053.55E-044.36E-033.69E-026.23E-055.32E-043.61E-032.20E-02 - 54M2 500.002.71E-063.18E-052.44E-041.35E-031.15E-056.56E-052.98E-041.22E-03 - 54M3 1.946.01E+011.74E+075.46E+102.11E+135.01E+011.21E+073.20E+118.37E+14 - 54M3 2.942.68E+012.14E+063.62E+091.13E+121.41E+011.52E+061.80E+102.44E+13 - 54M3 4.948.09E+001.56E+051.31E+082.92E+102.91E+001.13E+055.05E+083.24E+11 - 54M3 8.941.70E+007.80E+033.13E+064.55E+084.76E-015.85E+038.93E+062.64E+09 - 54M3 15.943.16E-014.23E+028.73E+048.04E+068.15E-023.27E+021.87E+052.78E+07 - 54M3 26.006.84E-023.61E+014.34E+032.66E+051.84E-022.87E+017.61E+036.62E+05 - 54M3 41.001.54E-023.68E+002.71E+021.12E+044.61E-033.00E+004.13E+022.25E+04 - 54M3 53.006.47E-031.02E+005.71E+011.89E+032.12E-038.43E-018.26E+013.49E+03 - 54M3 71.002.38E-032.38E-019.76E+002.48E+028.75E-042.00E-011.36E+014.33E+02 - 54M3 104.006.35E-043.58E-029.83E-011.78E+012.77E-043.12E-021.36E+003.04E+01 - 54M3 150.001.78E-045.94E-031.11E-011.44E+009.27E-055.36E-031.57E-012.56E+00 - 54M3 280.002.17E-053.01E-042.92E-032.20E-021.48E-052.88E-044.60E-034.55E-02 - 54M3 500.003.52E-062.26E-051.21E-045.61E-042.91E-062.19E-052.06E-041.36E-03 - 54M4 1.681.33E+025.16E+054.37E+107.89E+141.37E+013.39E+054.73E+096.11E+12 - 54M4 2.682.93E+014.71E+041.63E+091.35E+132.97E+003.25E+042.05E+081.84E+11 - 54M4 4.684.18E+002.73E+033.21E+071.11E+114.61E-011.96E+035.11E+062.85E+09 - 54M4 8.684.14E-011.14E+024.08E+055.78E+085.54E-028.64E+019.14E+042.93E+07 - 54M4 15.683.94E-025.30E+006.24E+034.03E+066.88E-034.32E+002.06E+033.82E+05 - 54M4 26.004.81E-033.69E-011.76E+026.07E+041.10E-033.32E-018.41E+019.67E+03 - 54M4 41.006.81E-043.27E-027.21E+001.44E+032.04E-043.29E-024.86E+003.63E+02 - 54M4 53.002.23E-048.29E-031.20E+001.78E+027.77E-058.97E-039.86E-015.79E+01 - 54M4 71.006.17E-051.73E-031.58E-011.68E+012.56E-052.04E-031.62E-017.25E+00 - 54M4 104.001.15E-052.26E-041.16E-028.01E-015.94E-062.98E-041.57E-024.94E-01 - 54M4 150.002.29E-063.28E-059.82E-044.54E-021.45E-064.74E-051.72E-033.89E-02 - 54M4 280.001.57E-071.35E-061.71E-053.98E-041.30E-072.15E-064.25E-055.70E-04 - 54M4 500.001.47E-088.24E-085.20E-076.30E-061.42E-081.30E-071.53E-061.33E-05 - 54M5 1.671.96E+026.77E+056.96E+101.18E+158.39E+003.76E+042.27E+101.74E+15 - 54M5 2.674.24E+016.08E+042.57E+091.96E+131.82E+003.63E+038.55E+082.64E+13 - 54M5 4.675.95E+003.47E+034.97E+071.57E+112.86E-012.24E+021.72E+071.84E+11 - 54M5 8.675.79E-011.43E+026.22E+058.01E+083.54E-021.03E+012.28E+057.93E+08 - 54M5 15.675.41E-026.50E+009.32E+035.42E+064.55E-035.50E-013.66E+034.63E+06 - 54M5 26.006.50E-034.41E-012.56E+027.84E+047.52E-044.53E-021.08E+026.10E+04 - 54M5 41.009.09E-043.79E-021.01E+011.78E+031.44E-044.86E-034.55E+001.33E+03 - 54M5 53.002.95E-049.41E-031.65E+002.13E+025.63E-051.39E-037.69E-011.58E+02 - 54M5 71.008.10E-051.91E-032.09E-011.92E+011.91E-053.37E-041.02E-011.44E+01 - 54M5 104.001.51E-052.39E-041.44E-028.44E-014.63E-065.38E-057.51E-036.66E-01 - 54M5 150.003.04E-063.32E-051.13E-034.32E-021.19E-069.52E-066.30E-043.67E-02 - 54M5 280.002.10E-071.28E-061.65E-053.00E-041.23E-075.50E-071.03E-053.02E-04 - 54M5 500.002.32E-087.75E-084.28E-073.62E-061.67E-084.68E-082.96E-074.21E-06 - 54N+ 50.008.25E-035.96E-013.73E+011.49E+033.58E-021.42E+005.90E+012.24E+03 - 54N+ 70.003.20E-031.23E-015.02E+001.42E+021.34E-023.34E-018.60E+002.16E+02 - 54N+ 100.001.17E-032.45E-026.27E-011.24E+014.80E-037.58E-021.23E+002.02E+01 - 54N+ 150.003.72E-044.32E-036.41E-028.37E-011.52E-031.52E-021.53E-011.59E+00 - 54N+ 200.001.67E-041.36E-031.38E-021.33E-016.88E-045.13E-033.79E-022.92E-01 - 54N+ 500.001.58E-055.59E-052.06E-047.90E-046.22E-052.27E-047.57E-042.55E-03 - 55K 36.982.76E+008.49E+005.14E+001.30E+001.41E+013.05E+021.11E+039.29E+02 - 55K 37.682.62E+008.76E+007.74E+003.84E+001.33E+012.83E+021.12E+031.36E+03 - 55K 38.982.39E+009.10E+001.24E+011.18E+011.20E+012.48E+021.11E+032.09E+03 - 55K 42.181.95E+009.17E+002.16E+014.23E+019.56E+001.84E+021.01E+033.23E+03 - 55K 45.981.56E+008.49E+002.74E+017.88E+017.42E+001.33E+028.33E+023.64E+03 - 55K 50.001.25E+007.48E+002.92E+011.04E+025.81E+009.67E+016.60E+023.45E+03 - 55K 56.009.22E-015.98E+002.72E+011.16E+024.17E+006.31E+014.59E+022.76E+03 - 55K 64.006.43E-014.36E+002.19E+011.05E+022.82E+003.82E+012.86E+021.87E+03 - 55K 76.004.03E-012.75E+001.46E+017.39E+011.72E+002.01E+011.49E+021.01E+03 - 55K 89.002.61E-011.74E+009.23E+004.71E+011.09E+001.12E+017.94E+015.30E+02 - 55K 106.001.61E-011.02E+005.25E+002.61E+016.62E-015.90E+003.91E+012.48E+02 - 55K 119.001.16E-017.08E-013.53E+001.70E+014.77E-013.88E+002.44E+011.48E+02 - 55K 136.008.03E-024.61E-012.20E+001.01E+013.28E-012.40E+001.41E+018.05E+01 - 55K 159.005.21E-022.77E-011.24E+005.40E+002.13E-011.38E+007.44E+003.92E+01 - 55K 185.003.44E-021.69E-017.11E-012.89E+001.40E-018.19E-014.03E+001.95E+01 - 55K 250.001.52E-026.36E-022.33E-018.27E-016.24E-022.97E-011.22E+004.94E+00 - 55K 335.007.09E-032.54E-028.10E-022.51E-012.90E-021.15E-013.98E-011.36E+00 - 55K 430.003.82E-031.21E-023.45E-029.56E-021.54E-025.32E-021.60E-014.71E-01 - 55K 540.002.24E-036.46E-031.67E-024.19E-028.73E-032.70E-027.22E-021.88E-01 - 55K 770.001.05E-032.66E-036.01E-031.31E-023.72E-039.93E-032.26E-024.94E-02 - 55K 1050.005.71E-041.33E-032.72E-035.29E-031.81E-034.36E-038.82E-031.70E-02 - 55K 1300.003.89E-048.54E-041.65E-033.00E-031.12E-032.54E-034.80E-038.57E-03 - 55K 1550.002.87E-046.05E-041.12E-031.94E-037.59E-041.65E-032.97E-035.03E-03 - 55L1 6.718.61E+002.34E+032.08E+053.38E+062.77E+021.72E+051.84E+074.74E+08 - 55L1 7.417.27E+001.35E+031.60E+054.43E+062.06E+021.07E+051.06E+073.37E+08 - 55L1 8.715.45E+005.23E+028.63E+043.72E+061.27E+024.99E+044.33E+061.64E+08 - 55L1 11.913.00E+006.70E+011.85E+041.15E+064.98E+011.15E+047.69E+053.10E+07 - 55L1 15.711.70E+007.44E+003.74E+032.66E+052.18E+013.21E+031.68E+056.30E+06 - 55L1 19.001.13E+001.67E+001.12E+038.51E+041.24E+011.35E+036.00E+042.05E+06 - 55L1 25.006.08E-011.18E+001.65E+021.41E+045.48E+003.95E+021.37E+043.97E+05 - 55L1 33.003.17E-011.18E+002.05E+011.97E+032.41E+001.17E+023.15E+037.53E+04 - 55L1 45.001.48E-017.87E-013.42E+001.92E+029.66E-013.08E+016.30E+021.19E+04 - 55L1 58.007.82E-024.64E-011.85E+003.14E+014.59E-011.07E+011.73E+022.67E+03 - 55L1 75.004.02E-022.44E-011.07E+007.89E+002.18E-013.73E+004.82E+016.02E+02 - 55L1 88.002.64E-021.58E-017.16E-014.18E+001.37E-011.97E+002.21E+012.42E+02 - 55L1 105.001.65E-029.51E-024.33E-012.23E+008.30E-029.85E-019.49E+008.96E+01 - 55L1 128.009.75E-035.27E-022.34E-011.11E+004.74E-024.60E-013.75E+003.01E+01 - 55L1 155.005.84E-032.93E-021.25E-015.50E-012.78E-022.25E-011.56E+001.07E+01 - 55L1 220.002.31E-039.91E-033.75E-021.44E-011.07E-026.38E-023.35E-011.74E+00 - 55L1 305.009.94E-043.66E-031.22E-024.08E-024.48E-032.09E-028.61E-023.51E-01 - 55L1 400.005.09E-041.66E-034.94E-031.47E-022.22E-038.67E-032.98E-021.01E-01 - 55L1 510.002.88E-048.52E-042.30E-036.16E-031.21E-034.09E-031.21E-023.50E-02 - 55L1 740.001.29E-043.36E-047.90E-041.81E-034.88E-041.38E-033.36E-037.89E-03 - 55L11000.007.14E-051.71E-043.63E-047.42E-042.41E-046.09E-041.30E-032.65E-03 - 55L11500.003.47E-057.49E-051.42E-042.54E-049.67E-052.17E-044.03E-047.06E-04 - 55L2 6.361.77E+011.45E+056.19E+073.36E+093.06E+017.25E+032.94E+054.40E+06 - 55L2 7.061.32E+018.56E+043.34E+072.22E+092.22E+014.81E+032.39E+055.89E+06 - 55L2 8.368.14E+003.66E+041.23E+079.63E+081.33E+012.47E+031.44E+055.23E+06 - 55L2 11.563.13E+007.23E+031.81E+061.49E+084.92E+006.87E+024.22E+041.93E+06 - 55L2 15.361.32E+001.75E+033.36E+052.53E+072.06E+002.22E+021.26E+045.66E+05 - 55L2 19.006.77E-016.09E+029.54E+046.46E+061.08E+009.54E+014.87E+032.04E+05 - 55L2 25.002.82E-011.57E+021.89E+041.08E+064.65E-013.21E+011.39E+035.06E+04 - 55L2 33.001.14E-014.01E+013.68E+031.73E+052.00E-011.06E+013.81E+021.17E+04 - 55L2 45.004.08E-028.85E+005.98E+022.22E+047.78E-023.12E+008.84E+012.18E+03 - 55L2 58.001.74E-022.60E+001.37E+024.14E+033.60E-021.15E+002.66E+015.44E+02 - 55L2 75.007.28E-037.58E-013.11E+017.62E+021.66E-024.18E-017.91E+001.32E+02 - 55L2 88.004.22E-033.55E-011.25E+012.68E+021.02E-022.24E-013.72E+005.48E+01 - 55L2 105.002.31E-031.54E-014.59E+008.49E+016.01E-031.13E-011.62E+002.08E+01 - 55L2 128.001.18E-036.14E-021.51E+002.37E+013.31E-035.24E-026.44E-017.05E+00 - 55L2 155.006.15E-042.54E-025.24E-017.02E+001.87E-032.52E-022.65E-012.50E+00 - 55L2 220.001.90E-045.25E-037.89E-027.96E-016.60E-046.69E-035.37E-023.86E-01 - 55L2 305.006.54E-051.26E-031.43E-021.12E-012.52E-041.99E-031.26E-027.11E-02 - 55L2 400.002.77E-054.04E-043.67E-032.36E-021.14E-047.47E-043.89E-031.83E-02 - 55L2 510.001.31E-051.51E-041.14E-036.17E-035.64E-053.16E-041.41E-035.63E-03 - 55L2 740.004.38E-063.63E-052.09E-048.92E-041.94E-058.78E-053.14E-041.01E-03 - 55L21000.001.89E-061.23E-055.82E-052.09E-048.31E-063.24E-059.94E-052.74E-04 - 55L21500.006.53E-073.21E-061.20E-053.51E-052.69E-068.93E-062.30E-055.33E-05 - 55L3 6.013.68E+013.08E+051.45E+088.57E+098.63E+002.16E+056.18E+081.80E+11 - 55L3 6.712.68E+011.76E+057.48E+075.35E+096.14E+001.25E+052.92E+087.70E+10 - 55L3 8.011.59E+017.18E+042.58E+072.13E+093.56E+005.15E+048.82E+071.98E+10 - 55L3 11.215.74E+001.31E+043.39E+062.87E+081.27E+009.64E+039.23E+061.52E+09 - 55L3 15.012.30E+002.99E+035.81E+054.45E+075.16E-012.25E+031.33E+061.67E+08 - 55L3 19.001.08E+009.08E+021.40E+059.43E+062.50E-016.97E+022.82E+052.85E+07 - 55L3 25.004.39E-012.27E+022.65E+041.50E+061.08E-011.78E+024.74E+043.71E+06 - 55L3 33.001.73E-015.62E+014.94E+032.28E+054.61E-024.48E+017.98E+034.83E+05 - 55L3 45.006.02E-021.18E+017.57E+022.73E+041.79E-029.66E+001.13E+035.12E+04 - 55L3 58.002.50E-023.31E+001.63E+024.79E+038.25E-032.76E+002.32E+028.39E+03 - 55L3 75.001.02E-029.18E-013.47E+018.17E+023.78E-037.82E-014.81E+011.38E+03 - 55L3 88.005.83E-034.15E-011.33E+012.72E+022.33E-033.58E-011.83E+014.56E+02 - 55L3 105.003.14E-031.73E-014.61E+008.10E+011.36E-031.52E-016.37E+001.36E+02 - 55L3 128.001.57E-036.50E-021.41E+002.09E+017.51E-045.84E-021.98E+003.57E+01 - 55L3 155.008.07E-042.55E-024.54E-015.67E+004.24E-042.33E-026.50E-011.00E+01 - 55L3 220.002.43E-044.70E-035.83E-025.36E-011.50E-044.47E-038.84E-021.03E+00 - 55L3 305.008.21E-051.02E-038.96E-036.22E-025.80E-059.89E-041.45E-021.32E-01 - 55L3 400.003.46E-052.98E-041.99E-031.10E-022.69E-052.93E-043.36E-032.54E-02 - 55L3 510.001.66E-051.04E-045.42E-042.46E-031.37E-051.02E-049.39E-046.06E-03 - 55L3 740.005.75E-062.30E-058.39E-052.87E-045.15E-062.20E-051.42E-047.34E-04 - 55L31000.002.60E-067.62E-062.13E-055.90E-052.45E-067.08E-063.33E-051.44E-04 - 55L31500.001.02E-062.06E-064.19E-068.90E-069.86E-071.86E-065.43E-061.80E-05 - 55M1 2.221.09E+013.66E+041.68E+061.24E+091.54E+038.75E+068.31E+091.87E+12 - 55M1 3.226.73E+007.76E+038.13E+054.63E+075.06E+021.40E+067.53E+081.41E+11 - 55M1 5.223.06E+008.39E+021.70E+058.55E+061.19E+021.33E+053.60E+074.84E+09 - 55M1 9.221.04E+003.88E+011.26E+041.02E+062.17E+018.72E+031.13E+069.62E+07 - 55M1 16.223.19E-019.23E-015.41E+024.72E+044.01E+006.21E+024.12E+042.17E+06 - 55M1 26.001.09E-013.28E-012.50E+012.32E+039.87E-017.30E+012.89E+039.99E+04 - 55M1 41.003.66E-021.91E-011.37E+009.48E+012.57E-019.90E+002.45E+025.62E+03 - 55M1 53.001.93E-021.13E-015.34E-011.55E+011.21E-013.32E+006.37E+011.16E+03 - 55M1 71.009.12E-035.54E-022.55E-012.66E+005.16E-029.87E-011.43E+012.00E+02 - 55M1 104.003.34E-031.92E-028.85E-025.08E-011.72E-022.14E-012.18E+002.18E+01 - 55M1 150.001.26E-036.38E-032.75E-021.27E-016.16E-035.28E-023.89E-012.84E+00 - 55M1 280.002.46E-049.40E-043.25E-031.14E-021.13E-035.71E-032.55E-021.13E-01 - 55M1 500.006.02E-051.80E-044.92E-041.34E-032.56E-048.85E-042.67E-037.93E-03 - 55M2 2.062.57E+018.26E+062.43E+109.02E+121.88E+023.06E+058.46E+079.41E+09 - 55M2 3.061.27E+011.14E+061.88E+095.75E+115.71E+015.17E+041.18E+071.52E+09 - 55M2 5.064.24E+009.21E+047.69E+071.72E+101.25E+015.73E+039.55E+051.11E+08 - 55M2 9.069.80E-015.02E+032.05E+063.01E+082.14E+004.82E+025.29E+044.57E+06 - 55M2 16.061.97E-012.93E+026.23E+045.84E+063.78E-014.49E+013.17E+031.86E+05 - 55M2 26.004.61E-022.73E+013.45E+032.17E+058.80E-026.33E+003.01E+021.23E+04 - 55M2 41.001.09E-022.96E+002.32E+029.92E+032.22E-021.02E+003.31E+019.39E+02 - 55M2 53.004.72E-038.58E-015.16E+011.77E+031.02E-023.66E-019.58E+002.21E+02 - 55M2 71.001.79E-032.12E-019.48E+002.52E+024.24E-031.15E-012.36E+004.26E+01 - 55M2 104.005.00E-043.50E-021.07E+002.05E+011.35E-032.59E-023.84E-015.08E+00 - 55M2 150.001.46E-046.42E-031.39E-011.94E+004.51E-046.31E-036.92E-026.79E-01 - 55M2 280.001.86E-053.99E-044.92E-034.15E-027.10E-056.03E-044.07E-032.47E-02 - 55M2 500.003.02E-063.60E-052.77E-041.53E-031.31E-057.47E-053.38E-041.38E-03 - 55M3 2.005.72E+011.64E+075.02E+101.88E+135.00E+011.20E+073.08E+117.85E+14 - 55M3 3.002.60E+012.13E+063.56E+091.08E+121.46E+011.58E+061.85E+102.50E+13 - 55M3 5.008.09E+001.62E+051.35E+082.95E+103.07E+001.23E+055.51E+083.53E+11 - 55M3 9.001.74E+008.33E+033.34E+064.77E+085.12E-016.51E+031.01E+072.98E+09 - 55M3 16.003.29E-014.59E+029.44E+048.59E+068.85E-023.70E+022.15E+053.20E+07 - 55M3 26.007.26E-023.99E+014.81E+032.92E+052.02E-023.30E+018.92E+037.79E+05 - 55M3 41.001.64E-024.07E+003.00E+021.23E+045.07E-033.45E+004.83E+022.63E+04 - 55M3 53.006.95E-031.13E+006.32E+012.07E+032.33E-039.70E-019.62E+014.06E+03 - 55M3 71.002.56E-032.63E-011.08E+012.73E+029.62E-042.30E-011.58E+015.04E+02 - 55M3 104.006.87E-043.97E-021.09E+001.96E+013.05E-043.58E-021.57E+003.52E+01 - 55M3 150.001.94E-046.59E-031.23E-011.60E+001.02E-046.14E-031.81E-012.95E+00 - 55M3 280.002.37E-053.34E-043.25E-032.44E-021.63E-053.28E-045.29E-035.22E-02 - 55M3 500.003.89E-062.51E-051.34E-046.23E-043.20E-062.48E-052.36E-041.56E-03 - 55M4 1.741.27E+024.83E+053.97E+106.96E+141.37E+013.33E+054.50E+095.60E+12 - 55M4 2.742.92E+014.71E+041.62E+091.33E+133.09E+003.40E+042.12E+081.85E+11 - 55M4 4.744.34E+002.86E+033.41E+071.18E+114.96E-012.15E+035.60E+063.07E+09 - 55M4 8.744.43E-011.24E+024.51E+056.44E+086.11E-029.77E+011.04E+053.29E+07 - 55M4 15.744.31E-025.85E+007.05E+034.60E+067.69E-034.96E+002.38E+034.38E+05 - 55M4 26.005.38E-034.18E-012.05E+027.13E+041.25E-033.89E-019.93E+011.14E+04 - 55M4 41.007.68E-043.72E-028.38E+001.69E+032.33E-043.86E-025.73E+004.28E+02 - 55M4 53.002.52E-049.46E-031.40E+002.10E+028.90E-051.05E-021.16E+006.82E+01 - 55M4 71.006.99E-051.98E-031.84E-011.98E+012.94E-052.40E-031.92E-018.55E+00 - 55M4 104.001.30E-052.60E-041.35E-029.42E-016.85E-063.50E-041.86E-025.83E-01 - 55M4 150.002.60E-063.78E-051.14E-035.34E-021.67E-065.58E-052.03E-034.60E-02 - 55M4 280.001.79E-071.56E-062.00E-054.69E-041.51E-072.53E-065.03E-056.75E-04 - 55M4 500.001.73E-089.50E-086.08E-077.43E-061.65E-081.53E-071.82E-061.57E-05 - 55M5 1.731.88E+026.38E+056.45E+101.06E+158.41E+003.69E+042.19E+101.63E+15 - 55M5 2.734.25E+016.08E+042.58E+091.96E+131.90E+003.77E+038.97E+082.76E+13 - 55M5 4.736.19E+003.62E+035.31E+071.69E+113.07E-012.43E+021.91E+072.07E+11 - 55M5 8.736.19E-011.54E+026.92E+058.95E+083.88E-021.15E+012.63E+059.32E+08 - 55M5 15.735.91E-027.13E+001.06E+046.19E+065.06E-036.20E-014.31E+035.55E+06 - 55M5 26.007.25E-034.95E-012.98E+029.20E+048.51E-045.20E-021.30E+027.49E+04 - 55M5 41.001.02E-034.28E-021.18E+012.09E+031.64E-045.58E-035.48E+001.62E+03 - 55M5 53.003.32E-041.06E-021.92E+002.50E+026.40E-051.60E-039.25E-011.93E+02 - 55M5 71.009.17E-052.17E-032.44E-012.25E+012.18E-053.87E-041.23E-011.76E+01 - 55M5 104.001.70E-052.73E-041.67E-029.89E-015.29E-066.18E-059.00E-038.07E-01 - 55M5 150.003.40E-063.79E-051.31E-035.07E-021.36E-061.09E-057.53E-044.44E-02 - 55M5 280.002.45E-071.48E-061.93E-053.51E-041.41E-076.34E-071.23E-053.63E-04 - 55M5 500.002.70E-089.01E-084.99E-074.24E-061.92E-085.39E-083.47E-075.03E-06 - 55N+ 50.008.97E-036.80E-014.29E+011.72E+034.14E-021.67E+007.03E+012.69E+03 - 55N+ 70.003.49E-031.39E-015.77E+001.64E+021.55E-023.90E-011.02E+012.57E+02 - 55N+ 100.001.28E-032.77E-027.20E-011.43E+015.54E-038.83E-021.44E+002.39E+01 - 55N+ 150.004.08E-044.85E-037.34E-029.62E-011.76E-031.76E-021.78E-011.87E+00 - 55N+ 200.001.84E-041.52E-031.57E-021.53E-017.93E-045.94E-034.41E-023.41E-01 - 55N+ 500.001.74E-056.22E-052.32E-048.99E-047.12E-052.61E-048.71E-042.95E-03 - 56K 38.442.55E+007.51E+004.34E+001.03E+001.38E+012.85E+029.95E+027.98E+02 - 56K 39.142.43E+007.74E+006.46E+002.99E+001.31E+012.65E+021.00E+031.16E+03 - 56K 40.442.22E+008.04E+001.03E+019.11E+001.18E+012.34E+029.96E+021.77E+03 - 56K 43.641.83E+008.14E+001.79E+013.28E+019.49E+001.76E+029.12E+022.75E+03 - 56K 47.441.47E+007.59E+002.30E+016.19E+017.42E+001.28E+027.64E+023.15E+03 - 56K 51.001.21E+006.84E+002.47E+018.14E+016.00E+009.74E+016.28E+023.05E+03 - 56K 57.009.03E-015.55E+002.37E+019.46E+014.34E+006.40E+014.44E+022.52E+03 - 56K 65.006.35E-014.10E+001.96E+018.85E+012.96E+003.91E+012.81E+021.75E+03 - 56K 77.004.00E-012.63E+001.33E+016.47E+011.81E+002.08E+011.49E+029.68E+02 - 56K 90.002.61E-011.68E+008.60E+004.23E+011.16E+001.17E+018.04E+015.20E+02 - 56K 107.001.62E-019.96E-014.98E+002.40E+017.05E-016.19E+004.01E+012.48E+02 - 56K 120.001.18E-016.96E-013.38E+001.59E+015.10E-014.09E+002.51E+011.49E+02 - 56K 137.008.16E-024.57E-012.13E+009.59E+003.51E-012.55E+001.46E+018.19E+01 - 56K 160.005.32E-022.77E-011.22E+005.18E+002.28E-011.47E+007.78E+004.03E+01 - 56K 185.003.57E-021.73E-017.16E-012.87E+001.53E-018.90E-014.33E+002.07E+01 - 56K 250.001.59E-026.55E-022.37E-018.33E-016.81E-023.22E-011.31E+005.27E+00 - 56K 335.007.42E-032.63E-028.33E-022.56E-013.16E-021.25E-014.29E-011.45E+00 - 56K 430.004.01E-031.26E-023.58E-029.86E-021.67E-025.76E-021.72E-015.05E-01 - 56K 540.002.36E-036.75E-031.74E-024.35E-029.47E-032.93E-027.78E-022.02E-01 - 56K 770.001.10E-032.79E-036.31E-031.37E-024.02E-031.07E-022.43E-025.31E-02 - 56K 1050.006.01E-041.40E-032.87E-035.59E-031.95E-034.71E-039.51E-031.83E-02 - 56K 1300.004.09E-049.03E-041.74E-033.18E-031.20E-032.74E-035.17E-039.22E-03 - 56K 1550.003.03E-046.40E-041.18E-032.05E-038.15E-041.78E-033.20E-035.42E-03 - 56L1 6.997.97E+002.11E+031.78E+052.71E+062.71E+021.61E+051.65E+074.04E+08 - 56L1 7.696.78E+001.24E+031.39E+053.60E+062.04E+021.02E+059.70E+062.93E+08 - 56L1 8.995.13E+005.02E+027.75E+043.13E+061.28E+024.87E+044.08E+061.47E+08 - 56L1 12.192.88E+007.00E+011.77E+041.03E+065.14E+011.17E+047.58E+052.94E+07 - 56L1 15.991.65E+008.66E+003.76E+032.53E+052.29E+013.33E+031.71E+056.20E+06 - 56L1 20.001.02E+001.55E+009.18E+026.68E+041.18E+011.20E+035.07E+041.65E+06 - 56L1 26.005.65E-011.06E+001.50E+021.21E+045.40E+003.72E+021.24E+043.45E+05 - 56L1 34.003.01E-011.05E+002.07E+011.84E+032.44E+001.15E+023.00E+036.93E+04 - 56L1 46.001.44E-017.19E-013.44E+001.96E+021.00E+003.13E+016.25E+021.15E+04 - 56L1 59.007.71E-024.34E-011.73E+003.35E+014.83E-011.10E+011.76E+022.66E+03 - 56L1 76.004.01E-022.33E-019.98E-018.10E+002.31E-013.93E+005.00E+016.14E+02 - 56L1 89.002.65E-021.52E-016.73E-014.16E+001.47E-012.09E+002.31E+012.50E+02 - 56L1 106.001.67E-029.29E-024.13E-012.18E+008.92E-021.05E+001.00E+019.35E+01 - 56L1 129.009.93E-035.21E-022.27E-011.08E+005.12E-024.94E-013.99E+003.17E+01 - 56L1 155.006.09E-032.99E-021.25E-015.53E-013.06E-022.48E-011.72E+001.18E+01 - 56L1 220.002.41E-031.02E-023.82E-021.47E-011.17E-027.02E-023.68E-011.91E+00 - 56L1 305.001.04E-033.80E-031.26E-024.21E-024.92E-032.29E-029.45E-023.85E-01 - 56L1 400.005.36E-041.73E-035.15E-031.53E-022.44E-039.51E-033.26E-021.10E-01 - 56L1 510.003.04E-048.94E-042.42E-036.48E-031.32E-034.48E-031.32E-023.82E-02 - 56L1 740.001.36E-043.55E-048.36E-041.92E-035.32E-041.51E-033.67E-038.61E-03 - 56L11000.007.57E-051.81E-043.87E-047.91E-042.62E-046.64E-041.41E-032.88E-03 - 56L11500.003.68E-057.98E-051.52E-042.72E-041.05E-042.36E-044.38E-047.68E-04 - 56L2 6.621.64E+011.30E+055.30E+072.74E+093.00E+016.76E+032.60E+053.64E+06 - 56L2 7.321.24E+017.83E+042.93E+071.85E+092.21E+014.56E+032.14E+054.94E+06 - 56L2 8.627.75E+003.45E+041.12E+078.31E+081.34E+012.40E+031.33E+054.53E+06 - 56L2 11.823.07E+007.11E+031.73E+061.36E+085.10E+006.90E+024.07E+041.77E+06 - 56L2 15.621.31E+001.77E+033.33E+052.43E+072.18E+002.29E+021.25E+045.42E+05 - 56L2 20.006.09E-015.21E+027.73E+044.99E+061.02E+008.58E+014.17E+031.67E+05 - 56L2 26.002.64E-011.43E+021.65E+049.03E+054.60E-013.03E+011.26E+034.41E+04 - 56L2 34.001.10E-013.83E+013.40E+031.55E+052.03E-011.05E+013.61E+021.07E+04 - 56L2 46.004.07E-028.78E+005.80E+022.10E+048.13E-023.17E+008.74E+012.10E+03 - 56L2 59.001.77E-022.64E+001.37E+024.06E+033.83E-021.19E+002.70E+015.39E+02 - 56L2 76.007.51E-037.87E-013.19E+017.68E+021.78E-024.41E-018.19E+001.34E+02 - 56L2 89.004.39E-033.72E-011.29E+012.74E+021.11E-022.38E-013.90E+005.65E+01 - 56L2 106.002.42E-031.64E-014.82E+008.81E+016.55E-031.21E-011.72E+002.17E+01 - 56L2 129.001.24E-036.56E-021.61E+002.49E+013.64E-035.67E-026.88E-017.44E+00 - 56L2 155.006.69E-042.82E-025.82E-017.78E+002.10E-032.81E-022.94E-012.76E+00 - 56L2 220.002.08E-045.84E-038.79E-028.84E-017.43E-047.49E-035.98E-024.29E-01 - 56L2 305.007.17E-051.41E-031.60E-021.25E-012.84E-042.24E-031.40E-027.92E-02 - 56L2 400.003.05E-054.52E-044.11E-032.63E-021.29E-048.40E-044.36E-032.04E-02 - 56L2 510.001.45E-051.69E-041.28E-036.90E-036.38E-053.56E-041.58E-036.30E-03 - 56L2 740.004.81E-064.07E-052.35E-041.00E-032.20E-059.92E-053.54E-041.14E-03 - 56L21000.002.12E-061.38E-056.55E-052.35E-049.42E-063.67E-051.12E-043.09E-04 - 56L21500.007.20E-073.61E-061.35E-053.95E-053.05E-061.01E-052.61E-056.03E-05 - 56L3 6.253.42E+012.77E+051.25E+087.07E+098.33E+002.03E+055.57E+081.56E+11 - 56L3 6.952.51E+011.62E+056.61E+074.50E+096.00E+001.20E+052.70E+086.87E+10 - 56L3 8.251.52E+016.78E+042.35E+071.86E+093.54E+005.07E+048.46E+071.84E+10 - 56L3 11.455.63E+001.29E+043.26E+062.66E+081.29E+009.89E+039.35E+061.51E+09 - 56L3 15.252.30E+003.02E+035.76E+054.28E+075.34E-012.37E+031.39E+061.72E+08 - 56L3 20.009.62E-017.67E+021.12E+057.18E+062.32E-016.14E+022.34E+052.24E+07 - 56L3 26.004.07E-012.04E+022.28E+041.24E+061.04E-011.67E+024.25E+043.20E+06 - 56L3 34.001.66E-015.29E+014.50E+032.01E+054.57E-024.40E+017.61E+034.47E+05 - 56L3 46.005.93E-021.16E+017.23E+022.55E+041.82E-029.84E+001.13E+035.01E+04 - 56L3 59.002.51E-023.33E+001.61E+024.62E+038.51E-032.88E+002.40E+028.51E+03 - 56L3 76.001.04E-029.41E-013.51E+018.10E+023.95E-038.32E-015.08E+011.44E+03 - 56L3 89.006.00E-034.29E-011.36E+012.74E+022.45E-033.85E-011.96E+014.82E+02 - 56L3 106.003.26E-031.81E-014.77E+008.26E+011.44E-031.64E-016.88E+001.45E+02 - 56L3 129.001.64E-036.86E-021.48E+002.16E+017.99E-046.36E-022.16E+003.86E+01 - 56L3 155.008.68E-042.79E-024.97E-016.18E+004.61E-042.64E-027.40E-011.14E+01 - 56L3 220.002.63E-045.16E-036.39E-025.85E-011.63E-045.04E-031.00E-011.17E+00 - 56L3 305.008.91E-051.11E-039.83E-036.81E-026.32E-051.11E-031.64E-021.50E-01 - 56L3 400.003.76E-053.26E-042.18E-031.20E-022.93E-053.28E-043.80E-032.87E-02 - 56L3 510.001.79E-051.14E-045.95E-042.70E-031.49E-051.14E-041.06E-036.85E-03 - 56L3 740.006.19E-062.52E-059.21E-053.16E-045.59E-062.45E-051.60E-048.27E-04 - 56L31000.002.82E-068.34E-062.33E-056.48E-052.66E-067.82E-063.73E-051.62E-04 - 56L31500.001.11E-062.24E-064.58E-069.77E-061.07E-062.04E-066.04E-062.02E-05 - 56M1 2.291.03E+013.45E+041.63E+061.06E+091.56E+038.50E+067.83E+091.71E+12 - 56M1 3.296.45E+007.66E+037.70E+054.63E+075.25E+021.44E+067.58E+081.38E+11 - 56M1 5.292.99E+008.76E+021.68E+058.00E+061.27E+021.42E+053.81E+075.03E+09 - 56M1 9.291.04E+004.40E+011.32E+041.01E+062.35E+019.56E+031.23E+061.04E+08 - 56M1 16.293.22E-011.14E+006.02E+025.01E+044.41E+006.90E+024.58E+042.39E+06 - 56M1 26.001.12E-013.04E-013.05E+012.64E+031.10E+008.25E+013.28E+031.13E+05 - 56M1 41.003.78E-021.83E-011.62E+001.14E+022.86E-011.11E+012.76E+026.31E+03 - 56M1 53.002.00E-021.11E-015.54E-011.88E+011.35E-013.73E+007.16E+011.30E+03 - 56M1 71.009.47E-035.51E-022.51E-013.04E+005.74E-021.11E+001.60E+012.24E+02 - 56M1 104.003.49E-031.94E-028.78E-025.31E-011.92E-022.39E-012.43E+002.42E+01 - 56M1 150.001.32E-036.54E-032.77E-021.31E-016.83E-035.88E-024.33E-013.15E+00 - 56M1 280.002.60E-049.80E-043.37E-031.19E-021.25E-036.33E-032.82E-021.25E-01 - 56M1 500.006.41E-051.90E-045.20E-041.42E-032.82E-049.77E-042.95E-038.73E-03 - 56M2 2.142.42E+017.72E+062.19E+107.87E+121.90E+022.97E+057.94E+078.34E+09 - 56M2 3.141.22E+011.13E+061.82E+095.41E+115.96E+015.28E+041.17E+071.44E+09 - 56M2 5.144.21E+009.52E+047.89E+071.72E+101.34E+016.07E+039.88E+051.11E+08 - 56M2 9.149.99E-015.37E+032.18E+063.15E+082.35E+005.23E+025.64E+044.77E+06 - 56M2 16.142.05E-013.18E+026.76E+046.26E+064.19E-014.94E+013.43E+031.99E+05 - 56M2 26.004.91E-023.04E+013.84E+032.40E+059.89E-027.09E+003.34E+021.35E+04 - 56M2 41.001.17E-023.30E+002.59E+021.10E+042.50E-021.14E+003.68E+011.04E+03 - 56M2 53.005.10E-039.56E-015.76E+011.96E+031.15E-024.10E-011.07E+012.44E+02 - 56M2 71.001.95E-032.36E-011.06E+012.80E+024.78E-031.29E-012.63E+004.73E+01 - 56M2 104.005.45E-043.91E-021.20E+002.28E+011.52E-032.91E-024.30E-015.65E+00 - 56M2 150.001.60E-047.20E-031.56E-012.17E+005.11E-047.11E-037.76E-027.59E-01 - 56M2 280.002.06E-054.49E-045.54E-034.67E-028.08E-056.83E-044.59E-032.78E-02 - 56M2 500.003.35E-064.06E-053.13E-041.72E-031.50E-058.49E-053.83E-041.56E-03 - 56M3 2.065.43E+011.55E+074.59E+101.67E+134.98E+011.18E+072.93E+117.30E+14 - 56M3 3.062.53E+012.11E+063.48E+091.03E+121.50E+011.63E+061.90E+102.53E+13 - 56M3 5.068.06E+001.67E+051.38E+082.97E+103.24E+001.32E+055.98E+083.83E+11 - 56M3 9.061.78E+008.88E+033.54E+064.98E+085.49E-017.23E+031.14E+073.36E+09 - 56M3 16.063.42E-014.97E+021.02E+059.16E+069.58E-024.17E+022.46E+053.67E+07 - 56M3 26.007.71E-024.41E+015.31E+033.20E+052.21E-023.79E+011.04E+049.14E+05 - 56M3 41.001.76E-024.50E+003.31E+021.35E+045.56E-033.96E+005.62E+023.07E+04 - 56M3 53.007.44E-031.25E+006.98E+012.28E+032.55E-031.11E+001.12E+024.73E+03 - 56M3 71.002.76E-032.91E-011.19E+013.01E+021.06E-032.64E-011.83E+015.84E+02 - 56M3 104.007.42E-044.39E-021.20E+002.16E+013.35E-044.10E-021.81E+004.06E+01 - 56M3 150.002.11E-047.29E-031.36E-011.76E+001.12E-047.01E-032.09E-013.40E+00 - 56M3 280.002.59E-053.70E-043.60E-032.70E-021.80E-053.73E-046.06E-035.99E-02 - 56M3 500.004.22E-062.77E-051.49E-046.90E-043.52E-062.80E-052.69E-041.78E-03 - 56M4 1.801.22E+024.56E+053.66E+106.27E+141.38E+013.31E+054.34E+095.24E+12 - 56M4 2.802.92E+014.72E+041.62E+091.32E+133.23E+003.58E+042.21E+081.88E+11 - 56M4 4.804.50E+003.00E+033.62E+071.26E+115.34E-012.36E+036.16E+063.32E+09 - 56M4 8.804.73E-011.34E+024.99E+057.18E+086.72E-021.10E+021.18E+053.69E+07 - 56M4 15.804.70E-026.45E+007.96E+035.24E+068.59E-035.69E+002.74E+035.01E+05 - 56M4 26.006.02E-034.72E-012.37E+028.36E+041.42E-034.54E-011.17E+021.34E+04 - 56M4 41.008.64E-044.22E-029.70E+001.98E+032.65E-044.52E-026.75E+005.02E+02 - 56M4 53.002.84E-041.08E-021.62E+002.46E+021.02E-041.23E-021.37E+008.01E+01 - 56M4 71.007.90E-052.27E-032.14E-012.32E+013.37E-052.81E-032.26E-011.00E+01 - 56M4 104.001.48E-052.98E-041.56E-021.10E+007.86E-064.11E-042.19E-026.86E-01 - 56M4 150.003.01E-064.36E-051.33E-036.26E-021.92E-066.55E-052.39E-035.42E-02 - 56M4 280.002.08E-071.81E-062.33E-055.51E-041.74E-072.97E-065.95E-057.97E-04 - 56M4 500.001.91E-081.11E-077.09E-078.75E-061.90E-081.80E-072.15E-061.86E-05 - 56M5 1.781.81E+026.00E+055.98E+109.58E+148.42E+003.61E+042.12E+101.53E+15 - 56M5 2.784.25E+016.07E+042.59E+091.95E+131.97E+003.91E+039.37E+082.86E+13 - 56M5 4.786.42E+003.77E+035.66E+071.80E+113.29E-012.62E+022.12E+072.32E+11 - 56M5 8.786.61E-011.65E+027.66E+059.97E+084.25E-021.27E+013.03E+051.09E+09 - 56M5 15.786.44E-027.79E+001.20E+047.04E+065.61E-036.96E-015.05E+036.62E+06 - 56M5 26.008.09E-035.54E-013.46E+021.08E+059.59E-045.94E-021.56E+029.17E+04 - 56M5 41.001.14E-034.81E-021.37E+012.44E+031.85E-046.37E-036.57E+001.98E+03 - 56M5 53.003.73E-041.20E-022.23E+002.92E+027.26E-051.82E-031.11E+002.35E+02 - 56M5 71.001.03E-042.45E-032.83E-012.63E+012.47E-054.42E-041.47E-012.13E+01 - 56M5 104.001.94E-053.10E-041.94E-021.15E+006.03E-067.08E-051.08E-029.76E-01 - 56M5 150.003.95E-064.32E-051.53E-035.92E-021.56E-061.25E-058.98E-045.35E-02 - 56M5 280.002.77E-071.68E-062.23E-054.11E-041.61E-077.27E-071.45E-054.35E-04 - 56M5 500.003.18E-081.03E-075.78E-074.94E-062.21E-086.20E-084.07E-076.00E-06 - 56N+ 50.009.79E-037.81E-014.98E+012.00E+034.80E-021.96E+008.40E+013.25E+03 - 56N+ 70.003.81E-031.60E-016.69E+001.90E+021.79E-024.57E-011.21E+013.09E+02 - 56N+ 100.001.40E-033.14E-028.32E-011.65E+016.41E-031.03E-011.71E+002.85E+01 - 56N+ 150.004.48E-045.47E-038.45E-021.11E+002.03E-032.05E-022.09E-012.21E+00 - 56N+ 200.002.02E-041.70E-031.80E-021.77E-019.15E-046.89E-035.14E-024.00E-01 - 56N+ 500.001.93E-056.93E-052.63E-041.03E-038.17E-053.00E-041.00E-033.41E-03 - 57K 39.922.36E+006.66E+003.67E+008.16E-011.36E+012.67E+028.96E+026.88E+02 - 57K 40.622.25E+006.86E+005.41E+002.33E+001.28E+012.49E+029.02E+029.89E+02 - 57K 41.922.07E+007.12E+008.60E+007.05E+001.17E+012.21E+028.98E+021.50E+03 - 57K 45.121.71E+007.23E+001.50E+012.54E+019.42E+001.68E+028.29E+022.35E+03 - 57K 48.921.39E+006.79E+001.94E+014.88E+017.43E+001.23E+027.01E+022.72E+03 - 57K 53.001.12E+006.07E+002.11E+016.68E+015.88E+009.13E+015.67E+022.65E+03 - 57K 59.008.46E-014.97E+002.03E+017.76E+014.30E+006.10E+014.06E+022.21E+03 - 57K 67.006.01E-013.72E+001.70E+017.35E+012.97E+003.79E+012.62E+021.57E+03 - 57K 79.003.85E-012.42E+001.18E+015.50E+011.84E+002.05E+011.41E+028.87E+02 - 57K 92.002.53E-011.57E+007.75E+003.68E+011.19E+001.17E+017.80E+014.87E+02 - 57K 109.001.59E-019.45E-014.57E+002.14E+017.32E-016.29E+003.95E+012.37E+02 - 57K 122.001.16E-016.67E-013.14E+001.43E+015.32E-014.19E+002.51E+011.45E+02 - 57K 139.008.13E-024.42E-012.00E+008.80E+003.69E-012.63E+001.48E+018.05E+01 - 57K 162.005.33E-022.70E-011.16E+004.84E+002.41E-011.53E+007.93E+004.02E+01 - 57K 190.003.45E-021.62E-016.53E-012.55E+001.56E-018.81E-014.17E+001.94E+01 - 57K 255.001.57E-026.33E-022.24E-017.74E-017.04E-023.27E-011.31E+005.14E+00 - 57K 340.007.47E-032.60E-028.12E-022.47E-013.31E-021.29E-014.37E-011.46E+00 - 57K 430.004.20E-031.31E-023.70E-021.01E-011.81E-026.24E-021.86E-015.41E-01 - 57K 540.002.47E-037.05E-031.81E-024.52E-021.03E-023.17E-028.39E-022.16E-01 - 57K 770.001.16E-032.93E-036.62E-031.44E-024.35E-031.16E-022.62E-025.71E-02 - 57K 1050.006.34E-041.48E-033.03E-035.90E-032.10E-035.09E-031.02E-021.96E-02 - 57K 1300.004.31E-049.54E-041.85E-033.36E-031.29E-032.96E-035.57E-039.92E-03 - 57K 1550.003.19E-046.76E-041.25E-032.18E-038.75E-041.92E-033.45E-035.83E-03 - 57L1 7.277.40E+001.92E+031.54E+052.19E+062.67E+021.51E+051.48E+073.47E+08 - 57L1 7.976.33E+001.16E+031.22E+052.95E+062.03E+029.75E+048.90E+062.56E+08 - 57L1 9.274.84E+004.83E+026.98E+042.65E+061.29E+024.76E+043.85E+061.32E+08 - 57L1 12.472.76E+007.29E+011.69E+049.34E+055.31E+011.18E+047.48E+052.79E+07 - 57L1 16.271.61E+009.94E+003.78E+032.41E+052.40E+013.46E+031.74E+056.10E+06 - 57L1 20.001.03E+001.96E+001.05E+037.21E+041.30E+011.35E+035.65E+041.81E+06 - 57L1 26.005.75E-019.58E-011.80E+021.35E+045.96E+004.16E+021.38E+043.79E+05 - 57L1 34.003.07E-019.58E-012.58E+012.12E+032.69E+001.28E+023.33E+037.62E+04 - 57L1 46.001.48E-016.82E-013.86E+002.35E+021.10E+003.49E+016.93E+021.26E+04 - 57L1 59.007.93E-024.21E-011.70E+003.99E+015.33E-011.23E+011.95E+022.92E+03 - 57L1 76.004.14E-022.30E-019.63E-018.98E+002.55E-014.36E+005.53E+016.75E+02 - 57L1 89.002.75E-021.52E-016.53E-014.39E+001.62E-012.31E+002.56E+012.74E+02 - 57L1 106.001.73E-029.32E-024.05E-012.23E+009.83E-021.16E+001.10E+011.03E+02 - 57L1 129.001.03E-025.27E-022.25E-011.09E+005.64E-025.46E-014.39E+003.48E+01 - 57L1 155.006.34E-033.04E-021.25E-015.59E-013.37E-022.74E-011.89E+001.29E+01 - 57L1 220.002.52E-031.05E-023.89E-021.50E-011.29E-027.73E-024.04E-012.09E+00 - 57L1 305.001.09E-033.94E-031.30E-024.36E-025.40E-032.52E-021.03E-014.21E-01 - 57L1 400.005.63E-041.81E-035.36E-031.60E-022.67E-031.04E-023.57E-021.20E-01 - 57L1 510.003.20E-049.39E-042.54E-036.81E-031.45E-034.91E-031.45E-024.17E-02 - 57L1 740.001.44E-043.75E-048.85E-042.03E-035.80E-041.65E-034.00E-039.38E-03 - 57L11000.008.01E-051.92E-044.11E-048.43E-042.85E-047.24E-041.54E-033.14E-03 - 57L11500.003.91E-058.49E-051.62E-042.91E-041.13E-042.56E-044.77E-048.34E-04 - 57L2 6.891.52E+011.17E+054.57E+072.25E+092.96E+016.34E+032.32E+053.04E+06 - 57L2 7.591.16E+017.20E+042.59E+071.55E+092.20E+014.34E+031.94E+054.17E+06 - 57L2 8.897.40E+003.26E+041.02E+077.21E+081.36E+012.33E+031.23E+053.93E+06 - 57L2 12.093.01E+007.00E+031.66E+061.26E+085.30E+006.94E+023.92E+041.63E+06 - 57L2 15.891.31E+001.79E+033.30E+052.33E+072.30E+002.35E+021.24E+045.19E+05 - 57L2 20.006.43E-015.74E+028.48E+045.37E+061.14E+009.45E+014.50E+031.76E+05 - 57L2 26.002.80E-011.57E+021.81E+049.77E+055.13E-013.34E+011.37E+034.69E+04 - 57L2 34.001.18E-014.22E+013.73E+031.68E+052.27E-011.16E+013.94E+021.15E+04 - 57L2 46.004.35E-029.69E+006.39E+022.29E+049.07E-023.51E+009.57E+012.27E+03 - 57L2 59.001.90E-022.92E+001.51E+024.44E+034.27E-021.32E+002.97E+015.87E+02 - 57L2 76.008.09E-038.70E-013.52E+018.43E+021.99E-024.90E-019.02E+001.47E+02 - 57L2 89.004.74E-034.12E-011.43E+013.01E+021.24E-022.65E-014.30E+006.19E+01 - 57L2 106.002.62E-031.81E-015.33E+009.70E+017.34E-031.35E-011.90E+002.38E+01 - 57L2 129.001.35E-037.27E-021.78E+002.75E+014.08E-036.32E-027.62E-018.19E+00 - 57L2 155.007.28E-043.13E-026.46E-018.59E+002.36E-033.13E-023.27E-013.04E+00 - 57L2 220.002.28E-046.49E-039.77E-029.80E-018.36E-048.38E-036.65E-024.75E-01 - 57L2 305.007.87E-051.57E-031.78E-021.39E-013.20E-042.51E-031.57E-028.80E-02 - 57L2 400.003.33E-055.04E-044.59E-032.93E-021.45E-049.43E-044.88E-032.27E-02 - 57L2 510.001.58E-051.89E-041.43E-037.71E-037.21E-054.00E-041.77E-037.04E-03 - 57L2 740.005.37E-064.56E-052.63E-041.12E-032.49E-051.12E-043.98E-041.27E-03 - 57L21000.002.33E-061.55E-057.36E-052.64E-041.07E-054.14E-051.27E-043.47E-04 - 57L21500.008.12E-074.05E-061.52E-054.46E-053.45E-061.15E-052.95E-056.80E-05 - 57L3 6.483.18E+012.51E+051.09E+085.88E+098.06E+001.92E+055.04E+081.36E+11 - 57L3 7.182.36E+011.49E+055.88E+073.82E+095.88E+001.15E+052.51E+086.17E+10 - 57L3 8.481.45E+016.42E+042.16E+071.63E+093.52E+005.01E+048.14E+071.72E+10 - 57L3 11.685.52E+001.27E+043.13E+062.46E+081.31E+001.01E+049.48E+061.49E+09 - 57L3 15.482.29E+003.05E+035.71E+054.12E+075.53E-012.49E+031.46E+061.77E+08 - 57L3 20.001.01E+008.38E+021.21E+057.68E+062.52E-016.97E+022.70E+052.59E+07 - 57L3 26.004.29E-012.23E+022.48E+041.33E+061.13E-011.89E+024.91E+043.68E+06 - 57L3 34.001.75E-015.78E+014.90E+032.16E+054.96E-024.99E+018.77E+035.13E+05 - 57L3 46.006.29E-021.27E+017.89E+022.75E+041.97E-021.12E+011.30E+035.74E+04 - 57L3 59.002.67E-023.64E+001.76E+025.00E+039.24E-033.27E+002.75E+029.72E+03 - 57L3 76.001.11E-021.03E+003.83E+018.79E+024.28E-039.43E-015.81E+011.64E+03 - 57L3 89.006.41E-034.69E-011.48E+012.98E+022.66E-034.36E-012.23E+015.49E+02 - 57L3 106.003.48E-031.97E-015.21E+008.98E+011.57E-031.86E-017.84E+001.66E+02 - 57L3 129.001.76E-037.51E-021.62E+002.35E+018.68E-047.20E-022.45E+004.39E+01 - 57L3 155.009.32E-043.06E-025.44E-016.74E+005.01E-042.98E-028.41E-011.29E+01 - 57L3 220.002.83E-045.65E-037.00E-026.39E-011.78E-045.67E-031.14E-011.32E+00 - 57L3 305.009.62E-051.22E-031.08E-027.44E-026.87E-051.25E-031.85E-021.69E-01 - 57L3 400.004.07E-053.57E-042.39E-031.32E-023.18E-053.68E-044.29E-033.25E-02 - 57L3 510.001.95E-051.24E-046.52E-042.96E-031.62E-051.27E-041.19E-037.72E-03 - 57L3 740.006.72E-062.75E-051.01E-043.46E-046.07E-062.72E-051.80E-049.31E-04 - 57L31000.003.07E-069.10E-062.55E-057.10E-052.88E-068.64E-064.18E-051.82E-04 - 57L31500.001.19E-062.44E-065.01E-061.07E-051.16E-062.24E-066.72E-062.26E-05 - 57M1 2.369.79E+003.33E+041.63E+069.42E+081.59E+038.43E+067.59E+091.61E+12 - 57M1 3.366.23E+007.67E+037.47E+054.72E+075.50E+021.49E+067.76E+081.38E+11 - 57M1 5.362.94E+009.20E+021.67E+057.63E+061.36E+021.53E+054.08E+075.30E+09 - 57M1 9.361.04E+004.98E+011.38E+041.02E+062.56E+011.05E+041.36E+061.13E+08 - 57M1 16.363.25E-011.42E+006.69E+025.32E+044.85E+007.68E+025.10E+042.64E+06 - 57M1 26.001.15E-012.87E-013.68E+013.00E+031.22E+009.33E+013.71E+031.27E+05 - 57M1 41.003.90E-021.74E-011.93E+001.35E+023.18E-011.25E+013.11E+027.09E+03 - 57M1 53.002.07E-021.08E-015.91E-012.26E+011.50E-014.19E+008.04E+011.45E+03 - 57M1 71.009.83E-035.47E-022.50E-013.53E+006.39E-021.24E+001.79E+012.50E+02 - 57M1 104.003.64E-031.96E-028.72E-025.63E-012.13E-022.67E-012.71E+002.70E+01 - 57M1 150.001.39E-036.69E-032.80E-021.35E-017.58E-036.54E-024.81E-013.50E+00 - 57M1 280.002.74E-041.02E-033.49E-031.24E-021.39E-037.01E-033.12E-021.38E-01 - 57M1 500.006.79E-052.01E-045.49E-041.50E-033.11E-041.08E-033.25E-039.62E-03 - 57M2 2.202.29E+017.32E+062.03E+107.06E+121.94E+022.94E+057.59E+077.59E+09 - 57M2 3.201.18E+011.12E+061.79E+095.18E+116.25E+015.44E+041.17E+071.39E+09 - 57M2 5.204.19E+009.90E+048.14E+071.74E+101.44E+016.46E+031.03E+061.13E+08 - 57M2 9.201.02E+005.74E+032.32E+063.31E+082.57E+005.68E+026.03E+045.00E+06 - 57M2 16.202.14E-013.46E+027.33E+046.72E+064.64E-015.43E+013.73E+032.13E+05 - 57M2 26.005.23E-023.37E+014.27E+032.66E+051.11E-017.92E+003.71E+021.49E+04 - 57M2 41.001.26E-023.67E+002.88E+021.22E+042.81E-021.27E+004.08E+011.14E+03 - 57M2 53.005.50E-031.06E+006.41E+012.17E+031.30E-024.59E-011.19E+012.69E+02 - 57M2 71.002.11E-032.63E-011.18E+013.11E+025.39E-031.45E-012.93E+005.23E+01 - 57M2 104.005.94E-044.36E-021.34E+002.54E+011.72E-033.27E-024.80E-016.27E+00 - 57M2 150.001.75E-048.05E-031.74E-012.43E+005.78E-048.00E-038.69E-028.46E-01 - 57M2 280.002.27E-055.04E-046.23E-035.24E-029.18E-057.72E-045.17E-033.12E-02 - 57M2 500.003.73E-064.57E-053.53E-041.94E-031.71E-059.64E-054.34E-041.76E-03 - 57M3 2.125.18E+011.47E+074.26E+101.50E+134.98E+011.17E+072.84E+116.91E+14 - 57M3 3.122.46E+012.10E+063.42E+099.87E+111.54E+011.70E+061.96E+102.59E+13 - 57M3 5.128.04E+001.74E+051.43E+083.00E+103.41E+001.43E+056.50E+084.16E+11 - 57M3 9.121.81E+009.46E+033.76E+065.21E+085.88E-018.02E+031.28E+073.79E+09 - 57M3 16.123.55E-015.37E+021.10E+059.76E+061.04E-014.69E+022.81E+054.20E+07 - 57M3 26.008.16E-024.86E+015.86E+033.51E+052.42E-024.35E+011.22E+041.07E+06 - 57M3 41.001.87E-024.96E+003.65E+021.48E+046.08E-034.54E+006.54E+023.57E+04 - 57M3 53.007.96E-031.38E+007.70E+012.50E+032.80E-031.28E+001.30E+025.49E+03 - 57M3 71.002.96E-033.21E-011.32E+013.30E+021.16E-033.02E-012.12E+016.76E+02 - 57M3 104.008.01E-044.85E-021.33E+002.37E+013.67E-044.69E-022.09E+004.69E+01 - 57M3 150.002.28E-048.06E-031.50E-011.94E+001.23E-048.00E-032.40E-013.91E+00 - 57M3 280.002.81E-054.10E-043.98E-032.98E-021.97E-054.24E-046.93E-036.85E-02 - 57M3 500.004.62E-063.07E-051.65E-047.63E-043.86E-063.16E-053.06E-042.03E-03 - 57M4 1.851.17E+024.37E+053.43E+105.76E+141.39E+013.31E+054.24E+094.99E+12 - 57M4 2.852.93E+014.77E+041.64E+091.33E+133.38E+003.78E+042.31E+081.94E+11 - 57M4 4.854.67E+003.15E+033.85E+071.35E+115.74E-012.60E+036.78E+063.61E+09 - 57M4 8.855.05E-011.45E+025.51E+058.01E+087.38E-021.25E+021.33E+054.15E+07 - 57M4 15.855.12E-027.09E+008.96E+035.96E+069.56E-036.51E+003.16E+035.73E+05 - 57M4 26.006.68E-035.31E-012.74E+029.77E+041.61E-035.30E-011.37E+021.57E+04 - 57M4 41.009.68E-044.78E-021.12E+012.32E+033.02E-045.27E-027.92E+005.88E+02 - 57M4 53.003.20E-041.22E-021.87E+002.87E+021.16E-041.44E-021.61E+009.38E+01 - 57M4 71.008.97E-052.58E-032.47E-012.71E+013.85E-053.28E-032.65E-011.18E+01 - 57M4 104.001.68E-053.41E-041.81E-021.29E+009.00E-064.80E-042.57E-028.05E-01 - 57M4 150.003.37E-065.00E-051.54E-037.32E-022.21E-067.67E-052.81E-036.36E-02 - 57M4 280.002.36E-072.08E-062.70E-056.45E-042.00E-073.49E-067.00E-059.38E-04 - 57M4 500.002.19E-081.29E-078.23E-071.02E-052.19E-082.11E-072.54E-062.20E-05 - 57M5 1.831.75E+025.71E+055.64E+108.86E+148.50E+003.58E+042.08E+101.47E+15 - 57M5 2.834.26E+016.09E+042.63E+091.97E+132.06E+004.08E+039.89E+083.01E+13 - 57M5 4.836.66E+003.94E+036.06E+071.93E+113.53E-012.84E+022.36E+072.60E+11 - 57M5 8.837.05E-011.77E+028.49E+051.11E+094.64E-021.41E+013.48E+051.27E+09 - 57M5 15.837.00E-028.51E+001.35E+048.00E+066.21E-037.81E-015.91E+037.88E+06 - 57M5 26.008.97E-036.19E-014.00E+021.26E+051.08E-036.77E-021.86E+021.12E+05 - 57M5 41.001.28E-035.40E-021.58E+012.84E+032.09E-047.26E-037.86E+002.40E+03 - 57M5 53.004.18E-041.35E-022.58E+003.40E+028.21E-052.08E-031.33E+002.84E+02 - 57M5 71.001.16E-042.77E-033.28E-013.06E+012.80E-055.04E-041.76E-012.58E+01 - 57M5 104.002.18E-053.50E-042.25E-021.35E+006.85E-068.08E-051.28E-021.17E+00 - 57M5 150.004.47E-064.90E-051.77E-036.89E-021.77E-061.43E-051.07E-036.42E-02 - 57M5 280.003.33E-071.92E-062.59E-054.78E-041.84E-078.32E-071.72E-055.20E-04 - 57M5 500.003.56E-081.18E-076.66E-075.76E-062.51E-087.09E-084.76E-077.13E-06 - 57N+ 50.001.05E-028.84E-015.69E+012.30E+035.42E-022.25E+009.86E+013.87E+03 - 57N+ 70.004.08E-031.80E-017.63E+002.18E+022.03E-025.23E-011.41E+013.64E+02 - 57N+ 100.001.50E-033.52E-029.47E-011.89E+017.23E-031.18E-011.97E+003.33E+01 - 57N+ 150.004.81E-046.06E-039.58E-021.27E+002.29E-032.33E-022.39E-012.55E+00 - 57N+ 200.002.17E-041.87E-032.03E-022.01E-011.03E-037.80E-035.86E-024.60E-01 - 57N+ 500.002.09E-057.56E-052.91E-041.15E-039.14E-053.36E-041.13E-033.85E-03 - 58K 41.442.19E+005.90E+003.09E+006.36E-011.33E+012.51E+028.07E+025.91E+02 - 58K 42.142.09E+006.08E+004.53E+001.80E+001.26E+012.35E+028.14E+028.44E+02 - 58K 43.441.93E+006.30E+007.15E+005.43E+001.15E+012.08E+028.10E+021.28E+03 - 58K 46.641.61E+006.43E+001.25E+011.98E+019.36E+001.60E+027.53E+022.01E+03 - 58K 50.441.31E+006.08E+001.63E+013.84E+017.44E+001.19E+026.44E+022.36E+03 - 58K 54.001.10E+005.56E+001.78E+015.19E+016.09E+009.21E+015.40E+022.35E+03 - 58K 60.008.29E-014.61E+001.77E+016.31E+014.48E+006.21E+013.93E+022.02E+03 - 58K 68.005.93E-013.50E+001.51E+016.20E+013.11E+003.89E+012.57E+021.47E+03 - 58K 80.003.82E-012.31E+001.08E+014.81E+011.94E+002.12E+011.41E+028.52E+02 - 58K 93.002.54E-011.52E+007.21E+003.30E+011.26E+001.22E+017.89E+014.76E+02 - 58K 110.001.60E-019.23E-014.33E+001.96E+017.80E-016.60E+004.05E+012.36E+02 - 58K 123.001.18E-016.55E-013.00E+001.33E+015.69E-014.41E+002.58E+011.45E+02 - 58K 140.008.25E-024.37E-011.93E+008.31E+003.95E-012.78E+001.53E+018.18E+01 - 58K 163.005.44E-022.70E-011.13E+004.63E+002.59E-011.63E+008.27E+004.12E+01 - 58K 190.003.58E-021.65E-016.55E-012.53E+001.70E-019.56E-014.47E+002.06E+01 - 58K 255.001.63E-026.50E-022.28E-017.78E-017.67E-023.55E-011.40E+005.48E+00 - 58K 340.007.80E-032.69E-028.33E-022.52E-013.60E-021.40E-014.71E-011.55E+00 - 58K 430.004.39E-031.36E-023.82E-021.04E-011.97E-026.76E-022.00E-015.80E-01 - 58K 540.002.59E-037.35E-031.88E-024.68E-021.11E-023.43E-029.03E-022.32E-01 - 58K 770.001.22E-033.08E-036.95E-031.50E-024.70E-031.26E-022.83E-026.13E-02 - 58K 1050.006.66E-041.56E-033.19E-036.22E-032.27E-035.49E-031.10E-022.11E-02 - 58K 1300.004.53E-041.01E-031.95E-033.56E-031.39E-033.19E-036.00E-031.07E-02 - 58K 1550.003.35E-047.15E-041.33E-032.31E-039.39E-042.07E-033.72E-036.26E-03 - 58L1 7.556.87E+001.75E+031.33E+051.74E+062.63E+021.42E+051.34E+072.97E+08 - 58L1 8.255.91E+001.07E+031.07E+052.39E+062.02E+029.32E+048.17E+062.23E+08 - 58L1 9.554.56E+004.65E+026.29E+042.23E+061.30E+024.65E+043.63E+061.18E+08 - 58L1 12.752.65E+007.56E+011.61E+048.41E+055.49E+011.20E+047.37E+052.64E+07 - 58L1 16.551.56E+001.13E+013.79E+032.29E+052.52E+013.59E+031.76E+055.99E+06 - 58L1 20.001.04E+002.55E+001.20E+037.72E+041.43E+011.51E+036.29E+041.97E+06 - 58L1 26.005.83E-018.98E-012.13E+021.49E+046.58E+004.66E+021.53E+044.15E+05 - 58L1 34.003.14E-018.69E-013.19E+012.42E+032.97E+001.43E+023.70E+038.36E+04 - 58L1 46.001.51E-016.44E-014.46E+002.78E+021.22E+003.89E+017.68E+021.39E+04 - 58L1 59.008.15E-024.08E-011.72E+004.76E+015.89E-011.36E+012.16E+023.21E+03 - 58L1 76.004.27E-022.27E-019.35E-011.01E+012.82E-014.83E+006.11E+017.41E+02 - 58L1 89.002.84E-021.51E-016.36E-014.72E+001.79E-012.56E+002.82E+013.01E+02 - 58L1 106.001.80E-029.34E-023.97E-012.31E+001.08E-011.29E+001.22E+011.13E+02 - 58L1 129.001.07E-025.32E-022.23E-011.11E+006.22E-026.03E-014.83E+003.81E+01 - 58L1 155.006.60E-033.09E-021.25E-015.68E-013.72E-023.02E-012.08E+001.42E+01 - 58L1 220.002.63E-031.08E-023.96E-021.54E-011.42E-028.50E-024.43E-012.29E+00 - 58L1 305.001.15E-034.08E-031.34E-024.51E-025.93E-032.77E-021.13E-014.60E-01 - 58L1 400.005.92E-041.89E-035.59E-031.67E-022.93E-031.14E-023.90E-021.31E-01 - 58L1 510.003.38E-049.85E-042.66E-037.17E-031.58E-035.37E-031.58E-024.55E-02 - 58L1 740.001.53E-043.96E-049.37E-042.16E-036.33E-041.80E-034.37E-031.02E-02 - 58L11000.008.48E-052.04E-044.37E-048.98E-043.10E-047.89E-041.68E-033.41E-03 - 58L11500.004.13E-059.03E-051.73E-043.11E-041.22E-042.78E-045.18E-049.07E-04 - 58L2 7.161.41E+011.06E+053.95E+071.85E+092.91E+015.95E+032.07E+052.49E+06 - 58L2 7.861.09E+016.63E+042.29E+071.30E+092.19E+014.13E+031.74E+053.49E+06 - 58L2 9.167.06E+003.08E+049.28E+066.24E+081.37E+012.27E+031.13E+053.40E+06 - 58L2 12.362.94E+006.88E+031.59E+061.15E+085.50E+006.97E+023.77E+041.49E+06 - 58L2 16.161.31E+001.81E+033.26E+052.23E+072.43E+002.42E+021.23E+044.96E+05 - 58L2 20.006.79E-016.31E+029.28E+045.76E+061.27E+001.04E+024.84E+031.84E+05 - 58L2 26.002.97E-011.73E+021.98E+041.06E+065.71E-013.68E+011.48E+034.98E+04 - 58L2 34.001.25E-014.64E+014.10E+031.82E+052.53E-011.28E+014.29E+021.24E+04 - 58L2 46.004.65E-021.07E+017.03E+022.50E+041.01E-013.88E+001.05E+022.46E+03 - 58L2 59.002.03E-023.22E+001.66E+024.85E+034.77E-021.46E+003.25E+016.37E+02 - 58L2 76.008.70E-039.60E-013.88E+019.24E+022.23E-025.43E-019.91E+001.60E+02 - 58L2 89.005.11E-034.55E-011.58E+013.31E+021.39E-022.94E-014.73E+006.76E+01 - 58L2 106.002.84E-032.00E-015.89E+001.07E+028.21E-031.49E-012.09E+002.61E+01 - 58L2 129.001.46E-038.05E-021.97E+003.03E+014.57E-037.03E-028.42E-019.00E+00 - 58L2 155.007.91E-043.47E-027.16E-019.49E+002.65E-033.49E-023.62E-013.35E+00 - 58L2 220.002.48E-047.20E-031.09E-011.09E+009.40E-049.36E-037.39E-025.25E-01 - 58L2 305.008.59E-051.74E-031.99E-021.54E-013.61E-042.81E-031.75E-029.77E-02 - 58L2 400.003.66E-055.62E-045.13E-033.27E-021.64E-041.06E-035.45E-032.53E-02 - 58L2 510.001.75E-052.11E-041.60E-038.61E-038.14E-054.50E-041.98E-037.86E-03 - 58L2 740.005.94E-065.09E-052.95E-041.26E-032.82E-051.26E-044.47E-041.43E-03 - 58L21000.002.57E-061.74E-058.27E-052.97E-041.21E-054.68E-051.42E-043.90E-04 - 58L21500.009.10E-074.53E-061.71E-055.01E-053.91E-061.30E-053.33E-057.67E-05 - 58L3 6.722.96E+012.28E+059.48E+074.88E+097.80E+001.81E+054.58E+081.19E+11 - 58L3 7.422.23E+011.38E+055.23E+073.23E+095.75E+001.11E+052.34E+085.54E+10 - 58L3 8.721.39E+016.08E+041.98E+071.42E+093.50E+004.94E+047.83E+071.60E+10 - 58L3 11.925.41E+001.25E+043.01E+062.28E+081.34E+001.04E+049.59E+061.47E+09 - 58L3 15.722.29E+003.08E+035.65E+053.95E+075.71E-012.62E+031.52E+061.81E+08 - 58L3 20.001.06E+009.14E+021.32E+058.19E+062.73E-017.90E+023.12E+052.97E+07 - 58L3 26.004.52E-012.43E+022.70E+041.42E+061.22E-012.14E+025.65E+044.22E+06 - 58L3 34.001.85E-016.30E+015.33E+032.33E+055.38E-025.66E+011.01E+045.87E+05 - 58L3 46.006.67E-021.38E+018.59E+022.97E+042.14E-021.26E+011.48E+036.56E+04 - 58L3 59.002.84E-023.98E+001.92E+025.40E+031.00E-023.70E+003.14E+021.11E+04 - 58L3 76.001.18E-021.12E+004.17E+019.52E+024.65E-031.07E+006.63E+011.87E+03 - 58L3 89.006.84E-035.13E-011.62E+013.23E+022.88E-034.93E-012.55E+016.24E+02 - 58L3 106.003.72E-032.16E-015.68E+009.75E+011.70E-032.10E-018.92E+001.88E+02 - 58L3 129.001.88E-038.21E-021.76E+002.55E+019.43E-048.13E-022.79E+004.98E+01 - 58L3 155.009.99E-043.34E-025.95E-017.33E+005.44E-043.36E-029.55E-011.46E+01 - 58L3 220.003.04E-046.18E-037.65E-026.96E-011.93E-046.39E-031.29E-011.50E+00 - 58L3 305.001.04E-041.33E-031.18E-028.12E-027.46E-051.40E-032.10E-021.91E-01 - 58L3 400.004.40E-053.91E-042.62E-031.44E-023.45E-054.11E-044.83E-033.66E-02 - 58L3 510.002.10E-051.36E-047.14E-043.24E-031.76E-051.42E-041.34E-038.70E-03 - 58L3 740.007.23E-063.01E-051.10E-043.79E-046.58E-063.01E-052.02E-041.05E-03 - 58L31000.003.34E-069.90E-062.79E-057.78E-053.12E-069.53E-064.67E-052.04E-04 - 58L31500.001.28E-062.66E-065.47E-061.17E-051.25E-062.45E-067.46E-062.53E-05 - 58M1 2.439.23E+003.17E+041.59E+068.16E+081.61E+038.28E+067.25E+091.49E+12 - 58M1 3.435.97E+007.61E+037.11E+054.72E+075.73E+021.53E+067.86E+081.36E+11 - 58M1 5.432.87E+009.60E+021.65E+057.18E+061.45E+021.63E+054.33E+075.51E+09 - 58M1 9.431.03E+005.58E+011.44E+041.01E+062.79E+011.15E+041.48E+061.22E+08 - 58M1 16.433.27E-011.76E+007.38E+025.62E+045.32E+008.53E+025.65E+042.90E+06 - 58M1 26.001.18E-012.78E-014.39E+013.37E+031.36E+001.05E+024.20E+031.44E+05 - 58M1 41.004.01E-021.66E-012.34E+001.59E+023.54E-011.41E+013.50E+027.95E+03 - 58M1 53.002.13E-021.05E-016.48E-012.70E+011.66E-014.70E+009.02E+011.63E+03 - 58M1 71.001.02E-025.41E-022.52E-014.13E+007.10E-021.39E+002.01E+012.79E+02 - 58M1 104.003.79E-031.97E-028.69E-026.04E-012.37E-022.98E-013.02E+003.00E+01 - 58M1 150.001.45E-036.84E-032.83E-021.40E-018.41E-037.28E-025.34E-013.88E+00 - 58M1 280.002.89E-041.06E-033.62E-031.30E-021.53E-037.76E-033.45E-021.52E-01 - 58M1 500.007.21E-052.12E-045.80E-041.59E-033.43E-041.19E-033.58E-031.06E-02 - 58M2 2.272.16E+016.94E+061.87E+106.27E+121.97E+022.89E+057.20E+076.75E+09 - 58M2 3.271.14E+011.12E+061.75E+094.93E+116.55E+015.59E+041.17E+071.32E+09 - 58M2 5.274.16E+001.03E+058.37E+071.75E+101.55E+016.86E+031.07E+061.13E+08 - 58M2 9.271.04E+006.13E+032.47E+063.46E+082.81E+006.16E+026.43E+045.21E+06 - 58M2 16.272.22E-013.76E+027.94E+047.19E+065.14E-015.96E+014.04E+032.27E+05 - 58M2 26.005.55E-023.74E+014.75E+032.93E+051.25E-018.85E+004.10E+021.63E+04 - 58M2 41.001.35E-024.08E+003.20E+021.35E+043.16E-021.42E+004.53E+011.26E+03 - 58M2 53.005.91E-031.18E+007.13E+012.41E+031.46E-025.14E-011.32E+012.97E+02 - 58M2 71.002.28E-032.93E-011.31E+013.45E+026.08E-031.62E-013.26E+005.78E+01 - 58M2 104.006.45E-044.86E-021.50E+002.83E+011.94E-033.67E-025.35E-016.96E+00 - 58M2 150.001.91E-048.99E-031.95E-012.70E+006.54E-049.00E-039.72E-029.42E-01 - 58M2 280.002.50E-055.66E-047.00E-035.87E-021.04E-048.72E-045.81E-033.49E-02 - 58M2 500.004.16E-065.15E-053.98E-042.19E-031.94E-051.09E-044.90E-041.98E-03 - 58M3 2.184.92E+011.40E+073.94E+101.34E+134.98E+011.16E+072.74E+116.53E+14 - 58M3 3.182.39E+012.10E+063.36E+099.43E+111.58E+011.76E+062.02E+102.65E+13 - 58M3 5.188.01E+001.80E+051.47E+083.02E+103.60E+001.54E+057.05E+084.50E+11 - 58M3 9.181.85E+001.01E+043.99E+065.43E+086.29E-018.88E+031.43E+074.26E+09 - 58M3 16.183.68E-015.80E+021.18E+051.04E+071.12E-015.27E+023.21E+054.80E+07 - 58M3 26.008.62E-025.36E+016.45E+033.83E+052.65E-024.98E+011.42E+041.25E+06 - 58M3 41.001.99E-025.47E+004.02E+021.62E+046.65E-035.19E+007.59E+024.15E+04 - 58M3 53.008.51E-031.52E+008.48E+012.73E+033.06E-031.46E+001.50E+026.36E+03 - 58M3 71.003.17E-033.54E-011.45E+013.61E+021.27E-033.46E-012.45E+017.81E+02 - 58M3 104.008.63E-045.35E-021.47E+002.60E+014.02E-045.35E-022.41E+005.40E+01 - 58M3 150.002.47E-048.90E-031.66E-012.13E+001.35E-049.12E-032.76E-014.49E+00 - 58M3 280.003.07E-054.52E-044.40E-033.28E-022.16E-054.81E-047.92E-037.83E-02 - 58M3 500.005.00E-063.39E-051.82E-048.43E-044.23E-063.56E-053.49E-042.31E-03 - 58M4 1.901.14E+024.20E+053.24E+105.35E+141.41E+013.34E+054.18E+094.77E+12 - 58M4 2.902.94E+014.82E+041.65E+091.34E+133.54E+004.00E+042.43E+081.99E+11 - 58M4 4.904.85E+003.31E+034.11E+071.44E+116.18E-012.86E+037.46E+063.92E+09 - 58M4 8.905.39E-011.56E+026.08E+058.92E+088.11E-021.40E+021.51E+054.66E+07 - 58M4 15.905.57E-027.80E+001.01E+046.78E+061.06E-027.45E+003.63E+036.55E+05 - 58M4 26.007.43E-035.97E-013.15E+021.14E+051.82E-036.17E-011.61E+021.83E+04 - 58M4 41.001.08E-035.40E-021.29E+012.70E+033.42E-046.14E-029.28E+006.88E+02 - 58M4 53.003.58E-041.38E-022.16E+003.34E+021.32E-041.68E-021.88E+001.10E+02 - 58M4 71.001.01E-042.93E-032.85E-013.16E+014.38E-053.83E-033.10E-011.38E+01 - 58M4 104.001.91E-053.90E-042.09E-021.51E+001.03E-055.61E-043.01E-029.42E-01 - 58M4 150.003.90E-065.74E-051.78E-038.55E-022.53E-068.96E-053.30E-037.46E-02 - 58M4 280.002.78E-072.41E-063.13E-057.54E-042.30E-074.08E-068.23E-051.10E-03 - 58M4 500.002.74E-081.48E-079.58E-071.20E-052.52E-082.47E-072.99E-062.59E-05 - 58M5 1.881.69E+025.47E+055.35E+108.22E+148.59E+003.56E+042.05E+101.42E+15 - 58M5 2.884.28E+016.12E+042.67E+091.98E+132.15E+004.25E+031.04E+093.17E+13 - 58M5 4.886.91E+004.11E+036.48E+072.07E+113.78E-013.07E+022.62E+072.92E+11 - 58M5 8.887.51E-011.90E+029.40E+051.24E+095.07E-021.56E+014.00E+051.49E+09 - 58M5 15.887.59E-029.28E+001.53E+049.08E+066.87E-038.75E-016.91E+039.38E+06 - 58M5 26.009.93E-036.89E-014.62E+021.46E+051.21E-037.70E-022.23E+021.36E+05 - 58M5 41.001.42E-036.04E-021.83E+013.31E+032.36E-048.27E-039.38E+002.91E+03 - 58M5 53.004.68E-041.52E-022.98E+003.95E+029.26E-052.37E-031.58E+003.44E+02 - 58M5 71.001.30E-043.12E-033.79E-013.56E+013.17E-055.74E-042.10E-013.11E+01 - 58M5 104.002.46E-053.96E-042.60E-021.56E+007.76E-069.21E-051.53E-021.41E+00 - 58M5 150.005.04E-065.56E-052.05E-038.02E-022.01E-061.63E-051.27E-037.70E-02 - 58M5 280.003.76E-072.18E-062.99E-055.56E-042.09E-079.51E-072.03E-056.20E-04 - 58M5 500.004.21E-081.36E-077.71E-076.69E-062.86E-088.10E-085.56E-078.46E-06 - 58N+ 50.001.08E-029.55E-016.18E+012.49E+035.98E-022.51E+001.11E+024.39E+03 - 58N+ 70.004.23E-031.93E-018.28E+002.36E+022.23E-025.82E-011.58E+014.10E+02 - 58N+ 100.001.56E-033.77E-021.03E+002.05E+017.97E-031.30E-012.20E+003.73E+01 - 58N+ 150.005.02E-046.46E-031.04E-011.38E+002.52E-032.57E-022.66E-012.84E+00 - 58N+ 200.002.28E-041.99E-032.20E-022.19E-011.13E-038.61E-036.49E-025.11E-01 - 58N+ 500.002.20E-058.02E-053.12E-041.25E-031.00E-043.69E-041.24E-034.23E-03 - 59K 42.992.04E+005.24E+002.60E+004.90E-011.31E+012.36E+027.28E+025.06E+02 - 59K 43.691.95E+005.39E+003.78E+001.38E+001.24E+012.21E+027.34E+027.19E+02 - 59K 44.991.80E+005.59E+005.95E+004.18E+001.13E+011.97E+027.32E+021.08E+03 - 59K 48.191.51E+005.72E+001.04E+011.53E+019.31E+001.53E+026.85E+021.72E+03 - 59K 51.991.24E+005.45E+001.37E+013.03E+017.45E+001.15E+025.92E+022.04E+03 - 59K 56.001.02E+004.95E+001.53E+014.27E+015.99E+008.69E+014.90E+022.05E+03 - 59K 62.007.79E-014.14E+001.52E+015.19E+014.45E+005.94E+013.61E+021.78E+03 - 59K 70.005.64E-013.18E+001.31E+015.16E+013.13E+003.78E+012.40E+021.31E+03 - 59K 82.003.68E-012.13E+009.54E+004.09E+011.98E+002.10E+011.35E+027.82E+02 - 59K 95.002.47E-011.42E+006.50E+002.87E+011.30E+001.22E+017.65E+014.46E+02 - 59K 112.001.57E-018.76E-013.97E+001.75E+018.10E-016.70E+003.99E+012.26E+02 - 59K 125.001.16E-016.27E-012.79E+001.21E+015.94E-014.51E+002.57E+011.41E+02 - 59K 142.008.21E-024.22E-011.82E+007.63E+004.15E-012.86E+001.54E+018.03E+01 - 59K 165.005.45E-022.63E-011.08E+004.33E+002.73E-011.69E+008.42E+004.10E+01 - 59K 190.003.72E-021.68E-016.57E-012.50E+001.85E-011.04E+004.79E+002.17E+01 - 59K 255.001.70E-026.67E-022.31E-017.82E-018.36E-023.84E-011.51E+005.82E+00 - 59K 340.008.14E-032.78E-028.54E-022.56E-013.92E-021.51E-015.06E-011.66E+00 - 59K 430.004.59E-031.42E-023.95E-021.07E-012.14E-027.31E-022.15E-016.20E-01 - 59K 540.002.72E-037.67E-031.96E-024.86E-021.21E-023.71E-029.72E-022.49E-01 - 59K 770.001.28E-033.23E-037.29E-031.58E-025.08E-031.36E-023.04E-026.58E-02 - 59K 1050.007.00E-041.64E-033.37E-036.55E-032.44E-035.93E-031.19E-022.26E-02 - 59K 1300.004.76E-041.06E-032.06E-033.76E-031.50E-033.44E-036.46E-031.14E-02 - 59K 1550.003.52E-047.55E-041.40E-032.45E-031.01E-032.23E-034.00E-036.73E-03 - 59L1 7.836.39E+001.60E+031.14E+051.38E+062.60E+021.34E+051.21E+072.55E+08 - 59L1 8.535.53E+001.00E+039.34E+041.94E+062.01E+028.92E+047.52E+061.94E+08 - 59L1 9.834.31E+004.48E+025.67E+041.87E+061.32E+024.56E+043.43E+061.06E+08 - 59L1 13.032.54E+007.83E+011.53E+047.56E+055.67E+011.22E+047.26E+052.49E+07 - 59L1 16.831.52E+001.27E+013.79E+032.17E+052.65E+013.72E+031.79E+055.87E+06 - 59L1 20.001.05E+003.35E+001.35E+038.22E+041.58E+011.70E+037.00E+042.15E+06 - 59L1 26.005.92E-018.89E-012.50E+021.64E+047.27E+005.21E+021.70E+044.54E+05 - 59L1 34.003.19E-017.90E-013.90E+012.75E+033.28E+001.59E+024.10E+039.17E+04 - 59L1 46.001.55E-016.06E-015.27E+003.27E+021.35E+004.32E+018.50E+021.52E+04 - 59L1 59.008.37E-023.93E-011.79E+005.65E+016.50E-011.52E+012.39E+023.53E+03 - 59L1 76.004.40E-022.23E-019.18E-011.15E+013.11E-015.35E+006.74E+018.13E+02 - 59L1 89.002.93E-021.50E-016.22E-015.15E+001.97E-012.84E+003.11E+013.30E+02 - 59L1 106.001.86E-029.34E-023.91E-012.43E+001.19E-011.42E+001.34E+011.24E+02 - 59L1 129.001.11E-025.36E-022.21E-011.14E+006.85E-026.66E-015.32E+004.18E+01 - 59L1 155.006.85E-033.14E-021.26E-015.80E-014.09E-023.33E-012.29E+001.55E+01 - 59L1 220.002.75E-031.11E-024.03E-021.58E-011.56E-029.34E-024.86E-012.51E+00 - 59L1 305.001.20E-034.23E-031.38E-024.67E-026.51E-033.03E-021.24E-015.03E-01 - 59L1 400.006.23E-041.97E-035.82E-031.75E-023.21E-031.25E-024.26E-021.43E-01 - 59L1 510.003.56E-041.03E-032.79E-037.54E-031.73E-035.87E-031.72E-024.97E-02 - 59L1 740.001.61E-044.18E-049.91E-042.29E-036.90E-041.97E-034.76E-031.11E-02 - 59L11000.008.96E-052.16E-044.65E-049.57E-043.37E-048.60E-041.83E-033.71E-03 - 59L11500.004.35E-059.60E-051.84E-043.33E-041.33E-043.03E-045.63E-049.85E-04 - 59L2 7.441.32E+019.61E+043.43E+071.52E+092.88E+015.60E+031.84E+052.03E+06 - 59L2 8.141.03E+016.12E+042.03E+071.09E+092.19E+013.94E+031.57E+052.90E+06 - 59L2 9.446.74E+002.91E+048.47E+065.41E+081.39E+012.21E+031.05E+052.93E+06 - 59L2 12.642.88E+006.77E+031.52E+061.06E+085.71E+007.00E+023.63E+041.36E+06 - 59L2 16.441.31E+001.83E+033.22E+052.13E+072.56E+002.48E+021.22E+044.72E+05 - 59L2 20.007.15E-016.93E+021.01E+056.16E+061.41E+001.14E+025.20E+031.92E+05 - 59L2 26.003.14E-011.90E+022.17E+041.14E+066.35E-014.05E+011.60E+035.28E+04 - 59L2 34.001.33E-015.11E+014.49E+031.97E+052.81E-011.41E+014.66E+021.32E+04 - 59L2 46.004.96E-021.18E+017.72E+022.71E+041.13E-014.28E+001.14E+022.65E+03 - 59L2 59.002.18E-023.54E+001.83E+025.30E+035.32E-021.61E+003.56E+016.91E+02 - 59L2 76.009.35E-031.06E+004.28E+011.01E+032.49E-026.01E-011.09E+011.74E+02 - 59L2 89.005.51E-035.02E-011.74E+013.62E+021.55E-023.26E-015.21E+007.38E+01 - 59L2 106.003.06E-032.21E-016.51E+001.17E+029.19E-031.66E-012.31E+002.86E+01 - 59L2 129.001.58E-038.90E-022.18E+003.34E+015.12E-037.82E-029.30E-019.88E+00 - 59L2 155.008.58E-043.84E-027.93E-011.05E+012.97E-033.89E-024.00E-013.69E+00 - 59L2 220.002.70E-047.99E-031.20E-011.20E+001.06E-031.04E-028.21E-025.80E-01 - 59L2 305.009.42E-051.94E-032.21E-021.71E-014.06E-043.14E-031.94E-021.08E-01 - 59L2 400.004.02E-056.25E-045.72E-033.63E-021.85E-041.19E-036.09E-032.81E-02 - 59L2 510.001.93E-052.35E-041.78E-039.60E-039.19E-055.05E-042.22E-038.76E-03 - 59L2 740.006.58E-065.69E-053.30E-041.40E-033.18E-051.42E-045.02E-041.60E-03 - 59L21000.002.85E-061.94E-059.28E-053.33E-041.36E-055.28E-051.60E-044.38E-04 - 59L21500.001.00E-065.07E-061.92E-055.64E-054.42E-061.47E-053.75E-058.63E-05 - 59L3 6.962.77E+012.08E+058.30E+074.06E+097.58E+001.72E+054.18E+081.04E+11 - 59L3 7.662.10E+011.28E+054.67E+072.74E+095.64E+001.07E+052.18E+085.00E+10 - 59L3 8.961.33E+015.78E+041.82E+071.25E+093.48E+004.89E+047.55E+071.50E+10 - 59L3 12.165.30E+001.23E+042.89E+062.10E+081.36E+001.07E+049.70E+061.46E+09 - 59L3 15.962.28E+003.11E+035.59E+053.79E+075.90E-012.75E+031.59E+061.86E+08 - 59L3 20.001.11E+009.97E+021.43E+058.72E+062.95E-018.95E+023.60E+053.41E+07 - 59L3 26.004.75E-012.65E+022.93E+041.52E+061.32E-012.43E+026.50E+044.84E+06 - 59L3 34.001.96E-016.88E+015.79E+032.50E+055.82E-026.40E+011.16E+046.72E+05 - 59L3 46.007.06E-021.51E+019.34E+023.20E+042.31E-021.43E+011.70E+037.49E+04 - 59L3 59.003.02E-024.34E+002.08E+025.83E+031.08E-024.19E+003.59E+021.26E+04 - 59L3 76.001.26E-021.23E+004.54E+011.03E+035.04E-031.21E+007.56E+012.12E+03 - 59L3 89.007.29E-035.60E-011.76E+013.49E+023.12E-035.57E-012.90E+017.09E+02 - 59L3 106.003.98E-032.36E-016.19E+001.06E+021.84E-032.37E-011.01E+012.13E+02 - 59L3 129.002.02E-038.96E-021.92E+002.77E+011.02E-039.17E-023.17E+005.64E+01 - 59L3 155.001.07E-033.65E-026.49E-017.96E+005.90E-043.79E-021.08E+001.66E+01 - 59L3 220.003.27E-046.76E-038.36E-027.57E-012.09E-047.18E-031.46E-011.69E+00 - 59L3 305.001.12E-041.46E-031.29E-028.84E-028.09E-051.57E-032.36E-022.16E-01 - 59L3 400.004.71E-054.27E-042.86E-031.57E-023.74E-054.60E-045.44E-034.12E-02 - 59L3 510.002.25E-051.49E-047.82E-043.53E-031.91E-051.58E-041.51E-039.78E-03 - 59L3 740.007.88E-063.28E-051.21E-044.14E-047.13E-063.34E-052.26E-041.17E-03 - 59L31000.003.60E-061.08E-053.05E-058.51E-053.38E-061.05E-055.22E-052.28E-04 - 59L31500.001.40E-062.88E-065.96E-061.28E-051.35E-062.68E-068.28E-062.82E-05 - 59M1 2.518.66E+003.02E+041.54E+067.00E+081.63E+038.12E+066.91E+091.36E+12 - 59M1 3.515.70E+007.54E+036.74E+054.68E+075.97E+021.57E+067.92E+081.33E+11 - 59M1 5.512.80E+001.00E+031.62E+056.73E+061.55E+021.74E+054.58E+075.71E+09 - 59M1 9.511.02E+006.23E+011.49E+041.00E+063.03E+011.26E+041.62E+061.32E+08 - 59M1 16.513.29E-012.17E+008.10E+025.90E+045.83E+009.45E+026.25E+043.18E+06 - 59M1 26.001.20E-012.77E-015.20E+013.78E+031.51E+001.19E+024.74E+031.62E+05 - 59M1 41.004.13E-021.58E-012.83E+001.86E+023.93E-011.59E+013.94E+028.91E+03 - 59M1 53.002.20E-021.02E-017.27E-013.22E+011.85E-015.27E+001.01E+021.82E+03 - 59M1 71.001.06E-025.34E-022.58E-014.84E+007.88E-021.55E+002.24E+013.11E+02 - 59M1 104.003.95E-031.99E-028.70E-026.58E-012.63E-023.32E-013.37E+003.33E+01 - 59M1 150.001.52E-036.98E-032.87E-021.46E-019.33E-038.09E-025.93E-014.30E+00 - 59M1 280.003.04E-041.11E-033.76E-031.35E-021.70E-038.58E-033.81E-021.68E-01 - 59M1 500.007.62E-052.24E-046.13E-041.69E-033.77E-041.31E-033.94E-031.16E-02 - 59M2 2.342.04E+016.68E+061.75E+105.69E+122.02E+022.88E+056.93E+076.06E+09 - 59M2 3.341.11E+011.12E+061.73E+094.74E+116.90E+015.78E+041.17E+071.26E+09 - 59M2 5.344.14E+001.07E+058.66E+071.78E+101.67E+017.31E+031.11E+061.14E+08 - 59M2 9.341.06E+006.56E+032.64E+063.64E+083.08E+006.70E+026.87E+045.44E+06 - 59M2 16.342.31E-014.08E+028.61E+047.71E+065.69E-016.55E+014.37E+032.42E+05 - 59M2 26.005.89E-024.15E+015.27E+033.23E+051.40E-019.87E+004.54E+021.78E+04 - 59M2 41.001.44E-024.52E+003.56E+021.49E+043.55E-021.59E+005.01E+011.38E+03 - 59M2 53.006.35E-031.31E+007.93E+012.66E+031.64E-025.74E-011.46E+013.27E+02 - 59M2 71.002.46E-033.26E-011.46E+013.82E+026.85E-031.82E-013.62E+006.39E+01 - 59M2 104.007.01E-045.42E-021.67E+003.14E+012.19E-034.11E-025.96E-017.71E+00 - 59M2 150.002.09E-041.00E-022.18E-013.01E+007.40E-041.01E-021.09E-011.05E+00 - 59M2 280.002.76E-056.34E-047.85E-036.57E-021.18E-049.83E-046.53E-033.90E-02 - 59M2 500.004.61E-065.79E-054.49E-042.46E-032.21E-051.24E-045.53E-042.23E-03 - 59M3 2.244.70E+011.35E+073.72E+101.23E+135.02E+011.16E+072.70E+116.32E+14 - 59M3 3.242.33E+012.11E+063.34E+099.10E+111.64E+011.84E+062.10E+102.74E+13 - 59M3 5.247.99E+001.87E+051.52E+083.06E+103.79E+001.67E+057.69E+084.91E+11 - 59M3 9.241.88E+001.08E+044.24E+065.68E+086.74E-019.85E+031.61E+074.79E+09 - 59M3 16.243.82E-016.28E+021.28E+051.11E+071.21E-015.92E+023.66E+055.48E+07 - 59M3 26.009.10E-025.90E+017.09E+034.18E+052.89E-025.69E+011.65E+041.46E+06 - 59M3 41.002.12E-026.02E+004.42E+021.77E+047.26E-035.94E+008.80E+024.82E+04 - 59M3 53.009.07E-031.67E+009.33E+012.98E+033.34E-031.67E+001.74E+027.36E+03 - 59M3 71.003.40E-033.90E-011.60E+013.95E+021.38E-033.95E-012.82E+019.01E+02 - 59M3 104.009.29E-045.90E-021.61E+002.85E+014.39E-046.10E-022.77E+006.20E+01 - 59M3 150.002.67E-049.81E-031.83E-012.34E+001.47E-041.04E-023.16E-015.14E+00 - 59M3 280.003.33E-054.99E-044.86E-033.61E-022.36E-055.44E-049.03E-038.93E-02 - 59M3 500.005.51E-063.73E-052.01E-049.30E-044.63E-064.01E-053.96E-042.63E-03 - 59M4 1.951.11E+024.08E+053.09E+105.02E+141.43E+013.40E+054.16E+094.60E+12 - 59M4 2.952.96E+014.90E+041.68E+091.36E+133.71E+004.26E+042.56E+082.05E+11 - 59M4 4.955.04E+003.49E+034.39E+071.55E+116.66E-013.15E+038.22E+064.25E+09 - 59M4 8.955.75E-011.69E+026.71E+059.94E+088.90E-021.58E+021.71E+055.22E+07 - 59M4 15.956.05E-028.58E+001.13E+047.70E+061.18E-028.51E+004.17E+037.47E+05 - 59M4 26.008.24E-036.70E-013.63E+021.33E+052.05E-037.17E-011.88E+022.14E+04 - 59M4 41.001.21E-036.09E-021.49E+013.14E+033.88E-047.15E-021.08E+018.02E+02 - 59M4 53.004.02E-041.57E-022.49E+003.89E+021.49E-041.95E-022.20E+001.28E+02 - 59M4 71.001.13E-043.33E-033.28E-013.67E+014.99E-054.46E-033.63E-011.61E+01 - 59M4 104.002.16E-054.44E-042.41E-021.75E+001.17E-056.54E-043.53E-021.10E+00 - 59M4 150.004.44E-066.56E-052.05E-039.96E-022.89E-061.05E-043.87E-038.73E-02 - 59M4 280.003.15E-072.76E-063.62E-058.80E-042.64E-074.77E-069.67E-051.29E-03 - 59M4 500.002.98E-081.71E-071.11E-061.40E-052.90E-082.89E-073.51E-063.04E-05 - 59M5 1.931.65E+025.28E+055.14E+107.76E+148.74E+003.57E+042.06E+101.40E+15 - 59M5 2.934.31E+016.19E+042.73E+092.02E+132.25E+004.45E+031.11E+093.36E+13 - 59M5 4.937.18E+004.31E+036.96E+072.23E+114.06E-013.33E+022.92E+073.28E+11 - 59M5 8.938.00E-012.04E+021.04E+061.38E+095.54E-021.73E+014.59E+051.73E+09 - 59M5 15.938.24E-021.01E+011.72E+041.03E+077.59E-039.80E-018.07E+031.11E+07 - 59M5 26.001.10E-027.67E-015.32E+021.70E+051.36E-038.75E-022.65E+021.66E+05 - 59M5 41.001.59E-036.75E-022.11E+013.84E+032.65E-049.39E-031.12E+013.53E+03 - 59M5 53.005.23E-041.70E-023.44E+004.59E+021.04E-042.69E-031.88E+004.15E+02 - 59M5 71.001.46E-043.50E-034.37E-014.13E+013.58E-056.53E-042.50E-013.74E+01 - 59M5 104.002.77E-054.46E-043.00E-021.81E+008.78E-061.05E-041.81E-021.70E+00 - 59M5 150.005.72E-066.29E-052.36E-039.31E-022.28E-061.86E-051.50E-039.22E-02 - 59M5 280.004.25E-072.47E-063.45E-056.46E-042.38E-071.08E-062.38E-057.39E-04 - 59M5 500.004.47E-081.53E-078.79E-077.75E-063.25E-089.25E-086.48E-071.00E-05 - 59N+ 50.001.14E-021.06E+006.93E+012.80E+036.66E-022.84E+001.28E+025.11E+03 - 59N+ 70.004.45E-032.15E-019.28E+002.65E+022.49E-026.56E-011.81E+014.75E+02 - 59N+ 100.001.64E-034.16E-021.15E+002.30E+018.87E-031.47E-012.50E+004.28E+01 - 59N+ 150.005.31E-047.07E-031.16E-011.55E+002.80E-032.88E-023.00E-013.24E+00 - 59N+ 200.002.41E-042.17E-032.45E-022.45E-011.26E-039.61E-037.30E-025.78E-01 - 59N+ 500.002.35E-058.63E-053.42E-041.39E-031.11E-044.08E-041.38E-034.72E-03 - 60K 44.571.89E+004.64E+002.20E+003.86E-011.28E+012.21E+026.56E+024.36E+02 - 60K 45.271.81E+004.79E+003.18E+001.08E+001.22E+012.09E+026.64E+026.17E+02 - 60K 46.571.68E+004.96E+004.97E+003.25E+001.12E+011.87E+026.63E+029.26E+02 - 60K 49.771.42E+005.10E+008.70E+001.20E+019.26E+001.46E+026.25E+021.48E+03 - 60K 53.571.17E+004.88E+001.16E+012.40E+017.46E+001.11E+025.45E+021.77E+03 - 60K 58.009.51E-014.43E+001.31E+013.51E+015.91E+008.24E+014.46E+021.79E+03 - 60K 64.007.34E-013.73E+001.31E+014.28E+014.44E+005.70E+013.33E+021.57E+03 - 60K 72.005.36E-012.89E+001.15E+014.31E+013.15E+003.68E+012.25E+021.18E+03 - 60K 84.003.54E-011.97E+008.47E+003.49E+012.02E+002.08E+011.29E+027.19E+02 - 60K 97.002.40E-011.33E+005.87E+002.50E+011.33E+001.23E+017.43E+014.19E+02 - 60K 114.001.55E-018.32E-013.65E+001.56E+018.41E-016.81E+003.94E+012.17E+02 - 60K 127.001.15E-016.01E-012.60E+001.09E+016.20E-014.62E+002.56E+011.37E+02 - 60K 144.008.17E-024.08E-011.71E+007.01E+004.35E-012.95E+001.55E+017.89E+01 - 60K 167.005.46E-022.57E-011.03E+004.04E+002.88E-011.75E+008.57E+004.09E+01 - 60K 195.003.60E-021.58E-016.01E-012.23E+001.88E-011.03E+004.62E+002.04E+01 - 60K 260.001.68E-026.44E-022.19E-017.29E-018.64E-023.90E-011.50E+005.67E+00 - 60K 345.008.19E-032.75E-028.33E-022.47E-014.10E-021.57E-015.15E-011.66E+00 - 60K 430.004.80E-031.47E-024.08E-021.10E-012.32E-027.91E-022.31E-016.62E-01 - 60K 540.002.84E-037.99E-032.04E-025.04E-021.31E-024.01E-021.05E-012.66E-01 - 60K 770.001.34E-033.38E-037.64E-031.65E-025.49E-031.46E-023.27E-027.05E-02 - 60K 1050.007.35E-041.72E-033.55E-036.90E-032.63E-036.39E-031.28E-022.43E-02 - 60K 1300.005.01E-041.12E-032.18E-033.98E-031.61E-033.70E-036.95E-031.23E-02 - 60K 1550.003.70E-047.97E-041.49E-032.59E-031.08E-032.40E-034.30E-037.22E-03 - 60L1 8.135.95E+001.47E+039.95E+041.11E+062.57E+021.27E+051.10E+072.21E+08 - 60L1 8.835.18E+009.38E+028.24E+041.59E+062.01E+028.56E+046.94E+061.71E+08 - 60L1 10.134.07E+004.32E+025.12E+041.59E+061.33E+024.46E+043.25E+069.59E+07 - 60L1 13.332.44E+008.06E+011.46E+046.80E+055.86E+011.23E+047.15E+052.36E+07 - 60L1 17.131.47E+001.41E+013.77E+032.05E+052.77E+013.85E+031.81E+055.75E+06 - 60L1 21.009.59E-013.04E+001.13E+036.57E+041.51E+011.52E+035.97E+041.75E+06 - 60L1 27.005.52E-018.55E-012.27E+021.41E+047.17E+004.91E+021.55E+043.96E+05 - 60L1 35.003.04E-017.16E-013.86E+012.54E+033.32E+001.56E+023.90E+038.45E+04 - 60L1 47.001.50E-015.54E-015.55E+003.27E+021.39E+004.38E+018.42E+021.47E+04 - 60L1 60.008.23E-023.67E-011.80E+005.96E+016.82E-011.57E+012.42E+023.51E+03 - 60L1 77.004.38E-022.12E-018.83E-011.23E+013.30E-015.62E+006.97E+018.27E+02 - 60L1 90.002.93E-021.44E-015.95E-015.40E+002.10E-013.00E+003.25E+013.40E+02 - 60L1 107.001.87E-029.10E-023.76E-012.48E+001.28E-011.51E+001.41E+011.29E+02 - 60L1 130.001.13E-025.28E-022.15E-011.15E+007.37E-027.13E-015.64E+004.39E+01 - 60L1 155.007.12E-033.18E-021.26E-015.96E-014.50E-023.67E-012.51E+001.70E+01 - 60L1 220.002.87E-031.13E-024.11E-021.62E-011.71E-021.03E-015.33E-012.74E+00 - 60L1 305.001.26E-034.38E-031.42E-024.85E-027.14E-033.33E-021.36E-015.49E-01 - 60L1 400.006.53E-042.05E-036.06E-031.83E-023.51E-031.37E-024.66E-021.56E-01 - 60L1 510.003.74E-041.08E-032.93E-037.94E-031.89E-036.42E-031.88E-025.41E-02 - 60L1 740.001.70E-044.42E-041.05E-032.43E-037.52E-042.15E-035.18E-031.21E-02 - 60L11000.009.46E-052.29E-044.94E-041.02E-033.66E-049.36E-041.99E-034.04E-03 - 60L11500.004.60E-051.02E-041.97E-043.56E-041.43E-043.29E-046.11E-041.07E-03 - 60L2 7.721.23E+018.74E+042.99E+071.26E+092.85E+015.28E+031.65E+051.68E+06 - 60L2 8.429.66E+005.66E+041.80E+079.18E+082.19E+013.77E+031.42E+052.45E+06 - 60L2 9.726.44E+002.76E+047.74E+064.70E+081.41E+012.15E+039.67E+042.55E+06 - 60L2 12.922.82E+006.66E+031.45E+069.71E+075.92E+007.03E+023.49E+041.25E+06 - 60L2 16.721.30E+001.85E+033.18E+052.03E+072.70E+002.54E+021.21E+044.50E+05 - 60L2 21.006.47E-015.98E+028.31E+044.83E+061.35E+001.04E+024.49E+031.59E+05 - 60L2 27.002.94E-011.74E+021.90E+049.58E+056.29E-013.84E+011.45E+034.62E+04 - 60L2 35.001.28E-014.87E+014.16E+031.77E+052.87E-011.38E+014.42E+021.21E+04 - 60L2 47.004.92E-021.16E+017.47E+022.56E+041.18E-014.34E+001.13E+022.54E+03 - 60L2 60.002.20E-023.60E+001.82E+025.17E+035.64E-021.67E+003.60E+016.83E+02 - 60L2 77.009.61E-031.10E+004.37E+011.02E+032.67E-026.32E-011.12E+011.77E+02 - 60L2 90.005.70E-035.25E-011.80E+013.69E+021.67E-023.46E-015.43E+007.58E+01 - 60L2 107.003.20E-032.34E-016.81E+001.21E+029.99E-031.77E-012.43E+002.97E+01 - 60L2 130.001.67E-039.49E-022.30E+003.49E+015.60E-038.43E-029.89E-011.04E+01 - 60L2 155.009.30E-044.25E-028.76E-011.15E+013.32E-034.32E-024.42E-014.05E+00 - 60L2 220.002.94E-048.85E-031.34E-011.33E+001.18E-031.16E-029.10E-026.40E-01 - 60L2 305.001.03E-042.15E-032.46E-021.90E-014.56E-043.51E-032.16E-021.20E-01 - 60L2 400.004.41E-056.95E-046.36E-034.04E-022.08E-041.33E-036.78E-033.13E-02 - 60L2 510.002.11E-052.62E-041.99E-031.07E-021.03E-045.67E-042.48E-039.75E-03 - 60L2 740.007.17E-066.34E-053.70E-041.57E-033.59E-051.60E-045.63E-041.79E-03 - 60L21000.003.17E-062.17E-051.04E-043.72E-041.54E-055.94E-051.80E-044.90E-04 - 60L21500.001.09E-065.67E-062.16E-056.33E-054.99E-061.66E-054.23E-059.71E-05 - 60L3 7.212.59E+011.90E+057.30E+073.42E+097.36E+001.64E+053.83E+089.23E+10 - 60L3 7.911.99E+011.19E+054.19E+072.34E+095.54E+001.03E+052.04E+084.52E+10 - 60L3 9.211.27E+015.49E+041.67E+071.10E+093.47E+004.83E+047.29E+071.41E+10 - 60L3 12.415.19E+001.21E+042.78E+061.95E+081.38E+001.09E+049.81E+061.44E+09 - 60L3 16.212.27E+003.14E+035.53E+053.63E+076.09E-012.88E+031.66E+061.90E+08 - 60L3 21.009.97E-018.49E+021.16E+056.73E+062.75E-017.93E+023.01E+052.72E+07 - 60L3 27.004.41E-012.39E+022.53E+041.27E+061.27E-012.27E+025.85E+044.19E+06 - 60L3 35.001.87E-016.47E+015.28E+032.20E+055.76E-026.27E+011.10E+046.21E+05 - 60L3 47.006.94E-021.47E+018.91E+022.97E+042.34E-021.45E+011.70E+037.31E+04 - 60L3 60.003.02E-024.34E+002.05E+025.60E+031.11E-024.35E+003.69E+021.28E+04 - 60L3 77.001.28E-021.25E+004.57E+011.02E+035.24E-031.28E+007.94E+012.20E+03 - 60L3 90.007.47E-035.77E-011.79E+013.50E+023.27E-035.95E-013.08E+017.44E+02 - 60L3 107.004.11E-032.45E-016.38E+001.07E+021.94E-032.56E-011.09E+012.27E+02 - 60L3 130.002.10E-039.41E-022.00E+002.84E+011.08E-039.94E-023.43E+006.05E+01 - 60L3 155.001.15E-033.98E-027.07E-018.63E+006.39E-044.26E-021.22E+001.87E+01 - 60L3 220.003.50E-047.37E-039.11E-028.22E-012.27E-048.06E-031.64E-011.91E+00 - 60L3 305.001.19E-041.59E-031.41E-029.62E-028.76E-051.76E-032.66E-022.43E-01 - 60L3 400.005.07E-054.66E-043.13E-031.71E-024.05E-055.13E-046.12E-034.63E-02 - 60L3 510.002.44E-051.62E-048.53E-043.85E-032.07E-051.76E-041.69E-031.10E-02 - 60L3 740.008.51E-063.57E-051.32E-044.52E-047.70E-063.69E-052.53E-041.32E-03 - 60L31000.003.86E-061.17E-053.33E-059.29E-053.65E-061.15E-055.82E-052.55E-04 - 60L31500.001.51E-063.12E-066.49E-061.40E-051.45E-062.93E-069.18E-063.15E-05 - 60M1 2.578.29E+002.96E+041.56E+066.33E+081.68E+038.18E+066.84E+091.32E+12 - 60M1 3.575.52E+007.62E+036.63E+054.77E+076.28E+021.63E+068.19E+081.35E+11 - 60M1 5.572.75E+001.05E+031.62E+056.53E+061.66E+021.87E+054.92E+076.03E+09 - 60M1 9.571.02E+006.95E+011.56E+041.01E+063.29E+011.39E+041.78E+061.43E+08 - 60M1 16.573.32E-012.65E+008.89E+026.23E+046.40E+001.05E+036.94E+043.51E+06 - 60M1 26.001.23E-012.87E-016.11E+014.22E+031.68E+001.34E+025.36E+031.82E+05 - 60M1 41.004.24E-021.51E-013.42E+002.16E+024.37E-011.78E+014.42E+029.98E+03 - 60M1 53.002.27E-029.85E-028.31E-013.80E+012.05E-015.90E+001.13E+022.03E+03 - 60M1 71.001.09E-025.27E-022.68E-015.69E+008.75E-021.73E+002.50E+013.46E+02 - 60M1 104.004.10E-032.00E-028.75E-027.24E-012.91E-023.70E-013.74E+003.70E+01 - 60M1 150.001.58E-037.12E-032.91E-021.54E-011.03E-028.98E-026.58E-014.76E+00 - 60M1 280.003.20E-041.15E-033.90E-031.42E-021.87E-039.49E-034.21E-021.85E-01 - 60M1 500.008.08E-052.36E-046.48E-041.80E-034.15E-041.44E-034.34E-031.28E-02 - 60M2 2.401.94E+016.41E+061.64E+105.17E+122.07E+022.87E+056.68E+075.50E+09 - 60M2 3.401.07E+011.12E+061.71E+094.56E+117.26E+015.97E+041.18E+071.21E+09 - 60M2 5.404.11E+001.11E+058.94E+071.80E+101.80E+017.78E+031.16E+061.15E+08 - 60M2 9.401.08E+007.00E+032.81E+063.81E+083.37E+007.26E+027.33E+045.68E+06 - 60M2 16.402.39E-014.43E+029.32E+048.25E+066.28E-017.18E+014.73E+032.58E+05 - 60M2 26.006.24E-024.60E+015.84E+033.56E+051.57E-011.10E+015.01E+021.95E+04 - 60M2 41.001.54E-025.01E+003.94E+021.64E+043.98E-021.77E+005.54E+011.52E+03 - 60M2 53.006.81E-031.46E+008.80E+012.94E+031.84E-026.40E-011.62E+013.60E+02 - 60M2 71.002.65E-033.62E-011.62E+014.22E+027.70E-032.03E-014.01E+007.04E+01 - 60M2 104.007.60E-046.02E-021.86E+003.48E+012.47E-034.60E-026.63E-018.53E+00 - 60M2 150.002.28E-041.12E-022.43E-013.35E+008.35E-041.13E-021.21E-011.16E+00 - 60M2 280.003.02E-057.09E-048.80E-037.34E-021.34E-041.11E-037.32E-034.36E-02 - 60M2 500.005.08E-066.49E-055.05E-042.77E-032.51E-051.40E-046.23E-042.50E-03 - 60M3 2.304.52E+011.31E+073.55E+101.14E+135.07E+011.18E+072.69E+116.19E+14 - 60M3 3.302.28E+012.13E+063.33E+098.88E+111.69E+011.94E+062.20E+102.85E+13 - 60M3 5.307.98E+001.95E+051.58E+083.11E+104.00E+001.81E+058.40E+085.37E+11 - 60M3 9.301.92E+001.15E+044.50E+065.95E+087.21E-011.09E+041.81E+075.40E+09 - 60M3 16.303.95E-016.78E+021.37E+051.18E+071.30E-016.65E+024.17E+056.26E+07 - 60M3 26.009.59E-026.48E+017.79E+034.55E+053.15E-026.50E+011.92E+041.70E+06 - 60M3 41.002.25E-026.62E+004.86E+021.93E+047.92E-036.77E+001.02E+035.59E+04 - 60M3 53.009.66E-031.84E+001.02E+023.26E+033.64E-031.90E+002.01E+028.50E+03 - 60M3 71.003.63E-034.29E-011.75E+014.31E+021.51E-034.50E-013.25E+011.04E+03 - 60M3 104.009.94E-046.49E-021.77E+003.12E+014.79E-046.95E-023.18E+007.12E+01 - 60M3 150.002.86E-041.08E-022.01E-012.56E+001.61E-041.18E-023.62E-015.88E+00 - 60M3 280.003.62E-055.50E-045.35E-033.96E-022.58E-056.16E-041.03E-021.02E-01 - 60M3 500.005.96E-064.10E-052.22E-041.02E-035.05E-064.50E-054.49E-042.98E-03 - 60M4 2.001.08E+023.97E+052.96E+104.75E+141.46E+013.46E+054.16E+094.48E+12 - 60M4 3.002.98E+014.98E+041.71E+091.38E+133.89E+004.52E+042.71E+082.13E+11 - 60M4 5.005.22E+003.67E+034.68E+071.67E+117.15E-013.46E+039.06E+064.62E+09 - 60M4 9.006.11E-011.82E+027.39E+051.11E+099.73E-021.78E+021.94E+055.85E+07 - 60M4 16.006.55E-029.40E+001.27E+048.72E+061.31E-029.70E+004.78E+038.51E+05 - 60M4 26.009.11E-037.50E-014.16E+021.54E+052.31E-038.30E-012.20E+022.48E+04 - 60M4 41.001.34E-036.85E-021.71E+013.65E+034.37E-048.29E-021.26E+019.33E+02 - 60M4 53.004.49E-041.77E-022.85E+004.51E+021.69E-042.26E-022.57E+001.49E+02 - 60M4 71.001.27E-043.77E-033.77E-014.26E+015.65E-055.18E-034.23E-011.87E+01 - 60M4 104.002.42E-055.05E-042.77E-022.03E+001.33E-057.60E-044.11E-021.28E+00 - 60M4 150.004.94E-067.48E-052.36E-031.16E-013.29E-061.22E-044.52E-031.02E-01 - 60M4 280.003.52E-073.18E-064.16E-051.02E-033.01E-075.55E-061.13E-041.51E-03 - 60M4 500.003.37E-081.97E-071.28E-061.63E-053.32E-083.36E-074.11E-063.57E-05 - 60M5 1.981.61E+025.12E+054.97E+107.38E+148.89E+003.59E+042.07E+101.38E+15 - 60M5 2.984.34E+016.26E+042.79E+092.06E+132.35E+004.66E+031.18E+093.57E+13 - 60M5 4.987.44E+004.50E+037.45E+072.40E+114.34E-013.59E+023.25E+073.69E+11 - 60M5 8.988.49E-012.18E+021.15E+061.53E+096.02E-021.91E+015.26E+052.02E+09 - 60M5 15.988.90E-021.10E+011.93E+041.17E+078.35E-031.09E+009.39E+031.32E+07 - 60M5 26.001.21E-028.50E-016.12E+021.96E+051.51E-039.90E-023.15E+022.01E+05 - 60M5 41.001.76E-037.52E-022.43E+014.44E+032.97E-041.06E-021.33E+014.25E+03 - 60M5 53.005.82E-041.89E-023.95E+005.30E+021.17E-043.04E-032.23E+005.00E+02 - 60M5 71.001.63E-043.92E-035.03E-014.77E+014.02E-057.39E-042.96E-014.49E+01 - 60M5 104.003.09E-055.01E-043.46E-022.10E+009.89E-061.19E-042.14E-022.03E+00 - 60M5 150.006.31E-067.08E-052.71E-031.08E-012.57E-062.11E-051.77E-031.10E-01 - 60M5 280.004.68E-072.80E-063.96E-057.47E-042.69E-071.23E-062.80E-058.76E-04 - 60M5 500.005.07E-081.79E-071.01E-068.98E-063.68E-081.05E-077.53E-071.18E-05 - 60N+ 50.001.28E-021.22E+007.66E+012.99E+037.70E-023.17E+001.37E+025.17E+03 - 60N+ 70.004.92E-032.42E-011.02E+012.83E+022.84E-027.26E-011.93E+014.84E+02 - 60N+ 100.001.83E-034.74E-021.30E+002.54E+011.03E-021.66E-012.74E+004.53E+01 - 60N+ 150.005.87E-047.96E-031.30E-011.72E+003.23E-033.25E-023.30E-013.47E+00 - 60N+ 200.002.63E-042.40E-032.71E-022.69E-011.43E-031.07E-027.98E-026.19E-01 - 60N+ 500.002.51E-059.28E-053.71E-041.52E-031.23E-044.54E-041.53E-035.25E-03 - 61K 46.181.75E+004.13E+001.86E+003.04E-011.26E+012.09E+025.94E+023.77E+02 - 61K 46.881.69E+004.26E+002.68E+008.44E-011.21E+011.97E+026.02E+025.30E+02 - 61K 48.181.57E+004.41E+004.17E+002.53E+001.11E+011.77E+026.01E+027.94E+02 - 61K 51.381.33E+004.55E+007.30E+009.39E+009.21E+001.40E+025.70E+021.27E+03 - 61K 55.181.11E+004.38E+009.79E+001.90E+017.47E+001.07E+025.01E+021.54E+03 - 61K 59.009.30E-014.06E+001.11E+012.72E+016.15E+008.34E+014.27E+021.59E+03 - 61K 65.007.21E-013.46E+001.14E+013.47E+014.64E+005.82E+013.23E+021.43E+03 - 61K 73.005.30E-012.72E+001.02E+013.63E+013.31E+003.78E+012.21E+021.10E+03 - 61K 85.003.53E-011.88E+007.73E+003.05E+012.13E+002.15E+011.29E+026.89E+02 - 61K 98.002.40E-011.28E+005.45E+002.24E+011.41E+001.28E+017.51E+014.09E+02 - 61K 115.001.56E-018.11E-013.45E+001.43E+018.96E-017.14E+004.03E+012.15E+02 - 61K 128.001.16E-015.89E-012.48E+001.01E+016.62E-014.86E+002.64E+011.37E+02 - 61K 145.008.29E-024.03E-011.65E+006.60E+004.66E-013.12E+001.60E+017.99E+01 - 61K 168.005.56E-022.56E-011.01E+003.86E+003.09E-011.86E+008.92E+004.18E+01 - 61K 195.003.72E-021.61E-016.02E-012.20E+002.05E-011.11E+004.94E+002.15E+01 - 61K 260.001.75E-026.60E-022.22E-017.32E-019.40E-024.22E-011.61E+006.02E+00 - 61K 345.008.53E-032.84E-028.53E-022.52E-014.45E-021.69E-015.52E-011.77E+00 - 61K 440.004.75E-031.43E-023.91E-021.05E-012.38E-027.97E-022.29E-016.44E-01 - 61K 550.002.86E-037.94E-032.00E-024.91E-021.35E-024.10E-021.06E-012.65E-01 - 61K 780.001.37E-033.44E-037.74E-031.66E-025.75E-031.53E-023.38E-027.21E-02 - 61K 1050.007.72E-041.81E-033.74E-037.27E-032.84E-036.89E-031.37E-022.61E-02 - 61K 1300.005.25E-041.18E-032.30E-034.20E-031.73E-033.99E-037.47E-031.32E-02 - 61K 1550.003.89E-048.40E-041.57E-032.74E-031.16E-032.58E-034.62E-037.75E-03 - 61L1 8.435.54E+001.35E+038.65E+048.91E+052.54E+021.20E+059.94E+061.91E+08 - 61L1 9.134.85E+008.76E+027.25E+041.30E+062.00E+028.20E+046.40E+061.50E+08 - 61L1 10.433.84E+004.16E+024.62E+041.34E+061.34E+024.36E+043.06E+068.62E+07 - 61L1 13.632.33E+008.26E+011.39E+046.10E+056.04E+011.24E+047.02E+052.22E+07 - 61L1 17.431.43E+001.55E+013.74E+031.93E+052.90E+013.98E+031.82E+055.61E+06 - 61L1 21.009.68E-013.93E+001.26E+036.96E+041.67E+011.70E+036.62E+041.90E+06 - 61L1 27.005.59E-019.16E-012.63E+021.54E+047.90E+005.48E+021.71E+044.32E+05 - 61L1 35.003.09E-016.61E-014.63E+012.85E+033.66E+001.74E+024.32E+039.24E+04 - 61L1 47.001.54E-015.21E-016.63E+003.79E+021.54E+004.87E+019.30E+021.61E+04 - 61L1 60.008.44E-023.53E-011.95E+007.01E+017.51E-011.74E+012.67E+023.84E+03 - 61L1 77.004.51E-022.08E-018.88E-011.42E+013.64E-016.22E+007.68E+019.06E+02 - 61L1 90.003.02E-021.42E-015.90E-016.04E+002.32E-013.31E+003.57E+013.72E+02 - 61L1 107.001.94E-029.08E-023.73E-012.68E+001.41E-011.67E+001.55E+011.41E+02 - 61L1 130.001.17E-025.31E-022.15E-011.20E+008.12E-027.86E-016.20E+004.80E+01 - 61L1 155.007.39E-033.22E-021.27E-016.16E-014.95E-024.04E-012.76E+001.86E+01 - 61L1 220.002.99E-031.16E-024.19E-021.68E-011.88E-021.13E-015.84E-012.99E+00 - 61L1 305.001.31E-034.53E-031.47E-025.05E-027.82E-033.65E-021.49E-015.99E-01 - 61L1 400.006.86E-042.14E-036.32E-031.92E-023.85E-031.50E-025.09E-021.70E-01 - 61L1 510.003.94E-041.13E-033.07E-038.36E-032.07E-037.01E-032.05E-025.89E-02 - 61L1 740.001.79E-044.66E-041.11E-032.58E-038.20E-042.34E-035.65E-031.32E-02 - 61L11000.009.99E-052.42E-045.25E-041.08E-033.98E-041.02E-032.16E-034.39E-03 - 61L11500.004.87E-051.08E-042.10E-043.80E-041.55E-043.57E-046.64E-041.16E-03 - 61L2 8.011.15E+017.96E+042.61E+071.04E+092.82E+014.98E+031.48E+051.39E+06 - 61L2 8.719.10E+005.23E+041.60E+077.75E+082.18E+013.60E+031.29E+052.06E+06 - 61L2 10.016.14E+002.61E+047.07E+064.08E+081.43E+012.09E+038.93E+042.21E+06 - 61L2 13.212.76E+006.54E+031.39E+068.89E+076.14E+007.04E+023.35E+041.14E+06 - 61L2 17.011.29E+001.86E+033.13E+051.93E+072.84E+002.60E+021.20E+044.27E+05 - 61L2 21.006.81E-016.56E+029.07E+045.16E+061.50E+001.14E+024.82E+031.66E+05 - 61L2 27.003.11E-011.90E+022.08E+041.03E+066.99E-014.22E+011.57E+034.88E+04 - 61L2 35.001.36E-015.35E+014.55E+031.91E+053.19E-011.52E+014.79E+021.29E+04 - 61L2 47.005.24E-021.28E+018.19E+022.78E+041.31E-014.78E+001.23E+022.74E+03 - 61L2 60.002.35E-023.96E+002.00E+025.63E+036.29E-021.84E+003.93E+017.38E+02 - 61L2 77.001.03E-021.21E+004.80E+011.11E+032.98E-026.99E-011.23E+011.92E+02 - 61L2 90.006.13E-035.79E-011.98E+014.04E+021.87E-023.82E-015.96E+008.25E+01 - 61L2 107.003.44E-032.58E-017.50E+001.33E+021.12E-021.97E-012.67E+003.24E+01 - 61L2 130.001.80E-031.05E-012.54E+003.83E+016.26E-039.35E-021.09E+001.14E+01 - 61L2 155.001.01E-034.69E-029.68E-011.27E+013.72E-034.80E-024.88E-014.44E+00 - 61L2 220.003.19E-049.80E-031.48E-011.46E+001.33E-031.30E-021.01E-017.05E-01 - 61L2 305.001.12E-042.39E-032.73E-022.10E-015.12E-043.92E-032.40E-021.33E-01 - 61L2 400.004.84E-057.72E-047.08E-034.48E-022.34E-041.49E-037.56E-033.47E-02 - 61L2 510.002.33E-052.91E-042.22E-031.19E-021.17E-046.35E-042.76E-031.08E-02 - 61L2 740.007.89E-067.07E-054.13E-041.75E-034.05E-051.79E-046.30E-041.99E-03 - 61L21000.003.50E-062.42E-051.16E-044.17E-041.74E-056.69E-052.02E-045.49E-04 - 61L21500.001.21E-066.34E-062.42E-057.10E-055.64E-061.87E-054.76E-051.09E-04 - 61L3 7.462.43E+011.74E+056.42E+072.87E+097.15E+001.56E+053.51E+088.15E+10 - 61L3 8.161.88E+011.10E+053.75E+072.00E+095.43E+009.98E+041.91E+084.09E+10 - 61L3 9.461.22E+015.21E+041.54E+079.63E+083.44E+004.77E+047.02E+071.31E+10 - 61L3 12.665.08E+001.19E+042.66E+061.80E+081.41E+001.12E+049.89E+061.42E+09 - 61L3 16.462.26E+003.16E+035.46E+053.48E+076.27E-013.01E+031.72E+061.94E+08 - 61L3 21.001.04E+009.23E+021.25E+057.15E+062.97E-018.96E+023.45E+053.11E+07 - 61L3 27.004.63E-012.60E+022.74E+041.35E+061.37E-012.57E+026.70E+044.78E+06 - 61L3 35.001.97E-017.04E+015.72E+032.36E+056.22E-027.07E+011.26E+047.08E+05 - 61L3 47.007.33E-021.60E+019.67E+023.19E+042.53E-021.64E+011.94E+038.32E+04 - 61L3 60.003.20E-024.73E+002.22E+026.03E+031.20E-024.91E+004.20E+021.45E+04 - 61L3 77.001.36E-021.36E+004.96E+011.10E+035.66E-031.44E+009.03E+012.49E+03 - 61L3 90.007.94E-036.29E-011.95E+013.77E+023.53E-036.70E-013.49E+018.42E+02 - 61L3 107.004.37E-032.67E-016.93E+001.16E+022.10E-032.88E-011.23E+012.56E+02 - 61L3 130.002.24E-031.02E-012.18E+003.08E+011.17E-031.12E-013.88E+006.84E+01 - 61L3 155.001.22E-034.34E-027.69E-019.34E+006.91E-044.79E-021.38E+002.11E+01 - 61L3 220.003.76E-048.03E-039.92E-028.92E-012.45E-049.04E-031.85E-012.15E+00 - 61L3 305.001.28E-041.73E-031.53E-021.04E-019.47E-051.97E-033.00E-022.73E-01 - 61L3 400.005.45E-055.08E-043.41E-031.86E-024.38E-055.72E-046.88E-035.20E-02 - 61L3 510.002.61E-051.77E-049.31E-044.20E-032.23E-051.95E-041.90E-031.23E-02 - 61L3 740.009.11E-063.88E-051.44E-044.93E-048.31E-064.08E-052.83E-041.47E-03 - 61L31000.004.14E-061.27E-053.62E-051.01E-043.93E-061.27E-056.49E-052.86E-04 - 61L31500.001.61E-063.38E-067.05E-061.52E-051.56E-063.20E-061.02E-053.51E-05 - 61M1 2.657.85E+002.84E+041.53E+065.51E+081.71E+038.07E+066.57E+091.22E+12 - 61M1 3.655.29E+007.58E+036.42E+054.71E+076.54E+021.67E+068.28E+081.32E+11 - 61M1 5.652.68E+001.09E+031.60E+056.27E+061.77E+021.99E+055.20E+076.25E+09 - 61M1 9.651.01E+007.68E+011.62E+041.00E+063.57E+011.51E+041.94E+061.54E+08 - 61M1 16.653.34E-013.20E+009.69E+026.52E+047.01E+001.16E+037.67E+043.84E+06 - 61M1 26.001.26E-013.09E-017.12E+014.69E+031.86E+001.51E+026.04E+032.04E+05 - 61M1 41.004.36E-021.44E-014.13E+002.49E+024.84E-012.00E+014.96E+021.12E+04 - 61M1 53.002.34E-029.53E-029.63E-014.47E+012.28E-016.61E+001.27E+022.27E+03 - 61M1 71.001.13E-025.19E-022.84E-016.69E+009.70E-021.93E+002.79E+013.85E+02 - 61M1 104.004.26E-032.00E-028.86E-028.06E-013.23E-024.12E-014.16E+004.10E+01 - 61M1 150.001.65E-037.25E-032.95E-021.63E-011.14E-029.97E-027.29E-015.26E+00 - 61M1 280.003.36E-041.19E-034.05E-031.49E-022.07E-031.05E-024.64E-022.04E-01 - 61M1 500.008.55E-052.48E-046.84E-041.91E-034.57E-041.59E-034.76E-031.40E-02 - 61M2 2.471.84E+016.15E+061.53E+104.68E+122.12E+022.86E+056.43E+074.97E+09 - 61M2 3.471.04E+011.12E+061.69E+094.38E+117.63E+016.15E+041.18E+071.16E+09 - 61M2 5.474.08E+001.15E+059.21E+071.81E+101.93E+018.25E+031.20E+061.15E+08 - 61M2 9.471.09E+007.46E+032.98E+063.99E+083.68E+007.86E+027.80E+045.92E+06 - 61M2 16.472.48E-014.80E+021.01E+058.80E+066.94E-017.85E+015.11E+032.74E+05 - 61M2 26.006.59E-025.08E+016.46E+033.91E+051.75E-011.22E+015.52E+022.13E+04 - 61M2 41.001.64E-025.55E+004.37E+021.80E+044.46E-021.97E+006.12E+011.66E+03 - 61M2 53.007.29E-031.61E+009.75E+013.24E+032.07E-027.13E-011.79E+013.95E+02 - 61M2 71.002.85E-034.01E-011.80E+014.66E+028.65E-032.26E-014.44E+007.75E+01 - 61M2 104.008.21E-046.69E-022.06E+003.85E+012.78E-035.14E-027.36E-019.42E+00 - 61M2 150.002.48E-041.24E-022.71E-013.72E+009.41E-041.27E-021.35E-011.29E+00 - 61M2 280.003.33E-057.92E-049.84E-038.19E-021.51E-041.24E-038.20E-034.86E-02 - 61M2 500.005.61E-067.28E-055.67E-043.10E-032.85E-051.58E-047.01E-042.81E-03 - 61M3 2.364.33E+011.26E+073.34E+101.04E+135.09E+011.18E+072.63E+115.95E+14 - 61M3 3.362.23E+012.13E+063.30E+098.56E+111.74E+012.02E+062.28E+102.92E+13 - 61M3 5.367.95E+002.02E+051.62E+083.14E+104.20E+001.95E+059.10E+085.81E+11 - 61M3 9.361.95E+001.22E+044.76E+066.20E+087.69E-011.21E+042.02E+076.05E+09 - 61M3 16.364.08E-017.30E+021.48E+051.25E+071.40E-017.44E+024.74E+057.12E+07 - 61M3 26.001.01E-017.11E+018.54E+034.95E+053.43E-027.40E+012.23E+041.98E+06 - 61M3 41.002.38E-027.26E+005.32E+022.10E+048.61E-037.71E+001.18E+036.46E+04 - 61M3 53.001.03E-022.02E+001.12E+023.55E+033.96E-032.16E+002.31E+029.80E+03 - 61M3 71.003.88E-034.71E-011.92E+014.70E+021.64E-035.12E-013.73E+011.19E+03 - 61M3 104.001.07E-037.13E-021.95E+003.40E+015.22E-047.89E-023.64E+008.15E+01 - 61M3 150.003.09E-041.19E-022.21E-012.80E+001.75E-041.34E-024.13E-016.71E+00 - 61M3 280.003.90E-056.04E-045.88E-034.34E-022.82E-056.95E-041.17E-021.16E-01 - 61M3 500.006.46E-064.51E-052.44E-041.12E-035.50E-065.05E-055.08E-043.38E-03 - 61M4 2.051.05E+023.84E+052.82E+104.45E+141.48E+013.51E+054.12E+094.32E+12 - 61M4 3.052.98E+015.04E+041.73E+091.39E+134.06E+004.78E+042.84E+082.18E+11 - 61M4 5.055.39E+003.85E+034.96E+071.78E+117.65E-013.79E+039.92E+064.99E+09 - 61M4 9.056.47E-011.96E+028.10E+051.22E+091.06E-012.00E+022.18E+056.52E+07 - 61M4 16.057.07E-021.03E+011.42E+049.84E+061.45E-021.10E+015.45E+039.64E+05 - 61M4 26.001.00E-028.37E-014.75E+021.78E+052.59E-039.60E-012.56E+022.88E+04 - 61M4 41.001.49E-037.68E-021.95E+014.22E+034.92E-049.59E-021.47E+011.08E+03 - 61M4 53.005.00E-041.99E-023.27E+005.22E+021.90E-042.62E-022.99E+001.73E+02 - 61M4 71.001.42E-044.25E-034.32E-014.93E+016.39E-056.00E-034.92E-012.17E+01 - 61M4 104.002.72E-055.72E-043.17E-022.35E+001.51E-058.81E-044.79E-021.49E+00 - 61M4 150.005.60E-068.52E-052.71E-031.34E-013.74E-061.41E-045.26E-031.18E-01 - 61M4 280.004.02E-073.63E-064.79E-051.19E-033.43E-076.45E-061.32E-041.76E-03 - 61M4 500.003.64E-082.27E-071.47E-061.90E-053.78E-083.91E-074.81E-064.17E-05 - 61M5 2.031.57E+024.94E+054.77E+106.97E+149.01E+003.59E+042.06E+101.35E+15 - 61M5 3.034.36E+016.30E+042.84E+092.08E+132.45E+004.86E+031.25E+093.77E+13 - 61M5 5.037.68E+004.68E+037.95E+072.56E+114.63E-013.87E+023.59E+074.12E+11 - 61M5 9.038.99E-012.33E+021.27E+061.70E+096.54E-022.10E+016.00E+052.34E+09 - 61M5 16.039.59E-021.19E+012.17E+041.31E+079.16E-031.22E+001.09E+041.56E+07 - 61M5 26.001.33E-029.40E-017.01E+022.27E+051.68E-031.12E-013.73E+022.42E+05 - 61M5 41.001.95E-038.35E-022.78E+015.12E+033.31E-041.20E-021.57E+015.11E+03 - 61M5 53.006.46E-042.11E-024.53E+006.12E+021.31E-043.44E-032.64E+005.99E+02 - 61M5 71.001.82E-044.38E-035.77E-015.50E+014.51E-058.35E-043.50E-015.37E+01 - 61M5 104.003.46E-055.62E-043.97E-022.42E+001.11E-051.34E-042.53E-022.42E+00 - 61M5 150.007.13E-067.97E-053.11E-031.24E-012.90E-062.39E-052.09E-031.31E-01 - 61M5 280.005.34E-073.18E-064.54E-058.62E-043.04E-071.39E-063.27E-051.04E-03 - 61M5 500.005.38E-081.99E-071.15E-061.03E-054.16E-081.19E-078.73E-071.39E-05 - 61N+ 50.001.34E-021.34E+008.48E+013.31E+038.57E-023.57E+001.57E+025.96E+03 - 61N+ 70.005.16E-032.65E-011.13E+013.13E+023.16E-028.15E-012.19E+015.54E+02 - 61N+ 100.001.93E-035.19E-021.43E+002.81E+011.14E-021.85E-013.10E+005.15E+01 - 61N+ 150.006.19E-048.65E-031.44E-011.90E+003.59E-033.63E-023.71E-013.92E+00 - 61N+ 200.002.78E-042.59E-032.99E-022.98E-011.59E-031.20E-028.93E-026.95E-01 - 61N+ 500.002.65E-059.94E-054.07E-041.68E-031.34E-044.98E-041.69E-035.81E-03 - 62K 47.831.63E+003.68E+001.58E+002.39E-011.24E+011.97E+025.39E+023.27E+02 - 62K 48.531.58E+003.80E+002.26E+006.61E-011.19E+011.87E+025.46E+024.57E+02 - 62K 49.831.46E+003.93E+003.50E+001.97E+001.09E+011.68E+025.46E+026.82E+02 - 62K 53.031.25E+004.06E+006.13E+007.38E+009.17E+001.34E+025.21E+021.09E+03 - 62K 56.831.05E+003.94E+008.29E+001.51E+017.49E+001.03E+024.62E+021.34E+03 - 62K 61.008.71E-013.64E+009.50E+002.24E+016.09E+007.94E+013.91E+021.40E+03 - 62K 67.006.81E-013.13E+009.82E+002.87E+014.63E+005.61E+012.99E+021.27E+03 - 62K 75.005.06E-012.49E+008.92E+003.04E+013.34E+003.69E+012.08E+029.95E+02 - 62K 87.003.40E-011.74E+006.87E+002.61E+012.17E+002.13E+011.23E+026.35E+02 - 62K 100.002.34E-011.20E+004.93E+001.96E+011.46E+001.28E+017.30E+013.84E+02 - 62K 117.001.53E-017.70E-013.18E+001.28E+019.31E-017.26E+003.98E+012.06E+02 - 62K 130.001.15E-015.64E-012.30E+009.17E+006.90E-014.97E+002.63E+011.33E+02 - 62K 147.008.24E-023.89E-011.55E+006.06E+004.89E-013.21E+001.61E+017.84E+01 - 62K 170.005.57E-022.49E-019.59E-013.61E+003.26E-011.93E+009.07E+004.15E+01 - 62K 195.003.86E-021.63E-016.02E-012.17E+002.23E-011.20E+005.27E+002.27E+01 - 62K 260.001.81E-026.76E-022.25E-017.34E-011.02E-014.56E-011.72E+006.38E+00 - 62K 345.008.88E-032.92E-028.73E-022.56E-014.84E-021.83E-015.92E-011.88E+00 - 62K 440.004.96E-031.48E-024.04E-021.08E-012.58E-028.61E-022.46E-016.86E-01 - 62K 550.002.99E-038.27E-032.08E-025.09E-021.47E-024.43E-021.13E-012.83E-01 - 62K 780.001.43E-033.61E-038.10E-031.74E-026.21E-031.65E-023.63E-027.72E-02 - 62K 1050.008.09E-041.91E-033.93E-037.65E-033.05E-037.43E-031.48E-022.79E-02 - 62K 1300.005.51E-041.24E-032.43E-034.44E-031.86E-034.29E-038.02E-031.41E-02 - 62K 1550.004.07E-048.85E-041.66E-032.90E-031.24E-032.78E-034.96E-038.31E-03 - 62L1 8.745.17E+001.24E+037.54E+047.19E+052.51E+021.13E+059.02E+061.65E+08 - 62L1 9.444.54E+008.19E+026.39E+041.07E+061.99E+027.86E+045.89E+061.31E+08 - 62L1 10.743.63E+004.00E+024.17E+041.13E+061.36E+024.26E+042.89E+067.75E+07 - 62L1 13.942.24E+008.43E+011.31E+045.47E+056.22E+011.25E+046.88E+052.09E+07 - 62L1 17.741.39E+001.70E+013.70E+031.81E+053.03E+014.10E+031.84E+055.47E+06 - 62L1 21.009.76E-015.03E+001.41E+037.34E+041.84E+011.90E+037.34E+042.06E+06 - 62L1 27.005.66E-011.04E+003.02E+021.67E+048.70E+006.11E+021.90E+044.70E+05 - 62L1 35.003.15E-016.21E-015.50E+013.18E+034.04E+001.94E+024.78E+031.01E+05 - 62L1 47.001.57E-014.90E-017.94E+004.35E+021.69E+005.40E+011.03E+031.76E+04 - 62L1 60.008.64E-023.39E-012.16E+008.19E+018.27E-011.93E+012.95E+024.20E+03 - 62L1 77.004.63E-022.03E-019.08E-011.65E+014.00E-016.88E+008.45E+019.91E+02 - 62L1 90.003.12E-021.41E-015.92E-016.81E+002.55E-013.66E+003.93E+014.07E+02 - 62L1 107.002.00E-029.04E-023.71E-012.91E+001.55E-011.84E+001.71E+011.54E+02 - 62L1 130.001.21E-025.34E-022.15E-011.27E+008.92E-028.66E-016.80E+005.25E+01 - 62L1 155.007.66E-033.26E-021.27E-016.42E-015.44E-024.45E-013.02E+002.03E+01 - 62L1 220.003.11E-031.19E-024.28E-021.74E-012.07E-021.24E-016.39E-013.27E+00 - 62L1 305.001.37E-034.68E-031.52E-025.26E-028.57E-034.00E-021.62E-016.53E-01 - 62L1 400.007.17E-042.22E-036.58E-032.01E-024.21E-031.64E-025.55E-021.85E-01 - 62L1 510.004.13E-041.19E-033.22E-038.81E-032.26E-037.66E-032.24E-026.41E-02 - 62L1 740.001.89E-044.91E-041.17E-032.73E-038.93E-042.55E-036.15E-031.43E-02 - 62L11000.001.05E-042.56E-045.57E-041.16E-034.32E-041.11E-032.35E-034.76E-03 - 62L11500.005.15E-051.15E-042.23E-044.06E-041.68E-043.87E-047.20E-041.26E-03 - 62L2 8.311.07E+017.25E+042.28E+078.69E+082.79E+014.70E+031.32E+051.15E+06 - 62L2 9.018.57E+004.84E+041.42E+076.54E+082.18E+013.43E+031.17E+051.73E+06 - 62L2 10.315.86E+002.47E+046.44E+063.55E+081.45E+012.03E+038.25E+041.91E+06 - 62L2 13.512.69E+006.41E+031.32E+068.12E+076.35E+007.05E+023.21E+041.04E+06 - 62L2 17.311.29E+001.87E+033.07E+051.84E+072.99E+002.66E+021.18E+044.05E+05 - 62L2 21.007.15E-017.19E+029.88E+045.50E+061.66E+001.24E+025.15E+031.72E+05 - 62L2 27.003.28E-012.09E+022.26E+041.11E+067.76E-014.63E+011.69E+035.14E+04 - 62L2 35.001.44E-015.87E+014.97E+032.06E+053.54E-011.67E+015.19E+021.38E+04 - 62L2 47.005.57E-021.40E+018.96E+023.01E+041.46E-015.26E+001.33E+022.94E+03 - 62L2 60.002.51E-024.35E+002.19E+026.12E+037.00E-022.03E+004.29E+017.97E+02 - 62L2 77.001.10E-021.33E+005.27E+011.21E+033.32E-027.72E-011.35E+012.08E+02 - 62L2 90.006.57E-036.37E-012.18E+014.41E+022.08E-024.23E-016.53E+008.97E+01 - 62L2 107.003.70E-032.84E-018.25E+001.45E+021.24E-022.18E-012.93E+003.53E+01 - 62L2 130.001.94E-031.15E-012.80E+004.20E+016.99E-031.04E-011.20E+001.24E+01 - 62L2 155.001.09E-035.18E-021.07E+001.39E+014.16E-035.33E-025.38E-014.87E+00 - 62L2 220.003.47E-041.08E-021.64E-011.61E+001.49E-031.44E-021.11E-017.76E-01 - 62L2 305.001.22E-042.65E-033.02E-022.32E-015.75E-044.37E-032.66E-021.46E-01 - 62L2 400.005.28E-058.57E-047.86E-034.97E-022.63E-041.66E-038.40E-033.84E-02 - 62L2 510.002.54E-053.24E-042.47E-031.32E-021.31E-047.11E-043.08E-031.20E-02 - 62L2 740.008.71E-067.88E-054.61E-041.95E-034.56E-052.01E-047.05E-042.22E-03 - 62L21000.003.84E-062.70E-051.30E-044.65E-041.96E-057.52E-052.27E-046.14E-04 - 62L21500.001.35E-067.08E-062.71E-057.95E-056.36E-062.10E-055.35E-051.22E-04 - 62L3 7.722.27E+011.59E+055.65E+072.42E+096.95E+001.49E+053.22E+087.21E+10 - 62L3 8.421.77E+011.02E+053.36E+071.71E+095.32E+009.64E+041.79E+083.70E+10 - 62L3 9.721.16E+014.95E+041.41E+078.46E+083.42E+004.71E+046.75E+071.23E+10 - 62L3 12.924.96E+001.17E+042.55E+061.66E+081.42E+001.14E+049.94E+061.40E+09 - 62L3 16.722.24E+003.18E+035.37E+053.32E+076.45E-013.15E+031.78E+061.98E+08 - 62L3 21.001.09E+001.00E+031.35E+057.58E+063.20E-011.01E+033.96E+053.55E+07 - 62L3 27.004.86E-012.83E+022.97E+041.44E+061.48E-012.89E+027.66E+045.46E+06 - 62L3 35.002.07E-017.66E+016.20E+032.52E+056.71E-027.97E+011.44E+048.05E+05 - 62L3 47.007.73E-021.74E+011.05E+033.42E+042.73E-021.85E+012.20E+039.45E+04 - 62L3 60.003.38E-025.14E+002.41E+026.48E+031.30E-025.53E+004.78E+021.64E+04 - 62L3 77.001.44E-021.48E+005.38E+011.18E+036.10E-031.62E+001.03E+022.82E+03 - 62L3 90.008.43E-036.84E-012.11E+014.07E+023.81E-037.54E-013.96E+019.52E+02 - 62L3 107.004.65E-032.91E-017.52E+001.25E+022.26E-033.24E-011.40E+012.89E+02 - 62L3 130.002.38E-031.12E-012.36E+003.32E+011.26E-031.26E-014.39E+007.71E+01 - 62L3 155.001.31E-034.72E-028.36E-011.01E+017.46E-045.38E-021.56E+002.38E+01 - 62L3 220.004.02E-048.75E-031.08E-019.66E-012.65E-041.01E-022.09E-012.41E+00 - 62L3 305.001.38E-041.89E-031.67E-021.13E-011.02E-042.20E-033.37E-023.06E-01 - 62L3 400.005.88E-055.53E-043.71E-032.02E-024.73E-056.37E-047.71E-035.83E-02 - 62L3 510.002.83E-051.92E-041.01E-034.56E-032.41E-052.17E-042.13E-031.38E-02 - 62L3 740.009.84E-064.22E-051.56E-045.36E-048.96E-064.51E-053.16E-041.65E-03 - 62L31000.004.46E-061.38E-053.94E-051.10E-044.23E-061.40E-057.22E-053.19E-04 - 62L31500.001.72E-063.66E-067.65E-061.66E-051.68E-063.48E-061.12E-053.90E-05 - 62M1 2.727.47E+002.77E+041.53E+064.88E+081.74E+038.03E+066.40E+091.16E+12 - 62M1 3.725.10E+007.61E+036.30E+054.69E+076.84E+021.73E+068.44E+081.32E+11 - 62M1 5.722.62E+001.14E+031.60E+056.10E+061.89E+022.12E+055.52E+076.52E+09 - 62M1 9.721.00E+008.47E+011.68E+041.00E+063.87E+011.65E+042.11E+061.66E+08 - 62M1 16.723.36E-013.83E+001.05E+036.83E+047.67E+001.28E+038.47E+044.21E+06 - 62M1 26.001.28E-013.44E-018.24E+015.19E+032.06E+001.69E+026.80E+032.29E+05 - 62M1 41.004.47E-021.39E-014.95E+002.85E+025.37E-012.24E+015.55E+021.25E+04 - 62M1 53.002.41E-029.24E-021.13E+005.22E+012.52E-017.38E+001.42E+022.52E+03 - 62M1 71.001.17E-025.11E-023.07E-017.84E+001.07E-012.16E+003.11E+014.28E+02 - 62M1 104.004.42E-032.01E-029.05E-029.04E-013.57E-024.58E-014.62E+004.55E+01 - 62M1 150.001.72E-037.37E-033.01E-021.74E-011.26E-021.10E-018.07E-015.81E+00 - 62M1 280.003.53E-041.24E-034.20E-031.57E-022.28E-031.16E-025.11E-022.25E-01 - 62M1 500.009.02E-052.61E-047.22E-042.03E-035.02E-041.74E-035.23E-031.54E-02 - 62M2 2.541.75E+015.89E+061.43E+104.24E+122.17E+022.83E+056.17E+074.49E+09 - 62M2 3.541.00E+011.12E+061.66E+094.19E+118.00E+016.32E+041.18E+071.11E+09 - 62M2 5.544.04E+001.19E+059.45E+071.83E+102.07E+018.74E+031.24E+061.16E+08 - 62M2 9.541.11E+007.94E+033.15E+064.16E+084.02E+008.50E+028.28E+046.16E+06 - 62M2 16.542.56E-015.19E+021.09E+059.38E+067.65E-018.58E+015.51E+032.91E+05 - 62M2 26.006.96E-025.61E+017.14E+034.29E+051.96E-011.36E+016.08E+022.32E+04 - 62M2 41.001.74E-026.13E+004.83E+021.98E+045.00E-022.19E+006.75E+011.82E+03 - 62M2 53.007.80E-031.79E+001.08E+023.56E+032.32E-027.93E-011.97E+014.33E+02 - 62M2 71.003.06E-034.44E-012.00E+015.14E+029.70E-032.52E-014.92E+008.52E+01 - 62M2 104.008.88E-047.42E-022.29E+004.26E+013.12E-035.74E-028.16E-011.04E+01 - 62M2 150.002.69E-041.38E-023.01E-014.12E+001.06E-031.42E-021.50E-011.43E+00 - 62M2 280.003.64E-058.83E-041.10E-029.13E-021.71E-041.40E-039.16E-035.41E-02 - 62M2 500.006.21E-068.15E-056.36E-043.47E-033.23E-051.78E-047.88E-043.14E-03 - 62M3 2.424.13E+011.21E+073.12E+109.43E+125.10E+011.18E+072.56E+115.68E+14 - 62M3 3.422.16E+012.12E+063.24E+098.19E+111.79E+012.09E+062.34E+102.97E+13 - 62M3 5.427.89E+002.09E+051.66E+083.15E+104.40E+002.09E+059.80E+086.24E+11 - 62M3 9.421.98E+001.29E+045.02E+066.43E+088.18E-011.33E+042.25E+076.74E+09 - 62M3 16.424.21E-017.85E+021.58E+051.32E+071.50E-018.30E+025.36E+058.06E+07 - 62M3 26.001.06E-017.79E+019.36E+035.37E+053.72E-028.42E+012.58E+042.30E+06 - 62M3 41.002.52E-027.96E+005.82E+022.28E+049.36E-038.77E+001.35E+037.46E+04 - 62M3 53.001.09E-022.21E+001.23E+023.85E+034.31E-032.46E+002.66E+021.13E+04 - 62M3 71.004.13E-035.16E-012.10E+015.12E+021.79E-035.81E-014.28E+011.37E+03 - 62M3 104.001.14E-037.82E-022.13E+003.71E+015.68E-048.95E-024.16E+009.32E+01 - 62M3 150.003.32E-041.30E-022.42E-013.05E+001.91E-041.52E-024.71E-017.65E+00 - 62M3 280.004.20E-056.63E-046.46E-034.75E-023.06E-057.84E-041.33E-021.31E-01 - 62M3 500.006.99E-064.95E-052.68E-041.23E-035.98E-065.66E-055.75E-043.82E-03 - 62M4 2.111.02E+023.71E+052.67E+104.14E+141.50E+013.54E+054.06E+094.14E+12 - 62M4 3.112.98E+015.08E+041.74E+091.39E+134.23E+005.04E+042.96E+082.23E+11 - 62M4 5.115.55E+004.02E+035.24E+071.89E+118.16E-014.13E+031.08E+075.36E+09 - 62M4 9.116.84E-012.10E+028.85E+051.35E+091.15E-012.23E+022.44E+057.24E+07 - 62M4 16.117.61E-021.12E+011.58E+041.11E+071.59E-021.25E+016.20E+031.09E+06 - 62M4 26.001.10E-029.33E-015.42E+022.06E+052.89E-031.11E+002.97E+023.33E+04 - 62M4 41.001.65E-038.60E-022.23E+014.87E+035.53E-041.11E-011.71E+011.25E+03 - 62M4 53.005.55E-042.23E-023.73E+006.02E+022.14E-043.03E-023.46E+002.00E+02 - 62M4 71.001.58E-044.79E-034.93E-015.69E+017.20E-056.93E-035.71E-012.51E+01 - 62M4 104.003.07E-056.47E-043.62E-022.72E+001.71E-051.02E-035.56E-021.73E+00 - 62M4 150.006.35E-069.66E-053.10E-031.55E-014.24E-061.63E-046.11E-031.37E-01 - 62M4 280.004.42E-074.14E-065.48E-051.37E-033.90E-077.48E-061.53E-042.05E-03 - 62M4 500.004.59E-082.59E-071.69E-062.20E-054.31E-084.53E-075.61E-064.86E-05 - 62M5 2.081.52E+024.73E+054.54E+106.48E+149.08E+003.56E+042.03E+101.31E+15 - 62M5 3.084.35E+016.30E+042.87E+092.09E+132.54E+005.02E+031.31E+093.92E+13 - 62M5 5.087.91E+004.85E+038.42E+072.72E+114.92E-014.14E+023.95E+074.56E+11 - 62M5 9.089.48E-012.47E+021.39E+061.87E+097.07E-022.30E+016.81E+052.69E+09 - 62M5 16.081.03E-011.29E+012.42E+041.47E+071.00E-021.35E+001.26E+041.83E+07 - 62M5 26.001.46E-021.04E+008.02E+022.61E+051.87E-031.26E-014.41E+022.91E+05 - 62M5 41.002.15E-039.25E-023.18E+015.89E+033.69E-041.35E-021.85E+016.13E+03 - 62M5 53.007.14E-042.34E-025.18E+007.04E+021.46E-043.87E-033.12E+007.17E+02 - 62M5 71.002.02E-044.87E-036.60E-016.33E+015.04E-059.41E-044.12E-016.40E+01 - 62M5 104.003.90E-056.28E-044.54E-022.78E+001.25E-051.51E-042.98E-022.88E+00 - 62M5 150.008.06E-068.92E-053.57E-031.43E-013.26E-062.69E-052.45E-031.55E-01 - 62M5 280.005.77E-073.56E-065.19E-059.91E-043.42E-071.57E-063.82E-051.22E-03 - 62M5 500.006.86E-082.25E-071.32E-061.19E-054.68E-081.34E-071.01E-061.64E-05 - 62N+ 50.001.41E-021.48E+009.40E+013.67E+039.53E-024.02E+001.79E+026.87E+03 - 62N+ 70.005.42E-032.92E-011.25E+013.48E+023.51E-029.16E-012.50E+016.35E+02 - 62N+ 100.002.03E-035.68E-021.59E+003.11E+011.27E-022.08E-013.50E+005.86E+01 - 62N+ 150.006.53E-049.42E-031.59E-012.11E+003.98E-034.05E-024.17E-014.42E+00 - 62N+ 200.002.93E-042.81E-033.30E-023.31E-011.76E-031.33E-029.98E-027.80E-01 - 62N+ 500.002.84E-051.07E-044.43E-041.85E-031.50E-045.56E-041.88E-036.49E-03 - 63K 49.521.52E+003.29E+001.35E+001.89E-011.22E+011.86E+024.90E+022.84E+02 - 63K 50.221.47E+003.40E+001.92E+005.19E-011.18E+011.77E+024.98E+023.96E+02 - 63K 51.521.37E+003.51E+002.95E+001.55E+001.08E+011.60E+024.97E+025.87E+02 - 63K 54.721.18E+003.63E+005.16E+005.81E+009.13E+001.28E+024.77E+029.44E+02 - 63K 58.529.91E-013.54E+007.02E+001.20E+017.50E+009.99E+014.26E+021.17E+03 - 63K 63.008.18E-013.27E+008.17E+001.85E+016.05E+007.59E+013.59E+021.23E+03 - 63K 69.006.45E-012.83E+008.49E+002.38E+014.64E+005.42E+012.78E+021.13E+03 - 63K 77.004.83E-012.27E+007.80E+002.55E+013.38E+003.61E+011.96E+028.98E+02 - 63K 89.003.28E-011.61E+006.11E+002.23E+012.22E+002.12E+011.18E+025.86E+02 - 63K 102.002.28E-011.13E+004.46E+001.71E+011.50E+001.29E+017.10E+013.61E+02 - 63K 119.001.50E-017.32E-012.92E+001.14E+019.67E-017.38E+003.93E+011.98E+02 - 63K 132.001.14E-015.41E-012.14E+008.31E+007.21E-015.09E+002.62E+011.29E+02 - 63K 149.008.20E-023.76E-011.46E+005.58E+005.13E-013.31E+001.62E+017.70E+01 - 63K 172.005.58E-022.43E-019.15E-013.38E+003.44E-012.00E+009.21E+004.13E+01 - 63K 200.003.73E-021.53E-015.52E-011.95E+002.27E-011.19E+005.09E+002.13E+01 - 63K 265.001.79E-026.53E-022.13E-016.86E-011.06E-014.63E-011.71E+006.21E+00 - 63K 350.008.92E-032.89E-028.52E-022.47E-015.06E-021.89E-016.02E-011.88E+00 - 63K 440.005.17E-031.53E-024.16E-021.11E-012.80E-029.30E-022.64E-017.32E-01 - 63K 550.003.12E-038.61E-032.16E-025.27E-021.59E-024.78E-021.22E-013.02E-01 - 63K 780.001.50E-033.78E-038.48E-031.82E-026.70E-031.77E-023.90E-028.27E-02 - 63K 1050.008.48E-042.00E-034.14E-038.05E-033.29E-038.00E-031.59E-022.99E-02 - 63K 1300.005.78E-041.31E-032.56E-034.68E-031.99E-034.62E-038.62E-031.52E-02 - 63K 1550.004.27E-049.33E-041.75E-033.06E-031.33E-032.98E-035.33E-038.91E-03 - 63L1 9.054.82E+001.14E+036.60E+045.81E+052.49E+021.07E+058.20E+061.44E+08 - 63L1 9.754.26E+007.67E+025.65E+048.76E+051.99E+027.54E+045.44E+061.15E+08 - 63L1 11.053.43E+003.84E+023.77E+049.59E+051.37E+024.17E+042.73E+066.98E+07 - 63L1 14.252.14E+008.59E+011.24E+044.90E+056.41E+011.26E+046.74E+051.97E+07 - 63L1 18.051.34E+001.84E+013.65E+031.70E+053.17E+014.23E+031.85E+055.32E+06 - 63L1 22.008.92E-014.57E+001.19E+035.95E+041.76E+011.71E+036.31E+041.70E+06 - 63L1 28.005.29E-011.03E+002.74E+021.44E+048.61E+005.78E+021.73E+044.13E+05 - 63L1 36.003.00E-015.81E-015.38E+012.94E+034.09E+001.90E+024.55E+039.32E+04 - 63L1 48.001.52E-014.50E-018.33E+004.31E+021.75E+005.48E+011.02E+031.70E+04 - 63L1 61.008.50E-023.16E-012.27E+008.53E+018.68E-011.99E+012.99E+024.17E+03 - 63L1 78.004.61E-021.93E-019.08E-011.76E+014.24E-017.21E+008.73E+011.01E+03 - 63L1 91.003.12E-021.35E-015.81E-017.27E+002.72E-013.87E+004.10E+014.18E+02 - 63L1 108.002.01E-028.79E-023.63E-013.07E+001.66E-011.96E+001.79E+011.60E+02 - 63L1 131.001.22E-025.25E-022.11E-011.32E+009.60E-029.26E-017.20E+005.50E+01 - 63L1 160.007.30E-033.01E-021.17E-015.97E-015.47E-024.34E-012.87E+001.87E+01 - 63L1 225.003.05E-031.14E-024.07E-021.66E-012.13E-021.25E-016.34E-013.18E+00 - 63L1 310.001.38E-034.62E-031.49E-025.17E-029.00E-034.14E-021.66E-016.58E-01 - 63L1 400.007.51E-042.32E-036.85E-032.11E-024.60E-031.79E-026.06E-022.02E-01 - 63L1 510.004.33E-041.24E-033.38E-039.30E-032.47E-038.36E-032.44E-026.98E-02 - 63L1 740.001.99E-045.18E-041.24E-032.90E-039.73E-042.78E-036.69E-031.55E-02 - 63L11000.001.11E-042.71E-045.92E-041.23E-034.69E-041.21E-032.55E-035.17E-03 - 63L11500.005.43E-051.22E-042.38E-044.34E-041.81E-044.20E-047.81E-041.36E-03 - 63L2 8.621.00E+016.63E+041.99E+077.25E+082.77E+014.45E+031.19E+059.57E+05 - 63L2 9.328.08E+004.48E+041.26E+075.54E+082.18E+013.28E+031.06E+051.46E+06 - 63L2 10.625.60E+002.33E+045.88E+063.08E+081.46E+011.97E+037.63E+041.66E+06 - 63L2 13.822.63E+006.27E+031.26E+067.42E+076.58E+007.05E+023.08E+049.47E+05 - 63L2 17.621.28E+001.88E+033.02E+051.74E+073.14E+002.72E+021.16E+043.83E+05 - 63L2 22.006.51E-016.26E+028.19E+044.36E+061.60E+001.14E+024.49E+031.44E+05 - 63L2 28.003.08E-011.91E+022.00E+049.38E+057.72E-014.40E+011.54E+034.52E+04 - 63L2 36.001.39E-015.61E+014.60E+031.85E+053.61E-011.64E+014.93E+021.27E+04 - 63L2 48.005.53E-021.39E+018.68E+022.84E+041.52E-015.33E+001.31E+022.82E+03 - 63L2 61.002.53E-024.41E+002.19E+025.97E+037.41E-022.10E+004.33E+017.87E+02 - 63L2 78.001.13E-021.37E+005.38E+011.21E+033.55E-028.10E-011.39E+012.10E+02 - 63L2 91.006.79E-036.65E-012.25E+014.48E+022.25E-024.47E-016.79E+009.18E+01 - 63L2 108.003.86E-032.99E-018.61E+001.49E+021.35E-022.32E-013.08E+003.66E+01 - 63L2 131.002.04E-031.23E-012.95E+004.39E+017.63E-031.11E-011.27E+001.30E+01 - 63L2 160.001.06E-034.94E-029.90E-011.25E+014.23E-035.24E-025.13E-014.51E+00 - 63L2 225.003.49E-041.08E-021.61E-011.55E+001.56E-031.48E-021.11E-017.59E-01 - 63L2 310.001.26E-042.73E-033.09E-022.34E-016.15E-044.60E-032.75E-021.49E-01 - 63L2 400.005.75E-059.50E-048.73E-035.50E-022.95E-041.85E-039.34E-034.25E-02 - 63L2 510.002.78E-053.60E-042.74E-031.46E-021.47E-047.95E-043.43E-031.34E-02 - 63L2 740.009.61E-068.77E-055.14E-042.17E-035.14E-052.26E-047.87E-042.48E-03 - 63L21000.004.20E-063.01E-051.45E-045.19E-042.21E-058.46E-052.54E-046.86E-04 - 63L21500.001.50E-067.89E-063.03E-058.90E-057.17E-062.37E-056.01E-051.37E-04 - 63L3 7.982.13E+011.46E+054.99E+072.04E+096.75E+001.42E+052.95E+086.39E+10 - 63L3 8.681.67E+019.53E+043.01E+071.47E+095.22E+009.33E+041.67E+083.35E+10 - 63L3 9.981.11E+014.70E+041.30E+077.44E+083.39E+004.64E+046.49E+071.15E+10 - 63L3 13.184.85E+001.15E+042.44E+061.53E+081.44E+001.16E+049.99E+061.37E+09 - 63L3 16.982.22E+003.19E+035.28E+053.16E+076.62E-013.28E+031.85E+062.01E+08 - 63L3 22.009.82E-018.62E+021.11E+055.92E+062.99E-019.02E+023.34E+052.86E+07 - 63L3 28.004.52E-012.56E+022.58E+041.20E+061.43E-012.72E+026.92E+044.74E+06 - 63L3 36.001.98E-017.22E+015.65E+032.23E+056.63E-027.80E+011.37E+047.45E+05 - 63L3 48.007.59E-021.70E+019.98E+023.18E+042.76E-021.88E+012.20E+039.20E+04 - 63L3 61.003.38E-025.14E+002.36E+026.22E+031.33E-025.73E+004.89E+021.65E+04 - 63L3 78.001.46E-021.51E+005.40E+011.16E+036.33E-031.71E+001.07E+022.92E+03 - 63L3 91.008.60E-037.04E-012.14E+014.06E+023.97E-038.02E-014.19E+019.96E+02 - 63L3 108.004.78E-033.02E-017.72E+001.26E+022.37E-033.47E-011.49E+013.06E+02 - 63L3 131.002.47E-031.17E-012.45E+003.40E+011.33E-031.36E-014.73E+008.25E+01 - 63L3 160.001.25E-034.40E-027.52E-018.80E+007.32E-045.18E-021.46E+002.17E+01 - 63L3 225.003.98E-048.55E-031.03E-019.01E-012.67E-041.02E-022.07E-012.35E+00 - 63L3 310.001.40E-041.91E-031.66E-021.11E-011.05E-042.27E-033.46E-023.11E-01 - 63L3 400.006.29E-056.01E-044.04E-032.19E-025.10E-057.09E-048.64E-036.54E-02 - 63L3 510.003.02E-052.09E-041.10E-034.95E-032.60E-052.41E-042.38E-031.54E-02 - 63L3 740.001.05E-054.57E-051.70E-045.83E-049.64E-064.98E-053.52E-041.84E-03 - 63L31000.004.80E-061.50E-054.28E-051.20E-044.55E-061.53E-058.03E-053.55E-04 - 63L31500.001.85E-063.94E-068.29E-061.80E-051.80E-063.80E-061.24E-054.34E-05 - 63M1 2.807.09E+002.68E+041.51E+064.27E+081.78E+037.94E+066.17E+091.08E+12 - 63M1 3.804.90E+007.60E+036.16E+054.60E+077.13E+021.77E+068.54E+081.30E+11 - 63M1 5.802.56E+001.19E+031.59E+055.94E+062.01E+022.25E+055.82E+076.75E+09 - 63M1 9.809.95E-019.29E+011.74E+049.95E+054.19E+011.80E+042.30E+061.78E+08 - 63M1 16.803.37E-014.53E+001.14E+037.12E+048.38E+001.42E+039.33E+044.59E+06 - 63M1 26.001.31E-013.94E-019.48E+015.73E+032.29E+001.90E+027.65E+032.57E+05 - 63M1 41.004.58E-021.35E-015.91E+003.25E+025.95E-012.50E+016.22E+021.39E+04 - 63M1 53.002.48E-028.96E-021.32E+006.06E+012.80E-018.25E+001.58E+022.81E+03 - 63M1 71.001.20E-025.03E-023.36E-019.17E+001.19E-012.40E+003.46E+014.75E+02 - 63M1 104.004.58E-032.01E-029.32E-021.02E+003.95E-025.09E-015.13E+005.03E+01 - 63M1 150.001.79E-037.49E-033.07E-021.88E-011.40E-021.22E-018.92E-016.42E+00 - 63M1 280.003.70E-041.28E-034.36E-031.66E-022.52E-031.28E-025.63E-022.47E-01 - 63M1 500.009.52E-052.75E-047.62E-042.16E-035.52E-041.92E-035.74E-031.69E-02 - 63M2 2.611.66E+015.62E+061.33E+103.81E+122.22E+022.80E+055.90E+074.03E+09 - 63M2 3.619.70E+001.11E+061.62E+093.99E+118.37E+016.48E+041.17E+071.05E+09 - 63M2 5.613.99E+001.23E+059.67E+071.83E+102.22E+019.23E+031.28E+061.16E+08 - 63M2 9.611.12E+008.42E+033.33E+064.32E+084.38E+009.17E+028.78E+046.38E+06 - 63M2 16.612.64E-015.60E+021.17E+059.97E+068.42E-019.36E+015.93E+033.09E+05 - 63M2 26.007.33E-026.19E+017.89E+034.70E+052.19E-011.51E+016.69E+022.53E+04 - 63M2 41.001.85E-026.78E+005.33E+022.18E+045.59E-022.43E+007.44E+011.98E+03 - 63M2 53.008.32E-031.97E+001.19E+023.92E+032.60E-028.81E-012.18E+014.74E+02 - 63M2 71.003.28E-034.91E-012.21E+015.66E+021.09E-022.80E-015.43E+009.35E+01 - 63M2 104.009.59E-048.22E-022.54E+004.70E+013.51E-036.40E-029.04E-011.14E+01 - 63M2 150.002.92E-041.54E-023.34E-014.56E+001.19E-031.59E-021.67E-011.58E+00 - 63M2 280.003.97E-059.85E-041.23E-021.02E-011.93E-041.57E-031.02E-026.02E-02 - 63M2 500.006.84E-069.12E-057.12E-043.89E-033.66E-052.01E-048.84E-043.52E-03 - 63M3 2.483.96E+011.17E+072.94E+108.64E+125.12E+011.18E+072.52E+115.47E+14 - 63M3 3.482.11E+012.12E+063.20E+097.89E+111.83E+012.17E+062.42E+103.05E+13 - 63M3 5.487.85E+002.16E+051.71E+083.17E+104.61E+002.25E+051.06E+096.73E+11 - 63M3 9.482.01E+001.37E+045.30E+066.67E+088.70E-011.46E+042.50E+077.51E+09 - 63M3 16.484.34E-018.43E+021.69E+051.39E+071.61E-019.25E+026.06E+059.12E+07 - 63M3 26.001.11E-018.53E+011.02E+045.83E+054.04E-029.56E+012.97E+042.66E+06 - 63M3 41.002.66E-028.72E+006.37E+022.47E+041.02E-029.95E+001.56E+038.59E+04 - 63M3 53.001.15E-022.42E+001.34E+024.18E+034.68E-032.79E+003.05E+021.30E+04 - 63M3 71.004.38E-035.65E-012.30E+015.56E+021.94E-036.60E-014.91E+011.57E+03 - 63M3 104.001.22E-038.57E-022.33E+004.03E+016.17E-041.01E-014.75E+001.06E+02 - 63M3 150.003.55E-041.43E-022.65E-013.32E+002.07E-041.71E-025.36E-018.71E+00 - 63M3 280.004.55E-057.28E-047.08E-035.19E-023.33E-058.83E-041.50E-021.49E-01 - 63M3 500.007.53E-065.42E-052.94E-041.35E-036.50E-066.34E-056.49E-044.32E-03 - 63M4 2.169.85E+013.58E+052.52E+103.85E+141.51E+013.57E+054.00E+093.97E+12 - 63M4 3.162.98E+015.11E+041.74E+091.39E+134.39E+005.29E+043.08E+082.27E+11 - 63M4 5.165.71E+004.19E+035.52E+072.00E+118.68E-014.49E+031.18E+075.74E+09 - 63M4 9.167.21E-012.25E+029.64E+051.48E+091.25E-012.49E+022.73E+058.02E+07 - 63M4 16.168.17E-021.22E+011.76E+041.24E+071.75E-021.41E+017.04E+031.23E+06 - 63M4 26.001.21E-021.04E+006.17E+022.37E+053.23E-031.27E+003.44E+023.85E+04 - 63M4 41.001.82E-039.61E-022.54E+015.60E+036.19E-041.27E-011.98E+011.45E+03 - 63M4 53.006.15E-042.50E-024.25E+006.93E+022.40E-043.49E-024.01E+002.31E+02 - 63M4 71.001.76E-045.38E-035.62E-016.55E+018.10E-058.00E-036.61E-012.90E+01 - 63M4 104.003.41E-057.30E-044.13E-023.13E+001.92E-051.18E-036.44E-022.00E+00 - 63M4 150.007.06E-061.09E-043.54E-031.78E-014.79E-061.89E-047.09E-031.59E-01 - 63M4 280.005.07E-074.72E-066.27E-051.58E-034.42E-078.65E-061.78E-042.38E-03 - 63M4 500.005.17E-082.98E-071.94E-062.54E-054.89E-085.24E-076.52E-065.65E-05 - 63M5 2.131.48E+024.55E+054.35E+106.10E+149.18E+003.55E+042.03E+101.28E+15 - 63M5 3.134.35E+016.32E+042.91E+092.10E+132.64E+005.21E+031.37E+094.11E+13 - 63M5 5.138.13E+005.03E+038.93E+072.89E+115.22E-014.44E+024.34E+075.05E+11 - 63M5 9.139.99E-012.63E+021.52E+062.06E+097.63E-022.51E+017.72E+053.10E+09 - 63M5 16.131.10E-011.39E+012.70E+041.65E+071.09E-021.49E+001.45E+042.14E+07 - 63M5 26.001.59E-021.14E+009.15E+023.00E+052.07E-031.41E-015.19E+023.49E+05 - 63M5 41.002.36E-031.02E-013.63E+016.76E+034.10E-041.52E-022.18E+017.32E+03 - 63M5 53.007.87E-042.60E-025.92E+008.08E+021.63E-044.35E-033.67E+008.55E+02 - 63M5 71.002.23E-045.41E-037.54E-017.26E+015.63E-051.06E-034.85E-017.62E+01 - 63M5 104.004.28E-056.99E-045.18E-023.19E+001.39E-051.70E-043.50E-023.41E+00 - 63M5 150.008.88E-069.97E-054.07E-031.64E-013.65E-063.03E-052.87E-031.83E-01 - 63M5 280.006.63E-074.02E-065.92E-051.14E-033.84E-071.77E-064.46E-051.44E-03 - 63M5 500.007.06E-082.50E-071.49E-061.36E-055.26E-081.51E-071.16E-061.92E-05 - 63N+ 50.001.47E-021.63E+001.04E+024.06E+031.06E-014.52E+002.05E+027.90E+03 - 63N+ 70.005.68E-033.20E-011.38E+013.83E+023.91E-021.03E+002.83E+017.25E+02 - 63N+ 100.002.13E-036.21E-021.75E+003.43E+011.41E-022.32E-013.95E+006.64E+01 - 63N+ 150.006.87E-041.02E-021.75E-012.33E+004.42E-034.51E-024.67E-014.98E+00 - 63N+ 200.003.09E-043.04E-033.63E-023.65E-011.95E-031.48E-021.11E-018.75E-01 - 63N+ 500.003.00E-051.15E-044.86E-042.05E-031.64E-046.10E-042.07E-037.18E-03 - 64K 51.241.42E+002.94E+001.16E+001.52E-011.21E+011.76E+024.47E+022.49E+02 - 64K 51.941.38E+003.04E+001.63E+004.13E-011.16E+011.68E+024.54E+023.44E+02 - 64K 53.241.28E+003.13E+002.49E+001.22E+001.07E+011.52E+024.53E+025.08E+02 - 64K 56.441.11E+003.25E+004.36E+004.60E+009.10E+001.23E+024.37E+028.18E+02 - 64K 60.249.39E-013.18E+005.96E+009.64E+007.52E+009.65E+013.93E+021.02E+03 - 64K 64.008.02E-013.00E+006.89E+001.42E+016.30E+007.71E+013.44E+021.09E+03 - 64K 70.006.35E-012.63E+007.37E+001.92E+014.86E+005.53E+012.70E+021.03E+03 - 64K 78.004.78E-012.14E+006.94E+002.14E+013.55E+003.71E+011.93E+028.39E+02 - 64K 90.003.27E-011.54E+005.57E+001.95E+012.35E+002.19E+011.18E+025.60E+02 - 64K 103.002.28E-011.09E+004.13E+001.53E+011.59E+001.34E+017.17E+013.52E+02 - 64K 120.001.51E-017.12E-012.76E+001.04E+011.03E+007.73E+004.01E+011.96E+02 - 64K 133.001.15E-015.29E-012.04E+007.71E+007.69E-015.35E+002.69E+011.29E+02 - 64K 150.008.31E-023.71E-011.41E+005.25E+005.48E-013.49E+001.68E+017.77E+01 - 64K 173.005.67E-022.42E-018.90E-013.22E+003.68E-012.12E+009.58E+004.21E+01 - 64K 200.003.86E-021.56E-015.51E-011.92E+002.47E-011.29E+005.42E+002.24E+01 - 64K 265.001.86E-026.67E-022.16E-016.88E-011.15E-015.00E-011.83E+006.57E+00 - 64K 350.009.28E-032.97E-028.71E-022.51E-015.49E-022.04E-016.45E-012.00E+00 - 64K 440.005.39E-031.59E-024.29E-021.14E-013.03E-021.00E-012.82E-017.79E-01 - 64K 550.003.26E-038.95E-032.24E-025.46E-021.72E-025.16E-021.31E-013.22E-01 - 64K 780.001.57E-033.95E-038.88E-031.90E-027.23E-031.91E-024.19E-028.84E-02 - 64K 1050.008.89E-042.10E-034.35E-038.47E-033.54E-038.61E-031.70E-023.20E-02 - 64K 1300.006.05E-041.38E-032.70E-034.94E-032.14E-034.97E-039.25E-031.62E-02 - 64K 1550.004.48E-049.82E-041.85E-033.24E-031.43E-033.21E-035.72E-039.55E-03 - 64L1 9.384.51E+001.05E+035.80E+044.78E+052.46E+021.02E+057.47E+061.25E+08 - 64L1 10.084.00E+007.18E+025.02E+047.28E+051.99E+027.23E+045.03E+061.02E+08 - 64L1 11.383.24E+003.69E+023.41E+048.16E+051.38E+024.07E+042.57E+066.29E+07 - 64L1 14.582.05E+008.71E+011.18E+044.39E+056.60E+011.27E+046.59E+051.85E+07 - 64L1 18.381.30E+001.98E+013.60E+031.60E+053.31E+014.35E+031.86E+055.17E+06 - 64L1 22.008.99E-015.73E+001.32E+036.25E+041.94E+011.91E+036.98E+041.84E+06 - 64L1 28.005.35E-011.22E+003.11E+021.56E+049.47E+006.43E+021.91E+044.49E+05 - 64L1 36.003.04E-015.69E-016.31E+013.25E+034.50E+002.11E+025.02E+031.02E+05 - 64L1 48.001.55E-014.26E-019.93E+004.90E+021.93E+006.07E+011.12E+031.86E+04 - 64L1 61.008.70E-023.04E-012.58E+009.86E+019.55E-012.20E+013.29E+024.56E+03 - 64L1 78.004.73E-021.89E-019.58E-012.04E+014.67E-017.96E+009.60E+011.10E+03 - 64L1 91.003.21E-021.33E-015.96E-018.27E+002.99E-014.26E+004.50E+014.57E+02 - 64L1 108.002.07E-028.74E-023.67E-013.40E+001.83E-012.16E+001.97E+011.74E+02 - 64L1 131.001.26E-025.27E-022.12E-011.42E+001.05E-011.02E+007.90E+006.00E+01 - 64L1 160.007.57E-033.05E-021.18E-016.30E-016.01E-024.77E-013.14E+002.04E+01 - 64L1 225.003.18E-031.17E-024.16E-021.74E-012.34E-021.38E-016.94E-013.47E+00 - 64L1 310.001.44E-034.77E-031.54E-025.41E-029.86E-034.54E-021.81E-017.17E-01 - 64L1 400.007.86E-042.41E-037.15E-032.21E-025.04E-031.96E-026.61E-022.20E-01 - 64L1 510.004.55E-041.30E-033.55E-039.81E-032.69E-039.13E-032.66E-027.59E-02 - 64L1 740.002.09E-045.45E-041.31E-033.08E-031.06E-033.03E-037.27E-031.69E-02 - 64L11000.001.17E-042.87E-046.28E-041.31E-035.09E-041.31E-032.77E-035.61E-03 - 64L11500.005.71E-051.29E-042.53E-044.64E-041.96E-044.56E-048.47E-041.48E-03 - 64L2 8.939.38E+006.06E+041.75E+076.08E+082.74E+014.21E+031.08E+058.08E+05 - 64L2 9.637.62E+004.16E+041.13E+074.71E+082.18E+013.14E+039.66E+041.25E+06 - 64L2 10.935.34E+002.21E+045.37E+062.69E+081.48E+011.92E+037.07E+041.45E+06 - 64L2 14.132.56E+006.14E+031.20E+066.78E+076.80E+007.05E+022.95E+048.65E+05 - 64L2 17.931.27E+001.88E+032.96E+051.65E+073.30E+002.77E+021.14E+043.63E+05 - 64L2 22.006.83E-016.86E+028.91E+044.64E+061.77E+001.24E+024.80E+031.49E+05 - 64L2 28.003.25E-012.10E+022.17E+041.00E+068.56E-014.82E+011.66E+034.76E+04 - 64L2 36.001.47E-016.15E+015.02E+031.99E+054.01E-011.80E+015.33E+021.35E+04 - 64L2 48.005.86E-021.53E+019.48E+023.07E+041.69E-015.86E+001.43E+023.02E+03 - 64L2 61.002.69E-024.84E+002.39E+026.48E+038.24E-022.31E+004.72E+018.48E+02 - 64L2 78.001.21E-021.51E+005.89E+011.32E+033.96E-028.93E-011.51E+012.28E+02 - 64L2 91.007.27E-037.31E-012.47E+014.88E+022.50E-024.93E-017.43E+009.96E+01 - 64L2 108.004.14E-033.29E-019.45E+001.63E+021.51E-022.56E-013.38E+003.98E+01 - 64L2 131.002.19E-031.35E-013.25E+004.80E+018.51E-031.23E-011.40E+001.42E+01 - 64L2 160.001.14E-035.45E-021.09E+001.37E+014.73E-035.80E-025.64E-014.93E+00 - 64L2 225.003.79E-041.20E-021.77E-011.71E+001.75E-031.64E-021.23E-018.34E-01 - 64L2 310.001.37E-043.03E-033.41E-022.58E-016.90E-045.12E-033.05E-021.64E-01 - 64L2 400.006.26E-051.05E-039.68E-036.08E-023.32E-042.07E-031.04E-024.70E-02 - 64L2 510.003.03E-053.99E-043.05E-031.62E-021.66E-048.89E-043.82E-031.48E-02 - 64L2 740.001.05E-059.74E-055.72E-042.41E-035.78E-052.53E-048.79E-042.76E-03 - 64L21000.004.63E-063.35E-051.62E-045.79E-042.49E-059.49E-052.84E-047.65E-04 - 64L21500.001.65E-068.80E-063.39E-059.95E-058.07E-062.67E-056.75E-051.54E-04 - 64L3 8.242.00E+011.34E+054.42E+071.74E+096.57E+001.35E+052.72E+085.68E+10 - 64L3 8.941.58E+018.87E+042.71E+071.26E+095.11E+009.02E+041.56E+083.04E+10 - 64L3 10.241.06E+014.46E+041.20E+076.56E+083.37E+004.58E+046.24E+071.07E+10 - 64L3 13.444.73E+001.13E+042.33E+061.41E+081.46E+001.18E+041.00E+071.34E+09 - 64L3 17.242.20E+003.20E+035.19E+053.01E+076.79E-013.41E+031.91E+062.03E+08 - 64L3 22.001.02E+009.35E+021.19E+056.27E+063.22E-011.01E+033.81E+053.25E+07 - 64L3 28.004.73E-012.77E+022.78E+041.28E+061.54E-013.06E+027.89E+045.39E+06 - 64L3 36.002.08E-017.83E+016.11E+032.38E+057.13E-028.77E+011.56E+048.45E+05 - 64L3 48.007.99E-021.85E+011.08E+033.40E+042.97E-022.11E+012.49E+031.04E+05 - 64L3 61.003.56E-025.58E+002.55E+026.67E+031.43E-026.44E+005.55E+021.87E+04 - 64L3 78.001.54E-021.64E+005.84E+011.25E+036.81E-031.92E+001.21E+023.29E+03 - 64L3 91.009.11E-037.64E-012.32E+014.37E+024.28E-039.00E-014.74E+011.12E+03 - 64L3 108.005.07E-033.28E-018.36E+001.36E+022.55E-033.90E-011.69E+013.45E+02 - 64L3 131.002.62E-031.27E-012.66E+003.67E+011.43E-031.52E-015.34E+009.29E+01 - 64L3 160.001.33E-034.78E-028.16E-019.50E+007.88E-045.80E-021.65E+002.44E+01 - 64L3 225.004.25E-049.29E-031.12E-019.73E-012.88E-041.14E-022.32E-012.63E+00 - 64L3 310.001.50E-042.07E-031.80E-021.20E-011.13E-042.53E-033.88E-023.48E-01 - 64L3 400.006.77E-056.52E-044.38E-032.37E-025.49E-057.89E-049.68E-037.31E-02 - 64L3 510.003.25E-052.26E-041.20E-035.37E-032.80E-052.67E-042.66E-031.73E-02 - 64L3 740.001.12E-054.96E-051.85E-046.33E-041.04E-055.49E-053.93E-042.06E-03 - 64L31000.005.17E-061.62E-054.65E-051.30E-044.89E-061.68E-058.92E-053.96E-04 - 64L31500.002.00E-064.25E-068.98E-061.95E-051.93E-064.13E-061.37E-054.82E-05 - 64M1 2.886.74E+002.59E+041.50E+063.73E+081.81E+037.82E+065.92E+091.01E+12 - 64M1 3.884.70E+007.57E+036.07E+054.48E+077.41E+021.81E+068.58E+081.28E+11 - 64M1 5.882.49E+001.23E+031.58E+055.83E+062.13E+022.38E+056.11E+076.96E+09 - 64M1 9.889.86E-011.01E+021.79E+049.91E+054.52E+011.95E+042.48E+061.90E+08 - 64M1 16.883.38E-015.31E+001.23E+037.41E+049.15E+001.56E+031.03E+055.00E+06 - 64M1 26.001.33E-014.62E-011.09E+026.31E+032.53E+002.14E+028.60E+032.88E+05 - 64M1 41.004.69E-021.32E-017.01E+003.69E+026.58E-012.80E+016.95E+021.55E+04 - 64M1 53.002.54E-028.71E-021.56E+006.99E+013.09E-019.20E+001.76E+023.12E+03 - 64M1 71.001.24E-024.94E-023.74E-011.07E+011.32E-012.68E+003.85E+015.27E+02 - 64M1 104.004.74E-032.01E-029.67E-021.16E+004.37E-025.65E-015.68E+005.56E+01 - 64M1 150.001.86E-037.60E-033.15E-022.04E-011.54E-021.35E-019.86E-017.08E+00 - 64M1 280.003.88E-041.33E-034.54E-031.75E-022.77E-031.41E-026.20E-022.71E-01 - 64M1 500.001.00E-042.90E-048.05E-042.29E-036.06E-042.10E-036.30E-031.85E-02 - 64M2 2.691.58E+015.37E+061.24E+103.45E+122.27E+022.78E+055.68E+073.68E+09 - 64M2 3.699.38E+001.11E+061.58E+093.81E+118.76E+016.64E+041.17E+071.01E+09 - 64M2 5.693.94E+001.27E+059.89E+071.83E+102.37E+019.75E+031.33E+061.16E+08 - 64M2 9.691.14E+008.92E+033.52E+064.50E+084.76E+009.88E+029.30E+046.62E+06 - 64M2 16.692.72E-016.03E+021.25E+051.06E+079.26E-011.02E+026.38E+033.27E+05 - 64M2 26.007.71E-026.83E+018.70E+035.15E+052.44E-011.67E+017.35E+022.76E+04 - 64M2 41.001.97E-027.48E+005.88E+022.39E+046.25E-022.70E+008.18E+012.17E+03 - 64M2 53.008.87E-032.18E+001.32E+024.30E+032.91E-029.78E-012.40E+015.18E+02 - 64M2 71.003.52E-035.43E-012.44E+016.22E+021.22E-023.11E-015.99E+001.03E+02 - 64M2 104.001.03E-039.10E-022.81E+005.18E+013.94E-037.12E-021.00E+001.26E+01 - 64M2 150.003.17E-041.70E-023.71E-015.04E+001.34E-031.77E-021.85E-011.74E+00 - 64M2 280.004.35E-051.10E-031.36E-021.13E-012.18E-041.76E-031.14E-026.68E-02 - 64M2 500.007.52E-061.02E-047.97E-044.34E-034.14E-052.26E-049.91E-043.93E-03 - 64M3 2.543.81E+011.12E+072.77E+107.93E+125.13E+011.18E+072.46E+115.26E+14 - 64M3 3.542.06E+012.12E+063.15E+097.60E+111.88E+012.25E+062.48E+103.11E+13 - 64M3 5.547.80E+002.23E+051.75E+083.19E+104.82E+002.41E+051.14E+097.23E+11 - 64M3 9.542.03E+001.44E+045.58E+066.92E+089.23E-011.60E+042.78E+078.34E+09 - 64M3 16.544.46E-019.04E+021.81E+051.47E+071.73E-011.03E+036.83E+051.03E+08 - 64M3 26.001.16E-019.33E+011.12E+046.31E+054.37E-021.08E+023.43E+043.08E+06 - 64M3 41.002.80E-029.53E+006.95E+022.68E+041.10E-021.13E+011.79E+039.88E+04 - 64M3 53.001.22E-022.65E+001.47E+024.54E+035.07E-033.16E+003.50E+021.49E+04 - 64M3 71.004.65E-036.18E-012.51E+016.03E+022.10E-037.47E-015.61E+011.79E+03 - 64M3 104.001.30E-039.37E-022.55E+004.38E+016.69E-041.15E-015.42E+001.21E+02 - 64M3 150.003.80E-041.56E-022.90E-013.62E+002.25E-041.94E-026.10E-019.89E+00 - 64M3 280.004.88E-057.96E-047.75E-035.66E-023.61E-059.94E-041.70E-021.68E-01 - 64M3 500.008.17E-065.93E-053.22E-041.48E-037.05E-067.09E-057.31E-044.87E-03 - 64M4 2.229.53E+013.45E+052.38E+103.58E+141.52E+013.59E+053.93E+093.81E+12 - 64M4 3.222.96E+015.14E+041.74E+091.38E+134.55E+005.55E+043.20E+082.31E+11 - 64M4 5.225.85E+004.36E+035.79E+072.10E+119.21E-014.88E+031.27E+076.13E+09 - 64M4 9.227.57E-012.40E+021.05E+061.62E+091.35E-012.77E+023.05E+058.85E+07 - 64M4 16.228.75E-021.32E+011.94E+041.39E+071.92E-021.59E+017.96E+031.38E+06 - 64M4 26.001.32E-021.15E+007.01E+022.72E+053.59E-031.46E+003.97E+024.43E+04 - 64M4 41.002.01E-031.07E-012.88E+016.43E+036.91E-041.46E-012.28E+011.67E+03 - 64M4 53.006.79E-042.79E-024.82E+007.96E+022.69E-044.01E-024.63E+002.66E+02 - 64M4 71.001.95E-046.03E-036.39E-017.52E+019.08E-059.20E-037.63E-013.35E+01 - 64M4 104.003.81E-058.21E-044.70E-023.60E+002.16E-051.35E-037.44E-022.30E+00 - 64M4 150.007.95E-061.24E-044.02E-032.05E-015.40E-062.17E-048.19E-031.83E-01 - 64M4 280.005.75E-075.35E-067.15E-051.82E-035.00E-079.98E-062.06E-042.75E-03 - 64M4 500.005.79E-083.37E-072.21E-062.93E-055.54E-086.05E-077.57E-066.56E-05 - 64M5 2.181.43E+024.36E+054.13E+105.69E+149.23E+003.51E+042.00E+101.23E+15 - 64M5 3.184.34E+016.30E+042.92E+092.10E+132.73E+005.37E+031.43E+094.26E+13 - 64M5 5.188.33E+005.19E+039.42E+073.05E+115.52E-014.72E+024.74E+075.56E+11 - 64M5 9.181.05E+002.78E+021.66E+062.25E+098.21E-022.74E+018.70E+053.54E+09 - 64M5 16.181.18E-011.49E+013.00E+041.84E+071.19E-021.65E+001.66E+042.49E+07 - 64M5 26.001.74E-021.25E+001.04E+033.44E+052.29E-031.59E-016.10E+024.18E+05 - 64M5 41.002.59E-031.13E-014.14E+017.74E+034.55E-041.70E-022.56E+018.73E+03 - 64M5 53.008.68E-042.87E-026.74E+009.25E+021.81E-044.87E-034.31E+001.02E+03 - 64M5 71.002.47E-046.00E-038.58E-018.31E+016.26E-051.18E-035.69E-019.04E+01 - 64M5 104.004.77E-057.78E-045.91E-023.66E+001.55E-051.91E-044.10E-024.03E+00 - 64M5 150.009.89E-061.11E-044.64E-031.88E-014.07E-063.40E-053.36E-032.16E-01 - 64M5 280.007.36E-074.48E-066.74E-051.30E-034.29E-071.99E-065.18E-051.69E-03 - 64M5 500.008.04E-082.89E-071.70E-061.56E-055.89E-081.70E-071.34E-062.24E-05 - 64N+ 50.001.57E-021.82E+001.17E+024.62E+031.19E-015.17E+002.38E+029.29E+03 - 64N+ 70.006.05E-033.58E-011.55E+014.34E+024.41E-021.17E+003.27E+018.46E+02 - 64N+ 100.002.27E-036.91E-021.97E+003.87E+011.59E-022.64E-014.53E+007.68E+01 - 64N+ 150.007.35E-041.13E-021.97E-012.62E+004.98E-035.11E-025.32E-015.71E+00 - 64N+ 200.003.32E-043.35E-034.08E-024.12E-012.20E-031.68E-021.27E-011.00E+00 - 64N+ 500.003.19E-051.24E-045.31E-042.26E-031.81E-046.76E-042.30E-037.98E-03 - 65K 53.001.33E+002.63E+009.90E-011.21E-011.19E+011.67E+024.07E+022.17E+02 - 65K 53.701.29E+002.71E+001.38E+003.27E-011.15E+011.59E+024.14E+022.98E+02 - 65K 55.001.21E+002.81E+002.10E+009.71E-011.07E+011.45E+024.15E+024.37E+02 - 65K 58.201.05E+002.91E+003.68E+003.65E+009.07E+001.18E+024.00E+027.08E+02 - 65K 62.008.89E-012.86E+005.07E+007.71E+007.54E+009.33E+013.63E+028.92E+02 - 65K 66.007.56E-012.70E+005.93E+001.17E+016.28E+007.40E+013.17E+029.58E+02 - 65K 72.006.03E-012.39E+006.39E+001.59E+014.88E+005.37E+012.51E+029.16E+02 - 65K 80.004.57E-011.96E+006.08E+001.80E+013.59E+003.64E+011.82E+027.59E+02 - 65K 92.003.16E-011.43E+004.96E+001.67E+012.40E+002.18E+011.13E+025.17E+02 - 65K 105.002.22E-011.02E+003.74E+001.34E+011.64E+001.35E+016.98E+013.31E+02 - 65K 122.001.49E-016.77E-012.54E+009.33E+001.07E+007.85E+003.96E+011.88E+02 - 65K 135.001.13E-015.07E-011.90E+006.99E+008.03E-015.47E+002.68E+011.25E+02 - 65K 152.008.27E-023.58E-011.33E+004.83E+005.75E-013.60E+001.69E+017.62E+01 - 65K 175.005.68E-022.36E-018.49E-013.02E+003.88E-012.20E+009.72E+004.18E+01 - 65K 200.003.99E-021.58E-015.50E-011.89E+002.68E-011.39E+005.77E+002.35E+01 - 65K 265.001.93E-026.82E-022.18E-016.89E-011.25E-015.40E-011.95E+006.94E+00 - 65K 350.009.64E-033.06E-028.90E-022.55E-015.96E-022.20E-016.90E-012.12E+00 - 65K 440.005.61E-031.64E-024.42E-021.17E-013.29E-021.08E-013.03E-018.29E-01 - 65K 550.003.40E-039.31E-032.33E-025.65E-021.86E-025.56E-021.40E-013.44E-01 - 65K 780.001.64E-034.14E-039.28E-031.99E-027.81E-032.06E-024.49E-029.44E-02 - 65K 1050.009.30E-042.21E-034.57E-038.91E-033.81E-039.27E-031.83E-023.43E-02 - 65K 1300.006.35E-041.45E-032.84E-035.21E-032.30E-035.35E-039.93E-031.74E-02 - 65K 1550.004.69E-041.03E-031.96E-033.42E-031.53E-033.45E-036.14E-031.02E-02 - 65L1 9.714.21E+009.72E+025.08E+043.88E+052.44E+029.65E+046.80E+061.09E+08 - 65L1 10.413.75E+006.73E+024.44E+046.00E+051.99E+026.93E+044.64E+068.96E+07 - 65L1 11.713.06E+003.55E+023.09E+046.92E+051.40E+023.97E+042.42E+065.65E+07 - 65L1 14.911.97E+008.81E+011.11E+043.92E+056.79E+011.28E+046.44E+051.74E+07 - 65L1 18.711.26E+002.11E+013.53E+031.49E+053.45E+014.46E+031.86E+055.01E+06 - 65L1 22.009.06E-017.12E+001.45E+036.52E+042.13E+012.13E+037.71E+041.99E+06 - 65L1 28.005.41E-011.47E+003.52E+021.67E+041.04E+017.15E+022.11E+044.87E+05 - 65L1 36.003.09E-015.74E-017.33E+013.57E+034.96E+002.35E+025.54E+031.11E+05 - 65L1 48.001.58E-014.05E-011.18E+015.54E+022.12E+006.73E+011.23E+032.02E+04 - 65L1 61.008.90E-022.92E-012.97E+001.14E+021.05E+002.43E+013.62E+024.97E+03 - 65L1 78.004.85E-021.84E-011.03E+002.35E+015.14E-018.79E+001.05E+021.20E+03 - 65L1 91.003.30E-021.31E-016.18E-019.44E+003.29E-014.70E+004.94E+014.99E+02 - 65L1 108.002.14E-028.69E-023.74E-013.79E+002.01E-012.38E+002.16E+011.90E+02 - 65L1 131.001.31E-025.28E-022.15E-011.54E+001.16E-011.12E+008.65E+006.55E+01 - 65L1 160.007.84E-033.08E-021.20E-016.69E-016.60E-025.24E-013.44E+002.23E+01 - 65L1 225.003.30E-031.19E-024.27E-021.82E-012.57E-021.51E-017.58E-013.78E+00 - 65L1 310.001.50E-034.93E-031.60E-025.68E-021.08E-024.96E-021.98E-017.80E-01 - 65L1 400.008.23E-042.51E-037.46E-032.33E-025.51E-032.14E-027.20E-022.39E-01 - 65L1 510.004.78E-041.36E-033.72E-031.04E-022.94E-039.96E-032.89E-028.25E-02 - 65L1 740.002.19E-045.75E-041.38E-033.27E-031.15E-033.30E-037.91E-031.83E-02 - 65L11000.001.24E-043.03E-046.67E-041.40E-035.53E-041.43E-033.01E-036.09E-03 - 65L11500.006.02E-051.37E-042.70E-044.95E-042.12E-044.95E-049.18E-041.60E-03 - 65L2 9.258.78E+005.54E+041.53E+075.09E+082.73E+013.98E+039.71E+046.73E+05 - 65L2 9.957.19E+003.85E+041.00E+073.99E+082.18E+013.00E+038.78E+041.05E+06 - 65L2 11.255.10E+002.09E+044.89E+062.33E+081.50E+011.86E+036.53E+041.25E+06 - 65L2 14.452.49E+006.00E+031.13E+066.18E+077.03E+007.03E+022.82E+047.86E+05 - 65L2 18.251.25E+001.89E+032.89E+051.56E+073.46E+002.82E+021.12E+043.42E+05 - 65L2 22.007.15E-017.50E+029.68E+044.93E+061.97E+001.36E+025.11E+031.54E+05 - 65L2 28.003.41E-012.29E+022.37E+041.07E+069.49E-015.28E+011.78E+034.99E+04 - 65L2 36.001.55E-016.73E+015.47E+032.14E+054.45E-011.97E+015.75E+021.43E+04 - 65L2 48.006.22E-021.67E+011.04E+033.32E+041.88E-016.43E+001.55E+023.23E+03 - 65L2 61.002.87E-025.31E+002.61E+027.02E+039.16E-022.54E+005.13E+019.12E+02 - 65L2 78.001.29E-021.65E+006.45E+011.43E+034.40E-029.83E-011.65E+012.46E+02 - 65L2 91.007.78E-038.02E-012.70E+015.31E+022.79E-025.44E-018.12E+001.08E+02 - 65L2 108.004.44E-033.61E-011.04E+011.78E+021.68E-022.83E-013.70E+004.32E+01 - 65L2 131.002.36E-031.49E-013.57E+005.24E+019.50E-031.36E-011.53E+001.55E+01 - 65L2 160.001.23E-036.00E-021.20E+001.50E+015.28E-036.42E-026.20E-015.38E+00 - 65L2 225.004.09E-041.32E-021.96E-011.88E+001.95E-031.82E-021.36E-019.15E-01 - 65L2 310.001.49E-043.34E-033.77E-022.84E-017.73E-045.69E-033.37E-021.81E-01 - 65L2 400.006.84E-051.17E-031.07E-026.72E-023.72E-042.30E-031.15E-025.19E-02 - 65L2 510.003.32E-054.43E-043.38E-031.80E-021.86E-049.93E-044.24E-031.64E-02 - 65L2 740.001.15E-051.08E-046.37E-042.68E-036.51E-052.83E-049.80E-043.06E-03 - 65L21000.005.10E-063.73E-051.81E-046.45E-042.80E-051.06E-043.18E-048.53E-04 - 65L21500.001.81E-069.80E-063.79E-051.11E-049.09E-063.00E-057.57E-051.72E-04 - 65L3 8.511.88E+011.23E+053.91E+071.47E+096.39E+001.30E+052.50E+085.05E+10 - 65L3 9.211.50E+018.26E+042.44E+071.09E+095.01E+008.73E+041.47E+082.75E+10 - 65L3 10.511.02E+014.23E+041.10E+075.77E+083.34E+004.52E+045.99E+079.99E+09 - 65L3 13.714.62E+001.10E+042.22E+061.29E+081.48E+001.20E+041.00E+071.31E+09 - 65L3 17.512.18E+003.21E+035.09E+052.86E+076.96E-013.55E+031.96E+062.06E+08 - 65L3 22.001.07E+001.01E+031.29E+056.62E+063.46E-011.14E+034.35E+053.70E+07 - 65L3 28.004.94E-013.01E+023.00E+041.36E+061.65E-013.43E+028.99E+046.12E+06 - 65L3 36.002.18E-018.49E+016.59E+032.53E+057.67E-029.85E+011.77E+049.57E+05 - 65L3 48.008.39E-022.01E+011.17E+033.63E+043.19E-022.36E+012.83E+031.18E+05 - 65L3 61.003.75E-026.05E+002.76E+027.14E+031.54E-027.23E+006.28E+022.11E+04 - 65L3 78.001.63E-021.78E+006.31E+011.34E+037.32E-032.15E+001.37E+023.71E+03 - 65L3 91.009.64E-038.29E-012.51E+014.69E+024.60E-031.01E+005.35E+011.27E+03 - 65L3 108.005.38E-033.56E-019.04E+001.46E+022.75E-034.37E-011.90E+013.88E+02 - 65L3 131.002.79E-031.38E-012.88E+003.95E+011.54E-031.71E-016.01E+001.04E+02 - 65L3 160.001.41E-035.19E-028.84E-011.02E+018.48E-046.49E-021.86E+002.74E+01 - 65L3 225.004.53E-041.01E-021.21E-011.05E+003.10E-041.27E-022.61E-012.95E+00 - 65L3 310.001.60E-042.25E-031.95E-021.29E-011.22E-042.82E-034.34E-023.89E-01 - 65L3 400.007.21E-057.08E-044.76E-032.57E-025.91E-058.76E-041.08E-028.17E-02 - 65L3 510.003.47E-052.45E-041.30E-035.82E-033.01E-052.96E-042.97E-031.93E-02 - 65L3 740.001.20E-055.37E-052.01E-046.87E-041.11E-056.05E-054.37E-042.29E-03 - 65L31000.005.48E-061.75E-055.04E-051.41E-045.24E-061.84E-059.90E-054.41E-04 - 65L31500.002.15E-064.59E-069.72E-062.12E-052.07E-064.49E-061.51E-055.35E-05 - 65M1 2.976.35E+002.48E+041.46E+063.19E+081.83E+037.65E+065.61E+099.26E+11 - 65M1 3.974.49E+007.50E+035.90E+054.29E+077.67E+021.84E+068.55E+081.23E+11 - 65M1 5.972.42E+001.27E+031.56E+055.67E+062.26E+022.50E+056.37E+077.10E+09 - 65M1 9.979.73E-011.10E+021.84E+049.80E+054.87E+012.11E+042.68E+062.02E+08 - 65M1 16.973.38E-016.18E+001.32E+037.68E+049.97E+001.71E+031.12E+055.43E+06 - 65M1 26.001.35E-015.50E-011.24E+026.90E+032.80E+002.39E+029.66E+033.22E+05 - 65M1 41.004.80E-021.32E-018.26E+004.17E+027.28E-013.13E+017.77E+021.73E+04 - 65M1 53.002.61E-028.50E-021.84E+008.03E+013.42E-011.03E+011.96E+023.47E+03 - 65M1 71.001.28E-024.86E-024.21E-011.24E+011.46E-012.98E+004.28E+015.83E+02 - 65M1 104.004.91E-032.01E-021.01E-011.32E+004.83E-026.27E-016.29E+006.15E+01 - 65M1 150.001.94E-037.71E-033.25E-022.23E-011.71E-021.50E-011.09E+007.80E+00 - 65M1 280.004.06E-041.38E-034.72E-031.86E-023.06E-031.55E-026.82E-022.98E-01 - 65M1 500.001.06E-043.04E-048.50E-042.44E-036.66E-042.31E-036.91E-032.02E-02 - 65M2 2.771.48E+015.10E+061.14E+103.07E+122.31E+022.73E+055.38E+073.26E+09 - 65M2 3.779.02E+001.09E+061.53E+093.58E+119.13E+016.75E+041.15E+079.44E+08 - 65M2 5.773.88E+001.30E+051.00E+081.82E+102.53E+011.02E+041.36E+061.15E+08 - 65M2 9.771.15E+009.42E+033.69E+064.64E+085.17E+001.06E+039.80E+046.81E+06 - 65M2 16.772.80E-016.48E+021.34E+051.12E+071.02E+001.11E+026.83E+033.45E+05 - 65M2 26.008.10E-027.52E+019.58E+035.63E+052.73E-011.85E+018.07E+022.99E+04 - 65M2 41.002.08E-028.24E+006.48E+022.61E+046.98E-022.99E+008.99E+012.36E+03 - 65M2 53.009.44E-032.40E+001.45E+024.71E+033.25E-021.08E+002.64E+015.66E+02 - 65M2 71.003.76E-035.99E-012.69E+016.83E+021.36E-023.46E-016.60E+001.12E+02 - 65M2 104.001.11E-031.01E-013.10E+005.71E+014.41E-037.92E-021.10E+001.38E+01 - 65M2 150.003.42E-041.89E-024.11E-015.57E+001.51E-031.97E-022.05E-011.92E+00 - 65M2 280.004.75E-051.22E-031.52E-021.25E-012.46E-041.97E-031.27E-027.41E-02 - 65M2 500.008.26E-061.14E-048.91E-044.84E-034.68E-052.54E-041.11E-034.38E-03 - 65M3 2.613.63E+011.07E+072.58E+107.17E+125.13E+011.17E+072.39E+115.00E+14 - 65M3 3.612.00E+012.11E+063.08E+097.23E+111.92E+012.33E+062.53E+103.14E+13 - 65M3 5.617.72E+002.29E+051.78E+083.18E+105.03E+002.57E+051.21E+097.70E+11 - 65M3 9.612.05E+001.52E+045.85E+067.13E+089.77E-011.75E+043.07E+079.21E+09 - 65M3 16.614.58E-019.68E+021.93E+051.55E+071.85E-011.14E+037.67E+051.16E+08 - 65M3 26.001.22E-011.02E+021.22E+046.83E+054.73E-021.23E+023.95E+043.56E+06 - 65M3 41.002.95E-021.04E+017.58E+022.90E+041.19E-021.28E+012.05E+031.14E+05 - 65M3 53.001.29E-022.89E+001.60E+024.91E+035.48E-033.58E+004.00E+021.70E+04 - 65M3 71.004.93E-036.76E-012.74E+016.53E+022.27E-038.45E-016.41E+012.05E+03 - 65M3 104.001.38E-031.02E-012.78E+004.75E+017.24E-041.30E-016.17E+001.38E+02 - 65M3 150.004.06E-041.71E-023.16E-013.93E+002.44E-042.19E-026.92E-011.12E+01 - 65M3 280.005.23E-058.71E-048.47E-036.17E-023.92E-051.12E-031.93E-021.90E-01 - 65M3 500.008.80E-066.48E-053.53E-041.61E-037.63E-067.92E-058.24E-045.49E-03 - 65M4 2.279.21E+013.31E+052.24E+103.31E+141.53E+013.61E+053.86E+093.63E+12 - 65M4 3.272.95E+015.15E+041.73E+091.37E+134.70E+005.80E+043.30E+082.34E+11 - 65M4 5.275.99E+004.53E+036.06E+072.21E+119.76E-015.28E+031.38E+076.52E+09 - 65M4 9.277.95E-012.55E+021.13E+061.77E+091.46E-013.07E+023.39E+059.74E+07 - 65M4 16.279.36E-021.43E+012.15E+041.55E+072.09E-021.79E+018.99E+031.55E+06 - 65M4 26.001.44E-021.27E+007.94E+023.12E+053.99E-031.68E+004.58E+025.10E+04 - 65M4 41.002.21E-031.19E-013.27E+017.37E+037.71E-041.68E-012.63E+011.91E+03 - 65M4 53.007.50E-043.11E-025.47E+009.12E+023.00E-044.61E-025.34E+003.06E+02 - 65M4 71.002.16E-046.74E-037.25E-018.62E+011.02E-041.06E-028.80E-013.85E+01 - 65M4 104.004.20E-059.22E-045.34E-024.12E+002.43E-051.56E-038.58E-022.65E+00 - 65M4 150.008.78E-061.39E-044.57E-032.35E-016.08E-062.50E-049.46E-032.11E-01 - 65M4 280.006.55E-076.08E-068.14E-052.10E-035.64E-071.15E-052.39E-043.18E-03 - 65M4 500.006.15E-083.82E-072.51E-063.37E-056.26E-086.97E-078.76E-067.59E-05 - 65M5 2.241.38E+024.16E+053.92E+105.27E+149.27E+003.47E+041.96E+101.19E+15 - 65M5 3.244.32E+016.26E+042.93E+092.08E+132.81E+005.52E+031.49E+094.39E+13 - 65M5 5.248.52E+005.34E+039.90E+073.20E+115.82E-015.02E+025.16E+076.08E+11 - 65M5 9.241.10E+002.93E+021.80E+062.46E+098.82E-022.98E+019.79E+054.03E+09 - 65M5 16.241.26E-011.60E+013.32E+042.05E+071.30E-021.81E+001.91E+042.90E+07 - 65M5 26.001.89E-021.37E+001.18E+033.94E+052.52E-031.77E-017.15E+024.98E+05 - 65M5 41.002.84E-031.24E-014.70E+018.85E+035.03E-041.90E-023.00E+011.04E+04 - 65M5 53.009.54E-043.16E-027.67E+001.06E+032.00E-045.45E-035.05E+001.21E+03 - 65M5 71.002.73E-046.63E-039.76E-019.50E+016.95E-051.33E-036.66E-011.07E+02 - 65M5 104.005.31E-058.63E-046.72E-024.18E+001.73E-052.13E-044.79E-024.76E+00 - 65M5 150.001.11E-051.24E-045.28E-032.14E-014.54E-063.81E-053.92E-032.54E-01 - 65M5 280.008.22E-074.99E-067.66E-051.49E-034.80E-072.23E-066.01E-051.98E-03 - 65M5 500.008.78E-083.21E-071.92E-061.78E-056.58E-081.91E-071.54E-062.61E-05 - 65N+ 50.001.61E-021.97E+001.26E+024.96E+031.30E-015.70E+002.65E+021.04E+04 - 65N+ 70.006.22E-033.86E-011.68E+014.67E+024.81E-021.29E+003.63E+019.43E+02 - 65N+ 100.002.34E-037.43E-022.13E+004.18E+011.74E-022.89E-015.01E+008.52E+01 - 65N+ 150.007.59E-041.21E-022.13E-012.84E+005.43E-035.59E-025.85E-016.30E+00 - 65N+ 200.003.43E-043.57E-034.41E-024.46E-012.40E-031.83E-021.39E-011.10E+00 - 65N+ 500.003.30E-051.30E-045.66E-042.43E-031.95E-047.28E-042.48E-038.63E-03 - 66K 54.791.24E+002.35E+008.45E-019.50E-021.18E+011.58E+023.71E+021.89E+02 - 66K 55.491.21E+002.44E+001.18E+002.56E-011.14E+011.52E+023.79E+022.60E+02 - 66K 56.791.13E+002.51E+001.77E+007.64E-011.06E+011.39E+023.79E+023.77E+02 - 66K 59.999.85E-012.61E+003.11E+002.89E+009.05E+001.13E+023.67E+026.14E+02 - 66K 63.798.42E-012.58E+004.31E+006.17E+007.56E+009.02E+013.35E+027.79E+02 - 66K 68.007.14E-012.44E+005.11E+009.65E+006.28E+007.13E+012.93E+028.46E+02 - 66K 74.005.73E-012.17E+005.54E+001.32E+014.91E+005.22E+012.35E+028.18E+02 - 66K 82.004.38E-011.79E+005.34E+001.51E+013.65E+003.58E+011.72E+026.87E+02 - 66K 94.003.06E-011.32E+004.43E+001.43E+012.46E+002.17E+011.08E+024.78E+02 - 66K 107.002.17E-019.57E-013.39E+001.17E+011.69E+001.36E+016.80E+013.11E+02 - 66K 124.001.46E-016.43E-012.34E+008.34E+001.11E+007.99E+003.91E+011.80E+02 - 66K 137.001.12E-014.85E-011.77E+006.34E+008.39E-015.60E+002.67E+011.21E+02 - 66K 154.008.22E-023.46E-011.25E+004.44E+006.04E-013.70E+001.70E+017.47E+01 - 66K 177.005.69E-022.30E-018.10E-012.82E+004.09E-012.28E+009.87E+004.15E+01 - 66K 205.003.86E-021.48E-015.06E-011.71E+002.73E-011.38E+005.58E+002.21E+01 - 66K 270.001.90E-026.59E-022.07E-016.45E-011.29E-015.47E-011.94E+006.75E+00 - 66K 355.009.68E-033.02E-028.70E-022.47E-016.23E-022.27E-017.00E-012.12E+00 - 66K 440.005.84E-031.70E-024.55E-021.20E-013.56E-021.17E-013.24E-018.81E-01 - 66K 550.003.55E-039.67E-032.41E-025.85E-022.01E-025.99E-021.50E-013.66E-01 - 66K 780.001.72E-034.32E-039.71E-032.08E-028.43E-032.22E-024.82E-021.01E-01 - 66K 1050.009.74E-042.32E-034.81E-039.36E-034.10E-039.98E-031.96E-023.66E-02 - 66K 1300.006.65E-041.52E-033.00E-035.49E-032.47E-035.75E-031.06E-021.86E-02 - 66K 1550.004.91E-041.09E-032.06E-033.61E-031.64E-033.70E-036.58E-031.09E-02 - 66L1 10.053.93E+009.00E+024.46E+043.11E+052.43E+029.16E+046.20E+069.46E+07 - 66L1 10.753.52E+006.32E+023.94E+044.92E+051.99E+026.66E+044.29E+067.88E+07 - 66L1 12.052.89E+003.41E+022.79E+045.84E+051.41E+023.88E+042.29E+065.08E+07 - 66L1 15.251.88E+008.91E+011.05E+043.49E+056.99E+011.28E+046.28E+051.63E+07 - 66L1 19.051.22E+002.25E+013.46E+031.39E+053.60E+014.58E+031.86E+054.85E+06 - 66L1 23.008.31E-016.49E+001.24E+035.35E+042.06E+011.93E+036.69E+041.66E+06 - 66L1 29.005.07E-011.47E+003.20E+021.45E+041.03E+016.79E+021.93E+044.29E+05 - 66L1 37.002.94E-015.62E-017.13E+013.29E+035.03E+002.31E+025.28E+031.02E+05 - 66L1 49.001.54E-013.78E-011.22E+015.44E+022.20E+006.81E+011.22E+031.95E+04 - 66L1 62.008.74E-022.73E-013.16E+001.17E+021.10E+002.51E+013.66E+024.93E+03 - 66L1 79.004.82E-021.75E-011.07E+002.50E+015.44E-019.20E+001.09E+021.22E+03 - 66L1 92.003.29E-021.26E-016.27E-011.01E+013.50E-014.96E+005.14E+015.11E+02 - 66L1 109.002.15E-028.43E-023.74E-014.05E+002.15E-012.52E+002.26E+011.97E+02 - 66L1 132.001.32E-025.19E-022.14E-011.62E+001.25E-011.20E+009.15E+006.85E+01 - 66L1 160.008.11E-033.11E-021.22E-017.16E-017.25E-025.76E-013.76E+002.43E+01 - 66L1 225.003.43E-031.22E-024.38E-021.92E-012.82E-021.65E-018.28E-014.11E+00 - 66L1 310.001.56E-035.09E-031.66E-025.97E-021.18E-025.43E-022.16E-018.49E-01 - 66L1 400.008.60E-042.61E-037.78E-032.45E-026.03E-032.34E-027.85E-022.60E-01 - 66L1 510.005.00E-041.42E-033.91E-031.09E-023.21E-031.09E-023.15E-028.96E-02 - 66L1 740.002.31E-046.05E-041.46E-033.47E-031.26E-033.59E-038.60E-031.99E-02 - 66L11000.001.30E-043.21E-047.08E-041.49E-036.01E-041.55E-033.27E-036.60E-03 - 66L11500.006.34E-051.45E-042.87E-045.28E-042.29E-045.37E-049.96E-041.74E-03 - 66L2 9.588.22E+005.08E+041.35E+074.25E+082.71E+013.77E+038.72E+045.53E+05 - 66L2 10.286.78E+003.58E+048.94E+063.38E+082.19E+012.87E+037.96E+048.84E+05 - 66L2 11.584.86E+001.97E+044.46E+062.03E+081.52E+011.81E+036.02E+041.08E+06 - 66L2 14.782.43E+005.86E+031.08E+065.61E+077.27E+007.01E+022.69E+047.12E+05 - 66L2 18.581.24E+001.89E+032.82E+051.47E+073.63E+002.87E+021.10E+043.21E+05 - 66L2 23.006.54E-016.59E+028.10E+043.95E+061.90E+001.25E+024.49E+031.30E+05 - 66L2 29.003.22E-012.11E+022.10E+049.16E+059.46E-015.03E+011.63E+034.40E+04 - 66L2 37.001.50E-016.44E+015.08E+031.92E+054.54E-011.94E+015.47E+021.32E+04 - 66L2 49.006.16E-021.66E+011.00E+033.13E+041.96E-016.51E+001.52E+023.10E+03 - 66L2 62.002.89E-025.38E+002.60E+026.83E+039.69E-022.62E+005.17E+018.98E+02 - 66L2 79.001.32E-021.71E+006.56E+011.43E+034.71E-021.03E+001.70E+012.48E+02 - 66L2 92.008.01E-038.36E-012.78E+015.39E+023.00E-025.75E-018.43E+001.10E+02 - 66L2 109.004.61E-033.80E-011.08E+011.83E+021.82E-023.01E-013.88E+004.47E+01 - 66L2 132.002.47E-031.58E-013.76E+005.46E+011.04E-021.46E-011.62E+001.62E+01 - 66L2 160.001.32E-036.60E-021.32E+001.64E+015.89E-037.10E-026.81E-015.88E+00 - 66L2 225.004.42E-041.46E-022.15E-012.06E+002.18E-032.02E-021.49E-011.00E+00 - 66L2 310.001.62E-043.69E-034.17E-023.13E-018.66E-046.33E-033.73E-021.99E-01 - 66L2 400.007.42E-051.29E-031.19E-027.42E-024.17E-042.57E-031.27E-025.73E-02 - 66L2 510.003.62E-054.90E-043.75E-031.99E-022.09E-041.11E-034.71E-031.82E-02 - 66L2 740.001.27E-051.20E-047.08E-042.98E-037.32E-053.17E-041.09E-033.40E-03 - 66L21000.005.59E-064.14E-052.01E-047.18E-043.15E-051.19E-043.55E-049.51E-04 - 66L21500.001.97E-061.09E-054.23E-051.24E-041.02E-053.37E-058.48E-051.92E-04 - 66L3 8.791.77E+011.14E+053.47E+071.25E+096.22E+001.24E+052.31E+084.50E+10 - 66L3 9.491.42E+017.71E+042.19E+079.33E+084.91E+008.46E+041.37E+082.50E+10 - 66L3 10.799.75E+004.02E+041.01E+075.07E+083.31E+004.45E+045.76E+079.32E+09 - 66L3 13.994.51E+001.08E+042.12E+061.19E+081.49E+001.22E+041.00E+071.28E+09 - 66L3 17.792.16E+003.21E+034.99E+052.72E+077.13E-013.68E+032.02E+062.08E+08 - 66L3 23.009.67E-018.78E+021.06E+055.23E+063.24E-011.03E+033.70E+053.01E+07 - 66L3 29.004.61E-012.73E+022.62E+041.14E+061.59E-013.24E+028.14E+045.34E+06 - 66L3 37.002.08E-018.02E+016.02E+032.24E+057.58E-029.64E+011.69E+048.86E+05 - 66L3 49.008.23E-021.96E+011.11E+033.37E+043.22E-022.39E+012.81E+031.15E+05 - 66L3 62.003.73E-026.05E+002.70E+026.83E+031.58E-027.48E+006.42E+022.12E+04 - 66L3 79.001.65E-021.81E+006.32E+011.32E+037.57E-032.27E+001.43E+023.82E+03 - 66L3 92.009.81E-038.51E-012.54E+014.67E+024.78E-031.07E+005.65E+011.32E+03 - 66L3 109.005.52E-033.68E-019.25E+001.48E+022.87E-034.68E-012.03E+014.09E+02 - 66L3 132.002.88E-031.44E-012.97E+004.03E+011.62E-031.84E-016.47E+001.11E+02 - 66L3 160.001.50E-035.63E-029.56E-011.10E+019.12E-047.25E-022.08E+003.07E+01 - 66L3 225.004.82E-041.09E-021.31E-011.13E+003.33E-041.42E-022.92E-013.30E+00 - 66L3 310.001.71E-042.44E-032.11E-021.40E-011.31E-043.14E-034.86E-024.35E-01 - 66L3 400.007.68E-057.67E-045.16E-032.78E-026.35E-059.73E-041.21E-029.12E-02 - 66L3 510.003.70E-052.66E-041.41E-036.30E-033.23E-053.27E-043.31E-032.15E-02 - 66L3 740.001.30E-055.81E-052.17E-047.44E-041.19E-056.66E-054.86E-042.55E-03 - 66L31000.005.85E-061.89E-055.45E-051.53E-045.61E-062.02E-051.10E-044.90E-04 - 66L31500.002.30E-064.94E-061.05E-052.30E-052.21E-064.88E-061.67E-055.93E-05 - 66M1 3.056.02E+002.42E+041.44E+062.79E+081.87E+037.60E+065.44E+098.70E+11 - 66M1 4.054.31E+007.51E+035.80E+054.18E+078.00E+021.88E+068.64E+081.21E+11 - 66M1 6.052.36E+001.31E+031.55E+055.57E+062.40E+022.65E+056.70E+077.32E+09 - 66M1 10.059.63E-011.19E+021.90E+049.75E+055.27E+012.29E+042.90E+062.15E+08 - 66M1 17.053.39E-017.16E+001.42E+037.96E+041.09E+011.88E+031.23E+055.90E+06 - 66M1 26.001.37E-016.59E-011.40E+027.54E+033.10E+002.68E+021.08E+043.60E+05 - 66M1 41.004.91E-021.33E-019.69E+004.69E+028.06E-013.49E+018.68E+021.92E+04 - 66M1 53.002.68E-028.34E-022.17E+009.18E+013.78E-011.14E+012.19E+023.85E+03 - 66M1 71.001.31E-024.78E-024.78E-011.44E+011.61E-013.31E+004.75E+016.46E+02 - 66M1 104.005.08E-032.01E-021.08E-011.51E+005.34E-026.95E-016.97E+006.79E+01 - 66M1 150.002.01E-037.82E-033.36E-022.45E-011.88E-021.66E-011.20E+008.60E+00 - 66M1 280.004.25E-041.42E-034.93E-031.98E-023.37E-031.71E-027.50E-023.27E-01 - 66M1 500.001.11E-043.20E-048.98E-042.60E-037.31E-042.54E-037.57E-032.22E-02 - 66M2 2.841.41E+014.90E+061.07E+102.78E+122.37E+022.71E+055.16E+072.91E+09 - 66M2 3.848.70E+001.09E+061.50E+093.41E+119.58E+016.92E+041.15E+078.93E+08 - 66M2 5.843.83E+001.34E+051.03E+081.82E+102.71E+011.08E+041.40E+061.14E+08 - 66M2 9.841.16E+009.98E+033.89E+064.81E+085.63E+001.14E+031.04E+057.03E+06 - 66M2 16.842.88E-016.98E+021.44E+051.19E+071.12E+001.21E+027.33E+033.64E+05 - 66M2 26.008.51E-028.28E+011.06E+046.15E+053.04E-012.05E+018.85E+023.25E+04 - 66M2 41.002.21E-029.08E+007.14E+022.86E+047.80E-023.31E+009.88E+012.57E+03 - 66M2 53.001.00E-022.65E+001.60E+025.17E+033.63E-021.20E+002.90E+016.18E+02 - 66M2 71.004.02E-036.62E-012.97E+017.50E+021.53E-023.83E-017.27E+001.23E+02 - 66M2 104.001.19E-031.11E-013.43E+006.28E+014.95E-038.80E-021.22E+001.52E+01 - 66M2 150.003.70E-042.09E-024.55E-016.14E+001.69E-032.20E-022.27E-012.11E+00 - 66M2 280.005.17E-051.35E-031.69E-021.39E-012.77E-042.20E-031.41E-028.22E-02 - 66M2 500.009.03E-061.27E-049.95E-045.39E-035.29E-052.86E-041.24E-034.88E-03 - 66M3 2.683.47E+011.04E+072.43E+106.52E+125.14E+011.18E+072.34E+114.79E+14 - 66M3 3.681.94E+012.10E+063.02E+096.90E+111.96E+012.41E+062.60E+103.18E+13 - 66M3 5.687.65E+002.36E+051.82E+083.17E+105.24E+002.75E+051.30E+098.21E+11 - 66M3 9.682.07E+001.61E+046.13E+067.35E+081.03E+001.92E+043.39E+071.02E+10 - 66M3 16.684.70E-011.04E+032.05E+051.63E+071.97E-011.27E+038.61E+051.30E+08 - 66M3 26.001.27E-011.11E+021.33E+047.38E+055.11E-021.39E+024.54E+044.10E+06 - 66M3 41.003.10E-021.14E+018.25E+023.13E+041.29E-021.44E+012.35E+031.30E+05 - 66M3 53.001.36E-023.16E+001.74E+025.31E+035.93E-034.05E+004.58E+021.95E+04 - 66M3 71.005.22E-037.38E-012.98E+017.07E+022.46E-039.55E-017.31E+012.33E+03 - 66M3 104.001.47E-031.12E-013.03E+005.15E+017.84E-041.46E-017.01E+001.57E+02 - 66M3 150.004.34E-041.87E-023.45E-014.26E+002.64E-042.46E-027.85E-011.27E+01 - 66M3 280.005.63E-059.53E-049.25E-036.71E-024.24E-051.25E-032.18E-022.14E-01 - 66M3 500.009.48E-067.08E-053.85E-041.76E-038.26E-068.84E-059.27E-046.18E-03 - 66M4 2.338.92E+013.20E+052.12E+103.07E+141.55E+013.63E+053.79E+093.45E+12 - 66M4 3.332.93E+015.17E+041.73E+091.36E+134.86E+006.07E+043.41E+082.36E+11 - 66M4 5.336.13E+004.70E+036.33E+072.32E+111.03E+005.71E+031.48E+076.92E+09 - 66M4 9.338.34E-012.72E+021.23E+061.93E+091.57E-013.41E+023.76E+051.07E+08 - 66M4 16.339.99E-021.55E+012.37E+041.72E+072.29E-022.02E+011.01E+041.73E+06 - 66M4 26.001.57E-021.41E+008.99E+023.58E+054.43E-031.92E+005.27E+025.85E+04 - 66M4 41.002.42E-031.32E-013.70E+018.44E+038.58E-041.93E-013.03E+012.20E+03 - 66M4 53.008.25E-043.47E-026.20E+001.04E+033.35E-045.29E-026.14E+003.51E+02 - 66M4 71.002.39E-047.54E-038.21E-019.86E+011.14E-041.21E-021.01E+004.42E+01 - 66M4 104.004.68E-051.03E-036.05E-024.72E+002.72E-051.79E-039.88E-023.05E+00 - 66M4 150.009.82E-061.57E-045.19E-032.69E-016.82E-062.88E-041.09E-022.43E-01 - 66M4 280.007.28E-076.87E-069.25E-052.40E-036.36E-071.32E-052.76E-043.67E-03 - 66M4 500.007.13E-084.36E-072.86E-063.87E-057.06E-088.02E-071.01E-058.78E-05 - 66M5 2.291.34E+024.00E+053.75E+104.94E+149.35E+003.45E+041.95E+101.15E+15 - 66M5 3.294.30E+016.25E+042.95E+092.08E+132.90E+005.68E+031.55E+094.56E+13 - 66M5 5.298.73E+005.50E+031.04E+083.37E+116.15E-015.33E+025.63E+076.67E+11 - 66M5 9.291.15E+003.09E+021.96E+062.68E+099.47E-023.23E+011.10E+064.59E+09 - 66M5 16.291.34E-011.71E+013.68E+042.28E+071.41E-021.99E+002.18E+043.36E+07 - 66M5 26.002.06E-021.50E+001.34E+034.50E+052.78E-031.98E-018.38E+025.94E+05 - 66M5 41.003.10E-031.36E-015.34E+011.01E+045.56E-042.13E-023.51E+011.23E+04 - 66M5 53.001.05E-033.48E-028.70E+001.21E+032.22E-046.09E-035.90E+001.43E+03 - 66M5 71.003.00E-047.32E-031.11E+001.08E+027.70E-051.48E-037.78E-011.27E+02 - 66M5 104.005.80E-059.55E-047.63E-024.76E+001.92E-052.39E-045.59E-025.61E+00 - 66M5 150.001.21E-051.37E-045.99E-032.44E-015.06E-064.26E-054.57E-032.99E-01 - 66M5 280.009.33E-075.59E-068.69E-051.70E-035.35E-072.50E-066.96E-052.32E-03 - 66M5 500.001.02E-073.52E-072.18E-062.02E-057.35E-082.14E-071.77E-063.05E-05 - 66N+ 50.001.68E-022.16E+001.39E+025.47E+031.44E-016.39E+003.02E+021.19E+04 - 66N+ 70.006.50E-034.24E-011.85E+015.15E+025.33E-021.44E+004.11E+011.07E+03 - 66N+ 100.002.45E-038.12E-022.35E+004.60E+011.92E-023.23E-015.63E+009.64E+01 - 66N+ 150.007.96E-041.32E-022.35E-013.12E+006.01E-036.22E-026.54E-017.08E+00 - 66N+ 200.003.62E-043.87E-034.85E-024.92E-012.65E-032.03E-021.55E-011.23E+00 - 66N+ 500.003.55E-051.42E-046.29E-042.73E-032.18E-048.15E-042.78E-039.71E-03 - 67K 56.621.16E+002.11E+007.25E-017.59E-021.17E+011.50E+023.40E+021.66E+02 - 67K 57.321.13E+002.18E+001.01E+002.04E-011.13E+011.45E+023.46E+022.26E+02 - 67K 58.621.06E+002.25E+001.50E+006.07E-011.05E+011.32E+023.47E+023.28E+02 - 67K 61.829.29E-012.34E+002.64E+002.30E+009.03E+001.09E+023.37E+025.34E+02 - 67K 65.627.98E-012.32E+003.67E+004.96E+007.59E+008.73E+013.10E+026.83E+02 - 67K 70.006.75E-012.20E+004.41E+007.95E+006.29E+006.88E+012.71E+027.50E+02 - 67K 76.005.46E-011.97E+004.81E+001.09E+014.95E+005.09E+012.20E+027.31E+02 - 67K 84.004.21E-011.64E+004.69E+001.27E+013.71E+003.53E+011.63E+026.24E+02 - 67K 96.002.96E-011.23E+003.95E+001.23E+012.52E+002.17E+011.04E+024.42E+02 - 67K 109.002.12E-018.99E-013.07E+001.03E+011.75E+001.37E+016.62E+012.93E+02 - 67K 126.001.44E-016.11E-012.15E+007.48E+001.16E+008.13E+003.86E+011.72E+02 - 67K 139.001.11E-014.65E-011.65E+005.76E+008.77E-015.73E+002.66E+011.17E+02 - 67K 156.008.18E-023.34E-011.18E+004.10E+006.34E-013.82E+001.70E+017.33E+01 - 67K 179.005.69E-022.24E-017.73E-012.64E+004.32E-012.36E+001.00E+014.12E+01 - 67K 205.003.99E-021.50E-015.04E-011.68E+002.97E-011.48E+005.93E+002.31E+01 - 67K 270.001.97E-026.72E-022.09E-016.46E-011.40E-015.90E-012.07E+007.12E+00 - 67K 355.001.00E-023.11E-028.89E-022.51E-016.76E-022.45E-017.48E-012.25E+00 - 67K 450.005.77E-031.66E-024.39E-021.14E-013.64E-021.17E-013.20E-018.56E-01 - 67K 560.003.56E-039.62E-032.38E-025.73E-022.08E-026.12E-021.51E-013.64E-01 - 67K 790.001.75E-034.40E-039.84E-032.10E-028.82E-032.31E-024.97E-021.03E-01 - 67K 1050.001.02E-032.43E-035.05E-039.84E-034.42E-031.07E-022.10E-023.92E-02 - 67K 1300.006.95E-041.60E-033.16E-035.79E-032.65E-036.18E-031.14E-021.99E-02 - 67K 1550.005.14E-041.14E-032.18E-033.82E-031.76E-033.98E-037.06E-031.17E-02 - 67L1 10.393.68E+008.34E+023.92E+042.54E+052.41E+028.71E+045.66E+068.26E+07 - 67L1 11.093.30E+005.94E+023.50E+044.07E+051.99E+026.39E+043.96E+066.94E+07 - 67L1 12.392.73E+003.28E+022.52E+044.95E+051.43E+023.78E+042.15E+064.57E+07 - 67L1 15.591.80E+008.97E+019.87E+033.11E+057.19E+011.29E+046.12E+051.52E+07 - 67L1 19.391.18E+002.38E+013.38E+031.29E+053.76E+014.69E+031.86E+054.68E+06 - 67L1 23.008.36E-017.93E+001.35E+035.56E+042.26E+012.15E+037.38E+041.78E+06 - 67L1 29.005.12E-011.79E+003.59E+021.55E+041.14E+017.54E+022.12E+044.64E+05 - 67L1 37.002.99E-015.98E-018.19E+013.60E+035.53E+002.56E+025.82E+031.11E+05 - 67L1 49.001.56E-013.65E-011.44E+016.09E+022.42E+007.54E+011.34E+032.13E+04 - 67L1 62.008.93E-022.64E-013.67E+001.33E+021.21E+002.77E+014.02E+025.37E+03 - 67L1 79.004.94E-021.71E-011.17E+002.86E+015.98E-011.01E+011.19E+021.33E+03 - 67L1 92.003.38E-021.24E-016.67E-011.15E+013.85E-015.46E+005.63E+015.57E+02 - 67L1 109.002.21E-028.37E-023.88E-014.55E+002.36E-012.78E+002.48E+012.15E+02 - 67L1 132.001.36E-025.20E-022.20E-011.78E+001.37E-011.32E+001.00E+017.46E+01 - 67L1 160.008.38E-033.14E-021.25E-017.70E-017.96E-026.32E-014.12E+002.64E+01 - 67L1 225.003.56E-031.25E-024.51E-022.02E-013.09E-021.81E-019.04E-014.48E+00 - 67L1 310.001.63E-035.25E-031.72E-026.28E-021.29E-025.94E-022.35E-019.24E-01 - 67L1 400.009.00E-042.71E-038.13E-032.59E-026.59E-032.56E-028.55E-022.83E-01 - 67L1 510.005.25E-041.49E-034.10E-031.16E-023.51E-031.19E-023.43E-029.73E-02 - 67L1 740.002.42E-046.37E-041.55E-033.69E-031.37E-033.91E-039.34E-032.16E-02 - 67L11000.001.37E-043.39E-047.51E-041.58E-036.53E-041.69E-033.55E-037.16E-03 - 67L11500.006.69E-051.54E-043.06E-045.64E-042.48E-045.82E-041.08E-031.88E-03 - 67L2 9.927.71E+004.67E+041.19E+073.57E+082.70E+013.58E+037.89E+044.62E+05 - 67L2 10.626.40E+003.32E+047.98E+062.88E+082.19E+012.75E+037.25E+047.50E+05 - 67L2 11.924.64E+001.87E+044.07E+061.76E+081.54E+011.76E+035.56E+049.39E+05 - 67L2 15.122.36E+005.73E+031.02E+065.11E+077.51E+006.99E+022.57E+046.46E+05 - 67L2 18.921.23E+001.89E+032.75E+051.38E+073.81E+002.91E+021.08E+043.02E+05 - 67L2 23.006.85E-017.20E+028.79E+044.19E+062.11E+001.36E+024.77E+031.34E+05 - 67L2 29.003.38E-012.31E+022.28E+049.78E+051.05E+005.50E+011.75E+034.61E+04 - 67L2 37.001.58E-017.05E+015.53E+032.06E+055.04E-012.13E+015.89E+021.39E+04 - 67L2 49.006.52E-021.81E+011.09E+033.38E+042.17E-017.14E+001.65E+023.30E+03 - 67L2 62.003.07E-025.89E+002.84E+027.39E+031.08E-012.88E+005.61E+019.64E+02 - 67L2 79.001.40E-021.87E+007.17E+011.55E+035.24E-021.13E+001.85E+012.68E+02 - 67L2 92.008.55E-039.17E-013.04E+015.85E+023.34E-026.33E-019.19E+001.19E+02 - 67L2 109.004.93E-034.17E-011.18E+011.99E+022.03E-023.32E-014.24E+004.84E+01 - 67L2 132.002.65E-031.73E-014.12E+005.95E+011.15E-021.61E-011.78E+001.76E+01 - 67L2 160.001.42E-037.26E-021.45E+001.80E+016.57E-037.85E-027.47E-016.40E+00 - 67L2 225.004.77E-041.61E-022.37E-012.26E+002.44E-032.23E-021.65E-011.10E+00 - 67L2 310.001.75E-044.08E-034.60E-023.44E-019.69E-047.03E-034.12E-022.19E-01 - 67L2 400.008.11E-051.43E-031.31E-028.19E-024.68E-042.86E-031.41E-026.31E-02 - 67L2 510.003.97E-055.43E-044.16E-032.20E-022.35E-041.23E-035.23E-032.01E-02 - 67L2 740.001.37E-051.33E-047.87E-043.31E-038.23E-053.55E-041.22E-033.78E-03 - 67L21000.006.13E-064.60E-052.24E-047.98E-043.55E-051.34E-043.96E-041.06E-03 - 67L21500.002.16E-061.21E-054.72E-051.38E-041.15E-053.78E-059.50E-052.14E-04 - 67L3 9.071.66E+011.05E+053.08E+071.06E+096.05E+001.19E+052.13E+084.02E+10 - 67L3 9.771.34E+017.19E+041.97E+078.05E+084.82E+008.20E+041.29E+082.27E+10 - 67L3 11.079.33E+003.82E+049.31E+064.47E+083.28E+004.39E+045.53E+078.70E+09 - 67L3 14.274.39E+001.06E+042.02E+061.09E+081.50E+001.24E+041.00E+071.25E+09 - 67L3 18.072.14E+003.21E+034.88E+052.57E+077.29E-013.82E+032.07E+062.09E+08 - 67L3 23.001.01E+009.50E+021.14E+055.51E+063.48E-011.15E+034.21E+053.41E+07 - 67L3 29.004.81E-012.96E+022.82E+041.21E+061.71E-013.63E+029.24E+046.04E+06 - 67L3 37.002.18E-018.68E+016.49E+032.38E+058.13E-021.08E+021.91E+041.00E+06 - 67L3 49.008.63E-022.12E+011.20E+033.60E+043.45E-022.68E+013.18E+031.29E+05 - 67L3 62.003.93E-026.55E+002.91E+027.30E+031.69E-028.38E+007.25E+022.39E+04 - 67L3 79.001.73E-021.96E+006.81E+011.41E+038.12E-032.54E+001.62E+024.29E+03 - 67L3 92.001.04E-029.21E-012.74E+015.00E+025.13E-031.20E+006.36E+011.48E+03 - 67L3 109.005.83E-033.99E-019.99E+001.58E+023.08E-035.23E-012.28E+014.59E+02 - 67L3 132.003.05E-031.56E-013.21E+004.33E+011.74E-032.06E-017.27E+001.25E+02 - 67L3 160.001.59E-036.10E-021.03E+001.18E+019.79E-048.10E-022.34E+003.43E+01 - 67L3 225.005.13E-041.18E-021.42E-011.22E+003.58E-041.58E-023.28E-013.69E+00 - 67L3 310.001.82E-042.64E-032.29E-021.51E-011.41E-043.50E-035.43E-024.85E-01 - 67L3 400.008.19E-058.31E-045.58E-033.00E-026.81E-051.08E-031.35E-021.02E-01 - 67L3 510.003.95E-052.88E-041.53E-036.81E-033.46E-053.62E-043.69E-032.39E-02 - 67L3 740.001.38E-056.28E-052.35E-048.05E-041.28E-057.33E-055.40E-042.84E-03 - 67L31000.006.26E-062.03E-055.90E-051.66E-046.01E-062.21E-051.22E-045.44E-04 - 67L31500.002.42E-065.31E-061.13E-052.49E-052.36E-065.30E-061.84E-056.57E-05 - 67M1 3.135.73E+002.36E+041.44E+062.45E+081.91E+037.54E+065.27E+098.19E+11 - 67M1 4.134.14E+007.53E+035.76E+054.06E+078.34E+021.93E+068.72E+081.20E+11 - 67M1 6.132.30E+001.36E+031.55E+055.54E+062.55E+022.80E+057.03E+077.54E+09 - 67M1 10.139.52E-011.29E+021.96E+049.73E+055.68E+012.48E+043.13E+062.30E+08 - 67M1 17.133.39E-018.23E+001.52E+038.26E+041.19E+012.06E+031.35E+056.41E+06 - 67M1 26.001.40E-017.92E-011.58E+028.21E+033.43E+003.00E+021.22E+044.02E+05 - 67M1 41.005.01E-021.38E-011.13E+015.25E+028.91E-013.90E+019.68E+022.14E+04 - 67M1 53.002.74E-028.26E-022.55E+001.05E+024.18E-011.27E+012.44E+024.28E+03 - 67M1 71.001.35E-024.72E-025.46E-011.65E+011.78E-013.68E+005.28E+017.15E+02 - 67M1 104.005.25E-032.01E-021.15E-011.73E+005.90E-027.70E-017.71E+007.50E+01 - 67M1 150.002.09E-037.92E-033.50E-022.71E-012.08E-021.83E-011.33E+009.47E+00 - 67M1 280.004.44E-041.47E-035.14E-032.12E-023.71E-031.88E-028.24E-023.59E-01 - 67M1 500.001.17E-043.36E-049.50E-042.78E-038.03E-042.78E-038.29E-032.42E-02 - 67M2 2.921.33E+014.67E+069.90E+092.50E+122.42E+022.67E+054.92E+072.60E+09 - 67M2 3.928.37E+001.08E+061.46E+093.22E+119.99E+017.05E+041.14E+078.41E+08 - 67M2 5.923.77E+001.37E+051.04E+081.80E+102.89E+011.13E+041.43E+061.13E+08 - 67M2 9.921.16E+001.05E+044.08E+064.96E+086.11E+001.22E+031.09E+057.23E+06 - 67M2 16.922.95E-017.49E+021.54E+051.25E+071.23E+001.31E+027.84E+033.83E+05 - 67M2 26.008.92E-029.11E+011.16E+046.72E+053.39E-012.27E+019.69E+023.52E+04 - 67M2 41.002.33E-021.00E+017.85E+023.13E+048.70E-023.67E+001.08E+022.80E+03 - 67M2 53.001.06E-022.92E+001.76E+025.65E+034.06E-021.33E+003.19E+016.73E+02 - 67M2 71.004.28E-037.29E-013.27E+018.22E+021.71E-024.25E-018.00E+001.34E+02 - 67M2 104.001.28E-031.23E-013.79E+006.90E+015.54E-039.77E-021.34E+001.66E+01 - 67M2 150.003.99E-042.31E-025.03E-016.77E+001.90E-032.44E-022.51E-012.32E+00 - 67M2 280.005.63E-051.50E-031.88E-021.54E-013.12E-042.46E-031.57E-029.09E-02 - 67M2 500.009.95E-061.41E-041.11E-036.00E-035.97E-053.21E-041.39E-035.43E-03 - 67M3 2.743.33E+019.99E+062.29E+105.98E+125.15E+011.18E+072.29E+114.61E+14 - 67M3 3.741.89E+012.09E+062.97E+096.62E+112.01E+012.49E+062.66E+103.23E+13 - 67M3 5.747.58E+002.43E+051.85E+083.17E+105.46E+002.93E+051.39E+098.76E+11 - 67M3 9.742.09E+001.69E+046.43E+067.59E+081.09E+002.09E+043.73E+071.12E+10 - 67M3 16.744.82E-011.11E+032.18E+051.71E+072.10E-011.41E+039.66E+051.46E+08 - 67M3 26.001.33E-011.21E+021.45E+047.96E+055.52E-021.57E+025.21E+044.72E+06 - 67M3 41.003.25E-021.24E+018.97E+023.38E+041.39E-021.63E+012.69E+031.49E+05 - 67M3 53.001.43E-023.44E+001.89E+025.73E+036.40E-034.57E+005.22E+022.23E+04 - 67M3 71.005.53E-038.05E-013.24E+017.64E+022.65E-031.08E+008.32E+012.66E+03 - 67M3 104.001.56E-031.22E-013.30E+005.57E+018.46E-041.65E-017.96E+001.78E+02 - 67M3 150.004.62E-042.04E-023.76E-014.62E+002.85E-042.77E-028.90E-011.44E+01 - 67M3 280.006.04E-051.04E-031.01E-027.29E-024.58E-051.41E-032.45E-022.42E-01 - 67M3 500.001.02E-057.71E-054.20E-041.91E-038.92E-069.86E-051.04E-036.94E-03 - 67M4 2.398.63E+013.08E+052.00E+102.85E+141.55E+013.65E+053.72E+093.30E+12 - 67M4 3.392.91E+015.17E+041.72E+091.35E+135.01E+006.34E+043.52E+082.38E+11 - 67M4 5.396.25E+004.87E+036.60E+072.42E+111.09E+006.17E+031.60E+077.33E+09 - 67M4 9.398.72E-012.89E+021.32E+062.10E+091.69E-013.77E+024.16E+051.17E+08 - 67M4 16.391.06E-011.68E+012.60E+041.91E+072.49E-022.26E+011.14E+041.93E+06 - 67M4 26.001.71E-021.56E+001.01E+034.09E+054.90E-032.20E+006.06E+026.70E+04 - 67M4 41.002.65E-031.47E-014.18E+019.64E+039.53E-042.21E-013.48E+012.51E+03 - 67M4 53.009.05E-043.86E-027.00E+001.19E+033.73E-046.05E-027.05E+004.02E+02 - 67M4 71.002.63E-048.41E-039.28E-011.13E+021.27E-041.39E-021.16E+005.06E+01 - 67M4 104.005.18E-051.16E-036.84E-025.39E+003.04E-052.05E-031.13E-013.49E+00 - 67M4 150.001.09E-051.76E-045.87E-033.08E-017.64E-063.30E-041.25E-022.79E-01 - 67M4 280.007.99E-077.74E-061.05E-042.75E-037.14E-071.52E-053.17E-044.22E-03 - 67M4 500.007.63E-084.93E-073.25E-064.43E-057.95E-089.21E-071.17E-051.01E-04 - 67M5 2.351.30E+023.83E+053.57E+104.61E+149.39E+003.41E+041.92E+101.11E+15 - 67M5 3.354.28E+016.21E+042.96E+092.07E+132.99E+005.83E+031.61E+094.70E+13 - 67M5 5.358.91E+005.65E+031.09E+083.54E+116.47E-015.65E+026.11E+077.27E+11 - 67M5 9.351.20E+003.25E+022.12E+062.91E+091.01E-013.50E+011.23E+065.20E+09 - 67M5 16.351.43E-011.83E+014.07E+042.53E+071.52E-022.18E+002.49E+043.89E+07 - 67M5 26.002.23E-021.64E+001.52E+035.13E+053.06E-032.21E-019.78E+027.05E+05 - 67M5 41.003.38E-031.49E-016.05E+011.15E+046.13E-042.37E-024.10E+011.46E+04 - 67M5 53.001.14E-033.82E-029.86E+001.37E+032.45E-046.79E-036.89E+001.69E+03 - 67M5 71.003.29E-048.06E-031.26E+001.23E+028.52E-051.65E-039.07E-011.49E+02 - 67M5 104.006.42E-051.05E-038.64E-025.42E+002.13E-052.66E-046.51E-026.60E+00 - 67M5 150.001.35E-051.52E-046.79E-032.78E-015.61E-064.75E-055.31E-033.51E-01 - 67M5 280.001.02E-066.21E-069.84E-051.93E-035.95E-072.79E-068.05E-052.71E-03 - 67M5 500.001.14E-074.00E-072.45E-062.31E-058.17E-082.39E-072.03E-063.54E-05 - 67N+ 50.001.75E-022.37E+001.53E+026.02E+031.60E-017.16E+003.42E+021.36E+04 - 67N+ 70.006.79E-034.64E-012.04E+015.66E+025.91E-021.61E+004.64E+011.22E+03 - 67N+ 100.002.56E-038.87E-022.58E+005.05E+012.13E-023.59E-016.32E+001.09E+02 - 67N+ 150.008.36E-041.43E-022.58E-013.43E+006.65E-036.91E-027.31E-017.93E+00 - 67N+ 200.003.80E-044.19E-035.33E-025.41E-012.93E-032.25E-021.72E-011.37E+00 - 67N+ 500.003.72E-051.51E-046.78E-042.96E-032.38E-048.90E-043.04E-031.06E-02 - 68K 58.481.09E+001.89E+006.24E-016.08E-021.16E+011.43E+023.11E+021.46E+02 - 68K 59.181.06E+001.94E+008.54E-011.64E-011.12E+011.37E+023.15E+021.96E+02 - 68K 60.481.00E+002.02E+001.28E+004.84E-011.05E+011.26E+023.18E+022.85E+02 - 68K 63.688.77E-012.10E+002.24E+001.84E+009.02E+001.05E+023.10E+024.65E+02 - 68K 67.487.56E-012.09E+003.13E+004.00E+007.62E+008.44E+012.87E+025.99E+02 - 68K 71.006.64E-012.02E+003.69E+006.02E+006.57E+007.01E+012.60E+026.57E+02 - 68K 77.005.38E-011.83E+004.15E+008.76E+005.19E+005.21E+012.13E+026.62E+02 - 68K 85.004.17E-011.55E+004.15E+001.06E+013.90E+003.63E+011.60E+025.80E+02 - 68K 97.002.95E-011.17E+003.59E+001.07E+012.67E+002.24E+011.04E+024.22E+02 - 68K 110.002.12E-018.64E-012.84E+009.17E+001.86E+001.43E+016.68E+012.85E+02 - 68K 127.001.45E-015.94E-012.03E+006.83E+001.23E+008.51E+003.93E+011.70E+02 - 68K 140.001.12E-014.54E-011.56E+005.33E+009.36E-016.02E+002.72E+011.17E+02 - 68K 157.008.28E-023.29E-011.13E+003.85E+006.77E-014.02E+001.76E+017.37E+01 - 68K 180.005.78E-022.22E-017.50E-012.52E+004.62E-012.50E+001.04E+014.18E+01 - 68K 205.004.12E-021.52E-015.02E-011.65E+003.22E-011.60E+006.29E+002.42E+01 - 68K 270.002.04E-026.85E-022.11E-016.47E-011.52E-016.36E-012.20E+007.50E+00 - 68K 355.001.04E-023.19E-029.07E-022.55E-017.33E-022.64E-017.99E-012.38E+00 - 68K 450.006.00E-031.71E-024.52E-021.17E-013.95E-021.26E-013.43E-019.08E-01 - 68K 560.003.71E-039.99E-032.47E-025.93E-022.25E-026.59E-021.62E-013.87E-01 - 68K 790.001.83E-034.59E-031.03E-022.19E-029.52E-032.48E-025.32E-021.10E-01 - 68K 1050.001.07E-032.55E-035.31E-031.03E-024.75E-031.15E-022.25E-024.18E-02 - 68K 1300.007.27E-041.68E-033.33E-036.10E-032.85E-036.65E-031.22E-022.13E-02 - 68K 1550.005.38E-041.20E-032.30E-034.03E-031.88E-034.27E-037.56E-031.25E-02 - 68L1 10.753.44E+007.74E+023.46E+042.07E+052.40E+028.28E+045.17E+067.22E+07 - 68L1 11.453.10E+005.58E+023.11E+043.37E+051.99E+026.14E+043.66E+066.13E+07 - 68L1 12.752.58E+003.15E+022.28E+044.20E+051.44E+023.69E+042.03E+064.11E+07 - 68L1 15.951.72E+009.02E+019.29E+032.77E+057.39E+011.29E+045.95E+051.42E+07 - 68L1 19.751.14E+002.51E+013.30E+031.20E+053.91E+014.80E+031.86E+054.51E+06 - 68L1 23.008.41E-019.59E+001.48E+035.75E+042.49E+012.39E+038.12E+041.91E+06 - 68L1 29.005.17E-012.19E+004.00E+021.64E+041.25E+018.37E+022.34E+045.02E+05 - 68L1 37.003.03E-016.56E-019.36E+013.91E+036.08E+002.83E+026.40E+031.20E+05 - 68L1 49.001.59E-013.57E-011.68E+016.79E+022.66E+008.34E+011.48E+032.31E+04 - 68L1 62.009.11E-022.55E-014.26E+001.51E+021.33E+003.06E+014.42E+025.85E+03 - 68L1 79.005.06E-021.67E-011.30E+003.27E+016.58E-011.12E+011.31E+021.44E+03 - 68L1 92.003.47E-021.22E-017.18E-011.32E+014.23E-016.02E+006.18E+016.07E+02 - 68L1 109.002.27E-028.31E-024.06E-015.13E+002.60E-013.06E+002.72E+012.34E+02 - 68L1 132.001.40E-025.21E-022.27E-011.97E+001.50E-011.45E+001.10E+018.13E+01 - 68L1 160.008.66E-033.17E-021.28E-018.34E-018.74E-026.94E-014.50E+002.88E+01 - 68L1 225.003.70E-031.27E-024.64E-022.15E-013.39E-021.98E-019.87E-014.87E+00 - 68L1 310.001.70E-035.42E-031.78E-026.64E-021.42E-026.50E-022.56E-011.00E+00 - 68L1 400.009.39E-042.81E-038.50E-032.74E-027.21E-032.79E-029.31E-023.07E-01 - 68L1 510.005.48E-041.55E-034.31E-031.23E-023.83E-031.29E-023.73E-021.06E-01 - 68L1 740.002.54E-046.70E-041.64E-033.92E-031.49E-034.26E-031.01E-022.34E-02 - 68L11000.001.43E-043.58E-047.97E-041.69E-037.10E-041.83E-033.86E-037.76E-03 - 68L11500.007.05E-051.63E-043.26E-046.02E-042.68E-046.31E-041.17E-032.04E-03 - 68L2 10.267.24E+004.29E+041.05E+073.01E+082.69E+013.40E+037.14E+043.87E+05 - 68L2 10.966.05E+003.09E+047.13E+062.45E+082.20E+012.64E+036.60E+046.36E+05 - 68L2 12.264.43E+001.77E+043.72E+061.53E+081.56E+011.71E+035.14E+048.15E+05 - 68L2 15.462.30E+005.58E+039.64E+054.64E+077.76E+006.96E+022.45E+045.85E+05 - 68L2 19.261.21E+001.88E+032.68E+051.30E+073.99E+002.96E+021.05E+042.84E+05 - 68L2 23.007.16E-017.86E+029.52E+044.43E+062.33E+001.48E+025.07E+031.38E+05 - 68L2 29.003.54E-012.52E+022.47E+041.04E+061.16E+006.00E+011.87E+034.81E+04 - 68L2 37.001.67E-017.70E+016.01E+032.21E+055.59E-012.33E+016.33E+021.47E+04 - 68L2 49.006.89E-021.98E+011.19E+033.64E+042.41E-017.82E+001.78E+023.52E+03 - 68L2 62.003.25E-026.45E+003.09E+027.98E+031.20E-013.15E+006.08E+011.03E+03 - 68L2 79.001.49E-022.05E+007.83E+011.68E+035.83E-021.24E+002.01E+012.88E+02 - 68L2 92.009.12E-031.00E+003.33E+016.35E+023.72E-026.96E-011.00E+011.29E+02 - 68L2 109.005.26E-034.58E-011.29E+012.16E+022.26E-023.66E-014.63E+005.25E+01 - 68L2 132.002.83E-031.90E-014.51E+006.49E+011.29E-021.78E-011.94E+001.91E+01 - 68L2 160.001.53E-037.98E-021.59E+001.96E+017.33E-038.67E-028.19E-016.97E+00 - 68L2 225.005.16E-041.77E-022.61E-012.47E+002.73E-032.47E-021.81E-011.20E+00 - 68L2 310.001.90E-044.50E-035.08E-023.79E-011.08E-037.80E-034.55E-022.40E-01 - 68L2 400.008.80E-051.58E-031.45E-029.02E-025.24E-043.18E-031.56E-026.95E-02 - 68L2 510.004.31E-056.00E-044.61E-032.43E-022.63E-041.38E-035.80E-032.22E-02 - 68L2 740.001.51E-051.48E-048.74E-043.66E-039.24E-053.96E-041.35E-034.19E-03 - 68L21000.006.74E-065.10E-052.49E-048.87E-043.99E-051.50E-044.42E-041.18E-03 - 68L21500.002.38E-061.35E-055.26E-051.54E-041.30E-054.24E-051.06E-042.39E-04 - 68L3 9.361.56E+019.67E+042.74E+079.09E+085.89E+001.14E+051.97E+083.59E+10 - 68L3 10.061.27E+016.72E+041.78E+076.95E+084.72E+007.95E+041.21E+082.06E+10 - 68L3 11.368.93E+003.63E+048.57E+063.94E+083.25E+004.33E+045.31E+078.12E+09 - 68L3 14.564.28E+001.04E+041.93E+061.00E+081.52E+001.26E+049.99E+061.22E+09 - 68L3 18.362.11E+003.21E+034.77E+052.44E+077.44E-013.95E+032.13E+062.10E+08 - 68L3 23.001.05E+001.03E+031.23E+055.80E+063.73E-011.29E+034.79E+053.85E+07 - 68L3 29.005.01E-013.20E+023.03E+041.28E+061.83E-014.06E+021.05E+056.83E+06 - 68L3 37.002.28E-019.39E+016.98E+032.53E+058.71E-021.21E+022.17E+041.13E+06 - 68L3 49.009.05E-022.30E+011.29E+033.83E+043.70E-023.00E+013.60E+031.46E+05 - 68L3 62.004.13E-027.09E+003.13E+027.79E+031.81E-029.38E+008.18E+022.68E+04 - 68L3 79.001.83E-022.12E+007.34E+011.51E+038.71E-032.84E+001.82E+024.82E+03 - 68L3 92.001.09E-029.97E-012.96E+015.35E+025.50E-031.34E+007.16E+011.66E+03 - 68L3 109.006.16E-034.32E-011.08E+011.69E+023.31E-035.85E-012.56E+015.15E+02 - 68L3 132.003.22E-031.69E-013.46E+004.64E+011.86E-032.30E-018.16E+001.40E+02 - 68L3 160.001.69E-036.60E-021.11E+001.27E+011.05E-039.04E-022.62E+003.84E+01 - 68L3 225.005.45E-041.28E-021.53E-011.31E+003.84E-041.76E-023.67E-014.12E+00 - 68L3 310.001.94E-042.86E-032.47E-021.62E-011.51E-043.89E-036.07E-025.41E-01 - 68L3 400.008.73E-059.00E-046.04E-033.23E-027.31E-051.20E-031.50E-021.13E-01 - 68L3 510.004.22E-053.11E-041.65E-037.35E-033.71E-054.01E-044.11E-032.66E-02 - 68L3 740.001.48E-056.77E-052.55E-048.71E-041.37E-058.06E-056.00E-043.15E-03 - 68L31000.006.69E-062.19E-056.38E-051.80E-046.42E-062.41E-051.35E-046.04E-04 - 68L31500.002.58E-065.70E-061.22E-052.69E-052.52E-065.75E-062.03E-057.27E-05 - 68M1 3.215.47E+002.32E+041.44E+062.18E+081.96E+037.52E+065.14E+097.78E+11 - 68M1 4.213.99E+007.58E+035.77E+053.96E+078.71E+021.98E+068.84E+081.19E+11 - 68M1 6.212.24E+001.42E+031.56E+055.55E+062.72E+022.97E+057.40E+077.80E+09 - 68M1 10.219.42E-011.40E+022.03E+049.74E+056.14E+012.69E+043.38E+062.45E+08 - 68M1 17.213.39E-019.42E+001.63E+038.57E+041.29E+012.27E+031.48E+056.97E+06 - 68M1 26.001.42E-019.51E-011.78E+028.93E+033.79E+003.36E+021.36E+044.48E+05 - 68M1 41.005.12E-021.45E-011.31E+015.87E+029.84E-014.35E+011.08E+032.38E+04 - 68M1 53.002.81E-028.26E-022.98E+001.19E+024.62E-011.42E+012.71E+024.74E+03 - 68M1 71.001.39E-024.68E-026.28E-011.90E+011.97E-014.09E+005.85E+017.92E+02 - 68M1 104.005.41E-032.01E-021.25E-011.97E+006.51E-028.53E-018.53E+008.27E+01 - 68M1 150.002.17E-038.03E-033.67E-023.01E-012.30E-022.03E-011.46E+001.04E+01 - 68M1 280.004.64E-041.53E-035.38E-032.27E-024.08E-032.07E-029.05E-023.94E-01 - 68M1 500.001.23E-043.53E-041.00E-032.97E-038.81E-043.05E-039.08E-032.65E-02 - 68M2 3.011.26E+014.45E+069.16E+092.23E+122.47E+022.63E+054.68E+072.31E+09 - 68M2 4.018.04E+001.06E+061.41E+093.04E+111.04E+027.17E+041.12E+077.90E+08 - 68M2 6.013.70E+001.41E+051.05E+081.79E+103.08E+011.19E+041.47E+061.12E+08 - 68M2 10.011.17E+001.11E+044.27E+065.11E+086.63E+001.31E+031.15E+057.42E+06 - 68M2 17.013.02E-018.03E+021.64E+051.32E+071.35E+001.42E+028.38E+034.02E+05 - 68M2 26.009.33E-021.00E+021.28E+047.33E+053.78E-012.51E+011.06E+033.81E+04 - 68M2 41.002.46E-021.10E+018.63E+023.41E+049.71E-024.05E+001.19E+023.04E+03 - 68M2 53.001.13E-023.21E+001.94E+026.18E+034.53E-021.47E+003.50E+017.33E+02 - 68M2 71.004.56E-038.03E-013.60E+019.00E+021.91E-024.70E-018.79E+001.46E+02 - 68M2 104.001.37E-031.36E-014.17E+007.57E+016.21E-031.08E-011.48E+001.82E+01 - 68M2 150.004.31E-042.55E-025.56E-017.45E+002.13E-032.72E-022.77E-012.55E+00 - 68M2 280.006.12E-051.67E-032.08E-021.70E-013.51E-042.75E-031.74E-021.00E-01 - 68M2 500.001.09E-051.57E-041.24E-036.68E-036.74E-053.59E-041.55E-036.04E-03 - 68M3 2.813.18E+019.54E+062.13E+105.40E+125.13E+011.17E+072.22E+114.36E+14 - 68M3 3.811.83E+012.07E+062.89E+096.27E+112.04E+012.56E+062.70E+103.24E+13 - 68M3 5.817.49E+002.48E+051.88E+083.14E+105.67E+003.11E+051.47E+099.26E+11 - 68M3 9.812.11E+001.78E+046.71E+067.78E+081.15E+002.28E+044.09E+071.23E+10 - 68M3 16.814.93E-011.18E+032.31E+051.79E+072.24E-011.55E+031.08E+061.63E+08 - 68M3 26.001.38E-011.32E+021.57E+048.57E+055.95E-021.77E+025.97E+045.43E+06 - 68M3 41.003.41E-021.35E+019.75E+023.64E+041.50E-021.84E+013.07E+031.71E+05 - 68M3 53.001.51E-023.75E+002.06E+026.18E+036.90E-035.15E+005.96E+022.54E+04 - 68M3 71.005.84E-038.77E-013.52E+018.24E+022.86E-031.21E+009.47E+013.03E+03 - 68M3 104.001.66E-031.33E-013.58E+006.02E+019.13E-041.86E-019.03E+002.02E+02 - 68M3 150.004.92E-042.22E-024.09E-015.00E+003.07E-043.12E-021.01E+001.63E+01 - 68M3 280.006.45E-051.13E-031.10E-027.91E-024.95E-051.58E-032.76E-022.72E-01 - 68M3 500.001.09E-058.40E-054.58E-042.08E-039.62E-061.10E-041.17E-037.80E-03 - 68M4 2.458.33E+012.96E+051.88E+102.63E+141.56E+013.66E+053.63E+093.13E+12 - 68M4 3.452.89E+015.17E+041.71E+091.33E+135.16E+006.60E+043.62E+082.39E+11 - 68M4 5.456.37E+005.04E+036.85E+072.53E+111.15E+006.64E+031.71E+077.73E+09 - 68M4 9.459.10E-013.07E+021.42E+062.27E+091.82E-014.16E+024.59E+051.28E+08 - 68M4 16.451.13E-011.81E+012.86E+042.11E+072.71E-022.54E+011.28E+042.15E+06 - 68M4 26.001.86E-021.72E+001.14E+034.66E+055.42E-032.51E+006.95E+027.66E+04 - 68M4 41.002.89E-031.63E-014.71E+011.10E+041.06E-032.52E-013.98E+012.87E+03 - 68M4 53.009.91E-044.28E-027.89E+001.36E+034.14E-046.91E-028.08E+004.59E+02 - 68M4 71.002.89E-049.36E-031.05E+001.28E+021.41E-041.59E-021.33E+005.79E+01 - 68M4 104.005.76E-051.29E-037.72E-026.14E+003.39E-052.34E-031.30E-014.00E+00 - 68M4 150.001.22E-051.98E-046.63E-033.51E-018.55E-063.78E-041.44E-023.20E-01 - 68M4 280.008.87E-078.76E-061.18E-043.14E-038.01E-071.74E-053.65E-044.84E-03 - 68M4 500.008.50E-085.59E-073.68E-065.07E-058.93E-081.06E-061.35E-051.16E-04 - 68M5 2.411.26E+023.66E+053.38E+104.28E+149.41E+003.36E+041.89E+101.07E+15 - 68M5 3.414.24E+016.16E+042.95E+092.04E+133.07E+005.96E+031.67E+094.82E+13 - 68M5 5.419.07E+005.79E+031.14E+083.69E+116.79E-015.97E+026.61E+077.89E+11 - 68M5 9.411.25E+003.41E+022.29E+063.16E+091.08E-013.78E+011.38E+065.87E+09 - 68M5 16.411.51E-011.95E+014.48E+042.80E+071.65E-022.39E+002.83E+044.48E+07 - 68M5 26.002.41E-021.79E+001.72E+035.83E+053.35E-032.46E-011.14E+038.36E+05 - 68M5 41.003.68E-031.63E-016.84E+011.31E+046.74E-042.63E-024.78E+011.72E+04 - 68M5 53.001.25E-034.19E-021.11E+011.56E+032.69E-047.55E-038.02E+001.99E+03 - 68M5 71.003.60E-048.86E-031.42E+001.40E+029.40E-051.84E-031.06E+001.76E+02 - 68M5 104.007.05E-051.16E-039.78E-026.15E+002.35E-052.96E-047.57E-027.74E+00 - 68M5 150.001.49E-051.68E-047.68E-033.16E-016.22E-065.29E-056.16E-034.10E-01 - 68M5 280.001.14E-066.87E-061.11E-042.19E-036.60E-073.11E-069.29E-053.16E-03 - 68M5 500.001.20E-074.41E-072.75E-062.61E-059.07E-082.66E-072.32E-064.11E-05 - 68N+ 50.001.82E-022.60E+001.68E+026.63E+031.77E-018.01E+003.88E+021.56E+04 - 68N+ 70.007.08E-035.08E-012.24E+016.21E+026.55E-021.80E+005.24E+011.39E+03 - 68N+ 100.002.68E-039.68E-022.84E+005.54E+012.36E-024.00E-017.10E+001.23E+02 - 68N+ 150.008.76E-041.56E-022.84E-013.77E+007.37E-037.67E-028.16E-018.89E+00 - 68N+ 200.003.99E-044.54E-035.86E-025.95E-013.25E-032.49E-021.91E-011.53E+00 - 68N+ 500.003.90E-051.60E-047.32E-043.22E-032.60E-049.72E-043.33E-031.16E-02 - 69K 60.391.02E+001.70E+005.37E-014.88E-021.15E+011.36E+022.85E+021.28E+02 - 69K 61.099.91E-011.74E+007.31E-011.32E-011.11E+011.30E+022.89E+021.72E+02 - 69K 62.399.40E-011.81E+001.09E+003.87E-011.04E+011.21E+022.92E+022.48E+02 - 69K 65.598.28E-011.89E+001.91E+001.47E+009.02E+001.01E+022.86E+024.06E+02 - 69K 69.397.17E-011.89E+002.68E+003.23E+007.65E+008.17E+012.66E+025.26E+02 - 69K 73.006.30E-011.83E+003.18E+004.95E+006.60E+006.79E+012.42E+025.82E+02 - 69K 79.005.14E-011.67E+003.61E+007.28E+005.25E+005.09E+012.00E+025.93E+02 - 69K 87.004.00E-011.42E+003.65E+008.97E+003.97E+003.58E+011.52E+025.26E+02 - 69K 99.002.86E-011.09E+003.21E+009.22E+002.74E+002.24E+011.00E+023.90E+02 - 69K 112.002.07E-018.12E-012.58E+008.05E+001.92E+001.44E+016.51E+012.68E+02 - 69K 129.001.43E-015.64E-011.87E+006.13E+001.28E+008.66E+003.89E+011.63E+02 - 69K 142.001.11E-014.35E-011.46E+004.85E+009.78E-016.16E+002.71E+011.13E+02 - 69K 159.008.23E-023.17E-011.06E+003.55E+007.11E-014.14E+001.77E+017.22E+01 - 69K 182.005.78E-022.16E-017.16E-012.36E+004.88E-012.59E+001.05E+014.15E+01 - 69K 210.003.99E-021.43E-014.63E-011.49E+003.28E-011.59E+006.09E+002.28E+01 - 69K 275.002.01E-026.63E-022.01E-016.09E-011.57E-016.46E-012.19E+007.30E+00 - 69K 360.001.05E-023.16E-028.88E-022.48E-017.67E-022.72E-018.11E-012.38E+00 - 69K 450.006.24E-031.77E-024.65E-021.20E-014.28E-021.36E-013.66E-019.64E-01 - 69K 560.003.86E-031.04E-022.56E-026.14E-022.44E-027.10E-021.73E-014.12E-01 - 69K 790.001.91E-034.80E-031.07E-022.29E-021.03E-022.67E-025.70E-021.17E-01 - 69K 1050.001.11E-032.67E-035.57E-031.09E-025.12E-031.24E-022.41E-024.47E-02 - 69K 1300.007.61E-041.76E-033.50E-036.42E-033.06E-037.14E-031.31E-022.27E-02 - 69K 1550.005.63E-041.27E-032.42E-034.25E-032.02E-034.59E-038.11E-031.34E-02 - 69L1 11.123.22E+007.19E+023.06E+041.69E+052.39E+027.88E+044.73E+066.32E+07 - 69L1 11.822.91E+005.25E+022.77E+042.80E+051.99E+025.90E+043.39E+065.41E+07 - 69L1 13.122.44E+003.02E+022.07E+043.57E+051.46E+023.60E+041.91E+063.69E+07 - 69L1 16.321.65E+009.05E+018.74E+032.47E+057.60E+011.29E+045.79E+051.33E+07 - 69L1 20.121.10E+002.63E+013.21E+031.11E+054.07E+014.90E+031.85E+054.34E+06 - 69L1 24.007.74E-018.78E+001.27E+034.78E+042.41E+012.19E+037.10E+041.61E+06 - 69L1 30.004.85E-012.18E+003.65E+021.44E+041.24E+017.97E+022.14E+044.45E+05 - 69L1 38.002.89E-016.68E-019.06E+013.61E+036.18E+002.79E+026.11E+031.12E+05 - 69L1 50.001.54E-013.44E-011.73E+016.63E+022.75E+008.45E+011.46E+032.23E+04 - 69L1 63.008.95E-022.42E-014.53E+001.54E+021.40E+003.16E+014.47E+025.80E+03 - 69L1 80.005.02E-021.60E-011.38E+003.45E+016.97E-011.17E+011.35E+021.46E+03 - 69L1 93.003.47E-021.18E-017.50E-011.41E+014.51E-016.34E+006.42E+016.21E+02 - 69L1 110.002.28E-028.08E-024.17E-015.51E+002.78E-013.24E+002.85E+012.42E+02 - 69L1 133.001.42E-025.11E-022.30E-012.10E+001.62E-011.54E+001.16E+018.49E+01 - 69L1 160.008.94E-033.20E-021.32E-019.08E-019.59E-027.62E-014.92E+003.13E+01 - 69L1 225.003.83E-031.30E-024.80E-022.29E-013.72E-022.17E-011.08E+005.30E+00 - 69L1 310.001.77E-035.59E-031.86E-027.03E-021.55E-027.10E-022.79E-011.09E+00 - 69L1 400.009.80E-042.92E-038.89E-032.90E-027.89E-033.05E-021.01E-013.33E-01 - 69L1 510.005.74E-041.62E-034.54E-031.30E-024.19E-031.41E-024.06E-021.15E-01 - 69L1 740.002.68E-047.05E-041.73E-034.17E-031.63E-034.63E-031.10E-022.54E-02 - 69L11000.001.51E-043.78E-048.47E-041.80E-037.71E-041.99E-034.18E-038.41E-03 - 69L11500.007.43E-051.73E-043.47E-046.43E-042.90E-046.85E-041.27E-032.20E-03 - 69L2 10.626.79E+003.95E+049.23E+062.54E+082.68E+013.23E+036.47E+043.24E+05 - 69L2 11.325.71E+002.88E+046.38E+062.09E+082.21E+012.53E+036.03E+045.41E+05 - 69L2 12.624.23E+001.67E+043.39E+061.34E+081.59E+011.66E+034.76E+047.08E+05 - 69L2 15.822.24E+005.45E+039.12E+054.21E+078.01E+006.92E+022.33E+045.30E+05 - 69L2 19.621.20E+001.88E+032.60E+051.22E+074.18E+003.00E+021.03E+042.66E+05 - 69L2 24.006.58E-016.96E+028.05E+043.60E+062.27E+001.37E+024.49E+031.17E+05 - 69L2 30.003.35E-012.33E+022.20E+048.94E+051.16E+005.74E+011.72E+034.27E+04 - 69L2 38.001.61E-017.39E+015.59E+031.99E+055.72E-012.29E+016.04E+021.36E+04 - 69L2 50.006.83E-021.97E+011.15E+033.43E+042.52E-017.92E+001.75E+023.38E+03 - 69L2 63.003.28E-026.53E+003.08E+027.77E+031.27E-013.25E+006.13E+011.02E+03 - 69L2 80.001.52E-022.12E+007.96E+011.68E+036.24E-021.30E+002.06E+012.90E+02 - 69L2 93.009.38E-031.05E+003.42E+016.43E+024.00E-027.34E-011.04E+011.31E+02 - 69L2 110.005.46E-034.81E-011.35E+012.22E+022.44E-023.89E-014.84E+005.41E+01 - 69L2 133.002.96E-032.02E-014.74E+006.74E+011.40E-021.90E-012.05E+001.99E+01 - 69L2 160.001.64E-038.76E-021.74E+002.14E+018.18E-039.57E-028.97E-017.59E+00 - 69L2 225.005.55E-041.95E-022.87E-012.71E+003.05E-032.74E-021.99E-011.31E+00 - 69L2 310.002.06E-044.96E-035.60E-024.16E-011.21E-038.65E-035.01E-022.64E-01 - 69L2 400.009.56E-051.74E-031.60E-029.93E-025.87E-043.53E-031.73E-027.65E-02 - 69L2 510.004.70E-056.64E-045.10E-032.68E-022.95E-041.53E-036.43E-032.45E-02 - 69L2 740.001.64E-051.64E-049.70E-044.06E-031.04E-044.43E-041.50E-034.64E-03 - 69L21000.007.39E-065.66E-052.77E-049.85E-044.49E-051.68E-044.93E-041.31E-03 - 69L21500.002.63E-061.50E-055.87E-051.72E-041.46E-054.76E-051.19E-042.67E-04 - 69L3 9.651.47E+018.96E+042.45E+077.80E+085.74E+001.09E+051.83E+083.22E+10 - 69L3 10.351.21E+016.29E+041.61E+076.02E+084.63E+007.72E+041.14E+081.88E+10 - 69L3 11.658.55E+003.45E+047.90E+063.48E+083.22E+004.27E+045.10E+077.59E+09 - 69L3 14.854.17E+001.01E+041.84E+069.19E+071.53E+001.27E+049.96E+061.19E+09 - 69L3 18.652.09E+003.20E+034.66E+052.31E+077.59E-014.09E+032.18E+062.11E+08 - 69L3 24.009.52E-018.97E+021.02E+054.64E+063.50E-011.17E+034.10E+053.16E+07 - 69L3 30.004.69E-012.91E+022.65E+041.08E+061.77E-013.84E+029.53E+045.99E+06 - 69L3 38.002.18E-018.88E+016.39E+032.24E+058.60E-021.19E+022.06E+041.05E+06 - 69L3 50.008.86E-022.24E+011.23E+033.55E+043.73E-023.04E+013.58E+031.42E+05 - 69L3 63.004.11E-027.07E+003.06E+027.45E+031.85E-029.69E+008.35E+022.69E+04 - 69L3 80.001.84E-022.16E+007.33E+011.48E+038.98E-032.98E+001.90E+024.95E+03 - 69L3 93.001.11E-021.02E+002.99E+015.31E+025.70E-031.42E+007.54E+011.73E+03 - 69L3 110.006.30E-034.47E-011.10E+011.70E+023.44E-036.25E-012.73E+015.42E+02 - 69L3 133.003.32E-031.76E-013.57E+004.72E+011.95E-032.47E-018.75E+001.48E+02 - 69L3 160.001.79E-037.14E-021.20E+001.36E+011.12E-031.01E-012.94E+004.29E+01 - 69L3 225.005.78E-041.39E-021.65E-011.41E+004.11E-041.96E-024.10E-014.60E+00 - 69L3 310.002.06E-043.09E-032.67E-021.75E-011.62E-044.32E-036.77E-026.03E-01 - 69L3 400.009.31E-059.74E-046.53E-033.48E-027.83E-051.33E-031.68E-021.26E-01 - 69L3 510.004.50E-053.37E-041.79E-037.92E-033.97E-054.43E-044.57E-032.96E-02 - 69L3 740.001.57E-057.30E-052.75E-049.40E-041.46E-058.86E-056.66E-043.50E-03 - 69L31000.007.18E-062.36E-056.89E-051.94E-046.86E-062.64E-051.49E-046.70E-04 - 69L31500.002.74E-066.11E-061.31E-052.90E-052.69E-066.23E-062.23E-058.04E-05 - 69M1 3.315.13E+002.22E+041.39E+061.83E+081.97E+037.28E+064.81E+097.02E+11 - 69M1 4.313.79E+007.47E+035.61E+053.70E+078.97E+021.99E+068.67E+081.13E+11 - 69M1 6.312.17E+001.45E+031.54E+055.42E+062.86E+023.09E+057.61E+077.82E+09 - 69M1 10.319.26E-011.50E+022.06E+049.60E+056.59E+012.88E+043.60E+062.57E+08 - 69M1 17.313.38E-011.07E+011.73E+038.80E+041.40E+012.47E+031.61E+057.49E+06 - 69M1 26.001.44E-011.14E+001.99E+029.67E+034.19E+003.76E+021.53E+044.99E+05 - 69M1 41.005.22E-021.56E-011.51E+016.52E+021.09E+004.85E+011.20E+032.64E+04 - 69M1 53.002.87E-028.34E-023.48E+001.34E+025.11E-011.58E+013.01E+025.25E+03 - 69M1 71.001.43E-024.64E-027.23E-012.17E+012.17E-014.54E+006.49E+018.75E+02 - 69M1 104.005.59E-032.01E-021.36E-012.26E+007.19E-029.45E-019.42E+009.11E+01 - 69M1 150.002.25E-038.14E-033.87E-023.36E-012.53E-022.24E-011.61E+001.14E+01 - 69M1 280.004.85E-041.58E-035.64E-032.44E-024.50E-032.28E-029.94E-024.31E-01 - 69M1 500.001.29E-043.71E-041.06E-033.17E-039.68E-043.35E-039.94E-032.90E-02 - 69M2 3.091.19E+014.25E+068.49E+092.01E+122.52E+022.60E+054.46E+072.06E+09 - 69M2 4.097.73E+001.05E+061.37E+092.86E+111.09E+027.29E+041.11E+077.43E+08 - 69M2 6.093.63E+001.44E+051.06E+081.77E+103.28E+011.24E+041.50E+061.10E+08 - 69M2 10.091.17E+001.17E+044.46E+065.26E+087.19E+001.40E+031.20E+057.61E+06 - 69M2 17.093.09E-018.61E+021.75E+051.39E+071.48E+001.54E+028.95E+034.23E+05 - 69M2 26.009.76E-021.10E+021.40E+047.98E+054.21E-012.77E+011.16E+034.13E+04 - 69M2 41.002.59E-021.21E+019.48E+023.73E+041.08E-014.48E+001.30E+023.30E+03 - 69M2 53.001.20E-023.53E+002.13E+026.75E+035.06E-021.63E+003.83E+017.97E+02 - 69M2 71.004.86E-038.84E-013.96E+019.84E+022.13E-025.21E-019.65E+001.60E+02 - 69M2 104.001.47E-031.49E-014.60E+008.30E+016.95E-031.20E-011.63E+001.99E+01 - 69M2 150.004.63E-042.82E-026.14E-018.19E+002.39E-033.02E-023.06E-012.80E+00 - 69M2 280.006.66E-051.85E-032.31E-021.88E-013.95E-043.06E-031.94E-021.11E-01 - 69M2 500.001.19E-051.75E-041.38E-037.42E-037.61E-054.03E-041.72E-036.72E-03 - 69M3 2.883.03E+019.12E+061.98E+104.86E+125.10E+011.16E+072.14E+114.12E+14 - 69M3 3.881.77E+012.05E+062.80E+095.92E+112.07E+012.63E+062.73E+103.23E+13 - 69M3 5.887.39E+002.54E+051.90E+083.10E+105.88E+003.30E+051.56E+099.74E+11 - 69M3 9.882.12E+001.86E+046.98E+067.96E+081.21E+002.48E+044.48E+071.35E+10 - 69M3 16.885.04E-011.26E+032.45E+051.87E+072.38E-011.71E+031.20E+061.82E+08 - 69M3 26.001.44E-011.44E+021.71E+049.22E+056.41E-021.99E+026.82E+046.23E+06 - 69M3 41.003.57E-021.47E+011.06E+033.92E+041.61E-022.07E+013.51E+031.95E+05 - 69M3 53.001.58E-024.08E+002.23E+026.66E+037.44E-035.80E+006.78E+022.89E+04 - 69M3 71.006.15E-039.55E-013.83E+018.88E+023.09E-031.37E+001.08E+023.44E+03 - 69M3 104.001.75E-031.45E-013.89E+006.49E+019.84E-042.09E-011.02E+012.29E+02 - 69M3 150.005.23E-042.42E-024.44E-015.40E+003.31E-043.51E-021.14E+001.84E+01 - 69M3 280.006.87E-051.23E-031.19E-028.57E-025.33E-051.77E-033.11E-023.06E-01 - 69M3 500.001.16E-059.15E-054.99E-042.26E-031.04E-051.22E-041.31E-038.74E-03 - 69M4 2.518.04E+012.85E+051.77E+102.43E+141.57E+013.67E+053.55E+092.98E+12 - 69M4 3.512.86E+015.16E+041.69E+091.30E+135.30E+006.87E+043.71E+082.40E+11 - 69M4 5.516.48E+005.20E+037.10E+072.62E+111.21E+007.14E+031.83E+078.14E+09 - 69M4 9.519.47E-013.25E+021.52E+062.46E+091.95E-014.58E+025.06E+051.39E+08 - 69M4 16.511.20E-011.95E+013.13E+042.33E+072.94E-022.83E+011.43E+042.39E+06 - 69M4 26.002.01E-021.89E+001.29E+035.31E+055.97E-032.86E+007.96E+028.74E+04 - 69M4 41.003.15E-031.80E-015.30E+011.25E+041.17E-032.88E-014.56E+013.28E+03 - 69M4 53.001.09E-034.75E-028.88E+001.54E+034.59E-047.89E-029.25E+005.24E+02 - 69M4 71.003.18E-041.04E-021.18E+001.46E+021.56E-041.81E-021.53E+006.61E+01 - 69M4 104.006.32E-051.44E-038.70E-026.99E+003.78E-052.68E-031.49E-014.56E+00 - 69M4 150.001.34E-052.21E-047.48E-034.00E-019.54E-064.32E-041.65E-023.66E-01 - 69M4 280.001.00E-069.85E-061.34E-043.58E-038.96E-071.99E-054.19E-045.55E-03 - 69M4 500.001.03E-076.29E-074.17E-065.79E-051.00E-071.21E-061.55E-051.34E-04 - 69M5 2.471.22E+023.49E+053.21E+103.97E+149.42E+003.32E+041.85E+101.03E+15 - 69M5 3.474.21E+016.10E+042.94E+092.02E+133.15E+006.09E+031.72E+094.93E+13 - 69M5 5.479.23E+005.92E+031.19E+083.84E+117.11E-016.28E+027.13E+078.53E+11 - 69M5 9.471.31E+003.58E+022.47E+063.41E+091.15E-014.08E+011.53E+066.60E+09 - 69M5 16.471.60E-012.08E+014.92E+043.09E+071.77E-022.61E+003.21E+045.15E+07 - 69M5 26.002.61E-021.94E+001.94E+036.62E+053.67E-032.73E-011.33E+039.89E+05 - 69M5 41.004.00E-031.78E-017.72E+011.48E+047.39E-042.93E-025.55E+012.03E+04 - 69M5 53.001.36E-034.59E-021.26E+011.77E+032.96E-048.38E-039.32E+002.35E+03 - 69M5 71.003.93E-049.71E-031.60E+001.59E+021.04E-042.04E-031.23E+002.06E+02 - 69M5 104.007.79E-051.28E-031.10E-016.97E+002.60E-053.29E-048.79E-029.07E+00 - 69M5 150.001.66E-051.86E-048.67E-033.58E-016.88E-065.88E-057.14E-034.79E-01 - 69M5 280.001.24E-067.65E-061.25E-042.49E-037.32E-073.46E-061.07E-043.67E-03 - 69M5 500.001.32E-074.91E-073.09E-062.96E-051.01E-072.96E-072.65E-064.76E-05 - 69N+ 50.001.89E-022.85E+001.84E+027.28E+031.96E-018.95E+004.39E+021.77E+04 - 69N+ 70.007.37E-035.56E-012.45E+016.81E+027.24E-022.00E+005.90E+011.57E+03 - 69N+ 100.002.80E-031.06E-013.11E+006.07E+012.61E-024.45E-017.95E+001.38E+02 - 69N+ 150.009.17E-041.69E-023.11E-014.14E+008.14E-038.50E-029.09E-019.95E+00 - 69N+ 200.004.19E-044.92E-036.43E-026.55E-013.59E-032.76E-022.13E-011.71E+00 - 69N+ 500.004.19E-051.75E-048.14E-043.61E-032.90E-041.09E-033.73E-031.31E-02 - 70K 62.339.57E-011.53E+004.64E-013.93E-021.14E+011.30E+022.62E+021.13E+02 - 70K 63.039.31E-011.57E+006.27E-011.06E-011.10E+011.24E+022.65E+021.51E+02 - 70K 64.338.84E-011.63E+009.30E-013.10E-011.04E+011.16E+022.68E+022.17E+02 - 70K 67.537.82E-011.70E+001.63E+001.19E+009.02E+009.67E+012.64E+023.55E+02 - 70K 71.336.80E-011.70E+002.29E+002.62E+007.69E+007.92E+012.47E+024.62E+02 - 70K 75.005.98E-011.65E+002.74E+004.07E+006.64E+006.59E+012.25E+025.16E+02 - 70K 81.004.91E-011.52E+003.14E+006.05E+005.32E+004.98E+011.88E+025.31E+02 - 70K 89.003.85E-011.31E+003.21E+007.57E+004.05E+003.54E+011.44E+024.78E+02 - 70K 101.002.77E-011.01E+002.87E+007.95E+002.81E+002.24E+019.64E+013.62E+02 - 70K 114.002.02E-017.63E-012.34E+007.08E+001.99E+001.45E+016.35E+012.52E+02 - 70K 131.001.40E-015.36E-011.72E+005.50E+001.34E+008.82E+003.84E+011.56E+02 - 70K 144.001.10E-014.17E-011.36E+004.41E+001.02E+006.31E+002.70E+011.10E+02 - 70K 161.008.19E-023.07E-011.00E+003.28E+007.47E-014.27E+001.77E+017.07E+01 - 70K 184.005.79E-022.11E-016.83E-012.22E+005.14E-012.68E+001.07E+014.11E+01 - 70K 210.004.11E-021.45E-014.61E-011.47E+003.57E-011.71E+006.45E+002.38E+01 - 70K 275.002.08E-026.75E-022.03E-016.09E-011.71E-016.95E-012.33E+007.67E+00 - 70K 360.001.08E-023.24E-029.07E-022.52E-018.31E-022.93E-018.65E-012.51E+00 - 70K 450.006.49E-031.82E-024.79E-021.24E-014.63E-021.47E-013.91E-011.02E+00 - 70K 560.004.02E-031.08E-022.65E-026.35E-022.64E-027.64E-021.85E-014.38E-01 - 70K 790.001.99E-035.01E-031.12E-022.39E-021.11E-022.87E-026.11E-021.25E-01 - 70K 1050.001.16E-032.80E-035.85E-031.14E-025.51E-031.33E-022.59E-024.77E-02 - 70K 1300.007.95E-041.85E-033.69E-036.77E-033.29E-037.68E-031.41E-022.43E-02 - 70K 1550.005.88E-041.33E-032.55E-034.49E-032.16E-034.93E-038.68E-031.43E-02 - 70L1 11.493.02E+006.71E+022.71E+041.39E+052.38E+027.51E+044.34E+065.55E+07 - 70L1 12.192.74E+004.95E+022.48E+042.33E+052.00E+025.68E+043.14E+064.80E+07 - 70L1 13.492.31E+002.91E+021.88E+043.04E+051.47E+023.52E+041.80E+063.33E+07 - 70L1 16.691.58E+009.07E+018.23E+032.20E+057.81E+011.30E+045.63E+051.24E+07 - 70L1 20.491.07E+002.75E+013.13E+031.03E+054.24E+015.01E+031.84E+054.18E+06 - 70L1 24.007.78E-011.05E+011.38E+034.92E+042.65E+012.43E+037.81E+041.73E+06 - 70L1 30.004.89E-012.64E+004.05E+021.52E+041.37E+018.83E+022.36E+044.80E+05 - 70L1 38.002.92E-017.59E-011.03E+023.90E+036.79E+003.09E+026.72E+031.21E+05 - 70L1 50.001.57E-013.47E-012.00E+017.33E+023.03E+009.33E+011.60E+032.42E+04 - 70L1 63.009.12E-022.37E-015.25E+001.72E+021.54E+003.49E+014.90E+026.30E+03 - 70L1 80.005.13E-021.57E-011.56E+003.92E+017.66E-011.29E+011.48E+021.59E+03 - 70L1 93.003.55E-021.16E-018.23E-011.60E+014.95E-016.98E+007.02E+016.75E+02 - 70L1 110.002.35E-028.03E-024.46E-016.21E+003.05E-013.56E+003.11E+012.63E+02 - 70L1 133.001.46E-025.12E-022.41E-012.34E+001.78E-011.69E+001.26E+019.23E+01 - 70L1 160.009.23E-033.23E-021.37E-019.93E-011.05E-018.35E-015.37E+003.40E+01 - 70L1 225.003.97E-031.33E-024.97E-022.45E-014.07E-022.38E-011.17E+005.76E+00 - 70L1 310.001.84E-035.77E-031.93E-027.46E-021.70E-027.77E-023.04E-011.19E+00 - 70L1 400.001.02E-033.04E-039.32E-033.08E-028.63E-033.33E-021.10E-013.62E-01 - 70L1 510.005.99E-041.70E-034.78E-031.38E-024.57E-031.54E-024.41E-021.24E-01 - 70L1 740.002.80E-047.43E-041.83E-034.44E-031.77E-035.04E-031.20E-022.75E-02 - 70L11000.001.59E-044.00E-048.99E-041.92E-038.38E-042.16E-034.54E-039.11E-03 - 70L11500.007.81E-051.83E-043.69E-046.86E-043.14E-047.43E-041.37E-032.38E-03 - 70L2 10.986.39E+003.65E+048.17E+062.15E+082.68E+013.07E+035.88E+042.72E+05 - 70L2 11.685.40E+002.68E+045.72E+061.79E+082.22E+012.43E+035.51E+044.60E+05 - 70L2 12.984.04E+001.59E+043.10E+061.17E+081.61E+011.61E+034.41E+046.15E+05 - 70L2 16.182.17E+005.31E+038.63E+053.82E+078.28E+006.89E+022.22E+044.80E+05 - 70L2 19.981.18E+001.87E+032.53E+051.15E+074.38E+003.04E+021.00E+042.49E+05 - 70L2 24.006.87E-017.59E+028.71E+043.79E+062.52E+001.49E+024.76E+031.20E+05 - 70L2 30.003.51E-012.55E+022.38E+049.51E+051.29E+006.26E+011.84E+034.44E+04 - 70L2 38.001.70E-018.07E+016.07E+032.13E+056.33E-012.50E+016.48E+021.43E+04 - 70L2 50.007.21E-022.15E+011.25E+033.69E+042.79E-018.67E+001.89E+023.59E+03 - 70L2 63.003.47E-027.14E+003.35E+028.38E+031.40E-013.56E+006.63E+011.09E+03 - 70L2 80.001.62E-022.31E+008.68E+011.82E+036.93E-021.43E+002.24E+013.12E+02 - 70L2 93.009.99E-031.15E+003.74E+016.97E+024.45E-028.07E-011.13E+011.41E+02 - 70L2 110.005.82E-035.27E-011.47E+012.41E+022.72E-024.28E-015.28E+005.85E+01 - 70L2 133.003.17E-032.21E-015.19E+007.33E+011.56E-022.10E-012.24E+002.16E+01 - 70L2 160.001.76E-039.62E-021.91E+002.33E+019.11E-031.05E-019.82E-018.25E+00 - 70L2 225.005.98E-042.14E-023.15E-012.96E+003.40E-033.03E-022.19E-011.43E+00 - 70L2 310.002.22E-045.47E-036.16E-024.56E-011.36E-039.59E-035.52E-022.89E-01 - 70L2 400.001.04E-041.92E-031.77E-021.09E-016.58E-043.92E-031.91E-028.41E-02 - 70L2 510.005.10E-057.34E-045.64E-032.96E-023.31E-041.71E-037.12E-032.70E-02 - 70L2 740.001.79E-051.81E-041.08E-034.49E-031.17E-044.94E-041.67E-035.14E-03 - 70L21000.008.04E-066.28E-053.08E-041.09E-035.04E-051.87E-045.49E-041.45E-03 - 70L21500.002.89E-061.66E-056.53E-051.91E-041.64E-055.34E-051.33E-042.98E-04 - 70L3 9.941.39E+018.30E+042.19E+076.69E+085.60E+001.05E+051.69E+082.89E+10 - 70L3 10.641.14E+015.89E+041.46E+075.22E+084.54E+007.50E+041.07E+081.71E+10 - 70L3 11.948.19E+003.29E+047.28E+063.08E+083.19E+004.22E+044.90E+077.08E+09 - 70L3 15.144.06E+009.90E+031.75E+068.43E+071.54E+001.29E+049.92E+061.16E+09 - 70L3 18.942.06E+003.20E+034.54E+052.18E+077.74E-014.23E+032.23E+062.12E+08 - 70L3 24.009.88E-019.69E+021.09E+054.87E+063.75E-011.30E+034.65E+053.57E+07 - 70L3 30.004.88E-013.15E+022.85E+041.14E+061.89E-014.29E+021.08E+056.75E+06 - 70L3 38.002.28E-019.59E+016.86E+032.38E+059.20E-021.33E+022.33E+041.18E+06 - 70L3 50.009.27E-022.43E+011.32E+033.78E+043.99E-023.40E+014.03E+031.59E+05 - 70L3 63.004.31E-027.64E+003.30E+027.93E+031.98E-021.08E+019.40E+023.02E+04 - 70L3 80.001.94E-022.33E+007.89E+011.57E+039.61E-033.33E+002.13E+025.55E+03 - 70L3 93.001.17E-021.10E+003.21E+015.68E+026.11E-031.59E+008.46E+011.93E+03 - 70L3 110.006.63E-034.83E-011.18E+011.82E+023.69E-036.97E-013.06E+016.06E+02 - 70L3 133.003.51E-031.90E-013.85E+005.05E+012.09E-032.76E-019.80E+001.66E+02 - 70L3 160.001.89E-037.72E-021.30E+001.46E+011.20E-031.12E-013.29E+004.79E+01 - 70L3 225.006.12E-041.50E-021.78E-011.51E+004.40E-042.18E-024.58E-015.12E+00 - 70L3 310.002.18E-043.34E-032.88E-021.88E-011.73E-044.79E-037.54E-026.71E-01 - 70L3 400.009.90E-051.05E-037.05E-033.75E-028.37E-051.47E-031.87E-021.40E-01 - 70L3 510.004.79E-053.63E-041.93E-038.54E-034.25E-054.89E-045.08E-033.29E-02 - 70L3 740.001.67E-057.87E-052.97E-041.01E-031.56E-059.73E-057.38E-043.88E-03 - 70L31000.007.68E-062.54E-057.43E-052.10E-047.31E-062.88E-051.65E-047.42E-04 - 70L31500.002.93E-066.54E-061.42E-053.13E-052.86E-066.76E-062.45E-058.88E-05 - 70M1 3.404.86E+002.16E+041.37E+061.59E+082.01E+037.17E+064.61E+096.52E+11 - 70M1 4.403.62E+007.46E+035.55E+053.53E+079.30E+022.02E+068.65E+081.09E+11 - 70M1 6.402.10E+001.49E+031.53E+055.39E+063.03E+023.24E+057.90E+077.96E+09 - 70M1 10.409.13E-011.61E+022.12E+049.57E+057.09E+013.10E+043.86E+062.72E+08 - 70M1 17.403.38E-011.20E+011.83E+039.07E+041.53E+012.70E+031.75E+058.08E+06 - 70M1 27.001.34E-011.11E+001.81E+028.45E+034.13E+003.53E+021.38E+044.34E+05 - 70M1 42.005.03E-021.59E-011.51E+016.25E+021.12E+004.85E+011.18E+032.51E+04 - 70M1 54.002.81E-028.20E-023.64E+001.34E+025.34E-011.62E+013.03E+025.18E+03 - 70M1 72.001.42E-024.51E-027.78E-012.27E+012.30E-014.75E+006.69E+018.88E+02 - 70M1 105.005.62E-031.97E-021.44E-012.44E+007.72E-021.01E+009.93E+009.50E+01 - 70M1 150.002.32E-038.26E-034.10E-023.75E-012.79E-022.47E-011.78E+001.26E+01 - 70M1 280.005.05E-041.63E-035.92E-032.63E-024.95E-032.50E-021.09E-014.72E-01 - 70M1 500.001.36E-043.89E-041.13E-033.40E-031.06E-033.67E-031.09E-023.17E-02 - 70M2 3.171.13E+014.07E+067.92E+091.82E+122.58E+022.57E+054.28E+071.86E+09 - 70M2 4.177.44E+001.04E+061.33E+092.71E+111.14E+027.43E+041.10E+077.02E+08 - 70M2 6.173.57E+001.47E+051.08E+081.75E+103.50E+011.30E+041.53E+061.09E+08 - 70M2 10.171.18E+001.23E+044.67E+065.41E+087.79E+001.50E+031.26E+057.81E+06 - 70M2 17.173.16E-019.22E+021.87E+051.47E+071.62E+001.67E+029.55E+034.44E+05 - 70M2 27.009.16E-021.00E+021.23E+046.73E+054.19E-012.63E+011.06E+033.62E+04 - 70M2 42.002.54E-021.18E+019.03E+023.46E+041.12E-014.50E+001.27E+023.13E+03 - 70M2 54.001.19E-023.55E+002.10E+026.51E+035.34E-021.67E+003.84E+017.82E+02 - 70M2 72.004.94E-039.11E-014.02E+019.82E+022.28E-025.45E-019.92E+001.61E+02 - 70M2 105.001.52E-031.58E-014.80E+008.56E+017.56E-031.28E-011.72E+002.07E+01 - 70M2 150.004.98E-043.11E-026.77E-019.00E+002.68E-033.35E-023.37E-013.07E+00 - 70M2 280.007.21E-052.05E-032.56E-022.08E-014.44E-043.41E-032.15E-021.23E-01 - 70M2 500.001.29E-051.94E-041.53E-038.24E-038.58E-054.51E-041.92E-037.45E-03 - 70M3 2.952.92E+018.86E+061.88E+104.51E+125.12E+011.17E+072.12E+113.99E+14 - 70M3 3.951.73E+012.05E+062.76E+095.70E+112.12E+012.72E+062.81E+103.29E+13 - 70M3 5.957.32E+002.61E+051.94E+083.11E+106.11E+003.52E+051.66E+091.04E+12 - 70M3 9.952.14E+001.96E+047.30E+068.20E+081.28E+002.70E+044.92E+071.48E+10 - 70M3 16.955.15E-011.34E+032.60E+051.95E+072.53E-011.89E+031.34E+062.04E+08 - 70M3 27.001.34E-011.30E+021.47E+047.63E+056.15E-021.86E+026.08E+045.34E+06 - 70M3 42.003.47E-021.42E+019.91E+023.57E+041.61E-022.07E+013.42E+031.86E+05 - 70M3 54.001.57E-024.05E+002.16E+026.30E+037.56E-035.95E+006.85E+022.87E+04 - 70M3 72.006.19E-039.70E-013.81E+018.69E+023.18E-031.44E+001.12E+023.53E+03 - 70M3 105.001.80E-031.50E-013.98E+006.56E+011.03E-032.24E-011.09E+012.42E+02 - 70M3 150.005.56E-042.63E-024.82E-015.83E+003.57E-043.94E-021.28E+002.07E+01 - 70M3 280.007.37E-051.34E-031.30E-029.27E-025.74E-051.98E-033.50E-023.44E-01 - 70M3 500.001.25E-059.94E-055.42E-042.45E-031.12E-051.36E-041.47E-039.79E-03 - 70M4 2.587.78E+012.75E+051.67E+102.26E+141.57E+013.69E+053.49E+092.85E+12 - 70M4 3.582.84E+015.16E+041.67E+091.29E+135.45E+007.15E+043.81E+082.42E+11 - 70M4 5.586.58E+005.37E+037.36E+072.73E+111.27E+007.68E+031.96E+078.58E+09 - 70M4 9.589.86E-013.44E+021.63E+062.65E+092.08E-015.04E+025.57E+051.52E+08 - 70M4 16.581.27E-012.10E+013.42E+042.57E+073.18E-023.17E+011.60E+042.65E+06 - 70M4 27.001.87E-021.71E+001.11E+034.41E+055.75E-032.70E+007.17E+027.57E+04 - 70M4 42.003.11E-031.75E-015.03E+011.16E+041.18E-032.90E-014.48E+013.14E+03 - 70M4 54.001.10E-034.77E-028.77E+001.51E+034.74E-048.19E-029.41E+005.23E+02 - 70M4 72.003.29E-041.07E-021.20E+001.48E+021.65E-041.93E-021.60E+006.82E+01 - 70M4 105.006.69E-051.53E-039.17E-027.36E+004.05E-052.91E-031.61E-014.87E+00 - 70M4 150.001.48E-052.47E-048.41E-034.54E-011.06E-054.93E-041.88E-024.17E-01 - 70M4 280.001.12E-061.10E-051.51E-044.08E-031.00E-062.28E-054.80E-046.35E-03 - 70M4 500.001.11E-077.05E-074.71E-066.59E-051.12E-071.38E-061.78E-051.53E-04 - 70M5 2.531.18E+023.33E+053.04E+103.69E+149.43E+003.26E+041.82E+109.87E+14 - 70M5 3.534.16E+016.03E+042.93E+091.99E+133.22E+006.21E+031.77E+095.03E+13 - 70M5 5.539.37E+006.05E+031.24E+083.99E+117.44E-016.61E+027.67E+079.20E+11 - 70M5 9.531.36E+003.74E+022.66E+063.68E+091.23E-014.38E+011.70E+067.41E+09 - 70M5 16.531.69E-012.21E+015.40E+043.40E+071.91E-022.84E+003.63E+045.91E+07 - 70M5 27.002.41E-021.73E+001.67E+035.47E+053.51E-032.51E-011.18E+038.44E+05 - 70M5 42.003.92E-031.71E-017.34E+011.37E+047.44E-042.88E-025.45E+011.95E+04 - 70M5 54.001.37E-034.54E-021.24E+011.71E+033.04E-048.48E-039.49E+002.36E+03 - 70M5 72.004.06E-049.87E-031.64E+001.60E+021.08E-042.11E-031.29E+002.15E+02 - 70M5 105.008.15E-051.34E-031.16E-017.30E+002.77E-053.48E-049.53E-029.81E+00 - 70M5 150.001.79E-052.04E-049.77E-034.05E-017.59E-066.52E-058.25E-035.58E-01 - 70M5 280.001.39E-068.48E-061.41E-042.82E-038.09E-073.84E-061.23E-044.26E-03 - 70M5 500.001.59E-075.45E-073.50E-063.34E-051.11E-073.28E-073.02E-065.50E-05 - 70N+ 50.001.97E-023.12E+002.02E+028.01E+032.17E-011.00E+014.98E+022.02E+04 - 70N+ 70.007.69E-036.08E-012.69E+017.47E+028.01E-022.24E+006.66E+011.78E+03 - 70N+ 100.002.92E-031.15E-013.42E+006.66E+012.89E-024.95E-018.92E+001.56E+02 - 70N+ 150.009.01E-041.77E-023.36E-014.54E+008.50E-039.21E-021.03E+001.18E+01 - 70N+ 200.004.40E-045.34E-037.07E-027.20E-013.97E-033.06E-022.36E-011.90E+00 - 70N+ 500.004.57E-051.92E-049.00E-043.99E-033.33E-041.23E-034.13E-031.42E-02 - 71K 64.318.98E-011.37E+004.03E-013.22E-021.13E+011.24E+022.41E+021.00E+02 - 71K 65.018.74E-011.41E+005.41E-018.63E-021.10E+011.19E+022.44E+021.33E+02 - 71K 66.318.32E-011.46E+007.98E-012.51E-011.03E+011.11E+022.47E+021.91E+02 - 71K 69.517.39E-011.53E+001.39E+009.59E-019.03E+009.31E+012.43E+023.11E+02 - 71K 73.316.45E-011.54E+001.97E+002.13E+007.73E+007.67E+012.29E+024.08E+02 - 71K 77.005.70E-011.50E+002.37E+003.34E+006.70E+006.42E+012.10E+024.58E+02 - 71K 83.004.70E-011.39E+002.73E+005.03E+005.39E+004.89E+011.77E+024.77E+02 - 71K 91.003.71E-011.20E+002.83E+006.40E+004.13E+003.50E+011.37E+024.35E+02 - 71K 103.002.69E-019.42E-012.57E+006.87E+002.89E+002.24E+019.30E+013.35E+02 - 71K 116.001.98E-017.18E-012.13E+006.24E+002.06E+001.46E+016.20E+012.38E+02 - 71K 133.001.38E-015.10E-011.59E+004.95E+001.39E+008.99E+003.80E+011.50E+02 - 71K 146.001.08E-013.99E-011.27E+004.02E+001.07E+006.46E+002.69E+011.06E+02 - 71K 163.008.15E-022.96E-019.46E-013.03E+007.85E-014.40E+001.78E+016.92E+01 - 71K 186.005.79E-022.05E-016.52E-012.08E+005.43E-012.78E+001.08E+014.07E+01 - 71K 215.003.99E-021.37E-014.27E-011.34E+003.63E-011.70E+006.25E+002.24E+01 - 71K 280.002.06E-026.54E-021.94E-015.76E-011.77E-017.06E-012.32E+007.47E+00 - 71K 365.001.09E-023.21E-028.89E-022.45E-018.70E-023.02E-018.77E-012.51E+00 - 71K 450.006.73E-031.88E-024.93E-021.27E-015.02E-021.58E-014.18E-011.08E+00 - 71K 560.004.18E-031.12E-022.75E-026.58E-022.86E-028.23E-021.98E-014.65E-01 - 71K 790.002.08E-035.24E-031.17E-022.50E-021.20E-023.09E-026.54E-021.33E-01 - 71K 1050.001.22E-032.94E-036.14E-031.20E-025.93E-031.43E-022.77E-025.09E-02 - 71K 1300.008.31E-041.95E-033.88E-037.13E-033.53E-038.25E-031.51E-022.59E-02 - 71K 1550.006.15E-041.40E-032.69E-034.73E-032.32E-035.29E-039.30E-031.53E-02 - 71L1 11.872.83E+006.25E+022.41E+041.16E+052.37E+027.16E+043.97E+064.89E+07 - 71L1 12.572.58E+004.67E+022.22E+041.95E+052.00E+025.46E+042.91E+064.25E+07 - 71L1 13.872.18E+002.79E+021.71E+042.60E+051.49E+023.43E+041.70E+063.00E+07 - 71L1 17.071.51E+009.07E+017.73E+031.96E+058.03E+011.30E+045.46E+051.16E+07 - 71L1 20.871.03E+002.86E+013.04E+039.51E+044.41E+015.11E+031.83E+054.01E+06 - 71L1 24.007.81E-011.24E+011.49E+035.05E+042.91E+012.69E+038.59E+041.85E+06 - 71L1 30.004.93E-013.19E+004.46E+021.60E+041.50E+019.79E+022.59E+045.17E+05 - 71L1 38.002.96E-018.79E-011.16E+024.20E+037.47E+003.41E+027.37E+031.31E+05 - 71L1 50.001.59E-013.57E-012.30E+018.07E+023.33E+001.03E+021.76E+032.63E+04 - 71L1 63.009.30E-022.34E-016.07E+001.93E+021.69E+003.84E+015.37E+026.84E+03 - 71L1 80.005.25E-021.54E-011.77E+004.43E+018.42E-011.42E+011.62E+021.73E+03 - 71L1 93.003.64E-021.15E-019.11E-011.81E+015.44E-017.68E+007.69E+017.34E+02 - 71L1 110.002.41E-027.99E-024.80E-017.00E+003.36E-013.92E+003.41E+012.86E+02 - 71L1 133.001.51E-025.13E-022.54E-012.60E+001.95E-011.86E+001.38E+011.00E+02 - 71L1 160.009.52E-033.26E-021.43E-011.09E+001.16E-019.16E-015.87E+003.70E+01 - 71L1 225.004.12E-031.36E-025.17E-022.63E-014.47E-022.61E-011.28E+006.26E+00 - 71L1 310.001.91E-035.95E-032.02E-027.94E-021.86E-028.49E-023.32E-011.29E+00 - 71L1 400.001.07E-033.16E-039.77E-033.27E-029.44E-033.63E-021.20E-013.93E-01 - 71L1 510.006.27E-041.77E-035.03E-031.47E-025.00E-031.68E-024.80E-021.35E-01 - 71L1 740.002.94E-047.81E-041.94E-034.73E-031.93E-035.49E-031.30E-022.98E-02 - 71L11000.001.67E-044.22E-049.55E-042.04E-039.11E-042.35E-034.92E-039.87E-03 - 71L11500.008.20E-051.94E-043.93E-047.33E-043.39E-048.06E-041.49E-032.58E-03 - 71L2 11.356.01E+003.37E+047.24E+061.83E+082.67E+012.93E+035.36E+042.32E+05 - 71L2 12.055.11E+002.50E+045.13E+061.53E+082.23E+012.33E+035.05E+043.96E+05 - 71L2 13.353.85E+001.50E+042.83E+061.02E+081.64E+011.57E+034.09E+045.37E+05 - 71L2 16.552.11E+005.17E+038.15E+053.47E+078.55E+006.85E+022.12E+044.35E+05 - 71L2 20.351.16E+001.86E+032.46E+051.07E+074.58E+003.08E+029.80E+032.33E+05 - 71L2 24.007.16E-018.28E+029.42E+044.00E+062.79E+001.62E+025.03E+031.23E+05 - 71L2 30.003.67E-012.78E+022.58E+041.01E+061.42E+006.83E+011.96E+034.62E+04 - 71L2 38.001.78E-018.81E+016.59E+032.28E+057.02E-012.73E+016.95E+021.50E+04 - 71L2 50.007.60E-022.35E+011.36E+033.96E+043.10E-019.48E+002.04E+023.81E+03 - 71L2 63.003.67E-027.81E+003.65E+029.03E+031.56E-013.90E+007.18E+011.16E+03 - 71L2 80.001.72E-022.53E+009.46E+011.97E+037.70E-021.57E+002.43E+013.35E+02 - 71L2 93.001.06E-021.25E+004.08E+017.55E+024.95E-028.86E-011.23E+011.52E+02 - 71L2 110.006.21E-035.78E-011.61E+012.61E+023.02E-024.70E-015.75E+006.32E+01 - 71L2 133.003.39E-032.43E-015.68E+007.97E+011.74E-022.31E-012.45E+002.34E+01 - 71L2 160.001.88E-031.05E-012.09E+002.54E+011.02E-021.16E-011.07E+008.96E+00 - 71L2 225.006.45E-042.35E-023.46E-013.24E+003.80E-033.34E-022.40E-011.56E+00 - 71L2 310.002.41E-046.02E-036.78E-025.01E-011.52E-031.06E-026.08E-023.17E-01 - 71L2 400.001.12E-042.12E-031.95E-021.20E-017.37E-044.36E-032.10E-029.25E-02 - 71L2 510.005.53E-058.11E-046.23E-033.26E-023.71E-041.90E-037.88E-032.97E-02 - 71L2 740.001.97E-052.01E-041.19E-034.97E-031.31E-045.51E-041.86E-035.68E-03 - 71L21000.008.75E-066.96E-053.42E-041.21E-035.67E-052.10E-046.12E-041.61E-03 - 71L21500.003.18E-061.85E-057.27E-052.13E-041.84E-055.98E-051.49E-043.32E-04 - 71L3 10.241.31E+017.71E+041.96E+075.79E+085.46E+001.01E+051.57E+082.60E+10 - 71L3 10.941.09E+015.52E+041.32E+074.55E+084.46E+007.29E+041.01E+081.57E+10 - 71L3 12.247.85E+003.13E+046.71E+062.73E+083.16E+004.16E+044.71E+076.62E+09 - 71L3 15.443.95E+009.68E+031.66E+067.74E+071.55E+001.31E+049.87E+061.13E+09 - 71L3 19.242.03E+003.19E+034.43E+052.06E+077.88E-014.37E+032.27E+062.12E+08 - 71L3 24.001.03E+001.05E+031.17E+055.11E+064.00E-011.45E+035.27E+054.03E+07 - 71L3 30.005.07E-013.40E+023.06E+041.20E+062.02E-014.79E+021.22E+057.60E+06 - 71L3 38.002.37E-011.04E+027.37E+032.52E+059.83E-021.48E+022.63E+041.32E+06 - 71L3 50.009.69E-022.62E+011.42E+034.01E+044.26E-023.79E+014.54E+031.79E+05 - 71L3 63.004.51E-028.25E+003.54E+028.44E+032.11E-021.21E+011.06E+033.38E+04 - 71L3 80.002.03E-022.52E+008.48E+011.68E+031.03E-023.71E+002.39E+026.21E+03 - 71L3 93.001.23E-021.19E+003.45E+016.05E+026.53E-031.77E+009.50E+012.16E+03 - 71L3 110.006.98E-035.21E-011.27E+011.95E+023.94E-037.77E-013.43E+016.77E+02 - 71L3 133.003.70E-032.05E-014.14E+005.40E+012.23E-033.07E-011.10E+011.85E+02 - 71L3 160.002.00E-038.35E-021.39E+001.56E+011.29E-031.25E-013.68E+005.34E+01 - 71L3 225.006.49E-041.62E-021.92E-011.62E+004.71E-042.42E-025.11E-015.71E+00 - 71L3 310.002.32E-043.61E-033.11E-022.02E-011.85E-045.31E-038.40E-027.46E-01 - 71L3 400.001.05E-041.13E-037.60E-034.03E-028.95E-051.63E-032.08E-021.56E-01 - 71L3 510.005.11E-053.92E-042.08E-039.19E-034.54E-055.40E-045.65E-033.65E-02 - 71L3 740.001.78E-058.47E-053.20E-041.09E-031.67E-051.07E-048.18E-044.30E-03 - 71L31000.008.13E-062.73E-058.00E-052.26E-047.79E-063.15E-051.82E-048.21E-04 - 71L31500.003.12E-067.01E-061.52E-053.38E-053.04E-067.32E-062.70E-059.81E-05 - 71M1 3.494.63E+002.11E+041.36E+061.40E+082.04E+037.06E+064.42E+096.08E+11 - 71M1 4.493.48E+007.45E+035.54E+053.37E+079.65E+022.05E+068.62E+081.06E+11 - 71M1 6.492.04E+001.54E+031.54E+055.39E+063.20E+023.39E+058.19E+078.10E+09 - 71M1 10.499.00E-011.72E+022.18E+049.57E+057.62E+013.33E+044.13E+062.87E+08 - 71M1 17.493.37E-011.35E+011.95E+039.36E+041.66E+012.95E+031.91E+058.72E+06 - 71M1 27.001.36E-011.33E+002.02E+029.14E+034.56E+003.95E+021.54E+044.83E+05 - 71M1 42.005.13E-021.76E-011.73E+016.93E+021.23E+005.40E+011.31E+032.78E+04 - 71M1 54.002.87E-028.50E-024.21E+001.50E+025.90E-011.80E+013.36E+025.73E+03 - 71M1 72.001.45E-024.53E-028.97E-012.58E+012.54E-015.27E+007.41E+019.80E+02 - 71M1 105.005.79E-031.98E-021.60E-012.77E+008.52E-021.11E+001.10E+011.05E+02 - 71M1 150.002.41E-038.38E-034.38E-024.20E-013.08E-022.73E-011.96E+001.38E+01 - 71M1 280.005.27E-041.69E-036.24E-032.85E-025.45E-032.75E-021.20E-015.17E-01 - 71M1 500.001.43E-044.08E-041.19E-033.64E-031.17E-034.02E-031.19E-023.46E-02 - 71M2 3.261.07E+013.87E+067.30E+091.63E+122.63E+022.53E+054.07E+071.67E+09 - 71M2 4.267.15E+001.02E+061.28E+092.54E+111.18E+027.52E+041.08E+076.59E+08 - 71M2 6.263.50E+001.50E+051.09E+081.73E+103.72E+011.36E+041.56E+061.07E+08 - 71M2 10.261.18E+001.29E+044.85E+065.54E+088.43E+001.60E+031.32E+057.99E+06 - 71M2 17.263.23E-019.85E+021.99E+051.54E+071.77E+001.80E+021.02E+044.65E+05 - 71M2 27.009.56E-021.10E+021.35E+047.33E+054.66E-012.90E+011.16E+033.92E+04 - 71M2 42.002.68E-021.30E+019.90E+023.77E+041.25E-014.96E+001.39E+023.40E+03 - 71M2 54.001.26E-023.90E+002.30E+027.10E+035.95E-021.84E+004.21E+018.49E+02 - 71M2 72.005.25E-031.00E+004.41E+011.07E+032.55E-026.03E-011.09E+011.75E+02 - 71M2 105.001.63E-031.73E-015.28E+009.37E+018.45E-031.42E-011.89E+002.26E+01 - 71M2 150.005.35E-043.43E-027.46E-019.87E+003.00E-033.71E-023.71E-013.36E+00 - 71M2 280.007.80E-052.27E-032.83E-022.29E-014.99E-043.80E-032.38E-021.35E-01 - 71M2 500.001.42E-052.16E-041.70E-039.13E-039.67E-055.04E-042.14E-038.27E-03 - 71M3 3.022.80E+018.49E+061.76E+104.10E+125.10E+011.16E+072.05E+113.79E+14 - 71M3 4.021.68E+012.03E+062.69E+095.41E+112.15E+012.79E+062.84E+103.29E+13 - 71M3 6.027.22E+002.66E+051.96E+083.07E+106.32E+003.72E+051.75E+091.09E+12 - 71M3 10.022.15E+002.05E+047.59E+068.38E+081.34E+002.92E+045.36E+071.61E+10 - 71M3 17.025.25E-011.43E+032.75E+052.04E+072.68E-012.08E+031.49E+062.26E+08 - 71M3 27.001.39E-011.41E+021.59E+048.20E+056.61E-022.09E+026.94E+046.11E+06 - 71M3 42.003.63E-021.54E+011.07E+033.84E+041.73E-022.33E+013.89E+032.11E+05 - 71M3 54.001.64E-024.40E+002.34E+026.77E+038.13E-036.69E+007.78E+023.26E+04 - 71M3 72.006.51E-031.05E+004.13E+019.34E+023.42E-031.61E+001.27E+023.99E+03 - 71M3 105.001.90E-031.64E-014.32E+007.06E+011.11E-032.52E-011.23E+012.73E+02 - 71M3 150.005.90E-042.86E-025.22E-016.29E+003.84E-044.42E-021.45E+002.33E+01 - 71M3 280.007.84E-051.46E-031.41E-021.00E-016.18E-052.21E-033.93E-023.86E-01 - 71M3 500.001.34E-051.08E-045.89E-042.66E-031.20E-051.51E-041.64E-031.09E-02 - 71M4 2.647.52E+012.65E+051.58E+102.10E+141.58E+013.71E+053.42E+092.73E+12 - 71M4 3.642.80E+015.15E+041.66E+091.26E+135.59E+007.43E+043.91E+082.43E+11 - 71M4 5.646.68E+005.54E+037.61E+072.83E+111.33E+008.23E+032.09E+079.02E+09 - 71M4 9.641.02E+003.63E+021.74E+062.86E+092.22E-015.54E+026.12E+051.65E+08 - 71M4 16.641.34E-012.25E+013.73E+042.83E+073.44E-023.53E+011.79E+042.94E+06 - 71M4 27.002.02E-021.88E+001.24E+035.00E+056.32E-033.06E+008.19E+028.61E+04 - 71M4 42.003.37E-031.93E-015.64E+011.32E+041.30E-033.30E-015.11E+013.57E+03 - 71M4 54.001.19E-035.27E-029.83E+001.71E+035.23E-049.31E-021.07E+015.94E+02 - 71M4 72.003.59E-041.19E-021.35E+001.68E+021.82E-042.19E-021.82E+007.76E+01 - 71M4 105.007.32E-051.70E-031.03E-018.34E+004.49E-053.32E-031.83E-015.54E+00 - 71M4 150.001.63E-052.76E-049.45E-035.15E-011.18E-055.62E-042.15E-024.76E-01 - 71M4 280.001.23E-061.24E-051.70E-044.63E-031.12E-062.60E-055.49E-047.25E-03 - 71M4 500.001.18E-078.01E-075.30E-067.49E-051.25E-071.58E-062.04E-051.76E-04 - 71M5 2.591.14E+023.18E+052.88E+103.42E+149.42E+003.21E+041.78E+109.46E+14 - 71M5 3.594.12E+015.95E+042.91E+091.95E+133.29E+006.31E+031.82E+095.12E+13 - 71M5 5.599.49E+006.16E+031.29E+084.13E+117.77E-016.93E+028.23E+079.89E+11 - 71M5 9.591.40E+003.91E+022.86E+063.96E+091.30E-014.70E+011.89E+068.29E+09 - 71M5 16.591.78E-012.35E+015.92E+043.73E+072.05E-023.09E+004.10E+046.75E+07 - 71M5 27.002.59E-021.88E+001.88E+036.18E+053.83E-032.78E-011.37E+039.93E+05 - 71M5 42.004.25E-031.86E-018.26E+011.55E+048.13E-043.19E-026.31E+012.29E+04 - 71M5 54.001.49E-034.94E-021.40E+011.93E+033.33E-049.38E-031.10E+012.76E+03 - 71M5 72.004.42E-041.08E-021.84E+001.81E+021.19E-042.33E-031.49E+002.52E+02 - 71M5 105.008.92E-051.46E-031.31E-018.24E+003.04E-053.85E-041.10E-011.14E+01 - 71M5 150.001.98E-052.25E-041.10E-024.57E-018.35E-067.21E-059.52E-036.49E-01 - 71M5 280.001.54E-069.30E-061.58E-043.18E-038.92E-074.25E-061.41E-044.93E-03 - 71M5 500.001.72E-075.96E-073.91E-063.77E-051.23E-073.64E-073.43E-066.34E-05 - 71N+ 50.002.06E-023.45E+002.24E+028.99E+032.41E-011.12E+015.69E+022.34E+04 - 71N+ 70.008.07E-036.74E-012.99E+018.35E+028.91E-022.51E+007.58E+012.05E+03 - 71N+ 100.003.07E-031.27E-013.79E+007.41E+013.21E-025.54E-011.01E+011.78E+02 - 71N+ 150.009.37E-041.92E-023.68E-014.98E+009.34E-031.02E-011.15E+001.32E+01 - 71N+ 200.004.63E-045.84E-037.84E-028.00E-014.40E-033.40E-022.64E-012.14E+00 - 71N+ 500.004.86E-052.08E-049.91E-044.42E-033.68E-041.36E-034.58E-031.58E-02 - 72K 66.358.43E-011.24E+003.50E-012.65E-021.13E+011.18E+022.22E+028.91E+01 - 72K 67.058.22E-011.27E+004.67E-017.04E-021.09E+011.14E+022.24E+021.17E+02 - 72K 68.357.83E-011.32E+006.85E-012.03E-011.03E+011.06E+022.27E+021.67E+02 - 72K 71.556.98E-011.38E+001.19E+007.77E-019.03E+008.97E+012.25E+022.72E+02 - 72K 75.356.12E-011.39E+001.69E+001.74E+007.77E+007.43E+012.12E+023.59E+02 - 72K 79.005.43E-011.36E+002.04E+002.73E+006.77E+006.26E+011.96E+024.06E+02 - 72K 85.004.51E-011.27E+002.38E+004.18E+005.48E+004.80E+011.66E+024.27E+02 - 72K 93.003.58E-011.11E+002.49E+005.41E+004.23E+003.47E+011.31E+023.96E+02 - 72K 105.002.62E-018.77E-012.30E+005.93E+002.98E+002.24E+018.98E+013.11E+02 - 72K 118.001.93E-016.76E-011.93E+005.50E+002.13E+001.48E+016.06E+012.24E+02 - 72K 135.001.36E-014.85E-011.47E+004.45E+001.45E+009.16E+003.76E+011.43E+02 - 72K 148.001.07E-013.82E-011.18E+003.66E+001.12E+006.62E+002.68E+011.03E+02 - 72K 165.008.11E-022.86E-018.92E-012.80E+008.25E-014.53E+001.79E+016.77E+01 - 72K 188.005.79E-022.00E-016.23E-011.96E+005.73E-012.89E+001.10E+014.03E+01 - 72K 215.004.11E-021.38E-014.24E-011.32E+003.95E-011.83E+006.62E+002.33E+01 - 72K 280.002.13E-026.66E-021.95E-015.76E-011.92E-017.59E-012.46E+007.84E+00 - 72K 365.001.13E-023.29E-029.07E-022.49E-019.43E-023.25E-019.34E-012.64E+00 - 72K 460.006.65E-031.84E-024.78E-021.22E-015.14E-021.59E-014.13E-011.05E+00 - 72K 570.004.19E-031.11E-022.72E-026.46E-022.95E-028.41E-022.00E-014.61E-01 - 72K 800.002.11E-035.32E-031.19E-022.53E-021.25E-023.21E-026.72E-021.35E-01 - 72K 1050.001.27E-033.08E-036.45E-031.26E-026.39E-031.54E-022.97E-025.42E-02 - 72K 1300.008.69E-042.04E-034.08E-037.50E-033.80E-038.86E-031.61E-022.77E-02 - 72K 1550.006.43E-041.47E-032.84E-034.99E-032.49E-035.68E-039.96E-031.63E-02 - 72L1 12.272.65E+005.81E+022.14E+049.61E+042.36E+026.80E+043.62E+064.28E+07 - 72L1 12.972.42E+004.39E+021.98E+041.64E+052.00E+025.23E+042.68E+063.76E+07 - 72L1 14.272.06E+002.68E+021.54E+042.21E+051.50E+023.33E+041.59E+062.69E+07 - 72L1 17.471.44E+009.03E+017.24E+031.74E+058.23E+011.29E+045.28E+051.07E+07 - 72L1 21.279.94E-012.97E+012.93E+038.76E+044.58E+015.19E+031.81E+053.83E+06 - 72L1 25.007.22E-011.14E+011.30E+034.24E+042.84E+012.48E+037.56E+041.57E+06 - 72L1 31.004.63E-013.15E+004.09E+021.41E+041.50E+019.35E+022.38E+044.60E+05 - 72L1 39.002.82E-019.09E-011.12E+023.88E+037.60E+003.37E+027.05E+031.21E+05 - 72L1 51.001.55E-013.57E-012.34E+017.85E+023.45E+001.05E+021.74E+032.54E+04 - 72L1 64.009.12E-022.27E-016.42E+001.95E+021.77E+003.97E+015.43E+026.78E+03 - 72L1 81.005.20E-021.49E-011.89E+004.63E+018.92E-011.48E+011.66E+021.75E+03 - 72L1 94.003.63E-021.11E-019.69E-011.92E+015.80E-018.09E+007.98E+017.51E+02 - 72L1 111.002.42E-027.80E-025.04E-017.51E+003.59E-014.15E+003.56E+012.96E+02 - 72L1 134.001.52E-025.06E-022.64E-012.80E+002.10E-011.98E+001.46E+011.05E+02 - 72L1 160.009.81E-033.29E-021.50E-011.20E+001.27E-011.00E+006.40E+004.02E+01 - 72L1 225.004.26E-031.39E-025.39E-022.83E-014.90E-022.85E-011.40E+006.79E+00 - 72L1 310.001.98E-036.15E-032.11E-028.47E-022.04E-029.27E-023.61E-011.40E+00 - 72L1 400.001.11E-033.28E-031.03E-023.48E-021.03E-023.96E-021.31E-014.26E-01 - 72L1 510.006.55E-041.86E-035.30E-031.56E-025.46E-031.83E-025.22E-021.46E-01 - 72L1 740.003.08E-048.22E-042.06E-035.04E-032.10E-035.97E-031.41E-023.23E-02 - 72L11000.001.75E-044.46E-041.01E-032.18E-039.90E-042.56E-035.34E-031.07E-02 - 72L11500.008.62E-052.05E-044.18E-047.82E-043.67E-048.74E-041.61E-032.79E-03 - 72L2 11.745.64E+003.10E+046.38E+061.55E+082.67E+012.78E+034.87E+041.97E+05 - 72L2 12.444.82E+002.32E+044.58E+061.31E+082.24E+012.23E+034.61E+043.38E+05 - 72L2 13.743.67E+001.42E+042.58E+068.84E+071.66E+011.52E+033.78E+044.67E+05 - 72L2 16.942.05E+005.02E+037.67E+053.13E+078.81E+006.79E+022.01E+043.93E+05 - 72L2 20.741.14E+001.85E+032.37E+051.00E+074.79E+003.11E+029.52E+032.17E+05 - 72L2 25.006.61E-017.38E+028.03E+043.28E+062.73E+001.51E+024.49E+031.06E+05 - 72L2 31.003.48E-012.58E+022.31E+048.72E+051.43E+006.55E+011.81E+034.12E+04 - 72L2 39.001.73E-018.47E+016.15E+032.06E+057.20E-012.70E+016.64E+021.39E+04 - 72L2 51.007.52E-022.33E+011.32E+033.74E+043.24E-019.60E+002.01E+023.66E+03 - 72L2 64.003.69E-027.91E+003.63E+028.79E+031.65E-014.02E+007.22E+011.14E+03 - 72L2 81.001.75E-022.61E+009.61E+011.96E+038.25E-021.64E+002.49E+013.37E+02 - 72L2 94.001.09E-021.31E+004.19E+017.63E+025.33E-029.34E-011.27E+011.55E+02 - 72L2 111.006.42E-036.06E-011.67E+012.68E+023.28E-024.99E-016.01E+006.50E+01 - 72L2 134.003.53E-032.57E-015.96E+008.26E+011.89E-022.47E-012.58E+002.44E+01 - 72L2 160.002.01E-031.16E-012.29E+002.77E+011.13E-021.28E-011.17E+009.72E+00 - 72L2 225.006.93E-042.59E-023.80E-013.54E+004.24E-033.69E-022.63E-011.70E+00 - 72L2 310.002.60E-046.63E-037.46E-025.49E-011.70E-031.18E-026.69E-023.47E-01 - 72L2 400.001.21E-042.34E-032.15E-021.32E-018.25E-044.83E-032.32E-021.01E-01 - 72L2 510.006.01E-058.96E-046.88E-033.59E-024.16E-042.11E-038.71E-033.27E-02 - 72L2 740.002.14E-052.22E-041.32E-035.49E-031.47E-046.15E-042.06E-036.28E-03 - 72L21000.009.61E-067.72E-053.80E-041.34E-036.37E-052.34E-046.81E-041.79E-03 - 72L21500.003.48E-062.05E-058.09E-052.37E-042.07E-056.70E-051.66E-043.69E-04 - 72L3 10.561.24E+017.13E+041.74E+074.96E+085.31E+009.71E+041.45E+082.32E+10 - 72L3 11.261.03E+015.16E+041.19E+073.94E+084.36E+007.06E+049.41E+071.42E+10 - 72L3 12.567.50E+002.97E+046.16E+062.41E+083.11E+004.09E+044.49E+076.14E+09 - 72L3 15.763.84E+009.43E+031.58E+067.06E+071.55E+001.32E+049.76E+061.09E+09 - 72L3 19.562.00E+003.17E+034.30E+051.94E+078.00E-014.49E+032.31E+062.11E+08 - 72L3 25.009.36E-019.19E+029.81E+044.12E+063.77E-011.32E+034.55E+053.33E+07 - 72L3 31.004.75E-013.11E+022.69E+041.02E+061.95E-014.54E+021.11E+056.70E+06 - 72L3 39.002.27E-019.81E+016.75E+032.24E+059.70E-021.45E+022.51E+041.23E+06 - 72L3 51.009.48E-022.56E+011.35E+033.72E+044.29E-023.83E+014.51E+031.73E+05 - 72L3 64.004.48E-028.24E+003.46E+028.06E+032.15E-021.25E+011.08E+033.38E+04 - 72L3 81.002.05E-022.55E+008.45E+011.64E+031.06E-023.89E+002.49E+026.36E+03 - 72L3 94.001.24E-021.22E+003.48E+016.00E+026.75E-031.87E+009.97E+012.24E+03 - 72L3 111.007.12E-035.38E-011.30E+011.95E+024.10E-038.28E-013.63E+017.10E+02 - 72L3 134.003.80E-032.14E-014.26E+005.48E+012.33E-033.30E-011.17E+011.96E+02 - 72L3 160.002.10E-039.01E-021.50E+001.67E+011.38E-031.39E-014.11E+005.95E+01 - 72L3 225.006.87E-041.75E-022.07E-011.73E+005.03E-042.69E-025.69E-016.35E+00 - 72L3 310.002.46E-043.90E-033.35E-022.16E-011.98E-045.89E-039.35E-028.29E-01 - 72L3 400.001.12E-041.22E-038.19E-034.33E-029.56E-051.80E-032.31E-021.73E-01 - 72L3 510.005.40E-054.23E-042.24E-039.88E-034.85E-055.95E-046.27E-034.05E-02 - 72L3 740.001.88E-059.12E-053.45E-041.18E-031.78E-051.17E-049.06E-044.77E-03 - 72L31000.008.59E-062.93E-058.61E-052.43E-048.29E-063.44E-052.01E-049.09E-04 - 72L31500.003.33E-067.50E-061.64E-053.64E-053.23E-067.92E-062.96E-051.08E-04 - 72M1 3.604.35E+002.02E+041.31E+061.18E+082.06E+036.81E+064.11E+095.46E+11 - 72M1 4.603.30E+007.33E+035.41E+053.13E+079.91E+022.05E+068.39E+081.00E+11 - 72M1 6.601.97E+001.57E+031.52E+055.30E+063.36E+023.51E+058.35E+078.06E+09 - 72M1 10.608.83E-011.83E+022.22E+049.46E+058.16E+013.55E+044.37E+062.98E+08 - 72M1 17.603.35E-011.51E+012.05E+039.57E+041.80E+013.20E+032.06E+059.31E+06 - 72M1 27.001.38E-011.57E+002.24E+029.85E+035.04E+004.40E+021.72E+045.37E+05 - 72M1 42.005.22E-021.97E-011.98E+017.65E+021.36E+006.01E+011.45E+033.08E+04 - 72M1 54.002.93E-028.94E-024.86E+001.68E+026.51E-012.00E+013.73E+026.33E+03 - 72M1 72.001.49E-024.58E-021.03E+002.92E+012.80E-015.84E+008.19E+011.08E+03 - 72M1 105.005.96E-032.00E-021.78E-013.16E+009.40E-021.23E+001.21E+011.15E+02 - 72M1 150.002.49E-038.51E-034.71E-024.71E-013.40E-023.01E-012.15E+001.52E+01 - 72M1 280.005.49E-041.75E-036.58E-033.08E-025.99E-033.03E-021.31E-015.66E-01 - 72M1 500.001.49E-044.29E-041.27E-033.91E-031.28E-034.41E-031.30E-023.77E-02 - 72M2 3.361.00E+013.63E+066.62E+091.42E+122.66E+022.45E+053.80E+071.47E+09 - 72M2 4.366.83E+009.93E+051.22E+092.34E+111.22E+027.53E+041.05E+076.09E+08 - 72M2 6.363.41E+001.52E+051.08E+081.68E+103.93E+011.40E+041.57E+061.04E+08 - 72M2 10.361.18E+001.34E+045.02E+065.62E+089.09E+001.70E+031.38E+058.10E+06 - 72M2 17.363.28E-011.05E+032.10E+051.61E+071.94E+001.94E+021.08E+044.84E+05 - 72M2 27.009.96E-021.21E+021.47E+047.96E+055.19E-013.20E+011.26E+034.23E+04 - 72M2 42.002.81E-021.42E+011.09E+034.10E+041.39E-015.47E+001.52E+023.68E+03 - 72M2 54.001.33E-024.28E+002.52E+027.73E+036.64E-022.03E+004.60E+019.21E+02 - 72M2 72.005.57E-031.10E+004.84E+011.17E+032.85E-026.65E-011.19E+011.91E+02 - 72M2 105.001.74E-031.91E-015.80E+001.02E+029.45E-031.57E-012.07E+002.46E+01 - 72M2 150.005.74E-043.78E-028.21E-011.08E+013.36E-034.11E-024.09E-013.68E+00 - 72M2 280.008.46E-052.51E-033.13E-022.52E-015.61E-044.23E-032.63E-021.49E-01 - 72M2 500.001.55E-052.39E-041.89E-031.01E-021.09E-045.64E-042.38E-039.16E-03 - 72M3 3.112.67E+018.02E+061.61E+103.63E+125.03E+011.14E+071.94E+113.50E+14 - 72M3 4.111.62E+011.98E+062.57E+095.03E+112.17E+012.83E+062.82E+103.22E+13 - 72M3 6.117.10E+002.69E+051.95E+083.00E+106.50E+003.90E+051.83E+091.13E+12 - 72M3 10.112.15E+002.14E+047.83E+068.49E+081.40E+003.15E+045.80E+071.74E+10 - 72M3 17.115.34E-011.51E+032.89E+052.11E+072.84E-012.28E+031.65E+062.50E+08 - 72M3 27.001.44E-011.53E+021.73E+048.79E+057.09E-022.35E+027.91E+046.98E+06 - 72M3 42.003.79E-021.67E+011.16E+034.12E+041.86E-022.61E+014.42E+032.40E+05 - 72M3 54.001.72E-024.78E+002.53E+027.26E+038.73E-037.51E+008.82E+023.70E+04 - 72M3 72.006.85E-031.14E+004.47E+011.00E+033.68E-031.81E+001.44E+024.52E+03 - 72M3 105.002.00E-031.78E-014.67E+007.59E+011.19E-032.83E-011.39E+013.08E+02 - 72M3 150.006.23E-043.11E-025.66E-016.77E+004.12E-044.95E-021.63E+002.63E+01 - 72M3 280.008.36E-051.59E-031.53E-021.08E-016.64E-052.47E-034.41E-024.33E-01 - 72M3 500.001.43E-051.17E-046.39E-042.88E-031.29E-051.68E-041.84E-031.22E-02 - 72M4 2.727.16E+012.49E+051.44E+101.86E+141.56E+013.64E+053.23E+092.50E+12 - 72M4 3.722.74E+015.04E+041.59E+091.20E+135.66E+007.57E+043.90E+082.36E+11 - 72M4 5.726.71E+005.63E+037.72E+072.86E+111.38E+008.71E+032.19E+079.28E+09 - 72M4 9.721.05E+003.81E+021.84E+063.03E+092.36E-016.03E+026.64E+051.77E+08 - 72M4 16.721.41E-012.41E+014.03E+043.09E+073.70E-023.91E+011.98E+043.22E+06 - 72M4 27.002.18E-022.07E+001.39E+035.66E+056.93E-033.48E+009.33E+029.77E+04 - 72M4 42.003.66E-032.13E-016.31E+011.49E+041.43E-033.75E-015.82E+014.05E+03 - 72M4 54.001.30E-035.82E-021.10E+011.93E+035.77E-041.06E-011.22E+016.74E+02 - 72M4 72.003.91E-041.32E-021.51E+001.90E+022.01E-042.49E-022.08E+008.80E+01 - 72M4 105.008.08E-051.89E-031.15E-019.44E+004.97E-053.77E-032.09E-016.30E+00 - 72M4 150.001.81E-053.08E-041.06E-025.83E-011.31E-056.40E-042.45E-025.41E-01 - 72M4 280.001.35E-061.39E-051.90E-045.25E-031.24E-062.96E-056.27E-048.26E-03 - 72M4 500.001.38E-078.99E-075.96E-068.51E-051.39E-071.80E-062.33E-052.01E-04 - 72M5 2.661.08E+022.96E+052.65E+103.05E+149.29E+003.09E+041.70E+108.73E+14 - 72M5 3.664.03E+015.77E+042.83E+091.87E+133.33E+006.31E+031.83E+095.06E+13 - 72M5 5.669.55E+006.20E+031.32E+084.20E+118.04E-017.18E+028.69E+071.04E+12 - 72M5 9.661.45E+004.05E+023.03E+064.20E+091.37E-015.01E+012.07E+069.15E+09 - 72M5 16.661.87E-012.48E+016.43E+044.06E+072.19E-023.34E+004.60E+047.65E+07 - 72M5 27.002.79E-022.03E+002.11E+036.98E+054.17E-033.07E-011.58E+031.17E+06 - 72M5 42.004.59E-032.02E-019.27E+011.75E+048.88E-043.52E-027.29E+012.68E+04 - 72M5 54.001.61E-035.38E-021.57E+012.18E+033.64E-041.04E-021.27E+013.23E+03 - 72M5 72.004.79E-041.18E-022.07E+002.04E+021.30E-042.58E-031.72E+002.94E+02 - 72M5 105.009.71E-051.60E-031.47E-019.28E+003.34E-054.25E-041.27E-011.33E+01 - 72M5 150.002.15E-052.47E-041.23E-025.15E-019.18E-067.96E-051.10E-027.54E-01 - 72M5 280.001.66E-061.02E-051.78E-043.58E-039.83E-074.70E-061.62E-045.70E-03 - 72M5 500.001.86E-076.56E-074.36E-064.24E-051.35E-074.02E-073.90E-067.30E-05 - 72N+ 50.002.17E-023.82E+002.48E+021.00E+042.71E-011.27E+016.52E+022.71E+04 - 72N+ 70.008.52E-037.45E-013.32E+019.27E+021.00E-012.84E+008.65E+012.35E+03 - 72N+ 100.003.24E-031.41E-014.21E+008.22E+013.60E-026.24E-011.14E+012.03E+02 - 72N+ 150.001.07E-032.23E-024.21E-015.60E+001.12E-021.18E-011.29E+001.43E+01 - 72N+ 200.004.93E-046.42E-038.71E-028.89E-014.94E-033.82E-022.98E-012.42E+00 - 72N+ 500.005.19E-052.26E-041.10E-034.92E-034.11E-041.52E-035.11E-031.77E-02 - 73K 68.427.92E-011.11E+003.05E-012.19E-021.12E+011.13E+022.04E+027.93E+01 - 73K 69.127.73E-011.14E+004.05E-015.78E-021.09E+011.09E+022.07E+021.04E+02 - 73K 70.427.38E-011.19E+005.90E-011.66E-011.03E+011.02E+022.09E+021.47E+02 - 73K 73.626.60E-011.24E+001.02E+006.33E-019.05E+008.64E+012.08E+022.40E+02 - 73K 77.425.81E-011.26E+001.45E+001.42E+007.81E+007.20E+011.97E+023.17E+02 - 73K 81.005.18E-011.24E+001.76E+002.24E+006.85E+006.12E+011.83E+023.60E+02 - 73K 87.004.32E-011.16E+002.07E+003.48E+005.57E+004.73E+011.57E+023.84E+02 - 73K 95.003.46E-011.02E+002.20E+004.58E+004.32E+003.44E+011.24E+023.61E+02 - 73K 107.002.55E-018.17E-012.06E+005.14E+003.07E+002.25E+018.67E+012.88E+02 - 73K 120.001.89E-016.36E-011.76E+004.85E+002.21E+001.49E+015.92E+012.11E+02 - 73K 137.001.34E-014.62E-011.36E+004.01E+001.52E+009.33E+003.72E+011.37E+02 - 73K 150.001.06E-013.66E-011.10E+003.35E+001.17E+006.79E+002.68E+019.93E+01 - 73K 167.008.07E-022.76E-018.42E-012.60E+008.67E-014.67E+001.80E+016.63E+01 - 73K 190.005.79E-021.95E-015.96E-011.84E+006.04E-012.99E+001.11E+013.99E+01 - 73K 215.004.23E-021.39E-014.21E-011.29E+004.29E-011.96E+007.00E+002.43E+01 - 73K 280.002.19E-026.77E-021.97E-015.77E-012.08E-018.17E-012.61E+008.22E+00 - 73K 365.001.17E-023.37E-029.26E-022.53E-011.02E-013.49E-019.95E-012.79E+00 - 73K 460.006.90E-031.90E-024.92E-021.25E-015.56E-021.71E-014.41E-011.11E+00 - 73K 570.004.35E-031.15E-022.82E-026.69E-023.19E-029.04E-022.13E-014.89E-01 - 73K 800.002.20E-035.56E-031.24E-022.64E-021.35E-023.45E-027.19E-021.44E-01 - 73K 1050.001.33E-033.23E-036.77E-031.32E-026.88E-031.66E-023.17E-025.78E-02 - 73K 1300.009.07E-042.14E-034.30E-037.90E-034.08E-039.52E-031.73E-022.95E-02 - 73K 1550.006.71E-041.54E-032.99E-035.26E-032.67E-036.10E-031.07E-021.74E-02 - 73L1 12.682.48E+005.41E+021.90E+048.01E+042.35E+026.47E+043.31E+063.76E+07 - 73L1 13.382.28E+004.13E+021.77E+041.37E+052.01E+025.02E+042.47E+063.32E+07 - 73L1 14.681.95E+002.56E+021.40E+041.89E+051.52E+023.24E+041.49E+062.42E+07 - 73L1 17.881.38E+008.98E+016.78E+031.54E+058.44E+011.29E+045.10E+059.96E+06 - 73L1 21.689.58E-013.06E+012.83E+038.05E+044.76E+015.27E+031.79E+053.66E+06 - 73L1 25.007.24E-011.34E+011.40E+034.33E+043.12E+012.74E+038.29E+041.67E+06 - 73L1 31.004.66E-013.77E+004.48E+021.48E+041.65E+011.04E+032.61E+044.94E+05 - 73L1 39.002.85E-011.06E+001.25E+024.15E+038.35E+003.72E+027.73E+031.31E+05 - 73L1 51.001.57E-013.80E-012.67E+018.58E+023.79E+001.15E+021.90E+032.75E+04 - 73L1 64.009.29E-022.28E-017.38E+002.17E+021.95E+004.37E+015.94E+027.35E+03 - 73L1 81.005.31E-021.48E-012.15E+005.21E+019.80E-011.63E+011.82E+021.90E+03 - 73L1 94.003.71E-021.10E-011.08E+002.16E+016.37E-018.89E+008.72E+018.15E+02 - 73L1 111.002.48E-027.78E-025.51E-018.45E+003.94E-014.56E+003.89E+013.21E+02 - 73L1 134.001.56E-025.08E-022.82E-013.12E+002.30E-012.17E+001.59E+011.14E+02 - 73L1 160.001.01E-023.32E-021.59E-011.32E+001.39E-011.10E+006.98E+004.36E+01 - 73L1 225.004.40E-031.42E-025.64E-023.06E-015.37E-023.12E-011.52E+007.38E+00 - 73L1 310.002.06E-036.35E-032.21E-029.06E-022.24E-021.01E-013.93E-011.52E+00 - 73L1 400.001.16E-033.41E-031.08E-023.71E-021.13E-024.32E-021.42E-014.62E-01 - 73L1 510.006.85E-041.94E-035.59E-031.66E-025.97E-031.99E-025.67E-021.59E-01 - 73L1 740.003.23E-048.65E-042.18E-035.37E-032.29E-036.50E-031.53E-023.50E-02 - 73L11000.001.84E-044.71E-041.08E-032.33E-031.08E-032.78E-035.79E-031.16E-02 - 73L11500.009.06E-052.17E-044.45E-048.35E-043.98E-049.48E-041.74E-033.02E-03 - 73L2 12.145.30E+002.86E+045.65E+061.31E+082.66E+012.64E+034.43E+041.68E+05 - 73L2 12.844.56E+002.16E+044.09E+061.12E+082.25E+012.14E+034.22E+042.90E+05 - 73L2 14.143.50E+001.34E+042.35E+067.70E+071.68E+011.48E+033.49E+044.07E+05 - 73L2 17.341.98E+004.88E+037.22E+052.83E+079.09E+006.73E+021.91E+043.54E+05 - 73L2 21.141.13E+001.84E+032.29E+059.32E+065.00E+003.14E+029.25E+032.02E+05 - 73L2 25.006.89E-018.05E+028.67E+043.45E+063.02E+001.64E+024.74E+031.08E+05 - 73L2 31.003.63E-012.81E+022.50E+049.24E+051.58E+007.14E+011.92E+034.27E+04 - 73L2 39.001.81E-019.24E+016.66E+032.20E+057.97E-012.94E+017.10E+021.46E+04 - 73L2 51.007.92E-022.54E+011.43E+034.01E+043.59E-011.05E+012.16E+023.87E+03 - 73L2 64.003.90E-028.64E+003.94E+029.45E+031.83E-014.40E+007.80E+011.22E+03 - 73L2 81.001.85E-022.85E+001.05E+022.11E+039.16E-021.80E+002.70E+013.61E+02 - 73L2 94.001.16E-021.43E+004.56E+018.25E+025.92E-021.02E+001.38E+011.67E+02 - 73L2 111.006.84E-036.64E-011.82E+012.90E+023.65E-025.48E-016.53E+007.01E+01 - 73L2 134.003.77E-032.81E-016.51E+008.97E+012.11E-022.72E-012.81E+002.64E+01 - 73L2 160.002.15E-031.27E-012.50E+003.01E+011.26E-021.41E-011.28E+001.05E+01 - 73L2 225.007.44E-042.84E-024.16E-013.86E+004.73E-034.08E-022.89E-011.86E+00 - 73L2 310.002.79E-047.30E-038.21E-026.01E-011.90E-031.30E-027.36E-023.79E-01 - 73L2 400.001.31E-042.57E-032.37E-021.45E-019.23E-045.36E-032.56E-021.11E-01 - 73L2 510.006.50E-059.88E-047.59E-033.95E-024.66E-042.34E-039.63E-033.60E-02 - 73L2 740.002.34E-052.46E-041.46E-036.07E-031.65E-046.85E-042.29E-036.94E-03 - 73L21000.001.06E-058.55E-054.22E-041.49E-037.15E-052.62E-047.57E-041.98E-03 - 73L21500.003.80E-062.27E-059.00E-052.63E-042.33E-057.50E-051.85E-044.11E-04 - 73L3 10.881.16E+016.61E+041.56E+074.28E+085.16E+009.33E+041.35E+082.08E+10 - 73L3 11.589.76E+004.83E+041.07E+073.42E+084.27E+006.84E+048.83E+071.29E+10 - 73L3 12.887.17E+002.82E+045.66E+062.12E+083.08E+004.02E+044.30E+075.71E+09 - 73L3 16.083.73E+009.18E+031.49E+066.45E+071.56E+001.33E+049.66E+061.05E+09 - 73L3 19.881.97E+003.15E+034.17E+051.82E+078.12E-014.62E+032.34E+062.10E+08 - 73L3 25.009.70E-019.91E+021.05E+054.31E+064.03E-011.48E+035.14E+053.75E+07 - 73L3 31.004.93E-013.35E+022.88E+041.07E+062.09E-015.06E+021.25E+057.52E+06 - 73L3 39.002.37E-011.06E+027.24E+032.36E+051.03E-011.62E+022.83E+041.38E+06 - 73L3 51.009.90E-022.76E+011.45E+033.94E+044.58E-024.27E+015.07E+031.94E+05 - 73L3 64.004.69E-028.88E+003.71E+028.56E+032.30E-021.39E+011.21E+033.78E+04 - 73L3 81.002.14E-022.75E+009.07E+011.75E+031.13E-024.34E+002.79E+027.11E+03 - 73L3 94.001.30E-021.32E+003.74E+016.39E+027.21E-032.08E+001.12E+022.50E+03 - 73L3 111.007.49E-035.81E-011.39E+012.08E+024.37E-039.22E-014.06E+017.92E+02 - 73L3 134.004.00E-032.31E-014.57E+005.85E+012.49E-033.67E-011.31E+012.19E+02 - 73L3 160.002.22E-039.72E-021.61E+001.78E+011.47E-031.55E-014.58E+006.63E+01 - 73L3 225.007.25E-041.89E-022.23E-011.86E+005.37E-042.99E-026.34E-017.05E+00 - 73L3 310.002.60E-044.21E-033.60E-022.32E-012.11E-046.52E-031.04E-019.20E-01 - 73L3 400.001.19E-041.32E-038.82E-034.64E-021.02E-041.99E-032.56E-021.92E-01 - 73L3 510.005.75E-054.55E-042.41E-031.06E-025.17E-056.56E-046.95E-034.48E-02 - 73L3 740.002.01E-059.81E-053.72E-041.27E-031.90E-051.29E-041.00E-035.27E-03 - 73L31000.009.14E-063.14E-059.26E-052.62E-048.82E-063.75E-052.22E-041.00E-03 - 73L31500.003.54E-068.02E-061.75E-053.91E-053.43E-068.57E-063.25E-051.19E-04 - 73M1 3.714.11E+001.95E+041.27E+061.02E+082.08E+036.62E+063.87E+094.97E+11 - 73M1 4.713.15E+007.26E+035.34E+052.93E+071.02E+032.05E+068.22E+089.56E+10 - 73M1 6.711.91E+001.60E+031.51E+055.24E+063.54E+023.64E+058.55E+078.06E+09 - 73M1 10.718.66E-011.95E+022.26E+049.41E+058.74E+013.79E+044.63E+063.11E+08 - 73M1 17.713.33E-011.68E+012.17E+039.81E+041.95E+013.48E+032.23E+059.96E+06 - 73M1 27.001.40E-011.86E+002.49E+021.06E+045.56E+004.91E+021.92E+045.97E+05 - 73M1 42.005.31E-022.24E-012.25E+018.42E+021.50E+006.68E+011.62E+033.41E+04 - 73M1 54.002.99E-029.54E-025.58E+001.87E+027.18E-012.22E+014.13E+027.00E+03 - 73M1 72.001.52E-024.68E-021.19E+003.30E+013.09E-016.47E+009.06E+011.19E+03 - 73M1 105.006.13E-032.02E-021.99E-013.59E+001.04E-011.36E+001.33E+011.27E+02 - 73M1 150.002.57E-038.65E-035.09E-025.29E-013.74E-023.32E-012.37E+001.66E+01 - 73M1 280.005.71E-041.81E-036.97E-033.35E-026.59E-033.32E-021.44E-016.19E-01 - 73M1 500.001.57E-044.50E-041.34E-034.20E-031.40E-034.83E-031.42E-024.12E-02 - 73M2 3.479.45E+003.41E+065.99E+091.25E+122.70E+022.38E+053.56E+071.29E+09 - 73M2 4.476.51E+009.65E+051.15E+092.15E+111.27E+027.54E+041.01E+075.62E+08 - 73M2 6.473.32E+001.53E+051.07E+081.63E+104.16E+011.45E+041.58E+061.01E+08 - 73M2 10.471.17E+001.40E+045.18E+065.70E+089.81E+001.80E+031.43E+058.19E+06 - 73M2 17.473.34E-011.11E+032.22E+051.67E+072.12E+002.09E+021.14E+045.03E+05 - 73M2 27.001.04E-011.32E+021.61E+048.65E+055.77E-013.53E+011.38E+034.56E+04 - 73M2 42.002.95E-021.56E+011.19E+034.46E+041.55E-016.03E+001.66E+023.98E+03 - 73M2 54.001.41E-024.70E+002.76E+028.41E+037.40E-022.24E+005.03E+019.98E+02 - 73M2 72.005.90E-031.21E+005.31E+011.28E+033.18E-027.34E-011.30E+012.07E+02 - 73M2 105.001.85E-032.10E-016.37E+001.12E+021.06E-021.74E-012.27E+002.68E+01 - 73M2 150.006.15E-044.17E-029.03E-011.19E+013.76E-034.56E-024.50E-014.03E+00 - 73M2 280.009.14E-052.77E-033.46E-022.78E-016.29E-044.71E-032.91E-021.64E-01 - 73M2 500.001.68E-052.65E-042.10E-031.12E-021.23E-046.30E-042.65E-031.01E-02 - 73M3 3.192.54E+017.58E+061.47E+103.22E+124.96E+011.11E+071.84E+113.23E+14 - 73M3 4.191.56E+011.94E+062.45E+094.67E+112.18E+012.86E+062.80E+103.14E+13 - 73M3 6.196.96E+002.72E+051.95E+082.92E+106.68E+004.08E+051.90E+091.16E+12 - 73M3 10.192.15E+002.22E+048.07E+068.58E+081.47E+003.39E+046.26E+071.87E+10 - 73M3 17.195.43E-011.60E+033.04E+052.19E+072.99E-012.50E+031.82E+062.76E+08 - 73M3 27.001.50E-011.66E+021.87E+049.42E+057.61E-022.64E+029.00E+047.97E+06 - 73M3 42.003.95E-021.82E+011.26E+034.41E+042.00E-022.93E+015.02E+032.73E+05 - 73M3 54.001.80E-025.19E+002.74E+027.79E+039.36E-038.43E+009.99E+024.19E+04 - 73M3 72.007.19E-031.24E+004.83E+011.08E+033.94E-032.03E+001.62E+025.11E+03 - 73M3 105.002.11E-031.93E-015.05E+008.16E+011.28E-033.17E-011.57E+013.47E+02 - 73M3 150.006.60E-043.38E-026.12E-017.28E+004.43E-045.54E-021.83E+002.95E+01 - 73M3 280.008.87E-051.72E-031.66E-021.17E-017.12E-052.75E-034.94E-024.84E-01 - 73M3 500.001.52E-051.27E-046.92E-043.11E-031.38E-051.87E-042.05E-031.37E-02 - 73M4 2.796.83E+012.35E+051.31E+101.66E+141.54E+013.57E+053.07E+092.30E+12 - 73M4 3.792.68E+014.95E+041.54E+091.14E+135.74E+007.73E+043.90E+082.31E+11 - 73M4 5.796.75E+005.73E+037.83E+072.90E+111.43E+009.22E+032.29E+079.54E+09 - 73M4 9.791.09E+003.99E+021.94E+063.21E+092.50E-016.56E+027.20E+051.89E+08 - 73M4 16.791.48E-012.57E+014.36E+043.36E+073.97E-024.33E+012.19E+043.53E+06 - 73M4 27.002.34E-022.27E+001.55E+036.40E+057.59E-033.94E+001.06E+031.11E+05 - 73M4 42.003.96E-032.34E-017.05E+011.69E+041.57E-034.25E-016.62E+014.59E+03 - 73M4 54.001.41E-036.41E-021.23E+012.18E+036.35E-041.20E-011.39E+017.63E+02 - 73M4 72.004.27E-041.46E-021.69E+002.14E+022.22E-042.83E-022.36E+009.98E+01 - 73M4 105.008.80E-052.10E-031.29E-011.07E+015.50E-054.29E-032.37E-017.14E+00 - 73M4 150.001.98E-053.42E-041.19E-026.59E-011.45E-057.27E-042.79E-026.14E-01 - 73M4 280.001.53E-061.55E-052.13E-045.94E-031.38E-063.36E-057.14E-049.40E-03 - 73M4 500.001.55E-071.00E-066.70E-069.64E-051.55E-072.04E-062.66E-052.29E-04 - 73M5 2.731.03E+022.77E+052.45E+102.74E+149.16E+002.98E+041.62E+108.10E+14 - 73M5 3.733.94E+015.61E+042.75E+091.78E+133.36E+006.32E+031.84E+095.01E+13 - 73M5 5.739.59E+006.25E+031.35E+084.26E+118.32E-017.44E+029.18E+071.10E+12 - 73M5 9.731.49E+004.19E+023.22E+064.46E+091.45E-015.33E+012.27E+061.01E+10 - 73M5 16.731.96E-012.61E+016.99E+044.42E+072.34E-023.61E+005.15E+048.66E+07 - 73M5 27.002.99E-022.20E+002.37E+037.87E+054.53E-033.39E-011.83E+031.37E+06 - 73M5 42.004.95E-032.19E-011.04E+021.97E+049.68E-043.88E-028.41E+013.13E+04 - 73M5 54.001.74E-035.84E-021.76E+012.45E+033.97E-041.14E-021.46E+013.76E+03 - 73M5 72.005.20E-041.28E-022.32E+002.29E+021.42E-042.84E-031.99E+003.42E+02 - 73M5 105.001.06E-041.75E-031.65E-011.04E+013.65E-054.69E-041.46E-011.54E+01 - 73M5 150.002.38E-052.70E-041.39E-025.80E-011.01E-058.78E-051.26E-028.74E-01 - 73M5 280.001.85E-061.13E-051.99E-044.03E-031.08E-065.18E-061.86E-046.58E-03 - 73M5 500.002.03E-077.40E-074.87E-064.78E-051.49E-074.44E-074.43E-068.39E-05 - 73N+ 50.002.27E-024.22E+002.75E+021.11E+043.01E-011.43E+017.43E+023.11E+04 - 73N+ 70.008.91E-038.23E-013.67E+011.03E+031.11E-013.18E+009.81E+012.69E+03 - 73N+ 100.003.40E-031.55E-014.65E+009.08E+014.00E-026.97E-011.29E+012.30E+02 - 73N+ 150.001.12E-032.45E-024.66E-016.20E+001.25E-021.32E-011.44E+001.61E+01 - 73N+ 200.005.19E-047.03E-039.64E-029.84E-015.48E-034.25E-023.33E-012.71E+00 - 73N+ 500.005.49E-052.45E-041.21E-035.46E-034.55E-041.68E-035.66E-031.96E-02 - 74K 70.527.45E-011.01E+002.66E-011.82E-021.11E+011.08E+021.89E+027.07E+01 - 74K 71.227.28E-011.03E+003.51E-014.77E-021.08E+011.04E+021.91E+029.20E+01 - 74K 72.526.96E-011.07E+005.09E-011.36E-011.03E+019.74E+011.93E+021.30E+02 - 74K 75.726.24E-011.12E+008.80E-015.17E-019.07E+008.34E+011.92E+022.11E+02 - 74K 79.525.52E-011.14E+001.25E+001.17E+007.86E+006.99E+011.83E+022.80E+02 - 74K 84.004.81E-011.11E+001.58E+002.02E+006.71E+005.74E+011.68E+023.27E+02 - 74K 90.004.04E-011.04E+001.84E+003.04E+005.50E+004.48E+011.44E+023.45E+02 - 74K 98.003.25E-019.25E-011.94E+003.97E+004.30E+003.30E+011.15E+023.25E+02 - 74K 110.002.42E-017.48E-011.83E+004.46E+003.09E+002.18E+018.14E+012.62E+02 - 74K 123.001.82E-015.88E-011.58E+004.26E+002.24E+001.47E+015.63E+011.94E+02 - 74K 140.001.30E-014.32E-011.24E+003.58E+001.55E+009.28E+003.58E+011.28E+02 - 74K 153.001.04E-013.45E-011.01E+003.02E+001.21E+006.80E+002.60E+019.39E+01 - 74K 170.007.91E-022.63E-017.84E-012.38E+008.97E-014.71E+001.77E+016.34E+01 - 74K 193.005.72E-021.87E-015.62E-011.71E+006.29E-013.05E+001.11E+013.87E+01 - 74K 220.004.11E-021.32E-013.92E-011.19E+004.37E-011.95E+006.79E+002.29E+01 - 74K 285.002.17E-026.57E-021.89E-015.47E-012.15E-018.29E-012.60E+008.00E+00 - 74K 370.001.17E-023.34E-029.10E-022.47E-011.07E-013.60E-011.01E+002.78E+00 - 74K 460.007.16E-031.96E-025.06E-021.29E-016.03E-021.84E-014.70E-011.18E+00 - 74K 570.004.52E-031.20E-022.92E-026.93E-023.46E-029.73E-022.28E-015.19E-01 - 74K 800.002.29E-035.80E-031.30E-022.76E-021.46E-023.71E-027.69E-021.53E-01 - 74K 1050.001.38E-033.38E-037.10E-031.39E-027.42E-031.78E-023.40E-026.16E-02 - 74K 1300.009.46E-042.25E-034.52E-038.31E-034.39E-031.02E-021.85E-023.15E-02 - 74K 1550.007.00E-041.62E-033.15E-035.55E-032.86E-036.55E-031.14E-021.86E-02 - 74L1 13.102.33E+005.05E+021.70E+046.70E+042.35E+026.16E+043.03E+063.31E+07 - 74L1 13.802.14E+003.89E+021.58E+041.16E+052.01E+024.82E+042.29E+062.94E+07 - 74L1 15.101.84E+002.46E+021.27E+041.61E+051.54E+023.15E+041.40E+062.17E+07 - 74L1 18.301.31E+008.93E+016.34E+031.37E+058.66E+011.28E+044.92E+059.23E+06 - 74L1 22.109.23E-013.15E+012.73E+037.40E+044.94E+015.35E+031.77E+053.49E+06 - 74L1 26.006.72E-011.25E+011.23E+033.67E+043.05E+012.54E+037.36E+041.43E+06 - 74L1 32.004.39E-013.73E+004.13E+021.31E+041.65E+019.93E+022.42E+044.42E+05 - 74L1 40.002.73E-011.10E+001.20E+023.84E+038.52E+003.68E+027.41E+031.22E+05 - 74L1 52.001.52E-013.89E-012.71E+018.34E+023.93E+001.17E+021.89E+032.65E+04 - 74L1 65.009.12E-022.26E-017.76E+002.19E+022.05E+004.51E+016.01E+027.28E+03 - 74L1 82.005.27E-021.44E-012.31E+005.42E+011.04E+001.71E+011.87E+021.92E+03 - 74L1 95.003.70E-021.08E-011.16E+002.29E+016.78E-019.36E+009.05E+018.33E+02 - 74L1 112.002.48E-027.63E-025.86E-019.03E+004.22E-014.83E+004.07E+013.31E+02 - 74L1 135.001.58E-025.02E-022.96E-013.36E+002.47E-012.32E+001.68E+011.18E+02 - 74L1 160.001.04E-023.36E-021.69E-011.46E+001.53E-011.21E+007.62E+004.73E+01 - 74L1 225.004.55E-031.45E-025.92E-023.32E-015.89E-023.41E-011.66E+008.00E+00 - 74L1 310.002.14E-036.55E-032.32E-029.71E-022.45E-021.11E-014.28E-011.64E+00 - 74L1 400.001.20E-033.55E-031.13E-023.96E-021.24E-024.72E-021.54E-015.01E-01 - 74L1 510.007.15E-042.03E-035.91E-031.77E-026.52E-032.17E-026.16E-021.72E-01 - 74L1 740.003.38E-049.10E-042.31E-035.72E-032.50E-037.07E-031.66E-023.79E-02 - 74L11000.001.93E-044.97E-041.14E-032.48E-031.17E-033.02E-036.28E-031.25E-02 - 74L11500.009.51E-052.30E-044.74E-048.92E-044.31E-041.03E-031.89E-033.27E-03 - 74L2 12.544.98E+002.64E+045.00E+061.11E+082.67E+012.52E+034.04E+041.44E+05 - 74L2 13.244.31E+002.02E+043.66E+069.59E+072.26E+012.05E+033.86E+042.49E+05 - 74L2 14.543.34E+001.27E+042.14E+066.70E+071.71E+011.43E+033.23E+043.54E+05 - 74L2 17.741.92E+004.73E+036.78E+052.55E+079.37E+006.67E+021.81E+043.19E+05 - 74L2 21.541.10E+001.82E+032.21E+058.67E+065.22E+003.16E+028.97E+031.88E+05 - 74L2 26.006.39E-017.23E+027.45E+042.86E+062.97E+001.53E+024.26E+039.32E+04 - 74L2 32.003.45E-012.63E+022.25E+048.03E+051.59E+006.87E+011.79E+033.83E+04 - 74L2 40.001.76E-018.91E+016.23E+031.99E+058.20E-012.91E+016.80E+021.35E+04 - 74L2 52.007.85E-022.53E+011.39E+033.79E+043.76E-011.06E+012.13E+023.72E+03 - 74L2 65.003.92E-028.77E+003.92E+029.20E+031.94E-014.54E+007.85E+011.20E+03 - 74L2 82.001.89E-022.94E+001.06E+022.11E+039.82E-021.88E+002.76E+013.63E+02 - 74L2 95.001.19E-021.49E+004.68E+018.33E+026.38E-021.08E+001.43E+011.69E+02 - 74L2 112.007.07E-036.97E-011.89E+012.97E+023.95E-025.82E-016.82E+007.21E+01 - 74L2 135.003.92E-032.98E-016.82E+009.29E+012.30E-022.91E-012.97E+002.74E+01 - 74L2 160.002.30E-031.39E-012.74E+003.27E+011.41E-021.55E-011.40E+001.14E+01 - 74L2 225.007.98E-043.12E-024.56E-014.21E+005.28E-034.50E-023.16E-012.02E+00 - 74L2 310.003.01E-048.03E-039.02E-026.57E-012.12E-031.44E-028.09E-024.14E-01 - 74L2 400.001.42E-042.84E-032.61E-021.59E-011.03E-035.95E-032.82E-021.22E-01 - 74L2 510.007.05E-051.09E-038.38E-034.35E-025.23E-042.60E-031.06E-023.96E-02 - 74L2 740.002.54E-052.71E-041.62E-036.70E-031.85E-047.63E-042.53E-037.67E-03 - 74L21000.001.15E-059.46E-054.67E-041.65E-038.03E-052.92E-048.42E-042.20E-03 - 74L21500.004.16E-062.52E-051.00E-042.92E-042.62E-058.40E-052.06E-044.57E-04 - 74L3 11.211.10E+016.13E+041.39E+073.69E+085.03E+008.97E+041.25E+081.87E+10 - 74L3 11.919.25E+004.52E+049.69E+062.98E+084.18E+006.64E+048.28E+071.17E+10 - 74L3 13.216.85E+002.68E+045.20E+061.88E+083.04E+003.96E+044.11E+075.31E+09 - 74L3 16.413.62E+008.94E+031.41E+065.89E+071.56E+001.34E+049.54E+061.01E+09 - 74L3 20.211.93E+003.12E+034.04E+051.71E+078.24E-014.75E+032.37E+062.09E+08 - 74L3 26.008.89E-018.76E+028.87E+043.51E+063.81E-011.35E+034.48E+053.14E+07 - 74L3 32.004.63E-013.08E+022.54E+049.16E+052.02E-014.81E+021.15E+056.66E+06 - 74L3 40.002.27E-011.01E+026.65E+032.11E+051.02E-011.59E+022.70E+041.28E+06 - 74L3 52.009.68E-022.70E+011.38E+033.66E+044.60E-024.32E+015.03E+031.89E+05 - 74L3 65.004.65E-028.86E+003.62E+028.18E+032.34E-021.43E+011.23E+033.78E+04 - 74L3 82.002.15E-022.79E+009.04E+011.71E+031.16E-024.54E+002.89E+027.27E+03 - 74L3 95.001.32E-021.35E+003.76E+016.32E+027.44E-032.20E+001.17E+022.59E+03 - 74L3 112.007.63E-035.99E-011.42E+012.08E+024.54E-039.81E-014.30E+018.29E+02 - 74L3 135.004.10E-032.40E-014.70E+005.93E+012.60E-033.93E-011.40E+012.31E+02 - 74L3 160.002.34E-031.05E-011.73E+001.90E+011.57E-031.72E-015.11E+007.37E+01 - 74L3 225.007.65E-042.04E-022.39E-011.98E+005.73E-043.32E-027.06E-017.83E+00 - 74L3 310.002.75E-044.53E-033.87E-022.48E-012.25E-047.22E-031.16E-011.02E+00 - 74L3 400.001.25E-041.42E-039.49E-034.98E-021.09E-042.20E-032.84E-022.12E-01 - 74L3 510.006.10E-054.90E-042.60E-031.14E-025.51E-057.23E-047.70E-034.96E-02 - 74L3 740.002.13E-051.05E-044.00E-041.36E-032.02E-051.41E-041.11E-035.83E-03 - 74L31000.009.66E-063.37E-059.96E-052.82E-049.37E-064.09E-052.45E-041.11E-03 - 74L31500.003.73E-068.57E-061.88E-054.21E-053.63E-069.27E-063.57E-051.31E-04 - 74M1 3.823.88E+001.88E+041.23E+068.74E+072.10E+036.42E+063.62E+094.51E+11 - 74M1 4.823.00E+007.18E+035.25E+052.73E+071.05E+032.05E+068.02E+089.06E+10 - 74M1 6.821.84E+001.63E+031.50E+055.18E+063.72E+023.76E+058.71E+078.03E+09 - 74M1 10.828.49E-012.06E+022.31E+049.35E+059.35E+014.04E+044.89E+063.23E+08 - 74M1 17.823.31E-011.86E+012.28E+031.00E+052.11E+013.77E+032.41E+051.06E+07 - 74M1 27.001.41E-012.18E+002.75E+021.14E+046.14E+005.47E+022.14E+046.62E+05 - 74M1 42.005.40E-022.57E-012.55E+019.25E+021.66E+007.43E+011.79E+033.77E+04 - 74M1 54.003.05E-021.03E-016.40E+002.08E+027.92E-012.46E+014.58E+027.72E+03 - 74M1 72.001.56E-024.82E-021.37E+003.71E+013.41E-017.17E+001.00E+021.31E+03 - 74M1 105.006.30E-032.04E-022.24E-014.07E+001.14E-011.50E+001.47E+011.39E+02 - 74M1 150.002.65E-038.81E-035.53E-025.94E-014.13E-023.66E-012.60E+001.83E+01 - 74M1 280.005.94E-041.87E-037.39E-033.65E-027.25E-033.65E-021.57E-016.76E-01 - 74M1 500.001.64E-044.73E-041.43E-034.51E-031.54E-035.29E-031.55E-024.49E-02 - 74M2 3.578.90E+003.20E+065.44E+091.09E+122.73E+022.31E+053.33E+071.14E+09 - 74M2 4.576.22E+009.39E+051.09E+091.98E+111.31E+027.55E+049.81E+065.19E+08 - 74M2 6.573.23E+001.54E+051.06E+081.57E+104.40E+011.50E+041.59E+069.81E+07 - 74M2 10.571.17E+001.45E+045.33E+065.76E+081.06E+011.91E+031.48E+058.28E+06 - 74M2 17.573.39E-011.18E+032.34E+051.74E+072.31E+002.25E+021.21E+045.23E+05 - 74M2 27.001.08E-011.45E+021.76E+049.38E+056.42E-013.88E+011.50E+034.91E+04 - 74M2 42.003.10E-021.71E+011.30E+034.84E+041.73E-016.64E+001.81E+024.30E+03 - 74M2 54.001.48E-025.15E+003.02E+029.15E+038.25E-022.47E+005.49E+011.08E+03 - 74M2 72.006.24E-031.33E+005.81E+011.39E+033.54E-028.10E-011.43E+012.25E+02 - 74M2 105.001.97E-032.31E-016.99E+001.22E+021.18E-021.92E-012.49E+002.92E+01 - 74M2 150.006.58E-044.59E-029.93E-011.30E+014.21E-035.04E-024.94E-014.40E+00 - 74M2 280.009.86E-053.06E-033.82E-023.06E-017.07E-045.23E-033.21E-021.80E-01 - 74M2 500.001.83E-052.94E-042.33E-031.24E-021.38E-047.03E-042.94E-031.12E-02 - 74M3 3.282.42E+017.17E+061.35E+102.86E+124.89E+011.09E+071.75E+112.98E+14 - 74M3 4.281.51E+011.89E+062.34E+094.34E+112.19E+012.90E+062.78E+103.06E+13 - 74M3 6.286.83E+002.75E+051.94E+082.84E+106.85E+004.27E+051.98E+091.20E+12 - 74M3 10.282.15E+002.31E+048.30E+068.67E+081.53E+003.64E+046.75E+072.01E+10 - 74M3 17.285.51E-011.69E+033.19E+052.26E+073.16E-012.73E+032.00E+063.03E+08 - 74M3 27.001.55E-011.80E+022.02E+041.01E+068.15E-022.96E+021.02E+059.08E+06 - 74M3 42.004.11E-021.97E+011.36E+034.72E+042.14E-023.29E+015.69E+033.10E+05 - 74M3 54.001.88E-025.63E+002.95E+028.34E+031.00E-029.45E+001.13E+034.75E+04 - 74M3 72.007.54E-031.35E+005.21E+011.15E+034.23E-032.27E+001.83E+025.77E+03 - 74M3 105.002.23E-032.09E-015.46E+008.75E+011.37E-033.55E-011.77E+013.91E+02 - 74M3 150.006.97E-043.67E-026.61E-017.82E+004.74E-046.20E-022.06E+003.31E+01 - 74M3 280.009.42E-051.87E-031.79E-021.26E-017.64E-053.07E-035.53E-025.42E-01 - 74M3 500.001.62E-051.37E-047.50E-043.36E-031.48E-052.07E-042.29E-031.52E-02 - 74M4 2.876.52E+012.22E+051.20E+101.48E+141.52E+013.51E+052.92E+092.12E+12 - 74M4 3.872.62E+014.85E+041.48E+091.09E+135.80E+007.88E+043.88E+082.24E+11 - 74M4 5.876.77E+005.83E+037.92E+072.93E+111.49E+009.73E+032.40E+079.79E+09 - 74M4 9.871.12E+004.17E+022.05E+063.40E+092.64E-017.13E+027.79E+052.02E+08 - 74M4 16.871.55E-012.74E+014.70E+043.65E+074.26E-024.79E+012.42E+043.86E+06 - 74M4 27.002.52E-022.48E+001.73E+037.22E+058.29E-034.47E+001.21E+031.25E+05 - 74M4 42.004.28E-032.57E-017.87E+011.90E+041.73E-034.82E-017.51E+015.19E+03 - 74M4 54.001.53E-037.06E-021.37E+012.46E+036.97E-041.36E-011.58E+018.64E+02 - 74M4 72.004.65E-041.61E-021.89E+002.42E+022.44E-043.21E-022.68E+001.13E+02 - 74M4 105.009.61E-052.32E-031.44E-011.20E+016.06E-054.87E-032.70E-018.08E+00 - 74M4 150.002.16E-053.80E-041.32E-027.44E-011.60E-058.25E-043.17E-026.96E-01 - 74M4 280.001.65E-061.73E-052.39E-046.71E-031.53E-063.82E-058.13E-041.07E-02 - 74M4 500.001.67E-071.12E-067.50E-061.09E-041.72E-072.32E-063.03E-052.61E-04 - 74M5 2.819.89E+012.60E+052.27E+102.46E+149.04E+002.88E+041.55E+107.52E+14 - 74M5 3.813.86E+015.45E+042.68E+091.71E+133.40E+006.32E+031.85E+094.96E+13 - 74M5 5.819.63E+006.28E+031.37E+084.32E+118.60E-017.70E+029.68E+071.15E+12 - 74M5 9.811.53E+004.33E+023.41E+064.72E+091.53E-015.65E+012.48E+061.11E+10 - 74M5 16.812.05E-012.74E+017.58E+044.80E+072.50E-023.89E+005.76E+049.78E+07 - 74M5 27.003.21E-022.37E+002.65E+038.85E+054.92E-033.73E-012.11E+031.60E+06 - 74M5 42.005.33E-032.37E-011.17E+022.21E+041.05E-034.27E-029.69E+013.66E+04 - 74M5 54.001.88E-036.34E-021.98E+012.76E+034.33E-041.26E-021.69E+014.39E+03 - 74M5 72.005.63E-041.39E-022.60E+002.57E+021.55E-043.13E-032.29E+003.98E+02 - 74M5 105.001.15E-041.91E-031.85E-011.17E+013.99E-055.16E-041.68E-011.79E+01 - 74M5 150.002.58E-052.95E-041.55E-026.51E-011.10E-059.67E-051.45E-021.01E+00 - 74M5 280.002.05E-061.24E-052.23E-044.53E-031.18E-065.71E-062.12E-047.59E-03 - 74M5 500.002.23E-078.08E-075.44E-065.36E-051.63E-074.89E-075.02E-069.63E-05 - 74N+ 50.002.38E-024.67E+003.04E+021.23E+043.37E-011.62E+018.51E+023.59E+04 - 74N+ 70.009.38E-039.10E-014.06E+011.14E+031.25E-013.59E+001.12E+023.08E+03 - 74N+ 100.003.58E-031.71E-015.15E+001.00E+024.48E-027.85E-011.46E+012.62E+02 - 74N+ 150.001.19E-032.70E-025.17E-016.86E+001.40E-021.48E-011.63E+001.82E+01 - 74N+ 200.005.50E-047.73E-031.07E-011.09E+006.14E-034.76E-023.74E-013.06E+00 - 74N+ 500.005.89E-052.67E-041.34E-036.07E-035.09E-041.87E-036.32E-032.19E-02 - 75K 72.687.01E-019.09E-012.33E-011.52E-021.11E+011.03E+021.74E+026.32E+01 - 75K 73.386.86E-019.32E-013.05E-013.95E-021.08E+019.97E+011.77E+028.17E+01 - 75K 74.686.56E-019.65E-014.40E-011.12E-011.03E+019.36E+011.79E+021.15E+02 - 75K 77.885.91E-011.01E+007.58E-014.24E-019.10E+008.05E+011.78E+021.86E+02 - 75K 81.685.24E-011.03E+001.08E+009.62E-017.92E+006.78E+011.71E+022.48E+02 - 75K 86.004.61E-011.01E+001.36E+001.65E+006.82E+005.63E+011.58E+022.90E+02 - 75K 92.003.89E-019.57E-011.60E+002.54E+005.62E+004.43E+011.37E+023.10E+02 - 75K 100.003.15E-018.54E-011.72E+003.37E+004.42E+003.28E+011.10E+022.96E+02 - 75K 112.002.36E-016.98E-011.65E+003.88E+003.19E+002.19E+017.88E+012.43E+02 - 75K 125.001.78E-015.54E-011.44E+003.78E+002.33E+001.48E+015.51E+011.83E+02 - 75K 142.001.28E-014.11E-011.14E+003.24E+001.62E+009.47E+003.55E+011.23E+02 - 75K 155.001.03E-013.31E-019.48E-012.76E+001.26E+006.97E+002.60E+019.09E+01 - 75K 172.007.87E-022.54E-017.41E-012.21E+009.44E-014.86E+001.78E+016.21E+01 - 75K 195.005.72E-021.83E-015.38E-011.62E+006.64E-013.16E+001.12E+013.83E+01 - 75K 220.004.23E-021.33E-013.89E-011.16E+004.76E-012.10E+007.17E+002.38E+01 - 75K 285.002.24E-026.68E-021.90E-015.48E-012.34E-018.91E-012.76E+008.38E+00 - 75K 370.001.21E-023.43E-029.29E-022.51E-011.16E-013.87E-011.07E+002.93E+00 - 75K 460.007.42E-032.02E-025.21E-021.32E-016.53E-021.98E-015.01E-011.24E+00 - 75K 570.004.70E-031.24E-023.03E-027.17E-023.74E-021.05E-012.43E-015.50E-01 - 75K 800.002.39E-036.05E-031.36E-022.88E-021.58E-023.99E-028.22E-021.63E-01 - 75K 1050.001.44E-033.54E-037.46E-031.45E-027.99E-031.91E-023.63E-026.56E-02 - 75K 1300.009.87E-042.36E-034.75E-038.75E-034.72E-031.10E-021.98E-023.36E-02 - 75K 1550.007.31E-041.70E-033.32E-035.85E-033.07E-037.03E-031.22E-021.99E-02 - 75L1 13.532.18E+004.72E+021.52E+045.63E+042.34E+025.88E+042.78E+062.92E+07 - 75L1 14.232.01E+003.68E+021.42E+049.76E+042.02E+024.64E+042.12E+062.61E+07 - 75L1 15.531.74E+002.36E+021.16E+041.38E+051.55E+023.07E+041.32E+061.95E+07 - 75L1 18.731.25E+008.87E+015.94E+031.22E+058.89E+011.28E+044.75E+058.57E+06 - 75L1 22.538.90E-013.24E+012.64E+036.80E+045.13E+015.43E+031.75E+053.33E+06 - 75L1 26.006.73E-011.45E+011.32E+033.73E+043.35E+012.81E+038.06E+041.53E+06 - 75L1 32.004.42E-014.41E+004.51E+021.36E+041.81E+011.10E+032.65E+044.74E+05 - 75L1 40.002.76E-011.30E+001.34E+024.09E+039.36E+004.06E+028.12E+031.31E+05 - 75L1 52.001.54E-014.26E-013.07E+019.07E+024.32E+001.29E+022.06E+032.87E+04 - 75L1 65.009.27E-022.33E-018.87E+002.41E+022.25E+004.96E+016.57E+027.88E+03 - 75L1 82.005.38E-021.45E-012.63E+006.05E+011.14E+001.88E+012.04E+022.08E+03 - 75L1 95.003.78E-021.08E-011.30E+002.56E+017.46E-011.03E+019.89E+019.03E+02 - 75L1 112.002.55E-027.65E-026.47E-011.01E+014.64E-015.31E+004.45E+013.59E+02 - 75L1 135.001.62E-025.05E-023.20E-013.75E+002.72E-012.54E+001.83E+011.29E+02 - 75L1 160.001.07E-023.40E-021.80E-011.62E+001.68E-011.32E+008.31E+005.13E+01 - 75L1 225.004.70E-031.48E-026.24E-023.61E-016.46E-023.74E-011.81E+008.68E+00 - 75L1 310.002.22E-036.77E-032.44E-021.04E-012.68E-021.21E-014.65E-011.78E+00 - 75L1 400.001.26E-033.69E-031.20E-024.23E-021.35E-025.15E-021.68E-015.43E-01 - 75L1 510.007.47E-042.12E-036.24E-031.89E-027.13E-032.37E-026.69E-021.86E-01 - 75L1 740.003.54E-049.58E-042.45E-036.11E-032.73E-037.70E-031.80E-024.11E-02 - 75L11000.002.03E-045.25E-041.22E-032.65E-031.27E-033.28E-036.81E-031.35E-02 - 75L11500.001.00E-042.44E-045.04E-049.53E-044.67E-041.11E-032.05E-033.53E-03 - 75L2 12.964.69E+002.44E+044.44E+069.51E+072.67E+012.40E+033.70E+041.23E+05 - 75L2 13.664.07E+001.88E+043.29E+068.24E+072.28E+011.97E+033.54E+042.15E+05 - 75L2 14.963.18E+001.20E+041.95E+065.85E+071.73E+011.39E+033.00E+043.10E+05 - 75L2 18.161.86E+004.60E+036.38E+052.30E+079.67E+006.61E+021.72E+042.88E+05 - 75L2 21.961.08E+001.80E+032.13E+058.06E+065.46E+003.19E+028.70E+031.75E+05 - 75L2 26.006.65E-017.88E+028.04E+043.00E+063.29E+001.66E+024.48E+039.46E+04 - 75L2 32.003.60E-012.86E+022.43E+048.49E+051.77E+007.48E+011.90E+033.95E+04 - 75L2 40.001.84E-019.71E+016.74E+032.12E+059.08E-013.17E+017.27E+021.41E+04 - 75L2 52.008.25E-022.76E+011.51E+034.06E+044.17E-011.16E+012.29E+023.93E+03 - 75L2 65.004.13E-029.57E+004.25E+029.88E+032.16E-014.96E+008.46E+011.28E+03 - 75L2 82.002.00E-023.21E+001.16E+022.27E+031.09E-012.06E+002.99E+013.88E+02 - 75L2 95.001.26E-021.62E+005.10E+018.99E+027.10E-021.18E+001.55E+011.82E+02 - 75L2 112.007.51E-037.62E-012.06E+013.21E+024.39E-026.39E-017.41E+007.76E+01 - 75L2 135.004.18E-033.26E-017.44E+001.01E+022.56E-023.19E-013.23E+002.96E+01 - 75L2 160.002.46E-031.52E-012.99E+003.55E+011.57E-021.71E-011.52E+001.24E+01 - 75L2 225.008.55E-043.42E-025.00E-014.59E+005.90E-034.96E-023.46E-012.20E+00 - 75L2 310.003.24E-048.83E-039.90E-027.19E-012.37E-031.59E-028.89E-024.53E-01 - 75L2 400.001.53E-043.12E-032.87E-021.74E-011.16E-036.59E-033.11E-021.34E-01 - 75L2 510.007.67E-051.20E-039.24E-034.78E-025.86E-042.89E-031.17E-024.35E-02 - 75L2 740.002.76E-053.00E-041.79E-037.39E-032.08E-048.50E-042.81E-038.46E-03 - 75L21000.001.26E-051.05E-045.18E-041.82E-039.03E-053.26E-049.35E-042.43E-03 - 75L21500.004.55E-062.80E-051.11E-043.24E-042.94E-059.40E-052.30E-045.08E-04 - 75L3 11.531.04E+015.71E+041.25E+073.20E+084.90E+008.65E+041.16E+081.68E+10 - 75L3 12.238.79E+004.24E+048.79E+062.60E+084.09E+006.46E+047.79E+071.07E+10 - 75L3 13.536.56E+002.55E+044.79E+061.66E+083.00E+003.90E+043.94E+074.94E+09 - 75L3 16.733.52E+008.72E+031.34E+065.39E+071.56E+001.35E+049.44E+069.81E+08 - 75L3 20.531.90E+003.10E+033.92E+051.60E+078.35E-014.88E+032.41E+062.08E+08 - 75L3 26.009.20E-019.44E+029.48E+043.67E+064.06E-011.51E+035.04E+053.52E+07 - 75L3 32.004.80E-013.32E+022.72E+049.62E+052.15E-015.36E+021.29E+057.46E+06 - 75L3 40.002.36E-011.08E+027.12E+032.22E+051.09E-011.77E+023.03E+041.43E+06 - 75L3 52.001.01E-012.91E+011.47E+033.87E+044.90E-024.81E+015.65E+032.11E+05 - 75L3 65.004.86E-029.55E+003.88E+028.66E+032.49E-021.59E+011.38E+034.22E+04 - 75L3 82.002.25E-023.01E+009.68E+011.81E+031.23E-025.05E+003.24E+028.11E+03 - 75L3 95.001.38E-021.45E+004.03E+016.72E+027.93E-032.45E+001.31E+022.89E+03 - 75L3 112.008.01E-036.46E-011.52E+012.22E+024.84E-031.09E+004.80E+019.23E+02 - 75L3 135.004.31E-032.58E-015.04E+006.32E+012.77E-034.37E-011.56E+012.57E+02 - 75L3 160.002.46E-031.13E-011.86E+002.03E+011.67E-031.91E-015.70E+008.19E+01 - 75L3 225.008.09E-042.20E-022.57E-012.12E+006.10E-043.68E-027.85E-018.69E+00 - 75L3 310.002.91E-044.88E-034.16E-022.65E-012.40E-048.00E-031.28E-011.13E+00 - 75L3 400.001.32E-041.53E-031.02E-025.33E-021.16E-042.43E-033.15E-022.35E-01 - 75L3 510.006.42E-055.27E-042.79E-031.22E-025.86E-057.97E-048.53E-035.49E-02 - 75L3 740.002.26E-051.13E-044.30E-041.46E-032.14E-051.55E-041.22E-036.44E-03 - 75L31000.001.03E-053.60E-051.07E-043.03E-049.95E-064.46E-052.70E-041.22E-03 - 75L31500.003.94E-069.14E-062.01E-054.52E-053.85E-061.00E-053.92E-051.45E-04 - 75M1 3.933.67E+001.82E+041.20E+067.58E+072.12E+036.24E+063.41E+094.11E+11 - 75M1 4.932.86E+007.12E+035.18E+052.56E+071.08E+032.06E+067.84E+088.62E+10 - 75M1 6.931.78E+001.67E+031.50E+055.13E+063.91E+023.90E+058.88E+078.01E+09 - 75M1 10.938.33E-012.18E+022.35E+049.32E+051.00E+024.30E+045.17E+063.36E+08 - 75M1 17.933.29E-012.05E+012.40E+031.03E+052.29E+014.09E+032.60E+051.13E+07 - 75M1 27.001.43E-012.56E+003.04E+021.23E+046.77E+006.09E+022.39E+047.35E+05 - 75M1 42.005.49E-022.97E-012.87E+011.01E+031.83E+008.25E+011.99E+034.17E+04 - 75M1 54.003.11E-021.13E-017.30E+002.31E+028.75E-012.73E+015.08E+028.52E+03 - 75M1 72.001.59E-025.03E-021.57E+004.16E+013.77E-017.94E+001.11E+021.45E+03 - 75M1 105.006.48E-032.08E-022.52E-014.60E+001.26E-011.66E+001.62E+011.53E+02 - 75M1 150.002.74E-038.99E-036.04E-026.68E-014.55E-024.03E-012.86E+002.00E+01 - 75M1 280.006.18E-041.94E-037.87E-033.98E-027.98E-034.01E-021.73E-017.39E-01 - 75M1 500.001.72E-044.96E-041.52E-034.86E-031.69E-035.79E-031.69E-024.90E-02 - 75M2 3.688.39E+003.02E+064.95E+099.64E+112.78E+022.25E+053.13E+071.02E+09 - 75M2 4.685.94E+009.14E+051.04E+091.83E+111.36E+027.56E+049.52E+064.81E+08 - 75M2 6.683.15E+001.55E+051.06E+081.53E+104.65E+011.55E+041.60E+069.52E+07 - 75M2 10.681.16E+001.51E+045.50E+065.83E+081.14E+012.02E+031.54E+058.38E+06 - 75M2 17.683.44E-011.26E+032.47E+051.81E+072.52E+002.42E+021.28E+045.43E+05 - 75M2 27.001.12E-011.59E+021.93E+041.02E+067.14E-014.28E+011.63E+035.29E+04 - 75M2 42.003.24E-021.88E+011.42E+035.26E+041.93E-017.31E+001.97E+024.65E+03 - 75M2 54.001.56E-025.65E+003.30E+029.95E+039.20E-022.72E+006.00E+011.17E+03 - 75M2 72.006.60E-031.46E+006.36E+011.51E+033.96E-028.93E-011.56E+012.44E+02 - 75M2 105.002.10E-032.53E-017.66E+001.33E+021.32E-022.12E-012.73E+003.18E+01 - 75M2 150.007.04E-045.05E-021.09E+001.42E+014.71E-035.58E-025.43E-014.80E+00 - 75M2 280.001.06E-043.38E-034.21E-023.36E-017.93E-045.81E-033.55E-021.98E-01 - 75M2 500.001.99E-053.26E-042.58E-031.37E-021.55E-047.85E-043.26E-031.24E-02 - 75M3 3.372.31E+016.82E+061.24E+102.56E+124.84E+011.07E+071.67E+112.78E+14 - 75M3 4.371.45E+011.85E+062.25E+094.05E+112.21E+012.94E+062.77E+103.00E+13 - 75M3 6.376.71E+002.78E+051.93E+082.77E+107.03E+004.47E+052.05E+091.24E+12 - 75M3 10.372.15E+002.40E+048.54E+068.76E+081.60E+003.92E+047.27E+072.16E+10 - 75M3 17.375.59E-011.79E+033.34E+052.34E+073.33E-012.99E+032.21E+063.34E+08 - 75M3 27.001.60E-011.95E+022.18E+041.08E+068.73E-023.31E+021.16E+051.03E+07 - 75M3 42.004.28E-022.14E+011.46E+035.05E+042.29E-023.68E+016.44E+033.52E+05 - 75M3 54.001.96E-026.10E+003.19E+028.92E+031.07E-021.06E+011.28E+035.37E+04 - 75M3 72.007.90E-031.46E+005.63E+011.24E+034.53E-032.55E+002.07E+026.51E+03 - 75M3 105.002.34E-032.27E-015.89E+009.38E+011.46E-033.97E-011.99E+014.39E+02 - 75M3 150.007.37E-043.98E-027.14E-018.39E+005.08E-046.93E-022.32E+003.72E+01 - 75M3 280.001.00E-042.03E-031.94E-021.35E-018.18E-053.42E-036.19E-026.05E-01 - 75M3 500.001.73E-051.49E-048.11E-043.63E-031.58E-052.30E-042.55E-031.70E-02 - 75M4 2.956.24E+012.11E+051.11E+101.33E+141.50E+013.47E+052.79E+091.97E+12 - 75M4 3.952.56E+014.77E+041.43E+091.04E+135.88E+008.06E+043.89E+082.20E+11 - 75M4 5.956.79E+005.93E+038.03E+072.97E+111.54E+001.03E+042.51E+071.01E+10 - 75M4 9.951.15E+004.37E+022.15E+063.60E+092.79E-017.75E+028.43E+052.16E+08 - 75M4 16.951.62E-012.92E+015.07E+043.96E+074.57E-025.29E+012.67E+044.23E+06 - 75M4 27.002.70E-022.71E+001.92E+038.13E+059.05E-035.06E+001.37E+031.41E+05 - 75M4 42.004.62E-032.82E-018.77E+012.14E+041.89E-035.46E-018.51E+015.86E+03 - 75M4 54.001.65E-037.77E-021.53E+012.77E+037.64E-041.54E-011.79E+019.75E+02 - 75M4 72.005.04E-041.77E-022.10E+002.72E+022.68E-043.64E-023.04E+001.28E+02 - 75M4 105.001.05E-042.57E-031.61E-011.35E+016.68E-055.52E-033.06E-019.14E+00 - 75M4 150.002.37E-054.22E-041.48E-028.38E-011.77E-059.36E-043.60E-027.88E-01 - 75M4 280.001.82E-061.93E-052.67E-047.57E-031.69E-064.34E-059.24E-041.21E-02 - 75M4 500.001.82E-071.25E-068.39E-061.23E-041.91E-072.63E-063.45E-052.97E-04 - 75M5 2.889.46E+012.44E+052.11E+102.22E+148.93E+002.78E+041.49E+107.01E+14 - 75M5 3.883.78E+015.30E+042.61E+091.63E+133.43E+006.32E+031.86E+094.91E+13 - 75M5 5.889.66E+006.32E+031.40E+084.38E+118.88E-017.95E+021.02E+081.21E+12 - 75M5 9.881.57E+004.47E+023.61E+064.99E+091.61E-015.99E+012.71E+061.22E+10 - 75M5 16.882.15E-012.88E+018.21E+045.21E+072.66E-024.18E+006.43E+041.10E+08 - 75M5 27.003.43E-022.56E+002.96E+039.95E+055.33E-034.10E-012.42E+031.87E+06 - 75M5 42.005.73E-032.56E-011.30E+022.49E+041.14E-034.69E-021.12E+024.26E+04 - 75M5 54.002.03E-036.86E-022.21E+013.09E+034.71E-041.38E-021.94E+015.10E+03 - 75M5 72.006.09E-041.51E-022.91E+002.89E+021.69E-043.43E-032.63E+004.62E+02 - 75M5 105.001.25E-042.08E-032.07E-011.32E+014.36E-055.66E-041.93E-012.08E+01 - 75M5 150.002.80E-053.22E-041.74E-027.30E-011.21E-051.06E-041.66E-021.17E+00 - 75M5 280.002.22E-061.35E-052.49E-045.08E-031.30E-066.28E-062.42E-048.73E-03 - 75M5 500.002.42E-078.77E-076.05E-066.00E-051.79E-075.38E-075.69E-061.10E-04 - 75N+ 50.002.49E-025.15E+003.36E+021.37E+043.75E-011.81E+019.68E+024.12E+04 - 75N+ 70.009.81E-031.01E+004.48E+011.26E+031.38E-014.01E+001.27E+023.52E+03 - 75N+ 100.003.76E-031.89E-015.69E+001.11E+024.98E-028.76E-011.65E+012.97E+02 - 75N+ 150.001.25E-032.97E-025.71E-017.58E+001.55E-021.65E-011.82E+002.05E+01 - 75N+ 200.005.79E-048.47E-031.18E-011.21E+006.82E-035.29E-024.17E-013.43E+00 - 75N+ 500.006.24E-052.90E-041.47E-036.72E-035.63E-042.07E-036.99E-032.43E-02 - 76K 74.876.61E-018.22E-012.05E-011.28E-021.11E+019.89E+011.61E+025.66E+01 - 76K 75.576.46E-018.42E-012.66E-013.28E-021.08E+019.56E+011.63E+027.26E+01 - 76K 76.876.20E-018.72E-013.81E-019.22E-021.03E+019.00E+011.66E+021.02E+02 - 76K 80.075.60E-019.18E-016.55E-013.49E-019.13E+007.77E+011.65E+021.64E+02 - 76K 83.874.98E-019.35E-019.38E-017.96E-017.98E+006.58E+011.59E+022.20E+02 - 76K 88.004.42E-019.24E-011.18E+001.35E+006.94E+005.54E+011.48E+022.57E+02 - 76K 94.003.74E-018.77E-011.40E+002.11E+005.74E+004.38E+011.30E+022.79E+02 - 76K 102.003.05E-017.90E-011.52E+002.87E+004.54E+003.27E+011.06E+022.70E+02 - 76K 114.002.30E-016.52E-011.48E+003.37E+003.30E+002.20E+017.63E+012.26E+02 - 76K 127.001.74E-015.22E-011.31E+003.35E+002.42E+001.50E+015.40E+011.73E+02 - 76K 144.001.27E-013.92E-011.06E+002.93E+001.69E+009.67E+003.51E+011.18E+02 - 76K 157.001.02E-013.18E-018.88E-012.54E+001.33E+007.15E+002.59E+018.80E+01 - 76K 174.007.83E-022.45E-017.01E-012.05E+009.93E-015.01E+001.79E+016.07E+01 - 76K 197.005.72E-021.78E-015.15E-011.53E+007.02E-013.28E+001.13E+013.79E+01 - 76K 225.004.11E-021.26E-013.64E-011.07E+004.86E-012.09E+006.96E+002.25E+01 - 76K 290.002.21E-026.49E-021.83E-015.22E-012.42E-019.05E-012.74E+008.16E+00 - 76K 375.001.21E-023.40E-029.15E-022.45E-011.21E-013.99E-011.09E+002.92E+00 - 76K 460.007.69E-032.08E-025.37E-021.36E-017.08E-022.13E-015.33E-011.31E+00 - 76K 570.004.88E-031.28E-023.14E-027.42E-024.05E-021.12E-012.59E-015.82E-01 - 76K 800.002.49E-036.32E-031.42E-023.01E-021.70E-024.29E-028.78E-021.73E-01 - 76K 1050.001.50E-033.70E-037.82E-031.53E-028.61E-032.06E-023.88E-026.99E-02 - 76K 1300.001.03E-032.47E-035.00E-039.21E-035.07E-031.18E-022.11E-023.58E-02 - 76K 1550.007.64E-041.79E-033.49E-036.17E-033.29E-037.55E-031.31E-022.12E-02 - 76L1 13.972.05E+004.42E+021.35E+044.74E+042.34E+025.61E+042.55E+062.58E+07 - 76L1 14.671.89E+003.47E+021.28E+048.25E+042.02E+024.45E+041.96E+062.32E+07 - 76L1 15.971.64E+002.27E+021.05E+041.18E+051.57E+022.98E+041.23E+061.76E+07 - 76L1 19.171.20E+008.80E+015.55E+031.08E+059.12E+011.27E+044.58E+057.93E+06 - 76L1 22.978.57E-013.32E+012.54E+036.24E+045.32E+015.50E+031.72E+053.16E+06 - 76L1 26.006.75E-011.67E+011.41E+033.77E+043.68E+013.11E+038.82E+041.62E+06 - 76L1 32.004.44E-015.19E+004.90E+021.42E+041.99E+011.21E+032.90E+045.07E+05 - 76L1 40.002.78E-011.53E+001.48E+024.35E+031.03E+014.48E+028.88E+031.41E+05 - 76L1 52.001.56E-014.75E-013.46E+019.83E+024.75E+001.42E+022.26E+033.10E+04 - 76L1 65.009.42E-022.44E-011.01E+012.65E+022.47E+005.46E+017.18E+028.53E+03 - 76L1 82.005.48E-021.47E-012.98E+006.73E+011.25E+002.07E+012.23E+022.25E+03 - 76L1 95.003.87E-021.09E-011.47E+002.86E+018.19E-011.13E+011.08E+029.78E+02 - 76L1 112.002.61E-027.70E-027.18E-011.13E+015.09E-015.82E+004.85E+013.89E+02 - 76L1 135.001.66E-025.10E-023.49E-014.18E+002.98E-012.79E+001.99E+011.39E+02 - 76L1 160.001.10E-023.45E-021.93E-011.79E+001.84E-011.45E+009.05E+005.57E+01 - 76L1 225.004.86E-031.52E-026.60E-023.93E-017.09E-024.09E-011.97E+009.41E+00 - 76L1 310.002.30E-037.00E-032.58E-021.12E-012.94E-021.32E-015.06E-011.93E+00 - 76L1 400.001.31E-033.84E-031.26E-024.53E-021.48E-025.62E-021.82E-015.89E-01 - 76L1 510.007.78E-042.22E-036.60E-032.03E-027.79E-032.58E-027.27E-022.02E-01 - 76L1 740.003.70E-041.01E-032.60E-036.52E-032.97E-038.38E-031.96E-024.45E-02 - 76L11000.002.12E-045.55E-041.29E-032.83E-031.39E-033.57E-037.38E-031.47E-02 - 76L11500.001.05E-042.58E-045.37E-041.02E-035.06E-041.21E-032.22E-033.82E-03 - 76L2 13.384.41E+002.26E+043.95E+068.12E+072.68E+012.29E+033.38E+041.06E+05 - 76L2 14.083.85E+001.76E+042.95E+067.09E+072.30E+011.89E+033.25E+041.86E+05 - 76L2 15.383.03E+001.13E+041.78E+065.10E+071.76E+011.35E+032.78E+042.71E+05 - 76L2 18.581.80E+004.46E+035.99E+052.08E+079.98E+006.55E+021.63E+042.60E+05 - 76L2 22.381.06E+001.79E+032.05E+057.49E+065.70E+003.21E+028.43E+031.62E+05 - 76L2 26.006.91E-018.57E+028.66E+043.14E+063.64E+001.81E+024.72E+039.57E+04 - 76L2 32.003.75E-013.12E+022.62E+048.96E+051.96E+008.13E+012.01E+034.07E+04 - 76L2 40.001.93E-011.06E+027.29E+032.25E+051.01E+003.45E+017.76E+021.48E+04 - 76L2 52.008.67E-023.01E+011.63E+034.34E+044.63E-011.27E+012.46E+024.15E+03 - 76L2 65.004.35E-021.04E+014.62E+021.06E+042.39E-015.42E+009.12E+011.36E+03 - 76L2 82.002.11E-023.51E+001.26E+022.45E+031.21E-012.25E+003.23E+014.15E+02 - 76L2 95.001.33E-021.77E+005.54E+019.70E+027.89E-021.30E+001.68E+011.95E+02 - 76L2 112.007.97E-038.33E-012.24E+013.47E+024.89E-027.01E-018.04E+008.35E+01 - 76L2 135.004.45E-033.57E-018.12E+001.09E+022.85E-023.51E-013.51E+003.19E+01 - 76L2 160.002.62E-031.67E-013.26E+003.85E+011.74E-021.88E-011.66E+001.34E+01 - 76L2 225.009.17E-043.76E-025.47E-015.00E+006.58E-035.47E-023.79E-012.39E+00 - 76L2 310.003.49E-049.71E-031.09E-017.86E-012.65E-031.76E-029.76E-024.94E-01 - 76L2 400.001.66E-043.44E-033.16E-021.91E-011.29E-037.30E-033.42E-021.47E-01 - 76L2 510.008.30E-051.33E-031.02E-025.25E-026.56E-043.21E-031.30E-024.78E-02 - 76L2 740.002.99E-053.32E-041.98E-038.15E-032.33E-049.46E-043.11E-039.33E-03 - 76L21000.001.36E-051.16E-045.74E-042.01E-031.01E-043.64E-041.04E-032.69E-03 - 76L21500.004.98E-063.10E-051.23E-043.60E-043.30E-051.05E-042.57E-045.64E-04 - 76L3 11.879.82E+005.32E+041.12E+072.78E+084.77E+008.34E+041.08E+081.51E+10 - 76L3 12.578.34E+003.98E+047.97E+062.27E+084.01E+006.27E+047.33E+079.77E+09 - 76L3 13.876.28E+002.42E+044.41E+061.47E+082.96E+003.84E+043.77E+074.60E+09 - 76L3 17.073.41E+008.49E+031.27E+064.92E+071.57E+001.36E+049.32E+069.46E+08 - 76L3 20.871.87E+003.08E+033.79E+051.51E+078.46E-015.01E+032.43E+062.06E+08 - 76L3 26.009.52E-011.02E+031.01E+053.83E+064.32E-011.68E+035.68E+053.94E+07 - 76L3 32.004.98E-013.58E+022.91E+041.01E+062.29E-015.96E+021.45E+058.35E+06 - 76L3 40.002.45E-011.17E+027.60E+032.34E+051.16E-011.97E+023.41E+041.60E+06 - 76L3 52.001.05E-013.13E+011.58E+034.09E+045.22E-025.35E+016.33E+032.35E+05 - 76L3 65.005.07E-021.03E+014.15E+029.17E+032.65E-021.77E+011.54E+034.71E+04 - 76L3 82.002.36E-023.24E+001.04E+021.92E+031.31E-025.62E+003.62E+029.03E+03 - 76L3 95.001.45E-021.57E+004.32E+017.13E+028.44E-032.72E+001.46E+023.22E+03 - 76L3 112.008.40E-036.96E-011.63E+012.36E+025.15E-031.21E+005.36E+011.03E+03 - 76L3 135.004.53E-032.78E-015.40E+006.72E+012.95E-034.85E-011.74E+012.86E+02 - 76L3 160.002.59E-031.22E-011.99E+002.16E+011.78E-032.12E-016.35E+009.09E+01 - 76L3 225.008.53E-042.37E-022.75E-012.26E+006.50E-044.08E-028.73E-019.63E+00 - 76L3 310.003.08E-045.26E-034.47E-022.83E-012.56E-048.84E-031.42E-011.25E+00 - 76L3 400.001.40E-041.65E-031.09E-025.71E-021.23E-042.68E-033.49E-022.60E-01 - 76L3 510.006.81E-055.67E-043.00E-031.31E-026.24E-058.78E-049.44E-036.07E-02 - 76L3 740.002.39E-051.21E-044.61E-041.57E-032.28E-051.69E-041.35E-037.11E-03 - 76L31000.001.09E-053.86E-051.15E-043.25E-041.05E-054.86E-052.98E-041.35E-03 - 76L31500.004.16E-069.74E-062.16E-054.85E-054.07E-061.08E-054.30E-051.59E-04 - 76M1 4.053.47E+001.76E+041.17E+066.55E+072.15E+036.05E+063.20E+093.73E+11 - 76M1 5.052.72E+007.04E+035.11E+052.39E+071.11E+032.05E+067.64E+088.15E+10 - 76M1 7.051.71E+001.70E+031.49E+055.07E+064.10E+024.02E+059.03E+077.95E+09 - 76M1 11.058.16E-012.31E+022.40E+049.28E+051.07E+024.57E+045.45E+063.48E+08 - 76M1 18.053.26E-012.26E+012.52E+031.05E+052.48E+014.42E+032.80E+051.21E+07 - 76M1 27.001.44E-012.98E+003.35E+021.32E+047.47E+006.78E+022.66E+048.15E+05 - 76M1 42.005.57E-023.44E-013.23E+011.11E+032.02E+009.17E+012.21E+034.61E+04 - 76M1 54.003.17E-021.26E-018.31E+002.56E+029.65E-013.03E+015.62E+029.40E+03 - 76M1 72.001.63E-025.29E-021.80E+004.66E+014.16E-018.79E+001.22E+021.59E+03 - 76M1 105.006.65E-032.13E-022.85E-015.19E+001.39E-011.83E+001.78E+011.68E+02 - 76M1 150.002.82E-039.20E-036.63E-027.50E-015.01E-024.45E-013.15E+002.19E+01 - 76M1 280.006.43E-042.01E-038.39E-034.36E-028.78E-034.40E-021.89E-018.08E-01 - 76M1 500.001.79E-045.22E-041.62E-035.24E-031.86E-036.34E-031.85E-025.34E-02 - 76M2 3.797.91E+002.85E+064.51E+098.49E+112.82E+022.19E+052.94E+079.05E+08 - 76M2 4.795.67E+008.89E+059.84E+081.68E+111.40E+027.57E+049.23E+064.45E+08 - 76M2 6.793.06E+001.57E+051.05E+081.48E+104.92E+011.60E+041.61E+069.22E+07 - 76M2 10.791.16E+001.57E+045.65E+065.89E+081.23E+012.13E+031.59E+058.46E+06 - 76M2 17.793.48E-011.33E+032.60E+051.88E+072.75E+002.60E+021.35E+045.64E+05 - 76M2 27.001.16E-011.74E+022.11E+041.10E+067.95E-014.71E+011.78E+035.70E+04 - 76M2 42.003.40E-022.05E+011.55E+035.71E+042.15E-018.05E+002.15E+025.02E+03 - 76M2 54.001.64E-026.19E+003.61E+021.08E+041.02E-013.00E+006.54E+011.27E+03 - 76M2 72.006.98E-031.60E+006.97E+011.65E+034.41E-029.84E-011.70E+012.64E+02 - 76M2 105.002.23E-032.78E-018.40E+001.45E+021.47E-022.34E-012.99E+003.46E+01 - 76M2 150.007.52E-045.56E-021.20E+001.55E+015.27E-036.17E-025.96E-015.24E+00 - 76M2 280.001.15E-043.73E-034.65E-023.70E-018.91E-046.46E-033.91E-022.17E-01 - 76M2 500.002.17E-053.61E-042.85E-031.51E-021.75E-048.75E-043.62E-031.37E-02 - 76M3 3.462.21E+016.47E+061.14E+102.28E+124.77E+011.05E+071.59E+112.57E+14 - 76M3 4.461.40E+011.81E+062.14E+093.76E+112.22E+012.97E+062.75E+102.92E+13 - 76M3 6.466.58E+002.81E+051.92E+082.69E+107.20E+004.67E+052.13E+091.27E+12 - 76M3 10.462.14E+002.49E+048.77E+068.83E+081.66E+004.20E+047.81E+072.32E+10 - 76M3 17.465.67E-011.89E+033.50E+052.41E+073.51E-013.26E+032.42E+063.66E+08 - 76M3 27.001.66E-012.11E+022.35E+041.15E+069.33E-023.71E+021.32E+051.18E+07 - 76M3 42.004.45E-022.32E+011.58E+035.40E+042.45E-024.12E+017.29E+033.98E+05 - 76M3 54.002.05E-026.61E+003.44E+029.54E+031.15E-021.18E+011.45E+036.06E+04 - 76M3 72.008.27E-031.58E+006.07E+011.32E+034.84E-032.85E+002.33E+027.34E+03 - 76M3 105.002.46E-032.46E-016.35E+001.01E+021.57E-034.44E-012.24E+014.93E+02 - 76M3 150.007.77E-044.31E-027.70E-019.00E+005.44E-047.74E-022.60E+004.17E+01 - 76M3 280.001.06E-042.19E-032.09E-021.45E-018.76E-053.81E-036.92E-026.76E-01 - 76M3 500.001.84E-051.61E-048.76E-043.91E-031.69E-052.54E-042.85E-031.89E-02 - 76M4 3.035.95E+011.99E+051.01E+101.19E+141.48E+013.41E+052.65E+091.82E+12 - 76M4 4.032.50E+014.67E+041.37E+099.85E+125.93E+008.20E+043.87E+082.13E+11 - 76M4 6.036.80E+006.02E+038.09E+072.98E+111.59E+001.09E+042.61E+071.03E+10 - 76M4 10.031.18E+004.56E+022.26E+063.78E+092.94E-018.40E+029.09E+052.30E+08 - 76M4 17.031.70E-013.11E+015.44E+044.29E+074.88E-025.83E+012.93E+044.61E+06 - 76M4 27.002.89E-022.97E+002.14E+039.15E+059.87E-035.72E+001.55E+031.60E+05 - 76M4 42.004.97E-033.10E-019.75E+012.41E+042.07E-036.17E-019.64E+016.61E+03 - 76M4 54.001.79E-038.53E-021.70E+013.11E+038.37E-041.74E-012.02E+011.10E+03 - 76M4 72.005.47E-041.95E-022.34E+003.06E+022.94E-044.12E-023.44E+001.44E+02 - 76M4 105.001.14E-042.84E-031.79E-011.52E+017.34E-056.25E-033.46E-011.03E+01 - 76M4 150.002.58E-054.68E-041.65E-029.43E-011.95E-051.06E-034.08E-028.90E-01 - 76M4 280.002.02E-062.15E-052.98E-048.53E-031.87E-064.92E-051.05E-031.37E-02 - 76M4 500.002.03E-071.40E-069.38E-061.39E-042.11E-072.99E-063.92E-053.37E-04 - 76M5 2.969.04E+012.28E+051.95E+102.00E+148.80E+002.68E+041.43E+106.50E+14 - 76M5 3.963.69E+015.13E+042.53E+091.56E+133.45E+006.30E+031.87E+094.84E+13 - 76M5 5.969.68E+006.33E+031.43E+084.42E+119.15E-018.19E+021.07E+081.26E+12 - 76M5 9.961.61E+004.60E+023.82E+065.26E+091.68E-016.34E+012.95E+061.33E+10 - 76M5 16.962.24E-013.02E+018.88E+045.63E+072.83E-024.49E+007.15E+041.24E+08 - 76M5 27.003.66E-022.75E+003.31E+031.12E+065.77E-034.51E-012.79E+032.18E+06 - 76M5 42.006.15E-032.77E-011.46E+022.79E+041.24E-035.15E-021.28E+024.96E+04 - 76M5 54.002.18E-037.42E-022.47E+013.47E+035.11E-041.51E-022.23E+015.92E+03 - 76M5 72.006.58E-041.64E-023.26E+003.23E+021.84E-043.77E-033.02E+005.35E+02 - 76M5 105.001.36E-042.26E-032.31E-011.47E+014.75E-056.21E-042.22E-012.40E+01 - 76M5 150.003.05E-053.50E-041.94E-028.18E-011.32E-051.17E-041.90E-021.35E+00 - 76M5 280.002.38E-061.48E-052.78E-045.69E-031.42E-066.89E-062.76E-041.00E-02 - 76M5 500.002.70E-079.61E-076.72E-066.72E-051.95E-075.91E-076.43E-061.26E-04 - 76N+ 50.002.61E-025.68E+003.70E+021.52E+044.20E-012.05E+011.10E+034.73E+04 - 76N+ 70.001.03E-021.11E+004.95E+011.39E+031.55E-014.53E+001.44E+024.02E+03 - 76N+ 100.003.95E-032.08E-016.28E+001.22E+025.58E-029.85E-011.87E+013.38E+02 - 76N+ 150.001.32E-033.27E-026.32E-018.37E+001.74E-021.85E-012.05E+002.32E+01 - 76N+ 200.006.13E-049.31E-031.31E-011.34E+007.64E-035.93E-024.69E-013.86E+00 - 76N+ 500.006.64E-053.16E-041.63E-037.46E-036.29E-042.31E-037.79E-032.71E-02 - 77K 77.116.23E-017.44E-011.80E-011.07E-021.11E+019.48E+011.49E+025.07E+01 - 77K 77.816.09E-017.61E-012.33E-012.74E-021.08E+019.18E+011.51E+026.47E+01 - 77K 79.115.85E-017.88E-013.31E-017.64E-021.03E+018.66E+011.53E+029.00E+01 - 77K 82.315.30E-018.30E-015.67E-012.88E-019.17E+007.51E+011.54E+021.45E+02 - 77K 86.114.74E-018.48E-018.13E-016.60E-018.05E+006.39E+011.48E+021.95E+02 - 77K 90.004.24E-018.42E-011.01E+001.10E+007.08E+005.46E+011.39E+022.28E+02 - 77K 96.003.61E-018.05E-011.22E+001.76E+005.88E+004.34E+011.23E+022.51E+02 - 77K 104.002.95E-017.30E-011.35E+002.44E+004.67E+003.26E+011.01E+022.47E+02 - 77K 116.002.24E-016.09E-011.33E+002.94E+003.41E+002.22E+017.40E+012.10E+02 - 77K 129.001.71E-014.93E-011.20E+002.98E+002.52E+001.52E+015.28E+011.63E+02 - 77K 146.001.25E-013.74E-019.85E-012.66E+001.77E+009.87E+003.48E+011.13E+02 - 77K 159.001.01E-013.05E-018.32E-012.33E+001.39E+007.34E+002.58E+018.52E+01 - 77K 176.007.79E-022.37E-016.64E-011.91E+001.05E+005.17E+001.80E+015.94E+01 - 77K 199.005.73E-021.74E-014.94E-011.44E+007.42E-013.40E+001.15E+013.75E+01 - 77K 225.004.22E-021.27E-013.61E-011.06E+005.28E-012.25E+007.34E+002.33E+01 - 77K 290.002.28E-026.59E-021.85E-015.23E-012.63E-019.73E-012.90E+008.53E+00 - 77K 375.001.25E-023.48E-029.34E-022.50E-011.32E-014.29E-011.16E+003.07E+00 - 77K 470.007.61E-032.05E-025.23E-021.31E-017.25E-022.14E-015.28E-011.27E+00 - 77K 580.004.89E-031.28E-023.12E-027.33E-024.19E-021.15E-012.61E-015.78E-01 - 77K 810.002.53E-036.43E-031.44E-023.04E-021.78E-024.46E-029.03E-021.76E-01 - 77K 1100.001.44E-033.55E-037.44E-031.43E-028.26E-031.95E-023.63E-026.41E-02 - 77K 1350.001.01E-032.42E-034.87E-038.88E-034.97E-031.15E-022.04E-023.40E-02 - 77K 1600.007.54E-041.77E-033.45E-036.06E-033.27E-037.48E-031.28E-022.06E-02 - 77L1 14.421.92E+004.14E+021.21E+044.00E+042.34E+025.35E+042.34E+062.28E+07 - 77L1 15.121.78E+003.28E+021.15E+046.99E+042.03E+024.28E+041.81E+062.06E+07 - 77L1 16.421.55E+002.18E+029.55E+031.01E+051.59E+022.90E+041.16E+061.58E+07 - 77L1 19.621.14E+008.73E+015.20E+039.56E+049.36E+011.26E+044.41E+057.34E+06 - 77L1 23.428.25E-013.40E+012.44E+035.72E+045.53E+015.56E+031.69E+053.01E+06 - 77L1 27.006.27E-011.56E+011.25E+033.23E+043.62E+012.90E+037.87E+041.40E+06 - 77L1 33.004.19E-015.12E+004.52E+021.26E+042.00E+011.17E+032.69E+044.56E+05 - 77L1 41.002.66E-011.58E+001.43E+024.03E+031.05E+014.43E+028.53E+031.32E+05 - 77L1 53.001.52E-014.98E-013.50E+019.53E+024.94E+001.44E+022.24E+032.99E+04 - 77L1 66.009.24E-022.49E-011.05E+012.66E+022.60E+005.64E+017.26E+028.44E+03 - 77L1 83.005.43E-021.46E-013.19E+006.96E+011.33E+002.16E+012.30E+022.28E+03 - 77L1 96.003.85E-021.08E-011.58E+003.01E+018.73E-011.19E+011.12E+029.99E+02 - 77L1 113.002.61E-027.63E-027.70E-011.21E+015.46E-016.17E+005.07E+014.02E+02 - 77L1 136.001.67E-025.08E-023.71E-014.49E+003.21E-012.97E+002.10E+011.45E+02 - 77L1 165.001.05E-023.26E-021.88E-011.72E+001.85E-011.41E+008.57E+005.12E+01 - 77L1 230.004.76E-031.48E-026.56E-023.92E-017.32E-024.13E-011.95E+009.12E+00 - 77L1 315.002.30E-036.98E-032.60E-021.14E-013.09E-021.37E-015.16E-011.94E+00 - 77L1 400.001.36E-034.00E-031.34E-024.87E-021.62E-026.13E-021.98E-016.38E-01 - 77L1 510.008.13E-042.32E-037.00E-032.17E-028.52E-032.81E-027.89E-022.19E-01 - 77L1 740.003.88E-041.06E-032.76E-036.97E-033.25E-039.12E-032.12E-024.82E-02 - 77L11000.002.22E-045.86E-041.37E-033.03E-031.51E-033.88E-038.01E-031.59E-02 - 77L11500.001.10E-042.73E-045.72E-041.09E-035.48E-041.31E-032.40E-034.13E-03 - 77L2 13.824.16E+002.10E+043.51E+066.93E+072.69E+012.19E+033.09E+049.14E+04 - 77L2 14.523.65E+001.64E+042.65E+066.09E+072.32E+011.81E+032.99E+041.61E+05 - 77L2 15.822.89E+001.07E+041.62E+064.45E+071.79E+011.31E+032.57E+042.37E+05 - 77L2 19.021.74E+004.32E+035.62E+051.87E+071.03E+016.49E+021.54E+042.34E+05 - 77L2 22.821.04E+001.77E+031.97E+056.94E+065.96E+003.23E+028.16E+031.50E+05 - 77L2 27.006.43E-017.76E+027.51E+042.62E+063.60E+001.70E+024.26E+038.36E+04 - 77L2 33.003.57E-012.92E+022.37E+047.83E+051.98E+007.86E+011.87E+033.67E+04 - 77L2 41.001.87E-011.02E+026.84E+032.05E+051.04E+003.42E+017.44E+021.37E+04 - 77L2 53.008.58E-022.99E+011.59E+034.11E+044.85E-011.28E+012.42E+023.99E+03 - 77L2 66.004.37E-021.06E+014.59E+021.03E+042.54E-015.59E+009.18E+011.34E+03 - 77L2 83.002.15E-023.62E+001.27E+022.44E+031.30E-012.35E+003.31E+014.17E+02 - 77L2 96.001.37E-021.85E+005.69E+019.79E+028.51E-021.36E+001.73E+011.98E+02 - 77L2 113.008.23E-038.74E-012.32E+013.54E+025.30E-027.43E-018.39E+008.57E+01 - 77L2 136.004.62E-033.78E-018.50E+001.13E+023.10E-023.75E-013.70E+003.31E+01 - 77L2 165.002.54E-031.59E-013.02E+003.47E+011.78E-021.85E-011.58E+001.24E+01 - 77L2 230.009.17E-043.75E-025.35E-014.79E+006.90E-035.58E-023.77E-012.33E+00 - 77L2 315.003.58E-049.99E-031.10E-017.85E-012.84E-031.84E-021.00E-014.99E-01 - 77L2 400.001.79E-043.79E-033.47E-022.09E-011.45E-038.09E-033.76E-021.60E-01 - 77L2 510.008.99E-051.46E-031.12E-025.77E-027.36E-043.56E-031.43E-025.25E-02 - 77L2 740.003.26E-053.66E-042.18E-038.98E-032.62E-041.05E-033.45E-031.03E-02 - 77L21000.001.49E-051.28E-046.36E-042.23E-031.14E-044.06E-041.15E-032.98E-03 - 77L21500.005.46E-063.43E-051.37E-043.99E-043.71E-051.18E-042.86E-046.27E-04 - 77L3 12.219.28E+004.95E+041.01E+072.41E+084.65E+008.05E+041.00E+081.36E+10 - 77L3 12.917.92E+003.74E+047.22E+061.98E+083.92E+006.10E+046.89E+078.91E+09 - 77L3 14.216.01E+002.30E+044.06E+061.31E+082.92E+003.78E+043.60E+074.28E+09 - 77L3 17.413.31E+008.26E+031.20E+064.49E+071.57E+001.37E+049.19E+069.10E+08 - 77L3 21.211.83E+003.05E+033.67E+051.41E+078.56E-015.13E+032.46E+062.04E+08 - 77L3 27.008.76E-019.05E+028.61E+043.14E+064.09E-011.54E+034.98E+053.32E+07 - 77L3 33.004.68E-013.30E+022.58E+048.66E+052.22E-015.69E+021.33E+057.43E+06 - 77L3 41.002.35E-011.11E+027.00E+032.09E+051.14E-011.93E+023.26E+041.49E+06 - 77L3 53.001.03E-013.07E+011.50E+033.80E+045.24E-025.41E+016.28E+032.29E+05 - 77L3 66.005.02E-021.03E+014.05E+028.75E+032.69E-021.83E+011.57E+034.70E+04 - 77L3 83.002.37E-023.29E+001.03E+021.88E+031.35E-025.88E+003.75E+029.22E+03 - 77L3 96.001.46E-021.60E+004.34E+017.05E+028.71E-032.87E+001.53E+023.32E+03 - 77L3 113.008.54E-037.17E-011.65E+012.36E+025.34E-031.29E+005.66E+011.07E+03 - 77L3 136.004.63E-032.89E-015.54E+006.80E+013.07E-035.20E-011.85E+013.02E+02 - 77L3 165.002.46E-031.13E-011.78E+001.87E+011.73E-032.03E-015.89E+008.21E+01 - 77L3 230.008.36E-042.29E-022.60E-012.09E+006.48E-044.06E-028.55E-019.25E+00 - 77L3 315.003.08E-045.26E-034.38E-022.73E-012.60E-049.07E-031.44E-011.25E+00 - 77L3 400.001.48E-041.77E-031.18E-026.10E-021.31E-042.95E-033.87E-022.87E-01 - 77L3 510.007.19E-056.09E-043.22E-031.40E-026.63E-059.66E-041.04E-026.70E-02 - 77L3 740.002.54E-051.30E-044.95E-041.68E-032.42E-051.85E-041.49E-037.84E-03 - 77L31000.001.15E-054.13E-051.23E-043.49E-041.12E-055.30E-053.28E-041.49E-03 - 77L31500.004.38E-061.04E-052.31E-055.21E-054.31E-061.17E-054.71E-051.75E-04 - 77M1 4.173.26E+001.69E+041.12E+065.62E+072.16E+035.84E+062.97E+093.35E+11 - 77M1 5.172.58E+006.94E+035.00E+052.21E+071.14E+032.04E+067.38E+087.63E+10 - 77M1 7.171.65E+001.73E+031.48E+054.97E+064.29E+024.13E+059.11E+077.83E+09 - 77M1 11.177.97E-012.43E+022.44E+049.21E+051.14E+024.83E+045.71E+063.59E+08 - 77M1 18.173.23E-012.47E+012.64E+031.07E+052.68E+014.77E+033.01E+051.28E+07 - 77M1 27.001.45E-013.45E+003.68E+021.41E+048.25E+007.55E+022.97E+049.03E+05 - 77M1 42.005.65E-024.00E-013.63E+011.21E+032.23E+001.02E+022.45E+035.09E+04 - 77M1 54.003.22E-021.41E-019.42E+002.82E+021.06E+003.36E+016.22E+021.04E+04 - 77M1 72.001.66E-025.63E-022.05E+005.20E+014.59E-019.73E+001.35E+021.75E+03 - 77M1 105.006.82E-032.19E-023.22E-015.83E+001.53E-012.02E+001.96E+011.84E+02 - 77M1 150.002.91E-039.44E-037.31E-028.42E-015.53E-024.90E-013.46E+002.40E+01 - 77M1 280.006.67E-042.09E-038.98E-034.77E-029.67E-034.84E-022.07E-018.82E-01 - 77M1 500.001.88E-045.48E-041.73E-035.66E-032.04E-036.94E-032.02E-025.82E-02 - 77M2 3.917.43E+002.67E+064.07E+097.42E+112.86E+022.12E+052.74E+077.98E+08 - 77M2 4.915.40E+008.60E+059.26E+081.54E+111.45E+027.54E+048.89E+064.09E+08 - 77M2 6.912.97E+001.57E+051.03E+081.42E+105.20E+011.64E+041.61E+068.88E+07 - 77M2 10.911.15E+001.63E+045.79E+065.92E+081.32E+012.25E+031.64E+058.50E+06 - 77M2 17.913.52E-011.41E+032.73E+051.95E+073.00E+002.79E+021.42E+045.83E+05 - 77M2 27.001.21E-011.90E+022.30E+041.20E+068.85E-015.19E+011.94E+036.13E+04 - 77M2 42.003.55E-022.25E+011.70E+036.19E+042.39E-018.86E+002.34E+025.41E+03 - 77M2 54.001.72E-026.79E+003.95E+021.17E+041.14E-013.30E+007.13E+011.37E+03 - 77M2 72.007.37E-031.75E+007.62E+011.79E+034.92E-021.08E+001.86E+012.86E+02 - 77M2 105.002.37E-033.06E-019.20E+001.58E+021.65E-022.58E-013.27E+003.76E+01 - 77M2 150.008.03E-046.11E-021.32E+001.70E+015.90E-036.82E-026.54E-015.72E+00 - 77M2 280.001.24E-044.11E-035.12E-024.06E-011.00E-037.17E-034.31E-022.38E-01 - 77M2 500.002.35E-054.00E-043.16E-031.67E-021.97E-049.76E-044.01E-031.51E-02 - 77M3 3.552.10E+016.11E+061.04E+102.02E+124.70E+011.03E+071.51E+112.37E+14 - 77M3 4.551.35E+011.77E+062.04E+093.47E+112.22E+013.00E+062.71E+102.83E+13 - 77M3 6.556.45E+002.83E+051.90E+082.60E+107.36E+004.86E+052.19E+091.30E+12 - 77M3 10.552.14E+002.57E+048.98E+068.86E+081.73E+004.50E+048.36E+072.47E+10 - 77M3 17.555.74E-011.99E+033.66E+052.48E+073.69E-013.55E+032.65E+064.00E+08 - 77M3 27.001.72E-012.29E+022.54E+041.23E+069.98E-024.15E+021.49E+051.34E+07 - 77M3 42.004.63E-022.51E+011.70E+035.76E+042.62E-024.61E+018.24E+034.50E+05 - 77M3 54.002.14E-027.16E+003.70E+021.02E+041.23E-021.32E+011.63E+036.85E+04 - 77M3 72.008.64E-031.72E+006.53E+011.41E+035.18E-033.19E+002.63E+028.26E+03 - 77M3 105.002.58E-032.67E-016.84E+001.08E+021.68E-034.96E-012.52E+015.54E+02 - 77M3 150.008.17E-044.67E-028.31E-019.64E+005.82E-048.64E-022.91E+004.67E+01 - 77M3 280.001.12E-042.38E-032.26E-021.56E-019.36E-054.24E-037.73E-027.54E-01 - 77M3 500.001.95E-051.74E-049.46E-044.21E-031.81E-052.82E-043.17E-032.10E-02 - 77M4 3.125.67E+011.88E+059.25E+091.06E+141.46E+013.35E+052.51E+091.67E+12 - 77M4 4.122.44E+014.56E+041.31E+099.29E+125.98E+008.32E+043.84E+082.06E+11 - 77M4 6.126.79E+006.09E+038.13E+072.99E+111.64E+001.14E+042.71E+071.05E+10 - 77M4 10.121.21E+004.75E+022.36E+063.97E+093.10E-019.08E+029.77E+052.44E+08 - 77M4 17.121.77E-013.30E+015.83E+044.62E+075.21E-026.42E+013.22E+045.01E+06 - 77M4 27.003.09E-023.24E+002.38E+031.03E+061.07E-026.46E+001.75E+031.80E+05 - 77M4 42.005.35E-033.39E-011.08E+022.70E+042.26E-036.98E-011.09E+027.44E+03 - 77M4 54.001.93E-039.37E-021.89E+013.49E+039.16E-041.97E-012.29E+011.24E+03 - 77M4 72.005.93E-042.15E-022.60E+003.43E+023.22E-044.66E-023.89E+001.62E+02 - 77M4 105.001.25E-043.14E-031.99E-011.71E+018.07E-057.07E-033.92E-011.16E+01 - 77M4 150.002.85E-055.18E-041.83E-021.06E+002.14E-051.20E-034.61E-021.00E+00 - 77M4 280.002.21E-062.39E-053.31E-049.60E-032.06E-065.57E-051.19E-031.55E-02 - 77M4 500.002.25E-071.56E-061.05E-051.57E-042.33E-073.38E-064.46E-053.82E-04 - 77M5 3.048.63E+012.13E+051.80E+101.79E+148.65E+002.58E+041.36E+106.00E+14 - 77M5 4.043.60E+014.96E+042.45E+091.48E+133.47E+006.26E+031.86E+094.74E+13 - 77M5 6.049.67E+006.33E+031.45E+084.44E+119.40E-018.42E+021.12E+081.31E+12 - 77M5 10.041.65E+004.73E+024.02E+065.53E+091.76E-016.68E+013.20E+061.45E+10 - 77M5 17.042.33E-013.16E+019.57E+046.07E+073.00E-024.82E+007.95E+041.39E+08 - 77M5 27.003.90E-022.96E+003.69E+031.25E+066.23E-034.94E-013.20E+032.54E+06 - 77M5 42.006.59E-032.98E-011.63E+023.12E+041.34E-035.64E-021.47E+025.76E+04 - 77M5 54.002.35E-038.01E-022.76E+013.88E+035.55E-041.66E-022.55E+016.87E+03 - 77M5 72.007.09E-041.77E-023.64E+003.62E+022.00E-044.13E-033.46E+006.19E+02 - 77M5 105.001.46E-042.45E-032.58E-011.65E+015.17E-056.81E-042.54E-012.77E+01 - 77M5 150.003.30E-053.81E-042.16E-029.15E-011.43E-051.28E-042.18E-021.55E+00 - 77M5 280.002.64E-061.62E-053.09E-046.37E-031.55E-067.56E-063.15E-041.15E-02 - 77M5 500.003.02E-071.06E-067.47E-067.51E-052.13E-076.48E-077.26E-061.44E-04 - 77N+ 50.002.72E-026.26E+004.08E+021.68E+044.66E-012.29E+011.25E+035.42E+04 - 77N+ 70.001.08E-021.22E+005.45E+011.53E+031.72E-015.06E+001.63E+024.58E+03 - 77N+ 100.004.14E-032.29E-016.92E+001.35E+026.19E-021.10E+002.10E+013.82E+02 - 77N+ 150.001.39E-033.59E-026.97E-019.22E+001.93E-022.05E-012.29E+002.60E+01 - 77N+ 200.006.45E-041.02E-021.45E-011.47E+008.48E-036.58E-025.22E-014.32E+00 - 77N+ 500.007.04E-053.42E-041.79E-038.25E-036.95E-042.55E-038.60E-032.99E-02 - 78K 79.395.87E-016.73E-011.58E-019.04E-031.11E+019.10E+011.39E+024.54E+01 - 78K 80.095.75E-016.88E-012.03E-012.29E-021.08E+018.82E+011.40E+025.77E+01 - 78K 81.395.53E-017.13E-012.88E-016.35E-021.03E+018.34E+011.42E+027.98E+01 - 78K 84.595.02E-017.52E-014.92E-012.39E-019.22E+007.26E+011.43E+021.29E+02 - 78K 88.394.50E-017.69E-017.06E-015.49E-018.12E+006.21E+011.38E+021.73E+02 - 78K 92.004.08E-017.67E-018.72E-018.93E-017.23E+005.39E+011.31E+022.02E+02 - 78K 98.003.48E-017.38E-011.07E+001.46E+006.03E+004.31E+011.16E+022.25E+02 - 78K 106.002.86E-016.75E-011.19E+002.07E+004.81E+003.26E+019.67E+012.25E+02 - 78K 118.002.19E-015.69E-011.20E+002.56E+003.54E+002.23E+017.17E+011.95E+02 - 78K 131.001.68E-014.65E-011.10E+002.65E+002.62E+001.54E+015.18E+011.54E+02 - 78K 148.001.23E-013.56E-019.14E-012.41E+001.85E+001.01E+013.45E+011.08E+02 - 78K 161.009.98E-022.93E-017.80E-012.14E+001.46E+007.53E+002.58E+018.24E+01 - 78K 178.007.76E-022.29E-016.30E-011.78E+001.10E+005.33E+001.80E+015.80E+01 - 78K 201.005.73E-021.69E-014.74E-011.37E+007.84E-013.52E+001.16E+013.71E+01 - 78K 230.004.11E-021.20E-013.39E-019.80E-015.40E-012.24E+007.13E+002.21E+01 - 78K 295.002.25E-026.42E-021.78E-015.00E-012.73E-019.88E-012.89E+008.31E+00 - 78K 380.001.26E-023.46E-029.22E-022.45E-011.38E-014.42E-011.17E+003.06E+00 - 78K 470.007.88E-032.11E-025.39E-021.35E-017.86E-022.30E-015.62E-011.34E+00 - 78K 580.005.07E-031.33E-023.24E-027.59E-024.54E-021.23E-012.78E-016.12E-01 - 78K 810.002.63E-036.71E-031.51E-023.18E-021.93E-024.79E-029.64E-021.87E-01 - 78K 1100.001.50E-033.72E-037.81E-031.50E-028.90E-032.10E-023.88E-026.82E-02 - 78K 1350.001.05E-032.54E-035.12E-039.35E-035.34E-031.23E-022.18E-023.62E-02 - 78K 1600.007.87E-041.86E-033.64E-036.38E-033.51E-038.03E-031.37E-022.20E-02 - 78L1 14.881.80E+003.89E+021.09E+043.37E+042.34E+025.11E+042.15E+062.01E+07 - 78L1 15.581.68E+003.11E+021.03E+045.91E+042.04E+024.12E+041.67E+061.83E+07 - 78L1 16.881.47E+002.09E+028.68E+038.70E+041.61E+022.82E+041.08E+061.42E+07 - 78L1 20.081.09E+008.64E+014.85E+038.46E+049.60E+011.26E+044.24E+056.78E+06 - 78L1 23.887.93E-013.47E+012.34E+035.23E+045.73E+015.63E+031.67E+052.85E+06 - 78L1 27.006.28E-011.79E+011.32E+033.25E+043.98E+013.20E+038.60E+041.48E+06 - 78L1 33.004.21E-015.97E+004.90E+021.30E+042.20E+011.29E+032.94E+044.87E+05 - 78L1 41.002.68E-011.86E+001.57E+024.26E+031.16E+014.89E+029.32E+031.41E+05 - 78L1 53.001.54E-015.64E-013.91E+011.03E+035.43E+001.59E+022.44E+033.23E+04 - 78L1 66.009.39E-022.67E-011.19E+012.91E+022.85E+006.20E+017.93E+029.12E+03 - 78L1 83.005.53E-021.51E-013.61E+007.70E+011.46E+002.38E+012.51E+022.46E+03 - 78L1 96.003.93E-021.10E-011.78E+003.34E+019.60E-011.31E+011.22E+021.08E+03 - 78L1 113.002.67E-027.75E-028.59E-011.34E+016.00E-016.77E+005.53E+014.35E+02 - 78L1 136.001.72E-025.16E-024.08E-015.00E+003.53E-013.26E+002.29E+011.57E+02 - 78L1 165.001.08E-023.32E-022.03E-011.90E+002.04E-011.55E+009.33E+005.55E+01 - 78L1 230.004.92E-031.52E-026.98E-024.28E-018.03E-024.51E-012.12E+009.88E+00 - 78L1 315.002.39E-037.23E-032.76E-021.23E-013.38E-021.49E-015.61E-012.10E+00 - 78L1 400.001.41E-034.17E-031.42E-025.23E-021.78E-026.69E-022.16E-016.91E-01 - 78L1 510.008.46E-042.43E-037.42E-032.32E-029.33E-033.07E-028.57E-022.37E-01 - 78L1 740.004.06E-041.12E-032.94E-037.45E-033.54E-039.92E-032.30E-025.21E-02 - 78L11000.002.33E-046.19E-041.46E-033.24E-031.64E-034.22E-038.68E-031.72E-02 - 78L11500.001.16E-042.89E-046.09E-041.16E-035.95E-041.42E-032.60E-034.47E-03 - 78L2 14.273.92E+001.94E+043.12E+065.93E+072.70E+012.09E+032.83E+047.85E+04 - 78L2 14.973.45E+001.54E+042.38E+065.24E+072.34E+011.74E+032.74E+041.39E+05 - 78L2 16.272.75E+001.02E+041.47E+063.88E+071.82E+011.27E+032.38E+042.07E+05 - 78L2 19.471.69E+004.19E+035.28E+051.68E+071.06E+016.42E+021.46E+042.11E+05 - 78L2 23.271.02E+001.75E+031.90E+056.43E+066.23E+003.25E+027.89E+031.39E+05 - 78L2 27.006.68E-018.44E+028.08E+042.74E+063.99E+001.84E+024.47E+038.41E+04 - 78L2 33.003.72E-013.18E+022.56E+048.25E+052.19E+008.54E+011.98E+033.77E+04 - 78L2 41.001.95E-011.12E+027.38E+032.17E+051.15E+003.72E+017.92E+021.43E+04 - 78L2 53.009.01E-023.26E+011.72E+034.38E+045.39E-011.40E+012.60E+024.20E+03 - 78L2 66.004.60E-021.15E+014.98E+021.11E+042.82E-016.10E+009.88E+011.42E+03 - 78L2 83.002.27E-023.95E+001.38E+022.62E+031.44E-012.57E+003.57E+014.45E+02 - 78L2 96.001.45E-022.02E+006.18E+011.05E+039.46E-021.49E+001.87E+012.12E+02 - 78L2 113.008.73E-039.55E-012.53E+013.82E+025.90E-028.15E-019.10E+009.20E+01 - 78L2 136.004.92E-034.13E-019.26E+001.22E+023.46E-024.11E-014.02E+003.57E+01 - 78L2 165.002.71E-031.74E-013.30E+003.76E+011.98E-022.03E-011.72E+001.34E+01 - 78L2 230.009.82E-044.11E-025.85E-015.21E+007.71E-036.15E-024.12E-012.53E+00 - 78L2 315.003.85E-041.10E-021.21E-018.57E-013.17E-032.04E-021.10E-015.44E-01 - 78L2 400.001.93E-044.17E-033.82E-022.29E-011.62E-038.95E-034.14E-021.76E-01 - 78L2 510.009.74E-051.61E-031.23E-026.33E-028.24E-043.95E-031.58E-025.76E-02 - 78L2 740.003.52E-054.05E-042.41E-039.90E-032.94E-041.17E-033.81E-031.13E-02 - 78L21000.001.62E-051.42E-047.04E-042.46E-031.28E-044.53E-041.28E-033.29E-03 - 78L21500.005.98E-063.80E-051.52E-044.43E-044.17E-051.32E-043.18E-046.96E-04 - 78L3 12.568.78E+004.62E+049.06E+062.09E+084.53E+007.77E+049.35E+071.23E+10 - 78L3 13.267.52E+003.52E+046.55E+061.73E+083.84E+005.93E+046.48E+078.13E+09 - 78L3 14.565.74E+002.19E+043.74E+061.16E+082.88E+003.72E+043.44E+073.97E+09 - 78L3 17.763.21E+008.05E+031.14E+064.09E+071.57E+001.38E+049.06E+068.76E+08 - 78L3 21.561.80E+003.03E+033.55E+051.32E+078.66E-015.26E+032.48E+062.02E+08 - 78L3 27.009.05E-019.74E+029.18E+043.28E+064.35E-011.72E+035.59E+053.71E+07 - 78L3 33.004.84E-013.55E+022.75E+049.06E+052.36E-016.32E+021.50E+058.29E+06 - 78L3 41.002.44E-011.19E+027.47E+032.20E+051.21E-012.15E+023.65E+041.66E+06 - 78L3 53.001.07E-013.30E+011.60E+034.01E+045.57E-026.01E+017.03E+032.55E+05 - 78L3 66.005.23E-021.10E+014.32E+029.25E+032.86E-022.03E+011.75E+035.23E+04 - 78L3 83.002.47E-023.54E+001.10E+021.99E+031.43E-026.53E+004.19E+021.03E+04 - 78L3 96.001.53E-021.72E+004.64E+017.47E+029.26E-033.19E+001.71E+023.69E+03 - 78L3 113.008.94E-037.72E-011.77E+012.50E+025.68E-031.43E+006.31E+011.19E+03 - 78L3 136.004.86E-033.11E-015.92E+007.22E+013.26E-035.77E-012.06E+013.35E+02 - 78L3 165.002.58E-031.22E-011.91E+001.99E+011.84E-032.25E-016.55E+009.09E+01 - 78L3 230.008.79E-042.47E-022.79E-012.22E+006.89E-044.50E-029.49E-011.02E+01 - 78L3 315.003.25E-045.66E-034.70E-022.91E-012.76E-041.00E-021.60E-011.38E+00 - 78L3 400.001.56E-041.91E-031.26E-026.52E-021.39E-043.26E-034.28E-023.17E-01 - 78L3 510.007.59E-056.55E-043.45E-031.50E-027.04E-051.06E-031.15E-027.40E-02 - 78L3 740.002.68E-051.39E-045.31E-041.80E-032.56E-052.03E-041.65E-038.64E-03 - 78L31000.001.22E-054.41E-051.32E-043.74E-041.18E-055.78E-053.61E-041.64E-03 - 78L31500.004.61E-061.10E-052.47E-055.58E-054.55E-061.26E-055.16E-051.93E-04 - 78M1 4.303.08E+001.64E+041.09E+064.89E+072.19E+035.67E+062.79E+093.04E+11 - 78M1 5.302.46E+006.88E+034.92E+052.06E+071.18E+032.04E+067.18E+087.21E+10 - 78M1 7.301.59E+001.76E+031.48E+054.90E+064.50E+024.25E+059.23E+077.74E+09 - 78M1 11.307.79E-012.57E+022.48E+049.18E+051.22E+025.12E+045.99E+063.70E+08 - 78M1 18.303.20E-012.71E+012.76E+031.09E+052.89E+015.16E+033.23E+051.36E+07 - 78M1 27.001.47E-013.99E+004.04E+021.51E+049.10E+008.40E+023.30E+049.99E+05 - 78M1 42.005.73E-024.65E-014.06E+011.32E+032.46E+001.13E+022.72E+035.62E+04 - 78M1 54.003.28E-021.60E-011.06E+013.11E+021.17E+003.72E+016.88E+021.14E+04 - 78M1 72.001.70E-026.07E-022.34E+005.79E+015.06E-011.08E+011.49E+021.93E+03 - 78M1 105.007.00E-032.27E-023.65E-016.56E+001.69E-012.24E+002.16E+012.02E+02 - 78M1 150.002.99E-039.71E-038.08E-029.45E-016.09E-025.40E-013.80E+002.63E+01 - 78M1 280.006.93E-042.17E-039.64E-035.24E-021.06E-025.31E-022.26E-019.63E-01 - 78M1 500.001.97E-045.77E-041.84E-036.11E-032.24E-037.60E-032.21E-026.34E-02 - 78M2 4.036.99E+002.51E+063.70E+096.51E+112.91E+022.06E+052.57E+077.06E+08 - 78M2 5.035.14E+008.35E+058.75E+081.41E+111.50E+027.52E+048.59E+063.76E+08 - 78M2 7.032.88E+001.58E+051.02E+081.36E+105.49E+011.69E+041.61E+068.55E+07 - 78M2 11.031.14E+001.69E+045.93E+065.95E+081.42E+012.38E+031.69E+058.54E+06 - 78M2 18.033.56E-011.50E+032.87E+052.02E+073.28E+002.99E+021.50E+046.02E+05 - 78M2 27.001.25E-012.08E+022.52E+041.29E+069.85E-015.71E+012.11E+036.59E+04 - 78M2 42.003.71E-022.46E+011.85E+036.71E+042.67E-019.75E+002.55E+025.84E+03 - 78M2 54.001.81E-027.43E+004.31E+021.27E+041.27E-013.63E+007.77E+011.48E+03 - 78M2 72.007.77E-031.92E+008.33E+011.94E+035.50E-021.19E+002.03E+013.10E+02 - 78M2 105.002.51E-033.36E-011.01E+011.73E+021.84E-022.84E-013.58E+004.09E+01 - 78M2 150.008.58E-046.72E-021.44E+001.85E+016.60E-037.54E-027.17E-016.23E+00 - 78M2 280.001.33E-044.54E-035.64E-024.46E-011.12E-037.96E-034.76E-022.61E-01 - 78M2 500.002.55E-054.43E-043.50E-031.84E-022.22E-041.09E-034.45E-031.67E-02 - 78M3 3.642.00E+015.80E+069.55E+091.79E+124.63E+011.01E+071.43E+112.19E+14 - 78M3 4.641.30E+011.72E+061.94E+093.21E+112.23E+013.03E+062.68E+102.75E+13 - 78M3 6.646.31E+002.85E+051.88E+082.51E+107.53E+005.06E+052.26E+091.32E+12 - 78M3 10.642.13E+002.66E+049.18E+068.89E+081.80E+004.81E+048.94E+072.63E+10 - 78M3 17.645.80E-012.10E+033.82E+052.55E+073.87E-013.87E+032.90E+064.37E+08 - 78M3 27.001.77E-012.48E+022.74E+041.31E+061.06E-014.64E+021.69E+051.52E+07 - 78M3 42.004.81E-022.72E+011.83E+036.15E+042.80E-025.15E+019.30E+035.09E+05 - 78M3 54.002.22E-027.76E+003.99E+021.09E+041.31E-021.48E+011.84E+037.72E+04 - 78M3 72.009.03E-031.86E+007.03E+011.51E+035.53E-033.56E+002.96E+029.29E+03 - 78M3 105.002.71E-032.89E-017.37E+001.15E+021.79E-035.54E-012.83E+016.21E+02 - 78M3 150.008.60E-045.05E-028.95E-011.03E+016.21E-049.64E-023.27E+005.22E+01 - 78M3 280.001.19E-042.57E-032.43E-021.67E-011.00E-044.72E-038.63E-028.41E-01 - 78M3 500.002.08E-051.88E-041.02E-034.53E-031.93E-053.12E-043.53E-032.34E-02 - 78M4 3.205.41E+011.77E+058.45E+099.43E+131.44E+013.29E+052.38E+091.53E+12 - 78M4 4.202.37E+014.46E+041.26E+098.77E+126.02E+008.45E+043.80E+081.99E+11 - 78M4 6.206.78E+006.16E+038.16E+072.99E+111.69E+001.20E+042.81E+071.06E+10 - 78M4 10.201.23E+004.95E+022.46E+064.16E+093.25E-019.81E+021.05E+062.58E+08 - 78M4 17.201.84E-013.50E+016.24E+044.98E+075.55E-027.06E+013.53E+045.43E+06 - 78M4 27.003.30E-023.54E+002.63E+031.15E+061.17E-027.29E+001.98E+032.02E+05 - 78M4 42.005.74E-033.71E-011.20E+023.03E+042.46E-037.88E-011.23E+028.37E+03 - 78M4 54.002.08E-031.03E-012.10E+013.91E+031.00E-032.23E-012.58E+011.39E+03 - 78M4 72.006.41E-042.36E-022.89E+003.85E+023.53E-045.26E-024.39E+001.82E+02 - 78M4 105.001.35E-043.46E-032.21E-011.92E+018.85E-057.99E-034.42E-011.31E+01 - 78M4 150.003.09E-055.73E-042.04E-021.19E+002.36E-051.36E-035.21E-021.13E+00 - 78M4 280.002.42E-062.65E-053.69E-041.08E-022.28E-066.30E-051.35E-031.75E-02 - 78M4 500.002.45E-071.73E-061.17E-051.76E-042.58E-073.83E-065.06E-054.33E-04 - 78M5 3.128.23E+011.99E+051.66E+101.60E+148.50E+002.47E+041.29E+105.53E+14 - 78M5 4.123.50E+014.78E+042.36E+091.40E+133.49E+006.20E+031.86E+094.63E+13 - 78M5 6.129.65E+006.32E+031.46E+084.45E+119.65E-018.63E+021.17E+081.36E+12 - 78M5 10.121.69E+004.86E+024.22E+065.79E+091.85E-017.03E+013.47E+061.58E+10 - 78M5 17.122.43E-013.31E+011.03E+056.53E+073.18E-025.15E+008.81E+041.55E+08 - 78M5 27.004.16E-023.17E+004.11E+031.40E+066.73E-035.41E-013.66E+032.95E+06 - 78M5 42.007.05E-033.21E-011.81E+023.49E+041.45E-036.18E-021.68E+026.67E+04 - 78M5 54.002.52E-038.64E-023.07E+014.33E+036.01E-041.81E-022.93E+017.95E+03 - 78M5 72.007.65E-041.91E-024.05E+004.04E+022.17E-044.52E-033.96E+007.15E+02 - 78M5 105.001.59E-042.65E-032.88E-011.84E+015.62E-057.45E-042.90E-013.19E+01 - 78M5 150.003.60E-054.14E-042.41E-021.02E+001.56E-051.40E-042.49E-021.78E+00 - 78M5 280.002.86E-061.77E-053.44E-047.11E-031.69E-068.27E-063.58E-041.32E-02 - 78M5 500.003.23E-071.16E-068.28E-068.39E-052.33E-077.09E-078.20E-061.65E-04 - 78N+ 50.002.84E-026.89E+004.48E+021.85E+045.21E-012.58E+011.42E+036.19E+04 - 78N+ 70.001.13E-021.34E+005.99E+011.69E+031.93E-015.68E+001.84E+025.21E+03 - 78N+ 100.004.33E-032.52E-017.61E+001.48E+026.92E-021.23E+002.36E+014.31E+02 - 78N+ 150.001.46E-033.94E-027.68E-011.01E+012.15E-022.30E-012.57E+002.93E+01 - 78N+ 200.006.80E-041.12E-021.59E-011.62E+009.47E-037.35E-025.84E-014.83E+00 - 78N+ 500.007.47E-053.72E-041.98E-039.13E-037.75E-042.84E-039.57E-033.33E-02 - 79K 81.725.54E-016.10E-011.40E-017.68E-031.11E+018.74E+011.29E+024.08E+01 - 79K 82.425.43E-016.23E-011.78E-011.93E-021.08E+018.48E+011.30E+025.15E+01 - 79K 83.725.23E-016.45E-012.52E-015.31E-021.03E+018.03E+011.32E+027.09E+01 - 79K 86.924.76E-016.81E-014.27E-011.99E-019.28E+007.03E+011.33E+021.14E+02 - 79K 90.724.28E-016.99E-016.15E-014.59E-018.19E+006.04E+011.29E+021.54E+02 - 79K 95.003.82E-016.97E-017.85E-018.06E-017.17E+005.13E+011.21E+021.84E+02 - 79K 101.003.28E-016.71E-019.52E-011.29E+006.01E+004.13E+011.08E+022.04E+02 - 79K 109.002.72E-016.17E-011.06E+001.82E+004.83E+003.16E+019.05E+012.04E+02 - 79K 121.002.09E-015.24E-011.08E+002.25E+003.58E+002.18E+016.78E+011.78E+02 - 79K 134.001.62E-014.32E-019.96E-012.35E+002.68E+001.53E+014.95E+011.43E+02 - 79K 151.001.20E-013.34E-018.40E-012.18E+001.91E+001.01E+013.34E+011.02E+02 - 79K 164.009.74E-022.77E-017.23E-011.95E+001.51E+007.57E+002.51E+017.81E+01 - 79K 181.007.62E-022.19E-015.90E-011.65E+001.14E+005.40E+001.78E+015.56E+01 - 79K 204.005.66E-021.63E-014.50E-011.28E+008.19E-013.59E+001.16E+013.60E+01 - 79K 230.004.22E-021.21E-013.37E-019.64E-015.87E-012.40E+007.51E+002.29E+01 - 79K 295.002.32E-026.52E-021.80E-015.02E-012.97E-011.06E+003.06E+008.67E+00 - 79K 380.001.30E-023.54E-029.42E-022.49E-011.50E-014.75E-011.24E+003.21E+00 - 79K 470.008.15E-032.18E-025.55E-021.39E-018.52E-022.48E-015.97E-011.42E+00 - 79K 580.005.26E-031.38E-023.36E-027.86E-024.92E-021.33E-012.96E-016.47E-01 - 79K 810.002.74E-037.00E-031.57E-023.32E-022.08E-025.15E-021.03E-011.98E-01 - 79K 1100.001.56E-033.90E-038.20E-031.58E-029.60E-032.26E-024.15E-027.26E-02 - 79K 1350.001.09E-032.66E-035.39E-039.84E-035.75E-031.33E-022.33E-023.86E-02 - 79K 1600.008.21E-041.95E-033.83E-036.73E-033.77E-038.62E-031.47E-022.34E-02 - 79L1 15.351.69E+003.65E+029.76E+032.86E+042.35E+024.89E+041.97E+061.78E+07 - 79L1 16.051.58E+002.95E+029.32E+035.03E+042.06E+023.97E+041.55E+061.62E+07 - 79L1 17.351.39E+002.01E+027.90E+037.47E+041.63E+022.75E+041.02E+061.27E+07 - 79L1 20.551.04E+008.56E+014.54E+037.50E+049.85E+011.25E+044.08E+056.27E+06 - 79L1 24.357.63E-013.54E+012.25E+034.78E+045.95E+015.69E+031.64E+052.70E+06 - 79L1 28.005.85E-011.68E+011.18E+032.81E+043.93E+013.00E+037.73E+041.29E+06 - 79L1 34.003.98E-015.89E+004.54E+021.16E+042.21E+011.25E+032.74E+044.39E+05 - 79L1 42.002.57E-011.92E+001.52E+023.95E+031.18E+014.85E+028.97E+031.32E+05 - 79L1 54.001.49E-015.96E-013.95E+019.95E+025.65E+001.61E+022.42E+033.12E+04 - 79L1 67.009.21E-022.77E-011.24E+012.91E+023.00E+006.41E+018.02E+029.03E+03 - 79L1 84.005.48E-021.53E-013.85E+007.93E+011.55E+002.48E+012.58E+022.49E+03 - 79L1 97.003.91E-021.10E-011.91E+003.50E+011.02E+001.38E+011.27E+021.10E+03 - 79L1 114.002.67E-027.76E-029.24E-011.43E+016.43E-017.17E+005.78E+014.48E+02 - 79L1 137.001.73E-025.17E-024.37E-015.36E+003.80E-013.47E+002.41E+011.63E+02 - 79L1 165.001.11E-023.39E-022.21E-012.11E+002.24E-011.69E+001.02E+016.01E+01 - 79L1 230.005.09E-031.56E-027.46E-024.68E-018.82E-024.94E-012.30E+001.07E+01 - 79L1 315.002.48E-037.50E-032.93E-021.33E-013.71E-021.63E-016.10E-012.28E+00 - 79L1 400.001.47E-034.35E-031.50E-025.63E-021.95E-027.30E-022.34E-017.48E-01 - 79L1 510.008.81E-042.55E-037.88E-032.49E-021.02E-023.34E-029.31E-022.56E-01 - 79L1 740.004.25E-041.18E-033.12E-037.97E-033.87E-031.08E-022.50E-025.64E-02 - 79L11000.002.44E-046.55E-041.56E-033.46E-031.79E-034.58E-039.41E-031.86E-02 - 79L11500.001.21E-043.06E-046.49E-041.24E-036.46E-041.55E-032.82E-034.83E-03 - 79L2 14.733.69E+001.81E+042.78E+065.08E+072.72E+011.99E+032.59E+046.78E+04 - 79L2 15.433.27E+001.44E+042.13E+064.51E+072.37E+011.68E+032.52E+041.20E+05 - 79L2 16.732.63E+009.62E+031.34E+063.39E+071.85E+011.23E+032.21E+041.81E+05 - 79L2 19.931.63E+004.06E+034.95E+051.51E+071.10E+016.35E+021.38E+041.90E+05 - 79L2 23.731.00E+001.73E+031.82E+055.95E+066.51E+003.27E+027.62E+031.29E+05 - 79L2 28.006.24E-017.70E+027.05E+042.31E+063.97E+001.74E+024.07E+037.40E+04 - 79L2 34.003.55E-013.00E+022.32E+047.24E+052.23E+008.28E+011.85E+033.40E+04 - 79L2 42.001.90E-011.08E+026.95E+031.99E+051.19E+003.70E+017.61E+021.33E+04 - 79L2 54.008.92E-023.25E+011.67E+034.16E+045.66E-011.42E+012.56E+024.04E+03 - 79L2 67.004.62E-021.17E+014.95E+021.08E+043.00E-016.29E+009.94E+011.39E+03 - 79L2 84.002.31E-024.08E+001.40E+022.61E+031.55E-012.69E+003.66E+014.46E+02 - 79L2 97.001.48E-022.10E+006.34E+011.06E+031.02E-011.57E+001.93E+012.15E+02 - 79L2 114.009.01E-031.00E+002.62E+013.91E+026.40E-028.64E-019.48E+009.44E+01 - 79L2 137.005.11E-034.37E-019.70E+001.26E+023.77E-024.39E-014.23E+003.71E+01 - 79L2 165.002.88E-031.91E-013.60E+004.08E+012.21E-022.23E-011.88E+001.44E+01 - 79L2 230.001.05E-034.51E-026.40E-015.67E+008.61E-036.78E-024.50E-012.74E+00 - 79L2 315.004.14E-041.21E-021.33E-019.35E-013.55E-032.25E-021.20E-015.93E-01 - 79L2 400.002.08E-044.58E-034.19E-022.51E-011.82E-039.91E-034.55E-021.92E-01 - 79L2 510.001.05E-041.78E-031.36E-026.95E-029.24E-044.39E-031.74E-026.32E-02 - 79L2 740.003.85E-054.47E-042.66E-031.09E-023.30E-041.30E-034.22E-031.25E-02 - 79L21000.001.76E-051.57E-047.80E-042.72E-031.44E-045.05E-041.42E-033.64E-03 - 79L21500.006.53E-064.21E-051.69E-044.91E-044.69E-051.47E-043.55E-047.73E-04 - 79L3 12.928.31E+004.32E+048.15E+061.82E+084.42E+007.51E+048.72E+071.11E+10 - 79L3 13.627.15E+003.31E+045.95E+061.52E+083.76E+005.78E+046.11E+077.43E+09 - 79L3 14.925.50E+002.09E+043.44E+061.03E+082.84E+003.66E+043.30E+073.70E+09 - 79L3 18.123.11E+007.83E+031.07E+063.74E+071.57E+001.39E+048.92E+068.42E+08 - 79L3 21.921.76E+003.00E+033.42E+051.23E+078.75E-015.38E+032.50E+061.99E+08 - 79L3 28.008.35E-018.73E+027.87E+042.71E+064.13E-011.59E+034.94E+053.15E+07 - 79L3 34.004.56E-013.29E+022.45E+047.81E+052.28E-016.05E+021.38E+057.41E+06 - 79L3 42.002.34E-011.14E+026.90E+031.97E+051.20E-012.12E+023.50E+041.55E+06 - 79L3 54.001.04E-013.24E+011.53E+033.73E+045.59E-026.08E+016.98E+032.48E+05 - 79L3 67.005.19E-021.10E+014.22E+028.83E+032.91E-022.09E+011.78E+035.23E+04 - 79L3 84.002.48E-023.59E+001.10E+021.94E+031.47E-026.83E+004.33E+021.05E+04 - 79L3 97.001.54E-021.76E+004.66E+017.38E+029.53E-033.36E+001.78E+023.81E+03 - 79L3 114.009.08E-037.95E-011.79E+012.50E+025.87E-031.52E+006.65E+011.24E+03 - 79L3 137.004.96E-033.23E-016.07E+007.29E+013.39E-036.17E-012.20E+013.53E+02 - 79L3 165.002.70E-031.31E-012.04E+002.11E+011.95E-032.49E-017.27E+001.01E+02 - 79L3 230.009.23E-042.66E-022.99E-012.36E+007.33E-044.98E-021.05E+001.13E+01 - 79L3 315.003.42E-046.08E-035.04E-023.11E-012.93E-041.11E-021.77E-011.53E+00 - 79L3 400.001.65E-042.05E-031.35E-026.96E-021.48E-043.59E-034.74E-023.50E-01 - 79L3 510.008.02E-057.03E-043.70E-031.60E-027.47E-051.17E-031.28E-028.16E-02 - 79L3 740.002.82E-051.49E-045.69E-041.93E-032.72E-052.22E-041.81E-039.52E-03 - 79L31000.001.28E-054.72E-051.41E-044.01E-041.25E-056.29E-053.97E-041.80E-03 - 79L31500.004.86E-061.17E-052.64E-055.98E-054.80E-061.37E-055.65E-052.12E-04 - 79M1 4.422.91E+001.59E+041.05E+064.25E+072.22E+035.50E+062.61E+092.74E+11 - 79M1 5.422.33E+006.80E+034.83E+051.91E+071.21E+032.02E+066.94E+086.76E+10 - 79M1 7.421.53E+001.79E+031.47E+054.81E+064.72E+024.36E+059.30E+077.62E+09 - 79M1 11.427.61E-012.70E+022.53E+049.14E+051.30E+025.42E+046.27E+063.80E+08 - 79M1 18.423.17E-012.95E+012.89E+031.12E+053.13E+015.56E+033.46E+051.44E+07 - 79M1 27.001.48E-014.60E+004.43E+021.62E+041.00E+019.35E+023.67E+041.11E+06 - 79M1 42.005.81E-025.40E-014.53E+011.44E+032.72E+001.25E+023.02E+036.20E+04 - 79M1 54.003.33E-021.82E-011.20E+013.42E+021.30E+004.12E+017.61E+021.26E+04 - 79M1 72.001.73E-026.60E-022.66E+006.43E+015.58E-011.19E+011.65E+022.12E+03 - 79M1 105.007.17E-032.37E-024.13E-017.35E+001.87E-012.47E+002.38E+012.22E+02 - 79M1 150.003.08E-031.00E-028.96E-021.06E+006.72E-025.95E-014.17E+002.88E+01 - 79M1 280.007.18E-042.26E-031.04E-025.76E-021.17E-025.83E-022.48E-011.05E+00 - 79M1 500.002.05E-046.07E-041.97E-036.62E-032.46E-038.33E-032.41E-026.91E-02 - 79M2 4.156.59E+002.37E+063.36E+095.71E+112.96E+022.00E+052.40E+076.27E+08 - 79M2 5.154.89E+008.09E+058.24E+081.29E+111.55E+027.49E+048.27E+063.46E+08 - 79M2 7.152.79E+001.58E+059.99E+071.31E+105.80E+011.73E+041.60E+068.22E+07 - 79M2 11.151.13E+001.75E+046.06E+065.96E+081.53E+012.50E+031.75E+058.56E+06 - 79M2 18.153.60E-011.58E+033.01E+052.08E+073.57E+003.20E+021.58E+046.22E+05 - 79M2 27.001.30E-012.27E+022.75E+041.40E+061.10E+006.28E+012.29E+037.08E+04 - 79M2 42.003.87E-022.69E+012.02E+037.27E+042.97E-011.07E+012.77E+026.29E+03 - 79M2 54.001.89E-028.14E+004.71E+021.38E+041.42E-014.00E+008.47E+011.60E+03 - 79M2 72.008.18E-032.10E+009.10E+012.11E+036.14E-021.31E+002.21E+013.36E+02 - 79M2 105.002.66E-033.68E-011.10E+011.88E+022.06E-023.14E-013.91E+004.44E+01 - 79M2 150.009.14E-047.39E-021.58E+002.02E+017.39E-038.33E-027.86E-016.79E+00 - 79M2 280.001.43E-045.01E-036.21E-024.89E-011.26E-038.83E-035.24E-022.87E-01 - 79M2 500.002.77E-054.90E-043.87E-032.03E-022.49E-041.21E-034.93E-031.84E-02 - 79M3 3.741.91E+015.50E+068.75E+091.59E+124.57E+019.94E+061.36E+112.02E+14 - 79M3 4.741.26E+011.68E+061.84E+092.96E+112.23E+013.05E+062.64E+102.65E+13 - 79M3 6.746.18E+002.86E+051.86E+082.42E+107.68E+005.26E+052.33E+091.35E+12 - 79M3 10.742.12E+002.75E+049.37E+068.90E+081.87E+005.14E+049.54E+072.80E+10 - 79M3 17.745.87E-012.21E+033.98E+052.61E+074.06E-014.20E+033.17E+064.76E+08 - 79M3 27.001.83E-012.68E+022.95E+041.40E+061.14E-015.19E+021.91E+051.72E+07 - 79M3 42.004.99E-022.94E+011.97E+036.55E+042.99E-025.76E+011.05E+045.75E+05 - 79M3 54.002.31E-028.39E+004.29E+021.16E+041.40E-021.65E+012.07E+038.70E+04 - 79M3 72.009.43E-032.01E+007.57E+011.61E+035.90E-033.98E+003.33E+021.04E+04 - 79M3 105.002.84E-033.13E-017.93E+001.23E+021.91E-036.18E-013.18E+016.96E+02 - 79M3 150.009.06E-045.47E-029.63E-011.10E+016.64E-041.07E-013.66E+005.84E+01 - 79M3 280.001.25E-042.78E-032.62E-021.80E-011.07E-045.25E-039.63E-029.37E-01 - 79M3 500.002.20E-052.03E-041.10E-034.87E-032.06E-053.46E-043.92E-032.60E-02 - 79M4 3.295.16E+011.68E+057.72E+098.39E+131.42E+013.23E+052.25E+091.41E+12 - 79M4 4.292.31E+014.35E+041.20E+098.24E+126.05E+008.56E+043.76E+081.91E+11 - 79M4 6.296.76E+006.23E+038.16E+072.97E+111.74E+001.26E+042.90E+071.08E+10 - 79M4 10.291.26E+005.14E+022.56E+064.34E+093.41E-011.06E+031.12E+062.72E+08 - 79M4 17.291.92E-013.71E+016.66E+045.35E+075.91E-027.76E+013.86E+045.88E+06 - 79M4 27.003.52E-023.86E+002.92E+031.29E+061.27E-028.22E+002.24E+032.27E+05 - 79M4 42.006.17E-034.06E-011.33E+023.39E+042.68E-038.89E-011.39E+029.40E+03 - 79M4 54.002.24E-031.13E-012.33E+014.38E+031.09E-032.51E-012.91E+011.57E+03 - 79M4 72.006.91E-042.60E-023.20E+004.31E+023.85E-045.94E-024.95E+002.05E+02 - 79M4 105.001.46E-043.81E-032.45E-012.15E+019.69E-059.02E-034.99E-011.47E+01 - 79M4 150.003.35E-056.33E-042.26E-021.33E+002.59E-051.53E-035.89E-021.27E+00 - 79M4 280.002.62E-062.94E-054.10E-041.21E-022.51E-067.13E-051.52E-031.98E-02 - 79M4 500.002.66E-071.93E-061.30E-051.98E-042.84E-074.33E-065.73E-054.90E-04 - 79M5 3.217.86E+011.86E+051.53E+101.43E+148.37E+002.38E+041.23E+105.11E+14 - 79M5 4.213.41E+014.61E+042.28E+091.32E+133.50E+006.14E+031.85E+094.51E+13 - 79M5 6.219.63E+006.30E+031.48E+084.44E+119.89E-018.83E+021.22E+081.41E+12 - 79M5 10.211.72E+004.97E+024.43E+066.05E+091.93E-017.39E+013.75E+061.71E+10 - 79M5 17.212.52E-013.45E+011.11E+057.01E+073.36E-025.50E+009.74E+041.73E+08 - 79M5 27.004.42E-023.40E+004.58E+031.56E+067.25E-035.92E-014.19E+033.42E+06 - 79M5 42.007.54E-033.45E-012.02E+023.89E+041.57E-036.75E-021.93E+027.73E+04 - 79M5 54.002.70E-039.31E-023.42E+014.84E+036.50E-041.98E-023.35E+019.19E+03 - 79M5 72.008.22E-042.07E-024.52E+004.51E+022.35E-044.93E-034.53E+008.25E+02 - 79M5 105.001.71E-042.87E-033.21E-012.05E+016.10E-058.14E-043.32E-013.68E+01 - 79M5 150.003.91E-054.50E-042.69E-021.14E+001.70E-051.53E-042.84E-022.05E+00 - 79M5 280.003.16E-061.92E-053.83E-047.94E-031.84E-069.04E-064.07E-041.51E-02 - 79M5 500.003.39E-071.27E-069.16E-069.35E-052.53E-077.75E-079.24E-061.88E-04 - 79N+ 50.002.97E-027.65E+004.97E+022.06E+045.79E-012.89E+011.63E+037.14E+04 - 79N+ 70.001.18E-021.49E+006.66E+011.87E+032.14E-016.36E+002.09E+025.97E+03 - 79N+ 100.004.54E-032.80E-018.45E+001.64E+027.68E-021.37E+002.67E+014.91E+02 - 79N+ 150.001.53E-034.36E-028.54E-011.12E+012.39E-022.56E-012.89E+003.31E+01 - 79N+ 200.007.15E-041.24E-021.78E-011.80E+001.05E-028.16E-026.53E-015.44E+00 - 79N+ 500.007.93E-054.06E-042.19E-031.02E-028.58E-043.14E-031.06E-023.69E-02 - 80K 84.105.23E-015.53E-011.24E-016.59E-031.11E+018.41E+011.19E+023.68E+01 - 80K 84.805.13E-015.65E-011.57E-011.64E-021.08E+018.16E+011.21E+024.61E+01 - 80K 86.104.94E-015.85E-012.20E-014.47E-021.04E+017.74E+011.23E+026.32E+01 - 80K 89.304.52E-016.18E-013.73E-011.67E-019.34E+006.80E+011.23E+021.01E+02 - 80K 93.104.08E-016.35E-015.37E-013.85E-018.27E+005.87E+011.20E+021.37E+02 - 80K 97.003.68E-016.36E-016.76E-016.53E-017.35E+005.08E+011.14E+021.63E+02 - 80K 103.003.18E-016.17E-018.32E-011.08E+006.18E+004.11E+011.03E+021.83E+02 - 80K 111.002.64E-015.71E-019.44E-011.55E+004.99E+003.16E+018.69E+011.86E+02 - 80K 123.002.04E-014.90E-019.75E-011.97E+003.72E+002.20E+016.58E+011.66E+02 - 80K 136.001.59E-014.08E-019.12E-012.10E+002.79E+001.55E+014.86E+011.34E+02 - 80K 153.001.18E-013.19E-017.82E-011.98E+002.00E+001.03E+013.31E+019.75E+01 - 80K 166.009.66E-022.66E-016.79E-011.80E+001.59E+007.78E+002.51E+017.55E+01 - 80K 183.007.58E-022.12E-015.61E-011.54E+001.21E+005.57E+001.79E+015.43E+01 - 80K 206.005.66E-021.59E-014.33E-011.22E+008.66E-013.73E+001.17E+013.56E+01 - 80K 235.004.11E-021.15E-013.18E-018.99E-016.01E-012.40E+007.32E+002.17E+01 - 80K 300.002.30E-026.36E-021.74E-014.81E-013.08E-011.08E+003.04E+008.45E+00 - 80K 385.001.30E-023.52E-029.32E-022.45E-011.57E-014.90E-011.26E+003.20E+00 - 80K 470.008.44E-032.24E-025.72E-021.43E-019.24E-022.66E-016.35E-011.49E+00 - 80K 580.005.45E-031.43E-023.48E-028.14E-025.33E-021.43E-013.16E-016.83E-01 - 80K 810.002.84E-037.30E-031.65E-023.47E-022.25E-025.53E-021.10E-012.11E-01 - 80K 1100.001.63E-034.08E-038.61E-031.66E-021.03E-022.42E-024.43E-027.72E-02 - 80K 1350.001.14E-032.80E-035.67E-031.04E-026.19E-031.42E-022.49E-024.11E-02 - 80K 1600.008.56E-042.05E-034.04E-037.09E-034.04E-039.26E-031.57E-022.50E-02 - 80L1 15.841.59E+003.44E+028.79E+032.44E+042.35E+024.67E+041.81E+061.58E+07 - 80L1 16.541.49E+002.79E+028.42E+034.29E+042.07E+023.82E+041.44E+061.44E+07 - 80L1 17.841.31E+001.93E+027.21E+036.44E+041.65E+022.67E+049.54E+051.15E+07 - 80L1 21.049.90E-018.46E+014.24E+036.66E+041.01E+021.24E+043.92E+055.78E+06 - 80L1 24.847.34E-013.60E+012.15E+034.37E+046.17E+015.74E+031.60E+052.56E+06 - 80L1 28.005.85E-011.92E+011.25E+032.81E+044.32E+013.31E+038.44E+041.36E+06 - 80L1 34.004.00E-016.82E+004.89E+021.20E+042.43E+011.37E+032.99E+044.68E+05 - 80L1 42.002.59E-012.24E+001.66E+024.16E+031.30E+015.35E+029.80E+031.42E+05 - 80L1 54.001.51E-016.82E-014.39E+011.07E+036.21E+001.78E+022.64E+033.36E+04 - 80L1 67.009.34E-023.04E-011.39E+013.17E+023.30E+007.05E+018.75E+029.75E+03 - 80L1 84.005.57E-021.61E-014.35E+008.73E+011.71E+002.73E+012.81E+022.69E+03 - 80L1 97.003.99E-021.14E-012.16E+003.87E+011.13E+001.51E+011.38E+021.19E+03 - 80L1 114.002.73E-027.97E-021.03E+001.58E+017.06E-017.86E+006.30E+014.85E+02 - 80L1 137.001.77E-025.29E-024.82E-015.95E+004.17E-013.80E+002.63E+011.77E+02 - 80L1 165.001.14E-023.48E-022.41E-012.33E+002.46E-011.86E+001.11E+016.51E+01 - 80L1 230.005.24E-031.61E-028.00E-025.13E-019.68E-025.40E-012.51E+001.16E+01 - 80L1 315.002.57E-037.78E-033.12E-021.45E-014.07E-021.78E-016.63E-012.46E+00 - 80L1 400.001.52E-034.54E-031.60E-026.06E-022.13E-027.96E-022.54E-018.10E-01 - 80L1 510.009.18E-042.67E-038.37E-032.67E-021.12E-023.64E-021.01E-012.78E-01 - 80L1 740.004.44E-041.24E-033.32E-038.54E-034.23E-031.18E-022.71E-026.11E-02 - 80L11000.002.56E-046.92E-041.66E-033.70E-031.95E-034.98E-031.02E-022.01E-02 - 80L11500.001.27E-043.25E-046.92E-041.33E-037.01E-041.68E-033.05E-035.22E-03 - 80L2 15.213.48E+001.68E+042.47E+064.35E+072.74E+011.91E+032.38E+045.89E+04 - 80L2 15.913.09E+001.34E+041.92E+063.89E+072.39E+011.61E+032.32E+041.04E+05 - 80L2 17.212.50E+009.11E+031.23E+062.96E+071.89E+011.20E+032.05E+041.59E+05 - 80L2 20.411.58E+003.94E+034.63E+051.36E+071.13E+016.28E+021.31E+041.71E+05 - 80L2 24.219.79E-011.70E+031.74E+055.50E+066.80E+003.28E+027.35E+031.19E+05 - 80L2 28.006.48E-018.37E+027.58E+042.40E+064.40E+001.88E+024.26E+037.42E+04 - 80L2 34.003.69E-013.26E+022.50E+047.62E+052.47E+008.99E+011.96E+033.49E+04 - 80L2 42.001.98E-011.18E+027.50E+032.10E+051.32E+004.02E+018.10E+021.38E+04 - 80L2 54.009.35E-023.54E+011.80E+034.43E+046.28E-011.55E+012.75E+024.25E+03 - 80L2 67.004.86E-021.28E+015.36E+021.15E+043.34E-016.87E+001.07E+021.48E+03 - 80L2 84.002.44E-024.45E+001.52E+022.80E+031.73E-012.94E+003.95E+014.76E+02 - 80L2 97.001.57E-022.29E+006.88E+011.15E+031.14E-011.72E+002.09E+012.30E+02 - 80L2 114.009.54E-031.09E+002.85E+014.21E+027.13E-029.47E-011.03E+011.01E+02 - 80L2 137.005.42E-034.78E-011.06E+011.36E+024.20E-024.82E-014.59E+003.99E+01 - 80L2 165.003.07E-032.09E-013.92E+004.41E+012.47E-022.45E-012.04E+001.56E+01 - 80L2 230.001.13E-034.95E-027.00E-016.16E+009.62E-037.46E-024.92E-012.98E+00 - 80L2 315.004.45E-041.32E-021.45E-011.02E+003.97E-032.48E-021.32E-016.47E-01 - 80L2 400.002.24E-045.04E-034.61E-022.74E-012.04E-031.10E-025.00E-022.10E-01 - 80L2 510.001.13E-041.96E-031.50E-027.62E-021.04E-034.86E-031.91E-026.93E-02 - 80L2 740.004.18E-054.94E-042.94E-031.20E-023.70E-041.45E-034.67E-031.38E-02 - 80L21000.001.92E-051.73E-048.63E-043.00E-031.61E-045.63E-041.57E-034.02E-03 - 80L21500.007.10E-064.66E-051.87E-045.44E-045.27E-051.65E-043.95E-048.57E-04 - 80L3 13.287.86E+004.03E+047.34E+061.59E+084.31E+007.25E+048.12E+071.00E+10 - 80L3 13.986.79E+003.11E+045.40E+061.33E+083.68E+005.62E+045.74E+076.78E+09 - 80L3 15.285.26E+001.99E+043.17E+069.08E+072.80E+003.60E+043.15E+073.43E+09 - 80L3 18.483.02E+007.62E+031.01E+063.40E+071.57E+001.40E+048.77E+068.08E+08 - 80L3 22.281.73E+002.97E+033.30E+051.15E+078.83E-015.50E+032.52E+061.96E+08 - 80L3 28.008.62E-019.39E+028.38E+042.82E+064.39E-011.77E+035.54E+053.52E+07 - 80L3 34.004.72E-013.54E+022.61E+048.17E+052.43E-016.72E+021.55E+058.26E+06 - 80L3 42.002.42E-011.22E+027.35E+032.06E+051.27E-012.35E+023.92E+041.73E+06 - 80L3 54.001.09E-013.48E+011.63E+033.92E+045.93E-026.75E+017.79E+032.75E+05 - 80L3 67.005.40E-021.19E+014.50E+029.31E+033.09E-022.32E+011.99E+035.80E+04 - 80L3 84.002.58E-023.86E+001.17E+022.05E+031.56E-027.58E+004.83E+021.16E+04 - 80L3 97.001.61E-021.89E+004.98E+017.80E+021.01E-023.73E+001.99E+024.23E+03 - 80L3 114.009.49E-038.56E-011.91E+012.64E+026.24E-031.68E+007.40E+011.38E+03 - 80L3 137.005.19E-033.48E-016.48E+007.73E+013.60E-036.83E-012.44E+013.91E+02 - 80L3 165.002.83E-031.41E-012.18E+002.24E+012.07E-032.76E-018.08E+001.11E+02 - 80L3 230.009.70E-042.86E-023.20E-012.51E+007.78E-045.51E-021.17E+001.25E+01 - 80L3 315.003.60E-046.54E-035.39E-023.31E-013.11E-041.22E-021.96E-011.69E+00 - 80L3 400.001.74E-042.20E-031.45E-027.42E-021.57E-043.96E-035.24E-023.86E-01 - 80L3 510.008.48E-057.54E-043.97E-031.71E-027.92E-051.29E-031.41E-029.00E-02 - 80L3 740.002.98E-051.60E-046.09E-042.06E-032.88E-052.43E-042.00E-031.05E-02 - 80L31000.001.36E-055.04E-051.51E-044.29E-041.32E-056.85E-054.36E-041.98E-03 - 80L31500.005.13E-061.25E-052.82E-056.40E-055.07E-061.47E-056.19E-052.32E-04 - 80M1 4.562.74E+001.53E+041.01E+063.68E+072.24E+035.29E+062.41E+092.46E+11 - 80M1 5.562.21E+006.69E+034.72E+051.76E+071.24E+032.00E+066.67E+086.30E+10 - 80M1 7.561.47E+001.82E+031.46E+054.71E+064.93E+024.46E+059.32E+077.44E+09 - 80M1 11.567.42E-012.83E+022.56E+049.08E+051.39E+025.71E+046.53E+063.89E+08 - 80M1 18.563.13E-013.21E+013.01E+031.13E+053.38E+015.98E+033.69E+051.51E+07 - 80M1 27.001.49E-015.28E+004.85E+021.73E+041.11E+011.04E+034.09E+041.22E+06 - 80M1 42.005.89E-026.27E-015.04E+011.56E+033.00E+001.39E+023.34E+036.84E+04 - 80M1 54.003.39E-022.07E-011.35E+013.75E+021.43E+004.57E+018.42E+021.39E+04 - 80M1 72.001.77E-027.24E-023.01E+007.13E+016.16E-011.32E+011.82E+022.33E+03 - 80M1 105.007.34E-032.49E-024.68E-018.23E+002.06E-012.72E+002.62E+012.43E+02 - 80M1 150.003.17E-031.04E-029.97E-021.19E+007.41E-026.55E-014.58E+003.15E+01 - 80M1 280.007.46E-042.36E-031.12E-026.33E-021.29E-026.40E-022.71E-011.15E+00 - 80M1 500.002.14E-046.39E-042.11E-037.16E-032.70E-039.11E-032.63E-027.53E-02 - 80M2 4.286.18E+002.21E+063.02E+094.95E+113.00E+021.92E+052.23E+075.52E+08 - 80M2 5.284.64E+007.79E+057.69E+081.16E+111.60E+027.42E+047.91E+063.15E+08 - 80M2 7.282.70E+001.58E+059.76E+071.24E+106.10E+011.77E+041.59E+067.85E+07 - 80M2 11.281.11E+001.80E+046.17E+065.94E+081.64E+012.63E+031.79E+058.54E+06 - 80M2 18.283.62E-011.67E+033.15E+052.14E+073.89E+003.42E+021.66E+046.39E+05 - 80M2 27.001.34E-012.48E+023.00E+041.52E+061.22E+006.91E+012.49E+037.60E+04 - 80M2 42.004.04E-022.95E+012.21E+037.87E+043.31E-011.18E+013.02E+026.78E+03 - 80M2 54.001.98E-028.91E+005.14E+021.50E+041.59E-014.40E+009.22E+011.72E+03 - 80M2 72.008.61E-032.30E+009.94E+012.29E+036.85E-021.45E+002.41E+013.63E+02 - 80M2 105.002.82E-034.04E-011.21E+012.04E+022.30E-023.46E-014.27E+004.81E+01 - 80M2 150.009.73E-048.12E-021.73E+002.20E+018.27E-039.20E-028.61E-017.39E+00 - 80M2 280.001.54E-045.52E-036.84E-025.36E-011.41E-039.79E-035.77E-023.14E-01 - 80M2 500.003.00E-055.42E-044.28E-032.24E-022.81E-041.35E-035.45E-032.03E-02 - 80M3 3.851.82E+015.18E+067.94E+091.40E+124.48E+019.68E+061.28E+111.84E+14 - 80M3 4.851.21E+011.63E+061.73E+092.71E+112.23E+013.05E+062.58E+102.54E+13 - 80M3 6.856.03E+002.86E+051.82E+082.32E+107.81E+005.44E+052.38E+091.36E+12 - 80M3 10.852.11E+002.83E+049.53E+068.87E+081.93E+005.47E+041.01E+082.95E+10 - 80M3 17.855.92E-012.32E+034.14E+052.67E+074.26E-014.56E+033.45E+065.17E+08 - 80M3 27.001.88E-012.90E+023.17E+041.49E+061.21E-015.79E+022.16E+051.95E+07 - 80M3 42.005.17E-023.18E+012.12E+036.98E+043.18E-026.43E+011.18E+046.49E+05 - 80M3 54.002.41E-029.08E+004.61E+021.24E+041.49E-021.85E+012.33E+039.79E+04 - 80M3 72.009.83E-032.18E+008.13E+011.72E+036.29E-034.44E+003.74E+021.17E+04 - 80M3 105.002.97E-033.38E-018.53E+001.31E+022.04E-036.89E-013.56E+017.80E+02 - 80M3 150.009.51E-045.92E-021.04E+001.18E+017.08E-041.20E-014.09E+006.52E+01 - 80M3 280.001.32E-043.01E-032.83E-021.92E-011.14E-045.84E-031.07E-011.04E+00 - 80M3 500.002.33E-052.19E-041.19E-035.23E-032.19E-053.82E-044.36E-032.89E-02 - 80M4 3.384.90E+011.58E+057.00E+097.39E+131.39E+013.16E+052.12E+091.28E+12 - 80M4 4.382.24E+014.22E+041.14E+097.69E+126.06E+008.64E+043.69E+081.83E+11 - 80M4 6.386.72E+006.27E+038.12E+072.94E+111.78E+001.31E+042.98E+071.08E+10 - 80M4 10.381.28E+005.34E+022.66E+064.51E+093.57E-011.14E+031.20E+062.86E+08 - 80M4 17.381.99E-013.93E+017.09E+045.73E+076.28E-028.50E+014.21E+046.35E+06 - 80M4 27.003.75E-024.21E+003.23E+031.45E+061.38E-029.26E+002.53E+032.55E+05 - 80M4 42.006.61E-034.44E-011.47E+023.79E+042.91E-031.00E+001.57E+021.06E+04 - 80M4 54.002.40E-031.23E-012.58E+014.90E+031.19E-032.83E-013.28E+011.76E+03 - 80M4 72.007.44E-042.85E-023.54E+004.82E+024.21E-046.70E-025.58E+002.30E+02 - 80M4 105.001.58E-044.20E-032.71E-012.40E+011.06E-041.02E-025.63E-011.66E+01 - 80M4 150.003.65E-056.99E-042.50E-021.49E+002.84E-051.73E-036.64E-021.43E+00 - 80M4 280.002.85E-063.27E-054.55E-041.36E-022.75E-068.05E-051.72E-032.23E-02 - 80M4 500.002.91E-072.15E-061.44E-052.22E-043.12E-074.89E-066.48E-055.53E-04 - 80M5 3.297.47E+011.72E+051.40E+101.26E+148.19E+002.27E+041.16E+104.66E+14 - 80M5 4.293.31E+014.42E+042.18E+091.24E+133.49E+006.05E+031.82E+094.36E+13 - 80M5 6.299.57E+006.25E+031.48E+084.41E+111.01E+008.99E+021.26E+081.44E+12 - 80M5 10.291.75E+005.08E+024.63E+066.29E+092.01E-017.74E+014.03E+061.84E+10 - 80M5 17.292.61E-013.59E+011.19E+057.51E+073.55E-025.86E+001.07E+051.91E+08 - 80M5 27.004.70E-023.65E+005.09E+031.75E+067.81E-036.46E-014.79E+033.97E+06 - 80M5 42.008.05E-033.70E-012.24E+024.34E+041.69E-037.37E-022.20E+028.93E+04 - 80M5 54.002.89E-031.00E-013.81E+015.39E+037.02E-042.17E-023.82E+011.06E+04 - 80M5 72.008.82E-042.23E-025.03E+005.02E+022.54E-045.39E-035.17E+009.51E+02 - 80M5 105.001.84E-043.10E-033.57E-012.29E+016.61E-058.88E-043.78E-014.23E+01 - 80M5 150.004.20E-054.87E-042.99E-021.27E+001.84E-051.67E-043.23E-022.35E+00 - 80M5 280.003.35E-062.09E-054.25E-048.85E-032.00E-069.87E-064.62E-041.72E-02 - 80M5 500.003.67E-071.38E-061.01E-051.04E-042.76E-078.46E-071.04E-052.14E-04 - 80N+ 50.003.09E-028.35E+005.43E+022.27E+046.49E-013.25E+011.84E+038.10E+04 - 80N+ 70.001.23E-021.63E+007.26E+012.05E+032.40E-017.14E+002.36E+026.74E+03 - 80N+ 100.004.76E-033.06E-019.22E+001.79E+028.61E-021.54E+002.99E+015.52E+02 - 80N+ 150.001.61E-034.77E-029.33E-011.23E+012.68E-022.86E-013.23E+003.70E+01 - 80N+ 200.007.55E-041.35E-021.95E-011.97E+001.18E-029.15E-027.29E-016.06E+00 - 80N+ 500.008.44E-054.42E-042.41E-031.12E-029.60E-043.50E-031.18E-024.10E-02 - 81K 86.534.94E-015.02E-011.10E-015.71E-031.11E+018.09E+011.11E+023.31E+01 - 81K 87.234.84E-015.13E-011.39E-011.40E-021.09E+017.86E+011.12E+024.14E+01 - 81K 88.534.68E-015.31E-011.93E-013.78E-021.04E+017.46E+011.14E+025.64E+01 - 81K 91.734.29E-015.61E-013.26E-011.40E-019.40E+006.59E+011.15E+029.01E+01 - 81K 95.533.88E-015.78E-014.70E-013.25E-018.36E+005.71E+011.12E+021.22E+02 - 81K 100.003.47E-015.80E-016.10E-015.89E-017.32E+004.86E+011.06E+021.48E+02 - 81K 106.003.00E-015.63E-017.46E-019.54E-016.19E+003.96E+019.61E+011.66E+02 - 81K 114.002.51E-015.24E-018.46E-011.37E+005.03E+003.07E+018.16E+011.69E+02 - 81K 126.001.96E-014.53E-018.80E-011.75E+003.78E+002.16E+016.25E+011.52E+02 - 81K 139.001.53E-013.80E-018.31E-011.88E+002.85E+001.54E+014.66E+011.25E+02 - 81K 156.001.15E-013.00E-017.21E-011.80E+002.06E+001.03E+013.21E+019.16E+01 - 81K 169.009.44E-022.52E-016.32E-011.65E+001.64E+007.83E+002.45E+017.16E+01 - 81K 186.007.45E-022.03E-015.27E-011.43E+001.25E+005.64E+001.76E+015.21E+01 - 81K 209.005.60E-021.54E-014.12E-011.15E+009.04E-013.81E+001.17E+013.45E+01 - 81K 235.004.21E-021.16E-013.15E-018.85E-016.53E-012.57E+007.69E+002.24E+01 - 81K 300.002.36E-026.46E-021.75E-014.83E-013.34E-011.16E+003.22E+008.80E+00 - 81K 385.001.34E-023.61E-029.53E-022.50E-011.70E-015.26E-011.34E+003.36E+00 - 81K 480.008.35E-032.21E-025.61E-021.39E-019.48E-022.68E-016.29E-011.45E+00 - 81K 590.005.46E-031.43E-023.47E-028.07E-025.52E-021.46E-013.18E-016.78E-01 - 81K 820.002.89E-037.44E-031.68E-023.51E-022.36E-025.74E-021.13E-012.14E-01 - 81K 1100.001.69E-034.27E-039.04E-031.74E-021.12E-022.60E-024.74E-028.21E-02 - 81K 1350.001.19E-032.93E-035.96E-031.09E-026.66E-031.53E-022.66E-024.38E-02 - 81K 1600.008.91E-042.15E-034.25E-037.48E-034.35E-039.94E-031.68E-022.66E-02 - 81L1 16.351.49E+003.23E+027.89E+032.08E+042.35E+024.46E+041.66E+061.39E+07 - 81L1 17.051.40E+002.64E+027.58E+033.66E+042.08E+023.66E+041.32E+061.28E+07 - 81L1 18.351.24E+001.85E+026.55E+035.53E+041.67E+022.59E+048.91E+051.03E+07 - 81L1 21.559.43E-018.34E+013.95E+035.88E+041.04E+021.22E+043.75E+055.32E+06 - 81L1 25.357.04E-013.65E+012.06E+033.98E+046.39E+015.78E+031.57E+052.41E+06 - 81L1 29.005.47E-011.81E+011.13E+032.44E+044.28E+013.12E+037.62E+041.19E+06 - 81L1 35.003.78E-016.74E+004.56E+021.07E+042.45E+011.33E+032.80E+044.24E+05 - 81L1 43.002.48E-012.31E+001.60E+023.86E+031.34E+015.31E+029.45E+031.33E+05 - 81L1 55.001.46E-017.23E-014.42E+011.03E+036.48E+001.81E+022.62E+033.25E+04 - 81L1 68.009.16E-023.20E-011.45E+013.16E+023.48E+007.28E+018.86E+029.65E+03 - 81L1 85.005.52E-021.66E-014.62E+008.97E+011.81E+002.85E+012.89E+022.71E+03 - 81L1 98.003.97E-021.17E-012.31E+004.04E+011.20E+001.59E+011.43E+021.22E+03 - 81L1 115.002.73E-028.07E-021.11E+001.67E+017.57E-018.33E+006.58E+015.00E+02 - 81L1 138.001.78E-025.35E-025.19E-016.36E+004.49E-014.05E+002.76E+011.84E+02 - 81L1 165.001.17E-023.57E-022.63E-012.58E+002.70E-012.03E+001.20E+017.04E+01 - 81L1 230.005.40E-031.67E-028.60E-025.62E-011.06E-015.90E-012.73E+001.25E+01 - 81L1 315.002.66E-038.09E-033.33E-021.57E-014.47E-021.94E-017.20E-012.67E+00 - 81L1 410.001.50E-034.49E-031.59E-026.00E-022.19E-028.01E-022.51E-017.84E-01 - 81L1 520.009.20E-042.69E-038.47E-032.70E-021.16E-023.74E-021.02E-012.77E-01 - 81L1 750.004.53E-041.28E-033.43E-038.80E-034.46E-031.23E-022.81E-026.27E-02 - 81L11000.002.68E-047.32E-041.77E-033.96E-032.13E-035.42E-031.11E-022.17E-02 - 81L11500.001.33E-043.44E-047.38E-041.42E-037.61E-041.82E-033.30E-035.65E-03 - 81L2 15.703.28E+001.56E+042.21E+063.73E+072.76E+011.82E+032.19E+045.14E+04 - 81L2 16.402.93E+001.26E+041.72E+063.36E+072.42E+011.55E+032.13E+049.09E+04 - 81L2 17.702.39E+008.62E+031.12E+062.58E+071.93E+011.16E+031.90E+041.39E+05 - 81L2 20.901.52E+003.81E+034.33E+051.22E+071.17E+016.20E+021.24E+041.54E+05 - 81L2 24.709.57E-011.68E+031.67E+055.07E+067.10E+003.29E+027.09E+031.10E+05 - 81L2 29.006.07E-017.68E+026.67E+042.04E+064.40E+001.79E+023.89E+036.56E+04 - 81L2 35.003.53E-013.08E+022.28E+046.72E+052.51E+008.74E+011.84E+033.16E+04 - 81L2 43.001.93E-011.15E+027.07E+031.93E+051.37E+004.00E+017.80E+021.29E+04 - 81L2 55.009.27E-023.54E+011.76E+034.21E+046.62E-011.58E+012.71E+024.08E+03 - 81L2 68.004.88E-021.30E+015.34E+021.12E+043.55E-017.09E+001.08E+021.45E+03 - 81L2 85.002.48E-024.60E+001.55E+022.79E+031.85E-013.08E+004.04E+014.77E+02 - 81L2 98.001.60E-022.39E+007.06E+011.16E+031.23E-011.81E+002.16E+012.33E+02 - 81L2 115.009.83E-031.15E+002.95E+014.30E+027.75E-021.00E+001.07E+011.04E+02 - 81L2 138.005.63E-035.06E-011.10E+011.41E+024.59E-025.15E-014.82E+004.13E+01 - 81L2 165.003.27E-032.29E-014.28E+004.78E+012.75E-022.69E-012.22E+001.68E+01 - 81L2 230.001.20E-035.42E-027.65E-016.69E+001.07E-028.22E-025.37E-013.23E+00 - 81L2 315.004.78E-041.45E-021.59E-011.11E+004.44E-032.74E-021.45E-017.04E-01 - 81L2 410.002.25E-045.03E-034.50E-022.63E-012.13E-031.12E-024.98E-022.04E-01 - 81L2 520.001.16E-042.00E-031.51E-027.56E-021.10E-035.06E-031.96E-026.96E-02 - 81L2 750.004.37E-055.19E-043.07E-031.24E-024.01E-041.55E-034.91E-031.43E-02 - 81L21000.002.08E-051.92E-049.55E-043.31E-031.81E-046.28E-041.75E-034.44E-03 - 81L21500.007.75E-065.16E-052.08E-046.02E-045.93E-051.84E-044.39E-049.51E-04 - 81L3 13.667.44E+003.77E+046.60E+061.38E+084.20E+007.01E+047.56E+079.05E+09 - 81L3 14.366.45E+002.93E+044.90E+061.17E+083.60E+005.47E+045.40E+076.18E+09 - 81L3 15.665.03E+001.89E+042.91E+068.05E+072.76E+003.55E+043.00E+073.19E+09 - 81L3 18.862.92E+007.40E+039.56E+053.10E+071.56E+001.40E+048.61E+067.74E+08 - 81L3 22.661.69E+002.93E+033.18E+051.07E+078.90E-015.62E+032.53E+061.93E+08 - 81L3 29.007.98E-018.46E+027.22E+042.35E+064.18E-011.64E+034.92E+053.01E+07 - 81L3 35.004.45E-013.29E+022.34E+047.07E+052.36E-016.45E+021.43E+057.41E+06 - 81L3 43.002.33E-011.17E+026.80E+031.85E+051.26E-012.32E+023.76E+041.62E+06 - 81L3 55.001.06E-013.41E+011.56E+033.65E+045.95E-026.83E+017.74E+032.68E+05 - 81L3 68.005.35E-021.18E+014.39E+028.89E+033.13E-022.39E+012.02E+035.79E+04 - 81L3 85.002.59E-023.91E+001.16E+022.00E+031.60E-027.92E+005.00E+021.19E+04 - 81L3 98.001.62E-021.94E+005.00E+017.70E+021.04E-023.93E+002.08E+024.36E+03 - 81L3 115.009.63E-038.81E-011.94E+012.64E+026.45E-031.79E+007.80E+011.44E+03 - 81L3 138.005.30E-033.61E-016.63E+007.80E+013.74E-037.31E-012.60E+014.12E+02 - 81L3 165.002.96E-031.51E-012.33E+002.38E+012.20E-033.05E-018.96E+001.23E+02 - 81L3 230.001.02E-033.07E-023.42E-012.67E+008.25E-046.09E-021.29E+001.38E+01 - 81L3 315.003.79E-047.03E-035.77E-023.52E-013.30E-041.35E-022.17E-011.86E+00 - 81L3 410.001.70E-042.12E-031.35E-026.79E-021.55E-043.89E-035.06E-023.67E-01 - 81L3 520.008.43E-057.44E-043.84E-031.63E-027.96E-051.29E-031.40E-028.84E-02 - 81L3 750.003.01E-051.62E-046.11E-042.05E-032.94E-052.51E-042.06E-031.07E-02 - 81L31000.001.43E-055.37E-051.62E-044.59E-041.40E-057.46E-054.80E-042.18E-03 - 81L31500.005.41E-061.33E-053.01E-056.85E-055.34E-061.59E-056.78E-052.55E-04 - 81M1 4.702.58E+001.48E+049.73E+053.20E+072.25E+035.09E+062.23E+092.19E+11 - 81M1 5.702.10E+006.58E+034.61E+051.63E+071.27E+031.98E+066.39E+085.85E+10 - 81M1 7.701.41E+001.84E+031.45E+054.59E+065.15E+024.55E+059.32E+077.25E+09 - 81M1 11.707.23E-012.96E+022.60E+049.02E+051.48E+026.00E+046.79E+063.96E+08 - 81M1 18.703.09E-013.48E+013.14E+031.15E+053.65E+016.42E+033.94E+051.59E+07 - 81M1 27.001.50E-016.04E+005.30E+021.84E+041.22E+011.16E+034.54E+041.35E+06 - 81M1 42.005.96E-027.27E-015.61E+011.69E+033.31E+001.54E+023.70E+037.54E+04 - 81M1 54.003.44E-022.38E-011.52E+014.10E+021.58E+005.06E+019.31E+021.52E+04 - 81M1 72.001.80E-028.01E-023.41E+007.89E+016.80E-011.46E+012.00E+022.56E+03 - 81M1 105.007.52E-032.64E-025.29E-019.20E+002.27E-013.00E+002.88E+012.66E+02 - 81M1 150.003.26E-031.08E-021.11E-011.33E+008.17E-027.21E-015.02E+003.45E+01 - 81M1 280.007.73E-042.46E-031.21E-026.97E-021.42E-027.03E-022.97E-011.25E+00 - 81M1 500.002.24E-046.74E-042.26E-037.77E-032.97E-039.98E-032.87E-028.20E-02 - 81M2 4.425.79E+002.06E+062.70E+094.27E+113.04E+021.85E+052.06E+074.85E+08 - 81M2 5.424.40E+007.48E+057.16E+081.05E+111.65E+027.33E+047.54E+062.87E+08 - 81M2 7.422.61E+001.57E+059.50E+071.18E+106.42E+011.80E+041.57E+067.47E+07 - 81M2 11.421.10E+001.85E+046.25E+065.90E+081.77E+012.75E+031.83E+058.49E+06 - 81M2 18.423.65E-011.76E+033.28E+052.20E+074.24E+003.65E+021.73E+046.56E+05 - 81M2 27.001.38E-012.71E+023.27E+041.64E+061.36E+007.59E+012.71E+038.15E+04 - 81M2 42.004.21E-023.23E+012.41E+038.51E+043.70E-011.30E+013.28E+027.30E+03 - 81M2 54.002.08E-029.75E+005.61E+021.62E+041.77E-014.84E+001.00E+021.86E+03 - 81M2 72.009.06E-032.52E+001.09E+022.48E+037.65E-021.59E+002.63E+013.92E+02 - 81M2 105.002.99E-034.43E-011.32E+012.22E+022.57E-023.81E-014.67E+005.22E+01 - 81M2 150.001.04E-038.92E-021.90E+002.40E+019.26E-031.02E-019.43E-018.04E+00 - 81M2 280.001.66E-046.08E-037.53E-025.87E-011.59E-031.09E-026.35E-023.44E-01 - 81M2 500.003.25E-056.00E-044.73E-032.47E-023.16E-041.50E-036.04E-032.23E-02 - 81M3 3.961.73E+014.86E+067.17E+091.22E+124.38E+019.39E+061.19E+111.66E+14 - 81M3 4.961.16E+011.57E+061.62E+092.46E+112.21E+013.05E+062.51E+102.41E+13 - 81M3 6.965.88E+002.86E+051.78E+082.21E+107.93E+005.61E+052.42E+091.36E+12 - 81M3 10.962.09E+002.91E+049.65E+068.80E+082.00E+005.80E+041.07E+083.10E+10 - 81M3 17.965.96E-012.43E+034.29E+052.72E+074.45E-014.93E+033.74E+065.59E+08 - 81M3 27.001.94E-013.14E+023.41E+041.58E+061.29E-016.46E+022.44E+052.21E+07 - 81M3 42.005.35E-023.44E+012.28E+037.42E+043.39E-027.17E+011.33E+047.31E+05 - 81M3 54.002.50E-029.82E+004.95E+021.31E+041.59E-022.06E+012.62E+031.10E+05 - 81M3 72.001.02E-022.35E+008.74E+011.83E+036.71E-034.95E+004.20E+021.32E+04 - 81M3 105.003.11E-033.66E-019.16E+001.40E+022.17E-037.68E-013.99E+018.72E+02 - 81M3 150.009.98E-046.40E-021.11E+001.26E+017.55E-041.33E-014.57E+007.28E+01 - 81M3 280.001.40E-043.25E-033.04E-022.06E-011.21E-046.48E-031.20E-011.16E+00 - 81M3 500.002.45E-052.36E-041.28E-035.62E-032.34E-054.23E-044.85E-033.20E-02 - 81M4 3.484.64E+011.47E+056.29E+096.45E+131.36E+013.07E+051.98E+091.16E+12 - 81M4 4.482.16E+014.09E+041.07E+097.11E+126.05E+008.67E+043.60E+081.74E+11 - 81M4 6.486.66E+006.29E+038.03E+072.89E+111.82E+001.36E+043.04E+071.08E+10 - 81M4 10.481.30E+005.52E+022.74E+064.66E+093.73E-011.22E+031.27E+062.99E+08 - 81M4 17.482.06E-014.15E+017.53E+046.11E+076.65E-029.30E+014.58E+046.83E+06 - 81M4 27.003.99E-024.59E+003.57E+031.62E+061.49E-021.04E+012.85E+032.86E+05 - 81M4 42.007.08E-034.86E-011.63E+024.24E+043.16E-031.13E+001.76E+021.18E+04 - 81M4 54.002.58E-031.35E-012.85E+015.47E+031.29E-033.20E-013.70E+011.97E+03 - 81M4 72.008.03E-043.13E-023.92E+005.38E+024.59E-047.56E-026.28E+002.58E+02 - 81M4 105.001.71E-044.62E-033.00E-012.68E+011.16E-041.15E-026.34E-011.86E+01 - 81M4 150.003.94E-057.72E-042.77E-021.67E+003.10E-051.95E-037.48E-021.61E+00 - 81M4 280.003.14E-063.62E-055.04E-041.52E-023.02E-069.09E-051.94E-032.51E-02 - 81M4 500.003.19E-072.38E-061.60E-052.49E-043.43E-075.52E-067.33E-056.25E-04 - 81M5 3.397.08E+011.59E+051.27E+101.11E+147.98E+002.15E+041.09E+104.22E+14 - 81M5 4.393.20E+014.22E+042.07E+091.15E+133.48E+005.93E+031.79E+094.18E+13 - 81M5 6.399.49E+006.18E+031.48E+084.35E+111.03E+009.12E+021.30E+081.47E+12 - 81M5 10.391.78E+005.17E+024.81E+066.51E+092.09E-018.08E+014.32E+061.97E+10 - 81M5 17.392.70E-013.73E+011.27E+058.00E+073.74E-026.23E+001.18E+052.12E+08 - 81M5 27.004.99E-023.90E+005.66E+031.95E+068.40E-037.05E-015.47E+034.59E+06 - 81M5 42.008.59E-033.97E-012.50E+024.83E+041.83E-038.04E-022.51E+021.03E+05 - 81M5 54.003.09E-031.07E-014.24E+016.00E+037.58E-042.36E-024.36E+011.22E+04 - 81M5 72.009.44E-042.40E-025.59E+005.59E+022.74E-045.87E-035.90E+001.09E+03 - 81M5 105.001.98E-043.35E-033.97E-012.54E+017.16E-059.68E-044.31E-014.85E+01 - 81M5 150.004.53E-055.27E-043.32E-021.41E+002.00E-051.82E-043.68E-022.69E+00 - 81M5 280.003.67E-062.27E-054.72E-049.84E-032.17E-061.08E-055.25E-041.97E-02 - 81M5 500.004.15E-071.50E-061.12E-051.16E-042.99E-079.23E-071.17E-052.44E-04 - 81N+ 50.003.26E-029.38E+006.09E+022.55E+047.25E-013.68E+012.12E+039.46E+04 - 81N+ 70.001.30E-021.83E+008.15E+012.30E+032.69E-018.06E+002.71E+027.82E+03 - 81N+ 100.005.02E-033.43E-011.04E+012.01E+029.61E-021.73E+003.42E+016.35E+02 - 81N+ 150.001.70E-035.34E-021.05E+001.38E+012.99E-023.20E-013.66E+004.22E+01 - 81N+ 200.007.99E-041.51E-022.19E-012.22E+001.31E-021.02E-018.21E-016.89E+00 - 81N+ 500.008.93E-054.86E-042.70E-031.26E-021.07E-033.89E-031.31E-024.59E-02 - 82K 89.004.67E-014.56E-019.79E-024.96E-031.12E+017.79E+011.03E+022.99E+01 - 82K 89.704.58E-014.66E-011.23E-011.20E-021.09E+017.58E+011.04E+023.72E+01 - 82K 91.004.43E-014.82E-011.70E-013.22E-021.05E+017.21E+011.06E+025.04E+01 - 82K 94.204.07E-015.10E-012.86E-011.19E-019.48E+006.39E+011.07E+028.02E+01 - 82K 98.003.69E-015.26E-014.12E-012.75E-018.45E+005.56E+011.05E+021.09E+02 - 82K 102.003.35E-015.29E-015.25E-014.76E-017.53E+004.83E+011.01E+021.31E+02 - 82K 108.002.91E-015.18E-016.53E-017.94E-016.39E+003.96E+019.15E+011.49E+02 - 82K 116.002.44E-014.86E-017.52E-011.17E+005.21E+003.08E+017.85E+011.55E+02 - 82K 128.001.92E-014.25E-017.96E-011.53E+003.93E+002.19E+016.07E+011.41E+02 - 82K 141.001.51E-013.59E-017.64E-011.69E+002.98E+001.56E+014.57E+011.18E+02 - 82K 158.001.14E-012.87E-016.73E-011.65E+002.16E+001.06E+013.18E+018.78E+01 - 82K 171.009.37E-022.42E-015.96E-011.53E+001.73E+008.05E+002.45E+016.93E+01 - 82K 188.007.42E-021.96E-015.02E-011.34E+001.32E+005.83E+001.77E+015.09E+01 - 82K 211.005.60E-021.50E-013.97E-011.09E+009.58E-013.95E+001.18E+013.41E+01 - 82K 240.004.11E-021.11E-012.99E-018.30E-016.70E-012.57E+007.50E+002.13E+01 - 82K 305.002.34E-026.31E-021.70E-014.65E-013.47E-011.18E+003.21E+008.59E+00 - 82K 390.001.35E-023.59E-029.44E-022.46E-011.79E-015.43E-011.36E+003.35E+00 - 82K 480.008.63E-032.28E-025.79E-021.43E-011.03E-012.88E-016.68E-011.53E+00 - 82K 590.005.66E-031.48E-023.61E-028.36E-025.98E-021.57E-013.38E-017.16E-01 - 82K 820.003.00E-037.77E-031.75E-023.67E-022.55E-026.17E-021.21E-012.27E-01 - 82K 1100.001.76E-034.48E-039.49E-031.83E-021.20E-022.80E-025.06E-028.72E-02 - 82K 1350.001.24E-033.08E-036.28E-031.15E-027.17E-031.64E-022.85E-024.66E-02 - 82K 1600.009.28E-042.26E-034.48E-037.88E-034.67E-031.07E-021.80E-022.84E-02 - 82L1 16.861.40E+003.04E+027.12E+031.79E+042.36E+024.27E+041.53E+061.23E+07 - 82L1 17.561.31E+002.51E+026.86E+033.14E+042.10E+023.53E+041.23E+061.14E+07 - 82L1 18.861.17E+001.78E+025.98E+034.78E+041.69E+022.52E+048.35E+059.24E+06 - 82L1 22.068.98E-018.24E+013.69E+035.21E+041.06E+021.21E+043.60E+054.90E+06 - 82L1 25.866.76E-013.70E+011.97E+033.63E+046.63E+015.82E+031.53E+052.27E+06 - 82L1 29.005.46E-012.05E+011.19E+032.44E+044.71E+013.44E+038.31E+041.25E+06 - 82L1 35.003.79E-017.75E+004.89E+021.10E+042.70E+011.47E+033.05E+044.51E+05 - 82L1 43.002.49E-012.68E+001.75E+024.05E+031.47E+015.85E+021.03E+041.42E+05 - 82L1 55.001.48E-018.31E-014.89E+011.10E+037.13E+001.99E+022.86E+033.50E+04 - 82L1 68.009.28E-023.57E-011.62E+013.43E+023.83E+008.00E+019.66E+021.04E+04 - 82L1 85.005.61E-021.78E-015.19E+009.83E+012.00E+003.13E+013.15E+022.93E+03 - 82L1 98.004.05E-021.23E-012.60E+004.45E+011.32E+001.74E+011.56E+021.32E+03 - 82L1 115.002.79E-028.39E-021.24E+001.85E+018.33E-019.14E+007.17E+015.40E+02 - 82L1 138.001.82E-025.53E-025.75E-017.04E+004.94E-014.44E+003.01E+011.99E+02 - 82L1 165.001.20E-023.68E-022.89E-012.86E+002.97E-012.22E+001.31E+017.62E+01 - 82L1 230.005.57E-031.72E-029.27E-026.16E-011.17E-016.46E-012.97E+001.36E+01 - 82L1 315.002.75E-038.42E-033.56E-021.71E-014.90E-022.12E-017.83E-012.89E+00 - 82L1 410.001.56E-034.70E-031.70E-026.48E-022.40E-028.74E-022.73E-018.49E-01 - 82L1 520.009.57E-042.83E-039.03E-032.90E-021.27E-024.07E-021.11E-012.99E-01 - 82L1 750.004.73E-041.35E-033.65E-039.43E-034.87E-031.34E-023.05E-026.79E-02 - 82L11000.002.81E-047.74E-041.88E-034.24E-032.32E-035.90E-031.20E-022.35E-02 - 82L11500.001.40E-043.65E-047.87E-041.52E-038.27E-041.98E-033.58E-036.11E-03 - 82L2 16.203.09E+001.45E+041.97E+063.21E+072.78E+011.74E+032.01E+044.50E+04 - 82L2 16.902.77E+001.18E+041.55E+062.90E+072.45E+011.49E+031.97E+047.93E+04 - 82L2 18.202.27E+008.17E+031.02E+062.25E+071.96E+011.13E+031.76E+041.22E+05 - 82L2 21.401.47E+003.69E+034.05E+051.10E+071.21E+016.12E+021.17E+041.38E+05 - 82L2 25.209.35E-011.66E+031.60E+054.67E+067.42E+003.30E+026.83E+031.01E+05 - 82L2 29.006.29E-018.35E+027.17E+042.12E+064.88E+001.94E+024.07E+036.56E+04 - 82L2 35.003.67E-013.36E+022.46E+047.06E+052.79E+009.49E+011.94E+033.23E+04 - 82L2 43.002.01E-011.25E+027.63E+032.04E+051.52E+004.35E+018.29E+021.34E+04 - 82L2 55.009.70E-023.86E+011.90E+034.47E+047.36E-011.72E+012.90E+024.29E+03 - 82L2 68.005.13E-021.42E+015.78E+021.20E+043.95E-017.73E+001.16E+021.53E+03 - 82L2 85.002.61E-025.01E+001.68E+023.00E+032.06E-013.36E+004.35E+015.08E+02 - 82L2 98.001.69E-022.60E+007.66E+011.24E+031.37E-011.98E+002.33E+012.49E+02 - 82L2 115.001.04E-021.26E+003.21E+014.63E+028.63E-021.10E+001.16E+011.11E+02 - 82L2 138.005.97E-035.53E-011.20E+011.52E+025.12E-025.65E-015.23E+004.44E+01 - 82L2 165.003.48E-032.50E-014.66E+005.17E+013.08E-022.96E-012.42E+001.81E+01 - 82L2 230.001.29E-035.94E-028.36E-017.27E+001.20E-029.05E-025.86E-013.50E+00 - 82L2 315.005.12E-041.60E-021.74E-011.21E+004.97E-033.03E-021.59E-017.66E-01 - 82L2 410.002.42E-045.54E-034.94E-022.87E-012.39E-031.24E-025.47E-022.23E-01 - 82L2 520.001.25E-042.21E-031.66E-028.29E-021.24E-035.61E-032.15E-027.63E-02 - 82L2 750.004.75E-055.73E-043.39E-031.36E-024.50E-041.72E-035.43E-031.57E-02 - 82L21000.002.28E-052.12E-041.06E-033.66E-032.04E-047.01E-041.94E-034.90E-03 - 82L21500.008.45E-065.72E-052.31E-046.67E-046.67E-052.06E-044.89E-041.05E-03 - 82L3 14.037.04E+003.53E+045.96E+061.21E+084.09E+006.79E+047.06E+078.20E+09 - 82L3 14.736.14E+002.76E+044.45E+061.02E+083.53E+005.33E+045.09E+075.65E+09 - 82L3 16.034.81E+001.80E+042.68E+067.16E+072.72E+003.49E+042.87E+072.96E+09 - 82L3 19.232.83E+007.20E+039.02E+052.82E+071.56E+001.41E+048.46E+067.42E+08 - 82L3 23.031.66E+002.90E+033.06E+051.00E+078.97E-015.74E+032.54E+061.90E+08 - 82L3 29.008.23E-019.10E+027.68E+042.44E+064.43E-011.82E+035.51E+053.35E+07 - 82L3 35.004.60E-013.53E+022.49E+047.38E+052.50E-017.15E+021.60E+058.24E+06 - 82L3 43.002.41E-011.26E+027.24E+031.94E+051.33E-012.57E+024.20E+041.80E+06 - 82L3 55.001.10E-013.67E+011.66E+033.84E+046.31E-027.58E+018.63E+032.97E+05 - 82L3 68.005.56E-021.27E+014.68E+029.36E+033.32E-022.65E+012.25E+036.43E+04 - 82L3 85.002.69E-024.21E+001.24E+022.11E+031.69E-028.78E+005.56E+021.31E+04 - 82L3 98.001.69E-022.08E+005.33E+018.13E+021.10E-024.35E+002.31E+024.83E+03 - 82L3 115.001.00E-029.47E-012.07E+012.79E+026.84E-031.98E+008.67E+011.59E+03 - 82L3 138.005.54E-033.88E-017.08E+008.26E+013.97E-038.09E-012.88E+014.55E+02 - 82L3 165.003.10E-031.63E-012.49E+002.52E+012.33E-033.38E-019.94E+001.36E+02 - 82L3 230.001.07E-033.30E-023.65E-012.83E+008.75E-046.73E-021.43E+001.53E+01 - 82L3 315.003.98E-047.55E-036.17E-023.75E-013.50E-041.49E-022.40E-012.05E+00 - 82L3 410.001.79E-042.27E-031.45E-027.24E-021.64E-044.28E-035.58E-024.04E-01 - 82L3 520.008.88E-057.98E-044.10E-031.73E-028.43E-051.42E-031.55E-029.73E-02 - 82L3 750.003.18E-051.73E-046.54E-042.19E-033.11E-052.75E-042.26E-031.18E-02 - 82L31000.001.51E-055.73E-051.73E-044.91E-041.48E-058.12E-055.27E-042.40E-03 - 82L31500.005.72E-061.41E-053.21E-057.32E-055.63E-061.72E-057.42E-052.80E-04 - 82M1 4.852.43E+001.42E+049.33E+052.79E+072.27E+034.88E+062.06E+091.96E+11 - 82M1 5.851.99E+006.47E+034.49E+051.50E+071.30E+031.95E+066.10E+085.41E+10 - 82M1 7.851.35E+001.86E+031.43E+054.48E+065.37E+024.63E+059.29E+077.04E+09 - 82M1 11.857.03E-013.10E+022.63E+048.95E+051.57E+026.30E+047.04E+064.03E+08 - 82M1 18.853.05E-013.77E+013.27E+031.17E+053.93E+016.89E+034.19E+051.67E+07 - 82M1 27.001.51E-016.89E+005.78E+021.97E+041.35E+011.28E+035.05E+041.49E+06 - 82M1 42.006.03E-028.41E-016.22E+011.84E+033.66E+001.71E+024.10E+038.30E+04 - 82M1 54.003.49E-022.73E-011.70E+014.48E+021.74E+005.60E+011.03E+031.68E+04 - 82M1 72.001.83E-028.94E-023.85E+008.71E+017.51E-011.61E+012.21E+022.81E+03 - 82M1 105.007.69E-032.82E-025.98E-011.03E+012.51E-013.32E+003.17E+012.92E+02 - 82M1 150.003.35E-031.13E-021.24E-011.48E+009.02E-027.94E-015.51E+003.77E+01 - 82M1 280.008.01E-042.58E-031.31E-027.69E-021.57E-027.71E-023.25E-011.37E+00 - 82M1 500.002.34E-047.10E-042.43E-038.43E-033.26E-031.09E-023.13E-028.92E-02 - 82M2 4.555.44E+001.93E+062.43E+093.71E+113.08E+021.79E+051.92E+074.30E+08 - 82M2 5.554.18E+007.20E+056.68E+089.47E+101.70E+027.25E+047.21E+062.62E+08 - 82M2 7.552.52E+001.56E+059.26E+071.12E+106.76E+011.84E+041.56E+067.13E+07 - 82M2 11.551.08E+001.90E+046.35E+065.87E+081.90E+012.88E+031.87E+058.46E+06 - 82M2 18.553.67E-011.85E+033.42E+052.26E+074.62E+003.90E+021.82E+046.73E+05 - 82M2 27.001.43E-012.97E+023.56E+041.77E+061.52E+008.35E+012.94E+038.74E+04 - 82M2 42.004.38E-023.53E+012.62E+039.21E+044.12E-011.43E+013.57E+027.85E+03 - 82M2 54.002.17E-021.07E+016.12E+021.76E+041.98E-015.32E+001.09E+022.00E+03 - 82M2 72.009.52E-032.76E+001.19E+022.69E+038.55E-021.75E+002.86E+014.24E+02 - 82M2 105.003.16E-034.86E-011.44E+012.41E+022.88E-024.20E-015.10E+005.66E+01 - 82M2 150.001.10E-039.80E-022.08E+002.62E+011.04E-021.12E-011.03E+008.74E+00 - 82M2 280.001.78E-046.70E-038.28E-026.43E-011.78E-031.20E-026.99E-023.76E-01 - 82M2 500.003.52E-056.63E-045.23E-032.72E-023.56E-041.67E-036.68E-032.46E-02 - 82M3 4.071.65E+014.58E+066.51E+091.07E+124.29E+019.14E+061.12E+111.51E+14 - 82M3 5.071.12E+011.52E+061.53E+092.25E+112.21E+013.05E+062.45E+102.30E+13 - 82M3 7.075.74E+002.86E+051.74E+082.11E+108.05E+005.79E+052.46E+091.37E+12 - 82M3 11.072.07E+003.00E+049.78E+068.74E+082.06E+006.16E+041.13E+083.26E+10 - 82M3 18.076.01E-012.55E+034.45E+052.78E+074.65E-015.34E+034.06E+066.05E+08 - 82M3 27.002.00E-013.39E+023.67E+041.68E+061.38E-017.21E+022.75E+052.50E+07 - 82M3 42.005.54E-023.72E+012.45E+037.89E+043.61E-028.00E+011.50E+048.24E+05 - 82M3 54.002.60E-021.06E+015.32E+021.40E+041.69E-022.30E+012.95E+031.24E+05 - 82M3 72.001.07E-022.54E+009.38E+011.94E+037.14E-035.52E+004.71E+021.48E+04 - 82M3 105.003.26E-033.95E-019.83E+001.49E+022.31E-038.56E-014.47E+019.75E+02 - 82M3 150.001.05E-036.92E-021.20E+001.34E+018.04E-041.49E-015.11E+008.11E+01 - 82M3 280.001.47E-043.51E-033.27E-022.20E-011.29E-047.20E-031.33E-011.29E+00 - 82M3 500.002.59E-052.55E-041.37E-036.03E-032.49E-054.68E-045.38E-033.55E-02 - 82M4 3.594.40E+011.38E+055.67E+095.65E+131.33E+012.99E+051.85E+091.05E+12 - 82M4 4.592.09E+013.96E+041.01E+096.58E+126.04E+008.71E+043.51E+081.65E+11 - 82M4 6.596.60E+006.31E+037.94E+072.84E+111.86E+001.42E+043.11E+071.08E+10 - 82M4 10.591.32E+005.71E+022.83E+064.81E+093.89E-011.31E+031.35E+063.13E+08 - 82M4 17.592.13E-014.38E+017.98E+046.51E+077.04E-021.02E+024.97E+047.33E+06 - 82M4 27.004.24E-025.00E+003.94E+031.81E+061.61E-021.17E+013.20E+033.20E+05 - 82M4 42.007.56E-035.30E-011.80E+024.73E+043.43E-031.27E+001.98E+021.32E+04 - 82M4 54.002.77E-031.48E-013.15E+016.11E+031.40E-033.60E-014.16E+012.21E+03 - 82M4 72.008.65E-043.43E-024.33E+006.01E+024.99E-048.52E-027.07E+002.89E+02 - 82M4 105.001.85E-045.08E-033.32E-013.00E+011.26E-041.29E-027.13E-012.08E+01 - 82M4 150.004.27E-058.51E-043.07E-021.86E+003.39E-052.20E-038.43E-021.81E+00 - 82M4 280.003.44E-064.01E-055.58E-041.70E-023.32E-061.02E-042.19E-032.82E-02 - 82M4 500.003.50E-072.64E-061.78E-052.79E-043.77E-076.23E-068.28E-057.04E-04 - 82M5 3.486.72E+011.47E+051.16E+109.78E+137.79E+002.05E+041.03E+103.83E+14 - 82M5 4.483.10E+014.03E+041.98E+091.07E+133.46E+005.82E+031.76E+094.01E+13 - 82M5 6.489.40E+006.11E+031.48E+084.28E+111.05E+009.24E+021.33E+081.50E+12 - 82M5 10.481.80E+005.26E+025.01E+066.73E+092.17E-018.42E+014.63E+062.11E+10 - 82M5 17.482.79E-013.87E+011.35E+058.52E+073.94E-026.61E+001.30E+052.34E+08 - 82M5 27.005.29E-024.17E+006.28E+032.17E+069.02E-037.69E-016.24E+035.30E+06 - 82M5 42.009.16E-034.26E-012.77E+025.38E+041.96E-038.76E-022.86E+021.19E+05 - 82M5 54.003.30E-031.15E-014.70E+016.67E+038.17E-042.57E-024.97E+011.41E+04 - 82M5 72.001.01E-032.58E-026.21E+006.21E+022.96E-046.39E-036.72E+001.26E+03 - 82M5 105.002.13E-043.61E-034.41E-012.83E+017.74E-051.05E-034.91E-015.56E+01 - 82M5 150.004.89E-055.69E-043.69E-021.57E+002.16E-051.98E-044.19E-023.08E+00 - 82M5 280.003.91E-062.46E-055.23E-041.09E-022.36E-061.17E-055.95E-042.24E-02 - 82M5 500.004.61E-071.63E-061.24E-051.29E-043.25E-071.00E-061.32E-052.77E-04 - 82N+ 50.003.41E-021.02E+016.66E+022.81E+048.10E-014.11E+012.38E+031.07E+05 - 82N+ 70.001.36E-022.00E+008.91E+012.53E+033.00E-018.98E+003.03E+028.82E+03 - 82N+ 100.005.27E-033.74E-011.13E+012.20E+021.07E-011.92E+003.81E+017.12E+02 - 82N+ 150.001.79E-035.82E-021.15E+001.51E+013.35E-023.55E-014.06E+004.71E+01 - 82N+ 200.008.40E-041.64E-022.40E-012.42E+001.47E-021.13E-019.11E-017.66E+00 - 82N+ 500.009.49E-055.27E-042.95E-031.38E-021.19E-034.28E-031.44E-025.06E-02 - 83K 91.534.42E-014.15E-018.75E-024.35E-031.12E+017.51E+019.62E+012.71E+01 - 83K 92.234.33E-014.24E-011.09E-011.04E-021.10E+017.31E+019.72E+013.35E+01 - 83K 93.534.19E-014.38E-011.51E-012.75E-021.05E+016.96E+019.88E+014.52E+01 - 83K 96.733.86E-014.64E-012.51E-011.01E-019.56E+006.19E+011.00E+027.16E+01 - 83K 100.533.52E-014.79E-013.63E-012.34E-018.55E+005.41E+019.84E+019.73E+01 - 83K 105.003.16E-014.84E-014.74E-014.29E-017.54E+004.65E+019.39E+011.19E+02 - 83K 111.002.76E-014.74E-015.87E-017.06E-016.43E+003.83E+018.58E+011.35E+02 - 83K 119.002.33E-014.47E-016.78E-011.03E+005.27E+003.01E+017.40E+011.41E+02 - 83K 131.001.84E-013.93E-017.22E-011.37E+004.00E+002.15E+015.78E+011.30E+02 - 83K 144.001.46E-013.36E-016.99E-011.52E+003.06E+001.55E+014.39E+011.09E+02 - 83K 161.001.11E-012.71E-016.23E-011.50E+002.23E+001.06E+013.09E+018.26E+01 - 83K 174.009.16E-022.30E-015.57E-011.41E+001.79E+008.12E+002.39E+016.58E+01 - 83K 191.007.30E-021.88E-014.74E-011.25E+001.38E+005.92E+001.75E+014.88E+01 - 83K 214.005.54E-021.45E-013.79E-011.03E+001.00E+004.04E+001.18E+013.31E+01 - 83K 240.004.21E-021.12E-012.97E-018.18E-017.29E-012.76E+007.88E+002.19E+01 - 83K 305.002.41E-026.41E-021.72E-014.68E-013.77E-011.26E+003.38E+008.92E+00 - 83K 390.001.39E-023.68E-029.67E-022.51E-011.94E-015.83E-011.44E+003.50E+00 - 83K 480.008.92E-032.35E-025.97E-021.47E-011.12E-013.09E-017.10E-011.61E+00 - 83K 590.005.86E-031.54E-023.74E-028.67E-026.48E-021.68E-013.60E-017.56E-01 - 83K 820.003.12E-038.11E-031.83E-023.84E-022.76E-026.63E-021.29E-012.41E-01 - 83K 1100.001.84E-034.69E-039.97E-031.92E-021.30E-023.01E-025.41E-029.27E-02 - 83K 1350.001.29E-033.23E-036.61E-031.21E-027.73E-031.76E-023.04E-024.96E-02 - 83K 1600.009.67E-042.38E-034.72E-038.31E-035.02E-031.15E-021.92E-023.02E-02 - 83L1 17.391.32E+002.87E+026.43E+031.54E+042.37E+024.09E+041.40E+061.10E+07 - 83L1 18.091.24E+002.38E+026.22E+032.70E+042.11E+023.40E+041.14E+061.02E+07 - 83L1 19.391.11E+001.71E+025.46E+034.13E+041.72E+022.45E+047.83E+058.32E+06 - 83L1 22.598.56E-018.13E+013.44E+034.63E+041.09E+021.20E+043.45E+054.51E+06 - 83L1 26.396.49E-013.75E+011.88E+033.31E+046.87E+015.86E+031.50E+052.14E+06 - 83L1 30.005.12E-011.95E+011.07E+032.13E+044.69E+013.26E+037.56E+041.10E+06 - 83L1 36.003.59E-017.67E+004.57E+029.91E+032.74E+011.43E+032.87E+044.10E+05 - 83L1 44.002.39E-012.77E+001.69E+023.77E+031.51E+015.83E+029.96E+031.33E+05 - 83L1 56.001.44E-018.82E-014.92E+011.07E+037.44E+002.03E+022.84E+033.39E+04 - 83L1 69.009.10E-023.80E-011.67E+013.42E+024.04E+008.27E+019.78E+021.03E+04 - 83L1 86.005.55E-021.86E-015.50E+001.01E+022.13E+003.28E+013.24E+022.96E+03 - 83L1 99.004.02E-021.27E-012.78E+004.62E+011.41E+001.84E+011.62E+021.34E+03 - 83L1 116.002.79E-028.61E-021.34E+001.95E+018.94E-019.68E+007.49E+015.56E+02 - 83L1 139.001.83E-025.65E-026.20E-017.51E+005.32E-014.73E+003.17E+012.07E+02 - 83L1 165.001.23E-023.81E-023.17E-013.16E+003.27E-012.44E+001.43E+018.24E+01 - 83L1 230.005.74E-031.79E-021.00E-016.77E-011.28E-017.06E-013.23E+001.47E+01 - 83L1 315.002.84E-038.78E-033.82E-021.86E-015.38E-022.32E-018.51E-013.13E+00 - 83L1 410.001.62E-034.92E-031.81E-027.00E-022.63E-029.54E-022.96E-019.19E-01 - 83L1 520.009.98E-042.97E-039.64E-033.13E-021.39E-024.44E-021.20E-013.24E-01 - 83L1 750.004.94E-041.42E-033.89E-031.01E-025.33E-031.46E-023.31E-027.34E-02 - 83L11000.002.95E-048.19E-042.01E-034.55E-032.53E-036.42E-031.30E-022.54E-02 - 83L11500.001.47E-043.87E-048.40E-041.63E-038.99E-042.15E-033.88E-036.60E-03 - 83L2 16.712.92E+001.35E+041.76E+062.77E+072.81E+011.67E+031.85E+043.95E+04 - 83L2 17.412.63E+001.11E+041.40E+062.51E+072.49E+011.44E+031.82E+046.95E+04 - 83L2 18.712.17E+007.75E+039.28E+051.97E+072.00E+011.10E+031.64E+041.08E+05 - 83L2 21.911.42E+003.57E+033.79E+059.85E+061.25E+016.05E+021.11E+041.24E+05 - 83L2 25.719.13E-011.63E+031.53E+054.30E+067.76E+003.31E+026.58E+039.32E+04 - 83L2 30.005.92E-017.71E+026.35E+041.82E+064.90E+001.85E+023.74E+035.84E+04 - 83L2 36.003.52E-013.19E+022.25E+046.26E+052.85E+009.26E+011.83E+032.94E+04 - 83L2 44.001.96E-011.22E+027.22E+031.87E+051.58E+004.33E+017.99E+021.25E+04 - 83L2 56.009.62E-023.86E+011.85E+034.26E+047.76E-011.75E+012.87E+024.13E+03 - 83L2 69.005.15E-021.44E+015.77E+021.17E+044.22E-017.98E+001.16E+021.51E+03 - 83L2 86.002.65E-025.18E+001.70E+022.99E+032.22E-013.52E+004.45E+015.09E+02 - 83L2 99.001.73E-022.71E+007.86E+011.25E+031.48E-012.09E+002.41E+012.52E+02 - 83L2 116.001.07E-021.32E+003.32E+014.73E+029.39E-021.17E+001.21E+011.14E+02 - 83L2 139.006.19E-035.85E-011.26E+011.57E+025.60E-026.03E-015.50E+004.60E+01 - 83L2 165.003.69E-032.74E-015.08E+005.59E+013.43E-023.25E-012.63E+001.95E+01 - 83L2 230.001.37E-036.51E-029.13E-017.89E+001.34E-029.97E-026.40E-013.79E+00 - 83L2 315.005.49E-041.75E-021.91E-011.32E+005.57E-033.34E-021.74E-018.34E-01 - 83L2 410.002.60E-046.09E-035.43E-023.14E-012.68E-031.37E-026.01E-022.44E-01 - 83L2 520.001.35E-042.43E-031.83E-029.08E-021.39E-036.22E-032.37E-028.35E-02 - 83L2 750.005.14E-056.33E-043.74E-031.50E-025.06E-041.91E-036.00E-031.73E-02 - 83L21000.002.48E-052.34E-041.17E-034.03E-032.30E-047.81E-042.15E-035.41E-03 - 83L21500.009.22E-066.34E-052.56E-047.39E-047.51E-052.30E-045.44E-041.17E-03 - 83L3 14.426.68E+003.31E+045.38E+061.06E+083.99E+006.58E+046.60E+077.43E+09 - 83L3 15.125.84E+002.61E+044.05E+069.01E+073.45E+005.20E+044.80E+075.17E+09 - 83L3 16.424.60E+001.72E+042.47E+066.37E+072.68E+003.44E+042.75E+072.76E+09 - 83L3 19.622.74E+007.00E+038.51E+052.57E+071.55E+001.42E+048.30E+067.11E+08 - 83L3 23.421.62E+002.87E+032.94E+059.32E+069.04E-015.86E+032.54E+061.86E+08 - 83L3 30.007.65E-018.24E+026.67E+042.05E+064.24E-011.71E+034.93E+052.89E+07 - 83L3 36.004.35E-013.30E+022.23E+046.42E+052.43E-016.89E+021.49E+057.43E+06 - 83L3 44.002.32E-011.21E+026.72E+031.75E+051.32E-012.54E+024.04E+041.69E+06 - 83L3 56.001.08E-013.61E+011.59E+033.58E+046.33E-027.68E+018.58E+032.89E+05 - 83L3 69.005.51E-021.27E+014.57E+028.94E+033.37E-022.73E+012.28E+036.42E+04 - 83L3 86.002.70E-024.27E+001.23E+022.06E+031.73E-029.18E+005.75E+021.34E+04 - 83L3 99.001.71E-022.13E+005.35E+018.02E+021.13E-024.58E+002.41E+024.98E+03 - 83L3 116.001.02E-029.76E-012.10E+012.78E+027.06E-032.10E+009.14E+011.66E+03 - 83L3 139.005.66E-034.02E-017.24E+008.33E+014.11E-038.64E-013.06E+014.79E+02 - 83L3 165.003.24E-031.75E-012.66E+002.67E+012.47E-033.74E-011.10E+011.50E+02 - 83L3 230.001.12E-033.55E-023.90E-013.01E+009.27E-047.44E-021.58E+001.68E+01 - 83L3 315.004.18E-048.11E-036.59E-023.98E-013.71E-041.64E-022.65E-012.26E+00 - 83L3 410.001.88E-042.44E-031.55E-027.70E-021.74E-044.72E-036.16E-024.45E-01 - 83L3 520.009.38E-058.55E-044.39E-031.85E-028.92E-051.56E-031.70E-021.07E-01 - 83L3 750.003.36E-051.86E-046.99E-042.34E-033.28E-053.01E-042.49E-031.29E-02 - 83L31000.001.58E-056.11E-051.85E-045.25E-041.56E-058.84E-055.79E-042.63E-03 - 83L31500.006.02E-061.50E-053.42E-057.82E-055.92E-061.85E-058.12E-053.07E-04 - 83M1 5.002.29E+001.37E+048.99E+052.46E+072.29E+034.71E+061.91E+091.75E+11 - 83M1 6.001.89E+006.39E+034.39E+051.39E+071.33E+031.92E+065.85E+085.03E+10 - 83M1 8.001.29E+001.88E+031.42E+054.37E+065.61E+024.72E+059.27E+076.84E+09 - 83M1 12.006.84E-013.24E+022.67E+048.92E+051.67E+026.62E+047.30E+064.10E+08 - 83M1 19.003.01E-014.07E+013.40E+031.19E+054.25E+017.39E+034.46E+051.75E+07 - 83M1 28.001.41E-016.60E+005.27E+021.74E+041.34E+011.21E+034.55E+041.30E+06 - 83M1 43.005.80E-028.71E-016.11E+011.75E+033.77E+001.71E+023.98E+037.86E+04 - 83M1 55.003.40E-022.90E-011.73E+014.42E+021.82E+005.73E+011.03E+031.64E+04 - 83M1 73.001.81E-029.54E-024.05E+008.88E+017.96E-011.68E+012.26E+022.83E+03 - 83M1 106.007.70E-032.95E-026.46E-011.08E+012.69E-013.52E+003.32E+013.02E+02 - 83M1 155.003.19E-031.10E-021.21E-011.40E+009.06E-027.70E-015.17E+003.44E+01 - 83M1 285.007.96E-042.60E-031.35E-027.86E-021.64E-027.95E-023.29E-011.36E+00 - 83M1 500.002.44E-047.50E-042.61E-039.16E-033.59E-031.20E-023.42E-029.72E-02 - 83M2 4.705.11E+001.81E+062.18E+093.23E+113.13E+021.72E+051.78E+073.82E+08 - 83M2 5.703.97E+006.92E+056.23E+088.56E+101.76E+027.18E+046.89E+062.40E+08 - 83M2 7.702.43E+001.55E+059.01E+071.06E+107.13E+011.87E+041.54E+066.79E+07 - 83M2 11.701.07E+001.96E+046.43E+065.82E+082.04E+013.02E+031.92E+058.41E+06 - 83M2 18.703.68E-011.95E+033.57E+052.32E+075.04E+004.16E+021.90E+046.90E+05 - 83M2 28.001.34E-012.72E+023.13E+041.50E+061.52E+007.93E+012.68E+037.69E+04 - 83M2 43.004.27E-023.45E+012.49E+038.52E+044.30E-011.43E+013.47E+027.43E+03 - 83M2 55.002.15E-021.07E+016.00E+021.68E+042.09E-015.44E+001.09E+021.96E+03 - 83M2 73.009.61E-032.84E+001.20E+022.67E+039.18E-021.83E+002.93E+014.25E+02 - 83M2 106.003.25E-035.11E-011.50E+012.47E+023.13E-024.46E-015.33E+005.83E+01 - 83M2 155.001.06E-039.31E-021.92E+002.33E+011.06E-021.10E-019.77E-018.03E+00 - 83M2 285.001.82E-046.87E-038.34E-026.37E-011.91E-031.25E-027.14E-023.78E-01 - 83M2 500.003.80E-057.34E-045.77E-033.00E-024.01E-041.86E-037.39E-032.71E-02 - 83M3 4.181.57E+014.32E+065.91E+099.45E+114.20E+018.92E+061.05E+111.38E+14 - 83M3 5.181.07E+011.47E+061.44E+092.06E+112.20E+013.05E+062.38E+102.19E+13 - 83M3 7.185.60E+002.85E+051.71E+082.01E+108.16E+005.97E+052.50E+091.37E+12 - 83M3 11.182.06E+003.08E+049.91E+068.67E+082.13E+006.54E+041.20E+083.42E+10 - 83M3 18.186.05E-012.67E+034.61E+052.83E+074.86E-015.77E+034.40E+066.53E+08 - 83M3 28.001.85E-013.06E+023.15E+041.39E+061.31E-016.71E+022.44E+052.12E+07 - 83M3 43.005.34E-023.58E+012.27E+037.13E+043.58E-027.93E+011.45E+047.75E+05 - 83M3 55.002.55E-021.05E+015.10E+021.31E+041.71E-022.34E+012.94E+031.21E+05 - 83M3 73.001.06E-022.57E+009.26E+011.88E+037.30E-035.74E+004.84E+021.49E+04 - 83M3 106.003.30E-034.08E-019.98E+001.48E+022.40E-039.10E-014.72E+011.02E+03 - 83M3 155.009.91E-046.38E-021.06E+001.15E+017.77E-041.41E-014.69E+007.23E+01 - 83M3 285.001.47E-043.49E-033.18E-022.10E-011.31E-047.35E-031.34E-011.28E+00 - 83M3 500.002.75E-052.75E-041.48E-036.46E-032.64E-055.17E-045.97E-033.93E-02 - 83M4 3.694.17E+011.30E+055.12E+094.97E+131.30E+012.92E+051.73E+099.53E+11 - 83M4 4.692.02E+013.84E+049.52E+086.10E+126.03E+008.76E+043.43E+081.57E+11 - 83M4 6.696.53E+006.33E+037.85E+072.79E+111.90E+001.47E+043.17E+071.08E+10 - 83M4 10.691.34E+005.90E+022.91E+064.96E+094.05E-011.40E+031.43E+063.26E+08 - 83M4 17.692.21E-014.63E+018.44E+046.93E+077.45E-021.11E+025.39E+047.87E+06 - 83M4 28.003.92E-024.53E+003.37E+031.49E+061.54E-021.10E+012.86E+032.75E+05 - 83M4 43.007.35E-035.14E-011.69E+024.35E+043.43E-031.27E+001.93E+021.25E+04 - 83M4 55.002.76E-031.47E-013.06E+015.87E+031.43E-033.70E-014.17E+012.17E+03 - 83M4 73.008.79E-043.50E-024.35E+005.99E+025.17E-048.95E-027.30E+002.94E+02 - 83M4 106.001.92E-045.33E-033.44E-013.10E+011.33E-041.39E-027.57E-012.18E+01 - 83M4 155.004.08E-057.96E-042.73E-021.61E+003.28E-052.11E-037.80E-021.62E+00 - 83M4 285.003.49E-064.06E-055.53E-041.67E-023.40E-061.06E-042.23E-032.83E-02 - 83M4 500.003.83E-072.92E-061.97E-053.12E-044.14E-077.02E-069.34E-057.93E-04 - 83M5 3.586.38E+011.36E+051.06E+108.64E+137.61E+001.95E+049.68E+093.48E+14 - 83M5 4.583.00E+013.85E+041.88E+099.95E+123.45E+005.71E+031.73E+093.85E+13 - 83M5 6.589.31E+006.03E+031.48E+084.22E+111.07E+009.36E+021.37E+081.52E+12 - 83M5 10.581.83E+005.35E+025.20E+066.95E+092.25E-018.77E+014.95E+062.25E+10 - 83M5 17.582.88E-014.01E+011.44E+059.06E+074.14E-027.01E+001.42E+052.58E+08 - 83M5 28.004.85E-023.69E+005.39E+031.78E+068.54E-037.00E-015.51E+034.47E+06 - 83M5 43.008.86E-034.03E-012.60E+024.91E+041.95E-038.50E-022.77E+021.12E+05 - 83M5 55.003.27E-031.12E-014.59E+016.37E+038.24E-042.56E-024.98E+011.39E+04 - 83M5 73.001.02E-032.58E-026.25E+006.16E+023.04E-046.50E-036.95E+001.29E+03 - 83M5 106.002.19E-043.70E-034.58E-012.91E+018.08E-051.10E-035.23E-015.89E+01 - 83M5 155.004.58E-055.19E-043.26E-021.34E+002.08E-051.85E-043.80E-022.71E+00 - 83M5 285.004.04E-062.45E-055.15E-041.06E-022.40E-061.18E-055.98E-042.23E-02 - 83M5 500.004.86E-071.77E-061.37E-051.43E-043.51E-071.09E-061.48E-053.14E-04 - 83N+ 50.003.57E-021.15E+017.43E+023.15E+049.15E-014.69E+012.75E+031.25E+05 - 83N+ 70.001.43E-022.25E+009.95E+012.82E+033.39E-011.02E+013.50E+021.02E+04 - 83N+ 100.005.56E-034.20E-011.26E+012.45E+021.21E-012.19E+004.37E+018.20E+02 - 83N+ 150.001.89E-036.53E-021.29E+001.68E+013.77E-024.04E-014.64E+005.39E+01 - 83N+ 200.008.93E-041.84E-022.69E-012.71E+001.66E-021.28E-011.04E+008.73E+00 - 83N+ 500.001.02E-045.85E-043.32E-031.56E-021.34E-034.85E-031.63E-025.70E-02 - 84K 94.104.18E-013.78E-017.84E-023.82E-031.13E+017.25E+018.97E+012.45E+01 - 84K 94.804.10E-013.85E-019.74E-029.04E-031.10E+017.06E+019.06E+013.02E+01 - 84K 96.103.97E-013.99E-011.33E-012.37E-021.06E+016.73E+019.21E+014.05E+01 - 84K 99.303.67E-014.22E-012.22E-018.61E-029.66E+006.01E+019.34E+016.39E+01 - 84K 103.103.35E-014.37E-013.20E-012.00E-018.66E+005.27E+019.21E+018.70E+01 - 84K 107.003.06E-014.42E-014.08E-013.45E-017.78E+004.63E+018.88E+011.05E+02 - 84K 113.002.68E-014.37E-015.14E-015.87E-016.66E+003.84E+018.18E+011.21E+02 - 84K 121.002.27E-014.15E-016.03E-018.86E-015.47E+003.03E+017.12E+011.28E+02 - 84K 133.001.80E-013.69E-016.55E-011.20E+004.18E+002.18E+015.63E+011.21E+02 - 84K 146.001.43E-013.18E-016.44E-011.36E+003.20E+001.58E+014.31E+011.03E+02 - 84K 163.001.10E-012.59E-015.83E-011.38E+002.34E+001.08E+013.07E+017.91E+01 - 84K 176.009.09E-022.22E-015.26E-011.31E+001.89E+008.35E+002.39E+016.36E+01 - 84K 193.007.27E-021.82E-014.53E-011.18E+001.46E+006.11E+001.76E+014.77E+01 - 84K 216.005.55E-021.42E-013.67E-019.85E-011.06E+004.19E+001.19E+013.26E+01 - 84K 245.004.11E-021.07E-012.83E-017.71E-017.50E-012.76E+007.69E+002.09E+01 - 84K 310.002.39E-026.28E-021.67E-014.52E-013.93E-011.29E+003.38E+008.71E+00 - 84K 395.001.39E-023.67E-029.61E-022.48E-012.04E-016.01E-011.46E+003.49E+00 - 84K 480.009.22E-032.43E-026.16E-021.51E-011.21E-013.32E-017.54E-011.69E+00 - 84K 590.006.07E-031.60E-023.89E-028.99E-027.04E-021.81E-013.83E-017.98E-01 - 84K 820.003.24E-038.46E-031.92E-024.01E-022.99E-027.13E-021.37E-012.55E-01 - 84K 1100.001.91E-034.91E-031.05E-022.02E-021.41E-023.23E-025.78E-029.85E-02 - 84K 1350.001.34E-033.39E-036.95E-031.27E-028.34E-031.90E-023.25E-025.28E-02 - 84K 1600.001.01E-032.50E-034.97E-038.76E-035.41E-031.23E-022.06E-023.22E-02 - 84L1 17.941.23E+002.70E+025.79E+031.32E+042.38E+023.90E+041.29E+069.68E+06 - 84L1 18.641.16E+002.26E+025.62E+032.31E+042.13E+023.26E+041.05E+069.01E+06 - 84L1 19.941.04E+001.64E+024.97E+033.56E+041.74E+022.38E+047.31E+057.44E+06 - 84L1 23.148.14E-018.01E+013.20E+034.08E+041.12E+021.19E+043.29E+054.14E+06 - 84L1 26.946.22E-013.78E+011.79E+033.00E+047.12E+015.89E+031.46E+052.01E+06 - 84L1 30.005.10E-012.20E+011.13E+032.11E+045.17E+013.60E+038.22E+041.16E+06 - 84L1 36.003.60E-018.76E+004.89E+021.01E+043.01E+011.57E+033.12E+044.35E+05 - 84L1 44.002.40E-013.19E+001.84E+023.93E+031.67E+016.42E+021.09E+041.42E+05 - 84L1 56.001.45E-011.01E+005.42E+011.14E+038.20E+002.23E+023.10E+033.64E+04 - 84L1 69.009.22E-024.28E-011.86E+013.68E+024.45E+009.10E+011.07E+031.11E+04 - 84L1 86.005.64E-022.03E-016.16E+001.10E+022.34E+003.60E+013.53E+023.19E+03 - 84L1 99.004.10E-021.36E-013.12E+005.07E+011.56E+002.02E+011.76E+021.45E+03 - 84L1 116.002.85E-029.07E-021.50E+002.15E+019.85E-011.06E+018.16E+016.01E+02 - 84L1 139.001.88E-025.89E-026.89E-018.30E+005.86E-015.19E+003.45E+012.24E+02 - 84L1 165.001.26E-023.97E-023.50E-013.49E+003.60E-012.67E+001.55E+018.91E+01 - 84L1 230.005.91E-031.86E-021.09E-017.43E-011.41E-017.73E-013.51E+001.59E+01 - 84L1 315.002.94E-039.17E-034.10E-022.02E-015.92E-022.53E-019.25E-013.38E+00 - 84L1 410.001.68E-035.16E-031.94E-027.58E-022.89E-021.04E-013.22E-019.94E-01 - 84L1 520.001.04E-033.13E-031.03E-023.37E-021.53E-024.85E-021.31E-013.51E-01 - 84L1 750.005.16E-041.50E-034.16E-031.09E-025.84E-031.59E-023.59E-027.95E-02 - 84L11000.003.08E-048.68E-042.15E-034.88E-032.77E-036.99E-031.41E-022.75E-02 - 84L11500.001.54E-044.10E-048.97E-041.75E-039.79E-042.34E-034.21E-037.14E-03 - 84L2 17.242.75E+001.26E+041.57E+062.38E+072.84E+011.60E+031.70E+043.47E+04 - 84L2 17.942.48E+001.04E+041.25E+062.16E+072.52E+011.38E+031.67E+046.07E+04 - 84L2 19.242.07E+007.34E+038.44E+051.72E+072.05E+011.06E+031.52E+049.44E+04 - 84L2 22.441.37E+003.45E+033.54E+058.81E+061.29E+015.97E+021.04E+041.12E+05 - 84L2 26.248.91E-011.61E+031.46E+053.95E+068.11E+003.31E+026.32E+038.56E+04 - 84L2 30.006.13E-018.38E+026.81E+041.89E+065.45E+002.00E+023.90E+035.81E+04 - 84L2 36.003.65E-013.47E+022.42E+046.56E+053.17E+001.00E+021.92E+033.00E+04 - 84L2 44.002.04E-011.32E+027.77E+031.97E+051.75E+004.71E+018.48E+021.30E+04 - 84L2 56.001.01E-014.20E+012.00E+034.52E+048.64E-011.90E+013.06E+024.32E+03 - 84L2 69.005.40E-021.57E+016.23E+021.25E+044.70E-018.71E+001.25E+021.59E+03 - 84L2 86.002.79E-025.65E+001.84E+023.20E+032.48E-013.84E+004.80E+015.41E+02 - 84L2 99.001.83E-022.96E+008.53E+011.34E+031.65E-012.28E+002.60E+012.69E+02 - 84L2 116.001.13E-021.44E+003.61E+015.09E+021.05E-011.28E+001.30E+011.22E+02 - 84L2 139.006.56E-036.40E-011.37E+011.69E+026.25E-026.62E-015.96E+004.94E+01 - 84L2 165.003.92E-033.00E-015.53E+006.04E+013.84E-023.57E-012.85E+002.10E+01 - 84L2 230.001.47E-037.14E-029.97E-018.56E+001.50E-021.10E-016.98E-014.10E+00 - 84L2 315.005.89E-041.93E-022.09E-011.44E+006.25E-033.69E-021.90E-019.07E-01 - 84L2 410.002.80E-046.70E-035.96E-023.43E-013.00E-031.51E-026.60E-022.66E-01 - 84L2 520.001.46E-042.68E-032.01E-029.95E-021.56E-036.90E-032.61E-029.15E-02 - 84L2 750.005.57E-056.99E-044.13E-031.65E-025.69E-042.13E-036.63E-031.91E-02 - 84L21000.002.70E-052.59E-041.29E-034.45E-032.58E-048.71E-042.38E-035.98E-03 - 84L21500.001.00E-057.02E-052.84E-048.18E-048.46E-052.57E-046.06E-041.30E-03 - 84L3 14.816.32E+003.10E+044.85E+069.28E+073.89E+006.37E+046.17E+076.72E+09 - 84L3 15.515.55E+002.46E+043.68E+067.92E+073.38E+005.07E+044.52E+074.73E+09 - 84L3 16.814.40E+001.64E+042.28E+065.65E+072.64E+003.39E+042.62E+072.56E+09 - 84L3 20.012.65E+006.80E+038.02E+052.34E+071.55E+001.42E+048.13E+066.80E+08 - 84L3 23.811.58E+002.83E+032.83E+058.67E+069.09E-015.98E+032.55E+061.83E+08 - 84L3 30.007.88E-018.86E+027.08E+042.12E+064.49E-011.89E+035.51E+053.21E+07 - 84L3 36.004.49E-013.54E+022.38E+046.69E+052.57E-017.64E+021.66E+058.25E+06 - 84L3 44.002.40E-011.30E+027.14E+031.83E+051.40E-012.82E+024.51E+041.87E+06 - 84L3 56.001.12E-013.88E+011.69E+033.75E+046.71E-028.51E+019.56E+033.21E+05 - 84L3 69.005.71E-021.37E+014.86E+029.40E+033.57E-023.02E+012.54E+037.11E+04 - 84L3 86.002.80E-024.59E+001.31E+022.17E+031.83E-021.02E+016.39E+021.48E+04 - 84L3 99.001.78E-022.29E+005.70E+018.46E+021.20E-025.08E+002.68E+025.50E+03 - 84L3 116.001.06E-021.05E+002.24E+012.94E+027.48E-032.33E+001.01E+021.83E+03 - 84L3 139.005.90E-034.33E-017.72E+008.80E+014.36E-039.57E-013.39E+015.29E+02 - 84L3 165.003.39E-031.88E-012.83E+002.82E+012.62E-034.13E-011.22E+011.66E+02 - 84L3 230.001.17E-033.81E-024.16E-013.19E+009.82E-048.22E-021.75E+001.85E+01 - 84L3 315.004.38E-048.70E-037.04E-024.23E-013.93E-041.81E-022.93E-012.49E+00 - 84L3 410.001.98E-042.61E-031.66E-028.19E-021.84E-045.19E-036.80E-024.89E-01 - 84L3 520.009.86E-059.16E-044.69E-031.97E-029.43E-051.72E-031.88E-021.18E-01 - 84L3 750.003.53E-051.98E-047.47E-042.50E-033.47E-053.29E-042.74E-031.42E-02 - 84L31000.001.67E-056.51E-051.97E-045.61E-041.64E-059.62E-056.36E-042.89E-03 - 84L31500.006.36E-061.59E-053.64E-058.36E-056.23E-062.00E-058.88E-053.37E-04 - 84M1 5.152.16E+001.33E+048.68E+052.18E+072.32E+034.54E+061.78E+091.58E+11 - 84M1 6.151.79E+006.31E+034.31E+051.30E+071.36E+031.90E+065.62E+084.68E+10 - 84M1 8.151.24E+001.91E+031.42E+054.27E+065.87E+024.81E+059.26E+076.66E+09 - 84M1 12.156.66E-013.39E+022.71E+048.89E+051.78E+026.95E+047.57E+064.17E+08 - 84M1 19.152.96E-014.40E+013.54E+031.21E+054.58E+017.93E+034.74E+051.84E+07 - 84M1 28.001.42E-017.50E+005.75E+021.86E+041.48E+011.34E+035.05E+041.43E+06 - 84M1 43.005.86E-021.00E+006.76E+011.89E+034.16E+001.89E+024.41E+038.66E+04 - 84M1 55.003.45E-023.34E-011.93E+014.82E+022.02E+006.34E+011.14E+031.81E+04 - 84M1 73.001.84E-021.07E-014.55E+009.78E+018.80E-011.86E+012.50E+023.11E+03 - 84M1 106.007.87E-033.19E-027.30E-011.20E+012.98E-013.88E+003.65E+013.31E+02 - 84M1 155.003.28E-031.16E-021.35E-011.56E+001.00E-018.48E-015.68E+003.76E+01 - 84M1 285.008.25E-042.73E-031.47E-028.68E-021.81E-028.73E-023.60E-011.49E+00 - 84M1 500.002.54E-047.93E-042.81E-039.96E-033.95E-031.31E-023.73E-021.06E-01 - 84M2 4.854.76E+001.67E+061.93E+092.74E+113.16E+021.64E+051.63E+073.32E+08 - 84M2 5.853.74E+006.59E+055.72E+087.58E+101.80E+027.03E+046.49E+062.15E+08 - 84M2 7.852.33E+001.53E+058.66E+079.91E+097.47E+011.89E+041.51E+066.38E+07 - 84M2 11.851.05E+002.00E+046.46E+065.72E+082.18E+013.14E+031.94E+058.27E+06 - 84M2 18.853.69E-012.04E+033.69E+052.36E+075.48E+004.42E+021.98E+047.03E+05 - 84M2 28.001.38E-012.97E+023.41E+041.62E+061.70E+008.72E+012.91E+038.23E+04 - 84M2 43.004.44E-023.77E+012.72E+039.21E+044.80E-011.57E+013.77E+027.99E+03 - 84M2 55.002.25E-021.17E+016.54E+021.82E+042.34E-015.99E+001.19E+022.11E+03 - 84M2 73.001.01E-023.11E+001.31E+022.89E+031.03E-012.01E+003.19E+014.59E+02 - 84M2 106.003.43E-035.60E-011.63E+012.68E+023.51E-024.92E-015.82E+006.32E+01 - 84M2 155.001.13E-031.02E-012.10E+002.54E+011.19E-021.21E-011.07E+008.73E+00 - 84M2 285.001.95E-047.57E-039.17E-026.97E-012.15E-031.39E-027.86E-024.13E-01 - 84M2 500.004.11E-058.11E-046.38E-033.30E-024.52E-042.08E-038.17E-032.98E-02 - 84M3 4.301.48E+014.02E+065.27E+098.12E+114.09E+018.58E+069.73E+101.23E+14 - 84M3 5.301.03E+011.41E+061.33E+091.84E+112.17E+013.02E+062.29E+102.05E+13 - 84M3 7.305.43E+002.82E+051.65E+081.89E+108.23E+006.11E+052.51E+091.36E+12 - 84M3 11.302.03E+003.14E+049.95E+068.51E+082.19E+006.90E+041.25E+083.56E+10 - 84M3 18.306.07E-012.79E+034.75E+052.86E+075.06E-016.22E+034.74E+067.01E+08 - 84M3 28.001.91E-013.31E+023.38E+041.48E+061.39E-017.47E+022.74E+052.40E+07 - 84M3 43.005.52E-023.86E+012.44E+037.57E+043.81E-028.84E+011.63E+048.71E+05 - 84M3 55.002.64E-021.13E+015.47E+021.39E+041.82E-022.60E+013.30E+031.36E+05 - 84M3 73.001.11E-022.78E+009.93E+012.00E+037.76E-036.40E+005.42E+021.67E+04 - 84M3 106.003.44E-034.41E-011.07E+011.58E+022.55E-031.01E+005.27E+011.14E+03 - 84M3 155.001.04E-036.90E-021.14E+001.22E+018.26E-041.57E-015.23E+008.05E+01 - 84M3 285.001.54E-043.77E-033.42E-022.24E-011.39E-048.15E-031.49E-011.42E+00 - 84M3 500.002.92E-052.96E-041.59E-036.92E-032.81E-055.72E-046.62E-034.36E-02 - 84M4 3.803.94E+011.21E+054.58E+094.31E+131.27E+012.82E+051.61E+098.55E+11 - 84M4 4.801.95E+013.70E+048.89E+085.59E+125.99E+008.76E+043.32E+081.47E+11 - 84M4 6.806.45E+006.32E+037.70E+072.71E+111.93E+001.53E+043.21E+071.07E+10 - 84M4 10.801.36E+006.08E+022.98E+065.08E+094.21E-011.49E+031.51E+063.38E+08 - 84M4 17.802.27E-014.88E+018.90E+047.34E+077.86E-021.21E+025.83E+048.41E+06 - 84M4 28.004.16E-024.93E+003.71E+031.66E+061.66E-021.24E+013.22E+033.08E+05 - 84M4 43.007.84E-035.61E-011.86E+024.85E+043.71E-031.43E+002.16E+021.40E+04 - 84M4 55.002.95E-031.61E-013.37E+016.53E+031.55E-034.16E-014.68E+012.42E+03 - 84M4 73.009.43E-043.84E-024.80E+006.67E+025.61E-041.01E-018.20E+003.28E+02 - 84M4 106.002.07E-045.85E-033.79E-013.45E+011.45E-041.57E-028.50E-012.44E+01 - 84M4 155.004.40E-058.77E-043.01E-021.80E+003.58E-052.38E-038.77E-021.82E+00 - 84M4 285.003.75E-064.49E-056.11E-041.86E-023.72E-061.19E-042.51E-033.17E-02 - 84M4 500.004.16E-073.24E-062.17E-053.49E-044.53E-077.91E-061.05E-048.92E-04 - 84M5 3.686.04E+011.25E+059.63E+097.54E+137.40E+001.84E+049.04E+093.13E+14 - 84M5 4.682.89E+013.65E+041.78E+099.16E+123.42E+005.56E+031.68E+093.66E+13 - 84M5 6.689.19E+005.93E+031.46E+084.12E+111.08E+009.43E+021.40E+081.54E+12 - 84M5 10.681.85E+005.42E+025.38E+067.13E+092.32E-019.10E+015.27E+062.39E+10 - 84M5 17.682.96E-014.15E+011.54E+059.60E+074.34E-027.41E+001.56E+052.82E+08 - 84M5 28.005.13E-023.94E+005.97E+031.97E+069.16E-037.61E-016.28E+035.15E+06 - 84M5 43.009.42E-034.31E-012.89E+025.45E+042.09E-039.24E-023.15E+021.29E+05 - 84M5 55.003.48E-031.20E-015.09E+017.07E+038.86E-042.78E-025.67E+011.59E+04 - 84M5 73.001.09E-032.76E-026.94E+006.83E+023.27E-047.07E-037.91E+001.48E+03 - 84M5 106.002.36E-043.98E-035.08E-013.23E+018.72E-051.19E-035.95E-016.74E+01 - 84M5 155.004.95E-055.60E-043.62E-021.49E+002.25E-052.01E-044.31E-023.09E+00 - 84M5 285.004.31E-062.65E-055.70E-041.17E-022.59E-061.28E-056.76E-042.54E-02 - 84M5 500.005.06E-071.92E-061.50E-051.58E-043.80E-071.19E-061.66E-053.57E-04 - 84N+ 50.003.73E-021.27E+018.24E+023.51E+041.02E+005.27E+013.14E+031.44E+05 - 84N+ 70.001.50E-022.50E+001.10E+023.13E+033.78E-011.15E+013.97E+021.17E+04 - 84N+ 100.005.82E-034.67E-011.40E+012.71E+021.35E-012.45E+004.94E+019.33E+02 - 84N+ 150.001.99E-037.26E-021.43E+001.86E+014.21E-024.50E-015.21E+006.09E+01 - 84N+ 200.009.39E-042.04E-023.00E-013.01E+001.85E-021.43E-011.16E+009.81E+00 - 84N+ 500.001.08E-046.42E-043.69E-031.74E-021.49E-035.37E-031.81E-026.34E-02 - 85K 96.733.95E-013.44E-017.05E-023.38E-031.13E+017.00E+018.37E+012.23E+01 - 85K 97.433.88E-013.51E-018.71E-027.89E-031.11E+016.82E+018.46E+012.72E+01 - 85K 98.733.76E-013.63E-011.19E-012.05E-021.07E+016.52E+018.59E+013.63E+01 - 85K 101.933.49E-013.85E-011.96E-017.39E-029.76E+005.84E+018.73E+015.71E+01 - 85K 105.733.19E-013.99E-012.83E-011.72E-018.78E+005.14E+018.63E+017.79E+01 - 85K 110.002.90E-014.05E-013.69E-013.10E-017.83E+004.48E+018.32E+019.53E+01 - 85K 116.002.55E-014.01E-014.63E-015.23E-016.73E+003.73E+017.69E+011.10E+02 - 85K 124.002.17E-013.82E-015.45E-017.88E-015.56E+002.96E+016.73E+011.17E+02 - 85K 136.001.74E-013.43E-015.97E-011.08E+004.27E+002.16E+015.37E+011.11E+02 - 85K 149.001.39E-012.98E-015.92E-011.23E+003.29E+001.58E+014.15E+019.59E+01 - 85K 166.001.07E-012.45E-015.43E-011.26E+002.42E+001.09E+012.99E+017.46E+01 - 85K 179.008.90E-022.11E-014.94E-011.21E+001.96E+008.44E+002.34E+016.05E+01 - 85K 196.007.16E-021.75E-014.29E-011.10E+001.52E+006.21E+001.73E+014.58E+01 - 85K 219.005.49E-021.38E-013.52E-019.35E-011.11E+004.29E+001.19E+013.17E+01 - 85K 245.004.21E-021.08E-012.81E-017.60E-018.16E-012.96E+008.07E+002.14E+01 - 85K 310.002.45E-026.38E-021.69E-014.55E-014.28E-011.38E+003.56E+009.04E+00 - 85K 395.001.44E-023.77E-029.84E-022.53E-012.22E-016.46E-011.54E+003.65E+00 - 85K 490.009.14E-032.40E-026.08E-021.48E-011.25E-013.36E-017.48E-011.64E+00 - 85K 600.006.08E-031.60E-023.89E-028.94E-027.31E-021.85E-013.87E-017.92E-01 - 85K 830.003.29E-038.64E-031.95E-024.07E-023.14E-027.41E-021.41E-012.59E-01 - 85K 1100.001.98E-035.15E-031.10E-022.12E-021.52E-023.47E-026.17E-021.05E-01 - 85K 1350.001.40E-033.55E-037.32E-031.34E-029.00E-032.04E-023.48E-025.62E-02 - 85K 1600.001.05E-032.62E-035.24E-039.24E-035.82E-031.32E-022.20E-023.43E-02 - 85L1 18.491.16E+002.56E+025.25E+031.15E+042.40E+023.74E+041.18E+068.61E+06 - 85L1 19.191.10E+002.15E+025.10E+031.99E+042.15E+023.15E+049.72E+058.05E+06 - 85L1 20.499.86E-011.58E+024.55E+033.09E+041.77E+022.31E+046.85E+056.70E+06 - 85L1 23.697.75E-017.90E+012.99E+033.62E+041.15E+021.18E+043.15E+053.81E+06 - 85L1 27.495.97E-013.82E+011.71E+032.73E+047.39E+015.92E+031.43E+051.89E+06 - 85L1 31.004.79E-012.11E+011.03E+031.86E+045.17E+013.42E+037.52E+041.02E+06 - 85L1 37.003.41E-018.69E+004.58E+029.13E+033.06E+011.54E+032.94E+043.97E+05 - 85L1 45.002.31E-013.28E+001.78E+023.67E+031.72E+016.41E+021.05E+041.34E+05 - 85L1 57.001.41E-011.08E+005.44E+011.10E+038.58E+002.27E+023.08E+033.53E+04 - 85L1 70.009.04E-024.58E-011.92E+013.67E+024.70E+009.41E+011.08E+031.10E+04 - 85L1 87.005.58E-022.15E-016.51E+001.12E+022.49E+003.77E+013.63E+023.22E+03 - 85L1 100.004.07E-021.43E-013.33E+005.26E+011.66E+002.13E+011.83E+021.48E+03 - 85L1 117.002.85E-029.43E-021.61E+002.26E+011.06E+001.13E+018.52E+016.19E+02 - 85L1 140.001.89E-026.08E-027.44E-018.82E+006.32E-015.53E+003.63E+012.32E+02 - 85L1 165.001.29E-024.14E-023.86E-013.85E+003.96E-012.92E+001.69E+019.63E+01 - 85L1 230.006.08E-031.94E-021.18E-018.16E-011.55E-018.45E-013.82E+001.72E+01 - 85L1 315.003.04E-039.60E-034.41E-022.20E-016.51E-022.77E-011.00E+003.66E+00 - 85L1 410.001.74E-035.42E-032.08E-028.21E-023.18E-021.14E-013.50E-011.08E+00 - 85L1 520.001.08E-033.30E-031.10E-023.63E-021.68E-025.29E-021.42E-013.79E-01 - 85L1 750.005.38E-041.59E-034.44E-031.17E-026.39E-031.73E-023.90E-028.60E-02 - 85L11000.003.22E-049.19E-042.29E-035.23E-033.03E-037.61E-031.53E-022.98E-02 - 85L11500.001.62E-044.35E-049.58E-041.87E-031.07E-032.54E-034.56E-037.73E-03 - 85L2 17.782.60E+001.18E+041.40E+062.05E+072.88E+011.54E+031.57E+043.05E+04 - 85L2 18.482.35E+009.73E+031.13E+061.88E+072.57E+011.33E+031.54E+045.32E+04 - 85L2 19.781.97E+006.96E+037.70E+051.51E+072.09E+011.03E+031.41E+048.31E+04 - 85L2 22.981.32E+003.34E+033.30E+057.90E+061.34E+015.90E+029.86E+031.00E+05 - 85L2 26.788.69E-011.58E+031.39E+053.63E+068.49E+003.32E+026.08E+037.87E+04 - 85L2 31.005.79E-017.78E+026.07E+041.62E+065.50E+001.91E+023.60E+035.19E+04 - 85L2 37.003.50E-013.31E+022.23E+045.84E+053.25E+009.83E+011.82E+032.74E+04 - 85L2 45.001.99E-011.29E+027.38E+031.82E+051.83E+004.70E+018.19E+021.21E+04 - 85L2 57.009.98E-024.21E+011.96E+034.31E+049.14E-011.94E+013.03E+024.16E+03 - 85L2 70.005.43E-021.60E+016.22E+021.22E+045.02E-019.00E+001.26E+021.57E+03 - 85L2 87.002.83E-025.85E+001.87E+023.19E+032.67E-014.02E+004.91E+015.43E+02 - 85L2 100.001.87E-023.09E+008.75E+011.36E+031.79E-012.41E+002.68E+012.73E+02 - 85L2 117.001.17E-021.51E+003.74E+015.19E+021.14E-011.36E+001.36E+011.25E+02 - 85L2 140.006.80E-036.78E-011.43E+011.75E+026.84E-027.07E-016.27E+005.12E+01 - 85L2 165.004.16E-033.28E-016.02E+006.53E+014.29E-023.92E-013.10E+002.27E+01 - 85L2 230.001.56E-037.83E-021.09E+009.29E+001.68E-021.21E-017.61E-014.44E+00 - 85L2 315.006.31E-042.12E-022.29E-011.57E+007.00E-034.08E-022.08E-019.86E-01 - 85L2 410.003.01E-047.38E-036.54E-023.75E-013.37E-031.68E-027.24E-022.90E-01 - 85L2 520.001.57E-042.95E-032.21E-021.09E-011.75E-037.65E-032.88E-021.00E-01 - 85L2 750.006.03E-057.72E-044.55E-031.81E-026.40E-042.37E-037.33E-032.10E-02 - 85L21000.002.92E-052.87E-041.43E-034.91E-032.91E-049.71E-042.64E-036.59E-03 - 85L21500.001.09E-057.78E-053.15E-049.05E-049.52E-052.88E-046.74E-041.44E-03 - 85L3 15.216.00E+002.91E+044.39E+068.14E+073.79E+006.18E+045.77E+076.10E+09 - 85L3 15.915.28E+002.32E+043.36E+066.98E+073.31E+004.94E+044.26E+074.33E+09 - 85L3 17.214.21E+001.56E+042.10E+065.03E+072.60E+003.34E+042.51E+072.38E+09 - 85L3 20.412.57E+006.62E+037.55E+052.13E+071.54E+001.43E+047.97E+066.50E+08 - 85L3 24.211.55E+002.80E+032.72E+058.06E+069.14E-016.10E+032.55E+061.79E+08 - 85L3 31.007.34E-018.07E+026.18E+041.79E+064.30E-011.78E+034.96E+052.79E+07 - 85L3 37.004.26E-013.32E+022.14E+045.84E+052.50E-017.39E+021.55E+057.47E+06 - 85L3 45.002.31E-011.24E+026.63E+031.65E+051.38E-012.79E+024.35E+041.76E+06 - 85L3 57.001.09E-013.81E+011.62E+033.50E+046.73E-028.63E+019.51E+033.12E+05 - 85L3 70.005.66E-021.37E+014.75E+028.97E+033.61E-023.12E+012.58E+037.09E+04 - 85L3 87.002.81E-024.66E+001.30E+022.11E+031.88E-021.06E+016.61E+021.51E+04 - 85L3 100.001.79E-022.34E+005.72E+018.33E+021.23E-025.35E+002.79E+025.67E+03 - 85L3 117.001.08E-021.08E+002.26E+012.93E+027.71E-032.47E+001.07E+021.90E+03 - 85L3 140.006.02E-034.49E-017.88E+008.87E+014.51E-031.02E+003.60E+015.56E+02 - 85L3 165.003.54E-032.02E-013.02E+002.98E+012.77E-034.57E-011.35E+011.83E+02 - 85L3 230.001.23E-034.09E-024.44E-013.38E+001.04E-039.08E-021.94E+002.04E+01 - 85L3 315.004.60E-049.34E-037.52E-024.49E-014.15E-042.00E-023.23E-012.74E+00 - 85L3 410.002.07E-042.80E-031.77E-028.71E-021.95E-045.72E-037.50E-025.38E-01 - 85L3 520.001.03E-049.81E-045.01E-032.10E-029.97E-051.89E-032.07E-021.29E-01 - 85L3 750.003.72E-052.12E-047.97E-042.66E-033.66E-053.60E-043.01E-031.56E-02 - 85L31000.001.74E-056.94E-052.10E-045.99E-041.73E-051.05E-046.98E-043.17E-03 - 85L31500.006.67E-061.68E-053.88E-058.92E-056.54E-062.16E-059.71E-053.69E-04 - 85M1 5.322.02E+001.27E+048.22E+051.89E+072.33E+034.33E+061.62E+091.39E+11 - 85M1 6.321.69E+006.17E+034.16E+051.19E+071.39E+031.86E+065.30E+084.27E+10 - 85M1 8.321.18E+001.92E+031.40E+054.11E+066.11E+024.85E+059.12E+076.37E+09 - 85M1 12.326.45E-013.52E+022.74E+048.78E+051.89E+027.25E+047.77E+064.19E+08 - 85M1 19.322.91E-014.72E+013.66E+031.22E+054.94E+018.46E+035.01E+051.91E+07 - 85M1 28.001.43E-018.51E+006.27E+021.98E+041.64E+011.49E+035.61E+041.58E+06 - 85M1 43.005.92E-021.16E+007.46E+012.04E+034.60E+002.10E+024.88E+039.53E+04 - 85M1 55.003.49E-023.84E-012.14E+015.25E+022.23E+007.02E+011.26E+031.99E+04 - 85M1 73.001.87E-021.21E-015.11E+001.08E+029.73E-012.05E+012.75E+023.41E+03 - 85M1 106.008.04E-033.48E-028.23E-011.34E+013.29E-014.29E+004.02E+013.63E+02 - 85M1 155.003.36E-031.24E-021.51E-011.74E+001.11E-019.34E-016.23E+004.11E+01 - 85M1 285.008.54E-042.88E-031.60E-029.57E-022.00E-029.59E-023.94E-011.62E+00 - 85M1 500.002.65E-048.39E-043.03E-031.08E-024.35E-031.44E-024.07E-021.15E-01 - 85M2 5.014.46E+001.56E+061.73E+092.37E+113.20E+021.58E+051.51E+072.94E+08 - 85M2 6.013.54E+006.32E+055.30E+086.80E+101.86E+026.93E+046.17E+061.95E+08 - 85M2 8.012.24E+001.52E+058.38E+079.32E+097.86E+011.92E+041.48E+066.03E+07 - 85M2 12.011.03E+002.05E+046.51E+065.64E+082.34E+013.28E+031.98E+058.18E+06 - 85M2 19.013.70E-012.14E+033.83E+052.41E+075.97E+004.71E+022.06E+047.18E+05 - 85M2 28.001.43E-013.25E+023.71E+041.74E+061.90E+009.58E+013.16E+038.82E+04 - 85M2 43.004.62E-024.13E+012.96E+039.95E+045.37E-011.73E+014.09E+028.59E+03 - 85M2 55.002.35E-021.28E+017.13E+021.97E+042.61E-016.58E+001.29E+022.27E+03 - 85M2 73.001.06E-023.41E+001.42E+023.13E+031.15E-012.21E+003.47E+014.95E+02 - 85M2 106.003.62E-036.14E-011.79E+012.91E+023.93E-025.42E-016.35E+006.84E+01 - 85M2 155.001.20E-031.12E-012.30E+002.77E+011.33E-021.34E-011.17E+009.48E+00 - 85M2 285.002.09E-048.34E-031.01E-017.63E-012.41E-031.54E-028.64E-024.51E-01 - 85M2 500.004.45E-058.97E-047.04E-033.63E-025.10E-042.31E-039.04E-033.28E-02 - 85M3 4.431.41E+013.77E+064.74E+097.04E+113.98E+018.30E+069.03E+101.10E+14 - 85M3 5.439.82E+001.36E+061.24E+091.66E+112.15E+013.00E+062.20E+101.92E+13 - 85M3 7.435.28E+002.80E+051.60E+081.78E+108.31E+006.26E+052.53E+091.34E+12 - 85M3 11.432.01E+003.22E+041.00E+078.36E+082.25E+007.28E+041.31E+083.69E+10 - 85M3 18.436.10E-012.92E+034.89E+052.90E+075.27E-016.70E+035.11E+067.51E+08 - 85M3 28.001.96E-013.57E+023.63E+041.56E+061.48E-018.33E+023.09E+052.70E+07 - 85M3 43.005.70E-024.18E+012.61E+038.03E+044.05E-029.85E+011.83E+049.79E+05 - 85M3 55.002.73E-021.22E+015.87E+021.48E+041.93E-022.90E+013.70E+031.52E+05 - 85M3 73.001.15E-023.00E+001.06E+022.12E+038.25E-037.13E+006.07E+021.87E+04 - 85M3 106.003.59E-034.76E-011.15E+011.68E+022.71E-031.13E+005.89E+011.27E+03 - 85M3 155.001.08E-037.45E-021.22E+001.30E+018.78E-041.74E-015.83E+008.96E+01 - 85M3 285.001.63E-044.07E-033.67E-022.39E-011.48E-049.05E-031.66E-011.57E+00 - 85M3 500.003.06E-053.19E-041.71E-037.40E-032.98E-056.32E-047.34E-034.82E-02 - 85M4 3.913.73E+011.14E+054.11E+093.75E+131.24E+012.74E+051.50E+097.70E+11 - 85M4 4.911.88E+013.57E+048.32E+085.13E+125.96E+008.76E+043.21E+081.39E+11 - 85M4 6.916.36E+006.31E+037.55E+072.64E+111.97E+001.58E+043.26E+071.06E+10 - 85M4 10.911.37E+006.27E+023.05E+065.20E+094.37E-011.59E+031.59E+063.51E+08 - 85M4 17.912.34E-015.13E+019.37E+047.76E+078.28E-021.32E+026.30E+048.97E+06 - 85M4 28.004.40E-025.36E+004.08E+031.85E+061.79E-021.39E+013.61E+033.43E+05 - 85M4 43.008.35E-036.12E-012.05E+025.39E+044.01E-031.61E+002.43E+021.56E+04 - 85M4 55.003.15E-031.76E-013.71E+017.27E+031.68E-034.68E-015.25E+012.70E+03 - 85M4 73.001.01E-034.20E-025.28E+007.43E+026.09E-041.13E-019.19E+003.67E+02 - 85M4 106.002.23E-046.42E-034.18E-013.84E+011.57E-041.76E-029.54E-012.73E+01 - 85M4 155.004.74E-059.65E-043.32E-022.00E+003.90E-052.68E-039.84E-022.03E+00 - 85M4 285.004.06E-064.96E-056.74E-042.08E-024.07E-061.35E-042.82E-033.56E-02 - 85M4 500.004.51E-073.59E-062.40E-053.90E-044.96E-078.90E-061.19E-041.00E-03 - 85M5 3.795.72E+011.15E+058.75E+096.60E+137.20E+001.74E+048.47E+092.82E+14 - 85M5 4.792.79E+013.47E+041.69E+098.45E+123.39E+005.42E+031.64E+093.48E+13 - 85M5 6.799.07E+005.82E+031.45E+084.02E+111.09E+009.50E+021.43E+081.55E+12 - 85M5 10.791.86E+005.48E+025.56E+067.31E+092.40E-019.43E+015.60E+062.53E+10 - 85M5 17.793.05E-014.28E+011.63E+051.02E+084.55E-027.83E+001.70E+053.09E+08 - 85M5 28.005.42E-024.20E+006.62E+032.19E+069.81E-038.27E-017.14E+035.93E+06 - 85M5 43.009.99E-034.61E-013.20E+026.05E+042.24E-031.00E-013.58E+021.48E+05 - 85M5 55.003.71E-031.29E-015.64E+017.83E+039.52E-043.02E-026.44E+011.83E+04 - 85M5 73.001.17E-032.96E-027.69E+007.57E+023.52E-047.67E-038.99E+001.69E+03 - 85M5 106.002.53E-044.27E-035.63E-013.57E+019.39E-051.29E-036.76E-017.71E+01 - 85M5 155.005.35E-056.03E-044.01E-021.65E+002.42E-052.18E-044.89E-023.52E+00 - 85M5 285.004.71E-062.86E-056.31E-041.30E-022.80E-061.39E-057.64E-042.88E-02 - 85M5 500.005.53E-072.08E-061.66E-051.75E-044.11E-071.29E-061.87E-054.04E-04 - 85N+ 50.003.88E-021.40E+019.03E+023.87E+041.15E+005.93E+013.56E+031.64E+05 - 85N+ 70.001.56E-022.74E+001.21E+023.44E+034.25E-011.29E+014.48E+021.33E+04 - 85N+ 100.006.09E-035.13E-011.54E+012.97E+021.52E-012.75E+005.55E+011.05E+03 - 85N+ 150.002.09E-037.98E-021.57E+002.04E+014.72E-025.04E-015.84E+006.83E+01 - 85N+ 200.009.91E-042.25E-023.30E-013.31E+002.08E-021.60E-011.30E+001.10E+01 - 85N+ 500.001.14E-047.02E-044.08E-031.92E-021.67E-035.99E-032.01E-027.04E-02 - 86K 99.403.75E-013.14E-016.35E-023.01E-031.14E+016.75E+017.81E+012.02E+01 - 86K 100.103.68E-013.20E-017.81E-026.93E-031.12E+016.59E+017.89E+012.45E+01 - 86K 101.403.57E-013.31E-011.06E-011.78E-021.08E+016.30E+018.02E+013.26E+01 - 86K 104.603.32E-013.51E-011.74E-016.37E-029.85E+005.67E+018.16E+015.11E+01 - 86K 108.403.04E-013.65E-012.52E-011.48E-018.88E+005.01E+018.09E+016.97E+01 - 86K 112.002.81E-013.71E-013.17E-012.48E-018.08E+004.48E+017.87E+018.34E+01 - 86K 118.002.48E-013.70E-014.06E-014.34E-016.96E+003.74E+017.33E+019.85E+01 - 86K 126.002.12E-013.56E-014.87E-016.75E-015.77E+002.99E+016.48E+011.07E+02 - 86K 138.001.70E-013.22E-015.43E-019.50E-014.45E+002.18E+015.22E+011.03E+02 - 86K 151.001.37E-012.83E-015.47E-011.11E+003.45E+001.61E+014.08E+019.03E+01 - 86K 168.001.06E-012.35E-015.10E-011.16E+002.55E+001.12E+012.96E+017.13E+01 - 86K 181.008.84E-022.04E-014.68E-011.13E+002.06E+008.68E+002.34E+015.83E+01 - 86K 198.007.13E-021.70E-014.11E-011.04E+001.60E+006.42E+001.74E+014.46E+01 - 86K 221.005.49E-021.35E-013.41E-018.95E-011.18E+004.45E+001.20E+013.12E+01 - 86K 250.004.12E-021.03E-012.69E-017.20E-018.38E-012.96E+007.88E+002.04E+01 - 86K 315.002.43E-026.26E-021.66E-014.41E-014.44E-011.41E+003.55E+008.82E+00 - 86K 400.001.44E-023.76E-029.80E-022.50E-012.32E-016.66E-011.56E+003.64E+00 - 86K 490.009.44E-032.48E-026.27E-021.52E-011.35E-013.60E-017.93E-011.73E+00 - 86K 600.006.30E-031.66E-024.05E-029.26E-027.91E-021.99E-014.11E-018.34E-01 - 86K 830.003.41E-039.02E-032.04E-024.25E-023.39E-027.95E-021.50E-012.74E-01 - 86K 1100.002.06E-035.39E-031.15E-022.22E-021.64E-023.73E-026.58E-021.11E-01 - 86K 1350.001.45E-033.73E-037.70E-031.41E-029.68E-032.19E-023.71E-025.97E-02 - 86K 1600.001.09E-032.75E-035.52E-039.73E-036.25E-031.42E-022.35E-023.65E-02 - 86L1 19.051.09E+002.43E+024.78E+031.00E+042.42E+023.60E+041.10E+067.69E+06 - 86L1 19.751.03E+002.06E+024.65E+031.73E+042.17E+023.04E+049.04E+057.21E+06 - 86L1 21.059.34E-011.53E+024.18E+032.69E+041.80E+022.25E+046.43E+056.05E+06 - 86L1 24.257.39E-017.80E+012.80E+033.22E+041.18E+021.17E+043.02E+053.51E+06 - 86L1 28.055.73E-013.86E+011.63E+032.49E+047.65E+015.96E+031.39E+051.78E+06 - 86L1 31.004.78E-012.36E+011.08E+031.84E+045.69E+013.77E+038.17E+041.08E+06 - 86L1 37.003.42E-019.86E+004.89E+029.30E+033.37E+011.69E+033.20E+044.20E+05 - 86L1 45.002.32E-013.76E+001.92E+023.82E+031.89E+017.05E+021.14E+041.43E+05 - 86L1 57.001.42E-011.24E+005.96E+011.17E+039.43E+002.50E+023.36E+033.78E+04 - 86L1 70.009.15E-025.18E-012.13E+013.94E+025.16E+001.03E+021.17E+031.18E+04 - 86L1 87.005.66E-022.37E-017.25E+001.22E+022.74E+004.14E+013.95E+023.47E+03 - 86L1 100.004.14E-021.55E-013.71E+005.74E+011.83E+002.33E+011.99E+021.59E+03 - 86L1 117.002.90E-021.01E-011.80E+002.48E+011.16E+001.23E+019.27E+016.68E+02 - 86L1 140.001.93E-026.42E-028.26E-019.71E+006.95E-016.05E+003.95E+012.51E+02 - 86L1 165.001.33E-024.34E-024.26E-014.24E+004.35E-013.20E+001.84E+011.04E+02 - 86L1 230.006.25E-032.03E-021.29E-018.95E-011.71E-019.24E-014.14E+001.86E+01 - 86L1 315.003.14E-031.00E-024.76E-022.40E-017.13E-023.02E-011.09E+003.95E+00 - 86L1 410.001.81E-035.69E-032.23E-028.89E-023.48E-021.24E-013.80E-011.16E+00 - 86L1 520.001.12E-033.47E-031.18E-023.92E-021.84E-025.76E-021.54E-014.10E-01 - 86L1 750.005.63E-041.68E-034.75E-031.25E-026.98E-031.89E-024.23E-029.30E-02 - 86L11000.003.37E-049.73E-042.45E-035.61E-033.30E-038.27E-031.66E-023.22E-02 - 86L11500.001.70E-044.62E-041.02E-032.00E-031.16E-032.76E-034.94E-038.35E-03 - 86L2 18.342.46E+001.10E+041.26E+061.77E+072.92E+011.48E+031.45E+042.70E+04 - 86L2 19.042.23E+009.15E+031.02E+061.63E+072.61E+011.29E+031.43E+044.67E+04 - 86L2 20.341.88E+006.61E+037.03E+051.32E+072.14E+011.01E+031.31E+047.33E+04 - 86L2 23.541.27E+003.23E+033.09E+057.09E+061.39E+015.83E+029.32E+039.02E+04 - 86L2 27.348.48E-011.56E+031.33E+053.34E+068.88E+003.32E+025.84E+037.24E+04 - 86L2 31.005.98E-018.46E+026.51E+041.68E+066.11E+002.07E+023.75E+035.15E+04 - 86L2 37.003.64E-013.60E+022.39E+046.11E+053.62E+001.07E+021.91E+032.78E+04 - 86L2 45.002.07E-011.41E+027.94E+031.91E+052.03E+005.11E+018.69E+021.25E+04 - 86L2 57.001.04E-014.59E+012.11E+034.57E+041.02E+002.11E+013.24E+024.35E+03 - 86L2 70.005.69E-021.75E+016.72E+021.30E+045.59E-019.81E+001.35E+021.65E+03 - 86L2 87.002.98E-026.38E+002.03E+023.41E+032.98E-014.39E+005.28E+015.76E+02 - 86L2 100.001.97E-023.37E+009.49E+011.45E+032.00E-012.63E+002.89E+012.91E+02 - 86L2 117.001.23E-021.65E+004.06E+015.58E+021.27E-011.48E+001.47E+011.34E+02 - 86L2 140.007.20E-037.40E-011.56E+011.88E+027.64E-027.75E-016.79E+005.49E+01 - 86L2 165.004.42E-033.59E-016.55E+007.05E+014.79E-024.30E-013.36E+002.44E+01 - 86L2 230.001.67E-038.58E-021.19E+001.01E+011.88E-021.33E-018.29E-014.80E+00 - 86L2 315.006.76E-042.32E-022.51E-011.71E+007.84E-034.50E-022.28E-011.07E+00 - 86L2 410.003.23E-048.11E-037.17E-024.09E-013.78E-031.85E-027.95E-023.17E-01 - 86L2 520.001.70E-043.25E-032.43E-021.19E-011.96E-038.48E-033.16E-021.09E-01 - 86L2 750.006.52E-058.52E-045.02E-031.99E-027.19E-042.63E-038.10E-032.30E-02 - 86L21000.003.19E-053.17E-041.58E-035.41E-033.27E-041.08E-032.92E-037.27E-03 - 86L21500.001.20E-058.61E-053.49E-041.00E-031.07E-043.22E-047.49E-041.59E-03 - 86L3 15.625.69E+002.74E+043.97E+067.16E+073.70E+006.00E+045.40E+075.54E+09 - 86L3 16.325.03E+002.20E+043.06E+066.16E+073.24E+004.82E+044.02E+073.97E+09 - 86L3 17.624.04E+001.49E+041.93E+064.48E+072.56E+003.29E+042.40E+072.21E+09 - 86L3 20.822.49E+006.43E+037.12E+051.94E+071.54E+001.43E+047.81E+066.22E+08 - 86L3 24.621.51E+002.77E+032.61E+057.50E+069.19E-016.21E+032.55E+061.75E+08 - 86L3 31.007.56E-018.67E+026.56E+041.86E+064.54E-011.97E+035.53E+053.10E+07 - 86L3 37.004.39E-013.56E+022.27E+046.08E+052.65E-018.17E+021.73E+058.28E+06 - 86L3 45.002.38E-011.34E+027.05E+031.72E+051.46E-013.09E+024.84E+041.95E+06 - 86L3 57.001.13E-014.09E+011.72E+033.67E+047.12E-029.54E+011.06E+043.46E+05 - 86L3 70.005.87E-021.47E+015.05E+029.42E+033.82E-023.45E+012.87E+037.84E+04 - 86L3 87.002.91E-025.00E+001.39E+022.22E+031.98E-021.18E+017.34E+021.67E+04 - 86L3 100.001.86E-022.51E+006.08E+018.78E+021.31E-025.91E+003.10E+026.26E+03 - 86L3 117.001.12E-021.16E+002.41E+013.08E+028.16E-032.73E+001.18E+022.10E+03 - 86L3 140.006.27E-034.82E-018.40E+009.36E+014.77E-031.13E+003.99E+016.13E+02 - 86L3 165.003.70E-032.17E-013.22E+003.15E+012.93E-035.05E-011.49E+012.02E+02 - 86L3 230.001.29E-034.40E-024.73E-013.58E+001.10E-031.00E-012.14E+002.25E+01 - 86L3 315.004.84E-041.00E-028.02E-024.76E-014.39E-042.20E-023.56E-013.02E+00 - 86L3 410.002.18E-043.00E-031.89E-029.25E-022.06E-046.28E-038.26E-025.91E-01 - 86L3 520.001.08E-041.05E-035.35E-032.23E-021.05E-042.07E-032.28E-021.42E-01 - 86L3 750.003.90E-052.26E-048.51E-042.84E-033.86E-053.93E-043.31E-031.71E-02 - 86L31000.001.84E-057.38E-052.24E-046.39E-041.82E-051.14E-047.66E-043.48E-03 - 86L31500.006.98E-061.78E-054.12E-059.52E-056.87E-062.33E-051.06E-044.04E-04 - 86M1 5.481.90E+001.23E+047.86E+051.67E+072.34E+034.15E+061.49E+091.23E+11 - 86M1 6.481.60E+006.07E+034.04E+051.09E+071.42E+031.83E+065.04E+083.93E+10 - 86M1 8.481.13E+001.94E+031.38E+053.98E+066.36E+024.91E+059.01E+076.13E+09 - 86M1 12.486.25E-013.66E+022.76E+048.70E+052.00E+027.56E+047.99E+064.22E+08 - 86M1 19.482.86E-015.07E+013.80E+031.24E+055.31E+019.03E+035.30E+051.99E+07 - 86M1 28.001.43E-019.62E+006.82E+022.10E+041.81E+011.65E+036.22E+041.74E+06 - 86M1 43.005.98E-021.32E+008.22E+012.20E+035.08E+002.33E+025.39E+031.05E+05 - 86M1 55.003.54E-024.40E-012.38E+015.71E+022.46E+007.77E+011.38E+032.18E+04 - 86M1 73.001.90E-021.37E-015.72E+001.18E+021.07E+002.27E+013.03E+023.74E+03 - 86M1 106.008.20E-033.81E-029.25E-011.48E+013.63E-014.72E+004.41E+013.97E+02 - 86M1 155.003.45E-031.32E-021.69E-011.93E+001.22E-011.03E+006.82E+004.48E+01 - 86M1 285.008.85E-043.03E-031.75E-021.06E-012.20E-021.05E-014.30E-011.77E+00 - 86M1 500.002.76E-048.88E-043.27E-031.18E-024.77E-031.57E-024.44E-021.25E-01 - 86M2 5.164.20E+001.47E+061.56E+092.08E+113.27E+021.53E+051.41E+072.63E+08 - 86M2 6.163.36E+006.09E+054.95E+086.16E+101.92E+026.86E+045.91E+061.79E+08 - 86M2 8.162.16E+001.51E+058.15E+078.82E+098.29E+011.96E+041.47E+065.75E+07 - 86M2 12.161.01E+002.10E+046.58E+065.58E+082.52E+013.43E+032.02E+058.11E+06 - 86M2 19.163.70E-012.25E+033.98E+052.46E+076.51E+005.01E+022.16E+047.34E+05 - 86M2 28.001.47E-013.55E+024.05E+041.88E+062.12E+001.05E+023.43E+039.45E+04 - 86M2 43.004.79E-024.51E+013.23E+031.08E+056.00E-011.90E+014.45E+029.23E+03 - 86M2 55.002.45E-021.40E+017.77E+022.13E+042.92E-017.24E+001.40E+022.44E+03 - 86M2 73.001.11E-023.73E+001.55E+023.39E+031.29E-012.43E+003.78E+015.35E+02 - 86M2 106.003.82E-036.74E-011.95E+013.16E+024.40E-025.97E-016.92E+007.41E+01 - 86M2 155.001.28E-031.23E-012.51E+003.01E+011.50E-021.48E-011.28E+001.03E+01 - 86M2 285.002.23E-049.19E-031.11E-018.35E-012.71E-031.71E-029.50E-024.93E-01 - 86M2 500.004.80E-059.92E-047.77E-033.99E-025.74E-042.57E-039.98E-033.60E-02 - 86M3 4.541.35E+013.59E+064.35E+096.29E+113.92E+018.15E+068.58E+101.02E+14 - 86M3 5.549.49E+001.32E+061.17E+091.53E+112.15E+013.01E+062.16E+101.85E+13 - 86M3 7.545.16E+002.81E+051.57E+081.70E+108.43E+006.46E+052.57E+091.35E+12 - 86M3 11.541.99E+003.31E+041.01E+078.30E+082.32E+007.71E+041.39E+083.87E+10 - 86M3 18.546.13E-013.05E+035.06E+052.95E+075.50E-017.24E+035.52E+068.10E+08 - 86M3 28.002.01E-013.86E+023.89E+041.66E+061.57E-019.26E+023.47E+053.05E+07 - 86M3 43.005.89E-024.51E+012.80E+038.51E+044.30E-021.10E+022.05E+041.10E+06 - 86M3 55.002.83E-021.32E+016.28E+021.57E+042.05E-023.23E+014.15E+031.71E+05 - 86M3 73.001.19E-023.24E+001.14E+022.25E+038.76E-037.92E+006.79E+022.09E+04 - 86M3 106.003.74E-035.15E-011.23E+011.78E+022.88E-031.25E+006.58E+011.41E+03 - 86M3 155.001.14E-038.05E-021.31E+001.38E+019.33E-041.94E-016.50E+009.96E+01 - 86M3 285.001.71E-044.39E-033.93E-022.55E-011.57E-041.00E-021.84E-011.74E+00 - 86M3 500.003.22E-053.43E-041.83E-037.92E-033.17E-056.97E-048.13E-035.33E-02 - 86M4 4.023.53E+011.06E+053.70E+093.27E+131.21E+012.67E+051.39E+096.94E+11 - 86M4 5.021.81E+013.45E+047.78E+084.70E+125.92E+008.77E+043.11E+081.31E+11 - 86M4 7.026.27E+006.30E+037.40E+072.56E+112.00E+001.63E+043.29E+071.05E+10 - 86M4 11.021.38E+006.46E+023.12E+065.31E+094.53E-011.70E+031.67E+063.63E+08 - 86M4 18.022.41E-015.40E+019.86E+048.20E+078.72E-021.43E+026.79E+049.56E+06 - 86M4 28.004.66E-025.84E+004.49E+032.06E+061.93E-021.56E+014.05E+033.83E+05 - 86M4 43.008.89E-036.68E-012.25E+026.00E+044.34E-031.81E+002.72E+021.74E+04 - 86M4 55.003.36E-031.92E-014.09E+018.08E+031.82E-035.26E-015.88E+013.02E+03 - 86M4 73.001.08E-034.60E-025.82E+008.25E+026.60E-041.27E-011.03E+014.09E+02 - 86M4 106.002.39E-047.05E-034.60E-014.27E+011.71E-041.98E-021.07E+003.05E+01 - 86M4 155.005.12E-051.06E-033.66E-022.23E+004.25E-053.01E-031.10E-012.27E+00 - 86M4 285.004.43E-065.47E-057.44E-042.31E-024.44E-061.51E-043.17E-033.99E-02 - 86M4 500.004.97E-073.95E-062.65E-054.35E-045.42E-071.00E-051.34E-041.13E-03 - 86M5 3.895.43E+011.07E+057.98E+095.80E+137.01E+001.65E+047.94E+092.55E+14 - 86M5 4.892.69E+013.30E+041.60E+097.80E+123.36E+005.29E+031.60E+093.31E+13 - 86M5 6.898.95E+005.72E+031.44E+083.92E+111.11E+009.56E+021.46E+081.56E+12 - 86M5 10.891.88E+005.54E+025.74E+067.48E+092.48E-019.76E+015.94E+062.68E+10 - 86M5 17.893.13E-014.42E+011.73E+051.07E+084.76E-028.25E+001.85E+053.38E+08 - 86M5 28.005.73E-024.47E+007.32E+032.43E+061.05E-028.97E-018.10E+036.81E+06 - 86M5 43.001.06E-024.92E-013.54E+026.70E+042.40E-031.09E-014.06E+021.70E+05 - 86M5 55.003.94E-031.38E-016.24E+018.67E+031.02E-033.27E-027.31E+012.09E+04 - 86M5 73.001.24E-033.17E-028.52E+008.38E+023.78E-048.31E-031.02E+011.93E+03 - 86M5 106.002.71E-044.59E-036.24E-013.96E+011.01E-041.40E-037.66E-018.80E+01 - 86M5 155.005.71E-056.49E-044.44E-021.82E+002.61E-052.36E-045.54E-024.01E+00 - 86M5 285.004.95E-063.09E-056.97E-041.44E-023.02E-061.51E-058.62E-043.27E-02 - 86M5 500.006.22E-072.25E-061.83E-051.94E-044.44E-071.40E-062.09E-054.57E-04 - 86N+ 50.004.05E-021.55E+011.00E+034.30E+041.28E+006.65E+014.05E+031.88E+05 - 86N+ 70.001.64E-023.05E+001.34E+023.82E+034.74E-011.45E+015.09E+021.52E+04 - 86N+ 100.006.38E-035.70E-011.70E+013.29E+021.69E-013.07E+006.27E+011.20E+03 - 86N+ 150.002.19E-038.86E-021.74E+002.26E+015.27E-025.62E-016.55E+007.71E+01 - 86N+ 200.001.04E-032.49E-023.67E-013.67E+002.31E-021.78E-011.45E+001.23E+01 - 86N+ 500.001.21E-047.72E-044.54E-032.14E-021.86E-036.64E-032.23E-027.82E-02 - 87K 102.143.55E-012.87E-015.76E-022.71E-031.15E+016.53E+017.31E+011.84E+01 - 87K 102.843.49E-012.93E-017.04E-026.13E-031.13E+016.38E+017.38E+012.22E+01 - 87K 104.143.39E-013.03E-019.50E-021.55E-021.09E+016.11E+017.50E+012.94E+01 - 87K 107.343.15E-013.21E-011.55E-015.53E-029.97E+005.51E+017.64E+014.58E+01 - 87K 111.142.90E-013.34E-012.24E-011.28E-019.01E+004.89E+017.59E+016.25E+01 - 87K 115.002.67E-013.40E-012.87E-012.22E-018.17E+004.35E+017.39E+017.58E+01 - 87K 121.002.37E-013.41E-013.68E-013.87E-017.06E+003.65E+016.91E+018.95E+01 - 87K 129.002.03E-013.29E-014.42E-016.02E-015.88E+002.93E+016.14E+019.72E+01 - 87K 141.001.64E-013.00E-014.97E-018.54E-014.57E+002.16E+014.99E+019.49E+01 - 87K 154.001.33E-012.65E-015.05E-011.01E+003.55E+001.60E+013.93E+018.41E+01 - 87K 171.001.03E-012.23E-014.76E-011.07E+002.64E+001.12E+012.88E+016.72E+01 - 87K 184.008.66E-021.95E-014.41E-011.05E+002.15E+008.77E+002.29E+015.55E+01 - 87K 201.007.02E-021.64E-013.91E-019.80E-011.68E+006.53E+001.72E+014.28E+01 - 87K 224.005.44E-021.31E-013.28E-018.52E-011.24E+004.55E+001.20E+013.03E+01 - 87K 250.004.21E-021.04E-012.68E-017.10E-019.13E-013.17E+008.26E+002.09E+01 - 87K 315.002.50E-026.37E-021.68E-014.44E-014.84E-011.51E+003.74E+009.13E+00 - 87K 400.001.48E-023.86E-021.00E-012.56E-012.53E-017.15E-011.66E+003.80E+00 - 87K 490.009.75E-032.56E-026.48E-021.57E-011.47E-013.87E-018.41E-011.81E+00 - 87K 600.006.52E-031.73E-024.21E-029.61E-028.59E-022.13E-014.37E-018.79E-01 - 87K 830.003.54E-039.42E-032.14E-024.45E-023.67E-028.55E-021.60E-012.90E-01 - 87K 1100.002.15E-035.65E-031.21E-022.33E-021.77E-024.01E-027.03E-021.18E-01 - 87K 1350.001.51E-033.91E-038.11E-031.48E-021.04E-022.35E-023.97E-026.35E-02 - 87K 1600.001.14E-032.89E-035.82E-031.03E-026.74E-031.53E-022.51E-023.88E-02 - 87L1 19.641.03E+002.30E+024.33E+038.73E+032.43E+023.44E+041.01E+066.83E+06 - 87L1 20.349.73E-011.96E+024.23E+031.50E+042.19E+022.93E+048.36E+056.43E+06 - 87L1 21.648.82E-011.47E+023.82E+032.34E+041.82E+022.19E+046.01E+055.44E+06 - 87L1 24.847.02E-017.68E+012.61E+032.86E+041.21E+021.15E+042.89E+053.22E+06 - 87L1 28.645.49E-013.88E+011.56E+032.26E+047.93E+015.98E+031.35E+051.67E+06 - 87L1 32.004.49E-012.27E+019.86E+021.63E+045.71E+013.60E+037.51E+049.55E+05 - 87L1 38.003.25E-019.79E+004.59E+028.43E+033.43E+011.65E+033.03E+043.85E+05 - 87L1 46.002.23E-013.87E+001.86E+023.57E+031.95E+017.05E+021.11E+041.35E+05 - 87L1 58.001.38E-011.31E+005.98E+011.13E+039.88E+002.55E+023.34E+033.67E+04 - 87L1 71.008.97E-025.56E-012.19E+013.92E+025.46E+001.07E+021.19E+031.17E+04 - 87L1 88.005.60E-022.54E-017.64E+001.24E+022.92E+004.34E+014.06E+023.50E+03 - 87L1 101.004.12E-021.64E-013.95E+005.94E+011.96E+002.46E+012.06E+021.62E+03 - 87L1 118.002.90E-021.06E-011.93E+002.60E+011.25E+001.31E+019.68E+016.87E+02 - 87L1 141.001.94E-026.70E-028.92E-011.03E+017.50E-016.45E+004.15E+012.61E+02 - 87L1 170.001.27E-024.27E-024.20E-014.04E+004.40E-013.13E+001.74E+019.59E+01 - 87L1 235.006.13E-032.03E-021.31E-018.94E-011.77E-019.35E-014.10E+001.80E+01 - 87L1 320.003.13E-031.02E-024.90E-022.46E-017.52E-023.13E-011.11E+003.97E+00 - 87L1 410.001.87E-035.99E-032.40E-029.65E-023.82E-021.35E-014.12E-011.26E+00 - 87L1 520.001.17E-033.66E-031.26E-024.24E-022.02E-026.29E-021.67E-014.44E-01 - 87L1 750.005.88E-041.78E-035.08E-031.35E-027.65E-032.06E-024.59E-021.01E-01 - 87L11000.003.53E-041.03E-032.62E-036.02E-033.61E-039.01E-031.80E-023.48E-02 - 87L11500.001.78E-044.90E-041.09E-032.15E-031.26E-033.01E-035.36E-039.03E-03 - 87L2 18.912.32E+001.03E+041.13E+061.53E+072.96E+011.42E+031.34E+042.40E+04 - 87L2 19.612.12E+008.60E+039.20E+051.41E+072.66E+011.24E+031.32E+044.12E+04 - 87L2 20.911.79E+006.27E+036.42E+051.16E+072.20E+019.77E+021.22E+046.48E+04 - 87L2 24.111.23E+003.13E+032.88E+056.35E+061.44E+015.75E+028.81E+038.12E+04 - 87L2 27.918.26E-011.53E+031.26E+053.06E+069.30E+003.33E+025.62E+036.66E+04 - 87L2 32.005.66E-017.89E+025.83E+041.46E+066.20E+001.99E+023.47E+034.62E+04 - 87L2 38.003.50E-013.45E+022.21E+045.46E+053.73E+001.05E+021.81E+032.54E+04 - 87L2 46.002.03E-011.38E+027.55E+031.77E+052.13E+005.12E+018.41E+021.18E+04 - 87L2 58.001.03E-014.60E+012.07E+034.36E+041.08E+002.15E+013.21E+024.20E+03 - 87L2 71.005.71E-021.78E+016.72E+021.27E+045.99E-011.01E+011.36E+021.63E+03 - 87L2 88.003.03E-026.61E+002.06E+023.40E+033.22E-014.60E+005.41E+015.78E+02 - 87L2 101.002.01E-023.52E+009.74E+011.47E+032.17E-012.78E+002.99E+012.94E+02 - 87L2 118.001.27E-021.74E+004.21E+015.69E+021.39E-011.58E+001.53E+011.37E+02 - 87L2 141.007.46E-037.85E-011.63E+011.95E+028.37E-028.28E-017.13E+005.68E+01 - 87L2 170.004.29E-033.45E-016.10E+006.38E+014.93E-024.24E-013.22E+002.26E+01 - 87L2 235.001.67E-038.59E-021.16E+009.65E+001.99E-021.36E-018.27E-014.68E+00 - 87L2 320.006.92E-042.40E-022.54E-011.70E+008.43E-034.71E-022.34E-011.08E+00 - 87L2 410.003.47E-048.93E-037.87E-024.47E-014.25E-032.05E-028.72E-023.46E-01 - 87L2 520.001.83E-043.58E-032.67E-021.30E-012.21E-039.40E-033.48E-021.20E-01 - 87L2 750.007.07E-059.42E-045.53E-032.19E-028.10E-042.93E-038.95E-032.53E-02 - 87L21000.003.45E-053.50E-041.75E-035.96E-033.68E-041.21E-033.24E-038.02E-03 - 87L21500.001.30E-059.54E-053.87E-041.11E-031.21E-043.60E-048.33E-041.76E-03 - 87L3 16.035.40E+002.58E+043.60E+066.31E+073.61E+005.84E+045.07E+075.04E+09 - 87L3 16.734.79E+002.08E+042.79E+065.45E+073.17E+004.72E+043.80E+073.64E+09 - 87L3 18.033.86E+001.43E+041.79E+063.99E+072.52E+003.25E+042.29E+072.06E+09 - 87L3 21.232.41E+006.26E+036.72E+051.76E+071.53E+001.44E+047.65E+065.95E+08 - 87L3 25.031.48E+002.73E+032.51E+056.97E+069.24E-016.33E+032.55E+061.71E+08 - 87L3 32.007.06E-017.94E+025.76E+041.58E+064.36E-011.86E+035.00E+052.71E+07 - 87L3 38.004.16E-013.35E+022.06E+045.33E+052.58E-017.92E+021.62E+057.52E+06 - 87L3 46.002.30E-011.29E+026.56E+031.56E+051.44E-013.06E+024.67E+041.83E+06 - 87L3 58.001.11E-014.03E+011.64E+033.42E+047.14E-029.69E+011.05E+043.37E+05 - 87L3 71.005.81E-021.47E+014.93E+028.99E+033.87E-023.56E+012.91E+037.83E+04 - 87L3 88.002.92E-025.08E+001.38E+022.16E+032.03E-021.23E+017.58E+021.70E+04 - 87L3 101.001.87E-022.57E+006.10E+018.65E+021.34E-026.22E+003.23E+026.44E+03 - 87L3 118.001.13E-021.19E+002.44E+013.07E+028.41E-032.89E+001.24E+022.18E+03 - 87L3 141.006.39E-035.00E-018.57E+009.41E+014.94E-031.20E+004.23E+016.44E+02 - 87L3 170.003.50E-032.01E-012.88E+002.73E+012.83E-034.82E-011.38E+011.82E+02 - 87L3 235.001.26E-034.26E-024.46E-013.29E+001.09E-039.96E-022.09E+002.15E+01 - 87L3 320.004.83E-041.00E-027.83E-024.57E-014.44E-042.25E-023.60E-013.00E+00 - 87L3 410.002.28E-043.22E-032.01E-029.82E-022.17E-046.92E-039.10E-026.50E-01 - 87L3 520.001.14E-041.12E-035.70E-032.37E-021.11E-042.27E-032.51E-021.56E-01 - 87L3 750.004.09E-052.42E-049.07E-043.02E-034.07E-054.30E-043.64E-031.88E-02 - 87L31000.001.93E-057.86E-052.39E-046.81E-041.92E-051.24E-048.40E-043.81E-03 - 87L31500.007.35E-061.88E-054.39E-051.01E-047.21E-062.51E-051.16E-044.42E-04 - 87M1 5.651.79E+001.19E+047.53E+051.49E+072.37E+033.99E+061.38E+091.10E+11 - 87M1 6.651.51E+005.97E+033.93E+051.01E+071.45E+031.80E+064.79E+083.62E+10 - 87M1 8.651.08E+001.96E+031.37E+053.86E+066.63E+024.97E+058.90E+075.90E+09 - 87M1 12.656.06E-013.81E+022.80E+048.64E+052.13E+027.89E+048.21E+064.24E+08 - 87M1 19.652.82E-015.44E+013.94E+031.26E+055.73E+019.64E+035.60E+052.08E+07 - 87M1 28.001.44E-011.09E+017.42E+022.24E+042.00E+011.83E+036.91E+041.92E+06 - 87M1 43.006.03E-021.52E+009.06E+012.37E+035.62E+002.58E+025.96E+031.15E+05 - 87M1 55.003.58E-025.05E-012.64E+016.21E+022.72E+008.60E+011.53E+032.39E+04 - 87M1 73.001.93E-021.56E-016.40E+001.29E+021.19E+002.51E+013.34E+024.10E+03 - 87M1 106.008.37E-034.20E-021.04E+001.64E+014.01E-015.21E+004.85E+014.34E+02 - 87M1 155.003.54E-031.41E-021.89E-012.15E+001.35E-011.13E+007.49E+004.90E+01 - 87M1 285.009.15E-043.21E-031.92E-021.17E-012.43E-021.15E-014.71E-011.93E+00 - 87M1 500.002.88E-049.42E-043.53E-031.29E-025.26E-031.72E-024.85E-021.36E-01 - 87M2 5.333.93E+001.37E+061.39E+091.78E+113.32E+021.47E+051.30E+072.33E+08 - 87M2 6.333.17E+005.82E+054.56E+085.48E+101.98E+026.73E+045.58E+061.62E+08 - 87M2 8.332.07E+001.49E+057.83E+078.24E+098.72E+011.98E+041.43E+065.41E+07 - 87M2 12.339.91E-012.14E+046.59E+065.47E+082.70E+013.57E+032.05E+057.98E+06 - 87M2 19.333.70E-012.36E+034.12E+052.50E+077.09E+005.32E+022.24E+047.47E+05 - 87M2 28.001.51E-013.88E+024.41E+042.03E+062.37E+001.16E+023.72E+031.01E+05 - 87M2 43.004.97E-024.94E+013.51E+031.16E+056.71E-012.08E+014.83E+029.92E+03 - 87M2 55.002.55E-021.54E+018.47E+022.31E+043.27E-017.96E+001.53E+022.63E+03 - 87M2 73.001.16E-024.09E+001.69E+023.68E+031.44E-012.68E+004.11E+015.77E+02 - 87M2 106.004.03E-037.39E-012.13E+013.43E+024.94E-026.57E-017.55E+008.01E+01 - 87M2 155.001.35E-031.36E-012.75E+003.28E+011.68E-021.63E-011.40E+001.12E+01 - 87M2 285.002.40E-041.01E-021.22E-019.13E-013.05E-031.89E-021.04E-015.39E-01 - 87M2 500.005.18E-051.10E-038.58E-034.39E-026.48E-042.86E-031.10E-023.96E-02 - 87M3 4.661.28E+013.38E+063.94E+095.51E+113.83E+017.92E+068.03E+109.22E+13 - 87M3 5.669.11E+001.27E+061.09E+091.39E+112.13E+013.00E+062.09E+101.74E+13 - 87M3 7.665.02E+002.79E+051.52E+081.61E+108.51E+006.63E+052.59E+091.34E+12 - 87M3 11.661.97E+003.38E+041.02E+078.16E+082.38E+008.14E+041.45E+084.02E+10 - 87M3 18.666.15E-013.19E+035.21E+052.98E+075.72E-017.79E+035.94E+068.67E+08 - 87M3 28.002.07E-014.17E+024.18E+041.76E+061.67E-011.03E+033.90E+053.43E+07 - 87M3 43.006.08E-024.87E+013.00E+039.02E+044.57E-021.22E+022.30E+041.23E+06 - 87M3 55.002.93E-021.43E+016.73E+021.66E+042.18E-023.59E+014.65E+031.91E+05 - 87M3 73.001.24E-023.50E+001.22E+022.39E+039.30E-038.82E+007.60E+022.34E+04 - 87M3 106.003.90E-035.56E-011.31E+011.89E+023.06E-031.39E+007.35E+011.58E+03 - 87M3 155.001.19E-038.69E-021.40E+001.47E+019.91E-042.15E-017.24E+001.11E+02 - 87M3 285.001.80E-044.74E-034.22E-022.72E-011.67E-041.11E-022.04E-011.93E+00 - 87M3 500.003.39E-053.69E-041.96E-038.46E-033.36E-057.70E-049.01E-035.90E-02 - 87M4 4.143.35E+011.00E+053.33E+092.87E+131.18E+012.60E+051.30E+096.29E+11 - 87M4 5.141.75E+013.33E+047.29E+084.32E+125.89E+008.79E+043.02E+081.23E+11 - 87M4 7.146.18E+006.30E+037.25E+072.49E+112.03E+001.69E+043.33E+071.04E+10 - 87M4 11.141.39E+006.65E+023.18E+065.42E+094.69E-011.81E+031.75E+063.75E+08 - 87M4 18.142.48E-015.68E+011.04E+058.65E+079.17E-021.56E+027.32E+041.02E+07 - 87M4 28.004.93E-026.35E+004.93E+032.29E+062.08E-021.75E+014.54E+034.27E+05 - 87M4 43.009.45E-037.28E-012.47E+026.66E+044.68E-032.03E+003.05E+021.94E+04 - 87M4 55.003.58E-032.10E-014.49E+018.97E+031.96E-035.91E-016.59E+013.36E+03 - 87M4 73.001.16E-035.03E-026.39E+009.16E+027.15E-041.43E-011.15E+014.56E+02 - 87M4 106.002.57E-047.73E-035.06E-014.75E+011.86E-042.23E-021.20E+003.40E+01 - 87M4 155.005.52E-051.17E-034.03E-022.48E+004.62E-053.39E-031.24E-012.54E+00 - 87M4 285.004.77E-066.04E-058.19E-042.57E-024.84E-061.70E-043.56E-034.46E-02 - 87M4 500.005.29E-074.37E-062.93E-054.84E-045.93E-071.13E-051.50E-041.26E-03 - 87M5 4.005.14E+019.83E+047.26E+095.09E+136.82E+001.57E+047.45E+092.31E+14 - 87M5 5.002.60E+013.13E+041.52E+097.19E+123.33E+005.14E+031.56E+093.14E+13 - 87M5 7.008.82E+005.60E+031.42E+083.82E+111.12E+009.60E+021.49E+081.56E+12 - 87M5 11.001.90E+005.59E+025.91E+067.64E+092.55E-011.01E+026.30E+062.83E+10 - 87M5 18.003.21E-014.55E+011.83E+051.13E+084.98E-028.69E+002.01E+053.69E+08 - 87M5 28.006.04E-024.75E+008.10E+032.69E+061.12E-029.73E-019.20E+037.82E+06 - 87M5 43.001.12E-025.24E-013.92E+027.41E+042.57E-031.18E-014.61E+021.94E+05 - 87M5 55.004.18E-031.47E-016.91E+019.60E+031.09E-033.55E-028.30E+012.39E+04 - 87M5 73.001.33E-033.39E-029.43E+009.27E+024.06E-049.00E-031.16E+012.21E+03 - 87M5 106.002.89E-044.92E-036.90E-014.37E+011.09E-041.51E-038.68E-011.00E+02 - 87M5 155.006.11E-056.97E-044.91E-022.02E+002.81E-052.55E-046.28E-024.57E+00 - 87M5 285.005.40E-063.32E-057.69E-041.59E-023.26E-061.63E-059.74E-043.71E-02 - 87M5 500.006.73E-072.43E-062.01E-052.14E-044.78E-071.51E-062.34E-055.17E-04 - 87N+ 50.004.23E-021.71E+011.10E+034.75E+041.44E+007.49E+014.59E+032.14E+05 - 87N+ 70.001.71E-023.36E+001.47E+024.20E+035.32E-011.63E+015.75E+021.72E+04 - 87N+ 100.006.69E-036.28E-011.87E+013.61E+021.90E-013.45E+007.06E+011.35E+03 - 87N+ 150.002.30E-039.77E-021.92E+002.48E+015.91E-026.30E-017.35E+008.66E+01 - 87N+ 200.001.10E-032.75E-024.04E-014.04E+002.60E-021.99E-011.62E+001.38E+01 - 87N+ 500.001.29E-048.47E-045.02E-032.37E-022.08E-037.40E-032.48E-028.69E-02 - 88K 104.923.36E-012.63E-015.23E-022.45E-031.16E+016.32E+016.83E+011.67E+01 - 88K 105.623.31E-012.68E-016.37E-025.46E-031.14E+016.17E+016.90E+012.01E+01 - 88K 106.923.22E-012.77E-018.54E-021.37E-021.10E+015.92E+017.02E+012.65E+01 - 88K 110.123.00E-012.94E-011.39E-014.81E-021.01E+015.36E+017.16E+014.12E+01 - 88K 113.922.77E-013.06E-012.01E-011.12E-019.15E+004.77E+017.12E+015.62E+01 - 88K 118.002.54E-013.13E-012.60E-011.99E-018.27E+004.23E+016.94E+016.88E+01 - 88K 124.002.26E-013.14E-013.33E-013.45E-017.18E+003.57E+016.52E+018.14E+01 - 88K 132.001.95E-013.05E-014.02E-015.38E-016.00E+002.89E+015.82E+018.88E+01 - 88K 144.001.58E-012.80E-014.56E-017.70E-014.69E+002.15E+014.78E+018.75E+01 - 88K 157.001.29E-012.50E-014.68E-019.21E-013.67E+001.60E+013.80E+017.83E+01 - 88K 174.001.01E-012.12E-014.46E-019.91E-012.74E+001.13E+012.81E+016.34E+01 - 88K 187.008.50E-021.86E-014.17E-019.80E-012.24E+008.88E+002.25E+015.28E+01 - 88K 204.006.92E-021.58E-013.73E-019.23E-011.75E+006.64E+001.70E+014.11E+01 - 88K 227.005.39E-021.28E-013.16E-018.13E-011.30E+004.66E+001.20E+012.94E+01 - 88K 255.004.12E-021.00E-012.57E-016.76E-019.41E-013.19E+008.08E+001.99E+01 - 88K 320.002.47E-026.27E-021.64E-014.32E-015.04E-011.54E+003.73E+008.93E+00 - 88K 405.001.49E-023.87E-021.00E-012.53E-012.66E-017.38E-011.68E+003.79E+00 - 88K 490.001.01E-022.65E-026.70E-021.62E-011.60E-014.15E-018.92E-011.90E+00 - 88K 600.006.75E-031.79E-024.37E-029.97E-029.33E-022.29E-014.64E-019.25E-01 - 88K 830.003.68E-039.84E-032.24E-024.65E-023.98E-029.19E-021.71E-013.07E-01 - 88K 1100.002.23E-035.92E-031.28E-022.45E-021.92E-024.31E-027.51E-021.25E-01 - 88K 1350.001.57E-034.11E-038.53E-031.56E-021.13E-022.53E-024.25E-026.75E-02 - 88K 1600.001.18E-033.04E-036.14E-031.08E-027.26E-031.64E-022.69E-024.13E-02 - 88L1 20.249.65E-012.18E+023.94E+037.65E+032.45E+023.31E+049.28E+056.09E+06 - 88L1 20.949.16E-011.87E+023.85E+031.30E+042.22E+022.82E+047.76E+055.74E+06 - 88L1 22.248.33E-011.42E+023.51E+032.04E+041.86E+022.13E+045.63E+054.90E+06 - 88L1 25.446.68E-017.57E+012.44E+032.54E+041.24E+021.14E+042.76E+052.96E+06 - 88L1 29.245.26E-013.91E+011.48E+032.06E+048.23E+016.00E+031.32E+051.57E+06 - 88L1 32.004.47E-012.54E+011.03E+031.60E+046.30E+013.97E+038.16E+049.99E+05 - 88L1 38.003.24E-011.11E+014.88E+028.53E+033.79E+011.82E+033.29E+044.07E+05 - 88L1 46.002.23E-014.41E+002.01E+023.69E+032.15E+017.76E+021.21E+041.43E+05 - 88L1 58.001.39E-011.50E+006.53E+011.19E+031.09E+012.81E+023.64E+033.93E+04 - 88L1 71.009.06E-026.32E-012.42E+014.19E+026.02E+001.18E+021.30E+031.26E+04 - 88L1 88.005.68E-022.83E-018.48E+001.35E+023.22E+004.76E+014.42E+023.77E+03 - 88L1 101.004.18E-021.80E-014.40E+006.46E+012.16E+002.70E+012.24E+021.75E+03 - 88L1 118.002.95E-021.15E-012.15E+002.84E+011.38E+001.43E+011.05E+027.41E+02 - 88L1 141.001.98E-027.15E-029.91E-011.13E+018.27E-017.07E+004.52E+012.81E+02 - 88L1 170.001.30E-024.52E-024.64E-014.44E+004.85E-013.43E+001.90E+011.04E+02 - 88L1 235.006.30E-032.13E-021.43E-019.81E-011.95E-011.02E+004.46E+001.95E+01 - 88L1 320.003.24E-031.07E-025.30E-022.68E-018.27E-023.42E-011.21E+004.29E+00 - 88L1 410.001.94E-036.32E-032.58E-021.05E-014.20E-021.48E-014.48E-011.36E+00 - 88L1 520.001.22E-033.87E-031.36E-024.58E-022.22E-026.86E-021.82E-014.80E-01 - 88L1 750.006.13E-041.88E-035.44E-031.45E-028.39E-032.24E-024.98E-021.09E-01 - 88L11000.003.69E-041.09E-032.80E-036.47E-033.95E-039.81E-031.95E-023.77E-02 - 88L11500.001.87E-045.21E-041.17E-032.30E-031.38E-033.27E-035.81E-039.77E-03 - 88L2 19.482.20E+009.64E+031.01E+061.33E+073.02E+011.37E+031.24E+042.14E+04 - 88L2 20.182.01E+008.11E+038.33E+051.23E+072.72E+011.20E+031.23E+043.65E+04 - 88L2 21.481.71E+005.97E+035.87E+051.02E+072.25E+019.52E+021.14E+045.75E+04 - 88L2 24.681.18E+003.03E+032.69E+055.71E+061.49E+015.69E+028.34E+037.32E+04 - 88L2 28.488.05E-011.51E+031.20E+052.81E+069.75E+003.34E+025.40E+036.13E+04 - 88L2 32.005.85E-018.59E+026.25E+041.51E+066.91E+002.16E+023.62E+034.57E+04 - 88L2 38.003.62E-013.75E+022.38E+045.71E+054.16E+001.14E+021.90E+032.58E+04 - 88L2 46.002.11E-011.50E+028.13E+031.86E+052.37E+005.56E+018.91E+021.21E+04 - 88L2 58.001.08E-015.02E+012.23E+034.62E+041.20E+002.34E+013.42E+024.38E+03 - 88L2 71.005.98E-021.95E+017.26E+021.35E+046.69E-011.11E+011.46E+021.71E+03 - 88L2 88.003.18E-027.21E+002.23E+023.64E+033.60E-015.02E+005.82E+016.13E+02 - 88L2 101.002.12E-023.84E+001.06E+021.57E+032.42E-013.04E+003.22E+013.13E+02 - 88L2 118.001.34E-021.90E+004.56E+016.12E+021.55E-011.72E+001.65E+011.46E+02 - 88L2 141.007.90E-038.58E-011.77E+012.10E+029.37E-029.08E-017.73E+006.09E+01 - 88L2 170.004.56E-033.77E-016.64E+006.88E+015.52E-024.66E-013.49E+002.43E+01 - 88L2 235.001.78E-039.42E-021.27E+001.05E+012.23E-021.50E-019.01E-015.07E+00 - 88L2 320.007.40E-042.63E-022.78E-011.85E+009.46E-035.20E-022.56E-011.18E+00 - 88L2 410.003.74E-049.82E-038.63E-024.87E-014.78E-032.27E-029.57E-023.77E-01 - 88L2 520.001.97E-043.95E-032.94E-021.43E-012.49E-031.04E-023.83E-021.31E-01 - 88L2 750.007.63E-051.04E-036.11E-032.41E-029.12E-043.26E-039.89E-032.78E-02 - 88L21000.003.76E-053.88E-041.93E-036.57E-034.15E-041.35E-033.59E-038.85E-03 - 88L21500.001.43E-051.06E-044.30E-041.23E-031.36E-044.03E-049.27E-041.95E-03 - 88L3 16.445.14E+002.44E+043.28E+065.58E+073.53E+005.69E+044.77E+074.61E+09 - 88L3 17.144.57E+001.98E+042.56E+064.84E+073.11E+004.62E+043.60E+073.35E+09 - 88L3 18.443.70E+001.37E+041.65E+063.57E+072.48E+003.21E+042.20E+071.92E+09 - 88L3 21.642.33E+006.10E+036.34E+051.61E+071.52E+001.45E+047.51E+065.70E+08 - 88L3 25.441.45E+002.70E+032.41E+056.50E+069.29E-016.46E+032.55E+061.68E+08 - 88L3 32.007.26E-018.53E+026.10E+041.63E+064.61E-012.06E+035.58E+053.00E+07 - 88L3 38.004.29E-013.60E+022.18E+045.54E+052.73E-018.76E+021.80E+058.33E+06 - 88L3 46.002.37E-011.38E+026.96E+031.63E+051.52E-013.39E+025.20E+042.03E+06 - 88L3 58.001.14E-014.33E+011.75E+033.58E+047.54E-021.07E+021.17E+043.73E+05 - 88L3 71.006.01E-021.58E+015.24E+029.44E+034.09E-023.93E+013.23E+038.65E+04 - 88L3 88.003.02E-025.45E+001.46E+022.27E+032.14E-021.36E+018.41E+021.87E+04 - 88L3 101.001.94E-022.76E+006.48E+019.10E+021.42E-026.88E+003.58E+027.11E+03 - 88L3 118.001.18E-021.28E+002.59E+013.23E+028.88E-033.20E+001.38E+022.41E+03 - 88L3 141.006.65E-035.37E-019.12E+009.93E+015.22E-031.33E+004.68E+017.09E+02 - 88L3 170.003.65E-032.16E-013.06E+002.89E+013.00E-035.32E-011.53E+012.00E+02 - 88L3 235.001.31E-034.57E-024.75E-013.48E+001.15E-031.10E-012.30E+002.37E+01 - 88L3 320.005.05E-041.07E-028.35E-024.84E-014.68E-042.48E-023.97E-013.30E+00 - 88L3 410.002.39E-043.45E-032.15E-021.04E-012.30E-047.61E-031.00E-017.13E-01 - 88L3 520.001.19E-041.20E-036.08E-032.52E-021.17E-042.49E-032.76E-021.71E-01 - 88L3 750.004.32E-052.58E-049.67E-043.22E-034.29E-054.70E-044.00E-032.06E-02 - 88L31000.002.03E-058.36E-052.55E-047.25E-042.02E-051.35E-049.21E-044.18E-03 - 88L31500.007.68E-061.99E-054.66E-051.08E-047.56E-062.71E-051.27E-044.84E-04 - 88M1 5.821.69E+001.15E+047.26E+051.35E+072.40E+033.85E+061.27E+099.86E+10 - 88M1 6.821.43E+005.90E+033.84E+059.47E+061.49E+031.77E+064.57E+083.35E+10 - 88M1 8.821.03E+001.98E+031.36E+053.75E+066.92E+025.04E+058.82E+075.69E+09 - 88M1 12.825.88E-013.97E+022.84E+048.61E+052.26E+028.24E+048.44E+064.28E+08 - 88M1 19.822.77E-015.83E+014.08E+031.28E+056.18E+011.03E+045.92E+052.16E+07 - 88M1 28.001.44E-011.23E+018.07E+022.39E+042.21E+012.04E+037.66E+042.11E+06 - 88M1 43.006.08E-021.73E+009.97E+012.56E+036.21E+002.86E+026.59E+031.27E+05 - 88M1 55.003.62E-025.79E-012.93E+016.74E+023.01E+009.52E+011.69E+032.63E+04 - 88M1 73.001.96E-021.78E-017.15E+001.42E+021.31E+002.77E+013.68E+024.50E+03 - 88M1 106.008.54E-034.65E-021.17E+001.81E+014.44E-015.75E+005.33E+014.75E+02 - 88M1 155.003.63E-031.53E-022.12E-012.39E+001.49E-011.25E+008.21E+005.35E+01 - 88M1 285.009.45E-043.41E-032.10E-021.29E-012.68E-021.27E-015.15E-012.10E+00 - 88M1 500.003.00E-041.00E-033.82E-031.40E-025.79E-031.89E-025.29E-021.48E-01 - 88M2 5.493.69E+001.28E+061.26E+091.55E+113.39E+021.42E+051.21E+072.09E+08 - 88M2 6.493.01E+005.59E+054.24E+084.95E+102.05E+026.66E+045.33E+061.48E+08 - 88M2 8.491.99E+001.48E+057.57E+077.76E+099.19E+012.01E+041.41E+065.14E+07 - 88M2 12.499.72E-012.19E+046.63E+065.38E+082.90E+013.73E+032.08E+057.88E+06 - 88M2 19.493.70E-012.47E+034.27E+052.55E+077.74E+005.66E+022.34E+047.61E+05 - 88M2 28.001.55E-014.24E+024.80E+042.19E+062.65E+001.28E+024.04E+031.08E+05 - 88M2 43.005.16E-025.40E+013.83E+031.26E+057.52E-012.29E+015.25E+021.07E+04 - 88M2 55.002.66E-021.68E+019.23E+022.49E+043.67E-018.75E+001.66E+022.83E+03 - 88M2 73.001.22E-024.48E+001.85E+023.98E+031.62E-012.95E+004.48E+016.22E+02 - 88M2 106.004.25E-038.11E-012.33E+013.72E+025.54E-027.24E-018.24E+008.67E+01 - 88M2 155.001.43E-031.49E-013.01E+003.56E+011.89E-021.80E-011.53E+001.21E+01 - 88M2 285.002.57E-041.12E-021.34E-019.99E-013.44E-032.10E-021.15E-015.89E-01 - 88M2 500.005.60E-051.21E-039.47E-034.83E-027.31E-043.19E-031.22E-024.36E-02 - 88M3 4.791.22E+013.18E+063.56E+094.82E+113.74E+017.70E+067.50E+108.33E+13 - 88M3 5.798.75E+001.23E+061.02E+091.25E+112.11E+012.99E+062.02E+101.64E+13 - 88M3 7.794.88E+002.77E+051.47E+081.52E+108.58E+006.79E+052.61E+091.33E+12 - 88M3 11.791.95E+003.46E+041.02E+078.01E+082.44E+008.57E+041.52E+084.17E+10 - 88M3 18.796.17E-013.33E+035.35E+053.01E+075.94E-018.38E+036.37E+069.26E+08 - 88M3 28.002.12E-014.50E+024.47E+041.86E+061.77E-011.15E+034.38E+053.86E+07 - 88M3 43.006.27E-025.26E+013.21E+039.55E+044.85E-021.36E+022.58E+041.38E+06 - 88M3 55.003.03E-021.54E+017.20E+021.76E+042.31E-023.99E+015.21E+032.14E+05 - 88M3 73.001.28E-023.78E+001.31E+022.53E+039.87E-039.81E+008.50E+022.61E+04 - 88M3 106.004.06E-036.00E-011.41E+012.01E+023.24E-031.55E+008.20E+011.76E+03 - 88M3 155.001.24E-039.38E-021.50E+001.56E+011.05E-032.39E-018.06E+001.23E+02 - 88M3 285.001.89E-045.12E-034.52E-022.90E-011.77E-041.23E-022.27E-012.14E+00 - 88M3 500.003.57E-053.98E-042.11E-039.04E-033.56E-058.51E-049.98E-036.52E-02 - 88M4 4.253.19E+019.46E+043.02E+092.54E+131.16E+012.55E+051.23E+095.76E+11 - 88M4 5.251.69E+013.24E+046.86E+084.00E+125.86E+008.84E+042.94E+081.17E+11 - 88M4 7.256.10E+006.32E+037.12E+072.42E+112.06E+001.75E+043.38E+071.04E+10 - 88M4 11.251.41E+006.86E+023.25E+065.54E+094.86E-011.93E+031.85E+063.89E+08 - 88M4 18.252.55E-015.99E+011.09E+059.13E+079.64E-021.70E+027.90E+041.09E+07 - 88M4 28.005.21E-026.91E+005.42E+032.54E+062.24E-021.97E+015.09E+034.76E+05 - 88M4 43.001.00E-027.94E-012.72E+027.39E+045.05E-032.28E+003.41E+022.16E+04 - 88M4 55.003.82E-032.29E-014.93E+019.95E+032.12E-036.64E-017.38E+013.74E+03 - 88M4 73.001.24E-035.51E-027.03E+001.02E+037.74E-041.61E-011.29E+015.08E+02 - 88M4 106.002.75E-048.48E-035.57E-015.27E+012.01E-042.51E-021.34E+003.79E+01 - 88M4 155.005.93E-051.28E-034.43E-022.75E+005.02E-053.81E-031.39E-012.83E+00 - 88M4 285.005.23E-066.66E-059.02E-042.86E-025.27E-061.92E-043.99E-034.99E-02 - 88M4 500.005.78E-074.82E-063.23E-055.39E-046.47E-071.27E-051.69E-041.42E-03 - 88M5 4.104.90E+019.13E+046.68E+094.52E+136.66E+001.49E+047.05E+092.11E+14 - 88M5 5.102.51E+012.99E+041.44E+096.68E+123.30E+005.03E+031.53E+093.01E+13 - 88M5 7.108.70E+005.51E+031.42E+083.73E+111.13E+009.67E+021.52E+081.58E+12 - 88M5 11.101.91E+005.65E+026.10E+067.83E+092.63E-011.04E+026.68E+062.99E+10 - 88M5 18.103.30E-014.69E+011.94E+051.19E+085.21E-029.15E+002.19E+054.03E+08 - 88M5 28.006.36E-025.05E+008.95E+032.98E+061.20E-021.05E+001.04E+048.97E+06 - 88M5 43.001.19E-025.58E-014.34E+028.20E+042.75E-031.28E-015.23E+022.23E+05 - 88M5 55.004.44E-031.57E-017.64E+011.06E+041.17E-033.84E-029.40E+012.74E+04 - 88M5 73.001.41E-033.62E-021.04E+011.02E+034.35E-049.74E-031.31E+012.52E+03 - 88M5 106.003.08E-045.26E-037.64E-014.83E+011.17E-041.64E-039.83E-011.14E+02 - 88M5 155.006.55E-057.48E-045.43E-022.23E+003.02E-052.76E-047.10E-025.19E+00 - 88M5 285.005.81E-063.58E-058.49E-041.76E-023.51E-061.76E-051.10E-034.21E-02 - 88M5 500.007.26E-072.62E-062.21E-052.36E-045.15E-071.63E-062.63E-055.84E-04 - 88N+ 50.004.41E-021.90E+011.22E+035.28E+041.61E+008.42E+015.23E+032.46E+05 - 88N+ 70.001.79E-023.74E+001.63E+024.65E+035.95E-011.83E+016.53E+021.97E+04 - 88N+ 100.007.00E-036.99E-012.08E+013.99E+022.13E-013.86E+007.98E+011.53E+03 - 88N+ 150.002.42E-031.09E-012.13E+002.75E+016.61E-027.04E-018.26E+009.77E+01 - 88N+ 200.001.16E-033.06E-024.50E-014.48E+002.90E-022.22E-011.82E+001.55E+01 - 88N+ 500.001.37E-049.33E-045.59E-032.64E-022.32E-038.22E-032.75E-029.66E-02 - 89K 107.753.19E-012.41E-014.77E-022.22E-031.17E+016.13E+016.40E+011.53E+01 - 89K 108.453.14E-012.46E-015.78E-024.88E-031.15E+015.99E+016.47E+011.83E+01 - 89K 109.753.05E-012.54E-017.72E-021.21E-021.11E+015.75E+016.57E+012.39E+01 - 89K 112.952.86E-012.70E-011.25E-014.22E-021.02E+015.22E+016.71E+013.70E+01 - 89K 116.752.64E-012.81E-011.80E-019.78E-029.30E+004.66E+016.69E+015.05E+01 - 89K 121.002.42E-012.88E-012.36E-011.78E-018.40E+004.13E+016.54E+016.25E+01 - 89K 127.002.16E-012.90E-013.03E-013.08E-017.31E+003.50E+016.16E+017.40E+01 - 89K 135.001.87E-012.83E-013.67E-014.82E-016.14E+002.85E+015.53E+018.11E+01 - 89K 147.001.53E-012.62E-014.19E-016.97E-014.82E+002.13E+014.58E+018.08E+01 - 89K 160.001.25E-012.36E-014.35E-018.42E-013.79E+001.60E+013.67E+017.30E+01 - 89K 177.009.85E-022.01E-014.20E-019.18E-012.85E+001.14E+012.74E+015.99E+01 - 89K 190.008.34E-021.78E-013.95E-019.16E-012.33E+009.00E+002.21E+015.02E+01 - 89K 207.006.82E-021.52E-013.57E-018.72E-011.83E+006.76E+001.68E+013.95E+01 - 89K 230.005.34E-021.24E-013.06E-017.77E-011.37E+004.78E+001.19E+012.86E+01 - 89K 255.004.22E-021.01E-012.57E-016.67E-011.03E+003.41E+008.46E+002.04E+01 - 89K 320.002.54E-026.38E-021.67E-014.35E-015.49E-011.65E+003.93E+009.23E+00 - 89K 405.001.53E-023.98E-021.03E-012.59E-012.90E-017.92E-011.78E+003.95E+00 - 89K 500.009.98E-032.63E-026.64E-021.59E-011.65E-014.20E-018.86E-011.85E+00 - 89K 610.006.76E-031.81E-024.40E-029.94E-029.70E-022.35E-014.68E-019.19E-01 - 89K 840.003.74E-031.01E-022.29E-024.73E-024.19E-029.56E-021.75E-013.13E-01 - 89K 1100.002.32E-036.21E-031.34E-022.57E-022.07E-024.63E-028.01E-021.33E-01 - 89K 1350.001.63E-034.32E-038.99E-031.64E-021.22E-022.72E-024.54E-027.18E-02 - 89K 1600.001.23E-033.19E-036.47E-031.14E-027.84E-031.76E-022.87E-024.40E-02 - 89L1 20.849.09E-012.08E+023.60E+036.73E+032.48E+023.19E+048.60E+055.46E+06 - 89L1 21.548.64E-011.79E+023.53E+031.14E+042.25E+022.73E+047.22E+055.16E+06 - 89L1 22.847.88E-011.37E+023.23E+031.78E+041.89E+022.08E+045.29E+054.43E+06 - 89L1 26.046.37E-017.48E+012.28E+032.26E+041.28E+021.13E+042.64E+052.73E+06 - 89L1 29.845.04E-013.94E+011.42E+031.87E+048.55E+016.03E+031.28E+051.47E+06 - 89L1 33.004.21E-012.45E+019.48E+021.42E+046.35E+013.81E+037.53E+048.94E+05 - 89L1 39.003.09E-011.10E+014.61E+027.77E+033.87E+011.79E+033.12E+043.74E+05 - 89L1 47.002.15E-014.53E+001.95E+023.46E+032.23E+017.78E+021.18E+041.36E+05 - 89L1 59.001.35E-011.59E+006.56E+011.15E+031.14E+012.87E+023.63E+033.82E+04 - 89L1 72.008.89E-026.79E-012.48E+014.17E+026.38E+001.22E+021.31E+031.25E+04 - 89L1 89.005.62E-023.04E-018.91E+001.37E+023.44E+004.99E+014.55E+023.81E+03 - 89L1 102.004.16E-021.93E-014.68E+006.67E+012.32E+002.84E+012.32E+021.79E+03 - 89L1 119.002.95E-021.22E-012.31E+002.97E+011.48E+001.52E+011.10E+027.64E+02 - 89L1 142.001.99E-027.54E-021.07E+001.20E+018.94E-017.54E+004.75E+012.92E+02 - 89L1 170.001.33E-024.80E-025.13E-014.88E+005.35E-013.75E+002.06E+011.12E+02 - 89L1 235.006.49E-032.25E-021.56E-011.08E+002.15E-011.12E+004.85E+002.10E+01 - 89L1 320.003.34E-031.13E-025.75E-022.93E-019.11E-023.74E-011.31E+004.64E+00 - 89L1 410.002.01E-036.68E-032.78E-021.14E-014.63E-021.62E-014.87E-011.47E+00 - 89L1 520.001.26E-034.10E-031.46E-024.96E-022.44E-027.50E-021.97E-015.19E-01 - 89L1 750.006.40E-042.00E-035.83E-031.57E-029.21E-032.45E-025.41E-021.18E-01 - 89L11000.003.86E-041.16E-033.00E-036.96E-034.32E-031.07E-022.12E-024.07E-02 - 89L11500.001.96E-045.53E-041.25E-032.47E-031.50E-033.56E-036.30E-031.06E-02 - 89L2 20.082.08E+009.03E+039.11E+051.15E+073.07E+011.32E+031.15E+041.90E+04 - 89L2 20.781.91E+007.64E+037.53E+051.07E+072.77E+011.16E+031.14E+043.23E+04 - 89L2 22.081.63E+005.67E+035.36E+058.90E+062.32E+019.27E+021.06E+045.09E+04 - 89L2 25.281.14E+002.93E+032.51E+055.12E+061.55E+015.62E+027.88E+036.58E+04 - 89L2 29.087.84E-011.49E+031.15E+052.58E+061.02E+013.34E+025.19E+035.63E+04 - 89L2 33.005.55E-018.06E+025.64E+041.31E+067.04E+002.09E+023.36E+034.12E+04 - 89L2 39.003.49E-013.61E+022.21E+045.13E+054.30E+001.12E+021.81E+032.37E+04 - 89L2 47.002.06E-011.48E+027.76E+031.72E+052.48E+005.58E+018.64E+021.14E+04 - 89L2 59.001.07E-015.05E+012.18E+034.41E+041.28E+002.39E+013.39E+024.23E+03 - 89L2 72.006.01E-021.99E+017.26E+021.32E+047.18E-011.15E+011.47E+021.69E+03 - 89L2 89.003.23E-027.47E+002.27E+023.63E+033.89E-015.27E+005.96E+016.14E+02 - 89L2 102.002.16E-024.01E+001.08E+021.59E+032.63E-013.20E+003.33E+013.17E+02 - 89L2 119.001.37E-022.00E+004.73E+016.24E+021.70E-011.83E+001.72E+011.50E+02 - 89L2 142.008.18E-039.10E-011.85E+012.16E+021.03E-019.71E-018.12E+006.30E+01 - 89L2 170.004.83E-034.13E-017.22E+007.43E+016.19E-025.12E-013.79E+002.62E+01 - 89L2 235.001.89E-031.03E-011.39E+001.13E+012.50E-021.65E-019.82E-015.48E+00 - 89L2 320.007.91E-042.89E-023.05E-012.01E+001.06E-025.74E-022.80E-011.28E+00 - 89L2 410.004.01E-041.08E-029.47E-025.32E-015.37E-032.51E-021.05E-014.11E-01 - 89L2 520.002.13E-044.35E-033.23E-021.56E-012.80E-031.16E-024.21E-021.43E-01 - 89L2 750.008.28E-051.15E-036.74E-032.65E-021.03E-033.63E-031.09E-023.06E-02 - 89L21000.004.06E-054.29E-042.14E-037.24E-034.68E-041.50E-033.98E-039.76E-03 - 89L21500.001.56E-051.17E-044.77E-041.36E-031.53E-044.51E-041.03E-032.17E-03 - 89L3 16.874.88E+002.30E+042.98E+064.92E+073.45E+005.54E+044.48E+074.20E+09 - 89L3 17.574.35E+001.87E+042.34E+064.28E+073.05E+004.52E+043.41E+073.08E+09 - 89L3 18.873.55E+001.31E+041.52E+063.19E+072.45E+003.17E+042.10E+071.79E+09 - 89L3 22.072.25E+005.94E+035.98E+051.47E+071.51E+001.45E+047.35E+065.44E+08 - 89L3 25.871.41E+002.67E+032.31E+056.03E+069.32E-016.58E+032.54E+061.64E+08 - 89L3 33.006.80E-017.85E+025.38E+041.39E+064.43E-011.96E+035.07E+052.64E+07 - 89L3 39.004.08E-013.39E+021.98E+044.88E+052.66E-018.52E+021.69E+057.60E+06 - 89L3 47.002.29E-011.33E+026.50E+031.47E+051.51E-013.37E+025.03E+041.92E+06 - 89L3 59.001.12E-014.27E+011.67E+033.35E+047.57E-021.09E+021.16E+043.64E+05 - 89L3 72.005.95E-021.58E+015.11E+029.01E+034.14E-024.06E+013.28E+038.63E+04 - 89L3 89.003.02E-025.54E+001.46E+022.21E+032.19E-021.42E+018.69E+021.91E+04 - 89L3 102.001.95E-022.82E+006.50E+018.95E+021.45E-027.25E+003.73E+027.31E+03 - 89L3 119.001.19E-021.32E+002.62E+013.22E+029.15E-033.39E+001.45E+022.50E+03 - 89L3 142.006.76E-035.57E-019.30E+009.98E+015.40E-031.42E+004.96E+017.44E+02 - 89L3 170.003.81E-032.32E-013.26E+003.04E+013.16E-035.88E-011.69E+012.20E+02 - 89L3 235.001.37E-034.91E-025.06E-013.68E+001.22E-031.21E-012.54E+002.60E+01 - 89L3 320.005.28E-041.15E-028.89E-025.12E-014.95E-042.73E-024.37E-013.63E+00 - 89L3 410.002.50E-043.70E-032.29E-021.10E-012.42E-048.37E-031.10E-017.83E-01 - 89L3 520.001.25E-041.29E-036.48E-032.67E-021.24E-042.74E-033.03E-021.88E-01 - 89L3 750.004.53E-052.75E-041.03E-033.42E-034.52E-055.13E-044.39E-032.26E-02 - 89L31000.002.13E-058.90E-052.71E-047.73E-042.12E-051.47E-041.01E-034.58E-03 - 89L31500.008.06E-062.11E-054.95E-051.15E-047.93E-062.92E-051.38E-045.29E-04 - 89M1 6.001.59E+001.11E+046.94E+051.21E+072.42E+033.69E+061.17E+098.77E+10 - 89M1 7.001.35E+005.81E+033.73E+058.78E+061.53E+031.74E+064.33E+083.07E+10 - 89M1 9.009.88E-012.00E+031.34E+053.63E+067.21E+025.09E+058.68E+075.44E+09 - 89M1 13.005.69E-014.13E+022.87E+048.53E+052.41E+028.58E+048.64E+064.28E+08 - 89M1 20.002.71E-016.24E+014.23E+031.29E+056.66E+011.10E+046.24E+052.24E+07 - 89M1 28.001.44E-011.38E+018.76E+022.54E+042.45E+012.26E+038.50E+042.33E+06 - 89M1 43.006.13E-021.98E+001.10E+022.76E+036.88E+003.17E+027.29E+031.39E+05 - 89M1 55.003.66E-026.63E-013.24E+017.31E+023.33E+001.05E+021.86E+032.89E+04 - 89M1 73.001.99E-022.02E-017.97E+001.55E+021.45E+003.06E+014.05E+024.93E+03 - 89M1 106.008.71E-035.17E-021.31E+002.00E+014.91E-016.35E+005.86E+015.20E+02 - 89M1 155.003.72E-031.65E-022.37E-012.65E+001.65E-011.37E+009.01E+005.85E+01 - 89M1 285.009.77E-043.63E-032.31E-021.42E-012.96E-021.39E-015.63E-012.29E+00 - 89M1 500.003.12E-041.06E-034.14E-031.53E-026.39E-032.07E-025.78E-021.62E-01 - 89M2 5.663.47E+001.21E+061.13E+091.36E+113.47E+021.38E+051.13E+071.88E+08 - 89M2 6.662.85E+005.39E+053.95E+084.47E+102.13E+026.59E+045.10E+061.36E+08 - 89M2 8.661.92E+001.47E+057.32E+077.30E+099.71E+012.04E+041.39E+064.88E+07 - 89M2 12.669.53E-012.25E+046.67E+065.30E+083.13E+013.89E+032.12E+057.79E+06 - 89M2 19.663.70E-012.59E+034.42E+052.60E+078.45E+006.02E+022.43E+047.76E+05 - 89M2 28.001.59E-014.64E+025.23E+042.36E+062.97E+001.40E+024.39E+031.16E+05 - 89M2 43.005.34E-025.91E+014.17E+031.36E+058.43E-012.52E+015.70E+021.15E+04 - 89M2 55.002.77E-021.84E+011.01E+032.69E+044.11E-019.63E+001.80E+023.05E+03 - 89M2 73.001.27E-024.91E+002.01E+024.31E+031.81E-013.24E+004.87E+016.71E+02 - 89M2 106.004.47E-038.90E-012.54E+014.04E+026.23E-027.98E-018.98E+009.38E+01 - 89M2 155.001.52E-031.64E-013.29E+003.88E+012.12E-021.99E-011.67E+001.32E+01 - 89M2 285.002.75E-041.23E-021.47E-011.09E+003.88E-032.32E-021.26E-016.44E-01 - 89M2 500.006.03E-051.34E-031.05E-025.30E-028.26E-043.55E-031.35E-024.79E-02 - 89M3 4.911.18E+013.04E+063.28E+094.33E+113.68E+017.59E+067.15E+107.73E+13 - 89M3 5.918.46E+001.20E+069.67E+081.16E+112.10E+013.01E+061.98E+101.58E+13 - 89M3 7.914.77E+002.77E+051.44E+081.45E+108.69E+007.01E+052.65E+091.33E+12 - 89M3 11.911.93E+003.55E+041.03E+077.93E+082.51E+009.08E+041.60E+084.36E+10 - 89M3 18.916.19E-013.48E+035.53E+053.06E+076.18E-019.04E+036.87E+069.95E+08 - 89M3 28.002.17E-014.86E+024.80E+041.97E+061.88E-011.28E+034.92E+054.35E+07 - 89M3 43.006.46E-025.69E+013.44E+031.01E+055.14E-021.51E+022.89E+041.55E+06 - 89M3 55.003.13E-021.67E+017.70E+021.86E+042.45E-024.44E+015.83E+032.40E+05 - 89M3 73.001.33E-024.09E+001.40E+022.68E+031.05E-021.09E+019.50E+022.91E+04 - 89M3 106.004.23E-036.48E-011.50E+012.13E+023.44E-031.72E+009.14E+011.95E+03 - 89M3 155.001.30E-031.01E-011.60E+001.66E+011.11E-032.66E-018.97E+001.37E+02 - 89M3 285.001.98E-045.52E-034.84E-023.08E-011.88E-041.37E-022.52E-012.37E+00 - 89M3 500.003.78E-054.28E-042.26E-039.65E-033.77E-059.40E-041.10E-027.20E-02 - 89M4 4.373.02E+018.88E+042.71E+092.21E+131.13E+012.48E+051.14E+095.19E+11 - 89M4 5.371.62E+013.13E+046.40E+083.65E+125.81E+008.83E+042.84E+081.10E+11 - 89M4 7.375.99E+006.30E+036.93E+072.34E+112.08E+001.81E+043.41E+071.02E+10 - 89M4 11.371.41E+007.05E+023.30E+065.62E+095.02E-012.05E+031.93E+064.00E+08 - 89M4 18.372.61E-016.29E+011.14E+059.59E+071.01E-011.84E+028.48E+041.15E+07 - 89M4 28.005.50E-027.52E+005.94E+032.82E+062.41E-022.21E+015.70E+035.30E+05 - 89M4 43.001.07E-028.66E-012.98E+028.19E+045.44E-032.56E+003.82E+022.41E+04 - 89M4 55.004.06E-032.50E-015.41E+011.10E+042.29E-037.46E-018.25E+014.17E+03 - 89M4 73.001.32E-036.02E-027.71E+001.13E+038.36E-041.81E-011.44E+015.65E+02 - 89M4 106.002.95E-049.29E-036.11E-015.84E+012.18E-042.82E-021.50E+004.22E+01 - 89M4 155.006.37E-051.41E-034.86E-023.05E+005.45E-054.29E-031.55E-013.15E+00 - 89M4 285.005.63E-067.34E-059.91E-043.18E-025.74E-062.16E-044.48E-035.58E-02 - 89M4 500.006.34E-075.32E-063.55E-056.00E-047.05E-071.42E-051.90E-041.59E-03 - 89M5 4.224.64E+018.41E+046.08E+093.96E+136.47E+001.41E+046.60E+091.90E+14 - 89M5 5.222.42E+012.83E+041.36E+096.13E+123.27E+004.88E+031.49E+092.84E+13 - 89M5 7.228.55E+005.38E+031.40E+083.61E+111.14E+009.67E+021.54E+081.58E+12 - 89M5 11.221.92E+005.69E+026.27E+067.95E+092.71E-011.07E+027.05E+063.14E+10 - 89M5 18.223.37E-014.82E+012.05E+051.25E+085.43E-029.60E+002.38E+054.38E+08 - 89M5 28.006.70E-025.37E+009.89E+033.30E+061.28E-021.14E+001.18E+041.03E+07 - 89M5 43.001.26E-025.94E-014.79E+029.06E+042.94E-031.38E-015.92E+022.55E+05 - 89M5 55.004.70E-031.67E-018.45E+011.17E+041.25E-034.15E-021.07E+023.13E+04 - 89M5 73.001.50E-033.87E-021.15E+011.13E+034.66E-041.05E-021.48E+012.88E+03 - 89M5 106.003.29E-045.63E-038.44E-015.34E+011.25E-041.77E-031.11E+001.30E+02 - 89M5 155.007.01E-058.02E-046.00E-022.46E+003.25E-052.98E-048.03E-025.90E+00 - 89M5 285.006.19E-063.86E-059.37E-041.94E-023.78E-061.91E-051.24E-034.76E-02 - 89M5 500.007.59E-072.83E-062.43E-052.61E-045.54E-071.76E-062.94E-056.60E-04 - 89N+ 50.004.59E-022.08E+011.33E+035.86E+041.81E+009.48E+015.92E+032.80E+05 - 89N+ 70.001.87E-024.11E+001.79E+025.14E+036.70E-012.05E+017.36E+022.23E+04 - 89N+ 100.007.32E-037.69E-012.28E+014.39E+022.39E-014.33E+008.96E+011.73E+03 - 89N+ 150.002.54E-031.20E-012.34E+003.02E+017.43E-027.88E-019.25E+001.10E+02 - 89N+ 200.001.22E-033.37E-024.95E-014.92E+003.26E-022.48E-012.03E+001.74E+01 - 89N+ 500.001.45E-041.02E-036.19E-032.92E-022.60E-039.17E-033.06E-021.07E-01 - 90K 110.653.03E-012.22E-014.37E-022.02E-031.18E+015.94E+016.00E+011.39E+01 - 90K 111.352.98E-012.26E-015.27E-024.38E-031.16E+015.80E+016.06E+011.66E+01 - 90K 112.652.90E-012.33E-016.99E-021.07E-021.12E+015.58E+016.16E+012.16E+01 - 90K 115.852.72E-012.48E-011.13E-013.71E-021.04E+015.08E+016.29E+013.33E+01 - 90K 119.652.52E-012.59E-011.62E-018.59E-029.45E+004.55E+016.29E+014.54E+01 - 90K 124.002.31E-012.66E-012.14E-011.59E-018.53E+004.03E+016.15E+015.65E+01 - 90K 130.002.07E-012.69E-012.75E-012.75E-017.45E+003.44E+015.82E+016.71E+01 - 90K 138.001.80E-012.63E-013.35E-014.32E-016.29E+002.81E+015.26E+017.41E+01 - 90K 150.001.48E-012.46E-013.87E-016.31E-014.96E+002.12E+014.39E+017.45E+01 - 90K 163.001.22E-012.23E-014.05E-017.71E-013.92E+001.60E+013.55E+016.81E+01 - 90K 180.009.63E-021.92E-013.95E-018.51E-012.96E+001.15E+012.68E+015.65E+01 - 90K 193.008.18E-021.71E-013.75E-018.58E-012.43E+009.12E+002.17E+014.78E+01 - 90K 210.006.72E-021.47E-013.42E-018.24E-011.92E+006.89E+001.67E+013.80E+01 - 90K 233.005.29E-021.21E-012.96E-017.44E-011.44E+004.90E+001.19E+012.78E+01 - 90K 260.004.13E-029.80E-022.48E-016.37E-011.06E+003.43E+008.28E+001.95E+01 - 90K 325.002.52E-026.30E-021.64E-014.24E-015.73E-011.68E+003.92E+009.01E+00 - 90K 410.001.54E-023.99E-021.03E-012.57E-013.05E-018.18E-011.80E+003.93E+00 - 90K 500.001.03E-022.73E-026.87E-021.64E-011.79E-014.50E-019.39E-011.94E+00 - 90K 610.006.99E-031.88E-024.57E-021.03E-011.05E-012.52E-014.97E-019.67E-01 - 90K 840.003.87E-031.05E-022.40E-024.94E-024.54E-021.03E-011.87E-013.30E-01 - 90K 1100.002.41E-036.51E-031.41E-022.70E-022.24E-024.98E-028.55E-021.41E-01 - 90K 1350.001.70E-034.53E-039.47E-031.73E-021.32E-022.92E-024.84E-027.63E-02 - 90K 1600.001.28E-033.36E-036.82E-031.20E-028.45E-031.89E-023.07E-024.68E-02 - 90L1 21.478.54E-011.98E+023.27E+035.90E+032.51E+023.06E+047.92E+054.86E+06 - 90L1 22.178.13E-011.71E+023.21E+039.89E+032.28E+022.63E+046.69E+054.60E+06 - 90L1 23.477.44E-011.32E+022.96E+031.55E+041.92E+022.02E+044.95E+053.98E+06 - 90L1 26.676.05E-017.36E+012.13E+032.00E+041.32E+021.12E+042.52E+052.50E+06 - 90L1 30.474.82E-013.96E+011.35E+031.70E+048.87E+016.04E+031.25E+051.38E+06 - 90L1 34.003.97E-012.37E+018.74E+021.27E+046.41E+013.67E+036.98E+048.02E+05 - 90L1 40.002.94E-011.10E+014.36E+027.09E+033.96E+011.76E+032.97E+043.44E+05 - 90L1 48.002.06E-014.66E+001.90E+023.24E+032.31E+017.80E+021.15E+041.28E+05 - 90L1 60.001.31E-011.68E+006.58E+011.12E+031.20E+012.93E+023.62E+033.72E+04 - 90L1 73.008.71E-027.29E-012.55E+014.14E+026.76E+001.26E+021.33E+031.24E+04 - 90L1 90.005.55E-023.28E-019.35E+001.39E+023.67E+005.23E+014.68E+023.85E+03 - 90L1 103.004.13E-022.08E-014.96E+006.87E+012.48E+003.00E+012.41E+021.82E+03 - 90L1 120.002.95E-021.30E-012.47E+003.10E+011.60E+001.61E+011.15E+027.86E+02 - 90L1 143.002.00E-027.98E-021.15E+001.26E+019.66E-018.04E+005.00E+013.04E+02 - 90L1 170.001.36E-025.13E-025.68E-015.36E+005.90E-014.11E+002.24E+011.21E+02 - 90L1 235.006.66E-032.38E-021.71E-011.18E+002.36E-011.22E+005.27E+002.27E+01 - 90L1 320.003.45E-031.20E-026.24E-023.20E-011.00E-014.09E-011.43E+005.01E+00 - 90L1 410.002.08E-037.06E-033.00E-021.24E-015.09E-021.77E-015.29E-011.59E+00 - 90L1 520.001.31E-034.34E-031.57E-025.37E-022.68E-028.18E-022.14E-015.62E-01 - 90L1 750.006.68E-042.12E-036.25E-031.69E-021.01E-022.67E-025.87E-021.27E-01 - 90L11000.004.04E-041.23E-033.21E-037.48E-034.73E-031.17E-022.30E-024.41E-02 - 90L11500.002.05E-045.88E-041.34E-032.65E-031.64E-033.88E-036.84E-031.14E-02 - 90L2 20.691.97E+008.48E+038.20E+051.00E+073.13E+011.27E+031.07E+041.70E+04 - 90L2 21.391.81E+007.21E+036.82E+059.33E+062.84E+011.12E+031.06E+042.86E+04 - 90L2 22.691.55E+005.40E+034.90E+057.82E+062.38E+019.03E+029.89E+034.51E+04 - 90L2 25.891.10E+002.84E+032.35E+054.59E+061.61E+015.55E+027.45E+035.93E+04 - 90L2 29.697.64E-011.46E+031.09E+052.36E+061.07E+013.34E+024.98E+035.17E+04 - 90L2 34.005.28E-017.59E+025.11E+041.15E+067.19E+002.02E+023.14E+033.72E+04 - 90L2 40.003.37E-013.48E+022.06E+044.62E+054.45E+001.10E+021.72E+032.18E+04 - 90L2 48.002.02E-011.46E+027.42E+031.60E+052.61E+005.60E+018.39E+021.07E+04 - 90L2 60.001.06E-015.08E+012.14E+034.22E+041.36E+002.45E+013.37E+024.09E+03 - 90L2 73.006.04E-022.03E+017.26E+021.29E+047.71E-011.19E+011.48E+021.66E+03 - 90L2 90.003.28E-027.75E+002.31E+023.62E+034.22E-015.52E+006.10E+016.16E+02 - 90L2 103.002.21E-024.19E+001.11E+021.60E+032.87E-013.38E+003.44E+013.22E+02 - 90L2 120.001.41E-022.10E+004.91E+016.37E+021.86E-011.95E+001.79E+011.53E+02 - 90L2 143.008.47E-039.65E-011.94E+012.23E+021.13E-011.04E+008.53E+006.52E+01 - 90L2 170.005.12E-034.52E-017.86E+008.02E+016.94E-025.62E-014.11E+002.81E+01 - 90L2 235.002.02E-031.13E-011.51E+001.23E+012.81E-021.82E-011.07E+005.92E+00 - 90L2 320.008.47E-043.18E-023.33E-012.19E+001.19E-026.34E-023.06E-011.39E+00 - 90L2 410.004.30E-041.19E-021.04E-015.80E-016.05E-032.78E-021.15E-014.48E-01 - 90L2 520.002.29E-044.80E-033.55E-021.71E-013.15E-031.28E-024.64E-021.57E-01 - 90L2 750.008.96E-051.27E-037.43E-032.91E-021.16E-034.04E-031.21E-023.36E-02 - 90L21000.004.41E-054.75E-042.36E-037.98E-035.28E-041.68E-034.41E-031.08E-02 - 90L21500.001.70E-051.30E-045.29E-041.50E-031.73E-045.04E-041.15E-032.40E-03 - 90L3 17.304.65E+002.18E+042.71E+064.36E+073.37E+005.41E+044.22E+073.84E+09 - 90L3 18.004.15E+001.78E+042.14E+063.80E+072.99E+004.44E+043.23E+072.84E+09 - 90L3 19.303.40E+001.25E+041.41E+062.85E+072.41E+003.13E+042.02E+071.67E+09 - 90L3 22.502.18E+005.79E+035.64E+051.34E+071.51E+001.46E+047.20E+065.21E+08 - 90L3 26.301.38E+002.64E+032.22E+055.61E+069.36E-016.70E+032.54E+061.60E+08 - 90L3 34.006.38E-017.25E+024.77E+041.20E+064.27E-011.87E+034.64E+052.33E+07 - 90L3 40.003.88E-013.21E+021.81E+044.31E+052.60E-018.31E+021.60E+056.96E+06 - 90L3 48.002.21E-011.29E+026.07E+031.34E+051.49E-013.36E+024.88E+041.81E+06 - 90L3 60.001.10E-014.22E+011.61E+033.13E+047.59E-021.11E+021.16E+043.55E+05 - 90L3 73.005.89E-021.59E+015.00E+028.62E+034.19E-024.19E+013.34E+038.63E+04 - 90L3 90.003.02E-025.63E+001.45E+022.16E+032.23E-021.49E+018.98E+021.94E+04 - 90L3 103.001.96E-022.89E+006.51E+018.81E+021.49E-027.63E+003.89E+027.52E+03 - 90L3 120.001.20E-021.36E+002.65E+013.20E+029.42E-033.59E+001.52E+022.60E+03 - 90L3 143.006.88E-035.78E-019.49E+001.00E+025.58E-031.52E+005.26E+017.80E+02 - 90L3 170.003.96E-032.49E-013.47E+003.21E+013.34E-036.49E-011.87E+012.42E+02 - 90L3 235.001.43E-035.27E-025.38E-013.88E+001.28E-031.34E-012.80E+002.86E+01 - 90L3 320.005.51E-041.23E-029.47E-025.42E-015.22E-043.01E-024.82E-013.98E+00 - 90L3 410.002.61E-043.96E-032.44E-021.17E-012.56E-049.20E-031.21E-018.59E-01 - 90L3 520.001.31E-041.38E-036.91E-032.84E-021.30E-043.00E-033.34E-022.06E-01 - 90L3 750.004.73E-052.93E-041.10E-033.64E-034.75E-055.61E-044.82E-032.47E-02 - 90L31000.002.22E-059.47E-052.88E-048.23E-042.23E-051.60E-041.11E-035.01E-03 - 90L31500.008.43E-062.23E-055.26E-051.23E-048.31E-063.15E-051.51E-045.79E-04 - 90M1 6.181.50E+001.08E+046.67E+051.09E+072.46E+033.56E+061.09E+097.85E+10 - 90M1 7.181.28E+005.73E+033.63E+058.19E+061.57E+031.71E+064.12E+082.83E+10 - 90M1 9.189.44E-012.02E+031.33E+053.52E+067.52E+025.15E+058.57E+075.23E+09 - 90M1 13.185.51E-014.29E+022.90E+048.48E+052.56E+028.94E+048.85E+064.30E+08 - 90M1 20.182.66E-016.68E+014.38E+031.31E+057.18E+011.17E+046.57E+052.32E+07 - 90M1 28.001.45E-011.55E+019.52E+022.71E+042.71E+012.51E+039.43E+042.56E+06 - 90M1 43.006.18E-022.25E+001.20E+022.97E+037.61E+003.51E+028.06E+031.53E+05 - 90M1 55.003.70E-027.58E-013.58E+017.92E+023.69E+001.17E+022.06E+033.17E+04 - 90M1 73.002.02E-022.31E-018.88E+001.69E+021.61E+003.39E+014.46E+025.40E+03 - 90M1 106.008.87E-035.78E-021.47E+002.20E+015.43E-017.01E+006.44E+015.69E+02 - 90M1 155.003.81E-031.80E-022.65E-012.93E+001.82E-011.51E+009.88E+006.39E+01 - 90M1 285.001.01E-033.87E-032.54E-021.57E-013.27E-021.53E-016.16E-012.50E+00 - 90M1 500.003.25E-041.13E-034.49E-031.67E-027.04E-032.27E-026.31E-021.76E-01 - 90M2 5.833.26E+001.14E+061.02E+091.18E+113.54E+021.33E+051.05E+071.69E+08 - 90M2 6.832.70E+005.17E+053.66E+084.01E+102.21E+026.50E+044.85E+061.24E+08 - 90M2 8.831.84E+001.45E+057.06E+076.84E+091.02E+022.07E+041.37E+064.61E+07 - 90M2 12.839.32E-012.29E+046.69E+065.20E+083.36E+014.05E+032.15E+057.67E+06 - 90M2 19.833.69E-012.71E+034.57E+052.63E+079.22E+006.40E+022.53E+047.89E+05 - 90M2 28.001.63E-015.07E+025.70E+042.55E+063.33E+001.55E+024.76E+031.24E+05 - 90M2 43.005.53E-026.47E+014.54E+031.46E+059.45E-012.77E+016.20E+021.23E+04 - 90M2 55.002.88E-022.02E+011.10E+032.91E+044.61E-011.06E+011.96E+023.28E+03 - 90M2 73.001.33E-025.38E+002.20E+024.66E+032.04E-013.57E+005.30E+017.24E+02 - 90M2 106.004.70E-039.76E-012.78E+014.38E+027.00E-028.79E-019.80E+001.02E+02 - 90M2 155.001.61E-031.80E-013.60E+004.21E+012.39E-022.19E-011.83E+001.43E+01 - 90M2 285.002.94E-041.36E-021.62E-011.19E+004.37E-032.58E-021.39E-017.03E-01 - 90M2 500.006.52E-051.48E-031.15E-025.83E-029.33E-043.95E-031.49E-025.26E-02 - 90M3 5.051.12E+012.86E+062.96E+093.77E+113.59E+017.36E+066.66E+106.95E+13 - 90M3 6.058.11E+001.15E+068.97E+081.04E+112.08E+012.98E+061.90E+101.48E+13 - 90M3 8.054.63E+002.75E+051.39E+081.36E+108.74E+007.16E+052.65E+091.31E+12 - 90M3 12.051.90E+003.62E+041.03E+077.74E+082.57E+009.54E+041.66E+084.48E+10 - 90M3 19.056.20E-013.63E+035.67E+053.07E+076.41E-019.69E+037.35E+061.06E+09 - 90M3 28.002.23E-015.25E+025.13E+042.09E+061.99E-011.42E+035.52E+054.88E+07 - 90M3 43.006.65E-026.14E+013.68E+031.07E+055.45E-021.68E+023.23E+041.74E+06 - 90M3 55.003.23E-021.80E+018.24E+021.97E+042.60E-024.94E+016.52E+032.68E+05 - 90M3 73.001.38E-024.41E+001.49E+022.84E+031.11E-021.21E+011.06E+033.25E+04 - 90M3 106.004.39E-037.00E-011.61E+012.25E+023.65E-031.91E+001.02E+022.17E+03 - 90M3 155.001.35E-031.09E-011.71E+001.76E+011.18E-032.95E-019.98E+001.52E+02 - 90M3 285.002.08E-045.95E-035.18E-023.28E-011.99E-041.51E-022.79E-012.62E+00 - 90M3 500.003.98E-054.60E-042.42E-031.03E-023.99E-051.04E-031.22E-027.95E-02 - 90M4 4.492.86E+018.38E+042.45E+091.94E+131.10E+012.42E+051.07E+094.71E+11 - 90M4 5.491.56E+013.03E+045.98E+083.35E+125.76E+008.85E+042.75E+081.04E+11 - 90M4 7.495.90E+006.29E+036.77E+072.26E+112.11E+001.87E+043.43E+071.01E+10 - 90M4 11.491.42E+007.26E+023.36E+065.71E+095.18E-012.18E+032.02E+064.12E+08 - 90M4 18.492.68E-016.61E+011.19E+051.01E+081.06E-012.00E+029.10E+041.22E+07 - 90M4 28.005.81E-028.18E+006.51E+033.13E+062.59E-022.48E+016.38E+035.89E+05 - 90M4 43.001.13E-029.44E-013.27E+029.08E+045.86E-032.88E+004.27E+022.67E+04 - 90M4 55.004.32E-032.73E-015.93E+011.22E+042.47E-038.38E-019.22E+014.63E+03 - 90M4 73.001.41E-036.59E-028.46E+001.25E+039.03E-042.03E-011.61E+016.29E+02 - 90M4 106.003.16E-041.02E-026.70E-016.47E+012.36E-043.17E-021.68E+004.70E+01 - 90M4 155.006.88E-051.55E-035.34E-023.38E+005.91E-054.82E-031.74E-013.51E+00 - 90M4 285.006.08E-068.07E-051.09E-033.53E-026.24E-062.42E-045.02E-036.23E-02 - 90M4 500.006.81E-075.87E-063.91E-056.67E-047.67E-071.60E-052.13E-041.78E-03 - 90M5 4.334.40E+017.78E+045.56E+093.50E+136.30E+001.34E+046.21E+091.72E+14 - 90M5 5.332.33E+012.68E+041.29E+095.65E+123.23E+004.75E+031.45E+092.70E+13 - 90M5 7.338.41E+005.27E+031.38E+083.51E+111.15E+009.69E+021.57E+081.58E+12 - 90M5 11.331.93E+005.72E+026.44E+068.09E+092.78E-011.11E+027.45E+063.30E+10 - 90M5 18.333.45E-014.95E+012.17E+051.32E+085.66E-021.01E+012.58E+054.75E+08 - 90M5 28.007.04E-025.70E+001.09E+043.64E+061.36E-021.23E+001.34E+041.18E+07 - 90M5 43.001.33E-026.32E-015.29E+021.00E+053.14E-031.49E-016.70E+022.91E+05 - 90M5 55.004.99E-031.78E-019.34E+011.29E+041.34E-034.48E-021.21E+023.57E+04 - 90M5 73.001.59E-034.12E-021.27E+011.25E+034.99E-041.14E-021.68E+013.28E+03 - 90M5 106.003.49E-046.02E-039.33E-015.88E+011.34E-041.91E-031.26E+001.48E+02 - 90M5 155.007.45E-058.60E-046.63E-022.71E+003.49E-053.22E-049.07E-026.69E+00 - 90M5 285.006.77E-064.15E-051.03E-032.14E-024.06E-062.06E-051.39E-035.39E-02 - 90M5 500.007.94E-073.05E-062.66E-052.88E-045.95E-071.90E-063.29E-057.44E-04 - 90N+ 50.004.79E-022.31E+011.48E+036.50E+042.03E+001.07E+026.74E+033.21E+05 - 90N+ 70.001.95E-024.56E+001.98E+025.68E+037.54E-012.31E+018.36E+022.55E+04 - 90N+ 100.007.68E-038.54E-012.52E+014.85E+022.69E-014.87E+001.01E+021.96E+03 - 90N+ 150.002.67E-031.33E-012.60E+003.33E+018.36E-028.85E-011.04E+011.24E+02 - 90N+ 200.001.28E-033.75E-025.50E-015.45E+003.67E-022.78E-012.28E+001.95E+01 - 90N+ 500.001.55E-041.13E-036.90E-033.25E-022.92E-031.02E-023.42E-021.20E-01 - 91K 113.602.87E-012.04E-014.00E-021.83E-031.20E+015.76E+015.62E+011.26E+01 - 91K 114.302.83E-012.07E-014.81E-023.91E-031.18E+015.63E+015.68E+011.50E+01 - 91K 115.602.76E-012.14E-016.35E-029.50E-031.14E+015.43E+015.77E+011.95E+01 - 91K 118.802.59E-012.28E-011.02E-013.26E-021.05E+014.95E+015.91E+012.99E+01 - 91K 122.602.40E-012.39E-011.47E-017.56E-029.63E+004.45E+015.92E+014.08E+01 - 91K 127.002.21E-012.46E-011.95E-011.41E-018.70E+003.95E+015.80E+015.11E+01 - 91K 133.001.99E-012.49E-012.51E-012.45E-017.63E+003.38E+015.51E+016.09E+01 - 91K 141.001.73E-012.45E-013.07E-013.88E-016.46E+002.78E+015.01E+016.77E+01 - 91K 153.001.43E-012.31E-013.58E-015.72E-015.12E+002.11E+014.21E+016.88E+01 - 91K 166.001.18E-012.11E-013.78E-017.07E-014.06E+001.61E+013.43E+016.35E+01 - 91K 183.009.43E-021.83E-013.73E-017.91E-013.09E+001.16E+012.62E+015.34E+01 - 91K 196.008.04E-021.64E-013.57E-018.04E-012.54E+009.25E+002.13E+014.55E+01 - 91K 213.006.63E-021.43E-013.28E-017.81E-012.01E+007.03E+001.65E+013.65E+01 - 91K 236.005.25E-021.18E-012.87E-017.13E-011.51E+005.03E+001.19E+012.70E+01 - 91K 265.004.04E-029.52E-022.40E-016.11E-011.10E+003.45E+008.13E+001.86E+01 - 91K 330.002.50E-026.23E-021.62E-014.15E-016.00E-011.72E+003.92E+008.82E+00 - 91K 415.001.54E-024.01E-021.03E-012.56E-013.21E-018.46E-011.83E+003.92E+00 - 91K 500.001.06E-022.82E-027.11E-021.69E-011.95E-014.84E-019.96E-012.03E+00 - 91K 610.007.23E-031.95E-024.76E-021.07E-011.15E-012.71E-015.28E-011.02E+00 - 91K 840.004.02E-031.10E-022.51E-025.17E-024.93E-021.10E-011.99E-013.49E-01 - 91K 1100.002.50E-036.84E-031.48E-022.84E-022.43E-025.35E-029.13E-021.49E-01 - 91K 1350.001.77E-034.76E-039.98E-031.82E-021.42E-023.14E-025.18E-028.11E-02 - 91K 1600.001.33E-033.53E-037.20E-031.27E-029.13E-032.04E-023.29E-024.99E-02 - 91L1 22.108.04E-011.89E+022.99E+035.13E+032.54E+022.95E+047.34E+054.34E+06 - 91L1 22.807.67E-011.64E+022.94E+038.59E+032.32E+022.55E+046.23E+054.13E+06 - 91L1 24.107.03E-011.28E+022.72E+031.36E+041.97E+021.97E+044.65E+053.59E+06 - 91L1 27.305.76E-017.27E+011.99E+031.78E+041.36E+021.11E+042.41E+052.30E+06 - 91L1 31.104.62E-013.99E+011.28E+031.54E+049.23E+016.07E+031.21E+051.29E+06 - 91L1 34.003.95E-012.64E+019.11E+021.24E+047.09E+014.05E+037.58E+048.37E+05 - 91L1 40.002.93E-011.23E+014.61E+027.14E+034.38E+011.94E+033.22E+043.63E+05 - 91L1 48.002.07E-015.28E+002.04E+023.34E+032.56E+018.59E+021.25E+041.36E+05 - 91L1 60.001.32E-011.92E+007.15E+011.18E+031.33E+013.23E+023.93E+033.97E+04 - 91L1 73.008.79E-028.29E-012.80E+014.41E+027.48E+001.39E+021.45E+031.33E+04 - 91L1 90.005.62E-023.69E-011.03E+011.50E+024.06E+005.75E+015.09E+024.14E+03 - 91L1 103.004.19E-022.31E-015.50E+007.45E+012.75E+003.30E+012.62E+021.96E+03 - 91L1 120.003.00E-021.43E-012.75E+003.38E+011.77E+001.77E+011.25E+028.47E+02 - 91L1 143.002.03E-028.66E-021.28E+001.38E+011.07E+008.83E+005.44E+013.27E+02 - 91L1 170.001.39E-025.51E-026.29E-015.88E+006.51E-014.51E+002.44E+011.30E+02 - 91L1 235.006.84E-032.54E-021.88E-011.30E+002.61E-011.34E+005.73E+002.46E+01 - 91L1 320.003.56E-031.27E-026.79E-023.50E-011.11E-014.47E-011.55E+005.42E+00 - 91L1 410.002.16E-037.49E-033.25E-021.35E-015.61E-021.93E-015.75E-011.72E+00 - 91L1 520.001.36E-034.60E-031.69E-025.82E-022.95E-028.94E-022.33E-016.08E-01 - 91L1 750.006.97E-042.25E-036.72E-031.82E-021.11E-022.91E-026.38E-021.38E-01 - 91L11000.004.22E-041.31E-033.45E-038.05E-035.20E-031.27E-022.50E-024.78E-02 - 91L11500.002.15E-046.26E-041.43E-032.85E-031.79E-034.23E-037.42E-031.24E-02 - 91L2 21.311.87E+007.99E+037.39E+058.70E+063.21E+011.23E+039.87E+031.50E+04 - 91L2 22.011.72E+006.82E+036.18E+058.13E+062.91E+011.09E+039.79E+032.51E+04 - 91L2 23.311.48E+005.15E+034.49E+056.87E+062.46E+018.81E+029.22E+033.98E+04 - 91L2 26.511.06E+002.76E+032.20E+054.12E+061.68E+015.49E+027.05E+035.33E+04 - 91L2 30.317.44E-011.44E+031.04E+052.16E+061.13E+013.35E+024.78E+034.74E+04 - 91L2 34.005.45E-018.27E+025.47E+041.19E+068.04E+002.19E+023.26E+033.66E+04 - 91L2 40.003.49E-013.79E+022.21E+044.81E+054.98E+001.20E+021.80E+032.20E+04 - 91L2 48.002.09E-011.59E+027.98E+031.68E+052.92E+006.09E+018.87E+021.10E+04 - 91L2 60.001.11E-015.54E+012.31E+034.46E+041.52E+002.67E+013.59E+024.25E+03 - 91L2 73.006.32E-022.22E+017.84E+021.37E+048.64E-011.30E+011.59E+021.75E+03 - 91L2 90.003.44E-028.47E+002.50E+023.87E+034.73E-016.03E+006.56E+016.52E+02 - 91L2 103.002.32E-024.58E+001.21E+021.71E+033.22E-013.70E+003.70E+013.42E+02 - 91L2 120.001.49E-022.30E+005.33E+016.84E+022.08E-012.13E+001.94E+011.63E+02 - 91L2 143.008.94E-031.06E+002.11E+012.40E+021.27E-011.14E+009.23E+006.98E+01 - 91L2 170.005.42E-034.96E-018.55E+008.65E+017.80E-026.18E-014.46E+003.02E+01 - 91L2 235.002.15E-031.24E-011.65E+001.33E+013.16E-022.00E-011.17E+006.40E+00 - 91L2 320.009.06E-043.50E-023.65E-012.38E+001.35E-027.01E-023.35E-011.50E+00 - 91L2 410.004.62E-041.31E-021.14E-016.33E-016.81E-033.08E-021.26E-014.88E-01 - 91L2 520.002.46E-045.29E-033.90E-021.87E-013.56E-031.42E-025.10E-021.71E-01 - 91L2 750.009.67E-051.40E-038.20E-033.19E-021.31E-034.49E-031.33E-023.69E-02 - 91L21000.004.79E-055.26E-042.61E-038.80E-035.96E-041.87E-034.88E-031.19E-02 - 91L21500.001.85E-051.44E-045.87E-041.66E-031.95E-045.65E-041.28E-032.66E-03 - 91L3 17.734.42E+002.06E+042.47E+063.86E+073.30E+005.29E+043.98E+073.51E+09 - 91L3 18.433.96E+001.70E+041.96E+063.37E+072.93E+004.36E+043.07E+072.62E+09 - 91L3 19.733.26E+001.20E+041.31E+062.55E+072.38E+003.11E+041.94E+071.56E+09 - 91L3 22.932.11E+005.65E+035.32E+051.22E+071.50E+001.47E+047.06E+064.99E+08 - 91L3 26.731.35E+002.61E+032.13E+055.21E+069.39E-016.84E+032.54E+061.57E+08 - 91L3 34.006.56E-017.79E+025.05E+041.24E+064.51E-012.06E+035.16E+052.58E+07 - 91L3 40.003.99E-013.45E+021.91E+044.47E+052.74E-019.19E+021.78E+057.69E+06 - 91L3 48.002.27E-011.38E+026.44E+031.39E+051.58E-013.71E+025.42E+042.00E+06 - 91L3 60.001.13E-014.53E+011.70E+033.27E+048.01E-021.23E+021.29E+043.92E+05 - 91L3 73.006.09E-021.71E+015.30E+029.02E+034.43E-024.63E+013.70E+039.51E+04 - 91L3 90.003.13E-026.05E+001.53E+022.26E+032.35E-021.64E+019.94E+022.14E+04 - 91L3 103.002.04E-023.10E+006.91E+019.25E+021.57E-028.44E+004.30E+028.29E+03 - 91L3 120.001.25E-021.46E+002.81E+013.36E+029.94E-033.97E+001.68E+022.86E+03 - 91L3 143.007.15E-036.21E-011.01E+011.06E+025.89E-031.68E+005.81E+018.58E+02 - 91L3 170.004.12E-032.68E-013.68E+003.38E+013.52E-037.17E-012.06E+012.66E+02 - 91L3 235.001.49E-035.65E-025.72E-014.10E+001.35E-031.48E-013.09E+003.14E+01 - 91L3 320.005.76E-041.32E-021.01E-015.73E-015.50E-043.31E-025.30E-014.37E+00 - 91L3 410.002.74E-044.25E-032.59E-021.24E-012.69E-041.01E-021.34E-019.42E-01 - 91L3 520.001.37E-041.47E-037.35E-033.01E-021.37E-043.30E-033.67E-022.26E-01 - 91L3 750.004.95E-053.13E-041.17E-033.87E-035.00E-056.14E-045.29E-032.71E-02 - 91L31000.002.33E-051.01E-043.07E-048.76E-042.34E-051.74E-041.21E-035.49E-03 - 91L31500.008.82E-062.36E-055.59E-051.31E-048.70E-063.40E-051.65E-046.33E-04 - 91M1 6.371.41E+001.05E+046.38E+059.77E+062.49E+033.44E+061.01E+097.01E+10 - 91M1 7.371.21E+005.66E+033.53E+057.58E+061.61E+031.68E+063.92E+082.60E+10 - 91M1 9.379.00E-012.04E+031.32E+053.39E+067.86E+025.21E+058.44E+075.00E+09 - 91M1 13.375.32E-014.46E+022.94E+048.39E+052.72E+029.31E+049.06E+064.30E+08 - 91M1 20.372.61E-017.14E+014.53E+031.33E+057.75E+011.25E+046.92E+052.41E+07 - 91M1 28.001.45E-011.74E+011.03E+032.88E+043.01E+012.79E+031.05E+052.82E+06 - 91M1 43.006.22E-022.56E+001.32E+023.19E+038.44E+003.89E+028.91E+031.68E+05 - 91M1 55.003.74E-028.66E-013.96E+018.58E+024.09E+001.29E+022.27E+033.48E+04 - 91M1 73.002.04E-022.63E-019.87E+001.85E+021.78E+003.75E+014.92E+025.92E+03 - 91M1 106.009.04E-036.48E-021.64E+002.43E+016.02E-017.74E+007.08E+016.23E+02 - 91M1 155.003.90E-031.97E-022.96E-013.25E+002.02E-011.67E+001.08E+016.98E+01 - 91M1 285.001.04E-034.15E-032.80E-021.73E-013.62E-021.68E-016.74E-012.72E+00 - 91M1 500.003.38E-041.21E-034.88E-031.83E-027.78E-032.49E-026.89E-021.92E-01 - 91M2 6.003.06E+001.07E+069.29E+081.04E+113.64E+021.29E+059.83E+061.51E+08 - 91M2 7.002.55E+005.00E+053.42E+083.62E+102.30E+026.45E+044.64E+061.13E+08 - 91M2 9.001.77E+001.44E+056.84E+076.44E+091.09E+022.10E+041.34E+064.36E+07 - 91M2 13.009.12E-012.35E+046.73E+065.11E+083.63E+014.22E+032.18E+057.55E+06 - 91M2 20.003.68E-012.84E+034.73E+052.68E+071.01E+016.80E+022.63E+048.03E+05 - 91M2 28.001.68E-015.55E+026.21E+042.75E+063.73E+001.70E+025.17E+031.33E+05 - 91M2 43.005.72E-027.09E+014.95E+031.58E+051.06E+003.05E+016.73E+021.32E+04 - 91M2 55.002.99E-022.21E+011.19E+033.15E+045.19E-011.16E+012.13E+023.53E+03 - 91M2 73.001.39E-025.90E+002.39E+025.04E+032.29E-013.93E+005.77E+017.80E+02 - 91M2 106.004.95E-031.07E+003.03E+014.75E+027.88E-029.69E-011.07E+011.10E+02 - 91M2 155.001.70E-031.98E-013.94E+004.58E+012.69E-022.42E-012.00E+001.55E+01 - 91M2 285.003.14E-041.50E-021.77E-011.31E+004.94E-032.86E-021.52E-017.68E-01 - 91M2 500.007.02E-051.64E-031.27E-026.41E-021.06E-034.40E-031.65E-025.78E-02 - 91M3 5.171.07E+012.72E+062.70E+093.34E+113.52E+017.23E+066.30E+106.38E+13 - 91M3 6.177.80E+001.12E+068.43E+089.49E+102.06E+012.99E+061.85E+101.41E+13 - 91M3 8.174.50E+002.74E+051.35E+081.29E+108.82E+007.36E+052.67E+091.30E+12 - 91M3 12.171.88E+003.71E+041.04E+077.60E+082.64E+001.01E+051.74E+084.65E+10 - 91M3 19.176.21E-013.79E+035.82E+053.10E+076.65E-011.04E+047.89E+061.13E+09 - 91M3 28.002.28E-015.68E+025.50E+042.20E+062.11E-011.58E+036.19E+055.49E+07 - 91M3 43.006.84E-026.64E+013.93E+031.13E+055.77E-021.87E+023.62E+041.94E+06 - 91M3 55.003.33E-021.95E+018.80E+022.08E+042.75E-025.49E+017.29E+032.99E+05 - 91M3 73.001.43E-024.77E+001.60E+023.00E+031.18E-021.35E+011.18E+033.62E+04 - 91M3 106.004.57E-037.57E-011.72E+012.39E+023.86E-032.13E+001.14E+022.42E+03 - 91M3 155.001.41E-031.18E-011.83E+001.86E+011.25E-033.28E-011.11E+011.68E+02 - 91M3 285.002.17E-046.42E-035.54E-023.48E-012.11E-041.68E-023.10E-012.90E+00 - 91M3 500.004.18E-054.95E-042.59E-031.10E-024.23E-051.15E-031.35E-028.77E-02 - 91M4 4.612.72E+017.96E+042.23E+091.72E+131.08E+012.38E+051.01E+094.29E+11 - 91M4 5.611.51E+012.94E+045.62E+083.09E+125.73E+008.91E+042.68E+089.82E+10 - 91M4 7.615.80E+006.30E+036.62E+072.19E+112.14E+001.93E+043.47E+079.96E+09 - 91M4 11.611.43E+007.48E+023.41E+065.80E+095.35E-012.32E+032.12E+064.24E+08 - 91M4 18.612.74E-016.96E+011.25E+051.06E+081.11E-012.17E+029.78E+041.29E+07 - 91M4 28.006.12E-028.91E+007.13E+033.46E+062.78E-022.79E+017.13E+036.54E+05 - 91M4 43.001.20E-021.03E+003.58E+021.01E+056.31E-033.23E+004.77E+022.97E+04 - 91M4 55.004.59E-032.99E-016.50E+011.35E+042.66E-039.42E-011.03E+025.14E+03 - 91M4 73.001.50E-037.20E-029.27E+001.38E+039.75E-042.28E-011.80E+016.99E+02 - 91M4 106.003.39E-041.12E-027.35E-017.17E+012.55E-043.56E-021.87E+005.23E+01 - 91M4 155.007.39E-051.70E-035.85E-023.75E+006.41E-055.42E-031.94E-013.91E+00 - 91M4 285.006.57E-068.88E-051.20E-033.91E-026.78E-062.72E-045.62E-036.95E-02 - 91M4 500.007.49E-076.46E-064.29E-057.41E-048.35E-071.80E-052.39E-041.99E-03 - 91M5 4.444.20E+017.25E+045.14E+093.12E+136.15E+001.28E+045.90E+091.58E+14 - 91M5 5.442.25E+012.56E+041.23E+095.25E+123.21E+004.64E+031.43E+092.58E+13 - 91M5 7.448.29E+005.17E+031.37E+083.42E+111.17E+009.73E+021.60E+081.58E+12 - 91M5 11.441.94E+005.77E+026.64E+068.25E+092.86E-011.14E+027.88E+063.48E+10 - 91M5 18.443.53E-015.08E+012.30E+051.38E+085.90E-021.06E+012.80E+055.16E+08 - 91M5 28.007.40E-026.04E+001.21E+044.02E+061.45E-021.33E+001.52E+041.35E+07 - 91M5 43.001.40E-026.71E-015.85E+021.10E+053.35E-031.61E-017.59E+023.32E+05 - 91M5 55.005.27E-031.89E-011.03E+021.43E+041.43E-034.84E-021.36E+024.07E+04 - 91M5 73.001.69E-034.40E-021.41E+011.38E+035.34E-041.23E-021.90E+013.73E+03 - 91M5 106.003.72E-046.43E-031.03E+006.49E+011.44E-042.06E-031.42E+001.68E+02 - 91M5 155.007.97E-059.21E-047.32E-022.99E+003.74E-053.47E-041.02E-017.59E+00 - 91M5 285.007.15E-064.46E-051.14E-032.36E-024.36E-062.22E-051.57E-036.09E-02 - 91M5 500.008.74E-073.28E-062.92E-053.17E-046.40E-072.05E-063.68E-058.39E-04 - 91N+ 50.004.94E-022.53E+011.61E+037.12E+042.26E+001.19E+027.55E+033.62E+05 - 91N+ 70.002.02E-025.00E+002.15E+026.20E+038.38E-012.57E+019.34E+022.86E+04 - 91N+ 100.007.95E-039.36E-012.75E+015.28E+022.99E-015.40E+001.13E+022.19E+03 - 91N+ 150.002.78E-031.46E-012.84E+003.63E+019.30E-029.79E-011.15E+011.38E+02 - 91N+ 200.001.33E-034.11E-026.03E-015.94E+004.08E-023.08E-012.52E+002.16E+01 - 91N+ 500.001.62E-041.24E-037.58E-033.58E-023.24E-031.13E-023.76E-021.32E-01 - 92K 116.612.73E-011.88E-013.69E-021.66E-031.21E+015.59E+015.27E+011.15E+01 - 92K 117.312.69E-011.91E-014.41E-023.52E-031.19E+015.47E+015.32E+011.36E+01 - 92K 118.612.62E-011.98E-015.80E-028.47E-031.15E+015.28E+015.41E+011.76E+01 - 92K 121.812.47E-012.10E-019.27E-022.89E-021.07E+014.83E+015.55E+012.69E+01 - 92K 125.612.30E-012.20E-011.33E-016.68E-029.80E+004.35E+015.57E+013.68E+01 - 92K 130.002.12E-012.27E-011.77E-011.25E-018.88E+003.88E+015.47E+014.61E+01 - 92K 136.001.91E-012.31E-012.29E-012.18E-017.80E+003.33E+015.22E+015.52E+01 - 92K 144.001.67E-012.29E-012.82E-013.48E-016.63E+002.75E+014.77E+016.18E+01 - 92K 156.001.39E-012.17E-013.32E-015.19E-015.28E+002.11E+014.05E+016.35E+01 - 92K 169.001.15E-012.00E-013.54E-016.49E-014.21E+001.61E+013.33E+015.93E+01 - 92K 186.009.23E-021.76E-013.53E-017.36E-013.21E+001.17E+012.56E+015.04E+01 - 92K 199.007.90E-021.58E-013.40E-017.55E-012.66E+009.39E+002.10E+014.33E+01 - 92K 216.006.55E-021.38E-013.16E-017.41E-012.11E+007.17E+001.63E+013.51E+01 - 92K 239.005.21E-021.16E-012.79E-016.85E-011.59E+005.15E+001.19E+012.62E+01 - 92K 265.004.13E-029.60E-022.40E-016.03E-011.19E+003.69E+008.49E+001.90E+01 - 92K 330.002.56E-026.36E-021.64E-014.18E-016.53E-011.84E+004.12E+009.09E+00 - 92K 415.001.59E-024.13E-021.06E-012.62E-013.50E-019.07E-011.93E+004.08E+00 - 92K 510.001.05E-022.82E-027.08E-021.66E-012.01E-014.90E-019.89E-011.98E+00 - 92K 620.007.25E-031.97E-024.80E-021.07E-011.19E-012.78E-015.33E-011.01E+00 - 92K 850.004.08E-031.13E-022.57E-025.26E-025.19E-021.15E-012.05E-013.55E-01 - 92K 1100.002.60E-037.17E-031.56E-022.98E-022.63E-025.76E-029.74E-021.58E-01 - 92K 1350.001.84E-035.00E-031.05E-021.91E-021.54E-023.38E-025.53E-028.61E-02 - 92K 1600.001.39E-033.71E-037.59E-031.34E-029.84E-032.19E-023.51E-025.30E-02 - 92L1 22.767.56E-011.80E+022.73E+034.49E+032.58E+022.85E+046.80E+053.88E+06 - 92L1 23.467.23E-011.58E+022.69E+037.48E+032.35E+022.47E+045.80E+053.70E+06 - 92L1 24.766.65E-011.24E+022.51E+031.18E+042.01E+021.92E+044.36E+053.24E+06 - 92L1 27.965.48E-017.18E+011.86E+031.58E+041.40E+021.09E+042.30E+052.11E+06 - 92L1 31.764.42E-014.01E+011.22E+031.40E+049.58E+016.09E+031.18E+051.21E+06 - 92L1 35.003.73E-012.56E+018.44E+021.11E+047.18E+013.91E+037.05E+047.54E+05 - 92L1 41.002.79E-011.23E+014.38E+026.53E+034.50E+011.91E+033.07E+043.35E+05 - 92L1 49.001.99E-015.42E+001.98E+023.14E+032.66E+018.63E+021.21E+041.29E+05 - 92L1 61.001.28E-012.02E+007.17E+011.14E+031.40E+013.31E+023.93E+033.87E+04 - 92L1 74.008.62E-028.90E-012.87E+014.37E+027.93E+001.44E+021.47E+031.32E+04 - 92L1 91.005.56E-023.99E-011.08E+011.52E+024.34E+006.03E+015.24E+024.18E+03 - 92L1 104.004.17E-022.49E-015.82E+007.66E+012.95E+003.48E+012.72E+022.00E+03 - 92L1 121.002.99E-021.53E-012.93E+003.52E+011.90E+001.88E+011.31E+028.71E+02 - 92L1 144.002.04E-029.24E-021.38E+001.46E+011.15E+009.41E+005.73E+013.40E+02 - 92L1 170.001.42E-025.94E-026.96E-016.44E+007.18E-014.94E+002.65E+011.41E+02 - 92L1 235.007.03E-032.70E-022.06E-011.42E+002.88E-011.47E+006.23E+002.65E+01 - 92L1 320.003.68E-031.35E-027.39E-023.82E-011.22E-014.89E-011.68E+005.86E+00 - 92L1 410.002.23E-037.94E-033.52E-021.46E-016.17E-022.11E-016.24E-011.86E+00 - 92L1 520.001.41E-034.88E-031.82E-026.31E-023.24E-029.76E-022.53E-016.57E-01 - 92L1 750.007.28E-042.39E-037.22E-031.96E-021.22E-023.18E-026.92E-021.49E-01 - 92L11000.004.43E-041.40E-033.70E-038.67E-035.69E-031.39E-022.71E-025.17E-02 - 92L11500.002.25E-046.66E-041.53E-033.06E-031.95E-034.60E-038.05E-031.34E-02 - 92L2 21.951.77E+007.53E+036.68E+057.57E+063.28E+011.18E+039.16E+031.33E+04 - 92L2 22.651.63E+006.46E+035.62E+057.10E+062.99E+011.06E+039.10E+032.22E+04 - 92L2 23.951.42E+004.92E+034.12E+056.04E+062.54E+018.61E+028.61E+033.53E+04 - 92L2 27.151.02E+002.67E+032.05E+053.70E+061.75E+015.44E+026.67E+034.80E+04 - 92L2 30.957.24E-011.42E+039.90E+041.98E+061.19E+013.35E+024.59E+034.35E+04 - 92L2 35.005.20E-017.83E+024.98E+041.04E+068.26E+002.13E+023.05E+033.32E+04 - 92L2 41.003.37E-013.67E+022.06E+044.36E+055.18E+001.19E+021.72E+032.03E+04 - 92L2 49.002.05E-011.57E+027.65E+031.56E+053.08E+006.13E+018.64E+021.04E+04 - 92L2 61.001.10E-015.60E+012.27E+034.28E+041.63E+002.73E+013.57E+024.11E+03 - 92L2 74.006.35E-022.28E+017.86E+021.34E+049.30E-011.35E+011.60E+021.72E+03 - 92L2 91.003.50E-028.79E+002.55E+023.87E+035.14E-016.33E+006.72E+016.54E+02 - 92L2 104.002.38E-024.79E+001.24E+021.73E+033.51E-013.91E+003.83E+013.46E+02 - 92L2 121.001.53E-022.42E+005.53E+016.98E+022.28E-012.27E+002.02E+011.67E+02 - 92L2 144.009.26E-031.12E+002.20E+012.48E+021.40E-011.22E+009.70E+007.23E+01 - 92L2 170.005.74E-035.43E-019.30E+009.32E+018.76E-026.78E-014.84E+003.24E+01 - 92L2 235.002.28E-031.37E-011.80E+001.44E+013.55E-022.20E-011.27E+006.91E+00 - 92L2 320.009.68E-043.85E-023.99E-012.59E+001.51E-027.74E-023.66E-011.63E+00 - 92L2 410.004.96E-041.44E-021.25E-016.90E-017.67E-033.41E-021.39E-015.31E-01 - 92L2 520.002.66E-045.84E-034.29E-022.05E-014.01E-031.58E-025.61E-021.87E-01 - 92L2 750.001.05E-041.55E-039.04E-033.51E-021.47E-035.00E-031.47E-024.05E-02 - 92L21000.005.21E-055.82E-042.89E-039.70E-036.73E-042.09E-035.41E-031.31E-02 - 92L21500.002.02E-051.60E-046.51E-041.84E-032.20E-046.33E-041.42E-032.94E-03 - 92L3 18.174.22E+001.96E+042.27E+063.43E+073.23E+005.18E+043.77E+073.23E+09 - 92L3 18.873.79E+001.62E+041.81E+063.01E+072.88E+004.29E+042.92E+072.43E+09 - 92L3 20.173.13E+001.16E+041.21E+062.29E+072.34E+003.08E+041.86E+071.46E+09 - 92L3 23.372.05E+005.52E+035.04E+051.12E+071.49E+001.48E+046.94E+064.78E+08 - 92L3 27.171.32E+002.59E+032.05E+054.86E+069.43E-016.97E+032.54E+061.53E+08 - 92L3 35.006.17E-017.24E+024.50E+041.07E+064.35E-011.97E+034.74E+052.29E+07 - 92L3 41.003.81E-013.27E+021.75E+043.97E+052.69E-018.98E+021.68E+057.07E+06 - 92L3 49.002.20E-011.34E+026.03E+031.27E+051.56E-013.70E+025.26E+041.90E+06 - 92L3 61.001.11E-014.49E+011.64E+033.06E+048.04E-021.25E+021.29E+043.83E+05 - 92L3 74.006.03E-021.71E+015.19E+028.62E+034.48E-024.78E+013.76E+039.50E+04 - 92L3 91.003.13E-026.15E+001.52E+022.20E+032.40E-021.72E+011.03E+032.18E+04 - 92L3 104.002.05E-023.18E+006.93E+019.10E+021.61E-028.88E+004.48E+028.52E+03 - 92L3 121.001.26E-021.51E+002.84E+013.34E+021.02E-024.21E+001.77E+022.97E+03 - 92L3 144.007.26E-036.44E-011.03E+011.06E+026.09E-031.79E+006.15E+018.99E+02 - 92L3 170.004.29E-032.88E-013.91E+003.55E+013.72E-037.91E-012.28E+012.93E+02 - 92L3 235.001.55E-036.07E-026.08E-014.32E+001.43E-031.63E-013.40E+003.44E+01 - 92L3 320.006.02E-041.42E-021.07E-016.05E-015.80E-043.65E-025.84E-014.79E+00 - 92L3 410.002.87E-044.55E-032.76E-021.31E-012.84E-041.11E-021.47E-011.03E+00 - 92L3 520.001.44E-041.58E-037.83E-033.19E-021.45E-043.62E-034.03E-022.47E-01 - 92L3 750.005.20E-053.33E-041.24E-034.11E-035.25E-056.70E-045.80E-032.97E-02 - 92L31000.002.44E-051.07E-043.26E-049.32E-042.46E-051.89E-041.33E-036.00E-03 - 92L31500.009.23E-062.49E-055.93E-051.39E-049.10E-063.67E-051.81E-046.92E-04 - 92M1 6.551.33E+001.03E+046.17E+058.92E+062.54E+033.34E+069.41E+086.34E+10 - 92M1 7.551.15E+005.62E+033.46E+057.11E+061.66E+031.66E+063.75E+082.42E+10 - 92M1 9.558.60E-012.07E+031.31E+053.29E+068.22E+025.28E+058.36E+074.82E+09 - 92M1 13.555.16E-014.65E+022.98E+048.36E+052.89E+029.70E+049.29E+064.32E+08 - 92M1 20.552.56E-017.63E+014.70E+031.35E+058.35E+011.33E+047.29E+052.50E+07 - 92M1 29.001.36E-011.67E+019.50E+022.58E+043.00E+012.63E+039.45E+042.46E+06 - 92M1 44.005.97E-022.62E+001.29E+023.04E+038.73E+003.89E+028.65E+031.59E+05 - 92M1 56.003.63E-029.12E-013.99E+018.43E+024.29E+001.32E+022.27E+033.40E+04 - 92M1 74.002.01E-022.83E-011.03E+011.87E+021.90E+003.90E+015.03E+025.97E+03 - 92M1 107.009.02E-037.03E-021.76E+002.54E+016.48E-018.21E+007.41E+016.44E+02 - 92M1 155.004.00E-032.16E-023.31E-013.59E+002.23E-011.83E+001.19E+017.62E+01 - 92M1 285.001.07E-034.45E-033.08E-021.91E-014.00E-021.85E-017.37E-012.97E+00 - 92M1 500.003.51E-041.29E-035.30E-032.00E-028.57E-032.73E-027.52E-022.08E-01 - 92M2 6.182.87E+001.01E+068.39E+089.04E+103.74E+021.25E+059.15E+061.34E+08 - 92M2 7.182.41E+004.81E+053.18E+083.26E+102.39E+026.37E+044.41E+061.03E+08 - 92M2 9.181.69E+001.43E+056.58E+076.03E+091.15E+022.13E+041.32E+064.11E+07 - 92M2 13.188.91E-012.40E+046.74E+065.00E+083.90E+014.39E+032.21E+057.41E+06 - 92M2 20.183.66E-012.98E+034.88E+052.71E+071.10E+017.22E+022.73E+048.14E+05 - 92M2 29.001.58E-015.13E+025.49E+042.34E+063.78E+001.62E+024.74E+031.18E+05 - 92M2 44.005.57E-026.96E+014.71E+031.47E+051.11E+003.07E+016.56E+021.25E+04 - 92M2 56.002.96E-022.23E+011.17E+033.02E+045.53E-011.20E+012.13E+023.44E+03 - 92M2 74.001.40E-026.07E+002.42E+025.00E+032.47E-014.11E+005.90E+017.82E+02 - 92M2 107.005.07E-031.13E+003.14E+014.85E+028.63E-021.03E+001.12E+011.13E+02 - 92M2 155.001.80E-032.18E-014.31E+004.98E+013.03E-022.67E-012.19E+001.68E+01 - 92M2 285.003.35E-041.65E-021.95E-011.43E+005.57E-033.17E-021.67E-018.38E-01 - 92M2 500.007.57E-051.82E-031.41E-027.04E-021.19E-034.90E-031.82E-026.35E-02 - 92M3 5.301.02E+012.59E+062.48E+092.97E+113.46E+017.10E+065.98E+105.88E+13 - 92M3 6.307.52E+001.09E+067.94E+088.68E+102.05E+013.00E+061.81E+101.34E+13 - 92M3 8.304.39E+002.73E+051.31E+081.22E+108.90E+007.56E+052.70E+091.29E+12 - 92M3 12.301.86E+003.80E+041.04E+077.47E+082.70E+001.06E+051.81E+084.81E+10 - 92M3 19.306.21E-013.96E+035.98E+053.13E+076.90E-011.12E+048.46E+061.21E+09 - 92M3 29.002.12E-015.14E+024.73E+041.82E+062.01E-011.47E+035.48E+054.67E+07 - 92M3 44.006.59E-026.39E+013.65E+031.02E+055.71E-021.85E+023.48E+041.82E+06 - 92M3 56.003.26E-021.92E+018.43E+021.94E+042.76E-025.58E+017.24E+032.91E+05 - 92M3 74.001.42E-024.81E+001.57E+022.89E+031.20E-021.40E+011.21E+033.65E+04 - 92M3 107.004.60E-037.80E-011.74E+012.37E+023.98E-032.26E+001.19E+022.51E+03 - 92M3 155.001.47E-031.28E-011.96E+001.98E+011.33E-033.63E-011.23E+011.87E+02 - 92M3 285.002.27E-046.93E-035.93E-023.70E-012.23E-041.86E-023.43E-013.20E+00 - 92M3 500.004.37E-055.32E-042.77E-031.17E-024.47E-051.26E-031.49E-029.68E-02 - 92M4 4.732.60E+017.60E+042.04E+091.54E+131.06E+012.35E+059.55E+083.96E+11 - 92M4 5.731.46E+012.88E+045.31E+082.87E+125.71E+009.00E+042.62E+089.36E+10 - 92M4 7.735.72E+006.33E+036.50E+072.14E+112.17E+002.01E+043.52E+079.89E+09 - 92M4 11.731.44E+007.72E+023.48E+065.91E+095.53E-012.47E+032.22E+064.38E+08 - 92M4 18.732.81E-017.33E+011.30E+051.11E+081.16E-012.36E+021.05E+051.37E+07 - 92M4 29.005.65E-028.13E+006.10E+032.86E+062.64E-022.62E+016.38E+035.63E+05 - 92M4 44.001.16E-021.00E+003.34E+029.21E+046.26E-033.23E+004.61E+022.80E+04 - 92M4 56.004.53E-032.98E-016.29E+011.29E+042.69E-039.66E-011.03E+025.03E+03 - 92M4 74.001.51E-037.36E-029.25E+001.37E+031.00E-032.40E-011.85E+017.06E+02 - 92M4 107.003.49E-041.17E-027.56E-017.36E+012.67E-043.82E-021.98E+005.45E+01 - 92M4 155.007.93E-051.87E-036.41E-024.15E+006.94E-056.09E-032.17E-014.35E+00 - 92M4 285.007.00E-069.78E-051.31E-034.34E-027.36E-063.06E-046.29E-037.74E-02 - 92M4 500.007.96E-077.12E-064.72E-058.23E-049.08E-072.02E-052.68E-042.22E-03 - 92M5 4.524.09E+016.99E+044.99E+092.97E+136.14E+001.26E+045.89E+091.55E+14 - 92M5 5.522.22E+012.51E+041.23E+095.14E+123.23E+004.66E+031.46E+092.60E+13 - 92M5 7.528.28E+005.17E+031.40E+083.46E+111.19E+009.97E+021.68E+081.65E+12 - 92M5 11.521.97E+005.89E+026.96E+068.61E+092.97E-011.19E+028.49E+063.74E+10 - 92M5 18.523.63E-015.26E+012.46E+051.47E+086.17E-021.12E+013.07E+055.69E+08 - 92M5 29.006.79E-025.35E+001.04E+043.31E+061.37E-021.21E+001.34E+041.13E+07 - 92M5 44.001.35E-026.33E-015.49E+021.01E+053.30E-031.55E-017.30E+023.11E+05 - 92M5 56.005.18E-031.83E-011.00E+021.35E+041.43E-034.78E-021.36E+023.98E+04 - 92M5 74.001.69E-034.36E-021.41E+011.36E+035.43E-041.24E-021.95E+013.79E+03 - 92M5 107.003.81E-046.54E-031.07E+006.62E+011.49E-042.13E-031.50E+001.77E+02 - 92M5 155.008.52E-059.84E-048.08E-023.29E+004.01E-053.74E-041.15E-018.60E+00 - 92M5 285.007.66E-064.78E-051.25E-032.60E-024.67E-062.39E-051.76E-036.88E-02 - 92M5 500.009.30E-073.54E-063.21E-053.49E-046.86E-072.21E-064.11E-059.45E-04 - 92N+ 50.005.07E-022.77E+011.75E+037.78E+042.49E+001.31E+028.45E+034.08E+05 - 92N+ 70.002.07E-025.47E+002.34E+026.76E+039.24E-012.83E+011.04E+033.20E+04 - 92N+ 100.008.18E-031.03E+002.99E+015.74E+023.30E-015.94E+001.25E+022.44E+03 - 92N+ 150.002.86E-031.60E-013.10E+003.95E+011.02E-011.08E+001.28E+011.52E+02 - 92N+ 200.001.38E-034.50E-026.59E-016.47E+004.50E-023.38E-012.78E+002.39E+01 - 92N+ 500.001.68E-041.34E-038.31E-033.92E-023.56E-031.23E-024.10E-021.44E-01 - 93K 119.672.59E-011.74E-013.41E-021.52E-031.23E+015.43E+014.95E+011.05E+01 - 93K 120.372.55E-011.77E-014.06E-023.18E-031.21E+015.32E+015.00E+011.24E+01 - 93K 121.672.49E-011.83E-015.31E-027.58E-031.17E+015.14E+015.08E+011.59E+01 - 93K 124.872.35E-011.94E-018.46E-022.57E-021.09E+014.71E+015.21E+012.43E+01 - 93K 128.672.19E-012.04E-011.21E-015.93E-021.00E+014.26E+015.24E+013.31E+01 - 93K 133.002.03E-012.11E-011.61E-011.10E-019.09E+003.82E+015.17E+014.15E+01 - 93K 139.001.83E-012.15E-012.09E-011.94E-018.02E+003.29E+014.95E+015.00E+01 - 93K 147.001.61E-012.14E-012.60E-013.12E-016.84E+002.74E+014.55E+015.65E+01 - 93K 159.001.35E-012.05E-013.08E-014.72E-015.47E+002.11E+013.89E+015.86E+01 - 93K 172.001.12E-011.90E-013.32E-015.97E-014.38E+001.62E+013.23E+015.53E+01 - 93K 189.009.04E-021.68E-013.35E-016.87E-013.36E+001.19E+012.50E+014.76E+01 - 93K 202.007.77E-021.53E-013.25E-017.11E-012.78E+009.54E+002.07E+014.13E+01 - 93K 219.006.46E-021.35E-013.05E-017.04E-012.22E+007.32E+001.62E+013.37E+01 - 93K 242.005.16E-021.14E-012.72E-016.58E-011.68E+005.29E+001.18E+012.55E+01 - 93K 270.004.05E-029.36E-022.33E-015.80E-011.24E+003.72E+008.34E+001.82E+01 - 93K 335.002.54E-026.31E-021.63E-014.09E-016.84E-011.88E+004.12E+008.89E+00 - 93K 420.001.59E-024.16E-021.07E-012.61E-013.70E-019.39E-011.96E+004.07E+00 - 93K 510.001.09E-022.92E-027.33E-021.72E-012.19E-015.26E-011.05E+002.07E+00 - 93K 620.007.49E-032.06E-025.00E-021.11E-011.30E-012.99E-015.66E-011.06E+00 - 93K 850.004.23E-031.18E-022.70E-025.50E-025.64E-021.24E-012.18E-013.76E-01 - 93K 1100.002.70E-037.53E-031.64E-023.13E-022.86E-026.20E-021.04E-011.68E-01 - 93K 1350.001.92E-035.26E-031.11E-022.02E-021.67E-023.64E-025.91E-029.16E-02 - 93K 1600.001.44E-033.91E-038.01E-031.41E-021.06E-022.36E-023.76E-025.64E-02 - 93L1 23.427.13E-011.73E+022.50E+033.94E+032.62E+022.75E+046.31E+053.48E+06 - 93L1 24.126.82E-011.52E+022.47E+036.54E+032.40E+022.40E+045.41E+053.32E+06 - 93L1 25.426.29E-011.20E+022.31E+031.04E+042.05E+021.88E+044.10E+052.93E+06 - 93L1 28.625.21E-017.09E+011.75E+031.41E+041.44E+021.08E+042.20E+051.94E+06 - 93L1 32.424.23E-014.04E+011.16E+031.27E+049.98E+016.12E+031.14E+051.13E+06 - 93L1 36.003.52E-012.50E+017.86E+029.98E+037.31E+013.79E+036.60E+046.84E+05 - 93L1 42.002.66E-011.24E+014.17E+025.99E+034.64E+011.89E+032.94E+043.11E+05 - 93L1 50.001.91E-015.58E+001.94E+022.95E+032.77E+018.70E+021.19E+041.23E+05 - 93L1 62.001.25E-012.14E+007.20E+011.10E+031.47E+013.39E+023.93E+033.77E+04 - 93L1 75.008.45E-029.57E-012.95E+014.34E+028.44E+001.50E+021.50E+031.31E+04 - 93L1 92.005.49E-024.32E-011.13E+011.55E+024.65E+006.34E+015.40E+024.23E+03 - 93L1 105.004.14E-022.70E-016.16E+007.88E+013.17E+003.67E+012.82E+022.04E+03 - 93L1 122.002.99E-021.65E-013.14E+003.67E+012.06E+002.00E+011.37E+028.98E+02 - 93L1 145.002.05E-029.92E-021.48E+001.54E+011.25E+001.01E+016.03E+013.53E+02 - 93L1 170.001.45E-026.44E-027.70E-017.05E+007.95E-015.42E+002.88E+011.52E+02 - 93L1 235.007.21E-032.89E-022.26E-011.56E+003.18E-011.61E+006.78E+002.87E+01 - 93L1 320.003.79E-031.44E-028.06E-024.17E-011.35E-015.35E-011.83E+006.34E+00 - 93L1 410.002.31E-038.46E-033.81E-021.59E-016.81E-022.31E-016.78E-012.01E+00 - 93L1 520.001.47E-035.20E-031.97E-026.85E-023.58E-021.07E-012.75E-017.11E-01 - 93L1 750.007.59E-042.55E-037.77E-032.12E-021.34E-023.48E-027.52E-021.61E-01 - 93L11000.004.63E-041.49E-033.97E-039.34E-036.25E-031.52E-022.95E-025.59E-02 - 93L11500.002.36E-047.09E-041.65E-033.29E-032.14E-035.02E-038.75E-031.45E-02 - 93L2 22.601.68E+007.11E+036.04E+056.60E+063.37E+011.15E+038.52E+031.18E+04 - 93L2 23.301.55E+006.13E+035.11E+056.21E+063.08E+011.02E+028.45E+031.97E+04 - 93L2 24.601.35E+004.70E+033.78E+055.32E+062.62E+018.41E+028.04E+033.13E+04 - 93L2 27.809.89E-012.59E+031.92E+053.32E+061.82E+015.38E+026.30E+034.32E+04 - 93L2 31.607.05E-011.40E+039.43E+041.82E+061.25E+013.36E+024.41E+033.99E+04 - 93L2 36.004.97E-017.44E+024.56E+049.23E+058.50E+002.08E+022.87E+033.02E+04 - 93L2 42.003.26E-013.56E+021.93E+043.96E+055.41E+001.18E+021.65E+031.88E+04 - 93L2 50.002.01E-011.55E+027.34E+031.46E+053.25E+006.20E+018.44E+029.79E+03 - 93L2 62.001.10E-015.67E+012.24E+034.11E+041.74E+002.81E+013.55E+023.98E+03 - 93L2 75.006.37E-022.33E+017.88E+021.32E+041.01E+001.40E+011.62E+021.70E+03 - 93L2 92.003.55E-029.14E+002.60E+023.87E+035.59E-016.66E+006.91E+016.58E+02 - 93L2 105.002.43E-025.02E+001.27E+021.75E+033.83E-014.14E+003.96E+013.51E+02 - 93L2 122.001.57E-022.56E+005.74E+017.13E+022.51E-012.42E+002.11E+011.71E+02 - 93L2 145.009.58E-031.19E+002.31E+012.56E+021.54E-011.31E+001.02E+017.47E+01 - 93L2 170.006.07E-035.96E-011.00E+011.01E+029.85E-027.46E-015.25E+003.48E+01 - 93L2 235.002.43E-031.50E-011.97E+001.56E+014.00E-022.43E-011.38E+007.46E+00 - 93L2 320.001.04E-034.24E-024.37E-012.82E+001.71E-028.57E-024.01E-011.77E+00 - 93L2 410.005.32E-041.59E-021.37E-017.53E-018.66E-033.78E-021.52E-015.79E-01 - 93L2 520.002.86E-046.45E-034.72E-022.24E-014.53E-031.76E-026.18E-022.05E-01 - 93L2 750.001.14E-041.72E-039.99E-033.86E-021.67E-035.58E-031.63E-024.46E-02 - 93L21000.005.66E-056.46E-043.20E-031.07E-027.61E-042.33E-036.00E-031.44E-02 - 93L21500.002.20E-051.78E-047.23E-042.04E-032.50E-047.09E-041.58E-033.27E-03 - 93L3 18.614.02E+001.87E+042.08E+063.05E+073.16E+005.09E+043.57E+072.98E+09 - 93L3 19.313.63E+001.55E+041.67E+062.69E+072.83E+004.23E+042.79E+072.25E+09 - 93L3 20.613.01E+001.12E+041.13E+062.06E+072.31E+003.06E+041.79E+071.37E+09 - 93L3 23.811.99E+005.40E+034.76E+051.02E+071.49E+001.49E+046.81E+064.59E+08 - 93L3 27.611.29E+002.56E+031.97E+054.52E+069.47E-017.12E+032.54E+061.50E+08 - 93L3 36.005.82E-016.75E+024.02E+049.25E+054.21E-011.90E+034.37E+052.05E+07 - 93L3 42.003.64E-013.12E+021.60E+043.53E+052.63E-018.81E+021.59E+056.52E+06 - 93L3 50.002.13E-011.30E+025.66E+031.16E+051.55E-013.70E+025.12E+041.80E+06 - 93L3 62.001.09E-014.44E+011.57E+032.87E+048.06E-021.27E+021.28E+043.75E+05 - 93L3 75.005.97E-021.72E+015.08E+028.25E+034.54E-024.95E+013.83E+039.51E+04 - 93L3 92.003.13E-026.26E+001.51E+022.15E+032.45E-021.80E+011.06E+032.22E+04 - 93L3 105.002.06E-023.26E+006.95E+018.96E+021.65E-029.37E+004.67E+028.77E+03 - 93L3 122.001.28E-021.56E+002.88E+013.32E+021.05E-024.47E+001.86E+023.09E+03 - 93L3 145.007.37E-036.69E-011.05E+011.06E+026.28E-031.91E+006.52E+019.43E+02 - 93L3 170.004.46E-033.09E-014.15E+003.74E+013.92E-038.73E-012.51E+013.21E+02 - 93L3 235.001.62E-036.51E-026.46E-014.55E+001.51E-031.79E-013.75E+003.78E+01 - 93L3 320.006.29E-041.52E-021.14E-016.39E-016.11E-044.02E-026.43E-015.25E+00 - 93L3 410.003.00E-044.87E-032.93E-021.39E-012.99E-041.22E-021.62E-011.13E+00 - 93L3 520.001.50E-041.69E-038.33E-033.38E-021.52E-043.97E-034.43E-022.71E-01 - 93L3 750.005.43E-053.56E-041.32E-034.37E-035.52E-057.33E-046.37E-033.25E-02 - 93L31000.002.55E-051.14E-043.47E-049.91E-042.58E-052.06E-041.46E-036.56E-03 - 93L31500.009.66E-062.64E-056.29E-051.48E-049.53E-063.96E-051.97E-047.57E-04 - 93M1 6.721.27E+001.02E+046.05E+058.32E+062.61E+033.28E+068.94E+085.85E+10 - 93M1 7.721.10E+005.65E+033.43E+056.79E+061.72E+031.66E+063.65E+082.28E+10 - 93M1 9.728.26E-012.12E+031.32E+053.24E+068.66E+025.40E+058.36E+074.70E+09 - 93M1 13.725.00E-014.87E+023.05E+048.41E+053.09E+021.02E+059.60E+064.37E+08 - 93M1 20.722.51E-018.19E+014.90E+031.38E+059.05E+011.42E+047.72E+052.60E+07 - 93M1 29.001.36E-011.87E+011.03E+032.75E+043.33E+012.92E+031.05E+052.71E+06 - 93M1 44.006.01E-022.97E+001.42E+023.28E+039.70E+004.31E+029.57E+031.75E+05 - 93M1 56.003.67E-021.04E+004.41E+019.13E+024.76E+001.46E+022.51E+033.74E+04 - 93M1 74.002.04E-023.23E-011.14E+012.04E+022.10E+004.32E+015.55E+026.54E+03 - 93M1 107.009.18E-037.92E-021.96E+002.79E+017.19E-019.07E+008.15E+017.05E+02 - 93M1 155.004.09E-032.38E-023.70E-013.97E+002.48E-012.02E+001.30E+018.33E+01 - 93M1 285.001.11E-034.79E-033.40E-022.12E-014.44E-022.03E-018.06E-013.24E+00 - 93M1 500.003.66E-041.38E-035.77E-032.19E-029.48E-033.00E-028.22E-022.27E-01 - 93M2 6.362.70E+009.62E+057.68E+088.00E+103.86E+021.23E+058.63E+061.22E+08 - 93M2 7.362.29E+004.67E+052.98E+082.96E+102.50E+026.34E+044.24E+069.50E+07 - 93M2 9.361.63E+001.42E+056.39E+075.69E+091.22E+022.17E+041.30E+063.91E+07 - 93M2 13.368.71E-012.46E+046.78E+064.92E+084.22E+014.59E+032.25E+057.32E+06 - 93M2 20.363.65E-013.12E+035.05E+052.76E+071.21E+017.68E+022.85E+048.29E+05 - 93M2 29.001.62E-015.61E+025.98E+042.53E+064.25E+001.79E+025.15E+031.26E+05 - 93M2 44.005.76E-027.62E+015.14E+031.58E+051.25E+003.38E+017.13E+021.35E+04 - 93M2 56.003.08E-022.44E+011.28E+033.27E+046.23E-011.32E+012.32E+023.71E+03 - 93M2 74.001.46E-026.66E+002.64E+025.41E+032.79E-014.53E+006.43E+018.44E+02 - 93M2 107.005.32E-031.24E+003.43E+015.26E+029.73E-021.14E+001.22E+011.22E+02 - 93M2 155.001.91E-032.39E-014.72E+005.41E+013.42E-022.95E-012.39E+001.83E+01 - 93M2 285.003.58E-041.82E-022.14E-011.56E+006.30E-033.51E-021.84E-019.15E-01 - 93M2 500.008.16E-052.01E-031.55E-027.74E-021.35E-035.46E-032.01E-026.98E-02 - 93M3 5.439.80E+002.49E+062.29E+092.66E+113.41E+017.03E+065.71E+105.46E+13 - 93M3 6.437.26E+001.07E+067.52E+087.99E+102.04E+013.02E+061.77E+101.28E+13 - 93M3 8.434.28E+002.74E+051.28E+081.16E+109.00E+007.80E+052.73E+091.29E+12 - 93M3 12.431.84E+003.90E+041.05E+077.35E+082.77E+001.12E+051.90E+085.00E+10 - 93M3 19.436.22E-014.14E+036.15E+053.16E+077.16E-011.21E+049.08E+061.29E+09 - 93M3 29.002.17E-015.56E+025.06E+041.93E+062.13E-011.64E+036.14E+055.24E+07 - 93M3 44.006.78E-026.91E+013.90E+031.08E+056.04E-022.06E+023.89E+042.04E+06 - 93M3 56.003.36E-022.08E+019.00E+022.05E+042.92E-026.20E+018.09E+033.25E+05 - 93M3 74.001.47E-025.20E+001.68E+023.05E+031.27E-021.55E+011.35E+034.07E+04 - 93M3 107.004.78E-038.43E-011.85E+012.50E+024.21E-032.51E+001.33E+022.79E+03 - 93M3 155.001.53E-031.38E-012.09E+002.09E+011.40E-034.04E-011.37E+012.07E+02 - 93M3 285.002.39E-047.47E-036.34E-023.93E-012.36E-042.06E-023.80E-013.54E+00 - 93M3 500.004.57E-055.73E-042.96E-031.25E-024.72E-051.40E-031.65E-021.07E-01 - 93M4 4.852.48E+017.27E+041.87E+091.37E+131.04E+012.33E+059.08E+083.66E+11 - 93M4 5.851.41E+012.81E+045.02E+082.67E+125.69E+009.10E+042.56E+088.93E+10 - 93M4 7.855.64E+006.36E+036.37E+072.08E+112.20E+002.08E+043.57E+079.81E+09 - 93M4 11.851.45E+007.98E+023.54E+066.01E+095.71E-012.64E+032.33E+064.52E+08 - 93M4 18.852.87E-017.72E+011.36E+051.17E+081.22E-012.56E+021.13E+051.46E+07 - 93M4 29.005.95E-028.85E+006.67E+033.17E+062.83E-022.94E+017.12E+036.25E+05 - 93M4 44.001.23E-021.09E+003.66E+021.02E+056.72E-033.63E+005.15E+023.10E+04 - 93M4 56.004.81E-033.25E-016.88E+011.43E+042.89E-031.08E+001.15E+025.58E+03 - 93M4 74.001.61E-038.05E-021.01E+011.52E+031.08E-032.69E-012.07E+017.83E+02 - 93M4 107.003.72E-041.28E-028.27E-018.14E+012.88E-044.29E-022.21E+006.05E+01 - 93M4 155.008.47E-052.05E-037.02E-024.59E+007.51E-056.84E-032.42E-014.84E+00 - 93M4 285.007.57E-061.08E-041.44E-034.80E-027.99E-063.44E-047.03E-038.63E-02 - 93M4 500.008.63E-077.83E-065.18E-059.12E-049.87E-072.26E-053.00E-042.48E-03 - 93M5 4.663.83E+016.33E+044.44E+092.52E+135.90E+001.17E+045.38E+091.35E+14 - 93M5 5.662.11E+012.34E+041.13E+094.57E+123.16E+004.44E+031.38E+092.38E+13 - 93M5 7.668.06E+004.98E+031.35E+083.26E+111.19E+009.82E+021.67E+081.60E+12 - 93M5 11.661.96E+005.86E+027.05E+068.57E+093.02E-011.21E+028.82E+063.85E+10 - 93M5 18.663.69E-015.36E+012.57E+051.53E+086.39E-021.16E+013.30E+056.08E+08 - 93M5 29.007.13E-025.67E+001.15E+043.64E+061.46E-021.31E+001.52E+041.29E+07 - 93M5 44.001.42E-026.72E-016.06E+021.11E+053.52E-031.68E-018.26E+023.54E+05 - 93M5 56.005.47E-031.95E-011.11E+021.49E+041.53E-035.16E-021.54E+024.52E+04 - 93M5 74.001.79E-034.64E-021.56E+011.49E+035.80E-041.34E-022.20E+014.30E+03 - 93M5 107.004.06E-046.97E-031.18E+007.28E+011.59E-042.29E-031.70E+002.00E+02 - 93M5 155.009.12E-051.05E-038.92E-023.62E+004.29E-054.03E-041.30E-019.73E+00 - 93M5 285.008.24E-065.12E-051.38E-032.86E-025.01E-062.58E-051.99E-037.77E-02 - 93M5 500.001.03E-063.79E-063.52E-053.84E-047.35E-072.38E-064.60E-051.06E-03 - 93N+ 50.005.30E-023.07E+011.93E+038.64E+042.83E+001.49E+029.61E+034.66E+05 - 93N+ 70.002.17E-026.08E+002.59E+027.48E+031.05E+003.21E+011.18E+033.65E+04 - 93N+ 100.008.61E-031.14E+003.31E+016.34E+023.75E-016.72E+001.42E+022.77E+03 - 93N+ 150.003.02E-031.78E-013.43E+004.36E+011.16E-011.22E+001.44E+011.72E+02 - 93N+ 200.001.46E-035.01E-027.32E-017.16E+005.11E-023.81E-013.13E+002.69E+01 - 93N+ 500.001.80E-041.50E-039.29E-034.37E-024.04E-031.39E-024.60E-021.61E-01 - 94K 122.812.46E-011.61E-013.15E-021.38E-031.25E+015.28E+014.64E+019.55E+00 - 94K 123.512.43E-011.63E-013.74E-022.87E-031.23E+015.17E+014.69E+011.12E+01 - 94K 124.812.37E-011.69E-014.88E-026.79E-031.19E+015.00E+014.77E+011.44E+01 - 94K 128.012.24E-011.80E-017.73E-022.28E-021.11E+014.60E+014.89E+012.18E+01 - 94K 131.812.09E-011.89E-011.11E-015.28E-021.02E+014.17E+014.93E+012.98E+01 - 94K 136.001.95E-011.96E-011.46E-019.64E-029.31E+003.76E+014.88E+013.72E+01 - 94K 142.001.77E-012.01E-011.91E-011.72E-018.23E+003.26E+014.70E+014.52E+01 - 94K 150.001.56E-012.01E-012.39E-012.79E-017.04E+002.72E+014.34E+015.14E+01 - 94K 162.001.31E-011.93E-012.87E-014.28E-015.66E+002.11E+013.74E+015.40E+01 - 94K 175.001.09E-011.81E-013.12E-015.49E-014.55E+001.63E+013.13E+015.15E+01 - 94K 192.008.86E-021.62E-013.19E-016.40E-013.50E+001.20E+012.45E+014.49E+01 - 94K 205.007.64E-021.48E-013.11E-016.68E-012.91E+009.70E+002.03E+013.93E+01 - 94K 222.006.38E-021.31E-012.94E-016.69E-012.33E+007.48E+001.60E+013.24E+01 - 94K 245.005.12E-021.11E-012.65E-016.33E-011.77E+005.43E+001.18E+012.47E+01 - 94K 270.004.14E-029.45E-022.33E-015.72E-011.35E+003.98E+008.69E+001.84E+01 - 94K 335.002.61E-026.44E-021.65E-014.12E-017.45E-012.01E+004.32E+009.15E+00 - 94K 420.001.64E-024.28E-021.10E-012.66E-014.02E-011.01E+002.07E+004.22E+00 - 94K 510.001.12E-023.03E-027.60E-021.77E-012.38E-015.64E-011.11E+002.16E+00 - 94K 620.007.74E-032.14E-025.21E-021.15E-011.41E-013.21E-016.01E-011.11E+00 - 94K 850.004.38E-031.23E-022.83E-025.75E-026.12E-021.33E-012.32E-013.96E-01 - 94K 1100.002.81E-037.90E-031.72E-023.28E-023.10E-026.66E-021.11E-011.78E-01 - 94K 1350.001.99E-035.53E-031.17E-022.12E-021.80E-023.91E-026.31E-029.72E-02 - 94K 1600.001.50E-034.11E-038.45E-031.49E-021.15E-022.54E-024.02E-026.00E-02 - 94L1 24.106.71E-011.66E+022.29E+033.43E+032.66E+022.66E+045.85E+053.11E+06 - 94L1 24.806.43E-011.46E+022.27E+035.69E+032.44E+022.32E+045.04E+052.98E+06 - 94L1 26.105.94E-011.17E+022.13E+039.07E+032.10E+021.83E+043.85E+052.64E+06 - 94L1 29.304.95E-017.00E+011.64E+031.25E+041.49E+021.07E+042.10E+051.78E+06 - 94L1 33.104.05E-014.06E+011.11E+031.16E+041.04E+026.13E+031.11E+051.06E+06 - 94L1 36.003.50E-012.78E+018.15E+029.67E+038.08E+014.18E+037.14E+047.10E+05 - 94L1 42.002.66E-011.38E+014.39E+026.00E+035.12E+012.08E+033.19E+043.27E+05 - 94L1 50.001.91E-016.28E+002.07E+023.03E+033.06E+019.58E+021.29E+041.30E+05 - 94L1 62.001.25E-012.42E+007.79E+011.15E+031.63E+013.73E+024.27E+034.02E+04 - 94L1 75.008.52E-021.08E+003.22E+014.60E+029.32E+001.65E+021.63E+031.41E+04 - 94L1 92.005.55E-024.86E-011.25E+011.66E+025.14E+006.96E+015.87E+024.54E+03 - 94L1 105.004.19E-023.02E-016.80E+008.49E+013.50E+004.03E+013.07E+022.19E+03 - 94L1 122.003.04E-021.83E-013.47E+003.98E+012.27E+002.19E+011.49E+029.66E+02 - 94L1 145.002.09E-021.09E-011.64E+001.68E+011.38E+001.10E+016.55E+013.80E+02 - 94L1 170.001.48E-026.99E-028.51E-017.70E+008.77E-015.94E+003.13E+011.64E+02 - 94L1 235.007.40E-033.10E-022.49E-011.70E+003.51E-011.76E+007.36E+003.09E+01 - 94L1 320.003.91E-031.53E-028.78E-024.55E-011.48E-015.85E-011.99E+006.84E+00 - 94L1 410.002.39E-039.01E-034.14E-021.74E-017.50E-022.52E-017.37E-012.17E+00 - 94L1 520.001.52E-035.53E-032.13E-027.43E-023.93E-021.17E-012.98E-017.69E-01 - 94L1 750.007.90E-042.71E-038.36E-032.29E-021.47E-023.79E-028.17E-021.75E-01 - 94L11000.004.84E-041.58E-034.27E-031.01E-026.85E-031.65E-023.20E-026.05E-02 - 94L11500.002.48E-047.56E-041.76E-033.54E-032.34E-035.47E-039.50E-031.57E-02 - 94L2 23.261.59E+006.72E+035.47E+055.75E+063.47E+011.11E+037.91E+031.05E+04 - 94L2 23.961.48E+005.82E+034.65E+055.43E+063.17E+019.98E+027.88E+031.74E+04 - 94L2 25.261.29E+004.49E+033.47E+054.69E+062.72E+018.23E+027.51E+032.78E+04 - 94L2 28.469.53E-012.52E+031.80E+052.98E+061.91E+015.33E+025.97E+033.89E+04 - 94L2 32.266.86E-011.38E+038.97E+041.66E+061.32E+013.37E+024.23E+033.66E+04 - 94L2 36.005.12E-018.12E+024.88E+049.49E+059.55E+002.25E+022.97E+032.95E+04 - 94L2 42.003.37E-013.89E+022.08E+044.11E+056.07E+001.28E+021.72E+031.88E+04 - 94L2 50.002.09E-011.70E+027.90E+031.53E+053.65E+006.73E+018.89E+021.00E+04 - 94L2 62.001.14E-016.18E+012.41E+034.34E+041.95E+003.06E+013.78E+024.14E+03 - 94L2 75.006.67E-022.55E+018.51E+021.40E+041.13E+001.53E+011.73E+021.78E+03 - 94L2 92.003.72E-029.99E+002.81E+024.12E+036.28E-017.27E+007.40E+016.94E+02 - 94L2 105.002.55E-025.49E+001.38E+021.87E+034.31E-014.52E+004.26E+013.73E+02 - 94L2 122.001.66E-022.80E+006.22E+017.64E+022.81E-012.64E+002.27E+011.83E+02 - 94L2 145.001.01E-021.30E+002.51E+012.75E+021.73E-011.43E+001.10E+017.99E+01 - 94L2 170.006.43E-036.52E-011.10E+011.08E+021.11E-018.19E-015.70E+003.74E+01 - 94L2 235.002.58E-031.65E-012.14E+001.69E+014.51E-022.68E-011.51E+008.05E+00 - 94L2 320.001.10E-034.65E-024.78E-013.06E+001.92E-029.46E-024.38E-011.92E+00 - 94L2 410.005.69E-041.75E-021.50E-018.21E-019.77E-034.18E-021.67E-016.30E-01 - 94L2 520.003.07E-047.11E-035.19E-022.45E-015.11E-031.95E-026.79E-022.24E-01 - 94L2 750.001.23E-041.90E-031.10E-024.23E-021.88E-036.20E-031.80E-024.89E-02 - 94L21000.006.12E-057.15E-043.54E-031.18E-028.60E-042.60E-036.65E-031.59E-02 - 94L21500.002.40E-051.97E-048.02E-042.25E-032.82E-047.94E-041.76E-033.62E-03 - 94L3 19.053.84E+001.78E+041.90E+062.72E+073.10E+005.00E+043.39E+072.74E+09 - 94L3 19.753.47E+001.48E+041.53E+062.40E+072.78E+004.17E+042.66E+072.09E+09 - 94L3 21.052.89E+001.08E+041.05E+061.85E+072.28E+003.04E+041.73E+071.28E+09 - 94L3 24.251.92E+005.28E+034.50E+059.34E+061.48E+001.50E+046.69E+064.40E+08 - 94L3 28.051.26E+002.54E+031.89E+054.20E+069.50E-017.26E+032.53E+061.47E+08 - 94L3 36.005.97E-017.25E+024.25E+049.54E+054.43E-012.10E+034.86E+052.26E+07 - 94L3 42.003.74E-013.35E+021.70E+043.65E+052.77E-019.73E+021.77E+057.19E+06 - 94L3 50.002.19E-011.40E+025.99E+031.21E+051.63E-014.09E+025.68E+041.99E+06 - 94L3 62.001.12E-014.78E+011.67E+033.00E+048.50E-021.41E+021.42E+044.13E+05 - 94L3 75.006.17E-021.85E+015.38E+028.62E+034.78E-025.46E+014.24E+031.05E+05 - 94L3 92.003.23E-026.72E+001.61E+022.25E+032.58E-021.99E+011.17E+032.44E+04 - 94L3 105.002.13E-023.50E+007.36E+019.39E+021.74E-021.03E+015.17E+029.63E+03 - 94L3 122.001.32E-021.67E+003.05E+013.49E+021.11E-024.93E+002.05E+023.39E+03 - 94L3 145.007.65E-037.19E-011.11E+011.12E+026.62E-032.10E+007.19E+011.04E+03 - 94L3 170.004.63E-033.32E-014.41E+003.93E+014.13E-039.63E-012.77E+013.53E+02 - 94L3 235.001.69E-036.99E-026.86E-014.80E+001.59E-031.98E-014.13E+004.14E+01 - 94L3 320.006.55E-041.63E-021.21E-016.74E-016.43E-044.42E-027.07E-015.75E+00 - 94L3 410.003.12E-045.22E-033.12E-021.46E-013.15E-041.34E-021.78E-011.24E+00 - 94L3 520.001.57E-041.80E-038.86E-033.58E-021.60E-044.36E-034.86E-022.96E-01 - 94L3 750.005.66E-053.79E-041.41E-034.63E-035.80E-058.00E-046.98E-033.55E-02 - 94L31000.002.69E-051.21E-043.68E-041.05E-032.70E-052.24E-041.59E-037.18E-03 - 94L31500.001.01E-052.79E-056.67E-051.57E-049.95E-064.27E-052.15E-048.26E-04 - 94M1 6.931.18E+009.82E+035.72E+057.38E+062.64E+033.14E+068.18E+085.14E+10 - 94M1 7.931.03E+005.54E+033.29E+056.20E+061.76E+031.62E+063.42E+082.07E+10 - 94M1 9.937.84E-012.13E+031.29E+053.07E+069.00E+025.41E+058.14E+074.43E+09 - 94M1 13.934.81E-015.03E+023.06E+048.24E+053.28E+021.05E+059.72E+064.32E+08 - 94M1 20.932.45E-018.70E+015.03E+031.39E+059.73E+011.50E+048.06E+052.67E+07 - 94M1 29.001.35E-012.09E+011.12E+032.92E+043.69E+013.24E+031.16E+052.97E+06 - 94M1 44.006.04E-023.36E+001.55E+023.51E+031.07E+014.78E+021.06E+041.92E+05 - 94M1 56.003.70E-021.18E+004.85E+019.85E+025.28E+001.62E+022.76E+034.09E+04 - 94M1 74.002.06E-023.67E-011.26E+012.21E+022.33E+004.78E+016.11E+027.16E+03 - 94M1 107.009.33E-038.92E-022.19E+003.06E+017.97E-011.00E+018.95E+017.70E+02 - 94M1 155.004.17E-032.63E-024.12E-014.38E+002.74E-012.23E+001.43E+019.09E+01 - 94M1 285.001.14E-035.17E-033.75E-022.33E-014.90E-022.23E-018.82E-013.52E+00 - 94M1 500.003.81E-041.48E-036.28E-032.40E-021.05E-023.29E-028.97E-022.47E-01 - 94M2 6.542.53E+009.12E+056.97E+087.01E+103.99E+021.19E+058.07E+061.08E+08 - 94M2 7.542.16E+004.50E+052.78E+082.67E+102.61E+026.28E+044.05E+068.65E+07 - 94M2 9.541.56E+001.41E+056.16E+075.33E+091.29E+022.20E+041.28E+063.68E+07 - 94M2 13.548.50E-012.51E+046.79E+064.81E+084.55E+014.78E+032.27E+057.18E+06 - 94M2 20.543.63E-013.27E+035.20E+052.79E+071.32E+018.16E+022.95E+048.40E+05 - 94M2 29.001.65E-016.14E+026.51E+042.72E+064.79E+001.97E+025.59E+031.34E+05 - 94M2 44.005.95E-028.35E+015.60E+031.71E+051.41E+003.72E+017.74E+021.44E+04 - 94M2 56.003.19E-022.68E+011.39E+033.53E+047.01E-011.45E+012.52E+023.98E+03 - 94M2 74.001.52E-027.31E+002.88E+025.85E+033.14E-014.98E+006.99E+019.09E+02 - 94M2 107.005.59E-031.36E+003.75E+015.70E+021.10E-011.25E+001.33E+011.32E+02 - 94M2 155.002.02E-032.63E-015.16E+005.88E+013.86E-023.26E-012.61E+001.98E+01 - 94M2 285.003.82E-042.01E-022.35E-011.70E+007.12E-033.90E-022.02E-019.99E-01 - 94M2 500.008.77E-052.23E-031.71E-028.50E-021.53E-036.08E-032.22E-027.67E-02 - 94M3 5.569.39E+002.39E+062.12E+092.38E+113.35E+016.94E+065.45E+105.07E+13 - 94M3 6.567.00E+001.04E+067.11E+087.33E+102.03E+013.04E+061.73E+101.23E+13 - 94M3 8.564.17E+002.74E+051.25E+081.10E+109.09E+008.03E+052.76E+091.28E+12 - 94M3 12.561.81E+004.00E+041.05E+077.22E+082.84E+001.18E+051.99E+085.18E+10 - 94M3 19.566.23E-014.33E+036.32E+053.18E+077.42E-011.30E+049.73E+061.37E+09 - 94M3 29.002.22E-016.01E+025.41E+042.03E+062.25E-011.82E+036.87E+055.87E+07 - 94M3 44.006.96E-027.47E+014.17E+031.14E+056.39E-022.28E+024.35E+042.28E+06 - 94M3 56.003.46E-022.24E+019.61E+022.17E+043.09E-026.88E+019.03E+033.63E+05 - 94M3 74.001.52E-025.62E+001.79E+023.22E+031.34E-021.73E+011.51E+034.52E+04 - 94M3 107.004.96E-039.11E-011.98E+012.65E+024.45E-032.78E+001.48E+023.10E+03 - 94M3 155.001.59E-031.49E-012.23E+002.21E+011.49E-034.47E-011.52E+012.29E+02 - 94M3 285.002.49E-048.06E-036.77E-024.17E-012.49E-042.28E-024.21E-013.91E+00 - 94M3 500.004.81E-056.16E-043.17E-031.33E-024.99E-051.54E-031.82E-021.18E-01 - 94M4 4.972.37E+016.96E+041.72E+091.23E+131.02E+012.30E+058.62E+083.37E+11 - 94M4 5.971.37E+012.75E+044.74E+082.48E+125.66E+009.19E+042.50E+088.49E+10 - 94M4 7.975.55E+006.39E+036.24E+072.02E+112.23E+002.16E+043.61E+079.70E+09 - 94M4 11.971.46E+008.23E+023.60E+066.10E+095.89E-012.81E+032.44E+064.65E+08 - 94M4 18.972.94E-018.13E+011.42E+051.22E+081.27E-012.78E+021.21E+051.54E+07 - 94M4 29.006.25E-029.64E+007.29E+033.50E+063.03E-023.30E+017.95E+036.93E+05 - 94M4 44.001.30E-021.19E+004.00E+021.13E+057.22E-034.08E+005.74E+023.44E+04 - 94M4 56.005.10E-033.55E-017.52E+011.58E+043.11E-031.22E+001.28E+026.19E+03 - 94M4 74.001.71E-038.80E-021.11E+011.67E+031.16E-033.02E-012.30E+018.68E+02 - 94M4 107.003.97E-041.40E-029.05E-018.99E+013.11E-044.82E-022.46E+006.71E+01 - 94M4 155.009.08E-052.25E-037.69E-025.07E+008.12E-057.68E-032.70E-015.38E+00 - 94M4 285.008.17E-061.18E-041.57E-035.32E-028.65E-063.86E-047.86E-039.61E-02 - 94M4 500.009.36E-078.60E-065.68E-051.01E-031.07E-062.54E-053.36E-042.77E-03 - 94M5 4.773.66E+015.92E+044.13E+092.26E+135.78E+001.12E+045.14E+091.25E+14 - 94M5 5.772.05E+012.23E+041.09E+094.26E+123.14E+004.34E+031.36E+092.28E+13 - 94M5 7.777.94E+004.89E+031.34E+083.18E+111.20E+009.85E+021.70E+081.61E+12 - 94M5 11.771.97E+005.89E+027.25E+068.72E+093.10E-011.24E+029.31E+064.04E+10 - 94M5 18.773.77E-015.49E+012.71E+051.60E+086.65E-021.22E+013.57E+056.59E+08 - 94M5 29.007.48E-026.00E+001.26E+044.02E+061.55E-021.41E+001.71E+041.47E+07 - 94M5 44.001.50E-027.13E-016.68E+021.22E+053.74E-031.81E-019.32E+024.03E+05 - 94M5 56.005.78E-032.07E-011.22E+021.64E+041.63E-035.55E-021.73E+025.14E+04 - 94M5 74.001.90E-034.94E-021.72E+011.64E+036.19E-041.44E-022.49E+014.88E+03 - 94M5 107.004.31E-047.43E-031.30E+008.01E+011.70E-042.46E-031.91E+002.27E+02 - 94M5 155.009.68E-051.12E-039.83E-023.98E+004.59E-054.34E-041.47E-011.10E+01 - 94M5 285.008.66E-065.49E-051.52E-033.15E-025.37E-062.77E-052.23E-038.76E-02 - 94M5 500.001.10E-064.07E-063.85E-054.22E-047.87E-072.56E-065.13E-051.20E-03 - 94N+ 50.005.46E-023.36E+012.10E+039.39E+043.15E+001.66E+021.07E+045.23E+05 - 94N+ 70.002.24E-026.65E+002.82E+028.11E+031.17E+003.57E+011.32E+034.08E+04 - 94N+ 100.008.90E-031.25E+003.60E+016.87E+024.17E-017.46E+001.58E+023.08E+03 - 94N+ 150.003.13E-031.95E-013.75E+004.74E+011.29E-011.35E+001.59E+011.91E+02 - 94N+ 200.001.52E-035.51E-028.01E-017.80E+005.68E-024.22E-013.45E+002.97E+01 - 94N+ 500.001.89E-041.63E-031.02E-024.80E-024.49E-031.53E-025.06E-021.77E-01 - 95K 126.032.34E-011.49E-012.93E-021.27E-031.27E+015.13E+014.36E+018.71E+00 - 95K 126.732.31E-011.52E-013.47E-022.61E-031.25E+015.03E+014.40E+011.02E+01 - 95K 128.032.26E-011.57E-014.50E-026.12E-031.21E+014.87E+014.48E+011.30E+01 - 95K 131.232.13E-011.67E-017.10E-022.04E-021.13E+014.49E+014.60E+011.97E+01 - 95K 135.032.00E-011.76E-011.02E-014.71E-021.04E+014.08E+014.64E+012.69E+01 - 95K 139.001.87E-011.82E-011.33E-018.41E-029.57E+003.71E+014.61E+013.33E+01 - 95K 145.001.70E-011.87E-011.75E-011.52E-018.49E+003.23E+014.46E+014.08E+01 - 95K 153.001.51E-011.89E-012.20E-012.50E-017.29E+002.70E+014.15E+014.68E+01 - 95K 165.001.27E-011.83E-012.67E-013.89E-015.88E+002.11E+013.60E+014.98E+01 - 95K 178.001.07E-011.72E-012.94E-015.06E-014.75E+001.64E+013.03E+014.80E+01 - 95K 195.008.69E-021.56E-013.04E-015.98E-013.67E+001.22E+012.39E+014.24E+01 - 95K 208.007.51E-021.43E-012.99E-016.30E-013.06E+009.87E+002.00E+013.74E+01 - 95K 225.006.30E-021.28E-012.85E-016.37E-012.45E+007.65E+001.59E+013.11E+01 - 95K 248.005.09E-021.10E-012.59E-016.09E-011.87E+005.59E+001.18E+012.40E+01 - 95K 275.004.06E-029.25E-022.28E-015.52E-011.40E+004.02E+008.54E+001.77E+01 - 95K 340.002.59E-026.41E-021.64E-014.04E-017.83E-012.06E+004.32E+008.95E+00 - 95K 425.001.64E-024.33E-021.11E-012.66E-014.26E-011.04E+002.10E+004.21E+00 - 95K 520.001.11E-023.03E-027.59E-021.75E-012.47E-015.73E-011.10E+002.12E+00 - 95K 630.007.76E-032.17E-025.27E-021.16E-011.48E-013.29E-016.07E-011.11E+00 - 95K 860.004.45E-031.27E-022.90E-025.86E-026.46E-021.38E-012.39E-014.03E-01 - 95K 1150.002.71E-037.69E-031.67E-023.14E-023.00E-026.38E-021.05E-011.65E-01 - 95K 1400.001.95E-035.47E-031.15E-022.07E-021.78E-023.84E-026.12E-029.30E-02 - 95K 1650.001.49E-034.10E-038.42E-031.47E-021.15E-022.53E-023.97E-025.87E-02 - 95L1 24.776.34E-011.60E+022.11E+033.04E+032.72E+022.58E+045.47E+052.81E+06 - 95L1 25.476.08E-011.42E+022.10E+035.02E+032.50E+022.27E+044.73E+052.70E+06 - 95L1 26.775.63E-011.14E+021.98E+038.01E+032.16E+021.80E+043.64E+052.41E+06 - 95L1 29.974.72E-016.95E+011.54E+031.12E+041.54E+021.07E+042.02E+051.65E+06 - 95L1 33.773.88E-014.09E+011.06E+031.06E+041.08E+026.18E+031.08E+059.93E+05 - 95L1 37.003.32E-012.72E+017.63E+028.75E+038.26E+014.08E+036.72E+046.47E+05 - 95L1 43.002.54E-011.39E+014.20E+025.53E+035.30E+012.07E+033.07E+043.05E+05 - 95L1 51.001.84E-016.47E+002.02E+022.86E+033.20E+019.68E+021.27E+041.24E+05 - 95L1 63.001.22E-012.56E+007.82E+011.12E+031.72E+013.84E+024.28E+033.93E+04 - 95L1 76.008.35E-021.16E+003.30E+014.57E+029.94E+001.71E+021.66E+031.40E+04 - 95L1 93.005.49E-025.27E-011.30E+011.68E+025.52E+007.32E+016.06E+024.59E+03 - 95L1 106.004.16E-023.28E-017.19E+008.73E+013.78E+004.26E+013.19E+022.24E+03 - 95L1 123.003.03E-021.99E-013.70E+004.14E+012.46E+002.33E+011.56E+029.95E+02 - 95L1 146.002.09E-021.17E-011.77E+001.76E+011.50E+001.18E+016.90E+013.96E+02 - 95L1 175.001.42E-027.06E-028.39E-017.32E+008.95E-015.83E+002.99E+011.52E+02 - 95L1 240.007.27E-033.18E-022.54E-011.70E+003.66E-011.79E+007.31E+003.01E+01 - 95L1 325.003.91E-031.59E-029.14E-024.68E-011.57E-016.08E-012.03E+006.88E+00 - 95L1 410.002.47E-039.62E-034.50E-021.89E-018.29E-022.76E-018.02E-012.35E+00 - 95L1 520.001.58E-035.91E-032.30E-028.07E-024.34E-021.28E-013.25E-018.32E-01 - 95L1 750.008.24E-042.89E-039.01E-032.48E-021.62E-024.15E-028.88E-021.89E-01 - 95L11000.005.06E-041.69E-034.59E-031.09E-027.54E-031.81E-023.48E-026.56E-02 - 95L11500.002.60E-048.06E-041.90E-033.81E-032.57E-035.98E-031.03E-021.70E-02 - 95L2 23.941.51E+006.36E+034.96E+055.02E+063.57E+011.08E+037.36E+039.32E+03 - 95L2 24.641.41E+005.53E+034.23E+054.75E+063.28E+019.71E+027.34E+031.54E+04 - 95L2 25.941.23E+004.30E+033.19E+054.13E+062.82E+018.05E+027.03E+032.47E+04 - 95L2 29.149.19E-012.45E+031.68E+052.67E+062.00E+015.28E+025.66E+033.50E+04 - 95L2 32.946.68E-011.36E+038.54E+041.52E+061.39E+013.38E+024.06E+033.36E+04 - 95L2 37.004.91E-017.77E+024.49E+048.44E+059.89E+002.21E+022.81E+032.69E+04 - 95L2 43.003.27E-013.79E+021.96E+043.75E+056.37E+001.27E+021.65E+031.75E+04 - 95L2 51.002.05E-011.69E+027.62E+031.43E+053.87E+006.80E+018.69E+029.48E+03 - 95L2 63.001.14E-016.26E+012.38E+034.17E+042.10E+003.14E+013.76E+024.01E+03 - 95L2 76.006.71E-022.62E+018.55E+021.37E+041.22E+001.59E+011.75E+021.76E+03 - 95L2 93.003.78E-021.04E+012.87E+024.12E+036.85E-017.65E+007.60E+016.97E+02 - 95L2 106.002.61E-025.75E+001.42E+021.89E+034.72E-014.78E+004.41E+013.78E+02 - 95L2 123.001.70E-022.96E+006.46E+017.81E+023.10E-012.81E+002.37E+011.87E+02 - 95L2 146.001.05E-021.39E+002.63E+012.84E+021.91E-011.53E+001.16E+018.27E+01 - 95L2 175.006.26E-036.31E-011.03E+019.87E+011.15E-018.14E-015.48E+003.49E+01 - 95L2 240.002.59E-031.66E-012.11E+001.63E+014.80E-022.75E-011.51E+007.88E+00 - 95L2 325.001.13E-034.82E-024.86E-013.06E+002.08E-029.93E-024.51E-011.95E+00 - 95L2 410.006.11E-041.93E-021.65E-018.95E-011.10E-024.64E-021.83E-016.87E-01 - 95L2 520.003.30E-047.86E-035.71E-022.68E-015.78E-032.16E-027.47E-022.45E-01 - 95L2 750.001.33E-042.10E-031.22E-024.65E-022.13E-036.92E-031.99E-025.38E-02 - 95L21000.006.65E-057.93E-043.91E-031.30E-029.74E-042.91E-037.38E-031.75E-02 - 95L21500.002.61E-052.19E-048.91E-042.50E-033.19E-048.91E-041.96E-034.01E-03 - 95L3 19.503.67E+001.70E+041.75E+062.42E+073.04E+004.92E+043.22E+072.53E+09 - 95L3 20.203.32E+001.42E+041.42E+062.15E+072.73E+004.12E+042.54E+071.94E+09 - 95L3 21.502.77E+001.04E+049.75E+051.67E+072.25E+003.02E+041.67E+071.20E+09 - 95L3 24.701.86E+005.17E+034.26E+058.55E+061.47E+001.51E+046.58E+064.22E+08 - 95L3 28.501.23E+002.52E+031.81E+053.91E+069.53E-017.42E+032.53E+061.44E+08 - 95L3 37.005.64E-016.79E+023.82E+048.31E+054.30E-012.02E+034.50E+052.03E+07 - 95L3 43.003.58E-013.20E+021.56E+043.26E+052.72E-019.57E+021.68E+056.66E+06 - 95L3 51.002.12E-011.36E+025.64E+031.10E+051.62E-014.10E+025.54E+041.89E+06 - 95L3 63.001.10E-014.74E+011.60E+032.81E+048.53E-021.44E+021.42E+044.05E+05 - 95L3 76.006.11E-021.86E+015.27E+028.25E+034.84E-025.66E+014.31E+031.05E+05 - 95L3 93.003.23E-026.85E+001.60E+022.19E+032.63E-022.08E+011.21E+032.49E+04 - 95L3 106.002.14E-023.59E+007.38E+019.24E+021.78E-021.09E+015.38E+029.91E+03 - 95L3 123.001.33E-021.73E+003.08E+013.46E+021.14E-025.23E+002.16E+023.52E+03 - 95L3 146.007.77E-037.47E-011.13E+011.12E+026.83E-032.25E+007.61E+011.08E+03 - 95L3 175.004.39E-033.09E-013.95E+003.42E+013.99E-039.22E-012.57E+013.19E+02 - 95L3 240.001.64E-036.79E-026.47E-014.41E+001.57E-031.97E-014.03E+003.96E+01 - 95L3 325.006.52E-041.63E-021.18E-016.46E-016.47E-044.52E-027.12E-015.72E+00 - 95L3 410.003.26E-045.59E-033.32E-021.55E-013.31E-041.48E-021.95E-011.36E+00 - 95L3 520.001.64E-041.93E-039.41E-033.79E-021.68E-044.79E-035.34E-023.24E-01 - 95L3 750.005.93E-054.04E-041.50E-034.92E-036.09E-058.76E-047.66E-033.88E-02 - 95L31000.002.80E-051.28E-043.91E-041.12E-032.83E-052.44E-041.75E-037.85E-03 - 95L31500.001.05E-052.94E-057.07E-051.67E-041.04E-054.61E-052.35E-049.02E-04 - 95M1 7.121.12E+009.66E+035.54E+056.80E+062.70E+033.06E+067.68E+084.67E+10 - 95M1 8.129.76E-015.52E+033.23E+055.84E+061.83E+031.61E+063.29E+081.92E+10 - 95M1 10.127.49E-012.17E+031.29E+052.98E+069.45E+025.50E+058.05E+074.27E+09 - 95M1 14.124.65E-015.24E+023.11E+048.21E+053.50E+021.10E+059.95E+064.32E+08 - 95M1 21.122.40E-019.29E+015.22E+031.41E+051.05E+021.60E+048.48E+052.76E+07 - 95M1 29.001.35E-012.34E+011.22E+033.11E+044.10E+013.61E+031.29E+053.27E+06 - 95M1 44.006.06E-023.80E+001.70E+023.78E+031.19E+015.30E+021.17E+042.11E+05 - 95M1 56.003.73E-021.34E+005.33E+011.07E+035.87E+001.80E+023.05E+034.49E+04 - 95M1 74.002.09E-024.18E-011.40E+012.41E+022.59E+005.29E+016.73E+027.85E+03 - 95M1 107.009.48E-031.01E-012.44E+003.35E+018.85E-011.11E+019.84E+018.43E+02 - 95M1 155.004.26E-032.92E-024.61E-014.84E+003.04E-012.46E+001.57E+019.93E+01 - 95M1 285.001.18E-035.60E-034.15E-022.58E-015.44E-022.46E-019.65E-013.84E+00 - 95M1 500.003.96E-041.59E-036.86E-032.63E-021.16E-023.61E-029.80E-022.69E-01 - 95M2 6.712.40E+008.80E+056.50E+086.36E+104.16E+021.19E+057.75E+061.00E+08 - 95M2 7.712.06E+004.42E+052.65E+082.48E+102.75E+026.33E+043.95E+068.12E+07 - 95M2 9.711.50E+001.41E+056.05E+075.11E+091.38E+022.26E+041.28E+063.55E+07 - 95M2 13.718.33E-012.59E+046.88E+064.77E+084.95E+015.02E+032.33E+057.15E+06 - 95M2 20.713.62E-013.44E+035.41E+052.86E+071.46E+018.71E+023.09E+048.60E+05 - 95M2 29.001.69E-016.73E+027.10E+042.94E+065.40E+002.18E+026.08E+031.44E+05 - 95M2 44.006.14E-029.16E+016.10E+031.85E+051.59E+004.10E+018.42E+021.55E+04 - 95M2 56.003.31E-022.94E+011.52E+033.81E+047.92E-011.60E+012.74E+024.29E+03 - 95M2 74.001.59E-028.03E+003.14E+026.33E+033.55E-015.50E+007.62E+019.81E+02 - 95M2 107.005.87E-031.50E+004.09E+016.18E+021.24E-011.39E+001.45E+011.43E+02 - 95M2 155.002.13E-032.90E-015.65E+006.40E+014.37E-023.61E-012.86E+002.15E+01 - 95M2 285.004.08E-042.22E-022.59E-011.86E+008.06E-034.33E-022.22E-011.09E+00 - 95M2 500.009.46E-052.47E-031.89E-029.35E-021.74E-036.78E-032.45E-028.43E-02 - 95M3 5.679.12E+002.34E+062.01E+092.21E+113.34E+017.00E+065.35E+104.88E+13 - 95M3 6.676.83E+001.04E+066.88E+086.94E+102.04E+013.11E+061.74E+101.21E+13 - 95M3 8.674.10E+002.78E+051.24E+081.07E+109.24E+008.39E+052.84E+091.31E+12 - 95M3 12.671.80E+004.14E+041.07E+077.20E+082.93E+001.26E+052.10E+085.45E+10 - 95M3 19.676.26E-014.55E+036.54E+053.24E+077.72E-011.40E+041.05E+071.48E+09 - 95M3 29.002.27E-016.49E+025.79E+042.15E+062.38E-012.02E+037.69E+056.58E+07 - 95M3 44.007.16E-028.07E+014.45E+031.20E+056.76E-022.54E+024.86E+042.55E+06 - 95M3 56.003.57E-022.43E+011.03E+032.29E+043.27E-027.65E+011.01E+044.05E+05 - 95M3 74.001.57E-026.08E+001.91E+023.40E+031.42E-021.92E+011.68E+035.04E+04 - 95M3 107.005.14E-039.84E-012.11E+012.80E+024.71E-033.09E+001.64E+023.44E+03 - 95M3 155.001.65E-031.61E-012.38E+002.34E+011.57E-034.97E-011.69E+012.54E+02 - 95M3 285.002.60E-048.69E-037.23E-024.42E-012.64E-042.53E-024.66E-014.32E+00 - 95M3 500.005.04E-056.63E-043.38E-031.41E-025.27E-051.70E-032.02E-021.30E-01 - 95M4 5.092.27E+016.68E+041.58E+091.10E+131.00E+012.29E+058.20E+083.11E+11 - 95M4 6.091.32E+012.70E+044.48E+082.30E+125.64E+009.30E+042.45E+088.09E+10 - 95M4 8.095.47E+006.43E+036.11E+071.96E+112.25E+002.24E+043.65E+079.61E+09 - 95M4 12.091.46E+008.50E+023.65E+066.19E+096.07E-012.99E+032.55E+064.78E+08 - 95M4 19.093.00E-018.56E+011.48E+051.28E+081.33E-013.02E+021.30E+051.63E+07 - 95M4 29.006.57E-021.05E+017.96E+033.87E+063.24E-023.71E+018.87E+037.68E+05 - 95M4 44.001.37E-021.30E+004.36E+021.24E+057.74E-034.58E+006.40E+023.81E+04 - 95M4 56.005.40E-033.88E-018.22E+011.74E+043.34E-031.37E+001.43E+026.85E+03 - 95M4 74.001.82E-039.62E-021.21E+011.85E+031.25E-033.40E-012.57E+019.63E+02 - 95M4 107.004.24E-041.53E-029.89E-019.93E+013.35E-045.41E-022.74E+007.44E+01 - 95M4 155.009.72E-052.47E-038.41E-025.60E+008.77E-058.63E-033.02E-015.97E+00 - 95M4 285.008.77E-061.30E-041.72E-035.88E-029.37E-064.34E-048.78E-031.07E-01 - 95M4 500.001.00E-069.48E-066.22E-051.12E-031.16E-062.85E-053.76E-043.09E-03 - 95M5 4.893.50E+015.55E+043.86E+092.04E+135.67E+001.08E+044.94E+091.16E+14 - 95M5 5.891.98E+012.14E+041.04E+093.99E+123.12E+004.25E+031.34E+092.20E+13 - 95M5 7.897.82E+004.80E+031.34E+083.10E+111.21E+009.88E+021.74E+081.62E+12 - 95M5 11.891.98E+005.93E+027.47E+068.88E+093.18E-011.28E+029.84E+064.24E+10 - 95M5 18.893.85E-015.63E+012.86E+051.68E+086.91E-021.27E+013.87E+057.13E+08 - 95M5 29.007.83E-026.34E+001.39E+044.42E+061.64E-021.52E+001.93E+041.68E+07 - 95M5 44.001.57E-027.55E-017.37E+021.34E+053.98E-031.94E-011.05E+034.58E+05 - 95M5 56.006.09E-032.19E-011.35E+021.80E+041.74E-035.98E-021.96E+025.84E+04 - 95M5 74.002.01E-035.24E-021.90E+011.80E+036.60E-041.55E-022.81E+015.54E+03 - 95M5 107.004.57E-047.91E-031.43E+008.80E+011.81E-042.65E-032.16E+002.57E+02 - 95M5 155.001.03E-041.20E-031.08E-014.38E+004.90E-054.66E-041.65E-011.24E+01 - 95M5 285.009.27E-065.87E-051.67E-033.46E-025.74E-062.98E-052.51E-039.87E-02 - 95M5 500.001.18E-064.36E-064.22E-054.63E-048.42E-072.75E-065.73E-051.34E-03 - 95N+ 50.005.67E-023.72E+012.32E+031.04E+053.55E+001.87E+021.22E+045.97E+05 - 95N+ 70.002.33E-027.37E+003.11E+028.94E+031.32E+004.01E+011.49E+034.63E+04 - 95N+ 100.009.28E-031.39E+003.97E+017.56E+024.69E-018.36E+001.78E+023.48E+03 - 95N+ 150.003.28E-032.17E-014.14E+005.22E+011.46E-011.51E+001.79E+012.14E+02 - 95N+ 200.001.59E-036.12E-028.87E-018.60E+006.39E-024.71E-013.86E+003.33E+01 - 95N+ 500.001.99E-041.81E-031.14E-025.34E-025.03E-031.71E-025.62E-021.96E-01 - 96K 129.272.23E-011.39E-012.75E-021.18E-031.29E+015.00E+014.11E+017.97E+00 - 96K 129.972.20E-011.41E-013.24E-022.39E-031.27E+014.90E+014.14E+019.30E+00 - 96K 131.272.15E-011.46E-014.18E-025.56E-031.23E+014.75E+014.22E+011.18E+01 - 96K 134.472.04E-011.56E-016.57E-021.84E-021.15E+014.39E+014.33E+011.78E+01 - 96K 138.271.91E-011.64E-019.41E-024.23E-021.06E+014.00E+014.38E+012.43E+01 - 96K 142.001.80E-011.70E-011.21E-017.34E-029.85E+003.67E+014.36E+012.98E+01 - 96K 148.001.64E-011.76E-011.60E-011.34E-018.75E+003.20E+014.24E+013.68E+01 - 96K 156.001.46E-011.78E-012.04E-012.24E-017.54E+002.70E+013.96E+014.27E+01 - 96K 168.001.23E-011.74E-012.50E-013.54E-016.11E+002.11E+013.47E+014.60E+01 - 96K 181.001.04E-011.65E-012.78E-014.67E-014.95E+001.66E+012.94E+014.48E+01 - 96K 198.008.53E-021.50E-012.90E-015.59E-013.84E+001.24E+012.35E+014.00E+01 - 96K 211.007.40E-021.39E-012.88E-015.95E-013.21E+001.00E+011.97E+013.56E+01 - 96K 228.006.23E-021.25E-012.76E-016.07E-012.58E+007.82E+001.58E+012.99E+01 - 96K 251.005.05E-021.08E-012.54E-015.87E-011.98E+005.75E+001.18E+012.33E+01 - 96K 280.003.99E-029.08E-022.23E-015.33E-011.46E+004.06E+008.41E+001.70E+01 - 96K 345.002.57E-026.39E-021.63E-013.97E-018.21E-012.11E+004.32E+008.76E+00 - 96K 430.001.65E-024.37E-021.12E-012.66E-014.50E-011.08E+002.13E+004.20E+00 - 96K 520.001.14E-023.15E-027.88E-021.80E-012.69E-016.15E-011.17E+002.21E+00 - 96K 630.008.02E-032.26E-025.50E-021.20E-011.61E-013.54E-016.44E-011.16E+00 - 96K 860.004.62E-031.33E-023.05E-026.13E-027.03E-021.49E-012.55E-014.26E-01 - 96K 1150.002.81E-038.08E-031.76E-023.30E-023.25E-026.87E-021.12E-011.75E-01 - 96K 1400.002.03E-035.75E-031.21E-022.18E-021.93E-024.13E-026.54E-029.88E-02 - 96K 1650.001.55E-034.32E-038.90E-031.55E-021.24E-022.72E-024.24E-026.24E-02 - 96L1 25.525.94E-011.53E+021.93E+032.66E+032.75E+022.48E+045.04E+052.50E+06 - 96L1 26.225.71E-011.36E+021.91E+034.36E+032.54E+022.19E+044.38E+052.40E+06 - 96L1 27.525.31E-011.10E+021.82E+036.98E+032.20E+021.75E+043.40E+052.15E+06 - 96L1 30.724.47E-016.83E+011.43E+039.93E+031.59E+021.05E+041.92E+051.50E+06 - 96L1 34.523.70E-014.09E+011.00E+039.51E+031.12E+026.17E+031.04E+059.20E+05 - 96L1 38.003.14E-012.68E+017.13E+027.88E+038.45E+013.98E+036.32E+045.88E+05 - 96L1 44.002.42E-011.39E+014.01E+025.08E+035.48E+012.06E+032.95E+042.83E+05 - 96L1 52.001.77E-016.66E+001.98E+022.69E+033.35E+019.78E+021.24E+041.18E+05 - 96L1 64.001.19E-012.70E+007.85E+011.09E+031.82E+013.94E+024.29E+033.84E+04 - 96L1 77.008.18E-021.25E+003.38E+014.53E+021.06E+011.78E+021.68E+031.39E+04 - 96L1 94.005.42E-025.71E-011.36E+011.71E+025.92E+007.69E+016.24E+024.64E+03 - 96L1 107.004.13E-023.56E-017.58E+008.95E+014.07E+004.51E+013.31E+022.28E+03 - 96L1 124.003.02E-022.16E-013.94E+004.29E+012.66E+002.48E+011.63E+021.02E+03 - 96L1 147.002.10E-021.27E-011.90E+001.85E+011.63E+001.26E+017.27E+014.10E+02 - 96L1 175.001.45E-027.72E-029.26E-017.98E+009.90E-016.39E+003.24E+011.64E+02 - 96L1 240.007.46E-033.44E-022.79E-011.85E+004.05E-011.96E+007.94E+003.25E+01 - 96L1 325.004.03E-031.70E-029.98E-025.10E-011.74E-016.65E-012.21E+007.43E+00 - 96L1 410.002.56E-031.03E-024.89E-022.06E-019.16E-023.02E-018.71E-012.54E+00 - 96L1 520.001.64E-036.31E-032.49E-028.76E-024.79E-021.40E-013.53E-019.00E-01 - 96L1 750.008.60E-043.08E-039.72E-032.68E-021.79E-024.53E-029.65E-022.05E-01 - 96L11000.005.29E-041.80E-034.94E-031.17E-028.29E-031.97E-023.78E-027.10E-02 - 96L11500.002.73E-048.60E-042.04E-034.10E-032.81E-036.53E-031.12E-021.85E-02 - 96L2 24.651.43E+006.01E+034.49E+054.38E+063.68E+011.04E+036.84E+038.32E+03 - 96L2 25.351.34E+005.25E+033.85E+054.15E+063.38E+019.44E+026.83E+031.36E+04 - 96L2 26.651.18E+004.11E+032.92E+053.64E+062.92E+017.87E+026.56E+032.19E+04 - 96L2 29.858.85E-012.38E+031.57E+052.39E+062.09E+015.23E+025.34E+033.15E+04 - 96L2 33.656.49E-011.34E+038.11E+041.39E+061.47E+013.38E+023.89E+033.07E+04 - 96L2 38.004.71E-017.45E+024.15E+047.53E+051.03E+012.17E+022.65E+032.46E+04 - 96L2 44.003.18E-013.71E+021.85E+043.42E+056.69E+001.27E+021.59E+031.62E+04 - 96L2 52.002.01E-011.68E+027.35E+031.34E+054.11E+006.89E+018.50E+028.97E+03 - 96L2 64.001.13E-016.35E+012.35E+034.01E+042.25E+003.23E+013.75E+023.88E+03 - 96L2 77.006.75E-022.70E+018.60E+021.35E+041.32E+001.65E+011.77E+021.73E+03 - 96L2 94.003.84E-021.08E+012.93E+024.12E+037.48E-018.05E+007.80E+016.99E+02 - 96L2 107.002.66E-026.03E+001.47E+021.91E+035.18E-015.06E+004.56E+013.83E+02 - 96L2 124.001.75E-023.12E+006.71E+017.98E+023.41E-013.00E+002.47E+011.91E+02 - 96L2 147.001.08E-021.47E+002.76E+012.93E+022.11E-011.64E+001.22E+018.56E+01 - 96L2 175.006.62E-036.93E-011.12E+011.06E+021.30E-018.95E-015.94E+003.75E+01 - 96L2 240.002.75E-031.82E-012.30E+001.76E+015.42E-023.03E-011.64E+008.50E+00 - 96L2 325.001.21E-035.31E-025.33E-013.33E+002.35E-021.10E-014.93E-012.11E+00 - 96L2 410.006.55E-042.13E-021.81E-019.76E-011.25E-025.14E-022.01E-017.48E-01 - 96L2 520.003.55E-048.68E-036.28E-022.93E-016.54E-032.40E-028.22E-022.67E-01 - 96L2 750.001.44E-042.33E-031.34E-025.11E-022.42E-037.71E-032.20E-025.90E-02 - 96L21000.007.23E-058.80E-044.33E-031.43E-021.10E-033.25E-038.18E-031.93E-02 - 96L21500.002.85E-052.43E-049.90E-042.76E-033.61E-049.99E-042.18E-034.44E-03 - 96L3 19.973.50E+001.62E+041.60E+062.16E+072.98E+004.83E+043.05E+072.33E+09 - 96L3 20.673.17E+001.36E+041.30E+061.92E+072.68E+004.06E+042.42E+071.80E+09 - 96L3 21.972.66E+001.00E+049.05E+051.50E+072.22E+003.00E+041.60E+071.13E+09 - 96L3 25.171.80E+005.06E+034.02E+057.80E+061.47E+001.52E+046.44E+064.04E+08 - 96L3 28.971.20E+002.50E+031.74E+053.63E+069.54E-017.56E+032.52E+061.40E+08 - 96L3 38.005.34E-016.39E+023.44E+047.26E+054.17E-011.96E+034.19E+051.84E+07 - 96L3 44.003.42E-013.06E+021.44E+042.92E+052.67E-019.43E+021.60E+056.18E+06 - 96L3 52.002.05E-011.33E+025.31E+031.01E+051.61E-014.11E+025.41E+041.81E+06 - 96L3 64.001.08E-014.71E+011.54E+032.64E+048.56E-021.47E+021.42E+043.97E+05 - 96L3 77.006.05E-021.88E+015.16E+027.90E+034.90E-025.86E+014.39E+031.05E+05 - 96L3 94.003.23E-026.98E+001.59E+022.13E+032.68E-022.18E+011.25E+032.53E+04 - 96L3 107.002.14E-023.68E+007.40E+019.08E+021.82E-021.15E+015.61E+021.02E+04 - 96L3 124.001.35E-021.78E+003.11E+013.44E+021.17E-025.55E+002.27E+023.65E+03 - 96L3 147.007.88E-037.76E-011.15E+011.12E+027.05E-032.40E+008.06E+011.14E+03 - 96L3 175.004.56E-033.32E-014.19E+003.59E+014.20E-031.02E+002.83E+013.49E+02 - 96L3 240.001.71E-037.29E-026.86E-014.64E+001.65E-032.17E-014.43E+004.34E+01 - 96L3 325.006.78E-041.75E-021.25E-016.81E-016.81E-044.97E-027.83E-016.26E+00 - 96L3 410.003.41E-045.99E-033.52E-021.63E-013.48E-041.63E-022.14E-011.48E+00 - 96L3 520.001.71E-042.06E-031.00E-024.00E-021.77E-045.25E-035.86E-023.55E-01 - 96L3 750.006.19E-054.31E-041.59E-035.21E-036.39E-059.57E-048.40E-034.25E-02 - 96L31000.002.92E-051.36E-044.15E-041.19E-032.97E-052.65E-041.91E-038.57E-03 - 96L31500.001.10E-053.11E-057.49E-051.77E-041.09E-054.97E-052.57E-049.85E-04 - 96M1 7.331.05E+009.44E+035.32E+056.23E+062.76E+032.96E+067.14E+084.19E+10 - 96M1 8.339.24E-015.47E+033.14E+055.46E+061.88E+031.58E+063.12E+081.77E+10 - 96M1 10.337.13E-012.19E+031.28E+052.88E+069.88E+025.55E+057.90E+074.07E+09 - 96M1 14.334.48E-015.44E+023.15E+048.13E+053.72E+021.14E+051.01E+074.30E+08 - 96M1 21.332.34E-019.89E+015.40E+031.43E+051.14E+021.70E+048.88E+052.84E+07 - 96M1 29.001.35E-012.61E+011.32E+033.31E+044.56E+014.00E+031.43E+053.59E+06 - 96M1 44.006.09E-024.28E+001.86E+024.06E+031.33E+015.88E+021.29E+042.31E+05 - 96M1 56.003.75E-021.52E+005.86E+011.15E+036.51E+001.99E+023.36E+034.93E+04 - 96M1 74.002.11E-024.75E-011.54E+012.62E+022.88E+005.85E+017.41E+028.59E+03 - 96M1 107.009.64E-031.14E-012.71E+003.68E+019.82E-011.22E+011.08E+029.22E+02 - 96M1 155.004.36E-033.25E-025.13E-015.33E+003.38E-012.71E+001.72E+011.09E+02 - 96M1 285.001.22E-036.07E-034.59E-022.84E-016.03E-022.71E-011.06E+004.19E+00 - 96M1 500.004.11E-041.70E-037.48E-032.88E-021.28E-023.96E-021.07E-012.93E-01 - 96M2 6.942.21E+008.15E+055.72E+085.35E+104.24E+021.13E+057.03E+068.67E+07 - 96M2 7.941.92E+004.18E+052.40E+082.15E+102.84E+026.14E+043.66E+067.16E+07 - 96M2 9.941.42E+001.38E+055.69E+074.64E+091.45E+022.26E+041.22E+063.25E+07 - 96M2 13.948.05E-012.61E+046.76E+064.56E+085.31E+015.16E+032.32E+056.86E+06 - 96M2 20.943.57E-013.57E+035.51E+052.84E+071.59E+019.18E+023.17E+048.59E+05 - 96M2 29.001.73E-017.37E+027.73E+043.16E+066.09E+002.40E+026.58E+031.53E+05 - 96M2 44.006.32E-021.00E+026.64E+031.99E+051.80E+004.51E+019.14E+021.66E+04 - 96M2 56.003.43E-023.22E+011.66E+034.11E+048.94E-011.76E+012.97E+024.60E+03 - 96M2 74.001.65E-028.81E+003.42E+026.84E+034.01E-016.06E+008.28E+011.06E+03 - 96M2 107.006.15E-031.64E+004.47E+016.70E+021.40E-011.53E+001.58E+011.54E+02 - 96M2 155.002.25E-033.19E-016.18E+006.95E+014.94E-023.99E-013.13E+002.33E+01 - 96M2 285.004.36E-042.45E-022.84E-012.03E+009.14E-034.80E-022.44E-011.19E+00 - 96M2 500.001.02E-042.74E-032.09E-021.03E-011.97E-037.56E-032.71E-029.25E-02 - 96M3 5.848.59E+002.18E+061.78E+091.87E+113.23E+016.71E+064.89E+104.28E+13 - 96M3 6.846.49E+009.86E+056.26E+086.07E+102.00E+013.05E+061.64E+101.10E+13 - 96M3 8.843.95E+002.72E+051.17E+089.77E+099.20E+008.45E+052.79E+091.25E+12 - 96M3 12.841.76E+004.18E+041.05E+076.89E+082.97E+001.31E+052.15E+085.49E+10 - 96M3 19.846.22E-014.71E+036.62E+053.20E+077.94E-011.49E+041.11E+071.54E+09 - 96M3 29.002.32E-017.02E+026.18E+042.26E+062.52E-012.25E+038.60E+057.36E+07 - 96M3 44.007.34E-028.73E+014.75E+031.26E+057.14E-022.82E+025.42E+042.84E+06 - 96M3 56.003.67E-022.62E+011.09E+032.41E+043.45E-028.50E+011.12E+044.50E+05 - 96M3 74.001.62E-026.57E+002.04E+023.59E+031.50E-022.13E+011.87E+035.60E+04 - 96M3 107.005.32E-031.06E+002.25E+012.95E+024.98E-033.43E+001.83E+023.81E+03 - 96M3 155.001.72E-031.74E-012.54E+002.47E+011.66E-035.51E-011.88E+012.81E+02 - 96M3 285.002.72E-049.38E-037.72E-024.69E-012.79E-042.80E-025.16E-014.77E+00 - 96M3 500.005.30E-057.13E-043.62E-031.50E-025.56E-051.87E-032.23E-021.43E-01 - 96M4 5.222.16E+016.38E+041.44E+099.80E+129.82E+002.25E+057.75E+082.85E+11 - 96M4 6.221.28E+012.63E+044.20E+082.12E+125.60E+009.37E+042.38E+087.65E+10 - 96M4 8.225.37E+006.44E+035.95E+071.89E+112.28E+002.32E+043.67E+079.45E+09 - 96M4 12.221.46E+008.76E+023.69E+066.25E+096.24E-013.18E+032.66E+064.89E+08 - 96M4 19.223.06E-019.00E+011.54E+051.34E+081.39E-013.28E+021.38E+051.72E+07 - 96M4 29.006.90E-021.14E+018.69E+034.27E+063.47E-024.16E+019.89E+038.51E+05 - 96M4 44.001.44E-021.42E+004.76E+021.37E+058.29E-035.14E+007.13E+024.22E+04 - 96M4 56.005.72E-034.24E-018.97E+011.92E+043.58E-031.54E+001.59E+027.59E+03 - 96M4 74.001.93E-031.05E-011.32E+012.04E+031.34E-033.81E-012.86E+011.07E+03 - 96M4 107.004.51E-041.68E-021.08E+001.10E+023.61E-046.08E-023.06E+008.25E+01 - 96M4 155.001.04E-042.71E-039.18E-026.18E+009.46E-059.70E-033.36E-016.62E+00 - 96M4 285.009.49E-061.43E-041.88E-036.50E-021.01E-054.87E-049.80E-031.19E-01 - 96M4 500.001.08E-061.04E-056.81E-051.24E-031.26E-063.20E-054.20E-043.44E-03 - 96M5 5.003.35E+015.19E+043.59E+091.84E+135.54E+001.03E+044.72E+091.07E+14 - 96M5 6.001.92E+012.04E+049.99E+083.71E+123.09E+004.15E+031.32E+092.10E+13 - 96M5 8.007.69E+004.69E+031.33E+083.01E+111.22E+009.89E+021.77E+081.62E+12 - 96M5 12.001.98E+005.95E+027.67E+069.00E+093.26E-011.31E+021.04E+074.43E+10 - 96M5 19.003.92E-015.76E+013.02E+051.75E+087.17E-021.33E+014.17E+057.70E+08 - 96M5 29.008.20E-026.71E+001.53E+044.86E+061.74E-021.63E+002.18E+041.91E+07 - 96M5 44.001.66E-027.99E-018.12E+021.47E+054.23E-032.09E-011.19E+035.21E+05 - 96M5 56.006.42E-032.32E-011.49E+021.98E+041.85E-036.43E-022.21E+026.63E+04 - 96M5 74.002.12E-035.56E-022.09E+011.98E+037.02E-041.66E-023.16E+016.28E+03 - 96M5 107.004.83E-048.41E-031.58E+009.66E+011.93E-042.85E-032.43E+002.91E+02 - 96M5 155.001.09E-041.28E-031.19E-014.81E+005.23E-055.01E-041.86E-011.41E+01 - 96M5 285.001.00E-056.27E-051.84E-033.80E-026.14E-063.20E-052.81E-031.11E-01 - 96M5 500.001.22E-064.67E-064.62E-055.09E-048.99E-072.95E-066.40E-051.51E-03 - 96N+ 50.005.72E-024.08E+012.53E+031.17E+053.97E+002.08E+021.37E+046.82E+05 - 96N+ 70.002.39E-028.11E+003.40E+029.97E+031.47E+004.47E+011.67E+035.25E+04 - 96N+ 100.009.57E-031.53E+004.35E+018.33E+025.25E-019.31E+001.98E+023.92E+03 - 96N+ 150.003.41E-032.39E-014.54E+005.73E+011.63E-011.67E+001.99E+012.40E+02 - 96N+ 200.001.66E-036.75E-029.75E-019.44E+007.15E-025.23E-014.29E+003.71E+01 - 96N+ 500.002.11E-041.99E-031.26E-025.89E-025.61E-031.89E-026.20E-022.16E-01 - 97K 132.602.12E-011.30E-012.58E-021.09E-031.31E+014.87E+013.86E+017.28E+00 - 97K 133.302.09E-011.32E-013.03E-022.19E-031.29E+014.78E+013.90E+018.47E+00 - 97K 134.602.05E-011.36E-013.90E-025.05E-031.26E+014.63E+013.97E+011.07E+01 - 97K 137.801.94E-011.45E-016.09E-021.66E-021.18E+014.29E+014.08E+011.61E+01 - 97K 141.601.83E-011.53E-018.71E-023.81E-021.09E+013.93E+014.13E+012.20E+01 - 97K 146.001.71E-011.60E-011.16E-017.17E-029.97E+003.55E+014.12E+012.78E+01 - 97K 152.001.56E-011.65E-011.53E-011.28E-018.89E+003.11E+014.00E+013.40E+01 - 97K 160.001.39E-011.68E-011.93E-012.11E-017.68E+002.64E+013.76E+013.93E+01 - 97K 172.001.18E-011.65E-012.37E-013.32E-016.26E+002.08E+013.31E+014.24E+01 - 97K 185.001.01E-011.57E-012.64E-014.37E-015.09E+001.64E+012.82E+014.16E+01 - 97K 202.008.28E-021.45E-012.78E-015.27E-013.98E+001.23E+012.27E+013.75E+01 - 97K 215.007.21E-021.34E-012.77E-015.63E-013.34E+001.01E+011.92E+013.35E+01 - 97K 232.006.10E-021.22E-012.68E-015.79E-012.70E+007.90E+001.54E+012.84E+01 - 97K 255.004.97E-021.06E-012.48E-015.65E-012.07E+005.84E+001.17E+012.24E+01 - 97K 280.004.07E-029.19E-022.24E-015.26E-011.60E+004.34E+008.75E+001.72E+01 - 97K 345.002.64E-026.55E-021.66E-014.00E-018.98E-012.26E+004.53E+009.00E+00 - 97K 430.001.70E-024.52E-021.15E-012.71E-014.92E-011.16E+002.25E+004.35E+00 - 97K 520.001.18E-023.27E-028.18E-021.86E-012.94E-016.61E-011.24E+002.31E+00 - 97K 630.008.28E-032.36E-025.74E-021.25E-011.76E-013.80E-016.84E-011.22E+00 - 97K 860.004.78E-031.39E-023.20E-026.42E-027.66E-021.60E-012.71E-014.50E-01 - 97K 1150.002.92E-038.50E-031.85E-023.47E-023.54E-027.40E-021.19E-011.86E-01 - 97K 1400.002.11E-036.06E-031.28E-022.30E-022.09E-024.45E-027.00E-021.05E-01 - 97K 1650.001.61E-034.56E-039.40E-031.64E-021.35E-022.94E-024.54E-026.64E-02 - 97L1 26.255.59E-011.47E+021.77E+032.34E+032.81E+022.40E+044.68E+052.24E+06 - 97L1 26.955.38E-011.31E+021.76E+033.82E+032.60E+022.13E+044.09E+052.16E+06 - 97L1 28.255.01E-011.07E+021.68E+036.13E+032.26E+021.71E+043.19E+051.95E+06 - 97L1 31.454.25E-016.76E+011.34E+038.84E+031.64E+021.04E+041.83E+051.37E+06 - 97L1 35.253.53E-014.11E+019.55E+028.63E+031.17E+026.18E+031.01E+058.58E+05 - 97L1 38.003.11E-012.96E+017.37E+027.58E+039.38E+014.39E+036.84E+046.08E+05 - 97L1 44.002.41E-011.55E+014.21E+025.05E+036.08E+012.27E+033.19E+042.97E+05 - 97L1 52.001.77E-017.47E+002.10E+022.74E+033.72E+011.08E+031.35E+041.25E+05 - 97L1 64.001.19E-013.05E+008.46E+011.13E+032.02E+014.34E+024.66E+034.08E+04 - 97L1 77.008.23E-021.41E+003.68E+014.79E+021.18E+011.96E+021.83E+031.49E+04 - 97L1 94.005.47E-026.45E-011.49E+011.82E+026.57E+008.46E+016.78E+024.98E+03 - 97L1 107.004.18E-024.01E-018.33E+009.61E+014.51E+004.95E+013.60E+022.45E+03 - 97L1 124.003.06E-022.41E-014.35E+004.64E+012.95E+002.72E+011.77E+021.10E+03 - 97L1 147.002.14E-021.41E-012.09E+002.01E+011.81E+001.38E+017.90E+014.42E+02 - 97L1 175.001.48E-028.48E-021.02E+008.69E+001.10E+007.02E+003.53E+011.76E+02 - 97L1 240.007.65E-033.72E-023.07E-012.03E+004.49E-012.15E+008.64E+003.51E+01 - 97L1 325.004.15E-031.83E-021.09E-015.58E-011.92E-017.29E-012.40E+008.03E+00 - 97L1 410.002.65E-031.10E-025.33E-022.25E-011.01E-013.31E-019.47E-012.75E+00 - 97L1 520.001.70E-036.76E-032.71E-029.53E-025.30E-021.53E-013.84E-019.74E-01 - 97L1 750.008.95E-043.30E-031.05E-022.90E-021.97E-024.96E-021.05E-012.22E-01 - 97L11000.005.54E-041.93E-035.32E-031.26E-029.13E-032.16E-024.11E-027.70E-02 - 97L11500.002.87E-049.18E-042.19E-034.42E-033.09E-037.13E-031.22E-022.00E-02 - 97L2 25.381.36E+005.70E+034.07E+053.82E+063.80E+011.01E+036.37E+037.40E+03 - 97L2 26.081.27E+004.99E+033.51E+053.63E+063.51E+019.19E+026.37E+031.21E+04 - 97L2 27.381.13E+003.94E+032.68E+053.20E+063.04E+017.70E+026.14E+031.94E+04 - 97L2 30.588.53E-012.31E+031.47E+052.15E+062.19E+015.18E+025.06E+032.83E+04 - 97L2 34.386.30E-011.32E+037.70E+041.27E+061.55E+013.39E+023.73E+032.81E+04 - 97L2 38.004.85E-018.13E+024.44E+047.71E+051.16E+012.35E+022.74E+032.38E+04 - 97L2 44.003.28E-014.05E+021.98E+043.55E+057.54E+001.38E+021.66E+031.62E+04 - 97L2 52.002.09E-011.84E+027.90E+031.40E+054.63E+007.50E+018.96E+029.14E+03 - 97L2 64.001.18E-016.94E+012.54E+034.23E+042.54E+003.53E+013.99E+024.02E+03 - 97L2 77.007.04E-022.95E+019.28E+021.43E+041.49E+001.80E+011.89E+021.81E+03 - 97L2 94.004.02E-021.19E+013.17E+024.39E+038.44E-018.81E+008.37E+017.38E+02 - 97L2 107.002.79E-026.61E+001.59E+022.04E+035.84E-015.55E+004.90E+014.06E+02 - 97L2 124.001.84E-023.42E+007.28E+018.55E+023.85E-013.29E+002.67E+012.04E+02 - 97L2 147.001.14E-021.62E+003.00E+013.15E+022.39E-011.81E+001.32E+019.14E+01 - 97L2 175.007.01E-037.60E-011.22E+011.15E+021.47E-019.85E-016.45E+004.02E+01 - 97L2 240.002.93E-032.00E-012.51E+001.90E+016.13E-023.34E-011.79E+009.17E+00 - 97L2 325.001.29E-035.85E-025.83E-013.62E+002.67E-021.22E-015.39E-012.29E+00 - 97L2 410.007.02E-042.35E-021.99E-011.06E+001.41E-025.70E-022.20E-018.14E-01 - 97L2 520.003.82E-049.60E-036.91E-023.20E-017.41E-032.67E-029.05E-022.92E-01 - 97L2 750.001.55E-042.58E-031.48E-025.62E-022.74E-038.60E-032.43E-026.49E-02 - 97L21000.007.86E-059.77E-044.80E-031.58E-021.25E-033.64E-039.07E-032.13E-02 - 97L21500.003.11E-052.71E-041.10E-033.06E-034.10E-041.12E-032.43E-034.93E-03 - 97L3 20.443.34E+001.55E+041.47E+061.93E+072.92E+004.76E+042.90E+072.16E+09 - 97L3 21.143.04E+001.31E+041.21E+061.72E+072.63E+004.02E+042.31E+071.67E+09 - 97L3 22.442.56E+009.69E+038.42E+051.35E+072.19E+002.99E+041.55E+071.06E+09 - 97L3 25.641.75E+004.96E+033.81E+057.14E+061.46E+001.54E+046.33E+063.87E+08 - 97L3 29.441.17E+002.48E+031.67E+053.38E+069.56E-017.72E+032.52E+061.37E+08 - 97L3 38.005.48E-016.87E+023.64E+047.48E+054.39E-012.16E+034.65E+052.02E+07 - 97L3 44.003.52E-013.29E+021.52E+043.02E+052.81E-011.04E+031.78E+056.81E+06 - 97L3 52.002.11E-011.43E+025.61E+031.05E+051.69E-014.54E+026.00E+041.99E+06 - 97L3 64.001.11E-015.06E+011.63E+032.75E+049.01E-021.62E+021.58E+044.37E+05 - 97L3 77.006.24E-022.02E+015.46E+028.24E+035.15E-026.47E+014.86E+031.15E+05 - 97L3 94.003.33E-027.51E+001.68E+022.23E+032.83E-022.41E+011.39E+032.78E+04 - 97L3 107.002.22E-023.96E+007.83E+019.50E+021.92E-021.27E+016.19E+021.12E+04 - 97L3 124.001.39E-021.92E+003.30E+013.60E+021.23E-026.13E+002.50E+024.01E+03 - 97L3 147.008.17E-038.34E-011.22E+011.18E+027.42E-032.65E+008.88E+011.25E+03 - 97L3 175.004.73E-033.57E-014.45E+003.77E+014.42E-031.12E+003.12E+013.83E+02 - 97L3 240.001.77E-037.82E-027.28E-014.88E+001.74E-032.39E-014.88E+004.75E+01 - 97L3 325.007.06E-041.87E-021.33E-017.17E-017.16E-045.48E-028.61E-016.85E+00 - 97L3 410.003.55E-046.42E-033.74E-021.73E-013.66E-041.79E-022.35E-011.62E+00 - 97L3 520.001.79E-042.21E-031.06E-024.23E-021.86E-045.76E-036.43E-023.88E-01 - 97L3 750.006.45E-054.59E-041.69E-035.53E-036.70E-051.05E-039.20E-034.64E-02 - 97L31000.003.05E-051.44E-044.41E-041.26E-033.11E-052.89E-042.09E-039.37E-03 - 97L31500.001.15E-053.28E-057.93E-051.89E-041.13E-055.37E-052.81E-041.07E-03 - 97M1 7.549.93E-019.25E+035.13E+055.72E+062.82E+032.88E+066.66E+083.78E+10 - 97M1 8.548.73E-015.44E+033.06E+055.11E+061.94E+031.57E+062.98E+081.63E+10 - 97M1 10.546.80E-012.22E+031.27E+052.77E+061.04E+035.61E+057.77E+073.89E+09 - 97M1 14.544.32E-015.66E+023.19E+048.05E+053.96E+021.18E+051.03E+074.28E+08 - 97M1 21.542.29E-011.05E+025.58E+031.45E+051.23E+021.81E+049.30E+052.93E+07 - 97M1 29.001.35E-012.92E+011.43E+033.53E+045.07E+014.45E+031.58E+053.95E+06 - 97M1 44.006.11E-024.83E+002.03E+024.36E+031.48E+016.52E+021.43E+042.54E+05 - 97M1 56.003.78E-021.72E+006.44E+011.24E+037.25E+002.21E+023.71E+035.40E+04 - 97M1 74.002.13E-025.40E-011.71E+012.85E+023.20E+006.48E+018.17E+029.41E+03 - 97M1 107.009.78E-031.29E-013.02E+004.03E+011.09E+001.35E+011.19E+021.01E+03 - 97M1 155.004.45E-033.62E-025.73E-015.87E+003.75E-012.99E+001.89E+011.19E+02 - 97M1 285.001.25E-036.61E-035.08E-023.14E-016.69E-022.98E-011.16E+004.57E+00 - 97M1 500.004.27E-041.84E-038.18E-033.15E-021.42E-024.36E-021.17E-013.19E-01 - 97M2 7.142.07E+007.73E+055.21E+084.70E+104.40E+021.10E+056.58E+067.78E+07 - 97M2 8.141.81E+004.04E+052.23E+081.94E+102.98E+026.09E+043.50E+066.54E+07 - 97M2 10.141.36E+001.37E+055.48E+074.33E+091.55E+022.29E+041.20E+063.06E+07 - 97M2 14.147.83E-012.66E+046.76E+064.45E+085.75E+015.36E+032.34E+056.72E+06 - 97M2 21.143.54E-013.73E+035.67E+052.87E+071.75E+019.74E+023.28E+048.68E+05 - 97M2 29.001.76E-018.08E+028.43E+043.41E+066.88E+002.65E+027.15E+031.64E+05 - 97M2 44.006.51E-021.10E+027.24E+032.15E+052.03E+004.98E+019.93E+021.78E+04 - 97M2 56.003.55E-023.53E+011.80E+034.44E+041.01E+001.94E+013.24E+024.95E+03 - 97M2 74.001.72E-029.68E+003.73E+027.40E+034.53E-016.68E+009.02E+011.14E+03 - 97M2 107.006.45E-031.81E+004.88E+017.26E+021.59E-011.69E+001.72E+011.67E+02 - 97M2 155.002.37E-033.52E-016.77E+007.55E+015.60E-024.41E-013.42E+002.53E+01 - 97M2 285.004.65E-042.71E-023.13E-012.22E+001.04E-025.33E-022.69E-011.30E+00 - 97M2 500.001.10E-043.04E-032.31E-021.13E-012.24E-038.43E-033.00E-021.02E-01 - 97M3 5.988.23E+002.09E+061.64E+091.67E+113.18E+016.63E+064.66E+103.96E+13 - 97M3 6.986.26E+009.63E+055.90E+085.56E+101.99E+013.06E+061.60E+101.05E+13 - 97M3 8.983.84E+002.72E+051.13E+089.23E+099.27E+008.69E+052.81E+091.24E+12 - 97M3 12.981.74E+004.28E+041.05E+076.73E+083.04E+001.38E+052.23E+085.65E+10 - 97M3 19.986.21E-014.91E+036.78E+053.22E+078.22E-011.60E+041.18E+071.64E+09 - 97M3 29.002.37E-017.59E+026.60E+042.38E+062.66E-012.50E+039.61E+058.24E+07 - 97M3 44.007.54E-029.43E+015.06E+031.33E+057.54E-023.13E+026.05E+043.17E+06 - 97M3 56.003.78E-022.83E+011.17E+032.54E+043.65E-029.44E+011.25E+045.02E+05 - 97M3 74.001.67E-027.10E+002.17E+023.78E+031.58E-022.37E+012.08E+036.22E+04 - 97M3 107.005.51E-031.15E+002.40E+013.11E+025.26E-033.81E+002.03E+024.23E+03 - 97M3 155.001.78E-031.88E-012.71E+002.61E+011.75E-036.11E-012.08E+013.11E+02 - 97M3 285.002.83E-041.01E-028.24E-024.97E-012.94E-043.10E-025.71E-015.26E+00 - 97M3 500.005.53E-057.67E-043.86E-031.60E-025.87E-052.07E-032.46E-021.57E-01 - 97M4 5.352.06E+016.13E+041.32E+098.78E+129.64E+002.24E+057.37E+082.63E+11 - 97M4 6.351.23E+012.58E+043.96E+081.97E+125.57E+009.48E+042.32E+087.27E+10 - 97M4 8.355.28E+006.48E+035.81E+071.83E+112.30E+002.41E+043.71E+079.32E+09 - 97M4 12.351.47E+009.04E+023.74E+066.32E+096.42E-013.38E+032.77E+065.01E+08 - 97M4 19.353.12E-019.48E+011.61E+051.39E+081.45E-013.56E+021.48E+051.81E+07 - 97M4 29.007.24E-021.25E+019.47E+034.71E+063.71E-024.67E+011.10E+049.42E+05 - 97M4 44.001.52E-021.55E+005.20E+021.51E+058.88E-035.77E+007.94E+024.67E+04 - 97M4 56.006.04E-034.63E-019.79E+012.12E+043.84E-031.72E+001.77E+028.40E+03 - 97M4 74.002.04E-031.15E-011.44E+012.24E+031.44E-034.28E-013.19E+011.18E+03 - 97M4 107.004.78E-041.84E-021.18E+001.21E+023.88E-046.83E-023.41E+009.14E+01 - 97M4 155.001.10E-042.97E-031.00E-016.82E+001.02E-041.09E-023.75E-017.34E+00 - 97M4 285.001.02E-051.57E-042.06E-037.18E-021.10E-055.47E-041.09E-021.32E-01 - 97M4 500.001.16E-061.15E-057.45E-051.37E-031.36E-063.59E-054.70E-043.83E-03 - 97M5 5.123.20E+014.86E+043.35E+091.65E+135.42E+009.88E+034.52E+099.92E+13 - 97M5 6.121.86E+011.95E+049.58E+083.46E+123.06E+004.05E+031.30E+092.02E+13 - 97M5 8.127.57E+004.59E+031.32E+082.93E+111.23E+009.89E+021.80E+081.62E+12 - 97M5 12.121.99E+005.97E+027.88E+069.12E+093.34E-011.34E+021.09E+074.63E+10 - 97M5 19.123.99E-015.89E+013.18E+051.83E+087.43E-021.39E+014.51E+058.30E+08 - 97M5 29.008.57E-027.08E+001.69E+045.35E+061.85E-021.75E+002.46E+042.17E+07 - 97M5 44.001.74E-028.45E-018.95E+021.62E+054.49E-032.25E-011.34E+035.91E+05 - 97M5 56.006.77E-032.46E-011.64E+022.17E+041.96E-036.91E-022.49E+027.52E+04 - 97M5 74.002.24E-035.90E-022.30E+012.17E+037.47E-041.79E-023.56E+017.11E+03 - 97M5 107.005.13E-048.93E-031.74E+001.06E+022.06E-043.06E-032.74E+003.29E+02 - 97M5 155.001.16E-041.36E-031.32E-015.27E+005.58E-055.37E-042.09E-011.59E+01 - 97M5 285.001.06E-056.71E-052.02E-034.17E-026.55E-063.43E-053.16E-031.25E-01 - 97M5 500.001.29E-065.00E-065.06E-055.58E-049.61E-073.17E-067.14E-051.70E-03 - 97N+ 50.005.89E-024.48E+012.77E+031.29E+054.44E+002.32E+021.53E+047.68E+05 - 97N+ 70.002.46E-028.91E+003.71E+021.09E+041.65E+004.98E+011.87E+035.89E+04 - 97N+ 100.009.90E-031.68E+004.75E+019.10E+025.87E-011.03E+012.21E+024.38E+03 - 97N+ 150.003.53E-032.63E-014.97E+006.25E+011.82E-011.86E+002.21E+012.66E+02 - 97N+ 200.001.73E-037.44E-021.07E+001.03E+017.99E-025.80E-014.75E+004.11E+01 - 97N+ 500.002.21E-042.19E-031.39E-026.48E-026.27E-032.09E-026.84E-022.38E-01 - 98K 136.002.02E-011.22E-012.43E-021.01E-031.34E+014.74E+013.63E+016.65E+00 - 98K 136.701.99E-011.24E-012.84E-022.01E-031.31E+014.65E+013.67E+017.71E+00 - 98K 138.001.95E-011.28E-013.64E-024.59E-031.28E+014.52E+013.73E+019.72E+00 - 98K 141.201.85E-011.36E-015.66E-021.50E-021.20E+014.20E+013.84E+011.45E+01 - 98K 145.001.75E-011.44E-018.09E-023.43E-021.11E+013.85E+013.90E+011.98E+01 - 98K 149.001.64E-011.50E-011.06E-016.17E-021.03E+013.52E+013.89E+012.47E+01 - 98K 155.001.51E-011.56E-011.40E-011.12E-019.20E+003.10E+013.80E+013.06E+01 - 98K 163.001.35E-011.59E-011.79E-011.88E-017.97E+002.63E+013.59E+013.58E+01 - 98K 175.001.15E-011.58E-012.22E-013.01E-016.52E+002.09E+013.19E+013.91E+01 - 98K 188.009.84E-021.51E-012.51E-014.03E-015.33E+001.66E+012.74E+013.88E+01 - 98K 205.008.13E-021.40E-012.66E-014.93E-014.17E+001.25E+012.22E+013.54E+01 - 98K 218.007.10E-021.31E-012.67E-015.32E-013.51E+001.03E+011.89E+013.19E+01 - 98K 235.006.03E-021.19E-012.61E-015.53E-012.84E+008.09E+001.53E+012.73E+01 - 98K 258.004.94E-021.05E-012.44E-015.45E-012.19E+006.01E+001.16E+012.17E+01 - 98K 285.004.00E-029.07E-022.20E-015.09E-011.66E+004.39E+008.61E+001.65E+01 - 98K 350.002.62E-026.55E-021.66E-013.94E-019.43E-012.32E+004.54E+008.81E+00 - 98K 435.001.70E-024.58E-021.16E-012.71E-015.21E-011.20E+002.28E+004.34E+00 - 98K 530.001.17E-023.29E-028.20E-021.84E-013.05E-016.71E-011.23E+002.26E+00 - 98K 640.008.31E-032.40E-025.81E-021.25E-011.84E-013.91E-016.91E-011.21E+00 - 98K 870.004.86E-031.43E-023.29E-026.55E-028.09E-021.67E-012.79E-014.57E-01 - 98K 1150.003.03E-038.94E-031.95E-023.64E-023.84E-027.97E-021.27E-011.97E-01 - 98K 1400.002.19E-036.38E-031.35E-022.42E-022.27E-024.80E-027.48E-021.11E-01 - 98K 1650.001.67E-034.80E-039.93E-031.73E-021.46E-023.16E-024.86E-027.07E-02 - 98L1 27.015.27E-011.41E+021.63E+032.06E+032.87E+022.33E+044.35E+052.00E+06 - 98L1 27.715.07E-011.27E+021.62E+033.35E+032.65E+022.07E+043.81E+051.94E+06 - 98L1 29.014.73E-011.04E+021.55E+035.38E+032.32E+021.67E+043.00E+051.76E+06 - 98L1 32.214.03E-016.68E+011.26E+037.87E+031.70E+021.03E+041.75E+051.26E+06 - 98L1 36.013.37E-014.13E+019.09E+027.82E+031.22E+026.19E+039.79E+047.99E+05 - 98L1 39.002.95E-012.92E+016.92E+026.86E+039.64E+014.31E+036.46E+045.56E+05 - 98L1 45.002.30E-011.56E+014.03E+024.66E+036.31E+012.26E+033.08E+042.77E+05 - 98L1 53.001.71E-017.69E+002.06E+022.59E+033.90E+011.09E+031.32E+041.19E+05 - 98L1 65.001.16E-013.21E+008.49E+011.10E+032.14E+014.47E+024.67E+033.99E+04 - 98L1 78.008.06E-021.51E+003.76E+014.74E+021.25E+012.04E+021.86E+031.48E+04 - 98L1 95.005.40E-026.98E-011.55E+011.84E+027.06E+008.90E+017.00E+025.03E+03 - 98L1 108.004.14E-024.35E-018.77E+009.85E+014.87E+005.24E+013.74E+022.50E+03 - 98L1 125.003.05E-022.63E-014.62E+004.81E+013.19E+002.89E+011.85E+021.13E+03 - 98L1 148.002.14E-021.53E-012.25E+002.11E+011.96E+001.48E+018.32E+014.59E+02 - 98L1 175.001.51E-029.33E-021.13E+009.46E+001.21E+007.70E+003.84E+011.90E+02 - 98L1 240.007.84E-034.04E-023.38E-012.21E+004.97E-012.35E+009.39E+003.78E+01 - 98L1 325.004.27E-031.97E-021.19E-016.09E-012.13E-017.99E-012.61E+008.68E+00 - 98L1 420.002.61E-031.13E-025.40E-022.24E-011.05E-013.35E-019.38E-012.67E+00 - 98L1 530.001.71E-036.97E-032.79E-029.69E-025.55E-021.57E-013.89E-019.72E-01 - 98L1 760.009.12E-043.44E-031.10E-023.02E-022.10E-025.22E-021.09E-012.28E-01 - 98L11050.005.34E-041.88E-035.13E-031.19E-028.82E-032.06E-023.83E-027.03E-02 - 98L11550.002.85E-049.25E-042.20E-034.40E-033.10E-037.15E-031.21E-021.96E-02 - 98L2 26.121.29E+005.40E+033.69E+053.34E+063.93E+019.84E+025.93E+036.59E+03 - 98L2 26.821.21E+004.75E+033.20E+053.18E+063.64E+018.95E+025.93E+031.07E+04 - 98L2 28.121.08E+003.77E+032.46E+052.82E+063.17E+017.55E+025.74E+031.73E+04 - 98L2 31.328.22E-012.25E+031.37E+051.92E+062.30E+015.13E+024.78E+032.54E+04 - 98L2 35.126.13E-011.30E+037.32E+041.16E+061.64E+013.39E+023.57E+032.57E+04 - 98L2 39.004.66E-017.84E+024.12E+046.90E+051.21E+012.32E+022.60E+032.18E+04 - 98L2 45.003.19E-013.97E+021.88E+043.25E+057.96E+001.38E+021.60E+031.50E+04 - 98L2 53.002.05E-011.83E+027.65E+031.31E+054.94E+007.61E+018.77E+028.66E+03 - 98L2 65.001.17E-017.06E+012.51E+034.07E+042.74E+003.63E+013.98E+023.90E+03 - 98L2 78.007.08E-023.04E+019.34E+021.40E+041.62E+001.88E+011.92E+021.79E+03 - 98L2 95.004.09E-021.24E+013.24E+024.39E+039.24E-019.28E+008.59E+017.41E+02 - 98L2 108.002.85E-026.94E+001.64E+022.06E+036.42E-015.88E+005.08E+014.11E+02 - 98L2 125.001.89E-023.62E+007.57E+018.73E+024.25E-013.50E+002.78E+012.09E+02 - 98L2 148.001.18E-021.72E+003.14E+013.25E+022.65E-011.94E+001.39E+019.46E+01 - 98L2 175.007.41E-038.35E-011.33E+011.23E+021.66E-011.08E+006.99E+004.31E+01 - 98L2 240.003.11E-032.21E-012.74E+002.06E+016.93E-023.69E-011.95E+009.90E+00 - 98L2 325.001.38E-036.45E-026.39E-013.93E+003.02E-021.35E-015.90E-012.48E+00 - 98L2 420.007.07E-042.37E-021.96E-011.03E+001.50E-025.85E-022.21E-017.98E-01 - 98L2 530.003.92E-049.90E-037.00E-023.19E-017.98E-032.80E-029.29E-022.95E-01 - 98L2 760.001.62E-042.73E-031.55E-025.81E-023.00E-039.22E-032.56E-026.76E-02 - 98L21050.007.63E-059.24E-044.42E-031.42E-021.24E-033.52E-038.56E-031.96E-02 - 98L21550.003.15E-052.73E-041.09E-032.99E-034.24E-041.15E-032.45E-034.88E-03 - 98L3 20.913.20E+001.49E+041.36E+061.72E+072.86E+004.69E+042.77E+072.00E+09 - 98L3 21.612.91E+001.26E+041.11E+061.54E+072.59E+003.98E+042.21E+071.56E+09 - 98L3 22.912.46E+009.39E+037.85E+051.22E+072.16E+002.98E+041.49E+079.96E+08 - 98L3 26.111.69E+004.87E+033.61E+056.54E+061.45E+001.55E+046.22E+063.71E+08 - 98L3 29.911.14E+002.46E+031.60E+053.14E+069.59E-017.88E+032.51E+061.34E+08 - 98L3 39.005.19E-016.48E+023.29E+046.57E+054.27E-012.10E+034.34E+051.83E+07 - 98L3 45.003.37E-013.17E+021.40E+042.71E+052.76E-011.03E+031.70E+056.34E+06 - 98L3 53.002.04E-011.40E+025.30E+039.61E+041.68E-014.57E+025.87E+041.90E+06 - 98L3 65.001.09E-015.04E+011.58E+032.59E+049.04E-021.66E+021.58E+044.29E+05 - 98L3 78.006.18E-022.03E+015.35E+027.89E+035.21E-026.70E+014.95E+031.15E+05 - 98L3 95.003.33E-027.66E+001.67E+022.17E+032.88E-022.52E+011.43E+032.83E+04 - 98L3 108.002.23E-024.07E+007.85E+019.34E+021.96E-021.34E+016.45E+021.15E+04 - 98L3 125.001.41E-021.98E+003.33E+013.58E+021.26E-026.50E+002.63E+024.16E+03 - 98L3 148.008.28E-038.67E-011.24E+011.18E+027.65E-032.82E+009.40E+011.30E+03 - 98L3 175.004.91E-033.84E-014.71E+003.95E+014.65E-031.24E+003.44E+014.20E+02 - 98L3 240.001.84E-038.40E-027.72E-015.13E+001.83E-032.63E-015.36E+005.21E+01 - 98L3 325.007.35E-042.01E-021.41E-017.56E-017.53E-046.02E-029.46E-017.49E+00 - 98L3 420.003.45E-046.16E-033.49E-021.57E-013.59E-041.75E-022.26E-011.53E+00 - 98L3 530.001.77E-042.17E-031.02E-024.01E-021.85E-045.78E-036.37E-023.79E-01 - 98L3 760.006.51E-054.63E-041.68E-035.46E-036.78E-051.08E-039.41E-034.70E-02 - 98L31050.002.80E-051.27E-043.76E-041.05E-032.86E-052.54E-041.79E-037.84E-03 - 98L31550.001.12E-053.09E-057.38E-051.73E-041.09E-055.10E-052.61E-049.90E-04 - 98M1 7.759.36E-019.07E+034.93E+055.25E+062.89E+032.80E+066.21E+083.40E+10 - 98M1 8.758.26E-015.41E+032.98E+054.78E+062.01E+031.55E+062.84E+081.50E+10 - 98M1 10.756.47E-012.25E+031.26E+052.67E+061.09E+035.66E+057.63E+073.71E+09 - 98M1 14.754.16E-015.87E+023.23E+047.97E+054.22E+021.23E+051.05E+074.25E+08 - 98M1 21.752.23E-011.12E+025.77E+031.46E+051.33E+021.92E+049.73E+053.01E+07 - 98M1 29.001.34E-013.26E+011.55E+033.75E+045.64E+014.94E+031.75E+054.33E+06 - 98M1 44.006.12E-025.43E+002.21E+024.67E+031.64E+017.24E+021.58E+042.79E+05 - 98M1 56.003.80E-021.95E+007.06E+011.34E+038.06E+002.44E+024.10E+035.92E+04 - 98M1 74.002.15E-026.12E-011.88E+013.09E+023.56E+007.17E+019.00E+021.03E+04 - 98M1 107.009.93E-031.45E-013.35E+004.40E+011.21E+001.49E+011.31E+021.10E+03 - 98M1 155.004.54E-034.05E-026.38E-016.46E+004.17E-013.30E+002.07E+011.29E+02 - 98M1 285.001.29E-037.21E-035.62E-023.46E-017.43E-023.28E-011.27E+004.98E+00 - 98M1 500.004.43E-041.98E-038.95E-033.46E-021.57E-024.78E-021.28E-013.48E-01 - 98M2 7.351.94E+007.35E+054.74E+084.13E+104.57E+021.07E+056.17E+066.99E+07 - 98M2 8.351.71E+003.91E+052.08E+081.74E+103.12E+026.04E+043.34E+065.96E+07 - 98M2 10.351.29E+001.35E+055.27E+074.04E+091.65E+022.32E+041.17E+062.88E+07 - 98M2 14.357.61E-012.72E+046.74E+064.33E+086.23E+015.58E+032.36E+056.56E+06 - 98M2 21.353.51E-013.90E+035.83E+052.89E+071.92E+011.03E+033.40E+048.77E+05 - 98M2 29.001.80E-018.86E+029.19E+043.67E+067.79E+002.92E+027.76E+031.75E+05 - 98M2 44.006.71E-021.21E+027.89E+032.31E+052.30E+005.49E+011.08E+031.91E+04 - 98M2 56.003.67E-023.88E+011.97E+034.80E+041.14E+002.14E+013.52E+025.32E+03 - 98M2 74.001.79E-021.06E+014.07E+028.00E+035.13E-017.37E+009.82E+011.23E+03 - 98M2 107.006.76E-031.99E+005.34E+017.87E+021.80E-011.86E+001.88E+011.80E+02 - 98M2 155.002.50E-033.87E-017.41E+008.21E+016.34E-024.88E-013.74E+002.75E+01 - 98M2 285.004.96E-043.00E-023.44E-012.43E+001.18E-025.92E-022.95E-011.42E+00 - 98M2 500.001.18E-043.37E-032.55E-021.24E-012.54E-039.40E-033.31E-021.12E-01 - 98M3 6.127.89E+002.01E+061.51E+091.49E+113.12E+016.56E+064.45E+103.67E+13 - 98M3 7.126.04E+009.42E+055.56E+085.08E+101.98E+013.08E+061.56E+101.00E+13 - 98M3 9.123.74E+002.72E+051.10E+088.71E+099.33E+008.93E+052.82E+091.22E+12 - 98M3 13.121.71E+004.38E+041.05E+076.58E+083.10E+001.45E+052.32E+085.82E+10 - 98M3 20.126.20E-015.13E+036.93E+053.23E+078.49E-011.72E+041.26E+071.74E+09 - 98M3 29.002.42E-018.20E+027.05E+042.51E+062.81E-012.77E+031.07E+069.22E+07 - 98M3 44.007.73E-021.02E+025.40E+031.40E+057.97E-023.48E+026.75E+043.53E+06 - 98M3 56.003.88E-023.07E+011.24E+032.67E+043.85E-021.05E+021.40E+045.58E+05 - 98M3 74.001.72E-027.68E+002.31E+023.98E+031.67E-022.63E+012.32E+036.91E+04 - 98M3 107.005.70E-031.24E+002.56E+013.28E+025.56E-034.22E+002.26E+024.69E+03 - 98M3 155.001.85E-032.03E-012.89E+002.76E+011.85E-036.78E-012.31E+013.43E+02 - 98M3 285.002.95E-041.09E-028.79E-025.26E-013.11E-043.43E-026.32E-015.80E+00 - 98M3 500.005.80E-058.25E-044.12E-031.70E-026.19E-052.28E-032.71E-021.73E-01 - 98M4 5.481.97E+015.90E+041.21E+097.88E+129.47E+002.22E+057.01E+082.43E+11 - 98M4 6.481.19E+012.53E+043.74E+081.82E+125.53E+009.60E+042.26E+086.91E+10 - 98M4 8.485.19E+006.52E+035.67E+071.77E+112.32E+002.50E+043.74E+079.19E+09 - 98M4 12.481.47E+009.33E+023.78E+066.38E+096.60E-013.60E+032.89E+065.13E+08 - 98M4 19.483.18E-019.99E+011.67E+051.45E+081.51E-013.86E+021.58E+051.91E+07 - 98M4 29.007.59E-021.36E+011.03E+045.19E+063.96E-025.24E+011.23E+041.04E+06 - 98M4 44.001.60E-021.69E+005.67E+021.66E+059.51E-036.48E+008.84E+025.17E+04 - 98M4 56.006.38E-035.06E-011.07E+022.33E+044.12E-031.94E+001.97E+029.29E+03 - 98M4 74.002.16E-031.26E-011.57E+012.47E+031.55E-034.81E-013.55E+011.31E+03 - 98M4 107.005.09E-042.02E-021.29E+001.33E+024.18E-047.67E-023.79E+001.01E+02 - 98M4 155.001.18E-043.26E-031.09E-017.52E+001.10E-041.22E-024.17E-018.13E+00 - 98M4 285.001.09E-051.73E-042.25E-037.93E-021.18E-056.14E-041.22E-021.47E-01 - 98M4 500.001.25E-061.26E-058.15E-051.52E-031.47E-064.03E-055.25E-044.27E-03 - 98M5 5.243.06E+014.55E+043.13E+091.49E+135.31E+009.47E+034.34E+099.21E+13 - 98M5 6.241.80E+011.86E+049.20E+083.23E+123.03E+003.96E+031.28E+091.94E+13 - 98M5 8.247.44E+004.50E+031.31E+082.85E+111.24E+009.89E+021.83E+081.62E+12 - 98M5 12.241.99E+005.99E+028.09E+069.24E+093.42E-011.38E+021.15E+074.84E+10 - 98M5 19.244.06E-016.02E+013.35E+051.91E+087.70E-021.44E+014.86E+058.94E+08 - 98M5 29.008.96E-027.48E+001.86E+045.88E+061.96E-021.89E+002.77E+042.47E+07 - 98M5 44.001.82E-028.93E-019.86E+021.78E+054.76E-032.41E-011.51E+036.71E+05 - 98M5 56.007.12E-032.60E-011.80E+022.39E+042.08E-037.41E-022.80E+028.52E+04 - 98M5 74.002.36E-036.25E-022.54E+012.38E+037.94E-041.92E-024.01E+018.05E+03 - 98M5 107.005.42E-049.49E-031.92E+001.16E+022.19E-043.28E-033.08E+003.72E+02 - 98M5 155.001.23E-041.45E-031.45E-015.78E+005.95E-055.76E-042.36E-011.79E+01 - 98M5 285.001.13E-057.16E-052.22E-034.58E-026.99E-063.68E-053.54E-031.41E-01 - 98M5 500.001.38E-065.36E-065.53E-056.12E-041.02E-063.39E-067.96E-051.90E-03 - 98N+ 50.006.10E-024.96E+013.05E+031.42E+055.00E+002.61E+021.74E+048.73E+05 - 98N+ 70.002.56E-029.88E+004.09E+021.20E+041.86E+005.59E+012.11E+036.68E+04 - 98N+ 100.001.03E-021.86E+005.23E+011.00E+036.61E-011.16E+012.48E+024.94E+03 - 98N+ 150.003.69E-032.93E-015.49E+006.88E+012.05E-012.08E+002.47E+012.99E+02 - 98N+ 200.001.81E-038.28E-021.18E+001.14E+018.99E-026.49E-015.31E+004.59E+01 - 98N+ 500.002.33E-042.43E-031.54E-027.19E-027.04E-032.33E-027.60E-022.64E-01 - 99K 139.471.92E-011.14E-012.30E-029.44E-041.36E+014.63E+013.42E+016.08E+00 - 99K 140.171.90E-011.16E-012.68E-021.85E-031.34E+014.54E+013.45E+017.02E+00 - 99K 141.471.86E-011.20E-013.42E-024.19E-031.31E+014.41E+013.51E+018.83E+00 - 99K 144.671.77E-011.28E-015.29E-021.36E-021.23E+014.11E+013.62E+011.31E+01 - 99K 148.471.67E-011.36E-017.55E-023.10E-021.14E+013.78E+013.68E+011.79E+01 - 99K 152.001.59E-011.41E-019.60E-025.26E-021.06E+013.50E+013.68E+012.19E+01 - 99K 158.001.46E-011.47E-011.29E-019.79E-029.54E+003.09E+013.62E+012.74E+01 - 99K 166.001.31E-011.51E-011.66E-011.68E-018.29E+002.64E+013.44E+013.24E+01 - 99K 178.001.12E-011.51E-012.09E-012.73E-016.81E+002.10E+013.08E+013.60E+01 - 99K 191.009.62E-021.46E-012.38E-013.71E-015.58E+001.68E+012.67E+013.61E+01 - 99K 208.007.99E-021.36E-012.56E-014.61E-014.39E+001.28E+012.18E+013.34E+01 - 99K 221.007.00E-021.28E-012.59E-015.02E-013.70E+001.05E+011.86E+013.04E+01 - 99K 238.005.97E-021.18E-012.54E-015.27E-013.01E+008.29E+001.52E+012.62E+01 - 99K 261.004.91E-021.04E-012.40E-015.26E-012.32E+006.19E+001.16E+012.10E+01 - 99K 290.003.94E-028.96E-022.16E-014.94E-011.73E+004.45E+008.49E+001.58E+01 - 99K 355.002.61E-026.57E-021.66E-013.88E-019.93E-012.38E+004.54E+008.63E+00 - 99K 440.001.71E-024.65E-021.18E-012.71E-015.52E-011.24E+002.32E+004.33E+00 - 99K 530.001.21E-023.43E-028.52E-021.90E-013.33E-017.21E-011.30E+002.35E+00 - 99K 640.008.58E-032.51E-026.07E-021.30E-012.00E-014.20E-017.33E-011.27E+00 - 99K 870.005.03E-031.51E-023.45E-026.85E-028.81E-021.80E-012.97E-014.82E-01 - 99K 1150.003.15E-039.41E-032.06E-023.83E-024.18E-028.59E-021.36E-012.08E-01 - 99K 1400.002.28E-036.73E-031.43E-022.55E-022.46E-025.17E-027.99E-021.18E-01 - 99K 1650.001.74E-035.06E-031.05E-021.83E-021.58E-023.41E-025.20E-027.52E-02 - 99L1 27.784.94E-011.36E+021.50E+031.82E+032.91E+022.25E+044.05E+051.80E+06 - 99L1 28.484.78E-011.23E+021.49E+032.94E+032.72E+022.01E+043.55E+051.74E+06 - 99L1 29.784.47E-011.02E+021.44E+034.72E+032.38E+021.63E+042.82E+051.59E+06 - 99L1 32.983.83E-016.60E+011.18E+037.00E+031.76E+021.02E+041.67E+051.15E+06 - 99L1 36.783.22E-014.14E+018.64E+027.09E+031.27E+026.20E+039.47E+047.44E+05 - 99L1 40.002.80E-012.89E+016.52E+026.22E+039.93E+014.24E+036.13E+045.10E+05 - 99L1 46.002.20E-011.58E+013.87E+024.30E+036.57E+012.26E+032.98E+042.59E+05 - 99L1 54.001.64E-017.93E+002.02E+022.44E+034.09E+011.11E+031.30E+041.14E+05 - 99L1 66.001.12E-013.39E+008.53E+011.06E+032.27E+014.61E+024.69E+033.90E+04 - 99L1 79.007.90E-021.62E+003.85E+014.70E+021.34E+012.13E+021.90E+031.47E+04 - 99L1 96.005.33E-027.56E-011.62E+011.86E+027.60E+009.38E+017.22E+025.09E+03 - 99L1 109.004.11E-024.74E-019.24E+001.01E+025.26E+005.55E+013.88E+022.55E+03 - 99L1 126.003.04E-022.86E-014.91E+004.98E+013.46E+003.08E+011.93E+021.17E+03 - 99L1 149.002.15E-021.66E-012.41E+002.21E+012.13E+001.58E+018.77E+014.77E+02 - 99L1 175.001.54E-021.03E-011.25E+001.03E+011.35E+008.46E+004.17E+012.05E+02 - 99L1 240.008.02E-034.40E-023.72E-012.42E+005.50E-012.58E+001.02E+014.08E+01 - 99L1 325.004.39E-032.13E-021.31E-016.64E-012.35E-018.75E-012.84E+009.38E+00 - 99L1 420.002.70E-031.21E-025.89E-022.44E-011.16E-013.67E-011.02E+002.89E+00 - 99L1 530.001.77E-037.48E-033.03E-021.05E-016.14E-021.72E-014.23E-011.05E+00 - 99L1 760.009.51E-043.69E-031.19E-023.27E-022.31E-025.71E-021.19E-012.47E-01 - 99L11050.005.58E-042.01E-035.53E-031.29E-029.71E-032.25E-024.17E-027.61E-02 - 99L11550.003.00E-049.89E-042.36E-034.74E-033.40E-037.82E-031.31E-022.12E-02 - 99L2 26.881.23E+005.13E+033.36E+052.93E+064.06E+019.58E+025.54E+035.89E+03 - 99L2 27.581.15E+004.53E+032.91E+052.79E+063.78E+018.73E+025.53E+039.51E+03 - 99L2 28.881.03E+003.62E+032.27E+052.49E+063.30E+017.40E+025.37E+031.53E+04 - 99L2 32.087.91E-012.18E+031.28E+051.72E+062.42E+015.08E+024.52E+032.29E+04 - 99L2 35.885.95E-011.28E+036.95E+041.06E+061.74E+013.40E+023.42E+032.35E+04 - 99L2 40.004.49E-017.59E+023.83E+046.21E+051.27E+012.29E+022.47E+032.00E+04 - 99L2 46.003.10E-013.91E+021.78E+042.98E+058.43E+001.38E+021.54E+031.40E+04 - 99L2 54.002.02E-011.84E+027.42E+031.23E+055.29E+007.74E+018.61E+028.22E+03 - 99L2 66.001.17E-017.20E+012.49E+033.92E+042.96E+003.75E+013.98E+023.78E+03 - 99L2 79.007.13E-023.14E+019.41E+021.38E+041.77E+001.96E+011.95E+021.77E+03 - 99L2 96.004.15E-021.29E+013.31E+024.40E+031.01E+009.78E+008.83E+017.44E+02 - 99L2 109.002.92E-027.30E+001.69E+022.09E+037.08E-016.23E+005.26E+014.17E+02 - 99L2 126.001.95E-023.83E+007.88E+018.92E+024.70E-013.74E+002.90E+012.14E+02 - 99L2 149.001.22E-021.84E+003.30E+013.36E+022.94E-012.08E+001.46E+019.78E+01 - 99L2 175.007.83E-039.18E-011.45E+011.33E+021.88E-011.19E+007.58E+004.62E+01 - 99L2 240.003.31E-032.43E-013.00E+002.23E+017.85E-024.07E-012.13E+001.07E+01 - 99L2 325.001.47E-037.11E-026.99E-014.28E+003.42E-021.49E-016.45E-012.69E+00 - 99L2 420.007.57E-042.62E-022.15E-011.12E+001.70E-026.50E-022.42E-018.69E-01 - 99L2 530.004.21E-041.09E-027.70E-023.49E-019.06E-033.11E-021.02E-013.22E-01 - 99L2 760.001.76E-043.03E-031.71E-026.39E-023.40E-031.03E-022.84E-027.43E-02 - 99L21050.008.26E-051.03E-034.90E-031.56E-021.41E-033.95E-039.51E-032.16E-02 - 99L21550.003.44E-053.04E-041.21E-033.32E-034.82E-041.29E-032.73E-035.41E-03 - 99L3 21.393.06E+001.42E+041.25E+061.55E+072.81E+004.61E+042.64E+071.86E+09 - 99L3 22.092.79E+001.22E+041.03E+061.38E+072.55E+003.95E+042.12E+071.45E+09 - 99L3 23.392.37E+009.10E+037.33E+051.10E+072.13E+002.97E+041.44E+079.38E+08 - 99L3 26.591.64E+004.78E+033.41E+055.99E+061.44E+001.57E+046.11E+063.56E+08 - 99L3 30.391.11E+002.44E+031.54E+052.92E+069.60E-018.04E+032.51E+061.30E+08 - 99L3 40.004.93E-016.14E+022.99E+045.79E+054.15E-012.05E+034.07E+051.67E+07 - 99L3 46.003.24E-013.05E+021.30E+042.44E+052.71E-011.02E+031.63E+055.93E+06 - 99L3 54.001.98E-011.37E+025.01E+038.84E+041.67E-014.60E+025.75E+041.82E+06 - 99L3 66.001.07E-015.03E+011.52E+032.43E+049.08E-021.70E+021.58E+044.22E+05 - 99L3 79.006.12E-022.05E+015.25E+027.56E+035.28E-026.95E+015.04E+031.16E+05 - 99L3 96.003.33E-027.82E+001.66E+022.11E+032.93E-022.64E+011.48E+032.89E+04 - 99L3 109.002.23E-024.18E+007.87E+019.19E+022.00E-021.41E+016.73E+021.18E+04 - 99L3 126.001.42E-022.05E+003.37E+013.55E+021.30E-026.89E+002.76E+024.31E+03 - 99L3 149.008.40E-039.02E-011.27E+011.18E+027.88E-033.01E+009.94E+011.36E+03 - 99L3 175.005.09E-034.13E-014.99E+004.14E+014.89E-031.37E+003.79E+014.60E+02 - 99L3 240.001.92E-039.02E-028.18E-015.39E+001.92E-032.90E-015.90E+005.70E+01 - 99L3 325.007.64E-042.15E-021.50E-017.96E-017.91E-046.63E-021.04E+008.19E+00 - 99L3 420.003.59E-046.60E-033.70E-021.66E-013.77E-041.92E-022.48E-011.68E+00 - 99L3 530.001.84E-042.32E-031.08E-024.24E-021.94E-046.34E-036.98E-024.14E-01 - 99L3 760.006.80E-054.94E-041.78E-035.78E-037.10E-051.18E-031.03E-025.14E-02 - 99L31050.002.92E-051.35E-043.99E-041.12E-032.99E-052.76E-041.96E-038.56E-03 - 99L31550.001.16E-053.26E-057.81E-051.84E-041.14E-055.50E-052.85E-041.08E-03 - 99M1 7.978.82E-018.91E+034.74E+054.82E+062.96E+032.72E+065.79E+083.06E+10 - 99M1 8.977.81E-015.38E+032.90E+054.47E+062.08E+031.53E+062.70E+081.38E+10 - 99M1 10.976.16E-012.28E+031.24E+052.57E+061.14E+035.72E+057.49E+073.53E+09 - 99M1 14.974.01E-016.10E+023.26E+047.88E+054.50E+021.27E+051.07E+074.21E+08 - 99M1 21.972.17E-011.19E+025.96E+031.48E+051.43E+022.03E+041.02E+063.08E+07 - 99M1 29.001.34E-013.63E+011.68E+033.99E+046.28E+015.49E+031.94E+054.76E+06 - 99M1 44.006.13E-026.11E+002.42E+025.01E+031.83E+018.03E+021.74E+043.06E+05 - 99M1 56.003.82E-022.20E+007.75E+011.44E+038.97E+002.71E+024.52E+036.49E+04 - 99M1 74.002.17E-026.94E-012.08E+013.35E+023.96E+007.94E+019.91E+021.13E+04 - 99M1 107.001.01E-021.64E-013.72E+004.80E+011.35E+001.65E+011.44E+021.21E+03 - 99M1 155.004.62E-034.53E-027.10E-017.10E+004.63E-013.64E+002.27E+011.41E+02 - 99M1 285.001.33E-037.89E-036.22E-023.81E-018.25E-023.61E-011.39E+005.43E+00 - 99M1 500.004.60E-042.14E-039.80E-033.79E-021.74E-025.26E-021.40E-013.79E-01 - 99M2 7.561.81E+006.99E+054.32E+083.63E+104.75E+021.05E+055.79E+066.28E+07 - 99M2 8.561.61E+003.78E+051.94E+081.57E+103.28E+025.99E+043.19E+065.44E+07 - 99M2 10.561.23E+001.34E+055.07E+073.77E+091.75E+022.35E+041.15E+062.71E+07 - 99M2 14.567.39E-012.77E+046.72E+064.21E+086.75E+015.80E+032.38E+056.41E+06 - 99M2 21.563.47E-014.08E+035.99E+052.91E+072.11E+011.10E+033.52E+048.84E+05 - 99M2 29.001.83E-019.72E+021.00E+053.96E+068.82E+003.22E+028.43E+031.87E+05 - 99M2 44.006.90E-021.33E+028.60E+032.50E+052.61E+006.06E+011.17E+032.05E+04 - 99M2 56.003.80E-024.26E+012.15E+035.18E+041.30E+002.36E+013.83E+025.72E+03 - 99M2 74.001.86E-021.17E+014.44E+028.65E+035.82E-018.14E+001.07E+021.32E+03 - 99M2 107.007.08E-032.19E+005.83E+018.53E+022.04E-012.06E+002.05E+011.95E+02 - 99M2 155.002.64E-034.27E-018.11E+008.92E+017.20E-025.40E-014.09E+002.98E+01 - 99M2 285.005.28E-043.32E-023.78E-012.65E+001.34E-026.58E-023.25E-011.55E+00 - 99M2 500.001.27E-043.74E-032.82E-021.36E-012.89E-031.05E-023.66E-021.23E-01 - 99M3 6.267.57E+001.94E+061.39E+091.34E+113.07E+016.49E+064.25E+103.40E+13 - 99M3 7.265.82E+009.21E+055.24E+084.65E+101.96E+013.10E+061.52E+109.56E+12 - 99M3 9.263.64E+002.72E+051.07E+088.22E+099.39E+009.18E+052.84E+091.21E+12 - 99M3 13.261.69E+004.49E+041.05E+076.42E+083.17E+001.53E+052.41E+085.98E+10 - 99M3 20.266.19E-015.36E+037.09E+053.23E+078.77E-011.84E+041.34E+071.84E+09 - 99M3 29.002.47E-018.88E+027.52E+042.64E+062.96E-013.08E+031.20E+061.03E+08 - 99M3 44.007.92E-021.10E+025.76E+031.47E+058.41E-023.86E+027.53E+043.93E+06 - 99M3 56.003.99E-023.32E+011.33E+032.81E+044.07E-021.16E+021.56E+046.21E+05 - 99M3 74.001.77E-028.31E+002.46E+024.19E+031.76E-022.91E+012.58E+037.67E+04 - 99M3 107.005.90E-031.34E+002.73E+013.46E+025.87E-034.69E+002.51E+025.19E+03 - 99M3 155.001.93E-032.19E-013.08E+002.91E+011.96E-037.52E-012.56E+013.80E+02 - 99M3 285.003.08E-041.18E-029.37E-025.57E-013.28E-043.80E-026.99E-016.39E+00 - 99M3 500.006.03E-058.87E-044.40E-031.80E-026.53E-052.52E-033.00E-021.90E-01 - 99M4 5.621.88E+015.69E+041.11E+097.07E+129.30E+002.21E+056.68E+082.25E+11 - 99M4 6.621.15E+012.49E+043.53E+081.69E+125.50E+009.73E+042.21E+086.57E+10 - 99M4 8.625.10E+006.56E+035.54E+071.71E+112.35E+002.59E+043.77E+079.06E+09 - 99M4 12.621.47E+009.64E+023.82E+066.43E+096.78E-013.83E+033.01E+065.25E+08 - 99M4 19.623.24E-011.05E+021.73E+051.51E+081.57E-014.18E+021.69E+052.01E+07 - 99M4 29.007.95E-021.48E+011.12E+045.72E+064.23E-025.88E+011.37E+041.15E+06 - 99M4 44.001.69E-021.85E+006.17E+021.83E+051.02E-027.28E+009.84E+025.71E+04 - 99M4 56.006.73E-035.53E-011.16E+022.57E+044.41E-032.18E+002.19E+021.03E+04 - 99M4 74.002.29E-031.38E-011.71E+012.72E+031.66E-035.41E-013.94E+011.44E+03 - 99M4 107.005.41E-042.21E-021.40E+001.47E+024.49E-048.62E-024.22E+001.12E+02 - 99M4 155.001.26E-043.58E-031.19E-018.28E+001.18E-041.37E-024.65E-019.00E+00 - 99M4 285.001.16E-051.90E-042.46E-038.74E-021.28E-056.90E-041.36E-021.63E-01 - 99M4 500.001.35E-061.39E-058.90E-051.68E-031.59E-064.52E-055.87E-044.75E-03 - 99M5 5.362.93E+014.27E+042.94E+091.35E+135.20E+009.08E+034.16E+098.55E+13 - 99M5 6.361.74E+011.78E+048.84E+083.01E+123.01E+003.87E+031.26E+091.86E+13 - 99M5 8.367.32E+004.40E+031.30E+082.77E+111.24E+009.89E+021.86E+081.62E+12 - 99M5 12.361.99E+006.00E+028.31E+069.35E+093.49E-011.41E+021.21E+075.05E+10 - 99M5 19.364.13E-016.14E+013.53E+051.99E+087.97E-021.50E+015.24E+059.61E+08 - 99M5 29.009.36E-027.89E+002.05E+046.45E+062.07E-022.03E+003.12E+042.80E+07 - 99M5 44.001.91E-029.44E-011.09E+031.95E+055.05E-032.59E-011.70E+037.60E+05 - 99M5 56.007.48E-032.75E-011.99E+022.62E+042.21E-037.96E-023.15E+029.65E+04 - 99M5 74.002.49E-036.62E-022.80E+012.61E+038.44E-042.06E-024.51E+019.11E+03 - 99M5 107.005.71E-041.01E-022.11E+001.27E+022.33E-043.51E-033.47E+004.19E+02 - 99M5 155.001.30E-041.54E-031.60E-016.34E+006.34E-056.18E-042.65E-012.02E+01 - 99M5 285.001.22E-057.63E-052.44E-035.01E-027.45E-063.94E-053.97E-031.58E-01 - 99M5 500.001.51E-065.72E-066.05E-056.70E-041.09E-063.63E-068.87E-052.13E-03 - 99N+ 50.006.28E-025.45E+013.33E+031.57E+055.60E+002.91E+021.94E+049.85E+05 - 99N+ 70.002.64E-021.09E+014.46E+021.32E+042.08E+006.23E+012.35E+037.50E+04 - 99N+ 100.001.07E-022.05E+005.72E+011.09E+037.40E-011.29E+012.77E+025.52E+03 - 99N+ 150.003.83E-033.23E-016.01E+007.51E+012.30E-012.31E+002.75E+013.32E+02 - 99N+ 200.001.88E-039.14E-021.30E+001.24E+011.01E-017.19E-015.88E+005.09E+01 - 99N+ 500.002.44E-042.67E-031.70E-027.92E-027.86E-032.58E-028.37E-022.91E-01 -100K 143.011.83E-011.08E-012.18E-028.80E-041.39E+014.52E+013.23E+015.56E+00 -100K 143.711.81E-011.10E-012.53E-021.71E-031.37E+014.44E+013.25E+016.40E+00 -100K 145.011.77E-011.13E-013.22E-023.84E-031.34E+014.31E+013.31E+018.02E+00 -100K 148.211.69E-011.21E-014.96E-021.23E-021.26E+014.03E+013.42E+011.19E+01 -100K 152.011.60E-011.28E-017.07E-022.81E-021.17E+013.71E+013.48E+011.62E+01 -100K 156.001.51E-011.34E-019.24E-025.05E-021.09E+013.41E+013.48E+012.03E+01 -100K 162.001.39E-011.40E-011.23E-019.25E-029.75E+003.03E+013.43E+012.52E+01 -100K 170.001.25E-011.44E-011.59E-011.57E-018.51E+002.59E+013.27E+012.98E+01 -100K 182.001.08E-011.44E-011.99E-012.56E-017.02E+002.08E+012.94E+013.32E+01 -100K 195.009.31E-021.41E-012.28E-013.48E-015.78E+001.67E+012.56E+013.36E+01 -100K 212.007.77E-021.32E-012.46E-014.36E-014.56E+001.28E+012.11E+013.13E+01 -100K 225.006.84E-021.25E-012.51E-014.77E-013.86E+001.06E+011.82E+012.87E+01 -100K 242.005.85E-021.15E-012.48E-015.04E-013.15E+008.40E+001.49E+012.49E+01 -100K 265.004.84E-021.03E-012.35E-015.08E-012.44E+006.31E+001.15E+012.02E+01 -100K 290.004.01E-029.11E-022.17E-014.86E-011.90E+004.76E+008.82E+001.60E+01 -100K 355.002.67E-026.75E-021.69E-013.90E-011.09E+002.55E+004.76E+008.83E+00 -100K 440.001.76E-024.82E-021.21E-012.77E-016.05E-011.34E+002.44E+004.48E+00 -100K 530.001.24E-023.57E-028.86E-021.96E-013.65E-017.75E-011.38E+002.45E+00 -100K 640.008.86E-032.63E-026.34E-021.35E-012.19E-014.52E-017.77E-011.33E+00 -100K 870.005.21E-031.58E-023.63E-027.16E-029.63E-021.94E-013.16E-015.09E-01 -100K 1150.003.27E-039.91E-032.17E-024.02E-024.55E-029.26E-021.45E-012.21E-01 -100K 1400.002.37E-037.09E-031.51E-022.69E-022.68E-025.58E-028.55E-021.26E-01 -100K 1650.001.81E-035.34E-031.11E-021.93E-021.72E-023.68E-025.57E-028.00E-02 -100L1 28.574.65E-011.32E+021.39E+031.61E+032.98E+022.19E+043.77E+051.62E+06 -100L1 29.274.51E-011.19E+021.38E+032.58E+032.79E+021.96E+043.32E+051.56E+06 -100L1 30.574.22E-019.90E+011.33E+034.15E+032.45E+021.60E+042.65E+051.43E+06 -100L1 33.773.63E-016.53E+011.11E+036.24E+031.82E+021.01E+041.59E+051.06E+06 -100L1 37.573.07E-014.16E+018.22E+026.42E+031.33E+026.22E+039.16E+046.93E+05 -100L1 41.002.66E-012.87E+016.16E+025.66E+031.03E+024.18E+035.83E+044.69E+05 -100L1 47.002.10E-011.60E+013.73E+023.98E+036.86E+012.27E+032.89E+042.43E+05 -100L1 55.001.58E-018.19E+001.98E+022.31E+034.32E+011.13E+031.29E+041.09E+05 -100L1 67.001.09E-013.58E+008.58E+011.03E+032.42E+014.76E+024.72E+033.82E+04 -100L1 80.007.74E-021.73E+003.95E+014.66E+021.44E+012.22E+021.94E+031.47E+04 -100L1 97.005.26E-028.20E-011.69E+011.89E+028.21E+009.89E+017.46E+025.15E+03 -100L1 110.004.07E-025.16E-019.72E+001.03E+025.70E+005.88E+014.04E+022.61E+03 -100L1 127.003.03E-023.12E-015.22E+005.16E+013.76E+003.28E+012.03E+021.20E+03 -100L1 150.002.15E-021.81E-012.58E+002.32E+012.33E+001.69E+019.24E+014.95E+02 -100L1 175.001.56E-021.14E-011.38E+001.12E+011.50E+009.29E+004.54E+012.21E+02 -100L1 240.008.21E-034.81E-024.10E-012.64E+006.11E-012.84E+001.11E+014.41E+01 -100L1 325.004.52E-032.31E-021.43E-017.26E-012.61E-019.61E-013.09E+001.01E+01 -100L1 420.002.79E-031.31E-026.43E-022.66E-011.29E-014.02E-011.11E+003.13E+00 -100L1 530.001.84E-038.05E-033.29E-021.15E-016.80E-021.89E-014.60E-011.14E+00 -100L1 760.009.91E-043.96E-031.28E-023.55E-022.56E-026.26E-021.29E-012.68E-01 -100L11050.005.84E-042.16E-035.97E-031.40E-021.07E-022.47E-024.54E-028.26E-02 -100L11550.003.14E-041.06E-032.55E-035.12E-033.75E-038.56E-031.43E-022.30E-02 -100L2 27.661.17E+004.88E+033.05E+052.56E+064.22E+019.33E+025.17E+035.25E+03 -100L2 28.361.10E+004.32E+032.66E+052.44E+063.94E+018.52E+025.16E+038.44E+03 -100L2 29.669.82E-013.48E+032.08E+052.19E+063.45E+017.26E+025.03E+031.36E+04 -100L2 32.867.62E-012.13E+031.20E+051.54E+062.55E+015.04E+024.28E+032.06E+04 -100L2 36.665.78E-011.26E+036.60E+049.63E+051.85E+013.41E+023.28E+032.14E+04 -100L2 41.004.33E-017.38E+023.58E+045.60E+051.33E+012.28E+022.35E+031.83E+04 -100L2 47.003.03E-013.86E+021.70E+042.75E+058.96E+001.39E+021.49E+031.30E+04 -100L2 55.001.99E-011.84E+027.22E+031.16E+055.68E+007.89E+018.46E+027.81E+03 -100L2 67.001.17E-017.35E+012.47E+033.79E+043.21E+003.88E+013.98E+023.67E+03 -100L2 80.007.18E-023.25E+019.50E+021.36E+041.93E+002.05E+011.98E+021.75E+03 -100L2 97.004.22E-021.35E+013.39E+024.41E+031.12E+001.03E+019.08E+017.47E+02 -100L2 110.002.98E-027.69E+001.74E+022.11E+037.82E-016.62E+005.45E+014.23E+02 -100L2 127.002.00E-024.06E+008.20E+019.13E+025.22E-013.99E+003.03E+012.19E+02 -100L2 150.001.26E-021.96E+003.46E+013.47E+023.27E-012.24E+001.54E+011.01E+02 -100L2 175.008.28E-031.01E+001.58E+011.43E+022.13E-011.31E+008.23E+004.95E+01 -100L2 240.003.51E-032.68E-013.27E+002.42E+018.91E-024.50E-012.32E+001.15E+01 -100L2 325.001.57E-037.85E-027.66E-014.65E+003.89E-021.65E-017.07E-012.92E+00 -100L2 420.008.12E-042.90E-022.36E-011.22E+001.94E-027.22E-022.66E-019.47E-01 -100L2 530.004.53E-041.21E-028.49E-023.82E-011.03E-023.47E-021.13E-013.52E-01 -100L2 760.001.90E-043.37E-031.90E-027.03E-023.87E-031.15E-023.14E-028.17E-02 -100L21050.009.00E-051.14E-035.43E-031.73E-021.60E-034.42E-031.06E-022.39E-02 -100L21550.003.75E-053.38E-041.35E-033.68E-035.48E-041.45E-033.05E-036.01E-03 -100L3 21.872.93E+001.37E+041.16E+061.39E+072.75E+004.56E+042.52E+071.72E+09 -100L3 22.572.68E+001.17E+049.56E+051.24E+072.50E+003.92E+042.04E+071.35E+09 -100L3 23.872.28E+008.83E+036.84E+059.93E+062.11E+002.96E+041.40E+078.84E+08 -100L3 27.071.59E+004.70E+033.23E+055.49E+061.44E+001.58E+046.01E+063.42E+08 -100L3 30.871.09E+002.43E+031.48E+052.72E+069.62E-018.22E+032.50E+061.27E+08 -100L3 41.004.69E-015.84E+022.72E+045.12E+054.05E-012.00E+033.84E+051.53E+07 -100L3 47.003.11E-012.95E+021.21E+042.20E+052.67E-011.01E+031.57E+055.56E+06 -100L3 55.001.93E-011.34E+024.74E+038.14E+041.66E-014.64E+025.65E+041.75E+06 -100L3 67.001.05E-015.02E+011.47E+032.29E+049.12E-021.74E+021.59E+044.15E+05 -100L3 80.006.06E-022.08E+015.15E+027.25E+035.34E-027.21E+015.14E+031.16E+05 -100L3 97.003.32E-028.00E+001.65E+022.06E+032.99E-022.78E+011.53E+032.94E+04 -100L3 110.002.24E-024.30E+007.89E+019.04E+022.05E-021.49E+017.01E+021.22E+04 -100L3 127.001.43E-022.12E+003.40E+013.52E+021.33E-027.32E+002.90E+024.48E+03 -100L3 150.008.51E-039.39E-011.29E+011.19E+028.12E-033.22E+001.05E+021.43E+03 -100L3 175.005.27E-034.44E-015.28E+004.34E+015.13E-031.51E+004.17E+015.03E+02 -100L3 240.001.99E-039.70E-028.67E-015.66E+002.02E-033.20E-016.49E+006.23E+01 -100L3 325.007.96E-042.31E-021.59E-018.37E-018.31E-047.30E-021.14E+008.96E+00 -100L3 420.003.74E-047.08E-033.93E-021.75E-013.96E-042.12E-022.73E-011.83E+00 -100L3 530.001.92E-042.49E-031.15E-024.47E-022.04E-046.96E-037.66E-024.52E-01 -100L3 760.007.07E-055.27E-041.89E-036.12E-037.44E-051.29E-031.13E-025.61E-02 -100L31050.003.06E-051.43E-044.23E-041.18E-033.13E-053.01E-042.14E-039.34E-03 -100L31550.001.21E-053.44E-058.26E-051.95E-041.19E-055.93E-053.12E-041.18E-03 -100M1 8.198.31E-018.75E+034.57E+054.44E+063.04E+032.65E+065.41E+082.76E+10 -100M1 9.197.38E-015.35E+032.83E+054.18E+062.15E+031.51E+062.58E+081.27E+10 -100M1 11.195.86E-012.32E+031.23E+052.47E+061.19E+035.78E+057.35E+073.36E+09 -100M1 15.193.85E-016.33E+023.30E+047.79E+054.80E+021.32E+051.08E+074.17E+08 -100M1 22.192.11E-011.27E+026.15E+031.50E+051.55E+022.15E+041.06E+063.16E+07 -100M1 29.001.33E-014.05E+011.82E+034.25E+047.00E+016.11E+032.15E+055.23E+06 -100M1 44.006.14E-026.87E+002.64E+025.38E+032.04E+018.92E+021.93E+043.35E+05 -100M1 56.003.84E-022.48E+008.50E+011.56E+031.00E+013.01E+024.99E+037.12E+04 -100M1 74.002.19E-027.86E-012.29E+013.63E+024.41E+008.80E+011.09E+031.24E+04 -100M1 107.001.02E-021.86E-014.12E+005.25E+011.50E+001.83E+011.58E+021.32E+03 -100M1 155.004.71E-035.08E-027.90E-017.81E+005.17E-014.03E+002.50E+011.54E+02 -100M1 285.001.37E-038.65E-036.89E-024.20E-019.18E-023.98E-011.52E+005.93E+00 -100M1 500.004.78E-042.32E-031.07E-024.16E-021.94E-025.79E-021.53E-014.13E-01 -100M2 7.781.70E+006.66E+053.94E+083.19E+104.95E+021.03E+055.43E+065.64E+07 -100M2 8.781.51E+003.66E+051.81E+081.41E+103.45E+025.95E+043.04E+064.96E+07 -100M2 10.781.18E+001.33E+054.87E+073.52E+091.87E+022.39E+041.12E+062.55E+07 -100M2 14.787.17E-012.83E+046.70E+064.09E+087.33E+016.03E+032.40E+056.25E+06 -100M2 21.783.43E-014.26E+036.15E+052.93E+072.33E+011.16E+033.64E+048.92E+05 -100M2 29.001.86E-011.07E+031.09E+054.27E+061.00E+013.56E+029.16E+032.00E+05 -100M2 44.007.09E-021.46E+029.38E+032.70E+052.96E+006.69E+011.28E+032.20E+04 -100M2 56.003.92E-024.69E+012.34E+035.60E+041.47E+002.61E+014.17E+026.15E+03 -100M2 74.001.94E-021.29E+014.85E+029.36E+036.61E-018.99E+001.17E+021.42E+03 -100M2 107.007.41E-032.41E+006.38E+019.25E+022.32E-012.28E+002.24E+012.11E+02 -100M2 155.002.78E-034.71E-018.89E+009.70E+018.19E-025.99E-014.48E+003.23E+01 -100M2 285.005.62E-043.67E-024.16E-012.90E+001.52E-027.32E-023.57E-011.69E+00 -100M2 500.001.36E-044.15E-033.11E-021.50E-013.30E-031.17E-024.05E-021.35E-01 -100M3 6.407.26E+001.87E+061.29E+091.20E+113.02E+016.44E+064.06E+103.16E+13 -100M3 7.405.62E+009.03E+054.95E+084.26E+101.95E+013.12E+061.49E+109.12E+12 -100M3 9.403.54E+002.72E+051.04E+087.76E+099.45E+009.45E+052.86E+091.20E+12 -100M3 13.401.67E+004.60E+041.05E+076.26E+083.23E+001.61E+052.51E+086.14E+10 -100M3 20.406.18E-015.59E+037.24E+053.23E+079.06E-011.98E+041.43E+071.94E+09 -100M3 29.002.52E-019.61E+028.02E+042.77E+063.13E-013.42E+031.34E+061.15E+08 -100M3 44.008.12E-021.20E+026.14E+031.55E+058.88E-024.29E+028.39E+044.38E+06 -100M3 56.004.10E-023.59E+011.41E+032.96E+044.29E-021.29E+021.73E+046.91E+05 -100M3 74.001.82E-028.99E+002.62E+024.41E+031.86E-023.24E+012.87E+038.52E+04 -100M3 107.006.10E-031.45E+002.90E+013.64E+026.19E-035.20E+002.78E+025.75E+03 -100M3 155.002.00E-032.37E-013.28E+003.07E+012.06E-038.34E-012.84E+014.20E+02 -100M3 285.003.22E-041.27E-029.99E-025.89E-013.46E-044.21E-027.73E-017.04E+00 -100M3 500.006.31E-059.55E-044.69E-031.91E-026.88E-052.78E-033.31E-022.09E-01 -100M4 5.751.80E+015.49E+041.02E+096.36E+129.14E+002.20E+056.37E+082.08E+11 -100M4 6.751.12E+012.45E+043.33E+081.57E+125.47E+009.87E+042.16E+086.25E+10 -100M4 8.755.01E+006.61E+035.40E+071.65E+112.37E+002.69E+043.80E+078.93E+09 -100M4 12.751.47E+009.96E+023.85E+066.48E+096.95E-014.07E+033.13E+065.37E+08 -100M4 19.753.29E-011.11E+021.80E+051.57E+081.64E-014.54E+021.80E+052.11E+07 -100M4 29.008.32E-021.62E+011.22E+046.30E+064.51E-026.61E+011.52E+041.27E+06 -100M4 44.001.77E-022.02E+006.72E+022.02E+051.09E-028.18E+001.10E+036.31E+04 -100M4 56.007.09E-036.05E-011.27E+022.83E+044.72E-032.44E+002.44E+021.13E+04 -100M4 74.002.42E-031.51E-011.87E+012.99E+031.78E-036.08E-014.39E+011.60E+03 -100M4 107.005.74E-042.43E-021.53E+001.61E+024.82E-049.69E-024.69E+001.24E+02 -100M4 155.001.34E-043.93E-031.30E-019.12E+001.27E-041.55E-025.17E-019.97E+00 -100M4 285.001.24E-052.09E-042.68E-039.64E-021.38E-057.75E-041.52E-021.81E-01 -100M4 500.001.44E-061.52E-059.72E-051.85E-031.72E-065.07E-056.55E-045.28E-03 -100M5 5.492.81E+014.01E+042.75E+091.22E+135.10E+008.72E+034.01E+097.96E+13 -100M5 6.491.68E+011.70E+048.50E+082.81E+122.98E+003.78E+031.24E+091.78E+13 -100M5 8.497.19E+004.30E+031.29E+082.69E+111.25E+009.87E+021.89E+081.62E+12 -100M5 12.491.99E+006.01E+028.52E+069.45E+093.57E-011.44E+021.27E+075.26E+10 -100M5 19.494.20E-016.27E+013.72E+052.07E+088.25E-021.57E+015.65E+051.03E+09 -100M5 29.009.77E-028.32E+002.26E+047.08E+062.19E-022.17E+003.51E+043.18E+07 -100M5 44.002.01E-029.97E-011.20E+032.14E+055.35E-032.78E-011.91E+038.61E+05 -100M5 56.007.86E-032.91E-012.19E+022.87E+042.34E-038.53E-023.55E+021.09E+05 -100M5 74.002.62E-037.01E-023.08E+012.86E+038.96E-042.20E-025.08E+011.03E+04 -100M5 107.006.04E-041.07E-022.33E+001.40E+022.48E-043.76E-033.90E+004.73E+02 -100M5 155.001.38E-041.63E-031.76E-016.94E+006.74E-056.61E-042.98E-012.27E+01 -100M5 285.001.28E-058.14E-052.69E-035.49E-027.94E-064.22E-054.45E-031.78E-01 -100M5 500.001.63E-066.11E-066.62E-057.34E-041.16E-063.89E-069.90E-052.39E-03 -100N+ 50.006.47E-025.99E+013.65E+031.75E+056.28E+003.25E+022.18E+041.11E+06 -100N+ 70.002.72E-021.19E+014.88E+021.46E+042.33E+006.94E+012.63E+038.43E+04 -100N+ 100.001.10E-022.26E+006.26E+011.20E+038.29E-011.43E+013.08E+026.17E+03 -100N+ 150.003.97E-033.56E-016.59E+008.23E+012.57E-012.56E+003.05E+013.69E+02 -100N+ 200.001.96E-031.01E-011.43E+001.36E+011.13E-017.98E-016.51E+005.64E+01 -100N+ 500.002.58E-042.95E-031.88E-028.73E-028.79E-032.86E-029.23E-023.20E-01 -101K 146.631.74E-011.02E-012.08E-028.22E-041.42E+014.41E+013.04E+015.08E+00 -101K 147.331.72E-011.04E-012.41E-021.58E-031.40E+014.33E+013.06E+015.84E+00 -101K 148.631.69E-011.07E-013.04E-023.52E-031.37E+014.22E+013.12E+017.29E+00 -101K 151.831.61E-011.15E-014.67E-021.12E-021.29E+013.94E+013.22E+011.08E+01 -101K 155.631.53E-011.22E-016.64E-022.56E-021.20E+013.64E+013.28E+011.47E+01 -101K 160.001.44E-011.28E-018.87E-024.81E-021.11E+013.34E+013.30E+011.87E+01 -101K 166.001.33E-011.34E-011.18E-018.70E-029.98E+002.97E+013.25E+012.32E+01 -101K 174.001.20E-011.38E-011.51E-011.47E-018.74E+002.55E+013.11E+012.74E+01 -101K 186.001.04E-011.39E-011.91E-012.39E-017.24E+002.07E+012.81E+013.07E+01 -101K 199.009.02E-021.36E-012.19E-013.27E-015.98E+001.67E+012.47E+013.12E+01 -101K 216.007.57E-021.29E-012.38E-014.12E-014.75E+001.28E+012.05E+012.93E+01 -101K 229.006.68E-021.22E-012.43E-014.53E-014.03E+001.07E+011.77E+012.70E+01 -101K 246.005.75E-021.14E-012.42E-014.82E-013.30E+008.51E+001.46E+012.37E+01 -101K 269.004.77E-021.02E-012.32E-014.90E-012.57E+006.43E+001.14E+011.94E+01 -101K 295.003.95E-029.05E-022.15E-014.72E-011.99E+004.82E+008.70E+001.53E+01 -101K 360.002.65E-026.80E-021.69E-013.85E-011.15E+002.62E+004.77E+008.65E+00 -101K 445.001.77E-024.91E-021.23E-012.77E-016.42E-011.39E+002.48E+004.46E+00 -101K 540.001.24E-023.61E-028.91E-021.95E-013.79E-017.88E-011.37E+002.40E+00 -101K 650.008.90E-032.68E-026.44E-021.35E-012.30E-014.66E-017.87E-011.33E+00 -101K 880.005.30E-031.63E-023.73E-027.32E-021.02E-012.02E-013.26E-015.18E-01 -101K 1150.003.40E-031.04E-022.29E-024.23E-024.96E-029.98E-021.55E-012.34E-01 -101K 1400.002.46E-037.48E-031.59E-022.83E-022.91E-026.01E-029.14E-021.33E-01 -101K 1650.001.89E-035.64E-031.17E-022.03E-021.86E-023.97E-025.96E-028.51E-02 -101L1 29.384.37E-011.27E+021.28E+031.42E+033.04E+022.12E+043.51E+051.45E+06 -101L1 30.084.24E-011.15E+021.27E+032.27E+032.86E+021.90E+043.10E+051.40E+06 -101L1 31.383.98E-019.66E+011.23E+033.65E+032.52E+021.56E+042.49E+051.29E+06 -101L1 34.583.45E-016.46E+011.04E+035.55E+031.89E+021.00E+041.51E+059.67E+05 -101L1 38.382.92E-014.17E+017.82E+025.81E+031.39E+026.23E+038.85E+046.44E+05 -101L1 41.002.63E-013.16E+016.33E+025.37E+031.14E+024.62E+036.30E+044.82E+05 -101L1 47.002.08E-011.77E+013.89E+023.93E+037.63E+012.50E+033.12E+042.53E+05 -101L1 55.001.58E-019.13E+002.10E+022.34E+034.80E+011.24E+031.40E+041.15E+05 -101L1 67.001.09E-014.01E+009.19E+011.07E+032.69E+015.24E+025.12E+034.05E+04 -101L1 80.007.76E-021.95E+004.27E+014.89E+021.60E+012.45E+022.10E+031.56E+04 -101L1 97.005.30E-029.23E-011.84E+012.00E+029.12E+001.09E+028.10E+025.51E+03 -101L1 110.004.11E-025.80E-011.06E+011.10E+026.33E+006.47E+014.39E+022.79E+03 -101L1 127.003.07E-023.50E-015.73E+005.55E+014.18E+003.61E+012.20E+021.29E+03 -101L1 150.002.18E-022.02E-012.84E+002.51E+012.59E+001.86E+011.01E+025.33E+02 -101L1 175.001.59E-021.26E-011.51E+001.21E+011.66E+001.02E+014.93E+012.38E+02 -101L1 240.008.40E-035.27E-024.51E-012.88E+006.79E-013.11E+001.21E+014.76E+01 -101L1 325.004.65E-032.51E-021.57E-017.92E-012.90E-011.05E+003.36E+001.09E+01 -101L1 420.002.89E-031.41E-027.02E-022.90E-011.42E-014.41E-011.21E+003.38E+00 -101L1 530.001.91E-038.66E-033.58E-021.25E-017.53E-022.07E-015.01E-011.23E+00 -101L1 760.001.03E-034.25E-031.39E-023.85E-022.83E-026.86E-021.41E-012.90E-01 -101L11050.006.10E-042.31E-036.45E-031.51E-021.18E-022.70E-024.94E-028.95E-02 -101L11550.003.29E-041.13E-032.75E-035.52E-034.12E-039.37E-031.56E-022.50E-02 -101L2 28.461.11E+004.63E+032.78E+052.25E+064.38E+019.08E+024.83E+034.69E+03 -101L2 29.161.05E+004.13E+032.43E+052.14E+064.11E+018.33E+024.82E+037.49E+03 -101L2 30.469.38E-013.34E+031.92E+051.93E+063.61E+017.12E+024.71E+031.21E+04 -101L2 33.667.34E-012.07E+031.12E+051.38E+062.69E+015.00E+024.05E+031.85E+04 -101L2 37.465.61E-011.24E+036.26E+048.77E+051.97E+013.41E+023.14E+031.96E+04 -101L2 41.004.45E-018.06E+023.83E+045.71E+051.51E+012.47E+022.42E+031.76E+04 -101L2 47.003.12E-014.22E+021.82E+042.84E+051.01E+011.51E+021.55E+031.29E+04 -101L2 55.002.06E-012.02E+027.75E+031.21E+056.43E+008.59E+018.90E+027.90E+03 -101L2 67.001.21E-018.04E+012.66E+033.99E+043.64E+004.23E+014.22E+023.79E+03 -101L2 80.007.48E-023.56E+011.03E+031.44E+042.19E+002.24E+012.11E+021.82E+03 -101L2 97.004.41E-021.48E+013.67E+024.69E+031.26E+001.13E+019.74E+017.86E+02 -101L2 110.003.12E-028.44E+001.89E+022.25E+038.86E-017.26E+005.86E+014.47E+02 -101L2 127.002.10E-024.46E+008.90E+019.77E+025.92E-014.39E+003.27E+012.32E+02 -101L2 150.001.33E-022.15E+003.76E+013.73E+023.71E-012.46E+001.66E+011.08E+02 -101L2 175.008.74E-031.11E+001.72E+011.54E+022.42E-011.45E+008.92E+005.30E+01 -101L2 240.003.73E-032.95E-013.57E+002.61E+011.01E-014.98E-012.52E+001.24E+01 -101L2 325.001.68E-038.67E-028.40E-015.05E+004.42E-021.83E-017.73E-013.17E+00 -101L2 420.008.70E-043.20E-022.60E-011.33E+002.20E-028.02E-022.92E-011.03E+00 -101L2 530.004.88E-041.34E-029.35E-024.18E-011.17E-023.86E-021.24E-013.85E-01 -101L2 760.002.05E-043.74E-032.10E-027.73E-024.41E-031.29E-023.47E-028.99E-02 -101L21050.009.75E-051.27E-036.03E-031.91E-021.82E-034.96E-031.17E-022.64E-02 -101L21550.004.11E-053.77E-041.50E-034.08E-036.23E-041.63E-033.40E-036.67E-03 -101L3 22.362.81E+001.31E+041.07E+061.25E+072.70E+004.50E+042.40E+071.60E+09 -101L3 23.062.57E+001.13E+048.87E+051.12E+072.46E+003.89E+041.96E+071.26E+09 -101L3 24.362.19E+008.59E+036.38E+058.97E+062.08E+002.96E+041.35E+078.33E+08 -101L3 27.561.54E+004.62E+033.07E+055.03E+061.43E+001.60E+045.91E+063.29E+08 -101L3 31.361.06E+002.41E+031.42E+052.53E+069.63E-018.40E+032.50E+061.24E+08 -101L3 41.004.81E-016.29E+022.87E+045.26E+054.26E-012.21E+034.25E+051.68E+07 -101L3 47.003.19E-013.17E+021.28E+042.27E+052.81E-011.12E+031.74E+056.10E+06 -101L3 55.001.98E-011.45E+025.01E+038.43E+041.74E-015.12E+026.25E+041.92E+06 -101L3 67.001.08E-015.40E+011.55E+032.38E+049.59E-021.92E+021.76E+044.56E+05 -101L3 80.006.24E-022.24E+015.44E+027.55E+035.61E-027.97E+015.68E+031.27E+05 -101L3 97.003.43E-028.61E+001.75E+022.15E+033.14E-023.06E+011.69E+033.23E+04 -101L3 110.002.31E-024.63E+008.34E+019.43E+022.15E-021.64E+017.73E+021.33E+04 -101L3 127.001.48E-022.28E+003.60E+013.68E+021.40E-028.08E+003.19E+024.90E+03 -101L3 150.008.80E-031.01E+001.36E+011.24E+028.53E-033.55E+001.16E+021.56E+03 -101L3 175.005.46E-034.77E-015.59E+004.55E+015.39E-031.66E+004.59E+015.51E+02 -101L3 240.002.06E-031.04E-019.19E-015.94E+002.12E-033.53E-017.13E+006.82E+01 -101L3 325.008.27E-042.48E-021.68E-018.81E-018.73E-048.04E-021.25E+009.79E+00 -101L3 420.003.89E-047.58E-034.16E-021.85E-014.15E-042.33E-022.99E-012.00E+00 -101L3 530.002.00E-042.66E-031.22E-024.72E-022.13E-047.64E-038.40E-024.94E-01 -101L3 760.007.37E-055.61E-042.01E-036.48E-037.79E-051.41E-031.24E-026.13E-02 -101L31050.003.18E-051.52E-044.48E-041.26E-033.27E-053.27E-042.35E-031.02E-02 -101L31550.001.26E-053.62E-058.73E-052.07E-041.24E-056.40E-053.40E-041.28E-03 -101M1 8.427.83E-018.60E+034.39E+054.09E+063.12E+032.58E+065.05E+082.49E+10 -101M1 9.426.98E-015.33E+032.75E+053.91E+062.23E+031.49E+062.45E+081.17E+10 -101M1 11.425.57E-012.35E+031.22E+052.37E+061.25E+035.83E+057.19E+073.19E+09 -101M1 15.423.70E-016.57E+023.34E+047.69E+055.11E+021.37E+051.10E+074.12E+08 -101M1 22.422.06E-011.35E+026.35E+031.51E+051.68E+022.28E+041.11E+063.23E+07 -101M1 30.001.24E-013.91E+011.69E+033.84E+047.06E+015.80E+031.95E+054.57E+06 -101M1 45.005.88E-027.01E+002.59E+025.14E+032.12E+018.94E+021.88E+043.18E+05 -101M1 57.003.72E-022.60E+008.57E+011.53E+031.06E+013.08E+024.99E+036.97E+04 -101M1 75.002.15E-028.43E-012.37E+013.67E+024.73E+009.20E+011.12E+031.25E+04 -101M1 108.001.01E-022.03E-014.38E+005.46E+011.63E+001.94E+011.66E+021.37E+03 -101M1 155.004.80E-035.70E-028.78E-018.57E+005.75E-014.45E+002.74E+011.69E+02 -101M1 285.001.41E-039.51E-037.64E-024.63E-011.02E-014.39E-011.66E+006.46E+00 -101M1 510.004.79E-042.41E-031.11E-024.23E-022.04E-025.97E-021.55E-014.12E-01 -101M2 8.001.58E+006.35E+053.60E+082.81E+105.17E+021.00E+055.10E+065.07E+07 -101M2 9.001.42E+003.55E+051.69E+081.27E+103.64E+025.91E+042.90E+064.53E+07 -101M2 11.001.12E+001.32E+054.68E+073.27E+092.00E+022.42E+041.10E+062.39E+07 -101M2 15.006.94E-012.88E+046.67E+063.96E+087.97E+016.26E+032.42E+056.08E+06 -101M2 22.003.39E-014.45E+036.31E+052.95E+072.57E+011.23E+033.76E+048.98E+05 -101M2 30.001.76E-019.96E+029.75E+043.67E+061.03E+013.43E+028.47E+031.78E+05 -101M2 45.006.90E-021.44E+028.99E+032.51E+053.15E+006.77E+011.25E+032.10E+04 -101M2 57.003.88E-024.75E+012.31E+035.40E+041.59E+002.69E+014.18E+026.02E+03 -101M2 75.001.94E-021.33E+014.91E+029.30E+037.24E-019.45E+001.20E+021.43E+03 -101M2 108.007.57E-032.55E+006.63E+019.47E+022.57E-012.44E+002.35E+012.17E+02 -101M2 155.002.93E-035.20E-019.74E+001.06E+029.32E-026.63E-014.90E+003.51E+01 -101M2 285.006.00E-044.07E-024.57E-013.17E+001.73E-028.14E-023.93E-011.84E+00 -101M2 510.001.40E-044.29E-033.16E-021.49E-013.56E-031.23E-024.17E-021.36E-01 -101M3 6.556.97E+001.81E+061.19E+091.07E+112.98E+016.39E+063.88E+102.94E+13 -101M3 7.555.42E+008.85E+054.67E+083.90E+101.94E+013.14E+061.45E+108.70E+12 -101M3 9.553.45E+002.72E+051.00E+087.31E+099.51E+009.71E+052.87E+091.18E+12 -101M3 13.551.64E+004.71E+041.05E+076.10E+083.30E+001.69E+052.60E+086.30E+10 -101M3 20.556.16E-015.84E+037.39E+053.23E+079.35E-012.12E+041.52E+072.05E+09 -101M3 30.002.35E-018.78E+026.93E+042.30E+062.98E-013.21E+031.19E+069.83E+07 -101M3 45.007.81E-021.16E+025.70E+031.39E+058.75E-024.26E+028.07E+044.10E+06 -101M3 57.004.00E-023.56E+011.35E+032.75E+044.29E-021.32E+021.72E+046.71E+05 -101M3 75.001.80E-029.10E+002.58E+024.23E+031.89E-023.36E+012.93E+038.55E+04 -101M3 108.006.13E-031.50E+002.92E+013.60E+026.35E-035.52E+002.92E+025.95E+03 -101M3 155.002.07E-032.56E-013.49E+003.23E+012.18E-039.25E-013.15E+014.64E+02 -101M3 285.003.34E-041.37E-021.06E-016.23E-013.65E-044.66E-028.55E-017.76E+00 -101M3 510.006.24E-059.40E-044.51E-031.81E-026.85E-052.79E-033.28E-022.04E-01 -101M4 5.891.73E+015.32E+049.45E+085.73E+128.99E+002.20E+056.08E+081.93E+11 -101M4 6.891.08E+012.41E+043.14E+081.46E+125.44E+001.00E+052.11E+085.95E+10 -101M4 8.894.91E+006.67E+035.26E+071.59E+112.39E+002.79E+043.83E+078.79E+09 -101M4 12.891.47E+001.03E+033.89E+066.53E+097.13E-014.34E+033.26E+065.48E+08 -101M4 19.893.35E-011.17E+021.86E+051.64E+081.70E-014.92E+021.92E+052.22E+07 -101M4 30.007.69E-021.49E+011.05E+045.23E+064.29E-026.26E+011.37E+041.10E+06 -101M4 45.001.71E-021.97E+006.26E+021.84E+051.07E-028.21E+001.06E+035.93E+04 -101M4 57.006.98E-036.07E-011.22E+022.69E+044.75E-032.51E+002.43E+021.11E+04 -101M4 75.002.43E-031.55E-011.85E+012.96E+031.82E-036.39E-014.49E+011.60E+03 -101M4 108.005.89E-042.54E-021.56E+001.65E+025.00E-041.04E-014.93E+001.28E+02 -101M4 155.001.43E-044.32E-031.42E-011.00E+011.37E-041.74E-025.75E-011.10E+01 -101M4 285.001.32E-052.30E-042.92E-031.06E-011.49E-058.71E-041.69E-022.00E-01 -101M4 510.001.46E-061.52E-059.50E-051.78E-031.73E-065.17E-056.56E-045.21E-03 -101M5 5.612.69E+013.76E+042.59E+091.11E+135.00E+008.37E+033.86E+097.41E+13 -101M5 6.611.63E+011.62E+048.18E+082.63E+122.95E+003.69E+031.22E+091.71E+13 -101M5 8.617.07E+004.21E+031.28E+082.61E+111.26E+009.86E+021.93E+081.62E+12 -101M5 12.611.99E+006.02E+028.74E+069.54E+093.64E-011.47E+021.33E+075.47E+10 -101M5 19.614.26E-016.39E+013.91E+052.15E+088.53E-021.63E+016.08E+051.11E+09 -101M5 30.008.98E-027.38E+001.96E+045.83E+062.07E-021.97E+003.12E+042.68E+07 -101M5 45.001.93E-029.38E-011.12E+031.94E+055.25E-032.67E-011.84E+038.03E+05 -101M5 57.007.69E-032.81E-012.13E+022.71E+042.34E-038.38E-023.53E+021.06E+05 -101M5 75.002.61E-036.92E-023.09E+012.81E+039.07E-042.21E-025.20E+011.04E+04 -101M5 108.006.14E-041.08E-022.40E+001.42E+022.55E-043.86E-034.11E+004.94E+02 -101M5 155.001.46E-041.73E-031.94E-017.60E+007.17E-057.08E-043.34E-012.56E+01 -101M5 285.001.36E-058.66E-052.95E-036.01E-028.45E-064.51E-054.98E-031.99E-01 -101M5 510.001.62E-065.98E-066.38E-056.92E-041.16E-063.84E-069.67E-052.31E-03 -102K 150.331.66E-019.75E-021.99E-027.69E-041.46E+014.31E+012.87E+014.65E+00 -102K 151.031.64E-019.91E-022.29E-021.47E-031.44E+014.24E+012.89E+015.33E+00 -102K 152.331.61E-011.02E-012.89E-023.24E-031.40E+014.13E+012.95E+016.63E+00 -102K 155.531.54E-011.09E-014.41E-021.02E-021.32E+013.87E+013.04E+019.77E+00 -102K 159.331.46E-011.16E-016.26E-022.33E-021.23E+013.58E+013.10E+011.33E+01 -102K 163.001.39E-011.21E-018.03E-024.02E-021.16E+013.33E+013.12E+011.64E+01 -102K 169.001.29E-011.27E-011.08E-017.50E-021.04E+012.97E+013.09E+012.07E+01 -102K 177.001.17E-011.32E-011.41E-011.30E-019.16E+002.57E+012.98E+012.48E+01 -102K 189.001.02E-011.34E-011.80E-012.16E-017.61E+002.09E+012.72E+012.82E+01 -102K 202.008.84E-021.32E-012.09E-013.01E-016.31E+001.69E+012.40E+012.90E+01 -102K 219.007.45E-021.26E-012.30E-013.85E-015.02E+001.31E+012.01E+012.77E+01 -102K 232.006.59E-021.21E-012.36E-014.28E-014.27E+001.09E+011.75E+012.57E+01 -102K 249.005.69E-021.13E-012.37E-014.61E-013.50E+008.75E+001.45E+012.28E+01 -102K 272.004.75E-021.02E-012.29E-014.73E-012.74E+006.64E+001.14E+011.88E+01 -102K 300.003.89E-029.01E-022.12E-014.59E-012.09E+004.90E+008.60E+001.48E+01 -102K 365.002.64E-026.86E-021.70E-013.80E-011.21E+002.69E+004.78E+008.48E+00 -102K 450.001.77E-025.01E-021.25E-012.78E-016.84E-011.44E+002.53E+004.45E+00 -102K 540.001.27E-023.77E-029.28E-022.01E-014.16E-018.48E-011.45E+002.50E+00 -102K 650.009.19E-032.81E-026.74E-021.41E-012.52E-015.01E-018.35E-011.39E+00 -102K 880.005.49E-031.72E-023.93E-027.66E-021.11E-012.18E-013.47E-015.46E-01 -102K 1150.003.53E-031.10E-022.42E-024.45E-025.42E-021.08E-011.65E-012.48E-01 -102K 1400.002.56E-037.90E-031.68E-022.99E-023.18E-026.50E-029.78E-021.42E-01 -102K 1650.001.96E-035.96E-031.24E-022.15E-022.03E-024.29E-026.38E-029.06E-02 -102L1 30.224.13E-011.23E+021.17E+031.25E+033.15E+022.06E+043.26E+051.30E+06 -102L1 30.924.00E-011.12E+021.17E+031.99E+032.94E+021.86E+042.90E+051.26E+06 -102L1 32.223.76E-019.43E+011.14E+033.21E+032.60E+021.53E+042.34E+051.17E+06 -102L1 35.423.27E-016.39E+019.72E+024.95E+031.97E+029.93E+031.44E+058.85E+05 -102L1 39.222.79E-014.19E+017.43E+025.26E+031.45E+026.24E+038.56E+045.98E+05 -102L1 42.002.49E-013.14E+015.99E+024.89E+031.19E+024.58E+036.02E+044.45E+05 -102L1 48.001.99E-011.80E+013.75E+023.64E+038.00E+012.51E+033.03E+042.38E+05 -102L1 56.001.52E-019.43E+002.06E+022.21E+035.08E+011.27E+031.38E+041.10E+05 -102L1 68.001.06E-014.23E+009.24E+011.04E+032.87E+015.42E+025.16E+033.98E+04 -102L1 81.007.60E-022.09E+004.37E+014.85E+021.72E+012.56E+022.15E+031.56E+04 -102L1 98.005.22E-021.00E+001.92E+012.03E+029.87E+001.15E+028.38E+025.58E+03 -102L1 111.004.07E-026.31E-011.12E+011.13E+026.88E+006.87E+014.57E+022.85E+03 -102L1 128.003.05E-023.82E-016.08E+005.74E+014.55E+003.85E+012.31E+021.33E+03 -102L1 151.002.18E-022.21E-013.04E+002.63E+012.83E+001.99E+011.06E+025.54E+02 -102L1 180.001.53E-021.29E-011.49E+001.15E+011.71E+001.01E+014.73E+012.21E+02 -102L1 245.008.26E-035.49E-024.61E-012.86E+007.13E-013.17E+001.20E+014.64E+01 -102L1 330.004.65E-032.64E-021.64E-018.13E-013.09E-011.10E+003.44E+001.10E+01 -102L1 420.002.98E-031.53E-027.68E-023.16E-011.58E-014.84E-011.31E+003.66E+00 -102L1 530.001.98E-039.36E-033.90E-021.36E-018.37E-022.27E-015.45E-011.33E+00 -102L1 760.001.08E-034.57E-031.51E-024.18E-023.14E-027.52E-021.53E-013.15E-01 -102L11050.006.39E-042.48E-036.98E-031.64E-021.31E-022.96E-025.39E-029.71E-02 -102L11550.003.46E-041.22E-032.96E-035.97E-034.55E-031.03E-021.70E-022.72E-02 -102L2 29.281.05E+004.43E+032.52E+051.95E+064.60E+018.85E+024.47E+034.16E+03 -102L2 29.989.96E-013.95E+032.22E+051.88E+064.30E+018.14E+024.50E+036.65E+03 -102L2 31.288.97E-013.21E+031.76E+051.71E+063.79E+017.00E+024.41E+031.07E+04 -102L2 34.487.07E-012.02E+031.05E+051.24E+062.85E+014.96E+023.83E+031.66E+04 -102L2 38.285.44E-011.22E+035.94E+047.99E+052.10E+013.42E+023.00E+031.78E+04 -102L2 42.004.30E-017.87E+023.59E+045.16E+051.60E+012.46E+022.31E+031.62E+04 -102L2 48.003.04E-014.19E+021.74E+042.62E+051.08E+011.52E+021.51E+031.20E+04 -102L2 56.002.03E-012.03E+027.56E+031.14E+056.93E+008.77E+018.75E+027.51E+03 -102L2 68.001.21E-018.23E+012.65E+033.85E+043.96E+004.38E+014.23E+023.68E+03 -102L2 81.007.53E-023.69E+011.04E+031.42E+042.40E+002.35E+012.14E+021.80E+03 -102L2 98.004.48E-021.55E+013.76E+024.70E+031.40E+001.20E+011.00E+027.90E+02 -102L2 111.003.19E-028.90E+001.95E+022.28E+039.83E-017.72E+006.07E+014.54E+02 -102L2 128.002.16E-024.74E+009.28E+019.99E+026.58E-014.69E+003.42E+012.38E+02 -102L2 151.001.38E-022.30E+003.96E+013.86E+024.15E-012.65E+001.75E+011.12E+02 -102L2 180.008.55E-031.08E+001.62E+011.42E+022.55E-011.45E+008.65E+004.99E+01 -102L2 245.003.75E-032.99E-013.53E+002.53E+011.09E-015.14E-012.54E+001.22E+01 -102L2 330.001.72E-039.02E-028.58E-015.07E+004.83E-021.93E-017.99E-013.21E+00 -102L2 420.009.32E-043.55E-022.85E-011.45E+002.51E-028.93E-023.21E-011.13E+00 -102L2 530.005.25E-041.49E-021.03E-014.58E-011.34E-024.31E-021.37E-014.22E-01 -102L2 760.002.22E-044.16E-032.32E-028.50E-025.03E-031.44E-023.85E-029.89E-02 -102L21050.001.06E-041.42E-036.69E-032.11E-022.08E-035.56E-031.31E-022.92E-02 -102L21550.004.48E-054.21E-041.68E-034.53E-037.11E-041.84E-033.80E-037.41E-03 -102L3 22.852.68E+001.28E+049.86E+051.12E+072.66E+004.50E+042.30E+071.49E+09 -102L3 23.552.46E+001.10E+048.24E+051.01E+072.43E+003.87E+041.88E+071.18E+09 -102L3 24.852.11E+008.36E+035.97E+058.12E+062.05E+002.96E+041.31E+077.86E+08 -102L3 28.051.50E+004.55E+032.91E+054.61E+061.42E+001.62E+045.82E+063.16E+08 -102L3 31.851.04E+002.40E+031.36E+052.35E+069.65E-018.59E+032.50E+061.21E+08 -102L3 42.004.58E-016.00E+022.63E+044.67E+054.15E-012.17E+034.01E+051.54E+07 -102L3 48.003.07E-013.08E+021.19E+042.05E+052.77E-011.12E+031.67E+055.73E+06 -102L3 56.001.92E-011.42E+024.75E+037.78E+041.73E-015.18E+026.15E+041.85E+06 -102L3 68.001.06E-015.40E+011.50E+032.25E+049.63E-021.97E+021.76E+044.49E+05 -102L3 81.006.18E-022.26E+015.34E+027.24E+035.68E-028.28E+015.79E+031.28E+05 -102L3 98.003.42E-028.81E+001.74E+022.09E+033.20E-023.22E+011.75E+033.29E+04 -102L3 111.002.32E-024.76E+008.36E+019.27E+022.20E-021.74E+018.06E+021.37E+04 -102L3 128.001.49E-022.36E+003.63E+013.65E+021.44E-028.59E+003.35E+025.09E+03 -102L3 151.008.91E-031.05E+001.39E+011.24E+028.78E-033.80E+001.23E+021.64E+03 -102L3 180.005.17E-034.48E-015.03E+003.96E+015.21E-031.60E+004.27E+014.99E+02 -102L3 245.002.01E-031.01E-018.66E-015.47E+002.10E-033.52E-016.96E+006.52E+01 -102L3 330.008.22E-042.48E-021.64E-018.42E-018.76E-048.23E-021.26E+009.72E+00 -102L3 420.004.05E-048.14E-034.41E-021.94E-014.36E-042.56E-023.28E-012.19E+00 -102L3 530.002.08E-042.85E-031.29E-024.98E-022.24E-048.39E-039.21E-025.40E-01 -102L3 760.007.71E-055.98E-042.13E-036.85E-038.15E-051.54E-031.36E-026.69E-02 -102L31050.003.31E-051.61E-044.75E-041.33E-033.42E-053.56E-042.57E-031.11E-02 -102L31550.001.31E-053.81E-059.23E-052.20E-041.29E-056.92E-053.71E-041.40E-03 -102M1 8.667.38E-018.47E+034.22E+053.77E+063.21E+032.51E+064.72E+082.24E+10 -102M1 9.666.59E-015.31E+032.68E+053.66E+062.31E+031.47E+062.34E+081.08E+10 -102M1 11.665.30E-012.38E+031.21E+052.27E+061.32E+035.89E+057.05E+073.03E+09 -102M1 15.663.55E-016.83E+023.38E+047.59E+055.47E+021.41E+051.11E+074.07E+08 -102M1 22.662.00E-011.43E+026.56E+031.53E+051.82E+022.42E+041.16E+063.31E+07 -102M1 30.001.24E-014.36E+011.84E+034.09E+047.90E+016.45E+032.17E+055.02E+06 -102M1 45.005.88E-027.88E+002.83E+025.52E+032.38E+019.94E+022.08E+043.49E+05 -102M1 57.003.73E-022.93E+009.39E+011.65E+031.18E+013.42E+025.51E+037.64E+04 -102M1 75.002.16E-029.54E-012.61E+013.98E+025.28E+001.02E+021.24E+031.37E+04 -102M1 108.001.03E-022.30E-014.85E+005.96E+011.82E+002.15E+011.83E+021.49E+03 -102M1 155.004.89E-036.41E-029.77E-019.41E+006.43E-014.92E+003.01E+011.84E+02 -102M1 285.001.44E-031.05E-028.47E-025.11E-011.14E-014.85E-011.82E+007.06E+00 -102M1 510.004.97E-042.62E-031.22E-024.65E-022.27E-026.58E-021.70E-014.50E-01 -102M2 8.231.48E+006.06E+053.29E+082.47E+105.41E+029.83E+044.79E+064.56E+07 -102M2 9.231.34E+003.44E+051.57E+081.15E+103.84E+025.87E+042.77E+064.13E+07 -102M2 11.231.06E+001.31E+054.50E+073.05E+092.14E+022.46E+041.07E+062.24E+07 -102M2 15.236.72E-012.94E+046.63E+063.84E+088.68E+016.51E+032.44E+055.92E+06 -102M2 22.233.34E-014.65E+036.47E+052.96E+072.83E+011.31E+033.88E+049.04E+05 -102M2 30.001.78E-011.10E+031.06E+053.95E+061.17E+013.80E+029.21E+031.90E+05 -102M2 45.007.08E-021.59E+029.81E+032.71E+053.60E+007.48E+011.36E+032.25E+04 -102M2 57.004.00E-025.23E+012.52E+035.83E+041.81E+002.98E+014.55E+026.48E+03 -102M2 75.002.02E-021.47E+015.37E+021.01E+048.25E-011.04E+011.30E+021.54E+03 -102M2 108.007.92E-032.81E+007.25E+011.03E+032.93E-012.70E+002.56E+012.35E+02 -102M2 155.003.09E-035.75E-011.07E+011.15E+021.06E-017.36E-015.36E+003.80E+01 -102M2 285.006.39E-044.51E-025.03E-013.47E+001.98E-029.06E-024.33E-012.02E+00 -102M2 510.001.51E-044.77E-033.49E-021.64E-014.07E-031.38E-024.61E-021.50E-01 -102M3 6.706.69E+001.75E+061.10E+099.60E+102.93E+016.35E+063.72E+102.73E+13 -102M3 7.705.23E+008.69E+054.41E+083.57E+101.92E+013.17E+061.42E+108.30E+12 -102M3 9.703.36E+002.73E+059.72E+076.89E+099.56E+001.00E+062.89E+091.17E+12 -102M3 13.701.62E+004.83E+041.04E+075.93E+083.36E+001.78E+052.70E+086.47E+10 -102M3 20.706.14E-016.10E+037.54E+053.23E+079.64E-012.27E+041.62E+072.17E+09 -102M3 30.002.39E-019.51E+027.39E+042.42E+063.14E-013.57E+031.33E+061.10E+08 -102M3 45.007.99E-021.25E+026.07E+031.46E+059.23E-024.74E+028.99E+044.57E+06 -102M3 57.004.11E-023.86E+011.44E+032.89E+044.53E-021.46E+021.91E+047.46E+05 -102M3 75.001.86E-029.86E+002.74E+024.45E+031.99E-023.74E+013.25E+039.49E+04 -102M3 108.006.32E-031.63E+003.11E+013.79E+026.70E-036.13E+003.24E+026.59E+03 -102M3 155.002.14E-032.77E-013.72E+003.41E+012.29E-031.03E+003.49E+015.12E+02 -102M3 285.003.49E-041.48E-021.13E-016.58E-013.85E-045.16E-029.45E-018.55E+00 -102M3 510.006.54E-051.01E-034.81E-031.92E-027.21E-053.09E-033.61E-022.25E-01 -102M4 6.021.65E+015.15E+048.71E+085.17E+128.83E+002.20E+055.81E+081.79E+11 -102M4 7.021.04E+012.38E+042.97E+081.35E+125.40E+001.02E+052.06E+085.66E+10 -102M4 9.024.82E+006.73E+035.13E+071.54E+112.41E+002.90E+043.85E+078.65E+09 -102M4 13.021.47E+001.07E+033.92E+066.56E+097.31E-014.62E+033.39E+065.60E+08 -102M4 20.023.40E-011.23E+021.93E+051.70E+081.77E-015.34E+022.04E+052.33E+07 -102M4 30.008.05E-021.63E+011.14E+045.75E+064.57E-027.04E+011.52E+041.21E+06 -102M4 45.001.80E-022.16E+006.81E+022.03E+051.15E-029.23E+001.18E+036.55E+04 -102M4 57.007.35E-036.64E-011.33E+022.96E+045.07E-032.83E+002.70E+021.22E+04 -102M4 75.002.56E-031.70E-012.02E+013.25E+031.95E-037.18E-014.99E+011.77E+03 -102M4 108.006.23E-042.79E-021.70E+001.81E+025.37E-041.17E-015.48E+001.42E+02 -102M4 155.001.52E-044.74E-031.54E-011.10E+011.47E-041.95E-026.40E-011.22E+01 -102M4 285.001.41E-052.52E-043.18E-031.17E-011.60E-059.79E-041.88E-022.22E-01 -102M4 510.001.53E-061.67E-051.04E-041.97E-031.87E-065.80E-057.32E-045.78E-03 -102M5 5.732.58E+013.54E+042.43E+091.00E+134.90E+008.04E+033.72E+096.91E+13 -102M5 6.731.58E+011.55E+047.88E+082.45E+122.92E+003.60E+031.21E+091.64E+13 -102M5 8.736.94E+004.11E+031.27E+082.53E+111.26E+009.84E+021.96E+081.62E+12 -102M5 12.731.99E+006.02E+028.97E+069.63E+093.72E-011.50E+021.40E+075.69E+10 -102M5 19.734.33E-016.51E+014.11E+052.24E+088.81E-021.69E+016.55E+051.19E+09 -102M5 30.009.36E-027.77E+002.15E+046.39E+062.18E-022.11E+003.51E+043.04E+07 -102M5 45.002.02E-029.89E-011.24E+032.12E+055.55E-032.86E-012.07E+039.09E+05 -102M5 57.008.07E-032.96E-012.35E+022.97E+042.47E-038.98E-023.97E+021.20E+05 -102M5 75.002.74E-037.31E-023.41E+013.07E+039.61E-042.37E-025.85E+011.17E+04 -102M5 108.006.48E-041.14E-022.64E+001.55E+022.70E-044.13E-034.62E+005.57E+02 -102M5 155.001.55E-041.84E-032.13E-018.31E+007.62E-057.57E-043.75E-012.88E+01 -102M5 285.001.45E-059.20E-053.24E-036.58E-028.99E-064.82E-055.59E-032.24E-01 -102M5 510.001.68E-066.38E-066.98E-057.57E-041.23E-064.10E-061.08E-042.58E-03 -103K 154.101.58E-019.32E-021.90E-027.21E-041.49E+014.21E+012.70E+014.26E+00 -103K 154.801.56E-019.47E-022.19E-021.36E-031.47E+014.15E+012.73E+014.86E+00 -103K 156.101.54E-019.78E-022.75E-022.98E-031.44E+014.04E+012.78E+016.03E+00 -103K 159.301.47E-011.04E-014.18E-029.36E-031.36E+013.80E+012.87E+018.85E+00 -103K 163.101.40E-011.11E-015.92E-022.12E-021.27E+013.52E+012.93E+011.20E+01 -103K 167.001.33E-011.16E-017.70E-023.78E-021.18E+013.27E+012.96E+011.50E+01 -103K 173.001.24E-011.22E-011.03E-016.99E-021.07E+012.93E+012.94E+011.89E+01 -103K 181.001.12E-011.27E-011.34E-011.21E-019.44E+002.54E+012.83E+012.28E+01 -103K 193.009.83E-021.30E-011.72E-012.02E-017.87E+002.08E+012.60E+012.60E+01 -103K 206.008.57E-021.29E-012.01E-012.82E-016.55E+001.69E+012.32E+012.70E+01 -103K 223.007.26E-021.24E-012.23E-013.64E-015.24E+001.32E+011.95E+012.59E+01 -103K 236.006.45E-021.19E-012.30E-014.07E-014.47E+001.10E+011.71E+012.43E+01 -103K 253.005.59E-021.11E-012.32E-014.41E-013.68E+008.87E+001.43E+012.17E+01 -103K 276.004.68E-021.02E-012.26E-014.57E-012.88E+006.77E+001.13E+011.81E+01 -103K 305.003.84E-029.00E-022.10E-014.46E-012.19E+004.98E+008.50E+001.42E+01 -103K 370.002.63E-026.93E-021.70E-013.75E-011.28E+002.77E+004.80E+008.31E+00 -103K 455.001.78E-025.12E-021.27E-012.78E-017.27E-011.50E+002.57E+004.44E+00 -103K 540.001.31E-023.93E-029.65E-022.07E-014.56E-019.11E-011.53E+002.60E+00 -103K 650.009.48E-032.94E-027.04E-021.46E-012.76E-015.39E-018.84E-011.45E+00 -103K 880.005.68E-031.81E-024.13E-028.01E-021.22E-012.35E-013.69E-015.75E-01 -103K 1150.003.66E-031.16E-022.55E-024.67E-025.91E-021.16E-011.76E-012.62E-01 -103K 1400.002.66E-038.35E-031.78E-023.15E-023.46E-027.01E-021.05E-011.50E-01 -103K 1650.002.04E-036.30E-031.32E-022.27E-022.21E-024.63E-026.83E-029.63E-02 -103L1 31.073.88E-011.19E+021.08E+031.10E+033.23E+022.00E+043.03E+051.16E+06 -103L1 31.773.76E-011.09E+021.09E+031.75E+033.02E+021.81E+042.71E+051.13E+06 -103L1 33.073.55E-019.22E+011.06E+032.82E+032.68E+021.50E+042.20E+051.05E+06 -103L1 36.273.10E-016.33E+019.11E+024.40E+032.04E+029.83E+031.38E+058.09E+05 -103L1 40.072.65E-014.20E+017.06E+024.76E+031.52E+026.25E+038.26E+045.55E+05 -103L1 43.002.37E-013.14E+015.69E+024.45E+031.23E+024.54E+035.76E+044.10E+05 -103L1 49.001.91E-011.82E+013.62E+023.37E+038.38E+012.53E+032.95E+042.24E+05 -103L1 57.001.46E-019.75E+002.03E+022.10E+035.36E+011.29E+031.37E+041.05E+05 -103L1 69.001.03E-014.46E+009.29E+011.01E+033.06E+015.61E+025.19E+033.90E+04 -103L1 82.007.44E-022.23E+004.47E+014.80E+021.85E+012.68E+022.19E+031.55E+04 -103L1 99.005.15E-021.08E+001.99E+012.05E+021.07E+011.21E+028.65E+025.65E+03 -103L1 112.004.03E-026.86E-011.17E+011.15E+027.45E+007.29E+014.75E+022.91E+03 -103L1 129.003.04E-024.17E-016.44E+005.93E+014.95E+004.10E+012.42E+021.37E+03 -103L1 152.002.18E-022.42E-013.25E+002.74E+013.09E+002.14E+011.12E+025.75E+02 -103L1 180.001.55E-021.43E-011.64E+001.25E+011.90E+001.11E+015.14E+012.38E+02 -103L1 245.008.44E-036.03E-025.07E-013.12E+007.92E-013.49E+001.31E+015.01E+01 -103L1 330.004.78E-032.87E-021.80E-018.86E-013.43E-011.20E+003.74E+001.19E+01 -103L1 420.003.08E-031.66E-028.39E-023.44E-011.76E-015.31E-011.43E+003.96E+00 -103L1 530.002.05E-031.01E-024.25E-021.48E-019.27E-022.49E-015.94E-011.44E+00 -103L1 760.001.12E-034.92E-031.64E-024.53E-023.47E-028.25E-021.67E-013.41E-01 -103L11050.006.68E-042.67E-037.55E-031.77E-021.44E-023.25E-025.86E-021.05E-01 -103L11550.003.63E-041.30E-033.20E-036.45E-035.00E-031.12E-021.85E-022.95E-02 -103L2 30.121.00E+004.22E+032.30E+051.71E+064.81E+018.63E+024.18E+033.71E+03 -103L2 30.829.48E-013.78E+032.03E+051.65E+064.50E+017.96E+024.20E+035.91E+03 -103L2 32.128.58E-013.10E+031.63E+051.51E+063.98E+016.88E+024.13E+039.51E+03 -103L2 35.326.81E-011.97E+039.77E+041.11E+063.01E+014.93E+023.62E+031.49E+04 -103L2 39.125.28E-011.21E+035.64E+047.27E+052.23E+013.43E+022.88E+031.63E+04 -103L2 43.004.16E-017.71E+023.38E+044.68E+051.70E+012.45E+022.21E+031.48E+04 -103L2 49.002.97E-014.16E+021.67E+042.42E+051.16E+011.54E+021.46E+031.12E+04 -103L2 57.002.00E-012.05E+027.38E+031.08E+057.49E+008.97E+018.62E+027.14E+03 -103L2 69.001.21E-018.44E+012.64E+033.73E+044.32E+004.54E+014.24E+023.57E+03 -103L2 82.007.59E-023.83E+011.05E+031.40E+042.64E+002.46E+012.17E+021.78E+03 -103L2 99.004.56E-021.63E+013.86E+024.71E+031.54E+001.27E+011.03E+027.94E+02 -103L2 112.003.26E-029.39E+002.02E+022.31E+031.09E+008.21E+006.30E+014.60E+02 -103L2 129.002.22E-025.03E+009.67E+011.02E+037.33E-015.02E+003.57E+012.44E+02 -103L2 152.001.42E-022.46E+004.16E+013.99E+024.63E-012.85E+001.85E+011.16E+02 -103L2 180.009.03E-031.19E+001.77E+011.52E+022.90E-011.60E+009.38E+005.35E+01 -103L2 245.003.98E-033.30E-013.86E+002.73E+011.24E-015.68E-012.77E+001.32E+01 -103L2 330.001.84E-039.97E-029.41E-015.51E+005.50E-022.14E-018.75E-013.49E+00 -103L2 420.009.99E-043.93E-023.14E-011.59E+002.86E-029.93E-023.53E-011.22E+00 -103L2 530.005.64E-041.65E-021.14E-015.01E-011.52E-024.80E-021.51E-014.61E-01 -103L2 760.002.40E-044.62E-032.57E-029.35E-025.73E-031.61E-024.26E-021.09E-01 -103L21050.001.15E-041.58E-037.43E-032.33E-022.37E-036.24E-031.45E-023.22E-02 -103L21550.004.91E-054.70E-041.87E-035.03E-038.09E-042.07E-034.25E-038.23E-03 -103L3 23.362.57E+001.23E+049.12E+051.00E+072.61E+004.46E+042.21E+071.38E+09 -103L3 24.062.37E+001.06E+047.65E+059.06E+062.39E+003.85E+041.81E+071.11E+09 -103L3 25.362.04E+008.14E+035.59E+057.35E+062.03E+002.96E+041.27E+077.43E+08 -103L3 28.561.45E+004.48E+032.76E+054.23E+061.41E+001.64E+045.72E+063.03E+08 -103L3 32.361.01E+002.39E+031.31E+052.19E+069.66E-018.78E+032.49E+061.19E+08 -103L3 43.004.37E-015.75E+022.41E+044.15E+054.06E-012.13E+033.80E+051.42E+07 -103L3 49.002.95E-012.99E+021.11E+041.86E+052.73E-011.11E+031.62E+055.40E+06 -103L3 57.001.87E-011.40E+024.51E+037.19E+041.72E-015.24E+026.06E+041.78E+06 -103L3 69.001.04E-015.41E+011.46E+032.12E+049.67E-022.03E+021.77E+044.43E+05 -103L3 82.006.12E-022.29E+015.24E+026.95E+035.75E-028.60E+015.92E+031.28E+05 -103L3 99.003.42E-029.02E+001.73E+022.04E+033.26E-023.38E+011.81E+033.35E+04 -103L3 112.002.33E-024.91E+008.39E+019.12E+022.25E-021.83E+018.40E+021.41E+04 -103L3 129.001.50E-022.45E+003.67E+013.62E+021.47E-029.12E+003.52E+025.28E+03 -103L3 152.009.02E-031.10E+001.41E+011.24E+029.04E-034.06E+001.30E+021.71E+03 -103L3 180.005.35E-034.82E-015.32E+004.15E+015.47E-031.76E+004.69E+015.46E+02 -103L3 245.002.08E-031.09E-019.16E-015.73E+002.20E-033.88E-017.64E+007.13E+01 -103L3 330.008.53E-042.67E-021.74E-018.85E-019.20E-049.05E-021.39E+001.06E+01 -103L3 420.004.21E-048.72E-034.68E-022.05E-014.57E-042.81E-023.60E-012.39E+00 -103L3 530.002.17E-043.05E-031.37E-025.26E-022.34E-049.21E-031.01E-015.89E-01 -103L3 760.008.04E-056.38E-042.26E-037.25E-038.53E-051.68E-031.48E-027.30E-02 -103L31050.003.45E-051.71E-045.03E-041.41E-033.57E-053.88E-042.81E-031.21E-02 -103L31550.001.36E-054.02E-059.76E-052.33E-041.34E-057.46E-054.05E-041.53E-03 -103M1 8.906.96E-018.33E+034.06E+053.48E+063.30E+032.44E+064.41E+082.02E+10 -103M1 9.906.23E-015.28E+032.60E+053.42E+062.40E+031.45E+062.22E+089.93E+09 -103M1 11.905.03E-012.42E+031.19E+052.17E+061.38E+035.93E+056.89E+072.87E+09 -103M1 15.903.41E-017.08E+023.41E+047.47E+055.83E+021.46E+051.12E+074.01E+08 -103M1 22.901.94E-011.52E+026.76E+031.54E+051.97E+022.56E+041.20E+063.37E+07 -103M1 30.001.23E-014.86E+011.99E+034.36E+048.81E+017.17E+032.40E+055.51E+06 -103M1 45.005.87E-028.83E+003.08E+025.92E+032.65E+011.10E+032.29E+043.82E+05 -103M1 57.003.74E-023.30E+001.03E+021.78E+031.32E+013.80E+026.08E+038.37E+04 -103M1 75.002.17E-021.08E+002.87E+014.31E+025.89E+001.13E+021.36E+031.49E+04 -103M1 108.001.04E-022.60E-015.37E+006.50E+012.03E+002.38E+012.01E+021.63E+03 -103M1 155.004.97E-037.20E-021.08E+001.03E+017.16E-015.44E+003.31E+012.01E+02 -103M1 285.001.48E-031.16E-029.38E-025.62E-011.27E-015.34E-012.00E+007.70E+00 -103M1 510.005.16E-042.84E-031.34E-025.10E-022.52E-027.25E-021.86E-014.90E-01 -103M2 8.471.38E+005.79E+053.00E+082.18E+105.67E+029.64E+044.50E+064.10E+07 -103M2 9.471.25E+003.34E+051.47E+081.03E+104.06E+025.84E+042.64E+063.76E+07 -103M2 11.471.01E+001.30E+054.32E+072.83E+092.30E+022.49E+041.05E+062.10E+07 -103M2 15.476.49E-012.99E+046.59E+063.72E+089.44E+016.76E+032.45E+055.76E+06 -103M2 22.473.29E-014.86E+036.63E+052.97E+073.13E+011.39E+034.01E+049.08E+05 -103M2 30.001.81E-011.20E+031.16E+054.26E+061.34E+014.20E+021.00E+042.03E+05 -103M2 45.007.27E-021.75E+021.07E+042.93E+054.10E+008.28E+011.48E+032.41E+04 -103M2 57.004.13E-025.76E+012.75E+036.30E+042.07E+003.29E+014.96E+026.97E+03 -103M2 75.002.09E-021.62E+015.86E+021.09E+049.41E-011.16E+011.42E+021.66E+03 -103M2 108.008.28E-033.11E+007.93E+011.11E+033.34E-012.99E+002.80E+012.54E+02 -103M2 155.003.25E-036.35E-011.17E+011.25E+021.21E-018.16E-015.88E+004.13E+01 -103M2 285.006.80E-045.00E-025.54E-013.79E+002.26E-021.01E-014.76E-012.20E+00 -103M2 510.001.62E-045.30E-033.86E-021.81E-014.65E-031.54E-025.11E-021.65E-01 -103M3 6.856.42E+001.69E+061.02E+098.62E+102.88E+016.31E+063.57E+102.54E+13 -103M3 7.855.05E+008.54E+054.16E+083.27E+101.91E+013.19E+061.39E+107.92E+12 -103M3 9.853.27E+002.74E+059.42E+076.49E+099.62E+001.03E+062.90E+091.15E+12 -103M3 13.851.59E+004.96E+041.04E+075.77E+083.43E+001.88E+052.80E+086.62E+10 -103M3 20.856.12E-016.37E+037.69E+053.23E+079.94E-012.43E+041.72E+072.29E+09 -103M3 30.002.43E-011.03E+037.88E+042.54E+063.31E-013.97E+031.48E+061.23E+08 -103M3 45.008.18E-021.36E+026.46E+031.54E+059.73E-025.26E+021.00E+055.08E+06 -103M3 57.004.21E-024.18E+011.53E+033.04E+044.77E-021.62E+022.13E+048.29E+05 -103M3 75.001.91E-021.07E+012.92E+024.68E+032.10E-024.15E+013.61E+031.05E+05 -103M3 108.006.53E-031.76E+003.31E+013.98E+027.06E-036.80E+003.59E+027.29E+03 -103M3 155.002.22E-033.00E-013.96E+003.59E+012.42E-031.14E+003.86E+015.65E+02 -103M3 285.003.63E-041.60E-021.21E-016.95E-014.05E-045.71E-021.04E+009.41E+00 -103M3 510.006.83E-051.09E-035.12E-032.04E-027.59E-053.41E-033.99E-022.47E-01 -103M4 6.171.58E+015.01E+048.05E+084.66E+128.69E+002.20E+055.56E+081.66E+11 -103M4 7.171.01E+012.35E+042.80E+081.26E+125.37E+001.03E+052.02E+085.39E+10 -103M4 9.174.73E+006.80E+034.99E+071.49E+112.43E+003.02E+043.88E+078.51E+09 -103M4 13.171.47E+001.10E+033.95E+066.60E+097.49E-014.91E+033.52E+065.71E+08 -103M4 20.173.45E-011.30E+021.99E+051.76E+081.84E-015.79E+022.17E+052.44E+07 -103M4 30.008.41E-021.79E+011.24E+046.32E+064.86E-027.91E+011.69E+041.34E+06 -103M4 45.001.89E-022.36E+007.40E+022.23E+051.22E-021.04E+011.31E+037.22E+04 -103M4 57.007.74E-037.28E-011.44E+023.25E+045.42E-033.18E+003.00E+021.35E+04 -103M4 75.002.71E-031.86E-012.19E+013.57E+032.08E-038.07E-015.55E+011.95E+03 -103M4 108.006.60E-043.06E-021.85E+001.99E+025.75E-041.31E-016.09E+001.56E+02 -103M4 155.001.61E-045.21E-031.68E-011.21E+011.58E-042.20E-027.11E-011.35E+01 -103M4 285.001.51E-052.77E-043.46E-031.29E-011.72E-051.10E-032.09E-022.46E-01 -103M4 510.001.65E-061.84E-051.13E-042.17E-032.01E-066.50E-058.17E-046.42E-03 -103M5 5.862.47E+013.33E+042.29E+099.13E+124.80E+007.72E+033.59E+096.45E+13 -103M5 6.861.53E+011.48E+047.59E+082.29E+122.90E+003.52E+031.19E+091.58E+13 -103M5 8.866.82E+004.02E+031.26E+082.45E+111.27E+009.81E+021.99E+081.61E+12 -103M5 12.861.99E+006.02E+029.20E+069.71E+093.79E-011.53E+021.47E+075.90E+10 -103M5 19.864.39E-016.63E+014.33E+052.33E+089.09E-021.75E+017.04E+051.27E+09 -103M5 30.009.76E-028.18E+002.37E+047.01E+062.30E-022.26E+003.94E+043.44E+07 -103M5 45.002.11E-021.04E+001.36E+032.32E+055.87E-033.06E-012.32E+031.03E+06 -103M5 57.008.45E-033.13E-012.58E+023.25E+042.62E-039.61E-024.46E+021.36E+05 -103M5 75.002.88E-037.72E-023.75E+013.36E+031.02E-032.53E-026.57E+011.32E+04 -103M5 108.006.84E-041.21E-022.91E+001.69E+022.87E-044.41E-035.19E+006.27E+02 -103M5 155.001.64E-041.95E-032.35E-019.09E+008.09E-058.09E-044.21E-013.23E+01 -103M5 285.001.54E-059.78E-053.56E-037.19E-029.55E-065.15E-056.25E-032.51E-01 -103M5 510.001.80E-066.79E-067.62E-058.28E-041.31E-064.38E-061.20E-042.89E-03 diff --git a/tests/ensdf_processing/bldhst/ref_iccndx.dat b/tests/ensdf_processing/bldhst/ref_iccndx.dat deleted file mode 100644 index b056261850bc356836e5ecefb619a087cc4ce3b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcma*jyD|en7(n3@mx#CraTk{)#3dmfK#g~>Z$PQsT4&Ixw(t8+L^~yYBYkpy|K;W4-~#syN;N diff --git a/tests/ensdf_processing/bldhst/ref_icctbl.dat b/tests/ensdf_processing/bldhst/ref_icctbl.dat deleted file mode 100644 index 0b27e3127e3392d33266aa79bfa61122e2491f06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572176 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 yr#iPy^q`oov^H=oi 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

      R?Q(R?x5TZL{fT04_KLgDwIJM6xLEJ2mVdm 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 V=%ZDgemwJRXS9Mn;vKTA{{u0ngRuYr literal 0 HcmV?d00001 diff --git a/tests/ensdf_processing/hsmrg/ref_cards.mrg b/tests/ensdf_processing/hsmrg/ref_cards.mrg new file mode 100644 index 0000000000..91822e1348 --- /dev/null +++ b/tests/ensdf_processing/hsmrg/ref_cards.mrg @@ -0,0 +1,49 @@ +205TL 205HG B- DECAY 71HI01 78NDS 780310 +205HG P 0 1/2- 5.2 M 1 1538 8 +205TL N 0.022 10 1 +205TL L 0 1/2+ +205TL B 96 2 5.27115 +205TL2 B EAV= 542 4$ +205TL CB E SOME APPROXIMATE MEASUREMENTS LISTED IN 71SC35 +205TL L 203.7 3/2+ 1.46 NS 8 +205TL CL T 71SH35, 67MA45 +205TL G 203.74 3 100 M1+E2 +1.56 15 0.62 4 +205TL CG E FROM 72BA53 +205TL CG MR FROM COUL. EX. (73KR02) +205TL CG CC FROM 73KR02 +205TLS G KC=0.40 4$LC=0.167$MC=0.0420 2$NC+=0.0135 1 +205TL B 3.1 13 6.5 2 +205TL2 B EAV= 460 4$ +205TL1CB IB ESTIMATED BY 71HI01 TO BE 3.7% 15 BASED ON RATIOS OF +205TL2CB IG(203.7) TO 197HG,203HG IG'S AND CC(203.7)=0.62; IB=3.1% IF CC IS +205TL3CB REDUCED TO 0.44 +205TL L 619.3 5/2+ +205TL B 0.016 7 8.6920 1U +205TL2 B EAV= 299 3$ +205TL G 415.6 3 0.59 8 (M1) 0.169 +205TLS G KC=0.139 5$LC=0.0233 7$MC=0.00542 17$NC+=0.00174 6 +205TL G 618.6 7 0.090 20 +205TL CG RI(618.6)/RI(415.6) IS AP TWICE AS LARGE AS IN COUL. EX. +205TL2CG AND (N,N'G) +205TL L 1140.9 (3/2)+ +205TL B 0.0030 16 7.7424 +205TL2 B EAV= 115 3$ +205TL G 937.2 6 0.093 20 +205TL G 1141.1 15 0.045 20 +205TL L 1218.7 1/2+ +205TL B 0.007 4 7.1 3 +205TL2 B EAV= 90.0 25$ +205TL G 1014.7 8 0.031 10 +205TL G 1218.7 4 0.28 5 +205TL L 1340.3 (3/2)+ +205TL B 0.006 3 6.4723 +205TL2 B EAV= 53.4 24$ +205TL G 720.8 8 0.051 15 +205TL G 1136.8 6 0.21 5 +205TL G 1340.3 8 0.015 5 +205TL L 1433.9 (1/2,3/2) +205TL B 0.0049 25 5.6925 +205TL2 B EAV= 27.1 22$ +205TL G 1230.8 10 0.023 10 +205TL G 1433.9 5 0.20 5 + diff --git a/tests/ensdf_processing/hsmrg/ref_hsmrg_cards.new b/tests/ensdf_processing/hsmrg/ref_hsmrg_cards.new new file mode 100644 index 0000000000..e3474823cf --- /dev/null +++ b/tests/ensdf_processing/hsmrg/ref_hsmrg_cards.new @@ -0,0 +1,4 @@ +205TL G 203.74 3 100 M1+E2 +1.56 15 0.62 4 10 +205TLS G KC=0.40 4$LC=0.167$MC=0.0420 2$NC+=0.0135 1 10 +205TL G 415.6 3 0.59 8 (M1) 0.169 22 +205TLS G KC=0.139 5$LC=0.0233 7$MC=0.00542 17$NC+=0.00174 6 22 diff --git a/tests/ensdf_processing/hsmrg/ref_hsmrg_data.tst b/tests/ensdf_processing/hsmrg/ref_hsmrg_data.tst new file mode 100644 index 0000000000..8971efe5aa --- /dev/null +++ b/tests/ensdf_processing/hsmrg/ref_hsmrg_data.tst @@ -0,0 +1,47 @@ +205TL 205HG B- DECAY 71HI01 78NDS 780310 +205HG P 0 1/2- 5.2 M 1 1538 8 +205TL N 0.022 10 1 +205TL L 0 1/2+ +205TL B 96 2 5.27115 +205TL2 B EAV= 542 4$ +205TL CB E SOME APPROXIMATE MEASUREMENTS LISTED IN 71SC35 +205TL L 203.7 3/2+ 1.46 NS 8 +205TL CL T 71SH35, 67MA45 +205TL G 203.74 3 100 M1+E2 +1.56 15 0.440 +205TL CG E FROM 72BA53 +205TL CG MR FROM COUL. EX. (73KR02) +205TL CG CC FROM 73KR02 +205TL B 3.1 13 6.5 2 +205TL2 B EAV= 460 4$ +205TL1CB IB ESTIMATED BY 71HI01 TO BE 3.7% 15 BASED ON RATIOS OF +205TL2CB IG(203.7) TO 197HG,203HG IG'S AND CC(203.7)=0.62; IB=3.1% IF CC IS +205TL3CB REDUCED TO 0.44 +205TL L 619.3 5/2+ +205TL B 0.016 7 8.6920 1U +205TL2 B EAV= 299 3$ +205TL G 415.6 3 0.59 8 (M1) 0.1691 +205TL G 618.6 7 0.090 20 +205TL CG RI(618.6)/RI(415.6) IS AP TWICE AS LARGE AS IN COUL. EX. +205TL2CG AND (N,N'G) +205TL L 1140.9 (3/2)+ +205TL B 0.0030 16 7.7424 +205TL2 B EAV= 115 3$ +205TL G 937.2 6 0.093 20 +205TL G 1141.1 15 0.045 20 +205TL L 1218.7 1/2+ +205TL B 0.007 4 7.1 3 +205TL2 B EAV= 90.0 25$ +205TL G 1014.7 8 0.031 10 +205TL G 1218.7 4 0.28 5 +205TL L 1340.3 (3/2)+ +205TL B 0.006 3 6.4723 +205TL2 B EAV= 53.4 24$ +205TL G 720.8 8 0.051 15 +205TL G 1136.8 6 0.21 5 +205TL G 1340.3 8 0.015 5 +205TL L 1433.9 (1/2,3/2) +205TL B 0.0049 25 5.6925 +205TL2 B EAV= 27.1 22$ +205TL G 1230.8 10 0.023 10 +205TL G 1433.9 5 0.20 5 + diff --git a/tests/ensdf_processing/seqhst/ref_iccseq.dat b/tests/ensdf_processing/seqhst/ref_iccseq.dat new file mode 100644 index 0000000000..c2ab79e7ab --- /dev/null +++ b/tests/ensdf_processing/seqhst/ref_iccseq.dat @@ -0,0 +1,13004 @@ + 3K1 15.006.55E-025.65E+004.10E+022.83E+042.85E-031.87E-011.25E+018.37E+02 + 3K1 17.004.30E-023.29E+002.12E+021.30E+042.07E-031.21E-017.12E+004.23E+02 + 3K1 20.002.48E-021.63E+008.99E+014.72E+031.37E-036.84E-023.45E+001.75E+02 + 3K1 25.001.17E-026.20E-012.77E+011.17E+037.82E-043.15E-021.28E+005.23E+01 + 3K1 32.005.06E-032.12E-017.50E+002.52E+024.22E-041.34E-024.30E-011.38E+01 + 3K1 40.002.37E-038.07E-022.31E+006.28E+012.42E-046.22E-031.61E-014.20E+00 + 3K1 50.001.11E-033.07E-027.12E-011.57E+011.39E-042.91E-036.10E-021.28E+00 + 3K1 65.004.56E-049.86E-031.79E-013.10E+007.33E-051.20E-031.96E-023.23E-01 + 3K1 80.002.26E-044.03E-036.05E-028.64E-014.43E-055.98E-048.10E-031.10E-01 + 3K1 100.001.06E-041.55E-031.90E-022.21E-012.59E-052.86E-043.16E-033.50E-02 + 3K1 120.005.77E-057.12E-047.42E-037.35E-021.68E-051.58E-041.48E-031.39E-02 + 3K1 150.002.74E-052.78E-042.38E-031.94E-029.95E-067.69E-055.94E-044.59E-03 + 3K1 200.001.07E-058.41E-055.65E-043.61E-035.13E-063.11E-051.89E-041.14E-03 + 3K1 300.002.97E-061.66E-058.01E-053.69E-042.08E-069.15E-064.01E-051.76E-04 + 3K1 450.009.07E-073.65E-061.30E-054.42E-058.79E-072.89E-069.42E-063.07E-05 + 3K1 650.003.50E-071.06E-062.93E-067.80E-064.21E-071.09E-062.81E-067.22E-06 + 3K11000.001.38E-073.11E-076.61E-071.37E-061.89E-073.86E-077.84E-071.59E-06 + 3K12000.004.41E-086.99E-081.08E-071.66E-076.01E-089.20E-081.40E-072.13E-07 + 3K16000.001.15E-081.36E-081.61E-081.90E-081.34E-081.58E-081.86E-082.19E-08 + 3L1 15.009.58E-048.23E-025.95E+004.09E+024.17E-052.74E-031.82E-011.22E+01 + 3L1 17.006.29E-044.80E-023.08E+001.88E+023.03E-051.77E-031.04E-016.19E+00 + 3L1 20.003.64E-042.38E-021.31E+006.85E+012.01E-051.00E-035.05E-022.56E+00 + 3L1 25.001.71E-049.05E-034.03E-011.71E+011.15E-054.61E-041.87E-027.65E-01 + 3L1 32.007.41E-053.10E-031.09E-013.67E+006.18E-061.96E-046.29E-032.03E-01 + 3L1 40.003.48E-051.18E-033.37E-029.16E-013.55E-069.12E-052.36E-036.15E-02 + 3L1 50.001.63E-054.49E-041.04E-022.29E-012.04E-064.26E-058.93E-041.88E-02 + 3L1 65.006.69E-061.44E-042.62E-034.53E-021.07E-061.75E-052.88E-044.74E-03 + 3L1 80.003.31E-065.90E-058.86E-041.26E-026.49E-078.76E-061.19E-041.61E-03 + 3L1 100.001.56E-062.27E-052.78E-043.24E-033.80E-074.19E-064.63E-055.13E-04 + 3L1 120.008.45E-071.04E-051.09E-041.08E-032.46E-072.31E-062.17E-052.04E-04 + 3L1 150.004.02E-074.07E-063.49E-052.84E-041.46E-071.13E-068.71E-066.73E-05 + 3L1 200.001.57E-071.23E-068.28E-065.28E-057.52E-084.56E-072.76E-061.67E-05 + 3L1 300.004.35E-082.43E-071.17E-065.40E-063.05E-081.34E-075.88E-072.57E-06 + 3L1 450.001.33E-085.35E-081.90E-076.47E-071.29E-084.23E-081.38E-074.50E-07 + 3L1 650.005.13E-091.56E-084.29E-081.14E-076.17E-091.60E-084.12E-081.06E-07 + 3L11000.002.02E-094.57E-099.69E-092.01E-082.77E-095.66E-091.15E-082.33E-08 + 3L12000.006.46E-101.02E-091.59E-092.43E-098.81E-101.35E-092.05E-093.12E-09 + 6K1 15.004.38E-013.51E+012.36E+031.52E+052.81E-021.80E+001.16E+027.57E+03 + 6K1 17.002.91E-012.08E+011.25E+037.17E+042.02E-021.15E+006.58E+013.80E+03 + 6K1 20.001.71E-011.05E+015.45E+022.69E+041.32E-026.43E-013.15E+011.56E+03 + 6K1 25.008.19E-024.12E+001.74E+026.97E+037.42E-032.91E-011.15E+014.62E+02 + 6K1 32.003.62E-021.45E+004.87E+011.56E+033.94E-031.22E-013.83E+001.21E+02 + 6K1 40.001.73E-025.63E-011.54E+014.01E+022.23E-035.62E-021.43E+003.65E+01 + 6K1 50.008.21E-032.18E-014.87E+001.03E+021.27E-032.60E-025.36E-011.11E+01 + 6K1 65.003.42E-037.16E-021.26E+002.10E+016.63E-041.06E-021.72E-012.79E+00 + 6K1 80.001.71E-032.97E-024.33E-015.99E+003.97E-045.28E-037.04E-029.45E-01 + 6K1 100.008.16E-041.16E-021.38E-011.57E+002.31E-042.51E-032.74E-023.00E-01 + 6K1 120.004.46E-045.38E-035.48E-025.29E-011.49E-041.38E-031.28E-021.19E-01 + 6K1 150.002.14E-042.12E-031.78E-021.42E-018.76E-056.71E-045.13E-033.94E-02 + 6K1 200.008.43E-056.53E-044.30E-032.70E-024.49E-052.71E-041.63E-039.78E-03 + 6K1 300.002.37E-051.31E-046.23E-042.83E-031.80E-057.92E-053.45E-041.50E-03 + 6K1 450.007.33E-062.92E-051.03E-043.46E-047.56E-062.49E-058.11E-052.64E-04 + 6K1 650.002.85E-068.61E-062.36E-056.23E-053.59E-069.38E-062.42E-056.20E-05 + 6K11000.001.12E-062.55E-065.40E-061.12E-051.60E-063.30E-066.73E-061.36E-05 + 6K12000.003.58E-075.75E-078.94E-071.37E-064.99E-077.74E-071.19E-061.81E-06 + 6K16000.009.29E-081.11E-071.32E-071.57E-071.09E-071.30E-071.54E-071.83E-07 + 6L1 15.002.30E-021.82E+001.22E+027.74E+031.50E-039.70E-026.32E+004.17E+02 + 6L1 17.001.53E-021.08E+006.45E+013.67E+031.08E-036.18E-023.57E+002.08E+02 + 6L1 20.009.00E-035.51E-012.83E+011.38E+037.07E-043.45E-021.70E+008.50E+01 + 6L1 25.004.33E-032.16E-019.05E+003.61E+023.96E-041.56E-026.22E-012.50E+01 + 6L1 32.001.92E-037.63E-022.55E+008.12E+012.10E-046.55E-032.06E-016.54E+00 + 6L1 40.009.15E-042.97E-028.10E-012.10E+011.19E-043.01E-037.66E-021.97E+00 + 6L1 50.004.36E-041.15E-022.57E-015.43E+006.80E-051.39E-032.87E-025.97E-01 + 6L1 65.001.82E-043.80E-036.65E-021.11E+003.54E-055.68E-042.19E-031.49E-01 + 6L1 80.009.11E-051.58E-032.29E-023.17E-012.12E-052.82E-043.77E-035.06E-02 + 6L1 100.004.34E-056.15E-047.33E-038.30E-021.23E-051.34E-041.47E-031.61E-02 + 6L1 120.002.37E-052.86E-042.91E-032.81E-027.95E-067.37E-056.85E-046.38E-03 + 6L1 150.001.14E-051.13E-049.47E-047.55E-034.68E-063.58E-052.74E-042.10E-03 + 6L1 200.004.49E-063.48E-052.29E-041.43E-032.40E-061.45E-058.69E-055.23E-04 + 6L1 300.001.27E-066.97E-063.32E-051.50E-049.62E-074.23E-061.84E-058.04E-05 + 6L1 450.003.91E-071.56E-065.47E-061.84E-054.03E-071.33E-064.33E-061.41E-05 + 6L1 650.001.52E-074.59E-071.26E-063.32E-061.92E-075.00E-071.29E-063.31E-06 + 6L11000.006.00E-081.36E-072.88E-075.95E-078.51E-081.76E-073.59E-077.27E-07 + 6L12000.001.91E-083.06E-084.77E-087.33E-082.66E-084.13E-086.34E-089.67E-08 + 10K1 15.001.55E+001.11E+026.67E+033.83E+051.66E-011.05E+016.42E+023.96E+04 + 10K1 17.001.04E+006.75E+013.64E+031.88E+051.18E-016.58E+003.60E+021.98E+04 + 10K1 20.006.24E-013.51E+011.65E+037.40E+047.60E-023.62E+001.70E+028.07E+03 + 10K1 25.003.06E-011.42E+015.49E+022.03E+044.17E-021.60E+006.14E+012.37E+03 + 10K1 32.001.38E-015.17E+001.61E+024.81E+032.17E-026.59E-012.00E+016.15E+02 + 10K1 40.006.73E-022.06E+005.29E+011.30E+031.21E-022.98E-017.36E+001.84E+02 + 10K1 50.003.26E-028.21E-011.73E+013.47E+026.77E-031.36E-012.73E+005.54E+01 + 10K1 65.001.38E-022.77E-014.62E+007.36E+013.46E-035.46E-028.64E-011.38E+01 + 10K1 80.007.02E-031.17E-011.63E+002.16E+012.05E-032.68E-023.52E-014.64E+00 + 10K1 100.003.39E-034.64E-025.33E-015.82E+001.18E-031.27E-021.36E-011.47E+00 + 10K1 120.001.87E-032.19E-022.15E-012.01E+007.54E-046.91E-036.32E-025.81E-01 + 10K1 150.009.09E-048.77E-037.13E-025.51E-014.40E-043.34E-032.52E-021.91E-01 + 10K1 200.003.63E-042.74E-031.76E-021.07E-012.23E-041.34E-037.95E-034.74E-02 + 10K1 300.001.04E-045.62E-042.62E-031.17E-028.83E-053.88E-041.68E-037.27E-03 + 10K1 450.003.25E-051.28E-044.43E-041.47E-033.66E-051.21E-043.94E-041.27E-03 + 10K1 650.001.28E-053.83E-051.04E-042.72E-041.72E-054.53E-051.17E-042.99E-04 + 10K11000.005.06E-061.15E-052.43E-055.01E-057.52E-061.58E-053.24E-056.57E-05 + 10K12000.001.60E-062.61E-064.09E-066.31E-062.30E-063.63E-065.63E-068.65E-06 + 10K16000.004.11E-074.97E-075.97E-077.14E-074.88E-075.90E-077.07E-078.45E-07 + 10L1 15.008.71E-026.12E+003.60E+022.02E+049.81E-036.43E-014.13E+012.68E+03 + 10L1 17.005.89E-023.74E+001.98E+021.00E+046.96E-034.02E-012.29E+011.32E+03 + 10L1 20.003.54E-021.96E+009.05E+014.00E+034.47E-032.19E-011.07E+015.25E+02 + 10L1 25.001.75E-027.99E-013.05E+011.12E+032.45E-039.66E-023.79E+001.51E+02 + 10L1 32.007.94E-032.93E-019.06E+002.67E+021.27E-033.94E-021.22E+003.83E+01 + 10L1 40.003.88E-031.18E-013.00E+007.27E+017.09E-041.77E-024.45E-011.13E+01 + 10L1 50.001.88E-034.71E-029.85E-011.96E+013.98E-048.05E-031.64E-013.37E+00 + 10L1 65.008.03E-041.60E-022.65E-014.20E+002.03E-043.23E-035.16E-028.29E-01 + 10L1 80.004.08E-046.76E-039.39E-021.24E+001.21E-041.59E-032.09E-022.78E-01 + 10L1 100.001.97E-042.69E-033.08E-023.35E-016.92E-057.46E-048.06E-038.74E-02 + 10L1 120.001.09E-041.27E-031.24E-021.16E-014.43E-054.07E-043.74E-033.45E-02 + 10L1 150.005.31E-055.11E-044.14E-033.20E-022.58E-051.97E-041.49E-031.13E-02 + 10L1 200.002.12E-051.60E-041.03E-036.25E-031.31E-057.87E-054.69E-042.80E-03 + 10L1 300.006.08E-063.29E-051.53E-046.80E-045.18E-062.28E-059.89E-054.28E-04 + 10L1 450.001.91E-067.49E-062.59E-058.60E-052.14E-067.11E-062.31E-057.49E-05 + 10L1 650.007.48E-072.24E-066.08E-061.59E-051.01E-062.66E-066.87E-061.76E-05 + 10L11000.002.96E-076.74E-071.43E-062.93E-064.41E-079.26E-071.90E-063.86E-06 + 10L12000.009.40E-081.53E-072.40E-073.70E-071.35E-072.13E-073.31E-075.08E-07 + 10L2 15.001.08E-032.63E-014.83E+016.40E+031.82E-042.50E-022.71E+002.62E+02 + 10L2 17.006.51E-041.37E-012.22E+012.60E+031.20E-041.46E-021.41E+001.21E+02 + 10L2 20.003.34E-045.88E-028.06E+008.08E+027.02E-057.27E-036.00E-014.41E+01 + 10L2 25.001.34E-041.84E-022.01E+001.62E+023.35E-052.78E-031.86E-011.11E+01 + 10L2 32.004.83E-055.09E-034.34E-012.76E+011.47E-059.63E-045.09E-022.40E+00 + 10L2 40.001.92E-051.60E-031.09E-015.59E+007.00E-063.69E-041.58E-026.03E-01 + 10L2 50.007.63E-065.04E-042.74E-021.14E+003.33E-061.42E-044.91E-031.52E-01 + 10L2 65.002.59E-061.30E-045.48E-031.77E-011.39E-064.61E-051.25E-033.04E-02 + 10L2 80.001.10E-064.50E-051.55E-034.11E-026.97E-071.90E-054.26E-048.54E-03 + 10L2 100.004.43E-071.45E-054.01E-048.67E-033.33E-077.37E-061.35E-042.21E-03 + 10L2 120.002.12E-075.80E-061.35E-042.47E-031.82E-073.42E-065.30E-057.38E-04 + 10L2 150.008.66E-081.91E-063.61E-055.40E-048.76E-081.34E-061.71E-051.96E-04 + 10L2 200.002.80E-084.71E-076.81E-067.91E-053.43E-084.09E-074.07E-063.65E-05 + 10L2 300.005.99E-096.97E-087.05E-075.82E-069.31E-097.92E-085.66E-073.66E-06 + 10L2 450.001.39E-091.14E-088.23E-084.94E-072.61E-091.62E-088.54E-084.09E-07 + 10L2 650.004.07E-102.48E-091.33E-086.14E-088.54E-104.08E-091.67E-086.26E-08 + 10L21000.001.10E-104.82E-101.90E-096.61E-092.45E-108.87E-102.81E-098.16E-09 + 10L22000.001.84E-115.11E-111.31E-103.12E-103.86E-119.62E-112.17E-104.56E-10 + 10L3 15.002.12E-035.00E-019.09E+011.20E+049.64E-052.41E-024.83E+006.60E+02 + 10L3 17.001.27E-032.60E-014.14E+014.83E+036.42E-051.34E-022.34E+002.83E+02 + 10L3 20.006.51E-041.11E-011.49E+011.49E+033.78E-056.29E-039.18E-019.45E+01 + 10L3 25.002.60E-043.43E-023.68E+002.95E+021.83E-052.23E-032.56E-012.11E+01 + 10L3 32.009.37E-059.39E-037.79E-014.91E+018.17E-067.17E-046.29E-024.08E+00 + 10L3 40.003.72E-052.91E-031.92E-019.71E+003.94E-062.58E-041.79E-029.34E-01 + 10L3 50.001.48E-059.02E-044.71E-021.92E+001.91E-069.38E-055.13E-032.16E-01 + 10L3 65.005.00E-062.28E-049.10E-032.88E-018.12E-072.88E-051.20E-033.92E-02 + 10L3 80.002.13E-067.72E-052.48E-036.43E-024.15E-071.14E-053.82E-041.03E-02 + 10L3 100.008.60E-072.43E-056.19E-041.29E-022.02E-074.25E-061.13E-042.48E-03 + 10L3 120.004.13E-079.48E-062.00E-043.51E-031.13E-071.91E-064.23E-057.84E-04 + 10L3 150.001.70E-073.04E-065.08E-057.20E-045.60E-087.26E-071.29E-051.95E-04 + 10L3 200.005.59E-087.17E-078.86E-069.58E-052.30E-082.13E-072.84E-063.34E-05 + 10L3 300.001.25E-081.01E-078.09E-075.98E-066.83E-093.99E-083.56E-072.97E-06 + 10L3 450.003.16E-091.59E-088.34E-084.24E-072.17E-098.16E-094.85E-082.93E-07 + 10L3 650.001.03E-093.47E-091.25E-084.58E-088.23E-102.15E-098.79E-093.97E-08 + 10L31000.003.27E-107.30E-101.76E-094.51E-092.95E-105.34E-101.41E-094.50E-09 + 10L32000.007.46E-111.04E-101.54E-102.44E-107.29E-119.05E-111.32E-102.33E-10 + 14K1 15.003.30E+002.09E+021.09E+045.49E+055.79E-013.62E+012.07E+031.17E+05 + 14K1 17.002.25E+001.29E+026.16E+032.82E+054.06E-012.25E+011.15E+035.91E+04 + 14K1 20.001.36E+006.92E+012.91E+031.17E+052.58E-011.22E+015.43E+022.42E+04 + 14K1 25.006.82E-012.89E+011.02E+033.44E+041.39E-015.28E+001.94E+027.12E+03 + 14K1 32.003.15E-011.09E+013.13E+028.64E+037.06E-022.13E+006.24E+011.84E+03 + 14K1 40.001.56E-014.47E+001.07E+022.44E+033.87E-029.44E-012.27E+015.48E+02 + 14K1 50.007.65E-021.82E+003.60E+016.81E+022.14E-024.24E-018.31E+001.64E+02 + 14K1 65.003.31E-026.29E-019.97E+001.51E+021.08E-021.68E-012.60E+004.05E+01 + 14K1 80.001.70E-022.71E-013.60E+004.56E+016.30E-038.15E-021.05E+001.36E+01 + 14K1 100.008.30E-031.09E-011.21E+001.26E+013.57E-033.80E-024.02E-014.27E+00 + 14K1 120.004.63E-035.23E-024.94E-014.45E+002.27E-032.06E-021.86E-011.68E+00 + 14K1 150.002.27E-032.13E-021.67E-011.25E+001.31E-039.87E-037.36E-025.51E-01 + 14K1 200.009.19E-046.77E-034.22E-022.51E-016.56E-043.92E-032.31E-021.36E-01 + 14K1 300.002.68E-041.42E-036.47E-032.82E-022.56E-041.13E-034.84E-032.08E-02 + 14K1 450.008.49E-053.29E-041.12E-033.67E-031.04E-043.48E-041.13E-033.63E-03 + 14K1 650.003.36E-051.00E-042.69E-046.96E-044.84E-051.29E-043.34E-048.52E-04 + 14K11000.001.34E-053.05E-056.43E-051.32E-042.09E-054.46E-059.18E-051.87E-04 + 14K12000.004.22E-066.97E-061.10E-051.71E-056.23E-061.00E-051.57E-052.43E-05 + 14K16000.001.07E-061.31E-061.59E-061.92E-061.28E-061.57E-061.91E-062.30E-06 + 14L1 15.002.22E-011.36E+016.84E+023.29E+044.24E-022.91E+001.86E+021.19E+04 + 14L1 17.001.52E-018.51E+003.92E+021.73E+042.97E-021.79E+001.01E+025.74E+03 + 14L1 20.009.33E-024.60E+001.88E+027.35E+031.88E-029.54E-014.62E+012.24E+03 + 14L1 25.004.72E-021.95E+006.72E+012.21E+031.01E-024.08E-011.59E+016.26E+02 + 14L1 32.002.20E-027.47E-012.11E+015.69E+025.15E-031.62E-014.99E+001.55E+02 + 14L1 40.001.09E-023.09E-017.28E+001.64E+022.82E-037.12E-021.77E+004.46E+01 + 14L1 50.005.42E-031.27E-012.49E+004.64E+011.56E-033.17E-026.40E-011.30E+01 + 14L1 65.002.36E-034.44E-026.96E-011.04E+017.83E-041.25E-021.97E-013.15E+00 + 14L1 80.001.21E-031.92E-022.53E-013.18E+004.58E-046.03E-037.89E-021.04E+00 + 14L1 100.005.96E-047.80E-038.53E-028.88E-012.60E-042.80E-033.00E-023.23E-01 + 14L1 120.003.33E-043.74E-033.52E-023.14E-011.65E-041.51E-031.38E-021.27E-01 + 14L1 150.001.64E-041.53E-031.20E-028.90E-029.52E-057.23E-045.44E-034.11E-02 + 14L1 200.006.64E-054.88E-043.03E-031.79E-024.77E-052.87E-041.70E-031.01E-02 + 14L1 300.001.94E-051.03E-044.67E-042.03E-031.86E-058.22E-053.55E-041.53E-03 + 14L1 450.006.17E-062.39E-058.13E-052.65E-047.60E-062.54E-058.26E-052.67E-04 + 14L1 650.002.44E-067.27E-061.95E-055.05E-053.53E-069.43E-062.44E-056.24E-05 + 14L11000.009.71E-072.22E-064.68E-069.59E-061.52E-063.25E-066.70E-061.36E-05 + 14L12000.003.07E-075.07E-078.01E-071.24E-064.53E-077.31E-071.15E-061.77E-06 + 14L2 15.006.97E-031.92E+003.64E+024.74E+041.42E-031.93E-012.04E+011.90E+03 + 14L2 17.004.25E-031.01E+001.68E+021.94E+049.41E-041.14E-011.07E+018.83E+02 + 14L2 20.002.23E-034.37E-016.17E+016.10E+035.53E-045.70E-024.59E+003.27E+02 + 14L2 25.009.12E-041.39E-011.56E+011.24E+032.66E-042.21E-021.44E+008.35E+01 + 14L2 32.003.38E-043.89E-023.40E+002.14E+021.18E-047.72E-034.00E-011.84E+01 + 14L2 40.001.37E-041.24E-028.62E-014.39E+015.68E-052.99E-031.26E-014.70E+00 + 14L2 50.005.57E-053.95E-032.20E-019.05E+002.73E-051.16E-033.95E-021.20E+00 + 14L2 65.001.93E-051.03E-034.44E-021.43E+001.15E-053.81E-041.02E-022.43E-01 + 14L2 80.008.33E-063.61E-041.26E-023.35E-015.81E-061.58E-043.50E-036.93E-02 + 14L2 100.003.40E-061.17E-043.31E-037.13E-022.80E-066.19E-051.12E-031.81E-02 + 14L2 120.001.65E-064.73E-051.12E-032.04E-021.54E-062.89E-054.44E-046.11E-03 + 14L2 150.006.82E-071.58E-053.02E-044.51E-037.45E-071.14E-051.44E-041.64E-03 + 14L2 200.002.23E-073.92E-065.77E-056.70E-042.94E-073.51E-063.47E-053.09E-04 + 14L2 300.004.88E-085.89E-076.05E-065.00E-058.07E-086.89E-074.90E-063.15E-05 + 14L2 450.001.15E-089.77E-087.14E-074.30E-062.28E-081.43E-077.49E-073.56E-06 + 14L2 650.003.40E-092.13E-081.17E-075.40E-077.50E-093.62E-081.48E-075.53E-07 + 14L21000.009.22E-104.17E-091.68E-085.86E-082.15E-097.91E-092.51E-087.28E-08 + 14L22000.001.54E-104.42E-101.16E-092.78E-093.36E-108.57E-101.95E-094.11E-09 + 14L3 15.001.35E-023.61E+006.76E+028.74E+046.99E-042.49E-015.53E+017.57E+03 + 14L3 17.008.19E-031.89E+003.10E+023.56E+044.69E-041.37E-012.64E+013.20E+03 + 14L3 20.004.28E-038.12E-011.13E+021.11E+042.78E-046.33E-021.01E+011.05E+03 + 14L3 25.001.75E-032.55E-012.80E+012.22E+031.36E-042.20E-022.75E+002.29E+02 + 14L3 32.006.47E-047.06E-026.00E+003.74E+026.15E-056.93E-036.60E-014.32E+01 + 14L3 40.002.62E-042.21E-021.49E+007.49E+013.00E-052.46E-031.84E-019.69E+00 + 14L3 50.001.06E-046.93E-033.70E-011.50E+011.46E-058.79E-045.17E-022.20E+00 + 14L3 65.003.66E-051.77E-037.21E-022.27E+006.30E-062.65E-041.18E-023.92E-01 + 14L3 80.001.58E-056.05E-041.98E-025.11E-013.24E-061.04E-043.72E-031.02E-01 + 14L3 100.006.47E-061.92E-044.97E-031.04E-011.59E-063.82E-051.09E-032.41E-02 + 14L3 120.003.13E-067.54E-051.62E-032.83E-028.95E-071.70E-054.02E-047.56E-03 + 14L3 150.001.31E-062.43E-054.13E-045.84E-034.45E-076.41E-061.21E-041.86E-03 + 14L3 200.004.35E-075.78E-067.25E-057.83E-041.84E-071.86E-062.63E-053.15E-04 + 14L3 300.009.88E-088.17E-076.66E-064.93E-055.49E-083.44E-073.24E-062.76E-05 + 14L3 450.002.52E-081.30E-076.90E-073.52E-061.74E-086.91E-084.34E-072.68E-06 + 14L3 650.008.23E-092.84E-081.03E-073.81E-076.63E-091.79E-087.72E-083.59E-07 + 14L31000.002.62E-095.96E-091.45E-083.76E-082.37E-094.39E-091.21E-083.99E-08 + 14L32000.005.96E-108.42E-101.25E-092.00E-095.82E-107.29E-101.08E-091.96E-09 + 15K1 15.003.82E+002.33E+021.17E+045.66E+057.54E-014.70E+012.62E+031.45E+05 + 15K1 17.002.61E+001.45E+026.68E+032.95E+055.28E-012.92E+011.47E+037.33E+04 + 15K1 20.001.59E+007.82E+013.18E+031.25E+053.34E-011.57E+016.90E+023.02E+04 + 15K1 25.007.98E-013.30E+011.13E+033.72E+041.79E-016.80E+002.46E+028.90E+03 + 15K1 32.003.70E-011.25E+013.53E+029.51E+039.07E-022.72E+007.92E+012.31E+03 + 15K1 40.001.84E-015.18E+001.21E+022.72E+034.95E-021.20E+002.87E+016.87E+02 + 15K1 50.009.06E-022.12E+004.13E+017.68E+022.72E-025.39E-011.05E+012.06E+02 + 15K1 65.003.93E-027.38E-011.15E+011.72E+021.36E-022.12E-013.27E+005.07E+01 + 15K1 80.002.03E-023.19E-014.19E+005.24E+017.97E-031.03E-011.32E+001.70E+01 + 15K1 100.009.93E-031.30E-011.41E+001.46E+014.51E-034.79E-025.04E-015.33E+00 + 15K1 120.005.55E-036.21E-025.81E-015.18E+002.85E-032.59E-022.33E-012.10E+00 + 15K1 150.002.73E-032.53E-021.98E-011.47E+001.64E-031.24E-029.20E-026.87E-01 + 15K1 200.001.11E-038.10E-035.02E-022.96E-018.21E-044.90E-032.88E-021.69E-01 + 15K1 300.003.24E-041.71E-037.75E-033.35E-023.19E-041.40E-036.03E-032.59E-02 + 15K1 450.001.03E-043.98E-041.35E-034.40E-031.30E-044.34E-041.40E-034.51E-03 + 15K1 650.004.09E-051.22E-043.26E-048.41E-046.00E-051.61E-044.15E-041.06E-03 + 15K11000.001.63E-053.72E-057.84E-051.60E-042.58E-055.52E-051.14E-042.31E-04 + 15K12000.005.14E-068.51E-061.35E-052.09E-057.64E-061.24E-051.95E-053.01E-05 + 15K16000.001.30E-061.59E-061.94E-062.34E-061.56E-061.92E-062.34E-062.82E-06 + 15L1 15.002.64E-011.55E+017.48E+023.43E+045.73E-023.99E+002.54E+021.62E+04 + 15L1 17.001.82E-019.79E+004.33E+021.83E+044.01E-022.44E+001.38E+027.79E+03 + 15L1 20.001.12E-015.34E+002.11E+027.94E+032.53E-021.30E+006.27E+013.03E+03 + 15L1 25.005.68E-022.29E+007.65E+012.44E+031.36E-025.51E-012.15E+018.41E+02 + 15L1 32.002.66E-028.84E-012.43E+016.41E+026.87E-032.17E-016.68E+002.07E+02 + 15L1 40.001.33E-023.70E-018.51E+001.87E+023.75E-039.49E-022.36E+005.93E+01 + 15L1 50.006.63E-031.53E-012.93E+005.38E+012.06E-034.21E-028.48E-011.73E+01 + 15L1 65.002.90E-035.38E-028.30E-011.22E+011.03E-031.64E-022.60E-014.14E+00 + 15L1 80.001.50E-032.34E-023.04E-013.77E+006.02E-047.92E-031.04E-011.36E+00 + 15L1 100.007.37E-049.55E-031.03E-011.06E+003.41E-043.67E-033.92E-024.22E-01 + 15L1 120.004.13E-044.59E-034.27E-023.78E-012.15E-041.98E-031.80E-021.65E-01 + 15L1 150.002.04E-041.88E-031.46E-021.08E-011.24E-049.43E-047.09E-035.35E-02 + 15L1 200.008.30E-056.05E-043.73E-032.19E-026.20E-053.73E-042.21E-031.31E-02 + 15L1 300.002.43E-051.28E-045.79E-042.50E-032.41E-051.07E-044.60E-041.98E-03 + 15L1 450.007.77E-062.99E-051.02E-043.30E-049.80E-063.29E-051.07E-043.44E-04 + 15L1 650.003.08E-069.16E-062.45E-056.33E-054.53E-061.22E-053.15E-058.05E-05 + 15L11000.001.23E-062.80E-065.91E-061.21E-051.94E-064.17E-068.62E-061.75E-05 + 15L12000.003.87E-076.42E-071.02E-061.58E-065.76E-079.35E-071.47E-062.28E-06 + 15L2 15.009.84E-032.80E+005.35E+026.92E+042.09E-032.85E-012.98E+012.75E+03 + 15L2 17.006.02E-031.47E+002.47E+022.84E+041.39E-031.68E-011.56E+011.28E+03 + 15L2 20.003.17E-036.40E-019.08E+018.94E+038.20E-048.44E-026.75E+004.77E+02 + 15L2 25.001.31E-032.04E-012.30E+011.83E+033.96E-043.28E-022.13E+001.22E+02 + 15L2 32.004.87E-045.73E-025.03E+003.16E+021.76E-041.15E-025.92E-012.71E+01 + 15L2 40.001.99E-041.83E-021.28E+006.50E+018.49E-054.46E-031.87E-016.94E+00 + 15L2 50.008.09E-055.84E-033.27E-011.34E+014.08E-051.73E-035.88E-021.78E+00 + 15L2 65.002.81E-051.54E-036.62E-022.13E+001.73E-055.71E-041.52E-023.62E-01 + 15L2 80.001.22E-055.38E-041.89E-025.00E-018.74E-062.38E-045.24E-031.03E-01 + 15L2 100.005.01E-061.75E-044.96E-031.07E-014.21E-069.32E-051.68E-032.71E-02 + 15L2 120.002.43E-067.08E-051.68E-033.07E-022.32E-064.36E-056.67E-049.16E-03 + 15L2 150.001.01E-062.36E-054.55E-046.79E-031.13E-061.73E-052.18E-042.46E-03 + 15L2 200.003.32E-075.89E-068.70E-051.01E-034.45E-075.32E-065.25E-054.65E-04 + 15L2 300.007.28E-088.88E-079.15E-067.57E-051.22E-071.05E-067.44E-064.76E-05 + 15L2 450.001.73E-081.48E-071.08E-066.53E-063.47E-082.17E-071.14E-065.42E-06 + 15L2 650.005.11E-093.23E-081.78E-078.21E-071.14E-085.52E-082.26E-078.42E-07 + 15L21000.001.39E-096.33E-092.55E-088.94E-083.27E-091.21E-083.83E-081.11E-07 + 15L22000.002.32E-106.70E-101.77E-094.25E-095.11E-101.31E-092.98E-096.30E-09 + 15L3 15.001.89E-025.25E+009.88E+021.27E+051.02E-033.95E-018.97E+011.23E+04 + 15L3 17.001.16E-022.75E+004.54E+025.18E+046.82E-042.17E-014.26E+015.17E+03 + 15L3 20.006.07E-031.18E+001.65E+021.61E+044.06E-049.97E-021.63E+011.69E+03 + 15L3 25.002.49E-033.73E-014.12E+013.25E+031.99E-043.46E-024.41E+003.67E+02 + 15L3 32.009.27E-041.04E-018.84E+005.50E+029.02E-051.08E-021.05E+006.89E+01 + 15L3 40.003.77E-043.25E-022.20E+001.10E+024.41E-053.82E-032.91E-011.54E+01 + 15L3 50.001.53E-041.02E-025.47E-012.21E+012.15E-051.36E-038.15E-023.48E+00 + 15L3 65.005.32E-052.62E-031.07E-013.36E+009.29E-064.10E-041.85E-026.17E-01 + 15L3 80.002.31E-058.95E-042.94E-027.58E-014.79E-061.60E-045.82E-031.59E-01 + 15L3 100.009.46E-062.84E-047.40E-031.54E-012.36E-065.86E-051.69E-033.77E-02 + 15L3 120.004.60E-061.12E-042.41E-034.21E-021.33E-062.61E-056.25E-041.18E-02 + 15L3 150.001.92E-063.61E-056.16E-048.71E-036.61E-079.79E-061.87E-042.89E-03 + 15L3 200.006.41E-078.61E-061.08E-041.17E-032.73E-072.83E-064.06E-054.87E-04 + 15L3 300.001.46E-071.22E-069.98E-067.38E-058.16E-085.21E-074.98E-064.26E-05 + 15L3 450.003.73E-081.94E-071.03E-065.28E-062.60E-081.04E-076.64E-074.12E-06 + 15L3 650.001.22E-084.24E-081.55E-075.72E-079.86E-092.70E-081.18E-075.50E-07 + 15L31000.003.90E-098.89E-092.18E-085.64E-083.52E-096.57E-091.83E-086.08E-08 + 15L32000.008.85E-101.25E-091.87E-092.99E-098.64E-101.08E-091.62E-092.96E-09 + 16K1 15.004.37E+002.56E+021.24E+045.75E+059.68E-016.03E+013.28E+031.76E+05 + 16K1 17.002.99E+001.61E+027.13E+033.04E+056.77E-013.73E+011.84E+038.95E+04 + 16K1 20.001.83E+008.73E+013.44E+031.31E+054.26E-012.01E+018.65E+023.70E+04 + 16K1 25.009.22E-013.72E+011.24E+033.97E+042.28E-018.65E+003.08E+021.10E+04 + 16K1 32.004.29E-011.42E+013.92E+021.03E+041.15E-013.45E+009.91E+012.85E+03 + 16K1 40.002.14E-015.92E+001.36E+022.99E+036.25E-021.52E+003.58E+018.49E+02 + 16K1 50.001.06E-012.44E+004.67E+018.55E+023.43E-026.76E-011.31E+012.55E+02 + 16K1 65.004.61E-028.55E-011.32E+011.94E+021.71E-022.66E-014.07E+006.27E+01 + 16K1 80.002.38E-023.71E-014.81E+005.94E+019.96E-031.28E-011.64E+002.10E+01 + 16K1 100.001.17E-021.51E-011.63E+001.67E+015.62E-035.95E-026.24E-016.57E+00 + 16K1 120.006.56E-037.27E-026.74E-015.95E+003.55E-033.21E-022.88E-012.59E+00 + 16K1 150.003.24E-032.98E-022.31E-011.70E+002.04E-031.53E-021.14E-018.45E-01 + 16K1 200.001.32E-039.57E-035.89E-023.44E-011.02E-036.06E-033.55E-022.08E-01 + 16K1 300.003.87E-042.03E-039.15E-033.94E-023.93E-041.73E-037.42E-033.17E-02 + 16K1 450.001.24E-044.75E-041.61E-035.21E-031.59E-045.33E-041.72E-035.53E-03 + 16K1 650.004.91E-051.46E-043.89E-041.00E-037.33E-051.97E-045.08E-041.30E-03 + 16K11000.001.96E-054.47E-059.42E-051.93E-043.14E-056.75E-051.39E-042.83E-04 + 16K12000.006.17E-061.03E-051.63E-052.53E-059.24E-061.51E-052.37E-053.68E-05 + 16K16000.001.55E-061.91E-062.33E-062.83E-061.88E-062.32E-062.83E-063.42E-06 + 16L1 15.003.08E-011.74E+018.00E+023.49E+047.59E-025.37E+003.42E+022.16E+04 + 16L1 17.002.13E-011.11E+014.69E+021.89E+045.31E-023.28E+001.85E+021.04E+04 + 16L1 20.001.32E-016.09E+002.31E+028.38E+033.34E-021.73E+008.36E+014.03E+03 + 16L1 25.006.73E-022.64E+008.54E+012.64E+031.79E-027.31E-012.85E+011.11E+03 + 16L1 32.003.17E-021.03E+002.76E+017.08E+029.00E-032.86E-018.80E+002.72E+02 + 16L1 40.001.59E-024.33E-019.75E+002.10E+024.89E-031.24E-013.09E+007.75E+01 + 16L1 50.007.96E-031.81E-013.40E+006.11E+012.68E-035.49E-021.11E+002.24E+01 + 16L1 65.003.50E-036.39E-029.72E-011.41E+011.34E-032.13E-023.37E-015.36E+00 + 16L1 80.001.82E-032.80E-023.59E-014.38E+007.77E-041.02E-021.34E-011.76E+00 + 16L1 100.008.96E-041.15E-021.22E-011.24E+004.38E-044.73E-035.05E-025.42E-01 + 16L1 120.005.04E-045.54E-035.10E-024.46E-012.77E-042.54E-032.31E-022.11E-01 + 16L1 150.002.49E-042.28E-031.75E-021.28E-011.59E-041.21E-039.07E-036.83E-02 + 16L1 200.001.02E-047.36E-044.51E-032.62E-027.91E-054.76E-042.81E-031.67E-02 + 16L1 300.003.00E-051.57E-047.05E-043.03E-033.06E-051.36E-045.85E-042.52E-03 + 16L1 450.009.60E-063.69E-051.25E-044.03E-041.24E-054.17E-051.35E-044.36E-04 + 16L1 650.003.82E-061.13E-053.03E-057.79E-055.72E-061.54E-053.99E-051.02E-04 + 16L11000.001.52E-063.48E-067.34E-061.50E-052.44E-065.27E-061.09E-052.22E-05 + 16L12000.004.80E-077.99E-071.27E-061.97E-067.20E-071.17E-061.85E-062.87E-06 + 16L2 15.001.34E-023.96E+007.61E+029.79E+043.00E-034.08E-014.23E+013.87E+03 + 16L2 17.008.25E-032.09E+003.52E+024.03E+042.00E-032.41E-012.22E+011.81E+03 + 16L2 20.004.36E-039.08E-011.30E+021.27E+041.18E-031.21E-019.62E+006.75E+02 + 16L2 25.001.81E-032.89E-013.29E+012.61E+035.70E-044.71E-023.04E+001.74E+02 + 16L2 32.006.78E-048.18E-027.22E+004.52E+022.55E-041.66E-028.50E-013.86E+01 + 16L2 40.002.78E-042.61E-021.84E+009.33E+011.23E-046.45E-032.68E-019.93E+00 + 16L2 50.001.14E-048.38E-034.71E-011.93E+015.92E-052.51E-038.49E-022.56E+00 + 16L2 65.003.98E-052.21E-039.57E-023.07E+002.51E-058.29E-042.20E-025.22E-01 + 16L2 80.001.74E-057.75E-042.73E-027.23E-011.27E-053.46E-047.61E-031.49E-01 + 16L2 100.007.14E-062.53E-047.20E-031.55E-016.14E-061.36E-042.44E-033.92E-02 + 16L2 120.003.47E-061.03E-042.44E-034.45E-023.39E-066.36E-059.72E-041.33E-02 + 16L2 150.001.45E-063.43E-056.62E-049.88E-031.65E-062.53E-053.18E-043.58E-03 + 16L2 200.004.78E-078.58E-061.27E-041.47E-036.52E-077.80E-067.68E-056.79E-04 + 16L2 300.001.05E-071.30E-061.34E-051.11E-041.80E-071.54E-061.09E-056.98E-05 + 16L2 450.002.51E-082.16E-071.59E-069.59E-065.11E-083.20E-071.68E-067.97E-06 + 16L2 650.007.43E-094.74E-082.62E-071.21E-061.68E-088.16E-083.34E-071.24E-06 + 16L21000.002.02E-099.30E-093.77E-081.32E-074.83E-091.79E-085.67E-081.65E-07 + 16L22000.003.38E-109.83E-102.61E-096.29E-097.52E-101.94E-094.42E-099.34E-09 + 16L3 15.002.58E-027.39E+001.40E+031.79E+051.43E-036.06E-011.41E+021.93E+04 + 16L3 17.001.58E-023.87E+006.44E+027.32E+049.62E-043.32E-016.68E+018.09E+03 + 16L3 20.008.33E-031.67E+002.35E+022.28E+045.74E-041.52E-012.54E+012.63E+03 + 16L3 25.003.44E-035.28E-015.86E+014.61E+032.82E-045.26E-026.83E+005.70E+02 + 16L3 32.001.29E-031.47E-011.26E+017.82E+021.28E-041.64E-021.62E+001.06E+02 + 16L3 40.005.26E-044.62E-023.15E+001.57E+026.27E-055.76E-034.46E-012.36E+01 + 16L3 50.002.15E-041.46E-027.84E-013.17E+013.07E-052.04E-031.24E-015.32E+00 + 16L3 65.007.49E-053.74E-031.54E-014.82E+001.33E-056.12E-042.82E-029.39E-01 + 16L3 80.003.26E-051.28E-034.24E-021.09E+006.85E-062.38E-048.80E-032.41E-01 + 16L3 100.001.34E-054.08E-041.07E-022.22E-013.38E-068.71E-052.56E-035.70E-02 + 16L3 120.006.53E-061.61E-043.48E-036.07E-021.90E-063.87E-059.41E-041.78E-02 + 16L3 150.002.74E-065.20E-058.90E-041.26E-029.49E-071.45E-052.81E-044.35E-03 + 16L3 200.009.16E-071.24E-051.57E-041.69E-033.93E-074.17E-066.06E-057.31E-04 + 16L3 300.002.10E-071.76E-061.45E-051.07E-041.18E-077.64E-077.41E-066.37E-05 + 16L3 450.005.37E-082.81E-071.50E-067.67E-063.74E-081.52E-079.83E-076.14E-06 + 16L3 650.001.76E-086.13E-082.25E-078.32E-071.42E-083.92E-081.73E-078.16E-07 + 16L31000.005.61E-091.29E-083.16E-088.19E-085.06E-099.51E-092.67E-088.99E-08 + 16L32000.001.27E-091.81E-092.70E-094.34E-091.24E-091.56E-092.34E-094.32E-09 + 17K1 15.004.94E+002.79E+021.29E+045.73E+051.23E+007.64E+014.04E+032.10E+05 + 17K1 17.003.40E+001.76E+027.50E+033.08E+058.56E-014.71E+012.27E+031.07E+05 + 17K1 20.002.08E+009.63E+013.67E+031.35E+055.38E-012.53E+011.07E+034.47E+04 + 17K1 25.001.05E+004.14E+011.34E+034.18E+042.86E+011.09E+013.81E+021.33E+04 + 17K1 32.004.93E-011.60E+014.29E+021.11E+041.44E-014.31E+001.22E+023.48E+03 + 17K1 40.002.46E-016.69E+001.51E+023.25E+037.80E-021.89E+004.42E+011.04E+03 + 17K1 50.001.22E-012.78E+005.22E+019.39E+024.26E-028.39E-011.61E+013.11E+02 + 17K1 65.005.35E-029.78E-011.48E+012.15E+022.12E-023.28E-015.00E+007.65E+01 + 17K1 80.002.77E-024.27E-015.46E+006.66E+011.23E-021.58E-012.01E+002.56E+01 + 17K1 100.001.37E-021.75E-011.86E+001.89E+016.92E-037.32E-027.63E-018.01E+00 + 17K1 120.007.67E-038.42E-027.73E-016.75E+004.36E-033.94E-023.52E-013.15E+00 + 17K1 150.003.80E-033.47E-022.66E-011.94E+002.50E-031.88E-021.39E-011.03E+00 + 17K1 200.001.55E-031.12E-026.82E-023.96E-011.24E-037.40E-034.32E-022.53E-01 + 17K1 300.004.57E-042.38E-031.07E-024.57E-024.78E-042.11E-039.02E-033.85E-02 + 17K1 450.001.46E-045.60E-041.89E-036.10E-031.93E-046.47E-042.09E-036.70E-03 + 17K1 650.005.83E-051.73E-044.60E-041.18E-038.86E-052.38E-046.16E-041.57E-03 + 17K11000.002.33E-055.32E-051.12E-042.29E-043.78E-058.16E-051.69E-043.43E-04 + 17K12000.007.32E-061.22E-051.94E-053.02E-051.11E-051.81E-052.86E-054.44E-05 + 17K16000.001.84E-062.27E-062.78E-063.37E-062.23E-062.76E-063.38E-064.10E-06 + 17L1 15.003.54E-011.92E+018.40E+023.45E+049.90E-027.12E+004.53E+022.85E+04 + 17L1 17.002.46E-011.23E+014.99E+021.92E+046.91E-024.33E+002.44E+021.36E+04 + 17L1 20.001.53E-016.82E+002.49E+028.67E+034.34E-022.28E+001.10E+025.27E+03 + 17L1 25.007.85E-022.99E+009.36E+012.80E+032.31E-029.56E-013.72E+011.45E+03 + 17L1 32.003.72E-021.18E+003.08E+017.68E+021.16E-023.72E-011.14E+013.52E+02 + 17L1 40.001.88E-025.00E-011.10E+012.31E+026.28E-031.61E-013.99E+009.97E+01 + 17L1 50.009.42E-032.10E-013.87E+006.83E+013.43E-037.05E-021.42E+002.87E+01 + 17L1 65.004.16E-037.49E-021.12E+001.60E+011.70E-032.72E-024.30E-016.82E+00 + 17L1 80.002.17E-033.29E-024.16E-015.01E+009.88E-041.30E-021.70E-012.23E+00 + 17L1 100.001.07E-031.36E-021.43E-011.44E+005.55E-045.99E-036.39E-026.86E-01 + 17L1 120.006.04E-046.58E-035.99E-025.18E-013.50E-043.22E-032.92E-022.67E-01 + 17L1 150.003.00E-042.72E-032.07E-021.50E-012.00E-041.52E-031.14E-028.60E-02 + 17L1 200.001.23E-048.82E-045.36E-033.09E-029.95E-055.99E-043.54E-032.09E-02 + 17L1 300.003.64E-051.89E-048.45E-043.60E-033.84E-051.70E-047.33E-043.15E-03 + 17L1 450.001.17E-054.47E-051.50E-044.85E-041.55E-055.21E-051.69E-045.45E-04 + 17L1 650.004.66E-061.38E-053.67E-059.43E-057.11E-061.92E-054.97E-051.27E-04 + 17L11000.001.86E-064.26E-068.96E-061.83E-053.03E-066.55E-061.36E-052.76E-05 + 17L12000.005.86E-079.78E-071.56E-062.42E-068.86E-071.45E-062.30E-063.57E-06 + 17L2 15.001.79E-025.45E+001.05E+031.35E+054.19E-035.69E-015.85E+015.29E+03 + 17L2 17.001.10E-022.88E+004.89E+025.56E+042.79E-033.36E-013.08E+012.48E+03 + 17L2 20.005.85E-031.25E+001.80E+021.76E+041.65E-031.69E-011.33E+019.28E+02 + 17L2 25.002.44E-034.01E-014.58E+013.62E+038.00E-046.60E-024.23E+002.40E+02 + 17L2 32.009.21E-041.14E-011.01E+016.30E+023.58E-042.33E-021.19E+005.36E+01 + 17L2 40.003.80E-043.64E-022.57E+001.30E+021.73E-049.07E-033.76E-011.38E+01 + 17L2 50.001.56E-041.17E-026.61E-012.71E+018.35E-053.54E-031.19E-013.57E+00 + 17L2 65.005.48E-053.10E-031.35E-014.31E+003.55E-051.17E-033.10E-027.31E-01 + 17L2 80.002.40E-051.09E-033.85E-021.02E+001.80E-054.90E-041.07E-022.10E-01 + 17L2 100.009.90E-063.57E-041.02E-022.18E-018.72E-061.93E-043.46E-035.53E-02 + 17L2 120.004.83E-061.44E-043.46E-036.30E-024.83E-069.04E-051.38E-031.88E-02 + 17L2 150.002.02E-064.84E-059.39E-041.40E-022.35E-063.60E-054.51E-045.07E-03 + 17L2 200.006.70E-071.21E-051.81E-042.09E-039.31E-071.11E-051.09E-049.65E-04 + 17L2 300.001.48E-071.84E-061.91E-051.58E-042.58E-072.20E-061.56E-059.96E-05 + 17L2 450.003.54E-083.08E-072.28E-061.37E-057.32E-084.59E-072.41E-061.14E-05 + 17L2 650.001.05E-086.76E-083.75E-071.74E-062.42E-081.17E-074.80E-071.78E-06 + 17L21000.002.87E-091.33E-085.41E-081.90E-076.92E-092.58E-088.18E-082.37E-07 + 17L22000.004.79E-101.41E-093.74E-099.05E-091.08E-092.79E-096.38E-091.35E-08 + 17L3 15.003.42E-021.01E+011.93E+032.46E+051.97E-039.05E-012.16E+022.95E+04 + 17L3 17.002.10E-025.32E+008.90E+021.01E+051.32E-034.94E-011.02E+021.23E+04 + 17L3 20.001.11E-022.30E+003.25E+023.15E+047.90E-042.26E-013.86E+013.99E+03 + 17L3 25.004.63E-037.28E-018.13E+016.37E+033.89E-047.78E-021.03E+018.60E+02 + 17L3 32.001.74E-032.03E-011.75E+011.08E+031.77E-042.41E-022.43E+001.59E+02 + 17L3 40.007.14E-046.41E-024.38E+002.19E+028.68E-058.46E-036.66E-013.53E+01 + 17L3 50.002.93E-042.02E-021.09E+004.41E+014.26E-052.99E-031.85E-017.91E+00 + 17L3 65.001.03E-045.21E-032.15E-016.72E+001.85E-058.91E-044.17E-021.39E+00 + 17L3 80.004.48E-051.79E-035.93E-021.52E+009.54E-063.45E-041.30E-023.57E-01 + 17L3 100.001.85E-055.70E-041.50E-023.10E-014.71E-061.26E-043.75E-038.40E-02 + 17L3 120.009.03E-062.25E-044.88E-038.52E-022.66E-065.58E-051.38E-032.61E-02 + 17L3 150.003.80E-067.29E-051.25E-031.77E-021.33E-062.08E-054.10E-046.37E-03 + 17L3 200.001.27E-061.74E-052.21E-042.38E-035.50E-075.99E-068.83E-051.07E-03 + 17L3 300.002.93E-072.48E-062.04E-051.51E-041.65E-071.09E-061.07E-059.26E-05 + 17L3 450.007.50E-083.95E-072.12E-061.08E-055.25E-082.17E-071.42E-068.90E-06 + 17L3 650.002.46E-088.63E-083.18E-071.18E-061.99E-085.55E-082.49E-071.18E-06 + 17L31000.007.85E-091.81E-084.46E-081.16E-077.09E-091.34E-083.81E-081.29E-07 + 17L32000.001.78E-092.53E-093.80E-096.11E-091.74E-092.19E-093.30E-096.13E-09 + 18K1 15.005.53E+002.99E+021.32E+045.60E+051.54E+009.56E+014.91E+032.46E+05 + 18K1 17.003.81E+001.91E+027.78E+033.07E+051.07E+005.89E+012.76E+031.27E+05 + 18K1 20.002.34E+001.05E+023.86E+031.37E+056.71E-013.15E+011.30E+035.31E+04 + 18K1 25.001.19E+004.55E+011.43E+034.34E+043.56E-011.35E+014.65E+021.59E+04 + 18K1 32.005.60E-011.78E+014.65E+021.17E+041.78E-015.33E+001.49E+024.18E+03 + 18K1 40.002.81E-017.48E+001.65E+023.49E+039.63E-022.33E+005.39E+011.25E+03 + 18K1 50.001.40E-013.12E+005.77E+011.02E+035.24E-021.03E+001.96E+013.75E+02 + 18K1 65.006.15E-021.11E+001.66E+012.36E+022.60E-024.02E-016.07E+009.23E+01 + 18K1 80.003.19E-024.85E-016.13E+007.38E+011.50E-021.93E-012.43E+003.08E+01 + 18K1 100.001.58E-022.00E-012.10E+002.11E+018.44E-038.91E-029.25E-019.65E+00 + 18K1 120.008.88E-039.66E-028.77E-017.58E+005.30E-034.79E-024.25E-013.79E+00 + 18K1 150.004.41E-033.99E-023.03E-012.19E+003.03E-032.27E-021.67E-011.24E+00 + 18K1 200.001.80E-031.29E-027.82E-024.50E-011.50E-038.94E-035.21E-023.04E-01 + 18K1 300.005.34E-042.76E-031.23E-025.24E-025.77E-042.54E-031.09E-024.62E-02 + 18K1 450.001.72E-046.54E-042.20E-037.06E-032.32E-047.78E-042.51E-038.04E-03 + 18K1 650.006.85E-052.03E-045.38E-041.38E-031.06E-042.86E-047.39E-041.88E-03 + 18K11000.002.73E-056.26E-051.32E-042.69E-044.50E-059.76E-052.02E-044.10E-04 + 18K12000.008.60E-061.44E-052.30E-053.57E-051.31E-052.16E-053.42E-055.31E-05 + 18K16000.002.15E-062.67E-063.27E-063.98E-062.61E-063.25E-064.00E-064.86E-06 + 18L1 15.004.03E-012.09E+018.64E+023.34E+041.27E-019.32E+005.91E+023.70E+04 + 18L1 17.002.81E-011.35E+015.21E+021.89E+048.86E-025.64E+003.17E+021.77E+04 + 18L1 20.001.75E-017.53E+002.64E+028.78E+035.56E-022.96E+001.42E+026.80E+03 + 18L1 25.009.03E-023.34E+001.01E+022.91E+032.95E-021.23E+004.78E+011.86E+03 + 18L1 32.004.30E-021.33E+003.37E+018.18E+021.47E-024.76E-011.46E+014.49E+02 + 18L1 40.002.18E-025.69E-011.22E+012.51E+027.95E-032.05E-015.08E+001.27E+02 + 18L1 50.001.10E-022.41E-014.35E+007.51E+014.33E-038.94E-021.80E+003.64E+01 + 18L1 65.004.87E-038.64E-021.27E+001.78E+012.14E-033.44E-025.42E-018.59E+00 + 18L1 80.002.55E-033.82E-024.76E-015.64E+001.24E-031.64E-022.13E-012.80E+00 + 18L1 100.001.27E-031.58E-021.65E-011.63E+006.95E-047.51E-038.00E-028.57E-01 + 18L1 120.007.15E-047.71E-036.93E-025.93E-014.36E-044.02E-033.64E-023.32E-01 + 18L1 150.003.56E-043.20E-032.41E-021.73E-012.49E-041.90E-031.42E-021.07E-01 + 18L1 200.001.46E-041.04E-036.28E-033.60E-021.23E-047.43E-044.39E-032.59E-02 + 18L1 300.004.35E-052.25E-049.99E-044.23E-034.74E-052.10E-049.07E-043.89E-03 + 18L1 450.001.40E-055.34E-051.79E-045.74E-041.91E-056.43E-052.09E-046.72E-04 + 18L1 650.005.61E-061.66E-054.40E-051.13E-048.72E-062.36E-056.12E-051.57E-04 + 18L11000.002.24E-065.14E-061.08E-052.21E-053.70E-068.04E-061.67E-053.40E-05 + 18L12000.007.05E-071.18E-061.89E-062.94E-061.08E-061.77E-062.81E-064.37E-06 + 18L2 15.002.33E-027.34E+001.43E+031.81E+055.71E-037.74E-017.88E+017.06E+03 + 18L2 17.001.44E-023.88E+006.62E+027.49E+043.82E-034.58E-014.16E+013.32E+03 + 18L2 20.007.68E-031.69E+002.45E+022.37E+042.26E-032.31E-011.81E+011.25E+03 + 18L2 25.003.22E-035.43E-016.23E+014.90E+031.10E-039.03E-025.75E+003.23E+02 + 18L2 32.001.22E-031.54E-011.37E+018.56E+024.92E-043.19E-021.62E+007.26E+01 + 18L2 40.005.06E-044.95E-023.52E+001.78E+022.38E-041.25E-025.14E-011.88E+01 + 18L2 50.002.09E-041.60E-029.05E-013.70E+011.15E-044.87E-031.63E-014.87E+00 + 18L2 65.007.37E-054.24E-031.85E-015.91E+004.91E-051.62E-034.26E-021.00E+00 + 18L2 80.003.24E-051.49E-035.31E-021.40E+002.50E-056.78E-041.48E-022.88E-01 + 18L2 100.001.34E-054.90E-041.40E-023.01E-011.21E-052.67E-044.77E-037.62E-02 + 18L2 120.006.56E-061.99E-044.78E-038.69E-026.70E-061.25E-041.91E-032.59E-02 + 18L2 150.002.75E-066.68E-051.30E-031.94E-023.26E-065.01E-056.26E-047.02E-03 + 18L2 200.009.16E-071.68E-052.51E-042.91E-031.30E-061.55E-051.52E-041.34E-03 + 18L2 300.002.04E-072.56E-062.66E-052.20E-043.60E-073.08E-062.18E-051.39E-04 + 18L2 450.004.88E-084.29E-073.18E-061.92E-051.02E-076.44E-073.37E-061.59E-05 + 18L2 650.001.46E-089.43E-085.25E-072.43E-063.39E-081.65E-076.74E-072.50E-06 + 18L21000.003.97E-091.85E-087.59E-082.67E-079.71E-093.62E-081.15E-073.33E-07 + 18L22000.006.63E-101.96E-095.25E-091.27E-081.51E-093.93E-098.99E-091.90E-08 + 18L3 15.004.43E-021.36E+012.61E+033.29E+052.64E-031.32E+003.21E+024.39E+04 + 18L3 17.002.73E-027.15E+001.20E+031.35E+051.78E-037.18E-011.51E+021.83E+04 + 18L3 20.001.46E-023.10E+004.39E+024.23E+041.06E-033.28E-015.71E+015.91E+03 + 18L3 25.006.08E-039.81E-011.10E+028.58E+035.24E-041.12E-011.52E+011.27E+03 + 18L3 32.002.30E-032.75E-012.38E+011.47E+032.39E-043.47E-023.55E+002.34E+02 + 18L3 40.009.48E-048.68E-025.96E+002.96E+021.17E-041.21E-029.70E-015.14E+01 + 18L3 50.003.90E-042.74E-021.49E+005.99E+015.77E-054.27E-032.68E-011.15E+01 + 18L3 65.001.37E-047.09E-032.93E-019.16E+002.51E-051.27E-036.01E-022.01E+00 + 18L3 80.006.01E-052.44E-038.11E-022.08E+001.30E-054.90E-041.87E-025.14E-01 + 18L3 100.002.49E-057.77E-042.05E-024.25E-016.42E-061.78E-045.38E-031.21E-01 + 18L3 120.001.22E-053.07E-046.69E-031.17E-013.63E-067.87E-051.97E-033.74E-02 + 18L3 150.005.14E-069.97E-051.72E-032.42E-021.81E-062.93E-055.85E-049.11E-03 + 18L3 200.001.73E-062.39E-053.04E-043.27E-037.52E-078.40E-061.25E-041.52E-03 + 18L3 300.003.99E-073.40E-062.81E-052.08E-042.26E-071.52E-061.52E-051.32E-04 + 18L3 450.001.02E-075.43E-072.92E-061.50E-057.18E-083.01E-072.00E-061.26E-05 + 18L3 650.003.36E-081.19E-074.38E-071.62E-062.73E-087.68E-083.49E-071.66E-06 + 18L31000.001.07E-082.48E-086.14E-081.60E-079.70E-091.85E-085.31E-081.81E-07 + 18L32000.002.43E-093.47E-095.21E-098.41E-092.37E-093.00E-094.54E-098.51E-09 + 19K1 15.006.15E+003.18E+021.33E+045.40E+051.91E+001.18E+025.89E+032.84E+05 + 19K1 17.004.25E+002.04E+027.98E+033.01E+051.33E+007.29E+013.32E+031.48E+05 + 19K1 20.002.62E+001.13E+024.01E+031.37E+058.30E-013.89E+011.57E+036.24E+04 + 19K1 25.001.34E+004.97E+011.51E+034.45E+044.39E-011.66E+015.62E+021.89E+04 + 19K1 32.006.31E-011.95E+014.99E+021.23E+042.19E-016.53E+001.81E+024.98E+03 + 19K1 40.003.17E-018.29E+001.79E+023.70E+031.18E-012.85E+006.51E+011.49E+03 + 19K1 50.001.59E-013.48E+006.32E+011.10E+036.40E-021.26E+002.37E+014.48E+02 + 19K1 65.007.00E-021.24E+001.83E+012.57E+023.16E-024.88E-017.32E+001.10E+02 + 19K1 80.003.65E-025.47E-016.81E+008.09E+011.82E-022.34E-012.93E+003.69E+01 + 19K1 100.001.81E-022.26E-012.35E+002.33E+011.02E-021.08E-011.11E+001.15E+01 + 19K1 120.001.02E-021.10E-019.85E-018.43E+006.40E-035.77E-025.10E-014.53E+00 + 19K1 150.005.07E-034.54E-023.42E-012.45E+003.65E-032.73E-022.01E-011.48E+00 + 19K1 200.002.08E-031.48E-028.88E-025.08E-011.80E-031.07E-026.23E-023.62E-01 + 19K1 300.006.18E-043.18E-031.41E-025.96E-026.89E-043.04E-031.30E-025.51E-02 + 19K1 450.001.99E-047.57E-042.53E-038.10E-032.76E-049.28E-042.99E-039.57E-03 + 19K1 650.007.97E-052.35E-046.23E-041.59E-031.26E-043.41E-048.80E-042.24E-03 + 19K11000.003.19E-057.30E-051.53E-043.13E-045.31E-051.16E-042.40E-044.87E-04 + 19K12000.001.00E-051.68E-052.69E-054.19E-051.54E-052.54E-054.04E-056.29E-05 + 19K16000.002.49E-063.10E-063.82E-064.66E-063.04E-063.80E-064.68E-065.71E-06 + 19L1 15.004.53E-012.24E+018.76E+023.15E+041.61E-011.20E+017.62E+024.75E+04 + 19L1 17.003.16E-011.46E+015.36E+021.84E+041.12E-017.26E+004.08E+022.26E+04 + 19L1 20.001.98E-018.23E+002.76E+028.75E+037.03E-023.79E+001.82E+028.68E+03 + 19L1 25.001.03E-013.68E+001.08E+022.99E+033.72E-021.57E+006.09E+012.36E+03 + 19L1 32.004.93E-021.48E+003.66E+018.60E+021.85E-026.04E-011.85E+015.67E+02 + 19L1 40.002.51E-026.39E-011.34E+012.69E+029.96E-032.58E-016.40E+001.59E+02 + 19L1 50.001.27E-022.72E-014.83E+008.16E+015.40E-031.12E-012.25E+004.55E+01 + 19L1 65.005.65E-039.87E-021.43E+001.96E+012.66E-034.29E-026.75E-011.07E+01 + 19L1 80.002.97E-034.38E-025.38E-016.28E+001.54E-032.04E-022.65E-013.47E+00 + 19L1 100.001.48E-031.83E-021.88E-011.83E+008.59E-049.30E-039.90E-021.06E+00 + 19L1 120.008.37E-048.92E-037.93E-026.71E-015.38E-044.97E-034.50E-024.10E-01 + 19L1 150.004.18E-043.72E-032.78E-021.97E-013.07E-042.34E-031.75E-021.31E-01 + 19L1 200.001.73E-041.22E-037.28E-034.13E-021.51E-049.13E-045.38E-033.18E-02 + 19L1 300.005.15E-052.64E-041.17E-034.92E-035.80E-052.58E-041.11E-034.76E-03 + 19L1 450.001.67E-056.32E-052.11E-046.73E-042.32E-057.85E-052.55E-048.19E-04 + 19L1 650.006.68E-061.97E-055.21E-051.33E-041.06E-052.88E-057.46E-051.91E-04 + 19L11000.002.67E-066.13E-061.29E-052.63E-054.47E-069.75E-062.03E-054.13E-05 + 19L12000.008.39E-071.41E-062.26E-063.52E-061.29E-062.14E-063.40E-065.30E-06 + 19L2 15.002.97E-029.70E+001.90E+032.40E+057.65E-031.03E+001.04E+029.26E+03 + 19L2 17.001.84E-025.13E+008.82E+029.91E+045.11E-036.12E-015.52E+014.37E+03 + 19L2 20.009.87E-032.24E+003.26E+023.15E+043.03E-033.10E-012.40E+011.64E+03 + 19L2 25.004.16E-037.21E-018.32E+016.52E+031.47E-031.21E-017.67E+004.28E+02 + 19L2 32.001.59E-032.05E-011.84E+011.14E+036.63E-044.30E-022.16E+009.65E+01 + 19L2 40.006.61E-046.62E-024.72E+002.38E+023.22E-041.68E-026.89E-012.51E+01 + 19L2 50.002.74E-042.14E-021.22E+004.97E+011.56E-046.58E-032.20E-016.52E+00 + 19L2 65.009.73E-055.68E-032.49E-017.96E+006.65E-052.19E-035.75E-021.34E+00 + 19L2 80.004.29E-052.01E-037.17E-021.89E+003.39E-059.20E-042.00E-023.88E-01 + 19L2 100.001.78E-056.61E-041.90E-024.07E-011.65E-053.63E-046.47E-031.03E-01 + 19L2 120.008.74E-062.69E-046.48E-031.18E-019.13E-061.71E-042.59E-033.51E-02 + 19L2 150.003.68E-069.04E-051.77E-032.63E-024.45E-066.83E-058.52E-049.52E-03 + 19L2 200.001.23E-062.28E-053.41E-043.96E-031.77E-062.12E-052.08E-041.82E-03 + 19L2 300.002.74E-073.48E-063.64E-053.01E-044.93E-074.22E-062.98E-051.90E-04 + 19L2 450.006.61E-085.85E-074.36E-062.63E-051.41E-078.85E-074.63E-062.19E-05 + 19L2 650.001.97E-081.29E-077.20E-073.34E-064.65E-082.27E-079.28E-073.44E-06 + 19L21000.005.39E-092.54E-081.04E-073.67E-071.34E-084.99E-081.59E-074.59E-07 + 19L22000.009.00E-102.69E-097.23E-091.76E-082.07E-095.42E-091.24E-082.63E-08 + 19L3 15.005.64E-021.79E+013.45E+034.33E+053.47E-031.88E+004.70E+026.42E+04 + 19L3 17.003.49E-029.42E+001.59E+031.78E+052.34E-031.02E+002.20E+022.67E+04 + 19L3 20.001.86E-024.09E+005.83E+025.59E+041.40E-034.66E-018.30E+018.58E+03 + 19L3 25.007.82E-031.30E+001.46E+021.14E+046.92E-041.59E-012.19E+011.83E+03 + 19L3 32.002.97E-033.64E-013.17E+011.95E+033.17E-044.90E-025.11E+003.36E+02 + 19L3 40.001.23E-031.15E-017.95E+003.94E+021.56E-041.70E-021.39E+007.36E+01 + 19L3 50.005.09E-043.65E-021.99E+007.99E+017.68E-055.98E-033.82E-011.64E+01 + 19L3 65.001.80E-049.45E-033.93E-011.22E+013.34E-051.77E-038.52E-022.85E+00 + 19L3 80.007.91E-053.25E-031.09E-012.78E+001.73E-056.82E-042.64E-027.27E-01 + 19L3 100.003.29E-051.04E-032.75E-025.70E-018.58E-062.47E-047.57E-031.70E-01 + 19L3 120.001.61E-054.12E-049.00E-031.57E-014.85E-061.09E-042.77E-035.27E-02 + 19L3 150.006.82E-061.34E-042.31E-033.26E-022.43E-064.04E-058.18E-041.28E-02 + 19L3 200.002.30E-063.21E-054.09E-044.41E-031.01E-061.15E-051.75E-042.13E-03 + 19L3 300.005.32E-074.58E-063.80E-052.81E-043.03E-072.08E-062.11E-051.83E-04 + 19L3 450.001.37E-077.32E-073.95E-062.02E-059.64E-084.10E-072.76E-061.75E-05 + 19L3 650.004.51E-081.60E-075.93E-072.20E-063.66E-081.04E-074.79E-072.30E-06 + 19L31000.001.44E-083.34E-088.29E-082.16E-071.30E-082.49E-087.25E-082.50E-07 + 19L32000.003.25E-094.66E-097.02E-091.13E-083.17E-094.02E-096.13E-091.16E-08 + 20K1 15.006.78E+003.35E+021.33E+045.12E+052.34E+001.45E+026.98E+033.22E+05 + 20K1 17.004.69E+002.16E+028.08E+032.92E+051.63E+008.93E+013.95E+031.69E+05 + 20K1 20.002.90E+001.21E+024.13E+031.36E+051.02E+004.76E+011.88E+037.23E+04 + 20K1 25.001.49E+005.37E+011.59E+034.51E+045.36E-012.02E+016.73E+022.21E+04 + 20K1 32.007.05E-012.13E+015.31E+021.27E+042.67E-017.94E+002.16E+025.86E+03 + 20K1 40.003.56E-019.11E+001.92E+023.90E+031.43E-013.45E+007.80E+011.76E+03 + 20K1 50.001.79E-013.85E+006.85E+011.17E+037.74E-021.52E+002.84E+015.31E+02 + 20K1 65.007.90E-021.38E+002.00E+012.77E+023.81E-025.87E-018.74E+001.31E+02 + 20K1 80.004.13E-026.11E-017.51E+008.80E+012.19E-022.80E-013.49E+004.37E+01 + 20K1 100.002.05E-022.54E-012.61E+002.55E+011.22E-021.29E-011.32E+001.37E+01 + 20K1 120.001.16E-021.23E-011.10E+009.29E+007.65E-036.89E-026.07E-015.37E+00 + 20K1 150.005.78E-035.14E-023.83E-012.71E+004.36E-033.26E-022.38E-011.75E+00 + 20K1 200.002.38E-031.68E-021.00E-015.67E-012.14E-031.27E-027.39E-024.28E-01 + 20K1 300.007.09E-043.63E-031.60E-026.73E-028.17E-043.60E-031.53E-026.50E-02 + 20K1 450.002.30E-048.69E-042.89E-039.21E-033.26E-041.10E-033.54E-031.13E-02 + 20K1 650.009.21E-052.71E-047.16E-041.82E-031.48E-044.02E-041.04E-032.64E-03 + 20K11000.003.68E-058.45E-051.77E-043.61E-046.23E-051.36E-042.83E-045.74E-04 + 20K12000.001.16E-051.95E-053.12E-054.87E-051.79E-052.98E-054.74E-057.39E-05 + 20K16000.002.87E-063.58E-064.42E-065.41E-063.51E-064.41E-065.45E-066.66E-06 + 20L1 15.005.04E-012.38E+018.74E+022.91E+042.03E-011.54E+019.73E+026.03E+04 + 20L1 17.003.54E-011.56E+015.43E+021.74E+041.41E-019.26E+005.19E+022.86E+04 + 20L1 20.002.22E-018.88E+002.85E+028.56E+038.79E-024.81E+002.31E+021.10E+04 + 20L1 25.001.16E-014.02E+001.13E+023.02E+034.64E-021.98E+007.69E+012.96E+03 + 20L1 32.005.58E-021.63E+003.91E+018.92E+022.30E-027.58E-012.32E+017.09E+02 + 20L1 40.002.86E-027.12E-011.46E+012.84E+021.24E-023.23E-017.99E+001.98E+02 + 20L1 50.001.45E-023.05E-015.30E+008.76E+016.68E-031.39E-012.80E+005.64E+01 + 20L1 65.006.49E-031.11E-011.58E+002.14E+013.28E-035.31E-028.34E-011.32E+01 + 20L1 80.003.42E-034.98E-026.01E-016.92E+001.89E-032.51E-023.26E-014.27E+00 + 20L1 100.001.71E-032.08E-022.11E-012.04E+001.05E-031.14E-021.21E-011.30E+00 + 20L1 120.009.70E-041.02E-028.98E-027.51E-016.58E-046.08E-035.50E-025.01E-01 + 20L1 150.004.86E-044.28E-033.16E-022.22E-013.74E-042.86E-032.13E-021.60E-01 + 20L1 200.002.01E-041.41E-038.34E-034.70E-021.84E-041.11E-036.54E-033.86E-02 + 20L1 300.006.03E-053.07E-041.35E-035.65E-037.01E-053.12E-041.34E-035.76E-03 + 20L1 450.001.96E-057.40E-052.45E-047.81E-042.80E-059.49E-053.08E-049.89E-04 + 20L1 650.007.87E-062.32E-056.12E-051.56E-041.27E-053.47E-059.00E-052.30E-04 + 20L11000.003.15E-067.23E-061.52E-053.10E-055.34E-061.17E-052.44E-054.97E-05 + 20L12000.009.89E-071.67E-062.68E-064.18E-061.53E-062.56E-064.08E-066.37E-06 + 20L2 15.003.73E-021.26E+012.48E+033.11E+051.01E-021.36E+001.36E+021.19E+04 + 20L2 17.002.32E-026.68E+001.15E+031.29E+056.74E-038.05E-017.20E+015.65E+03 + 20L2 20.001.25E-022.93E+004.27E+024.11E+044.00E-034.08E-013.14E+012.13E+03 + 20L2 25.005.29E-039.42E-011.09E+028.53E+031.95E-031.60E-011.01E+015.58E+02 + 20L2 32.002.03E-032.69E-012.42E+011.50E+038.78E-045.68E-022.85E+001.26E+02 + 20L2 40.008.49E-048.69E-026.23E+003.13E+024.27E-042.23E-029.09E-013.29E+01 + 20L2 50.003.54E-042.81E-021.61E+006.55E+012.07E-048.74E-032.91E-018.58E+00 + 20L2 65.001.26E-047.50E-033.30E-011.05E+018.86E-052.92E-037.63E-021.78E+00 + 20L2 80.005.58E-052.65E-039.52E-022.50E+004.53E-051.23E-032.66E-025.13E-01 + 20L2 100.002.33E-058.75E-042.53E-025.41E-012.20E-054.86E-048.62E-031.37E-01 + 20L2 120.001.14E-053.57E-048.64E-031.57E-011.22E-052.29E-043.45E-034.66E-02 + 20L2 150.004.84E-061.20E-042.36E-033.51E-025.97E-069.15E-051.14E-031.27E-02 + 20L2 200.001.62E-063.04E-054.57E-045.29E-032.38E-062.85E-052.78E-042.44E-03 + 20L2 300.003.63E-074.66E-064.89E-054.04E-046.64E-075.69E-064.01E-052.55E-04 + 20L2 450.008.78E-087.85E-075.87E-063.54E-051.90E-071.20E-066.25E-062.95E-05 + 20L2 650.002.63E-081.73E-079.72E-074.51E-066.28E-083.07E-071.26E-064.65E-06 + 20L21000.007.20E-093.42E-081.41E-074.97E-071.81E-086.78E-082.15E-076.23E-07 + 20L22000.001.20E-093.62E-099.78E-092.38E-082.79E-097.35E-091.69E-083.58E-08 + 20L3 15.007.05E-022.32E+014.50E+035.60E+054.50E-032.63E+006.75E+029.21E+04 + 20L3 17.004.38E-021.22E+012.08E+032.30E+053.04E-031.43E+003.16E+023.82E+04 + 20L3 20.002.35E-025.31E+007.61E+027.25E+041.82E-036.50E-011.18E+021.22E+04 + 20L3 25.009.90E-031.69E+001.91E+021.48E+049.00E-042.21E-013.11E+012.59E+03 + 20L3 32.003.78E-034.74E-014.15E+012.54E+034.12E-046.79E-027.20E+004.74E+02 + 20L3 40.001.58E-031.50E-011.04E+015.16E+022.03E-042.35E-021.95E+001.03E+02 + 20L3 50.006.54E-044.77E-022.62E+001.05E+021.00E-048.24E-035.34E-012.29E+01 + 20L3 65.002.32E-041.24E-025.17E-011.61E+014.37E-052.43E-031.19E-013.98E+00 + 20L3 80.001.02E-044.27E-031.43E-013.66E+002.27E-059.32E-043.66E-021.01E+00 + 20L3 100.004.26E-051.37E-033.63E-027.51E-011.13E-053.37E-041.05E-022.36E-01 + 20L3 120.002.10E-055.42E-041.19E-022.07E-016.37E-061.48E-043.81E-037.28E-02 + 20L3 150.008.89E-061.76E-043.06E-034.31E-023.19E-065.49E-051.12E-031.76E-02 + 20L3 200.003.01E-064.24E-055.43E-045.84E-031.33E-061.56E-052.39E-042.93E-03 + 20L3 300.006.99E-076.06E-065.04E-053.73E-043.99E-072.80E-062.87E-052.51E-04 + 20L3 450.001.80E-079.69E-075.25E-062.69E-051.27E-075.49E-073.74E-062.39E-05 + 20L3 650.005.94E-082.12E-077.88E-072.92E-064.83E-081.39E-076.48E-073.13E-06 + 20L31000.001.89E-084.43E-081.10E-072.88E-071.71E-083.31E-089.74E-083.38E-07 + 20L32000.004.28E-096.15E-099.28E-091.50E-084.18E-095.31E-098.13E-091.55E-08 + 21K1 15.007.42E+003.48E+021.31E+044.76E+052.86E+001.77E+028.16E+033.59E+05 + 21K1 17.005.15E+002.27E+028.07E+032.77E+051.98E+001.09E+024.64E+031.91E+05 + 21K1 20.003.19E+001.29E+024.20E+031.32E+051.24E+005.77E+012.21E+038.26E+04 + 21K1 25.001.65E+005.75E+011.64E+034.52E+046.50E-012.45E+017.97E+022.55E+04 + 21K1 32.007.82E-012.31E+015.58E+021.30E+043.22E-019.57E+002.57E+026.83E+03 + 21K1 40.003.96E-019.93E+002.05E+024.06E+031.72E-014.15E+009.26E+012.06E+03 + 21K1 50.002.00E-014.22E+007.37E+011.23E+039.29E-021.82E+003.36E+016.23E+02 + 21K1 65.008.86E-021.53E+002.18E+012.96E+024.56E-027.01E-011.04E+011.54E+02 + 21K1 80.004.64E-026.78E-018.21E+009.49E+012.62E-023.34E-014.14E+005.14E+01 + 21K1 100.002.31E-022.82E-012.87E+002.77E+011.46E-021.53E-011.56E+001.61E+01 + 21K1 120.001.31E-021.38E-011.21E+001.02E+019.09E-038.17E-027.17E-016.31E+00 + 21K1 150.006.54E-035.76E-024.25E-012.99E+005.16E-033.86E-022.81E-012.05E+00 + 21K1 200.002.70E-031.89E-021.12E-016.29E-012.53E-031.51E-028.70E-025.03E-01 + 21K1 300.008.09E-044.11E-031.80E-027.53E-029.61E-044.24E-031.80E-027.62E-02 + 21K1 450.002.63E-049.89E-043.28E-031.04E-023.82E-041.29E-034.15E-031.32E-02 + 21K1 650.001.06E-043.10E-048.17E-042.07E-031.73E-044.71E-041.22E-033.09E-03 + 21K11000.004.23E-059.70E-052.04E-044.14E-047.25E-051.59E-043.30E-046.71E-04 + 21K12000.001.32E-052.25E-053.60E-055.62E-052.07E-053.46E-055.53E-058.62E-05 + 21K16000.003.28E-064.11E-065.09E-066.23E-064.02E-065.07E-066.29E-067.70E-06 + 21L1 15.005.57E-012.49E+018.57E+022.60E+042.52E-011.95E+011.23E+037.57E+04 + 21L1 17.003.92E-011.65E+015.42E+021.61E+041.75E-011.17E+016.54E+023.59E+04 + 21L1 20.002.47E-019.49E+002.90E+028.20E+031.09E-016.06E+002.90E+021.37E+04 + 21L1 25.001.30E-014.35E+001.18E+023.00E+035.73E-022.48E+009.61E+013.69E+03 + 21L1 32.006.27E-021.79E+004.14E+019.12E+022.84E-029.43E-012.88E+018.79E+02 + 21L1 40.003.23E-027.84E-011.56E+012.96E+021.52E-024.00E-019.88E+002.45E+02 + 21L1 50.001.65E-023.39E-015.75E+009.29E+018.19E-031.72E-013.45E+006.93E+01 + 21L1 65.007.39E-031.25E-011.74E+002.31E+014.01E-036.51E-021.02E+001.61E+01 + 21L1 80.003.90E-035.60E-026.65E-017.53E+002.30E-033.07E-023.98E-015.20E+00 + 21L1 100.001.96E-032.36E-022.36E-012.24E+001.28E-031.39E-021.48E-011.58E+00 + 21L1 120.001.11E-031.16E-021.01E-018.32E-017.98E-047.38E-036.68E-026.07E-01 + 21L1 150.005.60E-044.88E-033.57E-022.48E-014.53E-043.46E-032.58E-021.93E-01 + 21L1 200.002.33E-041.61E-039.48E-035.29E-022.22E-041.34E-037.89E-034.65E-02 + 21L1 300.007.00E-053.55E-041.55E-036.43E-038.42E-053.75E-041.61E-036.92E-03 + 21L1 450.002.28E-058.58E-052.83E-048.98E-043.35E-051.14E-043.69E-041.19E-03 + 21L1 650.009.19E-062.70E-057.11E-051.80E-041.51E-054.14E-051.07E-042.74E-04 + 21L11000.003.68E-068.46E-061.78E-053.62E-056.34E-061.40E-052.91E-055.94E-05 + 21L12000.001.15E-061.96E-063.15E-064.92E-061.81E-063.03E-064.85E-067.58E-06 + 21L2 15.004.62E-021.62E+013.20E+033.98E+051.31E-021.76E+001.74E+021.51E+04 + 21L2 17.002.88E-028.58E+001.49E+031.65E+058.76E-031.04E+009.25E+017.18E+03 + 21L2 20.001.56E-023.76E+005.52E+025.27E+045.20E-035.29E-014.05E+012.72E+03 + 21L2 25.006.63E-031.21E+001.41E+021.10E+042.54E-032.08E-011.30E+017.14E+02 + 21L2 32.002.56E-033.48E-013.14E+011.94E+031.15E-037.41E-023.69E+001.62E+02 + 21L2 40.001.07E-031.12E-018.10E+004.05E+025.59E-042.91E-021.18E+004.24E+01 + 21L2 50.004.50E-043.65E-022.10E+008.51E+012.72E-041.14E-023.79E-011.11E+01 + 21L2 65.001.61E-049.76E-034.31E-011.37E+011.16E-043.83E-039.97E-022.31E+00 + 21L2 80.007.15E-053.46E-031.25E-013.27E+005.96E-051.61E-033.48E-026.70E-01 + 21L2 100.003.00E-051.14E-033.31E-027.08E-012.90E-056.39E-041.13E-021.78E-01 + 21L2 120.001.48E-054.67E-041.13E-022.06E-011.61E-053.02E-044.54E-036.11E-02 + 21L2 150.006.26E-061.58E-043.10E-034.61E-027.90E-061.21E-041.50E-031.67E-02 + 21L2 200.002.11E-064.00E-056.03E-046.98E-033.16E-063.77E-053.68E-043.21E-03 + 21L2 300.004.74E-076.14E-066.46E-055.34E-048.82E-077.56E-065.32E-053.37E-04 + 21L2 450.001.15E-071.04E-067.78E-064.70E-052.52E-071.59E-068.31E-063.91E-05 + 21L2 650.003.45E-082.29E-071.29E-066.00E-068.37E-084.10E-071.67E-066.19E-06 + 21L21000.009.48E-094.53E-081.88E-076.63E-072.40E-089.05E-082.88E-078.32E-07 + 21L22000.001.58E-094.80E-091.30E-083.19E-083.72E-099.84E-092.26E-084.80E-08 + 21L3 15.008.69E-022.97E+015.77E+037.14E+055.75E-033.63E+009.54E+021.30E+05 + 21L3 17.005.41E-021.56E+012.67E+032.94E+053.88E-031.97E+004.45E+025.37E+04 + 21L3 20.002.91E-026.80E+009.79E+029.27E+042.33E-038.94E-011.66E+021.72E+04 + 21L3 25.001.24E-022.17E+002.47E+021.90E+041.15E-033.04E-014.34E+013.62E+03 + 21L3 32.004.74E-036.10E-015.36E+013.26E+035.30E-049.28E-021.00E+016.58E+02 + 21L3 40.001.98E-031.94E-011.35E+016.64E+022.62E-043.21E-022.69E+001.43E+02 + 21L3 50.008.27E-046.16E-023.39E+001.35E+021.29E-041.12E-027.35E-013.16E+01 + 21L3 65.002.95E-041.60E-026.70E-012.08E+015.65E-053.28E-031.63E-015.46E+00 + 21L3 80.001.30E-045.53E-031.86E-014.75E+002.94E-051.26E-035.00E-021.38E+00 + 21L3 100.005.45E-051.77E-034.73E-029.75E-011.46E-054.53E-041.43E-023.22E-01 + 21L3 120.002.69E-057.04E-041.55E-022.69E-018.26E-061.99E-045.18E-039.91E-02 + 21L3 150.001.14E-052.29E-043.99E-035.62E-024.14E-067.33E-051.52E-032.39E-02 + 21L3 200.003.88E-065.52E-057.09E-047.62E-031.72E-062.08E-053.23E-043.96E-03 + 21L3 300.009.03E-077.90E-066.59E-054.87E-045.19E-073.72E-063.86E-053.39E-04 + 21L3 450.002.34E-071.26E-066.87E-063.52E-051.65E-077.24E-075.01E-063.21E-05 + 21L3 650.007.70E-082.76E-071.03E-063.83E-066.27E-081.83E-078.63E-074.20E-06 + 21L31000.002.46E-085.77E-081.44E-073.77E-072.23E-084.33E-081.29E-074.51E-07 + 21L32000.005.54E-098.00E-091.21E-081.96E-085.41E-096.90E-091.06E-082.04E-08 + 22K1 15.008.07E+003.59E+021.27E+044.34E+053.45E+002.13E+029.41E+033.94E+05 + 22K1 17.005.62E+002.37E+027.98E+032.60E+052.39E+001.30E+025.38E+032.12E+05 + 22K1 20.003.50E+001.35E+024.22E+031.27E+051.49E+006.93E+012.58E+039.30E+04 + 22K1 25.001.81E+006.12E+011.69E+034.48E+047.79E-012.93E+019.33E+022.91E+04 + 22K1 32.008.63E-012.48E+015.83E+021.32E+043.85E-011.14E+013.02E+027.86E+03 + 22K1 40.004.39E-011.08E+012.17E+024.19E+032.05E-014.94E+001.09E+022.38E+03 + 22K1 50.002.22E-014.60E+007.87E+011.29E+031.11E-012.16E+003.95E+017.23E+02 + 22K1 65.009.87E-021.68E+002.35E+013.15E+025.40E-028.30E-011.22E+011.79E+02 + 22K1 80.005.18E-027.47E-018.91E+001.02E+023.09E-023.95E-014.85E+005.98E+01 + 22K1 100.002.59E-023.13E-013.13E+002.99E+011.72E-021.80E-011.83E+001.87E+01 + 22K1 120.001.47E-021.53E-011.33E+001.10E+011.07E-029.61E-028.39E-017.34E+00 + 22K1 150.007.36E-036.42E-024.69E-013.26E+006.06E-034.52E-023.28E-012.39E+00 + 22K1 200.003.05E-032.11E-021.24E-016.93E-012.96E-031.76E-021.01E-015.85E-01 + 22K1 300.009.16E-044.63E-032.02E-028.37E-021.12E-034.95E-032.10E-028.85E-02 + 22K1 450.002.99E-041.12E-033.69E-031.17E-024.44E-041.50E-034.82E-031.53E-02 + 22K1 650.001.20E-043.52E-049.26E-042.34E-032.01E-045.48E-041.41E-033.58E-03 + 22K11000.004.82E-051.11E-042.32E-044.71E-048.38E-051.85E-043.84E-047.80E-04 + 22K12000.001.51E-052.57E-054.12E-056.45E-052.38E-054.00E-056.40E-059.99E-05 + 22K16000.003.72E-064.68E-065.81E-067.13E-064.57E-065.80E-067.21E-068.85E-06 + 22L1 15.006.10E-012.59E+018.26E+022.25E+043.10E-012.45E+011.54E+039.42E+04 + 22L1 17.004.30E-011.73E+015.33E+021.46E+042.15E-011.46E+018.17E+024.46E+04 + 22L1 20.002.72E-011.00E+012.91E+027.72E+031.34E-017.55E+003.61E+021.70E+04 + 22L1 25.001.44E-014.66E+001.21E+022.93E+037.02E-023.08E+001.19E+024.55E+03 + 22L1 32.006.99E-021.93E+004.34E+019.21E+023.47E-021.16E+003.55E+011.08E+03 + 22L1 40.003.61E-028.57E-011.66E+013.05E+021.85E-024.91E-011.21E+012.99E+02 + 22L1 50.001.85E-023.73E-016.18E+009.75E+019.95E-032.10E-014.21E+008.45E+01 + 22L1 65.008.34E-031.38E-011.89E+002.46E+014.85E-037.92E-021.24E+001.96E+01 + 22L1 80.004.42E-036.25E-027.30E-018.12E+002.78E-033.72E-024.82E-016.29E+00 + 22L1 100.002.23E-032.64E-022.60E-012.44E+001.54E-031.68E-021.78E-011.90E+00 + 22L1 120.001.27E-031.31E-021.12E-019.13E-019.59E-048.89E-038.03E-027.29E-01 + 22L1 150.006.40E-045.52E-033.99E-022.74E-015.42E-044.15E-033.10E-022.32E-01 + 22L1 200.002.67E-041.83E-031.07E-025.91E-022.65E-041.61E-039.44E-035.55E-02 + 22L1 300.008.06E-054.05E-041.76E-037.25E-031.00E-044.48E-041.92E-038.24E-03 + 22L1 450.002.64E-059.87E-053.25E-041.02E-033.97E-051.35E-044.38E-041.41E-03 + 22L1 650.001.06E-053.12E-058.19E-052.07E-041.79E-054.90E-051.27E-043.25E-04 + 22L11000.004.27E-069.82E-062.06E-054.19E-057.45E-061.65E-053.44E-057.03E-05 + 22L12000.001.34E-062.28E-063.67E-065.74E-062.11E-063.56E-065.72E-068.95E-06 + 22L2 15.005.63E-022.05E+014.07E+035.03E+051.67E-022.25E+002.21E+021.90E+04 + 22L2 17.003.53E-021.09E+011.90E+032.09E+051.12E-021.34E+001.17E+029.02E+03 + 22L2 20.001.91E-024.77E+007.04E+026.68E+046.68E-036.78E-015.14E+013.43E+03 + 22L2 25.008.19E-031.54E+001.81E+021.40E+043.27E-032.67E-011.66E+019.03E+02 + 22L2 32.003.18E-034.43E-014.02E+012.47E+031.48E-039.53E-024.71E+002.06E+02 + 22L2 40.001.34E-031.44E-011.04E+015.18E+027.21E-043.75E-021.51E+005.41E+01 + 22L2 50.005.64E-044.66E-022.69E+001.09E+023.51E-041.48E-024.86E-011.42E+01 + 22L2 65.002.03E-041.25E-025.56E-011.76E+011.51E-044.95E-031.28E-012.96E+00 + 22L2 80.009.04E-054.44E-031.61E-014.21E+007.73E-052.09E-034.50E-028.61E-01 + 22L2 100.003.80E-051.47E-034.28E-029.14E-013.77E-058.30E-041.46E-022.30E-01 + 22L2 120.001.88E-056.02E-041.47E-022.66E-012.10E-053.92E-045.89E-037.89E-02 + 22L2 150.007.99E-062.04E-044.03E-035.98E-021.03E-051.58E-041.95E-032.16E-02 + 22L2 200.002.70E-065.18E-057.84E-049.07E-034.13E-064.93E-054.79E-044.17E-03 + 22L2 300.006.10E-077.98E-068.43E-056.97E-041.15E-069.90E-066.96E-054.39E-04 + 22L2 450.001.49E-071.35E-061.02E-056.15E-053.32E-072.09E-061.09E-055.12E-05 + 22L2 650.004.47E-083.00E-071.69E-067.88E-061.10E-075.39E-072.20E-068.13E-06 + 22L21000.001.23E-085.93E-082.47E-078.72E-073.16E-081.19E-073.79E-071.10E-06 + 22L22000.002.05E-096.28E-091.72E-084.20E-084.88E-091.30E-082.99E-086.34E-08 + 22L3 15.001.06E-013.74E+017.31E+038.97E+057.24E-034.94E+001.33E+031.81E+05 + 22L3 17.006.60E-021.97E+013.38E+033.70E+054.89E-032.68E+006.17E+027.45E+04 + 22L3 20.003.57E-028.59E+001.24E+031.17E+052.94E-031.21E+002.30E+022.37E+04 + 22L3 25.001.52E-022.74E+003.13E+022.40E+041.46E-034.10E-015.98E+014.98E+03 + 22L3 32.005.87E-037.73E-016.82E+014.14E+036.71E-041.25E-011.37E+019.01E+02 + 22L3 40.002.46E-032.46E-011.72E+018.44E+023.32E-044.31E-023.68E+001.95E+02 + 22L3 50.001.03E-037.83E-024.33E+001.72E+021.64E-041.50E-029.99E-014.29E+01 + 22L3 65.003.69E-042.04E-028.58E-012.66E+017.18E-054.38E-032.20E-017.39E+00 + 22L3 80.001.64E-047.06E-032.39E-016.07E+003.74E-051.67E-036.74E-021.87E+00 + 22L3 100.006.87E-052.27E-036.06E-021.25E+001.86E-056.01E-041.92E-024.33E-01 + 22L3 120.003.39E-059.01E-041.99E-023.45E-011.05E-052.63E-046.95E-031.33E-01 + 22L3 150.001.45E-052.94E-045.13E-037.21E-025.29E-069.68E-052.04E-033.20E-02 + 22L3 200.004.93E-067.08E-059.12E-049.80E-032.21E-062.73E-054.31E-045.29E-03 + 22L3 300.001.15E-061.01E-058.50E-056.28E-046.64E-074.86E-065.11E-054.50E-04 + 22L3 450.002.99E-071.63E-068.87E-064.55E-052.12E-079.41E-076.59E-064.24E-05 + 22L3 650.009.85E-083.55E-071.33E-064.95E-068.03E-082.36E-071.13E-065.54E-06 + 22L31000.003.14E-087.42E-081.86E-074.88E-072.85E-085.58E-081.68E-075.93E-07 + 22L32000.007.08E-091.02E-081.55E-082.53E-086.92E-098.84E-091.37E-082.65E-08 + 23K1 15.008.74E+003.67E+021.21E+043.88E+054.14E+002.55E+021.08E+044.25E+05 + 23K1 17.006.10E+002.44E+027.78E+032.40E+052.86E+001.56E+026.19E+032.33E+05 + 23K1 20.003.80E+001.41E+024.21E+031.21E+051.78E+008.28E+012.99E+031.04E+05 + 23K1 25.001.97E+006.46E+011.72E+034.39E+049.31E-013.49E+011.09E+033.29E+04 + 23K1 32.009.46E-012.65E+016.04E+021.33E+044.59E-011.36E+013.52E+028.99E+03 + 23K1 40.004.83E-011.16E+012.27E+024.29E+032.44E-015.86E+001.27E+022.74E+03 + 23K1 50.002.45E-014.98E+008.34E+011.34E+031.31E-012.55E+004.62E+018.35E+02 + 23K1 65.001.09E-011.83E+002.51E+013.31E+026.38E-029.79E-011.42E+012.07E+02 + 23K1 80.005.76E-028.18E-019.61E+001.08E+023.65E-024.64E-015.67E+006.93E+01 + 23K1 100.002.88E-023.44E-013.40E+003.21E+012.02E-022.11E-012.14E+002.17E+01 + 23K1 120.001.64E-021.69E-011.45E+001.19E+011.26E-021.13E-019.77E-018.51E+00 + 23K1 150.008.23E-037.11E-025.14E-013.54E+007.09E-035.29E-023.82E-012.77E+00 + 23K1 200.003.42E-032.35E-021.37E-017.58E-013.46E-032.05E-021.18E-016.77E-01 + 23K1 300.001.03E-035.18E-032.24E-029.24E-021.30E-035.75E-032.43E-021.02E-01 + 23K1 450.003.37E-041.26E-034.13E-031.30E-025.14E-041.74E-035.59E-031.77E-02 + 23K1 650.001.36E-043.98E-041.04E-032.63E-032.31E-046.34E-041.63E-034.14E-03 + 23K11000.005.46E-051.25E-042.63E-045.33E-049.63E-052.13E-044.43E-049.00E-04 + 23K12000.001.71E-052.92E-054.70E-057.35E-052.71E-054.59E-057.37E-051.15E-04 + 23K16000.004.19E-065.29E-066.59E-068.11E-065.17E-066.59E-068.22E-061.01E-05 + 23L1 15.006.63E-012.66E+017.84E+021.89E+043.78E-013.05E+011.91E+031.16E+05 + 23L1 17.004.70E-011.79E+015.17E+021.28E+042.62E-011.82E+011.01E+035.49E+04 + 23L1 20.002.98E-011.05E+012.89E+027.12E+031.63E-019.34E+004.46E+022.08E+04 + 23L1 25.001.58E-014.94E+001.23E+022.83E+038.53E-023.79E+001.46E+025.57E+03 + 23L1 32.007.74E-022.08E+004.50E+019.18E+024.20E-021.43E+004.34E+011.32E+03 + 23L1 40.004.01E-029.28E-011.75E+013.12E+022.24E-025.98E-011.48E+013.64E+02 + 23L1 50.002.06E-024.08E-016.59E+001.01E+021.20E-022.55E-015.10E+001.02E+02 + 23L1 65.009.35E-031.52E-012.04E+002.60E+015.83E-039.56E-021.50E+002.36E+01 + 23L1 80.004.97E-036.91E-027.94E-018.69E+003.33E-034.48E-025.80E-017.55E+00 + 23L1 100.002.51E-032.94E-022.86E-012.64E+001.84E-032.01E-022.13E-012.27E+00 + 23L1 120.001.44E-031.46E-021.23E-019.93E-011.14E-031.06E-029.60E-028.70E-01 + 23L1 150.007.25E-046.19E-034.42E-023.01E-016.46E-044.95E-033.69E-022.76E-01 + 23L1 200.003.03E-042.07E-031.19E-026.54E-023.14E-041.91E-031.12E-026.59E-02 + 23L1 300.009.21E-054.60E-041.98E-038.12E-031.18E-045.30E-042.28E-039.74E-03 + 23L1 450.003.03E-051.13E-043.69E-041.16E-034.67E-051.59E-045.17E-041.66E-03 + 23L1 650.001.22E-053.58E-059.37E-052.37E-042.09E-055.77E-051.50E-043.83E-04 + 23L11000.004.92E-061.13E-052.37E-054.82E-058.70E-061.94E-054.05E-058.26E-05 + 23L12000.001.54E-062.63E-064.25E-066.65E-062.45E-064.16E-066.69E-061.05E-05 + 23L2 15.006.79E-022.56E+015.11E+036.26E+052.12E-022.84E+002.76E+022.34E+04 + 23L2 17.004.27E-021.36E+012.38E+032.61E+051.42E-021.69E+001.47E+021.12E+04 + 23L2 20.002.32E-025.98E+008.86E+028.36E+048.46E-038.57E-016.45E+014.26E+03 + 23L2 25.001.00E-021.94E+002.28E+021.75E+044.15E-033.39E-012.08E+011.13E+03 + 23L2 32.003.90E-035.57E-015.09E+013.11E+031.88E-031.21E-015.95E+002.58E+02 + 23L2 40.001.65E-031.81E-011.32E+016.53E+029.19E-044.77E-021.92E+006.80E+01 + 23L2 50.006.98E-045.89E-023.42E+001.38E+024.49E-041.88E-026.17E-011.79E+01 + 23L2 65.002.52E-041.58E-027.07E-012.24E+011.93E-046.32E-031.63E-013.75E+00 + 23L2 80.001.13E-045.64E-032.05E-015.35E+009.90E-052.67E-035.73E-021.09E+00 + 23L2 100.004.76E-051.87E-035.46E-021.16E+004.84E-051.06E-031.87E-022.93E-01 + 23L2 120.002.36E-057.67E-041.88E-023.39E-012.70E-055.03E-047.54E-031.01E-01 + 23L2 150.001.01E-052.60E-045.16E-037.65E-021.32E-052.03E-042.50E-032.76E-02 + 23L2 200.003.41E-066.62E-051.01E-031.16E-025.32E-066.35E-056.16E-045.35E-03 + 23L2 300.007.75E-071.02E-051.09E-048.97E-041.49E-061.28E-058.98E-055.66E-04 + 23L2 450.001.89E-071.74E-061.32E-057.94E-054.29E-072.71E-061.41E-056.62E-05 + 23L2 650.005.72E-083.86E-072.19E-061.02E-051.43E-077.00E-072.86E-061.05E-05 + 23L21000.001.57E-087.66E-083.20E-071.13E-064.10E-081.55E-074.93E-071.42E-06 + 23L22000.002.62E-098.10E-092.23E-085.46E-086.31E-091.69E-083.90E-088.26E-08 + 23L3 15.001.27E-014.66E+019.14E+031.11E+069.01E-036.61E+001.83E+032.48E+05 + 23L3 17.007.95E-022.46E+014.23E+034.60E+056.09E-033.58E+008.46E+021.02E+05 + 23L3 20.004.31E-021.07E+011.56E+031.46E+053.66E-031.62E+003.14E+023.23E+04 + 23L3 25.001.85E-023.42E+003.93E+022.99E+041.82E-035.47E-018.12E+016.76E+03 + 23L3 32.007.16E-039.67E-018.58E+015.18E+038.38E-041.66E-011.85E+011.22E+03 + 23L3 40.003.02E-033.08E-012.16E+011.06E+034.16E-045.70E-024.95E+002.63E+02 + 23L3 50.001.27E-039.83E-025.46E+002.16E+022.06E-041.98E-021.34E+005.76E+01 + 23L3 65.004.56E-042.57E-021.08E+003.35E+019.02E-055.76E-032.94E-019.87E+00 + 23L3 80.002.03E-048.90E-033.02E-017.66E+004.70E-052.19E-038.96E-022.49E+00 + 23L3 100.008.55E-052.86E-037.68E-021.58E+002.34E-057.86E-042.54E-025.75E-01 + 23L3 120.004.23E-051.14E-032.52E-024.37E-011.33E-053.43E-049.19E-031.76E-01 + 23L3 150.001.81E-053.72E-046.51E-039.14E-026.68E-061.26E-042.69E-034.23E-02 + 23L3 200.006.18E-068.97E-051.16E-031.24E-022.79E-063.54E-055.66E-046.97E-03 + 23L3 300.001.45E-061.29E-051.08E-047.99E-048.40E-076.27E-066.69E-055.91E-04 + 23L3 450.003.76E-072.07E-061.13E-055.79E-052.68E-071.21E-068.60E-065.56E-05 + 23L3 650.001.24E-074.51E-071.70E-066.31E-061.02E-073.02E-071.47E-067.22E-06 + 23L31000.003.97E-089.41E-082.36E-076.22E-073.60E-087.10E-082.17E-077.69E-07 + 23L32000.008.93E-091.30E-081.97E-083.22E-088.72E-091.12E-081.74E-083.40E-08 + 24K1 15.009.40E+003.71E+021.14E+043.38E+054.93E+003.03E+021.21E+044.49E+05 + 24K1 17.006.58E+002.50E+027.47E+032.16E+053.41E+001.85E+027.03E+032.51E+05 + 24K1 20.004.12E+001.46E+024.13E+031.13E+052.12E+009.83E+013.42E+031.14E+05 + 24K1 25.002.15E+006.77E+011.73E+034.25E+041.11E+004.14E+011.25E+033.68E+04 + 24K1 32.001.03E+002.80E+016.20E+021.32E+045.44E-011.61E+014.08E+021.02E+04 + 24K1 40.005.28E-011.24E+012.36E+024.35E+032.88E-016.91E+001.48E+023.13E+03 + 24K1 50.002.69E-015.36E+008.78E+011.38E+031.54E-013.00E+005.37E+019.56E+02 + 24K1 65.001.20E-011.98E+002.67E+013.46E+027.50E-021.15E+001.65E+012.38E+02 + 24K1 80.006.36E-028.90E-011.03E+011.14E+024.27E-025.43E-016.58E+007.98E+01 + 24K1 100.003.19E-023.76E-013.67E+003.42E+012.36E-022.47E-012.48E+002.50E+01 + 24K1 120.001.82E-021.85E-011.57E+001.27E+011.47E-021.31E-011.13E+009.81E+00 + 24K1 150.009.15E-037.83E-025.61E-013.82E+008.26E-036.15E-024.42E-013.19E+00 + 24K1 200.003.81E-032.60E-021.50E-018.23E-014.01E-032.38E-021.36E-017.80E-01 + 24K1 300.001.15E-035.76E-032.47E-021.01E-011.51E-036.65E-032.81E-021.18E-01 + 24K1 450.003.79E-041.41E-034.59E-031.44E-025.93E-042.01E-036.44E-032.04E-02 + 24K1 650.001.53E-044.47E-041.17E-032.94E-032.66E-047.29E-041.88E-034.76E-03 + 24K11000.006.15E-051.42E-042.96E-046.00E-041.10E-042.45E-045.09E-041.03E-03 + 24K12000.001.92E-053.30E-055.32E-058.33E-053.08E-055.24E-058.43E-051.32E-04 + 24K16000.004.70E-065.96E-067.45E-069.19E-065.81E-067.45E-069.33E-061.15E-05 + 24L1 15.007.17E-012.71E+017.30E+021.51E+044.58E-013.77E+012.36E+031.42E+05 + 24L1 17.005.09E-011.84E+014.93E+021.09E+043.17E-012.24E+011.24E+036.70E+04 + 24L1 20.003.24E-011.10E+012.82E+026.40E+031.97E-011.15E+015.46E+022.54E+04 + 24L1 25.001.73E-015.21E+001.23E+022.68E+031.03E-014.64E+001.79E+026.77E+03 + 24L1 32.008.51E-022.21E+004.62E+019.03E+025.06E-021.73E+005.28E+011.59E+03 + 24L1 40.004.43E-029.98E-011.82E+013.14E+022.69E-027.25E-011.79E+014.38E+02 + 24L1 50.002.29E-024.42E-016.96E+001.04E+021.44E-023.08E-016.15E+001.23E+02 + 24L1 65.001.04E-021.66E-012.18E+002.72E+016.97E-031.15E-011.80E+002.82E+01 + 24L1 80.005.55E-037.60E-028.57E-019.20E+003.97E-035.36E-026.93E-019.01E+00 + 24L1 100.002.81E-033.25E-023.11E-012.83E+002.19E-032.40E-022.54E-012.71E+00 + 24L1 120.001.61E-031.62E-021.35E-011.07E+001.36E-031.26E-021.14E-011.03E+00 + 24L1 150.008.17E-046.90E-034.87E-023.27E-017.64E-045.87E-034.37E-023.27E-01 + 24L1 200.003.43E-042.32E-031.32E-027.18E-023.71E-042.25E-031.32E-027.77E-02 + 24L1 300.001.05E-045.19E-042.22E-039.03E-031.39E-046.23E-042.68E-031.14E-02 + 24L1 450.003.45E-051.28E-044.16E-041.30E-035.46E-051.87E-046.06E-041.94E-03 + 24L1 650.001.40E-054.08E-051.06E-042.68E-042.45E-056.76E-051.76E-044.49E-04 + 24L11000.005.62E-061.29E-052.72E-055.51E-051.01E-052.26E-054.73E-059.66E-05 + 24L12000.001.76E-063.02E-064.88E-067.66E-062.82E-064.82E-067.78E-061.22E-05 + 24L2 15.008.11E-023.17E+016.34E+037.71E+052.65E-023.54E+003.40E+022.86E+04 + 24L2 17.005.11E-021.69E+012.96E+033.22E+051.78E-022.11E+001.81E+021.37E+04 + 24L2 20.002.79E-027.42E+001.10E+031.03E+051.06E-021.07E+007.99E+015.22E+03 + 24L2 25.001.21E-022.41E+002.84E+022.17E+045.21E-034.24E-012.59E+011.39E+03 + 24L2 32.004.73E-036.94E-016.36E+013.87E+032.37E-031.52E-017.42E+003.19E+02 + 24L2 40.002.02E-032.26E-011.65E+018.15E+021.16E-036.00E-022.39E+008.44E+01 + 24L2 50.008.55E-047.37E-024.29E+001.72E+025.67E-042.37E-027.74E-012.23E+01 + 24L2 65.003.11E-041.99E-028.89E-012.80E+012.44E-047.99E-032.05E-014.69E+00 + 24L2 80.001.39E-047.08E-032.58E-016.72E+001.26E-043.38E-037.22E-021.37E+00 + 24L2 100.005.90E-052.36E-036.90E-021.47E+006.14E-051.35E-032.36E-023.68E-01 + 24L2 120.002.93E-059.66E-042.37E-024.28E-013.43E-056.39E-049.54E-031.27E-01 + 24L2 150.001.25E-053.29E-046.53E-039.68E-021.69E-052.58E-043.17E-033.49E-02 + 24L2 200.004.26E-068.38E-051.28E-031.48E-026.79E-068.10E-057.83E-046.78E-03 + 24L2 300.009.74E-071.30E-051.38E-041.14E-031.91E-061.64E-051.15E-047.20E-04 + 24L2 450.002.39E-072.22E-061.68E-051.01E-045.50E-073.47E-061.81E-058.46E-05 + 24L2 650.007.23E-084.93E-072.81E-061.31E-051.83E-079.00E-073.67E-061.35E-05 + 24L21000.001.99E-089.78E-084.10E-071.45E-065.26E-082.00E-076.35E-071.83E-06 + 24L22000.003.32E-091.03E-082.86E-087.02E-088.09E-092.17E-085.02E-081.07E-07 + 24L3 15.001.51E-015.74E+011.13E+041.36E+061.11E-028.76E+002.48E+033.35E+05 + 24L3 17.009.49E-023.03E+015.24E+035.64E+057.51E-034.74E+001.14E+031.38E+05 + 24L3 20.005.16E-021.32E+011.93E+031.79E+054.52E-032.14E+004.23E+024.35E+04 + 24L3 25.002.22E-024.23E+004.88E+023.69E+042.25E-037.20E-011.09E+029.06E+03 + 24L3 32.008.66E-031.20E+001.07E+026.40E+031.04E-032.18E-012.48E+011.63E+03 + 24L3 40.003.67E-033.83E-012.69E+011.31E+035.15E-047.47E-026.58E+003.49E+02 + 24L3 50.001.55E-031.22E-016.81E+002.69E+022.55E-042.58E-021.77E+007.63E+01 + 24L3 65.005.58E-043.20E-021.35E+004.16E+011.12E-047.50E-033.87E-011.30E+01 + 24L3 80.002.49E-041.11E-023.77E-019.55E+005.85E-052.85E-031.18E-013.27E+00 + 24L3 100.001.05E-043.57E-039.61E-021.97E+002.92E-051.02E-033.33E-027.54E-01 + 24L3 120.005.22E-051.42E-033.16E-025.46E-011.66E-054.43E-041.20E-022.31E-01 + 24L3 150.002.24E-054.65E-048.17E-031.15E-018.34E-061.62E-043.50E-035.53E-02 + 24L3 200.007.66E-061.12E-041.46E-031.56E-023.48E-064.55E-057.36E-049.08E-03 + 24L3 300.001.80E-061.62E-051.36E-041.01E-031.05E-068.01E-068.65E-057.68E-04 + 24L3 450.004.69E-072.59E-061.42E-057.30E-053.35E-071.54E-061.11E-057.19E-05 + 24L3 650.001.55E-075.67E-072.14E-067.96E-061.27E-073.83E-071.88E-069.32E-06 + 24L31000.004.95E-081.18E-072.97E-077.84E-074.49E-088.93E-082.76E-079.88E-07 + 24L32000.001.11E-081.62E-082.47E-084.04E-081.09E-081.40E-082.19E-084.32E-08 + 25K1 15.001.01E+013.72E+021.06E+042.91E+055.84E+003.58E+021.36E+044.70E+05 + 25K1 17.007.07E+002.54E+027.12E+031.93E+054.04E+002.19E+027.95E+032.68E+05 + 25K1 20.004.44E+001.50E+024.04E+031.05E+052.50E+001.16E+023.90E+031.24E+05 + 25K1 25.002.32E+007.06E+011.73E+034.09E+041.31E+004.88E+011.44E+034.09E+04 + 25K1 32.001.12E+002.96E+016.34E+021.31E+046.40E-011.89E+014.70E+021.15E+04 + 25K1 40.005.75E-011.31E+012.45E+024.39E+033.39E-018.10E+001.71E+023.55E+03 + 25K1 50.002.93E-015.74E+009.20E+011.42E+031.81E-013.52E+006.21E+011.09E+03 + 25K1 65.001.32E-012.13E+002.83E+013.60E+028.76E-021.34E+001.91E+012.72E+02 + 25K1 80.006.98E-029.64E-011.10E+011.20E+024.98E-026.33E-017.60E+009.14E+01 + 25K1 100.003.52E-024.09E-013.94E+003.62E+012.75E-022.87E-012.86E+002.86E+01 + 25K1 120.002.01E-022.02E-011.70E+001.36E+011.70E-021.52E-011.31E+001.12E+01 + 25K1 150.001.01E-028.58E-026.08E-014.10E+009.57E-037.12E-025.10E-013.66E+00 + 25K1 200.004.23E-032.86E-021.64E-018.91E-014.64E-032.75E-021.57E-018.94E-01 + 25K1 300.001.29E-036.37E-032.72E-021.11E-011.73E-037.65E-033.22E-021.35E-01 + 25K1 450.004.23E-041.56E-035.09E-031.59E-026.79E-042.30E-037.38E-032.34E-02 + 25K1 650.001.71E-044.99E-041.30E-033.27E-033.04E-048.35E-042.15E-035.45E-03 + 25K11000.006.90E-051.59E-043.32E-046.72E-041.25E-042.80E-045.82E-041.18E-03 + 25K12000.002.15E-053.71E-055.99E-059.39E-053.48E-055.95E-059.60E-051.50E-04 + 25K16000.005.25E-066.67E-068.36E-061.03E-056.50E-068.38E-061.05E-051.30E-05 + 25L1 15.007.71E-012.74E+016.70E+021.15E+045.50E-014.63E+012.89E+031.73E+05 + 25L1 17.005.49E-011.88E+014.64E+029.04E+033.81E-012.75E+011.52E+038.14E+04 + 25L1 20.003.51E-011.13E+012.74E+025.65E+032.36E-011.40E+016.66E+023.08E+04 + 25L1 25.001.88E-015.45E+001.23E+022.50E+031.23E-015.64E+002.17E+028.17E+03 + 25L1 32.009.29E-022.34E+004.71E+018.80E+026.05E-022.10E+006.37E+011.92E+03 + 25L1 40.004.86E-021.07E+001.89E+013.14E+023.20E-028.72E-012.15E+015.26E+02 + 25L1 50.002.52E-024.76E-017.31E+001.06E+021.71E-023.69E-017.36E+001.47E+02 + 25L1 65.001.15E-021.81E-012.32E+002.83E+018.26E-031.37E-012.14E+003.36E+01 + 25L1 80.006.16E-038.29E-029.19E-019.68E+004.70E-036.36E-028.23E-011.07E+01 + 25L1 100.003.13E-033.56E-023.36E-013.01E+002.58E-032.84E-023.01E-013.20E+00 + 25L1 120.001.80E-031.78E-021.47E-011.15E+001.60E-031.49E-021.35E-011.22E+00 + 25L1 150.009.14E-047.63E-035.33E-023.54E-018.98E-046.92E-035.15E-023.84E-01 + 25L1 200.003.85E-042.58E-031.46E-027.84E-024.35E-042.65E-031.55E-029.11E-02 + 25L1 300.001.18E-045.80E-042.46E-039.97E-031.62E-047.28E-043.12E-031.33E-02 + 25L1 450.003.90E-051.44E-044.66E-041.45E-036.35E-052.18E-047.06E-042.26E-03 + 25L1 650.001.58E-054.61E-051.20E-043.02E-042.83E-057.86E-052.04E-045.21E-04 + 25L11000.006.38E-061.47E-053.08E-056.25E-051.17E-052.62E-055.49E-051.12E-04 + 25L12000.001.99E-063.44E-065.57E-068.75E-063.23E-065.55E-068.98E-061.41E-05 + 25L2 15.009.56E-023.89E+017.80E+039.41E+053.28E-024.37E+004.16E+023.46E+04 + 25L2 17.006.04E-022.07E+013.65E+033.93E+052.21E-022.60E+002.22E+021.66E+04 + 25L2 20.003.31E-029.11E+001.36E+031.27E+051.32E-021.33E+009.81E+016.35E+03 + 25L2 25.001.44E-022.96E+003.51E+022.67E+046.47E-035.26E-013.19E+011.70E+03 + 25L2 32.005.69E-038.54E-017.84E+014.74E+032.95E-031.88E-019.11E+003.89E+02 + 25L2 40.002.43E-032.78E-012.04E+011.01E+031.44E-037.47E-022.96E+001.04E+02 + 25L2 50.001.03E-039.10E-025.32E+002.13E+027.07E-042.96E-029.59E-012.75E+01 + 25L2 65.003.78E-042.46E-021.10E+003.48E+013.06E-049.98E-032.55E-015.80E+00 + 25L2 80.001.70E-048.78E-033.21E-018.36E+001.57E-044.23E-039.00E-021.70E+00 + 25L2 100.007.22E-052.93E-038.61E-021.83E+007.71E-051.69E-032.95E-024.58E-01 + 25L2 120.003.60E-051.20E-032.97E-025.35E-014.31E-058.02E-041.19E-021.58E-01 + 25L2 150.001.54E-054.10E-048.18E-031.21E-012.12E-053.24E-043.98E-034.36E-02 + 25L2 200.005.27E-061.05E-041.60E-031.85E-028.56E-061.02E-049.84E-048.50E-03 + 25L2 300.001.21E-061.63E-051.74E-041.44E-032.41E-062.07E-051.44E-049.07E-04 + 25L2 450.002.98E-072.79E-062.12E-051.28E-046.96E-074.40E-062.28E-051.07E-04 + 25L2 650.009.03E-086.21E-073.55E-061.65E-052.32E-071.14E-064.65E-061.71E-05 + 25L21000.002.50E-081.23E-075.20E-071.84E-066.67E-082.54E-078.07E-072.33E-06 + 25L22000.004.16E-091.31E-083.62E-088.93E-081.02E-082.77E-086.40E-081.36E-07 + 25L3 15.001.77E-017.00E+011.38E+041.66E+061.35E-021.15E+013.32E+034.50E+05 + 25L3 17.001.12E-013.70E+016.42E+036.87E+059.15E-036.19E+001.53E+031.84E+05 + 25L3 20.006.10E-021.62E+012.36E+032.18E+055.51E-032.79E+005.64E+025.80E+04 + 25L3 25.002.64E-025.18E+005.99E+024.51E+042.75E-039.38E-011.45E+021.20E+04 + 25L3 32.001.03E-021.47E+001.31E+027.84E+031.27E-032.83E-013.27E+012.15E+03 + 25L3 40.004.39E-034.69E-013.32E+011.61E+036.30E-049.68E-028.66E+004.60E+02 + 25L3 50.001.86E-031.50E-018.39E+003.30E+023.13E-043.34E-022.33E+001.00E+02 + 25L3 65.006.74E-043.93E-021.67E+005.13E+011.38E-049.66E-035.05E-011.70E+01 + 25L3 80.003.02E-041.37E-024.67E-011.18E+017.19E-053.66E-031.53E-014.26E+00 + 25L3 100.001.28E-044.41E-031.19E-012.44E+003.59E-051.30E-034.32E-029.79E-01 + 25L3 120.006.36E-051.76E-033.92E-026.76E-012.04E-055.66E-041.55E-022.99E-01 + 25L3 150.002.73E-055.75E-041.01E-021.42E-011.03E-052.07E-044.52E-037.15E-02 + 25L3 200.009.38E-061.39E-041.81E-031.94E-024.29E-065.77E-059.45E-041.17E-02 + 25L3 300.002.21E-062.00E-051.69E-041.25E-031.30E-061.01E-051.11E-049.85E-04 + 25L3 450.005.78E-073.22E-061.77E-059.09E-054.14E-071.93E-061.41E-059.21E-05 + 25L3 650.001.91E-077.03E-072.66E-069.92E-061.57E-074.79E-072.39E-061.19E-05 + 25L31000.006.10E-081.46E-073.70E-079.77E-075.54E-081.11E-073.47E-071.25E-06 + 25L32000.001.37E-082.00E-083.06E-085.02E-081.34E-081.73E-082.72E-085.41E-08 + 26K1 15.001.08E+013.70E+029.65E+032.42E+056.89E+004.21E+021.50E+044.79E+05 + 26K1 17.007.56E+002.55E+026.68E+031.68E+054.76E+002.57E+028.87E+032.81E+05 + 26K1 20.004.76E+001.53E+023.89E+039.54E+042.95E+001.36E+024.39E+031.33E+05 + 26K1 25.002.50E+007.31E+011.71E+033.88E+041.53E+005.72E+011.63E+034.49E+04 + 26K1 32.001.21E+003.10E+016.42E+021.28E+047.50E-012.21E+015.38E+021.28E+04 + 26K1 40.006.24E-011.39E+012.52E+024.40E+033.96E-019.46E+001.96E+023.99E+03 + 26K1 50.003.19E-016.11E+009.57E+011.44E+032.11E-014.09E+007.14E+011.23E+03 + 26K1 65.001.44E-012.29E+002.98E+013.72E+021.02E-011.56E+002.20E+013.09E+02 + 26K1 80.007.64E-021.04E+001.16E+011.25E+025.79E-027.33E-018.74E+001.04E+02 + 26K1 100.003.86E-024.43E-014.20E+003.81E+013.18E-023.32E-013.29E+003.27E+01 + 26K1 120.002.20E-022.20E-011.82E+001.44E+011.97E-021.76E-011.50E+001.28E+01 + 26K1 150.001.11E-029.35E-026.55E-014.38E+001.10E-028.20E-025.85E-014.17E+00 + 26K1 200.004.67E-033.13E-021.78E-019.58E-015.33E-033.16E-021.80E-011.02E+00 + 26K1 300.001.42E-037.01E-032.98E-021.20E-011.99E-038.77E-033.69E-021.54E-01 + 26K1 450.004.71E-041.73E-035.61E-031.74E-027.75E-042.63E-038.42E-032.66E-02 + 26K1 650.001.91E-045.55E-041.44E-033.61E-033.45E-049.53E-042.45E-036.20E-03 + 26K11000.007.70E-051.77E-043.71E-047.50E-041.42E-043.18E-046.63E-041.35E-03 + 26K12000.002.40E-054.15E-056.72E-051.05E-043.91E-056.74E-051.09E-041.71E-04 + 26K16000.005.83E-067.44E-069.35E-061.16E-057.24E-069.39E-061.18E-051.47E-05 + 26L1 15.008.24E-012.75E+016.01E+028.21E+036.57E-015.65E+013.52E+032.09E+05 + 26L1 17.005.89E-011.91E+014.30E+027.13E+034.54E-013.34E+011.85E+039.81E+04 + 26L1 20.003.78E-011.16E+012.61E+024.84E+032.82E-011.70E+018.06E+023.70E+04 + 26L1 25.002.03E-015.66E+001.21E+022.29E+031.47E-016.81E+002.61E+029.80E+03 + 26L1 32.001.01E-012.46E+004.75E+018.45E+027.19E-022.52E+007.65E+012.29E+03 + 26L1 40.005.30E-021.13E+001.94E+013.11E+023.80E-021.04E+002.56E+016.26E+02 + 26L1 50.002.76E-025.09E-017.61E+001.08E+022.02E-024.39E-018.76E+001.74E+02 + 26L1 65.001.27E-021.95E-012.45E+002.92E+019.75E-031.62E-012.54E+003.97E+01 + 26L1 80.006.79E-038.99E-029.78E-011.01E+015.53E-037.52E-029.72E-011.26E+01 + 26L1 100.003.46E-033.89E-023.60E-013.18E+003.03E-033.35E-023.54E-013.76E+00 + 26L1 120.002.00E-031.95E-021.58E-011.22E+001.87E-031.76E-021.58E-011.43E+00 + 26L1 150.001.02E-038.40E-035.79E-023.80E-011.05E-038.11E-036.02E-024.49E-01 + 26L1 200.004.30E-042.85E-031.60E-028.50E-025.07E-043.09E-031.81E-021.06E-01 + 26L1 300.001.32E-046.46E-042.72E-031.09E-021.88E-048.47E-043.63E-031.55E-02 + 26L1 450.004.39E-051.61E-045.20E-041.61E-037.34E-052.52E-048.18E-042.62E-03 + 26L1 650.001.79E-055.19E-051.35E-043.38E-043.26E-059.08E-052.36E-046.03E-04 + 26L11000.007.21E-061.66E-053.49E-057.06E-051.34E-053.02E-056.33E-051.29E-04 + 26L12000.002.25E-063.90E-066.33E-069.95E-063.68E-066.36E-061.03E-051.62E-05 + 26L2 15.001.12E-014.72E+019.50E+031.14E+064.03E-025.35E+005.04E+024.13E+04 + 26L2 17.007.09E-022.51E+014.45E+034.76E+052.71E-023.19E+002.69E+021.99E+04 + 26L2 20.003.90E-021.11E+011.66E+031.53E+051.62E-021.63E+001.19E+027.64E+03 + 26L2 25.001.71E-023.61E+004.29E+023.24E+047.97E-036.46E-013.88E+012.05E+03 + 26L2 32.006.76E-031.04E+009.63E+015.81E+033.63E-032.32E-011.12E+014.75E+02 + 26L2 40.002.90E-033.41E-012.50E+011.23E+031.78E-039.21E-023.63E+001.26E+02 + 26L2 50.001.24E-031.12E-016.54E+002.62E+028.76E-043.65E-021.18E+003.36E+01 + 26L2 65.004.55E-043.02E-021.36E+004.28E+013.79E-041.24E-023.15E-017.12E+00 + 26L2 80.002.06E-041.08E-023.97E-011.03E+011.95E-045.25E-031.11E-012.09E+00 + 26L2 100.008.76E-053.61E-031.06E-012.26E+009.59E-052.10E-033.65E-025.65E-01 + 26L2 120.004.38E-051.49E-033.67E-026.61E-015.37E-059.98E-041.48E-021.96E-01 + 26L2 150.001.88E-055.07E-041.02E-021.50E-012.65E-054.04E-044.94E-035.40E-02 + 26L2 200.006.45E-061.30E-041.99E-032.30E-021.07E-051.27E-041.23E-031.06E-02 + 26L2 300.001.49E-062.03E-052.17E-041.79E-033.02E-062.59E-051.81E-041.13E-03 + 26L2 450.003.68E-073.47E-062.65E-051.60E-048.73E-075.52E-062.86E-051.34E-04 + 26L2 650.001.12E-077.76E-074.45E-062.07E-052.91E-071.44E-065.85E-062.15E-05 + 26L21000.003.10E-081.54E-076.54E-072.32E-068.39E-083.20E-071.02E-062.93E-06 + 26L22000.005.16E-091.63E-084.56E-081.13E-071.28E-083.49E-088.09E-081.72E-07 + 26L3 15.002.07E-018.47E+011.68E+041.99E+061.63E-021.48E+014.40E+035.95E+05 + 26L3 17.001.31E-014.48E+017.78E+038.25E+051.11E-028.00E+002.02E+032.43E+05 + 26L3 20.007.16E-021.96E+012.87E+032.63E+056.67E-033.60E+007.43E+027.63E+04 + 26L3 25.003.11E-026.28E+007.29E+025.44E+043.33E-031.21E+001.90E+021.58E+04 + 26L3 32.001.22E-021.78E+001.60E+029.49E+031.54E-033.64E-014.28E+012.80E+03 + 26L3 40.005.22E-035.70E-014.04E+011.95E+037.65E-041.24E-011.13E+015.98E+02 + 26L3 50.002.22E-031.83E-011.02E+014.02E+023.81E-044.27E-023.02E+001.30E+02 + 26L3 65.008.08E-044.80E-022.04E+006.26E+011.68E-041.23E-026.53E-012.20E+01 + 26L3 80.003.63E-041.67E-025.71E-011.44E+018.77E-054.65E-031.97E-015.49E+00 + 26L3 100.001.54E-045.39E-031.46E-012.98E+004.38E-051.65E-035.55E-021.26E+00 + 26L3 120.007.68E-052.15E-034.81E-028.28E-012.49E-057.17E-041.99E-023.84E-01 + 26L3 150.003.31E-057.05E-041.25E-021.74E-011.26E-052.61E-045.77E-039.15E-02 + 26L3 200.001.14E-051.71E-042.23E-032.38E-025.25E-067.26E-051.20E-031.49E-02 + 26L3 300.002.70E-062.46E-052.09E-041.54E-031.59E-061.27E-051.40E-041.25E-03 + 26L3 450.007.06E-073.96E-062.19E-051.12E-045.07E-072.41E-061.78E-051.17E-04 + 26L3 650.002.34E-078.65E-073.28E-061.23E-051.92E-075.93E-073.00E-061.50E-05 + 26L31000.007.46E-081.80E-074.56E-071.21E-066.78E-081.37E-074.34E-071.58E-06 + 26L32000.001.67E-082.45E-083.76E-086.18E-081.64E-082.12E-083.36E-086.73E-08 + 27K1 15.001.14E+013.63E+028.61E+031.95E+058.07E+004.92E+021.64E+044.80E+05 + 27K1 17.008.05E+002.55E+026.17E+031.43E+055.57E+003.01E+029.81E+032.90E+05 + 27K1 20.005.09E+001.55E+023.71E+038.55E+043.45E+001.59E+024.92E+031.42E+05 + 27K1 25.002.68E+007.53E+011.69E+033.64E+041.79E+006.67E+011.85E+034.89E+04 + 27K1 32.001.30E+003.23E+016.46E+021.25E+048.75E-012.57E+016.12E+021.42E+04 + 27K1 40.006.74E-011.46E+012.58E+024.37E+034.62E-011.10E+012.24E+024.47E+03 + 27K1 50.003.46E-016.48E+009.91E+011.46E+032.45E-014.75E+008.17E+011.39E+03 + 27K1 65.001.57E-012.44E+003.12E+013.82E+021.18E-011.80E+002.52E+013.50E+02 + 27K1 80.008.32E-021.11E+001.23E+011.30E+026.69E-028.46E-011.00E+011.18E+02 + 27K1 100.004.21E-024.77E-014.46E+003.99E+013.67E-023.82E-013.76E+003.71E+01 + 27K1 120.002.41E-022.38E-011.94E+001.52E+012.26E-022.02E-011.72E+001.46E+01 + 27K1 150.001.22E-021.01E-017.04E-014.65E+001.27E-029.41E-026.68E-014.74E+00 + 27K1 200.005.14E-033.42E-021.92E-011.03E+006.11E-033.62E-022.05E-011.16E+00 + 27K1 300.001.57E-037.69E-033.24E-021.30E-012.27E-031.00E-024.20E-021.75E-01 + 27K1 450.005.21E-041.91E-036.15E-031.90E-028.81E-043.00E-039.58E-033.02E-02 + 27K1 650.002.12E-046.15E-041.59E-033.98E-033.91E-041.08E-032.79E-037.04E-03 + 27K11000.008.55E-051.97E-044.12E-048.32E-041.60E-043.61E-047.52E-041.53E-03 + 27K12000.002.66E-054.62E-057.51E-051.18E-044.38E-057.60E-051.23E-041.93E-04 + 27K16000.006.44E-068.26E-061.04E-051.29E-058.02E-061.05E-051.32E-051.65E-05 + 27L1 15.008.77E-012.73E+015.27E+025.33E+037.80E-016.86E+014.26E+032.51E+05 + 27L1 17.006.28E-011.92E+013.91E+025.34E+035.39E-014.04E+012.23E+031.18E+05 + 27L1 20.004.05E-011.18E+012.46E+024.02E+033.34E-012.05E+019.70E+024.43E+04 + 27L1 25.002.19E-015.84E+001.18E+022.06E+031.74E-018.18E+003.13E+021.17E+04 + 27L1 32.001.09E-012.58E+004.76E+018.02E+028.49E-023.01E+009.13E+012.72E+03 + 27L1 40.005.76E-021.19E+001.97E+013.05E+024.48E-021.24E+003.05E+017.42E+02 + 27L1 50.003.01E-025.41E-017.87E+001.08E+022.38E-025.21E-011.04E+012.06E+02 + 27L1 65.001.39E-022.09E-012.57E+002.99E+011.14E-021.92E-013.00E+004.68E+01 + 27L1 80.007.46E-039.70E-021.03E+001.05E+016.47E-038.86E-021.14E+001.48E+01 + 27L1 100.003.82E-034.22E-023.84E-013.33E+003.55E-033.93E-024.15E-014.40E+00 + 27L1 120.002.20E-032.13E-021.70E-011.29E+002.19E-032.05E-021.85E-011.67E+00 + 27L1 150.001.13E-039.19E-036.26E-024.05E-011.22E-039.46E-037.02E-025.23E-01 + 27L1 200.004.77E-043.13E-031.74E-029.16E-025.88E-043.59E-032.10E-021.23E-01 + 27L1 300.001.47E-047.16E-042.99E-031.19E-022.18E-049.82E-044.21E-031.79E-02 + 27L1 450.004.92E-051.79E-045.76E-041.78E-038.43E-052.91E-049.42E-043.02E-03 + 27L1 650.002.01E-055.81E-051.51E-043.76E-043.74E-051.04E-042.71E-046.93E-04 + 27L11000.008.10E-061.87E-053.92E-057.93E-051.53E-053.46E-057.26E-051.48E-04 + 27L12000.002.52E-064.39E-067.15E-061.13E-054.17E-067.26E-061.18E-051.86E-05 + 27L2 15.001.30E-015.69E+011.15E+041.36E+064.91E-026.49E+006.05E+024.90E+04 + 27L2 17.008.25E-023.03E+015.38E+035.71E+053.30E-023.87E+003.24E+022.36E+04 + 27L2 20.004.56E-021.34E+012.01E+031.85E+051.98E-021.98E+001.44E+029.12E+03 + 27L2 25.002.00E-024.36E+005.20E+023.91E+049.74E-037.87E-014.69E+012.45E+03 + 27L2 32.007.97E-031.26E+001.17E+027.02E+034.45E-032.83E-011.36E+015.71E+02 + 27L2 40.003.44E-034.13E-013.05E+011.49E+032.19E-031.13E-014.41E+001.53E+02 + 27L2 50.001.48E-031.36E-017.98E+003.18E+021.07E-034.48E-021.44E+004.07E+01 + 27L2 65.005.44E-043.68E-021.66E+005.21E+014.66E-041.52E-023.85E-018.65E+00 + 27L2 80.002.46E-041.32E-024.85E-011.26E+012.41E-046.45E-031.36E-012.55E+00 + 27L2 100.001.05E-044.41E-031.31E-012.76E+001.18E-042.59E-034.48E-026.90E-01 + 27L2 120.005.28E-051.82E-034.51E-028.11E-016.64E-051.23E-031.82E-022.39E-01 + 27L2 150.002.28E-056.22E-041.25E-021.84E-013.28E-054.99E-046.09E-036.63E-02 + 27L2 200.007.83E-061.60E-042.46E-032.83E-021.33E-051.58E-041.51E-031.30E-02 + 27L2 300.001.81E-062.50E-052.69E-042.22E-033.75E-063.22E-052.24E-041.40E-03 + 27L2 450.004.50E-074.29E-063.29E-051.99E-041.09E-066.88E-063.56E-051.66E-04 + 27L2 650.001.37E-079.61E-075.53E-062.58E-053.63E-071.79E-067.29E-062.67E-05 + 27L21000.003.81E-081.92E-078.14E-072.89E-061.05E-074.00E-071.27E-063.66E-06 + 27L22000.006.35E-092.03E-085.68E-081.41E-071.60E-084.36E-081.01E-072.15E-07 + 27L3 15.002.39E-011.02E+022.02E+042.38E+061.96E-021.90E+015.79E+037.83E+05 + 27L3 17.001.51E-015.37E+019.38E+039.87E+051.33E-021.03E+012.66E+033.18E+05 + 27L3 20.008.32E-022.35E+013.46E+033.15E+058.00E-034.61E+009.72E+029.98E+04 + 27L3 25.003.63E-027.55E+008.80E+026.53E+043.99E-031.54E+002.47E+022.05E+04 + 27L3 32.001.43E-022.15E+001.93E+021.14E+041.85E-034.65E-015.54E+013.63E+03 + 27L3 40.006.15E-036.88E-014.89E+012.35E+039.21E-041.58E-011.46E+017.73E+02 + 27L3 50.002.62E-032.21E-011.24E+014.85E+024.59E-045.42E-023.88E+001.67E+02 + 27L3 65.009.58E-045.80E-022.48E+007.57E+012.02E-041.56E-028.37E-012.82E+01 + 27L3 80.004.32E-042.02E-026.94E-011.74E+011.06E-045.87E-032.52E-017.01E+00 + 27L3 100.001.84E-046.53E-031.77E-013.62E+005.30E-052.08E-037.06E-021.60E+00 + 27L3 120.009.19E-052.61E-035.85E-021.01E+003.02E-058.99E-042.53E-024.88E-01 + 27L3 150.003.96E-058.56E-041.52E-022.12E-011.52E-053.27E-047.31E-031.16E-01 + 27L3 200.001.37E-052.08E-042.72E-032.90E-026.37E-069.06E-051.52E-031.88E-02 + 27L3 300.003.26E-063.00E-052.55E-041.88E-031.93E-061.57E-051.76E-041.58E-03 + 27L3 450.008.54E-074.83E-062.67E-051.37E-046.15E-072.97E-062.23E-051.47E-04 + 27L3 650.002.83E-071.05E-064.01E-061.50E-052.33E-077.29E-073.74E-061.88E-05 + 27L31000.009.03E-082.19E-075.57E-071.48E-068.22E-081.67E-075.37E-071.97E-06 + 27L32000.002.02E-082.98E-084.58E-087.54E-081.98E-082.57E-084.10E-088.29E-08 + 28K1 15.001.21E+013.53E+027.51E+031.52E+059.41E+005.72E+021.76E+044.67E+05 + 28K1 17.008.55E+002.52E+025.60E+031.19E+056.50E+003.49E+021.07E+042.94E+05 + 28K1 20.005.41E+001.56E+023.50E+037.52E+044.02E+001.85E+025.45E+031.48E+05 + 28K1 25.002.86E+007.71E+011.64E+033.37E+042.09E+007.74E+012.07E+035.26E+04 + 28K1 32.001.40E+003.35E+016.46E+021.20E+041.02E+002.98E+016.92E+021.55E+04 + 28K1 40.007.25E-011.53E+012.62E+024.31E+035.35E-011.27E+012.54E+024.96E+03 + 28K1 50.003.73E-016.84E+001.02E+021.46E+032.84E-015.48E+009.29E+011.55E+03 + 28K1 65.001.69E-012.59E+003.25E+013.91E+021.36E-012.07E+002.87E+013.94E+02 + 28K1 80.009.03E-021.19E+001.29E+011.34E+027.71E-029.73E-011.14E+011.33E+02 + 28K1 100.004.58E-025.12E-014.72E+004.16E+014.22E-024.38E-014.29E+004.19E+01 + 28K1 120.002.63E-022.56E-012.07E+001.59E+012.60E-022.31E-011.95E+001.65E+01 + 28K1 150.001.34E-021.10E-017.52E-014.91E+001.45E-021.08E-017.60E-015.37E+00 + 28K1 200.005.63E-033.71E-022.06E-011.09E+006.97E-034.13E-022.33E-011.31E+00 + 28K1 300.001.73E-038.39E-033.51E-021.40E-012.58E-031.14E-024.76E-021.98E-01 + 28K1 450.005.75E-042.10E-036.72E-032.07E-029.99E-043.40E-031.09E-023.42E-02 + 28K1 650.002.35E-046.78E-041.75E-034.36E-034.42E-041.23E-033.15E-037.95E-03 + 28K11000.009.47E-052.18E-044.56E-049.20E-041.80E-044.07E-048.49E-041.72E-03 + 28K12000.002.94E-055.13E-058.35E-051.31E-044.89E-058.53E-051.39E-042.18E-04 + 28K16000.007.10E-069.13E-061.16E-051.44E-058.86E-061.16E-051.48E-051.84E-05 + 28L1 15.009.30E-012.69E+014.50E+023.07E+039.20E-018.27E+015.12E+032.99E+05 + 28L1 17.006.68E-011.91E+013.49E+023.73E+036.35E-014.86E+012.68E+031.40E+05 + 28L1 20.004.32E-011.19E+012.28E+023.22E+033.93E-012.46E+011.16E+035.26E+04 + 28L1 25.002.34E-015.99E+001.14E+021.82E+032.05E-019.77E+003.73E+021.39E+04 + 28L1 32.001.18E-012.68E+004.72E+017.51E+029.98E-023.58E+001.08E+023.22E+03 + 28L1 40.006.22E-021.25E+002.00E+012.95E+025.25E-021.47E+003.61E+018.75E+02 + 28L1 50.003.26E-025.73E-018.08E+001.07E+022.79E-026.15E-011.22E+012.42E+02 + 28L1 65.001.51E-022.23E-012.67E+003.04E+011.34E-022.25E-013.52E+005.48E+01 + 28L1 80.008.15E-031.04E-011.09E+001.08E+017.55E-031.04E-011.34E+001.73E+01 + 28L1 100.004.18E-034.55E-024.08E-013.47E+004.12E-034.59E-024.84E-015.13E+00 + 28L1 120.002.42E-032.30E-021.82E-011.36E+002.54E-032.39E-022.15E-011.94E+00 + 28L1 150.001.24E-031.00E-026.73E-024.30E-011.42E-031.10E-028.15E-026.06E-01 + 28L1 200.005.28E-043.43E-031.88E-029.83E-026.79E-044.16E-032.43E-021.42E-01 + 28L1 300.001.64E-047.89E-043.27E-031.30E-022.51E-041.13E-034.85E-032.07E-02 + 28L1 450.005.48E-051.99E-046.36E-041.95E-039.66E-053.34E-041.08E-033.46E-03 + 28L1 650.002.24E-056.48E-051.67E-044.17E-044.27E-051.20E-043.11E-047.94E-04 + 28L11000.009.07E-062.09E-054.39E-058.87E-051.74E-053.95E-058.30E-051.70E-04 + 28L12000.002.82E-064.93E-068.04E-061.27E-054.71E-068.24E-061.34E-052.12E-05 + 28L2 15.001.49E-016.80E+011.38E+041.62E+065.93E-027.81E+007.20E+025.76E+04 + 28L2 17.009.52E-023.63E+016.46E+036.80E+054.00E-024.67E+003.87E+022.79E+04 + 28L2 20.005.28E-021.60E+012.41E+032.20E+052.39E-022.39E+001.72E+021.08E+04 + 28L2 25.002.33E-025.23E+006.26E+024.68E+041.18E-029.51E-015.63E+012.92E+03 + 28L2 32.009.32E-031.52E+001.41E+028.42E+035.40E-033.43E-011.63E+016.82E+02 + 28L2 40.004.04E-034.97E-013.68E+011.79E+032.66E-031.37E-015.32E+001.83E+02 + 28L2 50.001.74E-031.63E-019.65E+003.83E+021.31E-035.44E-021.74E+004.89E+01 + 28L2 65.006.44E-044.44E-022.02E+006.30E+015.69E-041.85E-024.66E-011.04E+01 + 28L2 80.002.93E-041.60E-025.89E-011.52E+012.94E-047.87E-031.65E-013.08E+00 + 28L2 100.001.26E-045.35E-031.59E-013.35E+001.45E-043.16E-035.45E-028.37E-01 + 28L2 120.006.31E-052.21E-035.50E-029.86E-018.13E-051.51E-032.22E-022.91E-01 + 28L2 150.002.73E-057.56E-041.52E-022.25E-014.02E-056.12E-047.44E-038.07E-02 + 28L2 200.009.43E-061.95E-043.01E-033.46E-021.63E-051.94E-041.86E-031.59E-02 + 28L2 300.002.20E-063.06E-053.30E-042.72E-034.63E-063.96E-052.75E-041.71E-03 + 28L2 450.005.47E-075.27E-064.05E-052.44E-041.34E-068.50E-064.39E-052.04E-04 + 28L2 650.001.67E-071.18E-066.83E-063.18E-054.48E-072.22E-069.01E-063.30E-05 + 28L21000.004.65E-082.36E-071.01E-063.58E-061.29E-074.96E-071.58E-064.53E-06 + 28L22000.007.75E-092.49E-087.03E-081.74E-071.97E-085.42E-081.26E-072.67E-07 + 28L3 15.002.74E-011.21E+022.41E+042.80E+062.33E-022.41E+017.54E+031.02E+06 + 28L3 17.001.74E-016.40E+011.12E+041.17E+061.58E-021.30E+013.45E+034.13E+05 + 28L3 20.009.60E-022.80E+014.13E+033.73E+059.52E-035.85E+001.26E+031.29E+05 + 28L3 25.004.21E-029.01E+001.05E+037.76E+044.76E-031.96E+003.19E+022.64E+04 + 28L3 32.001.67E-022.56E+002.31E+021.36E+042.21E-035.87E-017.12E+014.66E+03 + 28L3 40.007.19E-038.23E-015.87E+012.81E+031.10E-031.99E-011.86E+019.88E+02 + 28L3 50.003.08E-032.64E-011.49E+015.80E+025.49E-046.82E-024.95E+002.13E+02 + 28L3 65.001.13E-036.96E-022.98E+009.07E+012.42E-041.96E-021.06E+003.58E+01 + 28L3 80.005.10E-042.43E-028.36E-012.09E+011.27E-047.35E-033.19E-018.89E+00 + 28L3 100.002.18E-047.85E-032.14E-014.35E+006.35E-052.60E-038.92E-022.03E+00 + 28L3 120.001.09E-043.14E-037.06E-021.21E+003.62E-051.12E-033.19E-026.15E-01 + 28L3 150.004.72E-051.03E-031.83E-022.55E-011.83E-054.06E-049.19E-031.46E-01 + 28L3 200.001.64E-052.51E-043.29E-033.51E-027.66E-061.12E-041.90E-032.37E-02 + 28L3 300.003.90E-063.62E-053.09E-042.28E-032.32E-061.93E-052.20E-041.98E-03 + 28L3 450.001.02E-065.84E-063.24E-051.66E-047.41E-073.64E-062.77E-051.83E-04 + 28L3 650.003.40E-071.27E-064.86E-061.82E-052.80E-078.90E-074.62E-062.34E-05 + 28L31000.001.09E-072.64E-076.75E-071.79E-069.88E-082.03E-076.60E-072.44E-06 + 28L32000.002.43E-083.58E-085.52E-089.12E-082.37E-083.09E-084.97E-081.01E-07 + 29K1 15.001.28E+013.40E+026.39E+031.14E+051.09E+016.62E+021.88E+044.44E+05 + 29K1 17.009.04E+002.47E+025.00E+039.64E+047.54E+004.04E+021.16E+042.92E+05 + 29K1 20.005.74E+001.56E+023.26E+036.51E+044.66E+002.14E+026.00E+031.53E+05 + 29K1 25.003.05E+007.85E+011.59E+033.10E+042.42E+008.94E+012.31E+035.62E+04 + 29K1 32.001.50E+003.46E+016.42E+021.15E+041.18E+003.44E+017.79E+021.69E+04 + 29K1 40.007.78E-011.60E+012.65E+024.23E+036.18E-011.46E+012.87E+025.48E+03 + 29K1 50.004.01E-017.18E+001.05E+021.46E+033.27E-016.31E+001.05E+021.73E+03 + 29K1 65.001.83E-012.75E+003.37E+013.97E+021.57E-012.38E+003.25E+014.41E+02 + 29K1 80.009.77E-021.27E+001.35E+011.37E+028.84E-021.11E+001.29E+011.50E+02 + 29K1 100.004.97E-025.47E-014.97E+004.32E+014.83E-025.01E-014.87E+004.72E+01 + 29K1 120.002.86E-022.74E-012.19E+001.66E+012.97E-022.64E-012.22E+001.86E+01 + 29K1 150.001.45E-021.18E-018.01E-015.17E+001.65E-021.23E-018.61E-016.05E+00 + 29K1 200.006.14E-034.01E-022.21E-011.16E+007.93E-034.69E-022.64E-011.48E+00 + 29K1 300.001.89E-039.13E-033.80E-021.50E-012.92E-031.29E-025.38E-022.23E-01 + 29K1 450.006.32E-042.29E-037.31E-032.24E-021.13E-033.85E-031.22E-023.85E-02 + 29K1 650.002.58E-047.45E-041.92E-034.76E-034.97E-041.38E-033.56E-038.96E-03 + 29K11000.001.04E-042.41E-045.03E-041.01E-032.02E-044.58E-049.56E-041.94E-03 + 29K12000.003.24E-055.68E-059.26E-051.46E-045.44E-059.54E-051.55E-042.44E-04 + 29K16000.007.79E-061.01E-051.28E-051.60E-059.75E-061.29E-051.64E-052.05E-05 + 29L1 15.009.82E-012.63E+013.73E+021.59E+031.08E+009.93E+016.13E+033.54E+05 + 29L1 17.007.07E-011.89E+013.05E+022.39E+037.46E-015.83E+013.20E+031.66E+05 + 29L1 20.004.59E-011.20E+012.09E+022.46E+034.61E-012.94E+011.38E+036.23E+04 + 29L1 25.002.50E-016.10E+001.08E+021.57E+032.40E-011.16E+014.43E+021.64E+04 + 29L1 32.001.26E-012.77E+004.65E+016.93E+021.17E-014.24E+001.28E+023.79E+03 + 29L1 40.006.70E-021.31E+002.01E+012.83E+026.14E-021.74E+004.25E+011.03E+03 + 29L1 50.003.53E-026.03E-018.25E+001.06E+023.25E-027.23E-011.44E+012.83E+02 + 29L1 65.001.64E-022.37E-012.77E+003.06E+011.56E-022.64E-014.11E+006.39E+01 + 29L1 80.008.87E-031.11E-011.14E+001.11E+018.76E-031.21E-011.56E+002.01E+01 + 29L1 100.004.57E-034.89E-024.31E-013.60E+004.78E-035.34E-025.63E-015.95E+00 + 29L1 120.002.65E-032.49E-021.93E-011.42E+002.93E-032.77E-022.49E-012.24E+00 + 29L1 150.001.36E-031.08E-027.20E-024.54E-011.63E-031.27E-029.42E-027.00E-01 + 29L1 200.005.81E-043.74E-032.03E-021.05E-017.81E-044.79E-032.80E-021.64E-01 + 29L1 300.001.81E-048.65E-043.57E-031.40E-022.87E-041.30E-035.56E-032.37E-02 + 29L1 450.006.08E-052.20E-046.99E-042.13E-031.10E-043.82E-041.24E-033.96E-03 + 29L1 650.002.49E-057.19E-051.85E-044.60E-044.85E-051.36E-043.55E-049.06E-04 + 29L11000.001.01E-052.34E-054.89E-059.88E-051.96E-054.49E-059.45E-051.93E-04 + 29L12000.003.14E-065.51E-069.01E-061.42E-055.29E-069.32E-061.52E-052.41E-05 + 29L2 15.001.71E-018.09E+011.64E+041.91E+067.12E-029.35E+008.52E+026.73E+04 + 29L2 17.001.09E-014.31E+017.70E+038.04E+054.80E-025.59E+004.58E+023.26E+04 + 29L2 20.006.08E-021.91E+012.88E+032.61E+052.88E-022.86E+002.04E+021.27E+04 + 29L2 25.002.69E-026.23E+007.49E+025.56E+041.42E-021.14E+006.70E+013.44E+03 + 29L2 32.001.08E-021.81E+001.69E+021.00E+046.52E-034.13E-011.95E+018.08E+02 + 29L2 40.004.72E-035.94E-014.42E+012.14E+033.21E-031.65E-016.37E+002.17E+02 + 29L2 50.002.04E-031.96E-011.16E+014.59E+021.58E-036.56E-022.08E+005.84E+01 + 29L2 65.007.58E-045.33E-022.43E+007.56E+016.89E-042.23E-025.61E-011.25E+01 + 29L2 80.003.46E-041.92E-027.11E-011.83E+013.57E-049.54E-031.99E-013.70E+00 + 29L2 100.001.49E-046.44E-031.92E-014.04E+001.76E-043.84E-036.59E-021.01E+00 + 29L2 120.007.50E-052.66E-036.65E-021.19E+009.90E-051.83E-032.68E-023.51E-01 + 29L2 150.003.26E-059.14E-041.85E-022.72E-014.90E-057.45E-049.03E-039.76E-02 + 29L2 200.001.13E-052.36E-043.66E-034.20E-021.99E-052.36E-042.26E-031.93E-02 + 29L2 300.002.64E-063.72E-054.02E-043.31E-035.67E-064.85E-053.36E-042.09E-03 + 29L2 450.006.59E-076.41E-064.95E-052.99E-041.65E-061.04E-055.38E-052.50E-04 + 29L2 650.002.02E-071.44E-068.36E-063.90E-055.51E-072.73E-061.11E-054.05E-05 + 29L21000.005.63E-082.88E-071.23E-064.39E-061.59E-076.11E-071.94E-065.58E-06 + 29L22000.009.39E-093.05E-088.64E-082.15E-072.42E-086.67E-081.55E-073.30E-07 + 29L3 15.003.12E-011.43E+022.86E+043.30E+062.75E-023.04E+019.76E+031.31E+06 + 29L3 17.001.99E-017.58E+011.33E+041.37E+061.86E-021.64E+014.46E+035.32E+05 + 29L3 20.001.10E-013.32E+014.91E+034.40E+051.13E-027.36E+001.62E+031.66E+05 + 29L3 25.004.84E-021.07E+011.25E+039.18E+045.63E-032.46E+004.09E+023.39E+04 + 29L3 32.001.93E-023.04E+002.75E+021.61E+042.61E-037.37E-019.09E+015.95E+03 + 29L3 40.008.34E-039.78E-017.00E+013.34E+031.30E-032.49E-012.37E+011.26E+03 + 29L3 50.003.58E-033.14E-011.78E+016.90E+026.51E-048.52E-026.27E+002.70E+02 + 29L3 65.001.32E-038.29E-023.56E+001.08E+022.88E-042.44E-021.34E+004.52E+01 + 29L3 80.005.98E-042.89E-021.00E+002.50E+011.51E-049.13E-034.02E-011.12E+01 + 29L3 100.002.56E-049.38E-032.56E-015.20E+007.57E-053.22E-031.12E-012.54E+00 + 29L3 120.001.29E-043.75E-038.47E-021.45E+004.32E-051.39E-033.99E-027.71E-01 + 29L3 150.005.57E-051.23E-032.20E-023.06E-012.18E-055.00E-041.15E-021.82E-01 + 29L3 200.001.94E-053.00E-043.95E-034.21E-029.15E-061.38E-042.37E-032.95E-02 + 29L3 300.004.63E-064.35E-053.72E-042.74E-032.77E-062.37E-052.72E-042.45E-03 + 29L3 450.001.22E-067.01E-063.90E-052.00E-048.85E-074.43E-063.41E-052.26E-04 + 29L3 650.004.05E-071.53E-065.86E-062.19E-053.35E-071.08E-065.68E-062.89E-05 + 29L31000.001.29E-073.17E-078.12E-072.16E-061.18E-072.44E-078.05E-072.99E-06 + 29L32000.002.89E-084.28E-086.62E-081.10E-072.83E-083.70E-085.98E-081.23E-07 + 30K1 15.001.34E+013.20E+025.22E+038.01E+041.26E+017.60E+021.95E+044.04E+05 + 30K1 17.009.52E+002.39E+024.34E+037.50E+048.71E+004.65E+021.24E+042.82E+05 + 30K1 20.006.07E+001.55E+022.98E+035.49E+045.38E+002.46E+026.52E+031.55E+05 + 30K1 25.003.24E+007.93E+011.52E+032.79E+042.79E+001.03E+022.55E+035.91E+04 + 30K1 32.001.59E+003.56E+016.32E+021.08E+041.36E+003.95E+018.69E+021.83E+04 + 30K1 40.008.31E-011.66E+012.66E+024.11E+037.11E-011.68E+013.22E+025.99E+03 + 30K1 50.004.30E-017.51E+001.06E+021.45E+033.76E-017.22E+001.19E+021.91E+03 + 30K1 65.001.97E-012.89E+003.48E+014.01E+021.80E-012.72E+003.67E+014.90E+02 + 30K1 80.001.05E-011.34E+001.40E+011.40E+021.01E-011.27E+001.46E+011.67E+02 + 30K1 100.005.36E-025.82E-015.21E+004.46E+015.51E-025.70E-015.49E+005.28E+01 + 30K1 120.003.09E-022.93E-012.31E+001.73E+013.38E-023.00E-012.50E+002.08E+01 + 30K1 150.001.58E-021.27E-018.49E-015.42E+001.88E-021.39E-019.72E-016.78E+00 + 30K1 200.006.68E-034.32E-022.36E-011.23E+008.99E-035.31E-022.97E-011.66E+00 + 30K1 300.002.07E-039.90E-034.08E-021.61E-013.30E-031.46E-026.06E-022.50E-01 + 30K1 450.006.93E-042.50E-037.93E-032.42E-021.27E-034.33E-031.38E-024.32E-02 + 30K1 650.002.84E-048.16E-042.10E-035.19E-035.57E-041.55E-033.99E-031.00E-02 + 30K11000.001.15E-042.65E-045.53E-041.11E-032.25E-045.13E-041.07E-032.17E-03 + 30K12000.003.56E-056.26E-051.02E-041.61E-046.03E-051.06E-041.74E-042.73E-04 + 30K16000.008.52E-061.10E-051.41E-051.76E-051.07E-051.42E-051.82E-052.27E-05 + 30L1 15.001.03E+002.55E+012.98E+021.04E+031.26E+001.19E+027.29E+034.18E+05 + 30L1 17.007.46E-011.86E+012.59E+021.40E+038.71E-016.94E+013.80E+031.95E+05 + 30L1 20.004.85E-011.19E+011.88E+021.78E+035.39E-013.49E+011.64E+037.32E+04 + 30L1 25.002.66E-016.18E+001.02E+021.31E+032.79E-011.38E+015.23E+021.92E+04 + 30L1 32.001.35E-012.84E+004.53E+016.29E+021.36E-015.00E+001.51E+024.44E+03 + 30L1 40.007.18E-021.36E+002.00E+012.69E+027.13E-022.04E+004.98E+011.20E+03 + 30L1 50.003.79E-026.32E-018.37E+001.03E+023.77E-028.46E-011.68E+013.30E+02 + 30L1 65.001.77E-022.50E-012.86E+003.07E+011.80E-023.08E-014.79E+007.42E+01 + 30L1 80.009.61E-031.18E-011.19E+001.12E+011.01E-021.41E-011.81E+002.33E+01 + 30L1 100.004.96E-035.23E-024.52E-013.71E+005.51E-036.18E-026.51E-016.87E+00 + 30L1 120.002.89E-032.67E-022.04E-011.48E+003.38E-033.21E-022.88E-012.59E+00 + 30L1 150.001.49E-031.17E-027.66E-024.77E-011.88E-031.46E-021.08E-018.05E-01 + 30L1 200.006.37E-044.05E-032.18E-021.11E-018.95E-045.51E-033.22E-021.88E-01 + 30L1 300.001.99E-049.45E-043.87E-031.51E-023.28E-041.49E-036.36E-032.71E-02 + 30L1 450.006.72E-052.42E-047.65E-042.32E-031.25E-044.35E-041.41E-034.51E-03 + 30L1 650.002.76E-057.95E-052.04E-045.06E-045.49E-051.55E-044.04E-041.03E-03 + 30L11000.001.12E-052.59E-055.43E-051.10E-042.22E-055.09E-051.07E-042.19E-04 + 30L12000.003.48E-066.13E-061.01E-051.59E-055.92E-061.05E-051.72E-052.72E-05 + 30L2 15.001.94E-019.55E+011.94E+042.24E+068.50E-021.11E+019.99E+027.77E+04 + 30L2 17.001.24E-015.10E+019.12E+039.42E+055.73E-026.64E+005.38E+023.78E+04 + 30L2 20.006.95E-022.26E+013.42E+033.07E+053.44E-023.41E+002.40E+021.48E+04 + 30L2 25.003.09E-027.38E+008.89E+026.55E+041.70E-021.36E+007.92E+014.02E+03 + 30L2 32.001.25E-022.15E+002.01E+021.19E+047.80E-034.93E-012.31E+019.49E+02 + 30L2 40.005.46E-037.06E-015.26E+012.54E+033.85E-031.97E-017.57E+002.56E+02 + 30L2 50.002.37E-032.33E-011.38E+015.45E+021.90E-037.86E-022.48E+006.91E+01 + 30L2 65.008.86E-046.35E-022.90E+009.01E+018.30E-042.68E-026.70E-011.48E+01 + 30L2 80.004.05E-042.29E-028.51E-012.19E+014.30E-041.15E-022.39E-014.40E+00 + 30L2 100.001.75E-047.70E-032.30E-014.84E+002.13E-044.62E-037.91E-021.20E+00 + 30L2 120.008.84E-053.19E-037.99E-021.43E+001.20E-042.21E-033.23E-024.20E-01 + 30L2 150.003.85E-051.10E-032.22E-023.27E-015.93E-058.99E-041.09E-021.17E-01 + 30L2 200.001.34E-052.84E-044.41E-035.06E-022.41E-052.86E-042.72E-032.32E-02 + 30L2 300.003.14E-064.48E-054.86E-044.00E-036.87E-065.88E-054.07E-042.52E-03 + 30L2 450.007.89E-077.75E-066.00E-053.62E-042.00E-061.27E-056.54E-053.03E-04 + 30L2 650.002.43E-071.74E-061.02E-054.74E-056.71E-073.33E-061.35E-054.93E-05 + 30L21000.006.77E-083.49E-071.50E-065.36E-061.94E-077.47E-072.37E-066.81E-06 + 30L22000.001.13E-083.70E-081.05E-072.62E-072.94E-088.17E-081.90E-074.04E-07 + 30L3 15.003.53E-011.68E+023.36E+043.83E+063.22E-023.81E+011.25E+041.67E+06 + 30L3 17.002.25E-018.92E+011.56E+041.60E+062.19E-022.05E+015.69E+036.77E+05 + 30L3 20.001.25E-013.91E+015.79E+035.13E+051.32E-029.19E+002.06E+032.11E+05 + 30L3 25.005.53E-021.26E+011.48E+031.07E+056.62E-033.07E+005.19E+024.29E+04 + 30L3 32.002.22E-023.59E+003.25E+021.89E+043.07E-039.17E-011.15E+027.50E+03 + 30L3 40.009.61E-031.15E+008.28E+013.92E+031.54E-033.10E-012.98E+011.58E+03 + 30L3 50.004.14E-033.71E-012.11E+018.13E+027.68E-041.06E-017.87E+003.38E+02 + 30L3 65.001.53E-039.81E-024.23E+001.28E+023.40E-043.01E-021.68E+005.65E+01 + 30L3 80.006.96E-043.43E-021.19E+002.96E+011.78E-041.13E-025.01E-011.39E+01 + 30L3 100.002.99E-041.11E-023.05E-016.16E+008.95E-053.96E-031.39E-013.16E+00 + 30L3 120.001.50E-044.45E-031.01E-011.72E+005.11E-051.70E-034.95E-029.57E-01 + 30L3 150.006.54E-051.47E-032.62E-023.64E-012.58E-056.13E-041.42E-022.26E-01 + 30L3 200.002.28E-053.57E-044.71E-035.01E-021.08E-051.68E-042.92E-033.65E-02 + 30L3 300.005.46E-065.18E-054.44E-043.26E-033.29E-062.87E-053.35E-043.02E-03 + 30L3 450.001.44E-068.35E-064.66E-052.39E-041.05E-065.35E-064.18E-052.78E-04 + 30L3 650.004.80E-071.82E-067.00E-062.62E-053.97E-071.29E-066.91E-063.54E-05 + 30L31000.001.53E-073.77E-079.69E-072.58E-061.40E-072.92E-079.75E-073.65E-06 + 30L32000.003.42E-085.08E-087.87E-081.31E-073.34E-084.38E-087.15E-081.49E-07 + 30K 10.663.34E+014.62E+022.22E+038.36E+033.47E+012.91E+034.52E+042.83E+05 + 30K 11.362.82E+014.75E+023.73E+032.52E+042.87E+012.27E+034.24E+044.32E+05 + 30K 12.662.11E+014.37E+025.30E+035.83E+042.08E+011.48E+033.35E+045.21E+05 + 30K 15.861.15E+012.86E+024.99E+038.21E+041.06E+016.08E+021.62E+043.55E+05 + 30K 19.666.34E+001.63E+023.16E+035.84E+045.63E+002.61E+027.01E+031.67E+05 + 30K 24.003.62E+009.03E+011.75E+033.25E+043.13E+001.20E+023.04E+037.15E+04 + 30K 30.001.91E+004.41E+018.07E+021.42E+041.63E+005.04E+011.15E+032.51E+04 + 30K 38.009.60E-011.98E+013.27E+025.20E+038.19E-012.03E+014.03E+027.77E+03 + 30K 50.004.28E-017.48E+001.06E+021.46E+033.74E-017.18E+001.18E+021.91E+03 + 30K 63.002.15E-013.23E+003.97E+014.69E+021.95E-013.03E+004.19E+015.75E+02 + 30K 80.001.05E-011.33E+001.40E+011.40E+021.00E-011.26E+001.45E+011.66E+02 + 30K 93.006.64E-027.60E-017.17E+006.47E+016.66E-027.34E-017.50E+007.63E+01 + 30K 110.004.00E-024.04E-013.39E+002.71E+014.24E-024.05E-013.61E+003.22E+01 + 30K 133.002.25E-021.98E-011.45E+001.01E+012.56E-022.09E-011.60E+001.23E+01 + 30K 160.001.29E-029.87E-026.32E-013.86E+001.58E-021.11E-017.38E-014.90E+00 + 30K 225.004.70E-032.78E-021.40E-016.69E-016.65E-033.60E-021.84E-019.41E-01 + 30K 310.001.87E-038.75E-033.53E-021.36E-013.03E-031.31E-025.32E-022.15E-01 + 30K 400.009.35E-043.65E-031.25E-024.08E-021.66E-036.07E-032.08E-027.04E-02 + 30K 510.005.02E-041.67E-034.91E-031.39E-029.49E-043.01E-038.88E-032.57E-02 + 30K 740.002.11E-045.65E-041.36E-033.14E-034.19E-041.09E-032.63E-036.17E-03 + 30K 1000.001.14E-042.63E-045.49E-041.10E-032.24E-045.10E-041.06E-032.16E-03 + 30K 1250.007.55E-051.58E-043.02E-045.55E-041.44E-042.99E-045.70E-041.05E-03 + 30K 1500.005.53E-051.08E-041.93E-043.33E-041.01E-041.97E-043.52E-046.07E-04 + 30L1 2.197.33E+012.68E+041.80E+073.46E+093.87E+027.29E+052.54E+083.82E+10 + 30L1 2.894.39E+013.90E+034.37E+061.09E+091.69E+021.96E+055.41E+078.57E+09 + 30L1 4.192.07E+017.14E+014.44E+051.34E+085.56E+013.45E+046.89E+069.78E+08 + 30L1 7.395.84E+006.98E+013.45E+032.25E+061.02E+012.59E+033.09E+053.11E+07 + 30L1 11.192.14E+004.79E+011.95E+023.85E+042.95E+004.11E+023.33E+042.44E+06 + 30L1 15.001.02E+002.55E+013.09E+021.07E+031.24E+001.16E+027.12E+034.09E+05 + 30L1 21.004.20E-011.03E+011.68E+021.82E+034.57E-012.77E+011.25E+035.35E+04 + 30L1 29.001.74E-013.86E+006.35E+018.85E+021.77E-017.29E+002.41E+027.77E+03 + 30L1 41.006.59E-021.23E+001.81E+012.43E+026.51E-021.81E+004.31E+011.02E+03 + 30L1 54.002.99E-024.76E-016.08E+007.25E+012.97E-026.13E-011.13E+012.08E+02 + 30L1 71.001.34E-021.79E-011.95E+001.99E+011.38E-022.15E-013.09E+004.42E+01 + 30L1 84.008.18E-039.75E-029.49E-018.75E+008.68E-031.15E-011.41E+001.74E+01 + 30L1 101.004.73E-034.96E-024.27E-013.49E+005.25E-035.83E-026.09E-016.36E+00 + 30L1 124.002.57E-032.32E-021.74E-011.24E+003.03E-032.79E-022.43E-012.13E+00 + 30L1 150.001.46E-031.15E-027.54E-024.70E-011.84E-031.43E-021.06E-017.87E-01 + 30L1 215.005.07E-043.06E-031.56E-027.62E-027.31E-044.24E-032.34E-021.29E-01 + 30L1 300.001.96E-049.28E-043.80E-031.48E-023.21E-041.46E-036.23E-032.65E-02 + 30L1 390.009.59E-053.78E-041.31E-034.33E-031.72E-046.53E-042.32E-038.19E-03 + 30L1 500.005.06E-051.70E-045.06E-041.44E-039.69E-053.16E-049.59E-042.86E-03 + 30L1 730.002.09E-055.65E-051.37E-043.20E-044.21E-051.12E-042.74E-046.55E-04 + 30L11000.001.10E-052.54E-055.32E-051.07E-042.18E-055.01E-051.05E-042.16E-04 + 30L2 2.041.26E+022.16E+063.18E+091.07E+124.11E+013.57E+049.18E+061.61E+09 + 30L2 2.745.22E+014.86E+055.42E+081.85E+111.65E+011.09E+042.87E+065.71E+08 + 30L2 4.041.56E+016.82E+045.22E+071.56E+104.94E+002.27E+035.22E+059.66E+07 + 30L2 7.242.32E+003.59E+031.54E+063.17E+088.01E-012.11E+023.38E+044.56E+06 + 30L2 11.045.51E-014.29E+021.20E+051.78E+072.14E-013.76E+014.37E+034.35E+05 + 30L2 15.001.88E-019.22E+011.88E+042.17E+068.19E-021.07E+019.68E+027.56E+04 + 30L2 21.005.65E-021.70E+012.46E+032.12E+052.84E-022.69E+001.82E+021.08E+04 + 30L2 29.001.74E-023.39E+003.50E+022.27E+041.03E-027.12E-013.65E+011.64E+03 + 30L2 41.004.82E-036.02E-014.37E+012.07E+033.44E-031.71E-016.45E+002.14E+02 + 30L2 54.001.72E-031.53E-018.42E+003.10E+021.44E-035.52E-021.63E+004.24E+01 + 30L2 71.006.14E-043.97E-021.66E+004.75E+016.05E-041.80E-024.16E-018.53E+00 + 30L2 84.003.26E-041.74E-026.15E-011.51E+013.55E-049.05E-031.80E-013.19E+00 + 30L2 101.001.63E-047.07E-032.09E-014.36E+001.98E-044.27E-037.25E-021.09E+00 + 30L2 124.007.55E-052.62E-036.37E-021.11E+001.04E-041.86E-032.65E-023.35E-01 + 30L2 150.003.72E-051.06E-032.14E-023.14E-015.71E-058.66E-041.05E-021.13E-01 + 30L2 215.009.96E-061.95E-042.84E-033.07E-021.86E-052.07E-041.86E-031.49E-02 + 30L2 300.003.03E-064.31E-054.68E-043.85E-036.63E-065.67E-053.92E-042.43E-03 + 30L2 390.001.21E-061.37E-051.19E-048.00E-042.98E-062.09E-051.19E-046.08E-04 + 30L2 500.005.31E-074.82E-063.43E-051.92E-041.41E-068.29E-063.97E-051.71E-04 + 30L2 730.001.66E-071.07E-065.73E-062.48E-054.62E-072.13E-068.04E-062.74E-05 + 30L21000.006.52E-083.36E-071.45E-065.16E-061.87E-077.20E-072.29E-066.56E-06 + 30L3 2.022.50E+024.29E+066.43E+092.19E+121.53E+017.93E+056.26E+095.54E+12 + 30L3 2.721.02E+029.45E+051.06E+093.68E+116.10E+001.80E+058.36E+085.63E+11 + 30L3 4.022.99E+011.30E+059.96E+072.99E+101.82E+002.56E+046.10E+072.86E+10 + 30L3 7.224.35E+006.64E+032.83E+065.83E+082.98E-011.38E+031.29E+063.48E+08 + 30L3 11.021.02E+007.77E+022.14E+053.18E+078.08E-021.69E+028.46E+041.53E+07 + 30L3 15.003.42E-011.63E+023.25E+043.73E+063.11E-023.66E+011.20E+041.61E+06 + 30L3 21.001.01E-012.94E+014.15E+033.54E+051.10E-026.95E+001.46E+031.43E+05 + 30L3 29.003.09E-025.71E+005.74E+023.66E+044.03E-031.43E+002.01E+021.44E+04 + 30L3 41.008.47E-039.82E-016.86E+013.19E+031.37E-032.65E-012.47E+011.28E+03 + 30L3 54.002.99E-032.42E-011.27E+014.56E+025.83E-047.02E-024.79E+001.92E+02 + 30L3 71.001.06E-036.05E-022.38E+006.61E+012.49E-041.91E-029.63E-012.98E+01 + 30L3 84.005.59E-042.58E-028.50E-012.02E+011.48E-048.62E-033.64E-019.67E+00 + 30L3 101.002.78E-041.02E-022.76E-015.54E+008.37E-053.64E-031.26E-012.85E+00 + 30L3 124.001.28E-043.65E-037.96E-021.32E+004.45E-051.41E-033.96E-027.43E-01 + 30L3 150.006.30E-051.41E-032.53E-023.51E-012.49E-055.90E-041.36E-022.17E-01 + 30L3 215.001.69E-052.43E-042.96E-032.95E-028.42E-061.17E-041.90E-032.23E-02 + 30L3 300.005.26E-064.99E-054.27E-043.14E-033.17E-062.77E-053.22E-042.90E-03 + 30L3 390.002.18E-061.51E-059.79E-055.70E-041.50E-069.22E-068.29E-056.12E-04 + 30L3 500.009.99E-075.12E-062.57E-051.20E-047.60E-073.39E-062.38E-051.46E-04 + 30L3 730.003.40E-071.12E-063.85E-061.31E-052.85E-078.18E-073.86E-061.81E-05 + 30L31000.001.50E-073.64E-079.35E-072.49E-061.35E-072.81E-079.39E-073.51E-06 + 30M1 1.143.56E+016.02E+042.94E+079.86E+084.16E+022.89E+063.57E+091.90E+12 + 30M1 2.141.20E+011.95E+032.23E+065.83E+086.27E+011.36E+057.46E+072.52E+10 + 30M1 4.143.16E+002.09E+004.82E+041.70E+078.66E+005.93E+031.51E+062.97E+08 + 30M1 8.146.78E-011.18E+018.40E+011.18E+051.14E+002.67E+023.29E+043.56E+06 + 30M1 15.141.45E-013.69E+004.75E+012.16E+021.80E-011.73E+011.13E+036.92E+04 + 30M1 25.003.83E-028.95E-011.49E+011.93E+024.09E-022.07E+008.18E+013.14E+03 + 30M1 40.001.04E-021.96E-012.89E+003.88E+011.04E-023.04E-017.62E+001.88E+02 + 30M1 52.004.91E-037.97E-021.03E+001.24E+014.94E-031.08E-012.10E+004.07E+01 + 30M1 70.002.07E-032.78E-023.02E-013.10E+002.15E-033.44E-025.07E-017.46E+00 + 30M1 103.006.62E-046.83E-035.81E-024.71E-017.45E-048.19E-038.49E-028.81E-01 + 30M1 150.002.17E-041.70E-031.11E-026.93E-022.75E-042.15E-031.61E-021.20E-01 + 30M2 1.096.10E+017.10E+062.86E+102.61E+133.86E+019.12E+046.37E+073.22E+10 + 30M2 2.091.20E+012.64E+054.78E+082.84E+115.25E+005.59E+032.55E+069.23E+08 + 30M2 4.091.76E+008.90E+037.54E+062.71E+096.64E-013.36E+029.28E+042.13E+07 + 30M2 8.092.05E-012.88E+021.16E+052.39E+078.03E-021.99E+013.17E+034.28E+05 + 30M2 15.092.49E-021.27E+012.64E+033.13E+051.15E-021.53E+001.42E+021.14E+04 + 30M2 25.004.16E-031.01E+001.24E+029.35E+032.36E-031.91E-011.13E+015.87E+02 + 30M2 40.007.46E-049.77E-027.36E+003.59E+025.37E-042.76E-021.07E+003.67E+01 + 30M2 52.002.82E-042.66E-021.53E+005.87E+012.34E-049.39E-032.88E-017.82E+00 + 30M2 70.009.27E-056.14E-032.62E-017.65E+009.17E-052.78E-036.53E-021.36E+00 + 30M2 103.002.19E-059.35E-042.72E-025.60E-012.71E-055.76E-049.63E-031.43E-01 + 30M2 150.005.40E-061.53E-043.12E-034.59E-028.32E-061.26E-041.53E-031.65E-02 + 30M3 1.091.19E+021.33E+075.35E+104.82E+131.38E+012.56E+066.91E+102.01E+14 + 30M3 2.092.29E+014.92E+058.85E+085.21E+111.87E+009.84E+047.92E+089.82E+11 + 30M3 4.093.30E+001.64E+041.38E+074.89E+092.37E-013.43E+038.52E+064.79E+09 + 30M3 8.093.78E-015.20E+022.07E+054.21E+072.92E-021.15E+029.49E+042.55E+07 + 30M3 15.094.51E-022.22E+014.54E+035.33E+054.30E-035.18E+001.74E+032.46E+05 + 30M3 25.007.40E-031.72E+002.06E+021.52E+049.06E-044.29E-017.44E+016.36E+03 + 30M3 40.001.31E-031.59E-011.15E+015.52E+022.12E-044.34E-024.25E+002.30E+02 + 30M3 52.004.89E-044.21E-022.31E+008.65E+019.39E-051.22E-028.86E-013.73E+01 + 30M3 70.001.59E-049.34E-033.74E-011.06E+013.74E-052.96E-031.54E-014.90E+00 + 30M3 103.003.71E-051.34E-033.56E-027.02E-011.14E-054.83E-041.66E-023.70E-01 + 30M3 150.009.06E-062.04E-043.66E-035.09E-023.60E-068.57E-052.00E-033.20E-02 + 30M4 1.014.68E+011.37E+059.01E+091.50E+141.18E+002.16E+042.98E+087.12E+11 + 30M4 2.013.46E+003.84E+036.82E+074.15E+111.10E-016.58E+023.26E+064.33E+09 + 30M4 4.012.13E-011.01E+025.00E+051.21E+099.47E-031.95E+013.78E+042.68E+07 + 30M4 8.011.10E-022.40E+003.62E+033.67E+067.42E-045.67E-014.56E+021.69E+05 + 30M4 15.016.63E-047.48E-024.14E+011.98E+046.85E-052.26E-028.56E+001.74E+03 + 30M4 25.006.31E-054.28E-031.10E+002.91E+029.48E-061.64E-033.44E-014.25E+01 + 30M4 40.006.94E-062.95E-043.95E-026.12E+001.47E-061.45E-041.81E-021.42E+00 + 30M5 1.016.84E+011.95E+051.34E+102.19E+147.72E-013.13E+031.23E+098.20E+13 + 30M5 2.015.05E+005.45E+031.01E+086.02E+117.46E-021.01E+029.94E+061.83E+11 + 30M5 4.013.08E-011.42E+027.41E+051.74E+096.69E-033.22E+007.96E+044.34E+08 + 30M5 8.011.59E-023.36E+005.31E+035.20E+065.50E-041.03E-016.39E+021.13E+06 + 30M5 15.019.51E-041.03E-015.98E+012.75E+045.31E-054.57E-038.13E+005.73E+03 + 30M5 25.009.01E-055.84E-031.56E+003.94E+027.64E-063.62E-042.40E-018.54E+01 + 30M5 40.009.85E-063.95E-045.45E-027.98E+001.23E-063.48E-059.59E-031.89E+00 + 31K 11.372.94E+013.73E+021.58E+035.11E+033.30E+012.59E+033.69E+042.04E+05 + 31K 12.072.51E+013.86E+022.68E+031.58E+042.76E+012.05E+033.50E+043.16E+05 + 31K 13.371.91E+013.61E+023.91E+033.81E+042.04E+011.37E+032.84E+043.95E+05 + 31K 16.571.07E+012.46E+023.91E+035.84E+041.08E+015.87E+021.45E+042.90E+05 + 31K 20.376.06E+001.46E+022.61E+034.45E+045.84E+002.61E+026.56E+031.46E+05 + 31K 24.003.83E+009.06E+011.65E+032.87E+043.60E+001.37E+023.34E+037.42E+04 + 31K 30.002.03E+004.49E+017.85E+021.32E+041.87E+005.77E+011.28E+032.68E+04 + 31K 38.001.02E+002.04E+013.25E+025.00E+039.40E-012.32E+014.51E+028.44E+03 + 31K 50.004.57E-017.80E+001.08E+021.44E+034.28E-018.19E+001.33E+022.10E+03 + 31K 63.002.30E-013.39E+004.08E+014.71E+022.23E-013.46E+004.72E+016.37E+02 + 31K 80.001.12E-011.41E+001.45E+011.43E+021.15E-011.44E+001.64E+011.85E+02 + 31K 93.007.15E-028.06E-017.48E+006.64E+017.59E-028.35E-018.44E+008.51E+01 + 31K 110.004.31E-024.30E-013.55E+002.80E+014.82E-024.59E-014.07E+003.60E+01 + 31K 133.002.43E-022.11E-011.52E+001.05E+012.91E-022.37E-011.81E+001.38E+01 + 31K 160.001.40E-021.06E-016.69E-014.04E+001.79E-021.26E-018.30E-015.48E+00 + 31K 225.005.10E-032.99E-021.49E-017.08E-017.51E-034.06E-022.07E-011.05E+00 + 31K 310.002.04E-039.46E-033.79E-021.45E-013.41E-031.47E-025.97E-022.40E-01 + 31K 400.001.02E-033.96E-031.35E-024.38E-021.86E-036.83E-032.33E-027.88E-02 + 31K 510.005.48E-041.81E-035.32E-031.50E-021.06E-033.38E-039.95E-032.88E-02 + 31K 740.002.31E-046.18E-041.48E-033.42E-034.68E-041.23E-032.95E-036.90E-03 + 31K 1000.001.25E-042.88E-046.01E-041.21E-032.49E-045.70E-041.19E-032.41E-03 + 31K 1250.008.28E-051.74E-043.32E-046.10E-041.60E-043.34E-046.37E-041.18E-03 + 31K 1500.006.07E-051.19E-042.12E-043.66E-041.12E-042.20E-043.93E-046.78E-04 + 31L1 2.306.73E+012.55E+041.52E+072.59E+093.93E+027.17E+052.38E+083.28E+10 + 31L1 3.004.12E+014.17E+034.04E+069.14E+081.77E+022.03E+055.39E+077.97E+09 + 31L1 4.302.00E+011.22E+024.61E+051.26E+086.01E+013.74E+047.27E+069.83E+08 + 31L1 7.505.83E+005.44E+015.09E+032.56E+061.14E+012.93E+033.43E+053.36E+07 + 31L1 11.302.18E+004.33E+011.02E+025.81E+043.34E+004.72E+023.79E+042.72E+06 + 31L1 15.001.07E+002.46E+012.39E+021.41E+031.44E+001.38E+028.46E+034.81E+05 + 31L1 21.004.43E-011.03E+011.52E+021.32E+035.31E-013.28E+011.47E+036.27E+04 + 31L1 29.001.85E-013.93E+006.08E+017.72E+022.06E-018.58E+002.83E+029.08E+03 + 31L1 41.007.05E-021.28E+001.80E+012.30E+027.54E-022.11E+005.04E+011.18E+03 + 31L1 54.003.21E-024.98E-016.17E+007.11E+013.43E-027.14E-011.32E+012.41E+02 + 31L1 71.001.45E-021.89E-012.01E+002.00E+011.59E-022.50E-013.58E+005.11E+01 + 31L1 84.008.84E-031.03E-019.86E-018.89E+001.00E-021.33E-011.63E+002.01E+01 + 31L1 101.005.13E-035.29E-024.47E-013.59E+006.04E-036.74E-027.02E-017.33E+00 + 31L1 124.002.80E-032.49E-021.84E-011.28E+003.48E-033.22E-022.80E-012.44E+00 + 31L1 150.001.59E-031.24E-028.00E-024.92E-012.11E-031.65E-021.22E-019.03E-01 + 31L1 215.005.54E-043.31E-031.68E-028.09E-028.35E-044.86E-032.68E-021.47E-01 + 31L1 300.002.14E-041.01E-034.10E-031.59E-023.66E-041.66E-037.10E-033.02E-02 + 31L1 390.001.05E-044.14E-041.42E-034.68E-031.95E-047.43E-042.64E-039.31E-03 + 31L1 500.005.57E-051.87E-045.53E-041.57E-031.10E-043.59E-041.09E-033.25E-03 + 31L1 730.002.32E-056.24E-051.51E-043.51E-044.75E-051.27E-043.10E-047.42E-04 + 31L11000.001.22E-052.82E-055.89E-051.19E-042.45E-055.66E-051.19E-042.44E-04 + 31L2 2.141.18E+022.00E+062.79E+098.52E+114.19E+013.45E+048.07E+061.26E+09 + 31L2 2.845.09E+014.76E+055.11E+081.63E+111.74E+011.11E+042.71E+064.94E+08 + 31L2 4.141.58E+017.08E+045.28E+071.50E+105.41E+002.42E+035.27E+059.19E+07 + 31L2 7.342.47E+003.93E+031.66E+063.33E+089.09E-012.35E+023.65E+044.75E+06 + 31L2 11.146.00E-014.82E+021.33E+051.95E+072.47E-014.28E+014.86E+034.72E+05 + 31L2 15.002.13E-011.08E+022.21E+042.53E+069.72E-021.27E+011.13E+038.72E+04 + 31L2 21.006.43E-022.01E+012.90E+032.48E+053.38E-023.19E+002.14E+021.25E+04 + 31L2 29.001.99E-024.00E+004.15E+022.66E+041.22E-028.46E-014.30E+011.91E+03 + 31L2 41.005.56E-037.12E-015.18E+012.44E+034.10E-032.04E-017.64E+002.52E+02 + 31L2 54.001.99E-031.81E-011.00E+013.67E+021.72E-036.59E-021.93E+005.01E+01 + 31L2 71.007.15E-044.71E-021.97E+005.64E+017.25E-042.15E-024.95E-011.01E+01 + 31L2 84.003.80E-042.06E-027.33E-011.80E+014.26E-041.08E-022.15E-013.79E+00 + 31L2 101.001.91E-048.42E-032.50E-015.19E+002.38E-045.12E-038.66E-021.30E+00 + 31L2 124.008.88E-053.13E-037.61E-021.32E+001.25E-042.24E-033.16E-023.99E-01 + 31L2 150.004.39E-051.26E-032.56E-023.76E-016.88E-051.04E-031.25E-021.35E-01 + 31L2 215.001.17E-052.34E-043.41E-033.68E-022.24E-052.50E-042.24E-031.79E-02 + 31L2 300.003.59E-065.18E-055.63E-044.63E-038.02E-066.85E-054.72E-042.92E-03 + 31L2 390.001.47E-061.65E-051.44E-049.64E-043.61E-062.53E-051.44E-047.34E-04 + 31L2 500.006.47E-075.80E-064.14E-052.32E-041.71E-061.00E-054.81E-052.07E-04 + 31L2 730.001.95E-071.29E-066.95E-063.00E-055.60E-072.58E-069.76E-063.32E-05 + 31L21000.007.82E-084.06E-071.75E-066.25E-062.27E-078.76E-072.78E-067.97E-06 + 31L3 2.122.35E+023.96E+065.66E+091.76E+121.55E+017.85E+056.01E+095.08E+12 + 31L3 2.829.94E+019.27E+051.01E+093.24E+116.40E+001.88E+058.68E+085.64E+11 + 31L3 4.123.04E+011.35E+051.01E+082.88E+101.98E+002.84E+046.80E+073.11E+10 + 31L3 7.324.62E+007.26E+033.05E+066.11E+083.34E-011.61E+031.53E+064.07E+08 + 31L3 11.121.10E+008.69E+022.38E+053.46E+079.18E-022.01E+021.03E+051.83E+07 + 31L3 15.003.85E-011.90E+023.81E+044.32E+063.63E-024.55E+011.53E+042.05E+06 + 31L3 21.001.15E-013.45E+014.87E+034.12E+051.28E-028.63E+001.85E+031.80E+05 + 31L3 29.003.53E-026.70E+006.75E+024.28E+044.71E-031.77E+002.53E+021.81E+04 + 31L3 41.009.71E-031.15E+008.08E+013.73E+031.61E-033.27E-013.10E+011.60E+03 + 31L3 54.003.45E-032.85E-011.50E+015.36E+026.84E-048.65E-025.98E+002.39E+02 + 31L3 71.001.22E-037.12E-022.80E+007.78E+012.93E-042.34E-021.20E+003.71E+01 + 31L3 84.006.48E-043.05E-021.00E+002.38E+011.74E-041.06E-024.51E-011.20E+01 + 31L3 101.003.23E-041.20E-023.27E-016.54E+009.85E-054.45E-031.56E-013.53E+00 + 31L3 124.001.49E-044.31E-039.43E-021.56E+005.24E-051.72E-034.88E-029.18E-01 + 31L3 150.007.36E-051.67E-032.99E-024.15E-012.93E-057.19E-041.68E-022.68E-01 + 31L3 215.001.99E-052.87E-043.51E-033.49E-029.94E-061.43E-042.33E-032.75E-02 + 31L3 300.006.22E-065.91E-055.08E-043.73E-033.74E-063.34E-053.94E-043.56E-03 + 31L3 390.002.62E-061.79E-051.16E-046.77E-041.77E-061.11E-051.01E-047.49E-04 + 31L3 500.001.19E-066.08E-063.05E-051.43E-048.98E-074.07E-062.89E-051.79E-04 + 31L3 730.003.89E-071.33E-064.57E-061.56E-053.37E-079.77E-074.67E-062.21E-05 + 31L31000.001.75E-074.30E-071.11E-062.96E-061.59E-073.35E-071.13E-064.26E-06 + 31M1 1.163.43E+016.29E+042.57E+074.09E+084.63E+023.29E+064.10E+092.10E+12 + 31M1 2.161.20E+012.34E+032.30E+065.29E+087.17E+011.61E+058.92E+072.95E+10 + 31M1 4.163.22E+005.51E+005.76E+041.84E+071.00E+017.15E+031.83E+063.55E+08 + 31M1 8.167.07E-011.02E+011.77E+021.55E+051.34E+003.22E+023.98E+044.27E+06 + 31M1 15.161.53E-013.61E+003.84E+012.29E+022.11E-012.08E+011.36E+038.28E+04 + 31M1 25.004.11E-029.14E-011.41E+011.68E+024.81E-022.47E+009.81E+013.76E+03 + 31M1 40.001.12E-022.05E-012.90E+003.69E+011.23E-023.61E-019.05E+002.24E+02 + 31M1 52.005.34E-038.43E-021.06E+001.22E+015.79E-031.28E-012.49E+004.81E+01 + 31M1 70.002.26E-032.97E-023.15E-013.15E+002.51E-034.05E-025.96E-018.77E+00 + 31M1 103.007.28E-047.37E-036.16E-024.96E-018.68E-049.59E-039.94E-021.03E+00 + 31M1 150.002.39E-041.85E-031.20E-027.34E-023.19E-042.51E-031.87E-021.40E-01 + 31M2 1.116.09E+017.73E+063.12E+102.72E+134.38E+011.03E+056.92E+073.27E+10 + 31M2 2.111.25E+013.00E+055.46E+083.16E+116.13E+006.53E+032.90E+061.01E+09 + 31M2 4.111.91E+001.04E+048.82E+063.11E+097.88E-013.98E+021.08E+052.42E+07 + 31M2 8.112.30E-013.41E+021.38E+052.79E+079.62E-022.38E+013.73E+034.97E+05 + 31M2 15.112.85E-021.51E+013.15E+033.71E+051.39E-021.84E+001.69E+021.34E+04 + 31M2 25.004.84E-031.22E+001.50E+021.12E+042.87E-032.32E-011.36E+017.02E+02 + 31M2 40.008.77E-041.18E-018.91E+004.34E+026.54E-043.36E-021.30E+004.41E+01 + 31M2 52.003.33E-043.21E-021.86E+007.10E+012.86E-041.14E-023.49E-019.43E+00 + 31M2 70.001.10E-047.44E-033.19E-019.28E+001.12E-043.39E-037.94E-021.65E+00 + 31M2 103.002.61E-051.13E-033.32E-026.82E-013.33E-057.05E-041.18E-021.74E-01 + 31M2 150.006.44E-061.87E-043.81E-035.61E-021.02E-051.55E-041.87E-032.02E-02 + 31M3 1.101.20E+021.47E+075.95E+105.17E+131.56E+013.03E+068.44E+102.50E+14 + 31M3 2.102.41E+015.63E+051.02E+095.86E+112.16E+001.20E+051.01E+091.27E+12 + 31M3 4.103.60E+001.91E+041.61E+075.64E+092.79E-014.28E+031.11E+076.29E+09 + 31M3 8.104.23E-016.13E+022.46E+054.92E+073.46E-021.44E+021.24E+053.34E+07 + 31M3 15.105.14E-022.64E+015.41E+036.30E+055.11E-036.54E+002.26E+033.20E+05 + 31M3 25.008.56E-032.06E+002.47E+021.82E+041.08E-035.44E-019.62E+018.24E+03 + 31M3 40.001.53E-031.91E-011.39E+016.61E+022.53E-045.48E-025.45E+002.95E+02 + 31M3 52.005.73E-045.05E-022.78E+001.04E+021.12E-041.54E-021.13E+004.77E+01 + 31M3 70.001.88E-041.12E-024.51E-011.28E+014.48E-053.72E-031.96E-016.24E+00 + 31M3 103.004.40E-051.60E-034.30E-028.46E-011.36E-056.04E-042.10E-024.69E-01 + 31M3 150.001.08E-052.47E-044.43E-036.15E-024.32E-061.07E-042.52E-034.04E-02 + 31M4 1.025.70E+011.72E+051.20E+102.06E+141.54E+002.93E+044.16E+089.80E+11 + 31M4 2.024.39E+004.97E+039.37E+075.86E+111.47E-019.16E+024.66E+066.13E+09 + 31M4 4.022.78E-011.33E+027.01E+051.73E+091.28E-022.75E+015.44E+043.85E+07 + 31M4 8.021.48E-023.24E+005.12E+035.28E+061.02E-038.07E-016.60E+022.44E+05 + 31M4 15.029.05E-041.03E-015.89E+012.85E+049.54E-053.23E-021.24E+012.51E+03 + 31M4 25.008.75E-055.95E-031.58E+004.23E+021.33E-052.35E-035.01E-016.18E+01 + 31M4 40.009.66E-064.13E-045.66E-028.89E+002.08E-062.09E-042.63E-022.06E+00 + 31M5 1.028.35E+012.45E+051.78E+103.00E+141.00E+004.20E+031.75E+091.22E+14 + 31M5 2.026.40E+007.05E+031.40E+088.51E+119.90E-021.38E+021.46E+072.83E+11 + 31M5 4.024.03E-011.88E+021.04E+062.48E+099.03E-034.48E+001.19E+056.76E+08 + 31M5 8.022.13E-024.53E+007.53E+037.49E+067.54E-041.45E-019.59E+021.76E+06 + 31M5 15.021.30E-031.42E-018.52E+013.97E+047.36E-056.42E-031.22E+018.87E+03 + 31M5 25.001.25E-048.10E-032.24E+005.71E+021.07E-055.12E-043.61E-011.32E+02 + 31M5 40.001.38E-055.52E-047.82E-021.16E+011.73E-064.93E-051.44E-022.89E+00 + 32K 12.102.59E+013.03E+021.14E+033.17E+033.14E+012.31E+033.03E+041.49E+05 + 32K 12.802.24E+013.15E+021.94E+031.00E+042.66E+011.85E+032.90E+042.33E+05 + 32K 14.101.73E+012.99E+022.90E+032.51E+041.99E+011.26E+032.41E+043.01E+05 + 32K 17.309.97E+002.12E+023.07E+034.17E+041.09E+015.65E+021.29E+042.37E+05 + 32K 21.105.78E+001.30E+022.15E+033.39E+046.03E+002.59E+026.12E+031.26E+05 + 32K 25.003.60E+008.00E+011.36E+032.22E+043.65E+001.34E+023.06E+036.40E+04 + 32K 31.001.95E+004.10E+016.77E+021.07E+041.94E+005.80E+011.22E+032.43E+04 + 32K 39.001.01E+001.92E+012.92E+024.27E+039.97E-012.40E+014.47E+028.01E+03 + 32K 51.004.60E-017.56E+001.01E+021.29E+034.61E-018.66E+001.36E+022.08E+03 + 32K 64.002.35E-013.35E+003.90E+014.37E+022.43E-013.70E+004.93E+016.48E+02 + 32K 81.001.16E-011.42E+001.42E+011.36E+021.26E-011.56E+001.74E+011.92E+02 + 32K 94.007.43E-028.18E-017.41E+006.43E+018.37E-029.10E-019.05E+008.95E+01 + 32K 111.004.51E-024.41E-013.56E+002.75E+015.33E-025.03E-014.40E+003.83E+01 + 32K 134.002.56E-022.18E-011.55E+001.05E+013.22E-022.60E-011.96E+001.48E+01 + 32K 160.001.51E-021.13E-017.06E-014.21E+002.02E-021.42E-019.32E-016.11E+00 + 32K 225.005.52E-033.20E-021.58E-017.46E-018.46E-034.57E-022.32E-011.17E+00 + 32K 310.002.21E-031.02E-024.06E-021.54E-013.83E-031.66E-026.69E-022.68E-01 + 32K 400.001.11E-034.28E-031.45E-024.69E-022.09E-037.66E-032.61E-028.79E-02 + 32K 510.005.98E-041.97E-035.75E-031.61E-021.19E-033.79E-031.11E-023.21E-02 + 32K 740.002.52E-046.74E-041.61E-033.71E-035.22E-041.37E-033.29E-037.70E-03 + 32K 1000.001.36E-043.15E-046.57E-041.32E-032.77E-046.36E-041.33E-032.69E-03 + 32K 1250.009.06E-051.90E-043.63E-046.68E-041.77E-043.71E-047.10E-041.31E-03 + 32K 1500.006.64E-051.30E-042.33E-044.02E-041.24E-042.44E-044.38E-047.55E-04 + 32L1 2.416.11E+012.36E+041.25E+071.88E+093.92E+026.89E+052.17E+082.72E+10 + 32L1 3.113.84E+014.31E+033.64E+067.41E+081.83E+022.05E+055.24E+077.18E+09 + 32L1 4.411.92E+011.78E+024.66E+051.16E+086.44E+013.99E+047.52E+069.63E+08 + 32L1 7.615.79E+004.08E+016.86E+032.81E+061.26E+013.27E+033.77E+053.56E+07 + 32L1 11.412.21E+003.86E+016.02E+018.02E+043.76E+005.37E+024.25E+042.99E+06 + 32L1 15.001.12E+002.34E+011.74E+022.90E+031.67E+001.63E+029.99E+035.63E+05 + 32L1 21.004.67E-011.02E+011.34E+029.04E+026.15E-013.87E+011.73E+037.31E+04 + 32L1 29.001.96E-013.98E+005.76E+016.57E+022.38E-011.01E+013.32E+021.06E+04 + 32L1 41.007.51E-021.32E+001.78E+012.15E+028.71E-022.47E+005.87E+011.37E+03 + 32L1 54.003.44E-025.19E-016.22E+006.90E+013.96E-028.30E-011.53E+012.79E+02 + 32L1 71.001.56E-021.99E-012.06E+002.00E+011.83E-022.89E-014.13E+005.89E+01 + 32L1 84.009.54E-031.09E-011.02E+008.98E+001.15E-021.53E-011.88E+002.31E+01 + 32L1 101.005.55E-035.62E-024.66E-013.66E+006.93E-037.75E-028.08E-018.42E+00 + 32L1 124.003.03E-032.66E-021.93E-011.33E+003.98E-033.69E-023.21E-012.80E+00 + 32L1 150.001.73E-031.32E-028.46E-025.13E-012.41E-031.89E-021.39E-011.03E+00 + 32L1 215.006.05E-043.57E-031.79E-028.55E-029.50E-045.54E-033.05E-021.68E-01 + 32L1 300.002.35E-041.10E-034.42E-031.70E-024.15E-041.89E-038.07E-033.43E-02 + 32L1 390.001.16E-044.51E-041.54E-035.04E-032.21E-048.43E-043.00E-031.05E-02 + 32L1 500.006.13E-052.04E-046.02E-041.71E-031.24E-044.07E-041.23E-033.68E-03 + 32L1 730.002.55E-056.86E-051.66E-043.85E-045.34E-051.43E-043.51E-048.38E-04 + 32L11000.001.34E-053.11E-056.50E-051.31E-042.75E-056.38E-051.35E-042.75E-04 + 32L2 2.251.10E+021.82E+062.42E+096.75E+114.23E+013.30E+047.05E+069.80E+08 + 32L2 2.954.93E+014.62E+054.76E+081.41E+111.83E+011.11E+042.53E+064.22E+08 + 32L2 4.251.60E+017.28E+045.28E+071.42E+105.88E+002.55E+035.27E+058.64E+07 + 32L2 7.452.61E+004.28E+031.78E+063.46E+081.02E+002.60E+023.91E+044.90E+06 + 32L2 11.256.49E-015.37E+021.47E+052.11E+072.83E-014.84E+015.37E+035.08E+05 + 32L2 15.002.40E-011.27E+022.59E+042.93E+061.15E-011.49E+011.31E+039.98E+04 + 32L2 21.007.28E-022.35E+013.40E+032.89E+054.00E-023.75E+002.50E+021.45E+04 + 32L2 29.002.27E-024.69E+004.88E+023.11E+041.45E-029.99E-015.03E+012.22E+03 + 32L2 41.006.38E-038.36E-016.11E+012.86E+034.87E-032.41E-018.98E+002.94E+02 + 32L2 54.002.30E-032.14E-011.18E+014.31E+022.05E-037.82E-022.28E+005.87E+01 + 32L2 71.008.28E-045.55E-022.34E+006.65E+018.64E-042.56E-025.85E-011.19E+01 + 32L2 84.004.42E-042.44E-028.69E-012.13E+015.08E-041.29E-022.55E-014.47E+00 + 32L2 101.002.22E-049.96E-032.96E-016.15E+002.85E-046.11E-031.03E-011.54E+00 + 32L2 124.001.04E-043.71E-039.05E-021.56E+001.50E-042.67E-033.76E-024.73E-01 + 32L2 150.005.12E-051.50E-033.05E-024.47E-018.24E-051.24E-031.49E-021.60E-01 + 32L2 215.001.38E-052.79E-044.08E-034.39E-022.69E-053.00E-042.67E-032.13E-02 + 32L2 300.004.26E-066.18E-056.74E-045.54E-039.64E-068.23E-055.66E-043.49E-03 + 32L2 390.001.74E-061.97E-051.72E-041.15E-034.34E-063.04E-051.73E-048.79E-04 + 32L2 500.007.63E-076.94E-064.97E-052.78E-042.06E-061.21E-055.79E-052.49E-04 + 32L2 730.002.31E-071.55E-068.36E-063.62E-056.76E-073.12E-061.18E-054.00E-05 + 32L21000.009.19E-084.88E-072.12E-067.55E-062.74E-071.06E-063.36E-069.62E-06 + 32L3 2.222.20E+023.63E+064.94E+091.40E+121.55E+017.69E+055.70E+094.59E+12 + 32L3 2.929.65E+019.01E+059.43E+082.83E+116.65E+001.95E+058.88E+085.56E+11 + 32L3 4.223.07E+011.38E+051.01E+082.74E+102.13E+003.11E+047.48E+073.33E+10 + 32L3 7.424.87E+007.87E+033.26E+066.34E+083.72E-011.86E+031.80E+064.69E+08 + 32L3 11.221.19E+009.66E+022.62E+053.73E+071.04E-012.38E+021.23E+052.18E+07 + 32L3 15.004.32E-012.21E+024.45E+044.98E+064.22E-025.62E+011.93E+042.59E+06 + 32L3 21.001.30E-014.02E+015.69E+034.77E+051.49E-021.06E+012.33E+032.27E+05 + 32L3 29.004.00E-027.81E+007.89E+024.97E+045.49E-032.18E+003.17E+022.27E+04 + 32L3 41.001.11E-021.35E+009.46E+014.35E+031.87E-034.01E-013.86E+011.99E+03 + 32L3 54.003.95E-033.33E-011.75E+016.25E+027.98E-041.06E-017.43E+002.96E+02 + 32L3 71.001.41E-038.34E-023.29E+009.11E+013.42E-042.86E-021.48E+004.59E+01 + 32L3 84.007.46E-043.57E-021.18E+002.79E+012.03E-041.29E-025.56E-011.48E+01 + 32L3 101.003.73E-041.41E-023.85E-017.67E+001.15E-045.42E-031.93E-014.34E+00 + 32L3 124.001.73E-045.06E-031.11E-011.83E+006.14E-052.09E-036.00E-021.13E+00 + 32L3 150.008.53E-051.96E-033.53E-024.88E-013.44E-058.71E-042.06E-023.28E-01 + 32L3 215.002.30E-053.38E-044.14E-034.12E-021.16E-051.72E-042.84E-033.36E-02 + 32L3 300.007.17E-066.96E-056.00E-044.40E-034.39E-064.02E-054.79E-044.34E-03 + 32L3 390.002.99E-062.11E-051.38E-047.99E-042.08E-061.33E-051.23E-049.11E-04 + 32L3 500.001.37E-067.17E-063.61E-051.69E-041.05E-064.86E-063.50E-052.17E-04 + 32L3 730.004.57E-071.57E-065.40E-061.85E-053.94E-071.16E-065.62E-062.67E-05 + 32L31000.002.02E-075.06E-071.31E-063.50E-061.86E-073.96E-071.35E-065.15E-06 + 32M1 1.183.32E+016.56E+042.24E+072.70E+085.16E+023.75E+064.71E+092.34E+12 + 32M1 2.181.20E+012.76E+032.36E+064.75E+088.19E+011.90E+051.07E+083.45E+10 + 32M1 4.183.29E+001.26E+016.77E+041.96E+071.16E+018.59E+032.22E+064.25E+08 + 32M1 8.187.36E-018.68E+003.17E+021.96E+051.56E+003.88E+024.81E+045.12E+06 + 32M1 15.181.62E-013.51E+003.00E+013.85E+022.47E-012.49E+011.63E+039.89E+04 + 32M1 25.004.41E-029.32E-011.33E+011.31E+025.66E-022.96E+001.17E+024.49E+03 + 32M1 40.001.21E-022.15E-012.90E+003.48E+011.44E-024.28E-011.08E+012.65E+02 + 32M1 52.005.79E-038.90E-021.08E+001.20E+016.77E-031.51E-012.94E+005.68E+01 + 32M1 70.002.46E-033.16E-023.27E-013.18E+002.93E-034.76E-027.01E-011.03E+01 + 32M1 103.007.98E-047.94E-036.52E-025.09E-011.01E-031.12E-021.16E-011.20E+00 + 32M1 150.002.63E-042.01E-031.28E-027.75E-023.70E-042.92E-032.17E-021.62E-01 + 32M2 1.136.08E+018.37E+063.38E+102.83E+134.94E+011.17E+057.48E+073.32E+10 + 32M2 2.131.31E+013.41E+056.21E+083.49E+117.12E+007.59E+033.27E+061.09E+09 + 32M2 4.132.08E+001.21E+041.03E+073.56E+099.31E-014.69E+021.25E+052.73E+07 + 32M2 8.132.56E-014.01E+021.63E+053.26E+071.15E-012.84E+014.39E+035.75E+05 + 32M2 15.133.25E-021.79E+013.76E+034.39E+051.67E-022.20E+002.01E+021.58E+04 + 32M2 25.005.60E-031.46E+001.81E+021.35E+043.47E-032.80E-011.64E+018.36E+02 + 32M2 40.001.03E-031.42E-011.08E+015.21E+027.95E-044.07E-021.56E+005.29E+01 + 32M2 52.003.91E-043.87E-022.25E+008.56E+013.48E-041.39E-024.22E-011.13E+01 + 32M2 70.001.30E-048.98E-033.86E-011.12E+011.37E-044.12E-039.62E-021.99E+00 + 32M2 103.003.11E-051.37E-034.03E-028.27E-014.07E-058.60E-041.43E-022.11E-01 + 32M2 150.007.73E-062.27E-044.65E-036.83E-021.25E-051.90E-042.28E-032.45E-02 + 32M3 1.121.21E+021.61E+076.55E+105.49E+131.75E+013.54E+061.02E+113.05E+14 + 32M3 2.122.53E+016.41E+051.17E+096.54E+112.50E+001.46E+051.28E+091.63E+12 + 32M3 4.123.90E+002.23E+041.88E+076.47E+093.26E-015.31E+031.43E+078.18E+09 + 32M3 8.124.71E-017.21E+022.90E+055.74E+074.07E-021.81E+021.60E+054.34E+07 + 32M3 15.125.84E-023.12E+016.42E+037.41E+056.04E-038.23E+002.92E+034.14E+05 + 32M3 25.009.88E-032.46E+002.96E+022.17E+041.29E-036.87E-011.24E+021.06E+04 + 32M3 40.001.78E-032.28E-011.66E+017.90E+023.02E-046.89E-026.97E+003.78E+02 + 32M3 52.006.70E-046.04E-023.34E+001.24E+021.34E-041.94E-021.44E+006.08E+01 + 32M3 70.002.21E-041.35E-025.43E-011.53E+015.36E-054.66E-032.48E-017.92E+00 + 32M3 103.005.21E-051.93E-035.18E-021.02E+001.63E-057.53E-042.65E-025.93E-01 + 32M3 150.001.29E-052.97E-045.34E-037.41E-025.19E-061.32E-043.16E-035.08E-02 + 32M4 1.036.75E+012.10E+051.53E+102.71E+141.95E+003.84E+045.62E+081.30E+12 + 32M4 2.035.42E+006.27E+031.25E+088.02E+111.91E-011.24E+036.47E+068.41E+09 + 32M4 4.033.55E-011.72E+029.55E+052.40E+091.70E-023.79E+017.63E+045.36E+07 + 32M4 8.031.93E-024.28E+007.06E+037.41E+061.37E-031.12E+009.31E+023.43E+05 + 32M4 15.031.21E-031.37E-018.17E+014.02E+041.30E-044.51E-021.75E+013.54E+03 + 32M4 25.001.18E-048.08E-032.21E+005.99E+021.83E-053.31E-037.12E-018.78E+01 + 32M4 40.001.32E-055.66E-047.93E-021.26E+012.88E-062.94E-043.75E-022.93E+00 + 32M5 1.039.90E+012.98E+052.29E+103.95E+141.26E+005.46E+032.39E+091.74E+14 + 32M5 2.037.91E+008.87E+031.87E+081.16E+121.28E-011.85E+022.07E+074.21E+11 + 32M5 4.035.14E-012.42E+021.42E+063.46E+091.19E-026.06E+001.72E+051.02E+09 + 32M5 8.032.78E-025.96E+001.04E+041.05E+071.01E-031.97E-011.40E+032.67E+06 + 32M5 15.031.72E-031.89E-011.19E+025.59E+049.95E-058.80E-031.79E+011.34E+04 + 32M5 25.001.68E-041.10E-023.14E+008.09E+021.46E-057.06E-045.31E-011.98E+02 + 32M5 40.001.86E-057.53E-041.10E-011.64E+012.38E-066.82E-052.11E-024.31E+00 + 33K 12.872.30E+012.48E+028.27E+022.00E+032.99E+012.06E+032.50E+041.09E+05 + 33K 13.572.00E+012.59E+021.42E+036.42E+032.56E+011.67E+032.42E+041.74E+05 + 33K 14.871.57E+012.49E+022.16E+031.67E+041.95E+011.17E+032.05E+042.30E+05 + 33K 18.079.28E+001.82E+022.41E+032.97E+041.09E+015.43E+021.15E+041.94E+05 + 33K 21.875.50E+001.15E+021.77E+032.58E+046.20E+002.57E+025.69E+031.09E+05 + 33K 26.003.39E+007.10E+011.13E+031.72E+043.72E+001.31E+022.83E+035.55E+04 + 33K 32.001.88E+003.75E+015.85E+028.76E+032.02E+005.83E+011.17E+032.21E+04 + 33K 40.009.92E-011.80E+012.62E+023.65E+031.06E+002.47E+014.43E+027.60E+03 + 33K 52.004.61E-017.32E+009.37E+011.15E+034.97E-019.13E+001.39E+022.05E+03 + 33K 65.002.39E-013.31E+003.73E+014.04E+022.64E-013.96E+005.14E+016.57E+02 + 33K 82.001.20E-011.42E+001.39E+011.30E+021.38E-011.69E+001.84E+012.00E+02 + 33K 95.007.71E-028.29E-017.33E+006.20E+019.20E-029.90E-019.67E+009.38E+01 + 33K 112.004.71E-024.51E-013.56E+002.70E+015.88E-025.50E-014.73E+004.05E+01 + 33K 135.002.69E-022.25E-011.57E+001.04E+013.57E-022.86E-012.13E+001.58E+01 + 33K 160.001.62E-021.20E-017.42E-014.38E+002.28E-021.59E-011.04E+006.80E+00 + 33K 225.005.96E-033.43E-021.68E-017.83E-019.51E-035.13E-022.60E-011.31E+00 + 33K 310.002.40E-031.09E-024.33E-021.63E-014.30E-031.85E-027.47E-022.98E-01 + 33K 400.001.21E-034.62E-031.55E-025.00E-022.33E-038.56E-032.91E-029.79E-02 + 33K 510.006.50E-042.13E-036.20E-031.73E-021.33E-034.23E-031.24E-023.57E-02 + 33K 740.002.74E-047.32E-041.75E-034.02E-035.80E-041.53E-033.66E-038.56E-03 + 33K 1000.001.48E-043.44E-047.16E-041.44E-033.07E-047.07E-041.48E-032.99E-03 + 33K 1250.009.85E-052.08E-043.97E-047.30E-041.96E-044.13E-047.90E-041.46E-03 + 33K 1500.007.22E-051.42E-042.55E-044.40E-041.37E-042.71E-044.86E-048.39E-04 + 33L1 2.535.62E+012.21E+041.06E+071.41E+093.96E+026.72E+052.03E+082.33E+10 + 33L1 3.233.60E+014.45E+033.32E+066.14E+081.90E+022.10E+055.16E+076.61E+09 + 33L1 4.531.84E+012.40E+024.71E+051.07E+086.90E+014.27E+047.83E+069.55E+08 + 33L1 7.735.76E+002.96E+018.80E+033.05E+061.39E+013.66E+034.14E+053.80E+07 + 33L1 11.532.24E+003.42E+016.84E+011.05E+054.22E+006.11E+024.77E+043.28E+06 + 33L1 15.001.17E+002.22E+011.20E+025.66E+031.92E+001.93E+021.18E+046.56E+05 + 33L1 21.004.91E-011.00E+011.16E+026.00E+027.10E-014.55E+012.03E+038.51E+04 + 33L1 29.002.07E-014.01E+005.41E+015.48E+022.74E-011.18E+013.87E+021.23E+04 + 33L1 41.007.99E-021.35E+001.75E+011.98E+021.00E-012.87E+006.81E+011.59E+03 + 33L1 54.003.67E-025.40E-016.25E+006.66E+014.55E-029.61E-011.77E+013.21E+02 + 33L1 71.001.67E-022.09E-012.10E+001.98E+012.10E-023.33E-014.76E+006.77E+01 + 33L1 84.001.02E-021.15E-011.05E+009.03E+001.31E-021.76E-012.16E+002.65E+01 + 33L1 101.005.97E-035.94E-024.84E-013.73E+007.92E-038.90E-029.26E-019.63E+00 + 33L1 124.003.27E-032.83E-022.02E-011.36E+004.55E-034.23E-023.67E-013.20E+00 + 33L1 150.001.87E-031.41E-028.90E-025.33E-012.74E-032.15E-021.59E-011.18E+00 + 33L1 215.006.56E-043.84E-031.90E-029.00E-021.08E-036.31E-033.47E-021.91E-01 + 33L1 300.002.56E-041.19E-034.74E-031.81E-024.70E-042.14E-039.15E-033.88E-02 + 33L1 390.001.26E-044.90E-041.66E-035.42E-032.49E-049.54E-043.39E-031.19E-02 + 33L1 500.006.72E-052.23E-046.54E-041.85E-031.40E-044.59E-041.39E-034.15E-03 + 33L1 730.002.80E-057.52E-051.81E-044.20E-046.00E-051.61E-043.95E-049.45E-04 + 33L11000.001.47E-053.42E-057.15E-051.44E-043.08E-057.17E-051.51E-043.10E-04 + 33L2 2.361.03E+021.66E+062.09E+095.33E+114.26E+013.15E+046.14E+067.59E+08 + 33L2 3.064.76E+014.45E+054.41E+081.21E+111.91E+011.11E+042.35E+063.59E+08 + 33L2 4.361.60E+017.42E+045.24E+071.34E+106.35E+002.67E+035.23E+058.06E+07 + 33L2 7.562.74E+004.61E+031.89E+063.56E+081.15E+002.85E+024.15E+045.01E+06 + 33L2 11.366.98E-015.95E+021.62E+052.26E+073.22E-015.43E+015.88E+035.42E+05 + 33L2 15.002.68E-011.48E+023.02E+043.37E+061.35E-011.74E+011.52E+031.14E+05 + 33L2 21.008.21E-022.74E+013.97E+033.34E+054.71E-024.40E+002.90E+021.66E+04 + 33L2 29.002.57E-025.47E+005.70E+023.62E+041.71E-021.17E+005.87E+012.56E+03 + 33L2 41.007.28E-039.78E-017.17E+013.34E+035.76E-032.84E-011.05E+013.41E+02 + 33L2 54.002.63E-032.50E-011.39E+015.05E+022.42E-039.22E-022.67E+006.84E+01 + 33L2 71.009.52E-046.52E-022.75E+007.80E+011.02E-033.02E-026.89E-011.39E+01 + 33L2 84.005.09E-042.87E-021.02E+002.50E+016.04E-041.53E-023.00E-015.24E+00 + 33L2 101.002.57E-041.17E-023.50E-017.24E+003.38E-047.24E-031.21E-011.81E+00 + 33L2 124.001.20E-044.37E-031.07E-011.85E+001.78E-043.17E-034.45E-025.57E-01 + 33L2 150.005.97E-051.77E-033.61E-025.28E-019.82E-051.48E-031.77E-021.89E-01 + 33L2 215.001.62E-053.30E-044.84E-035.20E-023.21E-053.57E-043.18E-032.53E-02 + 33L2 300.004.95E-067.33E-058.02E-046.58E-031.15E-059.84E-056.75E-044.15E-03 + 33L2 390.002.00E-062.34E-052.05E-041.38E-035.20E-063.64E-052.06E-041.05E-03 + 33L2 500.008.86E-078.26E-065.94E-053.32E-042.47E-061.45E-056.93E-052.97E-04 + 33L2 730.002.79E-071.85E-061.00E-054.33E-058.12E-073.75E-061.41E-054.79E-05 + 33L21000.001.09E-075.82E-072.54E-069.05E-063.30E-071.28E-064.04E-061.16E-05 + 33L3 2.322.05E+023.31E+064.29E+091.11E+121.55E+017.48E+055.35E+094.11E+12 + 33L3 3.029.31E+018.69E+058.75E+082.44E+116.87E+002.01E+058.98E+085.43E+11 + 33L3 4.323.08E+011.41E+051.00E+082.58E+102.27E+003.37E+048.12E+073.52E+10 + 33L3 7.525.10E+008.47E+033.46E+066.51E+084.10E-012.13E+032.08E+065.35E+08 + 33L3 11.321.28E+001.07E+032.87E+053.99E+071.16E-012.79E+021.47E+052.56E+07 + 33L3 15.004.81E-012.56E+025.15E+045.71E+064.87E-026.90E+012.43E+043.25E+06 + 33L3 21.001.45E-014.66E+016.60E+035.49E+051.72E-021.30E+012.92E+032.83E+05 + 33L3 29.004.51E-029.06E+009.17E+025.73E+046.35E-032.66E+003.95E+022.82E+04 + 33L3 41.001.26E-021.57E+001.10E+025.04E+032.17E-034.90E-014.78E+012.46E+03 + 33L3 54.004.49E-033.88E-012.04E+017.26E+029.26E-041.29E-019.16E+003.65E+02 + 33L3 71.001.61E-039.72E-023.84E+001.06E+023.97E-043.48E-021.82E+005.64E+01 + 33L3 84.008.54E-044.16E-021.38E+003.25E+012.36E-041.56E-026.82E-011.81E+01 + 33L3 101.004.28E-041.65E-024.50E-018.95E+001.34E-046.56E-032.36E-015.31E+00 + 33L3 124.001.99E-045.91E-031.30E-012.14E+007.14E-052.52E-037.32E-021.38E+00 + 33L3 150.009.83E-052.30E-034.13E-025.70E-014.00E-051.05E-032.51E-024.00E-01 + 33L3 215.002.68E-053.95E-044.86E-034.82E-021.36E-052.06E-043.45E-034.08E-02 + 33L3 300.008.42E-068.15E-057.04E-045.17E-035.11E-064.80E-055.79E-045.26E-03 + 33L3 390.003.51E-062.47E-051.62E-049.39E-042.43E-061.58E-051.48E-041.10E-03 + 33L3 500.001.60E-068.39E-064.24E-051.98E-041.23E-065.77E-064.21E-052.62E-04 + 33L3 730.005.41E-071.84E-066.35E-062.17E-054.60E-071.37E-066.73E-063.22E-05 + 33L31000.002.38E-075.94E-071.54E-064.12E-062.16E-074.65E-071.61E-066.17E-06 + 33M1 1.203.21E+016.78E+041.94E+074.57E+085.70E+024.23E+065.35E+092.57E+12 + 33M1 2.201.19E+013.19E+032.40E+064.20E+089.30E+012.23E+051.26E+084.01E+10 + 33M1 4.203.36E+002.33E+017.80E+042.07E+071.34E+011.03E+042.67E+065.05E+08 + 33M1 8.207.65E-017.20E+005.06E+022.42E+051.82E+004.65E+025.78E+046.12E+06 + 33M1 15.201.71E-013.39E+002.26E+016.97E+022.89E-012.98E+011.95E+031.18E+05 + 33M1 25.004.71E-029.46E-011.23E+011.04E+026.63E-023.53E+001.40E+025.35E+03 + 33M1 40.001.31E-022.24E-012.88E+003.25E+011.68E-025.07E-011.27E+013.13E+02 + 33M1 52.006.27E-039.37E-021.10E+001.17E+017.90E-031.78E-013.46E+006.69E+01 + 33M1 70.002.68E-033.36E-023.39E-013.19E+003.41E-035.58E-028.23E-011.21E+01 + 33M1 103.008.73E-048.54E-036.87E-025.25E-011.17E-031.31E-021.36E-011.40E+00 + 33M1 150.002.89E-042.18E-031.37E-028.16E-024.28E-043.39E-032.52E-021.88E-01 + 33M2 1.156.10E+019.14E+063.71E+103.01E+135.60E+011.33E+058.23E+073.46E+10 + 33M2 2.151.38E+013.87E+057.10E+083.90E+118.27E+008.85E+033.73E+061.20E+09 + 33M2 4.152.25E+001.40E+041.20E+074.08E+091.10E+005.54E+021.45E+053.09E+07 + 33M2 8.152.85E-014.72E+021.92E+053.80E+071.37E-013.38E+015.15E+036.65E+05 + 33M2 15.153.68E-022.12E+014.46E+035.17E+052.00E-022.63E+002.37E+021.85E+04 + 33M2 25.006.46E-031.74E+002.17E+021.60E+044.19E-033.37E-011.95E+019.91E+02 + 33M2 40.001.19E-031.69E-011.29E+016.24E+029.61E-044.91E-021.88E+006.30E+01 + 33M2 52.004.58E-044.66E-022.70E+001.03E+024.22E-041.68E-025.07E-011.35E+01 + 33M2 70.001.53E-041.08E-024.66E-011.35E+011.66E-044.99E-031.16E-012.39E+00 + 33M2 103.003.68E-051.56E-034.88E-029.97E-014.95E-051.04E-031.73E-022.54E-01 + 33M2 150.009.21E-062.74E-045.64E-038.27E-021.53E-052.31E-042.77E-032.97E-02 + 33M3 1.141.21E+021.74E+077.12E+105.75E+131.96E+014.09E+061.20E+113.66E+14 + 33M3 2.142.65E+017.24E+051.33E+097.23E+112.86E+001.76E+051.59E+092.06E+12 + 33M3 4.144.22E+002.57E+042.18E+077.37E+093.79E-016.53E+031.83E+071.05E+10 + 33M3 8.145.22E-018.44E+023.40E+056.65E+074.77E-022.25E+022.06E+055.61E+07 + 33M3 15.146.60E-023.68E+017.58E+038.68E+057.11E-031.03E+013.74E+035.32E+05 + 33M3 25.001.13E-022.92E+003.52E+022.57E+041.52E-038.62E-011.59E+021.37E+04 + 33M3 40.002.06E-032.71E-011.98E+019.38E+023.58E-048.63E-028.86E+004.81E+02 + 33M3 52.007.80E-047.20E-023.99E+001.48E+021.59E-042.42E-021.82E+007.70E+01 + 33M3 70.002.58E-041.61E-026.49E-011.83E+016.37E-055.80E-033.13E-011.00E+01 + 33M3 103.006.12E-052.30E-036.20E-021.22E+001.94E-059.34E-043.32E-027.45E-01 + 33M3 150.001.51E-053.55E-046.42E-038.88E-026.19E-061.64E-043.95E-036.35E-02 + 33M4 1.047.82E+012.50E+051.90E+103.46E+142.41E+004.92E+047.37E+081.67E+12 + 33M4 2.046.55E+007.74E+031.63E+081.07E+122.43E-011.64E+038.75E+061.13E+10 + 33M4 4.044.43E-012.18E+021.27E+063.27E+092.21E-025.09E+011.05E+057.31E+07 + 33M4 8.042.47E-025.52E+009.53E+031.02E+071.81E-031.52E+001.28E+034.72E+05 + 33M4 15.041.57E-031.80E-011.11E+025.54E+041.73E-046.17E-022.43E+014.89E+03 + 33M4 25.001.56E-041.07E-023.02E+008.30E+022.45E-054.55E-039.91E-011.22E+02 + 33M4 40.001.76E-057.58E-041.09E-011.75E+013.89E-064.06E-045.22E-024.08E+00 + 33M4 52.005.14E-061.72E-041.71E-022.06E+001.38E-061.05E-041.01E-026.17E-01 + 33M4 70.001.27E-063.22E-052.14E-031.85E-014.22E-072.29E-051.60E-037.35E-02 + 33M4 103.002.06E-073.71E-061.48E-048.36E-039.01E-083.17E-061.48E-044.73E-03 + 33M4 150.003.79E-084.64E-071.14E-054.29E-042.00E-084.66E-071.49E-053.38E-04 + 33M5 1.041.15E+023.54E+052.85E+105.05E+141.55E+006.92E+033.18E+092.39E+14 + 33M5 2.049.56E+001.09E+042.43E+081.55E+121.62E-012.41E+022.87E+076.08E+11 + 33M5 4.046.42E-013.05E+021.89E+064.70E+091.53E-028.03E+002.43E+051.51E+09 + 33M5 8.043.56E-027.67E+001.41E+041.44E+071.32E-032.63E-012.00E+033.95E+06 + 33M5 15.042.25E-032.47E-011.61E+027.69E+041.32E-041.18E-022.57E+011.97E+04 + 33M5 25.002.22E-041.44E-024.29E+001.12E+031.94E-059.50E-047.62E-012.90E+02 + 33M5 40.002.49E-051.00E-031.50E-012.27E+013.20E-069.23E-053.02E-026.30E+00 + 33M5 52.007.26E-062.25E-042.33E-022.60E+001.16E-062.52E-055.05E-037.65E-01 + 33M5 70.001.79E-064.14E-052.82E-032.24E-013.66E-075.81E-066.76E-047.21E-02 + 33M5 103.002.89E-074.62E-061.85E-049.41E-038.21E-088.80E-075.13E-053.50E-03 + 33M5 150.005.26E-085.59E-071.34E-054.41E-041.93E-081.43E-074.36E-061.94E-04 + 34K 13.662.04E+012.04E+026.07E+021.28E+032.85E+011.84E+032.08E+048.13E+04 + 34K 14.361.79E+012.13E+021.05E+034.16E+032.46E+011.52E+032.03E+041.30E+05 + 34K 15.661.42E+012.08E+021.62E+031.12E+041.90E+011.08E+031.75E+041.77E+05 + 34K 18.868.62E+001.57E+021.90E+032.13E+041.09E+015.20E+021.02E+041.58E+05 + 34K 22.665.22E+001.02E+021.46E+031.96E+046.36E+002.53E+025.26E+039.40E+04 + 34K 27.003.21E+006.32E+019.43E+021.35E+043.79E+001.28E+022.61E+034.82E+04 + 34K 33.001.82E+003.44E+015.07E+027.16E+032.10E+005.87E+011.12E+032.01E+04 + 34K 41.009.77E-011.70E+012.35E+023.12E+031.12E+002.55E+014.38E+027.21E+03 + 34K 53.004.63E-017.07E+008.71E+011.03E+035.33E-019.61E+001.41E+022.02E+03 + 34K 66.002.43E-013.26E+003.56E+013.73E+022.86E-014.23E+005.35E+016.65E+02 + 34K 83.001.23E-011.42E+001.35E+011.23E+021.51E-011.82E+001.95E+012.06E+02 + 34K 96.007.97E-028.37E-017.23E+005.97E+011.01E-011.07E+001.03E+019.81E+01 + 34K 113.004.90E-024.60E-013.56E+002.64E+016.48E-026.00E-015.08E+004.29E+01 + 34K 136.002.82E-022.32E-011.58E+001.03E+013.94E-023.13E-012.30E+001.69E+01 + 34K 165.001.59E-021.14E-016.80E-013.88E+002.37E-021.61E-011.02E+006.47E+00 + 34K 230.006.02E-033.38E-021.61E-017.36E-011.01E-025.35E-022.65E-011.31E+00 + 34K 315.002.48E-031.11E-024.31E-021.60E-014.62E-031.97E-027.84E-023.08E-01 + 34K 400.001.30E-034.97E-031.66E-025.32E-022.60E-039.55E-033.24E-021.09E-01 + 34K 510.007.03E-042.30E-036.66E-031.85E-021.48E-034.71E-031.38E-023.97E-02 + 34K 740.002.98E-047.94E-041.89E-034.34E-036.43E-041.70E-034.07E-039.50E-03 + 34K 1000.001.61E-043.74E-047.78E-041.56E-033.40E-047.85E-041.64E-033.32E-03 + 34K 1250.001.07E-042.26E-044.32E-047.96E-042.16E-044.57E-048.76E-041.61E-03 + 34K 1500.007.85E-051.55E-042.78E-044.81E-041.51E-043.00E-045.39E-049.30E-04 + 34L1 2.655.10E+012.02E+048.67E+061.02E+093.93E+026.40E+051.83E+081.93E+10 + 34L1 3.353.34E+014.46E+032.94E+064.92E+081.95E+022.10E+054.95E+075.88E+09 + 34L1 4.651.76E+013.00E+024.62E+059.64E+077.31E+014.50E+047.98E+069.20E+08 + 34L1 7.855.68E+002.04E+011.07E+043.21E+061.53E+014.03E+034.47E+053.97E+07 + 34L1 11.652.25E+002.97E+011.23E+021.30E+054.70E+006.87E+025.29E+043.56E+06 + 34L1 15.001.21E+002.08E+017.63E+019.77E+032.21E+002.27E+021.38E+047.60E+05 + 34L1 21.005.14E-019.80E+009.80E+014.21E+028.16E-015.32E+012.36E+039.85E+04 + 34L1 29.002.18E-014.03E+005.02E+014.44E+023.15E-011.37E+014.49E+021.42E+04 + 34L1 41.008.46E-021.38E+001.70E+011.81E+021.15E-013.32E+007.88E+011.83E+03 + 34L1 54.003.91E-025.58E-016.24E+006.37E+015.20E-021.11E+002.03E+013.69E+02 + 34L1 71.001.78E-022.18E-012.14E+001.95E+012.40E-023.83E-015.47E+007.76E+01 + 34L1 84.001.10E-021.21E-011.08E+009.02E+001.50E-022.02E-012.48E+003.03E+01 + 34L1 101.006.41E-036.27E-025.00E-013.77E+009.02E-031.02E-011.06E+001.10E+01 + 34L1 124.003.52E-033.00E-022.10E-011.40E+005.17E-034.83E-024.19E-013.64E+00 + 34L1 150.002.02E-031.50E-029.34E-025.51E-013.11E-032.45E-021.81E-011.34E+00 + 34L1 215.007.12E-044.12E-032.02E-029.45E-021.22E-037.15E-033.93E-022.16E-01 + 34L1 300.002.79E-041.28E-035.07E-031.92E-025.30E-042.42E-031.03E-024.39E-02 + 34L1 390.001.38E-045.30E-041.79E-035.80E-032.81E-041.08E-033.83E-031.34E-02 + 34L1 500.007.34E-052.42E-047.08E-041.99E-031.57E-045.17E-041.57E-034.68E-03 + 34L1 730.003.07E-058.23E-051.98E-044.58E-046.71E-051.81E-044.44E-041.06E-03 + 34L11000.001.61E-053.75E-057.84E-051.58E-043.44E-058.03E-051.70E-043.48E-04 + 34L2 2.489.51E+011.50E+061.80E+094.17E+114.26E+012.99E+045.31E+065.84E+08 + 34L2 3.184.57E+014.26E+054.04E+081.03E+111.97E+011.10E+042.16E+063.02E+08 + 34L2 4.481.60E+017.51E+045.14E+071.24E+106.81E+002.77E+035.14E+057.43E+07 + 34L2 7.682.86E+004.94E+031.99E+063.62E+081.27E+003.11E+024.36E+045.08E+06 + 34L2 11.487.47E-016.54E+021.76E+052.40E+073.64E-016.05E+016.40E+035.74E+05 + 34L2 15.002.98E-011.71E+023.50E+043.87E+061.58E-012.03E+011.74E+031.28E+05 + 34L2 21.009.20E-023.18E+014.62E+033.85E+055.51E-025.13E+003.35E+021.89E+04 + 34L2 29.002.90E-026.35E+006.64E+024.18E+042.01E-021.37E+006.80E+012.94E+03 + 34L2 41.008.26E-031.14E+008.36E+013.87E+036.77E-033.33E-011.22E+013.94E+02 + 34L2 54.003.00E-032.92E-011.62E+015.87E+022.85E-031.08E-013.12E+007.94E+01 + 34L2 71.001.09E-037.62E-023.22E+009.11E+011.21E-033.55E-028.06E-011.62E+01 + 34L2 84.005.85E-043.35E-021.20E+002.92E+017.13E-041.80E-023.52E-016.11E+00 + 34L2 101.002.95E-041.37E-024.11E-018.48E+004.00E-048.54E-031.42E-012.11E+00 + 34L2 124.001.38E-045.12E-031.26E-012.17E+002.11E-043.74E-035.24E-026.52E-01 + 34L2 150.006.90E-052.07E-034.25E-026.20E-011.16E-041.75E-032.09E-022.22E-01 + 34L2 215.001.88E-053.88E-045.71E-036.14E-023.81E-054.24E-043.76E-032.98E-02 + 34L2 300.005.84E-068.65E-059.50E-047.79E-031.37E-051.17E-048.00E-044.91E-03 + 34L2 390.002.39E-062.76E-052.44E-041.63E-036.20E-064.34E-052.45E-041.24E-03 + 34L2 500.001.06E-069.78E-067.06E-053.94E-042.95E-061.73E-058.26E-053.53E-04 + 34L2 730.003.29E-072.20E-061.19E-055.16E-059.70E-074.48E-061.69E-055.72E-05 + 34L21000.001.30E-076.91E-073.02E-061.08E-053.94E-071.53E-064.83E-061.38E-05 + 34L3 2.441.90E+023.00E+063.69E+098.78E+111.54E+017.21E+054.98E+093.64E+12 + 34L3 3.148.95E+018.31E+058.05E+082.09E+117.04E+002.04E+058.97E+085.21E+11 + 34L3 4.443.07E+011.43E+059.86E+072.41E+102.41E+003.62E+048.71E+073.67E+10 + 34L3 7.645.32E+009.05E+033.64E+066.63E+084.50E-012.42E+032.39E+066.03E+08 + 34L3 11.441.36E+001.17E+033.11E+054.23E+071.29E-013.24E+021.73E+052.98E+07 + 34L3 15.005.33E-012.95E+025.95E+046.51E+065.61E-028.41E+013.04E+044.05E+06 + 34L3 21.001.62E-015.37E+017.63E+036.29E+051.98E-021.59E+013.63E+033.52E+05 + 34L3 29.005.06E-021.05E+011.06E+036.59E+047.31E-033.24E+004.88E+023.48E+04 + 34L3 41.001.42E-021.81E+001.28E+025.81E+032.51E-035.95E-015.88E+013.03E+03 + 34L3 54.005.09E-034.49E-012.37E+018.38E+021.07E-031.56E-011.12E+014.48E+02 + 34L3 71.001.83E-031.13E-014.46E+001.23E+024.59E-044.20E-022.22E+006.89E+01 + 34L3 84.009.74E-044.83E-021.60E+003.77E+012.73E-041.89E-028.32E-012.21E+01 + 34L3 101.004.89E-041.91E-025.23E-011.04E+011.55E-047.91E-032.87E-016.46E+00 + 34L3 124.002.28E-046.86E-031.51E-012.48E+008.27E-053.03E-038.89E-021.67E+00 + 34L3 150.001.13E-042.67E-034.81E-026.63E-014.64E-051.26E-033.04E-024.85E-01 + 34L3 215.003.06E-054.60E-045.68E-035.62E-021.57E-052.47E-044.17E-034.93E-02 + 34L3 300.009.61E-069.50E-058.23E-046.03E-035.94E-065.71E-056.97E-046.34E-03 + 34L3 390.004.07E-062.88E-051.89E-041.10E-032.82E-061.88E-051.77E-041.33E-03 + 34L3 500.001.87E-069.79E-064.95E-052.32E-041.42E-066.82E-065.04E-053.15E-04 + 34L3 730.006.21E-072.14E-067.42E-062.54E-055.33E-071.61E-068.02E-063.86E-05 + 34L31000.002.76E-076.91E-071.80E-064.82E-062.50E-075.45E-071.91E-067.37E-06 + 34M1 1.233.08E+016.86E+041.63E+078.51E+086.22E+024.66E+065.90E+092.73E+12 + 34M1 2.231.18E+013.61E+032.39E+063.60E+081.05E+022.58E+051.47E+084.56E+10 + 34M1 4.233.41E+003.77E+018.80E+042.14E+071.54E+011.22E+043.17E+065.93E+08 + 34M1 8.237.92E-015.79E+007.43E+022.89E+052.10E+005.54E+026.91E+047.25E+06 + 34M1 15.231.80E-013.25E+001.63E+011.18E+033.36E-013.54E+012.32E+031.39E+05 + 34M1 25.005.03E-029.55E-011.13E+018.06E+017.74E-024.19E+001.67E+026.35E+03 + 34M1 40.001.41E-022.32E-012.85E+003.00E+011.96E-025.98E-011.50E+013.69E+02 + 34M1 52.006.78E-039.82E-021.11E+001.13E+019.20E-032.09E-014.07E+007.85E+01 + 34M1 70.002.91E-033.57E-023.49E-013.19E+003.96E-036.53E-029.63E-011.41E+01 + 34M1 103.009.52E-049.14E-037.22E-025.40E-011.36E-031.52E-021.58E-011.63E+00 + 34M1 150.003.18E-042.36E-031.46E-028.57E-024.93E-043.92E-032.92E-022.18E-01 + 34M2 1.176.06E+019.81E+063.99E+103.12E+136.27E+011.49E+058.88E+073.51E+10 + 34M2 2.171.43E+014.35E+058.01E+084.29E+119.52E+001.02E+044.19E+061.30E+09 + 34M2 4.172.42E+001.62E+041.39E+074.64E+091.28E+006.49E+021.66E+053.47E+07 + 34M2 8.173.15E-015.51E+022.25E+054.40E+071.62E-013.98E+016.00E+037.62E+05 + 34M2 15.174.15E-022.49E+015.26E+036.05E+052.38E-023.13E+002.79E+022.15E+04 + 34M2 25.007.41E-032.07E+002.58E+021.90E+045.02E-034.03E-012.32E+011.17E+03 + 34M2 40.001.38E-032.02E-011.54E+017.43E+021.16E-035.89E-022.24E+007.48E+01 + 34M2 52.005.33E-045.53E-023.24E+001.23E+025.09E-042.02E-026.07E-011.61E+01 + 34M2 70.001.79E-041.29E-025.58E-011.61E+012.01E-046.02E-031.39E-012.85E+00 + 34M2 103.004.34E-051.98E-035.87E-021.20E+006.00E-051.26E-032.08E-023.05E-01 + 34M2 150.001.09E-053.30E-046.80E-039.96E-021.86E-052.80E-043.35E-033.57E-02 + 34M3 1.161.20E+021.87E+077.64E+105.94E+132.17E+014.67E+061.40E+114.30E+14 + 34M3 2.162.75E+018.11E+051.49E+097.92E+113.26E+002.10E+051.96E+092.57E+12 + 34M3 4.164.53E+002.95E+042.52E+078.34E+094.38E-017.97E+032.31E+071.34E+10 + 34M3 8.165.76E-019.82E+023.96E+057.66E+075.56E-022.78E+022.63E+057.18E+07 + 34M3 15.167.41E-024.31E+018.90E+031.01E+068.33E-031.28E+014.76E+036.78E+05 + 34M3 25.001.29E-023.45E+004.17E+023.02E+041.79E-031.08E+002.03E+021.74E+04 + 34M3 40.002.37E-033.21E-012.35E+011.11E+034.22E-041.07E-011.12E+016.09E+02 + 34M3 52.009.02E-048.53E-024.74E+001.75E+021.88E-043.00E-022.30E+009.71E+01 + 34M3 70.003.00E-041.90E-027.73E-012.16E+017.54E-057.19E-033.93E-011.25E+01 + 34M3 103.007.15E-052.73E-037.40E-021.45E+002.30E-051.15E-034.14E-029.31E-01 + 34M3 150.001.78E-054.23E-047.66E-031.06E-017.34E-062.01E-044.90E-037.90E-02 + 34M4 1.068.84E+012.90E+052.29E+104.24E+142.91E+006.10E+049.32E+082.06E+12 + 34M4 2.067.75E+009.33E+032.06E+081.38E+123.03E-012.11E+031.15E+071.46E+10 + 34M4 4.065.42E-012.70E+021.66E+064.34E+092.81E-026.71E+011.41E+059.73E+07 + 34M4 8.063.11E-026.99E+001.26E+041.37E+072.34E-032.03E+001.74E+036.35E+05 + 34M4 15.062.01E-032.32E-011.48E+027.49E+042.26E-048.28E-023.30E+016.63E+03 + 34M4 25.002.03E-041.39E-024.06E+001.13E+033.24E-056.15E-031.35E+001.67E+02 + 34M4 40.002.30E-059.98E-041.46E-012.39E+015.17E-065.50E-047.13E-025.58E+00 + 34M4 52.006.78E-062.28E-042.31E-022.81E+001.84E-061.43E-041.39E-028.45E-01 + 34M4 70.001.69E-064.28E-052.89E-032.52E-015.64E-073.11E-052.19E-031.01E-01 + 34M4 103.002.74E-074.95E-062.00E-041.14E-021.21E-074.31E-062.03E-046.48E-03 + 34M4 150.004.88E-086.21E-071.54E-055.87E-042.69E-086.35E-072.04E-054.64E-04 + 34M5 1.061.30E+024.09E+053.43E+106.17E+141.87E+008.49E+034.06E+093.15E+14 + 34M5 2.061.13E+011.31E+043.08E+082.01E+122.00E-013.07E+023.86E+078.50E+11 + 34M5 4.067.85E-013.77E+022.47E+066.24E+091.93E-021.04E+013.35E+052.17E+09 + 34M5 8.064.47E-029.68E+001.86E+041.94E+071.69E-033.45E-012.80E+035.72E+06 + 34M5 15.062.87E-033.17E-012.15E+021.04E+051.71E-041.55E-023.61E+012.84E+04 + 34M5 25.002.88E-041.87E-025.78E+001.53E+032.54E-051.26E-031.08E+004.19E+02 + 34M5 40.003.26E-051.32E-032.03E-013.10E+014.22E-061.23E-044.24E-029.02E+00 + 34M5 52.009.57E-062.96E-043.14E-023.54E+001.53E-063.35E-057.08E-031.09E+00 + 34M5 70.002.38E-065.47E-053.81E-033.05E-014.86E-077.75E-069.47E-041.02E-01 + 34M5 103.003.89E-076.15E-062.50E-041.28E-021.09E-071.18E-067.15E-054.95E-03 + 34M5 150.007.04E-087.50E-071.82E-056.02E-042.59E-081.92E-076.04E-062.73E-04 + 35K 14.471.81E+011.69E+024.51E+028.28E+022.73E+011.66E+031.74E+046.12E+04 + 35K 15.171.60E+011.77E+027.79E+022.73E+032.37E+011.38E+031.71E+049.84E+04 + 35K 16.471.29E+011.74E+021.23E+037.53E+031.86E+019.97E+021.49E+041.37E+05 + 35K 19.678.02E+001.35E+021.50E+031.53E+041.10E+014.97E+029.12E+031.29E+05 + 35K 23.474.95E+009.09E+011.20E+031.49E+046.50E+002.49E+024.87E+038.08E+04 + 35K 27.003.36E+006.26E+018.70E+021.15E+044.30E+001.45E+022.81E+034.87E+04 + 35K 33.001.91E+003.46E+014.84E+026.49E+032.38E+006.63E+011.23E+032.10E+04 + 35K 41.001.03E+001.73E+012.30E+022.94E+031.27E+002.88E+014.82E+027.68E+03 + 35K 53.004.90E-017.29E+008.71E+011.00E+036.04E-011.08E+011.56E+022.19E+03 + 35K 66.002.58E-013.38E+003.60E+013.69E+023.23E-014.76E+005.93E+017.26E+02 + 35K 83.001.31E-011.49E+001.38E+011.23E+021.70E-012.04E+002.16E+012.26E+02 + 35K 96.008.49E-028.77E-017.44E+006.04E+011.14E-011.21E+001.15E+011.08E+02 + 35K 113.005.23E-024.83E-013.68E+002.69E+017.29E-026.73E-015.65E+004.72E+01 + 35K 136.003.02E-022.44E-011.65E+001.06E+014.42E-023.51E-012.56E+001.86E+01 + 35K 165.001.70E-021.20E-017.11E-014.02E+002.65E-021.80E-011.14E+007.16E+00 + 35K 230.006.47E-033.59E-021.70E-017.69E-011.13E-025.98E-022.95E-011.45E+00 + 35K 315.002.67E-031.19E-024.58E-021.69E-015.15E-032.20E-028.71E-023.41E-01 + 35K 400.001.41E-035.33E-031.77E-025.64E-022.89E-031.06E-023.60E-021.20E-01 + 35K 510.007.61E-042.47E-037.14E-031.98E-021.64E-035.24E-031.53E-024.39E-02 + 35K 740.003.23E-048.59E-042.04E-034.67E-037.12E-041.88E-034.51E-031.05E-02 + 35K 1000.001.75E-044.06E-048.44E-041.69E-033.75E-048.69E-041.82E-033.67E-03 + 35K 1250.001.16E-042.46E-044.70E-048.65E-042.38E-045.05E-049.69E-041.79E-03 + 35K 1500.008.50E-051.68E-043.03E-045.23E-041.66E-043.31E-045.95E-041.03E-03 + 35L1 2.784.66E+011.86E+047.19E+067.56E+083.91E+026.13E+051.67E+081.61E+10 + 35L1 3.483.12E+014.44E+032.62E+063.97E+082.00E+022.11E+054.76E+075.27E+09 + 35L1 4.781.68E+013.60E+024.52E+058.66E+077.73E+014.72E+048.12E+068.88E+08 + 35L1 7.985.61E+001.34E+011.26E+043.35E+061.67E+014.44E+034.82E+054.14E+07 + 35L1 11.782.27E+002.56E+012.21E+021.56E+055.22E+007.70E+025.85E+043.84E+06 + 35L1 16.001.07E+001.72E+016.06E+017.51E+032.10E+002.01E+021.15E+045.93E+05 + 35L1 22.004.76E-018.49E+007.75E+013.41E+028.15E-015.09E+012.16E+038.58E+04 + 35L1 30.002.10E-013.65E+004.22E+013.38E+023.27E-011.38E+014.38E+021.33E+04 + 35L1 42.008.37E-021.31E+001.52E+011.51E+021.22E-013.48E+008.06E+011.82E+03 + 35L1 55.003.94E-025.41E-015.79E+005.62E+015.64E-021.19E+002.14E+013.80E+02 + 35L1 72.001.83E-022.16E-012.04E+001.80E+012.63E-024.16E-015.86E+008.19E+01 + 35L1 85.001.13E-021.21E-011.05E+008.50E+001.65E-022.21E-012.68E+003.23E+01 + 35L1 102.006.67E-036.36E-024.94E-013.63E+009.98E-031.12E-011.15E+001.19E+01 + 35L1 125.003.69E-033.07E-022.11E-011.37E+005.74E-035.34E-024.60E-013.96E+00 + 35L1 150.002.17E-031.60E-029.76E-025.67E-013.53E-032.79E-022.05E-011.51E+00 + 35L1 215.007.68E-044.40E-032.13E-029.88E-021.38E-038.10E-034.45E-022.44E-01 + 35L1 300.003.02E-041.37E-035.41E-032.03E-025.97E-042.73E-031.17E-024.94E-02 + 35L1 390.001.50E-045.73E-041.92E-036.19E-033.16E-041.21E-034.31E-031.51E-02 + 35L1 500.008.01E-052.63E-047.64E-042.14E-031.76E-045.81E-041.76E-035.25E-03 + 35L1 730.003.35E-058.96E-052.15E-044.97E-047.50E-052.03E-044.98E-041.19E-03 + 35L11000.001.76E-054.10E-058.57E-051.73E-043.82E-058.98E-051.90E-043.89E-04 + 35L2 2.608.83E+011.36E+061.55E+093.30E+114.26E+012.84E+044.62E+064.54E+08 + 35L2 3.304.38E+014.06E+053.71E+088.85E+102.04E+011.09E+041.99E+062.55E+08 + 35L2 4.601.59E+017.57E+045.04E+071.16E+107.28E+002.87E+035.04E+056.84E+07 + 35L2 7.802.97E+005.27E+032.09E+063.68E+081.41E+003.37E+024.58E+045.12E+06 + 35L2 11.607.95E-017.16E+021.91E+052.54E+074.10E-016.71E+016.93E+036.05E+05 + 35L2 16.002.65E-011.43E+022.74E+042.84E+061.50E-011.81E+011.46E+031.01E+05 + 35L2 22.008.71E-022.91E+014.04E+033.21E+055.56E-024.93E+003.06E+021.65E+04 + 35L2 30.002.89E-026.21E+006.28E+023.82E+042.11E-021.39E+006.64E+012.77E+03 + 35L2 42.008.54E-031.17E+008.41E+013.80E+037.35E-033.52E-011.26E+013.94E+02 + 35L2 55.003.18E-033.10E-011.69E+016.01E+023.16E-031.17E-013.31E+008.23E+01 + 35L2 72.001.18E-038.27E-023.46E+009.63E+011.36E-033.93E-028.76E-011.73E+01 + 35L2 85.006.40E-043.69E-021.31E+003.14E+018.08E-042.01E-023.87E-016.63E+00 + 35L2 102.003.27E-041.53E-024.53E-019.25E+004.57E-049.63E-031.59E-012.32E+00 + 35L2 125.001.55E-045.76E-031.41E-012.40E+002.42E-044.26E-035.90E-027.27E-01 + 35L2 150.007.94E-052.43E-034.99E-027.26E-011.37E-042.06E-032.45E-022.59E-01 + 35L2 215.002.16E-054.55E-046.72E-037.21E-024.51E-055.00E-044.42E-033.50E-02 + 35L2 300.006.71E-061.02E-041.12E-039.17E-031.63E-051.38E-049.45E-045.78E-03 + 35L2 390.002.76E-063.26E-052.88E-041.92E-037.35E-065.14E-052.90E-041.47E-03 + 35L2 500.001.23E-061.15E-058.35E-054.66E-043.50E-062.06E-059.79E-054.18E-04 + 35L2 730.003.79E-072.59E-061.41E-056.12E-051.15E-065.34E-062.01E-056.78E-05 + 35L21000.001.50E-078.18E-073.59E-061.28E-054.68E-071.82E-065.76E-061.64E-05 + 35L3 2.551.77E+022.73E+063.20E+097.00E+111.52E+016.97E+054.64E+093.24E+12 + 35L3 3.258.60E+017.95E+057.42E+081.80E+117.21E+002.08E+058.96E+085.02E+11 + 35L3 4.553.06E+011.44E+059.68E+072.24E+102.55E+003.88E+049.30E+073.82E+10 + 35L3 7.755.52E+009.64E+033.81E+066.73E+084.92E-012.72E+032.72E+066.77E+08 + 35L3 11.551.45E+001.28E+033.36E+054.47E+071.44E-013.74E+022.02E+053.45E+07 + 35L3 16.004.70E-012.45E+024.61E+044.73E+065.26E-027.41E+012.51E+043.14E+06 + 35L3 22.001.53E-014.88E+016.60E+035.18E+051.97E-021.53E+013.36E+033.11E+05 + 35L3 30.004.99E-021.01E+019.93E+025.94E+047.55E-033.32E+004.88E+023.37E+04 + 35L3 42.001.45E-021.84E+001.27E+025.62E+032.67E-036.39E-016.23E+013.13E+03 + 35L3 55.005.35E-034.72E-012.45E+018.47E+021.16E-031.73E-011.23E+014.81E+02 + 35L3 72.001.96E-031.21E-014.74E+001.28E+025.05E-044.73E-022.49E+007.62E+01 + 35L3 85.001.06E-035.25E-021.73E+004.00E+013.03E-042.14E-029.43E-012.48E+01 + 35L3 102.005.36E-042.10E-025.71E-011.12E+011.73E-049.05E-033.28E-017.33E+00 + 35L3 125.002.52E-047.62E-031.67E-012.71E+009.30E-053.49E-031.03E-011.92E+00 + 35L3 150.001.29E-043.09E-035.58E-027.67E-015.35E-051.50E-033.67E-025.86E-01 + 35L3 215.003.53E-055.33E-046.59E-036.51E-021.82E-052.93E-045.00E-035.93E-02 + 35L3 300.001.11E-051.10E-049.57E-047.00E-036.85E-066.76E-058.35E-047.61E-03 + 35L3 390.004.65E-063.34E-052.20E-041.27E-033.25E-062.21E-052.12E-041.59E-03 + 35L3 500.002.13E-061.13E-055.77E-052.70E-041.64E-068.02E-066.00E-053.76E-04 + 35L3 730.007.18E-072.48E-068.63E-062.96E-056.15E-071.88E-069.51E-064.60E-05 + 35L31000.003.16E-077.97E-072.09E-065.61E-062.89E-076.34E-072.26E-068.76E-06 + 35M1 1.262.98E+017.01E+041.39E+071.40E+096.83E+025.19E+066.61E+092.96E+12 + 35M1 2.261.17E+014.06E+032.38E+063.09E+081.18E+023.00E+051.72E+085.23E+10 + 35M1 4.263.46E+005.60E+019.86E+042.21E+071.76E+011.44E+043.78E+066.98E+08 + 35M1 8.268.20E-014.52E+001.03E+033.41E+052.43E+006.59E+028.25E+048.59E+06 + 35M1 15.261.89E-013.09E+001.16E+011.84E+033.89E-014.20E+012.75E+031.65E+05 + 35M1 25.005.35E-029.60E-011.02E+016.28E+019.01E-024.97E+001.98E+027.52E+03 + 35M1 40.001.51E-022.40E-012.79E+002.73E+012.28E-027.04E-011.77E+014.34E+02 + 35M1 52.007.30E-031.03E-011.11E+001.08E+011.07E-022.45E-014.77E+009.19E+01 + 35M1 70.003.15E-033.77E-023.58E-013.17E+004.59E-037.62E-021.12E+001.65E+01 + 35M1 103.001.04E-039.76E-037.55E-025.53E-011.57E-031.77E-021.83E-011.89E+00 + 35M1 150.003.46E-042.54E-031.55E-028.95E-025.68E-044.53E-033.38E-022.52E-01 + 35M2 1.196.03E+011.05E+074.30E+103.26E+137.01E+011.66E+059.62E+073.59E+10 + 35M2 2.191.48E+014.87E+059.02E+084.72E+111.09E+011.18E+044.70E+061.41E+09 + 35M2 4.192.59E+001.85E+041.60E+075.26E+091.50E+007.57E+021.91E+053.89E+07 + 35M2 8.193.47E-016.40E+022.63E+055.07E+071.90E-014.69E+016.96E+038.71E+05 + 35M2 15.194.66E-022.92E+016.18E+037.05E+052.82E-023.70E+003.27E+022.49E+04 + 35M2 25.008.45E-032.45E+003.06E+022.25E+045.99E-034.80E-012.75E+011.37E+03 + 35M2 40.001.59E-032.39E-011.84E+018.80E+021.38E-037.03E-022.66E+008.82E+01 + 35M2 52.006.17E-046.57E-023.85E+001.45E+026.10E-042.41E-027.22E-011.91E+01 + 35M2 70.002.09E-041.53E-026.66E-011.92E+012.41E-047.21E-031.66E-013.38E+00 + 35M2 103.005.08E-052.36E-037.02E-021.43E+007.22E-051.52E-032.49E-023.63E-01 + 35M2 150.001.28E-053.95E-048.16E-031.19E-012.24E-053.37E-044.02E-034.27E-02 + 35M3 1.181.20E+022.01E+078.27E+106.23E+132.41E+015.34E+061.64E+115.10E+14 + 35M3 2.182.86E+019.08E+051.68E+098.73E+113.70E+002.50E+052.42E+093.20E+12 + 35M3 4.184.85E+003.38E+042.89E+079.43E+095.05E-019.69E+032.91E+071.71E+10 + 35M3 8.186.33E-011.14E+034.61E+058.79E+076.45E-023.41E+023.33E+059.16E+07 + 35M3 15.188.29E-025.02E+011.04E+041.17E+069.71E-031.58E+016.02E+038.61E+05 + 35M3 25.001.47E-024.05E+004.92E+023.55E+042.10E-031.33E+002.57E+022.21E+04 + 35M3 40.002.72E-033.78E-012.78E+011.30E+034.96E-041.33E-011.41E+017.67E+02 + 35M3 52.001.04E-031.00E-015.60E+002.06E+022.21E-043.71E-022.88E+001.22E+02 + 35M3 70.003.47E-042.25E-029.15E-012.55E+018.87E-058.86E-034.90E-011.57E+01 + 35M3 103.008.31E-053.23E-038.77E-021.71E+002.71E-051.41E-035.14E-021.16E+00 + 35M3 150.002.08E-055.01E-049.10E-031.25E-018.66E-062.46E-046.06E-039.78E-02 + 35M4 1.079.92E+013.35E+052.74E+105.21E+143.48E+007.55E+041.18E+092.56E+12 + 35M4 2.079.07E+001.12E+042.59E+081.78E+123.73E-012.70E+031.51E+071.89E+10 + 35M4 4.076.55E-013.31E+022.14E+065.71E+093.52E-028.73E+011.86E+051.28E+08 + 35M4 8.073.85E-028.73E+001.65E+041.81E+072.98E-032.67E+002.32E+038.45E+05 + 35M4 15.072.54E-032.94E-011.95E+029.99E+042.91E-041.10E-014.42E+018.86E+03 + 35M4 25.002.59E-041.79E-025.37E+001.52E+034.21E-058.19E-031.82E+002.24E+02 + 35M4 40.002.96E-051.29E-031.94E-013.20E+016.76E-067.34E-049.60E-027.51E+00 + 35M4 52.008.81E-062.97E-043.07E-023.77E+002.41E-061.91E-041.87E-021.14E+00 + 35M4 70.002.22E-065.60E-053.84E-033.39E-017.42E-074.16E-052.96E-031.36E-01 + 35M4 103.003.62E-076.50E-062.66E-041.54E-021.59E-075.78E-062.74E-048.75E-03 + 35M4 150.006.25E-088.20E-072.06E-057.91E-043.56E-088.53E-072.76E-056.27E-04 + 35M5 1.071.46E+024.73E+054.15E+107.66E+142.23E+001.04E+045.23E+094.19E+14 + 35M5 2.071.32E+011.57E+043.89E+082.59E+122.45E-013.88E+025.17E+071.18E+12 + 35M5 4.079.48E-014.61E+023.19E+068.22E+092.41E-021.33E+014.58E+053.08E+09 + 35M5 8.075.53E-021.21E+012.43E+042.57E+072.14E-034.46E-013.85E+038.16E+06 + 35M5 15.073.61E-034.01E-012.83E+021.38E+052.18E-042.02E-024.99E+014.04E+04 + 35M5 25.003.68E-042.40E-027.66E+002.05E+033.28E-051.64E-031.49E+005.95E+02 + 35M5 40.004.20E-051.70E-032.69E-014.15E+015.48E-061.61E-045.88E-021.27E+01 + 35M5 52.001.24E-053.84E-044.17E-024.74E+002.00E-064.39E-059.79E-031.53E+00 + 35M5 70.003.08E-067.11E-055.06E-034.09E-016.35E-071.02E-051.30E-031.43E-01 + 35M5 103.005.06E-078.04E-063.33E-041.72E-021.43E-071.55E-069.80E-056.89E-03 + 35M5 150.009.37E-089.89E-072.42E-058.08E-043.40E-082.53E-078.25E-063.79E-04 + 36K 15.331.62E+011.40E+023.37E+025.40E+022.61E+011.49E+031.46E+044.62E+04 + 36K 16.031.44E+011.47E+025.82E+021.81E+032.28E+011.25E+031.44E+047.46E+04 + 36K 17.331.17E+011.46E+029.28E+025.10E+031.81E+019.20E+021.28E+041.06E+05 + 36K 20.537.45E+001.17E+021.18E+031.10E+041.10E+014.74E+028.09E+031.05E+05 + 36K 24.334.69E+008.04E+019.81E+021.13E+046.63E+002.44E+024.48E+036.92E+04 + 36K 28.003.18E+005.57E+017.25E+028.98E+034.37E+001.41E+022.60E+034.23E+04 + 36K 34.001.85E+003.16E+014.18E+025.29E+032.47E+006.65E+011.17E+031.90E+04 + 36K 42.001.01E+001.63E+012.06E+022.51E+031.33E+002.95E+014.75E+027.25E+03 + 36K 54.004.90E-017.02E+008.07E+018.91E+026.46E-011.13E+011.59E+022.15E+03 + 36K 67.002.61E-013.32E+003.42E+013.38E+023.49E-015.06E+006.14E+017.30E+02 + 36K 84.001.34E-011.48E+001.34E+011.16E+021.85E-012.20E+002.28E+012.33E+02 + 36K 97.008.75E-028.83E-017.30E+005.79E+011.24E-011.30E+001.21E+011.12E+02 + 36K 114.005.42E-024.90E-013.66E+002.61E+017.98E-027.30E-016.04E+004.96E+01 + 36K 137.003.15E-022.50E-011.66E+001.05E+014.86E-023.83E-012.76E+001.98E+01 + 36K 165.001.82E-021.27E-017.42E-014.14E+002.97E-022.02E-011.26E+007.89E+00 + 36K 230.006.94E-033.81E-021.79E-018.01E-011.26E-026.66E-023.27E-011.60E+00 + 36K 315.002.87E-031.27E-024.84E-021.77E-015.73E-032.45E-029.65E-023.77E-01 + 36K 400.001.52E-035.70E-031.88E-025.97E-023.21E-031.18E-023.99E-021.33E-01 + 36K 510.008.21E-042.66E-037.63E-032.11E-021.82E-035.81E-031.70E-024.85E-02 + 36K 740.003.49E-049.28E-042.20E-035.02E-037.86E-042.08E-034.99E-031.16E-02 + 36K 1000.001.89E-044.39E-049.13E-041.83E-034.13E-049.60E-042.01E-034.05E-03 + 36K 1250.001.26E-042.67E-045.10E-049.38E-042.61E-045.58E-041.07E-031.97E-03 + 36K 1500.009.20E-051.83E-043.29E-045.69E-041.82E-043.65E-046.57E-041.13E-03 + 36L1 2.924.24E+011.68E+045.88E+065.49E+083.86E+025.80E+051.50E+081.33E+10 + 36L1 3.622.89E+014.35E+032.29E+063.15E+082.03E+022.08E+054.51E+074.64E+09 + 36L1 4.921.60E+014.15E+024.34E+057.63E+078.10E+014.90E+048.15E+068.43E+08 + 36L1 8.125.51E+008.26E+001.44E+043.41E+061.81E+014.84E+035.14E+054.27E+07 + 36L1 11.922.27E+002.17E+013.55E+021.81E+055.76E+008.58E+026.41E+044.11E+06 + 36L1 16.001.11E+001.59E+013.89E+011.15E+042.40E+002.34E+021.33E+046.82E+05 + 36L1 22.004.96E-018.23E+006.37E+013.63E+029.31E-015.92E+012.50E+039.86E+04 + 36L1 30.002.20E-013.63E+003.85E+012.66E+023.73E-011.60E+015.06E+021.53E+04 + 36L1 42.008.83E-021.33E+001.46E+011.35E+021.40E-014.01E+009.26E+012.08E+03 + 36L1 55.004.17E-025.56E-015.73E+005.30E+016.42E-021.36E+002.45E+014.34E+02 + 36L1 72.001.94E-022.24E-012.06E+001.75E+012.99E-024.76E-016.69E+009.32E+01 + 36L1 85.001.21E-021.26E-011.07E+008.41E+001.87E-022.53E-013.06E+003.68E+01 + 36L1 102.007.13E-036.67E-025.07E-013.64E+001.13E-021.28E-011.31E+001.34E+01 + 36L1 125.003.95E-033.24E-022.18E-011.39E+006.50E-036.06E-025.22E-014.48E+00 + 36L1 150.002.33E-031.69E-021.02E-015.82E-013.98E-033.16E-022.33E-011.71E+00 + 36L1 215.008.29E-044.69E-032.25E-021.03E-011.55E-039.14E-035.02E-022.75E-01 + 36L1 300.003.27E-041.47E-035.75E-032.15E-026.71E-043.08E-031.31E-025.56E-02 + 36L1 390.001.62E-046.17E-042.06E-036.59E-033.54E-041.36E-034.83E-031.70E-02 + 36L1 500.008.67E-052.84E-048.23E-042.30E-031.97E-046.52E-041.97E-035.88E-03 + 36L1 730.003.65E-059.74E-052.33E-045.39E-048.35E-052.27E-045.57E-041.33E-03 + 36L11000.001.92E-054.47E-059.35E-051.88E-044.25E-051.00E-042.12E-044.34E-04 + 36L2 2.738.13E+011.22E+061.31E+092.56E+114.23E+012.66E+043.96E+063.45E+08 + 36L2 3.434.17E+013.83E+053.35E+087.41E+102.09E+011.07E+041.81E+062.11E+08 + 36L2 4.731.58E+017.53E+044.86E+071.05E+107.71E+002.93E+034.87E+056.19E+07 + 36L2 7.933.07E+005.56E+032.16E+063.68E+081.55E+003.62E+024.74E+045.09E+06 + 36L2 11.738.41E-017.78E+022.05E+052.66E+074.59E-017.39E+017.43E+036.30E+05 + 36L2 16.002.93E-011.64E+023.15E+043.23E+061.74E-012.09E+011.66E+031.13E+05 + 36L2 22.009.69E-023.35E+014.65E+033.66E+056.46E-025.70E+003.50E+021.86E+04 + 36L2 30.003.23E-027.16E+007.25E+024.37E+042.45E-021.61E+007.62E+013.15E+03 + 36L2 42.009.62E-031.35E+009.73E+014.37E+038.57E-034.09E-011.45E+014.51E+02 + 36L2 55.003.60E-033.58E-011.96E+016.93E+023.69E-031.37E-013.83E+009.46E+01 + 36L2 72.001.34E-039.58E-024.02E+001.11E+021.59E-034.59E-021.02E+001.99E+01 + 36L2 85.007.28E-044.27E-021.52E+003.64E+019.46E-042.34E-024.50E-017.66E+00 + 36L2 102.003.72E-041.77E-025.28E-011.07E+015.35E-041.13E-021.85E-012.69E+00 + 36L2 125.001.77E-046.70E-031.64E-012.79E+002.84E-044.99E-036.88E-028.44E-01 + 36L2 150.009.10E-052.82E-035.82E-028.46E-011.61E-042.42E-032.86E-023.01E-01 + 36L2 215.002.51E-055.31E-047.86E-038.42E-025.31E-055.88E-045.18E-034.08E-02 + 36L2 300.007.84E-061.19E-041.31E-031.07E-021.92E-051.63E-041.11E-036.77E-03 + 36L2 390.003.22E-063.82E-053.38E-042.26E-038.69E-066.07E-053.41E-041.72E-03 + 36L2 500.001.43E-061.35E-059.83E-055.49E-044.14E-062.43E-051.15E-044.92E-04 + 36L2 730.004.48E-073.05E-061.67E-057.21E-051.37E-066.32E-062.37E-058.01E-05 + 36L21000.001.77E-079.62E-074.24E-061.52E-055.55E-072.16E-066.83E-061.94E-05 + 36L3 2.671.63E+022.44E+062.72E+095.46E+111.50E+016.63E+054.24E+092.82E+12 + 36L3 3.378.19E+017.50E+056.71E+081.52E+117.31E+002.08E+058.76E+084.71E+11 + 36L3 4.673.02E+011.43E+059.35E+072.05E+102.67E+004.09E+049.76E+073.88E+10 + 36L3 7.875.69E+001.02E+043.95E+066.73E+085.34E-013.04E+033.06E+067.47E+08 + 36L3 11.671.53E+001.38E+033.60E+054.67E+071.58E-014.28E+022.35E+053.95E+07 + 36L3 16.005.17E-012.80E+025.27E+045.35E+066.00E-028.94E+013.10E+043.87E+06 + 36L3 22.001.69E-015.58E+017.56E+035.88E+052.24E-021.85E+014.13E+033.81E+05 + 36L3 30.005.55E-021.16E+011.14E+036.76E+048.62E-034.00E+005.98E+024.12E+04 + 36L3 42.001.63E-022.11E+001.46E+026.42E+033.05E-037.68E-017.60E+013.82E+03 + 36L3 55.006.01E-035.41E-012.82E+019.69E+021.33E-032.07E-011.49E+015.84E+02 + 36L3 72.002.21E-031.39E-015.46E+001.47E+025.79E-045.66E-023.02E+009.21E+01 + 36L3 85.001.19E-036.04E-021.99E+004.59E+013.47E-042.56E-021.14E+002.99E+01 + 36L3 102.006.05E-042.42E-026.58E-011.28E+011.99E-041.08E-023.96E-018.84E+00 + 36L3 125.002.86E-048.78E-031.93E-013.12E+001.07E-044.16E-031.23E-012.31E+00 + 36L3 150.001.46E-043.56E-036.45E-028.83E-016.14E-051.79E-034.40E-027.03E-01 + 36L3 215.004.01E-056.15E-047.62E-037.52E-022.09E-053.47E-045.99E-037.10E-02 + 36L3 300.001.26E-051.27E-041.11E-038.09E-037.88E-067.97E-059.95E-049.09E-03 + 36L3 390.005.32E-063.86E-052.54E-041.47E-033.74E-062.60E-052.52E-041.89E-03 + 36L3 500.002.45E-061.31E-056.68E-053.13E-041.89E-069.39E-067.11E-054.48E-04 + 36L3 730.008.26E-072.86E-061.00E-053.43E-057.06E-072.19E-061.12E-055.45E-05 + 36L31000.003.64E-079.22E-072.41E-066.50E-063.31E-077.35E-072.66E-061.04E-05 + 36M1 1.292.84E+016.98E+041.14E+071.95E+097.37E+025.62E+067.13E+093.07E+12 + 36M1 2.291.16E+014.46E+032.33E+062.55E+081.32E+023.41E+051.97E+085.84E+10 + 36M1 4.293.50E+007.77E+011.08E+052.23E+072.00E+011.68E+044.44E+068.08E+08 + 36M1 8.298.45E-013.38E+001.37E+033.94E+052.79E+007.78E+029.75E+041.01E+07 + 36M1 15.291.98E-012.92E+008.61E+002.68E+034.49E-014.95E+013.25E+031.93E+05 + 36M1 25.005.68E-029.62E-019.10E+005.08E+011.04E-015.87E+002.34E+028.87E+03 + 36M1 40.001.62E-022.47E-012.72E+002.46E+012.64E-028.26E-012.08E+015.08E+02 + 36M1 52.007.84E-031.07E-011.11E+001.03E+011.23E-022.86E-015.58E+001.07E+02 + 36M1 70.003.39E-033.96E-023.66E-013.12E+005.29E-038.87E-021.31E+001.91E+01 + 36M1 103.001.12E-031.04E-027.82E-025.53E-011.80E-032.04E-022.12E-012.19E+00 + 36M1 150.003.78E-042.73E-031.64E-029.32E-026.52E-045.22E-033.89E-022.90E-01 + 36M1 280.006.44E-053.03E-041.23E-034.78E-031.30E-046.31E-042.85E-031.28E-02 + 36M1 500.001.42E-054.63E-051.34E-043.74E-043.22E-051.07E-043.25E-049.71E-04 + 36M2 1.225.81E+011.07E+074.31E+103.10E+137.58E+011.77E+059.70E+073.35E+10 + 36M2 2.221.50E+015.28E+059.74E+084.93E+111.23E+011.31E+045.07E+061.45E+09 + 36M2 4.222.74E+002.09E+041.80E+075.78E+091.72E+008.67E+022.14E+054.23E+07 + 36M2 8.223.78E-017.35E+023.02E+055.75E+072.22E-015.45E+017.97E+039.79E+05 + 36M2 15.225.19E-023.39E+017.19E+038.12E+053.32E-024.33E+003.79E+022.85E+04 + 36M2 25.009.59E-032.88E+003.62E+022.64E+047.12E-035.69E-013.23E+011.60E+03 + 36M2 40.001.83E-032.82E-012.17E+011.04E+031.65E-038.35E-023.14E+001.04E+02 + 36M2 52.007.11E-047.75E-024.56E+001.72E+027.28E-042.87E-028.55E-012.24E+01 + 36M2 70.002.42E-041.81E-027.91E-012.27E+012.88E-048.60E-031.97E-013.99E+00 + 36M2 103.005.93E-052.80E-038.36E-021.70E+008.66E-051.81E-032.96E-024.31E-01 + 36M2 150.001.50E-054.70E-049.74E-031.42E-012.69E-054.04E-044.80E-035.08E-02 + 36M3 1.211.16E+022.05E+078.29E+105.94E+132.58E+015.78E+061.78E+115.48E+14 + 36M3 2.212.90E+019.84E+051.81E+099.10E+114.11E+002.87E+052.84E+093.77E+12 + 36M3 4.215.13E+003.80E+043.25E+071.03E+105.73E-011.15E+043.57E+072.11E+10 + 36M3 8.216.88E-011.30E+035.27E+059.92E+077.42E-024.14E+024.16E+051.15E+08 + 36M3 15.219.21E-025.81E+011.20E+041.34E+061.12E-021.93E+017.54E+031.08E+06 + 36M3 25.001.66E-024.74E+005.77E+024.14E+042.45E-031.65E+003.23E+022.79E+04 + 36M3 40.003.10E-034.43E-013.27E+011.53E+035.79E-041.63E-011.76E+019.60E+02 + 36M3 52.001.19E-031.18E-016.59E+002.41E+022.59E-044.56E-023.59E+001.52E+02 + 36M3 70.003.98E-042.64E-021.08E+003.00E+011.04E-041.09E-026.08E-011.95E+01 + 36M3 103.009.60E-053.80E-031.03E-012.01E+003.17E-051.73E-036.35E-021.43E+00 + 36M3 150.002.41E-055.91E-041.07E-021.48E-011.02E-052.99E-047.45E-031.20E-01 + 36M4 1.091.08E+023.73E+053.14E+106.05E+144.05E+008.99E+041.42E+093.01E+12 + 36M4 2.091.04E+011.30E+043.15E+082.21E+124.49E-013.36E+031.91E+072.36E+10 + 36M4 4.097.77E-013.97E+022.69E+067.32E+094.34E-021.11E+022.42E+051.65E+08 + 36M4 8.094.69E-021.07E+012.11E+042.36E+073.74E-033.45E+003.04E+031.10E+06 + 36M4 15.093.15E-033.67E-012.52E+021.31E+053.69E-041.43E-015.82E+011.16E+04 + 36M4 25.003.28E-042.27E-027.02E+002.01E+035.41E-051.08E-022.42E+002.98E+02 + 36M4 40.003.78E-051.66E-032.54E-014.24E+018.73E-069.66E-041.28E-019.97E+00 + 36M4 52.001.12E-053.81E-044.02E-025.00E+003.12E-062.52E-042.49E-021.51E+00 + 36M4 70.002.79E-067.22E-055.04E-034.50E-019.63E-075.49E-053.94E-031.80E-01 + 36M4 103.004.60E-078.44E-063.50E-042.04E-022.08E-077.64E-063.65E-041.17E-02 + 36M4 150.008.39E-081.07E-062.71E-051.05E-034.64E-081.13E-063.68E-058.37E-04 + 36M5 1.091.59E+025.23E+054.72E+108.81E+142.58E+001.22E+046.32E+095.16E+14 + 36M5 2.091.51E+011.82E+044.72E+083.20E+122.94E-014.75E+026.64E+071.57E+12 + 36M5 4.091.12E+005.52E+024.01E+061.05E+102.95E-021.68E+016.08E+054.24E+09 + 36M5 8.096.73E-021.48E+013.12E+043.34E+072.66E-035.66E-015.20E+031.14E+07 + 36M5 15.094.48E-034.98E-013.66E+021.81E+052.75E-042.58E-026.78E+015.64E+04 + 36M5 25.004.63E-043.04E-021.00E+012.70E+034.19E-052.12E-032.04E+008.33E+02 + 36M5 40.005.31E-052.16E-033.52E-015.48E+017.02E-062.07E-048.02E-021.77E+01 + 36M5 52.001.57E-054.91E-045.46E-026.27E+002.57E-065.68E-051.33E-022.12E+00 + 36M5 70.003.91E-069.12E-056.64E-035.41E-018.19E-071.32E-051.77E-031.98E-01 + 36M5 103.006.47E-071.04E-054.37E-042.28E-021.85E-072.01E-061.33E-049.46E-03 + 36M5 150.001.20E-071.27E-063.18E-051.07E-034.40E-083.29E-071.11E-055.18E-04 + 37K 16.201.45E+011.17E+022.57E+023.66E+022.50E+011.34E+031.23E+043.57E+04 + 37K 16.901.30E+011.23E+024.42E+021.22E+032.20E+011.14E+031.22E+045.76E+04 + 37K 18.201.07E+011.23E+027.11E+023.51E+031.77E+018.52E+021.10E+048.30E+04 + 37K 21.406.92E+001.01E+029.34E+027.96E+031.09E+014.53E+027.21E+038.63E+04 + 37K 25.204.44E+007.13E+018.07E+028.60E+036.74E+002.39E+024.12E+035.93E+04 + 37K 29.003.02E+004.98E+016.07E+027.04E+034.45E+001.39E+022.41E+033.69E+04 + 37K 35.001.78E+002.90E+013.62E+024.33E+032.56E+006.68E+011.12E+031.73E+04 + 37K 43.009.95E-011.53E+011.84E+022.14E+031.40E+003.03E+014.68E+026.85E+03 + 37K 55.004.90E-016.76E+007.47E+017.93E+026.90E-011.19E+011.61E+022.10E+03 + 37K 68.002.64E-013.25E+003.24E+013.11E+023.76E-015.36E+006.34E+017.34E+02 + 37K 85.001.37E-011.48E+001.30E+011.10E+022.01E-012.35E+002.39E+012.39E+02 + 37K 98.009.01E-028.87E-017.16E+005.54E+011.35E-011.40E+001.28E+011.16E+02 + 37K 115.005.62E-024.97E-013.63E+002.53E+018.73E-027.91E-016.44E+005.20E+01 + 37K 138.003.28E-022.56E-011.66E+001.03E+015.33E-024.16E-012.96E+002.09E+01 + 37K 165.001.94E-021.34E-017.72E-014.26E+003.32E-022.25E-011.40E+008.67E+00 + 37K 230.007.42E-034.04E-021.88E-018.32E-011.40E-027.41E-023.62E-011.76E+00 + 37K 315.003.08E-031.35E-025.12E-021.86E-016.37E-032.72E-021.07E-014.16E-01 + 37K 410.001.53E-035.62E-031.82E-025.65E-023.36E-031.22E-024.04E-021.32E-01 + 37K 520.008.44E-042.69E-037.60E-032.07E-021.92E-036.09E-031.75E-024.95E-02 + 37K 750.003.67E-049.64E-042.27E-035.13E-038.41E-042.22E-035.28E-031.22E-02 + 37K 1000.002.05E-044.74E-049.86E-041.97E-034.53E-041.06E-032.21E-034.47E-03 + 37K 1250.001.36E-042.89E-045.52E-041.02E-032.86E-046.14E-041.18E-032.17E-03 + 37K 1500.009.93E-051.98E-043.57E-046.17E-041.99E-044.01E-047.23E-041.25E-03 + 37L1 3.073.87E+011.52E+044.86E+064.08E+083.81E+025.47E+051.34E+081.10E+10 + 37L1 3.772.69E+014.21E+032.01E+062.52E+082.06E+022.05E+054.26E+074.10E+09 + 37L1 5.071.52E+014.63E+024.14E+056.72E+078.48E+015.06E+048.16E+068.00E+08 + 37L1 8.275.40E+005.02E+001.61E+043.45E+061.96E+015.25E+035.47E+054.38E+07 + 37L1 12.072.27E+001.82E+015.21E+022.06E+056.33E+009.51E+027.00E+044.38E+06 + 37L1 16.001.15E+001.47E+012.98E+011.66E+042.73E+002.73E+021.55E+047.82E+05 + 37L1 22.005.17E-017.94E+005.09E+015.21E+021.06E+006.87E+012.89E+031.13E+05 + 37L1 30.002.30E-013.60E+003.48E+012.06E+024.25E-011.85E+015.82E+021.75E+04 + 37L1 42.009.29E-021.34E+001.40E+011.19E+021.59E-014.61E+001.06E+022.38E+03 + 37L1 55.004.40E-025.70E-015.64E+004.97E+017.29E-021.56E+002.80E+014.94E+02 + 37L1 72.002.06E-022.32E-012.07E+001.70E+013.39E-025.44E-017.63E+001.06E+02 + 37L1 85.001.28E-021.31E-011.08E+008.29E+002.12E-022.88E-013.48E+004.17E+01 + 37L1 102.007.60E-036.97E-025.19E-013.64E+001.28E-021.45E-011.49E+001.52E+01 + 37L1 125.004.22E-033.40E-022.25E-011.41E+007.34E-036.87E-025.91E-015.07E+00 + 37L1 150.002.49E-031.78E-021.06E-015.95E-014.49E-033.57E-022.63E-011.93E+00 + 37L1 215.008.91E-044.98E-032.36E-021.07E-011.75E-031.03E-025.65E-023.09E-01 + 37L1 300.003.53E-041.58E-036.10E-032.26E-027.52E-043.46E-031.47E-026.23E-02 + 37L1 390.001.76E-046.63E-042.20E-037.00E-033.96E-041.53E-035.42E-031.90E-02 + 37L1 500.009.41E-053.06E-048.84E-042.46E-032.19E-047.29E-042.21E-036.57E-03 + 37L1 730.003.96E-051.06E-042.53E-045.83E-049.29E-052.53E-046.21E-041.48E-03 + 37L11000.002.09E-054.87E-051.02E-042.05E-044.70E-051.11E-042.36E-044.84E-04 + 37L2 2.867.49E+011.09E+061.11E+092.00E+114.18E+012.49E+043.42E+062.69E+08 + 37L2 3.563.96E+013.59E+053.01E+086.22E+102.13E+011.04E+041.64E+061.76E+08 + 37L2 4.861.55E+017.46E+044.67E+079.59E+098.13E+002.99E+034.70E+055.60E+07 + 37L2 8.063.15E+005.84E+032.23E+063.66E+081.69E+003.88E+024.89E+045.05E+06 + 37L2 11.868.86E-018.40E+022.18E+052.77E+075.11E-018.09E+017.93E+036.54E+05 + 37L2 16.003.23E-011.88E+023.61E+043.65E+062.02E-012.40E+011.88E+031.26E+05 + 37L2 22.001.07E-013.84E+015.34E+034.17E+057.48E-026.57E+003.99E+022.10E+04 + 37L2 30.003.60E-028.21E+008.33E+024.99E+042.84E-021.86E+008.72E+013.57E+03 + 37L2 42.001.08E-021.55E+001.12E+025.00E+039.95E-034.73E-011.66E+015.14E+02 + 37L2 55.004.05E-034.12E-012.27E+017.96E+024.29E-031.58E-014.41E+001.08E+02 + 37L2 72.001.51E-031.10E-014.64E+001.28E+021.85E-035.33E-021.17E+002.29E+01 + 37L2 85.008.25E-044.94E-021.76E+004.20E+011.10E-032.73E-025.21E-018.81E+00 + 37L2 102.004.23E-042.05E-026.12E-011.24E+016.25E-041.31E-022.14E-013.10E+00 + 37L2 125.002.02E-047.75E-031.90E-013.23E+003.32E-045.82E-037.99E-029.76E-01 + 37L2 150.001.04E-043.27E-036.77E-029.81E-011.89E-042.82E-033.32E-023.49E-01 + 37L2 215.002.87E-056.17E-049.17E-039.80E-026.23E-056.88E-046.05E-034.75E-02 + 37L2 300.008.99E-061.38E-041.53E-031.25E-022.26E-051.91E-041.30E-037.91E-03 + 37L2 390.003.70E-064.45E-053.96E-042.65E-031.02E-057.14E-054.00E-042.02E-03 + 37L2 500.001.64E-061.58E-051.15E-046.43E-044.88E-062.86E-051.36E-045.77E-04 + 37L2 730.005.06E-073.57E-061.96E-058.48E-051.61E-067.46E-062.80E-059.43E-05 + 37L21000.002.04E-071.13E-064.99E-061.79E-056.55E-072.55E-068.06E-062.29E-05 + 37L3 2.801.50E+022.19E+062.32E+094.31E+111.47E+016.30E+053.86E+092.45E+12 + 37L3 3.507.79E+017.05E+056.07E+081.28E+117.38E+002.07E+058.52E+084.41E+11 + 37L3 4.802.97E+011.42E+059.01E+071.88E+102.79E+004.29E+041.02E+083.93E+10 + 37L3 8.005.84E+001.07E+044.07E+066.71E+085.76E-013.37E+033.41E+068.19E+08 + 37L3 11.801.60E+001.49E+033.83E+054.85E+071.74E-014.87E+022.70E+054.48E+07 + 37L3 16.005.67E-013.19E+026.01E+046.02E+066.81E-021.07E+023.81E+044.75E+06 + 37L3 22.001.86E-016.36E+018.63E+036.65E+052.55E-022.22E+015.06E+034.66E+05 + 37L3 30.006.15E-021.32E+011.30E+037.67E+049.80E-034.79E+007.29E+025.01E+04 + 37L3 42.001.81E-022.41E+001.67E+027.30E+033.47E-039.20E-019.22E+014.63E+03 + 37L3 55.006.72E-036.19E-013.22E+011.11E+031.51E-032.47E-011.81E+017.06E+02 + 37L3 72.002.48E-031.59E-016.25E+001.68E+026.60E-046.75E-023.64E+001.11E+02 + 37L3 85.001.34E-036.91E-022.28E+005.25E+013.96E-043.05E-021.37E+003.60E+01 + 37L3 102.006.82E-042.77E-027.55E-011.47E+012.27E-041.28E-024.75E-011.06E+01 + 37L3 125.003.22E-041.01E-022.21E-013.58E+001.22E-044.93E-031.48E-012.76E+00 + 37L3 150.001.66E-044.08E-037.41E-021.01E+007.01E-052.11E-035.26E-028.41E-01 + 37L3 215.004.57E-057.07E-048.77E-038.64E-022.39E-054.09E-047.13E-038.46E-02 + 37L3 300.001.44E-051.46E-041.28E-039.32E-039.01E-069.36E-051.18E-031.08E-02 + 37L3 390.006.05E-064.44E-052.93E-041.70E-034.28E-063.05E-052.98E-042.25E-03 + 37L3 500.002.77E-061.51E-057.70E-053.60E-042.16E-061.10E-058.40E-055.31E-04 + 37L3 730.009.29E-073.29E-061.15E-053.95E-058.07E-072.55E-061.32E-056.44E-05 + 37L31000.004.13E-071.06E-062.78E-067.51E-063.78E-078.49E-073.11E-061.22E-05 + 37M1 1.322.72E+016.91E+049.59E+062.40E+097.89E+026.02E+067.60E+093.17E+12 + 37M1 2.321.14E+014.84E+032.26E+062.10E+081.46E+023.86E+052.23E+086.48E+10 + 37M1 4.323.53E+001.02E+021.17E+052.24E+072.27E+011.95E+045.19E+069.31E+08 + 37M1 8.328.69E-012.45E+001.75E+034.47E+053.19E+009.14E+021.15E+051.18E+07 + 37M1 15.322.07E-012.73E+007.78E+003.71E+035.17E-015.82E+013.82E+032.26E+05 + 37M1 25.006.02E-029.57E-017.96E+004.77E+011.21E-016.92E+002.77E+021.04E+04 + 37M1 40.001.73E-022.53E-012.63E+002.19E+013.04E-029.66E-012.43E+015.94E+02 + 37M1 52.008.41E-031.11E-011.11E+009.72E+001.42E-023.33E-016.51E+001.25E+02 + 37M1 70.003.65E-034.16E-023.72E-013.06E+006.10E-031.03E-011.52E+002.22E+01 + 37M1 103.001.21E-031.10E-028.10E-025.61E-012.07E-032.36E-022.44E-012.52E+00 + 37M1 150.004.11E-042.92E-031.72E-029.67E-027.47E-046.01E-034.47E-023.33E-01 + 37M1 280.007.03E-053.28E-041.32E-035.10E-031.48E-047.21E-043.25E-031.46E-02 + 37M1 500.001.56E-055.07E-051.46E-044.07E-043.64E-051.21E-043.69E-041.10E-03 + 37M2 1.255.75E+011.13E+074.55E+103.19E+138.35E+011.95E+051.04E+083.42E+10 + 37M2 2.251.54E+015.83E+051.08E+095.36E+111.39E+011.49E+045.65E+061.56E+09 + 37M2 4.252.91E+002.37E+042.04E+076.48E+091.99E+001.00E+032.43E+054.70E+07 + 37M2 8.254.12E-018.46E+023.48E+056.56E+072.59E-016.34E+019.16E+031.11E+06 + 37M2 15.255.77E-023.93E+018.36E+039.37E+053.89E-025.07E+004.39E+023.27E+04 + 37M2 25.001.08E-023.37E+004.25E+023.08E+048.42E-036.71E-013.79E+011.86E+03 + 37M2 40.002.08E-033.31E-012.56E+011.22E+031.95E-039.88E-023.69E+001.21E+02 + 37M2 52.008.15E-049.12E-025.38E+002.02E+028.64E-043.40E-021.01E+002.63E+01 + 37M2 70.002.79E-042.14E-029.35E-012.68E+013.43E-041.02E-022.33E-014.69E+00 + 37M2 103.006.87E-053.31E-039.90E-022.01E+001.03E-042.16E-033.51E-025.09E-01 + 37M2 150.001.75E-055.57E-041.16E-021.69E-013.22E-054.83E-045.71E-036.03E-02 + 37M3 1.241.15E+022.15E+078.72E+106.07E+132.80E+016.43E+062.00E+116.23E+14 + 37M3 2.242.98E+011.08E+062.00E+099.83E+114.60E+003.34E+053.40E+094.57E+12 + 37M3 4.245.44E+004.29E+043.68E+071.15E+106.52E-011.38E+044.41E+072.63E+10 + 37M3 8.247.48E-011.49E+036.06E+051.13E+088.52E-025.01E+025.19E+051.44E+08 + 37M3 15.241.02E-016.70E+011.39E+041.54E+061.30E-022.35E+019.42E+031.35E+06 + 37M3 25.001.87E-025.53E+006.75E+024.80E+042.85E-032.02E+004.05E+023.51E+04 + 37M3 40.003.51E-035.17E-013.82E+011.78E+036.73E-042.00E-012.19E+011.20E+03 + 37M3 52.001.35E-031.38E-017.72E+002.82E+023.01E-045.57E-024.45E+001.89E+02 + 37M3 70.004.56E-043.09E-021.26E+003.50E+011.21E-041.32E-027.51E-012.41E+01 + 37M3 103.001.11E-044.46E-031.21E-012.35E+003.71E-052.10E-037.80E-021.76E+00 + 37M3 150.002.80E-056.93E-041.26E-021.73E-011.19E-053.62E-049.12E-031.47E-01 + 37M4 1.111.16E+024.05E+053.48E+106.76E+144.62E+001.04E+051.66E+093.43E+12 + 37M4 2.111.17E+011.49E+043.74E+082.68E+125.32E-014.10E+032.37E+072.88E+10 + 37M4 4.119.09E-014.71E+023.33E+069.21E+095.28E-021.40E+023.08E+052.08E+08 + 37M4 8.115.64E-021.30E+012.66E+043.03E+074.63E-034.40E+003.93E+031.42E+06 + 37M4 15.113.87E-034.53E-013.21E+021.69E+054.63E-041.84E-017.58E+011.51E+04 + 37M4 25.004.09E-042.85E-029.07E+002.63E+036.86E-051.40E-023.18E+003.90E+02 + 37M4 40.004.78E-052.09E-033.29E-015.56E+011.11E-051.26E-031.68E-011.31E+01 + 37M4 52.001.42E-054.84E-045.21E-026.55E+003.99E-063.28E-043.27E-021.99E+00 + 37M4 70.003.59E-069.21E-056.54E-035.90E-011.24E-067.17E-055.18E-032.37E-01 + 37M4 103.005.89E-071.08E-054.54E-042.68E-022.67E-079.99E-064.80E-041.54E-02 + 37M4 150.001.04E-071.38E-063.52E-051.38E-035.99E-081.48E-064.85E-051.10E-03 + 37M5 1.111.71E+025.70E+055.28E+109.94E+142.95E+001.41E+047.49E+096.21E+14 + 37M5 2.111.71E+012.08E+045.64E+083.89E+123.47E-015.75E+028.39E+072.05E+12 + 37M5 4.111.31E+006.52E+024.98E+061.32E+103.57E-022.08E+017.96E+055.75E+09 + 37M5 8.118.08E-021.78E+013.95E+044.28E+073.27E-037.10E-016.93E+031.57E+07 + 37M5 15.115.49E-036.13E-014.68E+022.34E+053.43E-043.26E-029.09E+017.77E+04 + 37M5 25.005.76E-043.79E-021.29E+013.54E+035.27E-052.70E-032.76E+001.15E+03 + 37M5 40.006.68E-052.72E-034.56E-017.17E+018.90E-062.65E-041.08E-012.43E+01 + 37M5 52.001.99E-056.20E-047.07E-028.19E+003.26E-067.26E-051.79E-022.91E+00 + 37M5 70.005.01E-061.16E-048.61E-037.07E-011.04E-061.69E-052.38E-032.70E-01 + 37M5 103.008.38E-071.32E-055.68E-042.98E-022.37E-072.58E-061.77E-041.28E-02 + 37M5 150.001.55E-071.63E-064.13E-051.40E-035.64E-084.24E-071.48E-057.00E-04 + 37N+ 50.001.58E-034.80E-022.05E+007.50E+012.48E-037.26E-022.13E+006.35E+01 + 37N+ 70.005.96E-041.16E-022.99E-017.51E+009.42E-041.84E-023.60E-017.29E+00 + 37N+ 100.002.10E-042.72E-034.23E-026.97E-013.46E-044.53E-035.95E-028.13E-01 + 37N+ 150.006.39E-055.56E-045.17E-035.25E-021.14E-049.92E-048.57E-037.68E-02 + 37N+ 200.002.77E-051.87E-041.27E-039.27E-035.31E-053.56E-042.34E-031.58E-02 + 37N+ 500.002.34E-067.94E-062.49E-057.85E-055.44E-061.86E-055.89E-051.87E-04 + 38K 17.101.30E+019.87E+011.97E+022.50E+022.39E+011.22E+031.05E+042.77E+04 + 38K 17.801.17E+011.04E+023.38E+028.35E+022.13E+011.04E+031.04E+044.47E+04 + 38K 19.109.71E+001.04E+025.47E+022.44E+031.72E+017.89E+029.47E+036.53E+04 + 38K 22.306.43E+008.71E+017.42E+025.78E+031.09E+014.31E+026.41E+037.07E+04 + 38K 26.104.20E+006.32E+016.64E+026.55E+036.84E+002.34E+023.79E+035.07E+04 + 38K 30.002.87E+004.46E+015.09E+025.53E+034.54E+001.36E+022.24E+033.23E+04 + 38K 36.001.72E+002.66E+013.14E+023.55E+032.65E+006.72E+011.08E+031.57E+04 + 38K 44.009.77E-011.43E+011.65E+021.82E+031.48E+003.11E+014.62E+026.46E+03 + 38K 56.004.89E-016.50E+006.91E+017.06E+027.36E-011.24E+011.63E+022.06E+03 + 38K 69.002.67E-013.19E+003.07E+012.85E+024.05E-015.68E+006.54E+017.36E+02 + 38K 86.001.40E-011.47E+001.26E+011.03E+022.18E-012.52E+002.50E+012.44E+02 + 38K 99.009.26E-028.89E-017.00E+005.28E+011.47E-011.51E+001.36E+011.21E+02 + 38K 116.005.81E-025.03E-013.59E+002.45E+019.53E-028.55E-016.85E+005.44E+01 + 38K 139.003.41E-022.61E-011.66E+001.01E+015.84E-024.52E-013.17E+002.21E+01 + 38K 165.002.06E-021.40E-018.01E-014.36E+003.70E-022.50E-011.55E+009.51E+00 + 38K 230.007.92E-034.27E-021.96E-018.62E-011.56E-028.22E-024.00E-011.93E+00 + 38K 315.003.29E-031.43E-025.39E-021.95E-017.06E-033.01E-021.18E-014.57E-01 + 38K 410.001.64E-035.99E-031.93E-025.96E-023.72E-031.35E-024.45E-021.45E-01 + 38K 520.009.06E-042.88E-038.09E-032.19E-022.12E-036.73E-031.93E-025.44E-02 + 38K 750.003.94E-041.04E-032.43E-035.49E-039.26E-042.45E-035.82E-031.34E-02 + 38K 1000.002.21E-045.11E-041.06E-032.12E-034.97E-041.17E-032.44E-034.91E-03 + 38K 1250.001.46E-043.11E-045.97E-041.10E-033.13E-046.75E-041.30E-032.39E-03 + 38K 1500.001.07E-042.14E-043.86E-046.68E-042.17E-044.40E-047.95E-041.37E-03 + 38L1 3.223.53E+011.36E+044.00E+063.03E+083.75E+025.15E+051.20E+089.15E+09 + 38L1 3.922.49E+014.05E+031.76E+062.01E+082.08E+022.01E+054.01E+073.60E+09 + 38L1 5.221.44E+015.04E+023.92E+055.87E+078.82E+015.20E+048.11E+067.53E+08 + 38L1 8.425.29E+003.36E+001.76E+043.43E+062.11E+015.66E+035.77E+054.47E+07 + 38L1 12.222.26E+001.50E+017.12E+022.28E+056.94E+001.05E+037.60E+044.64E+06 + 38L1 16.001.19E+001.33E+013.44E+012.27E+043.10E+003.17E+021.79E+048.94E+05 + 38L1 22.005.37E-017.61E+003.96E+018.25E+021.21E+007.94E+013.33E+031.29E+05 + 38L1 30.002.40E-013.56E+003.10E+011.62E+024.82E-012.13E+016.69E+022.00E+04 + 38L1 42.009.76E-021.35E+001.33E+011.04E+021.80E-015.29E+001.22E+022.71E+03 + 38L1 55.004.64E-025.82E-015.52E+004.61E+018.26E-021.78E+003.19E+015.61E+02 + 38L1 72.002.18E-022.40E-012.07E+001.64E+013.83E-026.19E-018.67E+001.20E+02 + 38L1 85.001.36E-021.36E-011.09E+008.13E+002.40E-023.27E-013.94E+004.72E+01 + 38L1 102.008.08E-037.26E-025.29E-013.62E+001.44E-021.64E-011.69E+001.72E+01 + 38L1 125.004.51E-033.56E-022.32E-011.42E+008.27E-037.77E-026.67E-015.71E+00 + 38L1 150.002.67E-031.87E-021.09E-016.06E-015.06E-034.03E-022.96E-012.17E+00 + 38L1 215.009.56E-045.28E-032.48E-021.11E-011.96E-031.16E-026.35E-023.47E-01 + 38L1 300.003.80E-041.68E-036.45E-032.37E-028.41E-043.88E-031.65E-026.98E-02 + 38L1 390.001.89E-047.11E-042.34E-037.41E-034.42E-041.71E-036.06E-032.12E-02 + 38L1 500.001.02E-043.30E-049.47E-042.63E-032.44E-048.14E-042.47E-037.33E-03 + 38L1 730.004.29E-051.14E-042.73E-046.29E-041.03E-042.82E-046.92E-041.65E-03 + 38L11000.002.27E-055.29E-051.11E-042.23E-045.20E-051.24E-042.63E-045.38E-04 + 38L2 3.016.89E+019.67E+059.41E+081.57E+114.12E+012.33E+042.95E+062.09E+08 + 38L2 3.713.75E+013.36E+052.70E+085.20E+102.16E+011.01E+041.49E+061.46E+08 + 38L2 5.011.52E+017.35E+044.45E+078.67E+098.53E+003.03E+034.51E+055.04E+07 + 38L2 8.213.22E+006.09E+032.28E+063.62E+081.85E+004.12E+025.02E+044.97E+06 + 38L2 12.019.29E-019.02E+022.32E+052.87E+075.67E-018.83E+018.42E+036.75E+05 + 38L2 16.003.54E-012.15E+024.13E+044.12E+062.32E-012.75E+012.13E+031.40E+05 + 38L2 22.001.18E-014.39E+016.11E+034.72E+058.63E-027.55E+004.53E+022.35E+04 + 38L2 30.003.99E-029.40E+009.55E+025.68E+043.29E-022.14E+009.94E+014.02E+03 + 38L2 42.001.20E-021.78E+001.29E+025.71E+031.15E-025.46E-011.90E+015.83E+02 + 38L2 55.004.54E-034.73E-012.61E+019.11E+024.97E-031.83E-015.06E+001.23E+02 + 38L2 72.001.71E-031.27E-015.35E+001.47E+022.15E-036.16E-021.35E+002.62E+01 + 38L2 85.009.32E-045.68E-022.03E+004.83E+011.28E-033.16E-026.00E-011.01E+01 + 38L2 102.004.79E-042.36E-027.06E-011.43E+017.28E-041.52E-022.47E-013.56E+00 + 38L2 125.002.29E-048.95E-032.20E-013.73E+003.87E-046.76E-039.24E-021.12E+00 + 38L2 150.001.18E-043.78E-037.84E-021.13E+002.20E-043.28E-033.85E-024.03E-01 + 38L2 215.003.28E-057.15E-041.06E-021.14E-017.29E-058.03E-047.03E-035.50E-02 + 38L2 300.001.03E-051.61E-041.79E-031.46E-022.64E-052.24E-041.51E-039.19E-03 + 38L2 390.004.26E-065.18E-054.62E-043.08E-031.20E-058.36E-054.68E-042.35E-03 + 38L2 500.001.90E-061.84E-051.35E-047.51E-045.73E-063.36E-051.59E-046.74E-04 + 38L2 730.005.91E-074.16E-062.29E-059.92E-051.89E-068.78E-063.28E-051.10E-04 + 38L21000.002.39E-071.32E-065.85E-062.10E-057.71E-073.00E-069.48E-062.69E-05 + 38L3 2.941.39E+021.95E+061.98E+093.40E+111.43E+015.96E+053.51E+092.12E+12 + 38L3 3.647.38E+016.60E+055.46E+081.08E+117.43E+002.05E+058.22E+084.10E+11 + 38L3 4.942.91E+011.40E+058.62E+071.70E+102.89E+004.47E+041.05E+083.94E+10 + 38L3 8.145.96E+001.11E+044.17E+066.64E+086.19E-013.71E+033.78E+068.90E+08 + 38L3 11.941.68E+001.59E+034.06E+055.01E+071.90E-015.50E+023.08E+055.06E+07 + 38L3 16.006.20E-013.62E+026.83E+046.76E+067.71E-021.28E+024.67E+045.81E+06 + 38L3 22.002.04E-017.22E+019.81E+037.49E+052.89E-022.65E+016.17E+035.67E+05 + 38L3 30.006.78E-021.50E+011.48E+038.66E+041.11E-025.72E+008.85E+026.08E+04 + 38L3 42.002.01E-022.75E+001.90E+028.27E+033.94E-031.10E+001.11E+025.59E+03 + 38L3 55.007.48E-037.05E-013.68E+011.25E+031.72E-032.94E-012.18E+018.49E+02 + 38L3 72.002.77E-031.81E-017.14E+001.91E+027.50E-048.01E-024.36E+001.33E+02 + 38L3 85.001.50E-037.88E-022.61E+005.98E+014.50E-043.62E-021.64E+004.31E+01 + 38L3 102.007.66E-043.16E-028.64E-011.68E+012.58E-041.52E-025.68E-011.27E+01 + 38L3 125.003.62E-041.15E-022.53E-014.08E+001.39E-045.83E-031.76E-013.30E+00 + 38L3 150.001.86E-044.67E-038.49E-021.16E+007.99E-052.49E-036.27E-021.00E+00 + 38L3 215.005.13E-058.09E-041.01E-029.89E-022.72E-054.81E-048.46E-031.00E-01 + 38L3 300.001.62E-051.67E-041.46E-031.07E-021.03E-051.10E-041.40E-031.28E-02 + 38L3 390.006.87E-065.08E-053.37E-041.95E-034.87E-063.55E-053.52E-042.66E-03 + 38L3 500.003.17E-061.73E-058.85E-054.14E-042.46E-061.27E-059.89E-056.26E-04 + 38L3 730.001.06E-063.77E-061.32E-054.54E-059.19E-072.94E-061.55E-057.59E-05 + 38L31000.004.67E-071.21E-063.19E-068.63E-064.30E-079.77E-073.63E-061.43E-05 + 38M1 1.362.61E+016.81E+048.08E+062.78E+098.41E+026.41E+068.05E+093.25E+12 + 38M1 2.361.12E+015.20E+032.19E+061.72E+081.61E+024.33E+052.51E+087.15E+10 + 38M1 4.363.56E+001.30E+021.26E+052.23E+072.55E+012.26E+046.02E+061.07E+09 + 38M1 8.368.92E-011.74E+002.17E+035.01E+053.64E+001.07E+031.35E+051.37E+07 + 38M1 15.362.16E-012.53E+009.30E+004.94E+035.92E-016.81E+014.48E+032.64E+05 + 38M1 25.006.36E-029.47E-016.87E+005.43E+011.39E-018.13E+003.25E+021.23E+04 + 38M1 40.001.84E-022.58E-012.52E+001.94E+013.51E-021.13E+002.84E+016.92E+02 + 38M1 52.008.98E-031.14E-011.09E+009.09E+001.64E-023.87E-017.57E+001.45E+02 + 38M1 70.003.92E-034.34E-023.76E-012.99E+007.01E-031.19E-011.76E+002.57E+01 + 38M1 103.001.31E-031.17E-028.37E-025.67E-012.37E-032.72E-022.82E-012.90E+00 + 38M1 150.004.46E-043.12E-031.81E-021.00E-018.54E-046.89E-035.13E-023.81E-01 + 38M1 280.007.68E-053.55E-041.42E-035.42E-031.69E-048.22E-043.70E-031.66E-02 + 38M1 500.001.71E-055.53E-051.59E-044.41E-044.12E-051.38E-044.19E-041.25E-03 + 38M2 1.285.59E+011.15E+074.60E+103.12E+139.00E+012.08E+051.07E+083.32E+10 + 38M2 2.281.57E+016.30E+051.17E+095.64E+111.56E+011.66E+046.13E+061.63E+09 + 38M2 4.283.05E+002.65E+042.29E+077.13E+092.27E+001.14E+032.71E+055.12E+07 + 38M2 8.284.46E-019.65E+023.98E+057.40E+073.00E-017.32E+011.04E+041.24E+06 + 38M2 15.286.37E-024.53E+019.65E+031.07E+064.54E-025.90E+005.06E+023.72E+04 + 38M2 25.001.22E-023.93E+004.97E+023.59E+049.92E-037.88E-014.42E+012.16E+03 + 38M2 40.002.37E-033.87E-013.00E+011.42E+032.31E-031.16E-014.32E+001.41E+02 + 38M2 52.009.31E-041.07E-016.32E+002.36E+021.02E-034.01E-021.18E+003.07E+01 + 38M2 70.003.20E-042.51E-021.10E+003.14E+014.06E-041.20E-022.73E-015.49E+00 + 38M2 103.007.91E-053.89E-031.16E-012.36E+001.23E-042.55E-034.14E-025.97E-01 + 38M2 150.002.04E-056.56E-041.37E-021.99E-013.83E-055.73E-046.76E-037.11E-02 + 38M2 280.002.25E-063.80E-054.49E-043.89E-035.68E-065.08E-053.64E-042.33E-03 + 38M2 500.003.26E-073.22E-062.36E-051.32E-041.00E-065.88E-062.78E-051.18E-04 + 38M3 1.271.13E+022.20E+078.85E+105.96E+132.99E+016.96E+062.18E+116.76E+14 + 38M3 2.273.03E+011.17E+062.16E+091.04E+125.08E+003.82E+053.97E+095.38E+12 + 38M3 4.275.71E+004.79E+044.11E+071.27E+107.36E-011.63E+045.36E+073.22E+10 + 38M3 8.278.07E-011.70E+036.89E+051.27E+089.72E-026.02E+026.42E+051.79E+08 + 38M3 15.271.12E-017.69E+011.60E+041.75E+061.49E-022.84E+011.17E+041.68E+06 + 38M3 25.002.09E-026.41E+007.85E+025.56E+043.29E-032.47E+005.05E+024.38E+04 + 38M3 40.003.96E-036.00E-014.45E+012.06E+037.79E-042.44E-012.71E+011.48E+03 + 38M3 52.001.54E-031.60E-018.99E+003.27E+023.48E-046.78E-025.49E+002.33E+02 + 38M3 70.005.19E-043.60E-021.47E+004.07E+011.40E-041.61E-029.23E-012.96E+01 + 38M3 103.001.26E-045.20E-031.42E-012.74E+004.32E-052.54E-039.54E-022.15E+00 + 38M3 150.003.20E-058.09E-041.48E-022.02E-011.38E-054.37E-041.11E-021.80E-01 + 38M4 1.131.23E+024.37E+053.81E+107.47E+145.22E+001.20E+051.92E+093.88E+12 + 38M4 2.131.31E+011.69E+044.40E+083.20E+126.24E-014.95E+032.90E+073.49E+10 + 38M4 4.131.05E+005.52E+024.07E+061.15E+106.35E-021.74E+023.89E+052.61E+08 + 38M4 8.136.72E-021.56E+013.33E+043.84E+075.67E-035.56E+005.03E+031.81E+06 + 38M4 15.134.69E-035.54E-014.06E+022.17E+055.75E-042.34E-019.76E+011.94E+04 + 38M4 25.005.04E-043.54E-021.16E+013.41E+038.61E-051.80E-024.13E+005.07E+02 + 38M4 40.005.92E-052.62E-034.21E-017.21E+011.40E-051.62E-032.18E-011.70E+01 + 38M4 52.001.77E-056.08E-046.68E-028.49E+005.05E-064.23E-044.25E-022.58E+00 + 38M4 70.004.46E-061.16E-048.39E-037.65E-011.57E-069.26E-056.74E-033.09E-01 + 38M4 103.007.34E-071.37E-055.83E-043.47E-023.41E-071.29E-056.25E-042.00E-02 + 38M4 150.001.30E-071.76E-064.53E-051.79E-037.66E-081.92E-066.33E-051.44E-03 + 38M5 1.131.81E+026.13E+055.81E+101.10E+153.32E+001.61E+048.72E+097.32E+14 + 38M5 2.131.91E+012.36E+046.65E+084.66E+124.06E-016.86E+021.05E+082.63E+12 + 38M5 4.131.52E+007.62E+026.10E+061.65E+104.27E-022.54E+011.03E+067.68E+09 + 38M5 8.139.61E-022.14E+014.94E+045.43E+073.99E-038.81E-019.11E+032.13E+07 + 38M5 15.136.65E-037.46E-015.92E+023.00E+054.23E-044.07E-021.21E+021.06E+05 + 38M5 25.007.10E-044.69E-021.66E+014.57E+036.58E-053.40E-033.70E+001.58E+03 + 38M5 40.008.32E-053.39E-035.84E-019.27E+011.11E-053.35E-041.44E-013.30E+01 + 38M5 52.002.49E-057.74E-049.06E-021.06E+014.10E-069.19E-052.39E-023.94E+00 + 38M5 70.006.32E-061.45E-041.10E-029.15E-011.31E-062.14E-053.16E-033.64E-01 + 38M5 103.001.06E-061.66E-057.29E-043.86E-023.00E-073.27E-062.35E-041.72E-02 + 38M5 150.001.97E-072.06E-065.31E-051.81E-037.16E-085.39E-071.95E-059.36E-04 + 38N+ 50.001.91E-036.02E-022.67E+009.83E+013.18E-039.50E-022.84E+008.59E+01 + 38N+ 70.007.20E-041.44E-023.85E-019.81E+001.21E-032.39E-024.76E-019.76E+00 + 38N+ 100.002.54E-043.34E-035.38E-029.04E-014.42E-045.86E-037.79E-021.08E+00 + 38N+ 150.007.77E-056.79E-046.48E-036.72E-021.45E-041.28E-031.11E-021.01E-01 + 38N+ 200.003.38E-052.28E-041.57E-031.17E-026.76E-054.56E-043.01E-032.06E-02 + 38N+ 500.002.87E-069.73E-063.07E-059.75E-056.87E-062.35E-057.49E-052.38E-04 + 39K 18.041.17E+018.33E+011.52E+021.72E+022.30E+011.10E+038.93E+032.17E+04 + 39K 18.741.06E+018.74E+012.59E+025.73E+022.05E+019.49E+028.89E+033.49E+04 + 39K 20.048.86E+008.84E+014.23E+021.70E+031.68E+017.31E+028.18E+035.15E+04 + 39K 23.245.97E+007.54E+015.91E+024.21E+031.08E+014.10E+025.71E+035.80E+04 + 39K 27.043.97E+005.59E+015.46E+024.99E+036.93E+002.28E+023.47E+034.33E+04 + 39K 31.002.73E+004.00E+014.28E+024.35E+034.63E+001.34E+022.09E+032.83E+04 + 39K 37.001.67E+002.45E+012.73E+022.91E+032.75E+006.75E+011.03E+031.43E+04 + 39K 45.009.60E-011.35E+011.48E+021.56E+031.55E+003.18E+014.55E+026.10E+03 + 39K 57.004.88E-016.25E+006.39E+016.27E+027.84E-011.30E+011.65E+022.01E+03 + 39K 70.002.69E-013.11E+002.90E+012.60E+024.36E-016.00E+006.74E+017.37E+02 + 39K 87.001.43E-011.46E+001.21E+019.69E+012.36E-012.69E+002.61E+012.50E+02 + 39K 100.009.50E-028.90E-016.84E+005.03E+011.60E-011.62E+001.43E+011.25E+02 + 39K 117.005.99E-025.08E-013.55E+002.37E+011.04E-019.23E-017.28E+005.68E+01 + 39K 140.003.54E-022.66E-011.66E+009.94E+006.38E-024.90E-013.39E+002.33E+01 + 39K 165.002.19E-021.47E-018.29E-014.46E+004.11E-022.77E-011.70E+001.04E+01 + 39K 230.008.43E-034.50E-022.05E-018.91E-011.73E-029.11E-024.41E-012.12E+00 + 39K 315.003.52E-031.51E-025.67E-022.03E-017.82E-033.33E-021.30E-015.02E-01 + 39K 410.001.76E-036.37E-032.04E-026.27E-024.11E-031.49E-024.91E-021.59E-01 + 39K 520.009.73E-043.07E-038.60E-032.32E-022.34E-037.42E-032.13E-025.97E-02 + 39K 750.004.24E-041.11E-032.60E-035.87E-031.02E-032.70E-036.40E-031.47E-02 + 39K 1000.002.37E-045.50E-041.14E-032.28E-035.45E-041.28E-032.68E-035.39E-03 + 39K 1250.001.57E-043.36E-046.44E-041.18E-033.42E-047.41E-041.42E-032.62E-03 + 39K 1500.001.15E-042.31E-044.17E-047.22E-042.37E-044.83E-048.72E-041.51E-03 + 39L1 3.373.23E+011.23E+043.30E+062.25E+083.69E+024.84E+051.08E+087.59E+09 + 39L1 4.072.31E+013.87E+031.53E+061.59E+082.10E+021.97E+053.76E+073.16E+09 + 39L1 5.371.37E+015.41E+023.68E+055.10E+079.16E+015.32E+048.02E+067.06E+08 + 39L1 8.575.17E+003.11E+001.89E+043.38E+062.26E+016.08E+036.06E+054.53E+07 + 39L1 12.372.25E+001.22E+019.23E+022.49E+057.57E+001.15E+038.21E+044.89E+06 + 39L1 16.001.22E+001.19E+015.46E+012.98E+043.52E+003.67E+022.07E+041.02E+06 + 39L1 22.005.56E-017.24E+002.99E+011.29E+031.37E+009.16E+013.83E+031.47E+05 + 39L1 30.002.50E-013.50E+002.72E+011.36E+025.47E-012.44E+017.66E+022.27E+04 + 39L1 42.001.02E-011.36E+001.26E+018.99E+012.04E-016.05E+001.39E+023.07E+03 + 39L1 55.004.89E-025.93E-015.38E+004.25E+019.34E-022.03E+003.63E+016.36E+02 + 39L1 72.002.30E-022.46E-012.06E+001.57E+014.32E-027.03E-019.83E+001.36E+02 + 39L1 85.001.44E-021.41E-011.10E+007.94E+002.71E-023.71E-014.46E+005.33E+01 + 39L1 102.008.57E-037.55E-025.37E-013.59E+001.63E-021.86E-011.90E+001.94E+01 + 39L1 125.004.79E-033.73E-022.37E-011.43E+009.31E-038.78E-027.52E-016.43E+00 + 39L1 150.002.84E-031.97E-021.13E-016.16E-015.68E-034.54E-023.34E-012.44E+00 + 39L1 215.001.02E-035.58E-032.59E-021.15E-012.20E-031.30E-027.12E-023.89E-01 + 39L1 300.004.08E-041.79E-036.81E-032.48E-029.40E-044.34E-031.85E-027.80E-02 + 39L1 390.002.04E-047.60E-042.49E-037.84E-034.92E-041.91E-036.76E-032.37E-02 + 39L1 500.001.10E-043.54E-041.01E-032.80E-032.72E-049.07E-042.75E-038.17E-03 + 39L1 730.004.63E-051.24E-042.94E-046.77E-041.14E-043.13E-047.69E-041.83E-03 + 39L11000.002.46E-055.73E-051.20E-042.41E-045.75E-051.37E-042.92E-045.97E-04 + 39L2 3.166.34E+018.61E+057.95E+081.22E+114.06E+012.17E+042.55E+061.62E+08 + 39L2 3.863.55E+013.13E+052.41E+084.33E+102.19E+019.79E+031.34E+061.21E+08 + 39L2 5.161.49E+017.21E+044.23E+077.79E+098.92E+003.06E+034.30E+054.50E+07 + 39L2 8.363.29E+006.33E+032.33E+063.56E+082.00E+004.37E+025.12E+044.86E+06 + 39L2 12.169.70E-019.65E+022.45E+052.95E+076.26E-019.58E+018.89E+036.91E+05 + 39L2 16.003.87E-012.44E+024.70E+044.63E+062.67E-013.14E+012.39E+031.55E+05 + 39L2 22.001.30E-015.00E+016.96E+035.33E+059.92E-028.63E+005.13E+022.62E+04 + 39L2 30.004.42E-021.07E+011.09E+036.43E+043.78E-022.45E+001.13E+024.52E+03 + 39L2 42.001.34E-022.03E+001.47E+026.49E+031.33E-026.27E-012.17E+016.60E+02 + 39L2 55.005.07E-035.41E-012.99E+011.04E+035.74E-032.11E-015.79E+001.40E+02 + 39L2 72.001.91E-031.45E-016.14E+001.68E+022.49E-037.11E-021.55E+002.98E+01 + 39L2 85.001.05E-036.51E-022.33E+005.53E+011.48E-033.65E-026.89E-011.15E+01 + 39L2 102.005.40E-042.71E-028.13E-011.64E+018.44E-041.76E-022.84E-014.08E+00 + 39L2 125.002.59E-041.03E-022.54E-014.29E+004.50E-047.82E-031.06E-011.29E+00 + 39L2 150.001.34E-044.36E-039.04E-021.30E+002.56E-043.80E-034.45E-024.63E-01 + 39L2 215.003.75E-058.25E-041.23E-021.31E-018.49E-059.33E-048.14E-036.35E-02 + 39L2 300.001.18E-051.86E-042.07E-031.69E-023.08E-052.61E-041.76E-031.06E-02 + 39L2 390.004.87E-066.00E-055.36E-043.58E-031.40E-059.76E-055.45E-042.73E-03 + 39L2 500.002.16E-062.14E-051.57E-048.74E-046.70E-063.93E-051.85E-047.85E-04 + 39L2 730.006.80E-074.84E-062.68E-051.16E-042.22E-061.03E-053.84E-051.29E-04 + 39L21000.002.77E-071.53E-066.83E-062.45E-059.03E-073.52E-061.11E-053.15E-05 + 39L3 3.081.28E+021.74E+061.68E+092.68E+111.40E+015.63E+053.17E+091.83E+12 + 39L3 3.786.99E+016.16E+054.90E+089.04E+107.45E+002.03E+057.90E+083.79E+11 + 39L3 5.082.85E+011.37E+058.21E+071.54E+102.99E+004.64E+041.08E+083.92E+10 + 39L3 8.286.07E+001.15E+044.24E+066.53E+086.62E-014.06E+034.15E+069.60E+08 + 39L3 12.081.75E+001.70E+034.27E+055.15E+072.07E-016.19E+023.50E+055.66E+07 + 39L3 16.006.75E-014.10E+027.73E+047.55E+068.69E-021.53E+025.69E+047.06E+06 + 39L3 22.002.24E-018.18E+011.11E+048.40E+053.26E-023.15E+017.49E+036.87E+05 + 39L3 30.007.46E-021.70E+011.68E+039.75E+041.25E-026.80E+001.07E+037.33E+04 + 39L3 42.002.22E-023.12E+002.16E+029.33E+034.45E-031.30E+001.34E+026.71E+03 + 39L3 55.008.30E-038.00E-014.18E+011.42E+031.94E-033.49E-012.61E+011.02E+03 + 39L3 72.003.09E-032.06E-018.13E+002.16E+028.48E-049.48E-025.22E+001.59E+02 + 39L3 85.001.68E-038.96E-022.97E+006.78E+015.10E-044.27E-021.96E+005.14E+01 + 39L3 102.008.57E-043.60E-029.84E-011.90E+012.92E-041.79E-026.77E-011.51E+01 + 39L3 125.004.07E-041.31E-022.89E-014.64E+001.57E-046.86E-032.10E-013.92E+00 + 39L3 150.002.10E-045.32E-039.69E-021.32E+009.06E-052.93E-037.43E-021.19E+00 + 39L3 215.005.80E-059.23E-041.15E-021.13E-013.09E-055.63E-041.00E-021.19E-01 + 39L3 300.001.84E-051.91E-041.67E-031.22E-021.17E-051.28E-041.65E-031.51E-02 + 39L3 390.007.77E-065.80E-053.86E-042.23E-035.54E-064.13E-054.14E-043.13E-03 + 39L3 500.003.59E-061.97E-051.01E-044.74E-042.79E-061.47E-051.16E-047.37E-04 + 39L3 730.001.21E-064.29E-061.51E-055.20E-051.04E-063.39E-061.81E-058.90E-05 + 39L31000.005.28E-071.38E-063.65E-069.88E-064.88E-071.12E-064.22E-061.68E-05 + 39M1 1.392.49E+016.68E+046.74E+063.09E+098.93E+026.77E+068.45E+093.29E+12 + 39M1 2.391.10E+015.54E+032.10E+061.37E+081.77E+024.83E+052.81E+087.81E+10 + 39M1 4.393.57E+001.61E+021.34E+052.19E+072.86E+012.60E+046.95E+061.21E+09 + 39M1 8.399.14E-011.25E+002.64E+035.54E+054.13E+001.25E+031.57E+051.59E+07 + 39M1 15.392.24E-012.32E+001.34E+016.35E+036.76E-017.94E+015.23E+033.07E+05 + 39M1 25.006.70E-029.33E-015.83E+007.22E+011.60E-019.52E+003.82E+021.43E+04 + 39M1 40.001.95E-022.62E-012.40E+001.70E+014.03E-021.31E+003.30E+018.04E+02 + 39M1 52.009.58E-031.18E-011.08E+008.43E+001.88E-024.49E-018.78E+001.68E+02 + 39M1 70.004.20E-034.52E-023.79E-012.90E+008.03E-031.38E-012.03E+002.96E+01 + 39M1 103.001.41E-031.23E-028.63E-025.70E-012.71E-033.13E-023.24E-013.33E+00 + 39M1 150.004.82E-043.32E-031.90E-021.03E-019.73E-047.88E-035.87E-024.36E-01 + 39M1 280.008.36E-053.83E-041.51E-035.74E-031.91E-049.34E-044.21E-031.89E-02 + 39M1 500.001.88E-056.03E-051.73E-044.77E-044.65E-051.56E-044.74E-041.41E-03 + 39M2 1.315.42E+011.17E+074.65E+103.04E+139.69E+012.22E+051.10E+083.21E+10 + 39M2 2.311.58E+016.78E+051.26E+095.92E+111.73E+011.85E+046.63E+061.69E+09 + 39M2 4.313.20E+002.95E+042.56E+077.81E+092.59E+001.30E+033.03E+055.56E+07 + 39M2 8.314.80E-011.10E+034.53E+058.31E+073.46E-018.42E+011.18E+041.38E+06 + 39M2 15.317.00E-025.20E+011.11E+041.22E+065.28E-026.83E+005.80E+024.21E+04 + 39M2 25.001.36E-024.56E+005.79E+024.16E+041.16E-029.22E-015.13E+012.48E+03 + 39M2 40.002.68E-034.50E-013.50E+011.65E+032.71E-031.36E-015.03E+001.63E+02 + 39M2 52.001.06E-031.24E-017.39E+002.75E+021.20E-034.71E-021.38E+003.56E+01 + 39M2 70.003.65E-042.93E-021.29E+003.67E+014.79E-041.42E-023.20E-016.40E+00 + 39M2 103.009.07E-054.56E-031.37E-012.76E+001.45E-043.01E-034.86E-026.98E-01 + 39M2 150.002.35E-057.70E-041.61E-022.34E-014.55E-056.78E-047.96E-038.34E-02 + 39M2 280.002.64E-064.48E-055.31E-044.59E-036.76E-066.04E-054.31E-042.75E-03 + 39M2 500.003.87E-073.81E-062.80E-051.56E-041.19E-067.01E-063.31E-051.40E-04 + 39M3 1.301.10E+022.24E+078.95E+105.81E+133.18E+017.51E+062.35E+117.30E+14 + 39M3 2.303.07E+011.26E+062.33E+091.09E+125.60E+004.34E+054.61E+096.28E+12 + 39M3 4.305.99E+005.33E+044.58E+071.38E+108.26E-011.91E+046.47E+073.91E+10 + 39M3 8.308.68E-011.92E+037.81E+051.41E+081.10E-017.18E+027.88E+052.20E+08 + 39M3 15.301.23E-018.78E+011.83E+041.98E+061.70E-023.42E+011.44E+042.08E+06 + 39M3 25.002.33E-027.40E+009.09E+026.39E+043.78E-033.00E+006.26E+025.45E+04 + 39M3 40.004.45E-036.94E-015.16E+012.38E+038.97E-042.96E-013.35E+011.83E+03 + 39M3 52.001.73E-031.85E-011.04E+013.78E+024.02E-048.21E-026.74E+002.86E+02 + 39M3 70.005.89E-044.17E-021.71E+004.71E+011.62E-041.94E-021.13E+003.62E+01 + 39M3 103.001.44E-046.04E-031.65E-013.18E+004.98E-053.06E-031.16E-012.62E+00 + 39M3 150.003.67E-059.40E-041.72E-022.35E-011.60E-055.24E-041.35E-022.18E-01 + 39M3 280.004.11E-064.68E-054.42E-043.43E-032.52E-063.09E-054.29E-044.18E-03 + 39M3 500.006.38E-073.51E-061.81E-058.46E-054.97E-072.63E-062.08E-051.33E-04 + 39M4 1.161.29E+024.65E+054.12E+108.12E+145.84E+001.36E+052.18E+094.30E+12 + 39M4 2.161.44E+011.90E+045.11E+083.77E+127.25E-015.91E+033.51E+074.15E+10 + 39M4 4.161.21E+006.41E+024.92E+061.41E+107.57E-022.14E+024.86E+053.22E+08 + 39M4 8.167.92E-021.86E+014.12E+044.82E+076.88E-036.95E+006.37E+032.27E+06 + 39M4 15.165.64E-036.70E-015.07E+022.75E+057.06E-042.95E-011.24E+022.47E+04 + 39M4 25.006.18E-044.36E-021.47E+014.38E+031.07E-042.29E-025.32E+006.52E+02 + 39M4 40.007.33E-053.25E-035.34E-019.25E+011.76E-052.07E-032.81E-012.19E+01 + 39M4 52.002.20E-057.57E-048.47E-021.09E+016.32E-065.41E-045.48E-023.33E+00 + 39M4 70.005.59E-061.45E-041.07E-029.83E-011.97E-061.18E-048.69E-033.98E-01 + 39M4 103.009.36E-071.72E-057.42E-044.47E-024.30E-071.66E-058.07E-042.58E-02 + 39M4 150.001.72E-072.21E-065.77E-052.31E-039.68E-082.46E-068.17E-051.86E-03 + 39M5 1.161.90E+026.51E+056.29E+101.20E+153.70E+001.81E+049.99E+098.46E+14 + 39M5 2.162.10E+012.64E+047.74E+085.50E+124.69E-018.09E+021.28E+083.31E+12 + 39M5 4.161.74E+008.82E+027.39E+062.02E+105.06E-023.08E+011.31E+061.01E+10 + 39M5 8.161.13E-012.53E+016.12E+046.81E+074.80E-031.08E+001.18E+042.85E+07 + 39M5 15.167.98E-038.98E-017.41E+023.79E+055.16E-045.04E-021.58E+021.42E+05 + 39M5 25.008.67E-045.74E-022.10E+015.86E+038.12E-054.25E-034.90E+002.14E+03 + 39M5 40.001.02E-044.18E-037.41E-011.19E+021.38E-054.19E-041.91E-014.44E+01 + 39M5 52.003.06E-059.59E-041.15E-011.36E+015.10E-061.15E-043.15E-025.28E+00 + 39M5 70.007.77E-061.80E-041.40E-021.17E+001.64E-062.68E-054.16E-034.86E-01 + 39M5 103.001.31E-062.07E-059.27E-044.94E-023.75E-074.11E-063.08E-042.29E-02 + 39M5 150.002.43E-072.57E-066.75E-052.33E-038.98E-086.79E-072.55E-051.24E-03 + 39N+ 50.002.19E-037.26E-023.35E+001.26E+023.89E-031.18E-013.63E+001.12E+02 + 39N+ 70.008.29E-041.71E-024.79E-011.24E+011.47E-032.96E-026.00E-011.25E+01 + 39N+ 100.002.93E-043.93E-036.58E-021.13E+005.38E-047.22E-039.72E-021.36E+00 + 39N+ 150.008.98E-057.93E-047.79E-038.29E-021.76E-041.56E-031.37E-021.26E-01 + 39N+ 200.003.91E-052.65E-041.87E-031.43E-028.19E-055.56E-043.70E-032.55E-02 + 39N+ 500.003.35E-061.13E-053.60E-051.15E-048.24E-062.84E-059.05E-052.89E-04 + 40K 19.001.05E+017.06E+011.18E+021.19E+022.21E+011.00E+037.65E+031.70E+04 + 40K 19.709.57E+007.41E+012.00E+023.97E+021.98E+018.70E+027.63E+032.74E+04 + 40K 21.008.09E+007.53E+013.28E+021.19E+031.64E+016.78E+027.09E+034.08E+04 + 40K 24.205.55E+006.54E+014.71E+023.08E+031.08E+013.90E+025.08E+034.77E+04 + 40K 28.003.75E+004.96E+014.49E+023.80E+037.01E+002.21E+023.18E+033.70E+04 + 40K 32.002.60E+003.60E+013.61E+023.43E+034.72E+001.32E+021.95E+032.48E+04 + 40K 38.001.61E+002.25E+012.37E+022.39E+032.85E+006.79E+019.89E+021.30E+04 + 40K 46.009.44E-011.27E+011.32E+021.33E+031.63E+003.26E+014.48E+025.75E+03 + 40K 58.004.87E-016.01E+005.90E+015.56E+028.34E-011.35E+011.66E+021.96E+03 + 40K 71.002.72E-013.04E+002.74E+012.38E+024.68E-016.34E+006.93E+017.36E+02 + 40K 88.001.46E-011.45E+001.17E+019.08E+012.55E-012.87E+002.73E+012.55E+02 + 40K 101.009.74E-028.90E-016.66E+004.79E+011.74E-011.74E+001.50E+011.28E+02 + 40K 118.006.18E-025.12E-013.50E+002.29E+011.13E-019.94E-017.71E+005.92E+01 + 40K 141.003.67E-022.71E-011.66E+009.73E+006.96E-025.30E-013.62E+002.45E+01 + 40K 170.002.13E-021.38E-017.55E-013.94E+004.22E-022.78E-011.66E+009.82E+00 + 40K 235.008.43E-034.39E-021.95E-018.30E-011.81E-029.39E-024.45E-012.10E+00 + 40K 320.003.59E-031.52E-025.59E-021.97E-018.31E-033.50E-021.35E-015.12E-01 + 40K 410.001.87E-036.77E-032.15E-026.58E-024.53E-031.64E-025.39E-021.74E-01 + 40K 520.001.04E-033.27E-039.13E-032.46E-022.58E-038.18E-032.34E-026.55E-02 + 40K 750.004.54E-041.19E-032.78E-036.26E-031.12E-032.97E-037.03E-031.61E-02 + 40K 1000.002.54E-045.91E-041.23E-032.45E-035.96E-041.41E-032.94E-035.91E-03 + 40K 1250.001.69E-043.61E-046.93E-041.27E-033.73E-048.12E-041.56E-032.87E-03 + 40K 1500.001.23E-042.48E-044.50E-047.79E-042.58E-045.28E-049.55E-041.65E-03 + 40L1 3.532.96E+011.11E+042.74E+061.69E+083.64E+024.56E+059.68E+076.33E+09 + 40L1 4.232.15E+013.70E+031.34E+061.27E+082.12E+021.93E+053.53E+072.77E+09 + 40L1 5.531.30E+015.73E+023.46E+054.43E+079.50E+015.43E+047.92E+066.61E+08 + 40L1 8.735.04E+004.10E+002.01E+043.32E+062.43E+016.50E+036.34E+054.57E+07 + 40L1 12.532.24E+009.70E+001.15E+032.68E+058.25E+001.26E+038.85E+045.13E+06 + 40L1 16.001.26E+001.05E+019.17E+013.81E+043.98E+004.24E+022.38E+041.16E+06 + 40L1 22.005.76E-016.85E+002.24E+011.92E+031.55E+001.05E+024.40E+031.67E+05 + 40L1 30.002.61E-013.42E+002.35E+011.31E+026.18E-012.80E+018.76E+022.58E+04 + 40L1 42.001.07E-011.36E+001.18E+017.70E+012.30E-016.90E+001.58E+023.48E+03 + 40L1 55.005.13E-026.01E-015.21E+003.88E+011.05E-012.31E+004.13E+017.19E+02 + 40L1 72.002.43E-022.53E-012.04E+001.50E+014.87E-027.97E-011.11E+011.53E+02 + 40L1 85.001.52E-021.45E-011.10E+007.71E+003.05E-024.20E-015.04E+006.00E+01 + 40L1 102.009.08E-037.83E-025.44E-013.54E+001.83E-022.10E-012.15E+002.18E+01 + 40L1 125.005.09E-033.88E-022.43E-011.43E+001.04E-029.89E-028.47E-017.22E+00 + 40L1 150.003.02E-032.06E-021.16E-016.24E-016.37E-035.11E-023.75E-012.74E+00 + 40L1 215.001.09E-035.89E-032.70E-021.18E-012.46E-031.46E-027.97E-024.34E-01 + 40L1 300.004.37E-041.90E-037.17E-032.60E-021.05E-034.85E-032.06E-028.70E-02 + 40L1 390.002.19E-048.11E-042.64E-038.27E-035.48E-042.13E-037.53E-032.64E-02 + 40L1 500.001.18E-043.79E-041.08E-032.98E-033.02E-041.01E-033.06E-039.08E-03 + 40L1 730.005.02E-051.33E-043.17E-047.28E-041.26E-043.47E-048.54E-042.03E-03 + 40L11000.002.65E-056.20E-051.30E-042.61E-046.33E-051.52E-043.23E-046.62E-04 + 40L2 3.315.84E+017.70E+056.77E+089.64E+104.01E+012.04E+042.21E+061.27E+08 + 40L2 4.013.36E+012.92E+052.16E+083.62E+102.22E+019.49E+031.21E+061.00E+08 + 40L2 5.311.45E+017.06E+044.01E+077.00E+099.31E+003.08E+034.10E+054.02E+07 + 40L2 8.513.34E+006.56E+032.36E+063.49E+082.16E+004.61E+025.21E+044.74E+06 + 40L2 12.311.01E+001.03E+032.57E+053.02E+076.89E-011.04E+029.36E+037.06E+05 + 40L2 16.004.22E-012.77E+025.33E+045.18E+063.05E-013.58E+012.68E+031.71E+05 + 40L2 22.001.43E-015.67E+017.91E+035.99E+051.14E-019.85E+005.78E+022.92E+04 + 40L2 30.004.87E-021.22E+011.24E+037.27E+044.34E-022.80E+001.28E+025.07E+03 + 40L2 42.001.48E-022.31E+001.68E+027.36E+031.53E-027.18E-012.47E+017.44E+02 + 40L2 55.005.65E-036.17E-013.41E+011.18E+036.62E-032.41E-016.59E+001.59E+02 + 40L2 72.002.14E-031.66E-017.02E+001.92E+022.87E-038.17E-021.77E+003.39E+01 + 40L2 85.001.17E-037.45E-022.67E+006.31E+011.71E-034.20E-027.89E-011.31E+01 + 40L2 102.006.07E-043.10E-029.32E-011.88E+019.75E-042.02E-023.26E-014.65E+00 + 40L2 125.002.91E-041.18E-022.91E-014.91E+005.20E-049.03E-031.22E-011.47E+00 + 40L2 150.001.51E-045.00E-031.04E-011.50E+002.97E-044.40E-035.12E-025.31E-01 + 40L2 215.004.23E-059.50E-041.42E-021.51E-019.86E-051.08E-039.40E-037.31E-02 + 40L2 300.001.34E-052.15E-042.39E-031.95E-023.59E-053.03E-042.04E-031.23E-02 + 40L2 390.005.55E-066.93E-056.21E-044.14E-031.63E-051.13E-046.32E-043.16E-03 + 40L2 500.002.50E-062.47E-051.82E-041.01E-037.81E-064.58E-052.15E-049.10E-04 + 40L2 730.007.91E-075.60E-063.11E-051.35E-042.59E-061.20E-054.48E-051.50E-04 + 40L21000.003.11E-071.78E-067.97E-062.86E-051.05E-064.12E-061.30E-053.68E-05 + 40L3 3.221.18E+021.56E+061.44E+092.13E+111.37E+015.34E+052.89E+091.59E+12 + 40L3 3.926.62E+015.76E+054.40E+087.62E+107.46E+002.00E+057.59E+083.50E+11 + 40L3 5.222.79E+011.35E+057.81E+071.39E+103.08E+004.79E+041.10E+083.90E+10 + 40L3 8.426.17E+001.19E+044.31E+066.40E+087.06E-014.42E+034.55E+061.03E+09 + 40L3 12.221.82E+001.81E+034.49E+055.27E+072.24E-016.92E+023.95E+056.31E+07 + 40L3 16.007.32E-014.62E+028.72E+048.40E+069.77E-021.81E+026.92E+048.56E+06 + 40L3 22.002.44E-019.23E+011.25E+049.38E+053.67E-023.74E+019.06E+038.30E+05 + 40L3 30.008.18E-021.93E+011.90E+031.09E+051.41E-028.06E+001.29E+038.82E+04 + 40L3 42.002.44E-023.52E+002.44E+021.05E+045.01E-031.54E+001.61E+028.04E+03 + 40L3 55.009.17E-039.05E-014.73E+011.60E+032.19E-034.12E-013.12E+011.22E+03 + 40L3 72.003.42E-032.33E-019.21E+002.44E+029.57E-041.12E-016.22E+001.89E+02 + 40L3 85.001.86E-031.01E-013.37E+007.66E+015.76E-045.03E-022.33E+006.11E+01 + 40L3 102.009.53E-044.08E-021.12E+002.15E+013.30E-042.11E-028.03E-011.79E+01 + 40L3 125.004.53E-041.48E-023.28E-015.26E+001.78E-048.06E-032.48E-014.64E+00 + 40L3 150.002.34E-046.04E-031.10E-011.49E+001.02E-043.43E-038.79E-021.40E+00 + 40L3 215.006.51E-051.05E-031.31E-021.28E-013.49E-056.57E-041.18E-021.40E-01 + 40L3 300.002.08E-052.17E-041.91E-031.39E-021.32E-051.48E-041.93E-031.78E-02 + 40L3 390.008.80E-066.60E-054.39E-042.54E-036.26E-064.78E-054.85E-043.67E-03 + 40L3 500.004.05E-062.24E-051.15E-045.40E-043.16E-061.70E-051.35E-048.63E-04 + 40L3 730.001.35E-064.88E-061.73E-055.94E-051.18E-063.89E-062.10E-051.04E-04 + 40L31000.006.03E-071.57E-064.16E-061.13E-055.51E-071.28E-064.89E-061.95E-05 + 40M1 1.432.39E+016.59E+045.69E+063.38E+099.50E+027.19E+068.92E+093.37E+12 + 40M1 2.431.08E+015.89E+032.02E+061.09E+081.94E+025.38E+053.14E+088.55E+10 + 40M1 4.433.59E+001.95E+021.42E+052.15E+073.21E+012.98E+048.02E+061.38E+09 + 40M1 8.439.35E-011.04E+003.15E+036.08E+054.68E+001.45E+031.83E+051.83E+07 + 40M1 15.432.32E-012.11E+002.04E+017.97E+037.71E-019.24E+016.10E+033.55E+05 + 40M1 25.007.04E-029.13E-014.89E+001.03E+021.84E-011.11E+014.46E+021.67E+04 + 40M1 40.002.07E-022.66E-012.27E+001.49E+014.62E-021.52E+003.84E+019.32E+02 + 40M1 52.001.02E-021.21E-011.05E+007.77E+002.15E-025.19E-011.02E+011.94E+02 + 40M1 70.004.48E-034.70E-023.80E-012.79E+009.18E-031.59E-012.34E+003.41E+01 + 40M1 103.001.51E-031.29E-028.85E-025.70E-013.10E-033.58E-023.71E-013.82E+00 + 40M1 150.005.19E-043.52E-031.98E-021.06E-011.11E-039.00E-036.69E-024.97E-01 + 40M1 280.009.09E-054.11E-041.61E-036.07E-032.16E-041.06E-034.77E-032.14E-02 + 40M1 500.002.04E-056.55E-051.87E-045.15E-045.24E-051.76E-045.35E-041.60E-03 + 40M2 1.345.27E+011.20E+074.71E+102.98E+131.04E+022.36E+051.13E+083.12E+10 + 40M2 2.341.60E+017.30E+051.35E+096.21E+111.93E+012.05E+047.17E+061.76E+09 + 40M2 4.343.34E+003.28E+042.85E+078.54E+092.94E+001.47E+033.36E+056.03E+07 + 40M2 8.345.15E-011.24E+035.13E+059.30E+073.98E-019.65E+011.34E+041.54E+06 + 40M2 15.347.67E-025.94E+011.27E+041.39E+066.12E-027.88E+006.62E+024.75E+04 + 40M2 25.001.52E-025.28E+006.72E+024.80E+041.36E-021.07E+005.94E+012.85E+03 + 40M2 40.003.01E-035.21E-014.07E+011.91E+033.18E-031.59E-015.84E+001.88E+02 + 40M2 52.001.19E-031.44E-018.61E+003.19E+021.41E-035.50E-021.60E+004.12E+01 + 40M2 70.004.14E-043.40E-021.50E+004.26E+015.63E-041.66E-023.73E-017.42E+00 + 40M2 103.001.04E-045.32E-031.60E-013.22E+001.71E-043.54E-035.69E-028.13E-01 + 40M2 150.002.70E-059.01E-041.89E-022.74E-015.37E-057.98E-049.34E-039.75E-02 + 40M2 280.003.05E-065.26E-056.26E-045.40E-038.01E-067.14E-055.08E-043.23E-03 + 40M2 500.004.51E-074.48E-063.31E-051.85E-041.42E-068.33E-063.92E-051.66E-04 + 40M3 1.331.07E+022.29E+079.09E+105.71E+133.39E+018.11E+062.55E+117.91E+14 + 40M3 2.333.11E+011.35E+062.51E+091.14E+126.14E+004.93E+055.34E+097.33E+12 + 40M3 4.336.25E+005.91E+045.09E+071.51E+109.25E-012.23E+047.78E+074.74E+10 + 40M3 8.339.30E-012.17E+038.83E+051.58E+081.25E-018.54E+029.64E+052.71E+08 + 40M3 15.331.34E-011.00E+022.09E+042.24E+061.93E-024.10E+011.77E+042.55E+06 + 40M3 25.002.58E-028.51E+001.05E+037.33E+044.33E-033.62E+007.72E+026.74E+04 + 40M3 40.004.98E-037.99E-015.96E+012.73E+031.03E-033.57E-014.10E+012.25E+03 + 40M3 52.001.95E-032.14E-011.20E+014.34E+024.61E-049.89E-028.23E+003.50E+02 + 40M3 70.006.64E-044.81E-021.98E+005.43E+011.86E-042.34E-021.37E+004.41E+01 + 40M3 103.001.63E-046.98E-031.91E-013.67E+005.74E-053.67E-031.41E-013.18E+00 + 40M3 150.004.19E-051.09E-032.00E-022.72E-011.84E-056.26E-041.62E-022.63E-01 + 40M3 280.004.73E-065.42E-055.14E-043.98E-032.91E-063.66E-055.15E-045.02E-03 + 40M3 500.007.24E-074.06E-062.10E-059.83E-055.73E-073.10E-062.48E-051.59E-04 + 40M4 1.181.36E+024.97E+054.47E+108.90E+146.51E+001.54E+052.49E+094.80E+12 + 40M4 2.181.59E+012.13E+045.92E+084.45E+128.38E-017.03E+034.24E+074.94E+10 + 40M4 4.181.37E+007.41E+025.92E+061.72E+108.95E-022.61E+026.03E+053.97E+08 + 40M4 8.189.26E-022.20E+015.05E+046.01E+078.27E-038.63E+008.01E+032.84E+06 + 40M4 15.186.72E-038.04E-016.29E+023.45E+058.60E-043.69E-011.57E+023.11E+04 + 40M4 25.007.48E-045.32E-021.84E+015.57E+031.32E-042.89E-026.78E+008.30E+02 + 40M4 40.008.96E-053.99E-036.71E-011.18E+022.17E-052.62E-033.58E-012.79E+01 + 40M4 52.002.70E-059.33E-041.07E-011.39E+017.85E-066.85E-046.99E-024.24E+00 + 40M4 70.006.90E-061.80E-041.34E-021.25E+002.45E-061.50E-041.11E-025.08E-01 + 40M4 103.001.16E-062.15E-059.35E-045.69E-025.36E-072.10E-051.03E-033.30E-02 + 40M4 150.002.08E-072.78E-067.29E-052.94E-031.21E-073.13E-061.05E-042.38E-03 + 40M5 1.182.00E+026.93E+056.84E+101.31E+154.12E+002.03E+041.15E+109.83E+14 + 40M5 2.182.31E+012.94E+048.98E+086.47E+125.40E-019.50E+021.57E+084.15E+12 + 40M5 4.181.98E+001.02E+038.90E+062.47E+105.95E-023.71E+011.66E+061.32E+10 + 40M5 8.181.32E-012.97E+017.52E+048.47E+075.74E-031.32E+001.53E+043.79E+07 + 40M5 15.189.49E-031.07E+009.21E+024.75E+056.24E-046.18E-022.05E+021.90E+05 + 40M5 25.001.05E-036.96E-022.64E+017.44E+039.93E-055.26E-036.42E+002.86E+03 + 40M5 40.001.25E-045.10E-039.32E-011.51E+021.70E-055.19E-042.50E-015.92E+01 + 40M5 52.003.75E-051.17E-031.45E-011.72E+016.29E-061.43E-044.12E-027.01E+00 + 40M5 70.009.56E-062.22E-041.77E-021.49E+002.03E-063.33E-055.42E-036.42E-01 + 40M5 103.001.60E-062.57E-051.17E-036.28E-024.66E-075.12E-064.00E-043.01E-02 + 40M5 150.002.92E-073.21E-068.51E-052.96E-031.12E-078.46E-073.29E-051.62E-03 + 40N+ 50.002.46E-038.48E-024.03E+001.53E+024.64E-031.44E-014.49E+001.41E+02 + 40N+ 70.009.31E-041.98E-025.72E-011.51E+011.76E-033.58E-027.36E-011.56E+01 + 40N+ 100.003.30E-044.50E-037.78E-021.36E+006.41E-048.68E-031.18E-011.67E+00 + 40N+ 150.001.01E-049.03E-049.09E-039.87E-022.10E-041.87E-031.66E-021.53E-01 + 40N+ 200.004.44E-053.02E-042.17E-031.69E-029.70E-056.62E-044.43E-033.07E-02 + 40N+ 500.003.82E-061.29E-054.12E-051.33E-049.68E-063.35E-051.07E-043.43E-04 + 41K 19.999.50E+006.00E+019.18E+018.27E+012.13E+019.12E+026.57E+031.34E+04 + 41K 20.698.69E+006.29E+011.55E+022.75E+021.92E+017.98E+026.57E+032.16E+04 + 41K 21.997.40E+006.42E+012.56E+028.38E+021.60E+016.29E+026.16E+033.25E+04 + 41K 25.195.16E+005.68E+013.77E+022.25E+031.07E+013.71E+024.53E+033.92E+04 + 41K 28.993.54E+004.39E+013.70E+022.90E+037.08E+002.15E+022.91E+033.16E+04 + 41K 33.002.48E+003.24E+013.05E+022.71E+034.83E+001.30E+021.82E+032.18E+04 + 41K 39.001.56E+002.07E+012.06E+021.96E+032.95E+006.84E+019.50E+021.19E+04 + 41K 47.009.27E-011.19E+011.19E+021.13E+031.71E+003.34E+014.41E+025.42E+03 + 41K 59.004.86E-015.77E+005.44E+014.93E+028.86E-011.41E+011.68E+021.91E+03 + 41K 72.002.74E-012.97E+002.59E+012.17E+025.01E-016.68E+007.12E+017.34E+02 + 41K 89.001.48E-011.43E+001.13E+018.50E+012.75E-013.05E+002.84E+012.59E+02 + 41K 102.009.97E-028.89E-016.49E+004.54E+011.88E-011.86E+001.58E+011.32E+02 + 41K 119.006.36E-025.15E-013.44E+002.20E+011.23E-011.07E+008.16E+006.15E+01 + 41K 142.003.80E-022.75E-011.65E+009.50E+007.59E-025.73E-013.86E+002.58E+01 + 41K 170.002.25E-021.45E-017.78E-014.01E+004.68E-023.07E-011.82E+001.07E+01 + 41K 235.008.95E-034.61E-022.03E-018.55E-012.01E-021.04E-014.89E-012.29E+00 + 41K 320.003.83E-031.60E-025.86E-022.05E-019.17E-033.86E-021.48E-015.60E-01 + 41K 410.002.00E-037.17E-032.27E-026.90E-024.99E-031.81E-025.92E-021.91E-01 + 41K 520.001.11E-033.48E-039.67E-032.59E-022.83E-038.99E-032.57E-027.16E-02 + 41K 750.004.87E-041.27E-032.97E-036.67E-031.22E-033.26E-037.71E-031.77E-02 + 41K 1000.002.73E-046.33E-041.32E-032.62E-036.51E-041.54E-033.22E-036.47E-03 + 41K 1250.001.80E-043.88E-047.45E-041.37E-034.07E-048.89E-041.71E-033.14E-03 + 41K 1500.001.32E-042.67E-044.84E-048.39E-042.80E-045.77E-041.04E-031.80E-03 + 41L1 3.702.71E+019.97E+032.27E+061.25E+083.58E+024.29E+058.66E+075.25E+09 + 41L1 4.402.00E+013.51E+031.16E+061.00E+082.13E+021.87E+053.29E+072.42E+09 + 41L1 5.701.23E+015.99E+023.22E+053.81E+079.81E+015.51E+047.77E+066.13E+08 + 41L1 8.904.91E+006.16E+002.11E+043.21E+062.59E+016.92E+036.60E+054.58E+07 + 41L1 12.702.22E+007.56E+001.39E+032.84E+058.95E+001.37E+039.48E+045.35E+06 + 41L1 16.001.29E+009.17E+001.48E+024.73E+044.49E+004.89E+022.73E+041.31E+06 + 41L1 22.005.95E-016.42E+001.75E+012.73E+031.74E+001.21E+025.03E+031.89E+05 + 41L1 30.002.71E-013.33E+002.00E+011.49E+026.97E-013.20E+019.99E+022.92E+04 + 41L1 42.001.12E-011.36E+001.09E+016.56E+012.60E-017.86E+001.79E+023.93E+03 + 41L1 55.005.38E-026.08E-015.02E+003.52E+011.19E-012.63E+004.67E+018.11E+02 + 41L1 72.002.56E-022.58E-012.02E+001.42E+015.48E-029.02E-011.26E+011.72E+02 + 41L1 85.001.61E-021.50E-011.10E+007.46E+003.42E-024.74E-015.69E+006.75E+01 + 41L1 102.009.60E-038.10E-025.49E-013.49E+002.05E-022.37E-012.42E+002.45E+01 + 41L1 125.005.39E-034.04E-022.47E-011.43E+001.17E-021.11E-019.51E-018.09E+00 + 41L1 150.003.21E-032.15E-021.19E-016.30E-017.13E-035.74E-024.20E-013.07E+00 + 41L1 215.001.17E-036.20E-032.81E-021.22E-012.74E-031.63E-028.91E-024.85E-01 + 41L1 300.004.68E-042.01E-037.53E-032.71E-021.17E-035.41E-032.30E-029.68E-02 + 41L1 390.002.36E-048.63E-042.79E-038.71E-036.09E-042.37E-038.38E-032.93E-02 + 41L1 500.001.27E-044.06E-041.15E-033.16E-033.35E-041.12E-033.39E-031.01E-02 + 41L1 730.005.39E-051.43E-043.40E-047.82E-041.40E-043.85E-049.46E-042.25E-03 + 41L11000.002.87E-056.70E-051.40E-042.82E-046.97E-051.68E-043.57E-047.32E-04 + 41L2 3.465.38E+016.87E+055.73E+087.55E+103.95E+011.90E+041.90E+069.85E+07 + 41L2 4.163.17E+012.71E+051.92E+083.01E+102.24E+019.16E+031.09E+068.24E+07 + 41L2 5.461.41E+016.89E+043.78E+076.24E+099.68E+003.09E+033.89E+053.56E+07 + 41L2 8.663.39E+006.76E+032.39E+063.39E+082.33E+004.84E+025.26E+044.59E+06 + 41L2 12.461.05E+001.09E+032.69E+053.08E+077.56E-011.12E+029.79E+037.16E+05 + 41L2 16.004.59E-013.14E+026.02E+045.78E+063.49E-014.06E+013.00E+031.87E+05 + 41L2 22.001.56E-016.43E+018.96E+036.72E+051.30E-011.12E+016.49E+023.23E+04 + 41L2 30.005.35E-021.38E+011.41E+038.18E+044.97E-023.19E+001.44E+025.66E+03 + 41L2 42.001.64E-022.63E+001.91E+028.31E+031.75E-028.19E-012.79E+018.35E+02 + 41L2 55.006.27E-037.01E-013.88E+011.34E+037.60E-032.76E-017.49E+001.79E+02 + 41L2 72.002.38E-031.89E-018.01E+002.18E+023.30E-039.35E-022.01E+003.84E+01 + 41L2 85.001.31E-038.49E-023.05E+007.18E+011.97E-034.81E-029.00E-011.49E+01 + 41L2 102.006.80E-043.54E-021.07E+002.14E+011.12E-032.33E-023.72E-015.29E+00 + 41L2 125.003.27E-041.35E-023.34E-015.61E+006.01E-041.04E-021.40E-011.68E+00 + 41L2 150.001.70E-045.72E-031.19E-011.71E+003.43E-045.06E-035.87E-026.06E-01 + 41L2 215.004.79E-051.09E-031.63E-021.73E-011.14E-041.25E-031.08E-028.38E-02 + 41L2 300.001.52E-052.47E-042.76E-032.25E-024.16E-053.50E-042.35E-031.41E-02 + 41L2 390.006.34E-067.98E-057.17E-044.78E-031.90E-051.32E-047.31E-043.64E-03 + 41L2 500.002.84E-062.85E-052.10E-041.17E-039.08E-065.32E-052.50E-041.05E-03 + 41L2 730.008.87E-076.47E-063.61E-051.56E-043.01E-061.40E-055.20E-051.74E-04 + 41L21000.003.58E-072.06E-069.25E-063.32E-051.23E-064.81E-061.51E-054.28E-05 + 41L3 3.371.09E+021.40E+061.22E+091.68E+111.33E+015.04E+052.61E+091.37E+12 + 41L3 4.076.26E+015.37E+053.94E+086.37E+107.45E+001.97E+057.25E+083.22E+11 + 41L3 5.372.71E+011.32E+057.39E+071.24E+103.17E+004.93E+041.12E+083.84E+10 + 41L3 8.576.24E+001.23E+044.35E+066.23E+087.50E-014.79E+034.94E+061.10E+09 + 41L3 12.371.88E+001.91E+034.68E+055.36E+072.42E-017.71E+024.43E+056.98E+07 + 41L3 16.007.92E-015.20E+029.80E+049.31E+061.09E-012.14E+028.37E+041.03E+07 + 41L3 22.002.65E-011.04E+021.41E+041.05E+064.11E-024.41E+011.09E+049.98E+05 + 41L3 30.008.94E-022.17E+012.14E+031.22E+051.58E-029.51E+001.55E+031.06E+05 + 41L3 42.002.68E-023.97E+002.76E+021.18E+045.63E-031.81E+001.92E+029.59E+03 + 41L3 55.001.01E-021.02E+005.34E+011.79E+032.46E-034.85E-013.72E+011.45E+03 + 41L3 72.003.78E-032.63E-011.04E+012.74E+021.08E-031.31E-017.39E+002.25E+02 + 41L3 85.002.06E-031.15E-013.81E+008.63E+016.48E-045.90E-022.76E+007.24E+01 + 41L3 102.001.06E-034.61E-021.26E+002.43E+013.71E-042.47E-029.50E-012.12E+01 + 41L3 125.005.04E-041.68E-023.72E-015.93E+002.00E-049.42E-032.93E-015.47E+00 + 41L3 150.002.61E-046.83E-031.25E-011.69E+001.15E-044.01E-031.04E-011.66E+00 + 41L3 215.007.23E-051.19E-031.48E-021.45E-013.94E-057.64E-041.38E-021.65E-01 + 41L3 300.002.31E-052.46E-042.17E-031.57E-021.49E-051.72E-042.26E-032.08E-02 + 41L3 390.009.86E-067.48E-054.99E-042.88E-037.06E-065.52E-055.66E-044.30E-03 + 41L3 500.004.57E-062.54E-051.31E-046.13E-043.56E-061.96E-051.58E-041.01E-03 + 41L3 730.001.53E-065.53E-061.96E-056.75E-051.33E-064.46E-062.44E-051.21E-04 + 41L31000.006.70E-071.77E-064.72E-061.28E-056.20E-071.46E-065.64E-062.27E-05 + 41M1 1.472.28E+016.45E+044.75E+063.58E+091.01E+037.57E+069.31E+093.39E+12 + 41M1 2.471.06E+016.21E+031.92E+068.56E+072.12E+025.96E+053.48E+089.26E+10 + 41M1 4.473.59E+002.31E+021.49E+052.08E+073.58E+013.40E+049.18E+061.56E+09 + 41M1 8.479.53E-011.11E+003.69E+036.59E+055.28E+001.67E+032.13E+052.11E+07 + 41M1 15.472.40E-011.89E+003.05E+019.77E+038.75E-011.07E+027.07E+034.10E+05 + 41M1 25.007.39E-028.88E-014.08E+001.48E+022.10E-011.29E+015.21E+021.95E+04 + 41M1 40.002.18E-022.68E-012.12E+001.33E+015.27E-021.76E+004.44E+011.08E+03 + 41M1 52.001.08E-021.24E-011.02E+007.11E+002.46E-025.99E-011.17E+012.23E+02 + 41M1 70.004.77E-034.86E-023.79E-012.68E+001.05E-021.82E-012.69E+003.91E+01 + 41M1 103.001.62E-031.35E-029.05E-025.69E-013.52E-034.10E-024.24E-014.36E+00 + 41M1 150.005.59E-043.72E-032.06E-021.08E-011.26E-031.02E-027.62E-025.65E-01 + 41M1 280.009.82E-054.41E-041.71E-036.40E-032.44E-041.20E-035.40E-032.42E-02 + 41M1 500.002.22E-057.10E-052.02E-045.54E-045.88E-051.98E-046.02E-041.80E-03 + 41M2 1.385.09E+011.21E+074.72E+102.87E+131.12E+022.50E+051.15E+082.98E+10 + 41M2 2.381.61E+017.80E+051.44E+096.45E+112.13E+012.26E+047.67E+061.80E+09 + 41M2 4.383.47E+003.62E+043.15E+079.27E+093.32E+001.66E+033.71E+056.48E+07 + 41M2 8.385.51E-011.40E+035.79E+051.04E+084.55E-011.10E+021.50E+041.70E+06 + 41M2 15.388.36E-026.76E+011.45E+041.56E+067.06E-029.05E+007.52E+025.33E+04 + 41M2 25.001.69E-026.08E+007.77E+025.51E+041.58E-021.25E+006.84E+013.26E+03 + 41M2 40.003.37E-036.02E-014.71E+012.20E+033.71E-031.85E-016.75E+002.16E+02 + 41M2 52.001.34E-031.67E-019.98E+003.69E+021.65E-036.41E-021.86E+004.74E+01 + 41M2 70.004.69E-043.94E-021.74E+004.93E+016.59E-041.94E-024.33E-018.56E+00 + 41M2 103.001.18E-046.17E-031.86E-013.74E+002.00E-044.13E-036.62E-029.42E-01 + 41M2 150.003.10E-051.05E-032.20E-023.19E-016.31E-059.36E-041.09E-021.13E-01 + 41M2 280.003.50E-066.15E-057.34E-046.33E-039.46E-068.41E-055.96E-043.79E-03 + 41M2 500.005.23E-075.26E-063.90E-052.17E-041.68E-069.84E-064.63E-051.96E-04 + 41M3 1.361.04E+022.31E+079.12E+105.51E+133.58E+018.66E+062.72E+118.41E+14 + 41M3 2.363.13E+011.44E+062.67E+091.18E+126.70E+005.54E+056.12E+098.44E+12 + 41M3 4.366.50E+006.51E+045.61E+071.63E+101.03E+002.59E+049.27E+075.68E+10 + 41M3 8.369.92E-012.43E+039.91E+051.75E+081.41E-011.01E+031.17E+063.30E+08 + 41M3 15.361.46E-011.13E+022.36E+042.51E+062.19E-024.88E+012.15E+043.12E+06 + 41M3 25.002.85E-029.75E+001.20E+038.36E+044.95E-034.36E+009.49E+028.29E+04 + 41M3 40.005.55E-039.17E-016.85E+013.12E+031.18E-034.29E-015.01E+012.74E+03 + 41M3 52.002.18E-032.45E-011.39E+014.97E+025.27E-041.19E-011.00E+014.26E+02 + 41M3 70.007.46E-045.53E-022.28E+006.22E+012.13E-042.80E-021.67E+005.35E+01 + 41M3 103.001.84E-048.04E-032.20E-014.22E+006.57E-054.38E-031.70E-013.83E+00 + 41M3 150.004.74E-051.25E-032.31E-023.13E-012.11E-057.45E-041.95E-023.17E-01 + 41M3 280.005.36E-066.26E-055.95E-044.60E-033.34E-064.33E-056.15E-046.00E-03 + 41M3 500.008.42E-074.70E-062.43E-051.14E-046.57E-073.63E-062.95E-051.89E-04 + 41M4 1.211.41E+025.24E+054.78E+109.55E+147.19E+001.73E+052.80E+095.25E+12 + 41M4 2.211.73E+012.36E+046.77E+085.16E+129.59E-018.26E+035.05E+075.78E+10 + 41M4 4.211.55E+008.48E+027.04E+062.08E+101.05E-013.16E+027.39E+054.81E+08 + 41M4 8.211.07E-012.57E+016.14E+047.41E+079.87E-031.06E+019.96E+033.51E+06 + 41M4 15.217.94E-039.56E-017.73E+024.30E+051.04E-034.58E-011.97E+023.88E+04 + 41M4 25.008.99E-046.43E-022.29E+017.02E+031.61E-043.62E-028.57E+001.05E+03 + 41M4 40.001.08E-044.86E-038.36E-011.48E+022.67E-053.28E-034.53E-013.53E+01 + 41M4 52.003.28E-051.14E-031.33E-011.75E+019.66E-068.60E-048.84E-025.36E+00 + 41M4 70.008.42E-062.21E-041.67E-021.58E+003.03E-061.89E-041.40E-026.43E-01 + 41M4 103.001.42E-062.65E-051.17E-037.18E-026.64E-072.65E-051.31E-034.18E-02 + 41M4 150.002.59E-073.43E-069.12E-053.72E-031.50E-073.94E-061.33E-043.02E-03 + 41M5 1.202.08E+027.29E+057.34E+101.41E+154.54E+002.25E+041.30E+101.12E+15 + 41M5 2.202.52E+013.25E+041.03E+097.52E+126.15E-011.10E+031.89E+085.13E+12 + 41M5 4.202.23E+001.16E+031.06E+072.99E+106.94E-024.42E+012.07E+061.70E+10 + 41M5 8.201.53E-013.47E+019.15E+041.04E+086.81E-031.59E+001.95E+044.97E+07 + 41M5 15.201.12E-021.27E+001.13E+035.91E+057.48E-047.52E-022.64E+022.50E+05 + 41M5 25.001.25E-038.37E-023.28E+019.36E+031.20E-046.46E-038.34E+003.80E+03 + 41M5 40.001.50E-046.18E-031.16E+001.90E+022.07E-056.38E-043.24E-017.81E+01 + 41M5 52.004.55E-051.43E-031.80E-012.17E+017.69E-061.76E-045.33E-029.21E+00 + 41M5 70.001.17E-052.70E-042.20E-021.87E+002.48E-064.11E-057.00E-038.42E-01 + 41M5 103.001.98E-063.14E-051.46E-037.90E-025.72E-076.32E-065.15E-043.94E-02 + 41M5 150.003.60E-073.94E-061.06E-043.72E-031.37E-071.05E-064.22E-052.11E-03 + 41N+ 50.002.68E-039.79E-024.82E+001.84E+025.38E-031.70E-015.44E+001.73E+02 + 41N+ 70.001.02E-032.25E-026.78E-011.80E+012.04E-034.21E-028.83E-011.90E+01 + 41N+ 100.003.61E-045.06E-039.11E-021.62E+007.40E-041.02E-021.40E-012.02E+00 + 41N+ 150.001.11E-041.00E-031.05E-021.16E-012.41E-042.17E-031.94E-021.81E-01 + 41N+ 200.004.88E-053.34E-042.47E-031.97E-021.11E-047.66E-045.17E-033.62E-02 + 41N+ 500.004.23E-061.43E-054.60E-051.51E-041.10E-053.83E-051.23E-043.95E-04 + 42K 21.008.61E+005.12E+017.22E+015.83E+012.05E+018.34E+025.67E+031.07E+04 + 42K 21.707.90E+005.37E+011.21E+021.94E+021.86E+017.34E+025.68E+031.71E+04 + 42K 23.006.78E+005.50E+012.01E+025.95E+021.57E+015.86E+025.37E+032.60E+04 + 42K 26.204.80E+004.94E+013.02E+021.66E+031.06E+013.53E+024.04E+033.24E+04 + 42K 30.003.34E+003.89E+013.05E+022.22E+037.14E+002.09E+022.66E+032.70E+04 + 42K 34.002.38E+002.93E+012.58E+022.14E+034.93E+001.29E+021.71E+031.92E+04 + 42K 40.001.52E+001.91E+011.80E+021.61E+033.06E+006.88E+019.13E+021.08E+04 + 42K 48.009.11E-011.12E+011.06E+029.66E+021.80E+003.42E+014.34E+025.11E+03 + 42K 60.004.84E-015.54E+005.02E+014.37E+029.41E-011.47E+011.69E+021.86E+03 + 42K 73.002.76E-012.90E+002.44E+011.98E+025.36E-017.04E+007.30E+017.32E+02 + 42K 90.001.51E-011.42E+001.08E+017.94E+012.97E-013.25E+002.96E+012.64E+02 + 42K 103.001.02E-018.86E-016.31E+004.31E+012.03E-011.99E+001.66E+011.36E+02 + 42K 120.006.54E-025.18E-013.38E+002.12E+011.33E-011.15E+008.62E+006.39E+01 + 42K 143.003.93E-022.78E-011.64E+009.27E+008.26E-026.18E-014.10E+002.70E+01 + 42K 170.002.38E-021.51E-018.01E-014.07E+005.19E-023.39E-011.99E+001.16E+01 + 42K 235.009.50E-034.83E-022.11E-018.79E-012.22E-021.14E-015.36E-012.50E+00 + 42K 320.004.07E-031.69E-026.12E-022.13E-011.01E-024.25E-021.62E-016.11E-01 + 42K 410.002.13E-037.59E-032.38E-027.21E-025.49E-031.99E-026.49E-022.08E-01 + 42K 520.001.19E-033.69E-031.02E-022.73E-023.11E-039.87E-032.81E-027.82E-02 + 42K 750.005.21E-041.36E-033.16E-037.09E-031.34E-033.57E-038.43E-031.93E-02 + 42K 1000.002.92E-046.78E-041.41E-032.80E-037.10E-041.69E-033.52E-037.06E-03 + 42K 1250.001.93E-044.16E-047.99E-041.47E-034.42E-049.71E-041.87E-033.43E-03 + 42K 1500.001.41E-042.86E-045.21E-049.02E-043.04E-046.30E-041.14E-031.97E-03 + 42L1 3.872.49E+019.03E+031.90E+069.50E+073.53E+024.05E+057.82E+074.41E+09 + 42L1 4.571.86E+013.34E+031.01E+068.03E+072.15E+021.83E+053.09E+072.13E+09 + 42L1 5.871.16E+016.21E+023.00E+053.29E+071.01E+025.59E+047.64E+065.72E+08 + 42L1 9.074.78E+009.12E+002.19E+043.10E+062.76E+017.36E+036.86E+054.60E+07 + 42L1 12.872.20E+005.80E+001.64E+032.99E+059.70E+001.49E+031.01E+055.58E+06 + 42L1 17.001.15E+007.79E+001.19E+023.54E+044.23E+004.30E+022.26E+041.03E+06 + 42L1 23.005.50E-015.55E+001.50E+012.44E+031.72E+001.14E+024.55E+031.64E+05 + 42L1 31.002.58E-012.98E+001.65E+011.50E+027.12E-013.18E+019.60E+022.71E+04 + 42L1 43.001.09E-011.27E+009.51E+005.44E+012.73E-018.11E+001.81E+023.86E+03 + 42L1 56.005.36E-025.81E-014.56E+003.02E+011.27E-012.77E+004.83E+018.22E+02 + 42L1 73.002.58E-022.52E-011.89E+001.28E+015.91E-029.66E-011.33E+011.79E+02 + 42L1 86.001.64E-021.48E-011.05E+006.86E+003.71E-025.11E-016.06E+007.09E+01 + 42L1 103.009.85E-038.09E-025.32E-013.28E+002.24E-022.57E-012.60E+002.60E+01 + 42L1 126.005.57E-034.08E-022.44E-011.38E+001.28E-021.21E-011.03E+008.68E+00 + 42L1 155.003.10E-032.00E-021.07E-015.48E-017.30E-035.72E-024.07E-012.88E+00 + 42L1 220.001.16E-036.02E-032.66E-021.12E-012.88E-031.68E-029.03E-024.82E-01 + 42L1 305.004.79E-042.02E-037.42E-032.62E-021.24E-035.71E-032.39E-029.96E-02 + 42L1 390.002.52E-049.18E-042.95E-039.16E-036.75E-042.63E-039.31E-033.25E-02 + 42L1 500.001.37E-044.33E-041.23E-033.35E-033.70E-041.24E-033.76E-031.12E-02 + 42L1 730.005.82E-051.54E-043.65E-048.38E-041.54E-044.26E-041.05E-032.49E-03 + 42L11000.003.08E-057.22E-051.51E-043.04E-047.67E-051.85E-043.95E-048.08E-04 + 42L2 3.634.98E+016.16E+054.90E+086.00E+103.90E+011.78E+041.66E+067.78E+07 + 42L2 4.333.00E+012.53E+051.72E+082.52E+102.26E+018.86E+039.87E+056.85E+07 + 42L2 5.631.38E+016.71E+043.57E+075.59E+091.01E+013.10E+033.69E+053.17E+07 + 42L2 8.833.43E+006.96E+032.40E+063.30E+082.50E+005.08E+025.31E+044.44E+06 + 42L2 12.631.08E+001.16E+032.81E+053.13E+078.27E-011.20E+021.02E+047.25E+05 + 42L2 17.004.06E-012.62E+024.73E+044.27E+063.29E-013.60E+012.50E+031.48E+05 + 42L2 23.001.46E-015.82E+017.76E+035.56E+051.29E-011.06E+015.87E+022.79E+04 + 42L2 31.005.23E-021.33E+011.31E+037.34E+045.13E-023.18E+001.38E+025.23E+03 + 42L2 43.001.66E-022.65E+001.88E+027.99E+031.86E-028.48E-012.81E+018.18E+02 + 42L2 56.006.51E-037.28E-013.96E+011.34E+038.23E-032.93E-017.77E+001.81E+02 + 42L2 73.002.52E-032.01E-018.41E+002.25E+023.63E-031.01E-012.14E+004.00E+01 + 42L2 86.001.40E-039.12E-023.25E+007.53E+012.19E-035.25E-029.67E-011.58E+01 + 42L2 103.007.33E-043.84E-021.15E+002.28E+011.25E-032.56E-024.05E-015.68E+00 + 42L2 126.003.56E-041.48E-023.64E-016.06E+006.75E-041.15E-021.54E-011.83E+00 + 42L2 155.001.71E-045.60E-031.13E-011.58E+003.57E-045.11E-035.74E-025.76E-01 + 42L2 220.005.00E-051.12E-031.65E-021.72E-011.23E-041.31E-031.11E-028.46E-02 + 42L2 305.001.63E-052.63E-042.91E-032.33E-024.58E-053.80E-042.51E-031.49E-02 + 42L2 390.007.19E-069.16E-058.26E-045.49E-032.20E-051.52E-048.43E-044.19E-03 + 42L2 500.003.23E-063.28E-052.43E-041.35E-031.05E-056.16E-052.88E-041.21E-03 + 42L2 730.001.02E-067.46E-064.17E-051.80E-043.50E-061.62E-056.03E-052.01E-04 + 42L21000.004.14E-072.37E-061.07E-053.84E-051.43E-065.59E-061.76E-054.96E-05 + 42L3 3.521.01E+021.26E+061.05E+091.35E+111.30E+014.78E+052.38E+091.20E+12 + 42L3 4.225.93E+015.02E+053.54E+085.38E+107.45E+001.93E+056.95E+082.97E+11 + 42L3 5.522.64E+011.28E+057.00E+071.12E+103.25E+005.07E+041.13E+083.79E+10 + 42L3 8.726.31E+001.26E+044.39E+066.07E+087.94E-015.18E+035.35E+061.17E+09 + 42L3 12.521.94E+002.02E+034.88E+055.44E+072.60E-018.55E+024.96E+057.70E+07 + 42L3 17.006.96E-014.30E+027.60E+046.81E+061.02E-011.87E+026.82E+047.94E+06 + 42L3 23.002.47E-019.32E+011.21E+048.54E+054.01E-024.17E+019.88E+038.64E+05 + 42L3 31.008.67E-022.06E+011.97E+031.08E+051.60E-029.51E+001.51E+039.96E+04 + 42L3 43.002.70E-023.96E+002.69E+021.12E+045.86E-031.90E+001.98E+029.66E+03 + 42L3 56.001.04E-021.05E+005.39E+011.77E+032.60E-035.21E-013.96E+011.51E+03 + 42L3 73.003.97E-032.77E-011.08E+012.79E+021.16E-031.44E-018.05E+002.42E+02 + 42L3 86.002.18E-031.22E-014.00E+008.93E+017.01E-046.53E-023.05E+007.90E+01 + 42L3 103.001.13E-034.95E-021.35E+002.55E+014.04E-042.75E-021.06E+002.34E+01 + 42L3 126.005.44E-041.82E-024.00E-016.32E+002.19E-041.06E-023.29E-016.11E+00 + 42L3 155.002.58E-046.56E-031.16E-011.52E+001.17E-044.01E-031.01E-011.57E+00 + 42L3 220.007.49E-051.20E-031.47E-021.40E-014.13E-057.99E-041.43E-021.67E-01 + 42L3 305.002.46E-052.58E-042.23E-031.60E-021.60E-051.85E-042.42E-032.20E-02 + 42L3 390.001.10E-058.45E-055.66E-043.26E-037.94E-066.36E-056.59E-045.01E-03 + 42L3 500.005.09E-062.87E-051.49E-046.95E-044.01E-062.25E-051.83E-041.17E-03 + 42L3 730.001.71E-066.24E-062.22E-057.66E-051.49E-065.09E-062.82E-051.41E-04 + 42L31000.007.58E-072.00E-065.34E-061.45E-056.96E-071.66E-066.50E-062.63E-05 + 42M1 1.502.18E+016.35E+044.08E+063.74E+091.07E+037.99E+069.77E+093.45E+12 + 42M1 2.501.04E+016.54E+031.83E+066.83E+072.31E+026.59E+053.86E+081.01E+11 + 42M1 4.503.60E+002.71E+021.56E+052.01E+073.98E+013.87E+041.05E+071.76E+09 + 42M1 8.509.72E-011.50E+004.28E+037.10E+055.95E+001.93E+032.46E+052.42E+07 + 42M1 15.502.48E-011.68E+004.38E+011.18E+049.92E-011.24E+028.19E+034.72E+05 + 42M1 25.007.73E-028.59E-013.46E+002.09E+022.40E-011.50E+016.06E+022.26E+04 + 42M1 40.002.30E-022.69E-011.97E+001.22E+016.01E-022.03E+005.13E+011.24E+03 + 42M1 52.001.14E-021.26E-019.86E-016.51E+002.80E-026.89E-011.35E+012.57E+02 + 42M1 70.005.07E-035.01E-023.77E-012.55E+001.19E-022.09E-013.08E+004.47E+01 + 42M1 103.001.73E-031.41E-029.22E-025.65E-014.00E-034.68E-024.84E-014.97E+00 + 42M1 150.006.00E-043.93E-032.13E-021.10E-011.42E-031.16E-028.66E-026.42E-01 + 42M1 280.001.06E-044.72E-041.82E-036.73E-032.75E-041.35E-036.10E-032.73E-02 + 42M1 500.002.41E-057.68E-052.17E-045.95E-046.60E-052.23E-046.77E-042.02E-03 + 42M2 1.414.94E+011.24E+074.79E+102.82E+131.20E+022.66E+051.19E+082.90E+10 + 42M2 2.411.62E+018.35E+051.54E+096.75E+112.35E+012.49E+048.27E+061.87E+09 + 42M2 4.413.61E+004.00E+043.48E+071.01E+103.74E+001.87E+034.11E+056.99E+07 + 42M2 8.415.87E-011.57E+036.52E+051.15E+085.20E-011.25E+021.69E+041.88E+06 + 42M2 15.419.08E-027.68E+011.65E+041.76E+068.11E-021.04E+018.53E+025.97E+04 + 42M2 25.001.86E-026.98E+008.95E+026.31E+041.83E-021.44E+007.85E+013.71E+03 + 42M2 40.003.76E-036.92E-015.43E+012.53E+034.31E-032.14E-017.77E+002.47E+02 + 42M2 52.001.51E-031.92E-011.15E+014.24E+021.92E-037.43E-022.14E+005.44E+01 + 42M2 70.005.28E-044.55E-022.02E+005.69E+017.68E-042.25E-025.01E-019.85E+00 + 42M2 103.001.34E-047.14E-032.16E-014.32E+002.34E-044.82E-037.68E-021.09E+00 + 42M2 150.003.52E-051.22E-032.56E-023.70E-017.39E-051.09E-031.27E-021.32E-01 + 42M2 280.004.07E-067.17E-058.57E-047.38E-031.11E-059.87E-056.98E-044.42E-03 + 42M2 500.006.07E-076.16E-064.57E-052.55E-041.98E-061.16E-055.44E-052.29E-04 + 42M3 1.391.01E+022.37E+079.29E+105.46E+133.81E+019.35E+062.95E+119.13E+14 + 42M3 2.393.16E+011.54E+062.86E+091.24E+127.32E+006.25E+057.04E+099.79E+12 + 42M3 4.396.75E+007.18E+046.20E+071.77E+101.14E+003.01E+041.11E+086.83E+10 + 42M3 8.391.05E+002.73E+031.11E+061.94E+081.58E-011.19E+031.42E+064.02E+08 + 42M3 15.391.58E-011.28E+022.67E+042.82E+062.47E-025.80E+012.62E+043.80E+06 + 42M3 25.003.14E-021.11E+011.38E+039.51E+045.62E-035.22E+001.16E+031.02E+05 + 42M3 40.006.15E-031.05E+007.84E+013.56E+031.34E-035.13E-016.08E+013.34E+03 + 42M3 52.002.43E-032.81E-011.59E+015.67E+026.01E-041.42E-011.21E+015.16E+02 + 42M3 70.008.36E-046.33E-022.61E+007.11E+012.43E-043.34E-022.01E+006.46E+01 + 42M3 103.002.07E-049.21E-032.53E-014.83E+007.50E-055.21E-032.04E-014.61E+00 + 42M3 150.005.36E-051.44E-032.65E-023.59E-012.41E-058.83E-042.34E-023.79E-01 + 42M3 280.006.13E-067.20E-056.85E-045.29E-033.82E-065.10E-057.31E-047.15E-03 + 42M3 500.009.59E-075.40E-062.80E-051.31E-047.52E-074.24E-063.48E-052.24E-04 + 42M4 1.231.46E+025.54E+055.12E+101.03E+157.93E+001.94E+053.15E+095.79E+12 + 42M4 2.231.88E+012.61E+047.72E+085.98E+121.09E+009.68E+035.99E+076.78E+10 + 42M4 4.231.74E+009.65E+028.32E+062.51E+101.22E-013.80E+029.02E+055.83E+08 + 42M4 8.231.23E-012.99E+017.42E+049.08E+071.17E-021.29E+011.23E+044.32E+06 + 42M4 15.239.31E-031.13E+009.44E+025.32E+051.24E-035.64E-012.45E+024.81E+04 + 42M4 25.001.07E-037.71E-022.83E+018.78E+031.95E-044.50E-021.08E+011.31E+03 + 42M4 40.001.30E-045.87E-031.03E+001.85E+023.25E-054.09E-035.68E-014.42E+01 + 42M4 52.003.97E-051.38E-031.64E-012.19E+011.18E-051.07E-031.11E-016.73E+00 + 42M4 70.001.02E-052.69E-042.07E-021.97E+003.71E-062.35E-041.76E-028.07E-01 + 42M4 103.001.75E-063.25E-051.45E-038.99E-028.16E-073.31E-051.64E-035.26E-02 + 42M4 150.003.26E-074.23E-061.13E-044.66E-031.85E-074.94E-061.67E-043.81E-03 + 42M5 1.232.15E+027.68E+057.89E+101.53E+154.99E+002.49E+041.47E+101.28E+15 + 42M5 2.232.73E+013.58E+041.18E+098.71E+126.98E-011.28E+032.27E+086.32E+12 + 42M5 4.232.50E+001.31E+031.26E+073.60E+108.05E-025.24E+012.58E+062.18E+10 + 42M5 8.231.76E-014.01E+011.11E+051.28E+088.01E-031.91E+002.46E+046.48E+07 + 42M5 15.231.31E-021.49E+001.38E+037.30E+058.90E-049.09E-023.37E+023.28E+05 + 42M5 25.001.49E-039.99E-024.06E+011.17E+041.45E-047.86E-031.08E+015.01E+03 + 42M5 40.001.80E-047.43E-031.44E+002.37E+022.51E-057.78E-044.16E-011.02E+02 + 42M5 52.005.48E-051.72E-032.23E-012.70E+019.32E-062.15E-046.85E-021.20E+01 + 42M5 70.001.41E-053.27E-042.73E-022.34E+003.02E-065.02E-058.98E-031.09E+00 + 42M5 103.002.38E-063.82E-051.81E-039.87E-026.98E-077.74E-066.58E-045.10E-02 + 42M5 150.004.32E-074.80E-061.32E-044.65E-031.68E-071.28E-065.37E-052.72E-03 + 42N+ 50.002.94E-031.13E-015.69E+002.18E+026.28E-032.02E-016.59E+002.13E+02 + 42N+ 70.001.12E-032.56E-027.96E-012.13E+012.37E-034.99E-021.06E+002.30E+01 + 42N+ 100.003.98E-045.70E-031.06E-011.91E+008.62E-041.20E-021.67E-012.42E+00 + 42N+ 150.001.23E-041.12E-031.20E-021.36E-012.80E-042.54E-032.29E-022.16E-01 + 42N+ 200.005.40E-053.73E-042.81E-032.28E-021.29E-048.94E-046.07E-034.28E-02 + 42N+ 500.004.72E-061.60E-055.17E-051.71E-041.27E-054.42E-051.42E-044.59E-04 + 43K 22.047.81E+004.39E+015.73E+014.18E+011.98E+017.63E+024.92E+038.60E+03 + 43K 22.747.19E+004.60E+019.57E+011.38E+021.80E+016.76E+024.94E+031.37E+04 + 43K 24.046.22E+004.73E+011.58E+024.27E+021.53E+015.45E+024.70E+032.09E+04 + 43K 27.244.47E+004.30E+012.43E+021.23E+031.06E+013.36E+023.61E+032.68E+04 + 43K 31.043.15E+003.45E+012.52E+021.70E+037.19E+002.03E+022.44E+032.31E+04 + 43K 35.002.27E+002.64E+012.18E+021.69E+035.05E+001.28E+021.60E+031.70E+04 + 43K 41.001.47E+001.76E+011.56E+021.32E+033.17E+006.93E+018.78E+029.88E+03 + 43K 49.008.96E-011.05E+019.51E+018.24E+021.88E+003.50E+014.27E+024.81E+03 + 43K 61.004.82E-015.31E+004.63E+013.87E+029.99E-011.53E+011.71E+021.81E+03 + 43K 74.002.78E-012.82E+002.30E+011.80E+025.74E-017.40E+007.47E+017.28E+02 + 43K 91.001.53E-011.40E+001.04E+017.41E+013.19E-013.45E+003.07E+012.68E+02 + 43K 104.001.04E-018.82E-016.12E+004.08E+012.20E-012.12E+001.73E+011.39E+02 + 43K 121.006.71E-025.20E-013.32E+002.03E+011.44E-011.23E+009.09E+006.62E+01 + 43K 144.004.05E-022.82E-011.63E+009.02E+008.97E-026.65E-014.36E+002.82E+01 + 43K 170.002.51E-021.57E-018.22E-014.13E+005.73E-023.74E-012.18E+001.26E+01 + 43K 235.001.00E-025.06E-022.18E-019.01E-012.44E-021.26E-015.87E-012.71E+00 + 43K 320.004.32E-031.78E-026.39E-022.20E-011.11E-024.67E-021.77E-016.66E-01 + 43K 410.002.26E-038.01E-032.50E-027.53E-026.03E-032.18E-027.10E-022.27E-01 + 43K 520.001.26E-033.92E-031.08E-022.87E-023.41E-031.08E-023.08E-028.53E-02 + 43K 750.005.55E-041.45E-033.36E-037.53E-031.46E-033.91E-039.22E-032.10E-02 + 43K 1000.003.11E-047.26E-041.50E-032.99E-037.73E-041.84E-033.85E-037.70E-03 + 43K 1250.002.07E-044.45E-048.57E-041.57E-034.81E-041.06E-032.04E-033.74E-03 + 43K 1500.001.51E-043.07E-045.59E-049.69E-043.30E-046.87E-041.24E-032.15E-03 + 43L1 4.042.29E+018.13E+031.58E+067.22E+073.47E+023.81E+057.01E+073.70E+09 + 43L1 4.741.73E+013.15E+038.82E+056.41E+072.15E+021.78E+052.88E+071.86E+09 + 43L1 6.041.10E+016.35E+022.77E+052.82E+071.04E+025.64E+047.46E+065.29E+08 + 43L1 9.244.65E+001.28E+012.26E+042.97E+062.93E+017.78E+037.08E+054.58E+07 + 43L1 13.042.18E+004.39E+001.88E+033.10E+051.05E+011.62E+031.08E+055.77E+06 + 43L1 17.001.18E+006.70E+001.78E+024.29E+044.75E+004.93E+022.58E+041.16E+06 + 43L1 23.005.66E-015.17E+001.41E+013.28E+031.94E+001.31E+025.18E+031.84E+05 + 43L1 31.002.67E-012.89E+001.38E+011.99E+028.00E-013.63E+011.09E+033.05E+04 + 43L1 43.001.14E-011.26E+008.73E+004.78E+013.06E-019.21E+002.05E+024.34E+03 + 43L1 56.005.60E-025.85E-014.35E+002.73E+011.42E-013.13E+005.46E+019.24E+02 + 43L1 73.002.71E-022.57E-011.85E+001.20E+016.63E-021.09E+001.49E+012.01E+02 + 43L1 86.001.72E-021.51E-011.04E+006.59E+004.16E-025.75E-016.81E+007.95E+01 + 43L1 103.001.04E-028.32E-025.34E-013.21E+002.51E-022.89E-012.91E+002.91E+01 + 43L1 126.005.89E-034.22E-022.47E-011.37E+001.43E-021.36E-011.15E+009.69E+00 + 43L1 155.003.28E-032.08E-021.10E-015.52E-018.14E-036.40E-024.55E-013.22E+00 + 43L1 220.001.23E-036.32E-032.76E-021.15E-013.20E-031.88E-021.01E-015.36E-01 + 43L1 305.005.10E-042.13E-037.77E-032.73E-021.38E-036.35E-032.66E-021.11E-01 + 43L1 390.002.70E-049.74E-043.11E-039.62E-037.48E-042.92E-031.03E-023.60E-02 + 43L1 500.001.46E-044.62E-041.30E-033.55E-034.10E-041.38E-034.17E-031.23E-02 + 43L1 730.006.24E-051.65E-043.91E-048.97E-041.70E-044.70E-041.16E-032.75E-03 + 43L11000.003.31E-057.77E-051.63E-043.28E-048.42E-052.04E-044.35E-048.91E-04 + 43L2 3.794.59E+015.51E+054.18E+084.77E+103.84E+011.67E+041.45E+066.17E+07 + 43L2 4.492.83E+012.34E+051.53E+082.10E+102.28E+018.53E+038.91E+055.69E+07 + 43L2 5.791.33E+016.51E+043.35E+074.97E+091.04E+013.10E+033.49E+052.80E+07 + 43L2 8.993.45E+007.12E+032.41E+063.18E+082.68E+005.30E+025.34E+044.27E+06 + 43L2 12.791.12E+001.22E+032.92E+053.16E+079.02E-011.28E+021.06E+047.30E+05 + 43L2 17.004.40E-012.95E+025.32E+044.74E+063.74E-014.07E+012.79E+031.61E+05 + 43L2 23.001.59E-016.56E+018.74E+036.19E+051.47E-011.20E+016.56E+023.08E+04 + 43L2 31.005.72E-021.50E+011.48E+038.22E+045.85E-023.60E+001.55E+025.80E+03 + 43L2 43.001.83E-022.99E+002.13E+028.97E+032.13E-029.63E-013.17E+019.13E+02 + 43L2 56.007.18E-038.23E-014.49E+011.51E+039.40E-033.33E-018.77E+002.03E+02 + 43L2 73.002.79E-032.27E-019.53E+002.54E+024.15E-031.15E-012.42E+004.50E+01 + 43L2 86.001.56E-031.03E-013.69E+008.52E+012.50E-035.99E-021.10E+001.78E+01 + 43L2 103.008.16E-044.36E-021.31E+002.58E+011.44E-032.93E-024.60E-016.42E+00 + 43L2 126.003.98E-041.68E-024.14E-016.88E+007.74E-041.32E-021.75E-012.07E+00 + 43L2 155.001.91E-046.37E-031.29E-011.80E+004.11E-045.86E-036.55E-026.54E-01 + 43L2 220.005.59E-051.28E-031.89E-021.96E-011.42E-041.51E-031.28E-029.64E-02 + 43L2 305.001.83E-053.00E-043.33E-032.67E-025.29E-054.37E-042.88E-031.70E-02 + 43L2 390.008.16E-061.05E-049.48E-046.30E-032.54E-051.75E-049.69E-044.80E-03 + 43L2 500.003.70E-063.76E-052.79E-041.55E-031.22E-057.11E-053.32E-041.39E-03 + 43L2 730.001.16E-068.56E-064.80E-052.08E-044.05E-061.88E-056.96E-052.32E-04 + 43L21000.004.66E-072.73E-061.24E-054.43E-051.65E-066.48E-062.03E-055.73E-05 + 43L3 3.689.32E+011.13E+069.04E+081.08E+111.27E+014.52E+052.16E+091.04E+12 + 43L3 4.385.60E+014.66E+053.17E+084.52E+107.42E+001.89E+056.61E+082.72E+11 + 43L3 5.682.57E+011.25E+056.60E+071.00E+103.33E+005.17E+041.14E+083.70E+10 + 43L3 8.886.35E+001.29E+044.40E+065.87E+088.38E-015.57E+035.75E+061.23E+09 + 43L3 12.682.00E+002.12E+035.06E+055.49E+072.79E-019.43E+025.51E+058.43E+07 + 43L3 17.007.50E-014.81E+028.50E+047.51E+061.13E-012.19E+028.19E+049.51E+06 + 43L3 23.002.67E-011.04E+021.35E+049.46E+054.47E-024.89E+011.18E+041.03E+06 + 43L3 31.009.42E-022.31E+012.20E+031.20E+051.79E-021.11E+011.80E+031.18E+05 + 43L3 43.002.95E-024.44E+003.01E+021.24E+046.54E-032.22E+002.35E+021.15E+04 + 43L3 56.001.14E-021.18E+006.05E+011.98E+032.91E-036.10E-014.68E+011.79E+03 + 43L3 73.004.36E-033.11E-011.21E+013.12E+021.29E-031.68E-019.50E+002.85E+02 + 43L3 86.002.40E-031.37E-014.50E+009.99E+017.84E-047.62E-023.59E+009.29E+01 + 43L3 103.001.25E-035.56E-021.51E+002.86E+014.52E-043.21E-021.24E+002.75E+01 + 43L3 126.006.01E-042.05E-024.51E-017.09E+002.45E-041.23E-023.86E-017.16E+00 + 43L3 155.002.86E-047.38E-031.31E-011.71E+001.31E-044.65E-031.18E-011.84E+00 + 43L3 220.008.33E-051.35E-031.66E-021.58E-014.63E-059.24E-041.67E-021.95E-01 + 43L3 305.002.75E-052.91E-042.52E-031.80E-021.79E-052.13E-042.82E-032.56E-02 + 43L3 390.001.23E-059.53E-056.39E-043.68E-038.90E-067.31E-057.66E-045.83E-03 + 43L3 500.005.70E-063.24E-051.68E-047.84E-044.49E-062.58E-052.12E-041.36E-03 + 43L3 730.001.90E-067.04E-062.51E-058.65E-051.67E-065.79E-063.25E-051.63E-04 + 43L31000.008.48E-072.25E-066.03E-061.64E-057.77E-071.88E-067.47E-063.04E-05 + 43M1 1.542.09E+016.23E+043.59E+063.78E+091.12E+038.35E+061.01E+103.48E+12 + 43M1 2.541.02E+016.84E+031.75E+065.57E+072.51E+027.24E+054.25E+081.08E+11 + 43M1 4.543.60E+003.13E+021.62E+051.94E+074.42E+014.39E+041.20E+071.97E+09 + 43M1 8.549.88E-012.21E+004.90E+037.59E+056.68E+002.22E+032.83E+052.76E+07 + 43M1 15.542.56E-011.48E+006.06E+011.39E+041.12E+001.43E+029.45E+035.41E+05 + 43M1 25.008.08E-028.27E-013.05E+002.87E+022.73E-011.74E+017.03E+022.61E+04 + 43M1 40.002.42E-022.70E-011.82E+001.19E+016.83E-022.34E+005.92E+011.43E+03 + 43M1 52.001.21E-021.28E-019.47E-015.99E+003.18E-027.91E-011.55E+012.94E+02 + 43M1 70.005.38E-035.15E-023.73E-012.43E+001.35E-022.39E-013.53E+005.11E+01 + 43M1 103.001.84E-031.47E-029.36E-025.60E-014.53E-035.33E-025.51E-015.65E+00 + 43M1 150.006.41E-044.13E-032.20E-021.12E-011.61E-031.32E-029.82E-027.27E-01 + 43M1 280.001.14E-045.03E-041.92E-037.06E-033.10E-041.53E-036.87E-033.07E-02 + 43M1 500.002.62E-058.29E-052.33E-046.38E-047.38E-052.50E-047.59E-042.26E-03 + 43M2 1.444.78E+011.25E+074.78E+102.73E+131.28E+022.80E+051.21E+082.80E+10 + 43M2 2.441.62E+018.85E+051.64E+096.99E+112.58E+012.73E+048.84E+061.92E+09 + 43M2 4.443.73E+004.39E+043.83E+071.09E+104.19E+002.09E+034.52E+057.49E+07 + 43M2 8.446.23E-011.76E+037.30E+051.28E+085.90E-011.42E+021.89E+042.06E+06 + 43M2 15.449.83E-028.68E+011.86E+041.98E+069.29E-021.18E+019.63E+026.67E+04 + 43M2 25.002.05E-027.99E+001.03E+037.21E+042.12E-021.66E+008.98E+014.21E+03 + 43M2 40.004.18E-037.94E-016.25E+012.90E+034.99E-032.47E-018.91E+002.81E+02 + 43M2 52.001.68E-032.21E-011.33E+014.86E+022.23E-038.59E-022.46E+006.21E+01 + 43M2 70.005.93E-045.23E-022.32E+006.54E+018.92E-042.61E-025.77E-011.13E+01 + 43M2 103.001.51E-048.23E-032.49E-014.98E+002.73E-045.59E-038.88E-021.25E+00 + 43M2 150.004.01E-051.40E-032.97E-024.28E-018.63E-051.27E-031.47E-021.52E-01 + 43M2 280.004.62E-068.31E-059.97E-048.58E-031.30E-051.15E-048.13E-045.13E-03 + 43M2 500.007.03E-077.17E-065.34E-052.98E-042.32E-061.36E-056.37E-052.68E-04 + 43M3 1.429.87E+012.39E+079.32E+105.31E+134.01E+019.95E+063.14E+119.69E+14 + 43M3 2.423.18E+011.64E+063.04E+091.28E+127.94E+006.98E+057.99E+091.12E+13 + 43M3 4.426.98E+007.86E+046.80E+071.91E+101.26E+003.46E+041.30E+088.12E+10 + 43M3 8.421.12E+003.04E+031.24E+062.13E+081.77E-011.39E+031.70E+064.86E+08 + 43M3 15.421.70E-011.44E+023.01E+043.14E+062.78E-026.85E+013.16E+044.61E+06 + 43M3 25.003.44E-021.27E+011.57E+031.08E+056.37E-036.23E+001.41E+031.24E+05 + 43M3 40.006.80E-031.19E+008.95E+014.04E+031.52E-036.11E-017.37E+014.05E+03 + 43M3 52.002.69E-033.20E-011.81E+016.45E+026.81E-041.69E-011.46E+016.24E+02 + 43M3 70.009.31E-047.22E-022.99E+008.09E+012.75E-043.97E-022.42E+007.77E+01 + 43M3 103.002.32E-041.05E-022.89E-015.51E+008.52E-056.18E-032.44E-015.52E+00 + 43M3 150.006.03E-051.65E-033.04E-024.11E-012.74E-051.04E-032.78E-024.52E-01 + 43M3 280.006.86E-068.24E-057.87E-046.07E-034.35E-065.98E-058.66E-048.49E-03 + 43M3 500.001.07E-066.18E-063.22E-051.51E-048.56E-074.94E-064.11E-052.65E-04 + 43M4 1.261.50E+025.77E+055.38E+101.09E+158.63E+002.13E+053.49E+096.26E+12 + 43M4 2.262.02E+012.86E+048.67E+086.81E+121.23E+001.12E+047.01E+077.82E+10 + 43M4 4.261.93E+001.09E+039.74E+062.98E+101.41E-014.53E+021.09E+066.97E+08 + 43M4 8.261.41E-013.45E+018.88E+041.10E+081.37E-021.57E+011.51E+045.27E+06 + 43M4 15.261.08E-021.32E+001.14E+036.52E+051.48E-036.89E-013.02E+025.92E+04 + 43M4 25.001.27E-039.19E-023.47E+011.09E+042.35E-045.56E-021.34E+011.64E+03 + 43M4 40.001.55E-047.05E-031.27E+002.30E+023.93E-055.05E-037.08E-015.51E+01 + 43M4 52.004.75E-051.67E-032.02E-012.72E+011.43E-051.33E-031.38E-018.39E+00 + 43M4 70.001.23E-053.25E-042.55E-022.45E+004.51E-062.92E-042.20E-021.01E+00 + 43M4 103.002.13E-063.93E-051.78E-031.12E-019.94E-074.10E-052.05E-036.56E-02 + 43M4 150.003.89E-075.15E-061.40E-045.81E-032.27E-076.13E-062.09E-044.76E-03 + 43M4 280.002.44E-081.98E-072.38E-065.00E-051.97E-082.73E-075.06E-066.78E-05 + 43M4 500.002.28E-091.15E-087.04E-087.80E-072.11E-091.63E-081.79E-071.54E-06 + 43M5 1.252.21E+027.97E+058.30E+101.61E+155.42E+002.72E+041.63E+101.43E+15 + 43M5 2.252.93E+013.90E+041.32E+099.92E+127.83E-011.46E+032.69E+087.64E+12 + 43M5 4.252.78E+001.47E+031.47E+074.27E+109.24E-026.14E+013.17E+062.76E+10 + 43M5 8.252.00E-014.61E+011.33E+051.55E+089.35E-032.28E+003.09E+048.36E+07 + 43M5 15.251.52E-021.74E+001.68E+038.93E+051.05E-031.09E-014.27E+024.25E+05 + 43M5 25.001.76E-031.18E-014.98E+011.45E+041.73E-049.51E-031.38E+016.55E+03 + 43M5 40.002.14E-048.86E-031.77E+002.93E+023.01E-059.42E-045.32E-011.33E+02 + 43M5 52.006.52E-052.06E-032.75E-013.35E+011.12E-052.60E-048.74E-021.56E+01 + 43M5 70.001.68E-053.93E-043.36E-022.90E+003.64E-066.09E-051.14E-021.41E+00 + 43M5 103.002.91E-064.60E-052.22E-031.22E-018.43E-079.39E-068.34E-046.55E-02 + 43M5 150.005.37E-075.83E-061.62E-045.77E-032.04E-071.56E-066.79E-053.48E-03 + 43M5 280.003.68E-082.15E-072.39E-063.99E-052.05E-088.86E-081.21E-063.05E-05 + 43M5 500.003.73E-091.28E-086.34E-084.89E-072.77E-097.47E-093.87E-084.53E-07 + 43N+ 50.003.31E-031.32E-016.85E+002.64E+027.53E-032.46E-018.17E+002.67E+02 + 43N+ 70.001.26E-032.97E-029.52E-012.57E+012.84E-036.05E-021.30E+002.86E+01 + 43N+ 100.004.50E-046.57E-031.26E-012.30E+001.03E-031.44E-022.04E-012.98E+00 + 43N+ 150.001.40E-041.29E-031.41E-021.62E-013.34E-043.05E-032.78E-022.63E-01 + 43N+ 200.006.15E-054.26E-043.27E-032.70E-021.54E-041.07E-037.31E-035.19E-02 + 43N+ 500.005.40E-061.83E-055.97E-051.99E-041.50E-055.24E-051.69E-045.48E-04 + 44K 23.127.10E+003.77E+014.54E+012.96E+011.91E+017.00E+024.27E+036.91E+03 + 44K 23.826.56E+003.95E+017.53E+019.77E+011.75E+016.23E+024.29E+031.10E+04 + 44K 25.125.71E+004.07E+011.25E+023.06E+021.50E+015.08E+024.11E+031.68E+04 + 44K 28.324.16E+003.75E+011.96E+029.07E+021.05E+013.19E+023.22E+032.22E+04 + 44K 32.122.97E+003.06E+012.08E+021.30E+037.24E+001.96E+022.23E+031.97E+04 + 44K 36.002.18E+002.39E+011.85E+021.34E+035.17E+001.26E+021.51E+031.50E+04 + 44K 42.001.43E+001.62E+011.36E+021.09E+033.29E+006.99E+018.44E+029.01E+03 + 44K 50.008.80E-019.88E+008.51E+017.02E+021.97E+003.59E+014.20E+024.53E+03 + 44K 62.004.80E-015.09E+004.26E+013.42E+021.06E+001.59E+011.72E+021.76E+03 + 44K 75.002.79E-012.74E+002.16E+011.64E+026.13E-017.78E+007.64E+017.23E+02 + 44K 92.001.55E-011.38E+009.96E+006.91E+013.43E-013.66E+003.19E+012.71E+02 + 44K 105.001.06E-018.77E-015.93E+003.85E+012.37E-012.26E+001.81E+011.42E+02 + 44K 122.006.88E-025.21E-013.25E+001.95E+011.56E-011.32E+009.57E+006.84E+01 + 44K 145.004.18E-022.85E-011.61E+008.77E+009.73E-027.15E-014.62E+002.95E+01 + 44K 170.002.65E-021.63E-018.42E-014.17E+006.33E-024.12E-012.38E+001.37E+01 + 44K 235.001.06E-025.28E-022.26E-019.23E-012.69E-021.38E-016.41E-012.95E+00 + 44K 320.004.58E-031.87E-026.66E-022.28E-011.22E-025.13E-021.94E-017.24E-01 + 44K 410.002.40E-038.45E-032.62E-027.85E-026.62E-032.39E-027.75E-022.47E-01 + 44K 520.001.34E-034.15E-031.14E-023.01E-023.73E-031.19E-023.36E-029.29E-02 + 44K 750.005.92E-041.54E-033.57E-037.98E-031.59E-034.27E-031.01E-022.29E-02 + 44K 1000.003.33E-047.74E-041.61E-033.19E-038.42E-042.01E-034.20E-038.39E-03 + 44K 1250.002.21E-044.76E-049.17E-041.68E-035.22E-041.15E-032.22E-034.07E-03 + 44K 1500.001.61E-043.28E-045.99E-041.04E-033.57E-047.48E-041.35E-032.34E-03 + 44L1 4.222.10E+017.35E+031.32E+065.43E+073.42E+023.58E+056.30E+073.09E+09 + 44L1 4.921.61E+012.98E+037.66E+055.08E+072.16E+021.72E+052.68E+071.62E+09 + 44L1 6.221.04E+016.46E+022.55E+052.41E+071.07E+025.68E+047.26E+064.87E+08 + 44L1 9.424.51E+001.70E+012.30E+042.82E+063.10E+018.19E+037.29E+054.53E+07 + 44L1 13.222.15E+003.29E+002.12E+033.19E+051.13E+011.74E+031.14E+055.95E+06 + 44L1 17.001.20E+005.64E+002.52E+025.11E+045.33E+005.64E+022.94E+041.30E+06 + 44L1 23.005.83E-014.76E+001.59E+014.27E+032.17E+001.49E+025.88E+032.07E+05 + 44L1 31.002.76E-012.78E+001.15E+012.73E+028.98E-014.12E+011.23E+033.43E+04 + 44L1 43.001.18E-011.24E+007.95E+004.37E+013.43E-011.04E+012.31E+024.88E+03 + 44L1 56.005.84E-025.87E-014.14E+002.46E+011.59E-013.53E+006.15E+011.04E+03 + 44L1 73.002.84E-022.61E-011.81E+001.13E+017.42E-021.23E+001.68E+012.25E+02 + 44L1 86.001.80E-021.54E-011.03E+006.31E+004.65E-026.47E-017.64E+008.88E+01 + 44L1 103.001.09E-028.55E-025.34E-013.13E+002.80E-023.24E-013.26E+003.25E+01 + 44L1 126.006.20E-034.36E-022.50E-011.36E+001.60E-021.52E-011.29E+001.08E+01 + 44L1 155.003.47E-032.17E-021.12E-015.54E-019.07E-037.15E-025.07E-013.58E+00 + 44L1 220.001.31E-036.62E-032.85E-021.18E-013.56E-032.09E-021.12E-015.95E-01 + 44L1 305.005.43E-042.25E-038.12E-032.83E-021.53E-037.05E-032.95E-021.22E-01 + 44L1 390.002.88E-041.03E-033.28E-031.01E-028.28E-043.24E-031.14E-023.99E-02 + 44L1 500.001.56E-044.92E-041.38E-033.76E-034.52E-041.52E-034.61E-031.36E-02 + 44L1 730.006.69E-051.77E-044.19E-049.59E-041.87E-045.19E-041.28E-033.04E-03 + 44L11000.003.56E-058.36E-051.75E-043.53E-049.23E-052.25E-044.80E-049.81E-04 + 44L11500.001.73E-053.55E-056.54E-051.15E-043.91E-058.28E-051.52E-042.67E-04 + 44L2 3.974.24E+014.93E+053.56E+083.77E+103.78E+011.56E+041.25E+064.82E+07 + 44L2 4.672.66E+012.17E+051.36E+081.74E+102.29E+018.20E+037.99E+054.67E+07 + 44L2 5.971.29E+016.30E+043.13E+074.39E+091.08E+013.08E+033.28E+052.46E+07 + 44L2 9.173.47E+007.27E+032.40E+063.05E+082.86E+005.51E+025.33E+044.08E+06 + 44L2 12.971.15E+001.28E+033.01E+053.18E+079.80E-011.36E+021.10E+047.30E+05 + 44L2 17.004.75E-013.31E+025.97E+045.24E+064.25E-014.58E+013.09E+031.75E+05 + 44L2 23.001.73E-017.37E+019.82E+036.88E+051.67E-011.35E+017.31E+023.38E+04 + 44L2 31.006.24E-021.68E+011.66E+039.17E+046.65E-024.07E+001.74E+026.42E+03 + 44L2 43.002.00E-023.37E+002.40E+021.01E+042.42E-021.09E+003.56E+011.02E+03 + 44L2 56.007.91E-039.29E-015.07E+011.69E+031.07E-023.78E-019.88E+002.27E+02 + 44L2 73.003.09E-032.57E-011.08E+012.86E+024.74E-031.31E-012.74E+005.05E+01 + 44L2 86.001.72E-031.17E-014.17E+009.61E+012.86E-036.81E-021.24E+002.00E+01 + 44L2 103.009.06E-044.94E-021.48E+002.91E+011.64E-033.33E-025.21E-017.23E+00 + 44L2 126.004.43E-041.90E-024.71E-017.78E+008.87E-041.50E-021.99E-012.34E+00 + 44L2 155.002.13E-047.23E-031.47E-012.04E+004.71E-046.69E-037.45E-027.40E-01 + 44L2 220.006.27E-051.46E-032.15E-022.23E-011.63E-041.73E-031.46E-021.10E-01 + 44L2 305.002.06E-053.43E-043.81E-033.05E-026.09E-055.02E-043.30E-031.94E-02 + 44L2 390.009.19E-061.20E-041.08E-037.20E-032.92E-052.02E-041.11E-035.49E-03 + 44L2 500.004.17E-064.30E-053.20E-041.78E-031.41E-058.20E-053.82E-041.60E-03 + 44L2 730.001.32E-069.81E-065.52E-052.39E-044.68E-062.17E-058.03E-052.67E-04 + 44L21000.005.33E-073.13E-061.42E-055.11E-051.91E-067.49E-062.35E-056.61E-05 + 44L21500.001.83E-078.06E-072.87E-068.35E-066.20E-072.03E-065.30E-061.24E-05 + 44L3 3.848.62E+011.01E+067.75E+088.63E+101.24E+014.27E+051.96E+099.04E+11 + 44L3 4.545.29E+014.33E+052.83E+083.79E+107.37E+001.85E+056.27E+082.49E+11 + 44L3 5.842.49E+011.21E+056.20E+078.92E+093.39E+005.27E+041.14E+083.60E+10 + 44L3 9.046.38E+001.32E+044.39E+065.65E+088.81E-015.95E+036.15E+061.29E+09 + 44L3 12.842.05E+002.22E+035.22E+055.52E+072.99E-011.04E+036.08E+059.17E+07 + 44L3 17.008.05E-015.37E+029.49E+048.26E+061.26E-012.56E+029.80E+041.13E+07 + 44L3 23.002.88E-011.17E+021.51E+041.04E+064.97E-025.71E+011.41E+041.23E+06 + 44L3 31.001.02E-012.58E+012.46E+031.33E+051.99E-021.30E+012.13E+031.40E+05 + 44L3 43.003.21E-024.97E+003.37E+021.38E+047.28E-032.59E+002.78E+021.35E+04 + 44L3 56.001.24E-021.31E+006.78E+012.20E+033.24E-037.11E-015.52E+012.10E+03 + 44L3 73.004.78E-033.48E-011.36E+013.48E+021.44E-031.96E-011.12E+013.35E+02 + 44L3 86.002.64E-031.53E-015.04E+001.12E+028.74E-048.86E-024.21E+001.09E+02 + 44L3 103.001.37E-036.24E-021.70E+003.19E+015.05E-043.73E-021.46E+003.21E+01 + 44L3 126.006.63E-042.29E-025.06E-017.93E+002.74E-041.43E-024.52E-018.37E+00 + 44L3 155.003.16E-048.28E-031.47E-011.91E+001.47E-045.38E-031.38E-012.15E+00 + 44L3 220.009.21E-051.52E-031.86E-021.77E-015.17E-051.06E-031.94E-022.27E-01 + 44L3 305.003.04E-053.26E-042.84E-032.02E-022.00E-052.45E-043.27E-032.97E-02 + 44L3 390.001.37E-051.07E-047.20E-044.14E-039.94E-068.38E-058.87E-046.76E-03 + 44L3 500.006.36E-063.64E-051.89E-048.83E-045.01E-062.94E-052.45E-041.58E-03 + 44L3 730.002.15E-067.89E-062.83E-059.75E-051.86E-066.57E-063.74E-051.88E-04 + 44L31000.009.40E-072.52E-066.78E-061.85E-058.67E-072.12E-068.55E-063.50E-05 + 44L31500.003.68E-077.01E-071.37E-062.83E-063.55E-075.99E-071.51E-064.59E-06 + 44M1 1.581.99E+016.06E+043.09E+063.76E+091.18E+038.68E+061.04E+103.45E+12 + 44M1 2.589.92E+007.10E+031.64E+064.56E+072.72E+027.90E+054.64E+081.15E+11 + 44M1 4.583.59E+003.56E+021.67E+051.84E+074.88E+014.94E+041.35E+072.20E+09 + 44M1 8.581.00E+003.28E+005.54E+038.03E+057.48E+002.53E+033.25E+053.14E+07 + 44M1 15.582.63E-011.28E+008.09E+011.63E+041.26E+001.64E+021.09E+046.18E+05 + 44M1 25.008.42E-027.90E-012.90E+003.83E+023.10E-012.01E+018.14E+023.02E+04 + 44M1 40.002.54E-022.69E-011.67E+001.23E+017.75E-022.69E+006.80E+011.64E+03 + 44M1 52.001.27E-021.29E-019.04E-015.56E+003.60E-029.06E-011.77E+013.36E+02 + 44M1 70.005.69E-035.28E-023.67E-012.31E+001.53E-022.73E-014.02E+005.82E+01 + 44M1 103.001.96E-031.53E-029.46E-025.52E-015.12E-036.06E-026.26E-016.41E+00 + 44M1 150.006.86E-044.34E-032.27E-021.14E-011.81E-031.49E-021.11E-018.21E-01 + 44M1 280.001.23E-045.36E-042.02E-037.39E-033.48E-041.72E-037.73E-033.45E-02 + 44M1 500.002.84E-058.92E-052.50E-046.83E-048.25E-052.80E-048.50E-042.53E-03 + 44M2 1.484.58E+011.24E+074.70E+102.58E+131.35E+022.91E+051.21E+082.62E+10 + 44M2 2.481.61E+019.31E+051.72E+097.13E+112.82E+012.96E+049.31E+061.94E+09 + 44M2 4.483.83E+004.78E+044.17E+071.16E+104.68E+002.33E+034.92E+057.92E+07 + 44M2 8.486.58E-011.96E+038.13E+051.40E+086.68E-011.60E+022.10E+042.25E+06 + 44M2 15.481.06E-019.76E+012.10E+042.21E+061.06E-011.34E+011.08E+037.39E+04 + 44M2 25.002.25E-029.11E+001.17E+038.19E+042.44E-021.91E+001.02E+024.75E+03 + 44M2 40.004.63E-039.07E-017.15E+013.30E+035.76E-032.85E-011.02E+013.19E+02 + 44M2 52.001.87E-032.52E-011.52E+015.56E+022.57E-039.90E-022.82E+007.07E+01 + 44M2 70.006.64E-045.99E-022.67E+007.49E+011.03E-033.01E-026.62E-011.29E+01 + 44M2 103.001.70E-049.45E-032.87E-015.72E+003.16E-046.47E-031.02E-011.43E+00 + 44M2 150.004.53E-051.62E-033.43E-024.93E-011.00E-041.47E-031.70E-021.75E-01 + 44M2 280.005.29E-069.62E-051.16E-039.94E-031.52E-051.34E-049.44E-045.94E-03 + 44M2 500.008.09E-078.32E-066.21E-053.46E-042.72E-061.59E-057.43E-053.12E-04 + 44M3 1.469.51E+012.39E+079.20E+105.05E+134.18E+011.05E+073.28E+111.01E+15 + 44M3 2.463.17E+011.72E+063.19E+091.31E+128.55E+007.72E+058.95E+091.26E+13 + 44M3 4.467.18E+008.55E+047.40E+072.03E+101.39E+003.96E+041.53E+089.54E+10 + 44M3 8.461.18E+003.37E+031.38E+062.33E+081.96E-011.62E+032.03E+065.82E+08 + 44M3 15.461.83E-011.61E+023.37E+043.48E+063.11E-028.05E+013.80E+045.55E+06 + 44M3 25.003.76E-021.44E+011.78E+031.22E+057.18E-037.40E+001.71E+031.51E+05 + 44M3 40.007.49E-031.35E+001.02E+024.56E+031.71E-037.25E-018.88E+014.89E+03 + 44M3 52.002.98E-033.63E-012.06E+017.30E+027.70E-042.00E-011.76E+017.50E+02 + 44M3 70.001.03E-038.20E-023.40E+009.18E+013.12E-044.69E-022.89E+009.31E+01 + 44M3 103.002.58E-041.20E-023.30E-016.25E+009.65E-057.29E-032.91E-016.58E+00 + 44M3 150.006.75E-051.88E-033.47E-024.67E-013.11E-051.23E-033.31E-025.37E-01 + 44M3 280.007.79E-069.41E-058.99E-046.92E-034.94E-066.99E-051.02E-031.00E-02 + 44M3 500.001.21E-067.06E-063.69E-051.72E-049.71E-075.73E-064.82E-053.12E-04 + 44M4 1.281.53E+025.97E+055.60E+101.14E+159.34E+002.33E+053.81E+096.64E+12 + 44M4 2.282.15E+013.10E+049.65E+087.68E+121.38E+001.29E+048.13E+078.91E+10 + 44M4 4.282.13E+001.22E+031.13E+073.51E+101.62E-015.36E+021.30E+068.26E+08 + 44M4 8.281.60E-013.95E+011.05E+051.33E+081.60E-021.89E+011.84E+046.37E+06 + 44M4 15.281.25E-021.54E+001.37E+037.93E+051.75E-038.36E-013.71E+027.22E+04 + 44M4 25.001.49E-031.09E-014.23E+011.35E+042.81E-046.81E-021.66E+012.02E+03 + 44M4 40.001.84E-048.40E-031.55E+002.84E+024.72E-056.21E-038.77E-016.81E+01 + 44M4 52.005.64E-052.00E-032.46E-013.35E+011.72E-051.63E-031.71E-011.04E+01 + 44M4 70.001.47E-053.91E-043.11E-023.03E+005.44E-063.59E-042.73E-021.25E+00 + 44M4 103.002.52E-064.75E-052.18E-031.38E-011.20E-065.05E-052.54E-038.13E-02 + 44M4 150.004.57E-076.26E-061.71E-047.18E-032.75E-077.57E-062.59E-045.91E-03 + 44M4 280.002.98E-082.41E-072.92E-066.19E-052.39E-083.37E-076.30E-068.44E-05 + 44M4 500.002.82E-091.42E-088.71E-089.69E-072.57E-092.02E-082.23E-071.92E-06 + 44M5 1.282.26E+028.22E+058.68E+101.69E+155.85E+002.94E+041.79E+101.57E+15 + 44M5 2.283.13E+014.22E+041.48E+091.12E+138.75E-011.65E+033.15E+089.13E+12 + 44M5 4.283.07E+001.65E+031.71E+075.03E+101.06E-017.16E+013.86E+063.45E+10 + 44M5 8.282.27E-015.26E+011.58E+051.87E+081.08E-022.69E+003.84E+041.07E+08 + 44M5 15.281.75E-022.02E+002.02E+031.09E+061.23E-031.30E-015.36E+025.47E+05 + 44M5 25.002.06E-031.39E-016.08E+011.78E+042.05E-041.14E-021.75E+018.50E+03 + 44M5 40.002.53E-041.05E-022.15E+003.61E+023.59E-051.13E-036.74E-011.72E+02 + 44M5 52.007.74E-052.45E-033.35E-014.13E+011.34E-053.13E-041.11E-012.00E+01 + 44M5 70.002.01E-054.69E-044.10E-023.57E+004.37E-067.35E-051.44E-021.81E+00 + 44M5 103.003.50E-065.50E-052.71E-031.51E-011.01E-061.13E-051.05E-038.36E-02 + 44M5 150.006.54E-076.99E-061.99E-047.11E-032.46E-071.89E-068.52E-054.43E-03 + 44M5 280.004.59E-082.57E-072.93E-064.92E-052.47E-081.07E-071.51E-063.85E-05 + 44M5 500.004.66E-091.55E-087.69E-086.02E-073.35E-099.08E-094.77E-085.69E-07 + 44N+ 50.003.52E-031.48E-017.89E+003.05E+028.49E-032.83E-019.60E+003.19E+02 + 44N+ 70.001.34E-033.30E-021.09E+002.97E+013.20E-036.92E-021.52E+003.38E+01 + 44N+ 100.004.80E-047.22E-031.43E-012.64E+001.16E-031.64E-022.35E-013.48E+00 + 44N+ 150.001.49E-041.40E-031.58E-021.85E-013.75E-043.45E-033.17E-023.04E-01 + 44N+ 200.006.58E-054.61E-043.64E-033.07E-021.72E-041.21E-038.30E-035.94E-02 + 44N+ 500.005.82E-061.98E-056.50E-052.20E-041.66E-055.85E-051.89E-046.15E-04 + 45K 24.226.47E+003.25E+013.62E+012.13E+011.85E+016.44E+023.73E+035.59E+03 + 45K 24.925.99E+003.40E+015.98E+017.00E+011.70E+015.76E+023.75E+038.86E+03 + 45K 26.225.25E+003.51E+019.93E+012.21E+021.46E+014.73E+023.61E+031.37E+04 + 45K 29.423.88E+003.28E+011.58E+026.74E+021.04E+013.03E+022.88E+031.84E+04 + 45K 33.222.80E+002.72E+011.72E+029.98E+027.27E+001.90E+022.04E+031.68E+04 + 45K 37.002.09E+002.17E+011.56E+021.06E+035.30E+001.25E+021.42E+031.32E+04 + 45K 43.001.39E+001.49E+011.19E+028.92E+023.41E+007.04E+018.12E+028.22E+03 + 45K 51.008.66E-019.28E+007.62E+015.97E+022.07E+003.67E+014.13E+024.26E+03 + 45K 63.004.78E-014.88E+003.92E+013.03E+021.12E+001.65E+011.73E+021.71E+03 + 45K 76.002.81E-012.67E+002.03E+011.49E+026.54E-018.17E+007.81E+017.17E+02 + 45K 93.001.57E-011.36E+009.54E+006.43E+013.69E-013.88E+003.30E+012.74E+02 + 45K 106.001.08E-018.71E-015.74E+003.63E+012.55E-012.41E+001.89E+011.46E+02 + 45K 123.007.05E-025.22E-013.18E+001.86E+011.69E-011.41E+001.01E+017.06E+01 + 45K 146.004.31E-022.87E-011.60E+008.51E+001.05E-017.69E-014.89E+003.07E+01 + 45K 175.002.57E-021.53E-017.66E-013.68E+006.46E-024.10E-012.31E+001.28E+01 + 45K 240.001.06E-025.13E-022.14E-018.56E-012.81E-021.42E-016.44E-012.90E+00 + 45K 325.004.65E-031.86E-026.53E-022.20E-011.29E-025.35E-021.99E-017.34E-01 + 45K 410.002.55E-038.90E-032.75E-028.18E-027.25E-032.62E-028.46E-022.69E-01 + 45K 520.001.43E-034.38E-031.20E-023.16E-024.08E-031.30E-023.66E-021.01E-01 + 45K 750.006.30E-041.64E-033.79E-038.45E-031.74E-034.66E-031.10E-022.49E-02 + 45K 1000.003.54E-048.26E-041.71E-033.40E-039.15E-042.19E-034.57E-039.13E-03 + 45K 1250.002.35E-045.09E-049.80E-041.80E-035.66E-041.26E-032.42E-034.43E-03 + 45K 1500.001.72E-043.51E-046.41E-041.11E-033.87E-048.13E-041.47E-032.54E-03 + 45L1 4.411.93E+016.63E+031.11E+064.13E+073.36E+023.37E+055.65E+072.59E+09 + 45L1 5.111.50E+012.80E+036.65E+054.05E+072.16E+021.67E+052.49E+071.41E+09 + 45L1 6.419.85E+006.51E+022.34E+052.05E+071.10E+025.69E+047.04E+064.48E+08 + 45L1 9.614.37E+002.17E+012.33E+042.67E+063.27E+018.60E+037.47E+054.47E+07 + 45L1 13.412.12E+002.52E+002.36E+033.24E+051.21E+011.87E+031.21E+056.10E+06 + 45L1 17.001.23E+004.66E+003.44E+026.00E+045.97E+006.45E+023.34E+041.45E+06 + 45L1 23.005.99E-014.35E+002.09E+015.41E+032.43E+001.70E+026.67E+032.33E+05 + 45L1 31.002.85E-012.66E+009.68E+003.73E+021.00E+004.68E+011.40E+033.85E+04 + 45L1 43.001.23E-011.22E+007.19E+004.25E+013.84E-011.18E+012.60E+025.47E+03 + 45L1 56.006.09E-025.87E-013.91E+002.23E+011.78E-013.99E+006.91E+011.16E+03 + 45L1 73.002.96E-022.64E-011.76E+001.06E+018.29E-021.38E+001.88E+012.51E+02 + 45L1 86.001.89E-021.57E-011.01E+006.02E+005.19E-027.26E-018.55E+009.92E+01 + 45L1 103.001.15E-028.77E-025.33E-013.04E+003.12E-023.63E-013.65E+003.63E+01 + 45L1 126.006.54E-034.50E-022.52E-011.34E+001.78E-021.70E-011.44E+001.20E+01 + 45L1 155.003.67E-032.25E-021.14E-015.56E-011.01E-027.98E-025.65E-013.98E+00 + 45L1 220.001.39E-036.92E-032.94E-021.21E-013.95E-032.33E-021.24E-016.60E-01 + 45L1 305.005.77E-042.36E-038.48E-032.94E-021.70E-037.82E-033.27E-021.36E-01 + 45L1 390.003.07E-041.09E-033.45E-031.06E-029.15E-043.58E-031.26E-024.40E-02 + 45L1 500.001.67E-045.23E-041.46E-033.97E-034.99E-041.68E-035.09E-031.51E-02 + 45L1 730.007.17E-051.89E-044.47E-041.02E-032.05E-045.72E-041.41E-033.34E-03 + 45L11000.003.81E-058.96E-051.88E-043.79E-041.01E-042.47E-045.28E-041.08E-03 + 45L11500.001.85E-053.82E-057.06E-051.24E-044.26E-059.08E-051.67E-042.93E-04 + 45L2 4.153.92E+014.42E+053.04E+083.00E+103.72E+011.46E+041.09E+063.81E+07 + 45L2 4.852.51E+012.01E+051.20E+081.45E+102.30E+017.88E+037.19E+053.86E+07 + 45L2 6.151.25E+016.08E+042.92E+073.88E+091.11E+013.06E+033.08E+052.16E+07 + 45L2 9.353.48E+007.39E+032.39E+062.92E+083.04E+005.71E+025.31E+043.89E+06 + 45L2 13.151.18E+001.34E+033.10E+053.18E+071.06E+001.45E+021.13E+047.28E+05 + 45L2 17.005.11E-013.71E+026.68E+045.78E+064.81E-015.15E+013.41E+031.90E+05 + 45L2 23.001.87E-018.27E+011.10E+047.63E+051.89E-011.53E+018.12E+023.70E+04 + 45L2 31.006.79E-021.89E+011.87E+031.02E+057.54E-024.59E+001.94E+027.08E+03 + 45L2 43.002.19E-023.79E+002.70E+021.12E+042.75E-021.23E+003.99E+011.13E+03 + 45L2 56.008.68E-031.04E+005.71E+011.90E+031.22E-024.27E-011.11E+012.53E+02 + 45L2 73.003.40E-032.90E-011.22E+013.22E+025.40E-031.48E-013.08E+005.65E+01 + 45L2 86.001.90E-031.32E-014.72E+001.08E+023.26E-037.73E-021.40E+002.24E+01 + 45L2 103.001.00E-035.58E-021.67E+003.28E+011.88E-033.79E-025.89E-018.13E+00 + 45L2 126.004.91E-042.15E-025.33E-018.79E+001.01E-031.71E-022.25E-012.63E+00 + 45L2 155.002.37E-048.19E-031.67E-012.31E+005.39E-047.62E-038.45E-028.36E-01 + 45L2 220.007.02E-051.65E-032.45E-022.53E-011.86E-041.97E-031.66E-021.24E-01 + 45L2 305.002.32E-053.90E-044.34E-033.47E-026.99E-055.75E-043.76E-032.21E-02 + 45L2 390.001.03E-051.36E-041.24E-038.21E-033.36E-052.31E-041.27E-036.26E-03 + 45L2 500.004.68E-064.90E-053.66E-042.03E-031.62E-059.42E-054.38E-041.83E-03 + 45L2 730.001.48E-061.12E-056.33E-052.74E-045.40E-062.50E-059.23E-053.06E-04 + 45L21000.006.02E-073.58E-061.63E-055.86E-052.20E-068.65E-062.70E-057.61E-05 + 45L21500.002.08E-079.25E-073.30E-069.62E-067.15E-072.34E-066.12E-061.43E-05 + 45L3 4.007.98E+019.12E+056.66E+086.93E+101.20E+014.04E+051.78E+097.85E+11 + 45L3 4.704.99E+014.02E+052.53E+083.18E+107.32E+001.81E+055.94E+082.27E+11 + 45L3 6.002.41E+011.17E+055.80E+077.94E+093.45E+005.34E+041.14E+083.49E+10 + 45L3 9.206.39E+001.34E+044.37E+065.42E+089.24E-016.35E+036.54E+061.34E+09 + 45L3 13.002.10E+002.32E+035.37E+055.52E+073.18E-011.13E+036.69E+059.94E+07 + 45L3 17.008.63E-015.98E+021.06E+059.06E+061.40E-012.99E+021.17E+051.35E+07 + 45L3 23.003.10E-011.30E+021.68E+041.15E+065.52E-026.66E+011.67E+041.45E+06 + 45L3 31.001.10E-012.88E+012.74E+031.47E+052.21E-021.52E+012.53E+031.66E+05 + 45L3 43.003.48E-025.54E+003.76E+021.53E+048.09E-033.02E+003.28E+021.59E+04 + 45L3 56.001.36E-021.47E+007.56E+012.44E+033.60E-038.27E-016.50E+012.47E+03 + 45L3 73.005.22E-033.88E-011.52E+013.87E+021.60E-032.27E-011.31E+013.92E+02 + 45L3 86.002.89E-031.71E-015.64E+001.24E+029.72E-041.03E-014.93E+001.28E+02 + 45L3 103.001.50E-036.97E-021.90E+003.56E+015.61E-044.32E-021.70E+003.75E+01 + 45L3 126.007.29E-042.57E-025.66E-018.85E+003.05E-041.65E-025.27E-019.76E+00 + 45L3 155.003.47E-049.27E-031.65E-012.13E+001.63E-046.21E-031.61E-012.50E+00 + 45L3 220.001.01E-041.70E-032.09E-021.98E-015.77E-051.23E-032.25E-022.63E-01 + 45L3 305.003.35E-053.66E-043.19E-032.27E-022.23E-052.81E-043.78E-033.45E-02 + 45L3 390.001.51E-051.20E-048.08E-044.64E-031.11E-059.57E-051.02E-037.82E-03 + 45L3 500.007.01E-064.07E-052.13E-049.91E-045.58E-063.35E-052.83E-041.82E-03 + 45L3 730.002.34E-068.84E-063.18E-051.10E-042.07E-067.44E-064.30E-052.17E-04 + 45L31000.001.05E-062.82E-067.61E-062.08E-059.64E-072.39E-069.77E-064.02E-05 + 45L31500.004.09E-077.83E-071.53E-063.17E-063.94E-076.71E-071.71E-065.25E-06 + 45M1 1.631.90E+015.91E+042.76E+063.69E+091.23E+039.00E+061.07E+103.42E+12 + 45M1 2.639.67E+007.35E+031.55E+063.97E+072.93E+028.60E+055.04E+081.23E+11 + 45M1 4.633.57E+004.02E+021.71E+051.75E+075.38E+015.55E+041.52E+072.44E+09 + 45M1 8.631.01E+004.72E+006.20E+038.45E+058.35E+002.89E+033.72E+053.55E+07 + 45M1 15.632.70E-011.10E+001.05E+021.87E+041.42E+001.88E+021.25E+047.05E+05 + 45M1 25.008.76E-027.50E-013.19E+005.00E+023.51E-012.32E+019.41E+023.48E+04 + 45M1 40.002.66E-022.67E-011.53E+001.37E+018.77E-023.09E+007.80E+011.88E+03 + 45M1 52.001.34E-021.30E-018.55E-015.27E+004.08E-021.04E+002.03E+013.84E+02 + 45M1 70.006.01E-035.40E-023.60E-012.19E+001.73E-023.11E-014.58E+006.62E+01 + 45M1 103.002.08E-031.58E-029.61E-025.44E-015.77E-036.87E-027.10E-017.26E+00 + 45M1 150.007.31E-044.54E-032.34E-021.15E-012.04E-031.69E-021.25E-019.27E-01 + 45M1 280.001.32E-045.69E-042.13E-037.73E-033.90E-041.93E-038.68E-033.87E-02 + 45M1 500.003.07E-059.58E-052.68E-047.30E-049.20E-053.13E-049.50E-042.83E-03 + 45M2 1.524.40E+011.24E+074.63E+102.46E+131.42E+023.03E+051.21E+082.48E+10 + 45M2 2.521.60E+019.78E+051.80E+097.27E+113.08E+013.21E+049.82E+061.96E+09 + 45M2 4.523.93E+005.20E+044.53E+071.24E+105.21E+002.58E+035.35E+058.39E+07 + 45M2 8.526.93E-012.17E+039.03E+051.54E+087.54E-011.80E+022.33E+042.45E+06 + 45M2 15.521.14E-011.10E+022.35E+042.45E+061.21E-011.52E+011.21E+038.18E+04 + 45M2 25.002.46E-021.04E+011.34E+039.29E+042.80E-022.18E+001.16E+025.36E+03 + 45M2 40.005.11E-031.03E+008.17E+013.75E+036.63E-033.26E-011.16E+013.61E+02 + 45M2 52.002.08E-032.88E-011.74E+016.33E+022.97E-031.14E-013.22E+008.03E+01 + 45M2 70.007.39E-046.84E-023.06E+008.54E+011.19E-033.46E-027.57E-011.47E+01 + 45M2 103.001.91E-041.08E-023.29E-016.55E+003.66E-047.46E-031.17E-011.64E+00 + 45M2 150.005.11E-051.86E-033.94E-025.66E-011.16E-041.70E-031.96E-022.00E-01 + 45M2 280.005.98E-061.11E-041.34E-031.15E-021.77E-051.56E-041.09E-036.86E-03 + 45M2 500.009.22E-079.63E-067.21E-054.02E-043.18E-061.85E-058.64E-053.62E-04 + 45M3 1.509.19E+012.39E+079.10E+104.82E+134.37E+011.10E+073.44E+111.05E+15 + 45M3 2.503.16E+011.81E+063.34E+091.34E+129.19E+008.52E+051.00E+101.41E+13 + 45M3 4.507.37E+009.28E+048.03E+072.17E+101.52E+004.51E+041.78E+081.12E+11 + 45M3 8.501.24E+003.73E+031.52E+062.54E+082.18E-011.88E+032.42E+066.95E+08 + 45M3 15.501.96E-011.80E+023.77E+043.85E+063.48E-029.43E+014.55E+046.66E+06 + 45M3 25.004.09E-021.62E+012.02E+031.37E+058.08E-038.76E+002.07E+031.83E+05 + 45M3 40.008.22E-031.53E+001.15E+025.14E+031.93E-038.58E-011.07E+025.88E+03 + 45M3 52.003.28E-034.11E-012.34E+018.24E+028.68E-042.36E-012.10E+018.99E+02 + 45M3 70.001.14E-039.29E-023.86E+001.04E+023.51E-045.54E-023.45E+001.11E+02 + 45M3 103.002.87E-041.36E-023.74E-017.08E+001.09E-048.58E-033.46E-017.82E+00 + 45M3 150.007.52E-052.13E-033.95E-025.30E-013.51E-051.44E-033.92E-026.36E-01 + 45M3 280.008.71E-061.07E-041.02E-037.88E-035.58E-068.15E-051.20E-031.18E-02 + 45M3 500.001.37E-068.03E-064.20E-051.97E-041.10E-066.63E-065.65E-053.66E-04 + 45M4 1.311.56E+026.14E+055.79E+101.17E+151.00E+012.54E+054.13E+097.02E+12 + 45M4 2.312.29E+013.35E+041.07E+098.59E+121.54E+001.47E+049.35E+071.01E+11 + 45M4 4.312.34E+001.36E+031.30E+074.10E+101.85E-016.29E+021.55E+069.72E+08 + 45M4 8.311.80E-014.51E+011.24E+051.59E+081.86E-022.26E+012.22E+047.65E+06 + 45M4 15.311.44E-021.78E+001.64E+039.59E+052.05E-031.01E+004.51E+028.76E+04 + 45M4 25.001.74E-031.28E-015.12E+011.65E+043.33E-048.31E-022.04E+012.49E+03 + 45M4 40.002.16E-049.96E-031.88E+003.49E+025.63E-057.58E-031.08E+008.38E+01 + 45M4 52.006.67E-052.37E-032.99E-014.11E+012.06E-051.99E-032.11E-011.28E+01 + 45M4 70.001.74E-054.67E-043.78E-023.72E+006.53E-064.39E-043.36E-021.53E+00 + 45M4 103.003.01E-065.70E-052.65E-031.69E-011.45E-066.19E-053.14E-031.00E-01 + 45M4 150.005.49E-077.54E-062.08E-048.82E-033.32E-079.29E-063.20E-047.29E-03 + 45M4 280.003.63E-082.94E-073.56E-067.63E-052.90E-084.14E-077.79E-061.04E-04 + 45M4 500.003.14E-091.72E-081.06E-071.19E-063.12E-092.48E-082.76E-072.38E-06 + 45M5 1.312.30E+028.43E+059.00E+101.75E+156.28E+003.16E+041.95E+101.72E+15 + 45M5 2.313.33E+014.54E+041.64E+091.25E+139.70E-011.86E+033.67E+081.08E+13 + 45M5 4.313.37E+001.83E+031.98E+075.88E+101.20E-018.29E+014.66E+064.28E+10 + 45M5 8.312.55E-015.96E+011.87E+052.23E+081.25E-023.16E+004.74E+041.36E+08 + 45M5 15.312.01E-022.32E+002.41E+031.31E+061.44E-031.53E-016.68E+026.98E+05 + 45M5 25.002.41E-031.63E-017.37E+012.18E+042.42E-041.37E-022.20E+011.10E+04 + 45M5 40.002.98E-041.24E-022.61E+004.42E+024.26E-051.36E-038.49E-012.20E+02 + 45M5 52.009.08E-052.89E-034.07E-015.05E+011.59E-053.75E-041.39E-012.56E+01 + 45M5 70.002.36E-055.56E-044.98E-024.36E+005.20E-068.80E-051.81E-022.31E+00 + 45M5 103.004.18E-066.55E-053.30E-031.84E-011.21E-061.36E-051.32E-031.06E-01 + 45M5 150.007.86E-078.34E-062.42E-048.70E-032.94E-072.27E-061.06E-045.59E-03 + 45M5 280.005.03E-083.08E-073.55E-066.02E-052.97E-081.29E-071.87E-064.83E-05 + 45M5 500.005.88E-091.85E-089.45E-087.35E-074.02E-091.09E-085.85E-087.10E-07 + 45N+ 50.003.80E-031.68E-019.15E+003.55E+029.77E-033.31E-011.14E+013.85E+02 + 45N+ 70.001.45E-033.71E-021.26E+003.45E+013.68E-038.06E-021.79E+004.04E+01 + 45N+ 100.005.22E-048.03E-031.64E-013.06E+001.33E-031.90E-022.75E-014.12E+00 + 45N+ 150.001.63E-041.54E-031.79E-022.13E-014.29E-043.98E-033.69E-023.56E-01 + 45N+ 200.007.19E-055.08E-044.10E-033.51E-021.96E-041.39E-039.60E-036.92E-02 + 45N+ 500.006.40E-062.18E-057.22E-052.47E-041.89E-056.66E-052.16E-047.05E-04 + 46K 25.355.90E+002.81E+012.89E+011.53E+011.80E+015.93E+023.26E+034.54E+03 + 46K 26.055.48E+002.94E+014.76E+015.03E+011.65E+015.33E+023.28E+037.17E+03 + 46K 27.354.83E+003.04E+017.91E+011.60E+021.43E+014.42E+023.17E+031.11E+04 + 46K 30.553.61E+002.87E+011.28E+025.02E+021.03E+012.89E+022.58E+031.53E+04 + 46K 34.352.64E+002.41E+011.42E+027.67E+027.31E+001.84E+021.86E+031.44E+04 + 46K 38.002.01E+001.96E+011.32E+028.33E+025.43E+001.25E+021.33E+031.17E+04 + 46K 44.001.35E+001.38E+011.03E+027.31E+023.53E+007.10E+017.81E+027.49E+03 + 46K 52.008.51E-018.72E+006.81E+015.08E+022.17E+003.75E+014.06E+024.00E+03 + 46K 64.004.76E-014.67E+003.61E+012.67E+021.19E+001.71E+011.73E+021.65E+03 + 46K 77.002.82E-012.59E+001.91E+011.35E+026.97E-018.57E+007.96E+017.10E+02 + 46K 94.001.59E-011.34E+009.12E+005.97E+013.95E-014.10E+003.42E+012.77E+02 + 46K 107.001.10E-018.64E-015.55E+003.42E+012.75E-012.56E+001.97E+011.48E+02 + 46K 124.007.21E-025.21E-013.11E+001.78E+011.82E-011.51E+001.06E+017.28E+01 + 46K 147.004.43E-022.90E-011.58E+008.24E+001.14E-018.24E-015.17E+003.20E+01 + 46K 175.002.70E-021.58E-017.82E-013.71E+007.12E-024.50E-012.51E+001.38E+01 + 46K 240.001.11E-025.34E-022.21E-018.74E-013.09E-021.55E-017.01E-013.13E+00 + 46K 325.004.91E-031.95E-026.78E-022.27E-011.42E-025.86E-022.17E-017.96E-01 + 46K 410.002.70E-039.36E-032.87E-028.50E-027.94E-032.86E-029.22E-022.92E-01 + 46K 520.001.51E-034.63E-031.26E-023.31E-024.46E-031.42E-023.99E-021.10E-01 + 46K 750.006.70E-041.74E-034.01E-038.94E-031.89E-035.08E-031.19E-022.71E-02 + 46K 1000.003.77E-048.79E-041.82E-033.62E-039.94E-042.39E-034.97E-039.92E-03 + 46K 1250.002.50E-045.42E-041.05E-031.92E-036.13E-041.37E-032.63E-034.81E-03 + 46K 1500.001.83E-043.75E-046.86E-041.19E-034.18E-048.83E-041.60E-032.76E-03 + 46L1 4.601.78E+016.00E+039.26E+053.13E+073.31E+023.17E+055.08E+072.17E+09 + 46L1 5.301.39E+012.63E+035.78E+053.22E+072.17E+021.61E+052.31E+071.23E+09 + 46L1 6.609.31E+006.54E+022.15E+051.74E+071.12E+025.70E+046.81E+064.10E+08 + 46L1 9.804.23E+002.68E+012.34E+042.51E+063.45E+019.00E+037.63E+054.39E+07 + 46L1 13.602.08E+002.05E+002.59E+033.28E+051.30E+012.01E+031.27E+056.24E+06 + 46L1 17.001.26E+003.77E+004.53E+026.94E+046.68E+007.35E+023.80E+041.62E+06 + 46L1 23.006.15E-013.94E+002.93E+016.71E+032.72E+001.93E+027.55E+032.60E+05 + 46L1 31.002.94E-012.53E+008.32E+005.01E+021.12E+005.30E+011.58E+034.30E+04 + 46L1 43.001.27E-011.20E+006.45E+004.45E+014.29E-011.33E+012.93E+026.11E+03 + 46L1 56.006.33E-025.86E-013.68E+002.04E+011.99E-014.49E+007.76E+011.30E+03 + 46L1 73.003.10E-022.67E-011.71E+009.86E+009.24E-021.55E+002.11E+012.80E+02 + 46L1 86.001.98E-021.60E-019.97E-015.73E+005.79E-028.14E-019.56E+001.11E+02 + 46L1 103.001.20E-028.97E-025.31E-012.95E+003.48E-024.06E-014.07E+004.03E+01 + 46L1 126.006.87E-034.63E-022.54E-011.32E+001.98E-021.90E-011.60E+001.34E+01 + 46L1 155.003.86E-032.32E-021.16E-015.56E-011.12E-028.89E-026.29E-014.42E+00 + 46L1 220.001.47E-037.22E-033.03E-021.23E-014.38E-032.59E-021.38E-017.31E-01 + 46L1 305.006.12E-042.48E-038.83E-033.05E-021.88E-038.67E-033.62E-021.50E-01 + 46L1 390.003.26E-041.15E-033.62E-031.10E-021.01E-033.96E-031.40E-024.86E-02 + 46L1 500.001.78E-045.54E-041.54E-034.19E-035.50E-041.86E-035.61E-031.66E-02 + 46L1 730.007.66E-052.02E-044.77E-041.09E-032.25E-046.30E-041.55E-033.68E-03 + 46L11000.004.08E-059.61E-052.02E-044.07E-041.11E-042.72E-045.80E-041.18E-03 + 46L11500.001.99E-054.11E-057.60E-051.34E-044.64E-059.94E-051.83E-043.21E-04 + 46L2 4.333.62E+013.97E+052.60E+082.39E+103.66E+011.37E+049.49E+053.00E+07 + 46L2 5.032.36E+011.86E+051.07E+081.21E+102.31E+017.56E+036.45E+053.18E+07 + 46L2 6.331.21E+015.85E+042.72E+073.42E+091.14E+013.03E+032.88E+051.89E+07 + 46L2 9.533.48E+007.49E+032.37E+062.78E+083.23E+005.90E+025.28E+043.69E+06 + 46L2 13.331.21E+001.40E+033.19E+053.17E+071.15E+001.53E+021.16E+047.23E+05 + 46L2 17.005.49E-014.15E+027.46E+046.35E+065.43E-015.77E+013.76E+032.05E+05 + 46L2 23.002.02E-019.26E+011.23E+048.43E+052.14E-011.71E+019.00E+024.04E+04 + 46L2 31.007.36E-022.12E+012.09E+031.13E+058.53E-025.16E+002.16E+027.78E+03 + 46L2 43.002.39E-024.25E+003.03E+021.25E+043.12E-021.39E+004.45E+011.25E+03 + 46L2 56.009.50E-031.17E+006.41E+012.12E+031.38E-024.82E-011.24E+012.82E+02 + 46L2 73.003.74E-033.26E-011.37E+013.60E+026.13E-031.68E-013.46E+006.31E+01 + 46L2 86.002.10E-031.48E-015.31E+001.21E+023.71E-038.75E-021.57E+002.51E+01 + 46L2 103.001.11E-036.28E-021.89E+003.69E+012.14E-034.29E-026.63E-019.11E+00 + 46L2 126.005.45E-042.43E-026.02E-019.90E+001.15E-031.94E-022.54E-012.96E+00 + 46L2 155.002.63E-049.25E-031.89E-012.60E+006.15E-048.66E-039.57E-029.42E-01 + 46L2 220.007.84E-051.87E-032.77E-022.87E-012.13E-042.25E-031.88E-021.40E-01 + 46L2 305.002.60E-054.42E-044.93E-033.94E-028.01E-056.56E-044.28E-032.50E-02 + 46L2 390.001.16E-051.55E-041.41E-039.34E-033.86E-052.65E-041.45E-037.12E-03 + 46L2 500.005.29E-065.58E-054.17E-042.31E-031.86E-051.08E-045.00E-042.08E-03 + 46L2 730.001.70E-061.28E-057.23E-053.13E-046.21E-062.87E-051.06E-043.51E-04 + 46L21000.006.80E-074.09E-061.87E-056.72E-052.54E-069.95E-063.11E-058.72E-05 + 46L21500.002.35E-071.05E-063.78E-061.10E-058.22E-072.70E-067.05E-061.65E-05 + 46L3 4.177.40E+018.21E+055.74E+085.57E+101.17E+013.82E+051.61E+096.83E+11 + 46L3 4.874.71E+013.74E+052.26E+082.67E+107.26E+001.76E+055.62E+082.07E+11 + 46L3 6.172.33E+011.13E+055.43E+077.04E+093.50E+005.41E+041.14E+083.37E+10 + 46L3 9.376.40E+001.36E+044.34E+065.18E+089.66E-016.74E+036.93E+061.40E+09 + 46L3 13.172.14E+002.42E+035.51E+055.51E+073.39E-011.24E+037.33E+051.07E+08 + 46L3 17.009.23E-016.65E+021.17E+059.90E+061.55E-013.48E+021.39E+051.60E+07 + 46L3 23.003.33E-011.44E+021.87E+041.26E+066.11E-027.74E+011.98E+041.72E+06 + 46L3 31.001.19E-013.20E+013.05E+031.62E+052.44E-021.76E+012.98E+031.95E+05 + 46L3 43.003.77E-026.17E+004.18E+021.69E+048.96E-033.51E+003.86E+021.87E+04 + 46L3 56.001.47E-021.63E+008.42E+012.70E+033.99E-039.59E-017.62E+012.89E+03 + 46L3 73.005.69E-034.33E-011.69E+014.29E+021.78E-032.63E-011.53E+014.58E+02 + 46L3 86.003.15E-031.91E-016.29E+001.38E+021.08E-031.19E-015.76E+001.49E+02 + 46L3 103.001.65E-037.77E-022.12E+003.95E+016.23E-044.99E-021.99E+004.37E+01 + 46L3 126.007.98E-042.86E-026.33E-019.85E+003.38E-041.90E-026.14E-011.13E+01 + 46L3 155.003.82E-041.03E-021.84E-012.38E+001.81E-047.16E-031.87E-012.90E+00 + 46L3 220.001.12E-041.90E-032.34E-022.21E-016.41E-051.41E-032.60E-023.04E-01 + 46L3 305.003.73E-054.09E-043.57E-032.53E-022.47E-053.21E-044.37E-033.98E-02 + 46L3 390.001.67E-051.34E-049.05E-045.19E-031.23E-051.09E-041.18E-039.02E-03 + 46L3 500.007.75E-064.56E-052.38E-041.11E-036.21E-063.81E-053.25E-042.10E-03 + 46L3 730.002.63E-069.88E-063.56E-051.23E-042.30E-068.41E-064.92E-052.49E-04 + 46L31000.001.16E-063.14E-068.52E-062.33E-051.07E-062.68E-061.11E-054.61E-05 + 46L31500.004.54E-078.66E-071.71E-063.55E-064.37E-077.49E-071.94E-066.00E-06 + 46M1 1.671.80E+015.75E+042.48E+063.57E+091.29E+039.31E+061.09E+103.37E+12 + 46M1 2.679.41E+007.58E+031.46E+063.64E+073.16E+029.32E+055.46E+081.30E+11 + 46M1 4.673.55E+004.49E+021.75E+051.65E+075.92E+016.20E+041.71E+072.69E+09 + 46M1 8.671.03E+006.54E+006.88E+038.83E+059.30E+003.28E+034.23E+054.01E+07 + 46M1 15.672.77E-019.40E-011.33E+022.13E+041.59E+002.15E+021.42E+048.01E+05 + 46M1 25.009.09E-027.06E-013.58E+006.38E+023.96E-012.67E+011.08E+033.99E+04 + 46M1 40.002.79E-022.63E-011.39E+001.62E+019.91E-023.53E+008.93E+012.14E+03 + 46M1 52.001.40E-021.31E-018.11E-015.14E+004.60E-021.18E+002.31E+014.37E+02 + 46M1 70.006.33E-035.50E-023.52E-012.09E+001.95E-023.53E-015.21E+007.51E+01 + 46M1 103.002.20E-031.63E-029.59E-025.34E-016.50E-037.78E-028.03E-018.20E+00 + 46M1 150.007.77E-044.74E-032.39E-021.16E-012.29E-031.90E-021.41E-011.04E+00 + 46M1 280.001.42E-046.03E-042.24E-038.06E-034.36E-042.16E-039.72E-034.34E-02 + 46M1 500.003.30E-051.03E-042.86E-047.78E-041.02E-043.49E-041.06E-033.16E-03 + 46M2 1.564.22E+011.24E+074.56E+102.34E+131.50E+023.15E+051.22E+082.33E+10 + 46M2 2.561.59E+011.03E+061.88E+097.40E+113.34E+013.47E+041.03E+071.97E+09 + 46M2 4.564.02E+005.64E+044.92E+071.32E+105.79E+002.86E+035.81E+058.85E+07 + 46M2 8.567.28E-012.41E+031.00E+061.68E+088.49E-012.02E+022.57E+042.66E+06 + 46M2 15.561.22E-011.23E+022.64E+042.72E+061.37E-011.72E+011.35E+039.02E+04 + 46M2 25.002.69E-021.18E+011.52E+031.05E+053.21E-022.49E+001.32E+026.02E+03 + 46M2 40.005.63E-031.17E+009.30E+014.25E+037.61E-033.73E-011.32E+014.08E+02 + 46M2 52.002.30E-033.27E-011.98E+017.18E+023.41E-031.30E-013.66E+009.08E+01 + 46M2 70.008.22E-047.79E-023.49E+009.72E+011.37E-033.96E-028.64E-011.66E+01 + 46M2 103.002.13E-041.23E-023.77E-017.47E+004.22E-048.57E-031.34E-011.87E+00 + 46M2 150.005.73E-052.12E-034.52E-026.47E-011.35E-041.96E-032.25E-022.29E-01 + 46M2 280.006.80E-061.27E-041.54E-031.32E-022.06E-051.80E-041.26E-037.89E-03 + 46M2 500.001.04E-061.11E-058.34E-054.64E-043.70E-062.16E-051.00E-044.18E-04 + 46M3 1.538.86E+012.39E+079.00E+104.61E+134.55E+011.16E+073.59E+111.09E+15 + 46M3 2.533.14E+011.90E+063.49E+091.36E+129.85E+009.38E+051.11E+101.58E+13 + 46M3 4.537.55E+001.01E+058.69E+072.30E+101.67E+005.12E+042.06E+081.30E+11 + 46M3 8.531.30E+004.12E+031.68E+062.77E+082.41E-012.18E+032.86E+068.27E+08 + 46M3 15.532.09E-012.01E+024.20E+044.24E+063.87E-021.10E+025.42E+047.95E+06 + 46M3 25.004.44E-021.83E+012.28E+031.53E+059.06E-031.03E+012.49E+032.21E+05 + 46M3 40.008.98E-031.73E+001.30E+025.78E+032.16E-031.01E+001.28E+027.04E+03 + 46M3 52.003.60E-034.64E-012.64E+019.26E+029.74E-042.78E-012.51E+011.07E+03 + 46M3 70.001.26E-031.05E-014.36E+001.17E+023.95E-046.51E-024.10E+001.32E+02 + 46M3 103.003.19E-041.54E-024.24E-017.99E+001.23E-041.01E-024.10E-019.27E+00 + 46M3 150.008.41E-052.41E-034.47E-025.99E-013.96E-051.68E-034.62E-027.51E-01 + 46M3 280.009.82E-061.21E-041.16E-038.93E-036.29E-069.47E-051.41E-031.39E-02 + 46M3 500.001.55E-069.10E-064.78E-052.23E-041.24E-067.65E-066.59E-054.29E-04 + 46M4 1.341.58E+026.30E+055.96E+101.21E+151.08E+012.75E+054.45E+097.37E+12 + 46M4 2.342.42E+013.60E+041.17E+099.55E+121.70E+001.66E+041.07E+081.13E+11 + 46M4 4.342.56E+001.51E+031.49E+074.77E+102.10E-017.35E+021.83E+061.14E+09 + 46M4 8.342.02E-015.11E+011.46E+051.89E+082.15E-022.68E+012.67E+049.14E+06 + 46M4 15.341.64E-022.06E+001.95E+031.15E+062.39E-031.21E+005.47E+021.06E+05 + 46M4 25.002.02E-031.50E-016.17E+012.01E+043.94E-041.01E-012.50E+013.04E+03 + 46M4 40.002.54E-041.17E-022.26E+004.25E+026.69E-059.20E-031.32E+001.02E+02 + 46M4 52.007.85E-052.81E-033.61E-015.01E+012.45E-052.42E-032.58E-011.56E+01 + 46M4 70.002.06E-055.55E-044.56E-024.53E+007.79E-065.34E-044.11E-021.88E+00 + 46M4 103.003.58E-066.80E-053.20E-032.07E-011.73E-067.54E-053.85E-031.23E-01 + 46M4 150.006.64E-079.04E-062.52E-041.08E-023.99E-071.13E-053.93E-048.95E-03 + 46M4 280.004.69E-083.53E-074.33E-069.33E-053.49E-085.06E-079.57E-061.28E-04 + 46M4 500.004.76E-092.08E-081.30E-071.46E-063.76E-093.04E-083.40E-072.93E-06 + 46M5 1.332.33E+028.62E+059.31E+101.80E+156.72E+003.39E+042.12E+101.86E+15 + 46M5 2.333.52E+014.86E+041.81E+091.39E+131.07E+002.08E+034.24E+081.27E+13 + 46M5 4.333.68E+002.02E+032.27E+076.83E+101.35E-019.54E+015.60E+065.27E+10 + 46M5 8.332.86E-016.73E+012.19E+052.65E+081.43E-023.70E+005.82E+041.71E+08 + 46M5 15.332.29E-022.66E+002.87E+031.57E+061.67E-031.81E-018.28E+028.86E+05 + 46M5 25.002.79E-031.90E-018.88E+012.66E+042.84E-041.62E-022.76E+011.41E+04 + 46M5 40.003.47E-041.45E-023.15E+005.37E+025.01E-051.61E-031.06E+002.80E+02 + 46M5 52.001.07E-043.40E-034.91E-016.14E+011.88E-054.46E-041.74E-013.25E+01 + 46M5 70.002.78E-056.55E-046.01E-025.31E+006.16E-061.05E-042.26E-022.92E+00 + 46M5 103.004.87E-067.76E-053.98E-032.24E-011.44E-061.62E-051.64E-031.34E-01 + 46M5 150.009.19E-079.92E-062.92E-041.06E-023.50E-072.71E-061.32E-047.03E-03 + 46M5 280.006.47E-083.66E-074.30E-067.33E-053.55E-081.55E-072.30E-066.03E-05 + 46M5 500.005.96E-092.26E-081.11E-078.95E-074.82E-091.31E-087.13E-088.81E-07 + 46N+ 50.003.91E-031.89E-011.06E+014.11E+021.05E-023.67E-011.32E+014.53E+02 + 46N+ 70.001.49E-034.10E-021.45E+003.98E+013.97E-038.88E-022.04E+004.69E+01 + 46N+ 100.005.36E-048.71E-031.86E-013.52E+001.43E-032.08E-023.09E-014.72E+00 + 46N+ 150.001.67E-041.64E-032.00E-022.43E-014.61E-044.33E-034.08E-024.01E-01 + 46N+ 200.007.39E-055.35E-044.51E-033.96E-022.11E-041.50E-031.05E-027.71E-02 + 46N+ 500.006.60E-062.27E-057.64E-052.66E-042.00E-057.11E-052.32E-047.64E-04 + 47K 26.515.39E+002.44E+012.34E+011.13E+011.74E+015.48E+022.86E+033.72E+03 + 47K 27.215.03E+002.54E+013.82E+013.68E+011.61E+014.94E+022.88E+035.85E+03 + 47K 28.514.45E+002.63E+016.34E+011.17E+021.40E+014.13E+022.80E+039.06E+03 + 47K 31.713.37E+002.51E+011.04E+023.76E+021.02E+012.74E+022.32E+031.28E+04 + 47K 35.512.49E+002.14E+011.18E+025.91E+027.34E+001.78E+021.70E+031.23E+04 + 47K 40.001.81E+001.69E+011.09E+026.58E+025.17E+001.12E+021.15E+039.69E+03 + 47K 46.001.24E+001.20E+018.59E+015.80E+023.43E+006.59E+016.92E+026.34E+03 + 47K 54.007.94E-017.77E+005.78E+014.11E+022.15E+003.58E+013.70E+023.49E+03 + 47K 66.004.53E-014.27E+003.15E+012.23E+021.20E+001.68E+011.63E+021.50E+03 + 47K 79.002.73E-012.41E+001.71E+011.16E+027.16E-018.56E+007.69E+016.62E+02 + 47K 96.001.57E-011.27E+008.38E+005.30E+014.12E-014.17E+003.38E+012.65E+02 + 47K 109.001.09E-018.30E-015.17E+003.09E+012.88E-012.63E+001.97E+011.45E+02 + 47K 126.007.21E-025.07E-012.94E+001.64E+011.92E-011.56E+001.07E+017.20E+01 + 47K 149.004.47E-022.85E-011.51E+007.74E+001.21E-018.63E-015.30E+003.22E+01 + 47K 175.002.83E-021.64E-017.97E-013.73E+007.84E-024.94E-012.73E+001.49E+01 + 47K 240.001.17E-025.56E-022.27E-018.91E-013.39E-021.70E-017.63E-013.39E+00 + 47K 325.005.19E-032.04E-027.04E-022.34E-011.55E-026.41E-022.36E-018.61E-01 + 47K 420.002.69E-039.13E-032.75E-028.00E-028.19E-032.91E-029.20E-022.85E-01 + 47K 530.001.53E-034.62E-031.24E-023.22E-024.65E-031.46E-024.07E-021.10E-01 + 47K 760.006.91E-041.78E-034.09E-039.04E-032.00E-035.35E-031.25E-022.80E-02 + 47K 1050.003.65E-048.39E-041.71E-033.34E-039.69E-042.29E-034.69E-039.15E-03 + 47K 1300.002.48E-045.33E-041.02E-031.84E-036.10E-041.35E-032.56E-034.62E-03 + 47K 1550.001.84E-043.75E-046.81E-041.17E-034.22E-048.87E-041.59E-032.72E-03 + 47L1 4.811.64E+015.41E+037.79E+052.41E+073.25E+022.97E+054.56E+071.83E+09 + 47L1 5.511.30E+012.46E+035.02E+052.57E+072.16E+021.55E+052.14E+071.07E+09 + 47L1 6.818.80E+006.51E+021.96E+051.48E+071.15E+025.68E+046.56E+063.75E+08 + 47L1 10.014.09E+003.18E+012.33E+042.34E+063.62E+019.38E+037.76E+054.30E+07 + 47L1 13.812.05E+001.87E+002.80E+033.29E+051.39E+012.14E+031.33E+056.35E+06 + 47L1 18.001.12E+003.31E+003.63E+025.27E+046.29E+006.48E+023.16E+041.28E+06 + 47L1 24.005.69E-013.41E+002.83E+015.79E+032.68E+001.82E+026.81E+032.25E+05 + 47L1 32.002.80E-012.25E+007.32E+004.99E+021.14E+005.23E+011.51E+033.97E+04 + 47L1 44.001.24E-011.11E+005.57E+004.44E+014.48E-011.36E+012.93E+025.96E+03 + 47L1 57.006.28E-025.54E-013.29E+001.82E+012.10E-014.69E+007.96E+011.30E+03 + 47L1 74.003.11E-022.58E-011.58E+008.86E+009.91E-021.64E+002.20E+012.89E+02 + 47L1 87.002.00E-021.56E-019.40E-015.24E+006.24E-028.71E-011.01E+011.15E+02 + 47L1 104.001.22E-028.88E-025.09E-012.75E+003.77E-024.37E-014.34E+004.25E+01 + 47L1 127.007.05E-034.63E-022.47E-011.26E+002.15E-022.06E-011.72E+001.42E+01 + 47L1 155.004.06E-032.40E-021.18E-015.56E-011.24E-029.90E-026.99E-014.90E+00 + 47L1 220.001.55E-037.52E-033.12E-021.26E-014.86E-032.87E-021.53E-018.09E-01 + 47L1 305.006.50E-042.61E-039.19E-033.15E-022.07E-039.59E-034.00E-021.65E-01 + 47L1 390.003.47E-041.21E-033.80E-031.15E-021.11E-034.38E-031.54E-025.36E-02 + 47L1 500.001.90E-045.87E-041.63E-034.41E-036.05E-042.05E-036.19E-031.83E-02 + 47L1 730.008.16E-052.15E-045.08E-041.16E-032.47E-046.93E-041.70E-034.04E-03 + 47L11000.004.36E-051.03E-042.16E-044.36E-041.21E-042.98E-046.36E-041.30E-03 + 47L11500.002.11E-054.41E-058.18E-051.44E-045.05E-051.09E-042.01E-043.52E-04 + 47L2 4.523.35E+013.55E+052.22E+081.91E+103.60E+011.28E+048.29E+052.39E+07 + 47L2 5.222.22E+011.72E+059.45E+071.00E+102.31E+017.23E+035.79E+052.63E+07 + 47L2 6.521.16E+015.61E+042.52E+073.00E+091.17E+012.99E+032.69E+051.65E+07 + 47L2 9.723.47E+007.56E+032.33E+062.64E+083.42E+006.08E+025.22E+043.48E+06 + 47L2 13.521.23E+001.45E+033.25E+053.14E+071.24E+001.62E+021.19E+047.15E+05 + 47L2 18.004.89E-013.49E+025.91E+044.77E+065.13E-015.13E+013.16E+031.63E+05 + 47L2 24.001.89E-018.38E+011.07E+046.99E+052.12E-011.62E+018.12E+023.48E+04 + 47L2 32.007.16E-022.03E+011.94E+031.01E+058.74E-025.10E+002.06E+027.16E+03 + 47L2 44.002.40E-024.25E+002.96E+021.19E+043.29E-021.42E+004.44E+011.21E+03 + 47L2 57.009.76E-031.21E+006.49E+012.10E+031.48E-025.06E-011.28E+012.83E+02 + 47L2 74.003.91E-033.42E-011.42E+013.68E+026.67E-031.79E-013.63E+006.51E+01 + 47L2 87.002.21E-031.58E-015.59E+001.26E+024.07E-039.45E-021.67E+002.62E+01 + 47L2 104.001.18E-036.75E-022.01E+003.89E+012.36E-034.67E-027.13E-019.65E+00 + 47L2 127.005.85E-042.63E-026.49E-011.06E+011.28E-032.13E-022.76E-013.18E+00 + 47L2 155.002.92E-041.04E-022.13E-012.93E+007.01E-049.83E-031.08E-011.06E+00 + 47L2 220.008.70E-052.11E-033.14E-023.24E-012.43E-042.56E-032.13E-021.58E-01 + 47L2 305.002.90E-055.01E-045.60E-034.46E-029.16E-057.48E-044.87E-032.83E-02 + 47L2 390.001.30E-051.76E-041.60E-031.06E-024.42E-053.02E-041.65E-038.08E-03 + 47L2 500.005.92E-066.33E-054.75E-042.63E-032.13E-051.23E-045.71E-042.37E-03 + 47L2 730.001.88E-061.45E-058.26E-053.57E-047.13E-063.29E-051.21E-044.00E-04 + 47L21000.007.84E-074.65E-062.14E-057.68E-052.91E-061.14E-053.56E-059.99E-05 + 47L21500.002.67E-071.20E-064.33E-061.26E-059.45E-073.11E-068.10E-061.90E-05 + 47L3 4.356.85E+017.37E+054.93E+084.50E+101.14E+013.60E+051.46E+095.92E+11 + 47L3 5.054.44E+013.46E+052.01E+082.23E+107.17E+001.71E+055.28E+081.87E+11 + 47L3 6.352.25E+011.08E+055.05E+076.23E+093.54E+005.45E+041.12E+083.23E+10 + 47L3 9.556.38E+001.37E+044.28E+064.93E+081.01E+007.12E+037.30E+061.44E+09 + 47L3 13.352.18E+002.51E+035.62E+055.46E+073.59E-011.34E+037.97E+051.15E+08 + 47L3 18.008.14E-015.53E+029.17E+047.33E+061.43E-013.03E+021.14E+051.24E+07 + 47L3 24.003.09E-011.29E+021.60E+041.03E+065.92E-027.27E+011.78E+041.48E+06 + 47L3 32.001.15E-013.03E+012.79E+031.43E+052.45E-021.75E+012.87E+031.83E+05 + 47L3 44.003.76E-026.10E+004.04E+021.59E+049.23E-033.63E+003.93E+021.86E+04 + 47L3 57.001.50E-021.66E+008.41E+012.64E+034.18E-031.02E+008.00E+012.99E+03 + 47L3 74.005.89E-034.50E-011.73E+014.32E+021.88E-032.84E-011.65E+014.86E+02 + 47L3 87.003.30E-032.00E-016.52E+001.41E+021.15E-031.30E-016.27E+001.60E+02 + 47L3 104.001.74E-038.25E-022.23E+004.10E+016.70E-045.49E-022.18E+004.76E+01 + 47L3 127.008.50E-043.07E-026.72E-011.03E+013.66E-042.11E-026.80E-011.25E+01 + 47L3 155.004.19E-041.15E-022.05E-012.64E+002.01E-048.23E-032.16E-013.35E+00 + 47L3 220.001.24E-042.12E-032.61E-022.46E-017.10E-051.61E-033.01E-023.52E-01 + 47L3 305.004.11E-054.56E-043.99E-032.82E-022.74E-053.66E-045.03E-034.59E-02 + 47L3 390.001.85E-051.50E-041.01E-035.80E-031.36E-051.24E-041.36E-031.04E-02 + 47L3 500.008.60E-065.08E-052.66E-041.24E-036.88E-064.32E-053.73E-042.41E-03 + 47L3 730.002.91E-061.10E-053.97E-051.37E-042.55E-069.48E-065.62E-052.85E-04 + 47L31000.001.26E-063.50E-069.51E-062.61E-051.18E-063.01E-061.27E-055.28E-05 + 47L31500.004.97E-079.68E-071.90E-063.97E-064.82E-078.36E-072.19E-066.83E-06 + 47M1 1.721.72E+015.55E+042.31E+063.36E+091.34E+039.50E+061.10E+103.28E+12 + 47M1 2.729.14E+007.75E+031.37E+063.57E+073.38E+021.00E+065.84E+081.35E+11 + 47M1 4.723.52E+004.96E+021.77E+051.55E+076.48E+016.89E+041.90E+072.95E+09 + 47M1 8.721.04E+008.72E+007.56E+039.17E+051.03E+013.72E+034.80E+054.50E+07 + 47M1 15.722.83E-018.00E-011.64E+022.41E+041.78E+002.44E+021.62E+049.06E+05 + 47M1 25.009.43E-026.62E-014.50E+007.98E+024.47E-013.07E+011.25E+034.58E+04 + 47M1 40.002.91E-022.59E-011.27E+001.99E+011.12E-014.03E+001.02E+022.44E+03 + 47M1 52.001.47E-021.31E-017.64E-015.21E+005.19E-021.35E+002.63E+014.96E+02 + 47M1 70.006.66E-035.58E-023.42E-012.00E+002.19E-024.01E-015.91E+008.51E+01 + 47M1 103.002.33E-031.68E-029.61E-025.25E-017.30E-038.79E-029.07E-019.26E+00 + 47M1 150.008.26E-044.94E-032.45E-021.17E-012.57E-032.14E-021.59E-011.17E+00 + 47M1 280.001.52E-046.38E-042.34E-038.40E-034.87E-042.42E-031.09E-024.85E-02 + 47M1 500.003.55E-051.10E-043.06E-048.29E-041.14E-043.89E-041.18E-033.51E-03 + 47M2 1.604.03E+011.22E+074.41E+102.18E+131.57E+023.23E+051.20E+082.17E+10 + 47M2 2.601.57E+011.06E+061.93E+097.44E+113.61E+013.71E+041.08E+071.97E+09 + 47M2 4.604.10E+006.08E+045.29E+071.39E+106.39E+003.14E+036.26E+059.28E+07 + 47M2 8.607.61E-012.65E+031.10E+061.82E+089.52E-012.26E+022.83E+042.87E+06 + 47M2 15.601.30E-011.37E+022.94E+043.00E+061.55E-011.94E+011.51E+039.91E+04 + 47M2 25.002.92E-021.33E+011.73E+031.18E+053.67E-022.84E+001.49E+026.74E+03 + 47M2 40.006.17E-031.33E+001.06E+024.80E+038.72E-034.26E-011.49E+014.59E+02 + 47M2 52.002.53E-033.71E-012.25E+018.13E+023.91E-031.48E-014.16E+001.02E+02 + 47M2 70.009.09E-048.85E-023.97E+001.10E+021.58E-034.53E-029.82E-011.88E+01 + 47M2 103.002.38E-041.41E-024.30E-018.50E+004.86E-049.82E-031.53E-012.12E+00 + 47M2 150.006.45E-052.42E-035.17E-027.39E-011.55E-042.26E-032.57E-022.61E-01 + 47M2 280.007.69E-061.46E-041.77E-031.51E-022.38E-052.08E-041.45E-039.04E-03 + 47M2 500.001.20E-061.28E-059.62E-055.35E-044.30E-062.50E-051.16E-044.82E-04 + 47M3 1.578.53E+012.36E+078.75E+104.34E+134.70E+011.20E+073.68E+111.11E+15 + 47M3 2.573.11E+011.97E+063.61E+091.37E+121.05E+011.02E+061.22E+101.73E+13 + 47M3 4.577.70E+001.08E+059.34E+072.42E+101.81E+005.77E+042.37E+081.51E+11 + 47M3 8.571.36E+004.52E+031.85E+062.99E+082.66E-012.50E+033.37E+069.76E+08 + 47M3 15.572.22E-012.23E+024.66E+044.66E+064.29E-021.28E+026.43E+049.45E+06 + 47M3 25.004.80E-022.06E+012.57E+031.72E+051.01E-021.21E+012.99E+032.65E+05 + 47M3 40.009.80E-031.94E+001.47E+026.47E+032.42E-031.19E+001.52E+028.41E+03 + 47M3 52.003.95E-035.22E-012.98E+011.04E+031.09E-033.26E-012.99E+011.28E+03 + 47M3 70.001.39E-031.18E-014.92E+001.31E+024.42E-047.63E-024.87E+001.57E+02 + 47M3 103.003.52E-041.73E-024.79E-018.99E+001.37E-041.18E-024.84E-011.09E+01 + 47M3 150.009.31E-052.72E-035.06E-026.75E-014.44E-051.96E-035.43E-028.84E-01 + 47M3 280.001.09E-051.37E-041.32E-031.01E-027.07E-061.10E-041.65E-031.62E-02 + 47M3 500.001.73E-061.03E-055.41E-052.53E-041.39E-068.79E-067.66E-055.00E-04 + 47M4 1.371.58E+026.34E+055.99E+101.21E+151.14E+012.92E+054.69E+097.56E+12 + 47M4 2.372.53E+013.83E+041.27E+091.04E+131.87E+001.86E+041.20E+081.25E+11 + 47M4 4.372.78E+001.66E+031.69E+075.47E+102.36E-018.51E+022.14E+061.31E+09 + 47M4 8.372.25E-015.76E+011.70E+052.23E+082.46E-023.16E+013.18E+041.08E+07 + 47M4 15.371.86E-022.35E+002.30E+031.38E+062.78E-031.44E+006.57E+021.26E+05 + 47M4 25.002.33E-031.75E-017.39E+012.44E+044.63E-041.22E-013.05E+013.69E+03 + 47M4 40.002.95E-041.38E-022.71E+005.15E+027.90E-051.11E-021.61E+001.25E+02 + 47M4 52.009.18E-053.30E-034.33E-016.08E+012.90E-052.93E-033.15E-011.90E+01 + 47M4 70.002.42E-056.55E-045.48E-025.50E+009.24E-066.47E-045.01E-022.29E+00 + 47M4 103.004.25E-068.07E-053.85E-032.51E-012.06E-069.14E-054.69E-031.50E-01 + 47M4 150.007.85E-071.08E-053.03E-041.31E-024.76E-071.37E-054.80E-041.09E-02 + 47M4 280.005.22E-084.26E-075.21E-061.14E-044.18E-086.16E-071.17E-051.57E-04 + 47M4 500.005.02E-092.51E-081.56E-071.79E-064.51E-093.70E-084.17E-073.59E-06 + 47M5 1.372.33E+028.65E+059.39E+101.81E+157.09E+003.56E+042.24E+101.96E+15 + 47M5 2.373.68E+015.14E+041.96E+091.52E+131.17E+002.30E+034.81E+081.46E+13 + 47M5 4.373.99E+002.21E+032.58E+077.83E+101.51E-011.09E+026.64E+066.40E+10 + 47M5 8.373.18E-017.53E+012.55E+053.12E+081.63E-024.29E+007.07E+042.13E+08 + 47M5 15.372.60E-023.02E+003.39E+031.87E+061.92E-032.11E-011.02E+031.12E+06 + 47M5 25.003.21E-032.20E-011.07E+023.22E+043.32E-041.92E-023.44E+011.79E+04 + 47M5 40.004.03E-041.68E-023.78E+006.50E+025.88E-051.91E-031.32E+003.55E+02 + 47M5 52.001.25E-043.97E-035.90E-017.43E+012.21E-055.28E-042.16E-014.11E+01 + 47M5 70.003.27E-057.69E-047.22E-026.42E+007.26E-061.24E-042.81E-023.68E+00 + 47M5 103.005.74E-069.12E-054.79E-032.72E-011.70E-061.93E-052.03E-031.68E-01 + 47M5 150.001.07E-061.17E-053.51E-041.28E-024.15E-073.22E-061.63E-048.78E-03 + 47M5 280.007.49E-084.44E-075.16E-068.88E-054.21E-081.84E-072.82E-067.50E-05 + 47M5 500.008.28E-092.73E-081.36E-071.09E-065.71E-091.56E-088.64E-081.09E-06 + 47N+ 50.004.42E-032.17E-011.23E+014.79E+021.28E-024.50E-011.61E+015.58E+02 + 47N+ 70.001.70E-034.69E-021.68E+004.64E+014.81E-031.08E-012.49E+005.74E+01 + 47N+ 100.006.11E-049.96E-032.15E-014.09E+001.73E-032.54E-023.76E-015.75E+00 + 47N+ 150.001.92E-041.88E-032.31E-022.82E-015.58E-045.26E-034.95E-024.86E-01 + 47N+ 200.008.51E-056.13E-045.20E-034.60E-022.55E-041.82E-031.28E-029.33E-02 + 47N+ 500.007.68E-062.63E-058.86E-053.10E-042.41E-058.56E-052.80E-049.19E-04 + 48K 27.714.93E+002.12E+011.90E+018.38E+001.69E+015.06E+022.52E+033.07E+03 + 48K 28.414.61E+002.21E+013.08E+012.70E+011.57E+014.58E+022.53E+034.79E+03 + 48K 29.714.11E+002.29E+015.10E+018.62E+011.37E+013.86E+022.47E+037.44E+03 + 48K 32.913.14E+002.21E+018.47E+012.82E+021.01E+012.61E+022.08E+031.07E+04 + 48K 36.712.35E+001.90E+019.76E+014.56E+027.36E+001.71E+021.55E+031.05E+04 + 48K 41.001.75E+001.54E+019.28E+015.22E+025.32E+001.12E+021.09E+038.60E+03 + 48K 47.001.20E+001.11E+017.50E+014.77E+023.56E+006.66E+016.68E+025.80E+03 + 48K 55.007.82E-017.31E+005.18E+013.50E+022.25E+003.66E+013.64E+023.28E+03 + 48K 67.004.51E-014.09E+002.90E+011.97E+021.27E+001.74E+011.64E+021.45E+03 + 48K 80.002.74E-012.34E+001.60E+011.05E+027.63E-018.97E+007.84E+016.55E+02 + 48K 97.001.59E-011.25E+008.00E+004.92E+014.41E-014.41E+003.49E+012.67E+02 + 48K 110.001.11E-018.22E-014.98E+002.91E+013.09E-012.79E+002.05E+011.47E+02 + 48K 127.007.37E-025.06E-012.87E+001.56E+012.07E-011.66E+001.12E+017.40E+01 + 48K 150.004.59E-022.86E-011.49E+007.48E+001.31E-019.24E-015.59E+003.34E+01 + 48K 175.002.97E-021.69E-018.11E-013.74E+008.62E-025.41E-012.96E+001.60E+01 + 48K 240.001.23E-025.77E-022.33E-019.06E-013.72E-021.86E-018.29E-013.65E+00 + 48K 325.005.46E-032.13E-027.29E-022.41E-011.70E-027.00E-022.57E-019.31E-01 + 48K 420.002.84E-039.58E-032.87E-028.30E-028.95E-033.18E-021.00E-013.09E-01 + 48K 530.001.62E-034.87E-031.30E-023.37E-025.08E-031.60E-024.42E-021.19E-01 + 48K 760.007.33E-041.89E-034.32E-039.55E-032.17E-035.82E-031.35E-023.03E-02 + 48K 1050.003.87E-048.91E-041.82E-033.55E-031.05E-032.49E-035.09E-039.92E-03 + 48K 1300.002.63E-045.67E-041.08E-031.97E-036.60E-041.47E-032.78E-035.01E-03 + 48K 1550.001.95E-043.99E-047.26E-041.25E-034.55E-049.61E-041.73E-032.94E-03 + 48L1 5.021.51E+014.86E+036.52E+051.85E+073.18E+022.78E+054.06E+071.53E+09 + 48L1 5.721.20E+012.29E+034.34E+052.04E+072.15E+021.49E+051.96E+079.25E+08 + 48L1 7.028.29E+006.42E+021.78E+051.25E+071.17E+025.63E+046.28E+063.40E+08 + 48L1 10.223.95E+003.69E+012.30E+042.17E+063.80E+019.72E+037.83E+054.18E+07 + 48L1 14.022.01E+001.94E+002.98E+033.27E+051.48E+012.28E+031.38E+056.43E+06 + 48L1 18.001.14E+002.67E+004.64E+026.02E+047.02E+007.36E+023.57E+041.43E+06 + 48L1 24.005.82E-013.06E+003.93E+017.00E+032.98E+002.06E+027.68E+032.51E+05 + 48L1 32.002.88E-012.13E+006.93E+006.46E+021.27E+005.91E+011.69E+034.43E+04 + 48L1 44.001.28E-011.08E+004.99E+005.18E+014.99E-011.53E+013.29E+026.64E+03 + 48L1 57.006.51E-025.51E-013.08E+001.74E+012.34E-015.27E+008.91E+011.45E+03 + 48L1 74.003.24E-022.59E-011.52E+008.33E+001.10E-011.84E+002.46E+013.21E+02 + 48L1 87.002.09E-021.58E-019.19E-015.00E+006.94E-029.73E-011.13E+011.28E+02 + 48L1 104.001.28E-029.04E-025.04E-012.67E+004.18E-024.88E-014.83E+004.72E+01 + 48L1 127.007.39E-034.75E-022.48E-011.24E+002.39E-022.29E-011.91E+001.58E+01 + 48L1 155.004.27E-032.47E-021.19E-015.55E-011.38E-021.10E-017.75E-015.43E+00 + 48L1 220.001.64E-037.82E-033.21E-021.28E-015.37E-033.18E-021.69E-018.94E-01 + 48L1 305.006.88E-042.73E-039.56E-033.26E-022.29E-031.06E-024.42E-021.82E-01 + 48L1 390.003.68E-041.28E-033.98E-031.21E-021.23E-034.83E-031.70E-025.90E-02 + 48L1 500.002.02E-046.22E-041.72E-034.65E-036.65E-042.26E-036.81E-032.01E-02 + 48L1 730.008.74E-052.29E-045.42E-041.24E-032.71E-047.61E-041.87E-034.44E-03 + 48L11000.004.66E-051.10E-042.31E-044.67E-041.32E-043.27E-046.98E-041.43E-03 + 48L11500.002.27E-054.73E-058.79E-051.55E-045.49E-051.19E-042.19E-043.85E-04 + 48L2 4.733.08E+013.17E+051.88E+081.51E+103.52E+011.19E+047.20E+051.91E+07 + 48L2 5.432.08E+011.58E+058.32E+078.28E+092.31E+016.89E+035.17E+052.17E+07 + 48L2 6.731.12E+015.36E+042.32E+072.62E+091.19E+012.94E+032.50E+051.44E+07 + 48L2 9.933.45E+007.59E+032.29E+062.49E+083.60E+006.23E+025.13E+043.27E+06 + 48L2 13.731.25E+001.50E+033.31E+053.10E+071.33E+001.70E+021.21E+047.03E+05 + 48L2 18.005.23E-013.89E+026.58E+045.22E+065.78E-015.73E+013.47E+031.76E+05 + 48L2 24.002.03E-019.35E+011.19E+047.69E+052.39E-011.81E+018.96E+023.78E+04 + 48L2 32.007.73E-022.26E+012.16E+031.12E+059.86E-025.71E+002.28E+027.84E+03 + 48L2 44.002.61E-024.75E+003.30E+021.32E+043.71E-021.60E+004.94E+011.33E+03 + 48L2 57.001.06E-021.35E+007.26E+012.33E+031.68E-025.69E-011.42E+013.13E+02 + 48L2 74.004.28E-033.83E-011.59E+014.10E+027.55E-032.02E-014.06E+007.23E+01 + 48L2 87.002.43E-031.77E-016.27E+001.41E+024.61E-031.06E-011.87E+002.92E+01 + 48L2 104.001.30E-037.57E-022.26E+004.35E+012.67E-035.27E-028.00E-011.08E+01 + 48L2 127.006.45E-042.96E-027.30E-011.18E+011.46E-032.41E-023.10E-013.55E+00 + 48L2 155.003.23E-041.17E-022.40E-013.29E+007.96E-041.11E-021.22E-011.19E+00 + 48L2 220.009.66E-052.38E-033.55E-023.65E-012.77E-042.90E-032.41E-021.78E-01 + 48L2 305.003.22E-055.65E-046.34E-035.04E-021.04E-048.51E-045.51E-033.20E-02 + 48L2 390.001.45E-051.99E-041.82E-031.20E-025.05E-053.45E-041.87E-039.15E-03 + 48L2 500.006.60E-067.18E-055.40E-042.99E-032.44E-051.41E-046.50E-042.69E-03 + 48L2 730.002.11E-061.65E-059.41E-054.07E-048.16E-063.76E-051.38E-044.56E-04 + 48L21000.008.77E-075.28E-062.44E-058.76E-053.34E-061.31E-054.08E-051.14E-04 + 48L21500.002.94E-071.37E-064.95E-061.45E-051.08E-063.56E-069.29E-062.17E-05 + 48L3 4.546.32E+016.59E+054.21E+083.60E+101.10E+013.37E+051.31E+095.08E+11 + 48L3 5.244.17E+013.18E+051.78E+081.86E+107.06E+001.65E+054.93E+081.69E+11 + 48L3 6.542.16E+011.03E+054.68E+075.47E+093.57E+005.46E+041.10E+083.07E+10 + 48L3 9.746.33E+001.37E+044.20E+064.66E+081.04E+007.48E+037.63E+061.47E+09 + 48L3 13.542.21E+002.59E+035.71E+055.39E+073.79E-011.45E+038.63E+051.22E+08 + 48L3 18.008.68E-016.12E+021.01E+057.98E+061.58E-013.51E+021.34E+051.46E+07 + 48L3 24.003.30E-011.43E+021.77E+041.13E+066.52E-028.40E+012.10E+041.74E+06 + 48L3 32.001.23E-013.36E+013.09E+031.57E+052.70E-022.02E+013.37E+032.14E+05 + 48L3 44.004.05E-026.76E+004.47E+021.74E+041.02E-024.19E+004.60E+022.17E+04 + 48L3 57.001.62E-021.84E+009.32E+012.91E+034.61E-031.17E+009.34E+013.48E+03 + 48L3 74.006.39E-034.99E-011.92E+014.77E+022.08E-033.28E-011.92E+015.64E+02 + 48L3 87.003.58E-032.22E-017.24E+001.56E+021.27E-031.49E-017.28E+001.85E+02 + 48L3 104.001.89E-039.16E-022.47E+004.53E+017.40E-046.31E-022.53E+005.51E+01 + 48L3 127.009.28E-043.41E-027.47E-011.15E+014.05E-042.43E-027.88E-011.44E+01 + 48L3 155.004.58E-041.28E-022.28E-012.93E+002.22E-049.43E-032.50E-013.88E+00 + 48L3 220.001.35E-042.36E-032.90E-022.73E-017.86E-051.84E-033.47E-024.05E-01 + 48L3 305.004.49E-055.07E-044.44E-033.14E-023.03E-054.17E-045.78E-035.27E-02 + 48L3 390.002.03E-051.66E-041.13E-036.45E-031.51E-051.41E-041.55E-031.19E-02 + 48L3 500.009.46E-065.65E-052.97E-041.38E-037.61E-064.89E-054.27E-042.77E-03 + 48L3 730.003.18E-061.22E-054.43E-051.53E-042.81E-061.07E-056.41E-053.26E-04 + 48L31000.001.41E-063.89E-061.06E-052.91E-051.30E-063.37E-061.44E-056.02E-05 + 48L31500.005.57E-071.07E-062.12E-064.42E-065.31E-079.29E-072.46E-067.76E-06 + 48M1 1.771.62E+015.31E+042.16E+063.07E+091.38E+039.56E+061.08E+103.12E+12 + 48M1 2.778.83E+007.85E+031.28E+063.61E+073.59E+021.06E+066.16E+081.39E+11 + 48M1 4.773.48E+005.42E+021.78E+051.44E+077.06E+017.60E+042.09E+073.20E+09 + 48M1 8.771.04E+001.13E+018.23E+039.44E+051.14E+014.18E+035.41E+055.02E+07 + 48M1 15.772.89E-016.85E-011.99E+022.68E+041.98E+002.77E+021.84E+041.02E+06 + 48M1 25.009.76E-026.16E-015.88E+009.82E+025.04E-013.51E+011.43E+035.24E+04 + 48M1 40.003.03E-022.54E-011.17E+002.50E+011.26E-014.60E+001.16E+022.78E+03 + 48M1 52.001.54E-021.31E-017.18E-015.51E+005.83E-021.53E+002.99E+015.63E+02 + 48M1 70.007.00E-035.66E-023.32E-011.94E+002.46E-024.54E-016.69E+009.62E+01 + 48M1 103.002.45E-031.73E-029.61E-025.16E-018.20E-039.92E-021.02E+001.04E+01 + 48M1 150.008.75E-045.13E-032.50E-021.18E-012.88E-032.41E-021.79E-011.32E+00 + 48M1 280.001.62E-046.73E-042.45E-038.74E-035.43E-042.71E-031.21E-025.41E-02 + 48M1 500.003.82E-051.17E-043.26E-048.83E-041.26E-044.33E-041.31E-033.91E-03 + 48M2 1.653.83E+011.18E+074.18E+102.00E+131.63E+023.26E+051.17E+081.98E+10 + 48M2 2.651.54E+011.09E+061.97E+097.36E+113.87E+013.93E+041.11E+071.94E+09 + 48M2 4.654.16E+006.49E+045.64E+071.46E+107.03E+003.43E+036.69E+059.63E+07 + 48M2 8.657.93E-012.90E+031.21E+061.97E+081.06E+002.51E+023.09E+043.08E+06 + 48M2 15.651.38E-011.52E+023.26E+043.30E+061.74E-012.17E+011.67E+031.08E+05 + 48M2 25.003.16E-021.50E+011.95E+031.33E+054.18E-023.22E+001.68E+027.53E+03 + 48M2 40.006.75E-031.50E+001.20E+025.41E+039.96E-034.84E-011.69E+015.14E+02 + 48M2 52.002.78E-034.20E-012.55E+019.17E+024.47E-031.69E-014.70E+001.15E+02 + 48M2 70.001.00E-031.00E-014.51E+001.25E+021.81E-035.17E-021.11E+002.12E+01 + 48M2 103.002.64E-041.60E-024.89E-019.64E+005.58E-041.12E-021.74E-012.40E+00 + 48M2 150.007.19E-052.76E-035.90E-028.41E-011.79E-042.59E-032.93E-022.97E-01 + 48M2 280.008.65E-061.67E-042.03E-031.73E-022.75E-052.40E-041.66E-031.03E-02 + 48M2 500.001.35E-061.46E-051.11E-046.15E-044.98E-062.89E-051.33E-045.55E-04 + 48M3 1.628.15E+012.29E+078.33E+103.98E+134.79E+011.22E+073.69E+111.09E+15 + 48M3 2.623.07E+012.02E+063.68E+091.36E+121.11E+011.10E+061.32E+101.87E+13 + 48M3 4.627.82E+001.15E+059.94E+072.53E+101.96E+006.44E+042.68E+081.71E+11 + 48M3 8.621.41E+004.94E+032.01E+063.22E+082.91E-012.86E+033.93E+061.14E+09 + 48M3 15.622.35E-012.46E+025.14E+045.08E+064.74E-021.48E+027.57E+041.12E+07 + 48M3 25.005.18E-022.31E+012.89E+031.91E+051.13E-021.42E+013.57E+033.18E+05 + 48M3 40.001.06E-022.18E+001.65E+027.22E+032.70E-031.39E+001.81E+021.00E+04 + 48M3 52.004.30E-035.87E-013.35E+011.16E+031.22E-033.82E-013.54E+011.52E+03 + 48M3 70.001.52E-031.33E-015.53E+001.47E+024.94E-048.91E-025.75E+001.85E+02 + 48M3 103.003.88E-041.95E-025.39E-011.01E+011.54E-041.37E-025.70E-011.29E+01 + 48M3 150.001.03E-043.06E-035.70E-027.59E-014.97E-052.28E-036.37E-021.04E+00 + 48M3 280.001.21E-051.54E-041.49E-031.14E-027.92E-061.27E-041.93E-031.90E-02 + 48M3 500.001.94E-061.16E-056.12E-052.86E-041.56E-061.01E-058.89E-055.81E-04 + 48M4 1.411.56E+026.27E+055.87E+101.17E+151.19E+013.04E+054.82E+097.53E+12 + 48M4 2.412.62E+014.01E+041.35E+091.11E+132.03E+002.05E+041.33E+081.36E+11 + 48M4 4.412.99E+001.81E+031.89E+076.19E+102.64E-019.75E+022.47E+061.50E+09 + 48M4 8.412.49E-016.44E+011.96E+052.60E+082.80E-023.71E+013.76E+041.27E+07 + 48M4 15.412.10E-022.68E+002.69E+031.63E+063.20E-031.71E+007.85E+021.50E+05 + 48M4 25.002.68E-032.03E-018.81E+012.95E+045.41E-041.46E-013.69E+014.47E+03 + 48M4 40.003.43E-041.61E-023.23E+006.22E+029.28E-051.34E-021.95E+001.51E+02 + 48M4 52.001.07E-043.87E-035.17E-017.34E+013.42E-053.53E-033.81E-012.30E+01 + 48M4 70.002.82E-057.71E-046.55E-026.64E+001.09E-057.80E-046.08E-022.77E+00 + 48M4 103.004.95E-069.54E-054.60E-033.03E-012.45E-061.10E-045.69E-031.81E-01 + 48M4 150.009.22E-071.28E-053.63E-041.58E-025.65E-071.66E-055.83E-041.33E-02 + 48M4 280.006.34E-085.05E-076.26E-061.38E-044.98E-087.45E-071.43E-051.91E-04 + 48M4 500.005.71E-092.98E-081.87E-072.16E-065.39E-094.48E-085.08E-074.38E-06 + 48M5 1.402.30E+028.53E+059.24E+101.76E+157.39E+003.67E+042.31E+102.00E+15 + 48M5 2.403.82E+015.37E+042.09E+091.62E+131.27E+002.51E+035.36E+081.64E+13 + 48M5 4.404.28E+002.39E+032.89E+078.86E+101.68E-011.23E+027.78E+067.64E+10 + 48M5 8.403.51E-018.38E+012.95E+053.63E+081.85E-024.94E+008.52E+042.63E+08 + 48M5 15.402.92E-023.42E+003.98E+032.22E+062.20E-032.46E-011.24E+031.39E+06 + 48M5 25.003.68E-032.53E-011.27E+023.88E+043.85E-042.26E-024.27E+012.27E+04 + 48M5 40.004.65E-041.95E-024.52E+007.83E+026.86E-052.24E-031.64E+004.47E+02 + 48M5 52.001.44E-044.62E-037.05E-018.95E+012.59E-056.23E-042.68E-015.16E+01 + 48M5 70.003.81E-058.97E-048.63E-027.73E+008.51E-061.47E-043.47E-024.60E+00 + 48M5 103.006.78E-061.07E-045.73E-033.27E-011.99E-062.27E-052.50E-032.09E-01 + 48M5 150.001.29E-061.38E-054.20E-041.54E-024.89E-073.81E-062.00E-041.09E-02 + 48M5 280.009.05E-085.17E-076.17E-061.07E-044.97E-082.18E-073.43E-069.26E-05 + 48M5 500.009.31E-093.26E-081.62E-071.31E-066.75E-091.85E-081.04E-071.34E-06 + 48N+ 50.004.87E-032.49E-011.44E+015.64E+021.50E-025.35E-011.95E+016.82E+02 + 48N+ 70.001.87E-035.36E-021.96E+005.44E+015.63E-031.28E-012.99E+006.95E+01 + 48N+ 100.006.76E-041.13E-022.50E-014.78E+002.03E-032.99E-024.48E-016.90E+00 + 48N+ 150.002.13E-042.12E-032.67E-023.29E-016.50E-046.18E-035.85E-025.78E-01 + 48N+ 200.009.46E-056.88E-045.95E-035.34E-022.96E-042.13E-031.50E-021.10E-01 + 48N+ 500.008.60E-062.95E-051.00E-043.54E-042.79E-059.94E-053.25E-041.07E-03 + 49K 28.944.53E+001.85E+011.56E+016.27E+001.64E+014.69E+022.23E+032.56E+03 + 49K 29.644.24E+001.92E+012.50E+012.01E+011.53E+014.26E+022.24E+033.95E+03 + 49K 30.943.79E+002.00E+014.13E+016.39E+011.34E+013.61E+022.19E+036.13E+03 + 49K 34.142.93E+001.94E+016.92E+012.13E+021.01E+012.48E+021.87E+038.92E+03 + 49K 37.942.21E+001.69E+018.11E+013.52E+027.37E+001.65E+021.42E+039.02E+03 + 49K 42.001.69E+001.40E+017.89E+014.13E+025.47E+001.12E+021.03E+037.63E+03 + 49K 48.001.17E+001.03E+016.54E+013.92E+023.70E+006.73E+016.45E+025.30E+03 + 49K 56.007.70E-016.88E+004.64E+012.98E+022.36E+003.75E+013.58E+023.08E+03 + 49K 68.004.49E-013.91E+002.66E+011.74E+021.34E+001.80E+011.65E+021.40E+03 + 49K 81.002.75E-012.27E+001.50E+019.51E+018.11E-019.39E+007.98E+016.47E+02 + 49K 98.001.60E-011.23E+007.63E+004.55E+014.72E-014.65E+003.59E+012.69E+02 + 49K 111.001.13E-018.13E-014.80E+002.73E+013.32E-012.96E+002.13E+011.50E+02 + 49K 128.007.52E-025.04E-012.79E+001.49E+012.23E-011.77E+001.17E+017.60E+01 + 49K 151.004.71E-022.88E-011.47E+007.22E+001.41E-019.88E-015.89E+003.46E+01 + 49K 180.002.87E-021.58E-017.38E-013.31E+008.77E-025.37E-012.86E+001.50E+01 + 49K 245.001.22E-025.59E-022.21E-018.40E-013.86E-021.90E-018.29E-013.58E+00 + 49K 330.005.53E-032.12E-027.13E-022.32E-011.79E-027.29E-022.63E-019.40E-01 + 49K 420.003.00E-031.00E-022.99E-028.61E-029.77E-033.46E-021.08E-013.34E-01 + 49K 530.001.72E-035.12E-031.36E-023.52E-025.53E-031.74E-024.80E-021.29E-01 + 49K 760.007.76E-042.00E-034.56E-031.01E-022.36E-036.33E-031.47E-023.28E-02 + 49K 1050.004.10E-049.46E-041.93E-033.76E-031.14E-032.71E-035.52E-031.07E-02 + 49K 1300.002.79E-046.02E-041.15E-032.09E-037.13E-041.59E-033.01E-035.42E-03 + 49K 1550.002.06E-044.25E-047.74E-041.34E-034.90E-041.04E-031.87E-033.19E-03 + 49L1 5.241.39E+014.36E+035.49E+051.44E+073.11E+022.59E+053.62E+071.28E+09 + 49L1 5.941.12E+012.13E+033.75E+051.63E+072.14E+021.43E+051.80E+078.01E+08 + 49L1 7.247.82E+006.30E+021.61E+051.05E+071.19E+025.57E+046.00E+063.08E+08 + 49L1 10.443.81E+004.19E+012.26E+042.00E+063.97E+011.00E+047.89E+054.04E+07 + 49L1 14.241.97E+002.23E+003.15E+033.22E+051.57E+012.41E+031.44E+056.48E+06 + 49L1 18.001.17E+002.13E+005.79E+026.80E+047.81E+008.35E+024.03E+041.58E+06 + 49L1 24.005.96E-012.71E+005.36E+018.33E+033.32E+002.33E+028.65E+032.79E+05 + 49L1 32.002.96E-012.00E+007.17E+008.20E+021.42E+006.66E+011.90E+034.93E+04 + 49L1 44.001.32E-011.05E+004.47E+006.30E+015.55E-011.72E+013.68E+027.38E+03 + 49L1 57.006.75E-025.45E-012.86E+001.73E+012.61E-015.91E+009.96E+011.61E+03 + 49L1 74.003.37E-022.60E-011.46E+007.90E+001.22E-012.06E+002.75E+013.57E+02 + 49L1 87.002.18E-021.60E-018.96E-014.77E+007.71E-021.09E+001.25E+011.42E+02 + 49L1 104.001.34E-029.20E-024.98E-012.58E+004.65E-025.44E-015.37E+005.23E+01 + 49L1 127.007.74E-034.86E-022.48E-011.22E+002.65E-022.55E-012.12E+001.75E+01 + 49L1 155.004.48E-032.55E-021.21E-015.53E-011.53E-021.22E-018.60E-016.00E+00 + 49L1 220.001.73E-038.12E-033.29E-021.30E-015.94E-033.52E-021.87E-019.86E-01 + 49L1 305.007.28E-042.86E-039.92E-033.37E-022.52E-031.17E-024.87E-022.01E-01 + 49L1 390.003.91E-041.35E-034.16E-031.26E-021.35E-035.32E-031.87E-026.49E-02 + 49L1 500.002.15E-046.57E-041.81E-034.89E-037.31E-042.49E-037.49E-032.21E-02 + 49L1 730.009.30E-052.44E-045.76E-041.32E-032.96E-048.35E-042.05E-034.87E-03 + 49L11000.004.96E-051.17E-042.47E-045.00E-041.44E-043.58E-047.64E-041.56E-03 + 49L11500.002.41E-055.06E-059.44E-051.67E-045.96E-051.30E-042.40E-044.21E-04 + 49L2 4.942.84E+012.82E+051.60E+081.21E+103.45E+011.10E+046.29E+051.53E+07 + 49L2 5.641.95E+011.45E+057.31E+076.85E+092.30E+016.56E+034.63E+051.79E+07 + 49L2 6.941.07E+015.10E+042.13E+072.28E+091.22E+012.88E+032.32E+051.25E+07 + 49L2 10.143.42E+007.60E+032.23E+062.33E+083.79E+006.36E+025.03E+043.06E+06 + 49L2 13.941.27E+001.55E+033.35E+053.04E+071.42E+001.78E+021.23E+046.89E+05 + 49L2 18.005.59E-014.33E+027.30E+045.70E+066.49E-016.39E+013.80E+031.88E+05 + 49L2 24.002.18E-011.04E+021.32E+048.44E+052.68E-012.02E+019.86E+024.10E+04 + 49L2 32.008.34E-022.52E+012.40E+031.23E+051.11E-016.39E+002.52E+028.56E+03 + 49L2 44.002.82E-025.30E+003.68E+021.46E+044.18E-021.79E+005.48E+011.47E+03 + 49L2 57.001.16E-021.51E+008.10E+012.59E+031.89E-026.39E-011.58E+013.45E+02 + 49L2 74.004.68E-034.28E-011.78E+014.57E+028.54E-032.27E-014.54E+008.01E+01 + 49L2 87.002.66E-031.98E-017.02E+001.57E+025.21E-031.20E-012.09E+003.24E+01 + 49L2 104.001.42E-038.48E-022.53E+004.85E+013.03E-035.94E-028.95E-011.20E+01 + 49L2 127.007.09E-043.32E-028.19E-011.33E+011.65E-032.72E-023.48E-013.96E+00 + 49L2 155.003.55E-041.32E-022.70E-013.69E+009.04E-041.26E-021.37E-011.33E+00 + 49L2 220.001.07E-042.68E-034.00E-024.10E-013.15E-043.29E-032.71E-022.00E-01 + 49L2 305.003.60E-056.38E-047.16E-035.68E-021.19E-049.66E-046.24E-033.61E-02 + 49L2 390.001.62E-052.24E-042.06E-031.36E-025.76E-053.92E-042.12E-031.03E-02 + 49L2 500.007.40E-068.12E-056.12E-043.38E-032.78E-051.61E-047.38E-043.05E-03 + 49L2 730.002.41E-061.87E-051.07E-044.62E-049.33E-064.30E-051.57E-045.18E-04 + 49L21000.009.65E-076.00E-062.78E-059.98E-053.82E-061.50E-054.65E-051.30E-04 + 49L21500.003.42E-071.55E-065.64E-061.65E-051.24E-064.08E-061.06E-052.48E-05 + 49L3 4.735.84E+015.89E+053.60E+082.91E+101.06E+013.16E+051.17E+094.37E+11 + 49L3 5.433.92E+012.93E+051.57E+081.56E+106.94E+001.59E+054.60E+081.51E+11 + 49L3 6.732.07E+019.87E+044.32E+074.80E+093.58E+005.45E+041.08E+082.91E+10 + 49L3 9.936.28E+001.37E+044.11E+064.38E+081.08E+007.83E+037.93E+061.50E+09 + 49L3 13.732.24E+002.66E+035.77E+055.30E+073.99E-011.56E+039.29E+051.30E+08 + 49L3 18.009.23E-016.77E+021.12E+058.66E+061.73E-014.05E+021.58E+051.71E+07 + 49L3 24.003.52E-011.58E+021.95E+041.23E+067.17E-029.69E+012.47E+042.04E+06 + 49L3 32.001.32E-013.71E+013.41E+031.72E+052.97E-022.33E+013.95E+032.50E+05 + 49L3 44.004.36E-027.48E+004.94E+021.91E+041.12E-024.82E+005.37E+022.53E+04 + 49L3 57.001.75E-022.04E+001.03E+023.20E+035.08E-031.35E+001.09E+024.04E+03 + 49L3 74.006.93E-035.52E-012.13E+015.25E+022.29E-033.77E-012.23E+016.54E+02 + 49L3 87.003.89E-032.46E-018.02E+001.72E+021.40E-031.72E-018.44E+002.15E+02 + 49L3 104.002.06E-031.01E-012.74E+005.00E+018.16E-047.25E-022.93E+006.37E+01 + 49L3 127.001.01E-033.78E-028.29E-011.27E+014.46E-042.78E-029.10E-011.67E+01 + 49L3 155.005.00E-041.42E-022.53E-013.24E+002.45E-041.08E-022.88E-014.46E+00 + 49L3 220.001.48E-042.62E-033.23E-023.03E-018.67E-052.10E-033.99E-024.66E-01 + 49L3 305.004.93E-055.64E-044.94E-033.48E-023.35E-054.75E-046.63E-036.05E-02 + 49L3 390.002.23E-051.85E-041.25E-037.17E-031.67E-051.60E-041.78E-031.36E-02 + 49L3 500.001.04E-056.27E-053.30E-041.54E-038.39E-065.52E-054.87E-043.16E-03 + 49L3 730.003.51E-061.36E-054.93E-051.70E-043.10E-061.20E-057.29E-053.73E-04 + 49L31000.001.56E-064.30E-061.18E-053.24E-051.44E-063.77E-061.63E-056.85E-05 + 49L31500.005.98E-071.18E-062.34E-064.92E-065.84E-071.03E-062.77E-068.80E-06 + 49M1 1.831.54E+015.06E+042.05E+062.77E+091.41E+039.57E+061.06E+102.96E+12 + 49M1 2.838.53E+007.92E+031.19E+063.75E+073.81E+021.12E+066.46E+081.42E+11 + 49M1 4.833.43E+005.87E+021.79E+051.34E+077.66E+018.34E+042.30E+073.45E+09 + 49M1 8.831.05E+001.41E+018.90E+039.67E+051.26E+014.69E+036.07E+055.57E+07 + 49M1 15.832.94E-016.02E-012.38E+022.97E+042.20E+003.13E+022.08E+041.15E+06 + 49M1 25.001.01E-015.70E-017.76E+001.19E+035.66E-014.02E+011.64E+035.99E+04 + 49M1 40.003.15E-022.48E-011.09E+003.17E+011.41E-015.23E+001.33E+023.16E+03 + 49M1 52.001.61E-021.30E-016.75E-016.09E+006.55E-021.74E+003.40E+016.37E+02 + 49M1 70.007.34E-035.71E-023.21E-011.91E+002.77E-025.14E-017.57E+001.09E+02 + 49M1 103.002.58E-031.77E-029.58E-025.08E-019.18E-031.12E-011.15E+001.17E+01 + 49M1 150.009.26E-045.33E-032.54E-021.19E-013.22E-032.71E-022.00E-011.47E+00 + 49M1 280.001.73E-047.09E-042.56E-039.09E-036.05E-043.02E-031.36E-026.04E-02 + 49M1 500.004.09E-051.25E-043.47E-049.38E-041.40E-044.81E-041.46E-034.34E-03 + 49M2 1.703.63E+011.13E+073.93E+101.81E+131.67E+023.27E+051.13E+081.80E+10 + 49M2 2.701.51E+011.11E+061.99E+097.23E+114.13E+014.14E+041.13E+071.90E+09 + 49M2 4.704.20E+006.90E+045.97E+071.51E+107.69E+003.74E+037.13E+059.95E+07 + 49M2 8.708.24E-013.17E+031.32E+062.11E+081.18E+002.78E+023.37E+043.29E+06 + 49M2 15.701.46E-011.68E+023.61E+043.61E+061.96E-012.43E+011.84E+031.18E+05 + 49M2 25.003.42E-021.69E+012.20E+031.49E+054.75E-023.65E+001.89E+028.39E+03 + 49M2 40.007.36E-031.69E+001.35E+026.08E+031.13E-025.49E-011.90E+015.76E+02 + 49M2 52.003.05E-034.74E-012.89E+011.03E+035.10E-031.92E-015.31E+001.29E+02 + 49M2 70.001.11E-031.13E-015.10E+001.41E+022.06E-035.88E-021.26E+002.39E+01 + 49M2 103.002.93E-041.81E-025.55E-011.09E+016.39E-041.28E-021.97E-012.71E+00 + 49M2 150.008.01E-053.13E-036.71E-029.54E-012.05E-042.96E-033.34E-023.36E-01 + 49M2 280.009.72E-061.90E-042.32E-031.97E-023.17E-052.75E-041.90E-031.18E-02 + 49M2 500.001.52E-061.68E-051.27E-047.05E-045.75E-063.33E-051.53E-046.36E-04 + 49M3 1.667.77E+012.21E+077.87E+103.63E+134.87E+011.23E+073.66E+111.06E+15 + 49M3 2.663.01E+012.06E+063.72E+091.34E+121.16E+011.17E+061.41E+101.99E+13 + 49M3 4.667.91E+001.22E+051.05E+082.62E+102.11E+007.15E+043.03E+081.94E+11 + 49M3 8.661.47E+005.37E+032.19E+063.44E+083.19E-013.25E+034.56E+061.33E+09 + 49M3 15.662.49E-012.71E+025.66E+045.53E+065.23E-021.70E+028.89E+041.31E+07 + 49M3 25.005.57E-022.58E+013.23E+032.13E+051.26E-021.66E+014.25E+033.80E+05 + 49M3 40.001.15E-022.44E+001.85E+028.05E+033.01E-031.62E+002.15E+021.19E+04 + 49M3 52.004.68E-036.57E-013.75E+011.30E+031.36E-034.45E-014.19E+011.79E+03 + 49M3 70.001.66E-031.49E-016.20E+001.64E+025.51E-041.04E-016.78E+002.19E+02 + 49M3 103.004.26E-042.19E-026.05E-011.13E+011.71E-041.59E-026.69E-011.51E+01 + 49M3 150.001.14E-043.44E-036.40E-028.50E-015.55E-052.64E-037.45E-021.21E+00 + 49M3 280.001.35E-051.74E-041.68E-031.28E-028.85E-061.46E-042.24E-032.21E-02 + 49M3 500.002.15E-061.30E-056.89E-053.22E-041.74E-061.15E-051.03E-046.74E-04 + 49M4 1.451.53E+026.15E+055.69E+101.12E+151.23E+013.14E+054.90E+097.41E+12 + 49M4 2.452.70E+014.17E+041.42E+091.17E+132.19E+002.25E+041.46E+081.46E+11 + 49M4 4.453.19E+001.96E+032.10E+076.93E+102.93E-011.11E+032.84E+061.69E+09 + 49M4 8.452.74E-017.16E+012.24E+053.01E+083.17E-024.32E+014.42E+041.48E+07 + 49M4 15.452.36E-023.03E+003.13E+031.92E+063.68E-032.02E+009.33E+021.78E+05 + 49M4 25.003.07E-032.34E-011.05E+023.55E+046.30E-041.75E-014.46E+015.38E+03 + 49M4 40.003.94E-041.87E-023.84E+007.47E+021.08E-041.60E-022.35E+001.81E+02 + 49M4 52.001.23E-044.51E-036.14E-018.82E+014.01E-054.23E-034.60E-012.77E+01 + 49M4 70.003.27E-059.02E-047.79E-027.99E+001.28E-059.35E-047.33E-023.34E+00 + 49M4 103.005.84E-061.12E-045.48E-033.65E-012.88E-061.32E-046.87E-032.19E-01 + 49M4 150.001.12E-061.51E-054.33E-041.91E-026.68E-072.00E-057.04E-041.60E-02 + 49M4 280.007.72E-086.02E-077.48E-061.66E-045.90E-088.97E-071.73E-052.32E-04 + 49M4 500.005.92E-093.59E-082.24E-072.61E-066.39E-095.40E-086.17E-075.33E-06 + 49M5 1.442.27E+028.33E+058.99E+101.69E+157.64E+003.75E+042.35E+102.00E+15 + 49M5 2.443.93E+015.56E+042.20E+091.71E+131.36E+002.71E+035.92E+081.82E+13 + 49M5 4.444.58E+002.58E+033.21E+079.93E+101.86E-011.38E+029.04E+069.04E+10 + 49M5 8.443.86E-019.26E+013.39E+054.21E+082.08E-025.65E+001.02E+053.21E+08 + 49M5 15.443.27E-023.85E+004.64E+032.61E+062.51E-032.84E-011.51E+031.72E+06 + 49M5 25.004.20E-032.91E-011.51E+024.65E+044.45E-042.64E-025.27E+012.86E+04 + 49M5 40.005.35E-042.25E-025.38E+009.38E+027.96E-052.63E-032.02E+005.61E+02 + 49M5 52.001.66E-045.34E-038.38E-011.07E+023.01E-057.30E-043.30E-016.46E+01 + 49M5 70.004.40E-051.04E-031.03E-019.27E+009.92E-061.72E-044.27E-025.74E+00 + 49M5 103.007.77E-061.25E-046.82E-033.92E-012.33E-062.67E-053.07E-032.60E-01 + 49M5 150.001.46E-061.61E-055.00E-041.85E-025.73E-074.49E-062.44E-041.35E-02 + 49M5 280.001.04E-076.04E-077.35E-061.28E-045.84E-082.57E-074.17E-061.14E-04 + 49M5 500.001.25E-083.69E-081.95E-071.56E-067.93E-092.18E-081.25E-071.63E-06 + 49N+ 50.005.39E-032.95E-011.73E+016.82E+021.76E-026.39E-012.39E+018.51E+02 + 49N+ 70.002.08E-036.29E-022.35E+006.57E+016.59E-031.53E-013.63E+008.59E+01 + 49N+ 100.007.51E-041.31E-022.99E-015.77E+002.37E-033.54E-025.39E-018.42E+00 + 49N+ 150.002.37E-042.42E-033.15E-023.94E-017.58E-047.27E-036.98E-026.98E-01 + 49N+ 200.001.05E-047.82E-046.98E-036.37E-023.45E-042.50E-031.78E-021.32E-01 + 49N+ 500.009.62E-063.32E-051.15E-044.11E-043.22E-051.15E-043.79E-041.26E-03 + 50K 30.204.15E+001.62E+011.28E+014.74E+001.60E+014.35E+021.97E+032.14E+03 + 50K 30.903.90E+001.68E+012.03E+011.50E+011.49E+013.96E+021.98E+033.27E+03 + 50K 32.203.50E+001.74E+013.35E+014.76E+011.32E+013.38E+021.95E+035.07E+03 + 50K 35.402.73E+001.70E+015.66E+011.61E+029.97E+002.36E+021.68E+037.49E+03 + 50K 39.202.09E+001.51E+016.74E+012.73E+027.39E+001.60E+021.30E+037.73E+03 + 50K 43.001.63E+001.28E+016.70E+013.26E+025.63E+001.12E+029.76E+026.76E+03 + 50K 49.001.15E+009.54E+005.71E+013.22E+023.84E+006.81E+016.22E+024.84E+03 + 50K 57.007.58E-016.46E+004.15E+012.53E+022.47E+003.84E+013.52E+022.90E+03 + 50K 69.004.46E-013.74E+002.44E+011.53E+021.42E+001.87E+011.65E+021.35E+03 + 50K 82.002.75E-012.20E+001.40E+018.59E+018.63E-019.82E+008.12E+016.38E+02 + 50K 99.001.62E-011.21E+007.27E+004.21E+015.04E-014.91E+003.70E+012.70E+02 + 50K 112.001.14E-018.04E-014.62E+002.56E+013.56E-013.13E+002.21E+011.52E+02 + 50K 129.007.67E-025.02E-012.71E+001.41E+012.40E-011.88E+001.23E+017.79E+01 + 50K 152.004.83E-022.89E-011.44E+006.96E+001.52E-011.05E+006.19E+003.58E+01 + 50K 180.003.00E-021.63E-017.49E-013.31E+009.62E-025.87E-013.09E+001.61E+01 + 50K 245.001.28E-025.79E-022.26E-018.53E-014.23E-022.08E-018.99E-013.85E+00 + 50K 330.005.81E-032.20E-027.37E-022.38E-011.95E-027.94E-022.86E-011.01E+00 + 50K 420.003.16E-031.05E-023.11E-028.91E-021.06E-023.77E-021.18E-013.61E-01 + 50K 530.001.81E-035.38E-031.43E-023.67E-026.02E-031.89E-025.20E-021.40E-01 + 50K 760.008.21E-042.11E-034.82E-031.06E-022.56E-036.87E-031.59E-023.55E-02 + 50K 1050.004.34E-041.00E-032.05E-033.99E-031.23E-032.94E-035.98E-031.16E-02 + 50K 1300.002.95E-046.40E-041.23E-032.23E-037.69E-041.72E-033.26E-035.87E-03 + 50K 1550.002.19E-044.51E-048.25E-041.42E-035.28E-041.13E-032.03E-033.45E-03 + 50L1 5.461.28E+013.92E+034.63E+051.12E+073.05E+022.42E+053.23E+071.08E+09 + 50L1 6.161.04E+011.98E+033.25E+051.31E+072.13E+021.36E+051.65E+076.93E+08 + 50L1 7.467.37E+006.16E+021.46E+058.85E+061.20E+025.50E+045.71E+062.78E+08 + 50L1 10.663.67E+004.67E+012.21E+041.84E+064.14E+011.03E+047.91E+053.90E+07 + 50L1 14.461.93E+002.73E+003.30E+033.16E+051.67E+012.55E+031.49E+056.50E+06 + 50L1 18.001.19E+001.73E+007.09E+027.62E+048.69E+009.46E+024.54E+041.75E+06 + 50L1 24.006.09E-012.38E+007.16E+019.78E+033.69E+002.63E+029.72E+033.10E+05 + 50L1 32.003.04E-011.87E+008.11E+001.02E+031.58E+007.50E+012.13E+035.48E+04 + 50L1 44.001.37E-011.02E+004.03E+007.83E+016.17E-011.94E+014.12E+028.20E+03 + 50L1 57.006.99E-025.38E-012.66E+001.79E+012.90E-016.61E+001.11E+021.79E+03 + 50L1 74.003.50E-022.61E-011.40E+007.57E+001.36E-012.30E+003.06E+013.95E+02 + 50L1 87.002.26E-021.61E-018.71E-014.58E+008.55E-021.21E+001.40E+011.57E+02 + 50L1 104.001.40E-029.33E-024.91E-012.50E+005.15E-026.06E-015.97E+005.79E+01 + 50L1 127.008.09E-034.97E-022.48E-011.20E+002.94E-022.84E-012.35E+001.93E+01 + 50L1 155.004.70E-032.62E-021.22E-015.52E-011.69E-021.36E-019.52E-016.63E+00 + 50L1 220.001.82E-038.42E-033.37E-021.32E-016.56E-033.90E-022.06E-011.09E+00 + 50L1 305.007.68E-042.99E-031.03E-023.48E-022.78E-031.29E-025.37E-022.21E-01 + 50L1 390.004.13E-041.41E-034.35E-031.31E-021.49E-035.86E-032.06E-027.13E-02 + 50L1 500.002.28E-046.94E-041.91E-035.15E-038.02E-042.73E-038.22E-032.42E-02 + 50L1 730.009.89E-052.59E-046.12E-041.40E-033.24E-049.16E-042.25E-035.33E-03 + 50L11000.005.29E-051.25E-042.64E-045.35E-041.57E-043.92E-048.37E-041.71E-03 + 50L11500.002.57E-055.41E-051.01E-041.79E-046.47E-051.42E-042.62E-044.59E-04 + 50L2 5.162.62E+012.52E+051.36E+089.69E+093.38E+011.03E+045.50E+051.23E+07 + 50L2 5.861.83E+011.33E+056.42E+075.67E+092.29E+016.24E+034.14E+051.48E+07 + 50L2 7.161.03E+014.84E+041.96E+071.98E+091.24E+012.82E+032.15E+051.08E+07 + 50L2 10.363.39E+007.58E+032.17E+062.18E+083.98E+006.48E+024.92E+042.85E+06 + 50L2 14.161.28E+001.59E+033.38E+052.98E+071.52E+001.86E+021.24E+046.72E+05 + 50L2 18.005.96E-014.81E+028.08E+046.20E+067.28E-017.11E+014.15E+032.01E+05 + 50L2 24.002.34E-011.16E+021.47E+049.24E+053.01E-012.25E+011.08E+034.43E+04 + 50L2 32.008.98E-022.80E+012.67E+031.36E+051.25E-017.13E+002.78E+029.32E+03 + 50L2 44.003.06E-025.90E+004.10E+021.62E+044.71E-022.00E+006.07E+011.61E+03 + 50L2 57.001.26E-021.68E+009.03E+012.87E+032.13E-027.15E-011.76E+013.80E+02 + 50L2 74.005.09E-034.78E-011.99E+015.07E+029.63E-032.54E-015.05E+008.86E+01 + 50L2 87.002.90E-032.21E-017.84E+001.74E+025.89E-031.34E-012.34E+003.59E+01 + 50L2 104.001.56E-039.48E-022.83E+005.41E+013.42E-036.68E-021.00E+001.33E+01 + 50L2 127.007.79E-043.71E-029.18E-011.48E+011.87E-033.06E-023.90E-014.41E+00 + 50L2 155.003.91E-041.47E-023.03E-014.13E+001.02E-031.42E-021.53E-011.48E+00 + 50L2 220.001.18E-043.01E-034.50E-024.60E-013.58E-043.72E-033.05E-022.25E-01 + 50L2 305.003.99E-057.17E-048.07E-036.39E-021.35E-041.09E-037.04E-034.06E-02 + 50L2 390.001.80E-052.53E-042.32E-031.53E-026.56E-054.45E-042.40E-031.17E-02 + 50L2 500.008.28E-069.16E-056.92E-043.82E-033.17E-051.82E-048.36E-043.44E-03 + 50L2 730.002.68E-062.12E-051.21E-045.24E-041.07E-054.90E-051.79E-045.87E-04 + 50L21000.001.09E-066.79E-063.16E-051.13E-044.36E-061.71E-055.30E-051.48E-04 + 50L21500.003.77E-071.76E-066.42E-061.88E-051.41E-064.67E-061.21E-052.83E-05 + 50L3 4.935.40E+015.27E+053.08E+082.35E+101.03E+012.96E+051.05E+093.76E+11 + 50L3 5.633.68E+012.69E+051.39E+081.30E+106.82E+001.53E+054.28E+081.36E+11 + 50L3 6.931.99E+019.39E+043.98E+074.20E+093.60E+005.42E+041.05E+082.75E+10 + 50L3 10.136.21E+001.37E+044.01E+064.12E+081.12E+008.16E+038.21E+061.52E+09 + 50L3 13.932.26E+002.73E+035.82E+055.19E+074.19E-011.67E+039.95E+051.37E+08 + 50L3 18.009.79E-017.47E+021.23E+059.38E+061.90E-014.66E+021.86E+052.00E+07 + 50L3 24.003.76E-011.75E+022.15E+041.34E+067.87E-021.12E+022.89E+042.38E+06 + 50L3 32.001.41E-014.10E+013.76E+031.87E+053.26E-022.68E+014.61E+032.91E+05 + 50L3 44.004.68E-028.26E+005.45E+022.09E+041.23E-025.54E+006.25E+022.94E+04 + 50L3 57.001.89E-022.25E+001.14E+023.51E+035.58E-031.55E+001.26E+024.68E+03 + 50L3 74.007.48E-036.10E-012.35E+015.77E+022.52E-034.32E-012.58E+017.56E+02 + 50L3 87.004.21E-032.72E-018.87E+001.89E+021.54E-031.97E-019.76E+002.48E+02 + 50L3 104.002.23E-031.12E-013.03E+005.51E+018.97E-048.30E-023.38E+007.35E+01 + 50L3 127.001.10E-034.18E-029.17E-011.39E+014.91E-043.18E-021.05E+001.92E+01 + 50L3 155.005.43E-041.57E-022.80E-013.57E+002.70E-041.23E-023.32E-015.13E+00 + 50L3 220.001.62E-042.90E-033.58E-023.35E-019.55E-052.39E-034.57E-025.34E-01 + 50L3 305.005.41E-056.24E-045.48E-033.85E-023.69E-055.38E-047.58E-036.93E-02 + 50L3 390.002.45E-052.05E-041.39E-037.94E-031.83E-051.81E-042.03E-031.56E-02 + 50L3 500.001.14E-056.95E-053.67E-041.70E-039.24E-066.23E-055.55E-043.61E-03 + 50L3 730.003.85E-061.50E-055.47E-051.89E-043.41E-061.34E-058.28E-054.24E-04 + 50L31000.001.69E-064.75E-061.30E-053.59E-051.58E-064.20E-061.84E-057.79E-05 + 50L31500.006.68E-071.30E-062.60E-065.45E-066.41E-071.14E-063.11E-069.95E-06 + 50M1 1.881.45E+014.82E+041.97E+062.48E+091.44E+039.53E+061.03E+102.78E+12 + 50M1 2.888.23E+007.95E+031.11E+063.94E+074.02E+021.18E+066.72E+081.44E+11 + 50M1 4.883.38E+006.32E+021.79E+051.24E+078.30E+019.11E+042.50E+073.70E+09 + 50M1 8.881.05E+001.74E+019.56E+039.85E+051.39E+015.24E+036.79E+056.16E+07 + 50M1 15.882.99E-015.51E-012.80E+023.25E+042.45E+003.53E+022.35E+041.29E+06 + 50M1 25.001.04E-015.25E-011.02E+011.42E+036.35E-014.59E+011.88E+036.83E+04 + 50M1 40.003.28E-022.42E-011.05E+004.01E+011.58E-015.94E+001.51E+023.58E+03 + 50M1 52.001.68E-021.29E-016.35E-016.99E+007.35E-021.97E+003.85E+017.20E+02 + 50M1 70.007.68E-035.76E-023.10E-011.92E+003.10E-025.80E-018.54E+001.22E+02 + 50M1 103.002.72E-031.81E-029.53E-025.02E-011.03E-021.26E-011.29E+001.32E+01 + 50M1 150.009.79E-045.51E-032.58E-021.20E-013.60E-033.03E-022.24E-011.65E+00 + 50M1 280.001.84E-047.46E-042.67E-039.45E-036.74E-043.37E-031.51E-026.72E-02 + 50M1 500.004.37E-051.33E-043.68E-049.97E-041.55E-045.34E-041.62E-034.81E-03 + 50M2 1.763.44E+011.08E+073.67E+101.63E+131.72E+023.27E+051.09E+081.63E+10 + 50M2 2.761.47E+011.13E+061.99E+097.04E+114.39E+014.34E+041.15E+071.85E+09 + 50M2 4.764.23E+007.31E+046.30E+071.56E+108.40E+004.05E+037.55E+051.02E+08 + 50M2 8.768.53E-013.45E+031.43E+062.26E+081.31E+003.06E+023.66E+043.50E+06 + 50M2 15.761.55E-011.86E+023.98E+043.94E+062.20E-012.71E+012.03E+031.28E+05 + 50M2 25.003.69E-021.90E+012.48E+031.67E+055.40E-024.13E+002.12E+029.33E+03 + 50M2 40.008.01E-031.90E+001.52E+026.82E+031.29E-026.22E-012.14E+016.43E+02 + 50M2 52.003.33E-035.34E-013.25E+011.16E+035.81E-032.18E-015.98E+001.45E+02 + 50M2 70.001.22E-031.28E-015.77E+001.58E+022.35E-036.67E-021.42E+002.68E+01 + 50M2 103.003.24E-042.04E-026.28E-011.23E+017.31E-041.46E-022.24E-013.05E+00 + 50M2 150.008.92E-053.55E-037.61E-021.08E+002.35E-043.37E-033.79E-023.80E-01 + 50M2 280.001.09E-052.16E-042.64E-032.25E-023.64E-053.15E-042.17E-031.34E-02 + 50M2 500.001.71E-061.91E-051.45E-048.07E-046.63E-063.83E-051.76E-047.27E-04 + 50M3 1.717.40E+012.12E+077.39E+103.29E+134.93E+011.24E+073.61E+111.03E+15 + 50M3 2.712.96E+012.09E+063.74E+091.31E+121.22E+011.25E+061.50E+102.11E+13 + 50M3 4.717.99E+001.29E+051.11E+082.70E+102.26E+007.91E+043.39E+082.18E+11 + 50M3 8.711.52E+005.82E+032.37E+063.67E+083.47E-013.68E+035.26E+061.54E+09 + 50M3 15.712.62E-012.98E+026.21E+046.00E+065.74E-021.95E+021.04E+051.54E+07 + 50M3 25.005.98E-022.88E+013.61E+032.36E+051.39E-021.94E+015.05E+034.53E+05 + 50M3 40.001.25E-022.73E+002.06E+028.94E+033.34E-031.89E+002.54E+021.41E+04 + 50M3 52.005.09E-037.34E-014.19E+011.44E+031.51E-035.18E-014.94E+012.12E+03 + 50M3 70.001.81E-031.66E-016.94E+001.82E+026.12E-041.21E-017.96E+002.57E+02 + 50M3 103.004.66E-042.45E-026.77E-011.26E+011.91E-041.85E-027.83E-011.77E+01 + 50M3 150.001.25E-043.85E-037.18E-029.50E-016.18E-053.06E-038.69E-021.41E+00 + 50M3 280.001.49E-051.95E-041.88E-031.43E-029.86E-061.68E-042.60E-032.56E-02 + 50M3 500.002.37E-061.46E-057.75E-053.61E-041.94E-061.32E-051.19E-047.79E-04 + 50M4 1.491.50E+025.99E+055.46E+101.06E+151.27E+013.22E+054.92E+097.22E+12 + 50M4 2.492.76E+014.32E+041.48E+091.22E+132.34E+002.45E+041.58E+081.55E+11 + 50M4 4.493.40E+002.11E+032.31E+077.71E+103.23E-011.26E+033.23E+061.90E+09 + 50M4 8.493.00E-017.93E+012.55E+053.47E+083.58E-025.00E+015.16E+041.71E+07 + 50M4 15.492.63E-023.41E+003.63E+032.25E+064.20E-032.37E+001.10E+032.09E+05 + 50M4 25.003.50E-032.69E-011.24E+024.25E+047.30E-042.08E-015.36E+016.45E+03 + 50M4 40.004.54E-042.16E-024.54E+008.94E+021.26E-041.91E-022.82E+002.18E+02 + 50M4 52.001.43E-045.24E-037.27E-011.06E+024.68E-055.04E-035.53E-013.33E+01 + 50M4 70.003.81E-051.05E-039.23E-029.56E+001.50E-051.12E-038.81E-024.01E+00 + 50M4 103.006.75E-061.31E-046.50E-034.37E-013.38E-061.58E-048.27E-032.63E-01 + 50M4 150.001.26E-061.78E-055.14E-042.29E-027.86E-072.39E-058.48E-041.93E-02 + 50M4 280.008.57E-087.15E-078.89E-061.99E-046.96E-081.08E-062.08E-052.80E-04 + 50M4 500.008.10E-094.23E-082.68E-073.13E-067.56E-096.48E-087.46E-076.44E-06 + 50M5 1.482.22E+028.08E+058.66E+101.60E+157.86E+003.80E+042.37E+101.99E+15 + 50M5 2.484.03E+015.72E+042.30E+091.79E+131.46E+002.91E+036.47E+082.00E+13 + 50M5 4.484.87E+002.76E+033.55E+071.10E+112.05E-011.53E+021.04E+071.06E+11 + 50M5 8.484.22E-011.02E+023.86E+054.84E+082.34E-026.43E+001.21E+053.90E+08 + 50M5 15.483.65E-024.31E+005.38E+033.05E+062.85E-033.27E-011.82E+032.12E+06 + 50M5 25.004.78E-033.32E-011.79E+025.56E+045.12E-043.08E-026.47E+013.59E+04 + 50M5 40.006.13E-042.59E-026.37E+001.12E+039.20E-053.07E-032.48E+007.00E+02 + 50M5 52.001.91E-046.16E-039.93E-011.28E+023.49E-058.53E-044.04E-018.03E+01 + 50M5 70.005.08E-051.20E-031.22E-011.11E+011.15E-052.01E-045.23E-027.12E+00 + 50M5 103.009.09E-061.45E-048.08E-034.68E-012.72E-063.13E-053.75E-033.21E-01 + 50M5 150.001.72E-061.87E-055.93E-042.21E-026.68E-075.26E-062.98E-041.66E-02 + 50M5 280.001.15E-077.11E-078.70E-061.53E-046.83E-083.02E-075.03E-061.39E-04 + 50M5 500.001.27E-084.50E-082.27E-071.87E-069.29E-092.56E-081.50E-071.99E-06 + 50N+ 50.005.93E-033.43E-012.04E+018.08E+022.04E-027.58E-012.90E+011.04E+03 + 50N+ 70.002.29E-037.25E-022.77E+007.77E+017.67E-031.80E-014.36E+001.04E+02 + 50N+ 100.008.28E-041.50E-023.50E-016.81E+002.75E-034.17E-026.42E-011.01E+01 + 50N+ 150.002.61E-042.74E-033.67E-024.64E-018.80E-048.50E-038.24E-028.31E-01 + 50N+ 200.001.17E-048.80E-048.07E-037.46E-024.00E-042.91E-032.09E-021.56E-01 + 50N+ 500.001.07E-053.71E-051.30E-044.72E-043.70E-051.33E-044.39E-041.46E-03 + 51K 31.493.82E+001.42E+011.06E+013.61E+001.56E+014.04E+021.75E+031.79E+03 + 51K 32.193.59E+001.47E+011.66E+011.13E+011.45E+013.69E+021.76E+032.72E+03 + 51K 33.493.24E+001.53E+012.73E+013.57E+011.29E+013.17E+021.73E+034.22E+03 + 51K 36.692.55E+001.50E+014.65E+011.23E+029.89E+002.24E+021.51E+036.30E+03 + 51K 40.491.97E+001.34E+015.62E+012.12E+027.40E+001.54E+021.19E+036.63E+03 + 51K 44.001.58E+001.16E+015.68E+012.56E+025.79E+001.12E+029.25E+025.98E+03 + 51K 50.001.12E+008.83E+004.97E+012.63E+023.98E+006.89E+016.00E+024.41E+03 + 51K 58.007.46E-016.08E+003.70E+012.15E+022.58E+003.93E+013.46E+022.72E+03 + 51K 70.004.44E-013.58E+002.24E+011.34E+021.50E+001.93E+011.65E+021.31E+03 + 51K 83.002.76E-012.13E+001.31E+017.75E+019.17E-011.03E+018.24E+016.28E+02 + 51K 100.001.64E-011.18E+006.91E+003.89E+015.39E-015.17E+003.81E+012.71E+02 + 51K 113.001.16E-017.94E-014.44E+002.39E+013.82E-013.31E+002.29E+011.54E+02 + 51K 130.007.82E-024.99E-012.64E+001.34E+012.58E-012.00E+001.28E+017.97E+01 + 51K 153.004.94E-022.89E-011.42E+006.70E+001.64E-011.13E+006.51E+003.70E+01 + 51K 180.003.14E-021.68E-017.59E-013.31E+001.05E-016.40E-013.34E+001.72E+01 + 51K 245.001.34E-025.99E-022.32E-018.64E-014.63E-022.26E-019.73E-014.13E+00 + 51K 330.006.11E-032.29E-027.61E-022.44E-012.13E-028.65E-023.09E-011.09E+00 + 51K 420.003.33E-031.10E-023.23E-029.22E-021.16E-024.10E-021.27E-013.89E-01 + 51K 530.001.91E-035.65E-031.49E-023.82E-026.56E-032.06E-025.64E-021.51E-01 + 51K 760.008.68E-042.23E-035.08E-031.12E-022.78E-037.46E-031.72E-023.84E-02 + 51K 1050.004.60E-041.06E-032.17E-034.23E-031.33E-033.18E-036.47E-031.25E-02 + 51K 1300.003.12E-046.79E-041.30E-032.37E-038.30E-041.86E-033.53E-036.34E-03 + 51K 1550.002.31E-044.79E-048.77E-041.52E-035.69E-041.22E-032.19E-033.72E-03 + 51L1 5.701.18E+013.53E+033.92E+058.71E+062.99E+022.26E+052.88E+079.11E+08 + 51L1 6.409.69E+001.83E+032.81E+051.05E+072.12E+021.30E+051.52E+076.00E+08 + 51L1 7.706.94E+006.00E+021.32E+057.46E+061.22E+025.41E+045.43E+062.51E+08 + 51L1 10.903.53E+005.13E+012.15E+041.69E+064.31E+011.06E+047.92E+053.75E+07 + 51L1 14.701.88E+003.42E+003.43E+033.08E+051.76E+012.68E+031.53E+056.51E+06 + 51L1 18.001.20E+001.47E+008.54E+028.45E+049.65E+001.07E+035.10E+041.94E+06 + 51L1 24.006.22E-012.06E+009.33E+011.14E+044.10E+002.96E+021.09E+043.43E+05 + 51L1 32.003.12E-011.73E+009.81E+001.25E+031.75E+008.44E+012.39E+036.08E+04 + 51L1 44.001.41E-019.83E-013.70E+009.81E+016.85E-012.17E+014.60E+029.10E+03 + 51L1 57.007.23E-025.30E-012.46E+001.93E+013.21E-017.40E+001.24E+021.98E+03 + 51L1 74.003.63E-022.60E-011.34E+007.37E+001.51E-012.57E+003.40E+014.38E+02 + 51L1 87.002.35E-021.62E-018.45E-014.42E+009.48E-021.35E+001.55E+011.74E+02 + 51L1 104.001.45E-029.46E-024.83E-012.43E+005.71E-026.74E-016.62E+006.40E+01 + 51L1 127.008.46E-035.07E-022.47E-011.18E+003.25E-023.15E-012.61E+002.13E+01 + 51L1 155.004.92E-032.69E-021.22E-015.50E-011.87E-021.50E-011.05E+007.32E+00 + 51L1 220.001.91E-038.72E-033.45E-021.35E-017.24E-034.31E-022.28E-011.20E+00 + 51L1 305.008.10E-043.12E-031.06E-023.59E-023.06E-031.42E-025.91E-022.43E-01 + 51L1 390.004.36E-041.48E-034.54E-031.37E-021.63E-036.45E-032.26E-027.83E-02 + 51L1 500.002.41E-047.32E-042.01E-035.41E-038.80E-043.00E-039.02E-032.66E-02 + 51L1 730.001.05E-042.75E-046.50E-041.49E-033.54E-041.00E-032.46E-035.84E-03 + 51L11000.005.62E-051.34E-042.82E-045.72E-041.71E-044.29E-049.15E-041.87E-03 + 51L11500.002.73E-055.79E-051.08E-041.92E-047.02E-051.54E-042.86E-045.01E-04 + 51L2 5.382.42E+012.25E+051.16E+087.80E+093.31E+019.57E+034.83E+059.97E+06 + 51L2 6.081.72E+011.22E+055.64E+074.70E+092.28E+015.93E+033.71E+051.23E+07 + 51L2 7.389.81E+004.60E+041.79E+071.72E+091.26E+012.76E+031.99E+059.36E+06 + 51L2 10.583.35E+007.55E+032.11E+062.03E+084.16E+006.59E+024.80E+042.65E+06 + 51L2 14.381.29E+001.63E+033.40E+052.90E+071.62E+001.94E+021.25E+046.54E+05 + 51L2 18.006.35E-015.34E+028.94E+046.74E+068.16E-017.90E+014.52E+032.14E+05 + 51L2 24.002.50E-011.28E+021.62E+041.01E+063.38E-012.50E+011.19E+034.77E+04 + 51L2 32.009.65E-023.11E+012.96E+031.49E+051.40E-017.94E+003.05E+021.01E+04 + 51L2 44.003.30E-026.56E+004.56E+021.78E+045.29E-022.23E+006.71E+011.76E+03 + 51L2 57.001.36E-021.87E+001.01E+023.17E+032.40E-027.99E-011.95E+014.18E+02 + 51L2 74.005.54E-035.33E-012.22E+015.62E+021.08E-022.85E-015.62E+009.78E+01 + 51L2 87.003.16E-032.46E-018.75E+001.93E+026.64E-031.51E-012.60E+003.98E+01 + 51L2 104.001.70E-031.06E-013.17E+006.01E+013.86E-037.49E-021.12E+001.48E+01 + 51L2 127.008.54E-044.15E-021.03E+001.65E+012.11E-033.44E-024.35E-014.91E+00 + 51L2 155.004.30E-041.65E-023.39E-014.61E+001.16E-031.59E-021.72E-011.65E+00 + 51L2 220.001.31E-043.38E-035.05E-025.15E-014.06E-044.19E-033.43E-022.51E-01 + 51L2 305.004.42E-058.06E-049.09E-037.18E-021.54E-041.24E-037.93E-034.56E-02 + 51L2 390.002.00E-052.85E-042.62E-031.72E-027.45E-055.04E-042.71E-031.31E-02 + 51L2 500.009.21E-061.03E-047.82E-044.31E-033.61E-052.07E-049.46E-043.88E-03 + 51L2 730.002.97E-062.39E-051.37E-045.92E-041.21E-055.57E-052.03E-046.65E-04 + 51L21000.001.24E-067.67E-063.58E-051.28E-044.98E-061.95E-056.03E-051.68E-04 + 51L21500.004.24E-071.99E-067.30E-062.14E-051.61E-065.33E-061.38E-053.22E-05 + 51L3 5.134.99E+014.73E+052.65E+081.91E+109.91E+002.78E+059.47E+083.24E+11 + 51L3 5.833.45E+012.48E+051.23E+081.09E+106.70E+001.47E+053.98E+081.21E+11 + 51L3 7.131.91E+018.93E+043.66E+073.68E+093.60E+005.39E+041.02E+082.59E+10 + 51L3 10.336.14E+001.37E+043.90E+063.85E+081.15E+008.49E+038.48E+061.53E+09 + 51L3 14.132.28E+002.80E+035.86E+055.06E+074.39E-011.78E+031.06E+061.43E+08 + 51L3 18.001.04E+008.23E+021.35E+051.01E+072.08E-015.35E+022.18E+052.34E+07 + 51L3 24.003.99E-011.93E+022.36E+041.45E+068.62E-021.28E+023.38E+042.78E+06 + 51L3 32.001.51E-014.51E+014.13E+032.04E+053.57E-023.07E+015.38E+033.38E+05 + 51L3 44.005.02E-029.10E+006.00E+022.29E+041.35E-026.36E+007.26E+023.40E+04 + 51L3 57.002.03E-022.48E+001.25E+023.84E+036.12E-031.78E+001.46E+025.41E+03 + 51L3 74.008.06E-036.73E-012.59E+016.33E+022.76E-034.95E-012.98E+018.72E+02 + 51L3 87.004.54E-033.01E-019.78E+002.07E+021.69E-032.25E-011.13E+012.86E+02 + 51L3 104.002.41E-031.24E-013.35E+006.05E+019.85E-049.49E-023.90E+008.45E+01 + 51L3 127.001.19E-034.62E-021.01E+001.53E+015.39E-043.63E-021.21E+002.20E+01 + 51L3 155.005.90E-041.74E-023.10E-013.93E+002.96E-041.40E-023.81E-015.89E+00 + 51L3 220.001.76E-043.20E-033.96E-023.69E-011.05E-042.72E-035.24E-026.12E-01 + 51L3 305.005.90E-056.91E-046.07E-034.26E-024.05E-056.10E-048.66E-037.91E-02 + 51L3 390.002.68E-052.27E-041.54E-038.78E-032.02E-052.04E-042.32E-031.78E-02 + 51L3 500.001.25E-057.69E-054.06E-041.89E-031.01E-057.01E-056.32E-044.11E-03 + 51L3 730.004.22E-061.66E-056.06E-052.10E-043.74E-061.50E-059.39E-054.82E-04 + 51L31000.001.84E-065.25E-061.44E-053.98E-051.73E-064.68E-062.08E-058.83E-05 + 51L31500.007.28E-071.43E-062.87E-066.04E-067.01E-071.26E-063.49E-061.12E-05 + 51M1 1.941.38E+014.59E+041.90E+062.20E+091.47E+039.47E+061.00E+102.61E+12 + 51M1 2.947.93E+007.98E+031.05E+064.15E+074.24E+021.23E+066.97E+081.46E+11 + 51M1 4.943.32E+006.77E+021.78E+051.15E+078.97E+019.92E+042.72E+073.95E+09 + 51M1 8.941.05E+002.10E+011.02E+041.00E+061.52E+015.84E+037.57E+056.80E+07 + 51M1 15.943.04E-015.38E-013.26E+023.55E+042.71E+003.97E+022.64E+041.44E+06 + 51M1 26.009.78E-024.64E-019.92E+001.27E+036.34E-014.39E+011.73E+036.05E+04 + 51M1 41.003.20E-022.22E-019.84E-014.19E+011.65E-016.07E+001.50E+023.48E+03 + 51M1 53.001.66E-021.22E-015.78E-017.36E+007.78E-022.05E+003.95E+017.25E+02 + 51M1 71.007.73E-035.56E-022.88E-011.88E+003.33E-026.18E-018.97E+001.27E+02 + 51M1 104.002.78E-031.80E-029.17E-024.81E-011.12E-021.36E-011.39E+001.40E+01 + 51M1 150.001.03E-035.70E-032.62E-021.21E-014.01E-033.40E-022.51E-011.84E+00 + 51M1 280.001.95E-047.84E-042.78E-039.81E-037.49E-043.75E-031.68E-027.47E-02 + 51M1 500.004.68E-051.42E-043.91E-041.06E-031.72E-045.92E-041.79E-035.33E-03 + 51M2 1.813.25E+011.04E+073.42E+101.47E+131.76E+023.26E+051.05E+081.48E+10 + 51M2 2.811.43E+011.14E+061.99E+096.85E+114.66E+014.54E+041.17E+071.80E+09 + 51M2 4.814.26E+007.72E+046.62E+071.61E+109.14E+004.37E+037.98E+051.05E+08 + 51M2 8.818.82E-013.74E+031.55E+062.41E+081.46E+003.37E+023.97E+043.72E+06 + 51M2 15.811.63E-012.04E+024.38E+044.29E+062.46E-013.01E+012.23E+031.39E+05 + 51M2 26.003.51E-021.76E+012.21E+031.43E+055.43E-023.98E+001.96E+028.28E+03 + 51M2 41.008.01E-031.90E+001.48E+026.46E+031.36E-026.36E-012.13E+016.22E+02 + 51M2 53.003.41E-035.47E-013.28E+011.14E+036.23E-032.28E-016.13E+001.45E+02 + 51M2 71.001.27E-031.34E-015.99E+001.62E+022.57E-037.15E-021.50E+002.77E+01 + 51M2 104.003.45E-042.20E-026.72E-011.30E+018.09E-041.59E-022.41E-013.25E+00 + 51M2 150.009.87E-054.01E-038.62E-021.22E+002.69E-043.84E-034.29E-024.29E-01 + 51M2 280.001.22E-052.45E-043.00E-032.55E-024.17E-053.61E-042.47E-031.52E-02 + 51M2 500.001.93E-062.18E-051.66E-049.20E-047.63E-064.39E-052.01E-048.30E-04 + 51M3 1.777.05E+012.03E+076.93E+102.98E+134.98E+011.24E+073.55E+119.93E+14 + 51M3 2.772.89E+012.12E+063.75E+091.28E+121.27E+011.32E+061.59E+102.22E+13 + 51M3 4.778.05E+001.36E+051.16E+082.78E+102.42E+008.71E+043.78E+082.43E+11 + 51M3 8.771.57E+006.29E+032.55E+063.89E+083.77E-014.16E+036.05E+061.78E+09 + 51M3 15.772.76E-013.27E+026.79E+046.49E+066.29E-022.23E+021.21E+051.80E+07 + 51M3 26.005.63E-022.64E+013.17E+031.99E+051.37E-021.85E+014.65E+034.01E+05 + 51M3 41.001.24E-022.69E+001.98E+028.34E+033.43E-031.94E+002.56E+021.39E+04 + 51M3 53.005.16E-037.44E-014.17E+011.40E+031.58E-035.47E-015.16E+012.17E+03 + 51M3 71.001.87E-031.73E-017.11E+001.84E+026.50E-041.30E-018.56E+002.73E+02 + 51M3 104.004.94E-042.61E-027.14E-011.31E+012.06E-042.04E-028.64E-011.94E+01 + 51M3 150.001.37E-044.31E-038.03E-021.06E+006.86E-053.53E-031.01E-011.65E+00 + 51M3 280.001.63E-052.18E-042.11E-031.60E-021.10E-051.93E-043.01E-032.97E-02 + 51M3 500.002.64E-061.63E-058.69E-054.05E-042.15E-061.50E-051.37E-048.99E-04 + 51M4 1.541.46E+025.82E+055.22E+109.98E+141.30E+013.29E+054.93E+097.02E+12 + 51M4 2.542.82E+014.45E+041.53E+091.27E+132.51E+002.65E+041.71E+081.63E+11 + 51M4 4.543.60E+002.27E+032.53E+078.53E+103.56E-011.42E+033.66E+062.13E+09 + 51M4 8.543.27E-018.74E+012.89E+053.97E+084.02E-025.78E+016.00E+041.97E+07 + 51M4 15.542.93E-023.83E+004.18E+032.62E+064.78E-032.77E+001.30E+032.45E+05 + 51M4 26.003.36E-032.50E-011.10E+023.66E+047.30E-042.02E-015.01E+015.80E+03 + 51M4 41.004.65E-042.18E-024.50E+008.71E+021.33E-042.00E-022.90E+002.18E+02 + 51M4 53.001.50E-045.47E-037.50E-011.08E+025.06E-055.45E-035.88E-013.47E+01 + 51M4 71.004.11E-051.13E-039.87E-021.02E+011.66E-051.24E-039.67E-024.34E+00 + 51M4 104.007.55E-061.45E-047.19E-034.83E-013.81E-061.80E-049.34E-032.95E-01 + 51M4 150.001.49E-062.08E-056.08E-042.73E-029.21E-072.85E-051.02E-032.31E-02 + 51M4 280.009.76E-088.40E-071.05E-052.38E-048.19E-081.29E-062.50E-053.36E-04 + 51M4 500.008.38E-095.03E-083.17E-073.76E-068.90E-097.75E-088.97E-077.76E-06 + 51M5 1.532.17E+027.82E+058.33E+101.51E+158.06E+003.84E+042.38E+101.96E+15 + 51M5 2.534.11E+015.87E+042.40E+091.86E+131.55E+003.11E+037.03E+082.18E+13 + 51M5 4.535.16E+002.95E+033.90E+071.22E+112.24E-011.70E+021.19E+071.23E+11 + 51M5 8.534.60E-011.12E+024.39E+055.54E+082.61E-027.30E+001.43E+054.71E+08 + 51M5 15.534.05E-024.81E+006.22E+033.55E+063.22E-033.75E-012.18E+032.60E+06 + 51M5 26.004.57E-033.06E-011.60E+024.77E+045.10E-042.95E-026.03E+013.21E+04 + 51M5 41.006.26E-042.59E-026.31E+001.09E+039.67E-053.16E-032.55E+007.09E+02 + 51M5 53.002.01E-046.37E-031.02E+001.30E+023.75E-059.04E-044.33E-018.51E+01 + 51M5 71.005.45E-051.28E-031.30E-011.17E+011.26E-052.18E-045.79E-027.84E+00 + 51M5 104.001.00E-051.59E-048.93E-035.14E-013.04E-063.48E-054.27E-033.66E-01 + 51M5 150.002.00E-062.18E-057.00E-042.63E-027.77E-076.13E-063.61E-042.04E-02 + 51M5 280.001.38E-078.28E-071.03E-051.82E-047.95E-083.53E-076.06E-061.70E-04 + 51M5 500.001.67E-085.07E-082.71E-072.21E-061.08E-083.00E-081.78E-072.41E-06 + 51N+ 50.006.45E-033.96E-012.39E+019.48E+022.36E-028.90E-013.48E+011.27E+03 + 51N+ 70.002.49E-038.30E-023.23E+009.09E+018.83E-032.11E-015.19E+001.26E+02 + 51N+ 100.009.04E-041.70E-024.07E-017.95E+003.17E-034.85E-027.58E-011.21E+01 + 51N+ 150.002.86E-043.07E-034.24E-025.40E-011.01E-039.85E-039.64E-029.81E-01 + 51N+ 200.001.28E-049.82E-049.25E-038.66E-024.58E-043.36E-032.43E-021.83E-01 + 51N+ 500.001.18E-054.12E-051.46E-045.38E-044.22E-051.52E-045.04E-041.68E-03 + 52K 32.813.51E+001.24E+018.79E+002.77E+001.52E+013.75E+021.56E+031.51E+03 + 52K 33.513.31E+001.29E+011.37E+018.54E+001.42E+013.45E+021.56E+032.28E+03 + 52K 34.813.00E+001.34E+012.23E+012.69E+011.27E+012.98E+021.55E+033.52E+03 + 52K 38.012.39E+001.33E+013.82E+019.34E+019.80E+002.13E+021.36E+035.32E+03 + 52K 41.811.86E+001.19E+014.69E+011.65E+027.40E+001.48E+021.09E+035.70E+03 + 52K 46.001.44E+001.02E+014.78E+012.07E+025.59E+001.03E+028.17E+025.10E+03 + 52K 52.001.03E+007.82E+004.21E+012.13E+023.91E+006.48E+015.41E+023.81E+03 + 52K 60.007.01E-015.46E+003.18E+011.76E+022.57E+003.77E+013.19E+022.40E+03 + 52K 72.004.25E-013.28E+001.97E+011.13E+021.52E+001.90E+011.56E+021.19E+03 + 52K 85.002.68E-011.99E+001.18E+016.71E+019.41E-011.03E+017.97E+015.87E+02 + 52K 102.001.61E-011.12E+006.35E+003.46E+015.60E-015.25E+003.76E+012.59E+02 + 52K 115.001.15E-017.61E-014.13E+002.16E+013.99E-013.39E+002.29E+011.49E+02 + 52K 132.007.79E-024.84E-012.49E+001.23E+012.71E-012.07E+001.29E+017.86E+01 + 52K 155.004.97E-022.83E-011.36E+006.27E+001.74E-011.17E+006.65E+003.70E+01 + 52K 180.003.28E-021.72E-017.68E-013.30E+001.15E-016.98E-013.61E+001.84E+01 + 52K 245.001.41E-026.19E-022.37E-018.74E-015.06E-022.47E-011.05E+004.43E+00 + 52K 330.006.41E-032.38E-027.85E-022.50E-012.33E-029.41E-023.35E-011.17E+00 + 52K 420.003.50E-031.15E-023.36E-029.52E-021.26E-024.46E-021.38E-014.19E-01 + 52K 530.002.02E-035.92E-031.56E-023.98E-027.13E-032.23E-026.10E-021.62E-01 + 52K 760.009.18E-042.35E-035.35E-031.17E-023.02E-038.09E-031.87E-024.14E-02 + 52K 1050.004.86E-041.12E-032.30E-034.48E-031.44E-033.45E-037.00E-031.35E-02 + 52K 1300.003.30E-047.20E-041.38E-032.52E-038.94E-042.02E-033.81E-036.84E-03 + 52K 1550.002.44E-045.09E-049.33E-041.61E-036.11E-041.32E-032.37E-034.02E-03 + 52L1 5.941.09E+013.19E+033.35E+056.81E+062.94E+022.12E+052.59E+077.76E+08 + 52L1 6.649.02E+001.70E+032.44E+058.43E+062.10E+021.24E+051.39E+075.20E+08 + 52L1 7.946.54E+005.82E+021.19E+056.27E+061.23E+025.32E+045.15E+062.27E+08 + 52L1 11.143.39E+005.58E+012.08E+041.54E+064.48E+011.09E+047.90E+053.59E+07 + 52L1 14.941.84E+004.25E+003.54E+032.99E+051.86E+012.82E+031.58E+056.49E+06 + 52L1 19.001.08E+001.37E+006.93E+026.53E+049.12E+009.47E+024.28E+041.55E+06 + 52L1 25.005.76E-011.81E+008.60E+019.70E+034.03E+002.79E+029.83E+032.97E+05 + 52L1 33.002.96E-011.54E+001.00E+011.19E+031.77E+008.29E+012.27E+035.60E+04 + 52L1 45.001.37E-019.01E-013.35E+001.03E+027.11E-012.21E+014.57E+028.82E+03 + 52L1 58.007.13E-024.98E-012.21E+001.98E+013.39E-017.69E+001.26E+021.98E+03 + 52L1 75.003.63E-022.50E-011.23E+007.01E+001.61E-012.71E+003.54E+014.48E+02 + 52L1 88.002.37E-021.58E-017.91E-014.15E+001.02E-011.44E+001.63E+011.80E+02 + 52L1 105.001.48E-029.29E-024.60E-012.30E+006.15E-027.21E-017.01E+006.70E+01 + 52L1 128.008.64E-035.03E-022.39E-011.13E+003.52E-023.39E-012.78E+002.25E+01 + 52L1 155.005.14E-032.75E-021.23E-015.48E-012.07E-021.66E-011.16E+008.06E+00 + 52L1 220.002.01E-039.02E-033.53E-021.37E-017.98E-034.75E-022.51E-011.32E+00 + 52L1 305.008.55E-043.25E-031.10E-023.71E-023.37E-031.57E-026.50E-022.67E-01 + 52L1 400.004.34E-041.44E-034.35E-031.29E-021.68E-036.55E-032.26E-027.67E-02 + 52L1 510.002.44E-047.31E-041.99E-035.30E-039.19E-043.11E-039.22E-032.68E-02 + 52L1 740.001.08E-042.83E-046.64E-041.51E-033.75E-041.06E-032.57E-036.06E-03 + 52L11000.005.98E-051.42E-043.01E-046.11E-041.87E-044.68E-049.99E-042.04E-03 + 52L11500.002.91E-056.19E-051.16E-042.07E-047.60E-051.68E-043.12E-045.47E-04 + 52L2 5.612.24E+012.02E+059.93E+076.33E+093.25E+018.96E+034.28E+058.07E+06 + 52L2 6.311.61E+011.12E+054.96E+073.90E+092.27E+015.64E+033.32E+051.02E+07 + 52L2 7.619.38E+004.36E+041.64E+071.49E+091.28E+012.69E+031.84E+058.11E+06 + 52L2 10.813.30E+007.50E+032.04E+061.89E+084.35E+006.69E+024.66E+042.46E+06 + 52L2 14.611.30E+001.67E+033.41E+052.82E+071.73E+002.01E+021.26E+046.34E+05 + 52L2 19.005.68E-014.52E+027.16E+045.13E+067.73E-017.06E+013.83E+031.73E+05 + 52L2 25.002.34E-011.16E+021.41E+048.41E+053.34E-012.36E+011.07E+034.13E+04 + 52L2 33.009.34E-022.97E+012.74E+031.33E+051.43E-017.81E+002.90E+029.28E+03 + 52L2 45.003.29E-026.53E+004.43E+021.69E+045.54E-022.28E+006.65E+011.70E+03 + 52L2 58.001.39E-021.91E+001.01E+023.12E+032.56E-028.33E-011.99E+014.16E+02 + 52L2 75.005.74E-035.56E-012.28E+015.69E+021.17E-023.02E-015.85E+001.00E+02 + 52L2 88.003.31E-032.59E-019.13E+001.99E+027.22E-031.61E-012.74E+004.12E+01 + 52L2 105.001.80E-031.13E-013.34E+006.27E+014.23E-038.09E-021.19E+001.55E+01 + 52L2 128.009.09E-044.46E-021.10E+001.74E+012.33E-033.75E-024.68E-015.21E+00 + 52L2 155.004.71E-041.84E-023.79E-015.13E+001.31E-031.79E-021.92E-011.84E+00 + 52L2 220.001.44E-043.78E-035.66E-025.76E-014.59E-044.72E-033.85E-022.80E-01 + 52L2 305.004.88E-059.04E-041.02E-028.05E-021.74E-041.40E-038.92E-035.11E-02 + 52L2 400.002.04E-052.88E-042.60E-031.68E-027.86E-055.20E-042.74E-031.30E-02 + 52L2 510.009.60E-061.07E-048.02E-044.36E-033.87E-052.19E-049.84E-043.98E-03 + 52L2 740.003.17E-062.56E-051.46E-046.25E-041.33E-056.04E-052.18E-047.07E-04 + 52L21000.001.38E-068.66E-064.05E-051.45E-045.67E-062.22E-056.85E-051.90E-04 + 52L21500.004.71E-072.25E-068.28E-062.42E-051.84E-066.08E-061.58E-053.66E-05 + 52L3 5.344.64E+014.26E+052.28E+081.57E+109.60E+002.62E+058.54E+082.81E+11 + 52L3 6.043.24E+012.28E+051.09E+089.11E+096.57E+001.42E+053.70E+081.09E+11 + 52L3 7.341.83E+018.48E+043.36E+073.22E+093.60E+005.35E+049.88E+072.44E+10 + 52L3 10.546.05E+001.36E+043.79E+063.60E+081.18E+008.81E+038.71E+061.54E+09 + 52L3 14.342.29E+002.85E+035.87E+054.93E+074.58E-011.90E+031.13E+061.50E+08 + 52L3 19.009.19E-016.88E+021.07E+057.61E+061.93E-014.68E+021.79E+051.82E+07 + 52L3 25.003.70E-011.72E+022.03E+041.19E+068.32E-021.20E+023.03E+042.39E+06 + 52L3 33.001.45E-014.25E+013.77E+031.80E+053.55E-023.02E+015.14E+033.14E+05 + 52L3 45.004.96E-028.95E+005.76E+022.14E+041.38E-026.51E+007.32E+023.35E+04 + 52L3 58.002.05E-022.51E+001.24E+023.72E+036.35E-031.87E+001.52E+025.53E+03 + 52L3 75.008.27E-036.94E-012.63E+016.31E+022.91E-035.30E-013.17E+019.15E+02 + 52L3 88.004.70E-033.13E-011.01E+012.10E+021.79E-032.43E-011.21E+013.04E+02 + 52L3 105.002.52E-031.30E-013.48E+006.21E+011.05E-031.03E-014.24E+009.10E+01 + 52L3 128.001.25E-034.90E-021.07E+001.60E+015.77E-043.98E-021.32E+002.40E+01 + 52L3 155.006.40E-041.92E-023.42E-014.32E+003.25E-041.60E-024.37E-016.74E+00 + 52L3 220.001.91E-043.54E-034.37E-024.06E-011.15E-043.09E-035.99E-026.99E-01 + 52L3 305.006.44E-057.62E-046.71E-034.69E-024.45E-056.90E-049.88E-039.02E-02 + 52L3 400.002.71E-052.23E-041.48E-038.26E-032.06E-052.06E-042.31E-031.74E-02 + 52L3 510.001.29E-057.80E-054.05E-041.85E-031.05E-057.24E-056.48E-044.17E-03 + 52L3 740.004.41E-061.73E-056.27E-052.15E-043.96E-061.59E-059.93E-055.08E-04 + 52L31000.002.02E-065.78E-061.59E-054.41E-051.89E-065.20E-062.35E-051.00E-04 + 52L31500.007.92E-071.57E-063.16E-066.67E-067.65E-071.40E-063.91E-061.27E-05 + 52M1 2.011.30E+014.36E+041.85E+061.94E+091.50E+039.37E+069.71E+092.44E+12 + 52M1 3.017.64E+007.97E+039.81E+054.35E+074.45E+021.29E+067.19E+081.46E+11 + 52M1 5.013.27E+007.20E+021.77E+051.07E+079.66E+011.08E+052.95E+074.20E+09 + 52M1 9.011.05E+002.50E+011.09E+041.01E+061.67E+016.49E+038.41E+057.46E+07 + 52M1 16.013.08E-015.66E-013.75E+023.85E+043.00E+004.46E+022.97E+041.60E+06 + 52M1 26.001.01E-014.26E-011.28E+011.50E+037.09E-015.00E+011.97E+036.87E+04 + 52M1 41.003.31E-022.15E-011.01E+005.21E+011.85E-016.87E+001.70E+023.93E+03 + 52M1 53.001.73E-021.20E-015.53E-018.77E+008.70E-022.32E+004.46E+018.17E+02 + 52M1 71.008.08E-035.57E-022.78E-011.98E+003.72E-026.96E-011.01E+011.42E+02 + 52M1 104.002.92E-031.83E-029.10E-024.80E-011.25E-021.53E-011.56E+001.56E+01 + 52M1 150.001.09E-035.88E-032.66E-021.22E-014.47E-033.80E-022.81E-012.06E+00 + 52M1 280.002.07E-048.22E-042.90E-031.02E-028.32E-044.17E-031.87E-028.29E-02 + 52M1 500.005.00E-051.51E-044.15E-041.12E-031.90E-046.55E-041.98E-035.89E-03 + 52M2 1.873.08E+019.88E+063.18E+101.32E+131.80E+023.24E+051.00E+081.33E+10 + 52M2 2.871.39E+011.15E+061.98E+096.64E+114.93E+014.73E+041.18E+071.74E+09 + 52M2 4.874.27E+008.12E+046.93E+071.65E+109.93E+004.71E+038.41E+051.07E+08 + 52M2 8.879.09E-014.05E+031.67E+062.57E+081.61E+003.71E+024.28E+043.94E+06 + 52M2 15.871.72E-012.24E+024.80E+044.66E+062.75E-013.34E+012.45E+031.50E+05 + 52M2 26.003.77E-021.97E+012.47E+031.59E+056.14E-024.48E+002.19E+029.17E+03 + 52M2 41.008.69E-032.13E+001.66E+027.21E+031.54E-027.17E-012.38E+016.92E+02 + 52M2 53.003.71E-036.14E-013.68E+011.28E+037.07E-032.57E-016.87E+001.61E+02 + 52M2 71.001.39E-031.51E-016.73E+001.81E+022.92E-038.08E-021.68E+003.09E+01 + 52M2 104.003.80E-042.48E-027.58E-011.46E+019.21E-041.80E-022.72E-013.64E+00 + 52M2 150.001.09E-044.53E-039.74E-021.38E+003.06E-044.36E-034.85E-024.83E-01 + 52M2 280.001.35E-052.78E-043.41E-032.89E-024.78E-054.11E-042.81E-031.72E-02 + 52M2 500.002.16E-062.48E-051.89E-041.05E-038.76E-065.03E-052.30E-049.45E-04 + 52M3 1.826.71E+011.95E+076.47E+102.69E+135.02E+011.24E+073.47E+119.53E+14 + 52M3 2.822.83E+012.14E+063.74E+091.24E+121.33E+011.39E+061.67E+102.32E+13 + 52M3 4.828.09E+001.43E+051.22E+082.85E+102.59E+009.56E+044.20E+082.70E+11 + 52M3 8.821.62E+006.79E+032.75E+064.13E+084.09E-014.68E+036.93E+062.04E+09 + 52M3 15.822.89E-013.57E+027.41E+046.99E+066.88E-022.54E+021.41E+052.09E+07 + 52M3 26.006.02E-022.93E+013.53E+032.20E+051.51E-022.15E+015.49E+034.75E+05 + 52M3 41.001.33E-022.99E+002.20E+029.23E+033.80E-032.25E+003.01E+021.63E+04 + 52M3 53.005.57E-038.28E-014.64E+011.55E+031.74E-036.34E-016.05E+012.55E+03 + 52M3 71.002.03E-031.93E-017.92E+002.04E+027.20E-041.51E-011.00E+013.19E+02 + 52M3 104.005.37E-042.90E-027.96E-011.45E+012.28E-042.36E-021.01E+002.26E+01 + 52M3 150.001.50E-044.81E-038.96E-021.18E+007.60E-054.07E-031.17E-011.91E+00 + 52M3 280.001.81E-052.43E-042.36E-031.78E-021.21E-052.21E-043.47E-033.43E-02 + 52M3 500.002.93E-061.82E-059.72E-054.52E-042.38E-061.71E-051.57E-041.03E-03 + 52M4 1.581.42E+025.62E+054.96E+109.32E+141.33E+013.35E+054.91E+096.77E+12 + 52M4 2.582.87E+014.56E+041.58E+091.31E+132.66E+002.85E+041.83E+081.72E+11 + 52M4 4.583.80E+002.42E+032.76E+079.37E+103.90E-011.59E+034.11E+062.36E+09 + 52M4 8.583.55E-019.60E+013.26E+054.53E+084.49E-026.64E+016.94E+042.26E+07 + 52M4 15.583.25E-024.29E+004.80E+033.04E+065.42E-033.22E+001.52E+032.85E+05 + 52M4 26.003.80E-032.86E-011.30E+024.35E+048.40E-042.39E-015.97E+016.90E+03 + 52M4 41.005.30E-042.50E-025.29E+001.03E+031.54E-042.37E-023.45E+002.59E+02 + 52M4 53.001.72E-046.30E-038.81E-011.28E+025.85E-056.45E-037.01E-014.13E+01 + 52M4 71.004.73E-051.31E-031.16E-011.21E+011.92E-051.47E-031.15E-015.16E+00 + 52M4 104.008.74E-061.69E-048.45E-035.74E-014.43E-062.14E-041.11E-023.51E-01 + 52M4 150.001.73E-062.43E-057.16E-043.24E-021.07E-063.39E-051.21E-032.76E-02 + 52M4 280.001.16E-079.82E-071.24E-052.84E-049.60E-081.53E-063.00E-054.02E-04 + 52M4 500.001.15E-085.88E-083.76E-074.47E-061.04E-089.23E-081.08E-069.31E-06 + 52M5 1.572.11E+027.53E+057.95E+101.41E+158.22E+003.85E+042.38E+101.92E+15 + 52M5 2.574.18E+015.99E+042.48E+091.92E+131.65E+003.30E+037.59E+082.36E+13 + 52M5 4.575.44E+003.13E+034.26E+071.34E+112.44E-011.88E+021.36E+071.43E+11 + 52M5 8.574.99E-011.22E+024.96E+056.31E+082.90E-028.24E+001.68E+055.65E+08 + 52M5 15.574.48E-025.34E+007.15E+034.11E+063.63E-034.28E-012.61E+033.17E+06 + 52M5 26.005.16E-033.47E-011.88E+025.65E+045.83E-043.42E-027.34E+014.00E+04 + 52M5 41.007.11E-042.95E-027.41E+001.29E+031.11E-043.66E-033.11E+008.77E+02 + 52M5 53.002.29E-047.28E-031.20E+001.54E+024.31E-051.05E-035.26E-011.05E+02 + 52M5 71.006.25E-051.47E-031.53E-011.38E+011.46E-052.53E-047.03E-029.65E+00 + 52M5 104.001.14E-051.83E-041.05E-026.09E-013.51E-064.04E-055.17E-034.48E-01 + 52M5 150.002.29E-062.52E-058.24E-043.12E-028.99E-077.13E-064.36E-042.49E-02 + 52M5 280.001.70E-079.60E-071.21E-052.16E-049.23E-084.11E-077.26E-062.07E-04 + 52M5 500.001.71E-086.10E-083.14E-072.62E-061.26E-083.49E-082.12E-072.91E-06 + 52N+ 50.007.04E-034.56E-012.79E+011.11E+032.72E-021.05E+004.17E+011.54E+03 + 52N+ 70.002.72E-039.50E-023.77E+001.06E+021.02E-022.47E-016.17E+001.51E+02 + 52N+ 100.009.89E-041.92E-024.73E-019.27E+003.65E-035.65E-028.94E-011.44E+01 + 52N+ 150.003.14E-043.46E-034.89E-026.29E-011.16E-031.14E-021.13E-011.16E+00 + 52N+ 200.001.41E-041.10E-031.06E-021.00E-015.27E-043.89E-032.83E-022.15E-01 + 52N+ 500.001.31E-054.58E-051.64E-046.14E-044.82E-051.75E-045.80E-041.94E-03 + 53K 34.173.24E+001.09E+017.32E+002.13E+001.48E+013.50E+021.39E+031.28E+03 + 53K 34.873.06E+001.13E+011.13E+016.49E+001.39E+013.22E+021.40E+031.91E+03 + 53K 36.172.78E+001.17E+011.83E+012.03E+011.25E+012.80E+021.38E+032.94E+03 + 53K 39.372.23E+001.17E+013.15E+017.15E+019.72E+002.03E+021.23E+034.49E+03 + 53K 43.171.75E+001.07E+013.92E+011.29E+027.41E+001.43E+029.93E+024.90E+03 + 53K 47.001.40E+009.29E+004.06E+011.63E+025.78E+001.04E+027.77E+024.52E+03 + 53K 53.001.01E+007.24E+003.67E+011.74E+024.06E+006.57E+015.23E+023.48E+03 + 53K 61.006.91E-015.14E+002.84E+011.50E+022.70E+003.86E+013.14E+022.25E+03 + 53K 73.004.22E-013.13E+001.80E+019.95E+011.60E+001.97E+011.56E+021.15E+03 + 53K 86.002.68E-011.93E+001.10E+016.04E+011.00E+001.07E+018.09E+015.77E+02 + 53K 103.001.62E-011.10E+006.03E+003.19E+015.98E-015.52E+003.86E+012.60E+02 + 53K 116.001.16E-017.50E-013.97E+002.02E+014.27E-013.59E+002.36E+011.51E+02 + 53K 133.007.93E-024.80E-012.41E+001.17E+012.91E-012.20E+001.34E+018.02E+01 + 53K 156.005.08E-022.84E-011.33E+006.02E+001.87E-011.25E+006.97E+003.82E+01 + 53K 185.003.17E-021.61E-016.99E-012.92E+001.17E-016.92E-013.48E+001.73E+01 + 53K 250.001.39E-025.99E-022.24E-018.11E-015.24E-022.51E-011.05E+004.33E+00 + 53K 335.006.47E-032.36E-027.66E-022.41E-012.44E-029.76E-023.42E-011.18E+00 + 53K 420.003.68E-031.20E-023.48E-029.83E-021.38E-024.85E-021.49E-014.50E-01 + 53K 530.002.12E-036.20E-031.63E-024.14E-027.75E-032.43E-026.60E-021.75E-01 + 53K 760.009.67E-042.47E-035.63E-031.23E-023.27E-038.78E-032.02E-024.46E-02 + 53K 1050.005.13E-041.19E-032.43E-034.74E-031.55E-033.73E-037.57E-031.46E-02 + 53K 1300.003.49E-047.63E-041.47E-032.67E-039.64E-042.18E-034.12E-037.38E-03 + 53K 1550.002.58E-045.39E-049.91E-041.72E-036.58E-041.42E-032.56E-034.34E-03 + 53L1 6.191.01E+012.88E+032.85E+055.36E+062.88E+021.98E+052.31E+076.57E+08 + 53L1 6.898.40E+001.57E+032.12E+056.78E+062.09E+021.19E+051.27E+074.50E+08 + 53L1 8.196.16E+005.64E+021.07E+055.27E+061.25E+025.22E+044.87E+062.04E+08 + 53L1 11.393.26E+005.99E+012.01E+041.40E+064.65E+011.11E+047.86E+053.43E+07 + 53L1 15.191.79E+005.22E+003.63E+032.89E+051.97E+012.95E+031.62E+056.45E+06 + 53L1 19.001.10E+001.30E+008.22E+027.18E+041.01E+011.07E+034.80E+041.70E+06 + 53L1 25.005.87E-011.57E+001.09E+021.11E+044.47E+003.14E+021.10E+043.28E+05 + 53L1 33.003.03E-011.42E+001.26E+011.42E+031.97E+009.31E+012.54E+036.19E+04 + 53L1 45.001.41E-018.65E-013.24E+001.28E+027.88E-012.47E+015.09E+029.75E+03 + 53L1 58.007.36E-024.88E-012.07E+002.26E+013.75E-018.58E+001.41E+022.19E+03 + 53L1 75.003.76E-022.49E-011.18E+007.11E+001.78E-013.02E+003.93E+014.95E+02 + 53L1 88.002.46E-021.58E-017.66E-014.10E+001.12E-011.60E+001.81E+011.99E+02 + 53L1 105.001.54E-029.38E-024.51E-012.26E+006.80E-028.01E-017.76E+007.39E+01 + 53L1 128.009.01E-035.12E-022.38E-011.12E+003.89E-023.76E-013.08E+002.48E+01 + 53L1 155.005.37E-032.81E-021.24E-015.48E-012.28E-021.84E-011.28E+008.88E+00 + 53L1 220.002.10E-039.32E-033.60E-021.39E-018.80E-035.25E-022.77E-011.45E+00 + 53L1 305.008.99E-043.38E-031.14E-023.82E-023.71E-031.73E-027.15E-022.93E-01 + 53L1 400.004.58E-041.51E-034.55E-031.35E-021.85E-037.20E-032.48E-028.40E-02 + 53L1 510.002.59E-047.70E-042.09E-035.57E-031.01E-033.41E-031.01E-022.93E-02 + 53L1 740.001.15E-043.00E-047.04E-041.61E-034.10E-041.16E-032.82E-036.63E-03 + 53L11000.006.35E-051.51E-043.21E-046.52E-042.03E-045.12E-041.09E-032.23E-03 + 53L11500.003.09E-056.60E-051.24E-042.21E-048.24E-051.83E-043.40E-045.96E-04 + 53L2 5.852.07E+011.81E+058.48E+075.11E+093.19E+018.35E+033.77E+056.56E+06 + 53L2 6.551.51E+011.02E+054.35E+073.23E+092.25E+015.35E+032.97E+058.48E+06 + 53L2 7.858.96E+004.12E+041.49E+071.29E+091.29E+012.62E+031.70E+057.01E+06 + 53L2 11.053.25E+007.43E+031.97E+061.75E+084.54E+006.76E+024.52E+042.27E+06 + 53L2 14.851.31E+001.70E+033.40E+052.73E+071.84E+002.09E+021.26E+046.13E+05 + 53L2 19.006.03E-015.00E+027.89E+045.55E+068.64E-017.82E+014.16E+031.83E+05 + 53L2 25.002.49E-011.29E+021.56E+049.15E+053.73E-012.62E+011.17E+034.43E+04 + 53L2 33.001.00E-013.29E+013.02E+031.45E+051.60E-018.67E+003.18E+021.01E+04 + 53L2 45.003.54E-027.23E+004.90E+021.85E+046.21E-022.53E+007.33E+011.85E+03 + 53L2 58.001.50E-022.12E+001.12E+023.43E+032.87E-029.28E-012.19E+014.56E+02 + 53L2 75.006.22E-036.17E-012.53E+016.28E+021.32E-023.37E-016.48E+001.10E+02 + 53L2 88.003.60E-032.88E-011.01E+012.20E+028.12E-031.80E-013.04E+004.54E+01 + 53L2 105.001.96E-031.25E-013.72E+006.95E+014.76E-039.05E-021.32E+001.71E+01 + 53L2 128.009.93E-044.97E-021.22E+001.93E+012.62E-034.20E-025.21E-015.78E+00 + 53L2 155.005.16E-042.05E-024.23E-015.71E+001.48E-032.01E-022.14E-012.04E+00 + 53L2 220.001.58E-044.22E-036.33E-026.42E-015.19E-045.31E-034.31E-023.13E-01 + 53L2 305.005.39E-051.01E-031.14E-029.00E-021.97E-041.58E-031.00E-025.71E-02 + 53L2 400.002.25E-053.23E-042.92E-031.88E-028.91E-055.88E-043.09E-031.46E-02 + 53L2 510.001.06E-051.20E-049.03E-044.90E-034.40E-052.48E-041.11E-034.47E-03 + 53L2 740.003.57E-062.88E-051.65E-047.05E-041.51E-056.86E-052.47E-047.98E-04 + 53L21000.001.53E-069.76E-064.58E-051.64E-046.45E-062.52E-057.77E-052.15E-04 + 53L21500.005.28E-072.54E-069.37E-062.74E-052.09E-066.92E-061.79E-054.16E-05 + 53L3 5.564.30E+013.82E+051.96E+081.28E+109.27E+002.46E+057.68E+082.43E+11 + 53L3 6.263.05E+012.10E+059.62E+077.63E+096.43E+001.36E+053.43E+089.72E+10 + 53L3 7.561.75E+018.04E+043.09E+072.81E+093.60E+005.30E+049.55E+072.28E+10 + 53L3 10.765.96E+001.34E+043.66E+063.35E+081.21E+009.11E+038.92E+061.54E+09 + 53L3 14.562.30E+002.91E+035.87E+054.78E+074.78E-012.02E+031.20E+061.56E+08 + 53L3 19.009.72E-017.56E+021.17E+058.19E+062.11E-015.36E+022.09E+052.12E+07 + 53L3 25.003.92E-011.89E+022.22E+041.29E+069.08E-021.37E+023.52E+042.77E+06 + 53L3 33.001.54E-014.67E+014.13E+031.95E+053.88E-023.45E+015.97E+033.63E+05 + 53L3 45.005.30E-029.83E+006.32E+022.32E+041.50E-027.44E+008.46E+023.87E+04 + 53L3 58.002.19E-022.76E+001.36E+024.05E+036.94E-032.13E+001.76E+026.36E+03 + 53L3 75.008.89E-037.63E-012.89E+016.89E+023.18E-036.04E-013.65E+011.05E+03 + 53L3 88.005.06E-033.44E-011.10E+012.29E+021.96E-032.77E-011.39E+013.48E+02 + 53L3 105.002.71E-031.43E-013.83E+006.80E+011.15E-031.18E-014.86E+001.04E+02 + 53L3 128.001.35E-035.39E-021.17E+001.75E+016.31E-044.53E-021.52E+002.74E+01 + 53L3 155.006.93E-042.11E-023.76E-014.74E+003.56E-041.82E-024.99E-017.71E+00 + 53L3 220.002.07E-043.90E-034.82E-024.46E-011.26E-043.50E-036.83E-027.97E-01 + 53L3 305.006.97E-058.40E-047.40E-035.16E-024.87E-057.79E-041.12E-021.03E-01 + 53L3 400.002.93E-052.46E-041.64E-039.10E-032.25E-052.32E-042.62E-031.98E-02 + 53L3 510.001.39E-058.59E-054.47E-042.04E-031.15E-058.13E-057.34E-044.73E-03 + 53L3 740.004.82E-061.91E-056.93E-052.37E-044.33E-061.78E-051.12E-045.75E-04 + 53L31000.002.23E-066.34E-061.76E-054.86E-052.06E-065.77E-062.64E-051.13E-04 + 53L31500.008.66E-071.72E-063.48E-067.36E-068.34E-071.54E-064.37E-061.43E-05 + 53M1 2.071.23E+014.13E+041.79E+061.69E+091.52E+039.22E+069.30E+092.25E+12 + 53M1 3.077.34E+007.94E+039.20E+054.50E+074.67E+021.33E+067.36E+081.46E+11 + 53M1 5.073.20E+007.62E+021.75E+059.92E+061.04E+021.16E+053.17E+074.43E+09 + 53M1 9.071.05E+002.93E+011.15E+041.02E+061.83E+017.19E+039.31E+058.16E+07 + 53M1 16.073.12E-016.37E-014.27E+024.14E+043.31E+004.99E+023.32E+041.78E+06 + 53M1 26.001.04E-013.90E-011.62E+011.74E+037.93E-015.68E+012.24E+037.80E+04 + 53M1 41.003.43E-022.08E-011.07E+006.43E+012.06E-017.77E+001.92E+024.43E+03 + 53M1 53.001.79E-021.18E-015.36E-011.06E+019.72E-022.62E+005.03E+019.19E+02 + 53M1 71.008.41E-035.58E-022.69E-012.13E+004.15E-027.83E-011.14E+011.60E+02 + 53M1 104.003.06E-031.86E-029.02E-024.84E-011.39E-021.71E-011.74E+001.75E+01 + 53M1 150.001.15E-036.05E-032.69E-021.23E-014.98E-034.24E-023.13E-012.29E+00 + 53M1 280.002.20E-048.61E-043.01E-031.06E-029.23E-044.64E-032.07E-029.20E-02 + 53M1 500.005.32E-051.60E-044.39E-041.19E-032.10E-047.25E-042.19E-036.51E-03 + 53M2 1.932.90E+019.38E+062.93E+101.17E+131.84E+023.20E+059.55E+071.19E+10 + 53M2 2.931.35E+011.16E+061.96E+096.38E+115.20E+014.90E+041.19E+071.68E+09 + 53M2 4.934.27E+008.51E+047.22E+071.68E+101.08E+015.05E+038.82E+051.09E+08 + 53M2 8.939.34E-014.37E+031.80E+062.72E+081.78E+004.06E+024.61E+044.16E+06 + 53M2 15.931.80E-012.46E+025.26E+045.04E+063.06E-013.70E+012.67E+031.62E+05 + 53M2 26.004.04E-022.20E+012.77E+031.77E+056.93E-025.04E+002.44E+021.01E+04 + 53M2 41.009.39E-032.38E+001.86E+028.04E+031.74E-028.07E-012.66E+017.67E+02 + 53M2 53.004.03E-036.88E-014.13E+011.43E+038.01E-032.90E-017.69E+001.80E+02 + 53M2 71.001.52E-031.69E-017.56E+002.03E+023.31E-039.11E-021.88E+003.45E+01 + 53M2 104.004.17E-042.78E-028.52E-011.64E+011.05E-032.04E-023.06E-014.08E+00 + 53M2 150.001.21E-045.10E-031.10E-011.55E+003.49E-044.94E-035.47E-025.42E-01 + 53M2 280.001.51E-053.14E-043.86E-033.27E-025.46E-054.68E-043.19E-031.95E-02 + 53M2 500.002.41E-062.81E-052.15E-041.19E-031.00E-055.75E-052.62E-041.07E-03 + 53M3 1.876.38E+011.85E+076.00E+102.41E+135.04E+011.24E+073.37E+119.05E+14 + 53M3 2.872.76E+012.15E+063.71E+091.19E+121.38E+011.46E+061.75E+102.40E+13 + 53M3 4.878.11E+001.50E+051.27E+082.90E+102.75E+001.04E+054.63E+082.98E+11 + 53M3 8.871.66E+007.29E+032.94E+064.35E+084.42E-015.25E+037.90E+062.33E+09 + 53M3 15.873.03E-013.89E+028.06E+047.52E+067.50E-022.89E+021.63E+052.42E+07 + 53M3 26.006.42E-023.26E+013.92E+032.42E+051.67E-022.48E+016.47E+035.62E+05 + 53M3 41.001.43E-023.32E+002.45E+021.02E+044.19E-032.60E+003.53E+021.92E+04 + 53M3 53.006.01E-039.20E-015.15E+011.71E+031.92E-037.32E-017.08E+012.98E+03 + 53M3 71.002.20E-032.14E-018.80E+002.25E+027.94E-041.74E-011.17E+013.72E+02 + 53M3 104.005.84E-043.23E-028.86E-011.61E+012.51E-042.71E-021.17E+002.62E+01 + 53M3 150.001.64E-045.35E-039.98E-021.31E+008.40E-054.67E-031.36E-012.22E+00 + 53M3 280.001.98E-052.71E-042.63E-031.98E-021.34E-052.52E-044.00E-033.95E-02 + 53M3 500.003.20E-062.03E-051.08E-045.04E-042.64E-061.94E-051.80E-041.19E-03 + 53M4 1.631.38E+025.39E+054.66E+108.59E+141.35E+013.37E+054.83E+096.44E+12 + 53M4 2.632.90E+014.64E+041.61E+091.33E+132.82E+003.05E+041.94E+081.78E+11 + 53M4 4.633.99E+002.57E+032.98E+071.02E+114.24E-011.77E+034.60E+062.60E+09 + 53M4 8.633.84E-011.05E+023.66E+055.13E+085.00E-027.59E+017.98E+042.58E+07 + 53M4 15.633.58E-024.77E+005.48E+033.51E+066.11E-033.74E+001.77E+033.30E+05 + 53M4 26.004.28E-033.25E-011.51E+025.14E+049.63E-042.82E-017.10E+018.18E+03 + 53M4 41.006.03E-042.87E-026.18E+001.22E+031.78E-042.80E-024.10E+003.07E+02 + 53M4 53.001.96E-047.24E-031.03E+001.51E+026.75E-057.62E-038.33E-014.90E+01 + 53M4 71.005.38E-051.51E-031.36E-011.43E+012.22E-051.73E-031.37E-016.13E+00 + 53M4 104.009.93E-061.96E-049.90E-036.79E-015.14E-062.53E-041.33E-024.17E-01 + 53M4 150.001.99E-062.83E-058.40E-043.84E-021.25E-064.02E-051.45E-033.28E-02 + 53M4 280.001.41E-071.15E-061.46E-053.36E-041.12E-071.82E-063.57E-054.79E-04 + 53M4 500.001.37E-086.99E-084.43E-075.32E-061.22E-081.10E-071.29E-061.11E-05 + 53M5 1.622.04E+027.19E+057.52E+101.31E+158.35E+003.84E+042.35E+101.85E+15 + 53M5 2.624.23E+016.07E+042.54E+091.96E+131.74E+003.49E+038.12E+082.52E+13 + 53M5 4.625.71E+003.31E+034.63E+071.46E+112.65E-012.06E+021.54E+071.63E+11 + 53M5 8.625.39E-011.33E+025.58E+057.14E+083.21E-029.25E+001.97E+056.72E+08 + 53M5 15.624.93E-025.90E+008.19E+034.74E+064.07E-034.86E-013.10E+033.85E+06 + 53M5 26.005.80E-033.92E-012.20E+026.67E+046.63E-043.94E-028.91E+014.95E+04 + 53M5 41.008.06E-043.35E-028.68E+001.52E+031.27E-044.23E-033.77E+001.08E+03 + 53M5 53.002.60E-048.29E-031.41E+001.82E+024.93E-051.21E-036.38E-011.29E+02 + 53M5 71.007.11E-051.68E-031.79E-011.63E+011.67E-052.93E-048.50E-021.18E+01 + 53M5 104.001.31E-052.09E-041.23E-027.18E-014.04E-064.67E-056.24E-035.47E-01 + 53M5 150.002.63E-062.89E-059.66E-043.68E-021.04E-068.25E-065.25E-043.03E-02 + 53M5 280.001.97E-071.11E-061.42E-052.55E-041.07E-074.76E-078.68E-062.50E-04 + 53M5 500.002.16E-086.81E-083.69E-073.08E-061.46E-084.05E-082.51E-073.51E-06 + 53N+ 50.007.63E-035.22E-013.24E+011.29E+033.12E-021.22E+004.97E+011.86E+03 + 53N+ 70.002.95E-031.08E-014.36E+001.23E+021.17E-022.87E-017.30E+001.81E+02 + 53N+ 100.001.07E-032.17E-025.46E-011.08E+014.18E-036.55E-021.05E+001.71E+01 + 53N+ 150.003.42E-043.87E-035.61E-027.28E-011.33E-031.32E-021.31E-011.36E+00 + 53N+ 200.001.53E-041.22E-031.21E-021.16E-016.02E-044.47E-033.28E-022.51E-01 + 53N+ 500.001.44E-055.06E-051.84E-046.97E-045.47E-051.99E-046.62E-042.23E-03 + 54K 35.562.99E+009.62E+006.11E+001.65E+001.45E+013.26E+021.24E+031.09E+03 + 54K 36.262.83E+009.93E+009.30E+004.96E+001.36E+013.02E+021.25E+031.61E+03 + 54K 37.562.58E+001.03E+011.50E+011.54E+011.22E+012.63E+021.24E+032.47E+03 + 54K 40.762.09E+001.03E+012.60E+015.48E+019.64E+001.93E+021.11E+033.80E+03 + 54K 44.561.65E+009.51E+003.27E+011.01E+027.42E+001.38E+029.09E+024.22E+03 + 54K 49.001.28E+008.17E+003.43E+011.33E+025.61E+009.61E+016.93E+023.88E+03 + 54K 55.009.42E-016.44E+003.12E+011.42E+024.00E+006.21E+014.74E+023.02E+03 + 54K 63.006.52E-014.64E+002.45E+011.23E+022.69E+003.72E+012.90E+022.00E+03 + 54K 75.004.05E-012.88E+001.59E+018.42E+011.63E+001.94E+011.48E+021.05E+03 + 54K 88.002.60E-011.80E+009.90E+005.24E+011.03E+001.07E+017.83E+015.40E+02 + 54K 105.001.59E-011.04E+005.54E+002.84E+016.20E-015.61E+003.81E+012.49E+02 + 54K 118.001.15E-017.19E-013.69E+001.83E+014.46E-013.67E+002.36E+011.47E+02 + 54K 135.007.90E-024.65E-012.27E+001.07E+013.06E-012.27E+001.36E+017.90E+01 + 54K 158.005.10E-022.78E-011.27E+005.63E+001.98E-011.30E+007.11E+003.81E+01 + 54K 185.003.30E-021.65E-017.06E-012.91E+001.28E-017.53E-013.75E+001.84E+01 + 54K 250.001.46E-026.18E-022.29E-018.19E-015.72E-022.73E-011.13E+004.63E+00 + 54K 335.006.78E-032.45E-027.88E-022.46E-012.66E-021.06E-013.69E-011.26E+00 + 54K 430.003.65E-031.16E-023.33E-029.27E-021.41E-024.90E-021.48E-014.39E-01 + 54K 540.002.14E-036.17E-031.60E-024.03E-028.04E-032.49E-026.68E-021.75E-01 + 54K 770.009.93E-042.52E-035.71E-031.24E-023.43E-039.17E-032.09E-024.59E-02 + 54K 1050.005.42E-041.26E-032.57E-035.01E-031.68E-034.04E-038.17E-031.57E-02 + 54K 1300.003.68E-048.08E-041.56E-032.83E-031.04E-032.36E-034.45E-037.96E-03 + 54K 1550.002.73E-045.71E-041.05E-031.82E-037.07E-041.53E-032.76E-034.67E-03 + 54L1 6.459.29E+002.58E+032.41E+054.19E+062.81E+021.84E+052.05E+075.52E+08 + 54L1 7.157.79E+001.45E+031.83E+055.42E+062.07E+021.12E+051.16E+073.86E+08 + 54L1 8.455.78E+005.42E+029.55E+044.39E+061.25E+025.09E+044.58E+061.81E+08 + 54L1 11.653.12E+006.35E+011.93E+041.26E+064.81E+011.13E+047.75E+053.25E+07 + 54L1 15.451.74E+006.28E+003.68E+032.77E+052.07E+013.07E+031.65E+056.36E+06 + 54L1 19.001.11E+001.40E+009.63E+027.84E+041.12E+011.20E+035.36E+041.87E+06 + 54L1 25.005.98E-011.35E+001.35E+021.26E+044.95E+003.52E+021.23E+043.61E+05 + 54L1 33.003.10E-011.30E+001.61E+011.68E+032.18E+001.04E+022.83E+036.82E+04 + 54L1 45.001.45E-018.26E-013.25E+001.57E+028.73E-012.76E+015.66E+021.08E+04 + 54L1 58.007.59E-024.76E-011.94E+002.65E+014.15E-019.57E+001.56E+022.42E+03 + 54L1 75.003.89E-022.47E-011.12E+007.39E+001.97E-013.36E+004.35E+015.46E+02 + 54L1 88.002.55E-021.58E-017.40E-014.10E+001.24E-011.77E+002.00E+012.20E+02 + 54L1 105.001.59E-029.45E-024.42E-012.23E+007.52E-028.88E-018.59E+008.14E+01 + 54L1 128.009.37E-035.20E-022.36E-011.11E+004.30E-024.16E-013.40E+002.73E+01 + 54L1 155.005.61E-032.87E-021.24E-015.48E-012.52E-022.04E-011.42E+009.76E+00 + 54L1 220.002.21E-039.61E-033.67E-021.41E-019.69E-035.79E-023.04E-011.59E+00 + 54L1 305.009.47E-043.52E-031.18E-023.95E-024.08E-031.90E-027.85E-023.21E-01 + 54L1 400.004.84E-041.59E-034.74E-031.41E-022.03E-037.90E-032.72E-029.20E-02 + 54L1 510.002.73E-048.10E-042.19E-035.86E-031.10E-033.74E-031.11E-023.20E-02 + 54L1 740.001.22E-043.17E-047.46E-041.70E-034.47E-041.27E-033.08E-037.23E-03 + 54L11000.006.74E-051.61E-043.41E-046.96E-042.21E-045.58E-041.19E-032.43E-03 + 54L11500.003.28E-057.03E-051.33E-042.37E-048.93E-051.99E-043.70E-046.49E-04 + 54L2 6.101.91E+011.61E+057.22E+074.11E+093.12E+017.76E+033.31E+055.31E+06 + 54L2 6.801.41E+019.34E+043.81E+072.66E+092.24E+015.07E+032.65E+057.02E+06 + 54L2 8.108.54E+003.88E+041.36E+071.11E+091.31E+012.54E+031.56E+056.03E+06 + 54L2 11.303.19E+007.33E+031.89E+061.61E+084.73E+006.81E+024.37E+042.09E+06 + 54L2 15.101.31E+001.73E+033.38E+052.63E+071.95E+002.15E+021.26E+045.89E+05 + 54L2 19.006.39E-015.52E+028.68E+045.99E+069.64E-018.64E+014.50E+031.93E+05 + 54L2 25.002.65E-011.42E+021.71E+049.94E+054.17E-012.90E+011.28E+034.74E+04 + 54L2 33.001.07E-013.63E+013.34E+031.59E+051.79E-019.62E+003.48E+021.08E+04 + 54L2 45.003.81E-028.01E+005.42E+022.03E+046.96E-022.81E+008.06E+012.01E+03 + 54L2 58.001.62E-022.35E+001.24E+023.77E+033.22E-021.03E+002.42E+014.98E+02 + 54L2 75.006.74E-036.84E-012.81E+016.93E+021.48E-023.76E-017.16E+001.21E+02 + 54L2 88.003.90E-033.20E-011.13E+012.43E+029.11E-032.01E-013.36E+004.99E+01 + 54L2 105.002.13E-031.39E-014.13E+007.69E+015.35E-031.01E-011.46E+001.89E+01 + 54L2 128.001.08E-035.52E-021.36E+002.14E+012.95E-034.69E-025.80E-016.38E+00 + 54L2 155.005.64E-042.29E-024.71E-016.34E+001.66E-032.25E-022.38E-012.26E+00 + 54L2 220.001.74E-044.71E-037.07E-027.16E-015.86E-045.97E-034.81E-023.48E-01 + 54L2 305.005.94E-051.13E-031.28E-021.01E-012.23E-041.77E-031.12E-026.38E-02 + 54L2 400.002.50E-053.62E-043.28E-032.11E-021.01E-046.63E-043.47E-031.63E-02 + 54L2 510.001.18E-051.35E-041.01E-035.50E-034.99E-052.80E-041.25E-035.02E-03 + 54L2 740.003.94E-063.24E-051.86E-047.93E-041.72E-057.77E-052.79E-048.99E-04 + 54L21000.001.69E-061.10E-055.17E-051.86E-047.32E-062.86E-058.80E-052.43E-04 + 54L21500.005.96E-072.85E-061.06E-053.10E-052.37E-067.87E-062.03E-054.71E-05 + 54L3 5.783.98E+013.43E+051.68E+081.04E+108.94E+002.30E+056.88E+082.08E+11 + 54L3 6.482.85E+011.92E+058.47E+076.37E+096.29E+001.30E+053.16E+088.64E+10 + 54L3 7.781.67E+017.60E+042.82E+072.44E+093.58E+005.23E+049.18E+072.12E+10 + 54L3 10.985.85E+001.33E+043.53E+063.10E+081.24E+009.38E+039.09E+061.53E+09 + 54L3 14.782.30E+002.95E+035.84E+054.62E+074.97E-012.13E+031.26E+061.62E+08 + 54L3 19.001.02E+008.29E+021.28E+058.79E+062.30E-016.11E+022.43E+052.46E+07 + 54L3 25.004.15E-012.08E+022.43E+041.39E+069.90E-021.56E+024.09E+043.21E+06 + 54L3 33.001.63E-015.13E+014.52E+032.11E+054.23E-023.94E+016.91E+034.19E+05 + 54L3 45.005.65E-021.08E+016.92E+022.52E+041.64E-028.48E+009.77E+024.45E+04 + 54L3 58.002.34E-023.02E+001.49E+024.41E+037.57E-032.43E+002.02E+027.31E+03 + 54L3 75.009.53E-038.38E-013.17E+017.51E+023.47E-036.88E-014.20E+011.21E+03 + 54L3 88.005.43E-033.78E-011.21E+012.50E+022.13E-033.15E-011.60E+013.99E+02 + 54L3 105.002.92E-031.57E-014.20E+007.43E+011.25E-031.34E-015.57E+001.19E+02 + 54L3 128.001.46E-035.93E-021.29E+001.91E+016.89E-045.15E-021.73E+003.13E+01 + 54L3 155.007.48E-042.32E-024.14E-015.19E+003.89E-042.06E-025.70E-018.79E+00 + 54L3 220.002.25E-044.28E-035.30E-024.89E-011.38E-043.95E-037.78E-029.07E-01 + 54L3 305.007.58E-059.24E-048.15E-035.67E-025.32E-058.78E-041.28E-021.17E-01 + 54L3 400.003.19E-052.71E-041.81E-031.00E-022.46E-052.61E-042.97E-032.25E-02 + 54L3 510.001.52E-059.45E-054.93E-042.24E-031.26E-059.11E-058.31E-045.36E-03 + 54L3 740.005.25E-062.10E-057.63E-052.61E-044.73E-061.98E-051.27E-046.50E-04 + 54L31000.002.42E-066.94E-061.93E-055.36E-052.25E-066.40E-062.97E-051.28E-04 + 54L31500.009.34E-071.89E-063.82E-068.10E-069.08E-071.69E-064.87E-061.60E-05 + 54M1 2.141.15E+013.89E+041.72E+061.45E+091.53E+039.00E+068.80E+092.05E+12 + 54M1 3.147.02E+007.85E+038.61E+054.59E+074.86E+021.37E+067.46E+081.44E+11 + 54M1 5.143.13E+008.02E+021.73E+059.17E+061.11E+021.25E+053.38E+074.64E+09 + 54M1 9.141.05E+003.39E+011.21E+041.02E+061.99E+017.93E+031.03E+068.87E+07 + 54M1 16.143.16E-017.55E-014.83E+024.43E+043.65E+005.57E+023.70E+041.96E+06 + 54M1 26.001.06E-013.57E-012.02E+012.02E+038.85E-016.44E+012.55E+038.83E+04 + 54M1 41.003.55E-022.00E-011.19E+007.84E+012.30E-018.77E+002.17E+024.99E+03 + 54M1 53.001.86E-021.16E-015.29E-011.28E+011.08E-012.95E+005.66E+011.03E+03 + 54M1 71.008.77E-035.57E-022.61E-012.36E+004.63E-028.80E-011.28E+011.79E+02 + 54M1 104.003.20E-031.89E-028.93E-024.93E-011.55E-021.92E-011.95E+001.95E+01 + 54M1 150.001.20E-036.22E-032.72E-021.25E-015.54E-034.74E-023.49E-012.55E+00 + 54M1 280.002.33E-048.99E-043.13E-031.10E-021.02E-035.15E-032.30E-021.02E-01 + 54M1 500.005.67E-051.70E-044.65E-041.26E-032.32E-048.02E-042.42E-037.19E-03 + 54M2 2.002.72E+018.76E+062.65E+101.02E+131.86E+023.11E+058.90E+071.04E+10 + 54M2 3.001.31E+011.15E+061.91E+096.01E+115.44E+015.02E+041.18E+071.58E+09 + 54M2 5.004.25E+008.84E+047.43E+071.69E+101.16E+015.37E+039.15E+051.09E+08 + 54M2 9.009.57E-014.68E+031.92E+062.85E+081.95E+004.42E+024.93E+044.35E+06 + 54M2 16.001.89E-012.68E+025.72E+045.42E+063.41E-014.08E+012.91E+031.73E+05 + 54M2 26.004.32E-022.45E+013.09E+031.96E+057.81E-025.65E+002.71E+021.12E+04 + 54M2 41.001.01E-022.66E+002.08E+028.94E+031.97E-029.07E-012.97E+018.49E+02 + 54M2 53.004.37E-037.69E-014.62E+011.59E+039.06E-033.26E-018.59E+001.99E+02 + 54M2 71.001.65E-031.89E-018.47E+002.26E+023.75E-031.03E-012.11E+003.84E+01 + 54M2 104.004.57E-043.12E-029.57E-011.83E+011.19E-032.30E-023.43E-014.55E+00 + 54M2 150.001.33E-045.73E-031.24E-011.73E+003.97E-045.59E-036.16E-026.07E-01 + 54M2 280.001.68E-053.55E-044.36E-033.69E-026.23E-055.32E-043.61E-032.20E-02 + 54M2 500.002.71E-063.18E-052.44E-041.35E-031.15E-056.56E-052.98E-041.22E-03 + 54M3 1.946.01E+011.74E+075.46E+102.11E+135.01E+011.21E+073.20E+118.37E+14 + 54M3 2.942.68E+012.14E+063.62E+091.13E+121.41E+011.52E+061.80E+102.44E+13 + 54M3 4.948.09E+001.56E+051.31E+082.92E+102.91E+001.13E+055.05E+083.24E+11 + 54M3 8.941.70E+007.80E+033.13E+064.55E+084.76E-015.85E+038.93E+062.64E+09 + 54M3 15.943.16E-014.23E+028.73E+048.04E+068.15E-023.27E+021.87E+052.78E+07 + 54M3 26.006.84E-023.61E+014.34E+032.66E+051.84E-022.87E+017.61E+036.62E+05 + 54M3 41.001.54E-023.68E+002.71E+021.12E+044.61E-033.00E+004.13E+022.25E+04 + 54M3 53.006.47E-031.02E+005.71E+011.89E+032.12E-038.43E-018.26E+013.49E+03 + 54M3 71.002.38E-032.38E-019.76E+002.48E+028.75E-042.00E-011.36E+014.33E+02 + 54M3 104.006.35E-043.58E-029.83E-011.78E+012.77E-043.12E-021.36E+003.04E+01 + 54M3 150.001.78E-045.94E-031.11E-011.44E+009.27E-055.36E-031.57E-012.56E+00 + 54M3 280.002.17E-053.01E-042.92E-032.20E-021.48E-052.88E-044.60E-034.55E-02 + 54M3 500.003.52E-062.26E-051.21E-045.61E-042.91E-062.19E-052.06E-041.36E-03 + 54M4 1.681.33E+025.16E+054.37E+107.89E+141.37E+013.39E+054.73E+096.11E+12 + 54M4 2.682.93E+014.71E+041.63E+091.35E+132.97E+003.25E+042.05E+081.84E+11 + 54M4 4.684.18E+002.73E+033.21E+071.11E+114.61E-011.96E+035.11E+062.85E+09 + 54M4 8.684.14E-011.14E+024.08E+055.78E+085.54E-028.64E+019.14E+042.93E+07 + 54M4 15.683.94E-025.30E+006.24E+034.03E+066.88E-034.32E+002.06E+033.82E+05 + 54M4 26.004.81E-033.69E-011.76E+026.07E+041.10E-033.32E-018.41E+019.67E+03 + 54M4 41.006.81E-043.27E-027.21E+001.44E+032.04E-043.29E-024.86E+003.63E+02 + 54M4 53.002.23E-048.29E-031.20E+001.78E+027.77E-058.97E-039.86E-015.79E+01 + 54M4 71.006.17E-051.73E-031.58E-011.68E+012.56E-052.04E-031.62E-017.25E+00 + 54M4 104.001.15E-052.26E-041.16E-028.01E-015.94E-062.98E-041.57E-024.94E-01 + 54M4 150.002.29E-063.28E-059.82E-044.54E-021.45E-064.74E-051.72E-033.89E-02 + 54M4 280.001.57E-071.35E-061.71E-053.98E-041.30E-072.15E-064.25E-055.70E-04 + 54M4 500.001.47E-088.24E-085.20E-076.30E-061.42E-081.30E-071.53E-061.33E-05 + 54M5 1.671.96E+026.77E+056.96E+101.18E+158.39E+003.76E+042.27E+101.74E+15 + 54M5 2.674.24E+016.08E+042.57E+091.96E+131.82E+003.63E+038.55E+082.64E+13 + 54M5 4.675.95E+003.47E+034.97E+071.57E+112.86E-012.24E+021.72E+071.84E+11 + 54M5 8.675.79E-011.43E+026.22E+058.01E+083.54E-021.03E+012.28E+057.93E+08 + 54M5 15.675.41E-026.50E+009.32E+035.42E+064.55E-035.50E-013.66E+034.63E+06 + 54M5 26.006.50E-034.41E-012.56E+027.84E+047.52E-044.53E-021.08E+026.10E+04 + 54M5 41.009.09E-043.79E-021.01E+011.78E+031.44E-044.86E-034.55E+001.33E+03 + 54M5 53.002.95E-049.41E-031.65E+002.13E+025.63E-051.39E-037.69E-011.58E+02 + 54M5 71.008.10E-051.91E-032.09E-011.92E+011.91E-053.37E-041.02E-011.44E+01 + 54M5 104.001.51E-052.39E-041.44E-028.44E-014.63E-065.38E-057.51E-036.66E-01 + 54M5 150.003.04E-063.32E-051.13E-034.32E-021.19E-069.52E-066.30E-043.67E-02 + 54M5 280.002.10E-071.28E-061.65E-053.00E-041.23E-075.50E-071.03E-053.02E-04 + 54M5 500.002.32E-087.75E-084.28E-073.62E-061.67E-084.68E-082.96E-074.21E-06 + 54N+ 50.008.25E-035.96E-013.73E+011.49E+033.58E-021.42E+005.90E+012.24E+03 + 54N+ 70.003.20E-031.23E-015.02E+001.42E+021.34E-023.34E-018.60E+002.16E+02 + 54N+ 100.001.17E-032.45E-026.27E-011.24E+014.80E-037.58E-021.23E+002.02E+01 + 54N+ 150.003.72E-044.32E-036.41E-028.37E-011.52E-031.52E-021.53E-011.59E+00 + 54N+ 200.001.67E-041.36E-031.38E-021.33E-016.88E-045.13E-033.79E-022.92E-01 + 54N+ 500.001.58E-055.59E-052.06E-047.90E-046.22E-052.27E-047.57E-042.55E-03 + 55K 36.982.76E+008.49E+005.14E+001.30E+001.41E+013.05E+021.11E+039.29E+02 + 55K 37.682.62E+008.76E+007.74E+003.84E+001.33E+012.83E+021.12E+031.36E+03 + 55K 38.982.39E+009.10E+001.24E+011.18E+011.20E+012.48E+021.11E+032.09E+03 + 55K 42.181.95E+009.17E+002.16E+014.23E+019.56E+001.84E+021.01E+033.23E+03 + 55K 45.981.56E+008.49E+002.74E+017.88E+017.42E+001.33E+028.33E+023.64E+03 + 55K 50.001.25E+007.48E+002.92E+011.04E+025.81E+009.67E+016.60E+023.45E+03 + 55K 56.009.22E-015.98E+002.72E+011.16E+024.17E+006.31E+014.59E+022.76E+03 + 55K 64.006.43E-014.36E+002.19E+011.05E+022.82E+003.82E+012.86E+021.87E+03 + 55K 76.004.03E-012.75E+001.46E+017.39E+011.72E+002.01E+011.49E+021.01E+03 + 55K 89.002.61E-011.74E+009.23E+004.71E+011.09E+001.12E+017.94E+015.30E+02 + 55K 106.001.61E-011.02E+005.25E+002.61E+016.62E-015.90E+003.91E+012.48E+02 + 55K 119.001.16E-017.08E-013.53E+001.70E+014.77E-013.88E+002.44E+011.48E+02 + 55K 136.008.03E-024.61E-012.20E+001.01E+013.28E-012.40E+001.41E+018.05E+01 + 55K 159.005.21E-022.77E-011.24E+005.40E+002.13E-011.38E+007.44E+003.92E+01 + 55K 185.003.44E-021.69E-017.11E-012.89E+001.40E-018.19E-014.03E+001.95E+01 + 55K 250.001.52E-026.36E-022.33E-018.27E-016.24E-022.97E-011.22E+004.94E+00 + 55K 335.007.09E-032.54E-028.10E-022.51E-012.90E-021.15E-013.98E-011.36E+00 + 55K 430.003.82E-031.21E-023.45E-029.56E-021.54E-025.32E-021.60E-014.71E-01 + 55K 540.002.24E-036.46E-031.67E-024.19E-028.73E-032.70E-027.22E-021.88E-01 + 55K 770.001.05E-032.66E-036.01E-031.31E-023.72E-039.93E-032.26E-024.94E-02 + 55K 1050.005.71E-041.33E-032.72E-035.29E-031.81E-034.36E-038.82E-031.70E-02 + 55K 1300.003.89E-048.54E-041.65E-033.00E-031.12E-032.54E-034.80E-038.57E-03 + 55K 1550.002.87E-046.05E-041.12E-031.94E-037.59E-041.65E-032.97E-035.03E-03 + 55L1 6.718.61E+002.34E+032.08E+053.38E+062.77E+021.72E+051.84E+074.74E+08 + 55L1 7.417.27E+001.35E+031.60E+054.43E+062.06E+021.07E+051.06E+073.37E+08 + 55L1 8.715.45E+005.23E+028.63E+043.72E+061.27E+024.99E+044.33E+061.64E+08 + 55L1 11.913.00E+006.70E+011.85E+041.15E+064.98E+011.15E+047.69E+053.10E+07 + 55L1 15.711.70E+007.44E+003.74E+032.66E+052.18E+013.21E+031.68E+056.30E+06 + 55L1 19.001.13E+001.67E+001.12E+038.51E+041.24E+011.35E+036.00E+042.05E+06 + 55L1 25.006.08E-011.18E+001.65E+021.41E+045.48E+003.95E+021.37E+043.97E+05 + 55L1 33.003.17E-011.18E+002.05E+011.97E+032.41E+001.17E+023.15E+037.53E+04 + 55L1 45.001.48E-017.87E-013.42E+001.92E+029.66E-013.08E+016.30E+021.19E+04 + 55L1 58.007.82E-024.64E-011.85E+003.14E+014.59E-011.07E+011.73E+022.67E+03 + 55L1 75.004.02E-022.44E-011.07E+007.89E+002.18E-013.73E+004.82E+016.02E+02 + 55L1 88.002.64E-021.58E-017.16E-014.18E+001.37E-011.97E+002.21E+012.42E+02 + 55L1 105.001.65E-029.51E-024.33E-012.23E+008.30E-029.85E-019.49E+008.96E+01 + 55L1 128.009.75E-035.27E-022.34E-011.11E+004.74E-024.60E-013.75E+003.01E+01 + 55L1 155.005.84E-032.93E-021.25E-015.50E-012.78E-022.25E-011.56E+001.07E+01 + 55L1 220.002.31E-039.91E-033.75E-021.44E-011.07E-026.38E-023.35E-011.74E+00 + 55L1 305.009.94E-043.66E-031.22E-024.08E-024.48E-032.09E-028.61E-023.51E-01 + 55L1 400.005.09E-041.66E-034.94E-031.47E-022.22E-038.67E-032.98E-021.01E-01 + 55L1 510.002.88E-048.52E-042.30E-036.16E-031.21E-034.09E-031.21E-023.50E-02 + 55L1 740.001.29E-043.36E-047.90E-041.81E-034.88E-041.38E-033.36E-037.89E-03 + 55L11000.007.14E-051.71E-043.63E-047.42E-042.41E-046.09E-041.30E-032.65E-03 + 55L11500.003.47E-057.49E-051.42E-042.54E-049.67E-052.17E-044.03E-047.06E-04 + 55L2 6.361.77E+011.45E+056.19E+073.36E+093.06E+017.25E+032.94E+054.40E+06 + 55L2 7.061.32E+018.56E+043.34E+072.22E+092.22E+014.81E+032.39E+055.89E+06 + 55L2 8.368.14E+003.66E+041.23E+079.63E+081.33E+012.47E+031.44E+055.23E+06 + 55L2 11.563.13E+007.23E+031.81E+061.49E+084.92E+006.87E+024.22E+041.93E+06 + 55L2 15.361.32E+001.75E+033.36E+052.53E+072.06E+002.22E+021.26E+045.66E+05 + 55L2 19.006.77E-016.09E+029.54E+046.46E+061.08E+009.54E+014.87E+032.04E+05 + 55L2 25.002.82E-011.57E+021.89E+041.08E+064.65E-013.21E+011.39E+035.06E+04 + 55L2 33.001.14E-014.01E+013.68E+031.73E+052.00E-011.06E+013.81E+021.17E+04 + 55L2 45.004.08E-028.85E+005.98E+022.22E+047.78E-023.12E+008.84E+012.18E+03 + 55L2 58.001.74E-022.60E+001.37E+024.14E+033.60E-021.15E+002.66E+015.44E+02 + 55L2 75.007.28E-037.58E-013.11E+017.62E+021.66E-024.18E-017.91E+001.32E+02 + 55L2 88.004.22E-033.55E-011.25E+012.68E+021.02E-022.24E-013.72E+005.48E+01 + 55L2 105.002.31E-031.54E-014.59E+008.49E+016.01E-031.13E-011.62E+002.08E+01 + 55L2 128.001.18E-036.14E-021.51E+002.37E+013.31E-035.24E-026.44E-017.05E+00 + 55L2 155.006.15E-042.54E-025.24E-017.02E+001.87E-032.52E-022.65E-012.50E+00 + 55L2 220.001.90E-045.25E-037.89E-027.96E-016.60E-046.69E-035.37E-023.86E-01 + 55L2 305.006.54E-051.26E-031.43E-021.12E-012.52E-041.99E-031.26E-027.11E-02 + 55L2 400.002.77E-054.04E-043.67E-032.36E-021.14E-047.47E-043.89E-031.83E-02 + 55L2 510.001.31E-051.51E-041.14E-036.17E-035.64E-053.16E-041.41E-035.63E-03 + 55L2 740.004.38E-063.63E-052.09E-048.92E-041.94E-058.78E-053.14E-041.01E-03 + 55L21000.001.89E-061.23E-055.82E-052.09E-048.31E-063.24E-059.94E-052.74E-04 + 55L21500.006.53E-073.21E-061.20E-053.51E-052.69E-068.93E-062.30E-055.33E-05 + 55L3 6.013.68E+013.08E+051.45E+088.57E+098.63E+002.16E+056.18E+081.80E+11 + 55L3 6.712.68E+011.76E+057.48E+075.35E+096.14E+001.25E+052.92E+087.70E+10 + 55L3 8.011.59E+017.18E+042.58E+072.13E+093.56E+005.15E+048.82E+071.98E+10 + 55L3 11.215.74E+001.31E+043.39E+062.87E+081.27E+009.64E+039.23E+061.52E+09 + 55L3 15.012.30E+002.99E+035.81E+054.45E+075.16E-012.25E+031.33E+061.67E+08 + 55L3 19.001.08E+009.08E+021.40E+059.43E+062.50E-016.97E+022.82E+052.85E+07 + 55L3 25.004.39E-012.27E+022.65E+041.50E+061.08E-011.78E+024.74E+043.71E+06 + 55L3 33.001.73E-015.62E+014.94E+032.28E+054.61E-024.48E+017.98E+034.83E+05 + 55L3 45.006.02E-021.18E+017.57E+022.73E+041.79E-029.66E+001.13E+035.12E+04 + 55L3 58.002.50E-023.31E+001.63E+024.79E+038.25E-032.76E+002.32E+028.39E+03 + 55L3 75.001.02E-029.18E-013.47E+018.17E+023.78E-037.82E-014.81E+011.38E+03 + 55L3 88.005.83E-034.15E-011.33E+012.72E+022.33E-033.58E-011.83E+014.56E+02 + 55L3 105.003.14E-031.73E-014.61E+008.10E+011.36E-031.52E-016.37E+001.36E+02 + 55L3 128.001.57E-036.50E-021.41E+002.09E+017.51E-045.84E-021.98E+003.57E+01 + 55L3 155.008.07E-042.55E-024.54E-015.67E+004.24E-042.33E-026.50E-011.00E+01 + 55L3 220.002.43E-044.70E-035.83E-025.36E-011.50E-044.47E-038.84E-021.03E+00 + 55L3 305.008.21E-051.02E-038.96E-036.22E-025.80E-059.89E-041.45E-021.32E-01 + 55L3 400.003.46E-052.98E-041.99E-031.10E-022.69E-052.93E-043.36E-032.54E-02 + 55L3 510.001.66E-051.04E-045.42E-042.46E-031.37E-051.02E-049.39E-046.06E-03 + 55L3 740.005.75E-062.30E-058.39E-052.87E-045.15E-062.20E-051.42E-047.34E-04 + 55L31000.002.60E-067.62E-062.13E-055.90E-052.45E-067.08E-063.33E-051.44E-04 + 55L31500.001.02E-062.06E-064.19E-068.90E-069.86E-071.86E-065.43E-061.80E-05 + 55M1 2.221.09E+013.66E+041.68E+061.24E+091.54E+038.75E+068.31E+091.87E+12 + 55M1 3.226.73E+007.76E+038.13E+054.63E+075.06E+021.40E+067.53E+081.41E+11 + 55M1 5.223.06E+008.39E+021.70E+058.55E+061.19E+021.33E+053.60E+074.84E+09 + 55M1 9.221.04E+003.88E+011.26E+041.02E+062.17E+018.72E+031.13E+069.62E+07 + 55M1 16.223.19E-019.23E-015.41E+024.72E+044.01E+006.21E+024.12E+042.17E+06 + 55M1 26.001.09E-013.28E-012.50E+012.32E+039.87E-017.30E+012.89E+039.99E+04 + 55M1 41.003.66E-021.91E-011.37E+009.48E+012.57E-019.90E+002.45E+025.62E+03 + 55M1 53.001.93E-021.13E-015.34E-011.55E+011.21E-013.32E+006.37E+011.16E+03 + 55M1 71.009.12E-035.54E-022.55E-012.66E+005.16E-029.87E-011.43E+012.00E+02 + 55M1 104.003.34E-031.92E-028.85E-025.08E-011.72E-022.14E-012.18E+002.18E+01 + 55M1 150.001.26E-036.38E-032.75E-021.27E-016.16E-035.28E-023.89E-012.84E+00 + 55M1 280.002.46E-049.40E-043.25E-031.14E-021.13E-035.71E-032.55E-021.13E-01 + 55M1 500.006.02E-051.80E-044.92E-041.34E-032.56E-048.85E-042.67E-037.93E-03 + 55M2 2.062.57E+018.26E+062.43E+109.02E+121.88E+023.06E+058.46E+079.41E+09 + 55M2 3.061.27E+011.14E+061.88E+095.75E+115.71E+015.17E+041.18E+071.52E+09 + 55M2 5.064.24E+009.21E+047.69E+071.72E+101.25E+015.73E+039.55E+051.11E+08 + 55M2 9.069.80E-015.02E+032.05E+063.01E+082.14E+004.82E+025.29E+044.57E+06 + 55M2 16.061.97E-012.93E+026.23E+045.84E+063.78E-014.49E+013.17E+031.86E+05 + 55M2 26.004.61E-022.73E+013.45E+032.17E+058.80E-026.33E+003.01E+021.23E+04 + 55M2 41.001.09E-022.96E+002.32E+029.92E+032.22E-021.02E+003.31E+019.39E+02 + 55M2 53.004.72E-038.58E-015.16E+011.77E+031.02E-023.66E-019.58E+002.21E+02 + 55M2 71.001.79E-032.12E-019.48E+002.52E+024.24E-031.15E-012.36E+004.26E+01 + 55M2 104.005.00E-043.50E-021.07E+002.05E+011.35E-032.59E-023.84E-015.08E+00 + 55M2 150.001.46E-046.42E-031.39E-011.94E+004.51E-046.31E-036.92E-026.79E-01 + 55M2 280.001.86E-053.99E-044.92E-034.15E-027.10E-056.03E-044.07E-032.47E-02 + 55M2 500.003.02E-063.60E-052.77E-041.53E-031.31E-057.47E-053.38E-041.38E-03 + 55M3 2.005.72E+011.64E+075.02E+101.88E+135.00E+011.20E+073.08E+117.85E+14 + 55M3 3.002.60E+012.13E+063.56E+091.08E+121.46E+011.58E+061.85E+102.50E+13 + 55M3 5.008.09E+001.62E+051.35E+082.95E+103.07E+001.23E+055.51E+083.53E+11 + 55M3 9.001.74E+008.33E+033.34E+064.77E+085.12E-016.51E+031.01E+072.98E+09 + 55M3 16.003.29E-014.59E+029.44E+048.59E+068.85E-023.70E+022.15E+053.20E+07 + 55M3 26.007.26E-023.99E+014.81E+032.92E+052.02E-023.30E+018.92E+037.79E+05 + 55M3 41.001.64E-024.07E+003.00E+021.23E+045.07E-033.45E+004.83E+022.63E+04 + 55M3 53.006.95E-031.13E+006.32E+012.07E+032.33E-039.70E-019.62E+014.06E+03 + 55M3 71.002.56E-032.63E-011.08E+012.73E+029.62E-042.30E-011.58E+015.04E+02 + 55M3 104.006.87E-043.97E-021.09E+001.96E+013.05E-043.58E-021.57E+003.52E+01 + 55M3 150.001.94E-046.59E-031.23E-011.60E+001.02E-046.14E-031.81E-012.95E+00 + 55M3 280.002.37E-053.34E-043.25E-032.44E-021.63E-053.28E-045.29E-035.22E-02 + 55M3 500.003.89E-062.51E-051.34E-046.23E-043.20E-062.48E-052.36E-041.56E-03 + 55M4 1.741.27E+024.83E+053.97E+106.96E+141.37E+013.33E+054.50E+095.60E+12 + 55M4 2.742.92E+014.71E+041.62E+091.33E+133.09E+003.40E+042.12E+081.85E+11 + 55M4 4.744.34E+002.86E+033.41E+071.18E+114.96E-012.15E+035.60E+063.07E+09 + 55M4 8.744.43E-011.24E+024.51E+056.44E+086.11E-029.77E+011.04E+053.29E+07 + 55M4 15.744.31E-025.85E+007.05E+034.60E+067.69E-034.96E+002.38E+034.38E+05 + 55M4 26.005.38E-034.18E-012.05E+027.13E+041.25E-033.89E-019.93E+011.14E+04 + 55M4 41.007.68E-043.72E-028.38E+001.69E+032.33E-043.86E-025.73E+004.28E+02 + 55M4 53.002.52E-049.46E-031.40E+002.10E+028.90E-051.05E-021.16E+006.82E+01 + 55M4 71.006.99E-051.98E-031.84E-011.98E+012.94E-052.40E-031.92E-018.55E+00 + 55M4 104.001.30E-052.60E-041.35E-029.42E-016.85E-063.50E-041.86E-025.83E-01 + 55M4 150.002.60E-063.78E-051.14E-035.34E-021.67E-065.58E-052.03E-034.60E-02 + 55M4 280.001.79E-071.56E-062.00E-054.69E-041.51E-072.53E-065.03E-056.75E-04 + 55M4 500.001.73E-089.50E-086.08E-077.43E-061.65E-081.53E-071.82E-061.57E-05 + 55M5 1.731.88E+026.38E+056.45E+101.06E+158.41E+003.69E+042.19E+101.63E+15 + 55M5 2.734.25E+016.08E+042.58E+091.96E+131.90E+003.77E+038.97E+082.76E+13 + 55M5 4.736.19E+003.62E+035.31E+071.69E+113.07E-012.43E+021.91E+072.07E+11 + 55M5 8.736.19E-011.54E+026.92E+058.95E+083.88E-021.15E+012.63E+059.32E+08 + 55M5 15.735.91E-027.13E+001.06E+046.19E+065.06E-036.20E-014.31E+035.55E+06 + 55M5 26.007.25E-034.95E-012.98E+029.20E+048.51E-045.20E-021.30E+027.49E+04 + 55M5 41.001.02E-034.28E-021.18E+012.09E+031.64E-045.58E-035.48E+001.62E+03 + 55M5 53.003.32E-041.06E-021.92E+002.50E+026.40E-051.60E-039.25E-011.93E+02 + 55M5 71.009.17E-052.17E-032.44E-012.25E+012.18E-053.87E-041.23E-011.76E+01 + 55M5 104.001.70E-052.73E-041.67E-029.89E-015.29E-066.18E-059.00E-038.07E-01 + 55M5 150.003.40E-063.79E-051.31E-035.07E-021.36E-061.09E-057.53E-044.44E-02 + 55M5 280.002.45E-071.48E-061.93E-053.51E-041.41E-076.34E-071.23E-053.63E-04 + 55M5 500.002.70E-089.01E-084.99E-074.24E-061.92E-085.39E-083.47E-075.03E-06 + 55N+ 50.008.97E-036.80E-014.29E+011.72E+034.14E-021.67E+007.03E+012.69E+03 + 55N+ 70.003.49E-031.39E-015.77E+001.64E+021.55E-023.90E-011.02E+012.57E+02 + 55N+ 100.001.28E-032.77E-027.20E-011.43E+015.54E-038.83E-021.44E+002.39E+01 + 55N+ 150.004.08E-044.85E-037.34E-029.62E-011.76E-031.76E-021.78E-011.87E+00 + 55N+ 200.001.84E-041.52E-031.57E-021.53E-017.93E-045.94E-034.41E-023.41E-01 + 55N+ 500.001.74E-056.22E-052.32E-048.99E-047.12E-052.61E-048.71E-042.95E-03 + 56K 38.442.55E+007.51E+004.34E+001.03E+001.38E+012.85E+029.95E+027.98E+02 + 56K 39.142.43E+007.74E+006.46E+002.99E+001.31E+012.65E+021.00E+031.16E+03 + 56K 40.442.22E+008.04E+001.03E+019.11E+001.18E+012.34E+029.96E+021.77E+03 + 56K 43.641.83E+008.14E+001.79E+013.28E+019.49E+001.76E+029.12E+022.75E+03 + 56K 47.441.47E+007.59E+002.30E+016.19E+017.42E+001.28E+027.64E+023.15E+03 + 56K 51.001.21E+006.84E+002.47E+018.14E+016.00E+009.74E+016.28E+023.05E+03 + 56K 57.009.03E-015.55E+002.37E+019.46E+014.34E+006.40E+014.44E+022.52E+03 + 56K 65.006.35E-014.10E+001.96E+018.85E+012.96E+003.91E+012.81E+021.75E+03 + 56K 77.004.00E-012.63E+001.33E+016.47E+011.81E+002.08E+011.49E+029.68E+02 + 56K 90.002.61E-011.68E+008.60E+004.23E+011.16E+001.17E+018.04E+015.20E+02 + 56K 107.001.62E-019.96E-014.98E+002.40E+017.05E-016.19E+004.01E+012.48E+02 + 56K 120.001.18E-016.96E-013.38E+001.59E+015.10E-014.09E+002.51E+011.49E+02 + 56K 137.008.16E-024.57E-012.13E+009.59E+003.51E-012.55E+001.46E+018.19E+01 + 56K 160.005.32E-022.77E-011.22E+005.18E+002.28E-011.47E+007.78E+004.03E+01 + 56K 185.003.57E-021.73E-017.16E-012.87E+001.53E-018.90E-014.33E+002.07E+01 + 56K 250.001.59E-026.55E-022.37E-018.33E-016.81E-023.22E-011.31E+005.27E+00 + 56K 335.007.42E-032.63E-028.33E-022.56E-013.16E-021.25E-014.29E-011.45E+00 + 56K 430.004.01E-031.26E-023.58E-029.86E-021.67E-025.76E-021.72E-015.05E-01 + 56K 540.002.36E-036.75E-031.74E-024.35E-029.47E-032.93E-027.78E-022.02E-01 + 56K 770.001.10E-032.79E-036.31E-031.37E-024.02E-031.07E-022.43E-025.31E-02 + 56K 1050.006.01E-041.40E-032.87E-035.59E-031.95E-034.71E-039.51E-031.83E-02 + 56K 1300.004.09E-049.03E-041.74E-033.18E-031.20E-032.74E-035.17E-039.22E-03 + 56K 1550.003.03E-046.40E-041.18E-032.05E-038.15E-041.78E-033.20E-035.42E-03 + 56L1 6.997.97E+002.11E+031.78E+052.71E+062.71E+021.61E+051.65E+074.04E+08 + 56L1 7.696.78E+001.24E+031.39E+053.60E+062.04E+021.02E+059.70E+062.93E+08 + 56L1 8.995.13E+005.02E+027.75E+043.13E+061.28E+024.87E+044.08E+061.47E+08 + 56L1 12.192.88E+007.00E+011.77E+041.03E+065.14E+011.17E+047.58E+052.94E+07 + 56L1 15.991.65E+008.66E+003.76E+032.53E+052.29E+013.33E+031.71E+056.20E+06 + 56L1 20.001.02E+001.55E+009.18E+026.68E+041.18E+011.20E+035.07E+041.65E+06 + 56L1 26.005.65E-011.06E+001.50E+021.21E+045.40E+003.72E+021.24E+043.45E+05 + 56L1 34.003.01E-011.05E+002.07E+011.84E+032.44E+001.15E+023.00E+036.93E+04 + 56L1 46.001.44E-017.19E-013.44E+001.96E+021.00E+003.13E+016.25E+021.15E+04 + 56L1 59.007.71E-024.34E-011.73E+003.35E+014.83E-011.10E+011.76E+022.66E+03 + 56L1 76.004.01E-022.33E-019.98E-018.10E+002.31E-013.93E+005.00E+016.14E+02 + 56L1 89.002.65E-021.52E-016.73E-014.16E+001.47E-012.09E+002.31E+012.50E+02 + 56L1 106.001.67E-029.29E-024.13E-012.18E+008.92E-021.05E+001.00E+019.35E+01 + 56L1 129.009.93E-035.21E-022.27E-011.08E+005.12E-024.94E-013.99E+003.17E+01 + 56L1 155.006.09E-032.99E-021.25E-015.53E-013.06E-022.48E-011.72E+001.18E+01 + 56L1 220.002.41E-031.02E-023.82E-021.47E-011.17E-027.02E-023.68E-011.91E+00 + 56L1 305.001.04E-033.80E-031.26E-024.21E-024.92E-032.29E-029.45E-023.85E-01 + 56L1 400.005.36E-041.73E-035.15E-031.53E-022.44E-039.51E-033.26E-021.10E-01 + 56L1 510.003.04E-048.94E-042.42E-036.48E-031.32E-034.48E-031.32E-023.82E-02 + 56L1 740.001.36E-043.55E-048.36E-041.92E-035.32E-041.51E-033.67E-038.61E-03 + 56L11000.007.57E-051.81E-043.87E-047.91E-042.62E-046.64E-041.41E-032.88E-03 + 56L11500.003.68E-057.98E-051.52E-042.72E-041.05E-042.36E-044.38E-047.68E-04 + 56L2 6.621.64E+011.30E+055.30E+072.74E+093.00E+016.76E+032.60E+053.64E+06 + 56L2 7.321.24E+017.83E+042.93E+071.85E+092.21E+014.56E+032.14E+054.94E+06 + 56L2 8.627.75E+003.45E+041.12E+078.31E+081.34E+012.40E+031.33E+054.53E+06 + 56L2 11.823.07E+007.11E+031.73E+061.36E+085.10E+006.90E+024.07E+041.77E+06 + 56L2 15.621.31E+001.77E+033.33E+052.43E+072.18E+002.29E+021.25E+045.42E+05 + 56L2 20.006.09E-015.21E+027.73E+044.99E+061.02E+008.58E+014.17E+031.67E+05 + 56L2 26.002.64E-011.43E+021.65E+049.03E+054.60E-013.03E+011.26E+034.41E+04 + 56L2 34.001.10E-013.83E+013.40E+031.55E+052.03E-011.05E+013.61E+021.07E+04 + 56L2 46.004.07E-028.78E+005.80E+022.10E+048.13E-023.17E+008.74E+012.10E+03 + 56L2 59.001.77E-022.64E+001.37E+024.06E+033.83E-021.19E+002.70E+015.39E+02 + 56L2 76.007.51E-037.87E-013.19E+017.68E+021.78E-024.41E-018.19E+001.34E+02 + 56L2 89.004.39E-033.72E-011.29E+012.74E+021.11E-022.38E-013.90E+005.65E+01 + 56L2 106.002.42E-031.64E-014.82E+008.81E+016.55E-031.21E-011.72E+002.17E+01 + 56L2 129.001.24E-036.56E-021.61E+002.49E+013.64E-035.67E-026.88E-017.44E+00 + 56L2 155.006.69E-042.82E-025.82E-017.78E+002.10E-032.81E-022.94E-012.76E+00 + 56L2 220.002.08E-045.84E-038.79E-028.84E-017.43E-047.49E-035.98E-024.29E-01 + 56L2 305.007.17E-051.41E-031.60E-021.25E-012.84E-042.24E-031.40E-027.92E-02 + 56L2 400.003.05E-054.52E-044.11E-032.63E-021.29E-048.40E-044.36E-032.04E-02 + 56L2 510.001.45E-051.69E-041.28E-036.90E-036.38E-053.56E-041.58E-036.30E-03 + 56L2 740.004.81E-064.07E-052.35E-041.00E-032.20E-059.92E-053.54E-041.14E-03 + 56L21000.002.12E-061.38E-056.55E-052.35E-049.42E-063.67E-051.12E-043.09E-04 + 56L21500.007.20E-073.61E-061.35E-053.95E-053.05E-061.01E-052.61E-056.03E-05 + 56L3 6.253.42E+012.77E+051.25E+087.07E+098.33E+002.03E+055.57E+081.56E+11 + 56L3 6.952.51E+011.62E+056.61E+074.50E+096.00E+001.20E+052.70E+086.87E+10 + 56L3 8.251.52E+016.78E+042.35E+071.86E+093.54E+005.07E+048.46E+071.84E+10 + 56L3 11.455.63E+001.29E+043.26E+062.66E+081.29E+009.89E+039.35E+061.51E+09 + 56L3 15.252.30E+003.02E+035.76E+054.28E+075.34E-012.37E+031.39E+061.72E+08 + 56L3 20.009.62E-017.67E+021.12E+057.18E+062.32E-016.14E+022.34E+052.24E+07 + 56L3 26.004.07E-012.04E+022.28E+041.24E+061.04E-011.67E+024.25E+043.20E+06 + 56L3 34.001.66E-015.29E+014.50E+032.01E+054.57E-024.40E+017.61E+034.47E+05 + 56L3 46.005.93E-021.16E+017.23E+022.55E+041.82E-029.84E+001.13E+035.01E+04 + 56L3 59.002.51E-023.33E+001.61E+024.62E+038.51E-032.88E+002.40E+028.51E+03 + 56L3 76.001.04E-029.41E-013.51E+018.10E+023.95E-038.32E-015.08E+011.44E+03 + 56L3 89.006.00E-034.29E-011.36E+012.74E+022.45E-033.85E-011.96E+014.82E+02 + 56L3 106.003.26E-031.81E-014.77E+008.26E+011.44E-031.64E-016.88E+001.45E+02 + 56L3 129.001.64E-036.86E-021.48E+002.16E+017.99E-046.36E-022.16E+003.86E+01 + 56L3 155.008.68E-042.79E-024.97E-016.18E+004.61E-042.64E-027.40E-011.14E+01 + 56L3 220.002.63E-045.16E-036.39E-025.85E-011.63E-045.04E-031.00E-011.17E+00 + 56L3 305.008.91E-051.11E-039.83E-036.81E-026.32E-051.11E-031.64E-021.50E-01 + 56L3 400.003.76E-053.26E-042.18E-031.20E-022.93E-053.28E-043.80E-032.87E-02 + 56L3 510.001.79E-051.14E-045.95E-042.70E-031.49E-051.14E-041.06E-036.85E-03 + 56L3 740.006.19E-062.52E-059.21E-053.16E-045.59E-062.45E-051.60E-048.27E-04 + 56L31000.002.82E-068.34E-062.33E-056.48E-052.66E-067.82E-063.73E-051.62E-04 + 56L31500.001.11E-062.24E-064.58E-069.77E-061.07E-062.04E-066.04E-062.02E-05 + 56M1 2.291.03E+013.45E+041.63E+061.06E+091.56E+038.50E+067.83E+091.71E+12 + 56M1 3.296.45E+007.66E+037.70E+054.63E+075.25E+021.44E+067.58E+081.38E+11 + 56M1 5.292.99E+008.76E+021.68E+058.00E+061.27E+021.42E+053.81E+075.03E+09 + 56M1 9.291.04E+004.40E+011.32E+041.01E+062.35E+019.56E+031.23E+061.04E+08 + 56M1 16.293.22E-011.14E+006.02E+025.01E+044.41E+006.90E+024.58E+042.39E+06 + 56M1 26.001.12E-013.04E-013.05E+012.64E+031.10E+008.25E+013.28E+031.13E+05 + 56M1 41.003.78E-021.83E-011.62E+001.14E+022.86E-011.11E+012.76E+026.31E+03 + 56M1 53.002.00E-021.11E-015.54E-011.88E+011.35E-013.73E+007.16E+011.30E+03 + 56M1 71.009.47E-035.51E-022.51E-013.04E+005.74E-021.11E+001.60E+012.24E+02 + 56M1 104.003.49E-031.94E-028.78E-025.31E-011.92E-022.39E-012.43E+002.42E+01 + 56M1 150.001.32E-036.54E-032.77E-021.31E-016.83E-035.88E-024.33E-013.15E+00 + 56M1 280.002.60E-049.80E-043.37E-031.19E-021.25E-036.33E-032.82E-021.25E-01 + 56M1 500.006.41E-051.90E-045.20E-041.42E-032.82E-049.77E-042.95E-038.73E-03 + 56M2 2.142.42E+017.72E+062.19E+107.87E+121.90E+022.97E+057.94E+078.34E+09 + 56M2 3.141.22E+011.13E+061.82E+095.41E+115.96E+015.28E+041.17E+071.44E+09 + 56M2 5.144.21E+009.52E+047.89E+071.72E+101.34E+016.07E+039.88E+051.11E+08 + 56M2 9.149.99E-015.37E+032.18E+063.15E+082.35E+005.23E+025.64E+044.77E+06 + 56M2 16.142.05E-013.18E+026.76E+046.26E+064.19E-014.94E+013.43E+031.99E+05 + 56M2 26.004.91E-023.04E+013.84E+032.40E+059.89E-027.09E+003.34E+021.35E+04 + 56M2 41.001.17E-023.30E+002.59E+021.10E+042.50E-021.14E+003.68E+011.04E+03 + 56M2 53.005.10E-039.56E-015.76E+011.96E+031.15E-024.10E-011.07E+012.44E+02 + 56M2 71.001.95E-032.36E-011.06E+012.80E+024.78E-031.29E-012.63E+004.73E+01 + 56M2 104.005.45E-043.91E-021.20E+002.28E+011.52E-032.91E-024.30E-015.65E+00 + 56M2 150.001.60E-047.20E-031.56E-012.17E+005.11E-047.11E-037.76E-027.59E-01 + 56M2 280.002.06E-054.49E-045.54E-034.67E-028.08E-056.83E-044.59E-032.78E-02 + 56M2 500.003.35E-064.06E-053.13E-041.72E-031.50E-058.49E-053.83E-041.56E-03 + 56M3 2.065.43E+011.55E+074.59E+101.67E+134.98E+011.18E+072.93E+117.30E+14 + 56M3 3.062.53E+012.11E+063.48E+091.03E+121.50E+011.63E+061.90E+102.53E+13 + 56M3 5.068.06E+001.67E+051.38E+082.97E+103.24E+001.32E+055.98E+083.83E+11 + 56M3 9.061.78E+008.88E+033.54E+064.98E+085.49E-017.23E+031.14E+073.36E+09 + 56M3 16.063.42E-014.97E+021.02E+059.16E+069.58E-024.17E+022.46E+053.67E+07 + 56M3 26.007.71E-024.41E+015.31E+033.20E+052.21E-023.79E+011.04E+049.14E+05 + 56M3 41.001.76E-024.50E+003.31E+021.35E+045.56E-033.96E+005.62E+023.07E+04 + 56M3 53.007.44E-031.25E+006.98E+012.28E+032.55E-031.11E+001.12E+024.73E+03 + 56M3 71.002.76E-032.91E-011.19E+013.01E+021.06E-032.64E-011.83E+015.84E+02 + 56M3 104.007.42E-044.39E-021.20E+002.16E+013.35E-044.10E-021.81E+004.06E+01 + 56M3 150.002.11E-047.29E-031.36E-011.76E+001.12E-047.01E-032.09E-013.40E+00 + 56M3 280.002.59E-053.70E-043.60E-032.70E-021.80E-053.73E-046.06E-035.99E-02 + 56M3 500.004.22E-062.77E-051.49E-046.90E-043.52E-062.80E-052.69E-041.78E-03 + 56M4 1.801.22E+024.56E+053.66E+106.27E+141.38E+013.31E+054.34E+095.24E+12 + 56M4 2.802.92E+014.72E+041.62E+091.32E+133.23E+003.58E+042.21E+081.88E+11 + 56M4 4.804.50E+003.00E+033.62E+071.26E+115.34E-012.36E+036.16E+063.32E+09 + 56M4 8.804.73E-011.34E+024.99E+057.18E+086.72E-021.10E+021.18E+053.69E+07 + 56M4 15.804.70E-026.45E+007.96E+035.24E+068.59E-035.69E+002.74E+035.01E+05 + 56M4 26.006.02E-034.72E-012.37E+028.36E+041.42E-034.54E-011.17E+021.34E+04 + 56M4 41.008.64E-044.22E-029.70E+001.98E+032.65E-044.52E-026.75E+005.02E+02 + 56M4 53.002.84E-041.08E-021.62E+002.46E+021.02E-041.23E-021.37E+008.01E+01 + 56M4 71.007.90E-052.27E-032.14E-012.32E+013.37E-052.81E-032.26E-011.00E+01 + 56M4 104.001.48E-052.98E-041.56E-021.10E+007.86E-064.11E-042.19E-026.86E-01 + 56M4 150.003.01E-064.36E-051.33E-036.26E-021.92E-066.55E-052.39E-035.42E-02 + 56M4 280.002.08E-071.81E-062.33E-055.51E-041.74E-072.97E-065.95E-057.97E-04 + 56M4 500.001.91E-081.11E-077.09E-078.75E-061.90E-081.80E-072.15E-061.86E-05 + 56M5 1.781.81E+026.00E+055.98E+109.58E+148.42E+003.61E+042.12E+101.53E+15 + 56M5 2.784.25E+016.07E+042.59E+091.95E+131.97E+003.91E+039.37E+082.86E+13 + 56M5 4.786.42E+003.77E+035.66E+071.80E+113.29E-012.62E+022.12E+072.32E+11 + 56M5 8.786.61E-011.65E+027.66E+059.97E+084.25E-021.27E+013.03E+051.09E+09 + 56M5 15.786.44E-027.79E+001.20E+047.04E+065.61E-036.96E-015.05E+036.62E+06 + 56M5 26.008.09E-035.54E-013.46E+021.08E+059.59E-045.94E-021.56E+029.17E+04 + 56M5 41.001.14E-034.81E-021.37E+012.44E+031.85E-046.37E-036.57E+001.98E+03 + 56M5 53.003.73E-041.20E-022.23E+002.92E+027.26E-051.82E-031.11E+002.35E+02 + 56M5 71.001.03E-042.45E-032.83E-012.63E+012.47E-054.42E-041.47E-012.13E+01 + 56M5 104.001.94E-053.10E-041.94E-021.15E+006.03E-067.08E-051.08E-029.76E-01 + 56M5 150.003.95E-064.32E-051.53E-035.92E-021.56E-061.25E-058.98E-045.35E-02 + 56M5 280.002.77E-071.68E-062.23E-054.11E-041.61E-077.27E-071.45E-054.35E-04 + 56M5 500.003.18E-081.03E-075.78E-074.94E-062.21E-086.20E-084.07E-076.00E-06 + 56N+ 50.009.79E-037.81E-014.98E+012.00E+034.80E-021.96E+008.40E+013.25E+03 + 56N+ 70.003.81E-031.60E-016.69E+001.90E+021.79E-024.57E-011.21E+013.09E+02 + 56N+ 100.001.40E-033.14E-028.32E-011.65E+016.41E-031.03E-011.71E+002.85E+01 + 56N+ 150.004.48E-045.47E-038.45E-021.11E+002.03E-032.05E-022.09E-012.21E+00 + 56N+ 200.002.02E-041.70E-031.80E-021.77E-019.15E-046.89E-035.14E-024.00E-01 + 56N+ 500.001.93E-056.93E-052.63E-041.03E-038.17E-053.00E-041.00E-033.41E-03 + 57K 39.922.36E+006.66E+003.67E+008.16E-011.36E+012.67E+028.96E+026.88E+02 + 57K 40.622.25E+006.86E+005.41E+002.33E+001.28E+012.49E+029.02E+029.89E+02 + 57K 41.922.07E+007.12E+008.60E+007.05E+001.17E+012.21E+028.98E+021.50E+03 + 57K 45.121.71E+007.23E+001.50E+012.54E+019.42E+001.68E+028.29E+022.35E+03 + 57K 48.921.39E+006.79E+001.94E+014.88E+017.43E+001.23E+027.01E+022.72E+03 + 57K 53.001.12E+006.07E+002.11E+016.68E+015.88E+009.13E+015.67E+022.65E+03 + 57K 59.008.46E-014.97E+002.03E+017.76E+014.30E+006.10E+014.06E+022.21E+03 + 57K 67.006.01E-013.72E+001.70E+017.35E+012.97E+003.79E+012.62E+021.57E+03 + 57K 79.003.85E-012.42E+001.18E+015.50E+011.84E+002.05E+011.41E+028.87E+02 + 57K 92.002.53E-011.57E+007.75E+003.68E+011.19E+001.17E+017.80E+014.87E+02 + 57K 109.001.59E-019.45E-014.57E+002.14E+017.32E-016.29E+003.95E+012.37E+02 + 57K 122.001.16E-016.67E-013.14E+001.43E+015.32E-014.19E+002.51E+011.45E+02 + 57K 139.008.13E-024.42E-012.00E+008.80E+003.69E-012.63E+001.48E+018.05E+01 + 57K 162.005.33E-022.70E-011.16E+004.84E+002.41E-011.53E+007.93E+004.02E+01 + 57K 190.003.45E-021.62E-016.53E-012.55E+001.56E-018.81E-014.17E+001.94E+01 + 57K 255.001.57E-026.33E-022.24E-017.74E-017.04E-023.27E-011.31E+005.14E+00 + 57K 340.007.47E-032.60E-028.12E-022.47E-013.31E-021.29E-014.37E-011.46E+00 + 57K 430.004.20E-031.31E-023.70E-021.01E-011.81E-026.24E-021.86E-015.41E-01 + 57K 540.002.47E-037.05E-031.81E-024.52E-021.03E-023.17E-028.39E-022.16E-01 + 57K 770.001.16E-032.93E-036.62E-031.44E-024.35E-031.16E-022.62E-025.71E-02 + 57K 1050.006.34E-041.48E-033.03E-035.90E-032.10E-035.09E-031.02E-021.96E-02 + 57K 1300.004.31E-049.54E-041.85E-033.36E-031.29E-032.96E-035.57E-039.92E-03 + 57K 1550.003.19E-046.76E-041.25E-032.18E-038.75E-041.92E-033.45E-035.83E-03 + 57L1 7.277.40E+001.92E+031.54E+052.19E+062.67E+021.51E+051.48E+073.47E+08 + 57L1 7.976.33E+001.16E+031.22E+052.95E+062.03E+029.75E+048.90E+062.56E+08 + 57L1 9.274.84E+004.83E+026.98E+042.65E+061.29E+024.76E+043.85E+061.32E+08 + 57L1 12.472.76E+007.29E+011.69E+049.34E+055.31E+011.18E+047.48E+052.79E+07 + 57L1 16.271.61E+009.94E+003.78E+032.41E+052.40E+013.46E+031.74E+056.10E+06 + 57L1 20.001.03E+001.96E+001.05E+037.21E+041.30E+011.35E+035.65E+041.81E+06 + 57L1 26.005.75E-019.58E-011.80E+021.35E+045.96E+004.16E+021.38E+043.79E+05 + 57L1 34.003.07E-019.58E-012.58E+012.12E+032.69E+001.28E+023.33E+037.62E+04 + 57L1 46.001.48E-016.82E-013.86E+002.35E+021.10E+003.49E+016.93E+021.26E+04 + 57L1 59.007.93E-024.21E-011.70E+003.99E+015.33E-011.23E+011.95E+022.92E+03 + 57L1 76.004.14E-022.30E-019.63E-018.98E+002.55E-014.36E+005.53E+016.75E+02 + 57L1 89.002.75E-021.52E-016.53E-014.39E+001.62E-012.31E+002.56E+012.74E+02 + 57L1 106.001.73E-029.32E-024.05E-012.23E+009.83E-021.16E+001.10E+011.03E+02 + 57L1 129.001.03E-025.27E-022.25E-011.09E+005.64E-025.46E-014.39E+003.48E+01 + 57L1 155.006.34E-033.04E-021.25E-015.59E-013.37E-022.74E-011.89E+001.29E+01 + 57L1 220.002.52E-031.05E-023.89E-021.50E-011.29E-027.73E-024.04E-012.09E+00 + 57L1 305.001.09E-033.94E-031.30E-024.36E-025.40E-032.52E-021.03E-014.21E-01 + 57L1 400.005.63E-041.81E-035.36E-031.60E-022.67E-031.04E-023.57E-021.20E-01 + 57L1 510.003.20E-049.39E-042.54E-036.81E-031.45E-034.91E-031.45E-024.17E-02 + 57L1 740.001.44E-043.75E-048.85E-042.03E-035.80E-041.65E-034.00E-039.38E-03 + 57L11000.008.01E-051.92E-044.11E-048.43E-042.85E-047.24E-041.54E-033.14E-03 + 57L11500.003.91E-058.49E-051.62E-042.91E-041.13E-042.56E-044.77E-048.34E-04 + 57L2 6.891.52E+011.17E+054.57E+072.25E+092.96E+016.34E+032.32E+053.04E+06 + 57L2 7.591.16E+017.20E+042.59E+071.55E+092.20E+014.34E+031.94E+054.17E+06 + 57L2 8.897.40E+003.26E+041.02E+077.21E+081.36E+012.33E+031.23E+053.93E+06 + 57L2 12.093.01E+007.00E+031.66E+061.26E+085.30E+006.94E+023.92E+041.63E+06 + 57L2 15.891.31E+001.79E+033.30E+052.33E+072.30E+002.35E+021.24E+045.19E+05 + 57L2 20.006.43E-015.74E+028.48E+045.37E+061.14E+009.45E+014.50E+031.76E+05 + 57L2 26.002.80E-011.57E+021.81E+049.77E+055.13E-013.34E+011.37E+034.69E+04 + 57L2 34.001.18E-014.22E+013.73E+031.68E+052.27E-011.16E+013.94E+021.15E+04 + 57L2 46.004.35E-029.69E+006.39E+022.29E+049.07E-023.51E+009.57E+012.27E+03 + 57L2 59.001.90E-022.92E+001.51E+024.44E+034.27E-021.32E+002.97E+015.87E+02 + 57L2 76.008.09E-038.70E-013.52E+018.43E+021.99E-024.90E-019.02E+001.47E+02 + 57L2 89.004.74E-034.12E-011.43E+013.01E+021.24E-022.65E-014.30E+006.19E+01 + 57L2 106.002.62E-031.81E-015.33E+009.70E+017.34E-031.35E-011.90E+002.38E+01 + 57L2 129.001.35E-037.27E-021.78E+002.75E+014.08E-036.32E-027.62E-018.19E+00 + 57L2 155.007.28E-043.13E-026.46E-018.59E+002.36E-033.13E-023.27E-013.04E+00 + 57L2 220.002.28E-046.49E-039.77E-029.80E-018.36E-048.38E-036.65E-024.75E-01 + 57L2 305.007.87E-051.57E-031.78E-021.39E-013.20E-042.51E-031.57E-028.80E-02 + 57L2 400.003.33E-055.04E-044.59E-032.93E-021.45E-049.43E-044.88E-032.27E-02 + 57L2 510.001.58E-051.89E-041.43E-037.71E-037.21E-054.00E-041.77E-037.04E-03 + 57L2 740.005.37E-064.56E-052.63E-041.12E-032.49E-051.12E-043.98E-041.27E-03 + 57L21000.002.33E-061.55E-057.36E-052.64E-041.07E-054.14E-051.27E-043.47E-04 + 57L21500.008.12E-074.05E-061.52E-054.46E-053.45E-061.15E-052.95E-056.80E-05 + 57L3 6.483.18E+012.51E+051.09E+085.88E+098.06E+001.92E+055.04E+081.36E+11 + 57L3 7.182.36E+011.49E+055.88E+073.82E+095.88E+001.15E+052.51E+086.17E+10 + 57L3 8.481.45E+016.42E+042.16E+071.63E+093.52E+005.01E+048.14E+071.72E+10 + 57L3 11.685.52E+001.27E+043.13E+062.46E+081.31E+001.01E+049.48E+061.49E+09 + 57L3 15.482.29E+003.05E+035.71E+054.12E+075.53E-012.49E+031.46E+061.77E+08 + 57L3 20.001.01E+008.38E+021.21E+057.68E+062.52E-016.97E+022.70E+052.59E+07 + 57L3 26.004.29E-012.23E+022.48E+041.33E+061.13E-011.89E+024.91E+043.68E+06 + 57L3 34.001.75E-015.78E+014.90E+032.16E+054.96E-024.99E+018.77E+035.13E+05 + 57L3 46.006.29E-021.27E+017.89E+022.75E+041.97E-021.12E+011.30E+035.74E+04 + 57L3 59.002.67E-023.64E+001.76E+025.00E+039.24E-033.27E+002.75E+029.72E+03 + 57L3 76.001.11E-021.03E+003.83E+018.79E+024.28E-039.43E-015.81E+011.64E+03 + 57L3 89.006.41E-034.69E-011.48E+012.98E+022.66E-034.36E-012.23E+015.49E+02 + 57L3 106.003.48E-031.97E-015.21E+008.98E+011.57E-031.86E-017.84E+001.66E+02 + 57L3 129.001.76E-037.51E-021.62E+002.35E+018.68E-047.20E-022.45E+004.39E+01 + 57L3 155.009.32E-043.06E-025.44E-016.74E+005.01E-042.98E-028.41E-011.29E+01 + 57L3 220.002.83E-045.65E-037.00E-026.39E-011.78E-045.67E-031.14E-011.32E+00 + 57L3 305.009.62E-051.22E-031.08E-027.44E-026.87E-051.25E-031.85E-021.69E-01 + 57L3 400.004.07E-053.57E-042.39E-031.32E-023.18E-053.68E-044.29E-033.25E-02 + 57L3 510.001.95E-051.24E-046.52E-042.96E-031.62E-051.27E-041.19E-037.72E-03 + 57L3 740.006.72E-062.75E-051.01E-043.46E-046.07E-062.72E-051.80E-049.31E-04 + 57L31000.003.07E-069.10E-062.55E-057.10E-052.88E-068.64E-064.18E-051.82E-04 + 57L31500.001.19E-062.44E-065.01E-061.07E-051.16E-062.24E-066.72E-062.26E-05 + 57M1 2.369.79E+003.33E+041.63E+069.42E+081.59E+038.43E+067.59E+091.61E+12 + 57M1 3.366.23E+007.67E+037.47E+054.72E+075.50E+021.49E+067.76E+081.38E+11 + 57M1 5.362.94E+009.20E+021.67E+057.63E+061.36E+021.53E+054.08E+075.30E+09 + 57M1 9.361.04E+004.98E+011.38E+041.02E+062.56E+011.05E+041.36E+061.13E+08 + 57M1 16.363.25E-011.42E+006.69E+025.32E+044.85E+007.68E+025.10E+042.64E+06 + 57M1 26.001.15E-012.87E-013.68E+013.00E+031.22E+009.33E+013.71E+031.27E+05 + 57M1 41.003.90E-021.74E-011.93E+001.35E+023.18E-011.25E+013.11E+027.09E+03 + 57M1 53.002.07E-021.08E-015.91E-012.26E+011.50E-014.19E+008.04E+011.45E+03 + 57M1 71.009.83E-035.47E-022.50E-013.53E+006.39E-021.24E+001.79E+012.50E+02 + 57M1 104.003.64E-031.96E-028.72E-025.63E-012.13E-022.67E-012.71E+002.70E+01 + 57M1 150.001.39E-036.69E-032.80E-021.35E-017.58E-036.54E-024.81E-013.50E+00 + 57M1 280.002.74E-041.02E-033.49E-031.24E-021.39E-037.01E-033.12E-021.38E-01 + 57M1 500.006.79E-052.01E-045.49E-041.50E-033.11E-041.08E-033.25E-039.62E-03 + 57M2 2.202.29E+017.32E+062.03E+107.06E+121.94E+022.94E+057.59E+077.59E+09 + 57M2 3.201.18E+011.12E+061.79E+095.18E+116.25E+015.44E+041.17E+071.39E+09 + 57M2 5.204.19E+009.90E+048.14E+071.74E+101.44E+016.46E+031.03E+061.13E+08 + 57M2 9.201.02E+005.74E+032.32E+063.31E+082.57E+005.68E+026.03E+045.00E+06 + 57M2 16.202.14E-013.46E+027.33E+046.72E+064.64E-015.43E+013.73E+032.13E+05 + 57M2 26.005.23E-023.37E+014.27E+032.66E+051.11E-017.92E+003.71E+021.49E+04 + 57M2 41.001.26E-023.67E+002.88E+021.22E+042.81E-021.27E+004.08E+011.14E+03 + 57M2 53.005.50E-031.06E+006.41E+012.17E+031.30E-024.59E-011.19E+012.69E+02 + 57M2 71.002.11E-032.63E-011.18E+013.11E+025.39E-031.45E-012.93E+005.23E+01 + 57M2 104.005.94E-044.36E-021.34E+002.54E+011.72E-033.27E-024.80E-016.27E+00 + 57M2 150.001.75E-048.05E-031.74E-012.43E+005.78E-048.00E-038.69E-028.46E-01 + 57M2 280.002.27E-055.04E-046.23E-035.24E-029.18E-057.72E-045.17E-033.12E-02 + 57M2 500.003.73E-064.57E-053.53E-041.94E-031.71E-059.64E-054.34E-041.76E-03 + 57M3 2.125.18E+011.47E+074.26E+101.50E+134.98E+011.17E+072.84E+116.91E+14 + 57M3 3.122.46E+012.10E+063.42E+099.87E+111.54E+011.70E+061.96E+102.59E+13 + 57M3 5.128.04E+001.74E+051.43E+083.00E+103.41E+001.43E+056.50E+084.16E+11 + 57M3 9.121.81E+009.46E+033.76E+065.21E+085.88E-018.02E+031.28E+073.79E+09 + 57M3 16.123.55E-015.37E+021.10E+059.76E+061.04E-014.69E+022.81E+054.20E+07 + 57M3 26.008.16E-024.86E+015.86E+033.51E+052.42E-024.35E+011.22E+041.07E+06 + 57M3 41.001.87E-024.96E+003.65E+021.48E+046.08E-034.54E+006.54E+023.57E+04 + 57M3 53.007.96E-031.38E+007.70E+012.50E+032.80E-031.28E+001.30E+025.49E+03 + 57M3 71.002.96E-033.21E-011.32E+013.30E+021.16E-033.02E-012.12E+016.76E+02 + 57M3 104.008.01E-044.85E-021.33E+002.37E+013.67E-044.69E-022.09E+004.69E+01 + 57M3 150.002.28E-048.06E-031.50E-011.94E+001.23E-048.00E-032.40E-013.91E+00 + 57M3 280.002.81E-054.10E-043.98E-032.98E-021.97E-054.24E-046.93E-036.85E-02 + 57M3 500.004.62E-063.07E-051.65E-047.63E-043.86E-063.16E-053.06E-042.03E-03 + 57M4 1.851.17E+024.37E+053.43E+105.76E+141.39E+013.31E+054.24E+094.99E+12 + 57M4 2.852.93E+014.77E+041.64E+091.33E+133.38E+003.78E+042.31E+081.94E+11 + 57M4 4.854.67E+003.15E+033.85E+071.35E+115.74E-012.60E+036.78E+063.61E+09 + 57M4 8.855.05E-011.45E+025.51E+058.01E+087.38E-021.25E+021.33E+054.15E+07 + 57M4 15.855.12E-027.09E+008.96E+035.96E+069.56E-036.51E+003.16E+035.73E+05 + 57M4 26.006.68E-035.31E-012.74E+029.77E+041.61E-035.30E-011.37E+021.57E+04 + 57M4 41.009.68E-044.78E-021.12E+012.32E+033.02E-045.27E-027.92E+005.88E+02 + 57M4 53.003.20E-041.22E-021.87E+002.87E+021.16E-041.44E-021.61E+009.38E+01 + 57M4 71.008.97E-052.58E-032.47E-012.71E+013.85E-053.28E-032.65E-011.18E+01 + 57M4 104.001.68E-053.41E-041.81E-021.29E+009.00E-064.80E-042.57E-028.05E-01 + 57M4 150.003.37E-065.00E-051.54E-037.32E-022.21E-067.67E-052.81E-036.36E-02 + 57M4 280.002.36E-072.08E-062.70E-056.45E-042.00E-073.49E-067.00E-059.38E-04 + 57M4 500.002.19E-081.29E-078.23E-071.02E-052.19E-082.11E-072.54E-062.20E-05 + 57M5 1.831.75E+025.71E+055.64E+108.86E+148.50E+003.58E+042.08E+101.47E+15 + 57M5 2.834.26E+016.09E+042.63E+091.97E+132.06E+004.08E+039.89E+083.01E+13 + 57M5 4.836.66E+003.94E+036.06E+071.93E+113.53E-012.84E+022.36E+072.60E+11 + 57M5 8.837.05E-011.77E+028.49E+051.11E+094.64E-021.41E+013.48E+051.27E+09 + 57M5 15.837.00E-028.51E+001.35E+048.00E+066.21E-037.81E-015.91E+037.88E+06 + 57M5 26.008.97E-036.19E-014.00E+021.26E+051.08E-036.77E-021.86E+021.12E+05 + 57M5 41.001.28E-035.40E-021.58E+012.84E+032.09E-047.26E-037.86E+002.40E+03 + 57M5 53.004.18E-041.35E-022.58E+003.40E+028.21E-052.08E-031.33E+002.84E+02 + 57M5 71.001.16E-042.77E-033.28E-013.06E+012.80E-055.04E-041.76E-012.58E+01 + 57M5 104.002.18E-053.50E-042.25E-021.35E+006.85E-068.08E-051.28E-021.17E+00 + 57M5 150.004.47E-064.90E-051.77E-036.89E-021.77E-061.43E-051.07E-036.42E-02 + 57M5 280.003.33E-071.92E-062.59E-054.78E-041.84E-078.32E-071.72E-055.20E-04 + 57M5 500.003.56E-081.18E-076.66E-075.76E-062.51E-087.09E-084.76E-077.13E-06 + 57N+ 50.001.05E-028.84E-015.69E+012.30E+035.42E-022.25E+009.86E+013.87E+03 + 57N+ 70.004.08E-031.80E-017.63E+002.18E+022.03E-025.23E-011.41E+013.64E+02 + 57N+ 100.001.50E-033.52E-029.47E-011.89E+017.23E-031.18E-011.97E+003.33E+01 + 57N+ 150.004.81E-046.06E-039.58E-021.27E+002.29E-032.33E-022.39E-012.55E+00 + 57N+ 200.002.17E-041.87E-032.03E-022.01E-011.03E-037.80E-035.86E-024.60E-01 + 57N+ 500.002.09E-057.56E-052.91E-041.15E-039.14E-053.36E-041.13E-033.85E-03 + 58K 41.442.19E+005.90E+003.09E+006.36E-011.33E+012.51E+028.07E+025.91E+02 + 58K 42.142.09E+006.08E+004.53E+001.80E+001.26E+012.35E+028.14E+028.44E+02 + 58K 43.441.93E+006.30E+007.15E+005.43E+001.15E+012.08E+028.10E+021.28E+03 + 58K 46.641.61E+006.43E+001.25E+011.98E+019.36E+001.60E+027.53E+022.01E+03 + 58K 50.441.31E+006.08E+001.63E+013.84E+017.44E+001.19E+026.44E+022.36E+03 + 58K 54.001.10E+005.56E+001.78E+015.19E+016.09E+009.21E+015.40E+022.35E+03 + 58K 60.008.29E-014.61E+001.77E+016.31E+014.48E+006.21E+013.93E+022.02E+03 + 58K 68.005.93E-013.50E+001.51E+016.20E+013.11E+003.89E+012.57E+021.47E+03 + 58K 80.003.82E-012.31E+001.08E+014.81E+011.94E+002.12E+011.41E+028.52E+02 + 58K 93.002.54E-011.52E+007.21E+003.30E+011.26E+001.22E+017.89E+014.76E+02 + 58K 110.001.60E-019.23E-014.33E+001.96E+017.80E-016.60E+004.05E+012.36E+02 + 58K 123.001.18E-016.55E-013.00E+001.33E+015.69E-014.41E+002.58E+011.45E+02 + 58K 140.008.25E-024.37E-011.93E+008.31E+003.95E-012.78E+001.53E+018.18E+01 + 58K 163.005.44E-022.70E-011.13E+004.63E+002.59E-011.63E+008.27E+004.12E+01 + 58K 190.003.58E-021.65E-016.55E-012.53E+001.70E-019.56E-014.47E+002.06E+01 + 58K 255.001.63E-026.50E-022.28E-017.78E-017.67E-023.55E-011.40E+005.48E+00 + 58K 340.007.80E-032.69E-028.33E-022.52E-013.60E-021.40E-014.71E-011.55E+00 + 58K 430.004.39E-031.36E-023.82E-021.04E-011.97E-026.76E-022.00E-015.80E-01 + 58K 540.002.59E-037.35E-031.88E-024.68E-021.11E-023.43E-029.03E-022.32E-01 + 58K 770.001.22E-033.08E-036.95E-031.50E-024.70E-031.26E-022.83E-026.13E-02 + 58K 1050.006.66E-041.56E-033.19E-036.22E-032.27E-035.49E-031.10E-022.11E-02 + 58K 1300.004.53E-041.01E-031.95E-033.56E-031.39E-033.19E-036.00E-031.07E-02 + 58K 1550.003.35E-047.15E-041.33E-032.31E-039.39E-042.07E-033.72E-036.26E-03 + 58L1 7.556.87E+001.75E+031.33E+051.74E+062.63E+021.42E+051.34E+072.97E+08 + 58L1 8.255.91E+001.07E+031.07E+052.39E+062.02E+029.32E+048.17E+062.23E+08 + 58L1 9.554.56E+004.65E+026.29E+042.23E+061.30E+024.65E+043.63E+061.18E+08 + 58L1 12.752.65E+007.56E+011.61E+048.41E+055.49E+011.20E+047.37E+052.64E+07 + 58L1 16.551.56E+001.13E+013.79E+032.29E+052.52E+013.59E+031.76E+055.99E+06 + 58L1 20.001.04E+002.55E+001.20E+037.72E+041.43E+011.51E+036.29E+041.97E+06 + 58L1 26.005.83E-018.98E-012.13E+021.49E+046.58E+004.66E+021.53E+044.15E+05 + 58L1 34.003.14E-018.69E-013.19E+012.42E+032.97E+001.43E+023.70E+038.36E+04 + 58L1 46.001.51E-016.44E-014.46E+002.78E+021.22E+003.89E+017.68E+021.39E+04 + 58L1 59.008.15E-024.08E-011.72E+004.76E+015.89E-011.36E+012.16E+023.21E+03 + 58L1 76.004.27E-022.27E-019.35E-011.01E+012.82E-014.83E+006.11E+017.41E+02 + 58L1 89.002.84E-021.51E-016.36E-014.72E+001.79E-012.56E+002.82E+013.01E+02 + 58L1 106.001.80E-029.34E-023.97E-012.31E+001.08E-011.29E+001.22E+011.13E+02 + 58L1 129.001.07E-025.32E-022.23E-011.11E+006.22E-026.03E-014.83E+003.81E+01 + 58L1 155.006.60E-033.09E-021.25E-015.68E-013.72E-023.02E-012.08E+001.42E+01 + 58L1 220.002.63E-031.08E-023.96E-021.54E-011.42E-028.50E-024.43E-012.29E+00 + 58L1 305.001.15E-034.08E-031.34E-024.51E-025.93E-032.77E-021.13E-014.60E-01 + 58L1 400.005.92E-041.89E-035.59E-031.67E-022.93E-031.14E-023.90E-021.31E-01 + 58L1 510.003.38E-049.85E-042.66E-037.17E-031.58E-035.37E-031.58E-024.55E-02 + 58L1 740.001.53E-043.96E-049.37E-042.16E-036.33E-041.80E-034.37E-031.02E-02 + 58L11000.008.48E-052.04E-044.37E-048.98E-043.10E-047.89E-041.68E-033.41E-03 + 58L11500.004.13E-059.03E-051.73E-043.11E-041.22E-042.78E-045.18E-049.07E-04 + 58L2 7.161.41E+011.06E+053.95E+071.85E+092.91E+015.95E+032.07E+052.49E+06 + 58L2 7.861.09E+016.63E+042.29E+071.30E+092.19E+014.13E+031.74E+053.49E+06 + 58L2 9.167.06E+003.08E+049.28E+066.24E+081.37E+012.27E+031.13E+053.40E+06 + 58L2 12.362.94E+006.88E+031.59E+061.15E+085.50E+006.97E+023.77E+041.49E+06 + 58L2 16.161.31E+001.81E+033.26E+052.23E+072.43E+002.42E+021.23E+044.96E+05 + 58L2 20.006.79E-016.31E+029.28E+045.76E+061.27E+001.04E+024.84E+031.84E+05 + 58L2 26.002.97E-011.73E+021.98E+041.06E+065.71E-013.68E+011.48E+034.98E+04 + 58L2 34.001.25E-014.64E+014.10E+031.82E+052.53E-011.28E+014.29E+021.24E+04 + 58L2 46.004.65E-021.07E+017.03E+022.50E+041.01E-013.88E+001.05E+022.46E+03 + 58L2 59.002.03E-023.22E+001.66E+024.85E+034.77E-021.46E+003.25E+016.37E+02 + 58L2 76.008.70E-039.60E-013.88E+019.24E+022.23E-025.43E-019.91E+001.60E+02 + 58L2 89.005.11E-034.55E-011.58E+013.31E+021.39E-022.94E-014.73E+006.76E+01 + 58L2 106.002.84E-032.00E-015.89E+001.07E+028.21E-031.49E-012.09E+002.61E+01 + 58L2 129.001.46E-038.05E-021.97E+003.03E+014.57E-037.03E-028.42E-019.00E+00 + 58L2 155.007.91E-043.47E-027.16E-019.49E+002.65E-033.49E-023.62E-013.35E+00 + 58L2 220.002.48E-047.20E-031.09E-011.09E+009.40E-049.36E-037.39E-025.25E-01 + 58L2 305.008.59E-051.74E-031.99E-021.54E-013.61E-042.81E-031.75E-029.77E-02 + 58L2 400.003.66E-055.62E-045.13E-033.27E-021.64E-041.06E-035.45E-032.53E-02 + 58L2 510.001.75E-052.11E-041.60E-038.61E-038.14E-054.50E-041.98E-037.86E-03 + 58L2 740.005.94E-065.09E-052.95E-041.26E-032.82E-051.26E-044.47E-041.43E-03 + 58L21000.002.57E-061.74E-058.27E-052.97E-041.21E-054.68E-051.42E-043.90E-04 + 58L21500.009.10E-074.53E-061.71E-055.01E-053.91E-061.30E-053.33E-057.67E-05 + 58L3 6.722.96E+012.28E+059.48E+074.88E+097.80E+001.81E+054.58E+081.19E+11 + 58L3 7.422.23E+011.38E+055.23E+073.23E+095.75E+001.11E+052.34E+085.54E+10 + 58L3 8.721.39E+016.08E+041.98E+071.42E+093.50E+004.94E+047.83E+071.60E+10 + 58L3 11.925.41E+001.25E+043.01E+062.28E+081.34E+001.04E+049.59E+061.47E+09 + 58L3 15.722.29E+003.08E+035.65E+053.95E+075.71E-012.62E+031.52E+061.81E+08 + 58L3 20.001.06E+009.14E+021.32E+058.19E+062.73E-017.90E+023.12E+052.97E+07 + 58L3 26.004.52E-012.43E+022.70E+041.42E+061.22E-012.14E+025.65E+044.22E+06 + 58L3 34.001.85E-016.30E+015.33E+032.33E+055.38E-025.66E+011.01E+045.87E+05 + 58L3 46.006.67E-021.38E+018.59E+022.97E+042.14E-021.26E+011.48E+036.56E+04 + 58L3 59.002.84E-023.98E+001.92E+025.40E+031.00E-023.70E+003.14E+021.11E+04 + 58L3 76.001.18E-021.12E+004.17E+019.52E+024.65E-031.07E+006.63E+011.87E+03 + 58L3 89.006.84E-035.13E-011.62E+013.23E+022.88E-034.93E-012.55E+016.24E+02 + 58L3 106.003.72E-032.16E-015.68E+009.75E+011.70E-032.10E-018.92E+001.88E+02 + 58L3 129.001.88E-038.21E-021.76E+002.55E+019.43E-048.13E-022.79E+004.98E+01 + 58L3 155.009.99E-043.34E-025.95E-017.33E+005.44E-043.36E-029.55E-011.46E+01 + 58L3 220.003.04E-046.18E-037.65E-026.96E-011.93E-046.39E-031.29E-011.50E+00 + 58L3 305.001.04E-041.33E-031.18E-028.12E-027.46E-051.40E-032.10E-021.91E-01 + 58L3 400.004.40E-053.91E-042.62E-031.44E-023.45E-054.11E-044.83E-033.66E-02 + 58L3 510.002.10E-051.36E-047.14E-043.24E-031.76E-051.42E-041.34E-038.70E-03 + 58L3 740.007.23E-063.01E-051.10E-043.79E-046.58E-063.01E-052.02E-041.05E-03 + 58L31000.003.34E-069.90E-062.79E-057.78E-053.12E-069.53E-064.67E-052.04E-04 + 58L31500.001.28E-062.66E-065.47E-061.17E-051.25E-062.45E-067.46E-062.53E-05 + 58M1 2.439.23E+003.17E+041.59E+068.16E+081.61E+038.28E+067.25E+091.49E+12 + 58M1 3.435.97E+007.61E+037.11E+054.72E+075.73E+021.53E+067.86E+081.36E+11 + 58M1 5.432.87E+009.60E+021.65E+057.18E+061.45E+021.63E+054.33E+075.51E+09 + 58M1 9.431.03E+005.58E+011.44E+041.01E+062.79E+011.15E+041.48E+061.22E+08 + 58M1 16.433.27E-011.76E+007.38E+025.62E+045.32E+008.53E+025.65E+042.90E+06 + 58M1 26.001.18E-012.78E-014.39E+013.37E+031.36E+001.05E+024.20E+031.44E+05 + 58M1 41.004.01E-021.66E-012.34E+001.59E+023.54E-011.41E+013.50E+027.95E+03 + 58M1 53.002.13E-021.05E-016.48E-012.70E+011.66E-014.70E+009.02E+011.63E+03 + 58M1 71.001.02E-025.41E-022.52E-014.13E+007.10E-021.39E+002.01E+012.79E+02 + 58M1 104.003.79E-031.97E-028.69E-026.04E-012.37E-022.98E-013.02E+003.00E+01 + 58M1 150.001.45E-036.84E-032.83E-021.40E-018.41E-037.28E-025.34E-013.88E+00 + 58M1 280.002.89E-041.06E-033.62E-031.30E-021.53E-037.76E-033.45E-021.52E-01 + 58M1 500.007.21E-052.12E-045.80E-041.59E-033.43E-041.19E-033.58E-031.06E-02 + 58M2 2.272.16E+016.94E+061.87E+106.27E+121.97E+022.89E+057.20E+076.75E+09 + 58M2 3.271.14E+011.12E+061.75E+094.93E+116.55E+015.59E+041.17E+071.32E+09 + 58M2 5.274.16E+001.03E+058.37E+071.75E+101.55E+016.86E+031.07E+061.13E+08 + 58M2 9.271.04E+006.13E+032.47E+063.46E+082.81E+006.16E+026.43E+045.21E+06 + 58M2 16.272.22E-013.76E+027.94E+047.19E+065.14E-015.96E+014.04E+032.27E+05 + 58M2 26.005.55E-023.74E+014.75E+032.93E+051.25E-018.85E+004.10E+021.63E+04 + 58M2 41.001.35E-024.08E+003.20E+021.35E+043.16E-021.42E+004.53E+011.26E+03 + 58M2 53.005.91E-031.18E+007.13E+012.41E+031.46E-025.14E-011.32E+012.97E+02 + 58M2 71.002.28E-032.93E-011.31E+013.45E+026.08E-031.62E-013.26E+005.78E+01 + 58M2 104.006.45E-044.86E-021.50E+002.83E+011.94E-033.67E-025.35E-016.96E+00 + 58M2 150.001.91E-048.99E-031.95E-012.70E+006.54E-049.00E-039.72E-029.42E-01 + 58M2 280.002.50E-055.66E-047.00E-035.87E-021.04E-048.72E-045.81E-033.49E-02 + 58M2 500.004.16E-065.15E-053.98E-042.19E-031.94E-051.09E-044.90E-041.98E-03 + 58M3 2.184.92E+011.40E+073.94E+101.34E+134.98E+011.16E+072.74E+116.53E+14 + 58M3 3.182.39E+012.10E+063.36E+099.43E+111.58E+011.76E+062.02E+102.65E+13 + 58M3 5.188.01E+001.80E+051.47E+083.02E+103.60E+001.54E+057.05E+084.50E+11 + 58M3 9.181.85E+001.01E+043.99E+065.43E+086.29E-018.88E+031.43E+074.26E+09 + 58M3 16.183.68E-015.80E+021.18E+051.04E+071.12E-015.27E+023.21E+054.80E+07 + 58M3 26.008.62E-025.36E+016.45E+033.83E+052.65E-024.98E+011.42E+041.25E+06 + 58M3 41.001.99E-025.47E+004.02E+021.62E+046.65E-035.19E+007.59E+024.15E+04 + 58M3 53.008.51E-031.52E+008.48E+012.73E+033.06E-031.46E+001.50E+026.36E+03 + 58M3 71.003.17E-033.54E-011.45E+013.61E+021.27E-033.46E-012.45E+017.81E+02 + 58M3 104.008.63E-045.35E-021.47E+002.60E+014.02E-045.35E-022.41E+005.40E+01 + 58M3 150.002.47E-048.90E-031.66E-012.13E+001.35E-049.12E-032.76E-014.49E+00 + 58M3 280.003.07E-054.52E-044.40E-033.28E-022.16E-054.81E-047.92E-037.83E-02 + 58M3 500.005.00E-063.39E-051.82E-048.43E-044.23E-063.56E-053.49E-042.31E-03 + 58M4 1.901.14E+024.20E+053.24E+105.35E+141.41E+013.34E+054.18E+094.77E+12 + 58M4 2.902.94E+014.82E+041.65E+091.34E+133.54E+004.00E+042.43E+081.99E+11 + 58M4 4.904.85E+003.31E+034.11E+071.44E+116.18E-012.86E+037.46E+063.92E+09 + 58M4 8.905.39E-011.56E+026.08E+058.92E+088.11E-021.40E+021.51E+054.66E+07 + 58M4 15.905.57E-027.80E+001.01E+046.78E+061.06E-027.45E+003.63E+036.55E+05 + 58M4 26.007.43E-035.97E-013.15E+021.14E+051.82E-036.17E-011.61E+021.83E+04 + 58M4 41.001.08E-035.40E-021.29E+012.70E+033.42E-046.14E-029.28E+006.88E+02 + 58M4 53.003.58E-041.38E-022.16E+003.34E+021.32E-041.68E-021.88E+001.10E+02 + 58M4 71.001.01E-042.93E-032.85E-013.16E+014.38E-053.83E-033.10E-011.38E+01 + 58M4 104.001.91E-053.90E-042.09E-021.51E+001.03E-055.61E-043.01E-029.42E-01 + 58M4 150.003.90E-065.74E-051.78E-038.55E-022.53E-068.96E-053.30E-037.46E-02 + 58M4 280.002.78E-072.41E-063.13E-057.54E-042.30E-074.08E-068.23E-051.10E-03 + 58M4 500.002.74E-081.48E-079.58E-071.20E-052.52E-082.47E-072.99E-062.59E-05 + 58M5 1.881.69E+025.47E+055.35E+108.22E+148.59E+003.56E+042.05E+101.42E+15 + 58M5 2.884.28E+016.12E+042.67E+091.98E+132.15E+004.25E+031.04E+093.17E+13 + 58M5 4.886.91E+004.11E+036.48E+072.07E+113.78E-013.07E+022.62E+072.92E+11 + 58M5 8.887.51E-011.90E+029.40E+051.24E+095.07E-021.56E+014.00E+051.49E+09 + 58M5 15.887.59E-029.28E+001.53E+049.08E+066.87E-038.75E-016.91E+039.38E+06 + 58M5 26.009.93E-036.89E-014.62E+021.46E+051.21E-037.70E-022.23E+021.36E+05 + 58M5 41.001.42E-036.04E-021.83E+013.31E+032.36E-048.27E-039.38E+002.91E+03 + 58M5 53.004.68E-041.52E-022.98E+003.95E+029.26E-052.37E-031.58E+003.44E+02 + 58M5 71.001.30E-043.12E-033.79E-013.56E+013.17E-055.74E-042.10E-013.11E+01 + 58M5 104.002.46E-053.96E-042.60E-021.56E+007.76E-069.21E-051.53E-021.41E+00 + 58M5 150.005.04E-065.56E-052.05E-038.02E-022.01E-061.63E-051.27E-037.70E-02 + 58M5 280.003.76E-072.18E-062.99E-055.56E-042.09E-079.51E-072.03E-056.20E-04 + 58M5 500.004.21E-081.36E-077.71E-076.69E-062.86E-088.10E-085.56E-078.46E-06 + 58N+ 50.001.08E-029.55E-016.18E+012.49E+035.98E-022.51E+001.11E+024.39E+03 + 58N+ 70.004.23E-031.93E-018.28E+002.36E+022.23E-025.82E-011.58E+014.10E+02 + 58N+ 100.001.56E-033.77E-021.03E+002.05E+017.97E-031.30E-012.20E+003.73E+01 + 58N+ 150.005.02E-046.46E-031.04E-011.38E+002.52E-032.57E-022.66E-012.84E+00 + 58N+ 200.002.28E-041.99E-032.20E-022.19E-011.13E-038.61E-036.49E-025.11E-01 + 58N+ 500.002.20E-058.02E-053.12E-041.25E-031.00E-043.69E-041.24E-034.23E-03 + 59K 42.992.04E+005.24E+002.60E+004.90E-011.31E+012.36E+027.28E+025.06E+02 + 59K 43.691.95E+005.39E+003.78E+001.38E+001.24E+012.21E+027.34E+027.19E+02 + 59K 44.991.80E+005.59E+005.95E+004.18E+001.13E+011.97E+027.32E+021.08E+03 + 59K 48.191.51E+005.72E+001.04E+011.53E+019.31E+001.53E+026.85E+021.72E+03 + 59K 51.991.24E+005.45E+001.37E+013.03E+017.45E+001.15E+025.92E+022.04E+03 + 59K 56.001.02E+004.95E+001.53E+014.27E+015.99E+008.69E+014.90E+022.05E+03 + 59K 62.007.79E-014.14E+001.52E+015.19E+014.45E+005.94E+013.61E+021.78E+03 + 59K 70.005.64E-013.18E+001.31E+015.16E+013.13E+003.78E+012.40E+021.31E+03 + 59K 82.003.68E-012.13E+009.54E+004.09E+011.98E+002.10E+011.35E+027.82E+02 + 59K 95.002.47E-011.42E+006.50E+002.87E+011.30E+001.22E+017.65E+014.46E+02 + 59K 112.001.57E-018.76E-013.97E+001.75E+018.10E-016.70E+003.99E+012.26E+02 + 59K 125.001.16E-016.27E-012.79E+001.21E+015.94E-014.51E+002.57E+011.41E+02 + 59K 142.008.21E-024.22E-011.82E+007.63E+004.15E-012.86E+001.54E+018.03E+01 + 59K 165.005.45E-022.63E-011.08E+004.33E+002.73E-011.69E+008.42E+004.10E+01 + 59K 190.003.72E-021.68E-016.57E-012.50E+001.85E-011.04E+004.79E+002.17E+01 + 59K 255.001.70E-026.67E-022.31E-017.82E-018.36E-023.84E-011.51E+005.82E+00 + 59K 340.008.14E-032.78E-028.54E-022.56E-013.92E-021.51E-015.06E-011.66E+00 + 59K 430.004.59E-031.42E-023.95E-021.07E-012.14E-027.31E-022.15E-016.20E-01 + 59K 540.002.72E-037.67E-031.96E-024.86E-021.21E-023.71E-029.72E-022.49E-01 + 59K 770.001.28E-033.23E-037.29E-031.58E-025.08E-031.36E-023.04E-026.58E-02 + 59K 1050.007.00E-041.64E-033.37E-036.55E-032.44E-035.93E-031.19E-022.26E-02 + 59K 1300.004.76E-041.06E-032.06E-033.76E-031.50E-033.44E-036.46E-031.14E-02 + 59K 1550.003.52E-047.55E-041.40E-032.45E-031.01E-032.23E-034.00E-036.73E-03 + 59L1 7.836.39E+001.60E+031.14E+051.38E+062.60E+021.34E+051.21E+072.55E+08 + 59L1 8.535.53E+001.00E+039.34E+041.94E+062.01E+028.92E+047.52E+061.94E+08 + 59L1 9.834.31E+004.48E+025.67E+041.87E+061.32E+024.56E+043.43E+061.06E+08 + 59L1 13.032.54E+007.83E+011.53E+047.56E+055.67E+011.22E+047.26E+052.49E+07 + 59L1 16.831.52E+001.27E+013.79E+032.17E+052.65E+013.72E+031.79E+055.87E+06 + 59L1 20.001.05E+003.35E+001.35E+038.22E+041.58E+011.70E+037.00E+042.15E+06 + 59L1 26.005.92E-018.89E-012.50E+021.64E+047.27E+005.21E+021.70E+044.54E+05 + 59L1 34.003.19E-017.90E-013.90E+012.75E+033.28E+001.59E+024.10E+039.17E+04 + 59L1 46.001.55E-016.06E-015.27E+003.27E+021.35E+004.32E+018.50E+021.52E+04 + 59L1 59.008.37E-023.93E-011.79E+005.65E+016.50E-011.52E+012.39E+023.53E+03 + 59L1 76.004.40E-022.23E-019.18E-011.15E+013.11E-015.35E+006.74E+018.13E+02 + 59L1 89.002.93E-021.50E-016.22E-015.15E+001.97E-012.84E+003.11E+013.30E+02 + 59L1 106.001.86E-029.34E-023.91E-012.43E+001.19E-011.42E+001.34E+011.24E+02 + 59L1 129.001.11E-025.36E-022.21E-011.14E+006.85E-026.66E-015.32E+004.18E+01 + 59L1 155.006.85E-033.14E-021.26E-015.80E-014.09E-023.33E-012.29E+001.55E+01 + 59L1 220.002.75E-031.11E-024.03E-021.58E-011.56E-029.34E-024.86E-012.51E+00 + 59L1 305.001.20E-034.23E-031.38E-024.67E-026.51E-033.03E-021.24E-015.03E-01 + 59L1 400.006.23E-041.97E-035.82E-031.75E-023.21E-031.25E-024.26E-021.43E-01 + 59L1 510.003.56E-041.03E-032.79E-037.54E-031.73E-035.87E-031.72E-024.97E-02 + 59L1 740.001.61E-044.18E-049.91E-042.29E-036.90E-041.97E-034.76E-031.11E-02 + 59L11000.008.96E-052.16E-044.65E-049.57E-043.37E-048.60E-041.83E-033.71E-03 + 59L11500.004.35E-059.60E-051.84E-043.33E-041.33E-043.03E-045.63E-049.85E-04 + 59L2 7.441.32E+019.61E+043.43E+071.52E+092.88E+015.60E+031.84E+052.03E+06 + 59L2 8.141.03E+016.12E+042.03E+071.09E+092.19E+013.94E+031.57E+052.90E+06 + 59L2 9.446.74E+002.91E+048.47E+065.41E+081.39E+012.21E+031.05E+052.93E+06 + 59L2 12.642.88E+006.77E+031.52E+061.06E+085.71E+007.00E+023.63E+041.36E+06 + 59L2 16.441.31E+001.83E+033.22E+052.13E+072.56E+002.48E+021.22E+044.72E+05 + 59L2 20.007.15E-016.93E+021.01E+056.16E+061.41E+001.14E+025.20E+031.92E+05 + 59L2 26.003.14E-011.90E+022.17E+041.14E+066.35E-014.05E+011.60E+035.28E+04 + 59L2 34.001.33E-015.11E+014.49E+031.97E+052.81E-011.41E+014.66E+021.32E+04 + 59L2 46.004.96E-021.18E+017.72E+022.71E+041.13E-014.28E+001.14E+022.65E+03 + 59L2 59.002.18E-023.54E+001.83E+025.30E+035.32E-021.61E+003.56E+016.91E+02 + 59L2 76.009.35E-031.06E+004.28E+011.01E+032.49E-026.01E-011.09E+011.74E+02 + 59L2 89.005.51E-035.02E-011.74E+013.62E+021.55E-023.26E-015.21E+007.38E+01 + 59L2 106.003.06E-032.21E-016.51E+001.17E+029.19E-031.66E-012.31E+002.86E+01 + 59L2 129.001.58E-038.90E-022.18E+003.34E+015.12E-037.82E-029.30E-019.88E+00 + 59L2 155.008.58E-043.84E-027.93E-011.05E+012.97E-033.89E-024.00E-013.69E+00 + 59L2 220.002.70E-047.99E-031.20E-011.20E+001.06E-031.04E-028.21E-025.80E-01 + 59L2 305.009.42E-051.94E-032.21E-021.71E-014.06E-043.14E-031.94E-021.08E-01 + 59L2 400.004.02E-056.25E-045.72E-033.63E-021.85E-041.19E-036.09E-032.81E-02 + 59L2 510.001.93E-052.35E-041.78E-039.60E-039.19E-055.05E-042.22E-038.76E-03 + 59L2 740.006.58E-065.69E-053.30E-041.40E-033.18E-051.42E-045.02E-041.60E-03 + 59L21000.002.85E-061.94E-059.28E-053.33E-041.36E-055.28E-051.60E-044.38E-04 + 59L21500.001.00E-065.07E-061.92E-055.64E-054.42E-061.47E-053.75E-058.63E-05 + 59L3 6.962.77E+012.08E+058.30E+074.06E+097.58E+001.72E+054.18E+081.04E+11 + 59L3 7.662.10E+011.28E+054.67E+072.74E+095.64E+001.07E+052.18E+085.00E+10 + 59L3 8.961.33E+015.78E+041.82E+071.25E+093.48E+004.89E+047.55E+071.50E+10 + 59L3 12.165.30E+001.23E+042.89E+062.10E+081.36E+001.07E+049.70E+061.46E+09 + 59L3 15.962.28E+003.11E+035.59E+053.79E+075.90E-012.75E+031.59E+061.86E+08 + 59L3 20.001.11E+009.97E+021.43E+058.72E+062.95E-018.95E+023.60E+053.41E+07 + 59L3 26.004.75E-012.65E+022.93E+041.52E+061.32E-012.43E+026.50E+044.84E+06 + 59L3 34.001.96E-016.88E+015.79E+032.50E+055.82E-026.40E+011.16E+046.72E+05 + 59L3 46.007.06E-021.51E+019.34E+023.20E+042.31E-021.43E+011.70E+037.49E+04 + 59L3 59.003.02E-024.34E+002.08E+025.83E+031.08E-024.19E+003.59E+021.26E+04 + 59L3 76.001.26E-021.23E+004.54E+011.03E+035.04E-031.21E+007.56E+012.12E+03 + 59L3 89.007.29E-035.60E-011.76E+013.49E+023.12E-035.57E-012.90E+017.09E+02 + 59L3 106.003.98E-032.36E-016.19E+001.06E+021.84E-032.37E-011.01E+012.13E+02 + 59L3 129.002.02E-038.96E-021.92E+002.77E+011.02E-039.17E-023.17E+005.64E+01 + 59L3 155.001.07E-033.65E-026.49E-017.96E+005.90E-043.79E-021.08E+001.66E+01 + 59L3 220.003.27E-046.76E-038.36E-027.57E-012.09E-047.18E-031.46E-011.69E+00 + 59L3 305.001.12E-041.46E-031.29E-028.84E-028.09E-051.57E-032.36E-022.16E-01 + 59L3 400.004.71E-054.27E-042.86E-031.57E-023.74E-054.60E-045.44E-034.12E-02 + 59L3 510.002.25E-051.49E-047.82E-043.53E-031.91E-051.58E-041.51E-039.78E-03 + 59L3 740.007.88E-063.28E-051.21E-044.14E-047.13E-063.34E-052.26E-041.17E-03 + 59L31000.003.60E-061.08E-053.05E-058.51E-053.38E-061.05E-055.22E-052.28E-04 + 59L31500.001.40E-062.88E-065.96E-061.28E-051.35E-062.68E-068.28E-062.82E-05 + 59M1 2.518.66E+003.02E+041.54E+067.00E+081.63E+038.12E+066.91E+091.36E+12 + 59M1 3.515.70E+007.54E+036.74E+054.68E+075.97E+021.57E+067.92E+081.33E+11 + 59M1 5.512.80E+001.00E+031.62E+056.73E+061.55E+021.74E+054.58E+075.71E+09 + 59M1 9.511.02E+006.23E+011.49E+041.00E+063.03E+011.26E+041.62E+061.32E+08 + 59M1 16.513.29E-012.17E+008.10E+025.90E+045.83E+009.45E+026.25E+043.18E+06 + 59M1 26.001.20E-012.77E-015.20E+013.78E+031.51E+001.19E+024.74E+031.62E+05 + 59M1 41.004.13E-021.58E-012.83E+001.86E+023.93E-011.59E+013.94E+028.91E+03 + 59M1 53.002.20E-021.02E-017.27E-013.22E+011.85E-015.27E+001.01E+021.82E+03 + 59M1 71.001.06E-025.34E-022.58E-014.84E+007.88E-021.55E+002.24E+013.11E+02 + 59M1 104.003.95E-031.99E-028.70E-026.58E-012.63E-023.32E-013.37E+003.33E+01 + 59M1 150.001.52E-036.98E-032.87E-021.46E-019.33E-038.09E-025.93E-014.30E+00 + 59M1 280.003.04E-041.11E-033.76E-031.35E-021.70E-038.58E-033.81E-021.68E-01 + 59M1 500.007.62E-052.24E-046.13E-041.69E-033.77E-041.31E-033.94E-031.16E-02 + 59M2 2.342.04E+016.68E+061.75E+105.69E+122.02E+022.88E+056.93E+076.06E+09 + 59M2 3.341.11E+011.12E+061.73E+094.74E+116.90E+015.78E+041.17E+071.26E+09 + 59M2 5.344.14E+001.07E+058.66E+071.78E+101.67E+017.31E+031.11E+061.14E+08 + 59M2 9.341.06E+006.56E+032.64E+063.64E+083.08E+006.70E+026.87E+045.44E+06 + 59M2 16.342.31E-014.08E+028.61E+047.71E+065.69E-016.55E+014.37E+032.42E+05 + 59M2 26.005.89E-024.15E+015.27E+033.23E+051.40E-019.87E+004.54E+021.78E+04 + 59M2 41.001.44E-024.52E+003.56E+021.49E+043.55E-021.59E+005.01E+011.38E+03 + 59M2 53.006.35E-031.31E+007.93E+012.66E+031.64E-025.74E-011.46E+013.27E+02 + 59M2 71.002.46E-033.26E-011.46E+013.82E+026.85E-031.82E-013.62E+006.39E+01 + 59M2 104.007.01E-045.42E-021.67E+003.14E+012.19E-034.11E-025.96E-017.71E+00 + 59M2 150.002.09E-041.00E-022.18E-013.01E+007.40E-041.01E-021.09E-011.05E+00 + 59M2 280.002.76E-056.34E-047.85E-036.57E-021.18E-049.83E-046.53E-033.90E-02 + 59M2 500.004.61E-065.79E-054.49E-042.46E-032.21E-051.24E-045.53E-042.23E-03 + 59M3 2.244.70E+011.35E+073.72E+101.23E+135.02E+011.16E+072.70E+116.32E+14 + 59M3 3.242.33E+012.11E+063.34E+099.10E+111.64E+011.84E+062.10E+102.74E+13 + 59M3 5.247.99E+001.87E+051.52E+083.06E+103.79E+001.67E+057.69E+084.91E+11 + 59M3 9.241.88E+001.08E+044.24E+065.68E+086.74E-019.85E+031.61E+074.79E+09 + 59M3 16.243.82E-016.28E+021.28E+051.11E+071.21E-015.92E+023.66E+055.48E+07 + 59M3 26.009.10E-025.90E+017.09E+034.18E+052.89E-025.69E+011.65E+041.46E+06 + 59M3 41.002.12E-026.02E+004.42E+021.77E+047.26E-035.94E+008.80E+024.82E+04 + 59M3 53.009.07E-031.67E+009.33E+012.98E+033.34E-031.67E+001.74E+027.36E+03 + 59M3 71.003.40E-033.90E-011.60E+013.95E+021.38E-033.95E-012.82E+019.01E+02 + 59M3 104.009.29E-045.90E-021.61E+002.85E+014.39E-046.10E-022.77E+006.20E+01 + 59M3 150.002.67E-049.81E-031.83E-012.34E+001.47E-041.04E-023.16E-015.14E+00 + 59M3 280.003.33E-054.99E-044.86E-033.61E-022.36E-055.44E-049.03E-038.93E-02 + 59M3 500.005.51E-063.73E-052.01E-049.30E-044.63E-064.01E-053.96E-042.63E-03 + 59M4 1.951.11E+024.08E+053.09E+105.02E+141.43E+013.40E+054.16E+094.60E+12 + 59M4 2.952.96E+014.90E+041.68E+091.36E+133.71E+004.26E+042.56E+082.05E+11 + 59M4 4.955.04E+003.49E+034.39E+071.55E+116.66E-013.15E+038.22E+064.25E+09 + 59M4 8.955.75E-011.69E+026.71E+059.94E+088.90E-021.58E+021.71E+055.22E+07 + 59M4 15.956.05E-028.58E+001.13E+047.70E+061.18E-028.51E+004.17E+037.47E+05 + 59M4 26.008.24E-036.70E-013.63E+021.33E+052.05E-037.17E-011.88E+022.14E+04 + 59M4 41.001.21E-036.09E-021.49E+013.14E+033.88E-047.15E-021.08E+018.02E+02 + 59M4 53.004.02E-041.57E-022.49E+003.89E+021.49E-041.95E-022.20E+001.28E+02 + 59M4 71.001.13E-043.33E-033.28E-013.67E+014.99E-054.46E-033.63E-011.61E+01 + 59M4 104.002.16E-054.44E-042.41E-021.75E+001.17E-056.54E-043.53E-021.10E+00 + 59M4 150.004.44E-066.56E-052.05E-039.96E-022.89E-061.05E-043.87E-038.73E-02 + 59M4 280.003.15E-072.76E-063.62E-058.80E-042.64E-074.77E-069.67E-051.29E-03 + 59M4 500.002.98E-081.71E-071.11E-061.40E-052.90E-082.89E-073.51E-063.04E-05 + 59M5 1.931.65E+025.28E+055.14E+107.76E+148.74E+003.57E+042.06E+101.40E+15 + 59M5 2.934.31E+016.19E+042.73E+092.02E+132.25E+004.45E+031.11E+093.36E+13 + 59M5 4.937.18E+004.31E+036.96E+072.23E+114.06E-013.33E+022.92E+073.28E+11 + 59M5 8.938.00E-012.04E+021.04E+061.38E+095.54E-021.73E+014.59E+051.73E+09 + 59M5 15.938.24E-021.01E+011.72E+041.03E+077.59E-039.80E-018.07E+031.11E+07 + 59M5 26.001.10E-027.67E-015.32E+021.70E+051.36E-038.75E-022.65E+021.66E+05 + 59M5 41.001.59E-036.75E-022.11E+013.84E+032.65E-049.39E-031.12E+013.53E+03 + 59M5 53.005.23E-041.70E-023.44E+004.59E+021.04E-042.69E-031.88E+004.15E+02 + 59M5 71.001.46E-043.50E-034.37E-014.13E+013.58E-056.53E-042.50E-013.74E+01 + 59M5 104.002.77E-054.46E-043.00E-021.81E+008.78E-061.05E-041.81E-021.70E+00 + 59M5 150.005.72E-066.29E-052.36E-039.31E-022.28E-061.86E-051.50E-039.22E-02 + 59M5 280.004.25E-072.47E-063.45E-056.46E-042.38E-071.08E-062.38E-057.39E-04 + 59M5 500.004.47E-081.53E-078.79E-077.75E-063.25E-089.25E-086.48E-071.00E-05 + 59N+ 50.001.14E-021.06E+006.93E+012.80E+036.66E-022.84E+001.28E+025.11E+03 + 59N+ 70.004.45E-032.15E-019.28E+002.65E+022.49E-026.56E-011.81E+014.75E+02 + 59N+ 100.001.64E-034.16E-021.15E+002.30E+018.87E-031.47E-012.50E+004.28E+01 + 59N+ 150.005.31E-047.07E-031.16E-011.55E+002.80E-032.88E-023.00E-013.24E+00 + 59N+ 200.002.41E-042.17E-032.45E-022.45E-011.26E-039.61E-037.30E-025.78E-01 + 59N+ 500.002.35E-058.63E-053.42E-041.39E-031.11E-044.08E-041.38E-034.72E-03 + 60K 44.571.89E+004.64E+002.20E+003.86E-011.28E+012.21E+026.56E+024.36E+02 + 60K 45.271.81E+004.79E+003.18E+001.08E+001.22E+012.09E+026.64E+026.17E+02 + 60K 46.571.68E+004.96E+004.97E+003.25E+001.12E+011.87E+026.63E+029.26E+02 + 60K 49.771.42E+005.10E+008.70E+001.20E+019.26E+001.46E+026.25E+021.48E+03 + 60K 53.571.17E+004.88E+001.16E+012.40E+017.46E+001.11E+025.45E+021.77E+03 + 60K 58.009.51E-014.43E+001.31E+013.51E+015.91E+008.24E+014.46E+021.79E+03 + 60K 64.007.34E-013.73E+001.31E+014.28E+014.44E+005.70E+013.33E+021.57E+03 + 60K 72.005.36E-012.89E+001.15E+014.31E+013.15E+003.68E+012.25E+021.18E+03 + 60K 84.003.54E-011.97E+008.47E+003.49E+012.02E+002.08E+011.29E+027.19E+02 + 60K 97.002.40E-011.33E+005.87E+002.50E+011.33E+001.23E+017.43E+014.19E+02 + 60K 114.001.55E-018.32E-013.65E+001.56E+018.41E-016.81E+003.94E+012.17E+02 + 60K 127.001.15E-016.01E-012.60E+001.09E+016.20E-014.62E+002.56E+011.37E+02 + 60K 144.008.17E-024.08E-011.71E+007.01E+004.35E-012.95E+001.55E+017.89E+01 + 60K 167.005.46E-022.57E-011.03E+004.04E+002.88E-011.75E+008.57E+004.09E+01 + 60K 195.003.60E-021.58E-016.01E-012.23E+001.88E-011.03E+004.62E+002.04E+01 + 60K 260.001.68E-026.44E-022.19E-017.29E-018.64E-023.90E-011.50E+005.67E+00 + 60K 345.008.19E-032.75E-028.33E-022.47E-014.10E-021.57E-015.15E-011.66E+00 + 60K 430.004.80E-031.47E-024.08E-021.10E-012.32E-027.91E-022.31E-016.62E-01 + 60K 540.002.84E-037.99E-032.04E-025.04E-021.31E-024.01E-021.05E-012.66E-01 + 60K 770.001.34E-033.38E-037.64E-031.65E-025.49E-031.46E-023.27E-027.05E-02 + 60K 1050.007.35E-041.72E-033.55E-036.90E-032.63E-036.39E-031.28E-022.43E-02 + 60K 1300.005.01E-041.12E-032.18E-033.98E-031.61E-033.70E-036.95E-031.23E-02 + 60K 1550.003.70E-047.97E-041.49E-032.59E-031.08E-032.40E-034.30E-037.22E-03 + 60L1 8.135.95E+001.47E+039.95E+041.11E+062.57E+021.27E+051.10E+072.21E+08 + 60L1 8.835.18E+009.38E+028.24E+041.59E+062.01E+028.56E+046.94E+061.71E+08 + 60L1 10.134.07E+004.32E+025.12E+041.59E+061.33E+024.46E+043.25E+069.59E+07 + 60L1 13.332.44E+008.06E+011.46E+046.80E+055.86E+011.23E+047.15E+052.36E+07 + 60L1 17.131.47E+001.41E+013.77E+032.05E+052.77E+013.85E+031.81E+055.75E+06 + 60L1 21.009.59E-013.04E+001.13E+036.57E+041.51E+011.52E+035.97E+041.75E+06 + 60L1 27.005.52E-018.55E-012.27E+021.41E+047.17E+004.91E+021.55E+043.96E+05 + 60L1 35.003.04E-017.16E-013.86E+012.54E+033.32E+001.56E+023.90E+038.45E+04 + 60L1 47.001.50E-015.54E-015.55E+003.27E+021.39E+004.38E+018.42E+021.47E+04 + 60L1 60.008.23E-023.67E-011.80E+005.96E+016.82E-011.57E+012.42E+023.51E+03 + 60L1 77.004.38E-022.12E-018.83E-011.23E+013.30E-015.62E+006.97E+018.27E+02 + 60L1 90.002.93E-021.44E-015.95E-015.40E+002.10E-013.00E+003.25E+013.40E+02 + 60L1 107.001.87E-029.10E-023.76E-012.48E+001.28E-011.51E+001.41E+011.29E+02 + 60L1 130.001.13E-025.28E-022.15E-011.15E+007.37E-027.13E-015.64E+004.39E+01 + 60L1 155.007.12E-033.18E-021.26E-015.96E-014.50E-023.67E-012.51E+001.70E+01 + 60L1 220.002.87E-031.13E-024.11E-021.62E-011.71E-021.03E-015.33E-012.74E+00 + 60L1 305.001.26E-034.38E-031.42E-024.85E-027.14E-033.33E-021.36E-015.49E-01 + 60L1 400.006.53E-042.05E-036.06E-031.83E-023.51E-031.37E-024.66E-021.56E-01 + 60L1 510.003.74E-041.08E-032.93E-037.94E-031.89E-036.42E-031.88E-025.41E-02 + 60L1 740.001.70E-044.42E-041.05E-032.43E-037.52E-042.15E-035.18E-031.21E-02 + 60L11000.009.46E-052.29E-044.94E-041.02E-033.66E-049.36E-041.99E-034.04E-03 + 60L11500.004.60E-051.02E-041.97E-043.56E-041.43E-043.29E-046.11E-041.07E-03 + 60L2 7.721.23E+018.74E+042.99E+071.26E+092.85E+015.28E+031.65E+051.68E+06 + 60L2 8.429.66E+005.66E+041.80E+079.18E+082.19E+013.77E+031.42E+052.45E+06 + 60L2 9.726.44E+002.76E+047.74E+064.70E+081.41E+012.15E+039.67E+042.55E+06 + 60L2 12.922.82E+006.66E+031.45E+069.71E+075.92E+007.03E+023.49E+041.25E+06 + 60L2 16.721.30E+001.85E+033.18E+052.03E+072.70E+002.54E+021.21E+044.50E+05 + 60L2 21.006.47E-015.98E+028.31E+044.83E+061.35E+001.04E+024.49E+031.59E+05 + 60L2 27.002.94E-011.74E+021.90E+049.58E+056.29E-013.84E+011.45E+034.62E+04 + 60L2 35.001.28E-014.87E+014.16E+031.77E+052.87E-011.38E+014.42E+021.21E+04 + 60L2 47.004.92E-021.16E+017.47E+022.56E+041.18E-014.34E+001.13E+022.54E+03 + 60L2 60.002.20E-023.60E+001.82E+025.17E+035.64E-021.67E+003.60E+016.83E+02 + 60L2 77.009.61E-031.10E+004.37E+011.02E+032.67E-026.32E-011.12E+011.77E+02 + 60L2 90.005.70E-035.25E-011.80E+013.69E+021.67E-023.46E-015.43E+007.58E+01 + 60L2 107.003.20E-032.34E-016.81E+001.21E+029.99E-031.77E-012.43E+002.97E+01 + 60L2 130.001.67E-039.49E-022.30E+003.49E+015.60E-038.43E-029.89E-011.04E+01 + 60L2 155.009.30E-044.25E-028.76E-011.15E+013.32E-034.32E-024.42E-014.05E+00 + 60L2 220.002.94E-048.85E-031.34E-011.33E+001.18E-031.16E-029.10E-026.40E-01 + 60L2 305.001.03E-042.15E-032.46E-021.90E-014.56E-043.51E-032.16E-021.20E-01 + 60L2 400.004.41E-056.95E-046.36E-034.04E-022.08E-041.33E-036.78E-033.13E-02 + 60L2 510.002.11E-052.62E-041.99E-031.07E-021.03E-045.67E-042.48E-039.75E-03 + 60L2 740.007.17E-066.34E-053.70E-041.57E-033.59E-051.60E-045.63E-041.79E-03 + 60L21000.003.17E-062.17E-051.04E-043.72E-041.54E-055.94E-051.80E-044.90E-04 + 60L21500.001.09E-065.67E-062.16E-056.33E-054.99E-061.66E-054.23E-059.71E-05 + 60L3 7.212.59E+011.90E+057.30E+073.42E+097.36E+001.64E+053.83E+089.23E+10 + 60L3 7.911.99E+011.19E+054.19E+072.34E+095.54E+001.03E+052.04E+084.52E+10 + 60L3 9.211.27E+015.49E+041.67E+071.10E+093.47E+004.83E+047.29E+071.41E+10 + 60L3 12.415.19E+001.21E+042.78E+061.95E+081.38E+001.09E+049.81E+061.44E+09 + 60L3 16.212.27E+003.14E+035.53E+053.63E+076.09E-012.88E+031.66E+061.90E+08 + 60L3 21.009.97E-018.49E+021.16E+056.73E+062.75E-017.93E+023.01E+052.72E+07 + 60L3 27.004.41E-012.39E+022.53E+041.27E+061.27E-012.27E+025.85E+044.19E+06 + 60L3 35.001.87E-016.47E+015.28E+032.20E+055.76E-026.27E+011.10E+046.21E+05 + 60L3 47.006.94E-021.47E+018.91E+022.97E+042.34E-021.45E+011.70E+037.31E+04 + 60L3 60.003.02E-024.34E+002.05E+025.60E+031.11E-024.35E+003.69E+021.28E+04 + 60L3 77.001.28E-021.25E+004.57E+011.02E+035.24E-031.28E+007.94E+012.20E+03 + 60L3 90.007.47E-035.77E-011.79E+013.50E+023.27E-035.95E-013.08E+017.44E+02 + 60L3 107.004.11E-032.45E-016.38E+001.07E+021.94E-032.56E-011.09E+012.27E+02 + 60L3 130.002.10E-039.41E-022.00E+002.84E+011.08E-039.94E-023.43E+006.05E+01 + 60L3 155.001.15E-033.98E-027.07E-018.63E+006.39E-044.26E-021.22E+001.87E+01 + 60L3 220.003.50E-047.37E-039.11E-028.22E-012.27E-048.06E-031.64E-011.91E+00 + 60L3 305.001.19E-041.59E-031.41E-029.62E-028.76E-051.76E-032.66E-022.43E-01 + 60L3 400.005.07E-054.66E-043.13E-031.71E-024.05E-055.13E-046.12E-034.63E-02 + 60L3 510.002.44E-051.62E-048.53E-043.85E-032.07E-051.76E-041.69E-031.10E-02 + 60L3 740.008.51E-063.57E-051.32E-044.52E-047.70E-063.69E-052.53E-041.32E-03 + 60L31000.003.86E-061.17E-053.33E-059.29E-053.65E-061.15E-055.82E-052.55E-04 + 60L31500.001.51E-063.12E-066.49E-061.40E-051.45E-062.93E-069.18E-063.15E-05 + 60M1 2.578.29E+002.96E+041.56E+066.33E+081.68E+038.18E+066.84E+091.32E+12 + 60M1 3.575.52E+007.62E+036.63E+054.77E+076.28E+021.63E+068.19E+081.35E+11 + 60M1 5.572.75E+001.05E+031.62E+056.53E+061.66E+021.87E+054.92E+076.03E+09 + 60M1 9.571.02E+006.95E+011.56E+041.01E+063.29E+011.39E+041.78E+061.43E+08 + 60M1 16.573.32E-012.65E+008.89E+026.23E+046.40E+001.05E+036.94E+043.51E+06 + 60M1 26.001.23E-012.87E-016.11E+014.22E+031.68E+001.34E+025.36E+031.82E+05 + 60M1 41.004.24E-021.51E-013.42E+002.16E+024.37E-011.78E+014.42E+029.98E+03 + 60M1 53.002.27E-029.85E-028.31E-013.80E+012.05E-015.90E+001.13E+022.03E+03 + 60M1 71.001.09E-025.27E-022.68E-015.69E+008.75E-021.73E+002.50E+013.46E+02 + 60M1 104.004.10E-032.00E-028.75E-027.24E-012.91E-023.70E-013.74E+003.70E+01 + 60M1 150.001.58E-037.12E-032.91E-021.54E-011.03E-028.98E-026.58E-014.76E+00 + 60M1 280.003.20E-041.15E-033.90E-031.42E-021.87E-039.49E-034.21E-021.85E-01 + 60M1 500.008.08E-052.36E-046.48E-041.80E-034.15E-041.44E-034.34E-031.28E-02 + 60M2 2.401.94E+016.41E+061.64E+105.17E+122.07E+022.87E+056.68E+075.50E+09 + 60M2 3.401.07E+011.12E+061.71E+094.56E+117.26E+015.97E+041.18E+071.21E+09 + 60M2 5.404.11E+001.11E+058.94E+071.80E+101.80E+017.78E+031.16E+061.15E+08 + 60M2 9.401.08E+007.00E+032.81E+063.81E+083.37E+007.26E+027.33E+045.68E+06 + 60M2 16.402.39E-014.43E+029.32E+048.25E+066.28E-017.18E+014.73E+032.58E+05 + 60M2 26.006.24E-024.60E+015.84E+033.56E+051.57E-011.10E+015.01E+021.95E+04 + 60M2 41.001.54E-025.01E+003.94E+021.64E+043.98E-021.77E+005.54E+011.52E+03 + 60M2 53.006.81E-031.46E+008.80E+012.94E+031.84E-026.40E-011.62E+013.60E+02 + 60M2 71.002.65E-033.62E-011.62E+014.22E+027.70E-032.03E-014.01E+007.04E+01 + 60M2 104.007.60E-046.02E-021.86E+003.48E+012.47E-034.60E-026.63E-018.53E+00 + 60M2 150.002.28E-041.12E-022.43E-013.35E+008.35E-041.13E-021.21E-011.16E+00 + 60M2 280.003.02E-057.09E-048.80E-037.34E-021.34E-041.11E-037.32E-034.36E-02 + 60M2 500.005.08E-066.49E-055.05E-042.77E-032.51E-051.40E-046.23E-042.50E-03 + 60M3 2.304.52E+011.31E+073.55E+101.14E+135.07E+011.18E+072.69E+116.19E+14 + 60M3 3.302.28E+012.13E+063.33E+098.88E+111.69E+011.94E+062.20E+102.85E+13 + 60M3 5.307.98E+001.95E+051.58E+083.11E+104.00E+001.81E+058.40E+085.37E+11 + 60M3 9.301.92E+001.15E+044.50E+065.95E+087.21E-011.09E+041.81E+075.40E+09 + 60M3 16.303.95E-016.78E+021.37E+051.18E+071.30E-016.65E+024.17E+056.26E+07 + 60M3 26.009.59E-026.48E+017.79E+034.55E+053.15E-026.50E+011.92E+041.70E+06 + 60M3 41.002.25E-026.62E+004.86E+021.93E+047.92E-036.77E+001.02E+035.59E+04 + 60M3 53.009.66E-031.84E+001.02E+023.26E+033.64E-031.90E+002.01E+028.50E+03 + 60M3 71.003.63E-034.29E-011.75E+014.31E+021.51E-034.50E-013.25E+011.04E+03 + 60M3 104.009.94E-046.49E-021.77E+003.12E+014.79E-046.95E-023.18E+007.12E+01 + 60M3 150.002.86E-041.08E-022.01E-012.56E+001.61E-041.18E-023.62E-015.88E+00 + 60M3 280.003.62E-055.50E-045.35E-033.96E-022.58E-056.16E-041.03E-021.02E-01 + 60M3 500.005.96E-064.10E-052.22E-041.02E-035.05E-064.50E-054.49E-042.98E-03 + 60M4 2.001.08E+023.97E+052.96E+104.75E+141.46E+013.46E+054.16E+094.48E+12 + 60M4 3.002.98E+014.98E+041.71E+091.38E+133.89E+004.52E+042.71E+082.13E+11 + 60M4 5.005.22E+003.67E+034.68E+071.67E+117.15E-013.46E+039.06E+064.62E+09 + 60M4 9.006.11E-011.82E+027.39E+051.11E+099.73E-021.78E+021.94E+055.85E+07 + 60M4 16.006.55E-029.40E+001.27E+048.72E+061.31E-029.70E+004.78E+038.51E+05 + 60M4 26.009.11E-037.50E-014.16E+021.54E+052.31E-038.30E-012.20E+022.48E+04 + 60M4 41.001.34E-036.85E-021.71E+013.65E+034.37E-048.29E-021.26E+019.33E+02 + 60M4 53.004.49E-041.77E-022.85E+004.51E+021.69E-042.26E-022.57E+001.49E+02 + 60M4 71.001.27E-043.77E-033.77E-014.26E+015.65E-055.18E-034.23E-011.87E+01 + 60M4 104.002.42E-055.05E-042.77E-022.03E+001.33E-057.60E-044.11E-021.28E+00 + 60M4 150.004.94E-067.48E-052.36E-031.16E-013.29E-061.22E-044.52E-031.02E-01 + 60M4 280.003.52E-073.18E-064.16E-051.02E-033.01E-075.55E-061.13E-041.51E-03 + 60M4 500.003.37E-081.97E-071.28E-061.63E-053.32E-083.36E-074.11E-063.57E-05 + 60M5 1.981.61E+025.12E+054.97E+107.38E+148.89E+003.59E+042.07E+101.38E+15 + 60M5 2.984.34E+016.26E+042.79E+092.06E+132.35E+004.66E+031.18E+093.57E+13 + 60M5 4.987.44E+004.50E+037.45E+072.40E+114.34E-013.59E+023.25E+073.69E+11 + 60M5 8.988.49E-012.18E+021.15E+061.53E+096.02E-021.91E+015.26E+052.02E+09 + 60M5 15.988.90E-021.10E+011.93E+041.17E+078.35E-031.09E+009.39E+031.32E+07 + 60M5 26.001.21E-028.50E-016.12E+021.96E+051.51E-039.90E-023.15E+022.01E+05 + 60M5 41.001.76E-037.52E-022.43E+014.44E+032.97E-041.06E-021.33E+014.25E+03 + 60M5 53.005.82E-041.89E-023.95E+005.30E+021.17E-043.04E-032.23E+005.00E+02 + 60M5 71.001.63E-043.92E-035.03E-014.77E+014.02E-057.39E-042.96E-014.49E+01 + 60M5 104.003.09E-055.01E-043.46E-022.10E+009.89E-061.19E-042.14E-022.03E+00 + 60M5 150.006.31E-067.08E-052.71E-031.08E-012.57E-062.11E-051.77E-031.10E-01 + 60M5 280.004.68E-072.80E-063.96E-057.47E-042.69E-071.23E-062.80E-058.76E-04 + 60M5 500.005.07E-081.79E-071.01E-068.98E-063.68E-081.05E-077.53E-071.18E-05 + 60N+ 50.001.28E-021.22E+007.66E+012.99E+037.70E-023.17E+001.37E+025.17E+03 + 60N+ 70.004.92E-032.42E-011.02E+012.83E+022.84E-027.26E-011.93E+014.84E+02 + 60N+ 100.001.83E-034.74E-021.30E+002.54E+011.03E-021.66E-012.74E+004.53E+01 + 60N+ 150.005.87E-047.96E-031.30E-011.72E+003.23E-033.25E-023.30E-013.47E+00 + 60N+ 200.002.63E-042.40E-032.71E-022.69E-011.43E-031.07E-027.98E-026.19E-01 + 60N+ 500.002.51E-059.28E-053.71E-041.52E-031.23E-044.54E-041.53E-035.25E-03 + 61K 46.181.75E+004.13E+001.86E+003.04E-011.26E+012.09E+025.94E+023.77E+02 + 61K 46.881.69E+004.26E+002.68E+008.44E-011.21E+011.97E+026.02E+025.30E+02 + 61K 48.181.57E+004.41E+004.17E+002.53E+001.11E+011.77E+026.01E+027.94E+02 + 61K 51.381.33E+004.55E+007.30E+009.39E+009.21E+001.40E+025.70E+021.27E+03 + 61K 55.181.11E+004.38E+009.79E+001.90E+017.47E+001.07E+025.01E+021.54E+03 + 61K 59.009.30E-014.06E+001.11E+012.72E+016.15E+008.34E+014.27E+021.59E+03 + 61K 65.007.21E-013.46E+001.14E+013.47E+014.64E+005.82E+013.23E+021.43E+03 + 61K 73.005.30E-012.72E+001.02E+013.63E+013.31E+003.78E+012.21E+021.10E+03 + 61K 85.003.53E-011.88E+007.73E+003.05E+012.13E+002.15E+011.29E+026.89E+02 + 61K 98.002.40E-011.28E+005.45E+002.24E+011.41E+001.28E+017.51E+014.09E+02 + 61K 115.001.56E-018.11E-013.45E+001.43E+018.96E-017.14E+004.03E+012.15E+02 + 61K 128.001.16E-015.89E-012.48E+001.01E+016.62E-014.86E+002.64E+011.37E+02 + 61K 145.008.29E-024.03E-011.65E+006.60E+004.66E-013.12E+001.60E+017.99E+01 + 61K 168.005.56E-022.56E-011.01E+003.86E+003.09E-011.86E+008.92E+004.18E+01 + 61K 195.003.72E-021.61E-016.02E-012.20E+002.05E-011.11E+004.94E+002.15E+01 + 61K 260.001.75E-026.60E-022.22E-017.32E-019.40E-024.22E-011.61E+006.02E+00 + 61K 345.008.53E-032.84E-028.53E-022.52E-014.45E-021.69E-015.52E-011.77E+00 + 61K 440.004.75E-031.43E-023.91E-021.05E-012.38E-027.97E-022.29E-016.44E-01 + 61K 550.002.86E-037.94E-032.00E-024.91E-021.35E-024.10E-021.06E-012.65E-01 + 61K 780.001.37E-033.44E-037.74E-031.66E-025.75E-031.53E-023.38E-027.21E-02 + 61K 1050.007.72E-041.81E-033.74E-037.27E-032.84E-036.89E-031.37E-022.61E-02 + 61K 1300.005.25E-041.18E-032.30E-034.20E-031.73E-033.99E-037.47E-031.32E-02 + 61K 1550.003.89E-048.40E-041.57E-032.74E-031.16E-032.58E-034.62E-037.75E-03 + 61L1 8.435.54E+001.35E+038.65E+048.91E+052.54E+021.20E+059.94E+061.91E+08 + 61L1 9.134.85E+008.76E+027.25E+041.30E+062.00E+028.20E+046.40E+061.50E+08 + 61L1 10.433.84E+004.16E+024.62E+041.34E+061.34E+024.36E+043.06E+068.62E+07 + 61L1 13.632.33E+008.26E+011.39E+046.10E+056.04E+011.24E+047.02E+052.22E+07 + 61L1 17.431.43E+001.55E+013.74E+031.93E+052.90E+013.98E+031.82E+055.61E+06 + 61L1 21.009.68E-013.93E+001.26E+036.96E+041.67E+011.70E+036.62E+041.90E+06 + 61L1 27.005.59E-019.16E-012.63E+021.54E+047.90E+005.48E+021.71E+044.32E+05 + 61L1 35.003.09E-016.61E-014.63E+012.85E+033.66E+001.74E+024.32E+039.24E+04 + 61L1 47.001.54E-015.21E-016.63E+003.79E+021.54E+004.87E+019.30E+021.61E+04 + 61L1 60.008.44E-023.53E-011.95E+007.01E+017.51E-011.74E+012.67E+023.84E+03 + 61L1 77.004.51E-022.08E-018.88E-011.42E+013.64E-016.22E+007.68E+019.06E+02 + 61L1 90.003.02E-021.42E-015.90E-016.04E+002.32E-013.31E+003.57E+013.72E+02 + 61L1 107.001.94E-029.08E-023.73E-012.68E+001.41E-011.67E+001.55E+011.41E+02 + 61L1 130.001.17E-025.31E-022.15E-011.20E+008.12E-027.86E-016.20E+004.80E+01 + 61L1 155.007.39E-033.22E-021.27E-016.16E-014.95E-024.04E-012.76E+001.86E+01 + 61L1 220.002.99E-031.16E-024.19E-021.68E-011.88E-021.13E-015.84E-012.99E+00 + 61L1 305.001.31E-034.53E-031.47E-025.05E-027.82E-033.65E-021.49E-015.99E-01 + 61L1 400.006.86E-042.14E-036.32E-031.92E-023.85E-031.50E-025.09E-021.70E-01 + 61L1 510.003.94E-041.13E-033.07E-038.36E-032.07E-037.01E-032.05E-025.89E-02 + 61L1 740.001.79E-044.66E-041.11E-032.58E-038.20E-042.34E-035.65E-031.32E-02 + 61L11000.009.99E-052.42E-045.25E-041.08E-033.98E-041.02E-032.16E-034.39E-03 + 61L11500.004.87E-051.08E-042.10E-043.80E-041.55E-043.57E-046.64E-041.16E-03 + 61L2 8.011.15E+017.96E+042.61E+071.04E+092.82E+014.98E+031.48E+051.39E+06 + 61L2 8.719.10E+005.23E+041.60E+077.75E+082.18E+013.60E+031.29E+052.06E+06 + 61L2 10.016.14E+002.61E+047.07E+064.08E+081.43E+012.09E+038.93E+042.21E+06 + 61L2 13.212.76E+006.54E+031.39E+068.89E+076.14E+007.04E+023.35E+041.14E+06 + 61L2 17.011.29E+001.86E+033.13E+051.93E+072.84E+002.60E+021.20E+044.27E+05 + 61L2 21.006.81E-016.56E+029.07E+045.16E+061.50E+001.14E+024.82E+031.66E+05 + 61L2 27.003.11E-011.90E+022.08E+041.03E+066.99E-014.22E+011.57E+034.88E+04 + 61L2 35.001.36E-015.35E+014.55E+031.91E+053.19E-011.52E+014.79E+021.29E+04 + 61L2 47.005.24E-021.28E+018.19E+022.78E+041.31E-014.78E+001.23E+022.74E+03 + 61L2 60.002.35E-023.96E+002.00E+025.63E+036.29E-021.84E+003.93E+017.38E+02 + 61L2 77.001.03E-021.21E+004.80E+011.11E+032.98E-026.99E-011.23E+011.92E+02 + 61L2 90.006.13E-035.79E-011.98E+014.04E+021.87E-023.82E-015.96E+008.25E+01 + 61L2 107.003.44E-032.58E-017.50E+001.33E+021.12E-021.97E-012.67E+003.24E+01 + 61L2 130.001.80E-031.05E-012.54E+003.83E+016.26E-039.35E-021.09E+001.14E+01 + 61L2 155.001.01E-034.69E-029.68E-011.27E+013.72E-034.80E-024.88E-014.44E+00 + 61L2 220.003.19E-049.80E-031.48E-011.46E+001.33E-031.30E-021.01E-017.05E-01 + 61L2 305.001.12E-042.39E-032.73E-022.10E-015.12E-043.92E-032.40E-021.33E-01 + 61L2 400.004.84E-057.72E-047.08E-034.48E-022.34E-041.49E-037.56E-033.47E-02 + 61L2 510.002.33E-052.91E-042.22E-031.19E-021.17E-046.35E-042.76E-031.08E-02 + 61L2 740.007.89E-067.07E-054.13E-041.75E-034.05E-051.79E-046.30E-041.99E-03 + 61L21000.003.50E-062.42E-051.16E-044.17E-041.74E-056.69E-052.02E-045.49E-04 + 61L21500.001.21E-066.34E-062.42E-057.10E-055.64E-061.87E-054.76E-051.09E-04 + 61L3 7.462.43E+011.74E+056.42E+072.87E+097.15E+001.56E+053.51E+088.15E+10 + 61L3 8.161.88E+011.10E+053.75E+072.00E+095.43E+009.98E+041.91E+084.09E+10 + 61L3 9.461.22E+015.21E+041.54E+079.63E+083.44E+004.77E+047.02E+071.31E+10 + 61L3 12.665.08E+001.19E+042.66E+061.80E+081.41E+001.12E+049.89E+061.42E+09 + 61L3 16.462.26E+003.16E+035.46E+053.48E+076.27E-013.01E+031.72E+061.94E+08 + 61L3 21.001.04E+009.23E+021.25E+057.15E+062.97E-018.96E+023.45E+053.11E+07 + 61L3 27.004.63E-012.60E+022.74E+041.35E+061.37E-012.57E+026.70E+044.78E+06 + 61L3 35.001.97E-017.04E+015.72E+032.36E+056.22E-027.07E+011.26E+047.08E+05 + 61L3 47.007.33E-021.60E+019.67E+023.19E+042.53E-021.64E+011.94E+038.32E+04 + 61L3 60.003.20E-024.73E+002.22E+026.03E+031.20E-024.91E+004.20E+021.45E+04 + 61L3 77.001.36E-021.36E+004.96E+011.10E+035.66E-031.44E+009.03E+012.49E+03 + 61L3 90.007.94E-036.29E-011.95E+013.77E+023.53E-036.70E-013.49E+018.42E+02 + 61L3 107.004.37E-032.67E-016.93E+001.16E+022.10E-032.88E-011.23E+012.56E+02 + 61L3 130.002.24E-031.02E-012.18E+003.08E+011.17E-031.12E-013.88E+006.84E+01 + 61L3 155.001.22E-034.34E-027.69E-019.34E+006.91E-044.79E-021.38E+002.11E+01 + 61L3 220.003.76E-048.03E-039.92E-028.92E-012.45E-049.04E-031.85E-012.15E+00 + 61L3 305.001.28E-041.73E-031.53E-021.04E-019.47E-051.97E-033.00E-022.73E-01 + 61L3 400.005.45E-055.08E-043.41E-031.86E-024.38E-055.72E-046.88E-035.20E-02 + 61L3 510.002.61E-051.77E-049.31E-044.20E-032.23E-051.95E-041.90E-031.23E-02 + 61L3 740.009.11E-063.88E-051.44E-044.93E-048.31E-064.08E-052.83E-041.47E-03 + 61L31000.004.14E-061.27E-053.62E-051.01E-043.93E-061.27E-056.49E-052.86E-04 + 61L31500.001.61E-063.38E-067.05E-061.52E-051.56E-063.20E-061.02E-053.51E-05 + 61M1 2.657.85E+002.84E+041.53E+065.51E+081.71E+038.07E+066.57E+091.22E+12 + 61M1 3.655.29E+007.58E+036.42E+054.71E+076.54E+021.67E+068.28E+081.32E+11 + 61M1 5.652.68E+001.09E+031.60E+056.27E+061.77E+021.99E+055.20E+076.25E+09 + 61M1 9.651.01E+007.68E+011.62E+041.00E+063.57E+011.51E+041.94E+061.54E+08 + 61M1 16.653.34E-013.20E+009.69E+026.52E+047.01E+001.16E+037.67E+043.84E+06 + 61M1 26.001.26E-013.09E-017.12E+014.69E+031.86E+001.51E+026.04E+032.04E+05 + 61M1 41.004.36E-021.44E-014.13E+002.49E+024.84E-012.00E+014.96E+021.12E+04 + 61M1 53.002.34E-029.53E-029.63E-014.47E+012.28E-016.61E+001.27E+022.27E+03 + 61M1 71.001.13E-025.19E-022.84E-016.69E+009.70E-021.93E+002.79E+013.85E+02 + 61M1 104.004.26E-032.00E-028.86E-028.06E-013.23E-024.12E-014.16E+004.10E+01 + 61M1 150.001.65E-037.25E-032.95E-021.63E-011.14E-029.97E-027.29E-015.26E+00 + 61M1 280.003.36E-041.19E-034.05E-031.49E-022.07E-031.05E-024.64E-022.04E-01 + 61M1 500.008.55E-052.48E-046.84E-041.91E-034.57E-041.59E-034.76E-031.40E-02 + 61M2 2.471.84E+016.15E+061.53E+104.68E+122.12E+022.86E+056.43E+074.97E+09 + 61M2 3.471.04E+011.12E+061.69E+094.38E+117.63E+016.15E+041.18E+071.16E+09 + 61M2 5.474.08E+001.15E+059.21E+071.81E+101.93E+018.25E+031.20E+061.15E+08 + 61M2 9.471.09E+007.46E+032.98E+063.99E+083.68E+007.86E+027.80E+045.92E+06 + 61M2 16.472.48E-014.80E+021.01E+058.80E+066.94E-017.85E+015.11E+032.74E+05 + 61M2 26.006.59E-025.08E+016.46E+033.91E+051.75E-011.22E+015.52E+022.13E+04 + 61M2 41.001.64E-025.55E+004.37E+021.80E+044.46E-021.97E+006.12E+011.66E+03 + 61M2 53.007.29E-031.61E+009.75E+013.24E+032.07E-027.13E-011.79E+013.95E+02 + 61M2 71.002.85E-034.01E-011.80E+014.66E+028.65E-032.26E-014.44E+007.75E+01 + 61M2 104.008.21E-046.69E-022.06E+003.85E+012.78E-035.14E-027.36E-019.42E+00 + 61M2 150.002.48E-041.24E-022.71E-013.72E+009.41E-041.27E-021.35E-011.29E+00 + 61M2 280.003.33E-057.92E-049.84E-038.19E-021.51E-041.24E-038.20E-034.86E-02 + 61M2 500.005.61E-067.28E-055.67E-043.10E-032.85E-051.58E-047.01E-042.81E-03 + 61M3 2.364.33E+011.26E+073.34E+101.04E+135.09E+011.18E+072.63E+115.95E+14 + 61M3 3.362.23E+012.13E+063.30E+098.56E+111.74E+012.02E+062.28E+102.92E+13 + 61M3 5.367.95E+002.02E+051.62E+083.14E+104.20E+001.95E+059.10E+085.81E+11 + 61M3 9.361.95E+001.22E+044.76E+066.20E+087.69E-011.21E+042.02E+076.05E+09 + 61M3 16.364.08E-017.30E+021.48E+051.25E+071.40E-017.44E+024.74E+057.12E+07 + 61M3 26.001.01E-017.11E+018.54E+034.95E+053.43E-027.40E+012.23E+041.98E+06 + 61M3 41.002.38E-027.26E+005.32E+022.10E+048.61E-037.71E+001.18E+036.46E+04 + 61M3 53.001.03E-022.02E+001.12E+023.55E+033.96E-032.16E+002.31E+029.80E+03 + 61M3 71.003.88E-034.71E-011.92E+014.70E+021.64E-035.12E-013.73E+011.19E+03 + 61M3 104.001.07E-037.13E-021.95E+003.40E+015.22E-047.89E-023.64E+008.15E+01 + 61M3 150.003.09E-041.19E-022.21E-012.80E+001.75E-041.34E-024.13E-016.71E+00 + 61M3 280.003.90E-056.04E-045.88E-034.34E-022.82E-056.95E-041.17E-021.16E-01 + 61M3 500.006.46E-064.51E-052.44E-041.12E-035.50E-065.05E-055.08E-043.38E-03 + 61M4 2.051.05E+023.84E+052.82E+104.45E+141.48E+013.51E+054.12E+094.32E+12 + 61M4 3.052.98E+015.04E+041.73E+091.39E+134.06E+004.78E+042.84E+082.18E+11 + 61M4 5.055.39E+003.85E+034.96E+071.78E+117.65E-013.79E+039.92E+064.99E+09 + 61M4 9.056.47E-011.96E+028.10E+051.22E+091.06E-012.00E+022.18E+056.52E+07 + 61M4 16.057.07E-021.03E+011.42E+049.84E+061.45E-021.10E+015.45E+039.64E+05 + 61M4 26.001.00E-028.37E-014.75E+021.78E+052.59E-039.60E-012.56E+022.88E+04 + 61M4 41.001.49E-037.68E-021.95E+014.22E+034.92E-049.59E-021.47E+011.08E+03 + 61M4 53.005.00E-041.99E-023.27E+005.22E+021.90E-042.62E-022.99E+001.73E+02 + 61M4 71.001.42E-044.25E-034.32E-014.93E+016.39E-056.00E-034.92E-012.17E+01 + 61M4 104.002.72E-055.72E-043.17E-022.35E+001.51E-058.81E-044.79E-021.49E+00 + 61M4 150.005.60E-068.52E-052.71E-031.34E-013.74E-061.41E-045.26E-031.18E-01 + 61M4 280.004.02E-073.63E-064.79E-051.19E-033.43E-076.45E-061.32E-041.76E-03 + 61M4 500.003.64E-082.27E-071.47E-061.90E-053.78E-083.91E-074.81E-064.17E-05 + 61M5 2.031.57E+024.94E+054.77E+106.97E+149.01E+003.59E+042.06E+101.35E+15 + 61M5 3.034.36E+016.30E+042.84E+092.08E+132.45E+004.86E+031.25E+093.77E+13 + 61M5 5.037.68E+004.68E+037.95E+072.56E+114.63E-013.87E+023.59E+074.12E+11 + 61M5 9.038.99E-012.33E+021.27E+061.70E+096.54E-022.10E+016.00E+052.34E+09 + 61M5 16.039.59E-021.19E+012.17E+041.31E+079.16E-031.22E+001.09E+041.56E+07 + 61M5 26.001.33E-029.40E-017.01E+022.27E+051.68E-031.12E-013.73E+022.42E+05 + 61M5 41.001.95E-038.35E-022.78E+015.12E+033.31E-041.20E-021.57E+015.11E+03 + 61M5 53.006.46E-042.11E-024.53E+006.12E+021.31E-043.44E-032.64E+005.99E+02 + 61M5 71.001.82E-044.38E-035.77E-015.50E+014.51E-058.35E-043.50E-015.37E+01 + 61M5 104.003.46E-055.62E-043.97E-022.42E+001.11E-051.34E-042.53E-022.42E+00 + 61M5 150.007.13E-067.97E-053.11E-031.24E-012.90E-062.39E-052.09E-031.31E-01 + 61M5 280.005.34E-073.18E-064.54E-058.62E-043.04E-071.39E-063.27E-051.04E-03 + 61M5 500.005.38E-081.99E-071.15E-061.03E-054.16E-081.19E-078.73E-071.39E-05 + 61N+ 50.001.34E-021.34E+008.48E+013.31E+038.57E-023.57E+001.57E+025.96E+03 + 61N+ 70.005.16E-032.65E-011.13E+013.13E+023.16E-028.15E-012.19E+015.54E+02 + 61N+ 100.001.93E-035.19E-021.43E+002.81E+011.14E-021.85E-013.10E+005.15E+01 + 61N+ 150.006.19E-048.65E-031.44E-011.90E+003.59E-033.63E-023.71E-013.92E+00 + 61N+ 200.002.78E-042.59E-032.99E-022.98E-011.59E-031.20E-028.93E-026.95E-01 + 61N+ 500.002.65E-059.94E-054.07E-041.68E-031.34E-044.98E-041.69E-035.81E-03 + 62K 47.831.63E+003.68E+001.58E+002.39E-011.24E+011.97E+025.39E+023.27E+02 + 62K 48.531.58E+003.80E+002.26E+006.61E-011.19E+011.87E+025.46E+024.57E+02 + 62K 49.831.46E+003.93E+003.50E+001.97E+001.09E+011.68E+025.46E+026.82E+02 + 62K 53.031.25E+004.06E+006.13E+007.38E+009.17E+001.34E+025.21E+021.09E+03 + 62K 56.831.05E+003.94E+008.29E+001.51E+017.49E+001.03E+024.62E+021.34E+03 + 62K 61.008.71E-013.64E+009.50E+002.24E+016.09E+007.94E+013.91E+021.40E+03 + 62K 67.006.81E-013.13E+009.82E+002.87E+014.63E+005.61E+012.99E+021.27E+03 + 62K 75.005.06E-012.49E+008.92E+003.04E+013.34E+003.69E+012.08E+029.95E+02 + 62K 87.003.40E-011.74E+006.87E+002.61E+012.17E+002.13E+011.23E+026.35E+02 + 62K 100.002.34E-011.20E+004.93E+001.96E+011.46E+001.28E+017.30E+013.84E+02 + 62K 117.001.53E-017.70E-013.18E+001.28E+019.31E-017.26E+003.98E+012.06E+02 + 62K 130.001.15E-015.64E-012.30E+009.17E+006.90E-014.97E+002.63E+011.33E+02 + 62K 147.008.24E-023.89E-011.55E+006.06E+004.89E-013.21E+001.61E+017.84E+01 + 62K 170.005.57E-022.49E-019.59E-013.61E+003.26E-011.93E+009.07E+004.15E+01 + 62K 195.003.86E-021.63E-016.02E-012.17E+002.23E-011.20E+005.27E+002.27E+01 + 62K 260.001.81E-026.76E-022.25E-017.34E-011.02E-014.56E-011.72E+006.38E+00 + 62K 345.008.88E-032.92E-028.73E-022.56E-014.84E-021.83E-015.92E-011.88E+00 + 62K 440.004.96E-031.48E-024.04E-021.08E-012.58E-028.61E-022.46E-016.86E-01 + 62K 550.002.99E-038.27E-032.08E-025.09E-021.47E-024.43E-021.13E-012.83E-01 + 62K 780.001.43E-033.61E-038.10E-031.74E-026.21E-031.65E-023.63E-027.72E-02 + 62K 1050.008.09E-041.91E-033.93E-037.65E-033.05E-037.43E-031.48E-022.79E-02 + 62K 1300.005.51E-041.24E-032.43E-034.44E-031.86E-034.29E-038.02E-031.41E-02 + 62K 1550.004.07E-048.85E-041.66E-032.90E-031.24E-032.78E-034.96E-038.31E-03 + 62L1 8.745.17E+001.24E+037.54E+047.19E+052.51E+021.13E+059.02E+061.65E+08 + 62L1 9.444.54E+008.19E+026.39E+041.07E+061.99E+027.86E+045.89E+061.31E+08 + 62L1 10.743.63E+004.00E+024.17E+041.13E+061.36E+024.26E+042.89E+067.75E+07 + 62L1 13.942.24E+008.43E+011.31E+045.47E+056.22E+011.25E+046.88E+052.09E+07 + 62L1 17.741.39E+001.70E+013.70E+031.81E+053.03E+014.10E+031.84E+055.47E+06 + 62L1 21.009.76E-015.03E+001.41E+037.34E+041.84E+011.90E+037.34E+042.06E+06 + 62L1 27.005.66E-011.04E+003.02E+021.67E+048.70E+006.11E+021.90E+044.70E+05 + 62L1 35.003.15E-016.21E-015.50E+013.18E+034.04E+001.94E+024.78E+031.01E+05 + 62L1 47.001.57E-014.90E-017.94E+004.35E+021.69E+005.40E+011.03E+031.76E+04 + 62L1 60.008.64E-023.39E-012.16E+008.19E+018.27E-011.93E+012.95E+024.20E+03 + 62L1 77.004.63E-022.03E-019.08E-011.65E+014.00E-016.88E+008.45E+019.91E+02 + 62L1 90.003.12E-021.41E-015.92E-016.81E+002.55E-013.66E+003.93E+014.07E+02 + 62L1 107.002.00E-029.04E-023.71E-012.91E+001.55E-011.84E+001.71E+011.54E+02 + 62L1 130.001.21E-025.34E-022.15E-011.27E+008.92E-028.66E-016.80E+005.25E+01 + 62L1 155.007.66E-033.26E-021.27E-016.42E-015.44E-024.45E-013.02E+002.03E+01 + 62L1 220.003.11E-031.19E-024.28E-021.74E-012.07E-021.24E-016.39E-013.27E+00 + 62L1 305.001.37E-034.68E-031.52E-025.26E-028.57E-034.00E-021.62E-016.53E-01 + 62L1 400.007.17E-042.22E-036.58E-032.01E-024.21E-031.64E-025.55E-021.85E-01 + 62L1 510.004.13E-041.19E-033.22E-038.81E-032.26E-037.66E-032.24E-026.41E-02 + 62L1 740.001.89E-044.91E-041.17E-032.73E-038.93E-042.55E-036.15E-031.43E-02 + 62L11000.001.05E-042.56E-045.57E-041.16E-034.32E-041.11E-032.35E-034.76E-03 + 62L11500.005.15E-051.15E-042.23E-044.06E-041.68E-043.87E-047.20E-041.26E-03 + 62L2 8.311.07E+017.25E+042.28E+078.69E+082.79E+014.70E+031.32E+051.15E+06 + 62L2 9.018.57E+004.84E+041.42E+076.54E+082.18E+013.43E+031.17E+051.73E+06 + 62L2 10.315.86E+002.47E+046.44E+063.55E+081.45E+012.03E+038.25E+041.91E+06 + 62L2 13.512.69E+006.41E+031.32E+068.12E+076.35E+007.05E+023.21E+041.04E+06 + 62L2 17.311.29E+001.87E+033.07E+051.84E+072.99E+002.66E+021.18E+044.05E+05 + 62L2 21.007.15E-017.19E+029.88E+045.50E+061.66E+001.24E+025.15E+031.72E+05 + 62L2 27.003.28E-012.09E+022.26E+041.11E+067.76E-014.63E+011.69E+035.14E+04 + 62L2 35.001.44E-015.87E+014.97E+032.06E+053.54E-011.67E+015.19E+021.38E+04 + 62L2 47.005.57E-021.40E+018.96E+023.01E+041.46E-015.26E+001.33E+022.94E+03 + 62L2 60.002.51E-024.35E+002.19E+026.12E+037.00E-022.03E+004.29E+017.97E+02 + 62L2 77.001.10E-021.33E+005.27E+011.21E+033.32E-027.72E-011.35E+012.08E+02 + 62L2 90.006.57E-036.37E-012.18E+014.41E+022.08E-024.23E-016.53E+008.97E+01 + 62L2 107.003.70E-032.84E-018.25E+001.45E+021.24E-022.18E-012.93E+003.53E+01 + 62L2 130.001.94E-031.15E-012.80E+004.20E+016.99E-031.04E-011.20E+001.24E+01 + 62L2 155.001.09E-035.18E-021.07E+001.39E+014.16E-035.33E-025.38E-014.87E+00 + 62L2 220.003.47E-041.08E-021.64E-011.61E+001.49E-031.44E-021.11E-017.76E-01 + 62L2 305.001.22E-042.65E-033.02E-022.32E-015.75E-044.37E-032.66E-021.46E-01 + 62L2 400.005.28E-058.57E-047.86E-034.97E-022.63E-041.66E-038.40E-033.84E-02 + 62L2 510.002.54E-053.24E-042.47E-031.32E-021.31E-047.11E-043.08E-031.20E-02 + 62L2 740.008.71E-067.88E-054.61E-041.95E-034.56E-052.01E-047.05E-042.22E-03 + 62L21000.003.84E-062.70E-051.30E-044.65E-041.96E-057.52E-052.27E-046.14E-04 + 62L21500.001.35E-067.08E-062.71E-057.95E-056.36E-062.10E-055.35E-051.22E-04 + 62L3 7.722.27E+011.59E+055.65E+072.42E+096.95E+001.49E+053.22E+087.21E+10 + 62L3 8.421.77E+011.02E+053.36E+071.71E+095.32E+009.64E+041.79E+083.70E+10 + 62L3 9.721.16E+014.95E+041.41E+078.46E+083.42E+004.71E+046.75E+071.23E+10 + 62L3 12.924.96E+001.17E+042.55E+061.66E+081.42E+001.14E+049.94E+061.40E+09 + 62L3 16.722.24E+003.18E+035.37E+053.32E+076.45E-013.15E+031.78E+061.98E+08 + 62L3 21.001.09E+001.00E+031.35E+057.58E+063.20E-011.01E+033.96E+053.55E+07 + 62L3 27.004.86E-012.83E+022.97E+041.44E+061.48E-012.89E+027.66E+045.46E+06 + 62L3 35.002.07E-017.66E+016.20E+032.52E+056.71E-027.97E+011.44E+048.05E+05 + 62L3 47.007.73E-021.74E+011.05E+033.42E+042.73E-021.85E+012.20E+039.45E+04 + 62L3 60.003.38E-025.14E+002.41E+026.48E+031.30E-025.53E+004.78E+021.64E+04 + 62L3 77.001.44E-021.48E+005.38E+011.18E+036.10E-031.62E+001.03E+022.82E+03 + 62L3 90.008.43E-036.84E-012.11E+014.07E+023.81E-037.54E-013.96E+019.52E+02 + 62L3 107.004.65E-032.91E-017.52E+001.25E+022.26E-033.24E-011.40E+012.89E+02 + 62L3 130.002.38E-031.12E-012.36E+003.32E+011.26E-031.26E-014.39E+007.71E+01 + 62L3 155.001.31E-034.72E-028.36E-011.01E+017.46E-045.38E-021.56E+002.38E+01 + 62L3 220.004.02E-048.75E-031.08E-019.66E-012.65E-041.01E-022.09E-012.41E+00 + 62L3 305.001.38E-041.89E-031.67E-021.13E-011.02E-042.20E-033.37E-023.06E-01 + 62L3 400.005.88E-055.53E-043.71E-032.02E-024.73E-056.37E-047.71E-035.83E-02 + 62L3 510.002.83E-051.92E-041.01E-034.56E-032.41E-052.17E-042.13E-031.38E-02 + 62L3 740.009.84E-064.22E-051.56E-045.36E-048.96E-064.51E-053.16E-041.65E-03 + 62L31000.004.46E-061.38E-053.94E-051.10E-044.23E-061.40E-057.22E-053.19E-04 + 62L31500.001.72E-063.66E-067.65E-061.66E-051.68E-063.48E-061.12E-053.90E-05 + 62M1 2.727.47E+002.77E+041.53E+064.88E+081.74E+038.03E+066.40E+091.16E+12 + 62M1 3.725.10E+007.61E+036.30E+054.69E+076.84E+021.73E+068.44E+081.32E+11 + 62M1 5.722.62E+001.14E+031.60E+056.10E+061.89E+022.12E+055.52E+076.52E+09 + 62M1 9.721.00E+008.47E+011.68E+041.00E+063.87E+011.65E+042.11E+061.66E+08 + 62M1 16.723.36E-013.83E+001.05E+036.83E+047.67E+001.28E+038.47E+044.21E+06 + 62M1 26.001.28E-013.44E-018.24E+015.19E+032.06E+001.69E+026.80E+032.29E+05 + 62M1 41.004.47E-021.39E-014.95E+002.85E+025.37E-012.24E+015.55E+021.25E+04 + 62M1 53.002.41E-029.24E-021.13E+005.22E+012.52E-017.38E+001.42E+022.52E+03 + 62M1 71.001.17E-025.11E-023.07E-017.84E+001.07E-012.16E+003.11E+014.28E+02 + 62M1 104.004.42E-032.01E-029.05E-029.04E-013.57E-024.58E-014.62E+004.55E+01 + 62M1 150.001.72E-037.37E-033.01E-021.74E-011.26E-021.10E-018.07E-015.81E+00 + 62M1 280.003.53E-041.24E-034.20E-031.57E-022.28E-031.16E-025.11E-022.25E-01 + 62M1 500.009.02E-052.61E-047.22E-042.03E-035.02E-041.74E-035.23E-031.54E-02 + 62M2 2.541.75E+015.89E+061.43E+104.24E+122.17E+022.83E+056.17E+074.49E+09 + 62M2 3.541.00E+011.12E+061.66E+094.19E+118.00E+016.32E+041.18E+071.11E+09 + 62M2 5.544.04E+001.19E+059.45E+071.83E+102.07E+018.74E+031.24E+061.16E+08 + 62M2 9.541.11E+007.94E+033.15E+064.16E+084.02E+008.50E+028.28E+046.16E+06 + 62M2 16.542.56E-015.19E+021.09E+059.38E+067.65E-018.58E+015.51E+032.91E+05 + 62M2 26.006.96E-025.61E+017.14E+034.29E+051.96E-011.36E+016.08E+022.32E+04 + 62M2 41.001.74E-026.13E+004.83E+021.98E+045.00E-022.19E+006.75E+011.82E+03 + 62M2 53.007.80E-031.79E+001.08E+023.56E+032.32E-027.93E-011.97E+014.33E+02 + 62M2 71.003.06E-034.44E-012.00E+015.14E+029.70E-032.52E-014.92E+008.52E+01 + 62M2 104.008.88E-047.42E-022.29E+004.26E+013.12E-035.74E-028.16E-011.04E+01 + 62M2 150.002.69E-041.38E-023.01E-014.12E+001.06E-031.42E-021.50E-011.43E+00 + 62M2 280.003.64E-058.83E-041.10E-029.13E-021.71E-041.40E-039.16E-035.41E-02 + 62M2 500.006.21E-068.15E-056.36E-043.47E-033.23E-051.78E-047.88E-043.14E-03 + 62M3 2.424.13E+011.21E+073.12E+109.43E+125.10E+011.18E+072.56E+115.68E+14 + 62M3 3.422.16E+012.12E+063.24E+098.19E+111.79E+012.09E+062.34E+102.97E+13 + 62M3 5.427.89E+002.09E+051.66E+083.15E+104.40E+002.09E+059.80E+086.24E+11 + 62M3 9.421.98E+001.29E+045.02E+066.43E+088.18E-011.33E+042.25E+076.74E+09 + 62M3 16.424.21E-017.85E+021.58E+051.32E+071.50E-018.30E+025.36E+058.06E+07 + 62M3 26.001.06E-017.79E+019.36E+035.37E+053.72E-028.42E+012.58E+042.30E+06 + 62M3 41.002.52E-027.96E+005.82E+022.28E+049.36E-038.77E+001.35E+037.46E+04 + 62M3 53.001.09E-022.21E+001.23E+023.85E+034.31E-032.46E+002.66E+021.13E+04 + 62M3 71.004.13E-035.16E-012.10E+015.12E+021.79E-035.81E-014.28E+011.37E+03 + 62M3 104.001.14E-037.82E-022.13E+003.71E+015.68E-048.95E-024.16E+009.32E+01 + 62M3 150.003.32E-041.30E-022.42E-013.05E+001.91E-041.52E-024.71E-017.65E+00 + 62M3 280.004.20E-056.63E-046.46E-034.75E-023.06E-057.84E-041.33E-021.31E-01 + 62M3 500.006.99E-064.95E-052.68E-041.23E-035.98E-065.66E-055.75E-043.82E-03 + 62M4 2.111.02E+023.71E+052.67E+104.14E+141.50E+013.54E+054.06E+094.14E+12 + 62M4 3.112.98E+015.08E+041.74E+091.39E+134.23E+005.04E+042.96E+082.23E+11 + 62M4 5.115.55E+004.02E+035.24E+071.89E+118.16E-014.13E+031.08E+075.36E+09 + 62M4 9.116.84E-012.10E+028.85E+051.35E+091.15E-012.23E+022.44E+057.24E+07 + 62M4 16.117.61E-021.12E+011.58E+041.11E+071.59E-021.25E+016.20E+031.09E+06 + 62M4 26.001.10E-029.33E-015.42E+022.06E+052.89E-031.11E+002.97E+023.33E+04 + 62M4 41.001.65E-038.60E-022.23E+014.87E+035.53E-041.11E-011.71E+011.25E+03 + 62M4 53.005.55E-042.23E-023.73E+006.02E+022.14E-043.03E-023.46E+002.00E+02 + 62M4 71.001.58E-044.79E-034.93E-015.69E+017.20E-056.93E-035.71E-012.51E+01 + 62M4 104.003.07E-056.47E-043.62E-022.72E+001.71E-051.02E-035.56E-021.73E+00 + 62M4 150.006.35E-069.66E-053.10E-031.55E-014.24E-061.63E-046.11E-031.37E-01 + 62M4 280.004.42E-074.14E-065.48E-051.37E-033.90E-077.48E-061.53E-042.05E-03 + 62M4 500.004.59E-082.59E-071.69E-062.20E-054.31E-084.53E-075.61E-064.86E-05 + 62M5 2.081.52E+024.73E+054.54E+106.48E+149.08E+003.56E+042.03E+101.31E+15 + 62M5 3.084.35E+016.30E+042.87E+092.09E+132.54E+005.02E+031.31E+093.92E+13 + 62M5 5.087.91E+004.85E+038.42E+072.72E+114.92E-014.14E+023.95E+074.56E+11 + 62M5 9.089.48E-012.47E+021.39E+061.87E+097.07E-022.30E+016.81E+052.69E+09 + 62M5 16.081.03E-011.29E+012.42E+041.47E+071.00E-021.35E+001.26E+041.83E+07 + 62M5 26.001.46E-021.04E+008.02E+022.61E+051.87E-031.26E-014.41E+022.91E+05 + 62M5 41.002.15E-039.25E-023.18E+015.89E+033.69E-041.35E-021.85E+016.13E+03 + 62M5 53.007.14E-042.34E-025.18E+007.04E+021.46E-043.87E-033.12E+007.17E+02 + 62M5 71.002.02E-044.87E-036.60E-016.33E+015.04E-059.41E-044.12E-016.40E+01 + 62M5 104.003.90E-056.28E-044.54E-022.78E+001.25E-051.51E-042.98E-022.88E+00 + 62M5 150.008.06E-068.92E-053.57E-031.43E-013.26E-062.69E-052.45E-031.55E-01 + 62M5 280.005.77E-073.56E-065.19E-059.91E-043.42E-071.57E-063.82E-051.22E-03 + 62M5 500.006.86E-082.25E-071.32E-061.19E-054.68E-081.34E-071.01E-061.64E-05 + 62N+ 50.001.41E-021.48E+009.40E+013.67E+039.53E-024.02E+001.79E+026.87E+03 + 62N+ 70.005.42E-032.92E-011.25E+013.48E+023.51E-029.16E-012.50E+016.35E+02 + 62N+ 100.002.03E-035.68E-021.59E+003.11E+011.27E-022.08E-013.50E+005.86E+01 + 62N+ 150.006.53E-049.42E-031.59E-012.11E+003.98E-034.05E-024.17E-014.42E+00 + 62N+ 200.002.93E-042.81E-033.30E-023.31E-011.76E-031.33E-029.98E-027.80E-01 + 62N+ 500.002.84E-051.07E-044.43E-041.85E-031.50E-045.56E-041.88E-036.49E-03 + 63K 49.521.52E+003.29E+001.35E+001.89E-011.22E+011.86E+024.90E+022.84E+02 + 63K 50.221.47E+003.40E+001.92E+005.19E-011.18E+011.77E+024.98E+023.96E+02 + 63K 51.521.37E+003.51E+002.95E+001.55E+001.08E+011.60E+024.97E+025.87E+02 + 63K 54.721.18E+003.63E+005.16E+005.81E+009.13E+001.28E+024.77E+029.44E+02 + 63K 58.529.91E-013.54E+007.02E+001.20E+017.50E+009.99E+014.26E+021.17E+03 + 63K 63.008.18E-013.27E+008.17E+001.85E+016.05E+007.59E+013.59E+021.23E+03 + 63K 69.006.45E-012.83E+008.49E+002.38E+014.64E+005.42E+012.78E+021.13E+03 + 63K 77.004.83E-012.27E+007.80E+002.55E+013.38E+003.61E+011.96E+028.98E+02 + 63K 89.003.28E-011.61E+006.11E+002.23E+012.22E+002.12E+011.18E+025.86E+02 + 63K 102.002.28E-011.13E+004.46E+001.71E+011.50E+001.29E+017.10E+013.61E+02 + 63K 119.001.50E-017.32E-012.92E+001.14E+019.67E-017.38E+003.93E+011.98E+02 + 63K 132.001.14E-015.41E-012.14E+008.31E+007.21E-015.09E+002.62E+011.29E+02 + 63K 149.008.20E-023.76E-011.46E+005.58E+005.13E-013.31E+001.62E+017.70E+01 + 63K 172.005.58E-022.43E-019.15E-013.38E+003.44E-012.00E+009.21E+004.13E+01 + 63K 200.003.73E-021.53E-015.52E-011.95E+002.27E-011.19E+005.09E+002.13E+01 + 63K 265.001.79E-026.53E-022.13E-016.86E-011.06E-014.63E-011.71E+006.21E+00 + 63K 350.008.92E-032.89E-028.52E-022.47E-015.06E-021.89E-016.02E-011.88E+00 + 63K 440.005.17E-031.53E-024.16E-021.11E-012.80E-029.30E-022.64E-017.32E-01 + 63K 550.003.12E-038.61E-032.16E-025.27E-021.59E-024.78E-021.22E-013.02E-01 + 63K 780.001.50E-033.78E-038.48E-031.82E-026.70E-031.77E-023.90E-028.27E-02 + 63K 1050.008.48E-042.00E-034.14E-038.05E-033.29E-038.00E-031.59E-022.99E-02 + 63K 1300.005.78E-041.31E-032.56E-034.68E-031.99E-034.62E-038.62E-031.52E-02 + 63K 1550.004.27E-049.33E-041.75E-033.06E-031.33E-032.98E-035.33E-038.91E-03 + 63L1 9.054.82E+001.14E+036.60E+045.81E+052.49E+021.07E+058.20E+061.44E+08 + 63L1 9.754.26E+007.67E+025.65E+048.76E+051.99E+027.54E+045.44E+061.15E+08 + 63L1 11.053.43E+003.84E+023.77E+049.59E+051.37E+024.17E+042.73E+066.98E+07 + 63L1 14.252.14E+008.59E+011.24E+044.90E+056.41E+011.26E+046.74E+051.97E+07 + 63L1 18.051.34E+001.84E+013.65E+031.70E+053.17E+014.23E+031.85E+055.32E+06 + 63L1 22.008.92E-014.57E+001.19E+035.95E+041.76E+011.71E+036.31E+041.70E+06 + 63L1 28.005.29E-011.03E+002.74E+021.44E+048.61E+005.78E+021.73E+044.13E+05 + 63L1 36.003.00E-015.81E-015.38E+012.94E+034.09E+001.90E+024.55E+039.32E+04 + 63L1 48.001.52E-014.50E-018.33E+004.31E+021.75E+005.48E+011.02E+031.70E+04 + 63L1 61.008.50E-023.16E-012.27E+008.53E+018.68E-011.99E+012.99E+024.17E+03 + 63L1 78.004.61E-021.93E-019.08E-011.76E+014.24E-017.21E+008.73E+011.01E+03 + 63L1 91.003.12E-021.35E-015.81E-017.27E+002.72E-013.87E+004.10E+014.18E+02 + 63L1 108.002.01E-028.79E-023.63E-013.07E+001.66E-011.96E+001.79E+011.60E+02 + 63L1 131.001.22E-025.25E-022.11E-011.32E+009.60E-029.26E-017.20E+005.50E+01 + 63L1 160.007.30E-033.01E-021.17E-015.97E-015.47E-024.34E-012.87E+001.87E+01 + 63L1 225.003.05E-031.14E-024.07E-021.66E-012.13E-021.25E-016.34E-013.18E+00 + 63L1 310.001.38E-034.62E-031.49E-025.17E-029.00E-034.14E-021.66E-016.58E-01 + 63L1 400.007.51E-042.32E-036.85E-032.11E-024.60E-031.79E-026.06E-022.02E-01 + 63L1 510.004.33E-041.24E-033.38E-039.30E-032.47E-038.36E-032.44E-026.98E-02 + 63L1 740.001.99E-045.18E-041.24E-032.90E-039.73E-042.78E-036.69E-031.55E-02 + 63L11000.001.11E-042.71E-045.92E-041.23E-034.69E-041.21E-032.55E-035.17E-03 + 63L11500.005.43E-051.22E-042.38E-044.34E-041.81E-044.20E-047.81E-041.36E-03 + 63L2 8.621.00E+016.63E+041.99E+077.25E+082.77E+014.45E+031.19E+059.57E+05 + 63L2 9.328.08E+004.48E+041.26E+075.54E+082.18E+013.28E+031.06E+051.46E+06 + 63L2 10.625.60E+002.33E+045.88E+063.08E+081.46E+011.97E+037.63E+041.66E+06 + 63L2 13.822.63E+006.27E+031.26E+067.42E+076.58E+007.05E+023.08E+049.47E+05 + 63L2 17.621.28E+001.88E+033.02E+051.74E+073.14E+002.72E+021.16E+043.83E+05 + 63L2 22.006.51E-016.26E+028.19E+044.36E+061.60E+001.14E+024.49E+031.44E+05 + 63L2 28.003.08E-011.91E+022.00E+049.38E+057.72E-014.40E+011.54E+034.52E+04 + 63L2 36.001.39E-015.61E+014.60E+031.85E+053.61E-011.64E+014.93E+021.27E+04 + 63L2 48.005.53E-021.39E+018.68E+022.84E+041.52E-015.33E+001.31E+022.82E+03 + 63L2 61.002.53E-024.41E+002.19E+025.97E+037.41E-022.10E+004.33E+017.87E+02 + 63L2 78.001.13E-021.37E+005.38E+011.21E+033.55E-028.10E-011.39E+012.10E+02 + 63L2 91.006.79E-036.65E-012.25E+014.48E+022.25E-024.47E-016.79E+009.18E+01 + 63L2 108.003.86E-032.99E-018.61E+001.49E+021.35E-022.32E-013.08E+003.66E+01 + 63L2 131.002.04E-031.23E-012.95E+004.39E+017.63E-031.11E-011.27E+001.30E+01 + 63L2 160.001.06E-034.94E-029.90E-011.25E+014.23E-035.24E-025.13E-014.51E+00 + 63L2 225.003.49E-041.08E-021.61E-011.55E+001.56E-031.48E-021.11E-017.59E-01 + 63L2 310.001.26E-042.73E-033.09E-022.34E-016.15E-044.60E-032.75E-021.49E-01 + 63L2 400.005.75E-059.50E-048.73E-035.50E-022.95E-041.85E-039.34E-034.25E-02 + 63L2 510.002.78E-053.60E-042.74E-031.46E-021.47E-047.95E-043.43E-031.34E-02 + 63L2 740.009.61E-068.77E-055.14E-042.17E-035.14E-052.26E-047.87E-042.48E-03 + 63L21000.004.20E-063.01E-051.45E-045.19E-042.21E-058.46E-052.54E-046.86E-04 + 63L21500.001.50E-067.89E-063.03E-058.90E-057.17E-062.37E-056.01E-051.37E-04 + 63L3 7.982.13E+011.46E+054.99E+072.04E+096.75E+001.42E+052.95E+086.39E+10 + 63L3 8.681.67E+019.53E+043.01E+071.47E+095.22E+009.33E+041.67E+083.35E+10 + 63L3 9.981.11E+014.70E+041.30E+077.44E+083.39E+004.64E+046.49E+071.15E+10 + 63L3 13.184.85E+001.15E+042.44E+061.53E+081.44E+001.16E+049.99E+061.37E+09 + 63L3 16.982.22E+003.19E+035.28E+053.16E+076.62E-013.28E+031.85E+062.01E+08 + 63L3 22.009.82E-018.62E+021.11E+055.92E+062.99E-019.02E+023.34E+052.86E+07 + 63L3 28.004.52E-012.56E+022.58E+041.20E+061.43E-012.72E+026.92E+044.74E+06 + 63L3 36.001.98E-017.22E+015.65E+032.23E+056.63E-027.80E+011.37E+047.45E+05 + 63L3 48.007.59E-021.70E+019.98E+023.18E+042.76E-021.88E+012.20E+039.20E+04 + 63L3 61.003.38E-025.14E+002.36E+026.22E+031.33E-025.73E+004.89E+021.65E+04 + 63L3 78.001.46E-021.51E+005.40E+011.16E+036.33E-031.71E+001.07E+022.92E+03 + 63L3 91.008.60E-037.04E-012.14E+014.06E+023.97E-038.02E-014.19E+019.96E+02 + 63L3 108.004.78E-033.02E-017.72E+001.26E+022.37E-033.47E-011.49E+013.06E+02 + 63L3 131.002.47E-031.17E-012.45E+003.40E+011.33E-031.36E-014.73E+008.25E+01 + 63L3 160.001.25E-034.40E-027.52E-018.80E+007.32E-045.18E-021.46E+002.17E+01 + 63L3 225.003.98E-048.55E-031.03E-019.01E-012.67E-041.02E-022.07E-012.35E+00 + 63L3 310.001.40E-041.91E-031.66E-021.11E-011.05E-042.27E-033.46E-023.11E-01 + 63L3 400.006.29E-056.01E-044.04E-032.19E-025.10E-057.09E-048.64E-036.54E-02 + 63L3 510.003.02E-052.09E-041.10E-034.95E-032.60E-052.41E-042.38E-031.54E-02 + 63L3 740.001.05E-054.57E-051.70E-045.83E-049.64E-064.98E-053.52E-041.84E-03 + 63L31000.004.80E-061.50E-054.28E-051.20E-044.55E-061.53E-058.03E-053.55E-04 + 63L31500.001.85E-063.94E-068.29E-061.80E-051.80E-063.80E-061.24E-054.34E-05 + 63M1 2.807.09E+002.68E+041.51E+064.27E+081.78E+037.94E+066.17E+091.08E+12 + 63M1 3.804.90E+007.60E+036.16E+054.60E+077.13E+021.77E+068.54E+081.30E+11 + 63M1 5.802.56E+001.19E+031.59E+055.94E+062.01E+022.25E+055.82E+076.75E+09 + 63M1 9.809.95E-019.29E+011.74E+049.95E+054.19E+011.80E+042.30E+061.78E+08 + 63M1 16.803.37E-014.53E+001.14E+037.12E+048.38E+001.42E+039.33E+044.59E+06 + 63M1 26.001.31E-013.94E-019.48E+015.73E+032.29E+001.90E+027.65E+032.57E+05 + 63M1 41.004.58E-021.35E-015.91E+003.25E+025.95E-012.50E+016.22E+021.39E+04 + 63M1 53.002.48E-028.96E-021.32E+006.06E+012.80E-018.25E+001.58E+022.81E+03 + 63M1 71.001.20E-025.03E-023.36E-019.17E+001.19E-012.40E+003.46E+014.75E+02 + 63M1 104.004.58E-032.01E-029.32E-021.02E+003.95E-025.09E-015.13E+005.03E+01 + 63M1 150.001.79E-037.49E-033.07E-021.88E-011.40E-021.22E-018.92E-016.42E+00 + 63M1 280.003.70E-041.28E-034.36E-031.66E-022.52E-031.28E-025.63E-022.47E-01 + 63M1 500.009.52E-052.75E-047.62E-042.16E-035.52E-041.92E-035.74E-031.69E-02 + 63M2 2.611.66E+015.62E+061.33E+103.81E+122.22E+022.80E+055.90E+074.03E+09 + 63M2 3.619.70E+001.11E+061.62E+093.99E+118.37E+016.48E+041.17E+071.05E+09 + 63M2 5.613.99E+001.23E+059.67E+071.83E+102.22E+019.23E+031.28E+061.16E+08 + 63M2 9.611.12E+008.42E+033.33E+064.32E+084.38E+009.17E+028.78E+046.38E+06 + 63M2 16.612.64E-015.60E+021.17E+059.97E+068.42E-019.36E+015.93E+033.09E+05 + 63M2 26.007.33E-026.19E+017.89E+034.70E+052.19E-011.51E+016.69E+022.53E+04 + 63M2 41.001.85E-026.78E+005.33E+022.18E+045.59E-022.43E+007.44E+011.98E+03 + 63M2 53.008.32E-031.97E+001.19E+023.92E+032.60E-028.81E-012.18E+014.74E+02 + 63M2 71.003.28E-034.91E-012.21E+015.66E+021.09E-022.80E-015.43E+009.35E+01 + 63M2 104.009.59E-048.22E-022.54E+004.70E+013.51E-036.40E-029.04E-011.14E+01 + 63M2 150.002.92E-041.54E-023.34E-014.56E+001.19E-031.59E-021.67E-011.58E+00 + 63M2 280.003.97E-059.85E-041.23E-021.02E-011.93E-041.57E-031.02E-026.02E-02 + 63M2 500.006.84E-069.12E-057.12E-043.89E-033.66E-052.01E-048.84E-043.52E-03 + 63M3 2.483.96E+011.17E+072.94E+108.64E+125.12E+011.18E+072.52E+115.47E+14 + 63M3 3.482.11E+012.12E+063.20E+097.89E+111.83E+012.17E+062.42E+103.05E+13 + 63M3 5.487.85E+002.16E+051.71E+083.17E+104.61E+002.25E+051.06E+096.73E+11 + 63M3 9.482.01E+001.37E+045.30E+066.67E+088.70E-011.46E+042.50E+077.51E+09 + 63M3 16.484.34E-018.43E+021.69E+051.39E+071.61E-019.25E+026.06E+059.12E+07 + 63M3 26.001.11E-018.53E+011.02E+045.83E+054.04E-029.56E+012.97E+042.66E+06 + 63M3 41.002.66E-028.72E+006.37E+022.47E+041.02E-029.95E+001.56E+038.59E+04 + 63M3 53.001.15E-022.42E+001.34E+024.18E+034.68E-032.79E+003.05E+021.30E+04 + 63M3 71.004.38E-035.65E-012.30E+015.56E+021.94E-036.60E-014.91E+011.57E+03 + 63M3 104.001.22E-038.57E-022.33E+004.03E+016.17E-041.01E-014.75E+001.06E+02 + 63M3 150.003.55E-041.43E-022.65E-013.32E+002.07E-041.71E-025.36E-018.71E+00 + 63M3 280.004.55E-057.28E-047.08E-035.19E-023.33E-058.83E-041.50E-021.49E-01 + 63M3 500.007.53E-065.42E-052.94E-041.35E-036.50E-066.34E-056.49E-044.32E-03 + 63M4 2.169.85E+013.58E+052.52E+103.85E+141.51E+013.57E+054.00E+093.97E+12 + 63M4 3.162.98E+015.11E+041.74E+091.39E+134.39E+005.29E+043.08E+082.27E+11 + 63M4 5.165.71E+004.19E+035.52E+072.00E+118.68E-014.49E+031.18E+075.74E+09 + 63M4 9.167.21E-012.25E+029.64E+051.48E+091.25E-012.49E+022.73E+058.02E+07 + 63M4 16.168.17E-021.22E+011.76E+041.24E+071.75E-021.41E+017.04E+031.23E+06 + 63M4 26.001.21E-021.04E+006.17E+022.37E+053.23E-031.27E+003.44E+023.85E+04 + 63M4 41.001.82E-039.61E-022.54E+015.60E+036.19E-041.27E-011.98E+011.45E+03 + 63M4 53.006.15E-042.50E-024.25E+006.93E+022.40E-043.49E-024.01E+002.31E+02 + 63M4 71.001.76E-045.38E-035.62E-016.55E+018.10E-058.00E-036.61E-012.90E+01 + 63M4 104.003.41E-057.30E-044.13E-023.13E+001.92E-051.18E-036.44E-022.00E+00 + 63M4 150.007.06E-061.09E-043.54E-031.78E-014.79E-061.89E-047.09E-031.59E-01 + 63M4 280.005.07E-074.72E-066.27E-051.58E-034.42E-078.65E-061.78E-042.38E-03 + 63M4 500.005.17E-082.98E-071.94E-062.54E-054.89E-085.24E-076.52E-065.65E-05 + 63M5 2.131.48E+024.55E+054.35E+106.10E+149.18E+003.55E+042.03E+101.28E+15 + 63M5 3.134.35E+016.32E+042.91E+092.10E+132.64E+005.21E+031.37E+094.11E+13 + 63M5 5.138.13E+005.03E+038.93E+072.89E+115.22E-014.44E+024.34E+075.05E+11 + 63M5 9.139.99E-012.63E+021.52E+062.06E+097.63E-022.51E+017.72E+053.10E+09 + 63M5 16.131.10E-011.39E+012.70E+041.65E+071.09E-021.49E+001.45E+042.14E+07 + 63M5 26.001.59E-021.14E+009.15E+023.00E+052.07E-031.41E-015.19E+023.49E+05 + 63M5 41.002.36E-031.02E-013.63E+016.76E+034.10E-041.52E-022.18E+017.32E+03 + 63M5 53.007.87E-042.60E-025.92E+008.08E+021.63E-044.35E-033.67E+008.55E+02 + 63M5 71.002.23E-045.41E-037.54E-017.26E+015.63E-051.06E-034.85E-017.62E+01 + 63M5 104.004.28E-056.99E-045.18E-023.19E+001.39E-051.70E-043.50E-023.41E+00 + 63M5 150.008.88E-069.97E-054.07E-031.64E-013.65E-063.03E-052.87E-031.83E-01 + 63M5 280.006.63E-074.02E-065.92E-051.14E-033.84E-071.77E-064.46E-051.44E-03 + 63M5 500.007.06E-082.50E-071.49E-061.36E-055.26E-081.51E-071.16E-061.92E-05 + 63N+ 50.001.47E-021.63E+001.04E+024.06E+031.06E-014.52E+002.05E+027.90E+03 + 63N+ 70.005.68E-033.20E-011.38E+013.83E+023.91E-021.03E+002.83E+017.25E+02 + 63N+ 100.002.13E-036.21E-021.75E+003.43E+011.41E-022.32E-013.95E+006.64E+01 + 63N+ 150.006.87E-041.02E-021.75E-012.33E+004.42E-034.51E-024.67E-014.98E+00 + 63N+ 200.003.09E-043.04E-033.63E-023.65E-011.95E-031.48E-021.11E-018.75E-01 + 63N+ 500.003.00E-051.15E-044.86E-042.05E-031.64E-046.10E-042.07E-037.18E-03 + 64K 51.241.42E+002.94E+001.16E+001.52E-011.21E+011.76E+024.47E+022.49E+02 + 64K 51.941.38E+003.04E+001.63E+004.13E-011.16E+011.68E+024.54E+023.44E+02 + 64K 53.241.28E+003.13E+002.49E+001.22E+001.07E+011.52E+024.53E+025.08E+02 + 64K 56.441.11E+003.25E+004.36E+004.60E+009.10E+001.23E+024.37E+028.18E+02 + 64K 60.249.39E-013.18E+005.96E+009.64E+007.52E+009.65E+013.93E+021.02E+03 + 64K 64.008.02E-013.00E+006.89E+001.42E+016.30E+007.71E+013.44E+021.09E+03 + 64K 70.006.35E-012.63E+007.37E+001.92E+014.86E+005.53E+012.70E+021.03E+03 + 64K 78.004.78E-012.14E+006.94E+002.14E+013.55E+003.71E+011.93E+028.39E+02 + 64K 90.003.27E-011.54E+005.57E+001.95E+012.35E+002.19E+011.18E+025.60E+02 + 64K 103.002.28E-011.09E+004.13E+001.53E+011.59E+001.34E+017.17E+013.52E+02 + 64K 120.001.51E-017.12E-012.76E+001.04E+011.03E+007.73E+004.01E+011.96E+02 + 64K 133.001.15E-015.29E-012.04E+007.71E+007.69E-015.35E+002.69E+011.29E+02 + 64K 150.008.31E-023.71E-011.41E+005.25E+005.48E-013.49E+001.68E+017.77E+01 + 64K 173.005.67E-022.42E-018.90E-013.22E+003.68E-012.12E+009.58E+004.21E+01 + 64K 200.003.86E-021.56E-015.51E-011.92E+002.47E-011.29E+005.42E+002.24E+01 + 64K 265.001.86E-026.67E-022.16E-016.88E-011.15E-015.00E-011.83E+006.57E+00 + 64K 350.009.28E-032.97E-028.71E-022.51E-015.49E-022.04E-016.45E-012.00E+00 + 64K 440.005.39E-031.59E-024.29E-021.14E-013.03E-021.00E-012.82E-017.79E-01 + 64K 550.003.26E-038.95E-032.24E-025.46E-021.72E-025.16E-021.31E-013.22E-01 + 64K 780.001.57E-033.95E-038.88E-031.90E-027.23E-031.91E-024.19E-028.84E-02 + 64K 1050.008.89E-042.10E-034.35E-038.47E-033.54E-038.61E-031.70E-023.20E-02 + 64K 1300.006.05E-041.38E-032.70E-034.94E-032.14E-034.97E-039.25E-031.62E-02 + 64K 1550.004.48E-049.82E-041.85E-033.24E-031.43E-033.21E-035.72E-039.55E-03 + 64L1 9.384.51E+001.05E+035.80E+044.78E+052.46E+021.02E+057.47E+061.25E+08 + 64L1 10.084.00E+007.18E+025.02E+047.28E+051.99E+027.23E+045.03E+061.02E+08 + 64L1 11.383.24E+003.69E+023.41E+048.16E+051.38E+024.07E+042.57E+066.29E+07 + 64L1 14.582.05E+008.71E+011.18E+044.39E+056.60E+011.27E+046.59E+051.85E+07 + 64L1 18.381.30E+001.98E+013.60E+031.60E+053.31E+014.35E+031.86E+055.17E+06 + 64L1 22.008.99E-015.73E+001.32E+036.25E+041.94E+011.91E+036.98E+041.84E+06 + 64L1 28.005.35E-011.22E+003.11E+021.56E+049.47E+006.43E+021.91E+044.49E+05 + 64L1 36.003.04E-015.69E-016.31E+013.25E+034.50E+002.11E+025.02E+031.02E+05 + 64L1 48.001.55E-014.26E-019.93E+004.90E+021.93E+006.07E+011.12E+031.86E+04 + 64L1 61.008.70E-023.04E-012.58E+009.86E+019.55E-012.20E+013.29E+024.56E+03 + 64L1 78.004.73E-021.89E-019.58E-012.04E+014.67E-017.96E+009.60E+011.10E+03 + 64L1 91.003.21E-021.33E-015.96E-018.27E+002.99E-014.26E+004.50E+014.57E+02 + 64L1 108.002.07E-028.74E-023.67E-013.40E+001.83E-012.16E+001.97E+011.74E+02 + 64L1 131.001.26E-025.27E-022.12E-011.42E+001.05E-011.02E+007.90E+006.00E+01 + 64L1 160.007.57E-033.05E-021.18E-016.30E-016.01E-024.77E-013.14E+002.04E+01 + 64L1 225.003.18E-031.17E-024.16E-021.74E-012.34E-021.38E-016.94E-013.47E+00 + 64L1 310.001.44E-034.77E-031.54E-025.41E-029.86E-034.54E-021.81E-017.17E-01 + 64L1 400.007.86E-042.41E-037.15E-032.21E-025.04E-031.96E-026.61E-022.20E-01 + 64L1 510.004.55E-041.30E-033.55E-039.81E-032.69E-039.13E-032.66E-027.59E-02 + 64L1 740.002.09E-045.45E-041.31E-033.08E-031.06E-033.03E-037.27E-031.69E-02 + 64L11000.001.17E-042.87E-046.28E-041.31E-035.09E-041.31E-032.77E-035.61E-03 + 64L11500.005.71E-051.29E-042.53E-044.64E-041.96E-044.56E-048.47E-041.48E-03 + 64L2 8.939.38E+006.06E+041.75E+076.08E+082.74E+014.21E+031.08E+058.08E+05 + 64L2 9.637.62E+004.16E+041.13E+074.71E+082.18E+013.14E+039.66E+041.25E+06 + 64L2 10.935.34E+002.21E+045.37E+062.69E+081.48E+011.92E+037.07E+041.45E+06 + 64L2 14.132.56E+006.14E+031.20E+066.78E+076.80E+007.05E+022.95E+048.65E+05 + 64L2 17.931.27E+001.88E+032.96E+051.65E+073.30E+002.77E+021.14E+043.63E+05 + 64L2 22.006.83E-016.86E+028.91E+044.64E+061.77E+001.24E+024.80E+031.49E+05 + 64L2 28.003.25E-012.10E+022.17E+041.00E+068.56E-014.82E+011.66E+034.76E+04 + 64L2 36.001.47E-016.15E+015.02E+031.99E+054.01E-011.80E+015.33E+021.35E+04 + 64L2 48.005.86E-021.53E+019.48E+023.07E+041.69E-015.86E+001.43E+023.02E+03 + 64L2 61.002.69E-024.84E+002.39E+026.48E+038.24E-022.31E+004.72E+018.48E+02 + 64L2 78.001.21E-021.51E+005.89E+011.32E+033.96E-028.93E-011.51E+012.28E+02 + 64L2 91.007.27E-037.31E-012.47E+014.88E+022.50E-024.93E-017.43E+009.96E+01 + 64L2 108.004.14E-033.29E-019.45E+001.63E+021.51E-022.56E-013.38E+003.98E+01 + 64L2 131.002.19E-031.35E-013.25E+004.80E+018.51E-031.23E-011.40E+001.42E+01 + 64L2 160.001.14E-035.45E-021.09E+001.37E+014.73E-035.80E-025.64E-014.93E+00 + 64L2 225.003.79E-041.20E-021.77E-011.71E+001.75E-031.64E-021.23E-018.34E-01 + 64L2 310.001.37E-043.03E-033.41E-022.58E-016.90E-045.12E-033.05E-021.64E-01 + 64L2 400.006.26E-051.05E-039.68E-036.08E-023.32E-042.07E-031.04E-024.70E-02 + 64L2 510.003.03E-053.99E-043.05E-031.62E-021.66E-048.89E-043.82E-031.48E-02 + 64L2 740.001.05E-059.74E-055.72E-042.41E-035.78E-052.53E-048.79E-042.76E-03 + 64L21000.004.63E-063.35E-051.62E-045.79E-042.49E-059.49E-052.84E-047.65E-04 + 64L21500.001.65E-068.80E-063.39E-059.95E-058.07E-062.67E-056.75E-051.54E-04 + 64L3 8.242.00E+011.34E+054.42E+071.74E+096.57E+001.35E+052.72E+085.68E+10 + 64L3 8.941.58E+018.87E+042.71E+071.26E+095.11E+009.02E+041.56E+083.04E+10 + 64L3 10.241.06E+014.46E+041.20E+076.56E+083.37E+004.58E+046.24E+071.07E+10 + 64L3 13.444.73E+001.13E+042.33E+061.41E+081.46E+001.18E+041.00E+071.34E+09 + 64L3 17.242.20E+003.20E+035.19E+053.01E+076.79E-013.41E+031.91E+062.03E+08 + 64L3 22.001.02E+009.35E+021.19E+056.27E+063.22E-011.01E+033.81E+053.25E+07 + 64L3 28.004.73E-012.77E+022.78E+041.28E+061.54E-013.06E+027.89E+045.39E+06 + 64L3 36.002.08E-017.83E+016.11E+032.38E+057.13E-028.77E+011.56E+048.45E+05 + 64L3 48.007.99E-021.85E+011.08E+033.40E+042.97E-022.11E+012.49E+031.04E+05 + 64L3 61.003.56E-025.58E+002.55E+026.67E+031.43E-026.44E+005.55E+021.87E+04 + 64L3 78.001.54E-021.64E+005.84E+011.25E+036.81E-031.92E+001.21E+023.29E+03 + 64L3 91.009.11E-037.64E-012.32E+014.37E+024.28E-039.00E-014.74E+011.12E+03 + 64L3 108.005.07E-033.28E-018.36E+001.36E+022.55E-033.90E-011.69E+013.45E+02 + 64L3 131.002.62E-031.27E-012.66E+003.67E+011.43E-031.52E-015.34E+009.29E+01 + 64L3 160.001.33E-034.78E-028.16E-019.50E+007.88E-045.80E-021.65E+002.44E+01 + 64L3 225.004.25E-049.29E-031.12E-019.73E-012.88E-041.14E-022.32E-012.63E+00 + 64L3 310.001.50E-042.07E-031.80E-021.20E-011.13E-042.53E-033.88E-023.48E-01 + 64L3 400.006.77E-056.52E-044.38E-032.37E-025.49E-057.89E-049.68E-037.31E-02 + 64L3 510.003.25E-052.26E-041.20E-035.37E-032.80E-052.67E-042.66E-031.73E-02 + 64L3 740.001.12E-054.96E-051.85E-046.33E-041.04E-055.49E-053.93E-042.06E-03 + 64L31000.005.17E-061.62E-054.65E-051.30E-044.89E-061.68E-058.92E-053.96E-04 + 64L31500.002.00E-064.25E-068.98E-061.95E-051.93E-064.13E-061.37E-054.82E-05 + 64M1 2.886.74E+002.59E+041.50E+063.73E+081.81E+037.82E+065.92E+091.01E+12 + 64M1 3.884.70E+007.57E+036.07E+054.48E+077.41E+021.81E+068.58E+081.28E+11 + 64M1 5.882.49E+001.23E+031.58E+055.83E+062.13E+022.38E+056.11E+076.96E+09 + 64M1 9.889.86E-011.01E+021.79E+049.91E+054.52E+011.95E+042.48E+061.90E+08 + 64M1 16.883.38E-015.31E+001.23E+037.41E+049.15E+001.56E+031.03E+055.00E+06 + 64M1 26.001.33E-014.62E-011.09E+026.31E+032.53E+002.14E+028.60E+032.88E+05 + 64M1 41.004.69E-021.32E-017.01E+003.69E+026.58E-012.80E+016.95E+021.55E+04 + 64M1 53.002.54E-028.71E-021.56E+006.99E+013.09E-019.20E+001.76E+023.12E+03 + 64M1 71.001.24E-024.94E-023.74E-011.07E+011.32E-012.68E+003.85E+015.27E+02 + 64M1 104.004.74E-032.01E-029.67E-021.16E+004.37E-025.65E-015.68E+005.56E+01 + 64M1 150.001.86E-037.60E-033.15E-022.04E-011.54E-021.35E-019.86E-017.08E+00 + 64M1 280.003.88E-041.33E-034.54E-031.75E-022.77E-031.41E-026.20E-022.71E-01 + 64M1 500.001.00E-042.90E-048.05E-042.29E-036.06E-042.10E-036.30E-031.85E-02 + 64M2 2.691.58E+015.37E+061.24E+103.45E+122.27E+022.78E+055.68E+073.68E+09 + 64M2 3.699.38E+001.11E+061.58E+093.81E+118.76E+016.64E+041.17E+071.01E+09 + 64M2 5.693.94E+001.27E+059.89E+071.83E+102.37E+019.75E+031.33E+061.16E+08 + 64M2 9.691.14E+008.92E+033.52E+064.50E+084.76E+009.88E+029.30E+046.62E+06 + 64M2 16.692.72E-016.03E+021.25E+051.06E+079.26E-011.02E+026.38E+033.27E+05 + 64M2 26.007.71E-026.83E+018.70E+035.15E+052.44E-011.67E+017.35E+022.76E+04 + 64M2 41.001.97E-027.48E+005.88E+022.39E+046.25E-022.70E+008.18E+012.17E+03 + 64M2 53.008.87E-032.18E+001.32E+024.30E+032.91E-029.78E-012.40E+015.18E+02 + 64M2 71.003.52E-035.43E-012.44E+016.22E+021.22E-023.11E-015.99E+001.03E+02 + 64M2 104.001.03E-039.10E-022.81E+005.18E+013.94E-037.12E-021.00E+001.26E+01 + 64M2 150.003.17E-041.70E-023.71E-015.04E+001.34E-031.77E-021.85E-011.74E+00 + 64M2 280.004.35E-051.10E-031.36E-021.13E-012.18E-041.76E-031.14E-026.68E-02 + 64M2 500.007.52E-061.02E-047.97E-044.34E-034.14E-052.26E-049.91E-043.93E-03 + 64M3 2.543.81E+011.12E+072.77E+107.93E+125.13E+011.18E+072.46E+115.26E+14 + 64M3 3.542.06E+012.12E+063.15E+097.60E+111.88E+012.25E+062.48E+103.11E+13 + 64M3 5.547.80E+002.23E+051.75E+083.19E+104.82E+002.41E+051.14E+097.23E+11 + 64M3 9.542.03E+001.44E+045.58E+066.92E+089.23E-011.60E+042.78E+078.34E+09 + 64M3 16.544.46E-019.04E+021.81E+051.47E+071.73E-011.03E+036.83E+051.03E+08 + 64M3 26.001.16E-019.33E+011.12E+046.31E+054.37E-021.08E+023.43E+043.08E+06 + 64M3 41.002.80E-029.53E+006.95E+022.68E+041.10E-021.13E+011.79E+039.88E+04 + 64M3 53.001.22E-022.65E+001.47E+024.54E+035.07E-033.16E+003.50E+021.49E+04 + 64M3 71.004.65E-036.18E-012.51E+016.03E+022.10E-037.47E-015.61E+011.79E+03 + 64M3 104.001.30E-039.37E-022.55E+004.38E+016.69E-041.15E-015.42E+001.21E+02 + 64M3 150.003.80E-041.56E-022.90E-013.62E+002.25E-041.94E-026.10E-019.89E+00 + 64M3 280.004.88E-057.96E-047.75E-035.66E-023.61E-059.94E-041.70E-021.68E-01 + 64M3 500.008.17E-065.93E-053.22E-041.48E-037.05E-067.09E-057.31E-044.87E-03 + 64M4 2.229.53E+013.45E+052.38E+103.58E+141.52E+013.59E+053.93E+093.81E+12 + 64M4 3.222.96E+015.14E+041.74E+091.38E+134.55E+005.55E+043.20E+082.31E+11 + 64M4 5.225.85E+004.36E+035.79E+072.10E+119.21E-014.88E+031.27E+076.13E+09 + 64M4 9.227.57E-012.40E+021.05E+061.62E+091.35E-012.77E+023.05E+058.85E+07 + 64M4 16.228.75E-021.32E+011.94E+041.39E+071.92E-021.59E+017.96E+031.38E+06 + 64M4 26.001.32E-021.15E+007.01E+022.72E+053.59E-031.46E+003.97E+024.43E+04 + 64M4 41.002.01E-031.07E-012.88E+016.43E+036.91E-041.46E-012.28E+011.67E+03 + 64M4 53.006.79E-042.79E-024.82E+007.96E+022.69E-044.01E-024.63E+002.66E+02 + 64M4 71.001.95E-046.03E-036.39E-017.52E+019.08E-059.20E-037.63E-013.35E+01 + 64M4 104.003.81E-058.21E-044.70E-023.60E+002.16E-051.35E-037.44E-022.30E+00 + 64M4 150.007.95E-061.24E-044.02E-032.05E-015.40E-062.17E-048.19E-031.83E-01 + 64M4 280.005.75E-075.35E-067.15E-051.82E-035.00E-079.98E-062.06E-042.75E-03 + 64M4 500.005.79E-083.37E-072.21E-062.93E-055.54E-086.05E-077.57E-066.56E-05 + 64M5 2.181.43E+024.36E+054.13E+105.69E+149.23E+003.51E+042.00E+101.23E+15 + 64M5 3.184.34E+016.30E+042.92E+092.10E+132.73E+005.37E+031.43E+094.26E+13 + 64M5 5.188.33E+005.19E+039.42E+073.05E+115.52E-014.72E+024.74E+075.56E+11 + 64M5 9.181.05E+002.78E+021.66E+062.25E+098.21E-022.74E+018.70E+053.54E+09 + 64M5 16.181.18E-011.49E+013.00E+041.84E+071.19E-021.65E+001.66E+042.49E+07 + 64M5 26.001.74E-021.25E+001.04E+033.44E+052.29E-031.59E-016.10E+024.18E+05 + 64M5 41.002.59E-031.13E-014.14E+017.74E+034.55E-041.70E-022.56E+018.73E+03 + 64M5 53.008.68E-042.87E-026.74E+009.25E+021.81E-044.87E-034.31E+001.02E+03 + 64M5 71.002.47E-046.00E-038.58E-018.31E+016.26E-051.18E-035.69E-019.04E+01 + 64M5 104.004.77E-057.78E-045.91E-023.66E+001.55E-051.91E-044.10E-024.03E+00 + 64M5 150.009.89E-061.11E-044.64E-031.88E-014.07E-063.40E-053.36E-032.16E-01 + 64M5 280.007.36E-074.48E-066.74E-051.30E-034.29E-071.99E-065.18E-051.69E-03 + 64M5 500.008.04E-082.89E-071.70E-061.56E-055.89E-081.70E-071.34E-062.24E-05 + 64N+ 50.001.57E-021.82E+001.17E+024.62E+031.19E-015.17E+002.38E+029.29E+03 + 64N+ 70.006.05E-033.58E-011.55E+014.34E+024.41E-021.17E+003.27E+018.46E+02 + 64N+ 100.002.27E-036.91E-021.97E+003.87E+011.59E-022.64E-014.53E+007.68E+01 + 64N+ 150.007.35E-041.13E-021.97E-012.62E+004.98E-035.11E-025.32E-015.71E+00 + 64N+ 200.003.32E-043.35E-034.08E-024.12E-012.20E-031.68E-021.27E-011.00E+00 + 64N+ 500.003.19E-051.24E-045.31E-042.26E-031.81E-046.76E-042.30E-037.98E-03 + 65K 53.001.33E+002.63E+009.90E-011.21E-011.19E+011.67E+024.07E+022.17E+02 + 65K 53.701.29E+002.71E+001.38E+003.27E-011.15E+011.59E+024.14E+022.98E+02 + 65K 55.001.21E+002.81E+002.10E+009.71E-011.07E+011.45E+024.15E+024.37E+02 + 65K 58.201.05E+002.91E+003.68E+003.65E+009.07E+001.18E+024.00E+027.08E+02 + 65K 62.008.89E-012.86E+005.07E+007.71E+007.54E+009.33E+013.63E+028.92E+02 + 65K 66.007.56E-012.70E+005.93E+001.17E+016.28E+007.40E+013.17E+029.58E+02 + 65K 72.006.03E-012.39E+006.39E+001.59E+014.88E+005.37E+012.51E+029.16E+02 + 65K 80.004.57E-011.96E+006.08E+001.80E+013.59E+003.64E+011.82E+027.59E+02 + 65K 92.003.16E-011.43E+004.96E+001.67E+012.40E+002.18E+011.13E+025.17E+02 + 65K 105.002.22E-011.02E+003.74E+001.34E+011.64E+001.35E+016.98E+013.31E+02 + 65K 122.001.49E-016.77E-012.54E+009.33E+001.07E+007.85E+003.96E+011.88E+02 + 65K 135.001.13E-015.07E-011.90E+006.99E+008.03E-015.47E+002.68E+011.25E+02 + 65K 152.008.27E-023.58E-011.33E+004.83E+005.75E-013.60E+001.69E+017.62E+01 + 65K 175.005.68E-022.36E-018.49E-013.02E+003.88E-012.20E+009.72E+004.18E+01 + 65K 200.003.99E-021.58E-015.50E-011.89E+002.68E-011.39E+005.77E+002.35E+01 + 65K 265.001.93E-026.82E-022.18E-016.89E-011.25E-015.40E-011.95E+006.94E+00 + 65K 350.009.64E-033.06E-028.90E-022.55E-015.96E-022.20E-016.90E-012.12E+00 + 65K 440.005.61E-031.64E-024.42E-021.17E-013.29E-021.08E-013.03E-018.29E-01 + 65K 550.003.40E-039.31E-032.33E-025.65E-021.86E-025.56E-021.40E-013.44E-01 + 65K 780.001.64E-034.14E-039.28E-031.99E-027.81E-032.06E-024.49E-029.44E-02 + 65K 1050.009.30E-042.21E-034.57E-038.91E-033.81E-039.27E-031.83E-023.43E-02 + 65K 1300.006.35E-041.45E-032.84E-035.21E-032.30E-035.35E-039.93E-031.74E-02 + 65K 1550.004.69E-041.03E-031.96E-033.42E-031.53E-033.45E-036.14E-031.02E-02 + 65L1 9.714.21E+009.72E+025.08E+043.88E+052.44E+029.65E+046.80E+061.09E+08 + 65L1 10.413.75E+006.73E+024.44E+046.00E+051.99E+026.93E+044.64E+068.96E+07 + 65L1 11.713.06E+003.55E+023.09E+046.92E+051.40E+023.97E+042.42E+065.65E+07 + 65L1 14.911.97E+008.81E+011.11E+043.92E+056.79E+011.28E+046.44E+051.74E+07 + 65L1 18.711.26E+002.11E+013.53E+031.49E+053.45E+014.46E+031.86E+055.01E+06 + 65L1 22.009.06E-017.12E+001.45E+036.52E+042.13E+012.13E+037.71E+041.99E+06 + 65L1 28.005.41E-011.47E+003.52E+021.67E+041.04E+017.15E+022.11E+044.87E+05 + 65L1 36.003.09E-015.74E-017.33E+013.57E+034.96E+002.35E+025.54E+031.11E+05 + 65L1 48.001.58E-014.05E-011.18E+015.54E+022.12E+006.73E+011.23E+032.02E+04 + 65L1 61.008.90E-022.92E-012.97E+001.14E+021.05E+002.43E+013.62E+024.97E+03 + 65L1 78.004.85E-021.84E-011.03E+002.35E+015.14E-018.79E+001.05E+021.20E+03 + 65L1 91.003.30E-021.31E-016.18E-019.44E+003.29E-014.70E+004.94E+014.99E+02 + 65L1 108.002.14E-028.69E-023.74E-013.79E+002.01E-012.38E+002.16E+011.90E+02 + 65L1 131.001.31E-025.28E-022.15E-011.54E+001.16E-011.12E+008.65E+006.55E+01 + 65L1 160.007.84E-033.08E-021.20E-016.69E-016.60E-025.24E-013.44E+002.23E+01 + 65L1 225.003.30E-031.19E-024.27E-021.82E-012.57E-021.51E-017.58E-013.78E+00 + 65L1 310.001.50E-034.93E-031.60E-025.68E-021.08E-024.96E-021.98E-017.80E-01 + 65L1 400.008.23E-042.51E-037.46E-032.33E-025.51E-032.14E-027.20E-022.39E-01 + 65L1 510.004.78E-041.36E-033.72E-031.04E-022.94E-039.96E-032.89E-028.25E-02 + 65L1 740.002.19E-045.75E-041.38E-033.27E-031.15E-033.30E-037.91E-031.83E-02 + 65L11000.001.24E-043.03E-046.67E-041.40E-035.53E-041.43E-033.01E-036.09E-03 + 65L11500.006.02E-051.37E-042.70E-044.95E-042.12E-044.95E-049.18E-041.60E-03 + 65L2 9.258.78E+005.54E+041.53E+075.09E+082.73E+013.98E+039.71E+046.73E+05 + 65L2 9.957.19E+003.85E+041.00E+073.99E+082.18E+013.00E+038.78E+041.05E+06 + 65L2 11.255.10E+002.09E+044.89E+062.33E+081.50E+011.86E+036.53E+041.25E+06 + 65L2 14.452.49E+006.00E+031.13E+066.18E+077.03E+007.03E+022.82E+047.86E+05 + 65L2 18.251.25E+001.89E+032.89E+051.56E+073.46E+002.82E+021.12E+043.42E+05 + 65L2 22.007.15E-017.50E+029.68E+044.93E+061.97E+001.36E+025.11E+031.54E+05 + 65L2 28.003.41E-012.29E+022.37E+041.07E+069.49E-015.28E+011.78E+034.99E+04 + 65L2 36.001.55E-016.73E+015.47E+032.14E+054.45E-011.97E+015.75E+021.43E+04 + 65L2 48.006.22E-021.67E+011.04E+033.32E+041.88E-016.43E+001.55E+023.23E+03 + 65L2 61.002.87E-025.31E+002.61E+027.02E+039.16E-022.54E+005.13E+019.12E+02 + 65L2 78.001.29E-021.65E+006.45E+011.43E+034.40E-029.83E-011.65E+012.46E+02 + 65L2 91.007.78E-038.02E-012.70E+015.31E+022.79E-025.44E-018.12E+001.08E+02 + 65L2 108.004.44E-033.61E-011.04E+011.78E+021.68E-022.83E-013.70E+004.32E+01 + 65L2 131.002.36E-031.49E-013.57E+005.24E+019.50E-031.36E-011.53E+001.55E+01 + 65L2 160.001.23E-036.00E-021.20E+001.50E+015.28E-036.42E-026.20E-015.38E+00 + 65L2 225.004.09E-041.32E-021.96E-011.88E+001.95E-031.82E-021.36E-019.15E-01 + 65L2 310.001.49E-043.34E-033.77E-022.84E-017.73E-045.69E-033.37E-021.81E-01 + 65L2 400.006.84E-051.17E-031.07E-026.72E-023.72E-042.30E-031.15E-025.19E-02 + 65L2 510.003.32E-054.43E-043.38E-031.80E-021.86E-049.93E-044.24E-031.64E-02 + 65L2 740.001.15E-051.08E-046.37E-042.68E-036.51E-052.83E-049.80E-043.06E-03 + 65L21000.005.10E-063.73E-051.81E-046.45E-042.80E-051.06E-043.18E-048.53E-04 + 65L21500.001.81E-069.80E-063.79E-051.11E-049.09E-063.00E-057.57E-051.72E-04 + 65L3 8.511.88E+011.23E+053.91E+071.47E+096.39E+001.30E+052.50E+085.05E+10 + 65L3 9.211.50E+018.26E+042.44E+071.09E+095.01E+008.73E+041.47E+082.75E+10 + 65L3 10.511.02E+014.23E+041.10E+075.77E+083.34E+004.52E+045.99E+079.99E+09 + 65L3 13.714.62E+001.10E+042.22E+061.29E+081.48E+001.20E+041.00E+071.31E+09 + 65L3 17.512.18E+003.21E+035.09E+052.86E+076.96E-013.55E+031.96E+062.06E+08 + 65L3 22.001.07E+001.01E+031.29E+056.62E+063.46E-011.14E+034.35E+053.70E+07 + 65L3 28.004.94E-013.01E+023.00E+041.36E+061.65E-013.43E+028.99E+046.12E+06 + 65L3 36.002.18E-018.49E+016.59E+032.53E+057.67E-029.85E+011.77E+049.57E+05 + 65L3 48.008.39E-022.01E+011.17E+033.63E+043.19E-022.36E+012.83E+031.18E+05 + 65L3 61.003.75E-026.05E+002.76E+027.14E+031.54E-027.23E+006.28E+022.11E+04 + 65L3 78.001.63E-021.78E+006.31E+011.34E+037.32E-032.15E+001.37E+023.71E+03 + 65L3 91.009.64E-038.29E-012.51E+014.69E+024.60E-031.01E+005.35E+011.27E+03 + 65L3 108.005.38E-033.56E-019.04E+001.46E+022.75E-034.37E-011.90E+013.88E+02 + 65L3 131.002.79E-031.38E-012.88E+003.95E+011.54E-031.71E-016.01E+001.04E+02 + 65L3 160.001.41E-035.19E-028.84E-011.02E+018.48E-046.49E-021.86E+002.74E+01 + 65L3 225.004.53E-041.01E-021.21E-011.05E+003.10E-041.27E-022.61E-012.95E+00 + 65L3 310.001.60E-042.25E-031.95E-021.29E-011.22E-042.82E-034.34E-023.89E-01 + 65L3 400.007.21E-057.08E-044.76E-032.57E-025.91E-058.76E-041.08E-028.17E-02 + 65L3 510.003.47E-052.45E-041.30E-035.82E-033.01E-052.96E-042.97E-031.93E-02 + 65L3 740.001.20E-055.37E-052.01E-046.87E-041.11E-056.05E-054.37E-042.29E-03 + 65L31000.005.48E-061.75E-055.04E-051.41E-045.24E-061.84E-059.90E-054.41E-04 + 65L31500.002.15E-064.59E-069.72E-062.12E-052.07E-064.49E-061.51E-055.35E-05 + 65M1 2.976.35E+002.48E+041.46E+063.19E+081.83E+037.65E+065.61E+099.26E+11 + 65M1 3.974.49E+007.50E+035.90E+054.29E+077.67E+021.84E+068.55E+081.23E+11 + 65M1 5.972.42E+001.27E+031.56E+055.67E+062.26E+022.50E+056.37E+077.10E+09 + 65M1 9.979.73E-011.10E+021.84E+049.80E+054.87E+012.11E+042.68E+062.02E+08 + 65M1 16.973.38E-016.18E+001.32E+037.68E+049.97E+001.71E+031.12E+055.43E+06 + 65M1 26.001.35E-015.50E-011.24E+026.90E+032.80E+002.39E+029.66E+033.22E+05 + 65M1 41.004.80E-021.32E-018.26E+004.17E+027.28E-013.13E+017.77E+021.73E+04 + 65M1 53.002.61E-028.50E-021.84E+008.03E+013.42E-011.03E+011.96E+023.47E+03 + 65M1 71.001.28E-024.86E-024.21E-011.24E+011.46E-012.98E+004.28E+015.83E+02 + 65M1 104.004.91E-032.01E-021.01E-011.32E+004.83E-026.27E-016.29E+006.15E+01 + 65M1 150.001.94E-037.71E-033.25E-022.23E-011.71E-021.50E-011.09E+007.80E+00 + 65M1 280.004.06E-041.38E-034.72E-031.86E-023.06E-031.55E-026.82E-022.98E-01 + 65M1 500.001.06E-043.04E-048.50E-042.44E-036.66E-042.31E-036.91E-032.02E-02 + 65M2 2.771.48E+015.10E+061.14E+103.07E+122.31E+022.73E+055.38E+073.26E+09 + 65M2 3.779.02E+001.09E+061.53E+093.58E+119.13E+016.75E+041.15E+079.44E+08 + 65M2 5.773.88E+001.30E+051.00E+081.82E+102.53E+011.02E+041.36E+061.15E+08 + 65M2 9.771.15E+009.42E+033.69E+064.64E+085.17E+001.06E+039.80E+046.81E+06 + 65M2 16.772.80E-016.48E+021.34E+051.12E+071.02E+001.11E+026.83E+033.45E+05 + 65M2 26.008.10E-027.52E+019.58E+035.63E+052.73E-011.85E+018.07E+022.99E+04 + 65M2 41.002.08E-028.24E+006.48E+022.61E+046.98E-022.99E+008.99E+012.36E+03 + 65M2 53.009.44E-032.40E+001.45E+024.71E+033.25E-021.08E+002.64E+015.66E+02 + 65M2 71.003.76E-035.99E-012.69E+016.83E+021.36E-023.46E-016.60E+001.12E+02 + 65M2 104.001.11E-031.01E-013.10E+005.71E+014.41E-037.92E-021.10E+001.38E+01 + 65M2 150.003.42E-041.89E-024.11E-015.57E+001.51E-031.97E-022.05E-011.92E+00 + 65M2 280.004.75E-051.22E-031.52E-021.25E-012.46E-041.97E-031.27E-027.41E-02 + 65M2 500.008.26E-061.14E-048.91E-044.84E-034.68E-052.54E-041.11E-034.38E-03 + 65M3 2.613.63E+011.07E+072.58E+107.17E+125.13E+011.17E+072.39E+115.00E+14 + 65M3 3.612.00E+012.11E+063.08E+097.23E+111.92E+012.33E+062.53E+103.14E+13 + 65M3 5.617.72E+002.29E+051.78E+083.18E+105.03E+002.57E+051.21E+097.70E+11 + 65M3 9.612.05E+001.52E+045.85E+067.13E+089.77E-011.75E+043.07E+079.21E+09 + 65M3 16.614.58E-019.68E+021.93E+051.55E+071.85E-011.14E+037.67E+051.16E+08 + 65M3 26.001.22E-011.02E+021.22E+046.83E+054.73E-021.23E+023.95E+043.56E+06 + 65M3 41.002.95E-021.04E+017.58E+022.90E+041.19E-021.28E+012.05E+031.14E+05 + 65M3 53.001.29E-022.89E+001.60E+024.91E+035.48E-033.58E+004.00E+021.70E+04 + 65M3 71.004.93E-036.76E-012.74E+016.53E+022.27E-038.45E-016.41E+012.05E+03 + 65M3 104.001.38E-031.02E-012.78E+004.75E+017.24E-041.30E-016.17E+001.38E+02 + 65M3 150.004.06E-041.71E-023.16E-013.93E+002.44E-042.19E-026.92E-011.12E+01 + 65M3 280.005.23E-058.71E-048.47E-036.17E-023.92E-051.12E-031.93E-021.90E-01 + 65M3 500.008.80E-066.48E-053.53E-041.61E-037.63E-067.92E-058.24E-045.49E-03 + 65M4 2.279.21E+013.31E+052.24E+103.31E+141.53E+013.61E+053.86E+093.63E+12 + 65M4 3.272.95E+015.15E+041.73E+091.37E+134.70E+005.80E+043.30E+082.34E+11 + 65M4 5.275.99E+004.53E+036.06E+072.21E+119.76E-015.28E+031.38E+076.52E+09 + 65M4 9.277.95E-012.55E+021.13E+061.77E+091.46E-013.07E+023.39E+059.74E+07 + 65M4 16.279.36E-021.43E+012.15E+041.55E+072.09E-021.79E+018.99E+031.55E+06 + 65M4 26.001.44E-021.27E+007.94E+023.12E+053.99E-031.68E+004.58E+025.10E+04 + 65M4 41.002.21E-031.19E-013.27E+017.37E+037.71E-041.68E-012.63E+011.91E+03 + 65M4 53.007.50E-043.11E-025.47E+009.12E+023.00E-044.61E-025.34E+003.06E+02 + 65M4 71.002.16E-046.74E-037.25E-018.62E+011.02E-041.06E-028.80E-013.85E+01 + 65M4 104.004.20E-059.22E-045.34E-024.12E+002.43E-051.56E-038.58E-022.65E+00 + 65M4 150.008.78E-061.39E-044.57E-032.35E-016.08E-062.50E-049.46E-032.11E-01 + 65M4 280.006.55E-076.08E-068.14E-052.10E-035.64E-071.15E-052.39E-043.18E-03 + 65M4 500.006.15E-083.82E-072.51E-063.37E-056.26E-086.97E-078.76E-067.59E-05 + 65M5 2.241.38E+024.16E+053.92E+105.27E+149.27E+003.47E+041.96E+101.19E+15 + 65M5 3.244.32E+016.26E+042.93E+092.08E+132.81E+005.52E+031.49E+094.39E+13 + 65M5 5.248.52E+005.34E+039.90E+073.20E+115.82E-015.02E+025.16E+076.08E+11 + 65M5 9.241.10E+002.93E+021.80E+062.46E+098.82E-022.98E+019.79E+054.03E+09 + 65M5 16.241.26E-011.60E+013.32E+042.05E+071.30E-021.81E+001.91E+042.90E+07 + 65M5 26.001.89E-021.37E+001.18E+033.94E+052.52E-031.77E-017.15E+024.98E+05 + 65M5 41.002.84E-031.24E-014.70E+018.85E+035.03E-041.90E-023.00E+011.04E+04 + 65M5 53.009.54E-043.16E-027.67E+001.06E+032.00E-045.45E-035.05E+001.21E+03 + 65M5 71.002.73E-046.63E-039.76E-019.50E+016.95E-051.33E-036.66E-011.07E+02 + 65M5 104.005.31E-058.63E-046.72E-024.18E+001.73E-052.13E-044.79E-024.76E+00 + 65M5 150.001.11E-051.24E-045.28E-032.14E-014.54E-063.81E-053.92E-032.54E-01 + 65M5 280.008.22E-074.99E-067.66E-051.49E-034.80E-072.23E-066.01E-051.98E-03 + 65M5 500.008.78E-083.21E-071.92E-061.78E-056.58E-081.91E-071.54E-062.61E-05 + 65N+ 50.001.61E-021.97E+001.26E+024.96E+031.30E-015.70E+002.65E+021.04E+04 + 65N+ 70.006.22E-033.86E-011.68E+014.67E+024.81E-021.29E+003.63E+019.43E+02 + 65N+ 100.002.34E-037.43E-022.13E+004.18E+011.74E-022.89E-015.01E+008.52E+01 + 65N+ 150.007.59E-041.21E-022.13E-012.84E+005.43E-035.59E-025.85E-016.30E+00 + 65N+ 200.003.43E-043.57E-034.41E-024.46E-012.40E-031.83E-021.39E-011.10E+00 + 65N+ 500.003.30E-051.30E-045.66E-042.43E-031.95E-047.28E-042.48E-038.63E-03 + 66K 54.791.24E+002.35E+008.45E-019.50E-021.18E+011.58E+023.71E+021.89E+02 + 66K 55.491.21E+002.44E+001.18E+002.56E-011.14E+011.52E+023.79E+022.60E+02 + 66K 56.791.13E+002.51E+001.77E+007.64E-011.06E+011.39E+023.79E+023.77E+02 + 66K 59.999.85E-012.61E+003.11E+002.89E+009.05E+001.13E+023.67E+026.14E+02 + 66K 63.798.42E-012.58E+004.31E+006.17E+007.56E+009.02E+013.35E+027.79E+02 + 66K 68.007.14E-012.44E+005.11E+009.65E+006.28E+007.13E+012.93E+028.46E+02 + 66K 74.005.73E-012.17E+005.54E+001.32E+014.91E+005.22E+012.35E+028.18E+02 + 66K 82.004.38E-011.79E+005.34E+001.51E+013.65E+003.58E+011.72E+026.87E+02 + 66K 94.003.06E-011.32E+004.43E+001.43E+012.46E+002.17E+011.08E+024.78E+02 + 66K 107.002.17E-019.57E-013.39E+001.17E+011.69E+001.36E+016.80E+013.11E+02 + 66K 124.001.46E-016.43E-012.34E+008.34E+001.11E+007.99E+003.91E+011.80E+02 + 66K 137.001.12E-014.85E-011.77E+006.34E+008.39E-015.60E+002.67E+011.21E+02 + 66K 154.008.22E-023.46E-011.25E+004.44E+006.04E-013.70E+001.70E+017.47E+01 + 66K 177.005.69E-022.30E-018.10E-012.82E+004.09E-012.28E+009.87E+004.15E+01 + 66K 205.003.86E-021.48E-015.06E-011.71E+002.73E-011.38E+005.58E+002.21E+01 + 66K 270.001.90E-026.59E-022.07E-016.45E-011.29E-015.47E-011.94E+006.75E+00 + 66K 355.009.68E-033.02E-028.70E-022.47E-016.23E-022.27E-017.00E-012.12E+00 + 66K 440.005.84E-031.70E-024.55E-021.20E-013.56E-021.17E-013.24E-018.81E-01 + 66K 550.003.55E-039.67E-032.41E-025.85E-022.01E-025.99E-021.50E-013.66E-01 + 66K 780.001.72E-034.32E-039.71E-032.08E-028.43E-032.22E-024.82E-021.01E-01 + 66K 1050.009.74E-042.32E-034.81E-039.36E-034.10E-039.98E-031.96E-023.66E-02 + 66K 1300.006.65E-041.52E-033.00E-035.49E-032.47E-035.75E-031.06E-021.86E-02 + 66K 1550.004.91E-041.09E-032.06E-033.61E-031.64E-033.70E-036.58E-031.09E-02 + 66L1 10.053.93E+009.00E+024.46E+043.11E+052.43E+029.16E+046.20E+069.46E+07 + 66L1 10.753.52E+006.32E+023.94E+044.92E+051.99E+026.66E+044.29E+067.88E+07 + 66L1 12.052.89E+003.41E+022.79E+045.84E+051.41E+023.88E+042.29E+065.08E+07 + 66L1 15.251.88E+008.91E+011.05E+043.49E+056.99E+011.28E+046.28E+051.63E+07 + 66L1 19.051.22E+002.25E+013.46E+031.39E+053.60E+014.58E+031.86E+054.85E+06 + 66L1 23.008.31E-016.49E+001.24E+035.35E+042.06E+011.93E+036.69E+041.66E+06 + 66L1 29.005.07E-011.47E+003.20E+021.45E+041.03E+016.79E+021.93E+044.29E+05 + 66L1 37.002.94E-015.62E-017.13E+013.29E+035.03E+002.31E+025.28E+031.02E+05 + 66L1 49.001.54E-013.78E-011.22E+015.44E+022.20E+006.81E+011.22E+031.95E+04 + 66L1 62.008.74E-022.73E-013.16E+001.17E+021.10E+002.51E+013.66E+024.93E+03 + 66L1 79.004.82E-021.75E-011.07E+002.50E+015.44E-019.20E+001.09E+021.22E+03 + 66L1 92.003.29E-021.26E-016.27E-011.01E+013.50E-014.96E+005.14E+015.11E+02 + 66L1 109.002.15E-028.43E-023.74E-014.05E+002.15E-012.52E+002.26E+011.97E+02 + 66L1 132.001.32E-025.19E-022.14E-011.62E+001.25E-011.20E+009.15E+006.85E+01 + 66L1 160.008.11E-033.11E-021.22E-017.16E-017.25E-025.76E-013.76E+002.43E+01 + 66L1 225.003.43E-031.22E-024.38E-021.92E-012.82E-021.65E-018.28E-014.11E+00 + 66L1 310.001.56E-035.09E-031.66E-025.97E-021.18E-025.43E-022.16E-018.49E-01 + 66L1 400.008.60E-042.61E-037.78E-032.45E-026.03E-032.34E-027.85E-022.60E-01 + 66L1 510.005.00E-041.42E-033.91E-031.09E-023.21E-031.09E-023.15E-028.96E-02 + 66L1 740.002.31E-046.05E-041.46E-033.47E-031.26E-033.59E-038.60E-031.99E-02 + 66L11000.001.30E-043.21E-047.08E-041.49E-036.01E-041.55E-033.27E-036.60E-03 + 66L11500.006.34E-051.45E-042.87E-045.28E-042.29E-045.37E-049.96E-041.74E-03 + 66L2 9.588.22E+005.08E+041.35E+074.25E+082.71E+013.77E+038.72E+045.53E+05 + 66L2 10.286.78E+003.58E+048.94E+063.38E+082.19E+012.87E+037.96E+048.84E+05 + 66L2 11.584.86E+001.97E+044.46E+062.03E+081.52E+011.81E+036.02E+041.08E+06 + 66L2 14.782.43E+005.86E+031.08E+065.61E+077.27E+007.01E+022.69E+047.12E+05 + 66L2 18.581.24E+001.89E+032.82E+051.47E+073.63E+002.87E+021.10E+043.21E+05 + 66L2 23.006.54E-016.59E+028.10E+043.95E+061.90E+001.25E+024.49E+031.30E+05 + 66L2 29.003.22E-012.11E+022.10E+049.16E+059.46E-015.03E+011.63E+034.40E+04 + 66L2 37.001.50E-016.44E+015.08E+031.92E+054.54E-011.94E+015.47E+021.32E+04 + 66L2 49.006.16E-021.66E+011.00E+033.13E+041.96E-016.51E+001.52E+023.10E+03 + 66L2 62.002.89E-025.38E+002.60E+026.83E+039.69E-022.62E+005.17E+018.98E+02 + 66L2 79.001.32E-021.71E+006.56E+011.43E+034.71E-021.03E+001.70E+012.48E+02 + 66L2 92.008.01E-038.36E-012.78E+015.39E+023.00E-025.75E-018.43E+001.10E+02 + 66L2 109.004.61E-033.80E-011.08E+011.83E+021.82E-023.01E-013.88E+004.47E+01 + 66L2 132.002.47E-031.58E-013.76E+005.46E+011.04E-021.46E-011.62E+001.62E+01 + 66L2 160.001.32E-036.60E-021.32E+001.64E+015.89E-037.10E-026.81E-015.88E+00 + 66L2 225.004.42E-041.46E-022.15E-012.06E+002.18E-032.02E-021.49E-011.00E+00 + 66L2 310.001.62E-043.69E-034.17E-023.13E-018.66E-046.33E-033.73E-021.99E-01 + 66L2 400.007.42E-051.29E-031.19E-027.42E-024.17E-042.57E-031.27E-025.73E-02 + 66L2 510.003.62E-054.90E-043.75E-031.99E-022.09E-041.11E-034.71E-031.82E-02 + 66L2 740.001.27E-051.20E-047.08E-042.98E-037.32E-053.17E-041.09E-033.40E-03 + 66L21000.005.59E-064.14E-052.01E-047.18E-043.15E-051.19E-043.55E-049.51E-04 + 66L21500.001.97E-061.09E-054.23E-051.24E-041.02E-053.37E-058.48E-051.92E-04 + 66L3 8.791.77E+011.14E+053.47E+071.25E+096.22E+001.24E+052.31E+084.50E+10 + 66L3 9.491.42E+017.71E+042.19E+079.33E+084.91E+008.46E+041.37E+082.50E+10 + 66L3 10.799.75E+004.02E+041.01E+075.07E+083.31E+004.45E+045.76E+079.32E+09 + 66L3 13.994.51E+001.08E+042.12E+061.19E+081.49E+001.22E+041.00E+071.28E+09 + 66L3 17.792.16E+003.21E+034.99E+052.72E+077.13E-013.68E+032.02E+062.08E+08 + 66L3 23.009.67E-018.78E+021.06E+055.23E+063.24E-011.03E+033.70E+053.01E+07 + 66L3 29.004.61E-012.73E+022.62E+041.14E+061.59E-013.24E+028.14E+045.34E+06 + 66L3 37.002.08E-018.02E+016.02E+032.24E+057.58E-029.64E+011.69E+048.86E+05 + 66L3 49.008.23E-021.96E+011.11E+033.37E+043.22E-022.39E+012.81E+031.15E+05 + 66L3 62.003.73E-026.05E+002.70E+026.83E+031.58E-027.48E+006.42E+022.12E+04 + 66L3 79.001.65E-021.81E+006.32E+011.32E+037.57E-032.27E+001.43E+023.82E+03 + 66L3 92.009.81E-038.51E-012.54E+014.67E+024.78E-031.07E+005.65E+011.32E+03 + 66L3 109.005.52E-033.68E-019.25E+001.48E+022.87E-034.68E-012.03E+014.09E+02 + 66L3 132.002.88E-031.44E-012.97E+004.03E+011.62E-031.84E-016.47E+001.11E+02 + 66L3 160.001.50E-035.63E-029.56E-011.10E+019.12E-047.25E-022.08E+003.07E+01 + 66L3 225.004.82E-041.09E-021.31E-011.13E+003.33E-041.42E-022.92E-013.30E+00 + 66L3 310.001.71E-042.44E-032.11E-021.40E-011.31E-043.14E-034.86E-024.35E-01 + 66L3 400.007.68E-057.67E-045.16E-032.78E-026.35E-059.73E-041.21E-029.12E-02 + 66L3 510.003.70E-052.66E-041.41E-036.30E-033.23E-053.27E-043.31E-032.15E-02 + 66L3 740.001.30E-055.81E-052.17E-047.44E-041.19E-056.66E-054.86E-042.55E-03 + 66L31000.005.85E-061.89E-055.45E-051.53E-045.61E-062.02E-051.10E-044.90E-04 + 66L31500.002.30E-064.94E-061.05E-052.30E-052.21E-064.88E-061.67E-055.93E-05 + 66M1 3.056.02E+002.42E+041.44E+062.79E+081.87E+037.60E+065.44E+098.70E+11 + 66M1 4.054.31E+007.51E+035.80E+054.18E+078.00E+021.88E+068.64E+081.21E+11 + 66M1 6.052.36E+001.31E+031.55E+055.57E+062.40E+022.65E+056.70E+077.32E+09 + 66M1 10.059.63E-011.19E+021.90E+049.75E+055.27E+012.29E+042.90E+062.15E+08 + 66M1 17.053.39E-017.16E+001.42E+037.96E+041.09E+011.88E+031.23E+055.90E+06 + 66M1 26.001.37E-016.59E-011.40E+027.54E+033.10E+002.68E+021.08E+043.60E+05 + 66M1 41.004.91E-021.33E-019.69E+004.69E+028.06E-013.49E+018.68E+021.92E+04 + 66M1 53.002.68E-028.34E-022.17E+009.18E+013.78E-011.14E+012.19E+023.85E+03 + 66M1 71.001.31E-024.78E-024.78E-011.44E+011.61E-013.31E+004.75E+016.46E+02 + 66M1 104.005.08E-032.01E-021.08E-011.51E+005.34E-026.95E-016.97E+006.79E+01 + 66M1 150.002.01E-037.82E-033.36E-022.45E-011.88E-021.66E-011.20E+008.60E+00 + 66M1 280.004.25E-041.42E-034.93E-031.98E-023.37E-031.71E-027.50E-023.27E-01 + 66M1 500.001.11E-043.20E-048.98E-042.60E-037.31E-042.54E-037.57E-032.22E-02 + 66M2 2.841.41E+014.90E+061.07E+102.78E+122.37E+022.71E+055.16E+072.91E+09 + 66M2 3.848.70E+001.09E+061.50E+093.41E+119.58E+016.92E+041.15E+078.93E+08 + 66M2 5.843.83E+001.34E+051.03E+081.82E+102.71E+011.08E+041.40E+061.14E+08 + 66M2 9.841.16E+009.98E+033.89E+064.81E+085.63E+001.14E+031.04E+057.03E+06 + 66M2 16.842.88E-016.98E+021.44E+051.19E+071.12E+001.21E+027.33E+033.64E+05 + 66M2 26.008.51E-028.28E+011.06E+046.15E+053.04E-012.05E+018.85E+023.25E+04 + 66M2 41.002.21E-029.08E+007.14E+022.86E+047.80E-023.31E+009.88E+012.57E+03 + 66M2 53.001.00E-022.65E+001.60E+025.17E+033.63E-021.20E+002.90E+016.18E+02 + 66M2 71.004.02E-036.62E-012.97E+017.50E+021.53E-023.83E-017.27E+001.23E+02 + 66M2 104.001.19E-031.11E-013.43E+006.28E+014.95E-038.80E-021.22E+001.52E+01 + 66M2 150.003.70E-042.09E-024.55E-016.14E+001.69E-032.20E-022.27E-012.11E+00 + 66M2 280.005.17E-051.35E-031.69E-021.39E-012.77E-042.20E-031.41E-028.22E-02 + 66M2 500.009.03E-061.27E-049.95E-045.39E-035.29E-052.86E-041.24E-034.88E-03 + 66M3 2.683.47E+011.04E+072.43E+106.52E+125.14E+011.18E+072.34E+114.79E+14 + 66M3 3.681.94E+012.10E+063.02E+096.90E+111.96E+012.41E+062.60E+103.18E+13 + 66M3 5.687.65E+002.36E+051.82E+083.17E+105.24E+002.75E+051.30E+098.21E+11 + 66M3 9.682.07E+001.61E+046.13E+067.35E+081.03E+001.92E+043.39E+071.02E+10 + 66M3 16.684.70E-011.04E+032.05E+051.63E+071.97E-011.27E+038.61E+051.30E+08 + 66M3 26.001.27E-011.11E+021.33E+047.38E+055.11E-021.39E+024.54E+044.10E+06 + 66M3 41.003.10E-021.14E+018.25E+023.13E+041.29E-021.44E+012.35E+031.30E+05 + 66M3 53.001.36E-023.16E+001.74E+025.31E+035.93E-034.05E+004.58E+021.95E+04 + 66M3 71.005.22E-037.38E-012.98E+017.07E+022.46E-039.55E-017.31E+012.33E+03 + 66M3 104.001.47E-031.12E-013.03E+005.15E+017.84E-041.46E-017.01E+001.57E+02 + 66M3 150.004.34E-041.87E-023.45E-014.26E+002.64E-042.46E-027.85E-011.27E+01 + 66M3 280.005.63E-059.53E-049.25E-036.71E-024.24E-051.25E-032.18E-022.14E-01 + 66M3 500.009.48E-067.08E-053.85E-041.76E-038.26E-068.84E-059.27E-046.18E-03 + 66M4 2.338.92E+013.20E+052.12E+103.07E+141.55E+013.63E+053.79E+093.45E+12 + 66M4 3.332.93E+015.17E+041.73E+091.36E+134.86E+006.07E+043.41E+082.36E+11 + 66M4 5.336.13E+004.70E+036.33E+072.32E+111.03E+005.71E+031.48E+076.92E+09 + 66M4 9.338.34E-012.72E+021.23E+061.93E+091.57E-013.41E+023.76E+051.07E+08 + 66M4 16.339.99E-021.55E+012.37E+041.72E+072.29E-022.02E+011.01E+041.73E+06 + 66M4 26.001.57E-021.41E+008.99E+023.58E+054.43E-031.92E+005.27E+025.85E+04 + 66M4 41.002.42E-031.32E-013.70E+018.44E+038.58E-041.93E-013.03E+012.20E+03 + 66M4 53.008.25E-043.47E-026.20E+001.04E+033.35E-045.29E-026.14E+003.51E+02 + 66M4 71.002.39E-047.54E-038.21E-019.86E+011.14E-041.21E-021.01E+004.42E+01 + 66M4 104.004.68E-051.03E-036.05E-024.72E+002.72E-051.79E-039.88E-023.05E+00 + 66M4 150.009.82E-061.57E-045.19E-032.69E-016.82E-062.88E-041.09E-022.43E-01 + 66M4 280.007.28E-076.87E-069.25E-052.40E-036.36E-071.32E-052.76E-043.67E-03 + 66M4 500.007.13E-084.36E-072.86E-063.87E-057.06E-088.02E-071.01E-058.78E-05 + 66M5 2.291.34E+024.00E+053.75E+104.94E+149.35E+003.45E+041.95E+101.15E+15 + 66M5 3.294.30E+016.25E+042.95E+092.08E+132.90E+005.68E+031.55E+094.56E+13 + 66M5 5.298.73E+005.50E+031.04E+083.37E+116.15E-015.33E+025.63E+076.67E+11 + 66M5 9.291.15E+003.09E+021.96E+062.68E+099.47E-023.23E+011.10E+064.59E+09 + 66M5 16.291.34E-011.71E+013.68E+042.28E+071.41E-021.99E+002.18E+043.36E+07 + 66M5 26.002.06E-021.50E+001.34E+034.50E+052.78E-031.98E-018.38E+025.94E+05 + 66M5 41.003.10E-031.36E-015.34E+011.01E+045.56E-042.13E-023.51E+011.23E+04 + 66M5 53.001.05E-033.48E-028.70E+001.21E+032.22E-046.09E-035.90E+001.43E+03 + 66M5 71.003.00E-047.32E-031.11E+001.08E+027.70E-051.48E-037.78E-011.27E+02 + 66M5 104.005.80E-059.55E-047.63E-024.76E+001.92E-052.39E-045.59E-025.61E+00 + 66M5 150.001.21E-051.37E-045.99E-032.44E-015.06E-064.26E-054.57E-032.99E-01 + 66M5 280.009.33E-075.59E-068.69E-051.70E-035.35E-072.50E-066.96E-052.32E-03 + 66M5 500.001.02E-073.52E-072.18E-062.02E-057.35E-082.14E-071.77E-063.05E-05 + 66N+ 50.001.68E-022.16E+001.39E+025.47E+031.44E-016.39E+003.02E+021.19E+04 + 66N+ 70.006.50E-034.24E-011.85E+015.15E+025.33E-021.44E+004.11E+011.07E+03 + 66N+ 100.002.45E-038.12E-022.35E+004.60E+011.92E-023.23E-015.63E+009.64E+01 + 66N+ 150.007.96E-041.32E-022.35E-013.12E+006.01E-036.22E-026.54E-017.08E+00 + 66N+ 200.003.62E-043.87E-034.85E-024.92E-012.65E-032.03E-021.55E-011.23E+00 + 66N+ 500.003.55E-051.42E-046.29E-042.73E-032.18E-048.15E-042.78E-039.71E-03 + 67K 56.621.16E+002.11E+007.25E-017.59E-021.17E+011.50E+023.40E+021.66E+02 + 67K 57.321.13E+002.18E+001.01E+002.04E-011.13E+011.45E+023.46E+022.26E+02 + 67K 58.621.06E+002.25E+001.50E+006.07E-011.05E+011.32E+023.47E+023.28E+02 + 67K 61.829.29E-012.34E+002.64E+002.30E+009.03E+001.09E+023.37E+025.34E+02 + 67K 65.627.98E-012.32E+003.67E+004.96E+007.59E+008.73E+013.10E+026.83E+02 + 67K 70.006.75E-012.20E+004.41E+007.95E+006.29E+006.88E+012.71E+027.50E+02 + 67K 76.005.46E-011.97E+004.81E+001.09E+014.95E+005.09E+012.20E+027.31E+02 + 67K 84.004.21E-011.64E+004.69E+001.27E+013.71E+003.53E+011.63E+026.24E+02 + 67K 96.002.96E-011.23E+003.95E+001.23E+012.52E+002.17E+011.04E+024.42E+02 + 67K 109.002.12E-018.99E-013.07E+001.03E+011.75E+001.37E+016.62E+012.93E+02 + 67K 126.001.44E-016.11E-012.15E+007.48E+001.16E+008.13E+003.86E+011.72E+02 + 67K 139.001.11E-014.65E-011.65E+005.76E+008.77E-015.73E+002.66E+011.17E+02 + 67K 156.008.18E-023.34E-011.18E+004.10E+006.34E-013.82E+001.70E+017.33E+01 + 67K 179.005.69E-022.24E-017.73E-012.64E+004.32E-012.36E+001.00E+014.12E+01 + 67K 205.003.99E-021.50E-015.04E-011.68E+002.97E-011.48E+005.93E+002.31E+01 + 67K 270.001.97E-026.72E-022.09E-016.46E-011.40E-015.90E-012.07E+007.12E+00 + 67K 355.001.00E-023.11E-028.89E-022.51E-016.76E-022.45E-017.48E-012.25E+00 + 67K 450.005.77E-031.66E-024.39E-021.14E-013.64E-021.17E-013.20E-018.56E-01 + 67K 560.003.56E-039.62E-032.38E-025.73E-022.08E-026.12E-021.51E-013.64E-01 + 67K 790.001.75E-034.40E-039.84E-032.10E-028.82E-032.31E-024.97E-021.03E-01 + 67K 1050.001.02E-032.43E-035.05E-039.84E-034.42E-031.07E-022.10E-023.92E-02 + 67K 1300.006.95E-041.60E-033.16E-035.79E-032.65E-036.18E-031.14E-021.99E-02 + 67K 1550.005.14E-041.14E-032.18E-033.82E-031.76E-033.98E-037.06E-031.17E-02 + 67L1 10.393.68E+008.34E+023.92E+042.54E+052.41E+028.71E+045.66E+068.26E+07 + 67L1 11.093.30E+005.94E+023.50E+044.07E+051.99E+026.39E+043.96E+066.94E+07 + 67L1 12.392.73E+003.28E+022.52E+044.95E+051.43E+023.78E+042.15E+064.57E+07 + 67L1 15.591.80E+008.97E+019.87E+033.11E+057.19E+011.29E+046.12E+051.52E+07 + 67L1 19.391.18E+002.38E+013.38E+031.29E+053.76E+014.69E+031.86E+054.68E+06 + 67L1 23.008.36E-017.93E+001.35E+035.56E+042.26E+012.15E+037.38E+041.78E+06 + 67L1 29.005.12E-011.79E+003.59E+021.55E+041.14E+017.54E+022.12E+044.64E+05 + 67L1 37.002.99E-015.98E-018.19E+013.60E+035.53E+002.56E+025.82E+031.11E+05 + 67L1 49.001.56E-013.65E-011.44E+016.09E+022.42E+007.54E+011.34E+032.13E+04 + 67L1 62.008.93E-022.64E-013.67E+001.33E+021.21E+002.77E+014.02E+025.37E+03 + 67L1 79.004.94E-021.71E-011.17E+002.86E+015.98E-011.01E+011.19E+021.33E+03 + 67L1 92.003.38E-021.24E-016.67E-011.15E+013.85E-015.46E+005.63E+015.57E+02 + 67L1 109.002.21E-028.37E-023.88E-014.55E+002.36E-012.78E+002.48E+012.15E+02 + 67L1 132.001.36E-025.20E-022.20E-011.78E+001.37E-011.32E+001.00E+017.46E+01 + 67L1 160.008.38E-033.14E-021.25E-017.70E-017.96E-026.32E-014.12E+002.64E+01 + 67L1 225.003.56E-031.25E-024.51E-022.02E-013.09E-021.81E-019.04E-014.48E+00 + 67L1 310.001.63E-035.25E-031.72E-026.28E-021.29E-025.94E-022.35E-019.24E-01 + 67L1 400.009.00E-042.71E-038.13E-032.59E-026.59E-032.56E-028.55E-022.83E-01 + 67L1 510.005.25E-041.49E-034.10E-031.16E-023.51E-031.19E-023.43E-029.73E-02 + 67L1 740.002.42E-046.37E-041.55E-033.69E-031.37E-033.91E-039.34E-032.16E-02 + 67L11000.001.37E-043.39E-047.51E-041.58E-036.53E-041.69E-033.55E-037.16E-03 + 67L11500.006.69E-051.54E-043.06E-045.64E-042.48E-045.82E-041.08E-031.88E-03 + 67L2 9.927.71E+004.67E+041.19E+073.57E+082.70E+013.58E+037.89E+044.62E+05 + 67L2 10.626.40E+003.32E+047.98E+062.88E+082.19E+012.75E+037.25E+047.50E+05 + 67L2 11.924.64E+001.87E+044.07E+061.76E+081.54E+011.76E+035.56E+049.39E+05 + 67L2 15.122.36E+005.73E+031.02E+065.11E+077.51E+006.99E+022.57E+046.46E+05 + 67L2 18.921.23E+001.89E+032.75E+051.38E+073.81E+002.91E+021.08E+043.02E+05 + 67L2 23.006.85E-017.20E+028.79E+044.19E+062.11E+001.36E+024.77E+031.34E+05 + 67L2 29.003.38E-012.31E+022.28E+049.78E+051.05E+005.50E+011.75E+034.61E+04 + 67L2 37.001.58E-017.05E+015.53E+032.06E+055.04E-012.13E+015.89E+021.39E+04 + 67L2 49.006.52E-021.81E+011.09E+033.38E+042.17E-017.14E+001.65E+023.30E+03 + 67L2 62.003.07E-025.89E+002.84E+027.39E+031.08E-012.88E+005.61E+019.64E+02 + 67L2 79.001.40E-021.87E+007.17E+011.55E+035.24E-021.13E+001.85E+012.68E+02 + 67L2 92.008.55E-039.17E-013.04E+015.85E+023.34E-026.33E-019.19E+001.19E+02 + 67L2 109.004.93E-034.17E-011.18E+011.99E+022.03E-023.32E-014.24E+004.84E+01 + 67L2 132.002.65E-031.73E-014.12E+005.95E+011.15E-021.61E-011.78E+001.76E+01 + 67L2 160.001.42E-037.26E-021.45E+001.80E+016.57E-037.85E-027.47E-016.40E+00 + 67L2 225.004.77E-041.61E-022.37E-012.26E+002.44E-032.23E-021.65E-011.10E+00 + 67L2 310.001.75E-044.08E-034.60E-023.44E-019.69E-047.03E-034.12E-022.19E-01 + 67L2 400.008.11E-051.43E-031.31E-028.19E-024.68E-042.86E-031.41E-026.31E-02 + 67L2 510.003.97E-055.43E-044.16E-032.20E-022.35E-041.23E-035.23E-032.01E-02 + 67L2 740.001.37E-051.33E-047.87E-043.31E-038.23E-053.55E-041.22E-033.78E-03 + 67L21000.006.13E-064.60E-052.24E-047.98E-043.55E-051.34E-043.96E-041.06E-03 + 67L21500.002.16E-061.21E-054.72E-051.38E-041.15E-053.78E-059.50E-052.14E-04 + 67L3 9.071.66E+011.05E+053.08E+071.06E+096.05E+001.19E+052.13E+084.02E+10 + 67L3 9.771.34E+017.19E+041.97E+078.05E+084.82E+008.20E+041.29E+082.27E+10 + 67L3 11.079.33E+003.82E+049.31E+064.47E+083.28E+004.39E+045.53E+078.70E+09 + 67L3 14.274.39E+001.06E+042.02E+061.09E+081.50E+001.24E+041.00E+071.25E+09 + 67L3 18.072.14E+003.21E+034.88E+052.57E+077.29E-013.82E+032.07E+062.09E+08 + 67L3 23.001.01E+009.50E+021.14E+055.51E+063.48E-011.15E+034.21E+053.41E+07 + 67L3 29.004.81E-012.96E+022.82E+041.21E+061.71E-013.63E+029.24E+046.04E+06 + 67L3 37.002.18E-018.68E+016.49E+032.38E+058.13E-021.08E+021.91E+041.00E+06 + 67L3 49.008.63E-022.12E+011.20E+033.60E+043.45E-022.68E+013.18E+031.29E+05 + 67L3 62.003.93E-026.55E+002.91E+027.30E+031.69E-028.38E+007.25E+022.39E+04 + 67L3 79.001.73E-021.96E+006.81E+011.41E+038.12E-032.54E+001.62E+024.29E+03 + 67L3 92.001.04E-029.21E-012.74E+015.00E+025.13E-031.20E+006.36E+011.48E+03 + 67L3 109.005.83E-033.99E-019.99E+001.58E+023.08E-035.23E-012.28E+014.59E+02 + 67L3 132.003.05E-031.56E-013.21E+004.33E+011.74E-032.06E-017.27E+001.25E+02 + 67L3 160.001.59E-036.10E-021.03E+001.18E+019.79E-048.10E-022.34E+003.43E+01 + 67L3 225.005.13E-041.18E-021.42E-011.22E+003.58E-041.58E-023.28E-013.69E+00 + 67L3 310.001.82E-042.64E-032.29E-021.51E-011.41E-043.50E-035.43E-024.85E-01 + 67L3 400.008.19E-058.31E-045.58E-033.00E-026.81E-051.08E-031.35E-021.02E-01 + 67L3 510.003.95E-052.88E-041.53E-036.81E-033.46E-053.62E-043.69E-032.39E-02 + 67L3 740.001.38E-056.28E-052.35E-048.05E-041.28E-057.33E-055.40E-042.84E-03 + 67L31000.006.26E-062.03E-055.90E-051.66E-046.01E-062.21E-051.22E-045.44E-04 + 67L31500.002.42E-065.31E-061.13E-052.49E-052.36E-065.30E-061.84E-056.57E-05 + 67M1 3.135.73E+002.36E+041.44E+062.45E+081.91E+037.54E+065.27E+098.19E+11 + 67M1 4.134.14E+007.53E+035.76E+054.06E+078.34E+021.93E+068.72E+081.20E+11 + 67M1 6.132.30E+001.36E+031.55E+055.54E+062.55E+022.80E+057.03E+077.54E+09 + 67M1 10.139.52E-011.29E+021.96E+049.73E+055.68E+012.48E+043.13E+062.30E+08 + 67M1 17.133.39E-018.23E+001.52E+038.26E+041.19E+012.06E+031.35E+056.41E+06 + 67M1 26.001.40E-017.92E-011.58E+028.21E+033.43E+003.00E+021.22E+044.02E+05 + 67M1 41.005.01E-021.38E-011.13E+015.25E+028.91E-013.90E+019.68E+022.14E+04 + 67M1 53.002.74E-028.26E-022.55E+001.05E+024.18E-011.27E+012.44E+024.28E+03 + 67M1 71.001.35E-024.72E-025.46E-011.65E+011.78E-013.68E+005.28E+017.15E+02 + 67M1 104.005.25E-032.01E-021.15E-011.73E+005.90E-027.70E-017.71E+007.50E+01 + 67M1 150.002.09E-037.92E-033.50E-022.71E-012.08E-021.83E-011.33E+009.47E+00 + 67M1 280.004.44E-041.47E-035.14E-032.12E-023.71E-031.88E-028.24E-023.59E-01 + 67M1 500.001.17E-043.36E-049.50E-042.78E-038.03E-042.78E-038.29E-032.42E-02 + 67M2 2.921.33E+014.67E+069.90E+092.50E+122.42E+022.67E+054.92E+072.60E+09 + 67M2 3.928.37E+001.08E+061.46E+093.22E+119.99E+017.05E+041.14E+078.41E+08 + 67M2 5.923.77E+001.37E+051.04E+081.80E+102.89E+011.13E+041.43E+061.13E+08 + 67M2 9.921.16E+001.05E+044.08E+064.96E+086.11E+001.22E+031.09E+057.23E+06 + 67M2 16.922.95E-017.49E+021.54E+051.25E+071.23E+001.31E+027.84E+033.83E+05 + 67M2 26.008.92E-029.11E+011.16E+046.72E+053.39E-012.27E+019.69E+023.52E+04 + 67M2 41.002.33E-021.00E+017.85E+023.13E+048.70E-023.67E+001.08E+022.80E+03 + 67M2 53.001.06E-022.92E+001.76E+025.65E+034.06E-021.33E+003.19E+016.73E+02 + 67M2 71.004.28E-037.29E-013.27E+018.22E+021.71E-024.25E-018.00E+001.34E+02 + 67M2 104.001.28E-031.23E-013.79E+006.90E+015.54E-039.77E-021.34E+001.66E+01 + 67M2 150.003.99E-042.31E-025.03E-016.77E+001.90E-032.44E-022.51E-012.32E+00 + 67M2 280.005.63E-051.50E-031.88E-021.54E-013.12E-042.46E-031.57E-029.09E-02 + 67M2 500.009.95E-061.41E-041.11E-036.00E-035.97E-053.21E-041.39E-035.43E-03 + 67M3 2.743.33E+019.99E+062.29E+105.98E+125.15E+011.18E+072.29E+114.61E+14 + 67M3 3.741.89E+012.09E+062.97E+096.62E+112.01E+012.49E+062.66E+103.23E+13 + 67M3 5.747.58E+002.43E+051.85E+083.17E+105.46E+002.93E+051.39E+098.76E+11 + 67M3 9.742.09E+001.69E+046.43E+067.59E+081.09E+002.09E+043.73E+071.12E+10 + 67M3 16.744.82E-011.11E+032.18E+051.71E+072.10E-011.41E+039.66E+051.46E+08 + 67M3 26.001.33E-011.21E+021.45E+047.96E+055.52E-021.57E+025.21E+044.72E+06 + 67M3 41.003.25E-021.24E+018.97E+023.38E+041.39E-021.63E+012.69E+031.49E+05 + 67M3 53.001.43E-023.44E+001.89E+025.73E+036.40E-034.57E+005.22E+022.23E+04 + 67M3 71.005.53E-038.05E-013.24E+017.64E+022.65E-031.08E+008.32E+012.66E+03 + 67M3 104.001.56E-031.22E-013.30E+005.57E+018.46E-041.65E-017.96E+001.78E+02 + 67M3 150.004.62E-042.04E-023.76E-014.62E+002.85E-042.77E-028.90E-011.44E+01 + 67M3 280.006.04E-051.04E-031.01E-027.29E-024.58E-051.41E-032.45E-022.42E-01 + 67M3 500.001.02E-057.71E-054.20E-041.91E-038.92E-069.86E-051.04E-036.94E-03 + 67M4 2.398.63E+013.08E+052.00E+102.85E+141.55E+013.65E+053.72E+093.30E+12 + 67M4 3.392.91E+015.17E+041.72E+091.35E+135.01E+006.34E+043.52E+082.38E+11 + 67M4 5.396.25E+004.87E+036.60E+072.42E+111.09E+006.17E+031.60E+077.33E+09 + 67M4 9.398.72E-012.89E+021.32E+062.10E+091.69E-013.77E+024.16E+051.17E+08 + 67M4 16.391.06E-011.68E+012.60E+041.91E+072.49E-022.26E+011.14E+041.93E+06 + 67M4 26.001.71E-021.56E+001.01E+034.09E+054.90E-032.20E+006.06E+026.70E+04 + 67M4 41.002.65E-031.47E-014.18E+019.64E+039.53E-042.21E-013.48E+012.51E+03 + 67M4 53.009.05E-043.86E-027.00E+001.19E+033.73E-046.05E-027.05E+004.02E+02 + 67M4 71.002.63E-048.41E-039.28E-011.13E+021.27E-041.39E-021.16E+005.06E+01 + 67M4 104.005.18E-051.16E-036.84E-025.39E+003.04E-052.05E-031.13E-013.49E+00 + 67M4 150.001.09E-051.76E-045.87E-033.08E-017.64E-063.30E-041.25E-022.79E-01 + 67M4 280.007.99E-077.74E-061.05E-042.75E-037.14E-071.52E-053.17E-044.22E-03 + 67M4 500.007.63E-084.93E-073.25E-064.43E-057.95E-089.21E-071.17E-051.01E-04 + 67M5 2.351.30E+023.83E+053.57E+104.61E+149.39E+003.41E+041.92E+101.11E+15 + 67M5 3.354.28E+016.21E+042.96E+092.07E+132.99E+005.83E+031.61E+094.70E+13 + 67M5 5.358.91E+005.65E+031.09E+083.54E+116.47E-015.65E+026.11E+077.27E+11 + 67M5 9.351.20E+003.25E+022.12E+062.91E+091.01E-013.50E+011.23E+065.20E+09 + 67M5 16.351.43E-011.83E+014.07E+042.53E+071.52E-022.18E+002.49E+043.89E+07 + 67M5 26.002.23E-021.64E+001.52E+035.13E+053.06E-032.21E-019.78E+027.05E+05 + 67M5 41.003.38E-031.49E-016.05E+011.15E+046.13E-042.37E-024.10E+011.46E+04 + 67M5 53.001.14E-033.82E-029.86E+001.37E+032.45E-046.79E-036.89E+001.69E+03 + 67M5 71.003.29E-048.06E-031.26E+001.23E+028.52E-051.65E-039.07E-011.49E+02 + 67M5 104.006.42E-051.05E-038.64E-025.42E+002.13E-052.66E-046.51E-026.60E+00 + 67M5 150.001.35E-051.52E-046.79E-032.78E-015.61E-064.75E-055.31E-033.51E-01 + 67M5 280.001.02E-066.21E-069.84E-051.93E-035.95E-072.79E-068.05E-052.71E-03 + 67M5 500.001.14E-074.00E-072.45E-062.31E-058.17E-082.39E-072.03E-063.54E-05 + 67N+ 50.001.75E-022.37E+001.53E+026.02E+031.60E-017.16E+003.42E+021.36E+04 + 67N+ 70.006.79E-034.64E-012.04E+015.66E+025.91E-021.61E+004.64E+011.22E+03 + 67N+ 100.002.56E-038.87E-022.58E+005.05E+012.13E-023.59E-016.32E+001.09E+02 + 67N+ 150.008.36E-041.43E-022.58E-013.43E+006.65E-036.91E-027.31E-017.93E+00 + 67N+ 200.003.80E-044.19E-035.33E-025.41E-012.93E-032.25E-021.72E-011.37E+00 + 67N+ 500.003.72E-051.51E-046.78E-042.96E-032.38E-048.90E-043.04E-031.06E-02 + 68K 58.481.09E+001.89E+006.24E-016.08E-021.16E+011.43E+023.11E+021.46E+02 + 68K 59.181.06E+001.94E+008.54E-011.64E-011.12E+011.37E+023.15E+021.96E+02 + 68K 60.481.00E+002.02E+001.28E+004.84E-011.05E+011.26E+023.18E+022.85E+02 + 68K 63.688.77E-012.10E+002.24E+001.84E+009.02E+001.05E+023.10E+024.65E+02 + 68K 67.487.56E-012.09E+003.13E+004.00E+007.62E+008.44E+012.87E+025.99E+02 + 68K 71.006.64E-012.02E+003.69E+006.02E+006.57E+007.01E+012.60E+026.57E+02 + 68K 77.005.38E-011.83E+004.15E+008.76E+005.19E+005.21E+012.13E+026.62E+02 + 68K 85.004.17E-011.55E+004.15E+001.06E+013.90E+003.63E+011.60E+025.80E+02 + 68K 97.002.95E-011.17E+003.59E+001.07E+012.67E+002.24E+011.04E+024.22E+02 + 68K 110.002.12E-018.64E-012.84E+009.17E+001.86E+001.43E+016.68E+012.85E+02 + 68K 127.001.45E-015.94E-012.03E+006.83E+001.23E+008.51E+003.93E+011.70E+02 + 68K 140.001.12E-014.54E-011.56E+005.33E+009.36E-016.02E+002.72E+011.17E+02 + 68K 157.008.28E-023.29E-011.13E+003.85E+006.77E-014.02E+001.76E+017.37E+01 + 68K 180.005.78E-022.22E-017.50E-012.52E+004.62E-012.50E+001.04E+014.18E+01 + 68K 205.004.12E-021.52E-015.02E-011.65E+003.22E-011.60E+006.29E+002.42E+01 + 68K 270.002.04E-026.85E-022.11E-016.47E-011.52E-016.36E-012.20E+007.50E+00 + 68K 355.001.04E-023.19E-029.07E-022.55E-017.33E-022.64E-017.99E-012.38E+00 + 68K 450.006.00E-031.71E-024.52E-021.17E-013.95E-021.26E-013.43E-019.08E-01 + 68K 560.003.71E-039.99E-032.47E-025.93E-022.25E-026.59E-021.62E-013.87E-01 + 68K 790.001.83E-034.59E-031.03E-022.19E-029.52E-032.48E-025.32E-021.10E-01 + 68K 1050.001.07E-032.55E-035.31E-031.03E-024.75E-031.15E-022.25E-024.18E-02 + 68K 1300.007.27E-041.68E-033.33E-036.10E-032.85E-036.65E-031.22E-022.13E-02 + 68K 1550.005.38E-041.20E-032.30E-034.03E-031.88E-034.27E-037.56E-031.25E-02 + 68L1 10.753.44E+007.74E+023.46E+042.07E+052.40E+028.28E+045.17E+067.22E+07 + 68L1 11.453.10E+005.58E+023.11E+043.37E+051.99E+026.14E+043.66E+066.13E+07 + 68L1 12.752.58E+003.15E+022.28E+044.20E+051.44E+023.69E+042.03E+064.11E+07 + 68L1 15.951.72E+009.02E+019.29E+032.77E+057.39E+011.29E+045.95E+051.42E+07 + 68L1 19.751.14E+002.51E+013.30E+031.20E+053.91E+014.80E+031.86E+054.51E+06 + 68L1 23.008.41E-019.59E+001.48E+035.75E+042.49E+012.39E+038.12E+041.91E+06 + 68L1 29.005.17E-012.19E+004.00E+021.64E+041.25E+018.37E+022.34E+045.02E+05 + 68L1 37.003.03E-016.56E-019.36E+013.91E+036.08E+002.83E+026.40E+031.20E+05 + 68L1 49.001.59E-013.57E-011.68E+016.79E+022.66E+008.34E+011.48E+032.31E+04 + 68L1 62.009.11E-022.55E-014.26E+001.51E+021.33E+003.06E+014.42E+025.85E+03 + 68L1 79.005.06E-021.67E-011.30E+003.27E+016.58E-011.12E+011.31E+021.44E+03 + 68L1 92.003.47E-021.22E-017.18E-011.32E+014.23E-016.02E+006.18E+016.07E+02 + 68L1 109.002.27E-028.31E-024.06E-015.13E+002.60E-013.06E+002.72E+012.34E+02 + 68L1 132.001.40E-025.21E-022.27E-011.97E+001.50E-011.45E+001.10E+018.13E+01 + 68L1 160.008.66E-033.17E-021.28E-018.34E-018.74E-026.94E-014.50E+002.88E+01 + 68L1 225.003.70E-031.27E-024.64E-022.15E-013.39E-021.98E-019.87E-014.87E+00 + 68L1 310.001.70E-035.42E-031.78E-026.64E-021.42E-026.50E-022.56E-011.00E+00 + 68L1 400.009.39E-042.81E-038.50E-032.74E-027.21E-032.79E-029.31E-023.07E-01 + 68L1 510.005.48E-041.55E-034.31E-031.23E-023.83E-031.29E-023.73E-021.06E-01 + 68L1 740.002.54E-046.70E-041.64E-033.92E-031.49E-034.26E-031.01E-022.34E-02 + 68L11000.001.43E-043.58E-047.97E-041.69E-037.10E-041.83E-033.86E-037.76E-03 + 68L11500.007.05E-051.63E-043.26E-046.02E-042.68E-046.31E-041.17E-032.04E-03 + 68L2 10.267.24E+004.29E+041.05E+073.01E+082.69E+013.40E+037.14E+043.87E+05 + 68L2 10.966.05E+003.09E+047.13E+062.45E+082.20E+012.64E+036.60E+046.36E+05 + 68L2 12.264.43E+001.77E+043.72E+061.53E+081.56E+011.71E+035.14E+048.15E+05 + 68L2 15.462.30E+005.58E+039.64E+054.64E+077.76E+006.96E+022.45E+045.85E+05 + 68L2 19.261.21E+001.88E+032.68E+051.30E+073.99E+002.96E+021.05E+042.84E+05 + 68L2 23.007.16E-017.86E+029.52E+044.43E+062.33E+001.48E+025.07E+031.38E+05 + 68L2 29.003.54E-012.52E+022.47E+041.04E+061.16E+006.00E+011.87E+034.81E+04 + 68L2 37.001.67E-017.70E+016.01E+032.21E+055.59E-012.33E+016.33E+021.47E+04 + 68L2 49.006.89E-021.98E+011.19E+033.64E+042.41E-017.82E+001.78E+023.52E+03 + 68L2 62.003.25E-026.45E+003.09E+027.98E+031.20E-013.15E+006.08E+011.03E+03 + 68L2 79.001.49E-022.05E+007.83E+011.68E+035.83E-021.24E+002.01E+012.88E+02 + 68L2 92.009.12E-031.00E+003.33E+016.35E+023.72E-026.96E-011.00E+011.29E+02 + 68L2 109.005.26E-034.58E-011.29E+012.16E+022.26E-023.66E-014.63E+005.25E+01 + 68L2 132.002.83E-031.90E-014.51E+006.49E+011.29E-021.78E-011.94E+001.91E+01 + 68L2 160.001.53E-037.98E-021.59E+001.96E+017.33E-038.67E-028.19E-016.97E+00 + 68L2 225.005.16E-041.77E-022.61E-012.47E+002.73E-032.47E-021.81E-011.20E+00 + 68L2 310.001.90E-044.50E-035.08E-023.79E-011.08E-037.80E-034.55E-022.40E-01 + 68L2 400.008.80E-051.58E-031.45E-029.02E-025.24E-043.18E-031.56E-026.95E-02 + 68L2 510.004.31E-056.00E-044.61E-032.43E-022.63E-041.38E-035.80E-032.22E-02 + 68L2 740.001.51E-051.48E-048.74E-043.66E-039.24E-053.96E-041.35E-034.19E-03 + 68L21000.006.74E-065.10E-052.49E-048.87E-043.99E-051.50E-044.42E-041.18E-03 + 68L21500.002.38E-061.35E-055.26E-051.54E-041.30E-054.24E-051.06E-042.39E-04 + 68L3 9.361.56E+019.67E+042.74E+079.09E+085.89E+001.14E+051.97E+083.59E+10 + 68L3 10.061.27E+016.72E+041.78E+076.95E+084.72E+007.95E+041.21E+082.06E+10 + 68L3 11.368.93E+003.63E+048.57E+063.94E+083.25E+004.33E+045.31E+078.12E+09 + 68L3 14.564.28E+001.04E+041.93E+061.00E+081.52E+001.26E+049.99E+061.22E+09 + 68L3 18.362.11E+003.21E+034.77E+052.44E+077.44E-013.95E+032.13E+062.10E+08 + 68L3 23.001.05E+001.03E+031.23E+055.80E+063.73E-011.29E+034.79E+053.85E+07 + 68L3 29.005.01E-013.20E+023.03E+041.28E+061.83E-014.06E+021.05E+056.83E+06 + 68L3 37.002.28E-019.39E+016.98E+032.53E+058.71E-021.21E+022.17E+041.13E+06 + 68L3 49.009.05E-022.30E+011.29E+033.83E+043.70E-023.00E+013.60E+031.46E+05 + 68L3 62.004.13E-027.09E+003.13E+027.79E+031.81E-029.38E+008.18E+022.68E+04 + 68L3 79.001.83E-022.12E+007.34E+011.51E+038.71E-032.84E+001.82E+024.82E+03 + 68L3 92.001.09E-029.97E-012.96E+015.35E+025.50E-031.34E+007.16E+011.66E+03 + 68L3 109.006.16E-034.32E-011.08E+011.69E+023.31E-035.85E-012.56E+015.15E+02 + 68L3 132.003.22E-031.69E-013.46E+004.64E+011.86E-032.30E-018.16E+001.40E+02 + 68L3 160.001.69E-036.60E-021.11E+001.27E+011.05E-039.04E-022.62E+003.84E+01 + 68L3 225.005.45E-041.28E-021.53E-011.31E+003.84E-041.76E-023.67E-014.12E+00 + 68L3 310.001.94E-042.86E-032.47E-021.62E-011.51E-043.89E-036.07E-025.41E-01 + 68L3 400.008.73E-059.00E-046.04E-033.23E-027.31E-051.20E-031.50E-021.13E-01 + 68L3 510.004.22E-053.11E-041.65E-037.35E-033.71E-054.01E-044.11E-032.66E-02 + 68L3 740.001.48E-056.77E-052.55E-048.71E-041.37E-058.06E-056.00E-043.15E-03 + 68L31000.006.69E-062.19E-056.38E-051.80E-046.42E-062.41E-051.35E-046.04E-04 + 68L31500.002.58E-065.70E-061.22E-052.69E-052.52E-065.75E-062.03E-057.27E-05 + 68M1 3.215.47E+002.32E+041.44E+062.18E+081.96E+037.52E+065.14E+097.78E+11 + 68M1 4.213.99E+007.58E+035.77E+053.96E+078.71E+021.98E+068.84E+081.19E+11 + 68M1 6.212.24E+001.42E+031.56E+055.55E+062.72E+022.97E+057.40E+077.80E+09 + 68M1 10.219.42E-011.40E+022.03E+049.74E+056.14E+012.69E+043.38E+062.45E+08 + 68M1 17.213.39E-019.42E+001.63E+038.57E+041.29E+012.27E+031.48E+056.97E+06 + 68M1 26.001.42E-019.51E-011.78E+028.93E+033.79E+003.36E+021.36E+044.48E+05 + 68M1 41.005.12E-021.45E-011.31E+015.87E+029.84E-014.35E+011.08E+032.38E+04 + 68M1 53.002.81E-028.26E-022.98E+001.19E+024.62E-011.42E+012.71E+024.74E+03 + 68M1 71.001.39E-024.68E-026.28E-011.90E+011.97E-014.09E+005.85E+017.92E+02 + 68M1 104.005.41E-032.01E-021.25E-011.97E+006.51E-028.53E-018.53E+008.27E+01 + 68M1 150.002.17E-038.03E-033.67E-023.01E-012.30E-022.03E-011.46E+001.04E+01 + 68M1 280.004.64E-041.53E-035.38E-032.27E-024.08E-032.07E-029.05E-023.94E-01 + 68M1 500.001.23E-043.53E-041.00E-032.97E-038.81E-043.05E-039.08E-032.65E-02 + 68M2 3.011.26E+014.45E+069.16E+092.23E+122.47E+022.63E+054.68E+072.31E+09 + 68M2 4.018.04E+001.06E+061.41E+093.04E+111.04E+027.17E+041.12E+077.90E+08 + 68M2 6.013.70E+001.41E+051.05E+081.79E+103.08E+011.19E+041.47E+061.12E+08 + 68M2 10.011.17E+001.11E+044.27E+065.11E+086.63E+001.31E+031.15E+057.42E+06 + 68M2 17.013.02E-018.03E+021.64E+051.32E+071.35E+001.42E+028.38E+034.02E+05 + 68M2 26.009.33E-021.00E+021.28E+047.33E+053.78E-012.51E+011.06E+033.81E+04 + 68M2 41.002.46E-021.10E+018.63E+023.41E+049.71E-024.05E+001.19E+023.04E+03 + 68M2 53.001.13E-023.21E+001.94E+026.18E+034.53E-021.47E+003.50E+017.33E+02 + 68M2 71.004.56E-038.03E-013.60E+019.00E+021.91E-024.70E-018.79E+001.46E+02 + 68M2 104.001.37E-031.36E-014.17E+007.57E+016.21E-031.08E-011.48E+001.82E+01 + 68M2 150.004.31E-042.55E-025.56E-017.45E+002.13E-032.72E-022.77E-012.55E+00 + 68M2 280.006.12E-051.67E-032.08E-021.70E-013.51E-042.75E-031.74E-021.00E-01 + 68M2 500.001.09E-051.57E-041.24E-036.68E-036.74E-053.59E-041.55E-036.04E-03 + 68M3 2.813.18E+019.54E+062.13E+105.40E+125.13E+011.17E+072.22E+114.36E+14 + 68M3 3.811.83E+012.07E+062.89E+096.27E+112.04E+012.56E+062.70E+103.24E+13 + 68M3 5.817.49E+002.48E+051.88E+083.14E+105.67E+003.11E+051.47E+099.26E+11 + 68M3 9.812.11E+001.78E+046.71E+067.78E+081.15E+002.28E+044.09E+071.23E+10 + 68M3 16.814.93E-011.18E+032.31E+051.79E+072.24E-011.55E+031.08E+061.63E+08 + 68M3 26.001.38E-011.32E+021.57E+048.57E+055.95E-021.77E+025.97E+045.43E+06 + 68M3 41.003.41E-021.35E+019.75E+023.64E+041.50E-021.84E+013.07E+031.71E+05 + 68M3 53.001.51E-023.75E+002.06E+026.18E+036.90E-035.15E+005.96E+022.54E+04 + 68M3 71.005.84E-038.77E-013.52E+018.24E+022.86E-031.21E+009.47E+013.03E+03 + 68M3 104.001.66E-031.33E-013.58E+006.02E+019.13E-041.86E-019.03E+002.02E+02 + 68M3 150.004.92E-042.22E-024.09E-015.00E+003.07E-043.12E-021.01E+001.63E+01 + 68M3 280.006.45E-051.13E-031.10E-027.91E-024.95E-051.58E-032.76E-022.72E-01 + 68M3 500.001.09E-058.40E-054.58E-042.08E-039.62E-061.10E-041.17E-037.80E-03 + 68M4 2.458.33E+012.96E+051.88E+102.63E+141.56E+013.66E+053.63E+093.13E+12 + 68M4 3.452.89E+015.17E+041.71E+091.33E+135.16E+006.60E+043.62E+082.39E+11 + 68M4 5.456.37E+005.04E+036.85E+072.53E+111.15E+006.64E+031.71E+077.73E+09 + 68M4 9.459.10E-013.07E+021.42E+062.27E+091.82E-014.16E+024.59E+051.28E+08 + 68M4 16.451.13E-011.81E+012.86E+042.11E+072.71E-022.54E+011.28E+042.15E+06 + 68M4 26.001.86E-021.72E+001.14E+034.66E+055.42E-032.51E+006.95E+027.66E+04 + 68M4 41.002.89E-031.63E-014.71E+011.10E+041.06E-032.52E-013.98E+012.87E+03 + 68M4 53.009.91E-044.28E-027.89E+001.36E+034.14E-046.91E-028.08E+004.59E+02 + 68M4 71.002.89E-049.36E-031.05E+001.28E+021.41E-041.59E-021.33E+005.79E+01 + 68M4 104.005.76E-051.29E-037.72E-026.14E+003.39E-052.34E-031.30E-014.00E+00 + 68M4 150.001.22E-051.98E-046.63E-033.51E-018.55E-063.78E-041.44E-023.20E-01 + 68M4 280.008.87E-078.76E-061.18E-043.14E-038.01E-071.74E-053.65E-044.84E-03 + 68M4 500.008.50E-085.59E-073.68E-065.07E-058.93E-081.06E-061.35E-051.16E-04 + 68M5 2.411.26E+023.66E+053.38E+104.28E+149.41E+003.36E+041.89E+101.07E+15 + 68M5 3.414.24E+016.16E+042.95E+092.04E+133.07E+005.96E+031.67E+094.82E+13 + 68M5 5.419.07E+005.79E+031.14E+083.69E+116.79E-015.97E+026.61E+077.89E+11 + 68M5 9.411.25E+003.41E+022.29E+063.16E+091.08E-013.78E+011.38E+065.87E+09 + 68M5 16.411.51E-011.95E+014.48E+042.80E+071.65E-022.39E+002.83E+044.48E+07 + 68M5 26.002.41E-021.79E+001.72E+035.83E+053.35E-032.46E-011.14E+038.36E+05 + 68M5 41.003.68E-031.63E-016.84E+011.31E+046.74E-042.63E-024.78E+011.72E+04 + 68M5 53.001.25E-034.19E-021.11E+011.56E+032.69E-047.55E-038.02E+001.99E+03 + 68M5 71.003.60E-048.86E-031.42E+001.40E+029.40E-051.84E-031.06E+001.76E+02 + 68M5 104.007.05E-051.16E-039.78E-026.15E+002.35E-052.96E-047.57E-027.74E+00 + 68M5 150.001.49E-051.68E-047.68E-033.16E-016.22E-065.29E-056.16E-034.10E-01 + 68M5 280.001.14E-066.87E-061.11E-042.19E-036.60E-073.11E-069.29E-053.16E-03 + 68M5 500.001.20E-074.41E-072.75E-062.61E-059.07E-082.66E-072.32E-064.11E-05 + 68N+ 50.001.82E-022.60E+001.68E+026.63E+031.77E-018.01E+003.88E+021.56E+04 + 68N+ 70.007.08E-035.08E-012.24E+016.21E+026.55E-021.80E+005.24E+011.39E+03 + 68N+ 100.002.68E-039.68E-022.84E+005.54E+012.36E-024.00E-017.10E+001.23E+02 + 68N+ 150.008.76E-041.56E-022.84E-013.77E+007.37E-037.67E-028.16E-018.89E+00 + 68N+ 200.003.99E-044.54E-035.86E-025.95E-013.25E-032.49E-021.91E-011.53E+00 + 68N+ 500.003.90E-051.60E-047.32E-043.22E-032.60E-049.72E-043.33E-031.16E-02 + 69K 60.391.02E+001.70E+005.37E-014.88E-021.15E+011.36E+022.85E+021.28E+02 + 69K 61.099.91E-011.74E+007.31E-011.32E-011.11E+011.30E+022.89E+021.72E+02 + 69K 62.399.40E-011.81E+001.09E+003.87E-011.04E+011.21E+022.92E+022.48E+02 + 69K 65.598.28E-011.89E+001.91E+001.47E+009.02E+001.01E+022.86E+024.06E+02 + 69K 69.397.17E-011.89E+002.68E+003.23E+007.65E+008.17E+012.66E+025.26E+02 + 69K 73.006.30E-011.83E+003.18E+004.95E+006.60E+006.79E+012.42E+025.82E+02 + 69K 79.005.14E-011.67E+003.61E+007.28E+005.25E+005.09E+012.00E+025.93E+02 + 69K 87.004.00E-011.42E+003.65E+008.97E+003.97E+003.58E+011.52E+025.26E+02 + 69K 99.002.86E-011.09E+003.21E+009.22E+002.74E+002.24E+011.00E+023.90E+02 + 69K 112.002.07E-018.12E-012.58E+008.05E+001.92E+001.44E+016.51E+012.68E+02 + 69K 129.001.43E-015.64E-011.87E+006.13E+001.28E+008.66E+003.89E+011.63E+02 + 69K 142.001.11E-014.35E-011.46E+004.85E+009.78E-016.16E+002.71E+011.13E+02 + 69K 159.008.23E-023.17E-011.06E+003.55E+007.11E-014.14E+001.77E+017.22E+01 + 69K 182.005.78E-022.16E-017.16E-012.36E+004.88E-012.59E+001.05E+014.15E+01 + 69K 210.003.99E-021.43E-014.63E-011.49E+003.28E-011.59E+006.09E+002.28E+01 + 69K 275.002.01E-026.63E-022.01E-016.09E-011.57E-016.46E-012.19E+007.30E+00 + 69K 360.001.05E-023.16E-028.88E-022.48E-017.67E-022.72E-018.11E-012.38E+00 + 69K 450.006.24E-031.77E-024.65E-021.20E-014.28E-021.36E-013.66E-019.64E-01 + 69K 560.003.86E-031.04E-022.56E-026.14E-022.44E-027.10E-021.73E-014.12E-01 + 69K 790.001.91E-034.80E-031.07E-022.29E-021.03E-022.67E-025.70E-021.17E-01 + 69K 1050.001.11E-032.67E-035.57E-031.09E-025.12E-031.24E-022.41E-024.47E-02 + 69K 1300.007.61E-041.76E-033.50E-036.42E-033.06E-037.14E-031.31E-022.27E-02 + 69K 1550.005.63E-041.27E-032.42E-034.25E-032.02E-034.59E-038.11E-031.34E-02 + 69L1 11.123.22E+007.19E+023.06E+041.69E+052.39E+027.88E+044.73E+066.32E+07 + 69L1 11.822.91E+005.25E+022.77E+042.80E+051.99E+025.90E+043.39E+065.41E+07 + 69L1 13.122.44E+003.02E+022.07E+043.57E+051.46E+023.60E+041.91E+063.69E+07 + 69L1 16.321.65E+009.05E+018.74E+032.47E+057.60E+011.29E+045.79E+051.33E+07 + 69L1 20.121.10E+002.63E+013.21E+031.11E+054.07E+014.90E+031.85E+054.34E+06 + 69L1 24.007.74E-018.78E+001.27E+034.78E+042.41E+012.19E+037.10E+041.61E+06 + 69L1 30.004.85E-012.18E+003.65E+021.44E+041.24E+017.97E+022.14E+044.45E+05 + 69L1 38.002.89E-016.68E-019.06E+013.61E+036.18E+002.79E+026.11E+031.12E+05 + 69L1 50.001.54E-013.44E-011.73E+016.63E+022.75E+008.45E+011.46E+032.23E+04 + 69L1 63.008.95E-022.42E-014.53E+001.54E+021.40E+003.16E+014.47E+025.80E+03 + 69L1 80.005.02E-021.60E-011.38E+003.45E+016.97E-011.17E+011.35E+021.46E+03 + 69L1 93.003.47E-021.18E-017.50E-011.41E+014.51E-016.34E+006.42E+016.21E+02 + 69L1 110.002.28E-028.08E-024.17E-015.51E+002.78E-013.24E+002.85E+012.42E+02 + 69L1 133.001.42E-025.11E-022.30E-012.10E+001.62E-011.54E+001.16E+018.49E+01 + 69L1 160.008.94E-033.20E-021.32E-019.08E-019.59E-027.62E-014.92E+003.13E+01 + 69L1 225.003.83E-031.30E-024.80E-022.29E-013.72E-022.17E-011.08E+005.30E+00 + 69L1 310.001.77E-035.59E-031.86E-027.03E-021.55E-027.10E-022.79E-011.09E+00 + 69L1 400.009.80E-042.92E-038.89E-032.90E-027.89E-033.05E-021.01E-013.33E-01 + 69L1 510.005.74E-041.62E-034.54E-031.30E-024.19E-031.41E-024.06E-021.15E-01 + 69L1 740.002.68E-047.05E-041.73E-034.17E-031.63E-034.63E-031.10E-022.54E-02 + 69L11000.001.51E-043.78E-048.47E-041.80E-037.71E-041.99E-034.18E-038.41E-03 + 69L11500.007.43E-051.73E-043.47E-046.43E-042.90E-046.85E-041.27E-032.20E-03 + 69L2 10.626.79E+003.95E+049.23E+062.54E+082.68E+013.23E+036.47E+043.24E+05 + 69L2 11.325.71E+002.88E+046.38E+062.09E+082.21E+012.53E+036.03E+045.41E+05 + 69L2 12.624.23E+001.67E+043.39E+061.34E+081.59E+011.66E+034.76E+047.08E+05 + 69L2 15.822.24E+005.45E+039.12E+054.21E+078.01E+006.92E+022.33E+045.30E+05 + 69L2 19.621.20E+001.88E+032.60E+051.22E+074.18E+003.00E+021.03E+042.66E+05 + 69L2 24.006.58E-016.96E+028.05E+043.60E+062.27E+001.37E+024.49E+031.17E+05 + 69L2 30.003.35E-012.33E+022.20E+048.94E+051.16E+005.74E+011.72E+034.27E+04 + 69L2 38.001.61E-017.39E+015.59E+031.99E+055.72E-012.29E+016.04E+021.36E+04 + 69L2 50.006.83E-021.97E+011.15E+033.43E+042.52E-017.92E+001.75E+023.38E+03 + 69L2 63.003.28E-026.53E+003.08E+027.77E+031.27E-013.25E+006.13E+011.02E+03 + 69L2 80.001.52E-022.12E+007.96E+011.68E+036.24E-021.30E+002.06E+012.90E+02 + 69L2 93.009.38E-031.05E+003.42E+016.43E+024.00E-027.34E-011.04E+011.31E+02 + 69L2 110.005.46E-034.81E-011.35E+012.22E+022.44E-023.89E-014.84E+005.41E+01 + 69L2 133.002.96E-032.02E-014.74E+006.74E+011.40E-021.90E-012.05E+001.99E+01 + 69L2 160.001.64E-038.76E-021.74E+002.14E+018.18E-039.57E-028.97E-017.59E+00 + 69L2 225.005.55E-041.95E-022.87E-012.71E+003.05E-032.74E-021.99E-011.31E+00 + 69L2 310.002.06E-044.96E-035.60E-024.16E-011.21E-038.65E-035.01E-022.64E-01 + 69L2 400.009.56E-051.74E-031.60E-029.93E-025.87E-043.53E-031.73E-027.65E-02 + 69L2 510.004.70E-056.64E-045.10E-032.68E-022.95E-041.53E-036.43E-032.45E-02 + 69L2 740.001.64E-051.64E-049.70E-044.06E-031.04E-044.43E-041.50E-034.64E-03 + 69L21000.007.39E-065.66E-052.77E-049.85E-044.49E-051.68E-044.93E-041.31E-03 + 69L21500.002.63E-061.50E-055.87E-051.72E-041.46E-054.76E-051.19E-042.67E-04 + 69L3 9.651.47E+018.96E+042.45E+077.80E+085.74E+001.09E+051.83E+083.22E+10 + 69L3 10.351.21E+016.29E+041.61E+076.02E+084.63E+007.72E+041.14E+081.88E+10 + 69L3 11.658.55E+003.45E+047.90E+063.48E+083.22E+004.27E+045.10E+077.59E+09 + 69L3 14.854.17E+001.01E+041.84E+069.19E+071.53E+001.27E+049.96E+061.19E+09 + 69L3 18.652.09E+003.20E+034.66E+052.31E+077.59E-014.09E+032.18E+062.11E+08 + 69L3 24.009.52E-018.97E+021.02E+054.64E+063.50E-011.17E+034.10E+053.16E+07 + 69L3 30.004.69E-012.91E+022.65E+041.08E+061.77E-013.84E+029.53E+045.99E+06 + 69L3 38.002.18E-018.88E+016.39E+032.24E+058.60E-021.19E+022.06E+041.05E+06 + 69L3 50.008.86E-022.24E+011.23E+033.55E+043.73E-023.04E+013.58E+031.42E+05 + 69L3 63.004.11E-027.07E+003.06E+027.45E+031.85E-029.69E+008.35E+022.69E+04 + 69L3 80.001.84E-022.16E+007.33E+011.48E+038.98E-032.98E+001.90E+024.95E+03 + 69L3 93.001.11E-021.02E+002.99E+015.31E+025.70E-031.42E+007.54E+011.73E+03 + 69L3 110.006.30E-034.47E-011.10E+011.70E+023.44E-036.25E-012.73E+015.42E+02 + 69L3 133.003.32E-031.76E-013.57E+004.72E+011.95E-032.47E-018.75E+001.48E+02 + 69L3 160.001.79E-037.14E-021.20E+001.36E+011.12E-031.01E-012.94E+004.29E+01 + 69L3 225.005.78E-041.39E-021.65E-011.41E+004.11E-041.96E-024.10E-014.60E+00 + 69L3 310.002.06E-043.09E-032.67E-021.75E-011.62E-044.32E-036.77E-026.03E-01 + 69L3 400.009.31E-059.74E-046.53E-033.48E-027.83E-051.33E-031.68E-021.26E-01 + 69L3 510.004.50E-053.37E-041.79E-037.92E-033.97E-054.43E-044.57E-032.96E-02 + 69L3 740.001.57E-057.30E-052.75E-049.40E-041.46E-058.86E-056.66E-043.50E-03 + 69L31000.007.18E-062.36E-056.89E-051.94E-046.86E-062.64E-051.49E-046.70E-04 + 69L31500.002.74E-066.11E-061.31E-052.90E-052.69E-066.23E-062.23E-058.04E-05 + 69M1 3.315.13E+002.22E+041.39E+061.83E+081.97E+037.28E+064.81E+097.02E+11 + 69M1 4.313.79E+007.47E+035.61E+053.70E+078.97E+021.99E+068.67E+081.13E+11 + 69M1 6.312.17E+001.45E+031.54E+055.42E+062.86E+023.09E+057.61E+077.82E+09 + 69M1 10.319.26E-011.50E+022.06E+049.60E+056.59E+012.88E+043.60E+062.57E+08 + 69M1 17.313.38E-011.07E+011.73E+038.80E+041.40E+012.47E+031.61E+057.49E+06 + 69M1 26.001.44E-011.14E+001.99E+029.67E+034.19E+003.76E+021.53E+044.99E+05 + 69M1 41.005.22E-021.56E-011.51E+016.52E+021.09E+004.85E+011.20E+032.64E+04 + 69M1 53.002.87E-028.34E-023.48E+001.34E+025.11E-011.58E+013.01E+025.25E+03 + 69M1 71.001.43E-024.64E-027.23E-012.17E+012.17E-014.54E+006.49E+018.75E+02 + 69M1 104.005.59E-032.01E-021.36E-012.26E+007.19E-029.45E-019.42E+009.11E+01 + 69M1 150.002.25E-038.14E-033.87E-023.36E-012.53E-022.24E-011.61E+001.14E+01 + 69M1 280.004.85E-041.58E-035.64E-032.44E-024.50E-032.28E-029.94E-024.31E-01 + 69M1 500.001.29E-043.71E-041.06E-033.17E-039.68E-043.35E-039.94E-032.90E-02 + 69M2 3.091.19E+014.25E+068.49E+092.01E+122.52E+022.60E+054.46E+072.06E+09 + 69M2 4.097.73E+001.05E+061.37E+092.86E+111.09E+027.29E+041.11E+077.43E+08 + 69M2 6.093.63E+001.44E+051.06E+081.77E+103.28E+011.24E+041.50E+061.10E+08 + 69M2 10.091.17E+001.17E+044.46E+065.26E+087.19E+001.40E+031.20E+057.61E+06 + 69M2 17.093.09E-018.61E+021.75E+051.39E+071.48E+001.54E+028.95E+034.23E+05 + 69M2 26.009.76E-021.10E+021.40E+047.98E+054.21E-012.77E+011.16E+034.13E+04 + 69M2 41.002.59E-021.21E+019.48E+023.73E+041.08E-014.48E+001.30E+023.30E+03 + 69M2 53.001.20E-023.53E+002.13E+026.75E+035.06E-021.63E+003.83E+017.97E+02 + 69M2 71.004.86E-038.84E-013.96E+019.84E+022.13E-025.21E-019.65E+001.60E+02 + 69M2 104.001.47E-031.49E-014.60E+008.30E+016.95E-031.20E-011.63E+001.99E+01 + 69M2 150.004.63E-042.82E-026.14E-018.19E+002.39E-033.02E-023.06E-012.80E+00 + 69M2 280.006.66E-051.85E-032.31E-021.88E-013.95E-043.06E-031.94E-021.11E-01 + 69M2 500.001.19E-051.75E-041.38E-037.42E-037.61E-054.03E-041.72E-036.72E-03 + 69M3 2.883.03E+019.12E+061.98E+104.86E+125.10E+011.16E+072.14E+114.12E+14 + 69M3 3.881.77E+012.05E+062.80E+095.92E+112.07E+012.63E+062.73E+103.23E+13 + 69M3 5.887.39E+002.54E+051.90E+083.10E+105.88E+003.30E+051.56E+099.74E+11 + 69M3 9.882.12E+001.86E+046.98E+067.96E+081.21E+002.48E+044.48E+071.35E+10 + 69M3 16.885.04E-011.26E+032.45E+051.87E+072.38E-011.71E+031.20E+061.82E+08 + 69M3 26.001.44E-011.44E+021.71E+049.22E+056.41E-021.99E+026.82E+046.23E+06 + 69M3 41.003.57E-021.47E+011.06E+033.92E+041.61E-022.07E+013.51E+031.95E+05 + 69M3 53.001.58E-024.08E+002.23E+026.66E+037.44E-035.80E+006.78E+022.89E+04 + 69M3 71.006.15E-039.55E-013.83E+018.88E+023.09E-031.37E+001.08E+023.44E+03 + 69M3 104.001.75E-031.45E-013.89E+006.49E+019.84E-042.09E-011.02E+012.29E+02 + 69M3 150.005.23E-042.42E-024.44E-015.40E+003.31E-043.51E-021.14E+001.84E+01 + 69M3 280.006.87E-051.23E-031.19E-028.57E-025.33E-051.77E-033.11E-023.06E-01 + 69M3 500.001.16E-059.15E-054.99E-042.26E-031.04E-051.22E-041.31E-038.74E-03 + 69M4 2.518.04E+012.85E+051.77E+102.43E+141.57E+013.67E+053.55E+092.98E+12 + 69M4 3.512.86E+015.16E+041.69E+091.30E+135.30E+006.87E+043.71E+082.40E+11 + 69M4 5.516.48E+005.20E+037.10E+072.62E+111.21E+007.14E+031.83E+078.14E+09 + 69M4 9.519.47E-013.25E+021.52E+062.46E+091.95E-014.58E+025.06E+051.39E+08 + 69M4 16.511.20E-011.95E+013.13E+042.33E+072.94E-022.83E+011.43E+042.39E+06 + 69M4 26.002.01E-021.89E+001.29E+035.31E+055.97E-032.86E+007.96E+028.74E+04 + 69M4 41.003.15E-031.80E-015.30E+011.25E+041.17E-032.88E-014.56E+013.28E+03 + 69M4 53.001.09E-034.75E-028.88E+001.54E+034.59E-047.89E-029.25E+005.24E+02 + 69M4 71.003.18E-041.04E-021.18E+001.46E+021.56E-041.81E-021.53E+006.61E+01 + 69M4 104.006.32E-051.44E-038.70E-026.99E+003.78E-052.68E-031.49E-014.56E+00 + 69M4 150.001.34E-052.21E-047.48E-034.00E-019.54E-064.32E-041.65E-023.66E-01 + 69M4 280.001.00E-069.85E-061.34E-043.58E-038.96E-071.99E-054.19E-045.55E-03 + 69M4 500.001.03E-076.29E-074.17E-065.79E-051.00E-071.21E-061.55E-051.34E-04 + 69M5 2.471.22E+023.49E+053.21E+103.97E+149.42E+003.32E+041.85E+101.03E+15 + 69M5 3.474.21E+016.10E+042.94E+092.02E+133.15E+006.09E+031.72E+094.93E+13 + 69M5 5.479.23E+005.92E+031.19E+083.84E+117.11E-016.28E+027.13E+078.53E+11 + 69M5 9.471.31E+003.58E+022.47E+063.41E+091.15E-014.08E+011.53E+066.60E+09 + 69M5 16.471.60E-012.08E+014.92E+043.09E+071.77E-022.61E+003.21E+045.15E+07 + 69M5 26.002.61E-021.94E+001.94E+036.62E+053.67E-032.73E-011.33E+039.89E+05 + 69M5 41.004.00E-031.78E-017.72E+011.48E+047.39E-042.93E-025.55E+012.03E+04 + 69M5 53.001.36E-034.59E-021.26E+011.77E+032.96E-048.38E-039.32E+002.35E+03 + 69M5 71.003.93E-049.71E-031.60E+001.59E+021.04E-042.04E-031.23E+002.06E+02 + 69M5 104.007.79E-051.28E-031.10E-016.97E+002.60E-053.29E-048.79E-029.07E+00 + 69M5 150.001.66E-051.86E-048.67E-033.58E-016.88E-065.88E-057.14E-034.79E-01 + 69M5 280.001.24E-067.65E-061.25E-042.49E-037.32E-073.46E-061.07E-043.67E-03 + 69M5 500.001.32E-074.91E-073.09E-062.96E-051.01E-072.96E-072.65E-064.76E-05 + 69N+ 50.001.89E-022.85E+001.84E+027.28E+031.96E-018.95E+004.39E+021.77E+04 + 69N+ 70.007.37E-035.56E-012.45E+016.81E+027.24E-022.00E+005.90E+011.57E+03 + 69N+ 100.002.80E-031.06E-013.11E+006.07E+012.61E-024.45E-017.95E+001.38E+02 + 69N+ 150.009.17E-041.69E-023.11E-014.14E+008.14E-038.50E-029.09E-019.95E+00 + 69N+ 200.004.19E-044.92E-036.43E-026.55E-013.59E-032.76E-022.13E-011.71E+00 + 69N+ 500.004.19E-051.75E-048.14E-043.61E-032.90E-041.09E-033.73E-031.31E-02 + 70K 62.339.57E-011.53E+004.64E-013.93E-021.14E+011.30E+022.62E+021.13E+02 + 70K 63.039.31E-011.57E+006.27E-011.06E-011.10E+011.24E+022.65E+021.51E+02 + 70K 64.338.84E-011.63E+009.30E-013.10E-011.04E+011.16E+022.68E+022.17E+02 + 70K 67.537.82E-011.70E+001.63E+001.19E+009.02E+009.67E+012.64E+023.55E+02 + 70K 71.336.80E-011.70E+002.29E+002.62E+007.69E+007.92E+012.47E+024.62E+02 + 70K 75.005.98E-011.65E+002.74E+004.07E+006.64E+006.59E+012.25E+025.16E+02 + 70K 81.004.91E-011.52E+003.14E+006.05E+005.32E+004.98E+011.88E+025.31E+02 + 70K 89.003.85E-011.31E+003.21E+007.57E+004.05E+003.54E+011.44E+024.78E+02 + 70K 101.002.77E-011.01E+002.87E+007.95E+002.81E+002.24E+019.64E+013.62E+02 + 70K 114.002.02E-017.63E-012.34E+007.08E+001.99E+001.45E+016.35E+012.52E+02 + 70K 131.001.40E-015.36E-011.72E+005.50E+001.34E+008.82E+003.84E+011.56E+02 + 70K 144.001.10E-014.17E-011.36E+004.41E+001.02E+006.31E+002.70E+011.10E+02 + 70K 161.008.19E-023.07E-011.00E+003.28E+007.47E-014.27E+001.77E+017.07E+01 + 70K 184.005.79E-022.11E-016.83E-012.22E+005.14E-012.68E+001.07E+014.11E+01 + 70K 210.004.11E-021.45E-014.61E-011.47E+003.57E-011.71E+006.45E+002.38E+01 + 70K 275.002.08E-026.75E-022.03E-016.09E-011.71E-016.95E-012.33E+007.67E+00 + 70K 360.001.08E-023.24E-029.07E-022.52E-018.31E-022.93E-018.65E-012.51E+00 + 70K 450.006.49E-031.82E-024.79E-021.24E-014.63E-021.47E-013.91E-011.02E+00 + 70K 560.004.02E-031.08E-022.65E-026.35E-022.64E-027.64E-021.85E-014.38E-01 + 70K 790.001.99E-035.01E-031.12E-022.39E-021.11E-022.87E-026.11E-021.25E-01 + 70K 1050.001.16E-032.80E-035.85E-031.14E-025.51E-031.33E-022.59E-024.77E-02 + 70K 1300.007.95E-041.85E-033.69E-036.77E-033.29E-037.68E-031.41E-022.43E-02 + 70K 1550.005.88E-041.33E-032.55E-034.49E-032.16E-034.93E-038.68E-031.43E-02 + 70L1 11.493.02E+006.71E+022.71E+041.39E+052.38E+027.51E+044.34E+065.55E+07 + 70L1 12.192.74E+004.95E+022.48E+042.33E+052.00E+025.68E+043.14E+064.80E+07 + 70L1 13.492.31E+002.91E+021.88E+043.04E+051.47E+023.52E+041.80E+063.33E+07 + 70L1 16.691.58E+009.07E+018.23E+032.20E+057.81E+011.30E+045.63E+051.24E+07 + 70L1 20.491.07E+002.75E+013.13E+031.03E+054.24E+015.01E+031.84E+054.18E+06 + 70L1 24.007.78E-011.05E+011.38E+034.92E+042.65E+012.43E+037.81E+041.73E+06 + 70L1 30.004.89E-012.64E+004.05E+021.52E+041.37E+018.83E+022.36E+044.80E+05 + 70L1 38.002.92E-017.59E-011.03E+023.90E+036.79E+003.09E+026.72E+031.21E+05 + 70L1 50.001.57E-013.47E-012.00E+017.33E+023.03E+009.33E+011.60E+032.42E+04 + 70L1 63.009.12E-022.37E-015.25E+001.72E+021.54E+003.49E+014.90E+026.30E+03 + 70L1 80.005.13E-021.57E-011.56E+003.92E+017.66E-011.29E+011.48E+021.59E+03 + 70L1 93.003.55E-021.16E-018.23E-011.60E+014.95E-016.98E+007.02E+016.75E+02 + 70L1 110.002.35E-028.03E-024.46E-016.21E+003.05E-013.56E+003.11E+012.63E+02 + 70L1 133.001.46E-025.12E-022.41E-012.34E+001.78E-011.69E+001.26E+019.23E+01 + 70L1 160.009.23E-033.23E-021.37E-019.93E-011.05E-018.35E-015.37E+003.40E+01 + 70L1 225.003.97E-031.33E-024.97E-022.45E-014.07E-022.38E-011.17E+005.76E+00 + 70L1 310.001.84E-035.77E-031.93E-027.46E-021.70E-027.77E-023.04E-011.19E+00 + 70L1 400.001.02E-033.04E-039.32E-033.08E-028.63E-033.33E-021.10E-013.62E-01 + 70L1 510.005.99E-041.70E-034.78E-031.38E-024.57E-031.54E-024.41E-021.24E-01 + 70L1 740.002.80E-047.43E-041.83E-034.44E-031.77E-035.04E-031.20E-022.75E-02 + 70L11000.001.59E-044.00E-048.99E-041.92E-038.38E-042.16E-034.54E-039.11E-03 + 70L11500.007.81E-051.83E-043.69E-046.86E-043.14E-047.43E-041.37E-032.38E-03 + 70L2 10.986.39E+003.65E+048.17E+062.15E+082.68E+013.07E+035.88E+042.72E+05 + 70L2 11.685.40E+002.68E+045.72E+061.79E+082.22E+012.43E+035.51E+044.60E+05 + 70L2 12.984.04E+001.59E+043.10E+061.17E+081.61E+011.61E+034.41E+046.15E+05 + 70L2 16.182.17E+005.31E+038.63E+053.82E+078.28E+006.89E+022.22E+044.80E+05 + 70L2 19.981.18E+001.87E+032.53E+051.15E+074.38E+003.04E+021.00E+042.49E+05 + 70L2 24.006.87E-017.59E+028.71E+043.79E+062.52E+001.49E+024.76E+031.20E+05 + 70L2 30.003.51E-012.55E+022.38E+049.51E+051.29E+006.26E+011.84E+034.44E+04 + 70L2 38.001.70E-018.07E+016.07E+032.13E+056.33E-012.50E+016.48E+021.43E+04 + 70L2 50.007.21E-022.15E+011.25E+033.69E+042.79E-018.67E+001.89E+023.59E+03 + 70L2 63.003.47E-027.14E+003.35E+028.38E+031.40E-013.56E+006.63E+011.09E+03 + 70L2 80.001.62E-022.31E+008.68E+011.82E+036.93E-021.43E+002.24E+013.12E+02 + 70L2 93.009.99E-031.15E+003.74E+016.97E+024.45E-028.07E-011.13E+011.41E+02 + 70L2 110.005.82E-035.27E-011.47E+012.41E+022.72E-024.28E-015.28E+005.85E+01 + 70L2 133.003.17E-032.21E-015.19E+007.33E+011.56E-022.10E-012.24E+002.16E+01 + 70L2 160.001.76E-039.62E-021.91E+002.33E+019.11E-031.05E-019.82E-018.25E+00 + 70L2 225.005.98E-042.14E-023.15E-012.96E+003.40E-033.03E-022.19E-011.43E+00 + 70L2 310.002.22E-045.47E-036.16E-024.56E-011.36E-039.59E-035.52E-022.89E-01 + 70L2 400.001.04E-041.92E-031.77E-021.09E-016.58E-043.92E-031.91E-028.41E-02 + 70L2 510.005.10E-057.34E-045.64E-032.96E-023.31E-041.71E-037.12E-032.70E-02 + 70L2 740.001.79E-051.81E-041.08E-034.49E-031.17E-044.94E-041.67E-035.14E-03 + 70L21000.008.04E-066.28E-053.08E-041.09E-035.04E-051.87E-045.49E-041.45E-03 + 70L21500.002.89E-061.66E-056.53E-051.91E-041.64E-055.34E-051.33E-042.98E-04 + 70L3 9.941.39E+018.30E+042.19E+076.69E+085.60E+001.05E+051.69E+082.89E+10 + 70L3 10.641.14E+015.89E+041.46E+075.22E+084.54E+007.50E+041.07E+081.71E+10 + 70L3 11.948.19E+003.29E+047.28E+063.08E+083.19E+004.22E+044.90E+077.08E+09 + 70L3 15.144.06E+009.90E+031.75E+068.43E+071.54E+001.29E+049.92E+061.16E+09 + 70L3 18.942.06E+003.20E+034.54E+052.18E+077.74E-014.23E+032.23E+062.12E+08 + 70L3 24.009.88E-019.69E+021.09E+054.87E+063.75E-011.30E+034.65E+053.57E+07 + 70L3 30.004.88E-013.15E+022.85E+041.14E+061.89E-014.29E+021.08E+056.75E+06 + 70L3 38.002.28E-019.59E+016.86E+032.38E+059.20E-021.33E+022.33E+041.18E+06 + 70L3 50.009.27E-022.43E+011.32E+033.78E+043.99E-023.40E+014.03E+031.59E+05 + 70L3 63.004.31E-027.64E+003.30E+027.93E+031.98E-021.08E+019.40E+023.02E+04 + 70L3 80.001.94E-022.33E+007.89E+011.57E+039.61E-033.33E+002.13E+025.55E+03 + 70L3 93.001.17E-021.10E+003.21E+015.68E+026.11E-031.59E+008.46E+011.93E+03 + 70L3 110.006.63E-034.83E-011.18E+011.82E+023.69E-036.97E-013.06E+016.06E+02 + 70L3 133.003.51E-031.90E-013.85E+005.05E+012.09E-032.76E-019.80E+001.66E+02 + 70L3 160.001.89E-037.72E-021.30E+001.46E+011.20E-031.12E-013.29E+004.79E+01 + 70L3 225.006.12E-041.50E-021.78E-011.51E+004.40E-042.18E-024.58E-015.12E+00 + 70L3 310.002.18E-043.34E-032.88E-021.88E-011.73E-044.79E-037.54E-026.71E-01 + 70L3 400.009.90E-051.05E-037.05E-033.75E-028.37E-051.47E-031.87E-021.40E-01 + 70L3 510.004.79E-053.63E-041.93E-038.54E-034.25E-054.89E-045.08E-033.29E-02 + 70L3 740.001.67E-057.87E-052.97E-041.01E-031.56E-059.73E-057.38E-043.88E-03 + 70L31000.007.68E-062.54E-057.43E-052.10E-047.31E-062.88E-051.65E-047.42E-04 + 70L31500.002.93E-066.54E-061.42E-053.13E-052.86E-066.76E-062.45E-058.88E-05 + 70M1 3.404.86E+002.16E+041.37E+061.59E+082.01E+037.17E+064.61E+096.52E+11 + 70M1 4.403.62E+007.46E+035.55E+053.53E+079.30E+022.02E+068.65E+081.09E+11 + 70M1 6.402.10E+001.49E+031.53E+055.39E+063.03E+023.24E+057.90E+077.96E+09 + 70M1 10.409.13E-011.61E+022.12E+049.57E+057.09E+013.10E+043.86E+062.72E+08 + 70M1 17.403.38E-011.20E+011.83E+039.07E+041.53E+012.70E+031.75E+058.08E+06 + 70M1 27.001.34E-011.11E+001.81E+028.45E+034.13E+003.53E+021.38E+044.34E+05 + 70M1 42.005.03E-021.59E-011.51E+016.25E+021.12E+004.85E+011.18E+032.51E+04 + 70M1 54.002.81E-028.20E-023.64E+001.34E+025.34E-011.62E+013.03E+025.18E+03 + 70M1 72.001.42E-024.51E-027.78E-012.27E+012.30E-014.75E+006.69E+018.88E+02 + 70M1 105.005.62E-031.97E-021.44E-012.44E+007.72E-021.01E+009.93E+009.50E+01 + 70M1 150.002.32E-038.26E-034.10E-023.75E-012.79E-022.47E-011.78E+001.26E+01 + 70M1 280.005.05E-041.63E-035.92E-032.63E-024.95E-032.50E-021.09E-014.72E-01 + 70M1 500.001.36E-043.89E-041.13E-033.40E-031.06E-033.67E-031.09E-023.17E-02 + 70M2 3.171.13E+014.07E+067.92E+091.82E+122.58E+022.57E+054.28E+071.86E+09 + 70M2 4.177.44E+001.04E+061.33E+092.71E+111.14E+027.43E+041.10E+077.02E+08 + 70M2 6.173.57E+001.47E+051.08E+081.75E+103.50E+011.30E+041.53E+061.09E+08 + 70M2 10.171.18E+001.23E+044.67E+065.41E+087.79E+001.50E+031.26E+057.81E+06 + 70M2 17.173.16E-019.22E+021.87E+051.47E+071.62E+001.67E+029.55E+034.44E+05 + 70M2 27.009.16E-021.00E+021.23E+046.73E+054.19E-012.63E+011.06E+033.62E+04 + 70M2 42.002.54E-021.18E+019.03E+023.46E+041.12E-014.50E+001.27E+023.13E+03 + 70M2 54.001.19E-023.55E+002.10E+026.51E+035.34E-021.67E+003.84E+017.82E+02 + 70M2 72.004.94E-039.11E-014.02E+019.82E+022.28E-025.45E-019.92E+001.61E+02 + 70M2 105.001.52E-031.58E-014.80E+008.56E+017.56E-031.28E-011.72E+002.07E+01 + 70M2 150.004.98E-043.11E-026.77E-019.00E+002.68E-033.35E-023.37E-013.07E+00 + 70M2 280.007.21E-052.05E-032.56E-022.08E-014.44E-043.41E-032.15E-021.23E-01 + 70M2 500.001.29E-051.94E-041.53E-038.24E-038.58E-054.51E-041.92E-037.45E-03 + 70M3 2.952.92E+018.86E+061.88E+104.51E+125.12E+011.17E+072.12E+113.99E+14 + 70M3 3.951.73E+012.05E+062.76E+095.70E+112.12E+012.72E+062.81E+103.29E+13 + 70M3 5.957.32E+002.61E+051.94E+083.11E+106.11E+003.52E+051.66E+091.04E+12 + 70M3 9.952.14E+001.96E+047.30E+068.20E+081.28E+002.70E+044.92E+071.48E+10 + 70M3 16.955.15E-011.34E+032.60E+051.95E+072.53E-011.89E+031.34E+062.04E+08 + 70M3 27.001.34E-011.30E+021.47E+047.63E+056.15E-021.86E+026.08E+045.34E+06 + 70M3 42.003.47E-021.42E+019.91E+023.57E+041.61E-022.07E+013.42E+031.86E+05 + 70M3 54.001.57E-024.05E+002.16E+026.30E+037.56E-035.95E+006.85E+022.87E+04 + 70M3 72.006.19E-039.70E-013.81E+018.69E+023.18E-031.44E+001.12E+023.53E+03 + 70M3 105.001.80E-031.50E-013.98E+006.56E+011.03E-032.24E-011.09E+012.42E+02 + 70M3 150.005.56E-042.63E-024.82E-015.83E+003.57E-043.94E-021.28E+002.07E+01 + 70M3 280.007.37E-051.34E-031.30E-029.27E-025.74E-051.98E-033.50E-023.44E-01 + 70M3 500.001.25E-059.94E-055.42E-042.45E-031.12E-051.36E-041.47E-039.79E-03 + 70M4 2.587.78E+012.75E+051.67E+102.26E+141.57E+013.69E+053.49E+092.85E+12 + 70M4 3.582.84E+015.16E+041.67E+091.29E+135.45E+007.15E+043.81E+082.42E+11 + 70M4 5.586.58E+005.37E+037.36E+072.73E+111.27E+007.68E+031.96E+078.58E+09 + 70M4 9.589.86E-013.44E+021.63E+062.65E+092.08E-015.04E+025.57E+051.52E+08 + 70M4 16.581.27E-012.10E+013.42E+042.57E+073.18E-023.17E+011.60E+042.65E+06 + 70M4 27.001.87E-021.71E+001.11E+034.41E+055.75E-032.70E+007.17E+027.57E+04 + 70M4 42.003.11E-031.75E-015.03E+011.16E+041.18E-032.90E-014.48E+013.14E+03 + 70M4 54.001.10E-034.77E-028.77E+001.51E+034.74E-048.19E-029.41E+005.23E+02 + 70M4 72.003.29E-041.07E-021.20E+001.48E+021.65E-041.93E-021.60E+006.82E+01 + 70M4 105.006.69E-051.53E-039.17E-027.36E+004.05E-052.91E-031.61E-014.87E+00 + 70M4 150.001.48E-052.47E-048.41E-034.54E-011.06E-054.93E-041.88E-024.17E-01 + 70M4 280.001.12E-061.10E-051.51E-044.08E-031.00E-062.28E-054.80E-046.35E-03 + 70M4 500.001.11E-077.05E-074.71E-066.59E-051.12E-071.38E-061.78E-051.53E-04 + 70M5 2.531.18E+023.33E+053.04E+103.69E+149.43E+003.26E+041.82E+109.87E+14 + 70M5 3.534.16E+016.03E+042.93E+091.99E+133.22E+006.21E+031.77E+095.03E+13 + 70M5 5.539.37E+006.05E+031.24E+083.99E+117.44E-016.61E+027.67E+079.20E+11 + 70M5 9.531.36E+003.74E+022.66E+063.68E+091.23E-014.38E+011.70E+067.41E+09 + 70M5 16.531.69E-012.21E+015.40E+043.40E+071.91E-022.84E+003.63E+045.91E+07 + 70M5 27.002.41E-021.73E+001.67E+035.47E+053.51E-032.51E-011.18E+038.44E+05 + 70M5 42.003.92E-031.71E-017.34E+011.37E+047.44E-042.88E-025.45E+011.95E+04 + 70M5 54.001.37E-034.54E-021.24E+011.71E+033.04E-048.48E-039.49E+002.36E+03 + 70M5 72.004.06E-049.87E-031.64E+001.60E+021.08E-042.11E-031.29E+002.15E+02 + 70M5 105.008.15E-051.34E-031.16E-017.30E+002.77E-053.48E-049.53E-029.81E+00 + 70M5 150.001.79E-052.04E-049.77E-034.05E-017.59E-066.52E-058.25E-035.58E-01 + 70M5 280.001.39E-068.48E-061.41E-042.82E-038.09E-073.84E-061.23E-044.26E-03 + 70M5 500.001.59E-075.45E-073.50E-063.34E-051.11E-073.28E-073.02E-065.50E-05 + 70N+ 50.001.97E-023.12E+002.02E+028.01E+032.17E-011.00E+014.98E+022.02E+04 + 70N+ 70.007.69E-036.08E-012.69E+017.47E+028.01E-022.24E+006.66E+011.78E+03 + 70N+ 100.002.92E-031.15E-013.42E+006.66E+012.89E-024.95E-018.92E+001.56E+02 + 70N+ 150.009.01E-041.77E-023.36E-014.54E+008.50E-039.21E-021.03E+001.18E+01 + 70N+ 200.004.40E-045.34E-037.07E-027.20E-013.97E-033.06E-022.36E-011.90E+00 + 70N+ 500.004.57E-051.92E-049.00E-043.99E-033.33E-041.23E-034.13E-031.42E-02 + 71K 64.318.98E-011.37E+004.03E-013.22E-021.13E+011.24E+022.41E+021.00E+02 + 71K 65.018.74E-011.41E+005.41E-018.63E-021.10E+011.19E+022.44E+021.33E+02 + 71K 66.318.32E-011.46E+007.98E-012.51E-011.03E+011.11E+022.47E+021.91E+02 + 71K 69.517.39E-011.53E+001.39E+009.59E-019.03E+009.31E+012.43E+023.11E+02 + 71K 73.316.45E-011.54E+001.97E+002.13E+007.73E+007.67E+012.29E+024.08E+02 + 71K 77.005.70E-011.50E+002.37E+003.34E+006.70E+006.42E+012.10E+024.58E+02 + 71K 83.004.70E-011.39E+002.73E+005.03E+005.39E+004.89E+011.77E+024.77E+02 + 71K 91.003.71E-011.20E+002.83E+006.40E+004.13E+003.50E+011.37E+024.35E+02 + 71K 103.002.69E-019.42E-012.57E+006.87E+002.89E+002.24E+019.30E+013.35E+02 + 71K 116.001.98E-017.18E-012.13E+006.24E+002.06E+001.46E+016.20E+012.38E+02 + 71K 133.001.38E-015.10E-011.59E+004.95E+001.39E+008.99E+003.80E+011.50E+02 + 71K 146.001.08E-013.99E-011.27E+004.02E+001.07E+006.46E+002.69E+011.06E+02 + 71K 163.008.15E-022.96E-019.46E-013.03E+007.85E-014.40E+001.78E+016.92E+01 + 71K 186.005.79E-022.05E-016.52E-012.08E+005.43E-012.78E+001.08E+014.07E+01 + 71K 215.003.99E-021.37E-014.27E-011.34E+003.63E-011.70E+006.25E+002.24E+01 + 71K 280.002.06E-026.54E-021.94E-015.76E-011.77E-017.06E-012.32E+007.47E+00 + 71K 365.001.09E-023.21E-028.89E-022.45E-018.70E-023.02E-018.77E-012.51E+00 + 71K 450.006.73E-031.88E-024.93E-021.27E-015.02E-021.58E-014.18E-011.08E+00 + 71K 560.004.18E-031.12E-022.75E-026.58E-022.86E-028.23E-021.98E-014.65E-01 + 71K 790.002.08E-035.24E-031.17E-022.50E-021.20E-023.09E-026.54E-021.33E-01 + 71K 1050.001.22E-032.94E-036.14E-031.20E-025.93E-031.43E-022.77E-025.09E-02 + 71K 1300.008.31E-041.95E-033.88E-037.13E-033.53E-038.25E-031.51E-022.59E-02 + 71K 1550.006.15E-041.40E-032.69E-034.73E-032.32E-035.29E-039.30E-031.53E-02 + 71L1 11.872.83E+006.25E+022.41E+041.16E+052.37E+027.16E+043.97E+064.89E+07 + 71L1 12.572.58E+004.67E+022.22E+041.95E+052.00E+025.46E+042.91E+064.25E+07 + 71L1 13.872.18E+002.79E+021.71E+042.60E+051.49E+023.43E+041.70E+063.00E+07 + 71L1 17.071.51E+009.07E+017.73E+031.96E+058.03E+011.30E+045.46E+051.16E+07 + 71L1 20.871.03E+002.86E+013.04E+039.51E+044.41E+015.11E+031.83E+054.01E+06 + 71L1 24.007.81E-011.24E+011.49E+035.05E+042.91E+012.69E+038.59E+041.85E+06 + 71L1 30.004.93E-013.19E+004.46E+021.60E+041.50E+019.79E+022.59E+045.17E+05 + 71L1 38.002.96E-018.79E-011.16E+024.20E+037.47E+003.41E+027.37E+031.31E+05 + 71L1 50.001.59E-013.57E-012.30E+018.07E+023.33E+001.03E+021.76E+032.63E+04 + 71L1 63.009.30E-022.34E-016.07E+001.93E+021.69E+003.84E+015.37E+026.84E+03 + 71L1 80.005.25E-021.54E-011.77E+004.43E+018.42E-011.42E+011.62E+021.73E+03 + 71L1 93.003.64E-021.15E-019.11E-011.81E+015.44E-017.68E+007.69E+017.34E+02 + 71L1 110.002.41E-027.99E-024.80E-017.00E+003.36E-013.92E+003.41E+012.86E+02 + 71L1 133.001.51E-025.13E-022.54E-012.60E+001.95E-011.86E+001.38E+011.00E+02 + 71L1 160.009.52E-033.26E-021.43E-011.09E+001.16E-019.16E-015.87E+003.70E+01 + 71L1 225.004.12E-031.36E-025.17E-022.63E-014.47E-022.61E-011.28E+006.26E+00 + 71L1 310.001.91E-035.95E-032.02E-027.94E-021.86E-028.49E-023.32E-011.29E+00 + 71L1 400.001.07E-033.16E-039.77E-033.27E-029.44E-033.63E-021.20E-013.93E-01 + 71L1 510.006.27E-041.77E-035.03E-031.47E-025.00E-031.68E-024.80E-021.35E-01 + 71L1 740.002.94E-047.81E-041.94E-034.73E-031.93E-035.49E-031.30E-022.98E-02 + 71L11000.001.67E-044.22E-049.55E-042.04E-039.11E-042.35E-034.92E-039.87E-03 + 71L11500.008.20E-051.94E-043.93E-047.33E-043.39E-048.06E-041.49E-032.58E-03 + 71L2 11.356.01E+003.37E+047.24E+061.83E+082.67E+012.93E+035.36E+042.32E+05 + 71L2 12.055.11E+002.50E+045.13E+061.53E+082.23E+012.33E+035.05E+043.96E+05 + 71L2 13.353.85E+001.50E+042.83E+061.02E+081.64E+011.57E+034.09E+045.37E+05 + 71L2 16.552.11E+005.17E+038.15E+053.47E+078.55E+006.85E+022.12E+044.35E+05 + 71L2 20.351.16E+001.86E+032.46E+051.07E+074.58E+003.08E+029.80E+032.33E+05 + 71L2 24.007.16E-018.28E+029.42E+044.00E+062.79E+001.62E+025.03E+031.23E+05 + 71L2 30.003.67E-012.78E+022.58E+041.01E+061.42E+006.83E+011.96E+034.62E+04 + 71L2 38.001.78E-018.81E+016.59E+032.28E+057.02E-012.73E+016.95E+021.50E+04 + 71L2 50.007.60E-022.35E+011.36E+033.96E+043.10E-019.48E+002.04E+023.81E+03 + 71L2 63.003.67E-027.81E+003.65E+029.03E+031.56E-013.90E+007.18E+011.16E+03 + 71L2 80.001.72E-022.53E+009.46E+011.97E+037.70E-021.57E+002.43E+013.35E+02 + 71L2 93.001.06E-021.25E+004.08E+017.55E+024.95E-028.86E-011.23E+011.52E+02 + 71L2 110.006.21E-035.78E-011.61E+012.61E+023.02E-024.70E-015.75E+006.32E+01 + 71L2 133.003.39E-032.43E-015.68E+007.97E+011.74E-022.31E-012.45E+002.34E+01 + 71L2 160.001.88E-031.05E-012.09E+002.54E+011.02E-021.16E-011.07E+008.96E+00 + 71L2 225.006.45E-042.35E-023.46E-013.24E+003.80E-033.34E-022.40E-011.56E+00 + 71L2 310.002.41E-046.02E-036.78E-025.01E-011.52E-031.06E-026.08E-023.17E-01 + 71L2 400.001.12E-042.12E-031.95E-021.20E-017.37E-044.36E-032.10E-029.25E-02 + 71L2 510.005.53E-058.11E-046.23E-033.26E-023.71E-041.90E-037.88E-032.97E-02 + 71L2 740.001.97E-052.01E-041.19E-034.97E-031.31E-045.51E-041.86E-035.68E-03 + 71L21000.008.75E-066.96E-053.42E-041.21E-035.67E-052.10E-046.12E-041.61E-03 + 71L21500.003.18E-061.85E-057.27E-052.13E-041.84E-055.98E-051.49E-043.32E-04 + 71L3 10.241.31E+017.71E+041.96E+075.79E+085.46E+001.01E+051.57E+082.60E+10 + 71L3 10.941.09E+015.52E+041.32E+074.55E+084.46E+007.29E+041.01E+081.57E+10 + 71L3 12.247.85E+003.13E+046.71E+062.73E+083.16E+004.16E+044.71E+076.62E+09 + 71L3 15.443.95E+009.68E+031.66E+067.74E+071.55E+001.31E+049.87E+061.13E+09 + 71L3 19.242.03E+003.19E+034.43E+052.06E+077.88E-014.37E+032.27E+062.12E+08 + 71L3 24.001.03E+001.05E+031.17E+055.11E+064.00E-011.45E+035.27E+054.03E+07 + 71L3 30.005.07E-013.40E+023.06E+041.20E+062.02E-014.79E+021.22E+057.60E+06 + 71L3 38.002.37E-011.04E+027.37E+032.52E+059.83E-021.48E+022.63E+041.32E+06 + 71L3 50.009.69E-022.62E+011.42E+034.01E+044.26E-023.79E+014.54E+031.79E+05 + 71L3 63.004.51E-028.25E+003.54E+028.44E+032.11E-021.21E+011.06E+033.38E+04 + 71L3 80.002.03E-022.52E+008.48E+011.68E+031.03E-023.71E+002.39E+026.21E+03 + 71L3 93.001.23E-021.19E+003.45E+016.05E+026.53E-031.77E+009.50E+012.16E+03 + 71L3 110.006.98E-035.21E-011.27E+011.95E+023.94E-037.77E-013.43E+016.77E+02 + 71L3 133.003.70E-032.05E-014.14E+005.40E+012.23E-033.07E-011.10E+011.85E+02 + 71L3 160.002.00E-038.35E-021.39E+001.56E+011.29E-031.25E-013.68E+005.34E+01 + 71L3 225.006.49E-041.62E-021.92E-011.62E+004.71E-042.42E-025.11E-015.71E+00 + 71L3 310.002.32E-043.61E-033.11E-022.02E-011.85E-045.31E-038.40E-027.46E-01 + 71L3 400.001.05E-041.13E-037.60E-034.03E-028.95E-051.63E-032.08E-021.56E-01 + 71L3 510.005.11E-053.92E-042.08E-039.19E-034.54E-055.40E-045.65E-033.65E-02 + 71L3 740.001.78E-058.47E-053.20E-041.09E-031.67E-051.07E-048.18E-044.30E-03 + 71L31000.008.13E-062.73E-058.00E-052.26E-047.79E-063.15E-051.82E-048.21E-04 + 71L31500.003.12E-067.01E-061.52E-053.38E-053.04E-067.32E-062.70E-059.81E-05 + 71M1 3.494.63E+002.11E+041.36E+061.40E+082.04E+037.06E+064.42E+096.08E+11 + 71M1 4.493.48E+007.45E+035.54E+053.37E+079.65E+022.05E+068.62E+081.06E+11 + 71M1 6.492.04E+001.54E+031.54E+055.39E+063.20E+023.39E+058.19E+078.10E+09 + 71M1 10.499.00E-011.72E+022.18E+049.57E+057.62E+013.33E+044.13E+062.87E+08 + 71M1 17.493.37E-011.35E+011.95E+039.36E+041.66E+012.95E+031.91E+058.72E+06 + 71M1 27.001.36E-011.33E+002.02E+029.14E+034.56E+003.95E+021.54E+044.83E+05 + 71M1 42.005.13E-021.76E-011.73E+016.93E+021.23E+005.40E+011.31E+032.78E+04 + 71M1 54.002.87E-028.50E-024.21E+001.50E+025.90E-011.80E+013.36E+025.73E+03 + 71M1 72.001.45E-024.53E-028.97E-012.58E+012.54E-015.27E+007.41E+019.80E+02 + 71M1 105.005.79E-031.98E-021.60E-012.77E+008.52E-021.11E+001.10E+011.05E+02 + 71M1 150.002.41E-038.38E-034.38E-024.20E-013.08E-022.73E-011.96E+001.38E+01 + 71M1 280.005.27E-041.69E-036.24E-032.85E-025.45E-032.75E-021.20E-015.17E-01 + 71M1 500.001.43E-044.08E-041.19E-033.64E-031.17E-034.02E-031.19E-023.46E-02 + 71M2 3.261.07E+013.87E+067.30E+091.63E+122.63E+022.53E+054.07E+071.67E+09 + 71M2 4.267.15E+001.02E+061.28E+092.54E+111.18E+027.52E+041.08E+076.59E+08 + 71M2 6.263.50E+001.50E+051.09E+081.73E+103.72E+011.36E+041.56E+061.07E+08 + 71M2 10.261.18E+001.29E+044.85E+065.54E+088.43E+001.60E+031.32E+057.99E+06 + 71M2 17.263.23E-019.85E+021.99E+051.54E+071.77E+001.80E+021.02E+044.65E+05 + 71M2 27.009.56E-021.10E+021.35E+047.33E+054.66E-012.90E+011.16E+033.92E+04 + 71M2 42.002.68E-021.30E+019.90E+023.77E+041.25E-014.96E+001.39E+023.40E+03 + 71M2 54.001.26E-023.90E+002.30E+027.10E+035.95E-021.84E+004.21E+018.49E+02 + 71M2 72.005.25E-031.00E+004.41E+011.07E+032.55E-026.03E-011.09E+011.75E+02 + 71M2 105.001.63E-031.73E-015.28E+009.37E+018.45E-031.42E-011.89E+002.26E+01 + 71M2 150.005.35E-043.43E-027.46E-019.87E+003.00E-033.71E-023.71E-013.36E+00 + 71M2 280.007.80E-052.27E-032.83E-022.29E-014.99E-043.80E-032.38E-021.35E-01 + 71M2 500.001.42E-052.16E-041.70E-039.13E-039.67E-055.04E-042.14E-038.27E-03 + 71M3 3.022.80E+018.49E+061.76E+104.10E+125.10E+011.16E+072.05E+113.79E+14 + 71M3 4.021.68E+012.03E+062.69E+095.41E+112.15E+012.79E+062.84E+103.29E+13 + 71M3 6.027.22E+002.66E+051.96E+083.07E+106.32E+003.72E+051.75E+091.09E+12 + 71M3 10.022.15E+002.05E+047.59E+068.38E+081.34E+002.92E+045.36E+071.61E+10 + 71M3 17.025.25E-011.43E+032.75E+052.04E+072.68E-012.08E+031.49E+062.26E+08 + 71M3 27.001.39E-011.41E+021.59E+048.20E+056.61E-022.09E+026.94E+046.11E+06 + 71M3 42.003.63E-021.54E+011.07E+033.84E+041.73E-022.33E+013.89E+032.11E+05 + 71M3 54.001.64E-024.40E+002.34E+026.77E+038.13E-036.69E+007.78E+023.26E+04 + 71M3 72.006.51E-031.05E+004.13E+019.34E+023.42E-031.61E+001.27E+023.99E+03 + 71M3 105.001.90E-031.64E-014.32E+007.06E+011.11E-032.52E-011.23E+012.73E+02 + 71M3 150.005.90E-042.86E-025.22E-016.29E+003.84E-044.42E-021.45E+002.33E+01 + 71M3 280.007.84E-051.46E-031.41E-021.00E-016.18E-052.21E-033.93E-023.86E-01 + 71M3 500.001.34E-051.08E-045.89E-042.66E-031.20E-051.51E-041.64E-031.09E-02 + 71M4 2.647.52E+012.65E+051.58E+102.10E+141.58E+013.71E+053.42E+092.73E+12 + 71M4 3.642.80E+015.15E+041.66E+091.26E+135.59E+007.43E+043.91E+082.43E+11 + 71M4 5.646.68E+005.54E+037.61E+072.83E+111.33E+008.23E+032.09E+079.02E+09 + 71M4 9.641.02E+003.63E+021.74E+062.86E+092.22E-015.54E+026.12E+051.65E+08 + 71M4 16.641.34E-012.25E+013.73E+042.83E+073.44E-023.53E+011.79E+042.94E+06 + 71M4 27.002.02E-021.88E+001.24E+035.00E+056.32E-033.06E+008.19E+028.61E+04 + 71M4 42.003.37E-031.93E-015.64E+011.32E+041.30E-033.30E-015.11E+013.57E+03 + 71M4 54.001.19E-035.27E-029.83E+001.71E+035.23E-049.31E-021.07E+015.94E+02 + 71M4 72.003.59E-041.19E-021.35E+001.68E+021.82E-042.19E-021.82E+007.76E+01 + 71M4 105.007.32E-051.70E-031.03E-018.34E+004.49E-053.32E-031.83E-015.54E+00 + 71M4 150.001.63E-052.76E-049.45E-035.15E-011.18E-055.62E-042.15E-024.76E-01 + 71M4 280.001.23E-061.24E-051.70E-044.63E-031.12E-062.60E-055.49E-047.25E-03 + 71M4 500.001.18E-078.01E-075.30E-067.49E-051.25E-071.58E-062.04E-051.76E-04 + 71M5 2.591.14E+023.18E+052.88E+103.42E+149.42E+003.21E+041.78E+109.46E+14 + 71M5 3.594.12E+015.95E+042.91E+091.95E+133.29E+006.31E+031.82E+095.12E+13 + 71M5 5.599.49E+006.16E+031.29E+084.13E+117.77E-016.93E+028.23E+079.89E+11 + 71M5 9.591.40E+003.91E+022.86E+063.96E+091.30E-014.70E+011.89E+068.29E+09 + 71M5 16.591.78E-012.35E+015.92E+043.73E+072.05E-023.09E+004.10E+046.75E+07 + 71M5 27.002.59E-021.88E+001.88E+036.18E+053.83E-032.78E-011.37E+039.93E+05 + 71M5 42.004.25E-031.86E-018.26E+011.55E+048.13E-043.19E-026.31E+012.29E+04 + 71M5 54.001.49E-034.94E-021.40E+011.93E+033.33E-049.38E-031.10E+012.76E+03 + 71M5 72.004.42E-041.08E-021.84E+001.81E+021.19E-042.33E-031.49E+002.52E+02 + 71M5 105.008.92E-051.46E-031.31E-018.24E+003.04E-053.85E-041.10E-011.14E+01 + 71M5 150.001.98E-052.25E-041.10E-024.57E-018.35E-067.21E-059.52E-036.49E-01 + 71M5 280.001.54E-069.30E-061.58E-043.18E-038.92E-074.25E-061.41E-044.93E-03 + 71M5 500.001.72E-075.96E-073.91E-063.77E-051.23E-073.64E-073.43E-066.34E-05 + 71N+ 50.002.06E-023.45E+002.24E+028.99E+032.41E-011.12E+015.69E+022.34E+04 + 71N+ 70.008.07E-036.74E-012.99E+018.35E+028.91E-022.51E+007.58E+012.05E+03 + 71N+ 100.003.07E-031.27E-013.79E+007.41E+013.21E-025.54E-011.01E+011.78E+02 + 71N+ 150.009.37E-041.92E-023.68E-014.98E+009.34E-031.02E-011.15E+001.32E+01 + 71N+ 200.004.63E-045.84E-037.84E-028.00E-014.40E-033.40E-022.64E-012.14E+00 + 71N+ 500.004.86E-052.08E-049.91E-044.42E-033.68E-041.36E-034.58E-031.58E-02 + 72K 66.358.43E-011.24E+003.50E-012.65E-021.13E+011.18E+022.22E+028.91E+01 + 72K 67.058.22E-011.27E+004.67E-017.04E-021.09E+011.14E+022.24E+021.17E+02 + 72K 68.357.83E-011.32E+006.85E-012.03E-011.03E+011.06E+022.27E+021.67E+02 + 72K 71.556.98E-011.38E+001.19E+007.77E-019.03E+008.97E+012.25E+022.72E+02 + 72K 75.356.12E-011.39E+001.69E+001.74E+007.77E+007.43E+012.12E+023.59E+02 + 72K 79.005.43E-011.36E+002.04E+002.73E+006.77E+006.26E+011.96E+024.06E+02 + 72K 85.004.51E-011.27E+002.38E+004.18E+005.48E+004.80E+011.66E+024.27E+02 + 72K 93.003.58E-011.11E+002.49E+005.41E+004.23E+003.47E+011.31E+023.96E+02 + 72K 105.002.62E-018.77E-012.30E+005.93E+002.98E+002.24E+018.98E+013.11E+02 + 72K 118.001.93E-016.76E-011.93E+005.50E+002.13E+001.48E+016.06E+012.24E+02 + 72K 135.001.36E-014.85E-011.47E+004.45E+001.45E+009.16E+003.76E+011.43E+02 + 72K 148.001.07E-013.82E-011.18E+003.66E+001.12E+006.62E+002.68E+011.03E+02 + 72K 165.008.11E-022.86E-018.92E-012.80E+008.25E-014.53E+001.79E+016.77E+01 + 72K 188.005.79E-022.00E-016.23E-011.96E+005.73E-012.89E+001.10E+014.03E+01 + 72K 215.004.11E-021.38E-014.24E-011.32E+003.95E-011.83E+006.62E+002.33E+01 + 72K 280.002.13E-026.66E-021.95E-015.76E-011.92E-017.59E-012.46E+007.84E+00 + 72K 365.001.13E-023.29E-029.07E-022.49E-019.43E-023.25E-019.34E-012.64E+00 + 72K 460.006.65E-031.84E-024.78E-021.22E-015.14E-021.59E-014.13E-011.05E+00 + 72K 570.004.19E-031.11E-022.72E-026.46E-022.95E-028.41E-022.00E-014.61E-01 + 72K 800.002.11E-035.32E-031.19E-022.53E-021.25E-023.21E-026.72E-021.35E-01 + 72K 1050.001.27E-033.08E-036.45E-031.26E-026.39E-031.54E-022.97E-025.42E-02 + 72K 1300.008.69E-042.04E-034.08E-037.50E-033.80E-038.86E-031.61E-022.77E-02 + 72K 1550.006.43E-041.47E-032.84E-034.99E-032.49E-035.68E-039.96E-031.63E-02 + 72L1 12.272.65E+005.81E+022.14E+049.61E+042.36E+026.80E+043.62E+064.28E+07 + 72L1 12.972.42E+004.39E+021.98E+041.64E+052.00E+025.23E+042.68E+063.76E+07 + 72L1 14.272.06E+002.68E+021.54E+042.21E+051.50E+023.33E+041.59E+062.69E+07 + 72L1 17.471.44E+009.03E+017.24E+031.74E+058.23E+011.29E+045.28E+051.07E+07 + 72L1 21.279.94E-012.97E+012.93E+038.76E+044.58E+015.19E+031.81E+053.83E+06 + 72L1 25.007.22E-011.14E+011.30E+034.24E+042.84E+012.48E+037.56E+041.57E+06 + 72L1 31.004.63E-013.15E+004.09E+021.41E+041.50E+019.35E+022.38E+044.60E+05 + 72L1 39.002.82E-019.09E-011.12E+023.88E+037.60E+003.37E+027.05E+031.21E+05 + 72L1 51.001.55E-013.57E-012.34E+017.85E+023.45E+001.05E+021.74E+032.54E+04 + 72L1 64.009.12E-022.27E-016.42E+001.95E+021.77E+003.97E+015.43E+026.78E+03 + 72L1 81.005.20E-021.49E-011.89E+004.63E+018.92E-011.48E+011.66E+021.75E+03 + 72L1 94.003.63E-021.11E-019.69E-011.92E+015.80E-018.09E+007.98E+017.51E+02 + 72L1 111.002.42E-027.80E-025.04E-017.51E+003.59E-014.15E+003.56E+012.96E+02 + 72L1 134.001.52E-025.06E-022.64E-012.80E+002.10E-011.98E+001.46E+011.05E+02 + 72L1 160.009.81E-033.29E-021.50E-011.20E+001.27E-011.00E+006.40E+004.02E+01 + 72L1 225.004.26E-031.39E-025.39E-022.83E-014.90E-022.85E-011.40E+006.79E+00 + 72L1 310.001.98E-036.15E-032.11E-028.47E-022.04E-029.27E-023.61E-011.40E+00 + 72L1 400.001.11E-033.28E-031.03E-023.48E-021.03E-023.96E-021.31E-014.26E-01 + 72L1 510.006.55E-041.86E-035.30E-031.56E-025.46E-031.83E-025.22E-021.46E-01 + 72L1 740.003.08E-048.22E-042.06E-035.04E-032.10E-035.97E-031.41E-023.23E-02 + 72L11000.001.75E-044.46E-041.01E-032.18E-039.90E-042.56E-035.34E-031.07E-02 + 72L11500.008.62E-052.05E-044.18E-047.82E-043.67E-048.74E-041.61E-032.79E-03 + 72L2 11.745.64E+003.10E+046.38E+061.55E+082.67E+012.78E+034.87E+041.97E+05 + 72L2 12.444.82E+002.32E+044.58E+061.31E+082.24E+012.23E+034.61E+043.38E+05 + 72L2 13.743.67E+001.42E+042.58E+068.84E+071.66E+011.52E+033.78E+044.67E+05 + 72L2 16.942.05E+005.02E+037.67E+053.13E+078.81E+006.79E+022.01E+043.93E+05 + 72L2 20.741.14E+001.85E+032.37E+051.00E+074.79E+003.11E+029.52E+032.17E+05 + 72L2 25.006.61E-017.38E+028.03E+043.28E+062.73E+001.51E+024.49E+031.06E+05 + 72L2 31.003.48E-012.58E+022.31E+048.72E+051.43E+006.55E+011.81E+034.12E+04 + 72L2 39.001.73E-018.47E+016.15E+032.06E+057.20E-012.70E+016.64E+021.39E+04 + 72L2 51.007.52E-022.33E+011.32E+033.74E+043.24E-019.60E+002.01E+023.66E+03 + 72L2 64.003.69E-027.91E+003.63E+028.79E+031.65E-014.02E+007.22E+011.14E+03 + 72L2 81.001.75E-022.61E+009.61E+011.96E+038.25E-021.64E+002.49E+013.37E+02 + 72L2 94.001.09E-021.31E+004.19E+017.63E+025.33E-029.34E-011.27E+011.55E+02 + 72L2 111.006.42E-036.06E-011.67E+012.68E+023.28E-024.99E-016.01E+006.50E+01 + 72L2 134.003.53E-032.57E-015.96E+008.26E+011.89E-022.47E-012.58E+002.44E+01 + 72L2 160.002.01E-031.16E-012.29E+002.77E+011.13E-021.28E-011.17E+009.72E+00 + 72L2 225.006.93E-042.59E-023.80E-013.54E+004.24E-033.69E-022.63E-011.70E+00 + 72L2 310.002.60E-046.63E-037.46E-025.49E-011.70E-031.18E-026.69E-023.47E-01 + 72L2 400.001.21E-042.34E-032.15E-021.32E-018.25E-044.83E-032.32E-021.01E-01 + 72L2 510.006.01E-058.96E-046.88E-033.59E-024.16E-042.11E-038.71E-033.27E-02 + 72L2 740.002.14E-052.22E-041.32E-035.49E-031.47E-046.15E-042.06E-036.28E-03 + 72L21000.009.61E-067.72E-053.80E-041.34E-036.37E-052.34E-046.81E-041.79E-03 + 72L21500.003.48E-062.05E-058.09E-052.37E-042.07E-056.70E-051.66E-043.69E-04 + 72L3 10.561.24E+017.13E+041.74E+074.96E+085.31E+009.71E+041.45E+082.32E+10 + 72L3 11.261.03E+015.16E+041.19E+073.94E+084.36E+007.06E+049.41E+071.42E+10 + 72L3 12.567.50E+002.97E+046.16E+062.41E+083.11E+004.09E+044.49E+076.14E+09 + 72L3 15.763.84E+009.43E+031.58E+067.06E+071.55E+001.32E+049.76E+061.09E+09 + 72L3 19.562.00E+003.17E+034.30E+051.94E+078.00E-014.49E+032.31E+062.11E+08 + 72L3 25.009.36E-019.19E+029.81E+044.12E+063.77E-011.32E+034.55E+053.33E+07 + 72L3 31.004.75E-013.11E+022.69E+041.02E+061.95E-014.54E+021.11E+056.70E+06 + 72L3 39.002.27E-019.81E+016.75E+032.24E+059.70E-021.45E+022.51E+041.23E+06 + 72L3 51.009.48E-022.56E+011.35E+033.72E+044.29E-023.83E+014.51E+031.73E+05 + 72L3 64.004.48E-028.24E+003.46E+028.06E+032.15E-021.25E+011.08E+033.38E+04 + 72L3 81.002.05E-022.55E+008.45E+011.64E+031.06E-023.89E+002.49E+026.36E+03 + 72L3 94.001.24E-021.22E+003.48E+016.00E+026.75E-031.87E+009.97E+012.24E+03 + 72L3 111.007.12E-035.38E-011.30E+011.95E+024.10E-038.28E-013.63E+017.10E+02 + 72L3 134.003.80E-032.14E-014.26E+005.48E+012.33E-033.30E-011.17E+011.96E+02 + 72L3 160.002.10E-039.01E-021.50E+001.67E+011.38E-031.39E-014.11E+005.95E+01 + 72L3 225.006.87E-041.75E-022.07E-011.73E+005.03E-042.69E-025.69E-016.35E+00 + 72L3 310.002.46E-043.90E-033.35E-022.16E-011.98E-045.89E-039.35E-028.29E-01 + 72L3 400.001.12E-041.22E-038.19E-034.33E-029.56E-051.80E-032.31E-021.73E-01 + 72L3 510.005.40E-054.23E-042.24E-039.88E-034.85E-055.95E-046.27E-034.05E-02 + 72L3 740.001.88E-059.12E-053.45E-041.18E-031.78E-051.17E-049.06E-044.77E-03 + 72L31000.008.59E-062.93E-058.61E-052.43E-048.29E-063.44E-052.01E-049.09E-04 + 72L31500.003.33E-067.50E-061.64E-053.64E-053.23E-067.92E-062.96E-051.08E-04 + 72M1 3.604.35E+002.02E+041.31E+061.18E+082.06E+036.81E+064.11E+095.46E+11 + 72M1 4.603.30E+007.33E+035.41E+053.13E+079.91E+022.05E+068.39E+081.00E+11 + 72M1 6.601.97E+001.57E+031.52E+055.30E+063.36E+023.51E+058.35E+078.06E+09 + 72M1 10.608.83E-011.83E+022.22E+049.46E+058.16E+013.55E+044.37E+062.98E+08 + 72M1 17.603.35E-011.51E+012.05E+039.57E+041.80E+013.20E+032.06E+059.31E+06 + 72M1 27.001.38E-011.57E+002.24E+029.85E+035.04E+004.40E+021.72E+045.37E+05 + 72M1 42.005.22E-021.97E-011.98E+017.65E+021.36E+006.01E+011.45E+033.08E+04 + 72M1 54.002.93E-028.94E-024.86E+001.68E+026.51E-012.00E+013.73E+026.33E+03 + 72M1 72.001.49E-024.58E-021.03E+002.92E+012.80E-015.84E+008.19E+011.08E+03 + 72M1 105.005.96E-032.00E-021.78E-013.16E+009.40E-021.23E+001.21E+011.15E+02 + 72M1 150.002.49E-038.51E-034.71E-024.71E-013.40E-023.01E-012.15E+001.52E+01 + 72M1 280.005.49E-041.75E-036.58E-033.08E-025.99E-033.03E-021.31E-015.66E-01 + 72M1 500.001.49E-044.29E-041.27E-033.91E-031.28E-034.41E-031.30E-023.77E-02 + 72M2 3.361.00E+013.63E+066.62E+091.42E+122.66E+022.45E+053.80E+071.47E+09 + 72M2 4.366.83E+009.93E+051.22E+092.34E+111.22E+027.53E+041.05E+076.09E+08 + 72M2 6.363.41E+001.52E+051.08E+081.68E+103.93E+011.40E+041.57E+061.04E+08 + 72M2 10.361.18E+001.34E+045.02E+065.62E+089.09E+001.70E+031.38E+058.10E+06 + 72M2 17.363.28E-011.05E+032.10E+051.61E+071.94E+001.94E+021.08E+044.84E+05 + 72M2 27.009.96E-021.21E+021.47E+047.96E+055.19E-013.20E+011.26E+034.23E+04 + 72M2 42.002.81E-021.42E+011.09E+034.10E+041.39E-015.47E+001.52E+023.68E+03 + 72M2 54.001.33E-024.28E+002.52E+027.73E+036.64E-022.03E+004.60E+019.21E+02 + 72M2 72.005.57E-031.10E+004.84E+011.17E+032.85E-026.65E-011.19E+011.91E+02 + 72M2 105.001.74E-031.91E-015.80E+001.02E+029.45E-031.57E-012.07E+002.46E+01 + 72M2 150.005.74E-043.78E-028.21E-011.08E+013.36E-034.11E-024.09E-013.68E+00 + 72M2 280.008.46E-052.51E-033.13E-022.52E-015.61E-044.23E-032.63E-021.49E-01 + 72M2 500.001.55E-052.39E-041.89E-031.01E-021.09E-045.64E-042.38E-039.16E-03 + 72M3 3.112.67E+018.02E+061.61E+103.63E+125.03E+011.14E+071.94E+113.50E+14 + 72M3 4.111.62E+011.98E+062.57E+095.03E+112.17E+012.83E+062.82E+103.22E+13 + 72M3 6.117.10E+002.69E+051.95E+083.00E+106.50E+003.90E+051.83E+091.13E+12 + 72M3 10.112.15E+002.14E+047.83E+068.49E+081.40E+003.15E+045.80E+071.74E+10 + 72M3 17.115.34E-011.51E+032.89E+052.11E+072.84E-012.28E+031.65E+062.50E+08 + 72M3 27.001.44E-011.53E+021.73E+048.79E+057.09E-022.35E+027.91E+046.98E+06 + 72M3 42.003.79E-021.67E+011.16E+034.12E+041.86E-022.61E+014.42E+032.40E+05 + 72M3 54.001.72E-024.78E+002.53E+027.26E+038.73E-037.51E+008.82E+023.70E+04 + 72M3 72.006.85E-031.14E+004.47E+011.00E+033.68E-031.81E+001.44E+024.52E+03 + 72M3 105.002.00E-031.78E-014.67E+007.59E+011.19E-032.83E-011.39E+013.08E+02 + 72M3 150.006.23E-043.11E-025.66E-016.77E+004.12E-044.95E-021.63E+002.63E+01 + 72M3 280.008.36E-051.59E-031.53E-021.08E-016.64E-052.47E-034.41E-024.33E-01 + 72M3 500.001.43E-051.17E-046.39E-042.88E-031.29E-051.68E-041.84E-031.22E-02 + 72M4 2.727.16E+012.49E+051.44E+101.86E+141.56E+013.64E+053.23E+092.50E+12 + 72M4 3.722.74E+015.04E+041.59E+091.20E+135.66E+007.57E+043.90E+082.36E+11 + 72M4 5.726.71E+005.63E+037.72E+072.86E+111.38E+008.71E+032.19E+079.28E+09 + 72M4 9.721.05E+003.81E+021.84E+063.03E+092.36E-016.03E+026.64E+051.77E+08 + 72M4 16.721.41E-012.41E+014.03E+043.09E+073.70E-023.91E+011.98E+043.22E+06 + 72M4 27.002.18E-022.07E+001.39E+035.66E+056.93E-033.48E+009.33E+029.77E+04 + 72M4 42.003.66E-032.13E-016.31E+011.49E+041.43E-033.75E-015.82E+014.05E+03 + 72M4 54.001.30E-035.82E-021.10E+011.93E+035.77E-041.06E-011.22E+016.74E+02 + 72M4 72.003.91E-041.32E-021.51E+001.90E+022.01E-042.49E-022.08E+008.80E+01 + 72M4 105.008.08E-051.89E-031.15E-019.44E+004.97E-053.77E-032.09E-016.30E+00 + 72M4 150.001.81E-053.08E-041.06E-025.83E-011.31E-056.40E-042.45E-025.41E-01 + 72M4 280.001.35E-061.39E-051.90E-045.25E-031.24E-062.96E-056.27E-048.26E-03 + 72M4 500.001.38E-078.99E-075.96E-068.51E-051.39E-071.80E-062.33E-052.01E-04 + 72M5 2.661.08E+022.96E+052.65E+103.05E+149.29E+003.09E+041.70E+108.73E+14 + 72M5 3.664.03E+015.77E+042.83E+091.87E+133.33E+006.31E+031.83E+095.06E+13 + 72M5 5.669.55E+006.20E+031.32E+084.20E+118.04E-017.18E+028.69E+071.04E+12 + 72M5 9.661.45E+004.05E+023.03E+064.20E+091.37E-015.01E+012.07E+069.15E+09 + 72M5 16.661.87E-012.48E+016.43E+044.06E+072.19E-023.34E+004.60E+047.65E+07 + 72M5 27.002.79E-022.03E+002.11E+036.98E+054.17E-033.07E-011.58E+031.17E+06 + 72M5 42.004.59E-032.02E-019.27E+011.75E+048.88E-043.52E-027.29E+012.68E+04 + 72M5 54.001.61E-035.38E-021.57E+012.18E+033.64E-041.04E-021.27E+013.23E+03 + 72M5 72.004.79E-041.18E-022.07E+002.04E+021.30E-042.58E-031.72E+002.94E+02 + 72M5 105.009.71E-051.60E-031.47E-019.28E+003.34E-054.25E-041.27E-011.33E+01 + 72M5 150.002.15E-052.47E-041.23E-025.15E-019.18E-067.96E-051.10E-027.54E-01 + 72M5 280.001.66E-061.02E-051.78E-043.58E-039.83E-074.70E-061.62E-045.70E-03 + 72M5 500.001.86E-076.56E-074.36E-064.24E-051.35E-074.02E-073.90E-067.30E-05 + 72N+ 50.002.17E-023.82E+002.48E+021.00E+042.71E-011.27E+016.52E+022.71E+04 + 72N+ 70.008.52E-037.45E-013.32E+019.27E+021.00E-012.84E+008.65E+012.35E+03 + 72N+ 100.003.24E-031.41E-014.21E+008.22E+013.60E-026.24E-011.14E+012.03E+02 + 72N+ 150.001.07E-032.23E-024.21E-015.60E+001.12E-021.18E-011.29E+001.43E+01 + 72N+ 200.004.93E-046.42E-038.71E-028.89E-014.94E-033.82E-022.98E-012.42E+00 + 72N+ 500.005.19E-052.26E-041.10E-034.92E-034.11E-041.52E-035.11E-031.77E-02 + 73K 68.427.92E-011.11E+003.05E-012.19E-021.12E+011.13E+022.04E+027.93E+01 + 73K 69.127.73E-011.14E+004.05E-015.78E-021.09E+011.09E+022.07E+021.04E+02 + 73K 70.427.38E-011.19E+005.90E-011.66E-011.03E+011.02E+022.09E+021.47E+02 + 73K 73.626.60E-011.24E+001.02E+006.33E-019.05E+008.64E+012.08E+022.40E+02 + 73K 77.425.81E-011.26E+001.45E+001.42E+007.81E+007.20E+011.97E+023.17E+02 + 73K 81.005.18E-011.24E+001.76E+002.24E+006.85E+006.12E+011.83E+023.60E+02 + 73K 87.004.32E-011.16E+002.07E+003.48E+005.57E+004.73E+011.57E+023.84E+02 + 73K 95.003.46E-011.02E+002.20E+004.58E+004.32E+003.44E+011.24E+023.61E+02 + 73K 107.002.55E-018.17E-012.06E+005.14E+003.07E+002.25E+018.67E+012.88E+02 + 73K 120.001.89E-016.36E-011.76E+004.85E+002.21E+001.49E+015.92E+012.11E+02 + 73K 137.001.34E-014.62E-011.36E+004.01E+001.52E+009.33E+003.72E+011.37E+02 + 73K 150.001.06E-013.66E-011.10E+003.35E+001.17E+006.79E+002.68E+019.93E+01 + 73K 167.008.07E-022.76E-018.42E-012.60E+008.67E-014.67E+001.80E+016.63E+01 + 73K 190.005.79E-021.95E-015.96E-011.84E+006.04E-012.99E+001.11E+013.99E+01 + 73K 215.004.23E-021.39E-014.21E-011.29E+004.29E-011.96E+007.00E+002.43E+01 + 73K 280.002.19E-026.77E-021.97E-015.77E-012.08E-018.17E-012.61E+008.22E+00 + 73K 365.001.17E-023.37E-029.26E-022.53E-011.02E-013.49E-019.95E-012.79E+00 + 73K 460.006.90E-031.90E-024.92E-021.25E-015.56E-021.71E-014.41E-011.11E+00 + 73K 570.004.35E-031.15E-022.82E-026.69E-023.19E-029.04E-022.13E-014.89E-01 + 73K 800.002.20E-035.56E-031.24E-022.64E-021.35E-023.45E-027.19E-021.44E-01 + 73K 1050.001.33E-033.23E-036.77E-031.32E-026.88E-031.66E-023.17E-025.78E-02 + 73K 1300.009.07E-042.14E-034.30E-037.90E-034.08E-039.52E-031.73E-022.95E-02 + 73K 1550.006.71E-041.54E-032.99E-035.26E-032.67E-036.10E-031.07E-021.74E-02 + 73L1 12.682.48E+005.41E+021.90E+048.01E+042.35E+026.47E+043.31E+063.76E+07 + 73L1 13.382.28E+004.13E+021.77E+041.37E+052.01E+025.02E+042.47E+063.32E+07 + 73L1 14.681.95E+002.56E+021.40E+041.89E+051.52E+023.24E+041.49E+062.42E+07 + 73L1 17.881.38E+008.98E+016.78E+031.54E+058.44E+011.29E+045.10E+059.96E+06 + 73L1 21.689.58E-013.06E+012.83E+038.05E+044.76E+015.27E+031.79E+053.66E+06 + 73L1 25.007.24E-011.34E+011.40E+034.33E+043.12E+012.74E+038.29E+041.67E+06 + 73L1 31.004.66E-013.77E+004.48E+021.48E+041.65E+011.04E+032.61E+044.94E+05 + 73L1 39.002.85E-011.06E+001.25E+024.15E+038.35E+003.72E+027.73E+031.31E+05 + 73L1 51.001.57E-013.80E-012.67E+018.58E+023.79E+001.15E+021.90E+032.75E+04 + 73L1 64.009.29E-022.28E-017.38E+002.17E+021.95E+004.37E+015.94E+027.35E+03 + 73L1 81.005.31E-021.48E-012.15E+005.21E+019.80E-011.63E+011.82E+021.90E+03 + 73L1 94.003.71E-021.10E-011.08E+002.16E+016.37E-018.89E+008.72E+018.15E+02 + 73L1 111.002.48E-027.78E-025.51E-018.45E+003.94E-014.56E+003.89E+013.21E+02 + 73L1 134.001.56E-025.08E-022.82E-013.12E+002.30E-012.17E+001.59E+011.14E+02 + 73L1 160.001.01E-023.32E-021.59E-011.32E+001.39E-011.10E+006.98E+004.36E+01 + 73L1 225.004.40E-031.42E-025.64E-023.06E-015.37E-023.12E-011.52E+007.38E+00 + 73L1 310.002.06E-036.35E-032.21E-029.06E-022.24E-021.01E-013.93E-011.52E+00 + 73L1 400.001.16E-033.41E-031.08E-023.71E-021.13E-024.32E-021.42E-014.62E-01 + 73L1 510.006.85E-041.94E-035.59E-031.66E-025.97E-031.99E-025.67E-021.59E-01 + 73L1 740.003.23E-048.65E-042.18E-035.37E-032.29E-036.50E-031.53E-023.50E-02 + 73L11000.001.84E-044.71E-041.08E-032.33E-031.08E-032.78E-035.79E-031.16E-02 + 73L11500.009.06E-052.17E-044.45E-048.35E-043.98E-049.48E-041.74E-033.02E-03 + 73L2 12.145.30E+002.86E+045.65E+061.31E+082.66E+012.64E+034.43E+041.68E+05 + 73L2 12.844.56E+002.16E+044.09E+061.12E+082.25E+012.14E+034.22E+042.90E+05 + 73L2 14.143.50E+001.34E+042.35E+067.70E+071.68E+011.48E+033.49E+044.07E+05 + 73L2 17.341.98E+004.88E+037.22E+052.83E+079.09E+006.73E+021.91E+043.54E+05 + 73L2 21.141.13E+001.84E+032.29E+059.32E+065.00E+003.14E+029.25E+032.02E+05 + 73L2 25.006.89E-018.05E+028.67E+043.45E+063.02E+001.64E+024.74E+031.08E+05 + 73L2 31.003.63E-012.81E+022.50E+049.24E+051.58E+007.14E+011.92E+034.27E+04 + 73L2 39.001.81E-019.24E+016.66E+032.20E+057.97E-012.94E+017.10E+021.46E+04 + 73L2 51.007.92E-022.54E+011.43E+034.01E+043.59E-011.05E+012.16E+023.87E+03 + 73L2 64.003.90E-028.64E+003.94E+029.45E+031.83E-014.40E+007.80E+011.22E+03 + 73L2 81.001.85E-022.85E+001.05E+022.11E+039.16E-021.80E+002.70E+013.61E+02 + 73L2 94.001.16E-021.43E+004.56E+018.25E+025.92E-021.02E+001.38E+011.67E+02 + 73L2 111.006.84E-036.64E-011.82E+012.90E+023.65E-025.48E-016.53E+007.01E+01 + 73L2 134.003.77E-032.81E-016.51E+008.97E+012.11E-022.72E-012.81E+002.64E+01 + 73L2 160.002.15E-031.27E-012.50E+003.01E+011.26E-021.41E-011.28E+001.05E+01 + 73L2 225.007.44E-042.84E-024.16E-013.86E+004.73E-034.08E-022.89E-011.86E+00 + 73L2 310.002.79E-047.30E-038.21E-026.01E-011.90E-031.30E-027.36E-023.79E-01 + 73L2 400.001.31E-042.57E-032.37E-021.45E-019.23E-045.36E-032.56E-021.11E-01 + 73L2 510.006.50E-059.88E-047.59E-033.95E-024.66E-042.34E-039.63E-033.60E-02 + 73L2 740.002.34E-052.46E-041.46E-036.07E-031.65E-046.85E-042.29E-036.94E-03 + 73L21000.001.06E-058.55E-054.22E-041.49E-037.15E-052.62E-047.57E-041.98E-03 + 73L21500.003.80E-062.27E-059.00E-052.63E-042.33E-057.50E-051.85E-044.11E-04 + 73L3 10.881.16E+016.61E+041.56E+074.28E+085.16E+009.33E+041.35E+082.08E+10 + 73L3 11.589.76E+004.83E+041.07E+073.42E+084.27E+006.84E+048.83E+071.29E+10 + 73L3 12.887.17E+002.82E+045.66E+062.12E+083.08E+004.02E+044.30E+075.71E+09 + 73L3 16.083.73E+009.18E+031.49E+066.45E+071.56E+001.33E+049.66E+061.05E+09 + 73L3 19.881.97E+003.15E+034.17E+051.82E+078.12E-014.62E+032.34E+062.10E+08 + 73L3 25.009.70E-019.91E+021.05E+054.31E+064.03E-011.48E+035.14E+053.75E+07 + 73L3 31.004.93E-013.35E+022.88E+041.07E+062.09E-015.06E+021.25E+057.52E+06 + 73L3 39.002.37E-011.06E+027.24E+032.36E+051.03E-011.62E+022.83E+041.38E+06 + 73L3 51.009.90E-022.76E+011.45E+033.94E+044.58E-024.27E+015.07E+031.94E+05 + 73L3 64.004.69E-028.88E+003.71E+028.56E+032.30E-021.39E+011.21E+033.78E+04 + 73L3 81.002.14E-022.75E+009.07E+011.75E+031.13E-024.34E+002.79E+027.11E+03 + 73L3 94.001.30E-021.32E+003.74E+016.39E+027.21E-032.08E+001.12E+022.50E+03 + 73L3 111.007.49E-035.81E-011.39E+012.08E+024.37E-039.22E-014.06E+017.92E+02 + 73L3 134.004.00E-032.31E-014.57E+005.85E+012.49E-033.67E-011.31E+012.19E+02 + 73L3 160.002.22E-039.72E-021.61E+001.78E+011.47E-031.55E-014.58E+006.63E+01 + 73L3 225.007.25E-041.89E-022.23E-011.86E+005.37E-042.99E-026.34E-017.05E+00 + 73L3 310.002.60E-044.21E-033.60E-022.32E-012.11E-046.52E-031.04E-019.20E-01 + 73L3 400.001.19E-041.32E-038.82E-034.64E-021.02E-041.99E-032.56E-021.92E-01 + 73L3 510.005.75E-054.55E-042.41E-031.06E-025.17E-056.56E-046.95E-034.48E-02 + 73L3 740.002.01E-059.81E-053.72E-041.27E-031.90E-051.29E-041.00E-035.27E-03 + 73L31000.009.14E-063.14E-059.26E-052.62E-048.82E-063.75E-052.22E-041.00E-03 + 73L31500.003.54E-068.02E-061.75E-053.91E-053.43E-068.57E-063.25E-051.19E-04 + 73M1 3.714.11E+001.95E+041.27E+061.02E+082.08E+036.62E+063.87E+094.97E+11 + 73M1 4.713.15E+007.26E+035.34E+052.93E+071.02E+032.05E+068.22E+089.56E+10 + 73M1 6.711.91E+001.60E+031.51E+055.24E+063.54E+023.64E+058.55E+078.06E+09 + 73M1 10.718.66E-011.95E+022.26E+049.41E+058.74E+013.79E+044.63E+063.11E+08 + 73M1 17.713.33E-011.68E+012.17E+039.81E+041.95E+013.48E+032.23E+059.96E+06 + 73M1 27.001.40E-011.86E+002.49E+021.06E+045.56E+004.91E+021.92E+045.97E+05 + 73M1 42.005.31E-022.24E-012.25E+018.42E+021.50E+006.68E+011.62E+033.41E+04 + 73M1 54.002.99E-029.54E-025.58E+001.87E+027.18E-012.22E+014.13E+027.00E+03 + 73M1 72.001.52E-024.68E-021.19E+003.30E+013.09E-016.47E+009.06E+011.19E+03 + 73M1 105.006.13E-032.02E-021.99E-013.59E+001.04E-011.36E+001.33E+011.27E+02 + 73M1 150.002.57E-038.65E-035.09E-025.29E-013.74E-023.32E-012.37E+001.66E+01 + 73M1 280.005.71E-041.81E-036.97E-033.35E-026.59E-033.32E-021.44E-016.19E-01 + 73M1 500.001.57E-044.50E-041.34E-034.20E-031.40E-034.83E-031.42E-024.12E-02 + 73M2 3.479.45E+003.41E+065.99E+091.25E+122.70E+022.38E+053.56E+071.29E+09 + 73M2 4.476.51E+009.65E+051.15E+092.15E+111.27E+027.54E+041.01E+075.62E+08 + 73M2 6.473.32E+001.53E+051.07E+081.63E+104.16E+011.45E+041.58E+061.01E+08 + 73M2 10.471.17E+001.40E+045.18E+065.70E+089.81E+001.80E+031.43E+058.19E+06 + 73M2 17.473.34E-011.11E+032.22E+051.67E+072.12E+002.09E+021.14E+045.03E+05 + 73M2 27.001.04E-011.32E+021.61E+048.65E+055.77E-013.53E+011.38E+034.56E+04 + 73M2 42.002.95E-021.56E+011.19E+034.46E+041.55E-016.03E+001.66E+023.98E+03 + 73M2 54.001.41E-024.70E+002.76E+028.41E+037.40E-022.24E+005.03E+019.98E+02 + 73M2 72.005.90E-031.21E+005.31E+011.28E+033.18E-027.34E-011.30E+012.07E+02 + 73M2 105.001.85E-032.10E-016.37E+001.12E+021.06E-021.74E-012.27E+002.68E+01 + 73M2 150.006.15E-044.17E-029.03E-011.19E+013.76E-034.56E-024.50E-014.03E+00 + 73M2 280.009.14E-052.77E-033.46E-022.78E-016.29E-044.71E-032.91E-021.64E-01 + 73M2 500.001.68E-052.65E-042.10E-031.12E-021.23E-046.30E-042.65E-031.01E-02 + 73M3 3.192.54E+017.58E+061.47E+103.22E+124.96E+011.11E+071.84E+113.23E+14 + 73M3 4.191.56E+011.94E+062.45E+094.67E+112.18E+012.86E+062.80E+103.14E+13 + 73M3 6.196.96E+002.72E+051.95E+082.92E+106.68E+004.08E+051.90E+091.16E+12 + 73M3 10.192.15E+002.22E+048.07E+068.58E+081.47E+003.39E+046.26E+071.87E+10 + 73M3 17.195.43E-011.60E+033.04E+052.19E+072.99E-012.50E+031.82E+062.76E+08 + 73M3 27.001.50E-011.66E+021.87E+049.42E+057.61E-022.64E+029.00E+047.97E+06 + 73M3 42.003.95E-021.82E+011.26E+034.41E+042.00E-022.93E+015.02E+032.73E+05 + 73M3 54.001.80E-025.19E+002.74E+027.79E+039.36E-038.43E+009.99E+024.19E+04 + 73M3 72.007.19E-031.24E+004.83E+011.08E+033.94E-032.03E+001.62E+025.11E+03 + 73M3 105.002.11E-031.93E-015.05E+008.16E+011.28E-033.17E-011.57E+013.47E+02 + 73M3 150.006.60E-043.38E-026.12E-017.28E+004.43E-045.54E-021.83E+002.95E+01 + 73M3 280.008.87E-051.72E-031.66E-021.17E-017.12E-052.75E-034.94E-024.84E-01 + 73M3 500.001.52E-051.27E-046.92E-043.11E-031.38E-051.87E-042.05E-031.37E-02 + 73M4 2.796.83E+012.35E+051.31E+101.66E+141.54E+013.57E+053.07E+092.30E+12 + 73M4 3.792.68E+014.95E+041.54E+091.14E+135.74E+007.73E+043.90E+082.31E+11 + 73M4 5.796.75E+005.73E+037.83E+072.90E+111.43E+009.22E+032.29E+079.54E+09 + 73M4 9.791.09E+003.99E+021.94E+063.21E+092.50E-016.56E+027.20E+051.89E+08 + 73M4 16.791.48E-012.57E+014.36E+043.36E+073.97E-024.33E+012.19E+043.53E+06 + 73M4 27.002.34E-022.27E+001.55E+036.40E+057.59E-033.94E+001.06E+031.11E+05 + 73M4 42.003.96E-032.34E-017.05E+011.69E+041.57E-034.25E-016.62E+014.59E+03 + 73M4 54.001.41E-036.41E-021.23E+012.18E+036.35E-041.20E-011.39E+017.63E+02 + 73M4 72.004.27E-041.46E-021.69E+002.14E+022.22E-042.83E-022.36E+009.98E+01 + 73M4 105.008.80E-052.10E-031.29E-011.07E+015.50E-054.29E-032.37E-017.14E+00 + 73M4 150.001.98E-053.42E-041.19E-026.59E-011.45E-057.27E-042.79E-026.14E-01 + 73M4 280.001.53E-061.55E-052.13E-045.94E-031.38E-063.36E-057.14E-049.40E-03 + 73M4 500.001.55E-071.00E-066.70E-069.64E-051.55E-072.04E-062.66E-052.29E-04 + 73M5 2.731.03E+022.77E+052.45E+102.74E+149.16E+002.98E+041.62E+108.10E+14 + 73M5 3.733.94E+015.61E+042.75E+091.78E+133.36E+006.32E+031.84E+095.01E+13 + 73M5 5.739.59E+006.25E+031.35E+084.26E+118.32E-017.44E+029.18E+071.10E+12 + 73M5 9.731.49E+004.19E+023.22E+064.46E+091.45E-015.33E+012.27E+061.01E+10 + 73M5 16.731.96E-012.61E+016.99E+044.42E+072.34E-023.61E+005.15E+048.66E+07 + 73M5 27.002.99E-022.20E+002.37E+037.87E+054.53E-033.39E-011.83E+031.37E+06 + 73M5 42.004.95E-032.19E-011.04E+021.97E+049.68E-043.88E-028.41E+013.13E+04 + 73M5 54.001.74E-035.84E-021.76E+012.45E+033.97E-041.14E-021.46E+013.76E+03 + 73M5 72.005.20E-041.28E-022.32E+002.29E+021.42E-042.84E-031.99E+003.42E+02 + 73M5 105.001.06E-041.75E-031.65E-011.04E+013.65E-054.69E-041.46E-011.54E+01 + 73M5 150.002.38E-052.70E-041.39E-025.80E-011.01E-058.78E-051.26E-028.74E-01 + 73M5 280.001.85E-061.13E-051.99E-044.03E-031.08E-065.18E-061.86E-046.58E-03 + 73M5 500.002.03E-077.40E-074.87E-064.78E-051.49E-074.44E-074.43E-068.39E-05 + 73N+ 50.002.27E-024.22E+002.75E+021.11E+043.01E-011.43E+017.43E+023.11E+04 + 73N+ 70.008.91E-038.23E-013.67E+011.03E+031.11E-013.18E+009.81E+012.69E+03 + 73N+ 100.003.40E-031.55E-014.65E+009.08E+014.00E-026.97E-011.29E+012.30E+02 + 73N+ 150.001.12E-032.45E-024.66E-016.20E+001.25E-021.32E-011.44E+001.61E+01 + 73N+ 200.005.19E-047.03E-039.64E-029.84E-015.48E-034.25E-023.33E-012.71E+00 + 73N+ 500.005.49E-052.45E-041.21E-035.46E-034.55E-041.68E-035.66E-031.96E-02 + 74K 70.527.45E-011.01E+002.66E-011.82E-021.11E+011.08E+021.89E+027.07E+01 + 74K 71.227.28E-011.03E+003.51E-014.77E-021.08E+011.04E+021.91E+029.20E+01 + 74K 72.526.96E-011.07E+005.09E-011.36E-011.03E+019.74E+011.93E+021.30E+02 + 74K 75.726.24E-011.12E+008.80E-015.17E-019.07E+008.34E+011.92E+022.11E+02 + 74K 79.525.52E-011.14E+001.25E+001.17E+007.86E+006.99E+011.83E+022.80E+02 + 74K 84.004.81E-011.11E+001.58E+002.02E+006.71E+005.74E+011.68E+023.27E+02 + 74K 90.004.04E-011.04E+001.84E+003.04E+005.50E+004.48E+011.44E+023.45E+02 + 74K 98.003.25E-019.25E-011.94E+003.97E+004.30E+003.30E+011.15E+023.25E+02 + 74K 110.002.42E-017.48E-011.83E+004.46E+003.09E+002.18E+018.14E+012.62E+02 + 74K 123.001.82E-015.88E-011.58E+004.26E+002.24E+001.47E+015.63E+011.94E+02 + 74K 140.001.30E-014.32E-011.24E+003.58E+001.55E+009.28E+003.58E+011.28E+02 + 74K 153.001.04E-013.45E-011.01E+003.02E+001.21E+006.80E+002.60E+019.39E+01 + 74K 170.007.91E-022.63E-017.84E-012.38E+008.97E-014.71E+001.77E+016.34E+01 + 74K 193.005.72E-021.87E-015.62E-011.71E+006.29E-013.05E+001.11E+013.87E+01 + 74K 220.004.11E-021.32E-013.92E-011.19E+004.37E-011.95E+006.79E+002.29E+01 + 74K 285.002.17E-026.57E-021.89E-015.47E-012.15E-018.29E-012.60E+008.00E+00 + 74K 370.001.17E-023.34E-029.10E-022.47E-011.07E-013.60E-011.01E+002.78E+00 + 74K 460.007.16E-031.96E-025.06E-021.29E-016.03E-021.84E-014.70E-011.18E+00 + 74K 570.004.52E-031.20E-022.92E-026.93E-023.46E-029.73E-022.28E-015.19E-01 + 74K 800.002.29E-035.80E-031.30E-022.76E-021.46E-023.71E-027.69E-021.53E-01 + 74K 1050.001.38E-033.38E-037.10E-031.39E-027.42E-031.78E-023.40E-026.16E-02 + 74K 1300.009.46E-042.25E-034.52E-038.31E-034.39E-031.02E-021.85E-023.15E-02 + 74K 1550.007.00E-041.62E-033.15E-035.55E-032.86E-036.55E-031.14E-021.86E-02 + 74L1 13.102.33E+005.05E+021.70E+046.70E+042.35E+026.16E+043.03E+063.31E+07 + 74L1 13.802.14E+003.89E+021.58E+041.16E+052.01E+024.82E+042.29E+062.94E+07 + 74L1 15.101.84E+002.46E+021.27E+041.61E+051.54E+023.15E+041.40E+062.17E+07 + 74L1 18.301.31E+008.93E+016.34E+031.37E+058.66E+011.28E+044.92E+059.23E+06 + 74L1 22.109.23E-013.15E+012.73E+037.40E+044.94E+015.35E+031.77E+053.49E+06 + 74L1 26.006.72E-011.25E+011.23E+033.67E+043.05E+012.54E+037.36E+041.43E+06 + 74L1 32.004.39E-013.73E+004.13E+021.31E+041.65E+019.93E+022.42E+044.42E+05 + 74L1 40.002.73E-011.10E+001.20E+023.84E+038.52E+003.68E+027.41E+031.22E+05 + 74L1 52.001.52E-013.89E-012.71E+018.34E+023.93E+001.17E+021.89E+032.65E+04 + 74L1 65.009.12E-022.26E-017.76E+002.19E+022.05E+004.51E+016.01E+027.28E+03 + 74L1 82.005.27E-021.44E-012.31E+005.42E+011.04E+001.71E+011.87E+021.92E+03 + 74L1 95.003.70E-021.08E-011.16E+002.29E+016.78E-019.36E+009.05E+018.33E+02 + 74L1 112.002.48E-027.63E-025.86E-019.03E+004.22E-014.83E+004.07E+013.31E+02 + 74L1 135.001.58E-025.02E-022.96E-013.36E+002.47E-012.32E+001.68E+011.18E+02 + 74L1 160.001.04E-023.36E-021.69E-011.46E+001.53E-011.21E+007.62E+004.73E+01 + 74L1 225.004.55E-031.45E-025.92E-023.32E-015.89E-023.41E-011.66E+008.00E+00 + 74L1 310.002.14E-036.55E-032.32E-029.71E-022.45E-021.11E-014.28E-011.64E+00 + 74L1 400.001.20E-033.55E-031.13E-023.96E-021.24E-024.72E-021.54E-015.01E-01 + 74L1 510.007.15E-042.03E-035.91E-031.77E-026.52E-032.17E-026.16E-021.72E-01 + 74L1 740.003.38E-049.10E-042.31E-035.72E-032.50E-037.07E-031.66E-023.79E-02 + 74L11000.001.93E-044.97E-041.14E-032.48E-031.17E-033.02E-036.28E-031.25E-02 + 74L11500.009.51E-052.30E-044.74E-048.92E-044.31E-041.03E-031.89E-033.27E-03 + 74L2 12.544.98E+002.64E+045.00E+061.11E+082.67E+012.52E+034.04E+041.44E+05 + 74L2 13.244.31E+002.02E+043.66E+069.59E+072.26E+012.05E+033.86E+042.49E+05 + 74L2 14.543.34E+001.27E+042.14E+066.70E+071.71E+011.43E+033.23E+043.54E+05 + 74L2 17.741.92E+004.73E+036.78E+052.55E+079.37E+006.67E+021.81E+043.19E+05 + 74L2 21.541.10E+001.82E+032.21E+058.67E+065.22E+003.16E+028.97E+031.88E+05 + 74L2 26.006.39E-017.23E+027.45E+042.86E+062.97E+001.53E+024.26E+039.32E+04 + 74L2 32.003.45E-012.63E+022.25E+048.03E+051.59E+006.87E+011.79E+033.83E+04 + 74L2 40.001.76E-018.91E+016.23E+031.99E+058.20E-012.91E+016.80E+021.35E+04 + 74L2 52.007.85E-022.53E+011.39E+033.79E+043.76E-011.06E+012.13E+023.72E+03 + 74L2 65.003.92E-028.77E+003.92E+029.20E+031.94E-014.54E+007.85E+011.20E+03 + 74L2 82.001.89E-022.94E+001.06E+022.11E+039.82E-021.88E+002.76E+013.63E+02 + 74L2 95.001.19E-021.49E+004.68E+018.33E+026.38E-021.08E+001.43E+011.69E+02 + 74L2 112.007.07E-036.97E-011.89E+012.97E+023.95E-025.82E-016.82E+007.21E+01 + 74L2 135.003.92E-032.98E-016.82E+009.29E+012.30E-022.91E-012.97E+002.74E+01 + 74L2 160.002.30E-031.39E-012.74E+003.27E+011.41E-021.55E-011.40E+001.14E+01 + 74L2 225.007.98E-043.12E-024.56E-014.21E+005.28E-034.50E-023.16E-012.02E+00 + 74L2 310.003.01E-048.03E-039.02E-026.57E-012.12E-031.44E-028.09E-024.14E-01 + 74L2 400.001.42E-042.84E-032.61E-021.59E-011.03E-035.95E-032.82E-021.22E-01 + 74L2 510.007.05E-051.09E-038.38E-034.35E-025.23E-042.60E-031.06E-023.96E-02 + 74L2 740.002.54E-052.71E-041.62E-036.70E-031.85E-047.63E-042.53E-037.67E-03 + 74L21000.001.15E-059.46E-054.67E-041.65E-038.03E-052.92E-048.42E-042.20E-03 + 74L21500.004.16E-062.52E-051.00E-042.92E-042.62E-058.40E-052.06E-044.57E-04 + 74L3 11.211.10E+016.13E+041.39E+073.69E+085.03E+008.97E+041.25E+081.87E+10 + 74L3 11.919.25E+004.52E+049.69E+062.98E+084.18E+006.64E+048.28E+071.17E+10 + 74L3 13.216.85E+002.68E+045.20E+061.88E+083.04E+003.96E+044.11E+075.31E+09 + 74L3 16.413.62E+008.94E+031.41E+065.89E+071.56E+001.34E+049.54E+061.01E+09 + 74L3 20.211.93E+003.12E+034.04E+051.71E+078.24E-014.75E+032.37E+062.09E+08 + 74L3 26.008.89E-018.76E+028.87E+043.51E+063.81E-011.35E+034.48E+053.14E+07 + 74L3 32.004.63E-013.08E+022.54E+049.16E+052.02E-014.81E+021.15E+056.66E+06 + 74L3 40.002.27E-011.01E+026.65E+032.11E+051.02E-011.59E+022.70E+041.28E+06 + 74L3 52.009.68E-022.70E+011.38E+033.66E+044.60E-024.32E+015.03E+031.89E+05 + 74L3 65.004.65E-028.86E+003.62E+028.18E+032.34E-021.43E+011.23E+033.78E+04 + 74L3 82.002.15E-022.79E+009.04E+011.71E+031.16E-024.54E+002.89E+027.27E+03 + 74L3 95.001.32E-021.35E+003.76E+016.32E+027.44E-032.20E+001.17E+022.59E+03 + 74L3 112.007.63E-035.99E-011.42E+012.08E+024.54E-039.81E-014.30E+018.29E+02 + 74L3 135.004.10E-032.40E-014.70E+005.93E+012.60E-033.93E-011.40E+012.31E+02 + 74L3 160.002.34E-031.05E-011.73E+001.90E+011.57E-031.72E-015.11E+007.37E+01 + 74L3 225.007.65E-042.04E-022.39E-011.98E+005.73E-043.32E-027.06E-017.83E+00 + 74L3 310.002.75E-044.53E-033.87E-022.48E-012.25E-047.22E-031.16E-011.02E+00 + 74L3 400.001.25E-041.42E-039.49E-034.98E-021.09E-042.20E-032.84E-022.12E-01 + 74L3 510.006.10E-054.90E-042.60E-031.14E-025.51E-057.23E-047.70E-034.96E-02 + 74L3 740.002.13E-051.05E-044.00E-041.36E-032.02E-051.41E-041.11E-035.83E-03 + 74L31000.009.66E-063.37E-059.96E-052.82E-049.37E-064.09E-052.45E-041.11E-03 + 74L31500.003.73E-068.57E-061.88E-054.21E-053.63E-069.27E-063.57E-051.31E-04 + 74M1 3.823.88E+001.88E+041.23E+068.74E+072.10E+036.42E+063.62E+094.51E+11 + 74M1 4.823.00E+007.18E+035.25E+052.73E+071.05E+032.05E+068.02E+089.06E+10 + 74M1 6.821.84E+001.63E+031.50E+055.18E+063.72E+023.76E+058.71E+078.03E+09 + 74M1 10.828.49E-012.06E+022.31E+049.35E+059.35E+014.04E+044.89E+063.23E+08 + 74M1 17.823.31E-011.86E+012.28E+031.00E+052.11E+013.77E+032.41E+051.06E+07 + 74M1 27.001.41E-012.18E+002.75E+021.14E+046.14E+005.47E+022.14E+046.62E+05 + 74M1 42.005.40E-022.57E-012.55E+019.25E+021.66E+007.43E+011.79E+033.77E+04 + 74M1 54.003.05E-021.03E-016.40E+002.08E+027.92E-012.46E+014.58E+027.72E+03 + 74M1 72.001.56E-024.82E-021.37E+003.71E+013.41E-017.17E+001.00E+021.31E+03 + 74M1 105.006.30E-032.04E-022.24E-014.07E+001.14E-011.50E+001.47E+011.39E+02 + 74M1 150.002.65E-038.81E-035.53E-025.94E-014.13E-023.66E-012.60E+001.83E+01 + 74M1 280.005.94E-041.87E-037.39E-033.65E-027.25E-033.65E-021.57E-016.76E-01 + 74M1 500.001.64E-044.73E-041.43E-034.51E-031.54E-035.29E-031.55E-024.49E-02 + 74M2 3.578.90E+003.20E+065.44E+091.09E+122.73E+022.31E+053.33E+071.14E+09 + 74M2 4.576.22E+009.39E+051.09E+091.98E+111.31E+027.55E+049.81E+065.19E+08 + 74M2 6.573.23E+001.54E+051.06E+081.57E+104.40E+011.50E+041.59E+069.81E+07 + 74M2 10.571.17E+001.45E+045.33E+065.76E+081.06E+011.91E+031.48E+058.28E+06 + 74M2 17.573.39E-011.18E+032.34E+051.74E+072.31E+002.25E+021.21E+045.23E+05 + 74M2 27.001.08E-011.45E+021.76E+049.38E+056.42E-013.88E+011.50E+034.91E+04 + 74M2 42.003.10E-021.71E+011.30E+034.84E+041.73E-016.64E+001.81E+024.30E+03 + 74M2 54.001.48E-025.15E+003.02E+029.15E+038.25E-022.47E+005.49E+011.08E+03 + 74M2 72.006.24E-031.33E+005.81E+011.39E+033.54E-028.10E-011.43E+012.25E+02 + 74M2 105.001.97E-032.31E-016.99E+001.22E+021.18E-021.92E-012.49E+002.92E+01 + 74M2 150.006.58E-044.59E-029.93E-011.30E+014.21E-035.04E-024.94E-014.40E+00 + 74M2 280.009.86E-053.06E-033.82E-023.06E-017.07E-045.23E-033.21E-021.80E-01 + 74M2 500.001.83E-052.94E-042.33E-031.24E-021.38E-047.03E-042.94E-031.12E-02 + 74M3 3.282.42E+017.17E+061.35E+102.86E+124.89E+011.09E+071.75E+112.98E+14 + 74M3 4.281.51E+011.89E+062.34E+094.34E+112.19E+012.90E+062.78E+103.06E+13 + 74M3 6.286.83E+002.75E+051.94E+082.84E+106.85E+004.27E+051.98E+091.20E+12 + 74M3 10.282.15E+002.31E+048.30E+068.67E+081.53E+003.64E+046.75E+072.01E+10 + 74M3 17.285.51E-011.69E+033.19E+052.26E+073.16E-012.73E+032.00E+063.03E+08 + 74M3 27.001.55E-011.80E+022.02E+041.01E+068.15E-022.96E+021.02E+059.08E+06 + 74M3 42.004.11E-021.97E+011.36E+034.72E+042.14E-023.29E+015.69E+033.10E+05 + 74M3 54.001.88E-025.63E+002.95E+028.34E+031.00E-029.45E+001.13E+034.75E+04 + 74M3 72.007.54E-031.35E+005.21E+011.15E+034.23E-032.27E+001.83E+025.77E+03 + 74M3 105.002.23E-032.09E-015.46E+008.75E+011.37E-033.55E-011.77E+013.91E+02 + 74M3 150.006.97E-043.67E-026.61E-017.82E+004.74E-046.20E-022.06E+003.31E+01 + 74M3 280.009.42E-051.87E-031.79E-021.26E-017.64E-053.07E-035.53E-025.42E-01 + 74M3 500.001.62E-051.37E-047.50E-043.36E-031.48E-052.07E-042.29E-031.52E-02 + 74M4 2.876.52E+012.22E+051.20E+101.48E+141.52E+013.51E+052.92E+092.12E+12 + 74M4 3.872.62E+014.85E+041.48E+091.09E+135.80E+007.88E+043.88E+082.24E+11 + 74M4 5.876.77E+005.83E+037.92E+072.93E+111.49E+009.73E+032.40E+079.79E+09 + 74M4 9.871.12E+004.17E+022.05E+063.40E+092.64E-017.13E+027.79E+052.02E+08 + 74M4 16.871.55E-012.74E+014.70E+043.65E+074.26E-024.79E+012.42E+043.86E+06 + 74M4 27.002.52E-022.48E+001.73E+037.22E+058.29E-034.47E+001.21E+031.25E+05 + 74M4 42.004.28E-032.57E-017.87E+011.90E+041.73E-034.82E-017.51E+015.19E+03 + 74M4 54.001.53E-037.06E-021.37E+012.46E+036.97E-041.36E-011.58E+018.64E+02 + 74M4 72.004.65E-041.61E-021.89E+002.42E+022.44E-043.21E-022.68E+001.13E+02 + 74M4 105.009.61E-052.32E-031.44E-011.20E+016.06E-054.87E-032.70E-018.08E+00 + 74M4 150.002.16E-053.80E-041.32E-027.44E-011.60E-058.25E-043.17E-026.96E-01 + 74M4 280.001.65E-061.73E-052.39E-046.71E-031.53E-063.82E-058.13E-041.07E-02 + 74M4 500.001.67E-071.12E-067.50E-061.09E-041.72E-072.32E-063.03E-052.61E-04 + 74M5 2.819.89E+012.60E+052.27E+102.46E+149.04E+002.88E+041.55E+107.52E+14 + 74M5 3.813.86E+015.45E+042.68E+091.71E+133.40E+006.32E+031.85E+094.96E+13 + 74M5 5.819.63E+006.28E+031.37E+084.32E+118.60E-017.70E+029.68E+071.15E+12 + 74M5 9.811.53E+004.33E+023.41E+064.72E+091.53E-015.65E+012.48E+061.11E+10 + 74M5 16.812.05E-012.74E+017.58E+044.80E+072.50E-023.89E+005.76E+049.78E+07 + 74M5 27.003.21E-022.37E+002.65E+038.85E+054.92E-033.73E-012.11E+031.60E+06 + 74M5 42.005.33E-032.37E-011.17E+022.21E+041.05E-034.27E-029.69E+013.66E+04 + 74M5 54.001.88E-036.34E-021.98E+012.76E+034.33E-041.26E-021.69E+014.39E+03 + 74M5 72.005.63E-041.39E-022.60E+002.57E+021.55E-043.13E-032.29E+003.98E+02 + 74M5 105.001.15E-041.91E-031.85E-011.17E+013.99E-055.16E-041.68E-011.79E+01 + 74M5 150.002.58E-052.95E-041.55E-026.51E-011.10E-059.67E-051.45E-021.01E+00 + 74M5 280.002.05E-061.24E-052.23E-044.53E-031.18E-065.71E-062.12E-047.59E-03 + 74M5 500.002.23E-078.08E-075.44E-065.36E-051.63E-074.89E-075.02E-069.63E-05 + 74N+ 50.002.38E-024.67E+003.04E+021.23E+043.37E-011.62E+018.51E+023.59E+04 + 74N+ 70.009.38E-039.10E-014.06E+011.14E+031.25E-013.59E+001.12E+023.08E+03 + 74N+ 100.003.58E-031.71E-015.15E+001.00E+024.48E-027.85E-011.46E+012.62E+02 + 74N+ 150.001.19E-032.70E-025.17E-016.86E+001.40E-021.48E-011.63E+001.82E+01 + 74N+ 200.005.50E-047.73E-031.07E-011.09E+006.14E-034.76E-023.74E-013.06E+00 + 74N+ 500.005.89E-052.67E-041.34E-036.07E-035.09E-041.87E-036.32E-032.19E-02 + 75K 72.687.01E-019.09E-012.33E-011.52E-021.11E+011.03E+021.74E+026.32E+01 + 75K 73.386.86E-019.32E-013.05E-013.95E-021.08E+019.97E+011.77E+028.17E+01 + 75K 74.686.56E-019.65E-014.40E-011.12E-011.03E+019.36E+011.79E+021.15E+02 + 75K 77.885.91E-011.01E+007.58E-014.24E-019.10E+008.05E+011.78E+021.86E+02 + 75K 81.685.24E-011.03E+001.08E+009.62E-017.92E+006.78E+011.71E+022.48E+02 + 75K 86.004.61E-011.01E+001.36E+001.65E+006.82E+005.63E+011.58E+022.90E+02 + 75K 92.003.89E-019.57E-011.60E+002.54E+005.62E+004.43E+011.37E+023.10E+02 + 75K 100.003.15E-018.54E-011.72E+003.37E+004.42E+003.28E+011.10E+022.96E+02 + 75K 112.002.36E-016.98E-011.65E+003.88E+003.19E+002.19E+017.88E+012.43E+02 + 75K 125.001.78E-015.54E-011.44E+003.78E+002.33E+001.48E+015.51E+011.83E+02 + 75K 142.001.28E-014.11E-011.14E+003.24E+001.62E+009.47E+003.55E+011.23E+02 + 75K 155.001.03E-013.31E-019.48E-012.76E+001.26E+006.97E+002.60E+019.09E+01 + 75K 172.007.87E-022.54E-017.41E-012.21E+009.44E-014.86E+001.78E+016.21E+01 + 75K 195.005.72E-021.83E-015.38E-011.62E+006.64E-013.16E+001.12E+013.83E+01 + 75K 220.004.23E-021.33E-013.89E-011.16E+004.76E-012.10E+007.17E+002.38E+01 + 75K 285.002.24E-026.68E-021.90E-015.48E-012.34E-018.91E-012.76E+008.38E+00 + 75K 370.001.21E-023.43E-029.29E-022.51E-011.16E-013.87E-011.07E+002.93E+00 + 75K 460.007.42E-032.02E-025.21E-021.32E-016.53E-021.98E-015.01E-011.24E+00 + 75K 570.004.70E-031.24E-023.03E-027.17E-023.74E-021.05E-012.43E-015.50E-01 + 75K 800.002.39E-036.05E-031.36E-022.88E-021.58E-023.99E-028.22E-021.63E-01 + 75K 1050.001.44E-033.54E-037.46E-031.45E-027.99E-031.91E-023.63E-026.56E-02 + 75K 1300.009.87E-042.36E-034.75E-038.75E-034.72E-031.10E-021.98E-023.36E-02 + 75K 1550.007.31E-041.70E-033.32E-035.85E-033.07E-037.03E-031.22E-021.99E-02 + 75L1 13.532.18E+004.72E+021.52E+045.63E+042.34E+025.88E+042.78E+062.92E+07 + 75L1 14.232.01E+003.68E+021.42E+049.76E+042.02E+024.64E+042.12E+062.61E+07 + 75L1 15.531.74E+002.36E+021.16E+041.38E+051.55E+023.07E+041.32E+061.95E+07 + 75L1 18.731.25E+008.87E+015.94E+031.22E+058.89E+011.28E+044.75E+058.57E+06 + 75L1 22.538.90E-013.24E+012.64E+036.80E+045.13E+015.43E+031.75E+053.33E+06 + 75L1 26.006.73E-011.45E+011.32E+033.73E+043.35E+012.81E+038.06E+041.53E+06 + 75L1 32.004.42E-014.41E+004.51E+021.36E+041.81E+011.10E+032.65E+044.74E+05 + 75L1 40.002.76E-011.30E+001.34E+024.09E+039.36E+004.06E+028.12E+031.31E+05 + 75L1 52.001.54E-014.26E-013.07E+019.07E+024.32E+001.29E+022.06E+032.87E+04 + 75L1 65.009.27E-022.33E-018.87E+002.41E+022.25E+004.96E+016.57E+027.88E+03 + 75L1 82.005.38E-021.45E-012.63E+006.05E+011.14E+001.88E+012.04E+022.08E+03 + 75L1 95.003.78E-021.08E-011.30E+002.56E+017.46E-011.03E+019.89E+019.03E+02 + 75L1 112.002.55E-027.65E-026.47E-011.01E+014.64E-015.31E+004.45E+013.59E+02 + 75L1 135.001.62E-025.05E-023.20E-013.75E+002.72E-012.54E+001.83E+011.29E+02 + 75L1 160.001.07E-023.40E-021.80E-011.62E+001.68E-011.32E+008.31E+005.13E+01 + 75L1 225.004.70E-031.48E-026.24E-023.61E-016.46E-023.74E-011.81E+008.68E+00 + 75L1 310.002.22E-036.77E-032.44E-021.04E-012.68E-021.21E-014.65E-011.78E+00 + 75L1 400.001.26E-033.69E-031.20E-024.23E-021.35E-025.15E-021.68E-015.43E-01 + 75L1 510.007.47E-042.12E-036.24E-031.89E-027.13E-032.37E-026.69E-021.86E-01 + 75L1 740.003.54E-049.58E-042.45E-036.11E-032.73E-037.70E-031.80E-024.11E-02 + 75L11000.002.03E-045.25E-041.22E-032.65E-031.27E-033.28E-036.81E-031.35E-02 + 75L11500.001.00E-042.44E-045.04E-049.53E-044.67E-041.11E-032.05E-033.53E-03 + 75L2 12.964.69E+002.44E+044.44E+069.51E+072.67E+012.40E+033.70E+041.23E+05 + 75L2 13.664.07E+001.88E+043.29E+068.24E+072.28E+011.97E+033.54E+042.15E+05 + 75L2 14.963.18E+001.20E+041.95E+065.85E+071.73E+011.39E+033.00E+043.10E+05 + 75L2 18.161.86E+004.60E+036.38E+052.30E+079.67E+006.61E+021.72E+042.88E+05 + 75L2 21.961.08E+001.80E+032.13E+058.06E+065.46E+003.19E+028.70E+031.75E+05 + 75L2 26.006.65E-017.88E+028.04E+043.00E+063.29E+001.66E+024.48E+039.46E+04 + 75L2 32.003.60E-012.86E+022.43E+048.49E+051.77E+007.48E+011.90E+033.95E+04 + 75L2 40.001.84E-019.71E+016.74E+032.12E+059.08E-013.17E+017.27E+021.41E+04 + 75L2 52.008.25E-022.76E+011.51E+034.06E+044.17E-011.16E+012.29E+023.93E+03 + 75L2 65.004.13E-029.57E+004.25E+029.88E+032.16E-014.96E+008.46E+011.28E+03 + 75L2 82.002.00E-023.21E+001.16E+022.27E+031.09E-012.06E+002.99E+013.88E+02 + 75L2 95.001.26E-021.62E+005.10E+018.99E+027.10E-021.18E+001.55E+011.82E+02 + 75L2 112.007.51E-037.62E-012.06E+013.21E+024.39E-026.39E-017.41E+007.76E+01 + 75L2 135.004.18E-033.26E-017.44E+001.01E+022.56E-023.19E-013.23E+002.96E+01 + 75L2 160.002.46E-031.52E-012.99E+003.55E+011.57E-021.71E-011.52E+001.24E+01 + 75L2 225.008.55E-043.42E-025.00E-014.59E+005.90E-034.96E-023.46E-012.20E+00 + 75L2 310.003.24E-048.83E-039.90E-027.19E-012.37E-031.59E-028.89E-024.53E-01 + 75L2 400.001.53E-043.12E-032.87E-021.74E-011.16E-036.59E-033.11E-021.34E-01 + 75L2 510.007.67E-051.20E-039.24E-034.78E-025.86E-042.89E-031.17E-024.35E-02 + 75L2 740.002.76E-053.00E-041.79E-037.39E-032.08E-048.50E-042.81E-038.46E-03 + 75L21000.001.26E-051.05E-045.18E-041.82E-039.03E-053.26E-049.35E-042.43E-03 + 75L21500.004.55E-062.80E-051.11E-043.24E-042.94E-059.40E-052.30E-045.08E-04 + 75L3 11.531.04E+015.71E+041.25E+073.20E+084.90E+008.65E+041.16E+081.68E+10 + 75L3 12.238.79E+004.24E+048.79E+062.60E+084.09E+006.46E+047.79E+071.07E+10 + 75L3 13.536.56E+002.55E+044.79E+061.66E+083.00E+003.90E+043.94E+074.94E+09 + 75L3 16.733.52E+008.72E+031.34E+065.39E+071.56E+001.35E+049.44E+069.81E+08 + 75L3 20.531.90E+003.10E+033.92E+051.60E+078.35E-014.88E+032.41E+062.08E+08 + 75L3 26.009.20E-019.44E+029.48E+043.67E+064.06E-011.51E+035.04E+053.52E+07 + 75L3 32.004.80E-013.32E+022.72E+049.62E+052.15E-015.36E+021.29E+057.46E+06 + 75L3 40.002.36E-011.08E+027.12E+032.22E+051.09E-011.77E+023.03E+041.43E+06 + 75L3 52.001.01E-012.91E+011.47E+033.87E+044.90E-024.81E+015.65E+032.11E+05 + 75L3 65.004.86E-029.55E+003.88E+028.66E+032.49E-021.59E+011.38E+034.22E+04 + 75L3 82.002.25E-023.01E+009.68E+011.81E+031.23E-025.05E+003.24E+028.11E+03 + 75L3 95.001.38E-021.45E+004.03E+016.72E+027.93E-032.45E+001.31E+022.89E+03 + 75L3 112.008.01E-036.46E-011.52E+012.22E+024.84E-031.09E+004.80E+019.23E+02 + 75L3 135.004.31E-032.58E-015.04E+006.32E+012.77E-034.37E-011.56E+012.57E+02 + 75L3 160.002.46E-031.13E-011.86E+002.03E+011.67E-031.91E-015.70E+008.19E+01 + 75L3 225.008.09E-042.20E-022.57E-012.12E+006.10E-043.68E-027.85E-018.69E+00 + 75L3 310.002.91E-044.88E-034.16E-022.65E-012.40E-048.00E-031.28E-011.13E+00 + 75L3 400.001.32E-041.53E-031.02E-025.33E-021.16E-042.43E-033.15E-022.35E-01 + 75L3 510.006.42E-055.27E-042.79E-031.22E-025.86E-057.97E-048.53E-035.49E-02 + 75L3 740.002.26E-051.13E-044.30E-041.46E-032.14E-051.55E-041.22E-036.44E-03 + 75L31000.001.03E-053.60E-051.07E-043.03E-049.95E-064.46E-052.70E-041.22E-03 + 75L31500.003.94E-069.14E-062.01E-054.52E-053.85E-061.00E-053.92E-051.45E-04 + 75M1 3.933.67E+001.82E+041.20E+067.58E+072.12E+036.24E+063.41E+094.11E+11 + 75M1 4.932.86E+007.12E+035.18E+052.56E+071.08E+032.06E+067.84E+088.62E+10 + 75M1 6.931.78E+001.67E+031.50E+055.13E+063.91E+023.90E+058.88E+078.01E+09 + 75M1 10.938.33E-012.18E+022.35E+049.32E+051.00E+024.30E+045.17E+063.36E+08 + 75M1 17.933.29E-012.05E+012.40E+031.03E+052.29E+014.09E+032.60E+051.13E+07 + 75M1 27.001.43E-012.56E+003.04E+021.23E+046.77E+006.09E+022.39E+047.35E+05 + 75M1 42.005.49E-022.97E-012.87E+011.01E+031.83E+008.25E+011.99E+034.17E+04 + 75M1 54.003.11E-021.13E-017.30E+002.31E+028.75E-012.73E+015.08E+028.52E+03 + 75M1 72.001.59E-025.03E-021.57E+004.16E+013.77E-017.94E+001.11E+021.45E+03 + 75M1 105.006.48E-032.08E-022.52E-014.60E+001.26E-011.66E+001.62E+011.53E+02 + 75M1 150.002.74E-038.99E-036.04E-026.68E-014.55E-024.03E-012.86E+002.00E+01 + 75M1 280.006.18E-041.94E-037.87E-033.98E-027.98E-034.01E-021.73E-017.39E-01 + 75M1 500.001.72E-044.96E-041.52E-034.86E-031.69E-035.79E-031.69E-024.90E-02 + 75M2 3.688.39E+003.02E+064.95E+099.64E+112.78E+022.25E+053.13E+071.02E+09 + 75M2 4.685.94E+009.14E+051.04E+091.83E+111.36E+027.56E+049.52E+064.81E+08 + 75M2 6.683.15E+001.55E+051.06E+081.53E+104.65E+011.55E+041.60E+069.52E+07 + 75M2 10.681.16E+001.51E+045.50E+065.83E+081.14E+012.02E+031.54E+058.38E+06 + 75M2 17.683.44E-011.26E+032.47E+051.81E+072.52E+002.42E+021.28E+045.43E+05 + 75M2 27.001.12E-011.59E+021.93E+041.02E+067.14E-014.28E+011.63E+035.29E+04 + 75M2 42.003.24E-021.88E+011.42E+035.26E+041.93E-017.31E+001.97E+024.65E+03 + 75M2 54.001.56E-025.65E+003.30E+029.95E+039.20E-022.72E+006.00E+011.17E+03 + 75M2 72.006.60E-031.46E+006.36E+011.51E+033.96E-028.93E-011.56E+012.44E+02 + 75M2 105.002.10E-032.53E-017.66E+001.33E+021.32E-022.12E-012.73E+003.18E+01 + 75M2 150.007.04E-045.05E-021.09E+001.42E+014.71E-035.58E-025.43E-014.80E+00 + 75M2 280.001.06E-043.38E-034.21E-023.36E-017.93E-045.81E-033.55E-021.98E-01 + 75M2 500.001.99E-053.26E-042.58E-031.37E-021.55E-047.85E-043.26E-031.24E-02 + 75M3 3.372.31E+016.82E+061.24E+102.56E+124.84E+011.07E+071.67E+112.78E+14 + 75M3 4.371.45E+011.85E+062.25E+094.05E+112.21E+012.94E+062.77E+103.00E+13 + 75M3 6.376.71E+002.78E+051.93E+082.77E+107.03E+004.47E+052.05E+091.24E+12 + 75M3 10.372.15E+002.40E+048.54E+068.76E+081.60E+003.92E+047.27E+072.16E+10 + 75M3 17.375.59E-011.79E+033.34E+052.34E+073.33E-012.99E+032.21E+063.34E+08 + 75M3 27.001.60E-011.95E+022.18E+041.08E+068.73E-023.31E+021.16E+051.03E+07 + 75M3 42.004.28E-022.14E+011.46E+035.05E+042.29E-023.68E+016.44E+033.52E+05 + 75M3 54.001.96E-026.10E+003.19E+028.92E+031.07E-021.06E+011.28E+035.37E+04 + 75M3 72.007.90E-031.46E+005.63E+011.24E+034.53E-032.55E+002.07E+026.51E+03 + 75M3 105.002.34E-032.27E-015.89E+009.38E+011.46E-033.97E-011.99E+014.39E+02 + 75M3 150.007.37E-043.98E-027.14E-018.39E+005.08E-046.93E-022.32E+003.72E+01 + 75M3 280.001.00E-042.03E-031.94E-021.35E-018.18E-053.42E-036.19E-026.05E-01 + 75M3 500.001.73E-051.49E-048.11E-043.63E-031.58E-052.30E-042.55E-031.70E-02 + 75M4 2.956.24E+012.11E+051.11E+101.33E+141.50E+013.47E+052.79E+091.97E+12 + 75M4 3.952.56E+014.77E+041.43E+091.04E+135.88E+008.06E+043.89E+082.20E+11 + 75M4 5.956.79E+005.93E+038.03E+072.97E+111.54E+001.03E+042.51E+071.01E+10 + 75M4 9.951.15E+004.37E+022.15E+063.60E+092.79E-017.75E+028.43E+052.16E+08 + 75M4 16.951.62E-012.92E+015.07E+043.96E+074.57E-025.29E+012.67E+044.23E+06 + 75M4 27.002.70E-022.71E+001.92E+038.13E+059.05E-035.06E+001.37E+031.41E+05 + 75M4 42.004.62E-032.82E-018.77E+012.14E+041.89E-035.46E-018.51E+015.86E+03 + 75M4 54.001.65E-037.77E-021.53E+012.77E+037.64E-041.54E-011.79E+019.75E+02 + 75M4 72.005.04E-041.77E-022.10E+002.72E+022.68E-043.64E-023.04E+001.28E+02 + 75M4 105.001.05E-042.57E-031.61E-011.35E+016.68E-055.52E-033.06E-019.14E+00 + 75M4 150.002.37E-054.22E-041.48E-028.38E-011.77E-059.36E-043.60E-027.88E-01 + 75M4 280.001.82E-061.93E-052.67E-047.57E-031.69E-064.34E-059.24E-041.21E-02 + 75M4 500.001.82E-071.25E-068.39E-061.23E-041.91E-072.63E-063.45E-052.97E-04 + 75M5 2.889.46E+012.44E+052.11E+102.22E+148.93E+002.78E+041.49E+107.01E+14 + 75M5 3.883.78E+015.30E+042.61E+091.63E+133.43E+006.32E+031.86E+094.91E+13 + 75M5 5.889.66E+006.32E+031.40E+084.38E+118.88E-017.95E+021.02E+081.21E+12 + 75M5 9.881.57E+004.47E+023.61E+064.99E+091.61E-015.99E+012.71E+061.22E+10 + 75M5 16.882.15E-012.88E+018.21E+045.21E+072.66E-024.18E+006.43E+041.10E+08 + 75M5 27.003.43E-022.56E+002.96E+039.95E+055.33E-034.10E-012.42E+031.87E+06 + 75M5 42.005.73E-032.56E-011.30E+022.49E+041.14E-034.69E-021.12E+024.26E+04 + 75M5 54.002.03E-036.86E-022.21E+013.09E+034.71E-041.38E-021.94E+015.10E+03 + 75M5 72.006.09E-041.51E-022.91E+002.89E+021.69E-043.43E-032.63E+004.62E+02 + 75M5 105.001.25E-042.08E-032.07E-011.32E+014.36E-055.66E-041.93E-012.08E+01 + 75M5 150.002.80E-053.22E-041.74E-027.30E-011.21E-051.06E-041.66E-021.17E+00 + 75M5 280.002.22E-061.35E-052.49E-045.08E-031.30E-066.28E-062.42E-048.73E-03 + 75M5 500.002.42E-078.77E-076.05E-066.00E-051.79E-075.38E-075.69E-061.10E-04 + 75N+ 50.002.49E-025.15E+003.36E+021.37E+043.75E-011.81E+019.68E+024.12E+04 + 75N+ 70.009.81E-031.01E+004.48E+011.26E+031.38E-014.01E+001.27E+023.52E+03 + 75N+ 100.003.76E-031.89E-015.69E+001.11E+024.98E-028.76E-011.65E+012.97E+02 + 75N+ 150.001.25E-032.97E-025.71E-017.58E+001.55E-021.65E-011.82E+002.05E+01 + 75N+ 200.005.79E-048.47E-031.18E-011.21E+006.82E-035.29E-024.17E-013.43E+00 + 75N+ 500.006.24E-052.90E-041.47E-036.72E-035.63E-042.07E-036.99E-032.43E-02 + 76K 74.876.61E-018.22E-012.05E-011.28E-021.11E+019.89E+011.61E+025.66E+01 + 76K 75.576.46E-018.42E-012.66E-013.28E-021.08E+019.56E+011.63E+027.26E+01 + 76K 76.876.20E-018.72E-013.81E-019.22E-021.03E+019.00E+011.66E+021.02E+02 + 76K 80.075.60E-019.18E-016.55E-013.49E-019.13E+007.77E+011.65E+021.64E+02 + 76K 83.874.98E-019.35E-019.38E-017.96E-017.98E+006.58E+011.59E+022.20E+02 + 76K 88.004.42E-019.24E-011.18E+001.35E+006.94E+005.54E+011.48E+022.57E+02 + 76K 94.003.74E-018.77E-011.40E+002.11E+005.74E+004.38E+011.30E+022.79E+02 + 76K 102.003.05E-017.90E-011.52E+002.87E+004.54E+003.27E+011.06E+022.70E+02 + 76K 114.002.30E-016.52E-011.48E+003.37E+003.30E+002.20E+017.63E+012.26E+02 + 76K 127.001.74E-015.22E-011.31E+003.35E+002.42E+001.50E+015.40E+011.73E+02 + 76K 144.001.27E-013.92E-011.06E+002.93E+001.69E+009.67E+003.51E+011.18E+02 + 76K 157.001.02E-013.18E-018.88E-012.54E+001.33E+007.15E+002.59E+018.80E+01 + 76K 174.007.83E-022.45E-017.01E-012.05E+009.93E-015.01E+001.79E+016.07E+01 + 76K 197.005.72E-021.78E-015.15E-011.53E+007.02E-013.28E+001.13E+013.79E+01 + 76K 225.004.11E-021.26E-013.64E-011.07E+004.86E-012.09E+006.96E+002.25E+01 + 76K 290.002.21E-026.49E-021.83E-015.22E-012.42E-019.05E-012.74E+008.16E+00 + 76K 375.001.21E-023.40E-029.15E-022.45E-011.21E-013.99E-011.09E+002.92E+00 + 76K 460.007.69E-032.08E-025.37E-021.36E-017.08E-022.13E-015.33E-011.31E+00 + 76K 570.004.88E-031.28E-023.14E-027.42E-024.05E-021.12E-012.59E-015.82E-01 + 76K 800.002.49E-036.32E-031.42E-023.01E-021.70E-024.29E-028.78E-021.73E-01 + 76K 1050.001.50E-033.70E-037.82E-031.53E-028.61E-032.06E-023.88E-026.99E-02 + 76K 1300.001.03E-032.47E-035.00E-039.21E-035.07E-031.18E-022.11E-023.58E-02 + 76K 1550.007.64E-041.79E-033.49E-036.17E-033.29E-037.55E-031.31E-022.12E-02 + 76L1 13.972.05E+004.42E+021.35E+044.74E+042.34E+025.61E+042.55E+062.58E+07 + 76L1 14.671.89E+003.47E+021.28E+048.25E+042.02E+024.45E+041.96E+062.32E+07 + 76L1 15.971.64E+002.27E+021.05E+041.18E+051.57E+022.98E+041.23E+061.76E+07 + 76L1 19.171.20E+008.80E+015.55E+031.08E+059.12E+011.27E+044.58E+057.93E+06 + 76L1 22.978.57E-013.32E+012.54E+036.24E+045.32E+015.50E+031.72E+053.16E+06 + 76L1 26.006.75E-011.67E+011.41E+033.77E+043.68E+013.11E+038.82E+041.62E+06 + 76L1 32.004.44E-015.19E+004.90E+021.42E+041.99E+011.21E+032.90E+045.07E+05 + 76L1 40.002.78E-011.53E+001.48E+024.35E+031.03E+014.48E+028.88E+031.41E+05 + 76L1 52.001.56E-014.75E-013.46E+019.83E+024.75E+001.42E+022.26E+033.10E+04 + 76L1 65.009.42E-022.44E-011.01E+012.65E+022.47E+005.46E+017.18E+028.53E+03 + 76L1 82.005.48E-021.47E-012.98E+006.73E+011.25E+002.07E+012.23E+022.25E+03 + 76L1 95.003.87E-021.09E-011.47E+002.86E+018.19E-011.13E+011.08E+029.78E+02 + 76L1 112.002.61E-027.70E-027.18E-011.13E+015.09E-015.82E+004.85E+013.89E+02 + 76L1 135.001.66E-025.10E-023.49E-014.18E+002.98E-012.79E+001.99E+011.39E+02 + 76L1 160.001.10E-023.45E-021.93E-011.79E+001.84E-011.45E+009.05E+005.57E+01 + 76L1 225.004.86E-031.52E-026.60E-023.93E-017.09E-024.09E-011.97E+009.41E+00 + 76L1 310.002.30E-037.00E-032.58E-021.12E-012.94E-021.32E-015.06E-011.93E+00 + 76L1 400.001.31E-033.84E-031.26E-024.53E-021.48E-025.62E-021.82E-015.89E-01 + 76L1 510.007.78E-042.22E-036.60E-032.03E-027.79E-032.58E-027.27E-022.02E-01 + 76L1 740.003.70E-041.01E-032.60E-036.52E-032.97E-038.38E-031.96E-024.45E-02 + 76L11000.002.12E-045.55E-041.29E-032.83E-031.39E-033.57E-037.38E-031.47E-02 + 76L11500.001.05E-042.58E-045.37E-041.02E-035.06E-041.21E-032.22E-033.82E-03 + 76L2 13.384.41E+002.26E+043.95E+068.12E+072.68E+012.29E+033.38E+041.06E+05 + 76L2 14.083.85E+001.76E+042.95E+067.09E+072.30E+011.89E+033.25E+041.86E+05 + 76L2 15.383.03E+001.13E+041.78E+065.10E+071.76E+011.35E+032.78E+042.71E+05 + 76L2 18.581.80E+004.46E+035.99E+052.08E+079.98E+006.55E+021.63E+042.60E+05 + 76L2 22.381.06E+001.79E+032.05E+057.49E+065.70E+003.21E+028.43E+031.62E+05 + 76L2 26.006.91E-018.57E+028.66E+043.14E+063.64E+001.81E+024.72E+039.57E+04 + 76L2 32.003.75E-013.12E+022.62E+048.96E+051.96E+008.13E+012.01E+034.07E+04 + 76L2 40.001.93E-011.06E+027.29E+032.25E+051.01E+003.45E+017.76E+021.48E+04 + 76L2 52.008.67E-023.01E+011.63E+034.34E+044.63E-011.27E+012.46E+024.15E+03 + 76L2 65.004.35E-021.04E+014.62E+021.06E+042.39E-015.42E+009.12E+011.36E+03 + 76L2 82.002.11E-023.51E+001.26E+022.45E+031.21E-012.25E+003.23E+014.15E+02 + 76L2 95.001.33E-021.77E+005.54E+019.70E+027.89E-021.30E+001.68E+011.95E+02 + 76L2 112.007.97E-038.33E-012.24E+013.47E+024.89E-027.01E-018.04E+008.35E+01 + 76L2 135.004.45E-033.57E-018.12E+001.09E+022.85E-023.51E-013.51E+003.19E+01 + 76L2 160.002.62E-031.67E-013.26E+003.85E+011.74E-021.88E-011.66E+001.34E+01 + 76L2 225.009.17E-043.76E-025.47E-015.00E+006.58E-035.47E-023.79E-012.39E+00 + 76L2 310.003.49E-049.71E-031.09E-017.86E-012.65E-031.76E-029.76E-024.94E-01 + 76L2 400.001.66E-043.44E-033.16E-021.91E-011.29E-037.30E-033.42E-021.47E-01 + 76L2 510.008.30E-051.33E-031.02E-025.25E-026.56E-043.21E-031.30E-024.78E-02 + 76L2 740.002.99E-053.32E-041.98E-038.15E-032.33E-049.46E-043.11E-039.33E-03 + 76L21000.001.36E-051.16E-045.74E-042.01E-031.01E-043.64E-041.04E-032.69E-03 + 76L21500.004.98E-063.10E-051.23E-043.60E-043.30E-051.05E-042.57E-045.64E-04 + 76L3 11.879.82E+005.32E+041.12E+072.78E+084.77E+008.34E+041.08E+081.51E+10 + 76L3 12.578.34E+003.98E+047.97E+062.27E+084.01E+006.27E+047.33E+079.77E+09 + 76L3 13.876.28E+002.42E+044.41E+061.47E+082.96E+003.84E+043.77E+074.60E+09 + 76L3 17.073.41E+008.49E+031.27E+064.92E+071.57E+001.36E+049.32E+069.46E+08 + 76L3 20.871.87E+003.08E+033.79E+051.51E+078.46E-015.01E+032.43E+062.06E+08 + 76L3 26.009.52E-011.02E+031.01E+053.83E+064.32E-011.68E+035.68E+053.94E+07 + 76L3 32.004.98E-013.58E+022.91E+041.01E+062.29E-015.96E+021.45E+058.35E+06 + 76L3 40.002.45E-011.17E+027.60E+032.34E+051.16E-011.97E+023.41E+041.60E+06 + 76L3 52.001.05E-013.13E+011.58E+034.09E+045.22E-025.35E+016.33E+032.35E+05 + 76L3 65.005.07E-021.03E+014.15E+029.17E+032.65E-021.77E+011.54E+034.71E+04 + 76L3 82.002.36E-023.24E+001.04E+021.92E+031.31E-025.62E+003.62E+029.03E+03 + 76L3 95.001.45E-021.57E+004.32E+017.13E+028.44E-032.72E+001.46E+023.22E+03 + 76L3 112.008.40E-036.96E-011.63E+012.36E+025.15E-031.21E+005.36E+011.03E+03 + 76L3 135.004.53E-032.78E-015.40E+006.72E+012.95E-034.85E-011.74E+012.86E+02 + 76L3 160.002.59E-031.22E-011.99E+002.16E+011.78E-032.12E-016.35E+009.09E+01 + 76L3 225.008.53E-042.37E-022.75E-012.26E+006.50E-044.08E-028.73E-019.63E+00 + 76L3 310.003.08E-045.26E-034.47E-022.83E-012.56E-048.84E-031.42E-011.25E+00 + 76L3 400.001.40E-041.65E-031.09E-025.71E-021.23E-042.68E-033.49E-022.60E-01 + 76L3 510.006.81E-055.67E-043.00E-031.31E-026.24E-058.78E-049.44E-036.07E-02 + 76L3 740.002.39E-051.21E-044.61E-041.57E-032.28E-051.69E-041.35E-037.11E-03 + 76L31000.001.09E-053.86E-051.15E-043.25E-041.05E-054.86E-052.98E-041.35E-03 + 76L31500.004.16E-069.74E-062.16E-054.85E-054.07E-061.08E-054.30E-051.59E-04 + 76M1 4.053.47E+001.76E+041.17E+066.55E+072.15E+036.05E+063.20E+093.73E+11 + 76M1 5.052.72E+007.04E+035.11E+052.39E+071.11E+032.05E+067.64E+088.15E+10 + 76M1 7.051.71E+001.70E+031.49E+055.07E+064.10E+024.02E+059.03E+077.95E+09 + 76M1 11.058.16E-012.31E+022.40E+049.28E+051.07E+024.57E+045.45E+063.48E+08 + 76M1 18.053.26E-012.26E+012.52E+031.05E+052.48E+014.42E+032.80E+051.21E+07 + 76M1 27.001.44E-012.98E+003.35E+021.32E+047.47E+006.78E+022.66E+048.15E+05 + 76M1 42.005.57E-023.44E-013.23E+011.11E+032.02E+009.17E+012.21E+034.61E+04 + 76M1 54.003.17E-021.26E-018.31E+002.56E+029.65E-013.03E+015.62E+029.40E+03 + 76M1 72.001.63E-025.29E-021.80E+004.66E+014.16E-018.79E+001.22E+021.59E+03 + 76M1 105.006.65E-032.13E-022.85E-015.19E+001.39E-011.83E+001.78E+011.68E+02 + 76M1 150.002.82E-039.20E-036.63E-027.50E-015.01E-024.45E-013.15E+002.19E+01 + 76M1 280.006.43E-042.01E-038.39E-034.36E-028.78E-034.40E-021.89E-018.08E-01 + 76M1 500.001.79E-045.22E-041.62E-035.24E-031.86E-036.34E-031.85E-025.34E-02 + 76M2 3.797.91E+002.85E+064.51E+098.49E+112.82E+022.19E+052.94E+079.05E+08 + 76M2 4.795.67E+008.89E+059.84E+081.68E+111.40E+027.57E+049.23E+064.45E+08 + 76M2 6.793.06E+001.57E+051.05E+081.48E+104.92E+011.60E+041.61E+069.22E+07 + 76M2 10.791.16E+001.57E+045.65E+065.89E+081.23E+012.13E+031.59E+058.46E+06 + 76M2 17.793.48E-011.33E+032.60E+051.88E+072.75E+002.60E+021.35E+045.64E+05 + 76M2 27.001.16E-011.74E+022.11E+041.10E+067.95E-014.71E+011.78E+035.70E+04 + 76M2 42.003.40E-022.05E+011.55E+035.71E+042.15E-018.05E+002.15E+025.02E+03 + 76M2 54.001.64E-026.19E+003.61E+021.08E+041.02E-013.00E+006.54E+011.27E+03 + 76M2 72.006.98E-031.60E+006.97E+011.65E+034.41E-029.84E-011.70E+012.64E+02 + 76M2 105.002.23E-032.78E-018.40E+001.45E+021.47E-022.34E-012.99E+003.46E+01 + 76M2 150.007.52E-045.56E-021.20E+001.55E+015.27E-036.17E-025.96E-015.24E+00 + 76M2 280.001.15E-043.73E-034.65E-023.70E-018.91E-046.46E-033.91E-022.17E-01 + 76M2 500.002.17E-053.61E-042.85E-031.51E-021.75E-048.75E-043.62E-031.37E-02 + 76M3 3.462.21E+016.47E+061.14E+102.28E+124.77E+011.05E+071.59E+112.57E+14 + 76M3 4.461.40E+011.81E+062.14E+093.76E+112.22E+012.97E+062.75E+102.92E+13 + 76M3 6.466.58E+002.81E+051.92E+082.69E+107.20E+004.67E+052.13E+091.27E+12 + 76M3 10.462.14E+002.49E+048.77E+068.83E+081.66E+004.20E+047.81E+072.32E+10 + 76M3 17.465.67E-011.89E+033.50E+052.41E+073.51E-013.26E+032.42E+063.66E+08 + 76M3 27.001.66E-012.11E+022.35E+041.15E+069.33E-023.71E+021.32E+051.18E+07 + 76M3 42.004.45E-022.32E+011.58E+035.40E+042.45E-024.12E+017.29E+033.98E+05 + 76M3 54.002.05E-026.61E+003.44E+029.54E+031.15E-021.18E+011.45E+036.06E+04 + 76M3 72.008.27E-031.58E+006.07E+011.32E+034.84E-032.85E+002.33E+027.34E+03 + 76M3 105.002.46E-032.46E-016.35E+001.01E+021.57E-034.44E-012.24E+014.93E+02 + 76M3 150.007.77E-044.31E-027.70E-019.00E+005.44E-047.74E-022.60E+004.17E+01 + 76M3 280.001.06E-042.19E-032.09E-021.45E-018.76E-053.81E-036.92E-026.76E-01 + 76M3 500.001.84E-051.61E-048.76E-043.91E-031.69E-052.54E-042.85E-031.89E-02 + 76M4 3.035.95E+011.99E+051.01E+101.19E+141.48E+013.41E+052.65E+091.82E+12 + 76M4 4.032.50E+014.67E+041.37E+099.85E+125.93E+008.20E+043.87E+082.13E+11 + 76M4 6.036.80E+006.02E+038.09E+072.98E+111.59E+001.09E+042.61E+071.03E+10 + 76M4 10.031.18E+004.56E+022.26E+063.78E+092.94E-018.40E+029.09E+052.30E+08 + 76M4 17.031.70E-013.11E+015.44E+044.29E+074.88E-025.83E+012.93E+044.61E+06 + 76M4 27.002.89E-022.97E+002.14E+039.15E+059.87E-035.72E+001.55E+031.60E+05 + 76M4 42.004.97E-033.10E-019.75E+012.41E+042.07E-036.17E-019.64E+016.61E+03 + 76M4 54.001.79E-038.53E-021.70E+013.11E+038.37E-041.74E-012.02E+011.10E+03 + 76M4 72.005.47E-041.95E-022.34E+003.06E+022.94E-044.12E-023.44E+001.44E+02 + 76M4 105.001.14E-042.84E-031.79E-011.52E+017.34E-056.25E-033.46E-011.03E+01 + 76M4 150.002.58E-054.68E-041.65E-029.43E-011.95E-051.06E-034.08E-028.90E-01 + 76M4 280.002.02E-062.15E-052.98E-048.53E-031.87E-064.92E-051.05E-031.37E-02 + 76M4 500.002.03E-071.40E-069.38E-061.39E-042.11E-072.99E-063.92E-053.37E-04 + 76M5 2.969.04E+012.28E+051.95E+102.00E+148.80E+002.68E+041.43E+106.50E+14 + 76M5 3.963.69E+015.13E+042.53E+091.56E+133.45E+006.30E+031.87E+094.84E+13 + 76M5 5.969.68E+006.33E+031.43E+084.42E+119.15E-018.19E+021.07E+081.26E+12 + 76M5 9.961.61E+004.60E+023.82E+065.26E+091.68E-016.34E+012.95E+061.33E+10 + 76M5 16.962.24E-013.02E+018.88E+045.63E+072.83E-024.49E+007.15E+041.24E+08 + 76M5 27.003.66E-022.75E+003.31E+031.12E+065.77E-034.51E-012.79E+032.18E+06 + 76M5 42.006.15E-032.77E-011.46E+022.79E+041.24E-035.15E-021.28E+024.96E+04 + 76M5 54.002.18E-037.42E-022.47E+013.47E+035.11E-041.51E-022.23E+015.92E+03 + 76M5 72.006.58E-041.64E-023.26E+003.23E+021.84E-043.77E-033.02E+005.35E+02 + 76M5 105.001.36E-042.26E-032.31E-011.47E+014.75E-056.21E-042.22E-012.40E+01 + 76M5 150.003.05E-053.50E-041.94E-028.18E-011.32E-051.17E-041.90E-021.35E+00 + 76M5 280.002.38E-061.48E-052.78E-045.69E-031.42E-066.89E-062.76E-041.00E-02 + 76M5 500.002.70E-079.61E-076.72E-066.72E-051.95E-075.91E-076.43E-061.26E-04 + 76N+ 50.002.61E-025.68E+003.70E+021.52E+044.20E-012.05E+011.10E+034.73E+04 + 76N+ 70.001.03E-021.11E+004.95E+011.39E+031.55E-014.53E+001.44E+024.02E+03 + 76N+ 100.003.95E-032.08E-016.28E+001.22E+025.58E-029.85E-011.87E+013.38E+02 + 76N+ 150.001.32E-033.27E-026.32E-018.37E+001.74E-021.85E-012.05E+002.32E+01 + 76N+ 200.006.13E-049.31E-031.31E-011.34E+007.64E-035.93E-024.69E-013.86E+00 + 76N+ 500.006.64E-053.16E-041.63E-037.46E-036.29E-042.31E-037.79E-032.71E-02 + 77K 77.116.23E-017.44E-011.80E-011.07E-021.11E+019.48E+011.49E+025.07E+01 + 77K 77.816.09E-017.61E-012.33E-012.74E-021.08E+019.18E+011.51E+026.47E+01 + 77K 79.115.85E-017.88E-013.31E-017.64E-021.03E+018.66E+011.53E+029.00E+01 + 77K 82.315.30E-018.30E-015.67E-012.88E-019.17E+007.51E+011.54E+021.45E+02 + 77K 86.114.74E-018.48E-018.13E-016.60E-018.05E+006.39E+011.48E+021.95E+02 + 77K 90.004.24E-018.42E-011.01E+001.10E+007.08E+005.46E+011.39E+022.28E+02 + 77K 96.003.61E-018.05E-011.22E+001.76E+005.88E+004.34E+011.23E+022.51E+02 + 77K 104.002.95E-017.30E-011.35E+002.44E+004.67E+003.26E+011.01E+022.47E+02 + 77K 116.002.24E-016.09E-011.33E+002.94E+003.41E+002.22E+017.40E+012.10E+02 + 77K 129.001.71E-014.93E-011.20E+002.98E+002.52E+001.52E+015.28E+011.63E+02 + 77K 146.001.25E-013.74E-019.85E-012.66E+001.77E+009.87E+003.48E+011.13E+02 + 77K 159.001.01E-013.05E-018.32E-012.33E+001.39E+007.34E+002.58E+018.52E+01 + 77K 176.007.79E-022.37E-016.64E-011.91E+001.05E+005.17E+001.80E+015.94E+01 + 77K 199.005.73E-021.74E-014.94E-011.44E+007.42E-013.40E+001.15E+013.75E+01 + 77K 225.004.22E-021.27E-013.61E-011.06E+005.28E-012.25E+007.34E+002.33E+01 + 77K 290.002.28E-026.59E-021.85E-015.23E-012.63E-019.73E-012.90E+008.53E+00 + 77K 375.001.25E-023.48E-029.34E-022.50E-011.32E-014.29E-011.16E+003.07E+00 + 77K 470.007.61E-032.05E-025.23E-021.31E-017.25E-022.14E-015.28E-011.27E+00 + 77K 580.004.89E-031.28E-023.12E-027.33E-024.19E-021.15E-012.61E-015.78E-01 + 77K 810.002.53E-036.43E-031.44E-023.04E-021.78E-024.46E-029.03E-021.76E-01 + 77K 1100.001.44E-033.55E-037.44E-031.43E-028.26E-031.95E-023.63E-026.41E-02 + 77K 1350.001.01E-032.42E-034.87E-038.88E-034.97E-031.15E-022.04E-023.40E-02 + 77K 1600.007.54E-041.77E-033.45E-036.06E-033.27E-037.48E-031.28E-022.06E-02 + 77L1 14.421.92E+004.14E+021.21E+044.00E+042.34E+025.35E+042.34E+062.28E+07 + 77L1 15.121.78E+003.28E+021.15E+046.99E+042.03E+024.28E+041.81E+062.06E+07 + 77L1 16.421.55E+002.18E+029.55E+031.01E+051.59E+022.90E+041.16E+061.58E+07 + 77L1 19.621.14E+008.73E+015.20E+039.56E+049.36E+011.26E+044.41E+057.34E+06 + 77L1 23.428.25E-013.40E+012.44E+035.72E+045.53E+015.56E+031.69E+053.01E+06 + 77L1 27.006.27E-011.56E+011.25E+033.23E+043.62E+012.90E+037.87E+041.40E+06 + 77L1 33.004.19E-015.12E+004.52E+021.26E+042.00E+011.17E+032.69E+044.56E+05 + 77L1 41.002.66E-011.58E+001.43E+024.03E+031.05E+014.43E+028.53E+031.32E+05 + 77L1 53.001.52E-014.98E-013.50E+019.53E+024.94E+001.44E+022.24E+032.99E+04 + 77L1 66.009.24E-022.49E-011.05E+012.66E+022.60E+005.64E+017.26E+028.44E+03 + 77L1 83.005.43E-021.46E-013.19E+006.96E+011.33E+002.16E+012.30E+022.28E+03 + 77L1 96.003.85E-021.08E-011.58E+003.01E+018.73E-011.19E+011.12E+029.99E+02 + 77L1 113.002.61E-027.63E-027.70E-011.21E+015.46E-016.17E+005.07E+014.02E+02 + 77L1 136.001.67E-025.08E-023.71E-014.49E+003.21E-012.97E+002.10E+011.45E+02 + 77L1 165.001.05E-023.26E-021.88E-011.72E+001.85E-011.41E+008.57E+005.12E+01 + 77L1 230.004.76E-031.48E-026.56E-023.92E-017.32E-024.13E-011.95E+009.12E+00 + 77L1 315.002.30E-036.98E-032.60E-021.14E-013.09E-021.37E-015.16E-011.94E+00 + 77L1 400.001.36E-034.00E-031.34E-024.87E-021.62E-026.13E-021.98E-016.38E-01 + 77L1 510.008.13E-042.32E-037.00E-032.17E-028.52E-032.81E-027.89E-022.19E-01 + 77L1 740.003.88E-041.06E-032.76E-036.97E-033.25E-039.12E-032.12E-024.82E-02 + 77L11000.002.22E-045.86E-041.37E-033.03E-031.51E-033.88E-038.01E-031.59E-02 + 77L11500.001.10E-042.73E-045.72E-041.09E-035.48E-041.31E-032.40E-034.13E-03 + 77L2 13.824.16E+002.10E+043.51E+066.93E+072.69E+012.19E+033.09E+049.14E+04 + 77L2 14.523.65E+001.64E+042.65E+066.09E+072.32E+011.81E+032.99E+041.61E+05 + 77L2 15.822.89E+001.07E+041.62E+064.45E+071.79E+011.31E+032.57E+042.37E+05 + 77L2 19.021.74E+004.32E+035.62E+051.87E+071.03E+016.49E+021.54E+042.34E+05 + 77L2 22.821.04E+001.77E+031.97E+056.94E+065.96E+003.23E+028.16E+031.50E+05 + 77L2 27.006.43E-017.76E+027.51E+042.62E+063.60E+001.70E+024.26E+038.36E+04 + 77L2 33.003.57E-012.92E+022.37E+047.83E+051.98E+007.86E+011.87E+033.67E+04 + 77L2 41.001.87E-011.02E+026.84E+032.05E+051.04E+003.42E+017.44E+021.37E+04 + 77L2 53.008.58E-022.99E+011.59E+034.11E+044.85E-011.28E+012.42E+023.99E+03 + 77L2 66.004.37E-021.06E+014.59E+021.03E+042.54E-015.59E+009.18E+011.34E+03 + 77L2 83.002.15E-023.62E+001.27E+022.44E+031.30E-012.35E+003.31E+014.17E+02 + 77L2 96.001.37E-021.85E+005.69E+019.79E+028.51E-021.36E+001.73E+011.98E+02 + 77L2 113.008.23E-038.74E-012.32E+013.54E+025.30E-027.43E-018.39E+008.57E+01 + 77L2 136.004.62E-033.78E-018.50E+001.13E+023.10E-023.75E-013.70E+003.31E+01 + 77L2 165.002.54E-031.59E-013.02E+003.47E+011.78E-021.85E-011.58E+001.24E+01 + 77L2 230.009.17E-043.75E-025.35E-014.79E+006.90E-035.58E-023.77E-012.33E+00 + 77L2 315.003.58E-049.99E-031.10E-017.85E-012.84E-031.84E-021.00E-014.99E-01 + 77L2 400.001.79E-043.79E-033.47E-022.09E-011.45E-038.09E-033.76E-021.60E-01 + 77L2 510.008.99E-051.46E-031.12E-025.77E-027.36E-043.56E-031.43E-025.25E-02 + 77L2 740.003.26E-053.66E-042.18E-038.98E-032.62E-041.05E-033.45E-031.03E-02 + 77L21000.001.49E-051.28E-046.36E-042.23E-031.14E-044.06E-041.15E-032.98E-03 + 77L21500.005.46E-063.43E-051.37E-043.99E-043.71E-051.18E-042.86E-046.27E-04 + 77L3 12.219.28E+004.95E+041.01E+072.41E+084.65E+008.05E+041.00E+081.36E+10 + 77L3 12.917.92E+003.74E+047.22E+061.98E+083.92E+006.10E+046.89E+078.91E+09 + 77L3 14.216.01E+002.30E+044.06E+061.31E+082.92E+003.78E+043.60E+074.28E+09 + 77L3 17.413.31E+008.26E+031.20E+064.49E+071.57E+001.37E+049.19E+069.10E+08 + 77L3 21.211.83E+003.05E+033.67E+051.41E+078.56E-015.13E+032.46E+062.04E+08 + 77L3 27.008.76E-019.05E+028.61E+043.14E+064.09E-011.54E+034.98E+053.32E+07 + 77L3 33.004.68E-013.30E+022.58E+048.66E+052.22E-015.69E+021.33E+057.43E+06 + 77L3 41.002.35E-011.11E+027.00E+032.09E+051.14E-011.93E+023.26E+041.49E+06 + 77L3 53.001.03E-013.07E+011.50E+033.80E+045.24E-025.41E+016.28E+032.29E+05 + 77L3 66.005.02E-021.03E+014.05E+028.75E+032.69E-021.83E+011.57E+034.70E+04 + 77L3 83.002.37E-023.29E+001.03E+021.88E+031.35E-025.88E+003.75E+029.22E+03 + 77L3 96.001.46E-021.60E+004.34E+017.05E+028.71E-032.87E+001.53E+023.32E+03 + 77L3 113.008.54E-037.17E-011.65E+012.36E+025.34E-031.29E+005.66E+011.07E+03 + 77L3 136.004.63E-032.89E-015.54E+006.80E+013.07E-035.20E-011.85E+013.02E+02 + 77L3 165.002.46E-031.13E-011.78E+001.87E+011.73E-032.03E-015.89E+008.21E+01 + 77L3 230.008.36E-042.29E-022.60E-012.09E+006.48E-044.06E-028.55E-019.25E+00 + 77L3 315.003.08E-045.26E-034.38E-022.73E-012.60E-049.07E-031.44E-011.25E+00 + 77L3 400.001.48E-041.77E-031.18E-026.10E-021.31E-042.95E-033.87E-022.87E-01 + 77L3 510.007.19E-056.09E-043.22E-031.40E-026.63E-059.66E-041.04E-026.70E-02 + 77L3 740.002.54E-051.30E-044.95E-041.68E-032.42E-051.85E-041.49E-037.84E-03 + 77L31000.001.15E-054.13E-051.23E-043.49E-041.12E-055.30E-053.28E-041.49E-03 + 77L31500.004.38E-061.04E-052.31E-055.21E-054.31E-061.17E-054.71E-051.75E-04 + 77M1 4.173.26E+001.69E+041.12E+065.62E+072.16E+035.84E+062.97E+093.35E+11 + 77M1 5.172.58E+006.94E+035.00E+052.21E+071.14E+032.04E+067.38E+087.63E+10 + 77M1 7.171.65E+001.73E+031.48E+054.97E+064.29E+024.13E+059.11E+077.83E+09 + 77M1 11.177.97E-012.43E+022.44E+049.21E+051.14E+024.83E+045.71E+063.59E+08 + 77M1 18.173.23E-012.47E+012.64E+031.07E+052.68E+014.77E+033.01E+051.28E+07 + 77M1 27.001.45E-013.45E+003.68E+021.41E+048.25E+007.55E+022.97E+049.03E+05 + 77M1 42.005.65E-024.00E-013.63E+011.21E+032.23E+001.02E+022.45E+035.09E+04 + 77M1 54.003.22E-021.41E-019.42E+002.82E+021.06E+003.36E+016.22E+021.04E+04 + 77M1 72.001.66E-025.63E-022.05E+005.20E+014.59E-019.73E+001.35E+021.75E+03 + 77M1 105.006.82E-032.19E-023.22E-015.83E+001.53E-012.02E+001.96E+011.84E+02 + 77M1 150.002.91E-039.44E-037.31E-028.42E-015.53E-024.90E-013.46E+002.40E+01 + 77M1 280.006.67E-042.09E-038.98E-034.77E-029.67E-034.84E-022.07E-018.82E-01 + 77M1 500.001.88E-045.48E-041.73E-035.66E-032.04E-036.94E-032.02E-025.82E-02 + 77M2 3.917.43E+002.67E+064.07E+097.42E+112.86E+022.12E+052.74E+077.98E+08 + 77M2 4.915.40E+008.60E+059.26E+081.54E+111.45E+027.54E+048.89E+064.09E+08 + 77M2 6.912.97E+001.57E+051.03E+081.42E+105.20E+011.64E+041.61E+068.88E+07 + 77M2 10.911.15E+001.63E+045.79E+065.92E+081.32E+012.25E+031.64E+058.50E+06 + 77M2 17.913.52E-011.41E+032.73E+051.95E+073.00E+002.79E+021.42E+045.83E+05 + 77M2 27.001.21E-011.90E+022.30E+041.20E+068.85E-015.19E+011.94E+036.13E+04 + 77M2 42.003.55E-022.25E+011.70E+036.19E+042.39E-018.86E+002.34E+025.41E+03 + 77M2 54.001.72E-026.79E+003.95E+021.17E+041.14E-013.30E+007.13E+011.37E+03 + 77M2 72.007.37E-031.75E+007.62E+011.79E+034.92E-021.08E+001.86E+012.86E+02 + 77M2 105.002.37E-033.06E-019.20E+001.58E+021.65E-022.58E-013.27E+003.76E+01 + 77M2 150.008.03E-046.11E-021.32E+001.70E+015.90E-036.82E-026.54E-015.72E+00 + 77M2 280.001.24E-044.11E-035.12E-024.06E-011.00E-037.17E-034.31E-022.38E-01 + 77M2 500.002.35E-054.00E-043.16E-031.67E-021.97E-049.76E-044.01E-031.51E-02 + 77M3 3.552.10E+016.11E+061.04E+102.02E+124.70E+011.03E+071.51E+112.37E+14 + 77M3 4.551.35E+011.77E+062.04E+093.47E+112.22E+013.00E+062.71E+102.83E+13 + 77M3 6.556.45E+002.83E+051.90E+082.60E+107.36E+004.86E+052.19E+091.30E+12 + 77M3 10.552.14E+002.57E+048.98E+068.86E+081.73E+004.50E+048.36E+072.47E+10 + 77M3 17.555.74E-011.99E+033.66E+052.48E+073.69E-013.55E+032.65E+064.00E+08 + 77M3 27.001.72E-012.29E+022.54E+041.23E+069.98E-024.15E+021.49E+051.34E+07 + 77M3 42.004.63E-022.51E+011.70E+035.76E+042.62E-024.61E+018.24E+034.50E+05 + 77M3 54.002.14E-027.16E+003.70E+021.02E+041.23E-021.32E+011.63E+036.85E+04 + 77M3 72.008.64E-031.72E+006.53E+011.41E+035.18E-033.19E+002.63E+028.26E+03 + 77M3 105.002.58E-032.67E-016.84E+001.08E+021.68E-034.96E-012.52E+015.54E+02 + 77M3 150.008.17E-044.67E-028.31E-019.64E+005.82E-048.64E-022.91E+004.67E+01 + 77M3 280.001.12E-042.38E-032.26E-021.56E-019.36E-054.24E-037.73E-027.54E-01 + 77M3 500.001.95E-051.74E-049.46E-044.21E-031.81E-052.82E-043.17E-032.10E-02 + 77M4 3.125.67E+011.88E+059.25E+091.06E+141.46E+013.35E+052.51E+091.67E+12 + 77M4 4.122.44E+014.56E+041.31E+099.29E+125.98E+008.32E+043.84E+082.06E+11 + 77M4 6.126.79E+006.09E+038.13E+072.99E+111.64E+001.14E+042.71E+071.05E+10 + 77M4 10.121.21E+004.75E+022.36E+063.97E+093.10E-019.08E+029.77E+052.44E+08 + 77M4 17.121.77E-013.30E+015.83E+044.62E+075.21E-026.42E+013.22E+045.01E+06 + 77M4 27.003.09E-023.24E+002.38E+031.03E+061.07E-026.46E+001.75E+031.80E+05 + 77M4 42.005.35E-033.39E-011.08E+022.70E+042.26E-036.98E-011.09E+027.44E+03 + 77M4 54.001.93E-039.37E-021.89E+013.49E+039.16E-041.97E-012.29E+011.24E+03 + 77M4 72.005.93E-042.15E-022.60E+003.43E+023.22E-044.66E-023.89E+001.62E+02 + 77M4 105.001.25E-043.14E-031.99E-011.71E+018.07E-057.07E-033.92E-011.16E+01 + 77M4 150.002.85E-055.18E-041.83E-021.06E+002.14E-051.20E-034.61E-021.00E+00 + 77M4 280.002.21E-062.39E-053.31E-049.60E-032.06E-065.57E-051.19E-031.55E-02 + 77M4 500.002.25E-071.56E-061.05E-051.57E-042.33E-073.38E-064.46E-053.82E-04 + 77M5 3.048.63E+012.13E+051.80E+101.79E+148.65E+002.58E+041.36E+106.00E+14 + 77M5 4.043.60E+014.96E+042.45E+091.48E+133.47E+006.26E+031.86E+094.74E+13 + 77M5 6.049.67E+006.33E+031.45E+084.44E+119.40E-018.42E+021.12E+081.31E+12 + 77M5 10.041.65E+004.73E+024.02E+065.53E+091.76E-016.68E+013.20E+061.45E+10 + 77M5 17.042.33E-013.16E+019.57E+046.07E+073.00E-024.82E+007.95E+041.39E+08 + 77M5 27.003.90E-022.96E+003.69E+031.25E+066.23E-034.94E-013.20E+032.54E+06 + 77M5 42.006.59E-032.98E-011.63E+023.12E+041.34E-035.64E-021.47E+025.76E+04 + 77M5 54.002.35E-038.01E-022.76E+013.88E+035.55E-041.66E-022.55E+016.87E+03 + 77M5 72.007.09E-041.77E-023.64E+003.62E+022.00E-044.13E-033.46E+006.19E+02 + 77M5 105.001.46E-042.45E-032.58E-011.65E+015.17E-056.81E-042.54E-012.77E+01 + 77M5 150.003.30E-053.81E-042.16E-029.15E-011.43E-051.28E-042.18E-021.55E+00 + 77M5 280.002.64E-061.62E-053.09E-046.37E-031.55E-067.56E-063.15E-041.15E-02 + 77M5 500.003.02E-071.06E-067.47E-067.51E-052.13E-076.48E-077.26E-061.44E-04 + 77N+ 50.002.72E-026.26E+004.08E+021.68E+044.66E-012.29E+011.25E+035.42E+04 + 77N+ 70.001.08E-021.22E+005.45E+011.53E+031.72E-015.06E+001.63E+024.58E+03 + 77N+ 100.004.14E-032.29E-016.92E+001.35E+026.19E-021.10E+002.10E+013.82E+02 + 77N+ 150.001.39E-033.59E-026.97E-019.22E+001.93E-022.05E-012.29E+002.60E+01 + 77N+ 200.006.45E-041.02E-021.45E-011.47E+008.48E-036.58E-025.22E-014.32E+00 + 77N+ 500.007.04E-053.42E-041.79E-038.25E-036.95E-042.55E-038.60E-032.99E-02 + 78K 79.395.87E-016.73E-011.58E-019.04E-031.11E+019.10E+011.39E+024.54E+01 + 78K 80.095.75E-016.88E-012.03E-012.29E-021.08E+018.82E+011.40E+025.77E+01 + 78K 81.395.53E-017.13E-012.88E-016.35E-021.03E+018.34E+011.42E+027.98E+01 + 78K 84.595.02E-017.52E-014.92E-012.39E-019.22E+007.26E+011.43E+021.29E+02 + 78K 88.394.50E-017.69E-017.06E-015.49E-018.12E+006.21E+011.38E+021.73E+02 + 78K 92.004.08E-017.67E-018.72E-018.93E-017.23E+005.39E+011.31E+022.02E+02 + 78K 98.003.48E-017.38E-011.07E+001.46E+006.03E+004.31E+011.16E+022.25E+02 + 78K 106.002.86E-016.75E-011.19E+002.07E+004.81E+003.26E+019.67E+012.25E+02 + 78K 118.002.19E-015.69E-011.20E+002.56E+003.54E+002.23E+017.17E+011.95E+02 + 78K 131.001.68E-014.65E-011.10E+002.65E+002.62E+001.54E+015.18E+011.54E+02 + 78K 148.001.23E-013.56E-019.14E-012.41E+001.85E+001.01E+013.45E+011.08E+02 + 78K 161.009.98E-022.93E-017.80E-012.14E+001.46E+007.53E+002.58E+018.24E+01 + 78K 178.007.76E-022.29E-016.30E-011.78E+001.10E+005.33E+001.80E+015.80E+01 + 78K 201.005.73E-021.69E-014.74E-011.37E+007.84E-013.52E+001.16E+013.71E+01 + 78K 230.004.11E-021.20E-013.39E-019.80E-015.40E-012.24E+007.13E+002.21E+01 + 78K 295.002.25E-026.42E-021.78E-015.00E-012.73E-019.88E-012.89E+008.31E+00 + 78K 380.001.26E-023.46E-029.22E-022.45E-011.38E-014.42E-011.17E+003.06E+00 + 78K 470.007.88E-032.11E-025.39E-021.35E-017.86E-022.30E-015.62E-011.34E+00 + 78K 580.005.07E-031.33E-023.24E-027.59E-024.54E-021.23E-012.78E-016.12E-01 + 78K 810.002.63E-036.71E-031.51E-023.18E-021.93E-024.79E-029.64E-021.87E-01 + 78K 1100.001.50E-033.72E-037.81E-031.50E-028.90E-032.10E-023.88E-026.82E-02 + 78K 1350.001.05E-032.54E-035.12E-039.35E-035.34E-031.23E-022.18E-023.62E-02 + 78K 1600.007.87E-041.86E-033.64E-036.38E-033.51E-038.03E-031.37E-022.20E-02 + 78L1 14.881.80E+003.89E+021.09E+043.37E+042.34E+025.11E+042.15E+062.01E+07 + 78L1 15.581.68E+003.11E+021.03E+045.91E+042.04E+024.12E+041.67E+061.83E+07 + 78L1 16.881.47E+002.09E+028.68E+038.70E+041.61E+022.82E+041.08E+061.42E+07 + 78L1 20.081.09E+008.64E+014.85E+038.46E+049.60E+011.26E+044.24E+056.78E+06 + 78L1 23.887.93E-013.47E+012.34E+035.23E+045.73E+015.63E+031.67E+052.85E+06 + 78L1 27.006.28E-011.79E+011.32E+033.25E+043.98E+013.20E+038.60E+041.48E+06 + 78L1 33.004.21E-015.97E+004.90E+021.30E+042.20E+011.29E+032.94E+044.87E+05 + 78L1 41.002.68E-011.86E+001.57E+024.26E+031.16E+014.89E+029.32E+031.41E+05 + 78L1 53.001.54E-015.64E-013.91E+011.03E+035.43E+001.59E+022.44E+033.23E+04 + 78L1 66.009.39E-022.67E-011.19E+012.91E+022.85E+006.20E+017.93E+029.12E+03 + 78L1 83.005.53E-021.51E-013.61E+007.70E+011.46E+002.38E+012.51E+022.46E+03 + 78L1 96.003.93E-021.10E-011.78E+003.34E+019.60E-011.31E+011.22E+021.08E+03 + 78L1 113.002.67E-027.75E-028.59E-011.34E+016.00E-016.77E+005.53E+014.35E+02 + 78L1 136.001.72E-025.16E-024.08E-015.00E+003.53E-013.26E+002.29E+011.57E+02 + 78L1 165.001.08E-023.32E-022.03E-011.90E+002.04E-011.55E+009.33E+005.55E+01 + 78L1 230.004.92E-031.52E-026.98E-024.28E-018.03E-024.51E-012.12E+009.88E+00 + 78L1 315.002.39E-037.23E-032.76E-021.23E-013.38E-021.49E-015.61E-012.10E+00 + 78L1 400.001.41E-034.17E-031.42E-025.23E-021.78E-026.69E-022.16E-016.91E-01 + 78L1 510.008.46E-042.43E-037.42E-032.32E-029.33E-033.07E-028.57E-022.37E-01 + 78L1 740.004.06E-041.12E-032.94E-037.45E-033.54E-039.92E-032.30E-025.21E-02 + 78L11000.002.33E-046.19E-041.46E-033.24E-031.64E-034.22E-038.68E-031.72E-02 + 78L11500.001.16E-042.89E-046.09E-041.16E-035.95E-041.42E-032.60E-034.47E-03 + 78L2 14.273.92E+001.94E+043.12E+065.93E+072.70E+012.09E+032.83E+047.85E+04 + 78L2 14.973.45E+001.54E+042.38E+065.24E+072.34E+011.74E+032.74E+041.39E+05 + 78L2 16.272.75E+001.02E+041.47E+063.88E+071.82E+011.27E+032.38E+042.07E+05 + 78L2 19.471.69E+004.19E+035.28E+051.68E+071.06E+016.42E+021.46E+042.11E+05 + 78L2 23.271.02E+001.75E+031.90E+056.43E+066.23E+003.25E+027.89E+031.39E+05 + 78L2 27.006.68E-018.44E+028.08E+042.74E+063.99E+001.84E+024.47E+038.41E+04 + 78L2 33.003.72E-013.18E+022.56E+048.25E+052.19E+008.54E+011.98E+033.77E+04 + 78L2 41.001.95E-011.12E+027.38E+032.17E+051.15E+003.72E+017.92E+021.43E+04 + 78L2 53.009.01E-023.26E+011.72E+034.38E+045.39E-011.40E+012.60E+024.20E+03 + 78L2 66.004.60E-021.15E+014.98E+021.11E+042.82E-016.10E+009.88E+011.42E+03 + 78L2 83.002.27E-023.95E+001.38E+022.62E+031.44E-012.57E+003.57E+014.45E+02 + 78L2 96.001.45E-022.02E+006.18E+011.05E+039.46E-021.49E+001.87E+012.12E+02 + 78L2 113.008.73E-039.55E-012.53E+013.82E+025.90E-028.15E-019.10E+009.20E+01 + 78L2 136.004.92E-034.13E-019.26E+001.22E+023.46E-024.11E-014.02E+003.57E+01 + 78L2 165.002.71E-031.74E-013.30E+003.76E+011.98E-022.03E-011.72E+001.34E+01 + 78L2 230.009.82E-044.11E-025.85E-015.21E+007.71E-036.15E-024.12E-012.53E+00 + 78L2 315.003.85E-041.10E-021.21E-018.57E-013.17E-032.04E-021.10E-015.44E-01 + 78L2 400.001.93E-044.17E-033.82E-022.29E-011.62E-038.95E-034.14E-021.76E-01 + 78L2 510.009.74E-051.61E-031.23E-026.33E-028.24E-043.95E-031.58E-025.76E-02 + 78L2 740.003.52E-054.05E-042.41E-039.90E-032.94E-041.17E-033.81E-031.13E-02 + 78L21000.001.62E-051.42E-047.04E-042.46E-031.28E-044.53E-041.28E-033.29E-03 + 78L21500.005.98E-063.80E-051.52E-044.43E-044.17E-051.32E-043.18E-046.96E-04 + 78L3 12.568.78E+004.62E+049.06E+062.09E+084.53E+007.77E+049.35E+071.23E+10 + 78L3 13.267.52E+003.52E+046.55E+061.73E+083.84E+005.93E+046.48E+078.13E+09 + 78L3 14.565.74E+002.19E+043.74E+061.16E+082.88E+003.72E+043.44E+073.97E+09 + 78L3 17.763.21E+008.05E+031.14E+064.09E+071.57E+001.38E+049.06E+068.76E+08 + 78L3 21.561.80E+003.03E+033.55E+051.32E+078.66E-015.26E+032.48E+062.02E+08 + 78L3 27.009.05E-019.74E+029.18E+043.28E+064.35E-011.72E+035.59E+053.71E+07 + 78L3 33.004.84E-013.55E+022.75E+049.06E+052.36E-016.32E+021.50E+058.29E+06 + 78L3 41.002.44E-011.19E+027.47E+032.20E+051.21E-012.15E+023.65E+041.66E+06 + 78L3 53.001.07E-013.30E+011.60E+034.01E+045.57E-026.01E+017.03E+032.55E+05 + 78L3 66.005.23E-021.10E+014.32E+029.25E+032.86E-022.03E+011.75E+035.23E+04 + 78L3 83.002.47E-023.54E+001.10E+021.99E+031.43E-026.53E+004.19E+021.03E+04 + 78L3 96.001.53E-021.72E+004.64E+017.47E+029.26E-033.19E+001.71E+023.69E+03 + 78L3 113.008.94E-037.72E-011.77E+012.50E+025.68E-031.43E+006.31E+011.19E+03 + 78L3 136.004.86E-033.11E-015.92E+007.22E+013.26E-035.77E-012.06E+013.35E+02 + 78L3 165.002.58E-031.22E-011.91E+001.99E+011.84E-032.25E-016.55E+009.09E+01 + 78L3 230.008.79E-042.47E-022.79E-012.22E+006.89E-044.50E-029.49E-011.02E+01 + 78L3 315.003.25E-045.66E-034.70E-022.91E-012.76E-041.00E-021.60E-011.38E+00 + 78L3 400.001.56E-041.91E-031.26E-026.52E-021.39E-043.26E-034.28E-023.17E-01 + 78L3 510.007.59E-056.55E-043.45E-031.50E-027.04E-051.06E-031.15E-027.40E-02 + 78L3 740.002.68E-051.39E-045.31E-041.80E-032.56E-052.03E-041.65E-038.64E-03 + 78L31000.001.22E-054.41E-051.32E-043.74E-041.18E-055.78E-053.61E-041.64E-03 + 78L31500.004.61E-061.10E-052.47E-055.58E-054.55E-061.26E-055.16E-051.93E-04 + 78M1 4.303.08E+001.64E+041.09E+064.89E+072.19E+035.67E+062.79E+093.04E+11 + 78M1 5.302.46E+006.88E+034.92E+052.06E+071.18E+032.04E+067.18E+087.21E+10 + 78M1 7.301.59E+001.76E+031.48E+054.90E+064.50E+024.25E+059.23E+077.74E+09 + 78M1 11.307.79E-012.57E+022.48E+049.18E+051.22E+025.12E+045.99E+063.70E+08 + 78M1 18.303.20E-012.71E+012.76E+031.09E+052.89E+015.16E+033.23E+051.36E+07 + 78M1 27.001.47E-013.99E+004.04E+021.51E+049.10E+008.40E+023.30E+049.99E+05 + 78M1 42.005.73E-024.65E-014.06E+011.32E+032.46E+001.13E+022.72E+035.62E+04 + 78M1 54.003.28E-021.60E-011.06E+013.11E+021.17E+003.72E+016.88E+021.14E+04 + 78M1 72.001.70E-026.07E-022.34E+005.79E+015.06E-011.08E+011.49E+021.93E+03 + 78M1 105.007.00E-032.27E-023.65E-016.56E+001.69E-012.24E+002.16E+012.02E+02 + 78M1 150.002.99E-039.71E-038.08E-029.45E-016.09E-025.40E-013.80E+002.63E+01 + 78M1 280.006.93E-042.17E-039.64E-035.24E-021.06E-025.31E-022.26E-019.63E-01 + 78M1 500.001.97E-045.77E-041.84E-036.11E-032.24E-037.60E-032.21E-026.34E-02 + 78M2 4.036.99E+002.51E+063.70E+096.51E+112.91E+022.06E+052.57E+077.06E+08 + 78M2 5.035.14E+008.35E+058.75E+081.41E+111.50E+027.52E+048.59E+063.76E+08 + 78M2 7.032.88E+001.58E+051.02E+081.36E+105.49E+011.69E+041.61E+068.55E+07 + 78M2 11.031.14E+001.69E+045.93E+065.95E+081.42E+012.38E+031.69E+058.54E+06 + 78M2 18.033.56E-011.50E+032.87E+052.02E+073.28E+002.99E+021.50E+046.02E+05 + 78M2 27.001.25E-012.08E+022.52E+041.29E+069.85E-015.71E+012.11E+036.59E+04 + 78M2 42.003.71E-022.46E+011.85E+036.71E+042.67E-019.75E+002.55E+025.84E+03 + 78M2 54.001.81E-027.43E+004.31E+021.27E+041.27E-013.63E+007.77E+011.48E+03 + 78M2 72.007.77E-031.92E+008.33E+011.94E+035.50E-021.19E+002.03E+013.10E+02 + 78M2 105.002.51E-033.36E-011.01E+011.73E+021.84E-022.84E-013.58E+004.09E+01 + 78M2 150.008.58E-046.72E-021.44E+001.85E+016.60E-037.54E-027.17E-016.23E+00 + 78M2 280.001.33E-044.54E-035.64E-024.46E-011.12E-037.96E-034.76E-022.61E-01 + 78M2 500.002.55E-054.43E-043.50E-031.84E-022.22E-041.09E-034.45E-031.67E-02 + 78M3 3.642.00E+015.80E+069.55E+091.79E+124.63E+011.01E+071.43E+112.19E+14 + 78M3 4.641.30E+011.72E+061.94E+093.21E+112.23E+013.03E+062.68E+102.75E+13 + 78M3 6.646.31E+002.85E+051.88E+082.51E+107.53E+005.06E+052.26E+091.32E+12 + 78M3 10.642.13E+002.66E+049.18E+068.89E+081.80E+004.81E+048.94E+072.63E+10 + 78M3 17.645.80E-012.10E+033.82E+052.55E+073.87E-013.87E+032.90E+064.37E+08 + 78M3 27.001.77E-012.48E+022.74E+041.31E+061.06E-014.64E+021.69E+051.52E+07 + 78M3 42.004.81E-022.72E+011.83E+036.15E+042.80E-025.15E+019.30E+035.09E+05 + 78M3 54.002.22E-027.76E+003.99E+021.09E+041.31E-021.48E+011.84E+037.72E+04 + 78M3 72.009.03E-031.86E+007.03E+011.51E+035.53E-033.56E+002.96E+029.29E+03 + 78M3 105.002.71E-032.89E-017.37E+001.15E+021.79E-035.54E-012.83E+016.21E+02 + 78M3 150.008.60E-045.05E-028.95E-011.03E+016.21E-049.64E-023.27E+005.22E+01 + 78M3 280.001.19E-042.57E-032.43E-021.67E-011.00E-044.72E-038.63E-028.41E-01 + 78M3 500.002.08E-051.88E-041.02E-034.53E-031.93E-053.12E-043.53E-032.34E-02 + 78M4 3.205.41E+011.77E+058.45E+099.43E+131.44E+013.29E+052.38E+091.53E+12 + 78M4 4.202.37E+014.46E+041.26E+098.77E+126.02E+008.45E+043.80E+081.99E+11 + 78M4 6.206.78E+006.16E+038.16E+072.99E+111.69E+001.20E+042.81E+071.06E+10 + 78M4 10.201.23E+004.95E+022.46E+064.16E+093.25E-019.81E+021.05E+062.58E+08 + 78M4 17.201.84E-013.50E+016.24E+044.98E+075.55E-027.06E+013.53E+045.43E+06 + 78M4 27.003.30E-023.54E+002.63E+031.15E+061.17E-027.29E+001.98E+032.02E+05 + 78M4 42.005.74E-033.71E-011.20E+023.03E+042.46E-037.88E-011.23E+028.37E+03 + 78M4 54.002.08E-031.03E-012.10E+013.91E+031.00E-032.23E-012.58E+011.39E+03 + 78M4 72.006.41E-042.36E-022.89E+003.85E+023.53E-045.26E-024.39E+001.82E+02 + 78M4 105.001.35E-043.46E-032.21E-011.92E+018.85E-057.99E-034.42E-011.31E+01 + 78M4 150.003.09E-055.73E-042.04E-021.19E+002.36E-051.36E-035.21E-021.13E+00 + 78M4 280.002.42E-062.65E-053.69E-041.08E-022.28E-066.30E-051.35E-031.75E-02 + 78M4 500.002.45E-071.73E-061.17E-051.76E-042.58E-073.83E-065.06E-054.33E-04 + 78M5 3.128.23E+011.99E+051.66E+101.60E+148.50E+002.47E+041.29E+105.53E+14 + 78M5 4.123.50E+014.78E+042.36E+091.40E+133.49E+006.20E+031.86E+094.63E+13 + 78M5 6.129.65E+006.32E+031.46E+084.45E+119.65E-018.63E+021.17E+081.36E+12 + 78M5 10.121.69E+004.86E+024.22E+065.79E+091.85E-017.03E+013.47E+061.58E+10 + 78M5 17.122.43E-013.31E+011.03E+056.53E+073.18E-025.15E+008.81E+041.55E+08 + 78M5 27.004.16E-023.17E+004.11E+031.40E+066.73E-035.41E-013.66E+032.95E+06 + 78M5 42.007.05E-033.21E-011.81E+023.49E+041.45E-036.18E-021.68E+026.67E+04 + 78M5 54.002.52E-038.64E-023.07E+014.33E+036.01E-041.81E-022.93E+017.95E+03 + 78M5 72.007.65E-041.91E-024.05E+004.04E+022.17E-044.52E-033.96E+007.15E+02 + 78M5 105.001.59E-042.65E-032.88E-011.84E+015.62E-057.45E-042.90E-013.19E+01 + 78M5 150.003.60E-054.14E-042.41E-021.02E+001.56E-051.40E-042.49E-021.78E+00 + 78M5 280.002.86E-061.77E-053.44E-047.11E-031.69E-068.27E-063.58E-041.32E-02 + 78M5 500.003.23E-071.16E-068.28E-068.39E-052.33E-077.09E-078.20E-061.65E-04 + 78N+ 50.002.84E-026.89E+004.48E+021.85E+045.21E-012.58E+011.42E+036.19E+04 + 78N+ 70.001.13E-021.34E+005.99E+011.69E+031.93E-015.68E+001.84E+025.21E+03 + 78N+ 100.004.33E-032.52E-017.61E+001.48E+026.92E-021.23E+002.36E+014.31E+02 + 78N+ 150.001.46E-033.94E-027.68E-011.01E+012.15E-022.30E-012.57E+002.93E+01 + 78N+ 200.006.80E-041.12E-021.59E-011.62E+009.47E-037.35E-025.84E-014.83E+00 + 78N+ 500.007.47E-053.72E-041.98E-039.13E-037.75E-042.84E-039.57E-033.33E-02 + 79K 81.725.54E-016.10E-011.40E-017.68E-031.11E+018.74E+011.29E+024.08E+01 + 79K 82.425.43E-016.23E-011.78E-011.93E-021.08E+018.48E+011.30E+025.15E+01 + 79K 83.725.23E-016.45E-012.52E-015.31E-021.03E+018.03E+011.32E+027.09E+01 + 79K 86.924.76E-016.81E-014.27E-011.99E-019.28E+007.03E+011.33E+021.14E+02 + 79K 90.724.28E-016.99E-016.15E-014.59E-018.19E+006.04E+011.29E+021.54E+02 + 79K 95.003.82E-016.97E-017.85E-018.06E-017.17E+005.13E+011.21E+021.84E+02 + 79K 101.003.28E-016.71E-019.52E-011.29E+006.01E+004.13E+011.08E+022.04E+02 + 79K 109.002.72E-016.17E-011.06E+001.82E+004.83E+003.16E+019.05E+012.04E+02 + 79K 121.002.09E-015.24E-011.08E+002.25E+003.58E+002.18E+016.78E+011.78E+02 + 79K 134.001.62E-014.32E-019.96E-012.35E+002.68E+001.53E+014.95E+011.43E+02 + 79K 151.001.20E-013.34E-018.40E-012.18E+001.91E+001.01E+013.34E+011.02E+02 + 79K 164.009.74E-022.77E-017.23E-011.95E+001.51E+007.57E+002.51E+017.81E+01 + 79K 181.007.62E-022.19E-015.90E-011.65E+001.14E+005.40E+001.78E+015.56E+01 + 79K 204.005.66E-021.63E-014.50E-011.28E+008.19E-013.59E+001.16E+013.60E+01 + 79K 230.004.22E-021.21E-013.37E-019.64E-015.87E-012.40E+007.51E+002.29E+01 + 79K 295.002.32E-026.52E-021.80E-015.02E-012.97E-011.06E+003.06E+008.67E+00 + 79K 380.001.30E-023.54E-029.42E-022.49E-011.50E-014.75E-011.24E+003.21E+00 + 79K 470.008.15E-032.18E-025.55E-021.39E-018.52E-022.48E-015.97E-011.42E+00 + 79K 580.005.26E-031.38E-023.36E-027.86E-024.92E-021.33E-012.96E-016.47E-01 + 79K 810.002.74E-037.00E-031.57E-023.32E-022.08E-025.15E-021.03E-011.98E-01 + 79K 1100.001.56E-033.90E-038.20E-031.58E-029.60E-032.26E-024.15E-027.26E-02 + 79K 1350.001.09E-032.66E-035.39E-039.84E-035.75E-031.33E-022.33E-023.86E-02 + 79K 1600.008.21E-041.95E-033.83E-036.73E-033.77E-038.62E-031.47E-022.34E-02 + 79L1 15.351.69E+003.65E+029.76E+032.86E+042.35E+024.89E+041.97E+061.78E+07 + 79L1 16.051.58E+002.95E+029.32E+035.03E+042.06E+023.97E+041.55E+061.62E+07 + 79L1 17.351.39E+002.01E+027.90E+037.47E+041.63E+022.75E+041.02E+061.27E+07 + 79L1 20.551.04E+008.56E+014.54E+037.50E+049.85E+011.25E+044.08E+056.27E+06 + 79L1 24.357.63E-013.54E+012.25E+034.78E+045.95E+015.69E+031.64E+052.70E+06 + 79L1 28.005.85E-011.68E+011.18E+032.81E+043.93E+013.00E+037.73E+041.29E+06 + 79L1 34.003.98E-015.89E+004.54E+021.16E+042.21E+011.25E+032.74E+044.39E+05 + 79L1 42.002.57E-011.92E+001.52E+023.95E+031.18E+014.85E+028.97E+031.32E+05 + 79L1 54.001.49E-015.96E-013.95E+019.95E+025.65E+001.61E+022.42E+033.12E+04 + 79L1 67.009.21E-022.77E-011.24E+012.91E+023.00E+006.41E+018.02E+029.03E+03 + 79L1 84.005.48E-021.53E-013.85E+007.93E+011.55E+002.48E+012.58E+022.49E+03 + 79L1 97.003.91E-021.10E-011.91E+003.50E+011.02E+001.38E+011.27E+021.10E+03 + 79L1 114.002.67E-027.76E-029.24E-011.43E+016.43E-017.17E+005.78E+014.48E+02 + 79L1 137.001.73E-025.17E-024.37E-015.36E+003.80E-013.47E+002.41E+011.63E+02 + 79L1 165.001.11E-023.39E-022.21E-012.11E+002.24E-011.69E+001.02E+016.01E+01 + 79L1 230.005.09E-031.56E-027.46E-024.68E-018.82E-024.94E-012.30E+001.07E+01 + 79L1 315.002.48E-037.50E-032.93E-021.33E-013.71E-021.63E-016.10E-012.28E+00 + 79L1 400.001.47E-034.35E-031.50E-025.63E-021.95E-027.30E-022.34E-017.48E-01 + 79L1 510.008.81E-042.55E-037.88E-032.49E-021.02E-023.34E-029.31E-022.56E-01 + 79L1 740.004.25E-041.18E-033.12E-037.97E-033.87E-031.08E-022.50E-025.64E-02 + 79L11000.002.44E-046.55E-041.56E-033.46E-031.79E-034.58E-039.41E-031.86E-02 + 79L11500.001.21E-043.06E-046.49E-041.24E-036.46E-041.55E-032.82E-034.83E-03 + 79L2 14.733.69E+001.81E+042.78E+065.08E+072.72E+011.99E+032.59E+046.78E+04 + 79L2 15.433.27E+001.44E+042.13E+064.51E+072.37E+011.68E+032.52E+041.20E+05 + 79L2 16.732.63E+009.62E+031.34E+063.39E+071.85E+011.23E+032.21E+041.81E+05 + 79L2 19.931.63E+004.06E+034.95E+051.51E+071.10E+016.35E+021.38E+041.90E+05 + 79L2 23.731.00E+001.73E+031.82E+055.95E+066.51E+003.27E+027.62E+031.29E+05 + 79L2 28.006.24E-017.70E+027.05E+042.31E+063.97E+001.74E+024.07E+037.40E+04 + 79L2 34.003.55E-013.00E+022.32E+047.24E+052.23E+008.28E+011.85E+033.40E+04 + 79L2 42.001.90E-011.08E+026.95E+031.99E+051.19E+003.70E+017.61E+021.33E+04 + 79L2 54.008.92E-023.25E+011.67E+034.16E+045.66E-011.42E+012.56E+024.04E+03 + 79L2 67.004.62E-021.17E+014.95E+021.08E+043.00E-016.29E+009.94E+011.39E+03 + 79L2 84.002.31E-024.08E+001.40E+022.61E+031.55E-012.69E+003.66E+014.46E+02 + 79L2 97.001.48E-022.10E+006.34E+011.06E+031.02E-011.57E+001.93E+012.15E+02 + 79L2 114.009.01E-031.00E+002.62E+013.91E+026.40E-028.64E-019.48E+009.44E+01 + 79L2 137.005.11E-034.37E-019.70E+001.26E+023.77E-024.39E-014.23E+003.71E+01 + 79L2 165.002.88E-031.91E-013.60E+004.08E+012.21E-022.23E-011.88E+001.44E+01 + 79L2 230.001.05E-034.51E-026.40E-015.67E+008.61E-036.78E-024.50E-012.74E+00 + 79L2 315.004.14E-041.21E-021.33E-019.35E-013.55E-032.25E-021.20E-015.93E-01 + 79L2 400.002.08E-044.58E-034.19E-022.51E-011.82E-039.91E-034.55E-021.92E-01 + 79L2 510.001.05E-041.78E-031.36E-026.95E-029.24E-044.39E-031.74E-026.32E-02 + 79L2 740.003.85E-054.47E-042.66E-031.09E-023.30E-041.30E-034.22E-031.25E-02 + 79L21000.001.76E-051.57E-047.80E-042.72E-031.44E-045.05E-041.42E-033.64E-03 + 79L21500.006.53E-064.21E-051.69E-044.91E-044.69E-051.47E-043.55E-047.73E-04 + 79L3 12.928.31E+004.32E+048.15E+061.82E+084.42E+007.51E+048.72E+071.11E+10 + 79L3 13.627.15E+003.31E+045.95E+061.52E+083.76E+005.78E+046.11E+077.43E+09 + 79L3 14.925.50E+002.09E+043.44E+061.03E+082.84E+003.66E+043.30E+073.70E+09 + 79L3 18.123.11E+007.83E+031.07E+063.74E+071.57E+001.39E+048.92E+068.42E+08 + 79L3 21.921.76E+003.00E+033.42E+051.23E+078.75E-015.38E+032.50E+061.99E+08 + 79L3 28.008.35E-018.73E+027.87E+042.71E+064.13E-011.59E+034.94E+053.15E+07 + 79L3 34.004.56E-013.29E+022.45E+047.81E+052.28E-016.05E+021.38E+057.41E+06 + 79L3 42.002.34E-011.14E+026.90E+031.97E+051.20E-012.12E+023.50E+041.55E+06 + 79L3 54.001.04E-013.24E+011.53E+033.73E+045.59E-026.08E+016.98E+032.48E+05 + 79L3 67.005.19E-021.10E+014.22E+028.83E+032.91E-022.09E+011.78E+035.23E+04 + 79L3 84.002.48E-023.59E+001.10E+021.94E+031.47E-026.83E+004.33E+021.05E+04 + 79L3 97.001.54E-021.76E+004.66E+017.38E+029.53E-033.36E+001.78E+023.81E+03 + 79L3 114.009.08E-037.95E-011.79E+012.50E+025.87E-031.52E+006.65E+011.24E+03 + 79L3 137.004.96E-033.23E-016.07E+007.29E+013.39E-036.17E-012.20E+013.53E+02 + 79L3 165.002.70E-031.31E-012.04E+002.11E+011.95E-032.49E-017.27E+001.01E+02 + 79L3 230.009.23E-042.66E-022.99E-012.36E+007.33E-044.98E-021.05E+001.13E+01 + 79L3 315.003.42E-046.08E-035.04E-023.11E-012.93E-041.11E-021.77E-011.53E+00 + 79L3 400.001.65E-042.05E-031.35E-026.96E-021.48E-043.59E-034.74E-023.50E-01 + 79L3 510.008.02E-057.03E-043.70E-031.60E-027.47E-051.17E-031.28E-028.16E-02 + 79L3 740.002.82E-051.49E-045.69E-041.93E-032.72E-052.22E-041.81E-039.52E-03 + 79L31000.001.28E-054.72E-051.41E-044.01E-041.25E-056.29E-053.97E-041.80E-03 + 79L31500.004.86E-061.17E-052.64E-055.98E-054.80E-061.37E-055.65E-052.12E-04 + 79M1 4.422.91E+001.59E+041.05E+064.25E+072.22E+035.50E+062.61E+092.74E+11 + 79M1 5.422.33E+006.80E+034.83E+051.91E+071.21E+032.02E+066.94E+086.76E+10 + 79M1 7.421.53E+001.79E+031.47E+054.81E+064.72E+024.36E+059.30E+077.62E+09 + 79M1 11.427.61E-012.70E+022.53E+049.14E+051.30E+025.42E+046.27E+063.80E+08 + 79M1 18.423.17E-012.95E+012.89E+031.12E+053.13E+015.56E+033.46E+051.44E+07 + 79M1 27.001.48E-014.60E+004.43E+021.62E+041.00E+019.35E+023.67E+041.11E+06 + 79M1 42.005.81E-025.40E-014.53E+011.44E+032.72E+001.25E+023.02E+036.20E+04 + 79M1 54.003.33E-021.82E-011.20E+013.42E+021.30E+004.12E+017.61E+021.26E+04 + 79M1 72.001.73E-026.60E-022.66E+006.43E+015.58E-011.19E+011.65E+022.12E+03 + 79M1 105.007.17E-032.37E-024.13E-017.35E+001.87E-012.47E+002.38E+012.22E+02 + 79M1 150.003.08E-031.00E-028.96E-021.06E+006.72E-025.95E-014.17E+002.88E+01 + 79M1 280.007.18E-042.26E-031.04E-025.76E-021.17E-025.83E-022.48E-011.05E+00 + 79M1 500.002.05E-046.07E-041.97E-036.62E-032.46E-038.33E-032.41E-026.91E-02 + 79M2 4.156.59E+002.37E+063.36E+095.71E+112.96E+022.00E+052.40E+076.27E+08 + 79M2 5.154.89E+008.09E+058.24E+081.29E+111.55E+027.49E+048.27E+063.46E+08 + 79M2 7.152.79E+001.58E+059.99E+071.31E+105.80E+011.73E+041.60E+068.22E+07 + 79M2 11.151.13E+001.75E+046.06E+065.96E+081.53E+012.50E+031.75E+058.56E+06 + 79M2 18.153.60E-011.58E+033.01E+052.08E+073.57E+003.20E+021.58E+046.22E+05 + 79M2 27.001.30E-012.27E+022.75E+041.40E+061.10E+006.28E+012.29E+037.08E+04 + 79M2 42.003.87E-022.69E+012.02E+037.27E+042.97E-011.07E+012.77E+026.29E+03 + 79M2 54.001.89E-028.14E+004.71E+021.38E+041.42E-014.00E+008.47E+011.60E+03 + 79M2 72.008.18E-032.10E+009.10E+012.11E+036.14E-021.31E+002.21E+013.36E+02 + 79M2 105.002.66E-033.68E-011.10E+011.88E+022.06E-023.14E-013.91E+004.44E+01 + 79M2 150.009.14E-047.39E-021.58E+002.02E+017.39E-038.33E-027.86E-016.79E+00 + 79M2 280.001.43E-045.01E-036.21E-024.89E-011.26E-038.83E-035.24E-022.87E-01 + 79M2 500.002.77E-054.90E-043.87E-032.03E-022.49E-041.21E-034.93E-031.84E-02 + 79M3 3.741.91E+015.50E+068.75E+091.59E+124.57E+019.94E+061.36E+112.02E+14 + 79M3 4.741.26E+011.68E+061.84E+092.96E+112.23E+013.05E+062.64E+102.65E+13 + 79M3 6.746.18E+002.86E+051.86E+082.42E+107.68E+005.26E+052.33E+091.35E+12 + 79M3 10.742.12E+002.75E+049.37E+068.90E+081.87E+005.14E+049.54E+072.80E+10 + 79M3 17.745.87E-012.21E+033.98E+052.61E+074.06E-014.20E+033.17E+064.76E+08 + 79M3 27.001.83E-012.68E+022.95E+041.40E+061.14E-015.19E+021.91E+051.72E+07 + 79M3 42.004.99E-022.94E+011.97E+036.55E+042.99E-025.76E+011.05E+045.75E+05 + 79M3 54.002.31E-028.39E+004.29E+021.16E+041.40E-021.65E+012.07E+038.70E+04 + 79M3 72.009.43E-032.01E+007.57E+011.61E+035.90E-033.98E+003.33E+021.04E+04 + 79M3 105.002.84E-033.13E-017.93E+001.23E+021.91E-036.18E-013.18E+016.96E+02 + 79M3 150.009.06E-045.47E-029.63E-011.10E+016.64E-041.07E-013.66E+005.84E+01 + 79M3 280.001.25E-042.78E-032.62E-021.80E-011.07E-045.25E-039.63E-029.37E-01 + 79M3 500.002.20E-052.03E-041.10E-034.87E-032.06E-053.46E-043.92E-032.60E-02 + 79M4 3.295.16E+011.68E+057.72E+098.39E+131.42E+013.23E+052.25E+091.41E+12 + 79M4 4.292.31E+014.35E+041.20E+098.24E+126.05E+008.56E+043.76E+081.91E+11 + 79M4 6.296.76E+006.23E+038.16E+072.97E+111.74E+001.26E+042.90E+071.08E+10 + 79M4 10.291.26E+005.14E+022.56E+064.34E+093.41E-011.06E+031.12E+062.72E+08 + 79M4 17.291.92E-013.71E+016.66E+045.35E+075.91E-027.76E+013.86E+045.88E+06 + 79M4 27.003.52E-023.86E+002.92E+031.29E+061.27E-028.22E+002.24E+032.27E+05 + 79M4 42.006.17E-034.06E-011.33E+023.39E+042.68E-038.89E-011.39E+029.40E+03 + 79M4 54.002.24E-031.13E-012.33E+014.38E+031.09E-032.51E-012.91E+011.57E+03 + 79M4 72.006.91E-042.60E-023.20E+004.31E+023.85E-045.94E-024.95E+002.05E+02 + 79M4 105.001.46E-043.81E-032.45E-012.15E+019.69E-059.02E-034.99E-011.47E+01 + 79M4 150.003.35E-056.33E-042.26E-021.33E+002.59E-051.53E-035.89E-021.27E+00 + 79M4 280.002.62E-062.94E-054.10E-041.21E-022.51E-067.13E-051.52E-031.98E-02 + 79M4 500.002.66E-071.93E-061.30E-051.98E-042.84E-074.33E-065.73E-054.90E-04 + 79M5 3.217.86E+011.86E+051.53E+101.43E+148.37E+002.38E+041.23E+105.11E+14 + 79M5 4.213.41E+014.61E+042.28E+091.32E+133.50E+006.14E+031.85E+094.51E+13 + 79M5 6.219.63E+006.30E+031.48E+084.44E+119.89E-018.83E+021.22E+081.41E+12 + 79M5 10.211.72E+004.97E+024.43E+066.05E+091.93E-017.39E+013.75E+061.71E+10 + 79M5 17.212.52E-013.45E+011.11E+057.01E+073.36E-025.50E+009.74E+041.73E+08 + 79M5 27.004.42E-023.40E+004.58E+031.56E+067.25E-035.92E-014.19E+033.42E+06 + 79M5 42.007.54E-033.45E-012.02E+023.89E+041.57E-036.75E-021.93E+027.73E+04 + 79M5 54.002.70E-039.31E-023.42E+014.84E+036.50E-041.98E-023.35E+019.19E+03 + 79M5 72.008.22E-042.07E-024.52E+004.51E+022.35E-044.93E-034.53E+008.25E+02 + 79M5 105.001.71E-042.87E-033.21E-012.05E+016.10E-058.14E-043.32E-013.68E+01 + 79M5 150.003.91E-054.50E-042.69E-021.14E+001.70E-051.53E-042.84E-022.05E+00 + 79M5 280.003.16E-061.92E-053.83E-047.94E-031.84E-069.04E-064.07E-041.51E-02 + 79M5 500.003.39E-071.27E-069.16E-069.35E-052.53E-077.75E-079.24E-061.88E-04 + 79N+ 50.002.97E-027.65E+004.97E+022.06E+045.79E-012.89E+011.63E+037.14E+04 + 79N+ 70.001.18E-021.49E+006.66E+011.87E+032.14E-016.36E+002.09E+025.97E+03 + 79N+ 100.004.54E-032.80E-018.45E+001.64E+027.68E-021.37E+002.67E+014.91E+02 + 79N+ 150.001.53E-034.36E-028.54E-011.12E+012.39E-022.56E-012.89E+003.31E+01 + 79N+ 200.007.15E-041.24E-021.78E-011.80E+001.05E-028.16E-026.53E-015.44E+00 + 79N+ 500.007.93E-054.06E-042.19E-031.02E-028.58E-043.14E-031.06E-023.69E-02 + 80K 84.105.23E-015.53E-011.24E-016.59E-031.11E+018.41E+011.19E+023.68E+01 + 80K 84.805.13E-015.65E-011.57E-011.64E-021.08E+018.16E+011.21E+024.61E+01 + 80K 86.104.94E-015.85E-012.20E-014.47E-021.04E+017.74E+011.23E+026.32E+01 + 80K 89.304.52E-016.18E-013.73E-011.67E-019.34E+006.80E+011.23E+021.01E+02 + 80K 93.104.08E-016.35E-015.37E-013.85E-018.27E+005.87E+011.20E+021.37E+02 + 80K 97.003.68E-016.36E-016.76E-016.53E-017.35E+005.08E+011.14E+021.63E+02 + 80K 103.003.18E-016.17E-018.32E-011.08E+006.18E+004.11E+011.03E+021.83E+02 + 80K 111.002.64E-015.71E-019.44E-011.55E+004.99E+003.16E+018.69E+011.86E+02 + 80K 123.002.04E-014.90E-019.75E-011.97E+003.72E+002.20E+016.58E+011.66E+02 + 80K 136.001.59E-014.08E-019.12E-012.10E+002.79E+001.55E+014.86E+011.34E+02 + 80K 153.001.18E-013.19E-017.82E-011.98E+002.00E+001.03E+013.31E+019.75E+01 + 80K 166.009.66E-022.66E-016.79E-011.80E+001.59E+007.78E+002.51E+017.55E+01 + 80K 183.007.58E-022.12E-015.61E-011.54E+001.21E+005.57E+001.79E+015.43E+01 + 80K 206.005.66E-021.59E-014.33E-011.22E+008.66E-013.73E+001.17E+013.56E+01 + 80K 235.004.11E-021.15E-013.18E-018.99E-016.01E-012.40E+007.32E+002.17E+01 + 80K 300.002.30E-026.36E-021.74E-014.81E-013.08E-011.08E+003.04E+008.45E+00 + 80K 385.001.30E-023.52E-029.32E-022.45E-011.57E-014.90E-011.26E+003.20E+00 + 80K 470.008.44E-032.24E-025.72E-021.43E-019.24E-022.66E-016.35E-011.49E+00 + 80K 580.005.45E-031.43E-023.48E-028.14E-025.33E-021.43E-013.16E-016.83E-01 + 80K 810.002.84E-037.30E-031.65E-023.47E-022.25E-025.53E-021.10E-012.11E-01 + 80K 1100.001.63E-034.08E-038.61E-031.66E-021.03E-022.42E-024.43E-027.72E-02 + 80K 1350.001.14E-032.80E-035.67E-031.04E-026.19E-031.42E-022.49E-024.11E-02 + 80K 1600.008.56E-042.05E-034.04E-037.09E-034.04E-039.26E-031.57E-022.50E-02 + 80L1 15.841.59E+003.44E+028.79E+032.44E+042.35E+024.67E+041.81E+061.58E+07 + 80L1 16.541.49E+002.79E+028.42E+034.29E+042.07E+023.82E+041.44E+061.44E+07 + 80L1 17.841.31E+001.93E+027.21E+036.44E+041.65E+022.67E+049.54E+051.15E+07 + 80L1 21.049.90E-018.46E+014.24E+036.66E+041.01E+021.24E+043.92E+055.78E+06 + 80L1 24.847.34E-013.60E+012.15E+034.37E+046.17E+015.74E+031.60E+052.56E+06 + 80L1 28.005.85E-011.92E+011.25E+032.81E+044.32E+013.31E+038.44E+041.36E+06 + 80L1 34.004.00E-016.82E+004.89E+021.20E+042.43E+011.37E+032.99E+044.68E+05 + 80L1 42.002.59E-012.24E+001.66E+024.16E+031.30E+015.35E+029.80E+031.42E+05 + 80L1 54.001.51E-016.82E-014.39E+011.07E+036.21E+001.78E+022.64E+033.36E+04 + 80L1 67.009.34E-023.04E-011.39E+013.17E+023.30E+007.05E+018.75E+029.75E+03 + 80L1 84.005.57E-021.61E-014.35E+008.73E+011.71E+002.73E+012.81E+022.69E+03 + 80L1 97.003.99E-021.14E-012.16E+003.87E+011.13E+001.51E+011.38E+021.19E+03 + 80L1 114.002.73E-027.97E-021.03E+001.58E+017.06E-017.86E+006.30E+014.85E+02 + 80L1 137.001.77E-025.29E-024.82E-015.95E+004.17E-013.80E+002.63E+011.77E+02 + 80L1 165.001.14E-023.48E-022.41E-012.33E+002.46E-011.86E+001.11E+016.51E+01 + 80L1 230.005.24E-031.61E-028.00E-025.13E-019.68E-025.40E-012.51E+001.16E+01 + 80L1 315.002.57E-037.78E-033.12E-021.45E-014.07E-021.78E-016.63E-012.46E+00 + 80L1 400.001.52E-034.54E-031.60E-026.06E-022.13E-027.96E-022.54E-018.10E-01 + 80L1 510.009.18E-042.67E-038.37E-032.67E-021.12E-023.64E-021.01E-012.78E-01 + 80L1 740.004.44E-041.24E-033.32E-038.54E-034.23E-031.18E-022.71E-026.11E-02 + 80L11000.002.56E-046.92E-041.66E-033.70E-031.95E-034.98E-031.02E-022.01E-02 + 80L11500.001.27E-043.25E-046.92E-041.33E-037.01E-041.68E-033.05E-035.22E-03 + 80L2 15.213.48E+001.68E+042.47E+064.35E+072.74E+011.91E+032.38E+045.89E+04 + 80L2 15.913.09E+001.34E+041.92E+063.89E+072.39E+011.61E+032.32E+041.04E+05 + 80L2 17.212.50E+009.11E+031.23E+062.96E+071.89E+011.20E+032.05E+041.59E+05 + 80L2 20.411.58E+003.94E+034.63E+051.36E+071.13E+016.28E+021.31E+041.71E+05 + 80L2 24.219.79E-011.70E+031.74E+055.50E+066.80E+003.28E+027.35E+031.19E+05 + 80L2 28.006.48E-018.37E+027.58E+042.40E+064.40E+001.88E+024.26E+037.42E+04 + 80L2 34.003.69E-013.26E+022.50E+047.62E+052.47E+008.99E+011.96E+033.49E+04 + 80L2 42.001.98E-011.18E+027.50E+032.10E+051.32E+004.02E+018.10E+021.38E+04 + 80L2 54.009.35E-023.54E+011.80E+034.43E+046.28E-011.55E+012.75E+024.25E+03 + 80L2 67.004.86E-021.28E+015.36E+021.15E+043.34E-016.87E+001.07E+021.48E+03 + 80L2 84.002.44E-024.45E+001.52E+022.80E+031.73E-012.94E+003.95E+014.76E+02 + 80L2 97.001.57E-022.29E+006.88E+011.15E+031.14E-011.72E+002.09E+012.30E+02 + 80L2 114.009.54E-031.09E+002.85E+014.21E+027.13E-029.47E-011.03E+011.01E+02 + 80L2 137.005.42E-034.78E-011.06E+011.36E+024.20E-024.82E-014.59E+003.99E+01 + 80L2 165.003.07E-032.09E-013.92E+004.41E+012.47E-022.45E-012.04E+001.56E+01 + 80L2 230.001.13E-034.95E-027.00E-016.16E+009.62E-037.46E-024.92E-012.98E+00 + 80L2 315.004.45E-041.32E-021.45E-011.02E+003.97E-032.48E-021.32E-016.47E-01 + 80L2 400.002.24E-045.04E-034.61E-022.74E-012.04E-031.10E-025.00E-022.10E-01 + 80L2 510.001.13E-041.96E-031.50E-027.62E-021.04E-034.86E-031.91E-026.93E-02 + 80L2 740.004.18E-054.94E-042.94E-031.20E-023.70E-041.45E-034.67E-031.38E-02 + 80L21000.001.92E-051.73E-048.63E-043.00E-031.61E-045.63E-041.57E-034.02E-03 + 80L21500.007.10E-064.66E-051.87E-045.44E-045.27E-051.65E-043.95E-048.57E-04 + 80L3 13.287.86E+004.03E+047.34E+061.59E+084.31E+007.25E+048.12E+071.00E+10 + 80L3 13.986.79E+003.11E+045.40E+061.33E+083.68E+005.62E+045.74E+076.78E+09 + 80L3 15.285.26E+001.99E+043.17E+069.08E+072.80E+003.60E+043.15E+073.43E+09 + 80L3 18.483.02E+007.62E+031.01E+063.40E+071.57E+001.40E+048.77E+068.08E+08 + 80L3 22.281.73E+002.97E+033.30E+051.15E+078.83E-015.50E+032.52E+061.96E+08 + 80L3 28.008.62E-019.39E+028.38E+042.82E+064.39E-011.77E+035.54E+053.52E+07 + 80L3 34.004.72E-013.54E+022.61E+048.17E+052.43E-016.72E+021.55E+058.26E+06 + 80L3 42.002.42E-011.22E+027.35E+032.06E+051.27E-012.35E+023.92E+041.73E+06 + 80L3 54.001.09E-013.48E+011.63E+033.92E+045.93E-026.75E+017.79E+032.75E+05 + 80L3 67.005.40E-021.19E+014.50E+029.31E+033.09E-022.32E+011.99E+035.80E+04 + 80L3 84.002.58E-023.86E+001.17E+022.05E+031.56E-027.58E+004.83E+021.16E+04 + 80L3 97.001.61E-021.89E+004.98E+017.80E+021.01E-023.73E+001.99E+024.23E+03 + 80L3 114.009.49E-038.56E-011.91E+012.64E+026.24E-031.68E+007.40E+011.38E+03 + 80L3 137.005.19E-033.48E-016.48E+007.73E+013.60E-036.83E-012.44E+013.91E+02 + 80L3 165.002.83E-031.41E-012.18E+002.24E+012.07E-032.76E-018.08E+001.11E+02 + 80L3 230.009.70E-042.86E-023.20E-012.51E+007.78E-045.51E-021.17E+001.25E+01 + 80L3 315.003.60E-046.54E-035.39E-023.31E-013.11E-041.22E-021.96E-011.69E+00 + 80L3 400.001.74E-042.20E-031.45E-027.42E-021.57E-043.96E-035.24E-023.86E-01 + 80L3 510.008.48E-057.54E-043.97E-031.71E-027.92E-051.29E-031.41E-029.00E-02 + 80L3 740.002.98E-051.60E-046.09E-042.06E-032.88E-052.43E-042.00E-031.05E-02 + 80L31000.001.36E-055.04E-051.51E-044.29E-041.32E-056.85E-054.36E-041.98E-03 + 80L31500.005.13E-061.25E-052.82E-056.40E-055.07E-061.47E-056.19E-052.32E-04 + 80M1 4.562.74E+001.53E+041.01E+063.68E+072.24E+035.29E+062.41E+092.46E+11 + 80M1 5.562.21E+006.69E+034.72E+051.76E+071.24E+032.00E+066.67E+086.30E+10 + 80M1 7.561.47E+001.82E+031.46E+054.71E+064.93E+024.46E+059.32E+077.44E+09 + 80M1 11.567.42E-012.83E+022.56E+049.08E+051.39E+025.71E+046.53E+063.89E+08 + 80M1 18.563.13E-013.21E+013.01E+031.13E+053.38E+015.98E+033.69E+051.51E+07 + 80M1 27.001.49E-015.28E+004.85E+021.73E+041.11E+011.04E+034.09E+041.22E+06 + 80M1 42.005.89E-026.27E-015.04E+011.56E+033.00E+001.39E+023.34E+036.84E+04 + 80M1 54.003.39E-022.07E-011.35E+013.75E+021.43E+004.57E+018.42E+021.39E+04 + 80M1 72.001.77E-027.24E-023.01E+007.13E+016.16E-011.32E+011.82E+022.33E+03 + 80M1 105.007.34E-032.49E-024.68E-018.23E+002.06E-012.72E+002.62E+012.43E+02 + 80M1 150.003.17E-031.04E-029.97E-021.19E+007.41E-026.55E-014.58E+003.15E+01 + 80M1 280.007.46E-042.36E-031.12E-026.33E-021.29E-026.40E-022.71E-011.15E+00 + 80M1 500.002.14E-046.39E-042.11E-037.16E-032.70E-039.11E-032.63E-027.53E-02 + 80M2 4.286.18E+002.21E+063.02E+094.95E+113.00E+021.92E+052.23E+075.52E+08 + 80M2 5.284.64E+007.79E+057.69E+081.16E+111.60E+027.42E+047.91E+063.15E+08 + 80M2 7.282.70E+001.58E+059.76E+071.24E+106.10E+011.77E+041.59E+067.85E+07 + 80M2 11.281.11E+001.80E+046.17E+065.94E+081.64E+012.63E+031.79E+058.54E+06 + 80M2 18.283.62E-011.67E+033.15E+052.14E+073.89E+003.42E+021.66E+046.39E+05 + 80M2 27.001.34E-012.48E+023.00E+041.52E+061.22E+006.91E+012.49E+037.60E+04 + 80M2 42.004.04E-022.95E+012.21E+037.87E+043.31E-011.18E+013.02E+026.78E+03 + 80M2 54.001.98E-028.91E+005.14E+021.50E+041.59E-014.40E+009.22E+011.72E+03 + 80M2 72.008.61E-032.30E+009.94E+012.29E+036.85E-021.45E+002.41E+013.63E+02 + 80M2 105.002.82E-034.04E-011.21E+012.04E+022.30E-023.46E-014.27E+004.81E+01 + 80M2 150.009.73E-048.12E-021.73E+002.20E+018.27E-039.20E-028.61E-017.39E+00 + 80M2 280.001.54E-045.52E-036.84E-025.36E-011.41E-039.79E-035.77E-023.14E-01 + 80M2 500.003.00E-055.42E-044.28E-032.24E-022.81E-041.35E-035.45E-032.03E-02 + 80M3 3.851.82E+015.18E+067.94E+091.40E+124.48E+019.68E+061.28E+111.84E+14 + 80M3 4.851.21E+011.63E+061.73E+092.71E+112.23E+013.05E+062.58E+102.54E+13 + 80M3 6.856.03E+002.86E+051.82E+082.32E+107.81E+005.44E+052.38E+091.36E+12 + 80M3 10.852.11E+002.83E+049.53E+068.87E+081.93E+005.47E+041.01E+082.95E+10 + 80M3 17.855.92E-012.32E+034.14E+052.67E+074.26E-014.56E+033.45E+065.17E+08 + 80M3 27.001.88E-012.90E+023.17E+041.49E+061.21E-015.79E+022.16E+051.95E+07 + 80M3 42.005.17E-023.18E+012.12E+036.98E+043.18E-026.43E+011.18E+046.49E+05 + 80M3 54.002.41E-029.08E+004.61E+021.24E+041.49E-021.85E+012.33E+039.79E+04 + 80M3 72.009.83E-032.18E+008.13E+011.72E+036.29E-034.44E+003.74E+021.17E+04 + 80M3 105.002.97E-033.38E-018.53E+001.31E+022.04E-036.89E-013.56E+017.80E+02 + 80M3 150.009.51E-045.92E-021.04E+001.18E+017.08E-041.20E-014.09E+006.52E+01 + 80M3 280.001.32E-043.01E-032.83E-021.92E-011.14E-045.84E-031.07E-011.04E+00 + 80M3 500.002.33E-052.19E-041.19E-035.23E-032.19E-053.82E-044.36E-032.89E-02 + 80M4 3.384.90E+011.58E+057.00E+097.39E+131.39E+013.16E+052.12E+091.28E+12 + 80M4 4.382.24E+014.22E+041.14E+097.69E+126.06E+008.64E+043.69E+081.83E+11 + 80M4 6.386.72E+006.27E+038.12E+072.94E+111.78E+001.31E+042.98E+071.08E+10 + 80M4 10.381.28E+005.34E+022.66E+064.51E+093.57E-011.14E+031.20E+062.86E+08 + 80M4 17.381.99E-013.93E+017.09E+045.73E+076.28E-028.50E+014.21E+046.35E+06 + 80M4 27.003.75E-024.21E+003.23E+031.45E+061.38E-029.26E+002.53E+032.55E+05 + 80M4 42.006.61E-034.44E-011.47E+023.79E+042.91E-031.00E+001.57E+021.06E+04 + 80M4 54.002.40E-031.23E-012.58E+014.90E+031.19E-032.83E-013.28E+011.76E+03 + 80M4 72.007.44E-042.85E-023.54E+004.82E+024.21E-046.70E-025.58E+002.30E+02 + 80M4 105.001.58E-044.20E-032.71E-012.40E+011.06E-041.02E-025.63E-011.66E+01 + 80M4 150.003.65E-056.99E-042.50E-021.49E+002.84E-051.73E-036.64E-021.43E+00 + 80M4 280.002.85E-063.27E-054.55E-041.36E-022.75E-068.05E-051.72E-032.23E-02 + 80M4 500.002.91E-072.15E-061.44E-052.22E-043.12E-074.89E-066.48E-055.53E-04 + 80M5 3.297.47E+011.72E+051.40E+101.26E+148.19E+002.27E+041.16E+104.66E+14 + 80M5 4.293.31E+014.42E+042.18E+091.24E+133.49E+006.05E+031.82E+094.36E+13 + 80M5 6.299.57E+006.25E+031.48E+084.41E+111.01E+008.99E+021.26E+081.44E+12 + 80M5 10.291.75E+005.08E+024.63E+066.29E+092.01E-017.74E+014.03E+061.84E+10 + 80M5 17.292.61E-013.59E+011.19E+057.51E+073.55E-025.86E+001.07E+051.91E+08 + 80M5 27.004.70E-023.65E+005.09E+031.75E+067.81E-036.46E-014.79E+033.97E+06 + 80M5 42.008.05E-033.70E-012.24E+024.34E+041.69E-037.37E-022.20E+028.93E+04 + 80M5 54.002.89E-031.00E-013.81E+015.39E+037.02E-042.17E-023.82E+011.06E+04 + 80M5 72.008.82E-042.23E-025.03E+005.02E+022.54E-045.39E-035.17E+009.51E+02 + 80M5 105.001.84E-043.10E-033.57E-012.29E+016.61E-058.88E-043.78E-014.23E+01 + 80M5 150.004.20E-054.87E-042.99E-021.27E+001.84E-051.67E-043.23E-022.35E+00 + 80M5 280.003.35E-062.09E-054.25E-048.85E-032.00E-069.87E-064.62E-041.72E-02 + 80M5 500.003.67E-071.38E-061.01E-051.04E-042.76E-078.46E-071.04E-052.14E-04 + 80N+ 50.003.09E-028.35E+005.43E+022.27E+046.49E-013.25E+011.84E+038.10E+04 + 80N+ 70.001.23E-021.63E+007.26E+012.05E+032.40E-017.14E+002.36E+026.74E+03 + 80N+ 100.004.76E-033.06E-019.22E+001.79E+028.61E-021.54E+002.99E+015.52E+02 + 80N+ 150.001.61E-034.77E-029.33E-011.23E+012.68E-022.86E-013.23E+003.70E+01 + 80N+ 200.007.55E-041.35E-021.95E-011.97E+001.18E-029.15E-027.29E-016.06E+00 + 80N+ 500.008.44E-054.42E-042.41E-031.12E-029.60E-043.50E-031.18E-024.10E-02 + 81K 86.534.94E-015.02E-011.10E-015.71E-031.11E+018.09E+011.11E+023.31E+01 + 81K 87.234.84E-015.13E-011.39E-011.40E-021.09E+017.86E+011.12E+024.14E+01 + 81K 88.534.68E-015.31E-011.93E-013.78E-021.04E+017.46E+011.14E+025.64E+01 + 81K 91.734.29E-015.61E-013.26E-011.40E-019.40E+006.59E+011.15E+029.01E+01 + 81K 95.533.88E-015.78E-014.70E-013.25E-018.36E+005.71E+011.12E+021.22E+02 + 81K 100.003.47E-015.80E-016.10E-015.89E-017.32E+004.86E+011.06E+021.48E+02 + 81K 106.003.00E-015.63E-017.46E-019.54E-016.19E+003.96E+019.61E+011.66E+02 + 81K 114.002.51E-015.24E-018.46E-011.37E+005.03E+003.07E+018.16E+011.69E+02 + 81K 126.001.96E-014.53E-018.80E-011.75E+003.78E+002.16E+016.25E+011.52E+02 + 81K 139.001.53E-013.80E-018.31E-011.88E+002.85E+001.54E+014.66E+011.25E+02 + 81K 156.001.15E-013.00E-017.21E-011.80E+002.06E+001.03E+013.21E+019.16E+01 + 81K 169.009.44E-022.52E-016.32E-011.65E+001.64E+007.83E+002.45E+017.16E+01 + 81K 186.007.45E-022.03E-015.27E-011.43E+001.25E+005.64E+001.76E+015.21E+01 + 81K 209.005.60E-021.54E-014.12E-011.15E+009.04E-013.81E+001.17E+013.45E+01 + 81K 235.004.21E-021.16E-013.15E-018.85E-016.53E-012.57E+007.69E+002.24E+01 + 81K 300.002.36E-026.46E-021.75E-014.83E-013.34E-011.16E+003.22E+008.80E+00 + 81K 385.001.34E-023.61E-029.53E-022.50E-011.70E-015.26E-011.34E+003.36E+00 + 81K 480.008.35E-032.21E-025.61E-021.39E-019.48E-022.68E-016.29E-011.45E+00 + 81K 590.005.46E-031.43E-023.47E-028.07E-025.52E-021.46E-013.18E-016.78E-01 + 81K 820.002.89E-037.44E-031.68E-023.51E-022.36E-025.74E-021.13E-012.14E-01 + 81K 1100.001.69E-034.27E-039.04E-031.74E-021.12E-022.60E-024.74E-028.21E-02 + 81K 1350.001.19E-032.93E-035.96E-031.09E-026.66E-031.53E-022.66E-024.38E-02 + 81K 1600.008.91E-042.15E-034.25E-037.48E-034.35E-039.94E-031.68E-022.66E-02 + 81L1 16.351.49E+003.23E+027.89E+032.08E+042.35E+024.46E+041.66E+061.39E+07 + 81L1 17.051.40E+002.64E+027.58E+033.66E+042.08E+023.66E+041.32E+061.28E+07 + 81L1 18.351.24E+001.85E+026.55E+035.53E+041.67E+022.59E+048.91E+051.03E+07 + 81L1 21.559.43E-018.34E+013.95E+035.88E+041.04E+021.22E+043.75E+055.32E+06 + 81L1 25.357.04E-013.65E+012.06E+033.98E+046.39E+015.78E+031.57E+052.41E+06 + 81L1 29.005.47E-011.81E+011.13E+032.44E+044.28E+013.12E+037.62E+041.19E+06 + 81L1 35.003.78E-016.74E+004.56E+021.07E+042.45E+011.33E+032.80E+044.24E+05 + 81L1 43.002.48E-012.31E+001.60E+023.86E+031.34E+015.31E+029.45E+031.33E+05 + 81L1 55.001.46E-017.23E-014.42E+011.03E+036.48E+001.81E+022.62E+033.25E+04 + 81L1 68.009.16E-023.20E-011.45E+013.16E+023.48E+007.28E+018.86E+029.65E+03 + 81L1 85.005.52E-021.66E-014.62E+008.97E+011.81E+002.85E+012.89E+022.71E+03 + 81L1 98.003.97E-021.17E-012.31E+004.04E+011.20E+001.59E+011.43E+021.22E+03 + 81L1 115.002.73E-028.07E-021.11E+001.67E+017.57E-018.33E+006.58E+015.00E+02 + 81L1 138.001.78E-025.35E-025.19E-016.36E+004.49E-014.05E+002.76E+011.84E+02 + 81L1 165.001.17E-023.57E-022.63E-012.58E+002.70E-012.03E+001.20E+017.04E+01 + 81L1 230.005.40E-031.67E-028.60E-025.62E-011.06E-015.90E-012.73E+001.25E+01 + 81L1 315.002.66E-038.09E-033.33E-021.57E-014.47E-021.94E-017.20E-012.67E+00 + 81L1 410.001.50E-034.49E-031.59E-026.00E-022.19E-028.01E-022.51E-017.84E-01 + 81L1 520.009.20E-042.69E-038.47E-032.70E-021.16E-023.74E-021.02E-012.77E-01 + 81L1 750.004.53E-041.28E-033.43E-038.80E-034.46E-031.23E-022.81E-026.27E-02 + 81L11000.002.68E-047.32E-041.77E-033.96E-032.13E-035.42E-031.11E-022.17E-02 + 81L11500.001.33E-043.44E-047.38E-041.42E-037.61E-041.82E-033.30E-035.65E-03 + 81L2 15.703.28E+001.56E+042.21E+063.73E+072.76E+011.82E+032.19E+045.14E+04 + 81L2 16.402.93E+001.26E+041.72E+063.36E+072.42E+011.55E+032.13E+049.09E+04 + 81L2 17.702.39E+008.62E+031.12E+062.58E+071.93E+011.16E+031.90E+041.39E+05 + 81L2 20.901.52E+003.81E+034.33E+051.22E+071.17E+016.20E+021.24E+041.54E+05 + 81L2 24.709.57E-011.68E+031.67E+055.07E+067.10E+003.29E+027.09E+031.10E+05 + 81L2 29.006.07E-017.68E+026.67E+042.04E+064.40E+001.79E+023.89E+036.56E+04 + 81L2 35.003.53E-013.08E+022.28E+046.72E+052.51E+008.74E+011.84E+033.16E+04 + 81L2 43.001.93E-011.15E+027.07E+031.93E+051.37E+004.00E+017.80E+021.29E+04 + 81L2 55.009.27E-023.54E+011.76E+034.21E+046.62E-011.58E+012.71E+024.08E+03 + 81L2 68.004.88E-021.30E+015.34E+021.12E+043.55E-017.09E+001.08E+021.45E+03 + 81L2 85.002.48E-024.60E+001.55E+022.79E+031.85E-013.08E+004.04E+014.77E+02 + 81L2 98.001.60E-022.39E+007.06E+011.16E+031.23E-011.81E+002.16E+012.33E+02 + 81L2 115.009.83E-031.15E+002.95E+014.30E+027.75E-021.00E+001.07E+011.04E+02 + 81L2 138.005.63E-035.06E-011.10E+011.41E+024.59E-025.15E-014.82E+004.13E+01 + 81L2 165.003.27E-032.29E-014.28E+004.78E+012.75E-022.69E-012.22E+001.68E+01 + 81L2 230.001.20E-035.42E-027.65E-016.69E+001.07E-028.22E-025.37E-013.23E+00 + 81L2 315.004.78E-041.45E-021.59E-011.11E+004.44E-032.74E-021.45E-017.04E-01 + 81L2 410.002.25E-045.03E-034.50E-022.63E-012.13E-031.12E-024.98E-022.04E-01 + 81L2 520.001.16E-042.00E-031.51E-027.56E-021.10E-035.06E-031.96E-026.96E-02 + 81L2 750.004.37E-055.19E-043.07E-031.24E-024.01E-041.55E-034.91E-031.43E-02 + 81L21000.002.08E-051.92E-049.55E-043.31E-031.81E-046.28E-041.75E-034.44E-03 + 81L21500.007.75E-065.16E-052.08E-046.02E-045.93E-051.84E-044.39E-049.51E-04 + 81L3 13.667.44E+003.77E+046.60E+061.38E+084.20E+007.01E+047.56E+079.05E+09 + 81L3 14.366.45E+002.93E+044.90E+061.17E+083.60E+005.47E+045.40E+076.18E+09 + 81L3 15.665.03E+001.89E+042.91E+068.05E+072.76E+003.55E+043.00E+073.19E+09 + 81L3 18.862.92E+007.40E+039.56E+053.10E+071.56E+001.40E+048.61E+067.74E+08 + 81L3 22.661.69E+002.93E+033.18E+051.07E+078.90E-015.62E+032.53E+061.93E+08 + 81L3 29.007.98E-018.46E+027.22E+042.35E+064.18E-011.64E+034.92E+053.01E+07 + 81L3 35.004.45E-013.29E+022.34E+047.07E+052.36E-016.45E+021.43E+057.41E+06 + 81L3 43.002.33E-011.17E+026.80E+031.85E+051.26E-012.32E+023.76E+041.62E+06 + 81L3 55.001.06E-013.41E+011.56E+033.65E+045.95E-026.83E+017.74E+032.68E+05 + 81L3 68.005.35E-021.18E+014.39E+028.89E+033.13E-022.39E+012.02E+035.79E+04 + 81L3 85.002.59E-023.91E+001.16E+022.00E+031.60E-027.92E+005.00E+021.19E+04 + 81L3 98.001.62E-021.94E+005.00E+017.70E+021.04E-023.93E+002.08E+024.36E+03 + 81L3 115.009.63E-038.81E-011.94E+012.64E+026.45E-031.79E+007.80E+011.44E+03 + 81L3 138.005.30E-033.61E-016.63E+007.80E+013.74E-037.31E-012.60E+014.12E+02 + 81L3 165.002.96E-031.51E-012.33E+002.38E+012.20E-033.05E-018.96E+001.23E+02 + 81L3 230.001.02E-033.07E-023.42E-012.67E+008.25E-046.09E-021.29E+001.38E+01 + 81L3 315.003.79E-047.03E-035.77E-023.52E-013.30E-041.35E-022.17E-011.86E+00 + 81L3 410.001.70E-042.12E-031.35E-026.79E-021.55E-043.89E-035.06E-023.67E-01 + 81L3 520.008.43E-057.44E-043.84E-031.63E-027.96E-051.29E-031.40E-028.84E-02 + 81L3 750.003.01E-051.62E-046.11E-042.05E-032.94E-052.51E-042.06E-031.07E-02 + 81L31000.001.43E-055.37E-051.62E-044.59E-041.40E-057.46E-054.80E-042.18E-03 + 81L31500.005.41E-061.33E-053.01E-056.85E-055.34E-061.59E-056.78E-052.55E-04 + 81M1 4.702.58E+001.48E+049.73E+053.20E+072.25E+035.09E+062.23E+092.19E+11 + 81M1 5.702.10E+006.58E+034.61E+051.63E+071.27E+031.98E+066.39E+085.85E+10 + 81M1 7.701.41E+001.84E+031.45E+054.59E+065.15E+024.55E+059.32E+077.25E+09 + 81M1 11.707.23E-012.96E+022.60E+049.02E+051.48E+026.00E+046.79E+063.96E+08 + 81M1 18.703.09E-013.48E+013.14E+031.15E+053.65E+016.42E+033.94E+051.59E+07 + 81M1 27.001.50E-016.04E+005.30E+021.84E+041.22E+011.16E+034.54E+041.35E+06 + 81M1 42.005.96E-027.27E-015.61E+011.69E+033.31E+001.54E+023.70E+037.54E+04 + 81M1 54.003.44E-022.38E-011.52E+014.10E+021.58E+005.06E+019.31E+021.52E+04 + 81M1 72.001.80E-028.01E-023.41E+007.89E+016.80E-011.46E+012.00E+022.56E+03 + 81M1 105.007.52E-032.64E-025.29E-019.20E+002.27E-013.00E+002.88E+012.66E+02 + 81M1 150.003.26E-031.08E-021.11E-011.33E+008.17E-027.21E-015.02E+003.45E+01 + 81M1 280.007.73E-042.46E-031.21E-026.97E-021.42E-027.03E-022.97E-011.25E+00 + 81M1 500.002.24E-046.74E-042.26E-037.77E-032.97E-039.98E-032.87E-028.20E-02 + 81M2 4.425.79E+002.06E+062.70E+094.27E+113.04E+021.85E+052.06E+074.85E+08 + 81M2 5.424.40E+007.48E+057.16E+081.05E+111.65E+027.33E+047.54E+062.87E+08 + 81M2 7.422.61E+001.57E+059.50E+071.18E+106.42E+011.80E+041.57E+067.47E+07 + 81M2 11.421.10E+001.85E+046.25E+065.90E+081.77E+012.75E+031.83E+058.49E+06 + 81M2 18.423.65E-011.76E+033.28E+052.20E+074.24E+003.65E+021.73E+046.56E+05 + 81M2 27.001.38E-012.71E+023.27E+041.64E+061.36E+007.59E+012.71E+038.15E+04 + 81M2 42.004.21E-023.23E+012.41E+038.51E+043.70E-011.30E+013.28E+027.30E+03 + 81M2 54.002.08E-029.75E+005.61E+021.62E+041.77E-014.84E+001.00E+021.86E+03 + 81M2 72.009.06E-032.52E+001.09E+022.48E+037.65E-021.59E+002.63E+013.92E+02 + 81M2 105.002.99E-034.43E-011.32E+012.22E+022.57E-023.81E-014.67E+005.22E+01 + 81M2 150.001.04E-038.92E-021.90E+002.40E+019.26E-031.02E-019.43E-018.04E+00 + 81M2 280.001.66E-046.08E-037.53E-025.87E-011.59E-031.09E-026.35E-023.44E-01 + 81M2 500.003.25E-056.00E-044.73E-032.47E-023.16E-041.50E-036.04E-032.23E-02 + 81M3 3.961.73E+014.86E+067.17E+091.22E+124.38E+019.39E+061.19E+111.66E+14 + 81M3 4.961.16E+011.57E+061.62E+092.46E+112.21E+013.05E+062.51E+102.41E+13 + 81M3 6.965.88E+002.86E+051.78E+082.21E+107.93E+005.61E+052.42E+091.36E+12 + 81M3 10.962.09E+002.91E+049.65E+068.80E+082.00E+005.80E+041.07E+083.10E+10 + 81M3 17.965.96E-012.43E+034.29E+052.72E+074.45E-014.93E+033.74E+065.59E+08 + 81M3 27.001.94E-013.14E+023.41E+041.58E+061.29E-016.46E+022.44E+052.21E+07 + 81M3 42.005.35E-023.44E+012.28E+037.42E+043.39E-027.17E+011.33E+047.31E+05 + 81M3 54.002.50E-029.82E+004.95E+021.31E+041.59E-022.06E+012.62E+031.10E+05 + 81M3 72.001.02E-022.35E+008.74E+011.83E+036.71E-034.95E+004.20E+021.32E+04 + 81M3 105.003.11E-033.66E-019.16E+001.40E+022.17E-037.68E-013.99E+018.72E+02 + 81M3 150.009.98E-046.40E-021.11E+001.26E+017.55E-041.33E-014.57E+007.28E+01 + 81M3 280.001.40E-043.25E-033.04E-022.06E-011.21E-046.48E-031.20E-011.16E+00 + 81M3 500.002.45E-052.36E-041.28E-035.62E-032.34E-054.23E-044.85E-033.20E-02 + 81M4 3.484.64E+011.47E+056.29E+096.45E+131.36E+013.07E+051.98E+091.16E+12 + 81M4 4.482.16E+014.09E+041.07E+097.11E+126.05E+008.67E+043.60E+081.74E+11 + 81M4 6.486.66E+006.29E+038.03E+072.89E+111.82E+001.36E+043.04E+071.08E+10 + 81M4 10.481.30E+005.52E+022.74E+064.66E+093.73E-011.22E+031.27E+062.99E+08 + 81M4 17.482.06E-014.15E+017.53E+046.11E+076.65E-029.30E+014.58E+046.83E+06 + 81M4 27.003.99E-024.59E+003.57E+031.62E+061.49E-021.04E+012.85E+032.86E+05 + 81M4 42.007.08E-034.86E-011.63E+024.24E+043.16E-031.13E+001.76E+021.18E+04 + 81M4 54.002.58E-031.35E-012.85E+015.47E+031.29E-033.20E-013.70E+011.97E+03 + 81M4 72.008.03E-043.13E-023.92E+005.38E+024.59E-047.56E-026.28E+002.58E+02 + 81M4 105.001.71E-044.62E-033.00E-012.68E+011.16E-041.15E-026.34E-011.86E+01 + 81M4 150.003.94E-057.72E-042.77E-021.67E+003.10E-051.95E-037.48E-021.61E+00 + 81M4 280.003.14E-063.62E-055.04E-041.52E-023.02E-069.09E-051.94E-032.51E-02 + 81M4 500.003.19E-072.38E-061.60E-052.49E-043.43E-075.52E-067.33E-056.25E-04 + 81M5 3.397.08E+011.59E+051.27E+101.11E+147.98E+002.15E+041.09E+104.22E+14 + 81M5 4.393.20E+014.22E+042.07E+091.15E+133.48E+005.93E+031.79E+094.18E+13 + 81M5 6.399.49E+006.18E+031.48E+084.35E+111.03E+009.12E+021.30E+081.47E+12 + 81M5 10.391.78E+005.17E+024.81E+066.51E+092.09E-018.08E+014.32E+061.97E+10 + 81M5 17.392.70E-013.73E+011.27E+058.00E+073.74E-026.23E+001.18E+052.12E+08 + 81M5 27.004.99E-023.90E+005.66E+031.95E+068.40E-037.05E-015.47E+034.59E+06 + 81M5 42.008.59E-033.97E-012.50E+024.83E+041.83E-038.04E-022.51E+021.03E+05 + 81M5 54.003.09E-031.07E-014.24E+016.00E+037.58E-042.36E-024.36E+011.22E+04 + 81M5 72.009.44E-042.40E-025.59E+005.59E+022.74E-045.87E-035.90E+001.09E+03 + 81M5 105.001.98E-043.35E-033.97E-012.54E+017.16E-059.68E-044.31E-014.85E+01 + 81M5 150.004.53E-055.27E-043.32E-021.41E+002.00E-051.82E-043.68E-022.69E+00 + 81M5 280.003.67E-062.27E-054.72E-049.84E-032.17E-061.08E-055.25E-041.97E-02 + 81M5 500.004.15E-071.50E-061.12E-051.16E-042.99E-079.23E-071.17E-052.44E-04 + 81N+ 50.003.26E-029.38E+006.09E+022.55E+047.25E-013.68E+012.12E+039.46E+04 + 81N+ 70.001.30E-021.83E+008.15E+012.30E+032.69E-018.06E+002.71E+027.82E+03 + 81N+ 100.005.02E-033.43E-011.04E+012.01E+029.61E-021.73E+003.42E+016.35E+02 + 81N+ 150.001.70E-035.34E-021.05E+001.38E+012.99E-023.20E-013.66E+004.22E+01 + 81N+ 200.007.99E-041.51E-022.19E-012.22E+001.31E-021.02E-018.21E-016.89E+00 + 81N+ 500.008.93E-054.86E-042.70E-031.26E-021.07E-033.89E-031.31E-024.59E-02 + 82K 89.004.67E-014.56E-019.79E-024.96E-031.12E+017.79E+011.03E+022.99E+01 + 82K 89.704.58E-014.66E-011.23E-011.20E-021.09E+017.58E+011.04E+023.72E+01 + 82K 91.004.43E-014.82E-011.70E-013.22E-021.05E+017.21E+011.06E+025.04E+01 + 82K 94.204.07E-015.10E-012.86E-011.19E-019.48E+006.39E+011.07E+028.02E+01 + 82K 98.003.69E-015.26E-014.12E-012.75E-018.45E+005.56E+011.05E+021.09E+02 + 82K 102.003.35E-015.29E-015.25E-014.76E-017.53E+004.83E+011.01E+021.31E+02 + 82K 108.002.91E-015.18E-016.53E-017.94E-016.39E+003.96E+019.15E+011.49E+02 + 82K 116.002.44E-014.86E-017.52E-011.17E+005.21E+003.08E+017.85E+011.55E+02 + 82K 128.001.92E-014.25E-017.96E-011.53E+003.93E+002.19E+016.07E+011.41E+02 + 82K 141.001.51E-013.59E-017.64E-011.69E+002.98E+001.56E+014.57E+011.18E+02 + 82K 158.001.14E-012.87E-016.73E-011.65E+002.16E+001.06E+013.18E+018.78E+01 + 82K 171.009.37E-022.42E-015.96E-011.53E+001.73E+008.05E+002.45E+016.93E+01 + 82K 188.007.42E-021.96E-015.02E-011.34E+001.32E+005.83E+001.77E+015.09E+01 + 82K 211.005.60E-021.50E-013.97E-011.09E+009.58E-013.95E+001.18E+013.41E+01 + 82K 240.004.11E-021.11E-012.99E-018.30E-016.70E-012.57E+007.50E+002.13E+01 + 82K 305.002.34E-026.31E-021.70E-014.65E-013.47E-011.18E+003.21E+008.59E+00 + 82K 390.001.35E-023.59E-029.44E-022.46E-011.79E-015.43E-011.36E+003.35E+00 + 82K 480.008.63E-032.28E-025.79E-021.43E-011.03E-012.88E-016.68E-011.53E+00 + 82K 590.005.66E-031.48E-023.61E-028.36E-025.98E-021.57E-013.38E-017.16E-01 + 82K 820.003.00E-037.77E-031.75E-023.67E-022.55E-026.17E-021.21E-012.27E-01 + 82K 1100.001.76E-034.48E-039.49E-031.83E-021.20E-022.80E-025.06E-028.72E-02 + 82K 1350.001.24E-033.08E-036.28E-031.15E-027.17E-031.64E-022.85E-024.66E-02 + 82K 1600.009.28E-042.26E-034.48E-037.88E-034.67E-031.07E-021.80E-022.84E-02 + 82L1 16.861.40E+003.04E+027.12E+031.79E+042.36E+024.27E+041.53E+061.23E+07 + 82L1 17.561.31E+002.51E+026.86E+033.14E+042.10E+023.53E+041.23E+061.14E+07 + 82L1 18.861.17E+001.78E+025.98E+034.78E+041.69E+022.52E+048.35E+059.24E+06 + 82L1 22.068.98E-018.24E+013.69E+035.21E+041.06E+021.21E+043.60E+054.90E+06 + 82L1 25.866.76E-013.70E+011.97E+033.63E+046.63E+015.82E+031.53E+052.27E+06 + 82L1 29.005.46E-012.05E+011.19E+032.44E+044.71E+013.44E+038.31E+041.25E+06 + 82L1 35.003.79E-017.75E+004.89E+021.10E+042.70E+011.47E+033.05E+044.51E+05 + 82L1 43.002.49E-012.68E+001.75E+024.05E+031.47E+015.85E+021.03E+041.42E+05 + 82L1 55.001.48E-018.31E-014.89E+011.10E+037.13E+001.99E+022.86E+033.50E+04 + 82L1 68.009.28E-023.57E-011.62E+013.43E+023.83E+008.00E+019.66E+021.04E+04 + 82L1 85.005.61E-021.78E-015.19E+009.83E+012.00E+003.13E+013.15E+022.93E+03 + 82L1 98.004.05E-021.23E-012.60E+004.45E+011.32E+001.74E+011.56E+021.32E+03 + 82L1 115.002.79E-028.39E-021.24E+001.85E+018.33E-019.14E+007.17E+015.40E+02 + 82L1 138.001.82E-025.53E-025.75E-017.04E+004.94E-014.44E+003.01E+011.99E+02 + 82L1 165.001.20E-023.68E-022.89E-012.86E+002.97E-012.22E+001.31E+017.62E+01 + 82L1 230.005.57E-031.72E-029.27E-026.16E-011.17E-016.46E-012.97E+001.36E+01 + 82L1 315.002.75E-038.42E-033.56E-021.71E-014.90E-022.12E-017.83E-012.89E+00 + 82L1 410.001.56E-034.70E-031.70E-026.48E-022.40E-028.74E-022.73E-018.49E-01 + 82L1 520.009.57E-042.83E-039.03E-032.90E-021.27E-024.07E-021.11E-012.99E-01 + 82L1 750.004.73E-041.35E-033.65E-039.43E-034.87E-031.34E-023.05E-026.79E-02 + 82L11000.002.81E-047.74E-041.88E-034.24E-032.32E-035.90E-031.20E-022.35E-02 + 82L11500.001.40E-043.65E-047.87E-041.52E-038.27E-041.98E-033.58E-036.11E-03 + 82L2 16.203.09E+001.45E+041.97E+063.21E+072.78E+011.74E+032.01E+044.50E+04 + 82L2 16.902.77E+001.18E+041.55E+062.90E+072.45E+011.49E+031.97E+047.93E+04 + 82L2 18.202.27E+008.17E+031.02E+062.25E+071.96E+011.13E+031.76E+041.22E+05 + 82L2 21.401.47E+003.69E+034.05E+051.10E+071.21E+016.12E+021.17E+041.38E+05 + 82L2 25.209.35E-011.66E+031.60E+054.67E+067.42E+003.30E+026.83E+031.01E+05 + 82L2 29.006.29E-018.35E+027.17E+042.12E+064.88E+001.94E+024.07E+036.56E+04 + 82L2 35.003.67E-013.36E+022.46E+047.06E+052.79E+009.49E+011.94E+033.23E+04 + 82L2 43.002.01E-011.25E+027.63E+032.04E+051.52E+004.35E+018.29E+021.34E+04 + 82L2 55.009.70E-023.86E+011.90E+034.47E+047.36E-011.72E+012.90E+024.29E+03 + 82L2 68.005.13E-021.42E+015.78E+021.20E+043.95E-017.73E+001.16E+021.53E+03 + 82L2 85.002.61E-025.01E+001.68E+023.00E+032.06E-013.36E+004.35E+015.08E+02 + 82L2 98.001.69E-022.60E+007.66E+011.24E+031.37E-011.98E+002.33E+012.49E+02 + 82L2 115.001.04E-021.26E+003.21E+014.63E+028.63E-021.10E+001.16E+011.11E+02 + 82L2 138.005.97E-035.53E-011.20E+011.52E+025.12E-025.65E-015.23E+004.44E+01 + 82L2 165.003.48E-032.50E-014.66E+005.17E+013.08E-022.96E-012.42E+001.81E+01 + 82L2 230.001.29E-035.94E-028.36E-017.27E+001.20E-029.05E-025.86E-013.50E+00 + 82L2 315.005.12E-041.60E-021.74E-011.21E+004.97E-033.03E-021.59E-017.66E-01 + 82L2 410.002.42E-045.54E-034.94E-022.87E-012.39E-031.24E-025.47E-022.23E-01 + 82L2 520.001.25E-042.21E-031.66E-028.29E-021.24E-035.61E-032.15E-027.63E-02 + 82L2 750.004.75E-055.73E-043.39E-031.36E-024.50E-041.72E-035.43E-031.57E-02 + 82L21000.002.28E-052.12E-041.06E-033.66E-032.04E-047.01E-041.94E-034.90E-03 + 82L21500.008.45E-065.72E-052.31E-046.67E-046.67E-052.06E-044.89E-041.05E-03 + 82L3 14.037.04E+003.53E+045.96E+061.21E+084.09E+006.79E+047.06E+078.20E+09 + 82L3 14.736.14E+002.76E+044.45E+061.02E+083.53E+005.33E+045.09E+075.65E+09 + 82L3 16.034.81E+001.80E+042.68E+067.16E+072.72E+003.49E+042.87E+072.96E+09 + 82L3 19.232.83E+007.20E+039.02E+052.82E+071.56E+001.41E+048.46E+067.42E+08 + 82L3 23.031.66E+002.90E+033.06E+051.00E+078.97E-015.74E+032.54E+061.90E+08 + 82L3 29.008.23E-019.10E+027.68E+042.44E+064.43E-011.82E+035.51E+053.35E+07 + 82L3 35.004.60E-013.53E+022.49E+047.38E+052.50E-017.15E+021.60E+058.24E+06 + 82L3 43.002.41E-011.26E+027.24E+031.94E+051.33E-012.57E+024.20E+041.80E+06 + 82L3 55.001.10E-013.67E+011.66E+033.84E+046.31E-027.58E+018.63E+032.97E+05 + 82L3 68.005.56E-021.27E+014.68E+029.36E+033.32E-022.65E+012.25E+036.43E+04 + 82L3 85.002.69E-024.21E+001.24E+022.11E+031.69E-028.78E+005.56E+021.31E+04 + 82L3 98.001.69E-022.08E+005.33E+018.13E+021.10E-024.35E+002.31E+024.83E+03 + 82L3 115.001.00E-029.47E-012.07E+012.79E+026.84E-031.98E+008.67E+011.59E+03 + 82L3 138.005.54E-033.88E-017.08E+008.26E+013.97E-038.09E-012.88E+014.55E+02 + 82L3 165.003.10E-031.63E-012.49E+002.52E+012.33E-033.38E-019.94E+001.36E+02 + 82L3 230.001.07E-033.30E-023.65E-012.83E+008.75E-046.73E-021.43E+001.53E+01 + 82L3 315.003.98E-047.55E-036.17E-023.75E-013.50E-041.49E-022.40E-012.05E+00 + 82L3 410.001.79E-042.27E-031.45E-027.24E-021.64E-044.28E-035.58E-024.04E-01 + 82L3 520.008.88E-057.98E-044.10E-031.73E-028.43E-051.42E-031.55E-029.73E-02 + 82L3 750.003.18E-051.73E-046.54E-042.19E-033.11E-052.75E-042.26E-031.18E-02 + 82L31000.001.51E-055.73E-051.73E-044.91E-041.48E-058.12E-055.27E-042.40E-03 + 82L31500.005.72E-061.41E-053.21E-057.32E-055.63E-061.72E-057.42E-052.80E-04 + 82M1 4.852.43E+001.42E+049.33E+052.79E+072.27E+034.88E+062.06E+091.96E+11 + 82M1 5.851.99E+006.47E+034.49E+051.50E+071.30E+031.95E+066.10E+085.41E+10 + 82M1 7.851.35E+001.86E+031.43E+054.48E+065.37E+024.63E+059.29E+077.04E+09 + 82M1 11.857.03E-013.10E+022.63E+048.95E+051.57E+026.30E+047.04E+064.03E+08 + 82M1 18.853.05E-013.77E+013.27E+031.17E+053.93E+016.89E+034.19E+051.67E+07 + 82M1 27.001.51E-016.89E+005.78E+021.97E+041.35E+011.28E+035.05E+041.49E+06 + 82M1 42.006.03E-028.41E-016.22E+011.84E+033.66E+001.71E+024.10E+038.30E+04 + 82M1 54.003.49E-022.73E-011.70E+014.48E+021.74E+005.60E+011.03E+031.68E+04 + 82M1 72.001.83E-028.94E-023.85E+008.71E+017.51E-011.61E+012.21E+022.81E+03 + 82M1 105.007.69E-032.82E-025.98E-011.03E+012.51E-013.32E+003.17E+012.92E+02 + 82M1 150.003.35E-031.13E-021.24E-011.48E+009.02E-027.94E-015.51E+003.77E+01 + 82M1 280.008.01E-042.58E-031.31E-027.69E-021.57E-027.71E-023.25E-011.37E+00 + 82M1 500.002.34E-047.10E-042.43E-038.43E-033.26E-031.09E-023.13E-028.92E-02 + 82M2 4.555.44E+001.93E+062.43E+093.71E+113.08E+021.79E+051.92E+074.30E+08 + 82M2 5.554.18E+007.20E+056.68E+089.47E+101.70E+027.25E+047.21E+062.62E+08 + 82M2 7.552.52E+001.56E+059.26E+071.12E+106.76E+011.84E+041.56E+067.13E+07 + 82M2 11.551.08E+001.90E+046.35E+065.87E+081.90E+012.88E+031.87E+058.46E+06 + 82M2 18.553.67E-011.85E+033.42E+052.26E+074.62E+003.90E+021.82E+046.73E+05 + 82M2 27.001.43E-012.97E+023.56E+041.77E+061.52E+008.35E+012.94E+038.74E+04 + 82M2 42.004.38E-023.53E+012.62E+039.21E+044.12E-011.43E+013.57E+027.85E+03 + 82M2 54.002.17E-021.07E+016.12E+021.76E+041.98E-015.32E+001.09E+022.00E+03 + 82M2 72.009.52E-032.76E+001.19E+022.69E+038.55E-021.75E+002.86E+014.24E+02 + 82M2 105.003.16E-034.86E-011.44E+012.41E+022.88E-024.20E-015.10E+005.66E+01 + 82M2 150.001.10E-039.80E-022.08E+002.62E+011.04E-021.12E-011.03E+008.74E+00 + 82M2 280.001.78E-046.70E-038.28E-026.43E-011.78E-031.20E-026.99E-023.76E-01 + 82M2 500.003.52E-056.63E-045.23E-032.72E-023.56E-041.67E-036.68E-032.46E-02 + 82M3 4.071.65E+014.58E+066.51E+091.07E+124.29E+019.14E+061.12E+111.51E+14 + 82M3 5.071.12E+011.52E+061.53E+092.25E+112.21E+013.05E+062.45E+102.30E+13 + 82M3 7.075.74E+002.86E+051.74E+082.11E+108.05E+005.79E+052.46E+091.37E+12 + 82M3 11.072.07E+003.00E+049.78E+068.74E+082.06E+006.16E+041.13E+083.26E+10 + 82M3 18.076.01E-012.55E+034.45E+052.78E+074.65E-015.34E+034.06E+066.05E+08 + 82M3 27.002.00E-013.39E+023.67E+041.68E+061.38E-017.21E+022.75E+052.50E+07 + 82M3 42.005.54E-023.72E+012.45E+037.89E+043.61E-028.00E+011.50E+048.24E+05 + 82M3 54.002.60E-021.06E+015.32E+021.40E+041.69E-022.30E+012.95E+031.24E+05 + 82M3 72.001.07E-022.54E+009.38E+011.94E+037.14E-035.52E+004.71E+021.48E+04 + 82M3 105.003.26E-033.95E-019.83E+001.49E+022.31E-038.56E-014.47E+019.75E+02 + 82M3 150.001.05E-036.92E-021.20E+001.34E+018.04E-041.49E-015.11E+008.11E+01 + 82M3 280.001.47E-043.51E-033.27E-022.20E-011.29E-047.20E-031.33E-011.29E+00 + 82M3 500.002.59E-052.55E-041.37E-036.03E-032.49E-054.68E-045.38E-033.55E-02 + 82M4 3.594.40E+011.38E+055.67E+095.65E+131.33E+012.99E+051.85E+091.05E+12 + 82M4 4.592.09E+013.96E+041.01E+096.58E+126.04E+008.71E+043.51E+081.65E+11 + 82M4 6.596.60E+006.31E+037.94E+072.84E+111.86E+001.42E+043.11E+071.08E+10 + 82M4 10.591.32E+005.71E+022.83E+064.81E+093.89E-011.31E+031.35E+063.13E+08 + 82M4 17.592.13E-014.38E+017.98E+046.51E+077.04E-021.02E+024.97E+047.33E+06 + 82M4 27.004.24E-025.00E+003.94E+031.81E+061.61E-021.17E+013.20E+033.20E+05 + 82M4 42.007.56E-035.30E-011.80E+024.73E+043.43E-031.27E+001.98E+021.32E+04 + 82M4 54.002.77E-031.48E-013.15E+016.11E+031.40E-033.60E-014.16E+012.21E+03 + 82M4 72.008.65E-043.43E-024.33E+006.01E+024.99E-048.52E-027.07E+002.89E+02 + 82M4 105.001.85E-045.08E-033.32E-013.00E+011.26E-041.29E-027.13E-012.08E+01 + 82M4 150.004.27E-058.51E-043.07E-021.86E+003.39E-052.20E-038.43E-021.81E+00 + 82M4 280.003.44E-064.01E-055.58E-041.70E-023.32E-061.02E-042.19E-032.82E-02 + 82M4 500.003.50E-072.64E-061.78E-052.79E-043.77E-076.23E-068.28E-057.04E-04 + 82M5 3.486.72E+011.47E+051.16E+109.78E+137.79E+002.05E+041.03E+103.83E+14 + 82M5 4.483.10E+014.03E+041.98E+091.07E+133.46E+005.82E+031.76E+094.01E+13 + 82M5 6.489.40E+006.11E+031.48E+084.28E+111.05E+009.24E+021.33E+081.50E+12 + 82M5 10.481.80E+005.26E+025.01E+066.73E+092.17E-018.42E+014.63E+062.11E+10 + 82M5 17.482.79E-013.87E+011.35E+058.52E+073.94E-026.61E+001.30E+052.34E+08 + 82M5 27.005.29E-024.17E+006.28E+032.17E+069.02E-037.69E-016.24E+035.30E+06 + 82M5 42.009.16E-034.26E-012.77E+025.38E+041.96E-038.76E-022.86E+021.19E+05 + 82M5 54.003.30E-031.15E-014.70E+016.67E+038.17E-042.57E-024.97E+011.41E+04 + 82M5 72.001.01E-032.58E-026.21E+006.21E+022.96E-046.39E-036.72E+001.26E+03 + 82M5 105.002.13E-043.61E-034.41E-012.83E+017.74E-051.05E-034.91E-015.56E+01 + 82M5 150.004.89E-055.69E-043.69E-021.57E+002.16E-051.98E-044.19E-023.08E+00 + 82M5 280.003.91E-062.46E-055.23E-041.09E-022.36E-061.17E-055.95E-042.24E-02 + 82M5 500.004.61E-071.63E-061.24E-051.29E-043.25E-071.00E-061.32E-052.77E-04 + 82N+ 50.003.41E-021.02E+016.66E+022.81E+048.10E-014.11E+012.38E+031.07E+05 + 82N+ 70.001.36E-022.00E+008.91E+012.53E+033.00E-018.98E+003.03E+028.82E+03 + 82N+ 100.005.27E-033.74E-011.13E+012.20E+021.07E-011.92E+003.81E+017.12E+02 + 82N+ 150.001.79E-035.82E-021.15E+001.51E+013.35E-023.55E-014.06E+004.71E+01 + 82N+ 200.008.40E-041.64E-022.40E-012.42E+001.47E-021.13E-019.11E-017.66E+00 + 82N+ 500.009.49E-055.27E-042.95E-031.38E-021.19E-034.28E-031.44E-025.06E-02 + 83K 91.534.42E-014.15E-018.75E-024.35E-031.12E+017.51E+019.62E+012.71E+01 + 83K 92.234.33E-014.24E-011.09E-011.04E-021.10E+017.31E+019.72E+013.35E+01 + 83K 93.534.19E-014.38E-011.51E-012.75E-021.05E+016.96E+019.88E+014.52E+01 + 83K 96.733.86E-014.64E-012.51E-011.01E-019.56E+006.19E+011.00E+027.16E+01 + 83K 100.533.52E-014.79E-013.63E-012.34E-018.55E+005.41E+019.84E+019.73E+01 + 83K 105.003.16E-014.84E-014.74E-014.29E-017.54E+004.65E+019.39E+011.19E+02 + 83K 111.002.76E-014.74E-015.87E-017.06E-016.43E+003.83E+018.58E+011.35E+02 + 83K 119.002.33E-014.47E-016.78E-011.03E+005.27E+003.01E+017.40E+011.41E+02 + 83K 131.001.84E-013.93E-017.22E-011.37E+004.00E+002.15E+015.78E+011.30E+02 + 83K 144.001.46E-013.36E-016.99E-011.52E+003.06E+001.55E+014.39E+011.09E+02 + 83K 161.001.11E-012.71E-016.23E-011.50E+002.23E+001.06E+013.09E+018.26E+01 + 83K 174.009.16E-022.30E-015.57E-011.41E+001.79E+008.12E+002.39E+016.58E+01 + 83K 191.007.30E-021.88E-014.74E-011.25E+001.38E+005.92E+001.75E+014.88E+01 + 83K 214.005.54E-021.45E-013.79E-011.03E+001.00E+004.04E+001.18E+013.31E+01 + 83K 240.004.21E-021.12E-012.97E-018.18E-017.29E-012.76E+007.88E+002.19E+01 + 83K 305.002.41E-026.41E-021.72E-014.68E-013.77E-011.26E+003.38E+008.92E+00 + 83K 390.001.39E-023.68E-029.67E-022.51E-011.94E-015.83E-011.44E+003.50E+00 + 83K 480.008.92E-032.35E-025.97E-021.47E-011.12E-013.09E-017.10E-011.61E+00 + 83K 590.005.86E-031.54E-023.74E-028.67E-026.48E-021.68E-013.60E-017.56E-01 + 83K 820.003.12E-038.11E-031.83E-023.84E-022.76E-026.63E-021.29E-012.41E-01 + 83K 1100.001.84E-034.69E-039.97E-031.92E-021.30E-023.01E-025.41E-029.27E-02 + 83K 1350.001.29E-033.23E-036.61E-031.21E-027.73E-031.76E-023.04E-024.96E-02 + 83K 1600.009.67E-042.38E-034.72E-038.31E-035.02E-031.15E-021.92E-023.02E-02 + 83L1 17.391.32E+002.87E+026.43E+031.54E+042.37E+024.09E+041.40E+061.10E+07 + 83L1 18.091.24E+002.38E+026.22E+032.70E+042.11E+023.40E+041.14E+061.02E+07 + 83L1 19.391.11E+001.71E+025.46E+034.13E+041.72E+022.45E+047.83E+058.32E+06 + 83L1 22.598.56E-018.13E+013.44E+034.63E+041.09E+021.20E+043.45E+054.51E+06 + 83L1 26.396.49E-013.75E+011.88E+033.31E+046.87E+015.86E+031.50E+052.14E+06 + 83L1 30.005.12E-011.95E+011.07E+032.13E+044.69E+013.26E+037.56E+041.10E+06 + 83L1 36.003.59E-017.67E+004.57E+029.91E+032.74E+011.43E+032.87E+044.10E+05 + 83L1 44.002.39E-012.77E+001.69E+023.77E+031.51E+015.83E+029.96E+031.33E+05 + 83L1 56.001.44E-018.82E-014.92E+011.07E+037.44E+002.03E+022.84E+033.39E+04 + 83L1 69.009.10E-023.80E-011.67E+013.42E+024.04E+008.27E+019.78E+021.03E+04 + 83L1 86.005.55E-021.86E-015.50E+001.01E+022.13E+003.28E+013.24E+022.96E+03 + 83L1 99.004.02E-021.27E-012.78E+004.62E+011.41E+001.84E+011.62E+021.34E+03 + 83L1 116.002.79E-028.61E-021.34E+001.95E+018.94E-019.68E+007.49E+015.56E+02 + 83L1 139.001.83E-025.65E-026.20E-017.51E+005.32E-014.73E+003.17E+012.07E+02 + 83L1 165.001.23E-023.81E-023.17E-013.16E+003.27E-012.44E+001.43E+018.24E+01 + 83L1 230.005.74E-031.79E-021.00E-016.77E-011.28E-017.06E-013.23E+001.47E+01 + 83L1 315.002.84E-038.78E-033.82E-021.86E-015.38E-022.32E-018.51E-013.13E+00 + 83L1 410.001.62E-034.92E-031.81E-027.00E-022.63E-029.54E-022.96E-019.19E-01 + 83L1 520.009.98E-042.97E-039.64E-033.13E-021.39E-024.44E-021.20E-013.24E-01 + 83L1 750.004.94E-041.42E-033.89E-031.01E-025.33E-031.46E-023.31E-027.34E-02 + 83L11000.002.95E-048.19E-042.01E-034.55E-032.53E-036.42E-031.30E-022.54E-02 + 83L11500.001.47E-043.87E-048.40E-041.63E-038.99E-042.15E-033.88E-036.60E-03 + 83L2 16.712.92E+001.35E+041.76E+062.77E+072.81E+011.67E+031.85E+043.95E+04 + 83L2 17.412.63E+001.11E+041.40E+062.51E+072.49E+011.44E+031.82E+046.95E+04 + 83L2 18.712.17E+007.75E+039.28E+051.97E+072.00E+011.10E+031.64E+041.08E+05 + 83L2 21.911.42E+003.57E+033.79E+059.85E+061.25E+016.05E+021.11E+041.24E+05 + 83L2 25.719.13E-011.63E+031.53E+054.30E+067.76E+003.31E+026.58E+039.32E+04 + 83L2 30.005.92E-017.71E+026.35E+041.82E+064.90E+001.85E+023.74E+035.84E+04 + 83L2 36.003.52E-013.19E+022.25E+046.26E+052.85E+009.26E+011.83E+032.94E+04 + 83L2 44.001.96E-011.22E+027.22E+031.87E+051.58E+004.33E+017.99E+021.25E+04 + 83L2 56.009.62E-023.86E+011.85E+034.26E+047.76E-011.75E+012.87E+024.13E+03 + 83L2 69.005.15E-021.44E+015.77E+021.17E+044.22E-017.98E+001.16E+021.51E+03 + 83L2 86.002.65E-025.18E+001.70E+022.99E+032.22E-013.52E+004.45E+015.09E+02 + 83L2 99.001.73E-022.71E+007.86E+011.25E+031.48E-012.09E+002.41E+012.52E+02 + 83L2 116.001.07E-021.32E+003.32E+014.73E+029.39E-021.17E+001.21E+011.14E+02 + 83L2 139.006.19E-035.85E-011.26E+011.57E+025.60E-026.03E-015.50E+004.60E+01 + 83L2 165.003.69E-032.74E-015.08E+005.59E+013.43E-023.25E-012.63E+001.95E+01 + 83L2 230.001.37E-036.51E-029.13E-017.89E+001.34E-029.97E-026.40E-013.79E+00 + 83L2 315.005.49E-041.75E-021.91E-011.32E+005.57E-033.34E-021.74E-018.34E-01 + 83L2 410.002.60E-046.09E-035.43E-023.14E-012.68E-031.37E-026.01E-022.44E-01 + 83L2 520.001.35E-042.43E-031.83E-029.08E-021.39E-036.22E-032.37E-028.35E-02 + 83L2 750.005.14E-056.33E-043.74E-031.50E-025.06E-041.91E-036.00E-031.73E-02 + 83L21000.002.48E-052.34E-041.17E-034.03E-032.30E-047.81E-042.15E-035.41E-03 + 83L21500.009.22E-066.34E-052.56E-047.39E-047.51E-052.30E-045.44E-041.17E-03 + 83L3 14.426.68E+003.31E+045.38E+061.06E+083.99E+006.58E+046.60E+077.43E+09 + 83L3 15.125.84E+002.61E+044.05E+069.01E+073.45E+005.20E+044.80E+075.17E+09 + 83L3 16.424.60E+001.72E+042.47E+066.37E+072.68E+003.44E+042.75E+072.76E+09 + 83L3 19.622.74E+007.00E+038.51E+052.57E+071.55E+001.42E+048.30E+067.11E+08 + 83L3 23.421.62E+002.87E+032.94E+059.32E+069.04E-015.86E+032.54E+061.86E+08 + 83L3 30.007.65E-018.24E+026.67E+042.05E+064.24E-011.71E+034.93E+052.89E+07 + 83L3 36.004.35E-013.30E+022.23E+046.42E+052.43E-016.89E+021.49E+057.43E+06 + 83L3 44.002.32E-011.21E+026.72E+031.75E+051.32E-012.54E+024.04E+041.69E+06 + 83L3 56.001.08E-013.61E+011.59E+033.58E+046.33E-027.68E+018.58E+032.89E+05 + 83L3 69.005.51E-021.27E+014.57E+028.94E+033.37E-022.73E+012.28E+036.42E+04 + 83L3 86.002.70E-024.27E+001.23E+022.06E+031.73E-029.18E+005.75E+021.34E+04 + 83L3 99.001.71E-022.13E+005.35E+018.02E+021.13E-024.58E+002.41E+024.98E+03 + 83L3 116.001.02E-029.76E-012.10E+012.78E+027.06E-032.10E+009.14E+011.66E+03 + 83L3 139.005.66E-034.02E-017.24E+008.33E+014.11E-038.64E-013.06E+014.79E+02 + 83L3 165.003.24E-031.75E-012.66E+002.67E+012.47E-033.74E-011.10E+011.50E+02 + 83L3 230.001.12E-033.55E-023.90E-013.01E+009.27E-047.44E-021.58E+001.68E+01 + 83L3 315.004.18E-048.11E-036.59E-023.98E-013.71E-041.64E-022.65E-012.26E+00 + 83L3 410.001.88E-042.44E-031.55E-027.70E-021.74E-044.72E-036.16E-024.45E-01 + 83L3 520.009.38E-058.55E-044.39E-031.85E-028.92E-051.56E-031.70E-021.07E-01 + 83L3 750.003.36E-051.86E-046.99E-042.34E-033.28E-053.01E-042.49E-031.29E-02 + 83L31000.001.58E-056.11E-051.85E-045.25E-041.56E-058.84E-055.79E-042.63E-03 + 83L31500.006.02E-061.50E-053.42E-057.82E-055.92E-061.85E-058.12E-053.07E-04 + 83M1 5.002.29E+001.37E+048.99E+052.46E+072.29E+034.71E+061.91E+091.75E+11 + 83M1 6.001.89E+006.39E+034.39E+051.39E+071.33E+031.92E+065.85E+085.03E+10 + 83M1 8.001.29E+001.88E+031.42E+054.37E+065.61E+024.72E+059.27E+076.84E+09 + 83M1 12.006.84E-013.24E+022.67E+048.92E+051.67E+026.62E+047.30E+064.10E+08 + 83M1 19.003.01E-014.07E+013.40E+031.19E+054.25E+017.39E+034.46E+051.75E+07 + 83M1 28.001.41E-016.60E+005.27E+021.74E+041.34E+011.21E+034.55E+041.30E+06 + 83M1 43.005.80E-028.71E-016.11E+011.75E+033.77E+001.71E+023.98E+037.86E+04 + 83M1 55.003.40E-022.90E-011.73E+014.42E+021.82E+005.73E+011.03E+031.64E+04 + 83M1 73.001.81E-029.54E-024.05E+008.88E+017.96E-011.68E+012.26E+022.83E+03 + 83M1 106.007.70E-032.95E-026.46E-011.08E+012.69E-013.52E+003.32E+013.02E+02 + 83M1 155.003.19E-031.10E-021.21E-011.40E+009.06E-027.70E-015.17E+003.44E+01 + 83M1 285.007.96E-042.60E-031.35E-027.86E-021.64E-027.95E-023.29E-011.36E+00 + 83M1 500.002.44E-047.50E-042.61E-039.16E-033.59E-031.20E-023.42E-029.72E-02 + 83M2 4.705.11E+001.81E+062.18E+093.23E+113.13E+021.72E+051.78E+073.82E+08 + 83M2 5.703.97E+006.92E+056.23E+088.56E+101.76E+027.18E+046.89E+062.40E+08 + 83M2 7.702.43E+001.55E+059.01E+071.06E+107.13E+011.87E+041.54E+066.79E+07 + 83M2 11.701.07E+001.96E+046.43E+065.82E+082.04E+013.02E+031.92E+058.41E+06 + 83M2 18.703.68E-011.95E+033.57E+052.32E+075.04E+004.16E+021.90E+046.90E+05 + 83M2 28.001.34E-012.72E+023.13E+041.50E+061.52E+007.93E+012.68E+037.69E+04 + 83M2 43.004.27E-023.45E+012.49E+038.52E+044.30E-011.43E+013.47E+027.43E+03 + 83M2 55.002.15E-021.07E+016.00E+021.68E+042.09E-015.44E+001.09E+021.96E+03 + 83M2 73.009.61E-032.84E+001.20E+022.67E+039.18E-021.83E+002.93E+014.25E+02 + 83M2 106.003.25E-035.11E-011.50E+012.47E+023.13E-024.46E-015.33E+005.83E+01 + 83M2 155.001.06E-039.31E-021.92E+002.33E+011.06E-021.10E-019.77E-018.03E+00 + 83M2 285.001.82E-046.87E-038.34E-026.37E-011.91E-031.25E-027.14E-023.78E-01 + 83M2 500.003.80E-057.34E-045.77E-033.00E-024.01E-041.86E-037.39E-032.71E-02 + 83M3 4.181.57E+014.32E+065.91E+099.45E+114.20E+018.92E+061.05E+111.38E+14 + 83M3 5.181.07E+011.47E+061.44E+092.06E+112.20E+013.05E+062.38E+102.19E+13 + 83M3 7.185.60E+002.85E+051.71E+082.01E+108.16E+005.97E+052.50E+091.37E+12 + 83M3 11.182.06E+003.08E+049.91E+068.67E+082.13E+006.54E+041.20E+083.42E+10 + 83M3 18.186.05E-012.67E+034.61E+052.83E+074.86E-015.77E+034.40E+066.53E+08 + 83M3 28.001.85E-013.06E+023.15E+041.39E+061.31E-016.71E+022.44E+052.12E+07 + 83M3 43.005.34E-023.58E+012.27E+037.13E+043.58E-027.93E+011.45E+047.75E+05 + 83M3 55.002.55E-021.05E+015.10E+021.31E+041.71E-022.34E+012.94E+031.21E+05 + 83M3 73.001.06E-022.57E+009.26E+011.88E+037.30E-035.74E+004.84E+021.49E+04 + 83M3 106.003.30E-034.08E-019.98E+001.48E+022.40E-039.10E-014.72E+011.02E+03 + 83M3 155.009.91E-046.38E-021.06E+001.15E+017.77E-041.41E-014.69E+007.23E+01 + 83M3 285.001.47E-043.49E-033.18E-022.10E-011.31E-047.35E-031.34E-011.28E+00 + 83M3 500.002.75E-052.75E-041.48E-036.46E-032.64E-055.17E-045.97E-033.93E-02 + 83M4 3.694.17E+011.30E+055.12E+094.97E+131.30E+012.92E+051.73E+099.53E+11 + 83M4 4.692.02E+013.84E+049.52E+086.10E+126.03E+008.76E+043.43E+081.57E+11 + 83M4 6.696.53E+006.33E+037.85E+072.79E+111.90E+001.47E+043.17E+071.08E+10 + 83M4 10.691.34E+005.90E+022.91E+064.96E+094.05E-011.40E+031.43E+063.26E+08 + 83M4 17.692.21E-014.63E+018.44E+046.93E+077.45E-021.11E+025.39E+047.87E+06 + 83M4 28.003.92E-024.53E+003.37E+031.49E+061.54E-021.10E+012.86E+032.75E+05 + 83M4 43.007.35E-035.14E-011.69E+024.35E+043.43E-031.27E+001.93E+021.25E+04 + 83M4 55.002.76E-031.47E-013.06E+015.87E+031.43E-033.70E-014.17E+012.17E+03 + 83M4 73.008.79E-043.50E-024.35E+005.99E+025.17E-048.95E-027.30E+002.94E+02 + 83M4 106.001.92E-045.33E-033.44E-013.10E+011.33E-041.39E-027.57E-012.18E+01 + 83M4 155.004.08E-057.96E-042.73E-021.61E+003.28E-052.11E-037.80E-021.62E+00 + 83M4 285.003.49E-064.06E-055.53E-041.67E-023.40E-061.06E-042.23E-032.83E-02 + 83M4 500.003.83E-072.92E-061.97E-053.12E-044.14E-077.02E-069.34E-057.93E-04 + 83M5 3.586.38E+011.36E+051.06E+108.64E+137.61E+001.95E+049.68E+093.48E+14 + 83M5 4.583.00E+013.85E+041.88E+099.95E+123.45E+005.71E+031.73E+093.85E+13 + 83M5 6.589.31E+006.03E+031.48E+084.22E+111.07E+009.36E+021.37E+081.52E+12 + 83M5 10.581.83E+005.35E+025.20E+066.95E+092.25E-018.77E+014.95E+062.25E+10 + 83M5 17.582.88E-014.01E+011.44E+059.06E+074.14E-027.01E+001.42E+052.58E+08 + 83M5 28.004.85E-023.69E+005.39E+031.78E+068.54E-037.00E-015.51E+034.47E+06 + 83M5 43.008.86E-034.03E-012.60E+024.91E+041.95E-038.50E-022.77E+021.12E+05 + 83M5 55.003.27E-031.12E-014.59E+016.37E+038.24E-042.56E-024.98E+011.39E+04 + 83M5 73.001.02E-032.58E-026.25E+006.16E+023.04E-046.50E-036.95E+001.29E+03 + 83M5 106.002.19E-043.70E-034.58E-012.91E+018.08E-051.10E-035.23E-015.89E+01 + 83M5 155.004.58E-055.19E-043.26E-021.34E+002.08E-051.85E-043.80E-022.71E+00 + 83M5 285.004.04E-062.45E-055.15E-041.06E-022.40E-061.18E-055.98E-042.23E-02 + 83M5 500.004.86E-071.77E-061.37E-051.43E-043.51E-071.09E-061.48E-053.14E-04 + 83N+ 50.003.57E-021.15E+017.43E+023.15E+049.15E-014.69E+012.75E+031.25E+05 + 83N+ 70.001.43E-022.25E+009.95E+012.82E+033.39E-011.02E+013.50E+021.02E+04 + 83N+ 100.005.56E-034.20E-011.26E+012.45E+021.21E-012.19E+004.37E+018.20E+02 + 83N+ 150.001.89E-036.53E-021.29E+001.68E+013.77E-024.04E-014.64E+005.39E+01 + 83N+ 200.008.93E-041.84E-022.69E-012.71E+001.66E-021.28E-011.04E+008.73E+00 + 83N+ 500.001.02E-045.85E-043.32E-031.56E-021.34E-034.85E-031.63E-025.70E-02 + 84K 94.104.18E-013.78E-017.84E-023.82E-031.13E+017.25E+018.97E+012.45E+01 + 84K 94.804.10E-013.85E-019.74E-029.04E-031.10E+017.06E+019.06E+013.02E+01 + 84K 96.103.97E-013.99E-011.33E-012.37E-021.06E+016.73E+019.21E+014.05E+01 + 84K 99.303.67E-014.22E-012.22E-018.61E-029.66E+006.01E+019.34E+016.39E+01 + 84K 103.103.35E-014.37E-013.20E-012.00E-018.66E+005.27E+019.21E+018.70E+01 + 84K 107.003.06E-014.42E-014.08E-013.45E-017.78E+004.63E+018.88E+011.05E+02 + 84K 113.002.68E-014.37E-015.14E-015.87E-016.66E+003.84E+018.18E+011.21E+02 + 84K 121.002.27E-014.15E-016.03E-018.86E-015.47E+003.03E+017.12E+011.28E+02 + 84K 133.001.80E-013.69E-016.55E-011.20E+004.18E+002.18E+015.63E+011.21E+02 + 84K 146.001.43E-013.18E-016.44E-011.36E+003.20E+001.58E+014.31E+011.03E+02 + 84K 163.001.10E-012.59E-015.83E-011.38E+002.34E+001.08E+013.07E+017.91E+01 + 84K 176.009.09E-022.22E-015.26E-011.31E+001.89E+008.35E+002.39E+016.36E+01 + 84K 193.007.27E-021.82E-014.53E-011.18E+001.46E+006.11E+001.76E+014.77E+01 + 84K 216.005.55E-021.42E-013.67E-019.85E-011.06E+004.19E+001.19E+013.26E+01 + 84K 245.004.11E-021.07E-012.83E-017.71E-017.50E-012.76E+007.69E+002.09E+01 + 84K 310.002.39E-026.28E-021.67E-014.52E-013.93E-011.29E+003.38E+008.71E+00 + 84K 395.001.39E-023.67E-029.61E-022.48E-012.04E-016.01E-011.46E+003.49E+00 + 84K 480.009.22E-032.43E-026.16E-021.51E-011.21E-013.32E-017.54E-011.69E+00 + 84K 590.006.07E-031.60E-023.89E-028.99E-027.04E-021.81E-013.83E-017.98E-01 + 84K 820.003.24E-038.46E-031.92E-024.01E-022.99E-027.13E-021.37E-012.55E-01 + 84K 1100.001.91E-034.91E-031.05E-022.02E-021.41E-023.23E-025.78E-029.85E-02 + 84K 1350.001.34E-033.39E-036.95E-031.27E-028.34E-031.90E-023.25E-025.28E-02 + 84K 1600.001.01E-032.50E-034.97E-038.76E-035.41E-031.23E-022.06E-023.22E-02 + 84L1 17.941.23E+002.70E+025.79E+031.32E+042.38E+023.90E+041.29E+069.68E+06 + 84L1 18.641.16E+002.26E+025.62E+032.31E+042.13E+023.26E+041.05E+069.01E+06 + 84L1 19.941.04E+001.64E+024.97E+033.56E+041.74E+022.38E+047.31E+057.44E+06 + 84L1 23.148.14E-018.01E+013.20E+034.08E+041.12E+021.19E+043.29E+054.14E+06 + 84L1 26.946.22E-013.78E+011.79E+033.00E+047.12E+015.89E+031.46E+052.01E+06 + 84L1 30.005.10E-012.20E+011.13E+032.11E+045.17E+013.60E+038.22E+041.16E+06 + 84L1 36.003.60E-018.76E+004.89E+021.01E+043.01E+011.57E+033.12E+044.35E+05 + 84L1 44.002.40E-013.19E+001.84E+023.93E+031.67E+016.42E+021.09E+041.42E+05 + 84L1 56.001.45E-011.01E+005.42E+011.14E+038.20E+002.23E+023.10E+033.64E+04 + 84L1 69.009.22E-024.28E-011.86E+013.68E+024.45E+009.10E+011.07E+031.11E+04 + 84L1 86.005.64E-022.03E-016.16E+001.10E+022.34E+003.60E+013.53E+023.19E+03 + 84L1 99.004.10E-021.36E-013.12E+005.07E+011.56E+002.02E+011.76E+021.45E+03 + 84L1 116.002.85E-029.07E-021.50E+002.15E+019.85E-011.06E+018.16E+016.01E+02 + 84L1 139.001.88E-025.89E-026.89E-018.30E+005.86E-015.19E+003.45E+012.24E+02 + 84L1 165.001.26E-023.97E-023.50E-013.49E+003.60E-012.67E+001.55E+018.91E+01 + 84L1 230.005.91E-031.86E-021.09E-017.43E-011.41E-017.73E-013.51E+001.59E+01 + 84L1 315.002.94E-039.17E-034.10E-022.02E-015.92E-022.53E-019.25E-013.38E+00 + 84L1 410.001.68E-035.16E-031.94E-027.58E-022.89E-021.04E-013.22E-019.94E-01 + 84L1 520.001.04E-033.13E-031.03E-023.37E-021.53E-024.85E-021.31E-013.51E-01 + 84L1 750.005.16E-041.50E-034.16E-031.09E-025.84E-031.59E-023.59E-027.95E-02 + 84L11000.003.08E-048.68E-042.15E-034.88E-032.77E-036.99E-031.41E-022.75E-02 + 84L11500.001.54E-044.10E-048.97E-041.75E-039.79E-042.34E-034.21E-037.14E-03 + 84L2 17.242.75E+001.26E+041.57E+062.38E+072.84E+011.60E+031.70E+043.47E+04 + 84L2 17.942.48E+001.04E+041.25E+062.16E+072.52E+011.38E+031.67E+046.07E+04 + 84L2 19.242.07E+007.34E+038.44E+051.72E+072.05E+011.06E+031.52E+049.44E+04 + 84L2 22.441.37E+003.45E+033.54E+058.81E+061.29E+015.97E+021.04E+041.12E+05 + 84L2 26.248.91E-011.61E+031.46E+053.95E+068.11E+003.31E+026.32E+038.56E+04 + 84L2 30.006.13E-018.38E+026.81E+041.89E+065.45E+002.00E+023.90E+035.81E+04 + 84L2 36.003.65E-013.47E+022.42E+046.56E+053.17E+001.00E+021.92E+033.00E+04 + 84L2 44.002.04E-011.32E+027.77E+031.97E+051.75E+004.71E+018.48E+021.30E+04 + 84L2 56.001.01E-014.20E+012.00E+034.52E+048.64E-011.90E+013.06E+024.32E+03 + 84L2 69.005.40E-021.57E+016.23E+021.25E+044.70E-018.71E+001.25E+021.59E+03 + 84L2 86.002.79E-025.65E+001.84E+023.20E+032.48E-013.84E+004.80E+015.41E+02 + 84L2 99.001.83E-022.96E+008.53E+011.34E+031.65E-012.28E+002.60E+012.69E+02 + 84L2 116.001.13E-021.44E+003.61E+015.09E+021.05E-011.28E+001.30E+011.22E+02 + 84L2 139.006.56E-036.40E-011.37E+011.69E+026.25E-026.62E-015.96E+004.94E+01 + 84L2 165.003.92E-033.00E-015.53E+006.04E+013.84E-023.57E-012.85E+002.10E+01 + 84L2 230.001.47E-037.14E-029.97E-018.56E+001.50E-021.10E-016.98E-014.10E+00 + 84L2 315.005.89E-041.93E-022.09E-011.44E+006.25E-033.69E-021.90E-019.07E-01 + 84L2 410.002.80E-046.70E-035.96E-023.43E-013.00E-031.51E-026.60E-022.66E-01 + 84L2 520.001.46E-042.68E-032.01E-029.95E-021.56E-036.90E-032.61E-029.15E-02 + 84L2 750.005.57E-056.99E-044.13E-031.65E-025.69E-042.13E-036.63E-031.91E-02 + 84L21000.002.70E-052.59E-041.29E-034.45E-032.58E-048.71E-042.38E-035.98E-03 + 84L21500.001.00E-057.02E-052.84E-048.18E-048.46E-052.57E-046.06E-041.30E-03 + 84L3 14.816.32E+003.10E+044.85E+069.28E+073.89E+006.37E+046.17E+076.72E+09 + 84L3 15.515.55E+002.46E+043.68E+067.92E+073.38E+005.07E+044.52E+074.73E+09 + 84L3 16.814.40E+001.64E+042.28E+065.65E+072.64E+003.39E+042.62E+072.56E+09 + 84L3 20.012.65E+006.80E+038.02E+052.34E+071.55E+001.42E+048.13E+066.80E+08 + 84L3 23.811.58E+002.83E+032.83E+058.67E+069.09E-015.98E+032.55E+061.83E+08 + 84L3 30.007.88E-018.86E+027.08E+042.12E+064.49E-011.89E+035.51E+053.21E+07 + 84L3 36.004.49E-013.54E+022.38E+046.69E+052.57E-017.64E+021.66E+058.25E+06 + 84L3 44.002.40E-011.30E+027.14E+031.83E+051.40E-012.82E+024.51E+041.87E+06 + 84L3 56.001.12E-013.88E+011.69E+033.75E+046.71E-028.51E+019.56E+033.21E+05 + 84L3 69.005.71E-021.37E+014.86E+029.40E+033.57E-023.02E+012.54E+037.11E+04 + 84L3 86.002.80E-024.59E+001.31E+022.17E+031.83E-021.02E+016.39E+021.48E+04 + 84L3 99.001.78E-022.29E+005.70E+018.46E+021.20E-025.08E+002.68E+025.50E+03 + 84L3 116.001.06E-021.05E+002.24E+012.94E+027.48E-032.33E+001.01E+021.83E+03 + 84L3 139.005.90E-034.33E-017.72E+008.80E+014.36E-039.57E-013.39E+015.29E+02 + 84L3 165.003.39E-031.88E-012.83E+002.82E+012.62E-034.13E-011.22E+011.66E+02 + 84L3 230.001.17E-033.81E-024.16E-013.19E+009.82E-048.22E-021.75E+001.85E+01 + 84L3 315.004.38E-048.70E-037.04E-024.23E-013.93E-041.81E-022.93E-012.49E+00 + 84L3 410.001.98E-042.61E-031.66E-028.19E-021.84E-045.19E-036.80E-024.89E-01 + 84L3 520.009.86E-059.16E-044.69E-031.97E-029.43E-051.72E-031.88E-021.18E-01 + 84L3 750.003.53E-051.98E-047.47E-042.50E-033.47E-053.29E-042.74E-031.42E-02 + 84L31000.001.67E-056.51E-051.97E-045.61E-041.64E-059.62E-056.36E-042.89E-03 + 84L31500.006.36E-061.59E-053.64E-058.36E-056.23E-062.00E-058.88E-053.37E-04 + 84M1 5.152.16E+001.33E+048.68E+052.18E+072.32E+034.54E+061.78E+091.58E+11 + 84M1 6.151.79E+006.31E+034.31E+051.30E+071.36E+031.90E+065.62E+084.68E+10 + 84M1 8.151.24E+001.91E+031.42E+054.27E+065.87E+024.81E+059.26E+076.66E+09 + 84M1 12.156.66E-013.39E+022.71E+048.89E+051.78E+026.95E+047.57E+064.17E+08 + 84M1 19.152.96E-014.40E+013.54E+031.21E+054.58E+017.93E+034.74E+051.84E+07 + 84M1 28.001.42E-017.50E+005.75E+021.86E+041.48E+011.34E+035.05E+041.43E+06 + 84M1 43.005.86E-021.00E+006.76E+011.89E+034.16E+001.89E+024.41E+038.66E+04 + 84M1 55.003.45E-023.34E-011.93E+014.82E+022.02E+006.34E+011.14E+031.81E+04 + 84M1 73.001.84E-021.07E-014.55E+009.78E+018.80E-011.86E+012.50E+023.11E+03 + 84M1 106.007.87E-033.19E-027.30E-011.20E+012.98E-013.88E+003.65E+013.31E+02 + 84M1 155.003.28E-031.16E-021.35E-011.56E+001.00E-018.48E-015.68E+003.76E+01 + 84M1 285.008.25E-042.73E-031.47E-028.68E-021.81E-028.73E-023.60E-011.49E+00 + 84M1 500.002.54E-047.93E-042.81E-039.96E-033.95E-031.31E-023.73E-021.06E-01 + 84M2 4.854.76E+001.67E+061.93E+092.74E+113.16E+021.64E+051.63E+073.32E+08 + 84M2 5.853.74E+006.59E+055.72E+087.58E+101.80E+027.03E+046.49E+062.15E+08 + 84M2 7.852.33E+001.53E+058.66E+079.91E+097.47E+011.89E+041.51E+066.38E+07 + 84M2 11.851.05E+002.00E+046.46E+065.72E+082.18E+013.14E+031.94E+058.27E+06 + 84M2 18.853.69E-012.04E+033.69E+052.36E+075.48E+004.42E+021.98E+047.03E+05 + 84M2 28.001.38E-012.97E+023.41E+041.62E+061.70E+008.72E+012.91E+038.23E+04 + 84M2 43.004.44E-023.77E+012.72E+039.21E+044.80E-011.57E+013.77E+027.99E+03 + 84M2 55.002.25E-021.17E+016.54E+021.82E+042.34E-015.99E+001.19E+022.11E+03 + 84M2 73.001.01E-023.11E+001.31E+022.89E+031.03E-012.01E+003.19E+014.59E+02 + 84M2 106.003.43E-035.60E-011.63E+012.68E+023.51E-024.92E-015.82E+006.32E+01 + 84M2 155.001.13E-031.02E-012.10E+002.54E+011.19E-021.21E-011.07E+008.73E+00 + 84M2 285.001.95E-047.57E-039.17E-026.97E-012.15E-031.39E-027.86E-024.13E-01 + 84M2 500.004.11E-058.11E-046.38E-033.30E-024.52E-042.08E-038.17E-032.98E-02 + 84M3 4.301.48E+014.02E+065.27E+098.12E+114.09E+018.58E+069.73E+101.23E+14 + 84M3 5.301.03E+011.41E+061.33E+091.84E+112.17E+013.02E+062.29E+102.05E+13 + 84M3 7.305.43E+002.82E+051.65E+081.89E+108.23E+006.11E+052.51E+091.36E+12 + 84M3 11.302.03E+003.14E+049.95E+068.51E+082.19E+006.90E+041.25E+083.56E+10 + 84M3 18.306.07E-012.79E+034.75E+052.86E+075.06E-016.22E+034.74E+067.01E+08 + 84M3 28.001.91E-013.31E+023.38E+041.48E+061.39E-017.47E+022.74E+052.40E+07 + 84M3 43.005.52E-023.86E+012.44E+037.57E+043.81E-028.84E+011.63E+048.71E+05 + 84M3 55.002.64E-021.13E+015.47E+021.39E+041.82E-022.60E+013.30E+031.36E+05 + 84M3 73.001.11E-022.78E+009.93E+012.00E+037.76E-036.40E+005.42E+021.67E+04 + 84M3 106.003.44E-034.41E-011.07E+011.58E+022.55E-031.01E+005.27E+011.14E+03 + 84M3 155.001.04E-036.90E-021.14E+001.22E+018.26E-041.57E-015.23E+008.05E+01 + 84M3 285.001.54E-043.77E-033.42E-022.24E-011.39E-048.15E-031.49E-011.42E+00 + 84M3 500.002.92E-052.96E-041.59E-036.92E-032.81E-055.72E-046.62E-034.36E-02 + 84M4 3.803.94E+011.21E+054.58E+094.31E+131.27E+012.82E+051.61E+098.55E+11 + 84M4 4.801.95E+013.70E+048.89E+085.59E+125.99E+008.76E+043.32E+081.47E+11 + 84M4 6.806.45E+006.32E+037.70E+072.71E+111.93E+001.53E+043.21E+071.07E+10 + 84M4 10.801.36E+006.08E+022.98E+065.08E+094.21E-011.49E+031.51E+063.38E+08 + 84M4 17.802.27E-014.88E+018.90E+047.34E+077.86E-021.21E+025.83E+048.41E+06 + 84M4 28.004.16E-024.93E+003.71E+031.66E+061.66E-021.24E+013.22E+033.08E+05 + 84M4 43.007.84E-035.61E-011.86E+024.85E+043.71E-031.43E+002.16E+021.40E+04 + 84M4 55.002.95E-031.61E-013.37E+016.53E+031.55E-034.16E-014.68E+012.42E+03 + 84M4 73.009.43E-043.84E-024.80E+006.67E+025.61E-041.01E-018.20E+003.28E+02 + 84M4 106.002.07E-045.85E-033.79E-013.45E+011.45E-041.57E-028.50E-012.44E+01 + 84M4 155.004.40E-058.77E-043.01E-021.80E+003.58E-052.38E-038.77E-021.82E+00 + 84M4 285.003.75E-064.49E-056.11E-041.86E-023.72E-061.19E-042.51E-033.17E-02 + 84M4 500.004.16E-073.24E-062.17E-053.49E-044.53E-077.91E-061.05E-048.92E-04 + 84M5 3.686.04E+011.25E+059.63E+097.54E+137.40E+001.84E+049.04E+093.13E+14 + 84M5 4.682.89E+013.65E+041.78E+099.16E+123.42E+005.56E+031.68E+093.66E+13 + 84M5 6.689.19E+005.93E+031.46E+084.12E+111.08E+009.43E+021.40E+081.54E+12 + 84M5 10.681.85E+005.42E+025.38E+067.13E+092.32E-019.10E+015.27E+062.39E+10 + 84M5 17.682.96E-014.15E+011.54E+059.60E+074.34E-027.41E+001.56E+052.82E+08 + 84M5 28.005.13E-023.94E+005.97E+031.97E+069.16E-037.61E-016.28E+035.15E+06 + 84M5 43.009.42E-034.31E-012.89E+025.45E+042.09E-039.24E-023.15E+021.29E+05 + 84M5 55.003.48E-031.20E-015.09E+017.07E+038.86E-042.78E-025.67E+011.59E+04 + 84M5 73.001.09E-032.76E-026.94E+006.83E+023.27E-047.07E-037.91E+001.48E+03 + 84M5 106.002.36E-043.98E-035.08E-013.23E+018.72E-051.19E-035.95E-016.74E+01 + 84M5 155.004.95E-055.60E-043.62E-021.49E+002.25E-052.01E-044.31E-023.09E+00 + 84M5 285.004.31E-062.65E-055.70E-041.17E-022.59E-061.28E-056.76E-042.54E-02 + 84M5 500.005.06E-071.92E-061.50E-051.58E-043.80E-071.19E-061.66E-053.57E-04 + 84N+ 50.003.73E-021.27E+018.24E+023.51E+041.02E+005.27E+013.14E+031.44E+05 + 84N+ 70.001.50E-022.50E+001.10E+023.13E+033.78E-011.15E+013.97E+021.17E+04 + 84N+ 100.005.82E-034.67E-011.40E+012.71E+021.35E-012.45E+004.94E+019.33E+02 + 84N+ 150.001.99E-037.26E-021.43E+001.86E+014.21E-024.50E-015.21E+006.09E+01 + 84N+ 200.009.39E-042.04E-023.00E-013.01E+001.85E-021.43E-011.16E+009.81E+00 + 84N+ 500.001.08E-046.42E-043.69E-031.74E-021.49E-035.37E-031.81E-026.34E-02 + 85K 96.733.95E-013.44E-017.05E-023.38E-031.13E+017.00E+018.37E+012.23E+01 + 85K 97.433.88E-013.51E-018.71E-027.89E-031.11E+016.82E+018.46E+012.72E+01 + 85K 98.733.76E-013.63E-011.19E-012.05E-021.07E+016.52E+018.59E+013.63E+01 + 85K 101.933.49E-013.85E-011.96E-017.39E-029.76E+005.84E+018.73E+015.71E+01 + 85K 105.733.19E-013.99E-012.83E-011.72E-018.78E+005.14E+018.63E+017.79E+01 + 85K 110.002.90E-014.05E-013.69E-013.10E-017.83E+004.48E+018.32E+019.53E+01 + 85K 116.002.55E-014.01E-014.63E-015.23E-016.73E+003.73E+017.69E+011.10E+02 + 85K 124.002.17E-013.82E-015.45E-017.88E-015.56E+002.96E+016.73E+011.17E+02 + 85K 136.001.74E-013.43E-015.97E-011.08E+004.27E+002.16E+015.37E+011.11E+02 + 85K 149.001.39E-012.98E-015.92E-011.23E+003.29E+001.58E+014.15E+019.59E+01 + 85K 166.001.07E-012.45E-015.43E-011.26E+002.42E+001.09E+012.99E+017.46E+01 + 85K 179.008.90E-022.11E-014.94E-011.21E+001.96E+008.44E+002.34E+016.05E+01 + 85K 196.007.16E-021.75E-014.29E-011.10E+001.52E+006.21E+001.73E+014.58E+01 + 85K 219.005.49E-021.38E-013.52E-019.35E-011.11E+004.29E+001.19E+013.17E+01 + 85K 245.004.21E-021.08E-012.81E-017.60E-018.16E-012.96E+008.07E+002.14E+01 + 85K 310.002.45E-026.38E-021.69E-014.55E-014.28E-011.38E+003.56E+009.04E+00 + 85K 395.001.44E-023.77E-029.84E-022.53E-012.22E-016.46E-011.54E+003.65E+00 + 85K 490.009.14E-032.40E-026.08E-021.48E-011.25E-013.36E-017.48E-011.64E+00 + 85K 600.006.08E-031.60E-023.89E-028.94E-027.31E-021.85E-013.87E-017.92E-01 + 85K 830.003.29E-038.64E-031.95E-024.07E-023.14E-027.41E-021.41E-012.59E-01 + 85K 1100.001.98E-035.15E-031.10E-022.12E-021.52E-023.47E-026.17E-021.05E-01 + 85K 1350.001.40E-033.55E-037.32E-031.34E-029.00E-032.04E-023.48E-025.62E-02 + 85K 1600.001.05E-032.62E-035.24E-039.24E-035.82E-031.32E-022.20E-023.43E-02 + 85L1 18.491.16E+002.56E+025.25E+031.15E+042.40E+023.74E+041.18E+068.61E+06 + 85L1 19.191.10E+002.15E+025.10E+031.99E+042.15E+023.15E+049.72E+058.05E+06 + 85L1 20.499.86E-011.58E+024.55E+033.09E+041.77E+022.31E+046.85E+056.70E+06 + 85L1 23.697.75E-017.90E+012.99E+033.62E+041.15E+021.18E+043.15E+053.81E+06 + 85L1 27.495.97E-013.82E+011.71E+032.73E+047.39E+015.92E+031.43E+051.89E+06 + 85L1 31.004.79E-012.11E+011.03E+031.86E+045.17E+013.42E+037.52E+041.02E+06 + 85L1 37.003.41E-018.69E+004.58E+029.13E+033.06E+011.54E+032.94E+043.97E+05 + 85L1 45.002.31E-013.28E+001.78E+023.67E+031.72E+016.41E+021.05E+041.34E+05 + 85L1 57.001.41E-011.08E+005.44E+011.10E+038.58E+002.27E+023.08E+033.53E+04 + 85L1 70.009.04E-024.58E-011.92E+013.67E+024.70E+009.41E+011.08E+031.10E+04 + 85L1 87.005.58E-022.15E-016.51E+001.12E+022.49E+003.77E+013.63E+023.22E+03 + 85L1 100.004.07E-021.43E-013.33E+005.26E+011.66E+002.13E+011.83E+021.48E+03 + 85L1 117.002.85E-029.43E-021.61E+002.26E+011.06E+001.13E+018.52E+016.19E+02 + 85L1 140.001.89E-026.08E-027.44E-018.82E+006.32E-015.53E+003.63E+012.32E+02 + 85L1 165.001.29E-024.14E-023.86E-013.85E+003.96E-012.92E+001.69E+019.63E+01 + 85L1 230.006.08E-031.94E-021.18E-018.16E-011.55E-018.45E-013.82E+001.72E+01 + 85L1 315.003.04E-039.60E-034.41E-022.20E-016.51E-022.77E-011.00E+003.66E+00 + 85L1 410.001.74E-035.42E-032.08E-028.21E-023.18E-021.14E-013.50E-011.08E+00 + 85L1 520.001.08E-033.30E-031.10E-023.63E-021.68E-025.29E-021.42E-013.79E-01 + 85L1 750.005.38E-041.59E-034.44E-031.17E-026.39E-031.73E-023.90E-028.60E-02 + 85L11000.003.22E-049.19E-042.29E-035.23E-033.03E-037.61E-031.53E-022.98E-02 + 85L11500.001.62E-044.35E-049.58E-041.87E-031.07E-032.54E-034.56E-037.73E-03 + 85L2 17.782.60E+001.18E+041.40E+062.05E+072.88E+011.54E+031.57E+043.05E+04 + 85L2 18.482.35E+009.73E+031.13E+061.88E+072.57E+011.33E+031.54E+045.32E+04 + 85L2 19.781.97E+006.96E+037.70E+051.51E+072.09E+011.03E+031.41E+048.31E+04 + 85L2 22.981.32E+003.34E+033.30E+057.90E+061.34E+015.90E+029.86E+031.00E+05 + 85L2 26.788.69E-011.58E+031.39E+053.63E+068.49E+003.32E+026.08E+037.87E+04 + 85L2 31.005.79E-017.78E+026.07E+041.62E+065.50E+001.91E+023.60E+035.19E+04 + 85L2 37.003.50E-013.31E+022.23E+045.84E+053.25E+009.83E+011.82E+032.74E+04 + 85L2 45.001.99E-011.29E+027.38E+031.82E+051.83E+004.70E+018.19E+021.21E+04 + 85L2 57.009.98E-024.21E+011.96E+034.31E+049.14E-011.94E+013.03E+024.16E+03 + 85L2 70.005.43E-021.60E+016.22E+021.22E+045.02E-019.00E+001.26E+021.57E+03 + 85L2 87.002.83E-025.85E+001.87E+023.19E+032.67E-014.02E+004.91E+015.43E+02 + 85L2 100.001.87E-023.09E+008.75E+011.36E+031.79E-012.41E+002.68E+012.73E+02 + 85L2 117.001.17E-021.51E+003.74E+015.19E+021.14E-011.36E+001.36E+011.25E+02 + 85L2 140.006.80E-036.78E-011.43E+011.75E+026.84E-027.07E-016.27E+005.12E+01 + 85L2 165.004.16E-033.28E-016.02E+006.53E+014.29E-023.92E-013.10E+002.27E+01 + 85L2 230.001.56E-037.83E-021.09E+009.29E+001.68E-021.21E-017.61E-014.44E+00 + 85L2 315.006.31E-042.12E-022.29E-011.57E+007.00E-034.08E-022.08E-019.86E-01 + 85L2 410.003.01E-047.38E-036.54E-023.75E-013.37E-031.68E-027.24E-022.90E-01 + 85L2 520.001.57E-042.95E-032.21E-021.09E-011.75E-037.65E-032.88E-021.00E-01 + 85L2 750.006.03E-057.72E-044.55E-031.81E-026.40E-042.37E-037.33E-032.10E-02 + 85L21000.002.92E-052.87E-041.43E-034.91E-032.91E-049.71E-042.64E-036.59E-03 + 85L21500.001.09E-057.78E-053.15E-049.05E-049.52E-052.88E-046.74E-041.44E-03 + 85L3 15.216.00E+002.91E+044.39E+068.14E+073.79E+006.18E+045.77E+076.10E+09 + 85L3 15.915.28E+002.32E+043.36E+066.98E+073.31E+004.94E+044.26E+074.33E+09 + 85L3 17.214.21E+001.56E+042.10E+065.03E+072.60E+003.34E+042.51E+072.38E+09 + 85L3 20.412.57E+006.62E+037.55E+052.13E+071.54E+001.43E+047.97E+066.50E+08 + 85L3 24.211.55E+002.80E+032.72E+058.06E+069.14E-016.10E+032.55E+061.79E+08 + 85L3 31.007.34E-018.07E+026.18E+041.79E+064.30E-011.78E+034.96E+052.79E+07 + 85L3 37.004.26E-013.32E+022.14E+045.84E+052.50E-017.39E+021.55E+057.47E+06 + 85L3 45.002.31E-011.24E+026.63E+031.65E+051.38E-012.79E+024.35E+041.76E+06 + 85L3 57.001.09E-013.81E+011.62E+033.50E+046.73E-028.63E+019.51E+033.12E+05 + 85L3 70.005.66E-021.37E+014.75E+028.97E+033.61E-023.12E+012.58E+037.09E+04 + 85L3 87.002.81E-024.66E+001.30E+022.11E+031.88E-021.06E+016.61E+021.51E+04 + 85L3 100.001.79E-022.34E+005.72E+018.33E+021.23E-025.35E+002.79E+025.67E+03 + 85L3 117.001.08E-021.08E+002.26E+012.93E+027.71E-032.47E+001.07E+021.90E+03 + 85L3 140.006.02E-034.49E-017.88E+008.87E+014.51E-031.02E+003.60E+015.56E+02 + 85L3 165.003.54E-032.02E-013.02E+002.98E+012.77E-034.57E-011.35E+011.83E+02 + 85L3 230.001.23E-034.09E-024.44E-013.38E+001.04E-039.08E-021.94E+002.04E+01 + 85L3 315.004.60E-049.34E-037.52E-024.49E-014.15E-042.00E-023.23E-012.74E+00 + 85L3 410.002.07E-042.80E-031.77E-028.71E-021.95E-045.72E-037.50E-025.38E-01 + 85L3 520.001.03E-049.81E-045.01E-032.10E-029.97E-051.89E-032.07E-021.29E-01 + 85L3 750.003.72E-052.12E-047.97E-042.66E-033.66E-053.60E-043.01E-031.56E-02 + 85L31000.001.74E-056.94E-052.10E-045.99E-041.73E-051.05E-046.98E-043.17E-03 + 85L31500.006.67E-061.68E-053.88E-058.92E-056.54E-062.16E-059.71E-053.69E-04 + 85M1 5.322.02E+001.27E+048.22E+051.89E+072.33E+034.33E+061.62E+091.39E+11 + 85M1 6.321.69E+006.17E+034.16E+051.19E+071.39E+031.86E+065.30E+084.27E+10 + 85M1 8.321.18E+001.92E+031.40E+054.11E+066.11E+024.85E+059.12E+076.37E+09 + 85M1 12.326.45E-013.52E+022.74E+048.78E+051.89E+027.25E+047.77E+064.19E+08 + 85M1 19.322.91E-014.72E+013.66E+031.22E+054.94E+018.46E+035.01E+051.91E+07 + 85M1 28.001.43E-018.51E+006.27E+021.98E+041.64E+011.49E+035.61E+041.58E+06 + 85M1 43.005.92E-021.16E+007.46E+012.04E+034.60E+002.10E+024.88E+039.53E+04 + 85M1 55.003.49E-023.84E-012.14E+015.25E+022.23E+007.02E+011.26E+031.99E+04 + 85M1 73.001.87E-021.21E-015.11E+001.08E+029.73E-012.05E+012.75E+023.41E+03 + 85M1 106.008.04E-033.48E-028.23E-011.34E+013.29E-014.29E+004.02E+013.63E+02 + 85M1 155.003.36E-031.24E-021.51E-011.74E+001.11E-019.34E-016.23E+004.11E+01 + 85M1 285.008.54E-042.88E-031.60E-029.57E-022.00E-029.59E-023.94E-011.62E+00 + 85M1 500.002.65E-048.39E-043.03E-031.08E-024.35E-031.44E-024.07E-021.15E-01 + 85M2 5.014.46E+001.56E+061.73E+092.37E+113.20E+021.58E+051.51E+072.94E+08 + 85M2 6.013.54E+006.32E+055.30E+086.80E+101.86E+026.93E+046.17E+061.95E+08 + 85M2 8.012.24E+001.52E+058.38E+079.32E+097.86E+011.92E+041.48E+066.03E+07 + 85M2 12.011.03E+002.05E+046.51E+065.64E+082.34E+013.28E+031.98E+058.18E+06 + 85M2 19.013.70E-012.14E+033.83E+052.41E+075.97E+004.71E+022.06E+047.18E+05 + 85M2 28.001.43E-013.25E+023.71E+041.74E+061.90E+009.58E+013.16E+038.82E+04 + 85M2 43.004.62E-024.13E+012.96E+039.95E+045.37E-011.73E+014.09E+028.59E+03 + 85M2 55.002.35E-021.28E+017.13E+021.97E+042.61E-016.58E+001.29E+022.27E+03 + 85M2 73.001.06E-023.41E+001.42E+023.13E+031.15E-012.21E+003.47E+014.95E+02 + 85M2 106.003.62E-036.14E-011.79E+012.91E+023.93E-025.42E-016.35E+006.84E+01 + 85M2 155.001.20E-031.12E-012.30E+002.77E+011.33E-021.34E-011.17E+009.48E+00 + 85M2 285.002.09E-048.34E-031.01E-017.63E-012.41E-031.54E-028.64E-024.51E-01 + 85M2 500.004.45E-058.97E-047.04E-033.63E-025.10E-042.31E-039.04E-033.28E-02 + 85M3 4.431.41E+013.77E+064.74E+097.04E+113.98E+018.30E+069.03E+101.10E+14 + 85M3 5.439.82E+001.36E+061.24E+091.66E+112.15E+013.00E+062.20E+101.92E+13 + 85M3 7.435.28E+002.80E+051.60E+081.78E+108.31E+006.26E+052.53E+091.34E+12 + 85M3 11.432.01E+003.22E+041.00E+078.36E+082.25E+007.28E+041.31E+083.69E+10 + 85M3 18.436.10E-012.92E+034.89E+052.90E+075.27E-016.70E+035.11E+067.51E+08 + 85M3 28.001.96E-013.57E+023.63E+041.56E+061.48E-018.33E+023.09E+052.70E+07 + 85M3 43.005.70E-024.18E+012.61E+038.03E+044.05E-029.85E+011.83E+049.79E+05 + 85M3 55.002.73E-021.22E+015.87E+021.48E+041.93E-022.90E+013.70E+031.52E+05 + 85M3 73.001.15E-023.00E+001.06E+022.12E+038.25E-037.13E+006.07E+021.87E+04 + 85M3 106.003.59E-034.76E-011.15E+011.68E+022.71E-031.13E+005.89E+011.27E+03 + 85M3 155.001.08E-037.45E-021.22E+001.30E+018.78E-041.74E-015.83E+008.96E+01 + 85M3 285.001.63E-044.07E-033.67E-022.39E-011.48E-049.05E-031.66E-011.57E+00 + 85M3 500.003.06E-053.19E-041.71E-037.40E-032.98E-056.32E-047.34E-034.82E-02 + 85M4 3.913.73E+011.14E+054.11E+093.75E+131.24E+012.74E+051.50E+097.70E+11 + 85M4 4.911.88E+013.57E+048.32E+085.13E+125.96E+008.76E+043.21E+081.39E+11 + 85M4 6.916.36E+006.31E+037.55E+072.64E+111.97E+001.58E+043.26E+071.06E+10 + 85M4 10.911.37E+006.27E+023.05E+065.20E+094.37E-011.59E+031.59E+063.51E+08 + 85M4 17.912.34E-015.13E+019.37E+047.76E+078.28E-021.32E+026.30E+048.97E+06 + 85M4 28.004.40E-025.36E+004.08E+031.85E+061.79E-021.39E+013.61E+033.43E+05 + 85M4 43.008.35E-036.12E-012.05E+025.39E+044.01E-031.61E+002.43E+021.56E+04 + 85M4 55.003.15E-031.76E-013.71E+017.27E+031.68E-034.68E-015.25E+012.70E+03 + 85M4 73.001.01E-034.20E-025.28E+007.43E+026.09E-041.13E-019.19E+003.67E+02 + 85M4 106.002.23E-046.42E-034.18E-013.84E+011.57E-041.76E-029.54E-012.73E+01 + 85M4 155.004.74E-059.65E-043.32E-022.00E+003.90E-052.68E-039.84E-022.03E+00 + 85M4 285.004.06E-064.96E-056.74E-042.08E-024.07E-061.35E-042.82E-033.56E-02 + 85M4 500.004.51E-073.59E-062.40E-053.90E-044.96E-078.90E-061.19E-041.00E-03 + 85M5 3.795.72E+011.15E+058.75E+096.60E+137.20E+001.74E+048.47E+092.82E+14 + 85M5 4.792.79E+013.47E+041.69E+098.45E+123.39E+005.42E+031.64E+093.48E+13 + 85M5 6.799.07E+005.82E+031.45E+084.02E+111.09E+009.50E+021.43E+081.55E+12 + 85M5 10.791.86E+005.48E+025.56E+067.31E+092.40E-019.43E+015.60E+062.53E+10 + 85M5 17.793.05E-014.28E+011.63E+051.02E+084.55E-027.83E+001.70E+053.09E+08 + 85M5 28.005.42E-024.20E+006.62E+032.19E+069.81E-038.27E-017.14E+035.93E+06 + 85M5 43.009.99E-034.61E-013.20E+026.05E+042.24E-031.00E-013.58E+021.48E+05 + 85M5 55.003.71E-031.29E-015.64E+017.83E+039.52E-043.02E-026.44E+011.83E+04 + 85M5 73.001.17E-032.96E-027.69E+007.57E+023.52E-047.67E-038.99E+001.69E+03 + 85M5 106.002.53E-044.27E-035.63E-013.57E+019.39E-051.29E-036.76E-017.71E+01 + 85M5 155.005.35E-056.03E-044.01E-021.65E+002.42E-052.18E-044.89E-023.52E+00 + 85M5 285.004.71E-062.86E-056.31E-041.30E-022.80E-061.39E-057.64E-042.88E-02 + 85M5 500.005.53E-072.08E-061.66E-051.75E-044.11E-071.29E-061.87E-054.04E-04 + 85N+ 50.003.88E-021.40E+019.03E+023.87E+041.15E+005.93E+013.56E+031.64E+05 + 85N+ 70.001.56E-022.74E+001.21E+023.44E+034.25E-011.29E+014.48E+021.33E+04 + 85N+ 100.006.09E-035.13E-011.54E+012.97E+021.52E-012.75E+005.55E+011.05E+03 + 85N+ 150.002.09E-037.98E-021.57E+002.04E+014.72E-025.04E-015.84E+006.83E+01 + 85N+ 200.009.91E-042.25E-023.30E-013.31E+002.08E-021.60E-011.30E+001.10E+01 + 85N+ 500.001.14E-047.02E-044.08E-031.92E-021.67E-035.99E-032.01E-027.04E-02 + 86K 99.403.75E-013.14E-016.35E-023.01E-031.14E+016.75E+017.81E+012.02E+01 + 86K 100.103.68E-013.20E-017.81E-026.93E-031.12E+016.59E+017.89E+012.45E+01 + 86K 101.403.57E-013.31E-011.06E-011.78E-021.08E+016.30E+018.02E+013.26E+01 + 86K 104.603.32E-013.51E-011.74E-016.37E-029.85E+005.67E+018.16E+015.11E+01 + 86K 108.403.04E-013.65E-012.52E-011.48E-018.88E+005.01E+018.09E+016.97E+01 + 86K 112.002.81E-013.71E-013.17E-012.48E-018.08E+004.48E+017.87E+018.34E+01 + 86K 118.002.48E-013.70E-014.06E-014.34E-016.96E+003.74E+017.33E+019.85E+01 + 86K 126.002.12E-013.56E-014.87E-016.75E-015.77E+002.99E+016.48E+011.07E+02 + 86K 138.001.70E-013.22E-015.43E-019.50E-014.45E+002.18E+015.22E+011.03E+02 + 86K 151.001.37E-012.83E-015.47E-011.11E+003.45E+001.61E+014.08E+019.03E+01 + 86K 168.001.06E-012.35E-015.10E-011.16E+002.55E+001.12E+012.96E+017.13E+01 + 86K 181.008.84E-022.04E-014.68E-011.13E+002.06E+008.68E+002.34E+015.83E+01 + 86K 198.007.13E-021.70E-014.11E-011.04E+001.60E+006.42E+001.74E+014.46E+01 + 86K 221.005.49E-021.35E-013.41E-018.95E-011.18E+004.45E+001.20E+013.12E+01 + 86K 250.004.12E-021.03E-012.69E-017.20E-018.38E-012.96E+007.88E+002.04E+01 + 86K 315.002.43E-026.26E-021.66E-014.41E-014.44E-011.41E+003.55E+008.82E+00 + 86K 400.001.44E-023.76E-029.80E-022.50E-012.32E-016.66E-011.56E+003.64E+00 + 86K 490.009.44E-032.48E-026.27E-021.52E-011.35E-013.60E-017.93E-011.73E+00 + 86K 600.006.30E-031.66E-024.05E-029.26E-027.91E-021.99E-014.11E-018.34E-01 + 86K 830.003.41E-039.02E-032.04E-024.25E-023.39E-027.95E-021.50E-012.74E-01 + 86K 1100.002.06E-035.39E-031.15E-022.22E-021.64E-023.73E-026.58E-021.11E-01 + 86K 1350.001.45E-033.73E-037.70E-031.41E-029.68E-032.19E-023.71E-025.97E-02 + 86K 1600.001.09E-032.75E-035.52E-039.73E-036.25E-031.42E-022.35E-023.65E-02 + 86L1 19.051.09E+002.43E+024.78E+031.00E+042.42E+023.60E+041.10E+067.69E+06 + 86L1 19.751.03E+002.06E+024.65E+031.73E+042.17E+023.04E+049.04E+057.21E+06 + 86L1 21.059.34E-011.53E+024.18E+032.69E+041.80E+022.25E+046.43E+056.05E+06 + 86L1 24.257.39E-017.80E+012.80E+033.22E+041.18E+021.17E+043.02E+053.51E+06 + 86L1 28.055.73E-013.86E+011.63E+032.49E+047.65E+015.96E+031.39E+051.78E+06 + 86L1 31.004.78E-012.36E+011.08E+031.84E+045.69E+013.77E+038.17E+041.08E+06 + 86L1 37.003.42E-019.86E+004.89E+029.30E+033.37E+011.69E+033.20E+044.20E+05 + 86L1 45.002.32E-013.76E+001.92E+023.82E+031.89E+017.05E+021.14E+041.43E+05 + 86L1 57.001.42E-011.24E+005.96E+011.17E+039.43E+002.50E+023.36E+033.78E+04 + 86L1 70.009.15E-025.18E-012.13E+013.94E+025.16E+001.03E+021.17E+031.18E+04 + 86L1 87.005.66E-022.37E-017.25E+001.22E+022.74E+004.14E+013.95E+023.47E+03 + 86L1 100.004.14E-021.55E-013.71E+005.74E+011.83E+002.33E+011.99E+021.59E+03 + 86L1 117.002.90E-021.01E-011.80E+002.48E+011.16E+001.23E+019.27E+016.68E+02 + 86L1 140.001.93E-026.42E-028.26E-019.71E+006.95E-016.05E+003.95E+012.51E+02 + 86L1 165.001.33E-024.34E-024.26E-014.24E+004.35E-013.20E+001.84E+011.04E+02 + 86L1 230.006.25E-032.03E-021.29E-018.95E-011.71E-019.24E-014.14E+001.86E+01 + 86L1 315.003.14E-031.00E-024.76E-022.40E-017.13E-023.02E-011.09E+003.95E+00 + 86L1 410.001.81E-035.69E-032.23E-028.89E-023.48E-021.24E-013.80E-011.16E+00 + 86L1 520.001.12E-033.47E-031.18E-023.92E-021.84E-025.76E-021.54E-014.10E-01 + 86L1 750.005.63E-041.68E-034.75E-031.25E-026.98E-031.89E-024.23E-029.30E-02 + 86L11000.003.37E-049.73E-042.45E-035.61E-033.30E-038.27E-031.66E-023.22E-02 + 86L11500.001.70E-044.62E-041.02E-032.00E-031.16E-032.76E-034.94E-038.35E-03 + 86L2 18.342.46E+001.10E+041.26E+061.77E+072.92E+011.48E+031.45E+042.70E+04 + 86L2 19.042.23E+009.15E+031.02E+061.63E+072.61E+011.29E+031.43E+044.67E+04 + 86L2 20.341.88E+006.61E+037.03E+051.32E+072.14E+011.01E+031.31E+047.33E+04 + 86L2 23.541.27E+003.23E+033.09E+057.09E+061.39E+015.83E+029.32E+039.02E+04 + 86L2 27.348.48E-011.56E+031.33E+053.34E+068.88E+003.32E+025.84E+037.24E+04 + 86L2 31.005.98E-018.46E+026.51E+041.68E+066.11E+002.07E+023.75E+035.15E+04 + 86L2 37.003.64E-013.60E+022.39E+046.11E+053.62E+001.07E+021.91E+032.78E+04 + 86L2 45.002.07E-011.41E+027.94E+031.91E+052.03E+005.11E+018.69E+021.25E+04 + 86L2 57.001.04E-014.59E+012.11E+034.57E+041.02E+002.11E+013.24E+024.35E+03 + 86L2 70.005.69E-021.75E+016.72E+021.30E+045.59E-019.81E+001.35E+021.65E+03 + 86L2 87.002.98E-026.38E+002.03E+023.41E+032.98E-014.39E+005.28E+015.76E+02 + 86L2 100.001.97E-023.37E+009.49E+011.45E+032.00E-012.63E+002.89E+012.91E+02 + 86L2 117.001.23E-021.65E+004.06E+015.58E+021.27E-011.48E+001.47E+011.34E+02 + 86L2 140.007.20E-037.40E-011.56E+011.88E+027.64E-027.75E-016.79E+005.49E+01 + 86L2 165.004.42E-033.59E-016.55E+007.05E+014.79E-024.30E-013.36E+002.44E+01 + 86L2 230.001.67E-038.58E-021.19E+001.01E+011.88E-021.33E-018.29E-014.80E+00 + 86L2 315.006.76E-042.32E-022.51E-011.71E+007.84E-034.50E-022.28E-011.07E+00 + 86L2 410.003.23E-048.11E-037.17E-024.09E-013.78E-031.85E-027.95E-023.17E-01 + 86L2 520.001.70E-043.25E-032.43E-021.19E-011.96E-038.48E-033.16E-021.09E-01 + 86L2 750.006.52E-058.52E-045.02E-031.99E-027.19E-042.63E-038.10E-032.30E-02 + 86L21000.003.19E-053.17E-041.58E-035.41E-033.27E-041.08E-032.92E-037.27E-03 + 86L21500.001.20E-058.61E-053.49E-041.00E-031.07E-043.22E-047.49E-041.59E-03 + 86L3 15.625.69E+002.74E+043.97E+067.16E+073.70E+006.00E+045.40E+075.54E+09 + 86L3 16.325.03E+002.20E+043.06E+066.16E+073.24E+004.82E+044.02E+073.97E+09 + 86L3 17.624.04E+001.49E+041.93E+064.48E+072.56E+003.29E+042.40E+072.21E+09 + 86L3 20.822.49E+006.43E+037.12E+051.94E+071.54E+001.43E+047.81E+066.22E+08 + 86L3 24.621.51E+002.77E+032.61E+057.50E+069.19E-016.21E+032.55E+061.75E+08 + 86L3 31.007.56E-018.67E+026.56E+041.86E+064.54E-011.97E+035.53E+053.10E+07 + 86L3 37.004.39E-013.56E+022.27E+046.08E+052.65E-018.17E+021.73E+058.28E+06 + 86L3 45.002.38E-011.34E+027.05E+031.72E+051.46E-013.09E+024.84E+041.95E+06 + 86L3 57.001.13E-014.09E+011.72E+033.67E+047.12E-029.54E+011.06E+043.46E+05 + 86L3 70.005.87E-021.47E+015.05E+029.42E+033.82E-023.45E+012.87E+037.84E+04 + 86L3 87.002.91E-025.00E+001.39E+022.22E+031.98E-021.18E+017.34E+021.67E+04 + 86L3 100.001.86E-022.51E+006.08E+018.78E+021.31E-025.91E+003.10E+026.26E+03 + 86L3 117.001.12E-021.16E+002.41E+013.08E+028.16E-032.73E+001.18E+022.10E+03 + 86L3 140.006.27E-034.82E-018.40E+009.36E+014.77E-031.13E+003.99E+016.13E+02 + 86L3 165.003.70E-032.17E-013.22E+003.15E+012.93E-035.05E-011.49E+012.02E+02 + 86L3 230.001.29E-034.40E-024.73E-013.58E+001.10E-031.00E-012.14E+002.25E+01 + 86L3 315.004.84E-041.00E-028.02E-024.76E-014.39E-042.20E-023.56E-013.02E+00 + 86L3 410.002.18E-043.00E-031.89E-029.25E-022.06E-046.28E-038.26E-025.91E-01 + 86L3 520.001.08E-041.05E-035.35E-032.23E-021.05E-042.07E-032.28E-021.42E-01 + 86L3 750.003.90E-052.26E-048.51E-042.84E-033.86E-053.93E-043.31E-031.71E-02 + 86L31000.001.84E-057.38E-052.24E-046.39E-041.82E-051.14E-047.66E-043.48E-03 + 86L31500.006.98E-061.78E-054.12E-059.52E-056.87E-062.33E-051.06E-044.04E-04 + 86M1 5.481.90E+001.23E+047.86E+051.67E+072.34E+034.15E+061.49E+091.23E+11 + 86M1 6.481.60E+006.07E+034.04E+051.09E+071.42E+031.83E+065.04E+083.93E+10 + 86M1 8.481.13E+001.94E+031.38E+053.98E+066.36E+024.91E+059.01E+076.13E+09 + 86M1 12.486.25E-013.66E+022.76E+048.70E+052.00E+027.56E+047.99E+064.22E+08 + 86M1 19.482.86E-015.07E+013.80E+031.24E+055.31E+019.03E+035.30E+051.99E+07 + 86M1 28.001.43E-019.62E+006.82E+022.10E+041.81E+011.65E+036.22E+041.74E+06 + 86M1 43.005.98E-021.32E+008.22E+012.20E+035.08E+002.33E+025.39E+031.05E+05 + 86M1 55.003.54E-024.40E-012.38E+015.71E+022.46E+007.77E+011.38E+032.18E+04 + 86M1 73.001.90E-021.37E-015.72E+001.18E+021.07E+002.27E+013.03E+023.74E+03 + 86M1 106.008.20E-033.81E-029.25E-011.48E+013.63E-014.72E+004.41E+013.97E+02 + 86M1 155.003.45E-031.32E-021.69E-011.93E+001.22E-011.03E+006.82E+004.48E+01 + 86M1 285.008.85E-043.03E-031.75E-021.06E-012.20E-021.05E-014.30E-011.77E+00 + 86M1 500.002.76E-048.88E-043.27E-031.18E-024.77E-031.57E-024.44E-021.25E-01 + 86M2 5.164.20E+001.47E+061.56E+092.08E+113.27E+021.53E+051.41E+072.63E+08 + 86M2 6.163.36E+006.09E+054.95E+086.16E+101.92E+026.86E+045.91E+061.79E+08 + 86M2 8.162.16E+001.51E+058.15E+078.82E+098.29E+011.96E+041.47E+065.75E+07 + 86M2 12.161.01E+002.10E+046.58E+065.58E+082.52E+013.43E+032.02E+058.11E+06 + 86M2 19.163.70E-012.25E+033.98E+052.46E+076.51E+005.01E+022.16E+047.34E+05 + 86M2 28.001.47E-013.55E+024.05E+041.88E+062.12E+001.05E+023.43E+039.45E+04 + 86M2 43.004.79E-024.51E+013.23E+031.08E+056.00E-011.90E+014.45E+029.23E+03 + 86M2 55.002.45E-021.40E+017.77E+022.13E+042.92E-017.24E+001.40E+022.44E+03 + 86M2 73.001.11E-023.73E+001.55E+023.39E+031.29E-012.43E+003.78E+015.35E+02 + 86M2 106.003.82E-036.74E-011.95E+013.16E+024.40E-025.97E-016.92E+007.41E+01 + 86M2 155.001.28E-031.23E-012.51E+003.01E+011.50E-021.48E-011.28E+001.03E+01 + 86M2 285.002.23E-049.19E-031.11E-018.35E-012.71E-031.71E-029.50E-024.93E-01 + 86M2 500.004.80E-059.92E-047.77E-033.99E-025.74E-042.57E-039.98E-033.60E-02 + 86M3 4.541.35E+013.59E+064.35E+096.29E+113.92E+018.15E+068.58E+101.02E+14 + 86M3 5.549.49E+001.32E+061.17E+091.53E+112.15E+013.01E+062.16E+101.85E+13 + 86M3 7.545.16E+002.81E+051.57E+081.70E+108.43E+006.46E+052.57E+091.35E+12 + 86M3 11.541.99E+003.31E+041.01E+078.30E+082.32E+007.71E+041.39E+083.87E+10 + 86M3 18.546.13E-013.05E+035.06E+052.95E+075.50E-017.24E+035.52E+068.10E+08 + 86M3 28.002.01E-013.86E+023.89E+041.66E+061.57E-019.26E+023.47E+053.05E+07 + 86M3 43.005.89E-024.51E+012.80E+038.51E+044.30E-021.10E+022.05E+041.10E+06 + 86M3 55.002.83E-021.32E+016.28E+021.57E+042.05E-023.23E+014.15E+031.71E+05 + 86M3 73.001.19E-023.24E+001.14E+022.25E+038.76E-037.92E+006.79E+022.09E+04 + 86M3 106.003.74E-035.15E-011.23E+011.78E+022.88E-031.25E+006.58E+011.41E+03 + 86M3 155.001.14E-038.05E-021.31E+001.38E+019.33E-041.94E-016.50E+009.96E+01 + 86M3 285.001.71E-044.39E-033.93E-022.55E-011.57E-041.00E-021.84E-011.74E+00 + 86M3 500.003.22E-053.43E-041.83E-037.92E-033.17E-056.97E-048.13E-035.33E-02 + 86M4 4.023.53E+011.06E+053.70E+093.27E+131.21E+012.67E+051.39E+096.94E+11 + 86M4 5.021.81E+013.45E+047.78E+084.70E+125.92E+008.77E+043.11E+081.31E+11 + 86M4 7.026.27E+006.30E+037.40E+072.56E+112.00E+001.63E+043.29E+071.05E+10 + 86M4 11.021.38E+006.46E+023.12E+065.31E+094.53E-011.70E+031.67E+063.63E+08 + 86M4 18.022.41E-015.40E+019.86E+048.20E+078.72E-021.43E+026.79E+049.56E+06 + 86M4 28.004.66E-025.84E+004.49E+032.06E+061.93E-021.56E+014.05E+033.83E+05 + 86M4 43.008.89E-036.68E-012.25E+026.00E+044.34E-031.81E+002.72E+021.74E+04 + 86M4 55.003.36E-031.92E-014.09E+018.08E+031.82E-035.26E-015.88E+013.02E+03 + 86M4 73.001.08E-034.60E-025.82E+008.25E+026.60E-041.27E-011.03E+014.09E+02 + 86M4 106.002.39E-047.05E-034.60E-014.27E+011.71E-041.98E-021.07E+003.05E+01 + 86M4 155.005.12E-051.06E-033.66E-022.23E+004.25E-053.01E-031.10E-012.27E+00 + 86M4 285.004.43E-065.47E-057.44E-042.31E-024.44E-061.51E-043.17E-033.99E-02 + 86M4 500.004.97E-073.95E-062.65E-054.35E-045.42E-071.00E-051.34E-041.13E-03 + 86M5 3.895.43E+011.07E+057.98E+095.80E+137.01E+001.65E+047.94E+092.55E+14 + 86M5 4.892.69E+013.30E+041.60E+097.80E+123.36E+005.29E+031.60E+093.31E+13 + 86M5 6.898.95E+005.72E+031.44E+083.92E+111.11E+009.56E+021.46E+081.56E+12 + 86M5 10.891.88E+005.54E+025.74E+067.48E+092.48E-019.76E+015.94E+062.68E+10 + 86M5 17.893.13E-014.42E+011.73E+051.07E+084.76E-028.25E+001.85E+053.38E+08 + 86M5 28.005.73E-024.47E+007.32E+032.43E+061.05E-028.97E-018.10E+036.81E+06 + 86M5 43.001.06E-024.92E-013.54E+026.70E+042.40E-031.09E-014.06E+021.70E+05 + 86M5 55.003.94E-031.38E-016.24E+018.67E+031.02E-033.27E-027.31E+012.09E+04 + 86M5 73.001.24E-033.17E-028.52E+008.38E+023.78E-048.31E-031.02E+011.93E+03 + 86M5 106.002.71E-044.59E-036.24E-013.96E+011.01E-041.40E-037.66E-018.80E+01 + 86M5 155.005.71E-056.49E-044.44E-021.82E+002.61E-052.36E-045.54E-024.01E+00 + 86M5 285.004.95E-063.09E-056.97E-041.44E-023.02E-061.51E-058.62E-043.27E-02 + 86M5 500.006.22E-072.25E-061.83E-051.94E-044.44E-071.40E-062.09E-054.57E-04 + 86N+ 50.004.05E-021.55E+011.00E+034.30E+041.28E+006.65E+014.05E+031.88E+05 + 86N+ 70.001.64E-023.05E+001.34E+023.82E+034.74E-011.45E+015.09E+021.52E+04 + 86N+ 100.006.38E-035.70E-011.70E+013.29E+021.69E-013.07E+006.27E+011.20E+03 + 86N+ 150.002.19E-038.86E-021.74E+002.26E+015.27E-025.62E-016.55E+007.71E+01 + 86N+ 200.001.04E-032.49E-023.67E-013.67E+002.31E-021.78E-011.45E+001.23E+01 + 86N+ 500.001.21E-047.72E-044.54E-032.14E-021.86E-036.64E-032.23E-027.82E-02 + 87K 102.143.55E-012.87E-015.76E-022.71E-031.15E+016.53E+017.31E+011.84E+01 + 87K 102.843.49E-012.93E-017.04E-026.13E-031.13E+016.38E+017.38E+012.22E+01 + 87K 104.143.39E-013.03E-019.50E-021.55E-021.09E+016.11E+017.50E+012.94E+01 + 87K 107.343.15E-013.21E-011.55E-015.53E-029.97E+005.51E+017.64E+014.58E+01 + 87K 111.142.90E-013.34E-012.24E-011.28E-019.01E+004.89E+017.59E+016.25E+01 + 87K 115.002.67E-013.40E-012.87E-012.22E-018.17E+004.35E+017.39E+017.58E+01 + 87K 121.002.37E-013.41E-013.68E-013.87E-017.06E+003.65E+016.91E+018.95E+01 + 87K 129.002.03E-013.29E-014.42E-016.02E-015.88E+002.93E+016.14E+019.72E+01 + 87K 141.001.64E-013.00E-014.97E-018.54E-014.57E+002.16E+014.99E+019.49E+01 + 87K 154.001.33E-012.65E-015.05E-011.01E+003.55E+001.60E+013.93E+018.41E+01 + 87K 171.001.03E-012.23E-014.76E-011.07E+002.64E+001.12E+012.88E+016.72E+01 + 87K 184.008.66E-021.95E-014.41E-011.05E+002.15E+008.77E+002.29E+015.55E+01 + 87K 201.007.02E-021.64E-013.91E-019.80E-011.68E+006.53E+001.72E+014.28E+01 + 87K 224.005.44E-021.31E-013.28E-018.52E-011.24E+004.55E+001.20E+013.03E+01 + 87K 250.004.21E-021.04E-012.68E-017.10E-019.13E-013.17E+008.26E+002.09E+01 + 87K 315.002.50E-026.37E-021.68E-014.44E-014.84E-011.51E+003.74E+009.13E+00 + 87K 400.001.48E-023.86E-021.00E-012.56E-012.53E-017.15E-011.66E+003.80E+00 + 87K 490.009.75E-032.56E-026.48E-021.57E-011.47E-013.87E-018.41E-011.81E+00 + 87K 600.006.52E-031.73E-024.21E-029.61E-028.59E-022.13E-014.37E-018.79E-01 + 87K 830.003.54E-039.42E-032.14E-024.45E-023.67E-028.55E-021.60E-012.90E-01 + 87K 1100.002.15E-035.65E-031.21E-022.33E-021.77E-024.01E-027.03E-021.18E-01 + 87K 1350.001.51E-033.91E-038.11E-031.48E-021.04E-022.35E-023.97E-026.35E-02 + 87K 1600.001.14E-032.89E-035.82E-031.03E-026.74E-031.53E-022.51E-023.88E-02 + 87L1 19.641.03E+002.30E+024.33E+038.73E+032.43E+023.44E+041.01E+066.83E+06 + 87L1 20.349.73E-011.96E+024.23E+031.50E+042.19E+022.93E+048.36E+056.43E+06 + 87L1 21.648.82E-011.47E+023.82E+032.34E+041.82E+022.19E+046.01E+055.44E+06 + 87L1 24.847.02E-017.68E+012.61E+032.86E+041.21E+021.15E+042.89E+053.22E+06 + 87L1 28.645.49E-013.88E+011.56E+032.26E+047.93E+015.98E+031.35E+051.67E+06 + 87L1 32.004.49E-012.27E+019.86E+021.63E+045.71E+013.60E+037.51E+049.55E+05 + 87L1 38.003.25E-019.79E+004.59E+028.43E+033.43E+011.65E+033.03E+043.85E+05 + 87L1 46.002.23E-013.87E+001.86E+023.57E+031.95E+017.05E+021.11E+041.35E+05 + 87L1 58.001.38E-011.31E+005.98E+011.13E+039.88E+002.55E+023.34E+033.67E+04 + 87L1 71.008.97E-025.56E-012.19E+013.92E+025.46E+001.07E+021.19E+031.17E+04 + 87L1 88.005.60E-022.54E-017.64E+001.24E+022.92E+004.34E+014.06E+023.50E+03 + 87L1 101.004.12E-021.64E-013.95E+005.94E+011.96E+002.46E+012.06E+021.62E+03 + 87L1 118.002.90E-021.06E-011.93E+002.60E+011.25E+001.31E+019.68E+016.87E+02 + 87L1 141.001.94E-026.70E-028.92E-011.03E+017.50E-016.45E+004.15E+012.61E+02 + 87L1 170.001.27E-024.27E-024.20E-014.04E+004.40E-013.13E+001.74E+019.59E+01 + 87L1 235.006.13E-032.03E-021.31E-018.94E-011.77E-019.35E-014.10E+001.80E+01 + 87L1 320.003.13E-031.02E-024.90E-022.46E-017.52E-023.13E-011.11E+003.97E+00 + 87L1 410.001.87E-035.99E-032.40E-029.65E-023.82E-021.35E-014.12E-011.26E+00 + 87L1 520.001.17E-033.66E-031.26E-024.24E-022.02E-026.29E-021.67E-014.44E-01 + 87L1 750.005.88E-041.78E-035.08E-031.35E-027.65E-032.06E-024.59E-021.01E-01 + 87L11000.003.53E-041.03E-032.62E-036.02E-033.61E-039.01E-031.80E-023.48E-02 + 87L11500.001.78E-044.90E-041.09E-032.15E-031.26E-033.01E-035.36E-039.03E-03 + 87L2 18.912.32E+001.03E+041.13E+061.53E+072.96E+011.42E+031.34E+042.40E+04 + 87L2 19.612.12E+008.60E+039.20E+051.41E+072.66E+011.24E+031.32E+044.12E+04 + 87L2 20.911.79E+006.27E+036.42E+051.16E+072.20E+019.77E+021.22E+046.48E+04 + 87L2 24.111.23E+003.13E+032.88E+056.35E+061.44E+015.75E+028.81E+038.12E+04 + 87L2 27.918.26E-011.53E+031.26E+053.06E+069.30E+003.33E+025.62E+036.66E+04 + 87L2 32.005.66E-017.89E+025.83E+041.46E+066.20E+001.99E+023.47E+034.62E+04 + 87L2 38.003.50E-013.45E+022.21E+045.46E+053.73E+001.05E+021.81E+032.54E+04 + 87L2 46.002.03E-011.38E+027.55E+031.77E+052.13E+005.12E+018.41E+021.18E+04 + 87L2 58.001.03E-014.60E+012.07E+034.36E+041.08E+002.15E+013.21E+024.20E+03 + 87L2 71.005.71E-021.78E+016.72E+021.27E+045.99E-011.01E+011.36E+021.63E+03 + 87L2 88.003.03E-026.61E+002.06E+023.40E+033.22E-014.60E+005.41E+015.78E+02 + 87L2 101.002.01E-023.52E+009.74E+011.47E+032.17E-012.78E+002.99E+012.94E+02 + 87L2 118.001.27E-021.74E+004.21E+015.69E+021.39E-011.58E+001.53E+011.37E+02 + 87L2 141.007.46E-037.85E-011.63E+011.95E+028.37E-028.28E-017.13E+005.68E+01 + 87L2 170.004.29E-033.45E-016.10E+006.38E+014.93E-024.24E-013.22E+002.26E+01 + 87L2 235.001.67E-038.59E-021.16E+009.65E+001.99E-021.36E-018.27E-014.68E+00 + 87L2 320.006.92E-042.40E-022.54E-011.70E+008.43E-034.71E-022.34E-011.08E+00 + 87L2 410.003.47E-048.93E-037.87E-024.47E-014.25E-032.05E-028.72E-023.46E-01 + 87L2 520.001.83E-043.58E-032.67E-021.30E-012.21E-039.40E-033.48E-021.20E-01 + 87L2 750.007.07E-059.42E-045.53E-032.19E-028.10E-042.93E-038.95E-032.53E-02 + 87L21000.003.45E-053.50E-041.75E-035.96E-033.68E-041.21E-033.24E-038.02E-03 + 87L21500.001.30E-059.54E-053.87E-041.11E-031.21E-043.60E-048.33E-041.76E-03 + 87L3 16.035.40E+002.58E+043.60E+066.31E+073.61E+005.84E+045.07E+075.04E+09 + 87L3 16.734.79E+002.08E+042.79E+065.45E+073.17E+004.72E+043.80E+073.64E+09 + 87L3 18.033.86E+001.43E+041.79E+063.99E+072.52E+003.25E+042.29E+072.06E+09 + 87L3 21.232.41E+006.26E+036.72E+051.76E+071.53E+001.44E+047.65E+065.95E+08 + 87L3 25.031.48E+002.73E+032.51E+056.97E+069.24E-016.33E+032.55E+061.71E+08 + 87L3 32.007.06E-017.94E+025.76E+041.58E+064.36E-011.86E+035.00E+052.71E+07 + 87L3 38.004.16E-013.35E+022.06E+045.33E+052.58E-017.92E+021.62E+057.52E+06 + 87L3 46.002.30E-011.29E+026.56E+031.56E+051.44E-013.06E+024.67E+041.83E+06 + 87L3 58.001.11E-014.03E+011.64E+033.42E+047.14E-029.69E+011.05E+043.37E+05 + 87L3 71.005.81E-021.47E+014.93E+028.99E+033.87E-023.56E+012.91E+037.83E+04 + 87L3 88.002.92E-025.08E+001.38E+022.16E+032.03E-021.23E+017.58E+021.70E+04 + 87L3 101.001.87E-022.57E+006.10E+018.65E+021.34E-026.22E+003.23E+026.44E+03 + 87L3 118.001.13E-021.19E+002.44E+013.07E+028.41E-032.89E+001.24E+022.18E+03 + 87L3 141.006.39E-035.00E-018.57E+009.41E+014.94E-031.20E+004.23E+016.44E+02 + 87L3 170.003.50E-032.01E-012.88E+002.73E+012.83E-034.82E-011.38E+011.82E+02 + 87L3 235.001.26E-034.26E-024.46E-013.29E+001.09E-039.96E-022.09E+002.15E+01 + 87L3 320.004.83E-041.00E-027.83E-024.57E-014.44E-042.25E-023.60E-013.00E+00 + 87L3 410.002.28E-043.22E-032.01E-029.82E-022.17E-046.92E-039.10E-026.50E-01 + 87L3 520.001.14E-041.12E-035.70E-032.37E-021.11E-042.27E-032.51E-021.56E-01 + 87L3 750.004.09E-052.42E-049.07E-043.02E-034.07E-054.30E-043.64E-031.88E-02 + 87L31000.001.93E-057.86E-052.39E-046.81E-041.92E-051.24E-048.40E-043.81E-03 + 87L31500.007.35E-061.88E-054.39E-051.01E-047.21E-062.51E-051.16E-044.42E-04 + 87M1 5.651.79E+001.19E+047.53E+051.49E+072.37E+033.99E+061.38E+091.10E+11 + 87M1 6.651.51E+005.97E+033.93E+051.01E+071.45E+031.80E+064.79E+083.62E+10 + 87M1 8.651.08E+001.96E+031.37E+053.86E+066.63E+024.97E+058.90E+075.90E+09 + 87M1 12.656.06E-013.81E+022.80E+048.64E+052.13E+027.89E+048.21E+064.24E+08 + 87M1 19.652.82E-015.44E+013.94E+031.26E+055.73E+019.64E+035.60E+052.08E+07 + 87M1 28.001.44E-011.09E+017.42E+022.24E+042.00E+011.83E+036.91E+041.92E+06 + 87M1 43.006.03E-021.52E+009.06E+012.37E+035.62E+002.58E+025.96E+031.15E+05 + 87M1 55.003.58E-025.05E-012.64E+016.21E+022.72E+008.60E+011.53E+032.39E+04 + 87M1 73.001.93E-021.56E-016.40E+001.29E+021.19E+002.51E+013.34E+024.10E+03 + 87M1 106.008.37E-034.20E-021.04E+001.64E+014.01E-015.21E+004.85E+014.34E+02 + 87M1 155.003.54E-031.41E-021.89E-012.15E+001.35E-011.13E+007.49E+004.90E+01 + 87M1 285.009.15E-043.21E-031.92E-021.17E-012.43E-021.15E-014.71E-011.93E+00 + 87M1 500.002.88E-049.42E-043.53E-031.29E-025.26E-031.72E-024.85E-021.36E-01 + 87M2 5.333.93E+001.37E+061.39E+091.78E+113.32E+021.47E+051.30E+072.33E+08 + 87M2 6.333.17E+005.82E+054.56E+085.48E+101.98E+026.73E+045.58E+061.62E+08 + 87M2 8.332.07E+001.49E+057.83E+078.24E+098.72E+011.98E+041.43E+065.41E+07 + 87M2 12.339.91E-012.14E+046.59E+065.47E+082.70E+013.57E+032.05E+057.98E+06 + 87M2 19.333.70E-012.36E+034.12E+052.50E+077.09E+005.32E+022.24E+047.47E+05 + 87M2 28.001.51E-013.88E+024.41E+042.03E+062.37E+001.16E+023.72E+031.01E+05 + 87M2 43.004.97E-024.94E+013.51E+031.16E+056.71E-012.08E+014.83E+029.92E+03 + 87M2 55.002.55E-021.54E+018.47E+022.31E+043.27E-017.96E+001.53E+022.63E+03 + 87M2 73.001.16E-024.09E+001.69E+023.68E+031.44E-012.68E+004.11E+015.77E+02 + 87M2 106.004.03E-037.39E-012.13E+013.43E+024.94E-026.57E-017.55E+008.01E+01 + 87M2 155.001.35E-031.36E-012.75E+003.28E+011.68E-021.63E-011.40E+001.12E+01 + 87M2 285.002.40E-041.01E-021.22E-019.13E-013.05E-031.89E-021.04E-015.39E-01 + 87M2 500.005.18E-051.10E-038.58E-034.39E-026.48E-042.86E-031.10E-023.96E-02 + 87M3 4.661.28E+013.38E+063.94E+095.51E+113.83E+017.92E+068.03E+109.22E+13 + 87M3 5.669.11E+001.27E+061.09E+091.39E+112.13E+013.00E+062.09E+101.74E+13 + 87M3 7.665.02E+002.79E+051.52E+081.61E+108.51E+006.63E+052.59E+091.34E+12 + 87M3 11.661.97E+003.38E+041.02E+078.16E+082.38E+008.14E+041.45E+084.02E+10 + 87M3 18.666.15E-013.19E+035.21E+052.98E+075.72E-017.79E+035.94E+068.67E+08 + 87M3 28.002.07E-014.17E+024.18E+041.76E+061.67E-011.03E+033.90E+053.43E+07 + 87M3 43.006.08E-024.87E+013.00E+039.02E+044.57E-021.22E+022.30E+041.23E+06 + 87M3 55.002.93E-021.43E+016.73E+021.66E+042.18E-023.59E+014.65E+031.91E+05 + 87M3 73.001.24E-023.50E+001.22E+022.39E+039.30E-038.82E+007.60E+022.34E+04 + 87M3 106.003.90E-035.56E-011.31E+011.89E+023.06E-031.39E+007.35E+011.58E+03 + 87M3 155.001.19E-038.69E-021.40E+001.47E+019.91E-042.15E-017.24E+001.11E+02 + 87M3 285.001.80E-044.74E-034.22E-022.72E-011.67E-041.11E-022.04E-011.93E+00 + 87M3 500.003.39E-053.69E-041.96E-038.46E-033.36E-057.70E-049.01E-035.90E-02 + 87M4 4.143.35E+011.00E+053.33E+092.87E+131.18E+012.60E+051.30E+096.29E+11 + 87M4 5.141.75E+013.33E+047.29E+084.32E+125.89E+008.79E+043.02E+081.23E+11 + 87M4 7.146.18E+006.30E+037.25E+072.49E+112.03E+001.69E+043.33E+071.04E+10 + 87M4 11.141.39E+006.65E+023.18E+065.42E+094.69E-011.81E+031.75E+063.75E+08 + 87M4 18.142.48E-015.68E+011.04E+058.65E+079.17E-021.56E+027.32E+041.02E+07 + 87M4 28.004.93E-026.35E+004.93E+032.29E+062.08E-021.75E+014.54E+034.27E+05 + 87M4 43.009.45E-037.28E-012.47E+026.66E+044.68E-032.03E+003.05E+021.94E+04 + 87M4 55.003.58E-032.10E-014.49E+018.97E+031.96E-035.91E-016.59E+013.36E+03 + 87M4 73.001.16E-035.03E-026.39E+009.16E+027.15E-041.43E-011.15E+014.56E+02 + 87M4 106.002.57E-047.73E-035.06E-014.75E+011.86E-042.23E-021.20E+003.40E+01 + 87M4 155.005.52E-051.17E-034.03E-022.48E+004.62E-053.39E-031.24E-012.54E+00 + 87M4 285.004.77E-066.04E-058.19E-042.57E-024.84E-061.70E-043.56E-034.46E-02 + 87M4 500.005.29E-074.37E-062.93E-054.84E-045.93E-071.13E-051.50E-041.26E-03 + 87M5 4.005.14E+019.83E+047.26E+095.09E+136.82E+001.57E+047.45E+092.31E+14 + 87M5 5.002.60E+013.13E+041.52E+097.19E+123.33E+005.14E+031.56E+093.14E+13 + 87M5 7.008.82E+005.60E+031.42E+083.82E+111.12E+009.60E+021.49E+081.56E+12 + 87M5 11.001.90E+005.59E+025.91E+067.64E+092.55E-011.01E+026.30E+062.83E+10 + 87M5 18.003.21E-014.55E+011.83E+051.13E+084.98E-028.69E+002.01E+053.69E+08 + 87M5 28.006.04E-024.75E+008.10E+032.69E+061.12E-029.73E-019.20E+037.82E+06 + 87M5 43.001.12E-025.24E-013.92E+027.41E+042.57E-031.18E-014.61E+021.94E+05 + 87M5 55.004.18E-031.47E-016.91E+019.60E+031.09E-033.55E-028.30E+012.39E+04 + 87M5 73.001.33E-033.39E-029.43E+009.27E+024.06E-049.00E-031.16E+012.21E+03 + 87M5 106.002.89E-044.92E-036.90E-014.37E+011.09E-041.51E-038.68E-011.00E+02 + 87M5 155.006.11E-056.97E-044.91E-022.02E+002.81E-052.55E-046.28E-024.57E+00 + 87M5 285.005.40E-063.32E-057.69E-041.59E-023.26E-061.63E-059.74E-043.71E-02 + 87M5 500.006.73E-072.43E-062.01E-052.14E-044.78E-071.51E-062.34E-055.17E-04 + 87N+ 50.004.23E-021.71E+011.10E+034.75E+041.44E+007.49E+014.59E+032.14E+05 + 87N+ 70.001.71E-023.36E+001.47E+024.20E+035.32E-011.63E+015.75E+021.72E+04 + 87N+ 100.006.69E-036.28E-011.87E+013.61E+021.90E-013.45E+007.06E+011.35E+03 + 87N+ 150.002.30E-039.77E-021.92E+002.48E+015.91E-026.30E-017.35E+008.66E+01 + 87N+ 200.001.10E-032.75E-024.04E-014.04E+002.60E-021.99E-011.62E+001.38E+01 + 87N+ 500.001.29E-048.47E-045.02E-032.37E-022.08E-037.40E-032.48E-028.69E-02 + 88K 104.923.36E-012.63E-015.23E-022.45E-031.16E+016.32E+016.83E+011.67E+01 + 88K 105.623.31E-012.68E-016.37E-025.46E-031.14E+016.17E+016.90E+012.01E+01 + 88K 106.923.22E-012.77E-018.54E-021.37E-021.10E+015.92E+017.02E+012.65E+01 + 88K 110.123.00E-012.94E-011.39E-014.81E-021.01E+015.36E+017.16E+014.12E+01 + 88K 113.922.77E-013.06E-012.01E-011.12E-019.15E+004.77E+017.12E+015.62E+01 + 88K 118.002.54E-013.13E-012.60E-011.99E-018.27E+004.23E+016.94E+016.88E+01 + 88K 124.002.26E-013.14E-013.33E-013.45E-017.18E+003.57E+016.52E+018.14E+01 + 88K 132.001.95E-013.05E-014.02E-015.38E-016.00E+002.89E+015.82E+018.88E+01 + 88K 144.001.58E-012.80E-014.56E-017.70E-014.69E+002.15E+014.78E+018.75E+01 + 88K 157.001.29E-012.50E-014.68E-019.21E-013.67E+001.60E+013.80E+017.83E+01 + 88K 174.001.01E-012.12E-014.46E-019.91E-012.74E+001.13E+012.81E+016.34E+01 + 88K 187.008.50E-021.86E-014.17E-019.80E-012.24E+008.88E+002.25E+015.28E+01 + 88K 204.006.92E-021.58E-013.73E-019.23E-011.75E+006.64E+001.70E+014.11E+01 + 88K 227.005.39E-021.28E-013.16E-018.13E-011.30E+004.66E+001.20E+012.94E+01 + 88K 255.004.12E-021.00E-012.57E-016.76E-019.41E-013.19E+008.08E+001.99E+01 + 88K 320.002.47E-026.27E-021.64E-014.32E-015.04E-011.54E+003.73E+008.93E+00 + 88K 405.001.49E-023.87E-021.00E-012.53E-012.66E-017.38E-011.68E+003.79E+00 + 88K 490.001.01E-022.65E-026.70E-021.62E-011.60E-014.15E-018.92E-011.90E+00 + 88K 600.006.75E-031.79E-024.37E-029.97E-029.33E-022.29E-014.64E-019.25E-01 + 88K 830.003.68E-039.84E-032.24E-024.65E-023.98E-029.19E-021.71E-013.07E-01 + 88K 1100.002.23E-035.92E-031.28E-022.45E-021.92E-024.31E-027.51E-021.25E-01 + 88K 1350.001.57E-034.11E-038.53E-031.56E-021.13E-022.53E-024.25E-026.75E-02 + 88K 1600.001.18E-033.04E-036.14E-031.08E-027.26E-031.64E-022.69E-024.13E-02 + 88L1 20.249.65E-012.18E+023.94E+037.65E+032.45E+023.31E+049.28E+056.09E+06 + 88L1 20.949.16E-011.87E+023.85E+031.30E+042.22E+022.82E+047.76E+055.74E+06 + 88L1 22.248.33E-011.42E+023.51E+032.04E+041.86E+022.13E+045.63E+054.90E+06 + 88L1 25.446.68E-017.57E+012.44E+032.54E+041.24E+021.14E+042.76E+052.96E+06 + 88L1 29.245.26E-013.91E+011.48E+032.06E+048.23E+016.00E+031.32E+051.57E+06 + 88L1 32.004.47E-012.54E+011.03E+031.60E+046.30E+013.97E+038.16E+049.99E+05 + 88L1 38.003.24E-011.11E+014.88E+028.53E+033.79E+011.82E+033.29E+044.07E+05 + 88L1 46.002.23E-014.41E+002.01E+023.69E+032.15E+017.76E+021.21E+041.43E+05 + 88L1 58.001.39E-011.50E+006.53E+011.19E+031.09E+012.81E+023.64E+033.93E+04 + 88L1 71.009.06E-026.32E-012.42E+014.19E+026.02E+001.18E+021.30E+031.26E+04 + 88L1 88.005.68E-022.83E-018.48E+001.35E+023.22E+004.76E+014.42E+023.77E+03 + 88L1 101.004.18E-021.80E-014.40E+006.46E+012.16E+002.70E+012.24E+021.75E+03 + 88L1 118.002.95E-021.15E-012.15E+002.84E+011.38E+001.43E+011.05E+027.41E+02 + 88L1 141.001.98E-027.15E-029.91E-011.13E+018.27E-017.07E+004.52E+012.81E+02 + 88L1 170.001.30E-024.52E-024.64E-014.44E+004.85E-013.43E+001.90E+011.04E+02 + 88L1 235.006.30E-032.13E-021.43E-019.81E-011.95E-011.02E+004.46E+001.95E+01 + 88L1 320.003.24E-031.07E-025.30E-022.68E-018.27E-023.42E-011.21E+004.29E+00 + 88L1 410.001.94E-036.32E-032.58E-021.05E-014.20E-021.48E-014.48E-011.36E+00 + 88L1 520.001.22E-033.87E-031.36E-024.58E-022.22E-026.86E-021.82E-014.80E-01 + 88L1 750.006.13E-041.88E-035.44E-031.45E-028.39E-032.24E-024.98E-021.09E-01 + 88L11000.003.69E-041.09E-032.80E-036.47E-033.95E-039.81E-031.95E-023.77E-02 + 88L11500.001.87E-045.21E-041.17E-032.30E-031.38E-033.27E-035.81E-039.77E-03 + 88L2 19.482.20E+009.64E+031.01E+061.33E+073.02E+011.37E+031.24E+042.14E+04 + 88L2 20.182.01E+008.11E+038.33E+051.23E+072.72E+011.20E+031.23E+043.65E+04 + 88L2 21.481.71E+005.97E+035.87E+051.02E+072.25E+019.52E+021.14E+045.75E+04 + 88L2 24.681.18E+003.03E+032.69E+055.71E+061.49E+015.69E+028.34E+037.32E+04 + 88L2 28.488.05E-011.51E+031.20E+052.81E+069.75E+003.34E+025.40E+036.13E+04 + 88L2 32.005.85E-018.59E+026.25E+041.51E+066.91E+002.16E+023.62E+034.57E+04 + 88L2 38.003.62E-013.75E+022.38E+045.71E+054.16E+001.14E+021.90E+032.58E+04 + 88L2 46.002.11E-011.50E+028.13E+031.86E+052.37E+005.56E+018.91E+021.21E+04 + 88L2 58.001.08E-015.02E+012.23E+034.62E+041.20E+002.34E+013.42E+024.38E+03 + 88L2 71.005.98E-021.95E+017.26E+021.35E+046.69E-011.11E+011.46E+021.71E+03 + 88L2 88.003.18E-027.21E+002.23E+023.64E+033.60E-015.02E+005.82E+016.13E+02 + 88L2 101.002.12E-023.84E+001.06E+021.57E+032.42E-013.04E+003.22E+013.13E+02 + 88L2 118.001.34E-021.90E+004.56E+016.12E+021.55E-011.72E+001.65E+011.46E+02 + 88L2 141.007.90E-038.58E-011.77E+012.10E+029.37E-029.08E-017.73E+006.09E+01 + 88L2 170.004.56E-033.77E-016.64E+006.88E+015.52E-024.66E-013.49E+002.43E+01 + 88L2 235.001.78E-039.42E-021.27E+001.05E+012.23E-021.50E-019.01E-015.07E+00 + 88L2 320.007.40E-042.63E-022.78E-011.85E+009.46E-035.20E-022.56E-011.18E+00 + 88L2 410.003.74E-049.82E-038.63E-024.87E-014.78E-032.27E-029.57E-023.77E-01 + 88L2 520.001.97E-043.95E-032.94E-021.43E-012.49E-031.04E-023.83E-021.31E-01 + 88L2 750.007.63E-051.04E-036.11E-032.41E-029.12E-043.26E-039.89E-032.78E-02 + 88L21000.003.76E-053.88E-041.93E-036.57E-034.15E-041.35E-033.59E-038.85E-03 + 88L21500.001.43E-051.06E-044.30E-041.23E-031.36E-044.03E-049.27E-041.95E-03 + 88L3 16.445.14E+002.44E+043.28E+065.58E+073.53E+005.69E+044.77E+074.61E+09 + 88L3 17.144.57E+001.98E+042.56E+064.84E+073.11E+004.62E+043.60E+073.35E+09 + 88L3 18.443.70E+001.37E+041.65E+063.57E+072.48E+003.21E+042.20E+071.92E+09 + 88L3 21.642.33E+006.10E+036.34E+051.61E+071.52E+001.45E+047.51E+065.70E+08 + 88L3 25.441.45E+002.70E+032.41E+056.50E+069.29E-016.46E+032.55E+061.68E+08 + 88L3 32.007.26E-018.53E+026.10E+041.63E+064.61E-012.06E+035.58E+053.00E+07 + 88L3 38.004.29E-013.60E+022.18E+045.54E+052.73E-018.76E+021.80E+058.33E+06 + 88L3 46.002.37E-011.38E+026.96E+031.63E+051.52E-013.39E+025.20E+042.03E+06 + 88L3 58.001.14E-014.33E+011.75E+033.58E+047.54E-021.07E+021.17E+043.73E+05 + 88L3 71.006.01E-021.58E+015.24E+029.44E+034.09E-023.93E+013.23E+038.65E+04 + 88L3 88.003.02E-025.45E+001.46E+022.27E+032.14E-021.36E+018.41E+021.87E+04 + 88L3 101.001.94E-022.76E+006.48E+019.10E+021.42E-026.88E+003.58E+027.11E+03 + 88L3 118.001.18E-021.28E+002.59E+013.23E+028.88E-033.20E+001.38E+022.41E+03 + 88L3 141.006.65E-035.37E-019.12E+009.93E+015.22E-031.33E+004.68E+017.09E+02 + 88L3 170.003.65E-032.16E-013.06E+002.89E+013.00E-035.32E-011.53E+012.00E+02 + 88L3 235.001.31E-034.57E-024.75E-013.48E+001.15E-031.10E-012.30E+002.37E+01 + 88L3 320.005.05E-041.07E-028.35E-024.84E-014.68E-042.48E-023.97E-013.30E+00 + 88L3 410.002.39E-043.45E-032.15E-021.04E-012.30E-047.61E-031.00E-017.13E-01 + 88L3 520.001.19E-041.20E-036.08E-032.52E-021.17E-042.49E-032.76E-021.71E-01 + 88L3 750.004.32E-052.58E-049.67E-043.22E-034.29E-054.70E-044.00E-032.06E-02 + 88L31000.002.03E-058.36E-052.55E-047.25E-042.02E-051.35E-049.21E-044.18E-03 + 88L31500.007.68E-061.99E-054.66E-051.08E-047.56E-062.71E-051.27E-044.84E-04 + 88M1 5.821.69E+001.15E+047.26E+051.35E+072.40E+033.85E+061.27E+099.86E+10 + 88M1 6.821.43E+005.90E+033.84E+059.47E+061.49E+031.77E+064.57E+083.35E+10 + 88M1 8.821.03E+001.98E+031.36E+053.75E+066.92E+025.04E+058.82E+075.69E+09 + 88M1 12.825.88E-013.97E+022.84E+048.61E+052.26E+028.24E+048.44E+064.28E+08 + 88M1 19.822.77E-015.83E+014.08E+031.28E+056.18E+011.03E+045.92E+052.16E+07 + 88M1 28.001.44E-011.23E+018.07E+022.39E+042.21E+012.04E+037.66E+042.11E+06 + 88M1 43.006.08E-021.73E+009.97E+012.56E+036.21E+002.86E+026.59E+031.27E+05 + 88M1 55.003.62E-025.79E-012.93E+016.74E+023.01E+009.52E+011.69E+032.63E+04 + 88M1 73.001.96E-021.78E-017.15E+001.42E+021.31E+002.77E+013.68E+024.50E+03 + 88M1 106.008.54E-034.65E-021.17E+001.81E+014.44E-015.75E+005.33E+014.75E+02 + 88M1 155.003.63E-031.53E-022.12E-012.39E+001.49E-011.25E+008.21E+005.35E+01 + 88M1 285.009.45E-043.41E-032.10E-021.29E-012.68E-021.27E-015.15E-012.10E+00 + 88M1 500.003.00E-041.00E-033.82E-031.40E-025.79E-031.89E-025.29E-021.48E-01 + 88M2 5.493.69E+001.28E+061.26E+091.55E+113.39E+021.42E+051.21E+072.09E+08 + 88M2 6.493.01E+005.59E+054.24E+084.95E+102.05E+026.66E+045.33E+061.48E+08 + 88M2 8.491.99E+001.48E+057.57E+077.76E+099.19E+012.01E+041.41E+065.14E+07 + 88M2 12.499.72E-012.19E+046.63E+065.38E+082.90E+013.73E+032.08E+057.88E+06 + 88M2 19.493.70E-012.47E+034.27E+052.55E+077.74E+005.66E+022.34E+047.61E+05 + 88M2 28.001.55E-014.24E+024.80E+042.19E+062.65E+001.28E+024.04E+031.08E+05 + 88M2 43.005.16E-025.40E+013.83E+031.26E+057.52E-012.29E+015.25E+021.07E+04 + 88M2 55.002.66E-021.68E+019.23E+022.49E+043.67E-018.75E+001.66E+022.83E+03 + 88M2 73.001.22E-024.48E+001.85E+023.98E+031.62E-012.95E+004.48E+016.22E+02 + 88M2 106.004.25E-038.11E-012.33E+013.72E+025.54E-027.24E-018.24E+008.67E+01 + 88M2 155.001.43E-031.49E-013.01E+003.56E+011.89E-021.80E-011.53E+001.21E+01 + 88M2 285.002.57E-041.12E-021.34E-019.99E-013.44E-032.10E-021.15E-015.89E-01 + 88M2 500.005.60E-051.21E-039.47E-034.83E-027.31E-043.19E-031.22E-024.36E-02 + 88M3 4.791.22E+013.18E+063.56E+094.82E+113.74E+017.70E+067.50E+108.33E+13 + 88M3 5.798.75E+001.23E+061.02E+091.25E+112.11E+012.99E+062.02E+101.64E+13 + 88M3 7.794.88E+002.77E+051.47E+081.52E+108.58E+006.79E+052.61E+091.33E+12 + 88M3 11.791.95E+003.46E+041.02E+078.01E+082.44E+008.57E+041.52E+084.17E+10 + 88M3 18.796.17E-013.33E+035.35E+053.01E+075.94E-018.38E+036.37E+069.26E+08 + 88M3 28.002.12E-014.50E+024.47E+041.86E+061.77E-011.15E+034.38E+053.86E+07 + 88M3 43.006.27E-025.26E+013.21E+039.55E+044.85E-021.36E+022.58E+041.38E+06 + 88M3 55.003.03E-021.54E+017.20E+021.76E+042.31E-023.99E+015.21E+032.14E+05 + 88M3 73.001.28E-023.78E+001.31E+022.53E+039.87E-039.81E+008.50E+022.61E+04 + 88M3 106.004.06E-036.00E-011.41E+012.01E+023.24E-031.55E+008.20E+011.76E+03 + 88M3 155.001.24E-039.38E-021.50E+001.56E+011.05E-032.39E-018.06E+001.23E+02 + 88M3 285.001.89E-045.12E-034.52E-022.90E-011.77E-041.23E-022.27E-012.14E+00 + 88M3 500.003.57E-053.98E-042.11E-039.04E-033.56E-058.51E-049.98E-036.52E-02 + 88M4 4.253.19E+019.46E+043.02E+092.54E+131.16E+012.55E+051.23E+095.76E+11 + 88M4 5.251.69E+013.24E+046.86E+084.00E+125.86E+008.84E+042.94E+081.17E+11 + 88M4 7.256.10E+006.32E+037.12E+072.42E+112.06E+001.75E+043.38E+071.04E+10 + 88M4 11.251.41E+006.86E+023.25E+065.54E+094.86E-011.93E+031.85E+063.89E+08 + 88M4 18.252.55E-015.99E+011.09E+059.13E+079.64E-021.70E+027.90E+041.09E+07 + 88M4 28.005.21E-026.91E+005.42E+032.54E+062.24E-021.97E+015.09E+034.76E+05 + 88M4 43.001.00E-027.94E-012.72E+027.39E+045.05E-032.28E+003.41E+022.16E+04 + 88M4 55.003.82E-032.29E-014.93E+019.95E+032.12E-036.64E-017.38E+013.74E+03 + 88M4 73.001.24E-035.51E-027.03E+001.02E+037.74E-041.61E-011.29E+015.08E+02 + 88M4 106.002.75E-048.48E-035.57E-015.27E+012.01E-042.51E-021.34E+003.79E+01 + 88M4 155.005.93E-051.28E-034.43E-022.75E+005.02E-053.81E-031.39E-012.83E+00 + 88M4 285.005.23E-066.66E-059.02E-042.86E-025.27E-061.92E-043.99E-034.99E-02 + 88M4 500.005.78E-074.82E-063.23E-055.39E-046.47E-071.27E-051.69E-041.42E-03 + 88M5 4.104.90E+019.13E+046.68E+094.52E+136.66E+001.49E+047.05E+092.11E+14 + 88M5 5.102.51E+012.99E+041.44E+096.68E+123.30E+005.03E+031.53E+093.01E+13 + 88M5 7.108.70E+005.51E+031.42E+083.73E+111.13E+009.67E+021.52E+081.58E+12 + 88M5 11.101.91E+005.65E+026.10E+067.83E+092.63E-011.04E+026.68E+062.99E+10 + 88M5 18.103.30E-014.69E+011.94E+051.19E+085.21E-029.15E+002.19E+054.03E+08 + 88M5 28.006.36E-025.05E+008.95E+032.98E+061.20E-021.05E+001.04E+048.97E+06 + 88M5 43.001.19E-025.58E-014.34E+028.20E+042.75E-031.28E-015.23E+022.23E+05 + 88M5 55.004.44E-031.57E-017.64E+011.06E+041.17E-033.84E-029.40E+012.74E+04 + 88M5 73.001.41E-033.62E-021.04E+011.02E+034.35E-049.74E-031.31E+012.52E+03 + 88M5 106.003.08E-045.26E-037.64E-014.83E+011.17E-041.64E-039.83E-011.14E+02 + 88M5 155.006.55E-057.48E-045.43E-022.23E+003.02E-052.76E-047.10E-025.19E+00 + 88M5 285.005.81E-063.58E-058.49E-041.76E-023.51E-061.76E-051.10E-034.21E-02 + 88M5 500.007.26E-072.62E-062.21E-052.36E-045.15E-071.63E-062.63E-055.84E-04 + 88N+ 50.004.41E-021.90E+011.22E+035.28E+041.61E+008.42E+015.23E+032.46E+05 + 88N+ 70.001.79E-023.74E+001.63E+024.65E+035.95E-011.83E+016.53E+021.97E+04 + 88N+ 100.007.00E-036.99E-012.08E+013.99E+022.13E-013.86E+007.98E+011.53E+03 + 88N+ 150.002.42E-031.09E-012.13E+002.75E+016.61E-027.04E-018.26E+009.77E+01 + 88N+ 200.001.16E-033.06E-024.50E-014.48E+002.90E-022.22E-011.82E+001.55E+01 + 88N+ 500.001.37E-049.33E-045.59E-032.64E-022.32E-038.22E-032.75E-029.66E-02 + 89K 107.753.19E-012.41E-014.77E-022.22E-031.17E+016.13E+016.40E+011.53E+01 + 89K 108.453.14E-012.46E-015.78E-024.88E-031.15E+015.99E+016.47E+011.83E+01 + 89K 109.753.05E-012.54E-017.72E-021.21E-021.11E+015.75E+016.57E+012.39E+01 + 89K 112.952.86E-012.70E-011.25E-014.22E-021.02E+015.22E+016.71E+013.70E+01 + 89K 116.752.64E-012.81E-011.80E-019.78E-029.30E+004.66E+016.69E+015.05E+01 + 89K 121.002.42E-012.88E-012.36E-011.78E-018.40E+004.13E+016.54E+016.25E+01 + 89K 127.002.16E-012.90E-013.03E-013.08E-017.31E+003.50E+016.16E+017.40E+01 + 89K 135.001.87E-012.83E-013.67E-014.82E-016.14E+002.85E+015.53E+018.11E+01 + 89K 147.001.53E-012.62E-014.19E-016.97E-014.82E+002.13E+014.58E+018.08E+01 + 89K 160.001.25E-012.36E-014.35E-018.42E-013.79E+001.60E+013.67E+017.30E+01 + 89K 177.009.85E-022.01E-014.20E-019.18E-012.85E+001.14E+012.74E+015.99E+01 + 89K 190.008.34E-021.78E-013.95E-019.16E-012.33E+009.00E+002.21E+015.02E+01 + 89K 207.006.82E-021.52E-013.57E-018.72E-011.83E+006.76E+001.68E+013.95E+01 + 89K 230.005.34E-021.24E-013.06E-017.77E-011.37E+004.78E+001.19E+012.86E+01 + 89K 255.004.22E-021.01E-012.57E-016.67E-011.03E+003.41E+008.46E+002.04E+01 + 89K 320.002.54E-026.38E-021.67E-014.35E-015.49E-011.65E+003.93E+009.23E+00 + 89K 405.001.53E-023.98E-021.03E-012.59E-012.90E-017.92E-011.78E+003.95E+00 + 89K 500.009.98E-032.63E-026.64E-021.59E-011.65E-014.20E-018.86E-011.85E+00 + 89K 610.006.76E-031.81E-024.40E-029.94E-029.70E-022.35E-014.68E-019.19E-01 + 89K 840.003.74E-031.01E-022.29E-024.73E-024.19E-029.56E-021.75E-013.13E-01 + 89K 1100.002.32E-036.21E-031.34E-022.57E-022.07E-024.63E-028.01E-021.33E-01 + 89K 1350.001.63E-034.32E-038.99E-031.64E-021.22E-022.72E-024.54E-027.18E-02 + 89K 1600.001.23E-033.19E-036.47E-031.14E-027.84E-031.76E-022.87E-024.40E-02 + 89L1 20.849.09E-012.08E+023.60E+036.73E+032.48E+023.19E+048.60E+055.46E+06 + 89L1 21.548.64E-011.79E+023.53E+031.14E+042.25E+022.73E+047.22E+055.16E+06 + 89L1 22.847.88E-011.37E+023.23E+031.78E+041.89E+022.08E+045.29E+054.43E+06 + 89L1 26.046.37E-017.48E+012.28E+032.26E+041.28E+021.13E+042.64E+052.73E+06 + 89L1 29.845.04E-013.94E+011.42E+031.87E+048.55E+016.03E+031.28E+051.47E+06 + 89L1 33.004.21E-012.45E+019.48E+021.42E+046.35E+013.81E+037.53E+048.94E+05 + 89L1 39.003.09E-011.10E+014.61E+027.77E+033.87E+011.79E+033.12E+043.74E+05 + 89L1 47.002.15E-014.53E+001.95E+023.46E+032.23E+017.78E+021.18E+041.36E+05 + 89L1 59.001.35E-011.59E+006.56E+011.15E+031.14E+012.87E+023.63E+033.82E+04 + 89L1 72.008.89E-026.79E-012.48E+014.17E+026.38E+001.22E+021.31E+031.25E+04 + 89L1 89.005.62E-023.04E-018.91E+001.37E+023.44E+004.99E+014.55E+023.81E+03 + 89L1 102.004.16E-021.93E-014.68E+006.67E+012.32E+002.84E+012.32E+021.79E+03 + 89L1 119.002.95E-021.22E-012.31E+002.97E+011.48E+001.52E+011.10E+027.64E+02 + 89L1 142.001.99E-027.54E-021.07E+001.20E+018.94E-017.54E+004.75E+012.92E+02 + 89L1 170.001.33E-024.80E-025.13E-014.88E+005.35E-013.75E+002.06E+011.12E+02 + 89L1 235.006.49E-032.25E-021.56E-011.08E+002.15E-011.12E+004.85E+002.10E+01 + 89L1 320.003.34E-031.13E-025.75E-022.93E-019.11E-023.74E-011.31E+004.64E+00 + 89L1 410.002.01E-036.68E-032.78E-021.14E-014.63E-021.62E-014.87E-011.47E+00 + 89L1 520.001.26E-034.10E-031.46E-024.96E-022.44E-027.50E-021.97E-015.19E-01 + 89L1 750.006.40E-042.00E-035.83E-031.57E-029.21E-032.45E-025.41E-021.18E-01 + 89L11000.003.86E-041.16E-033.00E-036.96E-034.32E-031.07E-022.12E-024.07E-02 + 89L11500.001.96E-045.53E-041.25E-032.47E-031.50E-033.56E-036.30E-031.06E-02 + 89L2 20.082.08E+009.03E+039.11E+051.15E+073.07E+011.32E+031.15E+041.90E+04 + 89L2 20.781.91E+007.64E+037.53E+051.07E+072.77E+011.16E+031.14E+043.23E+04 + 89L2 22.081.63E+005.67E+035.36E+058.90E+062.32E+019.27E+021.06E+045.09E+04 + 89L2 25.281.14E+002.93E+032.51E+055.12E+061.55E+015.62E+027.88E+036.58E+04 + 89L2 29.087.84E-011.49E+031.15E+052.58E+061.02E+013.34E+025.19E+035.63E+04 + 89L2 33.005.55E-018.06E+025.64E+041.31E+067.04E+002.09E+023.36E+034.12E+04 + 89L2 39.003.49E-013.61E+022.21E+045.13E+054.30E+001.12E+021.81E+032.37E+04 + 89L2 47.002.06E-011.48E+027.76E+031.72E+052.48E+005.58E+018.64E+021.14E+04 + 89L2 59.001.07E-015.05E+012.18E+034.41E+041.28E+002.39E+013.39E+024.23E+03 + 89L2 72.006.01E-021.99E+017.26E+021.32E+047.18E-011.15E+011.47E+021.69E+03 + 89L2 89.003.23E-027.47E+002.27E+023.63E+033.89E-015.27E+005.96E+016.14E+02 + 89L2 102.002.16E-024.01E+001.08E+021.59E+032.63E-013.20E+003.33E+013.17E+02 + 89L2 119.001.37E-022.00E+004.73E+016.24E+021.70E-011.83E+001.72E+011.50E+02 + 89L2 142.008.18E-039.10E-011.85E+012.16E+021.03E-019.71E-018.12E+006.30E+01 + 89L2 170.004.83E-034.13E-017.22E+007.43E+016.19E-025.12E-013.79E+002.62E+01 + 89L2 235.001.89E-031.03E-011.39E+001.13E+012.50E-021.65E-019.82E-015.48E+00 + 89L2 320.007.91E-042.89E-023.05E-012.01E+001.06E-025.74E-022.80E-011.28E+00 + 89L2 410.004.01E-041.08E-029.47E-025.32E-015.37E-032.51E-021.05E-014.11E-01 + 89L2 520.002.13E-044.35E-033.23E-021.56E-012.80E-031.16E-024.21E-021.43E-01 + 89L2 750.008.28E-051.15E-036.74E-032.65E-021.03E-033.63E-031.09E-023.06E-02 + 89L21000.004.06E-054.29E-042.14E-037.24E-034.68E-041.50E-033.98E-039.76E-03 + 89L21500.001.56E-051.17E-044.77E-041.36E-031.53E-044.51E-041.03E-032.17E-03 + 89L3 16.874.88E+002.30E+042.98E+064.92E+073.45E+005.54E+044.48E+074.20E+09 + 89L3 17.574.35E+001.87E+042.34E+064.28E+073.05E+004.52E+043.41E+073.08E+09 + 89L3 18.873.55E+001.31E+041.52E+063.19E+072.45E+003.17E+042.10E+071.79E+09 + 89L3 22.072.25E+005.94E+035.98E+051.47E+071.51E+001.45E+047.35E+065.44E+08 + 89L3 25.871.41E+002.67E+032.31E+056.03E+069.32E-016.58E+032.54E+061.64E+08 + 89L3 33.006.80E-017.85E+025.38E+041.39E+064.43E-011.96E+035.07E+052.64E+07 + 89L3 39.004.08E-013.39E+021.98E+044.88E+052.66E-018.52E+021.69E+057.60E+06 + 89L3 47.002.29E-011.33E+026.50E+031.47E+051.51E-013.37E+025.03E+041.92E+06 + 89L3 59.001.12E-014.27E+011.67E+033.35E+047.57E-021.09E+021.16E+043.64E+05 + 89L3 72.005.95E-021.58E+015.11E+029.01E+034.14E-024.06E+013.28E+038.63E+04 + 89L3 89.003.02E-025.54E+001.46E+022.21E+032.19E-021.42E+018.69E+021.91E+04 + 89L3 102.001.95E-022.82E+006.50E+018.95E+021.45E-027.25E+003.73E+027.31E+03 + 89L3 119.001.19E-021.32E+002.62E+013.22E+029.15E-033.39E+001.45E+022.50E+03 + 89L3 142.006.76E-035.57E-019.30E+009.98E+015.40E-031.42E+004.96E+017.44E+02 + 89L3 170.003.81E-032.32E-013.26E+003.04E+013.16E-035.88E-011.69E+012.20E+02 + 89L3 235.001.37E-034.91E-025.06E-013.68E+001.22E-031.21E-012.54E+002.60E+01 + 89L3 320.005.28E-041.15E-028.89E-025.12E-014.95E-042.73E-024.37E-013.63E+00 + 89L3 410.002.50E-043.70E-032.29E-021.10E-012.42E-048.37E-031.10E-017.83E-01 + 89L3 520.001.25E-041.29E-036.48E-032.67E-021.24E-042.74E-033.03E-021.88E-01 + 89L3 750.004.53E-052.75E-041.03E-033.42E-034.52E-055.13E-044.39E-032.26E-02 + 89L31000.002.13E-058.90E-052.71E-047.73E-042.12E-051.47E-041.01E-034.58E-03 + 89L31500.008.06E-062.11E-054.95E-051.15E-047.93E-062.92E-051.38E-045.29E-04 + 89M1 6.001.59E+001.11E+046.94E+051.21E+072.42E+033.69E+061.17E+098.77E+10 + 89M1 7.001.35E+005.81E+033.73E+058.78E+061.53E+031.74E+064.33E+083.07E+10 + 89M1 9.009.88E-012.00E+031.34E+053.63E+067.21E+025.09E+058.68E+075.44E+09 + 89M1 13.005.69E-014.13E+022.87E+048.53E+052.41E+028.58E+048.64E+064.28E+08 + 89M1 20.002.71E-016.24E+014.23E+031.29E+056.66E+011.10E+046.24E+052.24E+07 + 89M1 28.001.44E-011.38E+018.76E+022.54E+042.45E+012.26E+038.50E+042.33E+06 + 89M1 43.006.13E-021.98E+001.10E+022.76E+036.88E+003.17E+027.29E+031.39E+05 + 89M1 55.003.66E-026.63E-013.24E+017.31E+023.33E+001.05E+021.86E+032.89E+04 + 89M1 73.001.99E-022.02E-017.97E+001.55E+021.45E+003.06E+014.05E+024.93E+03 + 89M1 106.008.71E-035.17E-021.31E+002.00E+014.91E-016.35E+005.86E+015.20E+02 + 89M1 155.003.72E-031.65E-022.37E-012.65E+001.65E-011.37E+009.01E+005.85E+01 + 89M1 285.009.77E-043.63E-032.31E-021.42E-012.96E-021.39E-015.63E-012.29E+00 + 89M1 500.003.12E-041.06E-034.14E-031.53E-026.39E-032.07E-025.78E-021.62E-01 + 89M2 5.663.47E+001.21E+061.13E+091.36E+113.47E+021.38E+051.13E+071.88E+08 + 89M2 6.662.85E+005.39E+053.95E+084.47E+102.13E+026.59E+045.10E+061.36E+08 + 89M2 8.661.92E+001.47E+057.32E+077.30E+099.71E+012.04E+041.39E+064.88E+07 + 89M2 12.669.53E-012.25E+046.67E+065.30E+083.13E+013.89E+032.12E+057.79E+06 + 89M2 19.663.70E-012.59E+034.42E+052.60E+078.45E+006.02E+022.43E+047.76E+05 + 89M2 28.001.59E-014.64E+025.23E+042.36E+062.97E+001.40E+024.39E+031.16E+05 + 89M2 43.005.34E-025.91E+014.17E+031.36E+058.43E-012.52E+015.70E+021.15E+04 + 89M2 55.002.77E-021.84E+011.01E+032.69E+044.11E-019.63E+001.80E+023.05E+03 + 89M2 73.001.27E-024.91E+002.01E+024.31E+031.81E-013.24E+004.87E+016.71E+02 + 89M2 106.004.47E-038.90E-012.54E+014.04E+026.23E-027.98E-018.98E+009.38E+01 + 89M2 155.001.52E-031.64E-013.29E+003.88E+012.12E-021.99E-011.67E+001.32E+01 + 89M2 285.002.75E-041.23E-021.47E-011.09E+003.88E-032.32E-021.26E-016.44E-01 + 89M2 500.006.03E-051.34E-031.05E-025.30E-028.26E-043.55E-031.35E-024.79E-02 + 89M3 4.911.18E+013.04E+063.28E+094.33E+113.68E+017.59E+067.15E+107.73E+13 + 89M3 5.918.46E+001.20E+069.67E+081.16E+112.10E+013.01E+061.98E+101.58E+13 + 89M3 7.914.77E+002.77E+051.44E+081.45E+108.69E+007.01E+052.65E+091.33E+12 + 89M3 11.911.93E+003.55E+041.03E+077.93E+082.51E+009.08E+041.60E+084.36E+10 + 89M3 18.916.19E-013.48E+035.53E+053.06E+076.18E-019.04E+036.87E+069.95E+08 + 89M3 28.002.17E-014.86E+024.80E+041.97E+061.88E-011.28E+034.92E+054.35E+07 + 89M3 43.006.46E-025.69E+013.44E+031.01E+055.14E-021.51E+022.89E+041.55E+06 + 89M3 55.003.13E-021.67E+017.70E+021.86E+042.45E-024.44E+015.83E+032.40E+05 + 89M3 73.001.33E-024.09E+001.40E+022.68E+031.05E-021.09E+019.50E+022.91E+04 + 89M3 106.004.23E-036.48E-011.50E+012.13E+023.44E-031.72E+009.14E+011.95E+03 + 89M3 155.001.30E-031.01E-011.60E+001.66E+011.11E-032.66E-018.97E+001.37E+02 + 89M3 285.001.98E-045.52E-034.84E-023.08E-011.88E-041.37E-022.52E-012.37E+00 + 89M3 500.003.78E-054.28E-042.26E-039.65E-033.77E-059.40E-041.10E-027.20E-02 + 89M4 4.373.02E+018.88E+042.71E+092.21E+131.13E+012.48E+051.14E+095.19E+11 + 89M4 5.371.62E+013.13E+046.40E+083.65E+125.81E+008.83E+042.84E+081.10E+11 + 89M4 7.375.99E+006.30E+036.93E+072.34E+112.08E+001.81E+043.41E+071.02E+10 + 89M4 11.371.41E+007.05E+023.30E+065.62E+095.02E-012.05E+031.93E+064.00E+08 + 89M4 18.372.61E-016.29E+011.14E+059.59E+071.01E-011.84E+028.48E+041.15E+07 + 89M4 28.005.50E-027.52E+005.94E+032.82E+062.41E-022.21E+015.70E+035.30E+05 + 89M4 43.001.07E-028.66E-012.98E+028.19E+045.44E-032.56E+003.82E+022.41E+04 + 89M4 55.004.06E-032.50E-015.41E+011.10E+042.29E-037.46E-018.25E+014.17E+03 + 89M4 73.001.32E-036.02E-027.71E+001.13E+038.36E-041.81E-011.44E+015.65E+02 + 89M4 106.002.95E-049.29E-036.11E-015.84E+012.18E-042.82E-021.50E+004.22E+01 + 89M4 155.006.37E-051.41E-034.86E-023.05E+005.45E-054.29E-031.55E-013.15E+00 + 89M4 285.005.63E-067.34E-059.91E-043.18E-025.74E-062.16E-044.48E-035.58E-02 + 89M4 500.006.34E-075.32E-063.55E-056.00E-047.05E-071.42E-051.90E-041.59E-03 + 89M5 4.224.64E+018.41E+046.08E+093.96E+136.47E+001.41E+046.60E+091.90E+14 + 89M5 5.222.42E+012.83E+041.36E+096.13E+123.27E+004.88E+031.49E+092.84E+13 + 89M5 7.228.55E+005.38E+031.40E+083.61E+111.14E+009.67E+021.54E+081.58E+12 + 89M5 11.221.92E+005.69E+026.27E+067.95E+092.71E-011.07E+027.05E+063.14E+10 + 89M5 18.223.37E-014.82E+012.05E+051.25E+085.43E-029.60E+002.38E+054.38E+08 + 89M5 28.006.70E-025.37E+009.89E+033.30E+061.28E-021.14E+001.18E+041.03E+07 + 89M5 43.001.26E-025.94E-014.79E+029.06E+042.94E-031.38E-015.92E+022.55E+05 + 89M5 55.004.70E-031.67E-018.45E+011.17E+041.25E-034.15E-021.07E+023.13E+04 + 89M5 73.001.50E-033.87E-021.15E+011.13E+034.66E-041.05E-021.48E+012.88E+03 + 89M5 106.003.29E-045.63E-038.44E-015.34E+011.25E-041.77E-031.11E+001.30E+02 + 89M5 155.007.01E-058.02E-046.00E-022.46E+003.25E-052.98E-048.03E-025.90E+00 + 89M5 285.006.19E-063.86E-059.37E-041.94E-023.78E-061.91E-051.24E-034.76E-02 + 89M5 500.007.59E-072.83E-062.43E-052.61E-045.54E-071.76E-062.94E-056.60E-04 + 89N+ 50.004.59E-022.08E+011.33E+035.86E+041.81E+009.48E+015.92E+032.80E+05 + 89N+ 70.001.87E-024.11E+001.79E+025.14E+036.70E-012.05E+017.36E+022.23E+04 + 89N+ 100.007.32E-037.69E-012.28E+014.39E+022.39E-014.33E+008.96E+011.73E+03 + 89N+ 150.002.54E-031.20E-012.34E+003.02E+017.43E-027.88E-019.25E+001.10E+02 + 89N+ 200.001.22E-033.37E-024.95E-014.92E+003.26E-022.48E-012.03E+001.74E+01 + 89N+ 500.001.45E-041.02E-036.19E-032.92E-022.60E-039.17E-033.06E-021.07E-01 + 90K 110.653.03E-012.22E-014.37E-022.02E-031.18E+015.94E+016.00E+011.39E+01 + 90K 111.352.98E-012.26E-015.27E-024.38E-031.16E+015.80E+016.06E+011.66E+01 + 90K 112.652.90E-012.33E-016.99E-021.07E-021.12E+015.58E+016.16E+012.16E+01 + 90K 115.852.72E-012.48E-011.13E-013.71E-021.04E+015.08E+016.29E+013.33E+01 + 90K 119.652.52E-012.59E-011.62E-018.59E-029.45E+004.55E+016.29E+014.54E+01 + 90K 124.002.31E-012.66E-012.14E-011.59E-018.53E+004.03E+016.15E+015.65E+01 + 90K 130.002.07E-012.69E-012.75E-012.75E-017.45E+003.44E+015.82E+016.71E+01 + 90K 138.001.80E-012.63E-013.35E-014.32E-016.29E+002.81E+015.26E+017.41E+01 + 90K 150.001.48E-012.46E-013.87E-016.31E-014.96E+002.12E+014.39E+017.45E+01 + 90K 163.001.22E-012.23E-014.05E-017.71E-013.92E+001.60E+013.55E+016.81E+01 + 90K 180.009.63E-021.92E-013.95E-018.51E-012.96E+001.15E+012.68E+015.65E+01 + 90K 193.008.18E-021.71E-013.75E-018.58E-012.43E+009.12E+002.17E+014.78E+01 + 90K 210.006.72E-021.47E-013.42E-018.24E-011.92E+006.89E+001.67E+013.80E+01 + 90K 233.005.29E-021.21E-012.96E-017.44E-011.44E+004.90E+001.19E+012.78E+01 + 90K 260.004.13E-029.80E-022.48E-016.37E-011.06E+003.43E+008.28E+001.95E+01 + 90K 325.002.52E-026.30E-021.64E-014.24E-015.73E-011.68E+003.92E+009.01E+00 + 90K 410.001.54E-023.99E-021.03E-012.57E-013.05E-018.18E-011.80E+003.93E+00 + 90K 500.001.03E-022.73E-026.87E-021.64E-011.79E-014.50E-019.39E-011.94E+00 + 90K 610.006.99E-031.88E-024.57E-021.03E-011.05E-012.52E-014.97E-019.67E-01 + 90K 840.003.87E-031.05E-022.40E-024.94E-024.54E-021.03E-011.87E-013.30E-01 + 90K 1100.002.41E-036.51E-031.41E-022.70E-022.24E-024.98E-028.55E-021.41E-01 + 90K 1350.001.70E-034.53E-039.47E-031.73E-021.32E-022.92E-024.84E-027.63E-02 + 90K 1600.001.28E-033.36E-036.82E-031.20E-028.45E-031.89E-023.07E-024.68E-02 + 90L1 21.478.54E-011.98E+023.27E+035.90E+032.51E+023.06E+047.92E+054.86E+06 + 90L1 22.178.13E-011.71E+023.21E+039.89E+032.28E+022.63E+046.69E+054.60E+06 + 90L1 23.477.44E-011.32E+022.96E+031.55E+041.92E+022.02E+044.95E+053.98E+06 + 90L1 26.676.05E-017.36E+012.13E+032.00E+041.32E+021.12E+042.52E+052.50E+06 + 90L1 30.474.82E-013.96E+011.35E+031.70E+048.87E+016.04E+031.25E+051.38E+06 + 90L1 34.003.97E-012.37E+018.74E+021.27E+046.41E+013.67E+036.98E+048.02E+05 + 90L1 40.002.94E-011.10E+014.36E+027.09E+033.96E+011.76E+032.97E+043.44E+05 + 90L1 48.002.06E-014.66E+001.90E+023.24E+032.31E+017.80E+021.15E+041.28E+05 + 90L1 60.001.31E-011.68E+006.58E+011.12E+031.20E+012.93E+023.62E+033.72E+04 + 90L1 73.008.71E-027.29E-012.55E+014.14E+026.76E+001.26E+021.33E+031.24E+04 + 90L1 90.005.55E-023.28E-019.35E+001.39E+023.67E+005.23E+014.68E+023.85E+03 + 90L1 103.004.13E-022.08E-014.96E+006.87E+012.48E+003.00E+012.41E+021.82E+03 + 90L1 120.002.95E-021.30E-012.47E+003.10E+011.60E+001.61E+011.15E+027.86E+02 + 90L1 143.002.00E-027.98E-021.15E+001.26E+019.66E-018.04E+005.00E+013.04E+02 + 90L1 170.001.36E-025.13E-025.68E-015.36E+005.90E-014.11E+002.24E+011.21E+02 + 90L1 235.006.66E-032.38E-021.71E-011.18E+002.36E-011.22E+005.27E+002.27E+01 + 90L1 320.003.45E-031.20E-026.24E-023.20E-011.00E-014.09E-011.43E+005.01E+00 + 90L1 410.002.08E-037.06E-033.00E-021.24E-015.09E-021.77E-015.29E-011.59E+00 + 90L1 520.001.31E-034.34E-031.57E-025.37E-022.68E-028.18E-022.14E-015.62E-01 + 90L1 750.006.68E-042.12E-036.25E-031.69E-021.01E-022.67E-025.87E-021.27E-01 + 90L11000.004.04E-041.23E-033.21E-037.48E-034.73E-031.17E-022.30E-024.41E-02 + 90L11500.002.05E-045.88E-041.34E-032.65E-031.64E-033.88E-036.84E-031.14E-02 + 90L2 20.691.97E+008.48E+038.20E+051.00E+073.13E+011.27E+031.07E+041.70E+04 + 90L2 21.391.81E+007.21E+036.82E+059.33E+062.84E+011.12E+031.06E+042.86E+04 + 90L2 22.691.55E+005.40E+034.90E+057.82E+062.38E+019.03E+029.89E+034.51E+04 + 90L2 25.891.10E+002.84E+032.35E+054.59E+061.61E+015.55E+027.45E+035.93E+04 + 90L2 29.697.64E-011.46E+031.09E+052.36E+061.07E+013.34E+024.98E+035.17E+04 + 90L2 34.005.28E-017.59E+025.11E+041.15E+067.19E+002.02E+023.14E+033.72E+04 + 90L2 40.003.37E-013.48E+022.06E+044.62E+054.45E+001.10E+021.72E+032.18E+04 + 90L2 48.002.02E-011.46E+027.42E+031.60E+052.61E+005.60E+018.39E+021.07E+04 + 90L2 60.001.06E-015.08E+012.14E+034.22E+041.36E+002.45E+013.37E+024.09E+03 + 90L2 73.006.04E-022.03E+017.26E+021.29E+047.71E-011.19E+011.48E+021.66E+03 + 90L2 90.003.28E-027.75E+002.31E+023.62E+034.22E-015.52E+006.10E+016.16E+02 + 90L2 103.002.21E-024.19E+001.11E+021.60E+032.87E-013.38E+003.44E+013.22E+02 + 90L2 120.001.41E-022.10E+004.91E+016.37E+021.86E-011.95E+001.79E+011.53E+02 + 90L2 143.008.47E-039.65E-011.94E+012.23E+021.13E-011.04E+008.53E+006.52E+01 + 90L2 170.005.12E-034.52E-017.86E+008.02E+016.94E-025.62E-014.11E+002.81E+01 + 90L2 235.002.02E-031.13E-011.51E+001.23E+012.81E-021.82E-011.07E+005.92E+00 + 90L2 320.008.47E-043.18E-023.33E-012.19E+001.19E-026.34E-023.06E-011.39E+00 + 90L2 410.004.30E-041.19E-021.04E-015.80E-016.05E-032.78E-021.15E-014.48E-01 + 90L2 520.002.29E-044.80E-033.55E-021.71E-013.15E-031.28E-024.64E-021.57E-01 + 90L2 750.008.96E-051.27E-037.43E-032.91E-021.16E-034.04E-031.21E-023.36E-02 + 90L21000.004.41E-054.75E-042.36E-037.98E-035.28E-041.68E-034.41E-031.08E-02 + 90L21500.001.70E-051.30E-045.29E-041.50E-031.73E-045.04E-041.15E-032.40E-03 + 90L3 17.304.65E+002.18E+042.71E+064.36E+073.37E+005.41E+044.22E+073.84E+09 + 90L3 18.004.15E+001.78E+042.14E+063.80E+072.99E+004.44E+043.23E+072.84E+09 + 90L3 19.303.40E+001.25E+041.41E+062.85E+072.41E+003.13E+042.02E+071.67E+09 + 90L3 22.502.18E+005.79E+035.64E+051.34E+071.51E+001.46E+047.20E+065.21E+08 + 90L3 26.301.38E+002.64E+032.22E+055.61E+069.36E-016.70E+032.54E+061.60E+08 + 90L3 34.006.38E-017.25E+024.77E+041.20E+064.27E-011.87E+034.64E+052.33E+07 + 90L3 40.003.88E-013.21E+021.81E+044.31E+052.60E-018.31E+021.60E+056.96E+06 + 90L3 48.002.21E-011.29E+026.07E+031.34E+051.49E-013.36E+024.88E+041.81E+06 + 90L3 60.001.10E-014.22E+011.61E+033.13E+047.59E-021.11E+021.16E+043.55E+05 + 90L3 73.005.89E-021.59E+015.00E+028.62E+034.19E-024.19E+013.34E+038.63E+04 + 90L3 90.003.02E-025.63E+001.45E+022.16E+032.23E-021.49E+018.98E+021.94E+04 + 90L3 103.001.96E-022.89E+006.51E+018.81E+021.49E-027.63E+003.89E+027.52E+03 + 90L3 120.001.20E-021.36E+002.65E+013.20E+029.42E-033.59E+001.52E+022.60E+03 + 90L3 143.006.88E-035.78E-019.49E+001.00E+025.58E-031.52E+005.26E+017.80E+02 + 90L3 170.003.96E-032.49E-013.47E+003.21E+013.34E-036.49E-011.87E+012.42E+02 + 90L3 235.001.43E-035.27E-025.38E-013.88E+001.28E-031.34E-012.80E+002.86E+01 + 90L3 320.005.51E-041.23E-029.47E-025.42E-015.22E-043.01E-024.82E-013.98E+00 + 90L3 410.002.61E-043.96E-032.44E-021.17E-012.56E-049.20E-031.21E-018.59E-01 + 90L3 520.001.31E-041.38E-036.91E-032.84E-021.30E-043.00E-033.34E-022.06E-01 + 90L3 750.004.73E-052.93E-041.10E-033.64E-034.75E-055.61E-044.82E-032.47E-02 + 90L31000.002.22E-059.47E-052.88E-048.23E-042.23E-051.60E-041.11E-035.01E-03 + 90L31500.008.43E-062.23E-055.26E-051.23E-048.31E-063.15E-051.51E-045.79E-04 + 90M1 6.181.50E+001.08E+046.67E+051.09E+072.46E+033.56E+061.09E+097.85E+10 + 90M1 7.181.28E+005.73E+033.63E+058.19E+061.57E+031.71E+064.12E+082.83E+10 + 90M1 9.189.44E-012.02E+031.33E+053.52E+067.52E+025.15E+058.57E+075.23E+09 + 90M1 13.185.51E-014.29E+022.90E+048.48E+052.56E+028.94E+048.85E+064.30E+08 + 90M1 20.182.66E-016.68E+014.38E+031.31E+057.18E+011.17E+046.57E+052.32E+07 + 90M1 28.001.45E-011.55E+019.52E+022.71E+042.71E+012.51E+039.43E+042.56E+06 + 90M1 43.006.18E-022.25E+001.20E+022.97E+037.61E+003.51E+028.06E+031.53E+05 + 90M1 55.003.70E-027.58E-013.58E+017.92E+023.69E+001.17E+022.06E+033.17E+04 + 90M1 73.002.02E-022.31E-018.88E+001.69E+021.61E+003.39E+014.46E+025.40E+03 + 90M1 106.008.87E-035.78E-021.47E+002.20E+015.43E-017.01E+006.44E+015.69E+02 + 90M1 155.003.81E-031.80E-022.65E-012.93E+001.82E-011.51E+009.88E+006.39E+01 + 90M1 285.001.01E-033.87E-032.54E-021.57E-013.27E-021.53E-016.16E-012.50E+00 + 90M1 500.003.25E-041.13E-034.49E-031.67E-027.04E-032.27E-026.31E-021.76E-01 + 90M2 5.833.26E+001.14E+061.02E+091.18E+113.54E+021.33E+051.05E+071.69E+08 + 90M2 6.832.70E+005.17E+053.66E+084.01E+102.21E+026.50E+044.85E+061.24E+08 + 90M2 8.831.84E+001.45E+057.06E+076.84E+091.02E+022.07E+041.37E+064.61E+07 + 90M2 12.839.32E-012.29E+046.69E+065.20E+083.36E+014.05E+032.15E+057.67E+06 + 90M2 19.833.69E-012.71E+034.57E+052.63E+079.22E+006.40E+022.53E+047.89E+05 + 90M2 28.001.63E-015.07E+025.70E+042.55E+063.33E+001.55E+024.76E+031.24E+05 + 90M2 43.005.53E-026.47E+014.54E+031.46E+059.45E-012.77E+016.20E+021.23E+04 + 90M2 55.002.88E-022.02E+011.10E+032.91E+044.61E-011.06E+011.96E+023.28E+03 + 90M2 73.001.33E-025.38E+002.20E+024.66E+032.04E-013.57E+005.30E+017.24E+02 + 90M2 106.004.70E-039.76E-012.78E+014.38E+027.00E-028.79E-019.80E+001.02E+02 + 90M2 155.001.61E-031.80E-013.60E+004.21E+012.39E-022.19E-011.83E+001.43E+01 + 90M2 285.002.94E-041.36E-021.62E-011.19E+004.37E-032.58E-021.39E-017.03E-01 + 90M2 500.006.52E-051.48E-031.15E-025.83E-029.33E-043.95E-031.49E-025.26E-02 + 90M3 5.051.12E+012.86E+062.96E+093.77E+113.59E+017.36E+066.66E+106.95E+13 + 90M3 6.058.11E+001.15E+068.97E+081.04E+112.08E+012.98E+061.90E+101.48E+13 + 90M3 8.054.63E+002.75E+051.39E+081.36E+108.74E+007.16E+052.65E+091.31E+12 + 90M3 12.051.90E+003.62E+041.03E+077.74E+082.57E+009.54E+041.66E+084.48E+10 + 90M3 19.056.20E-013.63E+035.67E+053.07E+076.41E-019.69E+037.35E+061.06E+09 + 90M3 28.002.23E-015.25E+025.13E+042.09E+061.99E-011.42E+035.52E+054.88E+07 + 90M3 43.006.65E-026.14E+013.68E+031.07E+055.45E-021.68E+023.23E+041.74E+06 + 90M3 55.003.23E-021.80E+018.24E+021.97E+042.60E-024.94E+016.52E+032.68E+05 + 90M3 73.001.38E-024.41E+001.49E+022.84E+031.11E-021.21E+011.06E+033.25E+04 + 90M3 106.004.39E-037.00E-011.61E+012.25E+023.65E-031.91E+001.02E+022.17E+03 + 90M3 155.001.35E-031.09E-011.71E+001.76E+011.18E-032.95E-019.98E+001.52E+02 + 90M3 285.002.08E-045.95E-035.18E-023.28E-011.99E-041.51E-022.79E-012.62E+00 + 90M3 500.003.98E-054.60E-042.42E-031.03E-023.99E-051.04E-031.22E-027.95E-02 + 90M4 4.492.86E+018.38E+042.45E+091.94E+131.10E+012.42E+051.07E+094.71E+11 + 90M4 5.491.56E+013.03E+045.98E+083.35E+125.76E+008.85E+042.75E+081.04E+11 + 90M4 7.495.90E+006.29E+036.77E+072.26E+112.11E+001.87E+043.43E+071.01E+10 + 90M4 11.491.42E+007.26E+023.36E+065.71E+095.18E-012.18E+032.02E+064.12E+08 + 90M4 18.492.68E-016.61E+011.19E+051.01E+081.06E-012.00E+029.10E+041.22E+07 + 90M4 28.005.81E-028.18E+006.51E+033.13E+062.59E-022.48E+016.38E+035.89E+05 + 90M4 43.001.13E-029.44E-013.27E+029.08E+045.86E-032.88E+004.27E+022.67E+04 + 90M4 55.004.32E-032.73E-015.93E+011.22E+042.47E-038.38E-019.22E+014.63E+03 + 90M4 73.001.41E-036.59E-028.46E+001.25E+039.03E-042.03E-011.61E+016.29E+02 + 90M4 106.003.16E-041.02E-026.70E-016.47E+012.36E-043.17E-021.68E+004.70E+01 + 90M4 155.006.88E-051.55E-035.34E-023.38E+005.91E-054.82E-031.74E-013.51E+00 + 90M4 285.006.08E-068.07E-051.09E-033.53E-026.24E-062.42E-045.02E-036.23E-02 + 90M4 500.006.81E-075.87E-063.91E-056.67E-047.67E-071.60E-052.13E-041.78E-03 + 90M5 4.334.40E+017.78E+045.56E+093.50E+136.30E+001.34E+046.21E+091.72E+14 + 90M5 5.332.33E+012.68E+041.29E+095.65E+123.23E+004.75E+031.45E+092.70E+13 + 90M5 7.338.41E+005.27E+031.38E+083.51E+111.15E+009.69E+021.57E+081.58E+12 + 90M5 11.331.93E+005.72E+026.44E+068.09E+092.78E-011.11E+027.45E+063.30E+10 + 90M5 18.333.45E-014.95E+012.17E+051.32E+085.66E-021.01E+012.58E+054.75E+08 + 90M5 28.007.04E-025.70E+001.09E+043.64E+061.36E-021.23E+001.34E+041.18E+07 + 90M5 43.001.33E-026.32E-015.29E+021.00E+053.14E-031.49E-016.70E+022.91E+05 + 90M5 55.004.99E-031.78E-019.34E+011.29E+041.34E-034.48E-021.21E+023.57E+04 + 90M5 73.001.59E-034.12E-021.27E+011.25E+034.99E-041.14E-021.68E+013.28E+03 + 90M5 106.003.49E-046.02E-039.33E-015.88E+011.34E-041.91E-031.26E+001.48E+02 + 90M5 155.007.45E-058.60E-046.63E-022.71E+003.49E-053.22E-049.07E-026.69E+00 + 90M5 285.006.77E-064.15E-051.03E-032.14E-024.06E-062.06E-051.39E-035.39E-02 + 90M5 500.007.94E-073.05E-062.66E-052.88E-045.95E-071.90E-063.29E-057.44E-04 + 90N+ 50.004.79E-022.31E+011.48E+036.50E+042.03E+001.07E+026.74E+033.21E+05 + 90N+ 70.001.95E-024.56E+001.98E+025.68E+037.54E-012.31E+018.36E+022.55E+04 + 90N+ 100.007.68E-038.54E-012.52E+014.85E+022.69E-014.87E+001.01E+021.96E+03 + 90N+ 150.002.67E-031.33E-012.60E+003.33E+018.36E-028.85E-011.04E+011.24E+02 + 90N+ 200.001.28E-033.75E-025.50E-015.45E+003.67E-022.78E-012.28E+001.95E+01 + 90N+ 500.001.55E-041.13E-036.90E-033.25E-022.92E-031.02E-023.42E-021.20E-01 + 91K 113.602.87E-012.04E-014.00E-021.83E-031.20E+015.76E+015.62E+011.26E+01 + 91K 114.302.83E-012.07E-014.81E-023.91E-031.18E+015.63E+015.68E+011.50E+01 + 91K 115.602.76E-012.14E-016.35E-029.50E-031.14E+015.43E+015.77E+011.95E+01 + 91K 118.802.59E-012.28E-011.02E-013.26E-021.05E+014.95E+015.91E+012.99E+01 + 91K 122.602.40E-012.39E-011.47E-017.56E-029.63E+004.45E+015.92E+014.08E+01 + 91K 127.002.21E-012.46E-011.95E-011.41E-018.70E+003.95E+015.80E+015.11E+01 + 91K 133.001.99E-012.49E-012.51E-012.45E-017.63E+003.38E+015.51E+016.09E+01 + 91K 141.001.73E-012.45E-013.07E-013.88E-016.46E+002.78E+015.01E+016.77E+01 + 91K 153.001.43E-012.31E-013.58E-015.72E-015.12E+002.11E+014.21E+016.88E+01 + 91K 166.001.18E-012.11E-013.78E-017.07E-014.06E+001.61E+013.43E+016.35E+01 + 91K 183.009.43E-021.83E-013.73E-017.91E-013.09E+001.16E+012.62E+015.34E+01 + 91K 196.008.04E-021.64E-013.57E-018.04E-012.54E+009.25E+002.13E+014.55E+01 + 91K 213.006.63E-021.43E-013.28E-017.81E-012.01E+007.03E+001.65E+013.65E+01 + 91K 236.005.25E-021.18E-012.87E-017.13E-011.51E+005.03E+001.19E+012.70E+01 + 91K 265.004.04E-029.52E-022.40E-016.11E-011.10E+003.45E+008.13E+001.86E+01 + 91K 330.002.50E-026.23E-021.62E-014.15E-016.00E-011.72E+003.92E+008.82E+00 + 91K 415.001.54E-024.01E-021.03E-012.56E-013.21E-018.46E-011.83E+003.92E+00 + 91K 500.001.06E-022.82E-027.11E-021.69E-011.95E-014.84E-019.96E-012.03E+00 + 91K 610.007.23E-031.95E-024.76E-021.07E-011.15E-012.71E-015.28E-011.02E+00 + 91K 840.004.02E-031.10E-022.51E-025.17E-024.93E-021.10E-011.99E-013.49E-01 + 91K 1100.002.50E-036.84E-031.48E-022.84E-022.43E-025.35E-029.13E-021.49E-01 + 91K 1350.001.77E-034.76E-039.98E-031.82E-021.42E-023.14E-025.18E-028.11E-02 + 91K 1600.001.33E-033.53E-037.20E-031.27E-029.13E-032.04E-023.29E-024.99E-02 + 91L1 22.108.04E-011.89E+022.99E+035.13E+032.54E+022.95E+047.34E+054.34E+06 + 91L1 22.807.67E-011.64E+022.94E+038.59E+032.32E+022.55E+046.23E+054.13E+06 + 91L1 24.107.03E-011.28E+022.72E+031.36E+041.97E+021.97E+044.65E+053.59E+06 + 91L1 27.305.76E-017.27E+011.99E+031.78E+041.36E+021.11E+042.41E+052.30E+06 + 91L1 31.104.62E-013.99E+011.28E+031.54E+049.23E+016.07E+031.21E+051.29E+06 + 91L1 34.003.95E-012.64E+019.11E+021.24E+047.09E+014.05E+037.58E+048.37E+05 + 91L1 40.002.93E-011.23E+014.61E+027.14E+034.38E+011.94E+033.22E+043.63E+05 + 91L1 48.002.07E-015.28E+002.04E+023.34E+032.56E+018.59E+021.25E+041.36E+05 + 91L1 60.001.32E-011.92E+007.15E+011.18E+031.33E+013.23E+023.93E+033.97E+04 + 91L1 73.008.79E-028.29E-012.80E+014.41E+027.48E+001.39E+021.45E+031.33E+04 + 91L1 90.005.62E-023.69E-011.03E+011.50E+024.06E+005.75E+015.09E+024.14E+03 + 91L1 103.004.19E-022.31E-015.50E+007.45E+012.75E+003.30E+012.62E+021.96E+03 + 91L1 120.003.00E-021.43E-012.75E+003.38E+011.77E+001.77E+011.25E+028.47E+02 + 91L1 143.002.03E-028.66E-021.28E+001.38E+011.07E+008.83E+005.44E+013.27E+02 + 91L1 170.001.39E-025.51E-026.29E-015.88E+006.51E-014.51E+002.44E+011.30E+02 + 91L1 235.006.84E-032.54E-021.88E-011.30E+002.61E-011.34E+005.73E+002.46E+01 + 91L1 320.003.56E-031.27E-026.79E-023.50E-011.11E-014.47E-011.55E+005.42E+00 + 91L1 410.002.16E-037.49E-033.25E-021.35E-015.61E-021.93E-015.75E-011.72E+00 + 91L1 520.001.36E-034.60E-031.69E-025.82E-022.95E-028.94E-022.33E-016.08E-01 + 91L1 750.006.97E-042.25E-036.72E-031.82E-021.11E-022.91E-026.38E-021.38E-01 + 91L11000.004.22E-041.31E-033.45E-038.05E-035.20E-031.27E-022.50E-024.78E-02 + 91L11500.002.15E-046.26E-041.43E-032.85E-031.79E-034.23E-037.42E-031.24E-02 + 91L2 21.311.87E+007.99E+037.39E+058.70E+063.21E+011.23E+039.87E+031.50E+04 + 91L2 22.011.72E+006.82E+036.18E+058.13E+062.91E+011.09E+039.79E+032.51E+04 + 91L2 23.311.48E+005.15E+034.49E+056.87E+062.46E+018.81E+029.22E+033.98E+04 + 91L2 26.511.06E+002.76E+032.20E+054.12E+061.68E+015.49E+027.05E+035.33E+04 + 91L2 30.317.44E-011.44E+031.04E+052.16E+061.13E+013.35E+024.78E+034.74E+04 + 91L2 34.005.45E-018.27E+025.47E+041.19E+068.04E+002.19E+023.26E+033.66E+04 + 91L2 40.003.49E-013.79E+022.21E+044.81E+054.98E+001.20E+021.80E+032.20E+04 + 91L2 48.002.09E-011.59E+027.98E+031.68E+052.92E+006.09E+018.87E+021.10E+04 + 91L2 60.001.11E-015.54E+012.31E+034.46E+041.52E+002.67E+013.59E+024.25E+03 + 91L2 73.006.32E-022.22E+017.84E+021.37E+048.64E-011.30E+011.59E+021.75E+03 + 91L2 90.003.44E-028.47E+002.50E+023.87E+034.73E-016.03E+006.56E+016.52E+02 + 91L2 103.002.32E-024.58E+001.21E+021.71E+033.22E-013.70E+003.70E+013.42E+02 + 91L2 120.001.49E-022.30E+005.33E+016.84E+022.08E-012.13E+001.94E+011.63E+02 + 91L2 143.008.94E-031.06E+002.11E+012.40E+021.27E-011.14E+009.23E+006.98E+01 + 91L2 170.005.42E-034.96E-018.55E+008.65E+017.80E-026.18E-014.46E+003.02E+01 + 91L2 235.002.15E-031.24E-011.65E+001.33E+013.16E-022.00E-011.17E+006.40E+00 + 91L2 320.009.06E-043.50E-023.65E-012.38E+001.35E-027.01E-023.35E-011.50E+00 + 91L2 410.004.62E-041.31E-021.14E-016.33E-016.81E-033.08E-021.26E-014.88E-01 + 91L2 520.002.46E-045.29E-033.90E-021.87E-013.56E-031.42E-025.10E-021.71E-01 + 91L2 750.009.67E-051.40E-038.20E-033.19E-021.31E-034.49E-031.33E-023.69E-02 + 91L21000.004.79E-055.26E-042.61E-038.80E-035.96E-041.87E-034.88E-031.19E-02 + 91L21500.001.85E-051.44E-045.87E-041.66E-031.95E-045.65E-041.28E-032.66E-03 + 91L3 17.734.42E+002.06E+042.47E+063.86E+073.30E+005.29E+043.98E+073.51E+09 + 91L3 18.433.96E+001.70E+041.96E+063.37E+072.93E+004.36E+043.07E+072.62E+09 + 91L3 19.733.26E+001.20E+041.31E+062.55E+072.38E+003.11E+041.94E+071.56E+09 + 91L3 22.932.11E+005.65E+035.32E+051.22E+071.50E+001.47E+047.06E+064.99E+08 + 91L3 26.731.35E+002.61E+032.13E+055.21E+069.39E-016.84E+032.54E+061.57E+08 + 91L3 34.006.56E-017.79E+025.05E+041.24E+064.51E-012.06E+035.16E+052.58E+07 + 91L3 40.003.99E-013.45E+021.91E+044.47E+052.74E-019.19E+021.78E+057.69E+06 + 91L3 48.002.27E-011.38E+026.44E+031.39E+051.58E-013.71E+025.42E+042.00E+06 + 91L3 60.001.13E-014.53E+011.70E+033.27E+048.01E-021.23E+021.29E+043.92E+05 + 91L3 73.006.09E-021.71E+015.30E+029.02E+034.43E-024.63E+013.70E+039.51E+04 + 91L3 90.003.13E-026.05E+001.53E+022.26E+032.35E-021.64E+019.94E+022.14E+04 + 91L3 103.002.04E-023.10E+006.91E+019.25E+021.57E-028.44E+004.30E+028.29E+03 + 91L3 120.001.25E-021.46E+002.81E+013.36E+029.94E-033.97E+001.68E+022.86E+03 + 91L3 143.007.15E-036.21E-011.01E+011.06E+025.89E-031.68E+005.81E+018.58E+02 + 91L3 170.004.12E-032.68E-013.68E+003.38E+013.52E-037.17E-012.06E+012.66E+02 + 91L3 235.001.49E-035.65E-025.72E-014.10E+001.35E-031.48E-013.09E+003.14E+01 + 91L3 320.005.76E-041.32E-021.01E-015.73E-015.50E-043.31E-025.30E-014.37E+00 + 91L3 410.002.74E-044.25E-032.59E-021.24E-012.69E-041.01E-021.34E-019.42E-01 + 91L3 520.001.37E-041.47E-037.35E-033.01E-021.37E-043.30E-033.67E-022.26E-01 + 91L3 750.004.95E-053.13E-041.17E-033.87E-035.00E-056.14E-045.29E-032.71E-02 + 91L31000.002.33E-051.01E-043.07E-048.76E-042.34E-051.74E-041.21E-035.49E-03 + 91L31500.008.82E-062.36E-055.59E-051.31E-048.70E-063.40E-051.65E-046.33E-04 + 91M1 6.371.41E+001.05E+046.38E+059.77E+062.49E+033.44E+061.01E+097.01E+10 + 91M1 7.371.21E+005.66E+033.53E+057.58E+061.61E+031.68E+063.92E+082.60E+10 + 91M1 9.379.00E-012.04E+031.32E+053.39E+067.86E+025.21E+058.44E+075.00E+09 + 91M1 13.375.32E-014.46E+022.94E+048.39E+052.72E+029.31E+049.06E+064.30E+08 + 91M1 20.372.61E-017.14E+014.53E+031.33E+057.75E+011.25E+046.92E+052.41E+07 + 91M1 28.001.45E-011.74E+011.03E+032.88E+043.01E+012.79E+031.05E+052.82E+06 + 91M1 43.006.22E-022.56E+001.32E+023.19E+038.44E+003.89E+028.91E+031.68E+05 + 91M1 55.003.74E-028.66E-013.96E+018.58E+024.09E+001.29E+022.27E+033.48E+04 + 91M1 73.002.04E-022.63E-019.87E+001.85E+021.78E+003.75E+014.92E+025.92E+03 + 91M1 106.009.04E-036.48E-021.64E+002.43E+016.02E-017.74E+007.08E+016.23E+02 + 91M1 155.003.90E-031.97E-022.96E-013.25E+002.02E-011.67E+001.08E+016.98E+01 + 91M1 285.001.04E-034.15E-032.80E-021.73E-013.62E-021.68E-016.74E-012.72E+00 + 91M1 500.003.38E-041.21E-034.88E-031.83E-027.78E-032.49E-026.89E-021.92E-01 + 91M2 6.003.06E+001.07E+069.29E+081.04E+113.64E+021.29E+059.83E+061.51E+08 + 91M2 7.002.55E+005.00E+053.42E+083.62E+102.30E+026.45E+044.64E+061.13E+08 + 91M2 9.001.77E+001.44E+056.84E+076.44E+091.09E+022.10E+041.34E+064.36E+07 + 91M2 13.009.12E-012.35E+046.73E+065.11E+083.63E+014.22E+032.18E+057.55E+06 + 91M2 20.003.68E-012.84E+034.73E+052.68E+071.01E+016.80E+022.63E+048.03E+05 + 91M2 28.001.68E-015.55E+026.21E+042.75E+063.73E+001.70E+025.17E+031.33E+05 + 91M2 43.005.72E-027.09E+014.95E+031.58E+051.06E+003.05E+016.73E+021.32E+04 + 91M2 55.002.99E-022.21E+011.19E+033.15E+045.19E-011.16E+012.13E+023.53E+03 + 91M2 73.001.39E-025.90E+002.39E+025.04E+032.29E-013.93E+005.77E+017.80E+02 + 91M2 106.004.95E-031.07E+003.03E+014.75E+027.88E-029.69E-011.07E+011.10E+02 + 91M2 155.001.70E-031.98E-013.94E+004.58E+012.69E-022.42E-012.00E+001.55E+01 + 91M2 285.003.14E-041.50E-021.77E-011.31E+004.94E-032.86E-021.52E-017.68E-01 + 91M2 500.007.02E-051.64E-031.27E-026.41E-021.06E-034.40E-031.65E-025.78E-02 + 91M3 5.171.07E+012.72E+062.70E+093.34E+113.52E+017.23E+066.30E+106.38E+13 + 91M3 6.177.80E+001.12E+068.43E+089.49E+102.06E+012.99E+061.85E+101.41E+13 + 91M3 8.174.50E+002.74E+051.35E+081.29E+108.82E+007.36E+052.67E+091.30E+12 + 91M3 12.171.88E+003.71E+041.04E+077.60E+082.64E+001.01E+051.74E+084.65E+10 + 91M3 19.176.21E-013.79E+035.82E+053.10E+076.65E-011.04E+047.89E+061.13E+09 + 91M3 28.002.28E-015.68E+025.50E+042.20E+062.11E-011.58E+036.19E+055.49E+07 + 91M3 43.006.84E-026.64E+013.93E+031.13E+055.77E-021.87E+023.62E+041.94E+06 + 91M3 55.003.33E-021.95E+018.80E+022.08E+042.75E-025.49E+017.29E+032.99E+05 + 91M3 73.001.43E-024.77E+001.60E+023.00E+031.18E-021.35E+011.18E+033.62E+04 + 91M3 106.004.57E-037.57E-011.72E+012.39E+023.86E-032.13E+001.14E+022.42E+03 + 91M3 155.001.41E-031.18E-011.83E+001.86E+011.25E-033.28E-011.11E+011.68E+02 + 91M3 285.002.17E-046.42E-035.54E-023.48E-012.11E-041.68E-023.10E-012.90E+00 + 91M3 500.004.18E-054.95E-042.59E-031.10E-024.23E-051.15E-031.35E-028.77E-02 + 91M4 4.612.72E+017.96E+042.23E+091.72E+131.08E+012.38E+051.01E+094.29E+11 + 91M4 5.611.51E+012.94E+045.62E+083.09E+125.73E+008.91E+042.68E+089.82E+10 + 91M4 7.615.80E+006.30E+036.62E+072.19E+112.14E+001.93E+043.47E+079.96E+09 + 91M4 11.611.43E+007.48E+023.41E+065.80E+095.35E-012.32E+032.12E+064.24E+08 + 91M4 18.612.74E-016.96E+011.25E+051.06E+081.11E-012.17E+029.78E+041.29E+07 + 91M4 28.006.12E-028.91E+007.13E+033.46E+062.78E-022.79E+017.13E+036.54E+05 + 91M4 43.001.20E-021.03E+003.58E+021.01E+056.31E-033.23E+004.77E+022.97E+04 + 91M4 55.004.59E-032.99E-016.50E+011.35E+042.66E-039.42E-011.03E+025.14E+03 + 91M4 73.001.50E-037.20E-029.27E+001.38E+039.75E-042.28E-011.80E+016.99E+02 + 91M4 106.003.39E-041.12E-027.35E-017.17E+012.55E-043.56E-021.87E+005.23E+01 + 91M4 155.007.39E-051.70E-035.85E-023.75E+006.41E-055.42E-031.94E-013.91E+00 + 91M4 285.006.57E-068.88E-051.20E-033.91E-026.78E-062.72E-045.62E-036.95E-02 + 91M4 500.007.49E-076.46E-064.29E-057.41E-048.35E-071.80E-052.39E-041.99E-03 + 91M5 4.444.20E+017.25E+045.14E+093.12E+136.15E+001.28E+045.90E+091.58E+14 + 91M5 5.442.25E+012.56E+041.23E+095.25E+123.21E+004.64E+031.43E+092.58E+13 + 91M5 7.448.29E+005.17E+031.37E+083.42E+111.17E+009.73E+021.60E+081.58E+12 + 91M5 11.441.94E+005.77E+026.64E+068.25E+092.86E-011.14E+027.88E+063.48E+10 + 91M5 18.443.53E-015.08E+012.30E+051.38E+085.90E-021.06E+012.80E+055.16E+08 + 91M5 28.007.40E-026.04E+001.21E+044.02E+061.45E-021.33E+001.52E+041.35E+07 + 91M5 43.001.40E-026.71E-015.85E+021.10E+053.35E-031.61E-017.59E+023.32E+05 + 91M5 55.005.27E-031.89E-011.03E+021.43E+041.43E-034.84E-021.36E+024.07E+04 + 91M5 73.001.69E-034.40E-021.41E+011.38E+035.34E-041.23E-021.90E+013.73E+03 + 91M5 106.003.72E-046.43E-031.03E+006.49E+011.44E-042.06E-031.42E+001.68E+02 + 91M5 155.007.97E-059.21E-047.32E-022.99E+003.74E-053.47E-041.02E-017.59E+00 + 91M5 285.007.15E-064.46E-051.14E-032.36E-024.36E-062.22E-051.57E-036.09E-02 + 91M5 500.008.74E-073.28E-062.92E-053.17E-046.40E-072.05E-063.68E-058.39E-04 + 91N+ 50.004.94E-022.53E+011.61E+037.12E+042.26E+001.19E+027.55E+033.62E+05 + 91N+ 70.002.02E-025.00E+002.15E+026.20E+038.38E-012.57E+019.34E+022.86E+04 + 91N+ 100.007.95E-039.36E-012.75E+015.28E+022.99E-015.40E+001.13E+022.19E+03 + 91N+ 150.002.78E-031.46E-012.84E+003.63E+019.30E-029.79E-011.15E+011.38E+02 + 91N+ 200.001.33E-034.11E-026.03E-015.94E+004.08E-023.08E-012.52E+002.16E+01 + 91N+ 500.001.62E-041.24E-037.58E-033.58E-023.24E-031.13E-023.76E-021.32E-01 + 92K 116.612.73E-011.88E-013.69E-021.66E-031.21E+015.59E+015.27E+011.15E+01 + 92K 117.312.69E-011.91E-014.41E-023.52E-031.19E+015.47E+015.32E+011.36E+01 + 92K 118.612.62E-011.98E-015.80E-028.47E-031.15E+015.28E+015.41E+011.76E+01 + 92K 121.812.47E-012.10E-019.27E-022.89E-021.07E+014.83E+015.55E+012.69E+01 + 92K 125.612.30E-012.20E-011.33E-016.68E-029.80E+004.35E+015.57E+013.68E+01 + 92K 130.002.12E-012.27E-011.77E-011.25E-018.88E+003.88E+015.47E+014.61E+01 + 92K 136.001.91E-012.31E-012.29E-012.18E-017.80E+003.33E+015.22E+015.52E+01 + 92K 144.001.67E-012.29E-012.82E-013.48E-016.63E+002.75E+014.77E+016.18E+01 + 92K 156.001.39E-012.17E-013.32E-015.19E-015.28E+002.11E+014.05E+016.35E+01 + 92K 169.001.15E-012.00E-013.54E-016.49E-014.21E+001.61E+013.33E+015.93E+01 + 92K 186.009.23E-021.76E-013.53E-017.36E-013.21E+001.17E+012.56E+015.04E+01 + 92K 199.007.90E-021.58E-013.40E-017.55E-012.66E+009.39E+002.10E+014.33E+01 + 92K 216.006.55E-021.38E-013.16E-017.41E-012.11E+007.17E+001.63E+013.51E+01 + 92K 239.005.21E-021.16E-012.79E-016.85E-011.59E+005.15E+001.19E+012.62E+01 + 92K 265.004.13E-029.60E-022.40E-016.03E-011.19E+003.69E+008.49E+001.90E+01 + 92K 330.002.56E-026.36E-021.64E-014.18E-016.53E-011.84E+004.12E+009.09E+00 + 92K 415.001.59E-024.13E-021.06E-012.62E-013.50E-019.07E-011.93E+004.08E+00 + 92K 510.001.05E-022.82E-027.08E-021.66E-012.01E-014.90E-019.89E-011.98E+00 + 92K 620.007.25E-031.97E-024.80E-021.07E-011.19E-012.78E-015.33E-011.01E+00 + 92K 850.004.08E-031.13E-022.57E-025.26E-025.19E-021.15E-012.05E-013.55E-01 + 92K 1100.002.60E-037.17E-031.56E-022.98E-022.63E-025.76E-029.74E-021.58E-01 + 92K 1350.001.84E-035.00E-031.05E-021.91E-021.54E-023.38E-025.53E-028.61E-02 + 92K 1600.001.39E-033.71E-037.59E-031.34E-029.84E-032.19E-023.51E-025.30E-02 + 92L1 22.767.56E-011.80E+022.73E+034.49E+032.58E+022.85E+046.80E+053.88E+06 + 92L1 23.467.23E-011.58E+022.69E+037.48E+032.35E+022.47E+045.80E+053.70E+06 + 92L1 24.766.65E-011.24E+022.51E+031.18E+042.01E+021.92E+044.36E+053.24E+06 + 92L1 27.965.48E-017.18E+011.86E+031.58E+041.40E+021.09E+042.30E+052.11E+06 + 92L1 31.764.42E-014.01E+011.22E+031.40E+049.58E+016.09E+031.18E+051.21E+06 + 92L1 35.003.73E-012.56E+018.44E+021.11E+047.18E+013.91E+037.05E+047.54E+05 + 92L1 41.002.79E-011.23E+014.38E+026.53E+034.50E+011.91E+033.07E+043.35E+05 + 92L1 49.001.99E-015.42E+001.98E+023.14E+032.66E+018.63E+021.21E+041.29E+05 + 92L1 61.001.28E-012.02E+007.17E+011.14E+031.40E+013.31E+023.93E+033.87E+04 + 92L1 74.008.62E-028.90E-012.87E+014.37E+027.93E+001.44E+021.47E+031.32E+04 + 92L1 91.005.56E-023.99E-011.08E+011.52E+024.34E+006.03E+015.24E+024.18E+03 + 92L1 104.004.17E-022.49E-015.82E+007.66E+012.95E+003.48E+012.72E+022.00E+03 + 92L1 121.002.99E-021.53E-012.93E+003.52E+011.90E+001.88E+011.31E+028.71E+02 + 92L1 144.002.04E-029.24E-021.38E+001.46E+011.15E+009.41E+005.73E+013.40E+02 + 92L1 170.001.42E-025.94E-026.96E-016.44E+007.18E-014.94E+002.65E+011.41E+02 + 92L1 235.007.03E-032.70E-022.06E-011.42E+002.88E-011.47E+006.23E+002.65E+01 + 92L1 320.003.68E-031.35E-027.39E-023.82E-011.22E-014.89E-011.68E+005.86E+00 + 92L1 410.002.23E-037.94E-033.52E-021.46E-016.17E-022.11E-016.24E-011.86E+00 + 92L1 520.001.41E-034.88E-031.82E-026.31E-023.24E-029.76E-022.53E-016.57E-01 + 92L1 750.007.28E-042.39E-037.22E-031.96E-021.22E-023.18E-026.92E-021.49E-01 + 92L11000.004.43E-041.40E-033.70E-038.67E-035.69E-031.39E-022.71E-025.17E-02 + 92L11500.002.25E-046.66E-041.53E-033.06E-031.95E-034.60E-038.05E-031.34E-02 + 92L2 21.951.77E+007.53E+036.68E+057.57E+063.28E+011.18E+039.16E+031.33E+04 + 92L2 22.651.63E+006.46E+035.62E+057.10E+062.99E+011.06E+039.10E+032.22E+04 + 92L2 23.951.42E+004.92E+034.12E+056.04E+062.54E+018.61E+028.61E+033.53E+04 + 92L2 27.151.02E+002.67E+032.05E+053.70E+061.75E+015.44E+026.67E+034.80E+04 + 92L2 30.957.24E-011.42E+039.90E+041.98E+061.19E+013.35E+024.59E+034.35E+04 + 92L2 35.005.20E-017.83E+024.98E+041.04E+068.26E+002.13E+023.05E+033.32E+04 + 92L2 41.003.37E-013.67E+022.06E+044.36E+055.18E+001.19E+021.72E+032.03E+04 + 92L2 49.002.05E-011.57E+027.65E+031.56E+053.08E+006.13E+018.64E+021.04E+04 + 92L2 61.001.10E-015.60E+012.27E+034.28E+041.63E+002.73E+013.57E+024.11E+03 + 92L2 74.006.35E-022.28E+017.86E+021.34E+049.30E-011.35E+011.60E+021.72E+03 + 92L2 91.003.50E-028.79E+002.55E+023.87E+035.14E-016.33E+006.72E+016.54E+02 + 92L2 104.002.38E-024.79E+001.24E+021.73E+033.51E-013.91E+003.83E+013.46E+02 + 92L2 121.001.53E-022.42E+005.53E+016.98E+022.28E-012.27E+002.02E+011.67E+02 + 92L2 144.009.26E-031.12E+002.20E+012.48E+021.40E-011.22E+009.70E+007.23E+01 + 92L2 170.005.74E-035.43E-019.30E+009.32E+018.76E-026.78E-014.84E+003.24E+01 + 92L2 235.002.28E-031.37E-011.80E+001.44E+013.55E-022.20E-011.27E+006.91E+00 + 92L2 320.009.68E-043.85E-023.99E-012.59E+001.51E-027.74E-023.66E-011.63E+00 + 92L2 410.004.96E-041.44E-021.25E-016.90E-017.67E-033.41E-021.39E-015.31E-01 + 92L2 520.002.66E-045.84E-034.29E-022.05E-014.01E-031.58E-025.61E-021.87E-01 + 92L2 750.001.05E-041.55E-039.04E-033.51E-021.47E-035.00E-031.47E-024.05E-02 + 92L21000.005.21E-055.82E-042.89E-039.70E-036.73E-042.09E-035.41E-031.31E-02 + 92L21500.002.02E-051.60E-046.51E-041.84E-032.20E-046.33E-041.42E-032.94E-03 + 92L3 18.174.22E+001.96E+042.27E+063.43E+073.23E+005.18E+043.77E+073.23E+09 + 92L3 18.873.79E+001.62E+041.81E+063.01E+072.88E+004.29E+042.92E+072.43E+09 + 92L3 20.173.13E+001.16E+041.21E+062.29E+072.34E+003.08E+041.86E+071.46E+09 + 92L3 23.372.05E+005.52E+035.04E+051.12E+071.49E+001.48E+046.94E+064.78E+08 + 92L3 27.171.32E+002.59E+032.05E+054.86E+069.43E-016.97E+032.54E+061.53E+08 + 92L3 35.006.17E-017.24E+024.50E+041.07E+064.35E-011.97E+034.74E+052.29E+07 + 92L3 41.003.81E-013.27E+021.75E+043.97E+052.69E-018.98E+021.68E+057.07E+06 + 92L3 49.002.20E-011.34E+026.03E+031.27E+051.56E-013.70E+025.26E+041.90E+06 + 92L3 61.001.11E-014.49E+011.64E+033.06E+048.04E-021.25E+021.29E+043.83E+05 + 92L3 74.006.03E-021.71E+015.19E+028.62E+034.48E-024.78E+013.76E+039.50E+04 + 92L3 91.003.13E-026.15E+001.52E+022.20E+032.40E-021.72E+011.03E+032.18E+04 + 92L3 104.002.05E-023.18E+006.93E+019.10E+021.61E-028.88E+004.48E+028.52E+03 + 92L3 121.001.26E-021.51E+002.84E+013.34E+021.02E-024.21E+001.77E+022.97E+03 + 92L3 144.007.26E-036.44E-011.03E+011.06E+026.09E-031.79E+006.15E+018.99E+02 + 92L3 170.004.29E-032.88E-013.91E+003.55E+013.72E-037.91E-012.28E+012.93E+02 + 92L3 235.001.55E-036.07E-026.08E-014.32E+001.43E-031.63E-013.40E+003.44E+01 + 92L3 320.006.02E-041.42E-021.07E-016.05E-015.80E-043.65E-025.84E-014.79E+00 + 92L3 410.002.87E-044.55E-032.76E-021.31E-012.84E-041.11E-021.47E-011.03E+00 + 92L3 520.001.44E-041.58E-037.83E-033.19E-021.45E-043.62E-034.03E-022.47E-01 + 92L3 750.005.20E-053.33E-041.24E-034.11E-035.25E-056.70E-045.80E-032.97E-02 + 92L31000.002.44E-051.07E-043.26E-049.32E-042.46E-051.89E-041.33E-036.00E-03 + 92L31500.009.23E-062.49E-055.93E-051.39E-049.10E-063.67E-051.81E-046.92E-04 + 92M1 6.551.33E+001.03E+046.17E+058.92E+062.54E+033.34E+069.41E+086.34E+10 + 92M1 7.551.15E+005.62E+033.46E+057.11E+061.66E+031.66E+063.75E+082.42E+10 + 92M1 9.558.60E-012.07E+031.31E+053.29E+068.22E+025.28E+058.36E+074.82E+09 + 92M1 13.555.16E-014.65E+022.98E+048.36E+052.89E+029.70E+049.29E+064.32E+08 + 92M1 20.552.56E-017.63E+014.70E+031.35E+058.35E+011.33E+047.29E+052.50E+07 + 92M1 29.001.36E-011.67E+019.50E+022.58E+043.00E+012.63E+039.45E+042.46E+06 + 92M1 44.005.97E-022.62E+001.29E+023.04E+038.73E+003.89E+028.65E+031.59E+05 + 92M1 56.003.63E-029.12E-013.99E+018.43E+024.29E+001.32E+022.27E+033.40E+04 + 92M1 74.002.01E-022.83E-011.03E+011.87E+021.90E+003.90E+015.03E+025.97E+03 + 92M1 107.009.02E-037.03E-021.76E+002.54E+016.48E-018.21E+007.41E+016.44E+02 + 92M1 155.004.00E-032.16E-023.31E-013.59E+002.23E-011.83E+001.19E+017.62E+01 + 92M1 285.001.07E-034.45E-033.08E-021.91E-014.00E-021.85E-017.37E-012.97E+00 + 92M1 500.003.51E-041.29E-035.30E-032.00E-028.57E-032.73E-027.52E-022.08E-01 + 92M2 6.182.87E+001.01E+068.39E+089.04E+103.74E+021.25E+059.15E+061.34E+08 + 92M2 7.182.41E+004.81E+053.18E+083.26E+102.39E+026.37E+044.41E+061.03E+08 + 92M2 9.181.69E+001.43E+056.58E+076.03E+091.15E+022.13E+041.32E+064.11E+07 + 92M2 13.188.91E-012.40E+046.74E+065.00E+083.90E+014.39E+032.21E+057.41E+06 + 92M2 20.183.66E-012.98E+034.88E+052.71E+071.10E+017.22E+022.73E+048.14E+05 + 92M2 29.001.58E-015.13E+025.49E+042.34E+063.78E+001.62E+024.74E+031.18E+05 + 92M2 44.005.57E-026.96E+014.71E+031.47E+051.11E+003.07E+016.56E+021.25E+04 + 92M2 56.002.96E-022.23E+011.17E+033.02E+045.53E-011.20E+012.13E+023.44E+03 + 92M2 74.001.40E-026.07E+002.42E+025.00E+032.47E-014.11E+005.90E+017.82E+02 + 92M2 107.005.07E-031.13E+003.14E+014.85E+028.63E-021.03E+001.12E+011.13E+02 + 92M2 155.001.80E-032.18E-014.31E+004.98E+013.03E-022.67E-012.19E+001.68E+01 + 92M2 285.003.35E-041.65E-021.95E-011.43E+005.57E-033.17E-021.67E-018.38E-01 + 92M2 500.007.57E-051.82E-031.41E-027.04E-021.19E-034.90E-031.82E-026.35E-02 + 92M3 5.301.02E+012.59E+062.48E+092.97E+113.46E+017.10E+065.98E+105.88E+13 + 92M3 6.307.52E+001.09E+067.94E+088.68E+102.05E+013.00E+061.81E+101.34E+13 + 92M3 8.304.39E+002.73E+051.31E+081.22E+108.90E+007.56E+052.70E+091.29E+12 + 92M3 12.301.86E+003.80E+041.04E+077.47E+082.70E+001.06E+051.81E+084.81E+10 + 92M3 19.306.21E-013.96E+035.98E+053.13E+076.90E-011.12E+048.46E+061.21E+09 + 92M3 29.002.12E-015.14E+024.73E+041.82E+062.01E-011.47E+035.48E+054.67E+07 + 92M3 44.006.59E-026.39E+013.65E+031.02E+055.71E-021.85E+023.48E+041.82E+06 + 92M3 56.003.26E-021.92E+018.43E+021.94E+042.76E-025.58E+017.24E+032.91E+05 + 92M3 74.001.42E-024.81E+001.57E+022.89E+031.20E-021.40E+011.21E+033.65E+04 + 92M3 107.004.60E-037.80E-011.74E+012.37E+023.98E-032.26E+001.19E+022.51E+03 + 92M3 155.001.47E-031.28E-011.96E+001.98E+011.33E-033.63E-011.23E+011.87E+02 + 92M3 285.002.27E-046.93E-035.93E-023.70E-012.23E-041.86E-023.43E-013.20E+00 + 92M3 500.004.37E-055.32E-042.77E-031.17E-024.47E-051.26E-031.49E-029.68E-02 + 92M4 4.732.60E+017.60E+042.04E+091.54E+131.06E+012.35E+059.55E+083.96E+11 + 92M4 5.731.46E+012.88E+045.31E+082.87E+125.71E+009.00E+042.62E+089.36E+10 + 92M4 7.735.72E+006.33E+036.50E+072.14E+112.17E+002.01E+043.52E+079.89E+09 + 92M4 11.731.44E+007.72E+023.48E+065.91E+095.53E-012.47E+032.22E+064.38E+08 + 92M4 18.732.81E-017.33E+011.30E+051.11E+081.16E-012.36E+021.05E+051.37E+07 + 92M4 29.005.65E-028.13E+006.10E+032.86E+062.64E-022.62E+016.38E+035.63E+05 + 92M4 44.001.16E-021.00E+003.34E+029.21E+046.26E-033.23E+004.61E+022.80E+04 + 92M4 56.004.53E-032.98E-016.29E+011.29E+042.69E-039.66E-011.03E+025.03E+03 + 92M4 74.001.51E-037.36E-029.25E+001.37E+031.00E-032.40E-011.85E+017.06E+02 + 92M4 107.003.49E-041.17E-027.56E-017.36E+012.67E-043.82E-021.98E+005.45E+01 + 92M4 155.007.93E-051.87E-036.41E-024.15E+006.94E-056.09E-032.17E-014.35E+00 + 92M4 285.007.00E-069.78E-051.31E-034.34E-027.36E-063.06E-046.29E-037.74E-02 + 92M4 500.007.96E-077.12E-064.72E-058.23E-049.08E-072.02E-052.68E-042.22E-03 + 92M5 4.524.09E+016.99E+044.99E+092.97E+136.14E+001.26E+045.89E+091.55E+14 + 92M5 5.522.22E+012.51E+041.23E+095.14E+123.23E+004.66E+031.46E+092.60E+13 + 92M5 7.528.28E+005.17E+031.40E+083.46E+111.19E+009.97E+021.68E+081.65E+12 + 92M5 11.521.97E+005.89E+026.96E+068.61E+092.97E-011.19E+028.49E+063.74E+10 + 92M5 18.523.63E-015.26E+012.46E+051.47E+086.17E-021.12E+013.07E+055.69E+08 + 92M5 29.006.79E-025.35E+001.04E+043.31E+061.37E-021.21E+001.34E+041.13E+07 + 92M5 44.001.35E-026.33E-015.49E+021.01E+053.30E-031.55E-017.30E+023.11E+05 + 92M5 56.005.18E-031.83E-011.00E+021.35E+041.43E-034.78E-021.36E+023.98E+04 + 92M5 74.001.69E-034.36E-021.41E+011.36E+035.43E-041.24E-021.95E+013.79E+03 + 92M5 107.003.81E-046.54E-031.07E+006.62E+011.49E-042.13E-031.50E+001.77E+02 + 92M5 155.008.52E-059.84E-048.08E-023.29E+004.01E-053.74E-041.15E-018.60E+00 + 92M5 285.007.66E-064.78E-051.25E-032.60E-024.67E-062.39E-051.76E-036.88E-02 + 92M5 500.009.30E-073.54E-063.21E-053.49E-046.86E-072.21E-064.11E-059.45E-04 + 92N+ 50.005.07E-022.77E+011.75E+037.78E+042.49E+001.31E+028.45E+034.08E+05 + 92N+ 70.002.07E-025.47E+002.34E+026.76E+039.24E-012.83E+011.04E+033.20E+04 + 92N+ 100.008.18E-031.03E+002.99E+015.74E+023.30E-015.94E+001.25E+022.44E+03 + 92N+ 150.002.86E-031.60E-013.10E+003.95E+011.02E-011.08E+001.28E+011.52E+02 + 92N+ 200.001.38E-034.50E-026.59E-016.47E+004.50E-023.38E-012.78E+002.39E+01 + 92N+ 500.001.68E-041.34E-038.31E-033.92E-023.56E-031.23E-024.10E-021.44E-01 + 93K 119.672.59E-011.74E-013.41E-021.52E-031.23E+015.43E+014.95E+011.05E+01 + 93K 120.372.55E-011.77E-014.06E-023.18E-031.21E+015.32E+015.00E+011.24E+01 + 93K 121.672.49E-011.83E-015.31E-027.58E-031.17E+015.14E+015.08E+011.59E+01 + 93K 124.872.35E-011.94E-018.46E-022.57E-021.09E+014.71E+015.21E+012.43E+01 + 93K 128.672.19E-012.04E-011.21E-015.93E-021.00E+014.26E+015.24E+013.31E+01 + 93K 133.002.03E-012.11E-011.61E-011.10E-019.09E+003.82E+015.17E+014.15E+01 + 93K 139.001.83E-012.15E-012.09E-011.94E-018.02E+003.29E+014.95E+015.00E+01 + 93K 147.001.61E-012.14E-012.60E-013.12E-016.84E+002.74E+014.55E+015.65E+01 + 93K 159.001.35E-012.05E-013.08E-014.72E-015.47E+002.11E+013.89E+015.86E+01 + 93K 172.001.12E-011.90E-013.32E-015.97E-014.38E+001.62E+013.23E+015.53E+01 + 93K 189.009.04E-021.68E-013.35E-016.87E-013.36E+001.19E+012.50E+014.76E+01 + 93K 202.007.77E-021.53E-013.25E-017.11E-012.78E+009.54E+002.07E+014.13E+01 + 93K 219.006.46E-021.35E-013.05E-017.04E-012.22E+007.32E+001.62E+013.37E+01 + 93K 242.005.16E-021.14E-012.72E-016.58E-011.68E+005.29E+001.18E+012.55E+01 + 93K 270.004.05E-029.36E-022.33E-015.80E-011.24E+003.72E+008.34E+001.82E+01 + 93K 335.002.54E-026.31E-021.63E-014.09E-016.84E-011.88E+004.12E+008.89E+00 + 93K 420.001.59E-024.16E-021.07E-012.61E-013.70E-019.39E-011.96E+004.07E+00 + 93K 510.001.09E-022.92E-027.33E-021.72E-012.19E-015.26E-011.05E+002.07E+00 + 93K 620.007.49E-032.06E-025.00E-021.11E-011.30E-012.99E-015.66E-011.06E+00 + 93K 850.004.23E-031.18E-022.70E-025.50E-025.64E-021.24E-012.18E-013.76E-01 + 93K 1100.002.70E-037.53E-031.64E-023.13E-022.86E-026.20E-021.04E-011.68E-01 + 93K 1350.001.92E-035.26E-031.11E-022.02E-021.67E-023.64E-025.91E-029.16E-02 + 93K 1600.001.44E-033.91E-038.01E-031.41E-021.06E-022.36E-023.76E-025.64E-02 + 93L1 23.427.13E-011.73E+022.50E+033.94E+032.62E+022.75E+046.31E+053.48E+06 + 93L1 24.126.82E-011.52E+022.47E+036.54E+032.40E+022.40E+045.41E+053.32E+06 + 93L1 25.426.29E-011.20E+022.31E+031.04E+042.05E+021.88E+044.10E+052.93E+06 + 93L1 28.625.21E-017.09E+011.75E+031.41E+041.44E+021.08E+042.20E+051.94E+06 + 93L1 32.424.23E-014.04E+011.16E+031.27E+049.98E+016.12E+031.14E+051.13E+06 + 93L1 36.003.52E-012.50E+017.86E+029.98E+037.31E+013.79E+036.60E+046.84E+05 + 93L1 42.002.66E-011.24E+014.17E+025.99E+034.64E+011.89E+032.94E+043.11E+05 + 93L1 50.001.91E-015.58E+001.94E+022.95E+032.77E+018.70E+021.19E+041.23E+05 + 93L1 62.001.25E-012.14E+007.20E+011.10E+031.47E+013.39E+023.93E+033.77E+04 + 93L1 75.008.45E-029.57E-012.95E+014.34E+028.44E+001.50E+021.50E+031.31E+04 + 93L1 92.005.49E-024.32E-011.13E+011.55E+024.65E+006.34E+015.40E+024.23E+03 + 93L1 105.004.14E-022.70E-016.16E+007.88E+013.17E+003.67E+012.82E+022.04E+03 + 93L1 122.002.99E-021.65E-013.14E+003.67E+012.06E+002.00E+011.37E+028.98E+02 + 93L1 145.002.05E-029.92E-021.48E+001.54E+011.25E+001.01E+016.03E+013.53E+02 + 93L1 170.001.45E-026.44E-027.70E-017.05E+007.95E-015.42E+002.88E+011.52E+02 + 93L1 235.007.21E-032.89E-022.26E-011.56E+003.18E-011.61E+006.78E+002.87E+01 + 93L1 320.003.79E-031.44E-028.06E-024.17E-011.35E-015.35E-011.83E+006.34E+00 + 93L1 410.002.31E-038.46E-033.81E-021.59E-016.81E-022.31E-016.78E-012.01E+00 + 93L1 520.001.47E-035.20E-031.97E-026.85E-023.58E-021.07E-012.75E-017.11E-01 + 93L1 750.007.59E-042.55E-037.77E-032.12E-021.34E-023.48E-027.52E-021.61E-01 + 93L11000.004.63E-041.49E-033.97E-039.34E-036.25E-031.52E-022.95E-025.59E-02 + 93L11500.002.36E-047.09E-041.65E-033.29E-032.14E-035.02E-038.75E-031.45E-02 + 93L2 22.601.68E+007.11E+036.04E+056.60E+063.37E+011.15E+038.52E+031.18E+04 + 93L2 23.301.55E+006.13E+035.11E+056.21E+063.08E+011.02E+028.45E+031.97E+04 + 93L2 24.601.35E+004.70E+033.78E+055.32E+062.62E+018.41E+028.04E+033.13E+04 + 93L2 27.809.89E-012.59E+031.92E+053.32E+061.82E+015.38E+026.30E+034.32E+04 + 93L2 31.607.05E-011.40E+039.43E+041.82E+061.25E+013.36E+024.41E+033.99E+04 + 93L2 36.004.97E-017.44E+024.56E+049.23E+058.50E+002.08E+022.87E+033.02E+04 + 93L2 42.003.26E-013.56E+021.93E+043.96E+055.41E+001.18E+021.65E+031.88E+04 + 93L2 50.002.01E-011.55E+027.34E+031.46E+053.25E+006.20E+018.44E+029.79E+03 + 93L2 62.001.10E-015.67E+012.24E+034.11E+041.74E+002.81E+013.55E+023.98E+03 + 93L2 75.006.37E-022.33E+017.88E+021.32E+041.01E+001.40E+011.62E+021.70E+03 + 93L2 92.003.55E-029.14E+002.60E+023.87E+035.59E-016.66E+006.91E+016.58E+02 + 93L2 105.002.43E-025.02E+001.27E+021.75E+033.83E-014.14E+003.96E+013.51E+02 + 93L2 122.001.57E-022.56E+005.74E+017.13E+022.51E-012.42E+002.11E+011.71E+02 + 93L2 145.009.58E-031.19E+002.31E+012.56E+021.54E-011.31E+001.02E+017.47E+01 + 93L2 170.006.07E-035.96E-011.00E+011.01E+029.85E-027.46E-015.25E+003.48E+01 + 93L2 235.002.43E-031.50E-011.97E+001.56E+014.00E-022.43E-011.38E+007.46E+00 + 93L2 320.001.04E-034.24E-024.37E-012.82E+001.71E-028.57E-024.01E-011.77E+00 + 93L2 410.005.32E-041.59E-021.37E-017.53E-018.66E-033.78E-021.52E-015.79E-01 + 93L2 520.002.86E-046.45E-034.72E-022.24E-014.53E-031.76E-026.18E-022.05E-01 + 93L2 750.001.14E-041.72E-039.99E-033.86E-021.67E-035.58E-031.63E-024.46E-02 + 93L21000.005.66E-056.46E-043.20E-031.07E-027.61E-042.33E-036.00E-031.44E-02 + 93L21500.002.20E-051.78E-047.23E-042.04E-032.50E-047.09E-041.58E-033.27E-03 + 93L3 18.614.02E+001.87E+042.08E+063.05E+073.16E+005.09E+043.57E+072.98E+09 + 93L3 19.313.63E+001.55E+041.67E+062.69E+072.83E+004.23E+042.79E+072.25E+09 + 93L3 20.613.01E+001.12E+041.13E+062.06E+072.31E+003.06E+041.79E+071.37E+09 + 93L3 23.811.99E+005.40E+034.76E+051.02E+071.49E+001.49E+046.81E+064.59E+08 + 93L3 27.611.29E+002.56E+031.97E+054.52E+069.47E-017.12E+032.54E+061.50E+08 + 93L3 36.005.82E-016.75E+024.02E+049.25E+054.21E-011.90E+034.37E+052.05E+07 + 93L3 42.003.64E-013.12E+021.60E+043.53E+052.63E-018.81E+021.59E+056.52E+06 + 93L3 50.002.13E-011.30E+025.66E+031.16E+051.55E-013.70E+025.12E+041.80E+06 + 93L3 62.001.09E-014.44E+011.57E+032.87E+048.06E-021.27E+021.28E+043.75E+05 + 93L3 75.005.97E-021.72E+015.08E+028.25E+034.54E-024.95E+013.83E+039.51E+04 + 93L3 92.003.13E-026.26E+001.51E+022.15E+032.45E-021.80E+011.06E+032.22E+04 + 93L3 105.002.06E-023.26E+006.95E+018.96E+021.65E-029.37E+004.67E+028.77E+03 + 93L3 122.001.28E-021.56E+002.88E+013.32E+021.05E-024.47E+001.86E+023.09E+03 + 93L3 145.007.37E-036.69E-011.05E+011.06E+026.28E-031.91E+006.52E+019.43E+02 + 93L3 170.004.46E-033.09E-014.15E+003.74E+013.92E-038.73E-012.51E+013.21E+02 + 93L3 235.001.62E-036.51E-026.46E-014.55E+001.51E-031.79E-013.75E+003.78E+01 + 93L3 320.006.29E-041.52E-021.14E-016.39E-016.11E-044.02E-026.43E-015.25E+00 + 93L3 410.003.00E-044.87E-032.93E-021.39E-012.99E-041.22E-021.62E-011.13E+00 + 93L3 520.001.50E-041.69E-038.33E-033.38E-021.52E-043.97E-034.43E-022.71E-01 + 93L3 750.005.43E-053.56E-041.32E-034.37E-035.52E-057.33E-046.37E-033.25E-02 + 93L31000.002.55E-051.14E-043.47E-049.91E-042.58E-052.06E-041.46E-036.56E-03 + 93L31500.009.66E-062.64E-056.29E-051.48E-049.53E-063.96E-051.97E-047.57E-04 + 93M1 6.721.27E+001.02E+046.05E+058.32E+062.61E+033.28E+068.94E+085.85E+10 + 93M1 7.721.10E+005.65E+033.43E+056.79E+061.72E+031.66E+063.65E+082.28E+10 + 93M1 9.728.26E-012.12E+031.32E+053.24E+068.66E+025.40E+058.36E+074.70E+09 + 93M1 13.725.00E-014.87E+023.05E+048.41E+053.09E+021.02E+059.60E+064.37E+08 + 93M1 20.722.51E-018.19E+014.90E+031.38E+059.05E+011.42E+047.72E+052.60E+07 + 93M1 29.001.36E-011.87E+011.03E+032.75E+043.33E+012.92E+031.05E+052.71E+06 + 93M1 44.006.01E-022.97E+001.42E+023.28E+039.70E+004.31E+029.57E+031.75E+05 + 93M1 56.003.67E-021.04E+004.41E+019.13E+024.76E+001.46E+022.51E+033.74E+04 + 93M1 74.002.04E-023.23E-011.14E+012.04E+022.10E+004.32E+015.55E+026.54E+03 + 93M1 107.009.18E-037.92E-021.96E+002.79E+017.19E-019.07E+008.15E+017.05E+02 + 93M1 155.004.09E-032.38E-023.70E-013.97E+002.48E-012.02E+001.30E+018.33E+01 + 93M1 285.001.11E-034.79E-033.40E-022.12E-014.44E-022.03E-018.06E-013.24E+00 + 93M1 500.003.66E-041.38E-035.77E-032.19E-029.48E-033.00E-028.22E-022.27E-01 + 93M2 6.362.70E+009.62E+057.68E+088.00E+103.86E+021.23E+058.63E+061.22E+08 + 93M2 7.362.29E+004.67E+052.98E+082.96E+102.50E+026.34E+044.24E+069.50E+07 + 93M2 9.361.63E+001.42E+056.39E+075.69E+091.22E+022.17E+041.30E+063.91E+07 + 93M2 13.368.71E-012.46E+046.78E+064.92E+084.22E+014.59E+032.25E+057.32E+06 + 93M2 20.363.65E-013.12E+035.05E+052.76E+071.21E+017.68E+022.85E+048.29E+05 + 93M2 29.001.62E-015.61E+025.98E+042.53E+064.25E+001.79E+025.15E+031.26E+05 + 93M2 44.005.76E-027.62E+015.14E+031.58E+051.25E+003.38E+017.13E+021.35E+04 + 93M2 56.003.08E-022.44E+011.28E+033.27E+046.23E-011.32E+012.32E+023.71E+03 + 93M2 74.001.46E-026.66E+002.64E+025.41E+032.79E-014.53E+006.43E+018.44E+02 + 93M2 107.005.32E-031.24E+003.43E+015.26E+029.73E-021.14E+001.22E+011.22E+02 + 93M2 155.001.91E-032.39E-014.72E+005.41E+013.42E-022.95E-012.39E+001.83E+01 + 93M2 285.003.58E-041.82E-022.14E-011.56E+006.30E-033.51E-021.84E-019.15E-01 + 93M2 500.008.16E-052.01E-031.55E-027.74E-021.35E-035.46E-032.01E-026.98E-02 + 93M3 5.439.80E+002.49E+062.29E+092.66E+113.41E+017.03E+065.71E+105.46E+13 + 93M3 6.437.26E+001.07E+067.52E+087.99E+102.04E+013.02E+061.77E+101.28E+13 + 93M3 8.434.28E+002.74E+051.28E+081.16E+109.00E+007.80E+052.73E+091.29E+12 + 93M3 12.431.84E+003.90E+041.05E+077.35E+082.77E+001.12E+051.90E+085.00E+10 + 93M3 19.436.22E-014.14E+036.15E+053.16E+077.16E-011.21E+049.08E+061.29E+09 + 93M3 29.002.17E-015.56E+025.06E+041.93E+062.13E-011.64E+036.14E+055.24E+07 + 93M3 44.006.78E-026.91E+013.90E+031.08E+056.04E-022.06E+023.89E+042.04E+06 + 93M3 56.003.36E-022.08E+019.00E+022.05E+042.92E-026.20E+018.09E+033.25E+05 + 93M3 74.001.47E-025.20E+001.68E+023.05E+031.27E-021.55E+011.35E+034.07E+04 + 93M3 107.004.78E-038.43E-011.85E+012.50E+024.21E-032.51E+001.33E+022.79E+03 + 93M3 155.001.53E-031.38E-012.09E+002.09E+011.40E-034.04E-011.37E+012.07E+02 + 93M3 285.002.39E-047.47E-036.34E-023.93E-012.36E-042.06E-023.80E-013.54E+00 + 93M3 500.004.57E-055.73E-042.96E-031.25E-024.72E-051.40E-031.65E-021.07E-01 + 93M4 4.852.48E+017.27E+041.87E+091.37E+131.04E+012.33E+059.08E+083.66E+11 + 93M4 5.851.41E+012.81E+045.02E+082.67E+125.69E+009.10E+042.56E+088.93E+10 + 93M4 7.855.64E+006.36E+036.37E+072.08E+112.20E+002.08E+043.57E+079.81E+09 + 93M4 11.851.45E+007.98E+023.54E+066.01E+095.71E-012.64E+032.33E+064.52E+08 + 93M4 18.852.87E-017.72E+011.36E+051.17E+081.22E-012.56E+021.13E+051.46E+07 + 93M4 29.005.95E-028.85E+006.67E+033.17E+062.83E-022.94E+017.12E+036.25E+05 + 93M4 44.001.23E-021.09E+003.66E+021.02E+056.72E-033.63E+005.15E+023.10E+04 + 93M4 56.004.81E-033.25E-016.88E+011.43E+042.89E-031.08E+001.15E+025.58E+03 + 93M4 74.001.61E-038.05E-021.01E+011.52E+031.08E-032.69E-012.07E+017.83E+02 + 93M4 107.003.72E-041.28E-028.27E-018.14E+012.88E-044.29E-022.21E+006.05E+01 + 93M4 155.008.47E-052.05E-037.02E-024.59E+007.51E-056.84E-032.42E-014.84E+00 + 93M4 285.007.57E-061.08E-041.44E-034.80E-027.99E-063.44E-047.03E-038.63E-02 + 93M4 500.008.63E-077.83E-065.18E-059.12E-049.87E-072.26E-053.00E-042.48E-03 + 93M5 4.663.83E+016.33E+044.44E+092.52E+135.90E+001.17E+045.38E+091.35E+14 + 93M5 5.662.11E+012.34E+041.13E+094.57E+123.16E+004.44E+031.38E+092.38E+13 + 93M5 7.668.06E+004.98E+031.35E+083.26E+111.19E+009.82E+021.67E+081.60E+12 + 93M5 11.661.96E+005.86E+027.05E+068.57E+093.02E-011.21E+028.82E+063.85E+10 + 93M5 18.663.69E-015.36E+012.57E+051.53E+086.39E-021.16E+013.30E+056.08E+08 + 93M5 29.007.13E-025.67E+001.15E+043.64E+061.46E-021.31E+001.52E+041.29E+07 + 93M5 44.001.42E-026.72E-016.06E+021.11E+053.52E-031.68E-018.26E+023.54E+05 + 93M5 56.005.47E-031.95E-011.11E+021.49E+041.53E-035.16E-021.54E+024.52E+04 + 93M5 74.001.79E-034.64E-021.56E+011.49E+035.80E-041.34E-022.20E+014.30E+03 + 93M5 107.004.06E-046.97E-031.18E+007.28E+011.59E-042.29E-031.70E+002.00E+02 + 93M5 155.009.12E-051.05E-038.92E-023.62E+004.29E-054.03E-041.30E-019.73E+00 + 93M5 285.008.24E-065.12E-051.38E-032.86E-025.01E-062.58E-051.99E-037.77E-02 + 93M5 500.001.03E-063.79E-063.52E-053.84E-047.35E-072.38E-064.60E-051.06E-03 + 93N+ 50.005.30E-023.07E+011.93E+038.64E+042.83E+001.49E+029.61E+034.66E+05 + 93N+ 70.002.17E-026.08E+002.59E+027.48E+031.05E+003.21E+011.18E+033.65E+04 + 93N+ 100.008.61E-031.14E+003.31E+016.34E+023.75E-016.72E+001.42E+022.77E+03 + 93N+ 150.003.02E-031.78E-013.43E+004.36E+011.16E-011.22E+001.44E+011.72E+02 + 93N+ 200.001.46E-035.01E-027.32E-017.16E+005.11E-023.81E-013.13E+002.69E+01 + 93N+ 500.001.80E-041.50E-039.29E-034.37E-024.04E-031.39E-024.60E-021.61E-01 + 94K 122.812.46E-011.61E-013.15E-021.38E-031.25E+015.28E+014.64E+019.55E+00 + 94K 123.512.43E-011.63E-013.74E-022.87E-031.23E+015.17E+014.69E+011.12E+01 + 94K 124.812.37E-011.69E-014.88E-026.79E-031.19E+015.00E+014.77E+011.44E+01 + 94K 128.012.24E-011.80E-017.73E-022.28E-021.11E+014.60E+014.89E+012.18E+01 + 94K 131.812.09E-011.89E-011.11E-015.28E-021.02E+014.17E+014.93E+012.98E+01 + 94K 136.001.95E-011.96E-011.46E-019.64E-029.31E+003.76E+014.88E+013.72E+01 + 94K 142.001.77E-012.01E-011.91E-011.72E-018.23E+003.26E+014.70E+014.52E+01 + 94K 150.001.56E-012.01E-012.39E-012.79E-017.04E+002.72E+014.34E+015.14E+01 + 94K 162.001.31E-011.93E-012.87E-014.28E-015.66E+002.11E+013.74E+015.40E+01 + 94K 175.001.09E-011.81E-013.12E-015.49E-014.55E+001.63E+013.13E+015.15E+01 + 94K 192.008.86E-021.62E-013.19E-016.40E-013.50E+001.20E+012.45E+014.49E+01 + 94K 205.007.64E-021.48E-013.11E-016.68E-012.91E+009.70E+002.03E+013.93E+01 + 94K 222.006.38E-021.31E-012.94E-016.69E-012.33E+007.48E+001.60E+013.24E+01 + 94K 245.005.12E-021.11E-012.65E-016.33E-011.77E+005.43E+001.18E+012.47E+01 + 94K 270.004.14E-029.45E-022.33E-015.72E-011.35E+003.98E+008.69E+001.84E+01 + 94K 335.002.61E-026.44E-021.65E-014.12E-017.45E-012.01E+004.32E+009.15E+00 + 94K 420.001.64E-024.28E-021.10E-012.66E-014.02E-011.01E+002.07E+004.22E+00 + 94K 510.001.12E-023.03E-027.60E-021.77E-012.38E-015.64E-011.11E+002.16E+00 + 94K 620.007.74E-032.14E-025.21E-021.15E-011.41E-013.21E-016.01E-011.11E+00 + 94K 850.004.38E-031.23E-022.83E-025.75E-026.12E-021.33E-012.32E-013.96E-01 + 94K 1100.002.81E-037.90E-031.72E-023.28E-023.10E-026.66E-021.11E-011.78E-01 + 94K 1350.001.99E-035.53E-031.17E-022.12E-021.80E-023.91E-026.31E-029.72E-02 + 94K 1600.001.50E-034.11E-038.45E-031.49E-021.15E-022.54E-024.02E-026.00E-02 + 94L1 24.106.71E-011.66E+022.29E+033.43E+032.66E+022.66E+045.85E+053.11E+06 + 94L1 24.806.43E-011.46E+022.27E+035.69E+032.44E+022.32E+045.04E+052.98E+06 + 94L1 26.105.94E-011.17E+022.13E+039.07E+032.10E+021.83E+043.85E+052.64E+06 + 94L1 29.304.95E-017.00E+011.64E+031.25E+041.49E+021.07E+042.10E+051.78E+06 + 94L1 33.104.05E-014.06E+011.11E+031.16E+041.04E+026.13E+031.11E+051.06E+06 + 94L1 36.003.50E-012.78E+018.15E+029.67E+038.08E+014.18E+037.14E+047.10E+05 + 94L1 42.002.66E-011.38E+014.39E+026.00E+035.12E+012.08E+033.19E+043.27E+05 + 94L1 50.001.91E-016.28E+002.07E+023.03E+033.06E+019.58E+021.29E+041.30E+05 + 94L1 62.001.25E-012.42E+007.79E+011.15E+031.63E+013.73E+024.27E+034.02E+04 + 94L1 75.008.52E-021.08E+003.22E+014.60E+029.32E+001.65E+021.63E+031.41E+04 + 94L1 92.005.55E-024.86E-011.25E+011.66E+025.14E+006.96E+015.87E+024.54E+03 + 94L1 105.004.19E-023.02E-016.80E+008.49E+013.50E+004.03E+013.07E+022.19E+03 + 94L1 122.003.04E-021.83E-013.47E+003.98E+012.27E+002.19E+011.49E+029.66E+02 + 94L1 145.002.09E-021.09E-011.64E+001.68E+011.38E+001.10E+016.55E+013.80E+02 + 94L1 170.001.48E-026.99E-028.51E-017.70E+008.77E-015.94E+003.13E+011.64E+02 + 94L1 235.007.40E-033.10E-022.49E-011.70E+003.51E-011.76E+007.36E+003.09E+01 + 94L1 320.003.91E-031.53E-028.78E-024.55E-011.48E-015.85E-011.99E+006.84E+00 + 94L1 410.002.39E-039.01E-034.14E-021.74E-017.50E-022.52E-017.37E-012.17E+00 + 94L1 520.001.52E-035.53E-032.13E-027.43E-023.93E-021.17E-012.98E-017.69E-01 + 94L1 750.007.90E-042.71E-038.36E-032.29E-021.47E-023.79E-028.17E-021.75E-01 + 94L11000.004.84E-041.58E-034.27E-031.01E-026.85E-031.65E-023.20E-026.05E-02 + 94L11500.002.48E-047.56E-041.76E-033.54E-032.34E-035.47E-039.50E-031.57E-02 + 94L2 23.261.59E+006.72E+035.47E+055.75E+063.47E+011.11E+037.91E+031.05E+04 + 94L2 23.961.48E+005.82E+034.65E+055.43E+063.17E+019.98E+027.88E+031.74E+04 + 94L2 25.261.29E+004.49E+033.47E+054.69E+062.72E+018.23E+027.51E+032.78E+04 + 94L2 28.469.53E-012.52E+031.80E+052.98E+061.91E+015.33E+025.97E+033.89E+04 + 94L2 32.266.86E-011.38E+038.97E+041.66E+061.32E+013.37E+024.23E+033.66E+04 + 94L2 36.005.12E-018.12E+024.88E+049.49E+059.55E+002.25E+022.97E+032.95E+04 + 94L2 42.003.37E-013.89E+022.08E+044.11E+056.07E+001.28E+021.72E+031.88E+04 + 94L2 50.002.09E-011.70E+027.90E+031.53E+053.65E+006.73E+018.89E+021.00E+04 + 94L2 62.001.14E-016.18E+012.41E+034.34E+041.95E+003.06E+013.78E+024.14E+03 + 94L2 75.006.67E-022.55E+018.51E+021.40E+041.13E+001.53E+011.73E+021.78E+03 + 94L2 92.003.72E-029.99E+002.81E+024.12E+036.28E-017.27E+007.40E+016.94E+02 + 94L2 105.002.55E-025.49E+001.38E+021.87E+034.31E-014.52E+004.26E+013.73E+02 + 94L2 122.001.66E-022.80E+006.22E+017.64E+022.81E-012.64E+002.27E+011.83E+02 + 94L2 145.001.01E-021.30E+002.51E+012.75E+021.73E-011.43E+001.10E+017.99E+01 + 94L2 170.006.43E-036.52E-011.10E+011.08E+021.11E-018.19E-015.70E+003.74E+01 + 94L2 235.002.58E-031.65E-012.14E+001.69E+014.51E-022.68E-011.51E+008.05E+00 + 94L2 320.001.10E-034.65E-024.78E-013.06E+001.92E-029.46E-024.38E-011.92E+00 + 94L2 410.005.69E-041.75E-021.50E-018.21E-019.77E-034.18E-021.67E-016.30E-01 + 94L2 520.003.07E-047.11E-035.19E-022.45E-015.11E-031.95E-026.79E-022.24E-01 + 94L2 750.001.23E-041.90E-031.10E-024.23E-021.88E-036.20E-031.80E-024.89E-02 + 94L21000.006.12E-057.15E-043.54E-031.18E-028.60E-042.60E-036.65E-031.59E-02 + 94L21500.002.40E-051.97E-048.02E-042.25E-032.82E-047.94E-041.76E-033.62E-03 + 94L3 19.053.84E+001.78E+041.90E+062.72E+073.10E+005.00E+043.39E+072.74E+09 + 94L3 19.753.47E+001.48E+041.53E+062.40E+072.78E+004.17E+042.66E+072.09E+09 + 94L3 21.052.89E+001.08E+041.05E+061.85E+072.28E+003.04E+041.73E+071.28E+09 + 94L3 24.251.92E+005.28E+034.50E+059.34E+061.48E+001.50E+046.69E+064.40E+08 + 94L3 28.051.26E+002.54E+031.89E+054.20E+069.50E-017.26E+032.53E+061.47E+08 + 94L3 36.005.97E-017.25E+024.25E+049.54E+054.43E-012.10E+034.86E+052.26E+07 + 94L3 42.003.74E-013.35E+021.70E+043.65E+052.77E-019.73E+021.77E+057.19E+06 + 94L3 50.002.19E-011.40E+025.99E+031.21E+051.63E-014.09E+025.68E+041.99E+06 + 94L3 62.001.12E-014.78E+011.67E+033.00E+048.50E-021.41E+021.42E+044.13E+05 + 94L3 75.006.17E-021.85E+015.38E+028.62E+034.78E-025.46E+014.24E+031.05E+05 + 94L3 92.003.23E-026.72E+001.61E+022.25E+032.58E-021.99E+011.17E+032.44E+04 + 94L3 105.002.13E-023.50E+007.36E+019.39E+021.74E-021.03E+015.17E+029.63E+03 + 94L3 122.001.32E-021.67E+003.05E+013.49E+021.11E-024.93E+002.05E+023.39E+03 + 94L3 145.007.65E-037.19E-011.11E+011.12E+026.62E-032.10E+007.19E+011.04E+03 + 94L3 170.004.63E-033.32E-014.41E+003.93E+014.13E-039.63E-012.77E+013.53E+02 + 94L3 235.001.69E-036.99E-026.86E-014.80E+001.59E-031.98E-014.13E+004.14E+01 + 94L3 320.006.55E-041.63E-021.21E-016.74E-016.43E-044.42E-027.07E-015.75E+00 + 94L3 410.003.12E-045.22E-033.12E-021.46E-013.15E-041.34E-021.78E-011.24E+00 + 94L3 520.001.57E-041.80E-038.86E-033.58E-021.60E-044.36E-034.86E-022.96E-01 + 94L3 750.005.66E-053.79E-041.41E-034.63E-035.80E-058.00E-046.98E-033.55E-02 + 94L31000.002.69E-051.21E-043.68E-041.05E-032.70E-052.24E-041.59E-037.18E-03 + 94L31500.001.01E-052.79E-056.67E-051.57E-049.95E-064.27E-052.15E-048.26E-04 + 94M1 6.931.18E+009.82E+035.72E+057.38E+062.64E+033.14E+068.18E+085.14E+10 + 94M1 7.931.03E+005.54E+033.29E+056.20E+061.76E+031.62E+063.42E+082.07E+10 + 94M1 9.937.84E-012.13E+031.29E+053.07E+069.00E+025.41E+058.14E+074.43E+09 + 94M1 13.934.81E-015.03E+023.06E+048.24E+053.28E+021.05E+059.72E+064.32E+08 + 94M1 20.932.45E-018.70E+015.03E+031.39E+059.73E+011.50E+048.06E+052.67E+07 + 94M1 29.001.35E-012.09E+011.12E+032.92E+043.69E+013.24E+031.16E+052.97E+06 + 94M1 44.006.04E-023.36E+001.55E+023.51E+031.07E+014.78E+021.06E+041.92E+05 + 94M1 56.003.70E-021.18E+004.85E+019.85E+025.28E+001.62E+022.76E+034.09E+04 + 94M1 74.002.06E-023.67E-011.26E+012.21E+022.33E+004.78E+016.11E+027.16E+03 + 94M1 107.009.33E-038.92E-022.19E+003.06E+017.97E-011.00E+018.95E+017.70E+02 + 94M1 155.004.17E-032.63E-024.12E-014.38E+002.74E-012.23E+001.43E+019.09E+01 + 94M1 285.001.14E-035.17E-033.75E-022.33E-014.90E-022.23E-018.82E-013.52E+00 + 94M1 500.003.81E-041.48E-036.28E-032.40E-021.05E-023.29E-028.97E-022.47E-01 + 94M2 6.542.53E+009.12E+056.97E+087.01E+103.99E+021.19E+058.07E+061.08E+08 + 94M2 7.542.16E+004.50E+052.78E+082.67E+102.61E+026.28E+044.05E+068.65E+07 + 94M2 9.541.56E+001.41E+056.16E+075.33E+091.29E+022.20E+041.28E+063.68E+07 + 94M2 13.548.50E-012.51E+046.79E+064.81E+084.55E+014.78E+032.27E+057.18E+06 + 94M2 20.543.63E-013.27E+035.20E+052.79E+071.32E+018.16E+022.95E+048.40E+05 + 94M2 29.001.65E-016.14E+026.51E+042.72E+064.79E+001.97E+025.59E+031.34E+05 + 94M2 44.005.95E-028.35E+015.60E+031.71E+051.41E+003.72E+017.74E+021.44E+04 + 94M2 56.003.19E-022.68E+011.39E+033.53E+047.01E-011.45E+012.52E+023.98E+03 + 94M2 74.001.52E-027.31E+002.88E+025.85E+033.14E-014.98E+006.99E+019.09E+02 + 94M2 107.005.59E-031.36E+003.75E+015.70E+021.10E-011.25E+001.33E+011.32E+02 + 94M2 155.002.02E-032.63E-015.16E+005.88E+013.86E-023.26E-012.61E+001.98E+01 + 94M2 285.003.82E-042.01E-022.35E-011.70E+007.12E-033.90E-022.02E-019.99E-01 + 94M2 500.008.77E-052.23E-031.71E-028.50E-021.53E-036.08E-032.22E-027.67E-02 + 94M3 5.569.39E+002.39E+062.12E+092.38E+113.35E+016.94E+065.45E+105.07E+13 + 94M3 6.567.00E+001.04E+067.11E+087.33E+102.03E+013.04E+061.73E+101.23E+13 + 94M3 8.564.17E+002.74E+051.25E+081.10E+109.09E+008.03E+052.76E+091.28E+12 + 94M3 12.561.81E+004.00E+041.05E+077.22E+082.84E+001.18E+051.99E+085.18E+10 + 94M3 19.566.23E-014.33E+036.32E+053.18E+077.42E-011.30E+049.73E+061.37E+09 + 94M3 29.002.22E-016.01E+025.41E+042.03E+062.25E-011.82E+036.87E+055.87E+07 + 94M3 44.006.96E-027.47E+014.17E+031.14E+056.39E-022.28E+024.35E+042.28E+06 + 94M3 56.003.46E-022.24E+019.61E+022.17E+043.09E-026.88E+019.03E+033.63E+05 + 94M3 74.001.52E-025.62E+001.79E+023.22E+031.34E-021.73E+011.51E+034.52E+04 + 94M3 107.004.96E-039.11E-011.98E+012.65E+024.45E-032.78E+001.48E+023.10E+03 + 94M3 155.001.59E-031.49E-012.23E+002.21E+011.49E-034.47E-011.52E+012.29E+02 + 94M3 285.002.49E-048.06E-036.77E-024.17E-012.49E-042.28E-024.21E-013.91E+00 + 94M3 500.004.81E-056.16E-043.17E-031.33E-024.99E-051.54E-031.82E-021.18E-01 + 94M4 4.972.37E+016.96E+041.72E+091.23E+131.02E+012.30E+058.62E+083.37E+11 + 94M4 5.971.37E+012.75E+044.74E+082.48E+125.66E+009.19E+042.50E+088.49E+10 + 94M4 7.975.55E+006.39E+036.24E+072.02E+112.23E+002.16E+043.61E+079.70E+09 + 94M4 11.971.46E+008.23E+023.60E+066.10E+095.89E-012.81E+032.44E+064.65E+08 + 94M4 18.972.94E-018.13E+011.42E+051.22E+081.27E-012.78E+021.21E+051.54E+07 + 94M4 29.006.25E-029.64E+007.29E+033.50E+063.03E-023.30E+017.95E+036.93E+05 + 94M4 44.001.30E-021.19E+004.00E+021.13E+057.22E-034.08E+005.74E+023.44E+04 + 94M4 56.005.10E-033.55E-017.52E+011.58E+043.11E-031.22E+001.28E+026.19E+03 + 94M4 74.001.71E-038.80E-021.11E+011.67E+031.16E-033.02E-012.30E+018.68E+02 + 94M4 107.003.97E-041.40E-029.05E-018.99E+013.11E-044.82E-022.46E+006.71E+01 + 94M4 155.009.08E-052.25E-037.69E-025.07E+008.12E-057.68E-032.70E-015.38E+00 + 94M4 285.008.17E-061.18E-041.57E-035.32E-028.65E-063.86E-047.86E-039.61E-02 + 94M4 500.009.36E-078.60E-065.68E-051.01E-031.07E-062.54E-053.36E-042.77E-03 + 94M5 4.773.66E+015.92E+044.13E+092.26E+135.78E+001.12E+045.14E+091.25E+14 + 94M5 5.772.05E+012.23E+041.09E+094.26E+123.14E+004.34E+031.36E+092.28E+13 + 94M5 7.777.94E+004.89E+031.34E+083.18E+111.20E+009.85E+021.70E+081.61E+12 + 94M5 11.771.97E+005.89E+027.25E+068.72E+093.10E-011.24E+029.31E+064.04E+10 + 94M5 18.773.77E-015.49E+012.71E+051.60E+086.65E-021.22E+013.57E+056.59E+08 + 94M5 29.007.48E-026.00E+001.26E+044.02E+061.55E-021.41E+001.71E+041.47E+07 + 94M5 44.001.50E-027.13E-016.68E+021.22E+053.74E-031.81E-019.32E+024.03E+05 + 94M5 56.005.78E-032.07E-011.22E+021.64E+041.63E-035.55E-021.73E+025.14E+04 + 94M5 74.001.90E-034.94E-021.72E+011.64E+036.19E-041.44E-022.49E+014.88E+03 + 94M5 107.004.31E-047.43E-031.30E+008.01E+011.70E-042.46E-031.91E+002.27E+02 + 94M5 155.009.68E-051.12E-039.83E-023.98E+004.59E-054.34E-041.47E-011.10E+01 + 94M5 285.008.66E-065.49E-051.52E-033.15E-025.37E-062.77E-052.23E-038.76E-02 + 94M5 500.001.10E-064.07E-063.85E-054.22E-047.87E-072.56E-065.13E-051.20E-03 + 94N+ 50.005.46E-023.36E+012.10E+039.39E+043.15E+001.66E+021.07E+045.23E+05 + 94N+ 70.002.24E-026.65E+002.82E+028.11E+031.17E+003.57E+011.32E+034.08E+04 + 94N+ 100.008.90E-031.25E+003.60E+016.87E+024.17E-017.46E+001.58E+023.08E+03 + 94N+ 150.003.13E-031.95E-013.75E+004.74E+011.29E-011.35E+001.59E+011.91E+02 + 94N+ 200.001.52E-035.51E-028.01E-017.80E+005.68E-024.22E-013.45E+002.97E+01 + 94N+ 500.001.89E-041.63E-031.02E-024.80E-024.49E-031.53E-025.06E-021.77E-01 + 95K 126.032.34E-011.49E-012.93E-021.27E-031.27E+015.13E+014.36E+018.71E+00 + 95K 126.732.31E-011.52E-013.47E-022.61E-031.25E+015.03E+014.40E+011.02E+01 + 95K 128.032.26E-011.57E-014.50E-026.12E-031.21E+014.87E+014.48E+011.30E+01 + 95K 131.232.13E-011.67E-017.10E-022.04E-021.13E+014.49E+014.60E+011.97E+01 + 95K 135.032.00E-011.76E-011.02E-014.71E-021.04E+014.08E+014.64E+012.69E+01 + 95K 139.001.87E-011.82E-011.33E-018.41E-029.57E+003.71E+014.61E+013.33E+01 + 95K 145.001.70E-011.87E-011.75E-011.52E-018.49E+003.23E+014.46E+014.08E+01 + 95K 153.001.51E-011.89E-012.20E-012.50E-017.29E+002.70E+014.15E+014.68E+01 + 95K 165.001.27E-011.83E-012.67E-013.89E-015.88E+002.11E+013.60E+014.98E+01 + 95K 178.001.07E-011.72E-012.94E-015.06E-014.75E+001.64E+013.03E+014.80E+01 + 95K 195.008.69E-021.56E-013.04E-015.98E-013.67E+001.22E+012.39E+014.24E+01 + 95K 208.007.51E-021.43E-012.99E-016.30E-013.06E+009.87E+002.00E+013.74E+01 + 95K 225.006.30E-021.28E-012.85E-016.37E-012.45E+007.65E+001.59E+013.11E+01 + 95K 248.005.09E-021.10E-012.59E-016.09E-011.87E+005.59E+001.18E+012.40E+01 + 95K 275.004.06E-029.25E-022.28E-015.52E-011.40E+004.02E+008.54E+001.77E+01 + 95K 340.002.59E-026.41E-021.64E-014.04E-017.83E-012.06E+004.32E+008.95E+00 + 95K 425.001.64E-024.33E-021.11E-012.66E-014.26E-011.04E+002.10E+004.21E+00 + 95K 520.001.11E-023.03E-027.59E-021.75E-012.47E-015.73E-011.10E+002.12E+00 + 95K 630.007.76E-032.17E-025.27E-021.16E-011.48E-013.29E-016.07E-011.11E+00 + 95K 860.004.45E-031.27E-022.90E-025.86E-026.46E-021.38E-012.39E-014.03E-01 + 95K 1150.002.71E-037.69E-031.67E-023.14E-023.00E-026.38E-021.05E-011.65E-01 + 95K 1400.001.95E-035.47E-031.15E-022.07E-021.78E-023.84E-026.12E-029.30E-02 + 95K 1650.001.49E-034.10E-038.42E-031.47E-021.15E-022.53E-023.97E-025.87E-02 + 95L1 24.776.34E-011.60E+022.11E+033.04E+032.72E+022.58E+045.47E+052.81E+06 + 95L1 25.476.08E-011.42E+022.10E+035.02E+032.50E+022.27E+044.73E+052.70E+06 + 95L1 26.775.63E-011.14E+021.98E+038.01E+032.16E+021.80E+043.64E+052.41E+06 + 95L1 29.974.72E-016.95E+011.54E+031.12E+041.54E+021.07E+042.02E+051.65E+06 + 95L1 33.773.88E-014.09E+011.06E+031.06E+041.08E+026.18E+031.08E+059.93E+05 + 95L1 37.003.32E-012.72E+017.63E+028.75E+038.26E+014.08E+036.72E+046.47E+05 + 95L1 43.002.54E-011.39E+014.20E+025.53E+035.30E+012.07E+033.07E+043.05E+05 + 95L1 51.001.84E-016.47E+002.02E+022.86E+033.20E+019.68E+021.27E+041.24E+05 + 95L1 63.001.22E-012.56E+007.82E+011.12E+031.72E+013.84E+024.28E+033.93E+04 + 95L1 76.008.35E-021.16E+003.30E+014.57E+029.94E+001.71E+021.66E+031.40E+04 + 95L1 93.005.49E-025.27E-011.30E+011.68E+025.52E+007.32E+016.06E+024.59E+03 + 95L1 106.004.16E-023.28E-017.19E+008.73E+013.78E+004.26E+013.19E+022.24E+03 + 95L1 123.003.03E-021.99E-013.70E+004.14E+012.46E+002.33E+011.56E+029.95E+02 + 95L1 146.002.09E-021.17E-011.77E+001.76E+011.50E+001.18E+016.90E+013.96E+02 + 95L1 175.001.42E-027.06E-028.39E-017.32E+008.95E-015.83E+002.99E+011.52E+02 + 95L1 240.007.27E-033.18E-022.54E-011.70E+003.66E-011.79E+007.31E+003.01E+01 + 95L1 325.003.91E-031.59E-029.14E-024.68E-011.57E-016.08E-012.03E+006.88E+00 + 95L1 410.002.47E-039.62E-034.50E-021.89E-018.29E-022.76E-018.02E-012.35E+00 + 95L1 520.001.58E-035.91E-032.30E-028.07E-024.34E-021.28E-013.25E-018.32E-01 + 95L1 750.008.24E-042.89E-039.01E-032.48E-021.62E-024.15E-028.88E-021.89E-01 + 95L11000.005.06E-041.69E-034.59E-031.09E-027.54E-031.81E-023.48E-026.56E-02 + 95L11500.002.60E-048.06E-041.90E-033.81E-032.57E-035.98E-031.03E-021.70E-02 + 95L2 23.941.51E+006.36E+034.96E+055.02E+063.57E+011.08E+037.36E+039.32E+03 + 95L2 24.641.41E+005.53E+034.23E+054.75E+063.28E+019.71E+027.34E+031.54E+04 + 95L2 25.941.23E+004.30E+033.19E+054.13E+062.82E+018.05E+027.03E+032.47E+04 + 95L2 29.149.19E-012.45E+031.68E+052.67E+062.00E+015.28E+025.66E+033.50E+04 + 95L2 32.946.68E-011.36E+038.54E+041.52E+061.39E+013.38E+024.06E+033.36E+04 + 95L2 37.004.91E-017.77E+024.49E+048.44E+059.89E+002.21E+022.81E+032.69E+04 + 95L2 43.003.27E-013.79E+021.96E+043.75E+056.37E+001.27E+021.65E+031.75E+04 + 95L2 51.002.05E-011.69E+027.62E+031.43E+053.87E+006.80E+018.69E+029.48E+03 + 95L2 63.001.14E-016.26E+012.38E+034.17E+042.10E+003.14E+013.76E+024.01E+03 + 95L2 76.006.71E-022.62E+018.55E+021.37E+041.22E+001.59E+011.75E+021.76E+03 + 95L2 93.003.78E-021.04E+012.87E+024.12E+036.85E-017.65E+007.60E+016.97E+02 + 95L2 106.002.61E-025.75E+001.42E+021.89E+034.72E-014.78E+004.41E+013.78E+02 + 95L2 123.001.70E-022.96E+006.46E+017.81E+023.10E-012.81E+002.37E+011.87E+02 + 95L2 146.001.05E-021.39E+002.63E+012.84E+021.91E-011.53E+001.16E+018.27E+01 + 95L2 175.006.26E-036.31E-011.03E+019.87E+011.15E-018.14E-015.48E+003.49E+01 + 95L2 240.002.59E-031.66E-012.11E+001.63E+014.80E-022.75E-011.51E+007.88E+00 + 95L2 325.001.13E-034.82E-024.86E-013.06E+002.08E-029.93E-024.51E-011.95E+00 + 95L2 410.006.11E-041.93E-021.65E-018.95E-011.10E-024.64E-021.83E-016.87E-01 + 95L2 520.003.30E-047.86E-035.71E-022.68E-015.78E-032.16E-027.47E-022.45E-01 + 95L2 750.001.33E-042.10E-031.22E-024.65E-022.13E-036.92E-031.99E-025.38E-02 + 95L21000.006.65E-057.93E-043.91E-031.30E-029.74E-042.91E-037.38E-031.75E-02 + 95L21500.002.61E-052.19E-048.91E-042.50E-033.19E-048.91E-041.96E-034.01E-03 + 95L3 19.503.67E+001.70E+041.75E+062.42E+073.04E+004.92E+043.22E+072.53E+09 + 95L3 20.203.32E+001.42E+041.42E+062.15E+072.73E+004.12E+042.54E+071.94E+09 + 95L3 21.502.77E+001.04E+049.75E+051.67E+072.25E+003.02E+041.67E+071.20E+09 + 95L3 24.701.86E+005.17E+034.26E+058.55E+061.47E+001.51E+046.58E+064.22E+08 + 95L3 28.501.23E+002.52E+031.81E+053.91E+069.53E-017.42E+032.53E+061.44E+08 + 95L3 37.005.64E-016.79E+023.82E+048.31E+054.30E-012.02E+034.50E+052.03E+07 + 95L3 43.003.58E-013.20E+021.56E+043.26E+052.72E-019.57E+021.68E+056.66E+06 + 95L3 51.002.12E-011.36E+025.64E+031.10E+051.62E-014.10E+025.54E+041.89E+06 + 95L3 63.001.10E-014.74E+011.60E+032.81E+048.53E-021.44E+021.42E+044.05E+05 + 95L3 76.006.11E-021.86E+015.27E+028.25E+034.84E-025.66E+014.31E+031.05E+05 + 95L3 93.003.23E-026.85E+001.60E+022.19E+032.63E-022.08E+011.21E+032.49E+04 + 95L3 106.002.14E-023.59E+007.38E+019.24E+021.78E-021.09E+015.38E+029.91E+03 + 95L3 123.001.33E-021.73E+003.08E+013.46E+021.14E-025.23E+002.16E+023.52E+03 + 95L3 146.007.77E-037.47E-011.13E+011.12E+026.83E-032.25E+007.61E+011.08E+03 + 95L3 175.004.39E-033.09E-013.95E+003.42E+013.99E-039.22E-012.57E+013.19E+02 + 95L3 240.001.64E-036.79E-026.47E-014.41E+001.57E-031.97E-014.03E+003.96E+01 + 95L3 325.006.52E-041.63E-021.18E-016.46E-016.47E-044.52E-027.12E-015.72E+00 + 95L3 410.003.26E-045.59E-033.32E-021.55E-013.31E-041.48E-021.95E-011.36E+00 + 95L3 520.001.64E-041.93E-039.41E-033.79E-021.68E-044.79E-035.34E-023.24E-01 + 95L3 750.005.93E-054.04E-041.50E-034.92E-036.09E-058.76E-047.66E-033.88E-02 + 95L31000.002.80E-051.28E-043.91E-041.12E-032.83E-052.44E-041.75E-037.85E-03 + 95L31500.001.05E-052.94E-057.07E-051.67E-041.04E-054.61E-052.35E-049.02E-04 + 95M1 7.121.12E+009.66E+035.54E+056.80E+062.70E+033.06E+067.68E+084.67E+10 + 95M1 8.129.76E-015.52E+033.23E+055.84E+061.83E+031.61E+063.29E+081.92E+10 + 95M1 10.127.49E-012.17E+031.29E+052.98E+069.45E+025.50E+058.05E+074.27E+09 + 95M1 14.124.65E-015.24E+023.11E+048.21E+053.50E+021.10E+059.95E+064.32E+08 + 95M1 21.122.40E-019.29E+015.22E+031.41E+051.05E+021.60E+048.48E+052.76E+07 + 95M1 29.001.35E-012.34E+011.22E+033.11E+044.10E+013.61E+031.29E+053.27E+06 + 95M1 44.006.06E-023.80E+001.70E+023.78E+031.19E+015.30E+021.17E+042.11E+05 + 95M1 56.003.73E-021.34E+005.33E+011.07E+035.87E+001.80E+023.05E+034.49E+04 + 95M1 74.002.09E-024.18E-011.40E+012.41E+022.59E+005.29E+016.73E+027.85E+03 + 95M1 107.009.48E-031.01E-012.44E+003.35E+018.85E-011.11E+019.84E+018.43E+02 + 95M1 155.004.26E-032.92E-024.61E-014.84E+003.04E-012.46E+001.57E+019.93E+01 + 95M1 285.001.18E-035.60E-034.15E-022.58E-015.44E-022.46E-019.65E-013.84E+00 + 95M1 500.003.96E-041.59E-036.86E-032.63E-021.16E-023.61E-029.80E-022.69E-01 + 95M2 6.712.40E+008.80E+056.50E+086.36E+104.16E+021.19E+057.75E+061.00E+08 + 95M2 7.712.06E+004.42E+052.65E+082.48E+102.75E+026.33E+043.95E+068.12E+07 + 95M2 9.711.50E+001.41E+056.05E+075.11E+091.38E+022.26E+041.28E+063.55E+07 + 95M2 13.718.33E-012.59E+046.88E+064.77E+084.95E+015.02E+032.33E+057.15E+06 + 95M2 20.713.62E-013.44E+035.41E+052.86E+071.46E+018.71E+023.09E+048.60E+05 + 95M2 29.001.69E-016.73E+027.10E+042.94E+065.40E+002.18E+026.08E+031.44E+05 + 95M2 44.006.14E-029.16E+016.10E+031.85E+051.59E+004.10E+018.42E+021.55E+04 + 95M2 56.003.31E-022.94E+011.52E+033.81E+047.92E-011.60E+012.74E+024.29E+03 + 95M2 74.001.59E-028.03E+003.14E+026.33E+033.55E-015.50E+007.62E+019.81E+02 + 95M2 107.005.87E-031.50E+004.09E+016.18E+021.24E-011.39E+001.45E+011.43E+02 + 95M2 155.002.13E-032.90E-015.65E+006.40E+014.37E-023.61E-012.86E+002.15E+01 + 95M2 285.004.08E-042.22E-022.59E-011.86E+008.06E-034.33E-022.22E-011.09E+00 + 95M2 500.009.46E-052.47E-031.89E-029.35E-021.74E-036.78E-032.45E-028.43E-02 + 95M3 5.679.12E+002.34E+062.01E+092.21E+113.34E+017.00E+065.35E+104.88E+13 + 95M3 6.676.83E+001.04E+066.88E+086.94E+102.04E+013.11E+061.74E+101.21E+13 + 95M3 8.674.10E+002.78E+051.24E+081.07E+109.24E+008.39E+052.84E+091.31E+12 + 95M3 12.671.80E+004.14E+041.07E+077.20E+082.93E+001.26E+052.10E+085.45E+10 + 95M3 19.676.26E-014.55E+036.54E+053.24E+077.72E-011.40E+041.05E+071.48E+09 + 95M3 29.002.27E-016.49E+025.79E+042.15E+062.38E-012.02E+037.69E+056.58E+07 + 95M3 44.007.16E-028.07E+014.45E+031.20E+056.76E-022.54E+024.86E+042.55E+06 + 95M3 56.003.57E-022.43E+011.03E+032.29E+043.27E-027.65E+011.01E+044.05E+05 + 95M3 74.001.57E-026.08E+001.91E+023.40E+031.42E-021.92E+011.68E+035.04E+04 + 95M3 107.005.14E-039.84E-012.11E+012.80E+024.71E-033.09E+001.64E+023.44E+03 + 95M3 155.001.65E-031.61E-012.38E+002.34E+011.57E-034.97E-011.69E+012.54E+02 + 95M3 285.002.60E-048.69E-037.23E-024.42E-012.64E-042.53E-024.66E-014.32E+00 + 95M3 500.005.04E-056.63E-043.38E-031.41E-025.27E-051.70E-032.02E-021.30E-01 + 95M4 5.092.27E+016.68E+041.58E+091.10E+131.00E+012.29E+058.20E+083.11E+11 + 95M4 6.091.32E+012.70E+044.48E+082.30E+125.64E+009.30E+042.45E+088.09E+10 + 95M4 8.095.47E+006.43E+036.11E+071.96E+112.25E+002.24E+043.65E+079.61E+09 + 95M4 12.091.46E+008.50E+023.65E+066.19E+096.07E-012.99E+032.55E+064.78E+08 + 95M4 19.093.00E-018.56E+011.48E+051.28E+081.33E-013.02E+021.30E+051.63E+07 + 95M4 29.006.57E-021.05E+017.96E+033.87E+063.24E-023.71E+018.87E+037.68E+05 + 95M4 44.001.37E-021.30E+004.36E+021.24E+057.74E-034.58E+006.40E+023.81E+04 + 95M4 56.005.40E-033.88E-018.22E+011.74E+043.34E-031.37E+001.43E+026.85E+03 + 95M4 74.001.82E-039.62E-021.21E+011.85E+031.25E-033.40E-012.57E+019.63E+02 + 95M4 107.004.24E-041.53E-029.89E-019.93E+013.35E-045.41E-022.74E+007.44E+01 + 95M4 155.009.72E-052.47E-038.41E-025.60E+008.77E-058.63E-033.02E-015.97E+00 + 95M4 285.008.77E-061.30E-041.72E-035.88E-029.37E-064.34E-048.78E-031.07E-01 + 95M4 500.001.00E-069.48E-066.22E-051.12E-031.16E-062.85E-053.76E-043.09E-03 + 95M5 4.893.50E+015.55E+043.86E+092.04E+135.67E+001.08E+044.94E+091.16E+14 + 95M5 5.891.98E+012.14E+041.04E+093.99E+123.12E+004.25E+031.34E+092.20E+13 + 95M5 7.897.82E+004.80E+031.34E+083.10E+111.21E+009.88E+021.74E+081.62E+12 + 95M5 11.891.98E+005.93E+027.47E+068.88E+093.18E-011.28E+029.84E+064.24E+10 + 95M5 18.893.85E-015.63E+012.86E+051.68E+086.91E-021.27E+013.87E+057.13E+08 + 95M5 29.007.83E-026.34E+001.39E+044.42E+061.64E-021.52E+001.93E+041.68E+07 + 95M5 44.001.57E-027.55E-017.37E+021.34E+053.98E-031.94E-011.05E+034.58E+05 + 95M5 56.006.09E-032.19E-011.35E+021.80E+041.74E-035.98E-021.96E+025.84E+04 + 95M5 74.002.01E-035.24E-021.90E+011.80E+036.60E-041.55E-022.81E+015.54E+03 + 95M5 107.004.57E-047.91E-031.43E+008.80E+011.81E-042.65E-032.16E+002.57E+02 + 95M5 155.001.03E-041.20E-031.08E-014.38E+004.90E-054.66E-041.65E-011.24E+01 + 95M5 285.009.27E-065.87E-051.67E-033.46E-025.74E-062.98E-052.51E-039.87E-02 + 95M5 500.001.18E-064.36E-064.22E-054.63E-048.42E-072.75E-065.73E-051.34E-03 + 95N+ 50.005.67E-023.72E+012.32E+031.04E+053.55E+001.87E+021.22E+045.97E+05 + 95N+ 70.002.33E-027.37E+003.11E+028.94E+031.32E+004.01E+011.49E+034.63E+04 + 95N+ 100.009.28E-031.39E+003.97E+017.56E+024.69E-018.36E+001.78E+023.48E+03 + 95N+ 150.003.28E-032.17E-014.14E+005.22E+011.46E-011.51E+001.79E+012.14E+02 + 95N+ 200.001.59E-036.12E-028.87E-018.60E+006.39E-024.71E-013.86E+003.33E+01 + 95N+ 500.001.99E-041.81E-031.14E-025.34E-025.03E-031.71E-025.62E-021.96E-01 + 96K 129.272.23E-011.39E-012.75E-021.18E-031.29E+015.00E+014.11E+017.97E+00 + 96K 129.972.20E-011.41E-013.24E-022.39E-031.27E+014.90E+014.14E+019.30E+00 + 96K 131.272.15E-011.46E-014.18E-025.56E-031.23E+014.75E+014.22E+011.18E+01 + 96K 134.472.04E-011.56E-016.57E-021.84E-021.15E+014.39E+014.33E+011.78E+01 + 96K 138.271.91E-011.64E-019.41E-024.23E-021.06E+014.00E+014.38E+012.43E+01 + 96K 142.001.80E-011.70E-011.21E-017.34E-029.85E+003.67E+014.36E+012.98E+01 + 96K 148.001.64E-011.76E-011.60E-011.34E-018.75E+003.20E+014.24E+013.68E+01 + 96K 156.001.46E-011.78E-012.04E-012.24E-017.54E+002.70E+013.96E+014.27E+01 + 96K 168.001.23E-011.74E-012.50E-013.54E-016.11E+002.11E+013.47E+014.60E+01 + 96K 181.001.04E-011.65E-012.78E-014.67E-014.95E+001.66E+012.94E+014.48E+01 + 96K 198.008.53E-021.50E-012.90E-015.59E-013.84E+001.24E+012.35E+014.00E+01 + 96K 211.007.40E-021.39E-012.88E-015.95E-013.21E+001.00E+011.97E+013.56E+01 + 96K 228.006.23E-021.25E-012.76E-016.07E-012.58E+007.82E+001.58E+012.99E+01 + 96K 251.005.05E-021.08E-012.54E-015.87E-011.98E+005.75E+001.18E+012.33E+01 + 96K 280.003.99E-029.08E-022.23E-015.33E-011.46E+004.06E+008.41E+001.70E+01 + 96K 345.002.57E-026.39E-021.63E-013.97E-018.21E-012.11E+004.32E+008.76E+00 + 96K 430.001.65E-024.37E-021.12E-012.66E-014.50E-011.08E+002.13E+004.20E+00 + 96K 520.001.14E-023.15E-027.88E-021.80E-012.69E-016.15E-011.17E+002.21E+00 + 96K 630.008.02E-032.26E-025.50E-021.20E-011.61E-013.54E-016.44E-011.16E+00 + 96K 860.004.62E-031.33E-023.05E-026.13E-027.03E-021.49E-012.55E-014.26E-01 + 96K 1150.002.81E-038.08E-031.76E-023.30E-023.25E-026.87E-021.12E-011.75E-01 + 96K 1400.002.03E-035.75E-031.21E-022.18E-021.93E-024.13E-026.54E-029.88E-02 + 96K 1650.001.55E-034.32E-038.90E-031.55E-021.24E-022.72E-024.24E-026.24E-02 + 96L1 25.525.94E-011.53E+021.93E+032.66E+032.75E+022.48E+045.04E+052.50E+06 + 96L1 26.225.71E-011.36E+021.91E+034.36E+032.54E+022.19E+044.38E+052.40E+06 + 96L1 27.525.31E-011.10E+021.82E+036.98E+032.20E+021.75E+043.40E+052.15E+06 + 96L1 30.724.47E-016.83E+011.43E+039.93E+031.59E+021.05E+041.92E+051.50E+06 + 96L1 34.523.70E-014.09E+011.00E+039.51E+031.12E+026.17E+031.04E+059.20E+05 + 96L1 38.003.14E-012.68E+017.13E+027.88E+038.45E+013.98E+036.32E+045.88E+05 + 96L1 44.002.42E-011.39E+014.01E+025.08E+035.48E+012.06E+032.95E+042.83E+05 + 96L1 52.001.77E-016.66E+001.98E+022.69E+033.35E+019.78E+021.24E+041.18E+05 + 96L1 64.001.19E-012.70E+007.85E+011.09E+031.82E+013.94E+024.29E+033.84E+04 + 96L1 77.008.18E-021.25E+003.38E+014.53E+021.06E+011.78E+021.68E+031.39E+04 + 96L1 94.005.42E-025.71E-011.36E+011.71E+025.92E+007.69E+016.24E+024.64E+03 + 96L1 107.004.13E-023.56E-017.58E+008.95E+014.07E+004.51E+013.31E+022.28E+03 + 96L1 124.003.02E-022.16E-013.94E+004.29E+012.66E+002.48E+011.63E+021.02E+03 + 96L1 147.002.10E-021.27E-011.90E+001.85E+011.63E+001.26E+017.27E+014.10E+02 + 96L1 175.001.45E-027.72E-029.26E-017.98E+009.90E-016.39E+003.24E+011.64E+02 + 96L1 240.007.46E-033.44E-022.79E-011.85E+004.05E-011.96E+007.94E+003.25E+01 + 96L1 325.004.03E-031.70E-029.98E-025.10E-011.74E-016.65E-012.21E+007.43E+00 + 96L1 410.002.56E-031.03E-024.89E-022.06E-019.16E-023.02E-018.71E-012.54E+00 + 96L1 520.001.64E-036.31E-032.49E-028.76E-024.79E-021.40E-013.53E-019.00E-01 + 96L1 750.008.60E-043.08E-039.72E-032.68E-021.79E-024.53E-029.65E-022.05E-01 + 96L11000.005.29E-041.80E-034.94E-031.17E-028.29E-031.97E-023.78E-027.10E-02 + 96L11500.002.73E-048.60E-042.04E-034.10E-032.81E-036.53E-031.12E-021.85E-02 + 96L2 24.651.43E+006.01E+034.49E+054.38E+063.68E+011.04E+036.84E+038.32E+03 + 96L2 25.351.34E+005.25E+033.85E+054.15E+063.38E+019.44E+026.83E+031.36E+04 + 96L2 26.651.18E+004.11E+032.92E+053.64E+062.92E+017.87E+026.56E+032.19E+04 + 96L2 29.858.85E-012.38E+031.57E+052.39E+062.09E+015.23E+025.34E+033.15E+04 + 96L2 33.656.49E-011.34E+038.11E+041.39E+061.47E+013.38E+023.89E+033.07E+04 + 96L2 38.004.71E-017.45E+024.15E+047.53E+051.03E+012.17E+022.65E+032.46E+04 + 96L2 44.003.18E-013.71E+021.85E+043.42E+056.69E+001.27E+021.59E+031.62E+04 + 96L2 52.002.01E-011.68E+027.35E+031.34E+054.11E+006.89E+018.50E+028.97E+03 + 96L2 64.001.13E-016.35E+012.35E+034.01E+042.25E+003.23E+013.75E+023.88E+03 + 96L2 77.006.75E-022.70E+018.60E+021.35E+041.32E+001.65E+011.77E+021.73E+03 + 96L2 94.003.84E-021.08E+012.93E+024.12E+037.48E-018.05E+007.80E+016.99E+02 + 96L2 107.002.66E-026.03E+001.47E+021.91E+035.18E-015.06E+004.56E+013.83E+02 + 96L2 124.001.75E-023.12E+006.71E+017.98E+023.41E-013.00E+002.47E+011.91E+02 + 96L2 147.001.08E-021.47E+002.76E+012.93E+022.11E-011.64E+001.22E+018.56E+01 + 96L2 175.006.62E-036.93E-011.12E+011.06E+021.30E-018.95E-015.94E+003.75E+01 + 96L2 240.002.75E-031.82E-012.30E+001.76E+015.42E-023.03E-011.64E+008.50E+00 + 96L2 325.001.21E-035.31E-025.33E-013.33E+002.35E-021.10E-014.93E-012.11E+00 + 96L2 410.006.55E-042.13E-021.81E-019.76E-011.25E-025.14E-022.01E-017.48E-01 + 96L2 520.003.55E-048.68E-036.28E-022.93E-016.54E-032.40E-028.22E-022.67E-01 + 96L2 750.001.44E-042.33E-031.34E-025.11E-022.42E-037.71E-032.20E-025.90E-02 + 96L21000.007.23E-058.80E-044.33E-031.43E-021.10E-033.25E-038.18E-031.93E-02 + 96L21500.002.85E-052.43E-049.90E-042.76E-033.61E-049.99E-042.18E-034.44E-03 + 96L3 19.973.50E+001.62E+041.60E+062.16E+072.98E+004.83E+043.05E+072.33E+09 + 96L3 20.673.17E+001.36E+041.30E+061.92E+072.68E+004.06E+042.42E+071.80E+09 + 96L3 21.972.66E+001.00E+049.05E+051.50E+072.22E+003.00E+041.60E+071.13E+09 + 96L3 25.171.80E+005.06E+034.02E+057.80E+061.47E+001.52E+046.44E+064.04E+08 + 96L3 28.971.20E+002.50E+031.74E+053.63E+069.54E-017.56E+032.52E+061.40E+08 + 96L3 38.005.34E-016.39E+023.44E+047.26E+054.17E-011.96E+034.19E+051.84E+07 + 96L3 44.003.42E-013.06E+021.44E+042.92E+052.67E-019.43E+021.60E+056.18E+06 + 96L3 52.002.05E-011.33E+025.31E+031.01E+051.61E-014.11E+025.41E+041.81E+06 + 96L3 64.001.08E-014.71E+011.54E+032.64E+048.56E-021.47E+021.42E+043.97E+05 + 96L3 77.006.05E-021.88E+015.16E+027.90E+034.90E-025.86E+014.39E+031.05E+05 + 96L3 94.003.23E-026.98E+001.59E+022.13E+032.68E-022.18E+011.25E+032.53E+04 + 96L3 107.002.14E-023.68E+007.40E+019.08E+021.82E-021.15E+015.61E+021.02E+04 + 96L3 124.001.35E-021.78E+003.11E+013.44E+021.17E-025.55E+002.27E+023.65E+03 + 96L3 147.007.88E-037.76E-011.15E+011.12E+027.05E-032.40E+008.06E+011.14E+03 + 96L3 175.004.56E-033.32E-014.19E+003.59E+014.20E-031.02E+002.83E+013.49E+02 + 96L3 240.001.71E-037.29E-026.86E-014.64E+001.65E-032.17E-014.43E+004.34E+01 + 96L3 325.006.78E-041.75E-021.25E-016.81E-016.81E-044.97E-027.83E-016.26E+00 + 96L3 410.003.41E-045.99E-033.52E-021.63E-013.48E-041.63E-022.14E-011.48E+00 + 96L3 520.001.71E-042.06E-031.00E-024.00E-021.77E-045.25E-035.86E-023.55E-01 + 96L3 750.006.19E-054.31E-041.59E-035.21E-036.39E-059.57E-048.40E-034.25E-02 + 96L31000.002.92E-051.36E-044.15E-041.19E-032.97E-052.65E-041.91E-038.57E-03 + 96L31500.001.10E-053.11E-057.49E-051.77E-041.09E-054.97E-052.57E-049.85E-04 + 96M1 7.331.05E+009.44E+035.32E+056.23E+062.76E+032.96E+067.14E+084.19E+10 + 96M1 8.339.24E-015.47E+033.14E+055.46E+061.88E+031.58E+063.12E+081.77E+10 + 96M1 10.337.13E-012.19E+031.28E+052.88E+069.88E+025.55E+057.90E+074.07E+09 + 96M1 14.334.48E-015.44E+023.15E+048.13E+053.72E+021.14E+051.01E+074.30E+08 + 96M1 21.332.34E-019.89E+015.40E+031.43E+051.14E+021.70E+048.88E+052.84E+07 + 96M1 29.001.35E-012.61E+011.32E+033.31E+044.56E+014.00E+031.43E+053.59E+06 + 96M1 44.006.09E-024.28E+001.86E+024.06E+031.33E+015.88E+021.29E+042.31E+05 + 96M1 56.003.75E-021.52E+005.86E+011.15E+036.51E+001.99E+023.36E+034.93E+04 + 96M1 74.002.11E-024.75E-011.54E+012.62E+022.88E+005.85E+017.41E+028.59E+03 + 96M1 107.009.64E-031.14E-012.71E+003.68E+019.82E-011.22E+011.08E+029.22E+02 + 96M1 155.004.36E-033.25E-025.13E-015.33E+003.38E-012.71E+001.72E+011.09E+02 + 96M1 285.001.22E-036.07E-034.59E-022.84E-016.03E-022.71E-011.06E+004.19E+00 + 96M1 500.004.11E-041.70E-037.48E-032.88E-021.28E-023.96E-021.07E-012.93E-01 + 96M2 6.942.21E+008.15E+055.72E+085.35E+104.24E+021.13E+057.03E+068.67E+07 + 96M2 7.941.92E+004.18E+052.40E+082.15E+102.84E+026.14E+043.66E+067.16E+07 + 96M2 9.941.42E+001.38E+055.69E+074.64E+091.45E+022.26E+041.22E+063.25E+07 + 96M2 13.948.05E-012.61E+046.76E+064.56E+085.31E+015.16E+032.32E+056.86E+06 + 96M2 20.943.57E-013.57E+035.51E+052.84E+071.59E+019.18E+023.17E+048.59E+05 + 96M2 29.001.73E-017.37E+027.73E+043.16E+066.09E+002.40E+026.58E+031.53E+05 + 96M2 44.006.32E-021.00E+026.64E+031.99E+051.80E+004.51E+019.14E+021.66E+04 + 96M2 56.003.43E-023.22E+011.66E+034.11E+048.94E-011.76E+012.97E+024.60E+03 + 96M2 74.001.65E-028.81E+003.42E+026.84E+034.01E-016.06E+008.28E+011.06E+03 + 96M2 107.006.15E-031.64E+004.47E+016.70E+021.40E-011.53E+001.58E+011.54E+02 + 96M2 155.002.25E-033.19E-016.18E+006.95E+014.94E-023.99E-013.13E+002.33E+01 + 96M2 285.004.36E-042.45E-022.84E-012.03E+009.14E-034.80E-022.44E-011.19E+00 + 96M2 500.001.02E-042.74E-032.09E-021.03E-011.97E-037.56E-032.71E-029.25E-02 + 96M3 5.848.59E+002.18E+061.78E+091.87E+113.23E+016.71E+064.89E+104.28E+13 + 96M3 6.846.49E+009.86E+056.26E+086.07E+102.00E+013.05E+061.64E+101.10E+13 + 96M3 8.843.95E+002.72E+051.17E+089.77E+099.20E+008.45E+052.79E+091.25E+12 + 96M3 12.841.76E+004.18E+041.05E+076.89E+082.97E+001.31E+052.15E+085.49E+10 + 96M3 19.846.22E-014.71E+036.62E+053.20E+077.94E-011.49E+041.11E+071.54E+09 + 96M3 29.002.32E-017.02E+026.18E+042.26E+062.52E-012.25E+038.60E+057.36E+07 + 96M3 44.007.34E-028.73E+014.75E+031.26E+057.14E-022.82E+025.42E+042.84E+06 + 96M3 56.003.67E-022.62E+011.09E+032.41E+043.45E-028.50E+011.12E+044.50E+05 + 96M3 74.001.62E-026.57E+002.04E+023.59E+031.50E-022.13E+011.87E+035.60E+04 + 96M3 107.005.32E-031.06E+002.25E+012.95E+024.98E-033.43E+001.83E+023.81E+03 + 96M3 155.001.72E-031.74E-012.54E+002.47E+011.66E-035.51E-011.88E+012.81E+02 + 96M3 285.002.72E-049.38E-037.72E-024.69E-012.79E-042.80E-025.16E-014.77E+00 + 96M3 500.005.30E-057.13E-043.62E-031.50E-025.56E-051.87E-032.23E-021.43E-01 + 96M4 5.222.16E+016.38E+041.44E+099.80E+129.82E+002.25E+057.75E+082.85E+11 + 96M4 6.221.28E+012.63E+044.20E+082.12E+125.60E+009.37E+042.38E+087.65E+10 + 96M4 8.225.37E+006.44E+035.95E+071.89E+112.28E+002.32E+043.67E+079.45E+09 + 96M4 12.221.46E+008.76E+023.69E+066.25E+096.24E-013.18E+032.66E+064.89E+08 + 96M4 19.223.06E-019.00E+011.54E+051.34E+081.39E-013.28E+021.38E+051.72E+07 + 96M4 29.006.90E-021.14E+018.69E+034.27E+063.47E-024.16E+019.89E+038.51E+05 + 96M4 44.001.44E-021.42E+004.76E+021.37E+058.29E-035.14E+007.13E+024.22E+04 + 96M4 56.005.72E-034.24E-018.97E+011.92E+043.58E-031.54E+001.59E+027.59E+03 + 96M4 74.001.93E-031.05E-011.32E+012.04E+031.34E-033.81E-012.86E+011.07E+03 + 96M4 107.004.51E-041.68E-021.08E+001.10E+023.61E-046.08E-023.06E+008.25E+01 + 96M4 155.001.04E-042.71E-039.18E-026.18E+009.46E-059.70E-033.36E-016.62E+00 + 96M4 285.009.49E-061.43E-041.88E-036.50E-021.01E-054.87E-049.80E-031.19E-01 + 96M4 500.001.08E-061.04E-056.81E-051.24E-031.26E-063.20E-054.20E-043.44E-03 + 96M5 5.003.35E+015.19E+043.59E+091.84E+135.54E+001.03E+044.72E+091.07E+14 + 96M5 6.001.92E+012.04E+049.99E+083.71E+123.09E+004.15E+031.32E+092.10E+13 + 96M5 8.007.69E+004.69E+031.33E+083.01E+111.22E+009.89E+021.77E+081.62E+12 + 96M5 12.001.98E+005.95E+027.67E+069.00E+093.26E-011.31E+021.04E+074.43E+10 + 96M5 19.003.92E-015.76E+013.02E+051.75E+087.17E-021.33E+014.17E+057.70E+08 + 96M5 29.008.20E-026.71E+001.53E+044.86E+061.74E-021.63E+002.18E+041.91E+07 + 96M5 44.001.66E-027.99E-018.12E+021.47E+054.23E-032.09E-011.19E+035.21E+05 + 96M5 56.006.42E-032.32E-011.49E+021.98E+041.85E-036.43E-022.21E+026.63E+04 + 96M5 74.002.12E-035.56E-022.09E+011.98E+037.02E-041.66E-023.16E+016.28E+03 + 96M5 107.004.83E-048.41E-031.58E+009.66E+011.93E-042.85E-032.43E+002.91E+02 + 96M5 155.001.09E-041.28E-031.19E-014.81E+005.23E-055.01E-041.86E-011.41E+01 + 96M5 285.001.00E-056.27E-051.84E-033.80E-026.14E-063.20E-052.81E-031.11E-01 + 96M5 500.001.22E-064.67E-064.62E-055.09E-048.99E-072.95E-066.40E-051.51E-03 + 96N+ 50.005.72E-024.08E+012.53E+031.17E+053.97E+002.08E+021.37E+046.82E+05 + 96N+ 70.002.39E-028.11E+003.40E+029.97E+031.47E+004.47E+011.67E+035.25E+04 + 96N+ 100.009.57E-031.53E+004.35E+018.33E+025.25E-019.31E+001.98E+023.92E+03 + 96N+ 150.003.41E-032.39E-014.54E+005.73E+011.63E-011.67E+001.99E+012.40E+02 + 96N+ 200.001.66E-036.75E-029.75E-019.44E+007.15E-025.23E-014.29E+003.71E+01 + 96N+ 500.002.11E-041.99E-031.26E-025.89E-025.61E-031.89E-026.20E-022.16E-01 + 97K 132.602.12E-011.30E-012.58E-021.09E-031.31E+014.87E+013.86E+017.28E+00 + 97K 133.302.09E-011.32E-013.03E-022.19E-031.29E+014.78E+013.90E+018.47E+00 + 97K 134.602.05E-011.36E-013.90E-025.05E-031.26E+014.63E+013.97E+011.07E+01 + 97K 137.801.94E-011.45E-016.09E-021.66E-021.18E+014.29E+014.08E+011.61E+01 + 97K 141.601.83E-011.53E-018.71E-023.81E-021.09E+013.93E+014.13E+012.20E+01 + 97K 146.001.71E-011.60E-011.16E-017.17E-029.97E+003.55E+014.12E+012.78E+01 + 97K 152.001.56E-011.65E-011.53E-011.28E-018.89E+003.11E+014.00E+013.40E+01 + 97K 160.001.39E-011.68E-011.93E-012.11E-017.68E+002.64E+013.76E+013.93E+01 + 97K 172.001.18E-011.65E-012.37E-013.32E-016.26E+002.08E+013.31E+014.24E+01 + 97K 185.001.01E-011.57E-012.64E-014.37E-015.09E+001.64E+012.82E+014.16E+01 + 97K 202.008.28E-021.45E-012.78E-015.27E-013.98E+001.23E+012.27E+013.75E+01 + 97K 215.007.21E-021.34E-012.77E-015.63E-013.34E+001.01E+011.92E+013.35E+01 + 97K 232.006.10E-021.22E-012.68E-015.79E-012.70E+007.90E+001.54E+012.84E+01 + 97K 255.004.97E-021.06E-012.48E-015.65E-012.07E+005.84E+001.17E+012.24E+01 + 97K 280.004.07E-029.19E-022.24E-015.26E-011.60E+004.34E+008.75E+001.72E+01 + 97K 345.002.64E-026.55E-021.66E-014.00E-018.98E-012.26E+004.53E+009.00E+00 + 97K 430.001.70E-024.52E-021.15E-012.71E-014.92E-011.16E+002.25E+004.35E+00 + 97K 520.001.18E-023.27E-028.18E-021.86E-012.94E-016.61E-011.24E+002.31E+00 + 97K 630.008.28E-032.36E-025.74E-021.25E-011.76E-013.80E-016.84E-011.22E+00 + 97K 860.004.78E-031.39E-023.20E-026.42E-027.66E-021.60E-012.71E-014.50E-01 + 97K 1150.002.92E-038.50E-031.85E-023.47E-023.54E-027.40E-021.19E-011.86E-01 + 97K 1400.002.11E-036.06E-031.28E-022.30E-022.09E-024.45E-027.00E-021.05E-01 + 97K 1650.001.61E-034.56E-039.40E-031.64E-021.35E-022.94E-024.54E-026.64E-02 + 97L1 26.255.59E-011.47E+021.77E+032.34E+032.81E+022.40E+044.68E+052.24E+06 + 97L1 26.955.38E-011.31E+021.76E+033.82E+032.60E+022.13E+044.09E+052.16E+06 + 97L1 28.255.01E-011.07E+021.68E+036.13E+032.26E+021.71E+043.19E+051.95E+06 + 97L1 31.454.25E-016.76E+011.34E+038.84E+031.64E+021.04E+041.83E+051.37E+06 + 97L1 35.253.53E-014.11E+019.55E+028.63E+031.17E+026.18E+031.01E+058.58E+05 + 97L1 38.003.11E-012.96E+017.37E+027.58E+039.38E+014.39E+036.84E+046.08E+05 + 97L1 44.002.41E-011.55E+014.21E+025.05E+036.08E+012.27E+033.19E+042.97E+05 + 97L1 52.001.77E-017.47E+002.10E+022.74E+033.72E+011.08E+031.35E+041.25E+05 + 97L1 64.001.19E-013.05E+008.46E+011.13E+032.02E+014.34E+024.66E+034.08E+04 + 97L1 77.008.23E-021.41E+003.68E+014.79E+021.18E+011.96E+021.83E+031.49E+04 + 97L1 94.005.47E-026.45E-011.49E+011.82E+026.57E+008.46E+016.78E+024.98E+03 + 97L1 107.004.18E-024.01E-018.33E+009.61E+014.51E+004.95E+013.60E+022.45E+03 + 97L1 124.003.06E-022.41E-014.35E+004.64E+012.95E+002.72E+011.77E+021.10E+03 + 97L1 147.002.14E-021.41E-012.09E+002.01E+011.81E+001.38E+017.90E+014.42E+02 + 97L1 175.001.48E-028.48E-021.02E+008.69E+001.10E+007.02E+003.53E+011.76E+02 + 97L1 240.007.65E-033.72E-023.07E-012.03E+004.49E-012.15E+008.64E+003.51E+01 + 97L1 325.004.15E-031.83E-021.09E-015.58E-011.92E-017.29E-012.40E+008.03E+00 + 97L1 410.002.65E-031.10E-025.33E-022.25E-011.01E-013.31E-019.47E-012.75E+00 + 97L1 520.001.70E-036.76E-032.71E-029.53E-025.30E-021.53E-013.84E-019.74E-01 + 97L1 750.008.95E-043.30E-031.05E-022.90E-021.97E-024.96E-021.05E-012.22E-01 + 97L11000.005.54E-041.93E-035.32E-031.26E-029.13E-032.16E-024.11E-027.70E-02 + 97L11500.002.87E-049.18E-042.19E-034.42E-033.09E-037.13E-031.22E-022.00E-02 + 97L2 25.381.36E+005.70E+034.07E+053.82E+063.80E+011.01E+036.37E+037.40E+03 + 97L2 26.081.27E+004.99E+033.51E+053.63E+063.51E+019.19E+026.37E+031.21E+04 + 97L2 27.381.13E+003.94E+032.68E+053.20E+063.04E+017.70E+026.14E+031.94E+04 + 97L2 30.588.53E-012.31E+031.47E+052.15E+062.19E+015.18E+025.06E+032.83E+04 + 97L2 34.386.30E-011.32E+037.70E+041.27E+061.55E+013.39E+023.73E+032.81E+04 + 97L2 38.004.85E-018.13E+024.44E+047.71E+051.16E+012.35E+022.74E+032.38E+04 + 97L2 44.003.28E-014.05E+021.98E+043.55E+057.54E+001.38E+021.66E+031.62E+04 + 97L2 52.002.09E-011.84E+027.90E+031.40E+054.63E+007.50E+018.96E+029.14E+03 + 97L2 64.001.18E-016.94E+012.54E+034.23E+042.54E+003.53E+013.99E+024.02E+03 + 97L2 77.007.04E-022.95E+019.28E+021.43E+041.49E+001.80E+011.89E+021.81E+03 + 97L2 94.004.02E-021.19E+013.17E+024.39E+038.44E-018.81E+008.37E+017.38E+02 + 97L2 107.002.79E-026.61E+001.59E+022.04E+035.84E-015.55E+004.90E+014.06E+02 + 97L2 124.001.84E-023.42E+007.28E+018.55E+023.85E-013.29E+002.67E+012.04E+02 + 97L2 147.001.14E-021.62E+003.00E+013.15E+022.39E-011.81E+001.32E+019.14E+01 + 97L2 175.007.01E-037.60E-011.22E+011.15E+021.47E-019.85E-016.45E+004.02E+01 + 97L2 240.002.93E-032.00E-012.51E+001.90E+016.13E-023.34E-011.79E+009.17E+00 + 97L2 325.001.29E-035.85E-025.83E-013.62E+002.67E-021.22E-015.39E-012.29E+00 + 97L2 410.007.02E-042.35E-021.99E-011.06E+001.41E-025.70E-022.20E-018.14E-01 + 97L2 520.003.82E-049.60E-036.91E-023.20E-017.41E-032.67E-029.05E-022.92E-01 + 97L2 750.001.55E-042.58E-031.48E-025.62E-022.74E-038.60E-032.43E-026.49E-02 + 97L21000.007.86E-059.77E-044.80E-031.58E-021.25E-033.64E-039.07E-032.13E-02 + 97L21500.003.11E-052.71E-041.10E-033.06E-034.10E-041.12E-032.43E-034.93E-03 + 97L3 20.443.34E+001.55E+041.47E+061.93E+072.92E+004.76E+042.90E+072.16E+09 + 97L3 21.143.04E+001.31E+041.21E+061.72E+072.63E+004.02E+042.31E+071.67E+09 + 97L3 22.442.56E+009.69E+038.42E+051.35E+072.19E+002.99E+041.55E+071.06E+09 + 97L3 25.641.75E+004.96E+033.81E+057.14E+061.46E+001.54E+046.33E+063.87E+08 + 97L3 29.441.17E+002.48E+031.67E+053.38E+069.56E-017.72E+032.52E+061.37E+08 + 97L3 38.005.48E-016.87E+023.64E+047.48E+054.39E-012.16E+034.65E+052.02E+07 + 97L3 44.003.52E-013.29E+021.52E+043.02E+052.81E-011.04E+031.78E+056.81E+06 + 97L3 52.002.11E-011.43E+025.61E+031.05E+051.69E-014.54E+026.00E+041.99E+06 + 97L3 64.001.11E-015.06E+011.63E+032.75E+049.01E-021.62E+021.58E+044.37E+05 + 97L3 77.006.24E-022.02E+015.46E+028.24E+035.15E-026.47E+014.86E+031.15E+05 + 97L3 94.003.33E-027.51E+001.68E+022.23E+032.83E-022.41E+011.39E+032.78E+04 + 97L3 107.002.22E-023.96E+007.83E+019.50E+021.92E-021.27E+016.19E+021.12E+04 + 97L3 124.001.39E-021.92E+003.30E+013.60E+021.23E-026.13E+002.50E+024.01E+03 + 97L3 147.008.17E-038.34E-011.22E+011.18E+027.42E-032.65E+008.88E+011.25E+03 + 97L3 175.004.73E-033.57E-014.45E+003.77E+014.42E-031.12E+003.12E+013.83E+02 + 97L3 240.001.77E-037.82E-027.28E-014.88E+001.74E-032.39E-014.88E+004.75E+01 + 97L3 325.007.06E-041.87E-021.33E-017.17E-017.16E-045.48E-028.61E-016.85E+00 + 97L3 410.003.55E-046.42E-033.74E-021.73E-013.66E-041.79E-022.35E-011.62E+00 + 97L3 520.001.79E-042.21E-031.06E-024.23E-021.86E-045.76E-036.43E-023.88E-01 + 97L3 750.006.45E-054.59E-041.69E-035.53E-036.70E-051.05E-039.20E-034.64E-02 + 97L31000.003.05E-051.44E-044.41E-041.26E-033.11E-052.89E-042.09E-039.37E-03 + 97L31500.001.15E-053.28E-057.93E-051.89E-041.13E-055.37E-052.81E-041.07E-03 + 97M1 7.549.93E-019.25E+035.13E+055.72E+062.82E+032.88E+066.66E+083.78E+10 + 97M1 8.548.73E-015.44E+033.06E+055.11E+061.94E+031.57E+062.98E+081.63E+10 + 97M1 10.546.80E-012.22E+031.27E+052.77E+061.04E+035.61E+057.77E+073.89E+09 + 97M1 14.544.32E-015.66E+023.19E+048.05E+053.96E+021.18E+051.03E+074.28E+08 + 97M1 21.542.29E-011.05E+025.58E+031.45E+051.23E+021.81E+049.30E+052.93E+07 + 97M1 29.001.35E-012.92E+011.43E+033.53E+045.07E+014.45E+031.58E+053.95E+06 + 97M1 44.006.11E-024.83E+002.03E+024.36E+031.48E+016.52E+021.43E+042.54E+05 + 97M1 56.003.78E-021.72E+006.44E+011.24E+037.25E+002.21E+023.71E+035.40E+04 + 97M1 74.002.13E-025.40E-011.71E+012.85E+023.20E+006.48E+018.17E+029.41E+03 + 97M1 107.009.78E-031.29E-013.02E+004.03E+011.09E+001.35E+011.19E+021.01E+03 + 97M1 155.004.45E-033.62E-025.73E-015.87E+003.75E-012.99E+001.89E+011.19E+02 + 97M1 285.001.25E-036.61E-035.08E-023.14E-016.69E-022.98E-011.16E+004.57E+00 + 97M1 500.004.27E-041.84E-038.18E-033.15E-021.42E-024.36E-021.17E-013.19E-01 + 97M2 7.142.07E+007.73E+055.21E+084.70E+104.40E+021.10E+056.58E+067.78E+07 + 97M2 8.141.81E+004.04E+052.23E+081.94E+102.98E+026.09E+043.50E+066.54E+07 + 97M2 10.141.36E+001.37E+055.48E+074.33E+091.55E+022.29E+041.20E+063.06E+07 + 97M2 14.147.83E-012.66E+046.76E+064.45E+085.75E+015.36E+032.34E+056.72E+06 + 97M2 21.143.54E-013.73E+035.67E+052.87E+071.75E+019.74E+023.28E+048.68E+05 + 97M2 29.001.76E-018.08E+028.43E+043.41E+066.88E+002.65E+027.15E+031.64E+05 + 97M2 44.006.51E-021.10E+027.24E+032.15E+052.03E+004.98E+019.93E+021.78E+04 + 97M2 56.003.55E-023.53E+011.80E+034.44E+041.01E+001.94E+013.24E+024.95E+03 + 97M2 74.001.72E-029.68E+003.73E+027.40E+034.53E-016.68E+009.02E+011.14E+03 + 97M2 107.006.45E-031.81E+004.88E+017.26E+021.59E-011.69E+001.72E+011.67E+02 + 97M2 155.002.37E-033.52E-016.77E+007.55E+015.60E-024.41E-013.42E+002.53E+01 + 97M2 285.004.65E-042.71E-023.13E-012.22E+001.04E-025.33E-022.69E-011.30E+00 + 97M2 500.001.10E-043.04E-032.31E-021.13E-012.24E-038.43E-033.00E-021.02E-01 + 97M3 5.988.23E+002.09E+061.64E+091.67E+113.18E+016.63E+064.66E+103.96E+13 + 97M3 6.986.26E+009.63E+055.90E+085.56E+101.99E+013.06E+061.60E+101.05E+13 + 97M3 8.983.84E+002.72E+051.13E+089.23E+099.27E+008.69E+052.81E+091.24E+12 + 97M3 12.981.74E+004.28E+041.05E+076.73E+083.04E+001.38E+052.23E+085.65E+10 + 97M3 19.986.21E-014.91E+036.78E+053.22E+078.22E-011.60E+041.18E+071.64E+09 + 97M3 29.002.37E-017.59E+026.60E+042.38E+062.66E-012.50E+039.61E+058.24E+07 + 97M3 44.007.54E-029.43E+015.06E+031.33E+057.54E-023.13E+026.05E+043.17E+06 + 97M3 56.003.78E-022.83E+011.17E+032.54E+043.65E-029.44E+011.25E+045.02E+05 + 97M3 74.001.67E-027.10E+002.17E+023.78E+031.58E-022.37E+012.08E+036.22E+04 + 97M3 107.005.51E-031.15E+002.40E+013.11E+025.26E-033.81E+002.03E+024.23E+03 + 97M3 155.001.78E-031.88E-012.71E+002.61E+011.75E-036.11E-012.08E+013.11E+02 + 97M3 285.002.83E-041.01E-028.24E-024.97E-012.94E-043.10E-025.71E-015.26E+00 + 97M3 500.005.53E-057.67E-043.86E-031.60E-025.87E-052.07E-032.46E-021.57E-01 + 97M4 5.352.06E+016.13E+041.32E+098.78E+129.64E+002.24E+057.37E+082.63E+11 + 97M4 6.351.23E+012.58E+043.96E+081.97E+125.57E+009.48E+042.32E+087.27E+10 + 97M4 8.355.28E+006.48E+035.81E+071.83E+112.30E+002.41E+043.71E+079.32E+09 + 97M4 12.351.47E+009.04E+023.74E+066.32E+096.42E-013.38E+032.77E+065.01E+08 + 97M4 19.353.12E-019.48E+011.61E+051.39E+081.45E-013.56E+021.48E+051.81E+07 + 97M4 29.007.24E-021.25E+019.47E+034.71E+063.71E-024.67E+011.10E+049.42E+05 + 97M4 44.001.52E-021.55E+005.20E+021.51E+058.88E-035.77E+007.94E+024.67E+04 + 97M4 56.006.04E-034.63E-019.79E+012.12E+043.84E-031.72E+001.77E+028.40E+03 + 97M4 74.002.04E-031.15E-011.44E+012.24E+031.44E-034.28E-013.19E+011.18E+03 + 97M4 107.004.78E-041.84E-021.18E+001.21E+023.88E-046.83E-023.41E+009.14E+01 + 97M4 155.001.10E-042.97E-031.00E-016.82E+001.02E-041.09E-023.75E-017.34E+00 + 97M4 285.001.02E-051.57E-042.06E-037.18E-021.10E-055.47E-041.09E-021.32E-01 + 97M4 500.001.16E-061.15E-057.45E-051.37E-031.36E-063.59E-054.70E-043.83E-03 + 97M5 5.123.20E+014.86E+043.35E+091.65E+135.42E+009.88E+034.52E+099.92E+13 + 97M5 6.121.86E+011.95E+049.58E+083.46E+123.06E+004.05E+031.30E+092.02E+13 + 97M5 8.127.57E+004.59E+031.32E+082.93E+111.23E+009.89E+021.80E+081.62E+12 + 97M5 12.121.99E+005.97E+027.88E+069.12E+093.34E-011.34E+021.09E+074.63E+10 + 97M5 19.123.99E-015.89E+013.18E+051.83E+087.43E-021.39E+014.51E+058.30E+08 + 97M5 29.008.57E-027.08E+001.69E+045.35E+061.85E-021.75E+002.46E+042.17E+07 + 97M5 44.001.74E-028.45E-018.95E+021.62E+054.49E-032.25E-011.34E+035.91E+05 + 97M5 56.006.77E-032.46E-011.64E+022.17E+041.96E-036.91E-022.49E+027.52E+04 + 97M5 74.002.24E-035.90E-022.30E+012.17E+037.47E-041.79E-023.56E+017.11E+03 + 97M5 107.005.13E-048.93E-031.74E+001.06E+022.06E-043.06E-032.74E+003.29E+02 + 97M5 155.001.16E-041.36E-031.32E-015.27E+005.58E-055.37E-042.09E-011.59E+01 + 97M5 285.001.06E-056.71E-052.02E-034.17E-026.55E-063.43E-053.16E-031.25E-01 + 97M5 500.001.29E-065.00E-065.06E-055.58E-049.61E-073.17E-067.14E-051.70E-03 + 97N+ 50.005.89E-024.48E+012.77E+031.29E+054.44E+002.32E+021.53E+047.68E+05 + 97N+ 70.002.46E-028.91E+003.71E+021.09E+041.65E+004.98E+011.87E+035.89E+04 + 97N+ 100.009.90E-031.68E+004.75E+019.10E+025.87E-011.03E+012.21E+024.38E+03 + 97N+ 150.003.53E-032.63E-014.97E+006.25E+011.82E-011.86E+002.21E+012.66E+02 + 97N+ 200.001.73E-037.44E-021.07E+001.03E+017.99E-025.80E-014.75E+004.11E+01 + 97N+ 500.002.21E-042.19E-031.39E-026.48E-026.27E-032.09E-026.84E-022.38E-01 + 98K 136.002.02E-011.22E-012.43E-021.01E-031.34E+014.74E+013.63E+016.65E+00 + 98K 136.701.99E-011.24E-012.84E-022.01E-031.31E+014.65E+013.67E+017.71E+00 + 98K 138.001.95E-011.28E-013.64E-024.59E-031.28E+014.52E+013.73E+019.72E+00 + 98K 141.201.85E-011.36E-015.66E-021.50E-021.20E+014.20E+013.84E+011.45E+01 + 98K 145.001.75E-011.44E-018.09E-023.43E-021.11E+013.85E+013.90E+011.98E+01 + 98K 149.001.64E-011.50E-011.06E-016.17E-021.03E+013.52E+013.89E+012.47E+01 + 98K 155.001.51E-011.56E-011.40E-011.12E-019.20E+003.10E+013.80E+013.06E+01 + 98K 163.001.35E-011.59E-011.79E-011.88E-017.97E+002.63E+013.59E+013.58E+01 + 98K 175.001.15E-011.58E-012.22E-013.01E-016.52E+002.09E+013.19E+013.91E+01 + 98K 188.009.84E-021.51E-012.51E-014.03E-015.33E+001.66E+012.74E+013.88E+01 + 98K 205.008.13E-021.40E-012.66E-014.93E-014.17E+001.25E+012.22E+013.54E+01 + 98K 218.007.10E-021.31E-012.67E-015.32E-013.51E+001.03E+011.89E+013.19E+01 + 98K 235.006.03E-021.19E-012.61E-015.53E-012.84E+008.09E+001.53E+012.73E+01 + 98K 258.004.94E-021.05E-012.44E-015.45E-012.19E+006.01E+001.16E+012.17E+01 + 98K 285.004.00E-029.07E-022.20E-015.09E-011.66E+004.39E+008.61E+001.65E+01 + 98K 350.002.62E-026.55E-021.66E-013.94E-019.43E-012.32E+004.54E+008.81E+00 + 98K 435.001.70E-024.58E-021.16E-012.71E-015.21E-011.20E+002.28E+004.34E+00 + 98K 530.001.17E-023.29E-028.20E-021.84E-013.05E-016.71E-011.23E+002.26E+00 + 98K 640.008.31E-032.40E-025.81E-021.25E-011.84E-013.91E-016.91E-011.21E+00 + 98K 870.004.86E-031.43E-023.29E-026.55E-028.09E-021.67E-012.79E-014.57E-01 + 98K 1150.003.03E-038.94E-031.95E-023.64E-023.84E-027.97E-021.27E-011.97E-01 + 98K 1400.002.19E-036.38E-031.35E-022.42E-022.27E-024.80E-027.48E-021.11E-01 + 98K 1650.001.67E-034.80E-039.93E-031.73E-021.46E-023.16E-024.86E-027.07E-02 + 98L1 27.015.27E-011.41E+021.63E+032.06E+032.87E+022.33E+044.35E+052.00E+06 + 98L1 27.715.07E-011.27E+021.62E+033.35E+032.65E+022.07E+043.81E+051.94E+06 + 98L1 29.014.73E-011.04E+021.55E+035.38E+032.32E+021.67E+043.00E+051.76E+06 + 98L1 32.214.03E-016.68E+011.26E+037.87E+031.70E+021.03E+041.75E+051.26E+06 + 98L1 36.013.37E-014.13E+019.09E+027.82E+031.22E+026.19E+039.79E+047.99E+05 + 98L1 39.002.95E-012.92E+016.92E+026.86E+039.64E+014.31E+036.46E+045.56E+05 + 98L1 45.002.30E-011.56E+014.03E+024.66E+036.31E+012.26E+033.08E+042.77E+05 + 98L1 53.001.71E-017.69E+002.06E+022.59E+033.90E+011.09E+031.32E+041.19E+05 + 98L1 65.001.16E-013.21E+008.49E+011.10E+032.14E+014.47E+024.67E+033.99E+04 + 98L1 78.008.06E-021.51E+003.76E+014.74E+021.25E+012.04E+021.86E+031.48E+04 + 98L1 95.005.40E-026.98E-011.55E+011.84E+027.06E+008.90E+017.00E+025.03E+03 + 98L1 108.004.14E-024.35E-018.77E+009.85E+014.87E+005.24E+013.74E+022.50E+03 + 98L1 125.003.05E-022.63E-014.62E+004.81E+013.19E+002.89E+011.85E+021.13E+03 + 98L1 148.002.14E-021.53E-012.25E+002.11E+011.96E+001.48E+018.32E+014.59E+02 + 98L1 175.001.51E-029.33E-021.13E+009.46E+001.21E+007.70E+003.84E+011.90E+02 + 98L1 240.007.84E-034.04E-023.38E-012.21E+004.97E-012.35E+009.39E+003.78E+01 + 98L1 325.004.27E-031.97E-021.19E-016.09E-012.13E-017.99E-012.61E+008.68E+00 + 98L1 420.002.61E-031.13E-025.40E-022.24E-011.05E-013.35E-019.38E-012.67E+00 + 98L1 530.001.71E-036.97E-032.79E-029.69E-025.55E-021.57E-013.89E-019.72E-01 + 98L1 760.009.12E-043.44E-031.10E-023.02E-022.10E-025.22E-021.09E-012.28E-01 + 98L11050.005.34E-041.88E-035.13E-031.19E-028.82E-032.06E-023.83E-027.03E-02 + 98L11550.002.85E-049.25E-042.20E-034.40E-033.10E-037.15E-031.21E-021.96E-02 + 98L2 26.121.29E+005.40E+033.69E+053.34E+063.93E+019.84E+025.93E+036.59E+03 + 98L2 26.821.21E+004.75E+033.20E+053.18E+063.64E+018.95E+025.93E+031.07E+04 + 98L2 28.121.08E+003.77E+032.46E+052.82E+063.17E+017.55E+025.74E+031.73E+04 + 98L2 31.328.22E-012.25E+031.37E+051.92E+062.30E+015.13E+024.78E+032.54E+04 + 98L2 35.126.13E-011.30E+037.32E+041.16E+061.64E+013.39E+023.57E+032.57E+04 + 98L2 39.004.66E-017.84E+024.12E+046.90E+051.21E+012.32E+022.60E+032.18E+04 + 98L2 45.003.19E-013.97E+021.88E+043.25E+057.96E+001.38E+021.60E+031.50E+04 + 98L2 53.002.05E-011.83E+027.65E+031.31E+054.94E+007.61E+018.77E+028.66E+03 + 98L2 65.001.17E-017.06E+012.51E+034.07E+042.74E+003.63E+013.98E+023.90E+03 + 98L2 78.007.08E-023.04E+019.34E+021.40E+041.62E+001.88E+011.92E+021.79E+03 + 98L2 95.004.09E-021.24E+013.24E+024.39E+039.24E-019.28E+008.59E+017.41E+02 + 98L2 108.002.85E-026.94E+001.64E+022.06E+036.42E-015.88E+005.08E+014.11E+02 + 98L2 125.001.89E-023.62E+007.57E+018.73E+024.25E-013.50E+002.78E+012.09E+02 + 98L2 148.001.18E-021.72E+003.14E+013.25E+022.65E-011.94E+001.39E+019.46E+01 + 98L2 175.007.41E-038.35E-011.33E+011.23E+021.66E-011.08E+006.99E+004.31E+01 + 98L2 240.003.11E-032.21E-012.74E+002.06E+016.93E-023.69E-011.95E+009.90E+00 + 98L2 325.001.38E-036.45E-026.39E-013.93E+003.02E-021.35E-015.90E-012.48E+00 + 98L2 420.007.07E-042.37E-021.96E-011.03E+001.50E-025.85E-022.21E-017.98E-01 + 98L2 530.003.92E-049.90E-037.00E-023.19E-017.98E-032.80E-029.29E-022.95E-01 + 98L2 760.001.62E-042.73E-031.55E-025.81E-023.00E-039.22E-032.56E-026.76E-02 + 98L21050.007.63E-059.24E-044.42E-031.42E-021.24E-033.52E-038.56E-031.96E-02 + 98L21550.003.15E-052.73E-041.09E-032.99E-034.24E-041.15E-032.45E-034.88E-03 + 98L3 20.913.20E+001.49E+041.36E+061.72E+072.86E+004.69E+042.77E+072.00E+09 + 98L3 21.612.91E+001.26E+041.11E+061.54E+072.59E+003.98E+042.21E+071.56E+09 + 98L3 22.912.46E+009.39E+037.85E+051.22E+072.16E+002.98E+041.49E+079.96E+08 + 98L3 26.111.69E+004.87E+033.61E+056.54E+061.45E+001.55E+046.22E+063.71E+08 + 98L3 29.911.14E+002.46E+031.60E+053.14E+069.59E-017.88E+032.51E+061.34E+08 + 98L3 39.005.19E-016.48E+023.29E+046.57E+054.27E-012.10E+034.34E+051.83E+07 + 98L3 45.003.37E-013.17E+021.40E+042.71E+052.76E-011.03E+031.70E+056.34E+06 + 98L3 53.002.04E-011.40E+025.30E+039.61E+041.68E-014.57E+025.87E+041.90E+06 + 98L3 65.001.09E-015.04E+011.58E+032.59E+049.04E-021.66E+021.58E+044.29E+05 + 98L3 78.006.18E-022.03E+015.35E+027.89E+035.21E-026.70E+014.95E+031.15E+05 + 98L3 95.003.33E-027.66E+001.67E+022.17E+032.88E-022.52E+011.43E+032.83E+04 + 98L3 108.002.23E-024.07E+007.85E+019.34E+021.96E-021.34E+016.45E+021.15E+04 + 98L3 125.001.41E-021.98E+003.33E+013.58E+021.26E-026.50E+002.63E+024.16E+03 + 98L3 148.008.28E-038.67E-011.24E+011.18E+027.65E-032.82E+009.40E+011.30E+03 + 98L3 175.004.91E-033.84E-014.71E+003.95E+014.65E-031.24E+003.44E+014.20E+02 + 98L3 240.001.84E-038.40E-027.72E-015.13E+001.83E-032.63E-015.36E+005.21E+01 + 98L3 325.007.35E-042.01E-021.41E-017.56E-017.53E-046.02E-029.46E-017.49E+00 + 98L3 420.003.45E-046.16E-033.49E-021.57E-013.59E-041.75E-022.26E-011.53E+00 + 98L3 530.001.77E-042.17E-031.02E-024.01E-021.85E-045.78E-036.37E-023.79E-01 + 98L3 760.006.51E-054.63E-041.68E-035.46E-036.78E-051.08E-039.41E-034.70E-02 + 98L31050.002.80E-051.27E-043.76E-041.05E-032.86E-052.54E-041.79E-037.84E-03 + 98L31550.001.12E-053.09E-057.38E-051.73E-041.09E-055.10E-052.61E-049.90E-04 + 98M1 7.759.36E-019.07E+034.93E+055.25E+062.89E+032.80E+066.21E+083.40E+10 + 98M1 8.758.26E-015.41E+032.98E+054.78E+062.01E+031.55E+062.84E+081.50E+10 + 98M1 10.756.47E-012.25E+031.26E+052.67E+061.09E+035.66E+057.63E+073.71E+09 + 98M1 14.754.16E-015.87E+023.23E+047.97E+054.22E+021.23E+051.05E+074.25E+08 + 98M1 21.752.23E-011.12E+025.77E+031.46E+051.33E+021.92E+049.73E+053.01E+07 + 98M1 29.001.34E-013.26E+011.55E+033.75E+045.64E+014.94E+031.75E+054.33E+06 + 98M1 44.006.12E-025.43E+002.21E+024.67E+031.64E+017.24E+021.58E+042.79E+05 + 98M1 56.003.80E-021.95E+007.06E+011.34E+038.06E+002.44E+024.10E+035.92E+04 + 98M1 74.002.15E-026.12E-011.88E+013.09E+023.56E+007.17E+019.00E+021.03E+04 + 98M1 107.009.93E-031.45E-013.35E+004.40E+011.21E+001.49E+011.31E+021.10E+03 + 98M1 155.004.54E-034.05E-026.38E-016.46E+004.17E-013.30E+002.07E+011.29E+02 + 98M1 285.001.29E-037.21E-035.62E-023.46E-017.43E-023.28E-011.27E+004.98E+00 + 98M1 500.004.43E-041.98E-038.95E-033.46E-021.57E-024.78E-021.28E-013.48E-01 + 98M2 7.351.94E+007.35E+054.74E+084.13E+104.57E+021.07E+056.17E+066.99E+07 + 98M2 8.351.71E+003.91E+052.08E+081.74E+103.12E+026.04E+043.34E+065.96E+07 + 98M2 10.351.29E+001.35E+055.27E+074.04E+091.65E+022.32E+041.17E+062.88E+07 + 98M2 14.357.61E-012.72E+046.74E+064.33E+086.23E+015.58E+032.36E+056.56E+06 + 98M2 21.353.51E-013.90E+035.83E+052.89E+071.92E+011.03E+033.40E+048.77E+05 + 98M2 29.001.80E-018.86E+029.19E+043.67E+067.79E+002.92E+027.76E+031.75E+05 + 98M2 44.006.71E-021.21E+027.89E+032.31E+052.30E+005.49E+011.08E+031.91E+04 + 98M2 56.003.67E-023.88E+011.97E+034.80E+041.14E+002.14E+013.52E+025.32E+03 + 98M2 74.001.79E-021.06E+014.07E+028.00E+035.13E-017.37E+009.82E+011.23E+03 + 98M2 107.006.76E-031.99E+005.34E+017.87E+021.80E-011.86E+001.88E+011.80E+02 + 98M2 155.002.50E-033.87E-017.41E+008.21E+016.34E-024.88E-013.74E+002.75E+01 + 98M2 285.004.96E-043.00E-023.44E-012.43E+001.18E-025.92E-022.95E-011.42E+00 + 98M2 500.001.18E-043.37E-032.55E-021.24E-012.54E-039.40E-033.31E-021.12E-01 + 98M3 6.127.89E+002.01E+061.51E+091.49E+113.12E+016.56E+064.45E+103.67E+13 + 98M3 7.126.04E+009.42E+055.56E+085.08E+101.98E+013.08E+061.56E+101.00E+13 + 98M3 9.123.74E+002.72E+051.10E+088.71E+099.33E+008.93E+052.82E+091.22E+12 + 98M3 13.121.71E+004.38E+041.05E+076.58E+083.10E+001.45E+052.32E+085.82E+10 + 98M3 20.126.20E-015.13E+036.93E+053.23E+078.49E-011.72E+041.26E+071.74E+09 + 98M3 29.002.42E-018.20E+027.05E+042.51E+062.81E-012.77E+031.07E+069.22E+07 + 98M3 44.007.73E-021.02E+025.40E+031.40E+057.97E-023.48E+026.75E+043.53E+06 + 98M3 56.003.88E-023.07E+011.24E+032.67E+043.85E-021.05E+021.40E+045.58E+05 + 98M3 74.001.72E-027.68E+002.31E+023.98E+031.67E-022.63E+012.32E+036.91E+04 + 98M3 107.005.70E-031.24E+002.56E+013.28E+025.56E-034.22E+002.26E+024.69E+03 + 98M3 155.001.85E-032.03E-012.89E+002.76E+011.85E-036.78E-012.31E+013.43E+02 + 98M3 285.002.95E-041.09E-028.79E-025.26E-013.11E-043.43E-026.32E-015.80E+00 + 98M3 500.005.80E-058.25E-044.12E-031.70E-026.19E-052.28E-032.71E-021.73E-01 + 98M4 5.481.97E+015.90E+041.21E+097.88E+129.47E+002.22E+057.01E+082.43E+11 + 98M4 6.481.19E+012.53E+043.74E+081.82E+125.53E+009.60E+042.26E+086.91E+10 + 98M4 8.485.19E+006.52E+035.67E+071.77E+112.32E+002.50E+043.74E+079.19E+09 + 98M4 12.481.47E+009.33E+023.78E+066.38E+096.60E-013.60E+032.89E+065.13E+08 + 98M4 19.483.18E-019.99E+011.67E+051.45E+081.51E-013.86E+021.58E+051.91E+07 + 98M4 29.007.59E-021.36E+011.03E+045.19E+063.96E-025.24E+011.23E+041.04E+06 + 98M4 44.001.60E-021.69E+005.67E+021.66E+059.51E-036.48E+008.84E+025.17E+04 + 98M4 56.006.38E-035.06E-011.07E+022.33E+044.12E-031.94E+001.97E+029.29E+03 + 98M4 74.002.16E-031.26E-011.57E+012.47E+031.55E-034.81E-013.55E+011.31E+03 + 98M4 107.005.09E-042.02E-021.29E+001.33E+024.18E-047.67E-023.79E+001.01E+02 + 98M4 155.001.18E-043.26E-031.09E-017.52E+001.10E-041.22E-024.17E-018.13E+00 + 98M4 285.001.09E-051.73E-042.25E-037.93E-021.18E-056.14E-041.22E-021.47E-01 + 98M4 500.001.25E-061.26E-058.15E-051.52E-031.47E-064.03E-055.25E-044.27E-03 + 98M5 5.243.06E+014.55E+043.13E+091.49E+135.31E+009.47E+034.34E+099.21E+13 + 98M5 6.241.80E+011.86E+049.20E+083.23E+123.03E+003.96E+031.28E+091.94E+13 + 98M5 8.247.44E+004.50E+031.31E+082.85E+111.24E+009.89E+021.83E+081.62E+12 + 98M5 12.241.99E+005.99E+028.09E+069.24E+093.42E-011.38E+021.15E+074.84E+10 + 98M5 19.244.06E-016.02E+013.35E+051.91E+087.70E-021.44E+014.86E+058.94E+08 + 98M5 29.008.96E-027.48E+001.86E+045.88E+061.96E-021.89E+002.77E+042.47E+07 + 98M5 44.001.82E-028.93E-019.86E+021.78E+054.76E-032.41E-011.51E+036.71E+05 + 98M5 56.007.12E-032.60E-011.80E+022.39E+042.08E-037.41E-022.80E+028.52E+04 + 98M5 74.002.36E-036.25E-022.54E+012.38E+037.94E-041.92E-024.01E+018.05E+03 + 98M5 107.005.42E-049.49E-031.92E+001.16E+022.19E-043.28E-033.08E+003.72E+02 + 98M5 155.001.23E-041.45E-031.45E-015.78E+005.95E-055.76E-042.36E-011.79E+01 + 98M5 285.001.13E-057.16E-052.22E-034.58E-026.99E-063.68E-053.54E-031.41E-01 + 98M5 500.001.38E-065.36E-065.53E-056.12E-041.02E-063.39E-067.96E-051.90E-03 + 98N+ 50.006.10E-024.96E+013.05E+031.42E+055.00E+002.61E+021.74E+048.73E+05 + 98N+ 70.002.56E-029.88E+004.09E+021.20E+041.86E+005.59E+012.11E+036.68E+04 + 98N+ 100.001.03E-021.86E+005.23E+011.00E+036.61E-011.16E+012.48E+024.94E+03 + 98N+ 150.003.69E-032.93E-015.49E+006.88E+012.05E-012.08E+002.47E+012.99E+02 + 98N+ 200.001.81E-038.28E-021.18E+001.14E+018.99E-026.49E-015.31E+004.59E+01 + 98N+ 500.002.33E-042.43E-031.54E-027.19E-027.04E-032.33E-027.60E-022.64E-01 + 99K 139.471.92E-011.14E-012.30E-029.44E-041.36E+014.63E+013.42E+016.08E+00 + 99K 140.171.90E-011.16E-012.68E-021.85E-031.34E+014.54E+013.45E+017.02E+00 + 99K 141.471.86E-011.20E-013.42E-024.19E-031.31E+014.41E+013.51E+018.83E+00 + 99K 144.671.77E-011.28E-015.29E-021.36E-021.23E+014.11E+013.62E+011.31E+01 + 99K 148.471.67E-011.36E-017.55E-023.10E-021.14E+013.78E+013.68E+011.79E+01 + 99K 152.001.59E-011.41E-019.60E-025.26E-021.06E+013.50E+013.68E+012.19E+01 + 99K 158.001.46E-011.47E-011.29E-019.79E-029.54E+003.09E+013.62E+012.74E+01 + 99K 166.001.31E-011.51E-011.66E-011.68E-018.29E+002.64E+013.44E+013.24E+01 + 99K 178.001.12E-011.51E-012.09E-012.73E-016.81E+002.10E+013.08E+013.60E+01 + 99K 191.009.62E-021.46E-012.38E-013.71E-015.58E+001.68E+012.67E+013.61E+01 + 99K 208.007.99E-021.36E-012.56E-014.61E-014.39E+001.28E+012.18E+013.34E+01 + 99K 221.007.00E-021.28E-012.59E-015.02E-013.70E+001.05E+011.86E+013.04E+01 + 99K 238.005.97E-021.18E-012.54E-015.27E-013.01E+008.29E+001.52E+012.62E+01 + 99K 261.004.91E-021.04E-012.40E-015.26E-012.32E+006.19E+001.16E+012.10E+01 + 99K 290.003.94E-028.96E-022.16E-014.94E-011.73E+004.45E+008.49E+001.58E+01 + 99K 355.002.61E-026.57E-021.66E-013.88E-019.93E-012.38E+004.54E+008.63E+00 + 99K 440.001.71E-024.65E-021.18E-012.71E-015.52E-011.24E+002.32E+004.33E+00 + 99K 530.001.21E-023.43E-028.52E-021.90E-013.33E-017.21E-011.30E+002.35E+00 + 99K 640.008.58E-032.51E-026.07E-021.30E-012.00E-014.20E-017.33E-011.27E+00 + 99K 870.005.03E-031.51E-023.45E-026.85E-028.81E-021.80E-012.97E-014.82E-01 + 99K 1150.003.15E-039.41E-032.06E-023.83E-024.18E-028.59E-021.36E-012.08E-01 + 99K 1400.002.28E-036.73E-031.43E-022.55E-022.46E-025.17E-027.99E-021.18E-01 + 99K 1650.001.74E-035.06E-031.05E-021.83E-021.58E-023.41E-025.20E-027.52E-02 + 99L1 27.784.94E-011.36E+021.50E+031.82E+032.91E+022.25E+044.05E+051.80E+06 + 99L1 28.484.78E-011.23E+021.49E+032.94E+032.72E+022.01E+043.55E+051.74E+06 + 99L1 29.784.47E-011.02E+021.44E+034.72E+032.38E+021.63E+042.82E+051.59E+06 + 99L1 32.983.83E-016.60E+011.18E+037.00E+031.76E+021.02E+041.67E+051.15E+06 + 99L1 36.783.22E-014.14E+018.64E+027.09E+031.27E+026.20E+039.47E+047.44E+05 + 99L1 40.002.80E-012.89E+016.52E+026.22E+039.93E+014.24E+036.13E+045.10E+05 + 99L1 46.002.20E-011.58E+013.87E+024.30E+036.57E+012.26E+032.98E+042.59E+05 + 99L1 54.001.64E-017.93E+002.02E+022.44E+034.09E+011.11E+031.30E+041.14E+05 + 99L1 66.001.12E-013.39E+008.53E+011.06E+032.27E+014.61E+024.69E+033.90E+04 + 99L1 79.007.90E-021.62E+003.85E+014.70E+021.34E+012.13E+021.90E+031.47E+04 + 99L1 96.005.33E-027.56E-011.62E+011.86E+027.60E+009.38E+017.22E+025.09E+03 + 99L1 109.004.11E-024.74E-019.24E+001.01E+025.26E+005.55E+013.88E+022.55E+03 + 99L1 126.003.04E-022.86E-014.91E+004.98E+013.46E+003.08E+011.93E+021.17E+03 + 99L1 149.002.15E-021.66E-012.41E+002.21E+012.13E+001.58E+018.77E+014.77E+02 + 99L1 175.001.54E-021.03E-011.25E+001.03E+011.35E+008.46E+004.17E+012.05E+02 + 99L1 240.008.02E-034.40E-023.72E-012.42E+005.50E-012.58E+001.02E+014.08E+01 + 99L1 325.004.39E-032.13E-021.31E-016.64E-012.35E-018.75E-012.84E+009.38E+00 + 99L1 420.002.70E-031.21E-025.89E-022.44E-011.16E-013.67E-011.02E+002.89E+00 + 99L1 530.001.77E-037.48E-033.03E-021.05E-016.14E-021.72E-014.23E-011.05E+00 + 99L1 760.009.51E-043.69E-031.19E-023.27E-022.31E-025.71E-021.19E-012.47E-01 + 99L11050.005.58E-042.01E-035.53E-031.29E-029.71E-032.25E-024.17E-027.61E-02 + 99L11550.003.00E-049.89E-042.36E-034.74E-033.40E-037.82E-031.31E-022.12E-02 + 99L2 26.881.23E+005.13E+033.36E+052.93E+064.06E+019.58E+025.54E+035.89E+03 + 99L2 27.581.15E+004.53E+032.91E+052.79E+063.78E+018.73E+025.53E+039.51E+03 + 99L2 28.881.03E+003.62E+032.27E+052.49E+063.30E+017.40E+025.37E+031.53E+04 + 99L2 32.087.91E-012.18E+031.28E+051.72E+062.42E+015.08E+024.52E+032.29E+04 + 99L2 35.885.95E-011.28E+036.95E+041.06E+061.74E+013.40E+023.42E+032.35E+04 + 99L2 40.004.49E-017.59E+023.83E+046.21E+051.27E+012.29E+022.47E+032.00E+04 + 99L2 46.003.10E-013.91E+021.78E+042.98E+058.43E+001.38E+021.54E+031.40E+04 + 99L2 54.002.02E-011.84E+027.42E+031.23E+055.29E+007.74E+018.61E+028.22E+03 + 99L2 66.001.17E-017.20E+012.49E+033.92E+042.96E+003.75E+013.98E+023.78E+03 + 99L2 79.007.13E-023.14E+019.41E+021.38E+041.77E+001.96E+011.95E+021.77E+03 + 99L2 96.004.15E-021.29E+013.31E+024.40E+031.01E+009.78E+008.83E+017.44E+02 + 99L2 109.002.92E-027.30E+001.69E+022.09E+037.08E-016.23E+005.26E+014.17E+02 + 99L2 126.001.95E-023.83E+007.88E+018.92E+024.70E-013.74E+002.90E+012.14E+02 + 99L2 149.001.22E-021.84E+003.30E+013.36E+022.94E-012.08E+001.46E+019.78E+01 + 99L2 175.007.83E-039.18E-011.45E+011.33E+021.88E-011.19E+007.58E+004.62E+01 + 99L2 240.003.31E-032.43E-013.00E+002.23E+017.85E-024.07E-012.13E+001.07E+01 + 99L2 325.001.47E-037.11E-026.99E-014.28E+003.42E-021.49E-016.45E-012.69E+00 + 99L2 420.007.57E-042.62E-022.15E-011.12E+001.70E-026.50E-022.42E-018.69E-01 + 99L2 530.004.21E-041.09E-027.70E-023.49E-019.06E-033.11E-021.02E-013.22E-01 + 99L2 760.001.76E-043.03E-031.71E-026.39E-023.40E-031.03E-022.84E-027.43E-02 + 99L21050.008.26E-051.03E-034.90E-031.56E-021.41E-033.95E-039.51E-032.16E-02 + 99L21550.003.44E-053.04E-041.21E-033.32E-034.82E-041.29E-032.73E-035.41E-03 + 99L3 21.393.06E+001.42E+041.25E+061.55E+072.81E+004.61E+042.64E+071.86E+09 + 99L3 22.092.79E+001.22E+041.03E+061.38E+072.55E+003.95E+042.12E+071.45E+09 + 99L3 23.392.37E+009.10E+037.33E+051.10E+072.13E+002.97E+041.44E+079.38E+08 + 99L3 26.591.64E+004.78E+033.41E+055.99E+061.44E+001.57E+046.11E+063.56E+08 + 99L3 30.391.11E+002.44E+031.54E+052.92E+069.60E-018.04E+032.51E+061.30E+08 + 99L3 40.004.93E-016.14E+022.99E+045.79E+054.15E-012.05E+034.07E+051.67E+07 + 99L3 46.003.24E-013.05E+021.30E+042.44E+052.71E-011.02E+031.63E+055.93E+06 + 99L3 54.001.98E-011.37E+025.01E+038.84E+041.67E-014.60E+025.75E+041.82E+06 + 99L3 66.001.07E-015.03E+011.52E+032.43E+049.08E-021.70E+021.58E+044.22E+05 + 99L3 79.006.12E-022.05E+015.25E+027.56E+035.28E-026.95E+015.04E+031.16E+05 + 99L3 96.003.33E-027.82E+001.66E+022.11E+032.93E-022.64E+011.48E+032.89E+04 + 99L3 109.002.23E-024.18E+007.87E+019.19E+022.00E-021.41E+016.73E+021.18E+04 + 99L3 126.001.42E-022.05E+003.37E+013.55E+021.30E-026.89E+002.76E+024.31E+03 + 99L3 149.008.40E-039.02E-011.27E+011.18E+027.88E-033.01E+009.94E+011.36E+03 + 99L3 175.005.09E-034.13E-014.99E+004.14E+014.89E-031.37E+003.79E+014.60E+02 + 99L3 240.001.92E-039.02E-028.18E-015.39E+001.92E-032.90E-015.90E+005.70E+01 + 99L3 325.007.64E-042.15E-021.50E-017.96E-017.91E-046.63E-021.04E+008.19E+00 + 99L3 420.003.59E-046.60E-033.70E-021.66E-013.77E-041.92E-022.48E-011.68E+00 + 99L3 530.001.84E-042.32E-031.08E-024.24E-021.94E-046.34E-036.98E-024.14E-01 + 99L3 760.006.80E-054.94E-041.78E-035.78E-037.10E-051.18E-031.03E-025.14E-02 + 99L31050.002.92E-051.35E-043.99E-041.12E-032.99E-052.76E-041.96E-038.56E-03 + 99L31550.001.16E-053.26E-057.81E-051.84E-041.14E-055.50E-052.85E-041.08E-03 + 99M1 7.978.82E-018.91E+034.74E+054.82E+062.96E+032.72E+065.79E+083.06E+10 + 99M1 8.977.81E-015.38E+032.90E+054.47E+062.08E+031.53E+062.70E+081.38E+10 + 99M1 10.976.16E-012.28E+031.24E+052.57E+061.14E+035.72E+057.49E+073.53E+09 + 99M1 14.974.01E-016.10E+023.26E+047.88E+054.50E+021.27E+051.07E+074.21E+08 + 99M1 21.972.17E-011.19E+025.96E+031.48E+051.43E+022.03E+041.02E+063.08E+07 + 99M1 29.001.34E-013.63E+011.68E+033.99E+046.28E+015.49E+031.94E+054.76E+06 + 99M1 44.006.13E-026.11E+002.42E+025.01E+031.83E+018.03E+021.74E+043.06E+05 + 99M1 56.003.82E-022.20E+007.75E+011.44E+038.97E+002.71E+024.52E+036.49E+04 + 99M1 74.002.17E-026.94E-012.08E+013.35E+023.96E+007.94E+019.91E+021.13E+04 + 99M1 107.001.01E-021.64E-013.72E+004.80E+011.35E+001.65E+011.44E+021.21E+03 + 99M1 155.004.62E-034.53E-027.10E-017.10E+004.63E-013.64E+002.27E+011.41E+02 + 99M1 285.001.33E-037.89E-036.22E-023.81E-018.25E-023.61E-011.39E+005.43E+00 + 99M1 500.004.60E-042.14E-039.80E-033.79E-021.74E-025.26E-021.40E-013.79E-01 + 99M2 7.561.81E+006.99E+054.32E+083.63E+104.75E+021.05E+055.79E+066.28E+07 + 99M2 8.561.61E+003.78E+051.94E+081.57E+103.28E+025.99E+043.19E+065.44E+07 + 99M2 10.561.23E+001.34E+055.07E+073.77E+091.75E+022.35E+041.15E+062.71E+07 + 99M2 14.567.39E-012.77E+046.72E+064.21E+086.75E+015.80E+032.38E+056.41E+06 + 99M2 21.563.47E-014.08E+035.99E+052.91E+072.11E+011.10E+033.52E+048.84E+05 + 99M2 29.001.83E-019.72E+021.00E+053.96E+068.82E+003.22E+028.43E+031.87E+05 + 99M2 44.006.90E-021.33E+028.60E+032.50E+052.61E+006.06E+011.17E+032.05E+04 + 99M2 56.003.80E-024.26E+012.15E+035.18E+041.30E+002.36E+013.83E+025.72E+03 + 99M2 74.001.86E-021.17E+014.44E+028.65E+035.82E-018.14E+001.07E+021.32E+03 + 99M2 107.007.08E-032.19E+005.83E+018.53E+022.04E-012.06E+002.05E+011.95E+02 + 99M2 155.002.64E-034.27E-018.11E+008.92E+017.20E-025.40E-014.09E+002.98E+01 + 99M2 285.005.28E-043.32E-023.78E-012.65E+001.34E-026.58E-023.25E-011.55E+00 + 99M2 500.001.27E-043.74E-032.82E-021.36E-012.89E-031.05E-023.66E-021.23E-01 + 99M3 6.267.57E+001.94E+061.39E+091.34E+113.07E+016.49E+064.25E+103.40E+13 + 99M3 7.265.82E+009.21E+055.24E+084.65E+101.96E+013.10E+061.52E+109.56E+12 + 99M3 9.263.64E+002.72E+051.07E+088.22E+099.39E+009.18E+052.84E+091.21E+12 + 99M3 13.261.69E+004.49E+041.05E+076.42E+083.17E+001.53E+052.41E+085.98E+10 + 99M3 20.266.19E-015.36E+037.09E+053.23E+078.77E-011.84E+041.34E+071.84E+09 + 99M3 29.002.47E-018.88E+027.52E+042.64E+062.96E-013.08E+031.20E+061.03E+08 + 99M3 44.007.92E-021.10E+025.76E+031.47E+058.41E-023.86E+027.53E+043.93E+06 + 99M3 56.003.99E-023.32E+011.33E+032.81E+044.07E-021.16E+021.56E+046.21E+05 + 99M3 74.001.77E-028.31E+002.46E+024.19E+031.76E-022.91E+012.58E+037.67E+04 + 99M3 107.005.90E-031.34E+002.73E+013.46E+025.87E-034.69E+002.51E+025.19E+03 + 99M3 155.001.93E-032.19E-013.08E+002.91E+011.96E-037.52E-012.56E+013.80E+02 + 99M3 285.003.08E-041.18E-029.37E-025.57E-013.28E-043.80E-026.99E-016.39E+00 + 99M3 500.006.03E-058.87E-044.40E-031.80E-026.53E-052.52E-033.00E-021.90E-01 + 99M4 5.621.88E+015.69E+041.11E+097.07E+129.30E+002.21E+056.68E+082.25E+11 + 99M4 6.621.15E+012.49E+043.53E+081.69E+125.50E+009.73E+042.21E+086.57E+10 + 99M4 8.625.10E+006.56E+035.54E+071.71E+112.35E+002.59E+043.77E+079.06E+09 + 99M4 12.621.47E+009.64E+023.82E+066.43E+096.78E-013.83E+033.01E+065.25E+08 + 99M4 19.623.24E-011.05E+021.73E+051.51E+081.57E-014.18E+021.69E+052.01E+07 + 99M4 29.007.95E-021.48E+011.12E+045.72E+064.23E-025.88E+011.37E+041.15E+06 + 99M4 44.001.69E-021.85E+006.17E+021.83E+051.02E-027.28E+009.84E+025.71E+04 + 99M4 56.006.73E-035.53E-011.16E+022.57E+044.41E-032.18E+002.19E+021.03E+04 + 99M4 74.002.29E-031.38E-011.71E+012.72E+031.66E-035.41E-013.94E+011.44E+03 + 99M4 107.005.41E-042.21E-021.40E+001.47E+024.49E-048.62E-024.22E+001.12E+02 + 99M4 155.001.26E-043.58E-031.19E-018.28E+001.18E-041.37E-024.65E-019.00E+00 + 99M4 285.001.16E-051.90E-042.46E-038.74E-021.28E-056.90E-041.36E-021.63E-01 + 99M4 500.001.35E-061.39E-058.90E-051.68E-031.59E-064.52E-055.87E-044.75E-03 + 99M5 5.362.93E+014.27E+042.94E+091.35E+135.20E+009.08E+034.16E+098.55E+13 + 99M5 6.361.74E+011.78E+048.84E+083.01E+123.01E+003.87E+031.26E+091.86E+13 + 99M5 8.367.32E+004.40E+031.30E+082.77E+111.24E+009.89E+021.86E+081.62E+12 + 99M5 12.361.99E+006.00E+028.31E+069.35E+093.49E-011.41E+021.21E+075.05E+10 + 99M5 19.364.13E-016.14E+013.53E+051.99E+087.97E-021.50E+015.24E+059.61E+08 + 99M5 29.009.36E-027.89E+002.05E+046.45E+062.07E-022.03E+003.12E+042.80E+07 + 99M5 44.001.91E-029.44E-011.09E+031.95E+055.05E-032.59E-011.70E+037.60E+05 + 99M5 56.007.48E-032.75E-011.99E+022.62E+042.21E-037.96E-023.15E+029.65E+04 + 99M5 74.002.49E-036.62E-022.80E+012.61E+038.44E-042.06E-024.51E+019.11E+03 + 99M5 107.005.71E-041.01E-022.11E+001.27E+022.33E-043.51E-033.47E+004.19E+02 + 99M5 155.001.30E-041.54E-031.60E-016.34E+006.34E-056.18E-042.65E-012.02E+01 + 99M5 285.001.22E-057.63E-052.44E-035.01E-027.45E-063.94E-053.97E-031.58E-01 + 99M5 500.001.51E-065.72E-066.05E-056.70E-041.09E-063.63E-068.87E-052.13E-03 + 99N+ 50.006.28E-025.45E+013.33E+031.57E+055.60E+002.91E+021.94E+049.85E+05 + 99N+ 70.002.64E-021.09E+014.46E+021.32E+042.08E+006.23E+012.35E+037.50E+04 + 99N+ 100.001.07E-022.05E+005.72E+011.09E+037.40E-011.29E+012.77E+025.52E+03 + 99N+ 150.003.83E-033.23E-016.01E+007.51E+012.30E-012.31E+002.75E+013.32E+02 + 99N+ 200.001.88E-039.14E-021.30E+001.24E+011.01E-017.19E-015.88E+005.09E+01 + 99N+ 500.002.44E-042.67E-031.70E-027.92E-027.86E-032.58E-028.37E-022.91E-01 +100K 143.011.83E-011.08E-012.18E-028.80E-041.39E+014.52E+013.23E+015.56E+00 +100K 143.711.81E-011.10E-012.53E-021.71E-031.37E+014.44E+013.25E+016.40E+00 +100K 145.011.77E-011.13E-013.22E-023.84E-031.34E+014.31E+013.31E+018.02E+00 +100K 148.211.69E-011.21E-014.96E-021.23E-021.26E+014.03E+013.42E+011.19E+01 +100K 152.011.60E-011.28E-017.07E-022.81E-021.17E+013.71E+013.48E+011.62E+01 +100K 156.001.51E-011.34E-019.24E-025.05E-021.09E+013.41E+013.48E+012.03E+01 +100K 162.001.39E-011.40E-011.23E-019.25E-029.75E+003.03E+013.43E+012.52E+01 +100K 170.001.25E-011.44E-011.59E-011.57E-018.51E+002.59E+013.27E+012.98E+01 +100K 182.001.08E-011.44E-011.99E-012.56E-017.02E+002.08E+012.94E+013.32E+01 +100K 195.009.31E-021.41E-012.28E-013.48E-015.78E+001.67E+012.56E+013.36E+01 +100K 212.007.77E-021.32E-012.46E-014.36E-014.56E+001.28E+012.11E+013.13E+01 +100K 225.006.84E-021.25E-012.51E-014.77E-013.86E+001.06E+011.82E+012.87E+01 +100K 242.005.85E-021.15E-012.48E-015.04E-013.15E+008.40E+001.49E+012.49E+01 +100K 265.004.84E-021.03E-012.35E-015.08E-012.44E+006.31E+001.15E+012.02E+01 +100K 290.004.01E-029.11E-022.17E-014.86E-011.90E+004.76E+008.82E+001.60E+01 +100K 355.002.67E-026.75E-021.69E-013.90E-011.09E+002.55E+004.76E+008.83E+00 +100K 440.001.76E-024.82E-021.21E-012.77E-016.05E-011.34E+002.44E+004.48E+00 +100K 530.001.24E-023.57E-028.86E-021.96E-013.65E-017.75E-011.38E+002.45E+00 +100K 640.008.86E-032.63E-026.34E-021.35E-012.19E-014.52E-017.77E-011.33E+00 +100K 870.005.21E-031.58E-023.63E-027.16E-029.63E-021.94E-013.16E-015.09E-01 +100K 1150.003.27E-039.91E-032.17E-024.02E-024.55E-029.26E-021.45E-012.21E-01 +100K 1400.002.37E-037.09E-031.51E-022.69E-022.68E-025.58E-028.55E-021.26E-01 +100K 1650.001.81E-035.34E-031.11E-021.93E-021.72E-023.68E-025.57E-028.00E-02 +100L1 28.574.65E-011.32E+021.39E+031.61E+032.98E+022.19E+043.77E+051.62E+06 +100L1 29.274.51E-011.19E+021.38E+032.58E+032.79E+021.96E+043.32E+051.56E+06 +100L1 30.574.22E-019.90E+011.33E+034.15E+032.45E+021.60E+042.65E+051.43E+06 +100L1 33.773.63E-016.53E+011.11E+036.24E+031.82E+021.01E+041.59E+051.06E+06 +100L1 37.573.07E-014.16E+018.22E+026.42E+031.33E+026.22E+039.16E+046.93E+05 +100L1 41.002.66E-012.87E+016.16E+025.66E+031.03E+024.18E+035.83E+044.69E+05 +100L1 47.002.10E-011.60E+013.73E+023.98E+036.86E+012.27E+032.89E+042.43E+05 +100L1 55.001.58E-018.19E+001.98E+022.31E+034.32E+011.13E+031.29E+041.09E+05 +100L1 67.001.09E-013.58E+008.58E+011.03E+032.42E+014.76E+024.72E+033.82E+04 +100L1 80.007.74E-021.73E+003.95E+014.66E+021.44E+012.22E+021.94E+031.47E+04 +100L1 97.005.26E-028.20E-011.69E+011.89E+028.21E+009.89E+017.46E+025.15E+03 +100L1 110.004.07E-025.16E-019.72E+001.03E+025.70E+005.88E+014.04E+022.61E+03 +100L1 127.003.03E-023.12E-015.22E+005.16E+013.76E+003.28E+012.03E+021.20E+03 +100L1 150.002.15E-021.81E-012.58E+002.32E+012.33E+001.69E+019.24E+014.95E+02 +100L1 175.001.56E-021.14E-011.38E+001.12E+011.50E+009.29E+004.54E+012.21E+02 +100L1 240.008.21E-034.81E-024.10E-012.64E+006.11E-012.84E+001.11E+014.41E+01 +100L1 325.004.52E-032.31E-021.43E-017.26E-012.61E-019.61E-013.09E+001.01E+01 +100L1 420.002.79E-031.31E-026.43E-022.66E-011.29E-014.02E-011.11E+003.13E+00 +100L1 530.001.84E-038.05E-033.29E-021.15E-016.80E-021.89E-014.60E-011.14E+00 +100L1 760.009.91E-043.96E-031.28E-023.55E-022.56E-026.26E-021.29E-012.68E-01 +100L11050.005.84E-042.16E-035.97E-031.40E-021.07E-022.47E-024.54E-028.26E-02 +100L11550.003.14E-041.06E-032.55E-035.12E-033.75E-038.56E-031.43E-022.30E-02 +100L2 27.661.17E+004.88E+033.05E+052.56E+064.22E+019.33E+025.17E+035.25E+03 +100L2 28.361.10E+004.32E+032.66E+052.44E+063.94E+018.52E+025.16E+038.44E+03 +100L2 29.669.82E-013.48E+032.08E+052.19E+063.45E+017.26E+025.03E+031.36E+04 +100L2 32.867.62E-012.13E+031.20E+051.54E+062.55E+015.04E+024.28E+032.06E+04 +100L2 36.665.78E-011.26E+036.60E+049.63E+051.85E+013.41E+023.28E+032.14E+04 +100L2 41.004.33E-017.38E+023.58E+045.60E+051.33E+012.28E+022.35E+031.83E+04 +100L2 47.003.03E-013.86E+021.70E+042.75E+058.96E+001.39E+021.49E+031.30E+04 +100L2 55.001.99E-011.84E+027.22E+031.16E+055.68E+007.89E+018.46E+027.81E+03 +100L2 67.001.17E-017.35E+012.47E+033.79E+043.21E+003.88E+013.98E+023.67E+03 +100L2 80.007.18E-023.25E+019.50E+021.36E+041.93E+002.05E+011.98E+021.75E+03 +100L2 97.004.22E-021.35E+013.39E+024.41E+031.12E+001.03E+019.08E+017.47E+02 +100L2 110.002.98E-027.69E+001.74E+022.11E+037.82E-016.62E+005.45E+014.23E+02 +100L2 127.002.00E-024.06E+008.20E+019.13E+025.22E-013.99E+003.03E+012.19E+02 +100L2 150.001.26E-021.96E+003.46E+013.47E+023.27E-012.24E+001.54E+011.01E+02 +100L2 175.008.28E-031.01E+001.58E+011.43E+022.13E-011.31E+008.23E+004.95E+01 +100L2 240.003.51E-032.68E-013.27E+002.42E+018.91E-024.50E-012.32E+001.15E+01 +100L2 325.001.57E-037.85E-027.66E-014.65E+003.89E-021.65E-017.07E-012.92E+00 +100L2 420.008.12E-042.90E-022.36E-011.22E+001.94E-027.22E-022.66E-019.47E-01 +100L2 530.004.53E-041.21E-028.49E-023.82E-011.03E-023.47E-021.13E-013.52E-01 +100L2 760.001.90E-043.37E-031.90E-027.03E-023.87E-031.15E-023.14E-028.17E-02 +100L21050.009.00E-051.14E-035.43E-031.73E-021.60E-034.42E-031.06E-022.39E-02 +100L21550.003.75E-053.38E-041.35E-033.68E-035.48E-041.45E-033.05E-036.01E-03 +100L3 21.872.93E+001.37E+041.16E+061.39E+072.75E+004.56E+042.52E+071.72E+09 +100L3 22.572.68E+001.17E+049.56E+051.24E+072.50E+003.92E+042.04E+071.35E+09 +100L3 23.872.28E+008.83E+036.84E+059.93E+062.11E+002.96E+041.40E+078.84E+08 +100L3 27.071.59E+004.70E+033.23E+055.49E+061.44E+001.58E+046.01E+063.42E+08 +100L3 30.871.09E+002.43E+031.48E+052.72E+069.62E-018.22E+032.50E+061.27E+08 +100L3 41.004.69E-015.84E+022.72E+045.12E+054.05E-012.00E+033.84E+051.53E+07 +100L3 47.003.11E-012.95E+021.21E+042.20E+052.67E-011.01E+031.57E+055.56E+06 +100L3 55.001.93E-011.34E+024.74E+038.14E+041.66E-014.64E+025.65E+041.75E+06 +100L3 67.001.05E-015.02E+011.47E+032.29E+049.12E-021.74E+021.59E+044.15E+05 +100L3 80.006.06E-022.08E+015.15E+027.25E+035.34E-027.21E+015.14E+031.16E+05 +100L3 97.003.32E-028.00E+001.65E+022.06E+032.99E-022.78E+011.53E+032.94E+04 +100L3 110.002.24E-024.30E+007.89E+019.04E+022.05E-021.49E+017.01E+021.22E+04 +100L3 127.001.43E-022.12E+003.40E+013.52E+021.33E-027.32E+002.90E+024.48E+03 +100L3 150.008.51E-039.39E-011.29E+011.19E+028.12E-033.22E+001.05E+021.43E+03 +100L3 175.005.27E-034.44E-015.28E+004.34E+015.13E-031.51E+004.17E+015.03E+02 +100L3 240.001.99E-039.70E-028.67E-015.66E+002.02E-033.20E-016.49E+006.23E+01 +100L3 325.007.96E-042.31E-021.59E-018.37E-018.31E-047.30E-021.14E+008.96E+00 +100L3 420.003.74E-047.08E-033.93E-021.75E-013.96E-042.12E-022.73E-011.83E+00 +100L3 530.001.92E-042.49E-031.15E-024.47E-022.04E-046.96E-037.66E-024.52E-01 +100L3 760.007.07E-055.27E-041.89E-036.12E-037.44E-051.29E-031.13E-025.61E-02 +100L31050.003.06E-051.43E-044.23E-041.18E-033.13E-053.01E-042.14E-039.34E-03 +100L31550.001.21E-053.44E-058.26E-051.95E-041.19E-055.93E-053.12E-041.18E-03 +100M1 8.198.31E-018.75E+034.57E+054.44E+063.04E+032.65E+065.41E+082.76E+10 +100M1 9.197.38E-015.35E+032.83E+054.18E+062.15E+031.51E+062.58E+081.27E+10 +100M1 11.195.86E-012.32E+031.23E+052.47E+061.19E+035.78E+057.35E+073.36E+09 +100M1 15.193.85E-016.33E+023.30E+047.79E+054.80E+021.32E+051.08E+074.17E+08 +100M1 22.192.11E-011.27E+026.15E+031.50E+051.55E+022.15E+041.06E+063.16E+07 +100M1 29.001.33E-014.05E+011.82E+034.25E+047.00E+016.11E+032.15E+055.23E+06 +100M1 44.006.14E-026.87E+002.64E+025.38E+032.04E+018.92E+021.93E+043.35E+05 +100M1 56.003.84E-022.48E+008.50E+011.56E+031.00E+013.01E+024.99E+037.12E+04 +100M1 74.002.19E-027.86E-012.29E+013.63E+024.41E+008.80E+011.09E+031.24E+04 +100M1 107.001.02E-021.86E-014.12E+005.25E+011.50E+001.83E+011.58E+021.32E+03 +100M1 155.004.71E-035.08E-027.90E-017.81E+005.17E-014.03E+002.50E+011.54E+02 +100M1 285.001.37E-038.65E-036.89E-024.20E-019.18E-023.98E-011.52E+005.93E+00 +100M1 500.004.78E-042.32E-031.07E-024.16E-021.94E-025.79E-021.53E-014.13E-01 +100M2 7.781.70E+006.66E+053.94E+083.19E+104.95E+021.03E+055.43E+065.64E+07 +100M2 8.781.51E+003.66E+051.81E+081.41E+103.45E+025.95E+043.04E+064.96E+07 +100M2 10.781.18E+001.33E+054.87E+073.52E+091.87E+022.39E+041.12E+062.55E+07 +100M2 14.787.17E-012.83E+046.70E+064.09E+087.33E+016.03E+032.40E+056.25E+06 +100M2 21.783.43E-014.26E+036.15E+052.93E+072.33E+011.16E+033.64E+048.92E+05 +100M2 29.001.86E-011.07E+031.09E+054.27E+061.00E+013.56E+029.16E+032.00E+05 +100M2 44.007.09E-021.46E+029.38E+032.70E+052.96E+006.69E+011.28E+032.20E+04 +100M2 56.003.92E-024.69E+012.34E+035.60E+041.47E+002.61E+014.17E+026.15E+03 +100M2 74.001.94E-021.29E+014.85E+029.36E+036.61E-018.99E+001.17E+021.42E+03 +100M2 107.007.41E-032.41E+006.38E+019.25E+022.32E-012.28E+002.24E+012.11E+02 +100M2 155.002.78E-034.71E-018.89E+009.70E+018.19E-025.99E-014.48E+003.23E+01 +100M2 285.005.62E-043.67E-024.16E-012.90E+001.52E-027.32E-023.57E-011.69E+00 +100M2 500.001.36E-044.15E-033.11E-021.50E-013.30E-031.17E-024.05E-021.35E-01 +100M3 6.407.26E+001.87E+061.29E+091.20E+113.02E+016.44E+064.06E+103.16E+13 +100M3 7.405.62E+009.03E+054.95E+084.26E+101.95E+013.12E+061.49E+109.12E+12 +100M3 9.403.54E+002.72E+051.04E+087.76E+099.45E+009.45E+052.86E+091.20E+12 +100M3 13.401.67E+004.60E+041.05E+076.26E+083.23E+001.61E+052.51E+086.14E+10 +100M3 20.406.18E-015.59E+037.24E+053.23E+079.06E-011.98E+041.43E+071.94E+09 +100M3 29.002.52E-019.61E+028.02E+042.77E+063.13E-013.42E+031.34E+061.15E+08 +100M3 44.008.12E-021.20E+026.14E+031.55E+058.88E-024.29E+028.39E+044.38E+06 +100M3 56.004.10E-023.59E+011.41E+032.96E+044.29E-021.29E+021.73E+046.91E+05 +100M3 74.001.82E-028.99E+002.62E+024.41E+031.86E-023.24E+012.87E+038.52E+04 +100M3 107.006.10E-031.45E+002.90E+013.64E+026.19E-035.20E+002.78E+025.75E+03 +100M3 155.002.00E-032.37E-013.28E+003.07E+012.06E-038.34E-012.84E+014.20E+02 +100M3 285.003.22E-041.27E-029.99E-025.89E-013.46E-044.21E-027.73E-017.04E+00 +100M3 500.006.31E-059.55E-044.69E-031.91E-026.88E-052.78E-033.31E-022.09E-01 +100M4 5.751.80E+015.49E+041.02E+096.36E+129.14E+002.20E+056.37E+082.08E+11 +100M4 6.751.12E+012.45E+043.33E+081.57E+125.47E+009.87E+042.16E+086.25E+10 +100M4 8.755.01E+006.61E+035.40E+071.65E+112.37E+002.69E+043.80E+078.93E+09 +100M4 12.751.47E+009.96E+023.85E+066.48E+096.95E-014.07E+033.13E+065.37E+08 +100M4 19.753.29E-011.11E+021.80E+051.57E+081.64E-014.54E+021.80E+052.11E+07 +100M4 29.008.32E-021.62E+011.22E+046.30E+064.51E-026.61E+011.52E+041.27E+06 +100M4 44.001.77E-022.02E+006.72E+022.02E+051.09E-028.18E+001.10E+036.31E+04 +100M4 56.007.09E-036.05E-011.27E+022.83E+044.72E-032.44E+002.44E+021.13E+04 +100M4 74.002.42E-031.51E-011.87E+012.99E+031.78E-036.08E-014.39E+011.60E+03 +100M4 107.005.74E-042.43E-021.53E+001.61E+024.82E-049.69E-024.69E+001.24E+02 +100M4 155.001.34E-043.93E-031.30E-019.12E+001.27E-041.55E-025.17E-019.97E+00 +100M4 285.001.24E-052.09E-042.68E-039.64E-021.38E-057.75E-041.52E-021.81E-01 +100M4 500.001.44E-061.52E-059.72E-051.85E-031.72E-065.07E-056.55E-045.28E-03 +100M5 5.492.81E+014.01E+042.75E+091.22E+135.10E+008.72E+034.01E+097.96E+13 +100M5 6.491.68E+011.70E+048.50E+082.81E+122.98E+003.78E+031.24E+091.78E+13 +100M5 8.497.19E+004.30E+031.29E+082.69E+111.25E+009.87E+021.89E+081.62E+12 +100M5 12.491.99E+006.01E+028.52E+069.45E+093.57E-011.44E+021.27E+075.26E+10 +100M5 19.494.20E-016.27E+013.72E+052.07E+088.25E-021.57E+015.65E+051.03E+09 +100M5 29.009.77E-028.32E+002.26E+047.08E+062.19E-022.17E+003.51E+043.18E+07 +100M5 44.002.01E-029.97E-011.20E+032.14E+055.35E-032.78E-011.91E+038.61E+05 +100M5 56.007.86E-032.91E-012.19E+022.87E+042.34E-038.53E-023.55E+021.09E+05 +100M5 74.002.62E-037.01E-023.08E+012.86E+038.96E-042.20E-025.08E+011.03E+04 +100M5 107.006.04E-041.07E-022.33E+001.40E+022.48E-043.76E-033.90E+004.73E+02 +100M5 155.001.38E-041.63E-031.76E-016.94E+006.74E-056.61E-042.98E-012.27E+01 +100M5 285.001.28E-058.14E-052.69E-035.49E-027.94E-064.22E-054.45E-031.78E-01 +100M5 500.001.63E-066.11E-066.62E-057.34E-041.16E-063.89E-069.90E-052.39E-03 +100N+ 50.006.47E-025.99E+013.65E+031.75E+056.28E+003.25E+022.18E+041.11E+06 +100N+ 70.002.72E-021.19E+014.88E+021.46E+042.33E+006.94E+012.63E+038.43E+04 +100N+ 100.001.10E-022.26E+006.26E+011.20E+038.29E-011.43E+013.08E+026.17E+03 +100N+ 150.003.97E-033.56E-016.59E+008.23E+012.57E-012.56E+003.05E+013.69E+02 +100N+ 200.001.96E-031.01E-011.43E+001.36E+011.13E-017.98E-016.51E+005.64E+01 +100N+ 500.002.58E-042.95E-031.88E-028.73E-028.79E-032.86E-029.23E-023.20E-01 +101K 146.631.74E-011.02E-012.08E-028.22E-041.42E+014.41E+013.04E+015.08E+00 +101K 147.331.72E-011.04E-012.41E-021.58E-031.40E+014.33E+013.06E+015.84E+00 +101K 148.631.69E-011.07E-013.04E-023.52E-031.37E+014.22E+013.12E+017.29E+00 +101K 151.831.61E-011.15E-014.67E-021.12E-021.29E+013.94E+013.22E+011.08E+01 +101K 155.631.53E-011.22E-016.64E-022.56E-021.20E+013.64E+013.28E+011.47E+01 +101K 160.001.44E-011.28E-018.87E-024.81E-021.11E+013.34E+013.30E+011.87E+01 +101K 166.001.33E-011.34E-011.18E-018.70E-029.98E+002.97E+013.25E+012.32E+01 +101K 174.001.20E-011.38E-011.51E-011.47E-018.74E+002.55E+013.11E+012.74E+01 +101K 186.001.04E-011.39E-011.91E-012.39E-017.24E+002.07E+012.81E+013.07E+01 +101K 199.009.02E-021.36E-012.19E-013.27E-015.98E+001.67E+012.47E+013.12E+01 +101K 216.007.57E-021.29E-012.38E-014.12E-014.75E+001.28E+012.05E+012.93E+01 +101K 229.006.68E-021.22E-012.43E-014.53E-014.03E+001.07E+011.77E+012.70E+01 +101K 246.005.75E-021.14E-012.42E-014.82E-013.30E+008.51E+001.46E+012.37E+01 +101K 269.004.77E-021.02E-012.32E-014.90E-012.57E+006.43E+001.14E+011.94E+01 +101K 295.003.95E-029.05E-022.15E-014.72E-011.99E+004.82E+008.70E+001.53E+01 +101K 360.002.65E-026.80E-021.69E-013.85E-011.15E+002.62E+004.77E+008.65E+00 +101K 445.001.77E-024.91E-021.23E-012.77E-016.42E-011.39E+002.48E+004.46E+00 +101K 540.001.24E-023.61E-028.91E-021.95E-013.79E-017.88E-011.37E+002.40E+00 +101K 650.008.90E-032.68E-026.44E-021.35E-012.30E-014.66E-017.87E-011.33E+00 +101K 880.005.30E-031.63E-023.73E-027.32E-021.02E-012.02E-013.26E-015.18E-01 +101K 1150.003.40E-031.04E-022.29E-024.23E-024.96E-029.98E-021.55E-012.34E-01 +101K 1400.002.46E-037.48E-031.59E-022.83E-022.91E-026.01E-029.14E-021.33E-01 +101K 1650.001.89E-035.64E-031.17E-022.03E-021.86E-023.97E-025.96E-028.51E-02 +101L1 29.384.37E-011.27E+021.28E+031.42E+033.04E+022.12E+043.51E+051.45E+06 +101L1 30.084.24E-011.15E+021.27E+032.27E+032.86E+021.90E+043.10E+051.40E+06 +101L1 31.383.98E-019.66E+011.23E+033.65E+032.52E+021.56E+042.49E+051.29E+06 +101L1 34.583.45E-016.46E+011.04E+035.55E+031.89E+021.00E+041.51E+059.67E+05 +101L1 38.382.92E-014.17E+017.82E+025.81E+031.39E+026.23E+038.85E+046.44E+05 +101L1 41.002.63E-013.16E+016.33E+025.37E+031.14E+024.62E+036.30E+044.82E+05 +101L1 47.002.08E-011.77E+013.89E+023.93E+037.63E+012.50E+033.12E+042.53E+05 +101L1 55.001.58E-019.13E+002.10E+022.34E+034.80E+011.24E+031.40E+041.15E+05 +101L1 67.001.09E-014.01E+009.19E+011.07E+032.69E+015.24E+025.12E+034.05E+04 +101L1 80.007.76E-021.95E+004.27E+014.89E+021.60E+012.45E+022.10E+031.56E+04 +101L1 97.005.30E-029.23E-011.84E+012.00E+029.12E+001.09E+028.10E+025.51E+03 +101L1 110.004.11E-025.80E-011.06E+011.10E+026.33E+006.47E+014.39E+022.79E+03 +101L1 127.003.07E-023.50E-015.73E+005.55E+014.18E+003.61E+012.20E+021.29E+03 +101L1 150.002.18E-022.02E-012.84E+002.51E+012.59E+001.86E+011.01E+025.33E+02 +101L1 175.001.59E-021.26E-011.51E+001.21E+011.66E+001.02E+014.93E+012.38E+02 +101L1 240.008.40E-035.27E-024.51E-012.88E+006.79E-013.11E+001.21E+014.76E+01 +101L1 325.004.65E-032.51E-021.57E-017.92E-012.90E-011.05E+003.36E+001.09E+01 +101L1 420.002.89E-031.41E-027.02E-022.90E-011.42E-014.41E-011.21E+003.38E+00 +101L1 530.001.91E-038.66E-033.58E-021.25E-017.53E-022.07E-015.01E-011.23E+00 +101L1 760.001.03E-034.25E-031.39E-023.85E-022.83E-026.86E-021.41E-012.90E-01 +101L11050.006.10E-042.31E-036.45E-031.51E-021.18E-022.70E-024.94E-028.95E-02 +101L11550.003.29E-041.13E-032.75E-035.52E-034.12E-039.37E-031.56E-022.50E-02 +101L2 28.461.11E+004.63E+032.78E+052.25E+064.38E+019.08E+024.83E+034.69E+03 +101L2 29.161.05E+004.13E+032.43E+052.14E+064.11E+018.33E+024.82E+037.49E+03 +101L2 30.469.38E-013.34E+031.92E+051.93E+063.61E+017.12E+024.71E+031.21E+04 +101L2 33.667.34E-012.07E+031.12E+051.38E+062.69E+015.00E+024.05E+031.85E+04 +101L2 37.465.61E-011.24E+036.26E+048.77E+051.97E+013.41E+023.14E+031.96E+04 +101L2 41.004.45E-018.06E+023.83E+045.71E+051.51E+012.47E+022.42E+031.76E+04 +101L2 47.003.12E-014.22E+021.82E+042.84E+051.01E+011.51E+021.55E+031.29E+04 +101L2 55.002.06E-012.02E+027.75E+031.21E+056.43E+008.59E+018.90E+027.90E+03 +101L2 67.001.21E-018.04E+012.66E+033.99E+043.64E+004.23E+014.22E+023.79E+03 +101L2 80.007.48E-023.56E+011.03E+031.44E+042.19E+002.24E+012.11E+021.82E+03 +101L2 97.004.41E-021.48E+013.67E+024.69E+031.26E+001.13E+019.74E+017.86E+02 +101L2 110.003.12E-028.44E+001.89E+022.25E+038.86E-017.26E+005.86E+014.47E+02 +101L2 127.002.10E-024.46E+008.90E+019.77E+025.92E-014.39E+003.27E+012.32E+02 +101L2 150.001.33E-022.15E+003.76E+013.73E+023.71E-012.46E+001.66E+011.08E+02 +101L2 175.008.74E-031.11E+001.72E+011.54E+022.42E-011.45E+008.92E+005.30E+01 +101L2 240.003.73E-032.95E-013.57E+002.61E+011.01E-014.98E-012.52E+001.24E+01 +101L2 325.001.68E-038.67E-028.40E-015.05E+004.42E-021.83E-017.73E-013.17E+00 +101L2 420.008.70E-043.20E-022.60E-011.33E+002.20E-028.02E-022.92E-011.03E+00 +101L2 530.004.88E-041.34E-029.35E-024.18E-011.17E-023.86E-021.24E-013.85E-01 +101L2 760.002.05E-043.74E-032.10E-027.73E-024.41E-031.29E-023.47E-028.99E-02 +101L21050.009.75E-051.27E-036.03E-031.91E-021.82E-034.96E-031.17E-022.64E-02 +101L21550.004.11E-053.77E-041.50E-034.08E-036.23E-041.63E-033.40E-036.67E-03 +101L3 22.362.81E+001.31E+041.07E+061.25E+072.70E+004.50E+042.40E+071.60E+09 +101L3 23.062.57E+001.13E+048.87E+051.12E+072.46E+003.89E+041.96E+071.26E+09 +101L3 24.362.19E+008.59E+036.38E+058.97E+062.08E+002.96E+041.35E+078.33E+08 +101L3 27.561.54E+004.62E+033.07E+055.03E+061.43E+001.60E+045.91E+063.29E+08 +101L3 31.361.06E+002.41E+031.42E+052.53E+069.63E-018.40E+032.50E+061.24E+08 +101L3 41.004.81E-016.29E+022.87E+045.26E+054.26E-012.21E+034.25E+051.68E+07 +101L3 47.003.19E-013.17E+021.28E+042.27E+052.81E-011.12E+031.74E+056.10E+06 +101L3 55.001.98E-011.45E+025.01E+038.43E+041.74E-015.12E+026.25E+041.92E+06 +101L3 67.001.08E-015.40E+011.55E+032.38E+049.59E-021.92E+021.76E+044.56E+05 +101L3 80.006.24E-022.24E+015.44E+027.55E+035.61E-027.97E+015.68E+031.27E+05 +101L3 97.003.43E-028.61E+001.75E+022.15E+033.14E-023.06E+011.69E+033.23E+04 +101L3 110.002.31E-024.63E+008.34E+019.43E+022.15E-021.64E+017.73E+021.33E+04 +101L3 127.001.48E-022.28E+003.60E+013.68E+021.40E-028.08E+003.19E+024.90E+03 +101L3 150.008.80E-031.01E+001.36E+011.24E+028.53E-033.55E+001.16E+021.56E+03 +101L3 175.005.46E-034.77E-015.59E+004.55E+015.39E-031.66E+004.59E+015.51E+02 +101L3 240.002.06E-031.04E-019.19E-015.94E+002.12E-033.53E-017.13E+006.82E+01 +101L3 325.008.27E-042.48E-021.68E-018.81E-018.73E-048.04E-021.25E+009.79E+00 +101L3 420.003.89E-047.58E-034.16E-021.85E-014.15E-042.33E-022.99E-012.00E+00 +101L3 530.002.00E-042.66E-031.22E-024.72E-022.13E-047.64E-038.40E-024.94E-01 +101L3 760.007.37E-055.61E-042.01E-036.48E-037.79E-051.41E-031.24E-026.13E-02 +101L31050.003.18E-051.52E-044.48E-041.26E-033.27E-053.27E-042.35E-031.02E-02 +101L31550.001.26E-053.62E-058.73E-052.07E-041.24E-056.40E-053.40E-041.28E-03 +101M1 8.427.83E-018.60E+034.39E+054.09E+063.12E+032.58E+065.05E+082.49E+10 +101M1 9.426.98E-015.33E+032.75E+053.91E+062.23E+031.49E+062.45E+081.17E+10 +101M1 11.425.57E-012.35E+031.22E+052.37E+061.25E+035.83E+057.19E+073.19E+09 +101M1 15.423.70E-016.57E+023.34E+047.69E+055.11E+021.37E+051.10E+074.12E+08 +101M1 22.422.06E-011.35E+026.35E+031.51E+051.68E+022.28E+041.11E+063.23E+07 +101M1 30.001.24E-013.91E+011.69E+033.84E+047.06E+015.80E+031.95E+054.57E+06 +101M1 45.005.88E-027.01E+002.59E+025.14E+032.12E+018.94E+021.88E+043.18E+05 +101M1 57.003.72E-022.60E+008.57E+011.53E+031.06E+013.08E+024.99E+036.97E+04 +101M1 75.002.15E-028.43E-012.37E+013.67E+024.73E+009.20E+011.12E+031.25E+04 +101M1 108.001.01E-022.03E-014.38E+005.46E+011.63E+001.94E+011.66E+021.37E+03 +101M1 155.004.80E-035.70E-028.78E-018.57E+005.75E-014.45E+002.74E+011.69E+02 +101M1 285.001.41E-039.51E-037.64E-024.63E-011.02E-014.39E-011.66E+006.46E+00 +101M1 510.004.79E-042.41E-031.11E-024.23E-022.04E-025.97E-021.55E-014.12E-01 +101M2 8.001.58E+006.35E+053.60E+082.81E+105.17E+021.00E+055.10E+065.07E+07 +101M2 9.001.42E+003.55E+051.69E+081.27E+103.64E+025.91E+042.90E+064.53E+07 +101M2 11.001.12E+001.32E+054.68E+073.27E+092.00E+022.42E+041.10E+062.39E+07 +101M2 15.006.94E-012.88E+046.67E+063.96E+087.97E+016.26E+032.42E+056.08E+06 +101M2 22.003.39E-014.45E+036.31E+052.95E+072.57E+011.23E+033.76E+048.98E+05 +101M2 30.001.76E-019.96E+029.75E+043.67E+061.03E+013.43E+028.47E+031.78E+05 +101M2 45.006.90E-021.44E+028.99E+032.51E+053.15E+006.77E+011.25E+032.10E+04 +101M2 57.003.88E-024.75E+012.31E+035.40E+041.59E+002.69E+014.18E+026.02E+03 +101M2 75.001.94E-021.33E+014.91E+029.30E+037.24E-019.45E+001.20E+021.43E+03 +101M2 108.007.57E-032.55E+006.63E+019.47E+022.57E-012.44E+002.35E+012.17E+02 +101M2 155.002.93E-035.20E-019.74E+001.06E+029.32E-026.63E-014.90E+003.51E+01 +101M2 285.006.00E-044.07E-024.57E-013.17E+001.73E-028.14E-023.93E-011.84E+00 +101M2 510.001.40E-044.29E-033.16E-021.49E-013.56E-031.23E-024.17E-021.36E-01 +101M3 6.556.97E+001.81E+061.19E+091.07E+112.98E+016.39E+063.88E+102.94E+13 +101M3 7.555.42E+008.85E+054.67E+083.90E+101.94E+013.14E+061.45E+108.70E+12 +101M3 9.553.45E+002.72E+051.00E+087.31E+099.51E+009.71E+052.87E+091.18E+12 +101M3 13.551.64E+004.71E+041.05E+076.10E+083.30E+001.69E+052.60E+086.30E+10 +101M3 20.556.16E-015.84E+037.39E+053.23E+079.35E-012.12E+041.52E+072.05E+09 +101M3 30.002.35E-018.78E+026.93E+042.30E+062.98E-013.21E+031.19E+069.83E+07 +101M3 45.007.81E-021.16E+025.70E+031.39E+058.75E-024.26E+028.07E+044.10E+06 +101M3 57.004.00E-023.56E+011.35E+032.75E+044.29E-021.32E+021.72E+046.71E+05 +101M3 75.001.80E-029.10E+002.58E+024.23E+031.89E-023.36E+012.93E+038.55E+04 +101M3 108.006.13E-031.50E+002.92E+013.60E+026.35E-035.52E+002.92E+025.95E+03 +101M3 155.002.07E-032.56E-013.49E+003.23E+012.18E-039.25E-013.15E+014.64E+02 +101M3 285.003.34E-041.37E-021.06E-016.23E-013.65E-044.66E-028.55E-017.76E+00 +101M3 510.006.24E-059.40E-044.51E-031.81E-026.85E-052.79E-033.28E-022.04E-01 +101M4 5.891.73E+015.32E+049.45E+085.73E+128.99E+002.20E+056.08E+081.93E+11 +101M4 6.891.08E+012.41E+043.14E+081.46E+125.44E+001.00E+052.11E+085.95E+10 +101M4 8.894.91E+006.67E+035.26E+071.59E+112.39E+002.79E+043.83E+078.79E+09 +101M4 12.891.47E+001.03E+033.89E+066.53E+097.13E-014.34E+033.26E+065.48E+08 +101M4 19.893.35E-011.17E+021.86E+051.64E+081.70E-014.92E+021.92E+052.22E+07 +101M4 30.007.69E-021.49E+011.05E+045.23E+064.29E-026.26E+011.37E+041.10E+06 +101M4 45.001.71E-021.97E+006.26E+021.84E+051.07E-028.21E+001.06E+035.93E+04 +101M4 57.006.98E-036.07E-011.22E+022.69E+044.75E-032.51E+002.43E+021.11E+04 +101M4 75.002.43E-031.55E-011.85E+012.96E+031.82E-036.39E-014.49E+011.60E+03 +101M4 108.005.89E-042.54E-021.56E+001.65E+025.00E-041.04E-014.93E+001.28E+02 +101M4 155.001.43E-044.32E-031.42E-011.00E+011.37E-041.74E-025.75E-011.10E+01 +101M4 285.001.32E-052.30E-042.92E-031.06E-011.49E-058.71E-041.69E-022.00E-01 +101M4 510.001.46E-061.52E-059.50E-051.78E-031.73E-065.17E-056.56E-045.21E-03 +101M5 5.612.69E+013.76E+042.59E+091.11E+135.00E+008.37E+033.86E+097.41E+13 +101M5 6.611.63E+011.62E+048.18E+082.63E+122.95E+003.69E+031.22E+091.71E+13 +101M5 8.617.07E+004.21E+031.28E+082.61E+111.26E+009.86E+021.93E+081.62E+12 +101M5 12.611.99E+006.02E+028.74E+069.54E+093.64E-011.47E+021.33E+075.47E+10 +101M5 19.614.26E-016.39E+013.91E+052.15E+088.53E-021.63E+016.08E+051.11E+09 +101M5 30.008.98E-027.38E+001.96E+045.83E+062.07E-021.97E+003.12E+042.68E+07 +101M5 45.001.93E-029.38E-011.12E+031.94E+055.25E-032.67E-011.84E+038.03E+05 +101M5 57.007.69E-032.81E-012.13E+022.71E+042.34E-038.38E-023.53E+021.06E+05 +101M5 75.002.61E-036.92E-023.09E+012.81E+039.07E-042.21E-025.20E+011.04E+04 +101M5 108.006.14E-041.08E-022.40E+001.42E+022.55E-043.86E-034.11E+004.94E+02 +101M5 155.001.46E-041.73E-031.94E-017.60E+007.17E-057.08E-043.34E-012.56E+01 +101M5 285.001.36E-058.66E-052.95E-036.01E-028.45E-064.51E-054.98E-031.99E-01 +101M5 510.001.62E-065.98E-066.38E-056.92E-041.16E-063.84E-069.67E-052.31E-03 +102K 150.331.66E-019.75E-021.99E-027.69E-041.46E+014.31E+012.87E+014.65E+00 +102K 151.031.64E-019.91E-022.29E-021.47E-031.44E+014.24E+012.89E+015.33E+00 +102K 152.331.61E-011.02E-012.89E-023.24E-031.40E+014.13E+012.95E+016.63E+00 +102K 155.531.54E-011.09E-014.41E-021.02E-021.32E+013.87E+013.04E+019.77E+00 +102K 159.331.46E-011.16E-016.26E-022.33E-021.23E+013.58E+013.10E+011.33E+01 +102K 163.001.39E-011.21E-018.03E-024.02E-021.16E+013.33E+013.12E+011.64E+01 +102K 169.001.29E-011.27E-011.08E-017.50E-021.04E+012.97E+013.09E+012.07E+01 +102K 177.001.17E-011.32E-011.41E-011.30E-019.16E+002.57E+012.98E+012.48E+01 +102K 189.001.02E-011.34E-011.80E-012.16E-017.61E+002.09E+012.72E+012.82E+01 +102K 202.008.84E-021.32E-012.09E-013.01E-016.31E+001.69E+012.40E+012.90E+01 +102K 219.007.45E-021.26E-012.30E-013.85E-015.02E+001.31E+012.01E+012.77E+01 +102K 232.006.59E-021.21E-012.36E-014.28E-014.27E+001.09E+011.75E+012.57E+01 +102K 249.005.69E-021.13E-012.37E-014.61E-013.50E+008.75E+001.45E+012.28E+01 +102K 272.004.75E-021.02E-012.29E-014.73E-012.74E+006.64E+001.14E+011.88E+01 +102K 300.003.89E-029.01E-022.12E-014.59E-012.09E+004.90E+008.60E+001.48E+01 +102K 365.002.64E-026.86E-021.70E-013.80E-011.21E+002.69E+004.78E+008.48E+00 +102K 450.001.77E-025.01E-021.25E-012.78E-016.84E-011.44E+002.53E+004.45E+00 +102K 540.001.27E-023.77E-029.28E-022.01E-014.16E-018.48E-011.45E+002.50E+00 +102K 650.009.19E-032.81E-026.74E-021.41E-012.52E-015.01E-018.35E-011.39E+00 +102K 880.005.49E-031.72E-023.93E-027.66E-021.11E-012.18E-013.47E-015.46E-01 +102K 1150.003.53E-031.10E-022.42E-024.45E-025.42E-021.08E-011.65E-012.48E-01 +102K 1400.002.56E-037.90E-031.68E-022.99E-023.18E-026.50E-029.78E-021.42E-01 +102K 1650.001.96E-035.96E-031.24E-022.15E-022.03E-024.29E-026.38E-029.06E-02 +102L1 30.224.13E-011.23E+021.17E+031.25E+033.15E+022.06E+043.26E+051.30E+06 +102L1 30.924.00E-011.12E+021.17E+031.99E+032.94E+021.86E+042.90E+051.26E+06 +102L1 32.223.76E-019.43E+011.14E+033.21E+032.60E+021.53E+042.34E+051.17E+06 +102L1 35.423.27E-016.39E+019.72E+024.95E+031.97E+029.93E+031.44E+058.85E+05 +102L1 39.222.79E-014.19E+017.43E+025.26E+031.45E+026.24E+038.56E+045.98E+05 +102L1 42.002.49E-013.14E+015.99E+024.89E+031.19E+024.58E+036.02E+044.45E+05 +102L1 48.001.99E-011.80E+013.75E+023.64E+038.00E+012.51E+033.03E+042.38E+05 +102L1 56.001.52E-019.43E+002.06E+022.21E+035.08E+011.27E+031.38E+041.10E+05 +102L1 68.001.06E-014.23E+009.24E+011.04E+032.87E+015.42E+025.16E+033.98E+04 +102L1 81.007.60E-022.09E+004.37E+014.85E+021.72E+012.56E+022.15E+031.56E+04 +102L1 98.005.22E-021.00E+001.92E+012.03E+029.87E+001.15E+028.38E+025.58E+03 +102L1 111.004.07E-026.31E-011.12E+011.13E+026.88E+006.87E+014.57E+022.85E+03 +102L1 128.003.05E-023.82E-016.08E+005.74E+014.55E+003.85E+012.31E+021.33E+03 +102L1 151.002.18E-022.21E-013.04E+002.63E+012.83E+001.99E+011.06E+025.54E+02 +102L1 180.001.53E-021.29E-011.49E+001.15E+011.71E+001.01E+014.73E+012.21E+02 +102L1 245.008.26E-035.49E-024.61E-012.86E+007.13E-013.17E+001.20E+014.64E+01 +102L1 330.004.65E-032.64E-021.64E-018.13E-013.09E-011.10E+003.44E+001.10E+01 +102L1 420.002.98E-031.53E-027.68E-023.16E-011.58E-014.84E-011.31E+003.66E+00 +102L1 530.001.98E-039.36E-033.90E-021.36E-018.37E-022.27E-015.45E-011.33E+00 +102L1 760.001.08E-034.57E-031.51E-024.18E-023.14E-027.52E-021.53E-013.15E-01 +102L11050.006.39E-042.48E-036.98E-031.64E-021.31E-022.96E-025.39E-029.71E-02 +102L11550.003.46E-041.22E-032.96E-035.97E-034.55E-031.03E-021.70E-022.72E-02 +102L2 29.281.05E+004.43E+032.52E+051.95E+064.60E+018.85E+024.47E+034.16E+03 +102L2 29.989.96E-013.95E+032.22E+051.88E+064.30E+018.14E+024.50E+036.65E+03 +102L2 31.288.97E-013.21E+031.76E+051.71E+063.79E+017.00E+024.41E+031.07E+04 +102L2 34.487.07E-012.02E+031.05E+051.24E+062.85E+014.96E+023.83E+031.66E+04 +102L2 38.285.44E-011.22E+035.94E+047.99E+052.10E+013.42E+023.00E+031.78E+04 +102L2 42.004.30E-017.87E+023.59E+045.16E+051.60E+012.46E+022.31E+031.62E+04 +102L2 48.003.04E-014.19E+021.74E+042.62E+051.08E+011.52E+021.51E+031.20E+04 +102L2 56.002.03E-012.03E+027.56E+031.14E+056.93E+008.77E+018.75E+027.51E+03 +102L2 68.001.21E-018.23E+012.65E+033.85E+043.96E+004.38E+014.23E+023.68E+03 +102L2 81.007.53E-023.69E+011.04E+031.42E+042.40E+002.35E+012.14E+021.80E+03 +102L2 98.004.48E-021.55E+013.76E+024.70E+031.40E+001.20E+011.00E+027.90E+02 +102L2 111.003.19E-028.90E+001.95E+022.28E+039.83E-017.72E+006.07E+014.54E+02 +102L2 128.002.16E-024.74E+009.28E+019.99E+026.58E-014.69E+003.42E+012.38E+02 +102L2 151.001.38E-022.30E+003.96E+013.86E+024.15E-012.65E+001.75E+011.12E+02 +102L2 180.008.55E-031.08E+001.62E+011.42E+022.55E-011.45E+008.65E+004.99E+01 +102L2 245.003.75E-032.99E-013.53E+002.53E+011.09E-015.14E-012.54E+001.22E+01 +102L2 330.001.72E-039.02E-028.58E-015.07E+004.83E-021.93E-017.99E-013.21E+00 +102L2 420.009.32E-043.55E-022.85E-011.45E+002.51E-028.93E-023.21E-011.13E+00 +102L2 530.005.25E-041.49E-021.03E-014.58E-011.34E-024.31E-021.37E-014.22E-01 +102L2 760.002.22E-044.16E-032.32E-028.50E-025.03E-031.44E-023.85E-029.89E-02 +102L21050.001.06E-041.42E-036.69E-032.11E-022.08E-035.56E-031.31E-022.92E-02 +102L21550.004.48E-054.21E-041.68E-034.53E-037.11E-041.84E-033.80E-037.41E-03 +102L3 22.852.68E+001.28E+049.86E+051.12E+072.66E+004.50E+042.30E+071.49E+09 +102L3 23.552.46E+001.10E+048.24E+051.01E+072.43E+003.87E+041.88E+071.18E+09 +102L3 24.852.11E+008.36E+035.97E+058.12E+062.05E+002.96E+041.31E+077.86E+08 +102L3 28.051.50E+004.55E+032.91E+054.61E+061.42E+001.62E+045.82E+063.16E+08 +102L3 31.851.04E+002.40E+031.36E+052.35E+069.65E-018.59E+032.50E+061.21E+08 +102L3 42.004.58E-016.00E+022.63E+044.67E+054.15E-012.17E+034.01E+051.54E+07 +102L3 48.003.07E-013.08E+021.19E+042.05E+052.77E-011.12E+031.67E+055.73E+06 +102L3 56.001.92E-011.42E+024.75E+037.78E+041.73E-015.18E+026.15E+041.85E+06 +102L3 68.001.06E-015.40E+011.50E+032.25E+049.63E-021.97E+021.76E+044.49E+05 +102L3 81.006.18E-022.26E+015.34E+027.24E+035.68E-028.28E+015.79E+031.28E+05 +102L3 98.003.42E-028.81E+001.74E+022.09E+033.20E-023.22E+011.75E+033.29E+04 +102L3 111.002.32E-024.76E+008.36E+019.27E+022.20E-021.74E+018.06E+021.37E+04 +102L3 128.001.49E-022.36E+003.63E+013.65E+021.44E-028.59E+003.35E+025.09E+03 +102L3 151.008.91E-031.05E+001.39E+011.24E+028.78E-033.80E+001.23E+021.64E+03 +102L3 180.005.17E-034.48E-015.03E+003.96E+015.21E-031.60E+004.27E+014.99E+02 +102L3 245.002.01E-031.01E-018.66E-015.47E+002.10E-033.52E-016.96E+006.52E+01 +102L3 330.008.22E-042.48E-021.64E-018.42E-018.76E-048.23E-021.26E+009.72E+00 +102L3 420.004.05E-048.14E-034.41E-021.94E-014.36E-042.56E-023.28E-012.19E+00 +102L3 530.002.08E-042.85E-031.29E-024.98E-022.24E-048.39E-039.21E-025.40E-01 +102L3 760.007.71E-055.98E-042.13E-036.85E-038.15E-051.54E-031.36E-026.69E-02 +102L31050.003.31E-051.61E-044.75E-041.33E-033.42E-053.56E-042.57E-031.11E-02 +102L31550.001.31E-053.81E-059.23E-052.20E-041.29E-056.92E-053.71E-041.40E-03 +102M1 8.667.38E-018.47E+034.22E+053.77E+063.21E+032.51E+064.72E+082.24E+10 +102M1 9.666.59E-015.31E+032.68E+053.66E+062.31E+031.47E+062.34E+081.08E+10 +102M1 11.665.30E-012.38E+031.21E+052.27E+061.32E+035.89E+057.05E+073.03E+09 +102M1 15.663.55E-016.83E+023.38E+047.59E+055.47E+021.41E+051.11E+074.07E+08 +102M1 22.662.00E-011.43E+026.56E+031.53E+051.82E+022.42E+041.16E+063.31E+07 +102M1 30.001.24E-014.36E+011.84E+034.09E+047.90E+016.45E+032.17E+055.02E+06 +102M1 45.005.88E-027.88E+002.83E+025.52E+032.38E+019.94E+022.08E+043.49E+05 +102M1 57.003.73E-022.93E+009.39E+011.65E+031.18E+013.42E+025.51E+037.64E+04 +102M1 75.002.16E-029.54E-012.61E+013.98E+025.28E+001.02E+021.24E+031.37E+04 +102M1 108.001.03E-022.30E-014.85E+005.96E+011.82E+002.15E+011.83E+021.49E+03 +102M1 155.004.89E-036.41E-029.77E-019.41E+006.43E-014.92E+003.01E+011.84E+02 +102M1 285.001.44E-031.05E-028.47E-025.11E-011.14E-014.85E-011.82E+007.06E+00 +102M1 510.004.97E-042.62E-031.22E-024.65E-022.27E-026.58E-021.70E-014.50E-01 +102M2 8.231.48E+006.06E+053.29E+082.47E+105.41E+029.83E+044.79E+064.56E+07 +102M2 9.231.34E+003.44E+051.57E+081.15E+103.84E+025.87E+042.77E+064.13E+07 +102M2 11.231.06E+001.31E+054.50E+073.05E+092.14E+022.46E+041.07E+062.24E+07 +102M2 15.236.72E-012.94E+046.63E+063.84E+088.68E+016.51E+032.44E+055.92E+06 +102M2 22.233.34E-014.65E+036.47E+052.96E+072.83E+011.31E+033.88E+049.04E+05 +102M2 30.001.78E-011.10E+031.06E+053.95E+061.17E+013.80E+029.21E+031.90E+05 +102M2 45.007.08E-021.59E+029.81E+032.71E+053.60E+007.48E+011.36E+032.25E+04 +102M2 57.004.00E-025.23E+012.52E+035.83E+041.81E+002.98E+014.55E+026.48E+03 +102M2 75.002.02E-021.47E+015.37E+021.01E+048.25E-011.04E+011.30E+021.54E+03 +102M2 108.007.92E-032.81E+007.25E+011.03E+032.93E-012.70E+002.56E+012.35E+02 +102M2 155.003.09E-035.75E-011.07E+011.15E+021.06E-017.36E-015.36E+003.80E+01 +102M2 285.006.39E-044.51E-025.03E-013.47E+001.98E-029.06E-024.33E-012.02E+00 +102M2 510.001.51E-044.77E-033.49E-021.64E-014.07E-031.38E-024.61E-021.50E-01 +102M3 6.706.69E+001.75E+061.10E+099.60E+102.93E+016.35E+063.72E+102.73E+13 +102M3 7.705.23E+008.69E+054.41E+083.57E+101.92E+013.17E+061.42E+108.30E+12 +102M3 9.703.36E+002.73E+059.72E+076.89E+099.56E+001.00E+062.89E+091.17E+12 +102M3 13.701.62E+004.83E+041.04E+075.93E+083.36E+001.78E+052.70E+086.47E+10 +102M3 20.706.14E-016.10E+037.54E+053.23E+079.64E-012.27E+041.62E+072.17E+09 +102M3 30.002.39E-019.51E+027.39E+042.42E+063.14E-013.57E+031.33E+061.10E+08 +102M3 45.007.99E-021.25E+026.07E+031.46E+059.23E-024.74E+028.99E+044.57E+06 +102M3 57.004.11E-023.86E+011.44E+032.89E+044.53E-021.46E+021.91E+047.46E+05 +102M3 75.001.86E-029.86E+002.74E+024.45E+031.99E-023.74E+013.25E+039.49E+04 +102M3 108.006.32E-031.63E+003.11E+013.79E+026.70E-036.13E+003.24E+026.59E+03 +102M3 155.002.14E-032.77E-013.72E+003.41E+012.29E-031.03E+003.49E+015.12E+02 +102M3 285.003.49E-041.48E-021.13E-016.58E-013.85E-045.16E-029.45E-018.55E+00 +102M3 510.006.54E-051.01E-034.81E-031.92E-027.21E-053.09E-033.61E-022.25E-01 +102M4 6.021.65E+015.15E+048.71E+085.17E+128.83E+002.20E+055.81E+081.79E+11 +102M4 7.021.04E+012.38E+042.97E+081.35E+125.40E+001.02E+052.06E+085.66E+10 +102M4 9.024.82E+006.73E+035.13E+071.54E+112.41E+002.90E+043.85E+078.65E+09 +102M4 13.021.47E+001.07E+033.92E+066.56E+097.31E-014.62E+033.39E+065.60E+08 +102M4 20.023.40E-011.23E+021.93E+051.70E+081.77E-015.34E+022.04E+052.33E+07 +102M4 30.008.05E-021.63E+011.14E+045.75E+064.57E-027.04E+011.52E+041.21E+06 +102M4 45.001.80E-022.16E+006.81E+022.03E+051.15E-029.23E+001.18E+036.55E+04 +102M4 57.007.35E-036.64E-011.33E+022.96E+045.07E-032.83E+002.70E+021.22E+04 +102M4 75.002.56E-031.70E-012.02E+013.25E+031.95E-037.18E-014.99E+011.77E+03 +102M4 108.006.23E-042.79E-021.70E+001.81E+025.37E-041.17E-015.48E+001.42E+02 +102M4 155.001.52E-044.74E-031.54E-011.10E+011.47E-041.95E-026.40E-011.22E+01 +102M4 285.001.41E-052.52E-043.18E-031.17E-011.60E-059.79E-041.88E-022.22E-01 +102M4 510.001.53E-061.67E-051.04E-041.97E-031.87E-065.80E-057.32E-045.78E-03 +102M5 5.732.58E+013.54E+042.43E+091.00E+134.90E+008.04E+033.72E+096.91E+13 +102M5 6.731.58E+011.55E+047.88E+082.45E+122.92E+003.60E+031.21E+091.64E+13 +102M5 8.736.94E+004.11E+031.27E+082.53E+111.26E+009.84E+021.96E+081.62E+12 +102M5 12.731.99E+006.02E+028.97E+069.63E+093.72E-011.50E+021.40E+075.69E+10 +102M5 19.734.33E-016.51E+014.11E+052.24E+088.81E-021.69E+016.55E+051.19E+09 +102M5 30.009.36E-027.77E+002.15E+046.39E+062.18E-022.11E+003.51E+043.04E+07 +102M5 45.002.02E-029.89E-011.24E+032.12E+055.55E-032.86E-012.07E+039.09E+05 +102M5 57.008.07E-032.96E-012.35E+022.97E+042.47E-038.98E-023.97E+021.20E+05 +102M5 75.002.74E-037.31E-023.41E+013.07E+039.61E-042.37E-025.85E+011.17E+04 +102M5 108.006.48E-041.14E-022.64E+001.55E+022.70E-044.13E-034.62E+005.57E+02 +102M5 155.001.55E-041.84E-032.13E-018.31E+007.62E-057.57E-043.75E-012.88E+01 +102M5 285.001.45E-059.20E-053.24E-036.58E-028.99E-064.82E-055.59E-032.24E-01 +102M5 510.001.68E-066.38E-066.98E-057.57E-041.23E-064.10E-061.08E-042.58E-03 +103K 154.101.58E-019.32E-021.90E-027.21E-041.49E+014.21E+012.70E+014.26E+00 +103K 154.801.56E-019.47E-022.19E-021.36E-031.47E+014.15E+012.73E+014.86E+00 +103K 156.101.54E-019.78E-022.75E-022.98E-031.44E+014.04E+012.78E+016.03E+00 +103K 159.301.47E-011.04E-014.18E-029.36E-031.36E+013.80E+012.87E+018.85E+00 +103K 163.101.40E-011.11E-015.92E-022.12E-021.27E+013.52E+012.93E+011.20E+01 +103K 167.001.33E-011.16E-017.70E-023.78E-021.18E+013.27E+012.96E+011.50E+01 +103K 173.001.24E-011.22E-011.03E-016.99E-021.07E+012.93E+012.94E+011.89E+01 +103K 181.001.12E-011.27E-011.34E-011.21E-019.44E+002.54E+012.83E+012.28E+01 +103K 193.009.83E-021.30E-011.72E-012.02E-017.87E+002.08E+012.60E+012.60E+01 +103K 206.008.57E-021.29E-012.01E-012.82E-016.55E+001.69E+012.32E+012.70E+01 +103K 223.007.26E-021.24E-012.23E-013.64E-015.24E+001.32E+011.95E+012.59E+01 +103K 236.006.45E-021.19E-012.30E-014.07E-014.47E+001.10E+011.71E+012.43E+01 +103K 253.005.59E-021.11E-012.32E-014.41E-013.68E+008.87E+001.43E+012.17E+01 +103K 276.004.68E-021.02E-012.26E-014.57E-012.88E+006.77E+001.13E+011.81E+01 +103K 305.003.84E-029.00E-022.10E-014.46E-012.19E+004.98E+008.50E+001.42E+01 +103K 370.002.63E-026.93E-021.70E-013.75E-011.28E+002.77E+004.80E+008.31E+00 +103K 455.001.78E-025.12E-021.27E-012.78E-017.27E-011.50E+002.57E+004.44E+00 +103K 540.001.31E-023.93E-029.65E-022.07E-014.56E-019.11E-011.53E+002.60E+00 +103K 650.009.48E-032.94E-027.04E-021.46E-012.76E-015.39E-018.84E-011.45E+00 +103K 880.005.68E-031.81E-024.13E-028.01E-021.22E-012.35E-013.69E-015.75E-01 +103K 1150.003.66E-031.16E-022.55E-024.67E-025.91E-021.16E-011.76E-012.62E-01 +103K 1400.002.66E-038.35E-031.78E-023.15E-023.46E-027.01E-021.05E-011.50E-01 +103K 1650.002.04E-036.30E-031.32E-022.27E-022.21E-024.63E-026.83E-029.63E-02 +103L1 31.073.88E-011.19E+021.08E+031.10E+033.23E+022.00E+043.03E+051.16E+06 +103L1 31.773.76E-011.09E+021.09E+031.75E+033.02E+021.81E+042.71E+051.13E+06 +103L1 33.073.55E-019.22E+011.06E+032.82E+032.68E+021.50E+042.20E+051.05E+06 +103L1 36.273.10E-016.33E+019.11E+024.40E+032.04E+029.83E+031.38E+058.09E+05 +103L1 40.072.65E-014.20E+017.06E+024.76E+031.52E+026.25E+038.26E+045.55E+05 +103L1 43.002.37E-013.14E+015.69E+024.45E+031.23E+024.54E+035.76E+044.10E+05 +103L1 49.001.91E-011.82E+013.62E+023.37E+038.38E+012.53E+032.95E+042.24E+05 +103L1 57.001.46E-019.75E+002.03E+022.10E+035.36E+011.29E+031.37E+041.05E+05 +103L1 69.001.03E-014.46E+009.29E+011.01E+033.06E+015.61E+025.19E+033.90E+04 +103L1 82.007.44E-022.23E+004.47E+014.80E+021.85E+012.68E+022.19E+031.55E+04 +103L1 99.005.15E-021.08E+001.99E+012.05E+021.07E+011.21E+028.65E+025.65E+03 +103L1 112.004.03E-026.86E-011.17E+011.15E+027.45E+007.29E+014.75E+022.91E+03 +103L1 129.003.04E-024.17E-016.44E+005.93E+014.95E+004.10E+012.42E+021.37E+03 +103L1 152.002.18E-022.42E-013.25E+002.74E+013.09E+002.14E+011.12E+025.75E+02 +103L1 180.001.55E-021.43E-011.64E+001.25E+011.90E+001.11E+015.14E+012.38E+02 +103L1 245.008.44E-036.03E-025.07E-013.12E+007.92E-013.49E+001.31E+015.01E+01 +103L1 330.004.78E-032.87E-021.80E-018.86E-013.43E-011.20E+003.74E+001.19E+01 +103L1 420.003.08E-031.66E-028.39E-023.44E-011.76E-015.31E-011.43E+003.96E+00 +103L1 530.002.05E-031.01E-024.25E-021.48E-019.27E-022.49E-015.94E-011.44E+00 +103L1 760.001.12E-034.92E-031.64E-024.53E-023.47E-028.25E-021.67E-013.41E-01 +103L11050.006.68E-042.67E-037.55E-031.77E-021.44E-023.25E-025.86E-021.05E-01 +103L11550.003.63E-041.30E-033.20E-036.45E-035.00E-031.12E-021.85E-022.95E-02 +103L2 30.121.00E+004.22E+032.30E+051.71E+064.81E+018.63E+024.18E+033.71E+03 +103L2 30.829.48E-013.78E+032.03E+051.65E+064.50E+017.96E+024.20E+035.91E+03 +103L2 32.128.58E-013.10E+031.63E+051.51E+063.98E+016.88E+024.13E+039.51E+03 +103L2 35.326.81E-011.97E+039.77E+041.11E+063.01E+014.93E+023.62E+031.49E+04 +103L2 39.125.28E-011.21E+035.64E+047.27E+052.23E+013.43E+022.88E+031.63E+04 +103L2 43.004.16E-017.71E+023.38E+044.68E+051.70E+012.45E+022.21E+031.48E+04 +103L2 49.002.97E-014.16E+021.67E+042.42E+051.16E+011.54E+021.46E+031.12E+04 +103L2 57.002.00E-012.05E+027.38E+031.08E+057.49E+008.97E+018.62E+027.14E+03 +103L2 69.001.21E-018.44E+012.64E+033.73E+044.32E+004.54E+014.24E+023.57E+03 +103L2 82.007.59E-023.83E+011.05E+031.40E+042.64E+002.46E+012.17E+021.78E+03 +103L2 99.004.56E-021.63E+013.86E+024.71E+031.54E+001.27E+011.03E+027.94E+02 +103L2 112.003.26E-029.39E+002.02E+022.31E+031.09E+008.21E+006.30E+014.60E+02 +103L2 129.002.22E-025.03E+009.67E+011.02E+037.33E-015.02E+003.57E+012.44E+02 +103L2 152.001.42E-022.46E+004.16E+013.99E+024.63E-012.85E+001.85E+011.16E+02 +103L2 180.009.03E-031.19E+001.77E+011.52E+022.90E-011.60E+009.38E+005.35E+01 +103L2 245.003.98E-033.30E-013.86E+002.73E+011.24E-015.68E-012.77E+001.32E+01 +103L2 330.001.84E-039.97E-029.41E-015.51E+005.50E-022.14E-018.75E-013.49E+00 +103L2 420.009.99E-043.93E-023.14E-011.59E+002.86E-029.93E-023.53E-011.22E+00 +103L2 530.005.64E-041.65E-021.14E-015.01E-011.52E-024.80E-021.51E-014.61E-01 +103L2 760.002.40E-044.62E-032.57E-029.35E-025.73E-031.61E-024.26E-021.09E-01 +103L21050.001.15E-041.58E-037.43E-032.33E-022.37E-036.24E-031.45E-023.22E-02 +103L21550.004.91E-054.70E-041.87E-035.03E-038.09E-042.07E-034.25E-038.23E-03 +103L3 23.362.57E+001.23E+049.12E+051.00E+072.61E+004.46E+042.21E+071.38E+09 +103L3 24.062.37E+001.06E+047.65E+059.06E+062.39E+003.85E+041.81E+071.11E+09 +103L3 25.362.04E+008.14E+035.59E+057.35E+062.03E+002.96E+041.27E+077.43E+08 +103L3 28.561.45E+004.48E+032.76E+054.23E+061.41E+001.64E+045.72E+063.03E+08 +103L3 32.361.01E+002.39E+031.31E+052.19E+069.66E-018.78E+032.49E+061.19E+08 +103L3 43.004.37E-015.75E+022.41E+044.15E+054.06E-012.13E+033.80E+051.42E+07 +103L3 49.002.95E-012.99E+021.11E+041.86E+052.73E-011.11E+031.62E+055.40E+06 +103L3 57.001.87E-011.40E+024.51E+037.19E+041.72E-015.24E+026.06E+041.78E+06 +103L3 69.001.04E-015.41E+011.46E+032.12E+049.67E-022.03E+021.77E+044.43E+05 +103L3 82.006.12E-022.29E+015.24E+026.95E+035.75E-028.60E+015.92E+031.28E+05 +103L3 99.003.42E-029.02E+001.73E+022.04E+033.26E-023.38E+011.81E+033.35E+04 +103L3 112.002.33E-024.91E+008.39E+019.12E+022.25E-021.83E+018.40E+021.41E+04 +103L3 129.001.50E-022.45E+003.67E+013.62E+021.47E-029.12E+003.52E+025.28E+03 +103L3 152.009.02E-031.10E+001.41E+011.24E+029.04E-034.06E+001.30E+021.71E+03 +103L3 180.005.35E-034.82E-015.32E+004.15E+015.47E-031.76E+004.69E+015.46E+02 +103L3 245.002.08E-031.09E-019.16E-015.73E+002.20E-033.88E-017.64E+007.13E+01 +103L3 330.008.53E-042.67E-021.74E-018.85E-019.20E-049.05E-021.39E+001.06E+01 +103L3 420.004.21E-048.72E-034.68E-022.05E-014.57E-042.81E-023.60E-012.39E+00 +103L3 530.002.17E-043.05E-031.37E-025.26E-022.34E-049.21E-031.01E-015.89E-01 +103L3 760.008.04E-056.38E-042.26E-037.25E-038.53E-051.68E-031.48E-027.30E-02 +103L31050.003.45E-051.71E-045.03E-041.41E-033.57E-053.88E-042.81E-031.21E-02 +103L31550.001.36E-054.02E-059.76E-052.33E-041.34E-057.46E-054.05E-041.53E-03 +103M1 8.906.96E-018.33E+034.06E+053.48E+063.30E+032.44E+064.41E+082.02E+10 +103M1 9.906.23E-015.28E+032.60E+053.42E+062.40E+031.45E+062.22E+089.93E+09 +103M1 11.905.03E-012.42E+031.19E+052.17E+061.38E+035.93E+056.89E+072.87E+09 +103M1 15.903.41E-017.08E+023.41E+047.47E+055.83E+021.46E+051.12E+074.01E+08 +103M1 22.901.94E-011.52E+026.76E+031.54E+051.97E+022.56E+041.20E+063.37E+07 +103M1 30.001.23E-014.86E+011.99E+034.36E+048.81E+017.17E+032.40E+055.51E+06 +103M1 45.005.87E-028.83E+003.08E+025.92E+032.65E+011.10E+032.29E+043.82E+05 +103M1 57.003.74E-023.30E+001.03E+021.78E+031.32E+013.80E+026.08E+038.37E+04 +103M1 75.002.17E-021.08E+002.87E+014.31E+025.89E+001.13E+021.36E+031.49E+04 +103M1 108.001.04E-022.60E-015.37E+006.50E+012.03E+002.38E+012.01E+021.63E+03 +103M1 155.004.97E-037.20E-021.08E+001.03E+017.16E-015.44E+003.31E+012.01E+02 +103M1 285.001.48E-031.16E-029.38E-025.62E-011.27E-015.34E-012.00E+007.70E+00 +103M1 510.005.16E-042.84E-031.34E-025.10E-022.52E-027.25E-021.86E-014.90E-01 +103M2 8.471.38E+005.79E+053.00E+082.18E+105.67E+029.64E+044.50E+064.10E+07 +103M2 9.471.25E+003.34E+051.47E+081.03E+104.06E+025.84E+042.64E+063.76E+07 +103M2 11.471.01E+001.30E+054.32E+072.83E+092.30E+022.49E+041.05E+062.10E+07 +103M2 15.476.49E-012.99E+046.59E+063.72E+089.44E+016.76E+032.45E+055.76E+06 +103M2 22.473.29E-014.86E+036.63E+052.97E+073.13E+011.39E+034.01E+049.08E+05 +103M2 30.001.81E-011.20E+031.16E+054.26E+061.34E+014.20E+021.00E+042.03E+05 +103M2 45.007.27E-021.75E+021.07E+042.93E+054.10E+008.28E+011.48E+032.41E+04 +103M2 57.004.13E-025.76E+012.75E+036.30E+042.07E+003.29E+014.96E+026.97E+03 +103M2 75.002.09E-021.62E+015.86E+021.09E+049.41E-011.16E+011.42E+021.66E+03 +103M2 108.008.28E-033.11E+007.93E+011.11E+033.34E-012.99E+002.80E+012.54E+02 +103M2 155.003.25E-036.35E-011.17E+011.25E+021.21E-018.16E-015.88E+004.13E+01 +103M2 285.006.80E-045.00E-025.54E-013.79E+002.26E-021.01E-014.76E-012.20E+00 +103M2 510.001.62E-045.30E-033.86E-021.81E-014.65E-031.54E-025.11E-021.65E-01 +103M3 6.856.42E+001.69E+061.02E+098.62E+102.88E+016.31E+063.57E+102.54E+13 +103M3 7.855.05E+008.54E+054.16E+083.27E+101.91E+013.19E+061.39E+107.92E+12 +103M3 9.853.27E+002.74E+059.42E+076.49E+099.62E+001.03E+062.90E+091.15E+12 +103M3 13.851.59E+004.96E+041.04E+075.77E+083.43E+001.88E+052.80E+086.62E+10 +103M3 20.856.12E-016.37E+037.69E+053.23E+079.94E-012.43E+041.72E+072.29E+09 +103M3 30.002.43E-011.03E+037.88E+042.54E+063.31E-013.97E+031.48E+061.23E+08 +103M3 45.008.18E-021.36E+026.46E+031.54E+059.73E-025.26E+021.00E+055.08E+06 +103M3 57.004.21E-024.18E+011.53E+033.04E+044.77E-021.62E+022.13E+048.29E+05 +103M3 75.001.91E-021.07E+012.92E+024.68E+032.10E-024.15E+013.61E+031.05E+05 +103M3 108.006.53E-031.76E+003.31E+013.98E+027.06E-036.80E+003.59E+027.29E+03 +103M3 155.002.22E-033.00E-013.96E+003.59E+012.42E-031.14E+003.86E+015.65E+02 +103M3 285.003.63E-041.60E-021.21E-016.95E-014.05E-045.71E-021.04E+009.41E+00 +103M3 510.006.83E-051.09E-035.12E-032.04E-027.59E-053.41E-033.99E-022.47E-01 +103M4 6.171.58E+015.01E+048.05E+084.66E+128.69E+002.20E+055.56E+081.66E+11 +103M4 7.171.01E+012.35E+042.80E+081.26E+125.37E+001.03E+052.02E+085.39E+10 +103M4 9.174.73E+006.80E+034.99E+071.49E+112.43E+003.02E+043.88E+078.51E+09 +103M4 13.171.47E+001.10E+033.95E+066.60E+097.49E-014.91E+033.52E+065.71E+08 +103M4 20.173.45E-011.30E+021.99E+051.76E+081.84E-015.79E+022.17E+052.44E+07 +103M4 30.008.41E-021.79E+011.24E+046.32E+064.86E-027.91E+011.69E+041.34E+06 +103M4 45.001.89E-022.36E+007.40E+022.23E+051.22E-021.04E+011.31E+037.22E+04 +103M4 57.007.74E-037.28E-011.44E+023.25E+045.42E-033.18E+003.00E+021.35E+04 +103M4 75.002.71E-031.86E-012.19E+013.57E+032.08E-038.07E-015.55E+011.95E+03 +103M4 108.006.60E-043.06E-021.85E+001.99E+025.75E-041.31E-016.09E+001.56E+02 +103M4 155.001.61E-045.21E-031.68E-011.21E+011.58E-042.20E-027.11E-011.35E+01 +103M4 285.001.51E-052.77E-043.46E-031.29E-011.72E-051.10E-032.09E-022.46E-01 +103M4 510.001.65E-061.84E-051.13E-042.17E-032.01E-066.50E-058.17E-046.42E-03 +103M5 5.862.47E+013.33E+042.29E+099.13E+124.80E+007.72E+033.59E+096.45E+13 +103M5 6.861.53E+011.48E+047.59E+082.29E+122.90E+003.52E+031.19E+091.58E+13 +103M5 8.866.82E+004.02E+031.26E+082.45E+111.27E+009.81E+021.99E+081.61E+12 +103M5 12.861.99E+006.02E+029.20E+069.71E+093.79E-011.53E+021.47E+075.90E+10 +103M5 19.864.39E-016.63E+014.33E+052.33E+089.09E-021.75E+017.04E+051.27E+09 +103M5 30.009.76E-028.18E+002.37E+047.01E+062.30E-022.26E+003.94E+043.44E+07 +103M5 45.002.11E-021.04E+001.36E+032.32E+055.87E-033.06E-012.32E+031.03E+06 +103M5 57.008.45E-033.13E-012.58E+023.25E+042.62E-039.61E-024.46E+021.36E+05 +103M5 75.002.88E-037.72E-023.75E+013.36E+031.02E-032.53E-026.57E+011.32E+04 +103M5 108.006.84E-041.21E-022.91E+001.69E+022.87E-044.41E-035.19E+006.27E+02 +103M5 155.001.64E-041.95E-032.35E-019.09E+008.09E-058.09E-044.21E-013.23E+01 +103M5 285.001.54E-059.78E-053.56E-037.19E-029.55E-065.15E-056.25E-032.51E-01 +103M5 510.001.80E-066.79E-067.62E-058.28E-041.31E-064.38E-061.20E-042.89E-03 diff --git a/tests/ensdf_processing/seqhst/ref_seqhst_icctbl.dat b/tests/ensdf_processing/seqhst/ref_seqhst_icctbl.dat new file mode 100644 index 0000000000000000000000000000000000000000..0b27e3127e3392d33266aa79bfa61122e2491f06 GIT binary patch literal 572176 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 yr#iPy^q`oov^H=oi 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

    R?Q(R?x5TZL{fT04_KLgDwIJM6xLEJ2mVdm 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 V=%ZDgemwJRXS9Mn;vKTA{{u0ngRuYr literal 0 HcmV?d00001 diff --git a/tests/ensdf_processing/hsicc/ref_cards.new b/tests/ensdf_processing/hsicc/ref_cards.new new file mode 100644 index 0000000000..e3474823cf --- /dev/null +++ b/tests/ensdf_processing/hsicc/ref_cards.new @@ -0,0 +1,4 @@ +205TL G 203.74 3 100 M1+E2 +1.56 15 0.62 4 10 +205TLS G KC=0.40 4$LC=0.167$MC=0.0420 2$NC+=0.0135 1 10 +205TL G 415.6 3 0.59 8 (M1) 0.169 22 +205TLS G KC=0.139 5$LC=0.0233 7$MC=0.00542 17$NC+=0.00174 6 22 diff --git a/tests/ensdf_processing/hsicc/ref_compar.lst b/tests/ensdf_processing/hsicc/ref_compar.lst new file mode 100644 index 0000000000..1dc5dd503e --- /dev/null +++ b/tests/ensdf_processing/hsicc/ref_compar.lst @@ -0,0 +1,21 @@ +1PROGRAM H S I C C VERSION 11.13f AS OF 9-Oct-2001 + + + + + + 1: 205TL 205HG B- DECAY 71HI01 78NDS 780310 + COMPARE OLD/NEW CARDS + 10: 205TL G 203.74 3 100 M1+E2 +1.56 15 0.440 ++ OLD CARD + 10: 205TL G 203.74 3 100 M1+E2 +1.56 15 0.62 4 + 10: 205TLS G KC=0.40 4$LC=0.167$MC=0.0420 2$NC+=0.0135 1 + 10: ++ NO OLD SECOND CARD + COMPARE OLD/NEW CARDS + 22: 205TL G 415.6 3 0.59 8 (M1) 0.1691 ++ OLD CARD + 22: 205TL G 415.6 3 0.59 8 (M1) 0.169 + 22: 205TLS G KC=0.139 5$LC=0.0233 7$MC=0.00542 17$NC+=0.00174 6 + 22: ++ NO OLD SECOND CARD diff --git a/tests/ensdf_processing/hsicc/ref_hscalc.lst b/tests/ensdf_processing/hsicc/ref_hscalc.lst new file mode 100644 index 0000000000..ecaa651d4b --- /dev/null +++ b/tests/ensdf_processing/hsicc/ref_hscalc.lst @@ -0,0 +1,462 @@ +1PROGRAM H S I C C VERSION 11.13f AS OF 9-Oct-2001 + + + 1: 205TL 205HG B- DECAY 71HI01 78NDS 780310 + 1: 205TL 205HG B- DECAY 71HI01 78NDS 780310 + 2: 205HG P 0 1/2- 5.2 M 1 1538 8 + 3: 205TL N 0.022 10 1 + 4: 205TL L 0 1/2+ + 5: 205TL B 96 2 5.27115 + 6: 205TL2 B EAV= 542 4$ + 7: 205TL CB E SOME APPROXIMATE MEASUREMENTS LISTED IN 71SC35 + 8: 205TL L 203.7 3/2+ 1.46 NS 8 + 9: 205TL CL T 71SH35, 67MA45 + 10: 205TL G 203.74 3 100 M1+E2 +1.56 15 0.440 + 11: 205TL CG E FROM 72BA53 + 12: 205TL CG MR FROM COUL. EX. (73KR02) + 13: 205TL CG CC FROM 73KR02 + 14: 205TL B 3.1 13 6.5 2 + 15: 205TL2 B EAV= 460 4$ + 16: 205TL1CB IB ESTIMATED BY 71HI01 TO BE 3.7% 15 BASED ON RATIOS OF + 17: 205TL2CB IG(203.7) TO 197HG,203HG IG'S AND CC(203.7)=0.62; IB=3.1% IF CC IS + 18: 205TL3CB REDUCED TO 0.44 + 19: 205TL L 619.3 5/2+ + 20: 205TL B 0.016 7 8.6920 1U + 21: 205TL2 B EAV= 299 3$ + 22: 205TL G 415.6 3 0.59 8 (M1) 0.1691 + 23: 205TL G 618.6 7 0.090 20 + 24: 205TL CG RI(618.6)/RI(415.6) IS AP TWICE AS LARGE AS IN COUL. EX. + 25: 205TL2CG AND (N,N'G) + 26: 205TL L 1140.9 (3/2)+ + 27: 205TL B 0.0030 16 7.7424 + 28: 205TL2 B EAV= 115 3$ + 29: 205TL G 937.2 6 0.093 20 + 30: 205TL G 1141.1 15 0.045 20 + 31: 205TL L 1218.7 1/2+ + 32: 205TL B 0.007 4 7.1 3 + 33: 205TL2 B EAV= 90.0 25$ + 34: 205TL G 1014.7 8 0.031 10 + 35: 205TL G 1218.7 4 0.28 5 + 36: 205TL L 1340.3 (3/2)+ + 37: 205TL B 0.006 3 6.4723 + 38: 205TL2 B EAV= 53.4 24$ + 39: 205TL G 720.8 8 0.051 15 + 40: 205TL G 1136.8 6 0.21 5 + 41: 205TL G 1340.3 8 0.015 5 + 42: 205TL L 1433.9 (1/2,3/2) + 43: 205TL B 0.0049 25 5.6925 + 44: 205TL2 B EAV= 27.1 22$ + 45: 205TL G 1230.8 10 0.023 10 + 46: 205TL G 1433.9 5 0.20 5 + 47: + + + + + ICC (HAGER-SELTZER), Z = 81 (205TL); EG= 203.74 KEV; MULT.= M1+E2 13-Nov-2001 + + M1 E2 MIXED ICC DICC(+DMR) DICC(-DMR) + MR=+1.56 15 + + ----------- ----------- ----------- ----------- ----------- + + + K 9.702E-01 1.637E-01 3.986E-01 -2.936E-02 3.502E-02 + + L1 1.488E-01 2.207E-02 5.897E-02 -4.612E-03 5.501E-03 + L2 1.507E-02 9.125E-02 6.906E-02 2.773E-03 -3.308E-03 + L3 1.179E-03 5.468E-02 3.910E-02 1.948E-03 -2.323E-03 + + + TOTAL-L 1.650E-01 1.680E-01 1.671E-01 1.083E-04 -1.291E-04 + K/L 5.88 0.97 2.38 + K+1.33L 1.190E+00 3.872E-01 6.209E-01 -2.921E-02 3.485E-02 + + M1 3.439E-02 5.177E-03 1.369E-02 -1.063E-03 1.268E-03 + M2 3.888E-03 2.338E-02 1.771E-02 7.097E-04 -8.465E-04 + M3 3.062E-04 1.461E-02 1.044E-02 5.207E-04 -6.210E-04 + M4 9.911E-06 1.698E-04 1.232E-04 5.819E-06 -6.941E-06 + M5 6.689E-06 1.104E-04 8.019E-05 3.775E-06 -4.503E-06 + + + TOTAL-M 3.860E-02 4.345E-02 4.204E-02 1.765E-04 -2.105E-04 + M/L 0.23 0.26 0.25 + K+L+1.33M 1.187E+00 3.895E-01 6.216E-01 -2.901E-02 3.461E-02 + + + N+O+ FROM + DRAGOUN 1.243E-02 1.395E-02 1.351E-02 5.560E-05 -6.632E-05 + + + + K+L+M+NO+ 1.186E+00 3.891E-01 6.213E-01 -2.902E-02 3.461E-02 + + L=3, 4 CC's multiplied by 0.975 10, 0.975 5, respectively (Cf. 90Ne01). + COMPARE OLD/NEW CARDS + 10: 205TL G 203.74 3 100 M1+E2 +1.56 15 0.440 ++ OLD CARD + 10: 205TL G 203.74 3 100 M1+E2 +1.56 15 0.62 4 + Changing 0.16713 13 to 0.167 due to 3% uncer in theory + Changing 0.04204 21 to 0.0420 2 due to 3% uncer in theory + Changing 0.01351 7 to 0.0135 1 due to 3% uncer in theory + 10: 205TLS G KC=0.40 4$LC=0.167$MC=0.0420 2$NC+=0.0135 1 + 10: ++ NO OLD SECOND CARD + + + + ICC (HAGER-SELTZER), Z = 81 (205TL); EG= 415.6 KEV; MULT.= (M1) 13-Nov-2001 + + E1 E2 E3 E4 M1 M2 M3 M4 + ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- + + + K 1.134E-02 3.036E-02 7.722E-02 1.988E-01 1.387E-01 4.151E-01 1.002E+00 2.442E+00 + + L1 1.458E-03 4.358E-03 1.494E-02 5.580E-02 2.111E-02 7.662E-02 2.322E-01 7.191E-01 + L2 2.165E-04 4.768E-03 4.117E-02 2.385E-01 2.051E-03 1.070E-02 4.600E-02 1.869E-01 + L3 1.632E-04 1.995E-03 1.223E-02 6.093E-02 1.492E-04 3.650E-03 4.581E-02 3.296E-01 + + + TOTAL-L 1.837E-03 1.112E-02 6.835E-02 3.552E-01 2.331E-02 9.098E-02 3.240E-01 1.236E+00 + K/L 6.17 2.73 1.13 0.56 5.95 4.56 3.09 1.98 + K+1.33L 1.379E-02 4.516E-02 1.681E-01 6.713E-01 1.697E-01 5.361E-01 1.433E+00 4.086E+00 + + M1 3.280E-04 1.008E-03 3.628E-03 1.431E-02 4.854E-03 1.814E-02 5.697E-02 1.824E-01 + M2 5.410E-05 1.228E-03 1.084E-02 6.389E-02 5.278E-04 2.791E-03 1.223E-02 5.079E-02 + M3 4.225E-05 5.345E-04 3.351E-03 1.678E-02 3.919E-05 1.000E-03 1.290E-02 9.511E-02 + M4 6.565E-07 5.584E-06 4.530E-05 8.724E-04 6.872E-07 1.342E-05 2.003E-04 1.937E-03 + M5 8.151E-07 3.473E-06 3.501E-05 4.559E-04 5.560E-07 1.981E-06 3.763E-05 9.454E-04 + + + TOTAL-M 4.258E-04 2.780E-03 1.790E-02 9.631E-02 5.423E-03 2.195E-02 8.233E-02 3.312E-01 + M/L 0.23 0.25 0.26 0.27 0.23 0.24 0.25 0.27 + K+L+1.33M 1.375E-02 4.518E-02 1.694E-01 6.821E-01 1.692E-01 5.352E-01 1.436E+00 4.118E+00 + + + N+O+ FROM + DRAGOUN 1.347E-04 8.930E-04 5.862E-03 3.175E-02 1.741E-03 7.131E-03 2.695E-02 1.104E-01 + + + + K+L+M+NO+ 1.374E-02 4.516E-02 1.693E-01 6.821E-01 1.691E-01 5.351E-01 1.436E+00 4.120E+00 + + L=3, 4 CC's multiplied by 0.975 10, 0.975 5, respectively (Cf. 90Ne01). + COMPARE OLD/NEW CARDS + 22: 205TL G 415.6 3 0.59 8 (M1) 0.1691 ++ OLD CARD + 22: 205TL G 415.6 3 0.59 8 (M1) 0.169 + 22: 205TLS G KC=0.139 5$LC=0.0233 7$MC=0.00542 17$NC+=0.00174 6 + 22: ++ NO OLD SECOND CARD + + + + ICC (HAGER-SELTZER), Z = 81 (205TL); EG= 618.6 KEV; MULT.= 13-Nov-2001 + + E1 E2 E3 E4 M1 M2 M3 M4 + ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- + + + K 4.968E-03 1.298E-02 3.039E-02 6.960E-02 4.880E-02 1.273E-01 2.661E-01 5.574E-01 + + L1 6.535E-04 1.880E-03 5.328E-03 1.523E-02 7.350E-03 2.187E-02 5.315E-02 1.311E-01 + L2 7.261E-05 1.043E-03 6.820E-03 3.074E-02 6.814E-04 2.871E-03 9.827E-03 3.167E-02 + L3 5.123E-05 3.557E-04 1.540E-03 5.823E-03 4.936E-05 5.871E-04 5.452E-03 3.128E-02 + + + TOTAL-L 7.773E-04 3.279E-03 1.369E-02 5.179E-02 8.081E-03 2.532E-02 6.843E-02 1.941E-01 + K/L 6.39 3.96 2.22 1.34 6.04 5.03 3.89 2.87 + K+1.33L 6.002E-03 1.734E-02 4.860E-02 1.385E-01 5.954E-02 1.610E-01 3.571E-01 8.155E-01 + + M1 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M2 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M3 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M4 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M5 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + + N+O+ FROM + DRAGOUN ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + L=3, 4 CC's multiplied by 0.975 10, 0.975 5, respectively (Cf. 90Ne01). + + + + ICC (HAGER-SELTZER), Z = 81 (205TL); EG= 720.8 KEV; MULT.= 13-Nov-2001 + + E1 E2 E3 E4 M1 M2 M3 M4 + ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- + + + K 3.689E-03 9.562E-03 2.165E-02 4.714E-02 3.285E-02 8.230E-02 1.639E-01 3.247E-01 + + L1 4.880E-04 1.384E-03 3.675E-03 9.631E-03 4.942E-03 1.382E-02 3.132E-02 7.130E-02 + L2 4.849E-05 5.980E-04 3.538E-03 1.461E-02 4.474E-04 1.759E-03 5.542E-03 1.647E-02 + L3 3.351E-05 1.900E-04 7.218E-04 2.481E-03 3.268E-05 2.984E-04 2.464E-03 1.305E-02 + + + TOTAL-L 5.700E-04 2.172E-03 7.935E-03 2.672E-02 5.422E-03 1.588E-02 3.933E-02 1.008E-01 + K/L 6.47 4.40 2.73 1.76 6.06 5.18 4.17 3.22 + K+1.33L 4.448E-03 1.245E-02 3.221E-02 8.268E-02 4.006E-02 1.034E-01 2.162E-01 4.588E-01 + + M1 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M2 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M3 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M4 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M5 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + + N+O+ FROM + DRAGOUN ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + L=3, 4 CC's multiplied by 0.975 10, 0.975 5, respectively (Cf. 90Ne01). + + + + ICC (HAGER-SELTZER), Z = 81 (205TL); EG= 937.2 KEV; MULT.= 13-Nov-2001 + + E1 E2 E3 E4 M1 M2 M3 M4 + ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- + + + K 2.254E-03 5.765E-03 1.232E-02 2.475E-02 1.681E-02 3.984E-02 7.377E-02 1.338E-01 + + L1 3.010E-04 8.290E-04 1.997E-03 4.597E-03 2.515E-03 6.496E-03 1.327E-02 2.666E-02 + L2 2.453E-05 2.391E-04 1.204E-03 4.313E-03 2.166E-04 7.683E-04 2.144E-03 5.603E-03 + L3 1.684E-05 6.834E-05 2.110E-04 6.205E-04 1.649E-05 9.737E-05 6.472E-04 3.027E-03 + + + TOTAL-L 3.424E-04 1.136E-03 3.412E-03 9.530E-03 2.748E-03 7.362E-03 1.606E-02 3.529E-02 + K/L 6.58 5.07 3.61 2.60 6.12 5.41 4.59 3.79 + K+1.33L 2.710E-03 7.276E-03 1.686E-02 3.743E-02 2.046E-02 4.963E-02 9.513E-02 1.807E-01 + + M1 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M2 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M3 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M4 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M5 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + + N+O+ FROM + DRAGOUN ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + L=3, 4 CC's multiplied by 0.975 10, 0.975 5, respectively (Cf. 90Ne01). + + + + ICC (HAGER-SELTZER), Z = 81 (205TL); EG= 1014.7 KEV; MULT.= 13-Nov-2001 + + E1 E2 E3 E4 M1 M2 M3 M4 + ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- + + + K 1.951E-03 4.964E-03 1.042E-02 2.049E-02 1.374E-02 3.219E-02 5.840E-02 1.034E-01 + + L1 2.611E-04 7.119E-04 1.670E-03 3.714E-03 2.052E-03 5.205E-03 1.034E-02 2.010E-02 + L2 2.005E-05 1.828E-04 8.793E-04 3.025E-03 1.738E-04 6.003E-04 1.621E-03 4.087E-03 + L3 1.379E-05 5.090E-05 1.481E-04 4.161E-04 1.350E-05 7.031E-05 4.353E-04 1.964E-03 + + + TOTAL-L 2.950E-04 9.456E-04 2.698E-03 7.155E-03 2.239E-03 5.875E-03 1.240E-02 2.615E-02 + K/L 6.61 5.25 3.86 2.86 6.14 5.48 4.71 3.96 + K+1.33L 2.343E-03 6.221E-03 1.401E-02 3.001E-02 1.672E-02 4.001E-02 7.488E-02 1.382E-01 + + M1 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M2 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M3 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M4 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M5 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + + N+O+ FROM + DRAGOUN ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + L=3, 4 CC's multiplied by 0.975 10, 0.975 5, respectively (Cf. 90Ne01). + + + + ICC (HAGER-SELTZER), Z = 81 (205TL); EG= 1136.8 KEV; MULT.= 13-Nov-2001 + + E1 E2 E3 E4 M1 M2 M3 M4 + ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- + + + K 1.596E-03 4.017E-03 8.236E-03 1.572E-02 1.030E-02 2.385E-02 4.205E-02 7.221E-02 + + L1 2.137E-04 5.742E-04 1.300E-03 2.759E-03 1.536E-03 3.809E-03 7.291E-03 1.357E-02 + L2 1.509E-05 1.253E-04 5.662E-04 1.845E-03 1.270E-04 4.233E-04 1.093E-03 2.624E-03 + L3 1.042E-05 3.381E-05 9.054E-05 2.388E-04 1.021E-05 4.472E-05 2.487E-04 1.065E-03 + + + TOTAL-L 2.392E-04 7.333E-04 1.957E-03 4.842E-03 1.673E-03 4.277E-03 8.633E-03 1.726E-02 + K/L 6.67 5.48 4.21 3.25 6.16 5.58 4.87 4.18 + K+1.33L 1.914E-03 4.993E-03 1.084E-02 2.216E-02 1.253E-02 2.954E-02 5.353E-02 9.516E-02 + + M1 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M2 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M3 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M4 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M5 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + + N+O+ FROM + DRAGOUN ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + L=3, 4 CC's multiplied by 0.975 10, 0.975 5, respectively (Cf. 90Ne01). + + + + ICC (HAGER-SELTZER), Z = 81 (205TL); EG= 1141.1 KEV; MULT.= 13-Nov-2001 + + E1 E2 E3 E4 M1 M2 M3 M4 + ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- + + + K 1.585E-03 3.990E-03 8.173E-03 1.558E-02 1.020E-02 2.362E-02 4.160E-02 7.136E-02 + + L1 2.123E-04 5.701E-04 1.289E-03 2.732E-03 1.521E-03 3.770E-03 7.208E-03 1.340E-02 + L2 1.495E-05 1.238E-04 5.581E-04 1.815E-03 1.257E-04 4.185E-04 1.079E-03 2.586E-03 + L3 1.032E-05 3.336E-05 8.910E-05 2.345E-04 1.012E-05 4.407E-05 2.442E-04 1.044E-03 + + + TOTAL-L 2.376E-04 7.272E-04 1.936E-03 4.781E-03 1.657E-03 4.233E-03 8.531E-03 1.703E-02 + K/L 6.67 5.49 4.22 3.26 6.16 5.58 4.88 4.19 + K+1.33L 1.901E-03 4.957E-03 1.075E-02 2.194E-02 1.241E-02 2.925E-02 5.295E-02 9.401E-02 + + M1 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M2 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M3 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M4 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M5 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + + N+O+ FROM + DRAGOUN ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + L=3, 4 CC's multiplied by 0.975 10, 0.975 5, respectively (Cf. 90Ne01). + + + + ICC (HAGER-SELTZER), Z = 81 (205TL); EG= 1218.7 KEV; MULT.= 13-Nov-2001 + + E1 E2 E3 E4 M1 M2 M3 M4 + ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- + + + K 1.416E-03 3.534E-03 7.145E-03 1.340E-02 8.633E-03 1.991E-02 3.451E-02 5.823E-02 + + L1 1.894E-04 5.041E-04 1.118E-03 2.309E-03 1.287E-03 3.155E-03 5.911E-03 1.074E-02 + L2 1.272E-05 9.986E-05 4.349E-04 1.372E-03 1.049E-04 3.426E-04 8.607E-04 2.010E-03 + L3 8.806E-06 2.652E-05 6.756E-05 1.715E-04 8.636E-06 3.417E-05 1.774E-04 7.358E-04 + + + TOTAL-L 2.109E-04 6.305E-04 1.620E-03 3.853E-03 1.400E-03 3.532E-03 6.949E-03 1.349E-02 + K/L 6.71 5.61 4.41 3.48 6.16 5.64 4.97 4.32 + K+1.33L 1.696E-03 4.373E-03 9.300E-03 1.852E-02 1.050E-02 2.460E-02 4.375E-02 7.616E-02 + + M1 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M2 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M3 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M4 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M5 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + + N+O+ FROM + DRAGOUN ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + L=3, 4 CC's multiplied by 0.975 10, 0.975 5, respectively (Cf. 90Ne01). + + + + ICC (HAGER-SELTZER), Z = 81 (205TL); EG= 1230.8 KEV; MULT.= 13-Nov-2001 + + E1 E2 E3 E4 M1 M2 M3 M4 + ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- + + + K 1.392E-03 3.470E-03 7.003E-03 1.310E-02 8.419E-03 1.940E-02 3.356E-02 5.649E-02 + + L1 1.861E-04 4.949E-04 1.094E-03 2.252E-03 1.255E-03 3.072E-03 5.739E-03 1.039E-02 + L2 1.242E-05 9.671E-05 4.190E-04 1.317E-03 1.021E-04 3.325E-04 8.322E-04 1.936E-03 + L3 8.600E-06 2.563E-05 6.485E-05 1.638E-04 8.436E-06 3.291E-05 1.691E-04 6.983E-04 + + + TOTAL-L 2.072E-04 6.172E-04 1.578E-03 3.733E-03 1.366E-03 3.438E-03 6.740E-03 1.303E-02 + K/L 6.72 5.62 4.44 3.51 6.16 5.64 4.98 4.34 + K+1.33L 1.668E-03 4.291E-03 9.102E-03 1.806E-02 1.023E-02 2.398E-02 4.253E-02 7.382E-02 + + M1 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M2 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M3 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M4 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M5 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + + N+O+ FROM + DRAGOUN ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + L=3, 4 CC's multiplied by 0.975 10, 0.975 5, respectively (Cf. 90Ne01). + + + + ICC (HAGER-SELTZER), Z = 81 (205TL); EG= 1340.3 KEV; MULT.= 13-Nov-2001 + + E1 E2 E3 E4 M1 M2 M3 M4 + ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- + + + K 1.205E-03 2.969E-03 5.896E-03 1.080E-02 6.782E-03 1.558E-02 2.646E-02 4.364E-02 + + L1 1.608E-04 4.227E-04 9.118E-04 1.821E-03 1.011E-03 2.447E-03 4.459E-03 7.866E-03 + L2 1.011E-05 7.355E-05 3.052E-04 9.244E-04 8.075E-05 2.572E-04 6.235E-04 1.405E-03 + L3 7.025E-06 1.920E-05 4.577E-05 1.105E-04 6.905E-06 2.390E-05 1.124E-04 4.460E-04 + + + TOTAL-L 1.780E-04 5.154E-04 1.263E-03 2.855E-03 1.099E-03 2.728E-03 5.195E-03 9.717E-03 + K/L 6.77 5.76 4.67 3.78 6.17 5.71 5.09 4.49 + K+1.33L 1.441E-03 3.654E-03 7.575E-03 1.460E-02 8.244E-03 1.921E-02 3.337E-02 5.656E-02 + + M1 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M2 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M3 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M4 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M5 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + + N+O+ FROM + DRAGOUN ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + L=3, 4 CC's multiplied by 0.975 10, 0.975 5, respectively (Cf. 90Ne01). + + + + ICC (HAGER-SELTZER), Z = 81 (205TL); EG= 1433.9 KEV; MULT.= 13-Nov-2001 + + E1 E2 E3 E4 M1 M2 M3 M4 + ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- + + + K 1.074E-03 2.625E-03 5.150E-03 9.288E-03 5.721E-03 1.312E-02 2.199E-02 3.570E-02 + + L1 1.435E-04 3.735E-04 7.907E-04 1.543E-03 8.526E-04 2.048E-03 3.663E-03 6.343E-03 + L2 8.614E-06 5.941E-05 2.385E-04 7.027E-04 6.710E-05 2.103E-04 4.972E-04 1.094E-03 + L3 6.001E-06 1.538E-05 3.499E-05 8.150E-05 5.913E-06 1.868E-05 8.167E-05 3.138E-04 + + + TOTAL-L 1.581E-04 4.482E-04 1.064E-03 2.328E-03 9.256E-04 2.277E-03 4.242E-03 7.750E-03 + K/L 6.80 5.86 4.84 3.99 6.18 5.76 5.18 4.61 + K+1.33L 1.284E-03 3.221E-03 6.566E-03 1.238E-02 6.952E-03 1.615E-02 2.763E-02 4.600E-02 + + M1 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M2 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M3 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M4 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + M5 ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + + N+O+ FROM + DRAGOUN ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL ENERGY OUTSIDE TABLE RANGE FOR THIS SHELL + + L=3, 4 CC's multiplied by 0.975 10, 0.975 5, respectively (Cf. 90Ne01). + diff --git a/tests/ensdf_processing/hsicc/ref_hsicc_data.tst b/tests/ensdf_processing/hsicc/ref_hsicc_data.tst new file mode 100644 index 0000000000..8971efe5aa --- /dev/null +++ b/tests/ensdf_processing/hsicc/ref_hsicc_data.tst @@ -0,0 +1,47 @@ +205TL 205HG B- DECAY 71HI01 78NDS 780310 +205HG P 0 1/2- 5.2 M 1 1538 8 +205TL N 0.022 10 1 +205TL L 0 1/2+ +205TL B 96 2 5.27115 +205TL2 B EAV= 542 4$ +205TL CB E SOME APPROXIMATE MEASUREMENTS LISTED IN 71SC35 +205TL L 203.7 3/2+ 1.46 NS 8 +205TL CL T 71SH35, 67MA45 +205TL G 203.74 3 100 M1+E2 +1.56 15 0.440 +205TL CG E FROM 72BA53 +205TL CG MR FROM COUL. EX. (73KR02) +205TL CG CC FROM 73KR02 +205TL B 3.1 13 6.5 2 +205TL2 B EAV= 460 4$ +205TL1CB IB ESTIMATED BY 71HI01 TO BE 3.7% 15 BASED ON RATIOS OF +205TL2CB IG(203.7) TO 197HG,203HG IG'S AND CC(203.7)=0.62; IB=3.1% IF CC IS +205TL3CB REDUCED TO 0.44 +205TL L 619.3 5/2+ +205TL B 0.016 7 8.6920 1U +205TL2 B EAV= 299 3$ +205TL G 415.6 3 0.59 8 (M1) 0.1691 +205TL G 618.6 7 0.090 20 +205TL CG RI(618.6)/RI(415.6) IS AP TWICE AS LARGE AS IN COUL. EX. +205TL2CG AND (N,N'G) +205TL L 1140.9 (3/2)+ +205TL B 0.0030 16 7.7424 +205TL2 B EAV= 115 3$ +205TL G 937.2 6 0.093 20 +205TL G 1141.1 15 0.045 20 +205TL L 1218.7 1/2+ +205TL B 0.007 4 7.1 3 +205TL2 B EAV= 90.0 25$ +205TL G 1014.7 8 0.031 10 +205TL G 1218.7 4 0.28 5 +205TL L 1340.3 (3/2)+ +205TL B 0.006 3 6.4723 +205TL2 B EAV= 53.4 24$ +205TL G 720.8 8 0.051 15 +205TL G 1136.8 6 0.21 5 +205TL G 1340.3 8 0.015 5 +205TL L 1433.9 (1/2,3/2) +205TL B 0.0049 25 5.6925 +205TL2 B EAV= 27.1 22$ +205TL G 1230.8 10 0.023 10 +205TL G 1433.9 5 0.20 5 + diff --git a/tests/ensdf_processing/hsicc/ref_hsicc_iccndx.dat b/tests/ensdf_processing/hsicc/ref_hsicc_iccndx.dat new file mode 100644 index 0000000000000000000000000000000000000000..b056261850bc356836e5ecefb619a087cc4ce3b7 GIT binary patch literal 448 zcma*jyD|en7(n3@mx#CraTk{)#3dmfK#g~>Z$PQsT4&Ixw(t8+L^~yYBYkpy|K;W4-~#syN;N literal 0 HcmV?d00001 diff --git a/tests/ensdf_processing/hsicc/ref_hsicc_icctbl.dat b/tests/ensdf_processing/hsicc/ref_hsicc_icctbl.dat new file mode 100644 index 0000000000000000000000000000000000000000..0b27e3127e3392d33266aa79bfa61122e2491f06 GIT binary patch literal 572176 zcmYgZbzBr{7ap+-3$Ycug{{e5U}knn#t5fEf+pU@207Ag}^KkUZZoYL(J-)wnqJ_%)FuBu+FOa5Q= zv(}p{E`^*ww_Rak<~U~0+AcOMIt|~|9-j})gmug9wuV@n?I|0QoOB=GIon?0cLT9< zjx1PrMTp7NRPnCMDD5t+k|z1L!T!>)&M5V9$bDhM)OOZ?s@)65+OiiLpfJr!NqNIo zVVxqOCeuiz^U={lrORif!26YgBO@o`^ZLCxmENOgiL=K1YhCVO@tq^(Nk<9^+jj;_ z74MGF_Tk0GDs_u|5N=E@Z#`9?!#ZK1EA}Mu&FU@|>&$dnl}@X$H+@}~(ks1>P|SBc zp3^W}slW~)DHjC3WJ+oA{?2UHP2s6FFV?LzZSa7{a}%GeT4=r6uuJeY^)~1DG*8G< zys=cheSu8aH06cQKt67jD2}N3S*kfH(YEj1H17O{%0j}=qvF*AU9H}A{nh-ppK+6p z%o0xiC?y?vyTtnLeHE^gV;R4GS1EBa5{| zEE7KsX6KY_%XRH4@O{4Ywp{rrvkUT+!C7`Wq}aAMLih`%upuC0#TZ9^B0Gv&VId z7n^P$+S6uwUnyx=&~&AlS<<1g?8JXvJS|fRXtkkKd$xf7vh&+*K8yGPI_dLur67?c}U>D zAG7*xS`)%Bla)S;)^hy|$BD&mH-b!7%!GBz!y1`{!C`*ZY!Mfr2k~-1S}6CwZ6Ae0 zK}ps;H&uL|WRliplnRjxA!qfaZqh@WGqqRfxegcEHWL~OtxI2!q=$_?@=MqNh5M%v zFRf1&v*ylYOCQrKWU{p%yG%KZe=8~VeKFD_lZ16DKljITDLvi@Dcx#VferrfJQv$z zqmk!|_Y#NrBzt6%u(8Ve=tu0%|NMnUJ8DW}rU|yUixMo~&dug_{+B2)%@%rOlCUnN zWBHEkiJ`;z!Aeh2ifUy2$kwsE{#KYjdICJF0S44p4qQhOiLd|YWY5kB`^RrxwEvpSX*;2oKOe<3hnDgH( zW3dmf<&kw-H&x9(rknBMsqUupJ`Kz<8*5w6FX>=xz0qPK9hfx#qep&$g${jHw-{2G ziN^dgPv32N_WP>ge^HZ-sh@*PWtTrOdG`=)=Pu*;pOY(r3iplLx>C*29k`m2iJevN@aFQ)7b`uAZz!_poR*k=xiScYwx zEI-2em=EWF5eF0H=lo%KZjFq54q1GuFf-peyx4g8%dfe>uEzPl$j;=M7CtkpAhau8t%d;E%D4YrFRIG71tlgyl1?RcB5bIn}$`4&l`fhE& z<;MLPun&FRSjDeGCn@`i*|tsL%dpN`x%Tj-=~?IUnXpckKeL4|R;Q+z?Zq^yRN#H9Pjf4u zrRWS{@2cx!eQN;D2YuZ{wZp}eT;2}3g{w^}iW7zj63zv#cJb9b_93iZcpQ4HV^dZB z%U5>dr!U-&EVuZUJ$4E&|Nh0cesqbG{MPd$|C$0l_F$nG%ajoI??DB*#oteG1=hs! z``<*dXFHbRN@Y3A{mvc>J=WKaw!dtaX!$#!CQEv`{Ds8LJAA_eeP-1wsqBoJ-Jr)h zHr-y?bi};9O-T#;Z-31WW&fPr^5}SDOR+smEdd`s!4Bzr*zaf>bISCr<9pNN{rSyw zR&*)y+63EaHnpp4UOUDPJti#ae3U%4*8ywF*Oz#gUliuiM+e<|+M1KL0k$)+HJ3c{ zOW1h%&W32~0NWH`$0yi%)E@F-F%@6r~4Efz)|K3s% zAsdkY+xYx?kNncQZh6Dw>3ClqU{?wPyF=xdTofwJ9}Af-2dvv8zl3F!*tP$Pwbey7 zlc{28WaM&XpsBskW!VjB{l{j(o5C-9Yt$nDV!+C!rHVDNg&t%tARqveHv zT1F^TcATZphw1G0Hpv`(36HE3HdS5r`m&j9=f^3#wd>E@-7*i3-Dc@sZx)*;p^rz_ zfrSnYuv9dU?DLP=QD&W`#`%tHLbXQbgIo?v!Act~WUIaR7Hw~HJI2&KXJK>iCCTPu zd&*h(BfCs-=~i>%fg|PuRaK8(&>qt5tqZL*`u5Fg+VP-)spMaaP1(mhHD2#*Fiofu zZ|b`4B5YP3h**YgiHtmncm61U15iE+nEJR!j_(|f%xVe&h#M)6X2H#%P4g2u8dlRb;_$ulSGH<_*Sd1 zqZ;<*l9?kVV6*gf1C)8!Cc|cB4NXpJjy*58`-OyAhs;?JTyDY}e4d9M>sY5UcT#qn zZ|!E-^AzajM)lE+`%w)aEZFE+h-~3#7@uaOJMP0x-pyGY&>pIokO%Dm=bHnyoFITv0 zD|P)ZA#M3)aZjj^bzBt%daPp;)j1{a@O7FO5y|(Y*mFniy?k_^v%)~rJ+Y4P9{Q$Z zQ`JRHa`BLDVX*R2({sc(eCMOT_|vm42xQ0qV4)ZD4o7fJRtE62KF%j$k8>tBjtSpm@Q3~I{{l0x{@^$ z)-6|WpJ265Z2;^StTWACXJ&vT+&BUK9Ek5K=8<(;mr+jo`&dh4ON9SIc4&f1&!2pZ zf2u7)%wEDH>x2zZlETMGq~{D13Oh7Q3A`tW^MB7oEc66+%#81%XGU13(z4e-;`=wD zSZ5S`zeV!e^_PSyPqSK=e5eY)sulL3V`G)xG0jB8V2H^kX*q<*do6^Xo0>}#+cvkg z7Fu}ZS9=cdxvmSpV(&|<8Xd7U+p{EujSj;z@^~8VMJn~D}G_r*}-8*79YtLElY?M=2(&f5vrsNQWZ}~G} z{nf3zJMzoEWEXF&oh0=yoYm&n_ZCOrRjNUXxT2x}o2B2IQzhHC;Y3xTP?kv|&M~R5 zyB&8Z?<&5`)31U#hV$qJ?IBS`T*a39FE{V%7a-(RjN-kE8!0a2;(K1?gStQR$U0$D z)#;LLBfs06( zWEmW5WbcfB&hA<<$0O^sZnXXVt0m@lZ_Spz?++jfV9@`<8t`~@PqGa-$($-9byvmR%w}bo% zJP+&2sM?T)I9(=zjh7#;sUhyGn=d#yX)9#1f&=~!f79IGni{kE^il4*Nd6S$}0_S&7CahZ~zanXWB64U9zO#agzv1t&(&?eW_%4bW z^mQ3!|Gav9wlk}x5X%F|_B}bfYbbYPz$kITs3!2|O6c;7Jp?FQ3M}J_?Y=B##Qxht zr>4GUDR+bO*J|llQkP#~ol3F~!#yaQO{5rM!kbwk--iE>g&!ppdg_v%tSY6;FR-!7 zy^FP3oRv6(w@af#EWx>F?z6Lu#6G!y=yFESLBV^pbU9?za$O@@SF=TzkSsx6 zmU2g1KNQ-%$(sr5R)$=EXD0uqvF(bmB%iOf)~Rjg%k{spr)T6BR$niu%OuuKQ_3#y zYF@hdn09UN!}8Lp-m1B3Tz9rTfVss==<z=^2ez2{EX-zE*v@3A zU2UqdO84E``hWHSy{LBNVc^m}H4Kyk@VOgjdU>c9#o>l6gA$Cp`%U!tMs#n{_OVYt z);TabTTsztl?wNBv${Q~Q6Ne}d3v3`_HaUR1kI3sbc$4FuAYMkLa^gUs1pO6e0tE`{v zz{bmTKEdyTtiqP0B|6Hin8;I}HsM%N#4Xcx9Rk*+>CpG)Pmn+B2m7$kK45BDo^nz7 ze0oD359)dWtXp2xBwnaCCZDa`gx*+Zj`}$^iKEyXXEJ1et*#fqGRlRR`N^6tUU){0~BM<(meU<$jt>;Z(mAoZ643ovQH8ai(6eK z`|ElEtWz1^a5!fi+()w+3CF&MkQ|NKb)2V|m*OPvy0OZJ6KmMIMfwXhix;&X7(6GK z``*TaTn(3zFAmVpYOL#0%6;@@`#)dCkDXLO+Os*%R^$8wGsOnA!rem4qt$f10M@M> zxf5w2-=V9$f(YAVjd<4D44;FgID$U!-9wsEZ{K}$y?o`M_f3VIxgw>W>py9-AKu%* zL)LY@z`Fiw$Yj=x{1WS5xFruA71xZ9GPQcFSp537=3WnPpz8%a2X(uDlyNcFopOX{ zi|~b?v=-l`;JY5cm(#I~g4_~(mpZUli=c-&!ww|Qw7qSb3-Q7T=-PAWv5pN;5Dx|0 z@+4rL8_@aUj;C>DZ9mryK#a2!--Wp657wz59)fM7Tm|kuw1(Zc@n-8J|J&F{Hef5^ zyYzKql?QWj+A8NLA5v~YIb18Ij`|d2HRP&=eO1ACRlq)UtV>B$r&{BVOu@BC_;RcQ z|6dyMYBkP_iP%RQd|t=8mAyZ6A}>LC?POf5E3fOrHh{xJGHcgRt&zC0h z5w=2K zyjZ82?^TpYaoEe-wQPmsVuE{pt0}e~6eF?LgIY}F#U{e8PZR2w+b7odxh8GN`oemU zn<&JVo-5v8utZAfwjMgK?;%xfm2VrreDnqZd2+GK_$Z0uj1z-)Y54lj`aB5OYtXL{beZH1Gr$9c)(boTi&g<(&+h<N_0S%KCXPv+x?(L%GOTLEWG>uoT}_$|LK94NzXsGg?C|OP~iYajlYi{WbB(I$>iKs==JRXF>dL#5z^vV5K4a_6F9D`|9FZ z*2QSRNC?9SeRmjPY9-b&nzVbk%_u|DS zs(}ZWYq{S|H@^r+a%Y!}ITvwfx@_Q~SK9Y^v8n2_oEO=9qukuWvFrKmAEpS16=3VG zb5n$ke1)G=J+h8x1|3R0RFS=!_L+S@X9f4q#pZn4(?0A}OIa>?(>d<&J<1j9&mr30 zsClfV@xOj7;vR)q5bucsX~FgJFRbc`SnFJO! zl%sjMWcxvZ>WUP1PxyR{r8>IOsk>DD-E>_hfpsg$`LmSENqpN{qMQ_J0&L?;<9Irc z2ZznoWfIslW!8}UmS0`Nv}-TQtg-&ydchLj?-RGd{Zi=8x;)~TKx(BC{YK8~gOf7&uSy-1?u7kQA3O`{O82>zKa>!_i?*ZThJQ{cnCOM}Am zgc#24-V>N@cJH7RCWql8Hy!7ghQ(*1Wcb-uTb>?}k?MA4$NKORHcq_zV+>>rIZv&& zsAJ>hwt+bizkY;_EL53-dBZ86K{30@bQSXG)NKIPb;-dY)2Idx>|^AXYljhUqTh;f zkg@VO=i_u80@f`not}w^BOp(YpkH|$!a`qx>;l6CVPD;K9Rik7`Y)_5lApyeM{sSw zI`c;i?_2bVl=8J2Y)CC#hky-G@^+Z4=~uHohj48k)l@jt9VFC0;FpxrbqH9e#u=e? zRz@AfKB8oBEV!+GBE`-r&5?`Fhwsv#L##r%OX3>TST_gt#X_O;yCIi|GZ1zUxoEep z7g*P&kUZXBP*z-IT5f%I$tUDgzc%1*+~I@I4w7IKb-e)Atvo7zn_bkruF&P~a@1C@ z*@$zJg8*c~QHw8~SXD)H! ziDCS)Bx9A+t4vhy@U9zepOn{Z*zG=N*jQ?WamDEJrjhq67;fK4G<0~>*hq1a7n^QB zd9`BDsDV9#;6DZZFDkcTQF^(c%Uzs7<@(PJ+PozP^r8SnEF%_4jUJ45{ulDOY#0-m zr*7pOGGy7RFh?pnnB@FUFE(Db<*5p6A(c6T8cN=oPM?}NaSp$NEbq26H4+eu=McFX8!o{)YaHgbk`?XVTulKhv>pd0$=1=Vn6;Fx}2HDHKjTDbyA5 zT|-I#GGQ4dLvEc|XN$@#@C$o;WG`xVb>QbOfiG7Ox~Z=lppg709HSZv<<)99;*QkQ z&i>@2XV^3R#y?o6GG^Ld)NOL2&Vl>`6KaRwV14m#ZtSZX^rsPYQ(re$$^9b$F@P1< zh!aptoqVMu;+8h3S2hhjf36-ruVY{Dd`k&OTLwj%yS|AUh z%H)65Z!;0{KLPST9{bRruS+2gL%Xeqt*EU+#|DH>zF08#olz zGGYBy;&)NqhjR7cqS$_C_Yu~ahKW-1m(t}5?O@;Z{W{gU1vl|z3$qOxEK%)}cp_{< zik5%wvMj=*7qo{&mFyMO3v;=PiHO-GpXZn z!lqu8II5`-9(59rtYcm1(C@8{*cTg1AUA!Udw+O5--B7eCU0s$`FZFP)$;ZIM%#&d zM!soWqmwM+evV{5=i905k|hN>;@Eky>Gns*FPdMptY!J|Jl@i^;5AF{B_%Dpenwj^ zH#lJ_=~F`23;2jpGJFtlvP_}Ok?i1IO$zVwJ(q;K0M4iPGV`dWF2BIW%YD=nQbz4} zn94l5A4Xga%I{>v5H4MQfpy6z4>y)5zC}(+VYcKAb9{{uU*6t;cW?`_$a`IWfpyE2 zcj@%33Et%%ocT}f#6>}ETFYN)9GQ&g04$^AZt+_n-A(!Gg8VH}iIWN&Vr??L7HP}>VqpFf3XVXS`3wEYh37&eh+l{1=gwDUAvAae`IQ(HMsW(85|+L z=F!I@)pk%{)a4i0Sf$>cH{8|Rr^N?zCTV*_U5~52xhQHPBdi5m@6}}zSeHWYb9S!$ zVy$b$m1IJ)EhmoS2yi6-27l&?E|b8zl{ux>vWUrrv6GfVUhmpm>U6f_;1r%}*jJbb zx=aF_rW7qwksTU6SGz_W=LTC#v6UaP{Nmen#H&U8GhzKzs<#n0s?hZJ!s;;(B;q*I zp5G^S6UYbk$PU(Zst0V_%)6JLV3C93(>sqB$v*>Ugazk^{4-sCflXA&*MHWrpN06r z<&Q4mQI|G@vuuHn#+F_kuFEg5scOlEbBz>BjQ=vz5?1;y>zlhM{H?#tC4G`C1Mlzj z$|Uq6_uS0}abF(fkweT|yR^4ZJtc3^zNVh*2b#}kr+T-h7g#siPW2YY*xQEUdG8u) z{yc0Nw5yZmZ#5WON#kRAvFUcB|Jc9+HTj@c_Rm4xbIvyO8=5a@Qr;awyWI^8@Cl*o z+Pd)5qU4PCMY+~tb|&BV@CjQdh~Q^IHo$!k3f1ieu<!O?^xK)RwXO}AIIs~j+>9(sZNBrFFBR@&Cx0MM7_knes9>SvzFE;I6Qr971(-h=e zSkyoHVjs(Bc8&N>%|G7Za2AOa6M5gUze>IW)d~xYEH8H5;cF$n`Tmef9OXx=M%r|} zz`9N~uuv@vaSRKLdCYHanCe%R8@xfCpcWZ2A7e+iZ;(x?tx8UD&z0hJ2#Qw(m zrC3vuepSqf<1GifRX2k7ZVc-2%d~4n5nV5^-)K8{!iMGhiW_$-`;9}a15IO}4luMl zlxhetE;d%36$^|m>*@AZ_CZ=4(sdkTSTVezVZoTb8F9$!2SE>eQVdcMB9;-0q+ag&Y>sIbU7$K)^Q`0QqX@fW1I0qGRL10|@~Z+^9>aRYc8oK5SeY*rLFq9&uq4 zVi6td0u$vmY{e#AYvo|>{SMzy`VQpY1)XRO&Q`%pShsA*)d#ZZ2kb&S<5wyiIWFj0 z9-RHjuuCMMAPjsftzX4tItiUJLN|46fC3)@e6EAob1tkS z;u_Tyk73UR5cjlzZt7U4f*OeC6P`aOB7SOVr}`y)Z`?yueAig$rjCtO+FiB6M{J9A zn&XJ zTY~AF{5Jcf1m3Xi%dZyDV;!5Qs?X18x!lLEidu=|Gb`@}fov@Cw<#a)#ipv{yMbdM zP%pshJ?kag-YPCyd#imHGsD>J3`*zq!z39h+{aymE~TwK$4jBBX2F z*zBb^pNP>M@jy}QfPK^Vu-~yD_a&_cQoKWHmd*umzbs^v>A#7ukbxzCGD@z!Z82nW zD&D2j&a}uCK6JoB_!xiV9sCWwTI-Qt!p6%RO1H&305>G&waToW6V`QX8}PuJ0xO^f zSRoVEg%~Giuru`-uJwSd`-DYZ$Yom@bsutveD0%>9$BY#-7@hJ;XgzE)-qHd)TwVPCVlU{boZy^WpD!kE|0mK-m)-t8v#E2JsWq zOs#KqNr*jd3CA4R*Ful16V|D$>*WJ~Nx=QJL2h8Mg50Nc^+6|%-)k~$$LHz!5;j($ z+-;Tzu{Pv-A?uxG;sH|a&OUVmVi|gNI@YDY&k+%qS#Mw1jhJX!XyWGjBH1v+zlcpz zJ@QNIx|OM^y+raKsV9K=Tpdtz)uxSeMW}d|FM6RrftxVge!A-P^tIFe#=r174!9u(@psF|kTzk6zHa zsVaEHusp5?qp6RHcs9hn{8M>Va9SlI>JJ{<<{nG zY>qJ5LVYpg8-BM4$)UPlz?X}XiA%CFYIG3CMc2 zOjx%((e_Tf_-zi>$qM^W(SdiUaYEWBDEKb)n`GP@)@787`wil;iEH5Nyuh``D$YJ( z@6So-y`WgSq%P~g1}Kzs{`=x})Fa+Ne)lOee=x$twpWppnGBsRtIImDPU=PE?G18U zUsd@CyOu12o5E9HNB&0}sb+}p(w;A{h|%9y;fXWV;lC8b>Gsf@)30!$P1}f+vp%~l zyDq=Ly3qGEi$hLH3|;vUxiBFFd=QR$D;jtB;o;Eh>$;T+b3d^DtHuk+DM{$#3^wJs zz>=Kxd|6J5)4h90Qz}2`$x`l!t}S=4wqs+v63>sne142bxd|`UUj>)T()xY@zR;A~ zBKTZZs;SV~YTLV7fIq0qFFgnKRb$3-F;=eWkxEs;IYLcN3FyYX-SGkDH*s-YyR z?MJ1WC?7<1Z`5OW$eEeyGbEGqJI~hT7uZyl>J-b~^)ORTo9cRbN3=5`4{OF6mZ!V2 z>+-ABMSj%#ZMZYHzA4MPY38~;mRqRiLH^vLCfm(a=kwlMM$gst6XlHa-;~$-K+1nz zrR9nnPaI^rTf=}{vHpD1?T*WP18pTI1ra~2Z@F8B20I%C-E5NGu>Zk)!_grD*r$et zpN9N@+pFLnzQudr48N(4lX?U$S15&dn_p$ziMkB{7P(4r{`@u#1Gc;!xvTJfbw-Kk zYk)jYP?$@^b=TK*$@%S*r~>U#e}FQ7?>+14rqAMCa@Ia|d+20M@Bc?uT+a!VV{N=$A}ArsSKDeHmb* z9Gre{u?lfei91X2!T?)xC}I;1v5ZK3j7D9ebiKg3F7!C&LSAwW^<;sAHZ=sjwJgQx zsDE4OO!2PkR!F{x1MJ&45IN(n!QfxBL)Pu0yrx98RxdV9p*WXvqPq%qlV-Yx+la$@ zv1tXKYPi%}<;D7|Hy?4-N6SBL^q1BTdHT>83vndtG@m03oH9e#3wjP}o+m>rbe5AH zpcp9j*A+A6f{xZ2!_Rev=z0Mx=|yLACE=~M7UiHQR@hXup{3V~@9f6J3A$bYo2s5% z5ov03FVVcH`Dsh!CWbq(EWkv4Axl5RSxEo?>=*XpVx9TMTr1;DljaXFFO2w~Mg20! zc(;8uQ|eK{Ts&_(T`#b1w7uxDBL?bgoV6#XiAmjTlJ0FZ^yysD__ob6W4;1MfzjVv zy1nYOO+mX;zN7z8Fyt*a&#<)5`k(T)P1~R67iQ6#V+hkX!VD#k7IG>DT}TeYmJc+`u*PLc!tIK{EhHy!I#$ak6W#sFWg31X36_K4ASY&+Z$z|wc2KKch6OEHek(lHv>`ari@ zsZ0Of2u}PO?8}AkLSFh0)}@qw^BD2P9rT@SLaum%k~X2P6}5S-#{;#0d|uy!TR~qT z{#DXtd(A~xS(Yw^SZJ-ii4_L<@V>O;vm2lRFQ zRqFXlEbnWhcAGF?i(&M**lC8+1bm3ii9%-q&2>jPF&|@8&s#0w6?Ob6IwM;Sg@hOSo z2CDs1t`z+<&`l2(dQoN4VDu|m1j-GQpOJE5FMPQX0_7NnxX(j3^>w4|$n9~IGogG1 z^?ngY_V0kd`2`k(u<6=%_-8sc-QH};S1mV8ycnN|U+}X;Zt(T_T&~w2=)a-I`X2T> z-hBPX(kP-hn|r3nR9_$hS_psNLq2$=N7iXw@PCiHP>TtHjO~Z~1v-dR*XscBxe()r?)1nyVHqXo z|BA!knh$;a2YU{+Q||5b&_nQ(So{rN@Xx&kC>j0f3}hq-*LtXU{@R=fs{2Gnp7O{# zt?N`;N0bEjpcS}Y!=U@|%AM1lq()t4B5v6UTZ3BUpLJsuaHphN-IK8A1gsq+6MugC57QP1gb%mZ9I}Ule7FN_lp;x|m9y->ofTw_UIwH0z z4D6ne-lGeNDdESpxM$m9ssZZQH05Z^vSOaaH>DkIhS*jw%oc*09%AL@(oORR*vEK} ztkWL+RdB?ppF_$wXB~Xg62Zh7J}90NQIA9q@)nP*YtI2321dxv_7D+YNx#egvZ5Zy zvpLF$t$+8BsK>>-heXx9p}00f;#X`3G5uX{3GoJx?-9;b2_+lm(FWHUPFS}`1$M~wz83OF ziMLo`Zhu`b;Cn^M6c0y6ZbB>)XD1tAZ!j6XM}_bX;QusPrOPj{@p5ay4BiwEo%w=( z!ZzXkZ?Tdg*9OQW$!MueSQqA^9L95TVI4DcW-|KRZ;4d1J%6qRuswBI$GUEr{ON~{ zsUM4j9&~Zwy@{w}LhdF(ZlZKq2bNLn{Re2gFpbj^Q^x*j>waP7!$a8D0_aMFF6+Ps zD0uh8T}Ql73G4W%bY4+hS~%_q_R(IKbzsq>JEx*Rd8P(jb?DURO(qzCd$pFKUu z+VcfAR>^<6yEcPjfGv+^*U(p@Cclmh- zsmI(iuR`Ag)kShrEsYnd4n@A8yLIc1GW1#AIQXp)Tw%2?zw{hb@It`3s?S|MV-x7y zzy4~3h0b8=+w%QBN|#??6IH5n&>5V@yR`W&p>b2p$j@T#Ni2sRcF$Q&aZ9SYD^GEg zsog5nK}xWAejM_%ChEf-wZA-iuR;)uc=iju7~R!u98+_a3D3?9Zj7bFql+3}i(+il zY2b6|_ZDrRBRI6alDX}AYO^K29e)QO?7lJQ`pu?-(PI#c=-71ovh`UtzI@klF$QqH zjKo1P?F%s!;qDp`Ct;r&7Jgck+^}dq4{z$Dov}ta%a+O_p_dl&+#2WnbKM328;?Bg z2K27OFOTVHXY41!DOX6mY=$}KsiElWqF#8<0{@{1u*)&C=$|mm#}TLY=>Z)=9NlSz zu0vSYEfdEZHF})O%Mpv5a!}rHVauh+>sEs7w$gP7SVlolqnI)OWE!qbvKL7b1mZ81 zn@|d}UryH{U@`xprX=1Ai$h*_8m_fdF*Ag}v@j3mp45O(lV8^%V4cd@#YqCqv!Hl^ z`n+f+3h^9QM%jY*l>LRz>-QF`P;5*&OzMw?aSa_5w2=Ef>o1XdizmF>80rfr(D&nF+OP%nb6ytOg5*I7X`%UQ0Y=u{15J>xEVq`O)~Q@m=%1ro_GL&0{(( zvCK?cZ$w?v)Ns=T?QicMqV4PNzkxg1#gN~1#ekV05V4F{B<1TC$nHG!(KZTW z_T;L&r|b#H%wg~ilN_WcUTnOa=jI^DM+p3Sa7kXwbEbTahb;F-3{cBKwMH-2C2PG^ z%oUvf$bX&5?p%AaCgkNOe6ZzqrcdKcShq}PJ;Shw0k)xLQav1eY{*M%U|%BM7!KXk z_sb}lJq5X)k#P;YvgHmIvq+$;Oi`6_#X{e7Y=9y?OaOQN1FoTF8PL}8fj@y7WKsA@ zt*|f5cKL&K(z@`W!V!x^LSM$(!KHx6Q|@>XzH2}9OdL z!RTE$ANt^)OX9n9Y#L^S6|z!qa^bj6;BS2jMLeYOxls4O^B9PG*0KI-%D9rh*Q$^lP>)~ov)rH#b^I+n~_>CxRy%^cjMjRP0Hc_qc zGp|@S)htnbMbGQ9Tuh|AGW8fxZp4dCRiC#t3&sI8!Otov&1v;QLXH4+kNP6z2hIDk zLXSQBg}uP637&eHiGM)$k7kk4{E9()Ws!I?f3S$riF;kv8K?D%P=5*aa)J}jgCkFT zW%ykBb4a)EaTeqd_j3VhN4R+hit^M`jCm^P9Vx(5Z}J~3I9kB6p><4bt%2>>k5ebG z)bmapdi2DwMT@L}&qeE!j~FG>oGa8S@P1J98}1WMy#|mo#N9BZ3H5a{PikE|1xQD}A^>>Fe|2d*`+gDXO_bP!Md1zCUO zk#)jSzsNQ#`Hva1!$zt!!vJ+0$k=jx*MA;aCoEzS_>+`(LX8M9QKCY#TG|xbO>%^D zqEIGmtTJKlQpC4gU@Mku`WzgRPs;WppH{nA8I{{3>$I**K@CI#@5)Adq-RC(G3Di` z#-wq8{=5sfHqVIkh&WbMUqqj>IMDweaC%nQ+IDN_k#$-(O}Wue5^Jvfsd4LXUnmwr zwFUFOIEj2r$~}7DvA-I(YM%fLjT1iKs_vGakHHrxtf3)}pu>e6J!l zicOxJP{d!i6Fl5ST^ z;l%4mAM+Y#VHL<|<4jnWj9QZPw&^Xr%OU7P*&BxWfD+Yw&!3x#8j60dlb`CADYne# zlNa)fe!_qx2l$~P=?XYo_^xHTtOLs^@G;1*hfKAD{6*OD-b6aTDgSFS&C=x;*Z{?U zRW^}0zvuyh9vD^1l~BLaxOrJ2&xyMH0_#-h{bbB(Ab-{+YJ)|i=%G_g#vomekB5B$8tv2c#qFUUy z*6Csf_qMQSzy8Eyqd9Us)vIZqW2cjCS(+hIrDP?M=C*kEkdgnT*^sLj#A&mLsO~}W zbWoRa+I$o*Hc>?`);#Q7O}0?QhurzikwT8Jqo|8CLalBWM>TIRHdX5_Y0~sL>LM+* zcpIE5Q|pJdER;i{xeb4?(2J2*qm4htoiU*&(L!9bfk}n58VAj8KrTF!{6^bH_l!5Z zf3?Io?7!tEQ|knCuFF-l-V($}ChGnFvo7=^I+)e?@1wi!Fc<>c8hgZF3|f_Ik|Anf zNo{7M2Mhl!N`5oQf>@-DOm#YDmCK1fHS}J9vmN77nNc-8zEJ~U<7KLOAvX&dOVr}| zr;T2r2FO7UkY5GI*SoGurWymy0A*tCs*JUAIPsY&M;aN~4Y{j5x(;Dow~SaCe5a9E z2YIc6Il?gCjB3x2qd~A+OLThyETbgt_eamvG^}$7*LK^BEQ%H=w+Vg<_SH+*Az%X( zbKGzd^Mp{7K7?y?Rq9cqnL*HP=zT+7hk$ibKcPVL9H_S>IjO%kN3`9WsakC@ga59{ z8L+Whe-`m!Y32&J$THOnsjt6x&7qhJ#NfMhtV?-ZWRzCZJ63Ep{JrdQ~N>Pu$L+{wBwlTi6P#+-XP6%TgMo9VY z*R?=CF<&#QmhbZJAyKWw-Y`?|7jZdpUxLOhL|q%P4@dp7UTi9K=&otwu|gL9tE$zz zhX*B_0+N=QQP*PUcWbWeg%*p}O6 z{rN`QOI+oQr*dA`W2{jSNImhZvTirb9$C;x zy(O5@Wl;ZHXy{}rY-E@s5V4F{JK-v)=iE6f_L>6@(J19Fa@!Qj-}oP z>Yr|ay2uX)^JBI%!=J$!O|~MwU?!|f_S;ky*vGIr(ON7*yzu0tQiuVL+nFPSpl|xR zZuFM?4ZkQ1vB&{CbFFsxqT`QXSK#Nzp&>iVu)i2Dg&t3Z;C#gzvH- z7Fh^=)7K49Xr9~671^+F6Jo6%DXArEeRU`BQkO}_7S5p{j=CmS3xWSyGy$L2kTODj4Ns*KIDWqx3Tsz zrDpMY)@_UXYn=Mzq#~KHZp@#Yi&+(v$M8p-vQH)+3USkEhFykk>U+TaUtFX4!8EhT znVLg}9g=QD^nq{Z6O!_ECibCY{Z-0Owf!pCTqQT-xt0#anT5Gu4-r2#Bn}(a*0D~S zcO{W6LqCcQK6MDiCX{EZTW72-gRiV(6V>o66~t*hnxJpJhqZjU!8V^IX7QjH4sK`* z>y#~>p_@83RVCZ@*MKmw-G#~$^`jKuF;hT1B2pfNIAMRVuosIft>Iht8mi5HqezHUYz;@Yu<@Ey z&V4YDC(a7>{?;5+ov-sM4nCI$i&*4QiK;B>rYvz?D921QF(}tT{k@YG9EQyzEcs_q z@{$iP;J*+DshyqjQ8ZtgVL~Ar;HFFyJhD#Mc=_m=Wf?v{lLLB?5Ju zL6GMn9=)JFFv_|2brI7XgwIqM^4H2voLg`MAqR6|Yw~;ag0KO~_$B9YepduG0{1gf zC5|D@p+HR!`=FedzF%;(w3%;HVJniMV=ENI8WP>f=5?f3y8{t-*Mi@Ne&s*wx|EhH74%)0Y*bstJ%tjVo_cC&2G>Zxj#yjYgIl5b z*Tmy592ZLZ7&5+2XA#c=y;5h;4>rjo>$Hb7rChIeBKn}Md3r9lQLcnyU+Q5*ejd5D z%Xo+Sy8dd`s&@tIeY|?$iPm3FHVJk`<80lplp_zuhQx!uZQFn*4!{44*$r_9=M3F74C%1($@tM z2r+lVE$3O9@k0HQKELLn=e;8LrtW(5#n<-e1?@N8zLM)~kwOky#;q^LQa>cke583^ zWFIjSwZ8j7>EKJ}OxcACAL5x3_7_NXquzy>J)gw@u1 zI#6H4wSFpkaD=L^$>56wVb5+|et~tuk4gXsWHat>k!I(pPD1rK>Saf~jL&QD0@zq( zO8#>+w*XxJF|bGfg`(G-wM^p@y*NK>fqgz`FwfwUQV`D>Tp zXukNb1J$MMCuk16j`dgHd>yLQOsKE8#Gsp2d=FdKn!wYH5zL$Soa+?hI92LPq8V{? zmOnW*PNEo=X3mjMMLbOJx`}F7$vLQ7{KZn;aPq~)!j6b+7MeYh_1_;HY>Y0yST|L@ z_i4HbeS8+=hgp)})7^`i56*u}^IeCejPoOZf2#GUEb&z3)}$$DUoKn=8`rZr^~T z6|LI~VB_V6pMBwL_~TqYNxqSj&K# z&FS;sLk=MOh&Q}@aLYr=F@bR7cLsr=P1yGZ^K z6YcYvtv{Kwlen$TO5!xJW z@4A?yg_?4i6*+M2hCq2^>cOI!71ZA~e12Zt24LMpHRXb@<;BJ%7V$eze6K7UmYeB! z7he9}!fkmHqU!~)snDS!G*6mlOW?cLaYM6RG$GHR&7sfe11y5qi+Bin@ngFTUSm!3 z>N@2tRDTRGmN8Lp$+EeOR`d4mH=1PKxMffQ)3F@e@LLK!h|^`<^yIp+!PbQ)`J>@oc@PV3wlUNXn4;B0TGb7QUie`TdR^oe&i^$YE>yZRqn?5O z^ng1KMqG^eLdV8qHdZ3uIqHZp;3>|X;mqi3*aqKcsDsHOOC+NU92XiT# zlk_JtG8nS>2HfH4&^LWux12F^0X1;aw^~8r88h0KA;$&o@7fK}Asx#osnKSvvmQE; z%}!il;!=$CBe}=E0(Qe@>DT~;>MIGy3PGkr!P_6?Al?RS8?cM8k9*KJ9qUvweph5D zuAvtTzlZWPZi!akGnt-beAgdrtO9=$vG^9qvg`qC*!NnC}DnW!Et^x{(G zquPvmr)3unHSXt{MV|99N9L?MW>`E!{^fXu-`%4cg)FP;~LLpr%l?)(!7_&Kju(gj-?qE z8CdeqqGXyapyiBW+S-}cPr|64t@Y`J4ni!_+av3QjrZ`mMnI-8PcCgzSfeflQLFO9 z-&r8f4?VI@SeG`RYownqWNZfHH+$IYY&+m{B;nnne?;q}qWuyUTolZty}2R=*AV|7 zu{t0h@V9>9j3>^Z;L!`hGRl-0-Lx6gk&&fw?SFQfcTYWj_#Fo5oWY|Pgbh%p)qAb| zK95#2VP=5CSKms%x8t|zH@*vViM3}&Sf|o+R$ubBV6)aC7TK)4cydP~9w5~&&=ca3 zb;6<-as4%k=1-z$6SDocjQ(SZ^1C_4wZz}lho#>e{pLa^$^YN_i1$l`pkF4GczzTk zp~n%v9OXxJtXuni2AbhU{T_(RLm|r=kBaihR%(`a6?)^}3y)o$BlIW%PX=vs)S zPmzy^zloQouj{W~KL4LUb80B>K)m99MUP_^yrj*i1Lx7B7us`BC#5t)|HmG2?8;me z6WL%_wAf;7!y8iWQe{1QLD)of`Rh?U#Wgh3f#S0@K67}?Qqc0m#IyG9AyuW`C~yjR z%(WA89B3edm&oPMehU4O%Y>H8#(88N>q3XR=g!7atU`4V@&~AwfaVopP4ZV^v-Eq5 zwj)QzibGERJ?e2r);ln+$&>WU`@-#NG?Rg93uhGlS zK0bI|*9+K~DEY~$;=~)ry9CGT?tCZB5Tp5uTK}FlUryTtu+*b_h`8?XqcD^4%fI3L z-Fxr_8UZ^KvB(x(et~t#RDYoP2u#d%m6;ZR-jX;^AIiVTHD}L+b;}1@ZIoVB8Gv=} zD2y|E7-p=|i~z`JdFWMMUDmNKqtG0)j{7F#+EHBFZ=Y8^lImU_U+1STzrce3o6u3D znnCsUr?8Jj>h}i^h0&XKf!o&;dXzO2)~OUp+AGlS5sdV^fPKU%m3-R>ys-dgFU&>1 z6V(9q=YScF8b9PK<;fva)nwwQj_42~(eFEC^ttO;mqPpyaN;HOBtoVFLTTmIYU*aUJUPtM?^coB@UH7rDc=f?JxAPLdN25G z0?cXsfI7!4t#8GPO;lSwK4zvIP5sKpc4d{*Ps0i}~#OdlOAG8;*Wg0W<6} z$uId_-wX|&6gE+8L-XByeF+Y4ahWy-;1)TDhJ z%%V&cwVE=uj@$ z0Ge^HKeJc`IT~$lU75DoVAEpc3H3OBMQAyV=h$q|7<^vGx@ZPGPxTe@_XgN{h00dq6J2N*bOqORKX~*U;vnP@RP4j<}Dc zY4t|$b4XRG$12e`)`ESrlz+v{b@P86i_okQZ64zvEcD{PvSTs#x2yT{#O7KZ<*$K_ zO*uo0nuSlbEi^yu4;EaMDQ%V;JJ^Fw=vy(-Z;Ui}GTV5gy03|=aoN;y=uWd2n{E#; zFvkG?m*HXGa>h2dV~l?Jq2jOp{z zY0JamZv*7(w}Yv_8S#aVjfV|biECXmejh}h*eIn{QbV$brD9D9+`Uo4smmBS%-r{vv zWy>=O^$5i7N0RLAltaiXzl4vO1Amu-&C=J6Rft!E-;=<#P0*LQDmdfl88_i?(!Y{; zb~@HYF@vq=tlA;f+h@h|JE%}EE6o(6SwR^!OC9T0h~tlQ3Vt4kYxlL9EA{e26GzEUSHQ=B_9Z94bH#Yh=D>v(Tk?} zM8p>|nX+cWI%z(!L~}kUpG|X%sgChq_hDAw+S@Sql>9S&-9)u;krrZ|jT5!GLr>Ub z+mbgUMdBCG9HNZ6zm82+)hClRe~Elf`rSO5^-Vo-=na+Vcg_B+3%wvt7I-)U#WwWY zo5aPQp7sy%G{vNG^`M*jx|nr>+1~g~6ZGS@6e{`N7HBRW^%c{cA^LqTFE-td-?ZZ3 zi_yGEzTTeR{Hv84IsC2&|Mp`KKJ4TU_*|ZKQ5X49raim-DoVP^u)hE>i%eKn}vL5`R^b3C$6*myZ({vg%- z5Q|{e3GuK@CJBF61a~-JCag=I^==e69K|40vk+%9VKnb~!keRbU--LVghwxET{rb- zVI7)70lO0;IcOdbdQ>6nM_`8{J+e+%^se`eLGAh(d?uP1*Uesb%}e~I*#OAzbL<(l zoj>;m+tM(bEu*&(@e^d7=K0W!(~*AEp9_x6AFNXW4);POI1JNJu=AsKG5{JX=I#KrTGNJ|FM~5o%ZWe@Ecqb{3ygNHBc8x3nk6~ z&G%V*@+@rLYTUEFE^6+B80k!lqnaI|+&T3y((i;~782~z8ISzZy2NvwrTtc1vD+7D zE-wwI>qI=^8e(DFuFs=`m&Lr(xc1bCN}NkC)~UkoX)_w| zyR6m?8(Z5pxO-}`MFB?^nz;>|rSCTp>(18Z_fntMk!@F`__0RiB@G) zk|8OfLTIC@EF&eiH4+W7Rg7fI_ItiQ=UnIX`2BG|?)%*5-Df`My58^4=e@pO32Fh# zXYjr_t4Hr~^%vRds5sd^UR=(5Zw{9Hz!G9lFshD1_GEPI^dn?zqr!I68ENK%iQm;j z%Dd)$fia!Tb9J3{EjSEL3vb>=NmfPY?(wtGhmYa!t`tW?*XI5cr zHkKI|u!28h9~VYd<9)@tBP={5@%v_Ft8MyL!Q&cZ>_`}njsCjb@PyuYUn_Ff>WOyO ztu@%HiVuWG4{u2k>-uL^oMyOj9;eSaD_d`PAA~Wj9Fh3!ln)kWZ{oGN;eVa+uKw~I za-4r#zGrZR$x(!b>C*SU#(v?Js<$_V)8OtQ;Y^-?jPQ&COWJe}-MQxL@TIMXgOS=9 zoQIm=?u&=Iy3V>)PV4di=4-z8v)iYDSKT5sck?ys3#4c3{{r$Av-_>1HuD?2g7Z3p9gk1B>;F#kZ*8oWAg4LPfnToAFymBh5y#jNlCaqj?R zE2F$M?A$W}+Cf86oJG&jYpRxg(P@O(RF`z}Kd zy3@-t*|j&;t%bL`KQ)x*=o7eg<#UUr>*~Q?F#k+)v142tLe_#``eFWNC+-L3i~Gmn zN8#Lj6+OsB_q(|^glw+;6*z?TON-GbdhD(4F=6})Q|GrHz4%+lx;BI?JPL1*2qgyJ ziJvus?~ZbW+pk&G-+B~q2mI~Y1+v0`UtszirPrMKQTV0<@+H*gs9D_X^JR_-j85U< zh~L1n=0%!R|0Zl)VaBI($nLwSg=6Y6Q(sx~iZJnSFA}b>&h}~j#umu8%&uE+%bzE{ z05|k5YU5M;UN^V7U;Q5cY&`WpTjTCc z`kq@d*&~k5@0VRczt}X_E?9SbOtU5L{qI)nphNzhWn1$DGdAXZ`bW^riu{p#kXXch zzK3HMUhpb>yhrB=?|0XzWqG^5T-&F`2?zRs*(J;fogtPRi>&Fav-Ab@vAEd!;r&Fa zZg8$+H9Nl88dF1j;mT@W&}Yc$^-MgEpp zgjteQPaytCgqZt@7qKCC-CFv&zD4(L;=A|J>$6KzoH{>nFI{Ew%vo8>o_$~xy7&e@ z6Lm;tT$pdcAMx?`9-?pMS8T{#7Y(z_zMsoL6#8rPcv---B)wDfAHeoB*Nez)$ zgkI*zW3g1uR<_z1*?jipu3KTJdP~INv4Lmzhyz|YJ^v|eQqvEXk*&51dkrrXm&2%; zQxq;+au)%7C}EO4$iH`G!O^0} zKQ-IDoPG3;s*kGeyRVsfd()$xk_Xpm;!SEsqt6ulji9bJLFugLe*oE?JzmX`Wp0&ql#lMW8X z$$={-{14kq%My#ozSWO43C#Y2zCZb_5%YcInSIwC_*uC(ViC#8KPxBh?nErI16>#t zvualsr}{;RrIR&a{Jxylb;)wKFq>`gZ6n~E=3Z8;Sv*s7hzua^7N&!{ZnZcUI16>& z6MIB{jte(x!Tg`OvsP2boXFkc%98&D!(mP52hmq*k-7eOlhoa z!0C3{OnRe!N2he}l*QEh3-2cHwiWs~C9Ug{&9&$4KHkh(q#z1uZ)Qv6AIqn_c->V+S6qHa=%S^^6%4=WiNaSORW09LH^)IwG`nQxuGW=K z>#O{j;%LnjQxD=jxv~l7sO}Fg{Ol*w+xT&t8w-igO>6}wiQ-xka|ZD8we>!m|eHd0i(#@^PhLrn;#Uu-Sm6A8w@RBg~>KDve=M%vQ+1xyLQ1HQy%?bK^edG2{3%_j$04^nn+`a@xCrH{!e-j z$W}%-RJF!eKMS3rpR2=wgnW`zPtp%?ytQ<79a(Dbw=N_Wna4W4na`>yQT&U7{YcQCfU-Dfp@lS`i`u&#l+Ja72 z@wW!Kx{hov7;!5@vN@A~N;Zhy-JnqUVDhe;xSvM2x{hqZF8k#8km?C3f9zBHnx<>O z5WNw;kU!ALOVj6iYFkj*XDYqp)U*rPhtV_Et+q8!PCRX}BxGY< zIz1lHOt^Xs?-@JF)n8<5ZS{1hKaG2WS*WXu6a!p1ccj6nrvJ;;Uu5g;=T<-B7jCxh z7~!2L9}G5h@LOw>;q=MwA;;O;vMD%3=LSz~H8H%i{-#3V6pG_S^(Sh5uKwydILsr# z(>c=c!fDR`y1Dlmj)eXv{}sIFiArqT{cTkaSZ>~r>zeq*>t6SgFQgb)^Y_g71|IDB zjjO+`Tj%WfyGuTEf8ta3i~B;@!3Ux(4GtXKZLa>BSmcbqi#*g!@_&8*OX0xzmD}C6 zvbE_;$ti1gg#OCs8kX1mxx3*{oCuHlSg&w{)Kh=a?Qb(jKZjVv-S6SpUthHBbL*QQ z_wj6;lgE6#=ci|unz*FwYRhm;r)BZw%A>;UTreN}(ekh3$$u{>1?!C(;3Dc7Pnx-^ ztgP_mrXc$WzR<9^wS09#IEMJ+$aaWX6|>#@f_1B-%9EsK?Z6|28?N!Qk#rnhX6CB0 z>()ke1>N7Cy^@`BavzVKMN{gQ^Rp`iC9YhLBBw`9397b73|4r~A!X$I|TWyOAN;9cox8OT%jvUc@?Sge{?PkZ%3W$I0MgMJ_Rnn;jvWOALm#xRB18m0NJ{IczT&QYVRRRMz1EkJ<-TBc-Sg%7k9z2D%ohjr>F*xOt66rv2fa5vURhaT z`u@`A_=2-d4W!?&Px6HSu>SKC^9nDzIuHIu?Ds@eEL9gVeMQ2PZe3Vx-SkQ#h3$V2 zb%Y+p)}$T87p`n2^@}a&40u19U8nyyRYU2-y|O88-FN8`vYNXchb$O%vxr58?=Mk( zdBOZ8rk9=EF*f9`TZ@0j0pXc|?tL87>{jFRu0ys3ep033j?2ngcB?aQM3+85&rggA zW2ro9--k-CX*ve&@R&-%-nHJvn~LuG^W@SkJzgxs3?l-jz+*{BUXp zkCM-QlDzWLn0mmeH}E+?EHaoo%ayILm7i98VETfSOPo1RRp7gf=QrqH5kG?~TTM>v zYJB=3MKd?I=ewO|egvO`d*#J+uGp2WRsKwvJo-JvM3yZdU%e(Rk^jf(H;{%gK1e5TWQFt?f=A)DiL`M7Dpo`tguHMcct=9q|Pz?835U*?LE zK0FV1-GtMYei+qMRkv5)j`D8m9n-9hFr2fpRgTUQbtVWS_~}D$saM(XyQ}V;l|392zv1MAhfMB_b0V-~_*ed# ziIITjMKw>FktG&+|DkCvs*Xw|91Pc=6^r_-O-va@uy_vpOr^1UMGAU>152z zH;Jpl@SoTGNbTdxw606GGD=@CdPT2rqyajWDBj&|GVgFUKG>Zx>!$OLkgbm1JZB#3 z^x(T$jyOM+1A3yInRx39K0lt;b*)>=97@-8oc$X%);lh)zchvcy1yc=>you>^&e`c z4;&(N{qh*~XfwBAViUvtuJ6*jYe+$$YT9~JWh(W;|2hRGM9Gc~MDjGvLM zwl%{cys;{$e^Fuc7SXN+7oc-~;-|Kp6F;-IyWd({SO~(E7e=u#j(M-4P0OAzbME5E z%F0q(e078I#nkIqeooIiIh3aXx`TK@I*lM0#XFmu21ujl?YIc*nOx5`mJB6~DkBJ>Cq zh+j{6N8txgn%gC97m}@WgwLxvbluD1%6s(-$J785Q;rJ3y_42;WU(Rj)esv5#F@-I zso?+>$DA;@F56zqo#pP=@QWDyUtwD-w)g*boL^XT_kZ3qARfi6>|uCI-to4&r#E=8 zGc;H1gX6?UPTIG8{2rg~=Cmw#OnFp&90n_J)uVCi!*->@8=Se>%R6BH>D`xH{YADi zDvlR(jw?s><=qKk0;GCKjz`DNK0>zI^mFwbwGlt+B5)TMmk6gPg-gI4k~_)Ob=IvV ze|8G%{K31tjG3#-V#SZD-6^+f_^eXT0a?q`-&EsVFuy-OmmL>QMyj{(RrWl=)pcZZ zZQ|XK@T*NfVdRvUIAYarlHzv6XUnXcu>bkf7ZOG~IPk2~+}U!)zM$~w#EW3gf{d(s zv?dzv_Cx>V^W6(kVO`PpV)DN{Q~teqZ|nh|3tb=vg|kI7E>A}Si*^Lg`0K2&YNEm> z%F5Q-;^f%c;aBi~|Ig$dgngyiX3g_z9ylvoZySt*)};nBOV3L6wavR4g*vwR9c=7( zT>WJaIgZXk&S}-SneSOxsM@pQDV}@y^7dc4`ipFW9{S6CyFR$jaEqwNm|hg$pfe^J z4hH6Fh(+ArR^>3OXJQNW<1g)Yb*RzbZ+eL<{0)a~pf1?f)pgdba}NB}&tPKdZ%@DX z$$;kAZ`|$mHJ^EnUw<#NE_QL;GdFw6!#nbS_`MBSL}&QLiAax&_u3ze{y+Vd&ow!3 zz&%eGd|>%xhfnNn_!l(0A}pfJy2R+>e><~B3$TSY=AAcTtY_qoou)tQQ1Ud-hnGBu zZ)koS|6LvxwnOGMj ztv!iHXS^9+)A@3Af0%kk-1~xctE2MyQ?qtkV%FSNiG`nC&pexOcOQY9 zZ)Ef_2{*#L?~B#XrMcF!vd8g_-gj*XS-1`t{SY2J{Z{PaY3`QC;-P0R1Xs8xIy0BM zX&2SaxR zg>&MiFZv2sSXiA)XXn5{obTEYvN?|MIsa?6CHV1>55xPcO|PN!Tzs)v-KjDd+M4SV7s+4ahJ?Vz@_s$$J>T*H z(*oxo=-}D~>()6fcfXZC{Dc~6&lhjhaOWVgh^xQjW8z_N+IFjnRVM!4T^v)M<+sf<7+odT4sz{+ zJsghB7~7tCtN#Px>#4lr0nI(XzjH!fm$8vN@h)C|R2yX4p<=06ggI$+W-akWUa{4D z3G*V4pfl7M6q^+8!Y*9d%IK(>@-fB}dwd_a>W4DBegU6@^mpxwTb*w{LbjSa;9kCC zE=uzvt3N9dkKls&ui@998wckU8*Q!ur+p;xCy0A!|SDfal5?FbBPz z$mi>@H&?b={0!9AFJ+J2`0i_4cdl?<^eh+5f0VUdS@@{HY#|Q7mmAC9ZDy<2M14By zwbA*Jm8~~3@WQ^+e6q*WKdKy-;-`-n&!Uf|(-E>cj`%;6e|Y|pV~fOX`OEO5m^Hbh z@cn^bk~>x}ox6vGquxj1f~n`T>#Cte>YWis3eTBdu@ZixD_iBLuB-E4+4)-wbVrG^ znqFmUlHZuvB`aI!Oj`Yh$=!-uju@d}#<-3l&0WGb5>~z=Ba2;#18LZWKQJ3SKcw7_ zxRNjGP-HN)QuDm-9^hRk4+idKkUsh#epZP5vgxPST%2O1%(~bG`7mKk1XSlA`P>R- z*Bb~+E1=w43WFlOF0lx?K_B;@W+i>i97AGi#|g)g2)n2 zS>Ux~WD|Dny!CJ>eyP4I{_eYq!@+jez4RKN*;huk!d9Q2?z1kFT3`pC7>@4L%%d>3 z>eBjao`d1_q<_HFXSg4tZ{$>f1AU>X+x^y~^%1hf^Kf_&XHkoM6kGR3bO#Yzm^m!X zN@e#@Z;R_@_lpy`-K0{et*b;ib2i6pFKs`R|bOg|Gjc zXFg}wO*p!ry0vI$dJpSb%qe`cVzcHQ&F3?_KFU4hu3P26H5W)8(<}roUU>Gw;|qil z^#0&ezym%ztUjKsY@O3?b!%#PO@q4M756I+7kAd5yE=!!_)Y6N&kP$d{M)6Nt79X)ZDjXX#@0$BYJQ*%1B_B*|I)-Kh=jj<8FK| z@E?bE3@ctv{jEn`T}L+8K72`I`ogZj9y#-C`p4u)kkh5#q#bs(%++;d6U;D;4jolr zMa@Lm^SzvPkGBm?=)Rfrx|qN9ysN*+R@g5evpA@{>x2g{<*eNkjeL4f@UHJt*mbFS z&CGMKr7O(uhJ_`8!bUV}0ycDb-tIa0Tr1OOwdyUk_UpIYYGyi!o2k!iDB80n318hR zINCOe^OoP?u1n1wyr0vgRfDU?=RT;SsVq4%l-3$M1S3xbV*p!{7xK zqGNtxFNlv)bJy8*6OM4BRkv2(r0PP;KK#lDU#{Vr-g5fq_+0KDs+>#LRd|JegwDh3 z^I!;GT4AaCl{2E}(A9N*TOGV5$^3KvYU>j&39}^uVWNs7MgCyP)z1Yo>tYupoQFM% zC4~DX97Xk^fUW3NolhLN8CmjN!Zq#O^gYwVCEV)4KV0G=9?JjxrqjLP!{c+g`#l^x zw)VD~+cic0-=6zOE<;nZIdEPr^>)>cV-}A+rd(%Fb{PpsvIK&prznnR!-o;kq zCrgFJ3%(_Kz+Baw#qNE9Y-LouvSnol(J}P;`J+pP3D|bUL+Jht;m02#TMci?Fl>lf zyU5Rmx1^%eT;`6NA^W~#?eFQ{Ev#D${_l&_MW&#Sha9V0>k^$$)YH%zdPZg)yFeD+9WV~{OiyjPiMyv=^qY%r4sezl90v6=W@T$_oxe~0c2!tCCCZ5_SE-uw zgO@ieO!0o3cg(u=_OPEXP(N)*GlR?CXi+4b!kcXMcf<^LTXx+X=kagX`^DdR>#iom zR{IK%+TTLCoglr&X$)<5-GrlaRKG{HDfOQUvq5zXaa2*Waqj^3Q00I>;w{)aMfiq6 z@r9!E-c@6oidQHAf4plK$ksVuZ2c?$vmIyprWRc17rqZQZNt$c9PK7=Rk?OyX4l1W z__L>-!6Eti{w8L&q|2k*^Tn$M$C_&wtUEsT{`}#@A^&*(Z``B#ZEhOsZL>4t$$NdH z>G7h5=-LIchhsyY@0)jKkNflBi_eQsJk#@{9nM=iu{>{K=M8yqjv&(>6-&h;W`@sN zhi`srv325%M51mT?~0x+aUI;f7hQK{E6MD9$#-{~9IZ9JAi*3EpD*NI`2#+~iX&vJ znRB1PcR9$4r(`>Jkjv-q@O8$;t=&<-mZkVQ4!XD+d+Tz9 ztT26Na_8*Fm+KtUj0^b}WFJBo!Jt^>!G_#*b8W@7DXzksnQ@sKSB}T@_gZJrJ9ZIw zmMfdEl^bfi;$`-@24C*Em~vjiYb-0fjeSv{$;ehH#-Wd@8Q*=$-(Br6k4_#+SYY$` zEUq|r-D-Q_FEi*Rxdl6xPg!qk2De|!liBkx+*vR28(rC28@yZmtN#%n+{t&XZDBhs z|M>y#89$%D=HI)ra3hfGg};s8^9jFkr22VGo;mgGJV(gpIGP##{^gZm@^<9!-Ww5a z6?Z-7Lqj+e$MT!qbrX(oMK!Oy=%>^A&S`g95qB(g(7F_Egy}tXWvd*`dk8CAyb$VX z6VIV$=(~U2h#W(6&Inhw&T0R~ZhEG+g&J>t5-g#L0&!cZ?_d4-;?&N_a$g9uW!R2} zhSyL%6~emv_Nxm*V7`JE{5*G-yYBcHcw8notXi;eO@)I;FIaHY>~lVoKN$HeRU z-oqUOrxe~1IBWlF%KwVD1RH+KJPn=n6vG+F=ODH2{J3?nN7^nVTN#bruiR4=?+3i<$T7v&x7osT z`i#%7($BRht?R}Ij~2i50%vJH-%S<97C3O4r5nxP=^nGH>(ja}*;?inBis$jFX8h? zI>nXiH(0^yPaMqbmw9HAwQS8o38TVr16iYD@SB=m_U+s7!L0hUu1hx8e!F!E{#7Nv zM>h6|qx*n+2z^%GtI-j%30wIh;qFe__dWagz!nGS>;oH!H}>&a`E9*7txJy`VTi(Cz6T!$z*W$93%V&zmG&|SCIUX?pAOim2! zx@U;XBg{ti3~L@nwG4V+*oP}yuR5gRs1lEtatZWDg}{R|v57E`va&gF>0BRb+vIS# z!;lN;w|}v(<~20WK|ej*B(J4)UB4~iuwU}TJ>e<2zTm7`)rHjmf|@Z_pYh@c*5RMI zdjQjyItXzK7+PJ!zLBRC=)U3}3ejH}PVvgQvUS3w2{7vvyk*FtApP1Q<&?#5{aKq} zNVv9{b+I9^Q~b#bqu|N?6;QAL*2@q0TYdC|nX6her&-!AwBPZu+T%a+HL1SEuh^V9 z@POvl;TQ31)>3z5W?k+U?kS(}hU)jO^D#r?KfHN_4?aZSJIiwX%0s7R@e#|Ts&g6a z#F}5?$qkp6itjwdt@|!LBS*Qqj%;O=nKWdVFnfMk+}gV_acqkh!TIUV`?{EOeS)j& z$W})+^N_+MS#Ef%HE$+NM~{bGSNR*Rt|MD(u!2o*Q*x!j9TIL-{nDn${)hg4;OZ~3 zmVMT^b>UYZy?}EZY?Iu%ak!MJ5l2$^C&|sO{vw-eYi_pjc{9+P#jJB@Of@$7T&X@P zaKcjW7}-=W3OGcZiOcyt=Q@9!8x&_#LDLC0qhqpt^Nx|Num_&?MzDU;Tg+rlV~;K1 zrmha2cJC>szDNz+)n8<*ZSm0j^U1LVCtdIadu$RFR_52ri)_8Ec{=jMA>p85k443A4T!4I1h+J3t4p8h= zrI~oIIBCJW2B&>PNL(SB@00!u?>f5&^=LhsuUxYJwqo^7AB5<+ngh4UMt^Vk;4-q< z#V@@#v)yBGh=^dW+uW%$`Ox30Q*Mi#qxaN|dLe;?OaI7MD@oxD^q({s;7mHCUR zN60@TSM0vG!?BG&&FFJgt4j>#ulzFgr5vn3koSM(Q$6H=>7h5W_+I7Umw0)G)3_hb zFSZtMEv3hs-yT4Zz$0C!{I4rp$=xCxLO7zTYvakarL`65 zy!Q#LLk{fg;fe6{)nIPrp)0$KkVu zU3)_o9IZ_~h?O?*T_bGZ*SN5BNAI1*dD@WrVN=)Mkj=G)TdrR4?b{l254{zGuT_|~ z_!{D_{>HT-WD_>Nx|wsop|C06Epdc{DL!BEE=Xsy&!NH|y|Q=c=s$C@`wy{;fwp4Q z!?DiHm^ENum97o3ZZ*77i@*vVT~OWOC-zYgmEWxzk$T$q4-wXh`+RF{>5H(dxVMN! zIz`T%lVk9y#iyoTm#l2PExu3n($Ys|c(BFsq1uJc^(i^?UAtfpIgWa)@NYu$z2J%N zD<49=vWgF>*}Hb3=it13@kxH=6~xObTot9*YhvB(3&DIa1pC(_Tgh5G>6V3%g)Az z+&x(IQfUtH59}?MdnAF)M37y@=ceh;u57L?zVfoNi&_6p>}zUVv+O-boyg}HzwdTz z$d%Q+$YOk^E%-rjs}KXJH%j<;+qcbNAIurL#-{09rY{2{m9zwsHrqGJO`s@4rL$M zeMYt(E{E0F;U)NPny)X5?!Dx(be&K=E(7>m?z%aSas)r#xlwo(^lwdzhzEkcEBT|~ z5>4X0xUvand(-*h>+&sd!F+x1D!RESv2=yO4$|C;=8Chjbj*+==(c*V;dEE62;S{* z%T>n~sBa}zS8~^_b2Q7LSmneIUJk=MT0kw*^j|eUbaa7mUoz`r7s4DBN1g7Vng_25 zi>GMgd$;Qh2$M^}=W^E_9|J?kU}!1#OnxGy8i_c6g~zG9Usm>TjF`h;+WM>jxdb>I zJ_~5BvHi&D_;X(e6#ryoiA9D!y2S?voR3~p@Q7?bGrGQ4r=A2yL)c;PgC!26?e;czF zY)tFA)~$}J*URWlvVyqfp}24j%(CarxK6k+$@2 zbK7GluB>INhV?}GNyzr)?+%Nd6PZKKwkx0Kn}3^?gnB=df=IR76;w;y(hXN^9a z-kW5nv|VTq30plGs{3@A^b2e4G(Coz*-GX7&Pv;bWGf8*FLgHVicZu;zK>$71;f8O z6&*VnUGJRMb@LqTC-43|eD_If48N#yCz?wn9!Yby3#ZBbZMC*~3LieV3pmMZu;>1U zONTid6F;Qpon6^_o46_r|Eb{~RqUZ27Ga#o-%4TCxUxCQ*)ex=bb;)5)XdF&h0pcQ z7mW*w=iUO}=w9B7E1Ph@l-F#s!IuL!sxa@n#s+ginBD3X&&pOgs>i9{OFW9=<)NP- z=so&kgHNYBE-PE-#JUConr&V_k!GF* zoVlR5h{2NykRK0fb~wB4_?Tv(l;eBok~V>yW9J6MMJz7RA2&{9uIi|?UFcmLj^PW6 zZ_Za*_JI$MaKGl>;k)+fu2sG+y)OQwV)VV_F$;(f+7??q?=OAixKqj73gho@#~R+% z)pcYmqfPQ>Bg zjjH)EeXg5&0K9V3sIOeXI^g%_{!_eQZo>k5^r`4G`0}~d5weyI=P@-koz*quhF^>e zBT%zI;7jng4!HWu9&&|A5}y9h3f?<==6(?G!+}K`&^u<3En#jMeLyy0iw{T7VnxaS z`0ifkqQ#dREYlRZqz#M!p$$?Dr!QSul#7GLr2-F2(se;Wb* zT5oFBZ(~Q@qQtM@|2$*x=~5i_u57IhwrxOXsr2vT#jPXzPkJkWK8H0^&u5;UD_f7O z-|&{aGBl@9{EYSCO9I1oRG3-@I2Nw1^V@P9&6Y^Ng)y&MI(0bJCW33fcr2_r%Iv!I z|6aS(hwc)mGz<&7PyB4+-4ynhYFk;^Dn~t8!j!)IzDwb6{~@GW+y~Alh9?n!E|it6 zbEeLIJzsSY{cYyDf*nST^_BP-wGoUr{>=`<81GM=Q{fC?X}wUYk?W(ZTwh_Sj2s1hhrc2f38p4#?$iF zf8uzqTz=5=-!~WL{rdF@o}%^7daRWJVi6;Y?^PZZ22)uX^K+4Vi3riP-ZR zbZlxo=^R&@m931Xdc{5HD)Ic-Qd2{*EDPDcW7eQ+-MfW#tHmvf4K0jXqdjr!>SUtv ztWU%E2E-e|nAP+_*WQq=jb8iuzr>lf5i3G1KRLWaeXl9ssxNukTU>iX*0P1?nZj_( zg#)W?v1agu@hklluWoj~x%SkSPt!Aa95&Pyzv-74I8ylP|FAD|YDwar%yUSHBQ1Qv zWntDig){su=TOa?LG_KSD2bxy4PAR<4;40iVIl5!spdUo$nS6k9W7*$UWoEA0k9x;1&LX`B&R(xD z63Gjh*d!}k=lpVSp|{(fi3ZnNIi)w+HS;Q_7e5Q3gZ$tv znAs0%Ery#UBa24IpGISu)fcSTaj4AeGc@ZjGLL)=BD@Z7T?v? z^ZiQ`J%4>MEw6vam-57CGJEnYet$<)EES8Gx$oqQ)UTTsTi5kXm|1p<{*l~dG5qT2 zx+^OjEo?xs$h$Rh>&X`MXg$vvUxj|+>nxalglu&*QTI6Syd!#jMcn%LNn(*veC|RV zGe6z8;;t)xku&f|s<6%X>6dI(B8;E1vPpc#KWkis4Y{(GO`k9KNCRpYU1Qc@2b&p< z-fw4L?PJtB`0UE&+Ohk4@!eH?H-WrzWjuEOe$LU}d>&1%jXN(Ro3Ov{{v2`24q~D= zSo@`z=0}9VP*%1Wn^G;`UAKan_*^p=3r-ztZFDqCk>YcEi_hfWGP2e5qAXAIBF6Zx zq4Rmesf9Ps8G(-H@)^vdjBKra%niNZO+SQ9%;0%+v2_<{rb9kdSsA&JjBLFv&NX53 zsux=PMBss%ItjDU>EG<`H%Ig6riY3c1V4CgL|BW-muu)1JEO?ddo$}MoExuQ78Wlo zc5gV@FZb1kZz^sJe$x*iadw96u`-5dVTf*1>+NnTyZ$=io7&72u?x(JBm%JNNe(mJ{wt+7>JtQt>@)F^U zEOw!O&$ng|3JPbCdPPWgk+6O7=|YM7YC~Ds!!hw@eep&#(BPg&@X3A;=-i>^LSD`a zsxLbuODuBMi93D5$$09Hv;6AMTs*z0sfnm3S#!N9S@~z>)Feiuub<+RG$NLMGOk`W zj|XgM^{$)VMLjdgR>F^-%lnznxx5A2cryO&Uq|zqb9;1)IGnp_U6*Wi6n!*#9m~3f zSmchl@Yl>NaPmg-!Dk*JTN|AU&rYhQiB5qLr}HmS*O0%n5PS8d?LzBXX5MK{=Tp%s zVv%GbcFdk<@kb))oa%JKA#(RiFADQc;vzNklgW9^i}=laxtWJaa>r$46L#_3-wa-8 z^N;_+)_2-ESMAYFcsAY9^+9R7&>kvmVOzCtd>%U0&EPbsA4xh#Zh_C?w62@yU^gCj zh+Os?>AtBRQRTLUWjATxZ1kBsJhO*dTO4`cebUR+D%Ny9H^SUOSoyTN@gMLkr?D^h zx7Di-X)t+(BfqBek|OnUX*No|kIKJgWw9arAN2)am!G8nWk+9Ox^@1yLxC^?hJV%M z2-$?Q>x9EW)n^oQ)3;XGs9T4SxA7aU5c3pg~ZXJTct`^UZ=1WxPxap;2sQIC( zVSJ0UUFbPbTO2jW@Ej5kgyj3Gw{X<#d0;l&5>lUbW?gLPnuW{!Wvj+f6X}dCydKp2 zCbd0-m3_l;&$KLlYPrF7TQL7pxJ0N|(~EM#Nu}gNcHsXo>vyGlt}AA! zjDlgC>O}zuC3!`QQfkl0-pc!WoV?K*SAUVMj-o5bo)@(uf5oij`3d!yr!XB`lXGfy zgskR87SkhfKkGD%SsU7wXa?uQ+e*=AbS$^MtLv<5*@{zA{s;5&qj$xr9fK7-i+sRH zY`c}K>&WKXkKS+zc!BSuuZP&jx|noF^LlGKPv>uugG=cdvI)a^qaN3uqyFQ&M;&2s z$&QGZ(chC@T}QS8jICCx7fWBUo58kfV45>dVYDc>Z1fk|YMXjOP&Fa$0QOiKJ-GVL zAU!T&{VmNpW@S^oD9Zn)`gnUsbpDAiMEm%7ac@_DS-0Nij0`o*{Giwo)h`3@J0FVYIPKKy0Ks_z3l2QvUTcP$yY8}ToJ-G z5)U<4MEG1M1js$P`fFy_g_@|Y(_l|(8Rs3+;=Th%ibyU8F!PAM1h+8}6C&;y+`*YBPaWQNEX7|28wl*pZ+tjSx zsF>CEo)Y0br7#|DrDj>}+7Pl}I)EvqK6*kR{KC9qYI>nN+Wv^nT|_VA7}ti71=E51 z9qdHx%i+5=@!0h@gp}J!;j=_t8$vc=D}N#!Vbe#SJm}OfsSmzqU5s7a#@{;4wIO6H z?EWX;0k+4r+&!JSw;ob#0zSe$V3M52->P%%0@-StSqj7Fu6|3fC8O$7RX^>i;9Kq= zvWKOu!1L8uNurP&6Q=>t#ZUAO08RcWI@fdsm^it3-=oQVBsleW$T>l`(ExHbKK)b zufhHaj?X#O>l<9+`>OSN=IT4Rc42z7fCtG6$@`JD_hMy^epeZ6S2nyacj>5B`NNMApIiC)4Yi8y0uaD zAbC6sIFq->tS1_kD5tZ18=prvz&{(v-*IIv`mSC;KgcC17NM4?Tz#rOai-?Jupw7A z*H&LU_+0FnnWi=>WfQjWe-d?{vS-c+Vv%uI&gSk|$v)QN+ik*z zT-gd+GvhNipNeclWVbjv`|HLx#+Td6+OP9`T-j<{9KZ7A%E|`uT~p`bZyqU}l5;zs zeSB_mglsMS_TfU#59V_p!rr>u@~Ngq_s}agm9HQRJ|#X?p?LbTvUSXsPuiK}`qw)bWvcw`& z3x4#8<4ZLWakXEyq^^(AV7m~GX#mgMe6 zBX~^I*RT0phtD^rbzSRL*usfE>4M9!xzn-zU!u}ca(JdMl4N9B*Cku6b>U+8z|7;S zj!W#SnI_X0X)wt$d#JU?{81V9UK}da483>|nHdT%ZctE2{|NbmC-{x-d#ks1&+BaR zv&bX6qDXkJ!dn!!nPU8`EV$U@wiRcKM@Lv_stKyT2*(M$I~|XZO{mrp`t+^Qs@)W5 zHdFnG^jI5A2i5Dd>sA@;n7tni3aJ-S{@9anQY-Eeu9)m3D_f^K%lKMgR?}DfUr4hY z=(35^Q`oNQ--ZpTUzs`u-=7_PyZY1Mo9#TNUrX}{<=qCS?LyCYeC&cV+WD^N(**zHEb)Rrw#LKRH+`Q(Ce3gBh`&CO(k4#z?AF&+lg?9W_ z=D5|1vg!5GnP1;X{P-vDK)8gLq|fzKEFz8!kLNi2m$%}~43_e&sog!u{jv#u=}%n! zW!-A}OGcoR$*5JG6SsDrm(V*);Q{vIz5#P3^^TFPHQet#M=fO?YIyJZO6a?SlYAUH zc?ovnb9EhA%LW6LUZ~ByOJS}wDyFWA-?0)KtU&iqcXb_E&5KL~GxT44{^PNOFJj{A zRF7e*56kcBICHQ4UHC;FnQw4TRclo~O1M3}eztfPJ&3L2uC60nYj{gEA1*#S;?mzX`V}UXni7^^OzH{oc-g)o!kF;^Fmcjww_R*7$4s!y)=hNPWB6 zb*milttCfT0b#StM-y+M{5$HF!L}#warKvV>zo-Mw(+X}OIQnk z5?|Dy&->z5)7yzf%(}={MwL@S*EtW*E>6BTqtv>70?%nMvhXB6^_F{IAX^=fVcnoUiV=tZa@$ZU(NDDTa4f z_$|Lw%m>rq12gBY8cbF;;b;y@=YI1?&Np15?)=C#NB?PNwz9HSj%w2SyCn@CXO8NG zuD;&TzJIB)XWh-`nmFCEPC~`p9xe6rFiW`V zO*2!T!c{z#8p8v{*0!DKx+^OTpw`kSbai3eN^B@uQSvkIYAc_;#o|89%8GYgvlog* z`p2yScT?-&Ua`(Ym)FNtSI^3dU&P@%uyi#y+xuWKJ>mFC&l8KZCT_WqJImdJh0fJr z1I@Wda!qf33eWv${;eIenhEFBmDTLJX05rik`wXACdP}rojLodlO$)d=clnDS2kgP zan5$)i@ogQJ=T5+w|*%-F2W1tvu5fuvK6-Kiqu!wqhg{r9Mwto4{3+2Vw2CXA$Q$s zyFRCuy5i&PV+7CcXoo&%QzuEqCOJpQ*4m*5`Wue+!sf#B>SYH%iW|Yo-=M(XAyTNdQylHCY?UL{U;;AIKB1GMp5uF=je}5X=)VlKJ%A*%tb_Y879(sk}j}8m# zW5ImtYqK`Stxumx>$+qsi5Z2D!|Vk$25a;QandP#z6!mDgQ3&ON61zax9sB?MtGM) zShsz=PqY1;m;3m)&%moYE^QZDmp&0l-cvYtiYH!+F-J>WN?%}dH!)8#Z5NWYY`7WI z_-SCdM9z#o|Hx0|pr@b*7O~VdX}geYu06m%mG72vw^Xy%bZ7S6cNiav`Uy6dOxuNI z6Sit*Bi5+4{XhlPss`LY|6~P%|0{oT;RZUU3H_`$M$W9qRMee$GS|qm$>^L zo`?H)Hzn zU(apLK3?TFy6e{4n&HU#>utjiGIR5bMe3*TwC_uBiSH&4Azp7+7K}#b+SLyO{zaks z>V)a0`r?oKYE%Q{H@mV4Co-sAXlsX?!@UPQNq^ACh2kZ={?~{*?Paim$$5*+z*|K zdB^G62YoMWDl3~SzJu_X*6py1-q=BtxcD&?12q5mZT37eeXbiHT)q)F!ils!?sb&E zME_MwM%QKg=J~RR3VO1NLz+qIGN~gm`a^cZMfo9dC<=E38*_DC&%tJ16}*l|@VR{G z_5)Gz6F$X!dCK>@#?@bBYwa%!Itf=A9ETV-Hz6Vn18NOn;ku>x-`qXa+pHN-Yz3aL z$)gFMOBmJ9+`o%j{0r%GUB4~IQSYB-sWkr~407Q{>+BW|L&cYG7G{52!V!<0dIZ(G zuiE*6AD=XzHS2VA$3?ELvu>4xU*pR=s#8E5w^jQ`gnx{@>XQ!BzY-K~adzE0=ag@H zd+#{mV_#s=IRRnEgMAG@!&&}wmR_Ryr}VkbezA-5_Kq+;S(*dX{MGf}9q(=7^)vGn zGPrTsb;rjhymN!$5)og#YJuWgU(l$V_h9dazK_D|@wwb*b~v_dNY^~@O+DY7XPfA9>Yg@hR33-Ulh}K)lc)7%EwsAcE!o>A0-xXWheUaUEbY1qZ!IJKIP&eH|+U*Y!=6J>r|0(`Eq;f1eNb576TyI!#`mY!~S z)IVNK@0c~kwISB6u!%`Sni&KKi0^hX(^M5izxaKc(*+MQvu?HBVN0jba~t=gPf7Lx z#w4|2`6&nA+s++Hzhy>N^CFXj53Fc!^19-x>bhwW96iHyR^zvw%-?d~MZK+lRqoYr z-mTAaj;$@i7Y}ewht9t4ltRsnW@U4ns~^3})DqQ8558PqIFkM3nZX$?C{XSzE1PhH zS%}REKQF8p@t2DB2D3rf8Tf6kUGN;L9L40!Pz8k1^}uXTxbW+sPxy!8EK(19cHKH~ zu@`%9@bB|U&%u}ozB21t?^R3Y`sO!1HUK}1YZs<20uO1vcxxL!_L}MG(wzImL$ibz z=PSAHpnI;fhw(ARjqTH;E&w6uq4Hk+ZSGsdBs-jb$laN zwvri;cD%>ynRA~Kx9)tPq~|Dj#*@t8)b*(PgNtBgxx3OsWW>rpC2POAtuVmCT!(8Q{3nuu-1z) z;aL?n|CT-fh)sdbnvtylbE}j&jR1EAxWma>N3#_4c@P7%VPC&uL+&2n7r_@v;pC6z z@3wT*tFPE3)jOs-q$^u%lN*L}t!c?&FvO{k@DV_r*th=LX4VnL5gz*2}|-8?^!J?(LB3 z$jVJ;WU&k3s))ZK|M%8l5zQ9wd+?L-O+)H~nCWYUZMu6n98=A{bK+j+cRw_J_u{-( z{Z{jlH*^*MTUwS_q|48(RQELVxXeNN)!QuJOF0AaxTa*~BbEy@j_0zCXZ|4Xvm%!2 z^FVLj{fc>!ZE0PXY-Lojhlv%F6OdgQ+x6$ge7+Aox;CyJ$?UqCx%z{1T6K{EV))Nv zseUeWPW8h-W~A*x>()la1CZkNpsojg$%&uLzz-ZnZ%IRRw<>KHlC^B%3J6=(F zC&g6P!?!^XPQ*U%OWTEHb8X>3rEE;G$Yf_jlLt)CuE$ftKC04oAz8Sq3Og23k1v|E zuL*m8#~yNZ2h)$p{1cy-q;*}g6?O{8Icabi7R>(@ev~-|b8AJ(eDrs2TGu68Z9C&m zGO@Jki@HlR4=BER`Hf{|>sVXwO|rG>%@0owoCmhmx9IP+5zTM@*Y&Q#`la2e0q#oc zx@7C^)5;2oQ$7WUc(94Hg+U}YnbpIZnp`Tg)8cEqfN4K1$WcHJeWDisvJK za91|rjQqR1@VSJuU}7ll+>rJmOb2R{JZo3B%27{=W)$Cl^e)3GN}Nj^zD50sVa-fr zW$PTxIVm5g9&F)sakm9E7cXv+M{DP#b)Daa4NaT;t)ICmGpnAnq;W`d=!&`3%b&uR zbN4Ww8cNu&Ui`CaF4b&ifLV0^&3Bz^coCUxNZW;;+2NQlUIwn(?o<52ET^9uy}?3V zlbGcf4p(}=_><+)6z3W9ce5TUrsmgAvomJSqvm#a6drQ*7um|Fddhi+*a1COe_dWG zTw2Z>{GX=aWFLQoY;}~GaeS`T=r)*)-#(b2hnsoq3wXEX+&5Ray3V?_QSmwb)?ex6dqwx}aCIG7OMJKKUX)UB7lYzxr*8H)cC-ec?OIpYkzd?YSVAx@nHKYeL%Lt zzRA8a)URa)&nbv~uC~Piq8NZWCg+6u5zTu;w%Qgijj-!Z*)1NrOCJiK_1|Ns$B- z%7u&fl>4l2b`LoY{r0L=n3{?5cVDl$Eug*?%|0o|k(Et2s-5XSJ#oPbDn;CnD@UX4gJJcf&XoNCCEIo zPc^$yr%eqAUpuo0>;k@Zga0c$--~t>2VU=-@BRI@|1%g`x4$`v9(wngjgQ?nX0|8q z;`RB=8G7-}e9W2TkDHY6_G{V2chiKg@wr^t!?6QhZR2C9kE_8`)AHe5&pT$^N{=|; z>C;O4Tqzu_u^U$N411ufjY?{^T-8tKLRncmTRrE=U2hX#n04{xDx<13m6bh@j*Tm} z25%_^Cx_?sMAUlsxp*>h>JhTa$ymsCB0g9hx9&QeQ2$*ly-8pO9{dRLOKyEeqS3HzgE;%9mVU0sHK^=F>5G^BZ^ zRFCgdt_>kuVXNPI>36mCUrfQiEairR>Ip`eeT;E!2-#|z`#jX+?v^Hw7S7SVOG1XX zb86JWUNt}LKHpm6mW2j$i+Mq6iLXZvKDR!gypH^%8w&gJw_I7p=qG^{Jlo(}s~29J z9^m$b=mEiRyUDd7_K@R9_r&KTZfnifs2^~{bGaeqLQ?p9?z);6+2~guVZ?b0!ppn^ z3yE>m4<1x*SMyxiJ#bTdUp5>);%8gC+l`X>!?0mcU|$WZ}J|_Y3aZC zCMQ5{HmDw~?h{||T{ZMEpc41IzZ&#klXOY3j{ zTznT~>+naI;iI?2+Vfhm=}Fpi4FB%b6082bjO?hH{pjaHzmlI4w=9WU8!m-QUH&n8 z|5?Kl>+*jyvNJc|#s44RKh!GfAC6lWR1**NTQ%sw6m-)IP*ALsL1^yVK- z+oog_wlERl*WvFH<4|v5hCE$=+0WXU7zf!qiHAlpD>8_fhS)0kgQMBrN&BMw2KuvV z=$kWorgc*>j<92xec@TPbm(nN&str{=k94cmh3tkOnv-En>b`Ie%=K8!OJTPul+X6 zzpZEOd1*VA>}OympHfJ?M65M}ee8^qJI4NZ;4@yqXX^;rCd6QC3a~?R9&344U8D5( zni&A~S#IAJV;`~$t()tpULuZ2`KpD@=>sP|680ADk;pELWMwaLh?T>;VW8?~ylb28Z`vb*c@z>E;OAUHd->hscvNy|r49n+G z{3K3>PrrEs9{A-2+^23l#D4#Co}AYxBz~mhzOH63@OHm(TS&bH^ez_&=RCV^F!p89 zMfBCQW&Zg2kZQQ0XLkkZEi<$EFP*v7jfYrwd`vvq;zCh9T6ehmpH)*9*8f{Gj>*cB zuL2JwpnhuMg79}k!jRF~No|%mZ7R9#^m9nAkBK{8nB&T0PpDcUpVQ3Ih%@qpE?v^H z1Nx|rwqX7P+#&xfjtrmL|ElnybJPcuJlv;rP58!vqXxAal3I5_AH~}X=AVu3jf+>0 zn$)jn{e(d#XMAN*qS@#{1HQlFzjIvKJK9c0b_sSr!&W_Y)r0>H;M}*toh-?Xz1MF{ zudDdC+V6lq;-=DU%Yym$lLtRP9vOagKQq6$r)%7*t4j1PKG5HlEo|;#mO%VEMd+U6 zSeNCba4?eF9jh&8$$_^0Tv_?QDSQRuLSabMOp0+2qA%e0!Ovp7_-6WikYBxw-q4S^ z2fLxC_yzQ}ef!t<=<;svMRJ9I4|eZkWWO`L5=L*WyYXQ!imAVNMTzjjZaBi`wQe_C zxn{-j+qcbP?QxFylDZ9e~YuzMdP zJ43mOf;ap7+2f!1o{vTq$4kd&ZjNJ{oL%YX%Wt!VYee0MUQ6*YwTu#%D@Q79HU91W zY1`C(w;C*4=A*%l`INKj|00@y{_E}QI3qfOL-02HO1(EQL+l%`?GcvWsNNAhTiKg> z@yKhC%V~CmY>p$0O8Le^u3o@QLVaKI1|jvH%iqw*A5H2zG1%-tT`*r_i+}j&NN1eJ&v)Qgsi|iIhGupzYQeTvE zAKzS%A3X7_GfXTe9>nY(4m;#csmQc-!|j_O~P`4oqZ(3SXo&&+q$Vm$>`%-_8)j)qiaKX;;GxdZLn<(I*@1;Y%r+2f3KmYHy51n znlsMscl;^MGP0_J81C-;NhPy#O9qtOeC1%nt*5*D%YPGp6s;MM{%v{aX++p|*67i3 z>!0)<~oU*7Y6*WU7&Gl`zp>KOWZK63C$ORBd|>91ZFcmjw&E92G` zAGr2L%%HhCVg0Sazj&ZHa%1Cuz1J^I<>oEs-z3-{em+%VVltY&}PAHt6cXa?idn=4H3g?a|m|0bItAL`l=>*hGB zIqA-!Zx4*j>b}eFzCKXW_)<7VdKsRw?7HVWd)l97dh7ak3593h{a1nJ!h{K>wNtaz z?z^aR8l2zXC)_n=qlta*499N$+}HDe*TQePJt*wC?7CYFR+?rd7SH@sd3!iyO7N3c zn$K`^x;Dgq4?8XHYsK94V?N1IXKYPSH;a0|eYU;t&yzmO z_|>VN$?;D0zKVVgAKQ3N&M*HCQ~!T*LA12ttaa!33mzMu{%s!RrPb@7e5tH7w)W0J zO)h$RsOed#Jv(vPkdi@TPiQpEmDTKmc&+hIOWytCl>uvC|9r6Uh=>=92S0!1fL=Kt z4t8ag8&@A0m>uz&b-nuC^I!8phJ%bgiR5jMl-^dqWS}d%e@O4tT^O--mnB9&a#scUe^Vbkm=) zie5naKGdsRR`xmjdMTzka(551P33}yu6c>?@L&IERU%H*6fO+;9_tdO`^)7il6Ak9G_;SyfatnU@kFISZyUgA-wM|I4(#!~An~y~`FZpfg7!ywp zT|MTKatF3rWm>uF5TT${{q+R7o=IpLxE~x?MiO;oTWdAUDZSpvei>8MvH%UE5^cEzU^; z+W5o`zWki+aO#{8Qa)z>$`1bdpFV4PaI@@q&b`pvebNMj!Jb`rJRBTd^WVIBOa4oLkN0v0 z`KZC=kNm7E|Dj{=^qxQc>a=YR?4v#hQ=jT_b;+KAd-^YLdo_38yH4b?-u?ExHT;~h zy>|~wtve8(Rz6CEd*zo{O~+=&hPH1TPu-w#qPBF#fZm(dr|oSZe(J=C@(~6HCQ(q5 z`@)3&1`lxX+IVuz$>uo1rcpje_-Z{5OfMuR3To}{U*Ajq>(_KlHZU*6mv)m~ z^UThEIuo0J`^vfWyxUgp^CivxyKzAEcR#uBEiZ-J!#n;inOJz>tAXW36NmCnBG#%E z@tVaQ`;9wx6#Ak2Vql)|>F6gYvRbz&j&%5@-_R*t&w*=%JuV|x_+rVd36H1G$$@!K zls5psZwU4`i~fKwOIDr#Qh)KH%NMtDi{s?<(r2G!Z-}brDs?`c3cudGgnVJ)^1&%j z4h0US^d9t%HN%nWPx-^P+O;Xh-oq0fbcj!g18Ul&&%S}&g}JtGrV~=XWvb`l1?QI6 zTZ(T4A4t3w@_ACfP4BqulQ}_Q!=>;5$J*fA2Pf`qul_D_ZHL|W#=6t&pRU*(P+z1t zFX>f_v_7YXy1y^naKof@J<4789bqB)6;BI8oA|p(T%DR@@BZdVa67i)8M(4K;H|vq z6Hkw@fi*7!E~#Jq6Ur~DM>8$!NxkDA?cAUH^`A4aWJt}(v(Gd2v`D9Z<6cY-`RyIw z`L3+qvB&dr)GDY?oMa6f)O_K=p@zq}cTLI8_X`GXS$vsm^B%opYPk`M{;bFYL;Jt7 ze)c))$+O@^k2Gl5e|yc0bR0X-qj#L*2W=R$y7x;Y=I0LhIR7X1NZ$2=wI!>jZFcnm z*&Cvosa`Puxu~^gdOVriu(a{F)4~RyH2F!)DkyjLfitx>%A9RjIZT6{ki527{b^q< z*~PP__EsbOU-Qh6&1IJM>5%3rQn|6_21CR1S|9nuyt6Xbj*%T~7xcD5>Zed$8jdMj z7~$$S-TUqs?ov3lGwV*XnePd1Z`xj1hTN+?qrwr;-65>OY#wGH>%LL z$x|eZozuhr1j#4iyT0PSV`OujE39^g^ISbolkOZ`$XuK6qqQ%H`&BhF*N*e0;|336 zYm>w^cGJQ0uW5F^dYi49WyOcu%@|nm#;L>7`_2D&u@!lu{33o+dAzo5#eiK!n}(|Q z$4YjKCI2k$SJGmF``+^R4@pLz>2v{m+G<-g5<<_ zcUvOja?|XLFz(c+nO@hcXSRJCvrg2i4?a^e`1>6Ey?=>)CSHS8vYa`ERvzpEDcWndWGi(TiC1v~9=?$qTNod-crP9NHj0i*O46^K}RQ7BI?QQ4bP2 zx!l!XWOME7qNn=lD-3G3NcaotSrZ=q=q@MG@Axy%tP8)bf9|AxUi$6#@qXx4Rt-cP zrxw`0$}z!VVg*Wg$0^x0oulNfYPnlCA$uCR?OVu$f5w?k4QEZW5^KPMjO?U+=OR0g zbypMf-W0b!Xj@{iv?EWGH{M-reNmH<9W`?zdpLu2Z%N6LuQph*I?rc~DNbQ5rS`Dp z*T=bAHlgeA;N_mex@VRc{1@f6t?hB~MY{V{ZhKAVn>o|yON+b%&*YwB^#H5yUcG46 z{#p1Bsdbgx)~v~b`5yTSG4bH(oZP;xjOU6^O&%~S+s;=0EQJmJIQQSeI9Nsa!E5=w zb@WU(Izl#Kr}AZg@^^Q#*6NsY-G$8?@q3%_ZyWKv-96k%57E^or%axYm|~x!zIoZU znG=n4!G>JfYFj;N%2Qd^m8^BFqr8={HB3LCI0Q4Y>ug~XH$HDrk#g+x9oe_s@GzLH z=aOSSif1p~ao7FK7XPMtj^F`j&wHX5T^k28X&?7s1)p0VA=|{!jF0eZ$;+{i9?{%O ze>8pE%Hx?kDYI^_qkd-Pw3Mq>u0=R6iUI1z4`*L1S=-&iB@X;`VdeZZzeoAQXj^!CZ`mr$2cn+jEUR3q`}Fd znSXBzwS{|JalNnxg)uLVv#c!KVDv_)U-8;$Cxv#;TNDzvj$#L98$u`kd{S1H{3@8} zrUyv;7gv7Q#o#HU)1?mF*o_%8mWZ|LISs;@Q%g~O))@YyZiF|*t$ z*#Ui+mqgDe+wiUyTR&aVKQ_7px$W1SWXrQlZ~Jr1z@slYgpa6ol}8j`Be}J~6>;mq zTl$^+!$^F>K91G5II(8ozyZaR4{*1nWEaez$~&w^7Z2H1`?^H=uzGUam#FPDz`n-wpw%M;JcW4{9J$Bx?^b~*~=Q>%F4GBr=7=hCb~xt(V;Qm z6P(N6+V5B`+m*Ku-#nQWl>=ur*hlv zu$LvVML!*d{WQYQcp2=Fo6_flp2K%h;UjgKbO-ww$3CJl&F8NuIU1Xvj?IhT$z8Xb z4Sp_n)nfjxa@%E&a=YSQGqtkhoU|Ql-4V9>dUpN!FLwSqYtOJ%A6{MSV;{r#x8%(; z>&~z>yW^kw|CqY&_$aC_Is^oyNevwWgd&|J+f#ODwq=t|MG|QSgn$icDhAP|7Xt}W zLo-rCH6SG*U?7MAA)ulNf`Fn@{SX8ppnm7PnMwRh`R&cyxAW${ci+9|p5p*Fnk1gJ z+OruzeRw!(R=}uK*cQmZML=KXYt)0@feuVPV8J>>cJ5OXe|s9whwG%z_qd$Xyuh|) zYdWxUSCJk}!i$nj?#{SozKbNiN ztM;%xoYm|-_%u!eKeo?1FZ@A{0m;>(U$c33uR~B4TuU0Rz9I$%K z>~jRp%fdLRat>KS$Gld~Ez|JYZwVizcHr^huZjOxdyT|=!_<2>YM!Bg##WE-l-T73 zcdDpsqCRxl{lM2LVzKT+xW5_jKE=u8u>F1GJ-@ZADe`BiS&Z)CE*{a*w}0ME#3kyu zyrZ8y@s30C&hY?a9{=XF7m@@&h`p&Ruu+Pw6Z^65Z@BB-uup8<#xCW*;i7)Q%g0vv zEjvfXNYX0`&R0*y{aoGO!p1~}q2ApbpZ%ebYyHmW3*)G-D)>4tFCn*^?r*p|jdrN9 zC(glwEpGcOEqpjXa4$q|%03sohMRPMgKdGM=;NutQsF(dqs|UJY2rxLyf5<4f&)?g zZS+m*`$&p=J#4#5`Nc(?xCr_EK^9tQXvxO97% zQP+ZQ$}a}+9-1B>j5RaQUNJ6wv(J!Zff1<_ab55R0S6-RAn1)X+3dA}rPAk{<-GR$ z2K3IJi@hL zo8($Uo=st_E`2xEN3JYMGU9xG-5rQ7$Gt_jEx>tv6Q9+RrQSJ0G8ohHq7;t{Cp7+i~Cd4C{omzhb^PH^E!TeluWnv1cw9 zybaVPBfe1O7_IniGB^yVp-6wjX9pd`V3RZY?d!kdyX?9jV-CmV)bx!)tB`Xf=k~Gr zWoF{Az#9%s$`IX;Vf#?@T>WO9Ya1AH2zBl+VyKhM{RDdz;_FxNJoGsPE8w>=6Ia0) z7+BM2>W8`~MiS2ui5^VML$^&+*f+&K!5TF)g+6F`Nhe?zn^?f5A++5pZ5J!Ucbztd z{`3~lDQmTH<88GBqD_5EpeP}otbi!yq|F8J&ruD`co}NET^ooGzQTI)e+dg#mbj0{6I}B2K9{Jr( zw{PtfIwSw?SYZUdv%=q469&#Q0-Sc>hgb;CEw|{oVlT?%O-l^aK2_(-9P~o$=TFPh z&Nn3HtGOzFHA>$LTO!zZZx5eIub-_B?8@d8R>iEK9p7=8}b7aZd z+FRIuQ~a^xKWP5u?*oo@oP`PYTgip^n<1XSkZkx2&VtdGT!9xa#XfLv)cnog2X$$! zpSJ_v5yZ&oB~kk;J_4_NOHW4P6z$xk?N|qEro;>3{KPpjT;V-R#eYHfs^}x_EM)$- z)bVzD7wB`m#B&8>cTva-%`;kPVo9%PcSzcXFh0W_KN)9^1!Fe?H(e}n2Stc;>*H@T zG{2y2lHBd_He1%ZE$sKj^HUtP_8njz3iyV$h$rpZ`9|Ap@IN%R5qE(e0*oDNKmBf~ z4LSubSti1!BAh z@<7Vss5fFZSU5IvNdnuX*@mea_T%LIUvK(6Z(K{d_uJ>sg@^Z&xtG=dduqIY^*w#v z!c?7OuLHe6-mo4)2^~5uNO{oZh+V3G!WEGE__!zQp><9c)zW8wY`tFV;s=E z#vU^Uc~8_II`8rlBZa*aV?V1%8Ohq-$9#3E19w5>J*i6g&OQmhFB6x)nSNGZewypKC;Zejm6Z2188tSdsYsI+X;=BU(@UlN6 z?!yg(l7}>j>_<#S@&C-edWMzB8((-4xoy=}t-lmI0^^>Jz0hl1LdxixslvB`vEcgR zJl1_4+x}F%&zW|~yvUuu>5aH!O$rj(hXU-AD+3pltK&b_?y>%GYKXqE;QMIF-dyCS zFK@HOlPd?g58NT|dNRKLM}Hq+JH}BqD}~Pn`MQnZpKKm`Y|IAiyI&z^3fzc&h5kNZ zpDcAm$JD`Hs4Dgn@MiR$=O({1@OU_9iV>$u`uhOe5P>UZZA0LK?H!%L>!wln3TwO# zaqa@$k71i64>1H=p%;pttUeg~w9xW}??I~~7k53@&eUhdHKy(d_XwV6)bAmdJ^IUW zq9+;W68>JdEt7%C5qfT)hx8WxGT=xsp??zihb@uR0jsoS{lZ}S;=Re1+0V|mz4qJ0 zDD(>&iQ^$A9(^%*eq!7R6?-;JmL7KY4n7^0)Ovs|O>l5tyXv+NI_jU>oiz#7mUx0I zS=n|eX}RmqJv-vL#_C;gxYKT&=j&a#TVFTi!2@<`_A##(2<;a8lC3O(aS8C6h~4{o z3NAL(?l^wr!6nog#$ta-#P7{_N$o%KQFmqT686i0@5DPwUpLr}cFc%+P2_2p<-LNt z%a3mIM6l;TaClyBrSHEYw+%iEGq|*DW1@~@Px(e6-|HJeEo{VihljtVuLW$O?cAWf z>DJ8eEhD}ifj*IX4%B>%!&rHOcNf%s&Q=jtB?ch#@9u?y?#s0 zUF5d2XN+J!tTm-`K57jX$Ma#=4D63Ue;wv##(IWG%x#lbQ)to$mLOj}4>)PJD?I$M zL-5EH-EvD)8eol8TlxWbE%BbLgza7Ae_J89eMXIEbANJ6b6%{lms)u>z2ljsIVm#yySin<{yN! z0lItWyDqt33}2s&@A(Yh^8hh{I$u6BHJ6=__X+XB=&it+zl6W74qJSWl=UCmhq$AY zlM;D6`?HL}f$=7{-bmbkmtx%xU@i1>@pImt<)Y5~^7ng#vGHXtKMj(4FSY|#e-%sa7==o>-|yU?zUqRmLMa<)ZgWL)$j!3Z0#yl8@>9*As-itL&cKrS>4)($z z9>keh4tw@H>9!#XxfIER&AzLYq8WCcX?*w5TLo-r3BF6W9io7{M%4OH&x&Tx<>}?M zB5(DwMIpC`+}k32mu|aUVQ&+$Gt7On_IN;=Xk%TGdJ5`2K({Sb*kj6?n#d7?qldf* z2c*Zg&8NPNyisi@{9m{IS7A?lo0e6`y(lmQ%ssCkGQmcC0b_+qTZ@yrPt<4RUF_`+ z<7{WXt7#?Xh+J9h+p4t9a#BMbIR(oMYj@<=wpx>{^P!Q}i8*xZZeQ<8TjaJ?u3wLZ z8YUDeCM)H>E;vtOd0VmsY#JH|6~oEL#pk-93%3|bus4_=^&-9Kk#VHTDchqRoWH+tM)(S;dmFpo*)f% z5=VLR1h63FuR6*eU47hZ4q{6S*b9(*SJM zJ41GeyNKYMV|}l}HeDw6rPsx3s55baNi z`04th$WwnUKu&oYo;}Xpig62M@|ut%hUa4AZO=G}8R2~j_-Txdp2!N@TpnFkQ%(q9aP!|3+`R^ zu^o}OMmRMvdySl|ICtMb@dn+pGDen%hPnx+(o)j^M0ApPc3NqZiD~DKO7% z-8!Jc-*`u7@8k<(f|xrLoW8h2mi!l69HTv|R%gT*(_K>Rx!Ar>*80`hYKlUg1pDko zy1!w*5zxfygcu9HIPV$no$~xRRTsel9NY$%ROg{~c9Z*Nv_q{m{v%82$KCdC!+gw< z2`n0V-c=rYeZB<_XbNB*_cJbaNv-F4*-wNq@O-j>nHs8{#~k;XqyPQA$gM5LXMci+ z^{$)y`&$R!!#)s;I|KUBDxO2Aobt?9#6aUdfjzJ|%r$-Chqj%iZ{qBH#vw_(Gw5?j zmyyS{5r;0Yc!9GD^t)}0sle-i`0-`k-!KRGX1(WyP8D_K!C3*W`Jp0jOkGcv2S6XU zKqgl-xmb?9IT)X9BKIS(qNzgTI;s}p%8EH0m$#ITw77b8hy-5{=5fSc_tixfYVWXa zrSkIY<35y$)8_e8KYg#rpRwn$+vA?#_-zqYug6{8hcMq@1w3tLaB+$}9&1`%%eJ7$ ze6_$~<5~a5HceqX`I-9z^cPLHO*$POmAK)G;9ud`jCU*NyI5h)>BD7{%{&k3ztFfc zWi8!ercUrXMZGJyR)wwMmg4**h`W3>0)bg{(R%)s{fjv8)2|)e>GG0A=s8H z4^GD$h;w;3K1uXHg3s63vPzt3!@03$)`u(RfZX`*EW!|h&+^o-!vGI?-p7l z$cH1htv|CYXHNgm!Nn3}NOjc%PW5l2yTyWtRM$Miz;}ii7Y}cTT$`{37P}tSWuQ_# zZ;;PuS&(Rdyc%~f{sGpk{H(e(8Px-r>Fz0OC69JVEv!m1-8Sr=G4`o5ifCXQv>Z9E&jSLR?I`tyAV?lFU9K-oH>2ZPHlL>zlt$9cE=c3_3)*Z^AZB3As}YE$rK@(wd?yb-}}jb^28ch%C>l$1)qpNGF?j6$IUrB9Txp#$*>bw zB?XEVwI=)pFuGqlrLKpx*ps>9Qb)w<2x=SPH}-W%(4c271Xv6F?G4~gvbFP#wjpxk z7`N!P2O!Ni7k$M=BOReNU4i7}VG+O->bl{t9-?2gOdU9=tium$2t#uhJX zexc^Jsm&w3UIpAN8-VeMvy=Og8VdWzhhtvseN@+ixo!I5(cqv+Xla5MH7JHWqs*uA z&Z_cN=(fQMdsrj(Rkbk>#h4TLAW;JiKeAnD5NqS2M~u41$Ze1M*EjUcp{rFOvQd%sz^QCdN1#J7{?eU zJp5M8C&M!skxUPQ&JC2M=1n%gD^4DZfjP3=L>>=8-U+PgZ5Gk;lLs=jVGHJ@L#$tvNIExFhgx ztJwK(zn?JL)hrdC*@TZp)aKb8#+R!rvdz{TQ}M@}1SatjMnruZYhc%GB9~HUs(qiFG6v zD@5XR;2QJ(Lu_B2pxW@;@ebTg%r|x{1((MpoMC_C?{(WU`QG&Y=6VmGSfjf4757MT z;XfMY5`BQ@%9>){x@|D@gwsu%b}vV~xy^R)(2}TG%Hlhj9(@wfL`QnRpuc7pKI^UoI=>X#tnM?3yc;gdYbsN3xA?7iecd9iWJwNkGy(?) z49^8ue*2$%e3!-hS3J^5e4RdrD_Nsicd}A9L1=!~Z0(_+Fi)n&9)tA#H-c+S{j~BS z)v(TWaffQ+B&RwtTg1~W%llYg3)qHGPtC-*xYo$kc!y#g=od6n9|84F^kmrdwJ@m9 z?5HeFneUBVwJE7?{wHaIr!0SyYs&a~iL>l&biXk0nH9CcIwF4@-!II+qt?t+)+;68 zT?=oojB8c4~gkQLyMJILrHS$@4CosvuBj=Ao2U$8=Drj1wUhs`P#WHnD=Zvvv!h- z+x9yoiFu9*z%nOb|15Wk{z&raB$c?Ot7mY=sIz;-8n8TA32#iyN8 zedK;`J&X52wVi(RHRQo3!v1Z{s|N5}Q*akuff)1yr_e`Rkx^kgFejJ&S+F%CM+6;^ zn%CSSw_RLAaIs6{qbh7m?r(!#A?E)p@=F(y`#uKSqj=T<;I$BE|7X6aUm*{k4qI>} z5Eqs)16+!u@b9WPS9-go6X_Md4G#l(?7&J>~;=M)RBzds|xACsG!;o+*Mb-2zQ}E>d_O_TrNp}61o$3% z*#eC1#dFtf56aZ4O1JclQ8AbkWaMiR8%;vqss(cTm{*1EWtrGB*7P(^R0lB7xZ~6T zwt5MkUHkvo)=F0`l82K2$a zJ4Lf6h`hl`PnM$AxD>vn+m<4Kw#rIQFsvV9jQA*GTUbja-u%RSrP!-<+kX{kM+iP_ z@G?T7M{f%#^iZG|mz+r$Aumlrxery1{A$;H4rAI=LaIT$Kzk=t(k@)GlR zzcgn4!GheGg>gxhCi5)h7wdP2xiFucP4f360HO>hN3g zwjxGUZOM;=mw0sx9kz>bo~ukskjd?g`A* zN+&vbF5mmzx1jJv{H<#H?7+W(g(<>3Zoy}sb`ygp-s9q7A|A-NUmxd?YI`NijC}Po zu&s&QHu`cJpY$*vAQd-rN`0*!o3!jQ1l1w%71p2ZP_<09##`W6%z`XJ`2YUwC!;_hbd$shmlR61% z&g&3r@OEu~plzs3UOC>;#o33w8T%ySPHN*}{?wzWm_xeIsRrHvwx#%dx(puQsOHt) z#BZ33XOpk_v6|avY)ozfViw4W#QHh!_sC)3--s6~#x0Op?@@DyGh(h})pwAm2j>U& zqFPu})FdlxkIR35SOQGWIH9eTQZ&l`^WiGsbl44Thu2~zHfA5T{>&cA)VHGkDDvLe z$F{{F2WdMZ_W&;YQ#_A&&5t?XV8Iu}yFbS&99uJn+``1N((gqdTE)0&)X#!8!$hHP zjdvr8n1(h-%500<)q{>V;~9Mpixu)Kv(_Y~EQh}K!boscTHt54pRPBFEWX7!Ubihl ze|I$t@&s1mx|w%i9_)uESytjvc#c=vmJ9yLmfyZ)Ar6LEBHYa_)YT*(GwNlUZ{oM% zjt)$V3EGa}4eUO&^rG0!0Py~s?As=Zeg^SVKc1?HPL zZ_O5Xqo#O%Wis*72Rc4Vm>c#G`RcCdeR$w5&iK^#@%;$hhr()|Rj}s3WW=8H2E~5u zj~{X+S@cQ~w>|0^Uv#g{xOa=^zHZeR zIxP84r24t8!0umTYaZI@CzcYmZv}kcp8Tszb$=sv+|jNu4E=GSt8?V1rTY+`?_y}Tt~ahJ$}=ZMrJ%NZ)&`AOQ}cmk zW^f??*N0$R0za-UG>KgI`&p>PvT@=zXcjdy@2rw;Q8~BtIg~4JeEXV#n)1%jx2b1m z@f_}G1b*Ap`MLRK-l-~{1AKGBu|*Nn{0{}L`>B-%GdacKpT=4_ubLvSd6C=J$5l0u z_FG#SejMMGdQ2wr>Vsdw0Ie`1^MsmhIAT<+i(e_O?(;?Ld@pgKc{1)`6CBbiW2`df z!^ESu*O5OHMpARo;W1xOFd~>=}>X7aIKB8H?(9UJO6m=-X_sH3(^QCXDc0GU( zAdc=H>&b9z^KE$BgLfI{H*g*HL2ljWaX&5)dY)bu0YM|?8C-8kOUvWeO~Yw z>f>G$J=-Ps>m&9b?v&2F;Mv&dG%!tF;j5nm2XaC8V~iUrLl+eHn^L@|sP6?ms6n1k3luvun8at;R>d)73&JNN2n7>Va_~Q#!#D2&(7h)bkGPNaGQzkZ1eJeH>Ei|~ zFLf$2v#v(HR`R2>9z%baw(2C}R`y@$wrSv;y)1fk+2h0>OJeKjKg6|@cdycRu|mEQ z@FAIj$FsJ0X`^lao12Z`_c7NjZ3_OpE&BO}`Iac;{D5u?^(!ov&Tm?qH0ofCo-@tF z_?30#%5lq4C;QIu#o;>8jqGD4XA=8_Z!JG$Bu`iEL9=z=6u9juO9R8r`wtA@=rRtk zx!Z*Qk6>?yw?{;@UiS!^0N)#asc{Oq zZ9WHoALdIlGbQveP4najEsSe_;~a3?^_-W3C;RA|PnI;%eAC~DxkXWH1m}(PPD9@; zS1EjEpDZ1HUi2EK4Q-l|nuf{kQRa z;MrHN$5_07P6u(B)P`640_q_4L=9Pc4!oN(&O?tZVnQ?K5hN4qe+axGqCYCILh}pe ztCQpp#-Fqu`{gs9tN7gJK<=7cURtm4bj>f++&1!OqE<3;{#N9^nKN$~bYfHB zLk`SKT?@u9wayQ-4!Bu6a`BFA)UK!e?!NS?ul?Q!?q?G|T)r#iR&q7;t<@5IOU>%$XmOMu7=dYcPW5r0=w0rPyQ%Gye$@Sg(BI8i0X?Guo0s<#=DfngYoHdF?+Wy9uf;pG9qV9^ z)3Usc$mQVvH0BBF^J|cA?1JxmO_65hYI`4Z#ifps+r9ywilH6o$<46&iA+A zyO1|2rrx6Z+qlMzeW_io>b-R)|)Ec3=uIjStb10KPdA^1D#)K21?}XSs z>g2HRi+5%4dsnO**LeN37VO<3kGpNv;Ehp%^ni)I&OgsGh+Y6~4#*W#L+P%ZQ9LaU z_|)V&y^_I6vch3s{kHGTX_u0NMz2Q>Ps|})?Qz6C=5X)WA=#@Ey7cRkD)gEzck|wx zb0Fc^>Hnqbw(MIJcgE6EH*30U*8Y&_t8+M-IDYmorM%fnyYu?d8x`dE@}s9Pk5pi% z)_X^8ofO|_h=P4|2+u}umn!|VSedqC9oYX7r#8Y}^Oj4xks4d&@ip*Kpw?3i-d>@l zqt2IWOzj-C?p=sIq1283J#gL)#CNsD{kxz3K4AY1ksDO00S@XpSmRYV&t7(dx7kwf zU?I-1y7>1U-H&0LB%>FV{CDVCdJk*dSRwBSH7HbWvt|1G0NZTn&CIlr@8=>gDa68T zT|C_kj!EE(^RZ^U3+wYOld(?X974VX{fH}Ks427U?0A9IPbnggmTnuYkiUxDdc@`e zD;2fllT$|A>4g3a`QA0#2qWr zI|#Y2uW(QK!*y$HOFuapiT5PWATY^sjfZy8*Nt2!cJ^UQQhy~-V|i@!H8~Nwh={4t z+lrjQz}Mc_*9{nN$x)DY9JuyEyL7Fw8$3mE?9o^G2lBc9YB@(gY@vUQ9$xYVO45(A zG&0@8I(6vYcd)k|22VM9*VN~Ld^Ps!1syE)5__S)#eoYj44KHi*7#k9BTbAhorEgwaYn`Y$A%NE4RVRL(yM^t_Mwy3Xb zb1-m?MUEDHb)(bHBpq1yOB(XDz(9TPBG=}O!O!b{3`}~E9eayI0+(j@gCqRQ#_UXG z-IqP%DZ-v@HD*jx7x#a(o%!nkSqBZro4RwSaAiOg=f(L#?P+01LUx0Zfsx*Zf0f z-VK-K9n;qswn_5sW%rEKcOj1i@~L*#{Fe;-#snNNbYVEQSYz0NKMH!S>|sT(jE(1g z!MjHyrr$ek1h&B1b>jkkjbU3RU+BC%g8Hx2?Hkd(MdY6eh0slU)o{OSni+qquQ6XHV}{Zl<_x9r(^5F=DgoLqILWS)Jj7v*Ir_7dtgp~FWG|Nhkpo^H2vd=+9C)fQX;uw{++IR(82u$zL~!4do$_x`1;+~i}_Z3pIL!S+Rb zmV`6*IBa|2*)PSvXQH2NmRmaC9loiK>%FoV=ke3{tTprQxcjeHYX?#g^8IbyQhbXF z+ijj*;2`GR8r%=$P7KL&t9-kY6e(k^OIo_8Vh-R~0iM>67y@T$@heW&n$>=42|0W4 z#eknqp96Vr)O!T_1_OxuiZ8j;o+9QRvY{Wl67yH*%RA1NR@5<@g*l@SUQ%3YJr{Kp z=?C10u3#_GZTrgo>fJ`Z?kC*&wqYItCv#{yhnvH;E`IM5JR9A1n#_Ii?3yIRs`W6B zeG2pNs+K@M+|xS!$9BC;omQ3ei0A(UnRo{EtU#!>UK?7-jfJVwdn zqg1&uLa|Oq}5jEAMsCf)E!o1AMf@b+nP#Y)!%@1cn!brIO5t+ z$1g+LL6`awRjFTfwu}Y|*2E-Z6nyCsz&ee5?(Cza!%9)@*_(%kqafKmOgHl6PogtQB96mcHE7#GWMcI1h^%w26C*VMDLk&pF z*0{RRe;I+5tG@;?G8YjM{-}3r;q?TiICi#fk*1Zqko?;={u~0Isf=r+DT) zUwZlg?CYv6dT&_6W*!81lFn}XEyX8r;FqCwqn!878q*Z#ygmmj#;lKd+{S+&03-Z2 z`eqg**6-$&)+T5?k*Y0oAk+e9@2ueIFKFf#^=auv)Fsp0z&;_i*KG?NtO=hy(F)_j z2LfL!;C{fr`{Mr_xul`R+Wx>i_%-N|z5xFU;5T|@#1IO5U&F%(Adb6?TI3*Yf1qus zOdPnHd*B{n5PVF)y5l#j#2#=}^JChk%PE~hfIqJX?D`iN`(2s2Irg`z`UpjuAJcZ8 zjDB*_hoZ*KE2uFaxuDq*h@J~7E6-=9*{2K&oh%uBaD zE|=H(+IC@N0PnN}KBh7D4@(<6PHT83aJ^^u#`!fp!cRF!Onr#@@COrJ0EVbMd z3+{&mchAFW?O^G3cSfDnzFCpAbss`KAP(;f>RdsmiKq2j&wrMT_Y3{S-Q3`h@I_Y1 zg|CX|3-0qAtP5%f+de=~yfZ%Ls5xo+&2x4sq=!o?FZagpnXCI7>H+t0&obGijAgFC z&AYMVS8f3=9y;ZLpk-rmiNdB;&l1~>~DF_uf}K%AIr zOW#y$x!n{A9C5`Fulm^cq`v3m1T5G64R_uGU<~&oHvb3r?p*S!d#N+{pvzjs;~Rv& zPvyAR9LR|xxBex5BhE-~2hX8`wdf!Gm}fNn4Lnj6a|o61^{oN?#C+sR&_j87jEh)6 z*55=gqJ(^Ag>AZwK6Gf?EJDmT8F#^kPV`EHFYF@x!h>hO3cpeRZS!R6SCEIF90A1M zvQ7=`n&4U!e_vr+Ab;Gyxi#MOG|tsLP;hW!@9b5ZnB0F48O=VlcN^r zF*Uwo*gpauIct`2Gjv8?)cp;%X$op&rmR=LwEWrPQ}CHjjLJRPmYReX^rzU`wf$4~ zA=oZf%=b%-&>uE4mX?)&ZR9Hl2b$n3Zvg(>%4b%h{QP2wks5I1J)&+luZOfCO~KDB6dV;RAG(Ya+Riu4v1~P8Xt=k+hgjEp`J=*!-D?_wPuW9l zcJtldQw-oxHj?|f=8e};JJ6q5mJ@j2h-W8R3=x}sM)oZer%S!lp$%4JZX-;ZZMe#3 zg}Ql5lkfLC0}`*i8V{|3HywfMy<>;IyfD#vIkm5DEATz&Hw;|y#rki@B)qduCJ!fY zc^>cV3(pDeRoxbQJ}?soBp4EQ-t zAD6z#xK#9#zdF*BvH7Tvz4_tc1vm?DyX}46(tRHJhXR4=J$V8#>FD2Gf!yY?E5cXf zuJbPTo}u7^+^ogx#CTtGP(w|v%T04iy91uRv;GIXXCmHl^swBiq5C{+LuKktsr4|# z=()RG?WXIQobK)2H<^i0+$xie;TFJFSJf|e#Ojg$zw)13a zRI?{DrDz_$_kqlMFmNgG)q3#b*}5OYwm^Qm?|W9BXUNeb76_K9xyfEGoXhxkp?(&^ z_PF4YB`*ehk}(a%`j5E$5G27Pw>X^Oo1Qn%QF( z(O@^?_-}RJgl(|$a``PYdrrvhF?ipzF{ojo&ae*p9gmQEe5m^-Y}1rLx?~0(A2|4Z zqPOkcPo|3A`}fw)vYq%nRzC}2yI5IcZ3jH+7v`l0)2sMEFe7M%LKB2AAMO@0Q+m{MnbD)%?xhhj%Y(Hu62dd+oXGT!Y%d zoA}#kw|%0+cWy{s&ENceh=ql=6XK`6h)pd{_HywKDKQ8AV1@^MqM8rUb{u+En2X|F zZwlVu1?ZRFf_J$t-bM759IT=F5cBJ$ju&bqpjUD{-oFUk*FKW3PF;m}cLv_C&gjcN zs`&+NLu6t#cqdc&^zS%u4+7UFdD%wed-Qmcwn=hH*B@<7S|1bfCdbBoM_^M_eow@z z+Vf?u;*(v`He#m86~fv9xiiUgO-%rmi$+}w<|$fXw-ApWcsL!Bp_2gp~q z6P$yU;|3$ox!ywVZt9dyoceLpmdGkr?Em=p|3s{-*&;4kgf$*3Clxk{TfU}o^30&0 zpA$Uv=-tnFVPpKmLqYnwfw!&})@+!AdMeL8icUCon`5^p6~p_W%{~- zcYHdum5{p(ndH9QtZ&>f@0>(YbG5g3QX9Q!a5XJ9@*_SAf|mM6(Ngi#=tCOdE&jf9 zJo8-P;cc-`e(I8*wrcSXZO1ymi;g`My$;At1a>xx1s4ST*Nb-o_1lLVv^#@ZJ6L?` zE;LH2VNEAvO&7XPzq=Oter0$k_BzBKuC4{n*btd@c4BwLyNGu!wDwYK2-K{Jv09e5 zNMASDCdt+J*0xedQQdPN2;2f=?Eb@A;(bC)STSz4OnxTz0P#M;&t{gSSa=tw&Y=1} zi8aQ!WirocV2o@py*^sRF~rVrkHQ@reHkmXJ&M0ASm}7lD6j{(6O%78irCh_P9TPV ze}H(Wv^k(YzYy=~9T|NNaRU?PCFeH7jXQ6vBV*b;-?E`WDNE**Am=FNfV_PzJgWI(ba~~$oc3ej7;E}6$ zRAC&kH2S#YZbBXrXW<)8Y2YDmdW#R@(MN!N6l?ZMz`OMBEd6~5CwCJu;F+1=76czY zcu`~LX4NDv5%J)9!)_89Wd$8EQSZBerh-=Y1 zQZa{M#gM$n)coj03wZ{}?c3J(z{vLp`;YC=aq{Vk=Mcd=CC*WqJqN^iH$PpB+JV&$ zo)yoLh{0OTN3~V^zaQGA(gyB_kwts;bpwW8a!{|O@wQ8-OE}&6wUgrzlY>L93fAVF zGf<p39(;m&w*>q=b3tHiWT~q*h4;ZJa~JnksRTwe)SHlrTQG`$A{nh*~l2e z7Pa^Aj{Q!_Cx=?pS?t^s(Vh4eVoSG25&>~CP~B`sLv z{UEK1mXGoS^DjA`Z)yV03)sh``EFtg{+@Etio6Wgv6m~5vrRvbVLRGEj;(L}tMOSH z^21+xz#(WM#yB$**je(Ft80P$dZ~k)&EzB#94+?GoQz|*_X%GPe5J23Y(wNHpVl<9 zW?{ROh_N3!X5`H^vbT^rk<80fj+-QZH!lR(jOCWtl@e-4L+!kW0FOe97kWwG*Vh>1 zX3Ojc*!J3RGkLVQ-)?#%NazbUvrn)xcT+iTnM|HN;J1wA>16-e&_*}H-_2Ns_h*qA zvAe#;7&lls)pJQW@FWIm$deynXV#BlIb9MWA~qj4s`~RCB-RevP9FhI$z06;S>&;= z;5R2aGc(U4#yEvsJNB~ruOqfsZFv?-%s-F|uUK|U`CVOV+`a|1gXwMw8Wg&1&f%%x zvq^w$PuS*x3-%`J3=18S{cWdodL(KRPa!r^$9;C-O2kp98%Z@VhfmSN@H*D1H|FpV z|At2QpO61D?xz@c72Y*)z*7^RV@apsW9V-ncjf7o6}GG$sF;x~oa@hv9tM@ux&iWt zyfa7%&diR@1lp{xC^lc&f#guJz)Oz*W!EB`SOm#9v8tGL`@3hCYW2n z9S*25MeTrhEaHbtm)ek@>=BK= zV;gcXk>oL%yJQ>uRUfxhVQ;l}!!{eSm58yUxVMrElsc=NTcz#4%J-8zR`kHxHa@s+ zg1t);Qtl#R-f(2z~g?yrO;>usfw`!#q;P%Qyp6TkcP+iNVjY zPauC;ctg|xMGtFXxI1vPK4Jphw$S0;eGl(y4UCJtJ2)T_d*W|_Q(&*u!VTK~zVd9BfWlXKW4(`Q&a zQ1umR5+4)!jejU?yI~$x{$qPWu9kbAyz9^6_^COiB5$(bc(^z4el*qHnPnYdqOkv z#*-sa^G%G4{3OqG@Mg1**wQjK$cmWU%y`R`9VE0LD#y)o5?=xgj+xp(#H`#ghnRy> z_nX;QyyNbdh`Ge`1y-#S{0(t+we_(vM~e~~Y|c|_2Z&vY|IYT^n)p5ZPqn4Cli*8@ zKI#p=R_Jf~{n}(vivxaxIe*jy|6{uVzJ}c1`30V0*&aXXe0SdM;x?> z*K@xY_ho&)^i9@&scjc`r;X{Z&hy!qbuKOGAn}rVU-zQI8!)NcfqysC+ zwTeA@CEl+*%p;)t8*J}5wtsdDy`D$$S!?LRH1VkYmD_P<;rwQOM0;lRP3GO1hfwpP zuen^`-{E-y-v)1js2!-k4g4uGarNl)$L~QM+#c*?fAEf#|3i&B73;KC_aV$7mpOhb zF?G~;S(aBUGhf2G*K9|I7AxrEZjyl`wvvZR-6I}59-K4%UvTH^$x_6$`JATP`zq$v%pNq4n{5n%jpQnq--<i&jtgO#~c*PE$L`p1j$@Gnb@+CN`I)b`ddpQig8Y}2S^X2SWz{u&!GEr*|tqQ;fr zv_if@_cz!sR^IG%#R$GBGjapg&!d7P*@w-V277TjXCBaf2(~54XtTx0*qX68{qw2( z2hdYYGb0ybskXIPKeJ$4t`N)29tP;8nBPqP6M85w8^Nm~v>K~+{-MH$=$nJy{xagi zsUD)wfY>>3RT}I)KLLM8f$3bYdB{)d&rH=@q!uH2?tuw1jdDDW*z5k&P~CmV_~{3; zQ9BT}xUzS^y7W=(`JH^=q64Q+`&91lfv#O+nQtmt5{dkzYRjCUByEucP373&YrPZF z*K|%vDf-neg~WLSA3m2*zvOy~Zo4dRKKAZEk&mq71vhd0imU6<6NK-|ZR+VVbbGw2 zO|Fmo&@QlY`N3}c`y+iD$A=_PheMLOx~Q9SawPdZRojy%K<^@ArF_P(-t=i*;}Pe; z_ESZ2y1XNoSJizUd4hlgm{olC25 zZUyh@Kj0Yn*d_Aki#otp-^RZc-H$Pcfig6Fsr`vL1HV+9D)ML7JN3bS;>4bDN2we) zS0+D=+NZMw-z%}EZC!W3fqWWyv6t$8jBz&!-Bg_Q@Z*b^M~KXLih9B0Mvj3WAH^P_ zuf+*+7YOd$dOaFqj^PgO?bI|T?~U5ytJ{{#y7V%)_F`QCAsnR{Kzvf_M4UGEpx)4)yN-|6cdbh*I*DFzj2(sEY3uOO3k7zJc`t3g;K^Z3JVqv$!@s>kl5JtP z!55z`GrwQ(&Yt*d`=8R+4Lmt@F#lH_(wDcryX&SUKm!1AR8I$ckHM+pQ+ut&T7dgz z25?Lr?V=ALbbQ>Z!z*y7DMrmTO2jnYVU4wY(vQB-s*Wccw_{ErPUew|MmXXJ=Eyi} zZHVj7xdQ9@YWEA;j&l(2Pi%k`a>x~E(><10J96Yofi>tmIIP7mYV816IegX%Yl`@$ z^ka94=Lj)6_^u0xJvM812HJ)oE;(%_M}gYsJh6%@IGU?-^{N32?BT zb?@96xCgw6u^TAV9UJu8=g<%^W6hW9>jv9wnOxP3HOk-ZiuWbY0Sy<+MaL~0Y9Lx( zLVadj9jiN?W+=x;(JAaAudclS2^eSqy)N7fe` z5vO{w{_Wj?ujj>5^F(kigzR?(B2x7C0sC1gIUImBo{V*Pph#P4dBAyw9=uKXt^n{b zTM&o~?F*-_uIHFHxr}j?v!-jGH9A~0u3VCz7J!p!1 zq#6Gv)?FVrTb_G+mj!*@k>F0nvp(S%S8bnp_OlJ(_w4VRsJ{;ww@iNI+GZZPE!FnS zicgR)IxqBYnL{B*zFOze#|>7{GisXiTvcngW=(LXlA>SnH30uw!1C7zM{R@S$mt+# zk&B=9FKSxYNw(*Seo<$hIq%irF7D)om) z;1DeC;>sAA8F%$`w!Ur=tamov))~)oof23X8ZQ)I7FE zpYP!@Y@FCrXx_5-t8&~j`M31L5#Zu9-gx7E3pEB7@9i4#^&f|f>=Qz4uicN;+5u|! z;g4DmB%htB^?*d{%3qs>?|C%LK>Uw9C{&9Hn75yWcdMZy-T&45PF{=T2Hkq5vt~~p z*?)0);!|@D>V6FVooevSROI*HaQC0I*B^8^xG&EjNjj`}&93-^gJ-8|^EGgdp<#?Q z{#7adME2!B`ZJMxnc$jReaYK!kx9!(`O*7O#lf1X=!rw`EOlgfr*GZ=YP6I;+9g$g zq{Xzf9pflo^eWQ(CsDJQE3`mSzbKfq3 zJLc05o;EW-$b78m!B^J}wjnZda%SR)2k)cKPbV2YmPX=-$>*Z#WQ%o!ZIZn7=_C_0 z=Pe(e>?-Pj2hf-8Y-ct{W`^K>D$&nP*k;TBZci}IXt~Htp2l$_zlv6CINeOdN2^-Y z`nY8>c?oC#T-`+N5cUYOkAR$`=!r2;`TU9&_wly{D{alk!b=ZKGqkMoCA5K3t;1_H z46k=)W(4{$&?9ryg8VmL)wqyto;Ps60H#ht?;~>qQVr+H6Q^-j?Q?>Q$1P2Wz%x^A z$3z8?kIRH@BiJ@@O7@>nXV?wf71+myxTT%*D{RlMnS&Sy@fqJA3H(+WAEI`E9D$Sx zTd!NHd8)#8Ow?M8`#b#P2KL_t#4o}Zd&BlNa&k{x>^IWqaCXgMV5t`4%*e;R1$E)v z-fs1-Js#f!UP7Tiug(|PBjz<=I~caeyC>Cg*E;(?zNaqc-yXGtjuqpA&mMdzw{Vs| z!S|wWl(fzz^!C83D{B700qApJd`CWhffpgZA6gS)|CerIkH?&Ie?ly$&mmpZ4$iK* zj58g1!{WhCIin-KCj#GtJ~e6zRM^gtzx-%AwO29cn%M6*D#Un9zxfg3%Qx_BjCgkX zxCJtBi@1Xvz&wzD1?LKTlhl4(tcmmzo`-IGSjL$W<*PFk@xXPAH3FPVeThXF>pTK7;qVi{s1s zo+#p=&#vhW+f^7_AGf1|zAf}J21S#zh&_bVEh2V;asQR9Cs-HVHdFay9l-AA-N?v3-DIReb%=TFEYP&f)$)?Huif$a}fKlZky#Kj%(4gzgmX(d)-Pr965-v z$6Hz3Mvn*lShIy+k#D8_llK{OSzBLy!+PesS(eY-4XG(0v;rz@Q9HnXW(IGPW%Z;j zmb+b=SfTd>o}K@OWiEaz*7uFE9Me04?_{Mu-=6syh ztI^{Z11#7>-{H=m{ zpvSi2x1ErWuD)&yS~d$h993f2JHWaFIsBO0RQDHs4&{OeS?$w#0ejQ-7}PFoyG#?J z*ypR_+jZMug`8kNj+rBR82;2zp^*!& zFo9j0w#ttfEnD+V+AfB+)@G4gq*ewwkm~%}%lgf^SmLWARg926hZ2RH3%ozE2blSl zMtOTJ%pO9h;wEd3>X*@HONzHQ&S>uoo|E+T3ha zP9TptUi9`br%BGyHB}o5ZH>xtnVZj(Q zcCbP8@dWN(h}~j|t*|BEoVd?4T;RDg%o5KY?UbSih-=m`1acpP=fPo7u+JkB+t zy`|gIH=9>u{2dByj0f)GP?xV>k1*U}{FYxD4+u@`BWP)8@;wJ7Q&P#F|^+ zn}=m7cb2QyOLdSJ1n&zq+Xa3?{cZG3^pDz@D`DTfWbff*-HaRss)qdm-G?xTTyUa( zY&{-!1pP(<%<)HYzh6@&Qt+4xEuxA!Y!X_0yfY7kM*Fh72J(|9Z&|5*NesD&M=NYk z$jC8Tn0Fzs5Hx(LS7xPu^1Of0r8~Y$pKrNLOfa;WZL9v*S>%rRF7pgRycmUApYCs% zZ?NJxdr)-n~YP=}=9Dop*RnNdB z@r#kY$eJzk1iV*vP^8<9eb?HyPjuV=NgBk4ZS~@7yP(*ljym;MxbDZWO;hUh>0$;~ zx|MYa#I;c`rF?ASoSAzB7n>HRvIk_bf<6Ef_0Z{yH{Y)onI2Kiv@&#q8Jap)%kPb~ zIF+^~3iM!&>;p*XHeH;x)TKp^!NeK}`)ezoL%Fi;s8XHb1ben!m9oF&pcWf!GSz66lUX zix&C+e7tW{!N)(-H*&3A^EcKcsv)LLM~`Q^UF3R)7JHe$7iZ(BgPxGqE%3K|cW67F zJqn0{tjJrV=RVNc#U2{e0#NIYb4gi|nh!C*Ug|(U4*JH4?{9#6bsTzA&)}W;6mvsd zD|GwRaha$bs)zvod4aUalpj|5jk6yvSgbvE0UKi8J|N$ngGb5PK~ zX=W{t`bgOyt+0_7d;3crai_BiKL5&b%az%Yqf9YjvY9+$?DHmv2Yn8?70a$U?`rR_ zA9aQmcs3*D%gzpQgK|QWrFmDt^S?wUH-fk7-uRwNA8Gd?a_rZ`+(#qdD8)vbM<(?A z;1}quI0a@lWA8HGr1M+!_W`wonJV|Aca7WLcXr&bjxC7~x?DhRDcvbONfLcv+I$hq zRYffcchzE(6FF2bdbH!!-oO69vp;eLs=lt>Tl}yc=V-R5FZNXMBo$tENzv|D>b(xk znS*!j0CLbjYO#@8lc2`0nnOnXW-oJt=N&cI2Jn|ESl?2oJ_o)#ypJXf%|(71cP(j( z6Yq`{TIS#=@Zxu$*53!j1WEFUp;qL|R)ITfK0fP?cp_TxFnX`_$Jn1}dmrbJEfd2) zZqf30eRzj=3EVDp$Rf$*t@7-M_W`zL^3|dVX5i~==zqj-JQwrS%3Wsi$$&!?dSVy! z_W`!S3hvD&;_9X^Y%BUOsS^Y(Z1&r09PnaXoZZApUX$yOSP^&frDdX@Av3egVINlL zn{u>cN?!OQJgLo5Byh&L&gly_Y$13GjNApYnMhh z_T>KgSKQEv&6C;{HjLrD)7z_NJoIt(cL!PnRUOc5#d*BiDKxMQ2jaUuSc3f-_vMf; zvF1N$=P`8&#yM`UV&CmZ+)Hh4x0*$ zou_AR2sAyv!FPRx{+4t4`vBVz8Jx>Da{HV-5rp&mGbhhNay_dx(b4+*0NW&S7NS0n z{Lj}|<1q^J;_x-pF^A*d&Gfwlw%Oq1J8j`!qxMnUaZnrT#-gxD@GjulBYxJNuc$4i z9%Emss9Sv2=s?G_@IOq$y?nmWZTN>*6V@51zSo5P8h|ZOr88C3hHe zJq_M!XzFU41Wui*zz$OTRJ`l3O_F);{#pEmY>mSp!t@eY$P7{GH7P z&7CFeFS7BjGRi*L@R~Ez+@|GZ+}qhlr`wjvUL-%6?*I4L$L({o;gDZa45=H$7Iojg5N%8AG-<_(D%QaSO;I*9g z;_*J-kMZ8a-)2DHuCa*kbz83SqBFA*8>2Q|e9ukoY32zteyLC2b}{~_v>oHXS!ny= z(LZ=LdqnPv`g=3_e}kIDOx$e;YVogHlQ?zou7$m&SVN56#Z`Ksml>Q1Hh~qjCpqM&kZn8H-h}Oj9Dse!D+U&2WwKMPOX2zzOXOy z<+bhz)F@DgstvxY7Wx{Cn#A+xqzH0p{hjd?xU{mZQ_Ca6*&j|k%dq1$u*MxF)+E$= z1n%PhXX-k@qpG&y_U!aAg9XrhWQV^ z0qEq~T+*njcxS4u%59Sj+sD|Oenwn>G2T%gY;o7XoIq^RZwrhT&Q9=4+7@(1PU20} zKJYztS91=H*Z6IT+XZ$A@8uZQ-*+8S!4qJRfj#j3irB+7+<7+nZNWRmm?P%e9JK32 zyOmr)+t1;F6E~DK!u&s*w4)hvY)_TFV8fp}-bKgQA zv3Dm=cM_8ij5VG$8`=-7Q&Zmq_FoxVp}2#Lf~^U^TM@d-J8`ZdzsPN3HJxR)=^`fq zeFLn4s8O`J9EjJ$HX63gaYiWrg6#~Mx(S#=_+6YAz&%lCN&(i8t@!&x{EhR9zYkkv z#zvTvfIZr}EI&A%fcsc5;*HQqan01=Njvrh@Yb=Yg($|mOMbz&3N;g>sF}o^1i6r?Cro@b^{Ygz$=`=o3gfBF zqd-3m=k^&ko};M2z<1X*AG%t8+e~HLD-Xem(h4;gwrJL%BMuwMnnP$GB8PDe&#a9F zauSS1Qu78iKInIJ^sp~aS&=^!XKnVyZ!4WpJhO@{rET)9%#VCL_?@VcVd+-fdn5T< zi21x=8-UuwUP7}MYlIbbZ;`}XuAK8Nb(?VKBxYLggVk~C-2yYP9~RHyAnV))o2+w2 zr&|VnSlfykDAB&(7WXW2Mu$&%V%`=xNyIu=`|b(u6yBSI#(jdAjn*!564VnW&nWf2 z$;*w}CG+{eLoCG35-aYvMNYyKb4u{Ckl&gySl*A5qE4H4Pmi(y+ot(^d}qcRg$}N7 zh^ruZL2O?3A#lzfP<$U(^yV#m9>496SFj(m5AnE@jlejbvr9QsoWAr&-r?PbWB)}S z4)MpFNiE_l_Z@|tglan?Y7K0G-}n8lP#ekD!H0T=&CqLbx|ur$1{CLY)s~#5hzkOn zxeB<=2`<|wU6GT(xuw=RC;KtHUK^axRNMTfb}c6{4|l-;2e~ZM=N?1MbO?FX+yz^* z5HC?}CB#;U!3TE&^PIRVOmZ>KEBR)i-f5&ux)Y5vfo_{8;xH3}p25FR!+^F~!kZFZ7ex0 z$bHRvdU6>?RryErWA>q^@_gRA7Uyegks~}Pe3!f|*)^ANd7*p{2sphd~>RXb2JS6_T z>{tt-iBi_?cn9M|79}3~!)Jke=wU{GP2fy2k)yls!T%7m5$_lGSR=+}q3o-X<(<-X zY9h{2$Vs%3C1BrtUnj@jc2N6JwWZEYW@b}aire97H+^ox$9vvMq24SpBT|;fmBSRZb=vE<)g3ly{Ivm^& z)!K=@_`crXEi!boEv&my_p(r#yyUiZSCDV4h@4=x7i^EqtS<*Xn)=>&9v3xN1t&GN zi}5#pOK-PS2L1%~yZ_+~E5mmaZPXjsx%+^Xx-O^*()~@`=XqzOCQAH<3bJ97{cxCXBs zSZfHp{il(8n_TKOZn6d14D#(Rg3AnvKZv+<7l zRo@Kf{paYgjfO{Ua*gtjuc5ZPyRfBV5X+{RV#?$}u7I|OgT zs;*Av^}kmXeUA+z-;2O+5MPA6rKh|(o;g6t_fSDh!z0~nr~5qm>w_+0ZQQ9=0?Ref zZQHvyw*1(SF|LS9o(XbiJj&619=3UQp0iLN1&xJDE^>#X_8NDr&vD0J;gn`wM?6)3 z4<+^?zfZs&9e6dwVx;1QjF;f9y9D=YU~G0Ny3eECP?>Qn!2?CkfRGzb>SSWy#k@z} zAP<~q{&v%4*4BJCx+&Hg347`+2mOz+ShYT?lkUf8H-~jTh{LqNoG!u`hAJ1!cVyi< zVr>KPH)0F^cDIP!V#3tf+>`NHSDAB@I`t~ITCEpskIOMdT`Z07{EFwXi!%pv(%d`4 z!X7dfp!+fUP%1Y*y$SfZR-&dbzvQ!{p~R(>Tp%ds~P#hgS@EA9~2p@5BteXoB=r*%i7IVrY{;{ zWWIwug1`$zZfg6ov1#04;F6bGxGt927AnBA8E{`Tu{MHuJj4tP=(CZ$pO|yHZ}Qoc zs2gVJYkz30IbpR4^;Bl&^sw(5L)+$=n9KCH3*US@V_d|M@6rvdO**lym1)JQG~sW& z_cG?}x5ZgGcK^>pue)-N#qjR4e+~EkJQn`b&9@@n-koef&QbHtgwBPJHX+t|!A{Ph zlGHkJ)Q6-dHRmxjfRnaQHEF(?fb(w<_Duu!ibYOeNoD9Lc(6|*2R8mIPx{u>g!-8y zG=EFzj5%Uc^$Ly)En4aii@hLiv5U15U;fie^Ec*2D#9;%V?H*<+4Q1=oSx(il6?Ig z(x+G51=Yh5tDs-d_I;tt#j|PQqbD}$>N`&61Vt>0xwl>Enh&Wt3D<(rxL1wBJ?Rby55ug;GvJPOK;T+<_F^rLnpcPK`)!K_4)Uro3u!hqzaLZBzO-ywzQjHp;e`%$BJvfe zljsdD^#LwuNRgXEpAWE|0Uj-jO$yxyp7v#NBtH(aq z=L2ku?DT8q$R*zy#63z}RsOCVx#?(o_{+xk%ud89+d!LUC~{}H`h0+Gu^d=8$3#t4aNMEw5iU#wN8Xm!+>Iz#dEoMqs;5!d?x1 z==h4g+9wOnN$~Ctu!P1t9~SC!2Rg;&?e{+bZz%WUhjqP0)6d1Db{lmPrQlfl&tpri ztew}XY5bmD#Z}E&T z{21*P%e?z^ZuN<%F=Wi@^s+`K)^?0Juu?k{>$brP&uk;ML|BMRWxXQ#Eq^%nHT9(< z+fNVH&Z!CE#3G7V*1;p5U)GjO>AR~zT9tDcH}KlLdi_Y^(+zHY+`@@_5SVHBEpQ+S zO`bPO1tv8{3h_B>{je(zJhb|_A=fd*X5KXbXQMlcEha9uS5)O>JQwB`aNPZKu|~M` zaYL@7oSl3Gcz0M6PP+2i{~l-Gy9hanY{bpqcT$H}dk?T3VgGUEhrkb^PMLa%Ra$u% zlm2L6B>WyZ(UL*BABS^{xu=7N1Q`0-$fvh-ru{tE#JCu7*SzQI?b44gf8a6odlG2P z8@UPRwB9n~zU1nmE~(H?SH}YFCdi@Q($@_-Lc15#$!VQ0YE#QjuY4bHn#7ZDT|n zP1H@4wHvG~>v1KFx)9(mHL*4;V~sCt;JTv`;O&R5uz#(NP{+8vBDJmRE%${ZWne(R zG@Ns7)JbS(x{~y$i{FnUIL6Src=?xZh3d19BZx zPzytj^;aCW(nYaoJDG6`k;m^Ldn@+Zs>Qhykn1RCN1X$Gzz&{%;CEh$=RHbjaH57k zBxjhu&%<_v{r%r|LZ6{A+D2@6YJU&cz6H}OBBudPoh@t~};;t~kFZ?O1>qQXu}uy+ibuw%PKp zk&VUrKRtK}&O9Zy*(IZaC(T73J|Aa|KVZ+bgtkSvGo%v_Ds(>=5A71eT1wVVy7s&m zbtEJiW2D;#E7b$0nWh)i7J6f>Z^rs&dR}p|g&0QUytTbW^jC@Rb;~%ko-U?Fuf zxr=oqGxG?Z*9rd~uZY+_^Debox}*W;u|BA_oQrA=2yp|Ok&{S9y$E7Kz!iw|;is=+ zp6Tr_hAwR*dwxtW=mZ%&8wq^?T}`p9panfV1c)K6foL>$FuMxJMvmYX?; z97z%MEob>{S-(KtF`+#{PU^hlPT-F5{s*FNW3W@I=JMMzWx3>g)^2HzgsMmM_)bnBDW^7enz)FD%V;6 zHFRR%!rZ%xesq($r!g12bjjq~Vm25TQ@QZ#)7c3E389`of}#9TgfO6Py_I`U$04oL=Aqr(&Wq<;Lm`8}{_skY>QQtQc{ zD$;;&Jf^#S;ziwaNSr(4qkm$@O%KDpMYZjkUkUk^%|bs=^38M=yq<#G%qGN&^PIk4 zs(Hzaq1!gg0u%}S00O5ab%7RcZ_k9FUl7}w;sBqk8+@0D8>#JLJ^{107`~W__;O`g zO8eX;;+MV^igf;Cm!!ObvypC_XFof(GUnn#^cyj5TcU%wBEdf&lI&DD?sVG{>OA01 z`WE^@KX0MzDte5$i}lae#(@~GtE}BnncPamq>CCztbxQ*@OeeuZ$?|q=b1Z5mvOJa zy*mi`lRWgpBzJ1J8CbyU@VDn^yPD?nw9S!kFZ@FA2&na$Q|zO!HpX4Ksg~O;(R`D( zTV%{pp(#j=1>^9njU+$TQ9Ft`BI@M)Hu0s%j?Gs_O(|%He(b?B>g@ yr#iPy^q`oov^H=oi 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